From 7d1a164bf7d63da0f595cfa7d798ebb3ddf00bd0 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 8 May 2025 14:57:49 +0300 Subject: [PATCH 001/491] Make veinminer follow diagonals --- .../java/com/hbm/handler/ToolAbility.java | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/hbm/handler/ToolAbility.java b/src/main/java/com/hbm/handler/ToolAbility.java index 2a03e79a4..4ec1f4035 100644 --- a/src/main/java/com/hbm/handler/ToolAbility.java +++ b/src/main/java/com/hbm/handler/ToolAbility.java @@ -60,22 +60,35 @@ public abstract class ToolAbility { if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) return false; - List indices = Arrays.asList(new Integer[] {0, 1, 2, 3, 4, 5}); - Collections.shuffle(indices); - pos.clear(); - - for(Integer i : indices) { - switch(i) { - case 0: breakExtra(world, x + 1, y, z, x, y, z, player, tool, 0); break; - case 1: breakExtra(world, x - 1, y, z, x, y, z, player, tool, 0); break; - case 2: breakExtra(world, x, y + 1, z, x, y, z, player, tool, 0); break; - case 3: breakExtra(world, x, y - 1, z, x, y, z, player, tool, 0); break; - case 4: breakExtra(world, x, y, z + 1, x, y, z, player, tool, 0); break; - case 5: breakExtra(world, x, y, z - 1, x, y, z, player, tool, 0); break; + + recurse(world, x, y, z, x, y, z, player, tool, 0); + + return false; + } + + private static final List offsets = new ArrayList<>(3*3*3-1); + + static { + for (int dx = -1; dx <= 1; dx++) { + for (int dy = -1; dy <= 1; dy++) { + for (int dz = -1; dz <= 1; dz++) { + if (dx != 0 || dy != 0 || dz != 0) { + offsets.add(new ThreeInts(dx, dy, dz)); + } + } } } - return false; + } + + private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemAbility tool, int depth) { + + List shuffledOffsets = new ArrayList<>(offsets); + Collections.shuffle(shuffledOffsets); + + for(ThreeInts offset : shuffledOffsets) { + breakExtra(world, x + offset.x, y + offset.y, z + offset.z, refX, refY, refZ, player, tool, depth); + } } private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemAbility tool, int depth) { @@ -112,20 +125,8 @@ public abstract class ToolAbility { return; tool.breakExtraBlock(world, x, y, z, player, refX, refY, refZ); - - List indices = Arrays.asList(new Integer[] {0, 1, 2, 3, 4, 5}); - Collections.shuffle(indices); - - for(Integer i : indices) { - switch(i) { - case 0: breakExtra(world, x + 1, y, z, refX, refY, refZ, player, tool, depth); break; - case 1: breakExtra(world, x - 1, y, z, refX, refY, refZ, player, tool, depth); break; - case 2: breakExtra(world, x, y + 1, z, refX, refY, refZ, player, tool, depth); break; - case 3: breakExtra(world, x, y - 1, z, refX, refY, refZ, player, tool, depth); break; - case 4: breakExtra(world, x, y, z + 1, refX, refY, refZ, player, tool, depth); break; - case 5: breakExtra(world, x, y, z - 1, refX, refY, refZ, player, tool, depth); break; - } - } + + recurse(world, x, y, z, refX, refY, refZ, player, tool, depth); } private boolean isSameBlock(Block b1, Block b2) { From 0d141f56b1b225f83081e3a8296f0ab0010f9d1f Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 8 May 2025 15:09:31 +0300 Subject: [PATCH 002/491] Fix import --- src/main/java/com/hbm/handler/ToolAbility.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hbm/handler/ToolAbility.java b/src/main/java/com/hbm/handler/ToolAbility.java index 4ec1f4035..1ce02283b 100644 --- a/src/main/java/com/hbm/handler/ToolAbility.java +++ b/src/main/java/com/hbm/handler/ToolAbility.java @@ -1,6 +1,7 @@ package com.hbm.handler; import java.util.Arrays; +import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; From 71998aca4100d0b222e244e1ea2033afec3e35db Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 8 May 2025 16:58:05 +0200 Subject: [PATCH 003/491] bobms --- .../weapon/sedna/factory/GunFactory.java | 4 +- .../sedna/factory/GunFactoryClient.java | 2 + .../weapon/sedna/factory/LegoClient.java | 29 +++++++++++++ .../weapon/sedna/factory/XFactoryTool.java | 43 ++++++++++++++++++- .../weapon/sedna/ItemRenderChargeThrower.java | 23 ++++++++-- .../weapon/sedna/ItemRenderMinigunDual.java | 1 - 6 files changed, 93 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index 002a35c66..f12233377 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -100,7 +100,7 @@ public class GunFactory { G10, G10_SHRAPNEL, G10_DU, G10_SLUG, R762_HE, BMG50_HE, G10_EXPLOSIVE, P45_SP, P45_FMJ, P45_JHP, P45_AP, P45_DU, - CT_HOOK, + CT_HOOK, CT_MORTAR, CT_MORTAR_CHARGE, //ONLY ADD NEW ENTRIES AT THE BOTTOM TO AVOID SHIFTING! ; @@ -127,7 +127,7 @@ public class GunFactory { TAU_URANIUM, COIL_TUNGSTEN, COIL_FERROURANIUM, NUKE_STANDARD, NUKE_DEMO, NUKE_HIGH, NUKE_TOTS, NUKE_HIVE, - CT_HOOK, + CT_HOOK, CT_MORTAR, CT_MORTAR_CHARGE, }; public Enum[] getOrder() { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 46d0cc495..e568369a9 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -220,6 +220,8 @@ public class GunFactoryClient { p35800.setRendererBeam(LegoClient.RENDER_CRACKLE); ct_hook.setRenderer(LegoClient.RENDER_CT_HOOK); + ct_mortar.setRenderer(LegoClient.RENDER_CT_MORTAR); + ct_mortar_charge.setRenderer(LegoClient.RENDER_CT_MORTAR_CHARGE); setRendererBulk(LegoClient.RENDER_GRENADE, shell_normal, shell_explosive, shell_ap, shell_du, shell_w9); //TODO: change the sabots diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java index bedc1285a..f3d2e68a5 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java @@ -576,4 +576,33 @@ public class LegoClient { tessellator.addVertexWithUV(a - jX, b, c - jZ, wrap, 1); tessellator.addVertexWithUV(a + jX, b, c + jZ, wrap, 0); } + + public static BiConsumer RENDER_CT_MORTAR = (bullet, interp) -> { + + GL11.glPushMatrix(); + GL11.glScalef(0.125F, 0.125F, 0.125F); + GL11.glRotated(90, 0, -1, 0); + GL11.glRotated(180, 0, 0, 1); + GL11.glTranslatef(0, 0, -6F); + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_mortar_tex); + ResourceManager.charge_thrower.renderPart("Mortar"); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + }; + + public static BiConsumer RENDER_CT_MORTAR_CHARGE = (bullet, interp) -> { + + GL11.glPushMatrix(); + GL11.glScalef(0.125F, 0.125F, 0.125F); + GL11.glRotated(90, 0, -1, 0); + GL11.glRotated(180, 0, 0, 1); + GL11.glTranslatef(0, 0, -6F); + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_mortar_tex); + ResourceManager.charge_thrower.renderPart("Mortar"); + ResourceManager.charge_thrower.renderPart("Oomph"); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java index a21c6e555..58e7729f9 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java @@ -4,7 +4,17 @@ import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Consumer; +import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityBulletBaseMK4; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.BlockAllocatorBulkie; +import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; +import com.hbm.explosion.vanillant.standard.BlockMutatorBulkie; +import com.hbm.explosion.vanillant.standard.BlockMutatorDebris; +import com.hbm.explosion.vanillant.standard.BlockProcessorStandard; +import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; +import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon; +import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.Crosshair; @@ -16,6 +26,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.impl.ItemGunChargeThrower; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; +import com.hbm.particle.helper.ExplosionCreator; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; @@ -30,6 +41,8 @@ import net.minecraft.util.MovingObjectPosition; public class XFactoryTool { public static BulletConfig ct_hook; + public static BulletConfig ct_mortar; + public static BulletConfig ct_mortar_charge; public static Consumer LAMBDA_SET_HOOK = (entity) -> { EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity; @@ -49,17 +62,43 @@ public class XFactoryTool { bullet.getStuck(mop.blockX, mop.blockY, mop.blockZ, mop.sideHit); } }; + + public static BiConsumer LAMBDA_MORTAR = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; + ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 5, bullet.getThrower()); + vnt.setBlockAllocator(new BlockAllocatorBulkie(60, 8)); + vnt.setBlockProcessor(new BlockProcessorStandard()); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, bullet.damage).setupPiercing(bullet.config.armorThresholdNegation, bullet.config.armorPiercingPercent)); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + vnt.setSFX(new ExplosionEffectWeapon(10, 2.5F, 1F)); + vnt.explode(); + }; + + public static BiConsumer LAMBDA_MORTAR_CHARGE = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; + ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 15, bullet.getThrower()); + vnt.setBlockAllocator(new BlockAllocatorStandard()); + vnt.setBlockProcessor(new BlockProcessorStandard().setNoDrop().withBlockEffect(new BlockMutatorDebris(ModBlocks.block_slag, 1))); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, bullet.damage).setupPiercing(bullet.config.armorThresholdNegation, bullet.config.armorPiercingPercent)); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + ExplosionCreator.composeEffectSmall(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord + 0.5, mop.hitVec.zCoord); + vnt.explode(); + }; public static void init() { - ct_hook = new BulletConfig().setItem(EnumAmmo.CT_HOOK).setRenderRotations(false).setLife(1200).setVel(2F).setGrav(0.035D).setDoesPenetrate(true).setDamageFalloffByPen(false) + ct_hook = new BulletConfig().setItem(EnumAmmo.CT_HOOK).setRenderRotations(false).setLife(6_000).setVel(2F).setGrav(0.035D).setDoesPenetrate(true).setDamageFalloffByPen(false) .setOnUpdate(LAMBDA_SET_HOOK).setOnImpact(LAMBDA_HOOK); + ct_mortar = new BulletConfig().setItem(EnumAmmo.CT_MORTAR).setLife(200).setVel(2F).setGrav(0.035D) + .setOnImpact(LAMBDA_MORTAR); + ct_mortar_charge = new BulletConfig().setItem(EnumAmmo.CT_MORTAR_CHARGE).setLife(200).setVel(2F).setGrav(0.035D) + .setOnImpact(LAMBDA_MORTAR_CHARGE); ModItems.gun_charge_thrower = new ItemGunChargeThrower(WeaponQuality.UTILITY, new GunConfig() .dura(3_000).draw(20).inspect(31).reloadChangeType(true).hideCrosshair(false).crosshair(Crosshair.L_CIRCUMFLEX) .rec(new Receiver(0) .dmg(5F).delay(4).dry(40).auto(true).spread(0F).spreadHipfire(0F).reload(60).jam(55).sound("hbm:weapon.fire.grenade", 1.0F, 1.0F) - .mag(new MagazineFullReload(0, 1).addConfigs(ct_hook)) + .mag(new MagazineFullReload(0, 1).addConfigs(ct_hook, ct_mortar, ct_mortar_charge)) .offset(1, -0.0625 * 2.5, -0.25D) .setupStandardFire().recoil(LAMBDA_RECOIL_CT)) .setupStandardConfiguration() diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java index 5d6ad1bb9..1d46d93b2 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java @@ -58,14 +58,20 @@ public class ItemRenderChargeThrower extends ItemRenderWeaponBase { if(isScoped(stack) && !usingScope) ResourceManager.charge_thrower.renderPart("Scope"); if(mag.getAmount(stack, null) > 0) { - + if(mag.getType(stack, null) == XFactoryTool.ct_hook) { Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_hook_tex); ResourceManager.charge_thrower.renderPart("Hook"); } - //Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_mortar_tex); - //ResourceManager.charge_thrower.renderPart("Mortar"); - //ResourceManager.charge_thrower.renderPart("Oomph"); + if(mag.getType(stack, null) == XFactoryTool.ct_mortar) { + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_mortar_tex); + ResourceManager.charge_thrower.renderPart("Mortar"); + } + if(mag.getType(stack, null) == XFactoryTool.ct_mortar_charge) { + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_mortar_tex); + ResourceManager.charge_thrower.renderPart("Mortar"); + ResourceManager.charge_thrower.renderPart("Oomph"); + } //Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_rocket_tex); //ResourceManager.charge_thrower.renderPart("Rocket"); } @@ -117,6 +123,15 @@ public class ItemRenderChargeThrower extends ItemRenderWeaponBase { Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_hook_tex); ResourceManager.charge_thrower.renderPart("Hook"); } + if(mag.getType(stack, null) == XFactoryTool.ct_mortar) { + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_mortar_tex); + ResourceManager.charge_thrower.renderPart("Mortar"); + } + if(mag.getType(stack, null) == XFactoryTool.ct_mortar_charge) { + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_mortar_tex); + ResourceManager.charge_thrower.renderPart("Mortar"); + ResourceManager.charge_thrower.renderPart("Oomph"); + } } GL11.glShadeModel(GL11.GL_FLAT); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMinigunDual.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMinigunDual.java index bd65653b9..8cb34f24f 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMinigunDual.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMinigunDual.java @@ -138,7 +138,6 @@ public class ItemRenderMinigunDual extends ItemRenderWeaponBase { GL11.glShadeModel(GL11.GL_SMOOTH); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.minigun_dual_tex); ResourceManager.minigun.renderPart(index == 0 ? "GunDual" : "Gun"); - ResourceManager.minigun.renderPart("Grip"); ResourceManager.minigun.renderPart("Barrels"); GL11.glShadeModel(GL11.GL_FLAT); } From 21088af66f2b68585016377bb682ce5617049b92 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 8 May 2025 23:10:21 +0200 Subject: [PATCH 004/491] i cast: delete everything in that general direction --- src/main/java/com/hbm/blocks/ModBlocks.java | 4 +- .../com/hbm/blocks/bomb/BlockCrashedBomb.java | 11 +- .../weapon/sedna/factory/XFactoryTool.java | 7 +- src/main/java/com/hbm/lib/HbmWorldGen.java | 4 +- .../java/com/hbm/main/ResourceManager.java | 6 + .../render/tileentity/RenderCrashedBomb.java | 23 +- .../bomb/TileEntityCrashedBomb.java | 10 +- src/main/java/com/hbm/world/feature/Dud.java | 3 +- .../hbm/models/bombs/dud_conventional.obj | 940 +++++++++++ .../assets/hbm/models/bombs/dud_nuke.obj | 799 ++++++++++ .../assets/hbm/models/bombs/dud_salted.obj | 1411 +++++++++++++++++ .../models/bombs/dud_conventional.png | Bin 0 -> 29044 bytes .../hbm/textures/models/bombs/dud_nuke.png | Bin 0 -> 22951 bytes .../hbm/textures/models/bombs/dud_salted.png | Bin 0 -> 31296 bytes .../models/weapons/charge_thrower.png | Bin 2308 -> 3034 bytes .../models/weapons/charge_thrower_hook.png | Bin 528 -> 594 bytes .../models/weapons/charge_thrower_mortar.png | Bin 821 -> 1351 bytes .../models/weapons/fatman_balefire.png | Bin 0 -> 900 bytes 18 files changed, 3191 insertions(+), 27 deletions(-) create mode 100644 src/main/resources/assets/hbm/models/bombs/dud_conventional.obj create mode 100644 src/main/resources/assets/hbm/models/bombs/dud_nuke.obj create mode 100644 src/main/resources/assets/hbm/models/bombs/dud_salted.obj create mode 100644 src/main/resources/assets/hbm/textures/models/bombs/dud_conventional.png create mode 100644 src/main/resources/assets/hbm/textures/models/bombs/dud_nuke.png create mode 100644 src/main/resources/assets/hbm/textures/models/bombs/dud_salted.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/fatman_balefire.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index ae42a0c1e..d1c604bed 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1749,7 +1749,7 @@ public class ModBlocks { vitrified_barrel = new YellowBarrel(Material.iron).setBlockName("vitrified_barrel").setCreativeTab(MainRegistry.nukeTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":barrel_vitrified"); lox_barrel = new RedBarrel(Material.iron, false).setBlockName("lox_barrel").setCreativeTab(MainRegistry.nukeTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":barrel_lox"); taint_barrel = new RedBarrel(Material.iron, false).setBlockName("taint_barrel").setCreativeTab(MainRegistry.nukeTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":barrel_taint"); - crashed_balefire = new BlockCrashedBomb(Material.iron).setBlockName("crashed_bomb").setCreativeTab(MainRegistry.nukeTab).setBlockUnbreakable().setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":crashed_balefire"); + crashed_balefire = new BlockCrashedBomb(Material.iron).setBlockName("crashed_bomb").setCreativeTab(MainRegistry.nukeTab).setBlockUnbreakable().setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":block_rust"); fireworks = new BlockFireworks(Material.iron).setBlockName("fireworks").setCreativeTab(MainRegistry.nukeTab).setResistance(5.0F); charge_dynamite = new BlockChargeDynamite().setBlockName("charge_dynamite").setCreativeTab(MainRegistry.nukeTab).setResistance(1.0F); charge_miner = new BlockChargeMiner().setBlockName("charge_miner").setCreativeTab(MainRegistry.nukeTab).setResistance(1.0F); @@ -2892,7 +2892,7 @@ public class ModBlocks { //Generic Bombs GameRegistry.registerBlock(bomb_multi, bomb_multi.getUnlocalizedName()); - GameRegistry.registerBlock(crashed_balefire, crashed_balefire.getUnlocalizedName()); + register(crashed_balefire); GameRegistry.registerBlock(fireworks, fireworks.getUnlocalizedName()); GameRegistry.registerBlock(dynamite, dynamite.getUnlocalizedName()); GameRegistry.registerBlock(tnt, tnt.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java b/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java index d1aae78d7..191b36173 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java @@ -1,5 +1,6 @@ package com.hbm.blocks.bomb; +import com.hbm.blocks.BlockEnumMulti; import com.hbm.config.BombConfig; import com.hbm.entity.logic.EntityBalefire; import com.hbm.handler.threading.PacketThreading; @@ -9,7 +10,7 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.bomb.TileEntityCrashedBomb; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; -import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -18,10 +19,14 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -public class BlockCrashedBomb extends BlockContainer implements IBomb { +public class BlockCrashedBomb extends BlockEnumMulti implements ITileEntityProvider, IBomb { + + public static enum EnumDudType { + BALEFIRE, CONVENTIONAL, NUKE, SALTED + } public BlockCrashedBomb(Material mat) { - super(mat); + super(mat, EnumDudType.class, false, false); } @Override diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java index 58e7729f9..917c06aee 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java @@ -9,7 +9,6 @@ import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.standard.BlockAllocatorBulkie; import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; -import com.hbm.explosion.vanillant.standard.BlockMutatorBulkie; import com.hbm.explosion.vanillant.standard.BlockMutatorDebris; import com.hbm.explosion.vanillant.standard.BlockProcessorStandard; import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; @@ -87,11 +86,11 @@ public class XFactoryTool { public static void init() { - ct_hook = new BulletConfig().setItem(EnumAmmo.CT_HOOK).setRenderRotations(false).setLife(6_000).setVel(2F).setGrav(0.035D).setDoesPenetrate(true).setDamageFalloffByPen(false) + ct_hook = new BulletConfig().setItem(EnumAmmo.CT_HOOK).setRenderRotations(false).setLife(6_000).setVel(3F).setGrav(0.035D).setDoesPenetrate(true).setDamageFalloffByPen(false) .setOnUpdate(LAMBDA_SET_HOOK).setOnImpact(LAMBDA_HOOK); - ct_mortar = new BulletConfig().setItem(EnumAmmo.CT_MORTAR).setLife(200).setVel(2F).setGrav(0.035D) + ct_mortar = new BulletConfig().setItem(EnumAmmo.CT_MORTAR).setLife(200).setVel(3F).setGrav(0.035D) .setOnImpact(LAMBDA_MORTAR); - ct_mortar_charge = new BulletConfig().setItem(EnumAmmo.CT_MORTAR_CHARGE).setLife(200).setVel(2F).setGrav(0.035D) + ct_mortar_charge = new BulletConfig().setItem(EnumAmmo.CT_MORTAR_CHARGE).setLife(200).setVel(3F).setGrav(0.035D) .setOnImpact(LAMBDA_MORTAR_CHARGE); ModItems.gun_charge_thrower = new ItemGunChargeThrower(WeaponQuality.UTILITY, new GunConfig() diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index 5a9f416a1..6bdbc7b8b 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -299,8 +299,8 @@ public class HbmWorldGen implements IWorldGenerator { } if(WorldConfig.dudStructure > 0 && rand.nextInt(WorldConfig.dudStructure) == 0) { - int x = i + rand.nextInt(16); - int z = j + rand.nextInt(16); + int x = i + 8 + rand.nextInt(16); + int z = j + 8 + rand.nextInt(16); int y = world.getHeightValue(x, z); new Dud().generate(world, rand, x, y, z); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 78bd4c289..7fbac54ce 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -279,6 +279,9 @@ public class ResourceManager { public static final IModelCustom bomb_multi = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/BombGeneric.obj")); public static final IModelCustom fstbmb = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/fstbmb.obj")).asVBO(); public static final IModelCustom dud_balefire = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/dud_balefire.obj")).asVBO(); + public static final IModelCustom dud_conventional = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/dud_conventional.obj")).asVBO(); + public static final IModelCustom dud_nuke = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/dud_nuke.obj")).asVBO(); + public static final IModelCustom dud_salted = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/dud_salted.obj")).asVBO(); //Satellites public static final IModelCustom sat_base = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/sat_base.obj")); @@ -731,6 +734,9 @@ public class ResourceManager { public static final ResourceLocation n45_chain_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/n45_chain.png"); public static final ResourceLocation fstbmb_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/fstbmb.png"); public static final ResourceLocation dud_balefire_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/dud_balefire.png"); + public static final ResourceLocation dud_conventional_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/dud_conventional.png"); + public static final ResourceLocation dud_nuke_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/dud_nuke.png"); + public static final ResourceLocation dud_salted_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/dud_salted.png"); //Satellites public static final ResourceLocation sat_base_tex = new ResourceLocation(RefStrings.MODID, "textures/models/sat_base.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderCrashedBomb.java b/src/main/java/com/hbm/render/tileentity/RenderCrashedBomb.java index 849016d81..2da5145d4 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCrashedBomb.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCrashedBomb.java @@ -5,12 +5,15 @@ import java.util.Random; import org.lwjgl.opengl.GL11; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.bomb.BlockCrashedBomb.EnumDudType; import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderBase; +import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.client.IItemRenderer; @@ -35,10 +38,13 @@ public class RenderCrashedBomb extends TileEntitySpecialRenderer implements IIte GL11.glRotated(pitch, 1, 0, 0); GL11.glRotated(roll, 0, 0, 1); GL11.glTranslated(0, 0, -offset); - + + EnumDudType type = EnumUtil.grabEnumSafely(EnumDudType.class, tile.getBlockMetadata()); GL11.glShadeModel(GL11.GL_SMOOTH); - bindTexture(ResourceManager.dud_balefire_tex); - ResourceManager.dud_balefire.renderAll(); + if(type == EnumDudType.BALEFIRE) { bindTexture(ResourceManager.dud_balefire_tex); ResourceManager.dud_balefire.renderAll(); } + if(type == EnumDudType.CONVENTIONAL) { bindTexture(ResourceManager.dud_conventional_tex); ResourceManager.dud_conventional.renderAll(); } + if(type == EnumDudType.NUKE) { GL11.glTranslated(0, 0, 1.25); bindTexture(ResourceManager.dud_nuke_tex); ResourceManager.dud_nuke.renderAll(); } + if(type == EnumDudType.SALTED) { GL11.glTranslated(0, 0, 0.5); bindTexture(ResourceManager.dud_salted_tex); ResourceManager.dud_salted.renderAll(); } GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); @@ -55,14 +61,17 @@ public class RenderCrashedBomb extends TileEntitySpecialRenderer implements IIte public void renderInventory() { GL11.glTranslated(0, 3, 0); - GL11.glScaled(2.75, 2.75, 2.75); + GL11.glScaled(2.125, 2.125, 2.125); GL11.glRotated(90, 0, 0, 1); } - public void renderCommon() { + public void renderCommonWithStack(ItemStack item) { + EnumDudType type = EnumUtil.grabEnumSafely(EnumDudType.class, item.getItemDamage()); GL11.glRotated(90, 0, 1, 0); GL11.glShadeModel(GL11.GL_SMOOTH); - bindTexture(ResourceManager.dud_balefire_tex); - ResourceManager.dud_balefire.renderAll(); + if(type == EnumDudType.BALEFIRE) { bindTexture(ResourceManager.dud_balefire_tex); ResourceManager.dud_balefire.renderAll(); } + if(type == EnumDudType.CONVENTIONAL) { GL11.glTranslated(0, 0, -0.5); bindTexture(ResourceManager.dud_conventional_tex); ResourceManager.dud_conventional.renderAll(); } + if(type == EnumDudType.NUKE) { GL11.glTranslated(0, 0, 1.25); bindTexture(ResourceManager.dud_nuke_tex); ResourceManager.dud_nuke.renderAll(); } + if(type == EnumDudType.SALTED) { GL11.glTranslated(0, 0, 0.5); bindTexture(ResourceManager.dud_salted_tex); ResourceManager.dud_salted.renderAll(); } GL11.glShadeModel(GL11.GL_FLAT); }}; } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCrashedBomb.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCrashedBomb.java index 2a917cee6..cf70bb5f8 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCrashedBomb.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCrashedBomb.java @@ -8,15 +8,9 @@ import net.minecraft.util.AxisAlignedBB; public class TileEntityCrashedBomb extends TileEntity { @Override - public AxisAlignedBB getRenderBoundingBox() { - return TileEntity.INFINITE_EXTENT_AABB; - } + public AxisAlignedBB getRenderBoundingBox() { return TileEntity.INFINITE_EXTENT_AABB; } @Override @SideOnly(Side.CLIENT) - public double getMaxRenderDistanceSquared() - { - return 65536.0D; - } - + public double getMaxRenderDistanceSquared() { return 65536.0D; } } diff --git a/src/main/java/com/hbm/world/feature/Dud.java b/src/main/java/com/hbm/world/feature/Dud.java index 85572aa4a..41e24a200 100644 --- a/src/main/java/com/hbm/world/feature/Dud.java +++ b/src/main/java/com/hbm/world/feature/Dud.java @@ -3,6 +3,7 @@ package com.hbm.world.feature; import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.bomb.BlockCrashedBomb.EnumDudType; import com.hbm.config.GeneralConfig; import net.minecraft.block.Block; @@ -60,7 +61,7 @@ public class Dud extends WorldGenerator { if(!LocationIsValidSpawn(world, x, y, z)) return false; - world.setBlock(x, y, z, ModBlocks.crashed_balefire, rand.nextInt(4) + 2, 3); + world.setBlock(x, y, z, ModBlocks.crashed_balefire, rand.nextInt(EnumDudType.values().length), 3); if(GeneralConfig.enableDebugMode) System.out.print("[Debug] Successfully spawned dud at " + x + " " + y + " " + z + "\n"); diff --git a/src/main/resources/assets/hbm/models/bombs/dud_conventional.obj b/src/main/resources/assets/hbm/models/bombs/dud_conventional.obj new file mode 100644 index 000000000..bf8619226 --- /dev/null +++ b/src/main/resources/assets/hbm/models/bombs/dud_conventional.obj @@ -0,0 +1,940 @@ +# Blender v2.79 (sub 7) OBJ File: 'dud1.blend' +# www.blender.org +mtllib dud_conventional.mtl +o Cube.003_Cube.005 +v 0.392370 -0.392370 -1.500000 +v 0.392370 -0.392370 2.499999 +v 0.267370 -0.392370 -1.500000 +v 0.267370 -0.392370 2.499999 +v 0.392370 -0.267370 -1.500000 +v 0.392370 -0.267370 2.499999 +v 0.267370 -0.267370 -1.500000 +v 0.267370 -0.267370 2.499999 +v -0.392369 -0.392370 -1.500000 +v -0.392370 -0.392369 2.499999 +v -0.392369 -0.267370 -1.500000 +v -0.392370 -0.267369 2.499999 +v -0.267369 -0.392370 -1.500000 +v -0.267370 -0.392369 2.499999 +v -0.267369 -0.267370 -1.500000 +v -0.267370 -0.267369 2.499999 +v -0.392370 0.392369 -1.500000 +v -0.392370 0.392370 2.499999 +v -0.267370 0.392369 -1.500000 +v -0.267370 0.392370 2.499999 +v -0.392370 0.267369 -1.500000 +v -0.392370 0.267370 2.499999 +v -0.267370 0.267369 -1.500000 +v -0.267370 0.267370 2.499999 +v 0.392369 0.392369 -1.499999 +v 0.392370 0.392370 2.499998 +v 0.392369 0.267369 -1.499999 +v 0.392370 0.267370 2.499999 +v 0.267369 0.392370 -1.499999 +v 0.267370 0.392370 2.499999 +v 0.267369 0.267370 -1.499999 +v 0.267370 0.267370 2.499999 +v 0.220971 -0.088388 -3.500000 +v 0.220971 -0.088388 -3.437500 +v 0.265165 -0.132582 -3.500000 +v 0.265165 -0.132582 -3.437500 +v 0.088388 -0.220971 -3.500000 +v 0.088388 -0.220971 -3.437500 +v 0.132583 -0.265165 -3.500000 +v 0.132583 -0.265165 -3.437500 +v 0.353553 -0.132582 -3.437500 +v 0.353553 -0.132582 -3.500000 +v 0.132583 -0.353553 -3.500000 +v 0.132583 -0.353553 -3.437500 +v 0.707107 -0.486136 -3.437500 +v 0.707107 -0.486136 -3.500000 +v 0.486136 -0.707107 -3.500000 +v 0.486136 -0.707107 -3.437500 +v -0.088388 -0.220971 -3.500000 +v -0.088388 -0.220971 -3.437500 +v -0.132582 -0.265166 -3.500000 +v -0.132582 -0.265166 -3.437500 +v -0.220970 -0.088389 -3.500000 +v -0.220970 -0.088389 -3.437500 +v -0.265165 -0.132583 -3.500000 +v -0.265165 -0.132583 -3.437500 +v -0.132582 -0.353554 -3.437500 +v -0.132582 -0.353554 -3.500000 +v -0.353553 -0.132583 -3.500000 +v -0.353553 -0.132583 -3.437500 +v -0.486135 -0.707107 -3.437500 +v -0.486135 -0.707107 -3.500000 +v -0.707106 -0.486136 -3.500000 +v -0.707106 -0.486136 -3.437500 +v -0.220971 0.088387 -3.500000 +v -0.220971 0.088387 -3.437500 +v -0.265165 0.132582 -3.500000 +v -0.265165 0.132582 -3.437500 +v -0.088388 0.220970 -3.500000 +v -0.088388 0.220970 -3.437500 +v -0.132582 0.265164 -3.500000 +v -0.132582 0.265164 -3.437500 +v -0.353553 0.132582 -3.437500 +v -0.353553 0.132582 -3.500000 +v -0.132583 0.353552 -3.500000 +v -0.132582 0.353552 -3.437500 +v -0.707107 0.486135 -3.437501 +v -0.707107 0.486135 -3.500001 +v -0.486136 0.707106 -3.500001 +v -0.486136 0.707106 -3.437501 +v 0.088388 0.220970 -3.500000 +v 0.088388 0.220970 -3.437500 +v 0.132582 0.265164 -3.500000 +v 0.132582 0.265164 -3.437500 +v 0.220970 0.088388 -3.500000 +v 0.220970 0.088388 -3.437500 +v 0.265164 0.132582 -3.500000 +v 0.265164 0.132582 -3.437500 +v 0.132582 0.353553 -3.437501 +v 0.132582 0.353553 -3.500000 +v 0.353553 0.132582 -3.500000 +v 0.353553 0.132582 -3.437500 +v 0.486135 0.707106 -3.437501 +v 0.486135 0.707106 -3.500001 +v 0.707106 0.486135 -3.500001 +v 0.707106 0.486135 -3.437501 +v 0.420463 -0.062500 -1.424884 +v 0.420463 0.062500 -1.424884 +v 0.420463 0.000000 -1.500000 +v 0.920463 -0.062500 -1.674884 +v 0.920463 0.000000 -1.750000 +v 0.920463 0.062500 -1.674884 +v 0.420463 -0.062500 0.424884 +v 0.420463 -0.000000 0.500000 +v 0.420463 0.062500 0.424884 +v 0.920463 -0.062500 0.174884 +v 0.920463 0.062500 0.174884 +v 0.920463 -0.000000 0.250000 +v -0.420463 -0.062500 -1.424884 +v -0.420463 0.062500 -1.424884 +v -0.420463 0.000000 -1.500000 +v -0.920463 -0.062500 -1.674884 +v -0.920463 0.000000 -1.750000 +v -0.920463 0.062500 -1.674884 +v -0.420463 -0.062500 0.424884 +v -0.420463 -0.000000 0.500000 +v -0.420463 0.062500 0.424884 +v -0.920463 -0.062500 0.174884 +v -0.920463 0.062500 0.174884 +v -0.920463 -0.000000 0.250000 +v -0.186935 -0.031250 3.781250 +v -0.186935 -0.031250 4.156250 +v -0.186935 0.031250 3.781250 +v -0.186935 0.031250 4.156250 +v -0.124435 -0.031250 3.781250 +v -0.124435 -0.031250 4.156250 +v -0.124435 0.031250 3.781250 +v -0.124435 0.031250 4.156250 +v 0.186935 -0.031250 3.781250 +v 0.186935 -0.031250 4.156250 +v 0.186935 0.031250 3.781250 +v 0.186935 0.031250 4.156250 +v 0.124435 -0.031250 3.781250 +v 0.124435 -0.031250 4.156250 +v 0.124435 0.031250 3.781250 +v 0.124435 0.031250 4.156250 +v -0.000000 0.482963 -2.000000 +v -0.000000 0.482962 3.000000 +v 0.241481 0.418258 -2.000000 +v 0.241481 0.418258 3.000000 +v 0.418258 0.241481 -2.000000 +v 0.418258 0.241481 3.000000 +v 0.482963 0.000000 -2.000000 +v 0.482963 -0.000000 3.000000 +v 0.418258 -0.241481 -2.000000 +v 0.418258 -0.241482 3.000000 +v 0.241481 -0.418258 -2.000000 +v 0.241481 -0.418258 3.000000 +v 0.000000 -0.482963 -2.000000 +v 0.000000 -0.482963 3.000000 +v -0.241481 -0.418258 -2.000000 +v -0.241481 -0.418258 3.000000 +v -0.418258 -0.241481 -2.000000 +v -0.418258 -0.241482 3.000000 +v -0.482963 -0.000000 -2.000000 +v -0.482963 -0.000000 3.000000 +v -0.418258 0.241481 -2.000000 +v -0.418258 0.241481 3.000000 +v -0.241482 0.418258 -2.000000 +v -0.241482 0.418258 3.000000 +v 0.000000 0.241481 -3.000000 +v 0.120741 0.209129 -3.000000 +v 0.209129 0.120741 -3.000000 +v 0.241481 0.000000 -3.000000 +v 0.209129 -0.120741 -3.000000 +v 0.120741 -0.209129 -3.000000 +v 0.000000 -0.241481 -3.000000 +v -0.120741 -0.209129 -3.000000 +v -0.209129 -0.120741 -3.000000 +v -0.241481 -0.000000 -3.000000 +v -0.209129 0.120741 -3.000000 +v -0.120741 0.209129 -3.000000 +v 0.000000 0.241481 -3.500000 +v 0.120741 0.209129 -3.500000 +v 0.209129 0.120741 -3.500000 +v 0.241481 0.000000 -3.500000 +v 0.209129 -0.120741 -3.500000 +v 0.120741 -0.209129 -3.500000 +v 0.000000 -0.241481 -3.500000 +v -0.120741 -0.209129 -3.500000 +v -0.209129 -0.120741 -3.500000 +v -0.241481 -0.000000 -3.500000 +v -0.209129 0.120741 -3.500000 +v -0.120741 0.209129 -3.500000 +v 0.120741 0.209129 3.750000 +v -0.000000 0.241481 3.750000 +v 0.209129 0.120740 3.750000 +v 0.241481 -0.000000 3.750000 +v 0.209129 -0.120741 3.750000 +v 0.120741 -0.209129 3.750000 +v 0.000000 -0.241481 3.750000 +v -0.120741 -0.209129 3.750000 +v -0.209129 -0.120741 3.750000 +v -0.241481 -0.000000 3.750000 +v -0.209129 0.120740 3.750000 +v -0.120741 0.209129 3.750000 +v 0.000000 -0.000000 4.000000 +vt 0.382857 0.042857 +vt 0.017143 0.071429 +vt 0.017143 0.042857 +vt 0.382857 0.014286 +vt 0.017143 0.014286 +vt 0.005714 0.014286 +vt 0.005714 0.042857 +vt 0.394286 0.042857 +vt 0.394286 0.014286 +vt 0.382857 0.114286 +vt 0.017143 0.142857 +vt 0.017143 0.114286 +vt 0.382857 0.085714 +vt 0.017143 0.085714 +vt 0.005714 0.085714 +vt 0.005714 0.114286 +vt 0.394286 0.114286 +vt 0.394286 0.085714 +vt 0.382857 0.185714 +vt 0.017143 0.214286 +vt 0.017143 0.185714 +vt 0.382857 0.157143 +vt 0.017143 0.157143 +vt 0.005714 0.157143 +vt 0.005714 0.185714 +vt 0.394286 0.185714 +vt 0.394286 0.157143 +vt 0.382857 0.257143 +vt 0.017143 0.285714 +vt 0.017143 0.257143 +vt 0.017143 0.228571 +vt 0.005714 0.228571 +vt 0.005714 0.257143 +vt 0.394286 0.257143 +vt 0.382857 0.228571 +vt 0.394286 0.228571 +vt 0.691429 0.128571 +vt 0.685714 0.142857 +vt 0.685714 0.128571 +vt 0.657143 0.142857 +vt 0.651429 0.157143 +vt 0.651429 0.142857 +vt 0.657143 0.128571 +vt 0.662857 0.142857 +vt 0.680000 0.128571 +vt 0.680000 0.142857 +vt 0.645714 0.142857 +vt 0.628571 0.128571 +vt 0.645714 0.128571 +vt 0.657143 0.157143 +vt 0.651429 0.271429 +vt 0.622857 0.157143 +vt 0.628571 0.142857 +vt 0.691429 0.142857 +vt 0.685714 0.157143 +vt 0.685714 0.285714 +vt 0.657143 0.271429 +vt 0.685714 0.271429 +vt 0.622857 0.271429 +vt 0.691429 0.157143 +vt 0.617143 0.128571 +vt 0.611429 0.142857 +vt 0.611429 0.128571 +vt 0.582857 0.142857 +vt 0.577143 0.157143 +vt 0.577143 0.142857 +vt 0.582857 0.128571 +vt 0.588571 0.142857 +vt 0.605714 0.128571 +vt 0.605714 0.142857 +vt 0.571429 0.142857 +vt 0.554286 0.128571 +vt 0.571429 0.128571 +vt 0.582857 0.157143 +vt 0.577143 0.271429 +vt 0.548571 0.157143 +vt 0.554286 0.142857 +vt 0.617143 0.142857 +vt 0.611429 0.157143 +vt 0.611429 0.285714 +vt 0.582857 0.271429 +vt 0.611429 0.271429 +vt 0.548571 0.271429 +vt 0.617143 0.157143 +vt 0.542857 0.128571 +vt 0.537143 0.142857 +vt 0.537143 0.128571 +vt 0.502857 0.142857 +vt 0.508571 0.157143 +vt 0.502857 0.157143 +vt 0.508571 0.142857 +vt 0.502857 0.128571 +vt 0.508571 0.128571 +vt 0.514286 0.142857 +vt 0.531429 0.128571 +vt 0.531429 0.142857 +vt 0.480000 0.142857 +vt 0.497143 0.128571 +vt 0.497143 0.142857 +vt 0.502857 0.271429 +vt 0.474286 0.157143 +vt 0.542857 0.142857 +vt 0.537143 0.157143 +vt 0.537143 0.285714 +vt 0.508571 0.271429 +vt 0.537143 0.271429 +vt 0.474286 0.271429 +vt 0.542857 0.271429 +vt 0.468571 0.128571 +vt 0.462857 0.142857 +vt 0.462857 0.128571 +vt 0.434286 0.142857 +vt 0.428571 0.157143 +vt 0.428571 0.142857 +vt 0.434286 0.128571 +vt 0.440000 0.142857 +vt 0.457143 0.128571 +vt 0.457143 0.142857 +vt 0.422857 0.142857 +vt 0.405714 0.128571 +vt 0.422857 0.128571 +vt 0.434286 0.157143 +vt 0.428571 0.271429 +vt 0.400000 0.157143 +vt 0.405714 0.142857 +vt 0.468571 0.157143 +vt 0.462857 0.157143 +vt 0.462857 0.285714 +vt 0.434286 0.271429 +vt 0.462857 0.271429 +vt 0.400000 0.271429 +vt 0.468571 0.271429 +vt 0.862857 0.968548 +vt 0.862857 0.545738 +vt 0.874286 0.545738 +vt 0.805714 0.557143 +vt 0.760000 0.928571 +vt 0.760000 0.500000 +vt 0.857143 0.928571 +vt 0.811429 0.557143 +vt 0.857143 0.500000 +vt 0.805714 0.471429 +vt 0.760000 0.485714 +vt 0.760000 0.471429 +vt 0.760000 0.457143 +vt 0.805714 0.457143 +vt 0.857143 0.471429 +vt 0.811429 0.485714 +vt 0.811429 0.471429 +vt 0.811429 0.457143 +vt 0.857143 0.457143 +vt 0.880000 0.545738 +vt 0.891429 0.968548 +vt 0.880000 0.968548 +vt 0.948571 0.557143 +vt 0.994286 0.928571 +vt 0.948571 0.985714 +vt 0.942857 0.557143 +vt 0.897143 0.928571 +vt 0.897143 0.500000 +vt 0.994286 0.485714 +vt 0.948571 0.471429 +vt 0.994286 0.471429 +vt 0.994286 0.457143 +vt 0.942857 0.485714 +vt 0.897143 0.471429 +vt 0.942857 0.471429 +vt 0.942857 0.457143 +vt 0.714286 0.757143 +vt 0.748571 0.771429 +vt 0.748571 0.757143 +vt 0.714286 0.771429 +vt 0.748571 0.785714 +vt 0.714286 0.728571 +vt 0.748571 0.742857 +vt 0.748571 0.728571 +vt 0.714286 0.742857 +vt 0.708571 0.757143 +vt 0.708571 0.771429 +vt 0.748571 0.814286 +vt 0.714286 0.828571 +vt 0.748571 0.828571 +vt 0.748571 0.800000 +vt 0.714286 0.814286 +vt 0.748571 0.842857 +vt 0.714286 0.857143 +vt 0.748571 0.857143 +vt 0.714286 0.842857 +vt 0.708571 0.828571 +vt 0.708571 0.814286 +vt 0.382857 0.071429 +vt 0.382857 0.142857 +vt 0.382857 0.214286 +vt 0.382857 0.285714 +vt 0.651429 0.128571 +vt 0.662857 0.128571 +vt 0.657143 0.285714 +vt 0.691429 0.271429 +vt 0.577143 0.128571 +vt 0.588571 0.128571 +vt 0.582857 0.285714 +vt 0.617143 0.271429 +vt 0.514286 0.128571 +vt 0.480000 0.128571 +vt 0.542857 0.157143 +vt 0.508571 0.285714 +vt 0.468571 0.142857 +vt 0.428571 0.128571 +vt 0.440000 0.128571 +vt 0.434286 0.285714 +vt 0.868571 0.528571 +vt 0.874286 0.968548 +vt 0.868571 0.985714 +vt 0.805714 0.985714 +vt 0.811429 0.985714 +vt 0.805714 0.485714 +vt 0.857143 0.485714 +vt 0.885714 0.528571 +vt 0.891429 0.545738 +vt 0.885714 0.985714 +vt 0.994286 0.500000 +vt 0.942857 0.985714 +vt 0.948571 0.485714 +vt 0.948571 0.457143 +vt 0.897143 0.485714 +vt 0.897143 0.457143 +vt 0.714286 0.785714 +vt 0.714286 0.800000 +vt 0.102857 0.471429 +vt 0.560000 0.414286 +vt 0.560000 0.471429 +vt 0.102857 0.414286 +vt 0.560000 0.357143 +vt 0.102857 0.357143 +vt 0.560000 0.300000 +vt 0.102857 0.985714 +vt 0.560000 0.928571 +vt 0.560000 0.985714 +vt 0.102857 0.928571 +vt 0.560000 0.871429 +vt 0.102857 0.871429 +vt 0.560000 0.814286 +vt 0.102857 0.814286 +vt 0.560000 0.757143 +vt 0.102857 0.757143 +vt 0.560000 0.700000 +vt 0.102857 0.700000 +vt 0.560000 0.642857 +vt 0.102857 0.642857 +vt 0.560000 0.585714 +vt 0.034286 0.942857 +vt 0.102857 0.585714 +vt 0.560000 0.528571 +vt 0.102857 0.528571 +vt 0.651429 0.400000 +vt 0.657143 0.642857 +vt 0.702857 0.671429 +vt 0.657143 0.671429 +vt 0.651429 0.628571 +vt 0.651429 0.685714 +vt 0.651429 0.742857 +vt 0.651429 0.800000 +vt 0.651429 0.857143 +vt 0.651429 0.914286 +vt 0.651429 0.971429 +vt 0.651429 0.514286 +vt 0.651429 0.457143 +vt 0.651429 0.342857 +vt 0.651429 0.571429 +vt 0.753847 0.928913 +vt 0.720484 0.976662 +vt 0.720625 0.880554 +vt 0.657143 0.785714 +vt 0.702857 0.814286 +vt 0.657143 0.814286 +vt 0.657143 0.871429 +vt 0.702857 0.900000 +vt 0.657143 0.900000 +vt 0.657143 0.957143 +vt 0.702857 0.985714 +vt 0.657143 0.985714 +vt 0.657143 0.757143 +vt 0.702857 0.785714 +vt 0.657143 0.700000 +vt 0.702857 0.728571 +vt 0.657143 0.728571 +vt 0.657143 0.842857 +vt 0.702857 0.871429 +vt 0.657143 0.928571 +vt 0.702857 0.957143 +vt 0.702857 0.757143 +vt 0.702857 0.700000 +vt 0.702857 0.842857 +vt 0.702857 0.928571 +vt 0.034286 0.828571 +vt 0.034286 0.857143 +vt 0.005714 0.842857 +vt 0.034286 0.485714 +vt 0.034286 0.428571 +vt 0.034286 0.314286 +vt 0.102857 0.300000 +vt 0.034286 0.542857 +vt 0.034286 0.371429 +vt 0.034286 0.600000 +vt 0.034286 0.685714 +vt 0.034286 0.657143 +vt 0.034286 0.714286 +vt 0.034286 0.771429 +vt 0.034286 0.885714 +vt 0.034286 0.342857 +vt 0.005714 0.328571 +vt 0.034286 0.628571 +vt 0.005714 0.614286 +vt 0.034286 0.800000 +vt 0.005714 0.785714 +vt 0.034286 0.971429 +vt 0.005714 0.957143 +vt 0.034286 0.571429 +vt 0.005714 0.557143 +vt 0.034286 0.457143 +vt 0.005714 0.442857 +vt 0.034286 0.742857 +vt 0.005714 0.728571 +vt 0.034286 0.914286 +vt 0.005714 0.900000 +vt 0.034286 0.514286 +vt 0.005714 0.500000 +vt 0.034286 0.400000 +vt 0.005714 0.385714 +vt 0.005714 0.671429 +vt 0.651429 0.371429 +vt 0.702857 0.642857 +vt 0.651429 0.600000 +vt 0.651429 0.657143 +vt 0.651429 0.714286 +vt 0.651429 0.771429 +vt 0.651429 0.828571 +vt 0.651429 0.885714 +vt 0.651429 0.942857 +vt 0.651429 0.485714 +vt 0.651429 0.428571 +vt 0.651429 0.314286 +vt 0.651429 0.542857 +vt 0.731734 0.873222 +vt 0.742820 0.880758 +vt 0.750915 0.901142 +vt 0.750833 0.956630 +vt 0.742679 0.976865 +vt 0.731571 0.984197 +vt 0.712390 0.956277 +vt 0.709457 0.928506 +vt 0.712471 0.900789 +vn -0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 0.0000 -1.0000 +vn -0.0000 0.0000 1.0000 +vn -1.0000 0.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.7071 0.7071 -0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn -0.3046 0.7322 -0.6092 +vn -0.3046 -0.7322 -0.6092 +vn 0.3046 0.7322 0.6092 +vn 0.3046 -0.7322 0.6092 +vn 0.3046 0.7322 -0.6092 +vn 0.3046 -0.7322 -0.6092 +vn -0.3046 0.7322 0.6092 +vn -0.3046 -0.7322 0.6092 +vn 0.0000 0.9885 0.1513 +vn 0.4966 0.8602 -0.1160 +vn 0.0000 0.9932 -0.1160 +vn 0.4942 0.8560 0.1513 +vn 0.8602 0.4966 -0.1160 +vn 0.8560 0.4942 0.1513 +vn 0.9932 0.0000 -0.1160 +vn 0.9885 0.0000 0.1513 +vn 0.8602 -0.4966 -0.1160 +vn 0.8560 -0.4942 0.1513 +vn 0.4966 -0.8602 -0.1160 +vn 0.4942 -0.8560 0.1513 +vn 0.0000 -0.9932 -0.1160 +vn 0.0000 -0.9885 0.1513 +vn -0.4966 -0.8602 -0.1160 +vn -0.4942 -0.8560 0.1513 +vn -0.8602 -0.4966 -0.1160 +vn -0.8560 -0.4942 0.1513 +vn -0.9932 0.0000 -0.1160 +vn -0.9885 0.0000 0.1513 +vn -0.8602 0.4966 -0.1160 +vn 0.7509 -0.4335 0.4981 +vn -0.8560 0.4942 0.1513 +vn -0.4966 0.8602 -0.1160 +vn -0.4942 0.8560 0.1513 +vn 0.4964 0.8597 -0.1205 +vn 0.9927 0.0000 -0.1205 +vn 0.6557 0.3786 -0.6532 +vn 0.8597 0.4964 -0.1205 +vn -0.9927 0.0000 -0.1205 +vn -0.8597 -0.4964 -0.1205 +vn -0.4963 -0.8597 -0.1205 +vn 0.0000 -0.9927 -0.1205 +vn 0.4964 -0.8597 -0.1205 +vn 0.8597 -0.4964 -0.1205 +vn -0.4964 0.8597 -0.1205 +vn 0.0000 0.9927 -0.1205 +vn -0.8597 0.4964 -0.1205 +vn 0.7571 0.0000 -0.6532 +vn -0.3786 -0.6557 -0.6532 +vn -0.3786 0.6557 -0.6532 +vn -0.7571 0.0000 -0.6532 +vn 0.0000 -0.7571 -0.6532 +vn -0.6557 0.3786 -0.6532 +vn 0.0000 0.7571 -0.6532 +vn 0.6557 -0.3786 -0.6532 +vn 0.3786 0.6557 -0.6532 +vn -0.6557 -0.3786 -0.6532 +vn 0.3786 -0.6557 -0.6532 +vn 0.0000 -0.8671 0.4981 +vn 0.4335 -0.7509 0.4981 +vn 0.0000 0.8671 0.4981 +vn 0.4335 0.7509 0.4981 +vn 0.8671 0.0000 0.4981 +vn -0.4335 0.7509 0.4981 +vn 0.7509 0.4335 0.4981 +vn -0.7509 0.4335 0.4981 +vn -0.7509 -0.4335 0.4981 +vn -0.8671 0.0000 0.4981 +vn -0.4335 -0.7509 0.4981 +usemtl None +s off +f 2/1/1 3/2/1 1/3/1 +f 6/4/2 1/3/2 5/5/2 +f 7/6/3 1/3/3 3/7/3 +f 4/8/4 6/4/4 8/9/4 +f 10/10/5 11/11/5 9/12/5 +f 14/13/1 9/12/1 13/14/1 +f 15/15/3 9/12/3 11/16/3 +f 12/17/4 14/13/4 16/18/4 +f 18/19/6 19/20/6 17/21/6 +f 22/22/5 17/21/5 21/23/5 +f 23/24/3 17/21/3 19/25/3 +f 20/26/4 22/22/4 24/27/4 +f 26/28/2 27/29/2 25/30/2 +f 29/31/6 26/28/6 25/30/6 +f 31/32/3 25/30/3 27/33/3 +f 28/34/4 30/35/4 32/36/4 +f 34/37/7 35/38/7 33/39/7 +f 39/40/5 44/41/5 40/42/5 +f 40/42/8 37/43/8 39/40/8 +f 39/44/3 33/45/3 35/46/3 +f 40/47/4 34/48/4 38/49/4 +f 43/50/8 48/51/8 44/41/8 +f 35/46/3 43/50/3 39/44/3 +f 40/47/4 41/52/4 36/53/4 +f 36/54/6 42/55/6 35/38/6 +f 45/56/9 47/57/9 46/58/9 +f 42/55/3 47/57/3 43/50/3 +f 44/41/4 45/59/4 41/52/4 +f 41/60/7 46/58/7 42/55/7 +f 50/61/9 51/62/9 49/63/9 +f 55/64/6 60/65/6 56/66/6 +f 56/66/10 53/67/10 55/64/10 +f 55/68/3 49/69/3 51/70/3 +f 56/71/4 50/72/4 54/73/4 +f 59/74/10 64/75/10 60/65/10 +f 51/70/3 59/74/3 55/68/3 +f 56/71/4 57/76/4 52/77/4 +f 52/78/2 58/79/2 51/62/2 +f 61/80/8 63/81/8 62/82/8 +f 59/74/3 62/82/3 63/81/3 +f 60/65/4 61/83/4 57/76/4 +f 57/84/9 62/82/9 58/79/9 +f 66/85/8 67/86/8 65/87/8 +f 72/88/2 75/89/2 76/90/2 +f 71/91/7 70/92/7 69/93/7 +f 71/94/3 65/95/3 67/96/3 +f 68/97/4 70/98/4 72/99/4 +f 75/89/7 80/100/7 76/90/7 +f 67/96/3 75/89/3 71/94/3 +f 72/99/4 73/101/4 68/97/4 +f 68/102/1 74/103/1 67/86/1 +f 77/104/10 79/105/10 78/106/10 +f 74/103/3 79/105/3 75/89/3 +f 76/90/4 77/107/4 73/101/4 +f 74/103/8 77/108/8 78/106/8 +f 82/109/10 83/110/10 81/111/10 +f 87/112/1 92/113/1 88/114/1 +f 88/114/9 85/115/9 87/112/9 +f 87/116/3 81/117/3 83/118/3 +f 88/119/4 82/120/4 86/121/4 +f 91/122/9 96/123/9 92/113/9 +f 83/118/3 91/122/3 87/116/3 +f 88/119/4 89/124/4 84/125/4 +f 83/110/5 89/126/5 90/127/5 +f 93/128/7 95/129/7 94/130/7 +f 90/127/3 95/129/3 91/122/3 +f 92/113/4 93/131/4 89/124/4 +f 90/127/10 93/132/10 94/130/10 +f 106/133/2 100/134/2 102/135/2 +f 98/136/6 107/137/6 102/138/6 +f 106/139/1 97/140/1 100/141/1 +f 99/142/11 102/143/11 101/144/11 +f 99/142/12 100/145/12 97/146/12 +f 108/147/13 105/148/13 104/149/13 +f 108/147/14 103/150/14 106/151/14 +f 114/152/5 118/153/5 119/154/5 +f 110/155/6 119/156/6 117/157/6 +f 109/158/1 118/159/1 112/160/1 +f 114/161/15 111/162/15 113/163/15 +f 111/162/16 112/164/16 113/163/16 +f 117/165/17 120/166/17 116/167/17 +f 120/166/18 115/168/18 116/167/18 +f 122/169/5 123/170/5 121/171/5 +f 124/172/6 127/173/6 123/170/6 +f 128/174/2 125/175/2 127/176/2 +f 126/177/1 121/171/1 125/175/1 +f 124/172/4 126/178/4 128/179/4 +f 131/180/2 130/181/2 129/182/2 +f 135/183/6 132/184/6 131/180/6 +f 133/185/5 136/186/5 135/187/5 +f 129/182/1 134/188/1 133/185/1 +f 134/189/4 132/184/4 136/190/4 +f 2/1/1 4/191/1 3/2/1 +f 6/4/2 2/1/2 1/3/2 +f 7/6/3 5/5/3 1/3/3 +f 4/8/4 2/1/4 6/4/4 +f 10/10/5 12/192/5 11/11/5 +f 14/13/1 10/10/1 9/12/1 +f 15/15/3 13/14/3 9/12/3 +f 12/17/4 10/10/4 14/13/4 +f 18/19/6 20/193/6 19/20/6 +f 22/22/5 18/19/5 17/21/5 +f 23/24/3 21/23/3 17/21/3 +f 20/26/4 18/19/4 22/22/4 +f 26/28/2 28/194/2 27/29/2 +f 29/31/6 30/35/6 26/28/6 +f 31/32/3 29/31/3 25/30/3 +f 28/34/4 26/28/4 30/35/4 +f 34/37/7 36/54/7 35/38/7 +f 39/40/5 43/50/5 44/41/5 +f 40/42/8 38/195/8 37/43/8 +f 39/44/3 37/196/3 33/45/3 +f 40/47/4 36/53/4 34/48/4 +f 43/50/8 47/57/8 48/51/8 +f 35/46/3 42/55/3 43/50/3 +f 40/47/4 44/41/4 41/52/4 +f 36/54/6 41/60/6 42/55/6 +f 45/56/9 48/197/9 47/57/9 +f 42/55/3 46/58/3 47/57/3 +f 44/41/4 48/51/4 45/59/4 +f 41/60/7 45/198/7 46/58/7 +f 50/61/9 52/78/9 51/62/9 +f 55/64/6 59/74/6 60/65/6 +f 56/66/10 54/199/10 53/67/10 +f 55/68/3 53/200/3 49/69/3 +f 56/71/4 52/77/4 50/72/4 +f 59/74/10 63/81/10 64/75/10 +f 51/70/3 58/79/3 59/74/3 +f 56/71/4 60/65/4 57/76/4 +f 52/78/2 57/84/2 58/79/2 +f 61/80/8 64/201/8 63/81/8 +f 59/74/3 58/79/3 62/82/3 +f 60/65/4 64/75/4 61/83/4 +f 57/84/9 61/202/9 62/82/9 +f 66/85/8 68/102/8 67/86/8 +f 72/88/2 71/91/2 75/89/2 +f 71/91/7 72/88/7 70/92/7 +f 71/94/3 69/203/3 65/95/3 +f 68/97/4 66/204/4 70/98/4 +f 75/89/7 79/105/7 80/100/7 +f 67/96/3 74/103/3 75/89/3 +f 72/99/4 76/90/4 73/101/4 +f 68/102/1 73/205/1 74/103/1 +f 77/104/10 80/206/10 79/105/10 +f 74/103/3 78/106/3 79/105/3 +f 76/90/4 80/100/4 77/107/4 +f 74/103/8 73/205/8 77/108/8 +f 82/109/10 84/207/10 83/110/10 +f 87/112/1 91/122/1 92/113/1 +f 88/114/9 86/208/9 85/115/9 +f 87/116/3 85/209/3 81/117/3 +f 88/119/4 84/125/4 82/120/4 +f 91/122/9 95/129/9 96/123/9 +f 83/118/3 90/127/3 91/122/3 +f 88/119/4 92/113/4 89/124/4 +f 83/110/5 84/207/5 89/126/5 +f 93/128/7 96/210/7 95/129/7 +f 90/127/3 94/130/3 95/129/3 +f 92/113/4 96/123/4 93/131/4 +f 90/127/10 89/126/10 93/132/10 +f 100/134/2 101/211/2 102/135/2 +f 102/135/2 107/212/2 106/133/2 +f 107/212/2 108/213/2 106/133/2 +f 98/136/6 105/214/6 107/137/6 +f 106/139/1 103/215/1 97/140/1 +f 99/142/11 98/216/11 102/143/11 +f 99/142/12 101/144/12 100/145/12 +f 108/147/13 107/217/13 105/148/13 +f 108/147/14 104/149/14 103/150/14 +f 114/152/5 113/218/5 112/219/5 +f 112/219/5 118/153/5 114/152/5 +f 118/153/5 120/220/5 119/154/5 +f 110/155/6 114/221/6 119/156/6 +f 109/158/1 115/222/1 118/159/1 +f 114/161/15 110/223/15 111/162/15 +f 111/162/16 109/224/16 112/164/16 +f 117/165/17 119/225/17 120/166/17 +f 120/166/18 118/226/18 115/168/18 +f 122/169/5 124/172/5 123/170/5 +f 124/172/6 128/227/6 127/173/6 +f 128/174/2 126/177/2 125/175/2 +f 126/177/1 122/169/1 121/171/1 +f 124/172/4 122/169/4 126/178/4 +f 131/180/2 132/184/2 130/181/2 +f 135/183/6 136/228/6 132/184/6 +f 133/185/5 134/188/5 136/186/5 +f 129/182/1 130/181/1 134/188/1 +f 134/189/4 130/181/4 132/184/4 +s 1 +f 138/229/19 139/230/20 137/231/21 +f 140/232/22 141/233/23 139/230/20 +f 142/234/24 143/235/25 141/233/23 +f 144/236/26 145/237/27 143/238/25 +f 146/239/28 147/240/29 145/237/27 +f 148/241/30 149/242/31 147/240/29 +f 150/243/32 151/244/33 149/242/31 +f 152/245/34 153/246/35 151/244/33 +f 154/247/36 155/248/37 153/246/35 +f 156/249/38 157/250/39 155/248/37 +f 144/236/26 189/251/40 146/239/28 +f 158/252/41 159/253/42 157/250/39 +f 160/254/43 137/231/21 159/253/42 +f 141/233/23 162/255/44 139/230/20 +f 164/256/45 175/257/46 163/258/47 +f 157/250/39 170/259/48 155/248/37 +f 155/248/37 169/260/49 153/246/35 +f 153/246/35 168/261/50 151/244/33 +f 151/244/33 167/262/51 149/242/31 +f 149/242/31 166/263/52 147/240/29 +f 147/240/29 165/264/53 145/237/27 +f 145/237/27 164/265/45 143/238/25 +f 137/231/21 172/266/54 159/253/42 +f 139/230/20 161/267/55 137/231/21 +f 143/235/25 163/268/47 141/233/23 +f 159/253/42 171/269/56 157/250/39 +f 176/270/57 180/271/58 184/272/59 +f 171/273/56 182/274/60 170/275/48 +f 168/276/50 179/277/61 167/278/51 +f 165/279/53 176/280/57 164/281/45 +f 172/282/54 183/283/62 171/273/56 +f 162/284/44 173/285/63 161/286/55 +f 169/287/49 180/288/58 168/276/50 +f 166/289/52 177/290/64 165/279/53 +f 161/286/55 184/291/59 172/282/54 +f 163/258/47 174/292/65 162/284/44 +f 170/275/48 181/293/66 169/287/49 +f 167/278/51 178/294/67 166/289/52 +f 191/295/68 190/296/69 197/297/4 +f 160/254/43 186/298/70 138/229/19 +f 138/229/19 185/299/71 140/232/22 +f 142/234/24 188/300/72 144/301/26 +f 158/252/41 196/302/73 160/254/43 +f 140/232/22 187/303/74 142/234/24 +f 156/249/38 195/304/75 158/252/41 +f 156/249/38 193/305/76 194/306/77 +f 152/245/34 193/307/76 154/247/36 +f 150/243/32 192/308/78 152/245/34 +f 148/241/30 191/295/68 150/243/32 +f 146/239/28 190/309/69 148/241/30 +f 188/300/72 187/310/74 197/311/4 +f 195/304/75 194/312/77 197/313/4 +f 192/308/78 191/314/68 197/315/4 +f 189/251/40 188/316/72 197/317/4 +f 196/302/73 195/318/75 197/319/4 +f 185/299/71 186/320/70 197/321/4 +f 193/307/76 192/322/78 197/323/4 +f 190/309/69 189/324/40 197/325/4 +f 186/298/70 196/326/73 197/327/4 +f 187/303/74 185/328/71 197/329/4 +f 194/306/77 193/305/76 197/330/4 +f 138/229/19 140/232/22 139/230/20 +f 140/232/22 142/234/24 141/233/23 +f 142/234/24 144/301/26 143/235/25 +f 144/236/26 146/239/28 145/237/27 +f 146/239/28 148/241/30 147/240/29 +f 148/241/30 150/243/32 149/242/31 +f 150/243/32 152/245/34 151/244/33 +f 152/245/34 154/247/36 153/246/35 +f 154/247/36 156/249/38 155/248/37 +f 156/249/38 158/252/41 157/250/39 +f 144/236/26 188/316/72 189/251/40 +f 158/252/41 160/254/43 159/253/42 +f 160/254/43 138/229/19 137/231/21 +f 141/233/23 163/331/47 162/255/44 +f 164/256/45 176/332/57 175/257/46 +f 157/250/39 171/333/56 170/259/48 +f 155/248/37 170/334/48 169/260/49 +f 153/246/35 169/335/49 168/261/50 +f 151/244/33 168/336/50 167/262/51 +f 149/242/31 167/337/51 166/263/52 +f 147/240/29 166/338/52 165/264/53 +f 145/237/27 165/339/53 164/265/45 +f 137/231/21 161/340/55 172/266/54 +f 139/230/20 162/341/44 161/267/55 +f 143/235/25 164/342/45 163/268/47 +f 159/253/42 172/343/54 171/269/56 +f 184/272/59 173/344/63 176/270/57 +f 173/344/63 174/345/65 176/270/57 +f 174/345/65 175/346/46 176/270/57 +f 176/270/57 177/347/64 178/348/67 +f 178/348/67 179/349/61 176/270/57 +f 179/349/61 180/271/58 176/270/57 +f 180/271/58 181/350/66 182/351/60 +f 182/351/60 183/352/62 184/272/59 +f 180/271/58 182/351/60 184/272/59 +f 171/273/56 183/283/62 182/274/60 +f 168/276/50 180/288/58 179/277/61 +f 165/279/53 177/290/64 176/280/57 +f 172/282/54 184/291/59 183/283/62 +f 162/284/44 174/292/65 173/285/63 +f 169/287/49 181/293/66 180/288/58 +f 166/289/52 178/294/67 177/290/64 +f 161/286/55 173/285/63 184/291/59 +f 163/258/47 175/257/46 174/292/65 +f 170/275/48 182/274/60 181/293/66 +f 167/278/51 179/277/61 178/294/67 +f 160/254/43 196/326/73 186/298/70 +f 138/229/19 186/320/70 185/299/71 +f 142/234/24 187/310/74 188/300/72 +f 158/252/41 195/318/75 196/302/73 +f 140/232/22 185/328/71 187/303/74 +f 156/249/38 194/312/77 195/304/75 +f 156/249/38 154/247/36 193/305/76 +f 152/245/34 192/322/78 193/307/76 +f 150/243/32 191/314/68 192/308/78 +f 148/241/30 190/296/69 191/295/68 +f 146/239/28 189/324/40 190/309/69 diff --git a/src/main/resources/assets/hbm/models/bombs/dud_nuke.obj b/src/main/resources/assets/hbm/models/bombs/dud_nuke.obj new file mode 100644 index 000000000..7d9c18355 --- /dev/null +++ b/src/main/resources/assets/hbm/models/bombs/dud_nuke.obj @@ -0,0 +1,799 @@ +# Blender v2.79 (sub 7) OBJ File: 'flat fuck.blend' +# www.blender.org +mtllib flat_fuck.mtl +o Cube.001_Cube.002 +v 0.218750 -0.031250 -3.812500 +v 0.218750 0.031250 -3.812500 +v 0.218750 -0.031250 -4.187500 +v 0.218750 0.031250 -4.187500 +v 0.406250 -0.031250 -4.000000 +v 0.343750 -0.031250 -3.812500 +v 0.343750 0.031250 -3.812500 +v 0.406250 0.031250 -4.000000 +v 0.343750 -0.031250 -4.187500 +v 0.406250 -0.031250 -4.125000 +v 0.406250 0.031250 -4.125000 +v 0.343750 0.031250 -4.187500 +v -0.218750 -0.031250 -3.812500 +v -0.218750 0.031250 -3.812500 +v -0.218750 -0.031250 -4.187500 +v -0.218750 0.031250 -4.187500 +v -0.406250 -0.031250 -4.000000 +v -0.343750 -0.031250 -3.812500 +v -0.343750 0.031250 -3.812500 +v -0.406250 0.031250 -4.000000 +v -0.343750 -0.031250 -4.187500 +v -0.406250 -0.031250 -4.125000 +v -0.406250 0.031250 -4.125000 +v -0.343750 0.031250 -4.187500 +v -0.031250 0.572454 -0.406250 +v -0.031250 0.697454 -0.406250 +v -0.031250 0.572454 -0.593750 +v -0.031250 0.697454 -0.593750 +v 0.031250 0.572454 -0.406250 +v 0.031250 0.697454 -0.406250 +v 0.031250 0.572454 -0.593750 +v 0.031250 0.697454 -0.593750 +v -0.031250 0.759954 -0.468750 +v 0.031250 0.759954 -0.468750 +v -0.511384 0.259164 -0.406250 +v -0.619638 0.321664 -0.406250 +v -0.511385 0.259164 -0.593750 +v -0.619638 0.321664 -0.593750 +v -0.480135 0.313290 -0.406250 +v -0.588388 0.375790 -0.406250 +v -0.480135 0.313290 -0.593750 +v -0.588388 0.375790 -0.593750 +v -0.673764 0.352914 -0.468750 +v -0.642514 0.407040 -0.468750 +v -0.480134 -0.313290 -0.406250 +v -0.588388 -0.375790 -0.406250 +v -0.480134 -0.313290 -0.593750 +v -0.588388 -0.375790 -0.593750 +v -0.511384 -0.259164 -0.406250 +v -0.619638 -0.321664 -0.406250 +v -0.511384 -0.259164 -0.593750 +v -0.619638 -0.321664 -0.593750 +v -0.642514 -0.407040 -0.468750 +v -0.673764 -0.352914 -0.468750 +v 0.031250 -0.572454 -0.406250 +v 0.031250 -0.697454 -0.406250 +v 0.031250 -0.572454 -0.593750 +v 0.031250 -0.697454 -0.593750 +v -0.031250 -0.572454 -0.406250 +v -0.031250 -0.697454 -0.406250 +v -0.031250 -0.572454 -0.593750 +v -0.031250 -0.697454 -0.593750 +v 0.031250 -0.759954 -0.468750 +v -0.031250 -0.759954 -0.468750 +v 0.511385 -0.259163 -0.406250 +v 0.619638 -0.321663 -0.406250 +v 0.511385 -0.259163 -0.593750 +v 0.619638 -0.321663 -0.593750 +v 0.480135 -0.313290 -0.406250 +v 0.588388 -0.375790 -0.406250 +v 0.480135 -0.313290 -0.593750 +v 0.588388 -0.375790 -0.593750 +v 0.673764 -0.352913 -0.468750 +v 0.642515 -0.407040 -0.468750 +v 0.480134 0.313290 -0.406250 +v 0.588388 0.375790 -0.406250 +v 0.480134 0.313290 -0.593750 +v 0.588388 0.375790 -0.593750 +v 0.511384 0.259164 -0.406250 +v 0.619638 0.321664 -0.406250 +v 0.511384 0.259164 -0.593750 +v 0.619638 0.321664 -0.593750 +v 0.642514 0.407040 -0.468750 +v 0.673764 0.352914 -0.468750 +v -0.176777 0.132583 -3.625000 +v -0.176777 0.132583 -4.375000 +v -0.132583 0.176777 -3.625000 +v -0.132583 0.176777 -4.375000 +v -0.574524 0.530330 -3.625000 +v -0.618719 0.574524 -3.687500 +v -0.618719 0.574524 -4.312500 +v -0.574524 0.530330 -4.375000 +v -0.574524 0.618718 -3.687500 +v -0.530330 0.574524 -3.625000 +v -0.530330 0.574524 -4.375000 +v -0.574524 0.618718 -4.312500 +v -0.132583 -0.176777 -3.625000 +v -0.132583 -0.176777 -4.375000 +v -0.176777 -0.132583 -3.625000 +v -0.176777 -0.132583 -4.375000 +v -0.530330 -0.574524 -3.625000 +v -0.574525 -0.618719 -3.687500 +v -0.574525 -0.618719 -4.312500 +v -0.530331 -0.574524 -4.375000 +v -0.618719 -0.574524 -3.687500 +v -0.574525 -0.530330 -3.625000 +v -0.574525 -0.530330 -4.375000 +v -0.618719 -0.574524 -4.312500 +v 0.176776 -0.132583 -3.624999 +v 0.176776 -0.132583 -4.374999 +v 0.132582 -0.176777 -3.624999 +v 0.132582 -0.176777 -4.374999 +v 0.574524 -0.530331 -3.624999 +v 0.618718 -0.574525 -3.687499 +v 0.618718 -0.574525 -4.312499 +v 0.574524 -0.530331 -4.374999 +v 0.574524 -0.618719 -3.687499 +v 0.530330 -0.574525 -3.624999 +v 0.530330 -0.574525 -4.374999 +v 0.574524 -0.618719 -4.312499 +v 0.132583 0.176776 -3.624999 +v 0.132583 0.176776 -4.374999 +v 0.176777 0.132582 -3.624999 +v 0.176777 0.132582 -4.374999 +v 0.530330 0.574524 -3.624999 +v 0.574524 0.618718 -3.687499 +v 0.574524 0.618718 -4.312499 +v 0.530330 0.574524 -4.374999 +v 0.618719 0.574524 -3.687499 +v 0.574524 0.530330 -3.624999 +v 0.574524 0.530330 -4.374999 +v 0.618719 0.574524 -4.312499 +v 0.000000 0.603704 -1.500000 +v 0.000000 0.603704 1.500000 +v 0.301852 0.522823 -1.500000 +v 0.301852 0.522823 1.500000 +v 0.522823 0.301852 -1.500000 +v 0.522823 0.301852 1.500000 +v 0.603704 0.000000 -1.500000 +v 0.603704 -0.000000 1.500000 +v 0.522823 -0.301852 -1.500000 +v 0.522823 -0.301852 1.500000 +v 0.301852 -0.522823 -1.500000 +v 0.301852 -0.522823 1.500000 +v 0.000000 -0.603704 -1.500000 +v 0.000000 -0.603704 1.500000 +v -0.301852 -0.522823 -1.500000 +v -0.301852 -0.522823 1.500000 +v -0.522823 -0.301852 -1.500000 +v -0.522823 -0.301852 1.500000 +v -0.603704 -0.000000 -1.500000 +v -0.603704 -0.000000 1.500000 +v -0.522823 0.301852 -1.500000 +v -0.522823 0.301852 1.500000 +v -0.301852 0.522823 -1.500000 +v -0.301852 0.522823 1.500000 +v -0.000000 0.241482 -4.500000 +v 0.120741 0.209129 -4.500000 +v 0.209129 0.120741 -4.500000 +v 0.241481 0.000000 -4.500000 +v 0.209129 -0.120741 -4.500000 +v 0.120741 -0.209129 -4.500000 +v 0.000000 -0.241481 -4.500000 +v -0.120741 -0.209129 -4.500000 +v -0.209129 -0.120741 -4.500000 +v -0.241481 0.000000 -4.500000 +v -0.209129 0.120741 -4.500000 +v -0.120741 0.209129 -4.500000 +vt 0.731034 0.370968 +vt 0.724138 0.338710 +vt 0.724138 0.370968 +vt 0.731034 0.338710 +vt 0.751724 0.387097 +vt 0.765517 0.387097 +vt 0.751724 0.403226 +vt 0.765517 0.403226 +vt 0.772414 0.338710 +vt 0.779310 0.370968 +vt 0.779310 0.338710 +vt 0.779310 0.387097 +vt 0.772414 0.370968 +vt 0.772414 0.387097 +vt 0.731034 0.419355 +vt 0.703448 0.387097 +vt 0.731034 0.435484 +vt 0.724138 0.467742 +vt 0.731034 0.467742 +vt 0.682759 0.435484 +vt 0.682759 0.467742 +vt 0.703448 0.483871 +vt 0.703448 0.500000 +vt 0.689655 0.483871 +vt 0.689655 0.500000 +vt 0.675862 0.467742 +vt 0.675862 0.435484 +vt 0.675862 0.483871 +vt 0.682759 0.483871 +vt 0.724138 0.516129 +vt 0.751724 0.483871 +vt 0.765517 0.483871 +vt 0.772414 0.467742 +vt 0.724138 0.209677 +vt 0.703448 0.177419 +vt 0.724138 0.177419 +vt 0.703448 0.209677 +vt 0.696552 0.177419 +vt 0.696552 0.209677 +vt 0.675862 0.177419 +vt 0.731034 0.209677 +vt 0.731034 0.177419 +vt 0.717241 0.225806 +vt 0.724138 0.225806 +vt 0.696552 0.241935 +vt 0.675862 0.209677 +vt 0.682759 0.225806 +vt 0.786207 0.290323 +vt 0.765517 0.258065 +vt 0.786207 0.258065 +vt 0.758621 0.290323 +vt 0.758621 0.258065 +vt 0.737931 0.258065 +vt 0.793103 0.258065 +vt 0.765517 0.290323 +vt 0.779310 0.306452 +vt 0.793103 0.290323 +vt 0.786207 0.306452 +vt 0.758621 0.322581 +vt 0.737931 0.290323 +vt 0.744828 0.306452 +vt 0.786207 0.209677 +vt 0.765517 0.177419 +vt 0.786207 0.177419 +vt 0.758621 0.209677 +vt 0.758621 0.177419 +vt 0.737931 0.209677 +vt 0.737931 0.177419 +vt 0.793103 0.209677 +vt 0.793103 0.177419 +vt 0.765517 0.209677 +vt 0.779310 0.225806 +vt 0.786207 0.225806 +vt 0.765517 0.241935 +vt 0.758621 0.241935 +vt 0.744828 0.225806 +vt 0.724138 0.129032 +vt 0.703448 0.096774 +vt 0.724138 0.096774 +vt 0.703448 0.129032 +vt 0.696552 0.096774 +vt 0.675862 0.129032 +vt 0.675862 0.096774 +vt 0.731034 0.129032 +vt 0.731034 0.096774 +vt 0.717241 0.145161 +vt 0.731034 0.145161 +vt 0.724138 0.145161 +vt 0.696552 0.161290 +vt 0.696552 0.129032 +vt 0.682759 0.145161 +vt 0.786207 0.129032 +vt 0.765517 0.096774 +vt 0.786207 0.096774 +vt 0.765517 0.129032 +vt 0.758621 0.096774 +vt 0.758621 0.129032 +vt 0.737931 0.096774 +vt 0.793103 0.129032 +vt 0.793103 0.096774 +vt 0.779310 0.145161 +vt 0.793103 0.145161 +vt 0.786207 0.145161 +vt 0.758621 0.161290 +vt 0.737931 0.129032 +vt 0.744828 0.145161 +vt 0.724138 0.258065 +vt 0.703448 0.290323 +vt 0.703448 0.258065 +vt 0.696552 0.258065 +vt 0.675862 0.290323 +vt 0.675862 0.258065 +vt 0.731034 0.290323 +vt 0.731034 0.258065 +vt 0.724138 0.290323 +vt 0.717241 0.306452 +vt 0.731034 0.306452 +vt 0.724138 0.306452 +vt 0.696552 0.322581 +vt 0.696552 0.290323 +vt 0.682759 0.306452 +vt 0.917241 0.774194 +vt 0.986207 0.790323 +vt 0.917241 0.790323 +vt 0.827586 0.774194 +vt 0.820690 0.758065 +vt 0.820690 0.612903 +vt 0.910345 0.758065 +vt 0.910345 0.612903 +vt 0.903448 0.612903 +vt 0.910345 0.774194 +vt 0.903448 0.758065 +vt 0.813793 0.774194 +vt 0.820690 0.774194 +vt 0.813793 0.758065 +vt 0.813793 0.612903 +vt 0.917241 0.580645 +vt 0.986207 0.596774 +vt 0.917241 0.596774 +vt 0.827586 0.580645 +vt 0.820690 0.564516 +vt 0.820690 0.419355 +vt 0.910345 0.564516 +vt 0.910345 0.419355 +vt 0.903448 0.419355 +vt 0.910345 0.580645 +vt 0.903448 0.564516 +vt 0.813793 0.580645 +vt 0.820690 0.580645 +vt 0.813793 0.419355 +vt 0.917241 0.387097 +vt 0.986207 0.403226 +vt 0.917241 0.403226 +vt 0.827586 0.387097 +vt 0.820690 0.370968 +vt 0.820690 0.225806 +vt 0.910345 0.370968 +vt 0.910345 0.225806 +vt 0.903448 0.370968 +vt 0.903448 0.225806 +vt 0.903448 0.387097 +vt 0.910345 0.387097 +vt 0.820690 0.387097 +vt 0.813793 0.370968 +vt 0.813793 0.225806 +vt 0.917241 0.983871 +vt 0.986207 0.967742 +vt 0.986207 0.983871 +vt 0.827586 0.967742 +vt 0.820690 0.951613 +vt 0.820690 0.806452 +vt 0.917241 0.967742 +vt 0.910345 0.951613 +vt 0.910345 0.806452 +vt 0.903448 0.951613 +vt 0.903448 0.806452 +vt 0.903448 0.967742 +vt 0.910345 0.967742 +vt 0.820690 0.967742 +vt 0.813793 0.951613 +vt 0.813793 0.806452 +vt 0.687135 0.905981 +vt 0.742256 0.683307 +vt 0.797152 0.906284 +vt 0.729378 0.596377 +vt 0.716764 0.648801 +vt 0.677939 0.597702 +vt 0.724138 0.419355 +vt 0.682759 0.338710 +vt 0.682759 0.370968 +vt 0.689655 0.387097 +vt 0.724138 0.435484 +vt 0.731034 0.516129 +vt 0.772414 0.435484 +vt 0.731034 0.225806 +vt 0.703448 0.241935 +vt 0.793103 0.306452 +vt 0.765517 0.322581 +vt 0.793103 0.225806 +vt 0.703448 0.161290 +vt 0.765517 0.161290 +vt 0.703448 0.322581 +vt 0.986207 0.774194 +vt 0.896552 0.774194 +vt 0.993103 0.612903 +vt 0.993103 0.758065 +vt 0.903448 0.774194 +vt 0.986207 0.580645 +vt 0.896552 0.580645 +vt 0.993103 0.419355 +vt 0.993103 0.564516 +vt 0.903448 0.580645 +vt 0.813793 0.564516 +vt 0.986207 0.387097 +vt 0.896552 0.387097 +vt 0.993103 0.225806 +vt 0.993103 0.370968 +vt 0.813793 0.387097 +vt 0.896552 0.967742 +vt 0.993103 0.806452 +vt 0.993103 0.951613 +vt 0.813793 0.967742 +vt 0.773875 0.960593 +vt 0.742106 0.980407 +vt 0.710357 0.960418 +vt 0.678663 0.831683 +vt 0.687210 0.757431 +vt 0.710486 0.703122 +vt 0.774005 0.703296 +vt 0.797226 0.757733 +vt 0.805699 0.832032 +vt 0.703942 0.657191 +vt 0.691044 0.649463 +vt 0.681527 0.627689 +vt 0.681243 0.567538 +vt 0.690554 0.545279 +vt 0.703375 0.536889 +vt 0.716273 0.544617 +vt 0.725791 0.566391 +vt 0.726074 0.626541 +vt 0.006897 0.500000 +vt 0.337931 0.419355 +vt 0.337931 0.500000 +vt 0.006897 0.338710 +vt 0.337931 0.338710 +vt 0.337931 0.258065 +vt 0.006897 0.258065 +vt 0.337931 0.177419 +vt 0.006897 0.177419 +vt 0.337931 0.096774 +vt 0.006897 0.096774 +vt 0.337931 0.016129 +vt 0.006897 0.983871 +vt 0.337931 0.903226 +vt 0.337931 0.983871 +vt 0.006897 0.903226 +vt 0.337931 0.822581 +vt 0.006897 0.822581 +vt 0.337931 0.741935 +vt 0.006897 0.741935 +vt 0.337931 0.661290 +vt 0.006897 0.661290 +vt 0.337931 0.580645 +vt 0.006897 0.580645 +vt 0.668966 0.967742 +vt 0.668966 0.048387 +vt 0.668966 0.080645 +vt 0.668966 0.161290 +vt 0.668966 0.241935 +vt 0.668966 0.564516 +vt 0.668966 0.451613 +vt 0.668966 0.483871 +vt 0.668966 0.322581 +vt 0.668966 0.612903 +vt 0.668966 0.645161 +vt 0.668966 0.403226 +vt 0.668966 0.693548 +vt 0.668966 0.725806 +vt 0.668966 0.806452 +vt 0.668966 0.887097 +vt 0.006897 0.419355 +vt 0.006897 0.016129 +vt 0.668966 0.935484 +vt 0.668966 0.129032 +vt 0.668966 0.209677 +vt 0.668966 0.532258 +vt 0.668966 0.290323 +vt 0.668966 0.370968 +vt 0.668966 0.774194 +vt 0.668966 0.854839 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.9487 0.0000 0.3162 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 0.0000 -0.7071 +vn -0.9487 0.0000 0.3162 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.8944 -0.4472 +vn -0.5000 -0.8660 -0.0000 +vn 0.5000 0.8660 0.0000 +vn -0.6124 0.3536 0.7071 +vn -0.7746 0.4472 -0.4472 +vn 0.5000 -0.8660 0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.6124 -0.3536 0.7071 +vn -0.7746 -0.4472 -0.4472 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.8944 -0.4472 +vn 0.6124 -0.3536 0.7071 +vn 0.7746 -0.4472 -0.4472 +vn 0.6124 0.3536 0.7071 +vn 0.7746 0.4472 -0.4472 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.5000 0.5000 -0.7071 +vn -0.5000 0.5000 0.7071 +vn 0.7071 -0.7071 0.0000 +vn -0.5000 -0.5000 -0.7071 +vn -0.5000 -0.5000 0.7071 +vn 0.5000 -0.5000 -0.7071 +vn 0.5000 -0.5000 0.7071 +vn 0.5000 0.5000 -0.7071 +vn 0.5000 0.5000 0.7071 +vn 0.0000 0.7571 0.6532 +vn 0.4991 0.8645 -0.0595 +vn 0.0000 0.9982 -0.0595 +vn 0.6557 0.3786 0.6532 +vn 0.8645 0.4991 -0.0595 +vn 0.9982 0.0000 -0.0595 +vn 0.7571 0.0000 0.6532 +vn 0.8645 -0.4991 -0.0595 +vn 0.6557 -0.3786 0.6532 +vn 0.4991 -0.8645 -0.0595 +vn 0.3786 -0.6557 0.6532 +vn 0.0000 -0.9982 -0.0595 +vn 0.0000 -0.7571 0.6532 +vn -0.4991 -0.8645 -0.0595 +vn -0.3786 -0.6557 0.6532 +vn -0.8645 -0.4991 -0.0595 +vn -0.6557 -0.3786 0.6532 +vn -0.9982 0.0000 -0.0595 +vn -0.7571 0.0000 0.6532 +vn -0.8645 0.4991 -0.0595 +vn -0.6557 0.3786 0.6532 +vn -0.4991 0.8645 -0.0595 +vn -0.3786 0.6557 0.6532 +vn 0.0000 -0.7169 -0.6972 +vn 0.3584 -0.6208 -0.6972 +vn 0.6208 -0.3584 -0.6972 +vn 0.7169 0.0000 -0.6972 +vn -0.3584 0.6208 -0.6972 +vn 0.3584 0.6208 -0.6972 +vn 0.0000 0.7169 -0.6972 +vn 0.6208 0.3584 -0.6972 +vn -0.6208 0.3584 -0.6972 +vn -0.7169 0.0000 -0.6972 +vn -0.6208 -0.3584 -0.6972 +vn -0.3584 -0.6208 -0.6972 +vn 0.3786 0.6557 0.6532 +usemtl None +s off +f 7/1/1 1/2/1 6/3/1 +f 2/4/2 7/1/2 8/5/2 +f 11/6/3 5/7/3 10/8/3 +f 4/9/4 9/10/4 3/11/4 +f 10/12/5 12/13/5 11/14/5 +f 6/3/6 8/15/6 7/1/6 +f 5/16/7 6/3/7 1/2/7 +f 13/17/1 19/18/1 18/19/1 +f 16/20/2 24/21/2 20/22/2 +f 17/23/8 23/24/8 22/25/8 +f 21/26/4 16/20/4 15/27/4 +f 24/21/9 22/28/9 23/29/9 +f 20/30/10 18/19/10 19/18/10 +f 17/31/7 22/32/7 21/33/7 +f 26/34/8 27/35/8 25/36/8 +f 28/37/4 31/38/4 27/35/4 +f 32/39/3 29/40/3 31/38/3 +f 30/41/1 25/36/1 29/42/1 +f 28/37/8 26/34/8 33/43/8 +f 30/41/11 33/44/11 26/34/11 +f 28/37/12 34/45/12 32/39/12 +f 30/46/3 32/39/3 34/47/3 +f 36/48/13 37/49/13 35/50/13 +f 37/49/4 42/51/4 41/52/4 +f 42/51/14 39/53/14 41/52/14 +f 39/54/1 36/48/1 35/50/1 +f 38/55/13 36/48/13 43/56/13 +f 40/57/15 43/58/15 36/48/15 +f 38/55/16 44/59/16 42/51/16 +f 40/60/14 42/51/14 44/61/14 +f 46/62/17 47/63/17 45/64/17 +f 47/63/4 52/65/4 51/66/4 +f 51/66/18 50/67/18 49/68/18 +f 50/69/1 45/64/1 49/70/1 +f 48/71/17 46/62/17 53/72/17 +f 50/69/19 53/73/19 46/62/19 +f 52/65/20 53/74/20 54/75/20 +f 50/67/18 52/65/18 54/76/18 +f 56/77/3 57/78/3 55/79/3 +f 58/80/4 61/81/4 57/78/4 +f 61/81/8 60/82/8 59/83/8 +f 60/84/1 55/79/1 59/85/1 +f 58/80/3 56/77/3 63/86/3 +f 56/77/21 64/87/21 63/88/21 +f 58/80/22 64/89/22 62/90/22 +f 60/82/8 62/90/8 64/91/8 +f 66/92/14 67/93/14 65/94/14 +f 68/95/4 71/96/4 67/93/4 +f 72/97/13 69/98/13 71/96/13 +f 70/99/1 65/94/1 69/100/1 +f 68/95/14 66/92/14 73/101/14 +f 66/92/23 74/102/23 73/103/23 +f 68/95/24 74/104/24 72/97/24 +f 70/105/13 72/97/13 74/106/13 +f 75/107/18 78/108/18 77/109/18 +f 78/108/4 81/110/4 77/109/4 +f 81/110/17 80/111/17 79/112/17 +f 80/113/1 75/107/1 79/114/1 +f 78/108/18 76/115/18 83/116/18 +f 76/115/25 84/117/25 83/118/25 +f 78/108/26 84/119/26 82/120/26 +f 80/111/17 82/120/17 84/121/17 +f 91/122/27 93/123/27 96/124/27 +f 93/125/28 94/126/28 87/127/28 +f 91/122/29 92/128/29 86/129/29 +f 92/128/4 88/130/4 86/129/4 +f 91/131/30 95/132/30 92/128/30 +f 90/133/31 94/126/31 93/134/31 +f 87/127/1 89/135/1 85/136/1 +f 103/137/29 105/138/29 108/139/29 +f 105/140/27 106/141/27 99/142/27 +f 103/137/32 104/143/32 98/144/32 +f 104/143/4 100/145/4 98/144/4 +f 103/146/33 107/147/33 104/143/33 +f 102/148/34 106/141/34 105/149/34 +f 106/141/1 97/150/1 99/142/1 +f 115/151/32 117/152/32 120/153/32 +f 117/154/29 118/155/29 111/156/29 +f 115/151/28 116/157/28 110/158/28 +f 110/158/4 119/159/4 112/160/4 +f 120/161/35 116/157/35 115/162/35 +f 117/163/36 113/164/36 118/155/36 +f 111/156/1 113/164/1 109/165/1 +f 132/166/28 126/167/28 129/168/28 +f 129/169/32 130/170/32 123/171/32 +f 127/172/27 128/173/27 122/174/27 +f 122/174/4 131/175/4 124/176/4 +f 132/177/37 128/173/37 127/178/37 +f 129/179/38 125/180/38 130/170/38 +f 130/170/1 121/181/1 123/171/1 +f 154/182/1 146/183/1 138/184/1 +f 166/185/4 168/186/4 160/187/4 +f 7/1/1 2/4/1 1/2/1 +f 8/5/2 11/6/2 12/13/2 +f 12/13/2 4/9/2 8/5/2 +f 4/9/2 2/4/2 8/5/2 +f 11/6/3 8/5/3 5/7/3 +f 4/9/4 12/13/4 9/10/4 +f 10/12/5 9/10/5 12/13/5 +f 6/3/6 5/188/6 8/15/6 +f 1/2/7 3/189/7 5/16/7 +f 3/189/7 9/190/7 5/16/7 +f 9/190/7 10/191/7 5/16/7 +f 13/17/1 14/192/1 19/18/1 +f 24/21/2 23/24/2 20/22/2 +f 20/22/2 19/18/2 14/192/2 +f 14/192/2 16/20/2 20/22/2 +f 17/23/8 20/22/8 23/24/8 +f 21/26/4 24/21/4 16/20/4 +f 24/21/9 21/26/9 22/28/9 +f 20/30/10 17/193/10 18/19/10 +f 21/33/7 15/194/7 17/31/7 +f 15/194/7 13/17/7 17/31/7 +f 13/17/7 18/19/7 17/31/7 +f 26/34/8 28/37/8 27/35/8 +f 28/37/4 32/39/4 31/38/4 +f 32/39/3 30/46/3 29/40/3 +f 30/41/1 26/34/1 25/36/1 +f 30/41/11 34/195/11 33/44/11 +f 28/37/12 33/196/12 34/45/12 +f 36/48/13 38/55/13 37/49/13 +f 37/49/4 38/55/4 42/51/4 +f 42/51/14 40/60/14 39/53/14 +f 39/54/1 40/57/1 36/48/1 +f 40/57/15 44/197/15 43/58/15 +f 38/55/16 43/198/16 44/59/16 +f 46/62/17 48/71/17 47/63/17 +f 47/63/4 48/71/4 52/65/4 +f 51/66/18 52/65/18 50/67/18 +f 50/69/1 46/62/1 45/64/1 +f 50/69/19 54/199/19 53/73/19 +f 52/65/20 48/71/20 53/74/20 +f 56/77/3 58/80/3 57/78/3 +f 58/80/4 62/90/4 61/81/4 +f 61/81/8 62/90/8 60/82/8 +f 60/84/1 56/77/1 55/79/1 +f 56/77/21 60/84/21 64/87/21 +f 58/80/22 63/200/22 64/89/22 +f 66/92/14 68/95/14 67/93/14 +f 68/95/4 72/97/4 71/96/4 +f 72/97/13 70/105/13 69/98/13 +f 70/99/1 66/92/1 65/94/1 +f 66/92/23 70/99/23 74/102/23 +f 68/95/24 73/201/24 74/104/24 +f 75/107/18 76/115/18 78/108/18 +f 78/108/4 82/120/4 81/110/4 +f 81/110/17 82/120/17 80/111/17 +f 80/113/1 76/115/1 75/107/1 +f 76/115/25 80/113/25 84/117/25 +f 78/108/26 83/202/26 84/119/26 +f 91/122/27 90/203/27 93/123/27 +f 87/127/28 88/130/28 96/204/28 +f 88/130/28 95/132/28 96/204/28 +f 96/204/28 93/125/28 87/127/28 +f 86/129/29 85/205/29 90/203/29 +f 85/205/29 89/206/29 90/203/29 +f 90/203/29 91/122/29 86/129/29 +f 92/128/4 95/132/4 88/130/4 +f 91/131/30 96/207/30 95/132/30 +f 90/133/31 89/135/31 94/126/31 +f 87/127/1 94/126/1 89/135/1 +f 103/137/29 102/208/29 105/138/29 +f 99/142/27 100/145/27 108/209/27 +f 100/145/27 107/147/27 108/209/27 +f 108/209/27 105/140/27 99/142/27 +f 98/144/32 97/210/32 102/208/32 +f 97/210/32 101/211/32 102/208/32 +f 102/208/32 103/137/32 98/144/32 +f 104/143/4 107/147/4 100/145/4 +f 103/146/33 108/212/33 107/147/33 +f 102/148/34 101/213/34 106/141/34 +f 106/141/1 101/213/1 97/150/1 +f 115/151/32 114/214/32 117/152/32 +f 111/156/29 112/160/29 120/215/29 +f 112/160/29 119/159/29 120/215/29 +f 120/215/29 117/154/29 111/156/29 +f 110/158/28 109/216/28 114/214/28 +f 109/216/28 113/217/28 114/214/28 +f 114/214/28 115/151/28 110/158/28 +f 110/158/4 116/157/4 119/159/4 +f 120/161/35 119/159/35 116/157/35 +f 117/163/36 114/218/36 113/164/36 +f 111/156/1 118/155/1 113/164/1 +f 132/166/28 127/172/28 126/167/28 +f 123/171/32 124/176/32 132/219/32 +f 124/176/32 131/175/32 132/219/32 +f 132/219/32 129/169/32 123/171/32 +f 122/174/27 121/220/27 126/167/27 +f 121/220/27 125/221/27 126/167/27 +f 126/167/27 127/172/27 122/174/27 +f 122/174/4 128/173/4 131/175/4 +f 132/177/37 131/175/37 128/173/37 +f 129/179/38 126/222/38 125/180/38 +f 130/170/1 125/180/1 121/181/1 +f 138/184/1 136/223/1 134/224/1 +f 134/224/1 156/225/1 154/182/1 +f 154/182/1 152/226/1 146/183/1 +f 152/226/1 150/227/1 146/183/1 +f 150/227/1 148/228/1 146/183/1 +f 146/183/1 144/229/1 142/230/1 +f 142/230/1 140/231/1 138/184/1 +f 138/184/1 134/224/1 154/182/1 +f 146/183/1 142/230/1 138/184/1 +f 168/186/4 157/232/4 158/233/4 +f 158/233/4 159/234/4 160/187/4 +f 160/187/4 161/235/4 162/236/4 +f 162/236/4 163/237/4 160/187/4 +f 163/237/4 164/238/4 160/187/4 +f 164/238/4 165/239/4 166/185/4 +f 166/185/4 167/240/4 168/186/4 +f 168/186/4 158/233/4 160/187/4 +f 164/238/4 166/185/4 160/187/4 +s 1 +f 134/241/39 135/242/40 133/243/41 +f 135/242/40 138/244/42 137/245/43 +f 138/244/42 139/246/44 137/245/43 +f 140/247/45 141/248/46 139/246/44 +f 142/249/47 143/250/48 141/248/46 +f 144/251/49 145/252/50 143/250/48 +f 146/253/51 147/254/52 145/255/50 +f 148/256/53 149/257/54 147/254/52 +f 150/258/55 151/259/56 149/257/54 +f 152/260/57 153/261/58 151/259/56 +f 154/262/59 155/263/60 153/261/58 +f 156/264/61 133/243/41 155/263/60 +f 147/254/52 163/265/62 145/255/50 +f 143/250/48 163/266/62 162/267/63 +f 143/250/48 161/268/64 141/248/46 +f 141/248/46 160/269/65 139/246/44 +f 133/243/41 168/270/66 155/263/60 +f 133/243/41 158/271/67 157/272/68 +f 139/246/44 159/273/69 137/245/43 +f 153/261/58 168/274/66 167/275/70 +f 137/245/43 158/276/67 135/242/40 +f 151/259/56 167/277/70 166/278/71 +f 151/259/56 165/279/72 149/257/54 +f 149/257/54 164/280/73 147/254/52 +f 134/241/39 136/281/74 135/242/40 +f 135/242/40 136/281/74 138/244/42 +f 138/244/42 140/247/45 139/246/44 +f 140/247/45 142/249/47 141/248/46 +f 142/249/47 144/251/49 143/250/48 +f 144/251/49 146/282/51 145/252/50 +f 146/253/51 148/256/53 147/254/52 +f 148/256/53 150/258/55 149/257/54 +f 150/258/55 152/260/57 151/259/56 +f 152/260/57 154/262/59 153/261/58 +f 154/262/59 156/264/61 155/263/60 +f 156/264/61 134/241/39 133/243/41 +f 147/254/52 164/283/73 163/265/62 +f 143/250/48 145/252/50 163/266/62 +f 143/250/48 162/284/63 161/268/64 +f 141/248/46 161/285/64 160/269/65 +f 133/243/41 157/286/68 168/270/66 +f 133/243/41 135/242/40 158/271/67 +f 139/246/44 160/287/65 159/273/69 +f 153/261/58 155/263/60 168/274/66 +f 137/245/43 159/288/69 158/276/67 +f 151/259/56 153/261/58 167/277/70 +f 151/259/56 166/289/71 165/279/72 +f 149/257/54 165/290/72 164/280/73 diff --git a/src/main/resources/assets/hbm/models/bombs/dud_salted.obj b/src/main/resources/assets/hbm/models/bombs/dud_salted.obj new file mode 100644 index 000000000..de9bcb0f1 --- /dev/null +++ b/src/main/resources/assets/hbm/models/bombs/dud_salted.obj @@ -0,0 +1,1411 @@ +# Blender v2.79 (sub 7) OBJ File: 'salted boy.blend' +# www.blender.org +mtllib salted boy.mtl +o Cylinder.002 +v -0.000000 -0.724444 -2.500000 +v -0.000000 -0.724445 1.750000 +v -0.362223 -0.627387 -2.500000 +v -0.362223 -0.627388 1.750000 +v -0.627388 -0.362221 -2.500000 +v -0.627388 -0.362222 1.750000 +v -0.724445 0.000001 -2.500000 +v -0.724445 0.000000 1.750000 +v -0.627388 0.362224 -2.500000 +v -0.627388 0.362223 1.750000 +v -0.362222 0.627389 -2.500000 +v -0.362222 0.627388 1.750000 +v -0.000000 0.724446 -2.500000 +v -0.000000 0.724445 1.750000 +v 0.362222 0.627389 -2.500000 +v 0.362222 0.627388 1.750000 +v 0.627388 0.362224 -2.500000 +v 0.627388 0.362223 1.750000 +v 0.724445 0.000001 -2.500000 +v 0.724445 0.000000 1.750000 +v 0.627388 -0.362221 -2.500000 +v 0.627388 -0.362222 1.750000 +v 0.362223 -0.627387 -2.500000 +v 0.362223 -0.627387 1.750000 +v -0.241482 -0.418258 2.000000 +v -0.000000 -0.482963 2.000000 +v -0.418258 -0.241482 2.000000 +v -0.482963 0.000000 2.000000 +v -0.418258 0.241482 2.000000 +v -0.241482 0.418259 2.000000 +v -0.000000 0.482963 2.000000 +v 0.241482 0.418259 2.000000 +v 0.418258 0.241482 2.000000 +v 0.482963 0.000000 2.000000 +v 0.418259 -0.241481 2.000000 +v 0.241482 -0.418258 2.000000 +v 0.574524 -0.530329 -2.624999 +v 0.839690 -0.795494 -2.624999 +v 0.640816 -0.464038 -3.374999 +v 0.905981 -0.729203 -3.374999 +v 0.530330 -0.574524 -2.624999 +v 0.795496 -0.839688 -2.624999 +v 0.464039 -0.640815 -3.374999 +v 0.729204 -0.905980 -3.374999 +v 0.662913 -0.441941 -2.687499 +v 0.751301 -0.530329 -2.687499 +v 0.662913 -0.441941 -2.749999 +v 0.751301 -0.530329 -2.749999 +v 0.441942 -0.662912 -2.687499 +v 0.530330 -0.751300 -2.687499 +v 0.441942 -0.662912 -2.749999 +v 0.530330 -0.751300 -2.749999 +v 0.662913 -0.441941 -2.812499 +v 0.751301 -0.530329 -2.812499 +v 0.662913 -0.441941 -2.874999 +v 0.751301 -0.530329 -2.874999 +v 0.441942 -0.662912 -2.812499 +v 0.530330 -0.751300 -2.812499 +v 0.441942 -0.662912 -2.874999 +v 0.530330 -0.751300 -2.874999 +v -0.530330 -0.574523 -2.624998 +v -0.795495 -0.839689 -2.624998 +v -0.464039 -0.640814 -3.374998 +v -0.729204 -0.905980 -3.374999 +v -0.574525 -0.530329 -2.624998 +v -0.839690 -0.795494 -2.624998 +v -0.640816 -0.464038 -3.374998 +v -0.905981 -0.729203 -3.374998 +v -0.441942 -0.662912 -2.687498 +v -0.530330 -0.751300 -2.687498 +v -0.441942 -0.662912 -2.749998 +v -0.530330 -0.751300 -2.749998 +v -0.662913 -0.441941 -2.687498 +v -0.751301 -0.530329 -2.687498 +v -0.662913 -0.441941 -2.749998 +v -0.751301 -0.530329 -2.749998 +v -0.441942 -0.662912 -2.812498 +v -0.530330 -0.751300 -2.812498 +v -0.441942 -0.662912 -2.874998 +v -0.530330 -0.751300 -2.874998 +v -0.662913 -0.441941 -2.812498 +v -0.751301 -0.530329 -2.812498 +v -0.662913 -0.441941 -2.874998 +v -0.751301 -0.530329 -2.874998 +v -0.574524 0.530331 -2.624998 +v -0.839690 0.795496 -2.624998 +v -0.640816 0.464040 -3.374998 +v -0.905981 0.729206 -3.374998 +v -0.530330 0.574526 -2.624998 +v -0.795495 0.839691 -2.624998 +v -0.464039 0.640817 -3.374998 +v -0.729204 0.905982 -3.374997 +v -0.662913 0.441943 -2.687498 +v -0.751301 0.530331 -2.687498 +v -0.662913 0.441943 -2.749998 +v -0.751301 0.530331 -2.749998 +v -0.441942 0.662914 -2.687498 +v -0.530330 0.751302 -2.687498 +v -0.441942 0.662914 -2.749998 +v -0.530330 0.751302 -2.749998 +v -0.662913 0.441943 -2.812498 +v -0.751301 0.530331 -2.812498 +v -0.662913 0.441943 -2.874998 +v -0.751301 0.530332 -2.874998 +v -0.441942 0.662914 -2.812498 +v -0.530330 0.751302 -2.812498 +v -0.441942 0.662914 -2.874998 +v -0.530330 0.751302 -2.874998 +v 0.530330 0.574525 -2.624997 +v 0.795496 0.839691 -2.624997 +v 0.464039 0.640817 -3.374997 +v 0.729204 0.905982 -3.374997 +v 0.574525 0.530331 -2.624997 +v 0.839690 0.795496 -2.624997 +v 0.640816 0.464040 -3.374997 +v 0.905981 0.729205 -3.374997 +v 0.441942 0.662914 -2.687497 +v 0.530330 0.751302 -2.687497 +v 0.441942 0.662914 -2.749997 +v 0.530330 0.751302 -2.749997 +v 0.662913 0.441943 -2.687497 +v 0.751301 0.530331 -2.687497 +v 0.662913 0.441943 -2.749997 +v 0.751301 0.530331 -2.749997 +v 0.441942 0.662914 -2.812497 +v 0.530330 0.751302 -2.812497 +v 0.441942 0.662914 -2.874997 +v 0.530331 0.751302 -2.874997 +v 0.662913 0.441943 -2.812497 +v 0.751301 0.530331 -2.812497 +v 0.662913 0.441943 -2.874997 +v 0.751301 0.530331 -2.874997 +v 0.031250 -0.639213 1.937500 +v -0.031250 -0.639213 1.937500 +v 0.031250 -0.639213 1.812500 +v -0.031250 -0.639213 1.812500 +v 0.031250 -0.576713 1.937500 +v -0.031250 -0.576713 1.937500 +v 0.031250 -0.576713 1.812500 +v -0.031250 -0.576713 1.812500 +v -0.537950 -0.346670 1.937500 +v -0.569200 -0.292543 1.937500 +v -0.537950 -0.346670 1.812500 +v -0.569200 -0.292543 1.812500 +v -0.483823 -0.315420 1.937500 +v -0.515073 -0.261294 1.937500 +v -0.483823 -0.315420 1.812500 +v -0.515073 -0.261293 1.812500 +v -0.569200 0.292543 1.937500 +v -0.537950 0.346670 1.937500 +v -0.569200 0.292543 1.812500 +v -0.537950 0.346670 1.812500 +v -0.515073 0.261293 1.937500 +v -0.483824 0.315420 1.937500 +v -0.515073 0.261293 1.812500 +v -0.483824 0.315420 1.812500 +v -0.031250 0.639213 1.937500 +v 0.031250 0.639213 1.937500 +v -0.031250 0.639213 1.812500 +v 0.031250 0.639213 1.812500 +v -0.031250 0.576713 1.937500 +v 0.031250 0.576714 1.937500 +v -0.031250 0.576713 1.812500 +v 0.031250 0.576714 1.812500 +v 0.537950 0.346670 1.937500 +v 0.569200 0.292544 1.937500 +v 0.537950 0.346670 1.812500 +v 0.569200 0.292544 1.812500 +v 0.483823 0.315420 1.937500 +v 0.515073 0.261294 1.937500 +v 0.483823 0.315420 1.812500 +v 0.515073 0.261294 1.812500 +v 0.569200 -0.292543 1.937500 +v 0.537950 -0.346670 1.937500 +v 0.569200 -0.292543 1.812500 +v 0.537950 -0.346670 1.812500 +v 0.515073 -0.261293 1.937500 +v 0.483824 -0.315420 1.937500 +v 0.515073 -0.261293 1.812500 +v 0.483824 -0.315420 1.812500 +v -0.000000 -0.715776 -1.000000 +v -0.357888 -0.619880 -1.000000 +v -0.619880 -0.357887 -1.000000 +v -0.715776 0.000001 -1.000000 +v -0.619880 0.357889 -1.000000 +v -0.357888 0.619881 -1.000000 +v -0.000000 0.715777 -1.000000 +v 0.357888 0.619881 -1.000000 +v 0.619880 0.357889 -1.000000 +v 0.715776 0.000001 -1.000000 +v 0.619881 -0.357887 -1.000000 +v 0.357888 -0.619879 -1.000000 +v -0.000000 -0.715776 -1.125000 +v -0.357888 -0.619880 -1.125000 +v -0.619880 -0.357887 -1.125000 +v -0.715776 0.000001 -1.125000 +v -0.619880 0.357889 -1.125000 +v -0.357888 0.619881 -1.125000 +v -0.000000 0.715777 -1.125000 +v 0.357888 0.619881 -1.125000 +v 0.619880 0.357889 -1.125000 +v 0.715776 0.000001 -1.125000 +v 0.619881 -0.357887 -1.125000 +v 0.357888 -0.619879 -1.125000 +v -0.000000 -0.715776 1.000000 +v -0.357888 -0.619880 1.000000 +v -0.619880 -0.357888 1.000000 +v -0.715776 0.000000 1.000000 +v -0.619880 0.357889 1.000000 +v -0.357888 0.619881 1.000000 +v -0.000000 0.715776 1.000000 +v 0.357888 0.619881 1.000000 +v 0.619880 0.357889 1.000000 +v 0.715776 0.000001 1.000000 +v 0.619881 -0.357888 1.000000 +v 0.357888 -0.619880 1.000000 +v -0.000000 -0.715776 0.875000 +v -0.357888 -0.619880 0.875000 +v -0.619880 -0.357888 0.875000 +v -0.715776 0.000000 0.875000 +v -0.619880 0.357889 0.875000 +v -0.357888 0.619881 0.875000 +v -0.000000 0.715777 0.875000 +v 0.357888 0.619881 0.875000 +v 0.619880 0.357889 0.875000 +v 0.715776 0.000001 0.875000 +v 0.619881 -0.357887 0.875000 +v 0.357888 -0.619880 0.875000 +v -0.000000 -0.715775 -2.500000 +v -0.357888 -0.619879 -2.500000 +v -0.619880 -0.357887 -2.500000 +v -0.715776 0.000001 -2.500000 +v -0.619880 0.357889 -2.500000 +v -0.357888 0.619882 -2.500000 +v -0.000000 0.715777 -2.500000 +v 0.357888 0.619882 -2.500000 +v 0.619880 0.357889 -2.500000 +v 0.715776 0.000001 -2.500000 +v 0.619881 -0.357887 -2.500000 +v 0.357888 -0.619879 -2.500000 +v -0.000000 -0.715775 -3.500000 +v -0.357888 -0.619879 -3.500000 +v -0.619880 -0.357887 -3.500000 +v -0.715776 0.000001 -3.500000 +v -0.619880 0.357890 -3.500000 +v -0.357888 0.619882 -3.500000 +v -0.000000 0.715777 -3.500000 +v 0.357888 0.619882 -3.500000 +v 0.619880 0.357890 -3.500000 +v 0.715776 0.000002 -3.500000 +v 0.619881 -0.357887 -3.500000 +v 0.357888 -0.619879 -3.500000 +v -0.000000 -0.845185 -3.500000 +v -0.422593 -0.731951 -3.500000 +v -0.731952 -0.422592 -3.500000 +v -0.845186 0.000001 -3.500000 +v -0.731952 0.422594 -3.500000 +v -0.422593 0.731954 -3.500000 +v 0.000000 0.845187 -3.500000 +v 0.422593 0.731954 -3.500000 +v 0.731952 0.422594 -3.500000 +v 0.845186 0.000002 -3.500000 +v 0.731953 -0.422591 -3.500000 +v 0.422593 -0.731951 -3.500000 +v -0.000000 -0.715775 -3.000000 +v -0.357888 -0.619879 -3.000000 +v -0.619880 -0.357887 -3.000000 +v -0.715776 0.000001 -3.000000 +v -0.619880 0.357889 -3.000000 +v -0.357888 0.619882 -3.000000 +v 0.000000 0.715777 -3.000000 +v 0.357888 0.619882 -3.000000 +v 0.619880 0.357889 -3.000000 +v 0.715776 0.000001 -3.000000 +v 0.619881 -0.357887 -3.000000 +v 0.357889 -0.619879 -3.000000 +v -0.000000 -0.845185 -1.000000 +v -0.422593 -0.731952 -1.000000 +v -0.731952 -0.422592 -1.000000 +v -0.845186 0.000001 -1.000000 +v -0.731952 0.422594 -1.000000 +v -0.422593 0.731953 -1.000000 +v -0.000000 0.845186 -1.000000 +v 0.422593 0.731953 -1.000000 +v 0.731952 0.422594 -1.000000 +v 0.845186 0.000001 -1.000000 +v 0.731953 -0.422592 -1.000000 +v 0.422593 -0.731951 -1.000000 +v -0.000000 -0.845185 -1.125000 +v -0.422593 -0.731952 -1.125000 +v -0.731952 -0.422592 -1.125000 +v -0.845186 0.000001 -1.125000 +v -0.731952 0.422594 -1.125000 +v -0.422593 0.731953 -1.125000 +v 0.000000 0.845186 -1.125000 +v 0.422593 0.731953 -1.125000 +v 0.731952 0.422594 -1.125000 +v 0.845186 0.000001 -1.125000 +v 0.731953 -0.422592 -1.125000 +v 0.422593 -0.731951 -1.125000 +v -0.000000 -0.845186 1.000000 +v -0.422593 -0.731952 1.000000 +v -0.731952 -0.422593 1.000000 +v -0.845186 0.000000 1.000000 +v -0.731952 0.422593 1.000000 +v -0.422593 0.731953 1.000000 +v -0.000000 0.845186 1.000000 +v 0.422593 0.731953 1.000000 +v 0.731952 0.422593 1.000000 +v 0.845186 0.000001 1.000000 +v 0.731953 -0.422592 1.000000 +v 0.422593 -0.731952 1.000000 +v -0.000000 -0.845186 0.875000 +v -0.422593 -0.731952 0.875000 +v -0.731952 -0.422592 0.875000 +v -0.845186 0.000000 0.875000 +v -0.731952 0.422593 0.875000 +v -0.422593 0.731953 0.875000 +v 0.000000 0.845186 0.875000 +v 0.422593 0.731953 0.875000 +v 0.731952 0.422593 0.875000 +v 0.845186 0.000001 0.875000 +v 0.731953 -0.422592 0.875000 +v 0.422593 -0.731952 0.875000 +v -0.000000 -0.845185 -2.500000 +v -0.422593 -0.731951 -2.500000 +v -0.731952 -0.422592 -2.500000 +v -0.845186 0.000001 -2.500000 +v -0.731952 0.422594 -2.500000 +v -0.422593 0.731954 -2.500000 +v -0.000000 0.845187 -2.500000 +v 0.422593 0.731953 -2.500000 +v 0.731952 0.422594 -2.500000 +v 0.845186 0.000001 -2.500000 +v 0.731953 -0.422591 -2.500000 +v 0.422593 -0.731951 -2.500000 +vt 0.909091 0.720930 +vt 0.973262 0.790698 +vt 0.909091 0.790698 +vt 0.994652 0.604651 +vt 0.973262 0.674419 +vt 0.973262 0.604651 +vt 0.909091 0.604651 +vt 0.903743 0.720930 +vt 0.903743 0.790698 +vt 0.973262 0.720930 +vt 0.909091 0.691860 +vt 0.898396 0.686046 +vt 0.893048 0.662791 +vt 0.898396 0.662791 +vt 0.866310 0.686046 +vt 0.866310 0.662791 +vt 0.860963 0.697674 +vt 0.866310 0.720930 +vt 0.860963 0.720930 +vt 0.893048 0.697674 +vt 0.893048 0.720930 +vt 0.893048 0.686046 +vt 0.866310 0.697674 +vt 0.898396 0.755814 +vt 0.893048 0.732558 +vt 0.898396 0.732558 +vt 0.893048 0.755814 +vt 0.866310 0.732558 +vt 0.860963 0.790698 +vt 0.866310 0.767442 +vt 0.866310 0.790698 +vt 0.893048 0.790698 +vt 0.866310 0.755814 +vt 0.909091 0.523256 +vt 0.973262 0.593023 +vt 0.909091 0.593023 +vt 0.994652 0.476744 +vt 0.973262 0.406977 +vt 0.994652 0.406977 +vt 0.909091 0.476744 +vt 0.909091 0.406977 +vt 0.903743 0.523256 +vt 0.903743 0.593023 +vt 0.973262 0.523256 +vt 0.909091 0.494186 +vt 0.973262 0.476744 +vt 0.898396 0.488372 +vt 0.893048 0.465116 +vt 0.898396 0.465116 +vt 0.893048 0.488372 +vt 0.866310 0.465116 +vt 0.860963 0.523256 +vt 0.866310 0.500000 +vt 0.866310 0.523256 +vt 0.893048 0.523256 +vt 0.866310 0.488372 +vt 0.898396 0.558140 +vt 0.893048 0.534884 +vt 0.898396 0.534884 +vt 0.893048 0.558140 +vt 0.866310 0.534884 +vt 0.860963 0.593023 +vt 0.866310 0.569767 +vt 0.866310 0.593023 +vt 0.893048 0.569767 +vt 0.893048 0.593023 +vt 0.866310 0.558140 +vt 0.909091 0.325581 +vt 0.973262 0.395349 +vt 0.909091 0.395349 +vt 0.994652 0.279070 +vt 0.973262 0.209302 +vt 0.994652 0.209302 +vt 0.973262 0.279070 +vt 0.909091 0.209302 +vt 0.903743 0.325581 +vt 0.903743 0.395349 +vt 0.973262 0.325581 +vt 0.909091 0.296512 +vt 0.898396 0.290698 +vt 0.893048 0.267442 +vt 0.898396 0.267442 +vt 0.893048 0.290698 +vt 0.866310 0.267442 +vt 0.860963 0.302326 +vt 0.866310 0.325581 +vt 0.860963 0.325581 +vt 0.866310 0.302326 +vt 0.893048 0.325581 +vt 0.866310 0.290698 +vt 0.898396 0.360465 +vt 0.893048 0.337209 +vt 0.898396 0.337209 +vt 0.893048 0.360465 +vt 0.866310 0.337209 +vt 0.860963 0.372093 +vt 0.866310 0.395349 +vt 0.860963 0.395349 +vt 0.893048 0.372093 +vt 0.893048 0.395349 +vt 0.866310 0.372093 +vt 0.866310 0.360465 +vt 0.909091 0.918605 +vt 0.973262 0.988372 +vt 0.909091 0.988372 +vt 0.994652 0.802326 +vt 0.973262 0.872093 +vt 0.973262 0.802326 +vt 0.909091 0.802326 +vt 0.903743 0.918605 +vt 0.903743 0.988372 +vt 0.973262 0.918605 +vt 0.909091 0.889535 +vt 0.898396 0.883721 +vt 0.893048 0.860465 +vt 0.898396 0.860465 +vt 0.893048 0.883721 +vt 0.866310 0.860465 +vt 0.860963 0.895349 +vt 0.866310 0.918605 +vt 0.860963 0.918605 +vt 0.866310 0.895349 +vt 0.893048 0.918605 +vt 0.866310 0.883721 +vt 0.898396 0.953488 +vt 0.893048 0.930233 +vt 0.898396 0.930233 +vt 0.893048 0.953488 +vt 0.866310 0.930233 +vt 0.860963 0.988372 +vt 0.866310 0.965116 +vt 0.866310 0.988372 +vt 0.893048 0.965116 +vt 0.893048 0.988372 +vt 0.866310 0.953488 +vt 0.834225 0.639535 +vt 0.839572 0.616279 +vt 0.839572 0.639535 +vt 0.850267 0.616279 +vt 0.844920 0.639535 +vt 0.844920 0.616279 +vt 0.834225 0.651163 +vt 0.839572 0.651163 +vt 0.834225 0.616279 +vt 0.828877 0.639535 +vt 0.828877 0.616279 +vt 0.834225 0.593023 +vt 0.839572 0.569767 +vt 0.839572 0.593023 +vt 0.850267 0.569767 +vt 0.844920 0.593023 +vt 0.844920 0.569767 +vt 0.834225 0.604651 +vt 0.839572 0.604651 +vt 0.834225 0.569767 +vt 0.828877 0.593023 +vt 0.828877 0.569767 +vt 0.834225 0.546512 +vt 0.839572 0.523256 +vt 0.839572 0.546512 +vt 0.850267 0.523256 +vt 0.844920 0.546512 +vt 0.844920 0.523256 +vt 0.834225 0.558140 +vt 0.839572 0.558140 +vt 0.834225 0.523256 +vt 0.828877 0.546512 +vt 0.828877 0.523256 +vt 0.834225 0.500000 +vt 0.839572 0.476744 +vt 0.839572 0.500000 +vt 0.850267 0.476744 +vt 0.844920 0.500000 +vt 0.844920 0.476744 +vt 0.834225 0.511628 +vt 0.839572 0.511628 +vt 0.828877 0.476744 +vt 0.828877 0.500000 +vt 0.834225 0.453488 +vt 0.839572 0.430233 +vt 0.839572 0.453488 +vt 0.850267 0.430233 +vt 0.844920 0.453488 +vt 0.844920 0.430233 +vt 0.834225 0.465116 +vt 0.839572 0.465116 +vt 0.834225 0.430233 +vt 0.828877 0.453488 +vt 0.828877 0.430233 +vt 0.834225 0.686047 +vt 0.839572 0.662791 +vt 0.839572 0.686047 +vt 0.850267 0.662791 +vt 0.844920 0.686047 +vt 0.844920 0.662791 +vt 0.834225 0.697674 +vt 0.839572 0.697674 +vt 0.828877 0.662791 +vt 0.828877 0.686047 +vt 0.679144 0.982558 +vt 0.668449 0.906977 +vt 0.679144 0.912791 +vt 0.679144 0.901163 +vt 0.668449 0.825581 +vt 0.679144 0.831395 +vt 0.679144 0.750000 +vt 0.668449 0.744186 +vt 0.679144 0.738372 +vt 0.668449 0.662791 +vt 0.679144 0.668605 +vt 0.679144 0.656977 +vt 0.668449 0.581395 +vt 0.679144 0.587209 +vt 0.679144 0.575581 +vt 0.668449 0.500000 +vt 0.679144 0.505814 +vt 0.679144 0.424419 +vt 0.668449 0.418605 +vt 0.679144 0.412791 +vt 0.668449 0.337209 +vt 0.679144 0.343023 +vt 0.679144 0.331395 +vt 0.668449 0.255814 +vt 0.679144 0.261628 +vt 0.679144 0.180233 +vt 0.668449 0.174419 +vt 0.679144 0.168605 +vt 0.668449 0.093023 +vt 0.679144 0.098837 +vt 0.679144 0.087209 +vt 0.668449 0.011628 +vt 0.679144 0.017442 +vt 0.854372 0.855140 +vt 0.763956 0.968649 +vt 0.763956 0.741632 +vt 0.534759 0.982558 +vt 0.545455 0.906977 +vt 0.545455 0.988372 +vt 0.534759 0.831395 +vt 0.534759 0.901163 +vt 0.534759 0.750000 +vt 0.545455 0.825581 +vt 0.534759 0.819767 +vt 0.534759 0.668605 +vt 0.545455 0.744186 +vt 0.534759 0.738372 +vt 0.534759 0.587209 +vt 0.545455 0.662791 +vt 0.534759 0.656977 +vt 0.534759 0.575581 +vt 0.545455 0.500000 +vt 0.545455 0.581395 +vt 0.534759 0.424419 +vt 0.534759 0.494186 +vt 0.534759 0.343023 +vt 0.545455 0.418605 +vt 0.534759 0.412791 +vt 0.534759 0.261628 +vt 0.545455 0.337209 +vt 0.534759 0.331395 +vt 0.534759 0.250000 +vt 0.545455 0.174419 +vt 0.545455 0.255814 +vt 0.534759 0.168605 +vt 0.545455 0.093023 +vt 0.534759 0.017442 +vt 0.534759 0.087209 +vt 0.566845 0.982558 +vt 0.556150 0.906977 +vt 0.566845 0.912791 +vt 0.566845 0.901163 +vt 0.556150 0.825581 +vt 0.566845 0.831395 +vt 0.566845 0.819767 +vt 0.556150 0.744186 +vt 0.566845 0.750000 +vt 0.566845 0.738372 +vt 0.556150 0.662791 +vt 0.566845 0.668605 +vt 0.566845 0.587209 +vt 0.556150 0.581395 +vt 0.566845 0.575581 +vt 0.556150 0.500000 +vt 0.566845 0.505814 +vt 0.566845 0.424419 +vt 0.556150 0.418605 +vt 0.566845 0.412791 +vt 0.556150 0.337209 +vt 0.566845 0.343023 +vt 0.566845 0.331395 +vt 0.556150 0.255814 +vt 0.566845 0.261628 +vt 0.566845 0.250000 +vt 0.556150 0.174419 +vt 0.566845 0.180233 +vt 0.566845 0.168605 +vt 0.556150 0.093023 +vt 0.566845 0.098837 +vt 0.566845 0.017442 +vt 0.556150 0.011628 +vt 0.497326 0.982558 +vt 0.508021 0.906977 +vt 0.508021 0.988372 +vt 0.497326 0.831395 +vt 0.497326 0.901163 +vt 0.497326 0.750000 +vt 0.508021 0.825581 +vt 0.497326 0.819767 +vt 0.497326 0.738372 +vt 0.508021 0.662791 +vt 0.508021 0.744186 +vt 0.497326 0.587209 +vt 0.497326 0.656977 +vt 0.497326 0.575581 +vt 0.508021 0.500000 +vt 0.508021 0.581395 +vt 0.497326 0.424419 +vt 0.497326 0.494186 +vt 0.497326 0.343023 +vt 0.508021 0.418605 +vt 0.497326 0.412791 +vt 0.497326 0.331395 +vt 0.508021 0.255814 +vt 0.508021 0.337209 +vt 0.497326 0.180233 +vt 0.497326 0.250000 +vt 0.497326 0.168605 +vt 0.508021 0.093023 +vt 0.508021 0.174419 +vt 0.497326 0.087209 +vt 0.508021 0.011628 +vt 0.529412 0.982558 +vt 0.518717 0.906977 +vt 0.529412 0.912791 +vt 0.529412 0.901163 +vt 0.518717 0.825581 +vt 0.529412 0.831395 +vt 0.529412 0.819767 +vt 0.518717 0.744186 +vt 0.529412 0.750000 +vt 0.529412 0.738372 +vt 0.518717 0.662791 +vt 0.529412 0.668605 +vt 0.529412 0.587209 +vt 0.518717 0.581395 +vt 0.529412 0.575581 +vt 0.518717 0.500000 +vt 0.529412 0.505814 +vt 0.529412 0.494186 +vt 0.518717 0.418605 +vt 0.529412 0.424419 +vt 0.529412 0.412791 +vt 0.518717 0.337209 +vt 0.529412 0.343023 +vt 0.529412 0.331395 +vt 0.518717 0.255814 +vt 0.529412 0.261628 +vt 0.529412 0.250000 +vt 0.518717 0.174419 +vt 0.529412 0.180233 +vt 0.529412 0.168605 +vt 0.518717 0.093023 +vt 0.529412 0.098837 +vt 0.529412 0.017442 +vt 0.518717 0.011628 +vt 0.572192 0.982558 +vt 0.582888 0.906977 +vt 0.582888 0.988372 +vt 0.572192 0.831395 +vt 0.572192 0.901163 +vt 0.572192 0.750000 +vt 0.582888 0.825581 +vt 0.572192 0.819767 +vt 0.572192 0.668605 +vt 0.582888 0.744186 +vt 0.572192 0.738372 +vt 0.572192 0.587209 +vt 0.582888 0.662791 +vt 0.572192 0.656977 +vt 0.572192 0.575581 +vt 0.582888 0.500000 +vt 0.582888 0.581395 +vt 0.572192 0.424419 +vt 0.572192 0.494186 +vt 0.572192 0.343023 +vt 0.582888 0.418605 +vt 0.572192 0.412791 +vt 0.572192 0.261628 +vt 0.582888 0.337209 +vt 0.572192 0.331395 +vt 0.572192 0.250000 +vt 0.582888 0.174419 +vt 0.582888 0.255814 +vt 0.572192 0.168605 +vt 0.582888 0.093023 +vt 0.572192 0.087209 +vt 0.582888 0.011628 +vt 0.994652 0.674419 +vt 0.909091 0.674419 +vt 0.909091 0.703488 +vt 0.860963 0.767442 +vt 0.893048 0.767442 +vt 0.909091 0.505814 +vt 0.860963 0.500000 +vt 0.893048 0.500000 +vt 0.860963 0.569767 +vt 0.909091 0.279070 +vt 0.909091 0.308140 +vt 0.893048 0.302326 +vt 0.994652 0.872093 +vt 0.909091 0.872093 +vt 0.909091 0.901163 +vt 0.893048 0.895349 +vt 0.860963 0.965116 +vt 0.850267 0.639535 +vt 0.850267 0.593023 +vt 0.850267 0.546512 +vt 0.834225 0.476744 +vt 0.850267 0.500000 +vt 0.850267 0.453488 +vt 0.834225 0.662791 +vt 0.850267 0.686047 +vt 0.668449 0.988372 +vt 0.679144 0.819767 +vt 0.679144 0.494186 +vt 0.679144 0.250000 +vt 0.794095 0.724072 +vt 0.824233 0.741632 +vt 0.846296 0.789606 +vt 0.846296 0.920674 +vt 0.824233 0.968649 +vt 0.794095 0.986208 +vt 0.741893 0.920674 +vt 0.733817 0.855140 +vt 0.741893 0.789606 +vt 0.534759 0.912791 +vt 0.534759 0.505814 +vt 0.534759 0.180233 +vt 0.534759 0.098837 +vt 0.545455 0.011628 +vt 0.556150 0.988372 +vt 0.566845 0.656977 +vt 0.566845 0.494186 +vt 0.566845 0.087209 +vt 0.497326 0.912791 +vt 0.497326 0.668605 +vt 0.497326 0.505814 +vt 0.497326 0.261628 +vt 0.497326 0.098837 +vt 0.497326 0.017442 +vt 0.518717 0.988372 +vt 0.529412 0.656977 +vt 0.529412 0.087209 +vt 0.572192 0.912791 +vt 0.572192 0.505814 +vt 0.572192 0.180233 +vt 0.572192 0.098837 +vt 0.572192 0.017442 +vt 0.037433 0.988372 +vt 0.401070 0.918605 +vt 0.401070 0.988372 +vt 0.037433 0.918605 +vt 0.401070 0.848837 +vt 0.037433 0.848837 +vt 0.401070 0.779070 +vt 0.037433 0.779070 +vt 0.401070 0.709302 +vt 0.037433 0.639535 +vt 0.401070 0.639535 +vt 0.401070 0.569767 +vt 0.037433 0.500000 +vt 0.401070 0.500000 +vt 0.401070 0.430233 +vt 0.037433 0.430233 +vt 0.401070 0.360465 +vt 0.037433 0.360465 +vt 0.401070 0.290698 +vt 0.005348 0.581395 +vt 0.037433 0.569767 +vt 0.037433 0.290698 +vt 0.401070 0.220930 +vt 0.037433 0.220930 +vt 0.401070 0.151163 +vt 0.037433 0.709302 +vt 0.005348 0.651163 +vt 0.005348 0.720930 +vt 0.037433 0.151163 +vt 0.005348 0.209302 +vt 0.005348 0.162791 +vt 0.005348 0.930233 +vt 0.005348 0.790698 +vt 0.005348 0.279070 +vt 0.005348 0.232558 +vt 0.005348 0.860465 +vt 0.005348 0.302326 +vt 0.005348 0.372093 +vt 0.005348 0.441860 +vt 0.005348 0.511628 +vt 0.449231 0.987503 +vt 0.412805 0.941775 +vt 0.412805 0.850318 +vt 0.684492 0.639535 +vt 0.727273 0.709302 +vt 0.684492 0.709302 +vt 0.684492 0.220930 +vt 0.727273 0.151163 +vt 0.727273 0.220930 +vt 0.684492 0.848837 +vt 0.727273 0.918605 +vt 0.684492 0.918605 +vt 0.684492 0.360465 +vt 0.727273 0.430233 +vt 0.684492 0.430233 +vt 0.684492 0.569767 +vt 0.727273 0.639535 +vt 0.684492 0.779070 +vt 0.727273 0.848837 +vt 0.684492 0.290698 +vt 0.727273 0.360465 +vt 0.684492 0.500000 +vt 0.727273 0.569767 +vt 0.727273 0.779070 +vt 0.727273 0.290698 +vt 0.727273 0.988372 +vt 0.684492 0.988372 +vt 0.727273 0.500000 +vt 0.005348 0.627907 +vt 0.005348 0.697674 +vt 0.005348 0.767442 +vt 0.005348 0.976744 +vt 0.005348 0.837209 +vt 0.005348 0.906977 +vt 0.005348 0.348837 +vt 0.005348 0.418605 +vt 0.005348 0.488372 +vt 0.005348 0.558140 +vt 0.428200 0.816843 +vt 0.449230 0.804590 +vt 0.470261 0.816843 +vt 0.485656 0.850318 +vt 0.491291 0.896047 +vt 0.485656 0.941775 +vt 0.470261 0.975250 +vt 0.428200 0.975250 +vt 0.407170 0.896046 +vt 0.684492 0.151163 +vn 0.7016 0.7016 0.1240 +vn 0.0000 0.0000 -1.0000 +vn -0.7016 -0.7016 0.1240 +vn 0.0000 0.0000 1.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 -0.0000 +vn 0.7016 -0.7016 0.1240 +vn -0.7016 0.7016 0.1240 +vn -0.7071 0.7071 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.8660 -0.5000 -0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.5000 -0.8660 0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.8660 0.5000 -0.0000 +vn 0.8660 -0.5000 -0.0000 +vn -0.5000 -0.8660 -0.0000 +vn 0.5000 0.8660 0.0000 +vn -0.3596 0.6229 0.6947 +vn 0.0000 0.7193 0.6947 +vn -0.6229 0.3596 0.6947 +vn -0.7193 0.0000 0.6947 +vn 0.0000 -0.7193 0.6947 +vn 0.3596 -0.6229 0.6947 +vn -0.3596 -0.6229 0.6947 +vn -0.6229 -0.3596 0.6947 +vn 0.6229 -0.3596 0.6947 +vn 0.7193 0.0000 0.6947 +vn 0.6229 0.3596 0.6947 +vn 0.3596 0.6229 0.6947 +usemtl None +s off +f 38/1/1 39/2/1 37/3/1 +f 39/4/2 44/5/2 43/6/2 +f 44/5/3 41/7/3 43/6/3 +f 42/8/4 37/3/4 41/9/4 +f 40/10/5 42/11/5 44/5/5 +f 46/12/6 47/13/6 45/14/6 +f 47/13/2 52/15/2 51/16/2 +f 52/17/7 49/18/7 51/19/7 +f 49/18/4 46/20/4 45/21/4 +f 48/22/5 50/23/5 52/15/5 +f 54/24/6 55/25/6 53/26/6 +f 56/27/2 59/28/2 55/25/2 +f 59/29/7 58/30/7 57/31/7 +f 58/30/4 53/32/4 57/31/4 +f 56/27/5 58/30/5 60/33/5 +f 62/34/8 63/35/8 61/36/8 +f 64/37/2 67/38/2 63/39/2 +f 67/38/9 66/40/9 65/41/9 +f 66/42/4 61/36/4 65/43/4 +f 64/44/7 66/45/7 68/46/7 +f 70/47/5 71/48/5 69/49/5 +f 72/50/2 75/51/2 71/48/2 +f 75/52/10 74/53/10 73/54/10 +f 74/53/4 69/55/4 73/54/4 +f 72/50/7 74/53/7 76/56/7 +f 78/57/5 79/58/5 77/59/5 +f 80/60/2 83/61/2 79/58/2 +f 83/62/10 82/63/10 81/64/10 +f 81/64/4 78/65/4 77/66/4 +f 80/60/7 82/63/7 84/67/7 +f 86/68/3 87/69/3 85/70/3 +f 88/71/2 91/72/2 87/73/2 +f 92/74/1 89/75/1 91/72/1 +f 90/76/4 85/70/4 89/77/4 +f 88/78/10 90/79/10 92/74/10 +f 94/80/7 95/81/7 93/82/7 +f 96/83/2 99/84/2 95/81/2 +f 100/85/6 97/86/6 99/87/6 +f 98/88/4 93/89/4 97/86/4 +f 96/83/10 98/88/10 100/90/10 +f 102/91/7 103/92/7 101/93/7 +f 104/94/2 107/95/2 103/92/2 +f 108/96/6 105/97/6 107/98/6 +f 105/97/4 102/99/4 101/100/4 +f 104/94/10 106/101/10 108/102/10 +f 110/103/9 111/104/9 109/105/9 +f 111/106/2 116/107/2 115/108/2 +f 116/107/8 113/109/8 115/108/8 +f 114/110/4 109/105/4 113/111/4 +f 112/112/6 114/113/6 116/107/6 +f 118/114/10 119/115/10 117/116/10 +f 120/117/2 123/118/2 119/115/2 +f 124/119/5 121/120/5 123/121/5 +f 122/122/4 117/123/4 121/120/4 +f 120/117/6 122/122/6 124/124/6 +f 126/125/10 127/126/10 125/127/10 +f 128/128/2 131/129/2 127/126/2 +f 131/130/5 130/131/5 129/132/5 +f 129/132/4 126/133/4 125/134/4 +f 128/128/6 130/131/6 132/135/6 +f 134/136/11 135/137/11 133/138/11 +f 140/139/12 137/140/12 139/141/12 +f 138/142/4 133/138/4 137/143/4 +f 139/141/13 133/138/13 135/137/13 +f 136/144/14 138/145/14 140/146/14 +f 142/147/15 143/148/15 141/149/15 +f 148/150/16 145/151/16 147/152/16 +f 146/153/4 141/149/4 145/154/4 +f 147/152/17 141/149/17 143/148/17 +f 144/155/18 146/156/18 148/157/18 +f 150/158/19 151/159/19 149/160/19 +f 156/161/20 153/162/20 155/163/20 +f 154/164/4 149/160/4 153/165/4 +f 155/163/21 149/160/21 151/159/21 +f 152/166/22 154/167/22 156/168/22 +f 158/169/12 159/170/12 157/171/12 +f 164/172/11 161/173/11 163/174/11 +f 162/175/4 157/171/4 161/176/4 +f 159/170/14 161/173/14 157/171/14 +f 164/177/13 158/169/13 162/178/13 +f 166/179/16 167/180/16 165/181/16 +f 172/182/15 169/183/15 171/184/15 +f 170/185/4 165/181/4 169/186/4 +f 171/184/18 165/181/18 167/180/18 +f 168/187/17 170/188/17 172/189/17 +f 174/190/20 175/191/20 173/192/20 +f 180/193/19 177/194/19 179/195/19 +f 178/196/4 173/192/4 177/197/4 +f 179/195/22 173/192/22 175/191/22 +f 180/198/21 174/190/21 178/199/21 +f 241/200/2 254/201/2 242/202/2 +f 242/203/2 255/204/2 243/205/2 +f 244/206/2 255/204/2 256/207/2 +f 244/208/2 257/209/2 245/210/2 +f 245/211/2 258/212/2 246/213/2 +f 246/214/2 259/215/2 247/216/2 +f 248/217/2 259/215/2 260/218/2 +f 248/219/2 261/220/2 249/221/2 +f 249/222/2 262/223/2 250/224/2 +f 251/225/2 262/223/2 263/226/2 +f 251/227/2 264/228/2 252/229/2 +f 252/230/2 253/231/2 241/232/2 +f 268/233/2 272/234/2 276/235/2 +f 181/236/4 278/237/4 277/238/4 +f 183/239/4 278/237/4 182/240/4 +f 184/241/4 279/242/4 183/243/4 +f 185/244/4 280/245/4 184/246/4 +f 186/247/4 281/248/4 185/249/4 +f 186/250/4 283/251/4 282/252/4 +f 188/253/4 283/251/4 187/254/4 +f 189/255/4 284/256/4 188/257/4 +f 190/258/4 285/259/4 189/260/4 +f 190/261/4 287/262/4 286/263/4 +f 191/264/4 288/265/4 287/262/4 +f 181/266/4 288/265/4 192/267/4 +f 193/268/2 290/269/2 194/270/2 +f 194/271/2 291/272/2 195/273/2 +f 195/274/2 292/275/2 196/276/2 +f 196/277/2 293/278/2 197/279/2 +f 198/280/2 293/278/2 294/281/2 +f 198/282/2 295/283/2 199/284/2 +f 200/285/2 295/283/2 296/286/2 +f 200/287/2 297/288/2 201/289/2 +f 201/290/2 298/291/2 202/292/2 +f 202/293/2 299/294/2 203/295/2 +f 203/296/2 300/297/2 204/298/2 +f 193/299/2 300/297/2 289/300/2 +f 205/301/4 302/302/4 301/303/4 +f 207/304/4 302/302/4 206/305/4 +f 208/306/4 303/307/4 207/308/4 +f 208/309/4 305/310/4 304/311/4 +f 210/312/4 305/310/4 209/313/4 +f 210/314/4 307/315/4 306/316/4 +f 212/317/4 307/315/4 211/318/4 +f 213/319/4 308/320/4 212/321/4 +f 213/322/4 310/323/4 309/324/4 +f 215/325/4 310/323/4 214/326/4 +f 215/327/4 312/328/4 311/329/4 +f 216/330/4 301/331/4 312/328/4 +f 217/332/2 314/333/2 218/334/2 +f 218/335/2 315/336/2 219/337/2 +f 219/338/2 316/339/2 220/340/2 +f 220/341/2 317/342/2 221/343/2 +f 222/344/2 317/342/2 318/345/2 +f 222/346/2 319/347/2 223/348/2 +f 223/349/2 320/350/2 224/351/2 +f 224/352/2 321/353/2 225/354/2 +f 225/355/2 322/356/2 226/357/2 +f 226/358/2 323/359/2 227/360/2 +f 227/361/2 324/362/2 228/363/2 +f 217/364/2 324/362/2 313/365/2 +f 229/366/4 326/367/4 325/368/4 +f 231/369/4 326/367/4 230/370/4 +f 232/371/4 327/372/4 231/373/4 +f 233/374/4 328/375/4 232/376/4 +f 234/377/4 329/378/4 233/379/4 +f 234/380/4 331/381/4 330/382/4 +f 236/383/4 331/381/4 235/384/4 +f 237/385/4 332/386/4 236/387/4 +f 238/388/4 333/389/4 237/390/4 +f 238/391/4 335/392/4 334/393/4 +f 239/394/4 336/395/4 335/392/4 +f 240/396/4 325/397/4 336/395/4 +f 38/1/1 40/10/1 39/2/1 +f 39/4/2 40/398/2 44/5/2 +f 44/5/3 42/399/3 41/7/3 +f 42/8/4 38/1/4 37/3/4 +f 40/10/5 38/400/5 42/11/5 +f 46/12/6 48/22/6 47/13/6 +f 47/13/2 48/22/2 52/15/2 +f 52/17/7 50/23/7 49/18/7 +f 49/18/4 50/23/4 46/20/4 +f 48/22/5 46/20/5 50/23/5 +f 54/24/6 56/27/6 55/25/6 +f 56/27/2 60/33/2 59/28/2 +f 59/29/7 60/401/7 58/30/7 +f 58/30/4 54/402/4 53/32/4 +f 56/27/5 54/402/5 58/30/5 +f 62/34/8 64/44/8 63/35/8 +f 64/37/2 68/46/2 67/38/2 +f 67/38/9 68/46/9 66/40/9 +f 66/42/4 62/34/4 61/36/4 +f 64/44/7 62/403/7 66/45/7 +f 70/47/5 72/50/5 71/48/5 +f 72/50/2 76/56/2 75/51/2 +f 75/52/10 76/404/10 74/53/10 +f 74/53/4 70/405/4 69/55/4 +f 72/50/7 70/405/7 74/53/7 +f 78/57/5 80/60/5 79/58/5 +f 80/60/2 84/67/2 83/61/2 +f 83/62/10 84/406/10 82/63/10 +f 81/64/4 82/63/4 78/65/4 +f 80/60/7 78/65/7 82/63/7 +f 86/68/3 88/78/3 87/69/3 +f 88/71/2 92/74/2 91/72/2 +f 92/74/1 90/407/1 89/75/1 +f 90/76/4 86/68/4 85/70/4 +f 88/78/10 86/408/10 90/79/10 +f 94/80/7 96/83/7 95/81/7 +f 96/83/2 100/90/2 99/84/2 +f 100/85/6 98/88/6 97/86/6 +f 98/88/4 94/409/4 93/89/4 +f 96/83/10 94/409/10 98/88/10 +f 102/91/7 104/94/7 103/92/7 +f 104/94/2 108/102/2 107/95/2 +f 108/96/6 106/101/6 105/97/6 +f 105/97/4 106/101/4 102/99/4 +f 104/94/10 102/99/10 106/101/10 +f 110/103/9 112/112/9 111/104/9 +f 111/106/2 112/410/2 116/107/2 +f 116/107/8 114/411/8 113/109/8 +f 114/110/4 110/103/4 109/105/4 +f 112/112/6 110/412/6 114/113/6 +f 118/114/10 120/117/10 119/115/10 +f 120/117/2 124/124/2 123/118/2 +f 124/119/5 122/122/5 121/120/5 +f 122/122/4 118/413/4 117/123/4 +f 120/117/6 118/413/6 122/122/6 +f 126/125/10 128/128/10 127/126/10 +f 128/128/2 132/135/2 131/129/2 +f 131/130/5 132/414/5 130/131/5 +f 129/132/4 130/131/4 126/133/4 +f 128/128/6 126/133/6 130/131/6 +f 134/136/11 136/144/11 135/137/11 +f 140/139/12 138/415/12 137/140/12 +f 138/142/4 134/136/4 133/138/4 +f 139/141/13 137/140/13 133/138/13 +f 136/144/14 134/136/14 138/145/14 +f 142/147/15 144/155/15 143/148/15 +f 148/150/16 146/416/16 145/151/16 +f 146/153/4 142/147/4 141/149/4 +f 147/152/17 145/151/17 141/149/17 +f 144/155/18 142/147/18 146/156/18 +f 150/158/19 152/166/19 151/159/19 +f 156/161/20 154/417/20 153/162/20 +f 154/164/4 150/158/4 149/160/4 +f 155/163/21 153/162/21 149/160/21 +f 152/166/22 150/158/22 154/167/22 +f 158/169/12 160/418/12 159/170/12 +f 164/172/11 162/419/11 161/173/11 +f 162/175/4 158/169/4 157/171/4 +f 159/170/14 163/174/14 161/173/14 +f 164/177/13 160/418/13 158/169/13 +f 166/179/16 168/187/16 167/180/16 +f 172/182/15 170/420/15 169/183/15 +f 170/185/4 166/179/4 165/181/4 +f 171/184/18 169/183/18 165/181/18 +f 168/187/17 166/179/17 170/188/17 +f 174/190/20 176/421/20 175/191/20 +f 180/193/19 178/422/19 177/194/19 +f 178/196/4 174/190/4 173/192/4 +f 179/195/22 177/194/22 173/192/22 +f 180/198/21 176/421/21 174/190/21 +f 241/200/2 253/423/2 254/201/2 +f 242/203/2 254/201/2 255/204/2 +f 244/206/2 243/424/2 255/204/2 +f 244/208/2 256/207/2 257/209/2 +f 245/211/2 257/209/2 258/212/2 +f 246/214/2 258/212/2 259/215/2 +f 248/217/2 247/425/2 259/215/2 +f 248/219/2 260/218/2 261/220/2 +f 249/222/2 261/220/2 262/223/2 +f 251/225/2 250/426/2 262/223/2 +f 251/227/2 263/226/2 264/228/2 +f 252/230/2 264/228/2 253/231/2 +f 276/235/2 265/427/2 266/428/2 +f 266/428/2 267/429/2 268/233/2 +f 268/233/2 269/430/2 272/234/2 +f 269/430/2 270/431/2 272/234/2 +f 270/431/2 271/432/2 272/234/2 +f 272/234/2 273/433/2 276/235/2 +f 273/433/2 274/434/2 276/235/2 +f 274/434/2 275/435/2 276/235/2 +f 276/235/2 266/428/2 268/233/2 +f 181/236/4 182/436/4 278/237/4 +f 183/239/4 279/242/4 278/237/4 +f 184/241/4 280/245/4 279/242/4 +f 185/244/4 281/248/4 280/245/4 +f 186/247/4 282/252/4 281/248/4 +f 186/250/4 187/437/4 283/251/4 +f 188/253/4 284/256/4 283/251/4 +f 189/255/4 285/259/4 284/256/4 +f 190/258/4 286/263/4 285/259/4 +f 190/261/4 191/438/4 287/262/4 +f 191/264/4 192/439/4 288/265/4 +f 181/266/4 277/440/4 288/265/4 +f 193/268/2 289/441/2 290/269/2 +f 194/271/2 290/269/2 291/272/2 +f 195/274/2 291/272/2 292/275/2 +f 196/277/2 292/275/2 293/278/2 +f 198/280/2 197/442/2 293/278/2 +f 198/282/2 294/281/2 295/283/2 +f 200/285/2 199/443/2 295/283/2 +f 200/287/2 296/286/2 297/288/2 +f 201/290/2 297/288/2 298/291/2 +f 202/293/2 298/291/2 299/294/2 +f 203/296/2 299/294/2 300/297/2 +f 193/299/2 204/444/2 300/297/2 +f 205/301/4 206/445/4 302/302/4 +f 207/304/4 303/307/4 302/302/4 +f 208/306/4 304/311/4 303/307/4 +f 208/309/4 209/446/4 305/310/4 +f 210/312/4 306/316/4 305/310/4 +f 210/314/4 211/447/4 307/315/4 +f 212/317/4 308/320/4 307/315/4 +f 213/319/4 309/324/4 308/320/4 +f 213/322/4 214/448/4 310/323/4 +f 215/325/4 311/329/4 310/323/4 +f 215/327/4 216/449/4 312/328/4 +f 216/330/4 205/450/4 301/331/4 +f 217/332/2 313/451/2 314/333/2 +f 218/335/2 314/333/2 315/336/2 +f 219/338/2 315/336/2 316/339/2 +f 220/341/2 316/339/2 317/342/2 +f 222/344/2 221/452/2 317/342/2 +f 222/346/2 318/345/2 319/347/2 +f 223/349/2 319/347/2 320/350/2 +f 224/352/2 320/350/2 321/353/2 +f 225/355/2 321/353/2 322/356/2 +f 226/358/2 322/356/2 323/359/2 +f 227/361/2 323/359/2 324/362/2 +f 217/364/2 228/453/2 324/362/2 +f 229/366/4 230/454/4 326/367/4 +f 231/369/4 327/372/4 326/367/4 +f 232/371/4 328/375/4 327/372/4 +f 233/374/4 329/378/4 328/375/4 +f 234/377/4 330/382/4 329/378/4 +f 234/380/4 235/455/4 331/381/4 +f 236/383/4 332/386/4 331/381/4 +f 237/385/4 333/389/4 332/386/4 +f 238/388/4 334/393/4 333/389/4 +f 238/391/4 239/456/4 335/392/4 +f 239/394/4 240/457/4 336/395/4 +f 240/396/4 229/458/4 325/397/4 +s 1 +f 2/459/11 3/460/21 1/461/11 +f 4/462/21 5/463/15 3/460/21 +f 6/464/15 7/465/14 5/463/15 +f 8/466/14 9/467/19 7/465/14 +f 9/467/19 12/468/18 11/469/18 +f 12/468/18 13/470/12 11/469/18 +f 13/470/12 16/471/22 15/472/22 +f 16/471/22 17/473/16 15/472/22 +f 18/474/16 19/475/13 17/473/16 +f 20/476/13 21/477/20 19/475/13 +f 12/468/23 31/478/24 14/479/24 +f 22/480/20 23/481/17 21/477/20 +f 24/482/17 1/483/11 23/481/17 +f 10/484/25 30/485/23 12/468/23 +f 8/466/26 29/486/25 10/484/25 +f 2/487/27 36/488/28 26/489/27 +f 2/459/27 25/490/29 4/462/29 +f 6/464/30 28/491/26 8/466/26 +f 24/482/28 35/492/31 36/493/28 +f 4/462/29 27/494/30 6/464/30 +f 20/476/32 35/495/31 22/480/31 +f 18/474/33 34/496/32 20/476/32 +f 16/471/34 33/497/33 18/474/33 +f 14/479/24 32/498/34 16/471/34 +f 31/499/4 29/500/4 27/501/4 +f 286/263/13 297/288/16 285/259/16 +f 283/251/12 294/281/18 282/252/18 +f 279/242/15 292/275/14 291/272/15 +f 287/262/20 298/291/13 286/263/13 +f 284/256/22 295/283/12 283/251/12 +f 280/245/14 293/278/19 292/275/14 +f 288/265/17 299/294/20 287/262/20 +f 277/238/11 290/269/21 289/441/11 +f 285/259/16 296/286/22 284/256/22 +f 281/248/19 294/281/18 293/278/19 +f 288/265/17 289/300/11 300/297/17 +f 278/237/21 291/272/15 290/269/21 +f 310/323/13 321/353/16 309/324/16 +f 307/315/12 318/345/18 306/316/18 +f 303/307/15 316/339/14 315/336/15 +f 311/329/20 322/356/13 310/323/13 +f 308/320/22 319/347/12 307/315/12 +f 304/311/14 317/342/19 316/339/14 +f 312/328/17 323/359/20 311/329/20 +f 301/303/11 314/333/21 313/451/11 +f 309/324/16 320/350/22 308/320/22 +f 306/316/18 317/342/19 305/310/19 +f 301/331/11 324/362/17 312/328/17 +f 302/302/21 315/336/15 314/333/21 +f 246/502/17 269/503/20 245/504/20 +f 334/393/13 261/220/16 333/389/16 +f 331/381/12 258/212/18 330/382/18 +f 328/375/14 255/204/15 327/372/15 +f 335/392/20 262/223/13 334/393/13 +f 332/386/22 259/215/12 331/381/12 +f 329/378/19 256/207/14 328/375/14 +f 336/395/17 263/226/20 335/392/20 +f 326/367/21 253/423/11 325/368/11 +f 333/389/16 260/218/22 332/386/22 +f 330/382/18 257/209/19 329/378/19 +f 336/395/17 253/231/11 264/228/17 +f 326/367/21 255/204/15 254/201/21 +f 252/505/18 265/506/12 276/507/18 +f 243/508/16 266/509/22 242/510/22 +f 250/511/14 273/512/15 249/513/15 +f 247/514/11 270/515/17 246/502/17 +f 244/516/13 267/517/16 243/508/16 +f 251/518/19 274/519/14 250/511/14 +f 248/520/21 271/521/11 247/514/11 +f 244/516/13 269/503/20 268/522/13 +f 251/518/19 276/507/18 275/523/19 +f 242/510/22 265/524/12 241/525/12 +f 249/513/15 272/526/21 248/520/21 +f 2/459/11 4/462/21 3/460/21 +f 4/462/21 6/464/15 5/463/15 +f 6/464/15 8/466/14 7/465/14 +f 8/466/14 10/484/19 9/467/19 +f 9/467/19 10/484/19 12/468/18 +f 12/468/18 14/479/12 13/470/12 +f 13/470/12 14/479/12 16/471/22 +f 16/471/22 18/474/16 17/473/16 +f 18/474/16 20/476/13 19/475/13 +f 20/476/13 22/480/20 21/477/20 +f 12/468/23 30/527/23 31/478/24 +f 22/480/20 24/482/17 23/481/17 +f 24/482/17 2/487/11 1/483/11 +f 10/484/25 29/528/25 30/485/23 +f 8/466/26 28/529/26 29/486/25 +f 2/487/27 24/482/28 36/488/28 +f 2/459/27 26/530/27 25/490/29 +f 6/464/30 27/531/30 28/491/26 +f 24/482/28 22/480/31 35/492/31 +f 4/462/29 25/532/29 27/494/30 +f 20/476/32 34/533/32 35/495/31 +f 18/474/33 33/534/33 34/496/32 +f 16/471/34 32/535/34 33/497/33 +f 14/479/24 31/536/24 32/498/34 +f 27/501/4 25/537/4 26/538/4 +f 26/538/4 36/539/4 27/501/4 +f 36/539/4 35/540/4 27/501/4 +f 35/540/4 34/541/4 33/542/4 +f 33/542/4 32/543/4 31/499/4 +f 31/499/4 30/544/4 29/500/4 +f 29/500/4 28/545/4 27/501/4 +f 35/540/4 33/542/4 27/501/4 +f 33/542/4 31/499/4 27/501/4 +f 286/263/13 298/291/13 297/288/16 +f 283/251/12 295/283/12 294/281/18 +f 279/242/15 280/245/14 292/275/14 +f 287/262/20 299/294/20 298/291/13 +f 284/256/22 296/286/22 295/283/12 +f 280/245/14 281/248/19 293/278/19 +f 288/265/17 300/297/17 299/294/20 +f 277/238/11 278/237/21 290/269/21 +f 285/259/16 297/288/16 296/286/22 +f 281/248/19 282/252/18 294/281/18 +f 288/265/17 277/440/11 289/300/11 +f 278/237/21 279/242/15 291/272/15 +f 310/323/13 322/356/13 321/353/16 +f 307/315/12 319/347/12 318/345/18 +f 303/307/15 304/311/14 316/339/14 +f 311/329/20 323/359/20 322/356/13 +f 308/320/22 320/350/22 319/347/12 +f 304/311/14 305/310/19 317/342/19 +f 312/328/17 324/362/17 323/359/20 +f 301/303/11 302/302/21 314/333/21 +f 309/324/16 321/353/16 320/350/22 +f 306/316/18 318/345/18 317/342/19 +f 301/331/11 313/365/11 324/362/17 +f 302/302/21 303/307/15 315/336/15 +f 246/502/17 270/515/17 269/503/20 +f 334/393/13 262/223/13 261/220/16 +f 331/381/12 259/215/12 258/212/18 +f 328/375/14 256/207/14 255/204/15 +f 335/392/20 263/226/20 262/223/13 +f 332/386/22 260/218/22 259/215/12 +f 329/378/19 257/209/19 256/207/14 +f 336/395/17 264/228/17 263/226/20 +f 326/367/21 254/201/21 253/423/11 +f 333/389/16 261/220/16 260/218/22 +f 330/382/18 258/212/18 257/209/19 +f 336/395/17 325/397/11 253/231/11 +f 326/367/21 327/372/15 255/204/15 +f 252/505/18 241/546/12 265/506/12 +f 243/508/16 267/517/16 266/509/22 +f 250/511/14 274/519/14 273/512/15 +f 247/514/11 271/521/11 270/515/17 +f 244/516/13 268/522/13 267/517/16 +f 251/518/19 275/523/19 274/519/14 +f 248/520/21 272/526/21 271/521/11 +f 244/516/13 245/504/20 269/503/20 +f 251/518/19 252/505/18 276/507/18 +f 242/510/22 266/509/22 265/524/12 +f 249/513/15 273/512/15 272/526/21 diff --git a/src/main/resources/assets/hbm/textures/models/bombs/dud_conventional.png b/src/main/resources/assets/hbm/textures/models/bombs/dud_conventional.png new file mode 100644 index 0000000000000000000000000000000000000000..4d2ac97f536c8501234debcd1dda51551400660e GIT binary patch literal 29044 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 Hu0mjfX5ZAr delta 2281 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 BhI9Y` diff --git a/src/main/resources/assets/hbm/textures/models/weapons/charge_thrower_hook.png b/src/main/resources/assets/hbm/textures/models/weapons/charge_thrower_hook.png index 6d0cfa335c418c3525d94870053d900fc5bb27c1..4b5bf505cce96411665990976cb56a4b9307efd1 100644 GIT binary patch delta 554 zcmV+_0@eMH1kwbMGk*dJNkl%@F5QW>62Vw7}I0{GcDDGXe=O$(o3_)AK zc}b1oeVeKIqpYu9)1a1vD6H$cY2TIb-ix(%xcmPn@_`=EdoLjb^ssNwEs@@P@!p?) z-lIejk+J2+xxDy(nx?KLiinKsx^7WO6tOJJ;fH4lOuy?{qJKzbXNmPZ3` zHoa05S(C;{c0K@>$!(^NfJ&kcu(1W_fjCY3#>QKVt{b0w;Gi6Rv{n^ac^mKJy(2AvB#&phyrD34$U)aAyO8i3Fi0lIJ4ZU?M?KBnXNGL6IOR5(L+gAecxH z6bYi~X8fM8)>dDa4%xFBn9wQ~2MPK`|(=GL}l2 z*KX?I@(0A&@`M1Q!$g7@Tb`mqbeKpGoFhT7v_Y`6K~N-!(ONt7yhTK@?=v--y*(@U sE(b}uP$P=0<1j~3+&xa44Q00T38g~ns8FpyK>z>%07*qoM6N<$g7FmruK)l5 delta 487 zcmVKNQdM d?b?W$&o6qVu8ru|i~axr002ovPDHLkV1ob5=du6* diff --git a/src/main/resources/assets/hbm/textures/models/weapons/charge_thrower_mortar.png b/src/main/resources/assets/hbm/textures/models/weapons/charge_thrower_mortar.png index 8c65186e8502283fe966e14c1702fd3c9b5ea813..bb4768a913c56dca9210742b53509672a7a02d57 100644 GIT binary patch delta 1317 zcmV+=1={+x2FD7JGk*mBNklkh21iPq7m_o4Z1Gr1!6mC+a zOKA`!5b^*n7Pbty$OD)_0t+eg2rjI*5CRpKq!B8%NRiHQ3hj~ajPCroGxy9yGv5yw zFPf28_WpeCnLBr8o-AK2KggrS^^J&#Y&UBu^ZLb3L_}`i&VNhy>FQy(m)ZQP_VYaK z_97xOn_t!bnfE{6KS}oq(bUtSKLEy!fWZ_2gDCFh#&%ih#is z0fQ+522%tKrU)2J5ipn{U@%3%V2Xgj6aj;&Plo;geOWFK*B&_Ma<4n*B+Ihn>sglN zw(GXlYQ>uV7JsNyU==55{dH%@{VxvzX#0Z?1*`aH`TI1vCvR5-ERj&Ss%HKDZMvw@t(+|GZd!$` zX=U=a>3h0_x()#|5_3w)IoIhFRNG4A@1JUTE@B=mfnxP)6BZpZfBor=h*bAczLdjU z)lqL-1b+;s2-q1*S-o_4OkKqYSVt*_N7Z(itn#qi=YI8#CV#|2jk{GdUxo^HrkXs* zDHJ6C8Bn2Z`rcHcE12a&urNMUu#S%Z>mN_|6t4`Aq5a$UcRz|q|K|-Y)K;*?^^JV@ z#XAuZ`Qi7cqdxPG^d{5fFTQ;2J1+CDXV0?S?|=TYDz}@pJnZ)J+2^0iH!r{b@b_Q; z^!I^lY&UCJT$i6#^8XILs?$Oit2&|r_RGtEMPzsK`qV4iY<_i^26(@h*~L}vW-3it z438SZ;%j}HOa<$co?C3%k6B&{H*_Bt6|k~OHG4d;)PC*u?fm%Y<*N6MiB>VW6mcsj zB7dhVCVZh##a6GnVKRo*qDRvTRt(zMY2UNBI}A%YBQH{2r8HO~!&jWtY6G_2tmSrd zC{eSBDX^)|m-&5<9~?hy#clq3yL`X4ESGGXRIn*ktq={0|AP+&s3EIQD>29e7%y_olC4b zuh_@WB&r7!Ijv}Zcy!;z^^LrK@$R^7sugS~esEG<@Y_~Y1*-~Ie*2+v>BKA*Y&b*z zyEhJ4UARO}tDT~PO;@9UH3?T}zqx{!S(fGQh2flwx>rT3qsZbp$$#Qe zq`rq93`R$h)1C*zN6|--AzGn|`;M`4by-k22C*mRO;@xYrYm-XT+M?2homc7Py027 z%Bf3Q!M2;V{PyQpB666?*RL^M$yc=ceVBed#$F7~a8(gZC0)@96j8xo%4|g|AVLL$ zvFKApx`=S9Ywo8$lOKx;22)&k8-I!CMaH3m!4v_5DFOyl1PrDK7))^#8HstYI8-p0 zB49AZ5Q!+uW%Fl-JLd>ktf|lB$J`c_fT6R{lYIT>UlK61R`wuO|1|=JR{U`J!=`?% z+c=6uCv`m;0fQ+5hGat3j2;ZFXqZ9|n4rn;fO)V?M4BBziV!fg;D@X3KOP)C7^0L_ bt}_1tT`xt>rv+%%00000NkvXXu0mjfjYorF literal 821 zcmeAS@N?(olHy`uVBq!ia0vp^Gk`dOgAGVNWZoSLq*#ibJVQ8upoSx*gMoqRji-xa zNX4ADcQ5ANHV|n|T=_vKZh`Ke=83$QIJ@3Gn60|WaROtMiSd_(%qH3;9ZwFLJrF3= z`1NVRrg#7MN;JB*cKGXQb_E{$npYv|w-qR^>$m;KR zf7%`PHPg5Q%o@tKRvB?JYES*$aCML98pCG^6BadzM%Cw9A6YW5e#>0v%D{sPt_MJ9 ztJn3t&o;@Q(R$DR+PZkv^Jl3UyZF9me|fujag$?L0}`5Av++*o&zQ3HD+CNSE@jtf z|C^9h{P*WJC)Vf<#ff=4XZRfu%i$|e<+#x_H*7;(qH;pg&g#A1^CxfQW7E_E37(ES ztSZVAlsJ#y?9T6B$?eyV&wXzbH@(hodYHlcI)kXj_>qgx@=ANw0B8<%;GZZ&XV}E_O`L)oq zp9zQK)9Y)_9!~0L5phmg7!4HOC&wi(3RD_0gDY+7EqlxJ!oD*at{w_ak%U;@`?C1@ z^G)(^?*IRrz4dRx)N2RLYX3*4l;7z-vPQtbqfj)mWAzE6L?)o-`r>)&Qb1j;D-*UB z=x=&c0d(69ezUFi?bq*YKN!t3v2{n6&S3#gP^20-FA2^1|HSs<)ZJS*{g?CuJAkeC z%Odqyb(MtHMe(l77*FZie6HEhx##WlS3kJR^)k*JR5&USsqt&?i7OwU7p|KGj5pC` zO_58#{fT|@`&{TZ1IE>@t50ltEUBajjLffGPJ5Tm*I1Qa4a^4&p00i_>zopr0Oogi ALjV8( diff --git a/src/main/resources/assets/hbm/textures/models/weapons/fatman_balefire.png b/src/main/resources/assets/hbm/textures/models/weapons/fatman_balefire.png new file mode 100644 index 0000000000000000000000000000000000000000..21e850d08abd255661a213f0376cf9feca5750b3 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^6+j%y!3HFo!W6846icy_X9x!n)NrJ9FfcG%d%8G= zRLprh*D(9GgUIpuU7BwNcBlqlo8_=z!NLons`DKqxm)X)c>jw0Vwt-uZ2rP4+2)gl z^jjyDX>Dm<&@xSEhhF8mpEZ+oe*0P3|F551V`a}?SNHy&r48Vjf;n7miRL|fBbgWT|Y9riKnl_+}+E* z_S=!yQ}sB+_*mSJ=w4j=en#irn~jMZtuya0IN8-vKmXj~Rk`gGNrYjLwTDp)v8 z+O3{D%VqaGft9DUF1p;h=iyw?G9xK=N1nh_*LC_G9jCHVWtx;*H}BxwEMji^*_Gws z#Y2&Aw642+H+pM&gYA2>I}r0vSf{tsU%a=rV9A`wvzH5A zE{49(6)N~woYLB8e9QE>X`iV@keKT}n{(YU`fEOmAFG`AxT{&OD#fY%A}}m~&V>Z5 zfQ}5RFHnWmPwl^3k?~m3kqzNbpo&Q*zR~kn%{l*k?cBKQzjs@F`4Rj6{?yK(tlSOj zUaxK1nY7d4PxY_5gTLw&0~P^;M{v=UTRUczG{(nvaztzGzgOm|;Kb(c8GGH@)3ot{ zhr#Bl-X`Anmc}@5D6qQzAohD_$9~D&nY+DrmT`T%deF4-$Kj*y;5SNf19k?`!#`K{*zz+tQNP|%bv5qY{lT|>gTe~ HDWM4f<9VMc literal 0 HcmV?d00001 From 17de40d7b2549d429f7a3196fda2b00506b2f159 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 9 May 2025 14:52:10 +0200 Subject: [PATCH 005/491] kill all zebras --- changelog | 1 + .../standard/BlockMutatorBalefire.java | 23 +++++ .../weapon/sedna/factory/GunFactory.java | 3 +- .../sedna/factory/GunFactoryClient.java | 1 + .../weapon/sedna/factory/LegoClient.java | 13 +++ .../sedna/factory/XFactoryCatapult.java | 33 ++++++- .../java/com/hbm/main/ResourceManager.java | 1 + .../item/weapon/sedna/ItemRenderFatMan.java | 74 +++++++++++++- .../hbm/render/util/RenderMiscEffects.java | 93 +++++++++--------- src/main/resources/assets/hbm/lang/de_DE.lang | 4 + src/main/resources/assets/hbm/lang/en_US.lang | 4 + .../textures/items/ammo_standard.ct_hook.png | Bin 191 -> 239 bytes .../items/ammo_standard.ct_mortar.png | Bin 195 -> 314 bytes .../items/ammo_standard.ct_mortar_charge.png | Bin 0 -> 465 bytes .../items/ammo_standard.ct_rocket.png | Bin 178 -> 175 bytes .../items/ammo_standard.nuke_balefire.png | Bin 0 -> 562 bytes .../assets/hbm/textures/items/biomass_alt.png | Bin 525 -> 0 bytes .../assets/hbm/textures/items/gun_bf_ammo.png | Bin 549 -> 0 bytes .../hbm/textures/items/gun_cryolator_ammo.png | Bin 249 -> 0 bytes .../textures/models/weapons/benelli_tex.png | Bin 1499 -> 0 bytes .../models/weapons/fatman_balefire.png | Bin 900 -> 873 bytes .../hbm/textures/models/weapons/pch.png | Bin 333 -> 0 bytes 22 files changed, 194 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/hbm/explosion/vanillant/standard/BlockMutatorBalefire.java create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.ct_mortar_charge.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.nuke_balefire.png delete mode 100755 src/main/resources/assets/hbm/textures/items/biomass_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/items/gun_bf_ammo.png delete mode 100644 src/main/resources/assets/hbm/textures/items/gun_cryolator_ammo.png delete mode 100644 src/main/resources/assets/hbm/textures/models/weapons/benelli_tex.png delete mode 100644 src/main/resources/assets/hbm/textures/models/weapons/pch.png diff --git a/changelog b/changelog index 6c02bce7b..d62a70591 100644 --- a/changelog +++ b/changelog @@ -12,6 +12,7 @@ * This means that reading the fill state of multiple batteries over the same channel should result the combined fill state of all batteries * Halved base spread of the .22 SMG * Certain secret guns now have a proper way of being obtained +* Demolition mini nukes now create fire again ## Fixed * Fixed RoR controller having the wrong recipe \ No newline at end of file diff --git a/src/main/java/com/hbm/explosion/vanillant/standard/BlockMutatorBalefire.java b/src/main/java/com/hbm/explosion/vanillant/standard/BlockMutatorBalefire.java new file mode 100644 index 000000000..4560852e0 --- /dev/null +++ b/src/main/java/com/hbm/explosion/vanillant/standard/BlockMutatorBalefire.java @@ -0,0 +1,23 @@ +package com.hbm.explosion.vanillant.standard; + +import com.hbm.blocks.ModBlocks; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.interfaces.IBlockMutator; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; + +public class BlockMutatorBalefire implements IBlockMutator { + + @Override public void mutatePre(ExplosionVNT explosion, Block block, int meta, int x, int y, int z) { } + + @Override + public void mutatePost(ExplosionVNT explosion, int x, int y, int z) { + + Block block = explosion.world.getBlock(x, y, z); + Block block1 = explosion.world.getBlock(x, y - 1, z); + if(block.getMaterial() == Material.air && block1.func_149730_j() && explosion.world.rand.nextInt(3) == 0) { + explosion.world.setBlock(x, y, z, ModBlocks.balefire); + } + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index f12233377..98b4f09e8 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -101,6 +101,7 @@ public class GunFactory { R762_HE, BMG50_HE, G10_EXPLOSIVE, P45_SP, P45_FMJ, P45_JHP, P45_AP, P45_DU, CT_HOOK, CT_MORTAR, CT_MORTAR_CHARGE, + NUKE_BALEFIRE, //ONLY ADD NEW ENTRIES AT THE BOTTOM TO AVOID SHIFTING! ; @@ -126,7 +127,7 @@ public class GunFactory { CAPACITOR, CAPACITOR_OVERCHARGE, CAPACITOR_IR, TAU_URANIUM, COIL_TUNGSTEN, COIL_FERROURANIUM, - NUKE_STANDARD, NUKE_DEMO, NUKE_HIGH, NUKE_TOTS, NUKE_HIVE, + NUKE_STANDARD, NUKE_DEMO, NUKE_HIGH, NUKE_TOTS, NUKE_HIVE, NUKE_BALEFIRE, CT_HOOK, CT_MORTAR, CT_MORTAR_CHARGE, }; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index e568369a9..4576cf7a0 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -203,6 +203,7 @@ public class GunFactoryClient { setRendererBulk(LegoClient.RENDER_NUKE, nuke_standard, nuke_demo, nuke_high); nuke_tots.setRenderer(LegoClient.RENDER_GRENADE); nuke_hive.setRenderer(LegoClient.RENDER_HIVE); + nuke_balefire.setRenderer(LegoClient.RENDER_NUKE_BALEFIRE); setRendererBulkBeam(LegoClient.RENDER_LIGHTNING, energy_tesla, energy_tesla_overcharge, energy_tesla_ir); setRendererBulkBeam(LegoClient.RENDER_LIGHTNING_SUB, energy_tesla_ir_sub); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java index f3d2e68a5..ac476aa60 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java @@ -12,6 +12,7 @@ import com.hbm.items.weapon.sedna.hud.HUDComponentDurabilityBar; import com.hbm.items.weapon.sedna.impl.ItemGunChargeThrower; import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; +import com.hbm.render.item.weapon.sedna.ItemRenderFatMan; import com.hbm.render.tileentity.RenderArcFurnace; import com.hbm.render.util.BeamPronter; import com.hbm.render.util.BeamPronter.EnumBeamType; @@ -435,6 +436,18 @@ public class LegoClient { GL11.glPopMatrix(); }; + public static BiConsumer RENDER_NUKE_BALEFIRE = (bullet, interp) -> { + + GL11.glPushMatrix(); + GL11.glScalef(0.125F, 0.125F, 0.125F); + GL11.glRotated(-90, 0, 1, 0); + GL11.glTranslatef(0, -1, 1F); + GL11.glShadeModel(GL11.GL_SMOOTH); + ItemRenderFatMan.renderBalefire(interp); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + }; + public static BiConsumer RENDER_HIVE = (bullet, interp) -> { GL11.glPushMatrix(); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java index 0617d33b7..42d957506 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java @@ -8,6 +8,8 @@ import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; +import com.hbm.explosion.vanillant.standard.BlockMutatorBalefire; +import com.hbm.explosion.vanillant.standard.BlockMutatorFire; import com.hbm.explosion.vanillant.standard.BlockProcessorStandard; import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon; @@ -44,6 +46,7 @@ public class XFactoryCatapult { public static BulletConfig nuke_high; public static BulletConfig nuke_tots; public static BulletConfig nuke_hive; + public static BulletConfig nuke_balefire; public static BiConsumer LAMBDA_NUKE_STANDARD = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; @@ -64,9 +67,9 @@ public class XFactoryCatapult { if(bullet.isDead) return; bullet.setDead(); - ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 10); + ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 15); vnt.setBlockAllocator(new BlockAllocatorStandard(64)); - vnt.setBlockProcessor(new BlockProcessorStandard()); + vnt.setBlockProcessor(new BlockProcessorStandard().withBlockEffect(new BlockMutatorFire())); vnt.setEntityProcessor(new EntityProcessorCrossSmooth(2, bullet.damage).withRangeMod(1.5F)); vnt.setPlayerProcessor(new PlayerProcessorStandard()); vnt.explode(); @@ -83,6 +86,27 @@ public class XFactoryCatapult { spawnMush(bullet, mop); }; + public static BiConsumer LAMBDA_NUKE_BALEFIRE = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; + if(bullet.isDead) return; + bullet.setDead(); + + ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 10); + vnt.setBlockAllocator(new BlockAllocatorStandard(64)); + vnt.setBlockProcessor(new BlockProcessorStandard().withBlockEffect(new BlockMutatorBalefire())); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(2, bullet.damage).withRangeMod(1.5F)); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + vnt.explode(); + + incrementRad(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 1.5F); + + bullet.worldObj.playSoundEffect(mop.hitVec.xCoord, mop.hitVec.yCoord + 0.5, mop.hitVec.zCoord, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "muke"); + data.setBoolean("balefire", true); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, mop.hitVec.xCoord, mop.hitVec.yCoord + 0.5, mop.hitVec.zCoord), new TargetPoint(bullet.dimension, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 250)); + }; + public static void incrementRad(World world, double posX, double posY, double posZ, float mult) { for(int i = -2; i <= 2; i++) { for(int j = -2; j <= 2; j++) { if(Math.abs(i) + Math.abs(j) < 4) { @@ -136,12 +160,13 @@ public class XFactoryCatapult { nuke_high = new BulletConfig().setItem(EnumAmmo.NUKE_HIGH).setLife(300).setVel(3F).setGrav(0.025F).setOnImpact(LAMBDA_NUKE_HIGH); nuke_tots = new BulletConfig().setItem(EnumAmmo.NUKE_TOTS).setProjectiles(8).setLife(300).setVel(3F).setGrav(0.025F).setSpread(0.1F).setDamage(0.35F).setOnImpact(LAMBDA_NUKE_TINYTOT); nuke_hive = new BulletConfig().setItem(EnumAmmo.NUKE_HIVE).setProjectiles(12).setLife(300).setVel(1F).setGrav(0.025F).setSpread(0.15F).setDamage(0.25F).setOnImpact(LAMBDA_NUKE_HIVE); + nuke_balefire = new BulletConfig().setItem(EnumAmmo.NUKE_BALEFIRE).setDamage(2.5F).setLife(300).setVel(3F).setGrav(0.025F).setOnImpact(LAMBDA_NUKE_BALEFIRE); ModItems.gun_fatman = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() - .dura(300).draw(20).inspect(30).crosshair(Crosshair.L_CIRCUMFLEX).hideCrosshair(false) + .dura(300).draw(20).inspect(30).reloadChangeType(true).crosshair(Crosshair.L_CIRCUMFLEX).hideCrosshair(false) .rec(new Receiver(0) .dmg(100F).spreadHipfire(0F).delay(10).reload(57).jam(40).sound("hbm:weapon.fire.fatman", 1.0F, 1.0F) - .mag(new MagazineSingleReload(0, 1).addConfigs(nuke_standard, nuke_demo, nuke_high, nuke_tots, nuke_hive)) + .mag(new MagazineSingleReload(0, 1).addConfigs(nuke_standard, nuke_demo, nuke_high, nuke_tots, nuke_hive, nuke_balefire)) .offset(1, -0.0625 * 1.5, -0.1875D).offsetScoped(1, -0.0625 * 1.5, -0.125D) .setupStandardFire().recoil(LAMBDA_RECOIL_FATMAN)) .setupStandardConfiguration() diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 7fbac54ce..07de3e21c 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1011,6 +1011,7 @@ public class ResourceManager { public static final ResourceLocation tau_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/tau.png"); public static final ResourceLocation fatman_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/fatman.png"); public static final ResourceLocation fatman_mininuke_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/fatman_mininuke.png"); + public static final ResourceLocation fatman_balefire_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/fatman_balefire.png"); public static final ResourceLocation lasrifle_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lasrifle.png"); public static final ResourceLocation lasrifle_mods_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lasrifle_mods.png"); public static final ResourceLocation hangman_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/hangman.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFatMan.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFatMan.java index 100cb62e9..67ad4ba90 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFatMan.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFatMan.java @@ -3,8 +3,10 @@ package com.hbm.render.item.weapon.sedna; import org.lwjgl.opengl.GL11; import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.items.weapon.sedna.factory.XFactoryCatapult; import com.hbm.main.ResourceManager; import com.hbm.render.anim.HbmAnimations; +import com.hbm.render.util.RenderMiscEffects; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; @@ -34,7 +36,7 @@ public class ItemRenderFatMan extends ItemRenderWeaponBase { @Override public void renderFirstPerson(ItemStack stack) { - + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.fatman_tex); double scale = 0.5D; @@ -81,10 +83,9 @@ public class ItemRenderFatMan extends ItemRenderWeaponBase { GL11.glPopMatrix(); if(isLoaded || nuke[0] != 0 || nuke[1] != 0 || nuke[2] != 0) { - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.fatman_mininuke_tex); GL11.glPushMatrix(); GL11.glTranslated(nuke[0], nuke[1], nuke[2]); - ResourceManager.fatman.renderPart("MiniNuke"); + renderNuke(gun.getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getType(stack, null)); GL11.glPopMatrix(); } @@ -132,8 +133,71 @@ public class ItemRenderFatMan extends ItemRenderWeaponBase { ResourceManager.fatman.renderPart("Lid"); if(!isLoaded) GL11.glTranslated(0, 0, 3); ResourceManager.fatman.renderPart("Piston"); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.fatman_mininuke_tex); - if(isLoaded) ResourceManager.fatman.renderPart("MiniNuke"); + if(isLoaded) renderNuke(gun.getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getType(stack, null)); GL11.glShadeModel(GL11.GL_FLAT); } + + public void renderNuke(Object type) { + if(type == XFactoryCatapult.nuke_balefire) { + renderBalefire(interp); + } else { + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.fatman_mininuke_tex); + ResourceManager.fatman.renderPart("MiniNuke"); + } + } + + public static void renderBalefire(float interp) { + + Minecraft mc = Minecraft.getMinecraft(); + mc.renderEngine.bindTexture(ResourceManager.fatman_balefire_tex); + ResourceManager.fatman.renderPart("MiniNuke"); + mc.renderEngine.bindTexture(RenderMiscEffects.glintBF); + mc.entityRenderer.disableLightmap(interp); + + float scale = 2F; + float r = 0F; + float g = 0.8F; + float b = 0.15F; + float speed = -6; + float glintColor = 0.76F; + int layers = 3; + + GL11.glPushMatrix(); + float offset = mc.thePlayer.ticksExisted + interp; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(1F, 1F, 1F, 1F); + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + GL11.glDepthMask(false); + + for(int k = 0; k < layers; ++k) { + + GL11.glColor4f(r * glintColor, g * glintColor, b * glintColor, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + + float movement = offset * (0.001F + (float) k * 0.003F) * speed; + + GL11.glScalef(scale, scale, scale); + GL11.glRotatef(30.0F - k * 60.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0F, movement, 0F); + + GL11.glMatrixMode(GL11.GL_MODELVIEW); + + ResourceManager.fatman.renderPart("MiniNuke"); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glDepthMask(true); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glPopMatrix(); + + mc.entityRenderer.enableLightmap(interp); + } } diff --git a/src/main/java/com/hbm/render/util/RenderMiscEffects.java b/src/main/java/com/hbm/render/util/RenderMiscEffects.java index 037b7e45e..7e944e084 100644 --- a/src/main/java/com/hbm/render/util/RenderMiscEffects.java +++ b/src/main/java/com/hbm/render/util/RenderMiscEffects.java @@ -10,60 +10,61 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.IModelCustom; public class RenderMiscEffects { - + public static ResourceLocation glint = new ResourceLocation(RefStrings.MODID + ":textures/misc/glint.png"); - + public static ResourceLocation glintBF = new ResourceLocation(RefStrings.MODID + ":textures/misc/glintBF.png"); + public static void renderClassicGlint(World world, float interpol, IModelCustom model, String part, float colorMod, float r, float g, float b, float speed, float scale) { - GL11.glPushMatrix(); - float offset = Minecraft.getMinecraft().thePlayer.ticksExisted + interpol; - GL11.glEnable(GL11.GL_BLEND); - float color = colorMod; - GL11.glColor4f(color, color, color, 1.0F); - GL11.glDepthFunc(GL11.GL_EQUAL); - GL11.glDepthMask(false); + GL11.glPushMatrix(); + float offset = Minecraft.getMinecraft().thePlayer.ticksExisted + interpol; + GL11.glEnable(GL11.GL_BLEND); + float color = colorMod; + GL11.glColor4f(color, color, color, 1.0F); + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDepthMask(false); - for (int k = 0; k < 2; ++k) { - - GL11.glDisable(GL11.GL_LIGHTING); - - float glintColor = 0.76F; - - GL11.glColor4f(r * glintColor, g * glintColor, b * glintColor, 1.0F); - GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); - GL11.glMatrixMode(GL11.GL_TEXTURE); - GL11.glLoadIdentity(); - - float movement = offset * (0.001F + (float)k * 0.003F) * speed; - - GL11.glScalef(scale, scale, scale); - GL11.glRotatef(30.0F - (float)k * 60.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(0.0F, movement, 0.0F); - - GL11.glMatrixMode(GL11.GL_MODELVIEW); - - if("all".equals(part)) - model.renderAll(); - else - model.renderPart(part); - } + for(int k = 0; k < 2; ++k) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glMatrixMode(GL11.GL_TEXTURE); - GL11.glDepthMask(true); - GL11.glLoadIdentity(); - GL11.glMatrixMode(GL11.GL_MODELVIEW); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDepthFunc(GL11.GL_LEQUAL); - GL11.glPopMatrix(); - } + GL11.glDisable(GL11.GL_LIGHTING); + + float glintColor = 0.76F; + + GL11.glColor4f(r * glintColor, g * glintColor, b * glintColor, 1.0F); + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + + float movement = offset * (0.001F + (float) k * 0.003F) * speed; + + GL11.glScalef(scale, scale, scale); + GL11.glRotatef(30.0F - (float) k * 60.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, movement, 0.0F); + + GL11.glMatrixMode(GL11.GL_MODELVIEW); + + if("all".equals(part)) + model.renderAll(); + else + model.renderPart(part); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glDepthMask(true); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glPopMatrix(); + } public static void renderClassicGlint(World world, float interpol, IModelCustom model, String part, float r, float g, float b, float speed, float scale) { renderClassicGlint(world, interpol, model, part, 0.5F, r, g, b, speed, scale); - } + } public static void renderClassicGlint(World world, float interpol, IModelCustom model, String part) { - renderClassicGlint(world, interpol, model, part, 0.5F, 0.25F, 0.8F, 20.0F, 1F/3F); - } + renderClassicGlint(world, interpol, model, part, 0.5F, 0.25F, 0.8F, 20.0F, 1F / 3F); + } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 5643c75cb..5c4eb045f 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1072,6 +1072,9 @@ item.ammo_standard.capacitor_ir.name=Capacitor (niedrige Wellenlänge) item.ammo_standard.capacitor_overcharge.name=Kondensator (Überladung) item.ammo_standard.coil_ferrouranium.name=Ferrourankugel item.ammo_standard.coil_tungsten.name=Wolframkugel +item.ammo_standard.ct_hook.name=Enterhaken +item.ammo_standard.ct_mortar.name=Sprengladung +item.ammo_standard.ct_mortar_charge.name=Geballte Ladung item.ammo_standard.flame_balefire.name=Flammenwerferbrennstoff, Balefire item.ammo_standard.flame_diesel.name=Flammenwerferbrennstoff, Diesel item.ammo_standard.flame_gas.name=Flammenwerferbrennstoff, Gas @@ -2071,6 +2074,7 @@ item.gun_b92.name=§9B92 Energiepistole§r item.gun_b92_ammo.name=§9B92-Energiezelle§r item.gun_bolter.name=Boltergewehr item.gun_carbine.name=Karabiner +item.gun_charge_thrower.name=Ladungswerfer item.gun_chemthrower.name=Chemowerfer item.gun_coilgun.name=Gaußpistole item.gun_cryocannon.name=Kyro-Kanone diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 725b7c61a..8128b5cfb 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1797,6 +1797,9 @@ item.ammo_standard.capacitor_ir.name=Capacitor (Low Wavelength) item.ammo_standard.capacitor_overcharge.name=Capacitor (Overcharge) item.ammo_standard.coil_ferrouranium.name=Coilgun Ferrouranium Ball item.ammo_standard.coil_tungsten.name=Coilgun Tungsten Ball +item.ammo_standard.ct_hook.name=Grappling Hook +item.ammo_standard.ct_mortar.name=Demolition Charge +item.ammo_standard.ct_mortar_charge.name=Heavy Demolition Charge item.ammo_standard.flame_balefire.name=Flamer Fuel, Balefire item.ammo_standard.flame_diesel.name=Flamer Fuel, Diesel item.ammo_standard.flame_gas.name=Flamer Fuel, Gas @@ -2882,6 +2885,7 @@ item.gun_b92.name=§9B92 Energy Pistol§r item.gun_b92_ammo.name=§9B92 Energy Cell§r item.gun_bolter.name=Bolter item.gun_carbine.name=Carbine +item.gun_charge_thrower.name=Charge Thrower item.gun_chemthrower.name=Chemthrower item.gun_coilgun.name=Coilgun item.gun_congolake.name=Congo Lake diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.ct_hook.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.ct_hook.png index 3cd514abeaeff534a9dedaf49557269ff2554ddc..de59811d7857106f973fa8a773e1b90291646f04 100644 GIT binary patch delta 195 zcmV;!06hP{0q+5jG=HW^L_t(Ijm43%6~iD5M9-N-y=!_#(I^__MsZI~uTA78_&JV^ zahhDm6aOO#;NO{g#ZpQDK&=(3+Pw<^Fta$qEhOWc=tzcvvyhBY!N*)A!`%S@B7%9I zky5&!y}|plnFYxxrF6S_T@}o1a(C2Pu`J8w!<(SBzK@8&%sk-kP}TdL?7#6Kikx$t xNyZlRmWT*M1SB_ZSa2nIBj)5#-K(iO?q)fJ+rG z(OTkBn$um002ovPDHLkV1oAi BJUjpZ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.ct_mortar.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.ct_mortar.png index f123c98ed5fe0f8d52c58a008a4ec4a8996d6569..148c63268cc23dfd8a9ebd7642be98efe45d57b6 100644 GIT binary patch delta 271 zcmV+q0r39A0lET^G=K3)L_t(IjjfR}Y63wNhQHk-1PoU4iUl!6PN49bG#1`K7|0nc zasmr4F<_a_VjByEP6xW*y06VkU zC5X>B8V~)@L;Laf@B>Bv@=m;i#k};7yJpM!eGRQ+Cs!jJAd7jKJrACIzy7RH)o6?; zHH`E1@r{TeB3OI>O{n;sx#(%naM;EaWN<9mi~a;1c*Uy2Ao3vT_WND_JR0g VzZXKwpa1{>00>D%PDHLkV1hH6e>4C9 delta 151 zcmV;I0BHZZ0>c52G=F+YL_t(Ijir*y6~G_}1TmFuX_U5|nUi^_;bX#4*>O-sOabTs zx*SxqVY@-H?d=Z0JGBD2qHtxL>unLhW0gU+5da9u$s{!xO(dHQTa$Ezb>?9LAj;2o zu$qjps=5~GGug1JZvCat5O>-eUA0-AudsX=1Bh(W*$Q@&Y0eMI zNJiK$eF5-sS7Ug5gx&Rm)l%Rtxf}EHv+T@6-qCAvh9Yc5z0(K0e`> ze7074%-Vj*M>0Y&Ukt$^L6EEV@EL-SHusrYn8sW4tYEvwvKnE#YSSO@GsD`$Cz26( z24^A-z|Hj)-kN7N=}2WA{rdQ1uKiMbGjM;rkK>(V82kZ&5NsmEdWS+^6~Kj!J!@=o z)I7d9y+SD!ieUkyvW{uSdWWbF)G6kR*6iYp>0g{&A|i+gp65l5Nh<4TrIc=z!OzbC zD5bQBXr+{P-RLomr0JlceoLaOv{53WgE(FP5%|7u0UF>NR%WJs9}o5z00000NkvXX Hu0mjfCq&D( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.ct_rocket.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.ct_rocket.png index 4c6ca590ae6120a14351682ed4dfa9d7180d5f91..a68e433f676844d9ef191826bf293ad3b5b463dd 100644 GIT binary patch delta 130 zcmV-|0Db?m0j~j&G<#-AL_t(Ijm^=)5x^h_1i;hED2>vtGxN(Z2_TqH_^HS0An=OV delta 133 zcmV;00DAwg0kQ#*G=6DGL_t(Ijjhqa4Zt7>1<;R^F&d+>nZ1<6w1Pm(i39&d0r;bs zd5XyFWXBBv06GX+vxY^4_TvH2MP5TyWIM1TstQ$gq2T~zVOwwsc!s0v9RGOQNovy( nlD@ZxqyY~p0ntm^$mhBM-AX$QShirh00000NkvXXu0mjfisU*H diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.nuke_balefire.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.nuke_balefire.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4f3649019d06e027ace5fdd3afc84306c641a6 GIT binary patch literal 562 zcmV-20?qx2P)`)QG!9~zfLH!#Xf+!u-iXwKfiN?glwuz0&OB0g!u2ZXl`~yAH<=%5H zhkGt;dnoOi@dp!9HfuDj4T>d`S9iX*@S@SEY}U^I2dC%v%0OQSXD4^!p%;gAQ?g;s z{X)#D&BDEm5{tzoolXOgNF)pJ9yi_}Pa8ow}6yVXlx$u95wd!Q=1~pFB+XLSsuDiA2PCa&AOU zO^wpeeiRgJZ0b~KD0K|2pRw^Ooju*G+A9pYLR2@Z==v^vJ|DSU4psALc>PY+WD$!x zRVh-EG$tmi-;ACX=C1DByg4{ex0iFUriU&2Rb0>*O+;-bpAB z9#5U0zw(PH!Mc35C8xG07*qoM6N<$f;;{J AUH||9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/biomass_alt.png b/src/main/resources/assets/hbm/textures/items/biomass_alt.png deleted file mode 100755 index 3e0eee5eb63ef896f9d3eec141c7807bcd4f7ca7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmV+o0`mQdP)PTLF#MZz`bLc~EelO?55f`S(jh?f)k z0|f87^42@`PK>Ul=t6IziwYbeD`aHo$Y7g}o%Lg58`EQ_v$u<6xH|JrpS$<{em@V- z1MdsxA=fN|2*PS6od&8;Y{F;~xLqoRWYKcR-UwD^5RNVf9w*!}6`UckN?~a*xg-gD zGmN+SxvzM6pU)wsAvmBy1Ti)**D6_7c&po)92sOU_K8%sNJr;I{9QJ7VkPb$su&&_MSHeR_1ABP9^S*uX83ND@dpD$wQt1VW$R$z z@1cJ|5xsqVywpAtC|tmI$;Ic540|m)qy1rCzld_g;B^Pshz)mQ6OTP0R@bPh`Oa4iAT2&EY&dO9g?!DBDTzsAvlK-nbZS932#U8w#I1rL zh!h7Got(r?Hy1&77jeqqq7I4E6cH99YzfY^}GV*-h-QO7BI*ucExxP!TKRPd~jTN#}VJ=+She;Am+Oz{` z`d_#QQkWi!ViLRt+qQpyaP{GWJhgZd%dByb!w8aibgAwv^WyUg`>ia6RGQ6xg{O}{ zu>E`*Aq3@eSy7MQ&dCEu0}7@^iHjtdMI*{kc35|}_*!XD{keguB`8|6%%7VFpx5i+ zIF8iKaD;RwONK)zCj*I|H<@A(*Nm|U{RnVCg2Md!)0 zS3rCm;<($hcS^E1Xp@?ZvUKePLbV9#aUz6>X$4N-xI!dk5XgY=`yz&6>^-DoxAIa` nC7v%)RgImI$J;%I^dI0CxDmE=yipnl00000NkvXXu0mjfyT$U; diff --git a/src/main/resources/assets/hbm/textures/items/gun_cryolator_ammo.png b/src/main/resources/assets/hbm/textures/items/gun_cryolator_ammo.png deleted file mode 100644 index 11a1af457af0d5518c1552da72659b1eb12502e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfwY1Q6G=C`*Q{_<^bln`_;m-PP+;St2@Qu71ok>@zZp_4*qz1v@*Dfj z1Cak4=wllNldy`G;b5b0tZ3mtbc{!N13kflHa*N z@$iJg9o*+SS46yT$k)7Eb4O}Jze*%u66(f|Me diff --git a/src/main/resources/assets/hbm/textures/models/weapons/benelli_tex.png b/src/main/resources/assets/hbm/textures/models/weapons/benelli_tex.png deleted file mode 100644 index 2381fab496721827d1231c85015bf1e0710656fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1499 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 CXNcwi delta 861 zcmaFK*1|r)q~6-o#WAE}&fB?$*|!};j?eGXd@Ha+HTc>rhXo53UI-QfE#o+yB3R zj{^k`_XrE_t^4T|U;o?l`u+Ng)7RTiI@W3H(b4fqDL(V|>P?4!G(7g~ZuUk63#UoD)pKXL?4BpE@|4y^ms|HdoC{iJB*pH?6L{*nPQRn$ zR931?lXC0k9h{p*%xyorvK+j4DDsWgb(il(Z%uEoeQ$OLV*Uy1^mf+!i}%(RESVE| z_EKcz+7s3JbMsfR2<%bU>AG{%#nAV;LIwYdQ(7C1ZWbFMo^f6Zs{ zW0mtBcQxx(r8t#e1cnCCy^ydK(2+s)2CA_7sr`2=G9D{BvVlBW5Ai8b$s`ls==rPW zoPWM{Zrt_XyDh%_h<$&5YG+VZ?uK=**Ea1;+UfA8`d8h-Uv-KBi+}+nxM<3)9kWUr z<6}EHqP6zlEAv!vVsrP5y>9Jk+W5f3VDnUO6YqOVW1Ke>SY3Y*`@OSczhv&r-QGLP zxV~LIXxjMW@KJYh*?K`cw4Ut{GsSyg7ri;0=Lw#`|#GR*5@j#;$j{M4Ch zO3y1|uV;Upa8NL*?3vCM-r~NySFPWxHGWKRTsB?j^p?3BpIO>H(+!)oY?iU4q>P~6 z&K~W_vB`hp`ljwsdwcosmD>LEGjFPuOaDlBnQUtGY}U)-ollB-g=9GwhE***#`ErX zhQ|wce?HxP`T>iS6|ac8a>&hm`O_q$W(_zURP3EC^6T7`BR`Ip$b2#0$ky+3`@c=r f?ERX+VE@T4e^!gz>t)Yb1|aZs^>bP0l+XkK{CJ$? diff --git a/src/main/resources/assets/hbm/textures/models/weapons/pch.png b/src/main/resources/assets/hbm/textures/models/weapons/pch.png deleted file mode 100644 index 97b11c5afac2cc8b1f66e55612d6c15ea8c1e816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmV-T0kZyyP)rv}t1rtU-g^K5GXns^yR{ZtYaHuu1H4N3xpNNAIWRMb=mADVpp*h|!N9A8 zM$C+76V_S~eG4Qah)DcBFwZl*_we5TS^}*#lv4Zbfj=-%RTY4rC1{%F0m3;406R!@ z1I!F&-Wvxa$L7acbOUu=pPrKEB) Date: Thu, 8 May 2025 19:31:55 +0200 Subject: [PATCH 006/491] Fixed id mismatch in steam turbine OpenComputers integration --- .../java/com/hbm/handler/CompatHandler.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/hbm/handler/CompatHandler.java b/src/main/java/com/hbm/handler/CompatHandler.java index 62fc432c0..46ce74fc0 100644 --- a/src/main/java/com/hbm/handler/CompatHandler.java +++ b/src/main/java/com/hbm/handler/CompatHandler.java @@ -38,16 +38,15 @@ public class CompatHandler { * @return Object[] array containing an int with the "compression level" */ public static Object[] steamTypeToInt(FluidType type) { - switch(type.getID()) { - case(4): // Fluids.HOTSTEAM - return new Object[] {1}; - case(5): // Fluids.SUPERHOTSTEAM - return new Object[] {2}; - case(6): // Fluids.ULTRAHOTSTEAM - return new Object[] {3}; - default: - return new Object[] {0}; - } + final int typeId = type.getID(); + if(typeId == Fluids.HOTSTEAM.getID()) { + return new Object[]{1}; + } else if(typeId == Fluids.SUPERHOTSTEAM.getID()) { + return new Object[]{2}; + } else if(typeId == Fluids.ULTRAHOTSTEAM.getID()) { + return new Object[]{3}; + } + return new Object[] {0}; } /** From be2edd87d8539e21cc740f751feb87a925f4a637 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Thu, 8 May 2025 22:29:32 +0200 Subject: [PATCH 007/491] Fixed wrong tank type. getInfo returns input tank type and setType also works with input tank type --- .../tileentity/machine/TileEntityChungus.java | 4 +- .../TileEntityMachineLargeTurbine.java | 38 +++++++++---------- .../machine/TileEntityMachineTurbine.java | 2 +- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index 9aa33070d..db9394516 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -139,7 +139,7 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr if(operational) turnTimer = 25; networkPackNT(150); - + } else { this.lastRotor = this.rotor; @@ -306,7 +306,7 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getType(Context context, Arguments args) { - return CompatHandler.steamTypeToInt(tanks[1].getTankType()); + return CompatHandler.steamTypeToInt(tanks[0].getTankType()); } @Callback(direct = true, limit = 4) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index 060710858..dc238dce9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -49,7 +49,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme public long power; public FluidTank[] tanks; protected double[] info = new double[3]; - + private boolean shouldTurn; public float rotor; public float lastRotor; @@ -57,7 +57,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme private AudioWrapper audio; private float audioDesync; - + //Configurable Values public static long maxPower = 100000000; public static int inputTankSize = 512_000; @@ -67,7 +67,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme public TileEntityMachineLargeTurbine() { super(7); - + tanks = new FluidTank[2]; tanks[0] = new FluidTank(Fluids.STEAM, inputTankSize); tanks[1] = new FluidTank(Fluids.SPENTSTEAM, outputTankSize); @@ -107,11 +107,11 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme @Override public void updateEntity() { - + if(!worldObj.isRemote) { - + this.info = new double[3]; - + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); this.tryProvide(worldObj, xCoord + dir.offsetX * -4, yCoord, zCoord + dir.offsetZ * -4, dir.getOpposite()); for(DirPos pos : getConPos()) this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); @@ -144,7 +144,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme } if(!valid) tanks[1].setTankType(Fluids.NONE); if(power > maxPower) power = maxPower; - + tanks[1].unloadTank(5, 6, slots); this.networkPackNT(50); @@ -152,12 +152,12 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme } else { this.lastRotor = this.rotor; this.rotor += this.fanAcceleration; - + if(this.rotor >= 360) { this.rotor -= 360; this.lastRotor -= 360; } - + if(shouldTurn) { // Fan accelerates with a random offset to ensure the audio doesn't perfectly align, makes for a more pleasant hum this.fanAcceleration = Math.max(0F, Math.min(15F, this.fanAcceleration += 0.075F + audioDesync)); @@ -172,7 +172,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme audio.updatePitch(0.25F + 0.75F * turbineSpeed); } else { this.fanAcceleration = Math.max(0F, Math.min(15F, this.fanAcceleration -= 0.1F)); - + if(audio != null) { if(this.fanAcceleration > 0) { float turbineSpeed = this.fanAcceleration / 15F; @@ -186,7 +186,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme } } } - + protected DirPos[] getConPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); @@ -214,11 +214,11 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme tanks[0].deserialize(buf); tanks[1].deserialize(buf); } - + public long getPowerScaled(int i) { return (power * i) / maxPower; } - + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); @@ -226,7 +226,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme tanks[1].readFromNBT(nbt, "steam"); power = nbt.getLong("power"); } - + @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); @@ -249,12 +249,12 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme public long getMaxPower() { return this.maxPower; } - + @Override public AxisAlignedBB getRenderBoundingBox() { return TileEntity.INFINITE_EXTENT_AABB; } - + @Override @SideOnly(Side.CLIENT) public double getMaxRenderDistanceSquared() { @@ -281,11 +281,11 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme public String getComponentName() { return "ntm_turbine"; } - + @Override public void onChunkUnload() { super.onChunkUnload(); - + if(audio != null) { audio.stopSound(); audio = null; @@ -311,7 +311,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getType(Context context, Arguments args) { - return CompatHandler.steamTypeToInt(tanks[1].getTankType()); + return CompatHandler.steamTypeToInt(tanks[0].getTankType()); } @Callback(direct = true, limit = 4) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 88f1c3694..0b89eb6d9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -364,7 +364,7 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getType(Context context, Arguments args) { - return CompatHandler.steamTypeToInt(tanks[1].getTankType()); + return CompatHandler.steamTypeToInt(tanks[0].getTankType()); } @Callback(direct = true, limit = 4) From 15fb0c1ad7e9c7ca441b457e11429a526ea11518 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Thu, 8 May 2025 22:43:49 +0200 Subject: [PATCH 008/491] Improved steam turbine OpenComputers integration + documented --- .../tileentity/machine/TileEntityChungus.java | 19 ++++++++++++++----- .../TileEntityMachineLargeTurbine.java | 17 ++++++++++++----- .../machine/TileEntityMachineTurbine.java | 16 +++++++++++----- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index db9394516..16121b0cb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -297,29 +297,35 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr } } - @Callback(direct = true) + @Callback(direct = true, doc = "function():table -- Gets current tanks state. The format is the following: , , , ") @Optional.Method(modid = "OpenComputers") public Object[] getFluid(Context context, Arguments args) { return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill()}; } - @Callback(direct = true) + @Callback(direct = true, doc = "function():number -- Gets the current input tank fluid type. 0 stands for steam, 1 for dense steam, 2 for super dense steam and 3 for ultra dense steam.") @Optional.Method(modid = "OpenComputers") public Object[] getType(Context context, Arguments args) { return CompatHandler.steamTypeToInt(tanks[0].getTankType()); } - @Callback(direct = true, limit = 4) + @Callback(direct = true, limit = 4, doc = "function(type:number) -- Sets the input tank fluid type. Refer getType() for the accepted values information.") @Optional.Method(modid = "OpenComputers") public Object[] setType(Context context, Arguments args) { tanks[0].setTankType(CompatHandler.intToSteamType(args.checkInteger(0))); return new Object[] {}; } - @Callback(direct = true) + @Callback(direct = true, doc = "function():number -- Gets the power buffer of the turbine.") + @Optional.Method(modid = "OpenComputers") + public Object[] getPower(Context context, Arguments args) { + return new Object[] {power}; + } + + @Callback(direct = true, doc = "function():table -- Gets information about this turbine. The format is the following: , , , , , ") @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill(), CompatHandler.steamTypeToInt(tanks[0].getTankType())}; + return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill(), CompatHandler.steamTypeToInt(tanks[0].getTankType())[0], power}; } @Override @@ -329,6 +335,7 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr "getFluid", "getType", "setType", + "getPower", "getInfo" }; } @@ -343,6 +350,8 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr return getType(context, args); case ("setType"): return setType(context, args); + case ("getPower"): + return getPower(context, args); case ("getInfo"): return getInfo(context, args); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index dc238dce9..a4655c162 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -302,29 +302,35 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme } } - @Callback(direct = true) + @Callback(direct = true, doc = "function():table -- Gets current tanks state. The format is the following: , , , ") @Optional.Method(modid = "OpenComputers") public Object[] getFluid(Context context, Arguments args) { return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill()}; } - @Callback(direct = true) + @Callback(direct = true, doc = "function():number -- Gets the current input tank fluid type. 0 stands for steam, 1 for dense steam, 2 for super dense steam and 3 for ultra dense steam.") @Optional.Method(modid = "OpenComputers") public Object[] getType(Context context, Arguments args) { return CompatHandler.steamTypeToInt(tanks[0].getTankType()); } - @Callback(direct = true, limit = 4) + @Callback(direct = true, limit = 4, doc = "function(type:number) -- Sets the input tank fluid type. Refer getType() for the accepted values information.") @Optional.Method(modid = "OpenComputers") public Object[] setType(Context context, Arguments args) { tanks[0].setTankType(CompatHandler.intToSteamType(args.checkInteger(0))); return new Object[] {}; } - @Callback(direct = true) + @Callback(direct = true, doc = "function():number -- Gets the power buffer of the turbine.") + @Optional.Method(modid = "OpenComputers") + public Object[] getPower(Context context, Arguments args) { + return new Object[] {power}; + } + + @Callback(direct = true, doc = "function():table -- Gets information about this turbine. The format is the following: , , , , , ") @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill(), CompatHandler.steamTypeToInt(tanks[0].getTankType())}; + return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill(), CompatHandler.steamTypeToInt(tanks[0].getTankType())[0], power}; } @Override @@ -334,6 +340,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme "getFluid", "getType", "setType", + "getPower", "getInfo" }; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 0b89eb6d9..3180fbefa 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -355,29 +355,35 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS return "ntm_turbine"; } - @Callback(direct = true) + @Callback(direct = true, doc = "function():table -- Gets current tanks state. The format is the following: , , , ") @Optional.Method(modid = "OpenComputers") public Object[] getFluid(Context context, Arguments args) { return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill()}; } - @Callback(direct = true) + @Callback(direct = true, doc = "function():number -- Gets the current input tank fluid type. 0 stands for steam, 1 for dense steam, 2 for super dense steam and 3 for ultra dense steam.") @Optional.Method(modid = "OpenComputers") public Object[] getType(Context context, Arguments args) { return CompatHandler.steamTypeToInt(tanks[0].getTankType()); } - @Callback(direct = true, limit = 4) + @Callback(direct = true, limit = 4, doc = "function(type:number) -- Sets the input tank fluid type. Refer getType() for the accepted values information.") @Optional.Method(modid = "OpenComputers") public Object[] setType(Context context, Arguments args) { tanks[0].setTankType(CompatHandler.intToSteamType(args.checkInteger(0))); return new Object[] {true}; } - @Callback(direct = true) + @Callback(direct = true, doc = "function():number -- Gets the power buffer of the turbine.") + @Optional.Method(modid = "OpenComputers") + public Object[] getPower(Context context, Arguments args) { + return new Object[] {power}; + } + + @Callback(direct = true, doc = "function():table -- Gets information about this turbine. The format is the following: , , , , , ") @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill(), CompatHandler.steamTypeToInt(tanks[0].getTankType())}; + return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill(), CompatHandler.steamTypeToInt(tanks[0].getTankType())[0], power}; } @Override From 805ee3a9980e89c2d06f9d1ae6d7ade641f3a2f9 Mon Sep 17 00:00:00 2001 From: Night Heron Date: Fri, 9 May 2025 23:30:40 +0800 Subject: [PATCH 009/491] cumming --- src/main/resources/assets/hbm/lang/zh_CN.lang | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 51e23d9ab..5d8f62943 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -6048,3 +6048,15 @@ container.ammoBag=弹药袋 item.ammo_bag.name=弹药袋 item.ammo_bag_infinite.name=无限弹药袋 item.gun_g3_zebra.name=斑马步枪 +container.rttyController=无线红石信号控制器 +container.rttyReader=无线红石信号控制器 +tile.radio_torch_controller.name=无线红石信号控制器 +tile.radio_torch_controller.desc=可以接收信号并将信号传送到与其连接的机器 +tile.radio_torch_reader.name=无线红石信号控制器 +tile.radio_torch_reader.desc=从被连接的块读取数值并以指定的频率发送 +item.ammo_standard.ct_hook.name=抓钩 +item.ammo_standard.ct_mortar.name=炸药包 +item.ammo_standard.ct_mortar_charge.name=重型炸药包 +item.gun_charge_thrower.name=炸药投掷器 +tile.sandbags.name=沙袋 +tile.wood_barrier.name=木制围栏 From f3a9c0f787740bb4e13245480cc07a4757431861 Mon Sep 17 00:00:00 2001 From: LegendaryDoge30 Date: Sat, 10 May 2025 00:12:33 +0200 Subject: [PATCH 010/491] puter --- src/main/java/com/hbm/blocks/ModBlocks.java | 16 +- .../assets/hbm/models/blocks/puter.obj | 1070 +++++------------ .../hbm/textures/blocks/deco_computer.png | Bin 1832 -> 671 bytes 3 files changed, 294 insertions(+), 792 deletions(-) diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index d1c604bed..41cbe0f7f 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -335,7 +335,7 @@ public class ModBlocks { public static Block brick_compound; public static Block brick_asbestos; public static Block brick_fire; - + public static Block lightstone; public static Block concrete_slab; @@ -824,7 +824,7 @@ public class ModBlocks { public static Block drone_dock; public static Block drone_crate_provider; public static Block drone_crate_requester; - + public static Block pneumatic_tube; public static Block fan; @@ -1479,7 +1479,7 @@ public class ModBlocks { gravel_diamond = new BlockFalling(Material.sand).setBlockName("gravel_diamond").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeGravel).setHardness(0.6F).setBlockTextureName(RefStrings.MODID + ":gravel_diamond"); asphalt = new BlockSpeedy(Material.rock, 1.5).setBlockName("asphalt").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(120.0F).setBlockTextureName(RefStrings.MODID + ":asphalt"); asphalt_light = new BlockSpeedy(Material.rock, 1.5).setBlockName("asphalt_light").setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(15.0F).setResistance(120.0F).setBlockTextureName(RefStrings.MODID + ":asphalt_light"); - + sandbags = new BlockSandbags(Material.ground).setBlockName("sandbags").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":sandbags"); wood_barrier = new BlockBarrier(Material.wood).setStepSound(Block.soundTypeWood).setBlockName("wood_barrier").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":wood_barrier"); @@ -1549,7 +1549,7 @@ public class ModBlocks { brick_double_slab = new BlockMultiSlab(brick_slab, Material.rock, reinforced_stone, reinforced_brick, brick_obsidian, brick_light, brick_compound, brick_asbestos, brick_fire).setBlockName("brick_double_slab").setCreativeTab(MainRegistry.blockTab); stones_slab = new BlockMultiSlabMeta(null, Material.rock, new Block[] { lightstone, lightstone }, LightstoneType.TILE.ordinal(), LightstoneType.BRICKS.ordinal()).setBlockName("stones_slab").setCreativeTab(MainRegistry.blockTab); stones_double_slab = new BlockMultiSlabMeta(stones_slab, Material.rock, new Block[] { lightstone, lightstone }, LightstoneType.TILE.ordinal(), LightstoneType.BRICKS.ordinal()).setBlockName("stones_double_slab").setCreativeTab(MainRegistry.blockTab); - + concrete_smooth_stairs = new BlockGenericStairs(concrete_smooth, 0).setBlockName("concrete_smooth_stairs").setCreativeTab(MainRegistry.blockTab); concrete_stairs = new BlockGenericStairs(concrete, 0).setBlockName("concrete_stairs").setCreativeTab(MainRegistry.blockTab); concrete_asbestos_stairs = new BlockGenericStairs(concrete_asbestos, 0).setBlockName("concrete_asbestos_stairs").setCreativeTab(MainRegistry.blockTab); @@ -1604,7 +1604,7 @@ public class ModBlocks { brick_red = new BlockRedBrick(Material.rock).setBlockName("brick_red").setResistance(10_000); - deco_computer = new BlockDecoModel(Material.iron, DecoComputerEnum.class, true, false).setBlockBoundsTo(.160749F, 0F, 0F, .839251F, .867849F, .622184F).setBlockName("deco_computer").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_computer"); + deco_computer = new BlockDecoModel(Material.iron, DecoComputerEnum.class, true, false).setBlockBoundsTo(.125F, 0F, 0F, .875F, .875F, .625F).setBlockName("deco_computer").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_computer"); deco_crt = new BlockDecoCRT(Material.iron).setBlockName("deco_crt").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); deco_toaster = new BlockDecoToaster(Material.iron).setBlockName("deco_toaster").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); filing_cabinet = new BlockDecoContainer(Material.iron, DecoCabinetEnum.class, true, false, TileEntityFileCabinet.class).setBlockBoundsTo(.1875F, 0F, 0F, .8125F, 1F, .75F).setBlockName("filing_cabinet").setCreativeTab(MainRegistry.blockTab).setHardness(10.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -1955,7 +1955,7 @@ public class ModBlocks { drone_dock = new DroneDock().setBlockName("drone_dock").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":drone_dock"); drone_crate_provider = new DroneDock().setBlockName("drone_crate_provider").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":drone_crate_provider"); drone_crate_requester = new DroneDock().setBlockName("drone_crate_requester").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":drone_crate_requester"); - + pneumatic_tube = new PneumoTube().setBlockName("pneumatic_tube").setStepSound(ModSoundTypes.pipe).setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_tube"); chain = new BlockChain(Material.iron).setBlockName("dungeon_chain").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":chain"); @@ -2698,14 +2698,14 @@ public class ModBlocks { GameRegistry.registerBlock(brick_light, ItemBlockBlastInfo.class, brick_light.getUnlocalizedName()); GameRegistry.registerBlock(brick_asbestos, brick_asbestos.getUnlocalizedName()); GameRegistry.registerBlock(brick_fire, ItemBlockBlastInfo.class, brick_fire.getUnlocalizedName()); - + //Lightstone and its stair/slab variants register(lightstone); register(lightstone_tile_stairs); register(lightstone_bricks_stairs); register(stones_slab, ItemModSlab.class); register(stones_double_slab, ItemModSlab.class); - + GameRegistry.registerBlock(concrete_slab, ItemModSlab.class, concrete_slab.getUnlocalizedName()); GameRegistry.registerBlock(concrete_double_slab, ItemModSlab.class, concrete_double_slab.getUnlocalizedName()); GameRegistry.registerBlock(concrete_brick_slab, ItemModSlab.class, concrete_brick_slab.getUnlocalizedName()); diff --git a/src/main/resources/assets/hbm/models/blocks/puter.obj b/src/main/resources/assets/hbm/models/blocks/puter.obj index c8d5fc5a2..1b7c78f85 100644 --- a/src/main/resources/assets/hbm/models/blocks/puter.obj +++ b/src/main/resources/assets/hbm/models/blocks/puter.obj @@ -1,786 +1,288 @@ -# Blender v2.79 (sub 0) OBJ File: '' +# Blender 4.0.2 # www.blender.org -o Cube.002 -v -0.182506 -0.356313 -0.499021 -v -0.202175 -0.376577 -0.479353 -v -0.202175 -0.356313 -0.479353 -v 0.202175 -0.376577 -0.479353 -v 0.182506 -0.356313 -0.499021 -v 0.202175 -0.356313 -0.479353 -v 0.182506 -0.356313 0.025979 -v -0.182506 -0.376577 0.025979 -v 0.182506 -0.376577 0.025979 -v 0.168634 -0.353125 -0.007583 -v 0.168634 -0.353125 -0.465459 -v -0.168634 -0.353125 -0.007583 -v 0.202175 -0.356313 0.006310 -v -0.202175 -0.356313 0.006310 -v -0.202175 -0.376577 0.006310 -v -0.182475 -0.376637 -0.499021 -v 0.182509 -0.376637 -0.499021 -v 0.202175 -0.376577 0.006310 -v -0.168634 -0.353125 -0.465459 -v -0.182506 -0.356313 0.025979 -v 0.236819 -0.376637 0.112318 -v -0.236819 -0.391892 0.112318 -v 0.236819 -0.391892 0.112318 -v 0.262500 -0.500000 -0.434422 -v 0.262500 -0.500000 -0.000000 -v -0.262500 -0.500000 -0.434422 -v 0.243379 -0.500000 0.123162 -v 0.269772 -0.391892 0.010843 -v 0.243379 -0.391892 0.123162 -v 0.262500 -0.391892 -0.000000 -v -0.236819 -0.376637 0.112318 -v -0.262500 -0.391892 -0.000000 -v -0.262500 -0.500000 -0.000000 -v -0.269772 -0.391892 0.010843 -v 0.242168 -0.500000 -0.499021 -v -0.242168 -0.500000 -0.499021 -v -0.262500 -0.376637 -0.434422 -v -0.242168 -0.376637 -0.499021 -v 0.242168 -0.376637 -0.499021 -v 0.262500 -0.376637 -0.434422 -v 0.236819 -0.500000 0.112318 -v 0.269772 -0.500000 0.010843 -v -0.243379 -0.500000 0.123162 -v -0.236819 -0.500000 0.112318 -v 0.262500 -0.376637 -0.000000 -v -0.243379 -0.391892 0.123162 -v -0.269772 -0.500000 0.010843 -v -0.262500 -0.376637 -0.000000 -vt 0.737500 0.775000 -vt 0.750000 0.787500 -vt 0.737500 0.787500 -vt 0.975000 0.787500 -vt 0.962500 0.775000 -vt 0.975000 0.775000 -vt 0.962500 0.725000 -vt 0.750000 0.712500 -vt 0.962500 0.712500 -vt 0.962500 0.062500 -vt 0.962500 0.350000 -vt 0.750000 0.062500 -vt 0.975000 0.725000 -vt 0.937500 0.400000 -vt 0.925000 0.712500 -vt 0.925000 0.400000 -vt 0.737500 0.787500 -vt 0.962500 0.787500 -vt 0.962500 0.712500 -vt 0.975000 0.400000 -vt 0.975000 0.712500 -vt 0.950000 0.700000 -vt 0.950000 0.412500 -vt 0.750000 0.750000 -vt 0.962500 0.750000 -vt 0.950000 0.412500 -vt 0.962500 0.400000 -vt 0.750000 0.775000 -vt 0.962500 0.750000 -vt 0.750000 0.725000 -vt 0.737500 0.712500 -vt 0.650000 0.075000 -vt 0.362500 0.062500 -vt 0.650000 0.062500 -vt 0.575000 0.475000 -vt 0.700000 0.475000 -vt 0.575000 0.662500 -vt 0.350000 0.162500 -vt 0.412500 0.225000 -vt 0.350000 0.225000 -vt 0.425000 0.225000 -vt 0.425000 0.162500 -vt 0.687500 0.162500 -vt 0.350000 0.150000 -vt 0.425000 0.137500 -vt 0.350000 0.137500 -vt 0.425000 0.075000 -vt 0.412500 0.137500 -vt 0.725000 0.000000 -vt 0.937500 0.000000 -vt 0.975000 0.062500 -vt 0.725000 0.075000 -vt 0.687500 0.150000 -vt 0.725000 0.150000 -vt 0.725000 0.237500 -vt 0.687500 0.237500 -vt 0.750000 0.487500 -vt 0.712500 0.475000 -vt 0.762500 0.487500 -vt 0.537500 0.150000 -vt 0.350000 0.162500 -vt 0.350000 0.150000 -vt 0.762500 0.650000 -vt 0.750000 0.650000 -vt 0.350000 0.225000 -vt 0.425000 0.237500 -vt 0.350000 0.237500 -vt 0.587500 0.162500 -vt 0.537500 0.162500 -vt 0.350000 0.137500 -vt 0.412500 0.075000 -vt 0.350000 0.075000 -vt 0.412500 0.162500 -vt 0.687500 0.075000 -vt 0.587500 0.162500 -vt 0.637500 0.150000 -vt 0.637500 0.162500 -vt 0.712500 0.662500 -vt 0.700000 0.662500 -vt 0.350000 0.062500 -vt 0.662500 0.000000 -vt 0.662500 0.062500 -vt 0.912500 0.412500 -vt 0.862500 0.687500 -vt 0.862500 0.375000 -vt 0.750000 0.775000 -vt 0.750000 0.350000 -vt 0.975000 0.712500 -vt 0.937500 0.712500 -vt 0.737500 0.725000 -vt 0.750000 0.750000 -vt 0.737500 0.775000 -vt 0.950000 0.700000 -vt 0.362500 0.075000 -vt 0.537500 0.650000 -vt 0.537500 0.487500 -vt 0.425000 0.150000 -vt 0.975000 0.000000 -vt 0.662500 0.062500 -vt 0.662500 0.000000 -vt 0.725000 0.162500 -vt 0.587500 0.150000 -vt 0.587500 0.150000 -vt 0.350000 0.000000 -vt 0.862500 0.687500 -vt 0.875000 0.700000 -vt 0.825000 0.700000 -vt 0.812500 0.650000 -vt 0.812500 0.350000 -vt 0.862500 0.375000 -vt 0.925000 0.350000 -vt 0.925000 0.400000 -vt 0.812500 0.350000 -vt 0.812500 0.650000 -vt 0.762500 0.375000 -vt 0.800000 0.700000 -vt 0.762500 0.687500 -vt 0.750000 0.700000 -vt 0.925000 0.712500 -vt 0.925000 0.662500 -vt 0.912500 0.650000 -vn -0.7071 0.0000 -0.7071 -vn 0.7071 0.0000 -0.7071 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 1.0000 0.0000 -vn 0.7071 -0.0000 0.7071 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn -0.0946 0.9955 0.0000 -vn 0.0000 0.9955 0.0946 -vn 0.0946 0.9955 0.0000 -vn 0.0000 0.9955 -0.0946 -vn -0.7071 -0.0000 0.7071 -vn 0.0000 -1.0000 -0.0000 -vn 0.9735 0.0000 0.2288 -vn -0.9748 0.0000 0.2229 -vn -0.8305 0.0000 -0.5570 -vn -0.9539 0.0000 -0.3002 -vn 0.9539 0.0000 -0.3002 -vn 0.9748 0.0000 0.2229 -vn -0.9735 0.0000 0.2288 -vn 0.8305 0.0000 -0.5570 -vn 0.0000 1.0000 0.0007 -vn -0.7065 -0.0011 -0.7077 -vn 0.7071 0.0001 -0.7071 -vn -0.0669 0.9955 0.0669 -vn -0.0669 0.9955 -0.0669 -vn 0.0669 0.9955 -0.0669 -vn 0.0669 0.9955 0.0669 -vn 0.0000 1.0000 -0.0031 -vn -0.0013 1.0000 -0.0004 -vn -0.0010 1.0000 0.0000 -vn 0.0010 1.0000 0.0002 -vn 0.0010 1.0000 0.0000 -vn 0.0013 1.0000 -0.0004 -vn -0.0010 1.0000 0.0002 -vn -0.0004 1.0000 0.0004 -vn 0.0004 1.0000 0.0004 -s off -f 1/1/1 2/2/1 3/3/1 -f 4/4/2 5/5/2 6/6/2 -f 7/7/3 8/8/3 9/9/3 -f 10/10/4 11/11/4 12/12/4 -f 9/9/5 13/13/5 7/7/5 -f 14/14/6 2/15/6 15/16/6 -f 16/17/7 5/5/7 17/18/7 -f 6/19/8 18/20/8 4/21/8 -f 19/22/9 14/14/9 12/23/9 -f 12/24/10 7/7/10 10/25/10 -f 6/19/11 10/26/11 13/27/11 -f 1/28/12 11/29/12 5/5/12 -f 20/30/13 15/31/13 8/8/13 -f 21/32/3 22/33/3 23/34/3 -f 24/35/14 25/36/14 26/37/14 -f 27/38/15 28/39/15 29/40/15 -f 30/41/8 25/42/8 24/43/8 -f 31/44/16 32/45/16 22/46/16 -f 33/47/17 34/48/17 32/45/17 -f 16/49/7 17/50/7 35/51/7 -f 36/52/18 37/53/18 38/54/18 -f 24/43/19 39/55/19 40/56/19 -f 41/57/14 42/58/14 27/59/14 -f 22/60/4 29/61/4 23/62/4 -f 41/57/14 43/63/14 44/64/14 -f 23/65/20 45/66/20 21/67/20 -f 22/60/4 34/68/4 46/69/4 -f 46/70/21 47/71/21 43/72/21 -f 30/41/22 42/73/22 25/42/22 -f 26/74/6 32/45/6 37/53/6 -f 23/75/4 28/76/4 30/77/4 -f 44/64/14 47/78/14 33/79/14 -f 46/80/3 27/81/3 29/82/3 -f 9/83/23 31/84/23 21/85/23 -f 1/1/24 16/86/24 2/2/24 -f 4/4/25 17/18/25 5/5/25 -f 7/7/3 20/30/3 8/8/3 -f 19/87/4 12/12/4 11/11/4 -f 9/9/5 18/88/5 13/13/5 -f 14/14/6 3/89/6 2/15/6 -f 16/17/7 1/1/7 5/5/7 -f 6/19/8 13/27/8 18/20/8 -f 12/24/26 14/90/26 20/30/26 -f 19/91/27 1/28/27 3/92/27 -f 11/29/28 6/6/28 5/5/28 -f 10/25/29 7/7/29 13/13/29 -f 19/22/9 3/89/9 14/14/9 -f 12/24/10 20/30/10 7/7/10 -f 6/19/11 11/93/11 10/26/11 -f 1/28/12 19/91/12 11/29/12 -f 20/30/13 14/90/13 15/31/13 -f 21/32/3 31/94/3 22/33/3 -f 25/36/14 41/57/14 44/64/14 -f 44/64/14 33/79/14 25/36/14 -f 33/79/14 26/37/14 25/36/14 -f 26/37/14 36/95/14 35/96/14 -f 35/96/14 24/35/14 26/37/14 -f 27/38/15 42/73/15 28/39/15 -f 24/43/8 40/56/8 30/41/8 -f 40/56/8 45/66/8 30/41/8 -f 31/44/16 48/97/16 32/45/16 -f 33/47/17 47/71/17 34/48/17 -f 17/50/7 39/98/7 35/51/7 -f 35/51/7 36/99/7 16/49/7 -f 36/99/7 38/100/7 16/49/7 -f 36/52/18 26/74/18 37/53/18 -f 24/43/19 35/101/19 39/55/19 -f 41/57/14 25/36/14 42/58/14 -f 22/60/4 46/69/4 29/61/4 -f 41/57/14 27/59/14 43/63/14 -f 23/65/20 30/41/20 45/66/20 -f 22/60/4 32/102/4 34/68/4 -f 46/70/21 34/48/21 47/71/21 -f 30/41/22 28/39/22 42/73/22 -f 33/47/6 32/45/6 26/74/6 -f 32/45/6 48/97/6 37/53/6 -f 23/75/4 29/103/4 28/76/4 -f 44/64/14 43/63/14 47/78/14 -f 46/80/3 43/104/3 27/81/3 -f 2/105/30 16/106/30 38/107/30 -f 38/107/31 37/108/31 2/105/31 -f 37/108/32 48/109/32 15/110/32 -f 21/85/33 45/111/33 18/112/33 -f 45/113/34 40/114/34 18/115/34 -f 40/114/35 39/116/35 4/117/35 -f 39/116/30 17/118/30 4/117/30 -f 37/108/32 15/110/32 2/105/32 -f 48/119/36 31/84/36 15/120/36 -f 40/114/34 4/117/34 18/115/34 -f 8/121/37 15/120/37 31/84/37 -f 21/85/38 18/112/38 9/83/38 -f 9/83/23 8/121/23 31/84/23 -o Cube.001 -v 0.065019 -0.337090 -0.339524 -v 0.077958 -0.358688 -0.229123 -v 0.077958 -0.358688 -0.352438 -v -0.065019 -0.247914 -0.242045 -v -0.065019 -0.337090 -0.339524 -v -0.065019 -0.337090 -0.242037 -v -0.065019 -0.247914 -0.339516 -v -0.074076 -0.234429 -0.233013 -v -0.074076 -0.234429 -0.348548 -v 0.048744 -0.337090 -0.225761 -v -0.061658 -0.358688 -0.212822 -v 0.061658 -0.358688 -0.212822 -v -0.048744 -0.337090 -0.355799 -v 0.061658 -0.358688 -0.368738 -v -0.061658 -0.358688 -0.368738 -v -0.048736 -0.247914 -0.355799 -v 0.048744 -0.337090 -0.355799 -v 0.065019 -0.247914 -0.339516 -v 0.065019 -0.337090 -0.242037 -v 0.048736 -0.247914 -0.225761 -v -0.048744 -0.337090 -0.225761 -v -0.077958 -0.358688 -0.352438 -v 0.057767 -0.234429 -0.364857 -v 0.048736 -0.247914 -0.355799 -v 0.065019 -0.247914 -0.242045 -v 0.074076 -0.234429 -0.348548 -v 0.074076 -0.234429 -0.233013 -v -0.057767 -0.234429 -0.216704 -v -0.048736 -0.247914 -0.225761 -v -0.057767 -0.234429 -0.364857 -v 0.057767 -0.234429 -0.216704 -v -0.077958 -0.358688 -0.229123 -v -0.228515 -0.193409 -0.478319 -v -0.262500 -0.200363 -0.133796 -v -0.262500 -0.159424 -0.478319 -v -0.228515 0.290571 -0.478319 -v -0.262500 0.256505 -0.133796 -v -0.228434 0.290571 -0.133796 -v 0.262500 -0.234429 0.025979 -v 0.228515 -0.193409 -0.478319 -v 0.262500 -0.200363 -0.133796 -v 0.228434 -0.234429 -0.133796 -v 0.262500 -0.159424 -0.478319 -v 0.262500 0.256505 -0.133796 -v -0.262500 -0.234429 0.025979 -v -0.305185 -0.311180 -0.084290 -v -0.228434 -0.234429 -0.133796 -v 0.305185 0.367322 -0.084290 -v 0.228434 0.290571 -0.133796 -v 0.305271 0.367322 0.092896 -v 0.262500 0.290571 0.092896 -v 0.305271 -0.311180 0.092896 -v 0.305185 -0.311180 -0.084290 -v 0.339251 -0.277114 -0.084290 -v -0.305271 0.367322 0.092896 -v -0.305185 0.367322 -0.084290 -v -0.339251 0.333256 -0.084290 -v 0.262500 -0.234429 0.092896 -v -0.339251 0.333342 0.092896 -v -0.339251 -0.277200 0.092896 -v -0.262500 -0.234429 0.092896 -v 0.339251 -0.277200 0.092896 -v 0.339251 0.333342 0.092896 -v -0.339251 -0.277114 -0.084290 -v -0.305271 -0.311180 0.092896 -v 0.339251 0.333256 -0.084290 -v 0.228515 0.290571 -0.478319 -v 0.262500 0.256586 -0.478319 -v -0.241798 0.248016 -0.499021 -v -0.219945 0.269868 -0.499021 -v 0.241798 -0.150854 -0.499021 -v 0.219945 -0.172706 -0.499021 -v 0.241798 0.248016 -0.499021 -v -0.241798 -0.150854 -0.499021 -v -0.262500 0.256586 -0.478319 -v -0.219945 -0.172706 -0.499021 -v -0.262500 0.290571 0.025979 -v -0.262500 0.290571 0.092896 -v 0.262500 0.290571 0.025979 -v 0.219945 0.269868 -0.499021 -vt 0.325000 0.725000 -vt 0.375000 0.737500 -vt 0.325000 0.737500 -vt 0.450000 0.675000 -vt 0.500000 0.725000 -vt 0.450000 0.725000 -vt 0.500000 0.675000 -vt 0.450000 0.662500 -vt 0.500000 0.662500 -vt 0.387500 0.725000 -vt 0.437500 0.737500 -vt 0.387500 0.737500 -vt 0.512500 0.725000 -vt 0.562500 0.737500 -vt 0.512500 0.737500 -vt 0.512500 0.675000 -vt 0.562500 0.725000 -vt 0.325000 0.675000 -vt 0.375000 0.725000 -vt 0.387500 0.675000 -vt 0.437500 0.725000 -vt 0.325000 0.787500 -vt 0.375000 0.800000 -vt 0.387500 0.750000 -vt 0.562500 0.662500 -vt 0.562500 0.675000 -vt 0.375000 0.675000 -vt 0.325000 0.662500 -vt 0.375000 0.662500 -vt 0.437500 0.662500 -vt 0.437500 0.675000 -vt 0.512500 0.737500 -vt 0.575000 0.737500 -vt 0.575000 0.725000 -vt 0.512500 0.662500 -vt 0.575000 0.675000 -vt 0.575000 0.662500 -vt 0.387500 0.662500 -vt 0.450000 0.737500 -vt 0.375000 0.737500 -vt 0.337500 0.737500 -vt 0.325000 0.750000 -vt 0.337500 0.800000 -vt 0.387500 0.787500 -vt 0.387500 0.262500 -vt 0.375000 0.375000 -vt 0.375000 0.262500 -vt 0.187500 0.262500 -vt 0.200000 0.375000 -vt 0.187500 0.375000 -vt 0.062500 0.737500 -vt 0.262500 0.537500 -vt 0.262500 0.737500 -vt 0.562500 0.262500 -vt 0.575000 0.375000 -vt 0.562500 0.375000 -vt 0.600000 0.262500 -vt 0.750000 0.375000 -vt 0.387500 0.412500 -vt 0.387500 0.375000 -vt 0.012500 0.412500 -vt 0.012500 0.375000 -vt 0.012500 0.800000 -vt -0.000000 0.787500 -vt 0.037500 0.762500 -vt 0.562500 0.475000 -vt 0.562500 0.412500 -vt 0.575000 0.412500 -vt 0.187500 0.475000 -vt 0.187500 0.412500 -vt 0.200000 0.412500 -vt 0.750000 0.475000 -vt 0.575000 0.475000 -vt 0.200000 0.475000 -vt 0.375000 0.412500 -vt 0.375000 0.475000 -vt -0.000000 0.487500 -vt 0.012500 0.475000 -vt 0.037500 0.512500 -vt 0.287500 0.762500 -vt 0.325000 0.787500 -vt 0.312500 0.800000 -vt 0.287500 0.512500 -vt 0.312500 0.475000 -vt 0.325000 0.487500 -vt 0.012500 0.475000 -vt -0.000000 0.412500 -vt 0.350000 0.262500 -vt 0.450000 0.312500 -vt 0.450000 0.337500 -vt 0.500000 0.337500 -vt 0.487500 0.350000 -vt 0.012500 0.262500 -vt -0.000000 0.375000 -vt 0.387500 0.475000 -vt -0.000000 0.262500 -vt 0.200000 0.250000 -vt 0.187500 0.250000 -vt 0.575000 0.250000 -vt 0.562500 0.250000 -vt -0.000000 0.250000 -vt 0.375000 0.250000 -vt 0.200000 0.262500 -vt 0.350000 0.250000 -vt 0.750000 0.250000 -vt 0.750000 0.262500 -vt 0.337500 0.475000 -vt 0.325000 0.487500 -vt 0.325000 0.650000 -vt 0.500000 0.312500 -vt 0.487500 0.300000 -vt 0.462500 0.300000 -vt 0.462500 0.350000 -vt 0.062500 0.762500 -vt 0.575000 0.262500 -vt 0.750000 0.412500 -vt 0.287500 0.737500 -vt 0.062500 0.512500 -vt 0.062500 0.537500 -vt 0.037500 0.537500 -vt 0.037500 0.737500 -vt -0.000000 0.475000 -vt 0.012500 0.250000 -vt 0.387500 0.250000 -vt 0.600000 0.250000 -vt 0.337500 0.662500 -vt 0.525000 0.662500 -vt 0.537500 0.650000 -vt 0.537500 0.487500 -vt 0.525000 0.475000 -vt 0.262500 0.762500 -vt 0.287500 0.537500 -vt 0.262500 0.512500 -vn 0.8578 0.5139 0.0000 -vn -1.0000 0.0000 0.0000 -vn -0.8301 -0.5576 0.0000 -vn 0.0000 0.5139 0.8578 -vn 0.0000 0.5139 -0.8578 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 +mtllib puter.mtl +o Cube.003 +v -0.312500 -0.125000 0.062500 +v -0.312500 0.312500 0.062500 +v 0.312500 -0.125000 0.062500 +v -0.375000 -0.187500 0.062500 +v -0.312500 -0.125000 0.000000 +v -0.312500 0.312500 0.000000 +v 0.312500 -0.125000 -0.000000 +v -0.250000 -0.062500 0.062500 +v -0.250000 0.250000 0.062500 +v 0.250000 -0.062500 0.062500 +v 0.250000 0.250000 0.062500 +v 0.312500 0.312500 -0.000000 +v 0.312500 0.312500 0.062500 +v 0.375000 0.375000 0.062500 +v 0.375000 0.375000 -0.312500 +v 0.375000 -0.187500 0.062500 +v -0.375000 0.375000 0.062500 +v -0.375000 0.375000 -0.312500 +v -0.375000 -0.187500 -0.312500 +v -0.312500 0.312500 -0.312500 +v -0.312500 -0.187500 -0.312500 +v 0.312500 0.312500 -0.312500 +v -0.312500 0.250000 -0.500000 +v -0.312500 -0.187500 -0.500000 +v 0.312500 0.250000 -0.500000 +v 0.312500 -0.187500 -0.500000 +v 0.312500 -0.187500 -0.312500 +v 0.375000 -0.187500 -0.312500 +v -0.375000 -0.500000 0.500000 +v -0.375000 -0.500000 0.187500 +v -0.375000 -0.437500 0.500000 +v 0.375000 -0.500000 0.500000 +v 0.375000 -0.500000 0.187500 +v 0.375000 -0.437500 0.500000 +v 0.375000 -0.375000 0.187500 +v -0.375000 -0.375000 0.187500 +v -0.375000 -0.500000 0.125000 +v -0.375000 -0.500000 -0.500000 +v -0.375000 -0.312500 0.125000 +v 0.375000 -0.500000 0.125000 +v 0.375000 -0.500000 -0.500000 +v 0.375000 -0.312500 0.125000 +v 0.375000 -0.312500 -0.500000 +v -0.375000 -0.312500 -0.500000 +v -0.000000 -0.250000 -0.312500 +v 0.108253 -0.250000 -0.250000 +v -0.000000 -0.187500 -0.312500 +v -0.108253 -0.250000 -0.250000 +v -0.108253 -0.250000 -0.125000 +v -0.108253 -0.187500 -0.250000 +v -0.108253 -0.187500 -0.125000 +v -0.000000 -0.187500 -0.062500 +v 0.108253 -0.187500 -0.125000 +v -0.000000 -0.250000 -0.062500 +v 0.108253 -0.250000 -0.125000 +v 0.108253 -0.187500 -0.250000 +v -0.312500 -0.312500 0.062500 +v -0.312500 -0.312500 -0.437500 +v -0.250000 -0.250000 0.000000 +v 0.312500 -0.312500 0.062500 +v 0.312500 -0.312500 -0.437500 +v 0.250000 -0.250000 -0.000000 +v 0.250000 -0.250000 -0.375000 +v -0.250000 -0.250000 -0.375000 +vn -0.0000 -0.0000 1.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.3002 0.3002 0.9054 +vn -0.4082 -0.4082 0.8165 +vn -0.3002 -0.3002 0.9054 +vn 0.4082 -0.4082 0.8165 +vn 0.3002 -0.3002 0.9054 +vn 0.4082 0.4082 0.8165 +vn 0.3002 0.3002 0.9054 +vn -0.4082 0.4082 0.8165 +vn -1.0000 -0.0000 -0.0000 vn -0.0000 -1.0000 -0.0000 -vn 0.0000 -0.5576 -0.8301 -vn 0.8301 -0.5576 0.0000 -vn 0.0000 -0.5576 0.8301 -vn -0.5130 -0.6882 0.5130 -vn -0.5397 0.6461 -0.5397 -vn 0.5397 0.6461 -0.5397 -vn 0.5397 0.6461 0.5397 -vn -0.7071 0.0001 0.7071 -vn -0.5130 -0.6882 -0.5130 -vn 0.5130 -0.6882 -0.5130 -vn 0.5131 -0.6882 0.5130 -vn -0.7071 0.0001 -0.7071 -vn 0.7071 0.0001 -0.7071 -vn 0.7071 0.0001 0.7071 -vn -0.5397 0.6461 0.5397 -vn -0.8578 0.5139 0.0000 -vn 0.5130 -0.6882 0.5130 -vn -0.7046 -0.7046 -0.0837 -vn -0.7071 0.7071 0.0002 -vn 0.7046 -0.7046 -0.0837 -vn 0.0000 -0.5420 -0.8404 -vn 0.0000 0.5420 -0.8404 -vn 0.5420 0.0000 -0.8404 -vn 0.0000 1.0000 0.0000 -vn -0.5420 0.0000 -0.8404 -vn 0.7071 0.7071 -0.0003 -vn -0.7071 0.7071 -0.0003 -vn 0.2934 -0.2934 -0.9098 -vn 0.2934 0.2934 -0.9098 -vn -0.2934 -0.2934 -0.9098 -vn -0.2934 0.2934 -0.9098 -vn -0.7071 -0.7071 -0.0003 -vn 0.7071 -0.7071 -0.0003 -vn 0.7071 0.7071 0.0002 -vn -0.5000 0.5000 -0.7071 -vn 0.5000 -0.5000 -0.7071 -vn 0.5000 0.5000 -0.7070 -vn -0.5000 -0.5000 -0.7070 -vn 0.0000 -0.7071 -0.7071 -vn -0.7071 0.0000 -0.7071 -vn 0.0000 0.7071 -0.7071 -vn 0.7071 0.0000 -0.7071 -vn 0.1414 -0.9798 -0.1414 -vn 0.0000 -0.9404 -0.3400 -vn -0.1414 -0.9798 -0.1414 -vn -0.1623 -0.9798 -0.1166 -vn -0.5000 0.5000 -0.7070 -vn 0.5000 -0.5000 -0.7070 -vn 0.5000 0.5000 -0.7071 -vn -0.5000 -0.5000 -0.7071 -vn 0.1623 -0.9798 -0.1166 -s off -f 49/122/39 50/123/39 51/124/39 -f 52/125/40 53/126/40 54/127/40 -f 55/128/41 56/129/41 57/130/41 -f 58/131/42 59/132/42 60/133/42 -f 61/134/43 62/135/43 63/136/43 -f 64/137/44 65/138/44 61/134/44 -f 66/139/45 67/140/45 49/122/45 -f 68/141/46 69/142/46 58/131/46 -f 70/143/47 62/144/47 50/145/47 -f 64/137/48 71/146/48 72/147/48 -f 73/148/49 74/149/49 75/150/49 -f 68/141/50 76/151/50 77/152/50 -f 56/129/51 77/152/51 76/151/51 -f 61/134/52 70/153/52 53/126/52 -f 51/154/53 65/138/53 49/155/53 -f 60/133/54 67/140/54 58/131/54 -f 77/152/55 54/127/55 69/142/55 -f 55/128/56 78/156/56 64/137/56 -f 66/157/57 71/146/57 74/158/57 -f 73/148/58 79/159/58 68/141/58 -f 61/134/59 55/128/59 64/137/59 -f 49/155/60 72/147/60 66/157/60 -f 58/131/61 73/148/61 68/141/61 -f 59/132/62 54/127/62 80/160/62 -f 54/127/63 70/153/63 80/160/63 -f 49/122/39 67/140/39 50/123/39 -f 52/125/40 55/128/40 53/126/40 -f 55/128/41 52/125/41 56/129/41 -f 58/131/42 69/142/42 59/132/42 -f 61/134/43 65/138/43 62/135/43 -f 64/137/44 72/147/44 65/138/44 -f 66/139/45 73/148/45 67/140/45 -f 68/141/46 77/152/46 69/142/46 -f 50/145/47 60/161/47 59/162/47 -f 59/162/47 80/163/47 70/143/47 -f 70/143/47 63/164/47 62/144/47 -f 62/144/47 51/165/47 50/145/47 -f 50/145/47 59/162/47 70/143/47 -f 64/137/48 78/156/48 71/146/48 -f 73/148/49 66/139/49 74/149/49 -f 68/141/50 79/159/50 76/151/50 -f 56/129/51 52/125/51 77/152/51 -f 61/134/52 63/136/52 70/153/52 -f 51/154/53 62/135/53 65/138/53 -f 60/133/54 50/123/54 67/140/54 -f 77/152/55 52/125/55 54/127/55 -f 55/128/56 57/130/56 78/156/56 -f 66/157/57 72/147/57 71/146/57 -f 73/148/64 75/150/64 79/159/64 -f 61/134/59 53/126/59 55/128/59 -f 49/155/60 65/138/60 72/147/60 -f 58/131/61 67/140/61 73/148/61 -f 59/132/62 69/142/62 54/127/62 -f 54/127/63 53/126/63 70/153/63 -f 81/166/65 82/167/65 83/168/65 -f 84/169/66 85/170/66 86/171/66 -f 125/172/46 87/173/46 127/174/46 -f 88/175/67 89/176/67 90/177/67 -f 91/178/45 92/179/45 89/176/45 -f 90/177/68 94/180/68 95/181/68 -f 86/171/69 96/182/69 97/183/69 -f 111/184/46 98/185/46 99/186/46 -f 100/187/47 94/180/47 101/188/47 -f 92/179/70 102/189/70 89/176/70 -f 103/190/71 96/182/71 104/191/71 -f 82/167/72 105/192/72 85/170/72 -f 102/189/45 111/193/45 110/194/45 -f 107/195/40 112/196/40 108/197/40 -f 103/198/46 107/199/46 126/200/46 -f 106/201/46 100/202/46 110/203/46 -f 109/204/46 108/205/46 113/206/46 -f 98/207/73 114/208/73 96/182/73 -f 104/191/74 107/195/74 103/190/74 -f 85/170/40 83/209/40 82/167/40 -f 95/181/47 57/210/47 56/211/47 -f 75/212/47 90/177/47 79/213/47 -f 101/188/75 89/176/75 102/189/75 -f 84/169/71 97/183/71 115/214/71 -f 97/183/76 114/208/76 92/215/76 -f 112/196/77 95/181/77 94/180/77 -f 86/171/78 105/192/78 104/191/78 -f 113/216/79 112/196/79 94/180/79 -f 101/188/80 110/194/80 100/187/80 -f 97/183/81 116/217/81 115/214/81 -f 117/218/82 84/169/82 118/219/82 -f 119/220/83 88/175/83 120/221/83 -f 121/222/84 115/214/84 116/217/84 -f 122/223/85 81/166/85 83/168/85 -f 81/166/86 120/221/86 88/175/86 -f 123/224/87 122/225/87 83/209/87 -f 115/214/88 118/219/88 84/169/88 -f 91/178/89 121/226/89 116/227/89 -f 124/228/44 122/229/44 117/230/44 -f 99/186/46 103/198/46 126/200/46 -f 74/231/47 90/177/47 75/212/47 -f 71/232/90 88/175/90 74/231/90 -f 81/166/91 71/232/91 78/233/91 -f 57/210/92 81/166/92 78/233/92 -f 76/234/47 95/181/47 56/211/47 -f 79/213/47 95/181/47 76/234/47 -f 127/174/47 126/235/47 125/172/47 -f 81/166/65 95/181/65 82/167/65 -f 84/169/66 123/224/66 85/170/66 -f 88/175/67 91/236/67 89/176/67 -f 91/178/45 116/227/45 92/179/45 -f 90/177/68 101/188/68 94/180/68 -f 86/171/69 104/191/69 96/182/69 -f 100/187/47 113/216/47 94/180/47 -f 92/179/70 114/237/70 102/189/70 -f 103/190/71 98/207/71 96/182/71 -f 82/167/72 112/196/72 105/192/72 -f 87/173/40 99/238/40 127/174/40 -f 126/200/46 108/205/46 109/204/46 -f 109/239/71 87/173/71 93/240/71 -f 100/202/46 109/204/46 113/206/46 -f 109/241/45 125/172/45 126/242/45 -f 106/201/46 111/184/46 99/186/46 -f 102/189/45 114/237/45 111/193/45 -f 107/195/40 105/192/40 112/196/40 -f 98/207/73 111/243/73 114/208/73 -f 104/191/74 105/192/74 107/195/74 -f 85/170/40 123/224/40 83/209/40 -f 95/181/93 81/166/93 57/210/93 -f 101/188/75 90/177/75 89/176/75 -f 84/169/71 86/171/71 97/183/71 -f 97/183/76 96/182/76 114/208/76 -f 112/196/77 82/167/77 95/181/77 -f 86/171/78 85/170/78 105/192/78 -f 113/216/79 108/197/79 112/196/79 -f 101/188/80 102/189/80 110/194/80 -f 97/183/81 92/215/81 116/217/81 -f 117/218/94 123/224/94 84/169/94 -f 119/220/95 91/236/95 88/175/95 -f 121/222/96 128/244/96 115/214/96 -f 122/223/97 124/245/97 81/166/97 -f 81/166/86 124/245/86 120/221/86 -f 123/224/87 117/218/87 122/225/87 -f 115/214/88 128/244/88 118/219/88 -f 91/178/89 119/246/89 121/226/89 -f 117/230/44 118/247/44 124/228/44 -f 118/247/44 128/248/44 124/228/44 -f 128/248/44 121/249/44 119/250/44 -f 119/250/44 120/251/44 128/248/44 -f 120/251/44 124/228/44 128/248/44 -f 74/231/98 88/175/98 90/177/98 -f 81/166/91 88/175/91 71/232/91 -f 79/213/47 90/177/47 95/181/47 -f 125/172/46 93/240/46 87/173/46 -f 99/186/46 98/185/46 103/198/46 -f 127/174/47 99/252/47 126/235/47 -f 87/173/40 106/253/40 99/238/40 -f 126/200/46 107/199/46 108/205/46 -f 109/239/71 106/254/71 87/173/71 -f 100/202/46 106/201/46 109/204/46 -f 109/241/45 93/240/45 125/172/45 -f 106/201/46 110/203/46 111/184/46 -o Cube.001_Cube.005 -v -0.369039 -0.459563 0.479973 -v -0.369039 -0.501855 0.209191 -v -0.369039 -0.501855 0.479973 -v -0.369039 -0.433180 0.209191 -v 0.369039 -0.501855 0.209191 -v 0.369039 -0.459563 0.479973 -v 0.369039 -0.501855 0.479973 -v 0.369039 -0.433180 0.209191 -vt 0.175000 0.175000 -vt -0.000000 0.150000 -vt 0.175000 0.150000 -vt 0.350000 0.225000 -vt 0.175000 0.200000 -vt 0.350000 0.200000 -vt 0.175000 0.225000 -vt -0.000000 0.200000 -vt -0.000000 0.225000 -vt 0.175000 0.225000 -vt 0.350000 0.250000 -vt 0.175000 0.250000 -vt 0.350000 0.150000 -vt 0.175000 0.200000 -vt 0.175000 0.150000 -vt -0.000000 0.150000 -vt 0.350000 0.000000 -vt 0.350000 0.150000 -vt -0.000000 0.200000 -vt 0.175000 0.225000 -vt 0.175000 0.175000 -vt 0.350000 0.225000 -vt 0.350000 0.200000 -vt -0.000000 0.000000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.9953 0.0970 -s off -f 129/255/99 130/256/99 131/257/99 -f 132/258/100 133/259/100 130/260/100 -f 133/261/101 134/262/101 135/263/101 -f 134/264/102 131/265/102 135/266/102 -f 133/267/103 131/268/103 130/269/103 -f 132/270/104 134/271/104 136/272/104 -f 129/255/99 132/273/99 130/256/99 -f 132/258/100 136/274/100 133/259/100 -f 133/261/101 136/275/101 134/262/101 -f 134/264/102 129/276/102 131/265/102 -f 133/267/103 135/277/103 131/268/103 -f 132/270/104 129/278/104 134/271/104 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 0.9487 -0.3162 +vn -0.0000 0.9806 0.1961 +vn 0.8660 -0.0000 -0.5000 +vn -0.8660 -0.0000 -0.5000 +vn -0.8660 -0.0000 0.5000 +vn 0.8660 -0.0000 0.5000 +vn -0.7071 0.7071 -0.0000 +vn -0.0000 0.7071 0.7071 +vn 0.7071 0.7071 -0.0000 +vn -0.0000 0.7071 -0.7071 +vt 0.106061 0.893939 +vt 0.090909 0.772727 +vt 0.106061 0.787879 +vt 0.378788 0.787879 +vt 0.393939 0.893939 +vt 0.378788 0.893939 +vt 0.545455 0.757576 +vt 0.363636 0.772727 +vt 0.363636 0.757576 +vt 0.272727 0.772727 +vt 0.257576 0.787879 +vt 0.121212 0.878788 +vt 0.121212 0.803030 +vt 0.242424 0.803030 +vt 0.257576 0.893939 +vt 0.242424 0.878788 +vt 0.530303 0.893939 +vt 0.515152 0.787879 +vt 0.530303 0.787879 +vt 0.545455 0.909091 +vt 0.363636 0.924242 +vt 0.363636 0.909091 +vt 0.272727 0.909091 +vt 0.090909 0.909091 +vt 0.090909 1.000000 +vt 0.272727 1.000000 +vt 0.000000 0.772727 +vt 0.545455 0.772727 +vt 0.803030 0.848485 +vt 0.757576 0.954545 +vt 0.757576 0.848485 +vt 0.606061 1.000000 +vt 0.757576 1.000000 +vt 0.606061 0.848485 +vt 0.560606 0.848485 +vt 0.606061 0.954545 +vt 0.560606 0.969697 +vt 0.757576 0.803030 +vt 0.606061 0.803030 +vt 0.378788 0.772727 +vt 0.272727 0.681818 +vt 0.090909 0.681818 +vt 0.621212 0.560606 +vt 0.439394 0.636364 +vt 0.439394 0.560606 +vt 0.439394 0.651515 +vt 0.363636 0.636364 +vt 0.621212 0.651515 +vt 0.621212 0.636364 +vt 0.696970 0.636364 +vt 0.439394 0.727273 +vt 0.621212 0.727273 +vt 0.878788 0.666667 +vt 0.878788 0.636364 +vt 0.348485 0.318182 +vt 0.166667 0.469697 +vt 0.166667 0.318182 +vt 0.166667 0.515152 +vt 0.015152 0.469697 +vt 0.348485 0.515152 +vt 0.348485 0.469697 +vt 0.500000 0.515152 +vt 0.500000 0.469697 +vt 0.166667 0.666667 +vt 0.348485 0.666667 +vt 0.681818 0.515152 +vt 0.681818 0.469697 +vt 0.439394 1.000000 +vt 0.409091 0.984848 +vt 0.439394 0.984848 +vt 0.469697 1.000000 +vt 0.469697 0.984848 +vt 0.318182 1.000000 +vt 0.287879 0.984848 +vt 0.318182 0.984848 +vt 0.348485 1.000000 +vt 0.348485 0.984848 +vt 0.378788 1.000000 +vt 0.378788 0.984848 +vt 0.409091 1.000000 +vt 0.015152 0.560606 +vt -0.000000 0.666667 +vt 0.000000 0.545455 +vt 0.136364 0.560606 +vt 0.151515 0.545455 +vt 0.136364 0.651515 +vt 0.151515 0.666667 +vt 0.015152 0.651515 +vt 0.393939 0.787879 +vt 0.515152 0.893939 +vt 0.545455 0.924242 +vt 0.000000 0.909091 +vt 0.530303 0.772727 +vt 0.803030 0.969697 +vt 0.363636 0.666667 +vt 0.696970 0.666667 +vt 0.015152 0.515152 +vt 0.287879 1.000000 +s 1 +usemtl Texture +f 2/1/1 4/2/1 1/3/1 +f 1/4/2 6/5/2 2/6/2 +f 3/7/3 5/8/3 1/9/3 +f 1/3/1 16/10/1 3/11/1 +f 9/12/4 5/3/5 8/13/6 +f 8/13/6 7/11/7 10/14/8 +f 10/14/8 9/12/4 8/13/6 +f 10/14/8 12/15/9 11/16/10 +f 11/16/10 6/1/11 9/12/4 +f 13/17/12 7/18/12 3/19/12 +f 2/20/13 12/21/13 13/22/13 +f 3/11/1 14/23/1 13/15/1 +f 13/15/1 17/24/1 2/1/1 +f 15/22/2 16/10/2 28/8/2 +f 18/25/3 14/23/3 15/26/3 +f 17/24/12 19/27/12 4/2/12 +f 20/17/14 19/28/14 18/20/14 +f 20/17/14 15/22/14 22/6/14 +f 21/29/12 23/30/12 24/31/12 +f 22/32/15 23/30/15 20/33/15 +f 23/30/14 26/34/14 24/31/14 +f 27/35/2 25/36/2 22/37/2 +f 21/38/13 26/34/13 27/39/13 +f 22/6/14 28/8/14 27/40/14 +f 28/41/13 4/2/13 19/42/13 +f 33/43/13 29/44/13 30/45/13 +f 31/46/12 30/47/12 29/44/12 +f 34/48/1 29/44/1 32/49/1 +f 33/50/2 34/48/2 32/49/2 +f 36/51/16 34/48/16 35/52/16 +f 36/53/14 33/50/14 30/54/14 +f 41/55/13 37/56/13 38/57/13 +f 39/58/12 38/59/12 37/56/12 +f 42/60/1 37/56/1 40/61/1 +f 43/62/2 40/61/2 41/63/2 +f 44/64/3 42/60/3 43/65/3 +f 44/66/14 41/63/14 38/67/14 +f 47/68/14 46/69/17 45/70/14 +f 50/71/18 45/70/14 48/72/18 +f 51/73/19 48/74/18 49/75/19 +f 52/76/1 49/75/19 54/77/1 +f 53/78/20 54/77/1 55/79/20 +f 56/80/17 55/79/20 46/69/17 +f 59/81/21 58/82/21 57/83/21 +f 62/84/22 57/83/22 60/85/22 +f 63/86/23 60/85/23 61/87/23 +f 64/88/3 62/84/3 63/86/3 +f 64/88/24 61/87/24 58/82/24 +f 2/1/1 17/24/1 4/2/1 +f 1/4/2 5/89/2 6/5/2 +f 3/7/3 7/28/3 5/8/3 +f 1/3/1 4/2/1 16/10/1 +f 9/12/4 6/1/11 5/3/5 +f 8/13/6 5/3/5 7/11/7 +f 10/14/8 11/16/10 9/12/4 +f 10/14/8 7/11/7 12/15/9 +f 11/16/10 12/15/9 6/1/11 +f 13/17/12 12/90/12 7/18/12 +f 2/20/13 6/91/13 12/21/13 +f 3/11/1 16/10/1 14/23/1 +f 13/15/1 14/23/1 17/24/1 +f 15/22/2 14/23/2 16/10/2 +f 18/25/3 17/24/3 14/23/3 +f 17/24/12 18/92/12 19/27/12 +f 20/17/14 21/93/14 19/28/14 +f 20/17/14 18/20/14 15/22/14 +f 21/29/12 20/94/12 23/30/12 +f 22/32/15 25/36/15 23/30/15 +f 23/30/14 25/36/14 26/34/14 +f 27/35/2 26/34/2 25/36/2 +f 21/38/13 24/31/13 26/34/13 +f 22/6/14 15/22/14 28/8/14 +f 28/41/13 16/10/13 4/2/13 +f 33/43/13 32/49/13 29/44/13 +f 31/46/12 36/95/12 30/47/12 +f 34/48/1 31/46/1 29/44/1 +f 33/50/2 35/96/2 34/48/2 +f 36/51/16 31/46/16 34/48/16 +f 36/53/14 35/96/14 33/50/14 +f 41/55/13 40/61/13 37/56/13 +f 39/58/12 44/97/12 38/59/12 +f 42/60/1 39/58/1 37/56/1 +f 43/62/2 42/60/2 40/61/2 +f 44/64/3 39/58/3 42/60/3 +f 44/66/14 43/62/14 41/63/14 +f 47/68/14 56/80/17 46/69/17 +f 50/71/18 47/68/14 45/70/14 +f 51/73/19 50/98/18 48/74/18 +f 52/76/1 51/73/19 49/75/19 +f 53/78/20 52/76/1 54/77/1 +f 56/80/17 53/78/20 55/79/20 +f 59/81/21 64/88/21 58/82/21 +f 62/84/22 59/81/22 57/83/22 +f 63/86/23 62/84/23 60/85/23 +f 64/88/3 59/81/3 62/84/3 +f 64/88/24 63/86/24 61/87/24 diff --git a/src/main/resources/assets/hbm/textures/blocks/deco_computer.png b/src/main/resources/assets/hbm/textures/blocks/deco_computer.png index fab8d3cd29d30ca65fe69a95c6644973ad8c4c65..be42793228b53cac24ab27ad30737a5bb26487b7 100644 GIT binary patch delta 631 zcmV--0*L*n4xa@fiBL{Q4GJ0x0000DNk~Le0000&0000&2m=5B0Mv@`+L0k3Og~Ue zR7LXc=Gf80va+(jwW5N8g3iUWOhh#q85sZn|G==1*vhT)=FLnVGd z00GEJL_t(oN9~i_c7q@gMYT2;O*Kuz|9@-ea$rC)&T7(^E;lj20NVkz2|{DE;Uhzb z35@dijHqZ6okk*`sMCzuxI-b(z1uD_PsFKcX(4E-gRtUPV3=D~g{9eH9QPDVe{nb* zmI|TOO3-!@F~#wCtSES-YfcHBOnb+SKzVIsp$ksuvq$kXi)g4S=&0lB( ziUC_<5c1I2J4qjB!rDa?i%Lj=+=o8jNFM#>dZbd%t;y2QH&TycQAu%}eMUXyI;&5_ z&#o~3rQ+A0*~{z-V^L`gS;!rtUOH$jVssfH`~V8}5AO|N Rw7&oV002ovPDHLkV1jLE7z_Xa delta 1815 zcmV+y2k7{p1*i@oiBL{Q4GJ0x0000DNk~Le0000`0000`2m=5B0J+ZspOGOTe_&8d zR7JeBriFiXy0WCbwWq$esJXGDyR)UYuc5!Usld3Z!MUrpuAl$_0RR90xUiyzfOfdB zqqVM}!n&-(yREgYpEx!$H#IRiH#4iGmmC`zBP1g-Gcm2EnW?0nH#jx`003wSd@le1 z03dWyPE-H?|NsC0|NsC0|NsC0k)H;Upaqej1%LklTwELN00009a7bBm000id000id z0mpBsWB>pLB}qg=F@mv2srOuO7t` z2?DdT7c7zK_#fk)@aOSP`15!t{CWHz32);UA*cN~a`83XC7epmtZkZR{u=(~kkF@^ zSAT)~gac-NU_FBkW-z!K59^|0Lt0kdh}n zhNt)8@~>yWi53dakW_)GLSxPhrU|95Cr{wR2M9rO?2uFeMXRGtyg)w?&K)sHm4L9; zwI;_7Np%TyA+y|cnddz@cF5%kd8(u=x_>C^Jk28HZb_bjrINDb*dduVOuh06)-oN! zWvNM?0iI9OZ%J~BB-)^a5IOiBr=>?ye49K2k+oV@Jq`2vHYkpn0;JFwVj}mr$)D~` zSjshpWv+{BlbkT$yv(B{f*WmJ?U35r!CWM_hQj&6W!9;C@EyD?jn*vju7;t?jhu-TH7Y5A7nU{7XByAdOpc z6hnPQw`s{Uu&5r$pOpY^O)!;*Rx16MinjqjRHmnP>}}qf!!n-szOXf-vIJ|}kne~X zXd#6OfNgiGP%$DxL9@mbdlpM&o`@a%ptPu*kNmZf9A=k|5UjA8vr$5exPQIJG#BYj z=DAo@bC_WCsZ(-+Eje)MTZGuD?1N8QJSs)eu1((n^U6zJyB6It?C(g9w8dUl>@}gf zPnv^%!M(0Fw3C-C7x=yEE%!Y+2fYNtWd@nV9quXeQpw++%ctq1O|ZaEOD(+Fw465N z?#E>$hnP`^A2WtPUSVb1ntz(ZyRnl#M}dgV2UNkU>{+lxZOLiN(z#ih2=xdsee}&} z!eH$OxI`p-djHo^Quu?HTXGaboKJ=4eN&YYGReHnLz<@m*yX=vXrDPb8j?c0?4Vc? zqbV0Dr7U>b72AL~FmlK#noAW&ayo^2Y|_k-lI2O?`=*+3w{bz{6MuABJ3~e3=ll69 zHoVIw{1|4r&L*7a0S0t_!VGifU|@U7r!@iw^bmFNA_P$?Ah#xk1fAlI-yqBb_L%f4 zNLn$@U%ZR)ISKofzWERqD)pwi^`gi_ATq5=k?X!uhE0gUD}7T8l%8we=3|87)(9o= z2#+WzQvzpC_2Y{$5`QyU5<)VnX`SM13aJC2*MD5;XV>^d=r`6y--Ld6=r)u0E`4tk zz@$+oQ z6x4yK9zjFKm-zHA1VBzpVLTs=&xEY?@+-i& z7R=fjwVBMMsG?wlFf1C~g`I1!Lf(*5LaqXZYDq$dBV~$*5smMhaEsjr{Ll{a+**Q6 zpII>w;d$e`sxbWbH<@$L_5Vy2oaIEtA)LkMjc-qQu78g#r?}WVV_&l@5LwUS)fC3w zjG-01Q8xVS8=nckKJ)MT=U&-dG`@QZ6+WiERW|#^mkMuuzWzYjNFB4b#&=JlX1`fB zVAuHWD!f-V2@ErX#&=KQ@y02Hb%smewDD=|RMYE(rK|70XOC$E1&e`WCc@x%&GM4f&ZSLUqCr!DJbX{)c+2I0l=mX2v3E0Rbu58 zKd&E8LgA2PjE%!iDcy%xy)g<6R62E*lFO2Pc|18DzX8l3I(l!A6UYDn002ovPDHLk FV1kD6fDQlv From 14eac38f3e43c67c997fbf9f2453a41433d6a408 Mon Sep 17 00:00:00 2001 From: ackbarscrowbars <42119484+ackbarscrowbars@users.noreply.github.com> Date: Fri, 9 May 2025 17:14:30 -0500 Subject: [PATCH 011/491] Fixed Scaffold UV + Cleaned Up Model It had a bunch of erroneous sharps and extra vertices. --- .../assets/hbm/models/blocks/scaffold.obj | 511 +++++++++--------- 1 file changed, 252 insertions(+), 259 deletions(-) diff --git a/src/main/resources/assets/hbm/models/blocks/scaffold.obj b/src/main/resources/assets/hbm/models/blocks/scaffold.obj index 74229560a..f7af91c79 100644 --- a/src/main/resources/assets/hbm/models/blocks/scaffold.obj +++ b/src/main/resources/assets/hbm/models/blocks/scaffold.obj @@ -1,55 +1,50 @@ -# Blender v2.76 (sub 0) OBJ File: 'scaffold.blend' +# Blender 4.4.3 # www.blender.org +mtllib scaffold.mtl o Cube_Cube.001 v -0.375000 0.000000 0.500000 v -0.375000 1.000000 0.500000 -v -0.375000 0.000000 -0.500000 +v -0.375000 -0.000000 -0.500000 v -0.375000 1.000000 -0.500000 v 0.375000 0.000000 0.500000 v 0.375000 1.000000 0.500000 -v 0.375000 0.000000 -0.500000 +v 0.375000 -0.000000 -0.500000 v 0.375000 1.000000 -0.500000 v -0.250000 0.000000 0.500000 v -0.250000 1.000000 0.500000 -v -0.250000 0.000000 -0.500000 +v -0.250000 -0.000000 -0.500000 v -0.250000 1.000000 -0.500000 v 0.250000 0.000000 0.500000 v 0.250000 1.000000 0.500000 -v 0.250000 0.000000 -0.500000 +v 0.250000 -0.000000 -0.500000 v 0.250000 1.000000 -0.500000 v -0.250000 0.000000 0.375000 v -0.250000 1.000000 0.375000 v 0.250000 0.000000 0.375000 v 0.250000 1.000000 0.375000 -v -0.250000 0.000000 -0.375000 +v -0.250000 -0.000000 -0.375000 v -0.250000 1.000000 -0.375000 -v 0.250000 0.000000 -0.375000 +v 0.250000 -0.000000 -0.375000 v 0.250000 1.000000 -0.375000 -v -0.375000 0.000000 -0.375000 +v -0.375000 -0.000000 -0.375000 v -0.375000 1.000000 -0.375000 -v 0.375000 0.000000 -0.375000 +v 0.375000 -0.000000 -0.375000 v 0.375000 1.000000 -0.375000 v -0.375000 0.000000 0.375000 v -0.375000 1.000000 0.375000 v 0.375000 0.000000 0.375000 v 0.375000 1.000000 0.375000 -v -0.250000 0.062500 0.375000 -v -0.250000 0.062500 -0.375000 v -0.375000 0.062500 -0.375000 v -0.375000 0.062500 0.375000 v -0.250000 0.937500 0.375000 -v -0.250000 0.937500 -0.375000 v -0.375000 0.937500 -0.375000 v -0.375000 0.937500 0.375000 -v -0.250000 0.562500 0.000000 -v -0.375000 0.562500 0.000000 -v -0.250000 0.437500 0.000000 -v -0.375000 0.437500 0.000000 -v -0.250000 0.187500 0.375000 -v -0.250000 0.187500 -0.375000 +v -0.250000 0.562500 -0.000000 +v -0.375000 0.562500 -0.000000 +v -0.250000 0.437500 -0.000000 +v -0.375000 0.437500 -0.000000 v -0.375000 0.187500 -0.375000 v -0.375000 0.187500 0.375000 -v -0.250000 0.812500 0.375000 v -0.250000 0.812500 -0.375000 v -0.375000 0.812500 -0.375000 v -0.375000 0.812500 0.375000 @@ -59,45 +54,37 @@ v -0.250000 0.500000 -0.062500 v -0.375000 0.500000 -0.062500 v 0.375000 0.062500 0.375000 v 0.375000 0.062500 -0.375000 -v 0.250000 0.062500 -0.375000 v 0.250000 0.062500 0.375000 v 0.375000 0.937500 0.375000 v 0.375000 0.937500 -0.375000 v 0.250000 0.937500 -0.375000 v 0.250000 0.937500 0.375000 -v 0.375000 0.562500 0.000000 -v 0.250000 0.562500 0.000000 -v 0.375000 0.437500 0.000000 -v 0.250000 0.437500 0.000000 +v 0.375000 0.562500 -0.000000 +v 0.250000 0.562500 -0.000000 +v 0.375000 0.437500 -0.000000 +v 0.250000 0.437500 -0.000000 v 0.375000 0.187500 0.375000 v 0.375000 0.187500 -0.375000 -v 0.250000 0.187500 -0.375000 v 0.250000 0.187500 0.375000 v 0.375000 0.812500 0.375000 v 0.375000 0.812500 -0.375000 -v 0.250000 0.812500 -0.375000 v 0.250000 0.812500 0.375000 v 0.375000 0.500000 0.062500 v 0.250000 0.500000 0.062500 v 0.375000 0.500000 -0.062500 v 0.250000 0.500000 -0.062500 -v 0.250000 0.062500 0.375000 v -0.250000 0.062500 0.375000 v -0.250000 0.062500 0.500000 v 0.250000 0.062500 0.500000 -v 0.250000 0.937500 0.375000 -v -0.250000 0.937500 0.375000 v -0.250000 0.937500 0.500000 v 0.250000 0.937500 0.500000 -v -0.000000 0.562500 0.375000 -v -0.000000 0.562500 0.500000 -v -0.000000 0.437500 0.375000 -v -0.000000 0.437500 0.500000 -v 0.250000 0.187500 0.375000 +v 0.000000 0.562500 0.375000 +v 0.000000 0.562500 0.500000 +v 0.000000 0.437500 0.375000 +v 0.000000 0.437500 0.500000 v -0.250000 0.187500 0.375000 v -0.250000 0.187500 0.500000 v 0.250000 0.187500 0.500000 -v 0.250000 0.812500 0.375000 v -0.250000 0.812500 0.375000 v -0.250000 0.812500 0.500000 v 0.250000 0.812500 0.500000 @@ -112,7 +99,6 @@ v 0.250000 0.062500 -0.375000 v 0.250000 0.937500 -0.500000 v -0.250000 0.937500 -0.500000 v -0.250000 0.937500 -0.375000 -v 0.250000 0.937500 -0.375000 v 0.000000 0.562500 -0.500000 v 0.000000 0.562500 -0.375000 v 0.000000 0.437500 -0.500000 @@ -123,38 +109,59 @@ v -0.250000 0.187500 -0.375000 v 0.250000 0.187500 -0.375000 v 0.250000 0.812500 -0.500000 v -0.250000 0.812500 -0.500000 -v -0.250000 0.812500 -0.375000 v 0.250000 0.812500 -0.375000 v 0.041667 0.500000 -0.500000 v 0.041667 0.500000 -0.375000 v -0.041667 0.500000 -0.500000 v -0.041667 0.500000 -0.375000 -vt 0.875000 0.875000 -vt 0.875000 0.750000 -vt 1.000000 0.750000 +vn -0.0000 1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 -0.7071 0.7071 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 0.7071 0.7071 +vn -0.0000 0.7071 -0.7071 +vn 0.1322 -0.0000 0.9912 +vn 0.9992 -0.0000 0.0393 +vn 0.1322 -0.0000 -0.9912 +vn 0.9992 -0.0000 -0.0393 +vn -0.9992 -0.0000 -0.0393 +vn -0.1322 -0.0000 -0.9912 +vn -0.1322 -0.0000 0.9912 +vn -0.9992 -0.0000 0.0393 +vn 0.8321 -0.5547 -0.0000 +vn -0.8321 -0.5547 -0.0000 +vn 0.8321 0.5547 -0.0000 +vn -0.8321 0.5547 -0.0000 +vt 0.875000 0.250000 +vt 0.875000 0.125000 +vt 1.000000 0.125000 +vt 0.125000 0.000000 +vt 0.125000 1.000000 +vt 0.000000 1.000000 vt 1.000000 0.000000 vt 1.000000 1.000000 vt 0.875000 1.000000 -vt 0.250000 0.000000 -vt 0.250000 1.000000 -vt 0.125000 1.000000 vt 0.125027 0.000035 vt 0.000035 0.999965 -vt 0.875000 0.000000 -vt 0.750000 1.000000 vt 1.000000 0.250000 -vt 0.875000 0.250000 -vt 0.875000 0.125000 -vt 0.000035 0.000035 -vt 0.750000 0.000000 +vt 0.875000 0.000000 +vt 0.000000 0.000000 vt 0.000000 0.250000 vt 0.000000 0.125000 vt 0.125000 0.125000 +vt 0.125000 0.250000 vt 0.125000 0.875000 vt -0.000000 0.875000 vt 0.000000 0.750000 -vt 1.000000 0.125000 +vt 0.125000 0.750000 +vt 1.000000 0.750000 vt 1.000000 0.875000 +vt 0.875000 0.875000 +vt 0.875000 0.750000 vt 0.500000 0.250000 vt 0.500000 0.125000 vt 0.437500 0.750000 @@ -177,16 +184,14 @@ vt 0.125000 0.937500 vt 0.125000 0.812500 vt 0.437500 0.500000 vt 0.125000 0.187500 -vt 0.125000 0.750000 -vt 0.125000 0.250000 -vt 0.250000 0.750000 -vt 0.250000 0.875000 vt 0.125000 0.500000 vt 0.000000 0.500000 vt 0.000000 0.541667 vt 0.125000 0.541667 -vt 0.125000 0.458333 vt 0.000000 0.458333 +vt 0.125000 0.458333 +vt 0.125000 0.250000 +vt 0.000000 0.250000 vt 0.541667 0.500000 vt 0.750000 0.812500 vt 0.750000 0.062500 @@ -201,214 +206,202 @@ vt 0.875000 0.541667 vt 1.000000 0.541667 vt 1.000000 0.458333 vt 0.875000 0.458333 +vt 0.000035 0.000035 vt 0.875000 0.937500 vt 0.125000 0.062500 vt 0.750000 0.937500 vt 0.250000 0.062500 -vn 0.000000 1.000000 0.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 -0.707100 0.707100 -vn 0.000000 -0.707100 -0.707100 -vn 0.000000 0.707100 0.707100 -vn 0.000000 0.707100 -0.707100 -vn 0.832100 -0.554700 0.000000 -vn -0.832100 -0.554700 0.000000 -vn 0.832100 0.554700 0.000000 -vn -0.832100 0.554700 -0.000000 -s off +s 1 +usemtl Material.001 f 26/1/1 22/2/1 12/3/1 f 11/4/2 12/5/2 22/6/2 f 21/7/3 22/8/3 26/9/3 -f 25/10/4 26/9/4 4/11/4 -f 3/12/5 4/6/5 12/13/5 -f 11/14/6 21/15/6 25/16/6 -f 9/17/2 17/10/2 18/9/2 -f 1/10/3 9/7/3 10/8/3 -f 17/18/5 29/12/5 30/6/5 -f 30/6/4 29/12/4 1/4/4 -f 9/19/6 1/20/6 29/21/6 -f 30/22/1 2/23/1 10/24/1 -f 20/8/5 32/9/5 31/10/5 -f 31/10/2 32/9/2 6/11/2 -f 6/6/3 14/13/3 13/18/3 -f 14/5/4 20/6/4 19/12/4 -f 31/22/6 5/23/6 13/24/6 -f 14/19/1 6/20/1 32/21/1 -f 8/5/2 28/6/2 27/12/2 -f 15/7/5 16/8/5 8/9/5 -f 23/10/4 24/9/4 16/11/4 -f 27/12/3 28/6/3 24/13/3 -f 8/25/1 16/14/1 24/15/1 -f 23/2/6 15/3/6 7/26/6 -f 43/27/7 44/28/7 35/16/7 -f 36/21/8 44/28/8 43/27/8 -f 53/29/9 54/30/9 48/22/9 -f 52/21/7 54/31/7 53/32/7 -f 41/33/10 42/34/10 40/22/10 -f 39/1/9 42/34/9 41/33/9 -f 55/35/8 56/36/8 51/16/8 -f 47/1/10 56/37/10 55/38/10 -f 42/39/4 54/40/4 52/41/4 -f 44/42/4 36/43/4 48/44/4 -f 42/39/4 39/45/4 51/46/4 -f 44/42/4 56/47/4 47/48/4 -f 43/42/2 34/43/2 46/44/2 -f 41/39/2 55/40/2 50/41/2 -f 41/39/2 37/45/2 49/46/2 -f 54/40/4 42/39/4 56/47/4 -f 43/42/2 53/47/2 45/48/2 -f 41/39/2 53/47/2 43/42/2 -f 67/34/7 68/33/7 59/2/7 -f 60/49/8 68/33/8 67/34/8 -f 77/31/9 78/32/9 72/50/9 -f 76/49/7 78/51/7 77/52/7 -f 65/28/10 66/27/10 64/50/10 -f 63/15/9 66/27/9 65/28/9 -f 79/37/8 80/38/8 75/2/8 -f 71/15/10 80/35/10 79/36/10 -f 66/39/4 78/40/4 76/41/4 -f 68/42/4 60/43/4 72/44/4 -f 66/39/4 63/45/4 75/46/4 -f 68/42/4 80/47/4 71/48/4 -f 67/42/2 58/43/2 70/44/2 -f 65/39/2 79/40/2 74/41/2 -f 65/39/2 61/45/2 73/46/2 -f 78/40/4 66/39/4 80/47/4 -f 67/42/2 77/47/2 69/48/2 -f 65/39/2 77/47/2 67/42/2 -f 91/53/11 92/54/11 83/19/11 -f 84/24/12 92/54/12 91/53/12 -f 101/55/13 102/56/13 96/49/13 -f 100/24/11 102/55/11 101/56/11 -f 89/53/14 90/54/14 88/19/14 -f 87/24/13 90/54/13 89/53/13 -f 103/19/12 104/50/12 99/57/12 -f 95/58/14 104/19/14 103/50/14 -f 90/39/3 102/59/3 100/60/3 -f 92/42/3 84/61/3 96/62/3 -f 90/39/3 87/63/3 99/64/3 -f 92/42/3 104/65/3 95/66/3 -f 91/42/5 82/61/5 94/62/5 -f 89/39/5 103/59/5 98/60/5 -f 89/39/5 85/63/5 97/64/5 -f 102/59/3 90/39/3 104/65/3 -f 91/42/5 101/65/5 93/66/5 -f 103/59/5 89/39/5 101/65/5 -f 115/67/11 116/68/11 107/15/11 -f 108/2/12 116/68/12 115/67/12 -f 125/69/13 126/70/13 120/3/13 -f 124/2/11 126/69/11 125/70/11 -f 113/67/14 114/68/14 112/15/14 -f 111/2/13 114/68/13 113/67/13 -f 127/15/12 128/14/12 123/71/12 -f 119/72/14 128/15/14 127/14/14 -f 114/39/3 126/59/3 124/60/3 -f 116/42/3 108/61/3 120/62/3 -f 114/39/3 111/63/3 123/64/3 -f 116/42/3 128/65/3 119/66/3 -f 115/42/5 106/61/5 118/62/5 -f 113/39/5 127/59/5 122/60/5 -f 113/39/5 109/63/5 121/64/5 -f 126/59/3 114/39/3 128/65/3 -f 115/42/5 125/65/5 117/66/5 -f 127/59/5 113/39/5 125/65/5 -f 4/26/1 26/1/1 12/3/1 -f 21/12/2 11/4/2 22/6/2 -f 25/10/3 21/7/3 26/9/3 -f 3/17/4 25/10/4 4/11/4 -f 11/18/5 3/12/5 12/13/5 -f 3/25/6 11/14/6 25/16/6 -f 10/11/2 9/17/2 18/9/2 -f 2/9/3 1/10/3 10/8/3 -f 18/13/5 17/18/5 30/6/5 -f 2/5/4 30/6/4 1/4/4 -f 17/50/6 9/19/6 29/21/6 -f 18/49/1 30/22/1 10/24/1 -f 19/7/5 20/8/5 31/10/5 -f 5/17/2 31/10/2 6/11/2 -f 5/12/3 6/6/3 13/18/3 -f 13/4/4 14/5/4 19/12/4 -f 19/49/6 31/22/6 13/24/6 -f 20/50/1 14/19/1 32/21/1 -f 7/4/2 8/5/2 27/12/2 -f 7/10/5 15/7/5 8/9/5 -f 15/17/4 23/10/4 16/11/4 -f 23/18/3 27/12/3 24/13/3 -f 28/16/1 8/25/1 24/15/1 -f 27/1/6 23/2/6 7/26/6 -f 34/15/7 43/27/7 35/16/7 -f 33/50/8 36/21/8 43/27/8 -f 45/49/9 53/29/9 48/22/9 -f 49/50/7 52/21/7 53/32/7 -f 37/49/10 41/33/10 40/22/10 -f 38/2/9 39/1/9 41/33/9 -f 50/15/8 55/35/8 51/16/8 -f 46/2/10 47/1/10 55/38/10 -f 40/73/4 42/39/4 52/41/4 -f 54/40/4 44/42/4 48/44/4 -f 56/47/4 42/39/4 51/46/4 -f 35/74/4 44/42/4 47/48/4 -f 55/40/2 43/42/2 46/44/2 -f 38/73/2 41/39/2 50/41/2 -f 53/47/2 41/39/2 49/46/2 -f 44/42/4 54/40/4 56/47/4 -f 33/74/2 43/42/2 45/48/2 -f 55/40/2 41/39/2 43/42/2 -f 58/1/7 67/34/7 59/2/7 -f 57/22/8 60/49/8 67/34/8 -f 69/21/9 77/31/9 72/50/9 -f 73/22/7 76/49/7 77/52/7 -f 61/21/10 65/28/10 64/50/10 -f 62/16/9 63/15/9 65/28/9 -f 74/1/8 79/37/8 75/2/8 -f 70/16/10 71/15/10 79/36/10 -f 64/73/4 66/39/4 76/41/4 -f 78/40/4 68/42/4 72/44/4 -f 80/47/4 66/39/4 75/46/4 -f 59/74/4 68/42/4 71/48/4 -f 79/40/2 67/42/2 70/44/2 -f 62/73/2 65/39/2 74/41/2 -f 77/47/2 65/39/2 73/46/2 -f 68/42/4 78/40/4 80/47/4 -f 57/74/2 67/42/2 69/48/2 -f 79/40/2 65/39/2 67/42/2 -f 82/50/11 91/53/11 83/19/11 -f 81/49/12 84/24/12 91/53/12 -f 93/24/13 101/55/13 96/49/13 -f 97/49/11 100/24/11 101/56/11 -f 85/50/14 89/53/14 88/19/14 -f 86/49/13 87/24/13 89/53/13 -f 98/58/12 103/19/12 99/57/12 -f 94/57/14 95/58/14 103/50/14 -f 88/75/3 90/39/3 100/60/3 -f 102/59/3 92/42/3 96/62/3 -f 104/65/3 90/39/3 99/64/3 -f 83/76/3 92/42/3 95/66/3 -f 103/59/5 91/42/5 94/62/5 -f 86/75/5 89/39/5 98/60/5 -f 101/65/5 89/39/5 97/64/5 -f 92/42/3 102/59/3 104/65/3 -f 81/76/5 91/42/5 93/66/5 -f 91/42/5 103/59/5 101/65/5 -f 106/14/11 115/67/11 107/15/11 -f 105/3/12 108/2/12 115/67/12 -f 117/2/13 125/69/13 120/3/13 -f 121/3/11 124/2/11 125/70/11 -f 109/14/14 113/67/14 112/15/14 -f 110/3/13 111/2/13 113/67/13 -f 122/72/12 127/15/12 123/71/12 -f 118/71/14 119/72/14 127/14/14 -f 112/75/3 114/39/3 124/60/3 -f 126/59/3 116/42/3 120/62/3 -f 128/65/3 114/39/3 123/64/3 -f 107/76/3 116/42/3 119/66/3 -f 127/59/5 115/42/5 118/62/5 -f 110/75/5 113/39/5 122/60/5 -f 125/65/5 113/39/5 121/64/5 -f 116/42/3 126/59/3 128/65/3 -f 105/76/5 115/42/5 117/66/5 -f 115/42/5 127/59/5 125/65/5 +f 25/10/4 26/5/4 4/11/4 +f 3/7/5 4/8/5 12/9/5 +f 11/12/6 21/1/6 25/2/6 +f 9/13/2 17/7/2 18/8/2 +f 1/14/3 9/4/3 10/5/3 +f 17/14/5 29/4/5 30/5/5 +f 30/9/4 29/13/4 1/7/4 +f 9/15/6 1/16/6 29/17/6 +f 30/18/1 2/15/1 10/16/1 +f 20/8/5 32/9/5 31/13/5 +f 31/10/2 32/5/2 6/11/2 +f 6/8/3 14/9/3 13/13/3 +f 14/5/4 20/6/4 19/14/4 +f 31/19/6 5/20/6 13/21/6 +f 14/20/1 6/21/1 32/22/1 +f 8/8/2 28/9/2 27/13/2 +f 15/4/5 16/5/5 8/6/5 +f 23/7/4 24/8/4 16/9/4 +f 27/4/3 28/5/3 24/6/3 +f 8/23/1 16/24/1 24/25/1 +f 23/26/6 15/23/6 7/24/6 +f 40/27/7 41/28/7 33/2/7 +f 34/17/8 41/28/8 40/27/8 +f 47/29/9 48/30/9 43/19/9 +f 46/17/7 48/31/7 47/32/7 +f 38/33/10 39/34/10 37/19/10 +f 36/25/9 39/34/9 38/33/9 +f 49/35/8 50/36/8 45/2/8 +f 42/25/10 50/37/10 49/38/10 +f 39/39/4 48/40/4 46/41/4 +f 41/42/4 34/43/4 43/44/4 +f 39/39/4 36/45/4 45/46/4 +f 41/42/4 50/47/4 42/48/4 +f 40/42/2 93/43/11 104/44/12 +f 38/39/2 49/40/2 44/41/12 +f 38/39/2 35/45/13 84/46/14 +f 48/40/4 39/39/4 50/47/4 +f 40/42/2 47/47/2 81/48/14 +f 38/39/2 47/47/2 40/42/2 +f 60/34/7 61/33/7 94/26/7 +f 53/22/8 61/33/8 60/34/8 +f 68/31/9 69/32/9 64/18/9 +f 67/22/7 69/29/7 68/30/7 +f 58/28/10 59/27/10 57/18/10 +f 56/1/9 59/27/9 58/28/9 +f 70/37/8 71/38/8 108/26/8 +f 105/1/10 71/35/10 70/36/10 +f 59/39/4 69/40/4 67/41/15 +f 61/42/4 53/43/16 64/44/15 +f 59/39/4 56/45/17 108/46/18 +f 61/42/4 71/47/4 105/48/18 +f 60/42/2 52/43/2 63/44/2 +f 58/39/2 70/40/2 66/41/2 +f 58/39/2 54/45/2 65/46/2 +f 69/40/4 59/39/4 71/47/4 +f 60/42/2 68/47/2 62/48/2 +f 58/39/2 68/47/2 60/42/2 +f 79/49/19 80/50/19 73/15/19 +f 74/21/20 80/50/20 79/49/20 +f 87/51/21 88/52/21 83/22/21 +f 86/21/19 88/51/19 87/52/19 +f 77/49/22 78/50/22 76/15/22 +f 75/21/21 78/50/21 77/49/21 +f 89/53/20 90/54/20 85/55/20 +f 82/56/22 90/53/22 89/54/22 +f 78/39/3 88/57/3 86/58/3 +f 80/42/3 74/59/3 83/60/3 +f 78/39/3 75/61/3 85/62/3 +f 80/42/3 90/63/3 82/64/3 +f 79/42/5 72/59/13 81/60/14 +f 77/39/5 89/57/5 84/58/14 +f 77/39/5 57/61/16 67/62/15 +f 88/57/3 78/39/3 90/63/3 +f 79/42/5 87/63/5 64/64/15 +f 89/57/5 77/39/5 87/63/5 +f 100/65/19 101/66/19 93/1/19 +f 94/26/20 101/66/20 100/65/20 +f 109/67/21 110/68/21 105/23/21 +f 108/26/19 110/67/19 109/68/19 +f 98/65/22 99/66/22 56/1/22 +f 97/26/21 99/66/21 98/65/21 +f 111/1/20 112/12/20 44/69/20 +f 104/70/22 112/1/22 111/12/22 +f 99/39/3 110/57/3 108/58/18 +f 101/42/3 94/59/17 105/60/18 +f 99/39/3 97/61/11 44/62/12 +f 101/42/3 112/63/3 104/64/12 +f 100/42/5 92/59/5 103/60/5 +f 98/39/5 111/57/5 107/58/5 +f 98/39/5 95/61/5 106/62/5 +f 110/57/3 99/39/3 112/63/3 +f 100/42/5 109/63/5 102/64/5 +f 111/57/5 98/39/5 109/63/5 +f 4/12/1 26/1/1 12/3/1 +f 21/14/2 11/4/2 22/6/2 +f 25/13/3 21/7/3 26/9/3 +f 3/71/4 25/10/4 4/11/4 +f 11/13/5 3/7/5 12/9/5 +f 3/3/6 11/12/6 25/2/6 +f 10/9/2 9/13/2 18/8/2 +f 2/6/3 1/14/3 10/5/3 +f 18/6/5 17/14/5 30/5/5 +f 2/8/4 30/9/4 1/7/4 +f 17/18/6 9/15/6 29/17/6 +f 18/17/1 30/18/1 10/16/1 +f 19/7/5 20/8/5 31/13/5 +f 5/71/2 31/10/2 6/11/2 +f 5/7/3 6/8/3 13/13/3 +f 13/4/4 14/5/4 19/14/4 +f 19/22/6 31/19/6 13/21/6 +f 20/19/1 14/20/1 32/22/1 +f 7/7/2 8/8/2 27/13/2 +f 7/14/5 15/4/5 8/6/5 +f 15/13/4 23/7/4 16/9/4 +f 23/14/3 27/4/3 24/6/3 +f 28/26/1 8/23/1 24/25/1 +f 27/25/6 23/26/6 7/24/6 +f 93/1/7 40/27/7 33/2/7 +f 72/18/8 34/17/8 40/27/8 +f 81/22/9 47/29/9 43/19/9 +f 84/18/7 46/17/7 47/32/7 +f 35/22/10 38/33/10 37/19/10 +f 97/26/9 36/25/9 38/33/9 +f 44/1/8 49/35/8 45/2/8 +f 104/26/10 42/25/10 49/38/10 +f 37/72/4 39/39/4 46/41/4 +f 48/40/4 41/42/4 43/44/4 +f 50/47/4 39/39/4 45/46/4 +f 33/73/4 41/42/4 42/48/4 +f 49/40/2 40/42/2 104/44/12 +f 97/72/11 38/39/2 44/41/12 +f 47/47/2 38/39/2 84/46/14 +f 41/42/4 48/40/4 50/47/4 +f 72/73/13 40/42/2 81/48/14 +f 49/40/2 38/39/2 40/42/2 +f 52/25/7 60/34/7 94/26/7 +f 51/19/8 53/22/8 60/34/8 +f 62/17/9 68/31/9 64/18/9 +f 65/19/7 67/22/7 68/30/7 +f 54/17/10 58/28/10 57/18/10 +f 55/2/9 56/1/9 58/28/9 +f 66/25/8 70/37/8 108/26/8 +f 63/2/10 105/1/10 70/36/10 +f 57/72/16 59/39/4 67/41/15 +f 69/40/4 61/42/4 64/44/15 +f 71/47/4 59/39/4 108/46/18 +f 94/73/17 61/42/4 105/48/18 +f 70/40/2 60/42/2 63/44/2 +f 55/72/2 58/39/2 66/41/2 +f 68/47/2 58/39/2 65/46/2 +f 61/42/4 69/40/4 71/47/4 +f 51/73/2 60/42/2 62/48/2 +f 70/40/2 58/39/2 60/42/2 +f 72/18/19 79/49/19 73/15/19 +f 53/22/20 74/21/20 79/49/20 +f 64/21/21 87/51/21 83/22/21 +f 67/22/19 86/21/19 87/52/19 +f 57/18/22 77/49/22 76/15/22 +f 35/22/21 75/21/21 77/49/21 +f 84/56/20 89/53/20 85/55/20 +f 81/55/22 82/56/22 89/54/22 +f 76/74/3 78/39/3 86/58/3 +f 88/57/3 80/42/3 83/60/3 +f 90/63/3 78/39/3 85/62/3 +f 73/75/3 80/42/3 82/64/3 +f 89/57/5 79/42/5 81/60/14 +f 35/74/13 77/39/5 84/58/14 +f 87/63/5 77/39/5 67/62/15 +f 80/42/3 88/57/3 90/63/3 +f 53/75/16 79/42/5 64/64/15 +f 79/42/5 89/57/5 87/63/5 +f 92/12/19 100/65/19 93/1/19 +f 91/23/20 94/26/20 100/65/20 +f 102/26/21 109/67/21 105/23/21 +f 106/23/19 108/26/19 109/68/19 +f 95/12/22 98/65/22 56/1/22 +f 96/23/21 97/26/21 98/65/21 +f 107/70/20 111/1/20 44/69/20 +f 103/69/22 104/70/22 111/12/22 +f 56/74/17 99/39/3 108/58/18 +f 110/57/3 101/42/3 105/60/18 +f 112/63/3 99/39/3 44/62/12 +f 93/75/11 101/42/3 104/64/12 +f 111/57/5 100/42/5 103/60/5 +f 96/74/5 98/39/5 107/58/5 +f 109/63/5 98/39/5 106/62/5 +f 101/42/3 110/57/3 112/63/3 +f 91/75/5 100/42/5 102/64/5 +f 100/42/5 111/57/5 109/63/5 From 5b1121e0e4f4eff5b3e67f94113802834949d266 Mon Sep 17 00:00:00 2001 From: ackbarscrowbars <42119484+ackbarscrowbars@users.noreply.github.com> Date: Fri, 9 May 2025 17:17:35 -0500 Subject: [PATCH 012/491] Small Tweak to Steel Scaffold Texture It had a dot that made the tiling look weird. --- .../hbm/textures/blocks/scaffold_steel.png | Bin 432 -> 404 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_steel.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_steel.png index 8a410748857ed8aa333412cd2b2d66693a08ab92..29ad7521930626b15e456df4e441182681d47acd 100644 GIT binary patch delta 377 zcmV-<0fzpt1C#@hB!3BTNLh0L01FZT01FZU(%pXi0003-Nkl|3GFS`V1ns@u{D-Pi<9YgyZx6f;}1RM+btJFGw~#FhjSkh0<$a>ky`LM`zP4JIAksG(Hj4M XpZOmAPUVFO00000NkvXXu0mjfOysnr delta 406 zcmV;H0crk}1F!>-B!2{RLP=Bz2nYy#2xN!=00C!7L_t(IjdhbzZUZ3~r1Hk({5 z_rF65Qs5y zyZ37-L{&0Eh^xI&*#p zcsw3I1R}z^t{fxhOl$2U2cW7iwPOr&&X^h7w!MKw1Q8*|I6-3!LI}8T;<7v(oO7nu zI?X#O5fR21FM`wQG@brSx~fhh5C8CTxgf{iU9Ow-o5;%rh%ut7Nbh|TIM{1+58R_8 zxtU>Rq?FQ>)PGtd#yEksR!S)!{&@7>Uu_&?y!qfWQA(lKimHBqr^?>@oU)^d4l1R* zb>>Krb4I)-fb;px7=zXttu<8jqs7az%<=wKD$|hX^Z9Q(J@$Q{djh=X;J8da*6z6P zhi{;nO%j0Q2`^#WHr92Wx!)!)%fhy8c>BKqxV0GD!4KEit^fc407*qoM6N<$g8eAG A_5c6? From 19c481c6d76c15531f8aab9854eca965725b4943 Mon Sep 17 00:00:00 2001 From: ackbarscrowbars <42119484+ackbarscrowbars@users.noreply.github.com> Date: Fri, 9 May 2025 17:20:13 -0500 Subject: [PATCH 013/491] Yellow Scaffold Less Bright While technically usable, the brightness was always just a little too contrasting when I tried using the yellow scaffold in builds. Apparently I'm not the only one, so might as well. --- .../hbm/textures/blocks/scaffold_yellow.png | Bin 421 -> 477 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_yellow.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_yellow.png index 1f152c29abaaaddc4d322768c0df3006b8b312cb..ba8fb0788c3eb38e84dd6da5c9a7420310cd18f5 100644 GIT binary patch delta 451 zcmV;!0X+Vt1Kk6VB!3BTNLh0L01FZT01FZU(%pXi0004xNkl|yXy^$rD(8<+>VMfBu&%pYAp9!Zk;EMo zoLGGn+>6h)?dNduF3T6$ToBOBO;859zEb1^7UUC*aPQnjFD2KZRn$!13) zMsB9PpcpQHYDE%WuR}e6s-HL)Ebb)$dI}=S-AJwpGz}2GYG`5`M>FUCGJv2NecAg4 zbP9O_Wmp*~Gk@>P5QquXChr>5kydb@akZ@<$fW_aVZcaOQ12N$W`Aw#aA-wD_6YK( zLjai~$$)VGFS)Xe7Gf%=Fab`VBrWa_keYlK(r=dMooV^9VK_7(fd%MYWqicYrXL^p z8R11gg>yIq_=18 zf1)|dNc-N}M7Cici1RbkNKqUDMNwe!FC3tE*fvmwQlK?(k8cQ{sIaY$2&4q*<3Tn9 zEr}$?BJoplB4rDNl;SM{X3R5zDgvLM1im}1`r)VdNMa8*JAZs;;N1Y|-+xa4Rp9yL zW~D%_HK$L#lr zACF_bgQ$i+?%@B{JIyzn$htz#$Excz#d?ZFEAHIKIWEY!g6{ab1qhJcp{>zJSrXf; pvpj{mp1lnm=uD4@N&Ec&0|}DG>5>fLIsgCw07*qoL Date: Fri, 9 May 2025 18:06:55 -0500 Subject: [PATCH 014/491] Rusted Scaffold Texture Thought I'd just throw this in with the others, while I'm at it. --- .../hbm/textures/blocks/scaffold_rustedsteel.png | Bin 0 -> 628 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/scaffold_rustedsteel.png diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_rustedsteel.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_rustedsteel.png new file mode 100644 index 0000000000000000000000000000000000000000..38ceb368a0a6550e87bb8e98e4e54181d6fd3e96 GIT binary patch literal 628 zcmV-)0*n2LP)iL$)OPVdrN^h~{X6I>gzB+8hEp@Ak`WR43t?-trrU+>pOAI`>(-3pNgsqGDbREp69 zWT(lFL>x@ase317?>e^&*l9}zo4k?k_R`}~lT;gIZiE=?I*yO{3+@9f9hC!wbP1bFw0qVVy=?%AU!P@nU zo_Vf8mQSA>V0#aDHZ$~Yh<06#5E<_q64BUyv z8BFQW-E1mCYFXwnjp2`mdYO0VCCaKO-Tu%x?ghaGYu7)WdY^lZMEVPpp;0lqwLR Date: Sat, 10 May 2025 16:40:39 +0200 Subject: [PATCH 015/491] charge thrower animations --- .../java/com/hbm/crafting/WeaponRecipes.java | 2 ++ .../weapon/sedna/factory/Orchestras.java | 12 ++++++++-- .../weapon/sedna/factory/XFactoryTool.java | 18 +++++---------- .../weapon/sedna/ItemRenderChargeThrower.java | 23 ++++++++++++++++++- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index d9eca4a19..242a2e475 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -94,6 +94,8 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_tau, 1), new Object[] { " RD", "CTT", "GMS", 'D', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BISMOID), 'C', CU.pipe(), 'T', ModItems.coil_advanced_torus, 'G', ANY_HARDPLASTIC.grip(), 'R', BIGMT.lightReceiver(), 'M', BIGMT.mechanism(), 'S', ANY_HARDPLASTIC.stock() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_lasrifle, 1), new Object[] { "DLC", "BRS", "MG ", 'D', ModItems.crystal_redstone, 'L', DictFrame.fromOne(ModItems.weapon_mod_special, EnumModSpecial.SCOPE), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BISMOID), 'B', ANY_BISMOIDBRONZE.lightBarrel(), 'R', ANY_BISMOIDBRONZE.lightReceiver(), 'S', ANY_HARDPLASTIC.stock(), 'M', BIGMT.mechanism(), 'G', ANY_HARDPLASTIC.grip() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.gun_double_barrel_sacred_dragon, 1), new Object[] { ModItems.gun_double_barrel, DictFrame.fromOne(ModItems.item_secret, EnumSecretType.SELENIUM_STEEL) }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_charge_thrower, 1), new Object[] { "MMM", "BBL", "GG ", 'M', GUNMETAL.mechanism(), 'B', STEEL.heavyBarrel(), 'G', STEEL.grip(), 'L', Items.leather }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_charge_thrower, 1), new Object[] { "MMM", "BBL", "GG ", 'M', GUNMETAL.mechanism(), 'B', STEEL.heavyBarrel(), 'G', STEEL.grip(), 'L', ANY_RUBBER.ingot() }); //SEDNA Ammo CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE, 6), new Object[] { "C", "P", "G", 'C', KEY_COBBLESTONE, 'P', Items.paper, 'G', Items.gunpowder }); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 61a5c0d01..3d0164466 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -7,6 +7,7 @@ import com.hbm.items.ModItems; import com.hbm.handler.threading.PacketThreading; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.impl.ItemGunChargeThrower; import com.hbm.items.weapon.sedna.impl.ItemGunStinger; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.mags.IMagazine; @@ -22,6 +23,7 @@ import com.hbm.util.EntityDamageUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -1419,9 +1421,15 @@ public class Orchestras { if(entity.worldObj.isRemote) return; AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); - + + if(type == AnimType.CYCLE_DRY) { + Entity e = entity.worldObj.getEntityByID(ItemGunChargeThrower.getLastHook(stack)); + if(timer == 0 && e == null) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); + } + if(type == AnimType.RELOAD) { - if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.insertRocket", 1F, 1F); + if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.insertRocket", 1F, 1F); + if(timer == 40) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 1F, 1F); } }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java index 917c06aee..d20677e53 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java @@ -96,7 +96,7 @@ public class XFactoryTool { ModItems.gun_charge_thrower = new ItemGunChargeThrower(WeaponQuality.UTILITY, new GunConfig() .dura(3_000).draw(20).inspect(31).reloadChangeType(true).hideCrosshair(false).crosshair(Crosshair.L_CIRCUMFLEX) .rec(new Receiver(0) - .dmg(5F).delay(4).dry(40).auto(true).spread(0F).spreadHipfire(0F).reload(60).jam(55).sound("hbm:weapon.fire.grenade", 1.0F, 1.0F) + .dmg(5F).delay(4).dry(10).auto(true).spread(0F).spreadHipfire(0F).reload(60).jam(55).sound("hbm:weapon.fire.grenade", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 1).addConfigs(ct_hook, ct_mortar, ct_mortar_charge)) .offset(1, -0.0625 * 2.5, -0.25D) .setupStandardFire().recoil(LAMBDA_RECOIL_CT)) @@ -112,19 +112,13 @@ public class XFactoryTool { @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CT_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() - .addBus("EQUIP", new BusAnimationSequence().addPos(-90, 0, 0, 0).addPos(0, 0, 0, 350, IType.SIN_DOWN)); + .addBus("EQUIP", new BusAnimationSequence().addPos(-45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); case CYCLE: return new BusAnimation() - .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, -3, 50).addPos(0, 0, 0, 250)) - .addBus("HAMMER", new BusAnimationSequence().addPos(15, 0, 0, 50).addPos(15, 0, 0, 550).addPos(0, 0, 0, 100)); + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, -1, 100, IType.SIN_DOWN).addPos(0, 0, 0, 250, IType.SIN_FULL)); case RELOAD: return new BusAnimation() - .addBus("OPEN", new BusAnimationSequence().addPos(45, 0, 0, 200, IType.SIN_FULL).addPos(45, 0, 0, 750).addPos(0, 0, 0, 200, IType.SIN_UP)) - .addBus("SHELL", new BusAnimationSequence().addPos(4, -8, -4, 0).addPos(4, -8, -4, 200).addPos(0, 0, -5, 500, IType.SIN_DOWN).addPos(0, 0, 0, 200, IType.SIN_UP)) - .addBus("FLIP", new BusAnimationSequence().addPos(0, 0, 0, 200).addPos(25, 0, 0, 200, IType.SIN_DOWN).addPos(25, 0, 0, 800).addPos(0, 0, 0, 200, IType.SIN_DOWN)); - case JAMMED: return new BusAnimation() - .addBus("OPEN", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(45, 0, 0, 200, IType.SIN_FULL).addPos(45, 0, 0, 500).addPos(0, 0, 0, 200, IType.SIN_UP)) - .addBus("FLIP", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, 0, 0, 200).addPos(25, 0, 0, 200, IType.SIN_DOWN).addPos(25, 0, 0, 550).addPos(0, 0, 0, 200, IType.SIN_DOWN)); - case INSPECT: return new BusAnimation() - .addBus("FLIP", new BusAnimationSequence().addPos(-360 * 3, 0, 0, 1500, IType.SIN_FULL)); + .addBus("RAISE", new BusAnimationSequence().addPos(-45, 0, 0, 500, IType.SIN_FULL).hold(2000).addPos(0, 0, 0, 500, IType.SIN_FULL)) + .addBus("AMMO", new BusAnimationSequence().setPos(0, -10, -5).hold(500).addPos(0, 0, 5, 750, IType.SIN_FULL).addPos(0, 0, 0, 500, IType.SIN_UP).hold(4000)) + .addBus("TWIST", new BusAnimationSequence().setPos(0, 0, 25).hold(2000).addPos(0, 0, 0, 150)); } return null; diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java index 1d46d93b2..4b30ccc31 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java @@ -7,6 +7,7 @@ import com.hbm.items.weapon.sedna.factory.XFactoryTool; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mods.WeaponModManager; import com.hbm.main.ResourceManager; +import com.hbm.render.anim.HbmAnimations; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; @@ -51,14 +52,34 @@ public class ItemRenderChargeThrower extends ItemRenderWeaponBase { double scale = 0.5D; GL11.glScaled(scale, scale, scale); } + + boolean reloading = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("AMMO") != null; + double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); + double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); + double[] raise = HbmAnimations.getRelevantTransformation("RAISE"); + double[] ammo = HbmAnimations.getRelevantTransformation("AMMO"); + double[] twist = HbmAnimations.getRelevantTransformation("TWIST"); + + GL11.glTranslated(0, 0, -7); + GL11.glRotated(equip[0], -1, 0, 0); + GL11.glTranslated(0, 0, 7); + + GL11.glTranslated(0, -7, 4); + GL11.glRotated(raise[0], 1, 0, 0); + GL11.glTranslated(0, 7, -4); + + GL11.glTranslated(recoil[0], recoil[1], recoil[2]); GL11.glShadeModel(GL11.GL_SMOOTH); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_tex); ResourceManager.charge_thrower.renderPart("Gun"); if(isScoped(stack) && !usingScope) ResourceManager.charge_thrower.renderPart("Scope"); - if(mag.getAmount(stack, null) > 0) { + if(mag.getAmount(stack, null) > 0 || reloading) { + GL11.glTranslated(ammo[0], ammo[1], ammo[2]); + GL11.glRotated(twist[2], 0, 0, 1); + if(mag.getType(stack, null) == XFactoryTool.ct_hook) { Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_hook_tex); ResourceManager.charge_thrower.renderPart("Hook"); From be84b218673c6cece3e9c3b4a0de6fe11828eeaa Mon Sep 17 00:00:00 2001 From: LegendaryDoge30 Date: Sat, 10 May 2025 17:39:07 +0200 Subject: [PATCH 016/491] prototype nina --- .../java/com/hbm/main/ResourceManager.java | 4 +- .../tileentity/RenderNukePrototype.java | 5 +- .../resources/assets/hbm/models/Prototype.obj | 1940 ----------------- .../assets/hbm/models/bombs/Prototype.obj | 1639 ++++++++++++++ .../assets/hbm/textures/models/Prototype.png | Bin 16020 -> 0 bytes .../hbm/textures/models/bombs/Prototype.png | Bin 0 -> 5642 bytes 6 files changed, 1644 insertions(+), 1944 deletions(-) delete mode 100644 src/main/resources/assets/hbm/models/Prototype.obj create mode 100644 src/main/resources/assets/hbm/models/bombs/Prototype.obj delete mode 100644 src/main/resources/assets/hbm/textures/models/Prototype.png create mode 100644 src/main/resources/assets/hbm/textures/models/bombs/Prototype.png diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 07de3e21c..c5b4e6d01 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -272,7 +272,7 @@ public class ResourceManager { public static final IModelCustom bomb_man = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/fat_man.obj")).asVBO(); public static final IModelCustom bomb_mike = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/ivymike.obj")); public static final IModelCustom bomb_tsar = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/tsar.obj")).asVBO(); - public static final IModelCustom bomb_prototype = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/Prototype.obj")); + public static final IModelCustom bomb_prototype = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/Prototype.obj")).asVBO(); public static final IModelCustom bomb_fleija = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/fleija.obj")).asVBO(); public static final IModelCustom bomb_solinium = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/bombs/ufp.obj")); public static final IModelCustom n2 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/bombs/n2.obj")); @@ -721,7 +721,7 @@ public class ResourceManager { public static final ResourceLocation bomb_man_tex = new ResourceLocation(RefStrings.MODID, "textures/models/FatMan.png"); public static final ResourceLocation bomb_mike_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/ivymike.png"); public static final ResourceLocation bomb_tsar_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/tsar.png"); - public static final ResourceLocation bomb_prototype_tex = new ResourceLocation(RefStrings.MODID, "textures/models/Prototype.png"); + public static final ResourceLocation bomb_prototype_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/Prototype.png"); public static final ResourceLocation bomb_fleija_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/fleija.png"); public static final ResourceLocation bomb_solinium_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/ufp.png"); public static final ResourceLocation n2_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/n2.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderNukePrototype.java b/src/main/java/com/hbm/render/tileentity/RenderNukePrototype.java index cfcfcb674..e02f9dece 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderNukePrototype.java +++ b/src/main/java/com/hbm/render/tileentity/RenderNukePrototype.java @@ -27,10 +27,11 @@ public class RenderNukePrototype extends TileEntitySpecialRenderer { case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - + GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.bomb_prototype_tex); ResourceManager.bomb_prototype.renderAll(); - + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_CULL_FACE); GL11.glPopMatrix(); diff --git a/src/main/resources/assets/hbm/models/Prototype.obj b/src/main/resources/assets/hbm/models/Prototype.obj deleted file mode 100644 index ca2890b6c..000000000 --- a/src/main/resources/assets/hbm/models/Prototype.obj +++ /dev/null @@ -1,1940 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'prototype.blend' -# www.blender.org -o Cylinder -v -0.000000 1.150000 -0.099999 -v -0.000000 1.150000 0.100001 -v 0.229610 1.104328 -0.100000 -v 0.229610 1.104328 0.100000 -v 0.424264 0.974264 -0.100000 -v 0.424264 0.974264 0.100000 -v 0.554328 0.779610 -0.100000 -v 0.554328 0.779610 0.100000 -v 0.600000 0.550000 -0.100000 -v 0.600000 0.550000 0.100000 -v 0.554328 0.320390 -0.100000 -v 0.554328 0.320390 0.100000 -v 0.424264 0.125736 -0.100000 -v 0.424264 0.125736 0.100000 -v 0.229610 -0.004328 -0.100000 -v 0.229610 -0.004328 0.100000 -v 0.000000 -0.050000 -0.100001 -v 0.000000 -0.050000 0.099999 -v -0.229610 -0.004328 -0.100000 -v -0.229610 -0.004328 0.100000 -v -0.424264 0.125736 -0.100000 -v -0.424264 0.125736 0.100000 -v -0.554328 0.320390 -0.100000 -v -0.554328 0.320390 0.100000 -v -0.600000 0.550000 -0.100000 -v -0.600000 0.550000 0.100000 -v -0.554328 0.779610 -0.100000 -v -0.554328 0.779610 0.100000 -v -0.424264 0.974264 -0.100000 -v -0.424264 0.974264 0.100000 -v -0.229610 1.104328 -0.100000 -v -0.229610 1.104328 0.100000 -v 0.191342 1.011940 0.100000 -v 0.000000 1.050000 0.100000 -v -0.191341 1.011940 0.100000 -v -0.353553 0.903553 0.100000 -v -0.461940 0.741342 0.100000 -v -0.500000 0.550000 0.100000 -v -0.461940 0.358658 0.100000 -v -0.353553 0.196446 0.100000 -v -0.191342 0.088060 0.100000 -v 0.000000 0.050000 0.100000 -v 0.191342 0.088060 0.100000 -v 0.353553 0.196447 0.100000 -v 0.461940 0.358658 0.100000 -v 0.500000 0.550000 0.100000 -v 0.461940 0.741342 0.100000 -v 0.353553 0.903553 0.100000 -v 0.000000 1.050000 -0.100000 -v 0.191342 1.011940 -0.100000 -v 0.353553 0.903553 -0.100000 -v 0.461940 0.741342 -0.100000 -v 0.500000 0.550000 -0.100000 -v 0.461940 0.358658 -0.100000 -v 0.353553 0.196447 -0.100000 -v 0.191342 0.088060 -0.100000 -v 0.000000 0.050000 -0.100000 -v -0.191342 0.088060 -0.100000 -v -0.353553 0.196447 -0.100000 -v -0.461940 0.358658 -0.100000 -v -0.500000 0.550000 -0.100000 -v -0.461940 0.741342 -0.100000 -v -0.353553 0.903554 -0.100000 -v -0.191341 1.011940 -0.100000 -v 0.191342 1.011938 2.300000 -v -0.000000 1.049998 2.300000 -v -0.191341 1.011938 2.300000 -v -0.353553 0.903551 2.300000 -v -0.461940 0.741340 2.300000 -v -0.500000 0.549998 2.300000 -v -0.461940 0.358656 2.300000 -v -0.353553 0.196444 2.300000 -v -0.191342 0.088058 2.299999 -v 0.000000 0.049998 2.299999 -v 0.191342 0.088058 2.299999 -v 0.353553 0.196445 2.300000 -v 0.461940 0.358656 2.300000 -v 0.500000 0.549998 2.300000 -v 0.461940 0.741340 2.300000 -v 0.353553 0.903551 2.300000 -v -0.000000 1.050002 -2.300000 -v 0.191342 1.011942 -2.300000 -v 0.353553 0.903555 -2.300000 -v 0.461940 0.741344 -2.300000 -v 0.500000 0.550002 -2.300000 -v 0.461940 0.358660 -2.300000 -v 0.353553 0.196449 -2.300000 -v 0.191342 0.088062 -2.300001 -v 0.000000 0.050002 -2.300001 -v -0.191342 0.088062 -2.300001 -v -0.353553 0.196449 -2.300000 -v -0.461940 0.358660 -2.300000 -v -0.500000 0.550002 -2.300000 -v -0.461940 0.741344 -2.300000 -v -0.353553 0.903556 -2.300000 -v -0.191341 1.011942 -2.300000 -v 0.191342 1.011938 2.500000 -v -0.000000 1.049998 2.500000 -v -0.191342 1.011938 2.500000 -v -0.353553 0.903551 2.500000 -v -0.461940 0.741340 2.500000 -v -0.500000 0.549998 2.500000 -v -0.461940 0.358656 2.500000 -v -0.353553 0.196444 2.500000 -v -0.191342 0.088058 2.500000 -v 0.000000 0.049998 2.500000 -v 0.191342 0.088058 2.500000 -v 0.353553 0.196444 2.500000 -v 0.461940 0.358656 2.500000 -v 0.500000 0.549998 2.500000 -v 0.461940 0.741340 2.500000 -v 0.353553 0.903551 2.500000 -v -0.000000 1.050002 -2.500000 -v 0.191342 1.011942 -2.500000 -v 0.353553 0.903556 -2.500000 -v 0.461940 0.741344 -2.500000 -v 0.500000 0.550002 -2.500000 -v 0.461940 0.358660 -2.500000 -v 0.353553 0.196449 -2.500000 -v 0.191342 0.088062 -2.500001 -v 0.000000 0.050002 -2.500001 -v -0.191342 0.088062 -2.500001 -v -0.353553 0.196449 -2.500000 -v -0.461940 0.358660 -2.500000 -v -0.500000 0.550002 -2.500000 -v -0.461940 0.741344 -2.500000 -v -0.353553 0.903556 -2.500000 -v -0.191341 1.011942 -2.500000 -v 0.095671 0.780967 2.800000 -v -0.000000 0.799998 2.800000 -v -0.095671 0.780967 2.800000 -v -0.176777 0.726774 2.800000 -v -0.230970 0.645668 2.800000 -v -0.250000 0.549998 2.800000 -v -0.230970 0.454327 2.800000 -v -0.176777 0.373221 2.800000 -v -0.095671 0.319028 2.799999 -v -0.000000 0.299998 2.799999 -v 0.095671 0.319028 2.799999 -v 0.176777 0.373221 2.800000 -v 0.230970 0.454327 2.800000 -v 0.250000 0.549998 2.800000 -v 0.230970 0.645668 2.800000 -v 0.176777 0.726774 2.800000 -v -0.000000 0.800002 -2.800000 -v 0.095671 0.780972 -2.800000 -v 0.176777 0.726779 -2.800000 -v 0.230970 0.645673 -2.799999 -v 0.250000 0.550002 -2.800000 -v 0.230970 0.454332 -2.800000 -v 0.176777 0.373226 -2.800000 -v 0.095671 0.319033 -2.800000 -v 0.000000 0.300002 -2.800000 -v -0.095671 0.319033 -2.800000 -v -0.176777 0.373226 -2.800000 -v -0.230970 0.454332 -2.800000 -v -0.250000 0.550002 -2.800000 -v -0.230970 0.645673 -2.799999 -v -0.176777 0.726779 -2.800000 -v -0.095671 0.780972 -2.800000 -v 0.076537 0.734773 3.500000 -v 0.000000 0.749997 3.500000 -v -0.076536 0.734773 3.500000 -v -0.141421 0.691418 3.500000 -v -0.184776 0.626534 3.500000 -v -0.200000 0.549997 3.500000 -v -0.184776 0.473460 3.500000 -v -0.141421 0.408576 3.500000 -v -0.076536 0.365221 3.500000 -v 0.000000 0.349997 3.500000 -v 0.076537 0.365221 3.500000 -v 0.141422 0.408576 3.500000 -v 0.184776 0.473460 3.500000 -v 0.200000 0.549997 3.500000 -v 0.184776 0.626534 3.500000 -v 0.141422 0.691418 3.500000 -v 0.000000 0.750003 -3.500000 -v 0.076537 0.734779 -3.500000 -v 0.141422 0.691424 -3.500000 -v 0.184776 0.626540 -3.500000 -v 0.200000 0.550003 -3.500000 -v 0.184776 0.473466 -3.500000 -v 0.141422 0.408582 -3.500000 -v 0.076537 0.365227 -3.500000 -v 0.000000 0.350003 -3.500000 -v -0.076536 0.365227 -3.500000 -v -0.141421 0.408582 -3.500000 -v -0.184776 0.473466 -3.500000 -v -0.200000 0.550003 -3.500000 -v -0.184776 0.626540 -3.500000 -v -0.141421 0.691425 -3.500000 -v -0.076536 0.734779 -3.500000 -v 0.057403 0.688579 3.600000 -v 0.000000 0.699997 3.600000 -v -0.057402 0.688579 3.600000 -v -0.106066 0.656063 3.600000 -v -0.138582 0.607399 3.599999 -v -0.150000 0.549997 3.599999 -v -0.138582 0.492594 3.599999 -v -0.106066 0.443931 3.599999 -v -0.057402 0.411415 3.599999 -v 0.000000 0.399997 3.599999 -v 0.057403 0.411415 3.599999 -v 0.106066 0.443931 3.599999 -v 0.138582 0.492594 3.599999 -v 0.150000 0.549997 3.599999 -v 0.138582 0.607399 3.599999 -v 0.106066 0.656063 3.600000 -v 0.000000 0.700003 -3.599999 -v 0.057403 0.688585 -3.599999 -v 0.106066 0.656069 -3.599999 -v 0.138582 0.607406 -3.599999 -v 0.150000 0.550003 -3.600000 -v 0.138582 0.492601 -3.600000 -v 0.106066 0.443937 -3.600000 -v 0.057403 0.411421 -3.600000 -v 0.000000 0.400003 -3.600000 -v -0.057402 0.411421 -3.600000 -v -0.106066 0.443937 -3.600000 -v -0.138582 0.492601 -3.600000 -v -0.150000 0.550003 -3.600000 -v -0.138582 0.607406 -3.599999 -v -0.106066 0.656069 -3.599999 -v -0.057402 0.688585 -3.599999 -v 0.023918 0.607739 3.599999 -v 0.000000 0.612497 3.599999 -v -0.023917 0.607739 3.599999 -v -0.044194 0.594191 3.599999 -v -0.057742 0.573915 3.599999 -v -0.062500 0.549997 3.599999 -v -0.057742 0.526079 3.599999 -v -0.044194 0.505803 3.599999 -v -0.023917 0.492254 3.599999 -v 0.000000 0.487497 3.599999 -v 0.023918 0.492254 3.599999 -v 0.044194 0.505803 3.599999 -v 0.057743 0.526079 3.599999 -v 0.062500 0.549997 3.599999 -v 0.057743 0.573915 3.599999 -v 0.044194 0.594191 3.599999 -v 0.000000 0.612503 -3.599999 -v 0.023918 0.607746 -3.599999 -v 0.044195 0.594197 -3.599999 -v 0.057743 0.573921 -3.599999 -v 0.062500 0.550003 -3.599999 -v 0.057743 0.526085 -3.599999 -v 0.044195 0.505809 -3.599999 -v 0.023918 0.492261 -3.599999 -v 0.000000 0.487503 -3.599999 -v -0.023917 0.492261 -3.599999 -v -0.044194 0.505809 -3.599999 -v -0.057742 0.526085 -3.599999 -v -0.062500 0.550003 -3.599999 -v -0.057742 0.573921 -3.599999 -v -0.044194 0.594197 -3.599999 -v -0.023917 0.607746 -3.599999 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.549996 4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.000000 0.550004 -4.200000 -v 0.500000 -0.049998 -2.300001 -v 0.500000 -0.050002 2.299999 -v -0.500000 -0.049998 -2.300001 -v 0.500000 -0.049998 -2.500001 -v -0.500000 -0.050002 2.299999 -v -0.500000 -0.049998 -2.500001 -v -0.500000 -0.050002 2.500000 -v 0.500000 -0.050002 2.500000 -v 0.000000 0.730000 -3.474999 -v 0.000000 0.730000 3.475001 -v 0.068883 0.716299 -3.474999 -v 0.068883 0.716298 3.475001 -v 0.127279 0.677280 -3.474998 -v 0.127279 0.677279 3.475001 -v 0.166298 0.618883 -3.474999 -v 0.166298 0.618883 3.475000 -v 0.180000 0.550000 -3.474999 -v 0.180000 0.550000 3.475000 -v 0.166298 0.481117 -3.475000 -v 0.166298 0.481117 3.474999 -v 0.127279 0.422721 -3.475001 -v 0.127279 0.422720 3.474999 -v 0.068883 0.383702 -3.475001 -v 0.068883 0.383701 3.474999 -v 0.000000 0.370000 -3.475000 -v 0.000000 0.370000 3.474999 -v -0.068883 0.383702 -3.475001 -v -0.068883 0.383701 3.474999 -v -0.127279 0.422721 -3.475001 -v -0.127279 0.422720 3.474999 -v -0.166298 0.481117 -3.475000 -v -0.166298 0.481117 3.474999 -v -0.180000 0.550000 -3.475000 -v -0.180000 0.550000 3.475000 -v -0.166298 0.618883 -3.474999 -v -0.166298 0.618883 3.475000 -v -0.127279 0.677280 -3.474999 -v -0.127279 0.677279 3.475001 -v -0.068883 0.716299 -3.474999 -v -0.068883 0.716298 3.475001 -v 0.078450 0.739398 -3.430000 -v 0.000000 0.755003 -3.430000 -v 0.144957 0.694960 -3.430000 -v 0.189396 0.628453 -3.430000 -v 0.205000 0.550003 -3.430000 -v 0.189396 0.471553 -3.430000 -v 0.144957 0.405046 -3.430000 -v 0.078450 0.360608 -3.430000 -v 0.000000 0.345003 -3.430000 -v -0.078450 0.360608 -3.430000 -v -0.144956 0.405046 -3.430000 -v -0.189395 0.471553 -3.430000 -v -0.205000 0.550003 -3.430000 -v -0.189395 0.628453 -3.430000 -v -0.144956 0.694960 -3.430000 -v -0.078450 0.739398 -3.430000 -v 0.000000 0.793253 -2.894500 -v 0.093088 0.774736 -2.894500 -v 0.172004 0.722006 -2.894500 -v 0.224734 0.643090 -2.894500 -v 0.243250 0.550003 -2.894500 -v 0.224734 0.456915 -2.894500 -v 0.172004 0.377999 -2.894500 -v 0.093088 0.325269 -2.894500 -v 0.000000 0.306753 -2.894500 -v -0.093088 0.325269 -2.894500 -v -0.172004 0.377999 -2.894500 -v -0.224734 0.456915 -2.894500 -v -0.243250 0.550003 -2.894500 -v -0.224734 0.643090 -2.894500 -v -0.172004 0.722006 -2.894500 -v -0.093088 0.774736 -2.894500 -v 0.000000 0.754997 3.430000 -v 0.078450 0.739392 3.430000 -v -0.078450 0.739392 3.430000 -v -0.144957 0.694954 3.430000 -v -0.189395 0.628447 3.430000 -v -0.205000 0.549997 3.430000 -v -0.189395 0.471547 3.430000 -v -0.144957 0.405040 3.430000 -v -0.078450 0.360602 3.430000 -v 0.000000 0.344997 3.430000 -v 0.078450 0.360602 3.430000 -v 0.144957 0.405040 3.430000 -v 0.189396 0.471547 3.430000 -v 0.205000 0.549997 3.430000 -v 0.189396 0.628447 3.430000 -v 0.144957 0.694954 3.430000 -v 0.093088 0.774731 2.894500 -v -0.000000 0.793247 2.894500 -v -0.093088 0.774731 2.894500 -v -0.172004 0.722001 2.894500 -v -0.224734 0.643085 2.894500 -v -0.243250 0.549997 2.894500 -v -0.224734 0.456910 2.894500 -v -0.172004 0.377994 2.894500 -v -0.093088 0.325264 2.894500 -v 0.000000 0.306747 2.894500 -v 0.093088 0.325264 2.894500 -v 0.172004 0.377994 2.894500 -v 0.224734 0.456910 2.894500 -v 0.243250 0.549997 2.894500 -v 0.224734 0.643085 2.894500 -v 0.172004 0.722001 2.894500 -vt 0.492092 0.799446 -vt 0.521787 0.799446 -vt 0.521787 0.824815 -vt 0.551483 0.799446 -vt 0.551483 0.824815 -vt 0.581178 0.799446 -vt 0.581178 0.824815 -vt 0.610874 0.799446 -vt 0.640569 0.799446 -vt 0.640569 0.824815 -vt 0.670265 0.799446 -vt 0.670264 0.824815 -vt 0.699960 0.799446 -vt 0.699960 0.824815 -vt 0.729655 0.799446 -vt 0.729655 0.824815 -vt 0.254528 0.799446 -vt 0.284223 0.799446 -vt 0.284223 0.824815 -vt 0.313919 0.799446 -vt 0.313919 0.824815 -vt 0.343614 0.799446 -vt 0.343614 0.824815 -vt 0.373310 0.799446 -vt 0.403005 0.799446 -vt 0.403005 0.824815 -vt 0.432701 0.799446 -vt 0.432701 0.824815 -vt 0.452498 0.742202 -vt 0.427752 0.742202 -vt 0.427751 0.463144 -vt 0.462396 0.799446 -vt 0.492092 0.824815 -vt 0.462396 0.824815 -vt 0.556464 0.952230 -vt 0.556464 0.977599 -vt 0.531718 0.977599 -vt 0.494566 0.787005 -vt 0.519313 0.787005 -vt 0.464871 0.787005 -vt 0.489617 0.787005 -vt 0.435175 0.787005 -vt 0.459922 0.787005 -vt 0.405480 0.787005 -vt 0.430226 0.787005 -vt 0.375784 0.787005 -vt 0.400531 0.787005 -vt 0.346089 0.787005 -vt 0.370835 0.787005 -vt 0.316393 0.787005 -vt 0.341140 0.787005 -vt 0.286698 0.787005 -vt 0.311444 0.787005 -vt 0.257002 0.787005 -vt 0.281749 0.787005 -vt 0.702435 0.787005 -vt 0.727181 0.787006 -vt 0.672739 0.787005 -vt 0.697485 0.787005 -vt 0.643044 0.787005 -vt 0.667790 0.787005 -vt 0.613348 0.787005 -vt 0.638094 0.787005 -vt 0.583653 0.787005 -vt 0.608399 0.787005 -vt 0.553957 0.787005 -vt 0.578704 0.787005 -vt 0.524262 0.787005 -vt 0.549008 0.787005 -vt 0.519312 0.837256 -vt 0.494566 0.837256 -vt 0.549008 0.837256 -vt 0.524262 0.837256 -vt 0.578703 0.837256 -vt 0.553957 0.837256 -vt 0.608399 0.837256 -vt 0.583653 0.837256 -vt 0.638094 0.837256 -vt 0.613348 0.837256 -vt 0.667790 0.837256 -vt 0.643044 0.837256 -vt 0.697485 0.837256 -vt 0.672739 0.837256 -vt 0.727181 0.837256 -vt 0.702435 0.837256 -vt 0.281749 0.837255 -vt 0.257002 0.837255 -vt 0.254528 0.824815 -vt 0.311444 0.837255 -vt 0.286698 0.837255 -vt 0.341140 0.837256 -vt 0.316393 0.837255 -vt 0.373310 0.824815 -vt 0.370835 0.837256 -vt 0.346089 0.837256 -vt 0.400531 0.837256 -vt 0.375784 0.837256 -vt 0.430226 0.837256 -vt 0.405480 0.837256 -vt 0.459922 0.837256 -vt 0.435175 0.837256 -vt 0.489617 0.837256 -vt 0.464871 0.837256 -vt 0.477244 0.742202 -vt 0.452498 0.463143 -vt 0.501990 0.742202 -vt 0.477244 0.463143 -vt 0.526736 0.463144 -vt 0.526736 0.742202 -vt 0.551483 0.463144 -vt 0.551483 0.742202 -vt 0.576229 0.742202 -vt 0.600975 0.463144 -vt 0.600975 0.742202 -vt 0.625721 0.742202 -vt 0.650468 0.742202 -vt 0.625721 0.463144 -vt 0.279274 0.742202 -vt 0.254528 0.742202 -vt 0.254528 0.463144 -vt 0.304020 0.742202 -vt 0.279274 0.463144 -vt 0.328767 0.742202 -vt 0.304020 0.463144 -vt 0.353513 0.742202 -vt 0.328766 0.463144 -vt 0.378259 0.742202 -vt 0.353513 0.463144 -vt 0.403005 0.742202 -vt 0.378259 0.463144 -vt 0.403005 0.463144 -vt 0.254528 0.245117 -vt 0.254528 0.220371 -vt 0.533587 0.220371 -vt 0.533587 0.269864 -vt 0.254528 0.269863 -vt 0.254528 0.294610 -vt 0.254528 0.319356 -vt 0.533587 0.294610 -vt 0.254528 0.344102 -vt 0.533587 0.319356 -vt 0.254528 0.368848 -vt 0.533587 0.344102 -vt 0.254528 0.393595 -vt 0.533587 0.368849 -vt 0.254528 0.418341 -vt 0.533587 0.393595 -vt 0.533587 0.047147 -vt 0.254528 0.047147 -vt 0.254528 0.022401 -vt 0.254528 0.071894 -vt 0.533587 0.096640 -vt 0.254528 0.096640 -vt 0.254528 0.121386 -vt 0.254528 0.146132 -vt 0.533587 0.121386 -vt 0.254528 0.170879 -vt 0.533587 0.146132 -vt 0.254528 0.195625 -vt 0.533587 0.170879 -vt 0.581211 0.952230 -vt 0.581211 0.977599 -vt 0.605957 0.977599 -vt 0.630703 0.952230 -vt 0.630703 0.977599 -vt 0.655449 0.977599 -vt 0.821007 0.098508 -vt 0.821007 0.022401 -vt 0.825835 0.074237 -vt 0.695270 0.705608 -vt 0.758693 0.692923 -vt 0.822115 0.705608 -vt 0.734422 0.688095 -vt 0.713846 0.674347 -vt 0.700098 0.653771 -vt 0.695270 0.629501 -vt 0.457480 0.977599 -vt 0.381373 0.977599 -vt 0.381373 0.952230 -vt 0.482226 0.952230 -vt 0.482226 0.977599 -vt 0.506972 0.977599 -vt 0.531718 0.952230 -vt 0.454366 0.907427 -vt 0.429620 0.907427 -vt 0.429620 0.882058 -vt 0.479112 0.882058 -vt 0.479112 0.907427 -vt 0.503858 0.907427 -vt 0.528605 0.882058 -vt 0.528605 0.907427 -vt 0.882962 0.249826 -vt 0.858692 0.254654 -vt 0.819540 0.237142 -vt 0.891188 0.751518 -vt 0.943024 0.756346 -vt 0.866917 0.756346 -vt 0.925512 0.668652 -vt 0.943024 0.629501 -vt 0.930340 0.692923 -vt 0.911764 0.648077 -vt 0.891188 0.634328 -vt 0.866917 0.629501 -vt 0.604711 0.907427 -vt 0.604712 0.882058 -vt 0.731556 0.882058 -vt 0.330635 0.882059 -vt 0.330635 0.907427 -vt 0.254528 0.907427 -vt 0.355381 0.907427 -vt 0.380127 0.882058 -vt 0.380127 0.907427 -vt 0.404873 0.907427 -vt 0.123985 0.807563 -vt 0.119529 0.797773 -vt 0.160378 0.771535 -vt 0.124345 0.818284 -vt 0.171693 0.799004 -vt 0.120556 0.828292 -vt 0.171596 0.828676 -vt 0.139109 0.876792 -vt 0.113207 0.836045 -vt 0.103388 0.840328 -vt 0.092583 0.840466 -vt 0.111793 0.887963 -vt 0.054992 0.876764 -vt 0.082447 0.836877 -vt 0.033952 0.855940 -vt 0.074549 0.829651 -vt 0.070085 0.819933 -vt 0.069728 0.809232 -vt 0.022492 0.828614 -vt 0.033709 0.771511 -vt 0.073532 0.799194 -vt 0.080915 0.791363 -vt 0.090753 0.786942 -vt 0.054695 0.750483 -vt 0.111900 0.739095 -vt 0.101546 0.786608 -vt 0.111651 0.790413 -vt 0.139376 0.750489 -vt 0.706324 0.080556 -vt 0.695471 0.074614 -vt 0.713644 0.028534 -vt 0.715366 0.089002 -vt 0.735351 0.040417 -vt 0.722033 0.099425 -vt 0.753435 0.057309 -vt 0.774520 0.101657 -vt 0.725908 0.111176 -vt 0.776205 0.126346 -vt 0.726751 0.123520 -vt 0.724508 0.135688 -vt 0.761341 0.173147 -vt 0.719319 0.146921 -vt 0.711508 0.156517 -vt 0.628686 0.111176 -vt 0.627843 0.123520 -vt 0.578389 0.126346 -vt 0.587825 0.078156 -vt 0.632561 0.099425 -vt 0.601159 0.057309 -vt 0.639228 0.089002 -vt 0.648270 0.080556 -vt 0.659123 0.074614 -vt 0.619243 0.040417 -vt 0.664924 0.022401 -vt 0.671110 0.071548 -vt 0.683483 0.071548 -vt 0.689670 0.022401 -vt 0.793444 0.552161 -vt 0.783547 0.552299 -vt 0.783299 0.543401 -vt 0.803342 0.552299 -vt 0.793444 0.543260 -vt 0.813232 0.552712 -vt 0.803589 0.543401 -vt 0.823106 0.553399 -vt 0.813726 0.543824 -vt 0.735822 0.403499 -vt 0.744723 0.403623 -vt 0.744723 0.413521 -vt 0.578389 0.403499 -vt 0.587290 0.403623 -vt 0.587290 0.413521 -vt 0.854040 0.548325 -vt 0.852562 0.557103 -vt 0.842779 0.555596 -vt 0.862300 0.558882 -vt 0.871984 0.560931 -vt 0.864021 0.550148 -vt 0.722868 0.550148 -vt 0.724589 0.558882 -vt 0.714905 0.560931 -vt 0.732849 0.548325 -vt 0.734327 0.557103 -vt 0.744109 0.555596 -vt 0.885978 0.152212 -vt 0.876079 0.152211 -vt 0.875955 0.143311 -vt 0.821991 0.878918 -vt 0.812093 0.878918 -vt 0.811969 0.870017 -vt 0.773162 0.543823 -vt 0.773657 0.552711 -vt 0.763782 0.553399 -vt 0.666418 0.278440 -vt 0.666666 0.269542 -vt 0.676563 0.269679 -vt 0.656776 0.269129 -vt 0.646901 0.268441 -vt 0.656281 0.278017 -vt 0.819540 0.391966 -vt 0.819663 0.383065 -vt 0.829562 0.383065 -vt 0.874612 0.383065 -vt 0.884510 0.383065 -vt 0.884634 0.391966 -vt 0.617445 0.264737 -vt 0.627228 0.266245 -vt 0.625995 0.275061 -vt 0.605987 0.271692 -vt 0.607708 0.262958 -vt 0.596061 0.269592 -vt 0.598024 0.260909 -vt 0.745418 0.262958 -vt 0.755102 0.260909 -vt 0.757066 0.269592 -vt 0.735681 0.264737 -vt 0.747140 0.271692 -vt 0.727131 0.275060 -vt 0.725898 0.266245 -vt 0.821007 0.177225 -vt 0.821131 0.168324 -vt 0.831029 0.168324 -vt 0.682119 0.413521 -vt 0.682119 0.403623 -vt 0.691020 0.403499 -vt 0.696846 0.278017 -vt 0.696351 0.269129 -vt 0.706226 0.268441 -vt 0.686708 0.278440 -vt 0.686461 0.269541 -vt 0.676563 0.278581 -vt 0.890751 0.801148 -vt 0.889244 0.875682 -vt 0.887942 0.875737 -vt 0.792403 0.566305 -vt 0.784980 0.566408 -vt 0.801908 0.566408 -vt 0.794485 0.566305 -vt 0.811407 0.566775 -vt 0.803989 0.566466 -vt 0.820891 0.567407 -vt 0.813485 0.566891 -vt 0.758851 0.404860 -vt 0.758851 0.412284 -vt 0.601418 0.404860 -vt 0.601418 0.412284 -vt 0.849188 0.570877 -vt 0.841850 0.569747 -vt 0.858544 0.572557 -vt 0.851241 0.571223 -vt 0.867849 0.574496 -vt 0.860586 0.572960 -vt 0.726303 0.572960 -vt 0.719040 0.574497 -vt 0.735648 0.571223 -vt 0.728345 0.572557 -vt 0.745038 0.569747 -vt 0.737701 0.570877 -vt 0.884740 0.166339 -vt 0.877316 0.166339 -vt 0.820754 0.893046 -vt 0.813330 0.893046 -vt 0.773404 0.566891 -vt 0.765998 0.567406 -vt 0.782899 0.566466 -vt 0.775482 0.566775 -vt 0.911868 0.920544 -vt 0.668099 0.255433 -vt 0.675522 0.255536 -vt 0.658601 0.255065 -vt 0.666018 0.255375 -vt 0.649117 0.254434 -vt 0.656523 0.254949 -vt 0.820901 0.368937 -vt 0.828325 0.368937 -vt 0.875849 0.368937 -vt 0.883273 0.368937 -vt 0.620820 0.250963 -vt 0.628157 0.252093 -vt 0.611464 0.249283 -vt 0.618767 0.250617 -vt 0.602159 0.247344 -vt 0.609422 0.248880 -vt 0.743704 0.248880 -vt 0.750968 0.247344 -vt 0.734359 0.250617 -vt 0.741662 0.249283 -vt 0.724969 0.252093 -vt 0.732306 0.250963 -vt 0.822368 0.154196 -vt 0.829792 0.154196 -vt 0.667991 0.412284 -vt 0.667991 0.404860 -vt 0.696604 0.254949 -vt 0.704010 0.254434 -vt 0.687108 0.255374 -vt 0.694525 0.255065 -vt 0.677604 0.255536 -vt 0.685027 0.255432 -vt 0.790390 0.577220 -vt 0.787297 0.577263 -vt 0.799592 0.577263 -vt 0.796499 0.577220 -vt 0.808789 0.577561 -vt 0.805699 0.577432 -vt 0.817975 0.578116 -vt 0.814889 0.577901 -vt 0.769736 0.407026 -vt 0.769736 0.410119 -vt 0.612303 0.407026 -vt 0.612303 0.410119 -vt 0.845390 0.581306 -vt 0.842333 0.580835 -vt 0.854457 0.582876 -vt 0.851414 0.582321 -vt 0.863477 0.584698 -vt 0.860451 0.584058 -vt 0.726438 0.584058 -vt 0.723412 0.584698 -vt 0.735475 0.582321 -vt 0.732432 0.582877 -vt 0.744556 0.580835 -vt 0.741499 0.581306 -vt 0.882575 0.177225 -vt 0.879482 0.177225 -vt 0.818589 0.903931 -vt 0.815495 0.903931 -vt 0.771999 0.577900 -vt 0.768914 0.578115 -vt 0.781190 0.577432 -vt 0.778099 0.577561 -vt 0.670416 0.244578 -vt 0.673509 0.244621 -vt 0.661218 0.244279 -vt 0.664309 0.244408 -vt 0.652033 0.243725 -vt 0.655118 0.243940 -vt 0.823066 0.358051 -vt 0.826159 0.358051 -vt 0.878014 0.358051 -vt 0.881108 0.358051 -vt 0.624618 0.240534 -vt 0.627675 0.241005 -vt 0.615550 0.238964 -vt 0.618593 0.239520 -vt 0.606530 0.237142 -vt 0.609557 0.237782 -vt 0.743570 0.237782 -vt 0.746596 0.237142 -vt 0.734533 0.239520 -vt 0.737576 0.238964 -vt 0.725451 0.241005 -vt 0.728508 0.240534 -vt 0.824533 0.143311 -vt 0.827627 0.143311 -vt 0.657106 0.410119 -vt 0.657106 0.407026 -vt 0.698008 0.243939 -vt 0.701094 0.243725 -vt 0.688818 0.244408 -vt 0.691908 0.244279 -vt 0.679618 0.244621 -vt 0.682711 0.244578 -vt 0.902736 0.802310 -vt 0.905694 0.802863 -vt 0.890550 0.875741 -vt 0.908627 0.803534 -vt 0.911530 0.804324 -vt 0.914400 0.805230 -vt 0.896766 0.801513 -vt 0.899758 0.801878 -vt 0.893762 0.801270 -vt 0.866917 0.804172 -vt 0.869827 0.803381 -vt 0.872766 0.802708 -vt 0.875730 0.802154 -vt 0.878714 0.801721 -vt 0.881713 0.801408 -vt 0.884723 0.801217 -vt 0.887737 0.801148 -vt 0.866917 0.920545 -vt 0.780461 0.822722 -vt 0.798567 0.750410 -vt 0.799836 0.750697 -vt 0.777553 0.821931 -vt 0.774680 0.821023 -vt 0.822115 0.821932 -vt 0.819208 0.822723 -vt 0.801109 0.750432 -vt 0.816272 0.823395 -vt 0.786350 0.824000 -vt 0.783399 0.823395 -vt 0.789324 0.824485 -vt 0.792315 0.824849 -vt 0.795318 0.825093 -vt 0.798328 0.825215 -vt 0.813320 0.824000 -vt 0.801341 0.825215 -vt 0.804352 0.825093 -vt 0.807355 0.824850 -vt 0.810346 0.824485 -vt 0.838116 0.268402 -vt 0.911764 0.737769 -vt 0.824368 0.288978 -vt 0.925512 0.717194 -vt 0.819540 0.313249 -vt 0.946385 0.313249 -vt 0.941557 0.288978 -vt 0.946385 0.237142 -vt 0.927809 0.268402 -vt 0.907233 0.254654 -vt 0.929276 0.053662 -vt 0.908700 0.039913 -vt 0.947852 0.022401 -vt 0.943024 0.074237 -vt 0.947852 0.098508 -vt 0.655449 0.952230 -vt 0.731556 0.952230 -vt 0.860159 0.039913 -vt 0.839583 0.053662 -vt 0.884430 0.035086 -vt 0.254528 0.977599 -vt 0.254528 0.952230 -vt 0.822115 0.629501 -vt 0.817287 0.653771 -vt 0.803539 0.674347 -vt 0.782963 0.688095 -vt 0.116063 0.693750 -vt 0.104355 0.693818 -vt 0.104355 0.023013 -vt 0.092648 0.693886 -vt 0.092648 0.023081 -vt 0.080940 0.693953 -vt 0.080940 0.023149 -vt 0.069232 0.694021 -vt 0.069232 0.023217 -vt 0.057524 0.694089 -vt 0.045817 0.694157 -vt 0.045817 0.023352 -vt 0.034109 0.694225 -vt 0.022401 0.694293 -vt 0.022401 0.023488 -vt 0.209725 0.693206 -vt 0.198018 0.693274 -vt 0.198017 0.022469 -vt 0.186310 0.693342 -vt 0.186310 0.022537 -vt 0.174602 0.693410 -vt 0.174602 0.022605 -vt 0.162894 0.693478 -vt 0.162894 0.022673 -vt 0.151186 0.693546 -vt 0.151186 0.022741 -vt 0.139479 0.693614 -vt 0.139479 0.022809 -vt 0.127771 0.693682 -vt 0.116063 0.022945 -vt 0.127771 0.022877 -vt 0.664525 0.346512 -vt 0.646160 0.277312 -vt 0.652497 0.346010 -vt 0.615967 0.273515 -vt 0.616560 0.342503 -vt 0.592818 0.338505 -vt 0.772087 0.336013 -vt 0.737159 0.273515 -vt 0.760308 0.338505 -vt 0.736567 0.342502 -vt 0.700630 0.346010 -vt 0.706967 0.277312 -vt 0.688601 0.346512 -vt 0.676563 0.346679 -vt 0.664191 0.358525 -vt 0.640487 0.345174 -vt 0.651829 0.358009 -vt 0.627171 0.355948 -vt 0.628505 0.344005 -vt 0.604661 0.340669 -vt 0.614895 0.354404 -vt 0.590494 0.350296 -vt 0.581040 0.336013 -vt 0.774737 0.347734 -vt 0.748465 0.340669 -vt 0.762632 0.350296 -vt 0.738232 0.354404 -vt 0.725956 0.355948 -vt 0.724622 0.344005 -vt 0.712640 0.345174 -vt 0.701298 0.358009 -vt 0.688935 0.358525 -vt 0.676563 0.358697 -vt 0.781406 0.475328 -vt 0.793444 0.475161 -vt 0.805482 0.475328 -vt 0.823848 0.544528 -vt 0.817511 0.475830 -vt 0.865346 0.481171 -vt 0.844013 0.546780 -vt 0.873947 0.552248 -vt 0.877189 0.483335 -vt 0.709699 0.483335 -vt 0.712942 0.552249 -vt 0.721542 0.481172 -vt 0.742876 0.546780 -vt 0.763041 0.544528 -vt 0.757368 0.476666 -vt 0.769378 0.475830 -vt 0.781072 0.463316 -vt 0.793444 0.463143 -vt 0.818178 0.463831 -vt 0.830522 0.464690 -vt 0.829521 0.476666 -vt 0.841503 0.477836 -vt 0.855113 0.467436 -vt 0.853448 0.479338 -vt 0.867342 0.469321 -vt 0.891618 0.474105 -vt 0.888968 0.485827 -vt 0.707375 0.471545 -vt 0.697921 0.485827 -vt 0.719547 0.469321 -vt 0.733441 0.479338 -vt 0.745386 0.477836 -vt 0.731776 0.467436 -vt 0.756367 0.464691 -vt 0.768710 0.463831 -vt 0.610874 0.824815 -vt 0.501990 0.463144 -vt 0.576229 0.463144 -vt 0.650468 0.463144 -vt 0.533587 0.245117 -vt 0.533587 0.418341 -vt 0.533587 0.022401 -vt 0.533587 0.071894 -vt 0.533587 0.195625 -vt 0.605957 0.952230 -vt 0.457480 0.952230 -vt 0.506972 0.952230 -vt 0.454366 0.882058 -vt 0.503858 0.882058 -vt 0.731557 0.907427 -vt 0.254528 0.882059 -vt 0.355381 0.882058 -vt 0.404873 0.882058 -vt 0.160132 0.855993 -vt 0.082343 0.887953 -vt 0.022401 0.798956 -vt 0.082158 0.739095 -vt 0.766769 0.078156 -vt 0.771719 0.150682 -vt 0.745720 0.192340 -vt 0.580074 0.101657 -vt 0.640950 0.028534 -vt 0.735822 0.413645 -vt 0.578389 0.413645 -vt 0.886101 0.143311 -vt 0.822115 0.870017 -vt 0.829686 0.391966 -vt 0.874488 0.391966 -vt 0.831153 0.177225 -vt 0.691020 0.413645 -vt 0.911794 0.920544 -vt 0.866992 0.920545 -vt 0.731556 0.977599 -vt 0.057524 0.023284 -vt 0.034109 0.023420 -vt 0.209725 0.022401 -vt 0.639486 0.357150 -vt 0.602666 0.352519 -vt 0.578389 0.347735 -vt 0.750461 0.352519 -vt 0.713641 0.357150 -vt 0.805816 0.463315 -vt 0.842836 0.465892 -vt 0.879513 0.471544 -vt 0.695270 0.474106 -vt 0.744052 0.465893 -vn 0.195100 0.980800 0.000000 -vn 0.555600 0.831500 0.000000 -vn 0.831500 0.555600 0.000000 -vn 0.980800 0.195100 0.000000 -vn 0.980800 -0.195100 -0.000000 -vn 0.831500 -0.555600 -0.000000 -vn 0.555600 -0.831500 -0.000000 -vn 0.195100 -0.980800 -0.000000 -vn -0.195100 -0.980800 -0.000000 -vn -0.555600 -0.831500 -0.000000 -vn -0.831500 -0.555600 -0.000000 -vn -0.980800 -0.195100 -0.000000 -vn -0.980800 0.195100 0.000000 -vn -0.831500 0.555600 0.000000 -vn -0.195100 0.980800 0.000000 -vn -0.555600 0.831500 0.000000 -vn -0.000000 -0.000000 1.000000 -vn 0.000000 0.000000 -1.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 -1.000000 -0.000000 -vn -1.000000 0.000000 0.000000 -vn 0.151100 0.759400 0.632800 -vn -0.151100 0.759400 0.632800 -vn -0.430200 0.643800 0.632800 -vn -0.643800 0.430200 0.632800 -vn -0.759400 0.151100 0.632800 -vn -0.759400 -0.151100 0.632800 -vn -0.643800 -0.430200 0.632800 -vn -0.430200 -0.643800 0.632800 -vn -0.151100 -0.759400 0.632800 -vn 0.151100 -0.759400 0.632800 -vn 0.430200 -0.643800 0.632800 -vn 0.643800 -0.430200 0.632800 -vn 0.759400 -0.151100 0.632800 -vn 0.759400 0.151100 0.632800 -vn 0.643800 0.430200 0.632800 -vn 0.430200 0.643800 0.632800 -vn 0.151100 0.759400 -0.632800 -vn 0.430200 0.643800 -0.632800 -vn 0.643800 0.430200 -0.632800 -vn 0.759400 0.151100 -0.632800 -vn 0.759400 -0.151100 -0.632800 -vn 0.643800 -0.430200 -0.632800 -vn 0.430200 -0.643800 -0.632800 -vn 0.151100 -0.759400 -0.632800 -vn -0.151100 -0.759400 -0.632800 -vn -0.430200 -0.643800 -0.632800 -vn -0.643800 -0.430200 -0.632800 -vn -0.759400 -0.151100 -0.632800 -vn -0.759400 0.151100 -0.632800 -vn -0.643800 0.430200 -0.632800 -vn -0.430200 0.643800 -0.632800 -vn -0.151100 0.759400 -0.632800 -vn 0.194600 0.978400 0.069900 -vn -0.194600 0.978400 0.069900 -vn -0.554200 0.829400 0.069900 -vn -0.829400 0.554200 0.069900 -vn -0.978400 0.194600 0.069900 -vn -0.978400 -0.194600 0.069900 -vn -0.829400 -0.554200 0.069900 -vn -0.554200 -0.829400 0.069900 -vn -0.194600 -0.978400 0.069900 -vn 0.194600 -0.978400 0.069900 -vn 0.554200 -0.829400 0.069900 -vn 0.829400 -0.554200 0.069900 -vn 0.978400 -0.194600 0.069900 -vn 0.978400 0.194600 0.069900 -vn 0.829400 0.554200 0.069900 -vn 0.554200 0.829400 0.069900 -vn 0.194600 0.978400 -0.069900 -vn 0.554200 0.829400 -0.069900 -vn 0.829400 0.554200 -0.069900 -vn 0.978400 0.194600 -0.069900 -vn 0.978400 -0.194600 -0.069900 -vn 0.829400 -0.554200 -0.069900 -vn 0.554200 -0.829400 -0.069900 -vn 0.194600 -0.978400 -0.069900 -vn -0.194600 -0.978400 -0.069900 -vn -0.554200 -0.829400 -0.069900 -vn -0.829400 -0.554200 -0.069900 -vn -0.978400 -0.194600 -0.069900 -vn -0.978400 0.194600 -0.069900 -vn -0.829400 0.554200 -0.069900 -vn -0.554200 0.829400 -0.069900 -vn -0.194600 0.978400 -0.069900 -vn 0.000000 -0.994600 -0.103600 -vn 0.175200 0.880600 0.440300 -vn -0.175200 0.880600 0.440300 -vn -0.498800 0.746500 0.440300 -vn -0.746500 0.498800 0.440300 -vn -0.880600 0.175200 0.440300 -vn -0.880600 -0.175200 0.440300 -vn -0.746500 -0.498800 0.440300 -vn -0.498800 -0.746500 0.440300 -vn -0.175200 -0.880600 0.440300 -vn 0.175200 -0.880600 0.440300 -vn 0.498800 -0.746500 0.440300 -vn 0.746500 -0.498800 0.440300 -vn 0.880600 -0.175200 0.440300 -vn 0.880600 0.175200 0.440300 -vn 0.746500 0.498800 0.440300 -vn 0.498800 0.746500 0.440300 -vn 0.175200 0.880600 -0.440300 -vn 0.498800 0.746500 -0.440300 -vn 0.746500 0.498800 -0.440300 -vn 0.880600 0.175200 -0.440300 -vn 0.880600 -0.175200 -0.440300 -vn 0.746500 -0.498800 -0.440300 -vn 0.498800 -0.746500 -0.440300 -vn 0.175200 -0.880600 -0.440300 -vn -0.175200 -0.880600 -0.440300 -vn -0.498800 -0.746500 -0.440300 -vn -0.746500 -0.498800 -0.440300 -vn -0.880600 -0.175200 -0.440300 -vn -0.880600 0.175200 -0.440300 -vn -0.746500 0.498800 -0.440300 -vn -0.498800 0.746500 -0.440300 -vn -0.175200 0.880600 -0.440300 -vn -0.975700 -0.194100 0.101600 -vn -0.827200 -0.552700 0.101600 -vn -0.552700 -0.827200 0.101600 -vn -0.194100 -0.975700 0.101600 -vn -0.827200 0.552700 0.101600 -vn -0.552700 0.827200 0.101600 -vn 0.194100 -0.975700 0.101600 -vn 0.552700 -0.827200 0.101600 -vn 0.827200 -0.552700 0.101600 -vn 0.975700 -0.194100 0.101600 -vn 0.975700 0.194100 0.101600 -vn 0.827200 0.552700 0.101600 -vn 0.552700 0.827200 0.101600 -vn -0.194100 0.975700 0.101600 -vn 0.552700 -0.827200 -0.101600 -vn 0.194100 -0.975700 -0.101600 -vn -0.194100 -0.975700 -0.101600 -vn -0.552700 -0.827200 -0.101600 -vn 0.975700 -0.194100 -0.101600 -vn 0.975700 0.194100 -0.101600 -vn 0.827200 0.552700 -0.101600 -vn 0.552700 0.827200 -0.101600 -vn 0.194100 0.975700 -0.101600 -vn -0.194100 0.975700 -0.101600 -vn -0.552700 0.827200 -0.101600 -vn -0.827200 0.552700 -0.101600 -vn -0.975700 0.194100 -0.101600 -vn -0.975700 -0.194100 -0.101600 -vn 0.194100 0.975700 0.101600 -vn 0.827200 -0.552700 -0.101600 -vn -0.827200 -0.552700 -0.101600 -vn -0.975700 0.194100 0.101600 -s off -f 2/1/1 4/2/1 3/3/1 -f 4/2/2 6/4/2 5/5/2 -f 6/4/3 8/6/3 7/7/3 -f 7/7/4 8/6/4 10/8/4 -f 10/8/5 12/9/5 11/10/5 -f 12/9/6 14/11/6 13/12/6 -f 14/11/7 16/13/7 15/14/7 -f 16/13/8 18/15/8 17/16/8 -f 18/17/9 20/18/9 19/19/9 -f 20/18/10 22/20/10 21/21/10 -f 21/21/11 22/20/11 24/22/11 -f 23/23/12 24/22/12 26/24/12 -f 26/24/13 28/25/13 27/26/13 -f 28/25/14 30/27/14 29/28/14 -f 66/29/1 65/30/1 33/31/1 -f 32/32/15 2/1/15 1/33/15 -f 30/27/16 32/32/16 31/34/16 -f 66/35/1 98/36/1 97/37/1 -f 2/1/17 34/38/17 33/39/17 -f 35/40/17 34/41/17 2/1/17 -f 30/27/17 36/42/17 35/43/17 -f 37/44/17 36/45/17 30/27/17 -f 26/24/17 38/46/17 37/47/17 -f 39/48/17 38/49/17 26/24/17 -f 40/50/17 39/51/17 24/22/17 -f 41/52/17 40/53/17 22/20/17 -f 18/17/17 42/54/17 41/55/17 -f 43/56/17 42/57/17 18/15/17 -f 44/58/17 43/59/17 16/13/17 -f 45/60/17 44/61/17 14/11/17 -f 46/62/17 45/63/17 12/9/17 -f 8/6/17 47/64/17 46/65/17 -f 48/66/17 47/67/17 8/6/17 -f 33/68/17 48/69/17 6/4/17 -f 3/3/18 50/70/18 49/71/18 -f 51/72/18 50/73/18 3/3/18 -f 52/74/18 51/75/18 5/5/18 -f 53/76/18 52/77/18 7/7/18 -f 11/10/18 54/78/18 53/79/18 -f 55/80/18 54/81/18 11/10/18 -f 56/82/18 55/83/18 13/12/18 -f 57/84/18 56/85/18 15/14/18 -f 58/86/18 57/87/18 17/88/18 -f 59/89/18 58/90/18 19/19/18 -f 60/91/18 59/92/18 21/21/18 -f 25/93/18 61/94/18 60/95/18 -f 62/96/18 61/97/18 25/93/18 -f 63/98/18 62/99/18 27/26/18 -f 64/100/18 63/101/18 29/28/18 -f 1/33/18 49/102/18 64/103/18 -f 67/104/15 66/29/15 34/105/15 -f 68/106/16 67/104/16 35/107/16 -f 37/108/14 69/109/14 68/106/14 -f 38/110/13 70/111/13 69/109/13 -f 71/112/12 70/111/12 38/110/12 -f 40/113/11 72/114/11 71/112/11 -f 73/115/10 72/114/10 40/113/10 -f 74/116/9 73/115/9 41/117/9 -f 75/118/8 74/119/8 42/120/8 -f 76/121/7 75/118/7 43/122/7 -f 77/123/6 76/121/6 44/124/6 -f 78/125/5 77/123/5 45/126/5 -f 79/127/4 78/125/4 46/128/4 -f 80/129/3 79/127/3 47/130/3 -f 65/30/2 80/129/2 48/131/2 -f 82/132/1 81/133/1 49/134/1 -f 51/135/2 83/136/2 82/132/2 -f 84/137/3 83/136/3 51/135/3 -f 85/138/4 84/137/4 52/139/4 -f 86/140/5 85/138/5 53/141/5 -f 87/142/6 86/140/6 54/143/6 -f 88/144/7 87/142/7 55/145/7 -f 89/146/8 88/144/8 56/147/8 -f 58/148/9 90/149/9 89/150/9 -f 91/151/10 90/149/10 58/148/10 -f 60/152/11 92/153/11 91/151/11 -f 93/154/12 92/153/12 60/152/12 -f 94/155/13 93/154/13 61/156/13 -f 95/157/14 94/155/14 62/158/14 -f 96/159/16 95/157/16 63/160/16 -f 49/134/15 81/133/15 96/159/15 -f 67/161/15 99/162/15 98/36/15 -f 100/163/16 99/162/16 67/161/16 -f 69/164/14 101/165/14 100/163/14 -f 102/166/13 101/165/13 69/164/13 -f 102/167/17 295/168/17 103/169/17 -f 293/170/18 74/171/18 290/172/18 -f 73/173/18 74/171/18 293/170/18 -f 72/174/18 73/173/18 293/170/18 -f 71/175/18 72/174/18 293/170/18 -f 70/176/18 71/175/18 293/170/18 -f 110/177/19 296/178/19 290/179/19 -f 79/180/4 111/181/4 110/177/4 -f 112/182/3 111/181/3 79/180/3 -f 65/183/2 97/37/2 112/182/2 -f 114/184/1 113/185/1 81/186/1 -f 83/187/2 115/188/2 114/184/2 -f 116/189/3 115/188/3 83/187/3 -f 85/190/4 117/191/4 116/189/4 -f 89/192/17 90/193/17 291/194/17 -f 124/195/18 294/196/18 125/197/18 -f 120/198/18 292/199/18 121/200/18 -f 119/201/18 292/199/18 120/198/18 -f 118/202/18 292/199/18 119/201/18 -f 117/203/18 292/199/18 118/202/18 -f 292/204/20 289/205/20 291/206/20 -f 93/207/21 125/208/21 294/209/21 -f 126/210/13 125/208/13 93/207/13 -f 95/211/14 127/212/14 126/210/14 -f 128/213/16 127/212/16 95/211/16 -f 81/186/15 113/185/15 128/213/15 -f 130/214/22 129/215/22 97/216/22 -f 131/217/23 130/214/23 98/218/23 -f 132/219/24 131/217/24 99/220/24 -f 101/221/25 133/222/25 132/219/25 -f 134/223/26 133/222/26 101/221/26 -f 135/224/27 134/223/27 102/225/27 -f 104/226/28 136/227/28 135/224/28 -f 105/228/29 137/229/29 136/227/29 -f 138/230/30 137/229/30 105/228/30 -f 139/231/31 138/230/31 106/232/31 -f 108/233/32 140/234/32 139/231/32 -f 141/235/33 140/234/33 108/233/33 -f 142/236/34 141/235/34 109/237/34 -f 111/238/35 143/239/35 142/236/35 -f 144/240/36 143/239/36 111/238/36 -f 129/215/37 144/240/37 112/241/37 -f 146/242/38 145/243/38 113/244/38 -f 147/245/39 146/242/39 114/246/39 -f 148/247/40 147/245/40 115/248/40 -f 117/249/41 149/250/41 148/247/41 -f 118/251/42 150/252/42 149/250/42 -f 151/253/43 150/252/43 118/251/43 -f 120/254/44 152/255/44 151/253/44 -f 153/256/45 152/255/45 120/254/45 -f 154/257/46 153/258/46 121/259/46 -f 123/260/47 155/261/47 154/257/47 -f 124/262/48 156/263/48 155/261/48 -f 157/264/49 156/263/49 124/262/49 -f 158/265/50 157/264/50 125/266/50 -f 127/267/51 159/268/51 158/265/51 -f 160/269/52 159/268/52 127/267/52 -f 145/243/53 160/269/53 128/270/53 -f 162/271/54 161/272/54 362/273/54 -f 163/274/55 162/271/55 361/275/55 -f 164/276/56 163/274/56 363/277/56 -f 165/278/57 164/276/57 364/279/57 -f 366/280/58 166/281/58 165/282/58 -f 367/283/59 167/284/59 166/285/59 -f 368/286/60 168/287/60 167/288/60 -f 169/289/61 168/287/61 368/286/61 -f 170/290/62 169/289/62 369/291/62 -f 371/292/63 171/293/63 170/294/63 -f 372/295/64 172/296/64 171/293/64 -f 173/297/65 172/296/65 372/295/65 -f 174/298/66 173/299/66 373/300/66 -f 175/301/67 174/302/67 374/303/67 -f 376/304/68 176/305/68 175/306/68 -f 161/272/69 176/305/69 376/304/69 -f 329/307/70 178/308/70 177/309/70 -f 179/310/71 178/308/71 329/307/71 -f 180/311/72 179/310/72 331/312/72 -f 333/313/73 181/314/73 180/315/73 -f 182/316/74 181/317/74 333/318/74 -f 183/319/75 182/320/75 334/321/75 -f 336/322/76 184/323/76 183/319/76 -f 337/324/77 185/325/77 184/323/77 -f 186/326/78 185/327/78 337/328/78 -f 187/329/79 186/326/79 338/330/79 -f 340/331/80 188/332/80 187/329/80 -f 341/333/81 189/334/81 188/335/81 -f 190/336/82 189/337/82 341/338/82 -f 343/339/83 191/340/83 190/341/83 -f 344/342/84 192/343/84 191/340/84 -f 330/344/85 177/309/85 192/343/85 -f 226/345/86 258/346/86 257/347/86 -f 194/348/87 193/349/87 161/272/87 -f 195/350/88 194/351/88 162/271/88 -f 164/276/89 196/352/89 195/353/89 -f 197/354/90 196/355/90 164/276/90 -f 166/281/91 198/356/91 197/357/91 -f 167/284/92 199/358/92 198/359/92 -f 168/287/93 200/360/93 199/361/93 -f 169/289/94 201/362/94 200/363/94 -f 202/364/95 201/365/95 169/289/95 -f 171/293/96 203/366/96 202/367/96 -f 204/368/97 203/369/97 171/293/97 -f 205/370/98 204/371/98 172/296/98 -f 206/372/99 205/373/99 173/299/99 -f 207/374/100 206/375/100 174/302/100 -f 176/305/101 208/376/101 207/377/101 -f 193/378/102 208/379/102 176/305/102 -f 259/380/17 267/380/17 268/380/17 -f 210/381/103 209/382/103 177/309/103 -f 211/383/104 210/384/104 178/308/104 -f 212/385/105 211/386/105 179/310/105 -f 181/314/106 213/387/106 212/388/106 -f 214/389/107 213/390/107 181/317/107 -f 215/391/108 214/392/108 182/320/108 -f 216/393/109 215/394/109 183/319/109 -f 185/325/110 217/395/110 216/396/110 -f 218/397/111 217/398/111 185/327/111 -f 187/329/112 219/399/112 218/400/112 -f 188/332/113 220/401/113 219/402/113 -f 189/334/114 221/403/114 220/404/114 -f 222/405/115 221/406/115 189/337/115 -f 191/340/116 223/407/116 222/408/116 -f 192/343/117 224/409/117 223/410/117 -f 209/411/118 224/412/118 192/343/118 -f 194/348/17 226/413/17 225/414/17 -f 227/415/17 226/416/17 194/351/17 -f 196/352/17 228/417/17 227/418/17 -f 229/419/17 228/420/17 196/355/17 -f 230/421/17 229/422/17 197/357/17 -f 199/358/17 231/423/17 230/424/17 -f 232/425/17 231/426/17 199/361/17 -f 201/362/17 233/427/17 232/428/17 -f 234/429/17 233/430/17 201/365/17 -f 235/431/17 234/432/17 202/367/17 -f 236/433/17 235/434/17 203/369/17 -f 205/370/17 237/435/17 236/436/17 -f 206/372/17 238/437/17 237/438/17 -f 207/374/17 239/439/17 238/440/17 -f 240/441/17 239/442/17 207/377/17 -f 225/443/17 240/444/17 208/379/17 -f 242/445/18 241/446/18 209/382/18 -f 211/383/18 243/447/18 242/448/18 -f 244/449/18 243/450/18 211/386/18 -f 213/387/18 245/451/18 244/452/18 -f 246/453/18 245/454/18 213/390/18 -f 215/391/18 247/455/18 246/456/18 -f 248/457/18 247/458/18 215/394/18 -f 249/459/18 248/460/18 216/396/18 -f 218/397/18 250/461/18 249/462/18 -f 251/463/18 250/464/18 218/400/18 -f 252/465/18 251/466/18 219/402/18 -f 253/467/18 252/468/18 220/404/18 -f 254/469/18 253/470/18 221/406/18 -f 223/407/18 255/471/18 254/472/18 -f 256/473/18 255/474/18 223/410/18 -f 241/475/18 256/476/18 224/412/18 -f 230/477/119 231/478/119 257/479/119 -f 231/478/120 232/480/120 257/479/120 -f 232/480/121 233/481/121 257/479/121 -f 233/481/122 234/482/122 257/479/122 -f 228/483/123 229/484/123 258/346/123 -f 227/485/124 228/483/124 258/346/124 -f 234/486/125 235/487/125 257/347/125 -f 235/487/126 236/488/126 257/347/126 -f 236/488/127 237/489/127 257/347/127 -f 237/489/128 238/490/128 257/347/128 -f 238/490/129 239/491/129 257/347/129 -f 239/491/130 240/492/130 257/347/130 -f 225/493/131 257/347/131 240/492/131 -f 226/345/132 227/485/132 258/346/132 -f 273/494/17 274/494/17 282/494/17 -f 247/495/17 283/496/17 284/497/17 -f 247/495/133 248/498/133 283/496/133 -f 248/498/134 249/499/134 283/496/134 -f 249/500/135 250/501/135 283/502/135 -f 250/501/136 251/503/136 283/502/136 -f 245/504/137 246/505/137 284/497/137 -f 244/506/138 245/504/138 284/497/138 -f 243/507/139 244/506/139 284/497/139 -f 242/508/140 243/507/140 284/497/140 -f 241/509/141 242/508/141 284/497/141 -f 252/510/17 284/497/17 283/502/17 -f 256/511/142 241/509/142 284/497/142 -f 255/512/143 256/511/143 284/497/143 -f 254/513/144 255/512/144 284/497/144 -f 253/514/145 254/513/145 284/497/145 -f 252/510/146 253/514/146 284/497/146 -f 230/477/18 257/479/18 258/346/18 -f 292/199/18 294/196/18 121/200/18 -f 90/193/17 91/515/17 291/194/17 -f 123/516/18 294/196/18 124/195/18 -f 85/190/19 289/205/19 292/204/19 -f 91/515/17 92/517/17 291/194/17 -f 121/200/18 294/196/18 122/518/18 -f 93/519/17 291/194/17 92/517/17 -f 122/518/18 294/196/18 123/516/18 -f 85/520/17 86/521/17 289/522/17 -f 86/521/17 87/523/17 289/522/17 -f 87/523/17 88/524/17 289/522/17 -f 88/524/17 89/192/17 289/522/17 -f 289/522/17 89/192/17 291/194/17 -f 108/525/17 107/526/17 296/527/17 -f 109/528/17 108/525/17 296/527/17 -f 109/528/17 296/527/17 110/529/17 -f 102/166/21 70/530/21 293/531/21 -f 105/532/17 104/533/17 295/168/17 -f 106/534/17 105/532/17 295/168/17 -f 295/535/20 293/536/20 290/179/20 -f 104/533/17 103/169/17 295/168/17 -f 107/526/17 106/534/17 296/527/17 -f 295/168/17 296/527/17 106/534/17 -f 78/537/18 290/172/18 77/538/18 -f 77/538/18 290/172/18 76/539/18 -f 76/539/18 290/172/18 75/540/18 -f 75/540/18 290/172/18 74/171/18 -f 298/541/1 300/542/1 299/543/1 -f 300/542/2 302/544/2 301/545/2 -f 301/545/3 302/544/3 304/546/3 -f 303/547/4 304/546/4 306/548/4 -f 305/549/5 306/548/5 308/550/5 -f 308/550/6 310/551/6 309/552/6 -f 309/552/7 310/551/7 312/553/7 -f 312/553/8 314/554/8 313/555/8 -f 314/556/9 316/557/9 315/558/9 -f 316/557/10 318/559/10 317/560/10 -f 318/559/11 320/561/11 319/562/11 -f 320/561/12 322/563/12 321/564/12 -f 322/563/13 324/565/13 323/566/13 -f 324/565/14 326/567/14 325/568/14 -f 328/569/15 298/541/15 297/570/15 -f 326/567/16 328/569/16 327/571/16 -f 346/572/70 329/307/70 330/344/70 -f 331/312/71 329/307/71 346/572/71 -f 332/573/72 331/312/72 347/574/72 -f 335/575/75 334/321/75 350/576/75 -f 352/577/76 336/322/76 335/575/76 -f 337/324/77 336/322/77 352/577/77 -f 338/330/78 337/328/78 353/578/78 -f 339/579/79 338/330/79 354/580/79 -f 356/581/80 340/331/80 339/579/80 -f 359/582/83 343/339/83 342/583/83 -f 360/584/84 344/342/84 343/339/84 -f 345/585/85 330/344/85 344/342/85 -f 146/586/70 346/572/70 345/585/70 -f 347/574/71 346/572/71 146/586/71 -f 348/587/72 347/574/72 147/588/72 -f 149/589/73 349/590/73 348/587/73 -f 350/576/74 349/590/74 149/589/74 -f 351/591/75 350/576/75 150/592/75 -f 152/593/76 352/577/76 351/591/76 -f 353/594/77 352/577/77 152/593/77 -f 354/580/78 353/578/78 153/595/78 -f 355/596/79 354/580/79 154/597/79 -f 156/598/80 356/581/80 355/596/80 -f 157/599/81 357/600/81 356/581/81 -f 358/601/82 357/600/82 157/599/82 -f 159/602/83 359/582/83 358/601/83 -f 160/603/84 360/584/84 359/582/84 -f 145/604/85 345/585/85 360/584/85 -f 361/275/54 362/273/54 377/605/54 -f 363/277/55 361/275/55 378/606/55 -f 364/279/56 363/277/56 379/607/56 -f 365/608/57 364/279/57 380/609/57 -f 384/610/60 368/286/60 367/611/60 -f 369/291/61 368/286/61 384/610/61 -f 370/612/62 369/291/62 385/613/62 -f 387/614/63 371/292/63 370/615/63 -f 388/616/64 372/295/64 371/292/64 -f 373/617/65 372/295/65 388/616/65 -f 376/304/68 375/618/68 391/619/68 -f 362/273/69 376/304/69 392/620/69 -f 378/606/54 377/605/54 129/621/54 -f 379/607/55 378/606/55 130/622/55 -f 132/623/56 380/609/56 379/607/56 -f 133/624/57 381/625/57 380/609/57 -f 382/626/58 381/625/58 133/624/58 -f 135/627/59 383/628/59 382/626/59 -f 136/629/60 384/610/60 383/628/60 -f 385/613/61 384/610/61 136/629/61 -f 138/630/62 386/631/62 385/613/62 -f 139/632/63 387/614/63 386/633/63 -f 140/634/64 388/616/64 387/614/64 -f 389/635/65 388/616/65 140/634/65 -f 390/636/66 389/635/66 141/637/66 -f 143/638/67 391/619/67 390/636/67 -f 392/620/68 391/619/68 143/638/68 -f 377/605/69 392/620/69 144/639/69 -f 1/33/1 2/1/1 3/3/1 -f 3/3/2 4/2/2 5/5/2 -f 5/5/3 6/4/3 7/7/3 -f 9/640/4 7/7/4 10/8/4 -f 9/640/5 10/8/5 11/10/5 -f 11/10/6 12/9/6 13/12/6 -f 13/12/7 14/11/7 15/14/7 -f 15/14/8 16/13/8 17/16/8 -f 17/88/9 18/17/9 19/19/9 -f 19/19/10 20/18/10 21/21/10 -f 23/23/11 21/21/11 24/22/11 -f 25/93/12 23/23/12 26/24/12 -f 25/93/13 26/24/13 27/26/13 -f 27/26/14 28/25/14 29/28/14 -f 34/105/1 66/29/1 33/31/1 -f 31/34/15 32/32/15 1/33/15 -f 29/28/16 30/27/16 31/34/16 -f 65/183/1 66/35/1 97/37/1 -f 4/2/17 2/1/17 33/39/17 -f 32/32/17 35/40/17 2/1/17 -f 32/32/17 30/27/17 35/43/17 -f 28/25/17 37/44/17 30/27/17 -f 28/25/17 26/24/17 37/47/17 -f 24/22/17 39/48/17 26/24/17 -f 22/20/17 40/50/17 24/22/17 -f 20/18/17 41/52/17 22/20/17 -f 20/18/17 18/17/17 41/55/17 -f 16/13/17 43/56/17 18/15/17 -f 14/11/17 44/58/17 16/13/17 -f 12/9/17 45/60/17 14/11/17 -f 10/8/17 46/62/17 12/9/17 -f 10/8/17 8/6/17 46/65/17 -f 6/4/17 48/66/17 8/6/17 -f 4/2/17 33/68/17 6/4/17 -f 1/33/18 3/3/18 49/71/18 -f 5/5/18 51/72/18 3/3/18 -f 7/7/18 52/74/18 5/5/18 -f 9/640/18 53/76/18 7/7/18 -f 9/640/18 11/10/18 53/79/18 -f 13/12/18 55/80/18 11/10/18 -f 15/14/18 56/82/18 13/12/18 -f 17/16/18 57/84/18 15/14/18 -f 19/19/18 58/86/18 17/88/18 -f 21/21/18 59/89/18 19/19/18 -f 23/23/18 60/91/18 21/21/18 -f 23/23/18 25/93/18 60/95/18 -f 27/26/18 62/96/18 25/93/18 -f 29/28/18 63/98/18 27/26/18 -f 31/34/18 64/100/18 29/28/18 -f 31/34/18 1/33/18 64/103/18 -f 35/107/15 67/104/15 34/105/15 -f 36/641/16 68/106/16 35/107/16 -f 36/641/14 37/108/14 68/106/14 -f 37/108/13 38/110/13 69/109/13 -f 39/642/12 71/112/12 38/110/12 -f 39/642/11 40/113/11 71/112/11 -f 41/117/10 73/115/10 40/113/10 -f 42/643/9 74/116/9 41/117/9 -f 43/122/8 75/118/8 42/120/8 -f 44/124/7 76/121/7 43/122/7 -f 45/126/6 77/123/6 44/124/6 -f 46/128/5 78/125/5 45/126/5 -f 47/130/4 79/127/4 46/128/4 -f 48/131/3 80/129/3 47/130/3 -f 33/31/2 65/30/2 48/131/2 -f 50/644/1 82/132/1 49/134/1 -f 50/644/2 51/135/2 82/132/2 -f 52/139/3 84/137/3 51/135/3 -f 53/141/4 85/138/4 52/139/4 -f 54/143/5 86/140/5 53/141/5 -f 55/145/6 87/142/6 54/143/6 -f 56/147/7 88/144/7 55/145/7 -f 57/645/8 89/146/8 56/147/8 -f 57/646/9 58/148/9 89/150/9 -f 59/647/10 91/151/10 58/148/10 -f 59/647/11 60/152/11 91/151/11 -f 61/156/12 93/154/12 60/152/12 -f 62/158/13 94/155/13 61/156/13 -f 63/160/14 95/157/14 62/158/14 -f 64/648/16 96/159/16 63/160/16 -f 64/648/15 49/134/15 96/159/15 -f 66/35/15 67/161/15 98/36/15 -f 68/649/16 100/163/16 67/161/16 -f 68/649/14 69/164/14 100/163/14 -f 70/530/13 102/166/13 69/164/13 -f 78/650/19 110/177/19 290/179/19 -f 78/650/4 79/180/4 110/177/4 -f 80/651/3 112/182/3 79/180/3 -f 80/651/2 65/183/2 112/182/2 -f 82/652/1 114/184/1 81/186/1 -f 82/652/2 83/187/2 114/184/2 -f 84/653/3 116/189/3 83/187/3 -f 84/653/4 85/190/4 116/189/4 -f 294/654/20 292/204/20 291/206/20 -f 291/655/21 93/207/21 294/209/21 -f 94/656/13 126/210/13 93/207/13 -f 94/656/14 95/211/14 126/210/14 -f 96/657/16 128/213/16 95/211/16 -f 96/657/15 81/186/15 128/213/15 -f 98/218/22 130/214/22 97/216/22 -f 99/220/23 131/217/23 98/218/23 -f 100/658/24 132/219/24 99/220/24 -f 100/658/25 101/221/25 132/219/25 -f 102/225/26 134/223/26 101/221/26 -f 103/659/27 135/224/27 102/225/27 -f 103/659/28 104/226/28 135/224/28 -f 104/226/29 105/228/29 136/227/29 -f 106/232/30 138/230/30 105/228/30 -f 107/660/31 139/231/31 106/232/31 -f 107/660/32 108/233/32 139/231/32 -f 109/237/33 141/235/33 108/233/33 -f 110/661/34 142/236/34 109/237/34 -f 110/661/35 111/238/35 142/236/35 -f 112/241/36 144/240/36 111/238/36 -f 97/216/37 129/215/37 112/241/37 -f 114/246/38 146/242/38 113/244/38 -f 115/248/39 147/245/39 114/246/39 -f 116/662/40 148/247/40 115/248/40 -f 116/662/41 117/249/41 148/247/41 -f 117/249/42 118/251/42 149/250/42 -f 119/663/43 151/253/43 118/251/43 -f 119/663/44 120/254/44 151/253/44 -f 121/664/45 153/256/45 120/254/45 -f 122/665/46 154/257/46 121/259/46 -f 122/665/47 123/260/47 154/257/47 -f 123/260/48 124/262/48 155/261/48 -f 125/266/49 157/264/49 124/262/49 -f 126/666/50 158/265/50 125/266/50 -f 126/666/51 127/267/51 158/265/51 -f 128/270/52 160/269/52 127/267/52 -f 113/244/53 145/243/53 128/270/53 -f 361/275/54 162/271/54 362/273/54 -f 363/277/55 163/274/55 361/275/55 -f 364/279/56 164/276/56 363/277/56 -f 365/608/57 165/278/57 364/279/57 -f 365/667/58 366/280/58 165/282/58 -f 366/668/59 367/283/59 166/285/59 -f 367/611/60 368/286/60 167/288/60 -f 369/291/61 169/289/61 368/286/61 -f 370/612/62 170/290/62 369/291/62 -f 370/615/63 371/292/63 170/294/63 -f 371/292/64 372/295/64 171/293/64 -f 373/617/65 173/297/65 372/295/65 -f 374/669/66 174/298/66 373/300/66 -f 375/670/67 175/301/67 374/303/67 -f 375/618/68 376/304/68 175/306/68 -f 362/273/69 161/272/69 376/304/69 -f 330/344/70 329/307/70 177/309/70 -f 331/312/71 179/310/71 329/307/71 -f 332/573/72 180/311/72 331/312/72 -f 332/671/73 333/313/73 180/315/73 -f 334/672/74 182/316/74 333/318/74 -f 335/575/75 183/319/75 334/321/75 -f 335/575/76 336/322/76 183/319/76 -f 336/322/77 337/324/77 184/323/77 -f 338/330/78 186/326/78 337/328/78 -f 339/579/79 187/329/79 338/330/79 -f 339/579/80 340/331/80 187/329/80 -f 340/673/81 341/333/81 188/335/81 -f 342/674/82 190/336/82 341/338/82 -f 342/583/83 343/339/83 190/341/83 -f 343/339/84 344/342/84 191/340/84 -f 344/342/85 330/344/85 192/343/85 -f 225/493/147 226/345/147 257/347/147 -f 162/271/87 194/348/87 161/272/87 -f 163/274/88 195/350/88 162/271/88 -f 163/274/89 164/276/89 195/353/89 -f 165/278/90 197/354/90 164/276/90 -f 165/282/91 166/281/91 197/357/91 -f 166/285/92 167/284/92 198/359/92 -f 167/288/93 168/287/93 199/361/93 -f 168/287/94 169/289/94 200/363/94 -f 170/290/95 202/364/95 169/289/95 -f 170/294/96 171/293/96 202/367/96 -f 172/296/97 204/368/97 171/293/97 -f 173/297/98 205/370/98 172/296/98 -f 174/298/99 206/372/99 173/299/99 -f 175/301/100 207/374/100 174/302/100 -f 175/306/101 176/305/101 207/377/101 -f 161/272/102 193/378/102 176/305/102 -f 259/380/17 260/380/17 261/380/17 -f 259/380/17 261/380/17 262/380/17 -f 257/380/17 258/380/17 259/380/17 -f 259/380/17 262/380/17 263/380/17 -f 272/380/17 257/380/17 259/380/17 -f 259/380/17 263/380/17 264/380/17 -f 271/675/17 272/380/17 259/380/17 -f 259/380/17 264/380/17 265/380/17 -f 270/380/17 271/675/17 259/380/17 -f 259/380/17 265/380/17 266/380/17 -f 269/380/17 270/380/17 259/380/17 -f 259/380/17 266/380/17 267/380/17 -f 268/380/17 269/380/17 259/380/17 -f 178/308/103 210/381/103 177/309/103 -f 179/310/104 211/383/104 178/308/104 -f 180/311/105 212/385/105 179/310/105 -f 180/315/106 181/314/106 212/388/106 -f 182/316/107 214/389/107 181/317/107 -f 183/319/108 215/391/108 182/320/108 -f 184/323/109 216/393/109 183/319/109 -f 184/323/110 185/325/110 216/396/110 -f 186/326/111 218/397/111 185/327/111 -f 186/326/112 187/329/112 218/400/112 -f 187/329/113 188/332/113 219/402/113 -f 188/335/114 189/334/114 220/404/114 -f 190/336/115 222/405/115 189/337/115 -f 190/341/116 191/340/116 222/408/116 -f 191/340/117 192/343/117 223/410/117 -f 177/309/118 209/411/118 192/343/118 -f 193/349/17 194/348/17 225/414/17 -f 195/350/17 227/415/17 194/351/17 -f 195/353/17 196/352/17 227/418/17 -f 197/354/17 229/419/17 196/355/17 -f 198/356/17 230/421/17 197/357/17 -f 198/359/17 199/358/17 230/424/17 -f 200/360/17 232/425/17 199/361/17 -f 200/363/17 201/362/17 232/428/17 -f 202/364/17 234/429/17 201/365/17 -f 203/366/17 235/431/17 202/367/17 -f 204/368/17 236/433/17 203/369/17 -f 204/371/17 205/370/17 236/436/17 -f 205/373/17 206/372/17 237/438/17 -f 206/375/17 207/374/17 238/440/17 -f 208/376/17 240/441/17 207/377/17 -f 193/378/17 225/443/17 208/379/17 -f 210/381/18 242/445/18 209/382/18 -f 210/384/18 211/383/18 242/448/18 -f 212/385/18 244/449/18 211/386/18 -f 212/388/18 213/387/18 244/452/18 -f 214/389/18 246/453/18 213/390/18 -f 214/392/18 215/391/18 246/456/18 -f 216/393/18 248/457/18 215/394/18 -f 217/395/18 249/459/18 216/396/18 -f 217/398/18 218/397/18 249/462/18 -f 219/399/18 251/463/18 218/400/18 -f 220/401/18 252/465/18 219/402/18 -f 221/403/18 253/467/18 220/404/18 -f 222/405/18 254/469/18 221/406/18 -f 222/408/18 223/407/18 254/472/18 -f 224/409/18 256/473/18 223/410/18 -f 209/411/18 241/475/18 224/412/18 -f 280/494/17 281/494/17 282/494/17 -f 285/494/17 286/676/17 287/494/17 -f 275/494/17 276/494/17 277/494/17 -f 284/494/17 285/494/17 287/494/17 -f 275/494/17 277/494/17 278/494/17 -f 283/494/17 284/494/17 287/494/17 -f 275/494/17 278/494/17 279/494/17 -f 282/494/17 283/494/17 287/494/17 -f 279/494/17 280/494/17 282/494/17 -f 282/494/17 287/494/17 288/494/17 -f 275/494/17 279/494/17 282/494/17 -f 282/494/17 288/494/17 273/494/17 -f 274/494/17 275/494/17 282/494/17 -f 246/505/148 247/495/148 284/497/148 -f 251/503/149 252/510/149 283/502/149 -f 229/484/150 230/477/150 258/346/150 -f 117/191/19 85/190/19 292/204/19 -f 295/677/21 102/166/21 293/531/21 -f 296/178/20 295/535/20 290/179/20 -f 297/570/1 298/541/1 299/543/1 -f 299/543/2 300/542/2 301/545/2 -f 303/547/3 301/545/3 304/546/3 -f 305/549/4 303/547/4 306/548/4 -f 307/678/5 305/549/5 308/550/5 -f 307/678/6 308/550/6 309/552/6 -f 311/679/7 309/552/7 312/553/7 -f 311/679/8 312/553/8 313/555/8 -f 313/680/9 314/556/9 315/558/9 -f 315/558/10 316/557/10 317/560/10 -f 317/560/11 318/559/11 319/562/11 -f 319/562/12 320/561/12 321/564/12 -f 321/564/13 322/563/13 323/566/13 -f 323/566/14 324/565/14 325/568/14 -f 327/571/15 328/569/15 297/570/15 -f 325/568/16 326/567/16 327/571/16 -f 345/585/70 346/572/70 330/344/70 -f 347/574/71 331/312/71 346/572/71 -f 348/587/72 332/573/72 347/574/72 -f 351/591/75 335/575/75 350/576/75 -f 351/591/76 352/577/76 335/575/76 -f 353/594/77 337/324/77 352/577/77 -f 354/580/78 338/330/78 353/578/78 -f 355/596/79 339/579/79 354/580/79 -f 355/596/80 356/581/80 339/579/80 -f 358/601/83 359/582/83 342/583/83 -f 359/582/84 360/584/84 343/339/84 -f 360/584/85 345/585/85 344/342/85 -f 145/604/70 146/586/70 345/585/70 -f 147/588/71 347/574/71 146/586/71 -f 148/681/72 348/587/72 147/588/72 -f 148/681/73 149/589/73 348/587/73 -f 150/592/74 350/576/74 149/589/74 -f 151/682/75 351/591/75 150/592/75 -f 151/682/76 152/593/76 351/591/76 -f 153/683/77 353/594/77 152/593/77 -f 154/597/78 354/580/78 153/595/78 -f 155/684/79 355/596/79 154/597/79 -f 155/684/80 156/598/80 355/596/80 -f 156/598/81 157/599/81 356/581/81 -f 158/685/82 358/601/82 157/599/82 -f 158/685/83 159/602/83 358/601/83 -f 159/602/84 160/603/84 359/582/84 -f 160/603/85 145/604/85 360/584/85 -f 378/606/54 361/275/54 377/605/54 -f 379/607/55 363/277/55 378/606/55 -f 380/609/56 364/279/56 379/607/56 -f 381/625/57 365/608/57 380/609/57 -f 383/628/60 384/610/60 367/611/60 -f 385/613/61 369/291/61 384/610/61 -f 386/631/62 370/612/62 385/613/62 -f 386/633/63 387/614/63 370/615/63 -f 387/614/64 388/616/64 371/292/64 -f 389/635/65 373/617/65 388/616/65 -f 392/620/68 376/304/68 391/619/68 -f 377/605/69 362/273/69 392/620/69 -f 130/622/54 378/606/54 129/621/54 -f 131/686/55 379/607/55 130/622/55 -f 131/686/56 132/623/56 379/607/56 -f 132/623/57 133/624/57 380/609/57 -f 134/687/58 382/626/58 133/624/58 -f 134/687/59 135/627/59 382/626/59 -f 135/627/60 136/629/60 383/628/60 -f 137/688/61 385/613/61 136/629/61 -f 137/688/62 138/630/62 385/613/62 -f 138/689/63 139/632/63 386/633/63 -f 139/632/64 140/634/64 387/614/64 -f 141/637/65 389/635/65 140/634/65 -f 142/690/66 390/636/66 141/637/66 -f 142/690/67 143/638/67 390/636/67 -f 144/639/68 392/620/68 143/638/68 -f 129/621/69 377/605/69 144/639/69 diff --git a/src/main/resources/assets/hbm/models/bombs/Prototype.obj b/src/main/resources/assets/hbm/models/bombs/Prototype.obj new file mode 100644 index 000000000..54f1186bc --- /dev/null +++ b/src/main/resources/assets/hbm/models/bombs/Prototype.obj @@ -0,0 +1,1639 @@ +# Blender 4.0.2 +# www.blender.org +mtllib Prototype.mtl +o Cylinder.001 +v 0.000001 1.000000 2.500000 +v -0.000001 1.000000 -2.500000 +v -0.218749 0.941386 2.500000 +v -0.218751 0.941386 -2.500000 +v -0.378885 0.781250 2.500000 +v -0.378887 0.781250 -2.500000 +v -0.437499 0.562500 2.500000 +v -0.437501 0.562500 -2.500000 +v -0.378885 0.343750 2.500000 +v -0.378887 0.343750 -2.500000 +v -0.218749 0.183614 2.500000 +v -0.218751 0.183614 -2.500000 +v 0.000001 0.125000 2.500000 +v -0.000001 0.125000 -2.500000 +v 0.218751 0.183614 2.500000 +v 0.218749 0.183614 -2.500000 +v 0.378887 0.343750 2.500000 +v 0.378885 0.343750 -2.500000 +v 0.437501 0.562500 2.500000 +v 0.437499 0.562500 -2.500000 +v 0.378887 0.781250 2.500000 +v 0.378885 0.781250 -2.500000 +v 0.218751 0.941386 2.500000 +v 0.218749 0.941386 -2.500000 +v -0.125001 0.779006 -2.812500 +v -0.000001 0.812500 -2.812500 +v -0.216507 0.687500 -2.812500 +v -0.250001 0.562500 -2.812500 +v -0.216507 0.437500 -2.812500 +v -0.125001 0.345994 -2.812500 +v -0.000001 0.312500 -2.812500 +v 0.124999 0.345994 -2.812500 +v 0.216505 0.437500 -2.812500 +v 0.249999 0.562500 -2.812500 +v 0.216505 0.687500 -2.812500 +v 0.124999 0.779006 -2.812500 +v 0.000001 0.812500 2.812500 +v -0.124999 0.779006 2.812500 +v -0.216505 0.687500 2.812500 +v -0.249999 0.562500 2.812500 +v -0.216505 0.437500 2.812500 +v -0.124999 0.345994 2.812500 +v 0.000001 0.312500 2.812500 +v 0.125001 0.345994 2.812500 +v 0.216507 0.437500 2.812500 +v 0.250001 0.562500 2.812500 +v 0.216507 0.687500 2.812500 +v 0.125001 0.779006 2.812500 +v -0.061399 0.668844 -3.500000 +v -0.099888 0.735509 -3.438635 +v -0.000001 0.762273 -3.438635 +v -0.000001 0.685295 -3.500000 +v -0.106345 0.623898 -3.500000 +v -0.173010 0.662387 -3.438635 +v -0.122797 0.562500 -3.500000 +v -0.199774 0.562500 -3.438635 +v -0.106345 0.501102 -3.500000 +v -0.173010 0.462613 -3.438635 +v -0.061399 0.456156 -3.500000 +v -0.099888 0.389491 -3.438635 +v -0.000001 0.439705 -3.500000 +v -0.000001 0.362727 -3.438635 +v 0.061396 0.456156 -3.500000 +v 0.099885 0.389491 -3.438635 +v 0.106342 0.501102 -3.500000 +v 0.173007 0.462613 -3.438635 +v 0.122794 0.562500 -3.500000 +v 0.199772 0.562500 -3.438635 +v 0.106342 0.623897 -3.500000 +v 0.173007 0.662386 -3.438635 +v 0.061396 0.668844 -3.500000 +v 0.099885 0.735508 -3.438635 +v 0.000001 0.685295 3.500000 +v 0.000001 0.762273 3.438635 +v -0.099885 0.735509 3.438635 +v -0.061396 0.668844 3.500000 +v -0.173007 0.662387 3.438635 +v -0.106343 0.623898 3.500000 +v -0.199772 0.562500 3.438635 +v -0.122794 0.562500 3.500000 +v -0.173007 0.462614 3.438635 +v -0.106343 0.501103 3.500000 +v -0.099885 0.389492 3.438635 +v -0.061396 0.456156 3.500000 +v 0.000001 0.362727 3.438635 +v 0.000001 0.439705 3.500000 +v 0.099888 0.389491 3.438635 +v 0.061399 0.456156 3.500000 +v 0.173010 0.462613 3.438635 +v 0.106345 0.501102 3.500000 +v 0.199774 0.562500 3.438635 +v 0.122796 0.562500 3.500000 +v 0.173010 0.662387 3.438635 +v 0.106345 0.623898 3.500000 +v 0.099888 0.735509 3.438635 +v 0.061399 0.668844 3.500000 +v 0.000000 1.000000 0.125000 +v 0.000000 1.000000 -0.125000 +v -0.218750 0.941386 0.125000 +v -0.218750 0.941386 -0.125000 +v -0.378886 0.781250 0.125000 +v -0.378886 0.781250 -0.125000 +v -0.437500 0.562500 0.125000 +v -0.437500 0.562500 -0.125000 +v -0.378886 0.343750 0.125000 +v -0.378886 0.343750 -0.125000 +v -0.218750 0.183614 0.125000 +v -0.218750 0.183614 -0.125000 +v -0.000000 0.125000 0.125000 +v -0.000000 0.125000 -0.125000 +v 0.218750 0.183614 0.125000 +v 0.218750 0.183614 -0.125000 +v 0.378886 0.343750 0.125000 +v 0.378886 0.343750 -0.125000 +v 0.437500 0.562500 0.125000 +v 0.437500 0.562500 -0.125000 +v 0.378886 0.781250 0.125000 +v 0.378886 0.781250 -0.125000 +v 0.218750 0.941386 0.125000 +v 0.218750 0.941386 -0.125000 +v 0.000000 1.062500 0.125000 +v -0.250000 0.995513 0.125000 +v -0.250000 0.995513 -0.125000 +v 0.000000 1.062500 -0.125000 +v -0.433013 0.812500 0.125000 +v -0.433013 0.812500 -0.125000 +v -0.500000 0.562500 0.125000 +v -0.500000 0.562500 -0.125000 +v -0.433013 0.312500 0.125000 +v -0.433013 0.312500 -0.125000 +v -0.250000 0.129487 0.125000 +v -0.250000 0.129487 -0.125000 +v -0.000000 0.062500 0.125000 +v -0.000000 0.062500 -0.125000 +v 0.250000 0.129487 0.125000 +v 0.250000 0.129487 -0.125000 +v 0.433013 0.312500 0.125000 +v 0.433013 0.312500 -0.125000 +v 0.500000 0.562500 0.125000 +v 0.500000 0.562500 -0.125000 +v 0.433013 0.812500 0.125000 +v 0.433013 0.812500 -0.125000 +v 0.250000 0.995513 0.125000 +v 0.250000 0.995513 -0.125000 +v 0.000001 1.000000 2.500000 +v 0.000001 1.000000 2.312500 +v -0.218749 0.941386 2.500000 +v -0.218749 0.941386 2.312500 +v -0.378885 0.781250 2.500000 +v -0.378885 0.781250 2.312500 +v -0.437499 0.562500 2.500000 +v -0.437499 0.562500 2.312500 +v -0.378885 0.343750 2.500000 +v -0.378885 0.343750 2.312500 +v -0.218749 0.183614 2.500000 +v -0.218749 0.183614 2.312500 +v 0.000001 0.125000 2.500000 +v 0.000001 0.125000 2.312500 +v 0.218751 0.183614 2.500000 +v 0.218751 0.183614 2.312500 +v 0.378887 0.343750 2.500000 +v 0.378887 0.343750 2.312500 +v 0.437501 0.562500 2.500000 +v 0.437501 0.562500 2.312500 +v 0.378887 0.781250 2.500000 +v 0.378887 0.781250 2.312500 +v 0.218751 0.941386 2.500000 +v 0.218751 0.941386 2.312500 +v 0.000001 1.062500 2.500000 +v -0.249999 0.995513 2.500000 +v -0.249999 0.995513 2.312500 +v 0.000001 1.062500 2.312500 +v -0.433012 0.812500 2.500000 +v -0.433012 0.812500 2.312500 +v -0.499999 0.562500 2.500000 +v -0.499999 0.562500 2.312500 +v -0.433012 0.312500 2.500000 +v -0.433012 0.312500 2.312500 +v -0.249999 0.129487 2.500000 +v -0.249999 0.129487 2.312500 +v 0.000001 0.062500 2.500000 +v 0.000001 0.062500 2.312500 +v 0.250001 0.129487 2.500000 +v 0.250001 0.129487 2.312500 +v 0.433014 0.312500 2.500000 +v 0.433013 0.312500 2.312500 +v 0.500001 0.562500 2.500000 +v 0.500001 0.562500 2.312500 +v 0.433014 0.812500 2.500000 +v 0.433014 0.812500 2.312500 +v 0.250001 0.995513 2.500000 +v 0.250001 0.995513 2.312500 +v -0.375652 0.054267 -2.343750 +v -0.331457 0.098461 -2.343750 +v -0.375650 0.054267 2.343750 +v -0.331456 0.098461 2.343750 +v -0.508234 0.186850 -2.343750 +v -0.464040 0.231044 -2.343750 +v -0.508232 0.186850 2.343750 +v -0.464038 0.231044 2.343750 +v -0.375651 0.142655 -1.281250 +v -0.243069 0.275238 -1.281250 +v -0.375651 0.142655 -1.156250 +v -0.243069 0.275238 -1.156250 +v -0.419845 0.186850 -1.281250 +v -0.287263 0.319432 -1.281250 +v -0.419845 0.186850 -1.156250 +v -0.287263 0.319432 -1.156250 +v -0.375651 0.142655 -0.062500 +v -0.243068 0.275238 -0.062500 +v -0.375651 0.142655 0.062500 +v -0.243068 0.275238 0.062500 +v -0.419845 0.186850 -0.062500 +v -0.287262 0.319432 -0.062500 +v -0.419845 0.186850 0.062500 +v -0.287262 0.319432 0.062500 +v -0.375650 0.142655 1.156250 +v -0.243068 0.275238 1.156250 +v -0.375650 0.142655 1.281250 +v -0.243068 0.275238 1.281250 +v -0.419844 0.186850 1.156250 +v -0.287262 0.319432 1.156250 +v -0.419844 0.186850 1.281250 +v -0.287262 0.319432 1.281250 +v 0.624999 -0.000000 -2.468750 +v 0.437499 0.500000 -2.468750 +v 0.624999 -0.000000 -2.343750 +v 0.437499 0.500000 -2.343750 +v -0.625001 0.000000 -2.468750 +v -0.437501 0.500000 -2.468750 +v -0.625001 0.000000 -2.343750 +v -0.437501 0.500000 -2.343750 +v -0.000001 1.000000 -2.300000 +v -0.000001 1.000000 -2.487500 +v -0.218751 0.941386 -2.300000 +v -0.218751 0.941386 -2.487500 +v -0.378887 0.781250 -2.300000 +v -0.378887 0.781250 -2.487500 +v -0.437501 0.562500 -2.300000 +v -0.437501 0.562500 -2.487500 +v -0.378887 0.343750 -2.300000 +v -0.378887 0.343750 -2.487500 +v -0.218751 0.183614 -2.300000 +v -0.218751 0.183614 -2.487500 +v -0.000001 0.125000 -2.300000 +v -0.000001 0.125000 -2.487500 +v 0.218749 0.183614 -2.300000 +v 0.218749 0.183614 -2.487500 +v 0.378885 0.343750 -2.300000 +v 0.378885 0.343750 -2.487500 +v 0.437499 0.562500 -2.300000 +v 0.437499 0.562500 -2.487500 +v 0.378885 0.781250 -2.300000 +v 0.378885 0.781250 -2.487500 +v 0.218749 0.941386 -2.300000 +v 0.218749 0.941386 -2.487500 +v -0.000001 1.062500 -2.300000 +v -0.250001 0.995513 -2.300000 +v -0.250001 0.995513 -2.487500 +v -0.000001 1.062500 -2.487500 +v -0.433013 0.812500 -2.300000 +v -0.433014 0.812500 -2.487500 +v -0.500001 0.562500 -2.300000 +v -0.500001 0.562500 -2.487500 +v -0.433014 0.312500 -2.300000 +v -0.433014 0.312500 -2.487500 +v -0.250001 0.129487 -2.300000 +v -0.250001 0.129487 -2.487500 +v -0.000001 0.062500 -2.300000 +v -0.000001 0.062500 -2.487500 +v 0.249999 0.129487 -2.300000 +v 0.249999 0.129487 -2.487500 +v 0.433012 0.312500 -2.300000 +v 0.433012 0.312500 -2.487500 +v 0.499999 0.562500 -2.300000 +v 0.499999 0.562500 -2.487500 +v 0.433012 0.812500 -2.300000 +v 0.433012 0.812500 -2.487500 +v 0.249999 0.995513 -2.300000 +v 0.249999 0.995513 -2.487500 +v 0.625001 -0.000000 2.343750 +v 0.437501 0.500000 2.343750 +v 0.625001 -0.000000 2.468750 +v 0.437501 0.500000 2.468750 +v -0.624999 0.000000 2.343750 +v -0.437499 0.500000 2.343750 +v -0.624999 0.000000 2.468750 +v -0.437499 0.500000 2.468750 +v 0.508232 0.186849 -2.343750 +v 0.464038 0.231044 -2.343750 +v 0.508234 0.186849 2.343750 +v 0.464040 0.231044 2.343750 +v 0.375649 0.054267 -2.343750 +v 0.331455 0.098461 -2.343750 +v 0.375651 0.054267 2.343750 +v 0.331457 0.098461 2.343750 +v 0.419844 0.186849 -1.281250 +v 0.287262 0.319432 -1.281250 +v 0.419844 0.186849 -1.156250 +v 0.287262 0.319432 -1.156250 +v 0.375650 0.142655 -1.281250 +v 0.243067 0.275238 -1.281250 +v 0.375650 0.142655 -1.156250 +v 0.243067 0.275238 -1.156250 +v 0.419845 0.186849 -0.062500 +v 0.287262 0.319432 -0.062500 +v 0.419845 0.186849 0.062500 +v 0.287262 0.319432 0.062500 +v 0.375650 0.142655 -0.062500 +v 0.243068 0.275238 -0.062500 +v 0.375650 0.142655 0.062500 +v 0.243068 0.275238 0.062500 +v 0.419845 0.186849 1.156250 +v 0.287263 0.319432 1.156250 +v 0.419845 0.186849 1.281250 +v 0.287263 0.319432 1.281250 +v 0.375651 0.142655 1.156250 +v 0.243068 0.275238 1.156250 +v 0.375651 0.142655 1.281250 +v 0.243068 0.275238 1.281250 +vn -0.0000 1.0000 -0.0000 +vn -0.5000 0.8660 -0.0000 +vn -0.8660 0.5000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.8660 -0.5000 -0.0000 +vn -0.5000 -0.8660 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.5000 -0.8660 -0.0000 +vn 0.8660 -0.5000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn 0.8660 0.5000 -0.0000 +vn -0.7426 0.4287 -0.5145 +vn -0.8575 -0.0000 -0.5145 +vn 0.5000 0.8660 -0.0000 +vn 0.7426 0.4287 0.5145 +vn 0.8575 -0.0000 0.5145 +vn -0.9968 -0.0000 -0.0800 +vn -0.8633 -0.4984 -0.0800 +vn 0.7426 0.4287 -0.5145 +vn 0.4287 0.7426 -0.5145 +vn -0.4287 0.7426 -0.5145 +vn 0.8575 -0.0000 -0.5145 +vn 0.7426 -0.4287 -0.5145 +vn 0.4287 -0.7426 -0.5145 +vn -0.0000 -0.8575 -0.5145 +vn -0.4287 -0.7426 -0.5145 +vn -0.7426 -0.4287 -0.5145 +vn -0.0000 0.8575 -0.5145 +vn 0.9968 -0.0000 0.0800 +vn 0.8633 -0.4984 0.0800 +vn 0.7426 -0.4287 0.5145 +vn 0.4287 -0.7426 0.5145 +vn -0.0000 -0.8575 0.5145 +vn -0.4287 -0.7426 0.5145 +vn -0.7426 -0.4287 0.5145 +vn -0.8575 -0.0000 0.5145 +vn -0.0000 0.8575 0.5145 +vn 0.4287 0.7426 0.5145 +vn -0.4287 0.7426 0.5145 +vn -0.7426 0.4287 0.5145 +vn -0.4984 0.8633 -0.0800 +vn -0.8633 0.4984 -0.0800 +vn 0.4984 0.8633 -0.0800 +vn 0.8633 0.4984 -0.0800 +vn 0.4984 -0.8633 -0.0800 +vn 0.8633 -0.4984 -0.0800 +vn -0.4984 -0.8633 -0.0800 +vn -0.0000 -0.0000 -1.0000 +vn 0.9968 -0.0000 -0.0800 +vn -0.0000 -0.9968 -0.0800 +vn -0.0000 0.9968 -0.0800 +vn -0.0000 0.9968 0.0800 +vn 0.4984 0.8633 0.0800 +vn -0.4984 -0.8633 0.0800 +vn -0.0000 -0.9968 0.0800 +vn -0.8633 0.4984 0.0800 +vn -0.4984 0.8633 0.0800 +vn -0.9968 -0.0000 0.0800 +vn 0.8633 0.4984 0.0800 +vn 0.4984 -0.8633 0.0800 +vn -0.8633 -0.4984 0.0800 +vn -0.0000 -0.0000 1.0000 +vn -0.3117 0.5398 -0.7819 +vn -0.0000 0.6234 -0.7819 +vn -0.5398 0.3117 -0.7819 +vn -0.6234 -0.0000 -0.7819 +vn -0.5398 -0.3117 -0.7819 +vn -0.3117 -0.5398 -0.7819 +vn -0.0000 -0.6234 -0.7819 +vn 0.3117 -0.5398 -0.7819 +vn 0.5398 -0.3117 -0.7819 +vn 0.6233 -0.0000 -0.7819 +vn 0.6234 -0.0000 -0.7819 +vn 0.5398 0.3117 -0.7819 +vn 0.3117 0.5398 -0.7819 +vn -0.3117 0.5398 0.7819 +vn -0.0000 0.6234 0.7819 +vn -0.5398 0.3117 0.7819 +vn -0.6234 -0.0000 0.7819 +vn -0.5398 -0.3117 0.7819 +vn -0.6233 -0.0000 0.7819 +vn -0.3117 -0.5398 0.7819 +vn -0.0000 -0.6234 0.7819 +vn 0.3117 -0.5398 0.7819 +vn 0.5398 -0.3117 0.7819 +vn 0.6233 -0.0000 0.7819 +vn 0.5398 0.3117 0.7819 +vn 0.6234 -0.0000 0.7819 +vn 0.3117 0.5398 0.7819 +vn 0.7071 -0.7071 -0.0000 +vn -0.7071 0.7071 -0.0000 +vn -0.7071 -0.7071 -0.0000 +vn 0.7071 0.7071 -0.0000 +vn 0.9363 0.3511 -0.0000 +vn -0.9363 0.3511 -0.0000 +vt 0.673611 0.833333 +vt 0.118056 0.861111 +vt 0.118056 0.833333 +vt 0.673611 0.861111 +vt 0.118056 0.888889 +vt 0.673611 0.888889 +vt 0.118056 0.916667 +vt 0.673611 0.916667 +vt 0.118056 0.944444 +vt 0.673611 0.972222 +vt 0.118056 0.972222 +vt 0.118056 1.000000 +vt 0.673611 0.666667 +vt 0.118056 0.694444 +vt 0.118056 0.666667 +vt 0.673611 0.694444 +vt 0.118056 0.722222 +vt 0.673611 0.722222 +vt 0.118056 0.750000 +vt 0.673611 0.750000 +vt 0.118056 0.777778 +vt 0.673611 0.888889 +vt 0.715278 0.910714 +vt 0.673611 0.916667 +vt 0.673611 0.777778 +vt 0.118056 0.805556 +vt 0.673611 0.805556 +vt 0.076389 0.755953 +vt 0.118056 0.750000 +vt 0.715278 0.922619 +vt 0.784722 0.936898 +vt 0.715278 0.938492 +vt 0.673611 0.777778 +vt 0.715278 0.799603 +vt 0.673611 0.861111 +vt 0.715278 0.882937 +vt 0.673611 0.888889 +vt 0.673611 0.750000 +vt 0.715278 0.771825 +vt 0.673611 0.722222 +vt 0.715278 0.744048 +vt 0.673611 0.694444 +vt 0.715278 0.716270 +vt 0.715278 0.688492 +vt 0.673611 0.972222 +vt 0.715278 0.994048 +vt 0.673611 1.000000 +vt 0.673611 0.944445 +vt 0.715278 0.966270 +vt 0.673611 0.972222 +vt 0.673611 0.916667 +vt 0.673611 0.944445 +vt 0.673611 0.805556 +vt 0.715278 0.827381 +vt 0.673611 0.833333 +vt 0.673611 0.833333 +vt 0.715278 0.855159 +vt 0.673611 0.861111 +vt 0.076389 0.744047 +vt 0.006944 0.729769 +vt 0.076389 0.728175 +vt 0.076389 0.728175 +vt 0.118056 0.722222 +vt 0.076389 0.700397 +vt 0.118056 0.694444 +vt 0.076389 0.672619 +vt 0.118056 1.000000 +vt 0.076389 0.978175 +vt 0.118056 0.972222 +vt 0.118056 0.972222 +vt 0.076389 0.950397 +vt 0.118056 0.944445 +vt 0.118056 0.944445 +vt 0.076389 0.922620 +vt 0.118056 0.916667 +vt 0.118056 0.833333 +vt 0.076389 0.811508 +vt 0.118056 0.805556 +vt 0.118056 0.861111 +vt 0.076389 0.839286 +vt 0.118056 0.833333 +vt 0.118056 0.916667 +vt 0.076389 0.894842 +vt 0.118056 0.888889 +vt 0.076389 0.783731 +vt 0.118056 0.777778 +vt 0.118056 0.888889 +vt 0.076389 0.867064 +vt 0.118056 0.861111 +vt 0.715278 0.867064 +vt 0.784722 0.881342 +vt 0.784722 0.785325 +vt 0.784722 0.798009 +vt 0.715278 0.700397 +vt 0.784722 0.714675 +vt 0.715278 0.950397 +vt 0.784722 0.964675 +vt 0.956473 0.958333 +vt 0.944444 0.937500 +vt 0.932416 0.958333 +vt 0.715278 0.728175 +vt 0.784722 0.742453 +vt 0.715278 0.978175 +vt 0.784722 0.992453 +vt 0.715278 0.894841 +vt 0.784722 0.909120 +vt 0.715278 0.811508 +vt 0.784722 0.825786 +vt 0.715278 0.755952 +vt 0.784722 0.770231 +vt 0.715278 0.672619 +vt 0.784722 0.686898 +vt 0.076389 0.827381 +vt 0.006944 0.813102 +vt 0.076389 0.811508 +vt 0.076389 0.978175 +vt 0.006944 0.992453 +vt 0.006944 0.979769 +vt 0.076389 0.882936 +vt 0.006944 0.868658 +vt 0.076389 0.867064 +vt 0.076389 0.910714 +vt 0.006944 0.896435 +vt 0.076389 0.894841 +vt 0.076389 0.771825 +vt 0.006944 0.757547 +vt 0.076389 0.755952 +vt 0.076389 0.688492 +vt 0.006944 0.674213 +vt 0.076389 0.672619 +vt 0.076389 0.938492 +vt 0.006944 0.924213 +vt 0.076389 0.922619 +vt 0.076389 0.799603 +vt 0.006944 0.785324 +vt 0.076389 0.783730 +vt 0.076389 0.716269 +vt 0.006944 0.701991 +vt 0.076389 0.700397 +vt 0.076389 0.966270 +vt 0.006944 0.951991 +vt 0.076389 0.950397 +vt 0.958333 0.986111 +vt 0.937500 0.974083 +vt 0.937500 0.998139 +vt 0.784722 0.853564 +vt 0.791667 0.843324 +vt 0.791667 0.851121 +vt 0.784722 0.868658 +vt 0.791667 0.878898 +vt 0.784722 0.881342 +vt 0.784722 0.896436 +vt 0.791667 0.906676 +vt 0.784722 0.909120 +vt 0.784722 0.936898 +vt 0.791667 0.926657 +vt 0.791667 0.934454 +vt 0.784722 0.964675 +vt 0.791667 0.954435 +vt 0.791667 0.962232 +vt 0.784722 0.979769 +vt 0.791667 0.990010 +vt 0.784722 0.992453 +vt 0.784722 0.686898 +vt 0.791667 0.676657 +vt 0.791667 0.684454 +vt 0.784722 0.701991 +vt 0.791667 0.712232 +vt 0.784722 0.714675 +vt 0.784722 0.729769 +vt 0.791667 0.740009 +vt 0.784722 0.742453 +vt 0.784722 0.757547 +vt 0.791667 0.767787 +vt 0.784722 0.770231 +vt 0.791667 0.795565 +vt 0.784722 0.798009 +vt 0.784722 0.825787 +vt 0.791667 0.815546 +vt 0.791667 0.823343 +vt 0.784722 0.840880 +vt 0.784722 0.853564 +vt 0.006944 0.853564 +vt 0.000000 0.843324 +vt 0.006944 0.840880 +vt 0.006944 0.881342 +vt 0.000000 0.871102 +vt 0.006944 0.868658 +vt 0.006944 0.909120 +vt 0.000000 0.898880 +vt 0.006944 0.896436 +vt 0.006944 0.936898 +vt 0.000000 0.926657 +vt 0.006944 0.924214 +vt 0.006944 0.964675 +vt 0.000000 0.954435 +vt 0.006944 0.951991 +vt 0.006944 0.992453 +vt 0.000000 0.982213 +vt 0.006944 0.979769 +vt 0.006944 0.686898 +vt 0.000000 0.676657 +vt 0.006944 0.674214 +vt 0.006944 0.701991 +vt 0.000000 0.712232 +vt 0.000000 0.704435 +vt 0.006944 0.729769 +vt 0.000000 0.740009 +vt 0.000000 0.732213 +vt 0.006944 0.770231 +vt 0.000000 0.759991 +vt 0.006944 0.757547 +vt 0.006944 0.798009 +vt 0.000000 0.787768 +vt 0.006944 0.785325 +vt 0.006944 0.825787 +vt 0.000000 0.815546 +vt 0.006944 0.813103 +vt 0.076389 0.839286 +vt 0.006944 0.853564 +vt 0.006944 0.840880 +vt 0.805556 0.833333 +vt 0.833333 0.805556 +vt 0.833333 0.833333 +vt 0.805556 0.805556 +vt 0.833333 0.777778 +vt 0.805556 0.777778 +vt 0.833333 0.750000 +vt 0.805556 0.750000 +vt 0.833333 0.722222 +vt 0.805556 0.722222 +vt 0.833333 0.694444 +vt 0.805556 0.694444 +vt 0.833333 0.666667 +vt 0.805556 1.000000 +vt 0.833333 0.972222 +vt 0.833333 1.000000 +vt 0.805556 0.972222 +vt 0.833333 0.944444 +vt 0.805556 0.944444 +vt 0.833333 0.916667 +vt 0.805556 0.916667 +vt 0.833333 0.888889 +vt 0.805556 0.888889 +vt 0.833333 0.861111 +vt 0.805556 0.861111 +vt 0.840278 0.831597 +vt 0.833333 0.805556 +vt 0.840278 0.807292 +vt 0.798611 0.807292 +vt 0.805556 0.833333 +vt 0.798611 0.831597 +vt 0.840278 0.803819 +vt 0.833333 0.777778 +vt 0.840278 0.779514 +vt 0.798611 0.779514 +vt 0.798611 0.803819 +vt 0.840278 0.776042 +vt 0.833333 0.750000 +vt 0.840278 0.751736 +vt 0.798611 0.751736 +vt 0.798611 0.776042 +vt 0.840278 0.748264 +vt 0.833333 0.722222 +vt 0.840278 0.723958 +vt 0.798611 0.723958 +vt 0.798611 0.748264 +vt 0.840278 0.720486 +vt 0.833333 0.694444 +vt 0.840278 0.696181 +vt 0.798611 0.696181 +vt 0.798611 0.720486 +vt 0.840278 0.692708 +vt 0.840278 0.668403 +vt 0.798611 0.668403 +vt 0.798611 0.692708 +vt 0.840278 0.998264 +vt 0.833333 0.972222 +vt 0.840278 0.973958 +vt 0.798611 0.973958 +vt 0.805556 1.000000 +vt 0.798611 0.998264 +vt 0.840278 0.970486 +vt 0.833333 0.944445 +vt 0.840278 0.946181 +vt 0.798611 0.946181 +vt 0.805556 0.972222 +vt 0.798611 0.970486 +vt 0.840278 0.942708 +vt 0.833333 0.916667 +vt 0.840278 0.918403 +vt 0.798611 0.918403 +vt 0.805556 0.944445 +vt 0.798611 0.942708 +vt 0.840278 0.914931 +vt 0.833333 0.888889 +vt 0.840278 0.890625 +vt 0.798611 0.890625 +vt 0.805556 0.916667 +vt 0.798611 0.914931 +vt 0.840278 0.887153 +vt 0.833333 0.861111 +vt 0.840278 0.862847 +vt 0.798611 0.862847 +vt 0.805556 0.888889 +vt 0.798611 0.887153 +vt 0.840278 0.859375 +vt 0.833333 0.833333 +vt 0.840278 0.835070 +vt 0.798611 0.835070 +vt 0.805556 0.861111 +vt 0.798611 0.859375 +vt 0.854167 0.833333 +vt 0.875000 0.805556 +vt 0.875000 0.833333 +vt 0.854167 0.805556 +vt 0.875000 0.777778 +vt 0.854167 0.777778 +vt 0.875000 0.750000 +vt 0.854167 0.750000 +vt 0.875000 0.722222 +vt 0.854167 0.722222 +vt 0.875000 0.694444 +vt 0.854167 0.694444 +vt 0.875000 0.666667 +vt 0.854167 1.000000 +vt 0.875000 0.972222 +vt 0.875000 1.000000 +vt 0.854167 0.972222 +vt 0.875000 0.944444 +vt 0.854167 0.944444 +vt 0.875000 0.916667 +vt 0.854167 0.916667 +vt 0.875000 0.888889 +vt 0.854167 0.888889 +vt 0.875000 0.861111 +vt 0.854167 0.861111 +vt 0.881944 0.831597 +vt 0.875000 0.805556 +vt 0.881944 0.807292 +vt 0.847222 0.807292 +vt 0.854167 0.833333 +vt 0.847222 0.831597 +vt 0.881944 0.779514 +vt 0.875000 0.777778 +vt 0.847222 0.779514 +vt 0.847222 0.803819 +vt 0.881944 0.776042 +vt 0.875000 0.750000 +vt 0.881944 0.751736 +vt 0.847222 0.751736 +vt 0.847222 0.776042 +vt 0.881944 0.748264 +vt 0.875000 0.722222 +vt 0.881944 0.723958 +vt 0.847222 0.723958 +vt 0.847222 0.748264 +vt 0.881944 0.720486 +vt 0.875000 0.694444 +vt 0.881944 0.696181 +vt 0.847222 0.696181 +vt 0.847222 0.720486 +vt 0.881944 0.692708 +vt 0.881944 0.668403 +vt 0.847222 0.668403 +vt 0.847222 0.692708 +vt 0.881944 0.998264 +vt 0.875000 0.972222 +vt 0.881944 0.973958 +vt 0.847222 0.973958 +vt 0.854167 1.000000 +vt 0.847222 0.998264 +vt 0.881944 0.970486 +vt 0.875000 0.944445 +vt 0.881944 0.946181 +vt 0.847222 0.946181 +vt 0.854167 0.972222 +vt 0.847222 0.970486 +vt 0.881944 0.942708 +vt 0.875000 0.916667 +vt 0.881944 0.918403 +vt 0.847222 0.918403 +vt 0.854167 0.944445 +vt 0.847222 0.942708 +vt 0.881944 0.914931 +vt 0.875000 0.888889 +vt 0.881944 0.890625 +vt 0.847222 0.890625 +vt 0.854167 0.916667 +vt 0.847222 0.914931 +vt 0.881944 0.887153 +vt 0.875000 0.861111 +vt 0.881944 0.862847 +vt 0.847222 0.887153 +vt 0.854167 0.861111 +vt 0.854167 0.888889 +vt 0.881944 0.859375 +vt 0.875000 0.833333 +vt 0.881944 0.835070 +vt 0.847222 0.835070 +vt 0.854167 0.861111 +vt 0.847222 0.859375 +vt 0.000000 0.500000 +vt 0.527778 0.506944 +vt 0.000000 0.506944 +vt 0.527778 0.479167 +vt 0.000000 0.472222 +vt 0.527778 0.472222 +vt 0.000000 0.451389 +vt 0.527778 0.451389 +vt 0.527778 0.500000 +vt 0.000000 0.479167 +vt 0.354167 0.659722 +vt 0.340278 0.638889 +vt 0.354167 0.638889 +vt 0.333333 0.659722 +vt 0.333333 0.638889 +vt 0.319444 0.638889 +vt 0.361111 0.659722 +vt 0.361111 0.638889 +vt 0.354167 0.631944 +vt 0.340278 0.611111 +vt 0.354167 0.611111 +vt 0.340278 0.631944 +vt 0.333333 0.611111 +vt 0.319444 0.631944 +vt 0.319444 0.611111 +vt 0.361111 0.631944 +vt 0.361111 0.611111 +vt 0.354167 0.604167 +vt 0.340278 0.583333 +vt 0.354167 0.583333 +vt 0.333333 0.604167 +vt 0.333333 0.583333 +vt 0.319444 0.583333 +vt 0.361111 0.604167 +vt 0.361111 0.583333 +vt 0.013889 0.659722 +vt 0.000000 0.604167 +vt 0.013889 0.604167 +vt 0.284722 0.659722 +vt 0.166667 0.604167 +vt 0.305556 0.604167 +vt 0.166667 0.659722 +vt 0.152778 0.604167 +vt 0.131944 0.659722 +vt 0.152778 0.590278 +vt 0.013889 0.590278 +vt 0.895833 0.833333 +vt 0.916667 0.805556 +vt 0.916667 0.833333 +vt 0.895833 0.805556 +vt 0.916667 0.777778 +vt 0.895833 0.777778 +vt 0.916667 0.750000 +vt 0.895833 0.750000 +vt 0.916667 0.722222 +vt 0.895833 0.722222 +vt 0.916667 0.694444 +vt 0.895833 0.694444 +vt 0.916667 0.666667 +vt 0.895833 1.000000 +vt 0.916667 0.972222 +vt 0.916667 1.000000 +vt 0.895833 0.972222 +vt 0.916667 0.944444 +vt 0.895833 0.944444 +vt 0.916667 0.916667 +vt 0.895833 0.916667 +vt 0.916667 0.888889 +vt 0.895833 0.888889 +vt 0.916667 0.861111 +vt 0.895833 0.861111 +vt 0.923611 0.831597 +vt 0.916667 0.805556 +vt 0.923611 0.807292 +vt 0.888889 0.807292 +vt 0.895833 0.833333 +vt 0.888889 0.831597 +vt 0.923611 0.803819 +vt 0.916667 0.777778 +vt 0.923611 0.779514 +vt 0.888889 0.779514 +vt 0.888889 0.803819 +vt 0.923611 0.776042 +vt 0.916667 0.750000 +vt 0.923611 0.751736 +vt 0.888889 0.751736 +vt 0.888889 0.776042 +vt 0.923611 0.748264 +vt 0.916667 0.722222 +vt 0.923611 0.723958 +vt 0.888889 0.723958 +vt 0.888889 0.748264 +vt 0.923611 0.720486 +vt 0.916667 0.694444 +vt 0.923611 0.696181 +vt 0.888889 0.696181 +vt 0.888889 0.720486 +vt 0.923611 0.692708 +vt 0.923611 0.668403 +vt 0.888889 0.668403 +vt 0.888889 0.692708 +vt 0.923611 0.998264 +vt 0.916667 0.972222 +vt 0.923611 0.973958 +vt 0.888889 0.973958 +vt 0.895833 1.000000 +vt 0.888889 0.998264 +vt 0.923611 0.970486 +vt 0.916667 0.944445 +vt 0.923611 0.946181 +vt 0.888889 0.946181 +vt 0.895833 0.972222 +vt 0.888889 0.970486 +vt 0.923611 0.942708 +vt 0.916667 0.916667 +vt 0.923611 0.918403 +vt 0.888889 0.918403 +vt 0.895833 0.944445 +vt 0.888889 0.942708 +vt 0.923611 0.914931 +vt 0.916667 0.888889 +vt 0.923611 0.890625 +vt 0.888889 0.890625 +vt 0.895833 0.916667 +vt 0.888889 0.914931 +vt 0.923611 0.887153 +vt 0.916667 0.861111 +vt 0.923611 0.862847 +vt 0.888889 0.862847 +vt 0.895833 0.888889 +vt 0.888889 0.887153 +vt 0.923611 0.859375 +vt 0.916667 0.833333 +vt 0.923611 0.835070 +vt 0.888889 0.835070 +vt 0.895833 0.861111 +vt 0.888889 0.859375 +vt 0.013889 0.527778 +vt 0.000000 0.583333 +vt 0.000000 0.527778 +vt 0.284722 0.583333 +vt 0.166667 0.527778 +vt 0.305556 0.527778 +vt 0.166667 0.583333 +vt 0.152778 0.527778 +vt 0.131944 0.583333 +vt 0.152778 0.513889 +vt 0.013889 0.513889 +vt 0.000000 0.437500 +vt 0.527778 0.444444 +vt 0.000000 0.444444 +vt 0.527778 0.416667 +vt 0.000000 0.409722 +vt 0.527778 0.409722 +vt 0.000000 0.388889 +vt 0.527778 0.388889 +vt 0.527778 0.437500 +vt 0.000000 0.416667 +vt 0.402778 0.659722 +vt 0.388889 0.638889 +vt 0.402778 0.638889 +vt 0.388889 0.659722 +vt 0.381944 0.638889 +vt 0.381944 0.659722 +vt 0.368056 0.638889 +vt 0.409722 0.638889 +vt 0.402778 0.631944 +vt 0.388889 0.611111 +vt 0.402778 0.611111 +vt 0.388889 0.631944 +vt 0.381944 0.611111 +vt 0.381944 0.631944 +vt 0.368056 0.611111 +vt 0.409722 0.631944 +vt 0.409722 0.611111 +vt 0.402778 0.604167 +vt 0.388889 0.583333 +vt 0.402778 0.583333 +vt 0.388889 0.604167 +vt 0.381944 0.583333 +vt 0.381944 0.604167 +vt 0.368056 0.583333 +vt 0.409722 0.604167 +vt 0.409722 0.583333 +vt 0.673611 0.944444 +vt 0.673611 1.000000 +vt 0.076389 0.771826 +vt 0.784722 0.924214 +vt 0.715278 0.783730 +vt 0.715278 0.839286 +vt 0.006944 0.742453 +vt 0.076389 0.744048 +vt 0.076389 0.716270 +vt 0.076389 0.688492 +vt 0.076389 0.994048 +vt 0.076389 0.966270 +vt 0.076389 0.938492 +vt 0.076389 0.827381 +vt 0.076389 0.855159 +vt 0.076389 0.910715 +vt 0.076389 0.799603 +vt 0.076389 0.882937 +vt 0.784722 0.951991 +vt 0.937500 0.963417 +vt 0.944444 0.965278 +vt 0.951389 0.963417 +vt 0.958333 0.951389 +vt 0.956473 0.944444 +vt 0.951389 0.939361 +vt 0.937500 0.939361 +vt 0.932416 0.944444 +vt 0.930556 0.951389 +vt 0.784722 0.813103 +vt 0.784722 0.674214 +vt 0.006944 0.825786 +vt 0.076389 0.994047 +vt 0.006944 0.881342 +vt 0.006944 0.909120 +vt 0.006944 0.770231 +vt 0.006944 0.686897 +vt 0.006944 0.936897 +vt 0.006944 0.798008 +vt 0.006944 0.714675 +vt 0.006944 0.964675 +vt 0.944444 1.000000 +vt 0.951389 0.998139 +vt 0.956473 0.993056 +vt 0.956473 0.979167 +vt 0.951389 0.974083 +vt 0.944444 0.972222 +vt 0.932416 0.979167 +vt 0.930556 0.986111 +vt 0.932416 0.993056 +vt 0.791667 0.871102 +vt 0.791667 0.898880 +vt 0.791667 0.982213 +vt 0.791667 0.704435 +vt 0.791667 0.732213 +vt 0.791667 0.759991 +vt 0.791667 0.787768 +vt 0.000000 0.851120 +vt 0.000000 0.878898 +vt 0.000000 0.906676 +vt 0.000000 0.934454 +vt 0.000000 0.962232 +vt 0.000000 0.990009 +vt 0.000000 0.684454 +vt 0.006944 0.714675 +vt 0.006944 0.742453 +vt 0.000000 0.767787 +vt 0.000000 0.795565 +vt 0.000000 0.823343 +vt 0.076389 0.855158 +vt 0.805556 0.666667 +vt 0.833333 0.833333 +vt 0.805556 0.805556 +vt 0.805556 0.777778 +vt 0.805556 0.750000 +vt 0.805556 0.722222 +vt 0.805556 0.694444 +vt 0.833333 1.000000 +vt 0.805556 0.972222 +vt 0.833333 0.972222 +vt 0.805556 0.944445 +vt 0.833333 0.944445 +vt 0.805556 0.916667 +vt 0.833333 0.916667 +vt 0.805556 0.888889 +vt 0.833333 0.888889 +vt 0.805556 0.861111 +vt 0.833333 0.861111 +vt 0.805556 0.833333 +vt 0.854167 0.666667 +vt 0.875000 0.833333 +vt 0.854167 0.805556 +vt 0.881944 0.803819 +vt 0.854167 0.777778 +vt 0.854167 0.750000 +vt 0.854167 0.722222 +vt 0.854167 0.694444 +vt 0.875000 1.000000 +vt 0.854167 0.972222 +vt 0.875000 0.972222 +vt 0.854167 0.944445 +vt 0.875000 0.944445 +vt 0.854167 0.916667 +vt 0.875000 0.916667 +vt 0.854167 0.888889 +vt 0.875000 0.888889 +vt 0.847222 0.862847 +vt 0.875000 0.861111 +vt 0.854167 0.833333 +vt 0.340278 0.659722 +vt 0.319444 0.659722 +vt 0.333333 0.631944 +vt 0.340278 0.604167 +vt 0.319444 0.604167 +vt 0.000000 0.659722 +vt 0.187500 0.659722 +vt 0.152778 0.659722 +vt 0.034722 0.659722 +vt 0.895833 0.666667 +vt 0.916667 0.833333 +vt 0.895833 0.805556 +vt 0.895833 0.777778 +vt 0.895833 0.750000 +vt 0.895833 0.722222 +vt 0.895833 0.694444 +vt 0.916667 1.000000 +vt 0.895833 0.972222 +vt 0.916667 0.972222 +vt 0.895833 0.944445 +vt 0.916667 0.944445 +vt 0.895833 0.916667 +vt 0.916667 0.916667 +vt 0.895833 0.888889 +vt 0.916667 0.888889 +vt 0.895833 0.861111 +vt 0.916667 0.861111 +vt 0.895833 0.833333 +vt 0.013889 0.583333 +vt 0.187500 0.583333 +vt 0.152778 0.583333 +vt 0.034722 0.583333 +vt 0.368056 0.659722 +vt 0.409722 0.659722 +vt 0.368056 0.631944 +vt 0.368056 0.604167 +s 1 +usemtl Texture +f 2/1/1 3/2/2 1/3/1 +f 4/4/2 5/5/3 3/2/2 +f 6/6/3 7/7/4 5/5/3 +f 8/8/4 9/9/5 7/7/4 +f 9/9/5 12/10/6 11/11/6 +f 12/10/6 13/12/7 11/11/6 +f 14/13/7 15/14/8 13/15/7 +f 16/16/8 17/17/9 15/14/8 +f 18/18/9 19/19/10 17/17/9 +f 20/20/10 21/21/11 19/19/10 +f 6/22/12 28/23/13 8/24/13 +f 22/25/11 23/26/14 21/21/11 +f 24/27/14 1/3/1 23/26/14 +f 21/21/15 46/28/16 19/29/16 +f 28/30/17 58/31/18 29/32/18 +f 22/33/19 36/34/20 24/27/20 +f 4/35/21 27/36/12 6/37/12 +f 20/38/22 35/39/19 22/25/19 +f 18/40/23 34/41/22 20/20/22 +f 16/42/24 33/43/23 18/18/23 +f 14/13/25 32/44/24 16/16/24 +f 12/45/26 31/46/25 14/47/25 +f 10/48/27 30/49/26 12/50/26 +f 8/51/13 29/32/27 10/52/27 +f 24/53/20 26/54/28 2/55/28 +f 2/56/28 25/57/21 4/58/21 +f 46/59/29 89/60/30 45/61/30 +f 19/19/16 45/62/31 17/63/31 +f 17/17/31 44/64/32 15/65/32 +f 15/14/32 43/66/33 13/15/33 +f 13/67/33 42/68/34 11/69/34 +f 11/70/34 41/71/35 9/72/35 +f 9/73/35 40/74/36 7/75/36 +f 1/76/37 48/77/38 23/78/38 +f 3/79/39 37/80/37 1/81/37 +f 7/82/36 39/83/40 5/84/40 +f 23/26/38 47/85/15 21/86/15 +f 5/87/40 38/88/39 3/89/39 +f 25/90/41 54/91/42 27/36/42 +f 36/34/43 70/92/44 72/93/43 +f 32/94/45 66/95/46 33/43/46 +f 29/96/18 60/97/47 30/49/47 +f 69/98/48 61/99/48 53/100/48 +f 33/101/46 68/102/49 34/41/49 +f 30/103/47 62/104/50 31/46/50 +f 27/105/42 56/106/17 28/23/17 +f 36/107/43 51/108/51 26/54/51 +f 34/109/49 70/110/44 35/39/44 +f 31/111/50 64/112/45 32/44/45 +f 37/113/52 95/114/53 48/115/53 +f 42/116/54 85/117/55 83/118/54 +f 39/119/56 75/120/57 38/121/57 +f 40/122/58 77/123/56 39/124/56 +f 47/125/59 91/126/29 46/127/29 +f 44/128/60 85/129/55 43/130/55 +f 41/131/61 79/132/58 40/133/58 +f 48/134/53 93/135/59 47/136/59 +f 45/137/30 87/138/60 44/139/60 +f 42/140/54 81/141/61 41/142/61 +f 80/143/62 88/144/62 96/145/62 +f 50/146/63 52/147/64 49/148/63 +f 50/149/63 53/150/65 54/151/65 +f 54/152/65 55/153/66 56/154/66 +f 58/155/67 55/156/66 57/157/67 +f 60/158/68 57/159/67 59/160/68 +f 60/161/68 61/162/69 62/163/69 +f 64/164/70 61/165/69 63/166/70 +f 64/167/70 65/168/71 66/169/71 +f 66/170/71 67/171/72 68/172/73 +f 68/173/73 69/174/74 70/175/74 +f 70/92/74 71/176/75 72/177/75 +f 51/178/64 71/179/75 52/180/64 +f 25/57/41 51/181/51 50/182/41 +f 75/183/76 73/184/77 74/185/77 +f 77/186/78 76/187/76 75/188/76 +f 79/189/79 78/190/78 77/191/78 +f 81/192/80 80/193/81 79/194/79 +f 83/195/82 82/196/80 81/197/80 +f 85/198/83 84/199/82 83/200/82 +f 87/201/84 86/202/83 85/203/83 +f 87/204/84 90/205/85 88/206/84 +f 89/207/85 92/208/86 90/209/85 +f 93/210/87 92/211/86 91/212/88 +f 95/213/89 94/214/87 93/215/87 +f 74/216/77 96/217/89 95/218/89 +f 37/219/52 75/220/57 74/221/52 +f 124/222/1 122/223/2 121/224/1 +f 123/225/2 125/226/3 122/223/2 +f 126/227/3 127/228/4 125/226/3 +f 128/229/4 129/230/5 127/228/4 +f 130/231/5 131/232/6 129/230/5 +f 132/233/6 133/234/7 131/232/6 +f 134/235/7 135/236/8 133/237/7 +f 136/238/8 137/239/9 135/236/8 +f 138/240/9 139/241/10 137/239/9 +f 140/242/10 141/243/11 139/241/10 +f 142/244/11 143/245/14 141/243/11 +f 144/246/14 121/224/1 143/245/14 +f 97/247/62 122/248/62 99/249/62 +f 100/250/48 124/251/48 98/252/48 +f 99/253/62 125/254/62 101/255/62 +f 102/256/48 123/225/48 100/257/48 +f 101/258/62 127/259/62 103/260/62 +f 104/261/48 126/227/48 102/262/48 +f 103/263/62 129/264/62 105/265/62 +f 106/266/48 128/229/48 104/267/48 +f 105/268/62 131/269/62 107/270/62 +f 108/271/48 130/231/48 106/272/48 +f 107/273/62 133/234/62 109/274/62 +f 110/275/48 132/233/48 108/276/48 +f 109/277/62 135/278/62 111/279/62 +f 112/280/48 134/281/48 110/282/48 +f 111/283/62 137/284/62 113/285/62 +f 114/286/48 136/287/48 112/288/48 +f 113/289/62 139/290/62 115/291/62 +f 116/292/48 138/293/48 114/294/48 +f 115/295/62 141/296/62 117/297/62 +f 118/298/48 140/299/48 116/300/48 +f 117/301/62 143/302/62 119/303/62 +f 120/304/48 142/305/48 118/306/48 +f 119/307/62 121/308/62 97/309/62 +f 98/310/48 144/311/48 120/312/48 +f 172/313/1 170/314/2 169/315/1 +f 171/316/2 173/317/3 170/314/2 +f 174/318/3 175/319/4 173/317/3 +f 176/320/4 177/321/5 175/319/4 +f 178/322/5 179/323/6 177/321/5 +f 180/324/6 181/325/7 179/323/6 +f 182/326/7 183/327/8 181/328/7 +f 184/329/8 185/330/9 183/327/8 +f 186/331/9 187/332/10 185/330/9 +f 188/333/10 189/334/11 187/332/10 +f 190/335/11 191/336/14 189/334/11 +f 192/337/14 169/315/1 191/336/14 +f 145/338/62 170/339/62 147/340/62 +f 148/341/48 172/342/48 146/343/48 +f 149/344/62 170/314/62 173/345/62 +f 150/346/48 171/316/48 148/347/48 +f 149/348/62 175/349/62 151/350/62 +f 152/351/48 174/318/48 150/352/48 +f 151/353/62 177/354/62 153/355/62 +f 154/356/48 176/320/48 152/357/48 +f 153/358/62 179/359/62 155/360/62 +f 156/361/48 178/322/48 154/362/48 +f 155/363/62 181/325/62 157/364/62 +f 158/365/48 180/324/48 156/366/48 +f 157/367/62 183/368/62 159/369/62 +f 160/370/48 182/371/48 158/372/48 +f 159/373/62 185/374/62 161/375/62 +f 162/376/48 184/377/48 160/378/48 +f 161/379/62 187/380/62 163/381/62 +f 164/382/48 186/383/48 162/384/48 +f 163/385/62 189/386/62 165/387/62 +f 166/388/48 188/389/48 164/390/48 +f 165/391/62 191/392/62 167/393/62 +f 166/394/48 192/395/48 190/396/48 +f 167/397/62 169/398/62 145/399/62 +f 146/400/48 192/401/48 168/402/48 +f 194/403/90 195/404/90 193/405/90 +f 200/406/91 197/407/91 199/408/91 +f 199/408/92 193/409/92 195/410/92 +f 196/411/93 198/412/93 200/406/93 +f 202/413/90 203/414/90 201/415/90 +f 203/414/62 208/416/62 207/417/62 +f 208/416/91 205/418/91 207/417/91 +f 206/419/48 201/415/48 205/420/48 +f 210/421/90 211/422/90 209/423/90 +f 212/424/62 215/425/62 211/422/62 +f 215/425/91 214/426/91 213/427/91 +f 214/428/48 209/423/48 213/429/48 +f 218/430/90 219/431/90 217/432/90 +f 219/431/62 224/433/62 223/434/62 +f 224/433/91 221/435/91 223/434/91 +f 222/436/48 217/432/48 221/437/48 +f 226/438/94 227/439/94 225/440/94 +f 228/441/62 231/442/62 227/443/62 +f 232/444/95 229/445/95 231/442/95 +f 230/446/48 225/440/48 229/445/48 +f 231/447/7 225/440/7 227/448/7 +f 260/449/1 258/450/2 257/451/1 +f 259/452/2 261/453/3 258/450/2 +f 262/454/3 263/455/4 261/453/3 +f 264/456/4 265/457/5 263/455/4 +f 266/458/5 267/459/6 265/457/5 +f 268/460/6 269/461/7 267/459/6 +f 270/462/7 271/463/8 269/464/7 +f 272/465/8 273/466/9 271/463/8 +f 274/467/9 275/468/10 273/466/9 +f 276/469/10 277/470/11 275/468/10 +f 278/471/11 279/472/14 277/470/11 +f 280/473/14 257/451/1 279/472/14 +f 233/474/62 258/475/62 235/476/62 +f 236/477/48 260/478/48 234/479/48 +f 235/480/62 261/481/62 237/482/62 +f 238/483/48 259/452/48 236/484/48 +f 237/485/62 263/486/62 239/487/62 +f 240/488/48 262/454/48 238/489/48 +f 239/490/62 265/491/62 241/492/62 +f 242/493/48 264/456/48 240/494/48 +f 241/495/62 267/496/62 243/497/62 +f 244/498/48 266/458/48 242/499/48 +f 243/500/62 269/461/62 245/501/62 +f 246/502/48 268/460/48 244/503/48 +f 245/504/62 271/505/62 247/506/62 +f 248/507/48 270/508/48 246/509/48 +f 247/510/62 273/511/62 249/512/62 +f 250/513/48 272/514/48 248/515/48 +f 249/516/62 275/517/62 251/518/62 +f 252/519/48 274/520/48 250/521/48 +f 251/522/62 277/523/62 253/524/62 +f 254/525/48 276/526/48 252/527/48 +f 253/528/62 279/529/62 255/530/62 +f 256/531/48 278/532/48 254/533/48 +f 255/534/62 257/535/62 233/536/62 +f 234/537/48 280/538/48 256/539/48 +f 281/540/94 284/541/94 283/542/94 +f 284/543/62 287/544/62 283/545/62 +f 288/546/95 285/547/95 287/544/95 +f 286/548/48 281/540/48 285/547/48 +f 287/549/7 281/540/7 283/550/7 +f 290/551/93 291/552/93 289/553/93 +f 296/554/92 293/555/92 295/556/92 +f 295/556/90 289/557/90 291/558/90 +f 292/559/91 294/560/91 296/554/91 +f 298/561/93 299/562/93 297/563/93 +f 300/564/62 303/565/62 299/562/62 +f 304/566/92 301/567/92 303/565/92 +f 301/568/48 298/561/48 297/563/48 +f 306/569/93 307/570/93 305/571/93 +f 308/572/62 311/573/62 307/570/62 +f 312/574/92 309/575/92 311/573/92 +f 310/576/48 305/571/48 309/577/48 +f 314/578/93 315/579/93 313/580/93 +f 316/581/62 319/582/62 315/579/62 +f 320/583/92 317/584/92 319/582/92 +f 318/585/48 313/580/48 317/586/48 +f 2/1/1 4/4/2 3/2/2 +f 4/4/2 6/6/3 5/5/3 +f 6/6/3 8/8/4 7/7/4 +f 8/8/4 10/587/5 9/9/5 +f 9/9/5 10/587/5 12/10/6 +f 12/10/6 14/588/7 13/12/7 +f 14/13/7 16/16/8 15/14/8 +f 16/16/8 18/18/9 17/17/9 +f 18/18/9 20/20/10 19/19/10 +f 20/20/10 22/25/11 21/21/11 +f 6/22/12 27/105/12 28/23/13 +f 22/25/11 24/27/14 23/26/14 +f 24/27/14 2/1/1 1/3/1 +f 21/21/15 47/589/15 46/28/16 +f 28/30/17 56/590/17 58/31/18 +f 22/33/19 35/591/19 36/34/20 +f 4/35/21 25/90/21 27/36/12 +f 20/38/22 34/109/22 35/39/19 +f 18/40/23 33/101/23 34/41/22 +f 16/42/24 32/94/24 33/43/23 +f 14/13/25 31/111/25 32/44/24 +f 12/45/26 30/103/26 31/46/25 +f 10/48/27 29/96/27 30/49/26 +f 8/51/13 28/30/13 29/32/27 +f 24/53/20 36/107/20 26/54/28 +f 2/56/28 26/592/28 25/57/21 +f 46/59/29 91/593/29 89/60/30 +f 19/19/16 46/594/16 45/62/31 +f 17/17/31 45/595/31 44/64/32 +f 15/14/32 44/596/32 43/66/33 +f 13/67/33 43/597/33 42/68/34 +f 11/70/34 42/598/34 41/71/35 +f 9/73/35 41/599/35 40/74/36 +f 1/76/37 37/600/37 48/77/38 +f 3/79/39 38/601/39 37/80/37 +f 7/82/36 40/602/36 39/83/40 +f 23/26/38 48/603/38 47/85/15 +f 5/87/40 39/604/40 38/88/39 +f 25/90/41 50/149/41 54/91/42 +f 36/34/43 35/591/44 70/92/44 +f 32/94/45 64/167/45 66/95/46 +f 29/96/18 58/605/18 60/97/47 +f 53/100/48 49/606/48 52/607/48 +f 52/607/48 71/608/48 69/98/48 +f 69/98/48 67/609/48 65/610/48 +f 65/610/48 63/611/48 61/99/48 +f 61/99/48 59/612/48 57/613/48 +f 57/613/48 55/614/48 53/100/48 +f 53/100/48 52/607/48 69/98/48 +f 69/98/48 65/610/48 61/99/48 +f 61/99/48 57/613/48 53/100/48 +f 33/101/46 66/170/46 68/102/49 +f 30/103/47 60/161/47 62/104/50 +f 27/105/42 54/152/42 56/106/17 +f 36/107/43 72/615/43 51/108/51 +f 34/109/49 68/173/49 70/110/44 +f 31/111/50 62/616/50 64/112/45 +f 37/113/52 74/617/52 95/114/53 +f 42/116/54 43/618/55 85/117/55 +f 39/119/56 77/619/56 75/120/57 +f 40/122/58 79/620/58 77/123/56 +f 47/125/59 93/621/59 91/126/29 +f 44/128/60 87/622/60 85/129/55 +f 41/131/61 81/623/61 79/132/58 +f 48/134/53 95/624/53 93/135/59 +f 45/137/30 89/625/30 87/138/60 +f 42/140/54 83/626/54 81/141/61 +f 96/145/62 73/627/62 76/628/62 +f 76/628/62 78/629/62 80/143/62 +f 80/143/62 82/630/62 84/631/62 +f 84/631/62 86/632/62 88/144/62 +f 88/144/62 90/633/62 92/634/62 +f 92/634/62 94/635/62 96/145/62 +f 96/145/62 76/628/62 80/143/62 +f 80/143/62 84/631/62 88/144/62 +f 88/144/62 92/634/62 96/145/62 +f 50/146/63 51/181/64 52/147/64 +f 50/149/63 49/636/63 53/150/65 +f 54/152/65 53/637/65 55/153/66 +f 58/155/67 56/590/66 55/156/66 +f 60/158/68 58/605/67 57/159/67 +f 60/161/68 59/638/68 61/162/69 +f 64/164/70 62/616/69 61/165/69 +f 64/167/70 63/639/70 65/168/71 +f 66/170/71 65/640/71 67/171/72 +f 68/173/73 67/641/72 69/174/74 +f 70/92/74 69/642/74 71/176/75 +f 51/178/64 72/615/75 71/179/75 +f 25/57/41 26/592/51 51/181/51 +f 75/183/76 76/643/76 73/184/77 +f 77/186/78 78/644/78 76/187/76 +f 79/189/79 80/645/81 78/190/78 +f 81/192/80 82/646/80 80/193/81 +f 83/195/82 84/647/82 82/196/80 +f 85/198/83 86/648/83 84/199/82 +f 87/201/84 88/649/84 86/202/83 +f 87/204/84 89/650/85 90/205/85 +f 89/207/85 91/651/88 92/208/86 +f 93/210/87 94/652/87 92/211/86 +f 95/213/89 96/653/89 94/214/87 +f 74/216/77 73/654/77 96/217/89 +f 37/219/52 38/655/57 75/220/57 +f 124/222/1 123/225/2 122/223/2 +f 123/225/2 126/227/3 125/226/3 +f 126/227/3 128/229/4 127/228/4 +f 128/229/4 130/231/5 129/230/5 +f 130/231/5 132/233/6 131/232/6 +f 132/233/6 134/656/7 133/234/7 +f 134/235/7 136/238/8 135/236/8 +f 136/238/8 138/240/9 137/239/9 +f 138/240/9 140/242/10 139/241/10 +f 140/242/10 142/244/11 141/243/11 +f 142/244/11 144/246/14 143/245/14 +f 144/246/14 124/222/1 121/224/1 +f 97/247/62 121/657/62 122/248/62 +f 100/250/48 123/658/48 124/251/48 +f 99/253/62 122/223/62 125/254/62 +f 102/256/48 126/659/48 123/225/48 +f 101/258/62 125/226/62 127/259/62 +f 104/261/48 128/660/48 126/227/48 +f 103/263/62 127/228/62 129/264/62 +f 106/266/48 130/661/48 128/229/48 +f 105/268/62 129/230/62 131/269/62 +f 108/271/48 132/662/48 130/231/48 +f 107/273/62 131/232/62 133/234/62 +f 110/275/48 134/656/48 132/233/48 +f 109/277/62 133/663/62 135/278/62 +f 112/280/48 136/664/48 134/281/48 +f 111/283/62 135/665/62 137/284/62 +f 114/286/48 138/666/48 136/287/48 +f 113/289/62 137/667/62 139/290/62 +f 116/292/48 140/668/48 138/293/48 +f 115/295/62 139/669/62 141/296/62 +f 118/298/48 142/670/48 140/299/48 +f 117/301/62 141/671/62 143/302/62 +f 120/304/48 144/672/48 142/305/48 +f 119/307/62 143/673/62 121/308/62 +f 98/310/48 124/674/48 144/311/48 +f 172/313/1 171/316/2 170/314/2 +f 171/316/2 174/318/3 173/317/3 +f 174/318/3 176/320/4 175/319/4 +f 176/320/4 178/322/5 177/321/5 +f 178/322/5 180/324/6 179/323/6 +f 180/324/6 182/675/7 181/325/7 +f 182/326/7 184/329/8 183/327/8 +f 184/329/8 186/331/9 185/330/9 +f 186/331/9 188/333/10 187/332/10 +f 188/333/10 190/335/11 189/334/11 +f 190/335/11 192/337/14 191/336/14 +f 192/337/14 172/313/1 169/315/1 +f 145/338/62 169/676/62 170/339/62 +f 148/341/48 171/677/48 172/342/48 +f 149/344/62 147/678/62 170/314/62 +f 150/346/48 174/679/48 171/316/48 +f 149/348/62 173/317/62 175/349/62 +f 152/351/48 176/680/48 174/318/48 +f 151/353/62 175/319/62 177/354/62 +f 154/356/48 178/681/48 176/320/48 +f 153/358/62 177/321/62 179/359/62 +f 156/361/48 180/682/48 178/322/48 +f 155/363/62 179/323/62 181/325/62 +f 158/365/48 182/675/48 180/324/48 +f 157/367/62 181/683/62 183/368/62 +f 160/370/48 184/684/48 182/371/48 +f 159/373/62 183/685/62 185/374/62 +f 162/376/48 186/686/48 184/377/48 +f 161/379/62 185/687/62 187/380/62 +f 164/382/48 188/688/48 186/383/48 +f 163/385/62 187/689/62 189/386/62 +f 166/388/48 190/690/48 188/389/48 +f 165/391/62 189/691/62 191/392/62 +f 166/394/48 168/692/48 192/395/48 +f 167/397/62 191/693/62 169/398/62 +f 146/400/48 172/694/48 192/401/48 +f 194/403/90 196/411/90 195/404/90 +f 200/406/91 198/412/91 197/407/91 +f 199/408/92 197/407/92 193/409/92 +f 196/411/93 194/403/93 198/412/93 +f 202/413/90 204/695/90 203/414/90 +f 203/414/62 204/695/62 208/416/62 +f 208/416/91 206/696/91 205/418/91 +f 206/419/48 202/413/48 201/415/48 +f 210/421/90 212/424/90 211/422/90 +f 212/424/62 216/697/62 215/425/62 +f 215/425/91 216/697/91 214/426/91 +f 214/428/48 210/421/48 209/423/48 +f 218/430/90 220/698/90 219/431/90 +f 219/431/62 220/698/62 224/433/62 +f 224/433/91 222/699/91 221/435/91 +f 222/436/48 218/430/48 217/432/48 +f 226/438/94 228/700/94 227/439/94 +f 228/441/62 232/701/62 231/442/62 +f 232/444/95 230/702/95 229/445/95 +f 230/446/48 226/703/48 225/440/48 +f 231/447/7 229/445/7 225/440/7 +f 260/449/1 259/452/2 258/450/2 +f 259/452/2 262/454/3 261/453/3 +f 262/454/3 264/456/4 263/455/4 +f 264/456/4 266/458/5 265/457/5 +f 266/458/5 268/460/6 267/459/6 +f 268/460/6 270/704/7 269/461/7 +f 270/462/7 272/465/8 271/463/8 +f 272/465/8 274/467/9 273/466/9 +f 274/467/9 276/469/10 275/468/10 +f 276/469/10 278/471/11 277/470/11 +f 278/471/11 280/473/14 279/472/14 +f 280/473/14 260/449/1 257/451/1 +f 233/474/62 257/705/62 258/475/62 +f 236/477/48 259/706/48 260/478/48 +f 235/480/62 258/450/62 261/481/62 +f 238/483/48 262/707/48 259/452/48 +f 237/485/62 261/453/62 263/486/62 +f 240/488/48 264/708/48 262/454/48 +f 239/490/62 263/455/62 265/491/62 +f 242/493/48 266/709/48 264/456/48 +f 241/495/62 265/457/62 267/496/62 +f 244/498/48 268/710/48 266/458/48 +f 243/500/62 267/459/62 269/461/62 +f 246/502/48 270/704/48 268/460/48 +f 245/504/62 269/711/62 271/505/62 +f 248/507/48 272/712/48 270/508/48 +f 247/510/62 271/713/62 273/511/62 +f 250/513/48 274/714/48 272/514/48 +f 249/516/62 273/715/62 275/517/62 +f 252/519/48 276/716/48 274/520/48 +f 251/522/62 275/717/62 277/523/62 +f 254/525/48 278/718/48 276/526/48 +f 253/528/62 277/719/62 279/529/62 +f 256/531/48 280/720/48 278/532/48 +f 255/534/62 279/721/62 257/535/62 +f 234/537/48 260/722/48 280/538/48 +f 281/540/94 282/723/94 284/541/94 +f 284/543/62 288/724/62 287/544/62 +f 288/546/95 286/725/95 285/547/95 +f 286/548/48 282/726/48 281/540/48 +f 287/549/7 285/547/7 281/540/7 +f 290/551/93 292/559/93 291/552/93 +f 296/554/92 294/560/92 293/555/92 +f 295/556/90 293/555/90 289/557/90 +f 292/559/91 290/551/91 294/560/91 +f 298/561/93 300/564/93 299/562/93 +f 300/564/62 304/566/62 303/565/62 +f 304/566/92 302/727/92 301/567/92 +f 301/568/48 302/728/48 298/561/48 +f 306/569/93 308/572/93 307/570/93 +f 308/572/62 312/574/62 311/573/62 +f 312/574/92 310/729/92 309/575/92 +f 310/576/48 306/569/48 305/571/48 +f 314/578/93 316/581/93 315/579/93 +f 316/581/62 320/583/62 319/582/62 +f 320/583/92 318/730/92 317/584/92 +f 318/585/48 314/578/48 313/580/48 diff --git a/src/main/resources/assets/hbm/textures/models/Prototype.png b/src/main/resources/assets/hbm/textures/models/Prototype.png deleted file mode 100644 index 2738d1aee15217443dae45bbe1d144a65c1b134e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16020 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
v@;^-%KKzqS$Xc`8kSs{1XyL+rBme=p)V2J| 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 literal 0 HcmV?d00001 From db0dbafe75cd6cd178b00f78e74cac22e9b0244e Mon Sep 17 00:00:00 2001 From: 7H40 <57011718+7H40@users.noreply.github.com> Date: Sun, 11 May 2025 06:17:38 +0300 Subject: [PATCH 017/491] Update ru_RU.lang tj_TJ.lang --> ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 160 +++++++++--------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 26688b7f0..59af4a5dd 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1,6 +1,6 @@ -achievement.acidizer.desc=уфф ай моя кожа +achievement.acidizer.desc=уфф ай моя кожа achievement.acidizer=Кислюка -achievement.assembly.desc=Подожди-ка, уже час утра? +achievement.assembly.desc=Погоди-ка, уже час ночи? achievement.assembly=Завод расширяется achievement.FOEQ.desc=Отправь передатчик на орбиту Марса... в смысле Дюны. achievement.FOEQ=Бункеры с пегасами и ракетами @@ -10,11 +10,11 @@ achievement.bismuth.desc=Помните, как люди спорили об э achievement.bismuth=Висмут achievement.blastFurnace.desc=Они разобрали затонувший дредноут для "Эксплорера-1". achievement.blastFurnace=Железо и уголь -achievement.bossCreeper.desc='Вот это ядерные криперы? Эта штуковина?!' +achievement.bossCreeper.desc='Здесь есть ядерные криперы? Они существуют?!' achievement.bossCreeper=Бомба на четырёх ногах achievement.bossMaskman.desc=Врезать большому мальчику. -achievement.bossMaskman=6 месяцев обязательной службы, и все, что я получил, - это паршивая футболка achievement.bossMeltdown.desc=Скорее ужасно, чем отлично, но я приму то, что могу получить. +achievement.bossMaskman=6 месяцев срочной службы, и все что я получил это паршивая футболка achievement.bossMeltdown=3.6 рентген achievement.bossWorm.desc=Фабстафф. Моя задница. А ты считай. achievement.bossWorm=Разборка Баллс-О-Трон @@ -24,30 +24,30 @@ achievement.burnerPress.desc=Давление давит и на меня, и н achievement.burnerPress=Под давлением achievement.c20_5.desc=??? achievement.c20_5=Глава [ДВАДЦАТЬ_С_ПОЛОВИНОЙ] -achievement.c44.desc=Гальванизирован! Типа, цинк! +achievement.c44.desc=Гальванизирован! Тоесть цинк! achievement.c44=Глава 44 achievement.centrifuge.desc=центробежная сила это фейк не @ меня -achievement.centrifuge=Центростремительная сила +achievement.centrifuge=Центробежная сила achievement.chemplant.desc=Теперь ты думаешь химикатами! achievement.chemplant=Завод расширяется: Часть 2 achievement.chicagoPile.desc="Как там местные жители?" / "Очень дружелюбные". achievement.chicagoPile=Мореплаватель высадился в Новом Свете achievement.concrete.desc=Любимчик большевиков. -achievement.concrete=Старый добрый +achievement.concrete=Старый и надежный achievement.desh.desc="Тогда давайте, вы все. Места, куда можно пойти!" -achievement.desh=Леверье -achievement.digammaFeel.desc=пустота внутри. -achievement.digammaFeel=Страх чувства +achievement.desh=Ле Верьер +achievement.digammaFeel.desc=Мои глаза кровоточат +achievement.digammaFeel=Мусорный мир наполненый канализациями achievement.digammaKauaiMoho.desc=Все ужасно, вот тебе горячий шоколад. -achievement.digammaKauaiMoho=Пой, пой мне песню Кауаи Мохо. -achievement.digammaKnow.desc=что такое этот мир. -achievement.digammaKnow=Страх познания -achievement.digammaSee.desc=в бездну. -achievement.digammaSee=Страх видения -achievement.digammaUpOnTop.desc=Дредноут, облицованный железом. -achievement.digammaUpOnTop=На вершине +achievement.digammaKauaiMoho=Пой, пой мне песню Кауаи Мохо +achievement.digammaKnow.desc=о чем вообще этот мир. +achievement.digammaKnow=СТРАХ ПОЗНАНИЯ +achievement.digammaSee.desc=Темновато, принеси фонарик. +achievement.digammaSee=СПУСТИСЬ В БЕЗДНУ +achievement.digammaUpOnTop.desc=Восхищайся сыном моим, он мой клон. +achievement.digammaUpOnTop=ВОСХИЩАЙСЯ МНОЮ, ВОСХИЩАЙСЯ ДОМОМ МОИМ achievement.fiend.desc=Будь жестоким. -achievement.fiend2.desc=Будь жёстче. +achievement.fiend2.desc=Будь еще жёстче. achievement.fiend2=Нарушитель-2: перенарушение. achievement.fiend=Нарушитель achievement.freytag.desc=Стражи жизни Герольда. @@ -60,7 +60,7 @@ achievement.goFish.desc=Морское распятие achievement.goFish=Иди порыбачь achievement.hidden.desc=Убейте зараженного крипера падающим товарным вагоном achievement.hidden=Скрытый Каталог -achievement.horizonsBonus.desc=Честное слово, что, черт возьми, с тобой не так +achievement.horizonsBonus.desc=честное слово что черт возьми с тобой не так achievement.horizonsBonus=Слэм-данк диарея achievement.horizonsEnd.desc=Отправьте Тома домой. achievement.horizonsEnd=Горизонты @@ -78,12 +78,12 @@ achievement.no9.desc="Я надеюсь, что свинец, который я achievement.no9=Старый номер Девять achievement.omega12.desc=Решите проблему продолжения жизни на этой несчастной планете. achievement.omega12=Ускоритель частиц Омега-12 -achievement.polymer.desc=Восхитительный, восхитительный микропластик. +achievement.polymer.desc=Вкуснейший, вкуснейший микропластик. achievement.polymer=Тефлон -achievement.potato.desc=Можешь убить для меня эту птицу? +achievement.potato.desc=Ты меня пырнул! Что НЕ ТАК с тобо-ОАААХХ achievement.potato=Восстание машин achievement.radDeath.desc=Мария Кюри изобрела теорию радиоактивности, лечение радиоактивности и умирание от радиоактивности. -achievement.radDeath=Ой, Радиация! +achievement.radDeath=Ай, Радиация! achievement.radium.desc=ТЫ УВОЛЕН ЗА ТО, ЧТО ПОДСЫПАЛ РАДИЙ В МОЙ КОФЕ! achievement.radium=МИСТЕР НЕВЕРОЯТНЫЙ achievement.radPoison.desc=Испытайте последствия радиационного отравления. @@ -93,19 +93,19 @@ achievement.RBMKBoom=15,000. achievement.RBMK.desc=Он бредит, отведите его в лазарет. achievement.RBMK=3.6 Рентген? achievement.redBalloons.desc="Это то, чего мы ждали. Вот она, ребята, война." -achievement.redBalloons=99 воздушных шариков +achievement.redBalloons=99 красных шариков achievement.redRoom.desc=? achievement.redRoom=Другая сторона -achievement.sacrifice.desc=Встреться лицом к лицу с огнём и выживи. +achievement.sacrifice.desc=Узри пламя и выживи. achievement.sacrifice=Жертва achievement.schrab.desc=Как бы то ни было, я бы не стал смотреть на это слишком долго. achievement.schrab=Остров стабильности -achievement.selenium.desc=О,да! +achievement.selenium.desc=Ага. achievement.selenium=XVIII Луна. -achievement.SILEX.desc=Это круче, чем кажется, я обещаю. +achievement.SILEX.desc=Это круче чем кажется, я обещаю. achievement.SILEX=Лазерное разделение изотопов achievement.slimeball.desc= -achievement.slimeball=я должен окунуть свои яйца в серную кислоту. +achievement.slimeball=Я должен окунуть свои яйца в серную кислоту. achievement.stratum.desc=Жми на тормоза, Миттс. achievement.stratum=Пласт achievement.someWounds.desc=Приготовься @@ -115,10 +115,10 @@ achievement.soyuz=Печёная Картошка achievement.space.desc=Провались как только можно и потрать 90 миллионов долларов впустую. achievement.space=Последний Рубеж... Хотя ладно, забей. achievement.sulfuric.desc= -achievement.sulfuric=я не должен был окунать свои яйца в серную кислоту. +achievement.sulfuric=Я не должен был окунать свои яйца в серную кислоту. achievement.tantalum.desc=Неуловимый, но всегда необходимый элемент. achievement.tantalum="Тантал" -achievement.tasteofblood.desc=Это не было частью протокола тестирования. +achievement.tasteofblood.desc=Это не было частью какого-либо протокола тестирования. achievement.tasteofblood=Вкус крови achievement.technetium.desc=Это целебно, это целебно! achievement.technetium=Большой Человек, Человек-Свинья @@ -128,7 +128,7 @@ achievement.watz.desc=Поля Фолквангра также присутст achievement.watz=Сила Е-126 achievement.witchtaunter.desc=Эти твари ничего тебе не сделают! achievement.witchtaunter=Насмехайтесь над ведьмами -achievement.ZIRNOXBoom.desc=cope, seethe, mald +achievement.ZIRNOXBoom.desc=коупи, терпи и сердись achievement.ZIRNOXBoom=ЦИРНОКС analyze.basic1======Компонент NTM===== @@ -573,7 +573,7 @@ chem.BALEFIRE=Смешивание ракетного жар-топлива chem.BP_BIOFUEL=Трансэтерификация биотоплива chem.BP_BIOGAS=Производство биогаза chem.C4=Синтез C-4 -chem.CC_CENTRIFUGE=Отделение хлоркальцита +chem.CC_CENTRIFUGE=Сепарация хлоркальцита chem.CC_ELECTROLYSIS=Электролиз хлорида кальция chem.CC_HEATING=Усовершенствованное сжижение угля chem.CC_HEAVY=Базовое сжижение угля @@ -677,12 +677,12 @@ chem.YELLOWCAKE=Производство йеллоукейка commands.satellite.no_active_satellites=Нет активных спутников! commands.satellite.no_satellite=Спутник не найден! -commands.satellite.not_a_satellite=Предмет в руке не спутник! +commands.satellite.not_a_satellite=Предмет в руке не является спутником! commands.satellite.satellite_descended=Спутник успешно удалён. commands.satellite.satellite_orbited=Спутник запущен. commands.satellite.should_be_run_as_player=Команда должна быть выполнена игроком! -container.ammoBag=Патроны +container.ammoBag=Сумка для патрон container.amsBase=Основание АМС [Декор] container.amsEmitter=Излучатель АМС [Декор] container.amsLimiter=Стабилизатор АМС [Декор] @@ -912,63 +912,63 @@ damage.exact.LASER=Лазерам damage.exact.onFire=Горению damage.other=Прочему -death.attack.acid=%1$s упал в кислоту +death.attack.acid=%1$s упал в кислоту. death.attack.acidPlayer=%1$s был растворён %2$s. -death.attack.ams=%1$s искупался в смертельных частицах, ещё неизвестных науке -death.attack.amsCore=%1$s испарился в огне сингулярности +death.attack.ams=%1$s искупался в смертельных частицах, ещё неизвестных науке. +death.attack.amsCore=%1$s испарился в огне сингулярности. death.attack.asbestos=%1$s теперь имеет право на финансовую компенсацию. -death.attack.bang=%1$s превратился в рагу -death.attack.blackhole=%1$s превратился в спагетти -death.attack.blacklung=%1$s умер от болезни черных лёгких -death.attack.blender=%1$s стал фаршем -death.attack.boat=%1$s был пришиблен лодкой +death.attack.bang=%1$s превратился в рагу. +death.attack.blackhole=%1$s превратился в спагетти. +death.attack.blacklung=%1$s умер от болезни черных лёгких. +death.attack.blender=%1$s стал фаршем. +death.attack.boat=%1$s был пришиблен лодкой. death.attack.boil=%1$s был заживо сварен %2$s. death.attack.boxcar=%1$s был раздавлен падающим грузовым вагоном. Ну что ж... -death.attack.broadcast=%1$s растворил свой мозг -death.attack.building=%1$s был придавлен падающим зданием -death.attack.cheater=внутренности %1$s превратились в овёс (???) -death.attack.chopperBullet=%1$s был изничтожен %2$s -death.attack.cloud=%1$s растаял, как эскимо в жаркий день -death.attack.cmb=%1$s был продырявлен %2$s +death.attack.broadcast=%1$s растворил свой мозг. +death.attack.building=%1$s был придавлен падающим зданием. +death.attack.cheater=внутренности %1$s превратились в овёс. (???) +death.attack.chopperBullet=%1$s был изничтожен %2$s. +death.attack.cloud=%1$s растаял, как эскимо на солнце. +death.attack.cmb=%1$s был продырявлен %2$s. death.attack.digamma=%1$s шагнул в пустоту. -death.attack.electricity=%1$s был убит электрическим током -death.attack.electrified=%1$s превратился в батарейку благодаря %2$s -death.attack.euthanized=%1$s был усыплён %2$s -death.attack.euthanizedSelf2=%1$s выиграл премию Дарвина -death.attack.euthanizedSelf=%1$s нашёл путь к лучшей жизни в России -death.attack.exhaust=%1$s был превращен в шашлык стартовой ракетой -death.attack.flamethrower=%1$s был кремирован %2$s +death.attack.electricity=%1$s был убит электрическим током. +death.attack.electrified=%1$s превратился в батарейку благодаря %2$s. +death.attack.euthanized=%1$s был усыплён %2$s. +death.attack.euthanizedSelf2=%1$s выиграл премию Дарвина. +death.attack.euthanizedSelf=%1$s усыпил себя, ну и дурак. +death.attack.exhaust=%1$s был превращен в шашлык стартовой ракетой. +death.attack.flamethrower=%1$s был кремирован %2$s. death.attack.flamethrower.item=%1$s был кремирован %2$s с помощью %3$s. -death.attack.ice=%1$s был превращён в эскимо %2$s -death.attack.laser=%1$s был превращён в пепел %2$s -death.attack.laser.item=%1$s был превращён в пепел %2$s с помощью %3$s -death.attack.lead=%1$s умер от отравления свинцом +death.attack.ice=%1$s был превращён в эскимо %2$s. +death.attack.laser=%1$s был превращён в пепел %2$s. +death.attack.laser.item=%1$s был превращён в пепел %2$s с помощью %3$s. +death.attack.lead=%1$s умер от отравления свинцом. death.attack.lunar=%1$s забыли зарядить свои жизненно важные органы. -death.attack.meteorite=%1$s был раздавлен огромным космическим камнем +death.attack.meteorite=%1$s был раздавлен огромным космическим камнем. death.attack.microwave=%1$s взорвался от микроволнового излучения. death.attack.mku=%1$s умер по неизвестным причинам. -death.attack.monoxide=%1$s забыл сменить батарейки в своем детекторе угарного газа -death.attack.mudPoisoning=%1$s утонул в токсичной жиже -death.attack.nuclearBlast=%1$s был стёрт с лица земли ядерным взрывом +death.attack.monoxide=%1$s забыл сменить батарейки в своем детекторе угарного газа. +death.attack.mudPoisoning=%1$s утонул в токсичной жиже. +death.attack.nuclearBlast=%1$s был стёрт с лица земли ядерным взрывом. death.attack.overdose=%1$s умер от передоза метамфетамином. -death.attack.pc=%1$s стал лужицей внутри розового облака -death.attack.plasma=%1$s был испарён %2$s -death.attack.radiation=%1$s умер от лучевой болезни -death.attack.revolverBullet=%1$s получил пулю в голову от %2$s -death.attack.revolverBullet.item=%1$s получил пулю в голову от %2$s с помощью %3$s -death.attack.rubble=%1$s превратился в лепёшку -death.attack.shrapnel=%1$sбыл разорван шрапнелью -death.attack.spikes=%1$s был пронзён насквозь -death.attack.subAtomic1=Атомы %1$s были уничтожены %2$s -death.attack.subAtomic2=%1$s был смещен QPU, потому что %2$s изменил его фактическую скорость -death.attack.subAtomic3=%1$s перестал существовать из-за %2$s -death.attack.subAtomic4=%1$s был поделён на ноль %2$s -death.attack.subAtomic5=%1$s был обнулён %2$s -death.attack.suicide=%1$s оторвал себе голову -death.attack.taint=%1$s умер от невероятного количества опухолей -death.attack.tau=%1$s был изрешёчен %2$s при помощи отрицательно заряженых тауонов -death.attack.tauBlast=%1$s заряжал XVL1456 слишком долго и взлетел на воздух -death.attack.teleporter=%1$s телепортировался в никуда +death.attack.pc=%1$s стал лужицей внутри розового облака. +death.attack.plasma=%1$s был испарён %2$s. +death.attack.radiation=%1$s умер от лучевой болезни. +death.attack.revolverBullet=%1$s получил пулю в голову от %2$s. +death.attack.revolverBullet.item=%1$s получил пулю в голову от %2$s с помощью %3$s. +death.attack.rubble=%1$s превратился в лепёшку. +death.attack.shrapnel=%1$s был разорван шрапнелью. +death.attack.spikes=%1$s был пронзён насквозь. +death.attack.subAtomic1=Атомы %1$s были уничтожены %2$s. +death.attack.subAtomic2=%1$s был смещен QPU, потому что %2$s изменил его фактическую скорость. +death.attack.subAtomic3=%1$s перестал существовать из-за %2$s. +death.attack.subAtomic4=%1$s был поделён на ноль %2$s. +death.attack.subAtomic5=%1$s был обнулён %2$s. +death.attack.suicide=%1$s оторвал себе голову. +death.attack.taint=%1$s умер от невероятного количества опухолей. +death.attack.tau=%1$s был изрешёчен %2$s при помощи отрицательно заряженых тауонов. +death.attack.tauBlast=%1$s заряжал XVL1456 слишком долго и взлетел на воздух. +death.attack.teleporter=%1$s телепортировался в никуда. death.sedna.electric=%1$s был поджарен. death.sedna.electric.attacker=%1$s был поджарен %2$s. From 6696f3b73614b610793ef175edfc14f9bee611c8 Mon Sep 17 00:00:00 2001 From: 7H40 <57011718+7H40@users.noreply.github.com> Date: Sun, 11 May 2025 16:49:42 +0300 Subject: [PATCH 018/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 59af4a5dd..9208e7f21 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -24,7 +24,7 @@ achievement.burnerPress.desc=Давление давит и на меня, и н achievement.burnerPress=Под давлением achievement.c20_5.desc=??? achievement.c20_5=Глава [ДВАДЦАТЬ_С_ПОЛОВИНОЙ] -achievement.c44.desc=Гальванизирован! Тоесть цинк! +achievement.c44.desc=Гальванизирован! То есть цинк! achievement.c44=Глава 44 achievement.centrifuge.desc=центробежная сила это фейк не @ меня achievement.centrifuge=Центробежная сила @@ -33,11 +33,11 @@ achievement.chemplant=Завод расширяется: Часть 2 achievement.chicagoPile.desc="Как там местные жители?" / "Очень дружелюбные". achievement.chicagoPile=Мореплаватель высадился в Новом Свете achievement.concrete.desc=Любимчик большевиков. -achievement.concrete=Старый и надежный +achievement.concrete=Старый добрый achievement.desh.desc="Тогда давайте, вы все. Места, куда можно пойти!" -achievement.desh=Ле Верьер +achievement.desh=Леверье achievement.digammaFeel.desc=Мои глаза кровоточат -achievement.digammaFeel=Мусорный мир наполненый канализациями +achievement.digammaFeel=Мусорный мир наполненный канализациями achievement.digammaKauaiMoho.desc=Все ужасно, вот тебе горячий шоколад. achievement.digammaKauaiMoho=Пой, пой мне песню Кауаи Мохо achievement.digammaKnow.desc=о чем вообще этот мир. @@ -102,7 +102,7 @@ achievement.schrab.desc=Как бы то ни было, я бы не стал с achievement.schrab=Остров стабильности achievement.selenium.desc=Ага. achievement.selenium=XVIII Луна. -achievement.SILEX.desc=Это круче чем кажется, я обещаю. +achievement.SILEX.desc=Это круче, чем кажется, я обещаю. achievement.SILEX=Лазерное разделение изотопов achievement.slimeball.desc= achievement.slimeball=Я должен окунуть свои яйца в серную кислоту. @@ -128,7 +128,7 @@ achievement.watz.desc=Поля Фолквангра также присутст achievement.watz=Сила Е-126 achievement.witchtaunter.desc=Эти твари ничего тебе не сделают! achievement.witchtaunter=Насмехайтесь над ведьмами -achievement.ZIRNOXBoom.desc=коупи, терпи и сердись +achievement.ZIRNOXBoom.desc=cope, seethe, mald achievement.ZIRNOXBoom=ЦИРНОКС analyze.basic1======Компонент NTM===== @@ -935,7 +935,7 @@ death.attack.electricity=%1$s был убит электрическим ток death.attack.electrified=%1$s превратился в батарейку благодаря %2$s. death.attack.euthanized=%1$s был усыплён %2$s. death.attack.euthanizedSelf2=%1$s выиграл премию Дарвина. -death.attack.euthanizedSelf=%1$s усыпил себя, ну и дурак. +death.attack.euthanizedSelf=%1$s нашёл путь к лучшей жизни в России. death.attack.exhaust=%1$s был превращен в шашлык стартовой ракетой. death.attack.flamethrower=%1$s был кремирован %2$s. death.attack.flamethrower.item=%1$s был кремирован %2$s с помощью %3$s. From 273590a96bd6252d7539e5da7d44f0beae04ec9c Mon Sep 17 00:00:00 2001 From: LegendaryDoge30 Date: Mon, 12 May 2025 13:30:12 +0200 Subject: [PATCH 019/491] bombbs added solinium bomb and changed the rendering because it was fucked up --- .../java/com/hbm/main/ResourceManager.java | 2 +- .../hbm/render/item/ItemRenderLibrary.java | 23 - .../tileentity/RenderNukePrototype.java | 31 +- .../render/tileentity/RenderNukeSolinium.java | 43 +- .../resources/assets/hbm/models/bombs/ufp.obj | 1986 ++++++++++++----- .../assets/hbm/textures/models/bombs/ufp.png | Bin 25660 -> 3644 bytes 6 files changed, 1473 insertions(+), 612 deletions(-) diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index c5b4e6d01..d1af02be6 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -274,7 +274,7 @@ public class ResourceManager { public static final IModelCustom bomb_tsar = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/tsar.obj")).asVBO(); public static final IModelCustom bomb_prototype = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/Prototype.obj")).asVBO(); public static final IModelCustom bomb_fleija = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/fleija.obj")).asVBO(); - public static final IModelCustom bomb_solinium = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/bombs/ufp.obj")); + public static final IModelCustom bomb_solinium = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/ufp.obj")).asVBO(); public static final IModelCustom n2 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/bombs/n2.obj")); public static final IModelCustom bomb_multi = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/BombGeneric.obj")); public static final IModelCustom fstbmb = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/fstbmb.obj")).asVBO(); diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index 928ce2864..2feabfbe3 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -363,29 +363,6 @@ public class ItemRenderLibrary { ResourceManager.bomb_boy.renderAll(); }}); - renderers.put(Item.getItemFromBlock(ModBlocks.nuke_prototype), new ItemRenderBase() { - public void renderInventory() { - GL11.glScaled(2.25, 2.25, 2.25); - } - public void renderCommon() { - GL11.glRotated(90, 0, 1, 0); - bindTexture(ResourceManager.bomb_prototype_tex); - ResourceManager.bomb_prototype.renderAll(); - }}); - - renderers.put(Item.getItemFromBlock(ModBlocks.nuke_solinium), new ItemRenderBase() { - public void renderInventory() { - GL11.glScaled(4, 4, 4); - } - public void renderCommon() { - GL11.glTranslated(0.5, 0, 0); - GL11.glRotated(90, 0, 1, 0); - GL11.glDisable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.bomb_solinium_tex); - ResourceManager.bomb_solinium.renderAll(); - GL11.glEnable(GL11.GL_CULL_FACE); - }}); - renderers.put(Item.getItemFromBlock(ModBlocks.nuke_n2), new ItemRenderBase() { public void renderInventory() { GL11.glTranslated(0, -4, 0); diff --git a/src/main/java/com/hbm/render/tileentity/RenderNukePrototype.java b/src/main/java/com/hbm/render/tileentity/RenderNukePrototype.java index e02f9dece..ecc6730ad 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderNukePrototype.java +++ b/src/main/java/com/hbm/render/tileentity/RenderNukePrototype.java @@ -1,5 +1,9 @@ package com.hbm.render.tileentity; +import com.hbm.blocks.ModBlocks; +import com.hbm.render.item.ItemRenderBase; +import net.minecraft.item.Item; +import net.minecraftforge.client.IItemRenderer; import org.lwjgl.opengl.GL11; import com.hbm.main.ResourceManager; @@ -7,7 +11,7 @@ import com.hbm.main.ResourceManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; -public class RenderNukePrototype extends TileEntitySpecialRenderer { +public class RenderNukePrototype extends TileEntitySpecialRenderer implements IItemRendererProvider { @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) @@ -36,5 +40,30 @@ public class RenderNukePrototype extends TileEntitySpecialRenderer { GL11.glPopMatrix(); } + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.nuke_prototype); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, 0.125, 0); + GL11.glScaled(3, 3, 3); + } + + public void renderCommon() { + GL11.glRotated(90, 0, 1, 0); + GL11.glTranslated(0, 0.125, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glDisable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.bomb_prototype_tex); + ResourceManager.bomb_prototype.renderAll(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_FLAT); + } + }; + } } diff --git a/src/main/java/com/hbm/render/tileentity/RenderNukeSolinium.java b/src/main/java/com/hbm/render/tileentity/RenderNukeSolinium.java index 44e9cb120..bf05c4d26 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderNukeSolinium.java +++ b/src/main/java/com/hbm/render/tileentity/RenderNukeSolinium.java @@ -1,5 +1,9 @@ package com.hbm.render.tileentity; +import com.hbm.blocks.ModBlocks; +import com.hbm.render.item.ItemRenderBase; +import net.minecraft.item.Item; +import net.minecraftforge.client.IItemRenderer; import org.lwjgl.opengl.GL11; import com.hbm.main.ResourceManager; @@ -7,8 +11,8 @@ import com.hbm.main.ResourceManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; -public class RenderNukeSolinium extends TileEntitySpecialRenderer { - +public class RenderNukeSolinium extends TileEntitySpecialRenderer implements IItemRendererProvider { + public RenderNukeSolinium() { } @Override @@ -18,9 +22,9 @@ public class RenderNukeSolinium extends TileEntitySpecialRenderer { GL11.glTranslated(x + 0.5D, y, z + 0.5D); GL11.glEnable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_CULL_FACE); - + GL11.glRotatef(90, 0F, 1F, 0F); - + switch(tileEntity.getBlockMetadata()) { case 2: @@ -32,12 +36,39 @@ public class RenderNukeSolinium extends TileEntitySpecialRenderer { case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; } - + GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.bomb_solinium_tex); ResourceManager.bomb_solinium.renderAll(); - + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_CULL_FACE); GL11.glPopMatrix(); } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.nuke_solinium); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -0.125, 0); + GL11.glScaled(5, 5, 5); + } + + public void renderCommon() { + GL11.glRotated(90, 0, 1, 0); + GL11.glTranslated(0, -0.125, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glDisable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.bomb_solinium_tex); + ResourceManager.bomb_solinium.renderAll(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_FLAT); + } + }; + } } diff --git a/src/main/resources/assets/hbm/models/bombs/ufp.obj b/src/main/resources/assets/hbm/models/bombs/ufp.obj index 0742d49d0..2c63d25bc 100644 --- a/src/main/resources/assets/hbm/models/bombs/ufp.obj +++ b/src/main/resources/assets/hbm/models/bombs/ufp.obj @@ -1,582 +1,1406 @@ -# Blender v2.76 (sub 0) OBJ File: 'ufp.blend' +# Blender 4.0.2 # www.blender.org -o Cylinder -v 0.000000 1.000000 -0.500000 -v 0.000000 1.000000 1.500000 -v 0.191342 0.961940 -0.500000 -v 0.191342 0.961940 1.500000 -v 0.353553 0.853553 -0.500000 -v 0.353553 0.853553 1.500000 -v 0.461940 0.691342 -0.500000 -v 0.461940 0.691342 1.500000 -v 0.500000 0.500000 -0.500000 -v 0.500000 0.500000 1.500000 -v 0.461940 0.308658 -0.500000 -v 0.461940 0.308658 1.500000 -v 0.353553 0.146447 -0.500000 -v 0.353553 0.146447 1.500000 -v 0.191342 0.038060 -0.500000 -v 0.191342 0.038060 1.500000 -v 0.000000 -0.000000 -0.500000 -v 0.000000 0.000000 1.500000 -v -0.191342 0.038060 -0.500000 -v -0.191342 0.038060 1.500000 -v -0.353553 0.146446 -0.500000 -v -0.353553 0.146447 1.500000 -v -0.461940 0.308658 -0.500000 -v -0.461940 0.308658 1.500000 -v -0.500000 0.500000 -0.500000 -v -0.500000 0.500000 1.500000 -v -0.461940 0.691342 -0.500000 -v -0.461940 0.691342 1.500000 -v -0.353553 0.853553 -0.500000 -v -0.353553 0.853554 1.500000 -v -0.191341 0.961940 -0.500000 -v -0.191341 0.961940 1.500000 -v 0.143506 0.846455 1.750000 -v 0.000000 0.875000 1.750000 -v 0.265165 0.765165 1.750000 -v 0.346455 0.643506 1.750000 -v 0.375000 0.500000 1.750000 -v 0.346455 0.356494 1.750000 -v 0.265165 0.234835 1.750000 -v 0.143506 0.153545 1.750000 -v 0.000000 0.125000 1.750000 -v -0.143506 0.153545 1.750000 -v -0.265165 0.234835 1.750000 -v -0.346455 0.356494 1.750000 -v -0.375000 0.500000 1.750000 -v -0.346455 0.643506 1.750000 -v -0.265165 0.765165 1.750000 -v -0.143506 0.846455 1.750000 -v 0.047835 0.615485 1.900000 -v 0.000000 0.625000 1.900000 -v 0.088388 0.588389 1.900000 -v 0.115485 0.547836 1.900000 -v 0.125000 0.500000 1.900000 -v 0.115485 0.452165 1.900000 -v 0.088388 0.411612 1.900000 -v 0.047835 0.384515 1.900000 -v 0.000000 0.375000 1.900000 -v -0.047835 0.384515 1.900000 -v -0.088388 0.411612 1.900000 -v -0.115485 0.452165 1.900000 -v -0.125000 0.500000 1.900000 -v -0.115485 0.547836 1.900000 -v -0.088388 0.588389 1.900000 -v -0.047835 0.615485 1.900000 -v 0.000000 0.750000 -1.750000 -v 0.095671 0.730970 -1.750000 -v 0.176777 0.676777 -1.750000 -v 0.230970 0.595671 -1.750000 -v 0.250000 0.500000 -1.750000 -v 0.230970 0.404329 -1.750000 -v 0.176777 0.323223 -1.750000 -v 0.095671 0.269030 -1.750000 -v 0.000000 0.250000 -1.750000 -v -0.095671 0.269030 -1.750000 -v -0.176777 0.323223 -1.750000 -v -0.230970 0.404329 -1.750000 -v -0.250000 0.500000 -1.750000 -v -0.230970 0.595671 -1.750000 -v -0.176777 0.676777 -1.750000 -v -0.095671 0.730970 -1.750000 -v -0.000000 0.750000 -2.500000 -v 0.095671 0.730970 -2.500000 -v 0.176777 0.676777 -2.500000 -v 0.230970 0.595671 -2.500000 -v 0.250000 0.500000 -2.500000 -v 0.230970 0.404329 -2.500000 -v 0.176777 0.323223 -2.500000 -v 0.095671 0.269030 -2.500000 -v 0.000000 0.250000 -2.500000 -v -0.095671 0.269030 -2.500000 -v -0.176777 0.323223 -2.500000 -v -0.230970 0.404329 -2.500000 -v -0.250000 0.500000 -2.500000 -v -0.230970 0.595671 -2.500000 -v -0.176777 0.676777 -2.500000 -v -0.095671 0.730970 -2.500000 -v -0.530330 1.030330 -1.750000 -v 0.530330 -0.030330 -1.750000 -v -0.530330 1.030330 -2.500000 -v 0.530330 -0.030330 -2.500000 -v -0.265165 0.765165 -1.000000 -v 0.265165 0.234835 -1.000000 -v -0.530330 -0.030330 -1.750000 -v 0.530330 1.030330 -1.750000 -v -0.530330 -0.030330 -2.500000 -v 0.530330 1.030330 -2.500000 -v -0.265165 0.234835 -1.000000 -v 0.265165 0.765165 -1.000000 -vt 0.308738 0.762034 -vt 0.272835 0.762033 -vt 0.272836 0.393966 -vt 0.236932 0.762033 -vt 0.236932 0.393966 -vt 0.201028 0.762033 -vt 0.201029 0.393966 -vt 0.165125 0.762033 -vt 0.165126 0.393966 -vt 0.129222 0.762033 -vt 0.129222 0.393966 -vt 0.093319 0.762033 -vt 0.093319 0.393966 -vt 0.057415 0.762033 -vt 0.057415 0.393966 -vt 0.021512 0.762033 -vt 0.021512 0.393966 -vt 0.595963 0.762035 -vt 0.560060 0.762035 -vt 0.560063 0.393968 -vt 0.524157 0.762035 -vt 0.524160 0.393968 -vt 0.488254 0.762034 -vt 0.488256 0.393967 -vt 0.452351 0.762034 -vt 0.452353 0.393967 -vt 0.416447 0.762034 -vt 0.416449 0.393967 -vt 0.380544 0.762034 -vt 0.380546 0.393967 -vt 0.232444 0.813276 -vt 0.205516 0.813276 -vt 0.344641 0.762034 -vt 0.308739 0.393966 -vt 0.344643 0.393967 -vt 0.281812 0.159539 -vt 0.160637 0.813276 -vt 0.151661 0.866175 -vt 0.142685 0.866175 -vt 0.052928 0.813276 -vt 0.026000 0.813276 -vt 0.304250 0.813276 -vt 0.277323 0.813276 -vt 0.447863 0.813277 -vt 0.124734 0.813276 -vt 0.097806 0.813276 -vt 0.519669 0.813277 -vt 0.340153 0.813277 -vt 0.196540 0.813276 -vt 0.169613 0.813276 -vt 0.591475 0.813278 -vt 0.564548 0.813278 -vt 0.411959 0.813277 -vt 0.268347 0.813276 -vt 0.088831 0.813276 -vt 0.061903 0.813276 -vt 0.483766 0.813277 -vt 0.133710 0.813276 -vt 0.555572 0.813278 -vt 0.528645 0.813277 -vt 0.376056 0.813277 -vt 0.349129 0.813277 -vt 0.782044 0.733935 -vt 0.790337 0.692245 -vt 0.807606 0.695680 -vt 0.420935 0.813277 -vt 0.438886 0.866176 -vt 0.115758 0.866175 -vt 0.106782 0.866175 -vt 0.385032 0.813277 -vt 0.402983 0.866175 -vt 0.079855 0.866175 -vt 0.070879 0.866175 -vt 0.367080 0.866175 -vt 0.358104 0.866175 -vt 0.043952 0.866175 -vt 0.295274 0.866175 -vt 0.286298 0.866175 -vt 0.331177 0.866175 -vt 0.322201 0.866175 -vt 0.582499 0.866176 -vt 0.573523 0.866176 -vt 0.259371 0.866175 -vt 0.250395 0.866175 -vt 0.546596 0.866176 -vt 0.223468 0.866175 -vt 0.214492 0.866175 -vt 0.492742 0.813277 -vt 0.510693 0.866176 -vt 0.187564 0.866175 -vt 0.178589 0.866175 -vt 0.474790 0.866176 -vt 0.465814 0.866176 -vt 0.353620 0.159539 -vt 0.353620 0.021514 -vt 0.371572 0.021514 -vt 0.425427 0.159540 -vt 0.443378 0.159540 -vt 0.102295 0.159539 -vt 0.120246 0.159539 -vt 0.497234 0.159540 -vt 0.515185 0.159540 -vt 0.317716 0.159539 -vt 0.174102 0.159539 -vt 0.192054 0.159539 -vt 0.595966 0.393968 -vt 0.569041 0.159541 -vt 0.389523 0.159540 -vt 0.407475 0.159540 -vt 0.245909 0.159539 -vt 0.066391 0.159539 -vt 0.084343 0.159539 -vt 0.461330 0.159540 -vt 0.479282 0.159540 -vt 0.138198 0.159539 -vt 0.533137 0.159540 -vt 0.551089 0.159541 -vt 0.371571 0.159539 -vt 0.210005 0.159539 -vt 0.227957 0.159539 -vt 0.030488 0.159538 -vt 0.048439 0.159538 -vt 0.693090 0.782494 -vt 0.638990 0.746346 -vt 0.729239 0.728394 -vt 0.030488 0.021513 -vt 0.048439 0.021513 -vt 0.281813 0.021512 -vt 0.299765 0.021512 -vt 0.317716 0.021512 -vt 0.335668 0.021512 -vt 0.569042 0.021515 -vt 0.586993 0.021515 -vt 0.245909 0.021514 -vt 0.263861 0.021514 -vt 0.533138 0.021515 -vt 0.551090 0.021515 -vt 0.210006 0.021513 -vt 0.227957 0.021513 -vt 0.497235 0.021515 -vt 0.515186 0.021515 -vt 0.174102 0.021513 -vt 0.192054 0.021513 -vt 0.461331 0.021515 -vt 0.479283 0.021515 -vt 0.138199 0.021513 -vt 0.156150 0.021513 -vt 0.425427 0.021515 -vt 0.443379 0.021515 -vt 0.102295 0.021513 -vt 0.120247 0.021513 -vt 0.389524 0.021514 -vt 0.407476 0.021514 -vt 0.066391 0.021513 -vt 0.084343 0.021513 -vt 0.915041 0.511196 -vt 0.638990 0.511196 -vt 0.638990 0.373170 -vt 0.846029 0.649222 -vt 0.708003 0.649222 -vt 0.885898 0.083239 -vt 0.762444 0.330146 -vt 0.638990 0.268420 -vt 0.978488 0.206693 -vt 0.916761 0.330146 -vt 0.299764 0.159539 -vt 0.313226 0.813276 -vt 0.241419 0.813276 -vt 0.456838 0.813277 -vt 0.813952 0.702027 -vt 0.817387 0.710320 -vt 0.817387 0.719295 -vt 0.813952 0.727588 -vt 0.807606 0.733935 -vt 0.799313 0.737370 -vt 0.790337 0.737370 -vt 0.775698 0.727588 -vt 0.772263 0.719295 -vt 0.772263 0.710320 -vt 0.775698 0.702027 -vt 0.782044 0.695680 -vt 0.799313 0.692245 -vt 0.429911 0.866175 -vt 0.394007 0.866175 -vt 0.034976 0.866175 -vt 0.537620 0.866176 -vt 0.501717 0.866176 -vt 0.335668 0.159539 -vt 0.586992 0.159541 -vt 0.263861 0.159539 -vt 0.156150 0.159539 -vt 0.675139 0.692245 -vt 0.693090 0.692245 -vt 0.709675 0.699115 -vt 0.722369 0.711809 -vt 0.729239 0.746346 -vt 0.722369 0.762931 -vt 0.709675 0.775624 -vt 0.675139 0.782494 -vt 0.658554 0.775624 -vt 0.645860 0.762931 -vt 0.638990 0.728394 -vt 0.645860 0.711809 -vt 0.658554 0.699115 -vt 0.915041 0.373170 -vt 0.762444 0.021512 -vn 0.195100 0.980800 -0.000000 -vn 0.555600 0.831500 0.000000 -vn 0.831500 0.555600 0.000000 -vn 0.980800 0.195100 -0.000000 -vn 0.980800 -0.195100 0.000000 -vn 0.831500 -0.555600 0.000000 -vn 0.555600 -0.831500 0.000000 -vn 0.195100 -0.980800 0.000000 -vn -0.195100 -0.980800 0.000000 -vn -0.555600 -0.831500 0.000000 -vn -0.831500 -0.555600 0.000000 -vn -0.980800 -0.195100 0.000000 -vn -0.980800 0.195100 0.000000 -vn -0.831500 0.555600 0.000000 -vn 0.746500 0.498800 0.440300 -vn -0.195100 0.980800 0.000000 -vn -0.555600 0.831500 -0.000000 -vn 0.191400 0.962400 -0.192500 -vn 0.511800 -0.101800 0.853000 -vn 0.175200 -0.880600 0.440300 -vn 0.175200 0.880600 0.440300 -vn -0.880600 0.175200 0.440300 -vn 0.746500 -0.498800 0.440300 -vn -0.746500 -0.498800 0.440300 -vn -0.175200 0.880600 0.440300 -vn 0.880600 0.175200 0.440300 -vn -0.175200 -0.880600 0.440300 -vn -0.746500 0.498800 0.440300 -vn 0.498800 0.746500 0.440300 -vn 0.498800 -0.746500 0.440300 -vn -0.880600 -0.175200 0.440300 -vn 0.880600 -0.175200 0.440300 -vn -0.498800 -0.746500 0.440300 -vn -0.498800 0.746500 0.440300 -vn 0.000000 0.000000 1.000000 -vn -0.511800 0.101800 0.853000 -vn 0.433900 -0.289900 0.853000 -vn -0.433900 0.289900 0.853000 -vn 0.289900 -0.433900 0.853000 -vn -0.289900 0.433900 0.853000 -vn 0.101800 -0.511800 0.853000 -vn 0.101800 0.511800 0.853000 -vn -0.101800 0.511800 0.853000 -vn -0.101800 -0.511800 0.853000 -vn 0.289900 0.433900 0.853000 -vn -0.289900 -0.433900 0.853000 -vn 0.433900 0.289900 0.853000 -vn -0.433900 -0.289900 0.853000 -vn 0.511800 0.101800 0.853000 -vn -0.511800 -0.101800 0.853000 -vn -0.962400 0.191400 -0.192500 -vn 0.815900 -0.545200 -0.192500 -vn -0.815900 -0.545200 -0.192500 -vn -0.191400 0.962400 -0.192500 -vn 0.962400 0.191400 -0.192500 -vn -0.191400 -0.962400 -0.192500 -vn -0.815900 0.545200 -0.192500 -vn 0.545200 0.815900 -0.192500 -vn 0.545200 -0.815900 -0.192500 -vn -0.962400 -0.191400 -0.192500 -vn 0.962400 -0.191400 -0.192500 -vn -0.545200 -0.815900 -0.192500 -vn -0.545200 0.815900 -0.192500 -vn 0.815900 0.545200 -0.192500 -vn 0.191400 -0.962400 -0.192500 -vn -0.000000 0.000000 -1.000000 -vn 0.707100 0.707100 0.000000 -vn -0.707100 0.707100 -0.000000 -s off -f 2/1/1 4/2/1 3/3/1 -f 4/2/2 6/4/2 5/5/2 -f 6/4/3 8/6/3 7/7/3 -f 8/6/4 10/8/4 9/9/4 -f 10/8/5 12/10/5 11/11/5 -f 12/10/6 14/12/6 13/13/6 -f 14/12/7 16/14/7 15/15/7 -f 16/14/8 18/16/8 17/17/8 -f 18/18/9 20/19/9 19/20/9 -f 20/19/10 22/21/10 21/22/10 -f 22/21/11 24/23/11 23/24/11 -f 24/23/12 26/25/12 25/26/12 -f 26/25/13 28/27/13 27/28/13 -f 28/27/14 30/29/14 29/30/14 -f 6/4/15 35/31/15 36/32/15 -f 32/33/16 2/1/16 1/34/16 -f 30/29/17 32/33/17 31/35/17 -f 1/34/18 3/3/18 66/36/18 -f 37/37/19 53/38/19 54/39/19 -f 16/14/20 40/40/20 41/41/20 -f 2/1/21 34/42/21 33/43/21 -f 28/27/22 26/25/22 45/44/22 -f 12/10/23 38/45/23 39/46/23 -f 24/23/24 22/21/24 43/47/24 -f 2/1/25 32/33/25 48/48/25 -f 8/6/26 36/49/26 37/50/26 -f 18/18/27 41/51/27 42/52/27 -f 30/29/28 28/27/28 46/53/28 -f 6/4/29 4/2/29 33/54/29 -f 14/12/30 39/55/30 40/56/30 -f 26/25/31 24/23/31 44/57/31 -f 10/8/32 37/37/32 38/58/32 -f 20/19/33 42/59/33 43/60/33 -f 30/29/34 47/61/34 48/62/34 -f 59/63/35 53/64/35 51/65/35 -f 46/66/36 45/44/36 61/67/36 -f 38/45/37 54/68/37 55/69/37 -f 47/70/38 46/53/38 62/71/38 -f 39/55/39 55/72/39 56/73/39 -f 47/61/40 63/74/40 64/75/40 -f 41/41/41 40/40/41 56/76/41 -f 34/42/42 50/77/42 49/78/42 -f 48/48/43 64/79/43 50/80/43 -f 41/51/44 57/81/44 58/82/44 -f 33/54/45 49/83/45 51/84/45 -f 43/60/46 42/59/46 58/85/46 -f 35/31/47 51/86/47 52/87/47 -f 44/88/48 43/47/48 59/89/48 -f 36/49/49 52/90/49 53/91/49 -f 44/57/50 60/92/50 61/93/50 -f 80/94/17 96/95/17 95/96/17 -f 27/28/51 78/97/51 77/98/51 -f 13/13/52 71/99/52 70/100/52 -f 23/24/53 76/101/53 75/102/53 -f 31/35/54 1/34/54 65/103/54 -f 9/9/55 69/104/55 68/105/55 -f 17/106/56 19/20/56 74/107/56 -f 29/30/57 79/108/57 78/109/57 -f 3/3/58 5/5/58 67/110/58 -f 15/15/59 72/111/59 71/112/59 -f 25/26/60 77/113/60 76/114/60 -f 9/9/61 11/11/61 70/115/61 -f 21/22/62 75/116/62 74/117/62 -f 31/35/63 80/94/63 79/118/63 -f 7/7/64 68/119/64 67/120/64 -f 17/17/65 73/121/65 72/122/65 -f 88/123/66 92/124/66 84/125/66 -f 73/121/8 89/126/8 88/127/8 -f 66/36/1 82/128/1 81/129/1 -f 65/103/16 81/130/16 96/131/16 -f 74/107/9 90/132/9 89/133/9 -f 67/110/2 83/134/2 82/135/2 -f 75/116/10 91/136/10 90/137/10 -f 68/119/3 84/138/3 83/139/3 -f 76/101/11 92/140/11 91/141/11 -f 69/104/4 85/142/4 84/143/4 -f 77/113/12 93/144/12 92/145/12 -f 70/115/5 86/146/5 85/147/5 -f 78/97/13 94/148/13 93/149/13 -f 71/99/6 87/150/6 86/151/6 -f 79/108/14 95/152/14 94/153/14 -f 72/111/7 88/154/7 87/155/7 -f 97/156/67 98/157/67 100/158/67 -f 97/156/67 101/159/67 102/160/67 -f 103/161/68 104/162/68 106/163/68 -f 103/161/68 107/164/68 108/165/68 -f 1/34/1 2/1/1 3/3/1 -f 3/3/2 4/2/2 5/5/2 -f 5/5/3 6/4/3 7/7/3 -f 7/7/4 8/6/4 9/9/4 -f 9/9/5 10/8/5 11/11/5 -f 11/11/6 12/10/6 13/13/6 -f 13/13/7 14/12/7 15/15/7 -f 15/15/8 16/14/8 17/17/8 -f 17/106/9 18/18/9 19/20/9 -f 19/20/10 20/19/10 21/22/10 -f 21/22/11 22/21/11 23/24/11 -f 23/24/12 24/23/12 25/26/12 -f 25/26/13 26/25/13 27/28/13 -f 27/28/14 28/27/14 29/30/14 -f 8/6/15 6/4/15 36/32/15 -f 31/35/16 32/33/16 1/34/16 -f 29/30/17 30/29/17 31/35/17 -f 65/166/18 1/34/18 66/36/18 -f 38/58/19 37/37/19 54/39/19 -f 18/16/20 16/14/20 41/41/20 -f 4/2/21 2/1/21 33/43/21 -f 46/66/22 28/27/22 45/44/22 -f 14/12/23 12/10/23 39/46/23 -f 44/88/24 24/23/24 43/47/24 -f 34/167/25 2/1/25 48/48/25 -f 10/8/26 8/6/26 37/50/26 -f 20/19/27 18/18/27 42/52/27 -f 47/70/28 30/29/28 46/53/28 -f 35/168/29 6/4/29 33/54/29 -f 16/14/30 14/12/30 40/56/30 -f 45/169/31 26/25/31 44/57/31 -f 12/10/32 10/8/32 38/58/32 -f 22/21/33 20/19/33 43/60/33 -f 32/33/34 30/29/34 48/62/34 -f 51/65/35 49/170/35 50/171/35 -f 50/171/35 64/172/35 51/65/35 -f 63/173/35 62/174/35 61/175/35 -f 61/175/35 60/176/35 63/173/35 -f 59/63/35 58/177/35 57/178/35 -f 57/178/35 56/179/35 55/180/35 -f 55/180/35 54/181/35 53/64/35 -f 53/64/35 52/182/35 51/65/35 -f 51/65/35 64/172/35 63/173/35 -f 63/173/35 60/176/35 59/63/35 -f 59/63/35 57/178/35 55/180/35 -f 55/180/35 53/64/35 59/63/35 -f 51/65/35 63/173/35 59/63/35 -f 62/183/36 46/66/36 61/67/36 -f 39/46/37 38/45/37 55/69/37 -f 63/184/38 47/70/38 62/71/38 -f 40/56/39 39/55/39 56/73/39 -f 48/62/40 47/61/40 64/75/40 -f 57/185/41 41/41/41 56/76/41 -f 33/43/42 34/42/42 49/78/42 -f 34/167/43 48/48/43 50/80/43 -f 42/52/44 41/51/44 58/82/44 -f 35/168/45 33/54/45 51/84/45 -f 59/186/46 43/60/46 58/85/46 -f 36/32/47 35/31/47 52/87/47 -f 60/187/48 44/88/48 59/89/48 -f 37/50/49 36/49/49 53/91/49 -f 45/169/50 44/57/50 61/93/50 -f 79/118/17 80/94/17 95/96/17 -f 25/26/51 27/28/51 77/98/51 -f 11/11/52 13/13/52 70/100/52 -f 21/22/53 23/24/53 75/102/53 -f 80/188/54 31/35/54 65/103/54 -f 7/7/55 9/9/55 68/105/55 -f 73/189/56 17/106/56 74/107/56 -f 27/28/57 29/30/57 78/109/57 -f 66/190/58 3/3/58 67/110/58 -f 13/13/59 15/15/59 71/112/59 -f 23/24/60 25/26/60 76/114/60 -f 69/191/61 9/9/61 70/115/61 -f 19/20/62 21/22/62 74/117/62 -f 29/30/63 31/35/63 79/118/63 -f 5/5/64 7/7/64 67/120/64 -f 15/15/65 17/17/65 72/122/65 -f 96/192/66 81/193/66 82/194/66 -f 82/194/66 83/195/66 84/125/66 -f 84/125/66 85/196/66 86/197/66 -f 86/197/66 87/198/66 84/125/66 -f 88/123/66 89/199/66 90/200/66 -f 90/200/66 91/201/66 92/124/66 -f 92/124/66 93/202/66 94/203/66 -f 94/203/66 95/204/66 92/124/66 -f 96/192/66 82/194/66 84/125/66 -f 84/125/66 87/198/66 88/123/66 -f 88/123/66 90/200/66 92/124/66 -f 92/124/66 95/204/66 96/192/66 -f 96/192/66 84/125/66 92/124/66 -f 72/122/8 73/121/8 88/127/8 -f 65/166/1 66/36/1 81/129/1 -f 80/188/16 65/103/16 96/131/16 -f 73/189/9 74/107/9 89/133/9 -f 66/190/2 67/110/2 82/135/2 -f 74/117/10 75/116/10 90/137/10 -f 67/120/3 68/119/3 83/139/3 -f 75/102/11 76/101/11 91/141/11 -f 68/105/4 69/104/4 84/143/4 -f 76/114/12 77/113/12 92/145/12 -f 69/191/5 70/115/5 85/147/5 -f 77/98/13 78/97/13 93/149/13 -f 70/100/6 71/99/6 86/151/6 -f 78/109/14 79/108/14 94/153/14 -f 71/112/7 72/111/7 87/155/7 -f 99/205/67 97/156/67 100/158/67 -f 98/157/67 97/156/67 102/160/67 -f 105/206/68 103/161/68 106/163/68 -f 104/162/68 103/161/68 108/165/68 +mtllib ufp.mtl +o Cylinder.001 +v 0.000000 0.937500 -0.562500 +v 0.000000 0.937500 1.437500 +v 0.218750 0.878886 -0.562500 +v 0.218750 0.878886 1.437500 +v 0.378886 0.718750 -0.562500 +v 0.378886 0.718750 1.437500 +v 0.437500 0.500000 -0.562500 +v 0.437500 0.500000 1.437500 +v 0.378886 0.281250 -0.562500 +v 0.378886 0.281250 1.437500 +v 0.218750 0.121114 -0.562500 +v 0.218750 0.121114 1.437500 +v 0.000000 0.062500 -0.562500 +v 0.000000 0.062500 1.437500 +v -0.218750 0.121114 -0.562500 +v -0.218750 0.121114 1.437500 +v -0.378886 0.281250 -0.562500 +v -0.378886 0.281250 1.437500 +v -0.437500 0.500000 -0.562500 +v -0.437500 0.500000 1.437500 +v -0.378886 0.718750 -0.562500 +v -0.378886 0.718750 1.437500 +v -0.218750 0.878886 -0.562500 +v -0.218750 0.878886 1.437500 +v -0.000000 0.687500 -1.812500 +v 0.093750 0.662380 -1.812500 +v 0.162380 0.593750 -1.812500 +v 0.187500 0.500000 -1.812500 +v 0.162380 0.406250 -1.812500 +v 0.093750 0.337620 -1.812500 +v -0.000000 0.312500 -1.812500 +v -0.093750 0.337620 -1.812500 +v -0.162380 0.406250 -1.812500 +v -0.187500 0.500000 -1.812500 +v -0.162380 0.593750 -1.812500 +v -0.093750 0.662380 -1.812500 +v 0.156250 0.770633 1.687500 +v 0.000000 0.812500 1.687500 +v 0.270633 0.656250 1.687500 +v 0.312500 0.500000 1.687500 +v 0.270633 0.343750 1.687500 +v 0.156250 0.229367 1.687500 +v 0.000000 0.187500 1.687500 +v -0.156250 0.229367 1.687500 +v -0.270633 0.343750 1.687500 +v -0.312500 0.500000 1.687500 +v -0.270633 0.656250 1.687500 +v -0.156250 0.770633 1.687500 +v 0.000000 0.500000 1.812500 +v -0.000000 0.750000 -1.812500 +v 0.125000 0.716506 -1.812500 +v 0.216506 0.625000 -1.812500 +v 0.250000 0.500000 -1.812500 +v 0.216506 0.375000 -1.812500 +v 0.125000 0.283494 -1.812500 +v -0.000000 0.250000 -1.812500 +v -0.125000 0.283494 -1.812500 +v -0.216506 0.375000 -1.812500 +v -0.250000 0.500000 -1.812500 +v -0.216506 0.625000 -1.812500 +v -0.125000 0.716506 -1.812500 +v -0.000000 0.687500 -1.187500 +v 0.093750 0.662380 -1.187500 +v 0.162380 0.593750 -1.187500 +v 0.187500 0.500000 -1.187500 +v 0.162380 0.406250 -1.187500 +v 0.093750 0.337620 -1.187500 +v -0.000000 0.312500 -1.187500 +v -0.093750 0.337620 -1.187500 +v -0.162380 0.406250 -1.187500 +v -0.187500 0.500000 -1.187500 +v -0.162380 0.593750 -1.187500 +v -0.093750 0.662380 -1.187500 +v 0.287262 0.256932 -0.562500 +v 0.243068 0.212738 -0.562500 +v 0.331456 0.212738 -0.562500 +v 0.287262 0.256932 -1.750000 +v 0.243068 0.212738 -1.750000 +v 0.331456 0.212738 -1.812500 +v 0.287262 0.168544 -1.812500 +v 0.419845 0.124350 -1.812500 +v 0.375650 0.080155 -1.812500 +v 0.419845 0.124350 -0.687500 +v 0.375650 0.080155 -0.687500 +v 0.287262 0.168544 -0.562500 +v 0.000000 0.937500 1.187500 +v 0.218750 0.878886 1.187500 +v -0.218750 0.878886 1.187500 +v 0.000000 1.000000 1.187500 +v 0.250000 0.933013 1.187500 +v 0.000000 1.000000 1.312500 +v -0.250000 0.933013 1.187500 +v -0.433013 0.750000 1.187500 +v -0.250000 0.933013 1.312500 +v -0.433013 0.750000 1.312500 +v -0.218750 0.878886 1.312500 +v -0.378886 0.718750 1.312500 +v 0.000000 0.937500 1.312500 +v 0.218750 0.878886 1.312500 +v 0.378886 0.718750 1.312500 +v 0.250000 0.933013 1.312500 +v 0.433013 0.750000 1.312500 +v 0.433013 0.750000 1.187500 +v 0.500000 0.500000 1.312500 +v 0.500000 0.500000 1.187500 +v 0.433013 0.250000 1.312500 +v 0.437500 0.500000 1.312500 +v 0.378886 0.281250 1.312500 +v 0.218750 0.121114 1.312500 +v 0.000000 0.062500 1.312500 +v 0.250000 0.066987 1.312500 +v 0.250000 0.066987 1.187500 +v 0.000000 0.000000 1.312500 +v 0.000000 0.000000 1.187500 +v -0.250000 0.066987 1.312500 +v -0.250000 0.066987 1.187500 +v -0.433013 0.250000 1.312500 +v -0.218750 0.121114 1.312500 +v -0.378886 0.281250 1.312500 +v -0.437500 0.500000 1.312500 +v -0.500000 0.500000 1.312500 +v -0.500000 0.500000 1.187500 +v -0.433013 0.250000 1.187500 +v -0.437500 0.500000 1.187500 +v -0.378886 0.281250 1.187500 +v -0.378886 0.718750 1.187500 +v -0.218750 0.121114 1.187500 +v 0.000000 0.062500 1.187500 +v 0.218750 0.121114 1.187500 +v 0.378886 0.281250 1.187500 +v 0.437500 0.500000 1.187500 +v 0.433013 0.250000 1.187500 +v 0.378886 0.718750 1.187500 +v 0.253118 0.841506 1.187500 +v 0.253118 0.841506 -0.312500 +v 0.297312 0.885701 1.187500 +v 0.297312 0.885701 -0.312500 +v 0.385701 0.797312 1.187500 +v 0.385701 0.797312 -0.312500 +v 0.341506 0.753118 1.187500 +v 0.341506 0.753118 -0.312500 +v 0.253118 0.841506 1.375000 +v 0.253118 0.841506 1.312500 +v 0.297312 0.885701 1.375000 +v 0.341506 0.753118 1.375000 +v 0.341506 0.753118 1.312500 +v 0.385701 0.797312 1.375000 +v 0.385701 0.797312 1.312500 +v 0.297312 0.885701 1.312500 +v 0.253118 0.841506 -0.437500 +v 0.253118 0.841506 -0.500000 +v 0.297312 0.885701 -0.437500 +v 0.297312 0.885701 -0.500000 +v 0.385701 0.797312 -0.437500 +v 0.385701 0.797312 -0.500000 +v 0.341506 0.753118 -0.437500 +v 0.341506 0.753118 -0.500000 +v 0.000000 0.937500 -0.437500 +v 0.218750 0.878886 -0.437500 +v -0.218750 0.878886 -0.437500 +v 0.000000 1.000000 -0.437500 +v 0.250000 0.933013 -0.437500 +v 0.000000 1.000000 -0.312500 +v -0.250000 0.933013 -0.437500 +v -0.433013 0.750000 -0.437500 +v -0.250000 0.933013 -0.312500 +v -0.433013 0.750000 -0.312500 +v -0.218750 0.878886 -0.312500 +v -0.378886 0.718750 -0.312500 +v 0.000000 0.937500 -0.312500 +v 0.218750 0.878886 -0.312500 +v 0.378886 0.718750 -0.312500 +v 0.250000 0.933013 -0.312500 +v 0.433013 0.750000 -0.312500 +v 0.433013 0.750000 -0.437500 +v 0.500000 0.500000 -0.312500 +v 0.500000 0.500000 -0.437500 +v 0.433013 0.250000 -0.312500 +v 0.437500 0.500000 -0.312500 +v 0.378886 0.281250 -0.312500 +v 0.218750 0.121114 -0.312500 +v 0.000000 0.062500 -0.312500 +v 0.250000 0.066987 -0.312500 +v 0.250000 0.066987 -0.437500 +v 0.000000 0.000000 -0.312500 +v 0.000000 0.000000 -0.437500 +v -0.250000 0.066987 -0.312500 +v -0.250000 0.066987 -0.437500 +v -0.433013 0.250000 -0.312500 +v -0.218750 0.121114 -0.312500 +v -0.378886 0.281250 -0.312500 +v -0.437500 0.500000 -0.312500 +v -0.500000 0.500000 -0.312500 +v -0.500000 0.500000 -0.437500 +v -0.433013 0.250000 -0.437500 +v -0.437500 0.500000 -0.437500 +v -0.378886 0.281250 -0.437500 +v -0.378886 0.718750 -0.437500 +v -0.218750 0.121114 -0.437500 +v 0.000000 0.062500 -0.437500 +v 0.218750 0.121114 -0.437500 +v 0.378886 0.281250 -0.437500 +v 0.437500 0.500000 -0.437500 +v 0.433013 0.250000 -0.437500 +v 0.378886 0.718750 -0.437500 +v 0.341507 0.246882 1.187500 +v 0.341507 0.246882 -0.312500 +v 0.385701 0.202688 1.187500 +v 0.385701 0.202688 -0.312500 +v 0.297312 0.114299 1.187500 +v 0.297312 0.114299 -0.312500 +v 0.253118 0.158494 1.187500 +v 0.253118 0.158494 -0.312500 +v 0.341507 0.246882 1.375000 +v 0.341507 0.246882 1.312500 +v 0.385701 0.202688 1.375000 +v 0.253118 0.158494 1.375000 +v 0.253118 0.158494 1.312500 +v 0.297312 0.114299 1.375000 +v 0.297312 0.114299 1.312500 +v 0.385701 0.202688 1.312500 +v 0.341506 0.246882 -0.437500 +v 0.341506 0.246882 -0.500000 +v 0.385701 0.202688 -0.437500 +v 0.385701 0.202688 -0.500000 +v 0.297312 0.114299 -0.437500 +v 0.297312 0.114299 -0.500000 +v 0.253118 0.158494 -0.437500 +v 0.253118 0.158494 -0.500000 +v -0.341506 0.753118 1.187500 +v -0.341506 0.753118 -0.312500 +v -0.385701 0.797312 1.187500 +v -0.385701 0.797312 -0.312500 +v -0.297312 0.885701 1.187500 +v -0.297312 0.885701 -0.312500 +v -0.253118 0.841506 1.187500 +v -0.253118 0.841506 -0.312500 +v -0.341506 0.753118 1.375000 +v -0.341506 0.753118 1.312500 +v -0.385701 0.797312 1.375000 +v -0.253118 0.841506 1.375000 +v -0.253118 0.841506 1.312500 +v -0.297312 0.885701 1.375000 +v -0.297312 0.885701 1.312500 +v -0.385701 0.797312 1.312500 +v -0.341506 0.753118 -0.437500 +v -0.341506 0.753118 -0.500000 +v -0.385701 0.797312 -0.437500 +v -0.385701 0.797312 -0.500000 +v -0.297312 0.885701 -0.437500 +v -0.297312 0.885701 -0.500000 +v -0.253118 0.841506 -0.437500 +v -0.253118 0.841506 -0.500000 +v -0.253118 0.158494 1.187500 +v -0.253118 0.158494 -0.312500 +v -0.297312 0.114299 1.187500 +v -0.297312 0.114299 -0.312500 +v -0.385701 0.202688 1.187500 +v -0.385701 0.202688 -0.312500 +v -0.341506 0.246882 1.187500 +v -0.341506 0.246882 -0.312500 +v -0.253118 0.158494 1.375000 +v -0.253118 0.158494 1.312500 +v -0.297312 0.114299 1.375000 +v -0.341506 0.246882 1.375000 +v -0.341506 0.246882 1.312500 +v -0.385701 0.202688 1.375000 +v -0.385701 0.202688 1.312500 +v -0.297312 0.114299 1.312500 +v -0.253118 0.158494 -0.437500 +v -0.253118 0.158494 -0.500000 +v -0.297312 0.114299 -0.437500 +v -0.297312 0.114299 -0.500000 +v -0.385701 0.202688 -0.437500 +v -0.385701 0.202688 -0.500000 +v -0.341506 0.246882 -0.437500 +v -0.341506 0.246882 -0.500000 +v 0.243068 0.787262 -0.562500 +v 0.287262 0.743068 -0.562500 +v 0.287262 0.831456 -0.562500 +v 0.243068 0.787262 -1.750000 +v 0.287262 0.743068 -1.750000 +v 0.287262 0.831456 -1.812500 +v 0.331456 0.787262 -1.812500 +v 0.375650 0.919845 -1.812500 +v 0.419845 0.875650 -1.812500 +v 0.375650 0.919845 -0.687500 +v 0.419845 0.875650 -0.687500 +v 0.331456 0.787262 -0.562500 +v -0.287262 0.743068 -0.562500 +v -0.243068 0.787262 -0.562500 +v -0.331456 0.787262 -0.562500 +v -0.287262 0.743068 -1.750000 +v -0.243068 0.787262 -1.750000 +v -0.331456 0.787262 -1.812500 +v -0.287262 0.831456 -1.812500 +v -0.419845 0.875650 -1.812500 +v -0.375650 0.919845 -1.812500 +v -0.419845 0.875650 -0.687500 +v -0.375650 0.919845 -0.687500 +v -0.287262 0.831456 -0.562500 +v -0.243068 0.212738 -0.562500 +v -0.287262 0.256932 -0.562500 +v -0.287262 0.168544 -0.562500 +v -0.243068 0.212738 -1.750000 +v -0.287262 0.256932 -1.750000 +v -0.287262 0.168544 -1.812500 +v -0.331456 0.212738 -1.812500 +v -0.375650 0.080155 -1.812500 +v -0.419844 0.124349 -1.812500 +v -0.375650 0.080155 -0.687500 +v -0.419844 0.124349 -0.687500 +v -0.331456 0.212738 -0.562500 +vn -0.0000 0.9751 0.2217 +vn 0.5000 0.8660 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.4876 0.8445 0.2217 +vn 0.8660 0.5000 -0.0000 +vn 0.8445 0.4876 0.2217 +vn 1.0000 -0.0000 -0.0000 +vn 0.9751 -0.0000 0.2217 +vn 0.8660 -0.5000 -0.0000 +vn 0.8445 -0.4876 0.2217 +vn 0.5000 -0.8660 -0.0000 +vn 0.4876 -0.8445 0.2217 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 -0.9751 0.2217 +vn -0.5000 -0.8660 -0.0000 +vn -0.4876 -0.8445 0.2217 +vn -0.8660 -0.5000 -0.0000 +vn -0.8445 -0.4876 0.2217 +vn -1.0000 -0.0000 -0.0000 +vn -0.9751 -0.0000 0.2217 +vn -0.8660 0.5000 -0.0000 +vn 0.6120 0.3533 0.7076 +vn -0.8445 0.4876 0.2217 +vn -0.5000 0.8660 -0.0000 +vn -0.4876 0.8445 0.2217 +vn -0.8564 -0.4945 -0.1483 +vn -0.9889 -0.0000 -0.1483 +vn -0.4945 -0.8564 -0.1483 +vn -0.0000 -0.9889 -0.1483 +vn 0.4945 -0.8564 -0.1483 +vn 0.8564 -0.4945 -0.1483 +vn 0.9889 -0.0000 -0.1483 +vn -0.0000 0.9889 -0.1483 +vn -0.4945 0.8564 -0.1483 +vn 0.4945 0.8564 -0.1483 +vn 0.8564 0.4945 -0.1483 +vn -0.8564 0.4945 -0.1483 +vn 0.7066 -0.0000 0.7076 +vn -0.0000 -0.0000 1.0000 +vn -0.6120 0.3533 0.7076 +vn -0.7066 -0.0000 0.7076 +vn -0.6120 -0.3533 0.7076 +vn -0.3533 -0.6120 0.7076 +vn -0.0000 -0.7066 0.7076 +vn 0.3533 -0.6120 0.7076 +vn 0.6120 -0.3533 0.7076 +vn -0.0000 0.7066 0.7076 +vn 0.3533 0.6120 0.7076 +vn -0.3533 0.6120 0.7076 +vn -0.0000 -0.0000 -1.0000 +vn -0.7071 0.7071 -0.0000 +vn 0.7071 0.7071 -0.0000 +vn -0.5000 0.5000 -0.7071 +vn 0.7071 -0.7071 -0.0000 +vn 0.5000 -0.5000 0.7071 +vn -0.7071 -0.7071 -0.0000 +vn -0.5000 -0.5000 -0.7071 +vn 0.5000 0.5000 0.7071 +vn 0.5000 -0.5000 -0.7071 +vn -0.5000 0.5000 0.7071 +vn 0.5000 0.5000 -0.7071 +vn -0.5000 -0.5000 0.7071 +vt 0.102273 0.727273 +vt 0.465909 0.681818 +vt 0.465909 0.727273 +vt 0.102273 0.681818 +vt 0.465909 0.636364 +vt 0.102273 0.636364 +vt 0.465909 0.590909 +vt 0.102273 0.590909 +vt 0.465909 0.545455 +vt 0.102273 0.545455 +vt 0.465909 0.500000 +vt 0.102273 0.500000 +vt 0.465909 0.454545 +vt 0.102273 1.000000 +vt 0.465909 0.954546 +vt 0.465909 1.000000 +vt 0.102273 0.954546 +vt 0.465909 0.909091 +vt 0.102273 0.909091 +vt 0.465909 0.863636 +vt 0.102273 0.863636 +vt 0.465909 0.818182 +vt 0.102273 0.681814 +vt 0.056818 0.642860 +vt 0.102273 0.636367 +vt 0.102273 0.818182 +vt 0.465909 0.772727 +vt 0.102273 0.772727 +vt 0.693182 0.873377 +vt 0.693182 0.899351 +vt 0.704545 0.693182 +vt 0.818182 0.715909 +vt 0.704545 0.715909 +vt 0.693182 0.918831 +vt 0.693182 0.944805 +vt 0.693182 0.964286 +vt 0.693182 0.990260 +vt 0.693182 0.490260 +vt 0.693182 0.535714 +vt 0.693182 0.581169 +vt 0.693182 0.762987 +vt 0.693182 0.717532 +vt 0.693182 0.626623 +vt 0.693182 0.808442 +vt 0.693182 0.672078 +vt 0.693182 0.853896 +vt 0.056818 0.597405 +vt 0.056818 0.629867 +vt -0.000000 0.613636 +vt 0.102273 0.863633 +vt 0.056818 0.824678 +vt 0.102273 0.818186 +vt 0.102273 0.909087 +vt 0.056818 0.870133 +vt 0.102273 0.863640 +vt 0.102273 0.954542 +vt 0.056818 0.915587 +vt 0.102273 0.909095 +vt 0.102273 0.999996 +vt 0.056818 0.961042 +vt 0.102273 0.954549 +vt 0.102273 0.499996 +vt 0.056818 0.461042 +vt 0.102273 0.454549 +vt 0.102273 0.545451 +vt 0.056818 0.506496 +vt 0.102273 0.500004 +vt 0.102273 0.590905 +vt 0.056818 0.551951 +vt 0.102273 0.545458 +vt 0.102273 0.772724 +vt 0.056818 0.733769 +vt 0.102273 0.727277 +vt 0.102273 0.681822 +vt 0.056818 0.720777 +vt 0.056818 0.688314 +vt 0.102273 0.636360 +vt 0.102273 0.590913 +vt 0.056818 0.675322 +vt -0.000000 0.659091 +vt 0.056818 0.584413 +vt -0.000000 0.568182 +vt 0.056818 0.538958 +vt 0.000000 0.522727 +vt 0.056818 0.493504 +vt -0.000000 0.477273 +vt 0.056818 0.993504 +vt -0.000000 0.977273 +vt 0.056818 0.948049 +vt 0.000000 0.931818 +vt 0.056818 0.902595 +vt -0.000000 0.886364 +vt 0.056818 0.857140 +vt -0.000000 0.840909 +vt 0.056818 0.766231 +vt -0.000000 0.750000 +vt -0.000000 0.704546 +vt 0.704545 0.714286 +vt 0.693182 0.691559 +vt 0.704545 0.694805 +vt 0.704545 0.668831 +vt 0.693182 0.646104 +vt 0.704545 0.649351 +vt 0.704545 0.623377 +vt 0.693182 0.600649 +vt 0.704545 0.603896 +vt 0.704545 0.577922 +vt 0.693182 0.555195 +vt 0.704545 0.558442 +vt 0.704545 0.532467 +vt 0.693182 0.509740 +vt 0.704545 0.512987 +vt 0.704545 0.487013 +vt 0.693182 0.464286 +vt 0.704545 0.467533 +vt 0.704545 0.987013 +vt 0.704545 0.967533 +vt 0.704545 0.941559 +vt 0.704545 0.922078 +vt 0.704545 0.876624 +vt 0.704545 0.831169 +vt 0.693182 0.827922 +vt 0.704545 0.785714 +vt 0.693182 0.782468 +vt 0.704545 0.740260 +vt 0.693182 0.737013 +vt 0.897727 0.965909 +vt 0.846591 0.936385 +vt 0.846591 0.995433 +vt 0.704545 0.920455 +vt 0.818182 0.943182 +vt 0.704545 0.943182 +vt 0.704545 0.511364 +vt 0.818182 0.534091 +vt 0.704545 0.534091 +vt 0.704545 0.738636 +vt 0.818182 0.761364 +vt 0.704545 0.761364 +vt 0.704545 0.647727 +vt 0.818182 0.670455 +vt 0.704545 0.670455 +vt 0.704545 0.875000 +vt 0.818182 0.897727 +vt 0.704545 0.897727 +vt 0.704545 0.465909 +vt 0.818182 0.488636 +vt 0.704545 0.488636 +vt 0.704545 0.602273 +vt 0.818182 0.625000 +vt 0.704545 0.625000 +vt 0.704545 0.829546 +vt 0.818182 0.852273 +vt 0.704545 0.852273 +vt 0.704545 0.965909 +vt 0.818182 0.988637 +vt 0.704545 0.988637 +vt 0.704545 0.556818 +vt 0.818182 0.579545 +vt 0.704545 0.579545 +vt 0.704545 0.784091 +vt 0.818182 0.806818 +vt 0.704545 0.806818 +vt 0.102273 0.772731 +vt 0.056818 0.811686 +vt 0.056818 0.779223 +vt -0.000000 0.795455 +vt 0.238636 0.170455 +vt 0.011364 0.159091 +vt 0.238636 0.159091 +vt 0.011364 0.181818 +vt 0.000000 0.170455 +vt 0.011364 0.170455 +vt 0.477273 0.181818 +vt 0.250000 0.204545 +vt 0.261364 0.170455 +vt 0.250000 0.170455 +vt 0.238636 0.181818 +vt 0.250000 0.181818 +vt 0.238636 0.215909 +vt 0.034091 0.204545 +vt 0.238636 0.204545 +vt 0.000000 0.204545 +vt 0.011364 0.204545 +vt 0.269886 0.329545 +vt 0.227273 0.318182 +vt 0.272727 0.318182 +vt 0.275568 0.329545 +vt 0.318182 0.318182 +vt 0.315341 0.329545 +vt 0.227273 0.295455 +vt 0.272727 0.295455 +vt 0.318182 0.295455 +vt 0.363636 0.318182 +vt 0.360795 0.329545 +vt 0.360795 0.284091 +vt 0.318182 0.295455 +vt 0.321023 0.284091 +vt 0.275568 0.284091 +vt 0.272727 0.295455 +vt 0.269886 0.284091 +vt 0.227273 0.295455 +vt 0.230114 0.284091 +vt 0.184659 0.284091 +vt 0.181818 0.295455 +vt 0.181818 0.295455 +vt 0.181818 0.318182 +vt 0.136364 0.295455 +vt 0.136364 0.318182 +vt 0.178977 0.284091 +vt 0.136364 0.295455 +vt 0.139205 0.284091 +vt 0.090909 0.295455 +vt 0.090909 0.318182 +vt 0.133523 0.284091 +vt 0.090909 0.295455 +vt 0.093750 0.284091 +vt 0.088068 0.284091 +vt 0.045455 0.295455 +vt 0.048295 0.284091 +vt 0.042614 0.284091 +vt -0.000000 0.295455 +vt 0.002841 0.284091 +vt 0.045455 0.295455 +vt 0.045455 0.318182 +vt 0.000000 0.295455 +vt -0.000000 0.318182 +vt 0.500000 0.295455 +vt 0.545455 0.318182 +vt 0.500000 0.318182 +vt 0.542614 0.284091 +vt 0.500000 0.295455 +vt 0.502841 0.284091 +vt 0.454545 0.295455 +vt 0.454545 0.318182 +vt 0.457386 0.284091 +vt 0.454545 0.295455 +vt 0.451705 0.284091 +vt 0.409091 0.295455 +vt 0.411932 0.284091 +vt 0.406250 0.284091 +vt 0.363636 0.295455 +vt 0.366477 0.284091 +vt 0.409091 0.295455 +vt 0.409091 0.318182 +vt 0.363636 0.295455 +vt 0.411932 0.329545 +vt 0.451705 0.329545 +vt 0.366477 0.329545 +vt 0.406250 0.329545 +vt 0.457386 0.329545 +vt 0.497159 0.329545 +vt 0.502841 0.329545 +vt 0.542614 0.329545 +vt 0.002841 0.329545 +vt 0.042614 0.329545 +vt 0.088068 0.329545 +vt 0.093750 0.329545 +vt 0.133523 0.329545 +vt 0.139205 0.329545 +vt 0.178977 0.329545 +vt 0.184659 0.329545 +vt 0.224432 0.329545 +vt 0.386364 0.431818 +vt 0.659091 0.443182 +vt 0.386364 0.443182 +vt 0.659091 0.431818 +vt 0.386364 0.409091 +vt 0.659091 0.409091 +vt 0.386364 0.397727 +vt 0.659091 0.397727 +vt 0.363636 0.431818 +vt 0.375000 0.443182 +vt 0.363636 0.443182 +vt 0.352273 0.431818 +vt 0.363636 0.409091 +vt 0.375000 0.409091 +vt 0.363636 0.397727 +vt 0.375000 0.397727 +vt 0.375000 0.431818 +vt 0.670455 0.431818 +vt 0.681818 0.443182 +vt 0.670455 0.443182 +vt 0.681818 0.431818 +vt 0.670455 0.409091 +vt 0.681818 0.409091 +vt 0.670455 0.397727 +vt 0.681818 0.397727 +vt 0.693182 0.431818 +vt 0.693182 0.409091 +vt 0.269886 0.272727 +vt 0.227273 0.261364 +vt 0.272727 0.261364 +vt 0.275568 0.272727 +vt 0.318182 0.261364 +vt 0.315341 0.272727 +vt 0.227273 0.238636 +vt 0.272727 0.238636 +vt 0.318182 0.238636 +vt 0.363636 0.261364 +vt 0.360795 0.272727 +vt 0.360795 0.227273 +vt 0.318182 0.238636 +vt 0.321023 0.227273 +vt 0.275568 0.227273 +vt 0.272727 0.238636 +vt 0.269886 0.227273 +vt 0.227273 0.238636 +vt 0.230114 0.227273 +vt 0.184659 0.227273 +vt 0.181818 0.238636 +vt 0.181818 0.238636 +vt 0.181818 0.261364 +vt 0.136364 0.238636 +vt 0.136364 0.261364 +vt 0.139205 0.227273 +vt 0.136364 0.238636 +vt 0.090909 0.238636 +vt 0.090909 0.261364 +vt 0.133523 0.227273 +vt 0.090909 0.238636 +vt 0.093750 0.227273 +vt 0.088068 0.227273 +vt 0.045455 0.238636 +vt 0.048295 0.227273 +vt 0.042614 0.227273 +vt -0.000000 0.238636 +vt 0.002841 0.227273 +vt 0.045455 0.238636 +vt 0.045455 0.261364 +vt 0.000000 0.238636 +vt -0.000000 0.261364 +vt 0.500000 0.238636 +vt 0.545455 0.261364 +vt 0.500000 0.261364 +vt 0.502841 0.227273 +vt 0.545455 0.238636 +vt 0.500000 0.238636 +vt 0.454545 0.238636 +vt 0.454545 0.261364 +vt 0.497159 0.227273 +vt 0.454545 0.238636 +vt 0.457386 0.227273 +vt 0.411932 0.227273 +vt 0.409091 0.238636 +vt 0.406250 0.227273 +vt 0.363636 0.238636 +vt 0.366477 0.227273 +vt 0.409091 0.238636 +vt 0.409091 0.261364 +vt 0.363636 0.238636 +vt 0.411932 0.272727 +vt 0.451705 0.272727 +vt 0.406250 0.272727 +vt 0.457386 0.272727 +vt 0.497159 0.272727 +vt 0.502841 0.272727 +vt 0.542614 0.272727 +vt 0.042614 0.272727 +vt 0.048295 0.272727 +vt 0.088068 0.272727 +vt 0.133523 0.272727 +vt 0.139205 0.272727 +vt 0.178977 0.272727 +vt 0.184659 0.272727 +vt 0.224432 0.272727 +vt 0.034091 0.431818 +vt 0.306818 0.443182 +vt 0.034091 0.443182 +vt 0.306818 0.431818 +vt 0.034091 0.409091 +vt 0.306818 0.409091 +vt 0.034091 0.397727 +vt 0.306818 0.397727 +vt 0.011364 0.431818 +vt 0.022727 0.443182 +vt 0.011364 0.443182 +vt 0.000000 0.431818 +vt 0.011364 0.409091 +vt 0.022727 0.409091 +vt 0.011364 0.397727 +vt 0.022727 0.397727 +vt 0.022727 0.431818 +vt 0.318182 0.443182 +vt 0.329545 0.431818 +vt 0.329545 0.443182 +vt 0.318182 0.409091 +vt 0.329545 0.409091 +vt 0.318182 0.397727 +vt 0.329545 0.397727 +vt 0.340909 0.431818 +vt 0.340909 0.409091 +vt 0.034091 0.375000 +vt 0.306818 0.386364 +vt 0.034091 0.386364 +vt 0.306818 0.375000 +vt 0.034091 0.352273 +vt 0.306818 0.352273 +vt 0.034091 0.340909 +vt 0.306818 0.340909 +vt 0.011364 0.375000 +vt 0.022727 0.386364 +vt 0.011364 0.386364 +vt -0.000000 0.375000 +vt 0.011364 0.352273 +vt 0.022727 0.352273 +vt 0.011364 0.340909 +vt 0.022727 0.340909 +vt 0.022727 0.375000 +vt 0.318182 0.375000 +vt 0.329545 0.386364 +vt 0.318182 0.386364 +vt 0.329545 0.375000 +vt 0.318182 0.352273 +vt 0.329545 0.352273 +vt 0.318182 0.340909 +vt 0.329545 0.340909 +vt 0.340909 0.375000 +vt 0.340909 0.352273 +vt 0.386364 0.375000 +vt 0.659091 0.386364 +vt 0.386364 0.386364 +vt 0.659091 0.375000 +vt 0.386364 0.352273 +vt 0.659091 0.352273 +vt 0.386364 0.340909 +vt 0.659091 0.340909 +vt 0.363636 0.375000 +vt 0.375000 0.386364 +vt 0.363636 0.386364 +vt 0.352273 0.352273 +vt 0.352273 0.375000 +vt 0.375000 0.352273 +vt 0.363636 0.340909 +vt 0.375000 0.340909 +vt 0.375000 0.375000 +vt 0.363636 0.352273 +vt 0.670455 0.375000 +vt 0.681818 0.386364 +vt 0.670455 0.386364 +vt 0.681818 0.375000 +vt 0.670455 0.352273 +vt 0.681818 0.352273 +vt 0.670455 0.340909 +vt 0.681818 0.340909 +vt 0.693182 0.352273 +vt 0.693182 0.375000 +vt 0.727273 0.170455 +vt 0.500000 0.159091 +vt 0.727273 0.159091 +vt 0.500000 0.170455 +vt 0.488636 0.181818 +vt 0.488636 0.170455 +vt 0.965909 0.181818 +vt 0.738636 0.204545 +vt 0.750000 0.170455 +vt 0.738636 0.170455 +vt 0.727273 0.181818 +vt 0.738636 0.181818 +vt 0.727273 0.204545 +vt 0.727273 0.215909 +vt 0.522727 0.204545 +vt 0.488636 0.204545 +vt 0.500000 0.181818 +vt 0.500000 0.204545 +vt 0.238636 0.102273 +vt 0.011364 0.090909 +vt 0.238636 0.090909 +vt 0.011364 0.113636 +vt 0.000000 0.102273 +vt 0.011364 0.102273 +vt 0.477273 0.113636 +vt 0.250000 0.136364 +vt 0.261364 0.102273 +vt 0.250000 0.102273 +vt 0.238636 0.113636 +vt 0.250000 0.113636 +vt 0.238636 0.147727 +vt 0.034091 0.136364 +vt 0.238636 0.136364 +vt 0.011364 0.136364 +vt 0.000000 0.113636 +vt 0.727273 0.102273 +vt 0.500000 0.090909 +vt 0.727273 0.090909 +vt 0.500000 0.102273 +vt 0.488636 0.113636 +vt 0.488636 0.102273 +vt 0.965909 0.113636 +vt 0.738636 0.136364 +vt 0.750000 0.102273 +vt 0.738636 0.102273 +vt 0.727273 0.113636 +vt 0.738636 0.113636 +vt 0.727273 0.147727 +vt 0.522727 0.136364 +vt 0.727273 0.136364 +vt 0.488636 0.136364 +vt 0.500000 0.113636 +vt 0.500000 0.136364 +vt 0.102273 0.454545 +vt 0.818182 0.693182 +vt 0.693182 0.464286 +vt 0.693182 0.646105 +vt 0.102273 0.727269 +vt 0.693182 0.672078 +vt 0.704545 0.896104 +vt 0.704545 0.850649 +vt 0.704545 0.805195 +vt 0.704545 0.759740 +vt 0.863636 1.000000 +vt 0.880682 0.995433 +vt 0.893160 0.982955 +vt 0.893160 0.948864 +vt 0.880682 0.936385 +vt 0.863636 0.931818 +vt 0.834113 0.948864 +vt 0.829545 0.965909 +vt 0.834113 0.982955 +vt 0.818182 0.920455 +vt 0.818182 0.511364 +vt 0.818182 0.738636 +vt 0.818182 0.647727 +vt 0.818182 0.875000 +vt 0.818182 0.465909 +vt 0.818182 0.602273 +vt 0.818182 0.829546 +vt 0.818182 0.965909 +vt 0.818182 0.556818 +vt 0.818182 0.784091 +vt 0.102273 0.818178 +vt 0.000000 0.181818 +vt 0.477273 0.170455 +vt 0.454545 0.204545 +vt 0.034091 0.215909 +vt 0.227273 0.170455 +vt 0.230114 0.329545 +vt 0.321023 0.329545 +vt 0.315341 0.284091 +vt 0.224432 0.284091 +vt 0.545455 0.295455 +vt 0.545455 0.295455 +vt 0.497159 0.284091 +vt 0.048295 0.329545 +vt 0.352273 0.409091 +vt 0.230114 0.272727 +vt 0.321023 0.272727 +vt 0.315341 0.227273 +vt 0.224432 0.227273 +vt 0.178977 0.227273 +vt 0.545455 0.238636 +vt 0.542614 0.227273 +vt 0.451705 0.227273 +vt 0.366477 0.272727 +vt 0.002841 0.272727 +vt 0.093750 0.272727 +vt 0.000000 0.409091 +vt 0.318182 0.431818 +vt -0.000000 0.352273 +vt 0.965909 0.170455 +vt 0.943182 0.204545 +vt 0.522727 0.215909 +vt 0.715909 0.170455 +vt 0.477273 0.102273 +vt 0.454545 0.136364 +vt 0.034091 0.147727 +vt 0.000000 0.136364 +vt 0.227273 0.102273 +vt 0.965909 0.102273 +vt 0.943182 0.136364 +vt 0.522727 0.147727 +vt 0.715909 0.102273 +s 1 +usemtl Texture +f 2/1/1 3/2/2 1/3/3 +f 4/4/4 5/5/5 3/2/2 +f 6/6/6 7/7/7 5/5/5 +f 8/8/8 9/9/9 7/7/7 +f 10/10/10 11/11/11 9/9/9 +f 12/12/12 13/13/13 11/11/11 +f 14/14/14 15/15/15 13/16/13 +f 16/17/16 17/18/17 15/15/15 +f 18/19/18 19/20/19 17/18/17 +f 20/21/20 21/22/21 19/20/19 +f 4/23/4 39/24/22 6/25/6 +f 22/26/23 23/27/24 21/22/21 +f 24/28/25 1/3/3 23/27/24 +f 17/18/26 59/29/27 58/30/26 +f 26/31/15 62/32/13 25/33/13 +f 15/15/28 58/34/26 57/35/28 +f 13/16/29 57/36/28 56/37/29 +f 13/13/29 55/38/30 11/11/30 +f 11/11/30 54/39/31 9/9/31 +f 9/9/31 53/40/32 7/7/32 +f 1/3/33 61/41/34 23/27/34 +f 3/2/35 50/42/33 1/3/33 +f 7/7/32 52/43/36 5/5/36 +f 23/27/34 60/44/37 21/22/37 +f 5/5/36 51/45/35 3/2/35 +f 21/22/37 59/46/27 19/20/27 +f 40/47/38 39/48/22 49/49/39 +f 20/50/20 47/51/40 22/52/23 +f 18/53/18 46/54/41 20/55/20 +f 16/56/16 45/57/42 18/58/18 +f 14/59/14 44/60/43 16/61/16 +f 12/62/12 43/63/44 14/64/14 +f 10/65/10 42/66/45 12/67/12 +f 8/68/8 41/69/46 10/70/10 +f 24/71/25 38/72/47 2/73/1 +f 4/74/4 38/75/47 37/76/48 +f 6/77/6 40/47/38 8/78/8 +f 39/24/22 37/79/48 49/80/39 +f 41/69/46 40/81/38 49/82/39 +f 42/66/45 41/83/46 49/84/39 +f 43/63/44 42/85/45 49/86/39 +f 44/60/43 43/87/44 49/88/39 +f 45/57/42 44/89/43 49/90/39 +f 46/54/41 45/91/42 49/92/39 +f 47/51/40 46/93/41 49/94/39 +f 38/72/47 48/95/49 49/96/39 +f 37/76/48 38/75/47 49/97/39 +f 25/98/50 51/99/50 26/100/50 +f 26/101/50 52/102/50 27/103/50 +f 27/104/50 53/105/50 28/106/50 +f 28/107/50 54/108/50 29/109/50 +f 29/110/50 55/111/50 30/112/50 +f 30/113/50 56/114/50 31/115/50 +f 31/116/50 57/36/50 32/117/50 +f 32/118/50 58/34/50 33/119/50 +f 34/120/50 58/30/50 59/29/50 +f 35/121/50 59/46/50 60/122/50 +f 36/123/50 60/44/50 61/124/50 +f 25/125/50 61/41/50 50/126/50 +f 65/127/50 69/128/50 73/129/50 +f 33/130/5 69/131/2 32/132/2 +f 30/133/24 66/134/21 29/135/21 +f 25/136/13 73/137/11 36/138/11 +f 27/139/17 63/140/15 26/141/15 +f 34/142/7 70/143/5 33/144/5 +f 31/145/3 67/146/24 30/147/24 +f 28/148/19 64/149/17 27/150/17 +f 35/151/9 71/152/7 34/153/7 +f 32/154/2 68/155/3 31/156/3 +f 29/157/21 65/158/19 28/159/19 +f 36/160/11 72/161/9 35/162/9 +f 24/163/25 47/164/40 48/165/49 +f 48/165/49 47/164/40 49/166/39 +f 78/167/51 74/168/51 77/169/51 +f 85/170/39 74/171/39 75/172/39 +f 76/173/52 81/174/52 77/175/52 +f 77/176/53 80/177/53 78/167/53 +f 81/174/50 80/177/50 79/178/50 +f 81/179/54 84/180/54 82/181/54 +f 83/182/55 85/170/55 84/183/55 +f 80/177/56 84/180/56 75/172/56 +f 87/184/50 89/185/50 90/186/50 +f 88/187/50 89/188/50 86/189/50 +f 91/190/3 90/186/2 89/185/3 +f 94/191/24 89/188/3 92/186/24 +f 95/192/21 92/193/24 93/188/21 +f 88/194/50 93/188/50 92/193/50 +f 96/195/39 95/196/39 97/197/39 +f 96/198/39 91/196/39 94/199/39 +f 99/200/39 91/201/39 98/202/39 +f 99/203/39 102/201/39 101/204/39 +f 101/205/2 103/185/5 90/206/2 +f 102/207/5 105/206/7 103/208/5 +f 107/209/39 102/210/39 100/211/39 +f 104/212/7 132/208/9 105/213/7 +f 108/214/39 104/215/39 107/216/39 +f 109/217/39 106/218/39 108/219/39 +f 110/220/39 111/221/39 109/222/39 +f 106/223/9 112/213/11 132/224/9 +f 111/225/11 114/224/13 112/226/11 +f 113/227/13 116/228/15 114/229/13 +f 118/230/39 113/231/39 110/232/39 +f 115/233/15 123/229/17 116/234/15 +f 118/235/39 117/231/39 115/236/39 +f 120/237/39 117/238/39 119/239/39 +f 97/240/39 121/241/39 120/242/39 +f 117/243/17 122/234/19 123/244/17 +f 121/245/19 93/244/21 122/193/19 +f 125/246/50 122/234/50 124/247/50 +f 124/248/50 93/244/50 126/249/50 +f 127/250/50 123/229/50 125/251/50 +f 128/252/50 116/228/50 127/253/50 +f 129/254/50 114/224/50 128/255/50 +f 129/256/50 132/224/50 112/213/50 +f 131/257/50 132/208/50 130/258/50 +f 133/259/50 105/206/50 131/260/50 +f 87/261/50 103/185/50 133/262/50 +f 136/263/51 135/264/51 134/265/51 +f 137/266/52 138/267/52 139/268/52 +f 139/268/54 140/269/54 141/270/54 +f 144/271/51 143/272/51 142/273/51 +f 142/274/39 147/275/39 144/271/39 +f 148/276/54 145/277/54 146/278/54 +f 149/279/52 147/275/52 148/276/52 +f 152/280/51 151/281/51 150/282/51 +f 153/283/52 154/284/52 155/285/52 +f 155/285/54 156/286/54 157/287/54 +f 151/288/50 155/285/50 157/289/50 +f 159/290/50 161/291/50 162/292/50 +f 160/293/50 161/294/50 158/295/50 +f 163/296/3 162/292/2 161/291/3 +f 166/297/24 161/294/3 164/292/24 +f 167/298/21 164/299/24 165/294/21 +f 160/300/50 165/294/50 164/299/50 +f 168/301/39 167/302/39 169/303/39 +f 168/304/39 163/302/39 166/305/39 +f 171/306/39 163/307/39 170/308/39 +f 171/309/39 174/307/39 173/310/39 +f 173/311/2 175/291/5 162/312/2 +f 174/313/5 177/312/7 175/314/5 +f 172/315/39 176/310/39 174/316/39 +f 176/317/7 204/314/9 177/318/7 +f 180/319/39 176/320/39 179/321/39 +f 181/322/39 178/323/39 180/324/39 +f 182/325/39 183/326/39 181/327/39 +f 178/328/9 184/318/11 204/329/9 +f 183/330/11 186/329/13 184/331/11 +f 185/332/13 188/333/15 186/334/13 +f 182/335/39 187/336/39 185/337/39 +f 187/338/15 195/334/17 188/339/15 +f 191/340/39 187/341/39 190/342/39 +f 191/343/39 193/341/39 189/344/39 +f 169/345/39 193/346/39 192/347/39 +f 189/348/17 194/339/19 195/349/17 +f 193/350/19 165/349/21 194/299/19 +f 197/351/50 194/339/50 196/352/50 +f 198/353/50 194/299/50 165/349/50 +f 199/354/50 195/334/50 197/355/50 +f 200/356/50 188/333/50 199/357/50 +f 200/358/50 184/331/50 186/329/50 +f 202/359/50 184/318/50 201/360/50 +f 202/361/50 177/318/50 204/314/50 +f 205/362/50 177/312/50 203/363/50 +f 159/364/50 175/291/50 205/365/50 +f 208/366/52 207/367/52 206/368/52 +f 209/369/54 210/370/54 211/371/54 +f 211/371/56 212/372/56 213/373/56 +f 216/374/52 215/375/52 214/376/52 +f 214/377/39 219/378/39 216/374/39 +f 220/379/56 217/380/56 218/381/56 +f 221/382/54 219/378/54 220/379/54 +f 222/383/52 225/384/52 223/385/52 +f 225/384/54 226/386/54 227/387/54 +f 227/387/56 228/388/56 229/389/56 +f 223/390/50 227/387/50 229/391/50 +f 232/392/56 231/393/56 230/394/56 +f 233/395/51 234/396/51 235/397/51 +f 235/397/52 236/398/52 237/399/52 +f 240/400/56 239/401/56 238/402/56 +f 238/403/39 243/404/39 240/400/39 +f 244/405/52 241/406/52 242/407/52 +f 245/408/51 243/404/51 244/405/51 +f 248/409/56 247/410/56 246/411/56 +f 249/412/51 250/413/51 251/414/51 +f 251/414/52 252/415/52 253/416/52 +f 247/417/50 251/414/50 253/418/50 +f 256/419/54 255/420/54 254/421/54 +f 257/422/56 258/423/56 259/424/56 +f 259/424/51 260/425/51 261/426/51 +f 264/427/54 263/428/54 262/429/54 +f 265/430/39 264/427/39 262/431/39 +f 268/432/51 265/433/51 266/434/51 +f 269/435/56 267/436/56 268/432/56 +f 272/437/54 271/438/54 270/439/54 +f 273/440/56 274/441/56 275/442/56 +f 275/442/51 276/443/51 277/444/51 +f 273/440/50 277/445/50 271/446/50 +f 282/447/56 278/448/56 281/449/56 +f 279/450/39 280/451/39 278/452/39 +f 280/453/51 285/454/51 281/455/51 +f 281/456/57 284/457/57 282/447/57 +f 283/458/50 286/459/50 284/457/50 +f 285/460/52 288/461/52 286/459/52 +f 287/462/58 289/463/58 288/464/58 +f 284/457/54 288/461/54 279/450/54 +f 294/465/54 290/466/54 293/467/54 +f 301/468/39 290/469/39 291/470/39 +f 292/471/56 297/472/56 293/473/56 +f 293/474/59 296/475/59 294/465/59 +f 297/472/50 296/475/50 295/476/50 +f 297/477/51 300/478/51 298/479/51 +f 300/480/60 292/481/60 301/468/60 +f 296/475/52 300/478/52 291/470/52 +f 306/482/52 302/483/52 305/484/52 +f 303/485/39 304/486/39 302/487/39 +f 304/488/54 309/489/54 305/490/54 +f 305/491/61 308/492/61 306/482/61 +f 309/489/50 308/492/50 307/493/50 +f 309/494/56 312/495/56 310/496/56 +f 311/497/62 313/498/62 312/499/62 +f 308/492/51 312/495/51 303/485/51 +f 2/1/1 4/4/4 3/2/2 +f 4/4/4 6/6/6 5/5/5 +f 6/6/6 8/8/8 7/7/7 +f 8/8/8 10/10/10 9/9/9 +f 10/10/10 12/12/12 11/11/11 +f 12/12/12 14/500/14 13/13/13 +f 14/14/14 16/17/16 15/15/15 +f 16/17/16 18/19/18 17/18/17 +f 18/19/18 20/21/20 19/20/19 +f 20/21/20 22/26/23 21/22/21 +f 4/23/4 37/79/48 39/24/22 +f 22/26/23 24/28/25 23/27/24 +f 24/28/25 2/1/1 1/3/3 +f 17/18/26 19/20/27 59/29/27 +f 26/31/15 63/501/15 62/32/13 +f 15/15/28 17/18/26 58/34/26 +f 13/16/29 15/15/28 57/36/28 +f 13/13/29 56/502/29 55/38/30 +f 11/11/30 55/111/30 54/39/31 +f 9/9/31 54/108/31 53/40/32 +f 1/3/33 50/126/33 61/41/34 +f 3/2/35 51/99/35 50/42/33 +f 7/7/32 53/105/32 52/43/36 +f 23/27/34 61/124/34 60/44/37 +f 5/5/36 52/503/36 51/45/35 +f 21/22/37 60/122/37 59/46/27 +f 20/50/20 46/93/41 47/51/40 +f 18/53/18 45/91/42 46/54/41 +f 16/56/16 44/89/43 45/57/42 +f 14/59/14 43/87/44 44/60/43 +f 12/62/12 42/85/45 43/63/44 +f 10/65/10 41/83/46 42/66/45 +f 8/68/8 40/81/38 41/69/46 +f 24/71/25 48/95/49 38/72/47 +f 4/74/4 2/504/1 38/75/47 +f 6/77/6 39/48/22 40/47/38 +f 25/98/50 50/42/50 51/99/50 +f 26/101/50 51/505/50 52/102/50 +f 27/104/50 52/43/50 53/105/50 +f 28/107/50 53/40/50 54/108/50 +f 29/110/50 54/39/50 55/111/50 +f 30/113/50 55/38/50 56/114/50 +f 31/116/50 56/37/50 57/36/50 +f 32/118/50 57/35/50 58/34/50 +f 34/120/50 33/506/50 58/30/50 +f 35/121/50 34/507/50 59/46/50 +f 36/123/50 35/508/50 60/44/50 +f 25/125/50 36/509/50 61/41/50 +f 73/129/50 62/510/50 63/511/50 +f 63/511/50 64/512/50 65/127/50 +f 65/127/50 66/513/50 67/514/50 +f 67/514/50 68/515/50 69/128/50 +f 69/128/50 70/516/50 71/517/50 +f 71/517/50 72/518/50 73/129/50 +f 73/129/50 63/511/50 65/127/50 +f 65/127/50 67/514/50 69/128/50 +f 69/128/50 71/517/50 73/129/50 +f 33/130/5 70/519/5 69/131/2 +f 30/133/24 67/520/24 66/134/21 +f 25/136/13 62/521/13 73/137/11 +f 27/139/17 64/522/17 63/140/15 +f 34/142/7 71/523/7 70/143/5 +f 31/145/3 68/524/3 67/146/24 +f 28/148/19 65/525/19 64/149/17 +f 35/151/9 72/526/9 71/152/7 +f 32/154/2 69/527/2 68/155/3 +f 29/157/21 66/528/21 65/158/19 +f 36/160/11 73/529/11 72/161/9 +f 24/163/25 22/530/23 47/164/40 +f 78/167/51 75/172/51 74/168/51 +f 85/170/39 76/531/39 74/171/39 +f 77/175/52 74/532/52 76/173/52 +f 76/173/52 83/533/52 81/174/52 +f 81/174/52 79/178/52 77/175/52 +f 77/176/53 79/178/53 80/177/53 +f 81/174/50 82/181/50 80/177/50 +f 81/179/54 83/534/54 84/180/54 +f 83/182/55 76/531/55 85/170/55 +f 75/172/56 78/535/56 80/177/56 +f 80/177/56 82/181/56 84/180/56 +f 84/180/56 85/170/56 75/172/56 +f 87/184/50 86/536/50 89/185/50 +f 88/187/50 92/186/50 89/188/50 +f 91/190/3 101/191/2 90/186/2 +f 94/191/24 91/192/3 89/188/3 +f 95/192/21 94/245/24 92/193/24 +f 88/194/50 126/537/50 93/188/50 +f 96/195/39 94/241/39 95/196/39 +f 96/198/39 98/538/39 91/196/39 +f 99/200/39 101/199/39 91/201/39 +f 99/203/39 100/539/39 102/201/39 +f 101/205/2 102/190/5 103/185/5 +f 102/207/5 104/205/7 105/206/7 +f 107/209/39 104/204/39 102/210/39 +f 104/212/7 106/207/9 132/208/9 +f 108/214/39 106/210/39 104/215/39 +f 109/217/39 111/215/39 106/218/39 +f 110/220/39 113/218/39 111/221/39 +f 106/223/9 111/212/11 112/213/11 +f 111/225/11 113/223/13 114/224/13 +f 113/227/13 115/540/15 116/228/15 +f 118/230/39 115/541/39 113/231/39 +f 115/233/15 117/227/17 123/229/17 +f 118/235/39 119/542/39 117/231/39 +f 120/237/39 121/236/39 117/238/39 +f 97/240/39 95/238/39 121/241/39 +f 117/243/17 121/233/19 122/234/19 +f 121/245/19 95/243/21 93/244/21 +f 125/246/50 123/244/50 122/234/50 +f 124/248/50 122/193/50 93/244/50 +f 127/250/50 116/234/50 123/229/50 +f 128/252/50 114/229/50 116/228/50 +f 129/254/50 112/226/50 114/224/50 +f 129/256/50 130/543/50 132/224/50 +f 131/257/50 105/213/50 132/208/50 +f 133/259/50 103/208/50 105/206/50 +f 87/261/50 90/206/50 103/185/50 +f 136/263/51 137/266/51 135/264/51 +f 137/266/52 136/263/52 138/267/52 +f 139/268/54 138/267/54 140/269/54 +f 144/271/51 149/279/51 143/272/51 +f 142/274/39 145/544/39 147/275/39 +f 148/276/54 147/275/54 145/277/54 +f 149/279/52 144/271/52 147/275/52 +f 152/280/51 153/283/51 151/281/51 +f 153/283/52 152/280/52 154/284/52 +f 155/285/54 154/284/54 156/286/54 +f 151/288/50 153/283/50 155/285/50 +f 159/290/50 158/545/50 161/291/50 +f 160/293/50 164/292/50 161/294/50 +f 163/296/3 173/297/2 162/292/2 +f 166/297/24 163/298/3 161/294/3 +f 167/298/21 166/350/24 164/299/24 +f 160/300/50 198/546/50 165/294/50 +f 168/301/39 166/346/39 167/302/39 +f 168/304/39 170/547/39 163/302/39 +f 171/306/39 173/305/39 163/307/39 +f 171/309/39 172/548/39 174/307/39 +f 173/311/2 174/296/5 175/291/5 +f 174/313/5 176/311/7 177/312/7 +f 172/315/39 179/549/39 176/310/39 +f 176/317/7 178/313/9 204/314/9 +f 180/319/39 178/316/39 176/320/39 +f 181/322/39 183/320/39 178/323/39 +f 182/325/39 185/323/39 183/326/39 +f 178/328/9 183/317/11 184/318/11 +f 183/330/11 185/328/13 186/329/13 +f 185/332/13 187/550/15 188/333/15 +f 182/335/39 190/551/39 187/336/39 +f 187/338/15 189/332/17 195/334/17 +f 191/340/39 189/337/39 187/341/39 +f 191/343/39 192/552/39 193/341/39 +f 169/345/39 167/344/39 193/346/39 +f 189/348/17 193/338/19 194/339/19 +f 193/350/19 167/348/21 165/349/21 +f 197/351/50 195/349/50 194/339/50 +f 198/353/50 196/553/50 194/299/50 +f 199/354/50 188/339/50 195/334/50 +f 200/356/50 186/334/50 188/333/50 +f 200/358/50 201/554/50 184/331/50 +f 202/359/50 204/329/50 184/318/50 +f 202/361/50 203/555/50 177/318/50 +f 205/362/50 175/314/50 177/312/50 +f 159/364/50 162/312/50 175/291/50 +f 208/366/52 209/369/52 207/367/52 +f 209/369/54 208/366/54 210/370/54 +f 211/371/56 210/370/56 212/372/56 +f 216/374/52 221/382/52 215/375/52 +f 214/377/39 217/556/39 219/378/39 +f 220/379/56 219/378/56 217/380/56 +f 221/382/54 216/374/54 219/378/54 +f 222/383/52 224/557/52 225/384/52 +f 225/384/54 224/557/54 226/386/54 +f 227/387/56 226/386/56 228/388/56 +f 223/390/50 225/384/50 227/387/50 +f 232/392/56 233/395/56 231/393/56 +f 233/395/51 232/392/51 234/396/51 +f 235/397/52 234/396/52 236/398/52 +f 240/400/56 245/408/56 239/401/56 +f 238/403/39 241/558/39 243/404/39 +f 244/405/52 243/404/52 241/406/52 +f 245/408/51 240/400/51 243/404/51 +f 248/409/56 249/412/56 247/410/56 +f 249/412/51 248/409/51 250/413/51 +f 251/414/52 250/413/52 252/415/52 +f 247/417/50 249/412/50 251/414/50 +f 256/419/54 257/422/54 255/420/54 +f 257/422/56 256/419/56 258/423/56 +f 259/424/51 258/423/51 260/425/51 +f 264/427/54 269/435/54 263/428/54 +f 265/430/39 267/436/39 264/427/39 +f 268/432/51 267/436/51 265/433/51 +f 269/435/56 264/427/56 267/436/56 +f 272/437/54 273/440/54 271/438/54 +f 273/440/56 272/437/56 274/441/56 +f 275/442/51 274/441/51 276/443/51 +f 273/440/50 275/442/50 277/445/50 +f 282/447/56 279/450/56 278/448/56 +f 279/450/39 289/463/39 280/451/39 +f 281/455/51 278/559/51 280/453/51 +f 280/453/51 287/560/51 285/454/51 +f 285/454/51 283/458/51 281/455/51 +f 281/456/57 283/458/57 284/457/57 +f 283/458/50 285/454/50 286/459/50 +f 285/460/52 287/561/52 288/461/52 +f 287/462/58 280/451/58 289/463/58 +f 279/450/54 282/562/54 284/457/54 +f 284/457/54 286/459/54 288/461/54 +f 288/461/54 289/463/54 279/450/54 +f 294/465/54 291/470/54 290/466/54 +f 301/468/39 292/481/39 290/469/39 +f 293/473/56 290/563/56 292/471/56 +f 292/471/56 299/564/56 297/472/56 +f 297/472/56 295/476/56 293/473/56 +f 293/474/59 295/476/59 296/475/59 +f 297/472/50 298/479/50 296/475/50 +f 297/477/51 299/565/51 300/478/51 +f 300/480/60 299/566/60 292/481/60 +f 291/470/52 294/567/52 296/475/52 +f 296/475/52 298/479/52 300/478/52 +f 300/478/52 301/468/52 291/470/52 +f 306/482/52 303/485/52 302/483/52 +f 303/485/39 313/498/39 304/486/39 +f 305/490/54 302/568/54 304/488/54 +f 304/488/54 311/569/54 309/489/54 +f 309/489/54 307/493/54 305/490/54 +f 305/491/61 307/493/61 308/492/61 +f 309/489/50 310/496/50 308/492/50 +f 309/494/56 311/570/56 312/495/56 +f 311/497/62 304/486/62 313/498/62 +f 303/485/51 306/571/51 308/492/51 +f 308/492/51 310/496/51 312/495/51 +f 312/495/51 313/498/51 303/485/51 diff --git a/src/main/resources/assets/hbm/textures/models/bombs/ufp.png b/src/main/resources/assets/hbm/textures/models/bombs/ufp.png index 4ed70216971a32e2f981eadfea3f34dd0332e0f7..bf5c52e43c95db041d2e44fc403f4c3793817a90 100644 GIT binary patch literal 3644 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 ky6B>dF1qNVi(XCt4`d-pzn`4ceE Date: Mon, 12 May 2025 23:29:59 +0200 Subject: [PATCH 020/491] bop --- changelog | 7 +- src/main/java/com/hbm/blocks/ModBlocks.java | 5 +- .../com/hbm/blocks/generic/BlockBarrier.java | 8 + .../com/hbm/blocks/generic/BlockPedestal.java | 3 +- .../blocks/generic/BlockSkeletonHolder.java | 3 +- .../hbm/blocks/generic/BlockStorageCrate.java | 16 ++ .../blocks/generic/BlockWoodStructure.java | 152 ++++++++++++++++++ .../java/com/hbm/config/ServerConfig.java | 4 + .../java/com/hbm/crafting/WeaponRecipes.java | 1 + .../inventory/recipes/AmmoPressRecipes.java | 14 +- .../items/block/ItemBlockStorageCrate.java | 24 ++- .../weapon/sedna/factory/XFactoryTool.java | 11 +- src/main/java/com/hbm/main/ClientProxy.java | 7 +- .../java/com/hbm/main/CraftingManager.java | 3 + .../weapon/sedna/ItemRenderChargeThrower.java | 9 ++ src/main/resources/assets/hbm/lang/de_DE.lang | 5 + src/main/resources/assets/hbm/lang/en_US.lang | 5 + 17 files changed, 250 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java diff --git a/changelog b/changelog index d62a70591..25db9ffc5 100644 --- a/changelog +++ b/changelog @@ -13,6 +13,11 @@ * Halved base spread of the .22 SMG * Certain secret guns now have a proper way of being obtained * Demolition mini nukes now create fire again +* New server configs + * `CRATE_OPEN_HELD` can toggle whether crates can be opened when held + * `CRATE_KEEP_CONTENTS` can toggle whether crates keep their contents when broken ## Fixed -* Fixed RoR controller having the wrong recipe \ No newline at end of file +* Fixed RoR controller having the wrong recipe +* Either fixed the crate dupe/voiding issues or made them even worse +* Fixed skeletons and pedestals allowing blocks to be placed inside the player \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 41cbe0f7f..a9fb689b3 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -281,6 +281,7 @@ public class ModBlocks { public static Block sandbags; public static Block wood_barrier; + public static Block wood_structure; public static Block reinforced_brick; public static Block reinforced_ducrete; @@ -1481,7 +1482,8 @@ public class ModBlocks { asphalt_light = new BlockSpeedy(Material.rock, 1.5).setBlockName("asphalt_light").setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(15.0F).setResistance(120.0F).setBlockTextureName(RefStrings.MODID + ":asphalt_light"); sandbags = new BlockSandbags(Material.ground).setBlockName("sandbags").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":sandbags"); - wood_barrier = new BlockBarrier(Material.wood).setStepSound(Block.soundTypeWood).setBlockName("wood_barrier").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":wood_barrier"); + wood_barrier = new BlockBarrier(Material.wood).setStepSound(Block.soundTypeWood).setBlockName("wood_barrier").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":wood_barrier"); + wood_structure = new BlockWoodStructure(Material.wood).setStepSound(Block.soundTypeWood).setBlockName("wood_structure").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":wood_barrier"); reinforced_brick = new BlockGeneric(Material.rock).setBlockName("reinforced_brick").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(300.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_brick"); reinforced_glass = new BlockNTMGlassCT(0, RefStrings.MODID + ":reinforced_glass", Material.rock).setBlockName("reinforced_glass").setCreativeTab(MainRegistry.blockTab).setLightOpacity(0).setHardness(2.0F).setResistance(25.0F); @@ -2662,6 +2664,7 @@ public class ModBlocks { //Reinforced Blocks register(sandbags); register(wood_barrier); + register(wood_structure); GameRegistry.registerBlock(asphalt, ItemBlockBlastInfo.class, asphalt.getUnlocalizedName()); GameRegistry.registerBlock(asphalt_light, ItemBlockBlastInfo.class, asphalt_light.getUnlocalizedName()); GameRegistry.registerBlock(reinforced_brick, ItemBlockBlastInfo.class, reinforced_brick.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockBarrier.java b/src/main/java/com/hbm/blocks/generic/BlockBarrier.java index 5c1a6a6c4..e9504c209 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockBarrier.java +++ b/src/main/java/com/hbm/blocks/generic/BlockBarrier.java @@ -121,11 +121,13 @@ public class BlockBarrier extends Block implements ISBRHUniversal { Block px = world.getBlock(x + 1, y, z); Block nz = world.getBlock(x, y, z - 1); Block pz = world.getBlock(x, y, z + 1); + Block py = world.getBlock(x, y + 1, z); boolean negX = nx.isOpaqueCube() || nx.isNormalCube() || meta == Library.POS_X.ordinal(); boolean negZ = nz.isOpaqueCube() || nz.isNormalCube() || meta == Library.POS_Z.ordinal(); boolean posX = px.isOpaqueCube() || px.isNormalCube() || meta == Library.NEG_X.ordinal(); boolean posZ = pz.isOpaqueCube() || pz.isNormalCube() || meta == Library.NEG_Z.ordinal(); + boolean posY = py.isOpaqueCube() || py.isNormalCube(); if(negX) { renderer.setRenderBounds(0D, 0D, 0.4375D, 0.125D, 1D, 0.5625D); renderer.renderStandardBlock(block, x, y, z); @@ -147,6 +149,12 @@ public class BlockBarrier extends Block implements ISBRHUniversal { renderer.setRenderBounds(negX ? 0.125D : 0D, 0.0625D, 0.9375D, posX ? 0.875D : 1D, 0.4375D, 1D); renderer.renderStandardBlock(block, x, y, z); renderer.setRenderBounds(negX ? 0.125D : 0D, 0.5625D, 0.9375D, posX ? 0.875D : 1D, 0.9375D, 1D); renderer.renderStandardBlock(block, x, y, z); } + if(posY) { + renderer.setRenderBounds(0D, 0.875D, 0D, 0.125D, 0.9375D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.875D, 0.875D, 0D, 1D, 0.9375D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0.9375D, 0.0625D, 1D, 1D, 0.4375D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0.9375D, 0.5625D, 1D, 1D, 0.9375D); renderer.renderStandardBlock(block, x, y, z); + } return true; } diff --git a/src/main/java/com/hbm/blocks/generic/BlockPedestal.java b/src/main/java/com/hbm/blocks/generic/BlockPedestal.java index c6336af1f..82a2b46bb 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockPedestal.java +++ b/src/main/java/com/hbm/blocks/generic/BlockPedestal.java @@ -66,18 +66,19 @@ public class BlockPedestal extends BlockContainer { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) return true; if(player.isSneaking()) return false; TileEntityPedestal pedestal = (TileEntityPedestal) world.getTileEntity(x, y, z); if(pedestal.item == null && player.getHeldItem() != null) { + if(world.isRemote) return true; pedestal.item = player.getHeldItem().copy(); player.inventory.mainInventory[player.inventory.currentItem] = null; pedestal.markDirty(); world.markBlockForUpdate(x, y, z); return true; } else if(pedestal.item != null && player.getHeldItem() == null) { + if(world.isRemote) return true; player.inventory.mainInventory[player.inventory.currentItem] = pedestal.item.copy(); pedestal.item = null; pedestal.markDirty(); diff --git a/src/main/java/com/hbm/blocks/generic/BlockSkeletonHolder.java b/src/main/java/com/hbm/blocks/generic/BlockSkeletonHolder.java index 972d24b5b..289e0df8e 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockSkeletonHolder.java +++ b/src/main/java/com/hbm/blocks/generic/BlockSkeletonHolder.java @@ -41,18 +41,19 @@ public class BlockSkeletonHolder extends BlockContainer { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) return true; if(player.isSneaking()) return false; TileEntitySkeletonHolder pedestal = (TileEntitySkeletonHolder) world.getTileEntity(x, y, z); if(pedestal.item == null && player.getHeldItem() != null) { + if(world.isRemote) return true; pedestal.item = player.getHeldItem().copy(); player.inventory.mainInventory[player.inventory.currentItem] = null; pedestal.markDirty(); world.markBlockForUpdate(x, y, z); return true; } else if(pedestal.item != null && player.getHeldItem() == null) { + if(world.isRemote) return true; player.inventory.mainInventory[player.inventory.currentItem] = pedestal.item.copy(); pedestal.item = null; pedestal.markDirty(); diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index c06178eb0..5e4a5937f 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -8,6 +8,7 @@ import java.util.Random; import com.hbm.blocks.IBlockMulti; import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; +import com.hbm.config.ServerConfig; import com.hbm.items.ModItems; import com.hbm.items.tool.ItemLock; import com.hbm.lib.RefStrings; @@ -105,6 +106,21 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT @Override public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) { + + if(!world.isRemote && !ServerConfig.CRATE_KEEP_CONTENTS.get()) { + dropInv = true; + if(!player.capabilities.isCreativeMode) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); + } + TileEntity inv = world.getTileEntity(x, y, z); + if(inv instanceof TileEntityLockableBase) { + TileEntityLockableBase lockable = (TileEntityLockableBase) inv; + if(lockable.isLocked()) dropInv = false; + } + boolean flag = world.setBlockToAir(x, y, z); + dropInv = true; + return flag; + } if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java b/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java new file mode 100644 index 000000000..b094874ac --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java @@ -0,0 +1,152 @@ +package com.hbm.blocks.generic; + +import java.util.List; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockEnumMulti; +import com.hbm.render.block.ISBRHUniversal; +import com.hbm.render.util.RenderBlocksNT; +import com.hbm.util.EnumUtil; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.Entity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockWoodStructure extends BlockEnumMulti implements ISBRHUniversal { + + public BlockWoodStructure(Material mat) { + super(mat, EnumWoodStructure.class, true, false); + } + + public enum EnumWoodStructure { + ROOF, SCAFFOLD, CEILING + } + + @Override public int getRenderType() { return renderID; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { + return true; + } + + @Override + public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) { + EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class, world.getBlockMetadata(x, y, z)); + if(type == type.SCAFFOLD && side == ForgeDirection.UP) return true; + return false; + } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class, world.getBlockMetadata(x, y, z)); + setBlockBounds(0, 0, 0, 1, 1, 1); + if(type == type.ROOF) setBlockBounds(0F, 0F, 0F, 1F, 0.1875F, 1F); + if(type == type.SCAFFOLD) setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F); + if(type == type.CEILING) setBlockBounds(0F, 0.875F, 0F, 1F, 1F, 1F); + } + + @Override + public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB aabb, List list, Entity collider) { + setBlockBoundsBasedOnState(world, x, y, z); + super.addCollisionBoxesToList(world, x, y, z, aabb, list, collider); + } + + @Override + public void renderInventoryBlock(Block block, int meta, int modelId, Object renderBlocks) { + + GL11.glPushMatrix(); + RenderBlocks renderer = (RenderBlocks) renderBlocks; + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class, meta); + + if(type == type.ROOF) { + GL11.glTranslatef(0F, 0.125F, 0F); + renderer.setRenderBounds(0D, 0D, 0D, 0.125D, 0.125D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 0.125D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.125D, 0.0625D, 1D, 0.1875D, 0.4375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.125D, 0.5625D, 1D, 0.1875D, 0.9375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + } + if(type == type.SCAFFOLD) { + renderer.setRenderBounds(0.0625D, 0D, 0.0625D, 0.1875D, 0.875D, 0.1875D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.8125D, 0D, 0.0625D, 0.9375D, 0.875D, 0.1875D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.0625D, 0D, 0.8125D, 0.1875D, 0.875D, 0.9375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.8125D, 0D, 0.8125D, 0.9375D, 0.875D, 0.9375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.125D, 0D, 0.0625D, 0.375D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.9375D, 0.125D, 0D, 1D, 0.375D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.5D, 0D, 1D, 0.75D, 0.0625D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.5D, 0.9375D, 1D, 0.75D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.875D, 0D, 1D, 1D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + } + if(type == type.CEILING) { + GL11.glTranslatef(0F, 0.625F, 0F); + renderer.setRenderBounds(0D, 0.0625D, 0D, 0.125D, 0.125D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.875D, 0.0625D, 0D, 1D, 0.125D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.125D, 0.0625D, 1D, 0.1875D, 0.4375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.125D, 0.5625D, 1D, 0.1875D, 0.9375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + } + + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, Object renderBlocks) { + + RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world); + + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + int meta = world.getBlockMetadata(x, y, z); + EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class,meta); + + if(type == type.ROOF) { + boolean nx = world.getBlock(x - 1, y, z) == this && world.getBlockMetadata(x - 1, y, z) == meta; + boolean px = world.getBlock(x + 1, y, z) == this && world.getBlockMetadata(x + 1, y, z) == meta; + renderer.setRenderBounds(0D, 0D, 0D, 0.125D, 0.125D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 0.125D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(nx ? 0D : 0.0625D, 0.125D, 0.0625D, px ? 1D : 0.9375D, 0.1875D, 0.4375D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(nx ? 0D : 0.0625D, 0.125D, 0.5625D, px ? 1D : 0.9375D, 0.1875D, 0.9375D); renderer.renderStandardBlock(block, x, y, z); + } + if(type == type.SCAFFOLD) { + boolean py = world.getBlock(x, y + 1, z) == this && world.getBlockMetadata(x, y + 1, z) == meta; + boolean nx = world.getBlock(x - 1, y, z) == this && world.getBlockMetadata(x - 1, y, z) == meta; + boolean nz = world.getBlock(x, y, z - 1) == this && world.getBlockMetadata(x, y, z - 1) == meta; + boolean px = world.getBlock(x + 1, y, z) == this && world.getBlockMetadata(x + 1, y, z) == meta; + boolean pz = world.getBlock(x, y, z + 1) == this && world.getBlockMetadata(x, y, z + 1) == meta; + renderer.setRenderBounds(0.0625D, 0D, 0.0625D, 0.1875D, py ? 1D : 0.875D, 0.1875D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.8125D, 0D, 0.0625D, 0.9375D, py ? 1D : 0.875D, 0.1875D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.0625D, 0D, 0.8125D, 0.1875D, py ? 1D : 0.875D, 0.9375D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.8125D, 0D, 0.8125D, 0.9375D, py ? 1D : 0.875D, 0.9375D); renderer.renderStandardBlock(block, x, y, z); + + if(!nx) renderer.setRenderBounds(0D, 0.125D, 0D, 0.0625D, 0.375D, 1D); renderer.renderStandardBlock(block, x, y, z); + if(!px) renderer.setRenderBounds(0.9375D, 0.125D, 0D, 1D, 0.375D, 1D); renderer.renderStandardBlock(block, x, y, z); + if(!nz) renderer.setRenderBounds(0D, 0.5D, 0D, 1D, 0.75D, 0.0625D); renderer.renderStandardBlock(block, x, y, z); + if(!pz) renderer.setRenderBounds(0D, 0.5D, 0.9375D, 1D, 0.75D, 1D); renderer.renderStandardBlock(block, x, y, z); + + if(!py) renderer.setRenderBounds(0D, 0.875D, 0D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + } + if(type == type.CEILING) { + renderer.setRenderBounds(0D, 0.875D, 0D, 0.125D, 0.9375D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.875D, 0.875D, 0D, 1D, 0.9375D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0.9375D, 0.0625D, 1D, 1D, 0.4375D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0.9375D, 0.5625D, 1D, 1D, 0.9375D); renderer.renderStandardBlock(block, x, y, z); + } + + return true; + } +} diff --git a/src/main/java/com/hbm/config/ServerConfig.java b/src/main/java/com/hbm/config/ServerConfig.java index 1161a4334..b52910eca 100644 --- a/src/main/java/com/hbm/config/ServerConfig.java +++ b/src/main/java/com/hbm/config/ServerConfig.java @@ -17,6 +17,8 @@ public class ServerConfig extends RunningConfig { public static ConfigWrapper MINE_NUKE_DAMAGE = new ConfigWrapper(100F); public static ConfigWrapper MINE_NAVAL_DAMAGE = new ConfigWrapper(60F); public static ConfigWrapper TAINT_TRAILS = new ConfigWrapper(false); + public static ConfigWrapper CRATE_OPEN_HELD = new ConfigWrapper(true); + public static ConfigWrapper CRATE_KEEP_CONTENTS = new ConfigWrapper(true); private static void initDefaults() { configMap.put("DAMAGE_COMPATIBILITY_MODE", DAMAGE_COMPATIBILITY_MODE); @@ -26,6 +28,8 @@ public class ServerConfig extends RunningConfig { configMap.put("MINE_NUKE_DAMAGE", MINE_NUKE_DAMAGE); configMap.put("MINE_NAVAL_DAMAGE", MINE_NAVAL_DAMAGE); configMap.put("TAINT_TRAILS", TAINT_TRAILS); + configMap.put("CRATE_OPEN_HELD", CRATE_OPEN_HELD); + configMap.put("CRATE_KEEP_CONTENTS", CRATE_KEEP_CONTENTS); } /** Initializes defaults, then reads the config file if it exists, then writes the config file. */ diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 242a2e475..e515314ac 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -102,6 +102,7 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_AP, 6), new Object[] { "C", "P", "G", 'C', Items.flint, 'P', Items.paper, 'G', Items.gunpowder }); CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_SHOT, 6), new Object[] { "C", "P", "G", 'C', Blocks.gravel, 'P', Items.paper, 'G', Items.gunpowder }); CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_IRON, 6), new Object[] { "C", "P", "G", 'C', IRON.ingot(), 'P', Items.paper, 'G', Items.gunpowder }); + CraftingManager.addShapelessAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR_CHARGE, 1), new Object[] { DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), ModItems.ducttape, ModItems.ducttape }); //SEDNA Mods CraftingManager.addShapelessAuto(new ItemStack(ModItems.weapon_mod_generic, 1, EnumModGeneric.IRON_DAMAGE.ordinal()), new Object[] { GUNMETAL.ingot(), IRON.ingot(), IRON.ingot(), IRON.ingot(), ModItems.ducttape }); diff --git a/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java b/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java index 82d96a98e..c5a96c458 100644 --- a/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java @@ -41,12 +41,13 @@ public class AmmoPressRecipes extends SerializableRecipe { OreDictStack uranium = new OreDictStack(U238.ingot()); OreDictStack ferro = new OreDictStack(FERRO.ingot()); OreDictStack nb = new OreDictStack(NB.ingot()); - ComparableStack smokeful = new ComparableStack(Items.gunpowder); OreDictStack smokeless = new OreDictStack(ANY_SMOKELESS.dust()); - ComparableStack rocket = new ComparableStack(ModItems.rocket_fuel); OreDictStack he = new OreDictStack(ANY_HIGHEXPLOSIVE.ingot()); OreDictStack wp = new OreDictStack(P_WHITE.ingot()); OreDictStack rp = new OreDictStack(P_RED.dust()); + OreDictStack pipe = new OreDictStack(STEEL.pipe()); + ComparableStack smokeful = new ComparableStack(Items.gunpowder); + ComparableStack rocket = new ComparableStack(ModItems.rocket_fuel); ComparableStack cSmall = new ComparableStack(ModItems.casing, 1, EnumCasingType.SMALL); ComparableStack cBig = new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE); ComparableStack sSmall = new ComparableStack(ModItems.casing, 1, EnumCasingType.SMALL_STEEL); @@ -430,6 +431,15 @@ public class AmmoPressRecipes extends SerializableRecipe { null, he.copy(8), null, null, sBig.copy(2), null, null, sPlate.copy(4), null)); + + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_HOOK, 16), + null, steel, null, + null, pipe, null, + null, smokeless, null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR, 4), + null, he.copy(4), null, + null, pipe, null, + null, smokeless, null)); } public static HashMap getRecipes() { diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index b1d597f1f..3608619fa 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -1,6 +1,7 @@ package com.hbm.items.block; import com.hbm.blocks.ModBlocks; +import com.hbm.config.ServerConfig; import com.hbm.inventory.container.*; import com.hbm.inventory.gui.*; import com.hbm.items.ItemInventory; @@ -29,6 +30,8 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(!ServerConfig.CRATE_OPEN_HELD.get()) return stack; + Block block = Block.getBlockFromItem(player.getHeldItem().getItem()); if(block == ModBlocks.mass_storage) return stack; // Genuinely can't figure out how to make this part work, so I'm just not gonna mess with it. @@ -81,10 +84,13 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider public static class InventoryCrate extends ItemInventory { + public int heldIndex; + public InventoryCrate(EntityPlayer player, ItemStack crate) { this.player = player; this.target = crate; + this.heldIndex = player.inventory.currentItem; this.slots = new ItemStack[this.getSizeInventory()]; if(target.stackTagCompound == null) { @@ -143,17 +149,9 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider if(target.stackTagCompound.hasKey("spiders")) nbt.setBoolean("spiders", target.stackTagCompound.getBoolean("spiders")); // fuck you!! }*/ - /* - * target and held item stacks constantly desync, not being the same reference, while still holding the same value. - * code was tested with a copy of the containment box code using the CB's GUI and container to no avail. - * hypothesis: minecraft's keybind handling has some special bullshit case for ItemBlocks, since that is the only difference in the test. - * solution (?): check equality, then just access the held stack directly. if not, pray the target reference is still accurate and use that. - */ - if(player.getHeldItem() != null && ItemStack.areItemStacksEqual(player.getHeldItem(), target)) { + // i have completely given up + if(player.getHeldItem() != null && player.getHeldItem().getItem() == this.target.getItem() && player.inventory.currentItem == this.heldIndex) { player.getHeldItem().setTagCompound(nbt); - this.target = player.getHeldItem(); // just fuckin whatever - } else { - target.setTagCompound(nbt); } } @@ -164,10 +162,8 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider /* * realistically, we only need one NBT size check (and we only *want* one because CompressedStreamTools is expensive) so we do that part only when closing */ - if(player.getHeldItem() != null && ItemStack.areItemStacksEqual(player.getHeldItem(), target)) { - player.getHeldItem().setTagCompound(checkNBT(target.getTagCompound())); - } else { - target.setTagCompound(checkNBT(target.getTagCompound())); + if(player.getHeldItem() != null && player.getHeldItem().getItem() == this.target.getItem() && player.inventory.currentItem == this.heldIndex) { + player.getHeldItem().setTagCompound(checkNBT(player.getHeldItem().getTagCompound())); } } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java index d20677e53..8fc728847 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java @@ -88,15 +88,15 @@ public class XFactoryTool { ct_hook = new BulletConfig().setItem(EnumAmmo.CT_HOOK).setRenderRotations(false).setLife(6_000).setVel(3F).setGrav(0.035D).setDoesPenetrate(true).setDamageFalloffByPen(false) .setOnUpdate(LAMBDA_SET_HOOK).setOnImpact(LAMBDA_HOOK); - ct_mortar = new BulletConfig().setItem(EnumAmmo.CT_MORTAR).setLife(200).setVel(3F).setGrav(0.035D) + ct_mortar = new BulletConfig().setItem(EnumAmmo.CT_MORTAR).setDamage(2.5F).setLife(200).setVel(3F).setGrav(0.035D) .setOnImpact(LAMBDA_MORTAR); - ct_mortar_charge = new BulletConfig().setItem(EnumAmmo.CT_MORTAR_CHARGE).setLife(200).setVel(3F).setGrav(0.035D) + ct_mortar_charge = new BulletConfig().setItem(EnumAmmo.CT_MORTAR_CHARGE).setDamage(5F).setLife(200).setVel(3F).setGrav(0.035D) .setOnImpact(LAMBDA_MORTAR_CHARGE); ModItems.gun_charge_thrower = new ItemGunChargeThrower(WeaponQuality.UTILITY, new GunConfig() - .dura(3_000).draw(20).inspect(31).reloadChangeType(true).hideCrosshair(false).crosshair(Crosshair.L_CIRCUMFLEX) + .dura(3_000).draw(10).inspect(55).reloadChangeType(true).hideCrosshair(false).crosshair(Crosshair.L_CIRCUMFLEX) .rec(new Receiver(0) - .dmg(5F).delay(4).dry(10).auto(true).spread(0F).spreadHipfire(0F).reload(60).jam(55).sound("hbm:weapon.fire.grenade", 1.0F, 1.0F) + .dmg(10F).delay(4).dry(10).auto(true).spread(0F).spreadHipfire(0F).reload(60).jam(0).sound("hbm:weapon.fire.grenade", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 1).addConfigs(ct_hook, ct_mortar, ct_mortar_charge)) .offset(1, -0.0625 * 2.5, -0.25D) .setupStandardFire().recoil(LAMBDA_RECOIL_CT)) @@ -119,6 +119,9 @@ public class XFactoryTool { .addBus("RAISE", new BusAnimationSequence().addPos(-45, 0, 0, 500, IType.SIN_FULL).hold(2000).addPos(0, 0, 0, 500, IType.SIN_FULL)) .addBus("AMMO", new BusAnimationSequence().setPos(0, -10, -5).hold(500).addPos(0, 0, 5, 750, IType.SIN_FULL).addPos(0, 0, 0, 500, IType.SIN_UP).hold(4000)) .addBus("TWIST", new BusAnimationSequence().setPos(0, 0, 25).hold(2000).addPos(0, 0, 0, 150)); + case INSPECT: return new BusAnimation() + .addBus("TURN", new BusAnimationSequence().addPos(0, 60, 0, 500, IType.SIN_FULL).hold(1750).addPos(0, 0, 0, 500, IType.SIN_FULL)) + .addBus("ROLL", new BusAnimationSequence().hold(750).addPos(0, 0, -90, 500, IType.SIN_FULL).hold(1000).addPos(0, 0, 0, 500, IType.SIN_FULL)); } return null; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 972f3371e..b1a87dd14 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -1783,7 +1783,8 @@ public class ClientProxy extends ServerProxy { .addPos(90, 0, 1, 800) .addPos(0, 0, 1, 50)); - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, null); + String id = ModItems.crucible.getUnlocalizedName(); + HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(id, System.currentTimeMillis(), animation, null); } /* crucible swing */ @@ -1804,8 +1805,8 @@ public class ClientProxy extends ServerProxy { .addPos(0, 0, 0, 500)); Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:weapon.cSwing"), 0.8F + player.getRNG().nextFloat() * 0.2F)); - - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, null); + String id = ModItems.crucible.getUnlocalizedName(); + HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(id, System.currentTimeMillis(), animation, null); } } diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 85f7942f0..d85fd4bc4 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -953,8 +953,11 @@ public class CraftingManager { Object casing = craneCasing[i * 2]; int amount = (int) craneCasing[i * 2 + 1]; addRecipeAuto(new ItemStack(ModBlocks.crane_inserter, amount), new Object[] { "CCC", "C C", "CBC", 'C', casing, 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR) }); + addRecipeAuto(new ItemStack(ModBlocks.crane_inserter, amount), new Object[] { "CCC", "C C", "CBC", 'C', casing, 'B', ModBlocks.conveyor }); addRecipeAuto(new ItemStack(ModBlocks.crane_extractor, amount), new Object[] { "CCC", "CPC", "CBC", 'C', casing, 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR), 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) }); + addRecipeAuto(new ItemStack(ModBlocks.crane_extractor, amount), new Object[] { "CCC", "CPC", "CBC", 'C', casing, 'B', ModBlocks.conveyor, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) }); addRecipeAuto(new ItemStack(ModBlocks.crane_grabber, amount), new Object[] { "C C", "P P", "CBC", 'C', casing, 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR), 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) }); + addRecipeAuto(new ItemStack(ModBlocks.crane_grabber, amount), new Object[] { "C C", "P P", "CBC", 'C', casing, 'B', ModBlocks.conveyor, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) }); } addRecipeAuto(new ItemStack(ModBlocks.crane_boxer), new Object[] { "WWW", "WPW", "CCC", 'W', KEY_PLANKS, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'C', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR) }); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java index 4b30ccc31..8d724e645 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderChargeThrower.java @@ -59,6 +59,8 @@ public class ItemRenderChargeThrower extends ItemRenderWeaponBase { double[] raise = HbmAnimations.getRelevantTransformation("RAISE"); double[] ammo = HbmAnimations.getRelevantTransformation("AMMO"); double[] twist = HbmAnimations.getRelevantTransformation("TWIST"); + double[] turn = HbmAnimations.getRelevantTransformation("TURN"); + double[] roll = HbmAnimations.getRelevantTransformation("ROLL"); GL11.glTranslated(0, 0, -7); GL11.glRotated(equip[0], -1, 0, 0); @@ -69,6 +71,13 @@ public class ItemRenderChargeThrower extends ItemRenderWeaponBase { GL11.glTranslated(0, 7, -4); GL11.glTranslated(recoil[0], recoil[1], recoil[2]); + + GL11.glTranslated(0, 0, -2); + GL11.glRotated(turn[1], 0, 1, 0); + GL11.glTranslated(0, 0, 2); + GL11.glTranslated(0, -1, 0); + GL11.glRotated(roll[2], 0, 0, 1); + GL11.glTranslated(0, 1, 0); GL11.glShadeModel(GL11.GL_SMOOTH); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_tex); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 5c4eb045f..9eb688713 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1114,6 +1114,7 @@ item.ammo_standard.m44_express.name=.44 Magnumkugel (VMG Express) item.ammo_standard.m44_fmj.name=.44 Magnumkugel (Vollmantelgeschoss) item.ammo_standard.m44_jhp.name=.44 Magnumkugel (Hohlspitz) item.ammo_standard.m44_sp.name=.44 Magnumkugel (Teilmantelgeschoss) +item.ammo_standard.nuke_balefire.name=Miniatombombe, Balefire-Ei item.ammo_standard.nuke_demo.name=Miniatombombe, Abriss item.ammo_standard.nuke_high.name=Miniatombombe, hoher Ertrag item.ammo_standard.nuke_hive.name=Raketenschwarm @@ -2120,6 +2121,7 @@ item.gun_maresleg_broken.name=Broken item.gun_maresleg_short.name=Mare's Leg item.gun_mas36.name=Südstern item.gun_minigun.name=Minigun +item.gun_minigun_dual.name=Doppelete Miniguns item.gun_minigun_lacunae.name=Lacunae item.gun_missile_launcher.name=Raketenwerfer item.gun_pepperbox.name=Bündelrevolver @@ -4881,6 +4883,9 @@ tile.watz_end_bolted.name=Watz-Stabilitätselement (Genietet) tile.watz_hatch.name=Watzreaktorzugriffsluke tile.watz_pump.name=Watz-Druckpumpe tile.wood_barrier.name=Holzbarriere +tile.wood_structure.ceiling.name=Holzdecke +tile.wood_structure.roof.name=Holzdach +tile.wood_structure.scaffold.name=Holzgerüst tile.yellow_barrel.name=Radioaktives Fass tile.zirnox_destroyed.name=Zerstörter ZINOX diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 8128b5cfb..e888fe951 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1839,6 +1839,7 @@ item.ammo_standard.m44_express.name=.44 Magnum Round (FMJ Express) item.ammo_standard.m44_fmj.name=.44 Magnum Round (Full Metal Jacket) item.ammo_standard.m44_jhp.name=.44 Magnum Round (Jacketed Hollow Point) item.ammo_standard.m44_sp.name=.44 Magnum Round (Soft Point) +item.ammo_standard.nuke_balefire.name=Mini Nuke, Balefire Egg item.ammo_standard.nuke_demo.name=Mini Nuke, Demolition item.ammo_standard.nuke_high.name=Mini Nuke, High Yield item.ammo_standard.nuke_hive.name=Rocket Hive @@ -2932,6 +2933,7 @@ item.gun_maresleg_broken.name=Broken item.gun_maresleg_short.name=Mare's Leg item.gun_mas36.name=South Star item.gun_minigun.name=Minigun +item.gun_minigun_dual.name=Dual Miniguns item.gun_minigun_lacunae.name=Lacunae item.gun_missile_launcher.name=Missile Launcher item.gun_pepperbox.name=Pepperbox @@ -6043,6 +6045,9 @@ tile.watz_end_bolted.name=Watz Reactor Stability Element (Riveted) tile.watz_hatch.name=Watz Reactor Access Hatch tile.watz_pump.name=Watz Pressure Pump tile.wood_barrier.name=Wooden Barrier +tile.wood_structure.ceiling.name=Wooden Ceiling +tile.wood_structure.roof.name=Wooden Roof +tile.wood_structure.scaffold.name=Wooden Scaffold tile.yellow_barrel.name=Radioactive Barrel tile.zirnox_destroyed.name=Destroyed ZIRNOX From 4ce7e396be1d705c6bc724e4ed791c4e9aad214d Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 13 May 2025 16:25:39 +0200 Subject: [PATCH 021/491] doing absolutely nothing again --- .../java/com/hbm/blocks/machine/BlockPWR.java | 28 ++++++++++++++++++- .../java/com/hbm/handler/ToolAbility.java | 1 - .../java/com/hbm/main/CraftingManager.java | 7 ++++- .../machine/TileEntityPWRController.java | 19 ++++++++++++- 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/BlockPWR.java b/src/main/java/com/hbm/blocks/machine/BlockPWR.java index 0320a76a1..74e352923 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockPWR.java +++ b/src/main/java/com/hbm/blocks/machine/BlockPWR.java @@ -12,6 +12,8 @@ import com.hbm.render.block.ct.IBlockCT; import com.hbm.tileentity.machine.TileEntityPWRController; import api.hbm.fluidmk2.IFluidReceiverMK2; +import api.hbm.redstoneoverradio.IRORInteractive; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -98,7 +100,7 @@ public class BlockPWR extends BlockContainer implements IBlockCT { super.breakBlock(world, x, y, z, block, meta); } - public static class TileEntityBlockPWR extends TileEntity implements IFluidReceiverMK2, ISidedInventory { + public static class TileEntityBlockPWR extends TileEntity implements IFluidReceiverMK2, ISidedInventory, IRORValueProvider, IRORInteractive { public Block block; public int coreX; @@ -337,5 +339,29 @@ public class BlockPWR extends BlockContainer implements IBlockCT { super.onChunkUnload(); this.isLoaded = false; } + + @Override + public String[] getFunctionInfo() { + if(this.getBlockMetadata() != 1) return new String[0]; + TileEntityPWRController controller = this.getCore(); + if(controller != null) return controller.getFunctionInfo(); + return new String[0]; + } + + @Override + public String provideRORValue(String name) { + if(this.getBlockMetadata() != 1) return ""; + TileEntityPWRController controller = this.getCore(); + if(controller != null) return controller.provideRORValue(name); + return ""; + } + + @Override + public String runRORFunction(String name, String[] params) { + if(this.getBlockMetadata() != 1) return ""; + TileEntityPWRController controller = this.getCore(); + if(controller != null) return controller.runRORFunction(name, params); + return ""; + } } } diff --git a/src/main/java/com/hbm/handler/ToolAbility.java b/src/main/java/com/hbm/handler/ToolAbility.java index 1ce02283b..bf9462a49 100644 --- a/src/main/java/com/hbm/handler/ToolAbility.java +++ b/src/main/java/com/hbm/handler/ToolAbility.java @@ -1,6 +1,5 @@ package com.hbm.handler; -import java.util.Arrays; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index d85fd4bc4..561167561 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -8,6 +8,7 @@ import com.hbm.blocks.generic.BlockGenericStairs; import com.hbm.blocks.generic.BlockMultiSlab; import com.hbm.blocks.generic.BlockNTMFlower.EnumFlowerType; import com.hbm.blocks.generic.BlockPlushie.PlushieType; +import com.hbm.blocks.generic.BlockWoodStructure.EnumWoodStructure; import com.hbm.config.GeneralConfig; import com.hbm.crafting.*; import com.hbm.crafting.handlers.*; @@ -458,12 +459,16 @@ public class CraftingManager { addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate_wide), 4), new Object[] { "SS", 'S', ModBlocks.steel_grate }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate), 1), new Object[] { "SS", 'S', ModBlocks.steel_grate_wide }); - addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 0), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeGray" }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 1), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeRed" }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 2), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeWhite" }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 3), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeYellow" }); + addRecipeAuto(new ItemStack(ModBlocks.wood_barrier, 8), new Object[] { "SFS", "SFS", 'S', KEY_SLAB, 'F', Blocks.fence }); + addRecipeAuto(DictFrame.fromOne(ModBlocks.wood_structure, EnumWoodStructure.ROOF, 16), new Object[] { "SSS", "F F", 'S', KEY_SLAB, 'F', Blocks.fence }); + addRecipeAuto(DictFrame.fromOne(ModBlocks.wood_structure, EnumWoodStructure.CEILING, 16), new Object[] { "F F", "SSS", 'S', KEY_SLAB, 'F', Blocks.fence }); + addRecipeAuto(DictFrame.fromOne(ModBlocks.wood_structure, EnumWoodStructure.SCAFFOLD, 4), new Object[] { "SSS", "F F", "F F", 'S', KEY_SLAB, 'F', Blocks.fence }); + reg2(); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java index c7dceeda3..653ec66ca 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java @@ -26,6 +26,8 @@ import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import api.hbm.fluid.IFluidStandardTransceiver; +import api.hbm.redstoneoverradio.IRORInteractive; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -44,7 +46,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityPWRController extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, SimpleComponent, IFluidStandardTransceiver, CompatHandler.OCComponent { +public class TileEntityPWRController extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, SimpleComponent, IFluidStandardTransceiver, CompatHandler.OCComponent, IRORValueProvider, IRORInteractive { public FluidTank[] tanks; public long coreHeat; @@ -628,4 +630,19 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG public FluidTank[] getReceivingTanks() { return new FluidTank[] { tanks[0] }; } + + @Override + public String[] getFunctionInfo() { + return new String[0]; //TODO + } + + @Override + public String runRORFunction(String name, String[] params) { + return ""; + } + + @Override + public String provideRORValue(String name) { + return ""; + } } From a43986603b38cd1bbecc6e1a2bf204f8da4ace52 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 14 May 2025 11:51:30 +0200 Subject: [PATCH 022/491] more INDEX crap --- .../com/hbm/blocks/bomb/BombFlameWar.java | 33 +++- .../java/com/hbm/blocks/bomb/BombMulti.java | 8 +- .../com/hbm/blocks/bomb/ExplosiveCharge.java | 2 +- .../java/com/hbm/blocks/bomb/NukeCustom.java | 6 +- .../java/com/hbm/blocks/bomb/NukeGadget.java | 2 +- .../java/com/hbm/blocks/bomb/NukeMan.java | 2 +- .../java/com/hbm/blocks/bomb/NukeMike.java | 2 +- src/main/java/com/hbm/blocks/bomb/NukeN2.java | 2 +- .../java/com/hbm/blocks/bomb/NukeTsar.java | 2 +- .../java/com/hbm/blocks/test/TestCore.java | 2 +- .../hbm/entity/effect/EntityNukeTorex.java | 26 +-- .../entity/grenade/EntityGrenadeCloud.java | 2 +- .../entity/grenade/EntityGrenadeIFToxic.java | 1 - .../hbm/entity/grenade/EntityGrenadePC.java | 2 +- .../com/hbm/entity/logic/EntityBomber.java | 4 +- .../entity/missile/EntityMissileCustom.java | 6 +- .../entity/missile/EntityMissileTier4.java | 8 +- .../entity/projectile/EntityBombletZeta.java | 9 +- .../entity/projectile/EntityBulletBaseNT.java | 6 - .../hbm/entity/projectile/EntityModBeam.java | 2 +- .../com/hbm/explosion/ExplosionChaos.java | 160 +----------------- .../java/com/hbm/items/machine/ItemLens.java | 19 +-- .../com/hbm/items/tool/WeaponSpecial.java | 2 +- .../com/hbm/items/weapon/ItemAmmoArty.java | 2 +- .../weapon/sedna/factory/XFactoryFolly.java | 2 +- .../machine/TileEntityCoreEmitter.java | 45 ++++- .../machine/TileEntityCoreStabilizer.java | 33 +++- .../tileentity/machine/TileEntityITER.java | 47 ++++- 28 files changed, 211 insertions(+), 226 deletions(-) diff --git a/src/main/java/com/hbm/blocks/bomb/BombFlameWar.java b/src/main/java/com/hbm/blocks/bomb/BombFlameWar.java index 6cc36770b..0fef1c854 100644 --- a/src/main/java/com/hbm/blocks/bomb/BombFlameWar.java +++ b/src/main/java/com/hbm/blocks/bomb/BombFlameWar.java @@ -1,7 +1,13 @@ package com.hbm.blocks.bomb; -import com.hbm.explosion.ExplosionChaos; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; +import com.hbm.explosion.vanillant.standard.BlockProcessorStandard; +import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; +import com.hbm.explosion.vanillant.standard.ExplosionEffectTiny; +import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.interfaces.IBomb; +import com.hbm.particle.helper.ExplosionCreator; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -17,9 +23,7 @@ public class BombFlameWar extends Block implements IBomb { public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { if(world.isBlockIndirectlyGettingPowered(x, y, z)) { - ExplosionChaos.explode(world, x, y, z, 15); - ExplosionChaos.spawnExplosion(world, x, y, z, 75); - ExplosionChaos.flameDeath(world, x, y, z, 100); + explode(world, x, y, z); } } @@ -27,9 +31,24 @@ public class BombFlameWar extends Block implements IBomb { public BombReturnCode explode(World world, int x, int y, int z) { if(!world.isRemote) { - ExplosionChaos.explode(world, x, y, z, 15); - ExplosionChaos.spawnExplosion(world, x, y, z, 75); - ExplosionChaos.flameDeath(world, x, y, z, 100); + + world.func_147480_a(x, y, z, false); + + for(int i = 0; i < 150; i++) { + ExplosionVNT vnt = new ExplosionVNT(world, x + world.rand.nextInt(51) - 25, y + world.rand.nextInt(11) - 5, z + world.rand.nextInt(51) - 25, 4, null); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, 25)); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + vnt.setSFX(new ExplosionEffectTiny()); + vnt.explode(); + } + + ExplosionVNT xnt = new ExplosionVNT(world, x + 0.5, y + 0.5, z + 0.5, 15F); + xnt.setBlockAllocator(new BlockAllocatorStandard(32)); + xnt.setBlockProcessor(new BlockProcessorStandard().setNoDrop()); + xnt.setEntityProcessor(new EntityProcessorCrossSmooth(2, 200)); + xnt.setPlayerProcessor(new PlayerProcessorStandard()); + xnt.explode(); + ExplosionCreator.composeEffectSmall(world, x + 0.5, y + 0.5, z + 0.5); } return BombReturnCode.DETONATED; diff --git a/src/main/java/com/hbm/blocks/bomb/BombMulti.java b/src/main/java/com/hbm/blocks/bomb/BombMulti.java index b6496f164..1691f119a 100644 --- a/src/main/java/com/hbm/blocks/bomb/BombMulti.java +++ b/src/main/java/com/hbm/blocks/bomb/BombMulti.java @@ -18,10 +18,12 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import com.hbm.blocks.ModBlocks; +import com.hbm.entity.effect.EntityMist; import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionNukeGeneric; import com.hbm.interfaces.IBomb; +import com.hbm.inventory.fluid.Fluids; import com.hbm.main.MainRegistry; import com.hbm.tileentity.bomb.TileEntityBombMulti; @@ -169,7 +171,11 @@ public class BombMulti extends BlockContainer implements IBomb { } if(gasCloud > 0) { - ExplosionChaos.spawnChlorine(world, x, y, z, gasCloud, gasCloud / 50, 0); + EntityMist mist = new EntityMist(world); + mist.setType(Fluids.CHLORINE); + mist.setPosition(x + 0.5, y + 0.5, z + 0.5); + mist.setArea(gasCloud * 15F / 50F, gasCloud * 7.5F / 50F); + world.spawnEntityInWorld(mist); } return BombReturnCode.DETONATED; diff --git a/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java b/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java index dae6e61d4..b2885a531 100644 --- a/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java +++ b/src/main/java/com/hbm/blocks/bomb/ExplosiveCharge.java @@ -69,7 +69,7 @@ public class ExplosiveCharge extends BlockDetonatable implements IBomb, IDetConn } if(this == ModBlocks.det_nuke) { world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.missileRadius, x + 0.5, y + 0.5, z + 0.5)); - EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.missileRadius); + EntityNukeTorex.statFacStandard(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.missileRadius); } } diff --git a/src/main/java/com/hbm/blocks/bomb/NukeCustom.java b/src/main/java/com/hbm/blocks/bomb/NukeCustom.java index ebc21403e..766c2baee 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeCustom.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeCustom.java @@ -179,7 +179,7 @@ public class NukeCustom extends BlockContainer implements IBomb { dirty *= 0.25F; worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, (int)hydro, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5).moreFallout((int)dirty)); - EntityNukeTorex.statFac(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, hydro); + EntityNukeTorex.statFacStandard(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, hydro); /// NUCLEAR /// } else if(nuke > 0) { @@ -188,7 +188,7 @@ public class NukeCustom extends BlockContainer implements IBomb { nuke = Math.min(nuke, maxNuke); worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, (int)nuke, xCoord + 0.5, yCoord + 5, zCoord + 0.5).moreFallout((int)dirty)); - EntityNukeTorex.statFac(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, nuke); + EntityNukeTorex.statFacStandard(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, nuke); /// NON-NUCLEAR /// } else if(tnt >= 75) { @@ -196,7 +196,7 @@ public class NukeCustom extends BlockContainer implements IBomb { tnt = Math.min(tnt, maxTnt); worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFacNoRad(worldObj, (int)tnt, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5)); - EntityNukeTorex.statFac(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, tnt); + EntityNukeTorex.statFacStandard(worldObj, xCoord + 0.5, yCoord + 5, zCoord + 0.5, tnt); } else if(tnt > 0) { ExplosionLarge.explode(worldObj, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, tnt, true, true, true); diff --git a/src/main/java/com/hbm/blocks/bomb/NukeGadget.java b/src/main/java/com/hbm/blocks/bomb/NukeGadget.java index a09d7c31f..3e55cd5d5 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeGadget.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeGadget.java @@ -131,7 +131,7 @@ public class NukeGadget extends BlockContainer implements IBomb { world.playSoundEffect(x, y, z, "random.explode", 1.0f, world.rand.nextFloat() * 0.1F + 0.9F); world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.gadgetRadius, x + 0.5, y + 0.5, z + 0.5)); - EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.gadgetRadius); + EntityNukeTorex.statFacStandard(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.gadgetRadius); } return false; diff --git a/src/main/java/com/hbm/blocks/bomb/NukeMan.java b/src/main/java/com/hbm/blocks/bomb/NukeMan.java index d9fc4f1a5..7030d1a5a 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeMan.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeMan.java @@ -124,7 +124,7 @@ public class NukeMan extends BlockContainer implements IBomb { world.playSoundEffect(x, y, z, "random.explode", 1.0f, world.rand.nextFloat() * 0.1F + 0.9F); world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.manRadius, x + 0.5, y + 0.5, z + 0.5)); - EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.manRadius); + EntityNukeTorex.statFacStandard(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.manRadius); } return false; diff --git a/src/main/java/com/hbm/blocks/bomb/NukeMike.java b/src/main/java/com/hbm/blocks/bomb/NukeMike.java index 84e178758..3a7935503 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeMike.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeMike.java @@ -131,7 +131,7 @@ public class NukeMike extends BlockContainer implements IBomb { world.playSoundEffect(x, y, z, "random.explode", 1.0f, world.rand.nextFloat() * 0.1F + 0.9F); world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.mikeRadius, x + 0.5, y + 0.5, z + 0.5)); - EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.mikeRadius); + EntityNukeTorex.statFacStandard(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.mikeRadius); } return false; diff --git a/src/main/java/com/hbm/blocks/bomb/NukeN2.java b/src/main/java/com/hbm/blocks/bomb/NukeN2.java index c65eef0f7..197471386 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeN2.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeN2.java @@ -120,7 +120,7 @@ public class NukeN2 extends BlockContainer implements IBomb { world.playSoundEffect(x, y, z, "random.explode", 1.0f, world.rand.nextFloat() * 0.1F + 0.9F); world.spawnEntityInWorld(EntityNukeExplosionMK5.statFacNoRad(world, r, x + 0.5, y + 0.5, z + 0.5)); - EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, r); + EntityNukeTorex.statFacStandard(world, x + 0.5, y + 0.5, z + 0.5, r); } return false; diff --git a/src/main/java/com/hbm/blocks/bomb/NukeTsar.java b/src/main/java/com/hbm/blocks/bomb/NukeTsar.java index f064a053a..1fea0c9d2 100644 --- a/src/main/java/com/hbm/blocks/bomb/NukeTsar.java +++ b/src/main/java/com/hbm/blocks/bomb/NukeTsar.java @@ -129,7 +129,7 @@ public class NukeTsar extends BlockContainer implements IBomb { tetn.clearSlots(); world.playSoundEffect(x, y, z, "random.explode", 1.0f, world.rand.nextFloat() * 0.1F + 0.9F); world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, r, x + 0.5, y + 0.5, z + 0.5)); - EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, r); + EntityNukeTorex.statFacStandard(world, x + 0.5, y + 0.5, z + 0.5, r); } return false; diff --git a/src/main/java/com/hbm/blocks/test/TestCore.java b/src/main/java/com/hbm/blocks/test/TestCore.java index 049f7eae9..7b3b60380 100644 --- a/src/main/java/com/hbm/blocks/test/TestCore.java +++ b/src/main/java/com/hbm/blocks/test/TestCore.java @@ -27,7 +27,7 @@ public class TestCore extends Block { world.setBlockToAir(x, y, z); world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, BombConfig.missileRadius, x + 0.5, y + 0.5, z + 0.5)); - EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.missileRadius); + EntityNukeTorex.statFacStandard(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.missileRadius); } else if(meta > 0) { diff --git a/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java b/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java index 0c8f7b843..6d2e03597 100644 --- a/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java +++ b/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java @@ -45,16 +45,8 @@ public class EntityNukeTorex extends Entity { this.dataWatcher.addObject(11, new Integer(0)); } - @Override - @SideOnly(Side.CLIENT) - public int getBrightnessForRender(float p_70070_1_) { - return 15728880; - } - - @Override - public float getBrightness(float p_70013_1_) { - return 1.0F; - } + @Override @SideOnly(Side.CLIENT) public int getBrightnessForRender(float interp) { return 15728880; } + @Override public float getBrightness(float interp) { return 1.0F; } @Override public void onUpdate() { @@ -574,16 +566,12 @@ public class EntityNukeTorex extends Entity { return true; } - public static void statFac(World world, double x, double y, double z, float scale) { - EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float((float) BobMathUtil.squirt(scale * 0.01) * 1.5F, 0.5F, 5F)); - torex.setPosition(x, y, z); - torex.forceSpawn = true; - world.spawnEntityInWorld(torex); - TrackerUtil.setTrackingRange(world, torex, 1000); - } + public static void statFacStandard(World world, double x, double y, double z, float scale) { statFac(world, x, y, z, scale, 0); } + public static void statFacBale(World world, double x, double y, double z, float scale) { statFac(world, x, y, z, scale, 1); } - public static void statFacBale(World world, double x, double y, double z, float scale) { - EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float((float) BobMathUtil.squirt(scale * 0.01) * 1.5F, 0.5F, 5F)).setType(1); + public static void statFac(World world, double x, double y, double z, float scale, int type) { + EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float((float) BobMathUtil.squirt(scale * 0.01) * 1.5F, 0.5F, 5F)); + torex.setType(type); torex.setPosition(x, y, z); torex.forceSpawn = true; world.spawnEntityInWorld(torex); diff --git a/src/main/java/com/hbm/entity/grenade/EntityGrenadeCloud.java b/src/main/java/com/hbm/entity/grenade/EntityGrenadeCloud.java index d58cfe18c..084f50b36 100644 --- a/src/main/java/com/hbm/entity/grenade/EntityGrenadeCloud.java +++ b/src/main/java/com/hbm/entity/grenade/EntityGrenadeCloud.java @@ -26,7 +26,7 @@ public class EntityGrenadeCloud extends EntityGrenadeBase { this.setDead(); this.worldObj.playAuxSFX(2002, (int)Math.round(this.posX), (int)Math.round(this.posY), (int)Math.round(this.posZ), 0); - ExplosionChaos.spawnChlorine(worldObj, posX, posY, posZ, 250, 1.5, 1); + ExplosionChaos.spawnPoisonCloud(worldObj, posX, posY, posZ, 250, 1.5, 1); } } } diff --git a/src/main/java/com/hbm/entity/grenade/EntityGrenadeIFToxic.java b/src/main/java/com/hbm/entity/grenade/EntityGrenadeIFToxic.java index d17910734..83d04ad89 100644 --- a/src/main/java/com/hbm/entity/grenade/EntityGrenadeIFToxic.java +++ b/src/main/java/com/hbm/entity/grenade/EntityGrenadeIFToxic.java @@ -37,7 +37,6 @@ public class EntityGrenadeIFToxic extends EntityGrenadeBouncyBase { ExplosionLarge.explode(worldObj, posX, posY, posZ, 2, true, true, true); ExplosionChaos.poison(worldObj, (int)posX, (int)posY, (int)posZ, 12); ExplosionNukeGeneric.waste(worldObj, (int)posX, (int)posY, (int)posZ, 12); - ExplosionChaos.spawnChlorine(worldObj, posX, posY, posZ, 50, 1.5, 0); } } diff --git a/src/main/java/com/hbm/entity/grenade/EntityGrenadePC.java b/src/main/java/com/hbm/entity/grenade/EntityGrenadePC.java index 34b2068a3..9136b287a 100644 --- a/src/main/java/com/hbm/entity/grenade/EntityGrenadePC.java +++ b/src/main/java/com/hbm/entity/grenade/EntityGrenadePC.java @@ -26,7 +26,7 @@ public class EntityGrenadePC extends EntityGrenadeBase { this.setDead(); this.worldObj.playAuxSFX(2002, (int)Math.round(this.posX), (int)Math.round(this.posY), (int)Math.round(this.posZ), 0); - ExplosionChaos.spawnChlorine(worldObj, posX, posY, posZ, 500, 2, 2); + ExplosionChaos.spawnPoisonCloud(worldObj, posX, posY, posZ, 500, 2, 2); } } } diff --git a/src/main/java/com/hbm/entity/logic/EntityBomber.java b/src/main/java/com/hbm/entity/logic/EntityBomber.java index 911a09e28..3270d701e 100644 --- a/src/main/java/com/hbm/entity/logic/EntityBomber.java +++ b/src/main/java/com/hbm/entity/logic/EntityBomber.java @@ -61,7 +61,7 @@ public class EntityBomber extends EntityPlaneBase { if(type == 3) { worldObj.playSoundEffect((double) (posX + 0.5F), (double) (posY + 0.5F), (double) (posZ + 0.5F), "random.fizz", 5.0F, 2.6F + (rand.nextFloat() - rand.nextFloat()) * 0.8F); - ExplosionChaos.spawnChlorine(worldObj, this.posX, this.posY - 1F, this.posZ, 10, 0.5, 3); + ExplosionChaos.spawnPoisonCloud(worldObj, this.posX, this.posY - 1F, this.posZ, 10, 0.5, 3); } else if(type == 5) { @@ -75,7 +75,7 @@ public class EntityBomber extends EntityPlaneBase { } else if(type == 7) { worldObj.playSoundEffect((double) (posX + 0.5F), (double) (posY + 0.5F), (double) (posZ + 0.5F), "random.fizz", 5.0F, 2.6F + (rand.nextFloat() - rand.nextFloat()) * 0.8F); - ExplosionChaos.spawnChlorine(worldObj, this.posX, worldObj.getHeightValue((int) this.posX, (int) this.posZ) + 2, this.posZ, 10, 1, 2); + ExplosionChaos.spawnPoisonCloud(worldObj, this.posX, worldObj.getHeightValue((int) this.posX, (int) this.posZ) + 2, this.posZ, 10, 1, 2); } else { worldObj.playSoundEffect((double) (posX + 0.5F), (double) (posY + 0.5F), (double) (posZ + 0.5F), "hbm:entity.bombWhistle", 10.0F, 0.9F + rand.nextFloat() * 0.2F); diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java b/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java index e929e2fe2..0bfe4efb6 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java @@ -190,7 +190,7 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo case NUCLEAR: case TX: worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, (int) strength, posX, posY, posZ)); - EntityNukeTorex.statFac(worldObj, posX, posY, posZ, strength); + EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, strength); break; case BALEFIRE: EntityBalefire bf = new EntityBalefire(worldObj); @@ -203,7 +203,7 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo break; case N2: worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFacNoRad(worldObj, (int) strength, posX, posY, posZ)); - EntityNukeTorex.statFac(worldObj, posX, posY, posZ, strength); + EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, strength); break; case TAINT: int r = (int) strength; @@ -219,7 +219,7 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo break; case CLOUD: this.worldObj.playAuxSFX(2002, (int) Math.round(this.posX), (int) Math.round(this.posY), (int) Math.round(this.posZ), 0); - ExplosionChaos.spawnChlorine(worldObj, posX - motionX, posY - motionY, posZ - motionZ, 750, 2.5, 2); + ExplosionChaos.spawnPoisonCloud(worldObj, posX - motionX, posY - motionY, posZ - motionZ, 750, 2.5, 2); break; case TURBINE: ExplosionLarge.explode(worldObj, posX, posY, posZ, 10, true, false, true); diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java index ab284113f..dfdfe9b8e 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java @@ -65,7 +65,7 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { public EntityMissileNuclear(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } @Override public void onImpact() { this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius, posX, posY, posZ)); - EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius); + EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, BombConfig.missileRadius); } @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_nuclear); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_nuclear); } @@ -76,7 +76,7 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { public EntityMissileMirv(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } @Override public void onImpact() { worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ)); - EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2); + EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2); } @Override public List getDebris() { List list = new ArrayList(); @@ -107,7 +107,7 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { public EntityMissileDoomsday(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } @Override public void onImpact() { this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ).moreFallout(100)); - EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2); + EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2); } @Override public List getDebris() { return null; } @Override public ItemStack getDebrisRareDrop() { return null; } @@ -120,7 +120,7 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { public EntityMissileDoomsdayRusted(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } @Override public void onImpact() { this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius, posX, posY, posZ).moreFallout(100)); - EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius); + EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, BombConfig.missileRadius); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_doomsday_rusted); } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityBombletZeta.java b/src/main/java/com/hbm/entity/projectile/EntityBombletZeta.java index e6b3f672c..eb870b398 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBombletZeta.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBombletZeta.java @@ -1,8 +1,8 @@ package com.hbm.entity.projectile; import com.hbm.config.BombConfig; +import com.hbm.entity.effect.EntityMist; import com.hbm.entity.logic.EntityNukeExplosionMK5; -import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; import com.hbm.explosion.vanillant.standard.BlockMutatorFire; @@ -11,6 +11,7 @@ import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon; import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.handler.threading.PacketThreading; +import com.hbm.inventory.fluid.Fluids; import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -70,7 +71,11 @@ public class EntityBombletZeta extends EntityThrowable { } if(type == 2) { worldObj.playSoundEffect((double) (posX + 0.5F), (double) (posY + 0.5F), (double) (posZ + 0.5F), "random.fizz", 5.0F, 2.6F + (rand.nextFloat() - rand.nextFloat()) * 0.8F); - ExplosionChaos.spawnChlorine(worldObj, this.posX + 0.5F - motionX, this.posY + 0.5F - motionY, this.posZ + 0.5F - motionZ, 75, 2, 0); + EntityMist mist = new EntityMist(worldObj); + mist.setType(Fluids.CHLORINE); + mist.setPosition(this.posX - motionX, this.posY - motionY, this.posZ - motionZ); + mist.setArea(15, 7.5F); + worldObj.spawnEntityInWorld(mist); } if(type == 4) { worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, (int) (BombConfig.fatmanRadius * 1.5), posX, posY, posZ)); diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java index 2ada3ea35..728c2d1ad 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java @@ -9,7 +9,6 @@ import com.hbm.entity.effect.EntityCloudFleijaRainbow; import com.hbm.entity.effect.EntityEMPBlast; import com.hbm.entity.logic.EntityNukeExplosionMK3; import com.hbm.entity.logic.EntityNukeExplosionMK5; -import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionNukeGeneric; import com.hbm.explosion.vanillant.ExplosionVNT; @@ -447,11 +446,6 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet if(config.shrapnel > 0 && !worldObj.isRemote) ExplosionLarge.spawnShrapnels(worldObj, posX, posY, posZ, config.shrapnel); - if(config.chlorine > 0 && !worldObj.isRemote) { - ExplosionChaos.spawnChlorine(worldObj, posX, posY, posZ, config.chlorine, 1.5, 0); - worldObj.playSoundEffect((double)(posX + 0.5F), (double)(posY + 0.5F), (double)(posZ + 0.5F), "random.fizz", 5.0F, 2.6F + (rand.nextFloat() - rand.nextFloat()) * 0.8F); - } - if(config.rainbow > 0 && !worldObj.isRemote) { EntityNukeExplosionMK3 ex = EntityNukeExplosionMK3.statFacFleija(worldObj, posX, posY, posZ, config.rainbow); if(!ex.isDead) { diff --git a/src/main/java/com/hbm/entity/projectile/EntityModBeam.java b/src/main/java/com/hbm/entity/projectile/EntityModBeam.java index f8a2e6be7..60193ba8b 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityModBeam.java +++ b/src/main/java/com/hbm/entity/projectile/EntityModBeam.java @@ -490,7 +490,7 @@ public class EntityModBeam extends Entity implements IProjectile { this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "random.explode", 100.0f, this.worldObj.rand.nextFloat() * 0.1F + 0.9F); this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.gadgetRadius, posX, posY, posZ)); - EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.gadgetRadius); + EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, BombConfig.gadgetRadius); } } } diff --git a/src/main/java/com/hbm/explosion/ExplosionChaos.java b/src/main/java/com/hbm/explosion/ExplosionChaos.java index dd15674cf..a3a249089 100644 --- a/src/main/java/com/hbm/explosion/ExplosionChaos.java +++ b/src/main/java/com/hbm/explosion/ExplosionChaos.java @@ -7,7 +7,6 @@ import com.hbm.blocks.ModBlocks; import com.hbm.entity.grenade.EntityGrenadeTau; import com.hbm.entity.grenade.EntityGrenadeZOMG; import com.hbm.entity.item.EntityFallingBlockNT; -import com.hbm.entity.particle.EntityChlorineFX; import com.hbm.entity.particle.EntityCloudFX; import com.hbm.entity.particle.EntityModFX; import com.hbm.entity.particle.EntityOrangeFX; @@ -28,7 +27,6 @@ import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityTNTPrimed; import net.minecraft.entity.passive.EntitySheep; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; @@ -40,34 +38,13 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated @Spaghetti("my eyes are bleeding") -public class ExplosionChaos { +public class ExplosionChaos { //TODO: destroy this entire class private final static Random random = new Random(); private static Random rand = new Random(); - public static void explode(World world, int x, int y, int z, int bombStartStrength) { - - int r = bombStartStrength; - int r2 = r * r; - int r22 = r2 / 2; - for (int xx = -r; xx < r; xx++) { - int X = xx + x; - int XX = xx * xx; - for (int yy = -r; yy < r; yy++) { - int Y = yy + y; - int YY = XX + yy * yy; - for (int zz = -r; zz < r; zz++) { - int Z = zz + z; - int ZZ = YY + zz * zz; - if (ZZ < r22) { - destruction(world, X, Y, Z); - } - } - } - } - } - public static void hardenVirus(World world, int x, int y, int z, int bombStartStrength) { int r = bombStartStrength; @@ -130,8 +107,10 @@ public class ExplosionChaos { int ZZ = YY + zz * zz; if (ZZ < r22) { - if(world.getBlock(X, Y, Z).getExplosionResistance(null) <= 70) - pDestruction(world, X, Y, Z); + if(world.getBlock(X, Y, Z).getExplosionResistance(null) <= 70) { + EntityFallingBlockNT entityfallingblock = new EntityFallingBlockNT(world, X + 0.5, Y + 0.5, Z + 0.5, world.getBlock(X, Y, Z), world.getBlockMetadata(X, Y, Z)); + world.spawnEntityInWorld(entityfallingblock); + } } } } @@ -183,79 +162,6 @@ public class ExplosionChaos { } } - public static void spawnExplosion(World world, int x, int y, int z, int bound) { - - int randX; - int randY; - int randZ; - - for (int i = 0; i < 25; i++) { - - randX = random.nextInt(bound); - randY = random.nextInt(bound); - randZ = random.nextInt(bound); - - world.createExplosion(null, x + randX, y + randY, z + randZ, 10.0F, true); - // ExplosionChaos.explode(world, x + randX, y + randY, z + randZ, - // 5); - - randX = random.nextInt(bound); - randY = random.nextInt(bound); - randZ = random.nextInt(bound); - - world.createExplosion(null, x + randX, y - randY, z + randZ, 10.0F, true); - // ExplosionChaos.explode(world, x - randX, y + randY, z + randZ, - // 5); - - randX = random.nextInt(bound); - randY = random.nextInt(bound); - randZ = random.nextInt(bound); - - world.createExplosion(null, x + randX, y + randY, z - randZ, 10.0F, true); - // ExplosionChaos.explode(world, x + randX, y - randY, z + randZ, - // 5); - - randX = random.nextInt(bound); - randY = random.nextInt(bound); - randZ = random.nextInt(bound); - - world.createExplosion(null, x - randX, y + randY, z + randZ, 10.0F, true); - // ExplosionChaos.explode(world, x + randX, y + randY, z - randZ, - // 5); - randX = random.nextInt(bound); - randY = random.nextInt(bound); - randZ = random.nextInt(bound); - - world.createExplosion(null, x - randX, y - randY, z + randZ, 10.0F, true); - // ExplosionChaos.explode(world, x - randX, y - randY, z + randZ, - // 5); - - randX = random.nextInt(bound); - randY = random.nextInt(bound); - randZ = random.nextInt(bound); - - world.createExplosion(null, x - randX, y + randY, z - randZ, 10.0F, true); - // ExplosionChaos.explode(world, x - randX, y + randY, z - randZ, - // 5); - - randX = random.nextInt(bound); - randY = random.nextInt(bound); - randZ = random.nextInt(bound); - - world.createExplosion(null, x + randX, y - randY, z - randZ, 10.0F, true); - // ExplosionChaos.explode(world, x + randX, y - randY, z - randZ, - // 5); - - randX = random.nextInt(bound); - randY = random.nextInt(bound); - randZ = random.nextInt(bound); - - world.createExplosion(null, x - randX, y - randY, z - randZ, 10.0F, true); - // ExplosionChaos.explode(world, x - randX, y - randY, z - randZ, - // 5); - } - } - /** * Sets all flammable blocks on fire * @@ -327,15 +233,13 @@ public class ExplosionChaos { } - public static void spawnChlorine(World world, double x, double y, double z, int count, double speed, int type) { + @Deprecated public static void spawnPoisonCloud(World world, double x, double y, double z, int count, double speed, int type) { for(int i = 0; i < count; i++) { EntityModFX fx = null; - if(type == 0) { - fx = new EntityChlorineFX(world, x, y, z, 0.0, 0.0, 0.0); - } else if(type == 1) { + if(type == 1) { fx = new EntityCloudFX(world, x, y, z, 0.0, 0.0, 0.0); } else if(type == 2) { fx = new EntityPinkCloudFX(world, x, y, z, 0.0, 0.0, 0.0); @@ -365,25 +269,6 @@ public class ExplosionChaos { } } - public static void destruction(World world, int x, int y, int z) { - - if (world.getBlock(x, y, z) == Blocks.bedrock || world.getBlock(x, y, z) == ModBlocks.reinforced_brick - || world.getBlock(x, y, z) == ModBlocks.reinforced_sand - || world.getBlock(x, y, z) == ModBlocks.reinforced_glass - || world.getBlock(x, y, z) == ModBlocks.reinforced_lamp_on - || world.getBlock(x, y, z) == ModBlocks.reinforced_lamp_off) { - - } else { - world.setBlock(x, y, z, Blocks.air); - } - - } - - public static void pDestruction(World world, int x, int y, int z) { - EntityFallingBlockNT entityfallingblock = new EntityFallingBlockNT(world, (double) ((float) x + 0.5F), (double) ((float) y + 0.5F), (double) ((float) z + 0.5F), world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); - world.spawnEntityInWorld(entityfallingblock); - } - public static void cluster(World world, int x, int y, int z, int count, int gravity) { double d1 = 0; @@ -436,35 +321,6 @@ public class ExplosionChaos { } } - public static void nuke(World world, int x, int y, int z, int count) { - - double d1 = 0; - double d2 = 0; - double d3 = 0; - EntityTNTPrimed fragment; - - for (int i = 0; i < 5; i++) { - d1 = rand.nextDouble(); - d2 = rand.nextDouble(); - d3 = rand.nextDouble(); - - if (rand.nextInt(2) == 0) { - d1 *= -1; - } - - if (rand.nextInt(2) == 0) { - d3 *= -1; - } - - fragment = new EntityTNTPrimed(world); - fragment.motionX = d1; - fragment.motionY = d2; - fragment.motionZ = d3; - - world.spawnEntityInWorld(fragment); - } - } - public static void frag(World world, int x, int y, int z, int count, boolean flame, Entity shooter) { double d1 = 0; diff --git a/src/main/java/com/hbm/items/machine/ItemLens.java b/src/main/java/com/hbm/items/machine/ItemLens.java index 93ebb1f86..905af7c05 100644 --- a/src/main/java/com/hbm/items/machine/ItemLens.java +++ b/src/main/java/com/hbm/items/machine/ItemLens.java @@ -43,15 +43,14 @@ public class ItemLens extends Item { stack.stackTagCompound.setLong("damage", damage); } - - public double getDurabilityForDisplay(ItemStack stack) - { - return (double)getLensDamage(stack) / (double)maxDamage; - } - - public boolean showDurabilityBar(ItemStack stack) - { - return getDurabilityForDisplay(stack) != 0; - } + @Override + public double getDurabilityForDisplay(ItemStack stack) { + return (double) getLensDamage(stack) / (double) maxDamage; + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return getDurabilityForDisplay(stack) != 0; + } } diff --git a/src/main/java/com/hbm/items/tool/WeaponSpecial.java b/src/main/java/com/hbm/items/tool/WeaponSpecial.java index c59daa016..49041e842 100644 --- a/src/main/java/com/hbm/items/tool/WeaponSpecial.java +++ b/src/main/java/com/hbm/items/tool/WeaponSpecial.java @@ -152,7 +152,7 @@ public class WeaponSpecial extends ItemSword { if(entityPlayer.fallDistance >= 20 && !((EntityPlayer)entityPlayer).capabilities.isCreativeMode) { if(!world.isRemote) { world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, 100, entity.posX, entity.posY, entity.posZ)); - EntityNukeTorex.statFac(world, entity.posX, entity.posY, entity.posZ, 100); + EntityNukeTorex.statFacStandard(world, entity.posX, entity.posY, entity.posZ, 100); } } } diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java index ff3bb0829..6d968fcfd 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java @@ -262,7 +262,7 @@ public class ItemAmmoArty extends Item { this.itemTypes[NUKE] = new ArtilleryShell("ammo_arty_nuke", SpentCasing.COLOR_CASE_16INCH_NUKE) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { shell.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(shell.worldObj, BombConfig.missileRadius, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord)); - EntityNukeTorex.statFac(shell.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, BombConfig.missileRadius); + EntityNukeTorex.statFacStandard(shell.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, BombConfig.missileRadius); shell.setDead(); } }; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java index 86461c4ee..793284b3d 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java @@ -93,7 +93,7 @@ public class XFactoryFolly { if(bullet.isDead) return; bullet.setDead(); bullet.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(bullet.worldObj, 100, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord)); - EntityNukeTorex.statFac(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 100); + EntityNukeTorex.statFacStandard(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 100); }; public static void init() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java index 3a6712af9..6acc2532f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine; import api.hbm.block.ILaserable; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardReceiver; +import api.hbm.redstoneoverradio.IRORInteractive; import api.hbm.tile.IInfoProviderEC; import com.hbm.handler.CompatHandler; @@ -38,7 +39,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.List; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEnergyReceiverMK2, ILaserable, IFluidStandardReceiver, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEnergyReceiverMK2, ILaserable, IFluidStandardReceiver, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent, IRORInteractive { public long power; public static final long maxPower = 1000000000L; @@ -336,4 +337,46 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, joules > 0 || prev > 0 ? 20 : 0); data.setDouble(CompatEnergyControl.D_CONSUMPTION_HE, maxPower * watts / 2000); } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_FUNCTION + "setpower" + NAME_SEPARATOR + "percent", + PREFIX_FUNCTION + "toggle", + PREFIX_FUNCTION + "switch" + NAME_SEPARATOR + "on/off", + }; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "setpower").equals(name) && params.length > 0) { + int watts = IRORInteractive.parseInt(params[0], 0, 100); + this.watts = watts; + this.markChanged(); + return null; + } + + if((PREFIX_FUNCTION + "toggle").equals(name)) { + this.isOn = !this.isOn; + this.markChanged(); + return null; + } + + + if((PREFIX_FUNCTION + "switch").equals(name) && params.length > 0) { + if("on".equals(params[0])) { + this.isOn = true; + this.markChanged(); + return null; + } + if("off".equals(params[0])) { + this.isOn = false; + this.markChanged(); + return null; + } + } + + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java index 2647d4c6e..df1890191 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java @@ -10,6 +10,8 @@ import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.redstoneoverradio.IRORInteractive; +import api.hbm.redstoneoverradio.IRORValueProvider; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; @@ -29,7 +31,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityCoreStabilizer extends TileEntityMachineBase implements IEnergyReceiverMK2, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityCoreStabilizer extends TileEntityMachineBase implements IEnergyReceiverMK2, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent, IRORValueProvider, IRORInteractive { public long power; public static final long maxPower = 2500000000L; @@ -245,4 +247,33 @@ public class TileEntityCoreStabilizer extends TileEntityMachineBase implements I else data.setDouble(CompatEnergyControl.D_CONSUMPTION_HE, 0); } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "durability", + PREFIX_VALUE + "durabilitypercent", + PREFIX_FUNCTION + "setpower" + NAME_SEPARATOR + "percent", + }; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "durability").equals(name)) return (slots[0] != null && slots[0].getItem() == ModItems.ams_lens) ? "" + (((ItemLens) slots[0].getItem()).maxDamage - ItemLens.getLensDamage(slots[0])) : "0"; + if((PREFIX_VALUE + "durabilitypercent").equals(name)) return (slots[0] != null && slots[0].getItem() == ModItems.ams_lens) ? "" + ((((ItemLens) slots[0].getItem()).maxDamage - ItemLens.getLensDamage(slots[0])) * 100 / ((ItemLens) slots[0].getItem()).maxDamage) : "0"; + return null; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "setpower").equals(name) && params.length > 0) { + int watts = IRORInteractive.parseInt(params[0], 0, 100); + this.watts = watts; + this.markChanged(); + return null; + } + + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java index fd92fb157..1b75df130 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java @@ -32,6 +32,8 @@ import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; +import api.hbm.redstoneoverradio.IRORInteractive; +import api.hbm.redstoneoverradio.IRORValueProvider; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -52,7 +54,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable { +public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable, IRORValueProvider, IRORInteractive { public long power; public static final long maxPower = 10000000; @@ -657,4 +659,47 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece public FluidTank getTankToPaste() { return null; } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "durability", + PREFIX_VALUE + "durabilitypercent", + PREFIX_FUNCTION + "toggle", + PREFIX_FUNCTION + "switch" + NAME_SEPARATOR + "on/off", + }; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "durability").equals(name)) return (slots[3] != null && slots[3].getItem() instanceof ItemFusionShield) ? "" + (((ItemFusionShield) slots[3].getItem()).maxDamage - ItemFusionShield.getShieldDamage(slots[3])) : "0"; + if((PREFIX_VALUE + "durabilitypercent").equals(name)) return (slots[3] != null && slots[3].getItem() instanceof ItemFusionShield) ? "" + ((((ItemFusionShield) slots[3].getItem()).maxDamage - ItemFusionShield.getShieldDamage(slots[3])) * 100 / ((ItemFusionShield) slots[3].getItem()).maxDamage) : "0"; + return null; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "toggle").equals(name)) { + this.isOn = !this.isOn; + this.markChanged(); + return null; + } + + + if((PREFIX_FUNCTION + "switch").equals(name) && params.length > 0) { + if("on".equals(params[0])) { + this.isOn = true; + this.markChanged(); + return null; + } + if("off".equals(params[0])) { + this.isOn = false; + this.markChanged(); + return null; + } + } + + return null; + } } From 9f758c49bc323ed7184d691f900a34e7cbd0ac4c Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 15 May 2025 16:01:15 +0200 Subject: [PATCH 023/491] dud crap --- changelog | 9 ++- .../com/hbm/blocks/bomb/BlockCrashedBomb.java | 78 +++++++++++++++---- .../java/com/hbm/crafting/ToolRecipes.java | 1 - src/main/java/com/hbm/items/ModItems.java | 2 +- .../com/hbm/items/tool/ItemAmatExtractor.java | 44 ----------- .../com/hbm/items/weapon/ItemAmmoArty.java | 6 +- 6 files changed, 75 insertions(+), 65 deletions(-) diff --git a/changelog b/changelog index 25db9ffc5..c866d443b 100644 --- a/changelog +++ b/changelog @@ -1,10 +1,11 @@ ## Added * Sandbags * Connect to other sandbags or solid blocks - * Pretts + * Pretty * Wooden barrier * Pretty * Automatically walls off connected solid blocks in addition to the direction it was placed in +* Some other wooden blocks like a roof, ceiling and scaffold ## Changed * Increased bayonet damage from 5 to 7.5 hearts @@ -16,8 +17,12 @@ * New server configs * `CRATE_OPEN_HELD` can toggle whether crates can be opened when held * `CRATE_KEEP_CONTENTS` can toggle whether crates keep their contents when broken +* Duds now have multiple variants + * Dismantling different variants yields different drops + * Magnetic extraction can no longer be performed ## Fixed * Fixed RoR controller having the wrong recipe * Either fixed the crate dupe/voiding issues or made them even worse -* Fixed skeletons and pedestals allowing blocks to be placed inside the player \ No newline at end of file +* Fixed skeletons and pedestals allowing blocks to be placed inside the player +* Fixed artillery shells not playing the explosion animation when directly impacting entities \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java b/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java index 191b36173..811d2a128 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java @@ -3,11 +3,20 @@ package com.hbm.blocks.bomb; import com.hbm.blocks.BlockEnumMulti; import com.hbm.config.BombConfig; import com.hbm.entity.logic.EntityBalefire; +import com.hbm.entity.logic.EntityNukeExplosionMK5; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; +import com.hbm.explosion.vanillant.standard.BlockProcessorStandard; +import com.hbm.explosion.vanillant.standard.EntityProcessorCross; +import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.handler.threading.PacketThreading; import com.hbm.interfaces.IBomb; import com.hbm.items.ModItems; +import com.hbm.main.MainRegistry; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.particle.helper.ExplosionCreator; import com.hbm.tileentity.bomb.TileEntityCrashedBomb; +import com.hbm.util.EnumUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.ITileEntityProvider; @@ -42,11 +51,27 @@ public class BlockCrashedBomb extends BlockEnumMulti implements ITileEntityProvi if(world.isRemote) return true; if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.defuser) { + + EnumDudType type = EnumUtil.grabEnumSafely(EnumDudType.class, world.getBlockMetadata(x, y, z)); + //TODO: make this less scummy + if(type == type.BALEFIRE) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.egg_balefire_shard))); + } + if(type == type.CONVENTIONAL) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ball_tnt, 16))); + } + if(type == type.NUKE) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ball_tnt, 8))); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.billet_plutonium, 4))); + } + if(type == type.SALTED) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ball_tnt, 8))); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.billet_plutonium, 2))); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_cobalt, 12))); + } + world.func_147480_a(x, y, z, false); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.egg_balefire_shard))); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.plate_steel, 10 + world.rand.nextInt(15)))); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.plate_titanium, 2 + world.rand.nextInt(7)))); return true; } @@ -59,20 +84,45 @@ public class BlockCrashedBomb extends BlockEnumMulti implements ITileEntityProvi if(!world.isRemote) { world.setBlockToAir(x, y, z); - EntityBalefire bf = new EntityBalefire(world); - bf.posX = x; - bf.posY = y; - bf.posZ = z; - bf.destructionRange = (int) (BombConfig.fatmanRadius * 1.25); - world.spawnEntityInWorld(bf); + EnumDudType type = EnumUtil.grabEnumSafely(EnumDudType.class, world.getBlockMetadata(x, y, z)); - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "muke"); - data.setBoolean("balefire", true); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, x + 0.5, y + 0.5, z + 0.5), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 250)); - world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); + if(type == type.BALEFIRE) { + EntityBalefire bf = new EntityBalefire(world); + bf.setPosition(x, y, z); + bf.destructionRange = (int) (BombConfig.fatmanRadius * 1.25); + world.spawnEntityInWorld(bf); + spawnMush(world, x, y, z, true); + } + + if(type == type.CONVENTIONAL) { + ExplosionVNT xnt = new ExplosionVNT(world, x + 0.5, y + 0.5, z + 0.5, 35F); + xnt.setBlockAllocator(new BlockAllocatorStandard(24)); + xnt.setBlockProcessor(new BlockProcessorStandard().setNoDrop()); + xnt.setEntityProcessor(new EntityProcessorCross(5D).withRangeMod(1.5F)); + xnt.setPlayerProcessor(new PlayerProcessorStandard()); + xnt.explode(); + ExplosionCreator.composeEffectLarge(world, x + 0.5, y + 0.5, z + 0.5); + } + + if(type == type.NUKE) { + world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, 35, x + 0.5, y + 0.5, z + 0.5)); + spawnMush(world, x, y, z, MainRegistry.polaroidID == 11 || world.rand.nextInt(100) == 0); + } + + if(type == type.SALTED) { + world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, 25, x + 0.5, y + 0.5, z + 0.5).moreFallout(25)); + spawnMush(world, x, y, z, MainRegistry.polaroidID == 11 || world.rand.nextInt(100) == 0); + } } return BombReturnCode.DETONATED; } + + public static void spawnMush(World world, int x, int y, int z, boolean balefire) { + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "muke"); + data.setBoolean("balefire", balefire); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, x + 0.5, y + 0.5, z + 0.5), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 250)); + } } diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 4399f08c3..26a04b5fe 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -129,7 +129,6 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.defuser, 1), new Object[] { " PS", "P P", " P ", 'P', ANY_PLASTIC.ingot(), 'S', STEEL.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.coltan_tool, 1), new Object[] { "ACA", "CXC", "ACA", 'A', ALLOY.ingot(), 'C', CINNABAR.crystal(), 'X', Items.compass }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.reacher, 1), new Object[] { "BIB", "P P", "B B", 'B', W.bolt(), 'I', W.ingot(), 'P', ANY_RUBBER.ingot() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_tool, 1), new Object[] { "TBT", "SRS", "SCS", 'T', TA.nugget(), 'B', ModItems.nugget_bismuth, 'S', ANY_RESISTANTALLOY.ingot(), 'R', ModItems.reacher, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP) }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.sat_designator, 1), new Object[] { "RRD", "PIC", " P", 'P', GOLD.plate(), 'R', Items.redstone, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', ModItems.sat_chip, 'I', GOLD.ingot() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.sat_relay), new Object[] { ModItems.sat_chip, ModItems.ducttape, ModItems.radar_linker }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.settings_tool), new Object[] { " P ", "PCP", "III", 'P', IRON.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG), 'I', ModItems.plate_polymer }); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index be5922927..63715bbe3 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -3883,7 +3883,7 @@ public class ModItems { defuser = new ItemTooling(ToolType.DEFUSER, 100).setUnlocalizedName("defuser").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":defuser"); reacher = new Item().setUnlocalizedName("reacher").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":reacher"); - bismuth_tool = new ItemAmatExtractor().setUnlocalizedName("bismuth_tool").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":bismuth_tool"); + bismuth_tool = new ItemAmatExtractor().setUnlocalizedName("bismuth_tool").setMaxStackSize(1).setFull3D().setCreativeTab(null).setTextureName(RefStrings.MODID + ":bismuth_tool"); meltdown_tool = new ItemDyatlov().setUnlocalizedName("meltdown_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":meltdown_tool"); flame_pony = new ItemCustomLore().setUnlocalizedName("flame_pony").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flame_pony"); diff --git a/src/main/java/com/hbm/items/tool/ItemAmatExtractor.java b/src/main/java/com/hbm/items/tool/ItemAmatExtractor.java index ffd2b3ddb..0086e8474 100644 --- a/src/main/java/com/hbm/items/tool/ItemAmatExtractor.java +++ b/src/main/java/com/hbm/items/tool/ItemAmatExtractor.java @@ -1,50 +1,6 @@ package com.hbm.items.tool; -import com.hbm.blocks.bomb.BlockCrashedBomb; -import com.hbm.items.ModItems; -import com.hbm.util.ContaminationUtil; -import com.hbm.util.ContaminationUtil.ContaminationType; -import com.hbm.util.ContaminationUtil.HazardType; - -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; public class ItemAmatExtractor extends Item { - - @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { - - if(world.getBlock(x, y, z) instanceof BlockCrashedBomb) { - if(!world.isRemote && player.inventory.hasItem(ModItems.cell_empty)) { - - float chance = world.rand.nextFloat(); - - if(chance < 0.01) { - ((BlockCrashedBomb) world.getBlock(x, y, z)).explode(world, x, y, z); - } else if(chance <= 0.3) { - player.inventory.consumeInventoryItem(ModItems.cell_empty); - - if(!player.inventory.addItemStackToInventory(new ItemStack(ModItems.cell_balefire))) { - player.dropPlayerItemWithRandomChoice(new ItemStack(ModItems.cell_balefire, 1, 0), false); - } - } else { - player.inventory.consumeInventoryItem(ModItems.cell_empty); - - if(!player.inventory.addItemStackToInventory(new ItemStack(ModItems.cell_antimatter))) { - player.dropPlayerItemWithRandomChoice(new ItemStack(ModItems.cell_antimatter, 1, 0), false); - } - } - - player.inventoryContainer.detectAndSendChanges(); - ContaminationUtil.contaminate(player, HazardType.RADIATION, ContaminationType.CREATIVE, 50.0F); - } - - player.swingItem(); - return true; - } - - return false; - } } diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java index 6d968fcfd..1f9cd0582 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java @@ -245,9 +245,9 @@ public class ItemAmmoArty extends Item { private void init() { /* STANDARD SHELLS */ - this.itemTypes[NORMAL] = new ArtilleryShell("ammo_arty", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 10F, 3F, false); ExplosionCreator.composeEffect(shell.worldObj, mop.blockX + 0.5, mop.blockY + 0.5, mop.blockZ + 0.5, 10, 2F, 0.5F, 25F, 5, 0, 20, 0.75F, 1F, -2F, 150); }}; - this.itemTypes[CLASSIC] = new ArtilleryShell("ammo_arty_classic", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 15F, 5F, false); ExplosionCreator.composeEffect(shell.worldObj, mop.blockX + 0.5, mop.blockY + 0.5, mop.blockZ + 0.5, 15, 5F, 1F, 45F, 10, 0, 50, 1F, 3F, -2F, 200); }}; - this.itemTypes[EXPLOSIVE] = new ArtilleryShell("ammo_arty_he", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 15F, 3F, true); ExplosionCreator.composeEffect(shell.worldObj, mop.blockX + 0.5, mop.blockY + 0.5, mop.blockZ + 0.5, 15, 5F, 1F, 45F, 10, 16, 50, 1F, 3F, -2F, 200); }}; + this.itemTypes[NORMAL] = new ArtilleryShell("ammo_arty", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 10F, 3F, false); ExplosionCreator.composeEffect(shell.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 10, 2F, 0.5F, 25F, 5, 0, 20, 0.75F, 1F, -2F, 150); }}; + this.itemTypes[CLASSIC] = new ArtilleryShell("ammo_arty_classic", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 15F, 5F, false); ExplosionCreator.composeEffect(shell.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 15, 5F, 1F, 45F, 10, 0, 50, 1F, 3F, -2F, 200); }}; + this.itemTypes[EXPLOSIVE] = new ArtilleryShell("ammo_arty_he", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 15F, 3F, true); ExplosionCreator.composeEffect(shell.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 15, 5F, 1F, 45F, 10, 16, 50, 1F, 3F, -2F, 200); }}; /* MINI NUKE */ this.itemTypes[MINI_NUKE] = new ArtilleryShell("ammo_arty_mini_nuke", SpentCasing.COLOR_CASE_16INCH_NUKE) { From d360ebe6ccbb4dbefc5e444319cfec73b8a066c5 Mon Sep 17 00:00:00 2001 From: Night Heron Date: Thu, 15 May 2025 23:14:21 +0800 Subject: [PATCH 024/491] Add files via upload --- src/main/resources/assets/hbm/lang/zh_CN.lang | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 5d8f62943..3232fb3c9 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -6060,3 +6060,8 @@ item.ammo_standard.ct_mortar_charge.name=重型炸药包 item.gun_charge_thrower.name=炸药投掷器 tile.sandbags.name=沙袋 tile.wood_barrier.name=木制围栏 +item.ammo_standard.nuke_balefire.name=Mini Nuke, Balefire Egg +item.gun_minigun_dual.name=双联转管机枪 +tile.wood_structure.ceiling.name=木质顶棚 +tile.wood_structure.roof.name=木质顶板 +tile.wood_structure.scaffold.name=木质脚手架 From f7baf332cbc568957fd4c7e40ecc17d48f973e8f Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 16 May 2025 14:46:12 +0200 Subject: [PATCH 025/491] even more flixes --- changelog | 6 +++++- .../java/com/hbm/config/ServerConfig.java | 2 ++ .../java/com/hbm/hazard/HazardSystem.java | 7 +++++-- src/main/java/com/hbm/main/MainRegistry.java | 4 ++-- .../java/com/hbm/main/ModEventHandler.java | 19 ++++++++++++------- .../network/TileEntityPneumoTube.java | 6 ++++++ 6 files changed, 32 insertions(+), 12 deletions(-) diff --git a/changelog b/changelog index c866d443b..38205883a 100644 --- a/changelog +++ b/changelog @@ -17,12 +17,16 @@ * New server configs * `CRATE_OPEN_HELD` can toggle whether crates can be opened when held * `CRATE_KEEP_CONTENTS` can toggle whether crates keep their contents when broken + * `ITEM_HAZARD_DROP_TICKRATE` can change the time between ticks for dropped item hazard checks (gunpowder, lithium), default is 2, lowest is 1 * Duds now have multiple variants * Dismantling different variants yields different drops * Magnetic extraction can no longer be performed +* `isItemBlacklisted` on the item hazard checks now employs caching instead of doing a full ore dictionary lookup for every single check, this should make it marginally more performant ## Fixed * Fixed RoR controller having the wrong recipe * Either fixed the crate dupe/voiding issues or made them even worse * Fixed skeletons and pedestals allowing blocks to be placed inside the player -* Fixed artillery shells not playing the explosion animation when directly impacting entities \ No newline at end of file +* Fixed artillery shells not playing the explosion animation when directly impacting entities +* Fixed bauxite and malachite vein toggles being on backwards +* Fixed penumatic tube order settings not saving \ No newline at end of file diff --git a/src/main/java/com/hbm/config/ServerConfig.java b/src/main/java/com/hbm/config/ServerConfig.java index b52910eca..0ca1ccdcf 100644 --- a/src/main/java/com/hbm/config/ServerConfig.java +++ b/src/main/java/com/hbm/config/ServerConfig.java @@ -19,6 +19,7 @@ public class ServerConfig extends RunningConfig { public static ConfigWrapper TAINT_TRAILS = new ConfigWrapper(false); public static ConfigWrapper CRATE_OPEN_HELD = new ConfigWrapper(true); public static ConfigWrapper CRATE_KEEP_CONTENTS = new ConfigWrapper(true); + public static ConfigWrapper ITEM_HAZARD_DROP_TICKRATE = new ConfigWrapper(2); private static void initDefaults() { configMap.put("DAMAGE_COMPATIBILITY_MODE", DAMAGE_COMPATIBILITY_MODE); @@ -30,6 +31,7 @@ public class ServerConfig extends RunningConfig { configMap.put("TAINT_TRAILS", TAINT_TRAILS); configMap.put("CRATE_OPEN_HELD", CRATE_OPEN_HELD); configMap.put("CRATE_KEEP_CONTENTS", CRATE_KEEP_CONTENTS); + configMap.put("ITEM_HAZARD_DROP_TICKRATE", ITEM_HAZARD_DROP_TICKRATE); } /** Initializes defaults, then reads the config file if it exists, then writes the config file. */ diff --git a/src/main/java/com/hbm/hazard/HazardSystem.java b/src/main/java/com/hbm/hazard/HazardSystem.java index 3df3590a7..07e59a7da 100644 --- a/src/main/java/com/hbm/hazard/HazardSystem.java +++ b/src/main/java/com/hbm/hazard/HazardSystem.java @@ -80,15 +80,18 @@ public class HazardSystem { public static boolean isItemBlacklisted(ItemStack stack) { - if(stackBlacklist.contains(new ComparableStack(stack).makeSingular())) + ComparableStack comp = new ComparableStack(stack).makeSingular(); + if(stackBlacklist.contains(comp)) return true; int[] ids = OreDictionary.getOreIDs(stack); for(int id : ids) { String name = OreDictionary.getOreName(id); - if(dictBlacklist.contains(name)) + if(dictBlacklist.contains(name)) { + stackBlacklist.add(comp); // caching! return true; + } } return false; diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 55eedd3df..95df82f43 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -890,8 +890,8 @@ public class MainRegistry { if(WorldConfig.enableSulfurCave) new OreCave(ModBlocks.stone_resource, 0).setThreshold(1.5D).setRangeMult(20).setYLevel(30).setMaxRange(20).withFluid(ModBlocks.sulfuric_acid_block); //sulfur if(WorldConfig.enableAsbestosCave) new OreCave(ModBlocks.stone_resource, 1).setThreshold(1.75D).setRangeMult(20).setYLevel(25).setMaxRange(20); //asbestos if(WorldConfig.enableHematite) new OreLayer3D(ModBlocks.stone_resource, EnumStoneType.HEMATITE.ordinal()).setScaleH(0.04D).setScaleV(0.25D).setThreshold(230); - if(WorldConfig.enableMalachite) new OreLayer3D(ModBlocks.stone_resource, EnumStoneType.BAUXITE.ordinal()).setScaleH(0.03D).setScaleV(0.15D).setThreshold(300); - if(WorldConfig.enableBauxite) new OreLayer3D(ModBlocks.stone_resource, EnumStoneType.MALACHITE.ordinal()).setScaleH(0.1D).setScaleV(0.15D).setThreshold(275); + if(WorldConfig.enableBauxite) new OreLayer3D(ModBlocks.stone_resource, EnumStoneType.BAUXITE.ordinal()).setScaleH(0.03D).setScaleV(0.15D).setThreshold(300); + if(WorldConfig.enableMalachite) new OreLayer3D(ModBlocks.stone_resource, EnumStoneType.MALACHITE.ordinal()).setScaleH(0.1D).setScaleV(0.15D).setThreshold(275); //new BiomeCave().setThreshold(1.5D).setRangeMult(20).setYLevel(40).setMaxRange(20); //new OreLayer(Blocks.coal_ore, 0.2F).setThreshold(4).setRangeMult(3).setYLevel(70); BedrockOre.init(); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 8751c5ca7..2d27eadb8 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -8,6 +8,7 @@ import com.hbm.blocks.generic.BlockAshes; import com.hbm.config.GeneralConfig; import com.hbm.config.MobConfig; import com.hbm.config.RadiationConfig; +import com.hbm.config.ServerConfig; import com.hbm.entity.mob.*; import com.hbm.entity.mob.ai.EntityAIFireGun; import com.hbm.entity.mob.EntityCreeperTainted; @@ -655,14 +656,18 @@ public class ModEventHandler { if(event.phase == Phase.END) { - List loadedEntityList = new ArrayList(); - loadedEntityList.addAll(event.world.loadedEntityList); // ConcurrentModificationException my balls + int tickrate = Math.max(1, ServerConfig.ITEM_HAZARD_DROP_TICKRATE.get()); - for(Object e : loadedEntityList) { - - if(e instanceof EntityItem) { - EntityItem item = (EntityItem) e; - HazardSystem.updateDroppedItem(item); + if(event.world.getTotalWorldTime() % tickrate == 0) { + List loadedEntityList = new ArrayList(); + loadedEntityList.addAll(event.world.loadedEntityList); // ConcurrentModificationException my balls + + for(Object e : loadedEntityList) { + + if(e instanceof EntityItem) { + EntityItem item = (EntityItem) e; + HazardSystem.updateDroppedItem(item); + } } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java b/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java index cc7fd46ea..5336f61ab 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java @@ -227,6 +227,9 @@ public class TileEntityPneumoTube extends TileEntityMachineBase implements IGUIP this.compair.readFromNBT(nbt, "tank"); this.pattern.readFromNBT(nbt); + this.sendOrder = nbt.getByte("sendOrder"); + this.receiveOrder = nbt.getByte("receiveOrder"); + this.whitelist = nbt.getBoolean("whitelist"); this.redstone = nbt.getBoolean("redstone"); } @@ -239,6 +242,9 @@ public class TileEntityPneumoTube extends TileEntityMachineBase implements IGUIP this.compair.writeToNBT(nbt, "tank"); this.pattern.writeToNBT(nbt); + nbt.setByte("sendOrder", sendOrder); + nbt.setByte("receiveOrder", receiveOrder); + nbt.setBoolean("whitelist", whitelist); nbt.setBoolean("redstone", redstone); } From caf416a27d1cbb63029025c44aedd8db9e012d88 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 13 May 2025 00:35:35 +0300 Subject: [PATCH 026/491] Tool ability selector frontend --- .../java/com/hbm/handler/ToolAbility.java | 58 ++- .../inventory/gui/GUIScreenToolAbility.java | 339 ++++++++++++++++++ .../com/hbm/items/tool/ItemToolAbility.java | 28 +- .../textures/gui/tool/gui_tool_ability.png | Bin 0 -> 4053 bytes 4 files changed, 422 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java create mode 100644 src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png diff --git a/src/main/java/com/hbm/handler/ToolAbility.java b/src/main/java/com/hbm/handler/ToolAbility.java index bf9462a49..aab7757f9 100644 --- a/src/main/java/com/hbm/handler/ToolAbility.java +++ b/src/main/java/com/hbm/handler/ToolAbility.java @@ -33,7 +33,6 @@ import net.minecraft.world.World; public abstract class ToolAbility { - //how to potentially save this: cancel the event/operation so that ItemInWorldManager's harvest method falls short, then recreate it with a more sensible structure public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { return false; } public abstract String getName(); public abstract String getFullName(); @@ -205,6 +204,63 @@ public abstract class ToolAbility { } } + public static class HammerSilkAbility extends ToolAbility { + + int range; + + public HammerSilkAbility(int range) { + this.range = range; + } + + @Override + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + if(EnchantmentHelper.getSilkTouchModifier(player) || player.getHeldItem() == null) + return false; + + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); + + for(int a = x - range; a <= x + range; a++) { + for(int b = y - range; b <= y + range; b++) { + for(int c = z - range; c <= z + range; c++) { + + if(a == x && b == y && c == z) + continue; + + tool.breakExtraBlock(world, a, b ,c, player, x, y, z); + } + } + } + if(player instanceof EntityPlayerMP) + IItemAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); + + EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); + + return false; + + } + + @Override + public String getName() { + return "tool.ability.hammersilk"; + } + + @Override + public String getFullName() { + return I18n.format(getName()) + getExtension(); + } + + @Override + public String getExtension() { + return " (" + range + ")"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityHammer; + } + } + public static class SilkAbility extends ToolAbility { @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java new file mode 100644 index 000000000..7980f72a5 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -0,0 +1,339 @@ +package com.hbm.inventory.gui; + +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage; +import com.hbm.items.tool.ItemToolAbility; +import com.hbm.lib.RefStrings; +import com.hbm.util.EnumUtil; +import com.hbm.util.I18nUtil; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +import net.minecraft.util.ResourceLocation; + +public class GUIScreenToolAbility extends GuiScreen { + + public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/tool/gui_tool_ability.png"); + + protected int guiLeft; + protected int guiTop; + protected int xSize; + protected int ySize; + protected int insetWidth; + + protected ItemToolAbility toolDef; + protected ItemStack toolStack; + + // TODO: Move elsewhere? + public static class AbilityInfo { + String name; + int textureU, textureV; + boolean hasLevels; + + public AbilityInfo(String name, int textureU, int textureV, boolean hasLevels) { + this.name = name; + this.textureU = textureU; + this.textureV = textureV; + this.hasLevels = hasLevels; + } + } + + public static final List abilitiesArea = new ArrayList<>(); + public static final List abilitiesHarvest = new ArrayList<>(); + + static { + abilitiesArea.add(new AbilityInfo(null, 0, 76, false)); + abilitiesArea.add(new AbilityInfo("tool.ability.recursion", 32, 76, false)); + abilitiesArea.add(new AbilityInfo("tool.ability.hammer", 64, 76, true)); + abilitiesArea.add(new AbilityInfo("tool.ability.explosion", 96, 76, true)); + + abilitiesHarvest.add(new AbilityInfo(null, 0, 92, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.silktouch", 32, 92, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.luck", 64, 92, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.smelter", 96, 92, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.shredder", 128, 92, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.centrifuge", 160, 92, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.crystallizer", 192, 92, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.mercury", 224, 92, false)); + } + + // TODO: availability status for abilities; list of presets; selected preset index; + // TODO: Remove this in favor of current preset + int selectionIdxArea = 0; + int selectedLevelArea = 0; + int selectionIdxHarvest = 0; + int selectedLevelHarvest = 0; + int selectedPreset = 0; + int totalPresets = 1; + + public GUIScreenToolAbility(ItemToolAbility toolDef) { + super(); + + this.toolDef = toolDef; + this.xSize = 186; // Note: increased dynamically + this.ySize = 76; + + this.insetWidth = 20 * Math.max(abilitiesArea.size() - 4, abilitiesHarvest.size() - 8); + this.xSize += insetWidth; + } + + @Override + public void initGui() { + this.toolStack = this.mc.thePlayer.getHeldItem(); + + if(this.toolStack == null) { + doClose(); + } + + guiLeft = (width - xSize) / 2; + guiTop = (height - ySize) / 2; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + this.drawDefaultBackground(); + + drawGuiContainerBackgroundLayer(mouseX, mouseY); + + if(!Mouse.isButtonDown(0) && !Mouse.isButtonDown(1) && Mouse.next()) { + int scroll = Mouse.getEventDWheel() / 6; + + // TODO + selectedPreset = (selectedPreset + totalPresets + scroll) % totalPresets; + } + } + + protected void drawGuiContainerBackgroundLayer(int mouseX, int mouseY) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + + // Draw window background + drawTexturedModalRect(guiLeft, guiTop, 0, 0, 100, ySize); + for (int i = 0; i < insetWidth; i += 20) { + drawTexturedModalRect(guiLeft + 100 + i, guiTop, 80, 0, 20, ySize); + } + drawTexturedModalRect(guiLeft + 100 + insetWidth, guiTop, 100, 0, xSize - insetWidth - 100, ySize); + + // Draw the switches + drawSwitches(abilitiesArea, selectionIdxArea, selectedLevelArea, guiLeft + 15, guiTop + 25, mouseX, mouseY); + drawSwitches(abilitiesHarvest, selectionIdxHarvest, selectedLevelHarvest, guiLeft + 15, guiTop + 45, mouseX, mouseY); + + // Draw preset indicator + drawNumber(selectedPreset + 1, guiLeft + insetWidth + 115, guiTop + 25); + drawNumber(totalPresets, guiLeft + insetWidth + 149, guiTop + 25); + + // Draw extra buttons hover highlights + int extraBtnsX = guiLeft + xSize - 75; + + for (int i = 0; i < 6; ++i) { + if (isInAABB(mouseX, mouseY, extraBtnsX + i * 11, guiTop + 11, 9, 9)) { + drawTexturedModalRect(extraBtnsX + i * 11, guiTop + 11, 186 + i * 9, 18, 9, 9); + } + } + } + + protected void drawSwitches(List abilities, int selectionIdx, int selectedLevel, int x, int y, int mouseX, int mouseY) { + for (int i = 0; i < abilities.size(); ++i) { + AbilityInfo abilityInfo = abilities.get(i); + boolean available = true; // TODO + + // Draw switch + drawTexturedModalRect(x + 20 * i, y, abilityInfo.textureU + (available ? 16 : 0), abilityInfo.textureV, 16, 16); + + // Draw level LEDs + if (abilityInfo.hasLevels) { + int level = 0; // TODO + + if (i == selectionIdx) { + level = selectedLevel + 1; + } + + drawTexturedModalRect(x + 20 * i + 17, y + 1, 222 + level * 2, 0, 2, 14); + } + + if (i == selectionIdx) { + // Draw selection highlight + drawTexturedModalRect(x + 20 * i - 1, y - 1, 186, 0, 18, 18); + } else if (available && isInAABB(mouseX, mouseY, x + 20 * i, y, 16, 16)) { + // Draw hover highlight + drawTexturedModalRect(x + 20 * i - 1, y - 1, 204, 0, 18, 18); + } + } + } + + protected void drawNumber(int number, int x, int y) { + number += 100; // Against accidental negatives + drawDigit((number / 10) % 10, x, y); + drawDigit(number % 10, x + 12, y); + } + + protected void drawDigit(int digit, int x, int y) { + drawTexturedModalRect(x, y, digit * 10, 108, 10, 15); + } + + private boolean isInAABB(int mouseX, int mouseY, int x, int y, int width, int height) { + return x <= mouseX && x + width > mouseX && y <= mouseY && y + height > mouseY; + } + + @Override + public void updateScreen() { + EntityPlayer player = this.mc.thePlayer; + + if(player.getHeldItem() == null || player.getHeldItem().getItem() != toolDef) + player.closeScreen(); + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int button) { + // TODO + boolean clicked = false; + + // TODO: Encapsulate? + for (int i = 0; i < abilitiesArea.size(); ++i) { + AbilityInfo abilityInfo = abilitiesArea.get(i); + boolean available = true; // TODO + + if (available && isInAABB(mouseX, mouseY, guiLeft + 15 + 20 * i, guiTop + 25, 16, 16)) { + if (abilityInfo.hasLevels) { + int availableLevels = 5; + + if (i == selectionIdxArea) { + selectedLevelArea = (selectedLevelArea + 1) % availableLevels; + } else { + selectedLevelArea = 0; + } + } + + selectionIdxArea = i; + clicked = true; + break; + } + } + + for (int i = 0; i < abilitiesHarvest.size(); ++i) { + AbilityInfo abilityInfo = abilitiesHarvest.get(i); + boolean available = true; // TODO + + if (available && isInAABB(mouseX, mouseY, guiLeft + 15 + 20 * i, guiTop + 45, 16, 16)) { + if (abilityInfo.hasLevels) { + int availableLevels = 5; + + if (i == selectionIdxArea) { + selectedLevelHarvest = (selectedLevelHarvest + 1) % availableLevels; + } else { + selectedLevelHarvest = 0; + } + } + + selectionIdxHarvest = i; + clicked = true; + break; + } + } + + if (clicked) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 1F)); + } + + // TODO + int extraBtnsX = guiLeft + xSize - 75; + + clicked = false; + + if (isInAABB(mouseX, mouseY, extraBtnsX + 0 * 11, guiTop + 11, 9, 9)) { + doDelPreset(); + clicked = true; + } + + if (isInAABB(mouseX, mouseY, extraBtnsX + 1 * 11, guiTop + 11, 9, 9)) { + doAddPreset(); + clicked = true; + } + + if (isInAABB(mouseX, mouseY, extraBtnsX + 2 * 11, guiTop + 11, 9, 9)) { + doZeroPreset(); + clicked = true; + } + + if (isInAABB(mouseX, mouseY, extraBtnsX + 3 * 11, guiTop + 11, 9, 9)) { + doNextPreset(); + clicked = true; + } + + if (isInAABB(mouseX, mouseY, extraBtnsX + 4 * 11, guiTop + 11, 9, 9)) { + doPrevPreset(); + clicked = true; + } + + if (isInAABB(mouseX, mouseY, extraBtnsX + 5 * 11, guiTop + 11, 9, 9)) { + doClose(); + clicked = true; + } + + if (clicked) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F)); + } + } + + @Override + protected void keyTyped(char c, int key) { + if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) { + doClose(); + return; + } + + super.keyTyped(c, key); + } + + @Override + public boolean doesGuiPauseGame() { + return false; + } + + protected void doDelPreset() { + // TODO + if (totalPresets <= 1) { + return; + } + totalPresets -= 1; + selectedPreset -= 1; + } + + protected void doAddPreset() { + // TODO + totalPresets += 1; + selectedPreset += 1; + } + + protected void doZeroPreset() { + // TODO + selectedPreset = 0; + } + + protected void doNextPreset() { + // TODO + selectedPreset = (selectedPreset + 1) % totalPresets; + } + + protected void doPrevPreset() { + // TODO + selectedPreset = (selectedPreset + totalPresets - 1) % totalPresets; + } + + protected void doClose() { + this.mc.thePlayer.closeScreen(); + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 99ce2d356..e0c8fd8a4 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -9,11 +9,15 @@ import java.util.Set; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; +import com.hbm.inventory.gui.GUIScreenToolAbility; +import com.hbm.handler.HbmKeybinds; +import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.ToolAbility; import com.hbm.handler.ToolAbility.*; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; +import com.hbm.tileentity.IGUIProvider; import com.hbm.util.ChatBuilder; import com.hbm.handler.WeaponAbility; @@ -28,6 +32,7 @@ import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; +import net.minecraft.inventory.Container; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; @@ -35,7 +40,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class ItemToolAbility extends ItemTool implements IItemAbility, IDepthRockTool { +public class ItemToolAbility extends ItemTool implements IItemAbility, IDepthRockTool, IGUIProvider { protected boolean isShears = false; protected EnumToolType toolType; @@ -228,7 +233,15 @@ public class ItemToolAbility extends ItemTool implements IItemAbility, IDepthRoc public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - if(world.isRemote || this.breakAbility.size() < 2 || !canOperate(stack)) + if(this.breakAbility.size() < 2 || !canOperate(stack)) + return super.onItemRightClick(stack, world, player); + + if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) { + if(world.isRemote) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0); + return stack; + } + + if(world.isRemote) return super.onItemRightClick(stack, world, player); int i = getAbility(stack); @@ -300,4 +313,15 @@ public class ItemToolAbility extends ItemTool implements IItemAbility, IDepthRoc public boolean isShears(ItemStack stack) { return this.isShears; } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIScreenToolAbility(this); + } } diff --git a/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png b/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png new file mode 100644 index 0000000000000000000000000000000000000000..5e53a867d0d9413790f32e433d6f0d090c3005fa GIT binary patch literal 4053 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 Date: Thu, 15 May 2025 01:30:10 +0300 Subject: [PATCH 027/491] Begin ability refactor, rewrite tool harvest abilities --- .../java/com/hbm/handler/ToolAbility.java | 36 +- .../java/com/hbm/handler/WeaponAbility.java | 65 +++- .../com/hbm/handler/ability/IBaseAbility.java | 27 ++ .../hbm/handler/ability/IToolAreaAbility.java | 14 + .../handler/ability/IToolHarvestAbility.java | 321 ++++++++++++++++++ .../hbm/handler/ability/IWeaponAbility.java | 12 + ...ItemAbility.java => IItemWithAbility.java} | 2 +- .../com/hbm/items/tool/ItemSwordAbility.java | 2 +- .../com/hbm/items/tool/ItemToolAbility.java | 2 +- .../textures/gui/tool/gui_tool_ability.png | Bin 4053 -> 4073 bytes 10 files changed, 450 insertions(+), 31 deletions(-) create mode 100644 src/main/java/com/hbm/handler/ability/IBaseAbility.java create mode 100644 src/main/java/com/hbm/handler/ability/IToolAreaAbility.java create mode 100644 src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java create mode 100644 src/main/java/com/hbm/handler/ability/IWeaponAbility.java rename src/main/java/com/hbm/items/tool/{IItemAbility.java => IItemWithAbility.java} (99%) diff --git a/src/main/java/com/hbm/handler/ToolAbility.java b/src/main/java/com/hbm/handler/ToolAbility.java index aab7757f9..e41813af1 100644 --- a/src/main/java/com/hbm/handler/ToolAbility.java +++ b/src/main/java/com/hbm/handler/ToolAbility.java @@ -15,7 +15,7 @@ import com.hbm.inventory.recipes.CrystallizerRecipes; import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe; import com.hbm.inventory.recipes.ShredderRecipes; import com.hbm.items.ModItems; -import com.hbm.items.tool.IItemAbility; +import com.hbm.items.tool.IItemWithAbility; import com.hbm.util.EnchantmentUtil; import net.minecraft.block.Block; @@ -33,7 +33,7 @@ import net.minecraft.world.World; public abstract class ToolAbility { - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { return false; } + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { return false; } public abstract String getName(); public abstract String getFullName(); public abstract String getExtension(); @@ -50,7 +50,7 @@ public abstract class ToolAbility { private Set pos = new HashSet(); @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { Block b = world.getBlock(x, y, z); @@ -80,7 +80,7 @@ public abstract class ToolAbility { } } - private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemAbility tool, int depth) { + private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth) { List shuffledOffsets = new ArrayList<>(offsets); Collections.shuffle(shuffledOffsets); @@ -90,7 +90,7 @@ public abstract class ToolAbility { } } - private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemAbility tool, int depth) { + private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth) { if(pos.contains(new ThreeInts(x, y, z))) return; @@ -166,7 +166,7 @@ public abstract class ToolAbility { } @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { for(int a = x - range; a <= x + range; a++) { for(int b = y - range; b <= y + range; b++) { @@ -213,7 +213,7 @@ public abstract class ToolAbility { } @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { if(EnchantmentHelper.getSilkTouchModifier(player) || player.getHeldItem() == null) return false; @@ -232,7 +232,7 @@ public abstract class ToolAbility { } } if(player instanceof EntityPlayerMP) - IItemAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); + IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); @@ -264,7 +264,7 @@ public abstract class ToolAbility { public static class SilkAbility extends ToolAbility { @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { if(EnchantmentHelper.getSilkTouchModifier(player) || player.getHeldItem() == null) return false; @@ -273,7 +273,7 @@ public abstract class ToolAbility { EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); if(player instanceof EntityPlayerMP) - IItemAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); + IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); @@ -310,7 +310,7 @@ public abstract class ToolAbility { } @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { if(EnchantmentHelper.getFortuneModifier(player) > 0 || player.getHeldItem() == null) return false; @@ -319,7 +319,7 @@ public abstract class ToolAbility { EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, luck); if(player instanceof EntityPlayerMP) - IItemAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); + IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune); @@ -350,7 +350,7 @@ public abstract class ToolAbility { public static class SmelterAbility extends ToolAbility { @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { List drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0); @@ -403,7 +403,7 @@ public abstract class ToolAbility { public static class ShredderAbility extends ToolAbility { @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { //a band-aid on a gaping wound if(block == Blocks.lit_redstone_ore) @@ -445,7 +445,7 @@ public abstract class ToolAbility { public static class CentrifugeAbility extends ToolAbility { @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { //a band-aid on a gaping wound if(block == Blocks.lit_redstone_ore) @@ -491,7 +491,7 @@ public abstract class ToolAbility { public static class CrystallizerAbility extends ToolAbility { @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { //a band-aid on a gaping wound if(block == Blocks.lit_redstone_ore) @@ -533,7 +533,7 @@ public abstract class ToolAbility { public static class MercuryAbility extends ToolAbility { @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { //a band-aid on a gaping wound if(block == Blocks.lit_redstone_ore) @@ -585,7 +585,7 @@ public abstract class ToolAbility { } @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); ex.addAttrib(ExAttrib.ALLDROP); diff --git a/src/main/java/com/hbm/handler/WeaponAbility.java b/src/main/java/com/hbm/handler/WeaponAbility.java index 8529bb370..54f490b46 100644 --- a/src/main/java/com/hbm/handler/WeaponAbility.java +++ b/src/main/java/com/hbm/handler/WeaponAbility.java @@ -4,7 +4,8 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBobble.BobbleType; import com.hbm.handler.threading.PacketThreading; import com.hbm.items.ModItems; -import com.hbm.items.tool.IItemAbility; +import com.hbm.items.tool.IItemWithAbility; +import com.hbm.lib.ModDamageSource; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; import com.hbm.util.ContaminationUtil; @@ -38,7 +39,7 @@ import net.minecraft.world.World; public abstract class WeaponAbility { - public abstract void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool); + public abstract void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool); public abstract String getName(); public abstract String getFullName(); @@ -51,7 +52,7 @@ public abstract class WeaponAbility { } @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) { + public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { if(victim instanceof EntityLivingBase) ContaminationUtil.contaminate((EntityLivingBase)victim, HazardType.RADIATION, ContaminationType.CREATIVE, rad); @@ -77,7 +78,7 @@ public abstract class WeaponAbility { } @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) { + public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { if(victim instanceof EntityLivingBase) { @@ -109,7 +110,7 @@ public abstract class WeaponAbility { } @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) { + public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { if(victim instanceof EntityLivingBase) { @@ -130,6 +131,50 @@ public abstract class WeaponAbility { return I18n.format(getName()) + " (" + duration + ")"; } } + + public static class BlendAbility extends WeaponAbility { + + int divider; + + public BlendAbility(int divider) { + this.divider = divider; + } + + @Override + public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + + if(victim instanceof EntityLivingBase) { + + EntityLivingBase living = (EntityLivingBase) victim; + + + if(living.getHealth() <= 0.0F) { + int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health + world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "mob.zombie.woodbreak", 0.5F, 1.0F); + victim.attackEntityFrom(ModDamageSource.turbofan, 100); + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "giblets"); + data.setInteger("count", count * 4); + data.setInteger("ent", victim.getEntityId()); + data.setInteger("cDiv", 5); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, victim.posX, victim.posY + victim.height * 0.5, victim.posZ), new TargetPoint(victim.dimension, victim.posX, victim.posY + victim.height * 0.5, victim.posZ, 150)); + living.entityDropItem(new ItemStack(ModItems.flesh, 10, 0), 0.0F); + } + } + } + + + + @Override + public String getName() { + return "weapon.ability.blender"; + } + + @Override + public String getFullName() { + return I18n.format(getName()) + " (1:" + divider + ")"; + } + } public static class PhosphorusAbility extends WeaponAbility { @@ -140,7 +185,7 @@ public abstract class WeaponAbility { } @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) { + public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { if(victim instanceof EntityLivingBase) { @@ -170,7 +215,7 @@ public abstract class WeaponAbility { } @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) { + public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { if(victim instanceof EntityLivingBase) { victim.setFire(duration); @@ -197,7 +242,7 @@ public abstract class WeaponAbility { } @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) { + public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { if(victim instanceof EntityLivingBase) { @@ -241,7 +286,7 @@ public abstract class WeaponAbility { public static class BeheaderAbility extends WeaponAbility { @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) { + public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) { @@ -294,7 +339,7 @@ public abstract class WeaponAbility { public static class BobbleAbility extends WeaponAbility { @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) { + public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { diff --git a/src/main/java/com/hbm/handler/ability/IBaseAbility.java b/src/main/java/com/hbm/handler/ability/IBaseAbility.java new file mode 100644 index 000000000..c5811a4b1 --- /dev/null +++ b/src/main/java/com/hbm/handler/ability/IBaseAbility.java @@ -0,0 +1,27 @@ +package com.hbm.handler.ability; + +import net.minecraft.client.resources.I18n; + +public interface IBaseAbility { + String getName(); + + default String getExtension(int level) { + return ""; + } + + default String getFullName(int level) { + return I18n.format(getName()) + getExtension(level); + } + + default boolean isAllowed() { + return true; + } + + // 1 means no support for levels (i.e. the level is always 0). + // The UI only supports levels() between 1 and 10 (inclusive). + // All calls accepting an `int level` parameters must be done + // with a level between 0 and levels()-1 (inclusive). + default int levels() { + return 1; + } +} diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java new file mode 100644 index 000000000..2161e37f6 --- /dev/null +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -0,0 +1,14 @@ +package com.hbm.handler.ability; + +import com.hbm.items.tool.IItemWithAbility; +import com.jcraft.jorbis.Block; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +public interface IToolAreaAbility extends IBaseAbility { + // Should call tool.breakExtraBlock on a bunch of blocks. + // The initial block is always implicitly broken and shouldn't be included. + // TODO: Explosion needs it not to be broken, as it bypasses the harvest ability + void onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool); +} diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java new file mode 100644 index 000000000..0138e406a --- /dev/null +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -0,0 +1,321 @@ +package com.hbm.handler.ability; + +import java.util.List; + +import com.hbm.config.ToolConfig; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.recipes.CentrifugeRecipes; +import com.hbm.inventory.recipes.CrystallizerRecipes; +import com.hbm.inventory.recipes.ShredderRecipes; +import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe; +import com.hbm.items.ModItems; +import com.hbm.items.tool.IItemWithAbility; +import com.hbm.util.EnchantmentUtil; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.world.World; + +public interface IToolHarvestAbility extends IBaseAbility { + default void preHarvestAll(int level, World world, EntityPlayer player) {} + + default void postHarvestAll(int level, World world, EntityPlayer player) {} + + boolean skipDefaultDrops(int level); + + // Call IToolHarvestAbility.super.onHarvestBlock to emulate the actual block breaking + default void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + if (skipDefaultDrops(level)) { + // Emulate the block breaking without drops + world.setBlockToAir(x, y, z); + player.getHeldItem().damageItem(1, player); + } else if (player instanceof EntityPlayerMP) { + // Break the block conventionally + IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); + } + } + + public static enum HarvestAbility { + None( + new IToolHarvestAbility() { + @Override + public String getName() { + // TODO: null? empty? otherwise i18n + return ""; + } + + @Override + public boolean skipDefaultDrops(int level) { + return false; + } + } + ), + + Silk(new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.silktouch"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilitySilk; + } + + @Override + public boolean skipDefaultDrops(int level) { + return false; + } + + @Override + public void preHarvestAll(int level, World world, EntityPlayer player) { + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); + } + + @Override + public void postHarvestAll(int level, World world, EntityPlayer player) { + // ToC-ToU mismatch should be impossible + // because both calls happen on the same tick. + // Even if can be forced somehow, the player doesn't gain any benefit from it. + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); + } + }), + + Luck(new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.luck"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityLuck; + } + + final int[] powerAtLevel = {1, 2, 3, 4, 5, 9}; + + @Override + public int levels() { + return powerAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + powerAtLevel[level] + ")"; + } + + @Override + public boolean skipDefaultDrops(int level) { + return false; + } + + @Override + public void preHarvestAll(int level, World world, EntityPlayer player) { + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, powerAtLevel[level]); + } + + @Override + public void postHarvestAll(int level, World world, EntityPlayer player) { + // ToC-ToU mismatch should be impossible + // because both calls happen on the same tick. + // Even if can be forced somehow, the player doesn't gain any benefit from it. + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune); + } + }), + + Smelter(new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.smelter"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityFurnace; + } + + @Override + public boolean skipDefaultDrops(int level) { + return true; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + List drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0); + + boolean doesSmelt = false; + + for(int i = 0; i < drops.size(); i++) { + ItemStack stack = drops.get(i).copy(); + ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(stack); + + if(result != null) { + result = result.copy(); + result.stackSize *= stack.stackSize; + drops.set(i, result); + doesSmelt = true; + } + } + + if(doesSmelt) { + IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + + for(ItemStack stack : drops) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy())); + } + } + }), + + Shredder(new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.shredder"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityShredder; + } + + @Override + public boolean skipDefaultDrops(int level) { + return true; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + //a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + ItemStack stack = new ItemStack(block, 1, meta); + ItemStack result = ShredderRecipes.getShredderResult(stack); + + if(result != null && result.getItem() != ModItems.scrap) { + IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy())); + } + } + }), + + Centrifuge(new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.centrifuge"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityCentrifuge; + } + + @Override + public boolean skipDefaultDrops(int level) { + return true; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + //a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + ItemStack stack = new ItemStack(block, 1, meta); + ItemStack[] result = CentrifugeRecipes.getOutput(stack); + + if(result != null) { + IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + + for(ItemStack st : result) { + if(st != null) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, st.copy())); + } + } + } + }), + + Crystallizer(new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.crystallizer"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityCrystallizer; + } + + @Override + public boolean skipDefaultDrops(int level) { + return true; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + //a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + ItemStack stack = new ItemStack(block, 1, meta); + CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack, Fluids.PEROXIDE); + + if(result != null) { + IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy())); + } + } + }), + + Mercury(new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.mercury"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityMercury; + } + + @Override + public boolean skipDefaultDrops(int level) { + return true; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + //a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + int mercury = 0; + + if(block == Blocks.redstone_ore) + mercury = player.getRNG().nextInt(5) + 4; + if(block == Blocks.redstone_block) + mercury = player.getRNG().nextInt(7) + 8; + + if(mercury > 0) { + IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_mercury, mercury))); + } + } + }); + + public IToolHarvestAbility handler; + + HarvestAbility(IToolHarvestAbility handler) { + this.handler = handler; + } + } +} diff --git a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java new file mode 100644 index 000000000..cf293bbb0 --- /dev/null +++ b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java @@ -0,0 +1,12 @@ +package com.hbm.handler.ability; + +import javax.swing.text.html.parser.Entity; + +import com.hbm.items.tool.IItemWithAbility; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +public interface IWeaponAbility extends IBaseAbility { + void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool); +} diff --git a/src/main/java/com/hbm/items/tool/IItemAbility.java b/src/main/java/com/hbm/items/tool/IItemWithAbility.java similarity index 99% rename from src/main/java/com/hbm/items/tool/IItemAbility.java rename to src/main/java/com/hbm/items/tool/IItemWithAbility.java index 4096a2a6b..99d442fbb 100644 --- a/src/main/java/com/hbm/items/tool/IItemAbility.java +++ b/src/main/java/com/hbm/items/tool/IItemWithAbility.java @@ -22,7 +22,7 @@ import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.IShearable; import net.minecraftforge.event.world.BlockEvent; -public interface IItemAbility { +public interface IItemWithAbility { public boolean canHarvestBlock(Block par1Block, ItemStack itemStack); public boolean isShears(ItemStack stack); diff --git a/src/main/java/com/hbm/items/tool/ItemSwordAbility.java b/src/main/java/com/hbm/items/tool/ItemSwordAbility.java index 5c8132c58..f54f47446 100644 --- a/src/main/java/com/hbm/items/tool/ItemSwordAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemSwordAbility.java @@ -19,7 +19,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.util.EnumChatFormatting; -public class ItemSwordAbility extends ItemSword implements IItemAbility { +public class ItemSwordAbility extends ItemSword implements IItemWithAbility { private EnumRarity rarity = EnumRarity.common; // was there a reason for this to be private? diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index e0c8fd8a4..1dad676cf 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -40,7 +40,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class ItemToolAbility extends ItemTool implements IItemAbility, IDepthRockTool, IGUIProvider { +public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDepthRockTool, IGUIProvider { protected boolean isShears = false; protected EnumToolType toolType; diff --git a/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png b/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png index 5e53a867d0d9413790f32e433d6f0d090c3005fa..38157a296cd8dc963d8e0bb794f70740328f067c 100644 GIT binary patch delta 3601 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 Date: Thu, 15 May 2025 01:59:35 +0300 Subject: [PATCH 028/491] Rewrite tool area abilities --- .../hbm/handler/ability/IToolAreaAbility.java | 256 +++++++++++++++++- .../handler/ability/IToolHarvestAbility.java | 4 +- 2 files changed, 255 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index 2161e37f6..f441433d5 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -1,14 +1,262 @@ package com.hbm.handler.ability; -import com.hbm.items.tool.IItemWithAbility; -import com.jcraft.jorbis.Block; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import com.hbm.config.ToolConfig; +import com.hbm.explosion.ExplosionNT; +import com.hbm.explosion.ExplosionNT.ExAttrib; +import com.hbm.handler.ThreeInts; +import com.hbm.inventory.OreDictManager; +import com.hbm.items.tool.IItemWithAbility; + +import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Vec3; import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; public interface IToolAreaAbility extends IBaseAbility { // Should call tool.breakExtraBlock on a bunch of blocks. // The initial block is always implicitly broken and shouldn't be included. - // TODO: Explosion needs it not to be broken, as it bypasses the harvest ability - void onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool); + // If true is returned, no block breaking is handled by the tool + // (neither for the original block nor for the extras) + boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool); + + public static enum AreaAbility { + // region handlers + None( + new IToolAreaAbility() { + @Override + public String getName() { + // TODO: null? empty? otherwise i18n + return ""; + } + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + return false; + } + } + ), + + Recursion(new IToolAreaAbility() { + @Override + public String getName() { + return "tool.ability.recursion"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityVein; + } + + public final int[] radiusAtLevel = {3, 4, 5, 6, 7, 9, 10}; + + @Override + public int levels() { + return radiusAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + radiusAtLevel[level] + ")"; + } + + // Note: if reusing it across different instatces of a tool + // is a problem here, then it had already been one before + // the refactor! The solution is to simply make this a local + // of the onDig method and pass it around as a parameter. + private Set pos = new HashSet<>(); + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + Block b = world.getBlock(x, y, z); + + if(!ToolConfig.recursiveStone) { + Item item = Item.getItemFromBlock(b); + List stone = OreDictionary.getOres(OreDictManager.KEY_STONE); + for(ItemStack stack : stone) { + if(stack.getItem() == item) + return false; + } + List cobble = OreDictionary.getOres(OreDictManager.KEY_COBBLESTONE); + for(ItemStack stack : cobble) { + if(stack.getItem() == item) + return false; + } + } + + if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) + return false; + + pos.clear(); + + recurse(world, x, y, z, x, y, z, player, tool, 0, radiusAtLevel[level]); + + return false; + } + + private final List offsets = new ArrayList(3*3*3-1) {{ + for (int dx = -1; dx <= 1; dx++) { + for (int dy = -1; dy <= 1; dy++) { + for (int dz = -1; dz <= 1; dz++) { + if (dx != 0 || dy != 0 || dz != 0) { + add(new ThreeInts(dx, dy, dz)); + } + } + } + } + }}; + + private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth, int radius) { + List shuffledOffsets = new ArrayList<>(offsets); + Collections.shuffle(shuffledOffsets); + + for(ThreeInts offset : shuffledOffsets) { + breakExtra(world, x + offset.x, y + offset.y, z + offset.z, refX, refY, refZ, player, tool, depth, radius); + } + } + + private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth, int radius) { + if(pos.contains(new ThreeInts(x, y, z))) + return; + + depth += 1; + + if(depth > ToolConfig.recursionDepth) + return; + + pos.add(new ThreeInts(x, y, z)); + + //don't lose the ref block just yet + if(x == refX && y == refY && z == refZ) + return; + + if(Vec3.createVectorHelper(x - refX, y - refY, z - refZ).lengthVector() > radius) + return; + + Block b = world.getBlock(x, y, z); + Block ref = world.getBlock(refX, refY, refZ); + int meta = world.getBlockMetadata(x, y, z); + int refMeta = world.getBlockMetadata(refX, refY, refZ); + + if(!isSameBlock(b, ref)) + return; + + if(meta != refMeta) + return; + + if(player.getHeldItem() == null) + return; + + tool.breakExtraBlock(world, x, y, z, player, refX, refY, refZ); + + recurse(world, x, y, z, refX, refY, refZ, player, tool, depth, radius); + } + + private boolean isSameBlock(Block b1, Block b2) { + if(b1 == b2) return true; + if((b1 == Blocks.redstone_ore && b2 == Blocks.lit_redstone_ore) || (b1 == Blocks.lit_redstone_ore && b2 == Blocks.redstone_ore)) return true; + + return false; + } + }), + + Hammer(new IToolAreaAbility() { + @Override + public String getName() { + return "tool.ability.hammer"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityHammer; + } + + public final int[] rangeAtLevel = {1, 2, 3, 4}; + + @Override + public int levels() { + return rangeAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + rangeAtLevel[level] + ")"; + } + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + int range = rangeAtLevel[level]; + + for(int a = x - range; a <= x + range; a++) { + for(int b = y - range; b <= y + range; b++) { + for(int c = z - range; c <= z + range; c++) { + + if(a == x && b == y && c == z) + continue; + + tool.breakExtraBlock(world, a, b ,c, player, x, y, z); + } + } + } + + return false; + } + }), + + Explosion(new IToolAreaAbility() { + @Override + public String getName() { + return "tool.ability.explosion"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityExplosion; + } + + public final float[] strengthAtLevel = {2.5F, 5F, 10F, 15F}; + + @Override + public int levels() { + return strengthAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + strengthAtLevel[level] + ")"; + } + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + float strength = strengthAtLevel[level]; + + ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); + ex.addAttrib(ExAttrib.ALLDROP); + ex.addAttrib(ExAttrib.NOHURT); + ex.addAttrib(ExAttrib.NOPARTICLE); + ex.doExplosionA(); + ex.doExplosionB(false); + + player.worldObj.createExplosion(player, x + 0.5, y + 0.5, z + 0.5, 0.1F, false); + + return true; + } + }); + // endregion handlers + + public IToolAreaAbility handler; + + AreaAbility(IToolAreaAbility handler) { + this.handler = handler; + } + }; } diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index 0138e406a..32dd5f59f 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -42,6 +42,7 @@ public interface IToolHarvestAbility extends IBaseAbility { } public static enum HarvestAbility { + // region handlers None( new IToolHarvestAbility() { @Override @@ -100,7 +101,7 @@ public interface IToolHarvestAbility extends IBaseAbility { return ToolConfig.abilityLuck; } - final int[] powerAtLevel = {1, 2, 3, 4, 5, 9}; + public final int[] powerAtLevel = {1, 2, 3, 4, 5, 9}; @Override public int levels() { @@ -311,6 +312,7 @@ public interface IToolHarvestAbility extends IBaseAbility { } } }); + // endregion handlers public IToolHarvestAbility handler; From 61917ddc2f91efc9ffffa4da2580fa9323f9f394 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 15 May 2025 22:15:35 +0300 Subject: [PATCH 029/491] Refactor GUIScreenToolAbility to support tooltips --- .../inventory/gui/GUIScreenToolAbility.java | 55 ++++++++++-------- .../textures/gui/tool/gui_tool_ability.png | Bin 4073 -> 4131 bytes 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 7980f72a5..7186cf0c0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -3,12 +3,9 @@ package com.hbm.inventory.gui; import java.util.ArrayList; import java.util.List; -import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; -import com.hbm.items.ModItems; -import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage; import com.hbm.items.tool.ItemToolAbility; import com.hbm.lib.RefStrings; import com.hbm.util.EnumUtil; @@ -17,11 +14,8 @@ import com.hbm.util.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemTool; import net.minecraft.util.ResourceLocation; public class GUIScreenToolAbility extends GuiScreen { @@ -55,19 +49,19 @@ public class GUIScreenToolAbility extends GuiScreen { public static final List abilitiesHarvest = new ArrayList<>(); static { - abilitiesArea.add(new AbilityInfo(null, 0, 76, false)); - abilitiesArea.add(new AbilityInfo("tool.ability.recursion", 32, 76, false)); - abilitiesArea.add(new AbilityInfo("tool.ability.hammer", 64, 76, true)); - abilitiesArea.add(new AbilityInfo("tool.ability.explosion", 96, 76, true)); + abilitiesArea.add(new AbilityInfo(null, 0, 91, false)); + abilitiesArea.add(new AbilityInfo("tool.ability.recursion", 32, 91, false)); + abilitiesArea.add(new AbilityInfo("tool.ability.hammer", 64, 91, true)); + abilitiesArea.add(new AbilityInfo("tool.ability.explosion", 96, 91, true)); - abilitiesHarvest.add(new AbilityInfo(null, 0, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.silktouch", 32, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.luck", 64, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.smelter", 96, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.shredder", 128, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.centrifuge", 160, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.crystallizer", 192, 92, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.mercury", 224, 92, false)); + abilitiesHarvest.add(new AbilityInfo(null, 0, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.silktouch", 32, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.luck", 64, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.smelter", 96, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.shredder", 128, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.centrifuge", 160, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.crystallizer", 192, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.mercury", 224, 107, false)); } // TODO: availability status for abilities; list of presets; selected preset index; @@ -121,12 +115,8 @@ public class GUIScreenToolAbility extends GuiScreen { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); // Draw window background - drawTexturedModalRect(guiLeft, guiTop, 0, 0, 100, ySize); - for (int i = 0; i < insetWidth; i += 20) { - drawTexturedModalRect(guiLeft + 100 + i, guiTop, 80, 0, 20, ySize); - } - drawTexturedModalRect(guiLeft + 100 + insetWidth, guiTop, 100, 0, xSize - insetWidth - 100, ySize); - + drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 76); + // Draw the switches drawSwitches(abilitiesArea, selectionIdxArea, selectedLevelArea, guiLeft + 15, guiTop + 25, mouseX, mouseY); drawSwitches(abilitiesHarvest, selectionIdxHarvest, selectedLevelHarvest, guiLeft + 15, guiTop + 45, mouseX, mouseY); @@ -143,9 +133,24 @@ public class GUIScreenToolAbility extends GuiScreen { drawTexturedModalRect(extraBtnsX + i * 11, guiTop + 11, 186 + i * 9, 18, 9, 9); } } + + // Draw tooltip + // TODO + } + + protected void drawStretchedRect(int x, int y, int u, int v, int realWidth, int width, int height, int keepLeft, int keepRight) { + int midWidth = width - keepLeft - keepRight; + int realMidWidth = realWidth - keepLeft - keepRight; + drawTexturedModalRect(x, y, u, v, keepLeft, height); + for (int i = 0; i < realMidWidth; i += midWidth) { + drawTexturedModalRect(x + keepLeft + i, y, u + keepLeft, v, Math.min(midWidth, realMidWidth - i), height); + } + drawTexturedModalRect(x + keepLeft + realMidWidth, y, u + keepLeft + midWidth, v, keepRight, height); } protected void drawSwitches(List abilities, int selectionIdx, int selectedLevel, int x, int y, int mouseX, int mouseY) { + // TODO: Store hovered ability, use it in click handling and the dynamic tooltip + for (int i = 0; i < abilities.size(); ++i) { AbilityInfo abilityInfo = abilities.get(i); boolean available = true; // TODO @@ -181,7 +186,7 @@ public class GUIScreenToolAbility extends GuiScreen { } protected void drawDigit(int digit, int x, int y) { - drawTexturedModalRect(x, y, digit * 10, 108, 10, 15); + drawTexturedModalRect(x, y, digit * 10, 123, 10, 15); } private boolean isInAABB(int mouseX, int mouseY, int x, int y, int width, int height) { diff --git a/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png b/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png index 38157a296cd8dc963d8e0bb794f70740328f067c..04e94e87826698d1ddda65718545601c72a63bb8 100644 GIT binary patch literal 4131 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 Y+%?sns|xME13Sgm%F&W|!SCkZ0a)dVX8-^I literal 4073 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 Date: Sat, 17 May 2025 01:56:45 +0300 Subject: [PATCH 030/491] Add tooltip to gui --- .../inventory/gui/GUIScreenToolAbility.java | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 7186cf0c0..918bb6f5a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -50,13 +50,13 @@ public class GUIScreenToolAbility extends GuiScreen { static { abilitiesArea.add(new AbilityInfo(null, 0, 91, false)); - abilitiesArea.add(new AbilityInfo("tool.ability.recursion", 32, 91, false)); + abilitiesArea.add(new AbilityInfo("tool.ability.recursion", 32, 91, true)); abilitiesArea.add(new AbilityInfo("tool.ability.hammer", 64, 91, true)); abilitiesArea.add(new AbilityInfo("tool.ability.explosion", 96, 91, true)); abilitiesHarvest.add(new AbilityInfo(null, 0, 107, false)); abilitiesHarvest.add(new AbilityInfo("tool.ability.silktouch", 32, 107, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.luck", 64, 107, false)); + abilitiesHarvest.add(new AbilityInfo("tool.ability.luck", 64, 107, true)); abilitiesHarvest.add(new AbilityInfo("tool.ability.smelter", 96, 107, false)); abilitiesHarvest.add(new AbilityInfo("tool.ability.shredder", 128, 107, false)); abilitiesHarvest.add(new AbilityInfo("tool.ability.centrifuge", 160, 107, false)); @@ -72,6 +72,7 @@ public class GUIScreenToolAbility extends GuiScreen { int selectedLevelHarvest = 0; int selectedPreset = 0; int totalPresets = 1; + String selectedPresetName = "lorem ipsum"; public GUIScreenToolAbility(ItemToolAbility toolDef) { super(); @@ -101,13 +102,6 @@ public class GUIScreenToolAbility extends GuiScreen { this.drawDefaultBackground(); drawGuiContainerBackgroundLayer(mouseX, mouseY); - - if(!Mouse.isButtonDown(0) && !Mouse.isButtonDown(1) && Mouse.next()) { - int scroll = Mouse.getEventDWheel() / 6; - - // TODO - selectedPreset = (selectedPreset + totalPresets + scroll) % totalPresets; - } } protected void drawGuiContainerBackgroundLayer(int mouseX, int mouseY) { @@ -135,7 +129,13 @@ public class GUIScreenToolAbility extends GuiScreen { } // Draw tooltip - // TODO + if (!"".equals(selectedPresetName)) { + int tooltipWidth = Math.max(6, fontRendererObj.getStringWidth(selectedPresetName)); + int tooltipX = guiLeft + xSize / 2 - tooltipWidth / 2; + int tooltipY = guiTop + ySize + 1 + 4; + drawStretchedRect(tooltipX - 5, tooltipY - 4, 0, 76, tooltipWidth + 10, 186, 15, 3, 3); + fontRendererObj.drawString(selectedPresetName, tooltipX, tooltipY, 0xffffffff); + } } protected void drawStretchedRect(int x, int y, int u, int v, int realWidth, int width, int height, int keepLeft, int keepRight) { @@ -201,6 +201,18 @@ public class GUIScreenToolAbility extends GuiScreen { player.closeScreen(); } + @Override + public void handleMouseInput() { + super.handleMouseInput(); + + if(Mouse.getEventButton() == -1) { + int scroll = Mouse.getEventDWheel(); + + if(scroll > 0 && selectedPreset > 0) selectedPreset -= 1; + if(scroll < 0 && selectedPreset < totalPresets) selectedPreset += 1; + } + } + @Override protected void mouseClicked(int mouseX, int mouseY, int button) { // TODO @@ -213,7 +225,7 @@ public class GUIScreenToolAbility extends GuiScreen { if (available && isInAABB(mouseX, mouseY, guiLeft + 15 + 20 * i, guiTop + 25, 16, 16)) { if (abilityInfo.hasLevels) { - int availableLevels = 5; + int availableLevels = 10; if (i == selectionIdxArea) { selectedLevelArea = (selectedLevelArea + 1) % availableLevels; @@ -234,9 +246,9 @@ public class GUIScreenToolAbility extends GuiScreen { if (available && isInAABB(mouseX, mouseY, guiLeft + 15 + 20 * i, guiTop + 45, 16, 16)) { if (abilityInfo.hasLevels) { - int availableLevels = 5; + int availableLevels = 11; - if (i == selectionIdxArea) { + if (i == selectionIdxHarvest) { selectedLevelHarvest = (selectedLevelHarvest + 1) % availableLevels; } else { selectedLevelHarvest = 0; @@ -250,7 +262,7 @@ public class GUIScreenToolAbility extends GuiScreen { } if (clicked) { - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 1F)); + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F)); } // TODO From 853b6576adf55cb9fb3ebe4ef4f9d1bb6ba2585d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 17 May 2025 12:17:26 +0300 Subject: [PATCH 031/491] Rewrite weapon abilities --- .../hbm/handler/ability/IToolAreaAbility.java | 24 +- .../handler/ability/IToolHarvestAbility.java | 6 +- .../hbm/handler/ability/IWeaponAbility.java | 351 +++++++++++++++++- 3 files changed, 362 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index f441433d5..6bd0dc47f 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -31,20 +31,18 @@ public interface IToolAreaAbility extends IBaseAbility { public static enum AreaAbility { // region handlers - None( - new IToolAreaAbility() { - @Override - public String getName() { - // TODO: null? empty? otherwise i18n - return ""; - } - - @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { - return false; - } + None(new IToolAreaAbility() { + @Override + public String getName() { + // TODO: null? empty? otherwise i18n + return ""; } - ), + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + return false; + } + }), Recursion(new IToolAreaAbility() { @Override diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index 32dd5f59f..ea2a83805 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -43,8 +43,7 @@ public interface IToolHarvestAbility extends IBaseAbility { public static enum HarvestAbility { // region handlers - None( - new IToolHarvestAbility() { + None(new IToolHarvestAbility() { @Override public String getName() { // TODO: null? empty? otherwise i18n @@ -55,8 +54,7 @@ public interface IToolHarvestAbility extends IBaseAbility { public boolean skipDefaultDrops(int level) { return false; } - } - ), + }), Silk(new IToolHarvestAbility() { @Override diff --git a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java index cf293bbb0..f9083820f 100644 --- a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java +++ b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java @@ -1,12 +1,359 @@ package com.hbm.handler.ability; -import javax.swing.text.html.parser.Entity; - +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockBobble.BobbleType; +import com.hbm.handler.threading.PacketThreading; +import com.hbm.items.ModItems; import com.hbm.items.tool.IItemWithAbility; +import com.hbm.lib.ModDamageSource; +import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.potion.HbmPotion; +import com.hbm.util.ContaminationUtil; +import com.hbm.util.ContaminationUtil.ContaminationType; +import com.hbm.util.ContaminationUtil.HazardType; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityMagmaCube; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; import net.minecraft.world.World; public interface IWeaponAbility extends IBaseAbility { void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool); + + public static enum WeaponAbility { + // region handlers + None(new IWeaponAbility() { + @Override + public String getName() { + // TODO: null? empty? otherwise i18n + return ""; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {} + }), + + Radiation(new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.radiation"; + } + + public final float[] radAtLevel = {15F, 50F, 500F}; + + @Override + public int levels() { + return radAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + radAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + if(victim instanceof EntityLivingBase) + ContaminationUtil.contaminate((EntityLivingBase)victim, HazardType.RADIATION, ContaminationType.CREATIVE, radAtLevel[level]); + } + }), + + Vampire(new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.vampire"; + } + + public final float[] amountAtLevel = {2F, 3F, 5F, 10F, 50F}; + + @Override + public int levels() { + return amountAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + amountAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + float amount = amountAtLevel[level]; + + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + if(living.getHealth() <= 0) return; + living.setHealth(living.getHealth() - amount); + if(living.getHealth() <= 0) living.onDeath(DamageSource.magic); + player.heal(amount); + } + } + }), + + Stun(new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.stun"; + } + + public final int[] durationAtLevel = {2, 3, 5, 10, 15}; + + @Override + public int levels() { + return durationAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + durationAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + int duration = durationAtLevel[level]; + + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + + living.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, duration * 20, 4)); + living.addPotionEffect(new PotionEffect(Potion.weakness.id, duration * 20, 4)); + } + } + }), + + Blend(new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.blender"; + } + + public final int[] dividerAtLevel = {12}; + + @Override + public int levels() { + return dividerAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (1:" + dividerAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + int divider = dividerAtLevel[level]; + + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + + if(living.getHealth() <= 0.0F) { + int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health + world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "mob.zombie.woodbreak", 0.5F, 1.0F); + victim.attackEntityFrom(ModDamageSource.turbofan, 100); + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "giblets"); + data.setInteger("count", count * 4); + data.setInteger("ent", victim.getEntityId()); + data.setInteger("cDiv", 5); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, victim.posX, victim.posY + victim.height * 0.5, victim.posZ), new TargetPoint(victim.dimension, victim.posX, victim.posY + victim.height * 0.5, victim.posZ, 150)); + living.entityDropItem(new ItemStack(ModItems.flesh, 10, 0), 0.0F); + } + } + } + }), + + Phosphorus(new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.phosphorus"; + } + + public final int[] durationAtLevel = {60, 90}; + + @Override + public int levels() { + return durationAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + durationAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + int duration = durationAtLevel[level]; + + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + + living.addPotionEffect(new PotionEffect(HbmPotion.phosphorus.id, duration * 20, 4)); + } + } + }), + + Fire(new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.fire"; + } + + public final int[] durationAtLevel = {5, 10}; + + @Override + public int levels() { + return durationAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + durationAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + if(victim instanceof EntityLivingBase) { + victim.setFire(durationAtLevel[level]); + } + } + }), + + Chainsaw(new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.chainsaw"; + } + + public final int[] dividerAtLevel = {10, 15}; + + @Override + public int levels() { + return dividerAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (1:" + dividerAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + int divider = dividerAtLevel[level]; + + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + + if(living.getHealth() <= 0.0F) { + int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health + + for(int i = 0; i < count; i++) { + living.entityDropItem(new ItemStack(ModItems.nitra_small), 1); + world.spawnEntityInWorld(new EntityXPOrb(world, living.posX, living.posY, living.posZ, 1)); + } + + if(player instanceof EntityPlayerMP) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "vanillaburst"); + data.setInteger("count", count * 4); + data.setDouble("motion", 0.1D); + data.setString("mode", "blockdust"); + data.setInteger("block", Block.getIdFromBlock(Blocks.redstone_block)); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, living.posX, living.posY + living.height * 0.5, living.posZ), new TargetPoint(living.dimension, living.posX, living.posY, living.posZ, 50)); + } + + world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "hbm:weapon.chainsaw", 0.5F, 1.0F); + } + } + } + }), + + Beheader(new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.beheader"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) { + EntityLivingBase living = (EntityLivingBase) victim; + + if(living instanceof EntitySkeleton) { + if(((EntitySkeleton)living).getSkeletonType() == 0) { + living.entityDropItem(new ItemStack(Items.skull, 1, 0), 0.0F); + } else { + if(world.rand.nextInt(20) == 0) + living.entityDropItem(new ItemStack(Items.skull, 1, 1), 0.0F); + else + living.entityDropItem(new ItemStack(Items.coal, 3), 0.0F); + } + } else if(living instanceof EntityZombie) { + living.entityDropItem(new ItemStack(Items.skull, 1, 2), 0.0F); + } else if(living instanceof EntityCreeper) { + living.entityDropItem(new ItemStack(Items.skull, 1, 4), 0.0F); + } else if(living instanceof EntityMagmaCube) { + living.entityDropItem(new ItemStack(Items.magma_cream, 3), 0.0F); + } else if(living instanceof EntitySlime) { + living.entityDropItem(new ItemStack(Items.slime_ball, 3), 0.0F); + } else if(living instanceof EntityPlayer) { + ItemStack head = new ItemStack(Items.skull, 1, 3); + head.stackTagCompound = new NBTTagCompound(); + head.stackTagCompound.setString("SkullOwner", ((EntityPlayer) living).getDisplayName()); + living.entityDropItem(head, 0.0F); + } else { + living.entityDropItem(new ItemStack(Items.rotten_flesh, 3, 0), 0.0F); + living.entityDropItem(new ItemStack(Items.bone, 2, 0), 0.0F); + } + } + } + }), + + Bobble(new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.bobble"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { + EntityMob mob = (EntityMob) victim; + + int chance = 1000; + + if(mob.getMaxHealth() > 20) { + chance = 750; + } + + if(world.rand.nextInt(chance) == 0) + mob.entityDropItem(new ItemStack(ModBlocks.bobblehead, 1, world.rand.nextInt(BobbleType.values().length - 1) + 1), 0.0F); + } + } + }); + // endregion handlers + + public IWeaponAbility handler; + + WeaponAbility(IWeaponAbility handler) { + this.handler = handler; + } + } } From e59f8b441deacaaa590566924096a0fb61d9ff78 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 17 May 2025 12:47:09 +0300 Subject: [PATCH 032/491] Implement ability presets --- .../handler/ability/AvailableAbilities.java | 32 + .../hbm/handler/ability/IToolAreaAbility.java | 446 ++++++------- .../handler/ability/IToolHarvestAbility.java | 544 ++++++++------- .../hbm/handler/ability/IWeaponAbility.java | 630 +++++++++--------- .../com/hbm/handler/ability/ToolPreset.java | 38 ++ 5 files changed, 868 insertions(+), 822 deletions(-) create mode 100644 src/main/java/com/hbm/handler/ability/AvailableAbilities.java create mode 100644 src/main/java/com/hbm/handler/ability/ToolPreset.java diff --git a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java new file mode 100644 index 000000000..776f01c64 --- /dev/null +++ b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java @@ -0,0 +1,32 @@ +package com.hbm.handler.ability; + +import java.util.HashMap; + +// All abilities available on a given tool +public class AvailableAbilities { + private HashMap abilities = new HashMap(); + + AvailableAbilities() {} + + AvailableAbilities addAbility(IBaseAbility ability, int level) { + if (level < 0 || level >= ability.levels()) { + throw new IllegalArgumentException("Illegal level " + level + " for ability " + ability.getName()); + } + + abilities.put(ability, level); + return this; + } + + AvailableAbilities removeAbility(IBaseAbility ability) { + abilities.remove(ability); + return this; + } + + boolean supportsAbility(IBaseAbility ability) { + return abilities.containsKey(ability); + } + + int maxLevel(IBaseAbility ability) { + return abilities.getOrDefault(ability, -1); + } +} diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index 6bd0dc47f..0e5907870 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -28,233 +28,225 @@ public interface IToolAreaAbility extends IBaseAbility { // If true is returned, no block breaking is handled by the tool // (neither for the original block nor for the extras) boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool); - - public static enum AreaAbility { - // region handlers - None(new IToolAreaAbility() { - @Override - public String getName() { - // TODO: null? empty? otherwise i18n - return ""; - } - - @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { - return false; - } - }), - - Recursion(new IToolAreaAbility() { - @Override - public String getName() { - return "tool.ability.recursion"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityVein; - } - - public final int[] radiusAtLevel = {3, 4, 5, 6, 7, 9, 10}; - - @Override - public int levels() { - return radiusAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (" + radiusAtLevel[level] + ")"; - } - - // Note: if reusing it across different instatces of a tool - // is a problem here, then it had already been one before - // the refactor! The solution is to simply make this a local - // of the onDig method and pass it around as a parameter. - private Set pos = new HashSet<>(); - - @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { - Block b = world.getBlock(x, y, z); - - if(!ToolConfig.recursiveStone) { - Item item = Item.getItemFromBlock(b); - List stone = OreDictionary.getOres(OreDictManager.KEY_STONE); - for(ItemStack stack : stone) { - if(stack.getItem() == item) - return false; - } - List cobble = OreDictionary.getOres(OreDictManager.KEY_COBBLESTONE); - for(ItemStack stack : cobble) { - if(stack.getItem() == item) - return false; - } - } - - if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) - return false; - - pos.clear(); - - recurse(world, x, y, z, x, y, z, player, tool, 0, radiusAtLevel[level]); - - return false; - } - - private final List offsets = new ArrayList(3*3*3-1) {{ - for (int dx = -1; dx <= 1; dx++) { - for (int dy = -1; dy <= 1; dy++) { - for (int dz = -1; dz <= 1; dz++) { - if (dx != 0 || dy != 0 || dz != 0) { - add(new ThreeInts(dx, dy, dz)); - } - } - } - } - }}; - - private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth, int radius) { - List shuffledOffsets = new ArrayList<>(offsets); - Collections.shuffle(shuffledOffsets); - - for(ThreeInts offset : shuffledOffsets) { - breakExtra(world, x + offset.x, y + offset.y, z + offset.z, refX, refY, refZ, player, tool, depth, radius); - } - } - - private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth, int radius) { - if(pos.contains(new ThreeInts(x, y, z))) - return; - - depth += 1; - - if(depth > ToolConfig.recursionDepth) - return; - - pos.add(new ThreeInts(x, y, z)); - - //don't lose the ref block just yet - if(x == refX && y == refY && z == refZ) - return; - - if(Vec3.createVectorHelper(x - refX, y - refY, z - refZ).lengthVector() > radius) - return; - - Block b = world.getBlock(x, y, z); - Block ref = world.getBlock(refX, refY, refZ); - int meta = world.getBlockMetadata(x, y, z); - int refMeta = world.getBlockMetadata(refX, refY, refZ); - - if(!isSameBlock(b, ref)) - return; - - if(meta != refMeta) - return; - - if(player.getHeldItem() == null) - return; - - tool.breakExtraBlock(world, x, y, z, player, refX, refY, refZ); - - recurse(world, x, y, z, refX, refY, refZ, player, tool, depth, radius); - } - - private boolean isSameBlock(Block b1, Block b2) { - if(b1 == b2) return true; - if((b1 == Blocks.redstone_ore && b2 == Blocks.lit_redstone_ore) || (b1 == Blocks.lit_redstone_ore && b2 == Blocks.redstone_ore)) return true; - - return false; - } - }), - - Hammer(new IToolAreaAbility() { - @Override - public String getName() { - return "tool.ability.hammer"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityHammer; - } - - public final int[] rangeAtLevel = {1, 2, 3, 4}; - - @Override - public int levels() { - return rangeAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (" + rangeAtLevel[level] + ")"; - } - - @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { - int range = rangeAtLevel[level]; - - for(int a = x - range; a <= x + range; a++) { - for(int b = y - range; b <= y + range; b++) { - for(int c = z - range; c <= z + range; c++) { - - if(a == x && b == y && c == z) - continue; - - tool.breakExtraBlock(world, a, b ,c, player, x, y, z); - } - } - } - - return false; - } - }), - - Explosion(new IToolAreaAbility() { - @Override - public String getName() { - return "tool.ability.explosion"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityExplosion; - } - - public final float[] strengthAtLevel = {2.5F, 5F, 10F, 15F}; - - @Override - public int levels() { - return strengthAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (" + strengthAtLevel[level] + ")"; - } - - @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { - float strength = strengthAtLevel[level]; - - ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); - ex.addAttrib(ExAttrib.ALLDROP); - ex.addAttrib(ExAttrib.NOHURT); - ex.addAttrib(ExAttrib.NOPARTICLE); - ex.doExplosionA(); - ex.doExplosionB(false); - - player.worldObj.createExplosion(player, x + 0.5, y + 0.5, z + 0.5, 0.1F, false); - - return true; - } - }); - // endregion handlers - - public IToolAreaAbility handler; - - AreaAbility(IToolAreaAbility handler) { - this.handler = handler; + + // region handlers + public static final IToolAreaAbility NONE = new IToolAreaAbility() { + @Override + public String getName() { + // TODO: null? empty? otherwise i18n + return ""; + } + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + return false; } }; + + public static final IToolAreaAbility RECURSION = new IToolAreaAbility() { + @Override + public String getName() { + return "tool.ability.recursion"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityVein; + } + + public final int[] radiusAtLevel = {3, 4, 5, 6, 7, 9, 10}; + + @Override + public int levels() { + return radiusAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + radiusAtLevel[level] + ")"; + } + + // Note: if reusing it across different instatces of a tool + // is a problem here, then it had already been one before + // the refactor! The solution is to simply make this a local + // of the onDig method and pass it around as a parameter. + private Set pos = new HashSet<>(); + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + Block b = world.getBlock(x, y, z); + + if(!ToolConfig.recursiveStone) { + Item item = Item.getItemFromBlock(b); + List stone = OreDictionary.getOres(OreDictManager.KEY_STONE); + for(ItemStack stack : stone) { + if(stack.getItem() == item) + return false; + } + List cobble = OreDictionary.getOres(OreDictManager.KEY_COBBLESTONE); + for(ItemStack stack : cobble) { + if(stack.getItem() == item) + return false; + } + } + + if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) + return false; + + pos.clear(); + + recurse(world, x, y, z, x, y, z, player, tool, 0, radiusAtLevel[level]); + + return false; + } + + private final List offsets = new ArrayList(3*3*3-1) {{ + for (int dx = -1; dx <= 1; dx++) { + for (int dy = -1; dy <= 1; dy++) { + for (int dz = -1; dz <= 1; dz++) { + if (dx != 0 || dy != 0 || dz != 0) { + add(new ThreeInts(dx, dy, dz)); + } + } + } + } + }}; + + private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth, int radius) { + List shuffledOffsets = new ArrayList<>(offsets); + Collections.shuffle(shuffledOffsets); + + for(ThreeInts offset : shuffledOffsets) { + breakExtra(world, x + offset.x, y + offset.y, z + offset.z, refX, refY, refZ, player, tool, depth, radius); + } + } + + private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth, int radius) { + if(pos.contains(new ThreeInts(x, y, z))) + return; + + depth += 1; + + if(depth > ToolConfig.recursionDepth) + return; + + pos.add(new ThreeInts(x, y, z)); + + //don't lose the ref block just yet + if(x == refX && y == refY && z == refZ) + return; + + if(Vec3.createVectorHelper(x - refX, y - refY, z - refZ).lengthVector() > radius) + return; + + Block b = world.getBlock(x, y, z); + Block ref = world.getBlock(refX, refY, refZ); + int meta = world.getBlockMetadata(x, y, z); + int refMeta = world.getBlockMetadata(refX, refY, refZ); + + if(!isSameBlock(b, ref)) + return; + + if(meta != refMeta) + return; + + if(player.getHeldItem() == null) + return; + + tool.breakExtraBlock(world, x, y, z, player, refX, refY, refZ); + + recurse(world, x, y, z, refX, refY, refZ, player, tool, depth, radius); + } + + private boolean isSameBlock(Block b1, Block b2) { + if(b1 == b2) return true; + if((b1 == Blocks.redstone_ore && b2 == Blocks.lit_redstone_ore) || (b1 == Blocks.lit_redstone_ore && b2 == Blocks.redstone_ore)) return true; + + return false; + } + }; + + public static final IToolAreaAbility HAMMER = new IToolAreaAbility() { + @Override + public String getName() { + return "tool.ability.hammer"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityHammer; + } + + public final int[] rangeAtLevel = {1, 2, 3, 4}; + + @Override + public int levels() { + return rangeAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + rangeAtLevel[level] + ")"; + } + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + int range = rangeAtLevel[level]; + + for(int a = x - range; a <= x + range; a++) { + for(int b = y - range; b <= y + range; b++) { + for(int c = z - range; c <= z + range; c++) { + + if(a == x && b == y && c == z) + continue; + + tool.breakExtraBlock(world, a, b ,c, player, x, y, z); + } + } + } + + return false; + } + }; + + public static final IToolAreaAbility EXPLOSION = new IToolAreaAbility() { + @Override + public String getName() { + return "tool.ability.explosion"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityExplosion; + } + + public final float[] strengthAtLevel = {2.5F, 5F, 10F, 15F}; + + @Override + public int levels() { + return strengthAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + strengthAtLevel[level] + ")"; + } + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + float strength = strengthAtLevel[level]; + + ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); + ex.addAttrib(ExAttrib.ALLDROP); + ex.addAttrib(ExAttrib.NOHURT); + ex.addAttrib(ExAttrib.NOPARTICLE); + ex.doExplosionA(); + ex.doExplosionB(false); + + player.worldObj.createExplosion(player, x + 0.5, y + 0.5, z + 0.5, 0.1F, false); + + return true; + } + }; + // endregion handlers } diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index ea2a83805..f70761457 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -41,281 +41,273 @@ public interface IToolHarvestAbility extends IBaseAbility { } } - public static enum HarvestAbility { - // region handlers - None(new IToolHarvestAbility() { - @Override - public String getName() { - // TODO: null? empty? otherwise i18n - return ""; - } - - @Override - public boolean skipDefaultDrops(int level) { - return false; - } - }), - - Silk(new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.silktouch"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilitySilk; - } - - @Override - public boolean skipDefaultDrops(int level) { - return false; - } - - @Override - public void preHarvestAll(int level, World world, EntityPlayer player) { - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); - } - - @Override - public void postHarvestAll(int level, World world, EntityPlayer player) { - // ToC-ToU mismatch should be impossible - // because both calls happen on the same tick. - // Even if can be forced somehow, the player doesn't gain any benefit from it. - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); - } - }), - - Luck(new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.luck"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityLuck; - } - - public final int[] powerAtLevel = {1, 2, 3, 4, 5, 9}; - - @Override - public int levels() { - return powerAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (" + powerAtLevel[level] + ")"; - } - - @Override - public boolean skipDefaultDrops(int level) { - return false; - } - - @Override - public void preHarvestAll(int level, World world, EntityPlayer player) { - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, powerAtLevel[level]); - } - - @Override - public void postHarvestAll(int level, World world, EntityPlayer player) { - // ToC-ToU mismatch should be impossible - // because both calls happen on the same tick. - // Even if can be forced somehow, the player doesn't gain any benefit from it. - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune); - } - }), - - Smelter(new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.smelter"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityFurnace; - } - - @Override - public boolean skipDefaultDrops(int level) { - return true; - } - - @Override - public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - List drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0); - - boolean doesSmelt = false; - - for(int i = 0; i < drops.size(); i++) { - ItemStack stack = drops.get(i).copy(); - ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(stack); - - if(result != null) { - result = result.copy(); - result.stackSize *= stack.stackSize; - drops.set(i, result); - doesSmelt = true; - } - } - - if(doesSmelt) { - IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); - - for(ItemStack stack : drops) - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy())); - } - } - }), - - Shredder(new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.shredder"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityShredder; - } - - @Override - public boolean skipDefaultDrops(int level) { - return true; - } - - @Override - public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - ItemStack stack = new ItemStack(block, 1, meta); - ItemStack result = ShredderRecipes.getShredderResult(stack); - - if(result != null && result.getItem() != ModItems.scrap) { - IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy())); - } - } - }), - - Centrifuge(new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.centrifuge"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityCentrifuge; - } - - @Override - public boolean skipDefaultDrops(int level) { - return true; - } - - @Override - public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - ItemStack stack = new ItemStack(block, 1, meta); - ItemStack[] result = CentrifugeRecipes.getOutput(stack); - - if(result != null) { - IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); - - for(ItemStack st : result) { - if(st != null) - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, st.copy())); - } - } - } - }), - - Crystallizer(new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.crystallizer"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityCrystallizer; - } - - @Override - public boolean skipDefaultDrops(int level) { - return true; - } - - @Override - public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - ItemStack stack = new ItemStack(block, 1, meta); - CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack, Fluids.PEROXIDE); - - if(result != null) { - IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy())); - } - } - }), - - Mercury(new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.mercury"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityMercury; - } - - @Override - public boolean skipDefaultDrops(int level) { - return true; - } - - @Override - public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - int mercury = 0; - - if(block == Blocks.redstone_ore) - mercury = player.getRNG().nextInt(5) + 4; - if(block == Blocks.redstone_block) - mercury = player.getRNG().nextInt(7) + 8; - - if(mercury > 0) { - IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_mercury, mercury))); - } - } - }); - // endregion handlers - - public IToolHarvestAbility handler; - - HarvestAbility(IToolHarvestAbility handler) { - this.handler = handler; + // region handlers + public static final IToolHarvestAbility NONE = new IToolHarvestAbility() { + @Override + public String getName() { + // TODO: null? empty? otherwise i18n + return ""; } - } + + @Override + public boolean skipDefaultDrops(int level) { + return false; + } + }; + + public static final IToolHarvestAbility SILK = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.silktouch"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilitySilk; + } + + @Override + public boolean skipDefaultDrops(int level) { + return false; + } + + @Override + public void preHarvestAll(int level, World world, EntityPlayer player) { + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); + } + + @Override + public void postHarvestAll(int level, World world, EntityPlayer player) { + // ToC-ToU mismatch should be impossible + // because both calls happen on the same tick. + // Even if can be forced somehow, the player doesn't gain any benefit from it. + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); + } + }; + + public static final IToolHarvestAbility LUCK = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.luck"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityLuck; + } + + public final int[] powerAtLevel = {1, 2, 3, 4, 5, 9}; + + @Override + public int levels() { + return powerAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + powerAtLevel[level] + ")"; + } + + @Override + public boolean skipDefaultDrops(int level) { + return false; + } + + @Override + public void preHarvestAll(int level, World world, EntityPlayer player) { + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, powerAtLevel[level]); + } + + @Override + public void postHarvestAll(int level, World world, EntityPlayer player) { + // ToC-ToU mismatch should be impossible + // because both calls happen on the same tick. + // Even if can be forced somehow, the player doesn't gain any benefit from it. + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune); + } + }; + + public static final IToolHarvestAbility SMELTER = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.smelter"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityFurnace; + } + + @Override + public boolean skipDefaultDrops(int level) { + return true; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + List drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0); + + boolean doesSmelt = false; + + for(int i = 0; i < drops.size(); i++) { + ItemStack stack = drops.get(i).copy(); + ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(stack); + + if(result != null) { + result = result.copy(); + result.stackSize *= stack.stackSize; + drops.set(i, result); + doesSmelt = true; + } + } + + if(doesSmelt) { + IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + + for(ItemStack stack : drops) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy())); + } + } + }; + + public static final IToolHarvestAbility SHREDDER = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.shredder"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityShredder; + } + + @Override + public boolean skipDefaultDrops(int level) { + return true; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + //a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + ItemStack stack = new ItemStack(block, 1, meta); + ItemStack result = ShredderRecipes.getShredderResult(stack); + + if(result != null && result.getItem() != ModItems.scrap) { + IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy())); + } + } + }; + + public static final IToolHarvestAbility CENTRIFUGE = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.centrifuge"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityCentrifuge; + } + + @Override + public boolean skipDefaultDrops(int level) { + return true; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + //a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + ItemStack stack = new ItemStack(block, 1, meta); + ItemStack[] result = CentrifugeRecipes.getOutput(stack); + + if(result != null) { + IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + + for(ItemStack st : result) { + if(st != null) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, st.copy())); + } + } + } + }; + + public static final IToolHarvestAbility CRYSTALLIZER = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.crystallizer"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityCrystallizer; + } + + @Override + public boolean skipDefaultDrops(int level) { + return true; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + //a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + ItemStack stack = new ItemStack(block, 1, meta); + CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack, Fluids.PEROXIDE); + + if(result != null) { + IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy())); + } + } + }; + + public static final IToolHarvestAbility MERCURY = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.mercury"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityMercury; + } + + @Override + public boolean skipDefaultDrops(int level) { + return true; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + //a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + int mercury = 0; + + if(block == Blocks.redstone_ore) + mercury = player.getRNG().nextInt(5) + 4; + if(block == Blocks.redstone_block) + mercury = player.getRNG().nextInt(7) + 8; + + if(mercury > 0) { + IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_mercury, mercury))); + } + } + }; + // endregion handlers } diff --git a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java index f9083820f..1b6c95f40 100644 --- a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java +++ b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java @@ -36,324 +36,316 @@ import net.minecraft.world.World; public interface IWeaponAbility extends IBaseAbility { void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool); - - public static enum WeaponAbility { - // region handlers - None(new IWeaponAbility() { - @Override - public String getName() { - // TODO: null? empty? otherwise i18n - return ""; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {} - }), - - Radiation(new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.radiation"; - } - - public final float[] radAtLevel = {15F, 50F, 500F}; - - @Override - public int levels() { - return radAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (" + radAtLevel[level] + ")"; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - if(victim instanceof EntityLivingBase) - ContaminationUtil.contaminate((EntityLivingBase)victim, HazardType.RADIATION, ContaminationType.CREATIVE, radAtLevel[level]); - } - }), - - Vampire(new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.vampire"; - } - - public final float[] amountAtLevel = {2F, 3F, 5F, 10F, 50F}; - - @Override - public int levels() { - return amountAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (" + amountAtLevel[level] + ")"; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - float amount = amountAtLevel[level]; - - if(victim instanceof EntityLivingBase) { - EntityLivingBase living = (EntityLivingBase) victim; - if(living.getHealth() <= 0) return; - living.setHealth(living.getHealth() - amount); - if(living.getHealth() <= 0) living.onDeath(DamageSource.magic); - player.heal(amount); - } - } - }), - - Stun(new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.stun"; - } - - public final int[] durationAtLevel = {2, 3, 5, 10, 15}; - - @Override - public int levels() { - return durationAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (" + durationAtLevel[level] + ")"; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - int duration = durationAtLevel[level]; - - if(victim instanceof EntityLivingBase) { - EntityLivingBase living = (EntityLivingBase) victim; - - living.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, duration * 20, 4)); - living.addPotionEffect(new PotionEffect(Potion.weakness.id, duration * 20, 4)); - } - } - }), - - Blend(new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.blender"; - } - - public final int[] dividerAtLevel = {12}; - - @Override - public int levels() { - return dividerAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (1:" + dividerAtLevel[level] + ")"; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - int divider = dividerAtLevel[level]; - - if(victim instanceof EntityLivingBase) { - EntityLivingBase living = (EntityLivingBase) victim; - - if(living.getHealth() <= 0.0F) { - int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health - world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "mob.zombie.woodbreak", 0.5F, 1.0F); - victim.attackEntityFrom(ModDamageSource.turbofan, 100); - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "giblets"); - data.setInteger("count", count * 4); - data.setInteger("ent", victim.getEntityId()); - data.setInteger("cDiv", 5); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, victim.posX, victim.posY + victim.height * 0.5, victim.posZ), new TargetPoint(victim.dimension, victim.posX, victim.posY + victim.height * 0.5, victim.posZ, 150)); - living.entityDropItem(new ItemStack(ModItems.flesh, 10, 0), 0.0F); - } - } - } - }), - - Phosphorus(new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.phosphorus"; - } - - public final int[] durationAtLevel = {60, 90}; - - @Override - public int levels() { - return durationAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (" + durationAtLevel[level] + ")"; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - int duration = durationAtLevel[level]; - - if(victim instanceof EntityLivingBase) { - EntityLivingBase living = (EntityLivingBase) victim; - - living.addPotionEffect(new PotionEffect(HbmPotion.phosphorus.id, duration * 20, 4)); - } - } - }), - - Fire(new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.fire"; - } - - public final int[] durationAtLevel = {5, 10}; - - @Override - public int levels() { - return durationAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (" + durationAtLevel[level] + ")"; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - if(victim instanceof EntityLivingBase) { - victim.setFire(durationAtLevel[level]); - } - } - }), - - Chainsaw(new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.chainsaw"; - } - - public final int[] dividerAtLevel = {10, 15}; - - @Override - public int levels() { - return dividerAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (1:" + dividerAtLevel[level] + ")"; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - int divider = dividerAtLevel[level]; - - if(victim instanceof EntityLivingBase) { - EntityLivingBase living = (EntityLivingBase) victim; - - if(living.getHealth() <= 0.0F) { - int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health - - for(int i = 0; i < count; i++) { - living.entityDropItem(new ItemStack(ModItems.nitra_small), 1); - world.spawnEntityInWorld(new EntityXPOrb(world, living.posX, living.posY, living.posZ, 1)); - } - - if(player instanceof EntityPlayerMP) { - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "vanillaburst"); - data.setInteger("count", count * 4); - data.setDouble("motion", 0.1D); - data.setString("mode", "blockdust"); - data.setInteger("block", Block.getIdFromBlock(Blocks.redstone_block)); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, living.posX, living.posY + living.height * 0.5, living.posZ), new TargetPoint(living.dimension, living.posX, living.posY, living.posZ, 50)); - } - - world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "hbm:weapon.chainsaw", 0.5F, 1.0F); - } - } - } - }), - - Beheader(new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.beheader"; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) { - EntityLivingBase living = (EntityLivingBase) victim; - - if(living instanceof EntitySkeleton) { - if(((EntitySkeleton)living).getSkeletonType() == 0) { - living.entityDropItem(new ItemStack(Items.skull, 1, 0), 0.0F); - } else { - if(world.rand.nextInt(20) == 0) - living.entityDropItem(new ItemStack(Items.skull, 1, 1), 0.0F); - else - living.entityDropItem(new ItemStack(Items.coal, 3), 0.0F); - } - } else if(living instanceof EntityZombie) { - living.entityDropItem(new ItemStack(Items.skull, 1, 2), 0.0F); - } else if(living instanceof EntityCreeper) { - living.entityDropItem(new ItemStack(Items.skull, 1, 4), 0.0F); - } else if(living instanceof EntityMagmaCube) { - living.entityDropItem(new ItemStack(Items.magma_cream, 3), 0.0F); - } else if(living instanceof EntitySlime) { - living.entityDropItem(new ItemStack(Items.slime_ball, 3), 0.0F); - } else if(living instanceof EntityPlayer) { - ItemStack head = new ItemStack(Items.skull, 1, 3); - head.stackTagCompound = new NBTTagCompound(); - head.stackTagCompound.setString("SkullOwner", ((EntityPlayer) living).getDisplayName()); - living.entityDropItem(head, 0.0F); - } else { - living.entityDropItem(new ItemStack(Items.rotten_flesh, 3, 0), 0.0F); - living.entityDropItem(new ItemStack(Items.bone, 2, 0), 0.0F); - } - } - } - }), - - Bobble(new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.bobble"; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { - EntityMob mob = (EntityMob) victim; - - int chance = 1000; - - if(mob.getMaxHealth() > 20) { - chance = 750; - } - - if(world.rand.nextInt(chance) == 0) - mob.entityDropItem(new ItemStack(ModBlocks.bobblehead, 1, world.rand.nextInt(BobbleType.values().length - 1) + 1), 0.0F); - } - } - }); - // endregion handlers - - public IWeaponAbility handler; - - WeaponAbility(IWeaponAbility handler) { - this.handler = handler; + + // region handlers + public static final IWeaponAbility NONE = new IWeaponAbility() { + @Override + public String getName() { + // TODO: null? empty? otherwise i18n + return ""; } - } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {} + }; + + public static final IWeaponAbility RADIATION = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.radiation"; + } + + public final float[] radAtLevel = {15F, 50F, 500F}; + + @Override + public int levels() { + return radAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + radAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + if(victim instanceof EntityLivingBase) + ContaminationUtil.contaminate((EntityLivingBase)victim, HazardType.RADIATION, ContaminationType.CREATIVE, radAtLevel[level]); + } + }; + + public static final IWeaponAbility VAMPIRE = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.vampire"; + } + + public final float[] amountAtLevel = {2F, 3F, 5F, 10F, 50F}; + + @Override + public int levels() { + return amountAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + amountAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + float amount = amountAtLevel[level]; + + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + if(living.getHealth() <= 0) return; + living.setHealth(living.getHealth() - amount); + if(living.getHealth() <= 0) living.onDeath(DamageSource.magic); + player.heal(amount); + } + } + }; + + public static final IWeaponAbility STUN = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.stun"; + } + + public final int[] durationAtLevel = {2, 3, 5, 10, 15}; + + @Override + public int levels() { + return durationAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + durationAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + int duration = durationAtLevel[level]; + + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + + living.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, duration * 20, 4)); + living.addPotionEffect(new PotionEffect(Potion.weakness.id, duration * 20, 4)); + } + } + }; + + public static final IWeaponAbility BLEND = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.blender"; + } + + public final int[] dividerAtLevel = {12}; + + @Override + public int levels() { + return dividerAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (1:" + dividerAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + int divider = dividerAtLevel[level]; + + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + + if(living.getHealth() <= 0.0F) { + int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health + world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "mob.zombie.woodbreak", 0.5F, 1.0F); + victim.attackEntityFrom(ModDamageSource.turbofan, 100); + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "giblets"); + data.setInteger("count", count * 4); + data.setInteger("ent", victim.getEntityId()); + data.setInteger("cDiv", 5); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, victim.posX, victim.posY + victim.height * 0.5, victim.posZ), new TargetPoint(victim.dimension, victim.posX, victim.posY + victim.height * 0.5, victim.posZ, 150)); + living.entityDropItem(new ItemStack(ModItems.flesh, 10, 0), 0.0F); + } + } + } + }; + + public static final IWeaponAbility PHOSPHORUS = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.phosphorus"; + } + + public final int[] durationAtLevel = {60, 90}; + + @Override + public int levels() { + return durationAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + durationAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + int duration = durationAtLevel[level]; + + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + + living.addPotionEffect(new PotionEffect(HbmPotion.phosphorus.id, duration * 20, 4)); + } + } + }; + + public static final IWeaponAbility FIRE = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.fire"; + } + + public final int[] durationAtLevel = {5, 10}; + + @Override + public int levels() { + return durationAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + durationAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + if(victim instanceof EntityLivingBase) { + victim.setFire(durationAtLevel[level]); + } + } + }; + + public static final IWeaponAbility CHAINSAW = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.chainsaw"; + } + + public final int[] dividerAtLevel = {10, 15}; + + @Override + public int levels() { + return dividerAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (1:" + dividerAtLevel[level] + ")"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + int divider = dividerAtLevel[level]; + + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + + if(living.getHealth() <= 0.0F) { + int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health + + for(int i = 0; i < count; i++) { + living.entityDropItem(new ItemStack(ModItems.nitra_small), 1); + world.spawnEntityInWorld(new EntityXPOrb(world, living.posX, living.posY, living.posZ, 1)); + } + + if(player instanceof EntityPlayerMP) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "vanillaburst"); + data.setInteger("count", count * 4); + data.setDouble("motion", 0.1D); + data.setString("mode", "blockdust"); + data.setInteger("block", Block.getIdFromBlock(Blocks.redstone_block)); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, living.posX, living.posY + living.height * 0.5, living.posZ), new TargetPoint(living.dimension, living.posX, living.posY, living.posZ, 50)); + } + + world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "hbm:weapon.chainsaw", 0.5F, 1.0F); + } + } + } + }; + + public static final IWeaponAbility BEHEADER = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.beheader"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) { + EntityLivingBase living = (EntityLivingBase) victim; + + if(living instanceof EntitySkeleton) { + if(((EntitySkeleton)living).getSkeletonType() == 0) { + living.entityDropItem(new ItemStack(Items.skull, 1, 0), 0.0F); + } else { + if(world.rand.nextInt(20) == 0) + living.entityDropItem(new ItemStack(Items.skull, 1, 1), 0.0F); + else + living.entityDropItem(new ItemStack(Items.coal, 3), 0.0F); + } + } else if(living instanceof EntityZombie) { + living.entityDropItem(new ItemStack(Items.skull, 1, 2), 0.0F); + } else if(living instanceof EntityCreeper) { + living.entityDropItem(new ItemStack(Items.skull, 1, 4), 0.0F); + } else if(living instanceof EntityMagmaCube) { + living.entityDropItem(new ItemStack(Items.magma_cream, 3), 0.0F); + } else if(living instanceof EntitySlime) { + living.entityDropItem(new ItemStack(Items.slime_ball, 3), 0.0F); + } else if(living instanceof EntityPlayer) { + ItemStack head = new ItemStack(Items.skull, 1, 3); + head.stackTagCompound = new NBTTagCompound(); + head.stackTagCompound.setString("SkullOwner", ((EntityPlayer) living).getDisplayName()); + living.entityDropItem(head, 0.0F); + } else { + living.entityDropItem(new ItemStack(Items.rotten_flesh, 3, 0), 0.0F); + living.entityDropItem(new ItemStack(Items.bone, 2, 0), 0.0F); + } + } + } + }; + + public static final IWeaponAbility BOBBLE = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.bobble"; + } + + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { + EntityMob mob = (EntityMob) victim; + + int chance = 1000; + + if(mob.getMaxHealth() > 20) { + chance = 750; + } + + if(world.rand.nextInt(chance) == 0) + mob.entityDropItem(new ItemStack(ModBlocks.bobblehead, 1, world.rand.nextInt(BobbleType.values().length - 1) + 1), 0.0F); + } + } + }; + // endregion handlers } diff --git a/src/main/java/com/hbm/handler/ability/ToolPreset.java b/src/main/java/com/hbm/handler/ability/ToolPreset.java new file mode 100644 index 000000000..afc132153 --- /dev/null +++ b/src/main/java/com/hbm/handler/ability/ToolPreset.java @@ -0,0 +1,38 @@ +package com.hbm.handler.ability; + +public class ToolPreset { + public IToolAreaAbility areaAbility = IToolAreaAbility.NONE; + public int areaAbilityLevel = 0; + public IToolHarvestAbility harvestAbility = IToolHarvestAbility.NONE; + public int harvestAbilityLevel = 0; + + public ToolPreset() {} + + public ToolPreset(IToolAreaAbility areaAbility, IToolHarvestAbility harvestAbility) { + this.areaAbility = areaAbility; + this.harvestAbility = harvestAbility; + } + + public ToolPreset(IToolAreaAbility areaAbility, int areaAbilityLevel, IToolHarvestAbility harvestAbility, int harvestAbilityLevel) { + this.areaAbility = areaAbility; + this.areaAbilityLevel = areaAbilityLevel; + this.harvestAbility = harvestAbility; + this.harvestAbilityLevel = harvestAbilityLevel; + } + + public String getMessage() { + String areaPart = areaAbility.getFullName(areaAbilityLevel); + String harvestPart = harvestAbility.getFullName(harvestAbilityLevel); + + if (harvestPart.isEmpty() && areaPart.isEmpty()) + return "[Tool ability deactivated]"; + + if (harvestPart.isEmpty()) + return "[Enabled " + areaPart + "]"; + + if (areaPart.isEmpty()) + return "[Enabled " + harvestPart + "]"; + + return "[Enabled " + areaPart + " + " + harvestPart + "]"; + } +} From f1184f8731bb59fc244145ed0a5f87f28881284d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 17 May 2025 12:53:09 +0300 Subject: [PATCH 033/491] Add explicit "public" to interfaces --- src/main/java/com/hbm/handler/ability/IBaseAbility.java | 8 ++++---- .../java/com/hbm/handler/ability/IToolAreaAbility.java | 2 +- .../java/com/hbm/handler/ability/IToolHarvestAbility.java | 8 ++++---- src/main/java/com/hbm/handler/ability/IWeaponAbility.java | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IBaseAbility.java b/src/main/java/com/hbm/handler/ability/IBaseAbility.java index c5811a4b1..007d25e81 100644 --- a/src/main/java/com/hbm/handler/ability/IBaseAbility.java +++ b/src/main/java/com/hbm/handler/ability/IBaseAbility.java @@ -3,17 +3,17 @@ package com.hbm.handler.ability; import net.minecraft.client.resources.I18n; public interface IBaseAbility { - String getName(); + public String getName(); - default String getExtension(int level) { + public default String getExtension(int level) { return ""; } - default String getFullName(int level) { + public default String getFullName(int level) { return I18n.format(getName()) + getExtension(level); } - default boolean isAllowed() { + public default boolean isAllowed() { return true; } diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index 0e5907870..19bdedd94 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -27,7 +27,7 @@ public interface IToolAreaAbility extends IBaseAbility { // The initial block is always implicitly broken and shouldn't be included. // If true is returned, no block breaking is handled by the tool // (neither for the original block nor for the extras) - boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool); + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool); // region handlers public static final IToolAreaAbility NONE = new IToolAreaAbility() { diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index f70761457..797daee68 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -23,14 +23,14 @@ import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.world.World; public interface IToolHarvestAbility extends IBaseAbility { - default void preHarvestAll(int level, World world, EntityPlayer player) {} + public default void preHarvestAll(int level, World world, EntityPlayer player) {} - default void postHarvestAll(int level, World world, EntityPlayer player) {} + public default void postHarvestAll(int level, World world, EntityPlayer player) {} - boolean skipDefaultDrops(int level); + public boolean skipDefaultDrops(int level); // Call IToolHarvestAbility.super.onHarvestBlock to emulate the actual block breaking - default void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + public default void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { if (skipDefaultDrops(level)) { // Emulate the block breaking without drops world.setBlockToAir(x, y, z); diff --git a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java index 1b6c95f40..d5530b20e 100644 --- a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java +++ b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java @@ -35,7 +35,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.world.World; public interface IWeaponAbility extends IBaseAbility { - void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool); + public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool); // region handlers public static final IWeaponAbility NONE = new IWeaponAbility() { From 634836c549fb00e7e6bae361414835399cf2e3fb Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 17 May 2025 18:37:09 +0300 Subject: [PATCH 034/491] Switch weapon abilities to the new system --- .../handler/ability/AvailableAbilities.java | 62 +- .../hbm/handler/ability/IWeaponAbility.java | 27 +- .../inventory/gui/GUIScreenToolAbility.java | 598 +- src/main/java/com/hbm/items/ModItems.java | 14443 ++++++++-------- .../com/hbm/items/tool/ItemSwordAbility.java | 35 +- .../textures/gui/tool/gui_tool_ability.png | Bin 4131 -> 4455 bytes 6 files changed, 7623 insertions(+), 7542 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java index 776f01c64..b95c21a55 100644 --- a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java +++ b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java @@ -1,14 +1,21 @@ package com.hbm.handler.ability; +import java.util.Collections; import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.EnumChatFormatting; // All abilities available on a given tool public class AvailableAbilities { private HashMap abilities = new HashMap(); - AvailableAbilities() {} + public AvailableAbilities() {} - AvailableAbilities addAbility(IBaseAbility ability, int level) { + public AvailableAbilities addAbility(IBaseAbility ability, int level) { if (level < 0 || level >= ability.levels()) { throw new IllegalArgumentException("Illegal level " + level + " for ability " + ability.getName()); } @@ -17,16 +24,61 @@ public class AvailableAbilities { return this; } - AvailableAbilities removeAbility(IBaseAbility ability) { + public AvailableAbilities addToolAbilities() { + addAbility(IToolAreaAbility.NONE, 0); + addAbility(IToolHarvestAbility.NONE, 0); + return this; + } + + public AvailableAbilities removeAbility(IBaseAbility ability) { abilities.remove(ability); return this; } - boolean supportsAbility(IBaseAbility ability) { + public boolean supportsAbility(IBaseAbility ability) { return abilities.containsKey(ability); } - int maxLevel(IBaseAbility ability) { + public int maxLevel(IBaseAbility ability) { return abilities.getOrDefault(ability, -1); } + + public Map get() { + return Collections.unmodifiableMap(abilities); + } + + public int size() { + return abilities.size(); + } + + public boolean isEmpty() { + return abilities.isEmpty(); + } + + @SideOnly(Side.CLIENT) + public void addInformation(List list) { + boolean hasToolAbilities = abilities.keySet().stream().anyMatch(a -> a instanceof IToolAreaAbility || a instanceof IToolHarvestAbility); + + if (hasToolAbilities) { + list.add("Abilities: "); + + abilities.forEach((ability, level) -> { + list.add(" " + EnumChatFormatting.GOLD + ability.getFullName(level)); + }); + + list.add("Right click to cycle through abilities!"); + list.add("Sneak-click to turn ability off!"); + list.add("Alt-click to open ability selection GUI!"); + } + + boolean hasWeaponModifiers = abilities.keySet().stream().anyMatch(a -> a instanceof IWeaponAbility); + + if (hasWeaponModifiers) { + list.add("Weapon modifiers: "); + + abilities.forEach((ability, level) -> { + list.add(" " + EnumChatFormatting.RED + ability.getFullName(level)); + }); + } + } } diff --git a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java index d5530b20e..15a98df54 100644 --- a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java +++ b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java @@ -4,7 +4,6 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBobble.BobbleType; import com.hbm.handler.threading.PacketThreading; import com.hbm.items.ModItems; -import com.hbm.items.tool.IItemWithAbility; import com.hbm.lib.ModDamageSource; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; @@ -26,6 +25,7 @@ import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; +import net.minecraft.item.Item; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -35,7 +35,8 @@ import net.minecraft.util.DamageSource; import net.minecraft.world.World; public interface IWeaponAbility extends IBaseAbility { - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool); + // Note: tool is currently unused in weapon abilities + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool); // region handlers public static final IWeaponAbility NONE = new IWeaponAbility() { @@ -46,7 +47,7 @@ public interface IWeaponAbility extends IBaseAbility { } @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {} + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {} }; public static final IWeaponAbility RADIATION = new IWeaponAbility() { @@ -68,7 +69,7 @@ public interface IWeaponAbility extends IBaseAbility { } @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { if(victim instanceof EntityLivingBase) ContaminationUtil.contaminate((EntityLivingBase)victim, HazardType.RADIATION, ContaminationType.CREATIVE, radAtLevel[level]); } @@ -93,7 +94,7 @@ public interface IWeaponAbility extends IBaseAbility { } @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { float amount = amountAtLevel[level]; if(victim instanceof EntityLivingBase) { @@ -125,7 +126,7 @@ public interface IWeaponAbility extends IBaseAbility { } @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { int duration = durationAtLevel[level]; if(victim instanceof EntityLivingBase) { @@ -156,7 +157,7 @@ public interface IWeaponAbility extends IBaseAbility { } @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { int divider = dividerAtLevel[level]; if(victim instanceof EntityLivingBase) { @@ -198,7 +199,7 @@ public interface IWeaponAbility extends IBaseAbility { } @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { int duration = durationAtLevel[level]; if(victim instanceof EntityLivingBase) { @@ -228,7 +229,7 @@ public interface IWeaponAbility extends IBaseAbility { } @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { if(victim instanceof EntityLivingBase) { victim.setFire(durationAtLevel[level]); } @@ -241,7 +242,7 @@ public interface IWeaponAbility extends IBaseAbility { return "weapon.ability.chainsaw"; } - public final int[] dividerAtLevel = {10, 15}; + public final int[] dividerAtLevel = {15, 10}; @Override public int levels() { @@ -254,7 +255,7 @@ public interface IWeaponAbility extends IBaseAbility { } @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { int divider = dividerAtLevel[level]; if(victim instanceof EntityLivingBase) { @@ -291,7 +292,7 @@ public interface IWeaponAbility extends IBaseAbility { } @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) { EntityLivingBase living = (EntityLivingBase) victim; @@ -332,7 +333,7 @@ public interface IWeaponAbility extends IBaseAbility { } @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { EntityMob mob = (EntityMob) victim; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 918bb6f5a..0f66d8327 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -6,6 +6,10 @@ import java.util.List; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; +import com.hbm.handler.ability.IBaseAbility; +import com.hbm.handler.ability.IToolAreaAbility; +import com.hbm.handler.ability.IToolHarvestAbility; +import com.hbm.handler.ability.ToolPreset; import com.hbm.items.tool.ItemToolAbility; import com.hbm.lib.RefStrings; import com.hbm.util.EnumUtil; @@ -20,337 +24,373 @@ import net.minecraft.util.ResourceLocation; public class GUIScreenToolAbility extends GuiScreen { - public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/tool/gui_tool_ability.png"); - - protected int guiLeft; - protected int guiTop; - protected int xSize; - protected int ySize; - protected int insetWidth; + public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/tool/gui_tool_ability.png"); + + protected int guiLeft; + protected int guiTop; + protected int xSize; + protected int ySize; + protected int insetWidth; - protected ItemToolAbility toolDef; - protected ItemStack toolStack; + protected ItemToolAbility toolDef; + protected ItemStack toolStack; - // TODO: Move elsewhere? - public static class AbilityInfo { - String name; - int textureU, textureV; - boolean hasLevels; + public static class AbilityInfo { + public IBaseAbility ability; + public int textureU, textureV; - public AbilityInfo(String name, int textureU, int textureV, boolean hasLevels) { - this.name = name; - this.textureU = textureU; - this.textureV = textureV; - this.hasLevels = hasLevels; - } - } + public AbilityInfo(IBaseAbility ability, int textureU, int textureV) { + this.ability = ability; + this.textureU = textureU; + this.textureV = textureV; + } + } - public static final List abilitiesArea = new ArrayList<>(); - public static final List abilitiesHarvest = new ArrayList<>(); + public static final List abilitiesArea = new ArrayList<>(); + public static final List abilitiesHarvest = new ArrayList<>(); - static { - abilitiesArea.add(new AbilityInfo(null, 0, 91, false)); - abilitiesArea.add(new AbilityInfo("tool.ability.recursion", 32, 91, true)); - abilitiesArea.add(new AbilityInfo("tool.ability.hammer", 64, 91, true)); - abilitiesArea.add(new AbilityInfo("tool.ability.explosion", 96, 91, true)); - - abilitiesHarvest.add(new AbilityInfo(null, 0, 107, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.silktouch", 32, 107, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.luck", 64, 107, true)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.smelter", 96, 107, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.shredder", 128, 107, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.centrifuge", 160, 107, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.crystallizer", 192, 107, false)); - abilitiesHarvest.add(new AbilityInfo("tool.ability.mercury", 224, 107, false)); - } + static { + abilitiesArea.add(new AbilityInfo(IToolAreaAbility.NONE, 0, 91)); + abilitiesArea.add(new AbilityInfo(IToolAreaAbility.RECURSION, 32, 91)); + abilitiesArea.add(new AbilityInfo(IToolAreaAbility.HAMMER, 64, 91)); + abilitiesArea.add(new AbilityInfo(IToolAreaAbility.EXPLOSION, 96, 91)); + + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.NONE, 0, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SILK, 32, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.LUCK, 64, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SMELTER, 96, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SHREDDER, 128, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.CENTRIFUGE, 160, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.CRYSTALLIZER, 192, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.MERCURY, 224, 107)); + } - // TODO: availability status for abilities; list of presets; selected preset index; - // TODO: Remove this in favor of current preset - int selectionIdxArea = 0; - int selectedLevelArea = 0; - int selectionIdxHarvest = 0; - int selectedLevelHarvest = 0; - int selectedPreset = 0; - int totalPresets = 1; - String selectedPresetName = "lorem ipsum"; - - public GUIScreenToolAbility(ItemToolAbility toolDef) { - super(); - - this.toolDef = toolDef; - this.xSize = 186; // Note: increased dynamically - this.ySize = 76; + // TODO: availability status for abilities; list of presets; selected preset index; + // TODO: Remove this in favor of current preset + int selectionIdxArea = 0; + int selectedLevelArea = 0; + int selectionIdxHarvest = 0; + int selectedLevelHarvest = 0; + int selectedPreset = 0; + int totalPresets = 1; + + int hoverIdxArea = -1; + int hoverIdxHarvest = -1; + int hoverIdxExtraBtn = -1; + + public GUIScreenToolAbility(ItemToolAbility toolDef) { + super(); + + this.toolDef = toolDef; + this.xSize = 186; // Note: increased dynamically + this.ySize = 76; - this.insetWidth = 20 * Math.max(abilitiesArea.size() - 4, abilitiesHarvest.size() - 8); - this.xSize += insetWidth; - } + this.insetWidth = 20 * Math.max(abilitiesArea.size() - 4, abilitiesHarvest.size() - 8); + this.xSize += insetWidth; + } - @Override - public void initGui() { - this.toolStack = this.mc.thePlayer.getHeldItem(); - - if(this.toolStack == null) { - doClose(); - } - - guiLeft = (width - xSize) / 2; - guiTop = (height - ySize) / 2; - } + @Override + public void initGui() { + this.toolStack = this.mc.thePlayer.getHeldItem(); + + if(this.toolStack == null) { + doClose(); + } + + guiLeft = (width - xSize) / 2; + guiTop = (height - ySize) / 2; + } - @Override - public void drawScreen(int mouseX, int mouseY, float f) { - this.drawDefaultBackground(); + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + this.drawDefaultBackground(); - drawGuiContainerBackgroundLayer(mouseX, mouseY); - } + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - protected void drawGuiContainerBackgroundLayer(int mouseX, int mouseY) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + // Draw window background + drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 76); + + // Draw the switches + hoverIdxArea = drawSwitches(abilitiesArea, selectionIdxArea, selectedLevelArea, guiLeft + 15, guiTop + 25, mouseX, mouseY); + hoverIdxHarvest = drawSwitches(abilitiesHarvest, selectionIdxHarvest, selectedLevelHarvest, guiLeft + 15, guiTop + 45, mouseX, mouseY); - // Draw window background - drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 76); - - // Draw the switches - drawSwitches(abilitiesArea, selectionIdxArea, selectedLevelArea, guiLeft + 15, guiTop + 25, mouseX, mouseY); - drawSwitches(abilitiesHarvest, selectionIdxHarvest, selectedLevelHarvest, guiLeft + 15, guiTop + 45, mouseX, mouseY); + // Draw preset indicator + drawNumber(selectedPreset + 1, guiLeft + insetWidth + 115, guiTop + 25); + drawNumber(totalPresets, guiLeft + insetWidth + 149, guiTop + 25); - // Draw preset indicator - drawNumber(selectedPreset + 1, guiLeft + insetWidth + 115, guiTop + 25); - drawNumber(totalPresets, guiLeft + insetWidth + 149, guiTop + 25); + // Draw extra buttons hover highlights + int extraBtnsX = guiLeft + xSize - 86; + + hoverIdxExtraBtn = -1; + for (int i = 0; i < 7; ++i) { + if (isInAABB(mouseX, mouseY, extraBtnsX + i * 11, guiTop + 11, 9, 9)) { + hoverIdxExtraBtn = i; + drawTexturedModalRect(extraBtnsX + i * 11, guiTop + 11, 193 + i * 9, 0, 9, 9); + } + } - // Draw extra buttons hover highlights - int extraBtnsX = guiLeft + xSize - 75; + // Draw tooltip + String tooltipValue = ""; - for (int i = 0; i < 6; ++i) { - if (isInAABB(mouseX, mouseY, extraBtnsX + i * 11, guiTop + 11, 9, 9)) { - drawTexturedModalRect(extraBtnsX + i * 11, guiTop + 11, 186 + i * 9, 18, 9, 9); - } - } + if (hoverIdxArea != -1) { + int level = 0; + if (hoverIdxArea == selectionIdxArea) { + level = selectedLevelArea; + } + tooltipValue = abilitiesArea.get(hoverIdxArea).ability.getFullName(level); + } else if (hoverIdxHarvest != -1) { + int level = 0; + if (hoverIdxHarvest == selectionIdxHarvest) { + level = selectedLevelHarvest; + } + tooltipValue = abilitiesHarvest.get(hoverIdxHarvest).ability.getFullName(level); + } else if (hoverIdxExtraBtn != -1) { + switch (hoverIdxExtraBtn) { + case 0: tooltipValue = "Reset all presets"; break; + case 1: tooltipValue = "Delete current preset"; break; + case 2: tooltipValue = "Add new preset"; break; + case 3: tooltipValue = "Select first preset"; break; + case 4: tooltipValue = "Next preset"; break; + case 5: tooltipValue = "Previous preset"; break; + case 6: tooltipValue = "Close window"; break; + } + } - // Draw tooltip - if (!"".equals(selectedPresetName)) { - int tooltipWidth = Math.max(6, fontRendererObj.getStringWidth(selectedPresetName)); - int tooltipX = guiLeft + xSize / 2 - tooltipWidth / 2; - int tooltipY = guiTop + ySize + 1 + 4; - drawStretchedRect(tooltipX - 5, tooltipY - 4, 0, 76, tooltipWidth + 10, 186, 15, 3, 3); - fontRendererObj.drawString(selectedPresetName, tooltipX, tooltipY, 0xffffffff); - } - } + if (!tooltipValue.isEmpty()) { + int tooltipWidth = Math.max(6, fontRendererObj.getStringWidth(tooltipValue)); + int tooltipX = guiLeft + xSize / 2 - tooltipWidth / 2; + int tooltipY = guiTop + ySize + 1 + 4; + drawStretchedRect(tooltipX - 5, tooltipY - 4, 0, 76, tooltipWidth + 10, 186, 15, 3, 3); + fontRendererObj.drawString(tooltipValue, tooltipX, tooltipY, 0xffffffff); + } + } - protected void drawStretchedRect(int x, int y, int u, int v, int realWidth, int width, int height, int keepLeft, int keepRight) { - int midWidth = width - keepLeft - keepRight; - int realMidWidth = realWidth - keepLeft - keepRight; - drawTexturedModalRect(x, y, u, v, keepLeft, height); - for (int i = 0; i < realMidWidth; i += midWidth) { - drawTexturedModalRect(x + keepLeft + i, y, u + keepLeft, v, Math.min(midWidth, realMidWidth - i), height); - } - drawTexturedModalRect(x + keepLeft + realMidWidth, y, u + keepLeft + midWidth, v, keepRight, height); - } + protected void drawStretchedRect(int x, int y, int u, int v, int realWidth, int width, int height, int keepLeft, int keepRight) { + int midWidth = width - keepLeft - keepRight; + int realMidWidth = realWidth - keepLeft - keepRight; + drawTexturedModalRect(x, y, u, v, keepLeft, height); + for (int i = 0; i < realMidWidth; i += midWidth) { + drawTexturedModalRect(x + keepLeft + i, y, u + keepLeft, v, Math.min(midWidth, realMidWidth - i), height); + } + drawTexturedModalRect(x + keepLeft + realMidWidth, y, u + keepLeft + midWidth, v, keepRight, height); + } - protected void drawSwitches(List abilities, int selectionIdx, int selectedLevel, int x, int y, int mouseX, int mouseY) { - // TODO: Store hovered ability, use it in click handling and the dynamic tooltip - - for (int i = 0; i < abilities.size(); ++i) { - AbilityInfo abilityInfo = abilities.get(i); - boolean available = true; // TODO + protected int drawSwitches(List abilities, int selectionIdx, int selectedLevel, int x, int y, int mouseX, int mouseY) { + int hoverIdx = -1; - // Draw switch - drawTexturedModalRect(x + 20 * i, y, abilityInfo.textureU + (available ? 16 : 0), abilityInfo.textureV, 16, 16); - - // Draw level LEDs - if (abilityInfo.hasLevels) { - int level = 0; // TODO + for (int i = 0; i < abilities.size(); ++i) { + AbilityInfo abilityInfo = abilities.get(i); + boolean available = true; // TODO - if (i == selectionIdx) { - level = selectedLevel + 1; - } + // Draw switch + drawTexturedModalRect(x + 20 * i, y, abilityInfo.textureU + (available ? 16 : 0), abilityInfo.textureV, 16, 16); + + // Draw level LEDs + if (abilityInfo.ability.levels() > 1) { + int level = 0; - drawTexturedModalRect(x + 20 * i + 17, y + 1, 222 + level * 2, 0, 2, 14); - } + if (i == selectionIdx) { + level = selectedLevel + 1; + } - if (i == selectionIdx) { - // Draw selection highlight - drawTexturedModalRect(x + 20 * i - 1, y - 1, 186, 0, 18, 18); - } else if (available && isInAABB(mouseX, mouseY, x + 20 * i, y, 16, 16)) { - // Draw hover highlight - drawTexturedModalRect(x + 20 * i - 1, y - 1, 204, 0, 18, 18); - } - } - } + // TODO: Max allowed level instead? + // int maxLevel = Math.min(abilityInfo.ability.levels(), 5); + int maxLevel = 5; + + if (level > 10 || level < 0) { + // All-red LEDs for invalid levels + level = -1; + } - protected void drawNumber(int number, int x, int y) { - number += 100; // Against accidental negatives - drawDigit((number / 10) % 10, x, y); - drawDigit(number % 10, x + 12, y); - } + drawTexturedModalRect(x + 20 * i + 17, y + 1, 188 + level * 2, maxLevel * 14, 2, 14); + } - protected void drawDigit(int digit, int x, int y) { - drawTexturedModalRect(x, y, digit * 10, 123, 10, 15); - } + boolean isHovered = isInAABB(mouseX, mouseY, x + 20 * i, y, 16, 16); - private boolean isInAABB(int mouseX, int mouseY, int x, int y, int width, int height) { - return x <= mouseX && x + width > mouseX && y <= mouseY && y + height > mouseY; - } + if (isHovered) { + hoverIdx = i; + } - @Override - public void updateScreen() { - EntityPlayer player = this.mc.thePlayer; + if (i == selectionIdx) { + // Draw selection highlight + drawTexturedModalRect(x + 20 * i - 1, y - 1, 220, 9, 18, 18); + } else if (available && isHovered) { + // Draw hover highlight + drawTexturedModalRect(x + 20 * i - 1, y - 1, 238, 9, 18, 18); + } + } - if(player.getHeldItem() == null || player.getHeldItem().getItem() != toolDef) - player.closeScreen(); - } + return hoverIdx; + } - @Override - public void handleMouseInput() { - super.handleMouseInput(); + protected void drawNumber(int number, int x, int y) { + number += 100; // Against accidental negatives + drawDigit((number / 10) % 10, x, y); + drawDigit(number % 10, x + 12, y); + } - if(Mouse.getEventButton() == -1) { - int scroll = Mouse.getEventDWheel(); + protected void drawDigit(int digit, int x, int y) { + drawTexturedModalRect(x, y, digit * 10, 123, 10, 15); + } - if(scroll > 0 && selectedPreset > 0) selectedPreset -= 1; - if(scroll < 0 && selectedPreset < totalPresets) selectedPreset += 1; - } - } + private boolean isInAABB(int mouseX, int mouseY, int x, int y, int width, int height) { + return x <= mouseX && x + width > mouseX && y <= mouseY && y + height > mouseY; + } - @Override - protected void mouseClicked(int mouseX, int mouseY, int button) { - // TODO - boolean clicked = false; - - // TODO: Encapsulate? - for (int i = 0; i < abilitiesArea.size(); ++i) { - AbilityInfo abilityInfo = abilitiesArea.get(i); - boolean available = true; // TODO + @Override + public void updateScreen() { + EntityPlayer player = this.mc.thePlayer; - if (available && isInAABB(mouseX, mouseY, guiLeft + 15 + 20 * i, guiTop + 25, 16, 16)) { - if (abilityInfo.hasLevels) { - int availableLevels = 10; + if(player.getHeldItem() == null || player.getHeldItem().getItem() != toolDef) + player.closeScreen(); + } - if (i == selectionIdxArea) { - selectedLevelArea = (selectedLevelArea + 1) % availableLevels; - } else { - selectedLevelArea = 0; - } - } + @Override + public void handleMouseInput() { + super.handleMouseInput(); - selectionIdxArea = i; - clicked = true; - break; - } - } + if(Mouse.getEventButton() == -1) { + int scroll = Mouse.getEventDWheel(); - for (int i = 0; i < abilitiesHarvest.size(); ++i) { - AbilityInfo abilityInfo = abilitiesHarvest.get(i); - boolean available = true; // TODO + if(scroll < 0 && selectedPreset > 0) selectedPreset -= 1; + if(scroll > 0 && selectedPreset < totalPresets - 1) selectedPreset += 1; + } + } - if (available && isInAABB(mouseX, mouseY, guiLeft + 15 + 20 * i, guiTop + 45, 16, 16)) { - if (abilityInfo.hasLevels) { - int availableLevels = 11; + @Override + protected void mouseClicked(int mouseX, int mouseY, int button) { + // Process switches + // TODO: Encapsulate in a method + if (hoverIdxArea != -1) { + boolean available = true; // TODO - if (i == selectionIdxHarvest) { - selectedLevelHarvest = (selectedLevelHarvest + 1) % availableLevels; - } else { - selectedLevelHarvest = 0; - } - } + if (available) { + int availableLevels = abilitiesArea.get(hoverIdxArea).ability.levels(); - selectionIdxHarvest = i; - clicked = true; - break; - } - } + if (hoverIdxArea != selectionIdxArea || availableLevels > 1) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F)); + } - if (clicked) { - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F)); - } - - // TODO - int extraBtnsX = guiLeft + xSize - 75; + if (hoverIdxArea == selectionIdxArea) { + selectedLevelArea = (selectedLevelArea + 1) % availableLevels; + } else { + selectedLevelArea = 0; + } - clicked = false; + selectionIdxArea = hoverIdxArea; + } + } - if (isInAABB(mouseX, mouseY, extraBtnsX + 0 * 11, guiTop + 11, 9, 9)) { - doDelPreset(); - clicked = true; - } + if (hoverIdxHarvest != -1) { + boolean available = true; // TODO - if (isInAABB(mouseX, mouseY, extraBtnsX + 1 * 11, guiTop + 11, 9, 9)) { - doAddPreset(); - clicked = true; - } + if (available) { + int availableLevels = abilitiesHarvest.get(hoverIdxHarvest).ability.levels(); - if (isInAABB(mouseX, mouseY, extraBtnsX + 2 * 11, guiTop + 11, 9, 9)) { - doZeroPreset(); - clicked = true; - } + if (hoverIdxHarvest == selectionIdxHarvest) { + selectedLevelHarvest = (selectedLevelHarvest + 1) % availableLevels; + } else { + selectedLevelHarvest = 0; + } - if (isInAABB(mouseX, mouseY, extraBtnsX + 3 * 11, guiTop + 11, 9, 9)) { - doNextPreset(); - clicked = true; - } + selectionIdxHarvest = hoverIdxHarvest; - if (isInAABB(mouseX, mouseY, extraBtnsX + 4 * 11, guiTop + 11, 9, 9)) { - doPrevPreset(); - clicked = true; - } + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F)); + } + } + + // Process extra buttons + if (hoverIdxExtraBtn != -1) { + switch (hoverIdxExtraBtn) { + case 0: + doResetPresets(); + break; + case 1: + doDelPreset(); + break; + case 2: + doAddPreset(); + break; + case 3: + doZeroPreset(); + break; + case 4: + doNextPreset(); + break; + case 5: + doPrevPreset(); + break; + case 6: + doClose(); + break; + } - if (isInAABB(mouseX, mouseY, extraBtnsX + 5 * 11, guiTop + 11, 9, 9)) { - doClose(); - clicked = true; - } + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F)); + } - if (clicked) { - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F)); - } - } + // Allow quick-closing + if (!isInAABB(mouseX, mouseY, guiLeft, guiTop, xSize, ySize)) { + doClose(); + } + } - @Override - protected void keyTyped(char c, int key) { - if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) { - doClose(); - return; - } - - super.keyTyped(c, key); - } - - @Override - public boolean doesGuiPauseGame() { - return false; - } + @Override + protected void keyTyped(char c, int key) { + if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) { + doClose(); + return; + } + + super.keyTyped(c, key); + } + + @Override + public boolean doesGuiPauseGame() { + return false; + } - protected void doDelPreset() { - // TODO - if (totalPresets <= 1) { - return; - } - totalPresets -= 1; - selectedPreset -= 1; - } + protected void doResetPresets() { + // TODO + totalPresets = 1; + selectedPreset = 0; + selectionIdxArea = 0; + selectedLevelArea = 0; + selectionIdxHarvest = 0; + selectedLevelHarvest = 0; + } - protected void doAddPreset() { - // TODO - totalPresets += 1; - selectedPreset += 1; - } + protected void doDelPreset() { + // TODO + if (totalPresets <= 1) { + return; + } + totalPresets -= 1; + selectedPreset -= 1; + } - protected void doZeroPreset() { - // TODO - selectedPreset = 0; - } + protected void doAddPreset() { + // TODO + totalPresets += 1; + selectedPreset += 1; + } - protected void doNextPreset() { - // TODO - selectedPreset = (selectedPreset + 1) % totalPresets; - } + protected void doZeroPreset() { + // TODO + selectedPreset = 0; + } - protected void doPrevPreset() { - // TODO - selectedPreset = (selectedPreset + totalPresets - 1) % totalPresets; - } + protected void doNextPreset() { + // TODO + selectedPreset = (selectedPreset + 1) % totalPresets; + } - protected void doClose() { - this.mc.thePlayer.closeScreen(); - } + protected void doPrevPreset() { + // TODO + selectedPreset = (selectedPreset + totalPresets - 1) % totalPresets; + } + + protected void doClose() { + this.mc.thePlayer.closeScreen(); + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 63715bbe3..faa866dfc 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1,7221 +1,7222 @@ -package com.hbm.items; - -import com.hbm.blocks.ModBlocks; -import com.hbm.config.VersatileConfig; -import com.hbm.handler.BucketHandler; -import com.hbm.handler.ToolAbility; -import com.hbm.handler.ToolAbility.LuckAbility; -import com.hbm.handler.WeaponAbility; -import com.hbm.handler.guncfg.*; -import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType; -import com.hbm.inventory.fluid.Fluids; -import com.hbm.inventory.fluid.tank.FluidTank; -import com.hbm.inventory.material.MaterialShapes; -import com.hbm.inventory.material.Mats; -import com.hbm.items.ItemAmmoEnums.*; -import com.hbm.items.ItemEnums.*; -import com.hbm.items.armor.*; -import com.hbm.items.armor.IArmorDisableModel.EnumPlayerPart; -import com.hbm.items.bomb.*; -import com.hbm.items.food.*; -import com.hbm.items.machine.*; -import com.hbm.items.machine.ItemFELCrystal.EnumWavelengths; -import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; -import com.hbm.items.machine.ItemPlateFuel.FunctionEnum; -import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; -import com.hbm.items.machine.ItemRBMKRod.EnumBurnFunc; -import com.hbm.items.machine.ItemRBMKRod.EnumDepleteFunc; -import com.hbm.items.machine.ItemRTGPelletDepleted.DepletedRTGMaterial; -import com.hbm.items.machine.ItemStamp.StampType; -import com.hbm.items.special.*; -import com.hbm.items.special.ItemPlasticScrap.ScrapType; -import com.hbm.items.tool.*; -import com.hbm.items.tool.ItemToolAbility.EnumToolType; -import com.hbm.items.weapon.*; -import com.hbm.items.weapon.ItemCustomMissilePart.*; -import com.hbm.items.weapon.ItemMissile.MissileFormFactor; -import com.hbm.items.weapon.ItemMissile.MissileFuel; -import com.hbm.items.weapon.ItemMissile.MissileTier; -import com.hbm.items.weapon.sedna.factory.GunFactory; -import com.hbm.lib.RefStrings; -import com.hbm.main.MainRegistry; -import com.hbm.potion.HbmPotion; -import com.hbm.tileentity.machine.rbmk.IRBMKFluxReceiver.NType; -import com.hbm.util.RTGUtil; - -import api.hbm.block.IToolable.ToolType; -import cpw.mods.fml.common.registry.GameRegistry; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.init.Items; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; -import net.minecraft.item.Item.ToolMaterial; -import net.minecraft.item.ItemArmor.ArmorMaterial; -import net.minecraft.item.ItemFood; -import net.minecraft.item.ItemSoup; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; - -public class ModItems { - - public static void mainRegistry() { - initializeItem(); - registerItem(); - } - - public static Item redstone_sword; - public static Item big_sword; - - public static Item ingot_th232; - public static Item ingot_uranium; - public static Item ingot_u233; - public static Item ingot_u235; - public static Item ingot_u238; - public static Item ingot_u238m2; - public static Item ingot_plutonium; - public static Item ingot_pu238; - public static Item ingot_pu239; - public static Item ingot_pu240; - public static Item ingot_pu241; - public static Item ingot_pu_mix; - public static Item ingot_am241; - public static Item ingot_am242; - public static Item ingot_am_mix; - public static Item ingot_neptunium; - public static Item ingot_polonium; - public static Item ingot_technetium; - public static Item ingot_co60; - public static Item ingot_sr90; - public static Item ingot_au198; - public static Item ingot_pb209; - public static Item ingot_ra226; - public static Item ingot_titanium; - public static Item ingot_cobalt; - public static Item sulfur; - public static Item nitra; - public static Item nitra_small; - - public static Item coke; - public static Item lignite; - public static Item powder_lignite; - public static Item briquette; - public static Item coal_infernal; - public static Item cinnebar; - public static Item powder_ash; - public static Item powder_limestone; - public static Item powder_cement; - - public static Item niter; - public static Item ingot_copper; - public static Item ingot_red_copper; - public static Item ingot_tungsten; - public static Item ingot_aluminium; - public static Item fluorite; - public static Item ingot_beryllium; - public static Item ingot_schraranium; - public static Item ingot_schrabidium; - public static Item ingot_schrabidate; - public static Item ingot_plutonium_fuel; - public static Item ingot_neptunium_fuel; - public static Item ingot_uranium_fuel; - public static Item ingot_mox_fuel; - public static Item ingot_americium_fuel; - public static Item ingot_schrabidium_fuel; - public static Item ingot_thorium_fuel; - public static Item nugget_uranium_fuel; - public static Item nugget_thorium_fuel; - public static Item nugget_plutonium_fuel; - public static Item nugget_neptunium_fuel; - public static Item nugget_mox_fuel; - public static Item nugget_americium_fuel; - public static Item nugget_schrabidium_fuel; - public static Item ingot_advanced_alloy; - public static Item ingot_tcalloy; - public static Item ingot_cdalloy; - public static Item ingot_bismuth_bronze; - public static Item ingot_arsenic_bronze; - public static Item ingot_bscco; - public static Item lithium; - public static Item ingot_zirconium; - public static Item ingot_hes; - public static Item ingot_les; - public static Item nugget_hes; - public static Item nugget_les; - public static Item ingot_magnetized_tungsten; - public static Item ingot_combine_steel; - public static Item ingot_solinium; - public static Item nugget_solinium; - public static Item ingot_phosphorus; - public static Item ingot_semtex; - public static Item ingot_c4; - public static Item ingot_boron; - public static Item ingot_graphite; - public static Item ingot_firebrick; - public static Item ingot_smore; - - public static Item ingot_gh336; - public static Item nugget_gh336; - - public static Item ingot_australium; - public static Item nugget_australium; - public static Item nugget_australium_lesser; - public static Item nugget_australium_greater; - - public static Item ingot_desh; - public static Item nugget_desh; - public static Item ingot_dineutronium; - public static Item nugget_dineutronium; - public static Item powder_dineutronium; - public static Item ingot_tetraneutronium; - public static Item nugget_tetraneutronium; - public static Item powder_tetraneutronium; - public static Item ingot_starmetal; - public static Item ingot_gunmetal; - public static Item plate_gunmetal; - public static Item ingot_weaponsteel; - public static Item plate_weaponsteel; - public static Item ingot_saturnite; - public static Item plate_saturnite; - public static Item ingot_ferrouranium; - public static Item ingot_electronium; - public static Item nugget_zirconium; - public static Item nugget_mercury; - public static Item ingot_mercury; //It's to prevent any ambiguity, as it was treated as a full ingot in the past anyway - public static Item bottle_mercury; - - public static Item ore_byproduct; //byproduct of variable purity and quantity, can be treated as a nugget, might require shredding or acidizing, depends on the type - - public static Item ore_bedrock; - public static Item ore_centrifuged; - public static Item ore_cleaned; - public static Item ore_separated; - public static Item ore_purified; - public static Item ore_nitrated; - public static Item ore_nitrocrystalline; - public static Item ore_deepcleaned; - public static Item ore_seared; - //public static Item ore_radcleaned; - public static Item ore_enriched; //final stage - public static Item bedrock_ore_base; - public static Item bedrock_ore; - public static Item bedrock_ore_fragment; - - public static Item billet_uranium; - public static Item billet_u233; - public static Item billet_u235; - public static Item billet_u238; - public static Item billet_th232; - public static Item billet_plutonium; - public static Item billet_pu238; - public static Item billet_pu239; - public static Item billet_pu240; - public static Item billet_pu241; - public static Item billet_pu_mix; - public static Item billet_am241; - public static Item billet_am242; - public static Item billet_am_mix; - public static Item billet_neptunium; - public static Item billet_polonium; - public static Item billet_technetium; - public static Item billet_cobalt; - public static Item billet_co60; - public static Item billet_sr90; - public static Item billet_au198; - public static Item billet_pb209; - public static Item billet_ra226; - public static Item billet_actinium; - public static Item billet_schrabidium; - public static Item billet_solinium; - public static Item billet_gh336; - public static Item billet_australium; - public static Item billet_australium_lesser; - public static Item billet_australium_greater; - public static Item billet_uranium_fuel; - public static Item billet_thorium_fuel; - public static Item billet_plutonium_fuel; - public static Item billet_neptunium_fuel; - public static Item billet_mox_fuel; - public static Item billet_americium_fuel; - public static Item billet_les; - public static Item billet_schrabidium_fuel; - public static Item billet_hes; - public static Item billet_po210be; - public static Item billet_ra226be; - public static Item billet_pu238be; - public static Item billet_yharonite; - public static Item billet_balefire_gold; - public static Item billet_flashlead; - public static Item billet_zfb_bismuth; - public static Item billet_zfb_pu241; - public static Item billet_zfb_am_mix; - public static Item billet_beryllium; - public static Item billet_bismuth; - public static Item billet_zirconium; - public static Item billet_nuclear_waste; - - public static Item nugget_th232; - public static Item nugget_uranium; - public static Item nugget_u233; - public static Item nugget_u235; - public static Item nugget_u238; - public static Item nugget_plutonium; - public static Item nugget_pu238; - public static Item nugget_pu239; - public static Item nugget_pu240; - public static Item nugget_pu241; - public static Item nugget_pu_mix; - public static Item nugget_am241; - public static Item nugget_am242; - public static Item nugget_am_mix; - public static Item nugget_neptunium; - public static Item nugget_polonium; - public static Item nugget_technetium; - public static Item nugget_cobalt; - public static Item nugget_co60; - public static Item nugget_sr90; - public static Item nugget_au198; - public static Item nugget_pb209; - public static Item nugget_ra226; - public static Item nugget_actinium; - public static Item plate_titanium; - public static Item plate_aluminium; - public static Item neutron_reflector; - public static Item ingot_steel; - public static Item plate_steel; - public static Item plate_iron; - public static Item ingot_lead; - public static Item nugget_lead; - public static Item ingot_bismuth; - public static Item nugget_bismuth; - public static Item ingot_arsenic; - public static Item nugget_arsenic; - public static Item ingot_tantalium; - public static Item nugget_tantalium; - public static Item ingot_silicon; - public static Item billet_silicon; - public static Item nugget_silicon; - public static Item ingot_niobium; - public static Item nugget_niobium; - public static Item ingot_osmiridium; - public static Item nugget_osmiridium; - public static Item plate_lead; - public static Item plate_dura_steel; - public static Item nugget_schrabidium; - public static Item plate_schrabidium; - public static Item plate_copper; - public static Item nugget_beryllium; - public static Item plate_gold; - public static Item hazmat_cloth; - public static Item hazmat_cloth_red; - public static Item hazmat_cloth_grey; - public static Item asbestos_cloth; - public static Item rag; - public static Item rag_damp; - public static Item rag_piss; - public static Item filter_coal; - public static Item plate_advanced_alloy; - public static Item plate_combine_steel; - public static Item plate_mixed; - public static Item plate_paa; - public static Item pipes_steel; - public static Item drill_titanium; - public static Item plate_dalekanium; - public static Item plate_euphemium; - public static Item bolt; - public static Item bolt_spike; - public static Item plate_polymer; - public static Item plate_kevlar; - public static Item plate_dineutronium; - public static Item plate_desh; - public static Item plate_bismuth; - public static Item photo_panel; - public static Item sat_base; - public static Item thruster_nuclear; - public static Item safety_fuse; - public static Item part_generic; - public static Item item_secret; - public static Item ingot_metal; - public static Item chemical_dye; - public static Item crayon; - - public static Item undefined; - - public static Item ball_resin; - public static Item ingot_dura_steel; - public static Item ingot_polymer; - public static Item ingot_bakelite; - public static Item ingot_biorubber; - public static Item ingot_rubber; - public static Item ingot_pet; - public static Item ingot_pc; - public static Item ingot_pvc; - - public static Item ingot_fiberglass; - public static Item ingot_asbestos; - public static Item powder_asbestos; - public static Item ingot_calcium; - public static Item powder_calcium; - public static Item ingot_cadmium; - public static Item powder_cadmium; - public static Item powder_bismuth; - public static Item ingot_mud; - public static Item ingot_cft; - - public static Item ingot_lanthanium; - public static Item ingot_actinium; - - public static Item ingot_meteorite; - public static Item ingot_meteorite_forged; - public static Item blade_meteorite; - public static Item ingot_steel_dusted; - public static Item ingot_chainsteel; - - public static Item plate_armor_titanium; - public static Item plate_armor_ajr; - public static Item plate_armor_hev; - public static Item plate_armor_lunar; - public static Item plate_armor_fau; - public static Item plate_armor_dnt; - - public static Item oil_tar; - public static Item solid_fuel; - public static Item solid_fuel_presto; - public static Item solid_fuel_presto_triplet; - public static Item solid_fuel_bf; - public static Item solid_fuel_presto_bf; - public static Item solid_fuel_presto_triplet_bf; - public static Item rocket_fuel; - - public static Item crystal_coal; - public static Item crystal_iron; - public static Item crystal_gold; - public static Item crystal_redstone; - public static Item crystal_lapis; - public static Item crystal_diamond; - 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_schraranium; - public static Item crystal_schrabidium; - public static Item crystal_rare; - public static Item crystal_phosphorus; - public static Item crystal_lithium; - public static Item crystal_cobalt; - public static Item crystal_starmetal; - public static Item crystal_cinnebar; - public static Item crystal_trixite; - public static Item crystal_osmiridium; - - public static Item gem_sodalite; - public static Item gem_tantalium; - public static Item gem_volcanic; - public static Item gem_rad; - public static Item gem_alexandrite; - - public static Item powder_lead; - public static Item powder_tantalium; - public static Item powder_neptunium; - public static Item powder_polonium; - public static Item powder_co60; - public static Item powder_sr90; - public static Item powder_sr90_tiny; - public static Item powder_au198; - public static Item powder_ra226; - public static Item powder_i131; - public static Item powder_i131_tiny; - public static Item powder_xe135; - public static Item powder_xe135_tiny; - public static Item powder_cs137; - public static Item powder_cs137_tiny; - public static Item powder_at209; - public static Item powder_schrabidium; - public static Item powder_schrabidate; - - public static Item powder_aluminium; - public static Item powder_beryllium; - public static Item powder_copper; - public static Item powder_gold; - public static Item powder_iron; - public static Item powder_titanium; - public static Item powder_tungsten; - public static Item powder_uranium; - public static Item powder_plutonium; - public static Item dust; - public static Item dust_tiny; - public static Item fallout; - public static Item powder_power; - - public static Item powder_thorium; - public static Item powder_iodine; - public static Item powder_neodymium; - public static Item powder_astatine; - public static Item powder_caesium; - - public static Item powder_strontium; - public static Item powder_cobalt; - public static Item powder_bromine; - public static Item powder_niobium; - public static Item powder_tennessine; - public static Item powder_cerium; - - public static Item powder_advanced_alloy; - public static Item powder_tcalloy; - public static Item powder_coal; - public static Item powder_coal_tiny; - public static Item powder_combine_steel; - public static Item powder_diamond; - public static Item powder_emerald; - public static Item powder_lapis; - public static Item powder_quartz; - public static Item powder_magnetized_tungsten; - public static Item powder_chlorophyte; - public static Item powder_red_copper; - public static Item powder_steel; - public static Item powder_lithium; - public static Item powder_zirconium; - public static Item powder_sodium; - - public static Item powder_australium; - - public static Item powder_dura_steel; - public static Item powder_polymer; - public static Item powder_bakelite; - public static Item powder_euphemium; - public static Item powder_meteorite; - - public static Item powder_steel_tiny; - public static Item powder_lithium_tiny; - public static Item powder_neodymium_tiny; - public static Item powder_cobalt_tiny; - public static Item powder_niobium_tiny; - public static Item powder_cerium_tiny; - public static Item powder_lanthanium_tiny; - public static Item powder_actinium_tiny; - public static Item powder_boron_tiny; - public static Item powder_meteorite_tiny; - - public static Item powder_coltan_ore; - public static Item powder_coltan; - public static Item powder_tektite; - public static Item powder_paleogenite; - public static Item powder_paleogenite_tiny; - public static Item powder_impure_osmiridium; - public static Item powder_borax; - public static Item powder_chlorocalcite; - public static Item powder_molysite; - - public static Item powder_lanthanium; - public static Item powder_actinium; - public static Item powder_boron; - public static Item powder_desh; - public static Item powder_semtex_mix; - public static Item powder_desh_mix; - public static Item powder_desh_ready; - public static Item powder_nitan_mix; - public static Item powder_spark_mix; - public static Item powder_yellowcake; - public static Item powder_magic; - public static Item powder_balefire; - public static Item powder_sawdust; - public static Item powder_flux; - public static Item powder_fertilizer; - - public static Item fragment_neodymium; - public static Item fragment_cobalt; - public static Item fragment_niobium; - public static Item fragment_cerium; - public static Item fragment_lanthanium; - public static Item fragment_actinium; - public static Item fragment_boron; - public static Item fragment_meteorite; - public static Item fragment_coltan; - public static Item chunk_ore; - - public static Item biomass; - public static Item biomass_compressed; - public static Item bio_wafer; - public static Item plant_item; - - public static Item coil_copper; - public static Item coil_copper_torus; - public static Item coil_tungsten; - public static Item tank_steel; - public static Item motor; - public static Item motor_desh; - public static Item motor_bismuth; - public static Item centrifuge_element; - public static Item reactor_core; - public static Item rtg_unit; - public static Item levitation_unit; - - public static Item coil_advanced_alloy; - public static Item coil_advanced_torus; - public static Item coil_magnetized_tungsten; - public static Item coil_gold; - public static Item coil_gold_torus; - public static Item component_limiter; - public static Item component_emitter; - public static Item chlorine_pinwheel; - public static Item deuterium_filter; - - public static Item parts_legendary; - - public static Item circuit; - - public static Item crt_display; - public static ItemEnumMulti circuit_star_piece; - public static ItemEnumMulti circuit_star_component; - public static Item circuit_star; - - public static Item assembly_nuke; - - public static Item casing; - - public static Item wiring_red_copper; - public static Item shell; - public static Item pipe; - public static Item fins_flat; - public static Item fins_small_steel; - public static Item fins_big_steel; - public static Item fins_tri_steel; - public static Item fins_quad_titanium; - public static Item sphere_steel; - public static Item pedestal_steel; - public static Item dysfunctional_reactor; - public static Item blade_titanium; - public static Item turbine_titanium; - public static Item blade_tungsten; - public static Item turbine_tungsten; - public static Item ring_starmetal; - public static Item flywheel_beryllium; - - public static Item gear_large; - public static Item sawblade; - - public static Item toothpicks; - public static Item ducttape; - public static Item catalyst_clay; - - public static Item warhead_generic_small; - public static Item warhead_generic_medium; - public static Item warhead_generic_large; - public static Item warhead_incendiary_small; - public static Item warhead_incendiary_medium; - public static Item warhead_incendiary_large; - public static Item warhead_cluster_small; - public static Item warhead_cluster_medium; - public static Item warhead_cluster_large; - public static Item warhead_buster_small; - public static Item warhead_buster_medium; - public static Item warhead_buster_large; - public static Item warhead_nuclear; - public static Item warhead_mirv; - public static Item warhead_volcano; - - public static Item fuel_tank_small; - public static Item fuel_tank_medium; - public static Item fuel_tank_large; - - public static Item thruster_small; - public static Item thruster_medium; - public static Item thruster_large; - - public static Item sat_head_mapper; - public static Item sat_head_scanner; - public static Item sat_head_radar; - public static Item sat_head_laser; - public static Item sat_head_resonator; - - public static Item seg_10; - public static Item seg_15; - public static Item seg_20; - - public static Item chopper_head; - public static Item chopper_gun; - public static Item chopper_torso; - public static Item chopper_tail; - public static Item chopper_wing; - public static Item chopper_blades; - public static Item combine_scrap; - - public static Item shimmer_head; - public static Item shimmer_axe_head; - public static Item shimmer_handle; - - //public static Item telepad; - public static Item entanglement_kit; - - public static Item stamp_stone_flat; - public static Item stamp_stone_plate; - public static Item stamp_stone_wire; - public static Item stamp_stone_circuit; - public static Item stamp_iron_flat; - public static Item stamp_iron_plate; - public static Item stamp_iron_wire; - public static Item stamp_iron_circuit; - public static Item stamp_steel_flat; - public static Item stamp_steel_plate; - public static Item stamp_steel_wire; - public static Item stamp_steel_circuit; - public static Item stamp_titanium_flat; - public static Item stamp_titanium_plate; - public static Item stamp_titanium_wire; - public static Item stamp_titanium_circuit; - public static Item stamp_obsidian_flat; - public static Item stamp_obsidian_plate; - public static Item stamp_obsidian_wire; - public static Item stamp_obsidian_circuit; - public static Item stamp_desh_flat; - public static Item stamp_desh_plate; - public static Item stamp_desh_wire; - public static Item stamp_desh_circuit; - public static Item stamp_book; - - public static Item stamp_357; - public static Item stamp_44; - public static Item stamp_9; - public static Item stamp_50; - - public static Item stamp_desh_357; - public static Item stamp_desh_44; - public static Item stamp_desh_9; - public static Item stamp_desh_50; - - public static Item blades_steel; - public static Item blades_titanium; - public static Item blades_advanced_alloy; - public static Item blades_desh; - - public static Item mold_base; - public static Item mold; - public static Item scraps; - public static Item ingot_raw; - public static Item plate_cast; - public static Item plate_welded; - public static Item heavy_component; - public static Item wire_fine; - public static Item wire_dense; - public static Item part_barrel_light; - public static Item part_barrel_heavy; - public static Item part_receiver_light; - public static Item part_receiver_heavy; - public static Item part_mechanism; - public static Item part_stock; - public static Item part_grip; - - public static Item part_lithium; - public static Item part_beryllium; - public static Item part_carbon; - public static Item part_copper; - public static Item part_plutonium; - - public static Item laser_crystal_co2; - public static Item laser_crystal_bismuth; - public static Item laser_crystal_cmb; - public static Item laser_crystal_dnt; - public static Item laser_crystal_digamma; - - public static Item thermo_element; - - public static Item catalytic_converter; - public static Item crackpipe; - - public static Item pellet_rtg_depleted; - - public static Item pellet_rtg_radium; - public static Item pellet_rtg_weak; - public static Item pellet_rtg; - public static Item pellet_rtg_strontium; - public static Item pellet_rtg_cobalt; - public static Item pellet_rtg_actinium; - public static Item pellet_rtg_polonium; - public static Item pellet_rtg_americium; - public static Item pellet_rtg_gold; - public static Item pellet_rtg_lead; - - public static Item tritium_deuterium_cake; - - public static Item piston_selenium; - public static Item piston_set; - public static Item drillbit; - - //public static Item crystal_energy; - //public static Item pellet_coolant; - - public static Item rune_blank; - public static Item rune_isa; - public static Item rune_dagaz; - public static Item rune_hagalaz; - public static Item rune_jera; - public static Item rune_thurisaz; - - public static Item ams_catalyst_blank; - public static Item ams_catalyst_aluminium; - public static Item ams_catalyst_beryllium; - public static Item ams_catalyst_caesium; - public static Item ams_catalyst_cerium; - public static Item ams_catalyst_cobalt; - public static Item ams_catalyst_copper; - public static Item ams_catalyst_dineutronium; - public static Item ams_catalyst_euphemium; - public static Item ams_catalyst_iron; - public static Item ams_catalyst_lithium; - public static Item ams_catalyst_niobium; - public static Item ams_catalyst_schrabidium; - public static Item ams_catalyst_strontium; - public static Item ams_catalyst_thorium; - public static Item ams_catalyst_tungsten; - - public static Item ams_focus_blank; - public static Item ams_focus_limiter; - public static Item ams_focus_booster; - - public static Item ams_muzzle; - - public static Item ams_lens; - - public static Item ams_core_sing; - public static Item ams_core_wormhole; - public static Item ams_core_eyeofharmony; - public static Item ams_core_thingy; - - public static Item fusion_shield_tungsten; - public static Item fusion_shield_desh; - public static Item fusion_shield_chlorophyte; - public static Item fusion_shield_vaporwave; - - public static Item cell_empty; - public static Item cell_uf6; - public static Item cell_puf6; - public static Item cell_deuterium; - public static Item cell_tritium; - public static Item cell_sas3; - public static Item cell_antimatter; - public static Item cell_anti_schrabidium; - public static Item cell_balefire; - - public static Item demon_core_open; - public static Item demon_core_closed; - - public static Item pa_coil; - - public static Item particle_empty; - public static Item particle_hydrogen; - public static Item particle_copper; - public static Item particle_lead; - public static Item particle_aproton; - public static Item particle_aelectron; - public static Item particle_amat; - public static Item particle_aschrab; - public static Item particle_higgs; - public static Item particle_muon; - public static Item particle_tachyon; - public static Item particle_strange; - public static Item particle_dark; - public static Item particle_sparkticle; - public static Item particle_digamma; - public static Item particle_lutece; - - public static Item pellet_antimatter; - public static Item singularity; - public static Item singularity_counter_resonant; - public static Item singularity_super_heated; - public static Item black_hole; - public static Item singularity_spark; - public static Item crystal_xen; - public static Item inf_water; - public static Item inf_water_mk2; - - public static Item fuel_additive; - - public static Item canister_empty; - public static Item canister_full; - public static Item canister_napalm; - - public static Item gas_empty; - public static Item gas_full; - - public static Item fluid_tank_full; - public static Item fluid_tank_empty; - public static Item fluid_tank_lead_full; - public static Item fluid_tank_lead_empty; - public static Item fluid_barrel_full; - public static Item fluid_barrel_empty; - public static Item fluid_barrel_infinite; - public static Item pipette; - public static Item pipette_boron; - public static Item pipette_laboratory; - public static Item siphon; - - public static Item disperser_canister_empty; - public static Item disperser_canister; - public static Item glyphid_gland; - public static Item glyphid_gland_empty; - - public static Item syringe_empty; - public static Item syringe_antidote; - public static Item syringe_poison; - public static Item syringe_awesome; - public static Item syringe_metal_empty; - public static Item syringe_metal_stimpak; - public static Item syringe_metal_medx; - public static Item syringe_metal_psycho; - public static Item syringe_metal_super; - public static Item syringe_taint; - public static Item syringe_mkunicorn; - public static Item iv_empty; - public static Item iv_blood; - public static Item iv_xp_empty; - public static Item iv_xp; - public static Item radaway; - public static Item radaway_strong; - public static Item radaway_flush; - public static Item radx; - public static Item siox; - public static Item pill_herbal; - public static Item xanax; - public static Item fmn; - public static Item five_htp; - public static Item med_bag; - public static Item pill_iodine; - public static Item plan_c; - public static Item pill_red; - public static Item stealth_boy; - public static Item gas_mask_filter; - public static Item gas_mask_filter_mono; - public static Item gas_mask_filter_combo; - public static Item gas_mask_filter_rag; - public static Item gas_mask_filter_piss; - 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 cigarette; - - public static Item can_empty; - public static Item can_smart; - public static Item can_creature; - public static Item can_redbomb; - public static Item can_mrsugar; - public static Item can_overcharge; - public static Item can_luna; - public static Item can_bepis; - public static Item can_breen; - public static Item can_mug; - public static Item mucho_mango; - public static Item bottle_empty; - public static Item bottle_nuka; - public static Item bottle_cherry; - public static Item bottle_quantum; - public static Item bottle_sparkle; - public static Item bottle_rad; - public static Item bottle2_empty; - public static Item bottle2_korl; - public static Item bottle2_fritz; - public static Item bottle2_korl_special; - public static Item bottle2_fritz_special; - public static Item flask_empty; - public static Item flask_infusion; - public static Item chocolate_milk; - public static Item coffee; - public static Item coffee_radium; - public static Item chocolate; - public static Item cap_nuka; - public static Item cap_quantum; - public static Item cap_sparkle; - public static Item cap_rad; - public static Item cap_korl; - public static Item cap_fritz; - public static Item ring_pull; - public static Item bdcl; - //public static Item canned_beef; - //public static Item canned_tuna; - //public static Item canned_mystery; - //public static Item canned_pashtet; - //public static Item canned_cheese; - //public static Item canned_jizz; - //public static Item canned_milk; - //public static Item canned_ass; - //public static Item canned_pizza; - //public static Item canned_tube; - //public static Item canned_tomato; - //public static Item canned_asbestos; - //public static Item canned_bhole; - //public static Item canned_hotdogs; - //public static Item canned_leftovers; - //public static Item canned_yogurt; - //public static Item canned_stew; - //public static Item canned_chinese; - //public static Item canned_oil; - //public static Item canned_fist; - //public static Item canned_spam; - //public static Item canned_fried; - //public static Item canned_napalm; - //public static Item canned_diesel; - //public static Item canned_kerosene; - //public static Item canned_recursion; - //public static Item canned_bark; - public static ItemEnumMulti canned_conserve; - public static Item can_key; - - public static Item boat_rubber; - public static Item cart; - public static Item train; - public static Item drone; - - public static Item coin_creeper; - public static Item coin_radiation; - public static Item coin_maskman; - public static Item coin_worm; - public static Item coin_ufo; - //public static Item coin_siege; - //public static Item source; - - public static Item rod_empty; - public static Item rod; - public static Item rod_dual_empty; - public static Item rod_dual; - public static Item rod_quad_empty; - public static Item rod_quad; - - public static Item rod_zirnox_empty; - public static Item rod_zirnox_tritium; - public static ItemEnumMulti rod_zirnox; - - public static Item rod_zirnox_natural_uranium_fuel_depleted; - public static Item rod_zirnox_uranium_fuel_depleted; - public static Item rod_zirnox_thorium_fuel_depleted; - public static Item rod_zirnox_mox_fuel_depleted; - public static Item rod_zirnox_plutonium_fuel_depleted; - public static Item rod_zirnox_u233_fuel_depleted; - public static Item rod_zirnox_u235_fuel_depleted; - public static Item rod_zirnox_les_fuel_depleted; - public static Item rod_zirnox_zfb_mox_depleted; - - public static Item waste_natural_uranium; - public static Item waste_uranium; - public static Item waste_thorium; - public static Item waste_mox; - public static Item waste_plutonium; - public static Item waste_u233; - public static Item waste_u235; - public static Item waste_schrabidium; - public static Item waste_zfb_mox; - - public static Item waste_plate_u233; - public static Item waste_plate_u235; - public static Item waste_plate_mox; - public static Item waste_plate_pu239; - public static Item waste_plate_sa326; - public static Item waste_plate_ra226be; - public static Item waste_plate_pu238be; - - public static Item pile_rod_uranium; - public static Item pile_rod_pu239; - public static Item pile_rod_plutonium; - public static Item pile_rod_source; - public static Item pile_rod_boron; - public static Item pile_rod_lithium; - public static Item pile_rod_detector; - - public static Item plate_fuel_u233; - public static Item plate_fuel_u235; - public static Item plate_fuel_mox; - public static Item plate_fuel_pu239; - public static Item plate_fuel_sa326; - public static Item plate_fuel_ra226be; - public static Item plate_fuel_pu238be; - - public static Item pwr_fuel; - public static Item pwr_fuel_hot; - public static Item pwr_fuel_depleted; - - public static Item rbmk_lid; - public static Item rbmk_lid_glass; - public static Item rbmk_fuel_empty; - public static ItemRBMKRod rbmk_fuel_ueu; - public static ItemRBMKRod rbmk_fuel_meu; - public static ItemRBMKRod rbmk_fuel_heu233; - public static ItemRBMKRod rbmk_fuel_heu235; - public static ItemRBMKRod rbmk_fuel_thmeu; - public static ItemRBMKRod rbmk_fuel_lep; - public static ItemRBMKRod rbmk_fuel_mep; - public static ItemRBMKRod rbmk_fuel_hep239; - public static ItemRBMKRod rbmk_fuel_hep241; - public static ItemRBMKRod rbmk_fuel_lea; - public static ItemRBMKRod rbmk_fuel_mea; - public static ItemRBMKRod rbmk_fuel_hea241; - public static ItemRBMKRod rbmk_fuel_hea242; - public static ItemRBMKRod rbmk_fuel_men; - public static ItemRBMKRod rbmk_fuel_hen; - public static ItemRBMKRod rbmk_fuel_mox; - public static ItemRBMKRod rbmk_fuel_les; - public static ItemRBMKRod rbmk_fuel_mes; - public static ItemRBMKRod rbmk_fuel_hes; - public static ItemRBMKRod rbmk_fuel_leaus; - public static ItemRBMKRod rbmk_fuel_heaus; - public static ItemRBMKRod rbmk_fuel_po210be; - public static ItemRBMKRod rbmk_fuel_ra226be; - public static ItemRBMKRod rbmk_fuel_pu238be; - public static ItemRBMKRod rbmk_fuel_balefire_gold; - public static ItemRBMKRod rbmk_fuel_flashlead; - public static ItemRBMKRod rbmk_fuel_balefire; - public static ItemRBMKRod rbmk_fuel_zfb_bismuth; - public static ItemRBMKRod rbmk_fuel_zfb_pu241; - public static ItemRBMKRod rbmk_fuel_zfb_am_mix; - public static ItemRBMKRod rbmk_fuel_drx; - public static ItemRBMKRod rbmk_fuel_test; - //public static ItemRBMKRod rbmk_fuel_curve; - public static ItemRBMKPellet rbmk_pellet_ueu; - public static ItemRBMKPellet rbmk_pellet_meu; - public static ItemRBMKPellet rbmk_pellet_heu233; - public static ItemRBMKPellet rbmk_pellet_heu235; - public static ItemRBMKPellet rbmk_pellet_thmeu; - public static ItemRBMKPellet rbmk_pellet_lep; - public static ItemRBMKPellet rbmk_pellet_mep; - public static ItemRBMKPellet rbmk_pellet_hep239; - public static ItemRBMKPellet rbmk_pellet_hep241; - public static ItemRBMKPellet rbmk_pellet_lea; - public static ItemRBMKPellet rbmk_pellet_mea; - public static ItemRBMKPellet rbmk_pellet_hea241; - public static ItemRBMKPellet rbmk_pellet_hea242; - public static ItemRBMKPellet rbmk_pellet_men; - public static ItemRBMKPellet rbmk_pellet_hen; - public static ItemRBMKPellet rbmk_pellet_mox; - public static ItemRBMKPellet rbmk_pellet_les; - public static ItemRBMKPellet rbmk_pellet_mes; - public static ItemRBMKPellet rbmk_pellet_hes; - public static ItemRBMKPellet rbmk_pellet_leaus; - public static ItemRBMKPellet rbmk_pellet_heaus; - public static ItemRBMKPellet rbmk_pellet_po210be; - public static ItemRBMKPellet rbmk_pellet_ra226be; - public static ItemRBMKPellet rbmk_pellet_pu238be; - public static ItemRBMKPellet rbmk_pellet_balefire_gold; - public static ItemRBMKPellet rbmk_pellet_flashlead; - public static ItemRBMKPellet rbmk_pellet_balefire; - public static ItemRBMKPellet rbmk_pellet_zfb_bismuth; - public static ItemRBMKPellet rbmk_pellet_zfb_pu241; - public static ItemRBMKPellet rbmk_pellet_zfb_am_mix; - public static ItemRBMKPellet rbmk_pellet_drx; - - public static Item watz_pellet; - public static Item watz_pellet_depleted; - - public static Item icf_pellet_empty; - public static Item icf_pellet; - public static Item icf_pellet_depleted; - - public static Item scrap_plastic; - public static Item scrap; - public static Item scrap_oil; - public static Item scrap_nuclear; - public static Item trinitite; - public static Item nuclear_waste_long; - public static Item nuclear_waste_long_tiny; - public static Item nuclear_waste_short; - public static Item nuclear_waste_short_tiny; - public static Item nuclear_waste_long_depleted; - public static Item nuclear_waste_long_depleted_tiny; - public static Item nuclear_waste_short_depleted; - public static Item nuclear_waste_short_depleted_tiny; - public static Item nuclear_waste; - public static Item nuclear_waste_tiny; - public static Item nuclear_waste_vitrified; - public static Item nuclear_waste_vitrified_tiny; - - public static Item debris_graphite; - public static Item debris_metal; - public static Item debris_fuel; - public static Item debris_concrete; - public static Item debris_exchanger; - public static Item debris_shrapnel; - public static Item debris_element; - - public static Item containment_box; - public static Item plastic_bag; - - public static Item ammo_bag; - public static Item ammo_bag_infinite; - public static Item casing_bag; - - public static Item test_nuke_igniter; - public static Item test_nuke_propellant; - public static Item test_nuke_tier1_shielding; - public static Item test_nuke_tier2_shielding; - public static Item test_nuke_tier1_bullet; - public static Item test_nuke_tier2_bullet; - public static Item test_nuke_tier1_target; - public static Item test_nuke_tier2_target; - - public static Item cordite; - public static Item ballistite; - public static Item ball_dynamite; - public static Item ball_tnt; - public static Item ball_tatb; - public static Item ball_fireclay; - - public static Item pellet_cluster; - public static Item powder_fire; - public static Item powder_ice; - public static Item powder_poison; - public static Item powder_thermite; - public static Item pellet_gas; - public static Item magnetron; - public static Item pellet_buckshot; - public static Item pellet_charged; - - public static Item designator; - public static Item designator_range; - public static Item designator_manual; - public static Item designator_arty_range; - public static Item linker; - public static Item reactor_sensor; - public static Item oil_detector; - public static Item dosimeter; - public static Item geiger_counter; - public static Item digamma_diagnostic; - public static Item pollution_detector; - public static Item ore_density_scanner; - public static Item survey_scanner; - public static Item mirror_tool; - public static Item rbmk_tool; - public static Item coltan_tool; - public static Item power_net_tool; - public static Item analysis_tool; - public static Item coupling_tool; - public static Item drone_linker; - public static Item radar_linker; - public static Item settings_tool; - - public static Item template_folder; - public static Item journal_pip; - public static Item journal_bj; - public static Item journal_silver; - public static Item assembly_template; - public static Item chemistry_template; - public static Item chemistry_icon; - public static Item crucible_template; - public static Item fluid_identifier; - public static Item fluid_identifier_multi; - public static Item fluid_icon; - public static Item siren_track; - public static Item fluid_duct; - - public static Item bobmazon; - public static Item bobmazon_hidden; - - public static Item launch_code_piece; - public static Item launch_code; - public static Item launch_key; - - public static Item missile_assembly; - public static Item missile_generic; - public static Item missile_anti_ballistic; - public static Item missile_incendiary; - public static Item missile_cluster; - public static Item missile_buster; - public static Item missile_decoy; - public static Item missile_strong; - public static Item missile_incendiary_strong; - public static Item missile_cluster_strong; - public static Item missile_buster_strong; - public static Item missile_emp_strong; - public static Item missile_burst; - public static Item missile_inferno; - public static Item missile_rain; - public static Item missile_drill; - public static Item missile_nuclear; - public static Item missile_nuclear_cluster; - public static Item missile_volcano; - public static Item missile_doomsday; - public static Item missile_doomsday_rusted; - public static Item missile_taint; - public static Item missile_micro; - public static Item missile_bhole; - public static Item missile_schrabidium; - public static Item missile_emp; - public static Item missile_shuttle; - public static Item missile_stealth; - public static Item missile_test; - - public static Item mp_thruster_10_kerosene; - public static Item mp_thruster_10_kerosene_tec; - public static Item mp_thruster_10_solid; - public static Item mp_thruster_10_xenon; - public static Item mp_thruster_15_kerosene; - public static Item mp_thruster_15_kerosene_tec; - public static Item mp_thruster_15_kerosene_dual; - public static Item mp_thruster_15_kerosene_triple; - public static Item mp_thruster_15_solid; - public static Item mp_thruster_15_solid_hexdecuple; - public static Item mp_thruster_15_hydrogen; - public static Item mp_thruster_15_hydrogen_dual; - public static Item mp_thruster_15_balefire_short; - public static Item mp_thruster_15_balefire; - public static Item mp_thruster_15_balefire_large; - public static Item mp_thruster_15_balefire_large_rad; - public static Item mp_thruster_20_kerosene; - public static Item mp_thruster_20_kerosene_dual; - public static Item mp_thruster_20_kerosene_triple; - public static Item mp_thruster_20_solid; - public static Item mp_thruster_20_solid_multi; - public static Item mp_thruster_20_solid_multier; - - public static Item mp_stability_10_flat; - public static Item mp_stability_10_cruise; - public static Item mp_stability_10_space; - public static Item mp_stability_15_flat; - public static Item mp_stability_15_thin; - public static Item mp_stability_15_soyuz; - public static Item mp_stability_20_flat; - - public static Item mp_fuselage_10_kerosene; - public static Item mp_fuselage_10_kerosene_camo; - public static Item mp_fuselage_10_kerosene_desert; - public static Item mp_fuselage_10_kerosene_sky; - public static Item mp_fuselage_10_kerosene_flames; - public static Item mp_fuselage_10_kerosene_insulation; - public static Item mp_fuselage_10_kerosene_sleek; - public static Item mp_fuselage_10_kerosene_metal; - public static Item mp_fuselage_10_kerosene_taint; - - public static Item mp_fuselage_10_solid; - public static Item mp_fuselage_10_solid_flames; - public static Item mp_fuselage_10_solid_insulation; - public static Item mp_fuselage_10_solid_sleek; - public static Item mp_fuselage_10_solid_soviet_glory; - public static Item mp_fuselage_10_solid_cathedral; - public static Item mp_fuselage_10_solid_moonlit; - public static Item mp_fuselage_10_solid_battery; - public static Item mp_fuselage_10_solid_duracell; - - public static Item mp_fuselage_10_xenon; - public static Item mp_fuselage_10_xenon_bhole; - - public static Item mp_fuselage_10_long_kerosene; - public static Item mp_fuselage_10_long_kerosene_camo; - public static Item mp_fuselage_10_long_kerosene_desert; - public static Item mp_fuselage_10_long_kerosene_sky; - public static Item mp_fuselage_10_long_kerosene_flames; - public static Item mp_fuselage_10_long_kerosene_insulation; - public static Item mp_fuselage_10_long_kerosene_sleek; - public static Item mp_fuselage_10_long_kerosene_metal; - public static Item mp_fuselage_10_long_kerosene_taint; - public static Item mp_fuselage_10_long_kerosene_dash; - public static Item mp_fuselage_10_long_kerosene_vap; - - public static Item mp_fuselage_10_long_solid; - public static Item mp_fuselage_10_long_solid_flames; - public static Item mp_fuselage_10_long_solid_insulation; - public static Item mp_fuselage_10_long_solid_sleek; - public static Item mp_fuselage_10_long_solid_soviet_glory; - public static Item mp_fuselage_10_long_solid_bullet; - public static Item mp_fuselage_10_long_solid_silvermoonlight; - - public static Item mp_fuselage_10_15_kerosene; - public static Item mp_fuselage_10_15_solid; - public static Item mp_fuselage_10_15_hydrogen; - public static Item mp_fuselage_10_15_balefire; - - public static Item mp_fuselage_15_kerosene; - public static Item mp_fuselage_15_kerosene_camo; - public static Item mp_fuselage_15_kerosene_desert; - public static Item mp_fuselage_15_kerosene_sky; - public static Item mp_fuselage_15_kerosene_insulation; - public static Item mp_fuselage_15_kerosene_metal; - public static Item mp_fuselage_15_kerosene_decorated; - public static Item mp_fuselage_15_kerosene_steampunk; - public static Item mp_fuselage_15_kerosene_polite; - public static Item mp_fuselage_15_kerosene_blackjack; - public static Item mp_fuselage_15_kerosene_lambda; - public static Item mp_fuselage_15_kerosene_minuteman; - public static Item mp_fuselage_15_kerosene_pip; - public static Item mp_fuselage_15_kerosene_taint; - public static Item mp_fuselage_15_kerosene_yuck; - - public static Item mp_fuselage_15_solid; - public static Item mp_fuselage_15_solid_insulation; - public static Item mp_fuselage_15_solid_desh; - public static Item mp_fuselage_15_solid_soviet_glory; - public static Item mp_fuselage_15_solid_soviet_stank; - public static Item mp_fuselage_15_solid_faust; - public static Item mp_fuselage_15_solid_silvermoonlight; - public static Item mp_fuselage_15_solid_snowy; - public static Item mp_fuselage_15_solid_panorama; - public static Item mp_fuselage_15_solid_roses; - public static Item mp_fuselage_15_solid_mimi; - - public static Item mp_fuselage_15_hydrogen; - public static Item mp_fuselage_15_hydrogen_cathedral; - - public static Item mp_fuselage_15_balefire; - - public static Item mp_fuselage_15_20_kerosene; - public static Item mp_fuselage_15_20_kerosene_magnusson; - public static Item mp_fuselage_15_20_solid; - - public static Item mp_fuselage_20_kerosene; - - public static Item mp_warhead_10_he; - public static Item mp_warhead_10_incendiary; - public static Item mp_warhead_10_buster; - public static Item mp_warhead_10_nuclear; - public static Item mp_warhead_10_nuclear_large; - public static Item mp_warhead_10_taint; - public static Item mp_warhead_10_cloud; - public static Item mp_warhead_15_he; - public static Item mp_warhead_15_incendiary; - public static Item mp_warhead_15_nuclear; - public static Item mp_warhead_15_nuclear_shark; - public static Item mp_warhead_15_nuclear_mimi; - public static Item mp_warhead_15_boxcar; - public static Item mp_warhead_15_n2; - public static Item mp_warhead_15_balefire; - public static Item mp_warhead_15_turbine; - public static Item mp_warhead_20_he; - - public static Item mp_chip_1; - public static Item mp_chip_2; - public static Item mp_chip_3; - public static Item mp_chip_4; - public static Item mp_chip_5; - - public static Item missile_skin_camo; - public static Item missile_skin_desert; - public static Item missile_skin_flames; - public static Item missile_skin_manly_pink; - public static Item missile_skin_orange_insulation; - public static Item missile_skin_sleek; - public static Item missile_skin_soviet_glory; - public static Item missile_skin_soviet_stank; - public static Item missile_skin_metal; - - public static Item missile_custom; - - public static Item missile_soyuz; - public static Item missile_soyuz_lander; - public static Item sat_mapper; - public static Item sat_scanner; - public static Item sat_radar; - public static Item sat_laser; - public static Item sat_foeq; - public static Item sat_resonator; - public static Item sat_miner; - public static Item sat_lunar_miner; - public static Item sat_gerald; - public static Item sat_chip; - public static Item sat_interface; - public static Item sat_coord; - public static Item sat_designator; - public static Item sat_relay; - - public static ItemEnumMulti ammo_misc; - public static ItemEnumMulti ammo_shell; - public static ItemEnumMulti ammo_fireext; - - public static Item ammo_dgk; - public static Item ammo_arty; - public static Item ammo_himars; - - public static Item gun_b92; - public static Item gun_b92_ammo; - public static Item gun_fireext; - - public static Item gun_debug; - public static Item ammo_debug; - - public static Item gun_pepperbox; - public static Item gun_light_revolver; - public static Item gun_light_revolver_atlas; - public static Item gun_light_revolver_dani; - public static Item gun_henry; - public static Item gun_henry_lincoln; - public static Item gun_greasegun; - public static Item gun_maresleg; - public static Item gun_maresleg_akimbo; - public static Item gun_maresleg_broken; - public static Item gun_flaregun; - public static Item gun_heavy_revolver; - public static Item gun_heavy_revolver_lilmac; - public static Item gun_heavy_revolver_protege; - public static Item gun_carbine; - public static Item gun_am180; - public static Item gun_liberator; - public static Item gun_congolake; - public static Item gun_flamer; - public static Item gun_flamer_topaz; - public static Item gun_flamer_daybreaker; - public static Item gun_uzi; - public static Item gun_uzi_akimbo; - public static Item gun_spas12; - public static Item gun_panzerschreck; - public static Item gun_g3; - public static Item gun_g3_zebra; - public static Item gun_stinger; - public static Item gun_chemthrower; - public static Item gun_m2; - public static Item gun_autoshotgun; - public static Item gun_autoshotgun_shredder; - public static Item gun_autoshotgun_sexy; - public static Item gun_quadro; - public static Item gun_lag; - public static Item gun_minigun; - public static Item gun_minigun_dual; - public static Item gun_minigun_lacunae; - public static Item gun_missile_launcher; - public static Item gun_tesla_cannon; - public static Item gun_laser_pistol; - public static Item gun_laser_pistol_pew_pew; - public static Item gun_laser_pistol_morning_glory; - public static Item gun_stg77; - public static Item gun_tau; - public static Item gun_fatman; - public static Item gun_lasrifle; - public static Item gun_coilgun; - public static Item gun_hangman; - public static Item gun_mas36; - public static Item gun_bolter; - public static Item gun_folly; - public static Item gun_aberrator; - public static Item gun_aberrator_eott; - public static Item gun_double_barrel; - public static Item gun_double_barrel_sacred_dragon; - - public static Item gun_charge_thrower; - - public static Item ammo_standard; - public static Item ammo_secret; - - public static Item weapon_mod_test; - public static Item weapon_mod_generic; - public static Item weapon_mod_special; - public static Item weapon_mod_caliber; - - public static Item crucible; - - public static Item stick_dynamite; - public static Item stick_dynamite_fishing; - public static Item stick_tnt; - public static Item stick_semtex; - public static Item stick_c4; - - public static Item grenade_generic; - public static Item grenade_strong; - public static Item grenade_frag; - public static Item grenade_fire; - public static Item grenade_shrapnel; - public static Item grenade_cluster; - public static Item grenade_flare; - public static Item grenade_electric; - public static Item grenade_poison; - public static Item grenade_gas; - public static Item grenade_pulse; - public static Item grenade_plasma; - public static Item grenade_tau; - public static Item grenade_schrabidium; - public static Item grenade_lemon; - public static Item grenade_gascan; - public static Item grenade_kyiv; - public static Item grenade_mk2; - public static Item grenade_aschrab; - public static Item grenade_nuke; - public static Item grenade_nuclear; - public static Item grenade_zomg; - public static Item grenade_black_hole; - public static Item grenade_cloud; - public static Item grenade_pink_cloud; - public static Item ullapool_caber; - - public static Item grenade_if_generic; - public static Item grenade_if_he; - public static Item grenade_if_bouncy; - public static Item grenade_if_sticky; - public static Item grenade_if_impact; - public static Item grenade_if_incendiary; - public static Item grenade_if_toxic; - public static Item grenade_if_concussion; - public static Item grenade_if_brimstone; - public static Item grenade_if_mystery; - public static Item grenade_if_spark; - public static Item grenade_if_hopwire; - public static Item grenade_if_null; - - public static Item grenade_smart; - public static Item grenade_mirv; - public static Item grenade_breach; - public static Item grenade_burst; - - public static Item nuclear_waste_pearl; - - public static Item weaponized_starblaster_cell; - - public static Item bomb_waffle; - public static Item schnitzel_vegan; - public static Item cotton_candy; - public static Item apple_lead; - public static Item apple_schrabidium; - public static Item tem_flakes; - public static Item glowing_stew; - public static Item balefire_scrambled; - public static Item balefire_and_ham; - public static Item lemon; - public static Item definitelyfood; - public static Item loops; - public static Item loop_stew; - public static Item spongebob_macaroni; - public static Item fooditem; - public static Item twinkie; - public static Item static_sandwich; - public static Item pudding; - public static Item pancake; - public static Item nugget; - public static Item peas; - public static Item marshmallow; - public static Item cheese; - public static Item quesadilla; - public static Item glyphid_meat; - public static Item glyphid_meat_grilled; - public static Item egg_glyphid; - - public static Item med_ipecac; - public static Item med_ptsd; - public static Item med_schizophrenia; - - public static Item canteen_vodka; - public static Item canteen_fab; - - public static Item defuser; - public static Item reacher; - public static Item bismuth_tool; - public static Item meltdown_tool; - - public static Item flame_pony; - public static Item flame_conspiracy; - public static Item flame_politics; - public static Item flame_opinion; - - //public static Item gadget_explosive; - public static Item early_explosive_lenses; - public static Item explosive_lenses; - public static Item gadget_wireing; - public static Item gadget_core; - public static Item boy_igniter; - public static Item boy_propellant; - public static Item boy_bullet; - public static Item boy_target; - public static Item boy_shielding; - //public static Item man_explosive; - public static Item man_igniter; - public static Item man_core; - public static Item mike_core; - public static Item mike_deut; - public static Item mike_cooling_unit; - public static Item tsar_core; - public static Item fleija_igniter; - public static Item fleija_propellant; - public static Item fleija_core; - public static Item solinium_igniter; - public static Item solinium_propellant; - public static Item solinium_core; - public static Item n2_charge; - public static Item egg_balefire_shard; - public static Item egg_balefire; - - public static Item custom_tnt; - public static Item custom_nuke; - public static Item custom_hydro; - public static Item custom_amat; - public static Item custom_dirty; - public static Item custom_schrab; - public static Item custom_fall; - - public static Item battery_generic; - public static Item battery_advanced; - public static Item battery_lithium; - public static Item battery_schrabidium; - public static Item battery_spark; - public static Item battery_trixite; - public static Item battery_creative; - - public static Item battery_red_cell; - public static Item battery_red_cell_6; - public static Item battery_red_cell_24; - public static Item battery_advanced_cell; - public static Item battery_advanced_cell_4; - public static Item battery_advanced_cell_12; - public static Item battery_lithium_cell; - public static Item battery_lithium_cell_3; - public static Item battery_lithium_cell_6; - public static Item battery_schrabidium_cell; - public static Item battery_schrabidium_cell_2; - public static Item battery_schrabidium_cell_4; - public static Item battery_spark_cell_6; - public static Item battery_spark_cell_25; - public static Item battery_spark_cell_100; - public static Item battery_spark_cell_1000; - public static Item battery_spark_cell_2500; - public static Item battery_spark_cell_10000; - public static Item battery_spark_cell_power; - public static Item cube_power; - - public static Item battery_sc_uranium; - public static Item battery_sc_technetium; - public static Item battery_sc_plutonium; - public static Item battery_sc_polonium; - public static Item battery_sc_gold; - public static Item battery_sc_lead; - public static Item battery_sc_americium; - - public static Item battery_potato; - public static Item battery_potatos; - public static Item hev_battery; - public static Item fusion_core; - public static Item fusion_core_infinite; - public static Item energy_core; - public static Item fuse; - public static Item redcoil_capacitor; - public static Item euphemium_capacitor; - //by using these in crafting table recipes, i'm running the risk of making my recipes too greg-ian (which i don't like) - //in the event that i forget about the meaning of the word "sparingly", please throw a brick at my head - public static Item screwdriver; - public static Item screwdriver_desh; - public static Item hand_drill; - public static Item hand_drill_desh; - public static Item wrench_archineer; - public static Item chemistry_set; - public static Item chemistry_set_boron; - public static Item blowtorch; - public static Item acetylene_torch; - public static Item boltgun; - public static Item overfuse; - public static Item arc_electrode; - public static Item arc_electrode_burnt; - - public static Item upgrade_muffler; - - public static Item upgrade_template; - public static Item upgrade_speed_1; - public static Item upgrade_speed_2; - public static Item upgrade_speed_3; - public static Item upgrade_effect_1; - public static Item upgrade_effect_2; - public static Item upgrade_effect_3; - public static Item upgrade_power_1; - public static Item upgrade_power_2; - public static Item upgrade_power_3; - public static Item upgrade_fortune_1; - public static Item upgrade_fortune_2; - public static Item upgrade_fortune_3; - public static Item upgrade_afterburn_1; - public static Item upgrade_afterburn_2; - public static Item upgrade_afterburn_3; - public static Item upgrade_overdrive_1; - public static Item upgrade_overdrive_2; - public static Item upgrade_overdrive_3; - public static Item upgrade_radius; - public static Item upgrade_health; - public static Item upgrade_smelter; - public static Item upgrade_shredder; - public static Item upgrade_centrifuge; - public static Item upgrade_crystallizer; - public static Item upgrade_nullifier; - public static Item upgrade_screm; - public static Item upgrade_gc_speed; - public static Item upgrade_5g; - public static Item upgrade_stack; - public static Item upgrade_ejector; - - public static Item ingot_euphemium; - public static Item nugget_euphemium; - public static Item euphemium_helmet; - public static Item euphemium_plate; - public static Item euphemium_legs; - public static Item euphemium_boots; - public static Item apple_euphemium; - public static Item watch; - - public static Item goggles; - public static Item ashglasses; - public static Item gas_mask; - public static Item gas_mask_m65; - public static Item gas_mask_mono; - public static Item gas_mask_olde; - public static Item mask_rag; - public static Item mask_piss; - public static Item hat; - public static Item beta; - public static Item no9; - - public static Item t45_helmet; - public static Item t45_plate; - public static Item t45_legs; - public static Item t45_boots; - public static Item steamsuit_helmet; - public static Item steamsuit_plate; - public static Item steamsuit_legs; - public static Item steamsuit_boots; - public static Item dieselsuit_helmet; - public static Item dieselsuit_plate; - public static Item dieselsuit_legs; - public static Item dieselsuit_boots; - - public static Item chainsaw; - - public static Item schrabidium_helmet; - public static Item schrabidium_plate; - public static Item schrabidium_legs; - public static Item schrabidium_boots; - public static Item titanium_helmet; - public static Item titanium_plate; - public static Item titanium_legs; - public static Item titanium_boots; - public static Item steel_helmet; - public static Item steel_plate; - public static Item steel_legs; - public static Item steel_boots; - public static Item alloy_helmet; - public static Item alloy_plate; - public static Item alloy_legs; - public static Item alloy_boots; - public static Item cmb_helmet; - public static Item cmb_plate; - public static Item cmb_legs; - public static Item cmb_boots; - public static Item paa_plate; - public static Item paa_legs; - public static Item paa_boots; - public static Item asbestos_helmet; - public static Item asbestos_plate; - public static Item asbestos_legs; - public static Item asbestos_boots; - public static Item security_helmet; - public static Item security_plate; - public static Item security_legs; - public static Item security_boots; - public static Item cobalt_helmet; - public static Item cobalt_plate; - public static Item cobalt_legs; - public static Item cobalt_boots; - public static Item starmetal_helmet; - public static Item starmetal_plate; - public static Item starmetal_legs; - public static Item starmetal_boots; - public static Item dnt_helmet; - public static Item dnt_plate; - public static Item dnt_legs; - public static Item dnt_boots; - public static Item ajr_helmet; - public static Item ajr_plate; - public static Item ajr_legs; - public static Item ajr_boots; - public static Item ajro_helmet; - public static Item ajro_plate; - public static Item ajro_legs; - public static Item ajro_boots; - public static Item rpa_helmet; - public static Item rpa_plate; - public static Item rpa_legs; - public static Item rpa_boots; - public static Item bismuth_helmet; - public static Item bismuth_plate; - public static Item bismuth_legs; - public static Item bismuth_boots; - public static Item bj_helmet; - public static Item bj_plate; - public static Item bj_plate_jetpack; - public static Item bj_legs; - public static Item bj_boots; - public static Item envsuit_helmet; - public static Item envsuit_plate; - public static Item envsuit_legs; - public static Item envsuit_boots; - public static Item hev_helmet; - public static Item hev_plate; - public static Item hev_legs; - public static Item hev_boots; - public static Item fau_helmet; - public static Item fau_plate; - public static Item fau_legs; - public static Item fau_boots; - public static Item dns_helmet; - public static Item dns_plate; - public static Item dns_legs; - public static Item dns_boots; - public static Item taurun_helmet; - public static Item taurun_plate; - public static Item taurun_legs; - public static Item taurun_boots; - public static Item trenchmaster_helmet; - public static Item trenchmaster_plate; - public static Item trenchmaster_legs; - public static Item trenchmaster_boots; - public static Item zirconium_legs; - public static Item robes_helmet; - public static Item robes_plate; - public static Item robes_legs; - public static Item robes_boots; - - public static Item jetpack_boost; - public static Item jetpack_break; - public static Item jetpack_fly; - public static Item jetpack_vector; - public static Item wings_limp; - public static Item wings_murk; - - public static Item jackt; - public static Item jackt2; - - public static Item schrabidium_sword; - public static Item schrabidium_pickaxe; - public static Item schrabidium_axe; - public static Item schrabidium_shovel; - public static Item schrabidium_hoe; - public static Item titanium_sword; - public static Item titanium_pickaxe; - public static Item titanium_axe; - public static Item titanium_shovel; - public static Item titanium_hoe; - public static Item steel_sword; - public static Item steel_pickaxe; - public static Item steel_axe; - public static Item steel_shovel; - public static Item steel_hoe; - public static Item alloy_sword; - public static Item alloy_pickaxe; - public static Item alloy_axe; - public static Item alloy_shovel; - public static Item alloy_hoe; - public static Item cmb_sword; - public static Item cmb_pickaxe; - public static Item cmb_axe; - public static Item cmb_shovel; - public static Item cmb_hoe; - public static Item elec_sword; - public static Item elec_pickaxe; - public static Item elec_axe; - public static Item elec_shovel; - public static Item desh_sword; - public static Item desh_pickaxe; - public static Item desh_axe; - public static Item desh_shovel; - public static Item desh_hoe; - public static Item cobalt_sword; - public static Item cobalt_pickaxe; - public static Item cobalt_axe; - public static Item cobalt_shovel; - public static Item cobalt_hoe; - public static Item cobalt_decorated_sword; - public static Item cobalt_decorated_pickaxe; - public static Item cobalt_decorated_axe; - public static Item cobalt_decorated_shovel; - public static Item cobalt_decorated_hoe; - public static Item starmetal_sword; - public static Item starmetal_pickaxe; - public static Item starmetal_axe; - public static Item starmetal_shovel; - public static Item starmetal_hoe; - public static Item smashing_hammer; - public static Item centri_stick; - public static Item drax; - public static Item drax_mk2; - public static Item drax_mk3; - public static Item bismuth_pickaxe; - public static Item bismuth_axe; - public static Item volcanic_pickaxe; - public static Item volcanic_axe; - public static Item chlorophyte_pickaxe; - public static Item chlorophyte_axe; - public static Item mese_pickaxe; - public static Item mese_axe; - public static Item dnt_sword; - public static Item dwarven_pickaxe; - - public static Item meteorite_sword; - public static Item meteorite_sword_seared; - public static Item meteorite_sword_reforged; - public static Item meteorite_sword_hardened; - public static Item meteorite_sword_alloyed; - public static Item meteorite_sword_machined; - public static Item meteorite_sword_treated; - public static Item meteorite_sword_etched; - public static Item meteorite_sword_bred; - public static Item meteorite_sword_irradiated; - public static Item meteorite_sword_fused; - public static Item meteorite_sword_baleful; - - public static Item matchstick; - public static Item balefire_and_steel; - - public static Item mask_of_infamy; - - public static Item schrabidium_hammer; - public static Item shimmer_sledge; - public static Item shimmer_axe; - public static Item bottle_opener; - public static Item pch; //for compat please do not hit me - public static Item wood_gavel; - public static Item lead_gavel; - public static Item diamond_gavel; - public static Item mese_gavel; - - public static Item crowbar; - - public static Item wrench; - public static Item wrench_flipped; - public static Item memespoon; - - public static Item multitool_hit; - public static Item multitool_dig; - public static Item multitool_silk; - public static Item multitool_ext; - public static Item multitool_miner; - public static Item multitool_beam; - public static Item multitool_sky; - public static Item multitool_mega; - public static Item multitool_joule; - public static Item multitool_decon; - - public static Item saw; - public static Item bat; - public static Item bat_nail; - public static Item golf_club; - public static Item pipe_rusty; - public static Item pipe_lead; - public static Item reer_graar; - public static Item stopsign; - public static Item sopsign; - public static Item chernobylsign; - - public static Item crystal_horn; - public static Item crystal_charred; - - public static Item attachment_mask; - public static Item attachment_mask_mono; - public static Item back_tesla; - public static Item servo_set; - public static Item servo_set_desh; - public static Item pads_rubber; - public static Item pads_slime; - public static Item pads_static; - public static Item cladding_paint; - public static Item cladding_rubber; - public static Item cladding_lead; - public static Item cladding_desh; - public static Item cladding_ghiorsium; - public static Item cladding_iron; - public static Item cladding_obsidian; - public static Item insert_kevlar; - public static Item insert_sapi; - public static Item insert_esapi; - public static Item insert_xsapi; - public static Item insert_steel; - public static Item insert_du; - public static Item insert_polonium; - public static Item insert_ghiorsium; - public static Item insert_era; - public static Item insert_yharonite; - public static Item insert_doxium; - public static Item armor_polish; - public static Item bandaid; - public static Item serum; - public static Item quartz_plutonium; - public static Item morning_glory; - public static Item lodestone; - public static Item horseshoe_magnet; - public static Item industrial_magnet; - public static Item bathwater; - public static Item bathwater_mk2; - public static Item spider_milk; - public static Item ink; - public static Item heart_piece; - public static Item heart_container; - public static Item heart_booster; - public static Item heart_fab; - public static Item black_diamond; - public static Item wd40; - public static Item scrumpy; - public static Item wild_p; - public static Item fabsols_vodka; - public static Item shackles; - public static Item injector_5htp; - public static Item injector_knife; - public static Item medal_liquidator; - public static Item bottled_cloud; - public static Item protection_charm; - public static Item meteor_charm; - public static Item neutrino_lens; - public static Item gas_tester; - public static Item defuser_gold; - public static Item ballistic_gauntlet; - public static Item night_vision; - public static Item card_aos; - public static Item card_qos; - public static Item australium_iii; - public static Item armor_battery; - public static Item armor_battery_mk2; - public static Item armor_battery_mk3; - - public static Item hazmat_helmet; - public static Item hazmat_plate; - public static Item hazmat_legs; - public static Item hazmat_boots; - public static Item hazmat_helmet_red; - public static Item hazmat_plate_red; - public static Item hazmat_legs_red; - public static Item hazmat_boots_red; - public static Item hazmat_helmet_grey; - public static Item hazmat_plate_grey; - public static Item hazmat_legs_grey; - public static Item hazmat_boots_grey; - public static Item liquidator_helmet; - public static Item liquidator_plate; - public static Item liquidator_legs; - public static Item liquidator_boots; - - public static Item hazmat_paa_helmet; - public static Item hazmat_paa_plate; - public static Item hazmat_paa_legs; - public static Item hazmat_paa_boots; - - public static Item wand; - public static Item wand_s; - public static Item wand_d; - - public static Item structure_single; - public static Item structure_solid; - public static Item structure_pattern; - public static Item structure_randomized; - public static Item structure_randomly; - public static Item structure_custommachine; - - public static Item rod_of_discord; - - public static Item cape_radiation; - public static Item cape_gasmask; - public static Item cape_schrabidium; - public static Item cape_hidden; - - public static Item nuke_starter_kit; - public static Item nuke_advanced_kit; - public static Item nuke_commercially_kit; - public static Item nuke_electric_kit; - public static Item gadget_kit; - public static Item boy_kit; - public static Item man_kit; - public static Item mike_kit; - public static Item tsar_kit; - public static Item multi_kit; - public static Item custom_kit; - public static Item grenade_kit; - public static Item fleija_kit; - public static Item prototype_kit; - public static Item missile_kit; - public static Item t45_kit; - public static Item euphemium_kit; - public static Item solinium_kit; - public static Item hazmat_kit; - public static Item hazmat_red_kit; - public static Item hazmat_grey_kit; - public static Item kit_custom; - - public static Item legacy_toolbox; - public static Item toolbox; - - public static Item loot_10; - public static Item loot_15; - public static Item loot_misc; - - public static Item ammo_container; - - public static Item igniter; - public static Item detonator; - public static Item detonator_multi; - public static Item detonator_laser; - public static Item detonator_deadman; - public static Item detonator_de; - public static Item bomb_caller; - public static Item meteor_remote; - public static Item anchor_remote; - public static Item remote; - //public static Item turret_control; - public static Item turret_chip; - //public static Item turret_biometry; - - public static Item spawn_chopper; - public static Item spawn_worm; - public static Item spawn_ufo; - public static Item spawn_duck; - - public static Item key; - public static Item key_red; - public static Item key_red_cracked; - public static Item key_kit; - public static Item key_fake; - public static Item pin; - public static Item padlock_rusty; - public static Item padlock; - public static Item padlock_reinforced; - public static Item padlock_unbreakable; - - public static Item mech_key; - - public static Item bucket_mud; - public static Item bucket_acid; - public static Item bucket_toxic; - public static Item bucket_schrabidic_acid; - public static Item bucket_sulfuric_acid; - - public static Item door_metal; - public static Item door_office; - public static Item door_bunker; - public static Item door_red; - - public static Item sliding_blast_door_skin; - - public static Item record_lc; - public static Item record_ss; - public static Item record_vc; - public static Item record_glass; - - public static Item book_guide; - public static Item book_lore; - public static Item holotape_image; - public static Item holotape_damaged; - public static Item clay_tablet; - - public static Item polaroid; - public static Item glitch; - public static Item letter; - public static Item book_secret; - public static Item book_of_; - public static Item page_of_; - public static Item book_lemegeton; - public static Item burnt_bark; - - public static Item chlorine1; - public static Item chlorine2; - public static Item chlorine3; - public static Item chlorine4; - public static Item chlorine5; - public static Item chlorine6; - public static Item chlorine7; - public static Item chlorine8; - public static Item pc1; - public static Item pc2; - public static Item pc3; - public static Item pc4; - public static Item pc5; - public static Item pc6; - public static Item pc7; - public static Item pc8; - public static Item cloud1; - public static Item cloud2; - public static Item cloud3; - public static Item cloud4; - public static Item cloud5; - public static Item cloud6; - public static Item cloud7; - public static Item cloud8; - public static Item orange1; - public static Item orange2; - public static Item orange3; - public static Item orange4; - public static Item orange5; - public static Item orange6; - public static Item orange7; - public static Item orange8; - public static Item nothing; - - public static Item achievement_icon; - public static Item bob_metalworks; - public static Item bob_assembly; - public static Item bob_chemistry; - public static Item bob_oil; - public static Item bob_nuclear; - - public static Item mysteryshovel; - public static Item memory; - - public static Item conveyor_wand; - - public static void initializeItem() { - - redstone_sword = new RedstoneSword(ToolMaterial.STONE).setUnlocalizedName("redstone_sword").setCreativeTab(CreativeTabs.tabCombat).setTextureName(RefStrings.MODID + ":redstone_sword"); - big_sword = new BigSword(ToolMaterial.EMERALD).setUnlocalizedName("big_sword").setCreativeTab(CreativeTabs.tabCombat).setTextureName(RefStrings.MODID + ":big_sword"); - - test_nuke_igniter = new Item().setUnlocalizedName("test_nuke_igniter").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_igniter"); - test_nuke_propellant = new Item().setUnlocalizedName("test_nuke_propellant").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_propellant"); - test_nuke_tier1_shielding = new Item().setUnlocalizedName("test_nuke_tier1_shielding").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_shielding"); - test_nuke_tier2_shielding = new Item().setUnlocalizedName("test_nuke_tier2_shielding").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_shielding"); - test_nuke_tier1_bullet = new Item().setUnlocalizedName("test_nuke_tier1_bullet").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_bullet"); - test_nuke_tier2_bullet = new Item().setUnlocalizedName("test_nuke_tier2_bullet").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_bullet"); - test_nuke_tier1_target = new Item().setUnlocalizedName("test_nuke_tier1_target").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_target"); - test_nuke_tier2_target = new Item().setUnlocalizedName("test_nuke_tier2_target").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_target"); - - ingot_th232 = new Item().setUnlocalizedName("ingot_th232").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_th232"); - ingot_uranium = new Item().setUnlocalizedName("ingot_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_uranium"); - ingot_u233 = new Item().setUnlocalizedName("ingot_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_u233"); - ingot_u235 = new Item().setUnlocalizedName("ingot_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_u235"); - ingot_u238 = new Item().setUnlocalizedName("ingot_u238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_u238"); - ingot_u238m2 = new ItemUnstable(350, 200).setUnlocalizedName("ingot_u238m2").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ingot_u238m2"); - ingot_plutonium = new Item().setUnlocalizedName("ingot_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_plutonium"); - ingot_pu238 = new Item().setUnlocalizedName("ingot_pu238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pu238"); - ingot_pu239 = new Item().setUnlocalizedName("ingot_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pu239"); - ingot_pu240 = new Item().setUnlocalizedName("ingot_pu240").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pu240"); - ingot_pu241 = new Item().setUnlocalizedName("ingot_pu241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pu241"); - ingot_pu_mix = new Item().setUnlocalizedName("ingot_pu_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pu_mix"); - ingot_am241 = new Item().setUnlocalizedName("ingot_am241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_am241"); - ingot_am242 = new Item().setUnlocalizedName("ingot_am242").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_am242"); - ingot_am_mix = new Item().setUnlocalizedName("ingot_am_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_am_mix"); - ingot_neptunium = new ItemCustomLore().setUnlocalizedName("ingot_neptunium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_neptunium"); - ingot_polonium = new Item().setUnlocalizedName("ingot_polonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_polonium"); - ingot_technetium = new Item().setUnlocalizedName("ingot_technetium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_technetium"); - ingot_co60 = new Item().setUnlocalizedName("ingot_co60").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_co60"); - ingot_sr90 = new Item().setUnlocalizedName("ingot_sr90").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_sr90"); - ingot_au198 = new Item().setUnlocalizedName("ingot_au198").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_au198"); - ingot_pb209 = new Item().setUnlocalizedName("ingot_pb209").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pb209"); - ingot_ra226 = new Item().setUnlocalizedName("ingot_ra226").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_ra226"); - ingot_titanium = new Item().setUnlocalizedName("ingot_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_titanium"); - ingot_cobalt = new Item().setUnlocalizedName("ingot_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cobalt"); - ingot_boron = new Item().setUnlocalizedName("ingot_boron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_boron"); - ingot_graphite = new Item().setUnlocalizedName("ingot_graphite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_graphite"); - ingot_firebrick = new Item().setUnlocalizedName("ingot_firebrick").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_firebrick"); - ingot_smore = new ItemFood(10, 20F, false).setUnlocalizedName("ingot_smore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_smore"); - sulfur = new Item().setUnlocalizedName("sulfur").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sulfur"); - nitra = new Item().setUnlocalizedName("nitra").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nitra"); - nitra_small = new Item().setUnlocalizedName("nitra_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nitra_small"); - - ingot_uranium_fuel = new Item().setUnlocalizedName("ingot_uranium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_uranium_fuel"); - ingot_plutonium_fuel = new Item().setUnlocalizedName("ingot_plutonium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_plutonium_fuel"); - ingot_neptunium_fuel = new Item().setUnlocalizedName("ingot_neptunium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_neptunium_fuel"); - ingot_mox_fuel = new Item().setUnlocalizedName("ingot_mox_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_mox_fuel"); - ingot_americium_fuel = new Item().setUnlocalizedName("ingot_americium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_americium_fuel"); - ingot_schrabidium_fuel = new Item().setUnlocalizedName("ingot_schrabidium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_schrabidium_fuel"); - ingot_thorium_fuel = new Item().setUnlocalizedName("ingot_thorium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_thorium_fuel"); - nugget_uranium_fuel = new Item().setUnlocalizedName("nugget_uranium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_uranium_fuel"); - nugget_thorium_fuel = new Item().setUnlocalizedName("nugget_thorium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_thorium_fuel"); - nugget_plutonium_fuel = new Item().setUnlocalizedName("nugget_plutonium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_plutonium_fuel"); - nugget_neptunium_fuel = new Item().setUnlocalizedName("nugget_neptunium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_neptunium_fuel"); - nugget_mox_fuel = new Item().setUnlocalizedName("nugget_mox_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_mox_fuel"); - nugget_americium_fuel = new Item().setUnlocalizedName("nugget_americium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_americium_fuel"); - nugget_schrabidium_fuel = new Item().setUnlocalizedName("nugget_schrabidium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_schrabidium_fuel"); - ingot_advanced_alloy = new Item().setUnlocalizedName("ingot_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_advanced_alloy"); - ingot_tcalloy = new Item().setUnlocalizedName("ingot_tcalloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_tcalloy"); - ingot_cdalloy = new Item().setUnlocalizedName("ingot_cdalloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cdalloy"); - ingot_bismuth_bronze = new Item().setUnlocalizedName("ingot_bismuth_bronze").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_bismuth_bronze"); - ingot_arsenic_bronze = new Item().setUnlocalizedName("ingot_arsenic_bronze").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_arsenic_bronze"); - ingot_bscco = new Item().setUnlocalizedName("ingot_bscco").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_bscco"); - - niter = new Item().setUnlocalizedName("niter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":salpeter"); - ingot_copper = new Item().setUnlocalizedName("ingot_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_copper"); - ingot_red_copper = new Item().setUnlocalizedName("ingot_red_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_red_copper"); - ingot_tungsten = new Item().setUnlocalizedName("ingot_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_tungsten"); - ingot_aluminium = new Item().setUnlocalizedName("ingot_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_aluminium"); - fluorite = new Item().setUnlocalizedName("fluorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fluorite"); - ingot_beryllium = new Item().setUnlocalizedName("ingot_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_beryllium"); - ingot_steel = new Item().setUnlocalizedName("ingot_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_steel"); - plate_steel = new Item().setUnlocalizedName("plate_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_steel"); - plate_iron = new Item().setUnlocalizedName("plate_iron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_iron"); - ingot_lead = new Item().setUnlocalizedName("ingot_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_lead"); - plate_lead = new Item().setUnlocalizedName("plate_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_lead"); - plate_dura_steel = new Item().setUnlocalizedName("plate_dura_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_dura_steel"); - ingot_schraranium = new ItemSchraranium().setUnlocalizedName("ingot_schraranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_schraranium"); - ingot_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("ingot_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_schrabidium"); - ingot_schrabidate = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("ingot_schrabidate").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_schrabidate"); - plate_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("plate_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_schrabidium"); - plate_copper = new Item().setUnlocalizedName("plate_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_copper"); - plate_gold = new Item().setUnlocalizedName("plate_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_gold"); - plate_advanced_alloy = new Item().setUnlocalizedName("plate_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_advanced_alloy"); - lithium = new Item().setUnlocalizedName("lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":lithium"); - ingot_zirconium = new Item().setUnlocalizedName("ingot_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_zirconium"); - ingot_semtex = new ItemLemon(4, 5, true).setUnlocalizedName("ingot_semtex").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_semtex"); - ingot_c4 = new Item().setUnlocalizedName("ingot_c4").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_c4"); - ingot_phosphorus = new Item().setUnlocalizedName("ingot_phosphorus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_phosphorus"); - coil_advanced_alloy = new Item().setUnlocalizedName("coil_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_advanced_alloy"); - coil_advanced_torus = new Item().setUnlocalizedName("coil_advanced_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_advanced_torus"); - ingot_magnetized_tungsten = new Item().setUnlocalizedName("ingot_magnetized_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_magnetized_tungsten"); - ingot_combine_steel = new ItemCustomLore().setUnlocalizedName("ingot_combine_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_combine_steel"); - plate_mixed = new Item().setUnlocalizedName("plate_mixed").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_mixed"); - plate_paa = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("plate_paa").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_paa"); - pipes_steel = new Item().setUnlocalizedName("pipes_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pipes_steel"); - drill_titanium = new Item().setUnlocalizedName("drill_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":drill_titanium"); - plate_dalekanium = new Item().setUnlocalizedName("plate_dalekanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_dalekanium"); - plate_euphemium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("plate_euphemium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_euphemium"); - bolt = new ItemAutogen(MaterialShapes.BOLT).oun("boltntm").setUnlocalizedName("bolt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bolt"); - bolt_spike = new ItemCustomLore().setUnlocalizedName("bolt_spike").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bolt_spike"); - plate_polymer = new Item().setUnlocalizedName("plate_polymer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_polymer"); - plate_kevlar = new Item().setUnlocalizedName("plate_kevlar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_kevlar"); - plate_dineutronium = new Item().setUnlocalizedName("plate_dineutronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_dineutronium"); - plate_desh = new Item().setUnlocalizedName("plate_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_desh"); - plate_bismuth = new ItemCustomLore().setUnlocalizedName("plate_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_bismuth"); - ingot_solinium = new Item().setUnlocalizedName("ingot_solinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_solinium"); - nugget_solinium = new Item().setUnlocalizedName("nugget_solinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_solinium"); - photo_panel = new Item().setUnlocalizedName("photo_panel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":photo_panel"); - sat_base = new Item().setUnlocalizedName("sat_base").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_base"); - thruster_nuclear = new Item().setUnlocalizedName("thruster_nuclear").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_nuclear"); - safety_fuse = new Item().setUnlocalizedName("safety_fuse").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":safety_fuse"); - part_generic = new ItemGenericPart().setUnlocalizedName("part_generic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_generic"); - item_secret = new ItemEnumMulti(EnumSecretType.class, true, true).setUnlocalizedName("item_secret").setCreativeTab(null).setTextureName(RefStrings.MODID + ":item_secret"); - ingot_metal = new ItemEnumMulti(EnumIngotMetal.class, true, true).setUnlocalizedName("ingot_metal").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ingot_metal"); - chemical_dye = new ItemChemicalDye().setUnlocalizedName("chemical_dye").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chemical_dye"); - crayon = new ItemCrayon().setUnlocalizedName("crayon").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crayon"); - - undefined = new ItemCustomLore().setUnlocalizedName("undefined").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":undefined"); - - billet_uranium = new Item().setUnlocalizedName("billet_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_uranium"); - billet_u233 = new Item().setUnlocalizedName("billet_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_u233"); - billet_u235 = new Item().setUnlocalizedName("billet_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_u235"); - billet_u238 = new Item().setUnlocalizedName("billet_u238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_u238"); - billet_th232 = new Item().setUnlocalizedName("billet_th232").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_th232"); - billet_plutonium = new Item().setUnlocalizedName("billet_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_plutonium"); - billet_pu238 = new Item().setUnlocalizedName("billet_pu238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu238"); - billet_pu239 = new Item().setUnlocalizedName("billet_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu239"); - billet_pu240 = new Item().setUnlocalizedName("billet_pu240").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu240"); - billet_pu241 = new Item().setUnlocalizedName("billet_pu241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu241"); - billet_pu_mix = new Item().setUnlocalizedName("billet_pu_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu_mix"); - billet_am241 = new Item().setUnlocalizedName("billet_am241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_am241"); - billet_am242 = new Item().setUnlocalizedName("billet_am242").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_am242"); - billet_am_mix = new Item().setUnlocalizedName("billet_am_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_am_mix"); - billet_neptunium = new Item().setUnlocalizedName("billet_neptunium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_neptunium"); - billet_polonium = new Item().setUnlocalizedName("billet_polonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_polonium"); - billet_technetium = new Item().setUnlocalizedName("billet_technetium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_technetium"); - billet_cobalt = new Item().setUnlocalizedName("billet_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_cobalt"); - billet_co60 = new Item().setUnlocalizedName("billet_co60").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_co60"); - billet_sr90 = new Item().setUnlocalizedName("billet_sr90").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_sr90"); - billet_au198 = new Item().setUnlocalizedName("billet_au198").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_au198"); - billet_pb209 = new Item().setUnlocalizedName("billet_pb209").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pb209"); - billet_ra226 = new Item().setUnlocalizedName("billet_ra226").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_ra226"); - billet_actinium = new Item().setUnlocalizedName("billet_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_actinium"); - billet_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("billet_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_schrabidium"); - billet_solinium = new Item().setUnlocalizedName("billet_solinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_solinium"); - billet_gh336 = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("billet_gh336").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_gh336"); - billet_australium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("billet_australium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_australium"); - billet_australium_lesser = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("billet_australium_lesser").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_australium_lesser"); - billet_australium_greater = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("billet_australium_greater").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_australium_greater"); - billet_uranium_fuel = new Item().setUnlocalizedName("billet_uranium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_uranium_fuel"); - billet_thorium_fuel = new Item().setUnlocalizedName("billet_thorium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_thorium_fuel"); - billet_plutonium_fuel = new Item().setUnlocalizedName("billet_plutonium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_plutonium_fuel"); - billet_neptunium_fuel = new Item().setUnlocalizedName("billet_neptunium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_neptunium_fuel"); - billet_mox_fuel = new Item().setUnlocalizedName("billet_mox_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_mox_fuel"); - billet_americium_fuel = new Item().setUnlocalizedName("billet_americium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_americium_fuel"); - billet_les = new Item().setUnlocalizedName("billet_les").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_les"); - billet_schrabidium_fuel = new Item().setUnlocalizedName("billet_schrabidium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_schrabidium_fuel"); - billet_hes = new Item().setUnlocalizedName("billet_hes").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_hes"); - billet_po210be = new Item().setUnlocalizedName("billet_po210be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_po210be"); - billet_ra226be = new Item().setUnlocalizedName("billet_ra226be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_ra226be"); - billet_pu238be = new Item().setUnlocalizedName("billet_pu238be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu238be"); - billet_beryllium = new Item().setUnlocalizedName("billet_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_beryllium"); - billet_bismuth = new Item().setUnlocalizedName("billet_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_bismuth"); - billet_zirconium = new Item().setUnlocalizedName("billet_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_zirconium"); - billet_yharonite = new Item().setUnlocalizedName("billet_yharonite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_yharonite"); - billet_balefire_gold = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("billet_balefire_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_balefire_gold"); - billet_flashlead = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("billet_flashlead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_flashlead"); - billet_zfb_bismuth = new Item().setUnlocalizedName("billet_zfb_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_zfb_bismuth"); - billet_zfb_pu241 = new Item().setUnlocalizedName("billet_zfb_pu241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_zfb_pu241"); - billet_zfb_am_mix = new Item().setUnlocalizedName("billet_zfb_am_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_zfb_am_mix"); - billet_nuclear_waste = new Item().setUnlocalizedName("billet_nuclear_waste").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_nuclear_waste"); - - ball_resin = new ItemCustomLore().setUnlocalizedName("ball_resin").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_resin"); - ingot_dura_steel = new ItemCustomLore().setUnlocalizedName("ingot_dura_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_dura_steel"); - ingot_polymer = new ItemCustomLore().setUnlocalizedName("ingot_polymer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_polymer"); - ingot_bakelite = new ItemCustomLore().setUnlocalizedName("ingot_bakelite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_bakelite"); - ingot_biorubber = new ItemCustomLore().setUnlocalizedName("ingot_biorubber").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_biorubber"); - ingot_rubber = new ItemCustomLore().setUnlocalizedName("ingot_rubber").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_rubber"); - ingot_pc = new ItemCustomLore().setUnlocalizedName("ingot_pc").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pc"); - ingot_pvc = new ItemCustomLore().setUnlocalizedName("ingot_pvc").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pvc"); - ingot_desh = new ItemCustomLore().setUnlocalizedName("ingot_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_desh"); - nugget_desh = new ItemCustomLore().setUnlocalizedName("nugget_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_desh"); - ingot_dineutronium = new ItemCustomLore().setUnlocalizedName("ingot_dineutronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_dineutronium"); - nugget_dineutronium = new ItemCustomLore().setUnlocalizedName("nugget_dineutronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_dineutronium"); - powder_dineutronium = new ItemCustomLore().setUnlocalizedName("powder_dineutronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_dineutronium"); - ingot_starmetal = new ItemStarmetal().setUnlocalizedName("ingot_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_starmetal"); - ingot_gunmetal = new Item().setUnlocalizedName("ingot_gunmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_gunmetal"); - plate_gunmetal = new Item().setUnlocalizedName("plate_gunmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_gunmetal"); - ingot_weaponsteel = new Item().setUnlocalizedName("ingot_weaponsteel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_gunsteel"); - plate_weaponsteel = new Item().setUnlocalizedName("plate_weaponsteel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_gunsteel"); - ingot_saturnite = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("ingot_saturnite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_saturnite"); - plate_saturnite = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("plate_saturnite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_saturnite"); - ingot_ferrouranium = new ItemCustomLore().setUnlocalizedName("ingot_ferrouranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_ferrouranium"); - ingot_fiberglass = new ItemCustomLore().setUnlocalizedName("ingot_fiberglass").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_fiberglass"); - ingot_asbestos = new ItemCustomLore().setUnlocalizedName("ingot_asbestos").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_asbestos"); - powder_asbestos = new ItemCustomLore().setUnlocalizedName("powder_asbestos").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_asbestos"); - ingot_electronium = new ItemCustomLore().setUnlocalizedName("ingot_electronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_electronium"); - nugget_zirconium = new ItemCustomLore().setUnlocalizedName("nugget_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_zirconium"); - nugget_mercury = new Item().setUnlocalizedName("nugget_mercury_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_mercury_tiny"); - ingot_mercury = new ItemCustomLore().setUnlocalizedName("nugget_mercury").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_mercury"); - bottle_mercury = new ItemCustomLore().setUnlocalizedName("bottle_mercury").setContainerItem(Items.glass_bottle).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bottle_mercury"); - ingot_calcium = new Item().setUnlocalizedName("ingot_calcium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_calcium"); - powder_calcium = new Item().setUnlocalizedName("powder_calcium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_calcium"); - ingot_cadmium = new Item().setUnlocalizedName("ingot_cadmium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cadmium"); - powder_cadmium = new Item().setUnlocalizedName("powder_cadmium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cadmium"); - powder_bismuth = new Item().setUnlocalizedName("powder_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_bismuth"); - ingot_mud = new Item().setUnlocalizedName("ingot_mud").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_mud"); - ingot_cft = new Item().setUnlocalizedName("ingot_cft").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cft"); - - ore_byproduct = new ItemByproduct().setUnlocalizedName("ore_byproduct").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":byproduct"); - - ore_bedrock = new ItemBedrockOre().setUnlocalizedName("ore_bedrock").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_bedrock"); - ore_centrifuged = new ItemBedrockOre().setUnlocalizedName("ore_centrifuged").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_centrifuged"); - ore_cleaned = new ItemBedrockOre().setUnlocalizedName("ore_cleaned").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_cleaned"); - ore_separated = new ItemBedrockOre().setUnlocalizedName("ore_separated").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_separated"); - ore_purified = new ItemBedrockOre().setUnlocalizedName("ore_purified").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_purified"); - ore_nitrated = new ItemBedrockOre().setUnlocalizedName("ore_nitrated").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_nitrated"); - ore_nitrocrystalline = new ItemBedrockOre().setUnlocalizedName("ore_nitrocrystalline").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_nitrocrystalline"); - ore_deepcleaned = new ItemBedrockOre().setUnlocalizedName("ore_deepcleaned").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_deepcleaned"); - ore_seared = new ItemBedrockOre().setUnlocalizedName("ore_seared").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_seared"); - ore_enriched = new ItemBedrockOre().setUnlocalizedName("ore_enriched").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_enriched"); - bedrock_ore_base = new ItemBedrockOreBase().setUnlocalizedName("bedrock_ore_base").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_new"); - bedrock_ore = new ItemBedrockOreNew().setUnlocalizedName("bedrock_ore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_new"); - bedrock_ore_fragment = new ItemAutogen(MaterialShapes.FRAGMENT).aot(Mats.MAT_BISMUTH, "bedrock_ore_fragment_bismuth").setUnlocalizedName("bedrock_ore_fragment").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_fragment"); - - ingot_lanthanium = new ItemCustomLore().setUnlocalizedName("ingot_lanthanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_lanthanium"); - ingot_actinium = new ItemCustomLore().setUnlocalizedName("ingot_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_actinium"); - - ingot_meteorite = new ItemHot(200).setUnlocalizedName("ingot_meteorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_meteorite"); - ingot_meteorite_forged = new ItemHot(200).setUnlocalizedName("ingot_meteorite_forged").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_meteorite_forged"); - blade_meteorite = new ItemHot(200).setUnlocalizedName("blade_meteorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":blade_meteorite"); - ingot_steel_dusted = new ItemHotDusted(200).setUnlocalizedName("ingot_steel_dusted").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_steel_dusted"); - ingot_chainsteel = new ItemHot(100).setUnlocalizedName("ingot_chainsteel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_chainsteel"); - - plate_armor_titanium = new Item().setUnlocalizedName("plate_armor_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_titanium"); - plate_armor_ajr = new Item().setUnlocalizedName("plate_armor_ajr").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_ajr"); - plate_armor_hev = new Item().setUnlocalizedName("plate_armor_hev").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_hev"); - plate_armor_lunar = new Item().setUnlocalizedName("plate_armor_lunar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_lunar"); - plate_armor_fau = new Item().setUnlocalizedName("plate_armor_fau").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_fau"); - plate_armor_dnt = new Item().setUnlocalizedName("plate_armor_dnt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_dnt"); - - oil_tar = new ItemEnumMulti(EnumTarType.class, true, true).setUnlocalizedName("oil_tar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":oil_tar"); - solid_fuel = new Item().setUnlocalizedName("solid_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel"); - solid_fuel_presto = new Item().setUnlocalizedName("solid_fuel_presto").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel_presto"); - solid_fuel_presto_triplet = new Item().setUnlocalizedName("solid_fuel_presto_triplet").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel_presto_triplet"); - solid_fuel_bf = new Item().setUnlocalizedName("solid_fuel_bf").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel_bf"); - solid_fuel_presto_bf = new Item().setUnlocalizedName("solid_fuel_presto_bf").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel_presto_bf"); - solid_fuel_presto_triplet_bf = new Item().setUnlocalizedName("solid_fuel_presto_triplet_bf").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel_presto_triplet_bf"); - rocket_fuel = new Item().setUnlocalizedName("rocket_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rocket_fuel"); - coke = new ItemEnumMulti(EnumCokeType.class, true, true).setUnlocalizedName("coke").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coke"); - lignite = new Item().setUnlocalizedName("lignite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":lignite"); - briquette = new ItemEnumMulti(EnumBriquetteType.class, true, true).setUnlocalizedName("briquette").setCreativeTab(MainRegistry.partsTab); - powder_lignite = new Item().setUnlocalizedName("powder_lignite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lignite"); - coal_infernal = new Item().setUnlocalizedName("coal_infernal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coal_infernal"); - cinnebar = new Item().setUnlocalizedName("cinnebar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":cinnebar"); - powder_ash = new ItemEnumMulti(EnumAshType.class, true, true).setUnlocalizedName("powder_ash").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_ash"); - powder_limestone = new Item().setUnlocalizedName("powder_limestone").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_limestone"); - powder_cement = new ItemLemon(2, 0.5F, false).setUnlocalizedName("powder_cement").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cement"); - - ingot_gh336 = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("ingot_gh336").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_gh336"); - nugget_gh336 = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("nugget_gh336").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_gh336"); - - ingot_australium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("ingot_australium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_australium"); - nugget_australium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("nugget_australium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_australium"); - nugget_australium_lesser = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("nugget_australium_lesser").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_australium_lesser"); - nugget_australium_greater = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("nugget_australium_greater").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_australium_greater"); - - nugget_th232 = new Item().setUnlocalizedName("nugget_th232").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_th232"); - nugget_uranium = new Item().setUnlocalizedName("nugget_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_uranium"); - nugget_u233 = new Item().setUnlocalizedName("nugget_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_u233"); - nugget_u235 = new Item().setUnlocalizedName("nugget_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_u235"); - nugget_u238 = new Item().setUnlocalizedName("nugget_u238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_u238"); - nugget_plutonium = new Item().setUnlocalizedName("nugget_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_plutonium"); - nugget_pu238 = new Item().setUnlocalizedName("nugget_pu238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pu238"); - nugget_pu239 = new Item().setUnlocalizedName("nugget_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pu239"); - nugget_pu240 = new Item().setUnlocalizedName("nugget_pu240").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pu240"); - nugget_pu241 = new Item().setUnlocalizedName("nugget_pu241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pu241"); - nugget_pu_mix = new Item().setUnlocalizedName("nugget_pu_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pu_mix"); - nugget_am241 = new Item().setUnlocalizedName("nugget_am241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_am241"); - nugget_am242 = new Item().setUnlocalizedName("nugget_am242").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_am242"); - nugget_am_mix = new Item().setUnlocalizedName("nugget_am_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_am_mix"); - nugget_neptunium = new Item().setUnlocalizedName("nugget_neptunium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_neptunium"); - nugget_polonium = new Item().setUnlocalizedName("nugget_polonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_polonium"); - nugget_technetium = new Item().setUnlocalizedName("nugget_technetium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_technetium"); - nugget_cobalt = new Item().setUnlocalizedName("nugget_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_cobalt"); - nugget_co60 = new Item().setUnlocalizedName("nugget_co60").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_co60"); - nugget_sr90 = new Item().setUnlocalizedName("nugget_sr90").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_sr90"); - nugget_au198 = new Item().setUnlocalizedName("nugget_au198").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_au198"); - nugget_pb209 = new Item().setUnlocalizedName("nugget_pb209").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pb209"); - nugget_ra226 = new Item().setUnlocalizedName("nugget_ra226").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_ra226"); - nugget_actinium = new Item().setUnlocalizedName("nugget_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_actinium"); - plate_titanium = new Item().setUnlocalizedName("plate_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_titanium"); - plate_aluminium = new Item().setUnlocalizedName("plate_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_aluminium"); - neutron_reflector = new Item().setUnlocalizedName("neutron_reflector").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":neutron_reflector"); - nugget_lead = new Item().setUnlocalizedName("nugget_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_lead"); - ingot_bismuth = new ItemCustomLore().setUnlocalizedName("ingot_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_bismuth"); - nugget_bismuth = new Item().setUnlocalizedName("nugget_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_bismuth"); - ingot_arsenic = new ItemCustomLore().setUnlocalizedName("ingot_arsenic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_arsenic"); - nugget_arsenic = new Item().setUnlocalizedName("nugget_arsenic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_arsenic"); - ingot_tantalium = new ItemCustomLore().setUnlocalizedName("ingot_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_tantalium"); - nugget_tantalium = new ItemCustomLore().setUnlocalizedName("nugget_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_tantalium"); - ingot_silicon = new Item().setUnlocalizedName("ingot_silicon").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_silicon"); - billet_silicon = new Item().setUnlocalizedName("billet_silicon").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_silicon"); - nugget_silicon = new Item().setUnlocalizedName("nugget_silicon").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_silicon"); - ingot_niobium = new Item().setUnlocalizedName("ingot_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_niobium"); - nugget_niobium = new Item().setUnlocalizedName("nugget_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_niobium"); - ingot_osmiridium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("ingot_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_osmiridium"); - nugget_osmiridium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("nugget_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_osmiridium"); - nugget_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("nugget_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_schrabidium"); - nugget_beryllium = new Item().setUnlocalizedName("nugget_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_beryllium"); - hazmat_cloth = new Item().setUnlocalizedName("hazmat_cloth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hazmat_cloth"); - hazmat_cloth_red = new Item().setUnlocalizedName("hazmat_cloth_red").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hazmat_cloth_red"); - hazmat_cloth_grey = new Item().setUnlocalizedName("hazmat_cloth_grey").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hazmat_cloth_grey"); - asbestos_cloth = new Item().setUnlocalizedName("asbestos_cloth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":asbestos_cloth"); - rag = new ItemRag().setUnlocalizedName("rag").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rag"); - rag_damp = new Item().setUnlocalizedName("rag_damp").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rag_damp"); - rag_piss = new Item().setUnlocalizedName("rag_piss").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rag_piss"); - filter_coal = new Item().setUnlocalizedName("filter_coal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":filter_coal"); - ingot_hes = new Item().setUnlocalizedName("ingot_hes").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_hes"); - ingot_les = new Item().setUnlocalizedName("ingot_les").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_les"); - nugget_hes = new Item().setUnlocalizedName("nugget_hes").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_hes"); - nugget_les = new Item().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_coal = new Item().setUnlocalizedName("crystal_coal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_coal"); - 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_lapis = new Item().setUnlocalizedName("crystal_lapis").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_lapis"); - crystal_diamond = new Item().setUnlocalizedName("crystal_diamond").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_diamond"); - crystal_uranium = new Item().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 Item().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_schraranium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("crystal_schraranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_schraranium"); - crystal_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).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 Item().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_cobalt = new Item().setUnlocalizedName("crystal_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_cobalt"); - crystal_starmetal = new Item().setUnlocalizedName("crystal_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_starmetal"); - crystal_cinnebar = new Item().setUnlocalizedName("crystal_cinnebar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_cinnebar"); - crystal_trixite = new Item().setUnlocalizedName("crystal_trixite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_trixite"); - crystal_osmiridium = new Item().setUnlocalizedName("crystal_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_osmiridium"); - gem_sodalite = new ItemCustomLore().setUnlocalizedName("gem_sodalite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_sodalite"); - gem_tantalium = new ItemCustomLore().setUnlocalizedName("gem_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_tantalium"); - gem_volcanic = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("gem_volcanic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_volcanic"); - gem_rad = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("gem_rad").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_rad"); - gem_alexandrite = new ItemAlexandrite().setUnlocalizedName("gem_alexandrite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_alexandrite"); - - powder_lead = new Item().setUnlocalizedName("powder_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lead"); - powder_tantalium = new ItemCustomLore().setUnlocalizedName("powder_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tantalium"); - powder_neptunium = new Item().setUnlocalizedName("powder_neptunium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_neptunium"); - powder_polonium = new Item().setUnlocalizedName("powder_polonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_polonium"); - powder_co60 = new Item().setUnlocalizedName("powder_co60").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_co60"); - powder_sr90 = new Item().setUnlocalizedName("powder_sr90").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_sr90"); - powder_sr90_tiny = new Item().setUnlocalizedName("powder_sr90_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_sr90_tiny"); - powder_i131 = new Item().setUnlocalizedName("powder_i131").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_i131"); - powder_i131_tiny = new Item().setUnlocalizedName("powder_i131_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_i131_tiny"); - powder_xe135 = new Item().setUnlocalizedName("powder_xe135").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_xe135"); - powder_xe135_tiny = new Item().setUnlocalizedName("powder_xe135_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_xe135_tiny"); - powder_cs137 = new Item().setUnlocalizedName("powder_cs137").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cs137"); - powder_cs137_tiny = new Item().setUnlocalizedName("powder_cs137_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cs137_tiny"); - powder_au198 = new Item().setUnlocalizedName("powder_au198").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_au198"); - powder_ra226 = new Item().setUnlocalizedName("powder_ra226").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_ra226"); - powder_at209 = new Item().setUnlocalizedName("powder_at209").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_at209"); - powder_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("powder_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_schrabidium"); - powder_schrabidate = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("powder_schrabidate").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_schrabidate"); - powder_aluminium = new Item().setUnlocalizedName("powder_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_aluminium"); - powder_beryllium = new Item().setUnlocalizedName("powder_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_beryllium"); - powder_copper = new Item().setUnlocalizedName("powder_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_copper"); - powder_gold = new Item().setUnlocalizedName("powder_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_gold"); - powder_iron = new Item().setUnlocalizedName("powder_iron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_iron"); - powder_titanium = new Item().setUnlocalizedName("powder_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_titanium"); - powder_tungsten = new Item().setUnlocalizedName("powder_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tungsten"); - powder_uranium = new Item().setUnlocalizedName("powder_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_uranium"); - powder_plutonium = new Item().setUnlocalizedName("powder_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_plutonium"); - dust = new ItemCustomLore().setUnlocalizedName("dust").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":dust"); - dust_tiny = new Item().setUnlocalizedName("dust_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":dust_tiny"); - fallout = new Item().setUnlocalizedName("fallout").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fallout"); - powder_advanced_alloy = new Item().setUnlocalizedName("powder_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_advanced_alloy"); - powder_tcalloy = new Item().setUnlocalizedName("powder_tcalloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tcalloy"); - powder_coal = new Item().setUnlocalizedName("powder_coal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coal"); - powder_coal_tiny = new Item().setUnlocalizedName("powder_coal_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coal_tiny"); - powder_combine_steel = new Item().setUnlocalizedName("powder_combine_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_combine_steel"); - powder_diamond = new Item().setUnlocalizedName("powder_diamond").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_diamond"); - powder_emerald = new Item().setUnlocalizedName("powder_emerald").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_emerald"); - powder_lapis = new Item().setUnlocalizedName("powder_lapis").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lapis"); - powder_quartz = new Item().setUnlocalizedName("powder_quartz").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_quartz"); - powder_magnetized_tungsten = new Item().setUnlocalizedName("powder_magnetized_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_magnetized_tungsten"); - powder_chlorophyte = new Item().setUnlocalizedName("powder_chlorophyte").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_chlorophyte"); - powder_red_copper = new Item().setUnlocalizedName("powder_red_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_red_copper"); - powder_steel = new Item().setUnlocalizedName("powder_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_steel"); - powder_lithium = new Item().setUnlocalizedName("powder_lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lithium"); - powder_zirconium = new Item().setUnlocalizedName("powder_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_zirconium"); - powder_sodium = new Item().setUnlocalizedName("powder_sodium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_sodium"); - powder_power = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("powder_power").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_energy_alt"); - powder_iodine = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_iodine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_iodine"); - powder_thorium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("powder_thorium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_thorium"); - powder_neodymium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_neodymium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_neodymium"); - powder_astatine = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_astatine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_astatine"); - powder_caesium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_caesium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_caesium"); - powder_australium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("powder_australium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_australium"); - powder_strontium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_strontium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_strontium"); - powder_cobalt = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cobalt"); - powder_bromine = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_bromine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_bromine"); - powder_niobium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_niobium"); - powder_tennessine = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_tennessine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tennessine"); - powder_cerium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_cerium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cerium"); - powder_dura_steel = new ItemCustomLore().setUnlocalizedName("powder_dura_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_dura_steel"); - powder_polymer = new ItemCustomLore().setUnlocalizedName("powder_polymer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_polymer"); - powder_bakelite = new ItemCustomLore().setUnlocalizedName("powder_bakelite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_bakelite"); - powder_euphemium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_euphemium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_euphemium"); - powder_meteorite = new Item().setUnlocalizedName("powder_meteorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_meteorite"); - powder_lanthanium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_lanthanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lanthanium"); - powder_actinium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_actinium"); - powder_boron = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_boron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_boron"); - powder_semtex_mix = new Item().setUnlocalizedName("powder_semtex_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_semtex_mix"); - powder_desh_mix = new Item().setUnlocalizedName("powder_desh_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_desh_mix"); - powder_desh_ready = new Item().setUnlocalizedName("powder_desh_ready").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_desh_ready"); - powder_nitan_mix = new Item().setUnlocalizedName("powder_nitan_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_nitan_mix"); - powder_spark_mix = new Item().setUnlocalizedName("powder_spark_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_spark_mix"); - powder_desh = new Item().setUnlocalizedName("powder_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_desh"); - powder_steel_tiny = new Item().setUnlocalizedName("powder_steel_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_steel_tiny"); - powder_lithium_tiny = new Item().setUnlocalizedName("powder_lithium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lithium_tiny"); - powder_neodymium_tiny = new Item().setUnlocalizedName("powder_neodymium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_neodymium_tiny"); - powder_cobalt_tiny = new Item().setUnlocalizedName("powder_cobalt_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cobalt_tiny"); - powder_niobium_tiny = new Item().setUnlocalizedName("powder_niobium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_niobium_tiny"); - powder_cerium_tiny = new Item().setUnlocalizedName("powder_cerium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cerium_tiny"); - powder_lanthanium_tiny = new Item().setUnlocalizedName("powder_lanthanium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lanthanium_tiny"); - powder_actinium_tiny = new Item().setUnlocalizedName("powder_actinium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_actinium_tiny"); - powder_boron_tiny = new Item().setUnlocalizedName("powder_boron_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_boron_tiny"); - powder_meteorite_tiny = new Item().setUnlocalizedName("powder_meteorite_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_meteorite_tiny"); - powder_yellowcake = new Item().setUnlocalizedName("powder_yellowcake").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_yellowcake"); - powder_magic = new Item().setUnlocalizedName("powder_magic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_magic"); - powder_balefire = new Item().setUnlocalizedName("powder_balefire").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_balefire"); - powder_sawdust = new Item().setUnlocalizedName("powder_sawdust").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_sawdust"); - powder_flux = new Item().setUnlocalizedName("powder_flux").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_flux"); - powder_fertilizer = new ItemFertilizer().setUnlocalizedName("powder_fertilizer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_fertilizer"); - powder_coltan_ore = new Item().setUnlocalizedName("powder_coltan_ore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coltan_ore"); - powder_coltan = new Item().setUnlocalizedName("powder_coltan").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coltan"); - powder_tektite = new Item().setUnlocalizedName("powder_tektite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tektite"); - powder_paleogenite = new Item().setUnlocalizedName("powder_paleogenite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_paleogenite"); - powder_paleogenite_tiny = new Item().setUnlocalizedName("powder_paleogenite_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_paleogenite_tiny"); - powder_impure_osmiridium = new Item().setUnlocalizedName("powder_impure_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_impure_osmiridium"); - powder_borax = new Item().setUnlocalizedName("powder_borax").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_borax"); - powder_chlorocalcite = new Item().setUnlocalizedName("powder_chlorocalcite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_chlorocalcite"); - powder_molysite = new Item().setUnlocalizedName("powder_molysite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_molysite"); - - fragment_neodymium = new Item().setUnlocalizedName("fragment_neodymium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_neodymium"); - fragment_cobalt = new Item().setUnlocalizedName("fragment_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_cobalt"); - fragment_niobium = new Item().setUnlocalizedName("fragment_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_niobium"); - fragment_cerium = new Item().setUnlocalizedName("fragment_cerium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_cerium"); - fragment_lanthanium = new Item().setUnlocalizedName("fragment_lanthanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_lanthanium"); - fragment_actinium = new Item().setUnlocalizedName("fragment_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_actinium"); - fragment_boron = new Item().setUnlocalizedName("fragment_boron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_boron"); - fragment_meteorite = new Item().setUnlocalizedName("fragment_meteorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_meteorite"); - fragment_coltan = new Item().setUnlocalizedName("fragment_coltan").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_coltan"); - chunk_ore = new ItemEnumMulti(EnumChunkType.class, true, true).setUnlocalizedName("chunk_ore").setCreativeTab(MainRegistry.partsTab); - - biomass = new Item().setUnlocalizedName("biomass").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":biomass"); - biomass_compressed = new Item().setUnlocalizedName("biomass_compressed").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":biomass_compressed"); - bio_wafer = new ItemLemon(4, 2F, false).setUnlocalizedName("bio_wafer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bio_wafer"); - plant_item = new ItemEnumMulti(EnumPlantType.class, true, true).setUnlocalizedName("plant_item").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plant_item"); - - coil_copper = new Item().setUnlocalizedName("coil_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_copper"); - coil_copper_torus = new Item().setUnlocalizedName("coil_copper_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_copper_torus"); - coil_tungsten = new Item().setUnlocalizedName("coil_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_tungsten"); - tank_steel = new Item().setUnlocalizedName("tank_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":tank_steel"); - motor = new Item().setUnlocalizedName("motor").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":motor"); - motor_desh = new Item().setUnlocalizedName("motor_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":motor_desh"); - motor_bismuth = new Item().setUnlocalizedName("motor_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":motor_bismuth"); - centrifuge_element = new Item().setUnlocalizedName("centrifuge_element").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":centrifuge_element"); - reactor_core = new Item().setUnlocalizedName("reactor_core").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":reactor_core"); - rtg_unit = new Item().setUnlocalizedName("rtg_unit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rtg_unit"); - levitation_unit = new Item().setUnlocalizedName("levitation_unit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":levitation_unit"); - coil_magnetized_tungsten = new Item().setUnlocalizedName("coil_magnetized_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_magnetized_tungsten"); - coil_gold = new Item().setUnlocalizedName("coil_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold"); - coil_gold_torus = new Item().setUnlocalizedName("coil_gold_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold_torus"); - component_limiter = new Item().setUnlocalizedName("component_limiter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_limiter"); - component_emitter = new Item().setUnlocalizedName("component_emitter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_emitter"); - chlorine_pinwheel = new ItemInfiniteFluid(Fluids.CHLORINE, 1, 2).setUnlocalizedName("chlorine_pinwheel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chlorine_pinwheel"); - FluidTank.noDualUnload.add(chlorine_pinwheel); - ring_starmetal = new Item().setUnlocalizedName("ring_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ring_starmetal"); - flywheel_beryllium = new Item().setUnlocalizedName("flywheel_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flywheel_beryllium"); - deuterium_filter = new Item().setUnlocalizedName("deuterium_filter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":deuterium_filter"); - parts_legendary = new ItemEnumMulti(EnumLegendaryType.class, false, true).setUnlocalizedName("parts_legendary").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":parts_legendary"); - - gear_large = new ItemGear().setUnlocalizedName("gear_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gear_large"); - sawblade = new Item().setUnlocalizedName("sawblade").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sawblade"); - - shell = new ItemAutogen(MaterialShapes.SHELL).oun("shellntm").setUnlocalizedName("shell").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":shell"); - pipe = new ItemAutogen(MaterialShapes.PIPE).oun("pipentm").setUnlocalizedName("pipe").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pipe"); - fins_flat = new Item().setUnlocalizedName("fins_flat").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fins_flat"); - fins_small_steel = new Item().setUnlocalizedName("fins_small_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fins_small_steel"); - fins_big_steel = new Item().setUnlocalizedName("fins_big_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fins_big_steel"); - fins_tri_steel = new Item().setUnlocalizedName("fins_tri_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fins_tri_steel"); - fins_quad_titanium = new Item().setUnlocalizedName("fins_quad_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fins_quad_titanium"); - sphere_steel = new Item().setUnlocalizedName("sphere_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sphere_steel"); - pedestal_steel = new Item().setUnlocalizedName("pedestal_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pedestal_steel"); - dysfunctional_reactor = new Item().setUnlocalizedName("dysfunctional_reactor").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":dysfunctional_reactor"); - blade_titanium = new Item().setUnlocalizedName("blade_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":blade_titanium"); - turbine_titanium = new Item().setUnlocalizedName("turbine_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":turbine_titanium"); - blade_tungsten = new Item().setUnlocalizedName("blade_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":blade_tungsten"); - turbine_tungsten = new Item().setUnlocalizedName("turbine_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":turbine_tungsten"); - - toothpicks = new Item().setUnlocalizedName("toothpicks").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":toothpicks"); - ducttape = new Item().setUnlocalizedName("ducttape").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ducttape"); - catalyst_clay = new Item().setUnlocalizedName("catalyst_clay").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":catalyst_clay"); - - warhead_generic_small = new Item().setUnlocalizedName("warhead_generic_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_generic_small"); - warhead_generic_medium = new Item().setUnlocalizedName("warhead_generic_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_generic_medium"); - warhead_generic_large = new Item().setUnlocalizedName("warhead_generic_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_generic_large"); - warhead_incendiary_small = new Item().setUnlocalizedName("warhead_incendiary_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_incendiary_small"); - warhead_incendiary_medium = new Item().setUnlocalizedName("warhead_incendiary_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_incendiary_medium"); - warhead_incendiary_large = new Item().setUnlocalizedName("warhead_incendiary_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_incendiary_large"); - warhead_cluster_small = new Item().setUnlocalizedName("warhead_cluster_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_cluster_small"); - warhead_cluster_medium = new Item().setUnlocalizedName("warhead_cluster_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_cluster_medium"); - warhead_cluster_large = new Item().setUnlocalizedName("warhead_cluster_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_cluster_large"); - warhead_buster_small = new Item().setUnlocalizedName("warhead_buster_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_buster_small"); - warhead_buster_medium = new Item().setUnlocalizedName("warhead_buster_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_buster_medium"); - warhead_buster_large = new Item().setUnlocalizedName("warhead_buster_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_buster_large"); - warhead_nuclear = new Item().setUnlocalizedName("warhead_nuclear").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_nuclear"); - warhead_mirv = new Item().setUnlocalizedName("warhead_mirv").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_mirv"); - warhead_volcano = new Item().setUnlocalizedName("warhead_volcano").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_volcano"); - - fuel_tank_small = new Item().setUnlocalizedName("fuel_tank_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fuel_tank_small"); - fuel_tank_medium = new Item().setUnlocalizedName("fuel_tank_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fuel_tank_medium"); - fuel_tank_large = new Item().setUnlocalizedName("fuel_tank_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fuel_tank_large"); - - thruster_small = new Item().setUnlocalizedName("thruster_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_small"); - thruster_medium = new Item().setUnlocalizedName("thruster_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_medium"); - thruster_large = new Item().setUnlocalizedName("thruster_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_large"); - - sat_head_mapper = new Item().setUnlocalizedName("sat_head_mapper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_mapper"); - sat_head_scanner = new Item().setUnlocalizedName("sat_head_scanner").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_scanner"); - sat_head_radar = new Item().setUnlocalizedName("sat_head_radar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_radar"); - sat_head_laser = new Item().setUnlocalizedName("sat_head_laser").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_laser"); - sat_head_resonator = new Item().setUnlocalizedName("sat_head_resonator").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_resonator"); - - seg_10 = new Item().setUnlocalizedName("seg_10").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_10"); - seg_15 = new Item().setUnlocalizedName("seg_15").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_15"); - seg_20 = new Item().setUnlocalizedName("seg_20").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_20"); - - chopper_head = new Item().setUnlocalizedName("chopper_head").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_head"); - chopper_gun = new Item().setUnlocalizedName("chopper_gun").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_gun"); - chopper_torso = new Item().setUnlocalizedName("chopper_torso").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_torso"); - chopper_tail = new Item().setUnlocalizedName("chopper_tail").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_tail"); - chopper_wing = new Item().setUnlocalizedName("chopper_wing").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_wing"); - chopper_blades = new Item().setUnlocalizedName("chopper_blades").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_blades"); - combine_scrap = new Item().setUnlocalizedName("combine_scrap").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":combine_scrap"); - - shimmer_head = new Item().setUnlocalizedName("shimmer_head").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":shimmer_head_original"); - shimmer_axe_head = new Item().setUnlocalizedName("shimmer_axe_head").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":shimmer_axe_head"); - shimmer_handle = new Item().setUnlocalizedName("shimmer_handle").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":shimmer_handle"); - - entanglement_kit = new ItemCustomLore().setUnlocalizedName("entanglement_kit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":entanglement_kit"); - - circuit = new ItemCircuit().setUnlocalizedName("circuit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":circuit"); - crt_display = new Item().setUnlocalizedName("crt_display").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crt_display"); - circuit_star_piece = (ItemEnumMulti) new ItemEnumMulti(ScrapType.class, true, true).setUnlocalizedName("circuit_star_piece").setCreativeTab(null); - circuit_star_component = (ItemEnumMulti) new ItemCircuitStarComponent().setUnlocalizedName("circuit_star_component").setCreativeTab(null); - circuit_star = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("circuit_star").setCreativeTab(null).setTextureName(RefStrings.MODID + ":circuit_star"); - assembly_nuke = new Item().setUnlocalizedName("assembly_nuke").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":assembly_nuke"); - casing = new ItemEnumMulti(ItemEnums.EnumCasingType.class, true, true).setUnlocalizedName("casing").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":casing"); - - wiring_red_copper = new ItemWiring().setUnlocalizedName("wiring_red_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":wiring_red_copper"); - - pellet_rtg_depleted = new ItemRTGPelletDepleted().setContainerItem(plate_iron).setUnlocalizedName("pellet_rtg_depleted").setCreativeTab(MainRegistry.controlTab); - - pellet_rtg_radium = new ItemRTGPellet(3).setDecays(DepletedRTGMaterial.LEAD, (long) (RTGUtil.getLifespan(16.0F, HalfLifeType.LONG, false) * 1.5)).setUnlocalizedName("pellet_rtg_radium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_radium"); - pellet_rtg_weak = new ItemRTGPellet(5).setDecays(DepletedRTGMaterial.LEAD, (long) (RTGUtil.getLifespan(1.0F, HalfLifeType.LONG, false) * 1.5)).setUnlocalizedName("pellet_rtg_weak").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_weak"); - pellet_rtg = new ItemRTGPellet(10).setDecays(DepletedRTGMaterial.LEAD, (long) (RTGUtil.getLifespan(87.7F, HalfLifeType.MEDIUM, false) * 1.5)).setUnlocalizedName("pellet_rtg").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg"); - pellet_rtg_strontium = new ItemRTGPellet(15).setDecays(DepletedRTGMaterial.ZIRCONIUM, (long) (RTGUtil.getLifespan(29.0F, HalfLifeType.MEDIUM, false) * 1.5)).setUnlocalizedName("pellet_rtg_strontium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pellet_rtg_strontium"); - pellet_rtg_cobalt = new ItemRTGPellet(15).setDecays(DepletedRTGMaterial.NICKEL, (long) (RTGUtil.getLifespan(5.3F, HalfLifeType.MEDIUM, false) * 1.5)).setUnlocalizedName("pellet_rtg_cobalt").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pellet_rtg_cobalt"); - pellet_rtg_actinium = new ItemRTGPellet(20).setDecays(DepletedRTGMaterial.LEAD, (long) (RTGUtil.getLifespan(21.8F, HalfLifeType.MEDIUM, false) * 1.5)).setUnlocalizedName("pellet_rtg_actinium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pellet_rtg_actinium"); - pellet_rtg_americium = new ItemRTGPellet(20).setDecays(DepletedRTGMaterial.NEPTUNIUM, (long) (RTGUtil.getLifespan(4.7F, HalfLifeType.LONG, false) * 1.5)).setUnlocalizedName("pellet_rtg_americium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_americium"); - pellet_rtg_polonium = new ItemRTGPellet(50).setDecays(DepletedRTGMaterial.LEAD, (long) (RTGUtil.getLifespan(138.0F, HalfLifeType.SHORT, false) * 1.5)).setUnlocalizedName("pellet_rtg_polonium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_polonium"); - pellet_rtg_gold = new ItemRTGPellet(VersatileConfig.rtgDecay() ? 200 : 100).setDecays(DepletedRTGMaterial.MERCURY, (long) (RTGUtil.getLifespan(2.7F, HalfLifeType.SHORT, false) * 1.5)).setUnlocalizedName("pellet_rtg_gold").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_gold"); - pellet_rtg_lead = new ItemRTGPellet(VersatileConfig.rtgDecay() ? 600 : 200).setDecays(DepletedRTGMaterial.BISMUTH, (long) (RTGUtil.getLifespan(0.3F, HalfLifeType.SHORT, false) * 1.5)).setUnlocalizedName("pellet_rtg_lead").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pellet_rtg_lead"); - - tritium_deuterium_cake = new ItemCustomLore().setUnlocalizedName("tritium_deuterium_cake").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":tritium_deuterium_cake"); - - piston_selenium = new Item().setUnlocalizedName("piston_selenium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":piston_selenium"); - piston_set = new ItemPistons().setUnlocalizedName("piston_set").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1); - drillbit = new ItemDrillbit().setUnlocalizedName("drillbit").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1); - - rune_blank = new ItemCustomLore().setEffect().setUnlocalizedName("rune_blank").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_blank"); - rune_isa = new ItemCustomLore().setEffect().setUnlocalizedName("rune_isa").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_isa"); - rune_dagaz = new ItemCustomLore().setEffect().setUnlocalizedName("rune_dagaz").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_dagaz"); - rune_hagalaz = new ItemCustomLore().setEffect().setUnlocalizedName("rune_hagalaz").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_hagalaz"); - rune_jera = new ItemCustomLore().setEffect().setUnlocalizedName("rune_jera").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_jera"); - rune_thurisaz = new ItemCustomLore().setEffect().setUnlocalizedName("rune_thurisaz").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_thurisaz"); - - ams_catalyst_blank = new Item().setUnlocalizedName("ams_catalyst_blank").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_blank"); - ams_catalyst_aluminium = new ItemCatalyst(0xCCCCCC, 1000000, 1.15F, 0.85F, 1.15F).setUnlocalizedName("ams_catalyst_aluminium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_aluminium"); - ams_catalyst_beryllium = new ItemCatalyst(0x97978B, 0, 1.25F, 0.95F, 1.05F).setUnlocalizedName("ams_catalyst_beryllium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_beryllium"); - ams_catalyst_caesium = new ItemCatalyst(0x6400FF, 2500000, 1.00F, 0.85F, 1.15F).setUnlocalizedName("ams_catalyst_caesium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_caesium"); - ams_catalyst_cerium = new ItemCatalyst(0x1D3FFF, 1000000, 1.15F, 1.15F, 0.85F).setUnlocalizedName("ams_catalyst_cerium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_cerium"); - ams_catalyst_cobalt = new ItemCatalyst(0x789BBE, 0, 1.25F, 1.05F, 0.95F).setUnlocalizedName("ams_catalyst_cobalt").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_cobalt"); - ams_catalyst_copper = new ItemCatalyst(0xAADE29, 0, 1.25F, 1.00F, 1.00F).setUnlocalizedName("ams_catalyst_copper").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_copper"); - ams_catalyst_dineutronium = new ItemCatalyst(0x334077, 2500000, 1.00F, 1.15F, 0.85F).setUnlocalizedName("ams_catalyst_dineutronium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_dineutronium"); - ams_catalyst_euphemium = new ItemCatalyst(0xFF9CD2, 2500000, 1.00F, 1.00F, 1.00F).setUnlocalizedName("ams_catalyst_euphemium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_euphemium"); - ams_catalyst_iron = new ItemCatalyst(0xFF7E22, 1000000, 1.15F, 0.95F, 1.05F).setUnlocalizedName("ams_catalyst_iron").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_iron"); - ams_catalyst_lithium = new ItemCatalyst(0xFF2727, 0, 1.25F, 0.85F, 1.15F).setUnlocalizedName("ams_catalyst_lithium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_lithium"); - ams_catalyst_niobium = new ItemCatalyst(0x3BF1B6, 1000000, 1.15F, 1.05F, 0.95F).setUnlocalizedName("ams_catalyst_niobium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_niobium"); - ams_catalyst_schrabidium = new ItemCatalyst(0x32FFFF, 2500000, 1.00F, 1.05F, 0.95F).setUnlocalizedName("ams_catalyst_schrabidium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_schrabidium"); - ams_catalyst_strontium = new ItemCatalyst(0xDD0D35, 1000000, 1.15F, 1.00F, 1.00F).setUnlocalizedName("ams_catalyst_strontium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_strontium"); - ams_catalyst_thorium = new ItemCatalyst(0x653B22, 2500000, 1.00F, 0.95F, 1.05F).setUnlocalizedName("ams_catalyst_thorium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_thorium"); - ams_catalyst_tungsten = new ItemCatalyst(0xF5FF48, 0, 1.25F, 1.15F, 0.85F).setUnlocalizedName("ams_catalyst_tungsten").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_tungsten"); - - cell_empty = new Item().setUnlocalizedName("cell_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":cell_empty"); - cell_uf6 = new Item().setUnlocalizedName("cell_uf6").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_uf6"); - cell_puf6 = new Item().setUnlocalizedName("cell_puf6").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_puf6"); - cell_antimatter = new ItemDrop().setUnlocalizedName("cell_antimatter").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_antimatter"); - cell_deuterium = new Item().setUnlocalizedName("cell_deuterium").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_deuterium"); - cell_tritium = new Item().setUnlocalizedName("cell_tritium").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_tritium"); - cell_sas3 = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("cell_sas3").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_sas3"); - cell_anti_schrabidium = new ItemDrop().setUnlocalizedName("cell_anti_schrabidium").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_anti_schrabidium"); - cell_balefire = new Item().setUnlocalizedName("cell_balefire").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_balefire"); - - demon_core_open = new ItemDemonCore().setUnlocalizedName("demon_core_open").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":demon_core_open"); - demon_core_closed = new Item().setUnlocalizedName("demon_core_closed").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":demon_core_closed"); - - pa_coil = new ItemPACoil().setUnlocalizedName("pa_coil").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pa_coil"); - - particle_empty = new Item().setUnlocalizedName("particle_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":particle_empty"); - particle_hydrogen = new Item().setUnlocalizedName("particle_hydrogen").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_hydrogen"); - particle_copper = new Item().setUnlocalizedName("particle_copper").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_copper"); - particle_lead = new Item().setUnlocalizedName("particle_lead").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_lead"); - particle_aproton = new Item().setUnlocalizedName("particle_aproton").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_aproton"); - particle_aelectron = new Item().setUnlocalizedName("particle_aelectron").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_aelectron"); - particle_amat = new Item().setUnlocalizedName("particle_amat").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_amat"); - particle_aschrab = new Item().setUnlocalizedName("particle_aschrab").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_aschrab"); - particle_higgs = new Item().setUnlocalizedName("particle_higgs").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_higgs"); - particle_muon = new Item().setUnlocalizedName("particle_muon").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_muon"); - particle_tachyon = new Item().setUnlocalizedName("particle_tachyon").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_tachyon"); - particle_strange = new Item().setUnlocalizedName("particle_strange").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_strange"); - particle_dark = new Item().setUnlocalizedName("particle_dark").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_dark"); - particle_sparkticle = new Item().setUnlocalizedName("particle_sparkticle").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_sparkticle"); - particle_digamma = new ItemDigamma(60).setUnlocalizedName("particle_digamma").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_digamma"); - particle_lutece = new Item().setUnlocalizedName("particle_lutece").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_lutece"); - - singularity = new ItemDrop().setUnlocalizedName("singularity").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity"); - singularity_counter_resonant = new ItemDrop().setUnlocalizedName("singularity_counter_resonant").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity_alt"); - singularity_super_heated = new ItemDrop().setUnlocalizedName("singularity_super_heated").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity_5"); - black_hole = new ItemDrop().setUnlocalizedName("black_hole").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity_4"); - singularity_spark = new ItemDrop().setUnlocalizedName("singularity_spark").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity_spark_alt"); - pellet_antimatter = new ItemDrop().setUnlocalizedName("pellet_antimatter").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":pellet_antimatter"); - crystal_xen = new ItemDrop().setUnlocalizedName("crystal_xen").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":crystal_xen"); - - stamp_stone_flat = new ItemStamp(32, StampType.FLAT).setUnlocalizedName("stamp_stone_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_flat"); - stamp_stone_plate = new ItemStamp(32, StampType.PLATE).setUnlocalizedName("stamp_stone_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_plate"); - stamp_stone_wire = new ItemStamp(32, StampType.WIRE).setUnlocalizedName("stamp_stone_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_wire"); - stamp_stone_circuit = new ItemStamp(32, StampType.CIRCUIT).setUnlocalizedName("stamp_stone_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_circuit"); - stamp_iron_flat = new ItemStamp(64, StampType.FLAT).setUnlocalizedName("stamp_iron_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_flat"); - stamp_iron_plate = new ItemStamp(64, StampType.PLATE).setUnlocalizedName("stamp_iron_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_plate"); - stamp_iron_wire = new ItemStamp(64, StampType.WIRE).setUnlocalizedName("stamp_iron_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_wire"); - stamp_iron_circuit = new ItemStamp(64, StampType.CIRCUIT).setUnlocalizedName("stamp_iron_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_circuit"); - stamp_steel_flat = new ItemStamp(192, StampType.FLAT).setUnlocalizedName("stamp_steel_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_flat"); - stamp_steel_plate = new ItemStamp(192, StampType.PLATE).setUnlocalizedName("stamp_steel_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_plate"); - stamp_steel_wire = new ItemStamp(192, StampType.WIRE).setUnlocalizedName("stamp_steel_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_wire"); - stamp_steel_circuit = new ItemStamp(192, StampType.CIRCUIT).setUnlocalizedName("stamp_steel_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_circuit"); - stamp_titanium_flat = new ItemStamp(256, StampType.FLAT).setUnlocalizedName("stamp_titanium_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_flat"); - stamp_titanium_plate = new ItemStamp(256, StampType.PLATE).setUnlocalizedName("stamp_titanium_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_plate"); - stamp_titanium_wire = new ItemStamp(256, StampType.WIRE).setUnlocalizedName("stamp_titanium_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_wire"); - stamp_titanium_circuit = new ItemStamp(256, StampType.CIRCUIT).setUnlocalizedName("stamp_titanium_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_circuit"); - stamp_obsidian_flat = new ItemStamp(512, StampType.FLAT).setUnlocalizedName("stamp_obsidian_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_flat"); - stamp_obsidian_plate = new ItemStamp(512, StampType.PLATE).setUnlocalizedName("stamp_obsidian_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_plate"); - stamp_obsidian_wire = new ItemStamp(512, StampType.WIRE).setUnlocalizedName("stamp_obsidian_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_wire"); - stamp_obsidian_circuit = new ItemStamp(512, StampType.CIRCUIT).setUnlocalizedName("stamp_obsidian_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_circuit"); - stamp_desh_flat = new ItemStamp(0, StampType.FLAT).setUnlocalizedName("stamp_desh_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_flat"); - stamp_desh_plate = new ItemStamp(0, StampType.PLATE).setUnlocalizedName("stamp_desh_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_plate"); - stamp_desh_wire = new ItemStamp(0, StampType.WIRE).setUnlocalizedName("stamp_desh_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_wire"); - stamp_desh_circuit = new ItemStamp(0, StampType.CIRCUIT).setUnlocalizedName("stamp_desh_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_circuit"); - stamp_357 = new ItemStamp(1000, StampType.C357).setUnlocalizedName("stamp_357").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_357"); - stamp_44 = new ItemStamp(1000, StampType.C44).setUnlocalizedName("stamp_44").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_44"); - stamp_9 = new ItemStamp(1000, StampType.C9).setUnlocalizedName("stamp_9").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_9"); - stamp_50 = new ItemStamp(1000, StampType.C50).setUnlocalizedName("stamp_50").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_50"); - stamp_book = new ItemStampBook().setUnlocalizedName("stamp_book").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":stamp_book"); - - stamp_desh_357 = new ItemStamp(0, StampType.C357).setUnlocalizedName("stamp_desh_357").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_357_desh"); - stamp_desh_44 = new ItemStamp(0, StampType.C44).setUnlocalizedName("stamp_desh_44").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_44_desh"); - stamp_desh_9 = new ItemStamp(0, StampType.C9).setUnlocalizedName("stamp_desh_9").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_9_desh"); - stamp_desh_50 = new ItemStamp(0, StampType.C50).setUnlocalizedName("stamp_desh_50").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_50_desh"); - - blades_steel = new ItemBlades(200).setUnlocalizedName("blades_steel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":blades_steel"); - blades_titanium = new ItemBlades(350).setUnlocalizedName("blades_titanium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":blades_titanium"); - blades_advanced_alloy = new ItemBlades(700).setUnlocalizedName("blades_advanced_alloy").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":blades_advanced_alloy"); - blades_desh = new ItemBlades(0).setUnlocalizedName("blades_desh").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":blades_desh"); - - mold_base = new Item().setUnlocalizedName("mold_base").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":mold_base"); - mold = new ItemMold().setUnlocalizedName("mold").setCreativeTab(MainRegistry.controlTab); - scraps = new ItemScraps().aot(Mats.MAT_BISMUTH, "scraps_bismuth").setUnlocalizedName("scraps").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":scraps"); - ingot_raw = new ItemAutogen(MaterialShapes.INGOT).setUnlocalizedName("ingot_raw").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_raw"); - plate_cast = new ItemAutogen(MaterialShapes.CASTPLATE).aot(Mats.MAT_BISMUTH, "plate_cast_bismuth").setUnlocalizedName("plate_cast").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_cast"); - plate_welded = new ItemAutogen(MaterialShapes.WELDEDPLATE).setUnlocalizedName("plate_welded").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_welded"); - heavy_component = new ItemAutogen(MaterialShapes.HEAVY_COMPONENT).setUnlocalizedName("heavy_component").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":heavy_component"); - wire_fine = new ItemAutogen(MaterialShapes.WIRE) - .aot(Mats.MAT_ALUMINIUM, "wire_aluminium").aot(Mats.MAT_COPPER, "wire_copper") - .aot(Mats.MAT_MINGRADE, "wire_red_copper").aot(Mats.MAT_GOLD, "wire_gold") - .aot(Mats.MAT_TUNGSTEN, "wire_tungsten").aot(Mats.MAT_ALLOY, "wire_advanced_alloy") - .aot(Mats.MAT_CARBON, "wire_carbon").aot(Mats.MAT_SCHRABIDIUM, "wire_schrabidium") - .aot(Mats.MAT_MAGTUNG, "wire_magnetized_tungsten").setUnlocalizedName("wire_fine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":wire_fine"); - wire_dense = new ItemAutogen(MaterialShapes.DENSEWIRE).setUnlocalizedName("wire_dense").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":wire_dense"); - - part_barrel_light = new ItemAutogen(MaterialShapes.LIGHTBARREL).setUnlocalizedName("part_barrel_light").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_barrel_light"); - part_barrel_heavy = new ItemAutogen(MaterialShapes.HEAVYBARREL).setUnlocalizedName("part_barrel_heavy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_barrel_heavy"); - part_receiver_light = new ItemAutogen(MaterialShapes.LIGHTRECEIVER).setUnlocalizedName("part_receiver_light").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_receiver_light"); - part_receiver_heavy = new ItemAutogen(MaterialShapes.HEAVYRECEIVER).setUnlocalizedName("part_receiver_heavy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_receiver_heavy"); - part_mechanism = new ItemAutogen(MaterialShapes.MECHANISM).setUnlocalizedName("part_mechanism").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_mechanism"); - part_stock = new ItemAutogen(MaterialShapes.STOCK).setUnlocalizedName("part_stock").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_stock"); - part_grip = new ItemAutogen(MaterialShapes.GRIP).setUnlocalizedName("part_grip").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_grip"); - - part_lithium = new Item().setUnlocalizedName("part_lithium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_lithium"); - part_beryllium = new Item().setUnlocalizedName("part_beryllium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_beryllium"); - part_carbon = new Item().setUnlocalizedName("part_carbon").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_carbon"); - part_copper = new Item().setUnlocalizedName("part_copper").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_copper"); - part_plutonium = new Item().setUnlocalizedName("part_plutonium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_plutonium"); - - laser_crystal_co2 = new ItemFELCrystal(EnumWavelengths.IR).setUnlocalizedName("laser_crystal_co2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":laser_crystal_co2"); - laser_crystal_bismuth = new ItemFELCrystal(EnumWavelengths.VISIBLE).setUnlocalizedName("laser_crystal_bismuth").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":laser_crystal_bismuth"); - laser_crystal_cmb = new ItemFELCrystal(EnumWavelengths.UV).setUnlocalizedName("laser_crystal_cmb").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":laser_crystal_cmb"); - laser_crystal_dnt = new ItemFELCrystal(EnumWavelengths.GAMMA).setUnlocalizedName("laser_crystal_dnt").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":laser_crystal_dnt"); - laser_crystal_digamma = new ItemFELCrystal(EnumWavelengths.DRX).setUnlocalizedName("laser_crystal_digamma").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":laser_crystal_digamma"); - - thermo_element = new Item().setUnlocalizedName("thermo_element").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":thermo_element"); - catalytic_converter = new Item().setUnlocalizedName("catalytic_converter").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":catalytic_converter"); - - fuel_additive = new ItemEnumMulti(ItemEnums.EnumFuelAdditive.class, true, true).setUnlocalizedName("fuel_additive").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fuel_additive"); - - canister_empty = new ItemCustomLore().setUnlocalizedName("canister_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":canister_empty"); - canister_full = new ItemCanister().setUnlocalizedName("canister_full").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.canister_empty).setTextureName(RefStrings.MODID + ":canister_empty"); - canister_napalm = new ItemCustomLore().setUnlocalizedName("canister_napalm").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.canister_empty).setTextureName(RefStrings.MODID + ":canister_napalm"); - gas_empty = new Item().setUnlocalizedName("gas_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":gas_empty"); - gas_full = new ItemGasTank().setUnlocalizedName("gas_full").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.gas_empty).setTextureName(RefStrings.MODID + ":gas_empty"); - - ItemSimpleConsumable.init(); - - //TODO: move all this crap to ItemSimpleConsumable - syringe_empty = new Item().setUnlocalizedName("syringe_empty").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_empty"); - syringe_metal_empty = new Item().setUnlocalizedName("syringe_metal_empty").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_empty"); - syringe_metal_stimpak = new ItemSyringe().setUnlocalizedName("syringe_metal_stimpak").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_stimpak"); - syringe_metal_medx = new ItemSyringe().setUnlocalizedName("syringe_metal_medx").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_medx"); - syringe_metal_psycho = new ItemSyringe().setUnlocalizedName("syringe_metal_psycho").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_psycho"); - syringe_metal_super = new ItemSyringe().setUnlocalizedName("syringe_metal_super").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_super"); - syringe_taint = new ItemSyringe().setUnlocalizedName("syringe_taint").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_taint"); - syringe_mkunicorn = new ItemSyringe().setUnlocalizedName("syringe_mkunicorn").setFull3D().setCreativeTab(null).setTextureName(RefStrings.MODID + ":syringe_mkunicorn"); - - med_bag = new ItemSyringe().setUnlocalizedName("med_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_bag"); - radx = new ItemPill(0).setUnlocalizedName("radx").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radx"); - siox = new ItemPill(0).setUnlocalizedName("siox").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":siox"); - pill_herbal = new ItemPill(0).setUnlocalizedName("pill_herbal").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pill_herbal"); - xanax = new ItemPill(0).setUnlocalizedName("xanax").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":xanax_2"); - fmn = new ItemPill(0).setUnlocalizedName("fmn").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":tablet"); - five_htp = new ItemPill(0).setUnlocalizedName("five_htp").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":5htp"); - pill_iodine = new ItemPill(0).setUnlocalizedName("pill_iodine").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pill_iodine"); - plan_c = new ItemPill(0).setUnlocalizedName("plan_c").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":plan_c"); - pill_red = new ItemPill(0).setUnlocalizedName("pill_red").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pill_red"); - stealth_boy = new ItemStarterKit().setUnlocalizedName("stealth_boy").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":stealth_boy"); - gas_mask_filter = new ItemFilter().setUnlocalizedName("gas_mask_filter").setTextureName(RefStrings.MODID + ":gas_mask_filter"); - gas_mask_filter_mono = new ItemFilter().setUnlocalizedName("gas_mask_filter_mono").setTextureName(RefStrings.MODID + ":gas_mask_filter_mono"); - gas_mask_filter_combo = new ItemFilter().setUnlocalizedName("gas_mask_filter_combo").setTextureName(RefStrings.MODID + ":gas_mask_filter_combo"); - gas_mask_filter_rag = new ItemFilter().setUnlocalizedName("gas_mask_filter_rag").setTextureName(RefStrings.MODID + ":gas_mask_filter_rag"); - gas_mask_filter_piss = new ItemFilter().setUnlocalizedName("gas_mask_filter_piss").setTextureName(RefStrings.MODID + ":gas_mask_filter_piss"); - jetpack_tank = new ItemSyringe().setUnlocalizedName("jetpack_tank").setMaxStackSize(16).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":jetpack_tank"); - gun_kit_1 = new ItemRepairKit(10).setUnlocalizedName("gun_kit_1").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":gun_kit_1"); - gun_kit_2 = new ItemRepairKit(100).setUnlocalizedName("gun_kit_2").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":gun_kit_2"); - cbt_device = new ItemSyringe().setUnlocalizedName("cbt_device").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":cbt_device"); - cigarette = new ItemCigarette().setUnlocalizedName("cigarette").setFull3D().setMaxStackSize(16).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cigarette"); - crackpipe = new ItemCigarette().setUnlocalizedName("crackpipe").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":crackpipe"); - bdcl = new ItemBDCL().setUnlocalizedName("bdcl").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bdcl"); - - attachment_mask = new ItemModGasmask().setUnlocalizedName("attachment_mask").setTextureName(RefStrings.MODID + ":attachment_mask"); - attachment_mask_mono = new ItemModGasmask().setUnlocalizedName("attachment_mask_mono").setTextureName(RefStrings.MODID + ":attachment_mask_mono"); - back_tesla = new ItemModTesla().setUnlocalizedName("back_tesla").setTextureName(RefStrings.MODID + ":back_tesla"); - servo_set = new ItemModServos().setUnlocalizedName("servo_set").setTextureName(RefStrings.MODID + ":servo_set"); - servo_set_desh = new ItemModServos().setUnlocalizedName("servo_set_desh").setTextureName(RefStrings.MODID + ":servo_set_desh"); - pads_rubber = new ItemModPads(0.5F).setUnlocalizedName("pads_rubber").setTextureName(RefStrings.MODID + ":pads_rubber"); - pads_slime = new ItemModPads(0.25F).setUnlocalizedName("pads_slime").setTextureName(RefStrings.MODID + ":pads_slime"); - pads_static = new ItemModPads(0.75F).setUnlocalizedName("pads_static").setTextureName(RefStrings.MODID + ":pads_static"); - cladding_paint = new ItemModCladding(0.025).setUnlocalizedName("cladding_paint").setTextureName(RefStrings.MODID + ":cladding_paint"); - cladding_rubber = new ItemModCladding(0.005).setUnlocalizedName("cladding_rubber").setTextureName(RefStrings.MODID + ":cladding_rubber"); - cladding_lead = new ItemModCladding(0.1).setUnlocalizedName("cladding_lead").setTextureName(RefStrings.MODID + ":cladding_lead"); - cladding_desh = new ItemModCladding(0.2).setUnlocalizedName("cladding_desh").setTextureName(RefStrings.MODID + ":cladding_desh"); - cladding_ghiorsium = new ItemModCladding(0.5).setUnlocalizedName("cladding_ghiorsium").setTextureName(RefStrings.MODID + ":cladding_ghiorsium"); - cladding_iron = new ItemModIron().setUnlocalizedName("cladding_iron").setTextureName(RefStrings.MODID + ":cladding_iron"); - cladding_obsidian = new ItemModObsidian().setUnlocalizedName("cladding_obsidian").setTextureName(RefStrings.MODID + ":cladding_obsidian"); - insert_kevlar = new ItemModInsert(1500, 1F, 0.9F, 1F, 1F).setUnlocalizedName("insert_kevlar").setTextureName(RefStrings.MODID + ":insert_kevlar"); - insert_sapi = new ItemModInsert(1750, 1F, 0.85F, 1F, 1F).setUnlocalizedName("insert_sapi").setTextureName(RefStrings.MODID + ":insert_sapi"); - insert_esapi = new ItemModInsert(2000, 0.95F, 0.8F, 1F, 1F).setUnlocalizedName("insert_esapi").setTextureName(RefStrings.MODID + ":insert_esapi"); - insert_xsapi = new ItemModInsert(2500, 0.9F, 0.75F, 1F, 1F).setUnlocalizedName("insert_xsapi").setTextureName(RefStrings.MODID + ":insert_xsapi"); - insert_steel = new ItemModInsert(1000, 1F, 0.95F, 0.75F, 0.95F).setUnlocalizedName("insert_steel").setTextureName(RefStrings.MODID + ":insert_steel"); - insert_du = new ItemModInsert(1500, 0.9F, 0.85F, 0.5F, 0.9F).setUnlocalizedName("insert_du").setTextureName(RefStrings.MODID + ":insert_du"); - insert_polonium = new ItemModInsert(500, 0.9F, 1F, 0.95F, 0.9F).setUnlocalizedName("insert_polonium").setTextureName(RefStrings.MODID + ":insert_polonium"); - insert_ghiorsium = new ItemModInsert(2000, 0.8F, 0.75F, 0.35F, 0.9F).setUnlocalizedName("insert_ghiorsium").setTextureName(RefStrings.MODID + ":insert_ghiorsium"); - insert_era = new ItemModInsert(25, 0.5F, 1F, 0.25F, 1F).setUnlocalizedName("insert_era").setTextureName(RefStrings.MODID + ":insert_era"); - insert_yharonite = new ItemModInsert(9999, 0.01F, 1F, 1F, 1F).setUnlocalizedName("insert_yharonite").setTextureName(RefStrings.MODID + ":insert_yharonite"); - insert_doxium = new ItemModInsert(9999, 5.0F, 1F, 1F, 1F).setUnlocalizedName("insert_doxium").setTextureName(RefStrings.MODID + ":insert_doxium"); - armor_polish = new ItemModPolish().setUnlocalizedName("armor_polish").setTextureName(RefStrings.MODID + ":armor_polish"); - bandaid = new ItemModBandaid().setUnlocalizedName("bandaid").setTextureName(RefStrings.MODID + ":bandaid"); - serum = new ItemModSerum().setUnlocalizedName("serum").setTextureName(RefStrings.MODID + ":serum"); - quartz_plutonium = new ItemModQuartz().setUnlocalizedName("quartz_plutonium").setTextureName(RefStrings.MODID + ":quartz_plutonium"); - morning_glory = new ItemModMorningGlory().setUnlocalizedName("morning_glory").setTextureName(RefStrings.MODID + ":morning_glory"); - lodestone = new ItemModLodestone(5).setUnlocalizedName("lodestone").setTextureName(RefStrings.MODID + ":lodestone"); - horseshoe_magnet = new ItemModLodestone(8).setUnlocalizedName("horseshoe_magnet").setTextureName(RefStrings.MODID + ":horseshoe_magnet"); - industrial_magnet = new ItemModLodestone(12).setUnlocalizedName("industrial_magnet").setTextureName(RefStrings.MODID + ":industrial_magnet"); - bathwater = new ItemModBathwater().setUnlocalizedName("bathwater").setTextureName(RefStrings.MODID + ":bathwater"); - bathwater_mk2 = new ItemModBathwater().setUnlocalizedName("bathwater_mk2").setTextureName(RefStrings.MODID + ":bathwater_mk2"); - spider_milk = new ItemModMilk().setUnlocalizedName("spider_milk").setTextureName(RefStrings.MODID + ":spider_milk"); - ink = new ItemModInk().setUnlocalizedName("ink").setTextureName(RefStrings.MODID + ":ink"); - heart_piece = new ItemModHealth(5F).setUnlocalizedName("heart_piece").setTextureName(RefStrings.MODID + ":heart_piece"); - heart_container = new ItemModHealth(20F).setUnlocalizedName("heart_container").setTextureName(RefStrings.MODID + ":heart_container"); - heart_booster = new ItemModHealth(40F).setUnlocalizedName("heart_booster").setTextureName(RefStrings.MODID + ":heart_booster"); - heart_fab = new ItemModHealth(60F).setUnlocalizedName("heart_fab").setTextureName(RefStrings.MODID + ":heart_fab"); - black_diamond = new ItemModHealth(40F).setUnlocalizedName("black_diamond").setTextureName(RefStrings.MODID + ":black_diamond"); - wd40 = new ItemModWD40().setUnlocalizedName("wd40").setTextureName(RefStrings.MODID + ":wd40"); - scrumpy = new ItemModRevive(1).setUnlocalizedName("scrumpy").setTextureName(RefStrings.MODID + ":scrumpy"); - wild_p = new ItemModRevive(3).setUnlocalizedName("wild_p").setTextureName(RefStrings.MODID + ":wild_p"); - fabsols_vodka = new ItemModRevive(9999).setUnlocalizedName("fabsols_vodka").setTextureName(RefStrings.MODID + ":fabsols_vodka"); - shackles = new ItemModShackles().setUnlocalizedName("shackles").setTextureName(RefStrings.MODID + ":shackles"); - injector_5htp = new ItemModAuto().setUnlocalizedName("injector_5htp").setTextureName(RefStrings.MODID + ":injector_5htp"); - injector_knife = new ItemModKnife().setUnlocalizedName("injector_knife").setTextureName(RefStrings.MODID + ":injector_knife"); - medal_liquidator = new ItemModMedal().setUnlocalizedName("medal_liquidator").setTextureName(RefStrings.MODID + ":medal_liquidator"); - bottled_cloud = new ItemModCloud().setUnlocalizedName("bottled_cloud").setTextureName(RefStrings.MODID + ":bottled_cloud"); - protection_charm = new ItemModCharm().setUnlocalizedName("protection_charm").setTextureName(RefStrings.MODID + ":protection_charm"); - meteor_charm = new ItemModCharm().setUnlocalizedName("meteor_charm").setTextureName(RefStrings.MODID + ":meteor_charm"); - neutrino_lens = new ItemModLens().setUnlocalizedName("neutrino_lens").setTextureName(RefStrings.MODID + ":neutrino_lens"); - gas_tester = new ItemModSensor().setUnlocalizedName("gas_tester").setTextureName(RefStrings.MODID + ":gas_tester"); - defuser_gold = new ItemModDefuser().setUnlocalizedName("defuser_gold").setTextureName(RefStrings.MODID + ":defuser_gold"); - ballistic_gauntlet = new ItemModTwoKick().setUnlocalizedName("ballistic_gauntlet").setTextureName(RefStrings.MODID + ":ballistic_gauntlet"); - night_vision = new ItemModNightVision().setUnlocalizedName("night_vision").setTextureName(RefStrings.MODID + ":night_vision"); - card_aos = new ItemModCard().setUnlocalizedName("card_aos").setTextureName(RefStrings.MODID + ":card_aos"); - card_qos = new ItemModCard().setUnlocalizedName("card_qos").setTextureName(RefStrings.MODID + ":card_qos"); - australium_iii = new ItemModShield(25F).setUnlocalizedName("australium_iii").setTextureName(RefStrings.MODID + ":australium_iii"); - armor_battery = new ItemModBattery(1.25D).setUnlocalizedName("armor_battery").setTextureName(RefStrings.MODID + ":armor_battery"); - armor_battery_mk2 = new ItemModBattery(1.5D).setUnlocalizedName("armor_battery_mk2").setTextureName(RefStrings.MODID + ":armor_battery_mk2"); - armor_battery_mk3 = new ItemModBattery(2D).setUnlocalizedName("armor_battery_mk3").setTextureName(RefStrings.MODID + ":armor_battery_mk3"); - - cap_nuka = new Item().setUnlocalizedName("cap_nuka").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_nuka"); - cap_quantum = new Item().setUnlocalizedName("cap_quantum").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_quantum"); - cap_sparkle = new Item().setUnlocalizedName("cap_sparkle").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_sparkle"); - cap_rad = new Item().setUnlocalizedName("cap_rad").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_rad"); - cap_korl = new Item().setUnlocalizedName("cap_korl").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_korl"); - cap_fritz = new Item().setUnlocalizedName("cap_fritz").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_fritz"); - ring_pull = new Item().setUnlocalizedName("ring_pull").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ring_pull"); - - can_empty = new Item().setUnlocalizedName("can_empty").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_empty"); - can_smart = new ItemEnergy().makeCan().setUnlocalizedName("can_smart").setTextureName(RefStrings.MODID + ":can_smart"); - can_creature = new ItemEnergy().makeCan().setUnlocalizedName("can_creature").setTextureName(RefStrings.MODID + ":can_creature"); - can_redbomb = new ItemEnergy().makeCan().setUnlocalizedName("can_redbomb").setTextureName(RefStrings.MODID + ":can_redbomb"); - can_mrsugar = new ItemEnergy().makeCan().setUnlocalizedName("can_mrsugar").setTextureName(RefStrings.MODID + ":can_mrsugar"); - can_overcharge = new ItemEnergy().makeCan().setUnlocalizedName("can_overcharge").setTextureName(RefStrings.MODID + ":can_overcharge"); - can_luna = new ItemEnergy().makeCan().setUnlocalizedName("can_luna").setTextureName(RefStrings.MODID + ":can_luna"); - can_bepis = new ItemEnergy().makeCan().setUnlocalizedName("can_bepis").setTextureName(RefStrings.MODID + ":can_bepis"); - can_breen = new ItemEnergy().makeCan().setUnlocalizedName("can_breen").setTextureName(RefStrings.MODID + ":can_breen"); - can_mug = new ItemEnergy().makeCan().setUnlocalizedName("can_mug").setTextureName(RefStrings.MODID + ":can_mug"); - bottle_empty = new Item().setUnlocalizedName("bottle_empty").setTextureName(RefStrings.MODID + ":bottle_empty"); - bottle_nuka = new ItemEnergy().makeBottle(bottle_empty, cap_nuka).setUnlocalizedName("bottle_nuka").setTextureName(RefStrings.MODID + ":bottle_nuka"); - bottle_cherry = new ItemEnergy().makeBottle(bottle_empty, cap_nuka).setUnlocalizedName("bottle_cherry").setContainerItem(ModItems.bottle_empty).setTextureName(RefStrings.MODID + ":bottle_cherry"); - bottle_quantum = new ItemEnergy().makeBottle(bottle_empty, cap_quantum).setUnlocalizedName("bottle_quantum").setContainerItem(ModItems.bottle_empty).setTextureName(RefStrings.MODID + ":bottle_quantum"); - bottle_sparkle = new ItemEnergy().makeBottle(bottle_empty, cap_sparkle).setUnlocalizedName("bottle_sparkle").setContainerItem(ModItems.bottle_empty).setTextureName(RefStrings.MODID + ":bottle_sparkle"); - bottle_rad = new ItemEnergy().makeBottle(bottle_empty, cap_rad).setUnlocalizedName("bottle_rad").setContainerItem(ModItems.bottle_empty).setTextureName(RefStrings.MODID + ":bottle_rad"); - bottle2_empty = new Item().setUnlocalizedName("bottle2_empty").setTextureName(RefStrings.MODID + ":bottle2_empty"); - bottle2_korl = new ItemEnergy().makeBottle(bottle2_empty, cap_korl).setUnlocalizedName("bottle2_korl").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_korl"); - bottle2_fritz = new ItemEnergy().makeBottle(bottle2_empty, cap_fritz).setUnlocalizedName("bottle2_fritz").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_fritz"); - bottle2_korl_special = new ItemEnergy().makeBottle(bottle2_empty, cap_korl).setUnlocalizedName("bottle2_korl_special").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_korl"); - bottle2_fritz_special = new ItemEnergy().makeBottle(bottle2_empty, cap_fritz).setUnlocalizedName("bottle2_fritz_special").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_fritz"); - flask_infusion = new ItemFlask().setUnlocalizedName("flask_infusion").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":flask"); - chocolate_milk = new ItemEnergy().setUnlocalizedName("chocolate_milk").setTextureName(RefStrings.MODID + ":chocolate_milk"); - coffee = new ItemEnergy().setUnlocalizedName("coffee").setTextureName(RefStrings.MODID + ":coffee"); - coffee_radium = new ItemEnergy().setUnlocalizedName("coffee_radium").setTextureName(RefStrings.MODID + ":coffee_radium"); - chocolate = new ItemPill(0).setUnlocalizedName("chocolate").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":chocolate"); - canned_conserve = (ItemEnumMulti) new ItemConserve().setUnlocalizedName("canned_conserve").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned"); - can_key = new Item().setUnlocalizedName("can_key").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_key"); - - boat_rubber = new ItemBoatRubber().setUnlocalizedName("boat_rubber").setTextureName(RefStrings.MODID + ":boat_rubber"); - cart = new ItemModMinecart().setUnlocalizedName("cart"); - train = new ItemTrain().setUnlocalizedName("train"); - drone = new ItemDrone().setUnlocalizedName("drone"); - - coin_creeper = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_creeper").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_creeper"); - coin_radiation = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_radiation").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_radiation"); - coin_maskman = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_maskman").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_maskman"); - coin_worm = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_worm").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_worm"); - coin_ufo = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_ufo").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_ufo"); - - rod_empty = new Item().setUnlocalizedName("rod_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_empty"); - rod = (ItemEnumMulti) new ItemBreedingRod().setUnlocalizedName("rod").setContainerItem(ModItems.rod_empty).setCreativeTab(MainRegistry.controlTab); - rod_dual_empty = new Item().setUnlocalizedName("rod_dual_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_dual_empty"); - rod_dual = (ItemEnumMulti) new ItemBreedingRod().setUnlocalizedName("rod_dual").setContainerItem(ModItems.rod_dual_empty).setCreativeTab(MainRegistry.controlTab); - rod_quad_empty = new Item().setUnlocalizedName("rod_quad_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_quad_empty"); - rod_quad = (ItemEnumMulti) new ItemBreedingRod().setUnlocalizedName("rod_quad").setContainerItem(ModItems.rod_quad_empty).setCreativeTab(MainRegistry.controlTab); - - rod_zirnox_empty = new Item().setUnlocalizedName("rod_zirnox_empty").setMaxStackSize(64).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_empty"); - //rod_zirnox_natural_uranium_fuel = new ItemZirnoxRodDeprecated(250000, 30).setUnlocalizedName("rod_zirnox_natural_uranium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_natural_uranium_fuel"); - //rod_zirnox_uranium_fuel = new ItemZirnoxRodDeprecated(200000, 50).setUnlocalizedName("rod_zirnox_uranium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_uranium_fuel"); - //rod_zirnox_th232 = new ItemZirnoxBreedingRod(20000, 0).setUnlocalizedName("rod_zirnox_th232").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_th232"); - //rod_zirnox_thorium_fuel = new ItemZirnoxRodDeprecated(200000, 40).setUnlocalizedName("rod_zirnox_thorium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_thorium_fuel"); - //rod_zirnox_mox_fuel = new ItemZirnoxRodDeprecated(165000, 75).setUnlocalizedName("rod_zirnox_mox_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_mox_fuel"); - //rod_zirnox_plutonium_fuel = new ItemZirnoxRodDeprecated(175000, 65).setUnlocalizedName("rod_zirnox_plutonium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_plutonium_fuel"); - //rod_zirnox_u233_fuel = new ItemZirnoxRodDeprecated(150000, 100).setUnlocalizedName("rod_zirnox_u233_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_u233_fuel"); - //rod_zirnox_u235_fuel = new ItemZirnoxRodDeprecated(165000, 85).setUnlocalizedName("rod_zirnox_u235_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_u235_fuel"); - //rod_zirnox_les_fuel = new ItemZirnoxRodDeprecated(150000, 150).setUnlocalizedName("rod_zirnox_les_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_les_fuel"); - //rod_zirnox_lithium = new ItemZirnoxBreedingRod(20000, 0).setUnlocalizedName("rod_zirnox_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_lithium"); - rod_zirnox_tritium = new Item().setUnlocalizedName("rod_zirnox_tritium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_tritium"); - //rod_zirnox_zfb_mox = new ItemZirnoxRodDeprecated(50000, 35).setUnlocalizedName("rod_zirnox_zfb_mox").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_zfb_mox"); - rod_zirnox = (ItemEnumMulti) new ItemZirnoxRod().setUnlocalizedName("rod_zirnox").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox"); - - rod_zirnox_natural_uranium_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_natural_uranium_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_uranium_fuel_depleted"); - rod_zirnox_uranium_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_uranium_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_uranium_fuel_depleted"); - rod_zirnox_thorium_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_thorium_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_thorium_fuel_depleted"); - rod_zirnox_mox_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_mox_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_mox_fuel_depleted"); - rod_zirnox_plutonium_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_plutonium_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_plutonium_fuel_depleted"); - rod_zirnox_u233_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_u233_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_u233_fuel_depleted"); - rod_zirnox_u235_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_u235_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_u235_fuel_depleted"); - rod_zirnox_les_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_les_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_les_fuel_depleted"); - rod_zirnox_zfb_mox_depleted = new Item().setUnlocalizedName("rod_zirnox_zfb_mox_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_zfb_mox_depleted"); - - waste_natural_uranium = new ItemDepletedFuel().setUnlocalizedName("waste_natural_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_uranium"); - waste_uranium = new ItemDepletedFuel().setUnlocalizedName("waste_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_uranium"); - waste_thorium = new ItemDepletedFuel().setUnlocalizedName("waste_thorium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_thorium"); - waste_mox = new ItemDepletedFuel().setUnlocalizedName("waste_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_mox"); - waste_plutonium = new ItemDepletedFuel().setUnlocalizedName("waste_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plutonium"); - waste_u233 = new ItemDepletedFuel().setUnlocalizedName("waste_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_uranium"); - waste_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_uranium"); - waste_schrabidium = new ItemDepletedFuel().setUnlocalizedName("waste_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_schrabidium"); - waste_zfb_mox = new ItemDepletedFuel().setUnlocalizedName("waste_zfb_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_zfb_mox"); - - waste_plate_u233 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_uranium"); - waste_plate_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_uranium"); - waste_plate_mox = new ItemDepletedFuel().setUnlocalizedName("waste_plate_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_mox"); - waste_plate_pu239 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_mox"); - waste_plate_sa326 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_sa326").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_sa326"); - waste_plate_ra226be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_ra226be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_ra226be"); - waste_plate_pu238be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu238be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_pu238be"); - - pile_rod_uranium = new ItemPileRod().setUnlocalizedName("pile_rod_uranium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_uranium"); - pile_rod_pu239 = new ItemPileRod().setUnlocalizedName("pile_rod_pu239").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_pu239"); - pile_rod_plutonium = new ItemPileRod().setUnlocalizedName("pile_rod_plutonium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_plutonium"); - pile_rod_source = new ItemPileRod().setUnlocalizedName("pile_rod_source").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_source"); - pile_rod_boron = new ItemPileRod().setUnlocalizedName("pile_rod_boron").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_boron"); - pile_rod_lithium = new ItemPileRod().setUnlocalizedName("pile_rod_lithium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_lithium"); - pile_rod_detector = new ItemPileRod().setUnlocalizedName("pile_rod_detector").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_detector"); - - plate_fuel_u233 = new ItemPlateFuel(2200000).setFunction(FunctionEnum.SQUARE_ROOT, 50).setUnlocalizedName("plate_fuel_u233").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_u233"); - plate_fuel_u235 = new ItemPlateFuel(2200000).setFunction(FunctionEnum.SQUARE_ROOT, 40).setUnlocalizedName("plate_fuel_u235").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_u235"); - plate_fuel_mox = new ItemPlateFuel(2400000).setFunction(FunctionEnum.LOGARITHM, 50).setUnlocalizedName("plate_fuel_mox").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_mox"); - plate_fuel_pu239 = new ItemPlateFuel(2000000).setFunction(FunctionEnum.NEGATIVE_QUADRATIC, 50).setUnlocalizedName("plate_fuel_pu239").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_pu239"); - plate_fuel_sa326 = new ItemPlateFuel(2000000).setFunction(FunctionEnum.LINEAR, 80).setUnlocalizedName("plate_fuel_sa326").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_sa326"); - plate_fuel_ra226be = new ItemPlateFuel(1300000).setFunction(FunctionEnum.PASSIVE, 30).setUnlocalizedName("plate_fuel_ra226be").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_ra226be"); - plate_fuel_pu238be = new ItemPlateFuel(1000000).setFunction(FunctionEnum.PASSIVE, 50).setUnlocalizedName("plate_fuel_pu238be").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_pu238be"); - - pwr_fuel = new ItemPWRFuel().setUnlocalizedName("pwr_fuel").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pwr_fuel"); - pwr_fuel_hot = new ItemEnumMulti(EnumPWRFuel.class, true, false).setUnlocalizedName("pwr_fuel_hot").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pwr_fuel_hot"); - pwr_fuel_depleted = new ItemEnumMulti(EnumPWRFuel.class, true, false).setUnlocalizedName("pwr_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pwr_fuel_depleted"); - - rbmk_lid = new ItemRBMKLid().setUnlocalizedName("rbmk_lid").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rbmk_lid"); - rbmk_lid_glass = new ItemRBMKLid().setUnlocalizedName("rbmk_lid_glass").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rbmk_lid_glass"); - - rbmk_pellet_ueu = (ItemRBMKPellet) new ItemRBMKPellet("Unenriched Uranium").setUnlocalizedName("rbmk_pellet_ueu").setTextureName(RefStrings.MODID + ":rbmk_pellet_ueu"); - rbmk_pellet_meu = (ItemRBMKPellet) new ItemRBMKPellet("Medium Enriched Uranium-235").setUnlocalizedName("rbmk_pellet_meu").setTextureName(RefStrings.MODID + ":rbmk_pellet_meu"); - rbmk_pellet_heu233 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Uranium-233").setUnlocalizedName("rbmk_pellet_heu233").setTextureName(RefStrings.MODID + ":rbmk_pellet_heu233"); - rbmk_pellet_heu235 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Uranium-235").setUnlocalizedName("rbmk_pellet_heu235").setTextureName(RefStrings.MODID + ":rbmk_pellet_heu235"); - rbmk_pellet_thmeu = (ItemRBMKPellet) new ItemRBMKPellet("Thorium with MEU Driver Fuel").setUnlocalizedName("rbmk_pellet_thmeu").setTextureName(RefStrings.MODID + ":rbmk_pellet_thmeu"); - rbmk_pellet_lep = (ItemRBMKPellet) new ItemRBMKPellet("Low Enriched Plutonium-239").setUnlocalizedName("rbmk_pellet_lep").setTextureName(RefStrings.MODID + ":rbmk_pellet_lep"); - rbmk_pellet_mep = (ItemRBMKPellet) new ItemRBMKPellet("Medium Enriched Plutonium-239").setUnlocalizedName("rbmk_pellet_mep").setTextureName(RefStrings.MODID + ":rbmk_pellet_mep"); - rbmk_pellet_hep239 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Plutonium-239").setUnlocalizedName("rbmk_pellet_hep239").setTextureName(RefStrings.MODID + ":rbmk_pellet_hep239"); - rbmk_pellet_hep241 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Plutonium-241").setUnlocalizedName("rbmk_pellet_hep241").setTextureName(RefStrings.MODID + ":rbmk_pellet_hep241"); - rbmk_pellet_lea = (ItemRBMKPellet) new ItemRBMKPellet("Low Enriched Americium-242").setUnlocalizedName("rbmk_pellet_lea").setTextureName(RefStrings.MODID + ":rbmk_pellet_lea"); - rbmk_pellet_mea = (ItemRBMKPellet) new ItemRBMKPellet("Medium Enriched Americium-242").setUnlocalizedName("rbmk_pellet_mea").setTextureName(RefStrings.MODID + ":rbmk_pellet_mea"); - rbmk_pellet_hea241 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Americium-241").setUnlocalizedName("rbmk_pellet_hea241").setTextureName(RefStrings.MODID + ":rbmk_pellet_hea241"); - rbmk_pellet_hea242 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Americium-242").setUnlocalizedName("rbmk_pellet_hea242").setTextureName(RefStrings.MODID + ":rbmk_pellet_hea242"); - rbmk_pellet_men = (ItemRBMKPellet) new ItemRBMKPellet("Medium Enriched Neptunium-237").setUnlocalizedName("rbmk_pellet_men").setTextureName(RefStrings.MODID + ":rbmk_pellet_men"); - rbmk_pellet_hen = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Neptunium-237").setUnlocalizedName("rbmk_pellet_hen").setTextureName(RefStrings.MODID + ":rbmk_pellet_hen"); - rbmk_pellet_mox = (ItemRBMKPellet) new ItemRBMKPellet("Mixed MEU & LEP Oxide").setUnlocalizedName("rbmk_pellet_mox").setTextureName(RefStrings.MODID + ":rbmk_pellet_mox"); - rbmk_pellet_les = (ItemRBMKPellet) new ItemRBMKPellet("Low Enriched Schrabidium-326").setUnlocalizedName("rbmk_pellet_les").setTextureName(RefStrings.MODID + ":rbmk_pellet_les"); - rbmk_pellet_mes = (ItemRBMKPellet) new ItemRBMKPellet("Medium Enriched Schrabidium-326").setUnlocalizedName("rbmk_pellet_mes").setTextureName(RefStrings.MODID + ":rbmk_pellet_mes"); - rbmk_pellet_hes = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Schrabidium-326").setUnlocalizedName("rbmk_pellet_hes").setTextureName(RefStrings.MODID + ":rbmk_pellet_hes"); - rbmk_pellet_leaus = (ItemRBMKPellet) new ItemRBMKPellet("Low Enriched Australium (Tasmanite)").setUnlocalizedName("rbmk_pellet_leaus").setTextureName(RefStrings.MODID + ":rbmk_pellet_leaus"); - rbmk_pellet_heaus = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Australium (Ayerite)").setUnlocalizedName("rbmk_pellet_heaus").setTextureName(RefStrings.MODID + ":rbmk_pellet_heaus"); - rbmk_pellet_po210be = (ItemRBMKPellet) new ItemRBMKPellet("Polonium-210 & Beryllium Neutron Source").disableXenon().setUnlocalizedName("rbmk_pellet_po210be").setTextureName(RefStrings.MODID + ":rbmk_pellet_po210be"); - rbmk_pellet_ra226be = (ItemRBMKPellet) new ItemRBMKPellet("Radium-226 & Beryllium Neutron Source").disableXenon().setUnlocalizedName("rbmk_pellet_ra226be").setTextureName(RefStrings.MODID + ":rbmk_pellet_ra226be"); - rbmk_pellet_pu238be = (ItemRBMKPellet) new ItemRBMKPellet("Plutonium-238 & Beryllium Neutron Source").setUnlocalizedName("rbmk_pellet_pu238be").setTextureName(RefStrings.MODID + ":rbmk_pellet_pu238be"); - rbmk_pellet_balefire_gold = (ItemRBMKPellet) new ItemRBMKPellet("Antihydrogen in a Magnetized Gold-198 Lattice").disableXenon().setUnlocalizedName("rbmk_pellet_balefire_gold").setTextureName(RefStrings.MODID + ":rbmk_pellet_balefire_gold"); - rbmk_pellet_flashlead = (ItemRBMKPellet) new ItemRBMKPellet("Antihydrogen confined by a Magnetized Gold-198 and Lead-209 Lattice").disableXenon().setUnlocalizedName("rbmk_pellet_flashlead").setTextureName(RefStrings.MODID + ":rbmk_pellet_flashlead"); - rbmk_pellet_balefire = (ItemRBMKPellet) new ItemRBMKPellet("Draconic Flames").disableXenon().setUnlocalizedName("rbmk_pellet_balefire").setTextureName(RefStrings.MODID + ":rbmk_pellet_balefire"); - rbmk_pellet_zfb_bismuth = (ItemRBMKPellet) new ItemRBMKPellet("Zirconium Fast Breeder - LEU/HEP-241#Bi").setUnlocalizedName("rbmk_pellet_zfb_bismuth").setTextureName(RefStrings.MODID + ":rbmk_pellet_zfb_bismuth"); - rbmk_pellet_zfb_pu241 = (ItemRBMKPellet) new ItemRBMKPellet("Zirconium Fast Breeder - HEU-235/HEP-240#Pu-241").setUnlocalizedName("rbmk_pellet_zfb_pu241").setTextureName(RefStrings.MODID + ":rbmk_pellet_zfb_pu241"); - rbmk_pellet_zfb_am_mix = (ItemRBMKPellet) new ItemRBMKPellet("Zirconium Fast Breeder - HEP-241#MEA").setUnlocalizedName("rbmk_pellet_zfb_am_mix").setTextureName(RefStrings.MODID + ":rbmk_pellet_zfb_am_mix"); - rbmk_pellet_drx = (ItemRBMKPellet) new ItemRBMKPellet(EnumChatFormatting.OBFUSCATED + "can't you hear, can't you hear the thunder?").setUnlocalizedName("rbmk_pellet_drx").setTextureName(RefStrings.MODID + ":rbmk_pellet_drx"); - - rbmk_fuel_empty = new Item().setUnlocalizedName("rbmk_fuel_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rbmk_fuel_empty"); - rbmk_fuel_ueu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_ueu) - .setYield(100000000D) - .setStats(15) - .setFunction(EnumBurnFunc.LOG_TEN) - .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) - .setHeat(0.65) //0.5 is too much of a nerf in heat; pu239 buildup justifies it being on par with MEU ig - .setMeltingPoint(2865) - .setUnlocalizedName("rbmk_fuel_ueu").setTextureName(RefStrings.MODID + ":rbmk_fuel_ueu"); - rbmk_fuel_meu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_meu) - .setYield(100000000D) - .setStats(20) - .setFunction(EnumBurnFunc.LOG_TEN) - .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) - .setHeat(0.65) //0.75 was a bit too much... - .setMeltingPoint(2865) - .setUnlocalizedName("rbmk_fuel_meu").setTextureName(RefStrings.MODID + ":rbmk_fuel_meu"); - rbmk_fuel_heu233 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_heu233) - .setYield(100000000D) - .setStats(27.5D) - .setFunction(EnumBurnFunc.LINEAR) - .setHeat(1.25D) - .setMeltingPoint(2865) - .setUnlocalizedName("rbmk_fuel_heu233").setTextureName(RefStrings.MODID + ":rbmk_fuel_heu233"); - rbmk_fuel_heu235 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_heu235) - .setYield(100000000D) - .setStats(50) //Consistency with HEN; its critical mass is too high to justify a linear function - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setMeltingPoint(2865) - .setUnlocalizedName("rbmk_fuel_heu235").setTextureName(RefStrings.MODID + ":rbmk_fuel_heu235"); - rbmk_fuel_thmeu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_thmeu) - .setYield(100000000D) - .setStats(20) - .setFunction(EnumBurnFunc.PLATEU) - .setDepletionFunction(EnumDepleteFunc.BOOSTED_SLOPE) - .setHeat(0.65D) //Consistency with MEU - .setMeltingPoint(3350) - .setUnlocalizedName("rbmk_fuel_thmeu").setTextureName(RefStrings.MODID + ":rbmk_fuel_thmeu"); - rbmk_fuel_lep = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_lep) - .setYield(100000000D) - .setStats(35) - .setFunction(EnumBurnFunc.LOG_TEN) - .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) - .setHeat(0.75D) - .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_lep").setTextureName(RefStrings.MODID + ":rbmk_fuel_lep"); - rbmk_fuel_mep = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mep) - .setYield(100000000D) - .setStats(35) - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_mep").setTextureName(RefStrings.MODID + ":rbmk_fuel_mep"); - rbmk_fuel_hep239 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hep239) - .setYield(100000000D) - .setStats(30) - .setFunction(EnumBurnFunc.LINEAR) - .setHeat(1.25D) - .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_hep").setTextureName(RefStrings.MODID + ":rbmk_fuel_hep"); - rbmk_fuel_hep241 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hep241) - .setYield(100000000D) - .setStats(40) - .setFunction(EnumBurnFunc.LINEAR) - .setHeat(1.75D) - .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_hep241").setTextureName(RefStrings.MODID + ":rbmk_fuel_hep241"); - rbmk_fuel_lea = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_lea) - .setYield(100000000D) - .setStats(60, 10) - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) - .setHeat(1.5D) - .setMeltingPoint(2386) - .setUnlocalizedName("rbmk_fuel_lea").setTextureName(RefStrings.MODID + ":rbmk_fuel_lea"); - rbmk_fuel_mea = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mea) - .setYield(100000000D) - .setStats(35D, 20) - .setFunction(EnumBurnFunc.ARCH) - .setHeat(1.75D) - .setMeltingPoint(2386) - .setUnlocalizedName("rbmk_fuel_mea").setTextureName(RefStrings.MODID + ":rbmk_fuel_mea"); - rbmk_fuel_hea241 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hea241) - .setYield(100000000D) - .setStats(65, 15) - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setHeat(1.85D) - .setMeltingPoint(2386) - .setNeutronTypes(NType.FAST, NType.FAST) - .setUnlocalizedName("rbmk_fuel_hea241").setTextureName(RefStrings.MODID + ":rbmk_fuel_hea241"); - rbmk_fuel_hea242 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hea242) - .setYield(100000000D) - .setStats(45) - .setFunction(EnumBurnFunc.LINEAR) - .setHeat(2D) - .setMeltingPoint(2386) - .setUnlocalizedName("rbmk_fuel_hea242").setTextureName(RefStrings.MODID + ":rbmk_fuel_hea242"); - rbmk_fuel_men = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_men) - .setYield(100000000D) - .setStats(30) - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) - .setHeat(0.75) - .setMeltingPoint(2800) - .setNeutronTypes(NType.ANY, NType.FAST) //Build-up of Pu-239 leads to both speeds of neutrons grooving - .setUnlocalizedName("rbmk_fuel_men").setTextureName(RefStrings.MODID + ":rbmk_fuel_men"); - rbmk_fuel_hen = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hen) - .setYield(100000000D) - .setStats(40) - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setMeltingPoint(2800) - .setNeutronTypes(NType.FAST, NType.FAST) - .setUnlocalizedName("rbmk_fuel_hen").setTextureName(RefStrings.MODID + ":rbmk_fuel_hen"); - rbmk_fuel_mox = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mox) - .setYield(100000000D) - .setStats(40) - .setFunction(EnumBurnFunc.LOG_TEN) - .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) - .setMeltingPoint(2815) - .setUnlocalizedName("rbmk_fuel_mox").setTextureName(RefStrings.MODID + ":rbmk_fuel_mox"); - rbmk_fuel_les = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_les) - .setYield(100000000D) - .setStats(50) - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setHeat(1.25D) - .setMeltingPoint(2500) - .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation - .setUnlocalizedName("rbmk_fuel_les").setTextureName(RefStrings.MODID + ":rbmk_fuel_les"); - rbmk_fuel_mes = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mes) - .setYield(100000000D) - .setStats(75D) - .setFunction(EnumBurnFunc.ARCH) - .setHeat(1.5D) - .setMeltingPoint(2750) - .setUnlocalizedName("rbmk_fuel_mes").setTextureName(RefStrings.MODID + ":rbmk_fuel_mes"); - rbmk_fuel_hes = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hes) - .setYield(100000000D) - .setStats(90) - .setFunction(EnumBurnFunc.LINEAR) - .setDepletionFunction(EnumDepleteFunc.LINEAR) - .setHeat(1.75D) - .setMeltingPoint(3000) - .setUnlocalizedName("rbmk_fuel_hes").setTextureName(RefStrings.MODID + ":rbmk_fuel_hes"); - rbmk_fuel_leaus = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_leaus) - .setYield(100000000D) - .setStats(30) - .setFunction(EnumBurnFunc.SIGMOID) - .setDepletionFunction(EnumDepleteFunc.LINEAR) - .setXenon(0.05D, 50D) - .setHeat(1.5D) - .setMeltingPoint(7029).setUnlocalizedName("rbmk_fuel_leaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_leaus"); - rbmk_fuel_heaus = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_heaus) - .setYield(100000000D) - .setStats(35) - .setFunction(EnumBurnFunc.LINEAR) - .setXenon(0.05D, 50D) - .setHeat(1.5D) - .setMeltingPoint(5211).setUnlocalizedName("rbmk_fuel_heaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_heaus"); - rbmk_fuel_po210be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_po210be) - .setYield(25000000D) - .setStats(0D, 50) - .setFunction(EnumBurnFunc.PASSIVE) - .setDepletionFunction(EnumDepleteFunc.LINEAR) - .setXenon(0.0D, 50D) - .setHeat(0.1D) - .setDiffusion(0.05D) - .setMeltingPoint(1287) - .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation - .setUnlocalizedName("rbmk_fuel_po210be").setTextureName(RefStrings.MODID + ":rbmk_fuel_po210be"); - rbmk_fuel_ra226be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_ra226be) - .setYield(100000000D) - .setStats(0D, 20) - .setFunction(EnumBurnFunc.PASSIVE) - .setDepletionFunction(EnumDepleteFunc.LINEAR) - .setXenon(0.0D, 50D) - .setHeat(0.035D) - .setDiffusion(0.5D) - .setMeltingPoint(700) - .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation - .setUnlocalizedName("rbmk_fuel_ra226be").setTextureName(RefStrings.MODID + ":rbmk_fuel_ra226be"); - rbmk_fuel_pu238be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_pu238be) - .setYield(50000000D) - .setStats(40, 40) - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setHeat(0.1D) - .setDiffusion(0.05D) - .setMeltingPoint(1287) - .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation - .setUnlocalizedName("rbmk_fuel_pu238be").setTextureName(RefStrings.MODID + ":rbmk_fuel_pu238be"); - rbmk_fuel_balefire_gold = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_balefire_gold) - .setYield(100000000D) - .setStats(50, 10) - .setFunction(EnumBurnFunc.ARCH) - .setDepletionFunction(EnumDepleteFunc.LINEAR) - .setXenon(0.0D, 50D) - .setMeltingPoint(2000) - .setUnlocalizedName("rbmk_fuel_balefire_gold").setTextureName(RefStrings.MODID + ":rbmk_fuel_balefire_gold"); - rbmk_fuel_flashlead = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_flashlead) - .setYield(250000000D) - .setStats(40, 50) - .setFunction(EnumBurnFunc.ARCH) - .setDepletionFunction(EnumDepleteFunc.LINEAR) - .setXenon(0.0D, 50D) - .setMeltingPoint(2050) - .setUnlocalizedName("rbmk_fuel_flashlead").setTextureName(RefStrings.MODID + ":rbmk_fuel_flashlead"); - rbmk_fuel_balefire = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_balefire) - .setYield(100000000D) - .setStats(100, 35) - .setFunction(EnumBurnFunc.LINEAR) - .setXenon(0.0D, 50D) - .setHeat(3D) - .setMeltingPoint(3652) - .setUnlocalizedName("rbmk_fuel_balefire").setTextureName(RefStrings.MODID + ":rbmk_fuel_balefire"); - rbmk_fuel_zfb_bismuth = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_zfb_bismuth) - .setYield(50000000D) - .setStats(20) - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setHeat(1.75D) - .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_zfb_bismuth").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_bismuth"); - rbmk_fuel_zfb_pu241 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_zfb_pu241) - .setYield(50000000D) - .setStats(20) - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setMeltingPoint(2865) - .setUnlocalizedName("rbmk_fuel_zfb_pu241").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_pu241"); - rbmk_fuel_zfb_am_mix = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_zfb_am_mix) - .setYield(50000000D) - .setStats(20) - .setFunction(EnumBurnFunc.LINEAR) - .setHeat(1.75D) - .setMeltingPoint(2744) - .setUnlocalizedName("rbmk_fuel_zfb_am_mix").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_am_mix"); - rbmk_fuel_drx = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_drx) - .setYield(10000000D) - .setStats(1000, 10) - .setFunction(EnumBurnFunc.QUADRATIC) - .setHeat(0.1D) - .setMeltingPoint(100000) - .setUnlocalizedName("rbmk_fuel_drx").setTextureName(RefStrings.MODID + ":rbmk_fuel_drx"); - rbmk_fuel_test = (ItemRBMKRod) new ItemRBMKRod("THE VOICES") - .setYield(1000000D) - .setStats(100) - .setFunction(EnumBurnFunc.EXPERIMENTAL) - .setHeat(1.0D) - .setMeltingPoint(100000) - .setUnlocalizedName("rbmk_fuel_test").setTextureName(RefStrings.MODID + ":rbmk_fuel_test"); - /* Experimental flux curve shit - rbmk_fuel_curve = (ItemRBMKRod) new ItemRBMKRod("3D Flux Curve Test") - .setFluxCurve(true) - .setOutputFluxCurve((fluxQuantity, fluxRatio) -> fluxQuantity * (1 - Math.pow(fluxRatio, 2))) - .setDepletionOutputRatioCurve((ratioIn, depletion) -> Math.pow(ratioIn, 2) * depletion) - .setYield(1000000D) - .setStats(75) - .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setHeat(1.5D) - .setMeltingPoint(100000) - .setUnlocalizedName("rbmk_fuel_curve").setTextureName(RefStrings.MODID + ":rbmk_fuel_curve"); - */ - - watz_pellet = new ItemWatzPellet().setUnlocalizedName("watz_pellet").setTextureName(RefStrings.MODID + ":watz_pellet"); - watz_pellet_depleted = new ItemWatzPellet().setUnlocalizedName("watz_pellet_depleted").setTextureName(RefStrings.MODID + ":watz_pellet"); - - icf_pellet_empty = new Item().setUnlocalizedName("icf_pellet_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":icf_pellet_empty"); - icf_pellet = new ItemICFPellet().setUnlocalizedName("icf_pellet").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":icf_pellet"); - icf_pellet_depleted = new Item().setUnlocalizedName("icf_pellet_depleted").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":icf_pellet_depleted"); - - trinitite = new ItemNuclearWaste().setUnlocalizedName("trinitite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":trinitite_new"); - nuclear_waste_long = new ItemWasteLong().setUnlocalizedName("nuclear_waste_long").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_long"); - nuclear_waste_long_tiny = new ItemWasteLong().setUnlocalizedName("nuclear_waste_long_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_long_tiny"); - nuclear_waste_short = new ItemWasteShort().setUnlocalizedName("nuclear_waste_short").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_short"); - nuclear_waste_short_tiny = new ItemWasteShort().setUnlocalizedName("nuclear_waste_short_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_short_tiny"); - nuclear_waste_long_depleted = new ItemWasteLong().setUnlocalizedName("nuclear_waste_long_depleted").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_long_depleted"); - nuclear_waste_long_depleted_tiny = new ItemWasteLong().setUnlocalizedName("nuclear_waste_long_depleted_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_long_depleted_tiny"); - nuclear_waste_short_depleted = new ItemWasteShort().setUnlocalizedName("nuclear_waste_short_depleted").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_short_depleted"); - nuclear_waste_short_depleted_tiny = new ItemWasteShort().setUnlocalizedName("nuclear_waste_short_depleted_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_short_depleted_tiny"); - nuclear_waste = new ItemNuclearWaste().setUnlocalizedName("nuclear_waste").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste"); - nuclear_waste_tiny = new ItemNuclearWaste().setUnlocalizedName("nuclear_waste_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_tiny"); - nuclear_waste_vitrified = new ItemNuclearWaste().setUnlocalizedName("nuclear_waste_vitrified").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_vitrified"); - nuclear_waste_vitrified_tiny = new ItemNuclearWaste().setUnlocalizedName("nuclear_waste_vitrified_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_vitrified_tiny"); - scrap_plastic = new ItemPlasticScrap().setUnlocalizedName("scrap_plastic").setTextureName(RefStrings.MODID + ":scrap_plastic"); - scrap = new Item().setUnlocalizedName("scrap").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":scrap"); - scrap_oil = new Item().setUnlocalizedName("scrap_oil").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":scrap_oil"); - scrap_nuclear = new Item().setUnlocalizedName("scrap_nuclear").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":scrap_nuclear"); - containment_box = new ItemLeadBox().setUnlocalizedName("containment_box").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":containment_box"); - plastic_bag = new ItemPlasticBag().setUnlocalizedName("plastic_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":plastic_bag"); - - ammo_bag = new ItemAmmoBag().setUnlocalizedName("ammo_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ammo_bag"); - ammo_bag_infinite = new ItemAmmoBag().setUnlocalizedName("ammo_bag_infinite").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ammo_bag_infinite"); - casing_bag = new ItemCasingBag().setUnlocalizedName("casing_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":casing_bag"); - - debris_graphite = new Item().setUnlocalizedName("debris_graphite").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_graphite"); - debris_metal = new Item().setUnlocalizedName("debris_metal").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_metal"); - debris_fuel = new Item().setUnlocalizedName("debris_fuel").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_fuel"); - debris_concrete = new Item().setUnlocalizedName("debris_concrete").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_concrete"); - debris_exchanger = new Item().setUnlocalizedName("debris_exchanger").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_exchanger"); - debris_shrapnel =new Item().setUnlocalizedName("debris_shrapnel").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_shrapnel"); - debris_element =new Item().setUnlocalizedName("debris_element").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_element"); - - pellet_cluster = new ItemCustomLore().setUnlocalizedName("pellet_cluster").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellet_cluster"); - powder_fire = new ItemCustomLore().setUnlocalizedName("powder_fire").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_red_phosphorus"); - powder_ice = new ItemCustomLore().setUnlocalizedName("powder_ice").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_ice"); - powder_poison = new ItemCustomLore().setUnlocalizedName("powder_poison").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_poison"); - powder_thermite = new ItemCustomLore().setUnlocalizedName("powder_thermite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_thermite"); - cordite = new Item().setUnlocalizedName("cordite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":cordite"); - ballistite = new Item().setUnlocalizedName("ballistite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ballistite"); - ball_dynamite = new Item().setUnlocalizedName("ball_dynamite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_dynamite"); - ball_tnt = new Item().setUnlocalizedName("ball_tnt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_tnt"); - ball_tatb = new Item().setUnlocalizedName("ball_tatb").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_tatb"); - ball_fireclay = new Item().setUnlocalizedName("ball_fireclay").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_fireclay"); - pellet_gas = new ItemCustomLore().setUnlocalizedName("pellet_gas").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellet_gas"); - magnetron = new ItemCustomLore().setUnlocalizedName("magnetron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":magnetron_alt"); - pellet_buckshot = new Item().setUnlocalizedName("pellet_buckshot").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_lead"); - pellet_charged = new Item().setUnlocalizedName("pellet_charged").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_charged"); - - designator = new ItemDesingator().setUnlocalizedName("designator").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator"); - designator_range = new ItemDesingatorRange().setUnlocalizedName("designator_range").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_range_alt"); - designator_manual = new ItemDesingatorManual().setUnlocalizedName("designator_manual").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_manual"); - designator_arty_range = new ItemDesignatorArtyRange().setUnlocalizedName("designator_arty_range").setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_arty_range"); - launch_code_piece = new Item().setUnlocalizedName("launch_code_piece").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":launch_code_piece"); - launch_code = new Item().setUnlocalizedName("launch_code").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":launch_code"); - launch_key = new Item().setUnlocalizedName("launch_key").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":launch_key"); - missile_assembly = new Item().setUnlocalizedName("missile_assembly").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":missile_assembly"); - missile_generic = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_generic").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_generic"); - missile_anti_ballistic = new ItemMissile(MissileFormFactor.ABM, MissileTier.TIER1).setUnlocalizedName("missile_anti_ballistic").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_anti_ballistic"); - missile_incendiary = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_incendiary").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_incendiary"); - missile_cluster = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_cluster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_cluster"); - missile_buster = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_buster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_buster"); - missile_decoy = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_decoy").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_decoy"); - missile_strong = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER2).setUnlocalizedName("missile_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_strong"); - missile_incendiary_strong = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER2).setUnlocalizedName("missile_incendiary_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_incendiary_strong"); - missile_cluster_strong = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER2).setUnlocalizedName("missile_cluster_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_cluster_strong"); - missile_buster_strong = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER2).setUnlocalizedName("missile_buster_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_buster_strong"); - missile_emp_strong = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER2).setUnlocalizedName("missile_emp_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_emp_strong"); - missile_burst = new ItemMissile(MissileFormFactor.HUGE, MissileTier.TIER3).setUnlocalizedName("missile_burst").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_burst"); - missile_inferno = new ItemMissile(MissileFormFactor.HUGE, MissileTier.TIER3).setUnlocalizedName("missile_inferno").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_inferno"); - missile_rain = new ItemMissile(MissileFormFactor.HUGE, MissileTier.TIER3).setUnlocalizedName("missile_rain").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_rain"); - missile_drill = new ItemMissile(MissileFormFactor.HUGE, MissileTier.TIER3).setUnlocalizedName("missile_drill").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_drill"); - missile_nuclear = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_nuclear").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_nuclear"); - missile_nuclear_cluster = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_nuclear_cluster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_nuclear_cluster"); - missile_volcano = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_volcano").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_volcano"); - missile_doomsday = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_doomsday").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_doomsday"); - missile_doomsday_rusted = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).notLaunchable().setUnlocalizedName("missile_doomsday_rusted").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_doomsday"); - missile_taint = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_taint").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_taint"); - missile_micro = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_micro").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_micro"); - missile_bhole = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_bhole").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_bhole"); - missile_schrabidium = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_schrabidium").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_schrabidium"); - missile_emp = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_emp").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_emp"); - missile_shuttle = new ItemMissile(MissileFormFactor.OTHER, MissileTier.TIER3, MissileFuel.KEROSENE_PEROXIDE).setUnlocalizedName("missile_shuttle").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_shuttle"); - missile_stealth = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER1).setUnlocalizedName("missile_stealth").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_stealth"); - missile_test = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_test").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":missile_micro"); - missile_soyuz = new ItemSoyuz().setUnlocalizedName("missile_soyuz").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":soyuz"); - missile_soyuz_lander = new ItemCustomLore().setUnlocalizedName("missile_soyuz_lander").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":soyuz_lander"); - missile_custom = new ItemCustomMissile().setUnlocalizedName("missile_custom").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":missile_custom"); - sat_mapper = new ItemSatChip().setUnlocalizedName("sat_mapper").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_mapper"); - sat_scanner = new ItemSatChip().setUnlocalizedName("sat_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_scanner"); - sat_radar = new ItemSatChip().setUnlocalizedName("sat_radar").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_radar"); - sat_laser = new ItemSatChip().setUnlocalizedName("sat_laser").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_laser"); - sat_foeq = new ItemSatChip().setUnlocalizedName("sat_foeq").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_foeq"); - sat_resonator = new ItemSatChip().setUnlocalizedName("sat_resonator").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_resonator"); - sat_miner = new ItemSatChip().setUnlocalizedName("sat_miner").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_miner"); - sat_lunar_miner = new ItemSatChip().setUnlocalizedName("sat_lunar_miner").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_lunar_miner"); - sat_gerald = new ItemSatChip().setUnlocalizedName("sat_gerald").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_gerald"); - sat_chip = new ItemSatChip().setUnlocalizedName("sat_chip").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_chip"); - sat_interface = new ItemSatInterface().setUnlocalizedName("sat_interface").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_interface"); - sat_coord = new ItemSatInterface().setUnlocalizedName("sat_coord").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_coord"); - sat_designator = new ItemSatDesignator().setUnlocalizedName("sat_designator").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_designator"); - sat_relay = new ItemSatChip().setUnlocalizedName("sat_relay").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_relay"); - - mp_thruster_10_kerosene = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 1.5F, PartSize.SIZE_10).setHealth(10F) .setUnlocalizedName("mp_thruster_10_kerosene"); - mp_thruster_10_kerosene_tec = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 1.5F, PartSize.SIZE_10).setHealth(15F).setRarity(Rarity.COMMON).setUnlocalizedName("mp_thruster_10_kerosene_tec"); - mp_thruster_10_solid = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 1.5F, PartSize.SIZE_10).setHealth(15F) .setUnlocalizedName("mp_thruster_10_solid"); - mp_thruster_10_xenon = new ItemCustomMissilePart().makeThruster(FuelType.XENON, 1F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_thruster_10_xenon"); - mp_thruster_15_kerosene = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 7.5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_kerosene"); - mp_thruster_15_kerosene_tec = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 7.5F, PartSize.SIZE_15).setHealth(20F).setRarity(Rarity.COMMON).setUnlocalizedName("mp_thruster_15_kerosene_tec"); - mp_thruster_15_kerosene_dual = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 2.5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_kerosene_dual"); - mp_thruster_15_kerosene_triple = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_kerosene_triple"); - mp_thruster_15_solid = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 5F, PartSize.SIZE_15).setHealth(20F) .setUnlocalizedName("mp_thruster_15_solid"); - mp_thruster_15_solid_hexdecuple = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 5F, PartSize.SIZE_15).setHealth(25F).setRarity(Rarity.UNCOMMON).setUnlocalizedName("mp_thruster_15_solid_hexdecuple"); - mp_thruster_15_hydrogen = new ItemCustomMissilePart().makeThruster(FuelType.HYDROGEN, 1F, 7.5F, PartSize.SIZE_15).setHealth(20F) .setUnlocalizedName("mp_thruster_15_hydrogen"); - mp_thruster_15_hydrogen_dual = new ItemCustomMissilePart().makeThruster(FuelType.HYDROGEN, 1F, 2.5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_hydrogen_dual"); - mp_thruster_15_balefire_short = new ItemCustomMissilePart().makeThruster(FuelType.BALEFIRE, 1F, 5F, PartSize.SIZE_15).setHealth(25F) .setUnlocalizedName("mp_thruster_15_balefire_short"); - mp_thruster_15_balefire = new ItemCustomMissilePart().makeThruster(FuelType.BALEFIRE, 1F, 5F, PartSize.SIZE_15).setHealth(25F) .setUnlocalizedName("mp_thruster_15_balefire"); - mp_thruster_15_balefire_large = new ItemCustomMissilePart().makeThruster(FuelType.BALEFIRE, 1F, 7.5F, PartSize.SIZE_15).setHealth(35F) .setUnlocalizedName("mp_thruster_15_balefire_large"); - mp_thruster_15_balefire_large_rad = new ItemCustomMissilePart().makeThruster(FuelType.BALEFIRE, 1F, 7.5F, PartSize.SIZE_15).setAuthor("The Master").setHealth(35F).setRarity(Rarity.UNCOMMON).setUnlocalizedName("mp_thruster_15_balefire_large_rad"); - mp_thruster_20_kerosene = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 100F, PartSize.SIZE_20).setHealth(30F) .setUnlocalizedName("mp_thruster_20_kerosene"); - mp_thruster_20_kerosene_dual = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 100F, PartSize.SIZE_20).setHealth(30F) .setUnlocalizedName("mp_thruster_20_kerosene_dual"); - mp_thruster_20_kerosene_triple = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 100F, PartSize.SIZE_20).setHealth(30F) .setUnlocalizedName("mp_thruster_20_kerosene_triple"); - mp_thruster_20_solid = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 100F, PartSize.SIZE_20).setHealth(35F).setWittyText("It's basically just a big hole at the end of the fuel tank.").setUnlocalizedName("mp_thruster_20_solid"); - mp_thruster_20_solid_multi = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 100F, PartSize.SIZE_20).setHealth(35F) .setUnlocalizedName("mp_thruster_20_solid_multi"); - mp_thruster_20_solid_multier = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 100F, PartSize.SIZE_20).setHealth(35F).setWittyText("Did I miscount? Hope not.").setUnlocalizedName("mp_thruster_20_solid_multier"); - - mp_stability_10_flat = new ItemCustomMissilePart().makeStability(0.5F, PartSize.SIZE_10).setHealth(10F) .setUnlocalizedName("mp_stability_10_flat"); - mp_stability_10_cruise = new ItemCustomMissilePart().makeStability(0.25F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_stability_10_cruise"); - mp_stability_10_space = new ItemCustomMissilePart().makeStability(0.35F, PartSize.SIZE_10).setHealth(5F).setRarity(Rarity.COMMON).setWittyText("Standing there alone, the ship is waiting / All systems are go, are you sure?") .setUnlocalizedName("mp_stability_10_space"); - mp_stability_15_flat = new ItemCustomMissilePart().makeStability(0.5F, PartSize.SIZE_15).setHealth(10F) .setUnlocalizedName("mp_stability_15_flat"); - mp_stability_15_thin = new ItemCustomMissilePart().makeStability(0.35F, PartSize.SIZE_15).setHealth(5F) .setUnlocalizedName("mp_stability_15_thin"); - mp_stability_15_soyuz = new ItemCustomMissilePart().makeStability(0.25F, PartSize.SIZE_15).setHealth(15F).setRarity(Rarity.COMMON).setWittyText("Союз!").setUnlocalizedName("mp_stability_15_soyuz"); - mp_stability_20_flat = new ItemCustomMissilePart().makeStability(0.5F, PartSize.SIZE_20) .setUnlocalizedName("mp_s_20"); - - mp_fuselage_10_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 2500F, PartSize.SIZE_10, PartSize.SIZE_10).setAuthor("Hoboy").setHealth(20F).setUnlocalizedName("mp_fuselage_10_kerosene"); - mp_fuselage_10_kerosene_camo = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Camo").setUnlocalizedName("mp_fuselage_10_kerosene_camo"); - mp_fuselage_10_kerosene_desert = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Desert Camo").setUnlocalizedName("mp_fuselage_10_kerosene_desert"); - mp_fuselage_10_kerosene_sky = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Sky Camo").setUnlocalizedName("mp_fuselage_10_kerosene_sky"); - mp_fuselage_10_kerosene_flames = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.UNCOMMON).setTitle("Sick Flames").setUnlocalizedName("mp_fuselage_10_kerosene_flames"); - mp_fuselage_10_kerosene_insulation = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(25F).setUnlocalizedName("mp_fuselage_10_kerosene_insulation"); - mp_fuselage_10_kerosene_sleek = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.RARE).setTitle("IF-R&D").setHealth(35F).setUnlocalizedName("mp_fuselage_10_kerosene_sleek"); - mp_fuselage_10_kerosene_metal = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.UNCOMMON).setTitle("Bolted Metal").setHealth(30F).setAuthor("Hoboy").setUnlocalizedName("mp_fuselage_10_kerosene_metal"); - mp_fuselage_10_kerosene_taint = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Sam").setTitle("Tainted").setUnlocalizedName("mp_fuselage_10_kerosene_taint"); - - mp_fuselage_10_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 2500F, PartSize.SIZE_10, PartSize.SIZE_10).setHealth(25F) .setUnlocalizedName("mp_fuselage_10_solid"); - mp_fuselage_10_solid_flames = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.UNCOMMON).setTitle("Sick Flames").setUnlocalizedName("mp_fuselage_10_solid_flames"); - mp_fuselage_10_solid_insulation = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(30F).setUnlocalizedName("mp_fuselage_10_solid_insulation"); - mp_fuselage_10_solid_sleek = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.RARE).setTitle("IF-R&D").setHealth(35F).setUnlocalizedName("mp_fuselage_10_solid_sleek"); - mp_fuselage_10_solid_soviet_glory = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.EPIC).setAuthor("Hoboy").setHealth(35F).setTitle("Soviet Glory").setUnlocalizedName("mp_fuselage_10_solid_soviet_glory"); - mp_fuselage_10_solid_cathedral = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.RARE).setAuthor("Satan").setTitle("Unholy Cathedral").setWittyText("Quakeesque!").setUnlocalizedName("mp_fuselage_10_solid_cathedral"); - mp_fuselage_10_solid_moonlit = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("The Master & Hoboy").setTitle("Moonlit").setUnlocalizedName("mp_fuselage_10_solid_moonlit"); - mp_fuselage_10_solid_battery = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("wolfmonster222").setHealth(30F).setTitle("Ecstatic").setWittyText("I got caught eating batteries again :(").setUnlocalizedName("mp_fuselage_10_solid_battery"); - mp_fuselage_10_solid_duracell = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.RARE).setAuthor("Hoboy").setTitle("Duracell").setHealth(30F).setWittyText("The crunchiest battery on the market!").setUnlocalizedName("mp_fuselage_10_solid_duracell"); - - mp_fuselage_10_xenon = new ItemCustomMissilePart().makeFuselage(FuelType.XENON, 5000F, PartSize.SIZE_10, PartSize.SIZE_10).setHealth(20F) .setUnlocalizedName("mp_fuselage_10_xenon"); - mp_fuselage_10_xenon_bhole = ((ItemCustomMissilePart) mp_fuselage_10_xenon).copy().setRarity(Rarity.RARE).setAuthor("Sten89").setTitle("Morceus-1457").setUnlocalizedName("mp_fuselage_10_xenon_bhole"); - - mp_fuselage_10_long_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 5000F, PartSize.SIZE_10, PartSize.SIZE_10).setAuthor("Hoboy").setHealth(30F).setUnlocalizedName("mp_fuselage_10_long_kerosene"); - mp_fuselage_10_long_kerosene_camo = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Camo").setUnlocalizedName("mp_fuselage_10_long_kerosene_camo"); - mp_fuselage_10_long_kerosene_desert = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Desert Camo").setUnlocalizedName("mp_fuselage_10_long_kerosene_desert"); - mp_fuselage_10_long_kerosene_sky = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Sky Camo").setUnlocalizedName("mp_fuselage_10_long_kerosene_sky"); - mp_fuselage_10_long_kerosene_flames = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.UNCOMMON).setTitle("Sick Flames").setUnlocalizedName("mp_fuselage_10_long_kerosene_flames"); - mp_fuselage_10_long_kerosene_insulation = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(35F).setUnlocalizedName("mp_fuselage_10_long_kerosene_insulation"); - mp_fuselage_10_long_kerosene_sleek = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.RARE).setTitle("IF-R&D").setHealth(40F).setUnlocalizedName("mp_fuselage_10_long_kerosene_sleek"); - mp_fuselage_10_long_kerosene_metal = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Hoboy").setHealth(35F).setUnlocalizedName("mp_fuselage_10_long_kerosene_metal"); - mp_fuselage_10_long_kerosene_dash = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.EPIC).setAuthor("Sam").setTitle("Dash").setWittyText("I wash my hands of it.").setCreativeTab(null).setUnlocalizedName("mp_fuselage_10_long_kerosene_dash"); - mp_fuselage_10_long_kerosene_taint = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Sam").setTitle("Tainted").setUnlocalizedName("mp_fuselage_10_long_kerosene_taint"); - mp_fuselage_10_long_kerosene_vap = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.EPIC).setAuthor("VT-6/24").setTitle("Minty Contrail").setWittyText("Upper rivet!").setUnlocalizedName("mp_fuselage_10_long_kerosene_vap"); - - mp_fuselage_10_long_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 5000F, PartSize.SIZE_10, PartSize.SIZE_10).setHealth(35F) .setUnlocalizedName("mp_fuselage_10_long_solid"); - mp_fuselage_10_long_solid_flames = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.UNCOMMON).setTitle("Sick Flames").setUnlocalizedName("mp_fuselage_10_long_solid_flames"); - mp_fuselage_10_long_solid_insulation = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(40F).setUnlocalizedName("mp_fuselage_10_long_solid_insulation"); - mp_fuselage_10_long_solid_sleek = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.RARE).setTitle("IF-R&D").setHealth(45F).setUnlocalizedName("mp_fuselage_10_long_solid_sleek"); - mp_fuselage_10_long_solid_soviet_glory = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.EPIC).setAuthor("Hoboy").setHealth(45F).setTitle("Soviet Glory").setWittyText("Fully Automated Luxury Gay Space Communism!").setUnlocalizedName("mp_fuselage_10_long_solid_soviet_glory"); - mp_fuselage_10_long_solid_bullet = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.COMMON).setAuthor("Sam").setTitle("Bullet Bill").setUnlocalizedName("mp_fuselage_10_long_solid_bullet"); - mp_fuselage_10_long_solid_silvermoonlight = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("The Master").setTitle("Silver Moonlight").setUnlocalizedName("mp_fuselage_10_long_solid_silvermoonlight"); - - mp_fuselage_10_15_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 10000F, PartSize.SIZE_10, PartSize.SIZE_15).setHealth(40F).setUnlocalizedName("mp_fuselage_10_15_kerosene"); - mp_fuselage_10_15_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 10000F, PartSize.SIZE_10, PartSize.SIZE_15).setHealth(40F) .setUnlocalizedName("mp_fuselage_10_15_solid"); - mp_fuselage_10_15_hydrogen = new ItemCustomMissilePart().makeFuselage(FuelType.HYDROGEN, 10000F, PartSize.SIZE_10, PartSize.SIZE_15).setHealth(40F).setUnlocalizedName("mp_fuselage_10_15_hydrogen"); - mp_fuselage_10_15_balefire = new ItemCustomMissilePart().makeFuselage(FuelType.BALEFIRE, 10000F, PartSize.SIZE_10, PartSize.SIZE_15).setHealth(40F).setUnlocalizedName("mp_fuselage_10_15_balefire"); - - mp_fuselage_15_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 15000F, PartSize.SIZE_15, PartSize.SIZE_15).setAuthor("Hoboy").setHealth(50F).setUnlocalizedName("mp_fuselage_15_kerosene"); - mp_fuselage_15_kerosene_camo = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Camo").setUnlocalizedName("mp_fuselage_15_kerosene_camo"); - mp_fuselage_15_kerosene_desert = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Desert Camo").setUnlocalizedName("mp_fuselage_15_kerosene_desert"); - mp_fuselage_15_kerosene_sky = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Sky Camo").setUnlocalizedName("mp_fuselage_15_kerosene_sky"); - mp_fuselage_15_kerosene_insulation = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(55F).setWittyText("Rest in spaghetti Columbia :(").setUnlocalizedName("mp_fuselage_15_kerosene_insulation"); - mp_fuselage_15_kerosene_metal = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Hoboy").setTitle("Bolted Metal").setHealth(60F).setWittyText("Metal frame with metal plating reinforced with bolted metal sheets and metal.").setUnlocalizedName("mp_fuselage_15_kerosene_metal"); - mp_fuselage_15_kerosene_decorated = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Hoboy").setTitle("Decorated").setHealth(60F).setUnlocalizedName("mp_fuselage_15_kerosene_decorated"); - mp_fuselage_15_kerosene_steampunk = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.RARE).setAuthor("Hoboy").setTitle("Steampunk").setHealth(60F).setUnlocalizedName("mp_fuselage_15_kerosene_steampunk"); - mp_fuselage_15_kerosene_polite = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.LEGENDARY).setAuthor("Hoboy").setTitle("Polite").setHealth(60F).setUnlocalizedName("mp_fuselage_15_kerosene_polite"); - mp_fuselage_15_kerosene_blackjack = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.LEGENDARY).setTitle("Queen Whiskey").setHealth(100F).setUnlocalizedName("mp_fuselage_15_kerosene_blackjack"); - mp_fuselage_15_kerosene_lambda = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.RARE).setAuthor("VT-6/24").setTitle("Lambda Complex").setHealth(75F).setWittyText("MAGNIFICENT MICROWAVE CASSEROLE").setUnlocalizedName("mp_fuselage_15_kerosene_lambda"); - mp_fuselage_15_kerosene_minuteman = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Spexta").setTitle("MX 1702").setUnlocalizedName("mp_fuselage_15_kerosene_minuteman"); - mp_fuselage_15_kerosene_pip = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.EPIC).setAuthor("The Doctor").setTitle("LittlePip").setWittyText("31!").setCreativeTab(null).setUnlocalizedName("mp_fuselage_15_kerosene_pip"); - mp_fuselage_15_kerosene_taint = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Sam").setTitle("Tainted").setWittyText("DUN-DUN!").setUnlocalizedName("mp_fuselage_15_kerosene_taint"); - mp_fuselage_15_kerosene_yuck = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.EPIC).setAuthor("Hoboy").setTitle("Flesh").setWittyText("Note: Never clean DNA vials with your own spit.").setHealth(60F).setUnlocalizedName("mp_fuselage_15_kerosene_yuck"); - - mp_fuselage_15_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 15000F, PartSize.SIZE_15, PartSize.SIZE_15).setHealth(60F) .setUnlocalizedName("mp_fuselage_15_solid").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); - mp_fuselage_15_solid_insulation = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(65F).setUnlocalizedName("mp_fuselage_15_solid_insulation"); - mp_fuselage_15_solid_desh = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.RARE).setAuthor("Hoboy").setTitle("Desh Plating").setHealth(80F).setUnlocalizedName("mp_fuselage_15_solid_desh"); - mp_fuselage_15_solid_soviet_glory = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.RARE).setAuthor("Hoboy").setTitle("Soviet Glory").setHealth(70F).setUnlocalizedName("mp_fuselage_15_solid_soviet_glory"); - mp_fuselage_15_solid_soviet_stank = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.EPIC).setAuthor("Hoboy").setTitle("Soviet Stank").setHealth(15F).setWittyText("Aged like a fine wine! Well, almost.").setUnlocalizedName("mp_fuselage_15_solid_soviet_stank"); - mp_fuselage_15_solid_faust = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.LEGENDARY).setAuthor("Dr.Nostalgia").setTitle("Mighty Lauren").setHealth(250F).setWittyText("Welcome to Subway, may I take your order?").setUnlocalizedName("mp_fuselage_15_solid_faust"); - mp_fuselage_15_solid_silvermoonlight = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("The Master").setTitle("Silver Moonlight").setUnlocalizedName("mp_fuselage_15_solid_silvermoonlight"); - mp_fuselage_15_solid_snowy = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("Dr.Nostalgia").setTitle("Chilly Day").setUnlocalizedName("mp_fuselage_15_solid_snowy"); - mp_fuselage_15_solid_panorama = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.RARE).setAuthor("Hoboy").setTitle("Panorama").setUnlocalizedName("mp_fuselage_15_solid_panorama"); - mp_fuselage_15_solid_roses = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("Hoboy").setTitle("Bed of roses").setUnlocalizedName("mp_fuselage_15_solid_roses"); - mp_fuselage_15_solid_mimi = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.RARE).setTitle("Mimi-chan").setUnlocalizedName("mp_fuselage_15_solid_mimi"); - - mp_fuselage_15_hydrogen = new ItemCustomMissilePart().makeFuselage(FuelType.HYDROGEN, 15000F, PartSize.SIZE_15, PartSize.SIZE_15).setHealth(50F) .setUnlocalizedName("mp_fuselage_15_hydrogen").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); - mp_fuselage_15_hydrogen_cathedral = ((ItemCustomMissilePart) mp_fuselage_15_hydrogen).copy().setRarity(Rarity.UNCOMMON).setAuthor("Satan").setTitle("Unholy Cathedral").setUnlocalizedName("mp_fuselage_15_hydrogen_cathedral"); - - mp_fuselage_15_balefire = new ItemCustomMissilePart().makeFuselage(FuelType.BALEFIRE, 15000F, PartSize.SIZE_15, PartSize.SIZE_15).setHealth(75F) .setUnlocalizedName("mp_fuselage_15_balefire").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); - - mp_fuselage_15_20_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 20000, PartSize.SIZE_15, PartSize.SIZE_20).setAuthor("Hoboy").setHealth(70F).setUnlocalizedName("mp_fuselage_15_20_kerosene").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); - mp_fuselage_15_20_kerosene_magnusson = ((ItemCustomMissilePart)mp_fuselage_15_20_kerosene).copy().setRarity(Rarity.RARE).setAuthor("VT-6/24").setTitle("White Forest Rocket").setWittyText("And get your cranio-conjugal parasite away from my nose cone!").setUnlocalizedName("mp_fuselage_15_20_kerosene_magnusson"); - mp_fuselage_15_20_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 20000, PartSize.SIZE_15, PartSize.SIZE_20).setHealth(70F).setUnlocalizedName("mp_fuselage_15_20_solid").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); - - mp_fuselage_20_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 1000F, PartSize.SIZE_20, PartSize.SIZE_20) .setUnlocalizedName("mp_f_20").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); - - mp_warhead_10_he = new ItemCustomMissilePart().makeWarhead(WarheadType.HE, 15F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_warhead_10_he").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_10_incendiary = new ItemCustomMissilePart().makeWarhead(WarheadType.INC, 15F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_warhead_10_incendiary").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_10_buster = new ItemCustomMissilePart().makeWarhead(WarheadType.BUSTER, 5F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_warhead_10_buster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_10_nuclear = new ItemCustomMissilePart().makeWarhead(WarheadType.NUCLEAR, 35F, 1.5F, PartSize.SIZE_10).setTitle("Tater Tot").setHealth(10F).setUnlocalizedName("mp_warhead_10_nuclear").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_10_nuclear_large = new ItemCustomMissilePart().makeWarhead(WarheadType.NUCLEAR, 75F, 2.5F, PartSize.SIZE_10).setTitle("Chernobyl Boris").setHealth(15F).setUnlocalizedName("mp_warhead_10_nuclear_large").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_10_taint = new ItemCustomMissilePart().makeWarhead(WarheadType.TAINT, 15F, 1.5F, PartSize.SIZE_10).setHealth(20F).setRarity(Rarity.UNCOMMON).setWittyText("Eat my taint! Bureaucracy is dead and we killed it!").setUnlocalizedName("mp_warhead_10_taint").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_10_cloud = new ItemCustomMissilePart().makeWarhead(WarheadType.CLOUD, 15F, 1.5F, PartSize.SIZE_10).setHealth(20F).setRarity(Rarity.RARE).setUnlocalizedName("mp_warhead_10_cloud").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_15_he = new ItemCustomMissilePart().makeWarhead(WarheadType.HE, 50F, 2.5F, PartSize.SIZE_15).setHealth(10F) .setUnlocalizedName("mp_warhead_15_he").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_15_incendiary = new ItemCustomMissilePart().makeWarhead(WarheadType.INC, 35F, 2.5F, PartSize.SIZE_15).setHealth(10F) .setUnlocalizedName("mp_warhead_15_incendiary").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_15_nuclear = new ItemCustomMissilePart().makeWarhead(WarheadType.NUCLEAR, 125F, 5F, PartSize.SIZE_15).setTitle("Auntie Bertha").setHealth(15F).setUnlocalizedName("mp_warhead_15_nuclear").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_15_nuclear_shark = ((ItemCustomMissilePart) mp_warhead_15_nuclear).copy().setRarity(Rarity.UNCOMMON).setTitle("Discount Bullet Bill").setWittyText("Nose art on a cannon bullet? Who does that?").setUnlocalizedName("mp_warhead_15_nuclear_shark"); - mp_warhead_15_nuclear_mimi = ((ItemCustomMissilePart) mp_warhead_15_nuclear).copy().setRarity(Rarity.RARE).setTitle("FASHIONABLE MISSILE").setUnlocalizedName("mp_warhead_15_nuclear_mimi"); - mp_warhead_15_boxcar = new ItemCustomMissilePart().makeWarhead(WarheadType.TX, 250F, 7.5F, PartSize.SIZE_15).setWittyText("?!?!").setHealth(35F).setRarity(Rarity.LEGENDARY).setUnlocalizedName("mp_warhead_15_boxcar").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_15_n2 = new ItemCustomMissilePart().makeWarhead(WarheadType.N2, 100F, 5F, PartSize.SIZE_15).setWittyText("[screams geometrically]").setHealth(20F).setRarity(Rarity.RARE).setUnlocalizedName("mp_warhead_15_n2").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_15_balefire = new ItemCustomMissilePart().makeWarhead(WarheadType.BALEFIRE, 100F, 7.5F, PartSize.SIZE_15).setRarity(Rarity.LEGENDARY).setAuthor("VT-6/24").setHealth(15F).setWittyText("Hightower, never forgetti.").setUnlocalizedName("mp_warhead_15_balefire").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_15_turbine = new ItemCustomMissilePart().makeWarhead(WarheadType.TURBINE, 200F, 5F, PartSize.SIZE_15).setRarity(Rarity.SEWS_CLOTHES_AND_SUCKS_HORSE_COCK).setHealth(250F).setUnlocalizedName("mp_warhead_15_turbine").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_20_he = new ItemCustomMissilePart().makeWarhead(WarheadType.HE, 15F, 1F, PartSize.SIZE_20) .setUnlocalizedName("mp_w_20").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - - mp_chip_1 = new ItemCustomMissilePart().makeChip(0.1F) .setUnlocalizedName("mp_c_1").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_1"); - mp_chip_2 = new ItemCustomMissilePart().makeChip(0.05F) .setUnlocalizedName("mp_c_2").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_2"); - mp_chip_3 = new ItemCustomMissilePart().makeChip(0.01F) .setUnlocalizedName("mp_c_3").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_3"); - mp_chip_4 = new ItemCustomMissilePart().makeChip(0.005F) .setUnlocalizedName("mp_c_4").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_4"); - mp_chip_5 = new ItemCustomMissilePart().makeChip(0.0F) .setUnlocalizedName("mp_c_5").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_5"); - - missile_skin_camo = new ItemCustomLore().setUnlocalizedName("missile_skin_camo").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_camo"); - missile_skin_desert = new ItemCustomLore().setUnlocalizedName("missile_skin_desert").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_desert"); - missile_skin_flames = new ItemCustomLore().setUnlocalizedName("missile_skin_flames").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_flames"); - missile_skin_manly_pink = new ItemCustomLore().setUnlocalizedName("missile_skin_manly_pink").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_manly_pink"); - missile_skin_orange_insulation = new ItemCustomLore().setUnlocalizedName("missile_skin_orange_insulation").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_orange_insulation"); - missile_skin_sleek = new ItemCustomLore().setUnlocalizedName("missile_skin_sleek").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_sleek"); - missile_skin_soviet_glory = new ItemCustomLore().setUnlocalizedName("missile_skin_soviet_glory").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_soviet_glory"); - missile_skin_soviet_stank = new ItemCustomLore().setUnlocalizedName("missile_skin_soviet_stank").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_soviet_stank"); - missile_skin_metal = new ItemCustomLore().setUnlocalizedName("missile_skin_metal").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_metal"); - - ammo_shell = (ItemEnumMulti) new ItemAmmo(Ammo240Shell.class).setCreativeTab(MainRegistry.weaponTab).setUnlocalizedName("ammo_shell"); - ammo_dgk = new ItemCustomLore().setUnlocalizedName("ammo_dgk").setCreativeTab(MainRegistry.weaponTab); - ammo_fireext = (ItemEnumMulti) new ItemAmmo(AmmoFireExt.class).setCreativeTab(MainRegistry.weaponTab).setUnlocalizedName("ammo_fireext"); - ammo_misc = new ItemAmmo(AmmoMisc.class).setUnlocalizedName("ammo_misc"); - ammo_arty = new ItemAmmoArty().setUnlocalizedName("ammo_arty"); - ammo_himars = new ItemAmmoHIMARS().setUnlocalizedName("ammo_himars"); - - gun_b92_ammo = new GunB92Cell().setUnlocalizedName("gun_b92_ammo").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92_ammo_alt"); - gun_b92 = new GunB92().setUnlocalizedName("gun_b92").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92"); - gun_fireext = new ItemGunBase(GunEnergyFactory.getExtConfig()).setUnlocalizedName("gun_fireext").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_fireext"); - - ToolMaterial matCrucible = EnumHelper.addToolMaterial("CRUCIBLE", 10, 3, 50.0F, 100.0F, 0); - crucible = new ItemCrucible(5000, 1F, matCrucible).setUnlocalizedName("crucible").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":crucible"); - - stick_dynamite = new ItemGrenade(3).setUnlocalizedName("stick_dynamite").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":stick_dynamite"); - stick_dynamite_fishing = new ItemGrenadeFishing(3).setUnlocalizedName("stick_dynamite_fishing").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":stick_dynamite_fishing"); - stick_tnt = new Item().setUnlocalizedName("stick_tnt").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":stick_tnt"); - stick_semtex = new Item().setUnlocalizedName("stick_semtex").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":stick_semtex"); - stick_c4 = new Item().setUnlocalizedName("stick_c4").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":stick_c4"); - - grenade_generic = new ItemGrenade(4).setUnlocalizedName("grenade_generic").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_generic"); - grenade_strong = new ItemGrenade(5).setUnlocalizedName("grenade_strong").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_strong"); - grenade_frag = new ItemGrenade(4).setUnlocalizedName("grenade_frag").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_frag_alt"); - grenade_fire = new ItemGrenade(4).setUnlocalizedName("grenade_fire").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_fire_alt"); - grenade_shrapnel = new ItemGrenade(4).setUnlocalizedName("grenade_shrapnel").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_shrapnel"); - grenade_cluster = new ItemGrenade(5).setUnlocalizedName("grenade_cluster").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_cluster_alt"); - grenade_flare = new ItemGrenade(0).setUnlocalizedName("grenade_flare").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_flare_alt"); - grenade_electric = new ItemGrenade(5).setUnlocalizedName("grenade_electric").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_electric_alt"); - grenade_poison = new ItemGrenade(4).setUnlocalizedName("grenade_poison").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_poison_alt"); - grenade_gas = new ItemGrenade(4).setUnlocalizedName("grenade_gas").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_gas_alt"); - grenade_pulse = new ItemGrenade(4).setUnlocalizedName("grenade_pulse").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_pulse"); - grenade_plasma = new ItemGrenade(5).setUnlocalizedName("grenade_plasma").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_plasma_alt"); - grenade_tau = new ItemGrenade(5).setUnlocalizedName("grenade_tau").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_tau_alt"); - grenade_schrabidium = new ItemGrenade(7).setUnlocalizedName("grenade_schrabidium").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_schrabidium_alt"); - grenade_lemon = new ItemGrenade(4).setUnlocalizedName("grenade_lemon").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_lemon"); - grenade_gascan = new ItemGrenade(-1).setUnlocalizedName("grenade_gascan").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_gascan"); - grenade_kyiv = new ItemGrenadeKyiv(-1).setUnlocalizedName("grenade_kyiv").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_kyiv"); - grenade_mk2 = new ItemGrenade(5).setUnlocalizedName("grenade_mk2").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_mk2_alt"); - grenade_aschrab = new ItemGrenade(-1).setUnlocalizedName("grenade_aschrab").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_aschrab"); - grenade_nuke = new ItemGrenade(-1).setUnlocalizedName("grenade_nuke").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_nuke_alt"); - grenade_nuclear = new ItemGrenade(7).setUnlocalizedName("grenade_nuclear").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_nuclear"); - grenade_zomg = new ItemGrenade(7).setUnlocalizedName("grenade_zomg").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_zomg"); - grenade_black_hole = new ItemGrenade(7).setUnlocalizedName("grenade_black_hole").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_black_hole"); - grenade_cloud = new ItemGrenade(-1).setUnlocalizedName("grenade_cloud").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_cloud"); - grenade_pink_cloud = new ItemGrenade(-1).setUnlocalizedName("grenade_pink_cloud").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_pink_cloud"); - ullapool_caber = new WeaponSpecial(MainRegistry.tMatSteel).setUnlocalizedName("ullapool_caber").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ullapool_caber"); - - grenade_if_generic = new ItemGrenade(4).setUnlocalizedName("grenade_if_generic").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_generic"); - grenade_if_he = new ItemGrenade(5).setUnlocalizedName("grenade_if_he").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_he"); - grenade_if_bouncy = new ItemGrenade(4).setUnlocalizedName("grenade_if_bouncy").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_bouncy"); - grenade_if_sticky = new ItemGrenade(4).setUnlocalizedName("grenade_if_sticky").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_sticky"); - grenade_if_impact = new ItemGrenade(-1).setUnlocalizedName("grenade_if_impact").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_impact"); - grenade_if_incendiary = new ItemGrenade(4).setUnlocalizedName("grenade_if_incendiary").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_incendiary"); - grenade_if_toxic = new ItemGrenade(4).setUnlocalizedName("grenade_if_toxic").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_toxic"); - grenade_if_concussion = new ItemGrenade(4).setUnlocalizedName("grenade_if_concussion").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_concussion"); - grenade_if_brimstone = new ItemGrenade(5).setUnlocalizedName("grenade_if_brimstone").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_brimstone"); - grenade_if_mystery = new ItemGrenade(5).setUnlocalizedName("grenade_if_mystery").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_mystery"); - grenade_if_spark = new ItemGrenade(7).setUnlocalizedName("grenade_if_spark").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_spark"); - grenade_if_hopwire = new ItemGrenade(7).setUnlocalizedName("grenade_if_hopwire").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_hopwire"); - grenade_if_null = new ItemGrenade(7).setUnlocalizedName("grenade_if_null").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_null"); - - grenade_smart = new ItemGrenade(-1).setUnlocalizedName("grenade_smart").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_smart"); - grenade_mirv = new ItemGrenade(1).setUnlocalizedName("grenade_mirv").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_mirv"); - grenade_breach = new ItemGrenade(-1).setUnlocalizedName("grenade_breach").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_breach"); - grenade_burst = new ItemGrenade(1).setUnlocalizedName("grenade_burst").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_burst"); - nuclear_waste_pearl = new ItemGrenade(-1).setUnlocalizedName("nuclear_waste_pearl").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":nuclear_waste_pearl"); - - weaponized_starblaster_cell = new WeaponizedCell().setUnlocalizedName("weaponized_starblaster_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92_ammo_weaponized"); - - bomb_waffle = new ItemWaffle(20, false).setUnlocalizedName("bomb_waffle").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bomb_waffle"); - schnitzel_vegan = new ItemSchnitzelVegan(0, true).setUnlocalizedName("schnitzel_vegan").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":schnitzel_vegan"); - cotton_candy = new ItemCottonCandy(5, false).setUnlocalizedName("cotton_candy").setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":cotton_candy"); - apple_lead = new ItemAppleSchrabidium(5, 0, false).setUnlocalizedName("apple_lead").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":apple_lead"); - apple_schrabidium = new ItemAppleSchrabidium(20, 100, false).setUnlocalizedName("apple_schrabidium").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":apple_schrabidium"); - tem_flakes = new ItemTemFlakes(0, 0, false).setUnlocalizedName("tem_flakes").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":tem_flakes"); - glowing_stew = new ItemSoup(6).setUnlocalizedName("glowing_stew").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glowing_stew"); - balefire_scrambled = new ItemSoup(6).setUnlocalizedName("balefire_scrambled").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":balefire_scrambled"); - balefire_and_ham = new ItemSoup(6).setUnlocalizedName("balefire_and_ham").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":balefire_and_ham"); - lemon = new ItemLemon(3, 0.5F, false).setUnlocalizedName("lemon").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":lemon"); - definitelyfood = new ItemLemon(3, 0.5F, false).setUnlocalizedName("definitelyfood").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":definitelyfood"); - med_ipecac = new ItemLemon(0, 0, false).setUnlocalizedName("med_ipecac").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_ipecac_new"); - med_ptsd = new ItemLemon(0, 0, false).setUnlocalizedName("med_ptsd").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_ptsd_new"); - med_schizophrenia = new ItemLemon(0, 0, false).setUnlocalizedName("med_schizophrenia").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_schizophrenia_new"); - loops = new ItemLemon(4, 0.25F, false).setUnlocalizedName("loops").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":loops"); - loop_stew = new ItemLemon(10, 0.5F, false).setUnlocalizedName("loop_stew").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":loop_stew"); - spongebob_macaroni = new ItemLemon(5, 1F, false).setUnlocalizedName("spongebob_macaroni").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spongebob_macaroni"); - fooditem = new ItemLemon(2, 5F, false).setUnlocalizedName("fooditem").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":fooditem"); - twinkie = new ItemLemon(3, 0.25F, false).setUnlocalizedName("twinkie").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":twinkie"); - static_sandwich = new ItemLemon(6, 1F, false).setUnlocalizedName("static_sandwich").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":static_sandwich"); - pudding = new ItemLemon(6, 1F, false).setUnlocalizedName("pudding").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pudding"); - canteen_vodka = new ItemCanteen(3 * 60).setUnlocalizedName("canteen_vodka").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canteen_vodka"); - canteen_fab = new ItemCanteen(2 * 60).setUnlocalizedName("canteen_fab").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canteen_fab"); - pancake = new ItemPancake(20, 20, false).setUnlocalizedName("pancake").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pancake"); - nugget = new ItemLemon(200, 1F, false).setUnlocalizedName("nugget").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nugget"); - peas = new ItemPeas().setUnlocalizedName("peas").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":peas"); - marshmallow = new ItemMarshmallow().setUnlocalizedName("marshmallow").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":marshmallow"); - cheese = new ItemLemon(5, 0.75F, false).setUnlocalizedName("cheese").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cheese"); - quesadilla = new ItemLemon(8, 1F, false).setUnlocalizedName("cheese_quesadilla").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":quesadilla"); - mucho_mango = new ItemMuchoMango(10).setUnlocalizedName("mucho_mango").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":mucho_mango"); - glyphid_meat = new ItemLemon(3, 0.5F, true).setUnlocalizedName("glyphid_meat").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glyphid_meat"); - glyphid_meat_grilled = new ItemLemon(8, 0.75F, true).setPotionEffect(Potion.damageBoost.id, 180, 1, 1F).setUnlocalizedName("glyphid_meat_grilled").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glyphid_meat_grilled"); - egg_glyphid = new Item().setUnlocalizedName("egg_glyphid").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":egg_glyphid"); - - defuser = new ItemTooling(ToolType.DEFUSER, 100).setUnlocalizedName("defuser").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":defuser"); - reacher = new Item().setUnlocalizedName("reacher").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":reacher"); - bismuth_tool = new ItemAmatExtractor().setUnlocalizedName("bismuth_tool").setMaxStackSize(1).setFull3D().setCreativeTab(null).setTextureName(RefStrings.MODID + ":bismuth_tool"); - meltdown_tool = new ItemDyatlov().setUnlocalizedName("meltdown_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":meltdown_tool"); - - flame_pony = new ItemCustomLore().setUnlocalizedName("flame_pony").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flame_pony"); - flame_conspiracy = new ItemCustomLore().setUnlocalizedName("flame_conspiracy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flame_conspiracy"); - flame_politics = new ItemCustomLore().setUnlocalizedName("flame_politics").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flame_politics"); - flame_opinion = new ItemCustomLore().setUnlocalizedName("flame_opinion").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flame_opinion"); - - //gadget_explosive = new Item().setUnlocalizedName("gadget_explosive").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":gadget_explosive"); - early_explosive_lenses = new ItemCustomLore().setUnlocalizedName("early_explosive_lenses").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":gadget_explosive8"); - explosive_lenses = new ItemCustomLore().setUnlocalizedName("explosive_lenses").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":man_explosive8"); - gadget_wireing = new Item().setUnlocalizedName("gadget_wireing").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":gadget_wireing"); - gadget_core = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("gadget_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":gadget_core"); - - boy_igniter = new Item().setUnlocalizedName("boy_igniter").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_igniter"); - boy_propellant = new Item().setUnlocalizedName("boy_propellant").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_propellant"); - boy_bullet = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("boy_bullet").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_bullet"); - boy_target = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("boy_target").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_target"); - boy_shielding = new Item().setUnlocalizedName("boy_shielding").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_shielding"); - - //man_explosive = new Item().setUnlocalizedName("man_explosive").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":man_explosive"); - man_igniter = new Item().setUnlocalizedName("man_igniter").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":man_igniter"); - man_core = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("man_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":man_core"); - - mike_core = new Item().setUnlocalizedName("mike_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":mike_core"); - mike_deut = new Item().setUnlocalizedName("mike_deut").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setContainerItem(ModItems.tank_steel).setTextureName(RefStrings.MODID + ":mike_deut"); - mike_cooling_unit = new Item().setUnlocalizedName("mike_cooling_unit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":mike_cooling_unit"); - - tsar_core = new Item().setUnlocalizedName("tsar_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":tsar_core"); - - fleija_igniter = new ItemFleija().setUnlocalizedName("fleija_igniter").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":fleija_igniter"); - fleija_propellant = new ItemFleija().setUnlocalizedName("fleija_propellant").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":fleija_propellant"); - fleija_core = new ItemFleija().setUnlocalizedName("fleija_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":fleija_core"); - - solinium_igniter = new ItemSolinium().setUnlocalizedName("solinium_igniter").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":solinium_igniter"); - solinium_propellant = new ItemSolinium().setUnlocalizedName("solinium_propellant").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":solinium_propellant"); - solinium_core = new ItemSolinium().setUnlocalizedName("solinium_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":solinium_core"); - - n2_charge = new ItemN2().setUnlocalizedName("n2_charge").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":n2_charge"); - - egg_balefire_shard = new Item().setUnlocalizedName("egg_balefire_shard").setMaxStackSize(16).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":egg_balefire_shard"); - egg_balefire = new Item().setUnlocalizedName("egg_balefire").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":egg_balefire"); - - custom_tnt = new ItemCustomLore().setUnlocalizedName("custom_tnt").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_tnt"); - custom_nuke = new ItemCustomLore().setUnlocalizedName("custom_nuke").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_nuke"); - custom_hydro = new ItemCustomLore().setUnlocalizedName("custom_hydro").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_hydro"); - custom_amat = new ItemCustomLore().setUnlocalizedName("custom_amat").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_amat"); - custom_dirty = new ItemCustomLore().setUnlocalizedName("custom_dirty").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_dirty"); - custom_schrab = new ItemCustomLore().setUnlocalizedName("custom_schrab").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_schrab"); - custom_fall = new ItemCustomLore().setUnlocalizedName("custom_fall").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_fall"); - - battery_generic = new ItemBattery(5000, 100, 100).setUnlocalizedName("battery_generic").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_generic_new"); - battery_advanced = new ItemBattery(20000, 500, 500).setUnlocalizedName("battery_advanced").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_new"); - battery_lithium = new ItemBattery(250000, 1000, 1000).setUnlocalizedName("battery_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium"); - battery_schrabidium = new ItemBattery(1000000, 5000, 5000).setUnlocalizedName("battery_schrabidium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_new"); - battery_spark = new ItemBattery(100000000, 2000000, 2000000).setUnlocalizedName("battery_spark").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark"); - battery_trixite = new ItemBattery(5000000, 40000, 200000).setUnlocalizedName("battery_trixite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_trixite"); - battery_creative = new Item().setUnlocalizedName("battery_creative").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_creative_new"); - - battery_red_cell = new ItemBattery(15000, 100, 100).setUnlocalizedName("battery_red_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_red_cell"); - battery_red_cell_6 = new ItemBattery(15000 * 6, 100, 100).setUnlocalizedName("battery_red_cell_6").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_red_cell_6"); - battery_red_cell_24 = new ItemBattery(15000 * 24, 100, 100).setUnlocalizedName("battery_red_cell_24").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_red_cell_24"); - battery_advanced_cell = new ItemBattery(60000, 500, 500).setUnlocalizedName("battery_advanced_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_cell"); - battery_advanced_cell_4 = new ItemBattery(60000 * 4, 500, 500).setUnlocalizedName("battery_advanced_cell_4").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_cell_4"); - battery_advanced_cell_12 = new ItemBattery(60000 * 12, 500, 500).setUnlocalizedName("battery_advanced_cell_12").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_cell_12"); - battery_lithium_cell = new ItemBattery(750000, 1000, 1000).setUnlocalizedName("battery_lithium_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium_cell"); - battery_lithium_cell_3 = new ItemBattery(750000 * 3, 1000, 1000).setUnlocalizedName("battery_lithium_cell_3").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium_cell_3"); - battery_lithium_cell_6 = new ItemBattery(750000 * 6, 1000, 1000).setUnlocalizedName("battery_lithium_cell_6").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium_cell_6"); - battery_schrabidium_cell = new ItemBattery(3000000, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell"); - battery_schrabidium_cell_2 = new ItemBattery(3000000 * 2, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell_2").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell_2"); - battery_schrabidium_cell_4 = new ItemBattery(3000000 * 4, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell_4").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell_4"); - battery_spark_cell_6 = new ItemBattery(100000000L * 6L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_6").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_6"); - battery_spark_cell_25 = new ItemBattery(100000000L * 25L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_25").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_25"); - battery_spark_cell_100 = new ItemBattery(100000000L * 100L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_100").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_100"); - battery_spark_cell_1000 = new ItemBattery(100000000L * 1000L, 20000000, 20000000).setUnlocalizedName("battery_spark_cell_1000").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_1000"); - battery_spark_cell_2500 = new ItemBattery(100000000L * 2500L, 20000000, 20000000).setUnlocalizedName("battery_spark_cell_2500").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_2500"); - battery_spark_cell_10000 = new ItemBattery(100000000L * 10000L, 200000000, 200000000).setUnlocalizedName("battery_spark_cell_10000").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_10000"); - battery_spark_cell_power = new ItemBattery(100000000L * 1000000L, 200000000, 200000000).setUnlocalizedName("battery_spark_cell_power").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_power"); - cube_power = new ItemBattery(1000000000000000000L, 1000000000000000L, 1000000000000000L).setUnlocalizedName("cube_power").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":cube_power"); - - battery_sc_uranium = new ItemSelfcharger(5).setUnlocalizedName("battery_sc_uranium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_uranium"); - battery_sc_technetium = new ItemSelfcharger(25).setUnlocalizedName("battery_sc_technetium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_technetium"); - battery_sc_plutonium = new ItemSelfcharger(100).setUnlocalizedName("battery_sc_plutonium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_plutonium"); - battery_sc_polonium = new ItemSelfcharger(500).setUnlocalizedName("battery_sc_polonium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_polonium"); - battery_sc_gold = new ItemSelfcharger(2500).setUnlocalizedName("battery_sc_gold").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_gold"); - battery_sc_lead = new ItemSelfcharger(5000).setUnlocalizedName("battery_sc_lead").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_lead"); - battery_sc_americium = new ItemSelfcharger(10000).setUnlocalizedName("battery_sc_americium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_americium"); - - battery_potato = new ItemBattery(1000, 0, 100).setUnlocalizedName("battery_potato").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_potato"); - battery_potatos = new ItemPotatos(500000, 0, 100).setUnlocalizedName("battery_potatos").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_potatos"); - hev_battery = new ItemFusionCore(150000).setUnlocalizedName("hev_battery").setMaxStackSize(4).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":hev_battery"); - fusion_core = new ItemFusionCore(2500000).setUnlocalizedName("fusion_core").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_core"); - fusion_core_infinite = new Item().setUnlocalizedName("fusion_core_infinite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_core_infinite"); - energy_core = new ItemBattery(10000000, 0, 1000).setUnlocalizedName("energy_core").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":energy_core"); - fuse = new ItemCustomLore().setUnlocalizedName("fuse").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fuse"); - redcoil_capacitor = new ItemCapacitor(10).setUnlocalizedName("redcoil_capacitor").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":redcoil_capacitor"); - euphemium_capacitor = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("euphemium_capacitor").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":redcoil_capacitor_euphemium"); - screwdriver = new ItemTooling(ToolType.SCREWDRIVER, 100).setUnlocalizedName("screwdriver"); - screwdriver_desh = new ItemTooling(ToolType.SCREWDRIVER, 0).setUnlocalizedName("screwdriver_desh"); - hand_drill = new ItemTooling(ToolType.HAND_DRILL, 100).setUnlocalizedName("hand_drill"); - hand_drill_desh = new ItemTooling(ToolType.HAND_DRILL, 0).setUnlocalizedName("hand_drill_desh"); - wrench_archineer = new ItemToolingWeapon(ToolType.WRENCH, 1000, 12F).setUnlocalizedName("wrench_archineer").setTextureName(RefStrings.MODID + ":wrench_archineer_hd"); - chemistry_set = new ItemCraftingDegradation(100).setUnlocalizedName("chemistry_set"); - chemistry_set_boron = new ItemCraftingDegradation(0).setUnlocalizedName("chemistry_set_boron"); - blowtorch = new ItemBlowtorch().setUnlocalizedName("blowtorch"); - acetylene_torch = new ItemBlowtorch().setUnlocalizedName("acetylene_torch"); - boltgun = new ItemBoltgun().setUnlocalizedName("boltgun"); - overfuse = new ItemCustomLore().setUnlocalizedName("overfuse").setMaxStackSize(1).setFull3D().setTextureName(RefStrings.MODID + ":overfuse"); - arc_electrode = new ItemArcElectrode().setUnlocalizedName("arc_electrode").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":arc_electrode"); - arc_electrode_burnt = new ItemArcElectrodeBurnt().setUnlocalizedName("arc_electrode_burnt").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":arc_electrode_burnt"); - - ams_focus_blank = new Item().setUnlocalizedName("ams_focus_blank").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_focus_blank"); - ams_focus_limiter = new ItemCustomLore().setUnlocalizedName("ams_focus_limiter").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_focus_limiter"); - ams_focus_booster = new ItemCustomLore().setUnlocalizedName("ams_focus_booster").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_focus_booster"); - ams_muzzle = new ItemCustomLore().setUnlocalizedName("ams_muzzle").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_muzzle"); - ams_lens = new ItemLens(60 * 60 * 60 * 20 * 100).setUnlocalizedName("ams_lens").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_lens"); - ams_core_sing = new ItemAMSCore(1000000000L, 200, 10).setUnlocalizedName("ams_core_sing").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_core_sing"); - ams_core_wormhole = new ItemAMSCore(1500000000L, 200, 15).setUnlocalizedName("ams_core_wormhole").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_core_wormhole"); - ams_core_eyeofharmony = new ItemAMSCore(2500000000L, 300, 10).setUnlocalizedName("ams_core_eyeofharmony").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_core_eyeofharmony"); - ams_core_thingy = new ItemAMSCore(5000000000L, 250, 5).setUnlocalizedName("ams_core_thingy").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":ams_core_thingy"); - - fusion_shield_tungsten = new ItemFusionShield(60 * 60 * 60 * 5, 3500).setUnlocalizedName("fusion_shield_tungsten").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_shield_tungsten"); - fusion_shield_desh = new ItemFusionShield(60 * 60 * 60 * 10, 4500).setUnlocalizedName("fusion_shield_desh").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_shield_desh"); - fusion_shield_chlorophyte = new ItemFusionShield(60 * 60 * 60 * 15, 9000).setUnlocalizedName("fusion_shield_chlorophyte").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_shield_chlorophyte"); - fusion_shield_vaporwave = new ItemFusionShield(60 * 60 * 60 * 10, 1916169).setUnlocalizedName("fusion_shield_vaporwave").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_shield_vaporwave"); - - upgrade_muffler = new ItemMuffler().setUnlocalizedName("upgrade_muffler").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":upgrade_muffler"); - - upgrade_template = new ItemCustomLore().setUnlocalizedName("upgrade_template").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":upgrade_template"); - upgrade_speed_1 = new ItemMachineUpgrade(UpgradeType.SPEED, 1).setUnlocalizedName("upgrade_speed_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_speed_1"); - upgrade_speed_2 = new ItemMachineUpgrade(UpgradeType.SPEED, 2).setUnlocalizedName("upgrade_speed_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_speed_2"); - upgrade_speed_3 = new ItemMachineUpgrade(UpgradeType.SPEED, 3).setUnlocalizedName("upgrade_speed_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_speed_3"); - upgrade_effect_1 = new ItemMachineUpgrade(UpgradeType.EFFECT, 1).setUnlocalizedName("upgrade_effect_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_effect_1"); - upgrade_effect_2 = new ItemMachineUpgrade(UpgradeType.EFFECT, 2).setUnlocalizedName("upgrade_effect_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_effect_2"); - upgrade_effect_3 = new ItemMachineUpgrade(UpgradeType.EFFECT, 3).setUnlocalizedName("upgrade_effect_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_effect_3"); - upgrade_power_1 = new ItemMachineUpgrade(UpgradeType.POWER, 1).setUnlocalizedName("upgrade_power_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_power_1"); - upgrade_power_2 = new ItemMachineUpgrade(UpgradeType.POWER, 2).setUnlocalizedName("upgrade_power_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_power_2"); - upgrade_power_3 = new ItemMachineUpgrade(UpgradeType.POWER, 3).setUnlocalizedName("upgrade_power_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_power_3"); - upgrade_fortune_1 = new ItemMachineUpgrade(UpgradeType.FORTUNE, 1).setUnlocalizedName("upgrade_fortune_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_fortune_1"); - upgrade_fortune_2 = new ItemMachineUpgrade(UpgradeType.FORTUNE, 2).setUnlocalizedName("upgrade_fortune_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_fortune_2"); - upgrade_fortune_3 = new ItemMachineUpgrade(UpgradeType.FORTUNE, 3).setUnlocalizedName("upgrade_fortune_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_fortune_3"); - upgrade_afterburn_1 = new ItemMachineUpgrade(UpgradeType.AFTERBURN, 1).setUnlocalizedName("upgrade_afterburn_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_afterburn_1"); - upgrade_afterburn_2 = new ItemMachineUpgrade(UpgradeType.AFTERBURN, 2).setUnlocalizedName("upgrade_afterburn_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_afterburn_2"); - upgrade_afterburn_3 = new ItemMachineUpgrade(UpgradeType.AFTERBURN, 3).setUnlocalizedName("upgrade_afterburn_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_afterburn_3"); - upgrade_overdrive_1 = new ItemMachineUpgrade(UpgradeType.OVERDRIVE, 1).setUnlocalizedName("upgrade_overdrive_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_overdrive_1"); - upgrade_overdrive_2 = new ItemMachineUpgrade(UpgradeType.OVERDRIVE, 2).setUnlocalizedName("upgrade_overdrive_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_overdrive_2"); - upgrade_overdrive_3 = new ItemMachineUpgrade(UpgradeType.OVERDRIVE, 3).setUnlocalizedName("upgrade_overdrive_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_overdrive_3"); - upgrade_radius = new ItemMachineUpgrade().setUnlocalizedName("upgrade_radius").setMaxStackSize(16).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_radius"); - upgrade_health = new ItemMachineUpgrade().setUnlocalizedName("upgrade_health").setMaxStackSize(16).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_health"); - upgrade_smelter = new ItemMachineUpgrade().setUnlocalizedName("upgrade_smelter").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_smelter"); - upgrade_shredder = new ItemMachineUpgrade().setUnlocalizedName("upgrade_shredder").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_shredder"); - upgrade_centrifuge = new ItemMachineUpgrade().setUnlocalizedName("upgrade_centrifuge").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_centrifuge"); - upgrade_crystallizer = new ItemMachineUpgrade().setUnlocalizedName("upgrade_crystallizer").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_crystallizer"); - upgrade_nullifier = new ItemMachineUpgrade().setUnlocalizedName("upgrade_nullifier").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_nullifier"); - upgrade_screm = new ItemMachineUpgrade().setUnlocalizedName("upgrade_screm").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_screm"); - upgrade_gc_speed = new ItemMachineUpgrade().setUnlocalizedName("upgrade_gc_speed").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_gc_speed"); - upgrade_5g = new ItemMachineUpgrade().setUnlocalizedName("upgrade_5g").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_5g"); - upgrade_stack = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_stack").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_stack"); - upgrade_ejector = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_ejector").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_ejector"); - - wand = new ItemWand().setUnlocalizedName("wand_k").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand"); - wand_s = new ItemWandS().setUnlocalizedName("wand_s").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_s"); - wand_d = new ItemWandD().setUnlocalizedName("wand_d").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_d"); - - structure_single = new ItemStructureSingle().setUnlocalizedName("structure_single").setMaxStackSize(1).setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":structure_single"); - structure_solid = new ItemStructureSolid().setUnlocalizedName("structure_solid").setMaxStackSize(1).setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":structure_solid"); - structure_pattern = new ItemStructurePattern().setUnlocalizedName("structure_pattern").setMaxStackSize(1).setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":structure_pattern"); - structure_randomized = new ItemStructureRandomized().setUnlocalizedName("structure_randomized").setMaxStackSize(1).setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":structure_randomized"); - structure_randomly = new ItemStructureRandomly().setUnlocalizedName("structure_randomly").setMaxStackSize(1).setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":structure_randomly"); - structure_custommachine = new ItemCMStructure().setUnlocalizedName("structure_custommachine").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":structure_custommachine"); - - rod_of_discord = new ItemDiscord().setUnlocalizedName("rod_of_discord").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":rod_of_discord"); - - nuke_starter_kit = new ItemStarterKit().setUnlocalizedName("nuke_starter_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nuke_starter_kit"); - nuke_advanced_kit = new ItemStarterKit().setUnlocalizedName("nuke_advanced_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nuke_advanced_kit"); - nuke_commercially_kit = new ItemStarterKit().setUnlocalizedName("nuke_commercially_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nuke_commercially_kit"); - nuke_electric_kit = new ItemStarterKit().setUnlocalizedName("nuke_electric_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nuke_electric_kit"); - gadget_kit = new ItemStarterKit().setUnlocalizedName("gadget_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":gadget_kit"); - boy_kit = new ItemStarterKit().setUnlocalizedName("boy_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_kit"); - man_kit = new ItemStarterKit().setUnlocalizedName("man_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":man_kit"); - mike_kit = new ItemStarterKit().setUnlocalizedName("mike_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":mike_kit"); - tsar_kit = new ItemStarterKit().setUnlocalizedName("tsar_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":tsar_kit"); - multi_kit = new ItemStarterKit().setUnlocalizedName("multi_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":multi_kit"); - custom_kit = new ItemStarterKit().setUnlocalizedName("custom_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_kit"); - grenade_kit = new ItemStarterKit().setUnlocalizedName("grenade_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_kit"); - fleija_kit = new ItemStarterKit().setUnlocalizedName("fleija_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":fleija_kit"); - prototype_kit = new ItemStarterKit().setUnlocalizedName("prototype_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":prototype_kit"); - missile_kit = new ItemStarterKit().setUnlocalizedName("missile_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_kit"); - t45_kit = new ItemStarterKit().setUnlocalizedName("t45_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":t45_kit"); - euphemium_kit = new ItemStarterKit().setUnlocalizedName("euphemium_kit").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":code"); - solinium_kit = new ItemStarterKit().setUnlocalizedName("solinium_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":solinium_kit"); - hazmat_kit = new ItemStarterKit().setUnlocalizedName("hazmat_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_kit"); - hazmat_red_kit = new ItemStarterKit().setUnlocalizedName("hazmat_red_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_red_kit"); - hazmat_grey_kit = new ItemStarterKit().setUnlocalizedName("hazmat_grey_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_grey_kit"); - kit_custom = new ItemKitCustom().setUnlocalizedName("kit_custom").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":kit"); - toolbox = new ItemToolBox().setUnlocalizedName("toolbox").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":kit_toolbox"); - legacy_toolbox = new ItemKitNBT().setUnlocalizedName("toolbox_legacy").setContainerItem(toolbox).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":kit_toolbox"); - - loot_10 = new ItemLootCrate().setUnlocalizedName("loot_10").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":loot_10"); - loot_15 = new ItemLootCrate().setUnlocalizedName("loot_15").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":loot_15"); - loot_misc = new ItemLootCrate().setUnlocalizedName("loot_misc").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":loot_misc"); - - ammo_container = new ItemAmmoContainer().setUnlocalizedName("ammo_container").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_container"); - - ingot_euphemium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("ingot_euphemium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_euphemium"); - nugget_euphemium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("nugget_euphemium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_euphemium"); - watch = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("watch").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":watch"); - apple_euphemium = new ItemAppleEuphemium(20, 100, false).setUnlocalizedName("apple_euphemium").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":apple_euphemium"); - - igniter = new ItemCustomLore().setUnlocalizedName("igniter").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":trigger"); - detonator = new ItemDetonator().setUnlocalizedName("detonator").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":detonator"); - detonator_multi = new ItemMultiDetonator().setUnlocalizedName("detonator_multi").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":detonator_multi"); - detonator_laser = new ItemLaserDetonator().setUnlocalizedName("detonator_laser").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":detonator_laser"); - detonator_deadman = new ItemDrop().setUnlocalizedName("detonator_deadman").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":detonator_deadman"); - detonator_de = new ItemDrop().setUnlocalizedName("detonator_de").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":detonator_de"); - bomb_caller = new ItemBombCaller().setUnlocalizedName("bomb_caller").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bomb_caller"); - meteor_remote = new ItemMeteorRemote().setUnlocalizedName("meteor_remote").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":meteor_remote"); - anchor_remote = new ItemAnchorRemote().setUnlocalizedName("anchor_remote").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":anchor_remote"); - spawn_chopper = new ItemChopper().setUnlocalizedName("chopper").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":chopper"); - spawn_worm = new ItemChopper().setUnlocalizedName("spawn_worm").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spawn_worm"); - spawn_ufo = new ItemChopper().setUnlocalizedName("spawn_ufo").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spawn_ufo"); - spawn_duck = new ItemChopper().setUnlocalizedName("spawn_duck").setMaxStackSize(16).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spawn_duck"); - linker = new ItemTeleLink().setUnlocalizedName("linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":linker"); - reactor_sensor = new ItemReactorSensor().setUnlocalizedName("reactor_sensor").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":reactor_sensor"); - oil_detector = new ItemOilDetector().setUnlocalizedName("oil_detector").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":oil_detector"); - //turret_control = new ItemTurretControl().setUnlocalizedName("turret_control").setFull3D().setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":turret_control"); - turret_chip = new ItemTurretChip().setUnlocalizedName("turret_chip").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":turret_chip"); - //turret_biometry = new ItemTurretBiometry().setUnlocalizedName("turret_biometry").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":rei_scanner"); - dosimeter = new ItemDosimeter().setUnlocalizedName("dosimeter").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":dosimeter"); - geiger_counter = new ItemGeigerCounter().setUnlocalizedName("geiger_counter").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":geiger_counter"); - digamma_diagnostic = new ItemDigammaDiagnostic().setUnlocalizedName("digamma_diagnostic").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":digamma_diagnostic"); - pollution_detector = new ItemPollutionDetector().setUnlocalizedName("pollution_detector").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pollution_detector"); - ore_density_scanner = new ItemOreDensityScanner().setUnlocalizedName("ore_density_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ore_density_scanner"); - survey_scanner = new ItemSurveyScanner().setUnlocalizedName("survey_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":survey_scanner"); - mirror_tool = new ItemMirrorTool().setUnlocalizedName("mirror_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":mirror_tool"); - rbmk_tool = new ItemRBMKTool().setUnlocalizedName("rbmk_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":rbmk_tool"); - coltan_tool = new ItemColtanCompass().setUnlocalizedName("coltan_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coltass"); - power_net_tool = new ItemPowerNetTool().setUnlocalizedName("power_net_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":power_net_tool"); - analysis_tool = new ItemAnalysisTool().setUnlocalizedName("analysis_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":analysis_tool"); - coupling_tool = new ItemCouplingTool().setUnlocalizedName("coupling_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coupling_tool"); - drone_linker = new ItemDroneLinker().setUnlocalizedName("drone_linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":drone_linker"); - radar_linker = new ItemRadarLinker().setUnlocalizedName("radar_linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radar_linker"); - settings_tool = new ItemSettingsTool().setUnlocalizedName("settings_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":settings_tool"); - - key = new ItemKey().setUnlocalizedName("key").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key"); - key_red = new ItemCustomLore().setUnlocalizedName("key_red").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red"); - key_red_cracked = new ItemCustomLore().setUnlocalizedName("key_red_cracked").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red_cracked"); - key_kit = new ItemCounterfitKeys().setUnlocalizedName("key_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key_pair"); - key_fake = new ItemKey().setUnlocalizedName("key_fake").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key_gold"); - pin = new ItemCustomLore().setUnlocalizedName("pin").setMaxStackSize(8).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pin"); - padlock_rusty = new ItemLock(1).setUnlocalizedName("padlock_rusty").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":padlock_rusty"); - padlock = new ItemLock(0.1).setUnlocalizedName("padlock").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":padlock"); - padlock_reinforced = new ItemLock(0.02).setUnlocalizedName("padlock_reinforced").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":padlock_reinforced"); - padlock_unbreakable = new ItemLock(0).setUnlocalizedName("padlock_unbreakable").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":padlock_unbreakable"); - - mech_key = new ItemCustomLore().setUnlocalizedName("mech_key").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":mech_key"); - - template_folder = new ItemTemplateFolder().setUnlocalizedName("template_folder").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":template_folder"); - journal_pip = new ItemTemplateFolder().setUnlocalizedName("journal_pip").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_pip"); - journal_bj = new ItemTemplateFolder().setUnlocalizedName("journal_bj").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_bj"); - journal_silver = new ItemTemplateFolder().setUnlocalizedName("journal_silver").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_silver"); - assembly_template = new ItemAssemblyTemplate().setUnlocalizedName("assembly_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":assembly_template"); - chemistry_template = new ItemChemistryTemplate().setUnlocalizedName("chemistry_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":chemistry_template"); - chemistry_icon = new ItemChemistryIcon().setUnlocalizedName("chemistry_icon").setMaxStackSize(1).setCreativeTab(null); - crucible_template = new ItemCrucibleTemplate().setUnlocalizedName("crucible_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":crucible_template"); - fluid_identifier = new ItemFluidIdentifier().setUnlocalizedName("fluid_identifier").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":fluid_identifier"); - fluid_identifier_multi = new ItemFluidIDMulti().setUnlocalizedName("fluid_identifier_multi").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":fluid_identifier_multi"); - fluid_icon = new ItemFluidIcon().setUnlocalizedName("fluid_icon").setCreativeTab(null).setTextureName(RefStrings.MODID + ":fluid_icon"); - fluid_tank_empty = new Item().setUnlocalizedName("fluid_tank_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank"); - fluid_tank_full = new ItemFluidTank().setUnlocalizedName("fluid_tank_full").setContainerItem(ModItems.fluid_tank_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank"); - fluid_tank_lead_empty = new Item().setUnlocalizedName("fluid_tank_lead_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank_lead"); - fluid_tank_lead_full = new ItemFluidTank().setUnlocalizedName("fluid_tank_lead_full").setContainerItem(ModItems.fluid_tank_lead_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank_lead"); - fluid_barrel_empty = new Item().setUnlocalizedName("fluid_barrel_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel"); - fluid_barrel_full = new ItemFluidTank().setUnlocalizedName("fluid_barrel_full").setContainerItem(ModItems.fluid_barrel_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel"); - fluid_barrel_infinite = new ItemInfiniteFluid(null, 1_000_000_000).setUnlocalizedName("fluid_barrel_infinite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel_infinite"); - pipette = new ItemPipette().setUnlocalizedName("pipette").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette"); - pipette_boron = new ItemPipette().setUnlocalizedName("pipette_boron").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette_boron"); - pipette_laboratory = new ItemPipette().setUnlocalizedName("pipette_laboratory").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette_laboratory"); - siphon = new ItemFluidSiphon().setUnlocalizedName("siphon").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":siphon"); - inf_water = new ItemInfiniteFluid(Fluids.WATER, 50).setUnlocalizedName("inf_water").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":inf_water"); - inf_water_mk2 = new ItemInfiniteFluid(Fluids.WATER, 500).setUnlocalizedName("inf_water_mk2").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":inf_water_mk2"); - - FluidTank.noDualUnload.add(fluid_barrel_infinite); - FluidTank.noDualUnload.add(inf_water); - FluidTank.noDualUnload.add(inf_water_mk2); - - disperser_canister_empty = new Item().setUnlocalizedName("disperser_canister_empty").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":disperser_canister"); - disperser_canister = new ItemDisperser().setUnlocalizedName("disperser_canister").setContainerItem(ModItems.disperser_canister_empty).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":disperser_canister"); - - glyphid_gland_empty = new Item().setUnlocalizedName("glyphid_gland_empty").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":glyphid_gland"); - glyphid_gland = new ItemDisperser().setUnlocalizedName("glyphid_gland").setContainerItem(ModItems.glyphid_gland_empty).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":glyphid_gland"); - - siren_track = new ItemCassette().setUnlocalizedName("siren_track").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":cassette"); - fluid_duct = new ItemFluidDuct().setUnlocalizedName("fluid_duct").setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":duct"); - - bobmazon = new ItemCatalog().setUnlocalizedName("bobmazon").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bobmazon"); - bobmazon_hidden = new ItemCatalog().setUnlocalizedName("bobmazon_hidden").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":bobmazon_special"); - - euphemium_helmet = new ArmorEuphemium(MainRegistry.aMatEuph, 0).setUnlocalizedName("euphemium_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_helmet"); - euphemium_plate = new ArmorEuphemium(MainRegistry.aMatEuph, 1).setUnlocalizedName("euphemium_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_plate"); - euphemium_legs = new ArmorEuphemium(MainRegistry.aMatEuph, 2).setUnlocalizedName("euphemium_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_legs"); - euphemium_boots = new ArmorEuphemium(MainRegistry.aMatEuph, 3).setUnlocalizedName("euphemium_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_boots"); - - ArmorMaterial aMatRags = EnumHelper.addArmorMaterial("HBM_RAGS", 150, new int[] { 1, 1, 1, 1 }, 0); - aMatRags.customCraftingMaterial = ModItems.rag; - - goggles = new ArmorModel(ArmorMaterial.IRON, 0).setUnlocalizedName("goggles").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":goggles"); - ashglasses = new ArmorAshGlasses(ArmorMaterial.IRON, 0).setUnlocalizedName("ashglasses").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ashglasses"); - gas_mask = new ArmorGasMask().setUnlocalizedName("gas_mask").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask"); - gas_mask_m65 = new ArmorGasMask().setUnlocalizedName("gas_mask_m65").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_m65"); - gas_mask_mono = new ArmorGasMask().setUnlocalizedName("gas_mask_mono").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_mono"); - gas_mask_olde = new ArmorGasMask().setUnlocalizedName("gas_mask_olde").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_olde"); - mask_rag = new ModArmor(aMatRags, 0).setUnlocalizedName("mask_rag").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_rag"); - mask_piss = new ModArmor(aMatRags, 0).setUnlocalizedName("mask_piss").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_piss"); - hat = new ArmorHat(MainRegistry.aMatAlloy, 0).setUnlocalizedName("nossy_hat").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":hat"); - no9 = new ArmorNo9(MainRegistry.aMatSteel, 0).setUnlocalizedName("no9").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":no9"); - beta = new ItemDrop().setUnlocalizedName("beta").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":beta"); - //oxy_mask = new ArmorModel(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("oxy_mask").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":oxy_mask"); - - schrabidium_helmet = new ArmorFSB(MainRegistry.aMatSchrab, 0, RefStrings.MODID + ":textures/armor/schrabidium_1.png") - .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 2)) - .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 2)) - .addEffect(new PotionEffect(Potion.jump.id, 20, 1)) - .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 2)) - .setUnlocalizedName("schrabidium_helmet").setTextureName(RefStrings.MODID + ":schrabidium_helmet"); - schrabidium_plate = new ArmorFSB(MainRegistry.aMatSchrab, 1, RefStrings.MODID + ":textures/armor/schrabidium_1.png").cloneStats((ArmorFSB) schrabidium_helmet).setUnlocalizedName("schrabidium_plate").setTextureName(RefStrings.MODID + ":schrabidium_plate"); - schrabidium_legs = new ArmorFSB(MainRegistry.aMatSchrab, 2, RefStrings.MODID + ":textures/armor/schrabidium_2.png").cloneStats((ArmorFSB) schrabidium_helmet).setUnlocalizedName("schrabidium_legs").setTextureName(RefStrings.MODID + ":schrabidium_legs"); - schrabidium_boots = new ArmorFSB(MainRegistry.aMatSchrab, 3, RefStrings.MODID + ":textures/armor/schrabidium_1.png").cloneStats((ArmorFSB) schrabidium_helmet).setUnlocalizedName("schrabidium_boots").setTextureName(RefStrings.MODID + ":schrabidium_boots"); - bismuth_helmet = new ArmorBismuth(MainRegistry.aMatBismuth, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") - .addEffect(new PotionEffect(Potion.jump.id, 20, 6)) - .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 6)) - .addEffect(new PotionEffect(Potion.regeneration.id, 20, 1)) - .addEffect(new PotionEffect(Potion.nightVision.id, 15 * 20, 0)) - .setDashCount(3) - .setUnlocalizedName("bismuth_helmet").setTextureName(RefStrings.MODID + ":bismuth_helmet"); - bismuth_plate = new ArmorBismuth(MainRegistry.aMatBismuth, 1, RefStrings.MODID + ":textures/armor/starmetal_2.png").cloneStats((ArmorFSB) bismuth_helmet).setUnlocalizedName("bismuth_plate").setTextureName(RefStrings.MODID + ":bismuth_plate"); - bismuth_legs = new ArmorBismuth(MainRegistry.aMatBismuth, 2, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) bismuth_helmet).setUnlocalizedName("bismuth_legs").setTextureName(RefStrings.MODID + ":bismuth_legs"); - bismuth_boots = new ArmorBismuth(MainRegistry.aMatBismuth, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) bismuth_helmet).setUnlocalizedName("bismuth_boots").setTextureName(RefStrings.MODID + ":bismuth_boots"); - titanium_helmet = new ArmorFSB(MainRegistry.aMatTitan, 0, RefStrings.MODID + ":textures/armor/titanium_1.png").setUnlocalizedName("titanium_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":titanium_helmet"); - titanium_plate = new ArmorFSB(MainRegistry.aMatTitan, 1, RefStrings.MODID + ":textures/armor/titanium_1.png").cloneStats((ArmorFSB) titanium_helmet).setUnlocalizedName("titanium_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":titanium_plate"); - titanium_legs = new ArmorFSB(MainRegistry.aMatTitan, 2, RefStrings.MODID + ":textures/armor/titanium_2.png").cloneStats((ArmorFSB) titanium_helmet).setUnlocalizedName("titanium_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":titanium_legs"); - titanium_boots = new ArmorFSB(MainRegistry.aMatTitan, 3, RefStrings.MODID + ":textures/armor/titanium_1.png").cloneStats((ArmorFSB) titanium_helmet).setUnlocalizedName("titanium_boots").setTextureName(RefStrings.MODID + ":titanium_boots"); - steel_helmet = new ArmorFSB(MainRegistry.aMatSteel, 0, RefStrings.MODID + ":textures/armor/steel_1.png").setUnlocalizedName("steel_helmet").setTextureName(RefStrings.MODID + ":steel_helmet"); - steel_plate = new ArmorFSB(MainRegistry.aMatSteel, 1, RefStrings.MODID + ":textures/armor/steel_1.png").cloneStats((ArmorFSB) steel_helmet).setUnlocalizedName("steel_plate").setTextureName(RefStrings.MODID + ":steel_plate"); - steel_legs = new ArmorFSB(MainRegistry.aMatSteel, 2, RefStrings.MODID + ":textures/armor/steel_2.png").cloneStats((ArmorFSB) steel_helmet).setUnlocalizedName("steel_legs").setTextureName(RefStrings.MODID + ":steel_legs"); - steel_boots = new ArmorFSB(MainRegistry.aMatSteel, 3, RefStrings.MODID + ":textures/armor/steel_1.png").cloneStats((ArmorFSB) steel_helmet).setUnlocalizedName("steel_boots").setTextureName(RefStrings.MODID + ":steel_boots"); - alloy_helmet = new ArmorFSB(MainRegistry.aMatAlloy, 0, RefStrings.MODID + ":textures/armor/alloy_1.png").setUnlocalizedName("alloy_helmet").setTextureName(RefStrings.MODID + ":alloy_helmet"); - alloy_plate = new ArmorFSB(MainRegistry.aMatAlloy, 1, RefStrings.MODID + ":textures/armor/alloy_1.png").cloneStats((ArmorFSB) alloy_helmet).setUnlocalizedName("alloy_plate").setTextureName(RefStrings.MODID + ":alloy_plate"); - alloy_legs = new ArmorFSB(MainRegistry.aMatAlloy, 2, RefStrings.MODID + ":textures/armor/alloy_2.png").cloneStats((ArmorFSB) alloy_helmet).setUnlocalizedName("alloy_legs").setTextureName(RefStrings.MODID + ":alloy_legs"); - alloy_boots = new ArmorFSB(MainRegistry.aMatAlloy, 3, RefStrings.MODID + ":textures/armor/alloy_1.png").cloneStats((ArmorFSB) alloy_helmet).setUnlocalizedName("alloy_boots").setTextureName(RefStrings.MODID + ":alloy_boots"); - cmb_helmet = new ArmorFSB(MainRegistry.aMatCMB, 0, RefStrings.MODID + ":textures/armor/cmb_1.png") - .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 2)) - .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 2)) - .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 4)) - .setUnlocalizedName("cmb_helmet").setTextureName(RefStrings.MODID + ":cmb_helmet"); - cmb_plate = new ArmorFSB(MainRegistry.aMatCMB, 1, RefStrings.MODID + ":textures/armor/cmb_1.png").cloneStats((ArmorFSB) cmb_helmet).setUnlocalizedName("cmb_plate").setTextureName(RefStrings.MODID + ":cmb_plate"); - cmb_legs = new ArmorFSB(MainRegistry.aMatCMB, 2, RefStrings.MODID + ":textures/armor/cmb_2.png").cloneStats((ArmorFSB) cmb_helmet).setUnlocalizedName("cmb_legs").setTextureName(RefStrings.MODID + ":cmb_legs"); - cmb_boots = new ArmorFSB(MainRegistry.aMatCMB, 3, RefStrings.MODID + ":textures/armor/cmb_1.png").cloneStats((ArmorFSB) cmb_helmet).setUnlocalizedName("cmb_boots").setTextureName(RefStrings.MODID + ":cmb_boots"); - paa_plate = new ArmorFSB(MainRegistry.aMatPaa, 1, RefStrings.MODID + ":textures/armor/paa_1.png").setNoHelmet(true) - .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 0)).setUnlocalizedName("paa_plate").setTextureName(RefStrings.MODID + ":paa_plate"); - paa_legs = new ArmorFSB(MainRegistry.aMatPaa, 2, RefStrings.MODID + ":textures/armor/paa_2.png").cloneStats((ArmorFSB) paa_plate).setUnlocalizedName("paa_legs").setTextureName(RefStrings.MODID + ":paa_legs"); - paa_boots = new ArmorFSB(MainRegistry.aMatPaa, 3, RefStrings.MODID + ":textures/armor/paa_1.png").cloneStats((ArmorFSB) paa_plate).setUnlocalizedName("paa_boots").setTextureName(RefStrings.MODID + ":paa_boots"); - asbestos_helmet = new ArmorFSB(MainRegistry.aMatAsbestos, 0, RefStrings.MODID + ":textures/armor/asbestos_1.png").setOverlay(RefStrings.MODID + ":textures/misc/overlay_asbestos.png").setUnlocalizedName("asbestos_helmet").setTextureName(RefStrings.MODID + ":asbestos_helmet"); - asbestos_plate = new ArmorFSB(MainRegistry.aMatAsbestos, 1, RefStrings.MODID + ":textures/armor/asbestos_1.png").setUnlocalizedName("asbestos_plate").setTextureName(RefStrings.MODID + ":asbestos_plate"); - asbestos_legs = new ArmorFSB(MainRegistry.aMatAsbestos, 2, RefStrings.MODID + ":textures/armor/asbestos_2.png").setUnlocalizedName("asbestos_legs").setTextureName(RefStrings.MODID + ":asbestos_legs"); - asbestos_boots = new ArmorFSB(MainRegistry.aMatAsbestos, 3, RefStrings.MODID + ":textures/armor/asbestos_1.png").setUnlocalizedName("asbestos_boots").setTextureName(RefStrings.MODID + ":asbestos_boots"); - security_helmet = new ArmorFSB(MainRegistry.aMatSecurity, 0, RefStrings.MODID + ":textures/armor/security_1.png").setUnlocalizedName("security_helmet").setTextureName(RefStrings.MODID + ":security_helmet"); - security_plate = new ArmorFSB(MainRegistry.aMatSecurity, 1, RefStrings.MODID + ":textures/armor/security_1.png").cloneStats((ArmorFSB) security_helmet).setUnlocalizedName("security_plate").setTextureName(RefStrings.MODID + ":security_plate"); - security_legs = new ArmorFSB(MainRegistry.aMatSecurity, 2, RefStrings.MODID + ":textures/armor/security_2.png").cloneStats((ArmorFSB) security_helmet).setUnlocalizedName("security_legs").setTextureName(RefStrings.MODID + ":security_legs"); - security_boots = new ArmorFSB(MainRegistry.aMatSecurity, 3, RefStrings.MODID + ":textures/armor/security_1.png").cloneStats((ArmorFSB) security_helmet).setUnlocalizedName("security_boots").setTextureName(RefStrings.MODID + ":security_boots"); - cobalt_helmet = new ArmorFSB(MainRegistry.aMatCobalt, 0, RefStrings.MODID + ":textures/armor/cobalt_1.png").setUnlocalizedName("cobalt_helmet").setTextureName(RefStrings.MODID + ":cobalt_helmet"); - cobalt_plate = new ArmorFSB(MainRegistry.aMatCobalt, 1, RefStrings.MODID + ":textures/armor/cobalt_1.png").cloneStats((ArmorFSB) cobalt_helmet).setUnlocalizedName("cobalt_plate").setTextureName(RefStrings.MODID + ":cobalt_plate"); - cobalt_legs = new ArmorFSB(MainRegistry.aMatCobalt, 2, RefStrings.MODID + ":textures/armor/cobalt_2.png").cloneStats((ArmorFSB) cobalt_helmet).setUnlocalizedName("cobalt_legs").setTextureName(RefStrings.MODID + ":cobalt_legs"); - cobalt_boots = new ArmorFSB(MainRegistry.aMatCobalt, 3, RefStrings.MODID + ":textures/armor/cobalt_1.png").cloneStats((ArmorFSB) cobalt_helmet).setUnlocalizedName("cobalt_boots").setTextureName(RefStrings.MODID + ":cobalt_boots"); - starmetal_helmet = new ArmorFSB(MainRegistry.aMatStarmetal, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") - .setUnlocalizedName("starmetal_helmet").setTextureName(RefStrings.MODID + ":starmetal_helmet"); - starmetal_plate = new ArmorFSB(MainRegistry.aMatStarmetal, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) starmetal_helmet).setUnlocalizedName("starmetal_plate").setTextureName(RefStrings.MODID + ":starmetal_plate"); - starmetal_legs = new ArmorFSB(MainRegistry.aMatStarmetal, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png").cloneStats((ArmorFSB) starmetal_helmet).setUnlocalizedName("starmetal_legs").setTextureName(RefStrings.MODID + ":starmetal_legs"); - starmetal_boots = new ArmorFSB(MainRegistry.aMatStarmetal, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) starmetal_helmet).setUnlocalizedName("starmetal_boots").setTextureName(RefStrings.MODID + ":starmetal_boots"); - - robes_helmet = new ArmorFSB(ArmorMaterial.CHAIN, 0, RefStrings.MODID + ":textures/armor/robes_1.png").setUnlocalizedName("robes_helmet").setTextureName(RefStrings.MODID + ":robes_helmet"); - robes_plate = new ArmorFSB(ArmorMaterial.CHAIN, 1, RefStrings.MODID + ":textures/armor/robes_1.png").cloneStats((ArmorFSB) robes_helmet).setUnlocalizedName("robes_plate").setTextureName(RefStrings.MODID + ":robes_plate"); - robes_legs = new ArmorFSB(ArmorMaterial.CHAIN, 2, RefStrings.MODID + ":textures/armor/robes_2.png").cloneStats((ArmorFSB) robes_helmet).setUnlocalizedName("robes_legs").setTextureName(RefStrings.MODID + ":robes_legs"); - robes_boots = new ArmorFSB(ArmorMaterial.CHAIN, 3, RefStrings.MODID + ":textures/armor/robes_1.png").cloneStats((ArmorFSB) robes_helmet).setUnlocalizedName("robes_boots").setTextureName(RefStrings.MODID + ":robes_boots"); - - initializeItem2(); - } - - public static void initializeItem2() { - - ArmorMaterial aMatZirconium = EnumHelper.addArmorMaterial("HBM_ZIRCONIUM", 1000, new int[] { 2, 5, 3, 1 }, 100); - aMatZirconium.customCraftingMaterial = ModItems.ingot_zirconium; - zirconium_legs = new ArmorFSB(aMatZirconium, 2, RefStrings.MODID + ":textures/armor/zirconium_2.png").setUnlocalizedName("zirconium_legs").setTextureName(RefStrings.MODID + ":zirconium_legs"); - - ArmorMaterial aMatDNT = EnumHelper.addArmorMaterial("HBM_DNT_LOLOLOL", 3, new int[] { 1, 1, 1, 1 }, 0); - aMatDNT.customCraftingMaterial = ModItems.ingot_dineutronium; - dnt_helmet = new ArmorFSB(aMatDNT, 0, RefStrings.MODID + ":textures/armor/dnt_1.png") - .setUnlocalizedName("dnt_helmet").setTextureName(RefStrings.MODID + ":dnt_helmet"); - dnt_plate = new ArmorFSB(aMatDNT, 1, RefStrings.MODID + ":textures/armor/dnt_1.png").cloneStats((ArmorFSB) dnt_helmet).setUnlocalizedName("dnt_plate").setTextureName(RefStrings.MODID + ":dnt_plate"); - dnt_legs = new ArmorFSB(aMatDNT, 2, RefStrings.MODID + ":textures/armor/dnt_2.png").cloneStats((ArmorFSB) dnt_helmet).setUnlocalizedName("dnt_legs").setTextureName(RefStrings.MODID + ":dnt_legs"); - dnt_boots = new ArmorFSB(aMatDNT, 3, RefStrings.MODID + ":textures/armor/dnt_1.png").cloneStats((ArmorFSB) dnt_helmet).setUnlocalizedName("dnt_boots").setTextureName(RefStrings.MODID + ":dnt_boots"); - - ArmorMaterial aMatT45 = EnumHelper.addArmorMaterial("HBM_T45", 150, new int[] { 3, 8, 6, 3 }, 0); - aMatT45.customCraftingMaterial = ModItems.plate_armor_titanium; - t45_helmet = new ArmorT45(aMatT45, 0, 1000000, 10000, 1000, 5) - .enableVATS(true) - .setHasGeigerSound(true) - .setHasHardLanding(true) - .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("t45_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":t45_helmet"); - t45_plate = new ArmorT45(aMatT45, 1, 1000000, 10000, 1000, 5).cloneStats((ArmorFSB) t45_helmet).setUnlocalizedName("t45_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":t45_plate"); - t45_legs = new ArmorT45(aMatT45, 2, 1000000, 10000, 1000, 5).cloneStats((ArmorFSB) t45_helmet).setUnlocalizedName("t45_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":t45_legs"); - t45_boots = new ArmorT45(aMatT45, 3, 1000000, 10000, 1000, 5).cloneStats((ArmorFSB) t45_helmet).setUnlocalizedName("t45_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":t45_boots"); - - ArmorMaterial aMatDesh = EnumHelper.addArmorMaterial("HBM_DESH", 150, new int[] { 3, 8, 6, 3 }, 0); - aMatDesh.customCraftingMaterial = ModItems.ingot_desh; - steamsuit_helmet = new ArmorDesh(aMatDesh, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.STEAM, 64_000, 500, 50, 1) - .setHasHardLanding(true) - .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 4)) - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("steamsuit_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":steamsuit_helmet"); - steamsuit_plate = new ArmorDesh(aMatDesh, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.STEAM, 64_000, 500, 50, 1).cloneStats((ArmorFSB) steamsuit_helmet).setUnlocalizedName("steamsuit_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":steamsuit_plate"); - steamsuit_legs = new ArmorDesh(aMatDesh, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", Fluids.STEAM, 64_000, 500, 50, 1).cloneStats((ArmorFSB) steamsuit_helmet).setUnlocalizedName("steamsuit_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":steamsuit_legs"); - steamsuit_boots = new ArmorDesh(aMatDesh, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.STEAM, 64_000, 500, 50, 1).cloneStats((ArmorFSB) steamsuit_helmet).setUnlocalizedName("steamsuit_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":steamsuit_boots"); - - ArmorMaterial aMatDiesel = EnumHelper.addArmorMaterial("HBM_BNUUY", 150, new int[] { 3, 8, 6, 3 }, 0); - aMatDiesel.customCraftingMaterial = ModItems.plate_copper; - dieselsuit_helmet = new ArmorDiesel(aMatDiesel, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.DIESEL, 64_000, 500, 50, 1) - .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 2)) - .addEffect(new PotionEffect(Potion.jump.id, 20, 2)) - .enableThermalSight(true) - .enableVATS(true) - .setUnlocalizedName("dieselsuit_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":dieselsuit_helmet"); - dieselsuit_plate = new ArmorDiesel(aMatDiesel, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.DIESEL, 64_000, 500, 50, 1).cloneStats((ArmorFSB) dieselsuit_helmet).setUnlocalizedName("dieselsuit_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":dieselsuit_plate"); - dieselsuit_legs = new ArmorDiesel(aMatDiesel, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", Fluids.DIESEL, 64_000, 500, 50, 1).cloneStats((ArmorFSB) dieselsuit_helmet).setUnlocalizedName("dieselsuit_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":dieselsuit_legs"); - dieselsuit_boots = new ArmorDiesel(aMatDiesel, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.DIESEL, 64_000, 500, 50, 1).cloneStats((ArmorFSB) dieselsuit_helmet).setUnlocalizedName("dieselsuit_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":dieselsuit_boots"); - - ArmorMaterial aMatAJR = EnumHelper.addArmorMaterial("HBM_T45AJR", 150, new int[] { 3, 8, 6, 3 }, 100); - aMatAJR.customCraftingMaterial = ModItems.plate_armor_ajr; - ajr_helmet = new ArmorAJR(aMatAJR, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25) - .enableVATS(true) - .setHasGeigerSound(true) - .setHasHardLanding(true) - .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) - .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) - .setStep("hbm:step.metal").setJump("hbm:step.iron_jump").setFall("hbm:step.iron_land") - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("ajr_helmet").setTextureName(RefStrings.MODID + ":ajr_helmet"); - ajr_plate = new ArmorAJR(aMatAJR, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajr_helmet).setUnlocalizedName("ajr_plate").setTextureName(RefStrings.MODID + ":ajr_plate"); - ajr_legs = new ArmorAJR(aMatAJR, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajr_helmet).setUnlocalizedName("ajr_legs").setTextureName(RefStrings.MODID + ":ajr_legs"); - ajr_boots = new ArmorAJR(aMatAJR, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajr_helmet).setUnlocalizedName("ajr_boots").setTextureName(RefStrings.MODID + ":ajr_boots"); - - ajro_helmet = new ArmorAJRO(aMatAJR, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25) - .enableVATS(true) - .setHasGeigerSound(true) - .setHasHardLanding(true) - .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) - .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) - .setStep("hbm:step.metal").setJump("hbm:step.iron_jump").setFall("hbm:step.iron_land") - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("ajro_helmet").setTextureName(RefStrings.MODID + ":ajro_helmet"); - ajro_plate = new ArmorAJRO(aMatAJR, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajro_helmet).setUnlocalizedName("ajro_plate").setTextureName(RefStrings.MODID + ":ajro_plate"); - ajro_legs = new ArmorAJRO(aMatAJR, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajro_helmet).setUnlocalizedName("ajro_legs").setTextureName(RefStrings.MODID + ":ajro_legs"); - ajro_boots = new ArmorAJRO(aMatAJR, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajro_helmet).setUnlocalizedName("ajro_boots").setTextureName(RefStrings.MODID + ":ajro_boots"); - - rpa_helmet = new ArmorRPA(aMatAJR, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25) - .enableVATS(true) - .setHasGeigerSound(true) - .setHasHardLanding(true) - .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 3)) - .setStep("hbm:step.powered") - .setJump("hbm:step.powered") - .setFall("hbm:step.powered") - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("rpa_helmet").setTextureName(RefStrings.MODID + ":rpa_helmet"); - rpa_plate = new ArmorRPA(aMatAJR, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) rpa_helmet).setUnlocalizedName("rpa_plate").setTextureName(RefStrings.MODID + ":rpa_plate"); - rpa_legs = new ArmorRPA(aMatAJR, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) rpa_helmet).setUnlocalizedName("rpa_legs").setTextureName(RefStrings.MODID + ":rpa_legs"); - rpa_boots = new ArmorRPA(aMatAJR, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) rpa_helmet).setUnlocalizedName("rpa_boots").setTextureName(RefStrings.MODID + ":rpa_boots"); - - ArmorMaterial aMatBJ = EnumHelper.addArmorMaterial("HBM_BLACKJACK", 150, new int[] { 3, 8, 6, 3 }, 100); - aMatBJ.customCraftingMaterial = ModItems.plate_armor_lunar; - bj_helmet = new ArmorBJ(aMatBJ, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 1000, 100) - .enableVATS(true) - .enableThermalSight(true) - .setHasGeigerSound(true) - .setHasHardLanding(true) - .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 1)) - .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) - .addEffect(new PotionEffect(Potion.field_76443_y.id, 20, 0)) - .addEffect(new PotionEffect(HbmPotion.radx.id, 20, 0)) - .setStep("hbm:step.metal") - .setJump("hbm:step.iron_jump") - .setFall("hbm:step.iron_land").setUnlocalizedName("bj_helmet").setTextureName(RefStrings.MODID + ":bj_helmet"); - bj_plate = new ArmorBJ(aMatBJ, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 1000, 100).cloneStats((ArmorFSB) bj_helmet).setUnlocalizedName("bj_plate").setTextureName(RefStrings.MODID + ":bj_plate"); - bj_plate_jetpack = new ArmorBJJetpack(aMatBJ, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 1000, 100).cloneStats((ArmorFSB) bj_helmet).setUnlocalizedName("bj_plate_jetpack").setTextureName(RefStrings.MODID + ":bj_plate_jetpack"); - bj_legs = new ArmorBJ(aMatBJ, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 10000000, 10000, 1000, 100).cloneStats((ArmorFSB) bj_helmet).setUnlocalizedName("bj_legs").setTextureName(RefStrings.MODID + ":bj_legs"); - bj_boots = new ArmorBJ(aMatBJ, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 1000, 100).cloneStats((ArmorFSB) bj_helmet).setUnlocalizedName("bj_boots").setTextureName(RefStrings.MODID + ":bj_boots"); - - ArmorMaterial aMatEnv = EnumHelper.addArmorMaterial("HBM_ENV", 150, new int[] { 3, 8, 6, 3 }, 100); - aMatEnv.customCraftingMaterial = ModItems.plate_armor_hev; - envsuit_helmet = new ArmorEnvsuit(aMatEnv, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 100_000, 1_000, 250, 0) - .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 1)) - .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("envsuit_helmet").setTextureName(RefStrings.MODID + ":envsuit_helmet"); - envsuit_plate = new ArmorEnvsuit(aMatEnv, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 100_000, 1_000, 250, 0).cloneStats((ArmorFSB) envsuit_helmet).setUnlocalizedName("envsuit_plate").setTextureName(RefStrings.MODID + ":envsuit_plate"); - envsuit_legs = new ArmorEnvsuit(aMatEnv, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 100_000, 1_000, 250, 0).cloneStats((ArmorFSB) envsuit_helmet).setUnlocalizedName("envsuit_legs").setTextureName(RefStrings.MODID + ":envsuit_legs"); - envsuit_boots = new ArmorEnvsuit(aMatEnv, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 100_000, 1_000, 250, 0).cloneStats((ArmorFSB) envsuit_helmet).setUnlocalizedName("envsuit_boots").setTextureName(RefStrings.MODID + ":envsuit_boots"); - - ArmorMaterial aMatHEV = EnumHelper.addArmorMaterial("HBM_HEV", 150, new int[] { 3, 8, 6, 3 }, 100); - aMatHEV.customCraftingMaterial = ModItems.plate_armor_hev; - hev_helmet = new ArmorHEV(aMatHEV, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000, 10000, 2500, 0) - .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 1)) - .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) - .setHasGeigerSound(true) - .setHasCustomGeiger(true) - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("hev_helmet").setTextureName(RefStrings.MODID + ":hev_helmet"); - hev_plate = new ArmorHEV(aMatHEV, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000, 10000, 2500, 0).cloneStats((ArmorFSB) hev_helmet).setUnlocalizedName("hev_plate").setTextureName(RefStrings.MODID + ":hev_plate"); - hev_legs = new ArmorHEV(aMatHEV, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 1000000, 10000, 2500, 0).cloneStats((ArmorFSB) hev_helmet).setUnlocalizedName("hev_legs").setTextureName(RefStrings.MODID + ":hev_legs"); - hev_boots = new ArmorHEV(aMatHEV, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000, 10000, 2500, 0).cloneStats((ArmorFSB) hev_helmet).setUnlocalizedName("hev_boots").setTextureName(RefStrings.MODID + ":hev_boots"); - - jackt = new ModArmor(MainRegistry.aMatSteel, 1).setUnlocalizedName("jackt").setTextureName(RefStrings.MODID + ":jackt"); - jackt2 = new ModArmor(MainRegistry.aMatSteel, 1).setUnlocalizedName("jackt2").setTextureName(RefStrings.MODID + ":jackt2"); - - ArmorMaterial aMatFau = EnumHelper.addArmorMaterial("HBM_DIGAMMA", 150, new int[] { 3, 8, 6, 3 }, 100); - aMatFau.customCraftingMaterial = ModItems.plate_armor_fau; - fau_helmet = new ArmorDigamma(aMatFau, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 2500, 0) - .addEffect(new PotionEffect(Potion.jump.id, 20, 1)) - .setHasGeigerSound(true) - .enableThermalSight(true) - .setHasHardLanding(true) - .setStep("hbm:step.metal") - .setJump("hbm:step.iron_jump") - .setFall("hbm:step.iron_land") - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("fau_helmet").setTextureName(RefStrings.MODID + ":fau_helmet"); - fau_plate = new ArmorDigamma(aMatFau, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 2500, 0).cloneStats((ArmorFSB) fau_helmet).setFullSetForHide().setUnlocalizedName("fau_plate").setTextureName(RefStrings.MODID + ":fau_plate"); - fau_legs = new ArmorDigamma(aMatFau, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 10000000, 10000, 2500, 0).cloneStats((ArmorFSB) fau_helmet).hides(EnumPlayerPart.LEFT_LEG, EnumPlayerPart.RIGHT_LEG).setFullSetForHide().setUnlocalizedName("fau_legs").setTextureName(RefStrings.MODID + ":fau_legs"); - fau_boots = new ArmorDigamma(aMatFau, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 2500, 0).cloneStats((ArmorFSB) fau_helmet).setUnlocalizedName("fau_boots").setTextureName(RefStrings.MODID + ":fau_boots"); - - ArmorMaterial aMatDNS = EnumHelper.addArmorMaterial("HBM_DNT_NANO", 150, new int[] { 3, 8, 6, 3 }, 100); - aMatDNS.customCraftingMaterial = ModItems.plate_armor_dnt; - dns_helmet = new ArmorDNT(aMatDNS, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000000, 1000000, 100000, 115) - .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 9)) - .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 7)) - .addEffect(new PotionEffect(Potion.jump.id, 20, 2)) - .setHasGeigerSound(true) - .enableVATS(true) - .enableThermalSight(true) - .setHasHardLanding(true) - .setStep("hbm:step.metal") - .setJump("hbm:step.iron_jump") - .setFall("hbm:step.iron_land") - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("dns_helmet").setTextureName(RefStrings.MODID + ":dns_helmet"); - dns_plate = new ArmorDNT(aMatDNS, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000000, 1000000, 100000, 115).cloneStats((ArmorFSB) dns_helmet).setUnlocalizedName("dns_plate").setTextureName(RefStrings.MODID + ":dns_plate"); - dns_legs = new ArmorDNT(aMatDNS, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 1000000000, 1000000, 100000, 115).cloneStats((ArmorFSB) dns_helmet).setUnlocalizedName("dns_legs").setTextureName(RefStrings.MODID + ":dns_legs"); - dns_boots = new ArmorDNT(aMatDNS, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000000, 1000000, 100000, 115).cloneStats((ArmorFSB) dns_helmet).setUnlocalizedName("dns_boots").setTextureName(RefStrings.MODID + ":dns_boots"); - - ArmorMaterial aMatTaurun = EnumHelper.addArmorMaterial("HBM_TRENCH", 150, new int[] { 3, 8, 6, 3 }, 100); - aMatTaurun.customCraftingMaterial = ModItems.plate_iron; - taurun_helmet = new ArmorTaurun(aMatTaurun, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") - .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) - .setStepSize(1) - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("taurun_helmet").setTextureName(RefStrings.MODID + ":taurun_helmet"); - taurun_plate = new ArmorTaurun(aMatTaurun, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_plate").setTextureName(RefStrings.MODID + ":taurun_plate"); - taurun_legs = new ArmorTaurun(aMatTaurun, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_legs").setTextureName(RefStrings.MODID + ":taurun_legs"); - taurun_boots = new ArmorTaurun(aMatTaurun, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_boots").setTextureName(RefStrings.MODID + ":taurun_boots"); - ArmorMaterial aMatTrench = EnumHelper.addArmorMaterial("HBM_TRENCH", 150, new int[] { 3, 8, 6, 3 }, 100); - aMatTrench.customCraftingMaterial = ModItems.plate_iron; - trenchmaster_helmet = new ArmorTrenchmaster(aMatTrench, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") - .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 2)) - .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 1)) - .addEffect(new PotionEffect(Potion.jump.id, 20, 1)) - .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 0)) - .enableVATS(true) - .setStepSize(1) - .hides(EnumPlayerPart.HAT) - .setUnlocalizedName("trenchmaster_helmet").setTextureName(RefStrings.MODID + ":trenchmaster_helmet"); - trenchmaster_plate = new ArmorTrenchmaster(aMatTrench, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) trenchmaster_helmet).setUnlocalizedName("trenchmaster_plate").setTextureName(RefStrings.MODID + ":trenchmaster_plate"); - trenchmaster_legs = new ArmorTrenchmaster(aMatTrench, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png").cloneStats((ArmorFSB) trenchmaster_helmet).setUnlocalizedName("trenchmaster_legs").setTextureName(RefStrings.MODID + ":trenchmaster_legs"); - trenchmaster_boots = new ArmorTrenchmaster(aMatTrench, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) trenchmaster_helmet).setUnlocalizedName("trenchmaster_boots").setTextureName(RefStrings.MODID + ":trenchmaster_boots"); - - jackt = new ModArmor(MainRegistry.aMatSteel, 1).setUnlocalizedName("jackt").setTextureName(RefStrings.MODID + ":jackt"); - jackt2 = new ModArmor(MainRegistry.aMatSteel, 1).setUnlocalizedName("jackt2").setTextureName(RefStrings.MODID + ":jackt2"); - - chainsaw = new ItemChainsaw(25, -0.05, MainRegistry.tMatChainsaw, EnumToolType.AXE, 5000, 1, 250, - Fluids.DIESEL, Fluids.DIESEL_CRACK, Fluids.KEROSENE, Fluids.BIOFUEL, Fluids.GASOLINE, Fluids.GASOLINE_LEADED, Fluids.PETROIL, Fluids.PETROIL_LEADED, Fluids.COALGAS, Fluids.COALGAS_LEADED) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addHitAbility(new WeaponAbility.ChainsawAbility(10)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setShears().setUnlocalizedName("chainsaw").setTextureName(RefStrings.MODID + ":chainsaw"); - - schrabidium_sword = new ItemSwordAbility(75, 0, MainRegistry.tMatSchrab) - .addHitAbility(new WeaponAbility.RadiationAbility(50F)) - .addHitAbility(new WeaponAbility.VampireAbility(2F)) - .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_sword").setTextureName(RefStrings.MODID + ":schrabidium_sword"); - - schrabidium_pickaxe = new ItemToolAbility(20, 0, MainRegistry.tMatSchrab, EnumToolType.PICKAXE) - .addHitAbility(new WeaponAbility.RadiationAbility(15F)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(10)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_pickaxe").setTextureName(RefStrings.MODID + ":schrabidium_pickaxe"); - - schrabidium_axe = new ItemToolAbility(25, 0, MainRegistry.tMatSchrab, EnumToolType.AXE) - .addHitAbility(new WeaponAbility.RadiationAbility(15F)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(10)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addHitAbility(new WeaponAbility.BeheaderAbility()) - .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_axe").setTextureName(RefStrings.MODID + ":schrabidium_axe"); - - schrabidium_shovel = new ItemToolAbility(15, 0, MainRegistry.tMatSchrab, EnumToolType.SHOVEL) - .addHitAbility(new WeaponAbility.RadiationAbility(15F)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(10)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_shovel").setTextureName(RefStrings.MODID + ":schrabidium_shovel"); - - schrabidium_hoe = new HoeSchrabidium(MainRegistry.tMatSchrab).setUnlocalizedName("schrabidium_hoe").setTextureName(RefStrings.MODID + ":schrabidium_hoe"); - - titanium_sword = new ItemSwordAbility(6.5F, 0, MainRegistry.tMatTitan).setUnlocalizedName("titanium_sword").setTextureName(RefStrings.MODID + ":titanium_sword"); - titanium_pickaxe = new ItemToolAbility(4.5F, 0, MainRegistry.tMatTitan, EnumToolType.PICKAXE).setUnlocalizedName("titanium_pickaxe").setTextureName(RefStrings.MODID + ":titanium_pickaxe"); - titanium_axe = new ItemToolAbility(5.5F, 0, MainRegistry.tMatTitan, EnumToolType.AXE) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("titanium_axe").setTextureName(RefStrings.MODID + ":titanium_axe"); - titanium_shovel = new ItemToolAbility(3.5F, 0, MainRegistry.tMatTitan, EnumToolType.SHOVEL).setUnlocalizedName("titanium_shovel").setTextureName(RefStrings.MODID + ":titanium_shovel"); - titanium_hoe = new ModHoe(MainRegistry.tMatTitan).setUnlocalizedName("titanium_hoe").setTextureName(RefStrings.MODID + ":titanium_hoe"); - steel_sword = new ItemSwordAbility(6F, 0, MainRegistry.tMatSteel).setUnlocalizedName("steel_sword").setTextureName(RefStrings.MODID + ":steel_sword"); - steel_pickaxe = new ItemToolAbility(4F, 0, MainRegistry.tMatSteel, EnumToolType.PICKAXE).setUnlocalizedName("steel_pickaxe").setTextureName(RefStrings.MODID + ":steel_pickaxe"); - steel_axe = new ItemToolAbility(5F, 0, MainRegistry.tMatSteel, EnumToolType.AXE) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("steel_axe").setTextureName(RefStrings.MODID + ":steel_axe"); - steel_shovel = new ItemToolAbility(3F, 0, MainRegistry.tMatSteel, EnumToolType.SHOVEL).setUnlocalizedName("steel_shovel").setTextureName(RefStrings.MODID + ":steel_shovel"); - steel_hoe = new ModHoe(MainRegistry.tMatSteel).setUnlocalizedName("steel_hoe").setTextureName(RefStrings.MODID + ":steel_hoe"); - - alloy_sword = new ItemSwordAbility(8F, 0, MainRegistry.tMatAlloy) - .addHitAbility(new WeaponAbility.StunAbility(2)).setUnlocalizedName("alloy_sword").setTextureName(RefStrings.MODID + ":alloy_sword"); - - alloy_pickaxe = new ItemToolAbility(5F, 0, MainRegistry.tMatAlloy, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.RecursionAbility(3)).setUnlocalizedName("alloy_pickaxe").setTextureName(RefStrings.MODID + ":alloy_pickaxe"); - - alloy_axe = new ItemToolAbility(7F, 0, MainRegistry.tMatAlloy, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.RecursionAbility(3)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("alloy_axe").setTextureName(RefStrings.MODID + ":alloy_axe"); - - alloy_shovel = new ItemToolAbility(4F, 0, MainRegistry.tMatAlloy, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.RecursionAbility(3)).setUnlocalizedName("alloy_shovel").setTextureName(RefStrings.MODID + ":alloy_shovel"); - - alloy_hoe = new ModHoe(MainRegistry.tMatAlloy).setUnlocalizedName("alloy_hoe").setTextureName(RefStrings.MODID + ":alloy_hoe"); - - cmb_sword = new ItemSwordAbility(35F, 0, MainRegistry.tMatCMB) - .addHitAbility(new WeaponAbility.StunAbility(2)) - .addHitAbility(new WeaponAbility.VampireAbility(2F)).setUnlocalizedName("cmb_sword").setTextureName(RefStrings.MODID + ":cmb_sword"); - - cmb_pickaxe = new ItemToolAbility(10F, 0, MainRegistry.tMatCMB, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cmb_pickaxe").setTextureName(RefStrings.MODID + ":cmb_pickaxe"); - - cmb_axe = new ItemToolAbility(30F, 0, MainRegistry.tMatCMB, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("cmb_axe").setTextureName(RefStrings.MODID + ":cmb_axe"); - - cmb_shovel = new ItemToolAbility(8F, 0, MainRegistry.tMatCMB, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cmb_shovel").setTextureName(RefStrings.MODID + ":cmb_shovel"); - - cmb_hoe = new ModHoe(MainRegistry.tMatCMB).setUnlocalizedName("cmb_hoe").setTextureName(RefStrings.MODID + ":cmb_hoe"); - - elec_sword = new ItemSwordAbilityPower(12.5F, 0, MainRegistry.tMatElec, 500000, 1000, 100) - .addHitAbility(new WeaponAbility.StunAbility(5)).setUnlocalizedName("elec_sword").setTextureName(RefStrings.MODID + ":elec_sword_anim"); - - elec_pickaxe = new ItemToolAbilityPower(6F, 0, MainRegistry.tMatElec, EnumToolType.PICKAXE, 500000, 1000, 100) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("elec_pickaxe").setTextureName(RefStrings.MODID + ":elec_drill_anim"); - - elec_axe = new ItemToolAbilityPower(10F, 0, MainRegistry.tMatElec, EnumToolType.AXE, 500000, 1000, 100) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)) - .addHitAbility(new WeaponAbility.ChainsawAbility(15)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setShears().setUnlocalizedName("elec_axe").setTextureName(RefStrings.MODID + ":elec_chainsaw_anim"); - - elec_shovel = new ItemToolAbilityPower(5F, 0, MainRegistry.tMatElec, EnumToolType.SHOVEL, 500000, 1000, 100) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("elec_shovel").setTextureName(RefStrings.MODID + ":elec_shovel_anim"); - - desh_sword = new ItemSwordAbility(12.5F, 0, MainRegistry.tMatDesh) - .addHitAbility(new WeaponAbility.StunAbility(2)).setUnlocalizedName("desh_sword").setTextureName(RefStrings.MODID + ":desh_sword"); - - desh_pickaxe = new ItemToolAbility(5F, -0.05, MainRegistry.tMatDesh, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.RecursionAbility(3)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("desh_pickaxe").setTextureName(RefStrings.MODID + ":desh_pickaxe"); - - desh_axe = new ItemToolAbility(7.5F, -0.05, MainRegistry.tMatDesh, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.RecursionAbility(3)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("desh_axe").setTextureName(RefStrings.MODID + ":desh_axe"); - - desh_shovel = new ItemToolAbility(4F, -0.05, MainRegistry.tMatDesh, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.RecursionAbility(3)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("desh_shovel").setTextureName(RefStrings.MODID + ":desh_shovel"); - - desh_hoe = new ModHoe(MainRegistry.tMatDesh).setUnlocalizedName("desh_hoe").setTextureName(RefStrings.MODID + ":desh_hoe"); - - cobalt_sword = new ItemSwordAbility(12F, 0, MainRegistry.tMatCobalt).setUnlocalizedName("cobalt_sword").setTextureName(RefStrings.MODID + ":cobalt_sword"); - cobalt_pickaxe = new ItemToolAbility(4F, 0, MainRegistry.tMatCobalt, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(1)).setUnlocalizedName("cobalt_pickaxe").setTextureName(RefStrings.MODID + ":cobalt_pickaxe"); - cobalt_axe = new ItemToolAbility(6F, 0, MainRegistry.tMatCobalt, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(1)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("cobalt_axe").setTextureName(RefStrings.MODID + ":cobalt_axe"); - cobalt_shovel = new ItemToolAbility(3.5F, 0, MainRegistry.tMatCobalt, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(1)).setUnlocalizedName("cobalt_shovel").setTextureName(RefStrings.MODID + ":cobalt_shovel"); - cobalt_hoe = new ModHoe(MainRegistry.tMatCobalt).setUnlocalizedName("cobalt_hoe").setTextureName(RefStrings.MODID + ":cobalt_hoe"); - - ToolMaterial matDecCobalt = EnumHelper.addToolMaterial("HBM_COBALT2", 3, 2500, 15.0F, 2.5F, 75).setRepairItem(new ItemStack(ModItems.ingot_cobalt)); - cobalt_decorated_sword = new ItemSwordAbility(15F, 0, matDecCobalt) - .addHitAbility(new WeaponAbility.BobbleAbility()).setUnlocalizedName("cobalt_decorated_sword").setTextureName(RefStrings.MODID + ":cobalt_decorated_sword"); - cobalt_decorated_pickaxe = new ItemToolAbility(6F, 0, matDecCobalt, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cobalt_decorated_pickaxe").setTextureName(RefStrings.MODID + ":cobalt_decorated_pickaxe"); - cobalt_decorated_axe = new ItemToolAbility(8F, 0, matDecCobalt, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("cobalt_decorated_axe").setTextureName(RefStrings.MODID + ":cobalt_decorated_axe"); - cobalt_decorated_shovel = new ItemToolAbility(5F, 0, matDecCobalt, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cobalt_decorated_shovel").setTextureName(RefStrings.MODID + ":cobalt_decorated_shovel"); - cobalt_decorated_hoe = new ModHoe(matDecCobalt).setUnlocalizedName("cobalt_decorated_hoe").setTextureName(RefStrings.MODID + ":cobalt_decorated_hoe"); - - ToolMaterial matStarmetal = EnumHelper.addToolMaterial("HBM_STARMETAL", 3, 3000, 20.0F, 2.5F, 100).setRepairItem(new ItemStack(ModItems.ingot_starmetal)); - starmetal_sword = new ItemSwordAbility(25F, 0, matStarmetal) - .addHitAbility(new WeaponAbility.BeheaderAbility()) - .addHitAbility(new WeaponAbility.StunAbility(3)) - .addHitAbility(new WeaponAbility.BobbleAbility()).setUnlocalizedName("starmetal_sword").setTextureName(RefStrings.MODID + ":starmetal_sword"); - starmetal_pickaxe = new ItemToolAbility(8F, 0, matStarmetal, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.RecursionAbility(6)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addHitAbility(new WeaponAbility.StunAbility(3)).setUnlocalizedName("starmetal_pickaxe").setTextureName(RefStrings.MODID + ":starmetal_pickaxe"); - starmetal_axe = new ItemToolAbility(12F, 0, matStarmetal, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.RecursionAbility(6)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addHitAbility(new WeaponAbility.BeheaderAbility()) - .addHitAbility(new WeaponAbility.StunAbility(3)).setUnlocalizedName("starmetal_axe").setTextureName(RefStrings.MODID + ":starmetal_axe"); - starmetal_shovel = new ItemToolAbility(7F, 0, matStarmetal, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.RecursionAbility(6)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addHitAbility(new WeaponAbility.StunAbility(3)).setUnlocalizedName("starmetal_shovel").setTextureName(RefStrings.MODID + ":starmetal_shovel"); - starmetal_hoe = new ModHoe(matStarmetal).setUnlocalizedName("starmetal_hoe").setTextureName(RefStrings.MODID + ":starmetal_hoe"); - - centri_stick = new ItemToolAbility(3F, 0, MainRegistry.tMatElec, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.CentrifugeAbility()).setMaxDamage(50).setUnlocalizedName("centri_stick").setTextureName(RefStrings.MODID + ":centri_stick"); - smashing_hammer = new ItemToolAbility(12F, -0.1, MainRegistry.tMatSteel, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.ShredderAbility()).setMaxDamage(2500).setUnlocalizedName("smashing_hammer").setTextureName(RefStrings.MODID + ":smashing_hammer"); - drax = new ItemToolAbilityPower(10F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 500000000, 100000, 5000) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(2)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)).setUnlocalizedName("drax").setTextureName(RefStrings.MODID + ":drax"); - drax_mk2 = new ItemToolAbilityPower(15F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 1000000000, 250000, 7500) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addBreakAbility(new ToolAbility.CentrifugeAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(3)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.HammerAbility(3)) - .addBreakAbility(new ToolAbility.RecursionAbility(7)).setUnlocalizedName("drax_mk2").setTextureName(RefStrings.MODID + ":drax_mk2"); - drax_mk3 = new ItemToolAbilityPower(20F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 2500000000L, 500000, 10000) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addBreakAbility(new ToolAbility.CentrifugeAbility()) - .addBreakAbility(new ToolAbility.CrystallizerAbility()) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(4)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.HammerAbility(3)) - .addBreakAbility(new ToolAbility.HammerAbility(4)) - .addBreakAbility(new ToolAbility.RecursionAbility(9)).setUnlocalizedName("drax_mk3").setTextureName(RefStrings.MODID + ":drax_mk3"); - - ToolMaterial matBismuth = EnumHelper.addToolMaterial("HBM_BISMUTH", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth)); - bismuth_pickaxe = new ItemToolAbility(15F, 0, matBismuth, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(2)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addHitAbility(new WeaponAbility.StunAbility(5)) - .addHitAbility(new WeaponAbility.VampireAbility(2F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()) - .setDepthRockBreaker().setUnlocalizedName("bismuth_pickaxe").setTextureName(RefStrings.MODID + ":bismuth_pickaxe"); - bismuth_axe = new ItemToolAbility(25F, 0, matBismuth, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(2)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addHitAbility(new WeaponAbility.StunAbility(10)) - .addHitAbility(new WeaponAbility.VampireAbility(3F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("bismuth_axe").setTextureName(RefStrings.MODID + ":bismuth_axe"); - - - ToolMaterial matVolcano = EnumHelper.addToolMaterial("HBM_VOLCANIC", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth)); - volcanic_pickaxe = new ItemToolAbility(15F, 0, matVolcano, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(3)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addHitAbility(new WeaponAbility.FireAbility(5)) - .addHitAbility(new WeaponAbility.VampireAbility(2F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()) - .setDepthRockBreaker().setUnlocalizedName("volcanic_pickaxe").setTextureName(RefStrings.MODID + ":volcanic_pickaxe"); - volcanic_axe = new ItemToolAbility(25F, 0, matVolcano, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(3)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addHitAbility(new WeaponAbility.FireAbility(10)) - .addHitAbility(new WeaponAbility.VampireAbility(3F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("volcanic_axe").setTextureName(RefStrings.MODID + ":volcanic_axe"); - - ToolMaterial matChlorophyte = EnumHelper.addToolMaterial("HBM_CHLOROPHYTE", 4, 0, 75F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.powder_chlorophyte)); - chlorophyte_pickaxe = new ItemToolAbility(20F, 0, matChlorophyte, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.LuckAbility(4)) - .addBreakAbility(new ToolAbility.CentrifugeAbility()) - .addBreakAbility(new ToolAbility.MercuryAbility()) - .addHitAbility(new WeaponAbility.StunAbility(10)) - .addHitAbility(new WeaponAbility.VampireAbility(5F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()) - .setDepthRockBreaker().setUnlocalizedName("chlorophyte_pickaxe").setTextureName(RefStrings.MODID + ":chlorophyte_pickaxe"); - chlorophyte_axe = new ItemToolAbility(50F, 0, matChlorophyte, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.LuckAbility(4)) - .addHitAbility(new WeaponAbility.StunAbility(15)) - .addHitAbility(new WeaponAbility.VampireAbility(10F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("chlorophyte_axe").setTextureName(RefStrings.MODID + ":chlorophyte_axe"); - - ToolMaterial matMese = EnumHelper.addToolMaterial("HBM_MESE", 4, 0, 100F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); - mese_pickaxe = new ItemToolAbility(35F, 0, matMese, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.HammerAbility(3)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.CrystallizerAbility()) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(9)) - .addBreakAbility(new ToolAbility.ExplosionAbility(2.5F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(5F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(10F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(15F)) - .addHitAbility(new WeaponAbility.StunAbility(10)) - .addHitAbility(new WeaponAbility.PhosphorusAbility(60)) - .addHitAbility(new WeaponAbility.BeheaderAbility()) - .setDepthRockBreaker().setUnlocalizedName("mese_pickaxe").setTextureName(RefStrings.MODID + ":mese_pickaxe"); - mese_axe = new ItemToolAbility(75F, 0, matMese, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.HammerAbility(3)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(9)) - .addBreakAbility(new ToolAbility.ExplosionAbility(2.5F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(5F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(10F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(15F)) - .addHitAbility(new WeaponAbility.StunAbility(15)) - .addHitAbility(new WeaponAbility.PhosphorusAbility(90)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("mese_axe").setTextureName(RefStrings.MODID + ":mese_axe"); - - dnt_sword = new ItemSwordAbility(12F, 0, matMese).setUnlocalizedName("dnt_sword").setTextureName(RefStrings.MODID + ":dnt_sword"); - - ToolMaterial matDwarf = EnumHelper.addToolMaterial("HBM_DWARVEN", 2, 0, 4F, 0.0F, 10).setRepairItem(new ItemStack(ModItems.ingot_copper)); - dwarven_pickaxe = new ItemToolAbility(5F, -0.1, matDwarf, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.HammerAbility(1)).setUnlocalizedName("dwarven_pickaxe").setMaxDamage(250).setTextureName(RefStrings.MODID + ":dwarven_pickaxe"); - - ToolMaterial matMeteorite = EnumHelper.addToolMaterial("HBM_METEORITE", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); - meteorite_sword = new ItemSwordMeteorite(9F, 0, matMeteorite).setUnlocalizedName("meteorite_sword").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_seared = new ItemSwordMeteorite(10F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_seared").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_reforged = new ItemSwordMeteorite(12.5F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_reforged").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_hardened = new ItemSwordMeteorite(15F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_hardened").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_alloyed = new ItemSwordMeteorite(17.5F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_alloyed").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_machined = new ItemSwordMeteorite(20F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_machined").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_treated = new ItemSwordMeteorite(22.5F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_treated").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_etched = new ItemSwordMeteorite(25F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_etched").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_bred = new ItemSwordMeteorite(30F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_bred").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_irradiated = new ItemSwordMeteorite(35F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_irradiated").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_fused = new ItemSwordMeteorite(50F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_fused").setTextureName(RefStrings.MODID + ":meteorite_sword"); - meteorite_sword_baleful = new ItemSwordMeteorite(75F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_baleful").setTextureName(RefStrings.MODID + ":meteorite_sword"); - - mask_of_infamy = new MaskOfInfamy(ArmorMaterial.IRON, 0).setUnlocalizedName("mask_of_infamy").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_of_infamy"); - - hazmat_helmet = new ArmorHazmatMask(MainRegistry.aMatHaz, 0, RefStrings.MODID + ":textures/armor/hazmat_1.png").setUnlocalizedName("hazmat_helmet").setTextureName(RefStrings.MODID + ":hazmat_helmet"); - hazmat_plate = new ArmorHazmat(MainRegistry.aMatHaz, 1, RefStrings.MODID + ":textures/armor/hazmat_1.png").setUnlocalizedName("hazmat_plate").setTextureName(RefStrings.MODID + ":hazmat_plate"); - hazmat_legs = new ArmorHazmat(MainRegistry.aMatHaz, 2, RefStrings.MODID + ":textures/armor/hazmat_2.png").setUnlocalizedName("hazmat_legs").setTextureName(RefStrings.MODID + ":hazmat_legs"); - hazmat_boots = new ArmorHazmat(MainRegistry.aMatHaz, 3, RefStrings.MODID + ":textures/armor/hazmat_1.png").setUnlocalizedName("hazmat_boots").setTextureName(RefStrings.MODID + ":hazmat_boots"); - hazmat_helmet_red = new ArmorHazmatMask(MainRegistry.aMatHaz2, 0, "hbm:textures/models/ModelHazRed.png").setUnlocalizedName("hazmat_helmet_red").setTextureName(RefStrings.MODID + ":hazmat_helmet_red"); - hazmat_plate_red = new ArmorHazmat(MainRegistry.aMatHaz2, 1, RefStrings.MODID + ":textures/armor/hazmat_1_red.png").setUnlocalizedName("hazmat_plate_red").setTextureName(RefStrings.MODID + ":hazmat_plate_red"); - hazmat_legs_red = new ArmorHazmat(MainRegistry.aMatHaz2, 2, RefStrings.MODID + ":textures/armor/hazmat_2_red.png").setUnlocalizedName("hazmat_legs_red").setTextureName(RefStrings.MODID + ":hazmat_legs_red"); - hazmat_boots_red = new ArmorHazmat(MainRegistry.aMatHaz2, 3, RefStrings.MODID + ":textures/armor/hazmat_1_red.png").setUnlocalizedName("hazmat_boots_red").setTextureName(RefStrings.MODID + ":hazmat_boots_red"); - hazmat_helmet_grey = new ArmorHazmatMask(MainRegistry.aMatHaz3, 0, "hbm:textures/models/ModelHazGrey.png") - .setUnlocalizedName("hazmat_helmet_grey").setTextureName(RefStrings.MODID + ":hazmat_helmet_grey"); - hazmat_plate_grey = new ArmorHazmat(MainRegistry.aMatHaz3, 1, RefStrings.MODID + ":textures/armor/hazmat_1_grey.png").cloneStats((ArmorFSB) hazmat_helmet_grey).setUnlocalizedName("hazmat_plate_grey").setTextureName(RefStrings.MODID + ":hazmat_plate_grey"); - hazmat_legs_grey = new ArmorHazmat(MainRegistry.aMatHaz3, 2, RefStrings.MODID + ":textures/armor/hazmat_2_grey.png").cloneStats((ArmorFSB) hazmat_helmet_grey).setUnlocalizedName("hazmat_legs_grey").setTextureName(RefStrings.MODID + ":hazmat_legs_grey"); - hazmat_boots_grey = new ArmorHazmat(MainRegistry.aMatHaz3, 3, RefStrings.MODID + ":textures/armor/hazmat_1_grey.png").cloneStats((ArmorFSB) hazmat_helmet_grey).setUnlocalizedName("hazmat_boots_grey").setTextureName(RefStrings.MODID + ":hazmat_boots_grey"); - hazmat_paa_helmet = new ArmorHazmatMask(MainRegistry.aMatPaa, 0, RefStrings.MODID + ":textures/armor/hazmat_paa_1.png") - .setUnlocalizedName("hazmat_paa_helmet").setTextureName(RefStrings.MODID + ":hazmat_paa_helmet"); - hazmat_paa_plate = new ArmorHazmat(MainRegistry.aMatPaa, 1, RefStrings.MODID + ":textures/armor/hazmat_paa_1.png").cloneStats((ArmorFSB) hazmat_paa_helmet).setUnlocalizedName("hazmat_paa_plate").setTextureName(RefStrings.MODID + ":hazmat_paa_plate"); - hazmat_paa_legs = new ArmorHazmat(MainRegistry.aMatPaa, 2, RefStrings.MODID + ":textures/armor/hazmat_paa_2.png").cloneStats((ArmorFSB) hazmat_paa_helmet).setUnlocalizedName("hazmat_paa_legs").setTextureName(RefStrings.MODID + ":hazmat_paa_legs"); - hazmat_paa_boots = new ArmorHazmat(MainRegistry.aMatPaa, 3, RefStrings.MODID + ":textures/armor/hazmat_paa_1.png").cloneStats((ArmorFSB) hazmat_paa_helmet).setUnlocalizedName("hazmat_paa_boots").setTextureName(RefStrings.MODID + ":hazmat_paa_boots"); - - ArmorMaterial aMatLiquidator = EnumHelper.addArmorMaterial("HBM_LIQUIDATOR", 750, new int[] { 3, 8, 6, 3 }, 10); - aMatLiquidator.customCraftingMaterial = ModItems.plate_lead; - liquidator_helmet = new ArmorLiquidatorMask(aMatLiquidator, 0, RefStrings.MODID + ":textures/armor/liquidator_helmet.png") - .setStep("hbm:step.metal") - .setJump("hbm:step.iron_jump") - .setFall("hbm:step.iron_land").setUnlocalizedName("liquidator_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":liquidator_helmet"); - liquidator_plate = new ArmorLiquidator(aMatLiquidator, 1, RefStrings.MODID + ":textures/armor/liquidator_1.png").cloneStats((ArmorFSB) liquidator_helmet).setUnlocalizedName("liquidator_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":liquidator_plate"); - liquidator_legs = new ArmorLiquidator(aMatLiquidator, 2, RefStrings.MODID + ":textures/armor/liquidator_2.png").cloneStats((ArmorFSB) liquidator_helmet).setUnlocalizedName("liquidator_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":liquidator_legs"); - liquidator_boots = new ArmorLiquidator(aMatLiquidator, 3, RefStrings.MODID + ":textures/armor/liquidator_1.png").cloneStats((ArmorFSB) liquidator_helmet).setUnlocalizedName("liquidator_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":liquidator_boots"); - - jetpack_boost = new JetpackBooster(Fluids.BALEFIRE, 32000).setUnlocalizedName("jetpack_boost").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_boost"); - jetpack_break = new JetpackBreak(Fluids.KEROSENE, 12000).setUnlocalizedName("jetpack_break").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_break"); - jetpack_fly = new JetpackRegular(Fluids.KEROSENE, 12000).setUnlocalizedName("jetpack_fly").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_fly"); - jetpack_vector = new JetpackVectorized(Fluids.KEROSENE, 16000).setUnlocalizedName("jetpack_vector").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_vector"); - wings_murk = new WingsMurk().setUnlocalizedName("wings_murk").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":wings_murk"); - wings_limp = new WingsMurk().setUnlocalizedName("wings_limp").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":wings_limp"); - - cape_radiation = new ArmorModel(ArmorMaterial.CHAIN, 1).setUnlocalizedName("cape_radiation").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_radiation"); - cape_gasmask = new ArmorModel(ArmorMaterial.CHAIN, 1).setUnlocalizedName("cape_gasmask").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_gasmask"); - cape_schrabidium = new ArmorModel(MainRegistry.aMatSchrab, 1).setUnlocalizedName("cape_schrabidium").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_schrabidium"); - cape_hidden = new ArmorModel(ArmorMaterial.CHAIN, 1).setUnlocalizedName("cape_hidden").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_unknown"); - - schrabidium_hammer = new WeaponSpecial(MainRegistry.tMatHammmer).setUnlocalizedName("schrabidium_hammer").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":schrabidium_hammer"); - shimmer_sledge = new WeaponSpecial(MainRegistry.enumToolMaterialSledge).setUnlocalizedName("shimmer_sledge").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":shimmer_sledge_original"); - shimmer_axe = new WeaponSpecial(MainRegistry.enumToolMaterialSledge).setUnlocalizedName("shimmer_axe").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":shimmer_axe"); - bottle_opener = new WeaponSpecial(MainRegistry.enumToolMaterialBottleOpener).setUnlocalizedName("bottle_opener").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":bottle_opener"); - pch = new WeaponSpecial(MainRegistry.tMatHammmer).setUnlocalizedName("pch").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":schrabidium_hammer"); - matchstick = new ItemMatch().setUnlocalizedName("matchstick").setCreativeTab(CreativeTabs.tabTools).setFull3D().setTextureName(RefStrings.MODID + ":matchstick"); - balefire_and_steel = new ItemBalefireMatch().setUnlocalizedName("balefire_and_steel").setCreativeTab(CreativeTabs.tabTools).setFull3D().setTextureName(RefStrings.MODID + ":balefire_and_steel"); - crowbar = new ModSword(MainRegistry.tMatSteel).setUnlocalizedName("crowbar").setFull3D().setTextureName(RefStrings.MODID + ":crowbar"); - 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"); - wood_gavel = new WeaponSpecial(ToolMaterial.WOOD).setUnlocalizedName("wood_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":wood_gavel"); - lead_gavel = new WeaponSpecial(MainRegistry.tMatSteel).setUnlocalizedName("lead_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":lead_gavel"); - diamond_gavel = new WeaponSpecial(ToolMaterial.EMERALD).setUnlocalizedName("diamond_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":diamond_gavel"); - ToolMaterial matMeseGavel = EnumHelper.addToolMaterial("HBM_MESEGAVEL", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); - mese_gavel = new ItemSwordAbility(250, 1.5, matMeseGavel) - .addHitAbility(new WeaponAbility.PhosphorusAbility(60)) - .addHitAbility(new WeaponAbility.RadiationAbility(500)) - .addHitAbility(new WeaponAbility.StunAbility(10)) - .addHitAbility(new WeaponAbility.VampireAbility(50)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("mese_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mese_gavel"); - - 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"); - multitool_silk = new ItemMultitoolTool(4.0F, MainRegistry.enumToolMaterialMultitool, ItemMultitoolTool.getAllBlocks()).setFull3D().setUnlocalizedName("multitool_silk").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_claw"); - multitool_ext = new ItemMultitoolPassive().setUnlocalizedName("multitool_ext").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_open"); - multitool_miner = new ItemMultitoolPassive().setUnlocalizedName("multitool_miner").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_pointer"); - multitool_beam = new ItemMultitoolPassive().setUnlocalizedName("multitool_beam").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_pointer"); - multitool_sky= new ItemMultitoolPassive().setUnlocalizedName("multitool_sky").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_open"); - multitool_mega = new ItemMultitoolPassive().setUnlocalizedName("multitool_mega").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist"); - multitool_joule = new ItemMultitoolPassive().setUnlocalizedName("multitool_joule").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist"); - multitool_decon = new ItemMultitoolPassive().setUnlocalizedName("multitool_decon").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist"); - - saw = new ModSword(MainRegistry.enumToolMaterialSaw).setUnlocalizedName("weapon_saw").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":saw"); - bat = new ModSword(MainRegistry.enumToolMaterialBat).setUnlocalizedName("weapon_bat").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":bat"); - bat_nail = new ModSword(MainRegistry.enumToolMaterialBatNail).setUnlocalizedName("weapon_bat_nail").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":bat_nail"); - golf_club = new ModSword(MainRegistry.enumToolMaterialGolfClub).setUnlocalizedName("weapon_golf_club").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":golf_club"); - pipe_rusty = new ModSword(MainRegistry.enumToolMaterialPipeRusty).setUnlocalizedName("weapon_pipe_rusty").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":pipe_rusty"); - pipe_lead = new ModSword(MainRegistry.enumToolMaterialPipeLead).setUnlocalizedName("weapon_pipe_lead").setFull3D().setTextureName(RefStrings.MODID + ":pipe_lead"); - reer_graar = new ModSword(MainRegistry.tMatTitan).setUnlocalizedName("reer_graar").setFull3D().setTextureName(RefStrings.MODID + ":reer_graar_hd"); - stopsign = new WeaponSpecial(MainRegistry.tMatAlloy).setUnlocalizedName("stopsign").setTextureName(RefStrings.MODID + ":stopsign"); - sopsign = new WeaponSpecial(MainRegistry.tMatAlloy).setUnlocalizedName("sopsign").setTextureName(RefStrings.MODID + ":sopsign"); - chernobylsign = new WeaponSpecial(MainRegistry.tMatAlloy).setUnlocalizedName("chernobylsign").setTextureName(RefStrings.MODID + ":chernobylsign"); - - crystal_horn = new ItemCustomLore().setUnlocalizedName("crystal_horn").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_horn"); - crystal_charred = new ItemCustomLore().setUnlocalizedName("crystal_charred").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_charred"); - - bucket_mud = new ItemModBucket(ModBlocks.mud_block).setUnlocalizedName("bucket_mud").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_mud"); - bucket_acid = new ItemModBucket(ModBlocks.acid_block).setUnlocalizedName("bucket_acid").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_acid"); - bucket_toxic = new ItemModBucket(ModBlocks.toxic_block).setUnlocalizedName("bucket_toxic").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_toxic"); - bucket_schrabidic_acid = new ItemModBucket(ModBlocks.schrabidic_block).setUnlocalizedName("bucket_schrabidic_acid").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_schrabidic_acid"); - bucket_sulfuric_acid = new ItemModBucket(ModBlocks.sulfuric_acid_block).setUnlocalizedName("bucket_sulfuric_acid").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_sulfuric_acid"); - - door_metal = new ItemModDoor().setUnlocalizedName("door_metal").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_metal"); - door_office = new ItemModDoor().setUnlocalizedName("door_office").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_office"); - door_bunker = new ItemModDoor().setUnlocalizedName("door_bunker").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_bunker"); - door_red = new ItemModDoor().setUnlocalizedName("door_red").setCreativeTab(null).setTextureName(RefStrings.MODID + ":door_red"); - - sliding_blast_door_skin = new ItemSlidingBlastDoorSkin().setUnlocalizedName("sliding_blast_door_skin").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":sliding_blast_door_default"); - - record_lc = new ItemModRecord("lc").setUnlocalizedName("record_lc").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_lc"); - record_ss = new ItemModRecord("ss").setUnlocalizedName("record_ss").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_ss"); - record_vc = new ItemModRecord("vc").setUnlocalizedName("record_vc").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_vc"); - record_glass = new ItemModRecord("glass").setUnlocalizedName("record_glass").setCreativeTab(null).setTextureName(RefStrings.MODID + ":record_glass"); - - book_guide = new ItemGuideBook().setUnlocalizedName("book_guide").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":book_guide"); - book_lore = new ItemBookLore().setUnlocalizedName("book_lore").setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_pages"); - holotape_image = new ItemHolotapeImage().setUnlocalizedName("holotape_image").setCreativeTab(null).setTextureName(RefStrings.MODID + ":holotape"); - holotape_damaged = new Item().setUnlocalizedName("holotape_damaged").setCreativeTab(null).setTextureName(RefStrings.MODID + ":holotape_damaged"); - clay_tablet = new ItemClayTablet().setUnlocalizedName("clay_tablet").setCreativeTab(null).setTextureName(RefStrings.MODID + ":clay_tablet"); - - polaroid = new ItemPolaroid().setUnlocalizedName("polaroid").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":polaroid_" + MainRegistry.polaroidID); - glitch = new ItemGlitch().setUnlocalizedName("glitch").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glitch_" + MainRegistry.polaroidID); - letter = new ItemStarterKit().setUnlocalizedName("letter").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":letter"); - book_secret = new ItemCustomLore().setUnlocalizedName("book_secret").setCreativeTab(MainRegistry.polaroidID == 11 ? MainRegistry.consumableTab : null).setTextureName(RefStrings.MODID + ":book_secret"); - book_of_ = new ItemBook().setUnlocalizedName("book_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_of_"); - page_of_ = new ItemEnumMulti(ItemEnums.EnumPages.class, true, false).setUnlocalizedName("page_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":page_of_"); - book_lemegeton = new ItemBookLemegeton().setUnlocalizedName("book_lemegeton").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_lemegeton"); - burnt_bark = new ItemCustomLore().setUnlocalizedName("burnt_bark").setCreativeTab(null).setTextureName(RefStrings.MODID + ":burnt_bark"); - - chlorine1 = new Item().setUnlocalizedName("chlorine1").setTextureName(RefStrings.MODID + ":chlorine1"); - chlorine2 = new Item().setUnlocalizedName("chlorine2").setTextureName(RefStrings.MODID + ":chlorine2"); - chlorine3 = new Item().setUnlocalizedName("chlorine3").setTextureName(RefStrings.MODID + ":chlorine3"); - chlorine4 = new Item().setUnlocalizedName("chlorine4").setTextureName(RefStrings.MODID + ":chlorine4"); - chlorine5 = new Item().setUnlocalizedName("chlorine5").setTextureName(RefStrings.MODID + ":chlorine5"); - chlorine6 = new Item().setUnlocalizedName("chlorine6").setTextureName(RefStrings.MODID + ":chlorine6"); - chlorine7 = new Item().setUnlocalizedName("chlorine7").setTextureName(RefStrings.MODID + ":chlorine7"); - chlorine8 = new Item().setUnlocalizedName("chlorine8").setTextureName(RefStrings.MODID + ":chlorine8"); - pc1 = new Item().setUnlocalizedName("pc1").setTextureName(RefStrings.MODID + ":pc1"); - pc2 = new Item().setUnlocalizedName("pc2").setTextureName(RefStrings.MODID + ":pc2"); - pc3 = new Item().setUnlocalizedName("pc3").setTextureName(RefStrings.MODID + ":pc3"); - pc4 = new Item().setUnlocalizedName("pc4").setTextureName(RefStrings.MODID + ":pc4"); - pc5 = new Item().setUnlocalizedName("pc5").setTextureName(RefStrings.MODID + ":pc5"); - pc6 = new Item().setUnlocalizedName("pc6").setTextureName(RefStrings.MODID + ":pc6"); - pc7 = new Item().setUnlocalizedName("pc7").setTextureName(RefStrings.MODID + ":pc7"); - pc8 = new Item().setUnlocalizedName("pc8").setTextureName(RefStrings.MODID + ":pc8"); - cloud1 = new Item().setUnlocalizedName("cloud1").setTextureName(RefStrings.MODID + ":cloud1"); - cloud2 = new Item().setUnlocalizedName("cloud2").setTextureName(RefStrings.MODID + ":cloud2"); - cloud3 = new Item().setUnlocalizedName("cloud3").setTextureName(RefStrings.MODID + ":cloud3"); - cloud4 = new Item().setUnlocalizedName("cloud4").setTextureName(RefStrings.MODID + ":cloud4"); - cloud5 = new Item().setUnlocalizedName("cloud5").setTextureName(RefStrings.MODID + ":cloud5"); - cloud6 = new Item().setUnlocalizedName("cloud6").setTextureName(RefStrings.MODID + ":cloud6"); - cloud7 = new Item().setUnlocalizedName("cloud7").setTextureName(RefStrings.MODID + ":cloud7"); - cloud8 = new Item().setUnlocalizedName("cloud8").setTextureName(RefStrings.MODID + ":cloud8"); - orange1 = new Item().setUnlocalizedName("orange1").setTextureName(RefStrings.MODID + ":orange1"); - orange2 = new Item().setUnlocalizedName("orange2").setTextureName(RefStrings.MODID + ":orange2"); - orange3 = new Item().setUnlocalizedName("orange3").setTextureName(RefStrings.MODID + ":orange3"); - orange4 = new Item().setUnlocalizedName("orange4").setTextureName(RefStrings.MODID + ":orange4"); - orange5 = new Item().setUnlocalizedName("orange5").setTextureName(RefStrings.MODID + ":orange5"); - orange6 = new Item().setUnlocalizedName("orange6").setTextureName(RefStrings.MODID + ":orange6"); - orange7 = new Item().setUnlocalizedName("orange7").setTextureName(RefStrings.MODID + ":orange7"); - orange8 = new Item().setUnlocalizedName("orange8").setTextureName(RefStrings.MODID + ":orange8"); - nothing = new Item().setUnlocalizedName("nothing").setTextureName(RefStrings.MODID + ":nothing"); - - - achievement_icon = new ItemEnumMulti(ItemEnums.EnumAchievementType.class, true, true).setUnlocalizedName("achievement_icon"); - bob_metalworks = new Item().setUnlocalizedName("bob_metalworks").setTextureName(RefStrings.MODID + ":bob_metalworks"); - bob_assembly = new Item().setUnlocalizedName("bob_assembly").setTextureName(RefStrings.MODID + ":bob_assembly"); - bob_chemistry = new Item().setUnlocalizedName("bob_chemistry").setTextureName(RefStrings.MODID + ":bob_chemistry"); - bob_oil = new Item().setUnlocalizedName("bob_oil").setTextureName(RefStrings.MODID + ":bob_oil"); - bob_nuclear = new Item().setUnlocalizedName("bob_nuclear").setTextureName(RefStrings.MODID + ":bob_nuclear"); - - mysteryshovel = new ItemMS().setUnlocalizedName("mysteryshovel").setFull3D().setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cursed_shovel"); - memory = new ItemBattery(Long.MAX_VALUE / 100L, 100000000000000L, 100000000000000L).setUnlocalizedName("memory").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mo8_anim"); - - conveyor_wand = new ItemConveyorWand().setUnlocalizedName("conveyor_wand").setCreativeTab(MainRegistry.machineTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_s"); - - GunFactory.init(); - - FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.mud_fluid, 1000), new ItemStack(ModItems.bucket_mud), new ItemStack(Items.bucket)); - FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.acid_fluid, 1000), new ItemStack(ModItems.bucket_acid), new ItemStack(Items.bucket)); - FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.toxic_fluid, 1000), new ItemStack(ModItems.bucket_toxic), new ItemStack(Items.bucket)); - FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.schrabidic_fluid, 1000), new ItemStack(ModItems.bucket_schrabidic_acid), new ItemStack(Items.bucket)); - FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.sulfuric_acid_fluid, 1000), new ItemStack(ModItems.bucket_sulfuric_acid), new ItemStack(Items.bucket)); - BucketHandler.INSTANCE.buckets.put(ModBlocks.mud_block, ModItems.bucket_mud); - BucketHandler.INSTANCE.buckets.put(ModBlocks.acid_block, ModItems.bucket_acid); - BucketHandler.INSTANCE.buckets.put(ModBlocks.toxic_block, ModItems.bucket_toxic); - BucketHandler.INSTANCE.buckets.put(ModBlocks.schrabidic_block, ModItems.bucket_schrabidic_acid); - BucketHandler.INSTANCE.buckets.put(ModBlocks.sulfuric_acid_block, ModItems.bucket_sulfuric_acid); - MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE); - } - - private static void registerItem() { - //Weapons - GameRegistry.registerItem(redstone_sword, redstone_sword.getUnlocalizedName()); - GameRegistry.registerItem(big_sword, big_sword.getUnlocalizedName()); - - //Test Nuke - GameRegistry.registerItem(test_nuke_igniter, test_nuke_igniter.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_propellant, test_nuke_propellant.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier1_shielding, test_nuke_tier1_shielding.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier2_shielding, test_nuke_tier2_shielding.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier1_bullet, test_nuke_tier1_bullet.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier2_bullet, test_nuke_tier2_bullet.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier1_target, test_nuke_tier1_target.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier2_target, test_nuke_tier2_target.getUnlocalizedName()); - - //Ingots - GameRegistry.registerItem(ingot_uranium, ingot_uranium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_u233, ingot_u233.getUnlocalizedName()); - GameRegistry.registerItem(ingot_u235, ingot_u235.getUnlocalizedName()); - GameRegistry.registerItem(ingot_u238, ingot_u238.getUnlocalizedName()); - GameRegistry.registerItem(ingot_u238m2, ingot_u238m2.getUnlocalizedName()); - GameRegistry.registerItem(ingot_th232, ingot_th232.getUnlocalizedName()); - GameRegistry.registerItem(ingot_plutonium, ingot_plutonium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_pu238, ingot_pu238.getUnlocalizedName()); - GameRegistry.registerItem(ingot_pu239, ingot_pu239.getUnlocalizedName()); - GameRegistry.registerItem(ingot_pu240, ingot_pu240.getUnlocalizedName()); - GameRegistry.registerItem(ingot_pu241, ingot_pu241.getUnlocalizedName()); - GameRegistry.registerItem(ingot_pu_mix, ingot_pu_mix.getUnlocalizedName()); - GameRegistry.registerItem(ingot_am241, ingot_am241.getUnlocalizedName()); - GameRegistry.registerItem(ingot_am242, ingot_am242.getUnlocalizedName()); - GameRegistry.registerItem(ingot_am_mix, ingot_am_mix.getUnlocalizedName()); - GameRegistry.registerItem(ingot_neptunium, ingot_neptunium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_polonium, ingot_polonium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_technetium, ingot_technetium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_co60, ingot_co60.getUnlocalizedName()); - GameRegistry.registerItem(ingot_sr90, ingot_sr90.getUnlocalizedName()); - GameRegistry.registerItem(ingot_au198, ingot_au198.getUnlocalizedName()); - GameRegistry.registerItem(ingot_pb209, ingot_pb209.getUnlocalizedName()); - GameRegistry.registerItem(ingot_ra226, ingot_ra226.getUnlocalizedName()); - GameRegistry.registerItem(ingot_titanium, ingot_titanium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_copper, ingot_copper.getUnlocalizedName()); - GameRegistry.registerItem(ingot_red_copper, ingot_red_copper.getUnlocalizedName()); - GameRegistry.registerItem(ingot_advanced_alloy, ingot_advanced_alloy.getUnlocalizedName()); - GameRegistry.registerItem(ingot_tungsten, ingot_tungsten.getUnlocalizedName()); - GameRegistry.registerItem(ingot_aluminium, ingot_aluminium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_steel, ingot_steel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_tcalloy, ingot_tcalloy.getUnlocalizedName()); - GameRegistry.registerItem(ingot_cdalloy, ingot_cdalloy.getUnlocalizedName()); - GameRegistry.registerItem(ingot_bismuth_bronze, ingot_bismuth_bronze.getUnlocalizedName()); - GameRegistry.registerItem(ingot_arsenic_bronze, ingot_arsenic_bronze.getUnlocalizedName()); - GameRegistry.registerItem(ingot_bscco, ingot_bscco.getUnlocalizedName()); - GameRegistry.registerItem(ingot_lead, ingot_lead.getUnlocalizedName()); - GameRegistry.registerItem(ingot_bismuth, ingot_bismuth.getUnlocalizedName()); - GameRegistry.registerItem(ingot_arsenic, ingot_arsenic.getUnlocalizedName()); - GameRegistry.registerItem(ingot_calcium, ingot_calcium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_cadmium, ingot_cadmium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_tantalium, ingot_tantalium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_silicon, ingot_silicon.getUnlocalizedName()); - GameRegistry.registerItem(ingot_niobium, ingot_niobium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_beryllium, ingot_beryllium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_cobalt, ingot_cobalt.getUnlocalizedName()); - GameRegistry.registerItem(ingot_boron, ingot_boron.getUnlocalizedName()); - GameRegistry.registerItem(ingot_graphite, ingot_graphite.getUnlocalizedName()); - GameRegistry.registerItem(ingot_firebrick, ingot_firebrick.getUnlocalizedName()); - GameRegistry.registerItem(ingot_dura_steel, ingot_dura_steel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_polymer, ingot_polymer.getUnlocalizedName()); - GameRegistry.registerItem(ingot_bakelite, ingot_bakelite.getUnlocalizedName()); - GameRegistry.registerItem(ingot_biorubber, ingot_biorubber.getUnlocalizedName()); - GameRegistry.registerItem(ingot_rubber, ingot_rubber.getUnlocalizedName()); - GameRegistry.registerItem(ingot_pc, ingot_pc.getUnlocalizedName()); - GameRegistry.registerItem(ingot_pvc, ingot_pvc.getUnlocalizedName()); - GameRegistry.registerItem(ingot_mud, ingot_mud.getUnlocalizedName()); - GameRegistry.registerItem(ingot_cft, ingot_cft.getUnlocalizedName()); - GameRegistry.registerItem(ingot_schraranium, ingot_schraranium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_schrabidium, ingot_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_schrabidate, ingot_schrabidate.getUnlocalizedName()); - GameRegistry.registerItem(ingot_magnetized_tungsten, ingot_magnetized_tungsten.getUnlocalizedName()); - GameRegistry.registerItem(ingot_combine_steel, ingot_combine_steel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_solinium, ingot_solinium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_gh336, ingot_gh336.getUnlocalizedName()); - GameRegistry.registerItem(ingot_uranium_fuel, ingot_uranium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_thorium_fuel, ingot_thorium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_plutonium_fuel, ingot_plutonium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_neptunium_fuel, ingot_neptunium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_mox_fuel, ingot_mox_fuel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_americium_fuel, ingot_americium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_schrabidium_fuel, ingot_schrabidium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_hes, ingot_hes.getUnlocalizedName()); - GameRegistry.registerItem(ingot_les, ingot_les.getUnlocalizedName()); - GameRegistry.registerItem(ingot_australium, ingot_australium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_lanthanium, ingot_lanthanium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_actinium, ingot_actinium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_desh, ingot_desh.getUnlocalizedName()); - GameRegistry.registerItem(ingot_ferrouranium, ingot_ferrouranium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_starmetal, ingot_starmetal.getUnlocalizedName()); - GameRegistry.registerItem(ingot_gunmetal, ingot_gunmetal.getUnlocalizedName()); - GameRegistry.registerItem(ingot_weaponsteel, ingot_weaponsteel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_saturnite, ingot_saturnite.getUnlocalizedName()); - GameRegistry.registerItem(ingot_euphemium, ingot_euphemium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_dineutronium, ingot_dineutronium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_electronium, ingot_electronium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_smore, ingot_smore.getUnlocalizedName()); - GameRegistry.registerItem(ingot_osmiridium, ingot_osmiridium.getUnlocalizedName()); - - //Meteorite Ingots - GameRegistry.registerItem(ingot_steel_dusted, ingot_steel_dusted.getUnlocalizedName()); - GameRegistry.registerItem(ingot_chainsteel, ingot_chainsteel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_meteorite, ingot_meteorite.getUnlocalizedName()); - GameRegistry.registerItem(ingot_meteorite_forged, ingot_meteorite_forged.getUnlocalizedName()); - GameRegistry.registerItem(blade_meteorite, blade_meteorite.getUnlocalizedName()); - - //Misc Ingots - GameRegistry.registerItem(ingot_phosphorus, ingot_phosphorus.getUnlocalizedName()); - GameRegistry.registerItem(lithium, lithium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_zirconium, ingot_zirconium.getUnlocalizedName()); - GameRegistry.registerItem(ingot_semtex, ingot_semtex.getUnlocalizedName()); - GameRegistry.registerItem(ingot_c4, ingot_c4.getUnlocalizedName()); - GameRegistry.registerItem(oil_tar, oil_tar.getUnlocalizedName()); - GameRegistry.registerItem(solid_fuel, solid_fuel.getUnlocalizedName()); - GameRegistry.registerItem(solid_fuel_presto, solid_fuel_presto.getUnlocalizedName()); - GameRegistry.registerItem(solid_fuel_presto_triplet, solid_fuel_presto_triplet.getUnlocalizedName()); - GameRegistry.registerItem(solid_fuel_bf, solid_fuel_bf.getUnlocalizedName()); - GameRegistry.registerItem(solid_fuel_presto_bf, solid_fuel_presto_bf.getUnlocalizedName()); - GameRegistry.registerItem(solid_fuel_presto_triplet_bf, solid_fuel_presto_triplet_bf.getUnlocalizedName()); - GameRegistry.registerItem(rocket_fuel, rocket_fuel.getUnlocalizedName()); - GameRegistry.registerItem(ingot_fiberglass, ingot_fiberglass.getUnlocalizedName()); - GameRegistry.registerItem(ingot_asbestos, ingot_asbestos.getUnlocalizedName()); - GameRegistry.registerItem(ingot_raw, ingot_raw.getUnlocalizedName()); - - //Billets - GameRegistry.registerItem(billet_uranium, billet_uranium.getUnlocalizedName()); - GameRegistry.registerItem(billet_u233, billet_u233.getUnlocalizedName()); - GameRegistry.registerItem(billet_u235, billet_u235.getUnlocalizedName()); - GameRegistry.registerItem(billet_u238, billet_u238.getUnlocalizedName()); - GameRegistry.registerItem(billet_th232, billet_th232.getUnlocalizedName()); - GameRegistry.registerItem(billet_plutonium, billet_plutonium.getUnlocalizedName()); - GameRegistry.registerItem(billet_pu238, billet_pu238.getUnlocalizedName()); - GameRegistry.registerItem(billet_pu239, billet_pu239.getUnlocalizedName()); - GameRegistry.registerItem(billet_pu240, billet_pu240.getUnlocalizedName()); - GameRegistry.registerItem(billet_pu241, billet_pu241.getUnlocalizedName()); - GameRegistry.registerItem(billet_pu_mix, billet_pu_mix.getUnlocalizedName()); - GameRegistry.registerItem(billet_am241, billet_am241.getUnlocalizedName()); - GameRegistry.registerItem(billet_am242, billet_am242.getUnlocalizedName()); - GameRegistry.registerItem(billet_am_mix, billet_am_mix.getUnlocalizedName()); - GameRegistry.registerItem(billet_neptunium, billet_neptunium.getUnlocalizedName()); - GameRegistry.registerItem(billet_polonium, billet_polonium.getUnlocalizedName()); - GameRegistry.registerItem(billet_technetium, billet_technetium.getUnlocalizedName()); - GameRegistry.registerItem(billet_cobalt, billet_cobalt.getUnlocalizedName()); - GameRegistry.registerItem(billet_co60, billet_co60.getUnlocalizedName()); - GameRegistry.registerItem(billet_sr90, billet_sr90.getUnlocalizedName()); - GameRegistry.registerItem(billet_au198, billet_au198.getUnlocalizedName()); - GameRegistry.registerItem(billet_pb209, billet_pb209.getUnlocalizedName()); - GameRegistry.registerItem(billet_ra226, billet_ra226.getUnlocalizedName()); - GameRegistry.registerItem(billet_actinium, billet_actinium.getUnlocalizedName()); - GameRegistry.registerItem(billet_schrabidium, billet_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(billet_solinium, billet_solinium.getUnlocalizedName()); - GameRegistry.registerItem(billet_gh336, billet_gh336.getUnlocalizedName()); - GameRegistry.registerItem(billet_australium, billet_australium.getUnlocalizedName()); - GameRegistry.registerItem(billet_australium_lesser, billet_australium_lesser.getUnlocalizedName()); - GameRegistry.registerItem(billet_australium_greater, billet_australium_greater.getUnlocalizedName()); - GameRegistry.registerItem(billet_uranium_fuel, billet_uranium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(billet_thorium_fuel, billet_thorium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(billet_plutonium_fuel, billet_plutonium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(billet_neptunium_fuel, billet_neptunium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(billet_mox_fuel, billet_mox_fuel.getUnlocalizedName()); - GameRegistry.registerItem(billet_americium_fuel, billet_americium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(billet_les, billet_les.getUnlocalizedName()); - GameRegistry.registerItem(billet_schrabidium_fuel, billet_schrabidium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(billet_hes, billet_hes.getUnlocalizedName()); - GameRegistry.registerItem(billet_po210be, billet_po210be.getUnlocalizedName()); - GameRegistry.registerItem(billet_ra226be, billet_ra226be.getUnlocalizedName()); - GameRegistry.registerItem(billet_pu238be, billet_pu238be.getUnlocalizedName()); - GameRegistry.registerItem(billet_beryllium, billet_beryllium.getUnlocalizedName()); - GameRegistry.registerItem(billet_bismuth, billet_bismuth.getUnlocalizedName()); - GameRegistry.registerItem(billet_silicon, billet_silicon.getUnlocalizedName()); - GameRegistry.registerItem(billet_zirconium, billet_zirconium.getUnlocalizedName()); - GameRegistry.registerItem(billet_zfb_bismuth, billet_zfb_bismuth.getUnlocalizedName()); - GameRegistry.registerItem(billet_zfb_pu241, billet_zfb_pu241.getUnlocalizedName()); - GameRegistry.registerItem(billet_zfb_am_mix, billet_zfb_am_mix.getUnlocalizedName()); - GameRegistry.registerItem(billet_yharonite, billet_yharonite.getUnlocalizedName()); - GameRegistry.registerItem(billet_balefire_gold, billet_balefire_gold.getUnlocalizedName()); - GameRegistry.registerItem(billet_flashlead, billet_flashlead.getUnlocalizedName()); - GameRegistry.registerItem(billet_nuclear_waste, billet_nuclear_waste.getUnlocalizedName()); - - //Dusts & Other - GameRegistry.registerItem(cinnebar, cinnebar.getUnlocalizedName()); - GameRegistry.registerItem(nugget_mercury, nugget_mercury.getUnlocalizedName()); - GameRegistry.registerItem(ingot_mercury, ingot_mercury.getUnlocalizedName()); - GameRegistry.registerItem(bottle_mercury, bottle_mercury.getUnlocalizedName()); - GameRegistry.registerItem(coke, coke.getUnlocalizedName()); - GameRegistry.registerItem(lignite, lignite.getUnlocalizedName()); - GameRegistry.registerItem(coal_infernal, coal_infernal.getUnlocalizedName()); - GameRegistry.registerItem(briquette, briquette.getUnlocalizedName()); - GameRegistry.registerItem(sulfur, sulfur.getUnlocalizedName()); - GameRegistry.registerItem(niter, niter.getUnlocalizedName()); - GameRegistry.registerItem(nitra, nitra.getUnlocalizedName()); - GameRegistry.registerItem(nitra_small, nitra_small.getUnlocalizedName()); - GameRegistry.registerItem(fluorite, fluorite.getUnlocalizedName()); - GameRegistry.registerItem(powder_coal, powder_coal.getUnlocalizedName()); - GameRegistry.registerItem(powder_coal_tiny, powder_coal_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_iron, powder_iron.getUnlocalizedName()); - GameRegistry.registerItem(powder_gold, powder_gold.getUnlocalizedName()); - GameRegistry.registerItem(powder_lapis, powder_lapis.getUnlocalizedName()); - GameRegistry.registerItem(powder_quartz, powder_quartz.getUnlocalizedName()); - GameRegistry.registerItem(powder_diamond, powder_diamond.getUnlocalizedName()); - GameRegistry.registerItem(powder_emerald, powder_emerald.getUnlocalizedName()); - GameRegistry.registerItem(powder_uranium, powder_uranium.getUnlocalizedName()); - GameRegistry.registerItem(powder_plutonium, powder_plutonium.getUnlocalizedName()); - GameRegistry.registerItem(powder_neptunium, powder_neptunium.getUnlocalizedName()); - GameRegistry.registerItem(powder_polonium, powder_polonium.getUnlocalizedName()); - GameRegistry.registerItem(powder_co60, powder_co60.getUnlocalizedName()); - GameRegistry.registerItem(powder_sr90, powder_sr90.getUnlocalizedName()); - GameRegistry.registerItem(powder_sr90_tiny, powder_sr90_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_i131, powder_i131.getUnlocalizedName()); - GameRegistry.registerItem(powder_i131_tiny, powder_i131_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_xe135, powder_xe135.getUnlocalizedName()); - GameRegistry.registerItem(powder_xe135_tiny, powder_xe135_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_cs137, powder_cs137.getUnlocalizedName()); - GameRegistry.registerItem(powder_cs137_tiny, powder_cs137_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_au198, powder_au198.getUnlocalizedName()); - GameRegistry.registerItem(powder_ra226, powder_ra226.getUnlocalizedName()); - GameRegistry.registerItem(powder_at209, powder_at209.getUnlocalizedName()); - GameRegistry.registerItem(powder_titanium, powder_titanium.getUnlocalizedName()); - GameRegistry.registerItem(powder_copper, powder_copper.getUnlocalizedName()); - GameRegistry.registerItem(powder_red_copper, powder_red_copper.getUnlocalizedName()); - GameRegistry.registerItem(powder_advanced_alloy, powder_advanced_alloy.getUnlocalizedName()); - GameRegistry.registerItem(powder_tungsten, powder_tungsten.getUnlocalizedName()); - GameRegistry.registerItem(powder_aluminium, powder_aluminium.getUnlocalizedName()); - GameRegistry.registerItem(powder_steel, powder_steel.getUnlocalizedName()); - GameRegistry.registerItem(powder_steel_tiny, powder_steel_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_tcalloy, powder_tcalloy.getUnlocalizedName()); - GameRegistry.registerItem(powder_lead, powder_lead.getUnlocalizedName()); - GameRegistry.registerItem(powder_bismuth, powder_bismuth.getUnlocalizedName()); - GameRegistry.registerItem(powder_calcium, powder_calcium.getUnlocalizedName()); - GameRegistry.registerItem(powder_cadmium, powder_cadmium.getUnlocalizedName()); - GameRegistry.registerItem(powder_coltan_ore, powder_coltan_ore.getUnlocalizedName()); - GameRegistry.registerItem(powder_coltan, powder_coltan.getUnlocalizedName()); - GameRegistry.registerItem(powder_tantalium, powder_tantalium.getUnlocalizedName()); - GameRegistry.registerItem(powder_tektite, powder_tektite.getUnlocalizedName()); - GameRegistry.registerItem(powder_paleogenite, powder_paleogenite.getUnlocalizedName()); - GameRegistry.registerItem(powder_paleogenite_tiny, powder_paleogenite_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_impure_osmiridium, powder_impure_osmiridium.getUnlocalizedName()); - GameRegistry.registerItem(powder_borax, powder_borax.getUnlocalizedName()); - GameRegistry.registerItem(powder_chlorocalcite, powder_chlorocalcite.getUnlocalizedName()); - GameRegistry.registerItem(powder_molysite, powder_molysite.getUnlocalizedName()); - GameRegistry.registerItem(powder_yellowcake, powder_yellowcake.getUnlocalizedName()); - GameRegistry.registerItem(powder_beryllium, powder_beryllium.getUnlocalizedName()); - GameRegistry.registerItem(powder_dura_steel, powder_dura_steel.getUnlocalizedName()); - GameRegistry.registerItem(powder_polymer, powder_polymer.getUnlocalizedName()); - GameRegistry.registerItem(powder_bakelite, powder_bakelite.getUnlocalizedName()); - GameRegistry.registerItem(powder_schrabidium, powder_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(powder_schrabidate, powder_schrabidate.getUnlocalizedName()); - GameRegistry.registerItem(powder_magnetized_tungsten, powder_magnetized_tungsten.getUnlocalizedName()); - GameRegistry.registerItem(powder_chlorophyte, powder_chlorophyte.getUnlocalizedName()); - GameRegistry.registerItem(powder_combine_steel, powder_combine_steel.getUnlocalizedName()); - GameRegistry.registerItem(powder_lithium, powder_lithium.getUnlocalizedName()); - GameRegistry.registerItem(powder_lithium_tiny, powder_lithium_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_zirconium, powder_zirconium.getUnlocalizedName()); - GameRegistry.registerItem(powder_sodium, powder_sodium.getUnlocalizedName()); - GameRegistry.registerItem(powder_lignite, powder_lignite.getUnlocalizedName()); - GameRegistry.registerItem(powder_iodine, powder_iodine.getUnlocalizedName()); - GameRegistry.registerItem(powder_thorium, powder_thorium.getUnlocalizedName()); - GameRegistry.registerItem(powder_neodymium, powder_neodymium.getUnlocalizedName()); - GameRegistry.registerItem(powder_neodymium_tiny, powder_neodymium_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_astatine, powder_astatine.getUnlocalizedName()); - GameRegistry.registerItem(powder_caesium, powder_caesium.getUnlocalizedName()); - GameRegistry.registerItem(powder_australium, powder_australium.getUnlocalizedName()); - GameRegistry.registerItem(powder_strontium, powder_strontium.getUnlocalizedName()); - GameRegistry.registerItem(powder_cobalt, powder_cobalt.getUnlocalizedName()); - GameRegistry.registerItem(powder_cobalt_tiny, powder_cobalt_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_bromine, powder_bromine.getUnlocalizedName()); - GameRegistry.registerItem(powder_niobium, powder_niobium.getUnlocalizedName()); - GameRegistry.registerItem(powder_niobium_tiny, powder_niobium_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_tennessine, powder_tennessine.getUnlocalizedName()); - GameRegistry.registerItem(powder_cerium, powder_cerium.getUnlocalizedName()); - GameRegistry.registerItem(powder_cerium_tiny, powder_cerium_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_lanthanium, powder_lanthanium.getUnlocalizedName()); - GameRegistry.registerItem(powder_lanthanium_tiny, powder_lanthanium_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_actinium, powder_actinium.getUnlocalizedName()); - GameRegistry.registerItem(powder_actinium_tiny, powder_actinium_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_boron, powder_boron.getUnlocalizedName()); - GameRegistry.registerItem(powder_boron_tiny, powder_boron_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_asbestos, powder_asbestos.getUnlocalizedName()); - GameRegistry.registerItem(powder_magic, powder_magic.getUnlocalizedName()); - GameRegistry.registerItem(powder_sawdust, powder_sawdust.getUnlocalizedName()); - GameRegistry.registerItem(powder_flux, powder_flux.getUnlocalizedName()); - GameRegistry.registerItem(powder_fertilizer, powder_fertilizer.getUnlocalizedName()); - GameRegistry.registerItem(powder_balefire, powder_balefire.getUnlocalizedName()); - GameRegistry.registerItem(powder_semtex_mix, powder_semtex_mix.getUnlocalizedName()); - GameRegistry.registerItem(powder_desh_mix, powder_desh_mix.getUnlocalizedName()); - GameRegistry.registerItem(powder_desh_ready, powder_desh_ready.getUnlocalizedName()); - GameRegistry.registerItem(powder_desh, powder_desh.getUnlocalizedName()); - GameRegistry.registerItem(powder_nitan_mix, powder_nitan_mix.getUnlocalizedName()); - GameRegistry.registerItem(powder_spark_mix, powder_spark_mix.getUnlocalizedName()); - GameRegistry.registerItem(powder_meteorite, powder_meteorite.getUnlocalizedName()); - GameRegistry.registerItem(powder_meteorite_tiny, powder_meteorite_tiny.getUnlocalizedName()); - GameRegistry.registerItem(powder_euphemium, powder_euphemium.getUnlocalizedName()); - GameRegistry.registerItem(powder_dineutronium, powder_dineutronium.getUnlocalizedName()); - GameRegistry.registerItem(dust, dust.getUnlocalizedName()); - GameRegistry.registerItem(dust_tiny, dust_tiny.getUnlocalizedName()); - GameRegistry.registerItem(fallout, fallout.getUnlocalizedName()); - GameRegistry.registerItem(powder_ash, powder_ash.getUnlocalizedName()); - GameRegistry.registerItem(powder_limestone, powder_limestone.getUnlocalizedName()); - GameRegistry.registerItem(powder_cement, powder_cement.getUnlocalizedName()); - - //Powders - GameRegistry.registerItem(powder_fire, powder_fire.getUnlocalizedName()); - GameRegistry.registerItem(powder_ice, powder_ice.getUnlocalizedName()); - GameRegistry.registerItem(powder_poison, powder_poison.getUnlocalizedName()); - GameRegistry.registerItem(powder_thermite, powder_thermite.getUnlocalizedName()); - GameRegistry.registerItem(powder_power, powder_power.getUnlocalizedName()); - GameRegistry.registerItem(cordite, cordite.getUnlocalizedName()); - GameRegistry.registerItem(ballistite, ballistite.getUnlocalizedName()); - GameRegistry.registerItem(ball_dynamite, ball_dynamite.getUnlocalizedName()); - GameRegistry.registerItem(ball_tnt, ball_tnt.getUnlocalizedName()); - GameRegistry.registerItem(ball_tatb, ball_tatb.getUnlocalizedName()); - GameRegistry.registerItem(ball_resin, ball_resin.getUnlocalizedName()); - GameRegistry.registerItem(ball_fireclay, ball_fireclay.getUnlocalizedName()); - - //Ores - GameRegistry.registerItem(ore_bedrock, ore_bedrock.getUnlocalizedName()); - GameRegistry.registerItem(ore_centrifuged, ore_centrifuged.getUnlocalizedName()); - GameRegistry.registerItem(ore_cleaned, ore_cleaned.getUnlocalizedName()); - GameRegistry.registerItem(ore_separated, ore_separated.getUnlocalizedName()); - GameRegistry.registerItem(ore_purified, ore_purified.getUnlocalizedName()); - GameRegistry.registerItem(ore_nitrated, ore_nitrated.getUnlocalizedName()); - GameRegistry.registerItem(ore_nitrocrystalline, ore_nitrocrystalline.getUnlocalizedName()); - GameRegistry.registerItem(ore_deepcleaned, ore_deepcleaned.getUnlocalizedName()); - GameRegistry.registerItem(ore_seared, ore_seared.getUnlocalizedName()); - GameRegistry.registerItem(ore_enriched, ore_enriched.getUnlocalizedName()); - GameRegistry.registerItem(ore_byproduct, ore_byproduct.getUnlocalizedName()); - GameRegistry.registerItem(bedrock_ore_base, bedrock_ore_base.getUnlocalizedName()); - GameRegistry.registerItem(bedrock_ore, bedrock_ore.getUnlocalizedName()); - GameRegistry.registerItem(bedrock_ore_fragment, bedrock_ore_fragment.getUnlocalizedName()); - - //Crystals - GameRegistry.registerItem(crystal_coal, crystal_coal.getUnlocalizedName()); - GameRegistry.registerItem(crystal_iron, crystal_iron.getUnlocalizedName()); - GameRegistry.registerItem(crystal_gold, crystal_gold.getUnlocalizedName()); - GameRegistry.registerItem(crystal_redstone, crystal_redstone.getUnlocalizedName()); - GameRegistry.registerItem(crystal_lapis, crystal_lapis.getUnlocalizedName()); - GameRegistry.registerItem(crystal_diamond, crystal_diamond.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_schraranium, crystal_schraranium.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_cobalt, crystal_cobalt.getUnlocalizedName()); - GameRegistry.registerItem(crystal_starmetal, crystal_starmetal.getUnlocalizedName()); - GameRegistry.registerItem(crystal_cinnebar, crystal_cinnebar.getUnlocalizedName()); - GameRegistry.registerItem(crystal_trixite, crystal_trixite.getUnlocalizedName()); - GameRegistry.registerItem(crystal_osmiridium, crystal_osmiridium.getUnlocalizedName()); - GameRegistry.registerItem(gem_sodalite, gem_sodalite.getUnlocalizedName()); - GameRegistry.registerItem(gem_tantalium, gem_tantalium.getUnlocalizedName()); - GameRegistry.registerItem(gem_volcanic, gem_volcanic.getUnlocalizedName()); - GameRegistry.registerItem(gem_rad, gem_rad.getUnlocalizedName()); - GameRegistry.registerItem(gem_alexandrite, gem_alexandrite.getUnlocalizedName()); - - //Fragments - GameRegistry.registerItem(fragment_neodymium, fragment_neodymium.getUnlocalizedName()); - GameRegistry.registerItem(fragment_cobalt, fragment_cobalt.getUnlocalizedName()); - GameRegistry.registerItem(fragment_niobium, fragment_niobium.getUnlocalizedName()); - GameRegistry.registerItem(fragment_cerium, fragment_cerium.getUnlocalizedName()); - GameRegistry.registerItem(fragment_lanthanium, fragment_lanthanium.getUnlocalizedName()); - GameRegistry.registerItem(fragment_actinium, fragment_actinium.getUnlocalizedName()); - GameRegistry.registerItem(fragment_boron, fragment_boron.getUnlocalizedName()); - GameRegistry.registerItem(fragment_meteorite, fragment_meteorite.getUnlocalizedName()); - GameRegistry.registerItem(fragment_coltan, fragment_coltan.getUnlocalizedName()); - GameRegistry.registerItem(chunk_ore, chunk_ore.getUnlocalizedName()); - - //Things that look like rotten flesh but aren't - GameRegistry.registerItem(biomass, biomass.getUnlocalizedName()); - GameRegistry.registerItem(biomass_compressed, biomass_compressed.getUnlocalizedName()); - //delicious! - GameRegistry.registerItem(bio_wafer, bio_wafer.getUnlocalizedName()); - - //Nuggets - GameRegistry.registerItem(nugget_uranium, nugget_uranium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_u233, nugget_u233.getUnlocalizedName()); - GameRegistry.registerItem(nugget_u235, nugget_u235.getUnlocalizedName()); - GameRegistry.registerItem(nugget_u238, nugget_u238.getUnlocalizedName()); - GameRegistry.registerItem(nugget_th232, nugget_th232.getUnlocalizedName()); - GameRegistry.registerItem(nugget_plutonium, nugget_plutonium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_pu238, nugget_pu238.getUnlocalizedName()); - GameRegistry.registerItem(nugget_pu239, nugget_pu239.getUnlocalizedName()); - GameRegistry.registerItem(nugget_pu240, nugget_pu240.getUnlocalizedName()); - GameRegistry.registerItem(nugget_pu241, nugget_pu241.getUnlocalizedName()); - GameRegistry.registerItem(nugget_pu_mix, nugget_pu_mix.getUnlocalizedName()); - GameRegistry.registerItem(nugget_am241, nugget_am241.getUnlocalizedName()); - GameRegistry.registerItem(nugget_am242, nugget_am242.getUnlocalizedName()); - GameRegistry.registerItem(nugget_am_mix, nugget_am_mix.getUnlocalizedName()); - GameRegistry.registerItem(nugget_neptunium, nugget_neptunium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_polonium, nugget_polonium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_cobalt, nugget_cobalt.getUnlocalizedName()); - GameRegistry.registerItem(nugget_co60, nugget_co60.getUnlocalizedName()); - GameRegistry.registerItem(nugget_sr90, nugget_sr90.getUnlocalizedName()); - GameRegistry.registerItem(nugget_technetium, nugget_technetium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_au198, nugget_au198.getUnlocalizedName()); - GameRegistry.registerItem(nugget_pb209, nugget_pb209.getUnlocalizedName()); - GameRegistry.registerItem(nugget_ra226, nugget_ra226.getUnlocalizedName()); - GameRegistry.registerItem(nugget_actinium, nugget_actinium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_lead, nugget_lead.getUnlocalizedName()); - GameRegistry.registerItem(nugget_bismuth, nugget_bismuth.getUnlocalizedName()); - GameRegistry.registerItem(nugget_arsenic, nugget_arsenic.getUnlocalizedName()); - GameRegistry.registerItem(nugget_tantalium, nugget_tantalium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_silicon, nugget_silicon.getUnlocalizedName()); - GameRegistry.registerItem(nugget_niobium, nugget_niobium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_beryllium, nugget_beryllium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_schrabidium, nugget_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_solinium, nugget_solinium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_gh336, nugget_gh336.getUnlocalizedName()); - GameRegistry.registerItem(nugget_uranium_fuel, nugget_uranium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(nugget_thorium_fuel, nugget_thorium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(nugget_plutonium_fuel, nugget_plutonium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(nugget_neptunium_fuel, nugget_neptunium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(nugget_mox_fuel, nugget_mox_fuel.getUnlocalizedName()); - GameRegistry.registerItem(nugget_americium_fuel, nugget_americium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(nugget_schrabidium_fuel, nugget_schrabidium_fuel.getUnlocalizedName()); - GameRegistry.registerItem(nugget_hes, nugget_hes.getUnlocalizedName()); - GameRegistry.registerItem(nugget_les, nugget_les.getUnlocalizedName()); - GameRegistry.registerItem(nugget_zirconium, nugget_zirconium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_australium, nugget_australium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_australium_lesser, nugget_australium_lesser.getUnlocalizedName()); - GameRegistry.registerItem(nugget_australium_greater, nugget_australium_greater.getUnlocalizedName()); - GameRegistry.registerItem(nugget_desh, nugget_desh.getUnlocalizedName()); - GameRegistry.registerItem(nugget_euphemium, nugget_euphemium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_dineutronium, nugget_dineutronium.getUnlocalizedName()); - GameRegistry.registerItem(nugget_osmiridium, nugget_osmiridium.getUnlocalizedName()); - - //Plates - GameRegistry.registerItem(plate_iron, plate_iron.getUnlocalizedName()); - GameRegistry.registerItem(plate_gold, plate_gold.getUnlocalizedName()); - GameRegistry.registerItem(plate_titanium, plate_titanium.getUnlocalizedName()); - GameRegistry.registerItem(plate_aluminium, plate_aluminium.getUnlocalizedName()); - GameRegistry.registerItem(plate_steel, plate_steel.getUnlocalizedName()); - GameRegistry.registerItem(plate_lead, plate_lead.getUnlocalizedName()); - GameRegistry.registerItem(plate_copper, plate_copper.getUnlocalizedName()); - GameRegistry.registerItem(plate_advanced_alloy, plate_advanced_alloy.getUnlocalizedName()); - GameRegistry.registerItem(plate_dura_steel, plate_dura_steel.getUnlocalizedName()); - GameRegistry.registerItem(neutron_reflector, neutron_reflector.getUnlocalizedName()); - GameRegistry.registerItem(plate_schrabidium, plate_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(plate_combine_steel, plate_combine_steel.getUnlocalizedName()); - GameRegistry.registerItem(plate_mixed, plate_mixed.getUnlocalizedName()); - GameRegistry.registerItem(plate_gunmetal, plate_gunmetal.getUnlocalizedName()); - GameRegistry.registerItem(plate_weaponsteel, plate_weaponsteel.getUnlocalizedName()); - GameRegistry.registerItem(plate_saturnite, plate_saturnite.getUnlocalizedName()); - GameRegistry.registerItem(plate_paa, plate_paa.getUnlocalizedName()); - GameRegistry.registerItem(plate_polymer, plate_polymer.getUnlocalizedName()); - GameRegistry.registerItem(plate_kevlar, plate_kevlar.getUnlocalizedName()); - GameRegistry.registerItem(plate_dalekanium, plate_dalekanium.getUnlocalizedName()); - GameRegistry.registerItem(plate_desh, plate_desh.getUnlocalizedName()); - GameRegistry.registerItem(plate_bismuth, plate_bismuth.getUnlocalizedName()); - GameRegistry.registerItem(plate_euphemium, plate_euphemium.getUnlocalizedName()); - GameRegistry.registerItem(plate_dineutronium, plate_dineutronium.getUnlocalizedName()); - - //Armor Plates - GameRegistry.registerItem(plate_armor_titanium, plate_armor_titanium.getUnlocalizedName()); - GameRegistry.registerItem(plate_armor_ajr, plate_armor_ajr.getUnlocalizedName()); - GameRegistry.registerItem(plate_armor_hev, plate_armor_hev.getUnlocalizedName()); - GameRegistry.registerItem(plate_armor_lunar, plate_armor_lunar.getUnlocalizedName()); - GameRegistry.registerItem(plate_armor_fau, plate_armor_fau.getUnlocalizedName()); - GameRegistry.registerItem(plate_armor_dnt, plate_armor_dnt.getUnlocalizedName()); - - //Heavy/Cast Plate - GameRegistry.registerItem(plate_cast, plate_cast.getUnlocalizedName()); - GameRegistry.registerItem(plate_welded, plate_welded.getUnlocalizedName()); - GameRegistry.registerItem(shell, shell.getUnlocalizedName()); - GameRegistry.registerItem(pipe, pipe.getUnlocalizedName()); - GameRegistry.registerItem(heavy_component, heavy_component.getUnlocalizedName()); - - //Bolts - GameRegistry.registerItem(bolt, bolt.getUnlocalizedName()); - GameRegistry.registerItem(bolt_spike, bolt_spike.getUnlocalizedName()); - - //Cloth - GameRegistry.registerItem(hazmat_cloth, hazmat_cloth.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_cloth_red, hazmat_cloth_red.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_cloth_grey, hazmat_cloth_grey.getUnlocalizedName()); - GameRegistry.registerItem(asbestos_cloth, asbestos_cloth.getUnlocalizedName()); - GameRegistry.registerItem(rag, rag.getUnlocalizedName()); - GameRegistry.registerItem(rag_damp, rag_damp.getUnlocalizedName()); - GameRegistry.registerItem(rag_piss, rag_piss.getUnlocalizedName()); - GameRegistry.registerItem(filter_coal, filter_coal.getUnlocalizedName()); - - //Wires - GameRegistry.registerItem(wire_fine, wire_fine.getUnlocalizedName()); - GameRegistry.registerItem(wire_dense, wire_dense.getUnlocalizedName()); - - //Parts - GameRegistry.registerItem(coil_copper, coil_copper.getUnlocalizedName()); - GameRegistry.registerItem(coil_copper_torus, coil_copper_torus.getUnlocalizedName()); - GameRegistry.registerItem(coil_advanced_alloy, coil_advanced_alloy.getUnlocalizedName()); - GameRegistry.registerItem(coil_advanced_torus, coil_advanced_torus.getUnlocalizedName()); - GameRegistry.registerItem(coil_gold, coil_gold.getUnlocalizedName()); - GameRegistry.registerItem(coil_gold_torus, coil_gold_torus.getUnlocalizedName()); - GameRegistry.registerItem(coil_tungsten, coil_tungsten.getUnlocalizedName()); - GameRegistry.registerItem(coil_magnetized_tungsten, coil_magnetized_tungsten.getUnlocalizedName()); - GameRegistry.registerItem(safety_fuse, safety_fuse.getUnlocalizedName()); - GameRegistry.registerItem(tank_steel, tank_steel.getUnlocalizedName()); - GameRegistry.registerItem(motor, motor.getUnlocalizedName()); - GameRegistry.registerItem(motor_desh, motor_desh.getUnlocalizedName()); - GameRegistry.registerItem(motor_bismuth, motor_bismuth.getUnlocalizedName()); - GameRegistry.registerItem(centrifuge_element, centrifuge_element.getUnlocalizedName()); - GameRegistry.registerItem(reactor_core, reactor_core.getUnlocalizedName()); - GameRegistry.registerItem(rtg_unit, rtg_unit.getUnlocalizedName()); - GameRegistry.registerItem(levitation_unit, levitation_unit.getUnlocalizedName()); - GameRegistry.registerItem(pipes_steel, pipes_steel.getUnlocalizedName()); - GameRegistry.registerItem(drill_titanium, drill_titanium.getUnlocalizedName()); - GameRegistry.registerItem(photo_panel, photo_panel.getUnlocalizedName()); - GameRegistry.registerItem(chlorine_pinwheel, chlorine_pinwheel.getUnlocalizedName()); - GameRegistry.registerItem(ring_starmetal, ring_starmetal.getUnlocalizedName()); - GameRegistry.registerItem(deuterium_filter, deuterium_filter.getUnlocalizedName()); - GameRegistry.registerItem(chemical_dye, chemical_dye.getUnlocalizedName()); - GameRegistry.registerItem(crayon, crayon.getUnlocalizedName()); - GameRegistry.registerItem(part_generic, part_generic.getUnlocalizedName()); - GameRegistry.registerItem(item_secret, item_secret.getUnlocalizedName()); - GameRegistry.registerItem(ingot_metal, ingot_metal.getUnlocalizedName()); - GameRegistry.registerItem(parts_legendary, parts_legendary.getUnlocalizedName()); - GameRegistry.registerItem(gear_large, gear_large.getUnlocalizedName()); - GameRegistry.registerItem(sawblade, sawblade.getUnlocalizedName()); - GameRegistry.registerItem(part_barrel_light, part_barrel_light.getUnlocalizedName()); - GameRegistry.registerItem(part_barrel_heavy, part_barrel_heavy.getUnlocalizedName()); - GameRegistry.registerItem(part_receiver_light, part_receiver_light.getUnlocalizedName()); - GameRegistry.registerItem(part_receiver_heavy, part_receiver_heavy.getUnlocalizedName()); - GameRegistry.registerItem(part_mechanism, part_mechanism.getUnlocalizedName()); - GameRegistry.registerItem(part_stock, part_stock.getUnlocalizedName()); - GameRegistry.registerItem(part_grip, part_grip.getUnlocalizedName()); - - //Plant Products - GameRegistry.registerItem(plant_item, plant_item.getUnlocalizedName()); - - //Teleporter Parts - //GameRegistry.registerItem(telepad, telepad.getUnlocalizedName()); - GameRegistry.registerItem(entanglement_kit, entanglement_kit.getUnlocalizedName()); - - //AMS Parts - GameRegistry.registerItem(component_limiter, component_limiter.getUnlocalizedName()); - GameRegistry.registerItem(component_emitter, component_emitter.getUnlocalizedName()); - - //Bomb Parts - GameRegistry.registerItem(fins_flat, fins_flat.getUnlocalizedName()); - GameRegistry.registerItem(fins_small_steel, fins_small_steel.getUnlocalizedName()); - GameRegistry.registerItem(fins_big_steel, fins_big_steel.getUnlocalizedName()); - GameRegistry.registerItem(fins_tri_steel, fins_tri_steel.getUnlocalizedName()); - GameRegistry.registerItem(fins_quad_titanium, fins_quad_titanium.getUnlocalizedName()); - GameRegistry.registerItem(sphere_steel, sphere_steel.getUnlocalizedName()); - GameRegistry.registerItem(pedestal_steel, pedestal_steel.getUnlocalizedName()); - GameRegistry.registerItem(dysfunctional_reactor, dysfunctional_reactor.getUnlocalizedName()); - GameRegistry.registerItem(blade_titanium, blade_titanium.getUnlocalizedName()); - GameRegistry.registerItem(blade_tungsten, blade_tungsten.getUnlocalizedName()); - GameRegistry.registerItem(turbine_titanium, turbine_titanium.getUnlocalizedName()); - GameRegistry.registerItem(turbine_tungsten, turbine_tungsten.getUnlocalizedName()); - GameRegistry.registerItem(flywheel_beryllium, flywheel_beryllium.getUnlocalizedName()); - GameRegistry.registerItem(toothpicks, toothpicks.getUnlocalizedName()); - GameRegistry.registerItem(ducttape, ducttape.getUnlocalizedName()); - GameRegistry.registerItem(catalyst_clay, catalyst_clay.getUnlocalizedName()); - GameRegistry.registerItem(missile_assembly, missile_assembly.getUnlocalizedName()); - GameRegistry.registerItem(warhead_generic_small, warhead_generic_small.getUnlocalizedName()); - GameRegistry.registerItem(warhead_generic_medium, warhead_generic_medium.getUnlocalizedName()); - GameRegistry.registerItem(warhead_generic_large, warhead_generic_large.getUnlocalizedName()); - GameRegistry.registerItem(warhead_incendiary_small, warhead_incendiary_small.getUnlocalizedName()); - GameRegistry.registerItem(warhead_incendiary_medium, warhead_incendiary_medium.getUnlocalizedName()); - GameRegistry.registerItem(warhead_incendiary_large, warhead_incendiary_large.getUnlocalizedName()); - GameRegistry.registerItem(warhead_cluster_small, warhead_cluster_small.getUnlocalizedName()); - GameRegistry.registerItem(warhead_cluster_medium, warhead_cluster_medium.getUnlocalizedName()); - GameRegistry.registerItem(warhead_cluster_large, warhead_cluster_large.getUnlocalizedName()); - GameRegistry.registerItem(warhead_buster_small, warhead_buster_small.getUnlocalizedName()); - GameRegistry.registerItem(warhead_buster_medium, warhead_buster_medium.getUnlocalizedName()); - GameRegistry.registerItem(warhead_buster_large, warhead_buster_large.getUnlocalizedName()); - GameRegistry.registerItem(warhead_nuclear, warhead_nuclear.getUnlocalizedName()); - GameRegistry.registerItem(warhead_mirv, warhead_mirv.getUnlocalizedName()); - GameRegistry.registerItem(warhead_volcano, warhead_volcano.getUnlocalizedName()); - GameRegistry.registerItem(fuel_tank_small, fuel_tank_small.getUnlocalizedName()); - GameRegistry.registerItem(fuel_tank_medium, fuel_tank_medium.getUnlocalizedName()); - GameRegistry.registerItem(fuel_tank_large, fuel_tank_large.getUnlocalizedName()); - GameRegistry.registerItem(thruster_small, thruster_small.getUnlocalizedName()); - GameRegistry.registerItem(thruster_medium, thruster_medium.getUnlocalizedName()); - GameRegistry.registerItem(thruster_large, thruster_large.getUnlocalizedName()); - GameRegistry.registerItem(thruster_nuclear, thruster_nuclear.getUnlocalizedName()); - GameRegistry.registerItem(sat_base, sat_base.getUnlocalizedName()); - GameRegistry.registerItem(sat_head_mapper, sat_head_mapper.getUnlocalizedName()); - GameRegistry.registerItem(sat_head_scanner, sat_head_scanner.getUnlocalizedName()); - GameRegistry.registerItem(sat_head_radar, sat_head_radar.getUnlocalizedName()); - GameRegistry.registerItem(sat_head_laser, sat_head_laser.getUnlocalizedName()); - GameRegistry.registerItem(sat_head_resonator, sat_head_resonator.getUnlocalizedName()); - GameRegistry.registerItem(seg_10, seg_10.getUnlocalizedName()); - GameRegistry.registerItem(seg_15, seg_15.getUnlocalizedName()); - GameRegistry.registerItem(seg_20, seg_20.getUnlocalizedName()); - - //Chopper parts - GameRegistry.registerItem(chopper_head, chopper_head.getUnlocalizedName()); - GameRegistry.registerItem(chopper_gun, chopper_gun.getUnlocalizedName()); - GameRegistry.registerItem(chopper_torso, chopper_torso.getUnlocalizedName()); - GameRegistry.registerItem(chopper_tail, chopper_tail.getUnlocalizedName()); - GameRegistry.registerItem(chopper_wing, chopper_wing.getUnlocalizedName()); - GameRegistry.registerItem(chopper_blades, chopper_blades.getUnlocalizedName()); - GameRegistry.registerItem(combine_scrap, combine_scrap.getUnlocalizedName()); - - //Hammer Parts - GameRegistry.registerItem(shimmer_head, shimmer_head.getUnlocalizedName()); - GameRegistry.registerItem(shimmer_axe_head, shimmer_axe_head.getUnlocalizedName()); - GameRegistry.registerItem(shimmer_handle, shimmer_handle.getUnlocalizedName()); - - //Circuits - GameRegistry.registerItem(circuit, circuit.getUnlocalizedName()); - GameRegistry.registerItem(crt_display, crt_display.getUnlocalizedName()); - GameRegistry.registerItem(circuit_star_piece, circuit_star_piece.getUnlocalizedName()); - GameRegistry.registerItem(circuit_star_component, circuit_star_component.getUnlocalizedName()); - GameRegistry.registerItem(circuit_star, circuit_star.getUnlocalizedName()); - - //Casing - GameRegistry.registerItem(casing, casing.getUnlocalizedName()); - - //Bullet Assemblies - GameRegistry.registerItem(assembly_nuke, assembly_nuke.getUnlocalizedName()); - - //Wiring - GameRegistry.registerItem(wiring_red_copper, wiring_red_copper.getUnlocalizedName()); - - //Flame War in a Box - GameRegistry.registerItem(flame_pony, flame_pony.getUnlocalizedName()); - GameRegistry.registerItem(flame_conspiracy, flame_conspiracy.getUnlocalizedName()); - GameRegistry.registerItem(flame_politics, flame_politics.getUnlocalizedName()); - GameRegistry.registerItem(flame_opinion, flame_opinion.getUnlocalizedName()); - - //Pellets - GameRegistry.registerItem(pellet_rtg_radium, pellet_rtg_radium.getUnlocalizedName()); - GameRegistry.registerItem(pellet_rtg_weak, pellet_rtg_weak.getUnlocalizedName()); - GameRegistry.registerItem(pellet_rtg, pellet_rtg.getUnlocalizedName()); - GameRegistry.registerItem(pellet_rtg_strontium, pellet_rtg_strontium.getUnlocalizedName()); - GameRegistry.registerItem(pellet_rtg_cobalt, pellet_rtg_cobalt.getUnlocalizedName()); - GameRegistry.registerItem(pellet_rtg_actinium, pellet_rtg_actinium.getUnlocalizedName()); - GameRegistry.registerItem(pellet_rtg_polonium, pellet_rtg_polonium.getUnlocalizedName()); - GameRegistry.registerItem(pellet_rtg_americium, pellet_rtg_americium.getUnlocalizedName()); - GameRegistry.registerItem(pellet_rtg_gold, pellet_rtg_gold.getUnlocalizedName()); - GameRegistry.registerItem(pellet_rtg_lead, pellet_rtg_lead.getUnlocalizedName()); - GameRegistry.registerItem(pellet_rtg_depleted, pellet_rtg_depleted.getUnlocalizedName()); - GameRegistry.registerItem(tritium_deuterium_cake, tritium_deuterium_cake.getUnlocalizedName()); - GameRegistry.registerItem(pellet_cluster, pellet_cluster.getUnlocalizedName()); - GameRegistry.registerItem(pellet_buckshot, pellet_buckshot.getUnlocalizedName()); - GameRegistry.registerItem(pellet_charged, pellet_charged.getUnlocalizedName()); - GameRegistry.registerItem(pellet_gas, pellet_gas.getUnlocalizedName()); - GameRegistry.registerItem(magnetron, magnetron.getUnlocalizedName()); - - //Engine Pieces - GameRegistry.registerItem(piston_selenium, piston_selenium.getUnlocalizedName()); - GameRegistry.registerItem(piston_set, piston_set.getUnlocalizedName()); - GameRegistry.registerItem(drillbit, drillbit.getUnlocalizedName()); - - //Cells - GameRegistry.registerItem(cell_empty, cell_empty.getUnlocalizedName()); - GameRegistry.registerItem(cell_uf6, cell_uf6.getUnlocalizedName()); - GameRegistry.registerItem(cell_puf6, cell_puf6.getUnlocalizedName()); - GameRegistry.registerItem(cell_deuterium, cell_deuterium.getUnlocalizedName()); - GameRegistry.registerItem(cell_tritium, cell_tritium.getUnlocalizedName()); - GameRegistry.registerItem(cell_sas3, cell_sas3.getUnlocalizedName()); - GameRegistry.registerItem(cell_antimatter, cell_antimatter.getUnlocalizedName()); - GameRegistry.registerItem(cell_anti_schrabidium, cell_anti_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(cell_balefire, cell_balefire.getUnlocalizedName()); - - //DEMON CORE - GameRegistry.registerItem(demon_core_open, demon_core_open.getUnlocalizedName()); - GameRegistry.registerItem(demon_core_closed, demon_core_closed.getUnlocalizedName()); - - //PA - GameRegistry.registerItem(pa_coil, pa_coil.getUnlocalizedName()); - - //Particle Containers - GameRegistry.registerItem(particle_empty, particle_empty.getUnlocalizedName()); - GameRegistry.registerItem(particle_hydrogen, particle_hydrogen.getUnlocalizedName()); - GameRegistry.registerItem(particle_copper, particle_copper.getUnlocalizedName()); - GameRegistry.registerItem(particle_lead, particle_lead.getUnlocalizedName()); - GameRegistry.registerItem(particle_aproton, particle_aproton.getUnlocalizedName()); - GameRegistry.registerItem(particle_aelectron, particle_aelectron.getUnlocalizedName()); - GameRegistry.registerItem(particle_amat, particle_amat.getUnlocalizedName()); - GameRegistry.registerItem(particle_aschrab, particle_aschrab.getUnlocalizedName()); - GameRegistry.registerItem(particle_higgs, particle_higgs.getUnlocalizedName()); - GameRegistry.registerItem(particle_muon, particle_muon.getUnlocalizedName()); - GameRegistry.registerItem(particle_tachyon, particle_tachyon.getUnlocalizedName()); - GameRegistry.registerItem(particle_strange, particle_strange.getUnlocalizedName()); - GameRegistry.registerItem(particle_dark, particle_dark.getUnlocalizedName()); - GameRegistry.registerItem(particle_sparkticle, particle_sparkticle.getUnlocalizedName()); - GameRegistry.registerItem(particle_digamma, particle_digamma.getUnlocalizedName()); - GameRegistry.registerItem(particle_lutece, particle_lutece.getUnlocalizedName()); - - //Singularities, black holes and other cosmic horrors - GameRegistry.registerItem(singularity, singularity.getUnlocalizedName()); - GameRegistry.registerItem(singularity_counter_resonant, singularity_counter_resonant.getUnlocalizedName()); - GameRegistry.registerItem(singularity_super_heated, singularity_super_heated.getUnlocalizedName()); - GameRegistry.registerItem(black_hole, black_hole.getUnlocalizedName()); - GameRegistry.registerItem(singularity_spark, singularity_spark.getUnlocalizedName()); - GameRegistry.registerItem(crystal_xen, crystal_xen.getUnlocalizedName()); - GameRegistry.registerItem(pellet_antimatter, pellet_antimatter.getUnlocalizedName()); - - //Infinite Tanks - GameRegistry.registerItem(inf_water, inf_water.getUnlocalizedName()); - GameRegistry.registerItem(inf_water_mk2, inf_water_mk2.getUnlocalizedName()); - - //Canisters - GameRegistry.registerItem(fuel_additive, fuel_additive.getUnlocalizedName()); - GameRegistry.registerItem(canister_empty, canister_empty.getUnlocalizedName()); - GameRegistry.registerItem(canister_full, canister_full.getUnlocalizedName()); - GameRegistry.registerItem(canister_napalm, canister_napalm.getUnlocalizedName()); - - //Gas Tanks - GameRegistry.registerItem(gas_empty, gas_empty.getUnlocalizedName()); - GameRegistry.registerItem(gas_full, gas_full.getUnlocalizedName()); - - //Universal Tank - GameRegistry.registerItem(fluid_tank_empty, fluid_tank_empty.getUnlocalizedName()); - GameRegistry.registerItem(fluid_tank_full, fluid_tank_full.getUnlocalizedName()); - GameRegistry.registerItem(fluid_tank_lead_empty, fluid_tank_lead_empty.getUnlocalizedName()); - GameRegistry.registerItem(fluid_tank_lead_full, fluid_tank_lead_full.getUnlocalizedName()); - GameRegistry.registerItem(fluid_barrel_empty, fluid_barrel_empty.getUnlocalizedName()); - GameRegistry.registerItem(fluid_barrel_full, fluid_barrel_full.getUnlocalizedName()); - GameRegistry.registerItem(fluid_barrel_infinite, fluid_barrel_infinite.getUnlocalizedName()); - - //Pipette - GameRegistry.registerItem(pipette, pipette.getUnlocalizedName()); - GameRegistry.registerItem(pipette_boron, pipette_boron.getUnlocalizedName()); - GameRegistry.registerItem(pipette_laboratory, pipette_laboratory.getUnlocalizedName()); - - //Siphon - GameRegistry.registerItem(siphon, siphon.getUnlocalizedName()); - - //Batteries - GameRegistry.registerItem(battery_generic, battery_generic.getUnlocalizedName()); - GameRegistry.registerItem(battery_red_cell, battery_red_cell.getUnlocalizedName()); - GameRegistry.registerItem(battery_red_cell_6, battery_red_cell_6.getUnlocalizedName()); - GameRegistry.registerItem(battery_red_cell_24, battery_red_cell_24.getUnlocalizedName()); - GameRegistry.registerItem(battery_advanced, battery_advanced.getUnlocalizedName()); - GameRegistry.registerItem(battery_advanced_cell, battery_advanced_cell.getUnlocalizedName()); - GameRegistry.registerItem(battery_advanced_cell_4, battery_advanced_cell_4.getUnlocalizedName()); - GameRegistry.registerItem(battery_advanced_cell_12, battery_advanced_cell_12.getUnlocalizedName()); - GameRegistry.registerItem(battery_lithium, battery_lithium.getUnlocalizedName()); - GameRegistry.registerItem(battery_lithium_cell, battery_lithium_cell.getUnlocalizedName()); - GameRegistry.registerItem(battery_lithium_cell_3, battery_lithium_cell_3.getUnlocalizedName()); - GameRegistry.registerItem(battery_lithium_cell_6, battery_lithium_cell_6.getUnlocalizedName()); - GameRegistry.registerItem(battery_schrabidium, battery_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(battery_schrabidium_cell, battery_schrabidium_cell.getUnlocalizedName()); - GameRegistry.registerItem(battery_schrabidium_cell_2, battery_schrabidium_cell_2.getUnlocalizedName()); - GameRegistry.registerItem(battery_schrabidium_cell_4, battery_schrabidium_cell_4.getUnlocalizedName()); - GameRegistry.registerItem(battery_spark, battery_spark.getUnlocalizedName()); - GameRegistry.registerItem(battery_trixite, battery_trixite.getUnlocalizedName()); - GameRegistry.registerItem(battery_spark_cell_6, battery_spark_cell_6.getUnlocalizedName()); - GameRegistry.registerItem(battery_spark_cell_25, battery_spark_cell_25.getUnlocalizedName()); - GameRegistry.registerItem(battery_spark_cell_100, battery_spark_cell_100.getUnlocalizedName()); - GameRegistry.registerItem(battery_spark_cell_1000, battery_spark_cell_1000.getUnlocalizedName()); - GameRegistry.registerItem(battery_spark_cell_2500, battery_spark_cell_2500.getUnlocalizedName()); - GameRegistry.registerItem(battery_spark_cell_10000, battery_spark_cell_10000.getUnlocalizedName()); - GameRegistry.registerItem(battery_spark_cell_power, battery_spark_cell_power.getUnlocalizedName()); - GameRegistry.registerItem(cube_power, cube_power.getUnlocalizedName()); - GameRegistry.registerItem(battery_creative, battery_creative.getUnlocalizedName()); - GameRegistry.registerItem(battery_potato, battery_potato.getUnlocalizedName()); - GameRegistry.registerItem(battery_potatos, battery_potatos.getUnlocalizedName()); - GameRegistry.registerItem(battery_sc_uranium, battery_sc_uranium.getUnlocalizedName()); - GameRegistry.registerItem(battery_sc_technetium, battery_sc_technetium.getUnlocalizedName()); - GameRegistry.registerItem(battery_sc_plutonium, battery_sc_plutonium.getUnlocalizedName()); - GameRegistry.registerItem(battery_sc_polonium, battery_sc_polonium.getUnlocalizedName()); - GameRegistry.registerItem(battery_sc_gold, battery_sc_gold.getUnlocalizedName()); - GameRegistry.registerItem(battery_sc_lead, battery_sc_lead.getUnlocalizedName()); - GameRegistry.registerItem(battery_sc_americium, battery_sc_americium.getUnlocalizedName()); - GameRegistry.registerItem(hev_battery, hev_battery.getUnlocalizedName()); - GameRegistry.registerItem(fusion_core, fusion_core.getUnlocalizedName()); - GameRegistry.registerItem(energy_core, energy_core.getUnlocalizedName()); - GameRegistry.registerItem(fusion_core_infinite, fusion_core_infinite.getUnlocalizedName()); - - //Folders - GameRegistry.registerItem(template_folder, template_folder.getUnlocalizedName()); - GameRegistry.registerItem(journal_pip, journal_pip.getUnlocalizedName()); - GameRegistry.registerItem(journal_bj, journal_bj.getUnlocalizedName()); - GameRegistry.registerItem(journal_silver, journal_silver.getUnlocalizedName()); - GameRegistry.registerItem(bobmazon, bobmazon.getUnlocalizedName()); - GameRegistry.registerItem(bobmazon_hidden, bobmazon_hidden.getUnlocalizedName()); - - //Hydraulic Press Stamps - GameRegistry.registerItem(stamp_stone_flat, stamp_stone_flat.getUnlocalizedName()); - GameRegistry.registerItem(stamp_stone_plate, stamp_stone_plate.getUnlocalizedName()); - GameRegistry.registerItem(stamp_stone_wire, stamp_stone_wire.getUnlocalizedName()); - GameRegistry.registerItem(stamp_stone_circuit, stamp_stone_circuit.getUnlocalizedName()); - GameRegistry.registerItem(stamp_iron_flat, stamp_iron_flat.getUnlocalizedName()); - GameRegistry.registerItem(stamp_iron_plate, stamp_iron_plate.getUnlocalizedName()); - GameRegistry.registerItem(stamp_iron_wire, stamp_iron_wire.getUnlocalizedName()); - GameRegistry.registerItem(stamp_iron_circuit, stamp_iron_circuit.getUnlocalizedName()); - GameRegistry.registerItem(stamp_steel_flat, stamp_steel_flat.getUnlocalizedName()); - GameRegistry.registerItem(stamp_steel_plate, stamp_steel_plate.getUnlocalizedName()); - GameRegistry.registerItem(stamp_steel_wire, stamp_steel_wire.getUnlocalizedName()); - GameRegistry.registerItem(stamp_steel_circuit, stamp_steel_circuit.getUnlocalizedName()); - GameRegistry.registerItem(stamp_titanium_flat, stamp_titanium_flat.getUnlocalizedName()); - GameRegistry.registerItem(stamp_titanium_plate, stamp_titanium_plate.getUnlocalizedName()); - GameRegistry.registerItem(stamp_titanium_wire, stamp_titanium_wire.getUnlocalizedName()); - GameRegistry.registerItem(stamp_titanium_circuit, stamp_titanium_circuit.getUnlocalizedName()); - GameRegistry.registerItem(stamp_obsidian_flat, stamp_obsidian_flat.getUnlocalizedName()); - GameRegistry.registerItem(stamp_obsidian_plate, stamp_obsidian_plate.getUnlocalizedName()); - GameRegistry.registerItem(stamp_obsidian_wire, stamp_obsidian_wire.getUnlocalizedName()); - GameRegistry.registerItem(stamp_obsidian_circuit, stamp_obsidian_circuit.getUnlocalizedName()); - GameRegistry.registerItem(stamp_desh_flat, stamp_desh_flat.getUnlocalizedName()); - GameRegistry.registerItem(stamp_desh_plate, stamp_desh_plate.getUnlocalizedName()); - GameRegistry.registerItem(stamp_desh_wire, stamp_desh_wire.getUnlocalizedName()); - GameRegistry.registerItem(stamp_desh_circuit, stamp_desh_circuit.getUnlocalizedName()); - GameRegistry.registerItem(stamp_357, stamp_357.getUnlocalizedName()); - GameRegistry.registerItem(stamp_44, stamp_44.getUnlocalizedName()); - GameRegistry.registerItem(stamp_9, stamp_9.getUnlocalizedName()); - GameRegistry.registerItem(stamp_50, stamp_50.getUnlocalizedName()); - - GameRegistry.registerItem(stamp_desh_357, stamp_desh_357.getUnlocalizedName()); - GameRegistry.registerItem(stamp_desh_44, stamp_desh_44.getUnlocalizedName()); - GameRegistry.registerItem(stamp_desh_9, stamp_desh_9.getUnlocalizedName()); - GameRegistry.registerItem(stamp_desh_50, stamp_desh_50.getUnlocalizedName()); - GameRegistry.registerItem(stamp_book, stamp_book.getUnlocalizedName()); - - //Molds - GameRegistry.registerItem(mold_base, mold_base.getUnlocalizedName()); - GameRegistry.registerItem(mold, mold.getUnlocalizedName()); - GameRegistry.registerItem(scraps, scraps.getUnlocalizedName()); - - //Machine Upgrades - GameRegistry.registerItem(upgrade_muffler, upgrade_muffler.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_template, upgrade_template.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_speed_1, upgrade_speed_1.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_speed_2, upgrade_speed_2.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_speed_3, upgrade_speed_3.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_effect_1, upgrade_effect_1.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_effect_2, upgrade_effect_2.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_effect_3, upgrade_effect_3.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_power_1, upgrade_power_1.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_power_2, upgrade_power_2.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_power_3, upgrade_power_3.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_fortune_1, upgrade_fortune_1.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_fortune_2, upgrade_fortune_2.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_fortune_3, upgrade_fortune_3.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_afterburn_1, upgrade_afterburn_1.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_afterburn_2, upgrade_afterburn_2.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_afterburn_3, upgrade_afterburn_3.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_overdrive_1, upgrade_overdrive_1.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_overdrive_2, upgrade_overdrive_2.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_overdrive_3, upgrade_overdrive_3.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_radius, upgrade_radius.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_health, upgrade_health.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_smelter, upgrade_smelter.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_shredder, upgrade_shredder.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_centrifuge, upgrade_centrifuge.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_crystallizer, upgrade_crystallizer.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_nullifier, upgrade_nullifier.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_screm, upgrade_screm.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_gc_speed, upgrade_gc_speed.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_5g, upgrade_5g.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_stack, upgrade_stack.getUnlocalizedName()); - GameRegistry.registerItem(upgrade_ejector, upgrade_ejector.getUnlocalizedName()); - - //Machine Templates - GameRegistry.registerItem(siren_track, siren_track.getUnlocalizedName()); - GameRegistry.registerItem(fluid_identifier, fluid_identifier.getUnlocalizedName()); - GameRegistry.registerItem(fluid_identifier_multi, fluid_identifier_multi.getUnlocalizedName()); - GameRegistry.registerItem(fluid_icon, fluid_icon.getUnlocalizedName()); - GameRegistry.registerItem(fluid_duct, fluid_duct.getUnlocalizedName()); - GameRegistry.registerItem(assembly_template, assembly_template.getUnlocalizedName()); - GameRegistry.registerItem(chemistry_template, chemistry_template.getUnlocalizedName()); - GameRegistry.registerItem(chemistry_icon, chemistry_icon.getUnlocalizedName()); - GameRegistry.registerItem(crucible_template, crucible_template.getUnlocalizedName()); - - //Machine Items - GameRegistry.registerItem(fuse, fuse.getUnlocalizedName()); - GameRegistry.registerItem(redcoil_capacitor, redcoil_capacitor.getUnlocalizedName()); - GameRegistry.registerItem(euphemium_capacitor, euphemium_capacitor.getUnlocalizedName()); - GameRegistry.registerItem(screwdriver, screwdriver.getUnlocalizedName()); - GameRegistry.registerItem(screwdriver_desh, screwdriver_desh.getUnlocalizedName()); - GameRegistry.registerItem(hand_drill, hand_drill.getUnlocalizedName()); - GameRegistry.registerItem(hand_drill_desh, hand_drill_desh.getUnlocalizedName()); - GameRegistry.registerItem(chemistry_set, chemistry_set.getUnlocalizedName()); - GameRegistry.registerItem(chemistry_set_boron, chemistry_set_boron.getUnlocalizedName()); - GameRegistry.registerItem(blowtorch, blowtorch.getUnlocalizedName()); - GameRegistry.registerItem(acetylene_torch, acetylene_torch.getUnlocalizedName()); - GameRegistry.registerItem(boltgun, boltgun.getUnlocalizedName()); - GameRegistry.registerItem(overfuse, overfuse.getUnlocalizedName()); - GameRegistry.registerItem(arc_electrode, arc_electrode.getUnlocalizedName()); - GameRegistry.registerItem(arc_electrode_burnt, arc_electrode_burnt.getUnlocalizedName()); - - //Particle Collider Fuel - GameRegistry.registerItem(part_lithium, part_lithium.getUnlocalizedName()); - GameRegistry.registerItem(part_beryllium, part_beryllium.getUnlocalizedName()); - GameRegistry.registerItem(part_carbon, part_carbon.getUnlocalizedName()); - GameRegistry.registerItem(part_copper, part_copper.getUnlocalizedName()); - GameRegistry.registerItem(part_plutonium, part_plutonium.getUnlocalizedName()); - - //FEL laser crystals - GameRegistry.registerItem(laser_crystal_co2, laser_crystal_co2.getUnlocalizedName()); - GameRegistry.registerItem(laser_crystal_bismuth, laser_crystal_bismuth.getUnlocalizedName()); - GameRegistry.registerItem(laser_crystal_cmb, laser_crystal_cmb.getUnlocalizedName()); - GameRegistry.registerItem(laser_crystal_dnt, laser_crystal_dnt.getUnlocalizedName()); - GameRegistry.registerItem(laser_crystal_digamma, laser_crystal_digamma.getUnlocalizedName()); - - //Catalyst Rune Sigils - GameRegistry.registerItem(rune_blank, rune_blank.getUnlocalizedName()); - GameRegistry.registerItem(rune_isa, rune_isa.getUnlocalizedName()); - GameRegistry.registerItem(rune_dagaz, rune_dagaz.getUnlocalizedName()); - GameRegistry.registerItem(rune_hagalaz, rune_hagalaz.getUnlocalizedName()); - GameRegistry.registerItem(rune_jera, rune_jera.getUnlocalizedName()); - GameRegistry.registerItem(rune_thurisaz, rune_thurisaz.getUnlocalizedName()); - - //AMS Catalysts - GameRegistry.registerItem(ams_catalyst_blank, ams_catalyst_blank.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_aluminium, ams_catalyst_aluminium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_beryllium, ams_catalyst_beryllium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_caesium, ams_catalyst_caesium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_cerium, ams_catalyst_cerium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_cobalt, ams_catalyst_cobalt.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_copper, ams_catalyst_copper.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_euphemium, ams_catalyst_euphemium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_dineutronium, ams_catalyst_dineutronium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_iron, ams_catalyst_iron.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_lithium, ams_catalyst_lithium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_niobium, ams_catalyst_niobium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_schrabidium, ams_catalyst_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_strontium, ams_catalyst_strontium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_thorium, ams_catalyst_thorium.getUnlocalizedName()); - GameRegistry.registerItem(ams_catalyst_tungsten, ams_catalyst_tungsten.getUnlocalizedName()); - - //Shredder Blades - GameRegistry.registerItem(blades_steel, blades_steel.getUnlocalizedName()); - GameRegistry.registerItem(blades_titanium, blades_titanium.getUnlocalizedName()); - GameRegistry.registerItem(blades_advanced_alloy, blades_advanced_alloy.getUnlocalizedName()); - GameRegistry.registerItem(blades_desh, blades_desh.getUnlocalizedName()); - - //Generator Stuff - GameRegistry.registerItem(thermo_element, thermo_element.getUnlocalizedName()); - GameRegistry.registerItem(catalytic_converter, catalytic_converter.getUnlocalizedName()); - - //AMS Components - GameRegistry.registerItem(ams_focus_blank, ams_focus_blank.getUnlocalizedName()); - GameRegistry.registerItem(ams_focus_limiter, ams_focus_limiter.getUnlocalizedName()); - GameRegistry.registerItem(ams_focus_booster, ams_focus_booster.getUnlocalizedName()); - GameRegistry.registerItem(ams_muzzle, ams_muzzle.getUnlocalizedName()); - GameRegistry.registerItem(ams_lens, ams_lens.getUnlocalizedName()); - GameRegistry.registerItem(ams_core_sing, ams_core_sing.getUnlocalizedName()); - GameRegistry.registerItem(ams_core_wormhole, ams_core_wormhole.getUnlocalizedName()); - GameRegistry.registerItem(ams_core_eyeofharmony, ams_core_eyeofharmony.getUnlocalizedName()); - GameRegistry.registerItem(ams_core_thingy, ams_core_thingy.getUnlocalizedName()); - - //Fusion Shields - GameRegistry.registerItem(fusion_shield_tungsten, fusion_shield_tungsten.getUnlocalizedName()); - GameRegistry.registerItem(fusion_shield_desh, fusion_shield_desh.getUnlocalizedName()); - GameRegistry.registerItem(fusion_shield_chlorophyte, fusion_shield_chlorophyte.getUnlocalizedName()); - GameRegistry.registerItem(fusion_shield_vaporwave, fusion_shield_vaporwave.getUnlocalizedName()); - - //Breeding Rods - GameRegistry.registerItem(rod_empty, rod_empty.getUnlocalizedName()); - GameRegistry.registerItem(rod, rod.getUnlocalizedName()); - GameRegistry.registerItem(rod_dual_empty, rod_dual_empty.getUnlocalizedName()); - GameRegistry.registerItem(rod_dual, rod_dual.getUnlocalizedName()); - GameRegistry.registerItem(rod_quad_empty, rod_quad_empty.getUnlocalizedName()); - GameRegistry.registerItem(rod_quad, rod_quad.getUnlocalizedName()); - - //ZIRNOX parts - GameRegistry.registerItem(rod_zirnox_empty, rod_zirnox_empty.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_natural_uranium_fuel, rod_zirnox_natural_uranium_fuel.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_uranium_fuel, rod_zirnox_uranium_fuel.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_th232, rod_zirnox_th232.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_thorium_fuel, rod_zirnox_thorium_fuel.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_mox_fuel, rod_zirnox_mox_fuel.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_plutonium_fuel, rod_zirnox_plutonium_fuel.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_u233_fuel, rod_zirnox_u233_fuel.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_u235_fuel, rod_zirnox_u235_fuel.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_les_fuel, rod_zirnox_les_fuel.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_lithium, rod_zirnox_lithium.getUnlocalizedName()); - GameRegistry.registerItem(rod_zirnox_tritium, rod_zirnox_tritium.getUnlocalizedName()); - //GameRegistry.registerItem(rod_zirnox_zfb_mox, rod_zirnox_zfb_mox.getUnlocalizedName()); - GameRegistry.registerItem(rod_zirnox, rod_zirnox.getUnlocalizedName()); - - GameRegistry.registerItem(rod_zirnox_natural_uranium_fuel_depleted, rod_zirnox_natural_uranium_fuel_depleted.getUnlocalizedName()); - GameRegistry.registerItem(rod_zirnox_uranium_fuel_depleted, rod_zirnox_uranium_fuel_depleted.getUnlocalizedName()); - GameRegistry.registerItem(rod_zirnox_thorium_fuel_depleted, rod_zirnox_thorium_fuel_depleted.getUnlocalizedName()); - GameRegistry.registerItem(rod_zirnox_mox_fuel_depleted, rod_zirnox_mox_fuel_depleted.getUnlocalizedName()); - GameRegistry.registerItem(rod_zirnox_plutonium_fuel_depleted, rod_zirnox_plutonium_fuel_depleted.getUnlocalizedName()); - GameRegistry.registerItem(rod_zirnox_u233_fuel_depleted, rod_zirnox_u233_fuel_depleted.getUnlocalizedName()); - GameRegistry.registerItem(rod_zirnox_u235_fuel_depleted, rod_zirnox_u235_fuel_depleted.getUnlocalizedName()); - GameRegistry.registerItem(rod_zirnox_les_fuel_depleted, rod_zirnox_les_fuel_depleted.getUnlocalizedName()); - GameRegistry.registerItem(rod_zirnox_zfb_mox_depleted, rod_zirnox_zfb_mox_depleted.getUnlocalizedName()); - - //Depleted Fuel - GameRegistry.registerItem(waste_natural_uranium, waste_natural_uranium.getUnlocalizedName()); - GameRegistry.registerItem(waste_uranium, waste_uranium.getUnlocalizedName()); - GameRegistry.registerItem(waste_thorium, waste_thorium.getUnlocalizedName()); - GameRegistry.registerItem(waste_mox, waste_mox.getUnlocalizedName()); - GameRegistry.registerItem(waste_plutonium, waste_plutonium.getUnlocalizedName()); - GameRegistry.registerItem(waste_u233, waste_u233.getUnlocalizedName()); - GameRegistry.registerItem(waste_u235, waste_u235.getUnlocalizedName()); - GameRegistry.registerItem(waste_schrabidium, waste_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(waste_zfb_mox, waste_zfb_mox.getUnlocalizedName()); - - GameRegistry.registerItem(waste_plate_u233, waste_plate_u233.getUnlocalizedName()); - GameRegistry.registerItem(waste_plate_u235, waste_plate_u235.getUnlocalizedName()); - GameRegistry.registerItem(waste_plate_mox, waste_plate_mox.getUnlocalizedName()); - GameRegistry.registerItem(waste_plate_pu239, waste_plate_pu239.getUnlocalizedName()); - GameRegistry.registerItem(waste_plate_ra226be, waste_plate_ra226be.getUnlocalizedName()); - GameRegistry.registerItem(waste_plate_sa326, waste_plate_sa326.getUnlocalizedName()); - GameRegistry.registerItem(waste_plate_pu238be, waste_plate_pu238be.getUnlocalizedName()); - - //Pile parts - GameRegistry.registerItem(pile_rod_uranium, pile_rod_uranium.getUnlocalizedName()); - GameRegistry.registerItem(pile_rod_pu239, pile_rod_pu239.getUnlocalizedName()); - GameRegistry.registerItem(pile_rod_plutonium, pile_rod_plutonium.getUnlocalizedName()); - GameRegistry.registerItem(pile_rod_source, pile_rod_source.getUnlocalizedName()); - GameRegistry.registerItem(pile_rod_boron, pile_rod_boron.getUnlocalizedName()); - GameRegistry.registerItem(pile_rod_lithium, pile_rod_lithium.getUnlocalizedName()); - GameRegistry.registerItem(pile_rod_detector, pile_rod_detector.getUnlocalizedName()); - - //Plate Fuels - GameRegistry.registerItem(plate_fuel_u233, plate_fuel_u233.getUnlocalizedName()); - GameRegistry.registerItem(plate_fuel_u235, plate_fuel_u235.getUnlocalizedName()); - GameRegistry.registerItem(plate_fuel_mox, plate_fuel_mox.getUnlocalizedName()); - GameRegistry.registerItem(plate_fuel_pu239, plate_fuel_pu239.getUnlocalizedName()); - GameRegistry.registerItem(plate_fuel_sa326, plate_fuel_sa326.getUnlocalizedName()); - GameRegistry.registerItem(plate_fuel_ra226be, plate_fuel_ra226be.getUnlocalizedName()); - GameRegistry.registerItem(plate_fuel_pu238be, plate_fuel_pu238be.getUnlocalizedName()); - - //PWR Parts - GameRegistry.registerItem(pwr_fuel, pwr_fuel.getUnlocalizedName()); - GameRegistry.registerItem(pwr_fuel_hot, pwr_fuel_hot.getUnlocalizedName()); - GameRegistry.registerItem(pwr_fuel_depleted, pwr_fuel_depleted.getUnlocalizedName()); - - //RBMK parts - GameRegistry.registerItem(rbmk_lid, rbmk_lid.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_lid_glass, rbmk_lid_glass.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_empty, rbmk_fuel_empty.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_ueu, rbmk_fuel_ueu.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_meu, rbmk_fuel_meu.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_heu233, rbmk_fuel_heu233.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_heu235, rbmk_fuel_heu235.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_thmeu, rbmk_fuel_thmeu.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_lep, rbmk_fuel_lep.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_mep, rbmk_fuel_mep.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_hep239, rbmk_fuel_hep239.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_hep241, rbmk_fuel_hep241.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_lea, rbmk_fuel_lea.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_mea, rbmk_fuel_mea.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_hea241, rbmk_fuel_hea241.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_hea242, rbmk_fuel_hea242.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_men, rbmk_fuel_men.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_hen, rbmk_fuel_hen.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_mox, rbmk_fuel_mox.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_les, rbmk_fuel_les.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_mes, rbmk_fuel_mes.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_hes, rbmk_fuel_hes.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_leaus, rbmk_fuel_leaus.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_heaus, rbmk_fuel_heaus.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_po210be, rbmk_fuel_po210be.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_ra226be, rbmk_fuel_ra226be.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_pu238be, rbmk_fuel_pu238be.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_balefire_gold, rbmk_fuel_balefire_gold.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_flashlead, rbmk_fuel_flashlead.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_balefire, rbmk_fuel_balefire.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_zfb_bismuth, rbmk_fuel_zfb_bismuth.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_zfb_pu241, rbmk_fuel_zfb_pu241.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_zfb_am_mix, rbmk_fuel_zfb_am_mix.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_drx, rbmk_fuel_drx.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_fuel_test, rbmk_fuel_test.getUnlocalizedName()); - //GameRegistry.registerItem(rbmk_fuel_curve, rbmk_fuel_curve.getUnlocalizedName()); - - GameRegistry.registerItem(rbmk_pellet_ueu, rbmk_pellet_ueu.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_meu, rbmk_pellet_meu.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_heu233, rbmk_pellet_heu233.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_heu235, rbmk_pellet_heu235.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_thmeu, rbmk_pellet_thmeu.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_lep, rbmk_pellet_lep.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_mep, rbmk_pellet_mep.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_hep239, rbmk_pellet_hep239.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_hep241, rbmk_pellet_hep241.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_lea, rbmk_pellet_lea.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_mea, rbmk_pellet_mea.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_hea241, rbmk_pellet_hea241.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_hea242, rbmk_pellet_hea242.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_men, rbmk_pellet_men.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_hen, rbmk_pellet_hen.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_mox, rbmk_pellet_mox.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_les, rbmk_pellet_les.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_mes, rbmk_pellet_mes.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_hes, rbmk_pellet_hes.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_leaus, rbmk_pellet_leaus.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_heaus, rbmk_pellet_heaus.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_po210be, rbmk_pellet_po210be.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_ra226be, rbmk_pellet_ra226be.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_pu238be, rbmk_pellet_pu238be.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_balefire_gold, rbmk_pellet_balefire_gold.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_flashlead, rbmk_pellet_flashlead.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_balefire, rbmk_pellet_balefire.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_zfb_bismuth, rbmk_pellet_zfb_bismuth.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_zfb_pu241, rbmk_pellet_zfb_pu241.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_zfb_am_mix, rbmk_pellet_zfb_am_mix.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_pellet_drx, rbmk_pellet_drx.getUnlocalizedName()); - - GameRegistry.registerItem(watz_pellet, watz_pellet.getUnlocalizedName()); - GameRegistry.registerItem(watz_pellet_depleted, watz_pellet_depleted.getUnlocalizedName()); - - GameRegistry.registerItem(icf_pellet_empty, icf_pellet_empty.getUnlocalizedName()); - GameRegistry.registerItem(icf_pellet, icf_pellet.getUnlocalizedName()); - GameRegistry.registerItem(icf_pellet_depleted, icf_pellet_depleted.getUnlocalizedName()); - - GameRegistry.registerItem(debris_graphite, debris_graphite.getUnlocalizedName()); - GameRegistry.registerItem(debris_metal, debris_metal.getUnlocalizedName()); - GameRegistry.registerItem(debris_fuel, debris_fuel.getUnlocalizedName()); - GameRegistry.registerItem(debris_concrete, debris_concrete.getUnlocalizedName()); - GameRegistry.registerItem(debris_exchanger, debris_exchanger.getUnlocalizedName()); - GameRegistry.registerItem(debris_shrapnel, debris_shrapnel.getUnlocalizedName()); - GameRegistry.registerItem(debris_element, debris_element.getUnlocalizedName()); - GameRegistry.registerItem(undefined, undefined.getUnlocalizedName()); - - GameRegistry.registerItem(scrap_plastic, scrap_plastic.getUnlocalizedName()); - GameRegistry.registerItem(scrap, scrap.getUnlocalizedName()); - GameRegistry.registerItem(scrap_oil, scrap_oil.getUnlocalizedName()); - GameRegistry.registerItem(scrap_nuclear, scrap_nuclear.getUnlocalizedName()); - GameRegistry.registerItem(trinitite, trinitite.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_long, nuclear_waste_long.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_long_tiny, nuclear_waste_long_tiny.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_short, nuclear_waste_short.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_short_tiny, nuclear_waste_short_tiny.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_long_depleted, nuclear_waste_long_depleted.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_long_depleted_tiny, nuclear_waste_long_depleted_tiny.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_short_depleted, nuclear_waste_short_depleted.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_short_depleted_tiny, nuclear_waste_short_depleted_tiny.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste, nuclear_waste.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_tiny, nuclear_waste_tiny.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_vitrified, nuclear_waste_vitrified.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_vitrified_tiny, nuclear_waste_vitrified_tiny.getUnlocalizedName()); - - //Spawners - GameRegistry.registerItem(spawn_chopper, spawn_chopper.getUnlocalizedName()); - GameRegistry.registerItem(spawn_worm, spawn_worm.getUnlocalizedName()); - GameRegistry.registerItem(spawn_ufo, spawn_ufo.getUnlocalizedName()); - GameRegistry.registerItem(spawn_duck, spawn_duck.getUnlocalizedName()); - - //Computer Tools - GameRegistry.registerItem(designator, designator.getUnlocalizedName()); - GameRegistry.registerItem(designator_range, designator_range.getUnlocalizedName()); - GameRegistry.registerItem(designator_manual, designator_manual.getUnlocalizedName()); - GameRegistry.registerItem(designator_arty_range, designator_arty_range.getUnlocalizedName()); - GameRegistry.registerItem(turret_chip, turret_chip.getUnlocalizedName()); - GameRegistry.registerItem(linker, linker.getUnlocalizedName()); - GameRegistry.registerItem(reactor_sensor, reactor_sensor.getUnlocalizedName()); - GameRegistry.registerItem(oil_detector, oil_detector.getUnlocalizedName()); - GameRegistry.registerItem(ore_density_scanner, ore_density_scanner.getUnlocalizedName()); - GameRegistry.registerItem(survey_scanner, survey_scanner.getUnlocalizedName()); - GameRegistry.registerItem(mirror_tool, mirror_tool.getUnlocalizedName()); - GameRegistry.registerItem(rbmk_tool, rbmk_tool.getUnlocalizedName()); - GameRegistry.registerItem(drone_linker, drone_linker.getUnlocalizedName()); - GameRegistry.registerItem(radar_linker, radar_linker.getUnlocalizedName()); - GameRegistry.registerItem(coltan_tool, coltan_tool.getUnlocalizedName()); - GameRegistry.registerItem(power_net_tool, power_net_tool.getUnlocalizedName()); - GameRegistry.registerItem(analysis_tool, analysis_tool.getUnlocalizedName()); - GameRegistry.registerItem(coupling_tool, coupling_tool.getUnlocalizedName()); - GameRegistry.registerItem(settings_tool, settings_tool.getUnlocalizedName()); - GameRegistry.registerItem(dosimeter, dosimeter.getUnlocalizedName()); - GameRegistry.registerItem(geiger_counter, geiger_counter.getUnlocalizedName()); - GameRegistry.registerItem(digamma_diagnostic, digamma_diagnostic.getUnlocalizedName()); - GameRegistry.registerItem(pollution_detector, pollution_detector.getUnlocalizedName()); - GameRegistry.registerItem(containment_box, containment_box.getUnlocalizedName()); - GameRegistry.registerItem(plastic_bag, plastic_bag.getUnlocalizedName()); - - GameRegistry.registerItem(ammo_bag, ammo_bag.getUnlocalizedName()); - GameRegistry.registerItem(ammo_bag_infinite, ammo_bag_infinite.getUnlocalizedName()); - GameRegistry.registerItem(casing_bag, casing_bag.getUnlocalizedName()); - - //Keys and Locks - GameRegistry.registerItem(key, key.getUnlocalizedName()); - GameRegistry.registerItem(key_red, key_red.getUnlocalizedName()); - GameRegistry.registerItem(key_red_cracked, key_red_cracked.getUnlocalizedName()); - GameRegistry.registerItem(key_kit, key_kit.getUnlocalizedName()); - GameRegistry.registerItem(key_fake, key_fake.getUnlocalizedName()); - GameRegistry.registerItem(mech_key, mech_key.getUnlocalizedName()); - GameRegistry.registerItem(pin, pin.getUnlocalizedName()); - GameRegistry.registerItem(padlock_rusty, padlock_rusty.getUnlocalizedName()); - GameRegistry.registerItem(padlock, padlock.getUnlocalizedName()); - GameRegistry.registerItem(padlock_reinforced, padlock_reinforced.getUnlocalizedName()); - GameRegistry.registerItem(padlock_unbreakable, padlock_unbreakable.getUnlocalizedName()); - GameRegistry.registerItem(launch_code_piece, launch_code_piece.getUnlocalizedName()); - GameRegistry.registerItem(launch_code, launch_code.getUnlocalizedName()); - GameRegistry.registerItem(launch_key, launch_key.getUnlocalizedName()); - - //Missiles - //Tier 0 - GameRegistry.registerItem(missile_test, missile_test.getUnlocalizedName()); - GameRegistry.registerItem(missile_taint, missile_taint.getUnlocalizedName()); - GameRegistry.registerItem(missile_micro, missile_micro.getUnlocalizedName()); - GameRegistry.registerItem(missile_bhole, missile_bhole.getUnlocalizedName()); - GameRegistry.registerItem(missile_schrabidium, missile_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(missile_emp, missile_emp.getUnlocalizedName()); - //Tier 1 - GameRegistry.registerItem(missile_generic, missile_generic.getUnlocalizedName()); - GameRegistry.registerItem(missile_decoy, missile_decoy.getUnlocalizedName()); - GameRegistry.registerItem(missile_incendiary, missile_incendiary.getUnlocalizedName()); - GameRegistry.registerItem(missile_cluster, missile_cluster.getUnlocalizedName()); - GameRegistry.registerItem(missile_buster, missile_buster.getUnlocalizedName()); - GameRegistry.registerItem(missile_stealth, missile_stealth.getUnlocalizedName()); - GameRegistry.registerItem(missile_anti_ballistic, missile_anti_ballistic.getUnlocalizedName()); - //Tier 2 - GameRegistry.registerItem(missile_strong, missile_strong.getUnlocalizedName()); - GameRegistry.registerItem(missile_incendiary_strong, missile_incendiary_strong.getUnlocalizedName()); - GameRegistry.registerItem(missile_cluster_strong, missile_cluster_strong.getUnlocalizedName()); - GameRegistry.registerItem(missile_buster_strong, missile_buster_strong.getUnlocalizedName()); - GameRegistry.registerItem(missile_emp_strong, missile_emp_strong.getUnlocalizedName()); - //Tier 3 - GameRegistry.registerItem(missile_burst, missile_burst.getUnlocalizedName()); - GameRegistry.registerItem(missile_inferno, missile_inferno.getUnlocalizedName()); - GameRegistry.registerItem(missile_rain, missile_rain.getUnlocalizedName()); - GameRegistry.registerItem(missile_drill, missile_drill.getUnlocalizedName()); - GameRegistry.registerItem(missile_shuttle, missile_shuttle.getUnlocalizedName()); - //Tier 4 - GameRegistry.registerItem(missile_nuclear, missile_nuclear.getUnlocalizedName()); - GameRegistry.registerItem(missile_nuclear_cluster, missile_nuclear_cluster.getUnlocalizedName()); - GameRegistry.registerItem(missile_volcano, missile_volcano.getUnlocalizedName()); - GameRegistry.registerItem(missile_doomsday, missile_doomsday.getUnlocalizedName()); - GameRegistry.registerItem(missile_doomsday_rusted, missile_doomsday_rusted.getUnlocalizedName()); - //Rockets - GameRegistry.registerItem(missile_soyuz, missile_soyuz.getUnlocalizedName()); - GameRegistry.registerItem(missile_soyuz_lander, missile_soyuz_lander.getUnlocalizedName()); - GameRegistry.registerItem(missile_custom, missile_custom.getUnlocalizedName()); - - //Missile Parts - GameRegistry.registerItem(mp_thruster_10_kerosene, mp_thruster_10_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_10_kerosene_tec, mp_thruster_10_kerosene_tec.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_10_solid, mp_thruster_10_solid.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_10_xenon, mp_thruster_10_xenon.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_kerosene, mp_thruster_15_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_kerosene_tec, mp_thruster_15_kerosene_tec.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_kerosene_dual, mp_thruster_15_kerosene_dual.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_kerosene_triple, mp_thruster_15_kerosene_triple.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_solid, mp_thruster_15_solid.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_solid_hexdecuple, mp_thruster_15_solid_hexdecuple.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_hydrogen, mp_thruster_15_hydrogen.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_hydrogen_dual, mp_thruster_15_hydrogen_dual.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_balefire_short, mp_thruster_15_balefire_short.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_balefire, mp_thruster_15_balefire.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_balefire_large, mp_thruster_15_balefire_large.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_balefire_large_rad, mp_thruster_15_balefire_large_rad.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_20_kerosene, mp_thruster_20_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_20_kerosene_dual, mp_thruster_20_kerosene_dual.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_20_kerosene_triple, mp_thruster_20_kerosene_triple.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_20_solid, mp_thruster_20_solid.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_20_solid_multi, mp_thruster_20_solid_multi.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_20_solid_multier, mp_thruster_20_solid_multier.getUnlocalizedName()); - GameRegistry.registerItem(mp_stability_10_flat, mp_stability_10_flat.getUnlocalizedName()); - GameRegistry.registerItem(mp_stability_10_cruise, mp_stability_10_cruise.getUnlocalizedName()); - GameRegistry.registerItem(mp_stability_10_space, mp_stability_10_space.getUnlocalizedName()); - GameRegistry.registerItem(mp_stability_15_flat, mp_stability_15_flat.getUnlocalizedName()); - GameRegistry.registerItem(mp_stability_15_thin, mp_stability_15_thin.getUnlocalizedName()); - GameRegistry.registerItem(mp_stability_15_soyuz, mp_stability_15_soyuz.getUnlocalizedName()); - GameRegistry.registerItem(mp_stability_20_flat, mp_stability_20_flat.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_kerosene, mp_fuselage_10_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_kerosene_camo, mp_fuselage_10_kerosene_camo.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_kerosene_desert, mp_fuselage_10_kerosene_desert.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_kerosene_sky, mp_fuselage_10_kerosene_sky.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_kerosene_flames, mp_fuselage_10_kerosene_flames.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_kerosene_insulation, mp_fuselage_10_kerosene_insulation.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_kerosene_sleek, mp_fuselage_10_kerosene_sleek.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_kerosene_metal, mp_fuselage_10_kerosene_metal.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_kerosene_taint, mp_fuselage_10_kerosene_taint.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_solid, mp_fuselage_10_solid.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_solid_flames, mp_fuselage_10_solid_flames.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_solid_insulation, mp_fuselage_10_solid_insulation.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_solid_sleek, mp_fuselage_10_solid_sleek.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_solid_soviet_glory, mp_fuselage_10_solid_soviet_glory.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_solid_cathedral, mp_fuselage_10_solid_cathedral.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_solid_moonlit, mp_fuselage_10_solid_moonlit.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_solid_battery, mp_fuselage_10_solid_battery.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_solid_duracell, mp_fuselage_10_solid_duracell.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_xenon, mp_fuselage_10_xenon.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_xenon_bhole, mp_fuselage_10_xenon_bhole.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene, mp_fuselage_10_long_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene_camo, mp_fuselage_10_long_kerosene_camo.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene_desert, mp_fuselage_10_long_kerosene_desert.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene_sky, mp_fuselage_10_long_kerosene_sky.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene_flames, mp_fuselage_10_long_kerosene_flames.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene_insulation, mp_fuselage_10_long_kerosene_insulation.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene_sleek, mp_fuselage_10_long_kerosene_sleek.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene_metal, mp_fuselage_10_long_kerosene_metal.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene_dash, mp_fuselage_10_long_kerosene_dash.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene_taint, mp_fuselage_10_long_kerosene_taint.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_kerosene_vap, mp_fuselage_10_long_kerosene_vap.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_solid, mp_fuselage_10_long_solid.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_solid_flames, mp_fuselage_10_long_solid_flames.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_solid_insulation, mp_fuselage_10_long_solid_insulation.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_solid_sleek, mp_fuselage_10_long_solid_sleek.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_solid_soviet_glory, mp_fuselage_10_long_solid_soviet_glory.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_solid_bullet, mp_fuselage_10_long_solid_bullet.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_long_solid_silvermoonlight, mp_fuselage_10_long_solid_silvermoonlight.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_15_kerosene, mp_fuselage_10_15_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_15_solid, mp_fuselage_10_15_solid.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_15_hydrogen, mp_fuselage_10_15_hydrogen.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_10_15_balefire, mp_fuselage_10_15_balefire.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene, mp_fuselage_15_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_camo, mp_fuselage_15_kerosene_camo.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_desert, mp_fuselage_15_kerosene_desert.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_sky, mp_fuselage_15_kerosene_sky.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_insulation, mp_fuselage_15_kerosene_insulation.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_metal, mp_fuselage_15_kerosene_metal.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_decorated, mp_fuselage_15_kerosene_decorated.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_steampunk, mp_fuselage_15_kerosene_steampunk.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_polite, mp_fuselage_15_kerosene_polite.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_blackjack, mp_fuselage_15_kerosene_blackjack.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_lambda, mp_fuselage_15_kerosene_lambda.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_minuteman, mp_fuselage_15_kerosene_minuteman.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_pip, mp_fuselage_15_kerosene_pip.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_taint, mp_fuselage_15_kerosene_taint.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_kerosene_yuck, mp_fuselage_15_kerosene_yuck.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid, mp_fuselage_15_solid.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid_insulation, mp_fuselage_15_solid_insulation.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid_desh, mp_fuselage_15_solid_desh.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid_soviet_glory, mp_fuselage_15_solid_soviet_glory.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid_soviet_stank, mp_fuselage_15_solid_soviet_stank.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid_faust, mp_fuselage_15_solid_faust.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid_silvermoonlight, mp_fuselage_15_solid_silvermoonlight.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid_snowy, mp_fuselage_15_solid_snowy.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid_panorama, mp_fuselage_15_solid_panorama.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid_roses, mp_fuselage_15_solid_roses.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_solid_mimi, mp_fuselage_15_solid_mimi.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_hydrogen, mp_fuselage_15_hydrogen.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_hydrogen_cathedral, mp_fuselage_15_hydrogen_cathedral.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_balefire, mp_fuselage_15_balefire.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_20_kerosene, mp_fuselage_15_20_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_20_kerosene_magnusson, mp_fuselage_15_20_kerosene_magnusson.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_15_20_solid, mp_fuselage_15_20_solid.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_20_kerosene, mp_fuselage_20_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_10_he, mp_warhead_10_he.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_10_incendiary, mp_warhead_10_incendiary.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_10_buster, mp_warhead_10_buster.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_10_nuclear, mp_warhead_10_nuclear.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_10_nuclear_large, mp_warhead_10_nuclear_large.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_10_taint, mp_warhead_10_taint.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_10_cloud, mp_warhead_10_cloud.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_15_he, mp_warhead_15_he.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_15_incendiary, mp_warhead_15_incendiary.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_15_nuclear, mp_warhead_15_nuclear.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_15_nuclear_shark, mp_warhead_15_nuclear_shark.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_15_nuclear_mimi, mp_warhead_15_nuclear_mimi.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_15_boxcar, mp_warhead_15_boxcar.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_15_n2, mp_warhead_15_n2.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_15_balefire, mp_warhead_15_balefire.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_15_turbine, mp_warhead_15_turbine.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_20_he, mp_warhead_20_he.getUnlocalizedName()); - GameRegistry.registerItem(mp_chip_1, mp_chip_1.getUnlocalizedName()); - GameRegistry.registerItem(mp_chip_2, mp_chip_2.getUnlocalizedName()); - GameRegistry.registerItem(mp_chip_3, mp_chip_3.getUnlocalizedName()); - GameRegistry.registerItem(mp_chip_4, mp_chip_4.getUnlocalizedName()); - GameRegistry.registerItem(mp_chip_5, mp_chip_5.getUnlocalizedName()); - - //Satellites - GameRegistry.registerItem(sat_mapper, sat_mapper.getUnlocalizedName()); - GameRegistry.registerItem(sat_scanner, sat_scanner.getUnlocalizedName()); - GameRegistry.registerItem(sat_radar, sat_radar.getUnlocalizedName()); - GameRegistry.registerItem(sat_laser, sat_laser.getUnlocalizedName()); - GameRegistry.registerItem(sat_foeq, sat_foeq.getUnlocalizedName()); - GameRegistry.registerItem(sat_resonator, sat_resonator.getUnlocalizedName()); - GameRegistry.registerItem(sat_miner, sat_miner.getUnlocalizedName()); - GameRegistry.registerItem(sat_lunar_miner, sat_lunar_miner.getUnlocalizedName()); - GameRegistry.registerItem(sat_gerald, sat_gerald.getUnlocalizedName()); - GameRegistry.registerItem(sat_chip, sat_chip.getUnlocalizedName()); - GameRegistry.registerItem(sat_interface, sat_interface.getUnlocalizedName()); - GameRegistry.registerItem(sat_coord, sat_coord.getUnlocalizedName()); - GameRegistry.registerItem(sat_designator, sat_designator.getUnlocalizedName()); - GameRegistry.registerItem(sat_relay, sat_relay.getUnlocalizedName()); - - //Guns - GameRegistry.registerItem(gun_b92, gun_b92.getUnlocalizedName()); - GameRegistry.registerItem(gun_fireext, gun_fireext.getUnlocalizedName()); - GameRegistry.registerItem(crucible, crucible.getUnlocalizedName()); - - GameRegistry.registerItem(gun_debug, gun_debug.getUnlocalizedName()); - GameRegistry.registerItem(ammo_debug, ammo_debug.getUnlocalizedName()); - - GameRegistry.registerItem(gun_pepperbox, gun_pepperbox.getUnlocalizedName()); - GameRegistry.registerItem(gun_light_revolver, gun_light_revolver.getUnlocalizedName()); - GameRegistry.registerItem(gun_light_revolver_atlas, gun_light_revolver_atlas.getUnlocalizedName()); - GameRegistry.registerItem(gun_light_revolver_dani, gun_light_revolver_dani.getUnlocalizedName()); - GameRegistry.registerItem(gun_henry, gun_henry.getUnlocalizedName()); - GameRegistry.registerItem(gun_henry_lincoln, gun_henry_lincoln.getUnlocalizedName()); - GameRegistry.registerItem(gun_greasegun, gun_greasegun.getUnlocalizedName()); - GameRegistry.registerItem(gun_maresleg, gun_maresleg.getUnlocalizedName()); - GameRegistry.registerItem(gun_maresleg_akimbo, gun_maresleg_akimbo.getUnlocalizedName()); - GameRegistry.registerItem(gun_maresleg_broken, gun_maresleg_broken.getUnlocalizedName()); - GameRegistry.registerItem(gun_flaregun, gun_flaregun.getUnlocalizedName()); - GameRegistry.registerItem(gun_heavy_revolver, gun_heavy_revolver.getUnlocalizedName()); - GameRegistry.registerItem(gun_heavy_revolver_lilmac, gun_heavy_revolver_lilmac.getUnlocalizedName()); - GameRegistry.registerItem(gun_heavy_revolver_protege, gun_heavy_revolver_protege.getUnlocalizedName()); - GameRegistry.registerItem(gun_carbine, gun_carbine.getUnlocalizedName()); - GameRegistry.registerItem(gun_am180, gun_am180.getUnlocalizedName()); - GameRegistry.registerItem(gun_liberator, gun_liberator.getUnlocalizedName()); - GameRegistry.registerItem(gun_congolake, gun_congolake.getUnlocalizedName()); - GameRegistry.registerItem(gun_flamer, gun_flamer.getUnlocalizedName()); - GameRegistry.registerItem(gun_flamer_topaz, gun_flamer_topaz.getUnlocalizedName()); - GameRegistry.registerItem(gun_flamer_daybreaker, gun_flamer_daybreaker.getUnlocalizedName()); - GameRegistry.registerItem(gun_uzi, gun_uzi.getUnlocalizedName()); - GameRegistry.registerItem(gun_uzi_akimbo, gun_uzi_akimbo.getUnlocalizedName()); - GameRegistry.registerItem(gun_spas12, gun_spas12.getUnlocalizedName()); - GameRegistry.registerItem(gun_panzerschreck, gun_panzerschreck.getUnlocalizedName()); - GameRegistry.registerItem(gun_g3, gun_g3.getUnlocalizedName()); - GameRegistry.registerItem(gun_g3_zebra, gun_g3_zebra.getUnlocalizedName()); - GameRegistry.registerItem(gun_stinger, gun_stinger.getUnlocalizedName()); - GameRegistry.registerItem(gun_chemthrower, gun_chemthrower.getUnlocalizedName()); - GameRegistry.registerItem(gun_m2, gun_m2.getUnlocalizedName()); - GameRegistry.registerItem(gun_autoshotgun, gun_autoshotgun.getUnlocalizedName()); - GameRegistry.registerItem(gun_autoshotgun_shredder, gun_autoshotgun_shredder.getUnlocalizedName()); - GameRegistry.registerItem(gun_autoshotgun_sexy, gun_autoshotgun_sexy.getUnlocalizedName()); - GameRegistry.registerItem(gun_quadro, gun_quadro.getUnlocalizedName()); - GameRegistry.registerItem(gun_lag, gun_lag.getUnlocalizedName()); - GameRegistry.registerItem(gun_minigun, gun_minigun.getUnlocalizedName()); - GameRegistry.registerItem(gun_minigun_dual, gun_minigun_dual.getUnlocalizedName()); - GameRegistry.registerItem(gun_minigun_lacunae, gun_minigun_lacunae.getUnlocalizedName()); - GameRegistry.registerItem(gun_missile_launcher, gun_missile_launcher.getUnlocalizedName()); - GameRegistry.registerItem(gun_tesla_cannon, gun_tesla_cannon.getUnlocalizedName()); - GameRegistry.registerItem(gun_laser_pistol, gun_laser_pistol.getUnlocalizedName()); - GameRegistry.registerItem(gun_laser_pistol_pew_pew, gun_laser_pistol_pew_pew.getUnlocalizedName()); - GameRegistry.registerItem(gun_laser_pistol_morning_glory, gun_laser_pistol_morning_glory.getUnlocalizedName()); - GameRegistry.registerItem(gun_stg77, gun_stg77.getUnlocalizedName()); - GameRegistry.registerItem(gun_tau, gun_tau.getUnlocalizedName()); - GameRegistry.registerItem(gun_fatman, gun_fatman.getUnlocalizedName()); - GameRegistry.registerItem(gun_lasrifle, gun_lasrifle.getUnlocalizedName()); - GameRegistry.registerItem(gun_coilgun, gun_coilgun.getUnlocalizedName()); - GameRegistry.registerItem(gun_hangman, gun_hangman.getUnlocalizedName()); - GameRegistry.registerItem(gun_mas36, gun_mas36.getUnlocalizedName()); - GameRegistry.registerItem(gun_bolter, gun_bolter.getUnlocalizedName()); - GameRegistry.registerItem(gun_folly, gun_folly.getUnlocalizedName()); - GameRegistry.registerItem(gun_aberrator, gun_aberrator.getUnlocalizedName()); - GameRegistry.registerItem(gun_aberrator_eott, gun_aberrator_eott.getUnlocalizedName()); - GameRegistry.registerItem(gun_double_barrel, gun_double_barrel.getUnlocalizedName()); - GameRegistry.registerItem(gun_double_barrel_sacred_dragon, gun_double_barrel_sacred_dragon.getUnlocalizedName()); - - GameRegistry.registerItem(gun_charge_thrower, gun_charge_thrower.getUnlocalizedName()); - - GameRegistry.registerItem(ammo_standard, ammo_standard.getUnlocalizedName()); - GameRegistry.registerItem(ammo_secret, ammo_secret.getUnlocalizedName()); - - GameRegistry.registerItem(weapon_mod_test, weapon_mod_test.getUnlocalizedName()); - GameRegistry.registerItem(weapon_mod_generic, weapon_mod_generic.getUnlocalizedName()); - GameRegistry.registerItem(weapon_mod_special, weapon_mod_special.getUnlocalizedName()); - GameRegistry.registerItem(weapon_mod_caliber, weapon_mod_caliber.getUnlocalizedName()); - - //Ammo - GameRegistry.registerItem(gun_b92_ammo, gun_b92_ammo.getUnlocalizedName()); - - GameRegistry.registerItem(ammo_fireext, ammo_fireext.getUnlocalizedName()); - GameRegistry.registerItem(ammo_shell, ammo_shell.getUnlocalizedName()); - GameRegistry.registerItem(ammo_dgk, ammo_dgk.getUnlocalizedName()); - GameRegistry.registerItem(ammo_arty, ammo_arty.getUnlocalizedName()); - GameRegistry.registerItem(ammo_himars, ammo_himars.getUnlocalizedName()); - - GameRegistry.registerItem(ammo_container, ammo_container.getUnlocalizedName()); - - //Grenades - GameRegistry.registerItem(stick_dynamite, stick_dynamite.getUnlocalizedName()); //heave-ho! - GameRegistry.registerItem(stick_dynamite_fishing, stick_dynamite_fishing.getUnlocalizedName()); - GameRegistry.registerItem(stick_tnt, stick_tnt.getUnlocalizedName()); - GameRegistry.registerItem(stick_semtex, stick_semtex.getUnlocalizedName()); - GameRegistry.registerItem(stick_c4, stick_c4.getUnlocalizedName()); - GameRegistry.registerItem(grenade_generic, grenade_generic.getUnlocalizedName()); - GameRegistry.registerItem(grenade_strong, grenade_strong.getUnlocalizedName()); - GameRegistry.registerItem(grenade_frag, grenade_frag.getUnlocalizedName()); - GameRegistry.registerItem(grenade_fire, grenade_fire.getUnlocalizedName()); - GameRegistry.registerItem(grenade_shrapnel, grenade_shrapnel.getUnlocalizedName()); - GameRegistry.registerItem(grenade_cluster, grenade_cluster.getUnlocalizedName()); - GameRegistry.registerItem(grenade_flare, grenade_flare.getUnlocalizedName()); - GameRegistry.registerItem(grenade_electric, grenade_electric.getUnlocalizedName()); - GameRegistry.registerItem(grenade_poison, grenade_poison.getUnlocalizedName()); - GameRegistry.registerItem(grenade_gas, grenade_gas.getUnlocalizedName()); - GameRegistry.registerItem(grenade_cloud, grenade_cloud.getUnlocalizedName()); - GameRegistry.registerItem(grenade_pink_cloud, grenade_pink_cloud.getUnlocalizedName()); - GameRegistry.registerItem(grenade_smart, grenade_smart.getUnlocalizedName()); - GameRegistry.registerItem(grenade_mirv, grenade_mirv.getUnlocalizedName()); - GameRegistry.registerItem(grenade_breach, grenade_breach.getUnlocalizedName()); - GameRegistry.registerItem(grenade_burst, grenade_burst.getUnlocalizedName()); - GameRegistry.registerItem(grenade_pulse, grenade_pulse.getUnlocalizedName()); - GameRegistry.registerItem(grenade_plasma, grenade_plasma.getUnlocalizedName()); - GameRegistry.registerItem(grenade_tau, grenade_tau.getUnlocalizedName()); - GameRegistry.registerItem(grenade_schrabidium, grenade_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(grenade_nuke, grenade_nuke.getUnlocalizedName()); - GameRegistry.registerItem(grenade_lemon, grenade_lemon.getUnlocalizedName()); - GameRegistry.registerItem(grenade_gascan, grenade_gascan.getUnlocalizedName()); - GameRegistry.registerItem(grenade_kyiv, grenade_kyiv.getUnlocalizedName()); - GameRegistry.registerItem(grenade_mk2, grenade_mk2.getUnlocalizedName()); - GameRegistry.registerItem(grenade_aschrab, grenade_aschrab.getUnlocalizedName()); - GameRegistry.registerItem(grenade_nuclear, grenade_nuclear.getUnlocalizedName()); - GameRegistry.registerItem(grenade_zomg, grenade_zomg.getUnlocalizedName()); - GameRegistry.registerItem(grenade_black_hole, grenade_black_hole.getUnlocalizedName()); - - GameRegistry.registerItem(grenade_if_generic, grenade_if_generic.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_he, grenade_if_he.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_bouncy, grenade_if_bouncy.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_sticky, grenade_if_sticky.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_impact, grenade_if_impact.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_incendiary, grenade_if_incendiary.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_toxic, grenade_if_toxic.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_concussion, grenade_if_concussion.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_brimstone, grenade_if_brimstone.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_mystery, grenade_if_mystery.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_spark, grenade_if_spark.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_hopwire, grenade_if_hopwire.getUnlocalizedName()); - GameRegistry.registerItem(grenade_if_null, grenade_if_null.getUnlocalizedName()); - GameRegistry.registerItem(nuclear_waste_pearl, nuclear_waste_pearl.getUnlocalizedName()); - - //Disperser Canister - GameRegistry.registerItem(disperser_canister_empty, disperser_canister_empty.getUnlocalizedName()); - GameRegistry.registerItem(disperser_canister, disperser_canister.getUnlocalizedName()); - GameRegistry.registerItem(glyphid_gland_empty, glyphid_gland_empty.getUnlocalizedName()); - GameRegistry.registerItem(glyphid_gland, glyphid_gland.getUnlocalizedName()); - - GameRegistry.registerItem(ullapool_caber, ullapool_caber.getUnlocalizedName()); - GameRegistry.registerItem(weaponized_starblaster_cell, weaponized_starblaster_cell.getUnlocalizedName()); - - //Capes - GameRegistry.registerItem(cape_radiation, cape_radiation.getUnlocalizedName()); - GameRegistry.registerItem(cape_gasmask, cape_gasmask.getUnlocalizedName()); - GameRegistry.registerItem(cape_schrabidium, cape_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(cape_hidden, cape_hidden.getUnlocalizedName()); - - //Tools - GameRegistry.registerItem(dwarven_pickaxe, dwarven_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(schrabidium_sword, schrabidium_sword.getUnlocalizedName()); - GameRegistry.registerItem(schrabidium_hammer, schrabidium_hammer.getUnlocalizedName()); - GameRegistry.registerItem(shimmer_sledge, shimmer_sledge.getUnlocalizedName()); - GameRegistry.registerItem(shimmer_axe, shimmer_axe.getUnlocalizedName()); - GameRegistry.registerItem(wood_gavel, wood_gavel.getUnlocalizedName()); - GameRegistry.registerItem(lead_gavel, lead_gavel.getUnlocalizedName()); - GameRegistry.registerItem(diamond_gavel, diamond_gavel.getUnlocalizedName()); - GameRegistry.registerItem(mese_gavel, mese_gavel.getUnlocalizedName()); - GameRegistry.registerItem(schrabidium_pickaxe, schrabidium_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(schrabidium_axe, schrabidium_axe.getUnlocalizedName()); - GameRegistry.registerItem(schrabidium_shovel, schrabidium_shovel.getUnlocalizedName()); - GameRegistry.registerItem(schrabidium_hoe, schrabidium_hoe.getUnlocalizedName()); - GameRegistry.registerItem(steel_sword, steel_sword.getUnlocalizedName()); - GameRegistry.registerItem(steel_pickaxe, steel_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(steel_axe, steel_axe.getUnlocalizedName()); - GameRegistry.registerItem(steel_shovel, steel_shovel.getUnlocalizedName()); - GameRegistry.registerItem(steel_hoe, steel_hoe.getUnlocalizedName()); - GameRegistry.registerItem(titanium_sword, titanium_sword.getUnlocalizedName()); - GameRegistry.registerItem(titanium_pickaxe, titanium_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(titanium_axe, titanium_axe.getUnlocalizedName()); - GameRegistry.registerItem(titanium_shovel, titanium_shovel.getUnlocalizedName()); - GameRegistry.registerItem(titanium_hoe, titanium_hoe.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_sword, cobalt_sword.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_pickaxe, cobalt_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_axe, cobalt_axe.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_shovel, cobalt_shovel.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_hoe, cobalt_hoe.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_decorated_sword, cobalt_decorated_sword.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_decorated_pickaxe, cobalt_decorated_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_decorated_axe, cobalt_decorated_axe.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_decorated_shovel, cobalt_decorated_shovel.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_decorated_hoe, cobalt_decorated_hoe.getUnlocalizedName()); - GameRegistry.registerItem(starmetal_sword, starmetal_sword.getUnlocalizedName()); - GameRegistry.registerItem(starmetal_pickaxe, starmetal_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(starmetal_axe, starmetal_axe.getUnlocalizedName()); - GameRegistry.registerItem(starmetal_shovel, starmetal_shovel.getUnlocalizedName()); - GameRegistry.registerItem(starmetal_hoe, starmetal_hoe.getUnlocalizedName()); - GameRegistry.registerItem(alloy_sword, alloy_sword.getUnlocalizedName()); - GameRegistry.registerItem(alloy_pickaxe, alloy_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(alloy_axe, alloy_axe.getUnlocalizedName()); - GameRegistry.registerItem(alloy_shovel, alloy_shovel.getUnlocalizedName()); - GameRegistry.registerItem(alloy_hoe, alloy_hoe.getUnlocalizedName()); - GameRegistry.registerItem(cmb_sword, cmb_sword.getUnlocalizedName()); - GameRegistry.registerItem(cmb_pickaxe, cmb_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(cmb_axe, cmb_axe.getUnlocalizedName()); - GameRegistry.registerItem(cmb_shovel, cmb_shovel.getUnlocalizedName()); - GameRegistry.registerItem(cmb_hoe, cmb_hoe.getUnlocalizedName()); - GameRegistry.registerItem(desh_sword, desh_sword.getUnlocalizedName()); - GameRegistry.registerItem(desh_pickaxe, desh_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(desh_axe, desh_axe.getUnlocalizedName()); - GameRegistry.registerItem(desh_shovel, desh_shovel.getUnlocalizedName()); - GameRegistry.registerItem(desh_hoe, desh_hoe.getUnlocalizedName()); - GameRegistry.registerItem(elec_sword, elec_sword.getUnlocalizedName()); - GameRegistry.registerItem(elec_pickaxe, elec_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(elec_axe, elec_axe.getUnlocalizedName()); - GameRegistry.registerItem(elec_shovel, elec_shovel.getUnlocalizedName()); - GameRegistry.registerItem(dnt_sword, dnt_sword.getUnlocalizedName()); - GameRegistry.registerItem(smashing_hammer, smashing_hammer.getUnlocalizedName()); - GameRegistry.registerItem(centri_stick, centri_stick.getUnlocalizedName()); - GameRegistry.registerItem(drax, drax.getUnlocalizedName()); - GameRegistry.registerItem(drax_mk2, drax_mk2.getUnlocalizedName()); - GameRegistry.registerItem(drax_mk3, drax_mk3.getUnlocalizedName()); - GameRegistry.registerItem(bismuth_pickaxe, bismuth_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(bismuth_axe, bismuth_axe.getUnlocalizedName()); - GameRegistry.registerItem(volcanic_pickaxe, volcanic_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(volcanic_axe, volcanic_axe.getUnlocalizedName()); - GameRegistry.registerItem(chlorophyte_pickaxe, chlorophyte_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(chlorophyte_axe, chlorophyte_axe.getUnlocalizedName()); - GameRegistry.registerItem(mese_pickaxe, mese_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(mese_axe, mese_axe.getUnlocalizedName()); GameRegistry.registerItem(matchstick, matchstick.getUnlocalizedName()); - GameRegistry.registerItem(balefire_and_steel, balefire_and_steel.getUnlocalizedName()); - GameRegistry.registerItem(crowbar, crowbar.getUnlocalizedName()); - GameRegistry.registerItem(wrench, wrench.getUnlocalizedName()); - GameRegistry.registerItem(wrench_archineer, wrench_archineer.getUnlocalizedName()); - GameRegistry.registerItem(wrench_flipped, wrench_flipped.getUnlocalizedName()); - GameRegistry.registerItem(memespoon, memespoon.getUnlocalizedName()); - GameRegistry.registerItem(saw, saw.getUnlocalizedName()); - GameRegistry.registerItem(bat, bat.getUnlocalizedName()); - GameRegistry.registerItem(bat_nail, bat_nail.getUnlocalizedName()); - GameRegistry.registerItem(golf_club, golf_club.getUnlocalizedName()); - GameRegistry.registerItem(pipe_rusty, pipe_rusty.getUnlocalizedName()); - GameRegistry.registerItem(pipe_lead, pipe_lead.getUnlocalizedName()); - GameRegistry.registerItem(reer_graar, reer_graar.getUnlocalizedName()); - GameRegistry.registerItem(stopsign, stopsign.getUnlocalizedName()); - GameRegistry.registerItem(sopsign, sopsign.getUnlocalizedName()); - GameRegistry.registerItem(chernobylsign, chernobylsign.getUnlocalizedName()); - - GameRegistry.registerItem(meteorite_sword, meteorite_sword.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_seared, meteorite_sword_seared.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_reforged, meteorite_sword_reforged.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_hardened, meteorite_sword_hardened.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_alloyed, meteorite_sword_alloyed.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_machined, meteorite_sword_machined.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_treated, meteorite_sword_treated.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_etched, meteorite_sword_etched.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_bred, meteorite_sword_bred.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_irradiated, meteorite_sword_irradiated.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_fused, meteorite_sword_fused.getUnlocalizedName()); - GameRegistry.registerItem(meteorite_sword_baleful, meteorite_sword_baleful.getUnlocalizedName()); - - //Multitool - GameRegistry.registerItem(multitool_hit, multitool_hit.getUnlocalizedName()); - GameRegistry.registerItem(multitool_dig, multitool_dig.getUnlocalizedName()); - GameRegistry.registerItem(multitool_silk, multitool_silk.getUnlocalizedName()); - GameRegistry.registerItem(multitool_ext, multitool_ext.getUnlocalizedName()); - GameRegistry.registerItem(multitool_miner, multitool_miner.getUnlocalizedName()); - GameRegistry.registerItem(multitool_beam, multitool_beam.getUnlocalizedName()); - GameRegistry.registerItem(multitool_sky, multitool_sky.getUnlocalizedName()); - GameRegistry.registerItem(multitool_mega, multitool_mega.getUnlocalizedName()); - GameRegistry.registerItem(multitool_joule, multitool_joule.getUnlocalizedName()); - GameRegistry.registerItem(multitool_decon, multitool_decon.getUnlocalizedName()); - - //Syringes & Pills - GameRegistry.registerItem(syringe_empty, syringe_empty.getUnlocalizedName()); - GameRegistry.registerItem(syringe_antidote, syringe_antidote.getUnlocalizedName()); - GameRegistry.registerItem(syringe_poison, syringe_poison.getUnlocalizedName()); - GameRegistry.registerItem(syringe_awesome, syringe_awesome.getUnlocalizedName()); - GameRegistry.registerItem(syringe_metal_empty, syringe_metal_empty.getUnlocalizedName()); - GameRegistry.registerItem(syringe_metal_stimpak, syringe_metal_stimpak.getUnlocalizedName()); - GameRegistry.registerItem(syringe_metal_medx, syringe_metal_medx.getUnlocalizedName()); - GameRegistry.registerItem(syringe_metal_psycho, syringe_metal_psycho.getUnlocalizedName()); - GameRegistry.registerItem(syringe_metal_super, syringe_metal_super.getUnlocalizedName()); - GameRegistry.registerItem(syringe_taint, syringe_taint.getUnlocalizedName()); - GameRegistry.registerItem(syringe_mkunicorn, syringe_mkunicorn.getUnlocalizedName()); - GameRegistry.registerItem(med_bag, med_bag.getUnlocalizedName()); - GameRegistry.registerItem(iv_empty, iv_empty.getUnlocalizedName()); - GameRegistry.registerItem(iv_blood, iv_blood.getUnlocalizedName()); - GameRegistry.registerItem(iv_xp_empty, iv_xp_empty.getUnlocalizedName()); - GameRegistry.registerItem(iv_xp, iv_xp.getUnlocalizedName()); - GameRegistry.registerItem(radaway, radaway.getUnlocalizedName()); - GameRegistry.registerItem(radaway_strong, radaway_strong.getUnlocalizedName()); - GameRegistry.registerItem(radaway_flush, radaway_flush.getUnlocalizedName()); - GameRegistry.registerItem(radx, radx.getUnlocalizedName()); - GameRegistry.registerItem(siox, siox.getUnlocalizedName()); - GameRegistry.registerItem(pill_herbal, pill_herbal.getUnlocalizedName()); - GameRegistry.registerItem(pill_iodine, pill_iodine.getUnlocalizedName()); - GameRegistry.registerItem(xanax, xanax.getUnlocalizedName()); - GameRegistry.registerItem(fmn, fmn.getUnlocalizedName()); - GameRegistry.registerItem(five_htp, five_htp.getUnlocalizedName()); - GameRegistry.registerItem(plan_c, plan_c.getUnlocalizedName()); - GameRegistry.registerItem(pill_red, pill_red.getUnlocalizedName()); - GameRegistry.registerItem(stealth_boy, stealth_boy.getUnlocalizedName()); - GameRegistry.registerItem(gas_mask_filter, gas_mask_filter.getUnlocalizedName()); - GameRegistry.registerItem(gas_mask_filter_mono, gas_mask_filter_mono.getUnlocalizedName()); - GameRegistry.registerItem(gas_mask_filter_combo, gas_mask_filter_combo.getUnlocalizedName()); - GameRegistry.registerItem(gas_mask_filter_rag, gas_mask_filter_rag.getUnlocalizedName()); - GameRegistry.registerItem(gas_mask_filter_piss, gas_mask_filter_piss.getUnlocalizedName()); - GameRegistry.registerItem(jetpack_tank, jetpack_tank.getUnlocalizedName()); - GameRegistry.registerItem(gun_kit_1, gun_kit_1.getUnlocalizedName()); - GameRegistry.registerItem(gun_kit_2, gun_kit_2.getUnlocalizedName()); - - //Food - GameRegistry.registerItem(bomb_waffle, bomb_waffle.getUnlocalizedName()); - GameRegistry.registerItem(schnitzel_vegan, schnitzel_vegan.getUnlocalizedName()); - GameRegistry.registerItem(cotton_candy, cotton_candy.getUnlocalizedName()); - GameRegistry.registerItem(apple_lead, apple_lead.getUnlocalizedName()); - GameRegistry.registerItem(apple_schrabidium, apple_schrabidium.getUnlocalizedName()); - GameRegistry.registerItem(tem_flakes, tem_flakes.getUnlocalizedName()); - GameRegistry.registerItem(glowing_stew, glowing_stew.getUnlocalizedName()); - GameRegistry.registerItem(balefire_scrambled, balefire_scrambled.getUnlocalizedName()); - GameRegistry.registerItem(balefire_and_ham, balefire_and_ham.getUnlocalizedName()); - GameRegistry.registerItem(lemon, lemon.getUnlocalizedName()); - GameRegistry.registerItem(definitelyfood, definitelyfood.getUnlocalizedName()); - GameRegistry.registerItem(loops, loops.getUnlocalizedName()); - GameRegistry.registerItem(loop_stew, loop_stew.getUnlocalizedName()); - GameRegistry.registerItem(spongebob_macaroni, spongebob_macaroni.getUnlocalizedName()); - GameRegistry.registerItem(fooditem, fooditem.getUnlocalizedName()); - GameRegistry.registerItem(twinkie, twinkie.getUnlocalizedName()); - GameRegistry.registerItem(static_sandwich, static_sandwich.getUnlocalizedName()); - GameRegistry.registerItem(pudding, pudding.getUnlocalizedName()); - GameRegistry.registerItem(pancake, pancake.getUnlocalizedName()); - GameRegistry.registerItem(nugget, nugget.getUnlocalizedName()); - GameRegistry.registerItem(peas, peas.getUnlocalizedName()); - GameRegistry.registerItem(marshmallow, marshmallow.getUnlocalizedName()); - GameRegistry.registerItem(cheese, cheese.getUnlocalizedName()); - GameRegistry.registerItem(quesadilla, quesadilla.getUnlocalizedName()); - GameRegistry.registerItem(glyphid_meat, glyphid_meat.getUnlocalizedName()); - GameRegistry.registerItem(glyphid_meat_grilled, glyphid_meat_grilled.getUnlocalizedName()); - GameRegistry.registerItem(egg_glyphid, egg_glyphid.getUnlocalizedName()); - GameRegistry.registerItem(med_ipecac, med_ipecac.getUnlocalizedName()); - GameRegistry.registerItem(med_ptsd, med_ptsd.getUnlocalizedName()); - GameRegistry.registerItem(canteen_vodka, canteen_vodka.getUnlocalizedName()); - GameRegistry.registerItem(canteen_fab, canteen_fab.getUnlocalizedName()); - GameRegistry.registerItem(mucho_mango, mucho_mango.getUnlocalizedName()); - GameRegistry.registerItem(chocolate, chocolate.getUnlocalizedName()); - - //Energy Drinks - GameRegistry.registerItem(can_empty, can_empty.getUnlocalizedName()); - GameRegistry.registerItem(can_smart, can_smart.getUnlocalizedName()); - GameRegistry.registerItem(can_creature, can_creature.getUnlocalizedName()); - GameRegistry.registerItem(can_redbomb, can_redbomb.getUnlocalizedName()); - GameRegistry.registerItem(can_mrsugar, can_mrsugar.getUnlocalizedName()); - GameRegistry.registerItem(can_overcharge, can_overcharge.getUnlocalizedName()); - GameRegistry.registerItem(can_luna, can_luna.getUnlocalizedName()); - GameRegistry.registerItem(can_bepis, can_bepis.getUnlocalizedName()); - GameRegistry.registerItem(can_breen, can_breen.getUnlocalizedName()); - GameRegistry.registerItem(can_mug, can_mug.getUnlocalizedName()); - - //Coffee - GameRegistry.registerItem(coffee, coffee.getUnlocalizedName()); - GameRegistry.registerItem(coffee_radium, coffee_radium.getUnlocalizedName()); - - //Cola - GameRegistry.registerItem(bottle_empty, bottle_empty.getUnlocalizedName()); - GameRegistry.registerItem(bottle_nuka, bottle_nuka.getUnlocalizedName()); - GameRegistry.registerItem(bottle_cherry, bottle_cherry.getUnlocalizedName()); - GameRegistry.registerItem(bottle_quantum, bottle_quantum.getUnlocalizedName()); - GameRegistry.registerItem(bottle_sparkle, bottle_sparkle.getUnlocalizedName()); - GameRegistry.registerItem(bottle_rad, bottle_rad.getUnlocalizedName()); - GameRegistry.registerItem(bottle2_empty, bottle2_empty.getUnlocalizedName()); - GameRegistry.registerItem(bottle2_korl, bottle2_korl.getUnlocalizedName()); - GameRegistry.registerItem(bottle2_fritz, bottle2_fritz.getUnlocalizedName()); - GameRegistry.registerItem(bottle2_korl_special, bottle2_korl_special.getUnlocalizedName()); - GameRegistry.registerItem(bottle2_fritz_special, bottle2_fritz_special.getUnlocalizedName()); - GameRegistry.registerItem(bottle_opener, bottle_opener.getUnlocalizedName()); - - //Flasks - GameRegistry.registerItem(flask_infusion, flask_infusion.getUnlocalizedName()); - - //Canned Food - GameRegistry.registerItem(canned_conserve, canned_conserve.getUnlocalizedName()); - - //Money - GameRegistry.registerItem(cap_nuka, cap_nuka.getUnlocalizedName()); - GameRegistry.registerItem(cap_quantum, cap_quantum.getUnlocalizedName()); - GameRegistry.registerItem(cap_sparkle, cap_sparkle.getUnlocalizedName()); - GameRegistry.registerItem(cap_rad, cap_rad.getUnlocalizedName()); - GameRegistry.registerItem(cap_korl, cap_korl.getUnlocalizedName()); - GameRegistry.registerItem(cap_fritz, cap_fritz.getUnlocalizedName()); - GameRegistry.registerItem(ring_pull, ring_pull.getUnlocalizedName()); - GameRegistry.registerItem(can_key, can_key.getUnlocalizedName()); - GameRegistry.registerItem(coin_creeper, coin_creeper.getUnlocalizedName()); - GameRegistry.registerItem(coin_radiation,coin_radiation.getUnlocalizedName()); - GameRegistry.registerItem(coin_maskman, coin_maskman.getUnlocalizedName()); - GameRegistry.registerItem(coin_worm, coin_worm.getUnlocalizedName()); - GameRegistry.registerItem(coin_ufo, coin_ufo.getUnlocalizedName()); - GameRegistry.registerItem(medal_liquidator, medal_liquidator.getUnlocalizedName()); - GameRegistry.registerItem(bottled_cloud, bottled_cloud.getUnlocalizedName()); - GameRegistry.registerItem(protection_charm, protection_charm.getUnlocalizedName()); - GameRegistry.registerItem(meteor_charm, meteor_charm.getUnlocalizedName()); - GameRegistry.registerItem(neutrino_lens, neutrino_lens.getUnlocalizedName()); - GameRegistry.registerItem(gas_tester, gas_tester.getUnlocalizedName()); - GameRegistry.registerItem(defuser_gold, defuser_gold.getUnlocalizedName()); - GameRegistry.registerItem(ballistic_gauntlet, ballistic_gauntlet.getUnlocalizedName()); - GameRegistry.registerItem(night_vision, night_vision.getUnlocalizedName()); - GameRegistry.registerItem(card_aos, card_aos.getUnlocalizedName()); - GameRegistry.registerItem(card_qos, card_qos.getUnlocalizedName()); - GameRegistry.registerItem(australium_iii, australium_iii.getUnlocalizedName()); - GameRegistry.registerItem(armor_battery, armor_battery.getUnlocalizedName()); - GameRegistry.registerItem(armor_battery_mk2, armor_battery_mk2.getUnlocalizedName()); - GameRegistry.registerItem(armor_battery_mk3, armor_battery_mk3.getUnlocalizedName()); - - //Chaos - GameRegistry.registerItem(chocolate_milk, chocolate_milk.getUnlocalizedName()); - GameRegistry.registerItem(cbt_device, cbt_device.getUnlocalizedName()); - GameRegistry.registerItem(cigarette, cigarette.getUnlocalizedName()); - GameRegistry.registerItem(crackpipe, crackpipe.getUnlocalizedName()); - GameRegistry.registerItem(bdcl, bdcl.getUnlocalizedName()); - - //Armor mods - GameRegistry.registerItem(attachment_mask, attachment_mask.getUnlocalizedName()); - GameRegistry.registerItem(attachment_mask_mono, attachment_mask_mono.getUnlocalizedName()); - GameRegistry.registerItem(back_tesla, back_tesla.getUnlocalizedName()); - GameRegistry.registerItem(servo_set, servo_set.getUnlocalizedName()); - GameRegistry.registerItem(servo_set_desh, servo_set_desh.getUnlocalizedName()); - GameRegistry.registerItem(pads_rubber, pads_rubber.getUnlocalizedName()); - GameRegistry.registerItem(pads_slime, pads_slime.getUnlocalizedName()); - GameRegistry.registerItem(pads_static, pads_static.getUnlocalizedName()); - GameRegistry.registerItem(cladding_paint, cladding_paint.getUnlocalizedName()); - GameRegistry.registerItem(cladding_rubber, cladding_rubber.getUnlocalizedName()); - GameRegistry.registerItem(cladding_lead, cladding_lead.getUnlocalizedName()); - GameRegistry.registerItem(cladding_desh, cladding_desh.getUnlocalizedName()); - GameRegistry.registerItem(cladding_ghiorsium, cladding_ghiorsium.getUnlocalizedName()); - GameRegistry.registerItem(cladding_iron, cladding_iron.getUnlocalizedName()); - GameRegistry.registerItem(cladding_obsidian, cladding_obsidian.getUnlocalizedName()); - GameRegistry.registerItem(insert_kevlar, insert_kevlar.getUnlocalizedName()); - GameRegistry.registerItem(insert_sapi, insert_sapi.getUnlocalizedName()); - GameRegistry.registerItem(insert_esapi, insert_esapi.getUnlocalizedName()); - GameRegistry.registerItem(insert_xsapi, insert_xsapi.getUnlocalizedName()); - GameRegistry.registerItem(insert_steel, insert_steel.getUnlocalizedName()); - GameRegistry.registerItem(insert_du, insert_du.getUnlocalizedName()); - GameRegistry.registerItem(insert_polonium, insert_polonium.getUnlocalizedName()); - GameRegistry.registerItem(insert_ghiorsium, insert_ghiorsium.getUnlocalizedName()); - GameRegistry.registerItem(insert_era, insert_era.getUnlocalizedName()); - GameRegistry.registerItem(insert_yharonite, insert_yharonite.getUnlocalizedName()); - GameRegistry.registerItem(insert_doxium, insert_doxium.getUnlocalizedName()); - GameRegistry.registerItem(armor_polish, armor_polish.getUnlocalizedName()); - GameRegistry.registerItem(bandaid, bandaid.getUnlocalizedName()); - GameRegistry.registerItem(serum, serum.getUnlocalizedName()); - GameRegistry.registerItem(quartz_plutonium, quartz_plutonium.getUnlocalizedName()); - GameRegistry.registerItem(morning_glory, morning_glory.getUnlocalizedName()); - GameRegistry.registerItem(lodestone, lodestone.getUnlocalizedName()); - GameRegistry.registerItem(horseshoe_magnet, horseshoe_magnet.getUnlocalizedName()); - GameRegistry.registerItem(industrial_magnet, industrial_magnet.getUnlocalizedName()); - GameRegistry.registerItem(bathwater, bathwater.getUnlocalizedName()); - GameRegistry.registerItem(bathwater_mk2, bathwater_mk2.getUnlocalizedName()); - GameRegistry.registerItem(spider_milk, spider_milk.getUnlocalizedName()); - GameRegistry.registerItem(ink, ink.getUnlocalizedName()); - GameRegistry.registerItem(heart_piece, heart_piece.getUnlocalizedName()); - GameRegistry.registerItem(heart_container, heart_container.getUnlocalizedName()); - GameRegistry.registerItem(heart_booster, heart_booster.getUnlocalizedName()); - GameRegistry.registerItem(heart_fab, heart_fab.getUnlocalizedName()); - GameRegistry.registerItem(black_diamond, black_diamond.getUnlocalizedName()); - GameRegistry.registerItem(wd40, wd40.getUnlocalizedName()); - GameRegistry.registerItem(scrumpy, scrumpy.getUnlocalizedName()); - GameRegistry.registerItem(wild_p, wild_p.getUnlocalizedName()); - GameRegistry.registerItem(fabsols_vodka, fabsols_vodka.getUnlocalizedName()); - GameRegistry.registerItem(shackles, shackles.getUnlocalizedName()); - GameRegistry.registerItem(injector_5htp, injector_5htp.getUnlocalizedName()); - GameRegistry.registerItem(injector_knife, injector_knife.getUnlocalizedName()); - - //Vehicles - GameRegistry.registerItem(boat_rubber, boat_rubber.getUnlocalizedName()); - GameRegistry.registerItem(cart, cart.getUnlocalizedName()); - GameRegistry.registerItem(train, train.getUnlocalizedName()); - GameRegistry.registerItem(drone, drone.getUnlocalizedName()); - - //High Explosive Lenses - GameRegistry.registerItem(early_explosive_lenses, early_explosive_lenses.getUnlocalizedName()); - GameRegistry.registerItem(explosive_lenses, explosive_lenses.getUnlocalizedName()); - - //The Gadget - //GameRegistry.registerItem(gadget_explosive, gadget_explosive.getUnlocalizedName()); - GameRegistry.registerItem(gadget_wireing, gadget_wireing.getUnlocalizedName()); - GameRegistry.registerItem(gadget_core, gadget_core.getUnlocalizedName()); - - //Little Boy - GameRegistry.registerItem(boy_shielding, boy_shielding.getUnlocalizedName()); - GameRegistry.registerItem(boy_target, boy_target.getUnlocalizedName()); - GameRegistry.registerItem(boy_bullet, boy_bullet.getUnlocalizedName()); - GameRegistry.registerItem(boy_propellant, boy_propellant.getUnlocalizedName()); - GameRegistry.registerItem(boy_igniter, boy_igniter.getUnlocalizedName());; - - //Fat Man - //GameRegistry.registerItem(man_explosive, man_explosive.getUnlocalizedName()); - GameRegistry.registerItem(man_igniter, man_igniter.getUnlocalizedName()); - GameRegistry.registerItem(man_core, man_core.getUnlocalizedName()); - - //Ivy Mike - GameRegistry.registerItem(mike_core, mike_core.getUnlocalizedName()); - GameRegistry.registerItem(mike_deut, mike_deut.getUnlocalizedName()); - GameRegistry.registerItem(mike_cooling_unit, mike_cooling_unit.getUnlocalizedName()); - - //Tsar Bomba - GameRegistry.registerItem(tsar_core, tsar_core.getUnlocalizedName()); - - //FLEIJA - GameRegistry.registerItem(fleija_igniter, fleija_igniter.getUnlocalizedName()); - GameRegistry.registerItem(fleija_propellant, fleija_propellant.getUnlocalizedName()); - GameRegistry.registerItem(fleija_core, fleija_core.getUnlocalizedName()); - - //Solinium - GameRegistry.registerItem(solinium_igniter, solinium_igniter.getUnlocalizedName()); - GameRegistry.registerItem(solinium_propellant, solinium_propellant.getUnlocalizedName()); - GameRegistry.registerItem(solinium_core, solinium_core.getUnlocalizedName()); - - //N2 - GameRegistry.registerItem(n2_charge, n2_charge.getUnlocalizedName()); - - //FSTBMB - GameRegistry.registerItem(egg_balefire_shard, egg_balefire_shard.getUnlocalizedName()); - GameRegistry.registerItem(egg_balefire, egg_balefire.getUnlocalizedName()); - - //Conventional Armor - GameRegistry.registerItem(goggles, goggles.getUnlocalizedName()); - GameRegistry.registerItem(ashglasses, ashglasses.getUnlocalizedName()); - GameRegistry.registerItem(gas_mask, gas_mask.getUnlocalizedName()); - GameRegistry.registerItem(gas_mask_m65, gas_mask_m65.getUnlocalizedName()); - GameRegistry.registerItem(gas_mask_mono, gas_mask_mono.getUnlocalizedName()); - GameRegistry.registerItem(gas_mask_olde, gas_mask_olde.getUnlocalizedName()); - GameRegistry.registerItem(mask_rag, mask_rag.getUnlocalizedName()); - GameRegistry.registerItem(mask_piss, mask_piss.getUnlocalizedName()); - //GameRegistry.registerItem(oxy_mask, oxy_mask.getUnlocalizedName()); - GameRegistry.registerItem(hat, hat.getUnlocalizedName()); - GameRegistry.registerItem(beta, beta.getUnlocalizedName()); - GameRegistry.registerItem(no9, no9.getUnlocalizedName()); - - GameRegistry.registerItem(steel_helmet, steel_helmet.getUnlocalizedName()); - GameRegistry.registerItem(steel_plate, steel_plate.getUnlocalizedName()); - GameRegistry.registerItem(steel_legs, steel_legs.getUnlocalizedName()); - GameRegistry.registerItem(steel_boots, steel_boots.getUnlocalizedName()); - GameRegistry.registerItem(titanium_helmet, titanium_helmet.getUnlocalizedName()); - GameRegistry.registerItem(titanium_plate, titanium_plate.getUnlocalizedName()); - GameRegistry.registerItem(titanium_legs, titanium_legs.getUnlocalizedName()); - GameRegistry.registerItem(titanium_boots, titanium_boots.getUnlocalizedName()); - GameRegistry.registerItem(alloy_helmet, alloy_helmet.getUnlocalizedName()); - GameRegistry.registerItem(alloy_plate, alloy_plate.getUnlocalizedName()); - GameRegistry.registerItem(alloy_legs, alloy_legs.getUnlocalizedName()); - GameRegistry.registerItem(alloy_boots, alloy_boots.getUnlocalizedName()); - - //Custom Rods - GameRegistry.registerItem(custom_tnt, custom_tnt.getUnlocalizedName()); - GameRegistry.registerItem(custom_nuke, custom_nuke.getUnlocalizedName()); - GameRegistry.registerItem(custom_hydro, custom_hydro.getUnlocalizedName()); - GameRegistry.registerItem(custom_amat, custom_amat.getUnlocalizedName()); - GameRegistry.registerItem(custom_dirty, custom_dirty.getUnlocalizedName()); - GameRegistry.registerItem(custom_schrab, custom_schrab.getUnlocalizedName()); - GameRegistry.registerItem(custom_fall, custom_fall.getUnlocalizedName()); - - //Power Armor - GameRegistry.registerItem(steamsuit_helmet, steamsuit_helmet.getUnlocalizedName()); - GameRegistry.registerItem(steamsuit_plate, steamsuit_plate.getUnlocalizedName()); - GameRegistry.registerItem(steamsuit_legs, steamsuit_legs.getUnlocalizedName()); - GameRegistry.registerItem(steamsuit_boots, steamsuit_boots.getUnlocalizedName()); - GameRegistry.registerItem(dieselsuit_helmet, dieselsuit_helmet.getUnlocalizedName()); - GameRegistry.registerItem(dieselsuit_plate, dieselsuit_plate.getUnlocalizedName()); - GameRegistry.registerItem(dieselsuit_legs, dieselsuit_legs.getUnlocalizedName()); - GameRegistry.registerItem(dieselsuit_boots, dieselsuit_boots.getUnlocalizedName()); - GameRegistry.registerItem(t45_helmet, t45_helmet.getUnlocalizedName()); - GameRegistry.registerItem(t45_plate, t45_plate.getUnlocalizedName()); - GameRegistry.registerItem(t45_legs, t45_legs.getUnlocalizedName()); - GameRegistry.registerItem(t45_boots, t45_boots.getUnlocalizedName()); - GameRegistry.registerItem(ajr_helmet, ajr_helmet.getUnlocalizedName()); - GameRegistry.registerItem(ajr_plate, ajr_plate.getUnlocalizedName()); - GameRegistry.registerItem(ajr_legs, ajr_legs.getUnlocalizedName()); - GameRegistry.registerItem(ajr_boots, ajr_boots.getUnlocalizedName()); - GameRegistry.registerItem(ajro_helmet, ajro_helmet.getUnlocalizedName()); - GameRegistry.registerItem(ajro_plate, ajro_plate.getUnlocalizedName()); - GameRegistry.registerItem(ajro_legs, ajro_legs.getUnlocalizedName()); - GameRegistry.registerItem(ajro_boots, ajro_boots.getUnlocalizedName()); - GameRegistry.registerItem(rpa_helmet, rpa_helmet.getUnlocalizedName()); - GameRegistry.registerItem(rpa_plate, rpa_plate.getUnlocalizedName()); - GameRegistry.registerItem(rpa_legs, rpa_legs.getUnlocalizedName()); - GameRegistry.registerItem(rpa_boots, rpa_boots.getUnlocalizedName()); - GameRegistry.registerItem(bj_helmet, bj_helmet.getUnlocalizedName()); - GameRegistry.registerItem(bj_plate, bj_plate.getUnlocalizedName()); - GameRegistry.registerItem(bj_plate_jetpack, bj_plate_jetpack.getUnlocalizedName()); - GameRegistry.registerItem(bj_legs, bj_legs.getUnlocalizedName()); - GameRegistry.registerItem(bj_boots, bj_boots.getUnlocalizedName()); - GameRegistry.registerItem(envsuit_helmet, envsuit_helmet.getUnlocalizedName()); - GameRegistry.registerItem(envsuit_plate, envsuit_plate.getUnlocalizedName()); - GameRegistry.registerItem(envsuit_legs, envsuit_legs.getUnlocalizedName()); - GameRegistry.registerItem(envsuit_boots, envsuit_boots.getUnlocalizedName()); - GameRegistry.registerItem(hev_helmet, hev_helmet.getUnlocalizedName()); - GameRegistry.registerItem(hev_plate, hev_plate.getUnlocalizedName()); - GameRegistry.registerItem(hev_legs, hev_legs.getUnlocalizedName()); - GameRegistry.registerItem(hev_boots, hev_boots.getUnlocalizedName()); - GameRegistry.registerItem(fau_helmet, fau_helmet.getUnlocalizedName()); - GameRegistry.registerItem(fau_plate, fau_plate.getUnlocalizedName()); - GameRegistry.registerItem(fau_legs, fau_legs.getUnlocalizedName()); - GameRegistry.registerItem(fau_boots, fau_boots.getUnlocalizedName()); - GameRegistry.registerItem(dns_helmet, dns_helmet.getUnlocalizedName()); - GameRegistry.registerItem(dns_plate, dns_plate.getUnlocalizedName()); - GameRegistry.registerItem(dns_legs, dns_legs.getUnlocalizedName()); - GameRegistry.registerItem(dns_boots, dns_boots.getUnlocalizedName()); - GameRegistry.registerItem(taurun_helmet, taurun_helmet.getUnlocalizedName()); - GameRegistry.registerItem(taurun_plate, taurun_plate.getUnlocalizedName()); - GameRegistry.registerItem(taurun_legs, taurun_legs.getUnlocalizedName()); - GameRegistry.registerItem(taurun_boots, taurun_boots.getUnlocalizedName()); - GameRegistry.registerItem(trenchmaster_helmet, trenchmaster_helmet.getUnlocalizedName()); - GameRegistry.registerItem(trenchmaster_plate, trenchmaster_plate.getUnlocalizedName()); - GameRegistry.registerItem(trenchmaster_legs, trenchmaster_legs.getUnlocalizedName()); - GameRegistry.registerItem(trenchmaster_boots, trenchmaster_boots.getUnlocalizedName()); - - //Nobody will ever read this anyway, so it shouldn't matter. - GameRegistry.registerItem(chainsaw, chainsaw.getUnlocalizedName()); - GameRegistry.registerItem(igniter, igniter.getUnlocalizedName()); - GameRegistry.registerItem(detonator, detonator.getUnlocalizedName()); - GameRegistry.registerItem(detonator_multi, detonator_multi.getUnlocalizedName()); - GameRegistry.registerItem(detonator_laser, detonator_laser.getUnlocalizedName()); - GameRegistry.registerItem(detonator_deadman, detonator_deadman.getUnlocalizedName()); - GameRegistry.registerItem(detonator_de, detonator_de.getUnlocalizedName()); - GameRegistry.registerItem(bomb_caller, bomb_caller.getUnlocalizedName()); - GameRegistry.registerItem(meteor_remote, meteor_remote.getUnlocalizedName()); - GameRegistry.registerItem(anchor_remote, anchor_remote.getUnlocalizedName()); - GameRegistry.registerItem(defuser, defuser.getUnlocalizedName()); - GameRegistry.registerItem(reacher, reacher.getUnlocalizedName()); - GameRegistry.registerItem(bismuth_tool, bismuth_tool.getUnlocalizedName()); - GameRegistry.registerItem(meltdown_tool, meltdown_tool.getUnlocalizedName()); - - GameRegistry.registerItem(hazmat_helmet, hazmat_helmet.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_plate, hazmat_plate.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_legs, hazmat_legs.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_boots, hazmat_boots.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_helmet_red, hazmat_helmet_red.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_plate_red, hazmat_plate_red.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_legs_red, hazmat_legs_red.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_boots_red, hazmat_boots_red.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_helmet_grey, hazmat_helmet_grey.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_plate_grey, hazmat_plate_grey.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_legs_grey, hazmat_legs_grey.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_boots_grey, hazmat_boots_grey.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_paa_helmet, hazmat_paa_helmet.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_paa_plate, hazmat_paa_plate.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_paa_legs, hazmat_paa_legs.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_paa_boots, hazmat_paa_boots.getUnlocalizedName()); - GameRegistry.registerItem(liquidator_helmet, liquidator_helmet.getUnlocalizedName()); - GameRegistry.registerItem(liquidator_plate, liquidator_plate.getUnlocalizedName()); - GameRegistry.registerItem(liquidator_legs, liquidator_legs.getUnlocalizedName()); - GameRegistry.registerItem(liquidator_boots, liquidator_boots.getUnlocalizedName()); - GameRegistry.registerItem(cmb_helmet, cmb_helmet.getUnlocalizedName()); - GameRegistry.registerItem(cmb_plate, cmb_plate.getUnlocalizedName()); - GameRegistry.registerItem(cmb_legs, cmb_legs.getUnlocalizedName()); - GameRegistry.registerItem(cmb_boots, cmb_boots.getUnlocalizedName()); - GameRegistry.registerItem(paa_plate, paa_plate.getUnlocalizedName()); - GameRegistry.registerItem(paa_legs, paa_legs.getUnlocalizedName()); - GameRegistry.registerItem(paa_boots, paa_boots.getUnlocalizedName()); - GameRegistry.registerItem(asbestos_helmet, asbestos_helmet.getUnlocalizedName()); - GameRegistry.registerItem(asbestos_plate, asbestos_plate.getUnlocalizedName()); - GameRegistry.registerItem(asbestos_legs, asbestos_legs.getUnlocalizedName()); - GameRegistry.registerItem(asbestos_boots, asbestos_boots.getUnlocalizedName()); - GameRegistry.registerItem(security_helmet, security_helmet.getUnlocalizedName()); - GameRegistry.registerItem(security_plate, security_plate.getUnlocalizedName()); - GameRegistry.registerItem(security_legs, security_legs.getUnlocalizedName()); - GameRegistry.registerItem(security_boots, security_boots.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_helmet, cobalt_helmet.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_plate, cobalt_plate.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_legs, cobalt_legs.getUnlocalizedName()); - GameRegistry.registerItem(cobalt_boots, cobalt_boots.getUnlocalizedName()); - GameRegistry.registerItem(starmetal_helmet, starmetal_helmet.getUnlocalizedName()); - GameRegistry.registerItem(starmetal_plate, starmetal_plate.getUnlocalizedName()); - GameRegistry.registerItem(starmetal_legs, starmetal_legs.getUnlocalizedName()); - GameRegistry.registerItem(starmetal_boots, starmetal_boots.getUnlocalizedName()); - GameRegistry.registerItem(zirconium_legs, zirconium_legs.getUnlocalizedName()); - GameRegistry.registerItem(dnt_helmet, dnt_helmet.getUnlocalizedName()); - GameRegistry.registerItem(dnt_plate, dnt_plate.getUnlocalizedName()); - GameRegistry.registerItem(dnt_legs, dnt_legs.getUnlocalizedName()); - GameRegistry.registerItem(dnt_boots, dnt_boots.getUnlocalizedName()); - GameRegistry.registerItem(schrabidium_helmet, schrabidium_helmet.getUnlocalizedName()); - GameRegistry.registerItem(schrabidium_plate, schrabidium_plate.getUnlocalizedName()); - GameRegistry.registerItem(schrabidium_legs, schrabidium_legs.getUnlocalizedName()); - GameRegistry.registerItem(schrabidium_boots, schrabidium_boots.getUnlocalizedName()); - GameRegistry.registerItem(bismuth_helmet, bismuth_helmet.getUnlocalizedName()); - GameRegistry.registerItem(bismuth_plate, bismuth_plate.getUnlocalizedName()); - GameRegistry.registerItem(bismuth_legs, bismuth_legs.getUnlocalizedName()); - GameRegistry.registerItem(bismuth_boots, bismuth_boots.getUnlocalizedName()); - GameRegistry.registerItem(euphemium_helmet, euphemium_helmet.getUnlocalizedName()); - GameRegistry.registerItem(euphemium_plate, euphemium_plate.getUnlocalizedName()); - GameRegistry.registerItem(euphemium_legs, euphemium_legs.getUnlocalizedName()); - GameRegistry.registerItem(euphemium_boots, euphemium_boots.getUnlocalizedName()); - GameRegistry.registerItem(robes_helmet, robes_helmet.getUnlocalizedName()); - GameRegistry.registerItem(robes_plate, robes_plate.getUnlocalizedName()); - GameRegistry.registerItem(robes_legs, robes_legs.getUnlocalizedName()); - GameRegistry.registerItem(robes_boots, robes_boots.getUnlocalizedName()); - GameRegistry.registerItem(apple_euphemium, apple_euphemium.getUnlocalizedName()); - GameRegistry.registerItem(watch, watch.getUnlocalizedName()); - GameRegistry.registerItem(mask_of_infamy, mask_of_infamy.getUnlocalizedName()); - GameRegistry.registerItem(jackt, jackt.getUnlocalizedName()); - GameRegistry.registerItem(jackt2, jackt2.getUnlocalizedName()); - GameRegistry.registerItem(jetpack_fly, jetpack_fly.getUnlocalizedName()); - GameRegistry.registerItem(jetpack_break, jetpack_break.getUnlocalizedName()); - GameRegistry.registerItem(jetpack_vector, jetpack_vector.getUnlocalizedName()); - GameRegistry.registerItem(jetpack_boost, jetpack_boost.getUnlocalizedName()); - GameRegistry.registerItem(wings_limp, wings_limp.getUnlocalizedName()); - GameRegistry.registerItem(wings_murk, wings_murk.getUnlocalizedName()); - //GameRegistry.registerItem(australium_iv, australium_iv.getUnlocalizedName()); - //GameRegistry.registerItem(australium_v, australium_v.getUnlocalizedName()); - - //Expensive Ass Shit - GameRegistry.registerItem(crystal_horn, crystal_horn.getUnlocalizedName()); - GameRegistry.registerItem(crystal_charred, crystal_charred.getUnlocalizedName()); - - //OP Tools - GameRegistry.registerItem(wand, wand.getUnlocalizedName()); - GameRegistry.registerItem(wand_s, wand_s.getUnlocalizedName()); - GameRegistry.registerItem(wand_d, wand_d.getUnlocalizedName()); - GameRegistry.registerItem(structure_single, structure_single.getUnlocalizedName()); - GameRegistry.registerItem(structure_solid, structure_solid.getUnlocalizedName()); - GameRegistry.registerItem(structure_pattern, structure_pattern.getUnlocalizedName()); - GameRegistry.registerItem(structure_randomized, structure_randomized.getUnlocalizedName()); - GameRegistry.registerItem(structure_randomly, structure_randomly.getUnlocalizedName()); - GameRegistry.registerItem(structure_custommachine, structure_custommachine.getUnlocalizedName()); - GameRegistry.registerItem(rod_of_discord, rod_of_discord.getUnlocalizedName()); - GameRegistry.registerItem(polaroid, polaroid.getUnlocalizedName()); - GameRegistry.registerItem(glitch, glitch.getUnlocalizedName()); - GameRegistry.registerItem(book_secret, book_secret.getUnlocalizedName()); - GameRegistry.registerItem(book_of_, book_of_.getUnlocalizedName()); - GameRegistry.registerItem(page_of_, page_of_.getUnlocalizedName()); - GameRegistry.registerItem(book_lemegeton, book_lemegeton.getUnlocalizedName()); - GameRegistry.registerItem(burnt_bark, burnt_bark.getUnlocalizedName()); - - //Kits - GameRegistry.registerItem(nuke_starter_kit, nuke_starter_kit.getUnlocalizedName()); - GameRegistry.registerItem(nuke_advanced_kit, nuke_advanced_kit.getUnlocalizedName()); - GameRegistry.registerItem(nuke_commercially_kit, nuke_commercially_kit.getUnlocalizedName()); - GameRegistry.registerItem(nuke_electric_kit, nuke_electric_kit.getUnlocalizedName()); - GameRegistry.registerItem(gadget_kit, gadget_kit.getUnlocalizedName()); - GameRegistry.registerItem(boy_kit, boy_kit.getUnlocalizedName()); - GameRegistry.registerItem(man_kit, man_kit.getUnlocalizedName()); - GameRegistry.registerItem(mike_kit, mike_kit.getUnlocalizedName()); - GameRegistry.registerItem(tsar_kit, tsar_kit.getUnlocalizedName()); - GameRegistry.registerItem(prototype_kit, prototype_kit.getUnlocalizedName()); - GameRegistry.registerItem(fleija_kit, fleija_kit.getUnlocalizedName()); - GameRegistry.registerItem(solinium_kit, solinium_kit.getUnlocalizedName()); - GameRegistry.registerItem(multi_kit, multi_kit.getUnlocalizedName()); - GameRegistry.registerItem(custom_kit, custom_kit.getUnlocalizedName()); - GameRegistry.registerItem(missile_kit, missile_kit.getUnlocalizedName()); - GameRegistry.registerItem(grenade_kit, grenade_kit.getUnlocalizedName()); - GameRegistry.registerItem(t45_kit, t45_kit.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_kit, hazmat_kit.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_red_kit, hazmat_red_kit.getUnlocalizedName()); - GameRegistry.registerItem(hazmat_grey_kit, hazmat_grey_kit.getUnlocalizedName()); - GameRegistry.registerItem(kit_custom, kit_custom.getUnlocalizedName()); - GameRegistry.registerItem(euphemium_kit, euphemium_kit.getUnlocalizedName()); - GameRegistry.registerItem(legacy_toolbox, legacy_toolbox.getUnlocalizedName()); - GameRegistry.registerItem(toolbox, toolbox.getUnlocalizedName()); - GameRegistry.registerItem(letter, letter.getUnlocalizedName()); - - //Misile Loot Boxes - GameRegistry.registerItem(loot_10, loot_10.getUnlocalizedName()); - GameRegistry.registerItem(loot_15, loot_15.getUnlocalizedName()); - GameRegistry.registerItem(loot_misc, loot_misc.getUnlocalizedName()); - - //THIS is a bucket. - GameRegistry.registerItem(bucket_mud, bucket_mud.getUnlocalizedName()); - GameRegistry.registerItem(bucket_acid, bucket_acid.getUnlocalizedName()); - GameRegistry.registerItem(bucket_toxic, bucket_toxic.getUnlocalizedName()); - GameRegistry.registerItem(bucket_schrabidic_acid, bucket_schrabidic_acid.getUnlocalizedName()); - GameRegistry.registerItem(bucket_sulfuric_acid, bucket_sulfuric_acid.getUnlocalizedName()); - - //Door Items - GameRegistry.registerItem(door_metal, door_metal.getUnlocalizedName()); - GameRegistry.registerItem(door_office, door_office.getUnlocalizedName()); - GameRegistry.registerItem(door_bunker, door_bunker.getUnlocalizedName()); - GameRegistry.registerItem(door_red, door_red.getUnlocalizedName()); - GameRegistry.registerItem(sliding_blast_door_skin, sliding_blast_door_skin.getUnlocalizedName()); - - //Records - GameRegistry.registerItem(record_lc, record_lc.getUnlocalizedName()); - GameRegistry.registerItem(record_ss, record_ss.getUnlocalizedName()); - GameRegistry.registerItem(record_vc, record_vc.getUnlocalizedName()); - GameRegistry.registerItem(record_glass, record_glass.getUnlocalizedName()); - - //wow we're far down the item registry, is this the cellar? - GameRegistry.registerItem(book_guide, book_guide.getUnlocalizedName()); - GameRegistry.registerItem(book_lore, book_lore.getUnlocalizedName()); - GameRegistry.registerItem(holotape_image, holotape_image.getUnlocalizedName()); - GameRegistry.registerItem(holotape_damaged, holotape_damaged.getUnlocalizedName()); - GameRegistry.registerItem(clay_tablet, clay_tablet.getUnlocalizedName()); - - //Technical Items - GameRegistry.registerItem(chlorine1, chlorine1.getUnlocalizedName()); - GameRegistry.registerItem(chlorine2, chlorine2.getUnlocalizedName()); - GameRegistry.registerItem(chlorine3, chlorine3.getUnlocalizedName()); - GameRegistry.registerItem(chlorine4, chlorine4.getUnlocalizedName()); - GameRegistry.registerItem(chlorine5, chlorine5.getUnlocalizedName()); - GameRegistry.registerItem(chlorine6, chlorine6.getUnlocalizedName()); - GameRegistry.registerItem(chlorine7, chlorine7.getUnlocalizedName()); - GameRegistry.registerItem(chlorine8, chlorine8.getUnlocalizedName()); - GameRegistry.registerItem(pc1, pc1.getUnlocalizedName()); - GameRegistry.registerItem(pc2, pc2.getUnlocalizedName()); - GameRegistry.registerItem(pc3, pc3.getUnlocalizedName()); - GameRegistry.registerItem(pc4, pc4.getUnlocalizedName()); - GameRegistry.registerItem(pc5, pc5.getUnlocalizedName()); - GameRegistry.registerItem(pc6, pc6.getUnlocalizedName()); - GameRegistry.registerItem(pc7, pc7.getUnlocalizedName()); - GameRegistry.registerItem(pc8, pc8.getUnlocalizedName()); - GameRegistry.registerItem(cloud1, cloud1.getUnlocalizedName()); - GameRegistry.registerItem(cloud2, cloud2.getUnlocalizedName()); - GameRegistry.registerItem(cloud3, cloud3.getUnlocalizedName()); - GameRegistry.registerItem(cloud4, cloud4.getUnlocalizedName()); - GameRegistry.registerItem(cloud5, cloud5.getUnlocalizedName()); - GameRegistry.registerItem(cloud6, cloud6.getUnlocalizedName()); - GameRegistry.registerItem(cloud7, cloud7.getUnlocalizedName()); - GameRegistry.registerItem(cloud8, cloud8.getUnlocalizedName()); - GameRegistry.registerItem(orange1, orange1.getUnlocalizedName()); - GameRegistry.registerItem(orange2, orange2.getUnlocalizedName()); - GameRegistry.registerItem(orange3, orange3.getUnlocalizedName()); - GameRegistry.registerItem(orange4, orange4.getUnlocalizedName()); - GameRegistry.registerItem(orange5, orange5.getUnlocalizedName()); - GameRegistry.registerItem(orange6, orange6.getUnlocalizedName()); - GameRegistry.registerItem(orange7, orange7.getUnlocalizedName()); - GameRegistry.registerItem(orange8, orange8.getUnlocalizedName()); - GameRegistry.registerItem(nothing, nothing.getUnlocalizedName()); - GameRegistry.registerItem(achievement_icon, achievement_icon.getUnlocalizedName()); - GameRegistry.registerItem(bob_metalworks, bob_metalworks.getUnlocalizedName()); - GameRegistry.registerItem(bob_assembly, bob_assembly.getUnlocalizedName()); - GameRegistry.registerItem(bob_chemistry, bob_chemistry.getUnlocalizedName()); - GameRegistry.registerItem(bob_oil, bob_oil.getUnlocalizedName()); - GameRegistry.registerItem(bob_nuclear, bob_nuclear.getUnlocalizedName()); - GameRegistry.registerItem(mysteryshovel, mysteryshovel.getUnlocalizedName()); - GameRegistry.registerItem(memory, memory.getUnlocalizedName()); - GameRegistry.registerItem(conveyor_wand, conveyor_wand.getUnlocalizedName()); - } - - public static void addRemap(String unloc, Item item, Enum sub) { - addRemap(unloc, item, sub.ordinal()); - } - - public static void addRemap(String unloc, Item item, int meta) { - Item remap = new ItemRemap(item, meta).setUnlocalizedName(unloc).setTextureName(RefStrings.MODID + ":plate_armor_titanium"); - GameRegistry.registerItem(remap, remap.getUnlocalizedName()); - } -} +package com.hbm.items; + +import com.hbm.blocks.ModBlocks; +import com.hbm.config.VersatileConfig; +import com.hbm.handler.BucketHandler; +import com.hbm.handler.ToolAbility; +import com.hbm.handler.ToolAbility.LuckAbility; +import com.hbm.handler.ability.IWeaponAbility; +import com.hbm.handler.WeaponAbility; +import com.hbm.handler.guncfg.*; +import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.material.MaterialShapes; +import com.hbm.inventory.material.Mats; +import com.hbm.items.ItemAmmoEnums.*; +import com.hbm.items.ItemEnums.*; +import com.hbm.items.armor.*; +import com.hbm.items.armor.IArmorDisableModel.EnumPlayerPart; +import com.hbm.items.bomb.*; +import com.hbm.items.food.*; +import com.hbm.items.machine.*; +import com.hbm.items.machine.ItemFELCrystal.EnumWavelengths; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.items.machine.ItemPlateFuel.FunctionEnum; +import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; +import com.hbm.items.machine.ItemRBMKRod.EnumBurnFunc; +import com.hbm.items.machine.ItemRBMKRod.EnumDepleteFunc; +import com.hbm.items.machine.ItemRTGPelletDepleted.DepletedRTGMaterial; +import com.hbm.items.machine.ItemStamp.StampType; +import com.hbm.items.special.*; +import com.hbm.items.special.ItemPlasticScrap.ScrapType; +import com.hbm.items.tool.*; +import com.hbm.items.tool.ItemToolAbility.EnumToolType; +import com.hbm.items.weapon.*; +import com.hbm.items.weapon.ItemCustomMissilePart.*; +import com.hbm.items.weapon.ItemMissile.MissileFormFactor; +import com.hbm.items.weapon.ItemMissile.MissileFuel; +import com.hbm.items.weapon.ItemMissile.MissileTier; +import com.hbm.items.weapon.sedna.factory.GunFactory; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.potion.HbmPotion; +import com.hbm.tileentity.machine.rbmk.IRBMKFluxReceiver.NType; +import com.hbm.util.RTGUtil; + +import api.hbm.block.IToolable.ToolType; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.Item.ToolMaterial; +import net.minecraft.item.ItemArmor.ArmorMaterial; +import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemSoup; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; + +public class ModItems { + + public static void mainRegistry() { + initializeItem(); + registerItem(); + } + + public static Item redstone_sword; + public static Item big_sword; + + public static Item ingot_th232; + public static Item ingot_uranium; + public static Item ingot_u233; + public static Item ingot_u235; + public static Item ingot_u238; + public static Item ingot_u238m2; + public static Item ingot_plutonium; + public static Item ingot_pu238; + public static Item ingot_pu239; + public static Item ingot_pu240; + public static Item ingot_pu241; + public static Item ingot_pu_mix; + public static Item ingot_am241; + public static Item ingot_am242; + public static Item ingot_am_mix; + public static Item ingot_neptunium; + public static Item ingot_polonium; + public static Item ingot_technetium; + public static Item ingot_co60; + public static Item ingot_sr90; + public static Item ingot_au198; + public static Item ingot_pb209; + public static Item ingot_ra226; + public static Item ingot_titanium; + public static Item ingot_cobalt; + public static Item sulfur; + public static Item nitra; + public static Item nitra_small; + + public static Item coke; + public static Item lignite; + public static Item powder_lignite; + public static Item briquette; + public static Item coal_infernal; + public static Item cinnebar; + public static Item powder_ash; + public static Item powder_limestone; + public static Item powder_cement; + + public static Item niter; + public static Item ingot_copper; + public static Item ingot_red_copper; + public static Item ingot_tungsten; + public static Item ingot_aluminium; + public static Item fluorite; + public static Item ingot_beryllium; + public static Item ingot_schraranium; + public static Item ingot_schrabidium; + public static Item ingot_schrabidate; + public static Item ingot_plutonium_fuel; + public static Item ingot_neptunium_fuel; + public static Item ingot_uranium_fuel; + public static Item ingot_mox_fuel; + public static Item ingot_americium_fuel; + public static Item ingot_schrabidium_fuel; + public static Item ingot_thorium_fuel; + public static Item nugget_uranium_fuel; + public static Item nugget_thorium_fuel; + public static Item nugget_plutonium_fuel; + public static Item nugget_neptunium_fuel; + public static Item nugget_mox_fuel; + public static Item nugget_americium_fuel; + public static Item nugget_schrabidium_fuel; + public static Item ingot_advanced_alloy; + public static Item ingot_tcalloy; + public static Item ingot_cdalloy; + public static Item ingot_bismuth_bronze; + public static Item ingot_arsenic_bronze; + public static Item ingot_bscco; + public static Item lithium; + public static Item ingot_zirconium; + public static Item ingot_hes; + public static Item ingot_les; + public static Item nugget_hes; + public static Item nugget_les; + public static Item ingot_magnetized_tungsten; + public static Item ingot_combine_steel; + public static Item ingot_solinium; + public static Item nugget_solinium; + public static Item ingot_phosphorus; + public static Item ingot_semtex; + public static Item ingot_c4; + public static Item ingot_boron; + public static Item ingot_graphite; + public static Item ingot_firebrick; + public static Item ingot_smore; + + public static Item ingot_gh336; + public static Item nugget_gh336; + + public static Item ingot_australium; + public static Item nugget_australium; + public static Item nugget_australium_lesser; + public static Item nugget_australium_greater; + + public static Item ingot_desh; + public static Item nugget_desh; + public static Item ingot_dineutronium; + public static Item nugget_dineutronium; + public static Item powder_dineutronium; + public static Item ingot_tetraneutronium; + public static Item nugget_tetraneutronium; + public static Item powder_tetraneutronium; + public static Item ingot_starmetal; + public static Item ingot_gunmetal; + public static Item plate_gunmetal; + public static Item ingot_weaponsteel; + public static Item plate_weaponsteel; + public static Item ingot_saturnite; + public static Item plate_saturnite; + public static Item ingot_ferrouranium; + public static Item ingot_electronium; + public static Item nugget_zirconium; + public static Item nugget_mercury; + public static Item ingot_mercury; //It's to prevent any ambiguity, as it was treated as a full ingot in the past anyway + public static Item bottle_mercury; + + public static Item ore_byproduct; //byproduct of variable purity and quantity, can be treated as a nugget, might require shredding or acidizing, depends on the type + + public static Item ore_bedrock; + public static Item ore_centrifuged; + public static Item ore_cleaned; + public static Item ore_separated; + public static Item ore_purified; + public static Item ore_nitrated; + public static Item ore_nitrocrystalline; + public static Item ore_deepcleaned; + public static Item ore_seared; + //public static Item ore_radcleaned; + public static Item ore_enriched; //final stage + public static Item bedrock_ore_base; + public static Item bedrock_ore; + public static Item bedrock_ore_fragment; + + public static Item billet_uranium; + public static Item billet_u233; + public static Item billet_u235; + public static Item billet_u238; + public static Item billet_th232; + public static Item billet_plutonium; + public static Item billet_pu238; + public static Item billet_pu239; + public static Item billet_pu240; + public static Item billet_pu241; + public static Item billet_pu_mix; + public static Item billet_am241; + public static Item billet_am242; + public static Item billet_am_mix; + public static Item billet_neptunium; + public static Item billet_polonium; + public static Item billet_technetium; + public static Item billet_cobalt; + public static Item billet_co60; + public static Item billet_sr90; + public static Item billet_au198; + public static Item billet_pb209; + public static Item billet_ra226; + public static Item billet_actinium; + public static Item billet_schrabidium; + public static Item billet_solinium; + public static Item billet_gh336; + public static Item billet_australium; + public static Item billet_australium_lesser; + public static Item billet_australium_greater; + public static Item billet_uranium_fuel; + public static Item billet_thorium_fuel; + public static Item billet_plutonium_fuel; + public static Item billet_neptunium_fuel; + public static Item billet_mox_fuel; + public static Item billet_americium_fuel; + public static Item billet_les; + public static Item billet_schrabidium_fuel; + public static Item billet_hes; + public static Item billet_po210be; + public static Item billet_ra226be; + public static Item billet_pu238be; + public static Item billet_yharonite; + public static Item billet_balefire_gold; + public static Item billet_flashlead; + public static Item billet_zfb_bismuth; + public static Item billet_zfb_pu241; + public static Item billet_zfb_am_mix; + public static Item billet_beryllium; + public static Item billet_bismuth; + public static Item billet_zirconium; + public static Item billet_nuclear_waste; + + public static Item nugget_th232; + public static Item nugget_uranium; + public static Item nugget_u233; + public static Item nugget_u235; + public static Item nugget_u238; + public static Item nugget_plutonium; + public static Item nugget_pu238; + public static Item nugget_pu239; + public static Item nugget_pu240; + public static Item nugget_pu241; + public static Item nugget_pu_mix; + public static Item nugget_am241; + public static Item nugget_am242; + public static Item nugget_am_mix; + public static Item nugget_neptunium; + public static Item nugget_polonium; + public static Item nugget_technetium; + public static Item nugget_cobalt; + public static Item nugget_co60; + public static Item nugget_sr90; + public static Item nugget_au198; + public static Item nugget_pb209; + public static Item nugget_ra226; + public static Item nugget_actinium; + public static Item plate_titanium; + public static Item plate_aluminium; + public static Item neutron_reflector; + public static Item ingot_steel; + public static Item plate_steel; + public static Item plate_iron; + public static Item ingot_lead; + public static Item nugget_lead; + public static Item ingot_bismuth; + public static Item nugget_bismuth; + public static Item ingot_arsenic; + public static Item nugget_arsenic; + public static Item ingot_tantalium; + public static Item nugget_tantalium; + public static Item ingot_silicon; + public static Item billet_silicon; + public static Item nugget_silicon; + public static Item ingot_niobium; + public static Item nugget_niobium; + public static Item ingot_osmiridium; + public static Item nugget_osmiridium; + public static Item plate_lead; + public static Item plate_dura_steel; + public static Item nugget_schrabidium; + public static Item plate_schrabidium; + public static Item plate_copper; + public static Item nugget_beryllium; + public static Item plate_gold; + public static Item hazmat_cloth; + public static Item hazmat_cloth_red; + public static Item hazmat_cloth_grey; + public static Item asbestos_cloth; + public static Item rag; + public static Item rag_damp; + public static Item rag_piss; + public static Item filter_coal; + public static Item plate_advanced_alloy; + public static Item plate_combine_steel; + public static Item plate_mixed; + public static Item plate_paa; + public static Item pipes_steel; + public static Item drill_titanium; + public static Item plate_dalekanium; + public static Item plate_euphemium; + public static Item bolt; + public static Item bolt_spike; + public static Item plate_polymer; + public static Item plate_kevlar; + public static Item plate_dineutronium; + public static Item plate_desh; + public static Item plate_bismuth; + public static Item photo_panel; + public static Item sat_base; + public static Item thruster_nuclear; + public static Item safety_fuse; + public static Item part_generic; + public static Item item_secret; + public static Item ingot_metal; + public static Item chemical_dye; + public static Item crayon; + + public static Item undefined; + + public static Item ball_resin; + public static Item ingot_dura_steel; + public static Item ingot_polymer; + public static Item ingot_bakelite; + public static Item ingot_biorubber; + public static Item ingot_rubber; + public static Item ingot_pet; + public static Item ingot_pc; + public static Item ingot_pvc; + + public static Item ingot_fiberglass; + public static Item ingot_asbestos; + public static Item powder_asbestos; + public static Item ingot_calcium; + public static Item powder_calcium; + public static Item ingot_cadmium; + public static Item powder_cadmium; + public static Item powder_bismuth; + public static Item ingot_mud; + public static Item ingot_cft; + + public static Item ingot_lanthanium; + public static Item ingot_actinium; + + public static Item ingot_meteorite; + public static Item ingot_meteorite_forged; + public static Item blade_meteorite; + public static Item ingot_steel_dusted; + public static Item ingot_chainsteel; + + public static Item plate_armor_titanium; + public static Item plate_armor_ajr; + public static Item plate_armor_hev; + public static Item plate_armor_lunar; + public static Item plate_armor_fau; + public static Item plate_armor_dnt; + + public static Item oil_tar; + public static Item solid_fuel; + public static Item solid_fuel_presto; + public static Item solid_fuel_presto_triplet; + public static Item solid_fuel_bf; + public static Item solid_fuel_presto_bf; + public static Item solid_fuel_presto_triplet_bf; + public static Item rocket_fuel; + + public static Item crystal_coal; + public static Item crystal_iron; + public static Item crystal_gold; + public static Item crystal_redstone; + public static Item crystal_lapis; + public static Item crystal_diamond; + 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_schraranium; + public static Item crystal_schrabidium; + public static Item crystal_rare; + public static Item crystal_phosphorus; + public static Item crystal_lithium; + public static Item crystal_cobalt; + public static Item crystal_starmetal; + public static Item crystal_cinnebar; + public static Item crystal_trixite; + public static Item crystal_osmiridium; + + public static Item gem_sodalite; + public static Item gem_tantalium; + public static Item gem_volcanic; + public static Item gem_rad; + public static Item gem_alexandrite; + + public static Item powder_lead; + public static Item powder_tantalium; + public static Item powder_neptunium; + public static Item powder_polonium; + public static Item powder_co60; + public static Item powder_sr90; + public static Item powder_sr90_tiny; + public static Item powder_au198; + public static Item powder_ra226; + public static Item powder_i131; + public static Item powder_i131_tiny; + public static Item powder_xe135; + public static Item powder_xe135_tiny; + public static Item powder_cs137; + public static Item powder_cs137_tiny; + public static Item powder_at209; + public static Item powder_schrabidium; + public static Item powder_schrabidate; + + public static Item powder_aluminium; + public static Item powder_beryllium; + public static Item powder_copper; + public static Item powder_gold; + public static Item powder_iron; + public static Item powder_titanium; + public static Item powder_tungsten; + public static Item powder_uranium; + public static Item powder_plutonium; + public static Item dust; + public static Item dust_tiny; + public static Item fallout; + public static Item powder_power; + + public static Item powder_thorium; + public static Item powder_iodine; + public static Item powder_neodymium; + public static Item powder_astatine; + public static Item powder_caesium; + + public static Item powder_strontium; + public static Item powder_cobalt; + public static Item powder_bromine; + public static Item powder_niobium; + public static Item powder_tennessine; + public static Item powder_cerium; + + public static Item powder_advanced_alloy; + public static Item powder_tcalloy; + public static Item powder_coal; + public static Item powder_coal_tiny; + public static Item powder_combine_steel; + public static Item powder_diamond; + public static Item powder_emerald; + public static Item powder_lapis; + public static Item powder_quartz; + public static Item powder_magnetized_tungsten; + public static Item powder_chlorophyte; + public static Item powder_red_copper; + public static Item powder_steel; + public static Item powder_lithium; + public static Item powder_zirconium; + public static Item powder_sodium; + + public static Item powder_australium; + + public static Item powder_dura_steel; + public static Item powder_polymer; + public static Item powder_bakelite; + public static Item powder_euphemium; + public static Item powder_meteorite; + + public static Item powder_steel_tiny; + public static Item powder_lithium_tiny; + public static Item powder_neodymium_tiny; + public static Item powder_cobalt_tiny; + public static Item powder_niobium_tiny; + public static Item powder_cerium_tiny; + public static Item powder_lanthanium_tiny; + public static Item powder_actinium_tiny; + public static Item powder_boron_tiny; + public static Item powder_meteorite_tiny; + + public static Item powder_coltan_ore; + public static Item powder_coltan; + public static Item powder_tektite; + public static Item powder_paleogenite; + public static Item powder_paleogenite_tiny; + public static Item powder_impure_osmiridium; + public static Item powder_borax; + public static Item powder_chlorocalcite; + public static Item powder_molysite; + + public static Item powder_lanthanium; + public static Item powder_actinium; + public static Item powder_boron; + public static Item powder_desh; + public static Item powder_semtex_mix; + public static Item powder_desh_mix; + public static Item powder_desh_ready; + public static Item powder_nitan_mix; + public static Item powder_spark_mix; + public static Item powder_yellowcake; + public static Item powder_magic; + public static Item powder_balefire; + public static Item powder_sawdust; + public static Item powder_flux; + public static Item powder_fertilizer; + + public static Item fragment_neodymium; + public static Item fragment_cobalt; + public static Item fragment_niobium; + public static Item fragment_cerium; + public static Item fragment_lanthanium; + public static Item fragment_actinium; + public static Item fragment_boron; + public static Item fragment_meteorite; + public static Item fragment_coltan; + public static Item chunk_ore; + + public static Item biomass; + public static Item biomass_compressed; + public static Item bio_wafer; + public static Item plant_item; + + public static Item coil_copper; + public static Item coil_copper_torus; + public static Item coil_tungsten; + public static Item tank_steel; + public static Item motor; + public static Item motor_desh; + public static Item motor_bismuth; + public static Item centrifuge_element; + public static Item reactor_core; + public static Item rtg_unit; + public static Item levitation_unit; + + public static Item coil_advanced_alloy; + public static Item coil_advanced_torus; + public static Item coil_magnetized_tungsten; + public static Item coil_gold; + public static Item coil_gold_torus; + public static Item component_limiter; + public static Item component_emitter; + public static Item chlorine_pinwheel; + public static Item deuterium_filter; + + public static Item parts_legendary; + + public static Item circuit; + + public static Item crt_display; + public static ItemEnumMulti circuit_star_piece; + public static ItemEnumMulti circuit_star_component; + public static Item circuit_star; + + public static Item assembly_nuke; + + public static Item casing; + + public static Item wiring_red_copper; + public static Item shell; + public static Item pipe; + public static Item fins_flat; + public static Item fins_small_steel; + public static Item fins_big_steel; + public static Item fins_tri_steel; + public static Item fins_quad_titanium; + public static Item sphere_steel; + public static Item pedestal_steel; + public static Item dysfunctional_reactor; + public static Item blade_titanium; + public static Item turbine_titanium; + public static Item blade_tungsten; + public static Item turbine_tungsten; + public static Item ring_starmetal; + public static Item flywheel_beryllium; + + public static Item gear_large; + public static Item sawblade; + + public static Item toothpicks; + public static Item ducttape; + public static Item catalyst_clay; + + public static Item warhead_generic_small; + public static Item warhead_generic_medium; + public static Item warhead_generic_large; + public static Item warhead_incendiary_small; + public static Item warhead_incendiary_medium; + public static Item warhead_incendiary_large; + public static Item warhead_cluster_small; + public static Item warhead_cluster_medium; + public static Item warhead_cluster_large; + public static Item warhead_buster_small; + public static Item warhead_buster_medium; + public static Item warhead_buster_large; + public static Item warhead_nuclear; + public static Item warhead_mirv; + public static Item warhead_volcano; + + public static Item fuel_tank_small; + public static Item fuel_tank_medium; + public static Item fuel_tank_large; + + public static Item thruster_small; + public static Item thruster_medium; + public static Item thruster_large; + + public static Item sat_head_mapper; + public static Item sat_head_scanner; + public static Item sat_head_radar; + public static Item sat_head_laser; + public static Item sat_head_resonator; + + public static Item seg_10; + public static Item seg_15; + public static Item seg_20; + + public static Item chopper_head; + public static Item chopper_gun; + public static Item chopper_torso; + public static Item chopper_tail; + public static Item chopper_wing; + public static Item chopper_blades; + public static Item combine_scrap; + + public static Item shimmer_head; + public static Item shimmer_axe_head; + public static Item shimmer_handle; + + //public static Item telepad; + public static Item entanglement_kit; + + public static Item stamp_stone_flat; + public static Item stamp_stone_plate; + public static Item stamp_stone_wire; + public static Item stamp_stone_circuit; + public static Item stamp_iron_flat; + public static Item stamp_iron_plate; + public static Item stamp_iron_wire; + public static Item stamp_iron_circuit; + public static Item stamp_steel_flat; + public static Item stamp_steel_plate; + public static Item stamp_steel_wire; + public static Item stamp_steel_circuit; + public static Item stamp_titanium_flat; + public static Item stamp_titanium_plate; + public static Item stamp_titanium_wire; + public static Item stamp_titanium_circuit; + public static Item stamp_obsidian_flat; + public static Item stamp_obsidian_plate; + public static Item stamp_obsidian_wire; + public static Item stamp_obsidian_circuit; + public static Item stamp_desh_flat; + public static Item stamp_desh_plate; + public static Item stamp_desh_wire; + public static Item stamp_desh_circuit; + public static Item stamp_book; + + public static Item stamp_357; + public static Item stamp_44; + public static Item stamp_9; + public static Item stamp_50; + + public static Item stamp_desh_357; + public static Item stamp_desh_44; + public static Item stamp_desh_9; + public static Item stamp_desh_50; + + public static Item blades_steel; + public static Item blades_titanium; + public static Item blades_advanced_alloy; + public static Item blades_desh; + + public static Item mold_base; + public static Item mold; + public static Item scraps; + public static Item ingot_raw; + public static Item plate_cast; + public static Item plate_welded; + public static Item heavy_component; + public static Item wire_fine; + public static Item wire_dense; + public static Item part_barrel_light; + public static Item part_barrel_heavy; + public static Item part_receiver_light; + public static Item part_receiver_heavy; + public static Item part_mechanism; + public static Item part_stock; + public static Item part_grip; + + public static Item part_lithium; + public static Item part_beryllium; + public static Item part_carbon; + public static Item part_copper; + public static Item part_plutonium; + + public static Item laser_crystal_co2; + public static Item laser_crystal_bismuth; + public static Item laser_crystal_cmb; + public static Item laser_crystal_dnt; + public static Item laser_crystal_digamma; + + public static Item thermo_element; + + public static Item catalytic_converter; + public static Item crackpipe; + + public static Item pellet_rtg_depleted; + + public static Item pellet_rtg_radium; + public static Item pellet_rtg_weak; + public static Item pellet_rtg; + public static Item pellet_rtg_strontium; + public static Item pellet_rtg_cobalt; + public static Item pellet_rtg_actinium; + public static Item pellet_rtg_polonium; + public static Item pellet_rtg_americium; + public static Item pellet_rtg_gold; + public static Item pellet_rtg_lead; + + public static Item tritium_deuterium_cake; + + public static Item piston_selenium; + public static Item piston_set; + public static Item drillbit; + + //public static Item crystal_energy; + //public static Item pellet_coolant; + + public static Item rune_blank; + public static Item rune_isa; + public static Item rune_dagaz; + public static Item rune_hagalaz; + public static Item rune_jera; + public static Item rune_thurisaz; + + public static Item ams_catalyst_blank; + public static Item ams_catalyst_aluminium; + public static Item ams_catalyst_beryllium; + public static Item ams_catalyst_caesium; + public static Item ams_catalyst_cerium; + public static Item ams_catalyst_cobalt; + public static Item ams_catalyst_copper; + public static Item ams_catalyst_dineutronium; + public static Item ams_catalyst_euphemium; + public static Item ams_catalyst_iron; + public static Item ams_catalyst_lithium; + public static Item ams_catalyst_niobium; + public static Item ams_catalyst_schrabidium; + public static Item ams_catalyst_strontium; + public static Item ams_catalyst_thorium; + public static Item ams_catalyst_tungsten; + + public static Item ams_focus_blank; + public static Item ams_focus_limiter; + public static Item ams_focus_booster; + + public static Item ams_muzzle; + + public static Item ams_lens; + + public static Item ams_core_sing; + public static Item ams_core_wormhole; + public static Item ams_core_eyeofharmony; + public static Item ams_core_thingy; + + public static Item fusion_shield_tungsten; + public static Item fusion_shield_desh; + public static Item fusion_shield_chlorophyte; + public static Item fusion_shield_vaporwave; + + public static Item cell_empty; + public static Item cell_uf6; + public static Item cell_puf6; + public static Item cell_deuterium; + public static Item cell_tritium; + public static Item cell_sas3; + public static Item cell_antimatter; + public static Item cell_anti_schrabidium; + public static Item cell_balefire; + + public static Item demon_core_open; + public static Item demon_core_closed; + + public static Item pa_coil; + + public static Item particle_empty; + public static Item particle_hydrogen; + public static Item particle_copper; + public static Item particle_lead; + public static Item particle_aproton; + public static Item particle_aelectron; + public static Item particle_amat; + public static Item particle_aschrab; + public static Item particle_higgs; + public static Item particle_muon; + public static Item particle_tachyon; + public static Item particle_strange; + public static Item particle_dark; + public static Item particle_sparkticle; + public static Item particle_digamma; + public static Item particle_lutece; + + public static Item pellet_antimatter; + public static Item singularity; + public static Item singularity_counter_resonant; + public static Item singularity_super_heated; + public static Item black_hole; + public static Item singularity_spark; + public static Item crystal_xen; + public static Item inf_water; + public static Item inf_water_mk2; + + public static Item fuel_additive; + + public static Item canister_empty; + public static Item canister_full; + public static Item canister_napalm; + + public static Item gas_empty; + public static Item gas_full; + + public static Item fluid_tank_full; + public static Item fluid_tank_empty; + public static Item fluid_tank_lead_full; + public static Item fluid_tank_lead_empty; + public static Item fluid_barrel_full; + public static Item fluid_barrel_empty; + public static Item fluid_barrel_infinite; + public static Item pipette; + public static Item pipette_boron; + public static Item pipette_laboratory; + public static Item siphon; + + public static Item disperser_canister_empty; + public static Item disperser_canister; + public static Item glyphid_gland; + public static Item glyphid_gland_empty; + + public static Item syringe_empty; + public static Item syringe_antidote; + public static Item syringe_poison; + public static Item syringe_awesome; + public static Item syringe_metal_empty; + public static Item syringe_metal_stimpak; + public static Item syringe_metal_medx; + public static Item syringe_metal_psycho; + public static Item syringe_metal_super; + public static Item syringe_taint; + public static Item syringe_mkunicorn; + public static Item iv_empty; + public static Item iv_blood; + public static Item iv_xp_empty; + public static Item iv_xp; + public static Item radaway; + public static Item radaway_strong; + public static Item radaway_flush; + public static Item radx; + public static Item siox; + public static Item pill_herbal; + public static Item xanax; + public static Item fmn; + public static Item five_htp; + public static Item med_bag; + public static Item pill_iodine; + public static Item plan_c; + public static Item pill_red; + public static Item stealth_boy; + public static Item gas_mask_filter; + public static Item gas_mask_filter_mono; + public static Item gas_mask_filter_combo; + public static Item gas_mask_filter_rag; + public static Item gas_mask_filter_piss; + 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 cigarette; + + public static Item can_empty; + public static Item can_smart; + public static Item can_creature; + public static Item can_redbomb; + public static Item can_mrsugar; + public static Item can_overcharge; + public static Item can_luna; + public static Item can_bepis; + public static Item can_breen; + public static Item can_mug; + public static Item mucho_mango; + public static Item bottle_empty; + public static Item bottle_nuka; + public static Item bottle_cherry; + public static Item bottle_quantum; + public static Item bottle_sparkle; + public static Item bottle_rad; + public static Item bottle2_empty; + public static Item bottle2_korl; + public static Item bottle2_fritz; + public static Item bottle2_korl_special; + public static Item bottle2_fritz_special; + public static Item flask_empty; + public static Item flask_infusion; + public static Item chocolate_milk; + public static Item coffee; + public static Item coffee_radium; + public static Item chocolate; + public static Item cap_nuka; + public static Item cap_quantum; + public static Item cap_sparkle; + public static Item cap_rad; + public static Item cap_korl; + public static Item cap_fritz; + public static Item ring_pull; + public static Item bdcl; + //public static Item canned_beef; + //public static Item canned_tuna; + //public static Item canned_mystery; + //public static Item canned_pashtet; + //public static Item canned_cheese; + //public static Item canned_jizz; + //public static Item canned_milk; + //public static Item canned_ass; + //public static Item canned_pizza; + //public static Item canned_tube; + //public static Item canned_tomato; + //public static Item canned_asbestos; + //public static Item canned_bhole; + //public static Item canned_hotdogs; + //public static Item canned_leftovers; + //public static Item canned_yogurt; + //public static Item canned_stew; + //public static Item canned_chinese; + //public static Item canned_oil; + //public static Item canned_fist; + //public static Item canned_spam; + //public static Item canned_fried; + //public static Item canned_napalm; + //public static Item canned_diesel; + //public static Item canned_kerosene; + //public static Item canned_recursion; + //public static Item canned_bark; + public static ItemEnumMulti canned_conserve; + public static Item can_key; + + public static Item boat_rubber; + public static Item cart; + public static Item train; + public static Item drone; + + public static Item coin_creeper; + public static Item coin_radiation; + public static Item coin_maskman; + public static Item coin_worm; + public static Item coin_ufo; + //public static Item coin_siege; + //public static Item source; + + public static Item rod_empty; + public static Item rod; + public static Item rod_dual_empty; + public static Item rod_dual; + public static Item rod_quad_empty; + public static Item rod_quad; + + public static Item rod_zirnox_empty; + public static Item rod_zirnox_tritium; + public static ItemEnumMulti rod_zirnox; + + public static Item rod_zirnox_natural_uranium_fuel_depleted; + public static Item rod_zirnox_uranium_fuel_depleted; + public static Item rod_zirnox_thorium_fuel_depleted; + public static Item rod_zirnox_mox_fuel_depleted; + public static Item rod_zirnox_plutonium_fuel_depleted; + public static Item rod_zirnox_u233_fuel_depleted; + public static Item rod_zirnox_u235_fuel_depleted; + public static Item rod_zirnox_les_fuel_depleted; + public static Item rod_zirnox_zfb_mox_depleted; + + public static Item waste_natural_uranium; + public static Item waste_uranium; + public static Item waste_thorium; + public static Item waste_mox; + public static Item waste_plutonium; + public static Item waste_u233; + public static Item waste_u235; + public static Item waste_schrabidium; + public static Item waste_zfb_mox; + + public static Item waste_plate_u233; + public static Item waste_plate_u235; + public static Item waste_plate_mox; + public static Item waste_plate_pu239; + public static Item waste_plate_sa326; + public static Item waste_plate_ra226be; + public static Item waste_plate_pu238be; + + public static Item pile_rod_uranium; + public static Item pile_rod_pu239; + public static Item pile_rod_plutonium; + public static Item pile_rod_source; + public static Item pile_rod_boron; + public static Item pile_rod_lithium; + public static Item pile_rod_detector; + + public static Item plate_fuel_u233; + public static Item plate_fuel_u235; + public static Item plate_fuel_mox; + public static Item plate_fuel_pu239; + public static Item plate_fuel_sa326; + public static Item plate_fuel_ra226be; + public static Item plate_fuel_pu238be; + + public static Item pwr_fuel; + public static Item pwr_fuel_hot; + public static Item pwr_fuel_depleted; + + public static Item rbmk_lid; + public static Item rbmk_lid_glass; + public static Item rbmk_fuel_empty; + public static ItemRBMKRod rbmk_fuel_ueu; + public static ItemRBMKRod rbmk_fuel_meu; + public static ItemRBMKRod rbmk_fuel_heu233; + public static ItemRBMKRod rbmk_fuel_heu235; + public static ItemRBMKRod rbmk_fuel_thmeu; + public static ItemRBMKRod rbmk_fuel_lep; + public static ItemRBMKRod rbmk_fuel_mep; + public static ItemRBMKRod rbmk_fuel_hep239; + public static ItemRBMKRod rbmk_fuel_hep241; + public static ItemRBMKRod rbmk_fuel_lea; + public static ItemRBMKRod rbmk_fuel_mea; + public static ItemRBMKRod rbmk_fuel_hea241; + public static ItemRBMKRod rbmk_fuel_hea242; + public static ItemRBMKRod rbmk_fuel_men; + public static ItemRBMKRod rbmk_fuel_hen; + public static ItemRBMKRod rbmk_fuel_mox; + public static ItemRBMKRod rbmk_fuel_les; + public static ItemRBMKRod rbmk_fuel_mes; + public static ItemRBMKRod rbmk_fuel_hes; + public static ItemRBMKRod rbmk_fuel_leaus; + public static ItemRBMKRod rbmk_fuel_heaus; + public static ItemRBMKRod rbmk_fuel_po210be; + public static ItemRBMKRod rbmk_fuel_ra226be; + public static ItemRBMKRod rbmk_fuel_pu238be; + public static ItemRBMKRod rbmk_fuel_balefire_gold; + public static ItemRBMKRod rbmk_fuel_flashlead; + public static ItemRBMKRod rbmk_fuel_balefire; + public static ItemRBMKRod rbmk_fuel_zfb_bismuth; + public static ItemRBMKRod rbmk_fuel_zfb_pu241; + public static ItemRBMKRod rbmk_fuel_zfb_am_mix; + public static ItemRBMKRod rbmk_fuel_drx; + public static ItemRBMKRod rbmk_fuel_test; + //public static ItemRBMKRod rbmk_fuel_curve; + public static ItemRBMKPellet rbmk_pellet_ueu; + public static ItemRBMKPellet rbmk_pellet_meu; + public static ItemRBMKPellet rbmk_pellet_heu233; + public static ItemRBMKPellet rbmk_pellet_heu235; + public static ItemRBMKPellet rbmk_pellet_thmeu; + public static ItemRBMKPellet rbmk_pellet_lep; + public static ItemRBMKPellet rbmk_pellet_mep; + public static ItemRBMKPellet rbmk_pellet_hep239; + public static ItemRBMKPellet rbmk_pellet_hep241; + public static ItemRBMKPellet rbmk_pellet_lea; + public static ItemRBMKPellet rbmk_pellet_mea; + public static ItemRBMKPellet rbmk_pellet_hea241; + public static ItemRBMKPellet rbmk_pellet_hea242; + public static ItemRBMKPellet rbmk_pellet_men; + public static ItemRBMKPellet rbmk_pellet_hen; + public static ItemRBMKPellet rbmk_pellet_mox; + public static ItemRBMKPellet rbmk_pellet_les; + public static ItemRBMKPellet rbmk_pellet_mes; + public static ItemRBMKPellet rbmk_pellet_hes; + public static ItemRBMKPellet rbmk_pellet_leaus; + public static ItemRBMKPellet rbmk_pellet_heaus; + public static ItemRBMKPellet rbmk_pellet_po210be; + public static ItemRBMKPellet rbmk_pellet_ra226be; + public static ItemRBMKPellet rbmk_pellet_pu238be; + public static ItemRBMKPellet rbmk_pellet_balefire_gold; + public static ItemRBMKPellet rbmk_pellet_flashlead; + public static ItemRBMKPellet rbmk_pellet_balefire; + public static ItemRBMKPellet rbmk_pellet_zfb_bismuth; + public static ItemRBMKPellet rbmk_pellet_zfb_pu241; + public static ItemRBMKPellet rbmk_pellet_zfb_am_mix; + public static ItemRBMKPellet rbmk_pellet_drx; + + public static Item watz_pellet; + public static Item watz_pellet_depleted; + + public static Item icf_pellet_empty; + public static Item icf_pellet; + public static Item icf_pellet_depleted; + + public static Item scrap_plastic; + public static Item scrap; + public static Item scrap_oil; + public static Item scrap_nuclear; + public static Item trinitite; + public static Item nuclear_waste_long; + public static Item nuclear_waste_long_tiny; + public static Item nuclear_waste_short; + public static Item nuclear_waste_short_tiny; + public static Item nuclear_waste_long_depleted; + public static Item nuclear_waste_long_depleted_tiny; + public static Item nuclear_waste_short_depleted; + public static Item nuclear_waste_short_depleted_tiny; + public static Item nuclear_waste; + public static Item nuclear_waste_tiny; + public static Item nuclear_waste_vitrified; + public static Item nuclear_waste_vitrified_tiny; + + public static Item debris_graphite; + public static Item debris_metal; + public static Item debris_fuel; + public static Item debris_concrete; + public static Item debris_exchanger; + public static Item debris_shrapnel; + public static Item debris_element; + + public static Item containment_box; + public static Item plastic_bag; + + public static Item ammo_bag; + public static Item ammo_bag_infinite; + public static Item casing_bag; + + public static Item test_nuke_igniter; + public static Item test_nuke_propellant; + public static Item test_nuke_tier1_shielding; + public static Item test_nuke_tier2_shielding; + public static Item test_nuke_tier1_bullet; + public static Item test_nuke_tier2_bullet; + public static Item test_nuke_tier1_target; + public static Item test_nuke_tier2_target; + + public static Item cordite; + public static Item ballistite; + public static Item ball_dynamite; + public static Item ball_tnt; + public static Item ball_tatb; + public static Item ball_fireclay; + + public static Item pellet_cluster; + public static Item powder_fire; + public static Item powder_ice; + public static Item powder_poison; + public static Item powder_thermite; + public static Item pellet_gas; + public static Item magnetron; + public static Item pellet_buckshot; + public static Item pellet_charged; + + public static Item designator; + public static Item designator_range; + public static Item designator_manual; + public static Item designator_arty_range; + public static Item linker; + public static Item reactor_sensor; + public static Item oil_detector; + public static Item dosimeter; + public static Item geiger_counter; + public static Item digamma_diagnostic; + public static Item pollution_detector; + public static Item ore_density_scanner; + public static Item survey_scanner; + public static Item mirror_tool; + public static Item rbmk_tool; + public static Item coltan_tool; + public static Item power_net_tool; + public static Item analysis_tool; + public static Item coupling_tool; + public static Item drone_linker; + public static Item radar_linker; + public static Item settings_tool; + + public static Item template_folder; + public static Item journal_pip; + public static Item journal_bj; + public static Item journal_silver; + public static Item assembly_template; + public static Item chemistry_template; + public static Item chemistry_icon; + public static Item crucible_template; + public static Item fluid_identifier; + public static Item fluid_identifier_multi; + public static Item fluid_icon; + public static Item siren_track; + public static Item fluid_duct; + + public static Item bobmazon; + public static Item bobmazon_hidden; + + public static Item launch_code_piece; + public static Item launch_code; + public static Item launch_key; + + public static Item missile_assembly; + public static Item missile_generic; + public static Item missile_anti_ballistic; + public static Item missile_incendiary; + public static Item missile_cluster; + public static Item missile_buster; + public static Item missile_decoy; + public static Item missile_strong; + public static Item missile_incendiary_strong; + public static Item missile_cluster_strong; + public static Item missile_buster_strong; + public static Item missile_emp_strong; + public static Item missile_burst; + public static Item missile_inferno; + public static Item missile_rain; + public static Item missile_drill; + public static Item missile_nuclear; + public static Item missile_nuclear_cluster; + public static Item missile_volcano; + public static Item missile_doomsday; + public static Item missile_doomsday_rusted; + public static Item missile_taint; + public static Item missile_micro; + public static Item missile_bhole; + public static Item missile_schrabidium; + public static Item missile_emp; + public static Item missile_shuttle; + public static Item missile_stealth; + public static Item missile_test; + + public static Item mp_thruster_10_kerosene; + public static Item mp_thruster_10_kerosene_tec; + public static Item mp_thruster_10_solid; + public static Item mp_thruster_10_xenon; + public static Item mp_thruster_15_kerosene; + public static Item mp_thruster_15_kerosene_tec; + public static Item mp_thruster_15_kerosene_dual; + public static Item mp_thruster_15_kerosene_triple; + public static Item mp_thruster_15_solid; + public static Item mp_thruster_15_solid_hexdecuple; + public static Item mp_thruster_15_hydrogen; + public static Item mp_thruster_15_hydrogen_dual; + public static Item mp_thruster_15_balefire_short; + public static Item mp_thruster_15_balefire; + public static Item mp_thruster_15_balefire_large; + public static Item mp_thruster_15_balefire_large_rad; + public static Item mp_thruster_20_kerosene; + public static Item mp_thruster_20_kerosene_dual; + public static Item mp_thruster_20_kerosene_triple; + public static Item mp_thruster_20_solid; + public static Item mp_thruster_20_solid_multi; + public static Item mp_thruster_20_solid_multier; + + public static Item mp_stability_10_flat; + public static Item mp_stability_10_cruise; + public static Item mp_stability_10_space; + public static Item mp_stability_15_flat; + public static Item mp_stability_15_thin; + public static Item mp_stability_15_soyuz; + public static Item mp_stability_20_flat; + + public static Item mp_fuselage_10_kerosene; + public static Item mp_fuselage_10_kerosene_camo; + public static Item mp_fuselage_10_kerosene_desert; + public static Item mp_fuselage_10_kerosene_sky; + public static Item mp_fuselage_10_kerosene_flames; + public static Item mp_fuselage_10_kerosene_insulation; + public static Item mp_fuselage_10_kerosene_sleek; + public static Item mp_fuselage_10_kerosene_metal; + public static Item mp_fuselage_10_kerosene_taint; + + public static Item mp_fuselage_10_solid; + public static Item mp_fuselage_10_solid_flames; + public static Item mp_fuselage_10_solid_insulation; + public static Item mp_fuselage_10_solid_sleek; + public static Item mp_fuselage_10_solid_soviet_glory; + public static Item mp_fuselage_10_solid_cathedral; + public static Item mp_fuselage_10_solid_moonlit; + public static Item mp_fuselage_10_solid_battery; + public static Item mp_fuselage_10_solid_duracell; + + public static Item mp_fuselage_10_xenon; + public static Item mp_fuselage_10_xenon_bhole; + + public static Item mp_fuselage_10_long_kerosene; + public static Item mp_fuselage_10_long_kerosene_camo; + public static Item mp_fuselage_10_long_kerosene_desert; + public static Item mp_fuselage_10_long_kerosene_sky; + public static Item mp_fuselage_10_long_kerosene_flames; + public static Item mp_fuselage_10_long_kerosene_insulation; + public static Item mp_fuselage_10_long_kerosene_sleek; + public static Item mp_fuselage_10_long_kerosene_metal; + public static Item mp_fuselage_10_long_kerosene_taint; + public static Item mp_fuselage_10_long_kerosene_dash; + public static Item mp_fuselage_10_long_kerosene_vap; + + public static Item mp_fuselage_10_long_solid; + public static Item mp_fuselage_10_long_solid_flames; + public static Item mp_fuselage_10_long_solid_insulation; + public static Item mp_fuselage_10_long_solid_sleek; + public static Item mp_fuselage_10_long_solid_soviet_glory; + public static Item mp_fuselage_10_long_solid_bullet; + public static Item mp_fuselage_10_long_solid_silvermoonlight; + + public static Item mp_fuselage_10_15_kerosene; + public static Item mp_fuselage_10_15_solid; + public static Item mp_fuselage_10_15_hydrogen; + public static Item mp_fuselage_10_15_balefire; + + public static Item mp_fuselage_15_kerosene; + public static Item mp_fuselage_15_kerosene_camo; + public static Item mp_fuselage_15_kerosene_desert; + public static Item mp_fuselage_15_kerosene_sky; + public static Item mp_fuselage_15_kerosene_insulation; + public static Item mp_fuselage_15_kerosene_metal; + public static Item mp_fuselage_15_kerosene_decorated; + public static Item mp_fuselage_15_kerosene_steampunk; + public static Item mp_fuselage_15_kerosene_polite; + public static Item mp_fuselage_15_kerosene_blackjack; + public static Item mp_fuselage_15_kerosene_lambda; + public static Item mp_fuselage_15_kerosene_minuteman; + public static Item mp_fuselage_15_kerosene_pip; + public static Item mp_fuselage_15_kerosene_taint; + public static Item mp_fuselage_15_kerosene_yuck; + + public static Item mp_fuselage_15_solid; + public static Item mp_fuselage_15_solid_insulation; + public static Item mp_fuselage_15_solid_desh; + public static Item mp_fuselage_15_solid_soviet_glory; + public static Item mp_fuselage_15_solid_soviet_stank; + public static Item mp_fuselage_15_solid_faust; + public static Item mp_fuselage_15_solid_silvermoonlight; + public static Item mp_fuselage_15_solid_snowy; + public static Item mp_fuselage_15_solid_panorama; + public static Item mp_fuselage_15_solid_roses; + public static Item mp_fuselage_15_solid_mimi; + + public static Item mp_fuselage_15_hydrogen; + public static Item mp_fuselage_15_hydrogen_cathedral; + + public static Item mp_fuselage_15_balefire; + + public static Item mp_fuselage_15_20_kerosene; + public static Item mp_fuselage_15_20_kerosene_magnusson; + public static Item mp_fuselage_15_20_solid; + + public static Item mp_fuselage_20_kerosene; + + public static Item mp_warhead_10_he; + public static Item mp_warhead_10_incendiary; + public static Item mp_warhead_10_buster; + public static Item mp_warhead_10_nuclear; + public static Item mp_warhead_10_nuclear_large; + public static Item mp_warhead_10_taint; + public static Item mp_warhead_10_cloud; + public static Item mp_warhead_15_he; + public static Item mp_warhead_15_incendiary; + public static Item mp_warhead_15_nuclear; + public static Item mp_warhead_15_nuclear_shark; + public static Item mp_warhead_15_nuclear_mimi; + public static Item mp_warhead_15_boxcar; + public static Item mp_warhead_15_n2; + public static Item mp_warhead_15_balefire; + public static Item mp_warhead_15_turbine; + public static Item mp_warhead_20_he; + + public static Item mp_chip_1; + public static Item mp_chip_2; + public static Item mp_chip_3; + public static Item mp_chip_4; + public static Item mp_chip_5; + + public static Item missile_skin_camo; + public static Item missile_skin_desert; + public static Item missile_skin_flames; + public static Item missile_skin_manly_pink; + public static Item missile_skin_orange_insulation; + public static Item missile_skin_sleek; + public static Item missile_skin_soviet_glory; + public static Item missile_skin_soviet_stank; + public static Item missile_skin_metal; + + public static Item missile_custom; + + public static Item missile_soyuz; + public static Item missile_soyuz_lander; + public static Item sat_mapper; + public static Item sat_scanner; + public static Item sat_radar; + public static Item sat_laser; + public static Item sat_foeq; + public static Item sat_resonator; + public static Item sat_miner; + public static Item sat_lunar_miner; + public static Item sat_gerald; + public static Item sat_chip; + public static Item sat_interface; + public static Item sat_coord; + public static Item sat_designator; + public static Item sat_relay; + + public static ItemEnumMulti ammo_misc; + public static ItemEnumMulti ammo_shell; + public static ItemEnumMulti ammo_fireext; + + public static Item ammo_dgk; + public static Item ammo_arty; + public static Item ammo_himars; + + public static Item gun_b92; + public static Item gun_b92_ammo; + public static Item gun_fireext; + + public static Item gun_debug; + public static Item ammo_debug; + + public static Item gun_pepperbox; + public static Item gun_light_revolver; + public static Item gun_light_revolver_atlas; + public static Item gun_light_revolver_dani; + public static Item gun_henry; + public static Item gun_henry_lincoln; + public static Item gun_greasegun; + public static Item gun_maresleg; + public static Item gun_maresleg_akimbo; + public static Item gun_maresleg_broken; + public static Item gun_flaregun; + public static Item gun_heavy_revolver; + public static Item gun_heavy_revolver_lilmac; + public static Item gun_heavy_revolver_protege; + public static Item gun_carbine; + public static Item gun_am180; + public static Item gun_liberator; + public static Item gun_congolake; + public static Item gun_flamer; + public static Item gun_flamer_topaz; + public static Item gun_flamer_daybreaker; + public static Item gun_uzi; + public static Item gun_uzi_akimbo; + public static Item gun_spas12; + public static Item gun_panzerschreck; + public static Item gun_g3; + public static Item gun_g3_zebra; + public static Item gun_stinger; + public static Item gun_chemthrower; + public static Item gun_m2; + public static Item gun_autoshotgun; + public static Item gun_autoshotgun_shredder; + public static Item gun_autoshotgun_sexy; + public static Item gun_quadro; + public static Item gun_lag; + public static Item gun_minigun; + public static Item gun_minigun_dual; + public static Item gun_minigun_lacunae; + public static Item gun_missile_launcher; + public static Item gun_tesla_cannon; + public static Item gun_laser_pistol; + public static Item gun_laser_pistol_pew_pew; + public static Item gun_laser_pistol_morning_glory; + public static Item gun_stg77; + public static Item gun_tau; + public static Item gun_fatman; + public static Item gun_lasrifle; + public static Item gun_coilgun; + public static Item gun_hangman; + public static Item gun_mas36; + public static Item gun_bolter; + public static Item gun_folly; + public static Item gun_aberrator; + public static Item gun_aberrator_eott; + public static Item gun_double_barrel; + public static Item gun_double_barrel_sacred_dragon; + + public static Item gun_charge_thrower; + + public static Item ammo_standard; + public static Item ammo_secret; + + public static Item weapon_mod_test; + public static Item weapon_mod_generic; + public static Item weapon_mod_special; + public static Item weapon_mod_caliber; + + public static Item crucible; + + public static Item stick_dynamite; + public static Item stick_dynamite_fishing; + public static Item stick_tnt; + public static Item stick_semtex; + public static Item stick_c4; + + public static Item grenade_generic; + public static Item grenade_strong; + public static Item grenade_frag; + public static Item grenade_fire; + public static Item grenade_shrapnel; + public static Item grenade_cluster; + public static Item grenade_flare; + public static Item grenade_electric; + public static Item grenade_poison; + public static Item grenade_gas; + public static Item grenade_pulse; + public static Item grenade_plasma; + public static Item grenade_tau; + public static Item grenade_schrabidium; + public static Item grenade_lemon; + public static Item grenade_gascan; + public static Item grenade_kyiv; + public static Item grenade_mk2; + public static Item grenade_aschrab; + public static Item grenade_nuke; + public static Item grenade_nuclear; + public static Item grenade_zomg; + public static Item grenade_black_hole; + public static Item grenade_cloud; + public static Item grenade_pink_cloud; + public static Item ullapool_caber; + + public static Item grenade_if_generic; + public static Item grenade_if_he; + public static Item grenade_if_bouncy; + public static Item grenade_if_sticky; + public static Item grenade_if_impact; + public static Item grenade_if_incendiary; + public static Item grenade_if_toxic; + public static Item grenade_if_concussion; + public static Item grenade_if_brimstone; + public static Item grenade_if_mystery; + public static Item grenade_if_spark; + public static Item grenade_if_hopwire; + public static Item grenade_if_null; + + public static Item grenade_smart; + public static Item grenade_mirv; + public static Item grenade_breach; + public static Item grenade_burst; + + public static Item nuclear_waste_pearl; + + public static Item weaponized_starblaster_cell; + + public static Item bomb_waffle; + public static Item schnitzel_vegan; + public static Item cotton_candy; + public static Item apple_lead; + public static Item apple_schrabidium; + public static Item tem_flakes; + public static Item glowing_stew; + public static Item balefire_scrambled; + public static Item balefire_and_ham; + public static Item lemon; + public static Item definitelyfood; + public static Item loops; + public static Item loop_stew; + public static Item spongebob_macaroni; + public static Item fooditem; + public static Item twinkie; + public static Item static_sandwich; + public static Item pudding; + public static Item pancake; + public static Item nugget; + public static Item peas; + public static Item marshmallow; + public static Item cheese; + public static Item quesadilla; + public static Item glyphid_meat; + public static Item glyphid_meat_grilled; + public static Item egg_glyphid; + + public static Item med_ipecac; + public static Item med_ptsd; + public static Item med_schizophrenia; + + public static Item canteen_vodka; + public static Item canteen_fab; + + public static Item defuser; + public static Item reacher; + public static Item bismuth_tool; + public static Item meltdown_tool; + + public static Item flame_pony; + public static Item flame_conspiracy; + public static Item flame_politics; + public static Item flame_opinion; + + //public static Item gadget_explosive; + public static Item early_explosive_lenses; + public static Item explosive_lenses; + public static Item gadget_wireing; + public static Item gadget_core; + public static Item boy_igniter; + public static Item boy_propellant; + public static Item boy_bullet; + public static Item boy_target; + public static Item boy_shielding; + //public static Item man_explosive; + public static Item man_igniter; + public static Item man_core; + public static Item mike_core; + public static Item mike_deut; + public static Item mike_cooling_unit; + public static Item tsar_core; + public static Item fleija_igniter; + public static Item fleija_propellant; + public static Item fleija_core; + public static Item solinium_igniter; + public static Item solinium_propellant; + public static Item solinium_core; + public static Item n2_charge; + public static Item egg_balefire_shard; + public static Item egg_balefire; + + public static Item custom_tnt; + public static Item custom_nuke; + public static Item custom_hydro; + public static Item custom_amat; + public static Item custom_dirty; + public static Item custom_schrab; + public static Item custom_fall; + + public static Item battery_generic; + public static Item battery_advanced; + public static Item battery_lithium; + public static Item battery_schrabidium; + public static Item battery_spark; + public static Item battery_trixite; + public static Item battery_creative; + + public static Item battery_red_cell; + public static Item battery_red_cell_6; + public static Item battery_red_cell_24; + public static Item battery_advanced_cell; + public static Item battery_advanced_cell_4; + public static Item battery_advanced_cell_12; + public static Item battery_lithium_cell; + public static Item battery_lithium_cell_3; + public static Item battery_lithium_cell_6; + public static Item battery_schrabidium_cell; + public static Item battery_schrabidium_cell_2; + public static Item battery_schrabidium_cell_4; + public static Item battery_spark_cell_6; + public static Item battery_spark_cell_25; + public static Item battery_spark_cell_100; + public static Item battery_spark_cell_1000; + public static Item battery_spark_cell_2500; + public static Item battery_spark_cell_10000; + public static Item battery_spark_cell_power; + public static Item cube_power; + + public static Item battery_sc_uranium; + public static Item battery_sc_technetium; + public static Item battery_sc_plutonium; + public static Item battery_sc_polonium; + public static Item battery_sc_gold; + public static Item battery_sc_lead; + public static Item battery_sc_americium; + + public static Item battery_potato; + public static Item battery_potatos; + public static Item hev_battery; + public static Item fusion_core; + public static Item fusion_core_infinite; + public static Item energy_core; + public static Item fuse; + public static Item redcoil_capacitor; + public static Item euphemium_capacitor; + //by using these in crafting table recipes, i'm running the risk of making my recipes too greg-ian (which i don't like) + //in the event that i forget about the meaning of the word "sparingly", please throw a brick at my head + public static Item screwdriver; + public static Item screwdriver_desh; + public static Item hand_drill; + public static Item hand_drill_desh; + public static Item wrench_archineer; + public static Item chemistry_set; + public static Item chemistry_set_boron; + public static Item blowtorch; + public static Item acetylene_torch; + public static Item boltgun; + public static Item overfuse; + public static Item arc_electrode; + public static Item arc_electrode_burnt; + + public static Item upgrade_muffler; + + public static Item upgrade_template; + public static Item upgrade_speed_1; + public static Item upgrade_speed_2; + public static Item upgrade_speed_3; + public static Item upgrade_effect_1; + public static Item upgrade_effect_2; + public static Item upgrade_effect_3; + public static Item upgrade_power_1; + public static Item upgrade_power_2; + public static Item upgrade_power_3; + public static Item upgrade_fortune_1; + public static Item upgrade_fortune_2; + public static Item upgrade_fortune_3; + public static Item upgrade_afterburn_1; + public static Item upgrade_afterburn_2; + public static Item upgrade_afterburn_3; + public static Item upgrade_overdrive_1; + public static Item upgrade_overdrive_2; + public static Item upgrade_overdrive_3; + public static Item upgrade_radius; + public static Item upgrade_health; + public static Item upgrade_smelter; + public static Item upgrade_shredder; + public static Item upgrade_centrifuge; + public static Item upgrade_crystallizer; + public static Item upgrade_nullifier; + public static Item upgrade_screm; + public static Item upgrade_gc_speed; + public static Item upgrade_5g; + public static Item upgrade_stack; + public static Item upgrade_ejector; + + public static Item ingot_euphemium; + public static Item nugget_euphemium; + public static Item euphemium_helmet; + public static Item euphemium_plate; + public static Item euphemium_legs; + public static Item euphemium_boots; + public static Item apple_euphemium; + public static Item watch; + + public static Item goggles; + public static Item ashglasses; + public static Item gas_mask; + public static Item gas_mask_m65; + public static Item gas_mask_mono; + public static Item gas_mask_olde; + public static Item mask_rag; + public static Item mask_piss; + public static Item hat; + public static Item beta; + public static Item no9; + + public static Item t45_helmet; + public static Item t45_plate; + public static Item t45_legs; + public static Item t45_boots; + public static Item steamsuit_helmet; + public static Item steamsuit_plate; + public static Item steamsuit_legs; + public static Item steamsuit_boots; + public static Item dieselsuit_helmet; + public static Item dieselsuit_plate; + public static Item dieselsuit_legs; + public static Item dieselsuit_boots; + + public static Item chainsaw; + + public static Item schrabidium_helmet; + public static Item schrabidium_plate; + public static Item schrabidium_legs; + public static Item schrabidium_boots; + public static Item titanium_helmet; + public static Item titanium_plate; + public static Item titanium_legs; + public static Item titanium_boots; + public static Item steel_helmet; + public static Item steel_plate; + public static Item steel_legs; + public static Item steel_boots; + public static Item alloy_helmet; + public static Item alloy_plate; + public static Item alloy_legs; + public static Item alloy_boots; + public static Item cmb_helmet; + public static Item cmb_plate; + public static Item cmb_legs; + public static Item cmb_boots; + public static Item paa_plate; + public static Item paa_legs; + public static Item paa_boots; + public static Item asbestos_helmet; + public static Item asbestos_plate; + public static Item asbestos_legs; + public static Item asbestos_boots; + public static Item security_helmet; + public static Item security_plate; + public static Item security_legs; + public static Item security_boots; + public static Item cobalt_helmet; + public static Item cobalt_plate; + public static Item cobalt_legs; + public static Item cobalt_boots; + public static Item starmetal_helmet; + public static Item starmetal_plate; + public static Item starmetal_legs; + public static Item starmetal_boots; + public static Item dnt_helmet; + public static Item dnt_plate; + public static Item dnt_legs; + public static Item dnt_boots; + public static Item ajr_helmet; + public static Item ajr_plate; + public static Item ajr_legs; + public static Item ajr_boots; + public static Item ajro_helmet; + public static Item ajro_plate; + public static Item ajro_legs; + public static Item ajro_boots; + public static Item rpa_helmet; + public static Item rpa_plate; + public static Item rpa_legs; + public static Item rpa_boots; + public static Item bismuth_helmet; + public static Item bismuth_plate; + public static Item bismuth_legs; + public static Item bismuth_boots; + public static Item bj_helmet; + public static Item bj_plate; + public static Item bj_plate_jetpack; + public static Item bj_legs; + public static Item bj_boots; + public static Item envsuit_helmet; + public static Item envsuit_plate; + public static Item envsuit_legs; + public static Item envsuit_boots; + public static Item hev_helmet; + public static Item hev_plate; + public static Item hev_legs; + public static Item hev_boots; + public static Item fau_helmet; + public static Item fau_plate; + public static Item fau_legs; + public static Item fau_boots; + public static Item dns_helmet; + public static Item dns_plate; + public static Item dns_legs; + public static Item dns_boots; + public static Item taurun_helmet; + public static Item taurun_plate; + public static Item taurun_legs; + public static Item taurun_boots; + public static Item trenchmaster_helmet; + public static Item trenchmaster_plate; + public static Item trenchmaster_legs; + public static Item trenchmaster_boots; + public static Item zirconium_legs; + public static Item robes_helmet; + public static Item robes_plate; + public static Item robes_legs; + public static Item robes_boots; + + public static Item jetpack_boost; + public static Item jetpack_break; + public static Item jetpack_fly; + public static Item jetpack_vector; + public static Item wings_limp; + public static Item wings_murk; + + public static Item jackt; + public static Item jackt2; + + public static Item schrabidium_sword; + public static Item schrabidium_pickaxe; + public static Item schrabidium_axe; + public static Item schrabidium_shovel; + public static Item schrabidium_hoe; + public static Item titanium_sword; + public static Item titanium_pickaxe; + public static Item titanium_axe; + public static Item titanium_shovel; + public static Item titanium_hoe; + public static Item steel_sword; + public static Item steel_pickaxe; + public static Item steel_axe; + public static Item steel_shovel; + public static Item steel_hoe; + public static Item alloy_sword; + public static Item alloy_pickaxe; + public static Item alloy_axe; + public static Item alloy_shovel; + public static Item alloy_hoe; + public static Item cmb_sword; + public static Item cmb_pickaxe; + public static Item cmb_axe; + public static Item cmb_shovel; + public static Item cmb_hoe; + public static Item elec_sword; + public static Item elec_pickaxe; + public static Item elec_axe; + public static Item elec_shovel; + public static Item desh_sword; + public static Item desh_pickaxe; + public static Item desh_axe; + public static Item desh_shovel; + public static Item desh_hoe; + public static Item cobalt_sword; + public static Item cobalt_pickaxe; + public static Item cobalt_axe; + public static Item cobalt_shovel; + public static Item cobalt_hoe; + public static Item cobalt_decorated_sword; + public static Item cobalt_decorated_pickaxe; + public static Item cobalt_decorated_axe; + public static Item cobalt_decorated_shovel; + public static Item cobalt_decorated_hoe; + public static Item starmetal_sword; + public static Item starmetal_pickaxe; + public static Item starmetal_axe; + public static Item starmetal_shovel; + public static Item starmetal_hoe; + public static Item smashing_hammer; + public static Item centri_stick; + public static Item drax; + public static Item drax_mk2; + public static Item drax_mk3; + public static Item bismuth_pickaxe; + public static Item bismuth_axe; + public static Item volcanic_pickaxe; + public static Item volcanic_axe; + public static Item chlorophyte_pickaxe; + public static Item chlorophyte_axe; + public static Item mese_pickaxe; + public static Item mese_axe; + public static Item dnt_sword; + public static Item dwarven_pickaxe; + + public static Item meteorite_sword; + public static Item meteorite_sword_seared; + public static Item meteorite_sword_reforged; + public static Item meteorite_sword_hardened; + public static Item meteorite_sword_alloyed; + public static Item meteorite_sword_machined; + public static Item meteorite_sword_treated; + public static Item meteorite_sword_etched; + public static Item meteorite_sword_bred; + public static Item meteorite_sword_irradiated; + public static Item meteorite_sword_fused; + public static Item meteorite_sword_baleful; + + public static Item matchstick; + public static Item balefire_and_steel; + + public static Item mask_of_infamy; + + public static Item schrabidium_hammer; + public static Item shimmer_sledge; + public static Item shimmer_axe; + public static Item bottle_opener; + public static Item pch; //for compat please do not hit me + public static Item wood_gavel; + public static Item lead_gavel; + public static Item diamond_gavel; + public static Item mese_gavel; + + public static Item crowbar; + + public static Item wrench; + public static Item wrench_flipped; + public static Item memespoon; + + public static Item multitool_hit; + public static Item multitool_dig; + public static Item multitool_silk; + public static Item multitool_ext; + public static Item multitool_miner; + public static Item multitool_beam; + public static Item multitool_sky; + public static Item multitool_mega; + public static Item multitool_joule; + public static Item multitool_decon; + + public static Item saw; + public static Item bat; + public static Item bat_nail; + public static Item golf_club; + public static Item pipe_rusty; + public static Item pipe_lead; + public static Item reer_graar; + public static Item stopsign; + public static Item sopsign; + public static Item chernobylsign; + + public static Item crystal_horn; + public static Item crystal_charred; + + public static Item attachment_mask; + public static Item attachment_mask_mono; + public static Item back_tesla; + public static Item servo_set; + public static Item servo_set_desh; + public static Item pads_rubber; + public static Item pads_slime; + public static Item pads_static; + public static Item cladding_paint; + public static Item cladding_rubber; + public static Item cladding_lead; + public static Item cladding_desh; + public static Item cladding_ghiorsium; + public static Item cladding_iron; + public static Item cladding_obsidian; + public static Item insert_kevlar; + public static Item insert_sapi; + public static Item insert_esapi; + public static Item insert_xsapi; + public static Item insert_steel; + public static Item insert_du; + public static Item insert_polonium; + public static Item insert_ghiorsium; + public static Item insert_era; + public static Item insert_yharonite; + public static Item insert_doxium; + public static Item armor_polish; + public static Item bandaid; + public static Item serum; + public static Item quartz_plutonium; + public static Item morning_glory; + public static Item lodestone; + public static Item horseshoe_magnet; + public static Item industrial_magnet; + public static Item bathwater; + public static Item bathwater_mk2; + public static Item spider_milk; + public static Item ink; + public static Item heart_piece; + public static Item heart_container; + public static Item heart_booster; + public static Item heart_fab; + public static Item black_diamond; + public static Item wd40; + public static Item scrumpy; + public static Item wild_p; + public static Item fabsols_vodka; + public static Item shackles; + public static Item injector_5htp; + public static Item injector_knife; + public static Item medal_liquidator; + public static Item bottled_cloud; + public static Item protection_charm; + public static Item meteor_charm; + public static Item neutrino_lens; + public static Item gas_tester; + public static Item defuser_gold; + public static Item ballistic_gauntlet; + public static Item night_vision; + public static Item card_aos; + public static Item card_qos; + public static Item australium_iii; + public static Item armor_battery; + public static Item armor_battery_mk2; + public static Item armor_battery_mk3; + + public static Item hazmat_helmet; + public static Item hazmat_plate; + public static Item hazmat_legs; + public static Item hazmat_boots; + public static Item hazmat_helmet_red; + public static Item hazmat_plate_red; + public static Item hazmat_legs_red; + public static Item hazmat_boots_red; + public static Item hazmat_helmet_grey; + public static Item hazmat_plate_grey; + public static Item hazmat_legs_grey; + public static Item hazmat_boots_grey; + public static Item liquidator_helmet; + public static Item liquidator_plate; + public static Item liquidator_legs; + public static Item liquidator_boots; + + public static Item hazmat_paa_helmet; + public static Item hazmat_paa_plate; + public static Item hazmat_paa_legs; + public static Item hazmat_paa_boots; + + public static Item wand; + public static Item wand_s; + public static Item wand_d; + + public static Item structure_single; + public static Item structure_solid; + public static Item structure_pattern; + public static Item structure_randomized; + public static Item structure_randomly; + public static Item structure_custommachine; + + public static Item rod_of_discord; + + public static Item cape_radiation; + public static Item cape_gasmask; + public static Item cape_schrabidium; + public static Item cape_hidden; + + public static Item nuke_starter_kit; + public static Item nuke_advanced_kit; + public static Item nuke_commercially_kit; + public static Item nuke_electric_kit; + public static Item gadget_kit; + public static Item boy_kit; + public static Item man_kit; + public static Item mike_kit; + public static Item tsar_kit; + public static Item multi_kit; + public static Item custom_kit; + public static Item grenade_kit; + public static Item fleija_kit; + public static Item prototype_kit; + public static Item missile_kit; + public static Item t45_kit; + public static Item euphemium_kit; + public static Item solinium_kit; + public static Item hazmat_kit; + public static Item hazmat_red_kit; + public static Item hazmat_grey_kit; + public static Item kit_custom; + + public static Item legacy_toolbox; + public static Item toolbox; + + public static Item loot_10; + public static Item loot_15; + public static Item loot_misc; + + public static Item ammo_container; + + public static Item igniter; + public static Item detonator; + public static Item detonator_multi; + public static Item detonator_laser; + public static Item detonator_deadman; + public static Item detonator_de; + public static Item bomb_caller; + public static Item meteor_remote; + public static Item anchor_remote; + public static Item remote; + //public static Item turret_control; + public static Item turret_chip; + //public static Item turret_biometry; + + public static Item spawn_chopper; + public static Item spawn_worm; + public static Item spawn_ufo; + public static Item spawn_duck; + + public static Item key; + public static Item key_red; + public static Item key_red_cracked; + public static Item key_kit; + public static Item key_fake; + public static Item pin; + public static Item padlock_rusty; + public static Item padlock; + public static Item padlock_reinforced; + public static Item padlock_unbreakable; + + public static Item mech_key; + + public static Item bucket_mud; + public static Item bucket_acid; + public static Item bucket_toxic; + public static Item bucket_schrabidic_acid; + public static Item bucket_sulfuric_acid; + + public static Item door_metal; + public static Item door_office; + public static Item door_bunker; + public static Item door_red; + + public static Item sliding_blast_door_skin; + + public static Item record_lc; + public static Item record_ss; + public static Item record_vc; + public static Item record_glass; + + public static Item book_guide; + public static Item book_lore; + public static Item holotape_image; + public static Item holotape_damaged; + public static Item clay_tablet; + + public static Item polaroid; + public static Item glitch; + public static Item letter; + public static Item book_secret; + public static Item book_of_; + public static Item page_of_; + public static Item book_lemegeton; + public static Item burnt_bark; + + public static Item chlorine1; + public static Item chlorine2; + public static Item chlorine3; + public static Item chlorine4; + public static Item chlorine5; + public static Item chlorine6; + public static Item chlorine7; + public static Item chlorine8; + public static Item pc1; + public static Item pc2; + public static Item pc3; + public static Item pc4; + public static Item pc5; + public static Item pc6; + public static Item pc7; + public static Item pc8; + public static Item cloud1; + public static Item cloud2; + public static Item cloud3; + public static Item cloud4; + public static Item cloud5; + public static Item cloud6; + public static Item cloud7; + public static Item cloud8; + public static Item orange1; + public static Item orange2; + public static Item orange3; + public static Item orange4; + public static Item orange5; + public static Item orange6; + public static Item orange7; + public static Item orange8; + public static Item nothing; + + public static Item achievement_icon; + public static Item bob_metalworks; + public static Item bob_assembly; + public static Item bob_chemistry; + public static Item bob_oil; + public static Item bob_nuclear; + + public static Item mysteryshovel; + public static Item memory; + + public static Item conveyor_wand; + + public static void initializeItem() { + + redstone_sword = new RedstoneSword(ToolMaterial.STONE).setUnlocalizedName("redstone_sword").setCreativeTab(CreativeTabs.tabCombat).setTextureName(RefStrings.MODID + ":redstone_sword"); + big_sword = new BigSword(ToolMaterial.EMERALD).setUnlocalizedName("big_sword").setCreativeTab(CreativeTabs.tabCombat).setTextureName(RefStrings.MODID + ":big_sword"); + + test_nuke_igniter = new Item().setUnlocalizedName("test_nuke_igniter").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_igniter"); + test_nuke_propellant = new Item().setUnlocalizedName("test_nuke_propellant").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_propellant"); + test_nuke_tier1_shielding = new Item().setUnlocalizedName("test_nuke_tier1_shielding").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_shielding"); + test_nuke_tier2_shielding = new Item().setUnlocalizedName("test_nuke_tier2_shielding").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_shielding"); + test_nuke_tier1_bullet = new Item().setUnlocalizedName("test_nuke_tier1_bullet").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_bullet"); + test_nuke_tier2_bullet = new Item().setUnlocalizedName("test_nuke_tier2_bullet").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_bullet"); + test_nuke_tier1_target = new Item().setUnlocalizedName("test_nuke_tier1_target").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_target"); + test_nuke_tier2_target = new Item().setUnlocalizedName("test_nuke_tier2_target").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_target"); + + ingot_th232 = new Item().setUnlocalizedName("ingot_th232").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_th232"); + ingot_uranium = new Item().setUnlocalizedName("ingot_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_uranium"); + ingot_u233 = new Item().setUnlocalizedName("ingot_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_u233"); + ingot_u235 = new Item().setUnlocalizedName("ingot_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_u235"); + ingot_u238 = new Item().setUnlocalizedName("ingot_u238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_u238"); + ingot_u238m2 = new ItemUnstable(350, 200).setUnlocalizedName("ingot_u238m2").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ingot_u238m2"); + ingot_plutonium = new Item().setUnlocalizedName("ingot_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_plutonium"); + ingot_pu238 = new Item().setUnlocalizedName("ingot_pu238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pu238"); + ingot_pu239 = new Item().setUnlocalizedName("ingot_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pu239"); + ingot_pu240 = new Item().setUnlocalizedName("ingot_pu240").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pu240"); + ingot_pu241 = new Item().setUnlocalizedName("ingot_pu241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pu241"); + ingot_pu_mix = new Item().setUnlocalizedName("ingot_pu_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pu_mix"); + ingot_am241 = new Item().setUnlocalizedName("ingot_am241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_am241"); + ingot_am242 = new Item().setUnlocalizedName("ingot_am242").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_am242"); + ingot_am_mix = new Item().setUnlocalizedName("ingot_am_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_am_mix"); + ingot_neptunium = new ItemCustomLore().setUnlocalizedName("ingot_neptunium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_neptunium"); + ingot_polonium = new Item().setUnlocalizedName("ingot_polonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_polonium"); + ingot_technetium = new Item().setUnlocalizedName("ingot_technetium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_technetium"); + ingot_co60 = new Item().setUnlocalizedName("ingot_co60").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_co60"); + ingot_sr90 = new Item().setUnlocalizedName("ingot_sr90").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_sr90"); + ingot_au198 = new Item().setUnlocalizedName("ingot_au198").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_au198"); + ingot_pb209 = new Item().setUnlocalizedName("ingot_pb209").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pb209"); + ingot_ra226 = new Item().setUnlocalizedName("ingot_ra226").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_ra226"); + ingot_titanium = new Item().setUnlocalizedName("ingot_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_titanium"); + ingot_cobalt = new Item().setUnlocalizedName("ingot_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cobalt"); + ingot_boron = new Item().setUnlocalizedName("ingot_boron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_boron"); + ingot_graphite = new Item().setUnlocalizedName("ingot_graphite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_graphite"); + ingot_firebrick = new Item().setUnlocalizedName("ingot_firebrick").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_firebrick"); + ingot_smore = new ItemFood(10, 20F, false).setUnlocalizedName("ingot_smore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_smore"); + sulfur = new Item().setUnlocalizedName("sulfur").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sulfur"); + nitra = new Item().setUnlocalizedName("nitra").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nitra"); + nitra_small = new Item().setUnlocalizedName("nitra_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nitra_small"); + + ingot_uranium_fuel = new Item().setUnlocalizedName("ingot_uranium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_uranium_fuel"); + ingot_plutonium_fuel = new Item().setUnlocalizedName("ingot_plutonium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_plutonium_fuel"); + ingot_neptunium_fuel = new Item().setUnlocalizedName("ingot_neptunium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_neptunium_fuel"); + ingot_mox_fuel = new Item().setUnlocalizedName("ingot_mox_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_mox_fuel"); + ingot_americium_fuel = new Item().setUnlocalizedName("ingot_americium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_americium_fuel"); + ingot_schrabidium_fuel = new Item().setUnlocalizedName("ingot_schrabidium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_schrabidium_fuel"); + ingot_thorium_fuel = new Item().setUnlocalizedName("ingot_thorium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_thorium_fuel"); + nugget_uranium_fuel = new Item().setUnlocalizedName("nugget_uranium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_uranium_fuel"); + nugget_thorium_fuel = new Item().setUnlocalizedName("nugget_thorium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_thorium_fuel"); + nugget_plutonium_fuel = new Item().setUnlocalizedName("nugget_plutonium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_plutonium_fuel"); + nugget_neptunium_fuel = new Item().setUnlocalizedName("nugget_neptunium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_neptunium_fuel"); + nugget_mox_fuel = new Item().setUnlocalizedName("nugget_mox_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_mox_fuel"); + nugget_americium_fuel = new Item().setUnlocalizedName("nugget_americium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_americium_fuel"); + nugget_schrabidium_fuel = new Item().setUnlocalizedName("nugget_schrabidium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_schrabidium_fuel"); + ingot_advanced_alloy = new Item().setUnlocalizedName("ingot_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_advanced_alloy"); + ingot_tcalloy = new Item().setUnlocalizedName("ingot_tcalloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_tcalloy"); + ingot_cdalloy = new Item().setUnlocalizedName("ingot_cdalloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cdalloy"); + ingot_bismuth_bronze = new Item().setUnlocalizedName("ingot_bismuth_bronze").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_bismuth_bronze"); + ingot_arsenic_bronze = new Item().setUnlocalizedName("ingot_arsenic_bronze").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_arsenic_bronze"); + ingot_bscco = new Item().setUnlocalizedName("ingot_bscco").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_bscco"); + + niter = new Item().setUnlocalizedName("niter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":salpeter"); + ingot_copper = new Item().setUnlocalizedName("ingot_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_copper"); + ingot_red_copper = new Item().setUnlocalizedName("ingot_red_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_red_copper"); + ingot_tungsten = new Item().setUnlocalizedName("ingot_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_tungsten"); + ingot_aluminium = new Item().setUnlocalizedName("ingot_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_aluminium"); + fluorite = new Item().setUnlocalizedName("fluorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fluorite"); + ingot_beryllium = new Item().setUnlocalizedName("ingot_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_beryllium"); + ingot_steel = new Item().setUnlocalizedName("ingot_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_steel"); + plate_steel = new Item().setUnlocalizedName("plate_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_steel"); + plate_iron = new Item().setUnlocalizedName("plate_iron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_iron"); + ingot_lead = new Item().setUnlocalizedName("ingot_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_lead"); + plate_lead = new Item().setUnlocalizedName("plate_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_lead"); + plate_dura_steel = new Item().setUnlocalizedName("plate_dura_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_dura_steel"); + ingot_schraranium = new ItemSchraranium().setUnlocalizedName("ingot_schraranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_schraranium"); + ingot_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("ingot_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_schrabidium"); + ingot_schrabidate = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("ingot_schrabidate").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_schrabidate"); + plate_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("plate_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_schrabidium"); + plate_copper = new Item().setUnlocalizedName("plate_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_copper"); + plate_gold = new Item().setUnlocalizedName("plate_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_gold"); + plate_advanced_alloy = new Item().setUnlocalizedName("plate_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_advanced_alloy"); + lithium = new Item().setUnlocalizedName("lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":lithium"); + ingot_zirconium = new Item().setUnlocalizedName("ingot_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_zirconium"); + ingot_semtex = new ItemLemon(4, 5, true).setUnlocalizedName("ingot_semtex").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_semtex"); + ingot_c4 = new Item().setUnlocalizedName("ingot_c4").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_c4"); + ingot_phosphorus = new Item().setUnlocalizedName("ingot_phosphorus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_phosphorus"); + coil_advanced_alloy = new Item().setUnlocalizedName("coil_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_advanced_alloy"); + coil_advanced_torus = new Item().setUnlocalizedName("coil_advanced_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_advanced_torus"); + ingot_magnetized_tungsten = new Item().setUnlocalizedName("ingot_magnetized_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_magnetized_tungsten"); + ingot_combine_steel = new ItemCustomLore().setUnlocalizedName("ingot_combine_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_combine_steel"); + plate_mixed = new Item().setUnlocalizedName("plate_mixed").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_mixed"); + plate_paa = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("plate_paa").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_paa"); + pipes_steel = new Item().setUnlocalizedName("pipes_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pipes_steel"); + drill_titanium = new Item().setUnlocalizedName("drill_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":drill_titanium"); + plate_dalekanium = new Item().setUnlocalizedName("plate_dalekanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_dalekanium"); + plate_euphemium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("plate_euphemium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_euphemium"); + bolt = new ItemAutogen(MaterialShapes.BOLT).oun("boltntm").setUnlocalizedName("bolt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bolt"); + bolt_spike = new ItemCustomLore().setUnlocalizedName("bolt_spike").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bolt_spike"); + plate_polymer = new Item().setUnlocalizedName("plate_polymer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_polymer"); + plate_kevlar = new Item().setUnlocalizedName("plate_kevlar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_kevlar"); + plate_dineutronium = new Item().setUnlocalizedName("plate_dineutronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_dineutronium"); + plate_desh = new Item().setUnlocalizedName("plate_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_desh"); + plate_bismuth = new ItemCustomLore().setUnlocalizedName("plate_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_bismuth"); + ingot_solinium = new Item().setUnlocalizedName("ingot_solinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_solinium"); + nugget_solinium = new Item().setUnlocalizedName("nugget_solinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_solinium"); + photo_panel = new Item().setUnlocalizedName("photo_panel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":photo_panel"); + sat_base = new Item().setUnlocalizedName("sat_base").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_base"); + thruster_nuclear = new Item().setUnlocalizedName("thruster_nuclear").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_nuclear"); + safety_fuse = new Item().setUnlocalizedName("safety_fuse").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":safety_fuse"); + part_generic = new ItemGenericPart().setUnlocalizedName("part_generic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_generic"); + item_secret = new ItemEnumMulti(EnumSecretType.class, true, true).setUnlocalizedName("item_secret").setCreativeTab(null).setTextureName(RefStrings.MODID + ":item_secret"); + ingot_metal = new ItemEnumMulti(EnumIngotMetal.class, true, true).setUnlocalizedName("ingot_metal").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ingot_metal"); + chemical_dye = new ItemChemicalDye().setUnlocalizedName("chemical_dye").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chemical_dye"); + crayon = new ItemCrayon().setUnlocalizedName("crayon").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crayon"); + + undefined = new ItemCustomLore().setUnlocalizedName("undefined").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":undefined"); + + billet_uranium = new Item().setUnlocalizedName("billet_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_uranium"); + billet_u233 = new Item().setUnlocalizedName("billet_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_u233"); + billet_u235 = new Item().setUnlocalizedName("billet_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_u235"); + billet_u238 = new Item().setUnlocalizedName("billet_u238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_u238"); + billet_th232 = new Item().setUnlocalizedName("billet_th232").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_th232"); + billet_plutonium = new Item().setUnlocalizedName("billet_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_plutonium"); + billet_pu238 = new Item().setUnlocalizedName("billet_pu238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu238"); + billet_pu239 = new Item().setUnlocalizedName("billet_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu239"); + billet_pu240 = new Item().setUnlocalizedName("billet_pu240").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu240"); + billet_pu241 = new Item().setUnlocalizedName("billet_pu241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu241"); + billet_pu_mix = new Item().setUnlocalizedName("billet_pu_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu_mix"); + billet_am241 = new Item().setUnlocalizedName("billet_am241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_am241"); + billet_am242 = new Item().setUnlocalizedName("billet_am242").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_am242"); + billet_am_mix = new Item().setUnlocalizedName("billet_am_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_am_mix"); + billet_neptunium = new Item().setUnlocalizedName("billet_neptunium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_neptunium"); + billet_polonium = new Item().setUnlocalizedName("billet_polonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_polonium"); + billet_technetium = new Item().setUnlocalizedName("billet_technetium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_technetium"); + billet_cobalt = new Item().setUnlocalizedName("billet_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_cobalt"); + billet_co60 = new Item().setUnlocalizedName("billet_co60").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_co60"); + billet_sr90 = new Item().setUnlocalizedName("billet_sr90").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_sr90"); + billet_au198 = new Item().setUnlocalizedName("billet_au198").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_au198"); + billet_pb209 = new Item().setUnlocalizedName("billet_pb209").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pb209"); + billet_ra226 = new Item().setUnlocalizedName("billet_ra226").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_ra226"); + billet_actinium = new Item().setUnlocalizedName("billet_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_actinium"); + billet_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("billet_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_schrabidium"); + billet_solinium = new Item().setUnlocalizedName("billet_solinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_solinium"); + billet_gh336 = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("billet_gh336").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_gh336"); + billet_australium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("billet_australium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_australium"); + billet_australium_lesser = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("billet_australium_lesser").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_australium_lesser"); + billet_australium_greater = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("billet_australium_greater").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_australium_greater"); + billet_uranium_fuel = new Item().setUnlocalizedName("billet_uranium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_uranium_fuel"); + billet_thorium_fuel = new Item().setUnlocalizedName("billet_thorium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_thorium_fuel"); + billet_plutonium_fuel = new Item().setUnlocalizedName("billet_plutonium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_plutonium_fuel"); + billet_neptunium_fuel = new Item().setUnlocalizedName("billet_neptunium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_neptunium_fuel"); + billet_mox_fuel = new Item().setUnlocalizedName("billet_mox_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_mox_fuel"); + billet_americium_fuel = new Item().setUnlocalizedName("billet_americium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_americium_fuel"); + billet_les = new Item().setUnlocalizedName("billet_les").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_les"); + billet_schrabidium_fuel = new Item().setUnlocalizedName("billet_schrabidium_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_schrabidium_fuel"); + billet_hes = new Item().setUnlocalizedName("billet_hes").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_hes"); + billet_po210be = new Item().setUnlocalizedName("billet_po210be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_po210be"); + billet_ra226be = new Item().setUnlocalizedName("billet_ra226be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_ra226be"); + billet_pu238be = new Item().setUnlocalizedName("billet_pu238be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_pu238be"); + billet_beryllium = new Item().setUnlocalizedName("billet_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_beryllium"); + billet_bismuth = new Item().setUnlocalizedName("billet_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_bismuth"); + billet_zirconium = new Item().setUnlocalizedName("billet_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_zirconium"); + billet_yharonite = new Item().setUnlocalizedName("billet_yharonite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_yharonite"); + billet_balefire_gold = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("billet_balefire_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_balefire_gold"); + billet_flashlead = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("billet_flashlead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_flashlead"); + billet_zfb_bismuth = new Item().setUnlocalizedName("billet_zfb_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_zfb_bismuth"); + billet_zfb_pu241 = new Item().setUnlocalizedName("billet_zfb_pu241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_zfb_pu241"); + billet_zfb_am_mix = new Item().setUnlocalizedName("billet_zfb_am_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_zfb_am_mix"); + billet_nuclear_waste = new Item().setUnlocalizedName("billet_nuclear_waste").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_nuclear_waste"); + + ball_resin = new ItemCustomLore().setUnlocalizedName("ball_resin").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_resin"); + ingot_dura_steel = new ItemCustomLore().setUnlocalizedName("ingot_dura_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_dura_steel"); + ingot_polymer = new ItemCustomLore().setUnlocalizedName("ingot_polymer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_polymer"); + ingot_bakelite = new ItemCustomLore().setUnlocalizedName("ingot_bakelite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_bakelite"); + ingot_biorubber = new ItemCustomLore().setUnlocalizedName("ingot_biorubber").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_biorubber"); + ingot_rubber = new ItemCustomLore().setUnlocalizedName("ingot_rubber").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_rubber"); + ingot_pc = new ItemCustomLore().setUnlocalizedName("ingot_pc").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pc"); + ingot_pvc = new ItemCustomLore().setUnlocalizedName("ingot_pvc").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_pvc"); + ingot_desh = new ItemCustomLore().setUnlocalizedName("ingot_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_desh"); + nugget_desh = new ItemCustomLore().setUnlocalizedName("nugget_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_desh"); + ingot_dineutronium = new ItemCustomLore().setUnlocalizedName("ingot_dineutronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_dineutronium"); + nugget_dineutronium = new ItemCustomLore().setUnlocalizedName("nugget_dineutronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_dineutronium"); + powder_dineutronium = new ItemCustomLore().setUnlocalizedName("powder_dineutronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_dineutronium"); + ingot_starmetal = new ItemStarmetal().setUnlocalizedName("ingot_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_starmetal"); + ingot_gunmetal = new Item().setUnlocalizedName("ingot_gunmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_gunmetal"); + plate_gunmetal = new Item().setUnlocalizedName("plate_gunmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_gunmetal"); + ingot_weaponsteel = new Item().setUnlocalizedName("ingot_weaponsteel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_gunsteel"); + plate_weaponsteel = new Item().setUnlocalizedName("plate_weaponsteel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_gunsteel"); + ingot_saturnite = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("ingot_saturnite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_saturnite"); + plate_saturnite = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("plate_saturnite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_saturnite"); + ingot_ferrouranium = new ItemCustomLore().setUnlocalizedName("ingot_ferrouranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_ferrouranium"); + ingot_fiberglass = new ItemCustomLore().setUnlocalizedName("ingot_fiberglass").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_fiberglass"); + ingot_asbestos = new ItemCustomLore().setUnlocalizedName("ingot_asbestos").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_asbestos"); + powder_asbestos = new ItemCustomLore().setUnlocalizedName("powder_asbestos").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_asbestos"); + ingot_electronium = new ItemCustomLore().setUnlocalizedName("ingot_electronium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_electronium"); + nugget_zirconium = new ItemCustomLore().setUnlocalizedName("nugget_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_zirconium"); + nugget_mercury = new Item().setUnlocalizedName("nugget_mercury_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_mercury_tiny"); + ingot_mercury = new ItemCustomLore().setUnlocalizedName("nugget_mercury").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_mercury"); + bottle_mercury = new ItemCustomLore().setUnlocalizedName("bottle_mercury").setContainerItem(Items.glass_bottle).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bottle_mercury"); + ingot_calcium = new Item().setUnlocalizedName("ingot_calcium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_calcium"); + powder_calcium = new Item().setUnlocalizedName("powder_calcium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_calcium"); + ingot_cadmium = new Item().setUnlocalizedName("ingot_cadmium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cadmium"); + powder_cadmium = new Item().setUnlocalizedName("powder_cadmium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cadmium"); + powder_bismuth = new Item().setUnlocalizedName("powder_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_bismuth"); + ingot_mud = new Item().setUnlocalizedName("ingot_mud").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_mud"); + ingot_cft = new Item().setUnlocalizedName("ingot_cft").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cft"); + + ore_byproduct = new ItemByproduct().setUnlocalizedName("ore_byproduct").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":byproduct"); + + ore_bedrock = new ItemBedrockOre().setUnlocalizedName("ore_bedrock").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_bedrock"); + ore_centrifuged = new ItemBedrockOre().setUnlocalizedName("ore_centrifuged").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_centrifuged"); + ore_cleaned = new ItemBedrockOre().setUnlocalizedName("ore_cleaned").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_cleaned"); + ore_separated = new ItemBedrockOre().setUnlocalizedName("ore_separated").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_separated"); + ore_purified = new ItemBedrockOre().setUnlocalizedName("ore_purified").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_purified"); + ore_nitrated = new ItemBedrockOre().setUnlocalizedName("ore_nitrated").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_nitrated"); + ore_nitrocrystalline = new ItemBedrockOre().setUnlocalizedName("ore_nitrocrystalline").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_nitrocrystalline"); + ore_deepcleaned = new ItemBedrockOre().setUnlocalizedName("ore_deepcleaned").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_deepcleaned"); + ore_seared = new ItemBedrockOre().setUnlocalizedName("ore_seared").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_seared"); + ore_enriched = new ItemBedrockOre().setUnlocalizedName("ore_enriched").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_enriched"); + bedrock_ore_base = new ItemBedrockOreBase().setUnlocalizedName("bedrock_ore_base").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_new"); + bedrock_ore = new ItemBedrockOreNew().setUnlocalizedName("bedrock_ore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_new"); + bedrock_ore_fragment = new ItemAutogen(MaterialShapes.FRAGMENT).aot(Mats.MAT_BISMUTH, "bedrock_ore_fragment_bismuth").setUnlocalizedName("bedrock_ore_fragment").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_fragment"); + + ingot_lanthanium = new ItemCustomLore().setUnlocalizedName("ingot_lanthanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_lanthanium"); + ingot_actinium = new ItemCustomLore().setUnlocalizedName("ingot_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_actinium"); + + ingot_meteorite = new ItemHot(200).setUnlocalizedName("ingot_meteorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_meteorite"); + ingot_meteorite_forged = new ItemHot(200).setUnlocalizedName("ingot_meteorite_forged").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_meteorite_forged"); + blade_meteorite = new ItemHot(200).setUnlocalizedName("blade_meteorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":blade_meteorite"); + ingot_steel_dusted = new ItemHotDusted(200).setUnlocalizedName("ingot_steel_dusted").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_steel_dusted"); + ingot_chainsteel = new ItemHot(100).setUnlocalizedName("ingot_chainsteel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_chainsteel"); + + plate_armor_titanium = new Item().setUnlocalizedName("plate_armor_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_titanium"); + plate_armor_ajr = new Item().setUnlocalizedName("plate_armor_ajr").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_ajr"); + plate_armor_hev = new Item().setUnlocalizedName("plate_armor_hev").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_hev"); + plate_armor_lunar = new Item().setUnlocalizedName("plate_armor_lunar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_lunar"); + plate_armor_fau = new Item().setUnlocalizedName("plate_armor_fau").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_fau"); + plate_armor_dnt = new Item().setUnlocalizedName("plate_armor_dnt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_armor_dnt"); + + oil_tar = new ItemEnumMulti(EnumTarType.class, true, true).setUnlocalizedName("oil_tar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":oil_tar"); + solid_fuel = new Item().setUnlocalizedName("solid_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel"); + solid_fuel_presto = new Item().setUnlocalizedName("solid_fuel_presto").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel_presto"); + solid_fuel_presto_triplet = new Item().setUnlocalizedName("solid_fuel_presto_triplet").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel_presto_triplet"); + solid_fuel_bf = new Item().setUnlocalizedName("solid_fuel_bf").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel_bf"); + solid_fuel_presto_bf = new Item().setUnlocalizedName("solid_fuel_presto_bf").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel_presto_bf"); + solid_fuel_presto_triplet_bf = new Item().setUnlocalizedName("solid_fuel_presto_triplet_bf").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":solid_fuel_presto_triplet_bf"); + rocket_fuel = new Item().setUnlocalizedName("rocket_fuel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rocket_fuel"); + coke = new ItemEnumMulti(EnumCokeType.class, true, true).setUnlocalizedName("coke").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coke"); + lignite = new Item().setUnlocalizedName("lignite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":lignite"); + briquette = new ItemEnumMulti(EnumBriquetteType.class, true, true).setUnlocalizedName("briquette").setCreativeTab(MainRegistry.partsTab); + powder_lignite = new Item().setUnlocalizedName("powder_lignite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lignite"); + coal_infernal = new Item().setUnlocalizedName("coal_infernal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coal_infernal"); + cinnebar = new Item().setUnlocalizedName("cinnebar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":cinnebar"); + powder_ash = new ItemEnumMulti(EnumAshType.class, true, true).setUnlocalizedName("powder_ash").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_ash"); + powder_limestone = new Item().setUnlocalizedName("powder_limestone").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_limestone"); + powder_cement = new ItemLemon(2, 0.5F, false).setUnlocalizedName("powder_cement").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cement"); + + ingot_gh336 = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("ingot_gh336").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_gh336"); + nugget_gh336 = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("nugget_gh336").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_gh336"); + + ingot_australium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("ingot_australium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_australium"); + nugget_australium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("nugget_australium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_australium"); + nugget_australium_lesser = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("nugget_australium_lesser").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_australium_lesser"); + nugget_australium_greater = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("nugget_australium_greater").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_australium_greater"); + + nugget_th232 = new Item().setUnlocalizedName("nugget_th232").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_th232"); + nugget_uranium = new Item().setUnlocalizedName("nugget_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_uranium"); + nugget_u233 = new Item().setUnlocalizedName("nugget_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_u233"); + nugget_u235 = new Item().setUnlocalizedName("nugget_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_u235"); + nugget_u238 = new Item().setUnlocalizedName("nugget_u238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_u238"); + nugget_plutonium = new Item().setUnlocalizedName("nugget_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_plutonium"); + nugget_pu238 = new Item().setUnlocalizedName("nugget_pu238").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pu238"); + nugget_pu239 = new Item().setUnlocalizedName("nugget_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pu239"); + nugget_pu240 = new Item().setUnlocalizedName("nugget_pu240").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pu240"); + nugget_pu241 = new Item().setUnlocalizedName("nugget_pu241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pu241"); + nugget_pu_mix = new Item().setUnlocalizedName("nugget_pu_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pu_mix"); + nugget_am241 = new Item().setUnlocalizedName("nugget_am241").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_am241"); + nugget_am242 = new Item().setUnlocalizedName("nugget_am242").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_am242"); + nugget_am_mix = new Item().setUnlocalizedName("nugget_am_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_am_mix"); + nugget_neptunium = new Item().setUnlocalizedName("nugget_neptunium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_neptunium"); + nugget_polonium = new Item().setUnlocalizedName("nugget_polonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_polonium"); + nugget_technetium = new Item().setUnlocalizedName("nugget_technetium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_technetium"); + nugget_cobalt = new Item().setUnlocalizedName("nugget_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_cobalt"); + nugget_co60 = new Item().setUnlocalizedName("nugget_co60").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_co60"); + nugget_sr90 = new Item().setUnlocalizedName("nugget_sr90").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_sr90"); + nugget_au198 = new Item().setUnlocalizedName("nugget_au198").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_au198"); + nugget_pb209 = new Item().setUnlocalizedName("nugget_pb209").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_pb209"); + nugget_ra226 = new Item().setUnlocalizedName("nugget_ra226").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_ra226"); + nugget_actinium = new Item().setUnlocalizedName("nugget_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_actinium"); + plate_titanium = new Item().setUnlocalizedName("plate_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_titanium"); + plate_aluminium = new Item().setUnlocalizedName("plate_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_aluminium"); + neutron_reflector = new Item().setUnlocalizedName("neutron_reflector").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":neutron_reflector"); + nugget_lead = new Item().setUnlocalizedName("nugget_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_lead"); + ingot_bismuth = new ItemCustomLore().setUnlocalizedName("ingot_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_bismuth"); + nugget_bismuth = new Item().setUnlocalizedName("nugget_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_bismuth"); + ingot_arsenic = new ItemCustomLore().setUnlocalizedName("ingot_arsenic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_arsenic"); + nugget_arsenic = new Item().setUnlocalizedName("nugget_arsenic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_arsenic"); + ingot_tantalium = new ItemCustomLore().setUnlocalizedName("ingot_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_tantalium"); + nugget_tantalium = new ItemCustomLore().setUnlocalizedName("nugget_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_tantalium"); + ingot_silicon = new Item().setUnlocalizedName("ingot_silicon").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_silicon"); + billet_silicon = new Item().setUnlocalizedName("billet_silicon").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_silicon"); + nugget_silicon = new Item().setUnlocalizedName("nugget_silicon").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_silicon"); + ingot_niobium = new Item().setUnlocalizedName("ingot_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_niobium"); + nugget_niobium = new Item().setUnlocalizedName("nugget_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_niobium"); + ingot_osmiridium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("ingot_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_osmiridium"); + nugget_osmiridium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("nugget_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_osmiridium"); + nugget_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("nugget_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_schrabidium"); + nugget_beryllium = new Item().setUnlocalizedName("nugget_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_beryllium"); + hazmat_cloth = new Item().setUnlocalizedName("hazmat_cloth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hazmat_cloth"); + hazmat_cloth_red = new Item().setUnlocalizedName("hazmat_cloth_red").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hazmat_cloth_red"); + hazmat_cloth_grey = new Item().setUnlocalizedName("hazmat_cloth_grey").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hazmat_cloth_grey"); + asbestos_cloth = new Item().setUnlocalizedName("asbestos_cloth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":asbestos_cloth"); + rag = new ItemRag().setUnlocalizedName("rag").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rag"); + rag_damp = new Item().setUnlocalizedName("rag_damp").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rag_damp"); + rag_piss = new Item().setUnlocalizedName("rag_piss").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rag_piss"); + filter_coal = new Item().setUnlocalizedName("filter_coal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":filter_coal"); + ingot_hes = new Item().setUnlocalizedName("ingot_hes").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_hes"); + ingot_les = new Item().setUnlocalizedName("ingot_les").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_les"); + nugget_hes = new Item().setUnlocalizedName("nugget_hes").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_hes"); + nugget_les = new Item().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_coal = new Item().setUnlocalizedName("crystal_coal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_coal"); + 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_lapis = new Item().setUnlocalizedName("crystal_lapis").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_lapis"); + crystal_diamond = new Item().setUnlocalizedName("crystal_diamond").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_diamond"); + crystal_uranium = new Item().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 Item().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_schraranium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("crystal_schraranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_schraranium"); + crystal_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).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 Item().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_cobalt = new Item().setUnlocalizedName("crystal_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_cobalt"); + crystal_starmetal = new Item().setUnlocalizedName("crystal_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_starmetal"); + crystal_cinnebar = new Item().setUnlocalizedName("crystal_cinnebar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_cinnebar"); + crystal_trixite = new Item().setUnlocalizedName("crystal_trixite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_trixite"); + crystal_osmiridium = new Item().setUnlocalizedName("crystal_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_osmiridium"); + gem_sodalite = new ItemCustomLore().setUnlocalizedName("gem_sodalite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_sodalite"); + gem_tantalium = new ItemCustomLore().setUnlocalizedName("gem_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_tantalium"); + gem_volcanic = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("gem_volcanic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_volcanic"); + gem_rad = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("gem_rad").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_rad"); + gem_alexandrite = new ItemAlexandrite().setUnlocalizedName("gem_alexandrite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_alexandrite"); + + powder_lead = new Item().setUnlocalizedName("powder_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lead"); + powder_tantalium = new ItemCustomLore().setUnlocalizedName("powder_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tantalium"); + powder_neptunium = new Item().setUnlocalizedName("powder_neptunium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_neptunium"); + powder_polonium = new Item().setUnlocalizedName("powder_polonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_polonium"); + powder_co60 = new Item().setUnlocalizedName("powder_co60").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_co60"); + powder_sr90 = new Item().setUnlocalizedName("powder_sr90").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_sr90"); + powder_sr90_tiny = new Item().setUnlocalizedName("powder_sr90_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_sr90_tiny"); + powder_i131 = new Item().setUnlocalizedName("powder_i131").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_i131"); + powder_i131_tiny = new Item().setUnlocalizedName("powder_i131_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_i131_tiny"); + powder_xe135 = new Item().setUnlocalizedName("powder_xe135").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_xe135"); + powder_xe135_tiny = new Item().setUnlocalizedName("powder_xe135_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_xe135_tiny"); + powder_cs137 = new Item().setUnlocalizedName("powder_cs137").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cs137"); + powder_cs137_tiny = new Item().setUnlocalizedName("powder_cs137_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cs137_tiny"); + powder_au198 = new Item().setUnlocalizedName("powder_au198").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_au198"); + powder_ra226 = new Item().setUnlocalizedName("powder_ra226").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_ra226"); + powder_at209 = new Item().setUnlocalizedName("powder_at209").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_at209"); + powder_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("powder_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_schrabidium"); + powder_schrabidate = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("powder_schrabidate").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_schrabidate"); + powder_aluminium = new Item().setUnlocalizedName("powder_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_aluminium"); + powder_beryllium = new Item().setUnlocalizedName("powder_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_beryllium"); + powder_copper = new Item().setUnlocalizedName("powder_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_copper"); + powder_gold = new Item().setUnlocalizedName("powder_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_gold"); + powder_iron = new Item().setUnlocalizedName("powder_iron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_iron"); + powder_titanium = new Item().setUnlocalizedName("powder_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_titanium"); + powder_tungsten = new Item().setUnlocalizedName("powder_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tungsten"); + powder_uranium = new Item().setUnlocalizedName("powder_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_uranium"); + powder_plutonium = new Item().setUnlocalizedName("powder_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_plutonium"); + dust = new ItemCustomLore().setUnlocalizedName("dust").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":dust"); + dust_tiny = new Item().setUnlocalizedName("dust_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":dust_tiny"); + fallout = new Item().setUnlocalizedName("fallout").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fallout"); + powder_advanced_alloy = new Item().setUnlocalizedName("powder_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_advanced_alloy"); + powder_tcalloy = new Item().setUnlocalizedName("powder_tcalloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tcalloy"); + powder_coal = new Item().setUnlocalizedName("powder_coal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coal"); + powder_coal_tiny = new Item().setUnlocalizedName("powder_coal_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coal_tiny"); + powder_combine_steel = new Item().setUnlocalizedName("powder_combine_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_combine_steel"); + powder_diamond = new Item().setUnlocalizedName("powder_diamond").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_diamond"); + powder_emerald = new Item().setUnlocalizedName("powder_emerald").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_emerald"); + powder_lapis = new Item().setUnlocalizedName("powder_lapis").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lapis"); + powder_quartz = new Item().setUnlocalizedName("powder_quartz").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_quartz"); + powder_magnetized_tungsten = new Item().setUnlocalizedName("powder_magnetized_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_magnetized_tungsten"); + powder_chlorophyte = new Item().setUnlocalizedName("powder_chlorophyte").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_chlorophyte"); + powder_red_copper = new Item().setUnlocalizedName("powder_red_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_red_copper"); + powder_steel = new Item().setUnlocalizedName("powder_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_steel"); + powder_lithium = new Item().setUnlocalizedName("powder_lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lithium"); + powder_zirconium = new Item().setUnlocalizedName("powder_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_zirconium"); + powder_sodium = new Item().setUnlocalizedName("powder_sodium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_sodium"); + powder_power = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("powder_power").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_energy_alt"); + powder_iodine = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_iodine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_iodine"); + powder_thorium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("powder_thorium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_thorium"); + powder_neodymium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_neodymium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_neodymium"); + powder_astatine = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_astatine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_astatine"); + powder_caesium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_caesium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_caesium"); + powder_australium = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("powder_australium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_australium"); + powder_strontium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_strontium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_strontium"); + powder_cobalt = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cobalt"); + powder_bromine = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_bromine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_bromine"); + powder_niobium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_niobium"); + powder_tennessine = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_tennessine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tennessine"); + powder_cerium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_cerium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cerium"); + powder_dura_steel = new ItemCustomLore().setUnlocalizedName("powder_dura_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_dura_steel"); + powder_polymer = new ItemCustomLore().setUnlocalizedName("powder_polymer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_polymer"); + powder_bakelite = new ItemCustomLore().setUnlocalizedName("powder_bakelite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_bakelite"); + powder_euphemium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_euphemium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_euphemium"); + powder_meteorite = new Item().setUnlocalizedName("powder_meteorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_meteorite"); + powder_lanthanium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_lanthanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lanthanium"); + powder_actinium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_actinium"); + powder_boron = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("powder_boron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_boron"); + powder_semtex_mix = new Item().setUnlocalizedName("powder_semtex_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_semtex_mix"); + powder_desh_mix = new Item().setUnlocalizedName("powder_desh_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_desh_mix"); + powder_desh_ready = new Item().setUnlocalizedName("powder_desh_ready").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_desh_ready"); + powder_nitan_mix = new Item().setUnlocalizedName("powder_nitan_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_nitan_mix"); + powder_spark_mix = new Item().setUnlocalizedName("powder_spark_mix").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_spark_mix"); + powder_desh = new Item().setUnlocalizedName("powder_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_desh"); + powder_steel_tiny = new Item().setUnlocalizedName("powder_steel_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_steel_tiny"); + powder_lithium_tiny = new Item().setUnlocalizedName("powder_lithium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lithium_tiny"); + powder_neodymium_tiny = new Item().setUnlocalizedName("powder_neodymium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_neodymium_tiny"); + powder_cobalt_tiny = new Item().setUnlocalizedName("powder_cobalt_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cobalt_tiny"); + powder_niobium_tiny = new Item().setUnlocalizedName("powder_niobium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_niobium_tiny"); + powder_cerium_tiny = new Item().setUnlocalizedName("powder_cerium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cerium_tiny"); + powder_lanthanium_tiny = new Item().setUnlocalizedName("powder_lanthanium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lanthanium_tiny"); + powder_actinium_tiny = new Item().setUnlocalizedName("powder_actinium_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_actinium_tiny"); + powder_boron_tiny = new Item().setUnlocalizedName("powder_boron_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_boron_tiny"); + powder_meteorite_tiny = new Item().setUnlocalizedName("powder_meteorite_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_meteorite_tiny"); + powder_yellowcake = new Item().setUnlocalizedName("powder_yellowcake").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_yellowcake"); + powder_magic = new Item().setUnlocalizedName("powder_magic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_magic"); + powder_balefire = new Item().setUnlocalizedName("powder_balefire").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_balefire"); + powder_sawdust = new Item().setUnlocalizedName("powder_sawdust").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_sawdust"); + powder_flux = new Item().setUnlocalizedName("powder_flux").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_flux"); + powder_fertilizer = new ItemFertilizer().setUnlocalizedName("powder_fertilizer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_fertilizer"); + powder_coltan_ore = new Item().setUnlocalizedName("powder_coltan_ore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coltan_ore"); + powder_coltan = new Item().setUnlocalizedName("powder_coltan").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coltan"); + powder_tektite = new Item().setUnlocalizedName("powder_tektite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tektite"); + powder_paleogenite = new Item().setUnlocalizedName("powder_paleogenite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_paleogenite"); + powder_paleogenite_tiny = new Item().setUnlocalizedName("powder_paleogenite_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_paleogenite_tiny"); + powder_impure_osmiridium = new Item().setUnlocalizedName("powder_impure_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_impure_osmiridium"); + powder_borax = new Item().setUnlocalizedName("powder_borax").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_borax"); + powder_chlorocalcite = new Item().setUnlocalizedName("powder_chlorocalcite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_chlorocalcite"); + powder_molysite = new Item().setUnlocalizedName("powder_molysite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_molysite"); + + fragment_neodymium = new Item().setUnlocalizedName("fragment_neodymium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_neodymium"); + fragment_cobalt = new Item().setUnlocalizedName("fragment_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_cobalt"); + fragment_niobium = new Item().setUnlocalizedName("fragment_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_niobium"); + fragment_cerium = new Item().setUnlocalizedName("fragment_cerium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_cerium"); + fragment_lanthanium = new Item().setUnlocalizedName("fragment_lanthanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_lanthanium"); + fragment_actinium = new Item().setUnlocalizedName("fragment_actinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_actinium"); + fragment_boron = new Item().setUnlocalizedName("fragment_boron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_boron"); + fragment_meteorite = new Item().setUnlocalizedName("fragment_meteorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_meteorite"); + fragment_coltan = new Item().setUnlocalizedName("fragment_coltan").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_coltan"); + chunk_ore = new ItemEnumMulti(EnumChunkType.class, true, true).setUnlocalizedName("chunk_ore").setCreativeTab(MainRegistry.partsTab); + + biomass = new Item().setUnlocalizedName("biomass").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":biomass"); + biomass_compressed = new Item().setUnlocalizedName("biomass_compressed").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":biomass_compressed"); + bio_wafer = new ItemLemon(4, 2F, false).setUnlocalizedName("bio_wafer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bio_wafer"); + plant_item = new ItemEnumMulti(EnumPlantType.class, true, true).setUnlocalizedName("plant_item").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plant_item"); + + coil_copper = new Item().setUnlocalizedName("coil_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_copper"); + coil_copper_torus = new Item().setUnlocalizedName("coil_copper_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_copper_torus"); + coil_tungsten = new Item().setUnlocalizedName("coil_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_tungsten"); + tank_steel = new Item().setUnlocalizedName("tank_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":tank_steel"); + motor = new Item().setUnlocalizedName("motor").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":motor"); + motor_desh = new Item().setUnlocalizedName("motor_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":motor_desh"); + motor_bismuth = new Item().setUnlocalizedName("motor_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":motor_bismuth"); + centrifuge_element = new Item().setUnlocalizedName("centrifuge_element").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":centrifuge_element"); + reactor_core = new Item().setUnlocalizedName("reactor_core").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":reactor_core"); + rtg_unit = new Item().setUnlocalizedName("rtg_unit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rtg_unit"); + levitation_unit = new Item().setUnlocalizedName("levitation_unit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":levitation_unit"); + coil_magnetized_tungsten = new Item().setUnlocalizedName("coil_magnetized_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_magnetized_tungsten"); + coil_gold = new Item().setUnlocalizedName("coil_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold"); + coil_gold_torus = new Item().setUnlocalizedName("coil_gold_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold_torus"); + component_limiter = new Item().setUnlocalizedName("component_limiter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_limiter"); + component_emitter = new Item().setUnlocalizedName("component_emitter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_emitter"); + chlorine_pinwheel = new ItemInfiniteFluid(Fluids.CHLORINE, 1, 2).setUnlocalizedName("chlorine_pinwheel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chlorine_pinwheel"); + FluidTank.noDualUnload.add(chlorine_pinwheel); + ring_starmetal = new Item().setUnlocalizedName("ring_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ring_starmetal"); + flywheel_beryllium = new Item().setUnlocalizedName("flywheel_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flywheel_beryllium"); + deuterium_filter = new Item().setUnlocalizedName("deuterium_filter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":deuterium_filter"); + parts_legendary = new ItemEnumMulti(EnumLegendaryType.class, false, true).setUnlocalizedName("parts_legendary").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":parts_legendary"); + + gear_large = new ItemGear().setUnlocalizedName("gear_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gear_large"); + sawblade = new Item().setUnlocalizedName("sawblade").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sawblade"); + + shell = new ItemAutogen(MaterialShapes.SHELL).oun("shellntm").setUnlocalizedName("shell").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":shell"); + pipe = new ItemAutogen(MaterialShapes.PIPE).oun("pipentm").setUnlocalizedName("pipe").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pipe"); + fins_flat = new Item().setUnlocalizedName("fins_flat").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fins_flat"); + fins_small_steel = new Item().setUnlocalizedName("fins_small_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fins_small_steel"); + fins_big_steel = new Item().setUnlocalizedName("fins_big_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fins_big_steel"); + fins_tri_steel = new Item().setUnlocalizedName("fins_tri_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fins_tri_steel"); + fins_quad_titanium = new Item().setUnlocalizedName("fins_quad_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fins_quad_titanium"); + sphere_steel = new Item().setUnlocalizedName("sphere_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sphere_steel"); + pedestal_steel = new Item().setUnlocalizedName("pedestal_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pedestal_steel"); + dysfunctional_reactor = new Item().setUnlocalizedName("dysfunctional_reactor").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":dysfunctional_reactor"); + blade_titanium = new Item().setUnlocalizedName("blade_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":blade_titanium"); + turbine_titanium = new Item().setUnlocalizedName("turbine_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":turbine_titanium"); + blade_tungsten = new Item().setUnlocalizedName("blade_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":blade_tungsten"); + turbine_tungsten = new Item().setUnlocalizedName("turbine_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":turbine_tungsten"); + + toothpicks = new Item().setUnlocalizedName("toothpicks").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":toothpicks"); + ducttape = new Item().setUnlocalizedName("ducttape").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ducttape"); + catalyst_clay = new Item().setUnlocalizedName("catalyst_clay").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":catalyst_clay"); + + warhead_generic_small = new Item().setUnlocalizedName("warhead_generic_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_generic_small"); + warhead_generic_medium = new Item().setUnlocalizedName("warhead_generic_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_generic_medium"); + warhead_generic_large = new Item().setUnlocalizedName("warhead_generic_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_generic_large"); + warhead_incendiary_small = new Item().setUnlocalizedName("warhead_incendiary_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_incendiary_small"); + warhead_incendiary_medium = new Item().setUnlocalizedName("warhead_incendiary_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_incendiary_medium"); + warhead_incendiary_large = new Item().setUnlocalizedName("warhead_incendiary_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_incendiary_large"); + warhead_cluster_small = new Item().setUnlocalizedName("warhead_cluster_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_cluster_small"); + warhead_cluster_medium = new Item().setUnlocalizedName("warhead_cluster_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_cluster_medium"); + warhead_cluster_large = new Item().setUnlocalizedName("warhead_cluster_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_cluster_large"); + warhead_buster_small = new Item().setUnlocalizedName("warhead_buster_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_buster_small"); + warhead_buster_medium = new Item().setUnlocalizedName("warhead_buster_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_buster_medium"); + warhead_buster_large = new Item().setUnlocalizedName("warhead_buster_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_buster_large"); + warhead_nuclear = new Item().setUnlocalizedName("warhead_nuclear").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_nuclear"); + warhead_mirv = new Item().setUnlocalizedName("warhead_mirv").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_mirv"); + warhead_volcano = new Item().setUnlocalizedName("warhead_volcano").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":warhead_volcano"); + + fuel_tank_small = new Item().setUnlocalizedName("fuel_tank_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fuel_tank_small"); + fuel_tank_medium = new Item().setUnlocalizedName("fuel_tank_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fuel_tank_medium"); + fuel_tank_large = new Item().setUnlocalizedName("fuel_tank_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fuel_tank_large"); + + thruster_small = new Item().setUnlocalizedName("thruster_small").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_small"); + thruster_medium = new Item().setUnlocalizedName("thruster_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_medium"); + thruster_large = new Item().setUnlocalizedName("thruster_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_large"); + + sat_head_mapper = new Item().setUnlocalizedName("sat_head_mapper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_mapper"); + sat_head_scanner = new Item().setUnlocalizedName("sat_head_scanner").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_scanner"); + sat_head_radar = new Item().setUnlocalizedName("sat_head_radar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_radar"); + sat_head_laser = new Item().setUnlocalizedName("sat_head_laser").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_laser"); + sat_head_resonator = new Item().setUnlocalizedName("sat_head_resonator").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_resonator"); + + seg_10 = new Item().setUnlocalizedName("seg_10").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_10"); + seg_15 = new Item().setUnlocalizedName("seg_15").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_15"); + seg_20 = new Item().setUnlocalizedName("seg_20").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_20"); + + chopper_head = new Item().setUnlocalizedName("chopper_head").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_head"); + chopper_gun = new Item().setUnlocalizedName("chopper_gun").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_gun"); + chopper_torso = new Item().setUnlocalizedName("chopper_torso").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_torso"); + chopper_tail = new Item().setUnlocalizedName("chopper_tail").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_tail"); + chopper_wing = new Item().setUnlocalizedName("chopper_wing").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_wing"); + chopper_blades = new Item().setUnlocalizedName("chopper_blades").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_blades"); + combine_scrap = new Item().setUnlocalizedName("combine_scrap").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":combine_scrap"); + + shimmer_head = new Item().setUnlocalizedName("shimmer_head").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":shimmer_head_original"); + shimmer_axe_head = new Item().setUnlocalizedName("shimmer_axe_head").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":shimmer_axe_head"); + shimmer_handle = new Item().setUnlocalizedName("shimmer_handle").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":shimmer_handle"); + + entanglement_kit = new ItemCustomLore().setUnlocalizedName("entanglement_kit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":entanglement_kit"); + + circuit = new ItemCircuit().setUnlocalizedName("circuit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":circuit"); + crt_display = new Item().setUnlocalizedName("crt_display").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crt_display"); + circuit_star_piece = (ItemEnumMulti) new ItemEnumMulti(ScrapType.class, true, true).setUnlocalizedName("circuit_star_piece").setCreativeTab(null); + circuit_star_component = (ItemEnumMulti) new ItemCircuitStarComponent().setUnlocalizedName("circuit_star_component").setCreativeTab(null); + circuit_star = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("circuit_star").setCreativeTab(null).setTextureName(RefStrings.MODID + ":circuit_star"); + assembly_nuke = new Item().setUnlocalizedName("assembly_nuke").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":assembly_nuke"); + casing = new ItemEnumMulti(ItemEnums.EnumCasingType.class, true, true).setUnlocalizedName("casing").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":casing"); + + wiring_red_copper = new ItemWiring().setUnlocalizedName("wiring_red_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":wiring_red_copper"); + + pellet_rtg_depleted = new ItemRTGPelletDepleted().setContainerItem(plate_iron).setUnlocalizedName("pellet_rtg_depleted").setCreativeTab(MainRegistry.controlTab); + + pellet_rtg_radium = new ItemRTGPellet(3).setDecays(DepletedRTGMaterial.LEAD, (long) (RTGUtil.getLifespan(16.0F, HalfLifeType.LONG, false) * 1.5)).setUnlocalizedName("pellet_rtg_radium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_radium"); + pellet_rtg_weak = new ItemRTGPellet(5).setDecays(DepletedRTGMaterial.LEAD, (long) (RTGUtil.getLifespan(1.0F, HalfLifeType.LONG, false) * 1.5)).setUnlocalizedName("pellet_rtg_weak").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_weak"); + pellet_rtg = new ItemRTGPellet(10).setDecays(DepletedRTGMaterial.LEAD, (long) (RTGUtil.getLifespan(87.7F, HalfLifeType.MEDIUM, false) * 1.5)).setUnlocalizedName("pellet_rtg").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg"); + pellet_rtg_strontium = new ItemRTGPellet(15).setDecays(DepletedRTGMaterial.ZIRCONIUM, (long) (RTGUtil.getLifespan(29.0F, HalfLifeType.MEDIUM, false) * 1.5)).setUnlocalizedName("pellet_rtg_strontium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pellet_rtg_strontium"); + pellet_rtg_cobalt = new ItemRTGPellet(15).setDecays(DepletedRTGMaterial.NICKEL, (long) (RTGUtil.getLifespan(5.3F, HalfLifeType.MEDIUM, false) * 1.5)).setUnlocalizedName("pellet_rtg_cobalt").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pellet_rtg_cobalt"); + pellet_rtg_actinium = new ItemRTGPellet(20).setDecays(DepletedRTGMaterial.LEAD, (long) (RTGUtil.getLifespan(21.8F, HalfLifeType.MEDIUM, false) * 1.5)).setUnlocalizedName("pellet_rtg_actinium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pellet_rtg_actinium"); + pellet_rtg_americium = new ItemRTGPellet(20).setDecays(DepletedRTGMaterial.NEPTUNIUM, (long) (RTGUtil.getLifespan(4.7F, HalfLifeType.LONG, false) * 1.5)).setUnlocalizedName("pellet_rtg_americium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_americium"); + pellet_rtg_polonium = new ItemRTGPellet(50).setDecays(DepletedRTGMaterial.LEAD, (long) (RTGUtil.getLifespan(138.0F, HalfLifeType.SHORT, false) * 1.5)).setUnlocalizedName("pellet_rtg_polonium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_polonium"); + pellet_rtg_gold = new ItemRTGPellet(VersatileConfig.rtgDecay() ? 200 : 100).setDecays(DepletedRTGMaterial.MERCURY, (long) (RTGUtil.getLifespan(2.7F, HalfLifeType.SHORT, false) * 1.5)).setUnlocalizedName("pellet_rtg_gold").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pellet_rtg_gold"); + pellet_rtg_lead = new ItemRTGPellet(VersatileConfig.rtgDecay() ? 600 : 200).setDecays(DepletedRTGMaterial.BISMUTH, (long) (RTGUtil.getLifespan(0.3F, HalfLifeType.SHORT, false) * 1.5)).setUnlocalizedName("pellet_rtg_lead").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pellet_rtg_lead"); + + tritium_deuterium_cake = new ItemCustomLore().setUnlocalizedName("tritium_deuterium_cake").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":tritium_deuterium_cake"); + + piston_selenium = new Item().setUnlocalizedName("piston_selenium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":piston_selenium"); + piston_set = new ItemPistons().setUnlocalizedName("piston_set").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1); + drillbit = new ItemDrillbit().setUnlocalizedName("drillbit").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1); + + rune_blank = new ItemCustomLore().setEffect().setUnlocalizedName("rune_blank").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_blank"); + rune_isa = new ItemCustomLore().setEffect().setUnlocalizedName("rune_isa").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_isa"); + rune_dagaz = new ItemCustomLore().setEffect().setUnlocalizedName("rune_dagaz").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_dagaz"); + rune_hagalaz = new ItemCustomLore().setEffect().setUnlocalizedName("rune_hagalaz").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_hagalaz"); + rune_jera = new ItemCustomLore().setEffect().setUnlocalizedName("rune_jera").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_jera"); + rune_thurisaz = new ItemCustomLore().setEffect().setUnlocalizedName("rune_thurisaz").setCreativeTab(MainRegistry.partsTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":rune_thurisaz"); + + ams_catalyst_blank = new Item().setUnlocalizedName("ams_catalyst_blank").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_blank"); + ams_catalyst_aluminium = new ItemCatalyst(0xCCCCCC, 1000000, 1.15F, 0.85F, 1.15F).setUnlocalizedName("ams_catalyst_aluminium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_aluminium"); + ams_catalyst_beryllium = new ItemCatalyst(0x97978B, 0, 1.25F, 0.95F, 1.05F).setUnlocalizedName("ams_catalyst_beryllium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_beryllium"); + ams_catalyst_caesium = new ItemCatalyst(0x6400FF, 2500000, 1.00F, 0.85F, 1.15F).setUnlocalizedName("ams_catalyst_caesium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_caesium"); + ams_catalyst_cerium = new ItemCatalyst(0x1D3FFF, 1000000, 1.15F, 1.15F, 0.85F).setUnlocalizedName("ams_catalyst_cerium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_cerium"); + ams_catalyst_cobalt = new ItemCatalyst(0x789BBE, 0, 1.25F, 1.05F, 0.95F).setUnlocalizedName("ams_catalyst_cobalt").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_cobalt"); + ams_catalyst_copper = new ItemCatalyst(0xAADE29, 0, 1.25F, 1.00F, 1.00F).setUnlocalizedName("ams_catalyst_copper").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_copper"); + ams_catalyst_dineutronium = new ItemCatalyst(0x334077, 2500000, 1.00F, 1.15F, 0.85F).setUnlocalizedName("ams_catalyst_dineutronium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_dineutronium"); + ams_catalyst_euphemium = new ItemCatalyst(0xFF9CD2, 2500000, 1.00F, 1.00F, 1.00F).setUnlocalizedName("ams_catalyst_euphemium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_euphemium"); + ams_catalyst_iron = new ItemCatalyst(0xFF7E22, 1000000, 1.15F, 0.95F, 1.05F).setUnlocalizedName("ams_catalyst_iron").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_iron"); + ams_catalyst_lithium = new ItemCatalyst(0xFF2727, 0, 1.25F, 0.85F, 1.15F).setUnlocalizedName("ams_catalyst_lithium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_lithium"); + ams_catalyst_niobium = new ItemCatalyst(0x3BF1B6, 1000000, 1.15F, 1.05F, 0.95F).setUnlocalizedName("ams_catalyst_niobium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_niobium"); + ams_catalyst_schrabidium = new ItemCatalyst(0x32FFFF, 2500000, 1.00F, 1.05F, 0.95F).setUnlocalizedName("ams_catalyst_schrabidium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_schrabidium"); + ams_catalyst_strontium = new ItemCatalyst(0xDD0D35, 1000000, 1.15F, 1.00F, 1.00F).setUnlocalizedName("ams_catalyst_strontium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_strontium"); + ams_catalyst_thorium = new ItemCatalyst(0x653B22, 2500000, 1.00F, 0.95F, 1.05F).setUnlocalizedName("ams_catalyst_thorium").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_thorium"); + ams_catalyst_tungsten = new ItemCatalyst(0xF5FF48, 0, 1.25F, 1.15F, 0.85F).setUnlocalizedName("ams_catalyst_tungsten").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ams_catalyst_tungsten"); + + cell_empty = new Item().setUnlocalizedName("cell_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":cell_empty"); + cell_uf6 = new Item().setUnlocalizedName("cell_uf6").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_uf6"); + cell_puf6 = new Item().setUnlocalizedName("cell_puf6").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_puf6"); + cell_antimatter = new ItemDrop().setUnlocalizedName("cell_antimatter").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_antimatter"); + cell_deuterium = new Item().setUnlocalizedName("cell_deuterium").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_deuterium"); + cell_tritium = new Item().setUnlocalizedName("cell_tritium").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_tritium"); + cell_sas3 = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("cell_sas3").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_sas3"); + cell_anti_schrabidium = new ItemDrop().setUnlocalizedName("cell_anti_schrabidium").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_anti_schrabidium"); + cell_balefire = new Item().setUnlocalizedName("cell_balefire").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_balefire"); + + demon_core_open = new ItemDemonCore().setUnlocalizedName("demon_core_open").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":demon_core_open"); + demon_core_closed = new Item().setUnlocalizedName("demon_core_closed").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":demon_core_closed"); + + pa_coil = new ItemPACoil().setUnlocalizedName("pa_coil").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pa_coil"); + + particle_empty = new Item().setUnlocalizedName("particle_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":particle_empty"); + particle_hydrogen = new Item().setUnlocalizedName("particle_hydrogen").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_hydrogen"); + particle_copper = new Item().setUnlocalizedName("particle_copper").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_copper"); + particle_lead = new Item().setUnlocalizedName("particle_lead").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_lead"); + particle_aproton = new Item().setUnlocalizedName("particle_aproton").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_aproton"); + particle_aelectron = new Item().setUnlocalizedName("particle_aelectron").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_aelectron"); + particle_amat = new Item().setUnlocalizedName("particle_amat").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_amat"); + particle_aschrab = new Item().setUnlocalizedName("particle_aschrab").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_aschrab"); + particle_higgs = new Item().setUnlocalizedName("particle_higgs").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_higgs"); + particle_muon = new Item().setUnlocalizedName("particle_muon").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_muon"); + particle_tachyon = new Item().setUnlocalizedName("particle_tachyon").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_tachyon"); + particle_strange = new Item().setUnlocalizedName("particle_strange").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_strange"); + particle_dark = new Item().setUnlocalizedName("particle_dark").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_dark"); + particle_sparkticle = new Item().setUnlocalizedName("particle_sparkticle").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_sparkticle"); + particle_digamma = new ItemDigamma(60).setUnlocalizedName("particle_digamma").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_digamma"); + particle_lutece = new Item().setUnlocalizedName("particle_lutece").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_lutece"); + + singularity = new ItemDrop().setUnlocalizedName("singularity").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity"); + singularity_counter_resonant = new ItemDrop().setUnlocalizedName("singularity_counter_resonant").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity_alt"); + singularity_super_heated = new ItemDrop().setUnlocalizedName("singularity_super_heated").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity_5"); + black_hole = new ItemDrop().setUnlocalizedName("black_hole").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity_4"); + singularity_spark = new ItemDrop().setUnlocalizedName("singularity_spark").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity_spark_alt"); + pellet_antimatter = new ItemDrop().setUnlocalizedName("pellet_antimatter").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":pellet_antimatter"); + crystal_xen = new ItemDrop().setUnlocalizedName("crystal_xen").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":crystal_xen"); + + stamp_stone_flat = new ItemStamp(32, StampType.FLAT).setUnlocalizedName("stamp_stone_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_flat"); + stamp_stone_plate = new ItemStamp(32, StampType.PLATE).setUnlocalizedName("stamp_stone_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_plate"); + stamp_stone_wire = new ItemStamp(32, StampType.WIRE).setUnlocalizedName("stamp_stone_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_wire"); + stamp_stone_circuit = new ItemStamp(32, StampType.CIRCUIT).setUnlocalizedName("stamp_stone_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_circuit"); + stamp_iron_flat = new ItemStamp(64, StampType.FLAT).setUnlocalizedName("stamp_iron_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_flat"); + stamp_iron_plate = new ItemStamp(64, StampType.PLATE).setUnlocalizedName("stamp_iron_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_plate"); + stamp_iron_wire = new ItemStamp(64, StampType.WIRE).setUnlocalizedName("stamp_iron_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_wire"); + stamp_iron_circuit = new ItemStamp(64, StampType.CIRCUIT).setUnlocalizedName("stamp_iron_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_circuit"); + stamp_steel_flat = new ItemStamp(192, StampType.FLAT).setUnlocalizedName("stamp_steel_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_flat"); + stamp_steel_plate = new ItemStamp(192, StampType.PLATE).setUnlocalizedName("stamp_steel_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_plate"); + stamp_steel_wire = new ItemStamp(192, StampType.WIRE).setUnlocalizedName("stamp_steel_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_wire"); + stamp_steel_circuit = new ItemStamp(192, StampType.CIRCUIT).setUnlocalizedName("stamp_steel_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_circuit"); + stamp_titanium_flat = new ItemStamp(256, StampType.FLAT).setUnlocalizedName("stamp_titanium_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_flat"); + stamp_titanium_plate = new ItemStamp(256, StampType.PLATE).setUnlocalizedName("stamp_titanium_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_plate"); + stamp_titanium_wire = new ItemStamp(256, StampType.WIRE).setUnlocalizedName("stamp_titanium_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_wire"); + stamp_titanium_circuit = new ItemStamp(256, StampType.CIRCUIT).setUnlocalizedName("stamp_titanium_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_circuit"); + stamp_obsidian_flat = new ItemStamp(512, StampType.FLAT).setUnlocalizedName("stamp_obsidian_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_flat"); + stamp_obsidian_plate = new ItemStamp(512, StampType.PLATE).setUnlocalizedName("stamp_obsidian_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_plate"); + stamp_obsidian_wire = new ItemStamp(512, StampType.WIRE).setUnlocalizedName("stamp_obsidian_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_wire"); + stamp_obsidian_circuit = new ItemStamp(512, StampType.CIRCUIT).setUnlocalizedName("stamp_obsidian_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_circuit"); + stamp_desh_flat = new ItemStamp(0, StampType.FLAT).setUnlocalizedName("stamp_desh_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_flat"); + stamp_desh_plate = new ItemStamp(0, StampType.PLATE).setUnlocalizedName("stamp_desh_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_plate"); + stamp_desh_wire = new ItemStamp(0, StampType.WIRE).setUnlocalizedName("stamp_desh_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_wire"); + stamp_desh_circuit = new ItemStamp(0, StampType.CIRCUIT).setUnlocalizedName("stamp_desh_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_circuit"); + stamp_357 = new ItemStamp(1000, StampType.C357).setUnlocalizedName("stamp_357").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_357"); + stamp_44 = new ItemStamp(1000, StampType.C44).setUnlocalizedName("stamp_44").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_44"); + stamp_9 = new ItemStamp(1000, StampType.C9).setUnlocalizedName("stamp_9").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_9"); + stamp_50 = new ItemStamp(1000, StampType.C50).setUnlocalizedName("stamp_50").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_50"); + stamp_book = new ItemStampBook().setUnlocalizedName("stamp_book").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":stamp_book"); + + stamp_desh_357 = new ItemStamp(0, StampType.C357).setUnlocalizedName("stamp_desh_357").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_357_desh"); + stamp_desh_44 = new ItemStamp(0, StampType.C44).setUnlocalizedName("stamp_desh_44").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_44_desh"); + stamp_desh_9 = new ItemStamp(0, StampType.C9).setUnlocalizedName("stamp_desh_9").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_9_desh"); + stamp_desh_50 = new ItemStamp(0, StampType.C50).setUnlocalizedName("stamp_desh_50").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_50_desh"); + + blades_steel = new ItemBlades(200).setUnlocalizedName("blades_steel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":blades_steel"); + blades_titanium = new ItemBlades(350).setUnlocalizedName("blades_titanium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":blades_titanium"); + blades_advanced_alloy = new ItemBlades(700).setUnlocalizedName("blades_advanced_alloy").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":blades_advanced_alloy"); + blades_desh = new ItemBlades(0).setUnlocalizedName("blades_desh").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":blades_desh"); + + mold_base = new Item().setUnlocalizedName("mold_base").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":mold_base"); + mold = new ItemMold().setUnlocalizedName("mold").setCreativeTab(MainRegistry.controlTab); + scraps = new ItemScraps().aot(Mats.MAT_BISMUTH, "scraps_bismuth").setUnlocalizedName("scraps").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":scraps"); + ingot_raw = new ItemAutogen(MaterialShapes.INGOT).setUnlocalizedName("ingot_raw").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_raw"); + plate_cast = new ItemAutogen(MaterialShapes.CASTPLATE).aot(Mats.MAT_BISMUTH, "plate_cast_bismuth").setUnlocalizedName("plate_cast").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_cast"); + plate_welded = new ItemAutogen(MaterialShapes.WELDEDPLATE).setUnlocalizedName("plate_welded").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_welded"); + heavy_component = new ItemAutogen(MaterialShapes.HEAVY_COMPONENT).setUnlocalizedName("heavy_component").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":heavy_component"); + wire_fine = new ItemAutogen(MaterialShapes.WIRE) + .aot(Mats.MAT_ALUMINIUM, "wire_aluminium").aot(Mats.MAT_COPPER, "wire_copper") + .aot(Mats.MAT_MINGRADE, "wire_red_copper").aot(Mats.MAT_GOLD, "wire_gold") + .aot(Mats.MAT_TUNGSTEN, "wire_tungsten").aot(Mats.MAT_ALLOY, "wire_advanced_alloy") + .aot(Mats.MAT_CARBON, "wire_carbon").aot(Mats.MAT_SCHRABIDIUM, "wire_schrabidium") + .aot(Mats.MAT_MAGTUNG, "wire_magnetized_tungsten").setUnlocalizedName("wire_fine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":wire_fine"); + wire_dense = new ItemAutogen(MaterialShapes.DENSEWIRE).setUnlocalizedName("wire_dense").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":wire_dense"); + + part_barrel_light = new ItemAutogen(MaterialShapes.LIGHTBARREL).setUnlocalizedName("part_barrel_light").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_barrel_light"); + part_barrel_heavy = new ItemAutogen(MaterialShapes.HEAVYBARREL).setUnlocalizedName("part_barrel_heavy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_barrel_heavy"); + part_receiver_light = new ItemAutogen(MaterialShapes.LIGHTRECEIVER).setUnlocalizedName("part_receiver_light").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_receiver_light"); + part_receiver_heavy = new ItemAutogen(MaterialShapes.HEAVYRECEIVER).setUnlocalizedName("part_receiver_heavy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_receiver_heavy"); + part_mechanism = new ItemAutogen(MaterialShapes.MECHANISM).setUnlocalizedName("part_mechanism").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_mechanism"); + part_stock = new ItemAutogen(MaterialShapes.STOCK).setUnlocalizedName("part_stock").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_stock"); + part_grip = new ItemAutogen(MaterialShapes.GRIP).setUnlocalizedName("part_grip").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_grip"); + + part_lithium = new Item().setUnlocalizedName("part_lithium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_lithium"); + part_beryllium = new Item().setUnlocalizedName("part_beryllium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_beryllium"); + part_carbon = new Item().setUnlocalizedName("part_carbon").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_carbon"); + part_copper = new Item().setUnlocalizedName("part_copper").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_copper"); + part_plutonium = new Item().setUnlocalizedName("part_plutonium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_plutonium"); + + laser_crystal_co2 = new ItemFELCrystal(EnumWavelengths.IR).setUnlocalizedName("laser_crystal_co2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":laser_crystal_co2"); + laser_crystal_bismuth = new ItemFELCrystal(EnumWavelengths.VISIBLE).setUnlocalizedName("laser_crystal_bismuth").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":laser_crystal_bismuth"); + laser_crystal_cmb = new ItemFELCrystal(EnumWavelengths.UV).setUnlocalizedName("laser_crystal_cmb").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":laser_crystal_cmb"); + laser_crystal_dnt = new ItemFELCrystal(EnumWavelengths.GAMMA).setUnlocalizedName("laser_crystal_dnt").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":laser_crystal_dnt"); + laser_crystal_digamma = new ItemFELCrystal(EnumWavelengths.DRX).setUnlocalizedName("laser_crystal_digamma").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":laser_crystal_digamma"); + + thermo_element = new Item().setUnlocalizedName("thermo_element").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":thermo_element"); + catalytic_converter = new Item().setUnlocalizedName("catalytic_converter").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":catalytic_converter"); + + fuel_additive = new ItemEnumMulti(ItemEnums.EnumFuelAdditive.class, true, true).setUnlocalizedName("fuel_additive").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fuel_additive"); + + canister_empty = new ItemCustomLore().setUnlocalizedName("canister_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":canister_empty"); + canister_full = new ItemCanister().setUnlocalizedName("canister_full").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.canister_empty).setTextureName(RefStrings.MODID + ":canister_empty"); + canister_napalm = new ItemCustomLore().setUnlocalizedName("canister_napalm").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.canister_empty).setTextureName(RefStrings.MODID + ":canister_napalm"); + gas_empty = new Item().setUnlocalizedName("gas_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":gas_empty"); + gas_full = new ItemGasTank().setUnlocalizedName("gas_full").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.gas_empty).setTextureName(RefStrings.MODID + ":gas_empty"); + + ItemSimpleConsumable.init(); + + //TODO: move all this crap to ItemSimpleConsumable + syringe_empty = new Item().setUnlocalizedName("syringe_empty").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_empty"); + syringe_metal_empty = new Item().setUnlocalizedName("syringe_metal_empty").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_empty"); + syringe_metal_stimpak = new ItemSyringe().setUnlocalizedName("syringe_metal_stimpak").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_stimpak"); + syringe_metal_medx = new ItemSyringe().setUnlocalizedName("syringe_metal_medx").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_medx"); + syringe_metal_psycho = new ItemSyringe().setUnlocalizedName("syringe_metal_psycho").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_psycho"); + syringe_metal_super = new ItemSyringe().setUnlocalizedName("syringe_metal_super").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_super"); + syringe_taint = new ItemSyringe().setUnlocalizedName("syringe_taint").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_taint"); + syringe_mkunicorn = new ItemSyringe().setUnlocalizedName("syringe_mkunicorn").setFull3D().setCreativeTab(null).setTextureName(RefStrings.MODID + ":syringe_mkunicorn"); + + med_bag = new ItemSyringe().setUnlocalizedName("med_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_bag"); + radx = new ItemPill(0).setUnlocalizedName("radx").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radx"); + siox = new ItemPill(0).setUnlocalizedName("siox").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":siox"); + pill_herbal = new ItemPill(0).setUnlocalizedName("pill_herbal").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pill_herbal"); + xanax = new ItemPill(0).setUnlocalizedName("xanax").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":xanax_2"); + fmn = new ItemPill(0).setUnlocalizedName("fmn").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":tablet"); + five_htp = new ItemPill(0).setUnlocalizedName("five_htp").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":5htp"); + pill_iodine = new ItemPill(0).setUnlocalizedName("pill_iodine").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pill_iodine"); + plan_c = new ItemPill(0).setUnlocalizedName("plan_c").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":plan_c"); + pill_red = new ItemPill(0).setUnlocalizedName("pill_red").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pill_red"); + stealth_boy = new ItemStarterKit().setUnlocalizedName("stealth_boy").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":stealth_boy"); + gas_mask_filter = new ItemFilter().setUnlocalizedName("gas_mask_filter").setTextureName(RefStrings.MODID + ":gas_mask_filter"); + gas_mask_filter_mono = new ItemFilter().setUnlocalizedName("gas_mask_filter_mono").setTextureName(RefStrings.MODID + ":gas_mask_filter_mono"); + gas_mask_filter_combo = new ItemFilter().setUnlocalizedName("gas_mask_filter_combo").setTextureName(RefStrings.MODID + ":gas_mask_filter_combo"); + gas_mask_filter_rag = new ItemFilter().setUnlocalizedName("gas_mask_filter_rag").setTextureName(RefStrings.MODID + ":gas_mask_filter_rag"); + gas_mask_filter_piss = new ItemFilter().setUnlocalizedName("gas_mask_filter_piss").setTextureName(RefStrings.MODID + ":gas_mask_filter_piss"); + jetpack_tank = new ItemSyringe().setUnlocalizedName("jetpack_tank").setMaxStackSize(16).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":jetpack_tank"); + gun_kit_1 = new ItemRepairKit(10).setUnlocalizedName("gun_kit_1").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":gun_kit_1"); + gun_kit_2 = new ItemRepairKit(100).setUnlocalizedName("gun_kit_2").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":gun_kit_2"); + cbt_device = new ItemSyringe().setUnlocalizedName("cbt_device").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":cbt_device"); + cigarette = new ItemCigarette().setUnlocalizedName("cigarette").setFull3D().setMaxStackSize(16).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cigarette"); + crackpipe = new ItemCigarette().setUnlocalizedName("crackpipe").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":crackpipe"); + bdcl = new ItemBDCL().setUnlocalizedName("bdcl").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bdcl"); + + attachment_mask = new ItemModGasmask().setUnlocalizedName("attachment_mask").setTextureName(RefStrings.MODID + ":attachment_mask"); + attachment_mask_mono = new ItemModGasmask().setUnlocalizedName("attachment_mask_mono").setTextureName(RefStrings.MODID + ":attachment_mask_mono"); + back_tesla = new ItemModTesla().setUnlocalizedName("back_tesla").setTextureName(RefStrings.MODID + ":back_tesla"); + servo_set = new ItemModServos().setUnlocalizedName("servo_set").setTextureName(RefStrings.MODID + ":servo_set"); + servo_set_desh = new ItemModServos().setUnlocalizedName("servo_set_desh").setTextureName(RefStrings.MODID + ":servo_set_desh"); + pads_rubber = new ItemModPads(0.5F).setUnlocalizedName("pads_rubber").setTextureName(RefStrings.MODID + ":pads_rubber"); + pads_slime = new ItemModPads(0.25F).setUnlocalizedName("pads_slime").setTextureName(RefStrings.MODID + ":pads_slime"); + pads_static = new ItemModPads(0.75F).setUnlocalizedName("pads_static").setTextureName(RefStrings.MODID + ":pads_static"); + cladding_paint = new ItemModCladding(0.025).setUnlocalizedName("cladding_paint").setTextureName(RefStrings.MODID + ":cladding_paint"); + cladding_rubber = new ItemModCladding(0.005).setUnlocalizedName("cladding_rubber").setTextureName(RefStrings.MODID + ":cladding_rubber"); + cladding_lead = new ItemModCladding(0.1).setUnlocalizedName("cladding_lead").setTextureName(RefStrings.MODID + ":cladding_lead"); + cladding_desh = new ItemModCladding(0.2).setUnlocalizedName("cladding_desh").setTextureName(RefStrings.MODID + ":cladding_desh"); + cladding_ghiorsium = new ItemModCladding(0.5).setUnlocalizedName("cladding_ghiorsium").setTextureName(RefStrings.MODID + ":cladding_ghiorsium"); + cladding_iron = new ItemModIron().setUnlocalizedName("cladding_iron").setTextureName(RefStrings.MODID + ":cladding_iron"); + cladding_obsidian = new ItemModObsidian().setUnlocalizedName("cladding_obsidian").setTextureName(RefStrings.MODID + ":cladding_obsidian"); + insert_kevlar = new ItemModInsert(1500, 1F, 0.9F, 1F, 1F).setUnlocalizedName("insert_kevlar").setTextureName(RefStrings.MODID + ":insert_kevlar"); + insert_sapi = new ItemModInsert(1750, 1F, 0.85F, 1F, 1F).setUnlocalizedName("insert_sapi").setTextureName(RefStrings.MODID + ":insert_sapi"); + insert_esapi = new ItemModInsert(2000, 0.95F, 0.8F, 1F, 1F).setUnlocalizedName("insert_esapi").setTextureName(RefStrings.MODID + ":insert_esapi"); + insert_xsapi = new ItemModInsert(2500, 0.9F, 0.75F, 1F, 1F).setUnlocalizedName("insert_xsapi").setTextureName(RefStrings.MODID + ":insert_xsapi"); + insert_steel = new ItemModInsert(1000, 1F, 0.95F, 0.75F, 0.95F).setUnlocalizedName("insert_steel").setTextureName(RefStrings.MODID + ":insert_steel"); + insert_du = new ItemModInsert(1500, 0.9F, 0.85F, 0.5F, 0.9F).setUnlocalizedName("insert_du").setTextureName(RefStrings.MODID + ":insert_du"); + insert_polonium = new ItemModInsert(500, 0.9F, 1F, 0.95F, 0.9F).setUnlocalizedName("insert_polonium").setTextureName(RefStrings.MODID + ":insert_polonium"); + insert_ghiorsium = new ItemModInsert(2000, 0.8F, 0.75F, 0.35F, 0.9F).setUnlocalizedName("insert_ghiorsium").setTextureName(RefStrings.MODID + ":insert_ghiorsium"); + insert_era = new ItemModInsert(25, 0.5F, 1F, 0.25F, 1F).setUnlocalizedName("insert_era").setTextureName(RefStrings.MODID + ":insert_era"); + insert_yharonite = new ItemModInsert(9999, 0.01F, 1F, 1F, 1F).setUnlocalizedName("insert_yharonite").setTextureName(RefStrings.MODID + ":insert_yharonite"); + insert_doxium = new ItemModInsert(9999, 5.0F, 1F, 1F, 1F).setUnlocalizedName("insert_doxium").setTextureName(RefStrings.MODID + ":insert_doxium"); + armor_polish = new ItemModPolish().setUnlocalizedName("armor_polish").setTextureName(RefStrings.MODID + ":armor_polish"); + bandaid = new ItemModBandaid().setUnlocalizedName("bandaid").setTextureName(RefStrings.MODID + ":bandaid"); + serum = new ItemModSerum().setUnlocalizedName("serum").setTextureName(RefStrings.MODID + ":serum"); + quartz_plutonium = new ItemModQuartz().setUnlocalizedName("quartz_plutonium").setTextureName(RefStrings.MODID + ":quartz_plutonium"); + morning_glory = new ItemModMorningGlory().setUnlocalizedName("morning_glory").setTextureName(RefStrings.MODID + ":morning_glory"); + lodestone = new ItemModLodestone(5).setUnlocalizedName("lodestone").setTextureName(RefStrings.MODID + ":lodestone"); + horseshoe_magnet = new ItemModLodestone(8).setUnlocalizedName("horseshoe_magnet").setTextureName(RefStrings.MODID + ":horseshoe_magnet"); + industrial_magnet = new ItemModLodestone(12).setUnlocalizedName("industrial_magnet").setTextureName(RefStrings.MODID + ":industrial_magnet"); + bathwater = new ItemModBathwater().setUnlocalizedName("bathwater").setTextureName(RefStrings.MODID + ":bathwater"); + bathwater_mk2 = new ItemModBathwater().setUnlocalizedName("bathwater_mk2").setTextureName(RefStrings.MODID + ":bathwater_mk2"); + spider_milk = new ItemModMilk().setUnlocalizedName("spider_milk").setTextureName(RefStrings.MODID + ":spider_milk"); + ink = new ItemModInk().setUnlocalizedName("ink").setTextureName(RefStrings.MODID + ":ink"); + heart_piece = new ItemModHealth(5F).setUnlocalizedName("heart_piece").setTextureName(RefStrings.MODID + ":heart_piece"); + heart_container = new ItemModHealth(20F).setUnlocalizedName("heart_container").setTextureName(RefStrings.MODID + ":heart_container"); + heart_booster = new ItemModHealth(40F).setUnlocalizedName("heart_booster").setTextureName(RefStrings.MODID + ":heart_booster"); + heart_fab = new ItemModHealth(60F).setUnlocalizedName("heart_fab").setTextureName(RefStrings.MODID + ":heart_fab"); + black_diamond = new ItemModHealth(40F).setUnlocalizedName("black_diamond").setTextureName(RefStrings.MODID + ":black_diamond"); + wd40 = new ItemModWD40().setUnlocalizedName("wd40").setTextureName(RefStrings.MODID + ":wd40"); + scrumpy = new ItemModRevive(1).setUnlocalizedName("scrumpy").setTextureName(RefStrings.MODID + ":scrumpy"); + wild_p = new ItemModRevive(3).setUnlocalizedName("wild_p").setTextureName(RefStrings.MODID + ":wild_p"); + fabsols_vodka = new ItemModRevive(9999).setUnlocalizedName("fabsols_vodka").setTextureName(RefStrings.MODID + ":fabsols_vodka"); + shackles = new ItemModShackles().setUnlocalizedName("shackles").setTextureName(RefStrings.MODID + ":shackles"); + injector_5htp = new ItemModAuto().setUnlocalizedName("injector_5htp").setTextureName(RefStrings.MODID + ":injector_5htp"); + injector_knife = new ItemModKnife().setUnlocalizedName("injector_knife").setTextureName(RefStrings.MODID + ":injector_knife"); + medal_liquidator = new ItemModMedal().setUnlocalizedName("medal_liquidator").setTextureName(RefStrings.MODID + ":medal_liquidator"); + bottled_cloud = new ItemModCloud().setUnlocalizedName("bottled_cloud").setTextureName(RefStrings.MODID + ":bottled_cloud"); + protection_charm = new ItemModCharm().setUnlocalizedName("protection_charm").setTextureName(RefStrings.MODID + ":protection_charm"); + meteor_charm = new ItemModCharm().setUnlocalizedName("meteor_charm").setTextureName(RefStrings.MODID + ":meteor_charm"); + neutrino_lens = new ItemModLens().setUnlocalizedName("neutrino_lens").setTextureName(RefStrings.MODID + ":neutrino_lens"); + gas_tester = new ItemModSensor().setUnlocalizedName("gas_tester").setTextureName(RefStrings.MODID + ":gas_tester"); + defuser_gold = new ItemModDefuser().setUnlocalizedName("defuser_gold").setTextureName(RefStrings.MODID + ":defuser_gold"); + ballistic_gauntlet = new ItemModTwoKick().setUnlocalizedName("ballistic_gauntlet").setTextureName(RefStrings.MODID + ":ballistic_gauntlet"); + night_vision = new ItemModNightVision().setUnlocalizedName("night_vision").setTextureName(RefStrings.MODID + ":night_vision"); + card_aos = new ItemModCard().setUnlocalizedName("card_aos").setTextureName(RefStrings.MODID + ":card_aos"); + card_qos = new ItemModCard().setUnlocalizedName("card_qos").setTextureName(RefStrings.MODID + ":card_qos"); + australium_iii = new ItemModShield(25F).setUnlocalizedName("australium_iii").setTextureName(RefStrings.MODID + ":australium_iii"); + armor_battery = new ItemModBattery(1.25D).setUnlocalizedName("armor_battery").setTextureName(RefStrings.MODID + ":armor_battery"); + armor_battery_mk2 = new ItemModBattery(1.5D).setUnlocalizedName("armor_battery_mk2").setTextureName(RefStrings.MODID + ":armor_battery_mk2"); + armor_battery_mk3 = new ItemModBattery(2D).setUnlocalizedName("armor_battery_mk3").setTextureName(RefStrings.MODID + ":armor_battery_mk3"); + + cap_nuka = new Item().setUnlocalizedName("cap_nuka").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_nuka"); + cap_quantum = new Item().setUnlocalizedName("cap_quantum").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_quantum"); + cap_sparkle = new Item().setUnlocalizedName("cap_sparkle").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_sparkle"); + cap_rad = new Item().setUnlocalizedName("cap_rad").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_rad"); + cap_korl = new Item().setUnlocalizedName("cap_korl").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_korl"); + cap_fritz = new Item().setUnlocalizedName("cap_fritz").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_fritz"); + ring_pull = new Item().setUnlocalizedName("ring_pull").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ring_pull"); + + can_empty = new Item().setUnlocalizedName("can_empty").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_empty"); + can_smart = new ItemEnergy().makeCan().setUnlocalizedName("can_smart").setTextureName(RefStrings.MODID + ":can_smart"); + can_creature = new ItemEnergy().makeCan().setUnlocalizedName("can_creature").setTextureName(RefStrings.MODID + ":can_creature"); + can_redbomb = new ItemEnergy().makeCan().setUnlocalizedName("can_redbomb").setTextureName(RefStrings.MODID + ":can_redbomb"); + can_mrsugar = new ItemEnergy().makeCan().setUnlocalizedName("can_mrsugar").setTextureName(RefStrings.MODID + ":can_mrsugar"); + can_overcharge = new ItemEnergy().makeCan().setUnlocalizedName("can_overcharge").setTextureName(RefStrings.MODID + ":can_overcharge"); + can_luna = new ItemEnergy().makeCan().setUnlocalizedName("can_luna").setTextureName(RefStrings.MODID + ":can_luna"); + can_bepis = new ItemEnergy().makeCan().setUnlocalizedName("can_bepis").setTextureName(RefStrings.MODID + ":can_bepis"); + can_breen = new ItemEnergy().makeCan().setUnlocalizedName("can_breen").setTextureName(RefStrings.MODID + ":can_breen"); + can_mug = new ItemEnergy().makeCan().setUnlocalizedName("can_mug").setTextureName(RefStrings.MODID + ":can_mug"); + bottle_empty = new Item().setUnlocalizedName("bottle_empty").setTextureName(RefStrings.MODID + ":bottle_empty"); + bottle_nuka = new ItemEnergy().makeBottle(bottle_empty, cap_nuka).setUnlocalizedName("bottle_nuka").setTextureName(RefStrings.MODID + ":bottle_nuka"); + bottle_cherry = new ItemEnergy().makeBottle(bottle_empty, cap_nuka).setUnlocalizedName("bottle_cherry").setContainerItem(ModItems.bottle_empty).setTextureName(RefStrings.MODID + ":bottle_cherry"); + bottle_quantum = new ItemEnergy().makeBottle(bottle_empty, cap_quantum).setUnlocalizedName("bottle_quantum").setContainerItem(ModItems.bottle_empty).setTextureName(RefStrings.MODID + ":bottle_quantum"); + bottle_sparkle = new ItemEnergy().makeBottle(bottle_empty, cap_sparkle).setUnlocalizedName("bottle_sparkle").setContainerItem(ModItems.bottle_empty).setTextureName(RefStrings.MODID + ":bottle_sparkle"); + bottle_rad = new ItemEnergy().makeBottle(bottle_empty, cap_rad).setUnlocalizedName("bottle_rad").setContainerItem(ModItems.bottle_empty).setTextureName(RefStrings.MODID + ":bottle_rad"); + bottle2_empty = new Item().setUnlocalizedName("bottle2_empty").setTextureName(RefStrings.MODID + ":bottle2_empty"); + bottle2_korl = new ItemEnergy().makeBottle(bottle2_empty, cap_korl).setUnlocalizedName("bottle2_korl").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_korl"); + bottle2_fritz = new ItemEnergy().makeBottle(bottle2_empty, cap_fritz).setUnlocalizedName("bottle2_fritz").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_fritz"); + bottle2_korl_special = new ItemEnergy().makeBottle(bottle2_empty, cap_korl).setUnlocalizedName("bottle2_korl_special").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_korl"); + bottle2_fritz_special = new ItemEnergy().makeBottle(bottle2_empty, cap_fritz).setUnlocalizedName("bottle2_fritz_special").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_fritz"); + flask_infusion = new ItemFlask().setUnlocalizedName("flask_infusion").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":flask"); + chocolate_milk = new ItemEnergy().setUnlocalizedName("chocolate_milk").setTextureName(RefStrings.MODID + ":chocolate_milk"); + coffee = new ItemEnergy().setUnlocalizedName("coffee").setTextureName(RefStrings.MODID + ":coffee"); + coffee_radium = new ItemEnergy().setUnlocalizedName("coffee_radium").setTextureName(RefStrings.MODID + ":coffee_radium"); + chocolate = new ItemPill(0).setUnlocalizedName("chocolate").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":chocolate"); + canned_conserve = (ItemEnumMulti) new ItemConserve().setUnlocalizedName("canned_conserve").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canned"); + can_key = new Item().setUnlocalizedName("can_key").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_key"); + + boat_rubber = new ItemBoatRubber().setUnlocalizedName("boat_rubber").setTextureName(RefStrings.MODID + ":boat_rubber"); + cart = new ItemModMinecart().setUnlocalizedName("cart"); + train = new ItemTrain().setUnlocalizedName("train"); + drone = new ItemDrone().setUnlocalizedName("drone"); + + coin_creeper = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_creeper").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_creeper"); + coin_radiation = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_radiation").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_radiation"); + coin_maskman = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_maskman").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_maskman"); + coin_worm = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_worm").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_worm"); + coin_ufo = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_ufo").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_ufo"); + + rod_empty = new Item().setUnlocalizedName("rod_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_empty"); + rod = (ItemEnumMulti) new ItemBreedingRod().setUnlocalizedName("rod").setContainerItem(ModItems.rod_empty).setCreativeTab(MainRegistry.controlTab); + rod_dual_empty = new Item().setUnlocalizedName("rod_dual_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_dual_empty"); + rod_dual = (ItemEnumMulti) new ItemBreedingRod().setUnlocalizedName("rod_dual").setContainerItem(ModItems.rod_dual_empty).setCreativeTab(MainRegistry.controlTab); + rod_quad_empty = new Item().setUnlocalizedName("rod_quad_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_quad_empty"); + rod_quad = (ItemEnumMulti) new ItemBreedingRod().setUnlocalizedName("rod_quad").setContainerItem(ModItems.rod_quad_empty).setCreativeTab(MainRegistry.controlTab); + + rod_zirnox_empty = new Item().setUnlocalizedName("rod_zirnox_empty").setMaxStackSize(64).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_empty"); + //rod_zirnox_natural_uranium_fuel = new ItemZirnoxRodDeprecated(250000, 30).setUnlocalizedName("rod_zirnox_natural_uranium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_natural_uranium_fuel"); + //rod_zirnox_uranium_fuel = new ItemZirnoxRodDeprecated(200000, 50).setUnlocalizedName("rod_zirnox_uranium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_uranium_fuel"); + //rod_zirnox_th232 = new ItemZirnoxBreedingRod(20000, 0).setUnlocalizedName("rod_zirnox_th232").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_th232"); + //rod_zirnox_thorium_fuel = new ItemZirnoxRodDeprecated(200000, 40).setUnlocalizedName("rod_zirnox_thorium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_thorium_fuel"); + //rod_zirnox_mox_fuel = new ItemZirnoxRodDeprecated(165000, 75).setUnlocalizedName("rod_zirnox_mox_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_mox_fuel"); + //rod_zirnox_plutonium_fuel = new ItemZirnoxRodDeprecated(175000, 65).setUnlocalizedName("rod_zirnox_plutonium_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_plutonium_fuel"); + //rod_zirnox_u233_fuel = new ItemZirnoxRodDeprecated(150000, 100).setUnlocalizedName("rod_zirnox_u233_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_u233_fuel"); + //rod_zirnox_u235_fuel = new ItemZirnoxRodDeprecated(165000, 85).setUnlocalizedName("rod_zirnox_u235_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_u235_fuel"); + //rod_zirnox_les_fuel = new ItemZirnoxRodDeprecated(150000, 150).setUnlocalizedName("rod_zirnox_les_fuel").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_les_fuel"); + //rod_zirnox_lithium = new ItemZirnoxBreedingRod(20000, 0).setUnlocalizedName("rod_zirnox_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_lithium"); + rod_zirnox_tritium = new Item().setUnlocalizedName("rod_zirnox_tritium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_tritium"); + //rod_zirnox_zfb_mox = new ItemZirnoxRodDeprecated(50000, 35).setUnlocalizedName("rod_zirnox_zfb_mox").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox_zfb_mox"); + rod_zirnox = (ItemEnumMulti) new ItemZirnoxRod().setUnlocalizedName("rod_zirnox").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rod_zirnox"); + + rod_zirnox_natural_uranium_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_natural_uranium_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_uranium_fuel_depleted"); + rod_zirnox_uranium_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_uranium_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_uranium_fuel_depleted"); + rod_zirnox_thorium_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_thorium_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_thorium_fuel_depleted"); + rod_zirnox_mox_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_mox_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_mox_fuel_depleted"); + rod_zirnox_plutonium_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_plutonium_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_plutonium_fuel_depleted"); + rod_zirnox_u233_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_u233_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_u233_fuel_depleted"); + rod_zirnox_u235_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_u235_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_u235_fuel_depleted"); + rod_zirnox_les_fuel_depleted = new Item().setUnlocalizedName("rod_zirnox_les_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_les_fuel_depleted"); + rod_zirnox_zfb_mox_depleted = new Item().setUnlocalizedName("rod_zirnox_zfb_mox_depleted").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.rod_zirnox_empty).setTextureName(RefStrings.MODID + ":rod_zirnox_zfb_mox_depleted"); + + waste_natural_uranium = new ItemDepletedFuel().setUnlocalizedName("waste_natural_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_uranium"); + waste_uranium = new ItemDepletedFuel().setUnlocalizedName("waste_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_uranium"); + waste_thorium = new ItemDepletedFuel().setUnlocalizedName("waste_thorium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_thorium"); + waste_mox = new ItemDepletedFuel().setUnlocalizedName("waste_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_mox"); + waste_plutonium = new ItemDepletedFuel().setUnlocalizedName("waste_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plutonium"); + waste_u233 = new ItemDepletedFuel().setUnlocalizedName("waste_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_uranium"); + waste_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_uranium"); + waste_schrabidium = new ItemDepletedFuel().setUnlocalizedName("waste_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_schrabidium"); + waste_zfb_mox = new ItemDepletedFuel().setUnlocalizedName("waste_zfb_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_zfb_mox"); + + waste_plate_u233 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_uranium"); + waste_plate_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_uranium"); + waste_plate_mox = new ItemDepletedFuel().setUnlocalizedName("waste_plate_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_mox"); + waste_plate_pu239 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_mox"); + waste_plate_sa326 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_sa326").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_sa326"); + waste_plate_ra226be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_ra226be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_ra226be"); + waste_plate_pu238be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu238be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_pu238be"); + + pile_rod_uranium = new ItemPileRod().setUnlocalizedName("pile_rod_uranium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_uranium"); + pile_rod_pu239 = new ItemPileRod().setUnlocalizedName("pile_rod_pu239").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_pu239"); + pile_rod_plutonium = new ItemPileRod().setUnlocalizedName("pile_rod_plutonium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_plutonium"); + pile_rod_source = new ItemPileRod().setUnlocalizedName("pile_rod_source").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_source"); + pile_rod_boron = new ItemPileRod().setUnlocalizedName("pile_rod_boron").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_boron"); + pile_rod_lithium = new ItemPileRod().setUnlocalizedName("pile_rod_lithium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_lithium"); + pile_rod_detector = new ItemPileRod().setUnlocalizedName("pile_rod_detector").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_detector"); + + plate_fuel_u233 = new ItemPlateFuel(2200000).setFunction(FunctionEnum.SQUARE_ROOT, 50).setUnlocalizedName("plate_fuel_u233").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_u233"); + plate_fuel_u235 = new ItemPlateFuel(2200000).setFunction(FunctionEnum.SQUARE_ROOT, 40).setUnlocalizedName("plate_fuel_u235").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_u235"); + plate_fuel_mox = new ItemPlateFuel(2400000).setFunction(FunctionEnum.LOGARITHM, 50).setUnlocalizedName("plate_fuel_mox").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_mox"); + plate_fuel_pu239 = new ItemPlateFuel(2000000).setFunction(FunctionEnum.NEGATIVE_QUADRATIC, 50).setUnlocalizedName("plate_fuel_pu239").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_pu239"); + plate_fuel_sa326 = new ItemPlateFuel(2000000).setFunction(FunctionEnum.LINEAR, 80).setUnlocalizedName("plate_fuel_sa326").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_sa326"); + plate_fuel_ra226be = new ItemPlateFuel(1300000).setFunction(FunctionEnum.PASSIVE, 30).setUnlocalizedName("plate_fuel_ra226be").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_ra226be"); + plate_fuel_pu238be = new ItemPlateFuel(1000000).setFunction(FunctionEnum.PASSIVE, 50).setUnlocalizedName("plate_fuel_pu238be").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_pu238be"); + + pwr_fuel = new ItemPWRFuel().setUnlocalizedName("pwr_fuel").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pwr_fuel"); + pwr_fuel_hot = new ItemEnumMulti(EnumPWRFuel.class, true, false).setUnlocalizedName("pwr_fuel_hot").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pwr_fuel_hot"); + pwr_fuel_depleted = new ItemEnumMulti(EnumPWRFuel.class, true, false).setUnlocalizedName("pwr_fuel_depleted").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pwr_fuel_depleted"); + + rbmk_lid = new ItemRBMKLid().setUnlocalizedName("rbmk_lid").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rbmk_lid"); + rbmk_lid_glass = new ItemRBMKLid().setUnlocalizedName("rbmk_lid_glass").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rbmk_lid_glass"); + + rbmk_pellet_ueu = (ItemRBMKPellet) new ItemRBMKPellet("Unenriched Uranium").setUnlocalizedName("rbmk_pellet_ueu").setTextureName(RefStrings.MODID + ":rbmk_pellet_ueu"); + rbmk_pellet_meu = (ItemRBMKPellet) new ItemRBMKPellet("Medium Enriched Uranium-235").setUnlocalizedName("rbmk_pellet_meu").setTextureName(RefStrings.MODID + ":rbmk_pellet_meu"); + rbmk_pellet_heu233 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Uranium-233").setUnlocalizedName("rbmk_pellet_heu233").setTextureName(RefStrings.MODID + ":rbmk_pellet_heu233"); + rbmk_pellet_heu235 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Uranium-235").setUnlocalizedName("rbmk_pellet_heu235").setTextureName(RefStrings.MODID + ":rbmk_pellet_heu235"); + rbmk_pellet_thmeu = (ItemRBMKPellet) new ItemRBMKPellet("Thorium with MEU Driver Fuel").setUnlocalizedName("rbmk_pellet_thmeu").setTextureName(RefStrings.MODID + ":rbmk_pellet_thmeu"); + rbmk_pellet_lep = (ItemRBMKPellet) new ItemRBMKPellet("Low Enriched Plutonium-239").setUnlocalizedName("rbmk_pellet_lep").setTextureName(RefStrings.MODID + ":rbmk_pellet_lep"); + rbmk_pellet_mep = (ItemRBMKPellet) new ItemRBMKPellet("Medium Enriched Plutonium-239").setUnlocalizedName("rbmk_pellet_mep").setTextureName(RefStrings.MODID + ":rbmk_pellet_mep"); + rbmk_pellet_hep239 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Plutonium-239").setUnlocalizedName("rbmk_pellet_hep239").setTextureName(RefStrings.MODID + ":rbmk_pellet_hep239"); + rbmk_pellet_hep241 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Plutonium-241").setUnlocalizedName("rbmk_pellet_hep241").setTextureName(RefStrings.MODID + ":rbmk_pellet_hep241"); + rbmk_pellet_lea = (ItemRBMKPellet) new ItemRBMKPellet("Low Enriched Americium-242").setUnlocalizedName("rbmk_pellet_lea").setTextureName(RefStrings.MODID + ":rbmk_pellet_lea"); + rbmk_pellet_mea = (ItemRBMKPellet) new ItemRBMKPellet("Medium Enriched Americium-242").setUnlocalizedName("rbmk_pellet_mea").setTextureName(RefStrings.MODID + ":rbmk_pellet_mea"); + rbmk_pellet_hea241 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Americium-241").setUnlocalizedName("rbmk_pellet_hea241").setTextureName(RefStrings.MODID + ":rbmk_pellet_hea241"); + rbmk_pellet_hea242 = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Americium-242").setUnlocalizedName("rbmk_pellet_hea242").setTextureName(RefStrings.MODID + ":rbmk_pellet_hea242"); + rbmk_pellet_men = (ItemRBMKPellet) new ItemRBMKPellet("Medium Enriched Neptunium-237").setUnlocalizedName("rbmk_pellet_men").setTextureName(RefStrings.MODID + ":rbmk_pellet_men"); + rbmk_pellet_hen = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Neptunium-237").setUnlocalizedName("rbmk_pellet_hen").setTextureName(RefStrings.MODID + ":rbmk_pellet_hen"); + rbmk_pellet_mox = (ItemRBMKPellet) new ItemRBMKPellet("Mixed MEU & LEP Oxide").setUnlocalizedName("rbmk_pellet_mox").setTextureName(RefStrings.MODID + ":rbmk_pellet_mox"); + rbmk_pellet_les = (ItemRBMKPellet) new ItemRBMKPellet("Low Enriched Schrabidium-326").setUnlocalizedName("rbmk_pellet_les").setTextureName(RefStrings.MODID + ":rbmk_pellet_les"); + rbmk_pellet_mes = (ItemRBMKPellet) new ItemRBMKPellet("Medium Enriched Schrabidium-326").setUnlocalizedName("rbmk_pellet_mes").setTextureName(RefStrings.MODID + ":rbmk_pellet_mes"); + rbmk_pellet_hes = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Schrabidium-326").setUnlocalizedName("rbmk_pellet_hes").setTextureName(RefStrings.MODID + ":rbmk_pellet_hes"); + rbmk_pellet_leaus = (ItemRBMKPellet) new ItemRBMKPellet("Low Enriched Australium (Tasmanite)").setUnlocalizedName("rbmk_pellet_leaus").setTextureName(RefStrings.MODID + ":rbmk_pellet_leaus"); + rbmk_pellet_heaus = (ItemRBMKPellet) new ItemRBMKPellet("Highly Enriched Australium (Ayerite)").setUnlocalizedName("rbmk_pellet_heaus").setTextureName(RefStrings.MODID + ":rbmk_pellet_heaus"); + rbmk_pellet_po210be = (ItemRBMKPellet) new ItemRBMKPellet("Polonium-210 & Beryllium Neutron Source").disableXenon().setUnlocalizedName("rbmk_pellet_po210be").setTextureName(RefStrings.MODID + ":rbmk_pellet_po210be"); + rbmk_pellet_ra226be = (ItemRBMKPellet) new ItemRBMKPellet("Radium-226 & Beryllium Neutron Source").disableXenon().setUnlocalizedName("rbmk_pellet_ra226be").setTextureName(RefStrings.MODID + ":rbmk_pellet_ra226be"); + rbmk_pellet_pu238be = (ItemRBMKPellet) new ItemRBMKPellet("Plutonium-238 & Beryllium Neutron Source").setUnlocalizedName("rbmk_pellet_pu238be").setTextureName(RefStrings.MODID + ":rbmk_pellet_pu238be"); + rbmk_pellet_balefire_gold = (ItemRBMKPellet) new ItemRBMKPellet("Antihydrogen in a Magnetized Gold-198 Lattice").disableXenon().setUnlocalizedName("rbmk_pellet_balefire_gold").setTextureName(RefStrings.MODID + ":rbmk_pellet_balefire_gold"); + rbmk_pellet_flashlead = (ItemRBMKPellet) new ItemRBMKPellet("Antihydrogen confined by a Magnetized Gold-198 and Lead-209 Lattice").disableXenon().setUnlocalizedName("rbmk_pellet_flashlead").setTextureName(RefStrings.MODID + ":rbmk_pellet_flashlead"); + rbmk_pellet_balefire = (ItemRBMKPellet) new ItemRBMKPellet("Draconic Flames").disableXenon().setUnlocalizedName("rbmk_pellet_balefire").setTextureName(RefStrings.MODID + ":rbmk_pellet_balefire"); + rbmk_pellet_zfb_bismuth = (ItemRBMKPellet) new ItemRBMKPellet("Zirconium Fast Breeder - LEU/HEP-241#Bi").setUnlocalizedName("rbmk_pellet_zfb_bismuth").setTextureName(RefStrings.MODID + ":rbmk_pellet_zfb_bismuth"); + rbmk_pellet_zfb_pu241 = (ItemRBMKPellet) new ItemRBMKPellet("Zirconium Fast Breeder - HEU-235/HEP-240#Pu-241").setUnlocalizedName("rbmk_pellet_zfb_pu241").setTextureName(RefStrings.MODID + ":rbmk_pellet_zfb_pu241"); + rbmk_pellet_zfb_am_mix = (ItemRBMKPellet) new ItemRBMKPellet("Zirconium Fast Breeder - HEP-241#MEA").setUnlocalizedName("rbmk_pellet_zfb_am_mix").setTextureName(RefStrings.MODID + ":rbmk_pellet_zfb_am_mix"); + rbmk_pellet_drx = (ItemRBMKPellet) new ItemRBMKPellet(EnumChatFormatting.OBFUSCATED + "can't you hear, can't you hear the thunder?").setUnlocalizedName("rbmk_pellet_drx").setTextureName(RefStrings.MODID + ":rbmk_pellet_drx"); + + rbmk_fuel_empty = new Item().setUnlocalizedName("rbmk_fuel_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":rbmk_fuel_empty"); + rbmk_fuel_ueu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_ueu) + .setYield(100000000D) + .setStats(15) + .setFunction(EnumBurnFunc.LOG_TEN) + .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) + .setHeat(0.65) //0.5 is too much of a nerf in heat; pu239 buildup justifies it being on par with MEU ig + .setMeltingPoint(2865) + .setUnlocalizedName("rbmk_fuel_ueu").setTextureName(RefStrings.MODID + ":rbmk_fuel_ueu"); + rbmk_fuel_meu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_meu) + .setYield(100000000D) + .setStats(20) + .setFunction(EnumBurnFunc.LOG_TEN) + .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) + .setHeat(0.65) //0.75 was a bit too much... + .setMeltingPoint(2865) + .setUnlocalizedName("rbmk_fuel_meu").setTextureName(RefStrings.MODID + ":rbmk_fuel_meu"); + rbmk_fuel_heu233 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_heu233) + .setYield(100000000D) + .setStats(27.5D) + .setFunction(EnumBurnFunc.LINEAR) + .setHeat(1.25D) + .setMeltingPoint(2865) + .setUnlocalizedName("rbmk_fuel_heu233").setTextureName(RefStrings.MODID + ":rbmk_fuel_heu233"); + rbmk_fuel_heu235 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_heu235) + .setYield(100000000D) + .setStats(50) //Consistency with HEN; its critical mass is too high to justify a linear function + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setMeltingPoint(2865) + .setUnlocalizedName("rbmk_fuel_heu235").setTextureName(RefStrings.MODID + ":rbmk_fuel_heu235"); + rbmk_fuel_thmeu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_thmeu) + .setYield(100000000D) + .setStats(20) + .setFunction(EnumBurnFunc.PLATEU) + .setDepletionFunction(EnumDepleteFunc.BOOSTED_SLOPE) + .setHeat(0.65D) //Consistency with MEU + .setMeltingPoint(3350) + .setUnlocalizedName("rbmk_fuel_thmeu").setTextureName(RefStrings.MODID + ":rbmk_fuel_thmeu"); + rbmk_fuel_lep = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_lep) + .setYield(100000000D) + .setStats(35) + .setFunction(EnumBurnFunc.LOG_TEN) + .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) + .setHeat(0.75D) + .setMeltingPoint(2744) + .setUnlocalizedName("rbmk_fuel_lep").setTextureName(RefStrings.MODID + ":rbmk_fuel_lep"); + rbmk_fuel_mep = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mep) + .setYield(100000000D) + .setStats(35) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setMeltingPoint(2744) + .setUnlocalizedName("rbmk_fuel_mep").setTextureName(RefStrings.MODID + ":rbmk_fuel_mep"); + rbmk_fuel_hep239 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hep239) + .setYield(100000000D) + .setStats(30) + .setFunction(EnumBurnFunc.LINEAR) + .setHeat(1.25D) + .setMeltingPoint(2744) + .setUnlocalizedName("rbmk_fuel_hep").setTextureName(RefStrings.MODID + ":rbmk_fuel_hep"); + rbmk_fuel_hep241 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hep241) + .setYield(100000000D) + .setStats(40) + .setFunction(EnumBurnFunc.LINEAR) + .setHeat(1.75D) + .setMeltingPoint(2744) + .setUnlocalizedName("rbmk_fuel_hep241").setTextureName(RefStrings.MODID + ":rbmk_fuel_hep241"); + rbmk_fuel_lea = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_lea) + .setYield(100000000D) + .setStats(60, 10) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) + .setHeat(1.5D) + .setMeltingPoint(2386) + .setUnlocalizedName("rbmk_fuel_lea").setTextureName(RefStrings.MODID + ":rbmk_fuel_lea"); + rbmk_fuel_mea = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mea) + .setYield(100000000D) + .setStats(35D, 20) + .setFunction(EnumBurnFunc.ARCH) + .setHeat(1.75D) + .setMeltingPoint(2386) + .setUnlocalizedName("rbmk_fuel_mea").setTextureName(RefStrings.MODID + ":rbmk_fuel_mea"); + rbmk_fuel_hea241 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hea241) + .setYield(100000000D) + .setStats(65, 15) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setHeat(1.85D) + .setMeltingPoint(2386) + .setNeutronTypes(NType.FAST, NType.FAST) + .setUnlocalizedName("rbmk_fuel_hea241").setTextureName(RefStrings.MODID + ":rbmk_fuel_hea241"); + rbmk_fuel_hea242 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hea242) + .setYield(100000000D) + .setStats(45) + .setFunction(EnumBurnFunc.LINEAR) + .setHeat(2D) + .setMeltingPoint(2386) + .setUnlocalizedName("rbmk_fuel_hea242").setTextureName(RefStrings.MODID + ":rbmk_fuel_hea242"); + rbmk_fuel_men = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_men) + .setYield(100000000D) + .setStats(30) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) + .setHeat(0.75) + .setMeltingPoint(2800) + .setNeutronTypes(NType.ANY, NType.FAST) //Build-up of Pu-239 leads to both speeds of neutrons grooving + .setUnlocalizedName("rbmk_fuel_men").setTextureName(RefStrings.MODID + ":rbmk_fuel_men"); + rbmk_fuel_hen = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hen) + .setYield(100000000D) + .setStats(40) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setMeltingPoint(2800) + .setNeutronTypes(NType.FAST, NType.FAST) + .setUnlocalizedName("rbmk_fuel_hen").setTextureName(RefStrings.MODID + ":rbmk_fuel_hen"); + rbmk_fuel_mox = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mox) + .setYield(100000000D) + .setStats(40) + .setFunction(EnumBurnFunc.LOG_TEN) + .setDepletionFunction(EnumDepleteFunc.RAISING_SLOPE) + .setMeltingPoint(2815) + .setUnlocalizedName("rbmk_fuel_mox").setTextureName(RefStrings.MODID + ":rbmk_fuel_mox"); + rbmk_fuel_les = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_les) + .setYield(100000000D) + .setStats(50) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setHeat(1.25D) + .setMeltingPoint(2500) + .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation + .setUnlocalizedName("rbmk_fuel_les").setTextureName(RefStrings.MODID + ":rbmk_fuel_les"); + rbmk_fuel_mes = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mes) + .setYield(100000000D) + .setStats(75D) + .setFunction(EnumBurnFunc.ARCH) + .setHeat(1.5D) + .setMeltingPoint(2750) + .setUnlocalizedName("rbmk_fuel_mes").setTextureName(RefStrings.MODID + ":rbmk_fuel_mes"); + rbmk_fuel_hes = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hes) + .setYield(100000000D) + .setStats(90) + .setFunction(EnumBurnFunc.LINEAR) + .setDepletionFunction(EnumDepleteFunc.LINEAR) + .setHeat(1.75D) + .setMeltingPoint(3000) + .setUnlocalizedName("rbmk_fuel_hes").setTextureName(RefStrings.MODID + ":rbmk_fuel_hes"); + rbmk_fuel_leaus = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_leaus) + .setYield(100000000D) + .setStats(30) + .setFunction(EnumBurnFunc.SIGMOID) + .setDepletionFunction(EnumDepleteFunc.LINEAR) + .setXenon(0.05D, 50D) + .setHeat(1.5D) + .setMeltingPoint(7029).setUnlocalizedName("rbmk_fuel_leaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_leaus"); + rbmk_fuel_heaus = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_heaus) + .setYield(100000000D) + .setStats(35) + .setFunction(EnumBurnFunc.LINEAR) + .setXenon(0.05D, 50D) + .setHeat(1.5D) + .setMeltingPoint(5211).setUnlocalizedName("rbmk_fuel_heaus").setTextureName(RefStrings.MODID + ":rbmk_fuel_heaus"); + rbmk_fuel_po210be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_po210be) + .setYield(25000000D) + .setStats(0D, 50) + .setFunction(EnumBurnFunc.PASSIVE) + .setDepletionFunction(EnumDepleteFunc.LINEAR) + .setXenon(0.0D, 50D) + .setHeat(0.1D) + .setDiffusion(0.05D) + .setMeltingPoint(1287) + .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation + .setUnlocalizedName("rbmk_fuel_po210be").setTextureName(RefStrings.MODID + ":rbmk_fuel_po210be"); + rbmk_fuel_ra226be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_ra226be) + .setYield(100000000D) + .setStats(0D, 20) + .setFunction(EnumBurnFunc.PASSIVE) + .setDepletionFunction(EnumDepleteFunc.LINEAR) + .setXenon(0.0D, 50D) + .setHeat(0.035D) + .setDiffusion(0.5D) + .setMeltingPoint(700) + .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation + .setUnlocalizedName("rbmk_fuel_ra226be").setTextureName(RefStrings.MODID + ":rbmk_fuel_ra226be"); + rbmk_fuel_pu238be = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_pu238be) + .setYield(50000000D) + .setStats(40, 40) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setHeat(0.1D) + .setDiffusion(0.05D) + .setMeltingPoint(1287) + .setNeutronTypes(NType.SLOW, NType.SLOW) //Beryllium Moderation + .setUnlocalizedName("rbmk_fuel_pu238be").setTextureName(RefStrings.MODID + ":rbmk_fuel_pu238be"); + rbmk_fuel_balefire_gold = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_balefire_gold) + .setYield(100000000D) + .setStats(50, 10) + .setFunction(EnumBurnFunc.ARCH) + .setDepletionFunction(EnumDepleteFunc.LINEAR) + .setXenon(0.0D, 50D) + .setMeltingPoint(2000) + .setUnlocalizedName("rbmk_fuel_balefire_gold").setTextureName(RefStrings.MODID + ":rbmk_fuel_balefire_gold"); + rbmk_fuel_flashlead = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_flashlead) + .setYield(250000000D) + .setStats(40, 50) + .setFunction(EnumBurnFunc.ARCH) + .setDepletionFunction(EnumDepleteFunc.LINEAR) + .setXenon(0.0D, 50D) + .setMeltingPoint(2050) + .setUnlocalizedName("rbmk_fuel_flashlead").setTextureName(RefStrings.MODID + ":rbmk_fuel_flashlead"); + rbmk_fuel_balefire = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_balefire) + .setYield(100000000D) + .setStats(100, 35) + .setFunction(EnumBurnFunc.LINEAR) + .setXenon(0.0D, 50D) + .setHeat(3D) + .setMeltingPoint(3652) + .setUnlocalizedName("rbmk_fuel_balefire").setTextureName(RefStrings.MODID + ":rbmk_fuel_balefire"); + rbmk_fuel_zfb_bismuth = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_zfb_bismuth) + .setYield(50000000D) + .setStats(20) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setHeat(1.75D) + .setMeltingPoint(2744) + .setUnlocalizedName("rbmk_fuel_zfb_bismuth").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_bismuth"); + rbmk_fuel_zfb_pu241 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_zfb_pu241) + .setYield(50000000D) + .setStats(20) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setMeltingPoint(2865) + .setUnlocalizedName("rbmk_fuel_zfb_pu241").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_pu241"); + rbmk_fuel_zfb_am_mix = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_zfb_am_mix) + .setYield(50000000D) + .setStats(20) + .setFunction(EnumBurnFunc.LINEAR) + .setHeat(1.75D) + .setMeltingPoint(2744) + .setUnlocalizedName("rbmk_fuel_zfb_am_mix").setTextureName(RefStrings.MODID + ":rbmk_fuel_zfb_am_mix"); + rbmk_fuel_drx = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_drx) + .setYield(10000000D) + .setStats(1000, 10) + .setFunction(EnumBurnFunc.QUADRATIC) + .setHeat(0.1D) + .setMeltingPoint(100000) + .setUnlocalizedName("rbmk_fuel_drx").setTextureName(RefStrings.MODID + ":rbmk_fuel_drx"); + rbmk_fuel_test = (ItemRBMKRod) new ItemRBMKRod("THE VOICES") + .setYield(1000000D) + .setStats(100) + .setFunction(EnumBurnFunc.EXPERIMENTAL) + .setHeat(1.0D) + .setMeltingPoint(100000) + .setUnlocalizedName("rbmk_fuel_test").setTextureName(RefStrings.MODID + ":rbmk_fuel_test"); + /* Experimental flux curve shit + rbmk_fuel_curve = (ItemRBMKRod) new ItemRBMKRod("3D Flux Curve Test") + .setFluxCurve(true) + .setOutputFluxCurve((fluxQuantity, fluxRatio) -> fluxQuantity * (1 - Math.pow(fluxRatio, 2))) + .setDepletionOutputRatioCurve((ratioIn, depletion) -> Math.pow(ratioIn, 2) * depletion) + .setYield(1000000D) + .setStats(75) + .setFunction(EnumBurnFunc.SQUARE_ROOT) + .setHeat(1.5D) + .setMeltingPoint(100000) + .setUnlocalizedName("rbmk_fuel_curve").setTextureName(RefStrings.MODID + ":rbmk_fuel_curve"); + */ + + watz_pellet = new ItemWatzPellet().setUnlocalizedName("watz_pellet").setTextureName(RefStrings.MODID + ":watz_pellet"); + watz_pellet_depleted = new ItemWatzPellet().setUnlocalizedName("watz_pellet_depleted").setTextureName(RefStrings.MODID + ":watz_pellet"); + + icf_pellet_empty = new Item().setUnlocalizedName("icf_pellet_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":icf_pellet_empty"); + icf_pellet = new ItemICFPellet().setUnlocalizedName("icf_pellet").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":icf_pellet"); + icf_pellet_depleted = new Item().setUnlocalizedName("icf_pellet_depleted").setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":icf_pellet_depleted"); + + trinitite = new ItemNuclearWaste().setUnlocalizedName("trinitite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":trinitite_new"); + nuclear_waste_long = new ItemWasteLong().setUnlocalizedName("nuclear_waste_long").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_long"); + nuclear_waste_long_tiny = new ItemWasteLong().setUnlocalizedName("nuclear_waste_long_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_long_tiny"); + nuclear_waste_short = new ItemWasteShort().setUnlocalizedName("nuclear_waste_short").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_short"); + nuclear_waste_short_tiny = new ItemWasteShort().setUnlocalizedName("nuclear_waste_short_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_short_tiny"); + nuclear_waste_long_depleted = new ItemWasteLong().setUnlocalizedName("nuclear_waste_long_depleted").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_long_depleted"); + nuclear_waste_long_depleted_tiny = new ItemWasteLong().setUnlocalizedName("nuclear_waste_long_depleted_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_long_depleted_tiny"); + nuclear_waste_short_depleted = new ItemWasteShort().setUnlocalizedName("nuclear_waste_short_depleted").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_short_depleted"); + nuclear_waste_short_depleted_tiny = new ItemWasteShort().setUnlocalizedName("nuclear_waste_short_depleted_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_short_depleted_tiny"); + nuclear_waste = new ItemNuclearWaste().setUnlocalizedName("nuclear_waste").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste"); + nuclear_waste_tiny = new ItemNuclearWaste().setUnlocalizedName("nuclear_waste_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_tiny"); + nuclear_waste_vitrified = new ItemNuclearWaste().setUnlocalizedName("nuclear_waste_vitrified").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_vitrified"); + nuclear_waste_vitrified_tiny = new ItemNuclearWaste().setUnlocalizedName("nuclear_waste_vitrified_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nuclear_waste_vitrified_tiny"); + scrap_plastic = new ItemPlasticScrap().setUnlocalizedName("scrap_plastic").setTextureName(RefStrings.MODID + ":scrap_plastic"); + scrap = new Item().setUnlocalizedName("scrap").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":scrap"); + scrap_oil = new Item().setUnlocalizedName("scrap_oil").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":scrap_oil"); + scrap_nuclear = new Item().setUnlocalizedName("scrap_nuclear").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":scrap_nuclear"); + containment_box = new ItemLeadBox().setUnlocalizedName("containment_box").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":containment_box"); + plastic_bag = new ItemPlasticBag().setUnlocalizedName("plastic_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":plastic_bag"); + + ammo_bag = new ItemAmmoBag().setUnlocalizedName("ammo_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ammo_bag"); + ammo_bag_infinite = new ItemAmmoBag().setUnlocalizedName("ammo_bag_infinite").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ammo_bag_infinite"); + casing_bag = new ItemCasingBag().setUnlocalizedName("casing_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":casing_bag"); + + debris_graphite = new Item().setUnlocalizedName("debris_graphite").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_graphite"); + debris_metal = new Item().setUnlocalizedName("debris_metal").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_metal"); + debris_fuel = new Item().setUnlocalizedName("debris_fuel").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_fuel"); + debris_concrete = new Item().setUnlocalizedName("debris_concrete").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_concrete"); + debris_exchanger = new Item().setUnlocalizedName("debris_exchanger").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_exchanger"); + debris_shrapnel =new Item().setUnlocalizedName("debris_shrapnel").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_shrapnel"); + debris_element =new Item().setUnlocalizedName("debris_element").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_element"); + + pellet_cluster = new ItemCustomLore().setUnlocalizedName("pellet_cluster").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellet_cluster"); + powder_fire = new ItemCustomLore().setUnlocalizedName("powder_fire").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_red_phosphorus"); + powder_ice = new ItemCustomLore().setUnlocalizedName("powder_ice").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_ice"); + powder_poison = new ItemCustomLore().setUnlocalizedName("powder_poison").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_poison"); + powder_thermite = new ItemCustomLore().setUnlocalizedName("powder_thermite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_thermite"); + cordite = new Item().setUnlocalizedName("cordite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":cordite"); + ballistite = new Item().setUnlocalizedName("ballistite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ballistite"); + ball_dynamite = new Item().setUnlocalizedName("ball_dynamite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_dynamite"); + ball_tnt = new Item().setUnlocalizedName("ball_tnt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_tnt"); + ball_tatb = new Item().setUnlocalizedName("ball_tatb").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_tatb"); + ball_fireclay = new Item().setUnlocalizedName("ball_fireclay").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ball_fireclay"); + pellet_gas = new ItemCustomLore().setUnlocalizedName("pellet_gas").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellet_gas"); + magnetron = new ItemCustomLore().setUnlocalizedName("magnetron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":magnetron_alt"); + pellet_buckshot = new Item().setUnlocalizedName("pellet_buckshot").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_lead"); + pellet_charged = new Item().setUnlocalizedName("pellet_charged").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_charged"); + + designator = new ItemDesingator().setUnlocalizedName("designator").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator"); + designator_range = new ItemDesingatorRange().setUnlocalizedName("designator_range").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_range_alt"); + designator_manual = new ItemDesingatorManual().setUnlocalizedName("designator_manual").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_manual"); + designator_arty_range = new ItemDesignatorArtyRange().setUnlocalizedName("designator_arty_range").setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_arty_range"); + launch_code_piece = new Item().setUnlocalizedName("launch_code_piece").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":launch_code_piece"); + launch_code = new Item().setUnlocalizedName("launch_code").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":launch_code"); + launch_key = new Item().setUnlocalizedName("launch_key").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":launch_key"); + missile_assembly = new Item().setUnlocalizedName("missile_assembly").setMaxStackSize(1).setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":missile_assembly"); + missile_generic = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_generic").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_generic"); + missile_anti_ballistic = new ItemMissile(MissileFormFactor.ABM, MissileTier.TIER1).setUnlocalizedName("missile_anti_ballistic").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_anti_ballistic"); + missile_incendiary = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_incendiary").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_incendiary"); + missile_cluster = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_cluster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_cluster"); + missile_buster = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_buster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_buster"); + missile_decoy = new ItemMissile(MissileFormFactor.V2, MissileTier.TIER1).setUnlocalizedName("missile_decoy").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_decoy"); + missile_strong = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER2).setUnlocalizedName("missile_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_strong"); + missile_incendiary_strong = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER2).setUnlocalizedName("missile_incendiary_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_incendiary_strong"); + missile_cluster_strong = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER2).setUnlocalizedName("missile_cluster_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_cluster_strong"); + missile_buster_strong = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER2).setUnlocalizedName("missile_buster_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_buster_strong"); + missile_emp_strong = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER2).setUnlocalizedName("missile_emp_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_emp_strong"); + missile_burst = new ItemMissile(MissileFormFactor.HUGE, MissileTier.TIER3).setUnlocalizedName("missile_burst").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_burst"); + missile_inferno = new ItemMissile(MissileFormFactor.HUGE, MissileTier.TIER3).setUnlocalizedName("missile_inferno").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_inferno"); + missile_rain = new ItemMissile(MissileFormFactor.HUGE, MissileTier.TIER3).setUnlocalizedName("missile_rain").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_rain"); + missile_drill = new ItemMissile(MissileFormFactor.HUGE, MissileTier.TIER3).setUnlocalizedName("missile_drill").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_drill"); + missile_nuclear = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_nuclear").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_nuclear"); + missile_nuclear_cluster = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_nuclear_cluster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_nuclear_cluster"); + missile_volcano = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_volcano").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_volcano"); + missile_doomsday = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_doomsday").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_doomsday"); + missile_doomsday_rusted = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).notLaunchable().setUnlocalizedName("missile_doomsday_rusted").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_doomsday"); + missile_taint = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_taint").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_taint"); + missile_micro = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_micro").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_micro"); + missile_bhole = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_bhole").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_bhole"); + missile_schrabidium = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_schrabidium").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_schrabidium"); + missile_emp = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_emp").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_emp"); + missile_shuttle = new ItemMissile(MissileFormFactor.OTHER, MissileTier.TIER3, MissileFuel.KEROSENE_PEROXIDE).setUnlocalizedName("missile_shuttle").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_shuttle"); + missile_stealth = new ItemMissile(MissileFormFactor.STRONG, MissileTier.TIER1).setUnlocalizedName("missile_stealth").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_stealth"); + missile_test = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_test").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":missile_micro"); + missile_soyuz = new ItemSoyuz().setUnlocalizedName("missile_soyuz").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":soyuz"); + missile_soyuz_lander = new ItemCustomLore().setUnlocalizedName("missile_soyuz_lander").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":soyuz_lander"); + missile_custom = new ItemCustomMissile().setUnlocalizedName("missile_custom").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":missile_custom"); + sat_mapper = new ItemSatChip().setUnlocalizedName("sat_mapper").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_mapper"); + sat_scanner = new ItemSatChip().setUnlocalizedName("sat_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_scanner"); + sat_radar = new ItemSatChip().setUnlocalizedName("sat_radar").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_radar"); + sat_laser = new ItemSatChip().setUnlocalizedName("sat_laser").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_laser"); + sat_foeq = new ItemSatChip().setUnlocalizedName("sat_foeq").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_foeq"); + sat_resonator = new ItemSatChip().setUnlocalizedName("sat_resonator").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_resonator"); + sat_miner = new ItemSatChip().setUnlocalizedName("sat_miner").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_miner"); + sat_lunar_miner = new ItemSatChip().setUnlocalizedName("sat_lunar_miner").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_lunar_miner"); + sat_gerald = new ItemSatChip().setUnlocalizedName("sat_gerald").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_gerald"); + sat_chip = new ItemSatChip().setUnlocalizedName("sat_chip").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_chip"); + sat_interface = new ItemSatInterface().setUnlocalizedName("sat_interface").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_interface"); + sat_coord = new ItemSatInterface().setUnlocalizedName("sat_coord").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_coord"); + sat_designator = new ItemSatDesignator().setUnlocalizedName("sat_designator").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_designator"); + sat_relay = new ItemSatChip().setUnlocalizedName("sat_relay").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_relay"); + + mp_thruster_10_kerosene = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 1.5F, PartSize.SIZE_10).setHealth(10F) .setUnlocalizedName("mp_thruster_10_kerosene"); + mp_thruster_10_kerosene_tec = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 1.5F, PartSize.SIZE_10).setHealth(15F).setRarity(Rarity.COMMON).setUnlocalizedName("mp_thruster_10_kerosene_tec"); + mp_thruster_10_solid = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 1.5F, PartSize.SIZE_10).setHealth(15F) .setUnlocalizedName("mp_thruster_10_solid"); + mp_thruster_10_xenon = new ItemCustomMissilePart().makeThruster(FuelType.XENON, 1F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_thruster_10_xenon"); + mp_thruster_15_kerosene = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 7.5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_kerosene"); + mp_thruster_15_kerosene_tec = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 7.5F, PartSize.SIZE_15).setHealth(20F).setRarity(Rarity.COMMON).setUnlocalizedName("mp_thruster_15_kerosene_tec"); + mp_thruster_15_kerosene_dual = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 2.5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_kerosene_dual"); + mp_thruster_15_kerosene_triple = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_kerosene_triple"); + mp_thruster_15_solid = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 5F, PartSize.SIZE_15).setHealth(20F) .setUnlocalizedName("mp_thruster_15_solid"); + mp_thruster_15_solid_hexdecuple = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 5F, PartSize.SIZE_15).setHealth(25F).setRarity(Rarity.UNCOMMON).setUnlocalizedName("mp_thruster_15_solid_hexdecuple"); + mp_thruster_15_hydrogen = new ItemCustomMissilePart().makeThruster(FuelType.HYDROGEN, 1F, 7.5F, PartSize.SIZE_15).setHealth(20F) .setUnlocalizedName("mp_thruster_15_hydrogen"); + mp_thruster_15_hydrogen_dual = new ItemCustomMissilePart().makeThruster(FuelType.HYDROGEN, 1F, 2.5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_hydrogen_dual"); + mp_thruster_15_balefire_short = new ItemCustomMissilePart().makeThruster(FuelType.BALEFIRE, 1F, 5F, PartSize.SIZE_15).setHealth(25F) .setUnlocalizedName("mp_thruster_15_balefire_short"); + mp_thruster_15_balefire = new ItemCustomMissilePart().makeThruster(FuelType.BALEFIRE, 1F, 5F, PartSize.SIZE_15).setHealth(25F) .setUnlocalizedName("mp_thruster_15_balefire"); + mp_thruster_15_balefire_large = new ItemCustomMissilePart().makeThruster(FuelType.BALEFIRE, 1F, 7.5F, PartSize.SIZE_15).setHealth(35F) .setUnlocalizedName("mp_thruster_15_balefire_large"); + mp_thruster_15_balefire_large_rad = new ItemCustomMissilePart().makeThruster(FuelType.BALEFIRE, 1F, 7.5F, PartSize.SIZE_15).setAuthor("The Master").setHealth(35F).setRarity(Rarity.UNCOMMON).setUnlocalizedName("mp_thruster_15_balefire_large_rad"); + mp_thruster_20_kerosene = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 100F, PartSize.SIZE_20).setHealth(30F) .setUnlocalizedName("mp_thruster_20_kerosene"); + mp_thruster_20_kerosene_dual = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 100F, PartSize.SIZE_20).setHealth(30F) .setUnlocalizedName("mp_thruster_20_kerosene_dual"); + mp_thruster_20_kerosene_triple = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 100F, PartSize.SIZE_20).setHealth(30F) .setUnlocalizedName("mp_thruster_20_kerosene_triple"); + mp_thruster_20_solid = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 100F, PartSize.SIZE_20).setHealth(35F).setWittyText("It's basically just a big hole at the end of the fuel tank.").setUnlocalizedName("mp_thruster_20_solid"); + mp_thruster_20_solid_multi = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 100F, PartSize.SIZE_20).setHealth(35F) .setUnlocalizedName("mp_thruster_20_solid_multi"); + mp_thruster_20_solid_multier = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 100F, PartSize.SIZE_20).setHealth(35F).setWittyText("Did I miscount? Hope not.").setUnlocalizedName("mp_thruster_20_solid_multier"); + + mp_stability_10_flat = new ItemCustomMissilePart().makeStability(0.5F, PartSize.SIZE_10).setHealth(10F) .setUnlocalizedName("mp_stability_10_flat"); + mp_stability_10_cruise = new ItemCustomMissilePart().makeStability(0.25F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_stability_10_cruise"); + mp_stability_10_space = new ItemCustomMissilePart().makeStability(0.35F, PartSize.SIZE_10).setHealth(5F).setRarity(Rarity.COMMON).setWittyText("Standing there alone, the ship is waiting / All systems are go, are you sure?") .setUnlocalizedName("mp_stability_10_space"); + mp_stability_15_flat = new ItemCustomMissilePart().makeStability(0.5F, PartSize.SIZE_15).setHealth(10F) .setUnlocalizedName("mp_stability_15_flat"); + mp_stability_15_thin = new ItemCustomMissilePart().makeStability(0.35F, PartSize.SIZE_15).setHealth(5F) .setUnlocalizedName("mp_stability_15_thin"); + mp_stability_15_soyuz = new ItemCustomMissilePart().makeStability(0.25F, PartSize.SIZE_15).setHealth(15F).setRarity(Rarity.COMMON).setWittyText("Союз!").setUnlocalizedName("mp_stability_15_soyuz"); + mp_stability_20_flat = new ItemCustomMissilePart().makeStability(0.5F, PartSize.SIZE_20) .setUnlocalizedName("mp_s_20"); + + mp_fuselage_10_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 2500F, PartSize.SIZE_10, PartSize.SIZE_10).setAuthor("Hoboy").setHealth(20F).setUnlocalizedName("mp_fuselage_10_kerosene"); + mp_fuselage_10_kerosene_camo = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Camo").setUnlocalizedName("mp_fuselage_10_kerosene_camo"); + mp_fuselage_10_kerosene_desert = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Desert Camo").setUnlocalizedName("mp_fuselage_10_kerosene_desert"); + mp_fuselage_10_kerosene_sky = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Sky Camo").setUnlocalizedName("mp_fuselage_10_kerosene_sky"); + mp_fuselage_10_kerosene_flames = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.UNCOMMON).setTitle("Sick Flames").setUnlocalizedName("mp_fuselage_10_kerosene_flames"); + mp_fuselage_10_kerosene_insulation = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(25F).setUnlocalizedName("mp_fuselage_10_kerosene_insulation"); + mp_fuselage_10_kerosene_sleek = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.RARE).setTitle("IF-R&D").setHealth(35F).setUnlocalizedName("mp_fuselage_10_kerosene_sleek"); + mp_fuselage_10_kerosene_metal = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.UNCOMMON).setTitle("Bolted Metal").setHealth(30F).setAuthor("Hoboy").setUnlocalizedName("mp_fuselage_10_kerosene_metal"); + mp_fuselage_10_kerosene_taint = ((ItemCustomMissilePart) mp_fuselage_10_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Sam").setTitle("Tainted").setUnlocalizedName("mp_fuselage_10_kerosene_taint"); + + mp_fuselage_10_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 2500F, PartSize.SIZE_10, PartSize.SIZE_10).setHealth(25F) .setUnlocalizedName("mp_fuselage_10_solid"); + mp_fuselage_10_solid_flames = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.UNCOMMON).setTitle("Sick Flames").setUnlocalizedName("mp_fuselage_10_solid_flames"); + mp_fuselage_10_solid_insulation = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(30F).setUnlocalizedName("mp_fuselage_10_solid_insulation"); + mp_fuselage_10_solid_sleek = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.RARE).setTitle("IF-R&D").setHealth(35F).setUnlocalizedName("mp_fuselage_10_solid_sleek"); + mp_fuselage_10_solid_soviet_glory = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.EPIC).setAuthor("Hoboy").setHealth(35F).setTitle("Soviet Glory").setUnlocalizedName("mp_fuselage_10_solid_soviet_glory"); + mp_fuselage_10_solid_cathedral = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.RARE).setAuthor("Satan").setTitle("Unholy Cathedral").setWittyText("Quakeesque!").setUnlocalizedName("mp_fuselage_10_solid_cathedral"); + mp_fuselage_10_solid_moonlit = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("The Master & Hoboy").setTitle("Moonlit").setUnlocalizedName("mp_fuselage_10_solid_moonlit"); + mp_fuselage_10_solid_battery = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("wolfmonster222").setHealth(30F).setTitle("Ecstatic").setWittyText("I got caught eating batteries again :(").setUnlocalizedName("mp_fuselage_10_solid_battery"); + mp_fuselage_10_solid_duracell = ((ItemCustomMissilePart) mp_fuselage_10_solid).copy().setRarity(Rarity.RARE).setAuthor("Hoboy").setTitle("Duracell").setHealth(30F).setWittyText("The crunchiest battery on the market!").setUnlocalizedName("mp_fuselage_10_solid_duracell"); + + mp_fuselage_10_xenon = new ItemCustomMissilePart().makeFuselage(FuelType.XENON, 5000F, PartSize.SIZE_10, PartSize.SIZE_10).setHealth(20F) .setUnlocalizedName("mp_fuselage_10_xenon"); + mp_fuselage_10_xenon_bhole = ((ItemCustomMissilePart) mp_fuselage_10_xenon).copy().setRarity(Rarity.RARE).setAuthor("Sten89").setTitle("Morceus-1457").setUnlocalizedName("mp_fuselage_10_xenon_bhole"); + + mp_fuselage_10_long_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 5000F, PartSize.SIZE_10, PartSize.SIZE_10).setAuthor("Hoboy").setHealth(30F).setUnlocalizedName("mp_fuselage_10_long_kerosene"); + mp_fuselage_10_long_kerosene_camo = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Camo").setUnlocalizedName("mp_fuselage_10_long_kerosene_camo"); + mp_fuselage_10_long_kerosene_desert = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Desert Camo").setUnlocalizedName("mp_fuselage_10_long_kerosene_desert"); + mp_fuselage_10_long_kerosene_sky = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Sky Camo").setUnlocalizedName("mp_fuselage_10_long_kerosene_sky"); + mp_fuselage_10_long_kerosene_flames = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.UNCOMMON).setTitle("Sick Flames").setUnlocalizedName("mp_fuselage_10_long_kerosene_flames"); + mp_fuselage_10_long_kerosene_insulation = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(35F).setUnlocalizedName("mp_fuselage_10_long_kerosene_insulation"); + mp_fuselage_10_long_kerosene_sleek = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.RARE).setTitle("IF-R&D").setHealth(40F).setUnlocalizedName("mp_fuselage_10_long_kerosene_sleek"); + mp_fuselage_10_long_kerosene_metal = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Hoboy").setHealth(35F).setUnlocalizedName("mp_fuselage_10_long_kerosene_metal"); + mp_fuselage_10_long_kerosene_dash = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.EPIC).setAuthor("Sam").setTitle("Dash").setWittyText("I wash my hands of it.").setCreativeTab(null).setUnlocalizedName("mp_fuselage_10_long_kerosene_dash"); + mp_fuselage_10_long_kerosene_taint = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Sam").setTitle("Tainted").setUnlocalizedName("mp_fuselage_10_long_kerosene_taint"); + mp_fuselage_10_long_kerosene_vap = ((ItemCustomMissilePart) mp_fuselage_10_long_kerosene).copy().setRarity(Rarity.EPIC).setAuthor("VT-6/24").setTitle("Minty Contrail").setWittyText("Upper rivet!").setUnlocalizedName("mp_fuselage_10_long_kerosene_vap"); + + mp_fuselage_10_long_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 5000F, PartSize.SIZE_10, PartSize.SIZE_10).setHealth(35F) .setUnlocalizedName("mp_fuselage_10_long_solid"); + mp_fuselage_10_long_solid_flames = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.UNCOMMON).setTitle("Sick Flames").setUnlocalizedName("mp_fuselage_10_long_solid_flames"); + mp_fuselage_10_long_solid_insulation = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(40F).setUnlocalizedName("mp_fuselage_10_long_solid_insulation"); + mp_fuselage_10_long_solid_sleek = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.RARE).setTitle("IF-R&D").setHealth(45F).setUnlocalizedName("mp_fuselage_10_long_solid_sleek"); + mp_fuselage_10_long_solid_soviet_glory = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.EPIC).setAuthor("Hoboy").setHealth(45F).setTitle("Soviet Glory").setWittyText("Fully Automated Luxury Gay Space Communism!").setUnlocalizedName("mp_fuselage_10_long_solid_soviet_glory"); + mp_fuselage_10_long_solid_bullet = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.COMMON).setAuthor("Sam").setTitle("Bullet Bill").setUnlocalizedName("mp_fuselage_10_long_solid_bullet"); + mp_fuselage_10_long_solid_silvermoonlight = ((ItemCustomMissilePart) mp_fuselage_10_long_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("The Master").setTitle("Silver Moonlight").setUnlocalizedName("mp_fuselage_10_long_solid_silvermoonlight"); + + mp_fuselage_10_15_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 10000F, PartSize.SIZE_10, PartSize.SIZE_15).setHealth(40F).setUnlocalizedName("mp_fuselage_10_15_kerosene"); + mp_fuselage_10_15_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 10000F, PartSize.SIZE_10, PartSize.SIZE_15).setHealth(40F) .setUnlocalizedName("mp_fuselage_10_15_solid"); + mp_fuselage_10_15_hydrogen = new ItemCustomMissilePart().makeFuselage(FuelType.HYDROGEN, 10000F, PartSize.SIZE_10, PartSize.SIZE_15).setHealth(40F).setUnlocalizedName("mp_fuselage_10_15_hydrogen"); + mp_fuselage_10_15_balefire = new ItemCustomMissilePart().makeFuselage(FuelType.BALEFIRE, 10000F, PartSize.SIZE_10, PartSize.SIZE_15).setHealth(40F).setUnlocalizedName("mp_fuselage_10_15_balefire"); + + mp_fuselage_15_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 15000F, PartSize.SIZE_15, PartSize.SIZE_15).setAuthor("Hoboy").setHealth(50F).setUnlocalizedName("mp_fuselage_15_kerosene"); + mp_fuselage_15_kerosene_camo = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Camo").setUnlocalizedName("mp_fuselage_15_kerosene_camo"); + mp_fuselage_15_kerosene_desert = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Desert Camo").setUnlocalizedName("mp_fuselage_15_kerosene_desert"); + mp_fuselage_15_kerosene_sky = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Sky Camo").setUnlocalizedName("mp_fuselage_15_kerosene_sky"); + mp_fuselage_15_kerosene_insulation = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(55F).setWittyText("Rest in spaghetti Columbia :(").setUnlocalizedName("mp_fuselage_15_kerosene_insulation"); + mp_fuselage_15_kerosene_metal = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Hoboy").setTitle("Bolted Metal").setHealth(60F).setWittyText("Metal frame with metal plating reinforced with bolted metal sheets and metal.").setUnlocalizedName("mp_fuselage_15_kerosene_metal"); + mp_fuselage_15_kerosene_decorated = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Hoboy").setTitle("Decorated").setHealth(60F).setUnlocalizedName("mp_fuselage_15_kerosene_decorated"); + mp_fuselage_15_kerosene_steampunk = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.RARE).setAuthor("Hoboy").setTitle("Steampunk").setHealth(60F).setUnlocalizedName("mp_fuselage_15_kerosene_steampunk"); + mp_fuselage_15_kerosene_polite = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.LEGENDARY).setAuthor("Hoboy").setTitle("Polite").setHealth(60F).setUnlocalizedName("mp_fuselage_15_kerosene_polite"); + mp_fuselage_15_kerosene_blackjack = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.LEGENDARY).setTitle("Queen Whiskey").setHealth(100F).setUnlocalizedName("mp_fuselage_15_kerosene_blackjack"); + mp_fuselage_15_kerosene_lambda = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.RARE).setAuthor("VT-6/24").setTitle("Lambda Complex").setHealth(75F).setWittyText("MAGNIFICENT MICROWAVE CASSEROLE").setUnlocalizedName("mp_fuselage_15_kerosene_lambda"); + mp_fuselage_15_kerosene_minuteman = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Spexta").setTitle("MX 1702").setUnlocalizedName("mp_fuselage_15_kerosene_minuteman"); + mp_fuselage_15_kerosene_pip = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.EPIC).setAuthor("The Doctor").setTitle("LittlePip").setWittyText("31!").setCreativeTab(null).setUnlocalizedName("mp_fuselage_15_kerosene_pip"); + mp_fuselage_15_kerosene_taint = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.UNCOMMON).setAuthor("Sam").setTitle("Tainted").setWittyText("DUN-DUN!").setUnlocalizedName("mp_fuselage_15_kerosene_taint"); + mp_fuselage_15_kerosene_yuck = ((ItemCustomMissilePart) mp_fuselage_15_kerosene).copy().setRarity(Rarity.EPIC).setAuthor("Hoboy").setTitle("Flesh").setWittyText("Note: Never clean DNA vials with your own spit.").setHealth(60F).setUnlocalizedName("mp_fuselage_15_kerosene_yuck"); + + mp_fuselage_15_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 15000F, PartSize.SIZE_15, PartSize.SIZE_15).setHealth(60F) .setUnlocalizedName("mp_fuselage_15_solid").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); + mp_fuselage_15_solid_insulation = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.COMMON).setTitle("Orange Insulation").setHealth(65F).setUnlocalizedName("mp_fuselage_15_solid_insulation"); + mp_fuselage_15_solid_desh = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.RARE).setAuthor("Hoboy").setTitle("Desh Plating").setHealth(80F).setUnlocalizedName("mp_fuselage_15_solid_desh"); + mp_fuselage_15_solid_soviet_glory = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.RARE).setAuthor("Hoboy").setTitle("Soviet Glory").setHealth(70F).setUnlocalizedName("mp_fuselage_15_solid_soviet_glory"); + mp_fuselage_15_solid_soviet_stank = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.EPIC).setAuthor("Hoboy").setTitle("Soviet Stank").setHealth(15F).setWittyText("Aged like a fine wine! Well, almost.").setUnlocalizedName("mp_fuselage_15_solid_soviet_stank"); + mp_fuselage_15_solid_faust = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.LEGENDARY).setAuthor("Dr.Nostalgia").setTitle("Mighty Lauren").setHealth(250F).setWittyText("Welcome to Subway, may I take your order?").setUnlocalizedName("mp_fuselage_15_solid_faust"); + mp_fuselage_15_solid_silvermoonlight = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("The Master").setTitle("Silver Moonlight").setUnlocalizedName("mp_fuselage_15_solid_silvermoonlight"); + mp_fuselage_15_solid_snowy = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("Dr.Nostalgia").setTitle("Chilly Day").setUnlocalizedName("mp_fuselage_15_solid_snowy"); + mp_fuselage_15_solid_panorama = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.RARE).setAuthor("Hoboy").setTitle("Panorama").setUnlocalizedName("mp_fuselage_15_solid_panorama"); + mp_fuselage_15_solid_roses = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.UNCOMMON).setAuthor("Hoboy").setTitle("Bed of roses").setUnlocalizedName("mp_fuselage_15_solid_roses"); + mp_fuselage_15_solid_mimi = ((ItemCustomMissilePart) mp_fuselage_15_solid).copy().setRarity(Rarity.RARE).setTitle("Mimi-chan").setUnlocalizedName("mp_fuselage_15_solid_mimi"); + + mp_fuselage_15_hydrogen = new ItemCustomMissilePart().makeFuselage(FuelType.HYDROGEN, 15000F, PartSize.SIZE_15, PartSize.SIZE_15).setHealth(50F) .setUnlocalizedName("mp_fuselage_15_hydrogen").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); + mp_fuselage_15_hydrogen_cathedral = ((ItemCustomMissilePart) mp_fuselage_15_hydrogen).copy().setRarity(Rarity.UNCOMMON).setAuthor("Satan").setTitle("Unholy Cathedral").setUnlocalizedName("mp_fuselage_15_hydrogen_cathedral"); + + mp_fuselage_15_balefire = new ItemCustomMissilePart().makeFuselage(FuelType.BALEFIRE, 15000F, PartSize.SIZE_15, PartSize.SIZE_15).setHealth(75F) .setUnlocalizedName("mp_fuselage_15_balefire").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); + + mp_fuselage_15_20_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 20000, PartSize.SIZE_15, PartSize.SIZE_20).setAuthor("Hoboy").setHealth(70F).setUnlocalizedName("mp_fuselage_15_20_kerosene").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); + mp_fuselage_15_20_kerosene_magnusson = ((ItemCustomMissilePart)mp_fuselage_15_20_kerosene).copy().setRarity(Rarity.RARE).setAuthor("VT-6/24").setTitle("White Forest Rocket").setWittyText("And get your cranio-conjugal parasite away from my nose cone!").setUnlocalizedName("mp_fuselage_15_20_kerosene_magnusson"); + mp_fuselage_15_20_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 20000, PartSize.SIZE_15, PartSize.SIZE_20).setHealth(70F).setUnlocalizedName("mp_fuselage_15_20_solid").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); + + mp_fuselage_20_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 1000F, PartSize.SIZE_20, PartSize.SIZE_20) .setUnlocalizedName("mp_f_20").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); + + mp_warhead_10_he = new ItemCustomMissilePart().makeWarhead(WarheadType.HE, 15F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_warhead_10_he").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_10_incendiary = new ItemCustomMissilePart().makeWarhead(WarheadType.INC, 15F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_warhead_10_incendiary").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_10_buster = new ItemCustomMissilePart().makeWarhead(WarheadType.BUSTER, 5F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_warhead_10_buster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_10_nuclear = new ItemCustomMissilePart().makeWarhead(WarheadType.NUCLEAR, 35F, 1.5F, PartSize.SIZE_10).setTitle("Tater Tot").setHealth(10F).setUnlocalizedName("mp_warhead_10_nuclear").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_10_nuclear_large = new ItemCustomMissilePart().makeWarhead(WarheadType.NUCLEAR, 75F, 2.5F, PartSize.SIZE_10).setTitle("Chernobyl Boris").setHealth(15F).setUnlocalizedName("mp_warhead_10_nuclear_large").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_10_taint = new ItemCustomMissilePart().makeWarhead(WarheadType.TAINT, 15F, 1.5F, PartSize.SIZE_10).setHealth(20F).setRarity(Rarity.UNCOMMON).setWittyText("Eat my taint! Bureaucracy is dead and we killed it!").setUnlocalizedName("mp_warhead_10_taint").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_10_cloud = new ItemCustomMissilePart().makeWarhead(WarheadType.CLOUD, 15F, 1.5F, PartSize.SIZE_10).setHealth(20F).setRarity(Rarity.RARE).setUnlocalizedName("mp_warhead_10_cloud").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_15_he = new ItemCustomMissilePart().makeWarhead(WarheadType.HE, 50F, 2.5F, PartSize.SIZE_15).setHealth(10F) .setUnlocalizedName("mp_warhead_15_he").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_15_incendiary = new ItemCustomMissilePart().makeWarhead(WarheadType.INC, 35F, 2.5F, PartSize.SIZE_15).setHealth(10F) .setUnlocalizedName("mp_warhead_15_incendiary").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_15_nuclear = new ItemCustomMissilePart().makeWarhead(WarheadType.NUCLEAR, 125F, 5F, PartSize.SIZE_15).setTitle("Auntie Bertha").setHealth(15F).setUnlocalizedName("mp_warhead_15_nuclear").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_15_nuclear_shark = ((ItemCustomMissilePart) mp_warhead_15_nuclear).copy().setRarity(Rarity.UNCOMMON).setTitle("Discount Bullet Bill").setWittyText("Nose art on a cannon bullet? Who does that?").setUnlocalizedName("mp_warhead_15_nuclear_shark"); + mp_warhead_15_nuclear_mimi = ((ItemCustomMissilePart) mp_warhead_15_nuclear).copy().setRarity(Rarity.RARE).setTitle("FASHIONABLE MISSILE").setUnlocalizedName("mp_warhead_15_nuclear_mimi"); + mp_warhead_15_boxcar = new ItemCustomMissilePart().makeWarhead(WarheadType.TX, 250F, 7.5F, PartSize.SIZE_15).setWittyText("?!?!").setHealth(35F).setRarity(Rarity.LEGENDARY).setUnlocalizedName("mp_warhead_15_boxcar").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_15_n2 = new ItemCustomMissilePart().makeWarhead(WarheadType.N2, 100F, 5F, PartSize.SIZE_15).setWittyText("[screams geometrically]").setHealth(20F).setRarity(Rarity.RARE).setUnlocalizedName("mp_warhead_15_n2").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_15_balefire = new ItemCustomMissilePart().makeWarhead(WarheadType.BALEFIRE, 100F, 7.5F, PartSize.SIZE_15).setRarity(Rarity.LEGENDARY).setAuthor("VT-6/24").setHealth(15F).setWittyText("Hightower, never forgetti.").setUnlocalizedName("mp_warhead_15_balefire").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_15_turbine = new ItemCustomMissilePart().makeWarhead(WarheadType.TURBINE, 200F, 5F, PartSize.SIZE_15).setRarity(Rarity.SEWS_CLOTHES_AND_SUCKS_HORSE_COCK).setHealth(250F).setUnlocalizedName("mp_warhead_15_turbine").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_20_he = new ItemCustomMissilePart().makeWarhead(WarheadType.HE, 15F, 1F, PartSize.SIZE_20) .setUnlocalizedName("mp_w_20").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + + mp_chip_1 = new ItemCustomMissilePart().makeChip(0.1F) .setUnlocalizedName("mp_c_1").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_1"); + mp_chip_2 = new ItemCustomMissilePart().makeChip(0.05F) .setUnlocalizedName("mp_c_2").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_2"); + mp_chip_3 = new ItemCustomMissilePart().makeChip(0.01F) .setUnlocalizedName("mp_c_3").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_3"); + mp_chip_4 = new ItemCustomMissilePart().makeChip(0.005F) .setUnlocalizedName("mp_c_4").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_4"); + mp_chip_5 = new ItemCustomMissilePart().makeChip(0.0F) .setUnlocalizedName("mp_c_5").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_5"); + + missile_skin_camo = new ItemCustomLore().setUnlocalizedName("missile_skin_camo").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_camo"); + missile_skin_desert = new ItemCustomLore().setUnlocalizedName("missile_skin_desert").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_desert"); + missile_skin_flames = new ItemCustomLore().setUnlocalizedName("missile_skin_flames").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_flames"); + missile_skin_manly_pink = new ItemCustomLore().setUnlocalizedName("missile_skin_manly_pink").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_manly_pink"); + missile_skin_orange_insulation = new ItemCustomLore().setUnlocalizedName("missile_skin_orange_insulation").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_orange_insulation"); + missile_skin_sleek = new ItemCustomLore().setUnlocalizedName("missile_skin_sleek").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_sleek"); + missile_skin_soviet_glory = new ItemCustomLore().setUnlocalizedName("missile_skin_soviet_glory").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_soviet_glory"); + missile_skin_soviet_stank = new ItemCustomLore().setUnlocalizedName("missile_skin_soviet_stank").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_soviet_stank"); + missile_skin_metal = new ItemCustomLore().setUnlocalizedName("missile_skin_metal").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_metal"); + + ammo_shell = (ItemEnumMulti) new ItemAmmo(Ammo240Shell.class).setCreativeTab(MainRegistry.weaponTab).setUnlocalizedName("ammo_shell"); + ammo_dgk = new ItemCustomLore().setUnlocalizedName("ammo_dgk").setCreativeTab(MainRegistry.weaponTab); + ammo_fireext = (ItemEnumMulti) new ItemAmmo(AmmoFireExt.class).setCreativeTab(MainRegistry.weaponTab).setUnlocalizedName("ammo_fireext"); + ammo_misc = new ItemAmmo(AmmoMisc.class).setUnlocalizedName("ammo_misc"); + ammo_arty = new ItemAmmoArty().setUnlocalizedName("ammo_arty"); + ammo_himars = new ItemAmmoHIMARS().setUnlocalizedName("ammo_himars"); + + gun_b92_ammo = new GunB92Cell().setUnlocalizedName("gun_b92_ammo").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92_ammo_alt"); + gun_b92 = new GunB92().setUnlocalizedName("gun_b92").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92"); + gun_fireext = new ItemGunBase(GunEnergyFactory.getExtConfig()).setUnlocalizedName("gun_fireext").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_fireext"); + + ToolMaterial matCrucible = EnumHelper.addToolMaterial("CRUCIBLE", 10, 3, 50.0F, 100.0F, 0); + crucible = new ItemCrucible(5000, 1F, matCrucible).setUnlocalizedName("crucible").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":crucible"); + + stick_dynamite = new ItemGrenade(3).setUnlocalizedName("stick_dynamite").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":stick_dynamite"); + stick_dynamite_fishing = new ItemGrenadeFishing(3).setUnlocalizedName("stick_dynamite_fishing").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":stick_dynamite_fishing"); + stick_tnt = new Item().setUnlocalizedName("stick_tnt").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":stick_tnt"); + stick_semtex = new Item().setUnlocalizedName("stick_semtex").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":stick_semtex"); + stick_c4 = new Item().setUnlocalizedName("stick_c4").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":stick_c4"); + + grenade_generic = new ItemGrenade(4).setUnlocalizedName("grenade_generic").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_generic"); + grenade_strong = new ItemGrenade(5).setUnlocalizedName("grenade_strong").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_strong"); + grenade_frag = new ItemGrenade(4).setUnlocalizedName("grenade_frag").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_frag_alt"); + grenade_fire = new ItemGrenade(4).setUnlocalizedName("grenade_fire").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_fire_alt"); + grenade_shrapnel = new ItemGrenade(4).setUnlocalizedName("grenade_shrapnel").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_shrapnel"); + grenade_cluster = new ItemGrenade(5).setUnlocalizedName("grenade_cluster").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_cluster_alt"); + grenade_flare = new ItemGrenade(0).setUnlocalizedName("grenade_flare").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_flare_alt"); + grenade_electric = new ItemGrenade(5).setUnlocalizedName("grenade_electric").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_electric_alt"); + grenade_poison = new ItemGrenade(4).setUnlocalizedName("grenade_poison").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_poison_alt"); + grenade_gas = new ItemGrenade(4).setUnlocalizedName("grenade_gas").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_gas_alt"); + grenade_pulse = new ItemGrenade(4).setUnlocalizedName("grenade_pulse").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_pulse"); + grenade_plasma = new ItemGrenade(5).setUnlocalizedName("grenade_plasma").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_plasma_alt"); + grenade_tau = new ItemGrenade(5).setUnlocalizedName("grenade_tau").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_tau_alt"); + grenade_schrabidium = new ItemGrenade(7).setUnlocalizedName("grenade_schrabidium").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_schrabidium_alt"); + grenade_lemon = new ItemGrenade(4).setUnlocalizedName("grenade_lemon").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_lemon"); + grenade_gascan = new ItemGrenade(-1).setUnlocalizedName("grenade_gascan").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_gascan"); + grenade_kyiv = new ItemGrenadeKyiv(-1).setUnlocalizedName("grenade_kyiv").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_kyiv"); + grenade_mk2 = new ItemGrenade(5).setUnlocalizedName("grenade_mk2").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_mk2_alt"); + grenade_aschrab = new ItemGrenade(-1).setUnlocalizedName("grenade_aschrab").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_aschrab"); + grenade_nuke = new ItemGrenade(-1).setUnlocalizedName("grenade_nuke").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_nuke_alt"); + grenade_nuclear = new ItemGrenade(7).setUnlocalizedName("grenade_nuclear").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_nuclear"); + grenade_zomg = new ItemGrenade(7).setUnlocalizedName("grenade_zomg").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_zomg"); + grenade_black_hole = new ItemGrenade(7).setUnlocalizedName("grenade_black_hole").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_black_hole"); + grenade_cloud = new ItemGrenade(-1).setUnlocalizedName("grenade_cloud").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_cloud"); + grenade_pink_cloud = new ItemGrenade(-1).setUnlocalizedName("grenade_pink_cloud").setCreativeTab(null).setTextureName(RefStrings.MODID + ":grenade_pink_cloud"); + ullapool_caber = new WeaponSpecial(MainRegistry.tMatSteel).setUnlocalizedName("ullapool_caber").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ullapool_caber"); + + grenade_if_generic = new ItemGrenade(4).setUnlocalizedName("grenade_if_generic").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_generic"); + grenade_if_he = new ItemGrenade(5).setUnlocalizedName("grenade_if_he").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_he"); + grenade_if_bouncy = new ItemGrenade(4).setUnlocalizedName("grenade_if_bouncy").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_bouncy"); + grenade_if_sticky = new ItemGrenade(4).setUnlocalizedName("grenade_if_sticky").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_sticky"); + grenade_if_impact = new ItemGrenade(-1).setUnlocalizedName("grenade_if_impact").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_impact"); + grenade_if_incendiary = new ItemGrenade(4).setUnlocalizedName("grenade_if_incendiary").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_incendiary"); + grenade_if_toxic = new ItemGrenade(4).setUnlocalizedName("grenade_if_toxic").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_toxic"); + grenade_if_concussion = new ItemGrenade(4).setUnlocalizedName("grenade_if_concussion").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_concussion"); + grenade_if_brimstone = new ItemGrenade(5).setUnlocalizedName("grenade_if_brimstone").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_brimstone"); + grenade_if_mystery = new ItemGrenade(5).setUnlocalizedName("grenade_if_mystery").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_mystery"); + grenade_if_spark = new ItemGrenade(7).setUnlocalizedName("grenade_if_spark").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_spark"); + grenade_if_hopwire = new ItemGrenade(7).setUnlocalizedName("grenade_if_hopwire").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_hopwire"); + grenade_if_null = new ItemGrenade(7).setUnlocalizedName("grenade_if_null").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_if_null"); + + grenade_smart = new ItemGrenade(-1).setUnlocalizedName("grenade_smart").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_smart"); + grenade_mirv = new ItemGrenade(1).setUnlocalizedName("grenade_mirv").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_mirv"); + grenade_breach = new ItemGrenade(-1).setUnlocalizedName("grenade_breach").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_breach"); + grenade_burst = new ItemGrenade(1).setUnlocalizedName("grenade_burst").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_burst"); + nuclear_waste_pearl = new ItemGrenade(-1).setUnlocalizedName("nuclear_waste_pearl").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":nuclear_waste_pearl"); + + weaponized_starblaster_cell = new WeaponizedCell().setUnlocalizedName("weaponized_starblaster_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92_ammo_weaponized"); + + bomb_waffle = new ItemWaffle(20, false).setUnlocalizedName("bomb_waffle").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bomb_waffle"); + schnitzel_vegan = new ItemSchnitzelVegan(0, true).setUnlocalizedName("schnitzel_vegan").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":schnitzel_vegan"); + cotton_candy = new ItemCottonCandy(5, false).setUnlocalizedName("cotton_candy").setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":cotton_candy"); + apple_lead = new ItemAppleSchrabidium(5, 0, false).setUnlocalizedName("apple_lead").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":apple_lead"); + apple_schrabidium = new ItemAppleSchrabidium(20, 100, false).setUnlocalizedName("apple_schrabidium").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":apple_schrabidium"); + tem_flakes = new ItemTemFlakes(0, 0, false).setUnlocalizedName("tem_flakes").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":tem_flakes"); + glowing_stew = new ItemSoup(6).setUnlocalizedName("glowing_stew").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glowing_stew"); + balefire_scrambled = new ItemSoup(6).setUnlocalizedName("balefire_scrambled").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":balefire_scrambled"); + balefire_and_ham = new ItemSoup(6).setUnlocalizedName("balefire_and_ham").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":balefire_and_ham"); + lemon = new ItemLemon(3, 0.5F, false).setUnlocalizedName("lemon").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":lemon"); + definitelyfood = new ItemLemon(3, 0.5F, false).setUnlocalizedName("definitelyfood").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":definitelyfood"); + med_ipecac = new ItemLemon(0, 0, false).setUnlocalizedName("med_ipecac").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_ipecac_new"); + med_ptsd = new ItemLemon(0, 0, false).setUnlocalizedName("med_ptsd").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_ptsd_new"); + med_schizophrenia = new ItemLemon(0, 0, false).setUnlocalizedName("med_schizophrenia").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_schizophrenia_new"); + loops = new ItemLemon(4, 0.25F, false).setUnlocalizedName("loops").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":loops"); + loop_stew = new ItemLemon(10, 0.5F, false).setUnlocalizedName("loop_stew").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":loop_stew"); + spongebob_macaroni = new ItemLemon(5, 1F, false).setUnlocalizedName("spongebob_macaroni").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spongebob_macaroni"); + fooditem = new ItemLemon(2, 5F, false).setUnlocalizedName("fooditem").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":fooditem"); + twinkie = new ItemLemon(3, 0.25F, false).setUnlocalizedName("twinkie").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":twinkie"); + static_sandwich = new ItemLemon(6, 1F, false).setUnlocalizedName("static_sandwich").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":static_sandwich"); + pudding = new ItemLemon(6, 1F, false).setUnlocalizedName("pudding").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pudding"); + canteen_vodka = new ItemCanteen(3 * 60).setUnlocalizedName("canteen_vodka").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canteen_vodka"); + canteen_fab = new ItemCanteen(2 * 60).setUnlocalizedName("canteen_fab").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canteen_fab"); + pancake = new ItemPancake(20, 20, false).setUnlocalizedName("pancake").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pancake"); + nugget = new ItemLemon(200, 1F, false).setUnlocalizedName("nugget").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nugget"); + peas = new ItemPeas().setUnlocalizedName("peas").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":peas"); + marshmallow = new ItemMarshmallow().setUnlocalizedName("marshmallow").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":marshmallow"); + cheese = new ItemLemon(5, 0.75F, false).setUnlocalizedName("cheese").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cheese"); + quesadilla = new ItemLemon(8, 1F, false).setUnlocalizedName("cheese_quesadilla").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":quesadilla"); + mucho_mango = new ItemMuchoMango(10).setUnlocalizedName("mucho_mango").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":mucho_mango"); + glyphid_meat = new ItemLemon(3, 0.5F, true).setUnlocalizedName("glyphid_meat").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glyphid_meat"); + glyphid_meat_grilled = new ItemLemon(8, 0.75F, true).setPotionEffect(Potion.damageBoost.id, 180, 1, 1F).setUnlocalizedName("glyphid_meat_grilled").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glyphid_meat_grilled"); + egg_glyphid = new Item().setUnlocalizedName("egg_glyphid").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":egg_glyphid"); + + defuser = new ItemTooling(ToolType.DEFUSER, 100).setUnlocalizedName("defuser").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":defuser"); + reacher = new Item().setUnlocalizedName("reacher").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":reacher"); + bismuth_tool = new ItemAmatExtractor().setUnlocalizedName("bismuth_tool").setMaxStackSize(1).setFull3D().setCreativeTab(null).setTextureName(RefStrings.MODID + ":bismuth_tool"); + meltdown_tool = new ItemDyatlov().setUnlocalizedName("meltdown_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":meltdown_tool"); + + flame_pony = new ItemCustomLore().setUnlocalizedName("flame_pony").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flame_pony"); + flame_conspiracy = new ItemCustomLore().setUnlocalizedName("flame_conspiracy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flame_conspiracy"); + flame_politics = new ItemCustomLore().setUnlocalizedName("flame_politics").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flame_politics"); + flame_opinion = new ItemCustomLore().setUnlocalizedName("flame_opinion").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flame_opinion"); + + //gadget_explosive = new Item().setUnlocalizedName("gadget_explosive").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":gadget_explosive"); + early_explosive_lenses = new ItemCustomLore().setUnlocalizedName("early_explosive_lenses").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":gadget_explosive8"); + explosive_lenses = new ItemCustomLore().setUnlocalizedName("explosive_lenses").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":man_explosive8"); + gadget_wireing = new Item().setUnlocalizedName("gadget_wireing").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":gadget_wireing"); + gadget_core = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("gadget_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":gadget_core"); + + boy_igniter = new Item().setUnlocalizedName("boy_igniter").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_igniter"); + boy_propellant = new Item().setUnlocalizedName("boy_propellant").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_propellant"); + boy_bullet = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("boy_bullet").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_bullet"); + boy_target = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("boy_target").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_target"); + boy_shielding = new Item().setUnlocalizedName("boy_shielding").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_shielding"); + + //man_explosive = new Item().setUnlocalizedName("man_explosive").setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":man_explosive"); + man_igniter = new Item().setUnlocalizedName("man_igniter").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":man_igniter"); + man_core = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("man_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":man_core"); + + mike_core = new Item().setUnlocalizedName("mike_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":mike_core"); + mike_deut = new Item().setUnlocalizedName("mike_deut").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setContainerItem(ModItems.tank_steel).setTextureName(RefStrings.MODID + ":mike_deut"); + mike_cooling_unit = new Item().setUnlocalizedName("mike_cooling_unit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":mike_cooling_unit"); + + tsar_core = new Item().setUnlocalizedName("tsar_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":tsar_core"); + + fleija_igniter = new ItemFleija().setUnlocalizedName("fleija_igniter").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":fleija_igniter"); + fleija_propellant = new ItemFleija().setUnlocalizedName("fleija_propellant").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":fleija_propellant"); + fleija_core = new ItemFleija().setUnlocalizedName("fleija_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":fleija_core"); + + solinium_igniter = new ItemSolinium().setUnlocalizedName("solinium_igniter").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":solinium_igniter"); + solinium_propellant = new ItemSolinium().setUnlocalizedName("solinium_propellant").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":solinium_propellant"); + solinium_core = new ItemSolinium().setUnlocalizedName("solinium_core").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":solinium_core"); + + n2_charge = new ItemN2().setUnlocalizedName("n2_charge").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":n2_charge"); + + egg_balefire_shard = new Item().setUnlocalizedName("egg_balefire_shard").setMaxStackSize(16).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":egg_balefire_shard"); + egg_balefire = new Item().setUnlocalizedName("egg_balefire").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":egg_balefire"); + + custom_tnt = new ItemCustomLore().setUnlocalizedName("custom_tnt").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_tnt"); + custom_nuke = new ItemCustomLore().setUnlocalizedName("custom_nuke").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_nuke"); + custom_hydro = new ItemCustomLore().setUnlocalizedName("custom_hydro").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_hydro"); + custom_amat = new ItemCustomLore().setUnlocalizedName("custom_amat").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_amat"); + custom_dirty = new ItemCustomLore().setUnlocalizedName("custom_dirty").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_dirty"); + custom_schrab = new ItemCustomLore().setUnlocalizedName("custom_schrab").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_schrab"); + custom_fall = new ItemCustomLore().setUnlocalizedName("custom_fall").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_fall"); + + battery_generic = new ItemBattery(5000, 100, 100).setUnlocalizedName("battery_generic").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_generic_new"); + battery_advanced = new ItemBattery(20000, 500, 500).setUnlocalizedName("battery_advanced").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_new"); + battery_lithium = new ItemBattery(250000, 1000, 1000).setUnlocalizedName("battery_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium"); + battery_schrabidium = new ItemBattery(1000000, 5000, 5000).setUnlocalizedName("battery_schrabidium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_new"); + battery_spark = new ItemBattery(100000000, 2000000, 2000000).setUnlocalizedName("battery_spark").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark"); + battery_trixite = new ItemBattery(5000000, 40000, 200000).setUnlocalizedName("battery_trixite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_trixite"); + battery_creative = new Item().setUnlocalizedName("battery_creative").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_creative_new"); + + battery_red_cell = new ItemBattery(15000, 100, 100).setUnlocalizedName("battery_red_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_red_cell"); + battery_red_cell_6 = new ItemBattery(15000 * 6, 100, 100).setUnlocalizedName("battery_red_cell_6").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_red_cell_6"); + battery_red_cell_24 = new ItemBattery(15000 * 24, 100, 100).setUnlocalizedName("battery_red_cell_24").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_red_cell_24"); + battery_advanced_cell = new ItemBattery(60000, 500, 500).setUnlocalizedName("battery_advanced_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_cell"); + battery_advanced_cell_4 = new ItemBattery(60000 * 4, 500, 500).setUnlocalizedName("battery_advanced_cell_4").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_cell_4"); + battery_advanced_cell_12 = new ItemBattery(60000 * 12, 500, 500).setUnlocalizedName("battery_advanced_cell_12").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_cell_12"); + battery_lithium_cell = new ItemBattery(750000, 1000, 1000).setUnlocalizedName("battery_lithium_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium_cell"); + battery_lithium_cell_3 = new ItemBattery(750000 * 3, 1000, 1000).setUnlocalizedName("battery_lithium_cell_3").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium_cell_3"); + battery_lithium_cell_6 = new ItemBattery(750000 * 6, 1000, 1000).setUnlocalizedName("battery_lithium_cell_6").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium_cell_6"); + battery_schrabidium_cell = new ItemBattery(3000000, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell"); + battery_schrabidium_cell_2 = new ItemBattery(3000000 * 2, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell_2").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell_2"); + battery_schrabidium_cell_4 = new ItemBattery(3000000 * 4, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell_4").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell_4"); + battery_spark_cell_6 = new ItemBattery(100000000L * 6L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_6").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_6"); + battery_spark_cell_25 = new ItemBattery(100000000L * 25L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_25").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_25"); + battery_spark_cell_100 = new ItemBattery(100000000L * 100L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_100").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_100"); + battery_spark_cell_1000 = new ItemBattery(100000000L * 1000L, 20000000, 20000000).setUnlocalizedName("battery_spark_cell_1000").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_1000"); + battery_spark_cell_2500 = new ItemBattery(100000000L * 2500L, 20000000, 20000000).setUnlocalizedName("battery_spark_cell_2500").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_2500"); + battery_spark_cell_10000 = new ItemBattery(100000000L * 10000L, 200000000, 200000000).setUnlocalizedName("battery_spark_cell_10000").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_10000"); + battery_spark_cell_power = new ItemBattery(100000000L * 1000000L, 200000000, 200000000).setUnlocalizedName("battery_spark_cell_power").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_power"); + cube_power = new ItemBattery(1000000000000000000L, 1000000000000000L, 1000000000000000L).setUnlocalizedName("cube_power").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":cube_power"); + + battery_sc_uranium = new ItemSelfcharger(5).setUnlocalizedName("battery_sc_uranium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_uranium"); + battery_sc_technetium = new ItemSelfcharger(25).setUnlocalizedName("battery_sc_technetium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_technetium"); + battery_sc_plutonium = new ItemSelfcharger(100).setUnlocalizedName("battery_sc_plutonium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_plutonium"); + battery_sc_polonium = new ItemSelfcharger(500).setUnlocalizedName("battery_sc_polonium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_polonium"); + battery_sc_gold = new ItemSelfcharger(2500).setUnlocalizedName("battery_sc_gold").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_gold"); + battery_sc_lead = new ItemSelfcharger(5000).setUnlocalizedName("battery_sc_lead").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_lead"); + battery_sc_americium = new ItemSelfcharger(10000).setUnlocalizedName("battery_sc_americium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_americium"); + + battery_potato = new ItemBattery(1000, 0, 100).setUnlocalizedName("battery_potato").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_potato"); + battery_potatos = new ItemPotatos(500000, 0, 100).setUnlocalizedName("battery_potatos").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_potatos"); + hev_battery = new ItemFusionCore(150000).setUnlocalizedName("hev_battery").setMaxStackSize(4).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":hev_battery"); + fusion_core = new ItemFusionCore(2500000).setUnlocalizedName("fusion_core").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_core"); + fusion_core_infinite = new Item().setUnlocalizedName("fusion_core_infinite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_core_infinite"); + energy_core = new ItemBattery(10000000, 0, 1000).setUnlocalizedName("energy_core").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":energy_core"); + fuse = new ItemCustomLore().setUnlocalizedName("fuse").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fuse"); + redcoil_capacitor = new ItemCapacitor(10).setUnlocalizedName("redcoil_capacitor").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":redcoil_capacitor"); + euphemium_capacitor = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("euphemium_capacitor").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":redcoil_capacitor_euphemium"); + screwdriver = new ItemTooling(ToolType.SCREWDRIVER, 100).setUnlocalizedName("screwdriver"); + screwdriver_desh = new ItemTooling(ToolType.SCREWDRIVER, 0).setUnlocalizedName("screwdriver_desh"); + hand_drill = new ItemTooling(ToolType.HAND_DRILL, 100).setUnlocalizedName("hand_drill"); + hand_drill_desh = new ItemTooling(ToolType.HAND_DRILL, 0).setUnlocalizedName("hand_drill_desh"); + wrench_archineer = new ItemToolingWeapon(ToolType.WRENCH, 1000, 12F).setUnlocalizedName("wrench_archineer").setTextureName(RefStrings.MODID + ":wrench_archineer_hd"); + chemistry_set = new ItemCraftingDegradation(100).setUnlocalizedName("chemistry_set"); + chemistry_set_boron = new ItemCraftingDegradation(0).setUnlocalizedName("chemistry_set_boron"); + blowtorch = new ItemBlowtorch().setUnlocalizedName("blowtorch"); + acetylene_torch = new ItemBlowtorch().setUnlocalizedName("acetylene_torch"); + boltgun = new ItemBoltgun().setUnlocalizedName("boltgun"); + overfuse = new ItemCustomLore().setUnlocalizedName("overfuse").setMaxStackSize(1).setFull3D().setTextureName(RefStrings.MODID + ":overfuse"); + arc_electrode = new ItemArcElectrode().setUnlocalizedName("arc_electrode").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":arc_electrode"); + arc_electrode_burnt = new ItemArcElectrodeBurnt().setUnlocalizedName("arc_electrode_burnt").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":arc_electrode_burnt"); + + ams_focus_blank = new Item().setUnlocalizedName("ams_focus_blank").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_focus_blank"); + ams_focus_limiter = new ItemCustomLore().setUnlocalizedName("ams_focus_limiter").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_focus_limiter"); + ams_focus_booster = new ItemCustomLore().setUnlocalizedName("ams_focus_booster").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_focus_booster"); + ams_muzzle = new ItemCustomLore().setUnlocalizedName("ams_muzzle").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_muzzle"); + ams_lens = new ItemLens(60 * 60 * 60 * 20 * 100).setUnlocalizedName("ams_lens").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_lens"); + ams_core_sing = new ItemAMSCore(1000000000L, 200, 10).setUnlocalizedName("ams_core_sing").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_core_sing"); + ams_core_wormhole = new ItemAMSCore(1500000000L, 200, 15).setUnlocalizedName("ams_core_wormhole").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_core_wormhole"); + ams_core_eyeofharmony = new ItemAMSCore(2500000000L, 300, 10).setUnlocalizedName("ams_core_eyeofharmony").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_core_eyeofharmony"); + ams_core_thingy = new ItemAMSCore(5000000000L, 250, 5).setUnlocalizedName("ams_core_thingy").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":ams_core_thingy"); + + fusion_shield_tungsten = new ItemFusionShield(60 * 60 * 60 * 5, 3500).setUnlocalizedName("fusion_shield_tungsten").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_shield_tungsten"); + fusion_shield_desh = new ItemFusionShield(60 * 60 * 60 * 10, 4500).setUnlocalizedName("fusion_shield_desh").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_shield_desh"); + fusion_shield_chlorophyte = new ItemFusionShield(60 * 60 * 60 * 15, 9000).setUnlocalizedName("fusion_shield_chlorophyte").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_shield_chlorophyte"); + fusion_shield_vaporwave = new ItemFusionShield(60 * 60 * 60 * 10, 1916169).setUnlocalizedName("fusion_shield_vaporwave").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_shield_vaporwave"); + + upgrade_muffler = new ItemMuffler().setUnlocalizedName("upgrade_muffler").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":upgrade_muffler"); + + upgrade_template = new ItemCustomLore().setUnlocalizedName("upgrade_template").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":upgrade_template"); + upgrade_speed_1 = new ItemMachineUpgrade(UpgradeType.SPEED, 1).setUnlocalizedName("upgrade_speed_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_speed_1"); + upgrade_speed_2 = new ItemMachineUpgrade(UpgradeType.SPEED, 2).setUnlocalizedName("upgrade_speed_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_speed_2"); + upgrade_speed_3 = new ItemMachineUpgrade(UpgradeType.SPEED, 3).setUnlocalizedName("upgrade_speed_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_speed_3"); + upgrade_effect_1 = new ItemMachineUpgrade(UpgradeType.EFFECT, 1).setUnlocalizedName("upgrade_effect_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_effect_1"); + upgrade_effect_2 = new ItemMachineUpgrade(UpgradeType.EFFECT, 2).setUnlocalizedName("upgrade_effect_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_effect_2"); + upgrade_effect_3 = new ItemMachineUpgrade(UpgradeType.EFFECT, 3).setUnlocalizedName("upgrade_effect_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_effect_3"); + upgrade_power_1 = new ItemMachineUpgrade(UpgradeType.POWER, 1).setUnlocalizedName("upgrade_power_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_power_1"); + upgrade_power_2 = new ItemMachineUpgrade(UpgradeType.POWER, 2).setUnlocalizedName("upgrade_power_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_power_2"); + upgrade_power_3 = new ItemMachineUpgrade(UpgradeType.POWER, 3).setUnlocalizedName("upgrade_power_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_power_3"); + upgrade_fortune_1 = new ItemMachineUpgrade(UpgradeType.FORTUNE, 1).setUnlocalizedName("upgrade_fortune_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_fortune_1"); + upgrade_fortune_2 = new ItemMachineUpgrade(UpgradeType.FORTUNE, 2).setUnlocalizedName("upgrade_fortune_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_fortune_2"); + upgrade_fortune_3 = new ItemMachineUpgrade(UpgradeType.FORTUNE, 3).setUnlocalizedName("upgrade_fortune_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_fortune_3"); + upgrade_afterburn_1 = new ItemMachineUpgrade(UpgradeType.AFTERBURN, 1).setUnlocalizedName("upgrade_afterburn_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_afterburn_1"); + upgrade_afterburn_2 = new ItemMachineUpgrade(UpgradeType.AFTERBURN, 2).setUnlocalizedName("upgrade_afterburn_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_afterburn_2"); + upgrade_afterburn_3 = new ItemMachineUpgrade(UpgradeType.AFTERBURN, 3).setUnlocalizedName("upgrade_afterburn_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_afterburn_3"); + upgrade_overdrive_1 = new ItemMachineUpgrade(UpgradeType.OVERDRIVE, 1).setUnlocalizedName("upgrade_overdrive_1").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_overdrive_1"); + upgrade_overdrive_2 = new ItemMachineUpgrade(UpgradeType.OVERDRIVE, 2).setUnlocalizedName("upgrade_overdrive_2").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_overdrive_2"); + upgrade_overdrive_3 = new ItemMachineUpgrade(UpgradeType.OVERDRIVE, 3).setUnlocalizedName("upgrade_overdrive_3").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_overdrive_3"); + upgrade_radius = new ItemMachineUpgrade().setUnlocalizedName("upgrade_radius").setMaxStackSize(16).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_radius"); + upgrade_health = new ItemMachineUpgrade().setUnlocalizedName("upgrade_health").setMaxStackSize(16).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_health"); + upgrade_smelter = new ItemMachineUpgrade().setUnlocalizedName("upgrade_smelter").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_smelter"); + upgrade_shredder = new ItemMachineUpgrade().setUnlocalizedName("upgrade_shredder").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_shredder"); + upgrade_centrifuge = new ItemMachineUpgrade().setUnlocalizedName("upgrade_centrifuge").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_centrifuge"); + upgrade_crystallizer = new ItemMachineUpgrade().setUnlocalizedName("upgrade_crystallizer").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_crystallizer"); + upgrade_nullifier = new ItemMachineUpgrade().setUnlocalizedName("upgrade_nullifier").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_nullifier"); + upgrade_screm = new ItemMachineUpgrade().setUnlocalizedName("upgrade_screm").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_screm"); + upgrade_gc_speed = new ItemMachineUpgrade().setUnlocalizedName("upgrade_gc_speed").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_gc_speed"); + upgrade_5g = new ItemMachineUpgrade().setUnlocalizedName("upgrade_5g").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_5g"); + upgrade_stack = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_stack").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_stack"); + upgrade_ejector = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_ejector").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_ejector"); + + wand = new ItemWand().setUnlocalizedName("wand_k").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand"); + wand_s = new ItemWandS().setUnlocalizedName("wand_s").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_s"); + wand_d = new ItemWandD().setUnlocalizedName("wand_d").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_d"); + + structure_single = new ItemStructureSingle().setUnlocalizedName("structure_single").setMaxStackSize(1).setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":structure_single"); + structure_solid = new ItemStructureSolid().setUnlocalizedName("structure_solid").setMaxStackSize(1).setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":structure_solid"); + structure_pattern = new ItemStructurePattern().setUnlocalizedName("structure_pattern").setMaxStackSize(1).setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":structure_pattern"); + structure_randomized = new ItemStructureRandomized().setUnlocalizedName("structure_randomized").setMaxStackSize(1).setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":structure_randomized"); + structure_randomly = new ItemStructureRandomly().setUnlocalizedName("structure_randomly").setMaxStackSize(1).setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":structure_randomly"); + structure_custommachine = new ItemCMStructure().setUnlocalizedName("structure_custommachine").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":structure_custommachine"); + + rod_of_discord = new ItemDiscord().setUnlocalizedName("rod_of_discord").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":rod_of_discord"); + + nuke_starter_kit = new ItemStarterKit().setUnlocalizedName("nuke_starter_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nuke_starter_kit"); + nuke_advanced_kit = new ItemStarterKit().setUnlocalizedName("nuke_advanced_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nuke_advanced_kit"); + nuke_commercially_kit = new ItemStarterKit().setUnlocalizedName("nuke_commercially_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nuke_commercially_kit"); + nuke_electric_kit = new ItemStarterKit().setUnlocalizedName("nuke_electric_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nuke_electric_kit"); + gadget_kit = new ItemStarterKit().setUnlocalizedName("gadget_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":gadget_kit"); + boy_kit = new ItemStarterKit().setUnlocalizedName("boy_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":boy_kit"); + man_kit = new ItemStarterKit().setUnlocalizedName("man_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":man_kit"); + mike_kit = new ItemStarterKit().setUnlocalizedName("mike_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":mike_kit"); + tsar_kit = new ItemStarterKit().setUnlocalizedName("tsar_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":tsar_kit"); + multi_kit = new ItemStarterKit().setUnlocalizedName("multi_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":multi_kit"); + custom_kit = new ItemStarterKit().setUnlocalizedName("custom_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_kit"); + grenade_kit = new ItemStarterKit().setUnlocalizedName("grenade_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":grenade_kit"); + fleija_kit = new ItemStarterKit().setUnlocalizedName("fleija_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":fleija_kit"); + prototype_kit = new ItemStarterKit().setUnlocalizedName("prototype_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":prototype_kit"); + missile_kit = new ItemStarterKit().setUnlocalizedName("missile_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_kit"); + t45_kit = new ItemStarterKit().setUnlocalizedName("t45_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":t45_kit"); + euphemium_kit = new ItemStarterKit().setUnlocalizedName("euphemium_kit").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":code"); + solinium_kit = new ItemStarterKit().setUnlocalizedName("solinium_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":solinium_kit"); + hazmat_kit = new ItemStarterKit().setUnlocalizedName("hazmat_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_kit"); + hazmat_red_kit = new ItemStarterKit().setUnlocalizedName("hazmat_red_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_red_kit"); + hazmat_grey_kit = new ItemStarterKit().setUnlocalizedName("hazmat_grey_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_grey_kit"); + kit_custom = new ItemKitCustom().setUnlocalizedName("kit_custom").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":kit"); + toolbox = new ItemToolBox().setUnlocalizedName("toolbox").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":kit_toolbox"); + legacy_toolbox = new ItemKitNBT().setUnlocalizedName("toolbox_legacy").setContainerItem(toolbox).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":kit_toolbox"); + + loot_10 = new ItemLootCrate().setUnlocalizedName("loot_10").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":loot_10"); + loot_15 = new ItemLootCrate().setUnlocalizedName("loot_15").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":loot_15"); + loot_misc = new ItemLootCrate().setUnlocalizedName("loot_misc").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":loot_misc"); + + ammo_container = new ItemAmmoContainer().setUnlocalizedName("ammo_container").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_container"); + + ingot_euphemium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("ingot_euphemium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_euphemium"); + nugget_euphemium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("nugget_euphemium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_euphemium"); + watch = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("watch").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":watch"); + apple_euphemium = new ItemAppleEuphemium(20, 100, false).setUnlocalizedName("apple_euphemium").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":apple_euphemium"); + + igniter = new ItemCustomLore().setUnlocalizedName("igniter").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":trigger"); + detonator = new ItemDetonator().setUnlocalizedName("detonator").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":detonator"); + detonator_multi = new ItemMultiDetonator().setUnlocalizedName("detonator_multi").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":detonator_multi"); + detonator_laser = new ItemLaserDetonator().setUnlocalizedName("detonator_laser").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":detonator_laser"); + detonator_deadman = new ItemDrop().setUnlocalizedName("detonator_deadman").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":detonator_deadman"); + detonator_de = new ItemDrop().setUnlocalizedName("detonator_de").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":detonator_de"); + bomb_caller = new ItemBombCaller().setUnlocalizedName("bomb_caller").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bomb_caller"); + meteor_remote = new ItemMeteorRemote().setUnlocalizedName("meteor_remote").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":meteor_remote"); + anchor_remote = new ItemAnchorRemote().setUnlocalizedName("anchor_remote").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":anchor_remote"); + spawn_chopper = new ItemChopper().setUnlocalizedName("chopper").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":chopper"); + spawn_worm = new ItemChopper().setUnlocalizedName("spawn_worm").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spawn_worm"); + spawn_ufo = new ItemChopper().setUnlocalizedName("spawn_ufo").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spawn_ufo"); + spawn_duck = new ItemChopper().setUnlocalizedName("spawn_duck").setMaxStackSize(16).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":spawn_duck"); + linker = new ItemTeleLink().setUnlocalizedName("linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":linker"); + reactor_sensor = new ItemReactorSensor().setUnlocalizedName("reactor_sensor").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":reactor_sensor"); + oil_detector = new ItemOilDetector().setUnlocalizedName("oil_detector").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":oil_detector"); + //turret_control = new ItemTurretControl().setUnlocalizedName("turret_control").setFull3D().setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":turret_control"); + turret_chip = new ItemTurretChip().setUnlocalizedName("turret_chip").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":turret_chip"); + //turret_biometry = new ItemTurretBiometry().setUnlocalizedName("turret_biometry").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":rei_scanner"); + dosimeter = new ItemDosimeter().setUnlocalizedName("dosimeter").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":dosimeter"); + geiger_counter = new ItemGeigerCounter().setUnlocalizedName("geiger_counter").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":geiger_counter"); + digamma_diagnostic = new ItemDigammaDiagnostic().setUnlocalizedName("digamma_diagnostic").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":digamma_diagnostic"); + pollution_detector = new ItemPollutionDetector().setUnlocalizedName("pollution_detector").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pollution_detector"); + ore_density_scanner = new ItemOreDensityScanner().setUnlocalizedName("ore_density_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ore_density_scanner"); + survey_scanner = new ItemSurveyScanner().setUnlocalizedName("survey_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":survey_scanner"); + mirror_tool = new ItemMirrorTool().setUnlocalizedName("mirror_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":mirror_tool"); + rbmk_tool = new ItemRBMKTool().setUnlocalizedName("rbmk_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":rbmk_tool"); + coltan_tool = new ItemColtanCompass().setUnlocalizedName("coltan_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coltass"); + power_net_tool = new ItemPowerNetTool().setUnlocalizedName("power_net_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":power_net_tool"); + analysis_tool = new ItemAnalysisTool().setUnlocalizedName("analysis_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":analysis_tool"); + coupling_tool = new ItemCouplingTool().setUnlocalizedName("coupling_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coupling_tool"); + drone_linker = new ItemDroneLinker().setUnlocalizedName("drone_linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":drone_linker"); + radar_linker = new ItemRadarLinker().setUnlocalizedName("radar_linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radar_linker"); + settings_tool = new ItemSettingsTool().setUnlocalizedName("settings_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":settings_tool"); + + key = new ItemKey().setUnlocalizedName("key").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key"); + key_red = new ItemCustomLore().setUnlocalizedName("key_red").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red"); + key_red_cracked = new ItemCustomLore().setUnlocalizedName("key_red_cracked").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red_cracked"); + key_kit = new ItemCounterfitKeys().setUnlocalizedName("key_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key_pair"); + key_fake = new ItemKey().setUnlocalizedName("key_fake").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key_gold"); + pin = new ItemCustomLore().setUnlocalizedName("pin").setMaxStackSize(8).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pin"); + padlock_rusty = new ItemLock(1).setUnlocalizedName("padlock_rusty").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":padlock_rusty"); + padlock = new ItemLock(0.1).setUnlocalizedName("padlock").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":padlock"); + padlock_reinforced = new ItemLock(0.02).setUnlocalizedName("padlock_reinforced").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":padlock_reinforced"); + padlock_unbreakable = new ItemLock(0).setUnlocalizedName("padlock_unbreakable").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":padlock_unbreakable"); + + mech_key = new ItemCustomLore().setUnlocalizedName("mech_key").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":mech_key"); + + template_folder = new ItemTemplateFolder().setUnlocalizedName("template_folder").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":template_folder"); + journal_pip = new ItemTemplateFolder().setUnlocalizedName("journal_pip").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_pip"); + journal_bj = new ItemTemplateFolder().setUnlocalizedName("journal_bj").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_bj"); + journal_silver = new ItemTemplateFolder().setUnlocalizedName("journal_silver").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_silver"); + assembly_template = new ItemAssemblyTemplate().setUnlocalizedName("assembly_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":assembly_template"); + chemistry_template = new ItemChemistryTemplate().setUnlocalizedName("chemistry_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":chemistry_template"); + chemistry_icon = new ItemChemistryIcon().setUnlocalizedName("chemistry_icon").setMaxStackSize(1).setCreativeTab(null); + crucible_template = new ItemCrucibleTemplate().setUnlocalizedName("crucible_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":crucible_template"); + fluid_identifier = new ItemFluidIdentifier().setUnlocalizedName("fluid_identifier").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":fluid_identifier"); + fluid_identifier_multi = new ItemFluidIDMulti().setUnlocalizedName("fluid_identifier_multi").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":fluid_identifier_multi"); + fluid_icon = new ItemFluidIcon().setUnlocalizedName("fluid_icon").setCreativeTab(null).setTextureName(RefStrings.MODID + ":fluid_icon"); + fluid_tank_empty = new Item().setUnlocalizedName("fluid_tank_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank"); + fluid_tank_full = new ItemFluidTank().setUnlocalizedName("fluid_tank_full").setContainerItem(ModItems.fluid_tank_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank"); + fluid_tank_lead_empty = new Item().setUnlocalizedName("fluid_tank_lead_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank_lead"); + fluid_tank_lead_full = new ItemFluidTank().setUnlocalizedName("fluid_tank_lead_full").setContainerItem(ModItems.fluid_tank_lead_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank_lead"); + fluid_barrel_empty = new Item().setUnlocalizedName("fluid_barrel_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel"); + fluid_barrel_full = new ItemFluidTank().setUnlocalizedName("fluid_barrel_full").setContainerItem(ModItems.fluid_barrel_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel"); + fluid_barrel_infinite = new ItemInfiniteFluid(null, 1_000_000_000).setUnlocalizedName("fluid_barrel_infinite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel_infinite"); + pipette = new ItemPipette().setUnlocalizedName("pipette").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette"); + pipette_boron = new ItemPipette().setUnlocalizedName("pipette_boron").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette_boron"); + pipette_laboratory = new ItemPipette().setUnlocalizedName("pipette_laboratory").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette_laboratory"); + siphon = new ItemFluidSiphon().setUnlocalizedName("siphon").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":siphon"); + inf_water = new ItemInfiniteFluid(Fluids.WATER, 50).setUnlocalizedName("inf_water").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":inf_water"); + inf_water_mk2 = new ItemInfiniteFluid(Fluids.WATER, 500).setUnlocalizedName("inf_water_mk2").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":inf_water_mk2"); + + FluidTank.noDualUnload.add(fluid_barrel_infinite); + FluidTank.noDualUnload.add(inf_water); + FluidTank.noDualUnload.add(inf_water_mk2); + + disperser_canister_empty = new Item().setUnlocalizedName("disperser_canister_empty").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":disperser_canister"); + disperser_canister = new ItemDisperser().setUnlocalizedName("disperser_canister").setContainerItem(ModItems.disperser_canister_empty).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":disperser_canister"); + + glyphid_gland_empty = new Item().setUnlocalizedName("glyphid_gland_empty").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":glyphid_gland"); + glyphid_gland = new ItemDisperser().setUnlocalizedName("glyphid_gland").setContainerItem(ModItems.glyphid_gland_empty).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":glyphid_gland"); + + siren_track = new ItemCassette().setUnlocalizedName("siren_track").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":cassette"); + fluid_duct = new ItemFluidDuct().setUnlocalizedName("fluid_duct").setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":duct"); + + bobmazon = new ItemCatalog().setUnlocalizedName("bobmazon").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":bobmazon"); + bobmazon_hidden = new ItemCatalog().setUnlocalizedName("bobmazon_hidden").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":bobmazon_special"); + + euphemium_helmet = new ArmorEuphemium(MainRegistry.aMatEuph, 0).setUnlocalizedName("euphemium_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_helmet"); + euphemium_plate = new ArmorEuphemium(MainRegistry.aMatEuph, 1).setUnlocalizedName("euphemium_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_plate"); + euphemium_legs = new ArmorEuphemium(MainRegistry.aMatEuph, 2).setUnlocalizedName("euphemium_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_legs"); + euphemium_boots = new ArmorEuphemium(MainRegistry.aMatEuph, 3).setUnlocalizedName("euphemium_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_boots"); + + ArmorMaterial aMatRags = EnumHelper.addArmorMaterial("HBM_RAGS", 150, new int[] { 1, 1, 1, 1 }, 0); + aMatRags.customCraftingMaterial = ModItems.rag; + + goggles = new ArmorModel(ArmorMaterial.IRON, 0).setUnlocalizedName("goggles").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":goggles"); + ashglasses = new ArmorAshGlasses(ArmorMaterial.IRON, 0).setUnlocalizedName("ashglasses").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ashglasses"); + gas_mask = new ArmorGasMask().setUnlocalizedName("gas_mask").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask"); + gas_mask_m65 = new ArmorGasMask().setUnlocalizedName("gas_mask_m65").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_m65"); + gas_mask_mono = new ArmorGasMask().setUnlocalizedName("gas_mask_mono").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_mono"); + gas_mask_olde = new ArmorGasMask().setUnlocalizedName("gas_mask_olde").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_olde"); + mask_rag = new ModArmor(aMatRags, 0).setUnlocalizedName("mask_rag").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_rag"); + mask_piss = new ModArmor(aMatRags, 0).setUnlocalizedName("mask_piss").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_piss"); + hat = new ArmorHat(MainRegistry.aMatAlloy, 0).setUnlocalizedName("nossy_hat").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":hat"); + no9 = new ArmorNo9(MainRegistry.aMatSteel, 0).setUnlocalizedName("no9").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":no9"); + beta = new ItemDrop().setUnlocalizedName("beta").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":beta"); + //oxy_mask = new ArmorModel(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("oxy_mask").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":oxy_mask"); + + schrabidium_helmet = new ArmorFSB(MainRegistry.aMatSchrab, 0, RefStrings.MODID + ":textures/armor/schrabidium_1.png") + .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 2)) + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 2)) + .addEffect(new PotionEffect(Potion.jump.id, 20, 1)) + .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 2)) + .setUnlocalizedName("schrabidium_helmet").setTextureName(RefStrings.MODID + ":schrabidium_helmet"); + schrabidium_plate = new ArmorFSB(MainRegistry.aMatSchrab, 1, RefStrings.MODID + ":textures/armor/schrabidium_1.png").cloneStats((ArmorFSB) schrabidium_helmet).setUnlocalizedName("schrabidium_plate").setTextureName(RefStrings.MODID + ":schrabidium_plate"); + schrabidium_legs = new ArmorFSB(MainRegistry.aMatSchrab, 2, RefStrings.MODID + ":textures/armor/schrabidium_2.png").cloneStats((ArmorFSB) schrabidium_helmet).setUnlocalizedName("schrabidium_legs").setTextureName(RefStrings.MODID + ":schrabidium_legs"); + schrabidium_boots = new ArmorFSB(MainRegistry.aMatSchrab, 3, RefStrings.MODID + ":textures/armor/schrabidium_1.png").cloneStats((ArmorFSB) schrabidium_helmet).setUnlocalizedName("schrabidium_boots").setTextureName(RefStrings.MODID + ":schrabidium_boots"); + bismuth_helmet = new ArmorBismuth(MainRegistry.aMatBismuth, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") + .addEffect(new PotionEffect(Potion.jump.id, 20, 6)) + .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 6)) + .addEffect(new PotionEffect(Potion.regeneration.id, 20, 1)) + .addEffect(new PotionEffect(Potion.nightVision.id, 15 * 20, 0)) + .setDashCount(3) + .setUnlocalizedName("bismuth_helmet").setTextureName(RefStrings.MODID + ":bismuth_helmet"); + bismuth_plate = new ArmorBismuth(MainRegistry.aMatBismuth, 1, RefStrings.MODID + ":textures/armor/starmetal_2.png").cloneStats((ArmorFSB) bismuth_helmet).setUnlocalizedName("bismuth_plate").setTextureName(RefStrings.MODID + ":bismuth_plate"); + bismuth_legs = new ArmorBismuth(MainRegistry.aMatBismuth, 2, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) bismuth_helmet).setUnlocalizedName("bismuth_legs").setTextureName(RefStrings.MODID + ":bismuth_legs"); + bismuth_boots = new ArmorBismuth(MainRegistry.aMatBismuth, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) bismuth_helmet).setUnlocalizedName("bismuth_boots").setTextureName(RefStrings.MODID + ":bismuth_boots"); + titanium_helmet = new ArmorFSB(MainRegistry.aMatTitan, 0, RefStrings.MODID + ":textures/armor/titanium_1.png").setUnlocalizedName("titanium_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":titanium_helmet"); + titanium_plate = new ArmorFSB(MainRegistry.aMatTitan, 1, RefStrings.MODID + ":textures/armor/titanium_1.png").cloneStats((ArmorFSB) titanium_helmet).setUnlocalizedName("titanium_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":titanium_plate"); + titanium_legs = new ArmorFSB(MainRegistry.aMatTitan, 2, RefStrings.MODID + ":textures/armor/titanium_2.png").cloneStats((ArmorFSB) titanium_helmet).setUnlocalizedName("titanium_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":titanium_legs"); + titanium_boots = new ArmorFSB(MainRegistry.aMatTitan, 3, RefStrings.MODID + ":textures/armor/titanium_1.png").cloneStats((ArmorFSB) titanium_helmet).setUnlocalizedName("titanium_boots").setTextureName(RefStrings.MODID + ":titanium_boots"); + steel_helmet = new ArmorFSB(MainRegistry.aMatSteel, 0, RefStrings.MODID + ":textures/armor/steel_1.png").setUnlocalizedName("steel_helmet").setTextureName(RefStrings.MODID + ":steel_helmet"); + steel_plate = new ArmorFSB(MainRegistry.aMatSteel, 1, RefStrings.MODID + ":textures/armor/steel_1.png").cloneStats((ArmorFSB) steel_helmet).setUnlocalizedName("steel_plate").setTextureName(RefStrings.MODID + ":steel_plate"); + steel_legs = new ArmorFSB(MainRegistry.aMatSteel, 2, RefStrings.MODID + ":textures/armor/steel_2.png").cloneStats((ArmorFSB) steel_helmet).setUnlocalizedName("steel_legs").setTextureName(RefStrings.MODID + ":steel_legs"); + steel_boots = new ArmorFSB(MainRegistry.aMatSteel, 3, RefStrings.MODID + ":textures/armor/steel_1.png").cloneStats((ArmorFSB) steel_helmet).setUnlocalizedName("steel_boots").setTextureName(RefStrings.MODID + ":steel_boots"); + alloy_helmet = new ArmorFSB(MainRegistry.aMatAlloy, 0, RefStrings.MODID + ":textures/armor/alloy_1.png").setUnlocalizedName("alloy_helmet").setTextureName(RefStrings.MODID + ":alloy_helmet"); + alloy_plate = new ArmorFSB(MainRegistry.aMatAlloy, 1, RefStrings.MODID + ":textures/armor/alloy_1.png").cloneStats((ArmorFSB) alloy_helmet).setUnlocalizedName("alloy_plate").setTextureName(RefStrings.MODID + ":alloy_plate"); + alloy_legs = new ArmorFSB(MainRegistry.aMatAlloy, 2, RefStrings.MODID + ":textures/armor/alloy_2.png").cloneStats((ArmorFSB) alloy_helmet).setUnlocalizedName("alloy_legs").setTextureName(RefStrings.MODID + ":alloy_legs"); + alloy_boots = new ArmorFSB(MainRegistry.aMatAlloy, 3, RefStrings.MODID + ":textures/armor/alloy_1.png").cloneStats((ArmorFSB) alloy_helmet).setUnlocalizedName("alloy_boots").setTextureName(RefStrings.MODID + ":alloy_boots"); + cmb_helmet = new ArmorFSB(MainRegistry.aMatCMB, 0, RefStrings.MODID + ":textures/armor/cmb_1.png") + .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 2)) + .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 2)) + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 4)) + .setUnlocalizedName("cmb_helmet").setTextureName(RefStrings.MODID + ":cmb_helmet"); + cmb_plate = new ArmorFSB(MainRegistry.aMatCMB, 1, RefStrings.MODID + ":textures/armor/cmb_1.png").cloneStats((ArmorFSB) cmb_helmet).setUnlocalizedName("cmb_plate").setTextureName(RefStrings.MODID + ":cmb_plate"); + cmb_legs = new ArmorFSB(MainRegistry.aMatCMB, 2, RefStrings.MODID + ":textures/armor/cmb_2.png").cloneStats((ArmorFSB) cmb_helmet).setUnlocalizedName("cmb_legs").setTextureName(RefStrings.MODID + ":cmb_legs"); + cmb_boots = new ArmorFSB(MainRegistry.aMatCMB, 3, RefStrings.MODID + ":textures/armor/cmb_1.png").cloneStats((ArmorFSB) cmb_helmet).setUnlocalizedName("cmb_boots").setTextureName(RefStrings.MODID + ":cmb_boots"); + paa_plate = new ArmorFSB(MainRegistry.aMatPaa, 1, RefStrings.MODID + ":textures/armor/paa_1.png").setNoHelmet(true) + .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 0)).setUnlocalizedName("paa_plate").setTextureName(RefStrings.MODID + ":paa_plate"); + paa_legs = new ArmorFSB(MainRegistry.aMatPaa, 2, RefStrings.MODID + ":textures/armor/paa_2.png").cloneStats((ArmorFSB) paa_plate).setUnlocalizedName("paa_legs").setTextureName(RefStrings.MODID + ":paa_legs"); + paa_boots = new ArmorFSB(MainRegistry.aMatPaa, 3, RefStrings.MODID + ":textures/armor/paa_1.png").cloneStats((ArmorFSB) paa_plate).setUnlocalizedName("paa_boots").setTextureName(RefStrings.MODID + ":paa_boots"); + asbestos_helmet = new ArmorFSB(MainRegistry.aMatAsbestos, 0, RefStrings.MODID + ":textures/armor/asbestos_1.png").setOverlay(RefStrings.MODID + ":textures/misc/overlay_asbestos.png").setUnlocalizedName("asbestos_helmet").setTextureName(RefStrings.MODID + ":asbestos_helmet"); + asbestos_plate = new ArmorFSB(MainRegistry.aMatAsbestos, 1, RefStrings.MODID + ":textures/armor/asbestos_1.png").setUnlocalizedName("asbestos_plate").setTextureName(RefStrings.MODID + ":asbestos_plate"); + asbestos_legs = new ArmorFSB(MainRegistry.aMatAsbestos, 2, RefStrings.MODID + ":textures/armor/asbestos_2.png").setUnlocalizedName("asbestos_legs").setTextureName(RefStrings.MODID + ":asbestos_legs"); + asbestos_boots = new ArmorFSB(MainRegistry.aMatAsbestos, 3, RefStrings.MODID + ":textures/armor/asbestos_1.png").setUnlocalizedName("asbestos_boots").setTextureName(RefStrings.MODID + ":asbestos_boots"); + security_helmet = new ArmorFSB(MainRegistry.aMatSecurity, 0, RefStrings.MODID + ":textures/armor/security_1.png").setUnlocalizedName("security_helmet").setTextureName(RefStrings.MODID + ":security_helmet"); + security_plate = new ArmorFSB(MainRegistry.aMatSecurity, 1, RefStrings.MODID + ":textures/armor/security_1.png").cloneStats((ArmorFSB) security_helmet).setUnlocalizedName("security_plate").setTextureName(RefStrings.MODID + ":security_plate"); + security_legs = new ArmorFSB(MainRegistry.aMatSecurity, 2, RefStrings.MODID + ":textures/armor/security_2.png").cloneStats((ArmorFSB) security_helmet).setUnlocalizedName("security_legs").setTextureName(RefStrings.MODID + ":security_legs"); + security_boots = new ArmorFSB(MainRegistry.aMatSecurity, 3, RefStrings.MODID + ":textures/armor/security_1.png").cloneStats((ArmorFSB) security_helmet).setUnlocalizedName("security_boots").setTextureName(RefStrings.MODID + ":security_boots"); + cobalt_helmet = new ArmorFSB(MainRegistry.aMatCobalt, 0, RefStrings.MODID + ":textures/armor/cobalt_1.png").setUnlocalizedName("cobalt_helmet").setTextureName(RefStrings.MODID + ":cobalt_helmet"); + cobalt_plate = new ArmorFSB(MainRegistry.aMatCobalt, 1, RefStrings.MODID + ":textures/armor/cobalt_1.png").cloneStats((ArmorFSB) cobalt_helmet).setUnlocalizedName("cobalt_plate").setTextureName(RefStrings.MODID + ":cobalt_plate"); + cobalt_legs = new ArmorFSB(MainRegistry.aMatCobalt, 2, RefStrings.MODID + ":textures/armor/cobalt_2.png").cloneStats((ArmorFSB) cobalt_helmet).setUnlocalizedName("cobalt_legs").setTextureName(RefStrings.MODID + ":cobalt_legs"); + cobalt_boots = new ArmorFSB(MainRegistry.aMatCobalt, 3, RefStrings.MODID + ":textures/armor/cobalt_1.png").cloneStats((ArmorFSB) cobalt_helmet).setUnlocalizedName("cobalt_boots").setTextureName(RefStrings.MODID + ":cobalt_boots"); + starmetal_helmet = new ArmorFSB(MainRegistry.aMatStarmetal, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") + .setUnlocalizedName("starmetal_helmet").setTextureName(RefStrings.MODID + ":starmetal_helmet"); + starmetal_plate = new ArmorFSB(MainRegistry.aMatStarmetal, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) starmetal_helmet).setUnlocalizedName("starmetal_plate").setTextureName(RefStrings.MODID + ":starmetal_plate"); + starmetal_legs = new ArmorFSB(MainRegistry.aMatStarmetal, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png").cloneStats((ArmorFSB) starmetal_helmet).setUnlocalizedName("starmetal_legs").setTextureName(RefStrings.MODID + ":starmetal_legs"); + starmetal_boots = new ArmorFSB(MainRegistry.aMatStarmetal, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) starmetal_helmet).setUnlocalizedName("starmetal_boots").setTextureName(RefStrings.MODID + ":starmetal_boots"); + + robes_helmet = new ArmorFSB(ArmorMaterial.CHAIN, 0, RefStrings.MODID + ":textures/armor/robes_1.png").setUnlocalizedName("robes_helmet").setTextureName(RefStrings.MODID + ":robes_helmet"); + robes_plate = new ArmorFSB(ArmorMaterial.CHAIN, 1, RefStrings.MODID + ":textures/armor/robes_1.png").cloneStats((ArmorFSB) robes_helmet).setUnlocalizedName("robes_plate").setTextureName(RefStrings.MODID + ":robes_plate"); + robes_legs = new ArmorFSB(ArmorMaterial.CHAIN, 2, RefStrings.MODID + ":textures/armor/robes_2.png").cloneStats((ArmorFSB) robes_helmet).setUnlocalizedName("robes_legs").setTextureName(RefStrings.MODID + ":robes_legs"); + robes_boots = new ArmorFSB(ArmorMaterial.CHAIN, 3, RefStrings.MODID + ":textures/armor/robes_1.png").cloneStats((ArmorFSB) robes_helmet).setUnlocalizedName("robes_boots").setTextureName(RefStrings.MODID + ":robes_boots"); + + initializeItem2(); + } + + public static void initializeItem2() { + + ArmorMaterial aMatZirconium = EnumHelper.addArmorMaterial("HBM_ZIRCONIUM", 1000, new int[] { 2, 5, 3, 1 }, 100); + aMatZirconium.customCraftingMaterial = ModItems.ingot_zirconium; + zirconium_legs = new ArmorFSB(aMatZirconium, 2, RefStrings.MODID + ":textures/armor/zirconium_2.png").setUnlocalizedName("zirconium_legs").setTextureName(RefStrings.MODID + ":zirconium_legs"); + + ArmorMaterial aMatDNT = EnumHelper.addArmorMaterial("HBM_DNT_LOLOLOL", 3, new int[] { 1, 1, 1, 1 }, 0); + aMatDNT.customCraftingMaterial = ModItems.ingot_dineutronium; + dnt_helmet = new ArmorFSB(aMatDNT, 0, RefStrings.MODID + ":textures/armor/dnt_1.png") + .setUnlocalizedName("dnt_helmet").setTextureName(RefStrings.MODID + ":dnt_helmet"); + dnt_plate = new ArmorFSB(aMatDNT, 1, RefStrings.MODID + ":textures/armor/dnt_1.png").cloneStats((ArmorFSB) dnt_helmet).setUnlocalizedName("dnt_plate").setTextureName(RefStrings.MODID + ":dnt_plate"); + dnt_legs = new ArmorFSB(aMatDNT, 2, RefStrings.MODID + ":textures/armor/dnt_2.png").cloneStats((ArmorFSB) dnt_helmet).setUnlocalizedName("dnt_legs").setTextureName(RefStrings.MODID + ":dnt_legs"); + dnt_boots = new ArmorFSB(aMatDNT, 3, RefStrings.MODID + ":textures/armor/dnt_1.png").cloneStats((ArmorFSB) dnt_helmet).setUnlocalizedName("dnt_boots").setTextureName(RefStrings.MODID + ":dnt_boots"); + + ArmorMaterial aMatT45 = EnumHelper.addArmorMaterial("HBM_T45", 150, new int[] { 3, 8, 6, 3 }, 0); + aMatT45.customCraftingMaterial = ModItems.plate_armor_titanium; + t45_helmet = new ArmorT45(aMatT45, 0, 1000000, 10000, 1000, 5) + .enableVATS(true) + .setHasGeigerSound(true) + .setHasHardLanding(true) + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("t45_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":t45_helmet"); + t45_plate = new ArmorT45(aMatT45, 1, 1000000, 10000, 1000, 5).cloneStats((ArmorFSB) t45_helmet).setUnlocalizedName("t45_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":t45_plate"); + t45_legs = new ArmorT45(aMatT45, 2, 1000000, 10000, 1000, 5).cloneStats((ArmorFSB) t45_helmet).setUnlocalizedName("t45_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":t45_legs"); + t45_boots = new ArmorT45(aMatT45, 3, 1000000, 10000, 1000, 5).cloneStats((ArmorFSB) t45_helmet).setUnlocalizedName("t45_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":t45_boots"); + + ArmorMaterial aMatDesh = EnumHelper.addArmorMaterial("HBM_DESH", 150, new int[] { 3, 8, 6, 3 }, 0); + aMatDesh.customCraftingMaterial = ModItems.ingot_desh; + steamsuit_helmet = new ArmorDesh(aMatDesh, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.STEAM, 64_000, 500, 50, 1) + .setHasHardLanding(true) + .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 4)) + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("steamsuit_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":steamsuit_helmet"); + steamsuit_plate = new ArmorDesh(aMatDesh, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.STEAM, 64_000, 500, 50, 1).cloneStats((ArmorFSB) steamsuit_helmet).setUnlocalizedName("steamsuit_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":steamsuit_plate"); + steamsuit_legs = new ArmorDesh(aMatDesh, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", Fluids.STEAM, 64_000, 500, 50, 1).cloneStats((ArmorFSB) steamsuit_helmet).setUnlocalizedName("steamsuit_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":steamsuit_legs"); + steamsuit_boots = new ArmorDesh(aMatDesh, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.STEAM, 64_000, 500, 50, 1).cloneStats((ArmorFSB) steamsuit_helmet).setUnlocalizedName("steamsuit_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":steamsuit_boots"); + + ArmorMaterial aMatDiesel = EnumHelper.addArmorMaterial("HBM_BNUUY", 150, new int[] { 3, 8, 6, 3 }, 0); + aMatDiesel.customCraftingMaterial = ModItems.plate_copper; + dieselsuit_helmet = new ArmorDiesel(aMatDiesel, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.DIESEL, 64_000, 500, 50, 1) + .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 2)) + .addEffect(new PotionEffect(Potion.jump.id, 20, 2)) + .enableThermalSight(true) + .enableVATS(true) + .setUnlocalizedName("dieselsuit_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":dieselsuit_helmet"); + dieselsuit_plate = new ArmorDiesel(aMatDiesel, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.DIESEL, 64_000, 500, 50, 1).cloneStats((ArmorFSB) dieselsuit_helmet).setUnlocalizedName("dieselsuit_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":dieselsuit_plate"); + dieselsuit_legs = new ArmorDiesel(aMatDiesel, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", Fluids.DIESEL, 64_000, 500, 50, 1).cloneStats((ArmorFSB) dieselsuit_helmet).setUnlocalizedName("dieselsuit_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":dieselsuit_legs"); + dieselsuit_boots = new ArmorDiesel(aMatDiesel, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", Fluids.DIESEL, 64_000, 500, 50, 1).cloneStats((ArmorFSB) dieselsuit_helmet).setUnlocalizedName("dieselsuit_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":dieselsuit_boots"); + + ArmorMaterial aMatAJR = EnumHelper.addArmorMaterial("HBM_T45AJR", 150, new int[] { 3, 8, 6, 3 }, 100); + aMatAJR.customCraftingMaterial = ModItems.plate_armor_ajr; + ajr_helmet = new ArmorAJR(aMatAJR, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25) + .enableVATS(true) + .setHasGeigerSound(true) + .setHasHardLanding(true) + .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) + .setStep("hbm:step.metal").setJump("hbm:step.iron_jump").setFall("hbm:step.iron_land") + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("ajr_helmet").setTextureName(RefStrings.MODID + ":ajr_helmet"); + ajr_plate = new ArmorAJR(aMatAJR, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajr_helmet).setUnlocalizedName("ajr_plate").setTextureName(RefStrings.MODID + ":ajr_plate"); + ajr_legs = new ArmorAJR(aMatAJR, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajr_helmet).setUnlocalizedName("ajr_legs").setTextureName(RefStrings.MODID + ":ajr_legs"); + ajr_boots = new ArmorAJR(aMatAJR, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajr_helmet).setUnlocalizedName("ajr_boots").setTextureName(RefStrings.MODID + ":ajr_boots"); + + ajro_helmet = new ArmorAJRO(aMatAJR, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25) + .enableVATS(true) + .setHasGeigerSound(true) + .setHasHardLanding(true) + .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) + .setStep("hbm:step.metal").setJump("hbm:step.iron_jump").setFall("hbm:step.iron_land") + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("ajro_helmet").setTextureName(RefStrings.MODID + ":ajro_helmet"); + ajro_plate = new ArmorAJRO(aMatAJR, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajro_helmet).setUnlocalizedName("ajro_plate").setTextureName(RefStrings.MODID + ":ajro_plate"); + ajro_legs = new ArmorAJRO(aMatAJR, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajro_helmet).setUnlocalizedName("ajro_legs").setTextureName(RefStrings.MODID + ":ajro_legs"); + ajro_boots = new ArmorAJRO(aMatAJR, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajro_helmet).setUnlocalizedName("ajro_boots").setTextureName(RefStrings.MODID + ":ajro_boots"); + + rpa_helmet = new ArmorRPA(aMatAJR, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25) + .enableVATS(true) + .setHasGeigerSound(true) + .setHasHardLanding(true) + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 3)) + .setStep("hbm:step.powered") + .setJump("hbm:step.powered") + .setFall("hbm:step.powered") + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("rpa_helmet").setTextureName(RefStrings.MODID + ":rpa_helmet"); + rpa_plate = new ArmorRPA(aMatAJR, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) rpa_helmet).setUnlocalizedName("rpa_plate").setTextureName(RefStrings.MODID + ":rpa_plate"); + rpa_legs = new ArmorRPA(aMatAJR, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) rpa_helmet).setUnlocalizedName("rpa_legs").setTextureName(RefStrings.MODID + ":rpa_legs"); + rpa_boots = new ArmorRPA(aMatAJR, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) rpa_helmet).setUnlocalizedName("rpa_boots").setTextureName(RefStrings.MODID + ":rpa_boots"); + + ArmorMaterial aMatBJ = EnumHelper.addArmorMaterial("HBM_BLACKJACK", 150, new int[] { 3, 8, 6, 3 }, 100); + aMatBJ.customCraftingMaterial = ModItems.plate_armor_lunar; + bj_helmet = new ArmorBJ(aMatBJ, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 1000, 100) + .enableVATS(true) + .enableThermalSight(true) + .setHasGeigerSound(true) + .setHasHardLanding(true) + .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 1)) + .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) + .addEffect(new PotionEffect(Potion.field_76443_y.id, 20, 0)) + .addEffect(new PotionEffect(HbmPotion.radx.id, 20, 0)) + .setStep("hbm:step.metal") + .setJump("hbm:step.iron_jump") + .setFall("hbm:step.iron_land").setUnlocalizedName("bj_helmet").setTextureName(RefStrings.MODID + ":bj_helmet"); + bj_plate = new ArmorBJ(aMatBJ, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 1000, 100).cloneStats((ArmorFSB) bj_helmet).setUnlocalizedName("bj_plate").setTextureName(RefStrings.MODID + ":bj_plate"); + bj_plate_jetpack = new ArmorBJJetpack(aMatBJ, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 1000, 100).cloneStats((ArmorFSB) bj_helmet).setUnlocalizedName("bj_plate_jetpack").setTextureName(RefStrings.MODID + ":bj_plate_jetpack"); + bj_legs = new ArmorBJ(aMatBJ, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 10000000, 10000, 1000, 100).cloneStats((ArmorFSB) bj_helmet).setUnlocalizedName("bj_legs").setTextureName(RefStrings.MODID + ":bj_legs"); + bj_boots = new ArmorBJ(aMatBJ, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 1000, 100).cloneStats((ArmorFSB) bj_helmet).setUnlocalizedName("bj_boots").setTextureName(RefStrings.MODID + ":bj_boots"); + + ArmorMaterial aMatEnv = EnumHelper.addArmorMaterial("HBM_ENV", 150, new int[] { 3, 8, 6, 3 }, 100); + aMatEnv.customCraftingMaterial = ModItems.plate_armor_hev; + envsuit_helmet = new ArmorEnvsuit(aMatEnv, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 100_000, 1_000, 250, 0) + .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 1)) + .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("envsuit_helmet").setTextureName(RefStrings.MODID + ":envsuit_helmet"); + envsuit_plate = new ArmorEnvsuit(aMatEnv, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 100_000, 1_000, 250, 0).cloneStats((ArmorFSB) envsuit_helmet).setUnlocalizedName("envsuit_plate").setTextureName(RefStrings.MODID + ":envsuit_plate"); + envsuit_legs = new ArmorEnvsuit(aMatEnv, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 100_000, 1_000, 250, 0).cloneStats((ArmorFSB) envsuit_helmet).setUnlocalizedName("envsuit_legs").setTextureName(RefStrings.MODID + ":envsuit_legs"); + envsuit_boots = new ArmorEnvsuit(aMatEnv, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 100_000, 1_000, 250, 0).cloneStats((ArmorFSB) envsuit_helmet).setUnlocalizedName("envsuit_boots").setTextureName(RefStrings.MODID + ":envsuit_boots"); + + ArmorMaterial aMatHEV = EnumHelper.addArmorMaterial("HBM_HEV", 150, new int[] { 3, 8, 6, 3 }, 100); + aMatHEV.customCraftingMaterial = ModItems.plate_armor_hev; + hev_helmet = new ArmorHEV(aMatHEV, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000, 10000, 2500, 0) + .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 1)) + .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) + .setHasGeigerSound(true) + .setHasCustomGeiger(true) + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("hev_helmet").setTextureName(RefStrings.MODID + ":hev_helmet"); + hev_plate = new ArmorHEV(aMatHEV, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000, 10000, 2500, 0).cloneStats((ArmorFSB) hev_helmet).setUnlocalizedName("hev_plate").setTextureName(RefStrings.MODID + ":hev_plate"); + hev_legs = new ArmorHEV(aMatHEV, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 1000000, 10000, 2500, 0).cloneStats((ArmorFSB) hev_helmet).setUnlocalizedName("hev_legs").setTextureName(RefStrings.MODID + ":hev_legs"); + hev_boots = new ArmorHEV(aMatHEV, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000, 10000, 2500, 0).cloneStats((ArmorFSB) hev_helmet).setUnlocalizedName("hev_boots").setTextureName(RefStrings.MODID + ":hev_boots"); + + jackt = new ModArmor(MainRegistry.aMatSteel, 1).setUnlocalizedName("jackt").setTextureName(RefStrings.MODID + ":jackt"); + jackt2 = new ModArmor(MainRegistry.aMatSteel, 1).setUnlocalizedName("jackt2").setTextureName(RefStrings.MODID + ":jackt2"); + + ArmorMaterial aMatFau = EnumHelper.addArmorMaterial("HBM_DIGAMMA", 150, new int[] { 3, 8, 6, 3 }, 100); + aMatFau.customCraftingMaterial = ModItems.plate_armor_fau; + fau_helmet = new ArmorDigamma(aMatFau, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 2500, 0) + .addEffect(new PotionEffect(Potion.jump.id, 20, 1)) + .setHasGeigerSound(true) + .enableThermalSight(true) + .setHasHardLanding(true) + .setStep("hbm:step.metal") + .setJump("hbm:step.iron_jump") + .setFall("hbm:step.iron_land") + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("fau_helmet").setTextureName(RefStrings.MODID + ":fau_helmet"); + fau_plate = new ArmorDigamma(aMatFau, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 2500, 0).cloneStats((ArmorFSB) fau_helmet).setFullSetForHide().setUnlocalizedName("fau_plate").setTextureName(RefStrings.MODID + ":fau_plate"); + fau_legs = new ArmorDigamma(aMatFau, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 10000000, 10000, 2500, 0).cloneStats((ArmorFSB) fau_helmet).hides(EnumPlayerPart.LEFT_LEG, EnumPlayerPart.RIGHT_LEG).setFullSetForHide().setUnlocalizedName("fau_legs").setTextureName(RefStrings.MODID + ":fau_legs"); + fau_boots = new ArmorDigamma(aMatFau, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 10000000, 10000, 2500, 0).cloneStats((ArmorFSB) fau_helmet).setUnlocalizedName("fau_boots").setTextureName(RefStrings.MODID + ":fau_boots"); + + ArmorMaterial aMatDNS = EnumHelper.addArmorMaterial("HBM_DNT_NANO", 150, new int[] { 3, 8, 6, 3 }, 100); + aMatDNS.customCraftingMaterial = ModItems.plate_armor_dnt; + dns_helmet = new ArmorDNT(aMatDNS, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000000, 1000000, 100000, 115) + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 9)) + .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 7)) + .addEffect(new PotionEffect(Potion.jump.id, 20, 2)) + .setHasGeigerSound(true) + .enableVATS(true) + .enableThermalSight(true) + .setHasHardLanding(true) + .setStep("hbm:step.metal") + .setJump("hbm:step.iron_jump") + .setFall("hbm:step.iron_land") + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("dns_helmet").setTextureName(RefStrings.MODID + ":dns_helmet"); + dns_plate = new ArmorDNT(aMatDNS, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000000, 1000000, 100000, 115).cloneStats((ArmorFSB) dns_helmet).setUnlocalizedName("dns_plate").setTextureName(RefStrings.MODID + ":dns_plate"); + dns_legs = new ArmorDNT(aMatDNS, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 1000000000, 1000000, 100000, 115).cloneStats((ArmorFSB) dns_helmet).setUnlocalizedName("dns_legs").setTextureName(RefStrings.MODID + ":dns_legs"); + dns_boots = new ArmorDNT(aMatDNS, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000000, 1000000, 100000, 115).cloneStats((ArmorFSB) dns_helmet).setUnlocalizedName("dns_boots").setTextureName(RefStrings.MODID + ":dns_boots"); + + ArmorMaterial aMatTaurun = EnumHelper.addArmorMaterial("HBM_TRENCH", 150, new int[] { 3, 8, 6, 3 }, 100); + aMatTaurun.customCraftingMaterial = ModItems.plate_iron; + taurun_helmet = new ArmorTaurun(aMatTaurun, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) + .setStepSize(1) + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("taurun_helmet").setTextureName(RefStrings.MODID + ":taurun_helmet"); + taurun_plate = new ArmorTaurun(aMatTaurun, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_plate").setTextureName(RefStrings.MODID + ":taurun_plate"); + taurun_legs = new ArmorTaurun(aMatTaurun, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_legs").setTextureName(RefStrings.MODID + ":taurun_legs"); + taurun_boots = new ArmorTaurun(aMatTaurun, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) taurun_helmet).setUnlocalizedName("taurun_boots").setTextureName(RefStrings.MODID + ":taurun_boots"); + ArmorMaterial aMatTrench = EnumHelper.addArmorMaterial("HBM_TRENCH", 150, new int[] { 3, 8, 6, 3 }, 100); + aMatTrench.customCraftingMaterial = ModItems.plate_iron; + trenchmaster_helmet = new ArmorTrenchmaster(aMatTrench, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png") + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 2)) + .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 1)) + .addEffect(new PotionEffect(Potion.jump.id, 20, 1)) + .addEffect(new PotionEffect(Potion.moveSpeed.id, 20, 0)) + .enableVATS(true) + .setStepSize(1) + .hides(EnumPlayerPart.HAT) + .setUnlocalizedName("trenchmaster_helmet").setTextureName(RefStrings.MODID + ":trenchmaster_helmet"); + trenchmaster_plate = new ArmorTrenchmaster(aMatTrench, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) trenchmaster_helmet).setUnlocalizedName("trenchmaster_plate").setTextureName(RefStrings.MODID + ":trenchmaster_plate"); + trenchmaster_legs = new ArmorTrenchmaster(aMatTrench, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png").cloneStats((ArmorFSB) trenchmaster_helmet).setUnlocalizedName("trenchmaster_legs").setTextureName(RefStrings.MODID + ":trenchmaster_legs"); + trenchmaster_boots = new ArmorTrenchmaster(aMatTrench, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png").cloneStats((ArmorFSB) trenchmaster_helmet).setUnlocalizedName("trenchmaster_boots").setTextureName(RefStrings.MODID + ":trenchmaster_boots"); + + jackt = new ModArmor(MainRegistry.aMatSteel, 1).setUnlocalizedName("jackt").setTextureName(RefStrings.MODID + ":jackt"); + jackt2 = new ModArmor(MainRegistry.aMatSteel, 1).setUnlocalizedName("jackt2").setTextureName(RefStrings.MODID + ":jackt2"); + + chainsaw = new ItemChainsaw(25, -0.05, MainRegistry.tMatChainsaw, EnumToolType.AXE, 5000, 1, 250, + Fluids.DIESEL, Fluids.DIESEL_CRACK, Fluids.KEROSENE, Fluids.BIOFUEL, Fluids.GASOLINE, Fluids.GASOLINE_LEADED, Fluids.PETROIL, Fluids.PETROIL_LEADED, Fluids.COALGAS, Fluids.COALGAS_LEADED) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new ToolAbility.RecursionAbility(5)) + .addHitAbility(new WeaponAbility.ChainsawAbility(10)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setShears().setUnlocalizedName("chainsaw").setTextureName(RefStrings.MODID + ":chainsaw"); + + schrabidium_sword = new ItemSwordAbility(75, 0, MainRegistry.tMatSchrab) + .addHitAbility(IWeaponAbility.RADIATION, 1) + .addHitAbility(IWeaponAbility.VAMPIRE, 0) + .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_sword").setTextureName(RefStrings.MODID + ":schrabidium_sword"); + + schrabidium_pickaxe = new ItemToolAbility(20, 0, MainRegistry.tMatSchrab, EnumToolType.PICKAXE) + .addHitAbility(new WeaponAbility.RadiationAbility(15F)) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(10)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(5)) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.ShredderAbility()) + .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_pickaxe").setTextureName(RefStrings.MODID + ":schrabidium_pickaxe"); + + schrabidium_axe = new ItemToolAbility(25, 0, MainRegistry.tMatSchrab, EnumToolType.AXE) + .addHitAbility(new WeaponAbility.RadiationAbility(15F)) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(10)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(5)) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.ShredderAbility()) + .addHitAbility(new WeaponAbility.BeheaderAbility()) + .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_axe").setTextureName(RefStrings.MODID + ":schrabidium_axe"); + + schrabidium_shovel = new ItemToolAbility(15, 0, MainRegistry.tMatSchrab, EnumToolType.SHOVEL) + .addHitAbility(new WeaponAbility.RadiationAbility(15F)) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(10)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(5)) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.ShredderAbility()) + .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_shovel").setTextureName(RefStrings.MODID + ":schrabidium_shovel"); + + schrabidium_hoe = new HoeSchrabidium(MainRegistry.tMatSchrab).setUnlocalizedName("schrabidium_hoe").setTextureName(RefStrings.MODID + ":schrabidium_hoe"); + + titanium_sword = new ItemSwordAbility(6.5F, 0, MainRegistry.tMatTitan).setUnlocalizedName("titanium_sword").setTextureName(RefStrings.MODID + ":titanium_sword"); + titanium_pickaxe = new ItemToolAbility(4.5F, 0, MainRegistry.tMatTitan, EnumToolType.PICKAXE).setUnlocalizedName("titanium_pickaxe").setTextureName(RefStrings.MODID + ":titanium_pickaxe"); + titanium_axe = new ItemToolAbility(5.5F, 0, MainRegistry.tMatTitan, EnumToolType.AXE) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("titanium_axe").setTextureName(RefStrings.MODID + ":titanium_axe"); + titanium_shovel = new ItemToolAbility(3.5F, 0, MainRegistry.tMatTitan, EnumToolType.SHOVEL).setUnlocalizedName("titanium_shovel").setTextureName(RefStrings.MODID + ":titanium_shovel"); + titanium_hoe = new ModHoe(MainRegistry.tMatTitan).setUnlocalizedName("titanium_hoe").setTextureName(RefStrings.MODID + ":titanium_hoe"); + steel_sword = new ItemSwordAbility(6F, 0, MainRegistry.tMatSteel).setUnlocalizedName("steel_sword").setTextureName(RefStrings.MODID + ":steel_sword"); + steel_pickaxe = new ItemToolAbility(4F, 0, MainRegistry.tMatSteel, EnumToolType.PICKAXE).setUnlocalizedName("steel_pickaxe").setTextureName(RefStrings.MODID + ":steel_pickaxe"); + steel_axe = new ItemToolAbility(5F, 0, MainRegistry.tMatSteel, EnumToolType.AXE) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("steel_axe").setTextureName(RefStrings.MODID + ":steel_axe"); + steel_shovel = new ItemToolAbility(3F, 0, MainRegistry.tMatSteel, EnumToolType.SHOVEL).setUnlocalizedName("steel_shovel").setTextureName(RefStrings.MODID + ":steel_shovel"); + steel_hoe = new ModHoe(MainRegistry.tMatSteel).setUnlocalizedName("steel_hoe").setTextureName(RefStrings.MODID + ":steel_hoe"); + + alloy_sword = new ItemSwordAbility(8F, 0, MainRegistry.tMatAlloy) + .addHitAbility(IWeaponAbility.STUN, 0).setUnlocalizedName("alloy_sword").setTextureName(RefStrings.MODID + ":alloy_sword"); + + alloy_pickaxe = new ItemToolAbility(5F, 0, MainRegistry.tMatAlloy, EnumToolType.PICKAXE) + .addBreakAbility(new ToolAbility.RecursionAbility(3)).setUnlocalizedName("alloy_pickaxe").setTextureName(RefStrings.MODID + ":alloy_pickaxe"); + + alloy_axe = new ItemToolAbility(7F, 0, MainRegistry.tMatAlloy, EnumToolType.AXE) + .addBreakAbility(new ToolAbility.RecursionAbility(3)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("alloy_axe").setTextureName(RefStrings.MODID + ":alloy_axe"); + + alloy_shovel = new ItemToolAbility(4F, 0, MainRegistry.tMatAlloy, EnumToolType.SHOVEL) + .addBreakAbility(new ToolAbility.RecursionAbility(3)).setUnlocalizedName("alloy_shovel").setTextureName(RefStrings.MODID + ":alloy_shovel"); + + alloy_hoe = new ModHoe(MainRegistry.tMatAlloy).setUnlocalizedName("alloy_hoe").setTextureName(RefStrings.MODID + ":alloy_hoe"); + + cmb_sword = new ItemSwordAbility(35F, 0, MainRegistry.tMatCMB) + .addHitAbility(IWeaponAbility.STUN, 0) + .addHitAbility(IWeaponAbility.VAMPIRE, 0).setUnlocalizedName("cmb_sword").setTextureName(RefStrings.MODID + ":cmb_sword"); + + cmb_pickaxe = new ItemToolAbility(10F, 0, MainRegistry.tMatCMB, EnumToolType.PICKAXE) + .addBreakAbility(new ToolAbility.RecursionAbility(5)) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cmb_pickaxe").setTextureName(RefStrings.MODID + ":cmb_pickaxe"); + + cmb_axe = new ItemToolAbility(30F, 0, MainRegistry.tMatCMB, EnumToolType.AXE) + .addBreakAbility(new ToolAbility.RecursionAbility(5)) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(3)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("cmb_axe").setTextureName(RefStrings.MODID + ":cmb_axe"); + + cmb_shovel = new ItemToolAbility(8F, 0, MainRegistry.tMatCMB, EnumToolType.SHOVEL) + .addBreakAbility(new ToolAbility.RecursionAbility(5)) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cmb_shovel").setTextureName(RefStrings.MODID + ":cmb_shovel"); + + cmb_hoe = new ModHoe(MainRegistry.tMatCMB).setUnlocalizedName("cmb_hoe").setTextureName(RefStrings.MODID + ":cmb_hoe"); + + elec_sword = new ItemSwordAbilityPower(12.5F, 0, MainRegistry.tMatElec, 500000, 1000, 100) + .addHitAbility(IWeaponAbility.STUN, 2).setUnlocalizedName("elec_sword").setTextureName(RefStrings.MODID + ":elec_sword_anim"); + + elec_pickaxe = new ItemToolAbilityPower(6F, 0, MainRegistry.tMatElec, EnumToolType.PICKAXE, 500000, 1000, 100) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(5)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("elec_pickaxe").setTextureName(RefStrings.MODID + ":elec_drill_anim"); + + elec_axe = new ItemToolAbilityPower(10F, 0, MainRegistry.tMatElec, EnumToolType.AXE, 500000, 1000, 100) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(5)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(2)) + .addHitAbility(new WeaponAbility.ChainsawAbility(15)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setShears().setUnlocalizedName("elec_axe").setTextureName(RefStrings.MODID + ":elec_chainsaw_anim"); + + elec_shovel = new ItemToolAbilityPower(5F, 0, MainRegistry.tMatElec, EnumToolType.SHOVEL, 500000, 1000, 100) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(5)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("elec_shovel").setTextureName(RefStrings.MODID + ":elec_shovel_anim"); + + desh_sword = new ItemSwordAbility(12.5F, 0, MainRegistry.tMatDesh) + .addHitAbility(IWeaponAbility.STUN, 0).setUnlocalizedName("desh_sword").setTextureName(RefStrings.MODID + ":desh_sword"); + + desh_pickaxe = new ItemToolAbility(5F, -0.05, MainRegistry.tMatDesh, EnumToolType.PICKAXE) + .addBreakAbility(new ToolAbility.HammerAbility(1)) + .addBreakAbility(new ToolAbility.RecursionAbility(3)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("desh_pickaxe").setTextureName(RefStrings.MODID + ":desh_pickaxe"); + + desh_axe = new ItemToolAbility(7.5F, -0.05, MainRegistry.tMatDesh, EnumToolType.AXE) + .addBreakAbility(new ToolAbility.HammerAbility(1)) + .addBreakAbility(new ToolAbility.RecursionAbility(3)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(2)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("desh_axe").setTextureName(RefStrings.MODID + ":desh_axe"); + + desh_shovel = new ItemToolAbility(4F, -0.05, MainRegistry.tMatDesh, EnumToolType.SHOVEL) + .addBreakAbility(new ToolAbility.HammerAbility(1)) + .addBreakAbility(new ToolAbility.RecursionAbility(3)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("desh_shovel").setTextureName(RefStrings.MODID + ":desh_shovel"); + + desh_hoe = new ModHoe(MainRegistry.tMatDesh).setUnlocalizedName("desh_hoe").setTextureName(RefStrings.MODID + ":desh_hoe"); + + cobalt_sword = new ItemSwordAbility(12F, 0, MainRegistry.tMatCobalt).setUnlocalizedName("cobalt_sword").setTextureName(RefStrings.MODID + ":cobalt_sword"); + cobalt_pickaxe = new ItemToolAbility(4F, 0, MainRegistry.tMatCobalt, EnumToolType.PICKAXE) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(1)).setUnlocalizedName("cobalt_pickaxe").setTextureName(RefStrings.MODID + ":cobalt_pickaxe"); + cobalt_axe = new ItemToolAbility(6F, 0, MainRegistry.tMatCobalt, EnumToolType.AXE) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(1)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("cobalt_axe").setTextureName(RefStrings.MODID + ":cobalt_axe"); + cobalt_shovel = new ItemToolAbility(3.5F, 0, MainRegistry.tMatCobalt, EnumToolType.SHOVEL) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(1)).setUnlocalizedName("cobalt_shovel").setTextureName(RefStrings.MODID + ":cobalt_shovel"); + cobalt_hoe = new ModHoe(MainRegistry.tMatCobalt).setUnlocalizedName("cobalt_hoe").setTextureName(RefStrings.MODID + ":cobalt_hoe"); + + ToolMaterial matDecCobalt = EnumHelper.addToolMaterial("HBM_COBALT2", 3, 2500, 15.0F, 2.5F, 75).setRepairItem(new ItemStack(ModItems.ingot_cobalt)); + cobalt_decorated_sword = new ItemSwordAbility(15F, 0, matDecCobalt) + .addHitAbility(IWeaponAbility.BOBBLE, 0).setUnlocalizedName("cobalt_decorated_sword").setTextureName(RefStrings.MODID + ":cobalt_decorated_sword"); + cobalt_decorated_pickaxe = new ItemToolAbility(6F, 0, matDecCobalt, EnumToolType.PICKAXE) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.HammerAbility(1)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cobalt_decorated_pickaxe").setTextureName(RefStrings.MODID + ":cobalt_decorated_pickaxe"); + cobalt_decorated_axe = new ItemToolAbility(8F, 0, matDecCobalt, EnumToolType.AXE) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.HammerAbility(1)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(3)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("cobalt_decorated_axe").setTextureName(RefStrings.MODID + ":cobalt_decorated_axe"); + cobalt_decorated_shovel = new ItemToolAbility(5F, 0, matDecCobalt, EnumToolType.SHOVEL) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.HammerAbility(1)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cobalt_decorated_shovel").setTextureName(RefStrings.MODID + ":cobalt_decorated_shovel"); + cobalt_decorated_hoe = new ModHoe(matDecCobalt).setUnlocalizedName("cobalt_decorated_hoe").setTextureName(RefStrings.MODID + ":cobalt_decorated_hoe"); + + ToolMaterial matStarmetal = EnumHelper.addToolMaterial("HBM_STARMETAL", 3, 3000, 20.0F, 2.5F, 100).setRepairItem(new ItemStack(ModItems.ingot_starmetal)); + starmetal_sword = new ItemSwordAbility(25F, 0, matStarmetal) + .addHitAbility(IWeaponAbility.BEHEADER, 0) + .addHitAbility(IWeaponAbility.STUN, 1) + .addHitAbility(IWeaponAbility.BOBBLE, 0).setUnlocalizedName("starmetal_sword").setTextureName(RefStrings.MODID + ":starmetal_sword"); + starmetal_pickaxe = new ItemToolAbility(8F, 0, matStarmetal, EnumToolType.PICKAXE) + .addBreakAbility(new ToolAbility.RecursionAbility(6)) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(5)) + .addHitAbility(new WeaponAbility.StunAbility(3)).setUnlocalizedName("starmetal_pickaxe").setTextureName(RefStrings.MODID + ":starmetal_pickaxe"); + starmetal_axe = new ItemToolAbility(12F, 0, matStarmetal, EnumToolType.AXE) + .addBreakAbility(new ToolAbility.RecursionAbility(6)) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(5)) + .addHitAbility(new WeaponAbility.BeheaderAbility()) + .addHitAbility(new WeaponAbility.StunAbility(3)).setUnlocalizedName("starmetal_axe").setTextureName(RefStrings.MODID + ":starmetal_axe"); + starmetal_shovel = new ItemToolAbility(7F, 0, matStarmetal, EnumToolType.SHOVEL) + .addBreakAbility(new ToolAbility.RecursionAbility(6)) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new LuckAbility(5)) + .addHitAbility(new WeaponAbility.StunAbility(3)).setUnlocalizedName("starmetal_shovel").setTextureName(RefStrings.MODID + ":starmetal_shovel"); + starmetal_hoe = new ModHoe(matStarmetal).setUnlocalizedName("starmetal_hoe").setTextureName(RefStrings.MODID + ":starmetal_hoe"); + + centri_stick = new ItemToolAbility(3F, 0, MainRegistry.tMatElec, EnumToolType.MINER) + .addBreakAbility(new ToolAbility.CentrifugeAbility()).setMaxDamage(50).setUnlocalizedName("centri_stick").setTextureName(RefStrings.MODID + ":centri_stick"); + smashing_hammer = new ItemToolAbility(12F, -0.1, MainRegistry.tMatSteel, EnumToolType.MINER) + .addBreakAbility(new ToolAbility.ShredderAbility()).setMaxDamage(2500).setUnlocalizedName("smashing_hammer").setTextureName(RefStrings.MODID + ":smashing_hammer"); + drax = new ItemToolAbilityPower(10F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 500000000, 100000, 5000) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.ShredderAbility()) + .addBreakAbility(new ToolAbility.LuckAbility(2)) + .addBreakAbility(new ToolAbility.HammerAbility(1)) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(5)).setUnlocalizedName("drax").setTextureName(RefStrings.MODID + ":drax"); + drax_mk2 = new ItemToolAbilityPower(15F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 1000000000, 250000, 7500) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.ShredderAbility()) + .addBreakAbility(new ToolAbility.CentrifugeAbility()) + .addBreakAbility(new ToolAbility.LuckAbility(3)) + .addBreakAbility(new ToolAbility.HammerAbility(1)) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.HammerAbility(3)) + .addBreakAbility(new ToolAbility.RecursionAbility(7)).setUnlocalizedName("drax_mk2").setTextureName(RefStrings.MODID + ":drax_mk2"); + drax_mk3 = new ItemToolAbilityPower(20F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 2500000000L, 500000, 10000) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.ShredderAbility()) + .addBreakAbility(new ToolAbility.CentrifugeAbility()) + .addBreakAbility(new ToolAbility.CrystallizerAbility()) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new ToolAbility.LuckAbility(4)) + .addBreakAbility(new ToolAbility.HammerAbility(1)) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.HammerAbility(3)) + .addBreakAbility(new ToolAbility.HammerAbility(4)) + .addBreakAbility(new ToolAbility.RecursionAbility(9)).setUnlocalizedName("drax_mk3").setTextureName(RefStrings.MODID + ":drax_mk3"); + + ToolMaterial matBismuth = EnumHelper.addToolMaterial("HBM_BISMUTH", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth)); + bismuth_pickaxe = new ItemToolAbility(15F, 0, matBismuth, EnumToolType.MINER) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.ShredderAbility()) + .addBreakAbility(new ToolAbility.LuckAbility(2)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addHitAbility(new WeaponAbility.StunAbility(5)) + .addHitAbility(new WeaponAbility.VampireAbility(2F)) + .addHitAbility(new WeaponAbility.BeheaderAbility()) + .setDepthRockBreaker().setUnlocalizedName("bismuth_pickaxe").setTextureName(RefStrings.MODID + ":bismuth_pickaxe"); + bismuth_axe = new ItemToolAbility(25F, 0, matBismuth, EnumToolType.AXE) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.ShredderAbility()) + .addBreakAbility(new ToolAbility.LuckAbility(2)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addHitAbility(new WeaponAbility.StunAbility(10)) + .addHitAbility(new WeaponAbility.VampireAbility(3F)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("bismuth_axe").setTextureName(RefStrings.MODID + ":bismuth_axe"); + + + ToolMaterial matVolcano = EnumHelper.addToolMaterial("HBM_VOLCANIC", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth)); + volcanic_pickaxe = new ItemToolAbility(15F, 0, matVolcano, EnumToolType.MINER) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.LuckAbility(3)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addHitAbility(new WeaponAbility.FireAbility(5)) + .addHitAbility(new WeaponAbility.VampireAbility(2F)) + .addHitAbility(new WeaponAbility.BeheaderAbility()) + .setDepthRockBreaker().setUnlocalizedName("volcanic_pickaxe").setTextureName(RefStrings.MODID + ":volcanic_pickaxe"); + volcanic_axe = new ItemToolAbility(25F, 0, matVolcano, EnumToolType.AXE) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.SmelterAbility()) + .addBreakAbility(new ToolAbility.LuckAbility(3)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addHitAbility(new WeaponAbility.FireAbility(10)) + .addHitAbility(new WeaponAbility.VampireAbility(3F)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("volcanic_axe").setTextureName(RefStrings.MODID + ":volcanic_axe"); + + ToolMaterial matChlorophyte = EnumHelper.addToolMaterial("HBM_CHLOROPHYTE", 4, 0, 75F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.powder_chlorophyte)); + chlorophyte_pickaxe = new ItemToolAbility(20F, 0, matChlorophyte, EnumToolType.MINER) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.LuckAbility(4)) + .addBreakAbility(new ToolAbility.CentrifugeAbility()) + .addBreakAbility(new ToolAbility.MercuryAbility()) + .addHitAbility(new WeaponAbility.StunAbility(10)) + .addHitAbility(new WeaponAbility.VampireAbility(5F)) + .addHitAbility(new WeaponAbility.BeheaderAbility()) + .setDepthRockBreaker().setUnlocalizedName("chlorophyte_pickaxe").setTextureName(RefStrings.MODID + ":chlorophyte_pickaxe"); + chlorophyte_axe = new ItemToolAbility(50F, 0, matChlorophyte, EnumToolType.AXE) + .addBreakAbility(new ToolAbility.HammerAbility(2)) + .addBreakAbility(new ToolAbility.RecursionAbility(4)) + .addBreakAbility(new ToolAbility.LuckAbility(4)) + .addHitAbility(new WeaponAbility.StunAbility(15)) + .addHitAbility(new WeaponAbility.VampireAbility(10F)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("chlorophyte_axe").setTextureName(RefStrings.MODID + ":chlorophyte_axe"); + + ToolMaterial matMese = EnumHelper.addToolMaterial("HBM_MESE", 4, 0, 100F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); + mese_pickaxe = new ItemToolAbility(35F, 0, matMese, EnumToolType.MINER) + .addBreakAbility(new ToolAbility.HammerAbility(3)) + .addBreakAbility(new ToolAbility.RecursionAbility(5)) + .addBreakAbility(new ToolAbility.CrystallizerAbility()) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new ToolAbility.LuckAbility(9)) + .addBreakAbility(new ToolAbility.ExplosionAbility(2.5F)) + .addBreakAbility(new ToolAbility.ExplosionAbility(5F)) + .addBreakAbility(new ToolAbility.ExplosionAbility(10F)) + .addBreakAbility(new ToolAbility.ExplosionAbility(15F)) + .addHitAbility(new WeaponAbility.StunAbility(10)) + .addHitAbility(new WeaponAbility.PhosphorusAbility(60)) + .addHitAbility(new WeaponAbility.BeheaderAbility()) + .setDepthRockBreaker().setUnlocalizedName("mese_pickaxe").setTextureName(RefStrings.MODID + ":mese_pickaxe"); + mese_axe = new ItemToolAbility(75F, 0, matMese, EnumToolType.AXE) + .addBreakAbility(new ToolAbility.HammerAbility(3)) + .addBreakAbility(new ToolAbility.RecursionAbility(5)) + .addBreakAbility(new ToolAbility.SilkAbility()) + .addBreakAbility(new ToolAbility.LuckAbility(9)) + .addBreakAbility(new ToolAbility.ExplosionAbility(2.5F)) + .addBreakAbility(new ToolAbility.ExplosionAbility(5F)) + .addBreakAbility(new ToolAbility.ExplosionAbility(10F)) + .addBreakAbility(new ToolAbility.ExplosionAbility(15F)) + .addHitAbility(new WeaponAbility.StunAbility(15)) + .addHitAbility(new WeaponAbility.PhosphorusAbility(90)) + .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("mese_axe").setTextureName(RefStrings.MODID + ":mese_axe"); + + dnt_sword = new ItemSwordAbility(12F, 0, matMese).setUnlocalizedName("dnt_sword").setTextureName(RefStrings.MODID + ":dnt_sword"); + + ToolMaterial matDwarf = EnumHelper.addToolMaterial("HBM_DWARVEN", 2, 0, 4F, 0.0F, 10).setRepairItem(new ItemStack(ModItems.ingot_copper)); + dwarven_pickaxe = new ItemToolAbility(5F, -0.1, matDwarf, EnumToolType.MINER) + .addBreakAbility(new ToolAbility.HammerAbility(1)).setUnlocalizedName("dwarven_pickaxe").setMaxDamage(250).setTextureName(RefStrings.MODID + ":dwarven_pickaxe"); + + ToolMaterial matMeteorite = EnumHelper.addToolMaterial("HBM_METEORITE", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); + meteorite_sword = new ItemSwordMeteorite(9F, 0, matMeteorite).setUnlocalizedName("meteorite_sword").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_seared = new ItemSwordMeteorite(10F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_seared").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_reforged = new ItemSwordMeteorite(12.5F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_reforged").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_hardened = new ItemSwordMeteorite(15F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_hardened").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_alloyed = new ItemSwordMeteorite(17.5F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_alloyed").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_machined = new ItemSwordMeteorite(20F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_machined").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_treated = new ItemSwordMeteorite(22.5F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_treated").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_etched = new ItemSwordMeteorite(25F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_etched").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_bred = new ItemSwordMeteorite(30F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_bred").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_irradiated = new ItemSwordMeteorite(35F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_irradiated").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_fused = new ItemSwordMeteorite(50F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_fused").setTextureName(RefStrings.MODID + ":meteorite_sword"); + meteorite_sword_baleful = new ItemSwordMeteorite(75F, 0, matMeteorite).setUnlocalizedName("meteorite_sword_baleful").setTextureName(RefStrings.MODID + ":meteorite_sword"); + + mask_of_infamy = new MaskOfInfamy(ArmorMaterial.IRON, 0).setUnlocalizedName("mask_of_infamy").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_of_infamy"); + + hazmat_helmet = new ArmorHazmatMask(MainRegistry.aMatHaz, 0, RefStrings.MODID + ":textures/armor/hazmat_1.png").setUnlocalizedName("hazmat_helmet").setTextureName(RefStrings.MODID + ":hazmat_helmet"); + hazmat_plate = new ArmorHazmat(MainRegistry.aMatHaz, 1, RefStrings.MODID + ":textures/armor/hazmat_1.png").setUnlocalizedName("hazmat_plate").setTextureName(RefStrings.MODID + ":hazmat_plate"); + hazmat_legs = new ArmorHazmat(MainRegistry.aMatHaz, 2, RefStrings.MODID + ":textures/armor/hazmat_2.png").setUnlocalizedName("hazmat_legs").setTextureName(RefStrings.MODID + ":hazmat_legs"); + hazmat_boots = new ArmorHazmat(MainRegistry.aMatHaz, 3, RefStrings.MODID + ":textures/armor/hazmat_1.png").setUnlocalizedName("hazmat_boots").setTextureName(RefStrings.MODID + ":hazmat_boots"); + hazmat_helmet_red = new ArmorHazmatMask(MainRegistry.aMatHaz2, 0, "hbm:textures/models/ModelHazRed.png").setUnlocalizedName("hazmat_helmet_red").setTextureName(RefStrings.MODID + ":hazmat_helmet_red"); + hazmat_plate_red = new ArmorHazmat(MainRegistry.aMatHaz2, 1, RefStrings.MODID + ":textures/armor/hazmat_1_red.png").setUnlocalizedName("hazmat_plate_red").setTextureName(RefStrings.MODID + ":hazmat_plate_red"); + hazmat_legs_red = new ArmorHazmat(MainRegistry.aMatHaz2, 2, RefStrings.MODID + ":textures/armor/hazmat_2_red.png").setUnlocalizedName("hazmat_legs_red").setTextureName(RefStrings.MODID + ":hazmat_legs_red"); + hazmat_boots_red = new ArmorHazmat(MainRegistry.aMatHaz2, 3, RefStrings.MODID + ":textures/armor/hazmat_1_red.png").setUnlocalizedName("hazmat_boots_red").setTextureName(RefStrings.MODID + ":hazmat_boots_red"); + hazmat_helmet_grey = new ArmorHazmatMask(MainRegistry.aMatHaz3, 0, "hbm:textures/models/ModelHazGrey.png") + .setUnlocalizedName("hazmat_helmet_grey").setTextureName(RefStrings.MODID + ":hazmat_helmet_grey"); + hazmat_plate_grey = new ArmorHazmat(MainRegistry.aMatHaz3, 1, RefStrings.MODID + ":textures/armor/hazmat_1_grey.png").cloneStats((ArmorFSB) hazmat_helmet_grey).setUnlocalizedName("hazmat_plate_grey").setTextureName(RefStrings.MODID + ":hazmat_plate_grey"); + hazmat_legs_grey = new ArmorHazmat(MainRegistry.aMatHaz3, 2, RefStrings.MODID + ":textures/armor/hazmat_2_grey.png").cloneStats((ArmorFSB) hazmat_helmet_grey).setUnlocalizedName("hazmat_legs_grey").setTextureName(RefStrings.MODID + ":hazmat_legs_grey"); + hazmat_boots_grey = new ArmorHazmat(MainRegistry.aMatHaz3, 3, RefStrings.MODID + ":textures/armor/hazmat_1_grey.png").cloneStats((ArmorFSB) hazmat_helmet_grey).setUnlocalizedName("hazmat_boots_grey").setTextureName(RefStrings.MODID + ":hazmat_boots_grey"); + hazmat_paa_helmet = new ArmorHazmatMask(MainRegistry.aMatPaa, 0, RefStrings.MODID + ":textures/armor/hazmat_paa_1.png") + .setUnlocalizedName("hazmat_paa_helmet").setTextureName(RefStrings.MODID + ":hazmat_paa_helmet"); + hazmat_paa_plate = new ArmorHazmat(MainRegistry.aMatPaa, 1, RefStrings.MODID + ":textures/armor/hazmat_paa_1.png").cloneStats((ArmorFSB) hazmat_paa_helmet).setUnlocalizedName("hazmat_paa_plate").setTextureName(RefStrings.MODID + ":hazmat_paa_plate"); + hazmat_paa_legs = new ArmorHazmat(MainRegistry.aMatPaa, 2, RefStrings.MODID + ":textures/armor/hazmat_paa_2.png").cloneStats((ArmorFSB) hazmat_paa_helmet).setUnlocalizedName("hazmat_paa_legs").setTextureName(RefStrings.MODID + ":hazmat_paa_legs"); + hazmat_paa_boots = new ArmorHazmat(MainRegistry.aMatPaa, 3, RefStrings.MODID + ":textures/armor/hazmat_paa_1.png").cloneStats((ArmorFSB) hazmat_paa_helmet).setUnlocalizedName("hazmat_paa_boots").setTextureName(RefStrings.MODID + ":hazmat_paa_boots"); + + ArmorMaterial aMatLiquidator = EnumHelper.addArmorMaterial("HBM_LIQUIDATOR", 750, new int[] { 3, 8, 6, 3 }, 10); + aMatLiquidator.customCraftingMaterial = ModItems.plate_lead; + liquidator_helmet = new ArmorLiquidatorMask(aMatLiquidator, 0, RefStrings.MODID + ":textures/armor/liquidator_helmet.png") + .setStep("hbm:step.metal") + .setJump("hbm:step.iron_jump") + .setFall("hbm:step.iron_land").setUnlocalizedName("liquidator_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":liquidator_helmet"); + liquidator_plate = new ArmorLiquidator(aMatLiquidator, 1, RefStrings.MODID + ":textures/armor/liquidator_1.png").cloneStats((ArmorFSB) liquidator_helmet).setUnlocalizedName("liquidator_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":liquidator_plate"); + liquidator_legs = new ArmorLiquidator(aMatLiquidator, 2, RefStrings.MODID + ":textures/armor/liquidator_2.png").cloneStats((ArmorFSB) liquidator_helmet).setUnlocalizedName("liquidator_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":liquidator_legs"); + liquidator_boots = new ArmorLiquidator(aMatLiquidator, 3, RefStrings.MODID + ":textures/armor/liquidator_1.png").cloneStats((ArmorFSB) liquidator_helmet).setUnlocalizedName("liquidator_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":liquidator_boots"); + + jetpack_boost = new JetpackBooster(Fluids.BALEFIRE, 32000).setUnlocalizedName("jetpack_boost").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_boost"); + jetpack_break = new JetpackBreak(Fluids.KEROSENE, 12000).setUnlocalizedName("jetpack_break").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_break"); + jetpack_fly = new JetpackRegular(Fluids.KEROSENE, 12000).setUnlocalizedName("jetpack_fly").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_fly"); + jetpack_vector = new JetpackVectorized(Fluids.KEROSENE, 16000).setUnlocalizedName("jetpack_vector").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_vector"); + wings_murk = new WingsMurk().setUnlocalizedName("wings_murk").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":wings_murk"); + wings_limp = new WingsMurk().setUnlocalizedName("wings_limp").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":wings_limp"); + + cape_radiation = new ArmorModel(ArmorMaterial.CHAIN, 1).setUnlocalizedName("cape_radiation").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_radiation"); + cape_gasmask = new ArmorModel(ArmorMaterial.CHAIN, 1).setUnlocalizedName("cape_gasmask").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_gasmask"); + cape_schrabidium = new ArmorModel(MainRegistry.aMatSchrab, 1).setUnlocalizedName("cape_schrabidium").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_schrabidium"); + cape_hidden = new ArmorModel(ArmorMaterial.CHAIN, 1).setUnlocalizedName("cape_hidden").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_unknown"); + + schrabidium_hammer = new WeaponSpecial(MainRegistry.tMatHammmer).setUnlocalizedName("schrabidium_hammer").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":schrabidium_hammer"); + shimmer_sledge = new WeaponSpecial(MainRegistry.enumToolMaterialSledge).setUnlocalizedName("shimmer_sledge").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":shimmer_sledge_original"); + shimmer_axe = new WeaponSpecial(MainRegistry.enumToolMaterialSledge).setUnlocalizedName("shimmer_axe").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":shimmer_axe"); + bottle_opener = new WeaponSpecial(MainRegistry.enumToolMaterialBottleOpener).setUnlocalizedName("bottle_opener").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":bottle_opener"); + pch = new WeaponSpecial(MainRegistry.tMatHammmer).setUnlocalizedName("pch").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":schrabidium_hammer"); + matchstick = new ItemMatch().setUnlocalizedName("matchstick").setCreativeTab(CreativeTabs.tabTools).setFull3D().setTextureName(RefStrings.MODID + ":matchstick"); + balefire_and_steel = new ItemBalefireMatch().setUnlocalizedName("balefire_and_steel").setCreativeTab(CreativeTabs.tabTools).setFull3D().setTextureName(RefStrings.MODID + ":balefire_and_steel"); + crowbar = new ModSword(MainRegistry.tMatSteel).setUnlocalizedName("crowbar").setFull3D().setTextureName(RefStrings.MODID + ":crowbar"); + 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"); + wood_gavel = new WeaponSpecial(ToolMaterial.WOOD).setUnlocalizedName("wood_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":wood_gavel"); + lead_gavel = new WeaponSpecial(MainRegistry.tMatSteel).setUnlocalizedName("lead_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":lead_gavel"); + diamond_gavel = new WeaponSpecial(ToolMaterial.EMERALD).setUnlocalizedName("diamond_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":diamond_gavel"); + ToolMaterial matMeseGavel = EnumHelper.addToolMaterial("HBM_MESEGAVEL", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); + mese_gavel = new ItemSwordAbility(250, 1.5, matMeseGavel) + .addHitAbility(IWeaponAbility.PHOSPHORUS, 0) + .addHitAbility(IWeaponAbility.RADIATION, 2) + .addHitAbility(IWeaponAbility.STUN, 3) + .addHitAbility(IWeaponAbility.VAMPIRE, 4) + .addHitAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("mese_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mese_gavel"); + + 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"); + multitool_silk = new ItemMultitoolTool(4.0F, MainRegistry.enumToolMaterialMultitool, ItemMultitoolTool.getAllBlocks()).setFull3D().setUnlocalizedName("multitool_silk").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_claw"); + multitool_ext = new ItemMultitoolPassive().setUnlocalizedName("multitool_ext").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_open"); + multitool_miner = new ItemMultitoolPassive().setUnlocalizedName("multitool_miner").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_pointer"); + multitool_beam = new ItemMultitoolPassive().setUnlocalizedName("multitool_beam").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_pointer"); + multitool_sky= new ItemMultitoolPassive().setUnlocalizedName("multitool_sky").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_open"); + multitool_mega = new ItemMultitoolPassive().setUnlocalizedName("multitool_mega").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist"); + multitool_joule = new ItemMultitoolPassive().setUnlocalizedName("multitool_joule").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist"); + multitool_decon = new ItemMultitoolPassive().setUnlocalizedName("multitool_decon").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist"); + + saw = new ModSword(MainRegistry.enumToolMaterialSaw).setUnlocalizedName("weapon_saw").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":saw"); + bat = new ModSword(MainRegistry.enumToolMaterialBat).setUnlocalizedName("weapon_bat").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":bat"); + bat_nail = new ModSword(MainRegistry.enumToolMaterialBatNail).setUnlocalizedName("weapon_bat_nail").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":bat_nail"); + golf_club = new ModSword(MainRegistry.enumToolMaterialGolfClub).setUnlocalizedName("weapon_golf_club").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":golf_club"); + pipe_rusty = new ModSword(MainRegistry.enumToolMaterialPipeRusty).setUnlocalizedName("weapon_pipe_rusty").setCreativeTab(null).setFull3D().setTextureName(RefStrings.MODID + ":pipe_rusty"); + pipe_lead = new ModSword(MainRegistry.enumToolMaterialPipeLead).setUnlocalizedName("weapon_pipe_lead").setFull3D().setTextureName(RefStrings.MODID + ":pipe_lead"); + reer_graar = new ModSword(MainRegistry.tMatTitan).setUnlocalizedName("reer_graar").setFull3D().setTextureName(RefStrings.MODID + ":reer_graar_hd"); + stopsign = new WeaponSpecial(MainRegistry.tMatAlloy).setUnlocalizedName("stopsign").setTextureName(RefStrings.MODID + ":stopsign"); + sopsign = new WeaponSpecial(MainRegistry.tMatAlloy).setUnlocalizedName("sopsign").setTextureName(RefStrings.MODID + ":sopsign"); + chernobylsign = new WeaponSpecial(MainRegistry.tMatAlloy).setUnlocalizedName("chernobylsign").setTextureName(RefStrings.MODID + ":chernobylsign"); + + crystal_horn = new ItemCustomLore().setUnlocalizedName("crystal_horn").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_horn"); + crystal_charred = new ItemCustomLore().setUnlocalizedName("crystal_charred").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_charred"); + + bucket_mud = new ItemModBucket(ModBlocks.mud_block).setUnlocalizedName("bucket_mud").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_mud"); + bucket_acid = new ItemModBucket(ModBlocks.acid_block).setUnlocalizedName("bucket_acid").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_acid"); + bucket_toxic = new ItemModBucket(ModBlocks.toxic_block).setUnlocalizedName("bucket_toxic").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_toxic"); + bucket_schrabidic_acid = new ItemModBucket(ModBlocks.schrabidic_block).setUnlocalizedName("bucket_schrabidic_acid").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_schrabidic_acid"); + bucket_sulfuric_acid = new ItemModBucket(ModBlocks.sulfuric_acid_block).setUnlocalizedName("bucket_sulfuric_acid").setContainerItem(Items.bucket).setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":bucket_sulfuric_acid"); + + door_metal = new ItemModDoor().setUnlocalizedName("door_metal").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_metal"); + door_office = new ItemModDoor().setUnlocalizedName("door_office").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_office"); + door_bunker = new ItemModDoor().setUnlocalizedName("door_bunker").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_bunker"); + door_red = new ItemModDoor().setUnlocalizedName("door_red").setCreativeTab(null).setTextureName(RefStrings.MODID + ":door_red"); + + sliding_blast_door_skin = new ItemSlidingBlastDoorSkin().setUnlocalizedName("sliding_blast_door_skin").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":sliding_blast_door_default"); + + record_lc = new ItemModRecord("lc").setUnlocalizedName("record_lc").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_lc"); + record_ss = new ItemModRecord("ss").setUnlocalizedName("record_ss").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_ss"); + record_vc = new ItemModRecord("vc").setUnlocalizedName("record_vc").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_vc"); + record_glass = new ItemModRecord("glass").setUnlocalizedName("record_glass").setCreativeTab(null).setTextureName(RefStrings.MODID + ":record_glass"); + + book_guide = new ItemGuideBook().setUnlocalizedName("book_guide").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":book_guide"); + book_lore = new ItemBookLore().setUnlocalizedName("book_lore").setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_pages"); + holotape_image = new ItemHolotapeImage().setUnlocalizedName("holotape_image").setCreativeTab(null).setTextureName(RefStrings.MODID + ":holotape"); + holotape_damaged = new Item().setUnlocalizedName("holotape_damaged").setCreativeTab(null).setTextureName(RefStrings.MODID + ":holotape_damaged"); + clay_tablet = new ItemClayTablet().setUnlocalizedName("clay_tablet").setCreativeTab(null).setTextureName(RefStrings.MODID + ":clay_tablet"); + + polaroid = new ItemPolaroid().setUnlocalizedName("polaroid").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":polaroid_" + MainRegistry.polaroidID); + glitch = new ItemGlitch().setUnlocalizedName("glitch").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glitch_" + MainRegistry.polaroidID); + letter = new ItemStarterKit().setUnlocalizedName("letter").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":letter"); + book_secret = new ItemCustomLore().setUnlocalizedName("book_secret").setCreativeTab(MainRegistry.polaroidID == 11 ? MainRegistry.consumableTab : null).setTextureName(RefStrings.MODID + ":book_secret"); + book_of_ = new ItemBook().setUnlocalizedName("book_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_of_"); + page_of_ = new ItemEnumMulti(ItemEnums.EnumPages.class, true, false).setUnlocalizedName("page_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":page_of_"); + book_lemegeton = new ItemBookLemegeton().setUnlocalizedName("book_lemegeton").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_lemegeton"); + burnt_bark = new ItemCustomLore().setUnlocalizedName("burnt_bark").setCreativeTab(null).setTextureName(RefStrings.MODID + ":burnt_bark"); + + chlorine1 = new Item().setUnlocalizedName("chlorine1").setTextureName(RefStrings.MODID + ":chlorine1"); + chlorine2 = new Item().setUnlocalizedName("chlorine2").setTextureName(RefStrings.MODID + ":chlorine2"); + chlorine3 = new Item().setUnlocalizedName("chlorine3").setTextureName(RefStrings.MODID + ":chlorine3"); + chlorine4 = new Item().setUnlocalizedName("chlorine4").setTextureName(RefStrings.MODID + ":chlorine4"); + chlorine5 = new Item().setUnlocalizedName("chlorine5").setTextureName(RefStrings.MODID + ":chlorine5"); + chlorine6 = new Item().setUnlocalizedName("chlorine6").setTextureName(RefStrings.MODID + ":chlorine6"); + chlorine7 = new Item().setUnlocalizedName("chlorine7").setTextureName(RefStrings.MODID + ":chlorine7"); + chlorine8 = new Item().setUnlocalizedName("chlorine8").setTextureName(RefStrings.MODID + ":chlorine8"); + pc1 = new Item().setUnlocalizedName("pc1").setTextureName(RefStrings.MODID + ":pc1"); + pc2 = new Item().setUnlocalizedName("pc2").setTextureName(RefStrings.MODID + ":pc2"); + pc3 = new Item().setUnlocalizedName("pc3").setTextureName(RefStrings.MODID + ":pc3"); + pc4 = new Item().setUnlocalizedName("pc4").setTextureName(RefStrings.MODID + ":pc4"); + pc5 = new Item().setUnlocalizedName("pc5").setTextureName(RefStrings.MODID + ":pc5"); + pc6 = new Item().setUnlocalizedName("pc6").setTextureName(RefStrings.MODID + ":pc6"); + pc7 = new Item().setUnlocalizedName("pc7").setTextureName(RefStrings.MODID + ":pc7"); + pc8 = new Item().setUnlocalizedName("pc8").setTextureName(RefStrings.MODID + ":pc8"); + cloud1 = new Item().setUnlocalizedName("cloud1").setTextureName(RefStrings.MODID + ":cloud1"); + cloud2 = new Item().setUnlocalizedName("cloud2").setTextureName(RefStrings.MODID + ":cloud2"); + cloud3 = new Item().setUnlocalizedName("cloud3").setTextureName(RefStrings.MODID + ":cloud3"); + cloud4 = new Item().setUnlocalizedName("cloud4").setTextureName(RefStrings.MODID + ":cloud4"); + cloud5 = new Item().setUnlocalizedName("cloud5").setTextureName(RefStrings.MODID + ":cloud5"); + cloud6 = new Item().setUnlocalizedName("cloud6").setTextureName(RefStrings.MODID + ":cloud6"); + cloud7 = new Item().setUnlocalizedName("cloud7").setTextureName(RefStrings.MODID + ":cloud7"); + cloud8 = new Item().setUnlocalizedName("cloud8").setTextureName(RefStrings.MODID + ":cloud8"); + orange1 = new Item().setUnlocalizedName("orange1").setTextureName(RefStrings.MODID + ":orange1"); + orange2 = new Item().setUnlocalizedName("orange2").setTextureName(RefStrings.MODID + ":orange2"); + orange3 = new Item().setUnlocalizedName("orange3").setTextureName(RefStrings.MODID + ":orange3"); + orange4 = new Item().setUnlocalizedName("orange4").setTextureName(RefStrings.MODID + ":orange4"); + orange5 = new Item().setUnlocalizedName("orange5").setTextureName(RefStrings.MODID + ":orange5"); + orange6 = new Item().setUnlocalizedName("orange6").setTextureName(RefStrings.MODID + ":orange6"); + orange7 = new Item().setUnlocalizedName("orange7").setTextureName(RefStrings.MODID + ":orange7"); + orange8 = new Item().setUnlocalizedName("orange8").setTextureName(RefStrings.MODID + ":orange8"); + nothing = new Item().setUnlocalizedName("nothing").setTextureName(RefStrings.MODID + ":nothing"); + + + achievement_icon = new ItemEnumMulti(ItemEnums.EnumAchievementType.class, true, true).setUnlocalizedName("achievement_icon"); + bob_metalworks = new Item().setUnlocalizedName("bob_metalworks").setTextureName(RefStrings.MODID + ":bob_metalworks"); + bob_assembly = new Item().setUnlocalizedName("bob_assembly").setTextureName(RefStrings.MODID + ":bob_assembly"); + bob_chemistry = new Item().setUnlocalizedName("bob_chemistry").setTextureName(RefStrings.MODID + ":bob_chemistry"); + bob_oil = new Item().setUnlocalizedName("bob_oil").setTextureName(RefStrings.MODID + ":bob_oil"); + bob_nuclear = new Item().setUnlocalizedName("bob_nuclear").setTextureName(RefStrings.MODID + ":bob_nuclear"); + + mysteryshovel = new ItemMS().setUnlocalizedName("mysteryshovel").setFull3D().setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cursed_shovel"); + memory = new ItemBattery(Long.MAX_VALUE / 100L, 100000000000000L, 100000000000000L).setUnlocalizedName("memory").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mo8_anim"); + + conveyor_wand = new ItemConveyorWand().setUnlocalizedName("conveyor_wand").setCreativeTab(MainRegistry.machineTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_s"); + + GunFactory.init(); + + FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.mud_fluid, 1000), new ItemStack(ModItems.bucket_mud), new ItemStack(Items.bucket)); + FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.acid_fluid, 1000), new ItemStack(ModItems.bucket_acid), new ItemStack(Items.bucket)); + FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.toxic_fluid, 1000), new ItemStack(ModItems.bucket_toxic), new ItemStack(Items.bucket)); + FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.schrabidic_fluid, 1000), new ItemStack(ModItems.bucket_schrabidic_acid), new ItemStack(Items.bucket)); + FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.sulfuric_acid_fluid, 1000), new ItemStack(ModItems.bucket_sulfuric_acid), new ItemStack(Items.bucket)); + BucketHandler.INSTANCE.buckets.put(ModBlocks.mud_block, ModItems.bucket_mud); + BucketHandler.INSTANCE.buckets.put(ModBlocks.acid_block, ModItems.bucket_acid); + BucketHandler.INSTANCE.buckets.put(ModBlocks.toxic_block, ModItems.bucket_toxic); + BucketHandler.INSTANCE.buckets.put(ModBlocks.schrabidic_block, ModItems.bucket_schrabidic_acid); + BucketHandler.INSTANCE.buckets.put(ModBlocks.sulfuric_acid_block, ModItems.bucket_sulfuric_acid); + MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE); + } + + private static void registerItem() { + //Weapons + GameRegistry.registerItem(redstone_sword, redstone_sword.getUnlocalizedName()); + GameRegistry.registerItem(big_sword, big_sword.getUnlocalizedName()); + + //Test Nuke + GameRegistry.registerItem(test_nuke_igniter, test_nuke_igniter.getUnlocalizedName()); + GameRegistry.registerItem(test_nuke_propellant, test_nuke_propellant.getUnlocalizedName()); + GameRegistry.registerItem(test_nuke_tier1_shielding, test_nuke_tier1_shielding.getUnlocalizedName()); + GameRegistry.registerItem(test_nuke_tier2_shielding, test_nuke_tier2_shielding.getUnlocalizedName()); + GameRegistry.registerItem(test_nuke_tier1_bullet, test_nuke_tier1_bullet.getUnlocalizedName()); + GameRegistry.registerItem(test_nuke_tier2_bullet, test_nuke_tier2_bullet.getUnlocalizedName()); + GameRegistry.registerItem(test_nuke_tier1_target, test_nuke_tier1_target.getUnlocalizedName()); + GameRegistry.registerItem(test_nuke_tier2_target, test_nuke_tier2_target.getUnlocalizedName()); + + //Ingots + GameRegistry.registerItem(ingot_uranium, ingot_uranium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_u233, ingot_u233.getUnlocalizedName()); + GameRegistry.registerItem(ingot_u235, ingot_u235.getUnlocalizedName()); + GameRegistry.registerItem(ingot_u238, ingot_u238.getUnlocalizedName()); + GameRegistry.registerItem(ingot_u238m2, ingot_u238m2.getUnlocalizedName()); + GameRegistry.registerItem(ingot_th232, ingot_th232.getUnlocalizedName()); + GameRegistry.registerItem(ingot_plutonium, ingot_plutonium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_pu238, ingot_pu238.getUnlocalizedName()); + GameRegistry.registerItem(ingot_pu239, ingot_pu239.getUnlocalizedName()); + GameRegistry.registerItem(ingot_pu240, ingot_pu240.getUnlocalizedName()); + GameRegistry.registerItem(ingot_pu241, ingot_pu241.getUnlocalizedName()); + GameRegistry.registerItem(ingot_pu_mix, ingot_pu_mix.getUnlocalizedName()); + GameRegistry.registerItem(ingot_am241, ingot_am241.getUnlocalizedName()); + GameRegistry.registerItem(ingot_am242, ingot_am242.getUnlocalizedName()); + GameRegistry.registerItem(ingot_am_mix, ingot_am_mix.getUnlocalizedName()); + GameRegistry.registerItem(ingot_neptunium, ingot_neptunium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_polonium, ingot_polonium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_technetium, ingot_technetium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_co60, ingot_co60.getUnlocalizedName()); + GameRegistry.registerItem(ingot_sr90, ingot_sr90.getUnlocalizedName()); + GameRegistry.registerItem(ingot_au198, ingot_au198.getUnlocalizedName()); + GameRegistry.registerItem(ingot_pb209, ingot_pb209.getUnlocalizedName()); + GameRegistry.registerItem(ingot_ra226, ingot_ra226.getUnlocalizedName()); + GameRegistry.registerItem(ingot_titanium, ingot_titanium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_copper, ingot_copper.getUnlocalizedName()); + GameRegistry.registerItem(ingot_red_copper, ingot_red_copper.getUnlocalizedName()); + GameRegistry.registerItem(ingot_advanced_alloy, ingot_advanced_alloy.getUnlocalizedName()); + GameRegistry.registerItem(ingot_tungsten, ingot_tungsten.getUnlocalizedName()); + GameRegistry.registerItem(ingot_aluminium, ingot_aluminium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_steel, ingot_steel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_tcalloy, ingot_tcalloy.getUnlocalizedName()); + GameRegistry.registerItem(ingot_cdalloy, ingot_cdalloy.getUnlocalizedName()); + GameRegistry.registerItem(ingot_bismuth_bronze, ingot_bismuth_bronze.getUnlocalizedName()); + GameRegistry.registerItem(ingot_arsenic_bronze, ingot_arsenic_bronze.getUnlocalizedName()); + GameRegistry.registerItem(ingot_bscco, ingot_bscco.getUnlocalizedName()); + GameRegistry.registerItem(ingot_lead, ingot_lead.getUnlocalizedName()); + GameRegistry.registerItem(ingot_bismuth, ingot_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(ingot_arsenic, ingot_arsenic.getUnlocalizedName()); + GameRegistry.registerItem(ingot_calcium, ingot_calcium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_cadmium, ingot_cadmium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_tantalium, ingot_tantalium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_silicon, ingot_silicon.getUnlocalizedName()); + GameRegistry.registerItem(ingot_niobium, ingot_niobium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_beryllium, ingot_beryllium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_cobalt, ingot_cobalt.getUnlocalizedName()); + GameRegistry.registerItem(ingot_boron, ingot_boron.getUnlocalizedName()); + GameRegistry.registerItem(ingot_graphite, ingot_graphite.getUnlocalizedName()); + GameRegistry.registerItem(ingot_firebrick, ingot_firebrick.getUnlocalizedName()); + GameRegistry.registerItem(ingot_dura_steel, ingot_dura_steel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_polymer, ingot_polymer.getUnlocalizedName()); + GameRegistry.registerItem(ingot_bakelite, ingot_bakelite.getUnlocalizedName()); + GameRegistry.registerItem(ingot_biorubber, ingot_biorubber.getUnlocalizedName()); + GameRegistry.registerItem(ingot_rubber, ingot_rubber.getUnlocalizedName()); + GameRegistry.registerItem(ingot_pc, ingot_pc.getUnlocalizedName()); + GameRegistry.registerItem(ingot_pvc, ingot_pvc.getUnlocalizedName()); + GameRegistry.registerItem(ingot_mud, ingot_mud.getUnlocalizedName()); + GameRegistry.registerItem(ingot_cft, ingot_cft.getUnlocalizedName()); + GameRegistry.registerItem(ingot_schraranium, ingot_schraranium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_schrabidium, ingot_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_schrabidate, ingot_schrabidate.getUnlocalizedName()); + GameRegistry.registerItem(ingot_magnetized_tungsten, ingot_magnetized_tungsten.getUnlocalizedName()); + GameRegistry.registerItem(ingot_combine_steel, ingot_combine_steel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_solinium, ingot_solinium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_gh336, ingot_gh336.getUnlocalizedName()); + GameRegistry.registerItem(ingot_uranium_fuel, ingot_uranium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_thorium_fuel, ingot_thorium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_plutonium_fuel, ingot_plutonium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_neptunium_fuel, ingot_neptunium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_mox_fuel, ingot_mox_fuel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_americium_fuel, ingot_americium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_schrabidium_fuel, ingot_schrabidium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_hes, ingot_hes.getUnlocalizedName()); + GameRegistry.registerItem(ingot_les, ingot_les.getUnlocalizedName()); + GameRegistry.registerItem(ingot_australium, ingot_australium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_lanthanium, ingot_lanthanium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_actinium, ingot_actinium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_desh, ingot_desh.getUnlocalizedName()); + GameRegistry.registerItem(ingot_ferrouranium, ingot_ferrouranium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_starmetal, ingot_starmetal.getUnlocalizedName()); + GameRegistry.registerItem(ingot_gunmetal, ingot_gunmetal.getUnlocalizedName()); + GameRegistry.registerItem(ingot_weaponsteel, ingot_weaponsteel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_saturnite, ingot_saturnite.getUnlocalizedName()); + GameRegistry.registerItem(ingot_euphemium, ingot_euphemium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_dineutronium, ingot_dineutronium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_electronium, ingot_electronium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_smore, ingot_smore.getUnlocalizedName()); + GameRegistry.registerItem(ingot_osmiridium, ingot_osmiridium.getUnlocalizedName()); + + //Meteorite Ingots + GameRegistry.registerItem(ingot_steel_dusted, ingot_steel_dusted.getUnlocalizedName()); + GameRegistry.registerItem(ingot_chainsteel, ingot_chainsteel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_meteorite, ingot_meteorite.getUnlocalizedName()); + GameRegistry.registerItem(ingot_meteorite_forged, ingot_meteorite_forged.getUnlocalizedName()); + GameRegistry.registerItem(blade_meteorite, blade_meteorite.getUnlocalizedName()); + + //Misc Ingots + GameRegistry.registerItem(ingot_phosphorus, ingot_phosphorus.getUnlocalizedName()); + GameRegistry.registerItem(lithium, lithium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_zirconium, ingot_zirconium.getUnlocalizedName()); + GameRegistry.registerItem(ingot_semtex, ingot_semtex.getUnlocalizedName()); + GameRegistry.registerItem(ingot_c4, ingot_c4.getUnlocalizedName()); + GameRegistry.registerItem(oil_tar, oil_tar.getUnlocalizedName()); + GameRegistry.registerItem(solid_fuel, solid_fuel.getUnlocalizedName()); + GameRegistry.registerItem(solid_fuel_presto, solid_fuel_presto.getUnlocalizedName()); + GameRegistry.registerItem(solid_fuel_presto_triplet, solid_fuel_presto_triplet.getUnlocalizedName()); + GameRegistry.registerItem(solid_fuel_bf, solid_fuel_bf.getUnlocalizedName()); + GameRegistry.registerItem(solid_fuel_presto_bf, solid_fuel_presto_bf.getUnlocalizedName()); + GameRegistry.registerItem(solid_fuel_presto_triplet_bf, solid_fuel_presto_triplet_bf.getUnlocalizedName()); + GameRegistry.registerItem(rocket_fuel, rocket_fuel.getUnlocalizedName()); + GameRegistry.registerItem(ingot_fiberglass, ingot_fiberglass.getUnlocalizedName()); + GameRegistry.registerItem(ingot_asbestos, ingot_asbestos.getUnlocalizedName()); + GameRegistry.registerItem(ingot_raw, ingot_raw.getUnlocalizedName()); + + //Billets + GameRegistry.registerItem(billet_uranium, billet_uranium.getUnlocalizedName()); + GameRegistry.registerItem(billet_u233, billet_u233.getUnlocalizedName()); + GameRegistry.registerItem(billet_u235, billet_u235.getUnlocalizedName()); + GameRegistry.registerItem(billet_u238, billet_u238.getUnlocalizedName()); + GameRegistry.registerItem(billet_th232, billet_th232.getUnlocalizedName()); + GameRegistry.registerItem(billet_plutonium, billet_plutonium.getUnlocalizedName()); + GameRegistry.registerItem(billet_pu238, billet_pu238.getUnlocalizedName()); + GameRegistry.registerItem(billet_pu239, billet_pu239.getUnlocalizedName()); + GameRegistry.registerItem(billet_pu240, billet_pu240.getUnlocalizedName()); + GameRegistry.registerItem(billet_pu241, billet_pu241.getUnlocalizedName()); + GameRegistry.registerItem(billet_pu_mix, billet_pu_mix.getUnlocalizedName()); + GameRegistry.registerItem(billet_am241, billet_am241.getUnlocalizedName()); + GameRegistry.registerItem(billet_am242, billet_am242.getUnlocalizedName()); + GameRegistry.registerItem(billet_am_mix, billet_am_mix.getUnlocalizedName()); + GameRegistry.registerItem(billet_neptunium, billet_neptunium.getUnlocalizedName()); + GameRegistry.registerItem(billet_polonium, billet_polonium.getUnlocalizedName()); + GameRegistry.registerItem(billet_technetium, billet_technetium.getUnlocalizedName()); + GameRegistry.registerItem(billet_cobalt, billet_cobalt.getUnlocalizedName()); + GameRegistry.registerItem(billet_co60, billet_co60.getUnlocalizedName()); + GameRegistry.registerItem(billet_sr90, billet_sr90.getUnlocalizedName()); + GameRegistry.registerItem(billet_au198, billet_au198.getUnlocalizedName()); + GameRegistry.registerItem(billet_pb209, billet_pb209.getUnlocalizedName()); + GameRegistry.registerItem(billet_ra226, billet_ra226.getUnlocalizedName()); + GameRegistry.registerItem(billet_actinium, billet_actinium.getUnlocalizedName()); + GameRegistry.registerItem(billet_schrabidium, billet_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(billet_solinium, billet_solinium.getUnlocalizedName()); + GameRegistry.registerItem(billet_gh336, billet_gh336.getUnlocalizedName()); + GameRegistry.registerItem(billet_australium, billet_australium.getUnlocalizedName()); + GameRegistry.registerItem(billet_australium_lesser, billet_australium_lesser.getUnlocalizedName()); + GameRegistry.registerItem(billet_australium_greater, billet_australium_greater.getUnlocalizedName()); + GameRegistry.registerItem(billet_uranium_fuel, billet_uranium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(billet_thorium_fuel, billet_thorium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(billet_plutonium_fuel, billet_plutonium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(billet_neptunium_fuel, billet_neptunium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(billet_mox_fuel, billet_mox_fuel.getUnlocalizedName()); + GameRegistry.registerItem(billet_americium_fuel, billet_americium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(billet_les, billet_les.getUnlocalizedName()); + GameRegistry.registerItem(billet_schrabidium_fuel, billet_schrabidium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(billet_hes, billet_hes.getUnlocalizedName()); + GameRegistry.registerItem(billet_po210be, billet_po210be.getUnlocalizedName()); + GameRegistry.registerItem(billet_ra226be, billet_ra226be.getUnlocalizedName()); + GameRegistry.registerItem(billet_pu238be, billet_pu238be.getUnlocalizedName()); + GameRegistry.registerItem(billet_beryllium, billet_beryllium.getUnlocalizedName()); + GameRegistry.registerItem(billet_bismuth, billet_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(billet_silicon, billet_silicon.getUnlocalizedName()); + GameRegistry.registerItem(billet_zirconium, billet_zirconium.getUnlocalizedName()); + GameRegistry.registerItem(billet_zfb_bismuth, billet_zfb_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(billet_zfb_pu241, billet_zfb_pu241.getUnlocalizedName()); + GameRegistry.registerItem(billet_zfb_am_mix, billet_zfb_am_mix.getUnlocalizedName()); + GameRegistry.registerItem(billet_yharonite, billet_yharonite.getUnlocalizedName()); + GameRegistry.registerItem(billet_balefire_gold, billet_balefire_gold.getUnlocalizedName()); + GameRegistry.registerItem(billet_flashlead, billet_flashlead.getUnlocalizedName()); + GameRegistry.registerItem(billet_nuclear_waste, billet_nuclear_waste.getUnlocalizedName()); + + //Dusts & Other + GameRegistry.registerItem(cinnebar, cinnebar.getUnlocalizedName()); + GameRegistry.registerItem(nugget_mercury, nugget_mercury.getUnlocalizedName()); + GameRegistry.registerItem(ingot_mercury, ingot_mercury.getUnlocalizedName()); + GameRegistry.registerItem(bottle_mercury, bottle_mercury.getUnlocalizedName()); + GameRegistry.registerItem(coke, coke.getUnlocalizedName()); + GameRegistry.registerItem(lignite, lignite.getUnlocalizedName()); + GameRegistry.registerItem(coal_infernal, coal_infernal.getUnlocalizedName()); + GameRegistry.registerItem(briquette, briquette.getUnlocalizedName()); + GameRegistry.registerItem(sulfur, sulfur.getUnlocalizedName()); + GameRegistry.registerItem(niter, niter.getUnlocalizedName()); + GameRegistry.registerItem(nitra, nitra.getUnlocalizedName()); + GameRegistry.registerItem(nitra_small, nitra_small.getUnlocalizedName()); + GameRegistry.registerItem(fluorite, fluorite.getUnlocalizedName()); + GameRegistry.registerItem(powder_coal, powder_coal.getUnlocalizedName()); + GameRegistry.registerItem(powder_coal_tiny, powder_coal_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_iron, powder_iron.getUnlocalizedName()); + GameRegistry.registerItem(powder_gold, powder_gold.getUnlocalizedName()); + GameRegistry.registerItem(powder_lapis, powder_lapis.getUnlocalizedName()); + GameRegistry.registerItem(powder_quartz, powder_quartz.getUnlocalizedName()); + GameRegistry.registerItem(powder_diamond, powder_diamond.getUnlocalizedName()); + GameRegistry.registerItem(powder_emerald, powder_emerald.getUnlocalizedName()); + GameRegistry.registerItem(powder_uranium, powder_uranium.getUnlocalizedName()); + GameRegistry.registerItem(powder_plutonium, powder_plutonium.getUnlocalizedName()); + GameRegistry.registerItem(powder_neptunium, powder_neptunium.getUnlocalizedName()); + GameRegistry.registerItem(powder_polonium, powder_polonium.getUnlocalizedName()); + GameRegistry.registerItem(powder_co60, powder_co60.getUnlocalizedName()); + GameRegistry.registerItem(powder_sr90, powder_sr90.getUnlocalizedName()); + GameRegistry.registerItem(powder_sr90_tiny, powder_sr90_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_i131, powder_i131.getUnlocalizedName()); + GameRegistry.registerItem(powder_i131_tiny, powder_i131_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_xe135, powder_xe135.getUnlocalizedName()); + GameRegistry.registerItem(powder_xe135_tiny, powder_xe135_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_cs137, powder_cs137.getUnlocalizedName()); + GameRegistry.registerItem(powder_cs137_tiny, powder_cs137_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_au198, powder_au198.getUnlocalizedName()); + GameRegistry.registerItem(powder_ra226, powder_ra226.getUnlocalizedName()); + GameRegistry.registerItem(powder_at209, powder_at209.getUnlocalizedName()); + GameRegistry.registerItem(powder_titanium, powder_titanium.getUnlocalizedName()); + GameRegistry.registerItem(powder_copper, powder_copper.getUnlocalizedName()); + GameRegistry.registerItem(powder_red_copper, powder_red_copper.getUnlocalizedName()); + GameRegistry.registerItem(powder_advanced_alloy, powder_advanced_alloy.getUnlocalizedName()); + GameRegistry.registerItem(powder_tungsten, powder_tungsten.getUnlocalizedName()); + GameRegistry.registerItem(powder_aluminium, powder_aluminium.getUnlocalizedName()); + GameRegistry.registerItem(powder_steel, powder_steel.getUnlocalizedName()); + GameRegistry.registerItem(powder_steel_tiny, powder_steel_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_tcalloy, powder_tcalloy.getUnlocalizedName()); + GameRegistry.registerItem(powder_lead, powder_lead.getUnlocalizedName()); + GameRegistry.registerItem(powder_bismuth, powder_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(powder_calcium, powder_calcium.getUnlocalizedName()); + GameRegistry.registerItem(powder_cadmium, powder_cadmium.getUnlocalizedName()); + GameRegistry.registerItem(powder_coltan_ore, powder_coltan_ore.getUnlocalizedName()); + GameRegistry.registerItem(powder_coltan, powder_coltan.getUnlocalizedName()); + GameRegistry.registerItem(powder_tantalium, powder_tantalium.getUnlocalizedName()); + GameRegistry.registerItem(powder_tektite, powder_tektite.getUnlocalizedName()); + GameRegistry.registerItem(powder_paleogenite, powder_paleogenite.getUnlocalizedName()); + GameRegistry.registerItem(powder_paleogenite_tiny, powder_paleogenite_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_impure_osmiridium, powder_impure_osmiridium.getUnlocalizedName()); + GameRegistry.registerItem(powder_borax, powder_borax.getUnlocalizedName()); + GameRegistry.registerItem(powder_chlorocalcite, powder_chlorocalcite.getUnlocalizedName()); + GameRegistry.registerItem(powder_molysite, powder_molysite.getUnlocalizedName()); + GameRegistry.registerItem(powder_yellowcake, powder_yellowcake.getUnlocalizedName()); + GameRegistry.registerItem(powder_beryllium, powder_beryllium.getUnlocalizedName()); + GameRegistry.registerItem(powder_dura_steel, powder_dura_steel.getUnlocalizedName()); + GameRegistry.registerItem(powder_polymer, powder_polymer.getUnlocalizedName()); + GameRegistry.registerItem(powder_bakelite, powder_bakelite.getUnlocalizedName()); + GameRegistry.registerItem(powder_schrabidium, powder_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(powder_schrabidate, powder_schrabidate.getUnlocalizedName()); + GameRegistry.registerItem(powder_magnetized_tungsten, powder_magnetized_tungsten.getUnlocalizedName()); + GameRegistry.registerItem(powder_chlorophyte, powder_chlorophyte.getUnlocalizedName()); + GameRegistry.registerItem(powder_combine_steel, powder_combine_steel.getUnlocalizedName()); + GameRegistry.registerItem(powder_lithium, powder_lithium.getUnlocalizedName()); + GameRegistry.registerItem(powder_lithium_tiny, powder_lithium_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_zirconium, powder_zirconium.getUnlocalizedName()); + GameRegistry.registerItem(powder_sodium, powder_sodium.getUnlocalizedName()); + GameRegistry.registerItem(powder_lignite, powder_lignite.getUnlocalizedName()); + GameRegistry.registerItem(powder_iodine, powder_iodine.getUnlocalizedName()); + GameRegistry.registerItem(powder_thorium, powder_thorium.getUnlocalizedName()); + GameRegistry.registerItem(powder_neodymium, powder_neodymium.getUnlocalizedName()); + GameRegistry.registerItem(powder_neodymium_tiny, powder_neodymium_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_astatine, powder_astatine.getUnlocalizedName()); + GameRegistry.registerItem(powder_caesium, powder_caesium.getUnlocalizedName()); + GameRegistry.registerItem(powder_australium, powder_australium.getUnlocalizedName()); + GameRegistry.registerItem(powder_strontium, powder_strontium.getUnlocalizedName()); + GameRegistry.registerItem(powder_cobalt, powder_cobalt.getUnlocalizedName()); + GameRegistry.registerItem(powder_cobalt_tiny, powder_cobalt_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_bromine, powder_bromine.getUnlocalizedName()); + GameRegistry.registerItem(powder_niobium, powder_niobium.getUnlocalizedName()); + GameRegistry.registerItem(powder_niobium_tiny, powder_niobium_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_tennessine, powder_tennessine.getUnlocalizedName()); + GameRegistry.registerItem(powder_cerium, powder_cerium.getUnlocalizedName()); + GameRegistry.registerItem(powder_cerium_tiny, powder_cerium_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_lanthanium, powder_lanthanium.getUnlocalizedName()); + GameRegistry.registerItem(powder_lanthanium_tiny, powder_lanthanium_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_actinium, powder_actinium.getUnlocalizedName()); + GameRegistry.registerItem(powder_actinium_tiny, powder_actinium_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_boron, powder_boron.getUnlocalizedName()); + GameRegistry.registerItem(powder_boron_tiny, powder_boron_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_asbestos, powder_asbestos.getUnlocalizedName()); + GameRegistry.registerItem(powder_magic, powder_magic.getUnlocalizedName()); + GameRegistry.registerItem(powder_sawdust, powder_sawdust.getUnlocalizedName()); + GameRegistry.registerItem(powder_flux, powder_flux.getUnlocalizedName()); + GameRegistry.registerItem(powder_fertilizer, powder_fertilizer.getUnlocalizedName()); + GameRegistry.registerItem(powder_balefire, powder_balefire.getUnlocalizedName()); + GameRegistry.registerItem(powder_semtex_mix, powder_semtex_mix.getUnlocalizedName()); + GameRegistry.registerItem(powder_desh_mix, powder_desh_mix.getUnlocalizedName()); + GameRegistry.registerItem(powder_desh_ready, powder_desh_ready.getUnlocalizedName()); + GameRegistry.registerItem(powder_desh, powder_desh.getUnlocalizedName()); + GameRegistry.registerItem(powder_nitan_mix, powder_nitan_mix.getUnlocalizedName()); + GameRegistry.registerItem(powder_spark_mix, powder_spark_mix.getUnlocalizedName()); + GameRegistry.registerItem(powder_meteorite, powder_meteorite.getUnlocalizedName()); + GameRegistry.registerItem(powder_meteorite_tiny, powder_meteorite_tiny.getUnlocalizedName()); + GameRegistry.registerItem(powder_euphemium, powder_euphemium.getUnlocalizedName()); + GameRegistry.registerItem(powder_dineutronium, powder_dineutronium.getUnlocalizedName()); + GameRegistry.registerItem(dust, dust.getUnlocalizedName()); + GameRegistry.registerItem(dust_tiny, dust_tiny.getUnlocalizedName()); + GameRegistry.registerItem(fallout, fallout.getUnlocalizedName()); + GameRegistry.registerItem(powder_ash, powder_ash.getUnlocalizedName()); + GameRegistry.registerItem(powder_limestone, powder_limestone.getUnlocalizedName()); + GameRegistry.registerItem(powder_cement, powder_cement.getUnlocalizedName()); + + //Powders + GameRegistry.registerItem(powder_fire, powder_fire.getUnlocalizedName()); + GameRegistry.registerItem(powder_ice, powder_ice.getUnlocalizedName()); + GameRegistry.registerItem(powder_poison, powder_poison.getUnlocalizedName()); + GameRegistry.registerItem(powder_thermite, powder_thermite.getUnlocalizedName()); + GameRegistry.registerItem(powder_power, powder_power.getUnlocalizedName()); + GameRegistry.registerItem(cordite, cordite.getUnlocalizedName()); + GameRegistry.registerItem(ballistite, ballistite.getUnlocalizedName()); + GameRegistry.registerItem(ball_dynamite, ball_dynamite.getUnlocalizedName()); + GameRegistry.registerItem(ball_tnt, ball_tnt.getUnlocalizedName()); + GameRegistry.registerItem(ball_tatb, ball_tatb.getUnlocalizedName()); + GameRegistry.registerItem(ball_resin, ball_resin.getUnlocalizedName()); + GameRegistry.registerItem(ball_fireclay, ball_fireclay.getUnlocalizedName()); + + //Ores + GameRegistry.registerItem(ore_bedrock, ore_bedrock.getUnlocalizedName()); + GameRegistry.registerItem(ore_centrifuged, ore_centrifuged.getUnlocalizedName()); + GameRegistry.registerItem(ore_cleaned, ore_cleaned.getUnlocalizedName()); + GameRegistry.registerItem(ore_separated, ore_separated.getUnlocalizedName()); + GameRegistry.registerItem(ore_purified, ore_purified.getUnlocalizedName()); + GameRegistry.registerItem(ore_nitrated, ore_nitrated.getUnlocalizedName()); + GameRegistry.registerItem(ore_nitrocrystalline, ore_nitrocrystalline.getUnlocalizedName()); + GameRegistry.registerItem(ore_deepcleaned, ore_deepcleaned.getUnlocalizedName()); + GameRegistry.registerItem(ore_seared, ore_seared.getUnlocalizedName()); + GameRegistry.registerItem(ore_enriched, ore_enriched.getUnlocalizedName()); + GameRegistry.registerItem(ore_byproduct, ore_byproduct.getUnlocalizedName()); + GameRegistry.registerItem(bedrock_ore_base, bedrock_ore_base.getUnlocalizedName()); + GameRegistry.registerItem(bedrock_ore, bedrock_ore.getUnlocalizedName()); + GameRegistry.registerItem(bedrock_ore_fragment, bedrock_ore_fragment.getUnlocalizedName()); + + //Crystals + GameRegistry.registerItem(crystal_coal, crystal_coal.getUnlocalizedName()); + GameRegistry.registerItem(crystal_iron, crystal_iron.getUnlocalizedName()); + GameRegistry.registerItem(crystal_gold, crystal_gold.getUnlocalizedName()); + GameRegistry.registerItem(crystal_redstone, crystal_redstone.getUnlocalizedName()); + GameRegistry.registerItem(crystal_lapis, crystal_lapis.getUnlocalizedName()); + GameRegistry.registerItem(crystal_diamond, crystal_diamond.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_schraranium, crystal_schraranium.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_cobalt, crystal_cobalt.getUnlocalizedName()); + GameRegistry.registerItem(crystal_starmetal, crystal_starmetal.getUnlocalizedName()); + GameRegistry.registerItem(crystal_cinnebar, crystal_cinnebar.getUnlocalizedName()); + GameRegistry.registerItem(crystal_trixite, crystal_trixite.getUnlocalizedName()); + GameRegistry.registerItem(crystal_osmiridium, crystal_osmiridium.getUnlocalizedName()); + GameRegistry.registerItem(gem_sodalite, gem_sodalite.getUnlocalizedName()); + GameRegistry.registerItem(gem_tantalium, gem_tantalium.getUnlocalizedName()); + GameRegistry.registerItem(gem_volcanic, gem_volcanic.getUnlocalizedName()); + GameRegistry.registerItem(gem_rad, gem_rad.getUnlocalizedName()); + GameRegistry.registerItem(gem_alexandrite, gem_alexandrite.getUnlocalizedName()); + + //Fragments + GameRegistry.registerItem(fragment_neodymium, fragment_neodymium.getUnlocalizedName()); + GameRegistry.registerItem(fragment_cobalt, fragment_cobalt.getUnlocalizedName()); + GameRegistry.registerItem(fragment_niobium, fragment_niobium.getUnlocalizedName()); + GameRegistry.registerItem(fragment_cerium, fragment_cerium.getUnlocalizedName()); + GameRegistry.registerItem(fragment_lanthanium, fragment_lanthanium.getUnlocalizedName()); + GameRegistry.registerItem(fragment_actinium, fragment_actinium.getUnlocalizedName()); + GameRegistry.registerItem(fragment_boron, fragment_boron.getUnlocalizedName()); + GameRegistry.registerItem(fragment_meteorite, fragment_meteorite.getUnlocalizedName()); + GameRegistry.registerItem(fragment_coltan, fragment_coltan.getUnlocalizedName()); + GameRegistry.registerItem(chunk_ore, chunk_ore.getUnlocalizedName()); + + //Things that look like rotten flesh but aren't + GameRegistry.registerItem(biomass, biomass.getUnlocalizedName()); + GameRegistry.registerItem(biomass_compressed, biomass_compressed.getUnlocalizedName()); + //delicious! + GameRegistry.registerItem(bio_wafer, bio_wafer.getUnlocalizedName()); + + //Nuggets + GameRegistry.registerItem(nugget_uranium, nugget_uranium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_u233, nugget_u233.getUnlocalizedName()); + GameRegistry.registerItem(nugget_u235, nugget_u235.getUnlocalizedName()); + GameRegistry.registerItem(nugget_u238, nugget_u238.getUnlocalizedName()); + GameRegistry.registerItem(nugget_th232, nugget_th232.getUnlocalizedName()); + GameRegistry.registerItem(nugget_plutonium, nugget_plutonium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_pu238, nugget_pu238.getUnlocalizedName()); + GameRegistry.registerItem(nugget_pu239, nugget_pu239.getUnlocalizedName()); + GameRegistry.registerItem(nugget_pu240, nugget_pu240.getUnlocalizedName()); + GameRegistry.registerItem(nugget_pu241, nugget_pu241.getUnlocalizedName()); + GameRegistry.registerItem(nugget_pu_mix, nugget_pu_mix.getUnlocalizedName()); + GameRegistry.registerItem(nugget_am241, nugget_am241.getUnlocalizedName()); + GameRegistry.registerItem(nugget_am242, nugget_am242.getUnlocalizedName()); + GameRegistry.registerItem(nugget_am_mix, nugget_am_mix.getUnlocalizedName()); + GameRegistry.registerItem(nugget_neptunium, nugget_neptunium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_polonium, nugget_polonium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_cobalt, nugget_cobalt.getUnlocalizedName()); + GameRegistry.registerItem(nugget_co60, nugget_co60.getUnlocalizedName()); + GameRegistry.registerItem(nugget_sr90, nugget_sr90.getUnlocalizedName()); + GameRegistry.registerItem(nugget_technetium, nugget_technetium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_au198, nugget_au198.getUnlocalizedName()); + GameRegistry.registerItem(nugget_pb209, nugget_pb209.getUnlocalizedName()); + GameRegistry.registerItem(nugget_ra226, nugget_ra226.getUnlocalizedName()); + GameRegistry.registerItem(nugget_actinium, nugget_actinium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_lead, nugget_lead.getUnlocalizedName()); + GameRegistry.registerItem(nugget_bismuth, nugget_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(nugget_arsenic, nugget_arsenic.getUnlocalizedName()); + GameRegistry.registerItem(nugget_tantalium, nugget_tantalium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_silicon, nugget_silicon.getUnlocalizedName()); + GameRegistry.registerItem(nugget_niobium, nugget_niobium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_beryllium, nugget_beryllium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_schrabidium, nugget_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_solinium, nugget_solinium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_gh336, nugget_gh336.getUnlocalizedName()); + GameRegistry.registerItem(nugget_uranium_fuel, nugget_uranium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(nugget_thorium_fuel, nugget_thorium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(nugget_plutonium_fuel, nugget_plutonium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(nugget_neptunium_fuel, nugget_neptunium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(nugget_mox_fuel, nugget_mox_fuel.getUnlocalizedName()); + GameRegistry.registerItem(nugget_americium_fuel, nugget_americium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(nugget_schrabidium_fuel, nugget_schrabidium_fuel.getUnlocalizedName()); + GameRegistry.registerItem(nugget_hes, nugget_hes.getUnlocalizedName()); + GameRegistry.registerItem(nugget_les, nugget_les.getUnlocalizedName()); + GameRegistry.registerItem(nugget_zirconium, nugget_zirconium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_australium, nugget_australium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_australium_lesser, nugget_australium_lesser.getUnlocalizedName()); + GameRegistry.registerItem(nugget_australium_greater, nugget_australium_greater.getUnlocalizedName()); + GameRegistry.registerItem(nugget_desh, nugget_desh.getUnlocalizedName()); + GameRegistry.registerItem(nugget_euphemium, nugget_euphemium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_dineutronium, nugget_dineutronium.getUnlocalizedName()); + GameRegistry.registerItem(nugget_osmiridium, nugget_osmiridium.getUnlocalizedName()); + + //Plates + GameRegistry.registerItem(plate_iron, plate_iron.getUnlocalizedName()); + GameRegistry.registerItem(plate_gold, plate_gold.getUnlocalizedName()); + GameRegistry.registerItem(plate_titanium, plate_titanium.getUnlocalizedName()); + GameRegistry.registerItem(plate_aluminium, plate_aluminium.getUnlocalizedName()); + GameRegistry.registerItem(plate_steel, plate_steel.getUnlocalizedName()); + GameRegistry.registerItem(plate_lead, plate_lead.getUnlocalizedName()); + GameRegistry.registerItem(plate_copper, plate_copper.getUnlocalizedName()); + GameRegistry.registerItem(plate_advanced_alloy, plate_advanced_alloy.getUnlocalizedName()); + GameRegistry.registerItem(plate_dura_steel, plate_dura_steel.getUnlocalizedName()); + GameRegistry.registerItem(neutron_reflector, neutron_reflector.getUnlocalizedName()); + GameRegistry.registerItem(plate_schrabidium, plate_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(plate_combine_steel, plate_combine_steel.getUnlocalizedName()); + GameRegistry.registerItem(plate_mixed, plate_mixed.getUnlocalizedName()); + GameRegistry.registerItem(plate_gunmetal, plate_gunmetal.getUnlocalizedName()); + GameRegistry.registerItem(plate_weaponsteel, plate_weaponsteel.getUnlocalizedName()); + GameRegistry.registerItem(plate_saturnite, plate_saturnite.getUnlocalizedName()); + GameRegistry.registerItem(plate_paa, plate_paa.getUnlocalizedName()); + GameRegistry.registerItem(plate_polymer, plate_polymer.getUnlocalizedName()); + GameRegistry.registerItem(plate_kevlar, plate_kevlar.getUnlocalizedName()); + GameRegistry.registerItem(plate_dalekanium, plate_dalekanium.getUnlocalizedName()); + GameRegistry.registerItem(plate_desh, plate_desh.getUnlocalizedName()); + GameRegistry.registerItem(plate_bismuth, plate_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(plate_euphemium, plate_euphemium.getUnlocalizedName()); + GameRegistry.registerItem(plate_dineutronium, plate_dineutronium.getUnlocalizedName()); + + //Armor Plates + GameRegistry.registerItem(plate_armor_titanium, plate_armor_titanium.getUnlocalizedName()); + GameRegistry.registerItem(plate_armor_ajr, plate_armor_ajr.getUnlocalizedName()); + GameRegistry.registerItem(plate_armor_hev, plate_armor_hev.getUnlocalizedName()); + GameRegistry.registerItem(plate_armor_lunar, plate_armor_lunar.getUnlocalizedName()); + GameRegistry.registerItem(plate_armor_fau, plate_armor_fau.getUnlocalizedName()); + GameRegistry.registerItem(plate_armor_dnt, plate_armor_dnt.getUnlocalizedName()); + + //Heavy/Cast Plate + GameRegistry.registerItem(plate_cast, plate_cast.getUnlocalizedName()); + GameRegistry.registerItem(plate_welded, plate_welded.getUnlocalizedName()); + GameRegistry.registerItem(shell, shell.getUnlocalizedName()); + GameRegistry.registerItem(pipe, pipe.getUnlocalizedName()); + GameRegistry.registerItem(heavy_component, heavy_component.getUnlocalizedName()); + + //Bolts + GameRegistry.registerItem(bolt, bolt.getUnlocalizedName()); + GameRegistry.registerItem(bolt_spike, bolt_spike.getUnlocalizedName()); + + //Cloth + GameRegistry.registerItem(hazmat_cloth, hazmat_cloth.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_cloth_red, hazmat_cloth_red.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_cloth_grey, hazmat_cloth_grey.getUnlocalizedName()); + GameRegistry.registerItem(asbestos_cloth, asbestos_cloth.getUnlocalizedName()); + GameRegistry.registerItem(rag, rag.getUnlocalizedName()); + GameRegistry.registerItem(rag_damp, rag_damp.getUnlocalizedName()); + GameRegistry.registerItem(rag_piss, rag_piss.getUnlocalizedName()); + GameRegistry.registerItem(filter_coal, filter_coal.getUnlocalizedName()); + + //Wires + GameRegistry.registerItem(wire_fine, wire_fine.getUnlocalizedName()); + GameRegistry.registerItem(wire_dense, wire_dense.getUnlocalizedName()); + + //Parts + GameRegistry.registerItem(coil_copper, coil_copper.getUnlocalizedName()); + GameRegistry.registerItem(coil_copper_torus, coil_copper_torus.getUnlocalizedName()); + GameRegistry.registerItem(coil_advanced_alloy, coil_advanced_alloy.getUnlocalizedName()); + GameRegistry.registerItem(coil_advanced_torus, coil_advanced_torus.getUnlocalizedName()); + GameRegistry.registerItem(coil_gold, coil_gold.getUnlocalizedName()); + GameRegistry.registerItem(coil_gold_torus, coil_gold_torus.getUnlocalizedName()); + GameRegistry.registerItem(coil_tungsten, coil_tungsten.getUnlocalizedName()); + GameRegistry.registerItem(coil_magnetized_tungsten, coil_magnetized_tungsten.getUnlocalizedName()); + GameRegistry.registerItem(safety_fuse, safety_fuse.getUnlocalizedName()); + GameRegistry.registerItem(tank_steel, tank_steel.getUnlocalizedName()); + GameRegistry.registerItem(motor, motor.getUnlocalizedName()); + GameRegistry.registerItem(motor_desh, motor_desh.getUnlocalizedName()); + GameRegistry.registerItem(motor_bismuth, motor_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(centrifuge_element, centrifuge_element.getUnlocalizedName()); + GameRegistry.registerItem(reactor_core, reactor_core.getUnlocalizedName()); + GameRegistry.registerItem(rtg_unit, rtg_unit.getUnlocalizedName()); + GameRegistry.registerItem(levitation_unit, levitation_unit.getUnlocalizedName()); + GameRegistry.registerItem(pipes_steel, pipes_steel.getUnlocalizedName()); + GameRegistry.registerItem(drill_titanium, drill_titanium.getUnlocalizedName()); + GameRegistry.registerItem(photo_panel, photo_panel.getUnlocalizedName()); + GameRegistry.registerItem(chlorine_pinwheel, chlorine_pinwheel.getUnlocalizedName()); + GameRegistry.registerItem(ring_starmetal, ring_starmetal.getUnlocalizedName()); + GameRegistry.registerItem(deuterium_filter, deuterium_filter.getUnlocalizedName()); + GameRegistry.registerItem(chemical_dye, chemical_dye.getUnlocalizedName()); + GameRegistry.registerItem(crayon, crayon.getUnlocalizedName()); + GameRegistry.registerItem(part_generic, part_generic.getUnlocalizedName()); + GameRegistry.registerItem(item_secret, item_secret.getUnlocalizedName()); + GameRegistry.registerItem(ingot_metal, ingot_metal.getUnlocalizedName()); + GameRegistry.registerItem(parts_legendary, parts_legendary.getUnlocalizedName()); + GameRegistry.registerItem(gear_large, gear_large.getUnlocalizedName()); + GameRegistry.registerItem(sawblade, sawblade.getUnlocalizedName()); + GameRegistry.registerItem(part_barrel_light, part_barrel_light.getUnlocalizedName()); + GameRegistry.registerItem(part_barrel_heavy, part_barrel_heavy.getUnlocalizedName()); + GameRegistry.registerItem(part_receiver_light, part_receiver_light.getUnlocalizedName()); + GameRegistry.registerItem(part_receiver_heavy, part_receiver_heavy.getUnlocalizedName()); + GameRegistry.registerItem(part_mechanism, part_mechanism.getUnlocalizedName()); + GameRegistry.registerItem(part_stock, part_stock.getUnlocalizedName()); + GameRegistry.registerItem(part_grip, part_grip.getUnlocalizedName()); + + //Plant Products + GameRegistry.registerItem(plant_item, plant_item.getUnlocalizedName()); + + //Teleporter Parts + //GameRegistry.registerItem(telepad, telepad.getUnlocalizedName()); + GameRegistry.registerItem(entanglement_kit, entanglement_kit.getUnlocalizedName()); + + //AMS Parts + GameRegistry.registerItem(component_limiter, component_limiter.getUnlocalizedName()); + GameRegistry.registerItem(component_emitter, component_emitter.getUnlocalizedName()); + + //Bomb Parts + GameRegistry.registerItem(fins_flat, fins_flat.getUnlocalizedName()); + GameRegistry.registerItem(fins_small_steel, fins_small_steel.getUnlocalizedName()); + GameRegistry.registerItem(fins_big_steel, fins_big_steel.getUnlocalizedName()); + GameRegistry.registerItem(fins_tri_steel, fins_tri_steel.getUnlocalizedName()); + GameRegistry.registerItem(fins_quad_titanium, fins_quad_titanium.getUnlocalizedName()); + GameRegistry.registerItem(sphere_steel, sphere_steel.getUnlocalizedName()); + GameRegistry.registerItem(pedestal_steel, pedestal_steel.getUnlocalizedName()); + GameRegistry.registerItem(dysfunctional_reactor, dysfunctional_reactor.getUnlocalizedName()); + GameRegistry.registerItem(blade_titanium, blade_titanium.getUnlocalizedName()); + GameRegistry.registerItem(blade_tungsten, blade_tungsten.getUnlocalizedName()); + GameRegistry.registerItem(turbine_titanium, turbine_titanium.getUnlocalizedName()); + GameRegistry.registerItem(turbine_tungsten, turbine_tungsten.getUnlocalizedName()); + GameRegistry.registerItem(flywheel_beryllium, flywheel_beryllium.getUnlocalizedName()); + GameRegistry.registerItem(toothpicks, toothpicks.getUnlocalizedName()); + GameRegistry.registerItem(ducttape, ducttape.getUnlocalizedName()); + GameRegistry.registerItem(catalyst_clay, catalyst_clay.getUnlocalizedName()); + GameRegistry.registerItem(missile_assembly, missile_assembly.getUnlocalizedName()); + GameRegistry.registerItem(warhead_generic_small, warhead_generic_small.getUnlocalizedName()); + GameRegistry.registerItem(warhead_generic_medium, warhead_generic_medium.getUnlocalizedName()); + GameRegistry.registerItem(warhead_generic_large, warhead_generic_large.getUnlocalizedName()); + GameRegistry.registerItem(warhead_incendiary_small, warhead_incendiary_small.getUnlocalizedName()); + GameRegistry.registerItem(warhead_incendiary_medium, warhead_incendiary_medium.getUnlocalizedName()); + GameRegistry.registerItem(warhead_incendiary_large, warhead_incendiary_large.getUnlocalizedName()); + GameRegistry.registerItem(warhead_cluster_small, warhead_cluster_small.getUnlocalizedName()); + GameRegistry.registerItem(warhead_cluster_medium, warhead_cluster_medium.getUnlocalizedName()); + GameRegistry.registerItem(warhead_cluster_large, warhead_cluster_large.getUnlocalizedName()); + GameRegistry.registerItem(warhead_buster_small, warhead_buster_small.getUnlocalizedName()); + GameRegistry.registerItem(warhead_buster_medium, warhead_buster_medium.getUnlocalizedName()); + GameRegistry.registerItem(warhead_buster_large, warhead_buster_large.getUnlocalizedName()); + GameRegistry.registerItem(warhead_nuclear, warhead_nuclear.getUnlocalizedName()); + GameRegistry.registerItem(warhead_mirv, warhead_mirv.getUnlocalizedName()); + GameRegistry.registerItem(warhead_volcano, warhead_volcano.getUnlocalizedName()); + GameRegistry.registerItem(fuel_tank_small, fuel_tank_small.getUnlocalizedName()); + GameRegistry.registerItem(fuel_tank_medium, fuel_tank_medium.getUnlocalizedName()); + GameRegistry.registerItem(fuel_tank_large, fuel_tank_large.getUnlocalizedName()); + GameRegistry.registerItem(thruster_small, thruster_small.getUnlocalizedName()); + GameRegistry.registerItem(thruster_medium, thruster_medium.getUnlocalizedName()); + GameRegistry.registerItem(thruster_large, thruster_large.getUnlocalizedName()); + GameRegistry.registerItem(thruster_nuclear, thruster_nuclear.getUnlocalizedName()); + GameRegistry.registerItem(sat_base, sat_base.getUnlocalizedName()); + GameRegistry.registerItem(sat_head_mapper, sat_head_mapper.getUnlocalizedName()); + GameRegistry.registerItem(sat_head_scanner, sat_head_scanner.getUnlocalizedName()); + GameRegistry.registerItem(sat_head_radar, sat_head_radar.getUnlocalizedName()); + GameRegistry.registerItem(sat_head_laser, sat_head_laser.getUnlocalizedName()); + GameRegistry.registerItem(sat_head_resonator, sat_head_resonator.getUnlocalizedName()); + GameRegistry.registerItem(seg_10, seg_10.getUnlocalizedName()); + GameRegistry.registerItem(seg_15, seg_15.getUnlocalizedName()); + GameRegistry.registerItem(seg_20, seg_20.getUnlocalizedName()); + + //Chopper parts + GameRegistry.registerItem(chopper_head, chopper_head.getUnlocalizedName()); + GameRegistry.registerItem(chopper_gun, chopper_gun.getUnlocalizedName()); + GameRegistry.registerItem(chopper_torso, chopper_torso.getUnlocalizedName()); + GameRegistry.registerItem(chopper_tail, chopper_tail.getUnlocalizedName()); + GameRegistry.registerItem(chopper_wing, chopper_wing.getUnlocalizedName()); + GameRegistry.registerItem(chopper_blades, chopper_blades.getUnlocalizedName()); + GameRegistry.registerItem(combine_scrap, combine_scrap.getUnlocalizedName()); + + //Hammer Parts + GameRegistry.registerItem(shimmer_head, shimmer_head.getUnlocalizedName()); + GameRegistry.registerItem(shimmer_axe_head, shimmer_axe_head.getUnlocalizedName()); + GameRegistry.registerItem(shimmer_handle, shimmer_handle.getUnlocalizedName()); + + //Circuits + GameRegistry.registerItem(circuit, circuit.getUnlocalizedName()); + GameRegistry.registerItem(crt_display, crt_display.getUnlocalizedName()); + GameRegistry.registerItem(circuit_star_piece, circuit_star_piece.getUnlocalizedName()); + GameRegistry.registerItem(circuit_star_component, circuit_star_component.getUnlocalizedName()); + GameRegistry.registerItem(circuit_star, circuit_star.getUnlocalizedName()); + + //Casing + GameRegistry.registerItem(casing, casing.getUnlocalizedName()); + + //Bullet Assemblies + GameRegistry.registerItem(assembly_nuke, assembly_nuke.getUnlocalizedName()); + + //Wiring + GameRegistry.registerItem(wiring_red_copper, wiring_red_copper.getUnlocalizedName()); + + //Flame War in a Box + GameRegistry.registerItem(flame_pony, flame_pony.getUnlocalizedName()); + GameRegistry.registerItem(flame_conspiracy, flame_conspiracy.getUnlocalizedName()); + GameRegistry.registerItem(flame_politics, flame_politics.getUnlocalizedName()); + GameRegistry.registerItem(flame_opinion, flame_opinion.getUnlocalizedName()); + + //Pellets + GameRegistry.registerItem(pellet_rtg_radium, pellet_rtg_radium.getUnlocalizedName()); + GameRegistry.registerItem(pellet_rtg_weak, pellet_rtg_weak.getUnlocalizedName()); + GameRegistry.registerItem(pellet_rtg, pellet_rtg.getUnlocalizedName()); + GameRegistry.registerItem(pellet_rtg_strontium, pellet_rtg_strontium.getUnlocalizedName()); + GameRegistry.registerItem(pellet_rtg_cobalt, pellet_rtg_cobalt.getUnlocalizedName()); + GameRegistry.registerItem(pellet_rtg_actinium, pellet_rtg_actinium.getUnlocalizedName()); + GameRegistry.registerItem(pellet_rtg_polonium, pellet_rtg_polonium.getUnlocalizedName()); + GameRegistry.registerItem(pellet_rtg_americium, pellet_rtg_americium.getUnlocalizedName()); + GameRegistry.registerItem(pellet_rtg_gold, pellet_rtg_gold.getUnlocalizedName()); + GameRegistry.registerItem(pellet_rtg_lead, pellet_rtg_lead.getUnlocalizedName()); + GameRegistry.registerItem(pellet_rtg_depleted, pellet_rtg_depleted.getUnlocalizedName()); + GameRegistry.registerItem(tritium_deuterium_cake, tritium_deuterium_cake.getUnlocalizedName()); + GameRegistry.registerItem(pellet_cluster, pellet_cluster.getUnlocalizedName()); + GameRegistry.registerItem(pellet_buckshot, pellet_buckshot.getUnlocalizedName()); + GameRegistry.registerItem(pellet_charged, pellet_charged.getUnlocalizedName()); + GameRegistry.registerItem(pellet_gas, pellet_gas.getUnlocalizedName()); + GameRegistry.registerItem(magnetron, magnetron.getUnlocalizedName()); + + //Engine Pieces + GameRegistry.registerItem(piston_selenium, piston_selenium.getUnlocalizedName()); + GameRegistry.registerItem(piston_set, piston_set.getUnlocalizedName()); + GameRegistry.registerItem(drillbit, drillbit.getUnlocalizedName()); + + //Cells + GameRegistry.registerItem(cell_empty, cell_empty.getUnlocalizedName()); + GameRegistry.registerItem(cell_uf6, cell_uf6.getUnlocalizedName()); + GameRegistry.registerItem(cell_puf6, cell_puf6.getUnlocalizedName()); + GameRegistry.registerItem(cell_deuterium, cell_deuterium.getUnlocalizedName()); + GameRegistry.registerItem(cell_tritium, cell_tritium.getUnlocalizedName()); + GameRegistry.registerItem(cell_sas3, cell_sas3.getUnlocalizedName()); + GameRegistry.registerItem(cell_antimatter, cell_antimatter.getUnlocalizedName()); + GameRegistry.registerItem(cell_anti_schrabidium, cell_anti_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(cell_balefire, cell_balefire.getUnlocalizedName()); + + //DEMON CORE + GameRegistry.registerItem(demon_core_open, demon_core_open.getUnlocalizedName()); + GameRegistry.registerItem(demon_core_closed, demon_core_closed.getUnlocalizedName()); + + //PA + GameRegistry.registerItem(pa_coil, pa_coil.getUnlocalizedName()); + + //Particle Containers + GameRegistry.registerItem(particle_empty, particle_empty.getUnlocalizedName()); + GameRegistry.registerItem(particle_hydrogen, particle_hydrogen.getUnlocalizedName()); + GameRegistry.registerItem(particle_copper, particle_copper.getUnlocalizedName()); + GameRegistry.registerItem(particle_lead, particle_lead.getUnlocalizedName()); + GameRegistry.registerItem(particle_aproton, particle_aproton.getUnlocalizedName()); + GameRegistry.registerItem(particle_aelectron, particle_aelectron.getUnlocalizedName()); + GameRegistry.registerItem(particle_amat, particle_amat.getUnlocalizedName()); + GameRegistry.registerItem(particle_aschrab, particle_aschrab.getUnlocalizedName()); + GameRegistry.registerItem(particle_higgs, particle_higgs.getUnlocalizedName()); + GameRegistry.registerItem(particle_muon, particle_muon.getUnlocalizedName()); + GameRegistry.registerItem(particle_tachyon, particle_tachyon.getUnlocalizedName()); + GameRegistry.registerItem(particle_strange, particle_strange.getUnlocalizedName()); + GameRegistry.registerItem(particle_dark, particle_dark.getUnlocalizedName()); + GameRegistry.registerItem(particle_sparkticle, particle_sparkticle.getUnlocalizedName()); + GameRegistry.registerItem(particle_digamma, particle_digamma.getUnlocalizedName()); + GameRegistry.registerItem(particle_lutece, particle_lutece.getUnlocalizedName()); + + //Singularities, black holes and other cosmic horrors + GameRegistry.registerItem(singularity, singularity.getUnlocalizedName()); + GameRegistry.registerItem(singularity_counter_resonant, singularity_counter_resonant.getUnlocalizedName()); + GameRegistry.registerItem(singularity_super_heated, singularity_super_heated.getUnlocalizedName()); + GameRegistry.registerItem(black_hole, black_hole.getUnlocalizedName()); + GameRegistry.registerItem(singularity_spark, singularity_spark.getUnlocalizedName()); + GameRegistry.registerItem(crystal_xen, crystal_xen.getUnlocalizedName()); + GameRegistry.registerItem(pellet_antimatter, pellet_antimatter.getUnlocalizedName()); + + //Infinite Tanks + GameRegistry.registerItem(inf_water, inf_water.getUnlocalizedName()); + GameRegistry.registerItem(inf_water_mk2, inf_water_mk2.getUnlocalizedName()); + + //Canisters + GameRegistry.registerItem(fuel_additive, fuel_additive.getUnlocalizedName()); + GameRegistry.registerItem(canister_empty, canister_empty.getUnlocalizedName()); + GameRegistry.registerItem(canister_full, canister_full.getUnlocalizedName()); + GameRegistry.registerItem(canister_napalm, canister_napalm.getUnlocalizedName()); + + //Gas Tanks + GameRegistry.registerItem(gas_empty, gas_empty.getUnlocalizedName()); + GameRegistry.registerItem(gas_full, gas_full.getUnlocalizedName()); + + //Universal Tank + GameRegistry.registerItem(fluid_tank_empty, fluid_tank_empty.getUnlocalizedName()); + GameRegistry.registerItem(fluid_tank_full, fluid_tank_full.getUnlocalizedName()); + GameRegistry.registerItem(fluid_tank_lead_empty, fluid_tank_lead_empty.getUnlocalizedName()); + GameRegistry.registerItem(fluid_tank_lead_full, fluid_tank_lead_full.getUnlocalizedName()); + GameRegistry.registerItem(fluid_barrel_empty, fluid_barrel_empty.getUnlocalizedName()); + GameRegistry.registerItem(fluid_barrel_full, fluid_barrel_full.getUnlocalizedName()); + GameRegistry.registerItem(fluid_barrel_infinite, fluid_barrel_infinite.getUnlocalizedName()); + + //Pipette + GameRegistry.registerItem(pipette, pipette.getUnlocalizedName()); + GameRegistry.registerItem(pipette_boron, pipette_boron.getUnlocalizedName()); + GameRegistry.registerItem(pipette_laboratory, pipette_laboratory.getUnlocalizedName()); + + //Siphon + GameRegistry.registerItem(siphon, siphon.getUnlocalizedName()); + + //Batteries + GameRegistry.registerItem(battery_generic, battery_generic.getUnlocalizedName()); + GameRegistry.registerItem(battery_red_cell, battery_red_cell.getUnlocalizedName()); + GameRegistry.registerItem(battery_red_cell_6, battery_red_cell_6.getUnlocalizedName()); + GameRegistry.registerItem(battery_red_cell_24, battery_red_cell_24.getUnlocalizedName()); + GameRegistry.registerItem(battery_advanced, battery_advanced.getUnlocalizedName()); + GameRegistry.registerItem(battery_advanced_cell, battery_advanced_cell.getUnlocalizedName()); + GameRegistry.registerItem(battery_advanced_cell_4, battery_advanced_cell_4.getUnlocalizedName()); + GameRegistry.registerItem(battery_advanced_cell_12, battery_advanced_cell_12.getUnlocalizedName()); + GameRegistry.registerItem(battery_lithium, battery_lithium.getUnlocalizedName()); + GameRegistry.registerItem(battery_lithium_cell, battery_lithium_cell.getUnlocalizedName()); + GameRegistry.registerItem(battery_lithium_cell_3, battery_lithium_cell_3.getUnlocalizedName()); + GameRegistry.registerItem(battery_lithium_cell_6, battery_lithium_cell_6.getUnlocalizedName()); + GameRegistry.registerItem(battery_schrabidium, battery_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(battery_schrabidium_cell, battery_schrabidium_cell.getUnlocalizedName()); + GameRegistry.registerItem(battery_schrabidium_cell_2, battery_schrabidium_cell_2.getUnlocalizedName()); + GameRegistry.registerItem(battery_schrabidium_cell_4, battery_schrabidium_cell_4.getUnlocalizedName()); + GameRegistry.registerItem(battery_spark, battery_spark.getUnlocalizedName()); + GameRegistry.registerItem(battery_trixite, battery_trixite.getUnlocalizedName()); + GameRegistry.registerItem(battery_spark_cell_6, battery_spark_cell_6.getUnlocalizedName()); + GameRegistry.registerItem(battery_spark_cell_25, battery_spark_cell_25.getUnlocalizedName()); + GameRegistry.registerItem(battery_spark_cell_100, battery_spark_cell_100.getUnlocalizedName()); + GameRegistry.registerItem(battery_spark_cell_1000, battery_spark_cell_1000.getUnlocalizedName()); + GameRegistry.registerItem(battery_spark_cell_2500, battery_spark_cell_2500.getUnlocalizedName()); + GameRegistry.registerItem(battery_spark_cell_10000, battery_spark_cell_10000.getUnlocalizedName()); + GameRegistry.registerItem(battery_spark_cell_power, battery_spark_cell_power.getUnlocalizedName()); + GameRegistry.registerItem(cube_power, cube_power.getUnlocalizedName()); + GameRegistry.registerItem(battery_creative, battery_creative.getUnlocalizedName()); + GameRegistry.registerItem(battery_potato, battery_potato.getUnlocalizedName()); + GameRegistry.registerItem(battery_potatos, battery_potatos.getUnlocalizedName()); + GameRegistry.registerItem(battery_sc_uranium, battery_sc_uranium.getUnlocalizedName()); + GameRegistry.registerItem(battery_sc_technetium, battery_sc_technetium.getUnlocalizedName()); + GameRegistry.registerItem(battery_sc_plutonium, battery_sc_plutonium.getUnlocalizedName()); + GameRegistry.registerItem(battery_sc_polonium, battery_sc_polonium.getUnlocalizedName()); + GameRegistry.registerItem(battery_sc_gold, battery_sc_gold.getUnlocalizedName()); + GameRegistry.registerItem(battery_sc_lead, battery_sc_lead.getUnlocalizedName()); + GameRegistry.registerItem(battery_sc_americium, battery_sc_americium.getUnlocalizedName()); + GameRegistry.registerItem(hev_battery, hev_battery.getUnlocalizedName()); + GameRegistry.registerItem(fusion_core, fusion_core.getUnlocalizedName()); + GameRegistry.registerItem(energy_core, energy_core.getUnlocalizedName()); + GameRegistry.registerItem(fusion_core_infinite, fusion_core_infinite.getUnlocalizedName()); + + //Folders + GameRegistry.registerItem(template_folder, template_folder.getUnlocalizedName()); + GameRegistry.registerItem(journal_pip, journal_pip.getUnlocalizedName()); + GameRegistry.registerItem(journal_bj, journal_bj.getUnlocalizedName()); + GameRegistry.registerItem(journal_silver, journal_silver.getUnlocalizedName()); + GameRegistry.registerItem(bobmazon, bobmazon.getUnlocalizedName()); + GameRegistry.registerItem(bobmazon_hidden, bobmazon_hidden.getUnlocalizedName()); + + //Hydraulic Press Stamps + GameRegistry.registerItem(stamp_stone_flat, stamp_stone_flat.getUnlocalizedName()); + GameRegistry.registerItem(stamp_stone_plate, stamp_stone_plate.getUnlocalizedName()); + GameRegistry.registerItem(stamp_stone_wire, stamp_stone_wire.getUnlocalizedName()); + GameRegistry.registerItem(stamp_stone_circuit, stamp_stone_circuit.getUnlocalizedName()); + GameRegistry.registerItem(stamp_iron_flat, stamp_iron_flat.getUnlocalizedName()); + GameRegistry.registerItem(stamp_iron_plate, stamp_iron_plate.getUnlocalizedName()); + GameRegistry.registerItem(stamp_iron_wire, stamp_iron_wire.getUnlocalizedName()); + GameRegistry.registerItem(stamp_iron_circuit, stamp_iron_circuit.getUnlocalizedName()); + GameRegistry.registerItem(stamp_steel_flat, stamp_steel_flat.getUnlocalizedName()); + GameRegistry.registerItem(stamp_steel_plate, stamp_steel_plate.getUnlocalizedName()); + GameRegistry.registerItem(stamp_steel_wire, stamp_steel_wire.getUnlocalizedName()); + GameRegistry.registerItem(stamp_steel_circuit, stamp_steel_circuit.getUnlocalizedName()); + GameRegistry.registerItem(stamp_titanium_flat, stamp_titanium_flat.getUnlocalizedName()); + GameRegistry.registerItem(stamp_titanium_plate, stamp_titanium_plate.getUnlocalizedName()); + GameRegistry.registerItem(stamp_titanium_wire, stamp_titanium_wire.getUnlocalizedName()); + GameRegistry.registerItem(stamp_titanium_circuit, stamp_titanium_circuit.getUnlocalizedName()); + GameRegistry.registerItem(stamp_obsidian_flat, stamp_obsidian_flat.getUnlocalizedName()); + GameRegistry.registerItem(stamp_obsidian_plate, stamp_obsidian_plate.getUnlocalizedName()); + GameRegistry.registerItem(stamp_obsidian_wire, stamp_obsidian_wire.getUnlocalizedName()); + GameRegistry.registerItem(stamp_obsidian_circuit, stamp_obsidian_circuit.getUnlocalizedName()); + GameRegistry.registerItem(stamp_desh_flat, stamp_desh_flat.getUnlocalizedName()); + GameRegistry.registerItem(stamp_desh_plate, stamp_desh_plate.getUnlocalizedName()); + GameRegistry.registerItem(stamp_desh_wire, stamp_desh_wire.getUnlocalizedName()); + GameRegistry.registerItem(stamp_desh_circuit, stamp_desh_circuit.getUnlocalizedName()); + GameRegistry.registerItem(stamp_357, stamp_357.getUnlocalizedName()); + GameRegistry.registerItem(stamp_44, stamp_44.getUnlocalizedName()); + GameRegistry.registerItem(stamp_9, stamp_9.getUnlocalizedName()); + GameRegistry.registerItem(stamp_50, stamp_50.getUnlocalizedName()); + + GameRegistry.registerItem(stamp_desh_357, stamp_desh_357.getUnlocalizedName()); + GameRegistry.registerItem(stamp_desh_44, stamp_desh_44.getUnlocalizedName()); + GameRegistry.registerItem(stamp_desh_9, stamp_desh_9.getUnlocalizedName()); + GameRegistry.registerItem(stamp_desh_50, stamp_desh_50.getUnlocalizedName()); + GameRegistry.registerItem(stamp_book, stamp_book.getUnlocalizedName()); + + //Molds + GameRegistry.registerItem(mold_base, mold_base.getUnlocalizedName()); + GameRegistry.registerItem(mold, mold.getUnlocalizedName()); + GameRegistry.registerItem(scraps, scraps.getUnlocalizedName()); + + //Machine Upgrades + GameRegistry.registerItem(upgrade_muffler, upgrade_muffler.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_template, upgrade_template.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_speed_1, upgrade_speed_1.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_speed_2, upgrade_speed_2.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_speed_3, upgrade_speed_3.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_effect_1, upgrade_effect_1.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_effect_2, upgrade_effect_2.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_effect_3, upgrade_effect_3.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_power_1, upgrade_power_1.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_power_2, upgrade_power_2.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_power_3, upgrade_power_3.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_fortune_1, upgrade_fortune_1.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_fortune_2, upgrade_fortune_2.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_fortune_3, upgrade_fortune_3.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_afterburn_1, upgrade_afterburn_1.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_afterburn_2, upgrade_afterburn_2.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_afterburn_3, upgrade_afterburn_3.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_overdrive_1, upgrade_overdrive_1.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_overdrive_2, upgrade_overdrive_2.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_overdrive_3, upgrade_overdrive_3.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_radius, upgrade_radius.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_health, upgrade_health.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_smelter, upgrade_smelter.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_shredder, upgrade_shredder.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_centrifuge, upgrade_centrifuge.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_crystallizer, upgrade_crystallizer.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_nullifier, upgrade_nullifier.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_screm, upgrade_screm.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_gc_speed, upgrade_gc_speed.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_5g, upgrade_5g.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_stack, upgrade_stack.getUnlocalizedName()); + GameRegistry.registerItem(upgrade_ejector, upgrade_ejector.getUnlocalizedName()); + + //Machine Templates + GameRegistry.registerItem(siren_track, siren_track.getUnlocalizedName()); + GameRegistry.registerItem(fluid_identifier, fluid_identifier.getUnlocalizedName()); + GameRegistry.registerItem(fluid_identifier_multi, fluid_identifier_multi.getUnlocalizedName()); + GameRegistry.registerItem(fluid_icon, fluid_icon.getUnlocalizedName()); + GameRegistry.registerItem(fluid_duct, fluid_duct.getUnlocalizedName()); + GameRegistry.registerItem(assembly_template, assembly_template.getUnlocalizedName()); + GameRegistry.registerItem(chemistry_template, chemistry_template.getUnlocalizedName()); + GameRegistry.registerItem(chemistry_icon, chemistry_icon.getUnlocalizedName()); + GameRegistry.registerItem(crucible_template, crucible_template.getUnlocalizedName()); + + //Machine Items + GameRegistry.registerItem(fuse, fuse.getUnlocalizedName()); + GameRegistry.registerItem(redcoil_capacitor, redcoil_capacitor.getUnlocalizedName()); + GameRegistry.registerItem(euphemium_capacitor, euphemium_capacitor.getUnlocalizedName()); + GameRegistry.registerItem(screwdriver, screwdriver.getUnlocalizedName()); + GameRegistry.registerItem(screwdriver_desh, screwdriver_desh.getUnlocalizedName()); + GameRegistry.registerItem(hand_drill, hand_drill.getUnlocalizedName()); + GameRegistry.registerItem(hand_drill_desh, hand_drill_desh.getUnlocalizedName()); + GameRegistry.registerItem(chemistry_set, chemistry_set.getUnlocalizedName()); + GameRegistry.registerItem(chemistry_set_boron, chemistry_set_boron.getUnlocalizedName()); + GameRegistry.registerItem(blowtorch, blowtorch.getUnlocalizedName()); + GameRegistry.registerItem(acetylene_torch, acetylene_torch.getUnlocalizedName()); + GameRegistry.registerItem(boltgun, boltgun.getUnlocalizedName()); + GameRegistry.registerItem(overfuse, overfuse.getUnlocalizedName()); + GameRegistry.registerItem(arc_electrode, arc_electrode.getUnlocalizedName()); + GameRegistry.registerItem(arc_electrode_burnt, arc_electrode_burnt.getUnlocalizedName()); + + //Particle Collider Fuel + GameRegistry.registerItem(part_lithium, part_lithium.getUnlocalizedName()); + GameRegistry.registerItem(part_beryllium, part_beryllium.getUnlocalizedName()); + GameRegistry.registerItem(part_carbon, part_carbon.getUnlocalizedName()); + GameRegistry.registerItem(part_copper, part_copper.getUnlocalizedName()); + GameRegistry.registerItem(part_plutonium, part_plutonium.getUnlocalizedName()); + + //FEL laser crystals + GameRegistry.registerItem(laser_crystal_co2, laser_crystal_co2.getUnlocalizedName()); + GameRegistry.registerItem(laser_crystal_bismuth, laser_crystal_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(laser_crystal_cmb, laser_crystal_cmb.getUnlocalizedName()); + GameRegistry.registerItem(laser_crystal_dnt, laser_crystal_dnt.getUnlocalizedName()); + GameRegistry.registerItem(laser_crystal_digamma, laser_crystal_digamma.getUnlocalizedName()); + + //Catalyst Rune Sigils + GameRegistry.registerItem(rune_blank, rune_blank.getUnlocalizedName()); + GameRegistry.registerItem(rune_isa, rune_isa.getUnlocalizedName()); + GameRegistry.registerItem(rune_dagaz, rune_dagaz.getUnlocalizedName()); + GameRegistry.registerItem(rune_hagalaz, rune_hagalaz.getUnlocalizedName()); + GameRegistry.registerItem(rune_jera, rune_jera.getUnlocalizedName()); + GameRegistry.registerItem(rune_thurisaz, rune_thurisaz.getUnlocalizedName()); + + //AMS Catalysts + GameRegistry.registerItem(ams_catalyst_blank, ams_catalyst_blank.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_aluminium, ams_catalyst_aluminium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_beryllium, ams_catalyst_beryllium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_caesium, ams_catalyst_caesium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_cerium, ams_catalyst_cerium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_cobalt, ams_catalyst_cobalt.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_copper, ams_catalyst_copper.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_euphemium, ams_catalyst_euphemium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_dineutronium, ams_catalyst_dineutronium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_iron, ams_catalyst_iron.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_lithium, ams_catalyst_lithium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_niobium, ams_catalyst_niobium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_schrabidium, ams_catalyst_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_strontium, ams_catalyst_strontium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_thorium, ams_catalyst_thorium.getUnlocalizedName()); + GameRegistry.registerItem(ams_catalyst_tungsten, ams_catalyst_tungsten.getUnlocalizedName()); + + //Shredder Blades + GameRegistry.registerItem(blades_steel, blades_steel.getUnlocalizedName()); + GameRegistry.registerItem(blades_titanium, blades_titanium.getUnlocalizedName()); + GameRegistry.registerItem(blades_advanced_alloy, blades_advanced_alloy.getUnlocalizedName()); + GameRegistry.registerItem(blades_desh, blades_desh.getUnlocalizedName()); + + //Generator Stuff + GameRegistry.registerItem(thermo_element, thermo_element.getUnlocalizedName()); + GameRegistry.registerItem(catalytic_converter, catalytic_converter.getUnlocalizedName()); + + //AMS Components + GameRegistry.registerItem(ams_focus_blank, ams_focus_blank.getUnlocalizedName()); + GameRegistry.registerItem(ams_focus_limiter, ams_focus_limiter.getUnlocalizedName()); + GameRegistry.registerItem(ams_focus_booster, ams_focus_booster.getUnlocalizedName()); + GameRegistry.registerItem(ams_muzzle, ams_muzzle.getUnlocalizedName()); + GameRegistry.registerItem(ams_lens, ams_lens.getUnlocalizedName()); + GameRegistry.registerItem(ams_core_sing, ams_core_sing.getUnlocalizedName()); + GameRegistry.registerItem(ams_core_wormhole, ams_core_wormhole.getUnlocalizedName()); + GameRegistry.registerItem(ams_core_eyeofharmony, ams_core_eyeofharmony.getUnlocalizedName()); + GameRegistry.registerItem(ams_core_thingy, ams_core_thingy.getUnlocalizedName()); + + //Fusion Shields + GameRegistry.registerItem(fusion_shield_tungsten, fusion_shield_tungsten.getUnlocalizedName()); + GameRegistry.registerItem(fusion_shield_desh, fusion_shield_desh.getUnlocalizedName()); + GameRegistry.registerItem(fusion_shield_chlorophyte, fusion_shield_chlorophyte.getUnlocalizedName()); + GameRegistry.registerItem(fusion_shield_vaporwave, fusion_shield_vaporwave.getUnlocalizedName()); + + //Breeding Rods + GameRegistry.registerItem(rod_empty, rod_empty.getUnlocalizedName()); + GameRegistry.registerItem(rod, rod.getUnlocalizedName()); + GameRegistry.registerItem(rod_dual_empty, rod_dual_empty.getUnlocalizedName()); + GameRegistry.registerItem(rod_dual, rod_dual.getUnlocalizedName()); + GameRegistry.registerItem(rod_quad_empty, rod_quad_empty.getUnlocalizedName()); + GameRegistry.registerItem(rod_quad, rod_quad.getUnlocalizedName()); + + //ZIRNOX parts + GameRegistry.registerItem(rod_zirnox_empty, rod_zirnox_empty.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_natural_uranium_fuel, rod_zirnox_natural_uranium_fuel.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_uranium_fuel, rod_zirnox_uranium_fuel.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_th232, rod_zirnox_th232.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_thorium_fuel, rod_zirnox_thorium_fuel.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_mox_fuel, rod_zirnox_mox_fuel.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_plutonium_fuel, rod_zirnox_plutonium_fuel.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_u233_fuel, rod_zirnox_u233_fuel.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_u235_fuel, rod_zirnox_u235_fuel.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_les_fuel, rod_zirnox_les_fuel.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_lithium, rod_zirnox_lithium.getUnlocalizedName()); + GameRegistry.registerItem(rod_zirnox_tritium, rod_zirnox_tritium.getUnlocalizedName()); + //GameRegistry.registerItem(rod_zirnox_zfb_mox, rod_zirnox_zfb_mox.getUnlocalizedName()); + GameRegistry.registerItem(rod_zirnox, rod_zirnox.getUnlocalizedName()); + + GameRegistry.registerItem(rod_zirnox_natural_uranium_fuel_depleted, rod_zirnox_natural_uranium_fuel_depleted.getUnlocalizedName()); + GameRegistry.registerItem(rod_zirnox_uranium_fuel_depleted, rod_zirnox_uranium_fuel_depleted.getUnlocalizedName()); + GameRegistry.registerItem(rod_zirnox_thorium_fuel_depleted, rod_zirnox_thorium_fuel_depleted.getUnlocalizedName()); + GameRegistry.registerItem(rod_zirnox_mox_fuel_depleted, rod_zirnox_mox_fuel_depleted.getUnlocalizedName()); + GameRegistry.registerItem(rod_zirnox_plutonium_fuel_depleted, rod_zirnox_plutonium_fuel_depleted.getUnlocalizedName()); + GameRegistry.registerItem(rod_zirnox_u233_fuel_depleted, rod_zirnox_u233_fuel_depleted.getUnlocalizedName()); + GameRegistry.registerItem(rod_zirnox_u235_fuel_depleted, rod_zirnox_u235_fuel_depleted.getUnlocalizedName()); + GameRegistry.registerItem(rod_zirnox_les_fuel_depleted, rod_zirnox_les_fuel_depleted.getUnlocalizedName()); + GameRegistry.registerItem(rod_zirnox_zfb_mox_depleted, rod_zirnox_zfb_mox_depleted.getUnlocalizedName()); + + //Depleted Fuel + GameRegistry.registerItem(waste_natural_uranium, waste_natural_uranium.getUnlocalizedName()); + GameRegistry.registerItem(waste_uranium, waste_uranium.getUnlocalizedName()); + GameRegistry.registerItem(waste_thorium, waste_thorium.getUnlocalizedName()); + GameRegistry.registerItem(waste_mox, waste_mox.getUnlocalizedName()); + GameRegistry.registerItem(waste_plutonium, waste_plutonium.getUnlocalizedName()); + GameRegistry.registerItem(waste_u233, waste_u233.getUnlocalizedName()); + GameRegistry.registerItem(waste_u235, waste_u235.getUnlocalizedName()); + GameRegistry.registerItem(waste_schrabidium, waste_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(waste_zfb_mox, waste_zfb_mox.getUnlocalizedName()); + + GameRegistry.registerItem(waste_plate_u233, waste_plate_u233.getUnlocalizedName()); + GameRegistry.registerItem(waste_plate_u235, waste_plate_u235.getUnlocalizedName()); + GameRegistry.registerItem(waste_plate_mox, waste_plate_mox.getUnlocalizedName()); + GameRegistry.registerItem(waste_plate_pu239, waste_plate_pu239.getUnlocalizedName()); + GameRegistry.registerItem(waste_plate_ra226be, waste_plate_ra226be.getUnlocalizedName()); + GameRegistry.registerItem(waste_plate_sa326, waste_plate_sa326.getUnlocalizedName()); + GameRegistry.registerItem(waste_plate_pu238be, waste_plate_pu238be.getUnlocalizedName()); + + //Pile parts + GameRegistry.registerItem(pile_rod_uranium, pile_rod_uranium.getUnlocalizedName()); + GameRegistry.registerItem(pile_rod_pu239, pile_rod_pu239.getUnlocalizedName()); + GameRegistry.registerItem(pile_rod_plutonium, pile_rod_plutonium.getUnlocalizedName()); + GameRegistry.registerItem(pile_rod_source, pile_rod_source.getUnlocalizedName()); + GameRegistry.registerItem(pile_rod_boron, pile_rod_boron.getUnlocalizedName()); + GameRegistry.registerItem(pile_rod_lithium, pile_rod_lithium.getUnlocalizedName()); + GameRegistry.registerItem(pile_rod_detector, pile_rod_detector.getUnlocalizedName()); + + //Plate Fuels + GameRegistry.registerItem(plate_fuel_u233, plate_fuel_u233.getUnlocalizedName()); + GameRegistry.registerItem(plate_fuel_u235, plate_fuel_u235.getUnlocalizedName()); + GameRegistry.registerItem(plate_fuel_mox, plate_fuel_mox.getUnlocalizedName()); + GameRegistry.registerItem(plate_fuel_pu239, plate_fuel_pu239.getUnlocalizedName()); + GameRegistry.registerItem(plate_fuel_sa326, plate_fuel_sa326.getUnlocalizedName()); + GameRegistry.registerItem(plate_fuel_ra226be, plate_fuel_ra226be.getUnlocalizedName()); + GameRegistry.registerItem(plate_fuel_pu238be, plate_fuel_pu238be.getUnlocalizedName()); + + //PWR Parts + GameRegistry.registerItem(pwr_fuel, pwr_fuel.getUnlocalizedName()); + GameRegistry.registerItem(pwr_fuel_hot, pwr_fuel_hot.getUnlocalizedName()); + GameRegistry.registerItem(pwr_fuel_depleted, pwr_fuel_depleted.getUnlocalizedName()); + + //RBMK parts + GameRegistry.registerItem(rbmk_lid, rbmk_lid.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_lid_glass, rbmk_lid_glass.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_empty, rbmk_fuel_empty.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_ueu, rbmk_fuel_ueu.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_meu, rbmk_fuel_meu.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_heu233, rbmk_fuel_heu233.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_heu235, rbmk_fuel_heu235.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_thmeu, rbmk_fuel_thmeu.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_lep, rbmk_fuel_lep.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_mep, rbmk_fuel_mep.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_hep239, rbmk_fuel_hep239.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_hep241, rbmk_fuel_hep241.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_lea, rbmk_fuel_lea.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_mea, rbmk_fuel_mea.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_hea241, rbmk_fuel_hea241.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_hea242, rbmk_fuel_hea242.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_men, rbmk_fuel_men.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_hen, rbmk_fuel_hen.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_mox, rbmk_fuel_mox.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_les, rbmk_fuel_les.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_mes, rbmk_fuel_mes.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_hes, rbmk_fuel_hes.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_leaus, rbmk_fuel_leaus.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_heaus, rbmk_fuel_heaus.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_po210be, rbmk_fuel_po210be.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_ra226be, rbmk_fuel_ra226be.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_pu238be, rbmk_fuel_pu238be.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_balefire_gold, rbmk_fuel_balefire_gold.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_flashlead, rbmk_fuel_flashlead.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_balefire, rbmk_fuel_balefire.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_zfb_bismuth, rbmk_fuel_zfb_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_zfb_pu241, rbmk_fuel_zfb_pu241.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_zfb_am_mix, rbmk_fuel_zfb_am_mix.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_drx, rbmk_fuel_drx.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_fuel_test, rbmk_fuel_test.getUnlocalizedName()); + //GameRegistry.registerItem(rbmk_fuel_curve, rbmk_fuel_curve.getUnlocalizedName()); + + GameRegistry.registerItem(rbmk_pellet_ueu, rbmk_pellet_ueu.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_meu, rbmk_pellet_meu.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_heu233, rbmk_pellet_heu233.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_heu235, rbmk_pellet_heu235.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_thmeu, rbmk_pellet_thmeu.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_lep, rbmk_pellet_lep.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_mep, rbmk_pellet_mep.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_hep239, rbmk_pellet_hep239.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_hep241, rbmk_pellet_hep241.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_lea, rbmk_pellet_lea.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_mea, rbmk_pellet_mea.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_hea241, rbmk_pellet_hea241.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_hea242, rbmk_pellet_hea242.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_men, rbmk_pellet_men.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_hen, rbmk_pellet_hen.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_mox, rbmk_pellet_mox.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_les, rbmk_pellet_les.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_mes, rbmk_pellet_mes.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_hes, rbmk_pellet_hes.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_leaus, rbmk_pellet_leaus.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_heaus, rbmk_pellet_heaus.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_po210be, rbmk_pellet_po210be.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_ra226be, rbmk_pellet_ra226be.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_pu238be, rbmk_pellet_pu238be.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_balefire_gold, rbmk_pellet_balefire_gold.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_flashlead, rbmk_pellet_flashlead.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_balefire, rbmk_pellet_balefire.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_zfb_bismuth, rbmk_pellet_zfb_bismuth.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_zfb_pu241, rbmk_pellet_zfb_pu241.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_zfb_am_mix, rbmk_pellet_zfb_am_mix.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_pellet_drx, rbmk_pellet_drx.getUnlocalizedName()); + + GameRegistry.registerItem(watz_pellet, watz_pellet.getUnlocalizedName()); + GameRegistry.registerItem(watz_pellet_depleted, watz_pellet_depleted.getUnlocalizedName()); + + GameRegistry.registerItem(icf_pellet_empty, icf_pellet_empty.getUnlocalizedName()); + GameRegistry.registerItem(icf_pellet, icf_pellet.getUnlocalizedName()); + GameRegistry.registerItem(icf_pellet_depleted, icf_pellet_depleted.getUnlocalizedName()); + + GameRegistry.registerItem(debris_graphite, debris_graphite.getUnlocalizedName()); + GameRegistry.registerItem(debris_metal, debris_metal.getUnlocalizedName()); + GameRegistry.registerItem(debris_fuel, debris_fuel.getUnlocalizedName()); + GameRegistry.registerItem(debris_concrete, debris_concrete.getUnlocalizedName()); + GameRegistry.registerItem(debris_exchanger, debris_exchanger.getUnlocalizedName()); + GameRegistry.registerItem(debris_shrapnel, debris_shrapnel.getUnlocalizedName()); + GameRegistry.registerItem(debris_element, debris_element.getUnlocalizedName()); + GameRegistry.registerItem(undefined, undefined.getUnlocalizedName()); + + GameRegistry.registerItem(scrap_plastic, scrap_plastic.getUnlocalizedName()); + GameRegistry.registerItem(scrap, scrap.getUnlocalizedName()); + GameRegistry.registerItem(scrap_oil, scrap_oil.getUnlocalizedName()); + GameRegistry.registerItem(scrap_nuclear, scrap_nuclear.getUnlocalizedName()); + GameRegistry.registerItem(trinitite, trinitite.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_long, nuclear_waste_long.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_long_tiny, nuclear_waste_long_tiny.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_short, nuclear_waste_short.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_short_tiny, nuclear_waste_short_tiny.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_long_depleted, nuclear_waste_long_depleted.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_long_depleted_tiny, nuclear_waste_long_depleted_tiny.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_short_depleted, nuclear_waste_short_depleted.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_short_depleted_tiny, nuclear_waste_short_depleted_tiny.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste, nuclear_waste.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_tiny, nuclear_waste_tiny.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_vitrified, nuclear_waste_vitrified.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_vitrified_tiny, nuclear_waste_vitrified_tiny.getUnlocalizedName()); + + //Spawners + GameRegistry.registerItem(spawn_chopper, spawn_chopper.getUnlocalizedName()); + GameRegistry.registerItem(spawn_worm, spawn_worm.getUnlocalizedName()); + GameRegistry.registerItem(spawn_ufo, spawn_ufo.getUnlocalizedName()); + GameRegistry.registerItem(spawn_duck, spawn_duck.getUnlocalizedName()); + + //Computer Tools + GameRegistry.registerItem(designator, designator.getUnlocalizedName()); + GameRegistry.registerItem(designator_range, designator_range.getUnlocalizedName()); + GameRegistry.registerItem(designator_manual, designator_manual.getUnlocalizedName()); + GameRegistry.registerItem(designator_arty_range, designator_arty_range.getUnlocalizedName()); + GameRegistry.registerItem(turret_chip, turret_chip.getUnlocalizedName()); + GameRegistry.registerItem(linker, linker.getUnlocalizedName()); + GameRegistry.registerItem(reactor_sensor, reactor_sensor.getUnlocalizedName()); + GameRegistry.registerItem(oil_detector, oil_detector.getUnlocalizedName()); + GameRegistry.registerItem(ore_density_scanner, ore_density_scanner.getUnlocalizedName()); + GameRegistry.registerItem(survey_scanner, survey_scanner.getUnlocalizedName()); + GameRegistry.registerItem(mirror_tool, mirror_tool.getUnlocalizedName()); + GameRegistry.registerItem(rbmk_tool, rbmk_tool.getUnlocalizedName()); + GameRegistry.registerItem(drone_linker, drone_linker.getUnlocalizedName()); + GameRegistry.registerItem(radar_linker, radar_linker.getUnlocalizedName()); + GameRegistry.registerItem(coltan_tool, coltan_tool.getUnlocalizedName()); + GameRegistry.registerItem(power_net_tool, power_net_tool.getUnlocalizedName()); + GameRegistry.registerItem(analysis_tool, analysis_tool.getUnlocalizedName()); + GameRegistry.registerItem(coupling_tool, coupling_tool.getUnlocalizedName()); + GameRegistry.registerItem(settings_tool, settings_tool.getUnlocalizedName()); + GameRegistry.registerItem(dosimeter, dosimeter.getUnlocalizedName()); + GameRegistry.registerItem(geiger_counter, geiger_counter.getUnlocalizedName()); + GameRegistry.registerItem(digamma_diagnostic, digamma_diagnostic.getUnlocalizedName()); + GameRegistry.registerItem(pollution_detector, pollution_detector.getUnlocalizedName()); + GameRegistry.registerItem(containment_box, containment_box.getUnlocalizedName()); + GameRegistry.registerItem(plastic_bag, plastic_bag.getUnlocalizedName()); + + GameRegistry.registerItem(ammo_bag, ammo_bag.getUnlocalizedName()); + GameRegistry.registerItem(ammo_bag_infinite, ammo_bag_infinite.getUnlocalizedName()); + GameRegistry.registerItem(casing_bag, casing_bag.getUnlocalizedName()); + + //Keys and Locks + GameRegistry.registerItem(key, key.getUnlocalizedName()); + GameRegistry.registerItem(key_red, key_red.getUnlocalizedName()); + GameRegistry.registerItem(key_red_cracked, key_red_cracked.getUnlocalizedName()); + GameRegistry.registerItem(key_kit, key_kit.getUnlocalizedName()); + GameRegistry.registerItem(key_fake, key_fake.getUnlocalizedName()); + GameRegistry.registerItem(mech_key, mech_key.getUnlocalizedName()); + GameRegistry.registerItem(pin, pin.getUnlocalizedName()); + GameRegistry.registerItem(padlock_rusty, padlock_rusty.getUnlocalizedName()); + GameRegistry.registerItem(padlock, padlock.getUnlocalizedName()); + GameRegistry.registerItem(padlock_reinforced, padlock_reinforced.getUnlocalizedName()); + GameRegistry.registerItem(padlock_unbreakable, padlock_unbreakable.getUnlocalizedName()); + GameRegistry.registerItem(launch_code_piece, launch_code_piece.getUnlocalizedName()); + GameRegistry.registerItem(launch_code, launch_code.getUnlocalizedName()); + GameRegistry.registerItem(launch_key, launch_key.getUnlocalizedName()); + + //Missiles + //Tier 0 + GameRegistry.registerItem(missile_test, missile_test.getUnlocalizedName()); + GameRegistry.registerItem(missile_taint, missile_taint.getUnlocalizedName()); + GameRegistry.registerItem(missile_micro, missile_micro.getUnlocalizedName()); + GameRegistry.registerItem(missile_bhole, missile_bhole.getUnlocalizedName()); + GameRegistry.registerItem(missile_schrabidium, missile_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(missile_emp, missile_emp.getUnlocalizedName()); + //Tier 1 + GameRegistry.registerItem(missile_generic, missile_generic.getUnlocalizedName()); + GameRegistry.registerItem(missile_decoy, missile_decoy.getUnlocalizedName()); + GameRegistry.registerItem(missile_incendiary, missile_incendiary.getUnlocalizedName()); + GameRegistry.registerItem(missile_cluster, missile_cluster.getUnlocalizedName()); + GameRegistry.registerItem(missile_buster, missile_buster.getUnlocalizedName()); + GameRegistry.registerItem(missile_stealth, missile_stealth.getUnlocalizedName()); + GameRegistry.registerItem(missile_anti_ballistic, missile_anti_ballistic.getUnlocalizedName()); + //Tier 2 + GameRegistry.registerItem(missile_strong, missile_strong.getUnlocalizedName()); + GameRegistry.registerItem(missile_incendiary_strong, missile_incendiary_strong.getUnlocalizedName()); + GameRegistry.registerItem(missile_cluster_strong, missile_cluster_strong.getUnlocalizedName()); + GameRegistry.registerItem(missile_buster_strong, missile_buster_strong.getUnlocalizedName()); + GameRegistry.registerItem(missile_emp_strong, missile_emp_strong.getUnlocalizedName()); + //Tier 3 + GameRegistry.registerItem(missile_burst, missile_burst.getUnlocalizedName()); + GameRegistry.registerItem(missile_inferno, missile_inferno.getUnlocalizedName()); + GameRegistry.registerItem(missile_rain, missile_rain.getUnlocalizedName()); + GameRegistry.registerItem(missile_drill, missile_drill.getUnlocalizedName()); + GameRegistry.registerItem(missile_shuttle, missile_shuttle.getUnlocalizedName()); + //Tier 4 + GameRegistry.registerItem(missile_nuclear, missile_nuclear.getUnlocalizedName()); + GameRegistry.registerItem(missile_nuclear_cluster, missile_nuclear_cluster.getUnlocalizedName()); + GameRegistry.registerItem(missile_volcano, missile_volcano.getUnlocalizedName()); + GameRegistry.registerItem(missile_doomsday, missile_doomsday.getUnlocalizedName()); + GameRegistry.registerItem(missile_doomsday_rusted, missile_doomsday_rusted.getUnlocalizedName()); + //Rockets + GameRegistry.registerItem(missile_soyuz, missile_soyuz.getUnlocalizedName()); + GameRegistry.registerItem(missile_soyuz_lander, missile_soyuz_lander.getUnlocalizedName()); + GameRegistry.registerItem(missile_custom, missile_custom.getUnlocalizedName()); + + //Missile Parts + GameRegistry.registerItem(mp_thruster_10_kerosene, mp_thruster_10_kerosene.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_10_kerosene_tec, mp_thruster_10_kerosene_tec.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_10_solid, mp_thruster_10_solid.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_10_xenon, mp_thruster_10_xenon.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_kerosene, mp_thruster_15_kerosene.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_kerosene_tec, mp_thruster_15_kerosene_tec.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_kerosene_dual, mp_thruster_15_kerosene_dual.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_kerosene_triple, mp_thruster_15_kerosene_triple.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_solid, mp_thruster_15_solid.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_solid_hexdecuple, mp_thruster_15_solid_hexdecuple.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_hydrogen, mp_thruster_15_hydrogen.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_hydrogen_dual, mp_thruster_15_hydrogen_dual.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_balefire_short, mp_thruster_15_balefire_short.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_balefire, mp_thruster_15_balefire.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_balefire_large, mp_thruster_15_balefire_large.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_15_balefire_large_rad, mp_thruster_15_balefire_large_rad.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_20_kerosene, mp_thruster_20_kerosene.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_20_kerosene_dual, mp_thruster_20_kerosene_dual.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_20_kerosene_triple, mp_thruster_20_kerosene_triple.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_20_solid, mp_thruster_20_solid.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_20_solid_multi, mp_thruster_20_solid_multi.getUnlocalizedName()); + GameRegistry.registerItem(mp_thruster_20_solid_multier, mp_thruster_20_solid_multier.getUnlocalizedName()); + GameRegistry.registerItem(mp_stability_10_flat, mp_stability_10_flat.getUnlocalizedName()); + GameRegistry.registerItem(mp_stability_10_cruise, mp_stability_10_cruise.getUnlocalizedName()); + GameRegistry.registerItem(mp_stability_10_space, mp_stability_10_space.getUnlocalizedName()); + GameRegistry.registerItem(mp_stability_15_flat, mp_stability_15_flat.getUnlocalizedName()); + GameRegistry.registerItem(mp_stability_15_thin, mp_stability_15_thin.getUnlocalizedName()); + GameRegistry.registerItem(mp_stability_15_soyuz, mp_stability_15_soyuz.getUnlocalizedName()); + GameRegistry.registerItem(mp_stability_20_flat, mp_stability_20_flat.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_kerosene, mp_fuselage_10_kerosene.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_kerosene_camo, mp_fuselage_10_kerosene_camo.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_kerosene_desert, mp_fuselage_10_kerosene_desert.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_kerosene_sky, mp_fuselage_10_kerosene_sky.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_kerosene_flames, mp_fuselage_10_kerosene_flames.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_kerosene_insulation, mp_fuselage_10_kerosene_insulation.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_kerosene_sleek, mp_fuselage_10_kerosene_sleek.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_kerosene_metal, mp_fuselage_10_kerosene_metal.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_kerosene_taint, mp_fuselage_10_kerosene_taint.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_solid, mp_fuselage_10_solid.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_solid_flames, mp_fuselage_10_solid_flames.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_solid_insulation, mp_fuselage_10_solid_insulation.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_solid_sleek, mp_fuselage_10_solid_sleek.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_solid_soviet_glory, mp_fuselage_10_solid_soviet_glory.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_solid_cathedral, mp_fuselage_10_solid_cathedral.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_solid_moonlit, mp_fuselage_10_solid_moonlit.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_solid_battery, mp_fuselage_10_solid_battery.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_solid_duracell, mp_fuselage_10_solid_duracell.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_xenon, mp_fuselage_10_xenon.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_xenon_bhole, mp_fuselage_10_xenon_bhole.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene, mp_fuselage_10_long_kerosene.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene_camo, mp_fuselage_10_long_kerosene_camo.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene_desert, mp_fuselage_10_long_kerosene_desert.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene_sky, mp_fuselage_10_long_kerosene_sky.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene_flames, mp_fuselage_10_long_kerosene_flames.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene_insulation, mp_fuselage_10_long_kerosene_insulation.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene_sleek, mp_fuselage_10_long_kerosene_sleek.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene_metal, mp_fuselage_10_long_kerosene_metal.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene_dash, mp_fuselage_10_long_kerosene_dash.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene_taint, mp_fuselage_10_long_kerosene_taint.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_kerosene_vap, mp_fuselage_10_long_kerosene_vap.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_solid, mp_fuselage_10_long_solid.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_solid_flames, mp_fuselage_10_long_solid_flames.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_solid_insulation, mp_fuselage_10_long_solid_insulation.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_solid_sleek, mp_fuselage_10_long_solid_sleek.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_solid_soviet_glory, mp_fuselage_10_long_solid_soviet_glory.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_solid_bullet, mp_fuselage_10_long_solid_bullet.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_long_solid_silvermoonlight, mp_fuselage_10_long_solid_silvermoonlight.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_15_kerosene, mp_fuselage_10_15_kerosene.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_15_solid, mp_fuselage_10_15_solid.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_15_hydrogen, mp_fuselage_10_15_hydrogen.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_10_15_balefire, mp_fuselage_10_15_balefire.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene, mp_fuselage_15_kerosene.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_camo, mp_fuselage_15_kerosene_camo.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_desert, mp_fuselage_15_kerosene_desert.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_sky, mp_fuselage_15_kerosene_sky.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_insulation, mp_fuselage_15_kerosene_insulation.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_metal, mp_fuselage_15_kerosene_metal.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_decorated, mp_fuselage_15_kerosene_decorated.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_steampunk, mp_fuselage_15_kerosene_steampunk.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_polite, mp_fuselage_15_kerosene_polite.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_blackjack, mp_fuselage_15_kerosene_blackjack.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_lambda, mp_fuselage_15_kerosene_lambda.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_minuteman, mp_fuselage_15_kerosene_minuteman.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_pip, mp_fuselage_15_kerosene_pip.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_taint, mp_fuselage_15_kerosene_taint.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_kerosene_yuck, mp_fuselage_15_kerosene_yuck.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid, mp_fuselage_15_solid.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid_insulation, mp_fuselage_15_solid_insulation.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid_desh, mp_fuselage_15_solid_desh.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid_soviet_glory, mp_fuselage_15_solid_soviet_glory.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid_soviet_stank, mp_fuselage_15_solid_soviet_stank.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid_faust, mp_fuselage_15_solid_faust.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid_silvermoonlight, mp_fuselage_15_solid_silvermoonlight.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid_snowy, mp_fuselage_15_solid_snowy.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid_panorama, mp_fuselage_15_solid_panorama.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid_roses, mp_fuselage_15_solid_roses.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_solid_mimi, mp_fuselage_15_solid_mimi.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_hydrogen, mp_fuselage_15_hydrogen.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_hydrogen_cathedral, mp_fuselage_15_hydrogen_cathedral.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_balefire, mp_fuselage_15_balefire.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_20_kerosene, mp_fuselage_15_20_kerosene.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_20_kerosene_magnusson, mp_fuselage_15_20_kerosene_magnusson.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_15_20_solid, mp_fuselage_15_20_solid.getUnlocalizedName()); + GameRegistry.registerItem(mp_fuselage_20_kerosene, mp_fuselage_20_kerosene.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_10_he, mp_warhead_10_he.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_10_incendiary, mp_warhead_10_incendiary.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_10_buster, mp_warhead_10_buster.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_10_nuclear, mp_warhead_10_nuclear.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_10_nuclear_large, mp_warhead_10_nuclear_large.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_10_taint, mp_warhead_10_taint.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_10_cloud, mp_warhead_10_cloud.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_15_he, mp_warhead_15_he.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_15_incendiary, mp_warhead_15_incendiary.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_15_nuclear, mp_warhead_15_nuclear.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_15_nuclear_shark, mp_warhead_15_nuclear_shark.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_15_nuclear_mimi, mp_warhead_15_nuclear_mimi.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_15_boxcar, mp_warhead_15_boxcar.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_15_n2, mp_warhead_15_n2.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_15_balefire, mp_warhead_15_balefire.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_15_turbine, mp_warhead_15_turbine.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_20_he, mp_warhead_20_he.getUnlocalizedName()); + GameRegistry.registerItem(mp_chip_1, mp_chip_1.getUnlocalizedName()); + GameRegistry.registerItem(mp_chip_2, mp_chip_2.getUnlocalizedName()); + GameRegistry.registerItem(mp_chip_3, mp_chip_3.getUnlocalizedName()); + GameRegistry.registerItem(mp_chip_4, mp_chip_4.getUnlocalizedName()); + GameRegistry.registerItem(mp_chip_5, mp_chip_5.getUnlocalizedName()); + + //Satellites + GameRegistry.registerItem(sat_mapper, sat_mapper.getUnlocalizedName()); + GameRegistry.registerItem(sat_scanner, sat_scanner.getUnlocalizedName()); + GameRegistry.registerItem(sat_radar, sat_radar.getUnlocalizedName()); + GameRegistry.registerItem(sat_laser, sat_laser.getUnlocalizedName()); + GameRegistry.registerItem(sat_foeq, sat_foeq.getUnlocalizedName()); + GameRegistry.registerItem(sat_resonator, sat_resonator.getUnlocalizedName()); + GameRegistry.registerItem(sat_miner, sat_miner.getUnlocalizedName()); + GameRegistry.registerItem(sat_lunar_miner, sat_lunar_miner.getUnlocalizedName()); + GameRegistry.registerItem(sat_gerald, sat_gerald.getUnlocalizedName()); + GameRegistry.registerItem(sat_chip, sat_chip.getUnlocalizedName()); + GameRegistry.registerItem(sat_interface, sat_interface.getUnlocalizedName()); + GameRegistry.registerItem(sat_coord, sat_coord.getUnlocalizedName()); + GameRegistry.registerItem(sat_designator, sat_designator.getUnlocalizedName()); + GameRegistry.registerItem(sat_relay, sat_relay.getUnlocalizedName()); + + //Guns + GameRegistry.registerItem(gun_b92, gun_b92.getUnlocalizedName()); + GameRegistry.registerItem(gun_fireext, gun_fireext.getUnlocalizedName()); + GameRegistry.registerItem(crucible, crucible.getUnlocalizedName()); + + GameRegistry.registerItem(gun_debug, gun_debug.getUnlocalizedName()); + GameRegistry.registerItem(ammo_debug, ammo_debug.getUnlocalizedName()); + + GameRegistry.registerItem(gun_pepperbox, gun_pepperbox.getUnlocalizedName()); + GameRegistry.registerItem(gun_light_revolver, gun_light_revolver.getUnlocalizedName()); + GameRegistry.registerItem(gun_light_revolver_atlas, gun_light_revolver_atlas.getUnlocalizedName()); + GameRegistry.registerItem(gun_light_revolver_dani, gun_light_revolver_dani.getUnlocalizedName()); + GameRegistry.registerItem(gun_henry, gun_henry.getUnlocalizedName()); + GameRegistry.registerItem(gun_henry_lincoln, gun_henry_lincoln.getUnlocalizedName()); + GameRegistry.registerItem(gun_greasegun, gun_greasegun.getUnlocalizedName()); + GameRegistry.registerItem(gun_maresleg, gun_maresleg.getUnlocalizedName()); + GameRegistry.registerItem(gun_maresleg_akimbo, gun_maresleg_akimbo.getUnlocalizedName()); + GameRegistry.registerItem(gun_maresleg_broken, gun_maresleg_broken.getUnlocalizedName()); + GameRegistry.registerItem(gun_flaregun, gun_flaregun.getUnlocalizedName()); + GameRegistry.registerItem(gun_heavy_revolver, gun_heavy_revolver.getUnlocalizedName()); + GameRegistry.registerItem(gun_heavy_revolver_lilmac, gun_heavy_revolver_lilmac.getUnlocalizedName()); + GameRegistry.registerItem(gun_heavy_revolver_protege, gun_heavy_revolver_protege.getUnlocalizedName()); + GameRegistry.registerItem(gun_carbine, gun_carbine.getUnlocalizedName()); + GameRegistry.registerItem(gun_am180, gun_am180.getUnlocalizedName()); + GameRegistry.registerItem(gun_liberator, gun_liberator.getUnlocalizedName()); + GameRegistry.registerItem(gun_congolake, gun_congolake.getUnlocalizedName()); + GameRegistry.registerItem(gun_flamer, gun_flamer.getUnlocalizedName()); + GameRegistry.registerItem(gun_flamer_topaz, gun_flamer_topaz.getUnlocalizedName()); + GameRegistry.registerItem(gun_flamer_daybreaker, gun_flamer_daybreaker.getUnlocalizedName()); + GameRegistry.registerItem(gun_uzi, gun_uzi.getUnlocalizedName()); + GameRegistry.registerItem(gun_uzi_akimbo, gun_uzi_akimbo.getUnlocalizedName()); + GameRegistry.registerItem(gun_spas12, gun_spas12.getUnlocalizedName()); + GameRegistry.registerItem(gun_panzerschreck, gun_panzerschreck.getUnlocalizedName()); + GameRegistry.registerItem(gun_g3, gun_g3.getUnlocalizedName()); + GameRegistry.registerItem(gun_g3_zebra, gun_g3_zebra.getUnlocalizedName()); + GameRegistry.registerItem(gun_stinger, gun_stinger.getUnlocalizedName()); + GameRegistry.registerItem(gun_chemthrower, gun_chemthrower.getUnlocalizedName()); + GameRegistry.registerItem(gun_m2, gun_m2.getUnlocalizedName()); + GameRegistry.registerItem(gun_autoshotgun, gun_autoshotgun.getUnlocalizedName()); + GameRegistry.registerItem(gun_autoshotgun_shredder, gun_autoshotgun_shredder.getUnlocalizedName()); + GameRegistry.registerItem(gun_autoshotgun_sexy, gun_autoshotgun_sexy.getUnlocalizedName()); + GameRegistry.registerItem(gun_quadro, gun_quadro.getUnlocalizedName()); + GameRegistry.registerItem(gun_lag, gun_lag.getUnlocalizedName()); + GameRegistry.registerItem(gun_minigun, gun_minigun.getUnlocalizedName()); + GameRegistry.registerItem(gun_minigun_dual, gun_minigun_dual.getUnlocalizedName()); + GameRegistry.registerItem(gun_minigun_lacunae, gun_minigun_lacunae.getUnlocalizedName()); + GameRegistry.registerItem(gun_missile_launcher, gun_missile_launcher.getUnlocalizedName()); + GameRegistry.registerItem(gun_tesla_cannon, gun_tesla_cannon.getUnlocalizedName()); + GameRegistry.registerItem(gun_laser_pistol, gun_laser_pistol.getUnlocalizedName()); + GameRegistry.registerItem(gun_laser_pistol_pew_pew, gun_laser_pistol_pew_pew.getUnlocalizedName()); + GameRegistry.registerItem(gun_laser_pistol_morning_glory, gun_laser_pistol_morning_glory.getUnlocalizedName()); + GameRegistry.registerItem(gun_stg77, gun_stg77.getUnlocalizedName()); + GameRegistry.registerItem(gun_tau, gun_tau.getUnlocalizedName()); + GameRegistry.registerItem(gun_fatman, gun_fatman.getUnlocalizedName()); + GameRegistry.registerItem(gun_lasrifle, gun_lasrifle.getUnlocalizedName()); + GameRegistry.registerItem(gun_coilgun, gun_coilgun.getUnlocalizedName()); + GameRegistry.registerItem(gun_hangman, gun_hangman.getUnlocalizedName()); + GameRegistry.registerItem(gun_mas36, gun_mas36.getUnlocalizedName()); + GameRegistry.registerItem(gun_bolter, gun_bolter.getUnlocalizedName()); + GameRegistry.registerItem(gun_folly, gun_folly.getUnlocalizedName()); + GameRegistry.registerItem(gun_aberrator, gun_aberrator.getUnlocalizedName()); + GameRegistry.registerItem(gun_aberrator_eott, gun_aberrator_eott.getUnlocalizedName()); + GameRegistry.registerItem(gun_double_barrel, gun_double_barrel.getUnlocalizedName()); + GameRegistry.registerItem(gun_double_barrel_sacred_dragon, gun_double_barrel_sacred_dragon.getUnlocalizedName()); + + GameRegistry.registerItem(gun_charge_thrower, gun_charge_thrower.getUnlocalizedName()); + + GameRegistry.registerItem(ammo_standard, ammo_standard.getUnlocalizedName()); + GameRegistry.registerItem(ammo_secret, ammo_secret.getUnlocalizedName()); + + GameRegistry.registerItem(weapon_mod_test, weapon_mod_test.getUnlocalizedName()); + GameRegistry.registerItem(weapon_mod_generic, weapon_mod_generic.getUnlocalizedName()); + GameRegistry.registerItem(weapon_mod_special, weapon_mod_special.getUnlocalizedName()); + GameRegistry.registerItem(weapon_mod_caliber, weapon_mod_caliber.getUnlocalizedName()); + + //Ammo + GameRegistry.registerItem(gun_b92_ammo, gun_b92_ammo.getUnlocalizedName()); + + GameRegistry.registerItem(ammo_fireext, ammo_fireext.getUnlocalizedName()); + GameRegistry.registerItem(ammo_shell, ammo_shell.getUnlocalizedName()); + GameRegistry.registerItem(ammo_dgk, ammo_dgk.getUnlocalizedName()); + GameRegistry.registerItem(ammo_arty, ammo_arty.getUnlocalizedName()); + GameRegistry.registerItem(ammo_himars, ammo_himars.getUnlocalizedName()); + + GameRegistry.registerItem(ammo_container, ammo_container.getUnlocalizedName()); + + //Grenades + GameRegistry.registerItem(stick_dynamite, stick_dynamite.getUnlocalizedName()); //heave-ho! + GameRegistry.registerItem(stick_dynamite_fishing, stick_dynamite_fishing.getUnlocalizedName()); + GameRegistry.registerItem(stick_tnt, stick_tnt.getUnlocalizedName()); + GameRegistry.registerItem(stick_semtex, stick_semtex.getUnlocalizedName()); + GameRegistry.registerItem(stick_c4, stick_c4.getUnlocalizedName()); + GameRegistry.registerItem(grenade_generic, grenade_generic.getUnlocalizedName()); + GameRegistry.registerItem(grenade_strong, grenade_strong.getUnlocalizedName()); + GameRegistry.registerItem(grenade_frag, grenade_frag.getUnlocalizedName()); + GameRegistry.registerItem(grenade_fire, grenade_fire.getUnlocalizedName()); + GameRegistry.registerItem(grenade_shrapnel, grenade_shrapnel.getUnlocalizedName()); + GameRegistry.registerItem(grenade_cluster, grenade_cluster.getUnlocalizedName()); + GameRegistry.registerItem(grenade_flare, grenade_flare.getUnlocalizedName()); + GameRegistry.registerItem(grenade_electric, grenade_electric.getUnlocalizedName()); + GameRegistry.registerItem(grenade_poison, grenade_poison.getUnlocalizedName()); + GameRegistry.registerItem(grenade_gas, grenade_gas.getUnlocalizedName()); + GameRegistry.registerItem(grenade_cloud, grenade_cloud.getUnlocalizedName()); + GameRegistry.registerItem(grenade_pink_cloud, grenade_pink_cloud.getUnlocalizedName()); + GameRegistry.registerItem(grenade_smart, grenade_smart.getUnlocalizedName()); + GameRegistry.registerItem(grenade_mirv, grenade_mirv.getUnlocalizedName()); + GameRegistry.registerItem(grenade_breach, grenade_breach.getUnlocalizedName()); + GameRegistry.registerItem(grenade_burst, grenade_burst.getUnlocalizedName()); + GameRegistry.registerItem(grenade_pulse, grenade_pulse.getUnlocalizedName()); + GameRegistry.registerItem(grenade_plasma, grenade_plasma.getUnlocalizedName()); + GameRegistry.registerItem(grenade_tau, grenade_tau.getUnlocalizedName()); + GameRegistry.registerItem(grenade_schrabidium, grenade_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(grenade_nuke, grenade_nuke.getUnlocalizedName()); + GameRegistry.registerItem(grenade_lemon, grenade_lemon.getUnlocalizedName()); + GameRegistry.registerItem(grenade_gascan, grenade_gascan.getUnlocalizedName()); + GameRegistry.registerItem(grenade_kyiv, grenade_kyiv.getUnlocalizedName()); + GameRegistry.registerItem(grenade_mk2, grenade_mk2.getUnlocalizedName()); + GameRegistry.registerItem(grenade_aschrab, grenade_aschrab.getUnlocalizedName()); + GameRegistry.registerItem(grenade_nuclear, grenade_nuclear.getUnlocalizedName()); + GameRegistry.registerItem(grenade_zomg, grenade_zomg.getUnlocalizedName()); + GameRegistry.registerItem(grenade_black_hole, grenade_black_hole.getUnlocalizedName()); + + GameRegistry.registerItem(grenade_if_generic, grenade_if_generic.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_he, grenade_if_he.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_bouncy, grenade_if_bouncy.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_sticky, grenade_if_sticky.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_impact, grenade_if_impact.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_incendiary, grenade_if_incendiary.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_toxic, grenade_if_toxic.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_concussion, grenade_if_concussion.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_brimstone, grenade_if_brimstone.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_mystery, grenade_if_mystery.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_spark, grenade_if_spark.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_hopwire, grenade_if_hopwire.getUnlocalizedName()); + GameRegistry.registerItem(grenade_if_null, grenade_if_null.getUnlocalizedName()); + GameRegistry.registerItem(nuclear_waste_pearl, nuclear_waste_pearl.getUnlocalizedName()); + + //Disperser Canister + GameRegistry.registerItem(disperser_canister_empty, disperser_canister_empty.getUnlocalizedName()); + GameRegistry.registerItem(disperser_canister, disperser_canister.getUnlocalizedName()); + GameRegistry.registerItem(glyphid_gland_empty, glyphid_gland_empty.getUnlocalizedName()); + GameRegistry.registerItem(glyphid_gland, glyphid_gland.getUnlocalizedName()); + + GameRegistry.registerItem(ullapool_caber, ullapool_caber.getUnlocalizedName()); + GameRegistry.registerItem(weaponized_starblaster_cell, weaponized_starblaster_cell.getUnlocalizedName()); + + //Capes + GameRegistry.registerItem(cape_radiation, cape_radiation.getUnlocalizedName()); + GameRegistry.registerItem(cape_gasmask, cape_gasmask.getUnlocalizedName()); + GameRegistry.registerItem(cape_schrabidium, cape_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(cape_hidden, cape_hidden.getUnlocalizedName()); + + //Tools + GameRegistry.registerItem(dwarven_pickaxe, dwarven_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(schrabidium_sword, schrabidium_sword.getUnlocalizedName()); + GameRegistry.registerItem(schrabidium_hammer, schrabidium_hammer.getUnlocalizedName()); + GameRegistry.registerItem(shimmer_sledge, shimmer_sledge.getUnlocalizedName()); + GameRegistry.registerItem(shimmer_axe, shimmer_axe.getUnlocalizedName()); + GameRegistry.registerItem(wood_gavel, wood_gavel.getUnlocalizedName()); + GameRegistry.registerItem(lead_gavel, lead_gavel.getUnlocalizedName()); + GameRegistry.registerItem(diamond_gavel, diamond_gavel.getUnlocalizedName()); + GameRegistry.registerItem(mese_gavel, mese_gavel.getUnlocalizedName()); + GameRegistry.registerItem(schrabidium_pickaxe, schrabidium_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(schrabidium_axe, schrabidium_axe.getUnlocalizedName()); + GameRegistry.registerItem(schrabidium_shovel, schrabidium_shovel.getUnlocalizedName()); + GameRegistry.registerItem(schrabidium_hoe, schrabidium_hoe.getUnlocalizedName()); + GameRegistry.registerItem(steel_sword, steel_sword.getUnlocalizedName()); + GameRegistry.registerItem(steel_pickaxe, steel_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(steel_axe, steel_axe.getUnlocalizedName()); + GameRegistry.registerItem(steel_shovel, steel_shovel.getUnlocalizedName()); + GameRegistry.registerItem(steel_hoe, steel_hoe.getUnlocalizedName()); + GameRegistry.registerItem(titanium_sword, titanium_sword.getUnlocalizedName()); + GameRegistry.registerItem(titanium_pickaxe, titanium_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(titanium_axe, titanium_axe.getUnlocalizedName()); + GameRegistry.registerItem(titanium_shovel, titanium_shovel.getUnlocalizedName()); + GameRegistry.registerItem(titanium_hoe, titanium_hoe.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_sword, cobalt_sword.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_pickaxe, cobalt_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_axe, cobalt_axe.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_shovel, cobalt_shovel.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_hoe, cobalt_hoe.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_decorated_sword, cobalt_decorated_sword.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_decorated_pickaxe, cobalt_decorated_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_decorated_axe, cobalt_decorated_axe.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_decorated_shovel, cobalt_decorated_shovel.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_decorated_hoe, cobalt_decorated_hoe.getUnlocalizedName()); + GameRegistry.registerItem(starmetal_sword, starmetal_sword.getUnlocalizedName()); + GameRegistry.registerItem(starmetal_pickaxe, starmetal_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(starmetal_axe, starmetal_axe.getUnlocalizedName()); + GameRegistry.registerItem(starmetal_shovel, starmetal_shovel.getUnlocalizedName()); + GameRegistry.registerItem(starmetal_hoe, starmetal_hoe.getUnlocalizedName()); + GameRegistry.registerItem(alloy_sword, alloy_sword.getUnlocalizedName()); + GameRegistry.registerItem(alloy_pickaxe, alloy_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(alloy_axe, alloy_axe.getUnlocalizedName()); + GameRegistry.registerItem(alloy_shovel, alloy_shovel.getUnlocalizedName()); + GameRegistry.registerItem(alloy_hoe, alloy_hoe.getUnlocalizedName()); + GameRegistry.registerItem(cmb_sword, cmb_sword.getUnlocalizedName()); + GameRegistry.registerItem(cmb_pickaxe, cmb_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(cmb_axe, cmb_axe.getUnlocalizedName()); + GameRegistry.registerItem(cmb_shovel, cmb_shovel.getUnlocalizedName()); + GameRegistry.registerItem(cmb_hoe, cmb_hoe.getUnlocalizedName()); + GameRegistry.registerItem(desh_sword, desh_sword.getUnlocalizedName()); + GameRegistry.registerItem(desh_pickaxe, desh_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(desh_axe, desh_axe.getUnlocalizedName()); + GameRegistry.registerItem(desh_shovel, desh_shovel.getUnlocalizedName()); + GameRegistry.registerItem(desh_hoe, desh_hoe.getUnlocalizedName()); + GameRegistry.registerItem(elec_sword, elec_sword.getUnlocalizedName()); + GameRegistry.registerItem(elec_pickaxe, elec_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(elec_axe, elec_axe.getUnlocalizedName()); + GameRegistry.registerItem(elec_shovel, elec_shovel.getUnlocalizedName()); + GameRegistry.registerItem(dnt_sword, dnt_sword.getUnlocalizedName()); + GameRegistry.registerItem(smashing_hammer, smashing_hammer.getUnlocalizedName()); + GameRegistry.registerItem(centri_stick, centri_stick.getUnlocalizedName()); + GameRegistry.registerItem(drax, drax.getUnlocalizedName()); + GameRegistry.registerItem(drax_mk2, drax_mk2.getUnlocalizedName()); + GameRegistry.registerItem(drax_mk3, drax_mk3.getUnlocalizedName()); + GameRegistry.registerItem(bismuth_pickaxe, bismuth_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(bismuth_axe, bismuth_axe.getUnlocalizedName()); + GameRegistry.registerItem(volcanic_pickaxe, volcanic_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(volcanic_axe, volcanic_axe.getUnlocalizedName()); + GameRegistry.registerItem(chlorophyte_pickaxe, chlorophyte_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(chlorophyte_axe, chlorophyte_axe.getUnlocalizedName()); + GameRegistry.registerItem(mese_pickaxe, mese_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(mese_axe, mese_axe.getUnlocalizedName()); GameRegistry.registerItem(matchstick, matchstick.getUnlocalizedName()); + GameRegistry.registerItem(balefire_and_steel, balefire_and_steel.getUnlocalizedName()); + GameRegistry.registerItem(crowbar, crowbar.getUnlocalizedName()); + GameRegistry.registerItem(wrench, wrench.getUnlocalizedName()); + GameRegistry.registerItem(wrench_archineer, wrench_archineer.getUnlocalizedName()); + GameRegistry.registerItem(wrench_flipped, wrench_flipped.getUnlocalizedName()); + GameRegistry.registerItem(memespoon, memespoon.getUnlocalizedName()); + GameRegistry.registerItem(saw, saw.getUnlocalizedName()); + GameRegistry.registerItem(bat, bat.getUnlocalizedName()); + GameRegistry.registerItem(bat_nail, bat_nail.getUnlocalizedName()); + GameRegistry.registerItem(golf_club, golf_club.getUnlocalizedName()); + GameRegistry.registerItem(pipe_rusty, pipe_rusty.getUnlocalizedName()); + GameRegistry.registerItem(pipe_lead, pipe_lead.getUnlocalizedName()); + GameRegistry.registerItem(reer_graar, reer_graar.getUnlocalizedName()); + GameRegistry.registerItem(stopsign, stopsign.getUnlocalizedName()); + GameRegistry.registerItem(sopsign, sopsign.getUnlocalizedName()); + GameRegistry.registerItem(chernobylsign, chernobylsign.getUnlocalizedName()); + + GameRegistry.registerItem(meteorite_sword, meteorite_sword.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_seared, meteorite_sword_seared.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_reforged, meteorite_sword_reforged.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_hardened, meteorite_sword_hardened.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_alloyed, meteorite_sword_alloyed.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_machined, meteorite_sword_machined.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_treated, meteorite_sword_treated.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_etched, meteorite_sword_etched.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_bred, meteorite_sword_bred.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_irradiated, meteorite_sword_irradiated.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_fused, meteorite_sword_fused.getUnlocalizedName()); + GameRegistry.registerItem(meteorite_sword_baleful, meteorite_sword_baleful.getUnlocalizedName()); + + //Multitool + GameRegistry.registerItem(multitool_hit, multitool_hit.getUnlocalizedName()); + GameRegistry.registerItem(multitool_dig, multitool_dig.getUnlocalizedName()); + GameRegistry.registerItem(multitool_silk, multitool_silk.getUnlocalizedName()); + GameRegistry.registerItem(multitool_ext, multitool_ext.getUnlocalizedName()); + GameRegistry.registerItem(multitool_miner, multitool_miner.getUnlocalizedName()); + GameRegistry.registerItem(multitool_beam, multitool_beam.getUnlocalizedName()); + GameRegistry.registerItem(multitool_sky, multitool_sky.getUnlocalizedName()); + GameRegistry.registerItem(multitool_mega, multitool_mega.getUnlocalizedName()); + GameRegistry.registerItem(multitool_joule, multitool_joule.getUnlocalizedName()); + GameRegistry.registerItem(multitool_decon, multitool_decon.getUnlocalizedName()); + + //Syringes & Pills + GameRegistry.registerItem(syringe_empty, syringe_empty.getUnlocalizedName()); + GameRegistry.registerItem(syringe_antidote, syringe_antidote.getUnlocalizedName()); + GameRegistry.registerItem(syringe_poison, syringe_poison.getUnlocalizedName()); + GameRegistry.registerItem(syringe_awesome, syringe_awesome.getUnlocalizedName()); + GameRegistry.registerItem(syringe_metal_empty, syringe_metal_empty.getUnlocalizedName()); + GameRegistry.registerItem(syringe_metal_stimpak, syringe_metal_stimpak.getUnlocalizedName()); + GameRegistry.registerItem(syringe_metal_medx, syringe_metal_medx.getUnlocalizedName()); + GameRegistry.registerItem(syringe_metal_psycho, syringe_metal_psycho.getUnlocalizedName()); + GameRegistry.registerItem(syringe_metal_super, syringe_metal_super.getUnlocalizedName()); + GameRegistry.registerItem(syringe_taint, syringe_taint.getUnlocalizedName()); + GameRegistry.registerItem(syringe_mkunicorn, syringe_mkunicorn.getUnlocalizedName()); + GameRegistry.registerItem(med_bag, med_bag.getUnlocalizedName()); + GameRegistry.registerItem(iv_empty, iv_empty.getUnlocalizedName()); + GameRegistry.registerItem(iv_blood, iv_blood.getUnlocalizedName()); + GameRegistry.registerItem(iv_xp_empty, iv_xp_empty.getUnlocalizedName()); + GameRegistry.registerItem(iv_xp, iv_xp.getUnlocalizedName()); + GameRegistry.registerItem(radaway, radaway.getUnlocalizedName()); + GameRegistry.registerItem(radaway_strong, radaway_strong.getUnlocalizedName()); + GameRegistry.registerItem(radaway_flush, radaway_flush.getUnlocalizedName()); + GameRegistry.registerItem(radx, radx.getUnlocalizedName()); + GameRegistry.registerItem(siox, siox.getUnlocalizedName()); + GameRegistry.registerItem(pill_herbal, pill_herbal.getUnlocalizedName()); + GameRegistry.registerItem(pill_iodine, pill_iodine.getUnlocalizedName()); + GameRegistry.registerItem(xanax, xanax.getUnlocalizedName()); + GameRegistry.registerItem(fmn, fmn.getUnlocalizedName()); + GameRegistry.registerItem(five_htp, five_htp.getUnlocalizedName()); + GameRegistry.registerItem(plan_c, plan_c.getUnlocalizedName()); + GameRegistry.registerItem(pill_red, pill_red.getUnlocalizedName()); + GameRegistry.registerItem(stealth_boy, stealth_boy.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_filter, gas_mask_filter.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_filter_mono, gas_mask_filter_mono.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_filter_combo, gas_mask_filter_combo.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_filter_rag, gas_mask_filter_rag.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_filter_piss, gas_mask_filter_piss.getUnlocalizedName()); + GameRegistry.registerItem(jetpack_tank, jetpack_tank.getUnlocalizedName()); + GameRegistry.registerItem(gun_kit_1, gun_kit_1.getUnlocalizedName()); + GameRegistry.registerItem(gun_kit_2, gun_kit_2.getUnlocalizedName()); + + //Food + GameRegistry.registerItem(bomb_waffle, bomb_waffle.getUnlocalizedName()); + GameRegistry.registerItem(schnitzel_vegan, schnitzel_vegan.getUnlocalizedName()); + GameRegistry.registerItem(cotton_candy, cotton_candy.getUnlocalizedName()); + GameRegistry.registerItem(apple_lead, apple_lead.getUnlocalizedName()); + GameRegistry.registerItem(apple_schrabidium, apple_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(tem_flakes, tem_flakes.getUnlocalizedName()); + GameRegistry.registerItem(glowing_stew, glowing_stew.getUnlocalizedName()); + GameRegistry.registerItem(balefire_scrambled, balefire_scrambled.getUnlocalizedName()); + GameRegistry.registerItem(balefire_and_ham, balefire_and_ham.getUnlocalizedName()); + GameRegistry.registerItem(lemon, lemon.getUnlocalizedName()); + GameRegistry.registerItem(definitelyfood, definitelyfood.getUnlocalizedName()); + GameRegistry.registerItem(loops, loops.getUnlocalizedName()); + GameRegistry.registerItem(loop_stew, loop_stew.getUnlocalizedName()); + GameRegistry.registerItem(spongebob_macaroni, spongebob_macaroni.getUnlocalizedName()); + GameRegistry.registerItem(fooditem, fooditem.getUnlocalizedName()); + GameRegistry.registerItem(twinkie, twinkie.getUnlocalizedName()); + GameRegistry.registerItem(static_sandwich, static_sandwich.getUnlocalizedName()); + GameRegistry.registerItem(pudding, pudding.getUnlocalizedName()); + GameRegistry.registerItem(pancake, pancake.getUnlocalizedName()); + GameRegistry.registerItem(nugget, nugget.getUnlocalizedName()); + GameRegistry.registerItem(peas, peas.getUnlocalizedName()); + GameRegistry.registerItem(marshmallow, marshmallow.getUnlocalizedName()); + GameRegistry.registerItem(cheese, cheese.getUnlocalizedName()); + GameRegistry.registerItem(quesadilla, quesadilla.getUnlocalizedName()); + GameRegistry.registerItem(glyphid_meat, glyphid_meat.getUnlocalizedName()); + GameRegistry.registerItem(glyphid_meat_grilled, glyphid_meat_grilled.getUnlocalizedName()); + GameRegistry.registerItem(egg_glyphid, egg_glyphid.getUnlocalizedName()); + GameRegistry.registerItem(med_ipecac, med_ipecac.getUnlocalizedName()); + GameRegistry.registerItem(med_ptsd, med_ptsd.getUnlocalizedName()); + GameRegistry.registerItem(canteen_vodka, canteen_vodka.getUnlocalizedName()); + GameRegistry.registerItem(canteen_fab, canteen_fab.getUnlocalizedName()); + GameRegistry.registerItem(mucho_mango, mucho_mango.getUnlocalizedName()); + GameRegistry.registerItem(chocolate, chocolate.getUnlocalizedName()); + + //Energy Drinks + GameRegistry.registerItem(can_empty, can_empty.getUnlocalizedName()); + GameRegistry.registerItem(can_smart, can_smart.getUnlocalizedName()); + GameRegistry.registerItem(can_creature, can_creature.getUnlocalizedName()); + GameRegistry.registerItem(can_redbomb, can_redbomb.getUnlocalizedName()); + GameRegistry.registerItem(can_mrsugar, can_mrsugar.getUnlocalizedName()); + GameRegistry.registerItem(can_overcharge, can_overcharge.getUnlocalizedName()); + GameRegistry.registerItem(can_luna, can_luna.getUnlocalizedName()); + GameRegistry.registerItem(can_bepis, can_bepis.getUnlocalizedName()); + GameRegistry.registerItem(can_breen, can_breen.getUnlocalizedName()); + GameRegistry.registerItem(can_mug, can_mug.getUnlocalizedName()); + + //Coffee + GameRegistry.registerItem(coffee, coffee.getUnlocalizedName()); + GameRegistry.registerItem(coffee_radium, coffee_radium.getUnlocalizedName()); + + //Cola + GameRegistry.registerItem(bottle_empty, bottle_empty.getUnlocalizedName()); + GameRegistry.registerItem(bottle_nuka, bottle_nuka.getUnlocalizedName()); + GameRegistry.registerItem(bottle_cherry, bottle_cherry.getUnlocalizedName()); + GameRegistry.registerItem(bottle_quantum, bottle_quantum.getUnlocalizedName()); + GameRegistry.registerItem(bottle_sparkle, bottle_sparkle.getUnlocalizedName()); + GameRegistry.registerItem(bottle_rad, bottle_rad.getUnlocalizedName()); + GameRegistry.registerItem(bottle2_empty, bottle2_empty.getUnlocalizedName()); + GameRegistry.registerItem(bottle2_korl, bottle2_korl.getUnlocalizedName()); + GameRegistry.registerItem(bottle2_fritz, bottle2_fritz.getUnlocalizedName()); + GameRegistry.registerItem(bottle2_korl_special, bottle2_korl_special.getUnlocalizedName()); + GameRegistry.registerItem(bottle2_fritz_special, bottle2_fritz_special.getUnlocalizedName()); + GameRegistry.registerItem(bottle_opener, bottle_opener.getUnlocalizedName()); + + //Flasks + GameRegistry.registerItem(flask_infusion, flask_infusion.getUnlocalizedName()); + + //Canned Food + GameRegistry.registerItem(canned_conserve, canned_conserve.getUnlocalizedName()); + + //Money + GameRegistry.registerItem(cap_nuka, cap_nuka.getUnlocalizedName()); + GameRegistry.registerItem(cap_quantum, cap_quantum.getUnlocalizedName()); + GameRegistry.registerItem(cap_sparkle, cap_sparkle.getUnlocalizedName()); + GameRegistry.registerItem(cap_rad, cap_rad.getUnlocalizedName()); + GameRegistry.registerItem(cap_korl, cap_korl.getUnlocalizedName()); + GameRegistry.registerItem(cap_fritz, cap_fritz.getUnlocalizedName()); + GameRegistry.registerItem(ring_pull, ring_pull.getUnlocalizedName()); + GameRegistry.registerItem(can_key, can_key.getUnlocalizedName()); + GameRegistry.registerItem(coin_creeper, coin_creeper.getUnlocalizedName()); + GameRegistry.registerItem(coin_radiation,coin_radiation.getUnlocalizedName()); + GameRegistry.registerItem(coin_maskman, coin_maskman.getUnlocalizedName()); + GameRegistry.registerItem(coin_worm, coin_worm.getUnlocalizedName()); + GameRegistry.registerItem(coin_ufo, coin_ufo.getUnlocalizedName()); + GameRegistry.registerItem(medal_liquidator, medal_liquidator.getUnlocalizedName()); + GameRegistry.registerItem(bottled_cloud, bottled_cloud.getUnlocalizedName()); + GameRegistry.registerItem(protection_charm, protection_charm.getUnlocalizedName()); + GameRegistry.registerItem(meteor_charm, meteor_charm.getUnlocalizedName()); + GameRegistry.registerItem(neutrino_lens, neutrino_lens.getUnlocalizedName()); + GameRegistry.registerItem(gas_tester, gas_tester.getUnlocalizedName()); + GameRegistry.registerItem(defuser_gold, defuser_gold.getUnlocalizedName()); + GameRegistry.registerItem(ballistic_gauntlet, ballistic_gauntlet.getUnlocalizedName()); + GameRegistry.registerItem(night_vision, night_vision.getUnlocalizedName()); + GameRegistry.registerItem(card_aos, card_aos.getUnlocalizedName()); + GameRegistry.registerItem(card_qos, card_qos.getUnlocalizedName()); + GameRegistry.registerItem(australium_iii, australium_iii.getUnlocalizedName()); + GameRegistry.registerItem(armor_battery, armor_battery.getUnlocalizedName()); + GameRegistry.registerItem(armor_battery_mk2, armor_battery_mk2.getUnlocalizedName()); + GameRegistry.registerItem(armor_battery_mk3, armor_battery_mk3.getUnlocalizedName()); + + //Chaos + GameRegistry.registerItem(chocolate_milk, chocolate_milk.getUnlocalizedName()); + GameRegistry.registerItem(cbt_device, cbt_device.getUnlocalizedName()); + GameRegistry.registerItem(cigarette, cigarette.getUnlocalizedName()); + GameRegistry.registerItem(crackpipe, crackpipe.getUnlocalizedName()); + GameRegistry.registerItem(bdcl, bdcl.getUnlocalizedName()); + + //Armor mods + GameRegistry.registerItem(attachment_mask, attachment_mask.getUnlocalizedName()); + GameRegistry.registerItem(attachment_mask_mono, attachment_mask_mono.getUnlocalizedName()); + GameRegistry.registerItem(back_tesla, back_tesla.getUnlocalizedName()); + GameRegistry.registerItem(servo_set, servo_set.getUnlocalizedName()); + GameRegistry.registerItem(servo_set_desh, servo_set_desh.getUnlocalizedName()); + GameRegistry.registerItem(pads_rubber, pads_rubber.getUnlocalizedName()); + GameRegistry.registerItem(pads_slime, pads_slime.getUnlocalizedName()); + GameRegistry.registerItem(pads_static, pads_static.getUnlocalizedName()); + GameRegistry.registerItem(cladding_paint, cladding_paint.getUnlocalizedName()); + GameRegistry.registerItem(cladding_rubber, cladding_rubber.getUnlocalizedName()); + GameRegistry.registerItem(cladding_lead, cladding_lead.getUnlocalizedName()); + GameRegistry.registerItem(cladding_desh, cladding_desh.getUnlocalizedName()); + GameRegistry.registerItem(cladding_ghiorsium, cladding_ghiorsium.getUnlocalizedName()); + GameRegistry.registerItem(cladding_iron, cladding_iron.getUnlocalizedName()); + GameRegistry.registerItem(cladding_obsidian, cladding_obsidian.getUnlocalizedName()); + GameRegistry.registerItem(insert_kevlar, insert_kevlar.getUnlocalizedName()); + GameRegistry.registerItem(insert_sapi, insert_sapi.getUnlocalizedName()); + GameRegistry.registerItem(insert_esapi, insert_esapi.getUnlocalizedName()); + GameRegistry.registerItem(insert_xsapi, insert_xsapi.getUnlocalizedName()); + GameRegistry.registerItem(insert_steel, insert_steel.getUnlocalizedName()); + GameRegistry.registerItem(insert_du, insert_du.getUnlocalizedName()); + GameRegistry.registerItem(insert_polonium, insert_polonium.getUnlocalizedName()); + GameRegistry.registerItem(insert_ghiorsium, insert_ghiorsium.getUnlocalizedName()); + GameRegistry.registerItem(insert_era, insert_era.getUnlocalizedName()); + GameRegistry.registerItem(insert_yharonite, insert_yharonite.getUnlocalizedName()); + GameRegistry.registerItem(insert_doxium, insert_doxium.getUnlocalizedName()); + GameRegistry.registerItem(armor_polish, armor_polish.getUnlocalizedName()); + GameRegistry.registerItem(bandaid, bandaid.getUnlocalizedName()); + GameRegistry.registerItem(serum, serum.getUnlocalizedName()); + GameRegistry.registerItem(quartz_plutonium, quartz_plutonium.getUnlocalizedName()); + GameRegistry.registerItem(morning_glory, morning_glory.getUnlocalizedName()); + GameRegistry.registerItem(lodestone, lodestone.getUnlocalizedName()); + GameRegistry.registerItem(horseshoe_magnet, horseshoe_magnet.getUnlocalizedName()); + GameRegistry.registerItem(industrial_magnet, industrial_magnet.getUnlocalizedName()); + GameRegistry.registerItem(bathwater, bathwater.getUnlocalizedName()); + GameRegistry.registerItem(bathwater_mk2, bathwater_mk2.getUnlocalizedName()); + GameRegistry.registerItem(spider_milk, spider_milk.getUnlocalizedName()); + GameRegistry.registerItem(ink, ink.getUnlocalizedName()); + GameRegistry.registerItem(heart_piece, heart_piece.getUnlocalizedName()); + GameRegistry.registerItem(heart_container, heart_container.getUnlocalizedName()); + GameRegistry.registerItem(heart_booster, heart_booster.getUnlocalizedName()); + GameRegistry.registerItem(heart_fab, heart_fab.getUnlocalizedName()); + GameRegistry.registerItem(black_diamond, black_diamond.getUnlocalizedName()); + GameRegistry.registerItem(wd40, wd40.getUnlocalizedName()); + GameRegistry.registerItem(scrumpy, scrumpy.getUnlocalizedName()); + GameRegistry.registerItem(wild_p, wild_p.getUnlocalizedName()); + GameRegistry.registerItem(fabsols_vodka, fabsols_vodka.getUnlocalizedName()); + GameRegistry.registerItem(shackles, shackles.getUnlocalizedName()); + GameRegistry.registerItem(injector_5htp, injector_5htp.getUnlocalizedName()); + GameRegistry.registerItem(injector_knife, injector_knife.getUnlocalizedName()); + + //Vehicles + GameRegistry.registerItem(boat_rubber, boat_rubber.getUnlocalizedName()); + GameRegistry.registerItem(cart, cart.getUnlocalizedName()); + GameRegistry.registerItem(train, train.getUnlocalizedName()); + GameRegistry.registerItem(drone, drone.getUnlocalizedName()); + + //High Explosive Lenses + GameRegistry.registerItem(early_explosive_lenses, early_explosive_lenses.getUnlocalizedName()); + GameRegistry.registerItem(explosive_lenses, explosive_lenses.getUnlocalizedName()); + + //The Gadget + //GameRegistry.registerItem(gadget_explosive, gadget_explosive.getUnlocalizedName()); + GameRegistry.registerItem(gadget_wireing, gadget_wireing.getUnlocalizedName()); + GameRegistry.registerItem(gadget_core, gadget_core.getUnlocalizedName()); + + //Little Boy + GameRegistry.registerItem(boy_shielding, boy_shielding.getUnlocalizedName()); + GameRegistry.registerItem(boy_target, boy_target.getUnlocalizedName()); + GameRegistry.registerItem(boy_bullet, boy_bullet.getUnlocalizedName()); + GameRegistry.registerItem(boy_propellant, boy_propellant.getUnlocalizedName()); + GameRegistry.registerItem(boy_igniter, boy_igniter.getUnlocalizedName());; + + //Fat Man + //GameRegistry.registerItem(man_explosive, man_explosive.getUnlocalizedName()); + GameRegistry.registerItem(man_igniter, man_igniter.getUnlocalizedName()); + GameRegistry.registerItem(man_core, man_core.getUnlocalizedName()); + + //Ivy Mike + GameRegistry.registerItem(mike_core, mike_core.getUnlocalizedName()); + GameRegistry.registerItem(mike_deut, mike_deut.getUnlocalizedName()); + GameRegistry.registerItem(mike_cooling_unit, mike_cooling_unit.getUnlocalizedName()); + + //Tsar Bomba + GameRegistry.registerItem(tsar_core, tsar_core.getUnlocalizedName()); + + //FLEIJA + GameRegistry.registerItem(fleija_igniter, fleija_igniter.getUnlocalizedName()); + GameRegistry.registerItem(fleija_propellant, fleija_propellant.getUnlocalizedName()); + GameRegistry.registerItem(fleija_core, fleija_core.getUnlocalizedName()); + + //Solinium + GameRegistry.registerItem(solinium_igniter, solinium_igniter.getUnlocalizedName()); + GameRegistry.registerItem(solinium_propellant, solinium_propellant.getUnlocalizedName()); + GameRegistry.registerItem(solinium_core, solinium_core.getUnlocalizedName()); + + //N2 + GameRegistry.registerItem(n2_charge, n2_charge.getUnlocalizedName()); + + //FSTBMB + GameRegistry.registerItem(egg_balefire_shard, egg_balefire_shard.getUnlocalizedName()); + GameRegistry.registerItem(egg_balefire, egg_balefire.getUnlocalizedName()); + + //Conventional Armor + GameRegistry.registerItem(goggles, goggles.getUnlocalizedName()); + GameRegistry.registerItem(ashglasses, ashglasses.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask, gas_mask.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_m65, gas_mask_m65.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_mono, gas_mask_mono.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_olde, gas_mask_olde.getUnlocalizedName()); + GameRegistry.registerItem(mask_rag, mask_rag.getUnlocalizedName()); + GameRegistry.registerItem(mask_piss, mask_piss.getUnlocalizedName()); + //GameRegistry.registerItem(oxy_mask, oxy_mask.getUnlocalizedName()); + GameRegistry.registerItem(hat, hat.getUnlocalizedName()); + GameRegistry.registerItem(beta, beta.getUnlocalizedName()); + GameRegistry.registerItem(no9, no9.getUnlocalizedName()); + + GameRegistry.registerItem(steel_helmet, steel_helmet.getUnlocalizedName()); + GameRegistry.registerItem(steel_plate, steel_plate.getUnlocalizedName()); + GameRegistry.registerItem(steel_legs, steel_legs.getUnlocalizedName()); + GameRegistry.registerItem(steel_boots, steel_boots.getUnlocalizedName()); + GameRegistry.registerItem(titanium_helmet, titanium_helmet.getUnlocalizedName()); + GameRegistry.registerItem(titanium_plate, titanium_plate.getUnlocalizedName()); + GameRegistry.registerItem(titanium_legs, titanium_legs.getUnlocalizedName()); + GameRegistry.registerItem(titanium_boots, titanium_boots.getUnlocalizedName()); + GameRegistry.registerItem(alloy_helmet, alloy_helmet.getUnlocalizedName()); + GameRegistry.registerItem(alloy_plate, alloy_plate.getUnlocalizedName()); + GameRegistry.registerItem(alloy_legs, alloy_legs.getUnlocalizedName()); + GameRegistry.registerItem(alloy_boots, alloy_boots.getUnlocalizedName()); + + //Custom Rods + GameRegistry.registerItem(custom_tnt, custom_tnt.getUnlocalizedName()); + GameRegistry.registerItem(custom_nuke, custom_nuke.getUnlocalizedName()); + GameRegistry.registerItem(custom_hydro, custom_hydro.getUnlocalizedName()); + GameRegistry.registerItem(custom_amat, custom_amat.getUnlocalizedName()); + GameRegistry.registerItem(custom_dirty, custom_dirty.getUnlocalizedName()); + GameRegistry.registerItem(custom_schrab, custom_schrab.getUnlocalizedName()); + GameRegistry.registerItem(custom_fall, custom_fall.getUnlocalizedName()); + + //Power Armor + GameRegistry.registerItem(steamsuit_helmet, steamsuit_helmet.getUnlocalizedName()); + GameRegistry.registerItem(steamsuit_plate, steamsuit_plate.getUnlocalizedName()); + GameRegistry.registerItem(steamsuit_legs, steamsuit_legs.getUnlocalizedName()); + GameRegistry.registerItem(steamsuit_boots, steamsuit_boots.getUnlocalizedName()); + GameRegistry.registerItem(dieselsuit_helmet, dieselsuit_helmet.getUnlocalizedName()); + GameRegistry.registerItem(dieselsuit_plate, dieselsuit_plate.getUnlocalizedName()); + GameRegistry.registerItem(dieselsuit_legs, dieselsuit_legs.getUnlocalizedName()); + GameRegistry.registerItem(dieselsuit_boots, dieselsuit_boots.getUnlocalizedName()); + GameRegistry.registerItem(t45_helmet, t45_helmet.getUnlocalizedName()); + GameRegistry.registerItem(t45_plate, t45_plate.getUnlocalizedName()); + GameRegistry.registerItem(t45_legs, t45_legs.getUnlocalizedName()); + GameRegistry.registerItem(t45_boots, t45_boots.getUnlocalizedName()); + GameRegistry.registerItem(ajr_helmet, ajr_helmet.getUnlocalizedName()); + GameRegistry.registerItem(ajr_plate, ajr_plate.getUnlocalizedName()); + GameRegistry.registerItem(ajr_legs, ajr_legs.getUnlocalizedName()); + GameRegistry.registerItem(ajr_boots, ajr_boots.getUnlocalizedName()); + GameRegistry.registerItem(ajro_helmet, ajro_helmet.getUnlocalizedName()); + GameRegistry.registerItem(ajro_plate, ajro_plate.getUnlocalizedName()); + GameRegistry.registerItem(ajro_legs, ajro_legs.getUnlocalizedName()); + GameRegistry.registerItem(ajro_boots, ajro_boots.getUnlocalizedName()); + GameRegistry.registerItem(rpa_helmet, rpa_helmet.getUnlocalizedName()); + GameRegistry.registerItem(rpa_plate, rpa_plate.getUnlocalizedName()); + GameRegistry.registerItem(rpa_legs, rpa_legs.getUnlocalizedName()); + GameRegistry.registerItem(rpa_boots, rpa_boots.getUnlocalizedName()); + GameRegistry.registerItem(bj_helmet, bj_helmet.getUnlocalizedName()); + GameRegistry.registerItem(bj_plate, bj_plate.getUnlocalizedName()); + GameRegistry.registerItem(bj_plate_jetpack, bj_plate_jetpack.getUnlocalizedName()); + GameRegistry.registerItem(bj_legs, bj_legs.getUnlocalizedName()); + GameRegistry.registerItem(bj_boots, bj_boots.getUnlocalizedName()); + GameRegistry.registerItem(envsuit_helmet, envsuit_helmet.getUnlocalizedName()); + GameRegistry.registerItem(envsuit_plate, envsuit_plate.getUnlocalizedName()); + GameRegistry.registerItem(envsuit_legs, envsuit_legs.getUnlocalizedName()); + GameRegistry.registerItem(envsuit_boots, envsuit_boots.getUnlocalizedName()); + GameRegistry.registerItem(hev_helmet, hev_helmet.getUnlocalizedName()); + GameRegistry.registerItem(hev_plate, hev_plate.getUnlocalizedName()); + GameRegistry.registerItem(hev_legs, hev_legs.getUnlocalizedName()); + GameRegistry.registerItem(hev_boots, hev_boots.getUnlocalizedName()); + GameRegistry.registerItem(fau_helmet, fau_helmet.getUnlocalizedName()); + GameRegistry.registerItem(fau_plate, fau_plate.getUnlocalizedName()); + GameRegistry.registerItem(fau_legs, fau_legs.getUnlocalizedName()); + GameRegistry.registerItem(fau_boots, fau_boots.getUnlocalizedName()); + GameRegistry.registerItem(dns_helmet, dns_helmet.getUnlocalizedName()); + GameRegistry.registerItem(dns_plate, dns_plate.getUnlocalizedName()); + GameRegistry.registerItem(dns_legs, dns_legs.getUnlocalizedName()); + GameRegistry.registerItem(dns_boots, dns_boots.getUnlocalizedName()); + GameRegistry.registerItem(taurun_helmet, taurun_helmet.getUnlocalizedName()); + GameRegistry.registerItem(taurun_plate, taurun_plate.getUnlocalizedName()); + GameRegistry.registerItem(taurun_legs, taurun_legs.getUnlocalizedName()); + GameRegistry.registerItem(taurun_boots, taurun_boots.getUnlocalizedName()); + GameRegistry.registerItem(trenchmaster_helmet, trenchmaster_helmet.getUnlocalizedName()); + GameRegistry.registerItem(trenchmaster_plate, trenchmaster_plate.getUnlocalizedName()); + GameRegistry.registerItem(trenchmaster_legs, trenchmaster_legs.getUnlocalizedName()); + GameRegistry.registerItem(trenchmaster_boots, trenchmaster_boots.getUnlocalizedName()); + + //Nobody will ever read this anyway, so it shouldn't matter. + GameRegistry.registerItem(chainsaw, chainsaw.getUnlocalizedName()); + GameRegistry.registerItem(igniter, igniter.getUnlocalizedName()); + GameRegistry.registerItem(detonator, detonator.getUnlocalizedName()); + GameRegistry.registerItem(detonator_multi, detonator_multi.getUnlocalizedName()); + GameRegistry.registerItem(detonator_laser, detonator_laser.getUnlocalizedName()); + GameRegistry.registerItem(detonator_deadman, detonator_deadman.getUnlocalizedName()); + GameRegistry.registerItem(detonator_de, detonator_de.getUnlocalizedName()); + GameRegistry.registerItem(bomb_caller, bomb_caller.getUnlocalizedName()); + GameRegistry.registerItem(meteor_remote, meteor_remote.getUnlocalizedName()); + GameRegistry.registerItem(anchor_remote, anchor_remote.getUnlocalizedName()); + GameRegistry.registerItem(defuser, defuser.getUnlocalizedName()); + GameRegistry.registerItem(reacher, reacher.getUnlocalizedName()); + GameRegistry.registerItem(bismuth_tool, bismuth_tool.getUnlocalizedName()); + GameRegistry.registerItem(meltdown_tool, meltdown_tool.getUnlocalizedName()); + + GameRegistry.registerItem(hazmat_helmet, hazmat_helmet.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_plate, hazmat_plate.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_legs, hazmat_legs.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_boots, hazmat_boots.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_helmet_red, hazmat_helmet_red.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_plate_red, hazmat_plate_red.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_legs_red, hazmat_legs_red.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_boots_red, hazmat_boots_red.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_helmet_grey, hazmat_helmet_grey.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_plate_grey, hazmat_plate_grey.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_legs_grey, hazmat_legs_grey.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_boots_grey, hazmat_boots_grey.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_paa_helmet, hazmat_paa_helmet.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_paa_plate, hazmat_paa_plate.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_paa_legs, hazmat_paa_legs.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_paa_boots, hazmat_paa_boots.getUnlocalizedName()); + GameRegistry.registerItem(liquidator_helmet, liquidator_helmet.getUnlocalizedName()); + GameRegistry.registerItem(liquidator_plate, liquidator_plate.getUnlocalizedName()); + GameRegistry.registerItem(liquidator_legs, liquidator_legs.getUnlocalizedName()); + GameRegistry.registerItem(liquidator_boots, liquidator_boots.getUnlocalizedName()); + GameRegistry.registerItem(cmb_helmet, cmb_helmet.getUnlocalizedName()); + GameRegistry.registerItem(cmb_plate, cmb_plate.getUnlocalizedName()); + GameRegistry.registerItem(cmb_legs, cmb_legs.getUnlocalizedName()); + GameRegistry.registerItem(cmb_boots, cmb_boots.getUnlocalizedName()); + GameRegistry.registerItem(paa_plate, paa_plate.getUnlocalizedName()); + GameRegistry.registerItem(paa_legs, paa_legs.getUnlocalizedName()); + GameRegistry.registerItem(paa_boots, paa_boots.getUnlocalizedName()); + GameRegistry.registerItem(asbestos_helmet, asbestos_helmet.getUnlocalizedName()); + GameRegistry.registerItem(asbestos_plate, asbestos_plate.getUnlocalizedName()); + GameRegistry.registerItem(asbestos_legs, asbestos_legs.getUnlocalizedName()); + GameRegistry.registerItem(asbestos_boots, asbestos_boots.getUnlocalizedName()); + GameRegistry.registerItem(security_helmet, security_helmet.getUnlocalizedName()); + GameRegistry.registerItem(security_plate, security_plate.getUnlocalizedName()); + GameRegistry.registerItem(security_legs, security_legs.getUnlocalizedName()); + GameRegistry.registerItem(security_boots, security_boots.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_helmet, cobalt_helmet.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_plate, cobalt_plate.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_legs, cobalt_legs.getUnlocalizedName()); + GameRegistry.registerItem(cobalt_boots, cobalt_boots.getUnlocalizedName()); + GameRegistry.registerItem(starmetal_helmet, starmetal_helmet.getUnlocalizedName()); + GameRegistry.registerItem(starmetal_plate, starmetal_plate.getUnlocalizedName()); + GameRegistry.registerItem(starmetal_legs, starmetal_legs.getUnlocalizedName()); + GameRegistry.registerItem(starmetal_boots, starmetal_boots.getUnlocalizedName()); + GameRegistry.registerItem(zirconium_legs, zirconium_legs.getUnlocalizedName()); + GameRegistry.registerItem(dnt_helmet, dnt_helmet.getUnlocalizedName()); + GameRegistry.registerItem(dnt_plate, dnt_plate.getUnlocalizedName()); + GameRegistry.registerItem(dnt_legs, dnt_legs.getUnlocalizedName()); + GameRegistry.registerItem(dnt_boots, dnt_boots.getUnlocalizedName()); + GameRegistry.registerItem(schrabidium_helmet, schrabidium_helmet.getUnlocalizedName()); + GameRegistry.registerItem(schrabidium_plate, schrabidium_plate.getUnlocalizedName()); + GameRegistry.registerItem(schrabidium_legs, schrabidium_legs.getUnlocalizedName()); + GameRegistry.registerItem(schrabidium_boots, schrabidium_boots.getUnlocalizedName()); + GameRegistry.registerItem(bismuth_helmet, bismuth_helmet.getUnlocalizedName()); + GameRegistry.registerItem(bismuth_plate, bismuth_plate.getUnlocalizedName()); + GameRegistry.registerItem(bismuth_legs, bismuth_legs.getUnlocalizedName()); + GameRegistry.registerItem(bismuth_boots, bismuth_boots.getUnlocalizedName()); + GameRegistry.registerItem(euphemium_helmet, euphemium_helmet.getUnlocalizedName()); + GameRegistry.registerItem(euphemium_plate, euphemium_plate.getUnlocalizedName()); + GameRegistry.registerItem(euphemium_legs, euphemium_legs.getUnlocalizedName()); + GameRegistry.registerItem(euphemium_boots, euphemium_boots.getUnlocalizedName()); + GameRegistry.registerItem(robes_helmet, robes_helmet.getUnlocalizedName()); + GameRegistry.registerItem(robes_plate, robes_plate.getUnlocalizedName()); + GameRegistry.registerItem(robes_legs, robes_legs.getUnlocalizedName()); + GameRegistry.registerItem(robes_boots, robes_boots.getUnlocalizedName()); + GameRegistry.registerItem(apple_euphemium, apple_euphemium.getUnlocalizedName()); + GameRegistry.registerItem(watch, watch.getUnlocalizedName()); + GameRegistry.registerItem(mask_of_infamy, mask_of_infamy.getUnlocalizedName()); + GameRegistry.registerItem(jackt, jackt.getUnlocalizedName()); + GameRegistry.registerItem(jackt2, jackt2.getUnlocalizedName()); + GameRegistry.registerItem(jetpack_fly, jetpack_fly.getUnlocalizedName()); + GameRegistry.registerItem(jetpack_break, jetpack_break.getUnlocalizedName()); + GameRegistry.registerItem(jetpack_vector, jetpack_vector.getUnlocalizedName()); + GameRegistry.registerItem(jetpack_boost, jetpack_boost.getUnlocalizedName()); + GameRegistry.registerItem(wings_limp, wings_limp.getUnlocalizedName()); + GameRegistry.registerItem(wings_murk, wings_murk.getUnlocalizedName()); + //GameRegistry.registerItem(australium_iv, australium_iv.getUnlocalizedName()); + //GameRegistry.registerItem(australium_v, australium_v.getUnlocalizedName()); + + //Expensive Ass Shit + GameRegistry.registerItem(crystal_horn, crystal_horn.getUnlocalizedName()); + GameRegistry.registerItem(crystal_charred, crystal_charred.getUnlocalizedName()); + + //OP Tools + GameRegistry.registerItem(wand, wand.getUnlocalizedName()); + GameRegistry.registerItem(wand_s, wand_s.getUnlocalizedName()); + GameRegistry.registerItem(wand_d, wand_d.getUnlocalizedName()); + GameRegistry.registerItem(structure_single, structure_single.getUnlocalizedName()); + GameRegistry.registerItem(structure_solid, structure_solid.getUnlocalizedName()); + GameRegistry.registerItem(structure_pattern, structure_pattern.getUnlocalizedName()); + GameRegistry.registerItem(structure_randomized, structure_randomized.getUnlocalizedName()); + GameRegistry.registerItem(structure_randomly, structure_randomly.getUnlocalizedName()); + GameRegistry.registerItem(structure_custommachine, structure_custommachine.getUnlocalizedName()); + GameRegistry.registerItem(rod_of_discord, rod_of_discord.getUnlocalizedName()); + GameRegistry.registerItem(polaroid, polaroid.getUnlocalizedName()); + GameRegistry.registerItem(glitch, glitch.getUnlocalizedName()); + GameRegistry.registerItem(book_secret, book_secret.getUnlocalizedName()); + GameRegistry.registerItem(book_of_, book_of_.getUnlocalizedName()); + GameRegistry.registerItem(page_of_, page_of_.getUnlocalizedName()); + GameRegistry.registerItem(book_lemegeton, book_lemegeton.getUnlocalizedName()); + GameRegistry.registerItem(burnt_bark, burnt_bark.getUnlocalizedName()); + + //Kits + GameRegistry.registerItem(nuke_starter_kit, nuke_starter_kit.getUnlocalizedName()); + GameRegistry.registerItem(nuke_advanced_kit, nuke_advanced_kit.getUnlocalizedName()); + GameRegistry.registerItem(nuke_commercially_kit, nuke_commercially_kit.getUnlocalizedName()); + GameRegistry.registerItem(nuke_electric_kit, nuke_electric_kit.getUnlocalizedName()); + GameRegistry.registerItem(gadget_kit, gadget_kit.getUnlocalizedName()); + GameRegistry.registerItem(boy_kit, boy_kit.getUnlocalizedName()); + GameRegistry.registerItem(man_kit, man_kit.getUnlocalizedName()); + GameRegistry.registerItem(mike_kit, mike_kit.getUnlocalizedName()); + GameRegistry.registerItem(tsar_kit, tsar_kit.getUnlocalizedName()); + GameRegistry.registerItem(prototype_kit, prototype_kit.getUnlocalizedName()); + GameRegistry.registerItem(fleija_kit, fleija_kit.getUnlocalizedName()); + GameRegistry.registerItem(solinium_kit, solinium_kit.getUnlocalizedName()); + GameRegistry.registerItem(multi_kit, multi_kit.getUnlocalizedName()); + GameRegistry.registerItem(custom_kit, custom_kit.getUnlocalizedName()); + GameRegistry.registerItem(missile_kit, missile_kit.getUnlocalizedName()); + GameRegistry.registerItem(grenade_kit, grenade_kit.getUnlocalizedName()); + GameRegistry.registerItem(t45_kit, t45_kit.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_kit, hazmat_kit.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_red_kit, hazmat_red_kit.getUnlocalizedName()); + GameRegistry.registerItem(hazmat_grey_kit, hazmat_grey_kit.getUnlocalizedName()); + GameRegistry.registerItem(kit_custom, kit_custom.getUnlocalizedName()); + GameRegistry.registerItem(euphemium_kit, euphemium_kit.getUnlocalizedName()); + GameRegistry.registerItem(legacy_toolbox, legacy_toolbox.getUnlocalizedName()); + GameRegistry.registerItem(toolbox, toolbox.getUnlocalizedName()); + GameRegistry.registerItem(letter, letter.getUnlocalizedName()); + + //Misile Loot Boxes + GameRegistry.registerItem(loot_10, loot_10.getUnlocalizedName()); + GameRegistry.registerItem(loot_15, loot_15.getUnlocalizedName()); + GameRegistry.registerItem(loot_misc, loot_misc.getUnlocalizedName()); + + //THIS is a bucket. + GameRegistry.registerItem(bucket_mud, bucket_mud.getUnlocalizedName()); + GameRegistry.registerItem(bucket_acid, bucket_acid.getUnlocalizedName()); + GameRegistry.registerItem(bucket_toxic, bucket_toxic.getUnlocalizedName()); + GameRegistry.registerItem(bucket_schrabidic_acid, bucket_schrabidic_acid.getUnlocalizedName()); + GameRegistry.registerItem(bucket_sulfuric_acid, bucket_sulfuric_acid.getUnlocalizedName()); + + //Door Items + GameRegistry.registerItem(door_metal, door_metal.getUnlocalizedName()); + GameRegistry.registerItem(door_office, door_office.getUnlocalizedName()); + GameRegistry.registerItem(door_bunker, door_bunker.getUnlocalizedName()); + GameRegistry.registerItem(door_red, door_red.getUnlocalizedName()); + GameRegistry.registerItem(sliding_blast_door_skin, sliding_blast_door_skin.getUnlocalizedName()); + + //Records + GameRegistry.registerItem(record_lc, record_lc.getUnlocalizedName()); + GameRegistry.registerItem(record_ss, record_ss.getUnlocalizedName()); + GameRegistry.registerItem(record_vc, record_vc.getUnlocalizedName()); + GameRegistry.registerItem(record_glass, record_glass.getUnlocalizedName()); + + //wow we're far down the item registry, is this the cellar? + GameRegistry.registerItem(book_guide, book_guide.getUnlocalizedName()); + GameRegistry.registerItem(book_lore, book_lore.getUnlocalizedName()); + GameRegistry.registerItem(holotape_image, holotape_image.getUnlocalizedName()); + GameRegistry.registerItem(holotape_damaged, holotape_damaged.getUnlocalizedName()); + GameRegistry.registerItem(clay_tablet, clay_tablet.getUnlocalizedName()); + + //Technical Items + GameRegistry.registerItem(chlorine1, chlorine1.getUnlocalizedName()); + GameRegistry.registerItem(chlorine2, chlorine2.getUnlocalizedName()); + GameRegistry.registerItem(chlorine3, chlorine3.getUnlocalizedName()); + GameRegistry.registerItem(chlorine4, chlorine4.getUnlocalizedName()); + GameRegistry.registerItem(chlorine5, chlorine5.getUnlocalizedName()); + GameRegistry.registerItem(chlorine6, chlorine6.getUnlocalizedName()); + GameRegistry.registerItem(chlorine7, chlorine7.getUnlocalizedName()); + GameRegistry.registerItem(chlorine8, chlorine8.getUnlocalizedName()); + GameRegistry.registerItem(pc1, pc1.getUnlocalizedName()); + GameRegistry.registerItem(pc2, pc2.getUnlocalizedName()); + GameRegistry.registerItem(pc3, pc3.getUnlocalizedName()); + GameRegistry.registerItem(pc4, pc4.getUnlocalizedName()); + GameRegistry.registerItem(pc5, pc5.getUnlocalizedName()); + GameRegistry.registerItem(pc6, pc6.getUnlocalizedName()); + GameRegistry.registerItem(pc7, pc7.getUnlocalizedName()); + GameRegistry.registerItem(pc8, pc8.getUnlocalizedName()); + GameRegistry.registerItem(cloud1, cloud1.getUnlocalizedName()); + GameRegistry.registerItem(cloud2, cloud2.getUnlocalizedName()); + GameRegistry.registerItem(cloud3, cloud3.getUnlocalizedName()); + GameRegistry.registerItem(cloud4, cloud4.getUnlocalizedName()); + GameRegistry.registerItem(cloud5, cloud5.getUnlocalizedName()); + GameRegistry.registerItem(cloud6, cloud6.getUnlocalizedName()); + GameRegistry.registerItem(cloud7, cloud7.getUnlocalizedName()); + GameRegistry.registerItem(cloud8, cloud8.getUnlocalizedName()); + GameRegistry.registerItem(orange1, orange1.getUnlocalizedName()); + GameRegistry.registerItem(orange2, orange2.getUnlocalizedName()); + GameRegistry.registerItem(orange3, orange3.getUnlocalizedName()); + GameRegistry.registerItem(orange4, orange4.getUnlocalizedName()); + GameRegistry.registerItem(orange5, orange5.getUnlocalizedName()); + GameRegistry.registerItem(orange6, orange6.getUnlocalizedName()); + GameRegistry.registerItem(orange7, orange7.getUnlocalizedName()); + GameRegistry.registerItem(orange8, orange8.getUnlocalizedName()); + GameRegistry.registerItem(nothing, nothing.getUnlocalizedName()); + GameRegistry.registerItem(achievement_icon, achievement_icon.getUnlocalizedName()); + GameRegistry.registerItem(bob_metalworks, bob_metalworks.getUnlocalizedName()); + GameRegistry.registerItem(bob_assembly, bob_assembly.getUnlocalizedName()); + GameRegistry.registerItem(bob_chemistry, bob_chemistry.getUnlocalizedName()); + GameRegistry.registerItem(bob_oil, bob_oil.getUnlocalizedName()); + GameRegistry.registerItem(bob_nuclear, bob_nuclear.getUnlocalizedName()); + GameRegistry.registerItem(mysteryshovel, mysteryshovel.getUnlocalizedName()); + GameRegistry.registerItem(memory, memory.getUnlocalizedName()); + GameRegistry.registerItem(conveyor_wand, conveyor_wand.getUnlocalizedName()); + } + + public static void addRemap(String unloc, Item item, Enum sub) { + addRemap(unloc, item, sub.ordinal()); + } + + public static void addRemap(String unloc, Item item, int meta) { + Item remap = new ItemRemap(item, meta).setUnlocalizedName(unloc).setTextureName(RefStrings.MODID + ":plate_armor_titanium"); + GameRegistry.registerItem(remap, remap.getUnlocalizedName()); + } +} diff --git a/src/main/java/com/hbm/items/tool/ItemSwordAbility.java b/src/main/java/com/hbm/items/tool/ItemSwordAbility.java index f54f47446..de6cafdb4 100644 --- a/src/main/java/com/hbm/items/tool/ItemSwordAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemSwordAbility.java @@ -1,11 +1,11 @@ package com.hbm.items.tool; -import java.util.ArrayList; import java.util.List; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.hbm.handler.WeaponAbility; +import com.hbm.handler.ability.AvailableAbilities; +import com.hbm.handler.ability.IWeaponAbility; import com.hbm.items.ModItems; import cpw.mods.fml.relauncher.Side; @@ -19,13 +19,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.util.EnumChatFormatting; -public class ItemSwordAbility extends ItemSword implements IItemWithAbility { +public class ItemSwordAbility extends ItemSword { private EnumRarity rarity = EnumRarity.common; // was there a reason for this to be private? protected float damage; protected double movement; - private List hitAbility = new ArrayList(); + private AvailableAbilities hitAbilities = new AvailableAbilities(); public ItemSwordAbility(float damage, double movement, ToolMaterial material) { super(material); @@ -33,8 +33,8 @@ public class ItemSwordAbility extends ItemSword implements IItemWithAbility { this.movement = movement; } - public ItemSwordAbility addHitAbility(WeaponAbility weaponAbility) { - this.hitAbility.add(weaponAbility); + public ItemSwordAbility addHitAbility(IWeaponAbility weaponAbility, int level) { + this.hitAbilities.addAbility(weaponAbility, level); return this; } @@ -50,15 +50,15 @@ public class ItemSwordAbility extends ItemSword implements IItemWithAbility { public boolean hitEntity(ItemStack stack, EntityLivingBase victim, EntityLivingBase attacker) { - if(!attacker.worldObj.isRemote && !this.hitAbility.isEmpty() && attacker instanceof EntityPlayer && canOperate(stack)) { + if(!attacker.worldObj.isRemote && attacker instanceof EntityPlayer && canOperate(stack)) { // hacky hacky hack if(this == ModItems.mese_gavel) attacker.worldObj.playSoundAtEntity(victim, "hbm:weapon.whack", 3.0F, 1.F); - for(WeaponAbility ability : this.hitAbility) { - ability.onHit(attacker.worldObj, (EntityPlayer) attacker, victim, this); - } + this.hitAbilities.get().forEach((ability, level) -> { + ((IWeaponAbility)ability).onHit(level, attacker.worldObj, (EntityPlayer) attacker, victim, this); + }); } stack.damageItem(1, attacker); @@ -77,23 +77,10 @@ public class ItemSwordAbility extends ItemSword implements IItemWithAbility { @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - - if(!this.hitAbility.isEmpty()) { - - list.add("Weapon modifiers: "); - - for(WeaponAbility ability : this.hitAbility) { - list.add(" " + EnumChatFormatting.RED + ability.getFullName()); - } - } + hitAbilities.addInformation(list); } protected boolean canOperate(ItemStack stack) { return true; } - - @Override - public boolean isShears(ItemStack stack) { - return false; - } } diff --git a/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png b/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png index 04e94e87826698d1ddda65718545601c72a63bb8..6b1a5c68b8894c7926c73afd222f60f424a217b9 100644 GIT binary patch literal 4455 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 literal 4131 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 Y+%?sns|xME13Sgm%F&W|!SCkZ0a)dVX8-^I From c1908637852f5896c628eb49ed173187eb4086b7 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 17 May 2025 21:55:23 +0300 Subject: [PATCH 035/491] Reimplement ItemToolAbility I'll be very impressed if it works correctly right away. But, to my credit, it does compile --- .../java/com/hbm/handler/ToolAbility.java | 622 ------------------ .../java/com/hbm/handler/WeaponAbility.java | 369 ----------- .../handler/ability/AvailableAbilities.java | 43 +- .../hbm/handler/ability/IToolAreaAbility.java | 28 +- .../handler/ability/IToolHarvestAbility.java | 16 +- .../hbm/handler/ability/IWeaponAbility.java | 12 +- .../com/hbm/handler/ability/ToolPreset.java | 76 ++- .../inventory/gui/GUIScreenToolAbility.java | 203 +++--- src/main/java/com/hbm/items/ModItems.java | 451 ++++++------- .../com/hbm/items/tool/IItemWithAbility.java | 181 ----- .../com/hbm/items/tool/ItemSwordAbility.java | 12 +- .../com/hbm/items/tool/ItemToolAbility.java | 369 ++++++++--- 12 files changed, 730 insertions(+), 1652 deletions(-) delete mode 100644 src/main/java/com/hbm/handler/ToolAbility.java delete mode 100644 src/main/java/com/hbm/handler/WeaponAbility.java delete mode 100644 src/main/java/com/hbm/items/tool/IItemWithAbility.java diff --git a/src/main/java/com/hbm/handler/ToolAbility.java b/src/main/java/com/hbm/handler/ToolAbility.java deleted file mode 100644 index e41813af1..000000000 --- a/src/main/java/com/hbm/handler/ToolAbility.java +++ /dev/null @@ -1,622 +0,0 @@ -package com.hbm.handler; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import com.hbm.config.ToolConfig; -import com.hbm.explosion.ExplosionNT; -import com.hbm.explosion.ExplosionNT.ExAttrib; -import com.hbm.inventory.fluid.Fluids; -import com.hbm.inventory.recipes.CentrifugeRecipes; -import com.hbm.inventory.recipes.CrystallizerRecipes; -import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe; -import com.hbm.inventory.recipes.ShredderRecipes; -import com.hbm.items.ModItems; -import com.hbm.items.tool.IItemWithAbility; -import com.hbm.util.EnchantmentUtil; - -import net.minecraft.block.Block; -import net.minecraft.client.resources.I18n; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -public abstract class ToolAbility { - - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { return false; } - public abstract String getName(); - public abstract String getFullName(); - public abstract String getExtension(); - public abstract boolean isAllowed(); - - public static class RecursionAbility extends ToolAbility { - - int radius; - - public RecursionAbility(int radius) { - this.radius = radius; - } - - private Set pos = new HashSet(); - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - - Block b = world.getBlock(x, y, z); - - if(b == Blocks.stone && !ToolConfig.recursiveStone) - return false; - if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) - return false; - - pos.clear(); - - recurse(world, x, y, z, x, y, z, player, tool, 0); - - return false; - } - - private static final List offsets = new ArrayList<>(3*3*3-1); - - static { - for (int dx = -1; dx <= 1; dx++) { - for (int dy = -1; dy <= 1; dy++) { - for (int dz = -1; dz <= 1; dz++) { - if (dx != 0 || dy != 0 || dz != 0) { - offsets.add(new ThreeInts(dx, dy, dz)); - } - } - } - } - } - - private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth) { - - List shuffledOffsets = new ArrayList<>(offsets); - Collections.shuffle(shuffledOffsets); - - for(ThreeInts offset : shuffledOffsets) { - breakExtra(world, x + offset.x, y + offset.y, z + offset.z, refX, refY, refZ, player, tool, depth); - } - } - - private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth) { - - if(pos.contains(new ThreeInts(x, y, z))) - return; - - depth += 1; - - if(depth > ToolConfig.recursionDepth) - return; - - pos.add(new ThreeInts(x, y, z)); - - //don't lose the ref block just yet - if(x == refX && y == refY && z == refZ) - return; - - if(Vec3.createVectorHelper(x - refX, y - refY, z - refZ).lengthVector() > radius) - return; - - Block b = world.getBlock(x, y, z); - Block ref = world.getBlock(refX, refY, refZ); - int meta = world.getBlockMetadata(x, y, z); - int refMeta = world.getBlockMetadata(refX, refY, refZ); - - if(!isSameBlock(b, ref)) - return; - - if(meta != refMeta) - return; - - if(player.getHeldItem() == null) - return; - - tool.breakExtraBlock(world, x, y, z, player, refX, refY, refZ); - - recurse(world, x, y, z, refX, refY, refZ, player, tool, depth); - } - - private boolean isSameBlock(Block b1, Block b2) { - - if(b1 == b2) return true; - if((b1 == Blocks.redstone_ore && b2 == Blocks.lit_redstone_ore) || (b1 == Blocks.lit_redstone_ore && b2 == Blocks.redstone_ore)) return true; - - return false; - } - - @Override - public String getName() { - return "tool.ability.recursion"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + getExtension(); - } - - @Override - public String getExtension() { - return " (" + radius + ")"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityVein; - } - } - - public static class HammerAbility extends ToolAbility { - - int range; - - public HammerAbility(int range) { - this.range = range; - } - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - - for(int a = x - range; a <= x + range; a++) { - for(int b = y - range; b <= y + range; b++) { - for(int c = z - range; c <= z + range; c++) { - - if(a == x && b == y && c == z) - continue; - - tool.breakExtraBlock(world, a, b ,c, player, x, y, z); - } - } - } - - return false; - } - - @Override - public String getName() { - return "tool.ability.hammer"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + getExtension(); - } - - @Override - public String getExtension() { - return " (" + range + ")"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityHammer; - } - } - - public static class HammerSilkAbility extends ToolAbility { - - int range; - - public HammerSilkAbility(int range) { - this.range = range; - } - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - if(EnchantmentHelper.getSilkTouchModifier(player) || player.getHeldItem() == null) - return false; - - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); - - for(int a = x - range; a <= x + range; a++) { - for(int b = y - range; b <= y + range; b++) { - for(int c = z - range; c <= z + range; c++) { - - if(a == x && b == y && c == z) - continue; - - tool.breakExtraBlock(world, a, b ,c, player, x, y, z); - } - } - } - if(player instanceof EntityPlayerMP) - IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); - - EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); - - return false; - - } - - @Override - public String getName() { - return "tool.ability.hammersilk"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + getExtension(); - } - - @Override - public String getExtension() { - return " (" + range + ")"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityHammer; - } - } - - public static class SilkAbility extends ToolAbility { - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - - if(EnchantmentHelper.getSilkTouchModifier(player) || player.getHeldItem() == null) - return false; - - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); - - if(player instanceof EntityPlayerMP) - IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); - - EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); - - return true; - } - - @Override - public String getName() { - return "tool.ability.silktouch"; - } - - @Override - public String getFullName() { - return I18n.format(getName()); - } - - @Override - public String getExtension() { - return ""; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilitySilk; - } - } - - public static class LuckAbility extends ToolAbility { - - int luck; - - public LuckAbility(int luck) { - this.luck = luck; - } - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - - if(EnchantmentHelper.getFortuneModifier(player) > 0 || player.getHeldItem() == null) - return false; - - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, luck); - - if(player instanceof EntityPlayerMP) - IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); - - EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune); - - return true; - } - - @Override - public String getName() { - return "tool.ability.luck"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + getExtension(); - } - - @Override - public String getExtension() { - return " (" + luck + ")"; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityLuck; - } - } - - public static class SmelterAbility extends ToolAbility { - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - - List drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0); - - boolean doesSmelt = false; - - for(int i = 0; i < drops.size(); i++) { - ItemStack stack = drops.get(i).copy(); - ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(stack); - - if(result != null) { - result = result.copy(); - result.stackSize *= stack.stackSize; - drops.set(i, result); - doesSmelt = true; - } - } - - if(doesSmelt) { - world.setBlockToAir(x, y, z); - player.getHeldItem().damageItem(1, player); - - for(ItemStack stack : drops) - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy())); - } - - return false; - } - - @Override - public String getName() { - return "tool.ability.smelter"; - } - - @Override - public String getFullName() { - return I18n.format(getName()); - } - - @Override - public String getExtension() { - return ""; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityFurnace; - } - } - - public static class ShredderAbility extends ToolAbility { - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - ItemStack stack = new ItemStack(block, 1, meta); - ItemStack result = ShredderRecipes.getShredderResult(stack); - - if(result != null && result.getItem() != ModItems.scrap) { - world.setBlockToAir(x, y, z); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy())); - player.getHeldItem().damageItem(1, player); - } - - return false; - } - - @Override - public String getName() { - return "tool.ability.shredder"; - } - - @Override - public String getFullName() { - return I18n.format(getName()); - } - - @Override - public String getExtension() { - return ""; - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityShredder; - } - } - - public static class CentrifugeAbility extends ToolAbility { - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - ItemStack stack = new ItemStack(block, 1, meta); - ItemStack[] result = CentrifugeRecipes.getOutput(stack); - - if(result != null) { - world.setBlockToAir(x, y, z); - player.getHeldItem().damageItem(1, player); - - for(ItemStack st : result) { - if(st != null) - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, st.copy())); - } - } - - return false; - } - - @Override - public String getExtension() { - return ""; - } - - @Override - public String getName() { - return "tool.ability.centrifuge"; - } - - @Override - public String getFullName() { - return I18n.format(getName()); - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityCentrifuge; - } - } - - public static class CrystallizerAbility extends ToolAbility { - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - ItemStack stack = new ItemStack(block, 1, meta); - CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack, Fluids.PEROXIDE); - - if(result != null) { - world.setBlockToAir(x, y, z); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy())); - player.getHeldItem().damageItem(1, player); - } - - return false; - } - - @Override - public String getExtension() { - return ""; - } - - @Override - public String getName() { - return "tool.ability.crystallizer"; - } - - @Override - public String getFullName() { - return I18n.format(getName()); - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityCrystallizer; - } - } - - public static class MercuryAbility extends ToolAbility { - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - int mercury = 0; - - if(block == Blocks.redstone_ore) - mercury = player.getRNG().nextInt(5) + 4; - if(block == Blocks.redstone_block) - mercury = player.getRNG().nextInt(7) + 8; - - if(mercury > 0) { - world.setBlockToAir(x, y, z); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_mercury, mercury))); - player.getHeldItem().damageItem(1, player); - } - - return false; - } - - @Override - public String getExtension() { - return ""; - } - - @Override - public String getName() { - return "tool.ability.mercury"; - } - - @Override - public String getFullName() { - return I18n.format(getName()); - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityMercury; - } - } - - public static class ExplosionAbility extends ToolAbility { - - float strength; - - public ExplosionAbility(float strength) { - this.strength = strength; - } - - @Override - public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { - - ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); - ex.addAttrib(ExAttrib.ALLDROP); - ex.addAttrib(ExAttrib.NOHURT); - ex.addAttrib(ExAttrib.NOPARTICLE); - ex.doExplosionA(); - ex.doExplosionB(false); - - player.worldObj.createExplosion(player, x + 0.5, y + 0.5, z + 0.5, 0.1F, false); - - return true; - } - - @Override - public String getExtension() { - return " (" + strength + ")"; - } - - @Override - public String getName() { - return "tool.ability.explosion"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + getExtension(); - } - - @Override - public boolean isAllowed() { - return ToolConfig.abilityExplosion; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/WeaponAbility.java b/src/main/java/com/hbm/handler/WeaponAbility.java deleted file mode 100644 index 54f490b46..000000000 --- a/src/main/java/com/hbm/handler/WeaponAbility.java +++ /dev/null @@ -1,369 +0,0 @@ -package com.hbm.handler; - -import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.generic.BlockBobble.BobbleType; -import com.hbm.handler.threading.PacketThreading; -import com.hbm.items.ModItems; -import com.hbm.items.tool.IItemWithAbility; -import com.hbm.lib.ModDamageSource; -import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.potion.HbmPotion; -import com.hbm.util.ContaminationUtil; - -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; - -import com.hbm.util.ContaminationUtil.ContaminationType; -import com.hbm.util.ContaminationUtil.HazardType; - -import net.minecraft.block.Block; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityXPOrb; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntityMagmaCube; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.monster.EntitySkeleton; -import net.minecraft.entity.monster.EntitySlime; -import net.minecraft.entity.monster.EntityZombie; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; - -public abstract class WeaponAbility { - - public abstract void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool); - public abstract String getName(); - public abstract String getFullName(); - - public static class RadiationAbility extends WeaponAbility { - - float rad; - - public RadiationAbility(float rad) { - this.rad = rad; - } - - @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - - if(victim instanceof EntityLivingBase) - ContaminationUtil.contaminate((EntityLivingBase)victim, HazardType.RADIATION, ContaminationType.CREATIVE, rad); - } - - @Override - public String getName() { - return "weapon.ability.radiation"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + " (" + rad + ")"; - } - } - - public static class VampireAbility extends WeaponAbility { - - float amount; - - public VampireAbility(float amount) { - this.amount = amount; - } - - @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - - if(victim instanceof EntityLivingBase) { - - EntityLivingBase living = (EntityLivingBase) victim; - if(living.getHealth() <= 0) return; - living.setHealth(living.getHealth() - amount); - if(living.getHealth() <= 0) living.onDeath(DamageSource.magic); - player.heal(amount); - } - } - - @Override - public String getName() { - return "weapon.ability.vampire"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + " (" + amount + ")"; - } - } - - public static class StunAbility extends WeaponAbility { - - int duration; - - public StunAbility(int duration) { - this.duration = duration; - } - - @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - - if(victim instanceof EntityLivingBase) { - - EntityLivingBase living = (EntityLivingBase) victim; - - living.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, duration * 20, 4)); - living.addPotionEffect(new PotionEffect(Potion.weakness.id, duration * 20, 4)); - } - } - - @Override - public String getName() { - return "weapon.ability.stun"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + " (" + duration + ")"; - } - } - - public static class BlendAbility extends WeaponAbility { - - int divider; - - public BlendAbility(int divider) { - this.divider = divider; - } - - @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - - if(victim instanceof EntityLivingBase) { - - EntityLivingBase living = (EntityLivingBase) victim; - - - if(living.getHealth() <= 0.0F) { - int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health - world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "mob.zombie.woodbreak", 0.5F, 1.0F); - victim.attackEntityFrom(ModDamageSource.turbofan, 100); - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "giblets"); - data.setInteger("count", count * 4); - data.setInteger("ent", victim.getEntityId()); - data.setInteger("cDiv", 5); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, victim.posX, victim.posY + victim.height * 0.5, victim.posZ), new TargetPoint(victim.dimension, victim.posX, victim.posY + victim.height * 0.5, victim.posZ, 150)); - living.entityDropItem(new ItemStack(ModItems.flesh, 10, 0), 0.0F); - } - } - } - - - - @Override - public String getName() { - return "weapon.ability.blender"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + " (1:" + divider + ")"; - } - } - - public static class PhosphorusAbility extends WeaponAbility { - - int duration; - - public PhosphorusAbility(int duration) { - this.duration = duration; - } - - @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - - if(victim instanceof EntityLivingBase) { - - EntityLivingBase living = (EntityLivingBase) victim; - - living.addPotionEffect(new PotionEffect(HbmPotion.phosphorus.id, duration * 20, 4)); - } - } - - @Override - public String getName() { - return "weapon.ability.phosphorus"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + " (" + duration + ")"; - } - } - - public static class FireAbility extends WeaponAbility { - - int duration; - - public FireAbility(int duration) { - this.duration = duration; - } - - @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - - if(victim instanceof EntityLivingBase) { - victim.setFire(duration); - } - } - - @Override - public String getName() { - return "weapon.ability.fire"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + " (" + duration + ")"; - } - } - - public static class ChainsawAbility extends WeaponAbility { - - int divider; - - public ChainsawAbility(int divider) { - this.divider = divider; - } - - @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - - if(victim instanceof EntityLivingBase) { - - EntityLivingBase living = (EntityLivingBase) victim; - - if(living.getHealth() <= 0.0F) { - - int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health - - for(int i = 0; i < count; i++) { - living.entityDropItem(new ItemStack(ModItems.nitra_small), 1); - world.spawnEntityInWorld(new EntityXPOrb(world, living.posX, living.posY, living.posZ, 1)); - } - - if(player instanceof EntityPlayerMP) { - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "vanillaburst"); - data.setInteger("count", count * 4); - data.setDouble("motion", 0.1D); - data.setString("mode", "blockdust"); - data.setInteger("block", Block.getIdFromBlock(Blocks.redstone_block)); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, living.posX, living.posY + living.height * 0.5, living.posZ), new TargetPoint(living.dimension, living.posX, living.posY, living.posZ, 50)); - } - - world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "hbm:weapon.chainsaw", 0.5F, 1.0F); - } - } - } - - @Override - public String getName() { - return "weapon.ability.chainsaw"; - } - - @Override - public String getFullName() { - return I18n.format(getName()) + " (1:" + divider + ")"; - } - } - - public static class BeheaderAbility extends WeaponAbility { - - @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - - if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) { - - EntityLivingBase living = (EntityLivingBase) victim; - - if(living instanceof EntitySkeleton) { - - if(((EntitySkeleton)living).getSkeletonType() == 0) { - living.entityDropItem(new ItemStack(Items.skull, 1, 0), 0.0F); - } else { - - if(world.rand.nextInt(20) == 0) - living.entityDropItem(new ItemStack(Items.skull, 1, 1), 0.0F); - else - living.entityDropItem(new ItemStack(Items.coal, 3), 0.0F); - } - - } else if(living instanceof EntityZombie) { - living.entityDropItem(new ItemStack(Items.skull, 1, 2), 0.0F); - } else if(living instanceof EntityCreeper) { - living.entityDropItem(new ItemStack(Items.skull, 1, 4), 0.0F); - } else if(living instanceof EntityMagmaCube) { - living.entityDropItem(new ItemStack(Items.magma_cream, 3), 0.0F); - } else if(living instanceof EntitySlime) { - living.entityDropItem(new ItemStack(Items.slime_ball, 3), 0.0F); - } else if(living instanceof EntityPlayer) { - - ItemStack head = new ItemStack(Items.skull, 1, 3); - head.stackTagCompound = new NBTTagCompound(); - head.stackTagCompound.setString("SkullOwner", ((EntityPlayer) living).getDisplayName()); - living.entityDropItem(head, 0.0F); - } else { - living.entityDropItem(new ItemStack(Items.rotten_flesh, 3, 0), 0.0F); - living.entityDropItem(new ItemStack(Items.bone, 2, 0), 0.0F); - } - } - } - - @Override - public String getName() { - return "weapon.ability.beheader"; - } - - @Override - public String getFullName() { - return I18n.format(getName()); - } - } - - public static class BobbleAbility extends WeaponAbility { - - @Override - public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { - - if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { - - EntityMob mob = (EntityMob) victim; - - int chance = 1000; - - if(mob.getMaxHealth() > 20) { - chance = 750; - } - - if(world.rand.nextInt(chance) == 0) - mob.entityDropItem(new ItemStack(ModBlocks.bobblehead, 1, world.rand.nextInt(BobbleType.values().length - 1) + 1), 0.0F); - } - } - - @Override - public String getName() { - return "weapon.ability.bobble"; - } - - @Override - public String getFullName() { - return I18n.format(getName()); - } - } -} diff --git a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java index b95c21a55..0312d97b3 100644 --- a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java +++ b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java @@ -4,6 +4,9 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; + +import com.hbm.main.MainRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -17,10 +20,18 @@ public class AvailableAbilities { public AvailableAbilities addAbility(IBaseAbility ability, int level) { if (level < 0 || level >= ability.levels()) { - throw new IllegalArgumentException("Illegal level " + level + " for ability " + ability.getName()); + MainRegistry.logger.warn("Illegal level " + level + " for ability " + ability.getName()); + level = ability.levels() - 1; + } + + if (abilities.containsKey(ability)) { + MainRegistry.logger.warn("Ability " + ability.getName() + " already had level " + abilities.get(ability) + ", overwriting with level " + level); + } + + if (ability.isAllowed()) { + abilities.put(ability, level); } - abilities.put(ability, level); return this; } @@ -47,6 +58,22 @@ public class AvailableAbilities { return Collections.unmodifiableMap(abilities); } + public Map getWeaponAbilities() { + return abilities.keySet().stream().filter(a -> a instanceof IWeaponAbility).collect(Collectors.toMap(a -> (IWeaponAbility)a, a -> abilities.get(a))); + } + + public Map getToolAbilities() { + return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility || a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> a, a -> abilities.get(a))); + } + + public Map getToolAreaAbilities() { + return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility).collect(Collectors.toMap(a -> (IToolAreaAbility)a, a -> abilities.get(a))); + } + + public Map getToolHarvestAbilities() { + return abilities.keySet().stream().filter(a -> a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> (IToolHarvestAbility)a, a -> abilities.get(a))); + } + public int size() { return abilities.size(); } @@ -57,12 +84,12 @@ public class AvailableAbilities { @SideOnly(Side.CLIENT) public void addInformation(List list) { - boolean hasToolAbilities = abilities.keySet().stream().anyMatch(a -> a instanceof IToolAreaAbility || a instanceof IToolHarvestAbility); + Map toolAbilities = getToolAbilities(); - if (hasToolAbilities) { + if (!toolAbilities.isEmpty()) { list.add("Abilities: "); - abilities.forEach((ability, level) -> { + toolAbilities.forEach((ability, level) -> { list.add(" " + EnumChatFormatting.GOLD + ability.getFullName(level)); }); @@ -71,12 +98,12 @@ public class AvailableAbilities { list.add("Alt-click to open ability selection GUI!"); } - boolean hasWeaponModifiers = abilities.keySet().stream().anyMatch(a -> a instanceof IWeaponAbility); + Map weaponAbilities = getWeaponAbilities(); - if (hasWeaponModifiers) { + if (!weaponAbilities.isEmpty()) { list.add("Weapon modifiers: "); - abilities.forEach((ability, level) -> { + weaponAbilities.forEach((ability, level) -> { list.add(" " + EnumChatFormatting.RED + ability.getFullName(level)); }); } diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index 19bdedd94..727d602e5 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -11,7 +11,7 @@ import com.hbm.explosion.ExplosionNT; import com.hbm.explosion.ExplosionNT.ExAttrib; import com.hbm.handler.ThreeInts; import com.hbm.inventory.OreDictManager; -import com.hbm.items.tool.IItemWithAbility; +import com.hbm.items.tool.ItemToolAbility; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; @@ -27,18 +27,17 @@ public interface IToolAreaAbility extends IBaseAbility { // The initial block is always implicitly broken and shouldn't be included. // If true is returned, no block breaking is handled by the tool // (neither for the original block nor for the extras) - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool); + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool); // region handlers public static final IToolAreaAbility NONE = new IToolAreaAbility() { @Override public String getName() { - // TODO: null? empty? otherwise i18n return ""; } @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { return false; } }; @@ -73,7 +72,7 @@ public interface IToolAreaAbility extends IBaseAbility { private Set pos = new HashSet<>(); @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { Block b = world.getBlock(x, y, z); if(!ToolConfig.recursiveStone) { @@ -112,7 +111,7 @@ public interface IToolAreaAbility extends IBaseAbility { } }}; - private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth, int radius) { + private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, ItemToolAbility tool, int depth, int radius) { List shuffledOffsets = new ArrayList<>(offsets); Collections.shuffle(shuffledOffsets); @@ -121,7 +120,7 @@ public interface IToolAreaAbility extends IBaseAbility { } } - private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth, int radius) { + private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, ItemToolAbility tool, int depth, int radius) { if(pos.contains(new ThreeInts(x, y, z))) return; @@ -190,7 +189,7 @@ public interface IToolAreaAbility extends IBaseAbility { } @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { int range = rangeAtLevel[level]; for(int a = x - range; a <= x + range; a++) { @@ -233,7 +232,7 @@ public interface IToolAreaAbility extends IBaseAbility { } @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool) { + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { float strength = strengthAtLevel[level]; ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); @@ -249,4 +248,15 @@ public interface IToolAreaAbility extends IBaseAbility { } }; // endregion handlers + + static final IToolAreaAbility[] abilities = {NONE, RECURSION, HAMMER, EXPLOSION}; + + static IToolAreaAbility getByName(String name) { + for(IToolAreaAbility ability : abilities) { + if(ability.getName().equals(name)) + return ability; + } + + return NONE; + } } diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index 797daee68..82bbca88c 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -9,7 +9,7 @@ import com.hbm.inventory.recipes.CrystallizerRecipes; import com.hbm.inventory.recipes.ShredderRecipes; import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe; import com.hbm.items.ModItems; -import com.hbm.items.tool.IItemWithAbility; +import com.hbm.items.tool.ItemToolAbility; import com.hbm.util.EnchantmentUtil; import net.minecraft.block.Block; @@ -37,7 +37,7 @@ public interface IToolHarvestAbility extends IBaseAbility { player.getHeldItem().damageItem(1, player); } else if (player instanceof EntityPlayerMP) { // Break the block conventionally - IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); + ItemToolAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); } } @@ -45,7 +45,6 @@ public interface IToolHarvestAbility extends IBaseAbility { public static final IToolHarvestAbility NONE = new IToolHarvestAbility() { @Override public String getName() { - // TODO: null? empty? otherwise i18n return ""; } @@ -310,4 +309,15 @@ public interface IToolHarvestAbility extends IBaseAbility { } }; // endregion handlers + + static final IToolHarvestAbility[] abilities = {NONE, SILK, LUCK, SMELTER, SHREDDER, CENTRIFUGE, CRYSTALLIZER, MERCURY}; + + static IToolHarvestAbility getByName(String name) { + for(IToolHarvestAbility ability : abilities) { + if(ability.getName().equals(name)) + return ability; + } + + return NONE; + } } diff --git a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java index 15a98df54..92f0d3f1d 100644 --- a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java +++ b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java @@ -42,7 +42,6 @@ public interface IWeaponAbility extends IBaseAbility { public static final IWeaponAbility NONE = new IWeaponAbility() { @Override public String getName() { - // TODO: null? empty? otherwise i18n return ""; } @@ -349,4 +348,15 @@ public interface IWeaponAbility extends IBaseAbility { } }; // endregion handlers + + static final IWeaponAbility[] abilities = {NONE, RADIATION, VAMPIRE, STUN, BLEND, PHOSPHORUS, FIRE, CHAINSAW, BEHEADER, BOBBLE}; + + static IWeaponAbility getByName(String name) { + for(IWeaponAbility ability : abilities) { + if(ability.getName().equals(name)) + return ability; + } + + return NONE; + } } diff --git a/src/main/java/com/hbm/handler/ability/ToolPreset.java b/src/main/java/com/hbm/handler/ability/ToolPreset.java index afc132153..caa8956ae 100644 --- a/src/main/java/com/hbm/handler/ability/ToolPreset.java +++ b/src/main/java/com/hbm/handler/ability/ToolPreset.java @@ -1,5 +1,11 @@ package com.hbm.handler.ability; +import com.hbm.util.ChatBuilder; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; + public class ToolPreset { public IToolAreaAbility areaAbility = IToolAreaAbility.NONE; public int areaAbilityLevel = 0; @@ -20,19 +26,69 @@ public class ToolPreset { this.harvestAbilityLevel = harvestAbilityLevel; } - public String getMessage() { + public ChatComponentText getMessage() { + if (isNone()) + return ChatBuilder.start("[Tool ability deactivated]").color(EnumChatFormatting.GOLD).flush(); + String areaPart = areaAbility.getFullName(areaAbilityLevel); String harvestPart = harvestAbility.getFullName(harvestAbilityLevel); - - if (harvestPart.isEmpty() && areaPart.isEmpty()) - return "[Tool ability deactivated]"; - if (harvestPart.isEmpty()) - return "[Enabled " + areaPart + "]"; - - if (areaPart.isEmpty()) - return "[Enabled " + harvestPart + "]"; + ChatBuilder builder = ChatBuilder.start("[Enabled "); - return "[Enabled " + areaPart + " + " + harvestPart + "]"; + if (!areaPart.isEmpty()) + builder.next(areaPart); + + if (!areaPart.isEmpty() && !harvestPart.isEmpty()) + builder.next(" + "); + + if (!harvestPart.isEmpty()) + builder.next(harvestPart); + + return builder.colorAll(EnumChatFormatting.YELLOW).flush(); + } + + public boolean isNone() { + return areaAbility == IToolAreaAbility.NONE && harvestAbility == IToolHarvestAbility.NONE; + } + + public void writeToNBT(NBTTagCompound nbt) { + nbt.setString("area", areaAbility.getName()); + nbt.setInteger("areaLevel", areaAbilityLevel); + nbt.setString("harvest", harvestAbility.getName()); + nbt.setInteger("harvestLevel", harvestAbilityLevel); + } + + public void readFromNBT(NBTTagCompound nbt) { + areaAbility = IToolAreaAbility.getByName(nbt.getString("area")); + areaAbilityLevel = nbt.getInteger("areaLevel"); + harvestAbility = IToolHarvestAbility.getByName(nbt.getString("harvest")); + harvestAbilityLevel = nbt.getInteger("harvestLevel"); + + areaAbilityLevel = Math.min(areaAbilityLevel, areaAbility.levels() - 1); + harvestAbilityLevel = Math.min(harvestAbilityLevel, harvestAbility.levels() - 1); + } + + public void restrictTo(AvailableAbilities availableAbilities) { + int maxAreaLevel = availableAbilities.maxLevel(areaAbility); + + if (maxAreaLevel == -1) { + areaAbility = IToolAreaAbility.NONE; + areaAbilityLevel = 0; + } else if (areaAbilityLevel > maxAreaLevel) { + areaAbilityLevel = maxAreaLevel; + } else if (areaAbilityLevel < 0) { + areaAbilityLevel = 0; + } + + int maxHarvestLevel = availableAbilities.maxLevel(harvestAbility); + + if (maxHarvestLevel == -1) { + harvestAbility = IToolHarvestAbility.NONE; + harvestAbilityLevel = 0; + } else if (harvestAbilityLevel > maxHarvestLevel) { + harvestAbilityLevel = maxHarvestLevel; + } else if (harvestAbilityLevel < 0) { + harvestAbilityLevel = 0; + } } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 0f66d8327..13dd55fda 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -6,14 +6,20 @@ import java.util.List; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; +import com.hbm.handler.ability.AvailableAbilities; import com.hbm.handler.ability.IBaseAbility; import com.hbm.handler.ability.IToolAreaAbility; import com.hbm.handler.ability.IToolHarvestAbility; import com.hbm.handler.ability.ToolPreset; import com.hbm.items.tool.ItemToolAbility; +import com.hbm.items.tool.ItemToolAbility.Configuration; import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.util.EnumUtil; import com.hbm.util.I18nUtil; +import com.hbm.util.Tuple.Pair; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; @@ -32,9 +38,6 @@ public class GUIScreenToolAbility extends GuiScreen { protected int ySize; protected int insetWidth; - protected ItemToolAbility toolDef; - protected ItemStack toolStack; - public static class AbilityInfo { public IBaseAbility ability; public int textureU, textureV; @@ -65,23 +68,19 @@ public class GUIScreenToolAbility extends GuiScreen { abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.MERCURY, 224, 107)); } - // TODO: availability status for abilities; list of presets; selected preset index; - // TODO: Remove this in favor of current preset - int selectionIdxArea = 0; - int selectedLevelArea = 0; - int selectionIdxHarvest = 0; - int selectedLevelHarvest = 0; - int selectedPreset = 0; - int totalPresets = 1; + // TODO: Use availableAbilities + protected ItemStack toolStack; + AvailableAbilities availableAbilities; + ItemToolAbility.Configuration config; int hoverIdxArea = -1; int hoverIdxHarvest = -1; int hoverIdxExtraBtn = -1; - public GUIScreenToolAbility(ItemToolAbility toolDef) { + public GUIScreenToolAbility(AvailableAbilities availableAbilities) { super(); - this.toolDef = toolDef; + this.availableAbilities = availableAbilities; this.xSize = 186; // Note: increased dynamically this.ySize = 76; @@ -112,12 +111,13 @@ public class GUIScreenToolAbility extends GuiScreen { drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 76); // Draw the switches - hoverIdxArea = drawSwitches(abilitiesArea, selectionIdxArea, selectedLevelArea, guiLeft + 15, guiTop + 25, mouseX, mouseY); - hoverIdxHarvest = drawSwitches(abilitiesHarvest, selectionIdxHarvest, selectedLevelHarvest, guiLeft + 15, guiTop + 45, mouseX, mouseY); + ToolPreset activePreset = config.getActivePreset(); + hoverIdxArea = drawSwitches(abilitiesArea, activePreset.areaAbility, activePreset.areaAbilityLevel, guiLeft + 15, guiTop + 25, mouseX, mouseY); + hoverIdxHarvest = drawSwitches(abilitiesHarvest, activePreset.harvestAbility, activePreset.harvestAbilityLevel, guiLeft + 15, guiTop + 45, mouseX, mouseY); // Draw preset indicator - drawNumber(selectedPreset + 1, guiLeft + insetWidth + 115, guiTop + 25); - drawNumber(totalPresets, guiLeft + insetWidth + 149, guiTop + 25); + drawNumber(config.currentPreset + 1, guiLeft + insetWidth + 115, guiTop + 25); + drawNumber(config.presets.size(), guiLeft + insetWidth + 149, guiTop + 25); // Draw extra buttons hover highlights int extraBtnsX = guiLeft + xSize - 86; @@ -135,14 +135,14 @@ public class GUIScreenToolAbility extends GuiScreen { if (hoverIdxArea != -1) { int level = 0; - if (hoverIdxArea == selectionIdxArea) { - level = selectedLevelArea; + if (abilitiesArea.get(hoverIdxArea).ability == activePreset.areaAbility) { + level = activePreset.areaAbilityLevel; } tooltipValue = abilitiesArea.get(hoverIdxArea).ability.getFullName(level); } else if (hoverIdxHarvest != -1) { int level = 0; - if (hoverIdxHarvest == selectionIdxHarvest) { - level = selectedLevelHarvest; + if (abilitiesHarvest.get(hoverIdxHarvest).ability == activePreset.harvestAbility) { + level = activePreset.harvestAbilityLevel; } tooltipValue = abilitiesHarvest.get(hoverIdxHarvest).ability.getFullName(level); } else if (hoverIdxExtraBtn != -1) { @@ -176,12 +176,13 @@ public class GUIScreenToolAbility extends GuiScreen { drawTexturedModalRect(x + keepLeft + realMidWidth, y, u + keepLeft + midWidth, v, keepRight, height); } - protected int drawSwitches(List abilities, int selectionIdx, int selectedLevel, int x, int y, int mouseX, int mouseY) { + protected int drawSwitches(List abilities, IBaseAbility selectedAbility, int selectedLevel, int x, int y, int mouseX, int mouseY) { int hoverIdx = -1; for (int i = 0; i < abilities.size(); ++i) { AbilityInfo abilityInfo = abilities.get(i); - boolean available = true; // TODO + boolean available = availableAbilities.supportsAbility(abilityInfo.ability); + boolean selected = abilityInfo.ability == selectedAbility; // Draw switch drawTexturedModalRect(x + 20 * i, y, abilityInfo.textureU + (available ? 16 : 0), abilityInfo.textureV, 16, 16); @@ -190,11 +191,11 @@ public class GUIScreenToolAbility extends GuiScreen { if (abilityInfo.ability.levels() > 1) { int level = 0; - if (i == selectionIdx) { + if (selected) { level = selectedLevel + 1; } - // TODO: Max allowed level instead? + // Note: only visual effect for the LEDs // int maxLevel = Math.min(abilityInfo.ability.levels(), 5); int maxLevel = 5; @@ -212,7 +213,7 @@ public class GUIScreenToolAbility extends GuiScreen { hoverIdx = i; } - if (i == selectionIdx) { + if (selected) { // Draw selection highlight drawTexturedModalRect(x + 20 * i - 1, y - 1, 220, 9, 18, 18); } else if (available && isHovered) { @@ -242,7 +243,7 @@ public class GUIScreenToolAbility extends GuiScreen { public void updateScreen() { EntityPlayer player = this.mc.thePlayer; - if(player.getHeldItem() == null || player.getHeldItem().getItem() != toolDef) + if(player.getHeldItem() == null || player.getHeldItem() != toolStack) player.closeScreen(); } @@ -253,77 +254,29 @@ public class GUIScreenToolAbility extends GuiScreen { if(Mouse.getEventButton() == -1) { int scroll = Mouse.getEventDWheel(); - if(scroll < 0 && selectedPreset > 0) selectedPreset -= 1; - if(scroll > 0 && selectedPreset < totalPresets - 1) selectedPreset += 1; + if(scroll < 0) doPrevPreset(true); + if(scroll > 0) doNextPreset(true); } } @Override protected void mouseClicked(int mouseX, int mouseY, int button) { + ToolPreset activePreset = config.getActivePreset(); + // Process switches - // TODO: Encapsulate in a method - if (hoverIdxArea != -1) { - boolean available = true; // TODO - - if (available) { - int availableLevels = abilitiesArea.get(hoverIdxArea).ability.levels(); - - if (hoverIdxArea != selectionIdxArea || availableLevels > 1) { - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F)); - } - - if (hoverIdxArea == selectionIdxArea) { - selectedLevelArea = (selectedLevelArea + 1) % availableLevels; - } else { - selectedLevelArea = 0; - } - - selectionIdxArea = hoverIdxArea; - } - } - - if (hoverIdxHarvest != -1) { - boolean available = true; // TODO - - if (available) { - int availableLevels = abilitiesHarvest.get(hoverIdxHarvest).ability.levels(); - - if (hoverIdxHarvest == selectionIdxHarvest) { - selectedLevelHarvest = (selectedLevelHarvest + 1) % availableLevels; - } else { - selectedLevelHarvest = 0; - } - - selectionIdxHarvest = hoverIdxHarvest; - - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F)); - } - } + handleSwitchesClicked(abilitiesArea, activePreset.areaAbility, activePreset.areaAbilityLevel, hoverIdxArea, mouseX, mouseY); + handleSwitchesClicked(abilitiesHarvest, activePreset.harvestAbility, activePreset.harvestAbilityLevel, hoverIdxHarvest, mouseX, mouseY); // Process extra buttons if (hoverIdxExtraBtn != -1) { switch (hoverIdxExtraBtn) { - case 0: - doResetPresets(); - break; - case 1: - doDelPreset(); - break; - case 2: - doAddPreset(); - break; - case 3: - doZeroPreset(); - break; - case 4: - doNextPreset(); - break; - case 5: - doPrevPreset(); - break; - case 6: - doClose(); - break; + case 0: doResetPresets(); break; + case 1: doDelPreset(); break; + case 2: doAddPreset(); break; + case 3: doZeroPreset(); break; + case 4: doNextPreset(false); break; + case 5: doPrevPreset(false); break; + case 6: doClose(); break; } mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F)); @@ -335,6 +288,31 @@ public class GUIScreenToolAbility extends GuiScreen { } } + protected Pair handleSwitchesClicked(List abilities, IBaseAbility selectedAbility, int selectedLevel, int hoverIdx, int mouseX, int mouseY) { + if (hoverIdx != -1) { + IBaseAbility hoveredAbility = abilities.get(hoverIdx).ability; + boolean available = availableAbilities.supportsAbility(hoveredAbility); + + if (available) { + int availableLevels = availableAbilities.maxLevel(hoveredAbility) + 1; + + if (hoveredAbility != selectedAbility || availableLevels > 1) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F)); + } + + if (hoveredAbility == selectedAbility) { + selectedLevel = (selectedLevel + 1) % availableLevels; + } else { + selectedLevel = 0; + } + + selectedAbility = hoveredAbility; + } + } + + return new Pair<>(selectedAbility, selectedLevel); + } + @Override protected void keyTyped(char c, int key) { if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) { @@ -351,46 +329,51 @@ public class GUIScreenToolAbility extends GuiScreen { } protected void doResetPresets() { - // TODO - totalPresets = 1; - selectedPreset = 0; - selectionIdxArea = 0; - selectedLevelArea = 0; - selectionIdxHarvest = 0; - selectedLevelHarvest = 0; + config.reset(availableAbilities); } protected void doDelPreset() { - // TODO - if (totalPresets <= 1) { + if (config.presets.size() <= 1) { return; } - totalPresets -= 1; - selectedPreset -= 1; + config.presets.remove(config.currentPreset); + config.currentPreset = Math.min(config.currentPreset, config.presets.size() - 1); } protected void doAddPreset() { - // TODO - totalPresets += 1; - selectedPreset += 1; + config.presets.add(config.currentPreset + 1, new ToolPreset()); + config.currentPreset += 1; } protected void doZeroPreset() { - // TODO - selectedPreset = 0; + config.currentPreset = 0; } - protected void doNextPreset() { - // TODO - selectedPreset = (selectedPreset + 1) % totalPresets; + protected void doNextPreset(boolean bound) { + if (bound) { + if (config.currentPreset < config.presets.size() - 1) { + config.currentPreset += 1; + } + } else { + config.currentPreset = (config.currentPreset + 1) % config.presets.size(); + } } - protected void doPrevPreset() { - // TODO - selectedPreset = (selectedPreset + totalPresets - 1) % totalPresets; + protected void doPrevPreset(boolean bound) { + if (bound) { + if (config.currentPreset > 0) { + config.currentPreset -= 1; + } + } else { + config.currentPreset = (config.currentPreset + config.presets.size() - 1) % config.presets.size(); + } } protected void doClose() { this.mc.thePlayer.closeScreen(); + + MainRegistry.proxy.displayTooltip(config.getActivePreset().getMessage().getFormattedText(), MainRegistry.proxy.ID_TOOLABILITY); + + this.mc.theWorld.playSoundAtEntity(this.mc.thePlayer, "random.orb", 0.25F, config.getActivePreset().isNone() ? 0.75F : 1.25F); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index faa866dfc..2ccecf739 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -3,10 +3,9 @@ package com.hbm.items; import com.hbm.blocks.ModBlocks; import com.hbm.config.VersatileConfig; import com.hbm.handler.BucketHandler; -import com.hbm.handler.ToolAbility; -import com.hbm.handler.ToolAbility.LuckAbility; +import com.hbm.handler.ability.IToolAreaAbility; +import com.hbm.handler.ability.IToolHarvestAbility; import com.hbm.handler.ability.IWeaponAbility; -import com.hbm.handler.WeaponAbility; import com.hbm.handler.guncfg.*; import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType; import com.hbm.inventory.fluid.Fluids; @@ -4475,45 +4474,45 @@ public class ModItems { chainsaw = new ItemChainsaw(25, -0.05, MainRegistry.tMatChainsaw, EnumToolType.AXE, 5000, 1, 250, Fluids.DIESEL, Fluids.DIESEL_CRACK, Fluids.KEROSENE, Fluids.BIOFUEL, Fluids.GASOLINE, Fluids.GASOLINE_LEADED, Fluids.PETROIL, Fluids.PETROIL_LEADED, Fluids.COALGAS, Fluids.COALGAS_LEADED) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addHitAbility(new WeaponAbility.ChainsawAbility(10)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setShears().setUnlocalizedName("chainsaw").setTextureName(RefStrings.MODID + ":chainsaw"); + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolAreaAbility.RECURSION, 2) + .addAbility(IWeaponAbility.CHAINSAW, 1) + .addAbility(IWeaponAbility.BEHEADER, 0).setShears().setUnlocalizedName("chainsaw").setTextureName(RefStrings.MODID + ":chainsaw"); schrabidium_sword = new ItemSwordAbility(75, 0, MainRegistry.tMatSchrab) - .addHitAbility(IWeaponAbility.RADIATION, 1) - .addHitAbility(IWeaponAbility.VAMPIRE, 0) + .addAbility(IWeaponAbility.RADIATION, 1) + .addAbility(IWeaponAbility.VAMPIRE, 0) .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_sword").setTextureName(RefStrings.MODID + ":schrabidium_sword"); schrabidium_pickaxe = new ItemToolAbility(20, 0, MainRegistry.tMatSchrab, EnumToolType.PICKAXE) - .addHitAbility(new WeaponAbility.RadiationAbility(15F)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(10)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) + .addAbility(IWeaponAbility.RADIATION, 0) + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 6) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 4) + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.SHREDDER, 0) .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_pickaxe").setTextureName(RefStrings.MODID + ":schrabidium_pickaxe"); schrabidium_axe = new ItemToolAbility(25, 0, MainRegistry.tMatSchrab, EnumToolType.AXE) - .addHitAbility(new WeaponAbility.RadiationAbility(15F)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(10)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addHitAbility(new WeaponAbility.BeheaderAbility()) + .addAbility(IWeaponAbility.RADIATION, 0) + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 6) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 4) + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.SHREDDER, 0) + .addAbility(IWeaponAbility.BEHEADER, 0) .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_axe").setTextureName(RefStrings.MODID + ":schrabidium_axe"); schrabidium_shovel = new ItemToolAbility(15, 0, MainRegistry.tMatSchrab, EnumToolType.SHOVEL) - .addHitAbility(new WeaponAbility.RadiationAbility(15F)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(10)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) + .addAbility(IWeaponAbility.RADIATION, 0) + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 6) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 4) + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.SHREDDER, 0) .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_shovel").setTextureName(RefStrings.MODID + ":schrabidium_shovel"); schrabidium_hoe = new HoeSchrabidium(MainRegistry.tMatSchrab).setUnlocalizedName("schrabidium_hoe").setTextureName(RefStrings.MODID + ":schrabidium_hoe"); @@ -4521,294 +4520,282 @@ public class ModItems { titanium_sword = new ItemSwordAbility(6.5F, 0, MainRegistry.tMatTitan).setUnlocalizedName("titanium_sword").setTextureName(RefStrings.MODID + ":titanium_sword"); titanium_pickaxe = new ItemToolAbility(4.5F, 0, MainRegistry.tMatTitan, EnumToolType.PICKAXE).setUnlocalizedName("titanium_pickaxe").setTextureName(RefStrings.MODID + ":titanium_pickaxe"); titanium_axe = new ItemToolAbility(5.5F, 0, MainRegistry.tMatTitan, EnumToolType.AXE) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("titanium_axe").setTextureName(RefStrings.MODID + ":titanium_axe"); + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("titanium_axe").setTextureName(RefStrings.MODID + ":titanium_axe"); titanium_shovel = new ItemToolAbility(3.5F, 0, MainRegistry.tMatTitan, EnumToolType.SHOVEL).setUnlocalizedName("titanium_shovel").setTextureName(RefStrings.MODID + ":titanium_shovel"); titanium_hoe = new ModHoe(MainRegistry.tMatTitan).setUnlocalizedName("titanium_hoe").setTextureName(RefStrings.MODID + ":titanium_hoe"); steel_sword = new ItemSwordAbility(6F, 0, MainRegistry.tMatSteel).setUnlocalizedName("steel_sword").setTextureName(RefStrings.MODID + ":steel_sword"); steel_pickaxe = new ItemToolAbility(4F, 0, MainRegistry.tMatSteel, EnumToolType.PICKAXE).setUnlocalizedName("steel_pickaxe").setTextureName(RefStrings.MODID + ":steel_pickaxe"); steel_axe = new ItemToolAbility(5F, 0, MainRegistry.tMatSteel, EnumToolType.AXE) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("steel_axe").setTextureName(RefStrings.MODID + ":steel_axe"); + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("steel_axe").setTextureName(RefStrings.MODID + ":steel_axe"); steel_shovel = new ItemToolAbility(3F, 0, MainRegistry.tMatSteel, EnumToolType.SHOVEL).setUnlocalizedName("steel_shovel").setTextureName(RefStrings.MODID + ":steel_shovel"); steel_hoe = new ModHoe(MainRegistry.tMatSteel).setUnlocalizedName("steel_hoe").setTextureName(RefStrings.MODID + ":steel_hoe"); alloy_sword = new ItemSwordAbility(8F, 0, MainRegistry.tMatAlloy) - .addHitAbility(IWeaponAbility.STUN, 0).setUnlocalizedName("alloy_sword").setTextureName(RefStrings.MODID + ":alloy_sword"); + .addAbility(IWeaponAbility.STUN, 0).setUnlocalizedName("alloy_sword").setTextureName(RefStrings.MODID + ":alloy_sword"); alloy_pickaxe = new ItemToolAbility(5F, 0, MainRegistry.tMatAlloy, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.RecursionAbility(3)).setUnlocalizedName("alloy_pickaxe").setTextureName(RefStrings.MODID + ":alloy_pickaxe"); + .addAbility(IToolAreaAbility.RECURSION, 0).setUnlocalizedName("alloy_pickaxe").setTextureName(RefStrings.MODID + ":alloy_pickaxe"); alloy_axe = new ItemToolAbility(7F, 0, MainRegistry.tMatAlloy, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.RecursionAbility(3)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("alloy_axe").setTextureName(RefStrings.MODID + ":alloy_axe"); + .addAbility(IToolAreaAbility.RECURSION, 0) + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("alloy_axe").setTextureName(RefStrings.MODID + ":alloy_axe"); alloy_shovel = new ItemToolAbility(4F, 0, MainRegistry.tMatAlloy, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.RecursionAbility(3)).setUnlocalizedName("alloy_shovel").setTextureName(RefStrings.MODID + ":alloy_shovel"); + .addAbility(IToolAreaAbility.RECURSION, 0).setUnlocalizedName("alloy_shovel").setTextureName(RefStrings.MODID + ":alloy_shovel"); alloy_hoe = new ModHoe(MainRegistry.tMatAlloy).setUnlocalizedName("alloy_hoe").setTextureName(RefStrings.MODID + ":alloy_hoe"); cmb_sword = new ItemSwordAbility(35F, 0, MainRegistry.tMatCMB) - .addHitAbility(IWeaponAbility.STUN, 0) - .addHitAbility(IWeaponAbility.VAMPIRE, 0).setUnlocalizedName("cmb_sword").setTextureName(RefStrings.MODID + ":cmb_sword"); + .addAbility(IWeaponAbility.STUN, 0) + .addAbility(IWeaponAbility.VAMPIRE, 0).setUnlocalizedName("cmb_sword").setTextureName(RefStrings.MODID + ":cmb_sword"); cmb_pickaxe = new ItemToolAbility(10F, 0, MainRegistry.tMatCMB, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cmb_pickaxe").setTextureName(RefStrings.MODID + ":cmb_pickaxe"); - + .addAbility(IToolAreaAbility.RECURSION, 2) + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 2).setUnlocalizedName("cmb_pickaxe").setTextureName(RefStrings.MODID + ":cmb_pickaxe"); + cmb_axe = new ItemToolAbility(30F, 0, MainRegistry.tMatCMB, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("cmb_axe").setTextureName(RefStrings.MODID + ":cmb_axe"); + .addAbility(IToolAreaAbility.RECURSION, 2) + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 2) + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("cmb_axe").setTextureName(RefStrings.MODID + ":cmb_axe"); cmb_shovel = new ItemToolAbility(8F, 0, MainRegistry.tMatCMB, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cmb_shovel").setTextureName(RefStrings.MODID + ":cmb_shovel"); + .addAbility(IToolAreaAbility.RECURSION, 2) + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 2).setUnlocalizedName("cmb_shovel").setTextureName(RefStrings.MODID + ":cmb_shovel"); cmb_hoe = new ModHoe(MainRegistry.tMatCMB).setUnlocalizedName("cmb_hoe").setTextureName(RefStrings.MODID + ":cmb_hoe"); elec_sword = new ItemSwordAbilityPower(12.5F, 0, MainRegistry.tMatElec, 500000, 1000, 100) - .addHitAbility(IWeaponAbility.STUN, 2).setUnlocalizedName("elec_sword").setTextureName(RefStrings.MODID + ":elec_sword_anim"); + .addAbility(IWeaponAbility.STUN, 2).setUnlocalizedName("elec_sword").setTextureName(RefStrings.MODID + ":elec_sword_anim"); elec_pickaxe = new ItemToolAbilityPower(6F, 0, MainRegistry.tMatElec, EnumToolType.PICKAXE, 500000, 1000, 100) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("elec_pickaxe").setTextureName(RefStrings.MODID + ":elec_drill_anim"); - + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 2) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("elec_pickaxe").setTextureName(RefStrings.MODID + ":elec_drill_anim"); + elec_axe = new ItemToolAbilityPower(10F, 0, MainRegistry.tMatElec, EnumToolType.AXE, 500000, 1000, 100) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)) - .addHitAbility(new WeaponAbility.ChainsawAbility(15)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setShears().setUnlocalizedName("elec_axe").setTextureName(RefStrings.MODID + ":elec_chainsaw_anim"); - + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 2) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 1) + .addAbility(IWeaponAbility.CHAINSAW, 0) + .addAbility(IWeaponAbility.BEHEADER, 0).setShears().setUnlocalizedName("elec_axe").setTextureName(RefStrings.MODID + ":elec_chainsaw_anim"); + elec_shovel = new ItemToolAbilityPower(5F, 0, MainRegistry.tMatElec, EnumToolType.SHOVEL, 500000, 1000, 100) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("elec_shovel").setTextureName(RefStrings.MODID + ":elec_shovel_anim"); - + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 2) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("elec_shovel").setTextureName(RefStrings.MODID + ":elec_shovel_anim"); + desh_sword = new ItemSwordAbility(12.5F, 0, MainRegistry.tMatDesh) - .addHitAbility(IWeaponAbility.STUN, 0).setUnlocalizedName("desh_sword").setTextureName(RefStrings.MODID + ":desh_sword"); + .addAbility(IWeaponAbility.STUN, 0).setUnlocalizedName("desh_sword").setTextureName(RefStrings.MODID + ":desh_sword"); desh_pickaxe = new ItemToolAbility(5F, -0.05, MainRegistry.tMatDesh, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.RecursionAbility(3)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("desh_pickaxe").setTextureName(RefStrings.MODID + ":desh_pickaxe"); - + .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolAreaAbility.RECURSION, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("desh_pickaxe").setTextureName(RefStrings.MODID + ":desh_pickaxe"); + desh_axe = new ItemToolAbility(7.5F, -0.05, MainRegistry.tMatDesh, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.RecursionAbility(3)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("desh_axe").setTextureName(RefStrings.MODID + ":desh_axe"); + .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolAreaAbility.RECURSION, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 1) + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("desh_axe").setTextureName(RefStrings.MODID + ":desh_axe"); desh_shovel = new ItemToolAbility(4F, -0.05, MainRegistry.tMatDesh, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.RecursionAbility(3)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("desh_shovel").setTextureName(RefStrings.MODID + ":desh_shovel"); + .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolAreaAbility.RECURSION, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("desh_shovel").setTextureName(RefStrings.MODID + ":desh_shovel"); desh_hoe = new ModHoe(MainRegistry.tMatDesh).setUnlocalizedName("desh_hoe").setTextureName(RefStrings.MODID + ":desh_hoe"); cobalt_sword = new ItemSwordAbility(12F, 0, MainRegistry.tMatCobalt).setUnlocalizedName("cobalt_sword").setTextureName(RefStrings.MODID + ":cobalt_sword"); cobalt_pickaxe = new ItemToolAbility(4F, 0, MainRegistry.tMatCobalt, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(1)).setUnlocalizedName("cobalt_pickaxe").setTextureName(RefStrings.MODID + ":cobalt_pickaxe"); + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 0).setUnlocalizedName("cobalt_pickaxe").setTextureName(RefStrings.MODID + ":cobalt_pickaxe"); cobalt_axe = new ItemToolAbility(6F, 0, MainRegistry.tMatCobalt, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(1)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("cobalt_axe").setTextureName(RefStrings.MODID + ":cobalt_axe"); + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 0) + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("cobalt_axe").setTextureName(RefStrings.MODID + ":cobalt_axe"); cobalt_shovel = new ItemToolAbility(3.5F, 0, MainRegistry.tMatCobalt, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(1)).setUnlocalizedName("cobalt_shovel").setTextureName(RefStrings.MODID + ":cobalt_shovel"); + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 0).setUnlocalizedName("cobalt_shovel").setTextureName(RefStrings.MODID + ":cobalt_shovel"); cobalt_hoe = new ModHoe(MainRegistry.tMatCobalt).setUnlocalizedName("cobalt_hoe").setTextureName(RefStrings.MODID + ":cobalt_hoe"); ToolMaterial matDecCobalt = EnumHelper.addToolMaterial("HBM_COBALT2", 3, 2500, 15.0F, 2.5F, 75).setRepairItem(new ItemStack(ModItems.ingot_cobalt)); cobalt_decorated_sword = new ItemSwordAbility(15F, 0, matDecCobalt) - .addHitAbility(IWeaponAbility.BOBBLE, 0).setUnlocalizedName("cobalt_decorated_sword").setTextureName(RefStrings.MODID + ":cobalt_decorated_sword"); + .addAbility(IWeaponAbility.BOBBLE, 0).setUnlocalizedName("cobalt_decorated_sword").setTextureName(RefStrings.MODID + ":cobalt_decorated_sword"); cobalt_decorated_pickaxe = new ItemToolAbility(6F, 0, matDecCobalt, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cobalt_decorated_pickaxe").setTextureName(RefStrings.MODID + ":cobalt_decorated_pickaxe"); + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 2).setUnlocalizedName("cobalt_decorated_pickaxe").setTextureName(RefStrings.MODID + ":cobalt_decorated_pickaxe"); cobalt_decorated_axe = new ItemToolAbility(8F, 0, matDecCobalt, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("cobalt_decorated_axe").setTextureName(RefStrings.MODID + ":cobalt_decorated_axe"); + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 2) + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("cobalt_decorated_axe").setTextureName(RefStrings.MODID + ":cobalt_decorated_axe"); cobalt_decorated_shovel = new ItemToolAbility(5F, 0, matDecCobalt, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(3)).setUnlocalizedName("cobalt_decorated_shovel").setTextureName(RefStrings.MODID + ":cobalt_decorated_shovel"); + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 2).setUnlocalizedName("cobalt_decorated_shovel").setTextureName(RefStrings.MODID + ":cobalt_decorated_shovel"); cobalt_decorated_hoe = new ModHoe(matDecCobalt).setUnlocalizedName("cobalt_decorated_hoe").setTextureName(RefStrings.MODID + ":cobalt_decorated_hoe"); ToolMaterial matStarmetal = EnumHelper.addToolMaterial("HBM_STARMETAL", 3, 3000, 20.0F, 2.5F, 100).setRepairItem(new ItemStack(ModItems.ingot_starmetal)); starmetal_sword = new ItemSwordAbility(25F, 0, matStarmetal) - .addHitAbility(IWeaponAbility.BEHEADER, 0) - .addHitAbility(IWeaponAbility.STUN, 1) - .addHitAbility(IWeaponAbility.BOBBLE, 0).setUnlocalizedName("starmetal_sword").setTextureName(RefStrings.MODID + ":starmetal_sword"); + .addAbility(IWeaponAbility.BEHEADER, 0) + .addAbility(IWeaponAbility.STUN, 1) + .addAbility(IWeaponAbility.BOBBLE, 0).setUnlocalizedName("starmetal_sword").setTextureName(RefStrings.MODID + ":starmetal_sword"); starmetal_pickaxe = new ItemToolAbility(8F, 0, matStarmetal, EnumToolType.PICKAXE) - .addBreakAbility(new ToolAbility.RecursionAbility(6)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addHitAbility(new WeaponAbility.StunAbility(3)).setUnlocalizedName("starmetal_pickaxe").setTextureName(RefStrings.MODID + ":starmetal_pickaxe"); + .addAbility(IToolAreaAbility.RECURSION, 3) + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 4) + .addAbility(IWeaponAbility.STUN, 1).setUnlocalizedName("starmetal_pickaxe").setTextureName(RefStrings.MODID + ":starmetal_pickaxe"); starmetal_axe = new ItemToolAbility(12F, 0, matStarmetal, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.RecursionAbility(6)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addHitAbility(new WeaponAbility.BeheaderAbility()) - .addHitAbility(new WeaponAbility.StunAbility(3)).setUnlocalizedName("starmetal_axe").setTextureName(RefStrings.MODID + ":starmetal_axe"); + .addAbility(IToolAreaAbility.RECURSION, 3) + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 4) + .addAbility(IWeaponAbility.BEHEADER, 0) + .addAbility(IWeaponAbility.STUN, 1).setUnlocalizedName("starmetal_axe").setTextureName(RefStrings.MODID + ":starmetal_axe"); starmetal_shovel = new ItemToolAbility(7F, 0, matStarmetal, EnumToolType.SHOVEL) - .addBreakAbility(new ToolAbility.RecursionAbility(6)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new LuckAbility(5)) - .addHitAbility(new WeaponAbility.StunAbility(3)).setUnlocalizedName("starmetal_shovel").setTextureName(RefStrings.MODID + ":starmetal_shovel"); + .addAbility(IToolAreaAbility.RECURSION, 3) + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 4) + .addAbility(IWeaponAbility.STUN, 1).setUnlocalizedName("starmetal_shovel").setTextureName(RefStrings.MODID + ":starmetal_shovel"); starmetal_hoe = new ModHoe(matStarmetal).setUnlocalizedName("starmetal_hoe").setTextureName(RefStrings.MODID + ":starmetal_hoe"); centri_stick = new ItemToolAbility(3F, 0, MainRegistry.tMatElec, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.CentrifugeAbility()).setMaxDamage(50).setUnlocalizedName("centri_stick").setTextureName(RefStrings.MODID + ":centri_stick"); + .addAbility(IToolHarvestAbility.CENTRIFUGE, 0).setMaxDamage(50).setUnlocalizedName("centri_stick").setTextureName(RefStrings.MODID + ":centri_stick"); smashing_hammer = new ItemToolAbility(12F, -0.1, MainRegistry.tMatSteel, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.ShredderAbility()).setMaxDamage(2500).setUnlocalizedName("smashing_hammer").setTextureName(RefStrings.MODID + ":smashing_hammer"); + .addAbility(IToolHarvestAbility.SHREDDER, 0).setMaxDamage(2500).setUnlocalizedName("smashing_hammer").setTextureName(RefStrings.MODID + ":smashing_hammer"); drax = new ItemToolAbilityPower(10F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 500000000, 100000, 5000) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(2)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)).setUnlocalizedName("drax").setTextureName(RefStrings.MODID + ":drax"); + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.SHREDDER, 0) + .addAbility(IToolHarvestAbility.LUCK, 1) + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 2).setUnlocalizedName("drax").setTextureName(RefStrings.MODID + ":drax"); drax_mk2 = new ItemToolAbilityPower(15F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 1000000000, 250000, 7500) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addBreakAbility(new ToolAbility.CentrifugeAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(3)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.HammerAbility(3)) - .addBreakAbility(new ToolAbility.RecursionAbility(7)).setUnlocalizedName("drax_mk2").setTextureName(RefStrings.MODID + ":drax_mk2"); + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.SHREDDER, 0) + .addAbility(IToolHarvestAbility.CENTRIFUGE, 0) + .addAbility(IToolHarvestAbility.LUCK, 2) + .addAbility(IToolAreaAbility.HAMMER, 2) + .addAbility(IToolAreaAbility.RECURSION, 4).setUnlocalizedName("drax_mk2").setTextureName(RefStrings.MODID + ":drax_mk2"); drax_mk3 = new ItemToolAbilityPower(20F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 2500000000L, 500000, 10000) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addBreakAbility(new ToolAbility.CentrifugeAbility()) - .addBreakAbility(new ToolAbility.CrystallizerAbility()) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(4)) - .addBreakAbility(new ToolAbility.HammerAbility(1)) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.HammerAbility(3)) - .addBreakAbility(new ToolAbility.HammerAbility(4)) - .addBreakAbility(new ToolAbility.RecursionAbility(9)).setUnlocalizedName("drax_mk3").setTextureName(RefStrings.MODID + ":drax_mk3"); + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.SHREDDER, 0) + .addAbility(IToolHarvestAbility.CENTRIFUGE, 0) + .addAbility(IToolHarvestAbility.CRYSTALLIZER, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 3) + .addAbility(IToolAreaAbility.HAMMER, 3) + .addAbility(IToolAreaAbility.RECURSION, 5).setUnlocalizedName("drax_mk3").setTextureName(RefStrings.MODID + ":drax_mk3"); ToolMaterial matBismuth = EnumHelper.addToolMaterial("HBM_BISMUTH", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth)); bismuth_pickaxe = new ItemToolAbility(15F, 0, matBismuth, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(2)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addHitAbility(new WeaponAbility.StunAbility(5)) - .addHitAbility(new WeaponAbility.VampireAbility(2F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()) + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolHarvestAbility.SHREDDER, 0) + .addAbility(IToolHarvestAbility.LUCK, 1) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IWeaponAbility.STUN, 2) + .addAbility(IWeaponAbility.VAMPIRE, 0) + .addAbility(IWeaponAbility.BEHEADER, 0) .setDepthRockBreaker().setUnlocalizedName("bismuth_pickaxe").setTextureName(RefStrings.MODID + ":bismuth_pickaxe"); bismuth_axe = new ItemToolAbility(25F, 0, matBismuth, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.ShredderAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(2)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addHitAbility(new WeaponAbility.StunAbility(10)) - .addHitAbility(new WeaponAbility.VampireAbility(3F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("bismuth_axe").setTextureName(RefStrings.MODID + ":bismuth_axe"); + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolHarvestAbility.SHREDDER, 0) + .addAbility(IToolHarvestAbility.LUCK, 1) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IWeaponAbility.STUN, 3) + .addAbility(IWeaponAbility.VAMPIRE, 1) + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("bismuth_axe").setTextureName(RefStrings.MODID + ":bismuth_axe"); ToolMaterial matVolcano = EnumHelper.addToolMaterial("HBM_VOLCANIC", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth)); volcanic_pickaxe = new ItemToolAbility(15F, 0, matVolcano, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(3)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addHitAbility(new WeaponAbility.FireAbility(5)) - .addHitAbility(new WeaponAbility.VampireAbility(2F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()) + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.LUCK, 2) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IWeaponAbility.FIRE, 0) + .addAbility(IWeaponAbility.VAMPIRE, 0) + .addAbility(IWeaponAbility.BEHEADER, 0) .setDepthRockBreaker().setUnlocalizedName("volcanic_pickaxe").setTextureName(RefStrings.MODID + ":volcanic_pickaxe"); volcanic_axe = new ItemToolAbility(25F, 0, matVolcano, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.SmelterAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(3)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addHitAbility(new WeaponAbility.FireAbility(10)) - .addHitAbility(new WeaponAbility.VampireAbility(3F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("volcanic_axe").setTextureName(RefStrings.MODID + ":volcanic_axe"); + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolHarvestAbility.SMELTER, 0) + .addAbility(IToolHarvestAbility.LUCK, 2) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IWeaponAbility.FIRE, 1) + .addAbility(IWeaponAbility.VAMPIRE, 1) + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("volcanic_axe").setTextureName(RefStrings.MODID + ":volcanic_axe"); ToolMaterial matChlorophyte = EnumHelper.addToolMaterial("HBM_CHLOROPHYTE", 4, 0, 75F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.powder_chlorophyte)); chlorophyte_pickaxe = new ItemToolAbility(20F, 0, matChlorophyte, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.LuckAbility(4)) - .addBreakAbility(new ToolAbility.CentrifugeAbility()) - .addBreakAbility(new ToolAbility.MercuryAbility()) - .addHitAbility(new WeaponAbility.StunAbility(10)) - .addHitAbility(new WeaponAbility.VampireAbility(5F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()) + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolHarvestAbility.LUCK, 3) + .addAbility(IToolHarvestAbility.CENTRIFUGE, 0) + .addAbility(IToolHarvestAbility.MERCURY, 0) + .addAbility(IWeaponAbility.STUN, 3) + .addAbility(IWeaponAbility.VAMPIRE, 2) + .addAbility(IWeaponAbility.BEHEADER, 0) .setDepthRockBreaker().setUnlocalizedName("chlorophyte_pickaxe").setTextureName(RefStrings.MODID + ":chlorophyte_pickaxe"); chlorophyte_axe = new ItemToolAbility(50F, 0, matChlorophyte, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.HammerAbility(2)) - .addBreakAbility(new ToolAbility.RecursionAbility(4)) - .addBreakAbility(new ToolAbility.LuckAbility(4)) - .addHitAbility(new WeaponAbility.StunAbility(15)) - .addHitAbility(new WeaponAbility.VampireAbility(10F)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("chlorophyte_axe").setTextureName(RefStrings.MODID + ":chlorophyte_axe"); + .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.RECURSION, 1) + .addAbility(IToolHarvestAbility.LUCK, 3) + .addAbility(IWeaponAbility.STUN, 4) + .addAbility(IWeaponAbility.VAMPIRE, 3) + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("chlorophyte_axe").setTextureName(RefStrings.MODID + ":chlorophyte_axe"); ToolMaterial matMese = EnumHelper.addToolMaterial("HBM_MESE", 4, 0, 100F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); mese_pickaxe = new ItemToolAbility(35F, 0, matMese, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.HammerAbility(3)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.CrystallizerAbility()) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(9)) - .addBreakAbility(new ToolAbility.ExplosionAbility(2.5F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(5F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(10F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(15F)) - .addHitAbility(new WeaponAbility.StunAbility(10)) - .addHitAbility(new WeaponAbility.PhosphorusAbility(60)) - .addHitAbility(new WeaponAbility.BeheaderAbility()) + .addAbility(IToolAreaAbility.HAMMER, 2) + .addAbility(IToolAreaAbility.RECURSION, 2) + .addAbility(IToolHarvestAbility.CRYSTALLIZER, 0) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 5) + .addAbility(IToolAreaAbility.EXPLOSION, 3) + .addAbility(IWeaponAbility.STUN, 3) + .addAbility(IWeaponAbility.PHOSPHORUS, 0) + .addAbility(IWeaponAbility.BEHEADER, 0) .setDepthRockBreaker().setUnlocalizedName("mese_pickaxe").setTextureName(RefStrings.MODID + ":mese_pickaxe"); mese_axe = new ItemToolAbility(75F, 0, matMese, EnumToolType.AXE) - .addBreakAbility(new ToolAbility.HammerAbility(3)) - .addBreakAbility(new ToolAbility.RecursionAbility(5)) - .addBreakAbility(new ToolAbility.SilkAbility()) - .addBreakAbility(new ToolAbility.LuckAbility(9)) - .addBreakAbility(new ToolAbility.ExplosionAbility(2.5F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(5F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(10F)) - .addBreakAbility(new ToolAbility.ExplosionAbility(15F)) - .addHitAbility(new WeaponAbility.StunAbility(15)) - .addHitAbility(new WeaponAbility.PhosphorusAbility(90)) - .addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("mese_axe").setTextureName(RefStrings.MODID + ":mese_axe"); + .addAbility(IToolAreaAbility.HAMMER, 2) + .addAbility(IToolAreaAbility.RECURSION, 2) + .addAbility(IToolHarvestAbility.SILK, 0) + .addAbility(IToolHarvestAbility.LUCK, 5) + .addAbility(IToolAreaAbility.EXPLOSION, 3) + .addAbility(IWeaponAbility.STUN, 4) + .addAbility(IWeaponAbility.PHOSPHORUS, 1) + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("mese_axe").setTextureName(RefStrings.MODID + ":mese_axe"); dnt_sword = new ItemSwordAbility(12F, 0, matMese).setUnlocalizedName("dnt_sword").setTextureName(RefStrings.MODID + ":dnt_sword"); ToolMaterial matDwarf = EnumHelper.addToolMaterial("HBM_DWARVEN", 2, 0, 4F, 0.0F, 10).setRepairItem(new ItemStack(ModItems.ingot_copper)); dwarven_pickaxe = new ItemToolAbility(5F, -0.1, matDwarf, EnumToolType.MINER) - .addBreakAbility(new ToolAbility.HammerAbility(1)).setUnlocalizedName("dwarven_pickaxe").setMaxDamage(250).setTextureName(RefStrings.MODID + ":dwarven_pickaxe"); + .addAbility(IToolAreaAbility.HAMMER, 0).setUnlocalizedName("dwarven_pickaxe").setMaxDamage(250).setTextureName(RefStrings.MODID + ":dwarven_pickaxe"); ToolMaterial matMeteorite = EnumHelper.addToolMaterial("HBM_METEORITE", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); meteorite_sword = new ItemSwordMeteorite(9F, 0, matMeteorite).setUnlocalizedName("meteorite_sword").setTextureName(RefStrings.MODID + ":meteorite_sword"); @@ -4883,11 +4870,11 @@ public class ModItems { diamond_gavel = new WeaponSpecial(ToolMaterial.EMERALD).setUnlocalizedName("diamond_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":diamond_gavel"); ToolMaterial matMeseGavel = EnumHelper.addToolMaterial("HBM_MESEGAVEL", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); mese_gavel = new ItemSwordAbility(250, 1.5, matMeseGavel) - .addHitAbility(IWeaponAbility.PHOSPHORUS, 0) - .addHitAbility(IWeaponAbility.RADIATION, 2) - .addHitAbility(IWeaponAbility.STUN, 3) - .addHitAbility(IWeaponAbility.VAMPIRE, 4) - .addHitAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("mese_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mese_gavel"); + .addAbility(IWeaponAbility.PHOSPHORUS, 0) + .addAbility(IWeaponAbility.RADIATION, 2) + .addAbility(IWeaponAbility.STUN, 3) + .addAbility(IWeaponAbility.VAMPIRE, 4) + .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("mese_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mese_gavel"); 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"); diff --git a/src/main/java/com/hbm/items/tool/IItemWithAbility.java b/src/main/java/com/hbm/items/tool/IItemWithAbility.java deleted file mode 100644 index 99d442fbb..000000000 --- a/src/main/java/com/hbm/items/tool/IItemWithAbility.java +++ /dev/null @@ -1,181 +0,0 @@ -package com.hbm.items.tool; - -import java.util.ArrayList; -import java.util.Random; - -import com.hbm.blocks.ModBlocks; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.network.play.client.C07PacketPlayerDigging; -import net.minecraft.network.play.server.S23PacketBlockChange; -import net.minecraft.stats.StatList; -import net.minecraft.world.World; -import net.minecraftforge.common.ForgeHooks; -import net.minecraftforge.common.IShearable; -import net.minecraftforge.event.world.BlockEvent; - -public interface IItemWithAbility { - - public boolean canHarvestBlock(Block par1Block, ItemStack itemStack); - public boolean isShears(ItemStack stack); - - public default boolean canShearBlock(Block block, ItemStack stack, World world, int x, int y, int z) { - return this.isShears(stack) && block instanceof IShearable && ((IShearable) block).isShearable(stack, world, x, y, z); - } - - public default void breakExtraBlock(World world, int x, int y, int z, EntityPlayer playerEntity, int refX, int refY, int refZ) { - - if(world.isAirBlock(x, y, z)) - return; - - if(!(playerEntity instanceof EntityPlayerMP)) - return; - - EntityPlayerMP player = (EntityPlayerMP) playerEntity; - ItemStack stack = player.getHeldItem(); - - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - if(!(canHarvestBlock(block, stack) || canShearBlock(block, stack, world, x, y, z)) || block == Blocks.bedrock || block == ModBlocks.stone_keyhole) - return; - - Block refBlock = world.getBlock(refX, refY, refZ); - float refStrength = ForgeHooks.blockStrength(refBlock, player, world, refX, refY, refZ); - float strength = ForgeHooks.blockStrength(block, player, world, x, y, z); - - if(!ForgeHooks.canHarvestBlock(block, player, meta) || refStrength / strength > 10f || refBlock.getBlockHardness(world, refX, refY, refZ) < 0) - return; - - BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(world, player.theItemInWorldManager.getGameType(), player, x, y, z); - if(event.isCanceled()) - return; - - if(player.capabilities.isCreativeMode) { - block.onBlockHarvested(world, x, y, z, meta, player); - if(block.removedByPlayer(world, player, x, y, z, false)) - block.onBlockDestroyedByPlayer(world, x, y, z, meta); - - if(!world.isRemote) { - player.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); - } - return; - } - - player.getCurrentEquippedItem().func_150999_a(world, block, x, y, z, player); - - if(!world.isRemote) { - - if(canShearBlock(block, stack, world, x, y, z)) { - shearBlock(world, x, y, z, block, player); - } - - block.onBlockHarvested(world, x, y, z, meta, player); - - if(block.removedByPlayer(world, player, x, y, z, true)) { - block.onBlockDestroyedByPlayer(world, x, y, z, meta); - block.harvestBlock(world, player, x, y, z, meta); - block.dropXpOnBlockBreak(world, x, y, z, event.getExpToDrop()); - } - - player.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); - - } else { - world.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block) + (meta << 12)); - if(block.removedByPlayer(world, player, x, y, z, true)) { - block.onBlockDestroyedByPlayer(world, x, y, z, meta); - } - ItemStack itemstack = player.getCurrentEquippedItem(); - if(itemstack != null) { - itemstack.func_150999_a(world, block, x, y, z, player); - - if(itemstack.stackSize == 0) { - player.destroyCurrentEquippedItem(); - } - } - - Minecraft.getMinecraft().getNetHandler().addToSendQueue(new C07PacketPlayerDigging(2, x, y, z, Minecraft.getMinecraft().objectMouseOver.sideHit)); - } - } - - /** Assumes a canShearBlock check has passed, will most likely crash otherwise! */ - public static void shearBlock(World world, int x, int y, int z, Block block, EntityPlayer player) { - - ItemStack held = player.getHeldItem(); - - IShearable target = (IShearable) block; - if(target.isShearable(held, player.worldObj, x, y, z)) { - ArrayList drops = target.onSheared(held, player.worldObj, x, y, z, EnchantmentHelper.getEnchantmentLevel(Enchantment.fortune.effectId, held)); - Random rand = new Random(); - - for(ItemStack stack : drops) { - float f = 0.7F; - double d = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - double d1 = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - double d2 = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - EntityItem entityitem = new EntityItem(player.worldObj, (double) x + d, (double) y + d1, (double) z + d2, stack); - entityitem.delayBeforeCanPickup = 10; - player.worldObj.spawnEntityInWorld(entityitem); - } - - held.damageItem(1, player); - player.addStat(StatList.mineBlockStatArray[Block.getIdFromBlock(block)], 1); - } - } - - public static void standardDigPost(World world, int x, int y, int z, EntityPlayerMP player) { - - Block block = world.getBlock(x, y, z); - int l = world.getBlockMetadata(x, y, z); - world.playAuxSFXAtEntity(player, 2001, x, y, z, Block.getIdFromBlock(block) + (world.getBlockMetadata(x, y, z) << 12)); - boolean flag = false; - - if(player.capabilities.isCreativeMode) { - flag = removeBlock(world, x, y, z, false, player); - player.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); - } else { - ItemStack itemstack = player.getCurrentEquippedItem(); - boolean flag1 = block.canHarvestBlock(player, l); - - if(itemstack != null) { - itemstack.func_150999_a(world, block, x, y, z, player); - - if(itemstack.stackSize == 0) { - player.destroyCurrentEquippedItem(); - } - } - - flag = removeBlock(world, x, y, z, flag1, player); - if(flag && flag1) { - block.harvestBlock(world, player, x, y, z, l); - } - } - - /* - * // Drop experience if (!player.capabilities.isCreativeMode && flag && - * event != null) { block.dropXpOnBlockBreak(world, x, y, z, - * event.getExpToDrop()); } - */ - } - - public static boolean removeBlock(World world, int x, int y, int z, boolean canHarvest, EntityPlayerMP player) { - Block block = world.getBlock(x, y, z); - int l = world.getBlockMetadata(x, y, z); - block.onBlockHarvested(world, x, y, z, l, player); - boolean flag = block.removedByPlayer(world, player, x, y, z, canHarvest); - - if(flag) { - block.onBlockDestroyedByPlayer(world, x, y, z, l); - } - - return flag; - } -} diff --git a/src/main/java/com/hbm/items/tool/ItemSwordAbility.java b/src/main/java/com/hbm/items/tool/ItemSwordAbility.java index de6cafdb4..784a6a764 100644 --- a/src/main/java/com/hbm/items/tool/ItemSwordAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemSwordAbility.java @@ -25,7 +25,7 @@ public class ItemSwordAbility extends ItemSword { // was there a reason for this to be private? protected float damage; protected double movement; - private AvailableAbilities hitAbilities = new AvailableAbilities(); + private AvailableAbilities abilities = new AvailableAbilities(); public ItemSwordAbility(float damage, double movement, ToolMaterial material) { super(material); @@ -33,8 +33,8 @@ public class ItemSwordAbility extends ItemSword { this.movement = movement; } - public ItemSwordAbility addHitAbility(IWeaponAbility weaponAbility, int level) { - this.hitAbilities.addAbility(weaponAbility, level); + public ItemSwordAbility addAbility(IWeaponAbility weaponAbility, int level) { + this.abilities.addAbility(weaponAbility, level); return this; } @@ -56,8 +56,8 @@ public class ItemSwordAbility extends ItemSword { if(this == ModItems.mese_gavel) attacker.worldObj.playSoundAtEntity(victim, "hbm:weapon.whack", 3.0F, 1.F); - this.hitAbilities.get().forEach((ability, level) -> { - ((IWeaponAbility)ability).onHit(level, attacker.worldObj, (EntityPlayer) attacker, victim, this); + this.abilities.getWeaponAbilities().forEach((ability, level) -> { + ability.onHit(level, attacker.worldObj, (EntityPlayer) attacker, victim, this); }); } @@ -77,7 +77,7 @@ public class ItemSwordAbility extends ItemSword { @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - hitAbilities.addInformation(list); + abilities.addInformation(list); } protected boolean canOperate(ItemStack stack) { diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 1dad676cf..1a844dee9 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Random; import java.util.Set; import com.google.common.collect.HashMultimap; @@ -11,24 +12,30 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.hbm.inventory.gui.GUIScreenToolAbility; import com.hbm.handler.HbmKeybinds; +import com.hbm.blocks.ModBlocks; import com.hbm.extprop.HbmPlayerProps; -import com.hbm.handler.ToolAbility; -import com.hbm.handler.ToolAbility.*; +import com.hbm.handler.ability.AvailableAbilities; +import com.hbm.handler.ability.IBaseAbility; +import com.hbm.handler.ability.IToolAreaAbility; +import com.hbm.handler.ability.IToolHarvestAbility; +import com.hbm.handler.ability.ToolPreset; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.tileentity.IGUIProvider; -import com.hbm.util.ChatBuilder; -import com.hbm.handler.WeaponAbility; import api.hbm.item.IDepthRockTool; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; @@ -37,10 +44,17 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.play.client.C07PacketPlayerDigging; +import net.minecraft.network.play.server.S23PacketBlockChange; +import net.minecraft.stats.StatList; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.IShearable; +import net.minecraftforge.event.world.BlockEvent; -public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDepthRockTool, IGUIProvider { +public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIProvider { protected boolean isShears = false; protected EnumToolType toolType; @@ -48,9 +62,9 @@ public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDept //was there a reason for this to be private? protected float damage; protected double movement; - protected List breakAbility = new ArrayList() {{ add(null); }}; - protected List hitAbility = new ArrayList(); - + protected AvailableAbilities availableAbilities = new AvailableAbilities().addToolAbilities(); + protected boolean rockBreaker = false; + public static enum EnumToolType { PICKAXE( @@ -102,13 +116,14 @@ public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDept } } - public ItemToolAbility addBreakAbility(ToolAbility breakAbility) { - this.breakAbility.add(breakAbility); + public ItemToolAbility addAbility(IBaseAbility ability, int level) { + this.availableAbilities.addAbility(ability, level); + return this; } - public ItemToolAbility addHitAbility(WeaponAbility weaponAbility) { - this.hitAbility.add(weaponAbility); + public ItemToolAbility setDepthRockBreaker() { + this.rockBreaker = true; return this; } @@ -124,14 +139,14 @@ public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDept public boolean hitEntity(ItemStack stack, EntityLivingBase victim, EntityLivingBase attacker) { - if(!attacker.worldObj.isRemote && !this.hitAbility.isEmpty() && attacker instanceof EntityPlayer && canOperate(stack)) { + if(!attacker.worldObj.isRemote && attacker instanceof EntityPlayer && canOperate(stack)) { - for(WeaponAbility ability : this.hitAbility) { - ability.onHit(attacker.worldObj, (EntityPlayer) attacker, victim, this); - } + this.availableAbilities.getWeaponAbilities().forEach((ability, level) -> { + ability.onHit(level, attacker.worldObj, (EntityPlayer) attacker, victim, this); + }); } - stack.damageItem(2, attacker); + stack.damageItem(1, attacker); return true; } @@ -141,10 +156,19 @@ public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDept World world = player.worldObj; Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - if(!world.isRemote && (canHarvestBlock(block, stack) || canShearBlock(block, stack, world, x, y, z)) && this.getCurrentAbility(stack) != null && canOperate(stack)) - return this.getCurrentAbility(stack).onDig(world, x, y, z, player, block, meta, this); + if(!world.isRemote && (canHarvestBlock(block, stack) || canShearBlock(block, stack, world, x, y, z)) && canOperate(stack)) { + Configuration config = getConfiguration(stack); + ToolPreset preset = config.getActivePreset(); + + preset.harvestAbility.preHarvestAll(preset.harvestAbilityLevel, world, player); + + boolean result = preset.areaAbility.onDig(preset.areaAbilityLevel, world, x, y, z, player, this); + + preset.harvestAbility.postHarvestAll(preset.harvestAbilityLevel, world, player); + + return result; + } return false; } @@ -169,18 +193,35 @@ public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDept return super.getDigSpeed(stack, block, meta); } + public boolean canOperate(ItemStack stack) { + return true; + } + @Override public boolean canHarvestBlock(Block block, ItemStack stack) { if(!canOperate(stack)) return false; - if(this.getCurrentAbility(stack) instanceof SilkAbility) + if(this.getConfiguration(stack).getActivePreset().harvestAbility == IToolHarvestAbility.SILK) return true; return getDigSpeed(stack, block, 0) > 1; } + @Override + public boolean canBreakRock(World world, EntityPlayer player, ItemStack tool, Block block, int x, int y, int z) { + return canOperate(tool) && this.rockBreaker; + } + + public boolean canShearBlock(Block block, ItemStack stack, World world, int x, int y, int z) { + return this.isShears(stack) && block instanceof IShearable && ((IShearable) block).isShearable(stack, world, x, y, z); + } + + public boolean isShears(ItemStack stack) { + return this.isShears; + } + @Override public Multimap getItemAttributeModifiers() { @@ -192,38 +233,13 @@ public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDept @SideOnly(Side.CLIENT) public boolean hasEffect(ItemStack stack) { - return getCurrentAbility(stack) != null || stack.isItemEnchanted(); + return stack.isItemEnchanted() || !getConfiguration(stack).getActivePreset().isNone(); } @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - if(this.breakAbility.size() > 1) { - list.add("Abilities: "); - - for(ToolAbility ability : this.breakAbility) { - - if(ability != null) { - - if(getCurrentAbility(stack) == ability) - list.add(" >" + EnumChatFormatting.GOLD + ability.getFullName()); - else - list.add(" " + EnumChatFormatting.GOLD + ability.getFullName()); - } - } - - list.add("Right click to cycle through abilities!"); - list.add("Sneak-click to turn ability off!"); - } - - if(!this.hitAbility.isEmpty()) { - - list.add("Weapon modifiers: "); - - for(WeaponAbility ability : this.hitAbility) { - list.add(" " + EnumChatFormatting.RED + ability.getFullName()); - } - } + availableAbilities.addInformation(list); if(this.rockBreaker) { list.add(""); @@ -233,85 +249,236 @@ public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDept public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - if(this.breakAbility.size() < 2 || !canOperate(stack)) + if(!canOperate(stack)) return super.onItemRightClick(stack, world, player); + + Configuration config = getConfiguration(stack); if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) { if(world.isRemote) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0); return stack; } - if(world.isRemote) + if(config.presets.size() < 2 || world.isRemote) return super.onItemRightClick(stack, world, player); - int i = getAbility(stack); - i++; - if(player.isSneaking()) - i = 0; - - setAbility(stack, i % this.breakAbility.size()); - - while(getCurrentAbility(stack) != null && !getCurrentAbility(stack).isAllowed()) { - - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("[Ability ").nextTranslation(getCurrentAbility(stack).getName()).next(getCurrentAbility(stack).getExtension() + " is blacklisted!]").colorAll(EnumChatFormatting.RED).flush(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player); - - - i++; - setAbility(stack, i % this.breakAbility.size()); - } - - if(getCurrentAbility(stack) != null) { - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("[Enabled ").nextTranslation(getCurrentAbility(stack).getName()).next(getCurrentAbility(stack).getExtension() + "]").colorAll(EnumChatFormatting.YELLOW).flush(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player); + if(player.isSneaking()) { + config.currentPreset = 0; } else { - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("[Tool ability deactivated]").color(EnumChatFormatting.GOLD).flush(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player); + config.currentPreset = (config.currentPreset + 1) % config.presets.size(); } - world.playSoundAtEntity(player, "random.orb", 0.25F, getCurrentAbility(stack) == null ? 0.75F : 1.25F); + setConfiguration(stack, config); + + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(config.getActivePreset().getMessage(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player); + + world.playSoundAtEntity(player, "random.orb", 0.25F, config.getActivePreset().isNone() ? 0.75F : 1.25F); return stack; } - private ToolAbility getCurrentAbility(ItemStack stack) { - int ability = getAbility(stack) % this.breakAbility.size(); - return this.breakAbility.get(ability); + public void breakExtraBlock(World world, int x, int y, int z, EntityPlayer playerEntity, int refX, int refY, int refZ) { + + if(world.isAirBlock(x, y, z)) + return; + + if(!(playerEntity instanceof EntityPlayerMP)) + return; + + EntityPlayerMP player = (EntityPlayerMP) playerEntity; + ItemStack stack = player.getHeldItem(); + + Block block = world.getBlock(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + + if(!(canHarvestBlock(block, stack) || canShearBlock(block, stack, world, x, y, z)) || block == Blocks.bedrock || block == ModBlocks.stone_keyhole) + return; + + Block refBlock = world.getBlock(refX, refY, refZ); + float refStrength = ForgeHooks.blockStrength(refBlock, player, world, refX, refY, refZ); + float strength = ForgeHooks.blockStrength(block, player, world, x, y, z); + + if(!ForgeHooks.canHarvestBlock(block, player, meta) || refStrength / strength > 10f || refBlock.getBlockHardness(world, refX, refY, refZ) < 0) + return; + + BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(world, player.theItemInWorldManager.getGameType(), player, x, y, z); + if(event.isCanceled()) + return; + + Configuration config = getConfiguration(stack); + ToolPreset preset = config.getActivePreset(); + + preset.harvestAbility.onHarvestBlock(preset.harvestAbilityLevel, world, x, y, z, player, block, meta); } - private int getAbility(ItemStack stack) { + /** Assumes a canShearBlock check has passed, will most likely crash otherwise! */ + public static void shearBlock(World world, int x, int y, int z, Block block, EntityPlayer player) { + + ItemStack held = player.getHeldItem(); - if(stack.hasTagCompound()) - return stack.stackTagCompound.getInteger("ability"); + IShearable target = (IShearable) block; + if(target.isShearable(held, player.worldObj, x, y, z)) { + ArrayList drops = target.onSheared(held, player.worldObj, x, y, z, EnchantmentHelper.getEnchantmentLevel(Enchantment.fortune.effectId, held)); + Random rand = new Random(); - return 0; + for(ItemStack stack : drops) { + float f = 0.7F; + double d = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; + double d1 = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; + double d2 = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; + EntityItem entityitem = new EntityItem(player.worldObj, (double) x + d, (double) y + d1, (double) z + d2, stack); + entityitem.delayBeforeCanPickup = 10; + player.worldObj.spawnEntityInWorld(entityitem); + } + + held.damageItem(1, player); + player.addStat(StatList.mineBlockStatArray[Block.getIdFromBlock(block)], 1); + } } - private void setAbility(ItemStack stack, int ability) { + public static void standardDigPost(World world, int x, int y, int z, EntityPlayerMP player) { + Block block = world.getBlock(x, y, z); + int l = world.getBlockMetadata(x, y, z); + world.playAuxSFXAtEntity(player, 2001, x, y, z, Block.getIdFromBlock(block) + (world.getBlockMetadata(x, y, z) << 12)); + boolean flag = false; + + if(player.capabilities.isCreativeMode) { + flag = removeBlock(world, x, y, z, false, player); + player.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); + } else { + ItemStack itemstack = player.getCurrentEquippedItem(); + boolean flag1 = block.canHarvestBlock(player, l); + + flag = removeBlock(world, x, y, z, flag1, player); + + if(itemstack != null) { + itemstack.func_150999_a(world, block, x, y, z, player); + + if(itemstack.stackSize == 0) { + player.destroyCurrentEquippedItem(); + } + } + + // TODO: Missing from other method, may be unneeded + if(flag && flag1) { + block.harvestBlock(world, player, x, y, z, l); + } + + // TODO: Added from other method, may be unneeded + Minecraft.getMinecraft().getNetHandler().addToSendQueue(new C07PacketPlayerDigging(2, x, y, z, Minecraft.getMinecraft().objectMouseOver.sideHit)); + } + + // Why was this commented out? + // Drop experience + // if (!player.capabilities.isCreativeMode && flag && event != null) { + // block.dropXpOnBlockBreak(world, x, y, z, event.getExpToDrop()); + // } + } + + public static boolean removeBlock(World world, int x, int y, int z, boolean canHarvest, EntityPlayerMP player) { + Block block = world.getBlock(x, y, z); + int l = world.getBlockMetadata(x, y, z); + block.onBlockHarvested(world, x, y, z, l, player); + boolean flag = block.removedByPlayer(world, player, x, y, z, canHarvest); + + if(flag) { + block.onBlockDestroyedByPlayer(world, x, y, z, l); + } + + return flag; + } + + public static class Configuration { + public List presets; + public int currentPreset; + + public Configuration() { + this.presets = null; + this.currentPreset = 0; + } + + public Configuration(List presets, int currentPreset) { + this.presets = presets; + this.currentPreset = currentPreset; + } + + public void writeToNBT(NBTTagCompound nbt) { + nbt.setInteger("ability", currentPreset); + + NBTTagList nbtPresets = new NBTTagList(); + + for(ToolPreset preset : presets) { + NBTTagCompound nbtPreset = new NBTTagCompound(); + preset.writeToNBT(nbtPreset); + nbtPresets.appendTag(nbtPreset); + } + + nbt.setTag("abilityPresets", nbtPresets); + } + + public void readFromNBT(NBTTagCompound nbt) { + currentPreset = nbt.getInteger("ability"); + + NBTTagList nbtPresets = nbt.getTagList("abilityPresets", 10); + + presets = new ArrayList(nbtPresets.tagCount()); + + for(int i = 0; i < presets.size(); i++) { + NBTTagCompound nbtPreset = nbtPresets.getCompoundTagAt(i); + ToolPreset preset = new ToolPreset(); + preset.readFromNBT(nbtPreset); + presets.add(preset); + } + + currentPreset = Math.max(0, Math.min(currentPreset, presets.size() - 1)); + } + + public void reset(AvailableAbilities availableAbilities) { + currentPreset = 0; + + presets = new ArrayList(availableAbilities.size()); + presets.add(new ToolPreset()); + + availableAbilities.getToolAreaAbilities().forEach((ability, level) -> { + presets.add(new ToolPreset(ability, level, IToolHarvestAbility.NONE, 0)); + }); + + availableAbilities.getToolHarvestAbilities().forEach((ability, level) -> { + presets.add(new ToolPreset(IToolAreaAbility.NONE, 0, ability, level)); + }); + } + + public void restrictTo(AvailableAbilities availableAbilities) { + for (ToolPreset preset : presets) { + preset.restrictTo(availableAbilities); + } + } + + public ToolPreset getActivePreset() { + return presets.get(currentPreset); + } + } + + public Configuration getConfiguration(ItemStack stack) { + Configuration config = new Configuration(); + + if(!stack.hasTagCompound()) { + config.reset(availableAbilities); + return config; + } + + config.readFromNBT(stack.stackTagCompound); + config.restrictTo(availableAbilities); + return config; + } + + public void setConfiguration(ItemStack stack, Configuration config) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setInteger("ability", ability); - } - - public boolean canOperate(ItemStack stack) { - return true; - } - - public ItemToolAbility setDepthRockBreaker() { - this.rockBreaker = true; - return this; - } - - private boolean rockBreaker = false; - - @Override - public boolean canBreakRock(World world, EntityPlayer player, ItemStack tool, Block block, int x, int y, int z) { - return canOperate(tool) && this.rockBreaker; - } - - @Override - public boolean isShears(ItemStack stack) { - return this.isShears; + config.writeToNBT(stack.getTagCompound()); } @Override @@ -322,6 +489,6 @@ public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDept @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new GUIScreenToolAbility(this); + return new GUIScreenToolAbility(this.availableAbilities); } } From b79b499b214f2019a1950dbd7945bbef2b9937b8 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 17 May 2025 22:03:37 +0300 Subject: [PATCH 036/491] Add backwards compatibility in tool NBT --- src/main/java/com/hbm/items/tool/ItemToolAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 1a844dee9..256483548 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -464,7 +464,7 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro public Configuration getConfiguration(ItemStack stack) { Configuration config = new Configuration(); - if(!stack.hasTagCompound()) { + if(!stack.hasTagCompound() || !stack.stackTagCompound.hasKey("ability") || !stack.stackTagCompound.hasKey("abilityPresets")) { config.reset(availableAbilities); return config; } From 239454e23cb762d67681db9d5d10757186918cf9 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 01:34:50 +0300 Subject: [PATCH 037/491] Fix stuff --- .../handler/ability/AvailableAbilities.java | 17 ++++--- .../inventory/gui/GUIScreenToolAbility.java | 45 +++++++++++++------ .../com/hbm/items/tool/ItemToolAbility.java | 25 ++++++++--- 3 files changed, 63 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java index 0312d97b3..e4662a0c0 100644 --- a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java +++ b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java @@ -1,11 +1,12 @@ package com.hbm.handler.ability; import java.util.Collections; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import com.google.common.base.Functions; import com.hbm.main.MainRegistry; import cpw.mods.fml.relauncher.Side; @@ -14,7 +15,8 @@ import net.minecraft.util.EnumChatFormatting; // All abilities available on a given tool public class AvailableAbilities { - private HashMap abilities = new HashMap(); + // Insertion order matters + private LinkedHashMap abilities = new LinkedHashMap(); public AvailableAbilities() {} @@ -63,15 +65,15 @@ public class AvailableAbilities { } public Map getToolAbilities() { - return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility || a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> a, a -> abilities.get(a))); + return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility || a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> a, a -> abilities.get(a), (x, y) -> y, LinkedHashMap::new)); } public Map getToolAreaAbilities() { - return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility).collect(Collectors.toMap(a -> (IToolAreaAbility)a, a -> abilities.get(a))); + return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility).collect(Collectors.toMap(a -> (IToolAreaAbility)a, a -> abilities.get(a), (x, y) -> y, LinkedHashMap::new)); } public Map getToolHarvestAbilities() { - return abilities.keySet().stream().filter(a -> a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> (IToolHarvestAbility)a, a -> abilities.get(a))); + return abilities.keySet().stream().filter(a -> a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> (IToolHarvestAbility)a, a -> abilities.get(a), (x, y) -> y, LinkedHashMap::new)); } public int size() { @@ -90,7 +92,10 @@ public class AvailableAbilities { list.add("Abilities: "); toolAbilities.forEach((ability, level) -> { - list.add(" " + EnumChatFormatting.GOLD + ability.getFullName(level)); + String fullName = ability.getFullName(level); + if (!fullName.isEmpty()) { + list.add(" " + EnumChatFormatting.GOLD + fullName); + } }); list.add("Right click to cycle through abilities!"); diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 13dd55fda..bf2e9448d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -11,12 +11,12 @@ import com.hbm.handler.ability.IBaseAbility; import com.hbm.handler.ability.IToolAreaAbility; import com.hbm.handler.ability.IToolHarvestAbility; import com.hbm.handler.ability.ToolPreset; +import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.tool.ItemToolAbility; -import com.hbm.items.tool.ItemToolAbility.Configuration; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toclient.PlayerInformPacket; +import com.hbm.packet.toserver.NBTItemControlPacket; import com.hbm.util.EnumUtil; import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; @@ -81,6 +81,7 @@ public class GUIScreenToolAbility extends GuiScreen { super(); this.availableAbilities = availableAbilities; + this.xSize = 186; // Note: increased dynamically this.ySize = 76; @@ -91,10 +92,12 @@ public class GUIScreenToolAbility extends GuiScreen { @Override public void initGui() { this.toolStack = this.mc.thePlayer.getHeldItem(); - + if(this.toolStack == null) { doClose(); } + + this.config = ((ItemToolAbility) this.toolStack.getItem()).getConfiguration(this.toolStack); guiLeft = (width - xSize) / 2; guiTop = (height - ySize) / 2; @@ -239,13 +242,17 @@ public class GUIScreenToolAbility extends GuiScreen { return x <= mouseX && x + width > mouseX && y <= mouseY && y + height > mouseY; } - @Override - public void updateScreen() { - EntityPlayer player = this.mc.thePlayer; - - if(player.getHeldItem() == null || player.getHeldItem() != toolStack) - player.closeScreen(); - } + // Note: This spuriously trigger way too often, and I can't see why. I'll disable it altogether, I guess + // @Override + // public void updateScreen() { + // EntityPlayer player = this.mc.thePlayer; + // + // if(player.getHeldItem() == null || player.getHeldItem().getItem() != toolStack.getItem()) { + // // TODO: Remove + // MainRegistry.logger.warn("GUIScreenToolAbility.updateScreen: toolStack changed!"); + // player.closeScreen(); + // } + // } @Override public void handleMouseInput() { @@ -264,9 +271,16 @@ public class GUIScreenToolAbility extends GuiScreen { ToolPreset activePreset = config.getActivePreset(); // Process switches - handleSwitchesClicked(abilitiesArea, activePreset.areaAbility, activePreset.areaAbilityLevel, hoverIdxArea, mouseX, mouseY); - handleSwitchesClicked(abilitiesHarvest, activePreset.harvestAbility, activePreset.harvestAbilityLevel, hoverIdxHarvest, mouseX, mouseY); - + Pair clickResult; + + clickResult = handleSwitchesClicked(abilitiesArea, activePreset.areaAbility, activePreset.areaAbilityLevel, hoverIdxArea, mouseX, mouseY); + activePreset.areaAbility = (IToolAreaAbility)clickResult.key; + activePreset.areaAbilityLevel = clickResult.value; + + clickResult = handleSwitchesClicked(abilitiesHarvest, activePreset.harvestAbility, activePreset.harvestAbilityLevel, hoverIdxHarvest, mouseX, mouseY); + activePreset.harvestAbility = (IToolHarvestAbility)clickResult.key; + activePreset.harvestAbilityLevel = clickResult.value; + // Process extra buttons if (hoverIdxExtraBtn != -1) { switch (hoverIdxExtraBtn) { @@ -284,6 +298,7 @@ public class GUIScreenToolAbility extends GuiScreen { // Allow quick-closing if (!isInAABB(mouseX, mouseY, guiLeft, guiTop, xSize, ySize)) { + MainRegistry.logger.info("GUIScreenToolAbility.mouseClicked: Clicked outside GUI, closing..."); doClose(); } } @@ -370,6 +385,10 @@ public class GUIScreenToolAbility extends GuiScreen { } protected void doClose() { + // A bit messy, but I suppose it works + ((ItemToolAbility) this.toolStack.getItem()).setConfiguration(toolStack, config); + PacketDispatcher.wrapper.sendToServer(new NBTItemControlPacket(this.toolStack.getTagCompound())); + this.mc.thePlayer.closeScreen(); MainRegistry.proxy.displayTooltip(config.getActivePreset().getMessage().getFormattedText(), MainRegistry.proxy.ID_TOOLABILITY); diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 256483548..2c40e3db3 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -11,6 +11,7 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.hbm.inventory.gui.GUIScreenToolAbility; +import com.hbm.items.IItemControlReceiver; import com.hbm.handler.HbmKeybinds; import com.hbm.blocks.ModBlocks; import com.hbm.extprop.HbmPlayerProps; @@ -22,9 +23,11 @@ import com.hbm.handler.ability.ToolPreset; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; +import com.hbm.packet.toserver.NBTItemControlPacket; import com.hbm.tileentity.IGUIProvider; import api.hbm.item.IDepthRockTool; +import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -54,7 +57,7 @@ import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.IShearable; import net.minecraftforge.event.world.BlockEvent; -public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIProvider { +public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIProvider, IItemControlReceiver { protected boolean isShears = false; protected EnumToolType toolType; @@ -251,13 +254,13 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro if(!canOperate(stack)) return super.onItemRightClick(stack, world, player); - - Configuration config = getConfiguration(stack); if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) { if(world.isRemote) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0); return stack; } + + Configuration config = getConfiguration(stack); if(config.presets.size() < 2 || world.isRemote) return super.onItemRightClick(stack, world, player); @@ -425,7 +428,7 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro presets = new ArrayList(nbtPresets.tagCount()); - for(int i = 0; i < presets.size(); i++) { + for(int i = 0; i < nbtPresets.tagCount(); i++) { NBTTagCompound nbtPreset = nbtPresets.getCompoundTagAt(i); ToolPreset preset = new ToolPreset(); preset.readFromNBT(nbtPreset); @@ -442,10 +445,14 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro presets.add(new ToolPreset()); availableAbilities.getToolAreaAbilities().forEach((ability, level) -> { + if (ability == IToolAreaAbility.NONE) + return; presets.add(new ToolPreset(ability, level, IToolHarvestAbility.NONE, 0)); }); availableAbilities.getToolHarvestAbilities().forEach((ability, level) -> { + if (ability == IToolHarvestAbility.NONE) + return; presets.add(new ToolPreset(IToolAreaAbility.NONE, 0, ability, level)); }); } @@ -478,7 +485,15 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); - config.writeToNBT(stack.getTagCompound()); + config.writeToNBT(stack.stackTagCompound); + } + + @Override + public void receiveControl(ItemStack stack, NBTTagCompound data) { + Configuration config = new Configuration(); + config.readFromNBT(data); + config.restrictTo(availableAbilities); + setConfiguration(stack, config); } @Override From e23cfab649bb8a26e70176bb03703551d6f6ac5f Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 13:16:56 +0300 Subject: [PATCH 038/491] Make explosion incompatible with harvest abilities --- .../hbm/handler/ability/IToolAreaAbility.java | 10 ++++++ .../com/hbm/handler/ability/ToolPreset.java | 5 +++ .../inventory/gui/GUIScreenToolAbility.java | 34 ++++++++++++++----- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index 727d602e5..e49cb4c30 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -29,6 +29,11 @@ public interface IToolAreaAbility extends IBaseAbility { // (neither for the original block nor for the extras) public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool); + // Whether breakExtraBlock is called at all. Currently only false for explosion + public default boolean allowsHarvest(int level) { + return true; + } + // region handlers public static final IToolAreaAbility NONE = new IToolAreaAbility() { @Override @@ -231,6 +236,11 @@ public interface IToolAreaAbility extends IBaseAbility { return " (" + strengthAtLevel[level] + ")"; } + @Override + public boolean allowsHarvest(int level) { + return false; + } + @Override public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { float strength = strengthAtLevel[level]; diff --git a/src/main/java/com/hbm/handler/ability/ToolPreset.java b/src/main/java/com/hbm/handler/ability/ToolPreset.java index caa8956ae..ce8f36dd5 100644 --- a/src/main/java/com/hbm/handler/ability/ToolPreset.java +++ b/src/main/java/com/hbm/handler/ability/ToolPreset.java @@ -80,6 +80,11 @@ public class ToolPreset { areaAbilityLevel = 0; } + if (!areaAbility.allowsHarvest(areaAbilityLevel)) { + harvestAbility = IToolHarvestAbility.NONE; + harvestAbilityLevel = 0; + } + int maxHarvestLevel = availableAbilities.maxLevel(harvestAbility); if (maxHarvestLevel == -1) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index bf2e9448d..9ff0d5682 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -11,7 +11,6 @@ import com.hbm.handler.ability.IBaseAbility; import com.hbm.handler.ability.IToolAreaAbility; import com.hbm.handler.ability.IToolHarvestAbility; import com.hbm.handler.ability.ToolPreset; -import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.tool.ItemToolAbility; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -68,14 +67,13 @@ public class GUIScreenToolAbility extends GuiScreen { abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.MERCURY, 224, 107)); } - // TODO: Use availableAbilities protected ItemStack toolStack; - AvailableAbilities availableAbilities; - ItemToolAbility.Configuration config; + protected AvailableAbilities availableAbilities; + protected ItemToolAbility.Configuration config; - int hoverIdxArea = -1; - int hoverIdxHarvest = -1; - int hoverIdxExtraBtn = -1; + protected int hoverIdxHarvest = -1; + protected int hoverIdxArea = -1; + protected int hoverIdxExtraBtn = -1; public GUIScreenToolAbility(AvailableAbilities availableAbilities) { super(); @@ -184,7 +182,7 @@ public class GUIScreenToolAbility extends GuiScreen { for (int i = 0; i < abilities.size(); ++i) { AbilityInfo abilityInfo = abilities.get(i); - boolean available = availableAbilities.supportsAbility(abilityInfo.ability); + boolean available = abilityAvailable(abilityInfo.ability); boolean selected = abilityInfo.ability == selectedAbility; // Draw switch @@ -242,6 +240,19 @@ public class GUIScreenToolAbility extends GuiScreen { return x <= mouseX && x + width > mouseX && y <= mouseY && y + height > mouseY; } + private boolean abilityAvailable(IBaseAbility ability) { + if (!availableAbilities.supportsAbility(ability)) { + return false; + } + + ToolPreset activePreset = config.getActivePreset(); + if (ability instanceof IToolHarvestAbility && !activePreset.areaAbility.allowsHarvest(activePreset.areaAbilityLevel)) { + return false; + } + + return true; + } + // Note: This spuriously trigger way too often, and I can't see why. I'll disable it altogether, I guess // @Override // public void updateScreen() { @@ -281,6 +292,11 @@ public class GUIScreenToolAbility extends GuiScreen { activePreset.harvestAbility = (IToolHarvestAbility)clickResult.key; activePreset.harvestAbilityLevel = clickResult.value; + if (!activePreset.areaAbility.allowsHarvest(activePreset.areaAbilityLevel)) { + activePreset.harvestAbility = IToolHarvestAbility.NONE; + activePreset.harvestAbilityLevel = 0; + } + // Process extra buttons if (hoverIdxExtraBtn != -1) { switch (hoverIdxExtraBtn) { @@ -306,7 +322,7 @@ public class GUIScreenToolAbility extends GuiScreen { protected Pair handleSwitchesClicked(List abilities, IBaseAbility selectedAbility, int selectedLevel, int hoverIdx, int mouseX, int mouseY) { if (hoverIdx != -1) { IBaseAbility hoveredAbility = abilities.get(hoverIdx).ability; - boolean available = availableAbilities.supportsAbility(hoveredAbility); + boolean available = abilityAvailable(hoveredAbility); if (available) { int availableLevels = availableAbilities.maxLevel(hoveredAbility) + 1; From ce64270b2ca1986b74dac9d0ab519d45a3bfe459 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 13:42:11 +0300 Subject: [PATCH 039/491] Sort abilities consistently --- .../handler/ability/AvailableAbilities.java | 19 ++++++- .../com/hbm/handler/ability/IBaseAbility.java | 11 +++- .../hbm/handler/ability/IToolAreaAbility.java | 22 ++++++++ .../handler/ability/IToolHarvestAbility.java | 42 +++++++++++++++ .../hbm/handler/ability/IWeaponAbility.java | 52 +++++++++++++++++++ .../com/hbm/items/tool/ItemToolAbility.java | 9 ++++ 6 files changed, 152 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java index e4662a0c0..650f22a4b 100644 --- a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java +++ b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java @@ -1,6 +1,7 @@ package com.hbm.handler.ability; import java.util.Collections; +import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -91,7 +92,14 @@ public class AvailableAbilities { if (!toolAbilities.isEmpty()) { list.add("Abilities: "); - toolAbilities.forEach((ability, level) -> { + toolAbilities.entrySet().stream().sorted( + Comparator + .comparing(Map.Entry::getKey) + .thenComparing(Map.Entry::getValue) + ).forEach(entry -> { + IBaseAbility ability = entry.getKey(); + int level = entry.getValue(); + String fullName = ability.getFullName(level); if (!fullName.isEmpty()) { list.add(" " + EnumChatFormatting.GOLD + fullName); @@ -108,7 +116,14 @@ public class AvailableAbilities { if (!weaponAbilities.isEmpty()) { list.add("Weapon modifiers: "); - weaponAbilities.forEach((ability, level) -> { + weaponAbilities.entrySet().stream().sorted( + Comparator + .comparing(Map.Entry::getKey) + .thenComparing(Map.Entry::getValue) + ).forEach(entry -> { + IWeaponAbility ability = entry.getKey(); + int level = entry.getValue(); + list.add(" " + EnumChatFormatting.RED + ability.getFullName(level)); }); } diff --git a/src/main/java/com/hbm/handler/ability/IBaseAbility.java b/src/main/java/com/hbm/handler/ability/IBaseAbility.java index 007d25e81..9999bcaa0 100644 --- a/src/main/java/com/hbm/handler/ability/IBaseAbility.java +++ b/src/main/java/com/hbm/handler/ability/IBaseAbility.java @@ -2,7 +2,7 @@ package com.hbm.handler.ability; import net.minecraft.client.resources.I18n; -public interface IBaseAbility { +public interface IBaseAbility extends Comparable { public String getName(); public default String getExtension(int level) { @@ -24,4 +24,13 @@ public interface IBaseAbility { default int levels() { return 1; } + + default int sortOrder() { + return hashCode(); + } + + @Override + default int compareTo(IBaseAbility o) { + return sortOrder() - o.sortOrder(); + } } diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index e49cb4c30..4f4994bbd 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -34,12 +34,19 @@ public interface IToolAreaAbility extends IBaseAbility { return true; } + public final static int SORT_ORDER_BASE = 0; + // region handlers public static final IToolAreaAbility NONE = new IToolAreaAbility() { @Override public String getName() { return ""; } + + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 0; + } @Override public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { @@ -70,6 +77,11 @@ public interface IToolAreaAbility extends IBaseAbility { return " (" + radiusAtLevel[level] + ")"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 1; + } + // Note: if reusing it across different instatces of a tool // is a problem here, then it had already been one before // the refactor! The solution is to simply make this a local @@ -193,6 +205,11 @@ public interface IToolAreaAbility extends IBaseAbility { return " (" + rangeAtLevel[level] + ")"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 2; + } + @Override public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { int range = rangeAtLevel[level]; @@ -241,6 +258,11 @@ public interface IToolAreaAbility extends IBaseAbility { return false; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 3; + } + @Override public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { float strength = strengthAtLevel[level]; diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index 82bbca88c..99cbea697 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -41,6 +41,8 @@ public interface IToolHarvestAbility extends IBaseAbility { } } + public final static int SORT_ORDER_BASE = 100; + // region handlers public static final IToolHarvestAbility NONE = new IToolHarvestAbility() { @Override @@ -48,6 +50,11 @@ public interface IToolHarvestAbility extends IBaseAbility { return ""; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 0; + } + @Override public boolean skipDefaultDrops(int level) { return false; @@ -65,6 +72,11 @@ public interface IToolHarvestAbility extends IBaseAbility { return ToolConfig.abilitySilk; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 1; + } + @Override public boolean skipDefaultDrops(int level) { return false; @@ -109,6 +121,11 @@ public interface IToolHarvestAbility extends IBaseAbility { return " (" + powerAtLevel[level] + ")"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 2; + } + @Override public boolean skipDefaultDrops(int level) { return false; @@ -141,6 +158,11 @@ public interface IToolHarvestAbility extends IBaseAbility { return ToolConfig.abilityFurnace; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 3; + } + @Override public boolean skipDefaultDrops(int level) { return true; @@ -184,6 +206,11 @@ public interface IToolHarvestAbility extends IBaseAbility { return ToolConfig.abilityShredder; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 4; + } + @Override public boolean skipDefaultDrops(int level) { return true; @@ -216,6 +243,11 @@ public interface IToolHarvestAbility extends IBaseAbility { return ToolConfig.abilityCentrifuge; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 5; + } + @Override public boolean skipDefaultDrops(int level) { return true; @@ -252,6 +284,11 @@ public interface IToolHarvestAbility extends IBaseAbility { return ToolConfig.abilityCrystallizer; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 6; + } + @Override public boolean skipDefaultDrops(int level) { return true; @@ -284,6 +321,11 @@ public interface IToolHarvestAbility extends IBaseAbility { return ToolConfig.abilityMercury; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 7; + } + @Override public boolean skipDefaultDrops(int level) { return true; diff --git a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java index 92f0d3f1d..97c604c54 100644 --- a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java +++ b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java @@ -38,6 +38,8 @@ public interface IWeaponAbility extends IBaseAbility { // Note: tool is currently unused in weapon abilities public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool); + public final static int SORT_ORDER_BASE = 200; + // region handlers public static final IWeaponAbility NONE = new IWeaponAbility() { @Override @@ -45,6 +47,11 @@ public interface IWeaponAbility extends IBaseAbility { return ""; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 0; + } + @Override public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {} }; @@ -67,6 +74,11 @@ public interface IWeaponAbility extends IBaseAbility { return " (" + radAtLevel[level] + ")"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 1; + } + @Override public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { if(victim instanceof EntityLivingBase) @@ -92,6 +104,11 @@ public interface IWeaponAbility extends IBaseAbility { return " (" + amountAtLevel[level] + ")"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 2; + } + @Override public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { float amount = amountAtLevel[level]; @@ -124,6 +141,11 @@ public interface IWeaponAbility extends IBaseAbility { return " (" + durationAtLevel[level] + ")"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 3; + } + @Override public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { int duration = durationAtLevel[level]; @@ -155,6 +177,11 @@ public interface IWeaponAbility extends IBaseAbility { return " (1:" + dividerAtLevel[level] + ")"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 4; + } + @Override public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { int divider = dividerAtLevel[level]; @@ -197,6 +224,11 @@ public interface IWeaponAbility extends IBaseAbility { return " (" + durationAtLevel[level] + ")"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 5; + } + @Override public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { int duration = durationAtLevel[level]; @@ -227,6 +259,11 @@ public interface IWeaponAbility extends IBaseAbility { return " (" + durationAtLevel[level] + ")"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 5; + } + @Override public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { if(victim instanceof EntityLivingBase) { @@ -253,6 +290,11 @@ public interface IWeaponAbility extends IBaseAbility { return " (1:" + dividerAtLevel[level] + ")"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 6; + } + @Override public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { int divider = dividerAtLevel[level]; @@ -290,6 +332,11 @@ public interface IWeaponAbility extends IBaseAbility { return "weapon.ability.beheader"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 7; + } + @Override public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) { @@ -331,6 +378,11 @@ public interface IWeaponAbility extends IBaseAbility { return "weapon.ability.bobble"; } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 8; + } + @Override public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 2c40e3db3..112e8bad4 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -1,6 +1,7 @@ package com.hbm.items.tool; import java.util.ArrayList; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Locale; @@ -455,6 +456,14 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro return; presets.add(new ToolPreset(IToolAreaAbility.NONE, 0, ability, level)); }); + + presets.sort( + Comparator + .comparing((ToolPreset p) -> p.harvestAbility) + .thenComparingInt(p -> p.harvestAbilityLevel) + .thenComparing(p -> p.areaAbility) + .thenComparingInt(p -> p.areaAbilityLevel) + ); } public void restrictTo(AvailableAbilities availableAbilities) { From cc31edff442c530cacd44e131d8eecf3b5615127 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 13:43:06 +0300 Subject: [PATCH 040/491] Change item tooltip --- .../java/com/hbm/handler/ability/AvailableAbilities.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java index 650f22a4b..38706bef2 100644 --- a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java +++ b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java @@ -106,9 +106,9 @@ public class AvailableAbilities { } }); - list.add("Right click to cycle through abilities!"); - list.add("Sneak-click to turn ability off!"); - list.add("Alt-click to open ability selection GUI!"); + list.add("Right click to cycle through presets!"); + list.add("Sneak-click to go to first preset!"); + list.add("Alt-click to open customization GUI!"); } Map weaponAbilities = getWeaponAbilities(); @@ -123,7 +123,7 @@ public class AvailableAbilities { ).forEach(entry -> { IWeaponAbility ability = entry.getKey(); int level = entry.getValue(); - + list.add(" " + EnumChatFormatting.RED + ability.getFullName(level)); }); } From 2497d628e57bbff96b75161aead01ee5479a3fce Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 13:58:03 +0300 Subject: [PATCH 041/491] Fix explosing incompatibility --- src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 9ff0d5682..0c2a63ddb 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -246,7 +246,7 @@ public class GUIScreenToolAbility extends GuiScreen { } ToolPreset activePreset = config.getActivePreset(); - if (ability instanceof IToolHarvestAbility && !activePreset.areaAbility.allowsHarvest(activePreset.areaAbilityLevel)) { + if (ability instanceof IToolHarvestAbility && ability != IToolHarvestAbility.NONE && !activePreset.areaAbility.allowsHarvest(activePreset.areaAbilityLevel)) { return false; } From 29e69b9c496d6fddec46a0075d82abf52d44747f Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 14:01:11 +0300 Subject: [PATCH 042/491] Pat myself on the back --- gradle.properties | 134 +++++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/gradle.properties b/gradle.properties index 187b19fb6..4c2717118 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,67 +1,67 @@ -mod_version=1.0.27 -# Empty build number makes a release type -mod_build_number=5320 - -credits=HbMinecraft,\ - \ rodolphito (explosion algorithms),\ - \ grangerave (explosion algorithms),\ - \ Hoboy (textures, models),\ - \ Drillgon200 (effects, models, porting),\ - \ MartinTheDragon (calculator, chunk-based fallout, bendable cranes, pipe improvements, PWR sounds),\ - \ Alcater (GUI textures, porting),\ - \ MellowArpeggiation (new animation system, turbine sounds, sound fixes, industrial lights, better particle diodes),\ - \ Pheo (textures, various machines, models, weapons),\ - \ Vr (gas centrifuges, better worldgen, ZIRNOX, CP-1 parts, starter guide, new cyclotron, weapon animations),\ - \ UFFR (RTG pellets, guns, casings, euphemium capacitor, nucleartech.wiki),\ - \ LePeep (coilgun model, BDCL QC),\ - \ Adam29 (liquid petroleum, ethanol, electric furnace),\ - \ Pvndols (thorium fuel recipe, gas turbine),\ - \ JamesH2 (blood mechanics, nitric acid, particle emitter),\ - \ Lazzzycat (structures),\ - \ PastaBaguette (coal horse decal),\ - \ Doctor17 (russian localization)),\ - \ Pashtet (russian localization),\ - \ Bismarck (chinese localization),\ - \ Creeper-banner (chinese localization),\ - \ 5467864 (chinese localization),\ - \ eeeeee0a (chinese localization),\ - \ hz0909adc (chinese localization),\ - \ LSKLW (chinese localization),\ - \ R-Kaenbyou (chinese localization),\ - \ scp-000000000 (chinese localization),\ - \ UnnameTokiko (chinese localization),\ - \ Herobrine 457985 (chinese localization),\ - \ xxwinhere (chinese localization),\ - \ Maksymisio (polish localization)\ - \ el3ctro4ndre (italian localization),\ - \ Pu-238 (Tom impact effects),\ - \ Frooz (gun models),\ - \ VT-6/24 (models, textures),\ - \ Nos (models),\ - \ WushiThe (models),\ - \ Minecreep (models),\ - \ 70k (textures, glyphid AI, strand caster, electrolyzer changes, cryolite),\ - \ instantnootles (concept artist),\ - \ haru315 (spiral point algorithm),\ - \ Sten89 (models),\ - \ Pixelguru26 (textures),\ - \ TheBlueHat (textures),\ - \ Burningwater202 (laminate glass),\ - \ TehTemmie (reacher radiation function),\ - \ Silly541 (config for safe ME drives),\ - \ Voxelstice (OpenComputers integration, turbine spinup),\ - \ BallOfEnergy1 (OpenComputers integration, RBMK and packet optimization, crate backpacks),\ - \ sdddddf80 (recipe configs, chinese localization, custom machine holograms),\ - \ Abel1502 (optimization, crate upgrade recipes, strand caster improvements, varous tweaks),\ - \ Darek505 (armor rendering compatibility fix),\ - \ SuperCraftAlex (tooltips)\ - \ Ice-Arrow (research reactor tweaks),\ - \ 245tt (anvil GUI improvements),\ - \ KoblizekXD (doors),\ - \ FOlkvangrField (custom machine parts),\ - \ RosaTryp (centrifuge config),\ - \ Toshayo (satellite loot system, project settings, gradle curse task),\ - \ icomet (refactoring),\ - \ martemen (project settings),\ - \ OvermindDL1 (project settings),\ - \ impbk2002 (project settings)\ +mod_version=1.0.27 +# Empty build number makes a release type +mod_build_number=5320 + +credits=HbMinecraft,\ + \ rodolphito (explosion algorithms),\ + \ grangerave (explosion algorithms),\ + \ Hoboy (textures, models),\ + \ Drillgon200 (effects, models, porting),\ + \ MartinTheDragon (calculator, chunk-based fallout, bendable cranes, pipe improvements, PWR sounds),\ + \ Alcater (GUI textures, porting),\ + \ MellowArpeggiation (new animation system, turbine sounds, sound fixes, industrial lights, better particle diodes),\ + \ Pheo (textures, various machines, models, weapons),\ + \ V�r (gas centrifuges, better worldgen, ZIRNOX, CP-1 parts, starter guide, new cyclotron, weapon animations),\ + \ UFFR (RTG pellets, guns, casings, euphemium capacitor, nucleartech.wiki),\ + \ LePeep (coilgun model, BDCL QC),\ + \ Adam29 (liquid petroleum, ethanol, electric furnace),\ + \ Pvndols (thorium fuel recipe, gas turbine),\ + \ JamesH2 (blood mechanics, nitric acid, particle emitter),\ + \ Lazzzycat (structures),\ + \ PastaBaguette (coal horse decal),\ + \ Doctor17 (russian localization)),\ + \ Pashtet (russian localization),\ + \ Bismarck (chinese localization),\ + \ Creeper-banner (chinese localization),\ + \ 5467864 (chinese localization),\ + \ eeeeee0a (chinese localization),\ + \ hz0909adc (chinese localization),\ + \ LSKLW (chinese localization),\ + \ R-Kaenbyou (chinese localization),\ + \ scp-000000000 (chinese localization),\ + \ UnnameTokiko (chinese localization),\ + \ Herobrine 457985 (chinese localization),\ + \ xxwinhere (chinese localization),\ + \ Maksymisio (polish localization)\ + \ el3ctro4ndre (italian localization),\ + \ Pu-238 (Tom impact effects),\ + \ Frooz (gun models),\ + \ VT-6/24 (models, textures),\ + \ Nos (models),\ + \ WushiThe (models),\ + \ Minecreep (models),\ + \ 70k (textures, glyphid AI, strand caster, electrolyzer changes, cryolite),\ + \ instantnootles (concept artist),\ + \ haru315 (spiral point algorithm),\ + \ Sten89 (models),\ + \ Pixelguru26 (textures),\ + \ TheBlueHat (textures),\ + \ Burningwater202 (laminate glass),\ + \ TehTemmie (reacher radiation function),\ + \ Silly541 (config for safe ME drives),\ + \ Voxelstice (OpenComputers integration, turbine spinup),\ + \ BallOfEnergy1 (OpenComputers integration, RBMK and packet optimization, crate backpacks),\ + \ sdddddf80 (recipe configs, chinese localization, custom machine holograms),\ + \ Abel1502 (abilities GUI, optimization, crate upgrade recipes, strand caster improvements, varous tweaks),\ + \ Darek505 (armor rendering compatibility fix),\ + \ SuperCraftAlex (tooltips)\ + \ Ice-Arrow (research reactor tweaks),\ + \ 245tt (anvil GUI improvements),\ + \ KoblizekXD (doors),\ + \ FOlkvangrField (custom machine parts),\ + \ RosaTryp (centrifuge config),\ + \ Toshayo (satellite loot system, project settings, gradle curse task),\ + \ icomet (refactoring),\ + \ martemen (project settings),\ + \ OvermindDL1 (project settings),\ + \ impbk2002 (project settings)\ From c475e4f3d3f1a60147a47825dc2bb1c7ab5d723d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 14:25:52 +0300 Subject: [PATCH 043/491] Clean up after cherry-picking I originally did it in my local clone of NTM-Space, and the cherry-picking seemingly carried along a couple of features from there by accident --- .../hbm/handler/ability/IToolAreaAbility.java | 14 +---- .../hbm/handler/ability/IWeaponAbility.java | 51 +------------------ 2 files changed, 4 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index 4f4994bbd..91fd07d19 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -92,18 +92,8 @@ public interface IToolAreaAbility extends IBaseAbility { public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { Block b = world.getBlock(x, y, z); - if(!ToolConfig.recursiveStone) { - Item item = Item.getItemFromBlock(b); - List stone = OreDictionary.getOres(OreDictManager.KEY_STONE); - for(ItemStack stack : stone) { - if(stack.getItem() == item) - return false; - } - List cobble = OreDictionary.getOres(OreDictManager.KEY_COBBLESTONE); - for(ItemStack stack : cobble) { - if(stack.getItem() == item) - return false; - } + if(b == Blocks.stone && !ToolConfig.recursiveStone) { + return false; } if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) diff --git a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java index 97c604c54..f68333333 100644 --- a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java +++ b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java @@ -159,53 +159,6 @@ public interface IWeaponAbility extends IBaseAbility { } }; - public static final IWeaponAbility BLEND = new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.blender"; - } - - public final int[] dividerAtLevel = {12}; - - @Override - public int levels() { - return dividerAtLevel.length; - } - - @Override - public String getExtension(int level) { - return " (1:" + dividerAtLevel[level] + ")"; - } - - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 4; - } - - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { - int divider = dividerAtLevel[level]; - - if(victim instanceof EntityLivingBase) { - EntityLivingBase living = (EntityLivingBase) victim; - - if(living.getHealth() <= 0.0F) { - int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health - world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "mob.zombie.woodbreak", 0.5F, 1.0F); - victim.attackEntityFrom(ModDamageSource.turbofan, 100); - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "giblets"); - data.setInteger("count", count * 4); - data.setInteger("ent", victim.getEntityId()); - data.setInteger("cDiv", 5); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, victim.posX, victim.posY + victim.height * 0.5, victim.posZ), new TargetPoint(victim.dimension, victim.posX, victim.posY + victim.height * 0.5, victim.posZ, 150)); - living.entityDropItem(new ItemStack(ModItems.flesh, 10, 0), 0.0F); - } - } - } - }; - public static final IWeaponAbility PHOSPHORUS = new IWeaponAbility() { @Override public String getName() { @@ -226,7 +179,7 @@ public interface IWeaponAbility extends IBaseAbility { @Override public int sortOrder() { - return SORT_ORDER_BASE + 5; + return SORT_ORDER_BASE + 4; } @Override @@ -401,7 +354,7 @@ public interface IWeaponAbility extends IBaseAbility { }; // endregion handlers - static final IWeaponAbility[] abilities = {NONE, RADIATION, VAMPIRE, STUN, BLEND, PHOSPHORUS, FIRE, CHAINSAW, BEHEADER, BOBBLE}; + static final IWeaponAbility[] abilities = {NONE, RADIATION, VAMPIRE, STUN, PHOSPHORUS, FIRE, CHAINSAW, BEHEADER, BOBBLE}; static IWeaponAbility getByName(String name) { for(IWeaponAbility ability : abilities) { From 05562018fc41c5870d3c8df0f94d1d647c45c902 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 14:35:17 +0300 Subject: [PATCH 044/491] Limit max presets --- src/main/java/com/hbm/handler/ability/IWeaponAbility.java | 8 ++++---- .../java/com/hbm/inventory/gui/GUIScreenToolAbility.java | 4 ++++ src/main/java/com/hbm/items/tool/ItemToolAbility.java | 5 +++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java index f68333333..9a874dbb1 100644 --- a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java +++ b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java @@ -214,7 +214,7 @@ public interface IWeaponAbility extends IBaseAbility { @Override public int sortOrder() { - return SORT_ORDER_BASE + 5; + return SORT_ORDER_BASE + 6; } @Override @@ -245,7 +245,7 @@ public interface IWeaponAbility extends IBaseAbility { @Override public int sortOrder() { - return SORT_ORDER_BASE + 6; + return SORT_ORDER_BASE + 7; } @Override @@ -287,7 +287,7 @@ public interface IWeaponAbility extends IBaseAbility { @Override public int sortOrder() { - return SORT_ORDER_BASE + 7; + return SORT_ORDER_BASE + 8; } @Override @@ -333,7 +333,7 @@ public interface IWeaponAbility extends IBaseAbility { @Override public int sortOrder() { - return SORT_ORDER_BASE + 8; + return SORT_ORDER_BASE + 9; } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 0c2a63ddb..7b6e3b1b5 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -372,6 +372,10 @@ public class GUIScreenToolAbility extends GuiScreen { } protected void doAddPreset() { + if (config.presets.size() >= 99) { + return; + } + config.presets.add(config.currentPreset + 1, new ToolPreset()); config.currentPreset += 1; } diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 112e8bad4..bf83e398b 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -426,10 +426,11 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro currentPreset = nbt.getInteger("ability"); NBTTagList nbtPresets = nbt.getTagList("abilityPresets", 10); + int numPresets = Math.min(nbtPresets.tagCount(), 99); - presets = new ArrayList(nbtPresets.tagCount()); + presets = new ArrayList(numPresets); - for(int i = 0; i < nbtPresets.tagCount(); i++) { + for(int i = 0; i < numPresets; i++) { NBTTagCompound nbtPreset = nbtPresets.getCompoundTagAt(i); ToolPreset preset = new ToolPreset(); preset.readFromNBT(nbtPreset); From 92b9ab23695c4653482be17291a6b1801a4756d2 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 14:56:24 +0300 Subject: [PATCH 045/491] Fix original block not being affected by ability --- .../hbm/handler/ability/IToolAreaAbility.java | 35 ++++++++----------- .../com/hbm/items/tool/ItemToolAbility.java | 4 +-- 2 files changed, 15 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index 91fd07d19..c436e76f4 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -24,10 +24,8 @@ import net.minecraftforge.oredict.OreDictionary; public interface IToolAreaAbility extends IBaseAbility { // Should call tool.breakExtraBlock on a bunch of blocks. - // The initial block is always implicitly broken and shouldn't be included. - // If true is returned, no block breaking is handled by the tool - // (neither for the original block nor for the extras) - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool); + // The initial block should be included if you want it broken! + public void onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool); // Whether breakExtraBlock is called at all. Currently only false for explosion public default boolean allowsHarvest(int level) { @@ -49,8 +47,8 @@ public interface IToolAreaAbility extends IBaseAbility { } @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { - return false; + public void onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + tool.breakExtraBlock(world, x, y, z, player, x, y, z); } }; @@ -89,21 +87,24 @@ public interface IToolAreaAbility extends IBaseAbility { private Set pos = new HashSet<>(); @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + public void onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { Block b = world.getBlock(x, y, z); if(b == Blocks.stone && !ToolConfig.recursiveStone) { - return false; + tool.breakExtraBlock(world, x, y, z, player, x, y, z); + return; } - if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) - return false; + if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) { + tool.breakExtraBlock(world, x, y, z, player, x, y, z); + return; + } pos.clear(); recurse(world, x, y, z, x, y, z, player, tool, 0, radiusAtLevel[level]); - return false; + tool.breakExtraBlock(world, x, y, z, player, x, y, z); } private final List offsets = new ArrayList(3*3*3-1) {{ @@ -201,22 +202,16 @@ public interface IToolAreaAbility extends IBaseAbility { } @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + public void onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { int range = rangeAtLevel[level]; for(int a = x - range; a <= x + range; a++) { for(int b = y - range; b <= y + range; b++) { for(int c = z - range; c <= z + range; c++) { - - if(a == x && b == y && c == z) - continue; - tool.breakExtraBlock(world, a, b ,c, player, x, y, z); } } } - - return false; } }; @@ -254,7 +249,7 @@ public interface IToolAreaAbility extends IBaseAbility { } @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + public void onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { float strength = strengthAtLevel[level]; ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); @@ -265,8 +260,6 @@ public interface IToolAreaAbility extends IBaseAbility { ex.doExplosionB(false); player.worldObj.createExplosion(player, x + 0.5, y + 0.5, z + 0.5, 0.1F, false); - - return true; } }; // endregion handlers diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index bf83e398b..1db479d72 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -167,11 +167,9 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro preset.harvestAbility.preHarvestAll(preset.harvestAbilityLevel, world, player); - boolean result = preset.areaAbility.onDig(preset.areaAbilityLevel, world, x, y, z, player, this); + preset.areaAbility.onDig(preset.areaAbilityLevel, world, x, y, z, player, this); preset.harvestAbility.postHarvestAll(preset.harvestAbilityLevel, world, player); - - return result; } return false; From 7c135c4a33a869c8494652039fc961bbf703b51c Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 15:04:25 +0300 Subject: [PATCH 046/491] This time for sure --- src/main/java/com/hbm/items/tool/ItemToolAbility.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 1db479d72..df655523d 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -170,6 +170,8 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro preset.areaAbility.onDig(preset.areaAbilityLevel, world, x, y, z, player, this); preset.harvestAbility.postHarvestAll(preset.harvestAbilityLevel, world, player); + + return true; } return false; From 25015a4f7a72561796aefc211bf95fb8b9a66597 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 15:39:08 +0300 Subject: [PATCH 047/491] Third time's the charm --- src/main/java/com/hbm/handler/ability/IToolAreaAbility.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index c436e76f4..94cd39e96 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -208,10 +208,14 @@ public interface IToolAreaAbility extends IBaseAbility { for(int a = x - range; a <= x + range; a++) { for(int b = y - range; b <= y + range; b++) { for(int c = z - range; c <= z + range; c++) { + if (a == x && b == y && c == z) + continue; tool.breakExtraBlock(world, a, b ,c, player, x, y, z); } } } + + tool.breakExtraBlock(world, x, y, z, player, x, y, z); } }; From aadb2d5f2a45b61235e8aa456c3aed97c31368db Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 15:43:59 +0300 Subject: [PATCH 048/491] Actually, I can refactor this to stay more true to the original --- .../hbm/handler/ability/IToolAreaAbility.java | 28 ++++++++++--------- .../com/hbm/items/tool/ItemToolAbility.java | 6 +++- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index 94cd39e96..9929cd303 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -24,8 +24,9 @@ import net.minecraftforge.oredict.OreDictionary; public interface IToolAreaAbility extends IBaseAbility { // Should call tool.breakExtraBlock on a bunch of blocks. - // The initial block should be included if you want it broken! - public void onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool); + // The initial block is implicitly broken, so don't call breakExtraBlock on it. + // Returning true skips the reference block from being broken + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool); // Whether breakExtraBlock is called at all. Currently only false for explosion public default boolean allowsHarvest(int level) { @@ -47,8 +48,8 @@ public interface IToolAreaAbility extends IBaseAbility { } @Override - public void onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { - tool.breakExtraBlock(world, x, y, z, player, x, y, z); + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + return false; } }; @@ -87,24 +88,22 @@ public interface IToolAreaAbility extends IBaseAbility { private Set pos = new HashSet<>(); @Override - public void onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { Block b = world.getBlock(x, y, z); if(b == Blocks.stone && !ToolConfig.recursiveStone) { - tool.breakExtraBlock(world, x, y, z, player, x, y, z); - return; + return false; } if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) { - tool.breakExtraBlock(world, x, y, z, player, x, y, z); - return; + return false; } pos.clear(); recurse(world, x, y, z, x, y, z, player, tool, 0, radiusAtLevel[level]); - tool.breakExtraBlock(world, x, y, z, player, x, y, z); + return false; } private final List offsets = new ArrayList(3*3*3-1) {{ @@ -202,7 +201,7 @@ public interface IToolAreaAbility extends IBaseAbility { } @Override - public void onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { int range = rangeAtLevel[level]; for(int a = x - range; a <= x + range; a++) { @@ -210,12 +209,13 @@ public interface IToolAreaAbility extends IBaseAbility { for(int c = z - range; c <= z + range; c++) { if (a == x && b == y && c == z) continue; + tool.breakExtraBlock(world, a, b ,c, player, x, y, z); } } } - tool.breakExtraBlock(world, x, y, z, player, x, y, z); + return false; } }; @@ -253,7 +253,7 @@ public interface IToolAreaAbility extends IBaseAbility { } @Override - public void onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { float strength = strengthAtLevel[level]; ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); @@ -264,6 +264,8 @@ public interface IToolAreaAbility extends IBaseAbility { ex.doExplosionB(false); player.worldObj.createExplosion(player, x + 0.5, y + 0.5, z + 0.5, 0.1F, false); + + return true; } }; // endregion handlers diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index df655523d..d12fe3cfb 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -167,8 +167,12 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro preset.harvestAbility.preHarvestAll(preset.harvestAbilityLevel, world, player); - preset.areaAbility.onDig(preset.areaAbilityLevel, world, x, y, z, player, this); + boolean skipRef = preset.areaAbility.onDig(preset.areaAbilityLevel, world, x, y, z, player, this); + if (!skipRef) { + breakExtraBlock(world, x, y, z, player, x, y, z); + } + preset.harvestAbility.postHarvestAll(preset.harvestAbilityLevel, world, player); return true; From 4728e3c6baa17d7f64c1bd3d470b85d941fd2b85 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 16:16:32 +0300 Subject: [PATCH 049/491] Fix visual glitch with harvest abilities --- .../handler/ability/IToolHarvestAbility.java | 90 +++++++------------ 1 file changed, 33 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index 99cbea697..b1d54dd11 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -27,11 +27,14 @@ public interface IToolHarvestAbility extends IBaseAbility { public default void postHarvestAll(int level, World world, EntityPlayer player) {} - public boolean skipDefaultDrops(int level); - - // Call IToolHarvestAbility.super.onHarvestBlock to emulate the actual block breaking + // You must call harvestBlock to actually break the block. + // If you don't, visual glitches ensue public default void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - if (skipDefaultDrops(level)) { + harvestBlock(false, world, x, y, z, player); + } + + public static void harvestBlock(boolean skipDefaultDrops, World world, int x, int y, int z, EntityPlayer player) { + if (skipDefaultDrops) { // Emulate the block breaking without drops world.setBlockToAir(x, y, z); player.getHeldItem().damageItem(1, player); @@ -54,11 +57,6 @@ public interface IToolHarvestAbility extends IBaseAbility { public int sortOrder() { return SORT_ORDER_BASE + 0; } - - @Override - public boolean skipDefaultDrops(int level) { - return false; - } }; public static final IToolHarvestAbility SILK = new IToolHarvestAbility() { @@ -77,11 +75,6 @@ public interface IToolHarvestAbility extends IBaseAbility { return SORT_ORDER_BASE + 1; } - @Override - public boolean skipDefaultDrops(int level) { - return false; - } - @Override public void preHarvestAll(int level, World world, EntityPlayer player) { ItemStack stack = player.getHeldItem(); @@ -126,11 +119,6 @@ public interface IToolHarvestAbility extends IBaseAbility { return SORT_ORDER_BASE + 2; } - @Override - public boolean skipDefaultDrops(int level) { - return false; - } - @Override public void preHarvestAll(int level, World world, EntityPlayer player) { ItemStack stack = player.getHeldItem(); @@ -163,11 +151,6 @@ public interface IToolHarvestAbility extends IBaseAbility { return SORT_ORDER_BASE + 3; } - @Override - public boolean skipDefaultDrops(int level) { - return true; - } - @Override public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { List drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0); @@ -186,11 +169,12 @@ public interface IToolHarvestAbility extends IBaseAbility { } } + harvestBlock(doesSmelt, world, x, y, z, player); + if(doesSmelt) { - IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); - - for(ItemStack stack : drops) + for(ItemStack stack : drops) { world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy())); + } } } }; @@ -211,11 +195,6 @@ public interface IToolHarvestAbility extends IBaseAbility { return SORT_ORDER_BASE + 4; } - @Override - public boolean skipDefaultDrops(int level) { - return true; - } - @Override public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { //a band-aid on a gaping wound @@ -224,9 +203,12 @@ public interface IToolHarvestAbility extends IBaseAbility { ItemStack stack = new ItemStack(block, 1, meta); ItemStack result = ShredderRecipes.getShredderResult(stack); + + boolean doesShred = result != null && result.getItem() != ModItems.scrap; + + harvestBlock(doesShred, world, x, y, z, player); - if(result != null && result.getItem() != ModItems.scrap) { - IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + if(doesShred) { world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy())); } } @@ -248,11 +230,6 @@ public interface IToolHarvestAbility extends IBaseAbility { return SORT_ORDER_BASE + 5; } - @Override - public boolean skipDefaultDrops(int level) { - return true; - } - @Override public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { //a band-aid on a gaping wound @@ -261,13 +238,16 @@ public interface IToolHarvestAbility extends IBaseAbility { ItemStack stack = new ItemStack(block, 1, meta); ItemStack[] result = CentrifugeRecipes.getOutput(stack); + + boolean doesCentrifuge = result != null; - if(result != null) { - IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); - + harvestBlock(doesCentrifuge, world, x, y, z, player); + + if(doesCentrifuge) { for(ItemStack st : result) { - if(st != null) + if(st != null) { world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, st.copy())); + } } } } @@ -289,11 +269,6 @@ public interface IToolHarvestAbility extends IBaseAbility { return SORT_ORDER_BASE + 6; } - @Override - public boolean skipDefaultDrops(int level) { - return true; - } - @Override public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { //a band-aid on a gaping wound @@ -302,9 +277,12 @@ public interface IToolHarvestAbility extends IBaseAbility { ItemStack stack = new ItemStack(block, 1, meta); CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack, Fluids.PEROXIDE); + + boolean doesCrystallize = result != null; - if(result != null) { - IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + harvestBlock(doesCrystallize, world, x, y, z, player); + + if(doesCrystallize) { world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy())); } } @@ -326,11 +304,6 @@ public interface IToolHarvestAbility extends IBaseAbility { return SORT_ORDER_BASE + 7; } - @Override - public boolean skipDefaultDrops(int level) { - return true; - } - @Override public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { //a band-aid on a gaping wound @@ -344,8 +317,11 @@ public interface IToolHarvestAbility extends IBaseAbility { if(block == Blocks.redstone_block) mercury = player.getRNG().nextInt(7) + 8; - if(mercury > 0) { - IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta); + boolean doesConvert = mercury > 0; + + harvestBlock(doesConvert, world, x, y, z, player); + + if(doesConvert) { world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_mercury, mercury))); } } From b85e4d28354e3b3617618eb6cb8ee58e4118c630 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 20:15:28 +0300 Subject: [PATCH 050/491] Fix ability listing for ability-less tools Also I realized I don't need a linked hash map now that I sort everything manually. --- .../handler/ability/AvailableAbilities.java | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java index 38706bef2..d33ec9a70 100644 --- a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java +++ b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java @@ -2,7 +2,7 @@ package com.hbm.handler.ability; import java.util.Collections; import java.util.Comparator; -import java.util.LinkedHashMap; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -17,7 +17,7 @@ import net.minecraft.util.EnumChatFormatting; // All abilities available on a given tool public class AvailableAbilities { // Insertion order matters - private LinkedHashMap abilities = new LinkedHashMap(); + private HashMap abilities = new HashMap(); public AvailableAbilities() {} @@ -66,15 +66,15 @@ public class AvailableAbilities { } public Map getToolAbilities() { - return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility || a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> a, a -> abilities.get(a), (x, y) -> y, LinkedHashMap::new)); + return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility || a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> a, a -> abilities.get(a))); } public Map getToolAreaAbilities() { - return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility).collect(Collectors.toMap(a -> (IToolAreaAbility)a, a -> abilities.get(a), (x, y) -> y, LinkedHashMap::new)); + return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility).collect(Collectors.toMap(a -> (IToolAreaAbility)a, a -> abilities.get(a))); } public Map getToolHarvestAbilities() { - return abilities.keySet().stream().filter(a -> a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> (IToolHarvestAbility)a, a -> abilities.get(a), (x, y) -> y, LinkedHashMap::new)); + return abilities.keySet().stream().filter(a -> a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> (IToolHarvestAbility)a, a -> abilities.get(a))); } public int size() { @@ -87,23 +87,23 @@ public class AvailableAbilities { @SideOnly(Side.CLIENT) public void addInformation(List list) { - Map toolAbilities = getToolAbilities(); + List> toolAbilities = abilities.entrySet().stream().filter(entry -> + (entry.getKey() instanceof IToolAreaAbility && entry != IToolAreaAbility.NONE) || + (entry.getKey() instanceof IToolHarvestAbility && entry != IToolHarvestAbility.NONE) + ).sorted( + Comparator + .comparing(Map.Entry::getKey) + .thenComparing(Map.Entry::getValue) + ).collect(Collectors.toList()); if (!toolAbilities.isEmpty()) { list.add("Abilities: "); - toolAbilities.entrySet().stream().sorted( - Comparator - .comparing(Map.Entry::getKey) - .thenComparing(Map.Entry::getValue) - ).forEach(entry -> { + toolAbilities.forEach(entry -> { IBaseAbility ability = entry.getKey(); int level = entry.getValue(); - String fullName = ability.getFullName(level); - if (!fullName.isEmpty()) { - list.add(" " + EnumChatFormatting.GOLD + fullName); - } + list.add(" " + EnumChatFormatting.GOLD + ability.getFullName(level)); }); list.add("Right click to cycle through presets!"); @@ -111,17 +111,19 @@ public class AvailableAbilities { list.add("Alt-click to open customization GUI!"); } - Map weaponAbilities = getWeaponAbilities(); + List> weaponAbilities = abilities.entrySet().stream().filter(entry -> + (entry.getKey() instanceof IWeaponAbility && entry != IWeaponAbility.NONE) + ).sorted( + Comparator + .comparing(Map.Entry::getKey) + .thenComparing(Map.Entry::getValue) + ).collect(Collectors.toList()); if (!weaponAbilities.isEmpty()) { list.add("Weapon modifiers: "); - weaponAbilities.entrySet().stream().sorted( - Comparator - .comparing(Map.Entry::getKey) - .thenComparing(Map.Entry::getValue) - ).forEach(entry -> { - IWeaponAbility ability = entry.getKey(); + weaponAbilities.forEach(entry -> { + IBaseAbility ability = entry.getKey(); int level = entry.getValue(); list.add(" " + EnumChatFormatting.RED + ability.getFullName(level)); From afb0c67090b2b3a916b5836c1f7e8906500f8686 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 20:23:22 +0300 Subject: [PATCH 051/491] Silly --- .../java/com/hbm/handler/ability/AvailableAbilities.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java index d33ec9a70..6e05b5a30 100644 --- a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java +++ b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java @@ -88,8 +88,8 @@ public class AvailableAbilities { @SideOnly(Side.CLIENT) public void addInformation(List list) { List> toolAbilities = abilities.entrySet().stream().filter(entry -> - (entry.getKey() instanceof IToolAreaAbility && entry != IToolAreaAbility.NONE) || - (entry.getKey() instanceof IToolHarvestAbility && entry != IToolHarvestAbility.NONE) + (entry.getKey() instanceof IToolAreaAbility && entry.getKey() != IToolAreaAbility.NONE) || + (entry.getKey() instanceof IToolHarvestAbility && entry.getKey() != IToolHarvestAbility.NONE) ).sorted( Comparator .comparing(Map.Entry::getKey) @@ -112,7 +112,7 @@ public class AvailableAbilities { } List> weaponAbilities = abilities.entrySet().stream().filter(entry -> - (entry.getKey() instanceof IWeaponAbility && entry != IWeaponAbility.NONE) + (entry.getKey() instanceof IWeaponAbility && entry.getKey() != IWeaponAbility.NONE) ).sorted( Comparator .comparing(Map.Entry::getKey) From 2c48bcb782f17c53ae2f99cc0f8bcf58d6b7f672 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 20:43:27 +0300 Subject: [PATCH 052/491] Minor fix I realized I forgot to tweak this when adding the reset button --- src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 7b6e3b1b5..0815d6aec 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -109,7 +109,7 @@ public class GUIScreenToolAbility extends GuiScreen { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); // Draw window background - drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 76); + drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 87); // Draw the switches ToolPreset activePreset = config.getActivePreset(); From de8b888f3ef801c0223ee5a143205bb0b417f042 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 18 May 2025 21:27:58 +0300 Subject: [PATCH 053/491] Fix credits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Still not sure what happened, but if it was supposed to be an æ and not a replacement char, I can just type it by hand --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4c2717118..96c8b5e43 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ credits=HbMinecraft,\ \ Alcater (GUI textures, porting),\ \ MellowArpeggiation (new animation system, turbine sounds, sound fixes, industrial lights, better particle diodes),\ \ Pheo (textures, various machines, models, weapons),\ - \ V�r (gas centrifuges, better worldgen, ZIRNOX, CP-1 parts, starter guide, new cyclotron, weapon animations),\ + \ Vær (gas centrifuges, better worldgen, ZIRNOX, CP-1 parts, starter guide, new cyclotron, weapon animations),\ \ UFFR (RTG pellets, guns, casings, euphemium capacitor, nucleartech.wiki),\ \ LePeep (coilgun model, BDCL QC),\ \ Adam29 (liquid petroleum, ethanol, electric furnace),\ From bbc27820f1b7894f4c4509def7f7c6bd8a17cc64 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Sun, 18 May 2025 21:20:41 +0200 Subject: [PATCH 054/491] Added rbmk console view rotation support --- .../hbm/blocks/machine/rbmk/RBMKConsole.java | 41 ++-- .../machine/rbmk/TileEntityRBMKConsole.java | 189 ++++++++++-------- 2 files changed, 134 insertions(+), 96 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKConsole.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKConsole.java index 723ecff52..de8789215 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKConsole.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKConsole.java @@ -1,5 +1,6 @@ package com.hbm.blocks.machine.rbmk; +import api.hbm.block.IToolable; import com.hbm.blocks.BlockDummyable; import com.hbm.handler.BossSpawnHandler; import com.hbm.handler.MultiblockHandlerXR; @@ -17,7 +18,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class RBMKConsole extends BlockDummyable { +public class RBMKConsole extends BlockDummyable implements IToolable { public RBMKConsole() { super(Material.iron); @@ -30,7 +31,7 @@ public class RBMKConsole extends BlockDummyable { if(meta >= this.offset) return new TileEntityRBMKConsole(); - + return null; } @@ -48,14 +49,14 @@ public class RBMKConsole extends BlockDummyable { public boolean renderAsNormalBlock() { return false; } - + @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - + if(!player.isSneaking()) { - + BossSpawnHandler.markFBI(player); - + int[] pos = this.findCore(world, x, y, z); if(pos == null) @@ -63,10 +64,10 @@ public class RBMKConsole extends BlockDummyable { TileEntityRBMKConsole entity = (TileEntityRBMKConsole) world.getTileEntity(pos[0], pos[1], pos[2]); if(entity != null) { - + if(side == 1) { Vec3 vec = Vec3.createVectorHelper(1.375D, 0, 0.75D); - + switch(entity.getBlockMetadata() - this.offset) { case 2: vec.rotateAroundY((float)Math.toRadians(90)); break; case 3: vec.rotateAroundY((float)Math.toRadians(270)); break; @@ -79,19 +80,19 @@ public class RBMKConsole extends BlockDummyable { double rX = entity.xCoord + 0.5D + vec.xCoord; double rZ = entity.zCoord + 0.5D + vec.zCoord; double size = 0.1875D; - + if(Math.abs(hX - rX) < size && Math.abs(hZ - rZ) < size && !player.inventory.hasItemStack(new ItemStack(ModItems.book_guide, 1, BookType.RBMK.ordinal()))) { player.inventory.addItemStackToInventory(new ItemStack(ModItems.book_guide, 1, BookType.RBMK.ordinal())); player.inventoryContainer.detectAndSendChanges(); return true; } } - + if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]); } return true; - + } else { return true; } @@ -113,12 +114,26 @@ public class RBMKConsole extends BlockDummyable { MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o , y, z + dir.offsetZ * o, new int[] {0, 0, 0, 1, 2, 2}, this, dir); } - + protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {0, 0, 0, 1, 2, 2}, x, y, z, dir)) return false; - + return super.checkRequirement(world, x, y, z, dir, o); } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + if(tool != ToolType.SCREWDRIVER) + return false; + if(!world.isRemote) { + int[] pos = findCore(world, x, y, z); + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (tile instanceof TileEntityRBMKConsole) { + ((TileEntityRBMKConsole) tile).rotate(); + } + } + return true; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index dfb753de3..ddb38c3bf 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -40,22 +40,24 @@ import li.cil.oc.api.network.SimpleComponent; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) public class TileEntityRBMKConsole extends TileEntityMachineBase implements IControlReceiver, IGUIProvider, SimpleComponent, CompatHandler.OCComponent { - + private int targetX; private int targetY; private int targetZ; - + + private byte rotation; + public static final int fluxDisplayBuffer = 60; public int[] fluxBuffer = new int[fluxDisplayBuffer]; - + //made this one-dimensional because it's a lot easier to serialize public RBMKColumn[] columns = new RBMKColumn[15 * 15]; - + public RBMKScreen[] screens = new RBMKScreen[6]; public TileEntityRBMKConsole() { super(0); - + for(int i = 0; i < screens.length; i++) { screens[i] = new RBMKScreen(); } @@ -68,9 +70,9 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon @Override public void updateEntity() { - + if(!worldObj.isRemote) { - + if(this.worldObj.getTotalWorldTime() % 10 == 0) { this.worldObj.theProfiler.startSection("rbmkConsole_rescan"); @@ -82,64 +84,79 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon this.networkPackNT(50); } } - + private void rescan() { - + double flux = 0; - + for(int i = -7; i <= 7; i++) { for(int j = -7; j <= 7; j++) { - - TileEntity te = Compat.getTileStandard(worldObj, targetX + i, targetY, targetZ + j); + int rx = i, rz = j; + switch (rotation) { + case 1: // 90° + rx = -j; + rz = i; + break; + case 2: // 180° + rx = -i; + rz = -j; + break; + case 3: // 270° + rx = j; + rz = -i; + break; + } + + TileEntity te = Compat.getTileStandard(worldObj, targetX + rx, targetY, targetZ + rz); int index = (i + 7) + (j + 7) * 15; - + if(te instanceof TileEntityRBMKBase) { - + TileEntityRBMKBase rbmk = (TileEntityRBMKBase)te; - + columns[index] = new RBMKColumn(rbmk.getConsoleType(), rbmk.getNBTForConsole()); columns[index].data.setDouble("heat", rbmk.heat); columns[index].data.setDouble("maxHeat", rbmk.maxHeat()); if(rbmk.isModerated()) columns[index].data.setBoolean("moderated", true); //false is the default anyway and not setting it when we don't need to reduces cruft - + if(te instanceof TileEntityRBMKRod) { TileEntityRBMKRod fuel = (TileEntityRBMKRod) te; flux += fuel.lastFluxQuantity; } - + } else { columns[index] = null; } } } - + for(int i = 0; i < this.fluxBuffer.length - 1; i++) { this.fluxBuffer[i] = this.fluxBuffer[i + 1]; } - + this.fluxBuffer[this.fluxBuffer.length - 1] = (int) flux; } - + @SuppressWarnings("incomplete-switch") //shut up private void prepareScreenInfo() { - + for(RBMKScreen screen : this.screens) { - + if(screen.type == ScreenType.NONE) { screen.display = null; continue; } - + double value = 0; int count = 0; - + for(Integer i : screen.columns) { - + RBMKColumn col = this.columns[i]; - + if(col == null) continue; - + switch(screen.type) { case COL_TEMP: count++; @@ -171,10 +188,10 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon break; } } - + double result = value / (double) count; String text = ((int)(result * 10)) / 10D + ""; - + switch(screen.type) { case COL_TEMP: text = "rbmk.screen.temp=" + text + "°C"; break; case FUEL_DEPLETION: text = "rbmk.screen.depletion=" + text + "%"; break; @@ -182,7 +199,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon case FUEL_TEMP: text = "rbmk.screen.core=" + text + "°C"; break; case ROD_EXTRACTION: text = "rbmk.screen.rod=" + text + "%"; break; } - + screen.display = text; } } @@ -255,20 +272,20 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon @Override public void receiveControl(NBTTagCompound data) { - + if(data.hasKey("level")) { - + Set keys = data.func_150296_c(); - + for(String key : keys) { - + if(key.startsWith("sel_")) { int x = data.getInteger(key) % 15 - 7; int z = data.getInteger(key) / 15 - 7; - + TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + z); - + if(te instanceof TileEntityRBMKControlManual) { TileEntityRBMKControlManual rod = (TileEntityRBMKControlManual) te; rod.startingLevel = rod.level; @@ -278,18 +295,18 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon } } } - + if(data.hasKey("toggle")) { int slot = data.getByte("toggle"); int next = this.screens[slot].type.ordinal() + 1; ScreenType type = ScreenType.values()[next % ScreenType.values().length]; this.screens[slot].type = type; } - + if(data.hasKey("id")) { int slot = data.getByte("id"); List list = new ArrayList(); - + for(int i = 0; i < 15 * 15; i++) { if(data.getBoolean("s" + i)) { list.add(i); @@ -299,17 +316,17 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon Integer[] cols = list.toArray(new Integer[0]); this.screens[slot].columns = cols; } - + if(data.hasKey("assignColor")) { int color = data.getByte("assignColor"); int[] cols = data.getIntArray("cols"); - + for(int i : cols) { int x = i % 15 - 7; int z = i / 15 - 7; - + TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + z); - + if(te instanceof TileEntityRBMKControlManual) { TileEntityRBMKControlManual rod = (TileEntityRBMKControlManual) te; rod.color = EnumUtil.grabEnumSafely(RBMKColor.class, color); @@ -317,16 +334,16 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon } } } - + if(data.hasKey("compressor")) { int[] cols = data.getIntArray("cols"); - + for(int i : cols) { int x = i % 15 - 7; int z = i / 15 - 7; - + TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + z); - + if(te instanceof TileEntityRBMKBoiler) { TileEntityRBMKBoiler rod = (TileEntityRBMKBoiler) te; rod.cyceCompressor(); @@ -334,25 +351,25 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon } } } - + @Override public AxisAlignedBB getRenderBoundingBox() { return AxisAlignedBB.getBoundingBox(xCoord - 2, yCoord, zCoord - 2, xCoord + 3, yCoord + 4, zCoord + 3); } - + @Override @SideOnly(Side.CLIENT) public double getMaxRenderDistanceSquared() { return 65536.0D; } - + public void setTarget(int x, int y, int z) { this.targetX = x; this.targetY = y; this.targetZ = z; this.markDirty(); } - + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); @@ -360,13 +377,14 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon this.targetX = nbt.getInteger("tX"); this.targetY = nbt.getInteger("tY"); this.targetZ = nbt.getInteger("tZ"); - + for(int i = 0; i < this.screens.length; i++) { this.screens[i].type = ScreenType.values()[nbt.getByte("t" + i)]; this.screens[i].columns = Arrays.stream(nbt.getIntArray("s" + i)).boxed().toArray(Integer[]::new); } + rotation = nbt.getByte("rotation"); } - + @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); @@ -374,25 +392,30 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon nbt.setInteger("tX", this.targetX); nbt.setInteger("tY", this.targetY); nbt.setInteger("tZ", this.targetZ); - + for(int i = 0; i < this.screens.length; i++) { nbt.setByte("t" + i, (byte) this.screens[i].type.ordinal()); nbt.setIntArray("s" + i, Arrays.stream(this.screens[i].columns).mapToInt(Integer::intValue).toArray()); } + nbt.setByte("rotation", rotation); } - + + public void rotate() { + rotation = (byte)((rotation + 1) % 4); + } + public static class RBMKColumn { - + public ColumnType type; public NBTTagCompound data; - + public RBMKColumn(ColumnType type) { this.type = type; } - + public RBMKColumn(ColumnType type, NBTTagCompound data) { this.type = type; - + if(data != null) { this.data = data; } else { @@ -403,17 +426,17 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon @SuppressWarnings("incomplete-switch") @SideOnly(Side.CLIENT) public List getFancyStats() { - + if(this.data == null) return null; - + /* * Making a big switch with the values converted based on type by hand might seem "UnPrOfEsSiOnAl" and a major pain in the ass * but my only other solution that would not have me do things in multiple places where they shouldn't be involved passing * classes in the enum and then calling a special method from that class and quite honestly it turned out to be such a crime * against humanity that I threw the towel. It's not fancy, I get that, please fuck off. */ - + List stats = new ArrayList(); stats.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("rbmk.heat", ((int)((this.data.getDouble("heat") * 10D)) / 10D) + "°C")); switch(this.type) { @@ -431,18 +454,18 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon stats.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("rbmk.boiler.type", Fluids.fromID(this.data.getShort("type")).getLocalizedName())); break; case CONTROL: - + if(this.data.hasKey("color")) { short col = this.data.getShort("color"); - + if(col >= 0 && col < RBMKColor.values().length) stats.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("rbmk.control." + RBMKColor.values()[col].name().toLowerCase(Locale.US))); } - + case CONTROL_AUTO: stats.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("rbmk.control.level", ((int)((this.data.getDouble("level") * 100D))) + "%")); break; - + case HEATEX: stats.add(EnumChatFormatting.BLUE + Fluids.fromID(this.data.getShort("type")).getLocalizedName() + " " + this.data.getInteger("water") + "/" + this.data.getInteger("maxWater") + "mB"); @@ -450,14 +473,14 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon this.data.getInteger("steam") + "/" + this.data.getInteger("maxSteam") + "mB"); break; } - + if(data.getBoolean("moderated")) stats.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("rbmk.moderated")); - + return stats; } } - + public static enum ColumnType { BLANK(0), FUEL(10), @@ -473,19 +496,19 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon STORAGE(110), COOLER(120), HEATEX(130); - + public int offset; - + private ColumnType(int offset) { this.offset = offset; } } - + public class RBMKScreen { public ScreenType type = ScreenType.NONE; public Integer[] columns = new Integer[0]; public String display = null; - + public RBMKScreen() { } public RBMKScreen(ScreenType type, Integer[] columns, String display) { this.type = type; @@ -493,7 +516,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon this.display = display; } } - + public static enum ScreenType { NONE(0 * 18), COL_TEMP(1 * 18), @@ -501,9 +524,9 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon FUEL_DEPLETION(3 * 18), FUEL_POISON(4 * 18), FUEL_TEMP(5 * 18); - + public int offset; - + private ScreenType(int offset) { this.offset = offset; } @@ -519,7 +542,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKConsole(player.inventory, this); } - + // do some opencomputer stuff @Override @Optional.Method(modid = "OpenComputers") @@ -605,7 +628,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon for(int i = -7; i <= 7; i++) { for(int j = -7; j <= 7; j++) { TileEntity te = Compat.getTileStandard(worldObj, targetX + i, targetY, targetZ + j); - + if (te instanceof TileEntityRBMKControlManual) { TileEntityRBMKControlManual rod = (TileEntityRBMKControlManual) te; rod.startingLevel = rod.level; @@ -631,7 +654,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon double new_level = args.checkDouble(2); TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + y); - + if (te instanceof TileEntityRBMKControlManual) { TileEntityRBMKControlManual rod = (TileEntityRBMKControlManual) te; rod.startingLevel = rod.level; @@ -640,7 +663,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon rod.setTarget(new_level); te.markDirty(); return new Object[] {}; - } + } return new Object[] {"No control rod found at "+(x+7)+","+(7-y)}; } @@ -665,7 +688,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon te.markDirty(); foundRods = true; } - } + } } } if(foundRods) @@ -703,14 +726,14 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon for(int i = -7; i <= 7; i++) { for(int j = -7; j <= 7; j++) { TileEntity te = Compat.getTileStandard(worldObj, targetX + i, targetY, targetZ + j); - + if (te instanceof TileEntityRBMKControlManual) { TileEntityRBMKControlManual rod = (TileEntityRBMKControlManual) te; rod.startingLevel = rod.level; rod.setTarget(0); te.markDirty(); hasRods = true; - } + } } } if(hasRods){ From ef5059a9a6e55812b6afef52f9dd1e6171888ce1 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 18 May 2025 21:24:19 +0200 Subject: [PATCH 055/491] playing DOOM on my gucci smart toilet --- changelog | 16 +- gradle.properties | 2 +- src/main/java/com/hbm/blocks/ModBlocks.java | 21 +- .../com/hbm/blocks/network/FluidPump.java | 314 + .../java/com/hbm/crafting/WeaponRecipes.java | 1 + src/main/java/com/hbm/items/ModItems.java | 2 + .../java/com/hbm/items/special/ItemTrain.java | 3 +- .../sedna/factory/GunFactoryClient.java | 2 + .../weapon/sedna/factory/Orchestras.java | 50 + .../weapon/sedna/factory/XFactory50.java | 54 + .../weapon/sedna/mods/WeaponModManager.java | 3 +- .../weapon/sedna/mods/WeaponModSilencer.java | 2 + src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 2 + .../java/com/hbm/main/CraftingManager.java | 5 +- .../com/hbm/main/ModEventHandlerRenderer.java | 4 + .../java/com/hbm/main/ResourceManager.java | 4 + .../item/weapon/sedna/ItemRenderAmat.java | 207 + .../render/tileentity/RenderFluidPump.java | 59 + .../java/com/hbm/tileentity/TileMappings.java | 18 +- .../bomb/TileEntityLaunchPadBase.java | 16 +- src/main/java/com/hbm/util/BobMathUtil.java | 8 + src/main/java/com/hbm/world/WorldUtil.java | 12 +- src/main/resources/assets/hbm/lang/de_DE.lang | 5 + src/main/resources/assets/hbm/lang/en_US.lang | 3 + .../assets/hbm/models/network/fluid_diode.obj | 2189 ++++ .../assets/hbm/models/reactors/breeder.obj | 3405 ++--- .../assets/hbm/models/weapons/amat.obj | 10682 ++++++++++++++++ src/main/resources/assets/hbm/sounds.json | 1 + .../assets/hbm/sounds/weapon/fire/amat.ogg | Bin 0 -> 43853 bytes .../hbm/textures/models/machines/breeder.png | Bin 2533 -> 820 bytes .../textures/models/network/fluid_diode.png | Bin 0 -> 928 bytes .../hbm/textures/models/weapons/amat.png | Bin 0 -> 47765 bytes 33 files changed, 14849 insertions(+), 2243 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/network/FluidPump.java create mode 100644 src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderFluidPump.java create mode 100644 src/main/resources/assets/hbm/models/network/fluid_diode.obj create mode 100644 src/main/resources/assets/hbm/models/weapons/amat.obj create mode 100644 src/main/resources/assets/hbm/sounds/weapon/fire/amat.ogg create mode 100644 src/main/resources/assets/hbm/textures/models/network/fluid_diode.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/amat.png diff --git a/changelog b/changelog index 38205883a..76500e081 100644 --- a/changelog +++ b/changelog @@ -6,6 +6,18 @@ * Pretty * Automatically walls off connected solid blocks in addition to the direction it was placed in * Some other wooden blocks like a roof, ceiling and scaffold +* Flow control pump + * The fluid equivalent to a diode + * Supports up to 10,000mB/t + * Unlike the diode, it is configured via GUI + * Can be shut off with redstone like a fluid valve +* Charge thrower + * A new weapon/tool + * Can fire two tiers of demolition charges or a grappling hook + * The grappling hook's line can be controlled via left and right mouse buttons +* Anti-materiel rifle + * Fires 12.7mm of fun + * x5 magnification scope ## Changed * Increased bayonet damage from 5 to 7.5 hearts @@ -22,6 +34,7 @@ * Dismantling different variants yields different drops * Magnetic extraction can no longer be performed * `isItemBlacklisted` on the item hazard checks now employs caching instead of doing a full ore dictionary lookup for every single check, this should make it marginally more performant +* The unfinished trains stuff is no longer listed in the creative tabs ## Fixed * Fixed RoR controller having the wrong recipe @@ -29,4 +42,5 @@ * Fixed skeletons and pedestals allowing blocks to be placed inside the player * Fixed artillery shells not playing the explosion animation when directly impacting entities * Fixed bauxite and malachite vein toggles being on backwards -* Fixed penumatic tube order settings not saving \ No newline at end of file +* Fixed pneumatic tube order settings not saving +* Fixed crash caused by launching ABMs with blank target designators \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 187b19fb6..a556e9942 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5320 +mod_build_number=5334 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index a9fb689b3..e857521bb 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -794,6 +794,7 @@ public class ModBlocks { public static Block fluid_duct_exhaust; public static Block fluid_valve; public static Block fluid_switch; + public static Block fluid_pump; public static Block machine_drain; public static Block radio_torch_sender; public static Block radio_torch_receiver; @@ -1925,6 +1926,7 @@ public class ModBlocks { fluid_duct_gauge = new FluidDuctGauge().setBlockName("fluid_duct_gauge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_valve = new FluidValve(Material.iron).setBlockName("fluid_valve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_switch = new FluidSwitch(Material.iron).setBlockName("fluid_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + fluid_pump = new FluidPump(Material.iron).setBlockName("fluid_pump").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_drain = new MachineDrain(Material.iron).setBlockName("machine_drain").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":concrete"); radio_torch_sender = new RadioTorchSender().setBlockName("radio_torch_sender").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); radio_torch_receiver = new RadioTorchReceiver().setBlockName("radio_torch_receiver").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -2173,15 +2175,15 @@ public class ModBlocks { rail_booster = new RailBooster().setBlockName("rail_booster").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_booster"); rail_narrow_straight = new RailNarrowStraight().setBlockName("rail_narrow_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo"); rail_narrow_curve = new RailNarrowCurve().setBlockName("rail_narrow_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo"); - rail_large_straight = new RailStandardStraight().setBlockName("rail_large_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); - rail_large_straight_short = new RailStandardStraightShort().setBlockName("rail_large_straight_short").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); - rail_large_curve = new RailStandardCurveBase().setBlockName("rail_large_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); - rail_large_curve_7 = new RailStandardCurveWide7().setBlockName("rail_large_curve_7").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); - rail_large_curve_9 = new RailStandardCurveWide9().setBlockName("rail_large_curve_9").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); - rail_large_ramp = new RailStandardRamp().setBlockName("rail_large_ramp").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); - rail_large_buffer = new RailStandardBuffer().setBlockName("rail_large_buffer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_buffer"); - rail_large_switch = new RailStandardSwitch().setBlockName("rail_large_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); - rail_large_switch_flipped = new RailStandardSwitchFlipped().setBlockName("rail_large_switch_flipped").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); + rail_large_straight = new RailStandardStraight().setBlockName("rail_large_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); + rail_large_straight_short = new RailStandardStraightShort().setBlockName("rail_large_straight_short").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); + rail_large_curve = new RailStandardCurveBase().setBlockName("rail_large_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); + rail_large_curve_7 = new RailStandardCurveWide7().setBlockName("rail_large_curve_7").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); + rail_large_curve_9 = new RailStandardCurveWide9().setBlockName("rail_large_curve_9").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); + rail_large_ramp = new RailStandardRamp().setBlockName("rail_large_ramp").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); + rail_large_buffer = new RailStandardBuffer().setBlockName("rail_large_buffer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_buffer"); + rail_large_switch = new RailStandardSwitch().setBlockName("rail_large_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); + rail_large_switch_flipped = new RailStandardSwitchFlipped().setBlockName("rail_large_switch_flipped").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); crate = new BlockCrate(Material.wood).setBlockName("crate").setStepSound(Block.soundTypeWood).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":crate"); crate_weapon = new BlockCrate(Material.wood).setBlockName("crate_weapon").setStepSound(Block.soundTypeWood).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":crate_weapon"); @@ -3192,6 +3194,7 @@ public class ModBlocks { register(fluid_duct_gauge); register(fluid_valve); register(fluid_switch); + register(fluid_pump); register(machine_drain); register(radio_torch_sender); register(radio_torch_receiver); diff --git a/src/main/java/com/hbm/blocks/network/FluidPump.java b/src/main/java/com/hbm/blocks/network/FluidPump.java new file mode 100644 index 000000000..19fffda03 --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/FluidPump.java @@ -0,0 +1,314 @@ +package com.hbm.blocks.network; + +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.input.Keyboard; + +import com.hbm.blocks.ILookOverlay; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.items.machine.IItemFluidIdentifier; +import com.hbm.main.MainRegistry; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.EnumUtil; +import com.hbm.util.I18nUtil; +import com.hbm.world.gen.INBTTransformable; + +import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; +import net.minecraftforge.common.util.ForgeDirection; + +public class FluidPump extends BlockContainer implements INBTTransformable, ILookOverlay, IGUIProvider { + + public FluidPump(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityFluidPump(); + } + + @Override public int getRenderType() { return -1; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { + + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { + + if(!player.isSneaking()) { + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof IItemFluidIdentifier) { + IItemFluidIdentifier id = (IItemFluidIdentifier) player.getHeldItem().getItem(); + FluidType type = id.getType(world, x, y, z, player.getHeldItem()); + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityFluidPump) { + if(!world.isRemote) { + TileEntityFluidPump pump = (TileEntityFluidPump) tile; + pump.tank[0].setTankType(type); + pump.markDirty(); + player.addChatComponentMessage(new ChatComponentText("Changed type to ").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW)).appendSibling(new ChatComponentTranslation(type.getConditionalName())).appendSibling(new ChatComponentText("!"))); + } + return true; + } + } + + if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + return true; + } + + return false; + } + + @Override @SideOnly(Side.CLIENT) + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPump((TileEntityFluidPump) world.getTileEntity(x, y, z)); } + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + TileEntity tile = world.getTileEntity(x, y, z); + if(!(tile instanceof TileEntityFluidPump)) return; + TileEntityFluidPump pump = (TileEntityFluidPump) tile; + + List text = new ArrayList(); + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + pump.tank[0].getTankType().getLocalizedName() + " (" + pump.tank[0].getPressure() + " PU): " + BobMathUtil.format(pump.bufferSize) + "mB/t" + EnumChatFormatting.RED + " ->"); + text.add("Priority: " + EnumChatFormatting.YELLOW + pump.priority.name()); + if(pump.tank[0].getFill() > 0) text.add(BobMathUtil.format(pump.tank[0].getFill()) + "mB buffered"); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + + @Override + public int transformMeta(int meta, int coordBaseMode) { + return INBTTransformable.transformMetaDeco(meta, coordBaseMode); + } + + public static class TileEntityFluidPump extends TileEntityLoadedBase implements IFluidStandardTransceiverMK2, IControlReceiver { + + public int bufferSize = 100; + public FluidTank[] tank; + public ConnectionPriority priority = ConnectionPriority.NORMAL; + public boolean redstone = false; + + public TileEntityFluidPump() { + this.tank = new FluidTank[1]; + this.tank[0] = new FluidTank(Fluids.NONE, bufferSize); + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + // if the capacity were changed directly, any excess buffered fluid would be destroyed + // when running a closed loop or handling hard to get fluids, that's quite bad + if(this.bufferSize != this.tank[0].getMaxFill()) { + int nextBuffer = Math.max(this.tank[0].getFill(), this.bufferSize); + this.tank[0].changeTankSize(nextBuffer); + } + + this.redstone = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); + ForgeDirection in = dir.getRotation(ForgeDirection.UP); + ForgeDirection out = in.getOpposite(); + + this.trySubscribe(tank[0].getTankType(), worldObj, xCoord + in.offsetX, yCoord, zCoord + in.offsetZ, in); + if(!redstone) this.tryProvide(tank[0], worldObj, xCoord + out.offsetX, yCoord, zCoord + out.offsetZ, out); + + this.networkPackNT(15); + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + tank[0].writeToNBT(nbt, "t"); + nbt.setByte("p", (byte) priority.ordinal()); + nbt.setInteger("buffer", bufferSize); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + tank[0].readFromNBT(nbt, "t"); + priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, nbt.getByte("p")); + bufferSize = nbt.getInteger("buffer"); + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + tank[0].serialize(buf); + buf.writeByte((byte) priority.ordinal()); + buf.writeInt(bufferSize); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + tank[0].deserialize(buf); + priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, buf.readByte()); + bufferSize = buf.readInt(); + } + + @Override public ConnectionPriority getFluidPriority() { return priority; } + @Override public FluidTank[] getSendingTanks() { return redstone ? new FluidTank[0] : tank; } + @Override public FluidTank[] getReceivingTanks() { return this.bufferSize < this.tank[0].getFill() ? new FluidTank[0] : tank; } + @Override public FluidTank[] getAllTanks() { return tank; } + + @Override + public boolean hasPermission(EntityPlayer player) { + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 128; + } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("capacity")) { + this.bufferSize = MathHelper.clamp_int(data.getInteger("capacity"), 0, 10_000); + } + if(data.hasKey("pressure")) { + this.tank[0].withPressure(MathHelper.clamp_int(data.getByte("pressure"), 0, 5)); + } + if(data.hasKey("priority")) { + priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, data.getByte("priority")); + } + + this.markDirty(); + } + } + + public static class GUIPump extends GuiScreen { + + protected final TileEntityFluidPump pump; + + private GuiTextField textPlacementPriority; + private GuiButton buttonPressure; + private GuiButton buttonPriority; + private int pressure; + private int priority; + + public GUIPump(TileEntityFluidPump pump) { + this.pump = pump; + this.pressure = pump.tank[0].getPressure(); + this.priority = pump.priority.ordinal(); + } + + @Override + public void initGui() { + Keyboard.enableRepeatEvents(true); + + textPlacementPriority = new GuiTextField(fontRendererObj, this.width / 2 - 150, 100, 90, 20); + textPlacementPriority.setText("" + pump.bufferSize); + textPlacementPriority.setMaxStringLength(5); + + buttonPressure = new GuiButton(0, this.width / 2 - 50, 100, 90, 20, pressure + " PU"); + + buttonPriority = new GuiButton(1, this.width / 2 + 50, 100, 90, 20, pump.priority.name()); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + drawDefaultBackground(); + + drawString(fontRendererObj, "Throughput:", this.width / 2 - 150, 80, 0xA0A0A0); + drawString(fontRendererObj, "(max. 10,000mB)", this.width / 2 - 150, 90, 0xA0A0A0); + textPlacementPriority.drawTextBox(); + + drawString(fontRendererObj, "Pressure:", this.width / 2 - 50, 80, 0xA0A0A0); + buttonPressure.drawButton(mc, mouseX, mouseY); + + drawString(fontRendererObj, "Priority:", this.width / 2 + 50, 80, 0xA0A0A0); + buttonPriority.drawButton(mc, mouseX, mouseY); + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @Override + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + + NBTTagCompound data = new NBTTagCompound(); + + data.setByte("pressure", (byte) pressure); + data.setByte("priority", (byte) priority); + + try { data.setInteger("capacity", Integer.parseInt(textPlacementPriority.getText())); } catch(Exception ex) {} + + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, pump.xCoord, pump.yCoord, pump.zCoord)); + } + + @Override + protected void keyTyped(char typedChar, int keyCode) { + super.keyTyped(typedChar, keyCode); + if(textPlacementPriority.textboxKeyTyped(typedChar, keyCode)) return; + + if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) { + this.mc.thePlayer.closeScreen(); + } + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) { + super.mouseClicked(mouseX, mouseY, mouseButton); + textPlacementPriority.mouseClicked(mouseX, mouseY, mouseButton); + + if(buttonPressure.mousePressed(mc, mouseX, mouseY)) { + this.pressure++; + if(pressure > 5) pressure = 0; + buttonPressure.displayString = pressure + " PU"; + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + } + + if(buttonPriority.mousePressed(mc, mouseX, mouseY)) { + this.priority++; + if(priority >= ConnectionPriority.values().length) priority = 0; + buttonPriority.displayString = EnumUtil.grabEnumSafely(ConnectionPriority.class, priority).name(); + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + } + } + + @Override public boolean doesGuiPauseGame() { return false; } + } +} diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index e515314ac..238de0e25 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -79,6 +79,7 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_g3_zebra, 1), new Object[] { " M ", "MPM", " M ", 'M', BIGMT.mechanism(), 'P', ModItems.gun_g3 }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_stinger, 1), new Object[] { "BBB", "PGM", 'B', WEAPONSTEEL.heavyBarrel(), 'P', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'G', WEAPONSTEEL.grip(), 'M', WEAPONSTEEL.mechanism() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_chemthrower, 1), new Object[] { "MHW", "PSS", 'M', WEAPONSTEEL.mechanism(), 'H', RUBBER.pipe(), 'W', ModItems.wrench, 'P', WEAPONSTEEL.heavyBarrel(), 'S', WEAPONSTEEL.shell() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_amat, 1), new Object[] { " C ", "BRS", " MG", 'G', WOOD.grip(), 'B', FERRO.heavyBarrel(), 'R', FERRO.heavyReceiver(), 'M', WEAPONSTEEL.mechanism(), 'C', DictFrame.fromOne(ModItems.weapon_mod_special, EnumModSpecial.SCOPE), 'S', WOOD.stock() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_m2, 1), new Object[] { " G", "BRM", " G", 'G', WOOD.grip(), 'B', FERRO.heavyBarrel(), 'R', FERRO.heavyReceiver(), 'M', WEAPONSTEEL.mechanism() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_autoshotgun, 1), new Object[] { "BRM", "G G", 'B', FERRO.heavyBarrel(), 'R', FERRO.heavyReceiver(), 'M', WEAPONSTEEL.mechanism(), 'G', ANY_PLASTIC.grip() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_autoshotgun_shredder, 1), new Object[] { " M ", "MAM", " M ", 'M', BIGMT.mechanism(), 'A', ModItems.gun_autoshotgun }); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 63715bbe3..84b99d6a5 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1468,6 +1468,7 @@ public class ModItems { public static Item gun_g3_zebra; public static Item gun_stinger; public static Item gun_chemthrower; + public static Item gun_amat; public static Item gun_m2; public static Item gun_autoshotgun; public static Item gun_autoshotgun_shredder; @@ -6418,6 +6419,7 @@ public class ModItems { GameRegistry.registerItem(gun_g3_zebra, gun_g3_zebra.getUnlocalizedName()); GameRegistry.registerItem(gun_stinger, gun_stinger.getUnlocalizedName()); GameRegistry.registerItem(gun_chemthrower, gun_chemthrower.getUnlocalizedName()); + GameRegistry.registerItem(gun_amat, gun_amat.getUnlocalizedName()); GameRegistry.registerItem(gun_m2, gun_m2.getUnlocalizedName()); GameRegistry.registerItem(gun_autoshotgun, gun_autoshotgun.getUnlocalizedName()); GameRegistry.registerItem(gun_autoshotgun_shredder, gun_autoshotgun_shredder.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemTrain.java b/src/main/java/com/hbm/items/special/ItemTrain.java index 07cf3fe8f..19bdab7ea 100644 --- a/src/main/java/com/hbm/items/special/ItemTrain.java +++ b/src/main/java/com/hbm/items/special/ItemTrain.java @@ -13,7 +13,6 @@ import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.block.Block; -import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -24,7 +23,7 @@ public class ItemTrain extends ItemEnumMulti { public ItemTrain() { super(EnumTrainType.class, true, true); - this.setCreativeTab(CreativeTabs.tabTransport); + this.setCreativeTab(null);//CreativeTabs.tabTransport); this.setMaxStackSize(1); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 4576cf7a0..ceb18f250 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -70,6 +70,7 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_g3_zebra, new ItemRenderG3(ResourceManager.g3_zebra_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_stinger, new ItemRenderStinger()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_chemthrower, new ItemRenderChemthrower()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_amat, new ItemRenderAmat()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_m2, new ItemRenderM2()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun, new ItemRenderShredder(ResourceManager.shredder_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun_shredder, new ItemRenderShredder(ResourceManager.shredder_orig_tex)); @@ -254,6 +255,7 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_g3_zebra) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_stinger) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_chemthrower) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_amat) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_m2) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_autoshotgun) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_autoshotgun_shredder) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 3d0164466..8951e97d7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -836,6 +836,56 @@ public class Orchestras { } }; + public static BiConsumer ORCHESTRA_AMAT = (stack, ctx) -> { + EntityLivingBase entity = ctx.entity; + if(entity.worldObj.isRemote) return; + AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + boolean aiming = ItemGunBaseNT.getIsAiming(stack); + + if(type == AnimType.EQUIP) { + if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 0.5F, 1.25F); + if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 0.5F, 1.25F); + } + + if(type == AnimType.CYCLE) { + if(timer == 7) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); + if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); + if(timer == 12) { + SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, + 0.375, aiming ? 0 : -0.125, -0.25D, + -0.05, 0.2, -0.025, + 0.01, -10F + (float) entity.getRNG().nextGaussian() * 10F, (float) entity.getRNG().nextGaussian() * 12.5F, casing.getName(), true, 60, 0.5D, 10); + } + } + + if(type == AnimType.CYCLE_DRY) { + if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); + if(timer == 7) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); + if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); + } + + if(type == AnimType.RELOAD) { + if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); + if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); + if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); + if(timer == 41) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); + } + + if(type == AnimType.JAMMED) { + if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); + if(timer == 12) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); + if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltOpen", 0.5F, 1F); + if(timer == 23) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 0.5F, 1F); + } + + if(type == AnimType.INSPECT) { + if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 0.5F, 1F); + if(timer == 45) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 0.5F, 1F); + } + }; + public static BiConsumer ORCHESTRA_M2 = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java index 66327e98a..075bcf63e 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java @@ -15,6 +15,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineBelt; +import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; @@ -54,6 +55,17 @@ public class XFactory50 { bmg50_he = new BulletConfig().setItem(EnumAmmo.BMG50_HE).setCasing(EnumCasingType.LARGE_STEEL, 12).setWear(3F).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.75F).setOnImpact(LAMBDA_STANDARD_EXPLODE) .setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50he")); + ModItems.gun_amat = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() + .dura(350).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(XFactory44.scope_lilmac).smoke(LAMBDA_SMOKE) + .rec(new Receiver(0) + .dmg(30F).delay(25).dry(25).spreadHipfire(0.05F).reload(51).jam(43).sound("hbm:weapon.fire.amat", 1.0F, 1.0F) + .mag(new MagazineFullReload(0, 7).addConfigs(bmg50_sp, bmg50_fmj, bmg50_jhp, bmg50_ap, bmg50_du, bmg50_he)) + .offset(1, -0.0625 * 1.5, -0.25D) + .setupStandardFire().recoil(LAMBDA_RECOIL_AMAT)) + .setupStandardConfiguration() + .anim(LAMBDA_AMAT_ANIMS).orchestra(Orchestras.ORCHESTRA_AMAT) + ).setUnlocalizedName("gun_amat"); + ModItems.gun_m2 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(10).inspect(31).crosshair(Crosshair.L_CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) @@ -70,10 +82,52 @@ public class XFactory50 { Lego.handleStandardSmoke(ctx.entity, stack, 2000, 0.05D, 1.1D, 0); }; + public static BiConsumer LAMBDA_RECOIL_AMAT = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(12.5F, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1)); + }; + public static BiConsumer LAMBDA_RECOIL_M2 = (stack, ctx) -> { ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); }; + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_AMAT_ANIMS = (stack, type) -> { + double turn = -60; + double pullAmount = -2.5; + double side = 4; + double down = -2; + double detach = 0.5; + double apex = 7; + + switch(type) { + case EQUIP: return new BusAnimation() + .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL)) + .addBus("BIPOD", new BusAnimationSequence().hold(500).addPos(80, 0, 0, 350).addPos(80, 25, 0, 150)); + case CYCLE: return new BusAnimation() + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, -0.5, 50, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL)) + .addBus("BOLT_TURN", new BusAnimationSequence().hold(250).addPos(0, 0, turn, 150).hold(700).addPos(0, 0, 0, 150)) + .addBus("BOLT_PULL", new BusAnimationSequence().hold(350).addPos(0, 0, pullAmount, 250, IType.SIN_UP).hold(250).addPos(0, 0, 0, 200, IType.LINEAR)) + .addBus("LIFT", new BusAnimationSequence().hold(600).addPos(-3, 0, 0, 150, IType.SIN_DOWN).hold(300).addPos(0, 0, 0, 250, IType.SIN_FULL)); + case CYCLE_DRY: return new BusAnimation() + .addBus("BOLT_TURN", new BusAnimationSequence().hold(250).addPos(0, 0, turn, 150).hold(700).addPos(0, 0, 0, 150)) + .addBus("BOLT_PULL", new BusAnimationSequence().hold(350).addPos(0, 0, pullAmount, 250, IType.SIN_UP).hold(250).addPos(0, 0, 0, 200, IType.LINEAR)) + .addBus("LIFT", new BusAnimationSequence().hold(600).addPos(-3, 0, 0, 150, IType.SIN_DOWN).hold(300).addPos(0, 0, 0, 250, IType.SIN_FULL)); + case RELOAD: return new BusAnimation() + .addBus("MAG", new BusAnimationSequence().addPos(0, -10, 0, 350, IType.SIN_UP).addPos(0, 0, 0, 650, IType.SIN_UP)) + .addBus("LIFT", new BusAnimationSequence().hold(1000).addPos(-2, 0, 0, 150, IType.SIN_DOWN).addPos(0, 0, 0, 250, IType.SIN_FULL).hold(450).addPos(-3, 0, 0, 150, IType.SIN_DOWN).hold(300).addPos(0, 0, 0, 250, IType.SIN_FULL)) + .addBus("BOLT_TURN", new BusAnimationSequence().hold(1500).addPos(0, 0, turn, 150).hold(700).addPos(0, 0, 0, 150)) + .addBus("BOLT_PULL", new BusAnimationSequence().hold(1600).addPos(0, 0, pullAmount, 250, IType.SIN_UP).hold(250).addPos(0, 0, 0, 200, IType.LINEAR)); + case JAMMED: return new BusAnimation() + .addBus("LIFT", new BusAnimationSequence().hold(250).addPos(-15, 0, 0, 500, IType.SIN_FULL).holdUntil(1650).addPos(0, 0, 0, 500, IType.SIN_FULL)) + .addBus("BOLT_TURN", new BusAnimationSequence().hold(250).addPos(0, 0, turn, 150).holdUntil(1250).addPos(0, 0, 0, 150)) + .addBus("BOLT_PULL", new BusAnimationSequence().hold(350).addPos(0, 0, pullAmount, 250, IType.SIN_UP).addPos(0, 0, 0, 200, IType.LINEAR).addPos(0, 0, pullAmount, 250, IType.SIN_UP).addPos(0, 0, 0, 200, IType.LINEAR)); + case INSPECT: return new BusAnimation() + .addBus("SCOPE_THROW", new BusAnimationSequence().addPos(0, detach, 0, 100, IType.SIN_FULL).addPos(side, down, 0, 500, IType.SIN_FULL).addPos(side, down - 0.5, 0, 100).addPos(side, apex, 0, 350, IType.SIN_FULL).addPos(side, down - 0.5, 0, 350, IType.SIN_DOWN).addPos(side, down, 0, 100).hold(250).addPos(0, detach, 0, 500, IType.SIN_FULL).addPos(0, 0, 0, 250, IType.SIN_FULL)) + .addBus("SCOPE_SPIN", new BusAnimationSequence().hold(700).addPos(-360, 0, 0, 700)); + } + + return null; + }; + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_M2_ANIMS = (stack, type) -> { switch(type) { case EQUIP: return new BusAnimation() diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java index 6d90dd8d1..d6958bc94 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java @@ -92,6 +92,7 @@ public class WeaponModManager { ModItems.gun_stinger, ModItems.gun_chemthrower }; Item[] ferroGuns = new Item[] { + ModItems.gun_amat, ModItems.gun_m2, ModItems.gun_autoshotgun, ModItems.gun_autoshotgun_shredder, ModItems.gun_quadro }; @@ -126,7 +127,7 @@ public class WeaponModManager { new WeaponModDefinition(EnumModGeneric.BRONZE_DURA).addMod(bronzeGuns, new WeaponModGenericDurability(117)); new WeaponModDefinition(EnumModSpecial.SPEEDLOADER).addMod(ModItems.gun_liberator, new WeaponModLiberatorSpeedloader(200)); - new WeaponModDefinition(EnumModSpecial.SILENCER).addMod(new Item[] {ModItems.gun_am180, ModItems.gun_uzi, ModItems.gun_uzi_akimbo, ModItems.gun_g3}, new WeaponModSilencer(ID_SILENCER)); + new WeaponModDefinition(EnumModSpecial.SILENCER).addMod(new Item[] {ModItems.gun_am180, ModItems.gun_uzi, ModItems.gun_uzi_akimbo, ModItems.gun_g3, ModItems.gun_amat}, new WeaponModSilencer(ID_SILENCER)); new WeaponModDefinition(EnumModSpecial.SCOPE).addMod(new Item[] {ModItems.gun_heavy_revolver, ModItems.gun_g3, ModItems.gun_mas36, ModItems.gun_charge_thrower}, new WeaponModScope(ID_SCOPE)); new WeaponModDefinition(EnumModSpecial.SAW) .addMod(new Item[] {ModItems.gun_maresleg, ModItems.gun_double_barrel}, new WeaponModSawedOff(ID_SAWED_OFF)) diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModSilencer.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModSilencer.java index 49c413883..52cdac0c3 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModSilencer.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModSilencer.java @@ -1,5 +1,6 @@ package com.hbm.items.weapon.sedna.mods; +import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.Receiver; import net.minecraft.item.ItemStack; @@ -14,6 +15,7 @@ public class WeaponModSilencer extends WeaponModBase { public T eval(T base, ItemStack gun, String key, Object parent) { if(key == Receiver.S_FIRESOUND) { + if(gun.getItem() == ModItems.gun_amat) return (T) "hbm:weapon.silencerShoot"; return (T) "hbm:weapon.fire.silenced"; } diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 0a3738f3e..20c2f72f6 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5320)"; + public static final String VERSION = "1.0.27 BETA (5334)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index b1a87dd14..167435ed1 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -12,6 +12,7 @@ import com.hbm.blocks.machine.Floodlight.TileEntityFloodlight; import com.hbm.blocks.machine.MachineFan.TileEntityFan; import com.hbm.blocks.machine.PistonInserter.TileEntityPistonInserter; import com.hbm.blocks.machine.WatzPump.TileEntityWatzPump; +import com.hbm.blocks.network.FluidPump.TileEntityFluidPump; import com.hbm.config.GeneralConfig; import com.hbm.entity.cart.EntityMinecartCrate; import com.hbm.entity.cart.EntityMinecartNTM; @@ -347,6 +348,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineSolderingStation.class, new RenderSolderingStation()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineArcFurnaceLarge.class, new RenderArcFurnace()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineWoodBurner.class, new RenderWoodBurner()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFluidPump.class, new RenderFluidPump()); //Foundry ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryBasin.class, new RenderFoundry()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryMold.class, new RenderFoundry()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 561167561..c1b471e74 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -482,7 +482,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.rail_highspeed, 16), new Object[] { "S S", "SIS", "S S", 'S', STEEL.ingot(), 'I', IRON.plate() }); addRecipeAuto(new ItemStack(ModBlocks.rail_booster, 6), new Object[] { "S S", "CIC", "SRS", 'S', STEEL.ingot(), 'I', IRON.plate(), 'R', MINGRADE.ingot(), 'C', ModItems.coil_copper }); - addRecipeAuto(new ItemStack(ModBlocks.rail_large_straight, 4), new Object[] { "B B", "SSS", "W W", 'B', ModItems.bolt_spike, 'S', ModBlocks.steel_beam, 'W', KEY_SLAB }); + /*addRecipeAuto(new ItemStack(ModBlocks.rail_large_straight, 4), new Object[] { "B B", "SSS", "W W", 'B', ModItems.bolt_spike, 'S', ModBlocks.steel_beam, 'W', KEY_SLAB }); addShapelessAuto(new ItemStack(ModBlocks.rail_large_straight, 1), new Object[] { ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short }); addShapelessAuto(new ItemStack(ModBlocks.rail_large_straight_short, 5), new Object[] { ModBlocks.rail_large_straight }); addRecipeAuto(new ItemStack(ModBlocks.rail_large_buffer, 1), new Object[] { " S", "RS", 'R', ModBlocks.rail_large_straight, 'S', STEEL.ingot() }); @@ -492,7 +492,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.rail_large_ramp, 1), new Object[] { " R ", "SSS", 'R', ModBlocks.rail_large_straight, 'S', KEY_SLAB }); addRecipeAuto(new ItemStack(ModBlocks.rail_large_switch, 1), new Object[] { "R R", " RR", " R", 'R', ModBlocks.rail_large_straight }); addShapelessAuto(new ItemStack(ModBlocks.rail_large_switch), new Object[] { ModBlocks.rail_large_switch_flipped }); - addShapelessAuto(new ItemStack(ModBlocks.rail_large_switch_flipped), new Object[] { ModBlocks.rail_large_switch }); + addShapelessAuto(new ItemStack(ModBlocks.rail_large_switch_flipped), new Object[] { ModBlocks.rail_large_switch });*/ addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.bomb_multi), 1), new Object[] { "AAD", "CHF", "AAD", 'A', AL.wireFine(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'H', AL.shell(), 'F', ModItems.fins_quad_titanium, 'D', KEY_WHITE }); addShapelessAuto(new ItemStack(ModItems.powder_ice, 4), new Object[] { Items.snowball, KNO.dust(), REDSTONE.dust() }); @@ -607,6 +607,7 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModBlocks.fluid_duct_gauge), new Object[] { ModBlocks.fluid_duct_paintable, STEEL.ingot(), DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); addRecipeAuto(new ItemStack(ModBlocks.fluid_valve, 1), new Object[] { "S", "W", 'S', Blocks.lever, 'W', ModBlocks.fluid_duct_paintable }); addRecipeAuto(new ItemStack(ModBlocks.fluid_switch, 1), new Object[] { "S", "W", 'S', REDSTONE.dust(), 'W', ModBlocks.fluid_duct_paintable }); + addRecipeAuto(new ItemStack(ModBlocks.fluid_pump, 1), new Object[] { " S ", "PGP", "IMI", 'S', STEEL.shell(), 'P', STEEL.pipe(), 'G', GRAPHITE.ingot(), 'I', STEEL.ingot(), 'M', ModItems.motor }); addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube, 8), new Object[] { "CRC", 'C', CU.plateCast(), 'R', ANY_RUBBER.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube, 24), new Object[] { "CRC", 'C', CU.plateWelded(), 'R', ANY_RUBBER.ingot() }); diff --git a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java index cc5ddbdc5..37fbc2d55 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerRenderer.java +++ b/src/main/java/com/hbm/main/ModEventHandlerRenderer.java @@ -14,6 +14,7 @@ import com.hbm.util.Clock; import com.hbm.world.biome.BiomeGenCraterBase; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -54,6 +55,9 @@ public class ModEventHandlerRenderer { private static ModelMan manlyModel; private static boolean[] partsHidden = new boolean[7]; + + @SubscribeEvent + public void onRenderTickPre(TickEvent.RenderTickEvent event) { } @SubscribeEvent(priority = EventPriority.LOWEST, receiveCanceled = true) public void onRenderPlayerPre(RenderPlayerEvent.Pre event) { diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index d1af02be6..c729a7779 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -391,6 +391,7 @@ public class ResourceManager { public static final IModelCustom pylon_medium = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/network/pylon_medium.obj")); public static final IModelCustom pylon_large = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/network/pylon_large.obj")); public static final IModelCustom substation = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/network/substation.obj")); + public static final IModelCustom fluid_pump = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/network/fluid_diode.obj")); //Radiolysis public static final IModelCustom radiolysis = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/radiolysis.obj")); @@ -818,6 +819,7 @@ public class ResourceManager { public static final ResourceLocation substation_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/substation.png"); public static final ResourceLocation wire_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/wire.png"); public static final ResourceLocation wire_greyscale_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/wire_greyscale.png"); + public static final ResourceLocation fluid_pump_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/fluid_diode.png"); //Radiolysis public static final ResourceLocation radiolysis_tex = new ResourceLocation(RefStrings.MODID, "textures/models/radiolysis.png"); @@ -874,6 +876,7 @@ public class ResourceManager { public static final IModelCustom g3 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/g3.obj")).asVBO(); public static final IModelCustom stinger = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/stinger.obj")).asVBO(); public static final IModelCustom chemthrower = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/chemthrower.obj")).asVBO(); + public static final IModelCustom amat = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/amat.obj")).asVBO(); public static final IModelCustom m2 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/m2_browning.obj")).asVBO(); public static final IModelCustom shredder = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/shredder.obj")).asVBO(); public static final IModelCustom quadro = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/quadro.obj")).asVBO(); @@ -994,6 +997,7 @@ public class ResourceManager { public static final ResourceLocation g3_green_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_polymer_green.png"); public static final ResourceLocation g3_black_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_polymer_black.png"); public static final ResourceLocation g3_attachments = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_attachments.png"); + public static final ResourceLocation amat_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/amat.png"); public static final ResourceLocation shredder_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder.png"); public static final ResourceLocation shredder_orig_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder_orig.png"); public static final ResourceLocation sexy_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sexy.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java new file mode 100644 index 000000000..9957c23e1 --- /dev/null +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java @@ -0,0 +1,207 @@ +package com.hbm.render.item.weapon.sedna; + +import org.lwjgl.opengl.GL11; + +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.items.weapon.sedna.mods.WeaponModManager; +import com.hbm.main.ResourceManager; +import com.hbm.render.anim.HbmAnimations; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; + +public class ItemRenderAmat extends ItemRenderWeaponBase { + + @Override + protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.5F; } + + @Override + public float getViewFOV(ItemStack stack, float fov) { + float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; + return fov * (1 - aimingProgress * (isScoped(stack) ? 0.8F : 0.33F)); + } + + @Override + public void setupFirstPerson(ItemStack stack) { + GL11.glTranslated(0, 0, 0.875); + + float offset = 0.8F; + + standardAimingTransform(stack, + -1F * offset, -1F * offset, 3.25F * offset, + 0, -4.875 / 8D, 1.875); + } + + @Override + public void renderFirstPerson(ItemStack stack) { + boolean isScoped = isScoped(stack); + if(isScoped && ItemGunBaseNT.prevAimingProgress == 1 && ItemGunBaseNT.aimingProgress == 1) return; + + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.amat_tex); + double scale = 0.375D; + GL11.glScaled(scale, scale, scale); + + boolean deployed = HbmAnimations.getRelevantAnim(0) == null || HbmAnimations.getRelevantAnim(0).animation.getBus("BIPOD") == null; + double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); + double[] bipod = HbmAnimations.getRelevantTransformation("BIPOD"); + double[] lift = HbmAnimations.getRelevantTransformation("LIFT"); + double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); + double[] boltTurn = HbmAnimations.getRelevantTransformation("BOLT_TURN"); + double[] boltPull = HbmAnimations.getRelevantTransformation("BOLT_PULL"); + double[] mag = HbmAnimations.getRelevantTransformation("MAG"); + double[] scopeThrow = HbmAnimations.getRelevantTransformation("SCOPE_THROW"); + double[] scopeSpin = HbmAnimations.getRelevantTransformation("SCOPE_SPIN"); + + GL11.glTranslated(0, 0, recoil[2]); + + GL11.glTranslated(0, -3, -8); + GL11.glRotated(equip[0], 1, 0, 0); + GL11.glRotated(lift[0], 1, 0, 0); + GL11.glTranslated(0, 3, 8); + + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.amat.renderPart("Gun"); + + if(isScoped(stack)) { + GL11.glPushMatrix(); + GL11.glTranslated(scopeThrow[0], scopeThrow[1], scopeThrow[2]); + GL11.glTranslated(0, 1.5, -4.5); + GL11.glRotated(scopeSpin[0], 1, 0, 0); + GL11.glTranslated(0, -1.5, 4.5); + ResourceManager.amat.renderPart("Scope"); + GL11.glPopMatrix(); + } + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.625, 0); + GL11.glRotated(boltTurn[2], 0, 0, 1); + GL11.glTranslated(0, -0.625, 0); + GL11.glTranslated(0, 0, boltPull[2]); + ResourceManager.amat.renderPart("Bolt"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(mag[0], mag[1], mag[2]); + ResourceManager.amat.renderPart("Magazine"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0.3125, -0.625, -1); + GL11.glRotated(deployed ? 25 : bipod[1], 0, 0, 1); + GL11.glTranslated(-0.3125, 0.625, 1); + ResourceManager.amat.renderPart("BipodHingeLeft"); + GL11.glTranslated(0.3125, -0.625, -1); + GL11.glRotated(deployed ? 80 : bipod[0], 1, 0, 0); + GL11.glTranslated(-0.3125, 0.625, 1); + ResourceManager.amat.renderPart("BipodLeft"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(-0.3125, -0.625, -1); + GL11.glRotated(deployed ? -25 : -bipod[1], 0, 0, 1); + GL11.glTranslated(0.3125, 0.625, 1); + ResourceManager.amat.renderPart("BipodHingeRight"); + GL11.glTranslated(-0.3125, -0.625, -1); + GL11.glRotated(deployed ? 80 : bipod[0], 1, 0, 0); + GL11.glTranslated(0.3125, 0.625, 1); + ResourceManager.amat.renderPart("BipodRight"); + GL11.glPopMatrix(); + + if(isSilenced(stack)) { + GL11.glTranslated(0, 0.625, -4.3125); + GL11.glScaled(1.25, 1.25, 1.25); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.g3_attachments); + ResourceManager.g3.renderPart("Silencer"); + + GL11.glShadeModel(GL11.GL_FLAT); + } else { + ResourceManager.amat.renderPart("MuzzleBrake"); + + double smokeScale = 0.5; + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.625, 12); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(smokeScale, smokeScale, smokeScale); + this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 1D); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.5, 11); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(0.75, 0.75, 0.75); + this.renderGapFlash(gun.lastShot[0]); + GL11.glPopMatrix(); + } + } + + @Override + public void setupThirdPerson(ItemStack stack) { + super.setupThirdPerson(stack); + double scale = 1.5D; + GL11.glScaled(scale, scale, scale); + GL11.glTranslated(0, 0.5, 6.75); + } + + @Override + public void setupInv(ItemStack stack) { + super.setupInv(stack); + if(isSilenced(stack)) { + double scale = 0.8175D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glTranslated(-0.5, 0.5, -1); + } else { + double scale = 0.9375D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glTranslated(-0.5, 0.5, 0); + } + } + + @Override + public void setupModTable(ItemStack stack) { + double scale = -5.75D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(90, 0, 1, 0); + GL11.glTranslated(0, -0.25, -1.5); + } + + @Override + public void renderOther(ItemStack stack, ItemRenderType type) { + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.amat_tex); + ResourceManager.amat.renderPart("Gun"); + ResourceManager.amat.renderPart("Bolt"); + ResourceManager.amat.renderPart("Magazine"); + ResourceManager.amat.renderPart("BipodLeft"); + ResourceManager.amat.renderPart("BipodHingeLeft"); + ResourceManager.amat.renderPart("BipodRight"); + ResourceManager.amat.renderPart("BipodHingeRight"); + if(isScoped(stack)) ResourceManager.amat.renderPart("Scope"); + if(isSilenced(stack)) { + GL11.glTranslated(0, 0.625, -4.3125); + GL11.glScaled(1.25, 1.25, 1.25); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.g3_attachments); + ResourceManager.g3.renderPart("Silencer"); + } else { + ResourceManager.amat.renderPart("MuzzleBrake"); + } + GL11.glShadeModel(GL11.GL_FLAT); + } + + public boolean isScoped(ItemStack stack) { + return true; + } + + public boolean isSilenced(ItemStack stack) { + return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER); + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderFluidPump.java b/src/main/java/com/hbm/render/tileentity/RenderFluidPump.java new file mode 100644 index 000000000..c38bf6527 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderFluidPump.java @@ -0,0 +1,59 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderFluidPump extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tile.getBlockMetadata()) { + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + } + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.fluid_pump_tex); + ResourceManager.fluid_pump.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.fluid_pump); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -2, 0); + GL11.glScaled(5, 5, 5); + } + public void renderCommon() { + GL11.glScaled(2, 2, 2); + GL11.glRotatef(90, 0F, 1F, 0F); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.fluid_pump_tex); + ResourceManager.fluid_pump.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 33f3b124a..375a89662 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -35,6 +35,7 @@ import com.hbm.blocks.network.CableDiode.TileEntityDiode; import com.hbm.blocks.network.CranePartitioner.TileEntityCranePartitioner; import com.hbm.blocks.network.FluidDuctGauge.TileEntityPipeGauge; import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable; +import com.hbm.blocks.network.FluidPump.TileEntityFluidPump; import com.hbm.blocks.rail.RailStandardSwitch.TileEntityRailSwitch; import com.hbm.tileentity.bomb.*; import com.hbm.tileentity.deco.*; @@ -198,14 +199,6 @@ public class TileMappings { put(TileEntityLantern.class, "tileentity_lantern_ordinary"); put(TileEntityLanternBehemoth.class, "tileentity_lantern_behemoth"); put(TileEntityStorageDrum.class, "tileentity_waste_storage_drum"); - put(TileEntityCableBaseNT.class, "tileentity_ohgod"); // what? - put(TileEntityCablePaintable.class, "tileentity_cable_paintable"); - put(TileEntityCableGauge.class, "tileentity_cable_gauge"); - put(TileEntityPipeBaseNT.class, "tileentity_pipe_base"); - put(TileEntityPipePaintable.class, "tileentity_pipe_paintable"); - put(TileEntityPipeGauge.class, "tileentity_pipe_gauge"); - put(TileEntityPipeExhaust.class, "tileentity_pipe_exhaust"); - put(TileEntityFluidValve.class, "tileentity_pipe_valve"); put(TileEntityMachineBAT9000.class, "tileentity_bat9000"); put(TileEntityMachineOrbus.class, "tileentity_orbus"); put(TileEntityGlpyhidSpawner.class, "tileentity_glyphid_spawner"); @@ -402,6 +395,8 @@ public class TileMappings { private static void putNetwork() { put(TileEntityCableBaseNT.class, "tileentity_cable", "tileentity_wirecoated"); + put(TileEntityCablePaintable.class, "tileentity_cable_paintable"); + put(TileEntityCableGauge.class, "tileentity_cable_gauge"); put(TileEntityCableSwitch.class, "tileentity_cable_switch"); put(TileEntityDiode.class, "tileentity_cable_diode"); @@ -411,6 +406,13 @@ public class TileMappings { put(TileEntityPylonLarge.class, "tileentity_pylon_large"); put(TileEntitySubstation.class, "tileentity_substation"); + put(TileEntityPipeBaseNT.class, "tileentity_pipe_base"); + put(TileEntityPipePaintable.class, "tileentity_pipe_paintable"); + put(TileEntityPipeGauge.class, "tileentity_pipe_gauge"); + put(TileEntityPipeExhaust.class, "tileentity_pipe_exhaust"); + put(TileEntityFluidValve.class, "tileentity_pipe_valve"); + put(TileEntityFluidPump.class, "tileentity_pipe_pump"); + put(TileEntityCraneInserter.class, "tileentity_inserter"); put(TileEntityCraneExtractor.class, "tileentity_extractor"); put(TileEntityCraneGrabber.class, "tileentity_grabber"); diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java index 997cd1f07..051e69092 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java @@ -378,17 +378,19 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl boolean needsDesignator = needsDesignator(slots[0].getItem()); - int targetX = 0; - int targetZ = 0; + int targetX = xCoord; + int targetZ = zCoord; if(slots[1] != null && slots[1].getItem() instanceof IDesignatorItem) { IDesignatorItem designator = (IDesignatorItem) slots[1].getItem(); - if(!designator.isReady(worldObj, slots[1], xCoord, yCoord, zCoord) && needsDesignator) return BombReturnCode.ERROR_MISSING_COMPONENT; - - Vec3 coords = designator.getCoords(worldObj, slots[1], xCoord, yCoord, zCoord); - targetX = (int) Math.floor(coords.xCoord); - targetZ = (int) Math.floor(coords.zCoord); + if(needsDesignator) { + if(!designator.isReady(worldObj, slots[1], xCoord, yCoord, zCoord)) return BombReturnCode.ERROR_MISSING_COMPONENT; + + Vec3 coords = designator.getCoords(worldObj, slots[1], xCoord, yCoord, zCoord); + targetX = (int) Math.floor(coords.xCoord); + targetZ = (int) Math.floor(coords.zCoord); + } } else { if(needsDesignator) return BombReturnCode.ERROR_MISSING_COMPONENT; diff --git a/src/main/java/com/hbm/util/BobMathUtil.java b/src/main/java/com/hbm/util/BobMathUtil.java index df6cc8f44..bcffce9f1 100644 --- a/src/main/java/com/hbm/util/BobMathUtil.java +++ b/src/main/java/com/hbm/util/BobMathUtil.java @@ -180,6 +180,14 @@ public class BobMathUtil { return new BigDecimal(num).setScale(digits, RoundingMode.HALF_UP).doubleValue(); } + + /** + * @param amount + * @return the number as a string with thousand group commas + */ + public static String format(int amount) { + return String.format(Locale.US, "%,d", amount); + } public static boolean getBlink() { return System.currentTimeMillis() % 1000 < 500; diff --git a/src/main/java/com/hbm/world/WorldUtil.java b/src/main/java/com/hbm/world/WorldUtil.java index 05e6d33b0..9a17a73cb 100644 --- a/src/main/java/com/hbm/world/WorldUtil.java +++ b/src/main/java/com/hbm/world/WorldUtil.java @@ -111,18 +111,14 @@ public class WorldUtil { int chunkZ = MathHelper.floor_double(entity.posZ / 16.0D); byte loadRadius = 2; - for (int k = chunkX - loadRadius; k <= chunkX + loadRadius; ++k) - { - for (int l = chunkZ - loadRadius; l <= chunkZ + loadRadius; ++l) - { + for(int k = chunkX - loadRadius; k <= chunkX + loadRadius; ++k) { + for(int l = chunkZ - loadRadius; l <= chunkZ + loadRadius; ++l) { world.getChunkFromChunkCoords(k, l); } } - if (!world.loadedEntityList.contains(entity)) - { - if (!MinecraftForge.EVENT_BUS.post(new EntityJoinWorldEvent(entity, world))) - { + if(!world.loadedEntityList.contains(entity)) { + if(!MinecraftForge.EVENT_BUS.post(new EntityJoinWorldEvent(entity, world))) { world.getChunkFromChunkCoords(chunkX, chunkZ).addEntity(entity); world.loadedEntityList.add(entity); world.onEntityAdded(entity); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 9eb688713..013fca1e3 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2068,6 +2068,7 @@ item.gun_aberrator.name=Aberrator item.gun_aberrator_eott.name=Eyes Of The Tempest item.gun_am180.name=.22er Maschinenpistole item.gun_am180_silenced.name=Schallgedämpfte .22er Maschinenpistole +item.gun_amat.name=Panzerbüchse item.gun_autoshotgun.name=Auto-Flinte item.gun_autoshotgun_sexy.name=Sexy item.gun_autoshotgun_shredder.name=Shredder @@ -4163,6 +4164,7 @@ tile.fluid_duct_gauge.desc=Rohr welches anzeight, wie viel Flüssigkeit$sich pro tile.fluid_duct_neo.name=Universelles Flüssigkeitsrohr tile.fluid_duct_paintable.name=Geschirmtes universelles Flüssigkeitsrohr (Färbbar) tile.fluid_duct_solid.name=Geschirmtes universelles Flüssigkeitsrohr (Veraltet) +tile.fluid_pump.name=Flussseuerungspumpe tile.fluid_switch.name=Redstone-Ventil tile.fluid_valve.name=Ventil tile.foam_layer.name=Schaumdecke @@ -4861,6 +4863,9 @@ tile.vent_chlorine.name=Chlorgas-Auslass tile.vent_chlorine_seal.name=Chlorgassiegel tile.vent_cloud.name=Wolken-Auslass tile.vent_pink_cloud.name=Pinker Wolken-Auslass +tile.vine_phosphor.large.name=Phosphorranken +tile.vinyl_tile.large.name=Große Vinylfliesen +tile.vinyl_tile.small.name=Kleine Vinylfliesen tile.vitrified_barrel.name=Fass voll vitrifiziertem Atommüll tile.volcano_core.name=Vulkankern tile.volcano_rad_core.name=Rad-Vulkankern diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e888fe951..4d972d4fd 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2879,6 +2879,7 @@ item.gun_aberrator.name=Aberrator item.gun_aberrator_eott.name=Eyes Of The Tempest item.gun_am180.name=.22 Submachine Gun item.gun_am180_silenced.name=Silenced .22 Submachine Gun +item.gun_amat.name=Anti-Materiel Rifle item.gun_autoshotgun.name=Auto Shotgun item.gun_autoshotgun_sexy.name=Sexy item.gun_autoshotgun_shredder.name=Shredder @@ -5288,6 +5289,7 @@ tile.fluid_duct_gauge.desc=Pipe that displays how much fluid$moves within the ne tile.fluid_duct_neo.name=Universal Fluid Duct tile.fluid_duct_paintable.name=Paintable Coated Universal Fluid Duct tile.fluid_duct_solid.name=Coated Universal Fluid Duct (Deprecated) +tile.fluid_pump.name=Flow Control Pump tile.fluid_switch.name=Redstone Fluid Valve tile.fluid_valve.name=Fluid Valve tile.foam_layer.name=Foam layer @@ -6018,6 +6020,7 @@ tile.vent_chlorine.name=Chlorine Vent tile.vent_chlorine_seal.name=Chlorine Seal tile.vent_cloud.name=Cloud Vent tile.vent_pink_cloud.name=Pink Cloud Vent +tile.vine_phosphor.large.name=Phosphor Vines tile.vinyl_tile.large.name=Large Vinyl Tile tile.vinyl_tile.small.name=Small Vinyl Tiles tile.vitrified_barrel.name=Vitrified Nuclear Waste Drum diff --git a/src/main/resources/assets/hbm/models/network/fluid_diode.obj b/src/main/resources/assets/hbm/models/network/fluid_diode.obj new file mode 100644 index 000000000..3347a2036 --- /dev/null +++ b/src/main/resources/assets/hbm/models/network/fluid_diode.obj @@ -0,0 +1,2189 @@ +# Blender 4.0.2 +# www.blender.org +mtllib Pump.mtl +o Cylinder +v -0.500000 0.500000 -0.250000 +v -0.500000 0.500000 -0.437500 +v -0.433013 0.250000 -0.250000 +v -0.433013 0.250000 -0.437500 +v -0.250000 0.066987 -0.250000 +v -0.250000 0.066987 -0.437500 +v 0.000000 0.000000 -0.250000 +v 0.000000 0.000000 -0.437500 +v 0.250000 0.066987 -0.250000 +v 0.250000 0.066987 -0.437500 +v 0.433013 0.250000 -0.250000 +v 0.433013 0.250000 -0.437500 +v 0.500000 0.500000 -0.250000 +v 0.500000 0.500000 -0.437500 +v 0.433013 0.750000 -0.250000 +v 0.433013 0.750000 -0.437500 +v 0.250000 0.933013 -0.250000 +v 0.250000 0.933013 -0.437500 +v -0.000000 1.000000 -0.250000 +v -0.000000 1.000000 -0.437500 +v -0.250000 0.933013 -0.250000 +v -0.250000 0.933013 -0.437500 +v -0.433013 0.750000 -0.250000 +v -0.433013 0.750000 -0.437500 +v -0.376977 0.282352 -0.187500 +v -0.435295 0.500000 -0.187500 +v -0.217648 0.123023 -0.187500 +v 0.000000 0.064705 -0.187500 +v 0.217648 0.123023 -0.187500 +v 0.376977 0.282352 -0.187500 +v 0.435295 0.500000 -0.187500 +v 0.376977 0.717648 -0.187500 +v 0.217648 0.876977 -0.187500 +v -0.000000 0.935295 -0.187500 +v -0.217648 0.876977 -0.187500 +v -0.376977 0.717648 -0.187500 +v -0.156652 0.409557 -0.312500 +v -0.180886 0.500000 -0.312500 +v -0.090443 0.343348 -0.312500 +v 0.000000 0.319114 -0.312500 +v 0.090443 0.343348 -0.312500 +v 0.156652 0.409557 -0.312500 +v 0.180886 0.500000 -0.312500 +v 0.156652 0.590443 -0.312500 +v 0.090443 0.656652 -0.312500 +v -0.000000 0.680886 -0.312500 +v -0.090443 0.656652 -0.312500 +v -0.156652 0.590443 -0.312500 +v -0.305886 0.500000 -0.250000 +v -0.370590 0.500000 -0.187500 +v -0.320941 0.314705 -0.187500 +v -0.264905 0.347057 -0.250000 +v -0.185295 0.179059 -0.187500 +v -0.152943 0.235095 -0.250000 +v 0.000000 0.129409 -0.187500 +v 0.000000 0.194114 -0.250000 +v 0.185295 0.179059 -0.187500 +v 0.152943 0.235095 -0.250000 +v 0.320941 0.314705 -0.187500 +v 0.264905 0.347057 -0.250000 +v 0.370591 0.500000 -0.187500 +v 0.305886 0.500000 -0.250000 +v 0.320941 0.685295 -0.187500 +v 0.264905 0.652943 -0.250000 +v 0.185295 0.820941 -0.187500 +v 0.152943 0.764905 -0.250000 +v -0.000000 0.870591 -0.187500 +v -0.000000 0.805886 -0.250000 +v -0.185295 0.820941 -0.187500 +v -0.152943 0.764905 -0.250000 +v -0.320941 0.685295 -0.187500 +v -0.264905 0.652943 -0.250000 +v -0.435295 0.500000 -0.500000 +v -0.376977 0.282352 -0.500000 +v -0.217648 0.123023 -0.500000 +v 0.000000 0.064705 -0.500000 +v 0.217648 0.123023 -0.500000 +v 0.376977 0.282352 -0.500000 +v 0.435295 0.500000 -0.500000 +v 0.376977 0.717648 -0.500000 +v 0.217648 0.876977 -0.500000 +v -0.000000 0.935295 -0.500000 +v -0.217648 0.876977 -0.500000 +v -0.376977 0.717648 -0.500000 +v -0.375000 0.500000 -0.500000 +v -0.310295 0.500000 -0.437500 +v -0.268724 0.344852 -0.437500 +v -0.324760 0.312500 -0.500000 +v -0.155148 0.231276 -0.437500 +v -0.187500 0.175240 -0.500000 +v 0.000000 0.189705 -0.437500 +v 0.000000 0.125000 -0.500000 +v 0.155148 0.231276 -0.437500 +v 0.187500 0.175241 -0.500000 +v 0.268724 0.344852 -0.437500 +v 0.324760 0.312500 -0.500000 +v 0.310295 0.500000 -0.437500 +v 0.375000 0.500000 -0.500000 +v 0.268724 0.655148 -0.437500 +v 0.324759 0.687500 -0.500000 +v 0.155148 0.768724 -0.437500 +v 0.187500 0.824759 -0.500000 +v -0.000000 0.810295 -0.437500 +v -0.000000 0.875000 -0.500000 +v -0.155148 0.768724 -0.437500 +v -0.187500 0.824759 -0.500000 +v -0.268724 0.655148 -0.437500 +v -0.324760 0.687500 -0.500000 +v -0.247795 0.500000 -0.437500 +v -0.183090 0.500000 -0.500000 +v -0.158561 0.408455 -0.500000 +v -0.214597 0.376102 -0.437500 +v -0.091545 0.341439 -0.500000 +v -0.123898 0.285403 -0.437500 +v 0.000000 0.316909 -0.500000 +v 0.000000 0.252205 -0.437500 +v 0.091545 0.341439 -0.500000 +v 0.123898 0.285403 -0.437500 +v 0.158561 0.408455 -0.500000 +v 0.214597 0.376102 -0.437500 +v 0.183090 0.500000 -0.500000 +v 0.247795 0.500000 -0.437500 +v 0.158561 0.591545 -0.500000 +v 0.214597 0.623898 -0.437500 +v 0.091545 0.658561 -0.500000 +v 0.123898 0.714597 -0.437500 +v -0.000000 0.683091 -0.500000 +v -0.000000 0.747795 -0.437500 +v -0.091545 0.658561 -0.500000 +v -0.123898 0.714597 -0.437500 +v -0.158561 0.591545 -0.500000 +v -0.214597 0.623898 -0.437500 +v -0.264905 0.347057 -0.312500 +v -0.305886 0.500000 -0.312500 +v -0.152943 0.235095 -0.312500 +v 0.000000 0.194114 -0.312500 +v 0.152943 0.235095 -0.312500 +v 0.264905 0.347057 -0.312500 +v 0.305886 0.500000 -0.312500 +v 0.264905 0.652943 -0.312500 +v 0.152943 0.764905 -0.312500 +v -0.000000 0.805886 -0.312500 +v -0.152943 0.764905 -0.312500 +v -0.264905 0.652943 -0.312500 +v 0.187500 0.500000 0.187500 +v 0.250000 0.500000 0.187500 +v 0.187500 0.500000 -0.312500 +v 0.250000 0.500000 -0.312500 +v 0.187500 0.562744 0.187500 +v 0.250000 0.562744 0.187500 +v 0.187500 0.562744 -0.312500 +v 0.250000 0.562744 -0.312500 +v 0.187500 0.437256 0.187500 +v 0.250000 0.437256 0.187500 +v 0.187500 0.437256 -0.312500 +v 0.250000 0.437256 -0.312500 +v -0.250000 0.500000 0.187500 +v -0.187500 0.500000 0.187500 +v -0.250000 0.500000 -0.312500 +v -0.187500 0.500000 -0.312500 +v -0.250000 0.562744 0.187500 +v -0.187500 0.562744 0.187500 +v -0.250000 0.562744 -0.312500 +v -0.187500 0.562744 -0.312500 +v -0.166667 0.625244 -0.312500 +v -0.229167 0.625244 -0.312500 +v -0.166667 0.625244 0.187500 +v -0.229167 0.625244 0.187500 +v -0.250000 0.437256 0.187500 +v -0.187500 0.437256 0.187500 +v -0.250000 0.437256 -0.312500 +v -0.187500 0.437256 -0.312500 +v -0.166667 0.374756 -0.312500 +v -0.229167 0.374756 -0.312500 +v -0.166667 0.374756 0.187500 +v -0.229167 0.374756 0.187500 +v 0.156250 0.374756 0.187500 +v 0.218750 0.374756 0.187500 +v 0.156250 0.374756 -0.312500 +v 0.218750 0.374756 -0.312500 +v 0.156250 0.625244 0.187500 +v 0.218750 0.625244 0.187500 +v 0.156250 0.625244 -0.312500 +v 0.218750 0.625244 -0.312500 +v -0.000000 0.718750 -0.312500 +v -0.000000 0.718750 0.187500 +v 0.154680 0.654680 -0.312500 +v 0.154680 0.654680 0.187500 +v 0.218750 0.500000 -0.312500 +v 0.218750 0.500000 0.187500 +v 0.154680 0.345320 -0.312500 +v 0.154680 0.345320 0.187500 +v -0.000000 0.281250 -0.312500 +v -0.000000 0.281250 0.187500 +v -0.154680 0.345320 -0.312500 +v -0.154680 0.345320 0.187500 +v -0.218750 0.500000 -0.312500 +v -0.218750 0.500000 0.187500 +v -0.154680 0.654680 -0.312500 +v -0.154680 0.654680 0.187500 +v -0.000000 0.750000 0.187500 +v 0.176777 0.676777 0.187500 +v 0.250000 0.500000 0.187500 +v 0.176777 0.323223 0.187500 +v 0.000000 0.250000 0.187500 +v -0.176777 0.323223 0.187500 +v -0.250000 0.500000 0.187500 +v -0.176777 0.676777 0.187500 +v -0.000000 0.750000 0.437500 +v 0.176777 0.676777 0.437500 +v 0.250000 0.500000 0.437500 +v 0.176777 0.323223 0.437500 +v -0.000000 0.250000 0.437500 +v -0.176777 0.323223 0.437500 +v -0.250000 0.500000 0.437500 +v -0.176777 0.676777 0.437500 +v 0.132583 0.632582 0.500000 +v 0.000000 0.687500 0.500000 +v 0.187500 0.500000 0.500000 +v 0.132583 0.367417 0.500000 +v 0.000000 0.312500 0.500000 +v -0.132583 0.367417 0.500000 +v -0.187500 0.500000 0.500000 +v -0.132583 0.632582 0.500000 +v -0.093750 0.625000 0.125000 +v -0.093750 0.625000 -0.187500 +v 0.093750 0.625000 0.125000 +v 0.093750 0.625000 -0.187500 +v -0.093750 0.750000 0.125000 +v -0.093750 0.812500 0.062500 +v -0.093750 0.812500 -0.125000 +v -0.093750 0.750000 -0.187500 +v 0.093750 0.812500 0.062500 +v 0.093750 0.750000 0.125000 +v 0.093750 0.750000 -0.187500 +v 0.093750 0.812500 -0.125000 +v 0.199334 0.300666 -0.312500 +v 0.199334 0.300666 0.187500 +v 0.265625 0.328125 -0.312500 +v 0.265625 0.328125 0.187500 +v 0.331916 0.300666 -0.312500 +v 0.331916 0.300666 0.187500 +v 0.359375 0.234375 -0.312500 +v 0.359375 0.234375 0.187500 +v 0.331916 0.168084 -0.312500 +v 0.331916 0.168084 0.187500 +v 0.265625 0.140625 -0.312500 +v 0.265625 0.140625 0.187500 +v 0.199334 0.168084 -0.312500 +v 0.199334 0.168084 0.187500 +v 0.171875 0.234375 -0.312500 +v 0.171875 0.234375 0.187500 +v 0.199334 0.300666 0.187500 +v 0.259938 0.333812 0.206916 +v 0.312500 0.320083 0.253791 +v 0.326229 0.267521 0.300666 +v 0.293084 0.206916 0.320083 +v 0.232479 0.173771 0.300666 +v 0.179918 0.187500 0.253791 +v 0.166188 0.240062 0.206916 +v 0.199334 0.300666 0.187500 +v 0.246209 0.347541 0.214959 +v 0.265625 0.366958 0.281250 +v 0.246209 0.347541 0.347541 +v 0.199334 0.300666 0.375000 +v 0.152459 0.253791 0.347541 +v 0.133042 0.234375 0.281250 +v 0.152459 0.253791 0.214959 +v 0.157820 0.435930 0.214959 +v 0.110945 0.389055 0.187500 +v 0.177237 0.455346 0.281250 +v 0.157820 0.435930 0.347541 +v 0.110945 0.389055 0.375000 +v 0.064070 0.342180 0.347541 +v 0.044654 0.322763 0.281250 +v 0.064070 0.342180 0.214959 +v -0.187500 0.062500 -0.375000 +v -0.187500 -0.000000 -0.437500 +v -0.187500 -0.000000 0.437500 +v -0.187500 0.062500 0.375000 +v -0.375000 0.000000 -0.437500 +v -0.375000 0.062500 -0.375000 +v -0.375000 0.062500 0.375000 +v -0.375000 0.000000 0.437500 +v 0.187500 0.000000 0.437500 +v 0.187500 0.062500 0.375000 +v 0.187500 0.062500 -0.375000 +v 0.187500 0.000000 -0.437500 +v 0.375000 0.062500 0.375000 +v 0.375000 -0.000000 0.437500 +v 0.375000 -0.000000 -0.437500 +v 0.375000 0.062500 -0.375000 +v 0.125000 0.625000 -0.000000 +v 0.125000 0.588388 0.088388 +v 0.125000 0.500000 0.125000 +v 0.125000 0.411612 0.088388 +v 0.125000 0.375000 -0.000000 +v 0.125000 0.411612 -0.088388 +v 0.125000 0.500000 -0.125000 +v 0.125000 0.588388 -0.088388 +v 0.437500 0.687500 0.000000 +v 0.375000 0.625000 0.000000 +v 0.437500 0.632583 0.132583 +v 0.375000 0.588388 0.088388 +v 0.437500 0.500000 0.187500 +v 0.375000 0.500000 0.125000 +v 0.437500 0.367418 0.132583 +v 0.375000 0.411612 0.088388 +v 0.437500 0.312500 0.000000 +v 0.375000 0.375000 0.000000 +v 0.437500 0.367418 -0.132582 +v 0.375000 0.411612 -0.088388 +v 0.437500 0.500000 -0.187500 +v 0.375000 0.500000 -0.125000 +v 0.437500 0.632583 -0.132582 +v 0.375000 0.588388 -0.088388 +v 0.500000 0.687500 0.000000 +v 0.500000 0.632583 0.132583 +v 0.500000 0.500000 0.187500 +v 0.500000 0.367418 0.132583 +v 0.500000 0.312500 0.000000 +v 0.500000 0.367418 -0.132582 +v 0.500000 0.500000 -0.187500 +v 0.500000 0.632583 -0.132582 +v 0.281250 0.018306 0.312500 +v 0.281250 0.018306 0.187500 +v 0.325444 0.062500 0.312500 +v 0.325444 0.062500 0.187500 +v 0.016085 0.283471 0.187500 +v 0.016085 0.283471 0.312500 +v 0.060279 0.327665 0.187500 +v 0.060279 0.327665 0.312500 +v 0.250000 0.062500 0.062500 +v 0.250000 0.187500 0.062500 +v 0.250000 0.062500 -0.062500 +v 0.250000 0.187500 -0.062500 +v 0.312500 0.062500 0.062500 +v 0.312500 0.187500 0.062500 +v 0.312500 0.062500 -0.062500 +v 0.312500 0.187500 -0.062500 +v -0.281250 0.018306 0.312500 +v -0.281250 0.018306 0.187500 +v -0.325444 0.062500 0.312500 +v -0.325444 0.062500 0.187500 +v -0.016085 0.283471 0.187500 +v -0.016085 0.283471 0.312500 +v -0.060279 0.327665 0.187500 +v -0.060279 0.327665 0.312500 +v -0.250000 0.062500 0.062500 +v -0.250000 0.187500 0.062500 +v -0.250000 0.062500 -0.062500 +v -0.250000 0.187500 -0.062500 +v -0.312500 0.062500 0.062500 +v -0.312500 0.187500 0.062500 +v -0.312500 0.062500 -0.062500 +v -0.312500 0.187500 -0.062500 +v -0.125000 0.625000 0.000000 +v -0.125000 0.588388 -0.088388 +v -0.125000 0.500000 -0.125000 +v -0.125000 0.411612 -0.088388 +v -0.125000 0.375000 0.000000 +v -0.125000 0.411612 0.088388 +v -0.125000 0.500000 0.125000 +v -0.125000 0.588388 0.088388 +v -0.437500 0.687500 -0.000000 +v -0.375000 0.625000 0.000000 +v -0.437500 0.632583 -0.132583 +v -0.375000 0.588388 -0.088388 +v -0.437500 0.500000 -0.187500 +v -0.375000 0.500000 -0.125000 +v -0.437500 0.367418 -0.132583 +v -0.375000 0.411612 -0.088388 +v -0.437500 0.312500 -0.000000 +v -0.375000 0.375000 0.000000 +v -0.437500 0.367418 0.132582 +v -0.375000 0.411612 0.088388 +v -0.437500 0.500000 0.187500 +v -0.375000 0.500000 0.125000 +v -0.437500 0.632583 0.132582 +v -0.375000 0.588388 0.088388 +v -0.500000 0.687500 -0.000000 +v -0.500000 0.632583 -0.132583 +v -0.500000 0.500000 -0.187500 +v -0.500000 0.367418 -0.132583 +v -0.500000 0.312500 -0.000000 +v -0.500000 0.367418 0.132582 +v -0.500000 0.500000 0.187500 +v -0.500000 0.632583 0.132582 +v -0.199334 0.300666 -0.312500 +v -0.199334 0.300666 0.187500 +v -0.171875 0.234375 -0.312500 +v -0.171875 0.234375 0.187500 +v -0.199334 0.168084 -0.312500 +v -0.199334 0.168084 0.187500 +v -0.265625 0.140625 -0.312500 +v -0.265625 0.140625 0.187500 +v -0.331916 0.168084 -0.312500 +v -0.331916 0.168084 0.187500 +v -0.359375 0.234375 -0.312500 +v -0.359375 0.234375 0.187500 +v -0.331916 0.300666 -0.312500 +v -0.331916 0.300666 0.187500 +v -0.265625 0.328125 -0.312500 +v -0.265625 0.328125 0.187500 +v -0.199334 0.300666 0.187500 +v -0.166188 0.240062 0.206916 +v -0.179917 0.187500 0.253791 +v -0.232479 0.173771 0.300666 +v -0.293084 0.206916 0.320083 +v -0.326229 0.267521 0.300666 +v -0.312500 0.320083 0.253791 +v -0.259938 0.333812 0.206916 +v -0.199334 0.300666 0.187500 +v -0.152459 0.253791 0.214959 +v -0.133042 0.234375 0.281250 +v -0.152459 0.253791 0.347541 +v -0.199334 0.300666 0.375000 +v -0.246209 0.347541 0.347541 +v -0.265625 0.366958 0.281250 +v -0.246209 0.347541 0.214959 +v -0.064070 0.342180 0.214959 +v -0.110945 0.389055 0.187500 +v -0.044654 0.322763 0.281250 +v -0.064070 0.342180 0.347541 +v -0.110945 0.389055 0.375000 +v -0.157820 0.435930 0.347541 +v -0.177237 0.455346 0.281250 +v -0.157820 0.435930 0.214959 +vn -0.8660 0.5000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.5000 -0.8660 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.5000 -0.8660 -0.0000 +vn 0.8660 -0.5000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn 0.8660 0.5000 -0.0000 +vn 0.5000 0.8660 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.5000 0.8660 -0.0000 +vn -0.8660 -0.5000 -0.0000 +vn -0.6947 -0.0000 0.7193 +vn -0.6017 -0.3474 0.7193 +vn -0.6947 -0.0000 -0.7193 +vn -0.6017 -0.3474 -0.7193 +vn -0.3474 -0.6017 0.7193 +vn -0.3474 -0.6017 -0.7193 +vn -0.0000 -0.6947 0.7193 +vn -0.0000 -0.6947 -0.7193 +vn 0.3474 -0.6017 0.7193 +vn 0.3474 -0.6017 -0.7193 +vn 0.6017 -0.3474 0.7193 +vn 0.6017 -0.3474 -0.7193 +vn 0.6947 -0.0000 0.7193 +vn 0.6947 -0.0000 -0.7193 +vn 0.6017 0.3474 0.7193 +vn 0.6017 0.3474 -0.7193 +vn 0.3474 0.6017 0.7193 +vn 0.3474 0.6017 -0.7193 +vn -0.0000 0.6947 0.7193 +vn -0.0000 0.6947 -0.7193 +vn -0.3474 0.6017 0.7193 +vn -0.3474 0.6017 -0.7193 +vn -0.6017 0.3474 0.7193 +vn -0.6017 0.3474 -0.7193 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -0.0000 -1.0000 +vn 0.7071 0.7071 -0.0000 +vn 0.7071 -0.7071 -0.0000 +vn -0.7071 -0.7071 -0.0000 +vn -0.7071 0.7071 -0.0000 +vn -0.0000 0.7071 0.7071 +vn 0.5000 0.5000 0.7071 +vn -0.5000 0.5000 0.7071 +vn -0.5000 -0.5000 0.7071 +vn -0.7071 -0.0000 0.7071 +vn 0.5000 -0.5000 0.7071 +vn -0.0000 -0.7071 0.7071 +vn 0.7071 -0.0000 0.7071 +vn -0.0000 0.7071 -0.7071 +vn -0.7443 0.6676 -0.0183 +vn 0.0372 0.9900 -0.1363 +vn 0.7396 0.6727 0.0196 +vn 0.9891 -0.0283 0.1448 +vn 0.6947 -0.6947 0.1866 +vn 0.0283 -0.9891 0.1448 +vn -0.9900 -0.0372 -0.1363 +vn -0.7540 0.5786 -0.3109 +vn -0.6565 -0.7513 0.0671 +vn -0.6099 -0.4172 -0.6737 +vn -0.8620 -0.2090 -0.4617 +vn 0.2090 0.8620 -0.4617 +vn 0.7513 0.6565 0.0671 +vn 0.8431 0.0945 0.5294 +vn -0.6727 -0.7396 0.0196 +vn -0.0945 -0.8431 0.5294 +vn -0.6923 -0.7200 0.0473 +vn -0.3780 -0.5828 0.7194 +vn 0.7200 0.6923 0.0473 +vn 0.5828 0.3780 0.7194 +vn -0.3521 0.2915 -0.8894 +vn 0.4172 0.6099 -0.6737 +vn 0.1319 -0.1319 0.9824 +vn 0.5000 0.5000 -0.7071 +vn -0.5000 -0.5000 -0.7071 +vn -0.0000 -0.7071 -0.7071 +vn -0.7071 0.5000 0.5000 +vn -0.7071 -0.5000 0.5000 +vn -0.7071 -0.5000 -0.5000 +vn -0.7071 -0.0000 -0.7071 +vn -0.7071 0.5000 -0.5000 +vn 0.7071 0.5000 -0.5000 +vn 0.7071 -0.0000 -0.7071 +vn 0.7071 -0.5000 -0.5000 +vn 0.7071 -0.5000 0.5000 +vn 0.7071 0.5000 0.5000 +vn 0.7381 0.6747 -0.0000 +vn 0.9900 -0.0372 -0.1363 +vn -0.0283 -0.9891 0.1448 +vn -0.9891 -0.0283 0.1448 +vn -0.7396 0.6727 0.0196 +vn -0.0372 0.9900 -0.1363 +vn 0.7260 0.6130 -0.3116 +vn -0.7513 0.6565 0.0671 +vn -0.4172 0.6099 -0.6737 +vn -0.2090 0.8620 -0.4617 +vn 0.8620 -0.2090 -0.4617 +vn 0.6727 -0.7396 0.0196 +vn 0.0945 -0.8431 0.5294 +vn -0.8431 0.0945 0.5294 +vn -0.6947 -0.6947 0.1866 +vn 0.6565 -0.7513 0.0671 +vn -0.7200 0.6923 0.0473 +vn -0.5828 0.3780 0.7194 +vn 0.6923 -0.7200 0.0473 +vn 0.3780 -0.5828 0.7194 +vn 0.2914 0.3122 -0.9042 +vn 0.6099 -0.4172 -0.6737 +vn -0.1319 -0.1319 0.9824 +vn -0.5000 0.5000 -0.7071 +vn 0.5000 -0.5000 -0.7071 +vt 0.163636 0.709091 +vt 0.109091 0.781818 +vt 0.109091 0.709091 +vt 0.163636 0.927273 +vt 0.109091 1.000000 +vt 0.109091 0.927273 +vt 0.163636 0.127273 +vt 0.109091 0.200000 +vt 0.109091 0.127273 +vt 0.163636 0.200000 +vt 0.109091 0.272727 +vt 0.163636 0.272727 +vt 0.109091 0.345455 +vt 0.163636 0.345455 +vt 0.109091 0.418182 +vt 0.163636 0.418182 +vt 0.109091 0.490909 +vt 0.163636 0.490909 +vt 0.109091 0.563636 +vt 0.163636 0.563636 +vt 0.109091 0.636364 +vt 0.163636 0.636364 +vt 0.163636 0.854545 +vt 0.109091 0.854545 +vt 0.163636 0.781818 +vt 0.109091 0.781818 +vt 0.090909 0.849840 +vt 0.090909 0.786524 +vt 0.163636 0.781818 +vt 0.181818 0.849840 +vt 0.163636 0.854545 +vt 0.109091 0.927273 +vt 0.090909 0.859251 +vt 0.109091 0.854545 +vt 0.163636 0.854545 +vt 0.181818 0.922567 +vt 0.163636 0.927273 +vt 0.109091 1.000000 +vt 0.090909 0.931978 +vt 0.109091 0.927273 +vt 0.163636 0.927273 +vt 0.181818 0.995294 +vt 0.163636 1.000000 +vt 0.090909 0.131979 +vt 0.181818 0.195294 +vt 0.090909 0.204706 +vt 0.109091 0.200000 +vt 0.163636 0.200000 +vt 0.181818 0.268021 +vt 0.109091 0.272727 +vt 0.090909 0.340749 +vt 0.090909 0.277433 +vt 0.163636 0.272727 +vt 0.181818 0.340749 +vt 0.090909 0.350160 +vt 0.109091 0.345455 +vt 0.163636 0.345455 +vt 0.181818 0.413476 +vt 0.109091 0.490909 +vt 0.090909 0.422888 +vt 0.109091 0.418182 +vt 0.163636 0.418182 +vt 0.181818 0.486203 +vt 0.163636 0.490909 +vt 0.090909 0.495615 +vt 0.109091 0.490909 +vt 0.181818 0.495615 +vt 0.181818 0.558930 +vt 0.090909 0.568342 +vt 0.109091 0.563636 +vt 0.163636 0.563636 +vt 0.181818 0.631658 +vt 0.090909 0.641069 +vt 0.109091 0.636364 +vt 0.163636 0.636364 +vt 0.181818 0.704385 +vt 0.109091 0.781818 +vt 0.090909 0.713797 +vt 0.109091 0.709091 +vt 0.163636 0.709091 +vt 0.181818 0.777112 +vt 0.163636 0.781818 +vt 0.054545 0.550000 +vt 0.036364 0.504545 +vt 0.054545 0.504545 +vt 0.054545 0.768182 +vt 0.036364 0.722727 +vt 0.054545 0.722727 +vt 0.054545 0.986364 +vt 0.036364 0.940909 +vt 0.054545 0.940909 +vt 0.054545 0.186364 +vt 0.036364 0.140909 +vt 0.054545 0.140909 +vt 0.054545 0.259091 +vt 0.036364 0.213636 +vt 0.054545 0.213636 +vt 0.054545 0.331818 +vt 0.036364 0.286364 +vt 0.054545 0.286364 +vt 0.054545 0.404545 +vt 0.036364 0.359091 +vt 0.054545 0.359091 +vt 0.072727 0.427273 +vt 0.090909 0.486203 +vt 0.072727 0.481818 +vt 0.054545 0.477273 +vt 0.036364 0.431818 +vt 0.054545 0.431818 +vt 0.054545 0.622727 +vt 0.036364 0.577273 +vt 0.054545 0.577273 +vt 0.054545 0.695454 +vt 0.036364 0.650000 +vt 0.054545 0.650000 +vt 0.072727 0.790909 +vt 0.090909 0.849840 +vt 0.072727 0.845455 +vt 0.072727 0.209091 +vt 0.090909 0.268022 +vt 0.072727 0.263636 +vt 0.054545 0.913636 +vt 0.036364 0.868182 +vt 0.054545 0.868182 +vt 0.072727 0.863636 +vt 0.090909 0.922567 +vt 0.072727 0.918182 +vt 0.072727 0.554546 +vt 0.090909 0.495615 +vt 0.090909 0.558931 +vt 0.072727 0.336364 +vt 0.090909 0.277433 +vt 0.090909 0.340749 +vt 0.072727 0.990909 +vt 0.090909 0.931978 +vt 0.090909 0.995294 +vt 0.072727 0.572727 +vt 0.090909 0.631658 +vt 0.072727 0.627273 +vt 0.072727 0.354545 +vt 0.090909 0.413476 +vt 0.072727 0.409091 +vt 0.072727 0.136363 +vt 0.090909 0.195294 +vt 0.072727 0.190909 +vt 0.072727 0.700000 +vt 0.090909 0.641069 +vt 0.090909 0.704385 +vt 0.072727 0.772727 +vt 0.090909 0.713796 +vt 0.090909 0.777112 +vt 0.054545 0.795615 +vt 0.072727 0.845454 +vt 0.054545 0.840749 +vt 0.054545 0.868342 +vt 0.072727 0.918182 +vt 0.054545 0.913476 +vt 0.054545 0.941069 +vt 0.072727 0.990909 +vt 0.054545 0.986203 +vt 0.054545 0.141069 +vt 0.072727 0.190909 +vt 0.054545 0.186203 +vt 0.054545 0.213797 +vt 0.072727 0.263636 +vt 0.054545 0.258931 +vt 0.054545 0.286524 +vt 0.072727 0.336364 +vt 0.054545 0.331658 +vt 0.054545 0.359251 +vt 0.072727 0.409091 +vt 0.054545 0.404385 +vt 0.054545 0.431978 +vt 0.072727 0.481818 +vt 0.054545 0.477112 +vt 0.054545 0.504706 +vt 0.072727 0.554545 +vt 0.054545 0.549840 +vt 0.054545 0.577433 +vt 0.072727 0.627273 +vt 0.054545 0.622567 +vt 0.054545 0.650160 +vt 0.072727 0.700000 +vt 0.054545 0.695294 +vt 0.054545 0.722887 +vt 0.072727 0.772727 +vt 0.054545 0.768021 +vt 0.054545 0.840909 +vt 0.036364 0.795454 +vt 0.054545 0.795454 +vt 0.200000 0.263636 +vt 0.181818 0.204706 +vt 0.200000 0.209091 +vt 0.200000 0.772727 +vt 0.181818 0.713796 +vt 0.200000 0.718182 +vt 0.200000 0.918182 +vt 0.181818 0.859251 +vt 0.200000 0.863636 +vt 0.200000 0.554546 +vt 0.181818 0.495615 +vt 0.200000 0.500000 +vt 0.200000 0.336364 +vt 0.181818 0.277433 +vt 0.200000 0.281818 +vt 0.200000 0.990909 +vt 0.181818 0.931978 +vt 0.200000 0.936363 +vt 0.200000 0.572727 +vt 0.181818 0.631658 +vt 0.181818 0.568342 +vt 0.200000 0.354545 +vt 0.181818 0.413476 +vt 0.181818 0.350160 +vt 0.200000 0.190909 +vt 0.181818 0.131978 +vt 0.200000 0.136363 +vt 0.200000 0.700000 +vt 0.181818 0.641069 +vt 0.200000 0.645454 +vt 0.200000 0.790909 +vt 0.181818 0.849840 +vt 0.181818 0.786524 +vt 0.200000 0.481818 +vt 0.181818 0.422887 +vt 0.200000 0.427273 +vt 0.236364 0.800032 +vt 0.218182 0.840909 +vt 0.218182 0.795455 +vt 0.236364 0.909058 +vt 0.218182 0.868182 +vt 0.236364 0.872760 +vt 0.236364 0.981786 +vt 0.218182 0.940909 +vt 0.236364 0.945487 +vt 0.236364 0.145487 +vt 0.218182 0.186364 +vt 0.218182 0.140909 +vt 0.236364 0.218214 +vt 0.218182 0.259091 +vt 0.218182 0.213636 +vt 0.236364 0.327240 +vt 0.218182 0.286364 +vt 0.236364 0.290941 +vt 0.236364 0.363669 +vt 0.218182 0.404545 +vt 0.218182 0.359091 +vt 0.236364 0.472695 +vt 0.218182 0.431818 +vt 0.236364 0.436396 +vt 0.236364 0.509123 +vt 0.218182 0.550000 +vt 0.218182 0.504545 +vt 0.236364 0.618149 +vt 0.218182 0.577273 +vt 0.236364 0.581851 +vt 0.236364 0.690877 +vt 0.218182 0.650000 +vt 0.236364 0.654578 +vt 0.236364 0.763604 +vt 0.218182 0.722727 +vt 0.236364 0.727305 +vt 0.027273 0.101783 +vt 0.109091 0.054545 +vt 0.027273 0.007308 +vt 0.218182 0.840749 +vt 0.200000 0.790909 +vt 0.218182 0.795615 +vt 0.218182 0.913476 +vt 0.200000 0.863636 +vt 0.218182 0.868342 +vt 0.218182 0.986203 +vt 0.200000 0.936364 +vt 0.218182 0.941069 +vt 0.218182 0.186203 +vt 0.200000 0.136364 +vt 0.218182 0.141069 +vt 0.218182 0.258931 +vt 0.200000 0.209091 +vt 0.218182 0.213797 +vt 0.218182 0.331658 +vt 0.200000 0.281818 +vt 0.218182 0.286524 +vt 0.218182 0.404385 +vt 0.200000 0.354545 +vt 0.218182 0.359251 +vt 0.218182 0.477112 +vt 0.200000 0.427273 +vt 0.218182 0.431978 +vt 0.218182 0.549840 +vt 0.200000 0.500000 +vt 0.218182 0.504706 +vt 0.218182 0.622567 +vt 0.200000 0.572727 +vt 0.218182 0.577433 +vt 0.218182 0.695294 +vt 0.200000 0.645454 +vt 0.218182 0.650160 +vt 0.218182 0.768021 +vt 0.200000 0.718182 +vt 0.218182 0.722887 +vt 0.254545 0.804748 +vt 0.236364 0.836364 +vt 0.236364 0.800000 +vt 0.254545 0.904343 +vt 0.236364 0.872727 +vt 0.254545 0.877475 +vt 0.254545 0.977071 +vt 0.236364 0.945454 +vt 0.254545 0.950202 +vt 0.254545 0.177071 +vt 0.236364 0.145455 +vt 0.254545 0.150202 +vt 0.254545 0.249798 +vt 0.236364 0.218182 +vt 0.254545 0.222929 +vt 0.254545 0.322525 +vt 0.236364 0.290909 +vt 0.254545 0.295657 +vt 0.254545 0.395252 +vt 0.236364 0.363636 +vt 0.254545 0.368384 +vt 0.254545 0.467980 +vt 0.236364 0.436364 +vt 0.254545 0.441111 +vt 0.254545 0.540707 +vt 0.236364 0.509091 +vt 0.254545 0.513838 +vt 0.254545 0.586566 +vt 0.236364 0.618182 +vt 0.236364 0.581818 +vt 0.254545 0.686161 +vt 0.236364 0.654545 +vt 0.254545 0.659293 +vt 0.254545 0.758889 +vt 0.236364 0.727273 +vt 0.254545 0.732020 +vt 0.000000 0.807430 +vt 0.036364 0.836364 +vt 0.000000 0.828934 +vt 0.000000 0.880157 +vt 0.036364 0.909091 +vt 0.000000 0.901661 +vt 0.000000 0.974388 +vt 0.036364 0.945454 +vt 0.036364 0.981818 +vt 0.000000 0.152885 +vt 0.036364 0.181818 +vt 0.000000 0.174388 +vt 0.000000 0.225612 +vt 0.036364 0.254545 +vt 0.000000 0.247115 +vt 0.000000 0.319843 +vt 0.036364 0.290909 +vt 0.036364 0.327273 +vt 0.000000 0.371066 +vt 0.036364 0.400000 +vt 0.000000 0.392570 +vt 0.000000 0.443794 +vt 0.036364 0.472727 +vt 0.000000 0.465297 +vt 0.000000 0.516521 +vt 0.036364 0.545455 +vt 0.000000 0.538024 +vt 0.000000 0.589248 +vt 0.036364 0.618182 +vt 0.000000 0.610752 +vt 0.000000 0.661975 +vt 0.036364 0.690909 +vt 0.000000 0.683479 +vt 0.000000 0.756206 +vt 0.036364 0.727273 +vt 0.036364 0.763636 +vt 0.418182 0.472727 +vt 0.272727 0.454545 +vt 0.418182 0.454545 +vt 0.418182 0.509091 +vt 0.272727 0.490909 +vt 0.418182 0.490909 +vt 0.418182 0.436364 +vt 0.272727 0.418182 +vt 0.418182 0.418182 +vt 0.272727 0.272727 +vt 0.418182 0.290909 +vt 0.272727 0.290909 +vt 0.272727 0.309091 +vt 0.418182 0.327273 +vt 0.272727 0.327273 +vt 0.272727 0.345455 +vt 0.418182 0.363636 +vt 0.272727 0.363636 +vt 0.272727 0.236364 +vt 0.418182 0.254545 +vt 0.272727 0.254545 +vt 0.272727 0.200000 +vt 0.418182 0.218182 +vt 0.272727 0.218182 +vt 0.418182 0.400000 +vt 0.272727 0.381818 +vt 0.418182 0.381818 +vt 0.418182 0.545455 +vt 0.272727 0.527273 +vt 0.418182 0.527273 +vt 0.272727 0.781818 +vt 0.418182 0.727273 +vt 0.418182 0.781818 +vt 0.272727 0.727273 +vt 0.418182 0.672727 +vt 0.272727 0.672727 +vt 0.418182 0.618182 +vt 0.272727 0.618182 +vt 0.418182 0.563636 +vt 0.272727 1.000000 +vt 0.418182 0.945455 +vt 0.418182 1.000000 +vt 0.272727 0.945455 +vt 0.418182 0.890909 +vt 0.272727 0.836364 +vt 0.418182 0.836364 +vt 0.527273 0.309091 +vt 0.454545 0.254545 +vt 0.527273 0.254545 +vt 0.454545 0.145455 +vt 0.527273 0.090909 +vt 0.527273 0.145455 +vt 0.454545 0.090909 +vt 0.527273 0.036364 +vt 0.454545 0.472727 +vt 0.527273 0.418182 +vt 0.527273 0.472727 +vt 0.454545 0.363636 +vt 0.527273 0.363636 +vt 0.454545 0.309091 +vt 0.527273 0.200000 +vt 0.454545 0.200000 +vt 0.669608 0.348574 +vt 0.566756 0.348574 +vt 0.566756 0.451426 +vt 0.454545 0.254545 +vt 0.436364 0.206818 +vt 0.454545 0.200000 +vt 0.400000 0.127273 +vt 0.345455 0.072727 +vt 0.290909 0.127273 +vt 0.454545 0.309091 +vt 0.436364 0.261364 +vt 0.454545 0.418182 +vt 0.436364 0.370455 +vt 0.454545 0.363636 +vt 0.436364 0.043182 +vt 0.454545 0.036364 +vt 0.436364 0.152273 +vt 0.436364 0.315909 +vt 0.454545 0.472727 +vt 0.436364 0.425000 +vt 0.436364 0.138636 +vt 0.436364 0.097727 +vt 0.254545 0.109091 +vt 0.200000 0.054545 +vt 0.254545 0.054545 +vt 0.272727 0.036364 +vt 0.181818 0.000000 +vt 0.418182 0.036364 +vt 0.345455 0.054545 +vt 0.327273 0.000000 +vt 0.327273 0.036364 +vt 0.272727 0.000000 +vt 0.272727 0.054545 +vt 0.327273 0.054545 +vt 0.127273 0.054545 +vt 0.181818 0.036364 +vt 0.181818 0.054545 +vt 0.127273 -0.000000 +vt 0.800000 0.890909 +vt 0.781818 0.745455 +vt 0.800000 0.745455 +vt 0.781818 0.890909 +vt 0.763636 0.745455 +vt 0.763636 0.890909 +vt 0.745455 0.745455 +vt 0.745455 0.890909 +vt 0.727273 0.745455 +vt 0.727273 0.890909 +vt 0.709091 0.745455 +vt 0.709091 0.890909 +vt 0.690909 0.745455 +vt 0.672725 0.906324 +vt 0.654546 0.909110 +vt 0.654544 0.909090 +vt 0.672727 0.890909 +vt 0.672727 0.745455 +vt 0.654545 0.890909 +vt 0.654545 0.745455 +vt 0.690910 0.936010 +vt 0.672729 0.948222 +vt 0.672729 0.942689 +vt 0.799998 0.909091 +vt 0.781817 0.911857 +vt 0.781817 0.906324 +vt 0.745453 0.892967 +vt 0.763635 0.918536 +vt 0.745453 0.925215 +vt 0.709090 0.892966 +vt 0.690908 0.918536 +vt 0.690908 0.899645 +vt 0.727271 0.890909 +vt 0.727271 0.927273 +vt 0.672725 0.911857 +vt 0.763635 0.899646 +vt 0.727273 0.890908 +vt 0.709090 0.925215 +vt 0.690909 0.963636 +vt 0.709091 1.000000 +vt 0.690909 1.000000 +vt 0.727273 0.927274 +vt 0.709091 0.961579 +vt 0.709091 0.929332 +vt 0.745453 0.929330 +vt 0.763635 0.954900 +vt 0.745453 0.961578 +vt 0.781817 0.942688 +vt 0.799998 0.945455 +vt 0.781817 0.948221 +vt 0.654549 0.945455 +vt 0.654544 0.945437 +vt 0.690910 0.954900 +vt 0.727271 0.963636 +vt 0.727271 0.927273 +vt 0.763635 0.936009 +vt 0.727273 0.963636 +vt 0.745455 1.000000 +vt 0.727273 1.000000 +vt 0.763636 0.963636 +vt 0.781818 1.000000 +vt 0.763636 1.000000 +vt 0.672727 1.000000 +vt 0.672727 0.963636 +vt 0.709091 0.963636 +vt 0.745455 0.963636 +vt 0.800000 0.963636 +vt 0.781818 0.963636 +vt 0.654545 1.000000 +vt 0.654545 0.963636 +vt 0.618182 0.763636 +vt 0.636364 1.000000 +vt 0.618182 0.981818 +vt 0.563636 0.763636 +vt 0.618182 0.745455 +vt 0.563636 1.000000 +vt 0.563636 0.981818 +vt 0.563636 0.490909 +vt 0.618182 0.490909 +vt 0.545455 0.745455 +vt 0.545455 1.000000 +vt 0.436364 0.745455 +vt 0.454545 0.981818 +vt 0.436364 1.000000 +vt 0.509091 0.763636 +vt 0.509091 0.981818 +vt 0.509091 0.745455 +vt 0.454545 0.490909 +vt 0.509091 0.490909 +vt 0.454545 1.000000 +vt 0.454545 0.745455 +vt 0.527273 1.000000 +vt 0.763636 0.563636 +vt 0.736364 0.490909 +vt 0.763636 0.490909 +vt 0.736364 0.563636 +vt 0.709091 0.490909 +vt 0.681818 0.563636 +vt 0.681818 0.490909 +vt 0.654545 0.490909 +vt 0.872727 0.490909 +vt 0.845455 0.563636 +vt 0.845455 0.490909 +vt 0.818182 0.563636 +vt 0.818182 0.490909 +vt 0.790909 0.490909 +vt 0.790909 0.563636 +vt 0.800000 0.581818 +vt 0.769697 0.600000 +vt 0.763636 0.581818 +vt 0.733333 0.600000 +vt 0.727273 0.581818 +vt 0.721212 0.600000 +vt 0.690909 0.581818 +vt 0.684848 0.600000 +vt 0.654545 0.581818 +vt 0.939394 0.600000 +vt 0.909091 0.581818 +vt 0.945455 0.581818 +vt 0.878788 0.600000 +vt 0.872727 0.581818 +vt 0.842424 0.600000 +vt 0.836364 0.581818 +vt 0.806061 0.600000 +vt 0.690909 0.563636 +vt 0.872727 0.563636 +vt 0.727273 0.563636 +vt 0.763636 0.563636 +vt 0.909091 0.563636 +vt 0.945455 0.563636 +vt 0.836364 0.563636 +vt 0.800000 0.563636 +vt 0.802206 0.379612 +vt 0.725067 0.379612 +vt 0.725067 0.456751 +vt 0.600000 0.218182 +vt 0.563636 0.109091 +vt 0.600000 0.109091 +vt 0.654545 0.218182 +vt 0.618182 0.109091 +vt 0.654545 0.109091 +vt 0.563636 0.218182 +vt 0.545455 0.109091 +vt 0.654545 0.309091 +vt 0.618182 0.272727 +vt 0.654545 0.272727 +vt 0.618182 0.309091 +vt 0.600000 0.272727 +vt 0.600000 0.309091 +vt 0.563636 0.272727 +vt 0.563636 0.309091 +vt 0.545455 0.272727 +vt 0.563636 0.000000 +vt 0.600000 0.000000 +vt 0.618182 0.000000 +vt 0.654545 0.000000 +vt 0.545455 0.000000 +vt 0.618182 0.236364 +vt 0.654545 0.236364 +vt 0.600000 0.236364 +vt 0.563636 0.236364 +vt 0.545455 0.236364 +vt 0.763636 0.690909 +vt 0.736364 0.618182 +vt 0.763636 0.618182 +vt 0.736364 0.690909 +vt 0.709091 0.618182 +vt 0.709091 0.690909 +vt 0.681818 0.618182 +vt 0.681818 0.690909 +vt 0.654545 0.618182 +vt 0.872727 0.618182 +vt 0.845455 0.690909 +vt 0.845455 0.618182 +vt 0.818182 0.618182 +vt 0.818182 0.690909 +vt 0.790909 0.618182 +vt 0.790909 0.690909 +vt 0.800000 0.709091 +vt 0.769697 0.727273 +vt 0.763636 0.709091 +vt 0.733333 0.727273 +vt 0.727273 0.709091 +vt 0.721212 0.727273 +vt 0.690909 0.709091 +vt 0.684848 0.727273 +vt 0.654545 0.709091 +vt 0.939394 0.727273 +vt 0.909091 0.709091 +vt 0.945455 0.709091 +vt 0.903030 0.727273 +vt 0.872727 0.709091 +vt 0.842424 0.727273 +vt 0.836364 0.709091 +vt 0.806061 0.727273 +vt 0.690909 0.690909 +vt 0.872727 0.690909 +vt 0.763636 0.690909 +vt 0.945455 0.690909 +vt 0.800000 0.690909 +vt 0.836364 0.690909 +vt 0.727273 0.690909 +vt 0.909091 0.690909 +vt 0.929479 0.379612 +vt 0.852340 0.379612 +vt 0.852340 0.456751 +vt 0.963636 0.890909 +vt 0.945455 0.745455 +vt 0.963636 0.745455 +vt 0.945455 0.890909 +vt 0.927273 0.745455 +vt 0.909091 0.890909 +vt 0.909091 0.745455 +vt 0.890909 0.745455 +vt 0.872727 0.890909 +vt 0.872727 0.745455 +vt 0.854545 0.890909 +vt 0.854545 0.745455 +vt 0.836362 0.906324 +vt 0.818183 0.909110 +vt 0.818180 0.909090 +vt 0.836364 0.745455 +vt 0.836364 0.890909 +vt 0.818182 0.745455 +vt 0.854547 0.936010 +vt 0.836365 0.948222 +vt 0.836365 0.942689 +vt 0.945453 0.906324 +vt 0.963637 0.909110 +vt 0.945453 0.911857 +vt 0.927271 0.899646 +vt 0.909090 0.925215 +vt 0.909090 0.892967 +vt 0.854544 0.899645 +vt 0.872727 0.925215 +vt 0.854544 0.918536 +vt 0.890908 0.927273 +vt 0.890908 0.890909 +vt 0.836362 0.911857 +vt 0.927271 0.918536 +vt 0.890909 0.890908 +vt 0.872727 0.892966 +vt 0.854545 0.963636 +vt 0.872727 1.000000 +vt 0.854545 1.000000 +vt 0.890909 0.927274 +vt 0.872728 0.961579 +vt 0.872728 0.929332 +vt 0.909090 0.929330 +vt 0.927271 0.954900 +vt 0.909090 0.961578 +vt 0.945453 0.942688 +vt 0.963634 0.945455 +vt 0.945453 0.948221 +vt 0.818185 0.945455 +vt 0.818180 0.945437 +vt 0.854547 0.954900 +vt 0.890908 0.963636 +vt 0.890908 0.927273 +vt 0.927271 0.936009 +vt 0.890909 0.963636 +vt 0.909091 1.000000 +vt 0.890909 1.000000 +vt 0.945455 0.963636 +vt 0.927273 1.000000 +vt 0.927273 0.963636 +vt 0.836364 1.000000 +vt 0.836364 0.963636 +vt 0.872727 0.963636 +vt 0.909091 0.963636 +vt 0.963636 0.963636 +vt 0.945455 1.000000 +vt 0.818182 1.000000 +vt 0.818182 0.963636 +vt 0.163636 1.000000 +vt 0.109091 0.854545 +vt 0.181818 0.786524 +vt 0.090909 0.922567 +vt 0.181818 0.859251 +vt 0.090909 0.995294 +vt 0.181818 0.931978 +vt 0.090909 0.195294 +vt 0.181818 0.131979 +vt 0.090909 0.268021 +vt 0.181818 0.204706 +vt 0.181818 0.277433 +vt 0.090909 0.413476 +vt 0.181818 0.350160 +vt 0.090909 0.486203 +vt 0.181818 0.422888 +vt 0.090909 0.558930 +vt 0.163636 0.490909 +vt 0.090909 0.631658 +vt 0.181818 0.568342 +vt 0.090909 0.704385 +vt 0.181818 0.641069 +vt 0.090909 0.777112 +vt 0.181818 0.713797 +vt 0.036364 0.550000 +vt 0.036364 0.768182 +vt 0.036364 0.986364 +vt 0.036364 0.186364 +vt 0.036364 0.259091 +vt 0.036364 0.331818 +vt 0.036364 0.404545 +vt 0.090909 0.422887 +vt 0.036364 0.477273 +vt 0.036364 0.622727 +vt 0.036364 0.695454 +vt 0.090909 0.786524 +vt 0.090909 0.204706 +vt 0.036364 0.913636 +vt 0.090909 0.859251 +vt 0.072727 0.500000 +vt 0.072727 0.281818 +vt 0.072727 0.936363 +vt 0.090909 0.568342 +vt 0.090909 0.350160 +vt 0.090909 0.131978 +vt 0.072727 0.645454 +vt 0.072727 0.718182 +vt 0.072727 0.790909 +vt 0.072727 0.863636 +vt 0.072727 0.936364 +vt 0.072727 0.136364 +vt 0.072727 0.209091 +vt 0.072727 0.281818 +vt 0.072727 0.354545 +vt 0.072727 0.427273 +vt 0.072727 0.500000 +vt 0.072727 0.572727 +vt 0.072727 0.645454 +vt 0.072727 0.718182 +vt 0.036364 0.840909 +vt 0.181818 0.268022 +vt 0.181818 0.777112 +vt 0.181818 0.922567 +vt 0.181818 0.558931 +vt 0.181818 0.340749 +vt 0.181818 0.995294 +vt 0.200000 0.627273 +vt 0.200000 0.409091 +vt 0.181818 0.195294 +vt 0.181818 0.704385 +vt 0.200000 0.845455 +vt 0.181818 0.486203 +vt 0.236364 0.836331 +vt 0.218182 0.913636 +vt 0.218182 0.986364 +vt 0.236364 0.181786 +vt 0.236364 0.254513 +vt 0.218182 0.331818 +vt 0.236364 0.399968 +vt 0.218182 0.477273 +vt 0.236364 0.545422 +vt 0.218182 0.622727 +vt 0.218182 0.695454 +vt 0.218182 0.768182 +vt 0.007308 0.027273 +vt 0.000000 0.054545 +vt 0.007308 0.081818 +vt 0.054545 0.109091 +vt 0.081818 0.101783 +vt 0.101783 0.081818 +vt 0.101783 0.027273 +vt 0.081818 0.007308 +vt 0.054546 0.000000 +vt 0.200000 0.845454 +vt 0.200000 0.918182 +vt 0.200000 0.990909 +vt 0.200000 0.190909 +vt 0.200000 0.263636 +vt 0.200000 0.336364 +vt 0.200000 0.481818 +vt 0.200000 0.554545 +vt 0.200000 0.627273 +vt 0.200000 0.700000 +vt 0.200000 0.772727 +vt 0.254545 0.831616 +vt 0.236364 0.909091 +vt 0.236364 0.981818 +vt 0.236364 0.181818 +vt 0.236364 0.254545 +vt 0.236364 0.327273 +vt 0.236364 0.400000 +vt 0.236364 0.472727 +vt 0.236364 0.545455 +vt 0.254545 0.613434 +vt 0.236364 0.690909 +vt 0.236364 0.763636 +vt 0.036364 0.800000 +vt 0.036364 0.872727 +vt 0.000000 0.952884 +vt 0.036364 0.145455 +vt 0.036364 0.218182 +vt 0.000000 0.298339 +vt 0.036364 0.363636 +vt 0.036364 0.436364 +vt 0.036364 0.509091 +vt 0.036364 0.581818 +vt 0.036364 0.654545 +vt 0.000000 0.734703 +vt 0.272727 0.472727 +vt 0.272727 0.509091 +vt 0.272727 0.436364 +vt 0.418182 0.272727 +vt 0.418182 0.309091 +vt 0.418182 0.345455 +vt 0.418182 0.236364 +vt 0.418182 0.200000 +vt 0.272727 0.400000 +vt 0.272727 0.545455 +vt 0.272727 0.563636 +vt 0.272727 0.890909 +vt 0.454545 0.418182 +vt 0.618182 0.472727 +vt 0.669608 0.451426 +vt 0.690909 0.400000 +vt 0.618182 0.327273 +vt 0.545455 0.400000 +vt 0.436364 0.247727 +vt 0.306885 0.165842 +vt 0.345455 0.181818 +vt 0.384024 0.165842 +vt 0.384024 0.088703 +vt 0.306885 0.088703 +vt 0.436364 0.302273 +vt 0.436364 0.411364 +vt 0.436364 0.084091 +vt 0.436364 0.193182 +vt 0.436364 0.356818 +vt 0.436364 0.465909 +vt 0.200000 0.109091 +vt 0.418182 0.000000 +vt 0.400000 0.054545 +vt 0.127273 0.036364 +vt 0.690909 0.890909 +vt 0.800000 0.909110 +vt 0.727273 0.927273 +vt 0.727273 0.963636 +vt 0.800000 0.945436 +vt 0.800000 1.000000 +vt 0.636364 0.745455 +vt 0.563636 0.745455 +vt 0.618182 1.000000 +vt 0.454545 0.763636 +vt 0.509091 1.000000 +vt 0.527273 0.745455 +vt 0.709091 0.563636 +vt 0.654545 0.563636 +vt 0.872727 0.563636 +vt 0.793939 0.600000 +vt 0.757576 0.600000 +vt 0.696970 0.600000 +vt 0.660606 0.600000 +vt 0.915152 0.600000 +vt 0.903030 0.600000 +vt 0.866667 0.600000 +vt 0.830303 0.600000 +vt 0.763636 0.472727 +vt 0.802206 0.456751 +vt 0.818182 0.418182 +vt 0.763636 0.363636 +vt 0.709091 0.418182 +vt 0.618182 0.218182 +vt 0.545455 0.218182 +vt 0.545455 0.309091 +vt 0.654545 0.690909 +vt 0.872727 0.690909 +vt 0.793939 0.727273 +vt 0.757576 0.727273 +vt 0.696970 0.727273 +vt 0.660606 0.727273 +vt 0.915152 0.727273 +vt 0.878788 0.727273 +vt 0.866667 0.727273 +vt 0.830303 0.727273 +vt 0.890909 0.472727 +vt 0.929479 0.456751 +vt 0.945454 0.418182 +vt 0.890909 0.363636 +vt 0.836364 0.418182 +vt 0.927273 0.890909 +vt 0.890909 0.890909 +vt 0.818182 0.890909 +vt 0.963634 0.909091 +vt 0.890909 0.927273 +vt 0.890909 0.963636 +vt 0.963637 0.945436 +vt 0.963636 1.000000 +s 1 +usemtl Texture +f 24/1/1 1/2/2 23/3/1 +f 6/4/3 7/5/4 5/6/3 +f 8/7/4 9/8/5 7/9/4 +f 10/10/5 11/11/6 9/8/5 +f 12/12/6 13/13/7 11/11/6 +f 14/14/7 15/15/8 13/13/7 +f 16/16/8 17/17/9 15/15/8 +f 18/18/9 19/19/10 17/17/9 +f 20/20/10 21/21/11 19/19/10 +f 22/22/11 23/3/1 21/21/11 +f 4/23/12 5/6/3 3/24/12 +f 2/25/2 3/24/12 1/2/2 +f 1/26/13 25/27/14 26/28/13 +f 2/29/15 74/30/16 4/31/16 +f 5/32/17 25/33/14 3/34/14 +f 4/35/16 75/36/18 6/37/18 +f 7/38/19 27/39/17 5/40/17 +f 6/41/18 76/42/20 8/43/20 +f 9/8/21 28/44/19 7/9/19 +f 8/7/20 77/45/22 10/10/22 +f 11/11/23 29/46/21 9/47/21 +f 10/48/22 78/49/24 12/12/24 +f 11/50/23 31/51/25 30/52/23 +f 12/53/24 79/54/26 14/14/26 +f 15/15/27 31/55/25 13/56/25 +f 14/57/26 80/58/28 16/16/28 +f 17/59/29 32/60/27 15/61/27 +f 16/62/28 81/63/30 18/64/30 +f 19/19/31 33/65/29 17/66/29 +f 20/20/32 81/67/30 82/68/32 +f 21/21/33 34/69/31 19/70/31 +f 20/71/32 83/72/34 22/22/34 +f 23/3/35 35/73/33 21/74/33 +f 22/75/34 84/76/36 24/1/36 +f 1/77/13 36/78/35 23/79/35 +f 24/80/36 73/81/15 2/82/15 +f 68/83/4 141/84/3 66/85/3 +f 49/86/7 144/87/6 72/88/6 +f 56/89/10 135/90/9 54/91/9 +f 58/92/11 136/93/10 56/94/10 +f 60/95/1 137/96/11 58/97/11 +f 62/98/2 138/99/1 60/100/1 +f 64/101/12 139/102/2 62/103/2 +f 63/104/37 33/105/37 65/106/37 +f 66/107/3 140/108/12 64/109/12 +f 70/110/5 142/111/4 68/112/4 +f 72/113/6 143/114/5 70/115/5 +f 50/116/37 25/117/37 51/118/37 +f 57/119/37 30/120/37 59/121/37 +f 54/122/9 133/123/8 52/124/8 +f 51/125/37 27/126/37 53/127/37 +f 67/128/37 33/129/37 34/130/37 +f 61/131/37 30/132/37 31/133/37 +f 55/134/37 27/135/37 28/136/37 +f 67/137/37 35/138/37 69/139/37 +f 61/140/37 32/141/37 63/142/37 +f 55/143/37 29/144/37 57/145/37 +f 71/146/37 35/147/37 36/148/37 +f 50/149/37 36/150/37 26/151/37 +f 49/152/25 51/153/27 52/154/27 +f 52/155/27 53/156/29 54/157/29 +f 54/158/29 55/159/31 56/160/31 +f 56/161/31 57/162/33 58/163/33 +f 58/164/33 59/165/35 60/166/35 +f 60/167/35 61/168/13 62/169/13 +f 62/170/13 63/171/14 64/172/14 +f 64/173/14 65/174/17 66/175/17 +f 66/176/17 67/177/19 68/178/19 +f 68/179/19 69/180/21 70/181/21 +f 70/182/21 71/183/23 72/184/23 +f 72/185/23 50/186/25 49/187/25 +f 52/188/8 134/189/7 49/190/7 +f 96/191/38 77/192/38 94/193/38 +f 85/194/38 84/195/38 108/196/38 +f 90/197/38 74/198/38 88/199/38 +f 104/200/38 81/201/38 102/202/38 +f 98/203/38 78/204/38 96/205/38 +f 92/206/38 75/207/38 90/208/38 +f 104/209/38 83/210/38 82/211/38 +f 98/212/38 80/213/38 79/214/38 +f 94/215/38 76/216/38 92/217/38 +f 108/218/38 83/219/38 106/220/38 +f 85/221/38 74/222/38 73/223/38 +f 102/224/38 80/225/38 100/226/38 +f 109/227/38 87/228/38 86/229/38 +f 114/230/38 87/231/38 112/232/38 +f 116/233/38 89/234/38 114/235/38 +f 116/236/38 93/237/38 91/238/38 +f 118/239/38 95/240/38 93/241/38 +f 122/242/38 95/243/38 120/244/38 +f 122/245/38 99/246/38 97/247/38 +f 126/248/38 99/249/38 124/250/38 +f 126/251/38 103/252/38 101/253/38 +f 130/254/38 103/255/38 128/256/38 +f 132/257/38 105/258/38 130/259/38 +f 109/260/38 107/261/38 132/262/38 +f 129/263/38 121/264/38 113/265/38 +f 87/266/28 85/267/26 86/268/26 +f 89/269/30 88/270/28 87/271/28 +f 91/272/32 90/273/30 89/274/30 +f 93/275/34 92/276/32 91/277/32 +f 95/278/36 94/279/34 93/280/34 +f 97/281/15 96/282/36 95/283/36 +f 99/284/16 98/285/15 97/286/15 +f 101/287/18 100/288/16 99/289/16 +f 103/290/20 102/291/18 101/292/18 +f 105/293/22 104/294/20 103/295/20 +f 107/296/24 106/297/22 105/298/22 +f 86/299/26 108/300/24 107/301/24 +f 110/302/15 112/303/16 109/304/15 +f 113/305/18 112/306/16 111/307/16 +f 115/308/20 114/309/18 113/310/18 +f 117/311/22 116/312/20 115/313/20 +f 119/314/24 118/315/22 117/316/22 +f 121/317/26 120/318/24 119/319/24 +f 123/320/28 122/321/26 121/322/26 +f 125/323/30 124/324/28 123/325/28 +f 127/326/32 126/327/30 125/328/30 +f 127/329/32 130/330/34 128/331/32 +f 131/332/36 130/333/34 129/334/34 +f 110/335/15 132/336/36 131/337/36 +f 38/338/37 133/339/37 37/340/37 +f 37/341/37 135/342/37 39/343/37 +f 40/344/37 135/345/37 136/346/37 +f 40/347/37 137/348/37 41/349/37 +f 41/350/37 138/351/37 42/352/37 +f 43/353/37 138/354/37 139/355/37 +f 43/356/37 140/357/37 44/358/37 +f 44/359/37 141/360/37 45/361/37 +f 45/362/37 142/363/37 46/364/37 +f 46/365/37 143/366/37 47/367/37 +f 47/368/37 144/369/37 48/370/37 +f 38/371/37 144/372/37 134/373/37 +s 0 +f 146/374/10 147/375/10 145/376/10 +f 150/377/10 151/378/10 149/379/10 +f 154/380/10 155/381/10 153/382/10 +f 158/383/10 159/384/10 157/385/10 +f 162/386/10 163/387/10 161/388/10 +f 167/389/10 166/390/10 168/391/10 +f 170/392/10 171/393/10 169/394/10 +f 175/395/10 174/396/10 176/397/10 +f 178/398/10 179/399/10 177/400/10 +f 182/401/10 183/402/10 181/403/10 +s 1 +f 186/404/10 187/405/39 185/406/10 +f 188/407/39 189/408/7 187/405/39 +f 190/409/7 191/410/40 189/408/7 +f 192/411/40 193/412/4 191/410/40 +f 194/413/4 195/414/41 193/415/4 +f 196/416/41 197/417/2 195/414/41 +f 197/417/2 200/418/42 199/419/42 +f 200/418/42 185/406/10 199/419/42 +f 208/420/42 209/421/10 201/422/10 +f 211/423/7 204/424/40 203/425/7 +f 212/426/40 205/427/4 204/424/40 +f 213/428/4 206/429/41 205/430/4 +f 206/429/41 215/431/2 207/432/2 +f 207/432/2 216/433/42 208/420/42 +f 209/421/10 202/434/39 201/422/10 +f 210/435/39 203/425/7 202/434/39 +f 204/436/38 206/437/38 208/438/38 +f 209/439/43 217/440/44 210/441/44 +f 223/442/37 221/443/37 219/444/37 +f 216/445/45 218/446/43 209/439/43 +f 214/447/46 223/448/47 215/449/47 +f 212/426/48 221/450/49 213/451/49 +f 210/441/44 219/452/50 211/423/50 +f 215/449/47 224/453/45 216/445/45 +f 213/454/49 222/455/46 214/447/46 +f 212/426/48 219/456/50 220/457/48 +s 0 +f 231/458/10 233/459/10 236/460/10 +f 235/461/7 233/459/7 227/462/7 +f 229/463/2 231/464/2 226/465/2 +f 232/466/38 228/467/38 226/465/38 +f 236/468/51 232/466/51 231/469/51 +f 230/470/43 234/471/43 233/472/43 +f 234/471/37 225/473/37 227/462/37 +s 1 +f 238/474/52 239/475/10 237/476/42 +f 240/477/53 241/478/39 239/475/10 +f 242/479/54 243/480/7 241/478/39 +f 244/481/55 245/482/40 243/480/7 +f 246/483/56 247/484/4 245/482/40 +f 248/485/57 249/486/41 247/484/4 +f 252/487/58 253/488/59 238/489/52 +f 249/486/41 252/490/58 251/491/2 +f 251/491/2 238/492/52 237/493/42 +f 259/494/60 268/495/61 260/496/62 +f 238/497/52 254/498/63 240/499/53 +f 244/500/55 255/501/64 256/502/65 +f 248/503/57 259/504/60 250/505/66 +f 246/506/56 256/502/65 257/507/48 +f 252/487/58 259/504/60 260/508/62 +f 240/499/53 255/501/64 242/509/54 +f 246/510/56 258/511/67 248/503/57 +f 267/512/68 274/513/46 275/514/41 +f 257/515/48 266/516/69 258/517/67 +f 256/518/65 263/519/70 264/520/71 +f 254/521/63 261/522/72 262/523/73 +f 260/496/62 261/524/72 253/525/59 +f 259/494/60 266/516/69 267/526/68 +f 256/518/65 265/527/74 257/528/48 +f 255/529/64 262/523/73 263/519/70 +f 265/530/74 272/531/44 273/532/37 +f 263/533/70 269/534/75 271/535/39 +f 267/512/68 276/536/76 268/537/61 +f 265/530/74 274/513/46 266/538/69 +f 263/533/70 272/531/44 264/539/71 +f 261/540/72 269/534/75 262/541/73 +f 268/537/61 270/542/38 261/543/72 +s 0 +f 280/544/7 278/545/7 277/546/7 +f 283/547/43 279/548/43 280/544/43 +f 277/546/51 281/549/51 282/550/51 +f 279/548/4 281/551/4 278/552/4 +f 282/550/10 280/544/10 277/546/10 +f 284/553/2 282/550/2 281/554/2 +f 285/555/2 287/556/2 288/557/2 +f 287/556/10 289/558/10 292/559/10 +f 290/560/4 288/561/4 291/562/4 +f 292/559/51 288/563/51 287/556/51 +f 289/558/43 285/564/43 290/560/43 +f 289/558/7 291/565/7 292/559/7 +s 1 +f 293/566/10 304/567/43 302/568/10 +f 294/569/43 306/570/37 304/567/43 +f 306/570/37 296/571/49 308/572/49 +f 296/571/49 310/573/4 308/572/49 +f 310/574/4 298/575/77 312/576/77 +f 312/576/77 299/577/38 314/578/38 +f 299/577/38 316/579/51 314/578/38 +f 300/580/51 302/568/10 316/579/51 +f 301/581/42 304/582/78 303/583/78 +f 303/583/78 306/584/47 305/585/47 +f 306/586/47 307/587/79 305/585/47 +f 308/588/79 309/589/41 307/587/79 +f 310/590/41 311/591/80 309/592/41 +f 311/591/80 314/593/81 313/594/81 +f 313/594/81 316/595/82 315/596/82 +f 315/596/82 302/597/42 301/581/42 +f 309/589/4 320/598/49 307/587/49 +f 315/596/51 323/599/38 313/594/38 +f 303/583/43 319/600/37 318/601/43 +f 309/592/4 322/602/77 321/603/4 +f 301/581/10 324/604/51 315/596/51 +f 303/583/43 317/605/10 301/581/10 +f 307/587/49 319/600/37 305/585/37 +f 313/594/38 322/602/77 311/591/77 +f 320/606/7 322/607/7 324/608/7 +s 0 +f 331/609/39 327/610/39 328/611/39 +f 330/612/41 326/613/41 325/614/41 +f 332/615/37 325/616/37 327/610/37 +f 326/613/38 331/609/38 328/611/38 +f 334/617/2 335/618/2 333/619/2 +f 336/620/38 339/621/38 335/618/38 +f 340/622/7 337/623/7 339/621/7 +f 338/624/37 333/625/37 337/623/37 +f 343/626/42 347/611/42 344/627/42 +f 342/628/40 346/614/40 341/629/40 +f 341/630/37 348/610/37 343/626/37 +f 344/627/38 345/613/38 342/628/38 +f 351/631/7 350/619/7 349/632/7 +f 355/633/38 352/618/38 351/631/38 +f 353/634/2 356/621/2 355/633/2 +f 349/635/37 354/623/37 353/634/37 +s 1 +f 357/636/10 368/637/51 366/638/10 +f 358/639/51 370/640/38 368/637/51 +f 359/641/38 372/642/77 370/640/38 +f 360/643/77 374/644/4 372/642/77 +f 374/645/4 362/646/49 376/647/49 +f 362/646/49 378/648/37 376/647/49 +f 363/649/37 380/650/43 378/648/37 +f 364/651/43 366/638/10 380/650/43 +f 365/652/39 368/653/83 367/654/83 +f 367/654/83 370/655/84 369/656/84 +f 370/657/84 371/658/85 369/656/84 +f 372/659/85 373/660/40 371/658/85 +f 374/661/40 375/662/86 373/663/40 +f 376/664/86 377/665/50 375/662/86 +f 377/665/50 380/666/87 379/667/87 +f 379/667/87 366/668/39 365/652/39 +f 373/660/4 384/669/77 371/658/77 +f 379/667/43 387/670/37 377/665/37 +f 369/656/38 382/671/51 367/654/51 +f 375/662/49 385/672/4 373/663/4 +f 379/667/43 381/673/10 388/674/43 +f 367/654/51 381/673/10 365/652/10 +f 371/658/77 383/675/38 369/656/38 +f 375/662/49 387/670/37 386/676/49 +f 384/677/2 386/678/2 388/679/2 +f 390/680/88 391/681/7 389/682/39 +f 392/683/89 393/684/40 391/681/7 +f 393/684/40 396/685/90 395/686/4 +f 396/685/90 397/687/41 395/686/4 +f 397/687/41 400/688/91 399/689/2 +f 399/689/2 402/690/92 401/691/42 +f 404/692/93 405/693/94 390/694/88 +f 402/690/92 403/695/10 401/691/42 +f 404/696/93 389/697/39 403/695/10 +f 411/698/95 420/699/96 412/700/97 +f 392/701/89 405/702/94 406/703/98 +f 394/704/99 408/705/100 396/706/90 +f 402/707/92 410/708/101 411/709/95 +f 396/706/90 409/710/46 398/711/102 +f 402/707/92 412/712/97 404/692/93 +f 392/701/89 407/713/103 394/704/99 +f 398/714/102 410/708/101 400/715/91 +f 419/716/104 426/717/45 427/718/42 +f 409/719/46 418/720/105 410/721/101 +f 408/722/100 415/723/106 416/724/107 +f 406/725/98 413/726/108 414/727/109 +f 412/700/97 413/728/108 405/729/94 +f 411/698/95 418/720/105 419/730/104 +f 408/722/100 417/731/110 409/732/46 +f 407/733/103 414/727/109 415/723/106 +f 417/734/110 424/735/48 425/736/37 +f 414/737/109 423/738/40 415/739/106 +f 419/716/104 428/740/111 420/741/96 +f 417/734/110 426/717/45 418/742/105 +f 415/739/106 424/735/48 416/743/107 +f 413/744/108 421/745/112 414/737/109 +f 420/741/96 422/746/38 413/747/108 +f 24/1/1 2/25/2 1/2/2 +f 6/4/3 8/748/4 7/5/4 +f 8/7/4 10/10/5 9/8/5 +f 10/10/5 12/12/6 11/11/6 +f 12/12/6 14/14/7 13/13/7 +f 14/14/7 16/16/8 15/15/8 +f 16/16/8 18/18/9 17/17/9 +f 18/18/9 20/20/10 19/19/10 +f 20/20/10 22/22/11 21/21/11 +f 22/22/11 24/1/1 23/3/1 +f 4/23/12 6/4/3 5/6/3 +f 2/25/2 4/23/12 3/24/12 +f 1/26/13 3/749/14 25/27/14 +f 2/29/15 73/750/15 74/30/16 +f 5/32/17 27/751/17 25/33/14 +f 4/35/16 74/752/16 75/36/18 +f 7/38/19 28/753/19 27/39/17 +f 6/41/18 75/754/18 76/42/20 +f 9/8/21 29/755/21 28/44/19 +f 8/7/20 76/756/20 77/45/22 +f 11/11/23 30/757/23 29/46/21 +f 10/48/22 77/758/22 78/49/24 +f 11/50/23 13/13/25 31/51/25 +f 12/53/24 78/759/24 79/54/26 +f 15/15/27 32/760/27 31/55/25 +f 14/57/26 79/761/26 80/58/28 +f 17/59/29 33/762/29 32/60/27 +f 16/62/28 80/763/28 81/63/30 +f 19/19/31 34/764/31 33/65/29 +f 20/20/32 18/765/30 81/67/30 +f 21/21/33 35/766/33 34/69/31 +f 20/71/32 82/767/32 83/72/34 +f 23/3/35 36/768/35 35/73/33 +f 22/75/34 83/769/34 84/76/36 +f 1/77/13 26/770/13 36/78/35 +f 24/80/36 84/771/36 73/81/15 +f 68/83/4 142/772/4 141/84/3 +f 49/86/7 134/773/7 144/87/6 +f 56/89/10 136/774/10 135/90/9 +f 58/92/11 137/775/11 136/93/10 +f 60/95/1 138/776/1 137/96/11 +f 62/98/2 139/777/2 138/99/1 +f 64/101/12 140/778/12 139/102/2 +f 63/104/37 32/779/37 33/105/37 +f 66/107/3 141/780/3 140/108/12 +f 70/110/5 143/781/5 142/111/4 +f 72/113/6 144/782/6 143/114/5 +f 50/116/37 26/783/37 25/117/37 +f 57/119/37 29/784/37 30/120/37 +f 54/122/9 135/785/9 133/123/8 +f 51/125/37 25/786/37 27/126/37 +f 67/128/37 65/787/37 33/129/37 +f 61/131/37 59/788/37 30/132/37 +f 55/134/37 53/789/37 27/135/37 +f 67/137/37 34/790/37 35/138/37 +f 61/140/37 31/791/37 32/141/37 +f 55/143/37 28/792/37 29/144/37 +f 71/146/37 69/793/37 35/147/37 +f 50/149/37 71/794/37 36/150/37 +f 49/152/25 50/795/25 51/153/27 +f 52/155/27 51/796/27 53/156/29 +f 54/158/29 53/797/29 55/159/31 +f 56/161/31 55/798/31 57/162/33 +f 58/164/33 57/799/33 59/165/35 +f 60/167/35 59/800/35 61/168/13 +f 62/170/13 61/801/13 63/171/14 +f 64/173/14 63/802/14 65/174/17 +f 66/176/17 65/803/17 67/177/19 +f 68/179/19 67/804/19 69/180/21 +f 70/182/21 69/805/21 71/183/23 +f 72/185/23 71/806/23 50/186/25 +f 52/188/8 133/807/8 134/189/7 +f 96/191/38 78/808/38 77/192/38 +f 85/194/38 73/809/38 84/195/38 +f 90/197/38 75/810/38 74/198/38 +f 104/200/38 82/811/38 81/201/38 +f 98/203/38 79/812/38 78/204/38 +f 92/206/38 76/813/38 75/207/38 +f 104/209/38 106/814/38 83/210/38 +f 98/212/38 100/815/38 80/213/38 +f 94/215/38 77/816/38 76/216/38 +f 108/218/38 84/817/38 83/219/38 +f 85/221/38 88/818/38 74/222/38 +f 102/224/38 81/819/38 80/225/38 +f 109/227/38 112/820/38 87/228/38 +f 114/230/38 89/821/38 87/231/38 +f 116/233/38 91/822/38 89/234/38 +f 116/236/38 118/823/38 93/237/38 +f 118/239/38 120/824/38 95/240/38 +f 122/242/38 97/825/38 95/243/38 +f 122/245/38 124/826/38 99/246/38 +f 126/248/38 101/827/38 99/249/38 +f 126/251/38 128/828/38 103/252/38 +f 130/254/38 105/829/38 103/255/38 +f 132/257/38 107/830/38 105/258/38 +f 109/260/38 86/831/38 107/261/38 +f 113/265/38 111/832/38 110/833/38 +f 110/833/38 131/834/38 129/263/38 +f 129/263/38 127/835/38 125/836/38 +f 125/836/38 123/837/38 121/264/38 +f 121/264/38 119/838/38 117/839/38 +f 117/839/38 115/840/38 113/265/38 +f 113/265/38 110/833/38 129/263/38 +f 129/263/38 125/836/38 121/264/38 +f 121/264/38 117/839/38 113/265/38 +f 87/266/28 88/841/28 85/267/26 +f 89/269/30 90/842/30 88/270/28 +f 91/272/32 92/843/32 90/273/30 +f 93/275/34 94/844/34 92/276/32 +f 95/278/36 96/845/36 94/279/34 +f 97/281/15 98/846/15 96/282/36 +f 99/284/16 100/815/16 98/285/15 +f 101/287/18 102/847/18 100/288/16 +f 103/290/20 104/848/20 102/291/18 +f 105/293/22 106/849/22 104/294/20 +f 107/296/24 108/850/24 106/297/22 +f 86/299/26 85/851/26 108/300/24 +f 110/302/15 111/852/16 112/303/16 +f 113/305/18 114/853/18 112/306/16 +f 115/308/20 116/854/20 114/309/18 +f 117/311/22 118/855/22 116/312/20 +f 119/314/24 120/856/24 118/315/22 +f 121/317/26 122/857/26 120/318/24 +f 123/320/28 124/858/28 122/321/26 +f 125/323/30 126/859/30 124/324/28 +f 127/326/32 128/860/32 126/327/30 +f 127/329/32 129/861/34 130/330/34 +f 131/332/36 132/862/36 130/333/34 +f 110/335/15 109/863/15 132/336/36 +f 38/338/37 134/864/37 133/339/37 +f 37/341/37 133/865/37 135/342/37 +f 40/344/37 39/866/37 135/345/37 +f 40/347/37 136/867/37 137/348/37 +f 41/350/37 137/868/37 138/351/37 +f 43/353/37 42/869/37 138/354/37 +f 43/356/37 139/870/37 140/357/37 +f 44/359/37 140/871/37 141/360/37 +f 45/362/37 141/872/37 142/363/37 +f 46/365/37 142/873/37 143/366/37 +f 47/368/37 143/874/37 144/369/37 +f 38/371/37 48/875/37 144/372/37 +s 0 +f 146/374/10 148/876/10 147/375/10 +f 150/377/10 152/877/10 151/378/10 +f 154/380/10 156/878/10 155/381/10 +f 158/383/10 160/879/10 159/384/10 +f 162/386/10 164/880/10 163/387/10 +f 167/389/10 165/881/10 166/390/10 +f 170/392/10 172/882/10 171/393/10 +f 175/395/10 173/883/10 174/396/10 +f 178/398/10 180/884/10 179/399/10 +f 182/401/10 184/885/10 183/402/10 +s 1 +f 186/404/10 188/407/39 187/405/39 +f 188/407/39 190/409/7 189/408/7 +f 190/409/7 192/411/40 191/410/40 +f 192/411/40 194/886/4 193/412/4 +f 194/413/4 196/416/41 195/414/41 +f 196/416/41 198/887/2 197/417/2 +f 197/417/2 198/887/2 200/418/42 +f 200/418/42 186/404/10 185/406/10 +f 208/420/42 216/433/42 209/421/10 +f 211/423/7 212/426/40 204/424/40 +f 212/426/40 213/451/4 205/427/4 +f 213/428/4 214/888/41 206/429/41 +f 206/429/41 214/888/41 215/431/2 +f 207/432/2 215/431/2 216/433/42 +f 209/421/10 210/435/39 202/434/39 +f 210/435/39 211/423/7 203/425/7 +f 208/438/38 201/889/38 202/890/38 +f 202/890/38 203/891/38 204/436/38 +f 204/436/38 205/892/38 206/437/38 +f 206/437/38 207/893/38 208/438/38 +f 208/438/38 202/890/38 204/436/38 +f 209/439/43 218/894/43 217/440/44 +f 219/444/37 217/895/37 218/896/37 +f 218/896/37 224/897/37 223/442/37 +f 223/442/37 222/898/37 221/443/37 +f 221/443/37 220/899/37 219/444/37 +f 219/444/37 218/896/37 223/442/37 +f 216/445/45 224/900/45 218/446/43 +f 214/447/46 222/901/46 223/448/47 +f 212/426/48 220/902/48 221/450/49 +f 210/441/44 217/903/44 219/452/50 +f 215/449/47 223/904/47 224/453/45 +f 213/454/49 221/905/49 222/455/46 +f 212/426/48 211/423/50 219/456/50 +s 0 +f 231/458/10 230/906/10 233/459/10 +f 227/462/7 228/467/7 235/461/7 +f 235/461/7 236/460/7 233/459/7 +f 233/459/7 234/471/7 227/462/7 +f 226/465/2 225/907/2 229/463/2 +f 229/463/2 230/908/2 231/464/2 +f 231/464/2 232/466/2 226/465/2 +f 232/466/38 235/461/38 228/467/38 +f 236/468/51 235/461/51 232/466/51 +f 230/470/43 229/909/43 234/471/43 +f 234/471/37 229/909/37 225/473/37 +s 1 +f 238/474/52 240/477/53 239/475/10 +f 240/477/53 242/479/54 241/478/39 +f 242/479/54 244/481/55 243/480/7 +f 244/481/55 246/483/56 245/482/40 +f 246/483/56 248/485/57 247/484/4 +f 248/485/57 250/910/66 249/486/41 +f 252/487/58 260/508/62 253/488/59 +f 249/486/41 250/910/66 252/490/58 +f 251/491/2 252/490/58 238/492/52 +f 259/494/60 267/526/68 268/495/61 +f 238/497/52 253/911/59 254/498/63 +f 244/500/55 242/509/54 255/501/64 +f 248/503/57 258/511/67 259/504/60 +f 246/506/56 244/500/55 256/502/65 +f 252/487/58 250/505/66 259/504/60 +f 240/499/53 254/498/63 255/501/64 +f 246/510/56 257/912/48 258/511/67 +f 267/512/68 266/538/69 274/513/46 +f 257/515/48 265/913/74 266/516/69 +f 256/518/65 255/529/64 263/519/70 +f 254/521/63 253/914/59 261/522/72 +f 260/496/62 268/495/61 261/524/72 +f 259/494/60 258/517/67 266/516/69 +f 256/518/65 264/520/71 265/527/74 +f 255/529/64 254/521/63 262/523/73 +f 265/530/74 264/539/71 272/531/44 +f 263/533/70 262/541/73 269/534/75 +f 267/512/68 275/514/41 276/536/76 +f 265/530/74 273/532/37 274/513/46 +f 263/533/70 271/535/39 272/531/44 +f 261/540/72 270/915/38 269/534/75 +f 268/537/61 276/536/76 270/542/38 +s 0 +f 280/544/7 279/916/7 278/545/7 +f 283/547/43 284/917/43 279/548/43 +f 277/546/51 278/918/51 281/549/51 +f 279/548/4 284/917/4 281/551/4 +f 282/550/10 283/547/10 280/544/10 +f 284/553/2 283/547/2 282/550/2 +f 285/555/2 286/919/2 287/556/2 +f 287/556/10 286/919/10 289/558/10 +f 290/560/4 285/564/4 288/561/4 +f 292/559/51 291/920/51 288/563/51 +f 289/558/43 286/919/43 285/564/43 +f 289/558/7 290/921/7 291/565/7 +s 1 +f 293/566/10 294/569/43 304/567/43 +f 294/569/43 295/922/37 306/570/37 +f 306/570/37 295/922/37 296/571/49 +f 296/571/49 297/923/4 310/573/4 +f 310/574/4 297/924/4 298/575/77 +f 312/576/77 298/575/77 299/577/38 +f 299/577/38 300/580/51 316/579/51 +f 300/580/51 293/566/10 302/568/10 +f 301/581/42 302/925/42 304/582/78 +f 303/583/78 304/926/78 306/584/47 +f 306/586/47 308/927/79 307/587/79 +f 308/588/79 310/928/41 309/589/41 +f 310/590/41 312/929/80 311/591/80 +f 311/591/80 312/930/80 314/593/81 +f 313/594/81 314/931/81 316/595/82 +f 315/596/82 316/932/82 302/597/42 +f 309/589/4 321/923/4 320/598/49 +f 315/596/51 324/604/51 323/599/38 +f 303/583/43 305/585/37 319/600/37 +f 309/592/4 311/591/77 322/602/77 +f 301/581/10 317/605/10 324/604/51 +f 303/583/43 318/601/43 317/605/10 +f 307/587/49 320/598/49 319/600/37 +f 313/594/38 323/599/38 322/602/77 +f 324/608/7 317/933/7 318/934/7 +f 318/934/7 319/935/7 320/606/7 +f 320/606/7 321/936/7 322/607/7 +f 322/607/7 323/937/7 324/608/7 +f 324/608/7 318/934/7 320/606/7 +s 0 +f 331/609/39 332/615/39 327/610/39 +f 330/612/41 329/938/41 326/613/41 +f 332/615/37 330/939/37 325/616/37 +f 326/613/38 329/938/38 331/609/38 +f 334/617/2 336/620/2 335/618/2 +f 336/620/38 340/622/38 339/621/38 +f 340/622/7 338/624/7 337/623/7 +f 338/624/37 334/940/37 333/625/37 +f 343/626/42 348/610/42 347/611/42 +f 342/628/40 345/613/40 346/614/40 +f 341/630/37 346/616/37 348/610/37 +f 344/627/38 347/611/38 345/613/38 +f 351/631/7 352/618/7 350/619/7 +f 355/633/38 356/621/38 352/618/38 +f 353/634/2 354/623/2 356/621/2 +f 349/635/37 350/625/37 354/623/37 +s 1 +f 357/636/10 358/639/51 368/637/51 +f 358/639/51 359/641/38 370/640/38 +f 359/641/38 360/643/77 372/642/77 +f 360/643/77 361/941/4 374/644/4 +f 374/645/4 361/942/4 362/646/49 +f 362/646/49 363/649/37 378/648/37 +f 363/649/37 364/651/43 380/650/43 +f 364/651/43 357/636/10 366/638/10 +f 365/652/39 366/943/39 368/653/83 +f 367/654/83 368/944/83 370/655/84 +f 370/657/84 372/945/85 371/658/85 +f 372/659/85 374/946/40 373/660/40 +f 374/661/40 376/947/86 375/662/86 +f 376/664/86 378/948/50 377/665/50 +f 377/665/50 378/949/50 380/666/87 +f 379/667/87 380/950/87 366/668/39 +f 373/660/4 385/941/4 384/669/77 +f 379/667/43 388/674/43 387/670/37 +f 369/656/38 383/675/38 382/671/51 +f 375/662/49 386/676/49 385/672/4 +f 379/667/43 365/652/10 381/673/10 +f 367/654/51 382/671/51 381/673/10 +f 371/658/77 384/669/77 383/675/38 +f 375/662/49 377/665/37 387/670/37 +f 388/679/2 381/951/2 382/952/2 +f 382/952/2 383/953/2 384/677/2 +f 384/677/2 385/954/2 386/678/2 +f 386/678/2 387/955/2 388/679/2 +f 388/679/2 382/952/2 384/677/2 +f 390/680/88 392/683/89 391/681/7 +f 392/683/89 394/956/99 393/684/40 +f 393/684/40 394/956/99 396/685/90 +f 396/685/90 398/957/102 397/687/41 +f 397/687/41 398/957/102 400/688/91 +f 399/689/2 400/688/91 402/690/92 +f 404/692/93 412/712/97 405/693/94 +f 402/690/92 404/696/93 403/695/10 +f 404/696/93 390/958/88 389/697/39 +f 411/698/95 419/730/104 420/699/96 +f 392/701/89 390/959/88 405/702/94 +f 394/704/99 407/713/103 408/705/100 +f 402/707/92 400/715/91 410/708/101 +f 396/706/90 408/705/100 409/710/46 +f 402/707/92 411/709/95 412/712/97 +f 392/701/89 406/703/98 407/713/103 +f 398/714/102 409/960/46 410/708/101 +f 419/716/104 418/742/105 426/717/45 +f 409/719/46 417/961/110 418/720/105 +f 408/722/100 407/733/103 415/723/106 +f 406/725/98 405/962/94 413/726/108 +f 412/700/97 420/699/96 413/728/108 +f 411/698/95 410/721/101 418/720/105 +f 408/722/100 416/724/107 417/731/110 +f 407/733/103 406/725/98 414/727/109 +f 417/734/110 416/743/107 424/735/48 +f 414/737/109 421/745/112 423/738/40 +f 419/716/104 427/718/42 428/740/111 +f 417/734/110 425/736/37 426/717/45 +f 415/739/106 423/738/40 424/735/48 +f 413/744/108 422/963/38 421/745/112 +f 420/741/96 428/740/111 422/746/38 diff --git a/src/main/resources/assets/hbm/models/reactors/breeder.obj b/src/main/resources/assets/hbm/models/reactors/breeder.obj index a4ad944b5..c96c81eb6 100644 --- a/src/main/resources/assets/hbm/models/reactors/breeder.obj +++ b/src/main/resources/assets/hbm/models/reactors/breeder.obj @@ -1,2210 +1,1209 @@ -# Blender v2.79 (sub 0) OBJ File: 'breeder_sten.blend' +# Blender v2.79 (sub 7) OBJ File: 'breeding_reactor.blend' # www.blender.org -o Cube.005_Cube.010 -v 0.000000 4.255250 -0.950000 -v 0.000000 5.155250 -0.950000 -v 0.363549 5.155250 -0.877686 -v 0.363549 4.255250 -0.877686 -v 0.671751 5.155250 -0.671751 -v 0.671751 4.255250 -0.671751 -v 0.877686 5.155250 -0.363549 -v 0.877686 4.255250 -0.363549 -v 0.950000 5.155250 0.000000 -v 0.950000 4.255250 0.000000 -v 0.877686 5.155250 0.363549 -v 0.877686 4.255250 0.363549 -v 0.671751 5.155250 0.671751 -v 0.671751 4.255250 0.671751 -v 0.363549 5.155250 0.877686 -v 0.363549 4.255250 0.877686 -v 0.000000 5.155250 0.950000 -v 0.000000 4.255250 0.950000 -v -0.363549 5.155250 0.877686 -v -0.363549 4.255250 0.877686 -v -0.671751 5.155250 0.671752 -v -0.671751 4.255250 0.671752 -v -0.877686 5.155250 0.363549 -v -0.877686 4.255250 0.363549 -v -0.950000 5.155250 0.000000 -v -0.950000 4.255250 0.000000 -v -0.877686 5.155250 -0.363549 -v -0.877686 4.255250 -0.363549 -v -0.671751 5.155250 -0.671752 -v -0.671751 4.255250 -0.671752 -v -0.363549 5.155250 -0.877686 -v -0.363549 4.255250 -0.877686 -v -0.363549 1.555250 -0.877686 -v -0.363549 3.355250 -0.877686 -v 0.000000 3.355250 -0.950000 -v 0.000000 1.555250 -0.950000 -v -0.671751 1.555250 -0.671752 -v -0.671751 3.355250 -0.671752 -v -0.877686 1.555250 -0.363549 -v -0.877686 3.355250 -0.363549 -v -0.950000 1.555250 -0.000000 -v -0.950000 3.355250 0.000000 -v -0.877686 1.555250 0.363549 -v -0.877686 3.355250 0.363549 -v -0.671751 1.555250 0.671752 -v -0.671751 3.355250 0.671752 -v -0.363549 1.555250 0.877686 -v -0.363549 3.355250 0.877686 -v 0.000000 1.555250 0.950000 -v 0.000000 3.355250 0.950000 -v 0.363549 1.555250 0.877686 -v 0.363549 3.355250 0.877686 -v 0.671751 1.555250 0.671751 -v 0.671751 3.355250 0.671751 -v 0.877686 1.555250 0.363549 -v 0.877686 3.355250 0.363549 -v 0.950000 1.555250 -0.000000 -v 0.950000 3.355250 0.000000 -v 0.877686 1.555250 -0.363549 -v 0.877686 3.355250 -0.363549 -v 0.671751 1.555250 -0.671751 -v 0.671751 3.355250 -0.671751 -v 0.363549 1.555250 -0.877686 -v 0.363549 3.355250 -0.877686 -v -0.363549 1.001880 0.877686 -v -0.671751 1.001880 0.671752 -v -0.753880 0.481491 0.312268 -v -0.576995 0.481491 0.576995 -v -0.363549 1.001880 -0.877686 -v 0.000000 1.001880 -0.950000 -v -0.312267 0.481491 0.753880 -v 0.000000 0.481491 0.815994 -v 0.671751 1.001880 -0.671751 -v 0.877686 1.001880 -0.363549 -v 0.312267 0.481491 0.753880 -v 0.576995 0.481491 0.576995 -v -0.877686 1.001880 0.363549 -v 0.753880 0.481491 0.312268 -v 0.950000 1.001880 -0.000000 -v 0.815994 0.481491 -0.000000 -v -0.950000 1.001880 -0.000000 -v 0.753880 0.481491 -0.312267 -v 0.877686 1.001880 0.363549 -v 0.576995 0.481491 -0.576995 -v -0.877686 1.001880 -0.363549 -v 0.000000 0.481491 -0.815994 -v 0.671751 1.001880 0.671751 -v 0.312267 0.481491 -0.753880 -v -0.671751 1.001880 -0.671752 -v -0.753880 0.710770 -0.312268 -v 0.363549 1.001880 0.877686 -v -0.576995 0.710770 -0.576995 -v 0.000000 1.001880 0.950000 -v -0.576995 0.481491 -0.576995 -v 0.877686 5.844361 -0.363549 -v 0.950000 5.844361 0.000000 -v 0.143202 0.277469 -0.345720 -v 0.264602 0.277469 -0.264602 -v 0.345720 0.277469 -0.143202 -v 0.374204 0.277469 -0.000000 -v 0.345720 0.277469 0.143202 -v 0.264603 0.277469 0.264602 -v 0.143202 0.277469 0.345720 -v 0.000000 0.277469 0.374204 -v -0.143202 0.277469 0.345720 -v -0.264602 0.277469 0.264602 -v -0.345720 0.277469 0.143202 -v -0.374204 0.277469 -0.000000 -v -0.345720 0.277469 -0.143202 -v -0.264602 0.277469 -0.264602 -v -0.143202 0.277469 -0.345720 -v 0.000000 0.277469 -0.374204 -v 0.363549 1.001880 -0.877686 -v -0.753880 0.481491 -0.312268 -v 0.877686 5.844361 0.363549 -v 0.671751 5.844361 0.671751 -v 0.363549 5.844361 0.877686 -v 0.000000 5.844361 0.950000 -v -0.363549 5.844361 0.877686 -v -0.671751 5.844361 0.671752 -v -0.877685 5.844361 -0.363549 -v -0.671751 5.844361 -0.671752 -v -0.363549 5.844361 -0.877686 -v 0.000000 5.844361 -0.950000 -v -0.950000 5.844361 0.000000 -v -0.877686 5.844361 0.363549 -v -0.877686 5.475793 0.363549 -v -0.950000 5.475793 0.000000 -v -0.049497 0.760250 -0.049497 -v 0.000000 0.760250 -0.070000 -v 0.070000 0.760250 -0.000000 -v 0.049497 0.760250 0.049497 -v 0.000000 0.760250 0.070000 -v -0.049497 0.760250 0.049497 -v -0.070000 0.760250 -0.000000 -v 0.049497 0.760250 -0.049497 -v 0.000000 6.262662 -0.053589 -v 0.037893 6.262662 -0.037893 -v 0.053589 6.262662 0.000000 -v 0.037893 6.262662 0.037893 -v 0.000000 6.262662 0.053589 -v -0.037893 6.262662 0.037893 -v -0.053589 6.262662 0.000000 -v -0.037893 6.262662 -0.037893 -v 0.340478 0.760250 0.340503 -v 0.389975 0.760250 0.320000 -v 0.459975 0.760250 0.390000 -v 0.439473 0.760250 0.439497 -v 0.389975 0.760250 0.460000 -v 0.340478 0.760250 0.439497 -v 0.319975 0.760250 0.390000 -v 0.439473 0.760250 0.340503 -v 0.389975 6.262662 0.336411 -v 0.427868 6.262662 0.352107 -v 0.443564 6.262662 0.390000 -v 0.427868 6.262662 0.427893 -v 0.389975 6.262662 0.443589 -v 0.352082 6.262662 0.427893 -v 0.336386 6.262662 0.390000 -v 0.352082 6.262662 0.352107 -v 0.340503 0.760250 -0.439497 -v 0.390000 0.760250 -0.460000 -v 0.460000 0.760250 -0.390000 -v 0.439497 0.760250 -0.340503 -v 0.390000 0.760250 -0.320000 -v 0.340503 0.760250 -0.340503 -v 0.320000 0.760250 -0.390000 -v 0.439497 0.760250 -0.439497 -v 0.390000 6.262662 -0.443589 -v 0.427893 6.262662 -0.427893 -v 0.443589 6.262662 -0.390000 -v 0.427893 6.262662 -0.352107 -v 0.390000 6.262662 -0.336411 -v 0.352107 6.262662 -0.352107 -v 0.336411 6.262662 -0.390000 -v 0.352107 6.262662 -0.427893 -v -0.439497 0.760250 0.340503 -v -0.390000 0.760250 0.320000 -v -0.320000 0.760250 0.390000 -v -0.340503 0.760250 0.439497 -v -0.390000 0.760250 0.460000 -v -0.439497 0.760250 0.439497 -v -0.460000 0.760250 0.390000 -v -0.340503 0.760250 0.340503 -v -0.390000 6.262662 0.336411 -v -0.352107 6.262662 0.352107 -v -0.336411 6.262662 0.390000 -v -0.352107 6.262662 0.427893 -v -0.390000 6.262662 0.443589 -v -0.427893 6.262662 0.427893 -v -0.443589 6.262662 0.390000 -v -0.427893 6.262662 0.352107 -v -0.439497 0.760250 -0.439497 -v -0.390000 0.760250 -0.460000 -v -0.320000 0.760250 -0.390000 -v -0.340503 0.760250 -0.340503 -v -0.390000 0.760250 -0.320000 -v -0.439497 0.760250 -0.340503 -v -0.460000 0.760250 -0.390000 -v -0.340503 0.760250 -0.439497 -v -0.390000 6.262662 -0.443589 -v -0.352107 6.262662 -0.427893 -v -0.336411 6.262662 -0.390000 -v -0.352107 6.262662 -0.352107 -v -0.390000 6.262662 -0.336411 -v -0.427893 6.262662 -0.352107 -v -0.443589 6.262662 -0.390000 -v -0.427893 6.262662 -0.427893 -v -0.950000 5.475793 0.000000 -v -0.877686 5.475793 0.363549 -v -0.877686 5.844361 0.363549 -v -0.950000 5.844361 0.000000 -v 0.000000 5.844361 -0.950000 -v -0.363549 5.844361 -0.877686 -v -0.671751 5.844361 -0.671752 -v -0.877685 5.844361 -0.363549 -v -0.671751 5.844361 0.671752 -v -0.363549 5.844361 0.877686 -v 0.000000 5.844361 0.950000 -v 0.363549 5.844361 0.877686 -v 0.671751 5.844361 0.671751 -v 0.877686 5.844361 0.363549 -v 0.950000 5.844361 0.000000 -v 0.877686 5.844361 -0.363549 -v 0.671751 5.844361 -0.671751 -v 0.363549 5.844361 -0.877686 -v 0.877686 5.475793 0.363549 -v 0.950000 5.475793 0.000000 -v -0.671751 5.475793 0.671752 -v -0.363549 5.475793 0.877686 -v -0.363549 5.475793 -0.877686 -v -0.671751 5.475793 -0.671752 -v 0.877686 5.475793 -0.363549 -v 0.671751 5.475793 -0.671751 -v 0.000000 5.475793 0.950000 -v 0.363549 5.475793 0.877686 -v -0.877686 5.475793 -0.363549 -v 0.363549 5.475793 -0.877686 -v 0.000000 5.475793 -0.950000 -v 0.671751 5.475793 0.671751 -v 0.990000 5.685250 0.990000 -v 0.990000 5.685250 0.850000 -v -0.850000 5.685250 -0.990000 -v 0.990000 5.685250 -0.990000 -v 0.850000 5.685250 0.850000 -v 0.850000 5.685250 0.990000 -v -0.850000 5.685250 -0.850000 -v 0.990000 5.685250 -0.850000 -v -0.990000 5.685250 -0.990000 -v -0.990000 5.685250 -0.850000 -v 0.850000 5.685250 -0.990000 -v 0.850000 5.685250 -0.850000 -v -0.850000 5.685250 0.850000 -v -0.850000 5.685250 0.990000 -v -0.990000 5.685250 0.850000 -v -0.990000 5.685250 0.990000 -v -0.990000 -0.000115 0.990000 -v -0.850000 -0.000115 0.990000 -v -0.850000 -0.000115 -0.990000 -v -0.850000 -0.000115 -0.850000 -v -0.990000 -0.000115 0.850000 -v -0.850000 -0.000115 0.850000 -v 0.850000 -0.000115 0.990000 -v 0.850000 -0.000115 0.850000 -v -0.990000 -0.000115 -0.850000 -v 0.990000 -0.000115 0.990000 -v 0.990000 -0.000115 0.850000 -v 0.850000 -0.000115 -0.850000 -v 0.990000 -0.000115 -0.850000 -v 0.990000 -0.000115 -0.990000 -v -0.990000 -0.000115 -0.990000 -v 0.850000 -0.000115 -0.990000 -v 0.000000 4.255250 -0.950000 -v 0.363549 4.255250 -0.877686 -v 0.671751 4.255250 -0.671751 -v 0.877686 4.255250 -0.363549 -v 0.950000 4.255250 0.000000 -v 0.877686 4.255250 0.363549 -v 0.671751 4.255250 0.671751 -v 0.363549 4.255250 0.877686 -v 0.000000 4.255250 0.950000 -v -0.363549 4.255250 0.877686 -v -0.671751 4.255250 0.671752 -v -0.877686 4.255250 0.363549 -v -0.950000 4.255250 0.000000 -v -0.877686 4.255250 -0.363549 -v -0.671751 4.255250 -0.671752 -v -0.363549 4.255250 -0.877686 -v -0.363549 3.355250 -0.877686 -v 0.000000 3.355250 -0.950000 -v -0.671751 3.355250 -0.671752 -v -0.877686 3.355250 -0.363549 -v -0.950000 3.355250 0.000000 -v -0.877686 3.355250 0.363549 -v -0.671751 3.355250 0.671752 -v -0.363549 3.355250 0.877686 -v 0.000000 3.355250 0.950000 -v 0.363549 3.355250 0.877686 -v 0.671751 3.355250 0.671751 -v 0.877686 3.355250 0.363549 -v 0.950000 3.355250 0.000000 -v 0.877686 3.355250 -0.363549 -v 0.671751 3.355250 -0.671751 -v 0.363549 3.355250 -0.877686 -v 0.850000 5.545250 0.850000 -v 0.850000 0.889885 0.850000 -v 0.990000 5.545250 0.850000 -v 0.990000 0.889885 0.850000 -v 0.990000 5.685250 0.850000 -v 0.850000 5.685250 0.850000 -v -0.850000 5.685250 -0.850000 -v 0.990000 5.685250 -0.850000 -v -0.990000 5.685250 -0.850000 -v 0.850000 5.685250 -0.850000 -v -0.850000 5.685250 0.850000 -v -0.990000 5.685250 0.850000 -v -0.990000 0.889885 -0.850000 -v -0.990000 5.545250 -0.850000 -v 0.850000 0.749885 0.850000 -v -0.850000 5.545250 -0.850000 -v -0.850000 0.889885 -0.850000 -v 0.850000 0.889885 -0.850000 -v 0.850000 5.545250 -0.850000 -v 0.990000 0.749885 0.850000 -v 0.990000 5.545250 -0.850000 -v 0.990000 0.889885 -0.850000 -v -0.990000 0.749885 0.850000 -v -0.990000 5.545250 0.850000 -v -0.990000 0.889885 0.850000 -v -0.850000 5.545250 0.850000 -v -0.850000 0.889885 0.850000 -v 0.850000 0.749885 -0.850000 -v 0.990000 0.749885 -0.850000 -v -0.990000 0.749885 -0.850000 -v -0.850000 0.749885 -0.850000 -v -0.850000 0.749885 0.850000 -v 0.850000 0.889885 0.990000 -v 0.850000 5.545250 0.990000 -v 0.850000 5.545250 0.850000 -v 0.850000 0.889885 0.850000 -v -0.850000 5.685250 -0.990000 -v 0.850000 5.685250 0.850000 -v 0.850000 5.685250 0.990000 -v -0.850000 5.685250 -0.850000 -v 0.850000 5.685250 -0.990000 -v 0.850000 5.685250 -0.850000 -v -0.850000 5.685250 0.850000 -v -0.850000 5.685250 0.990000 -v 0.850000 0.749885 0.850000 -v -0.850000 5.545250 -0.990000 -v -0.850000 0.889885 -0.990000 -v -0.850000 5.545250 -0.850000 -v -0.850000 0.889885 -0.850000 -v 0.850000 0.889885 -0.850000 -v 0.850000 5.545250 -0.850000 -v 0.850000 5.545250 -0.990000 -v 0.850000 0.889885 -0.990000 -v -0.850000 5.545250 0.850000 -v -0.850000 0.889885 0.850000 -v -0.850000 5.545250 0.990000 -v -0.850000 0.889885 0.990000 -v 0.850000 0.749885 -0.850000 -v -0.850000 0.749885 -0.850000 -v 0.850000 0.749885 0.990000 -v -0.850000 0.749885 0.850000 -v -0.850000 0.749885 0.990000 -v -0.850000 0.749885 -0.990000 -v 0.850000 0.749885 -0.990000 -v 0.000000 4.255250 -0.950000 -v 0.000000 5.155250 -0.950000 -v 0.363549 5.155250 -0.877686 -v 0.363549 4.255250 -0.877686 -v 0.671751 5.155250 -0.671751 -v 0.671751 4.255250 -0.671751 -v 0.877686 5.155250 -0.363549 -v 0.877686 4.255250 -0.363549 -v 0.950000 5.155250 0.000000 -v 0.950000 4.255250 0.000000 -v 0.877686 5.155250 0.363549 -v 0.877686 4.255250 0.363549 -v 0.671751 5.155250 0.671751 -v 0.671751 4.255250 0.671751 -v 0.363549 5.155250 0.877686 -v 0.363549 4.255250 0.877686 -v 0.000000 5.155250 0.950000 -v 0.000000 4.255250 0.950000 -v -0.363549 5.155250 0.877686 -v -0.363549 4.255250 0.877686 -v -0.671751 5.155250 0.671752 -v -0.671751 4.255250 0.671752 -v -0.877686 5.155250 0.363549 -v -0.877686 4.255250 0.363549 -v -0.950000 5.155250 0.000000 -v -0.950000 4.255250 0.000000 -v -0.877686 5.155250 -0.363549 -v -0.877686 4.255250 -0.363549 -v -0.671751 5.155250 -0.671752 -v -0.671751 4.255250 -0.671752 -v -0.363549 5.155250 -0.877686 -v -0.363549 4.255250 -0.877686 -v -0.363549 1.555250 -0.877686 -v -0.363549 3.355250 -0.877686 -v 0.000000 3.355250 -0.950000 -v 0.000000 1.555250 -0.950000 -v -0.671751 1.555250 -0.671752 -v -0.671751 3.355250 -0.671752 -v -0.877686 1.555250 -0.363549 -v -0.877686 3.355250 -0.363549 -v -0.950000 1.555250 -0.000000 -v -0.950000 3.355250 0.000000 -v -0.877686 1.555250 0.363549 -v -0.877686 3.355250 0.363549 -v -0.671751 1.555250 0.671752 -v -0.671751 3.355250 0.671752 -v -0.363549 1.555250 0.877686 -v -0.363549 3.355250 0.877686 -v 0.000000 1.555250 0.950000 -v 0.000000 3.355250 0.950000 -v 0.363549 1.555250 0.877686 -v 0.363549 3.355250 0.877686 -v 0.671751 1.555250 0.671751 -v 0.671751 3.355250 0.671751 -v 0.877686 1.555250 0.363549 -v 0.877686 3.355250 0.363549 -v 0.950000 1.555250 -0.000000 -v 0.950000 3.355250 0.000000 -v 0.877686 1.555250 -0.363549 -v 0.877686 3.355250 -0.363549 -v 0.671751 1.555250 -0.671751 -v 0.671751 3.355250 -0.671751 -v 0.363549 1.555250 -0.877686 -v 0.363549 3.355250 -0.877686 -v -0.363549 1.001880 0.877686 -v -0.671751 1.001880 0.671752 -v -0.671751 0.612922 0.671752 -v -0.363549 0.612922 0.877686 -v -0.363549 1.001880 -0.877686 -v 0.000000 1.001880 -0.950000 -v 0.000000 0.612922 -0.950000 -v -0.363549 0.612922 -0.877686 -v 0.671751 1.001880 -0.671751 -v 0.877686 1.001880 -0.363549 -v 0.877686 0.612922 -0.363549 -v 0.671751 0.612922 -0.671751 -v -0.877686 1.001880 0.363549 -v -0.877686 0.612922 0.363549 -v 0.950000 1.001880 -0.000000 -v 0.950000 0.612922 -0.000000 -v -0.950000 1.001880 -0.000000 -v -0.950000 0.612922 -0.000000 -v 0.877686 1.001880 0.363549 -v 0.877686 0.612922 0.363549 -v -0.877686 1.001880 -0.363549 -v -0.877686 0.612922 -0.363549 -v 0.671751 1.001880 0.671751 -v 0.671751 0.612922 0.671751 -v -0.671751 1.001880 -0.671752 -v -0.671751 0.612922 -0.671752 -v 0.363549 1.001880 0.877686 -v 0.363549 0.612922 0.877686 -v 0.000000 1.001880 0.950000 -v 0.000000 0.612922 0.950000 -v 0.363549 1.001880 -0.877686 -v 0.363549 0.612922 -0.877686 -v -0.671751 0.612922 0.671752 -v -0.363549 0.612922 0.877686 -v 0.000000 0.612922 -0.950000 -v -0.363549 0.612922 -0.877686 -v 0.877686 0.612922 -0.363549 -v 0.671751 0.612922 -0.671751 -v -0.877686 0.612922 0.363549 -v 0.950000 0.612922 -0.000000 -v -0.950000 0.612922 -0.000000 -v 0.877686 0.612922 0.363549 -v -0.877686 0.612922 -0.363549 -v 0.671751 0.612922 0.671751 -v -0.671751 0.612922 -0.671752 -v 0.363549 0.612922 0.877686 -v 0.000000 0.612922 0.950000 -v -0.753880 0.481491 -0.312268 -v -0.576995 0.481491 -0.576995 -v 0.363549 0.612922 -0.877686 -v 0.312267 0.481491 -0.753880 -v 0.000000 0.481491 -0.815994 -v 0.576995 0.481491 -0.576995 -v 0.753880 0.481491 -0.312267 -v 0.815994 0.481491 -0.000000 -v 0.753880 0.481491 0.312268 -v 0.576995 0.481491 0.576995 -v 0.312267 0.481491 0.753880 -v 0.000000 0.481491 0.815994 -v -0.312267 0.481491 0.753880 -v -0.576995 0.481491 0.576995 -v -0.753880 0.481491 0.312268 -v -0.815994 0.481491 -0.000000 -v -0.312267 0.481491 -0.753880 -v -0.815994 0.481491 -0.000000 -v -0.312267 0.481491 -0.753880 -v 0.576995 0.710770 -0.576995 -v 0.312267 0.710770 -0.753880 -v 0.312267 0.710770 0.753880 -v 0.576995 0.710770 0.576995 -v -0.815994 0.710770 -0.000000 -v -0.753880 0.710770 0.312268 -v -0.312267 0.710770 -0.753880 -v 0.753880 0.710770 0.312268 -v 0.815994 0.710770 -0.000000 -v -0.576995 0.710770 0.576995 -v -0.312267 0.710770 0.753880 -v 0.753880 0.710770 -0.312267 -v 0.000000 0.710770 0.815994 -v 0.000000 0.710770 -0.815994 -v -0.576995 0.710770 -0.576995 -v -0.753880 0.710770 -0.312268 -v 0.143202 0.277469 -0.345720 -v 0.264602 0.277469 -0.264602 -v 0.345720 0.277469 -0.143202 -v 0.374204 0.277469 -0.000000 -v 0.345720 0.277469 0.143202 -v 0.264603 0.277469 0.264602 -v 0.143202 0.277469 0.345720 -v 0.000000 0.277469 0.374204 -v -0.143202 0.277469 0.345720 -v -0.264602 0.277469 0.264602 -v -0.345720 0.277469 0.143202 -v -0.374204 0.277469 -0.000000 -v -0.345720 0.277469 -0.143202 -v -0.264602 0.277469 -0.264602 -v -0.143202 0.277469 -0.345720 -v 0.000000 0.277469 -0.374204 -v 0.576995 0.710770 -0.576995 -v 0.312267 0.710770 -0.753880 -v 0.312267 0.710770 0.753880 -v 0.576995 0.710770 0.576995 -v -0.815994 0.710770 -0.000000 -v -0.753880 0.710770 0.312268 -v -0.312267 0.710770 -0.753880 -v 0.753880 0.710770 0.312268 -v 0.815994 0.710770 -0.000000 -v -0.576995 0.710770 0.576995 -v -0.312267 0.710770 0.753880 -v 0.753880 0.710770 -0.312267 -v 0.000000 0.710770 0.815994 -v 0.000000 0.710770 -0.815994 -v 0.671751 5.844361 -0.671751 -v 0.363549 5.844361 -0.877686 -v 0.877686 5.475793 0.363549 -v 0.950000 5.475793 0.000000 -v -0.671751 5.475793 0.671752 -v -0.363549 5.475793 0.877686 -v -0.363549 5.475793 -0.877686 -v -0.671751 5.475793 -0.671752 -v 0.877686 5.475793 -0.363549 -v 0.671751 5.475793 -0.671751 -v 0.000000 5.475793 0.950000 -v 0.363549 5.475793 0.877686 -v -0.877686 5.475793 -0.363549 -v 0.363549 5.475793 -0.877686 -v 0.000000 5.475793 -0.950000 -v 0.671751 5.475793 0.671751 -v -0.049497 0.760250 -0.049497 -v -0.049497 6.247500 -0.049497 -v 0.000000 6.247500 -0.070000 -v 0.000000 0.760250 -0.070000 -v 0.070000 0.760250 -0.000000 -v 0.070000 6.247500 0.000000 -v 0.049497 6.247500 0.049497 -v 0.049497 0.760250 0.049497 -v 0.000000 6.247500 0.070000 -v 0.000000 0.760250 0.070000 -v -0.049497 6.247500 0.049497 -v -0.049497 0.760250 0.049497 -v -0.070000 6.247500 0.000000 -v -0.070000 0.760250 -0.000000 -v 0.049497 6.247500 -0.049497 -v 0.049497 0.760250 -0.049497 -v 0.000000 6.262662 -0.053589 -v 0.037893 6.262662 -0.037893 -v 0.053589 6.262662 0.000000 -v 0.037893 6.262662 0.037893 -v 0.000000 6.262662 0.053589 -v -0.037893 6.262662 0.037893 -v -0.053589 6.262662 0.000000 -v -0.037893 6.262662 -0.037893 -v 0.340478 0.760250 0.340503 -v 0.340478 6.247500 0.340503 -v 0.389975 6.247500 0.320000 -v 0.389975 0.760250 0.320000 -v 0.459975 0.760250 0.390000 -v 0.459975 6.247500 0.390000 -v 0.439473 6.247500 0.439497 -v 0.439473 0.760250 0.439497 -v 0.389975 6.247500 0.460000 -v 0.389975 0.760250 0.460000 -v 0.340478 6.247500 0.439497 -v 0.340478 0.760250 0.439497 -v 0.319975 6.247500 0.390000 -v 0.319975 0.760250 0.390000 -v 0.439473 6.247500 0.340503 -v 0.439473 0.760250 0.340503 -v 0.389975 6.262662 0.336411 -v 0.427868 6.262662 0.352107 -v 0.443564 6.262662 0.390000 -v 0.427868 6.262662 0.427893 -v 0.389975 6.262662 0.443589 -v 0.352082 6.262662 0.427893 -v 0.336386 6.262662 0.390000 -v 0.352082 6.262662 0.352107 -v 0.340503 0.760250 -0.439497 -v 0.340503 6.247500 -0.439497 -v 0.390000 6.247500 -0.460000 -v 0.390000 0.760250 -0.460000 -v 0.460000 0.760250 -0.390000 -v 0.460000 6.247500 -0.390000 -v 0.439497 6.247500 -0.340503 -v 0.439497 0.760250 -0.340503 -v 0.390000 6.247500 -0.320000 -v 0.390000 0.760250 -0.320000 -v 0.340503 6.247500 -0.340503 -v 0.340503 0.760250 -0.340503 -v 0.320000 6.247500 -0.390000 -v 0.320000 0.760250 -0.390000 -v 0.439497 6.247500 -0.439497 -v 0.439497 0.760250 -0.439497 -v 0.390000 6.262662 -0.443589 -v 0.427893 6.262662 -0.427893 -v 0.443589 6.262662 -0.390000 -v 0.427893 6.262662 -0.352107 -v 0.390000 6.262662 -0.336411 -v 0.352107 6.262662 -0.352107 -v 0.336411 6.262662 -0.390000 -v 0.352107 6.262662 -0.427893 -v -0.439497 0.760250 0.340503 -v -0.439497 6.247500 0.340503 -v -0.390000 6.247500 0.320000 -v -0.390000 0.760250 0.320000 -v -0.320000 0.760250 0.390000 -v -0.320000 6.247500 0.390000 -v -0.340503 6.247500 0.439497 -v -0.340503 0.760250 0.439497 -v -0.390000 6.247500 0.460000 -v -0.390000 0.760250 0.460000 -v -0.439497 6.247500 0.439497 -v -0.439497 0.760250 0.439497 -v -0.460000 6.247500 0.390000 -v -0.460000 0.760250 0.390000 -v -0.340503 6.247500 0.340503 -v -0.340503 0.760250 0.340503 -v -0.390000 6.262662 0.336411 -v -0.352107 6.262662 0.352107 -v -0.336411 6.262662 0.390000 -v -0.352107 6.262662 0.427893 -v -0.390000 6.262662 0.443589 -v -0.427893 6.262662 0.427893 -v -0.443589 6.262662 0.390000 -v -0.427893 6.262662 0.352107 -v -0.439497 0.760250 -0.439497 -v -0.439497 6.247500 -0.439497 -v -0.390000 6.247500 -0.460000 -v -0.390000 0.760250 -0.460000 -v -0.320000 0.760250 -0.390000 -v -0.320000 6.247500 -0.390000 -v -0.340503 6.247500 -0.340503 -v -0.340503 0.760250 -0.340503 -v -0.390000 6.247500 -0.320000 -v -0.390000 0.760250 -0.320000 -v -0.439497 6.247500 -0.340503 -v -0.439497 0.760250 -0.340503 -v -0.460000 6.247500 -0.390000 -v -0.460000 0.760250 -0.390000 -v -0.340503 6.247500 -0.439497 -v -0.340503 0.760250 -0.439497 -v -0.390000 6.262662 -0.443589 -v -0.352107 6.262662 -0.427893 -v -0.336411 6.262662 -0.390000 -v -0.352107 6.262662 -0.352107 -v -0.390000 6.262662 -0.336411 -v -0.427893 6.262662 -0.352107 -v -0.443589 6.262662 -0.390000 -v -0.427893 6.262662 -0.427893 -vt 0.946429 0.745614 -vt 0.928571 -0.000000 -vt 0.946429 -0.000000 -vt 0.964286 0.745614 -vt 0.964286 -0.000000 -vt 0.243141 0.848272 -vt 0.315152 0.677472 -vt 0.489001 0.748220 -vt 0.153396 0.744032 -vt 0.168856 0.780702 -vt 0.063286 0.780702 -vt 0.232243 0.798246 -vt 0.366071 0.666765 -vt 0.499900 0.798246 -vt 0.271985 0.890682 -vt 0.271985 0.705810 -vt 0.460158 0.705810 -vt 0.416991 0.919019 -vt 0.243141 0.848272 -vt 0.315152 0.677472 -vt 0.242430 0.747930 -vt 0.314857 0.919718 -vt 0.489713 0.848561 -vt 0.865451 0.786687 -vt 0.860065 0.788878 -vt 0.857834 0.783587 -vt 0.860435 0.788001 -vt 0.858727 0.786323 -vt 0.864558 0.783951 -vt 0.865451 0.786687 -vt 0.860065 0.788878 -vt 0.857834 0.783587 -vt 0.858727 0.786323 -vt 0.858727 0.783951 -vt 0.864558 0.786323 -vt 0.865451 0.786687 -vt 0.860065 0.788878 -vt 0.857834 0.783587 -vt 0.860435 0.782273 -vt 0.862850 0.782273 -vt 0.864558 0.783951 -vt 0.865451 0.786687 -vt 0.860065 0.788878 -vt 0.857834 0.783587 -vt 0.862850 0.782273 -vt 0.864558 0.783951 -vt 0.858727 0.786323 -vt 0.865451 0.786687 -vt 0.860065 0.788878 -vt 0.857834 0.783587 -vt 0.862850 0.782273 -vt 0.864558 0.783951 -vt 0.858727 0.786323 -vt 0.774162 0.989261 -vt 0.600217 0.918475 -vt 0.672267 0.747581 -vt 0.242704 0.848450 -vt 0.314971 0.677043 -vt 0.489439 0.748042 -vt 0.928571 0.763158 -vt 0.946429 0.745614 -vt 0.946429 0.763158 -vt 0.946429 0.763158 -vt 0.928571 0.745614 -vt 0.946429 0.745614 -vt 0.928571 0.763158 -vt 0.946429 0.745614 -vt 0.946429 0.763158 -vt 0.946429 0.763158 -vt 0.928571 0.745614 -vt 0.946429 0.745614 -vt 0.964286 0.745614 -vt 0.946429 -0.000000 -vt 0.964286 -0.000000 -vt 0.946429 0.745614 -vt 0.928571 -0.000000 -vt 0.964286 0.745614 -vt 0.946429 0.763158 -vt 0.946429 0.745614 -vt 0.964286 0.745614 -vt 0.946429 0.763158 -vt 0.946429 0.745614 -vt 0.946429 0.763158 -vt 0.964286 0.745614 -vt 0.946429 0.763158 -vt 0.946429 0.745614 -vt 0.964286 -0.000000 -vt 0.982143 0.745614 -vt 0.964286 0.745614 -vt 0.946429 0.745614 -vt 0.928571 0.745614 -vt 0.946429 -0.000000 -vt 1.000000 0.745614 -vt 0.982143 -0.000000 -vt 1.000000 0.000000 -vt 1.000000 0.000000 -vt 0.982143 0.745614 -vt 0.982143 -0.000000 -vt 1.000000 0.745614 -vt 0.982143 -0.000000 -vt 1.000000 0.000000 -vt 0.982143 0.745614 -vt 0.964286 -0.000000 -vt 0.946429 0.745614 -vt 0.946429 -0.000000 -vt 0.928571 -0.000000 -vt 0.982143 -0.000000 -vt 1.000000 0.745614 -vt 1.000000 0.000000 -vt 0.616071 0.719298 -vt 0.857143 0.736842 -vt 0.616071 0.736842 -vt 0.857143 0.684211 -vt 0.616071 0.666667 -vt 0.857143 0.666667 -vt 0.616071 0.701754 -vt 0.857143 0.701754 -vt 0.857143 0.666667 -vt 0.616071 0.684211 -vt 0.616071 0.666667 -vt 0.857143 0.719298 -vt 0.616071 0.736842 -vt 0.616071 0.719298 -vt 0.616071 0.701754 -vt 0.857143 0.684211 -vt 0.857143 0.701754 -vt 0.616071 0.666667 -vt 0.616071 0.684211 -vt 0.857143 0.684211 -vt 0.616071 0.701754 -vt 0.857143 0.719298 -vt 0.616071 0.719298 -vt 0.616071 0.736842 -vt 0.857143 0.719298 -vt 0.616071 0.701754 -vt 0.857143 0.684211 -vt 0.857143 0.701754 -vt 0.616071 0.666667 -vt 0.857143 0.666667 -vt 0.857143 0.719298 -vt 0.616071 0.736842 -vt 0.616071 0.719298 -vt 0.857143 0.684211 -vt 0.616071 0.701754 -vt 0.616071 0.684211 -vt 0.616071 0.684211 -vt 0.857143 0.666667 -vt 0.857143 0.684211 -vt 0.616071 0.736842 -vt 0.857143 0.719298 -vt 0.857143 0.736842 -vt 0.616071 0.719298 -vt 0.857143 0.701754 -vt 0.616071 0.684211 -vt 0.616071 0.701754 -vt 0.857143 0.684211 -vt 0.616071 0.666667 -vt 0.857143 0.666667 -vt 0.616071 0.701754 -vt 0.857143 0.701754 -vt 0.857143 0.719298 -vt 0.857143 0.736842 -vt 0.616071 0.719298 -vt 0.616071 0.684211 -vt 0.857143 0.701754 -vt 0.616071 0.701754 -vt 0.857143 0.719298 -vt 0.857143 0.701754 -vt 0.857143 0.666667 -vt 0.616071 0.736842 -vt 0.857143 0.736842 -vt 0.616071 0.719298 -vt 0.857143 0.719298 -vt 0.616071 0.736842 -vt 0.857143 0.666667 -vt 0.616071 0.666667 -vt 0.928571 0.745614 -vt 0.499130 0.798246 -vt 0.416991 0.919019 -vt 0.489001 0.848272 -vt 0.460158 0.890682 -vt 0.366071 0.928970 -vt 0.315152 0.919019 -vt 0.271985 0.890682 -vt 0.233013 0.798246 -vt 0.243141 0.748220 -vt 0.271985 0.705810 -vt 0.366071 0.667522 -vt 0.416991 0.677472 -vt 0.460158 0.705810 -vt 0.164839 0.800547 -vt 0.153396 0.817371 -vt 0.136271 0.828613 -vt 0.116071 0.832561 -vt 0.095871 0.828613 -vt 0.078747 0.817372 -vt 0.067304 0.800547 -vt 0.067304 0.760856 -vt 0.078747 0.744032 -vt 0.095871 0.732790 -vt 0.116071 0.728843 -vt 0.136271 0.732790 -vt 0.164839 0.760856 -vt 0.489713 0.848561 -vt 0.460703 0.891217 -vt 0.417285 0.919718 -vt 0.366071 0.929726 -vt 0.314857 0.919718 -vt 0.271440 0.891217 -vt 0.242430 0.848561 -vt 0.242430 0.747930 -vt 0.271440 0.705275 -vt 0.314857 0.676773 -vt 0.417285 0.676773 -vt 0.460703 0.705275 -vt 0.489713 0.747930 -vt 0.489001 0.748220 -vt 0.499130 0.798246 -vt 0.489001 0.848272 -vt 0.460158 0.890682 -vt 0.416991 0.919019 -vt 0.366071 0.928970 -vt 0.315152 0.919019 -vt 0.243141 0.848272 -vt 0.233013 0.798246 -vt 0.243141 0.748220 -vt 0.315152 0.677472 -vt 0.366071 0.667522 -vt 0.416991 0.677472 -vt 0.489001 0.748220 -vt 0.499130 0.798246 -vt 0.489001 0.848272 -vt 0.460158 0.890682 -vt 0.366071 0.928970 -vt 0.315152 0.919019 -vt 0.271985 0.890682 -vt 0.233013 0.798246 -vt 0.243141 0.748220 -vt 0.271985 0.705810 -vt 0.366071 0.667522 -vt 0.416991 0.677472 -vt 0.460158 0.705810 -vt 0.499900 0.798246 -vt 0.417285 0.676773 -vt 0.489713 0.747930 -vt 0.460703 0.705275 -vt 0.366071 0.666765 -vt 0.314857 0.676773 -vt 0.271440 0.705275 -vt 0.232243 0.798246 -vt 0.242430 0.848561 -vt 0.271440 0.891217 -vt 0.366071 0.929726 -vt 0.417285 0.919718 -vt 0.460703 0.891216 -vt 0.860065 0.781396 -vt 0.863220 0.781396 -vt 0.865451 0.783587 -vt 0.863220 0.788878 -vt 0.857834 0.786687 -vt 0.858727 0.783951 -vt 0.860435 0.782273 -vt 0.862850 0.782273 -vt 0.864558 0.786323 -vt 0.862850 0.788001 -vt 0.860065 0.781396 -vt 0.863220 0.781396 -vt 0.865451 0.783587 -vt 0.863220 0.788878 -vt 0.857834 0.786687 -vt 0.860435 0.782273 -vt 0.862850 0.782273 -vt 0.864558 0.783951 -vt 0.862850 0.788001 -vt 0.860435 0.788001 -vt 0.860065 0.781396 -vt 0.863220 0.781396 -vt 0.865451 0.783587 -vt 0.863220 0.788878 -vt 0.857834 0.786687 -vt 0.864558 0.786323 -vt 0.862850 0.788001 -vt 0.860435 0.788001 -vt 0.858727 0.786323 -vt 0.858727 0.783951 -vt 0.860065 0.781396 -vt 0.863220 0.781396 -vt 0.865451 0.783587 -vt 0.863220 0.788878 -vt 0.857834 0.786687 -vt 0.864558 0.786323 -vt 0.862850 0.788001 -vt 0.860435 0.788001 -vt 0.858727 0.783951 -vt 0.860435 0.782273 -vt 0.860065 0.781396 -vt 0.863220 0.781396 -vt 0.865451 0.783587 -vt 0.863220 0.788878 -vt 0.857834 0.786687 -vt 0.864558 0.786323 -vt 0.862850 0.788001 -vt 0.860435 0.788001 -vt 0.858727 0.783951 -vt 0.860435 0.782273 -vt 0.846212 0.818368 -vt 0.856346 0.868421 -vt 0.846212 0.918474 -vt 0.817353 0.960908 -vt 0.723214 0.999217 -vt 0.672267 0.989261 -vt 0.629076 0.960908 -vt 0.590083 0.868421 -vt 0.600217 0.818368 -vt 0.629076 0.775934 -vt 0.723214 0.737625 -vt 0.774162 0.747581 -vt 0.817353 0.775934 -vt 0.499603 0.798246 -vt 0.489439 0.848450 -vt 0.460492 0.891010 -vt 0.417172 0.919448 -vt 0.366071 0.929435 -vt 0.314971 0.919448 -vt 0.271650 0.891010 -vt 0.232540 0.798246 -vt 0.242704 0.748042 -vt 0.271650 0.705481 -vt 0.366071 0.667057 -vt 0.417172 0.677043 -vt 0.460493 0.705481 -vt 0.928571 0.745614 -vt 0.928571 0.763158 -vt 0.928571 0.745614 -vt 0.928571 0.763158 -vt 0.928571 0.745614 -vt 0.964286 0.763158 -vt 0.964286 0.763158 -vt 0.964286 0.763158 -vt 0.964286 0.763158 -vt 0.928571 -0.000000 -vt 1.000000 0.745614 -vt 0.964286 0.745614 -vt 0.928571 0.745614 -vt 0.982143 0.745614 -vt 0.616071 0.684211 -vt 0.857143 0.736842 -vt 0.857143 0.666667 -vt 0.857143 0.701754 -vt 0.857143 0.736842 -vt 0.616071 0.684211 -vt 0.857143 0.736842 -vt 0.616071 0.666667 -vt 0.616071 0.736842 -vt 0.857143 0.684211 -vt 0.616071 0.719298 -vt 0.616071 0.666667 -vt 0.857143 0.736842 -vt 0.642857 0.368421 -vt 0.589286 0.114035 -vt 0.642857 0.114035 -vt 0.589286 0.368421 -vt 0.535714 0.114035 -vt 0.535714 0.368421 -vt 0.482143 0.114035 -vt 0.482143 0.368421 -vt 0.428571 0.114035 -vt 0.428571 0.368421 -vt 0.375000 0.114035 -vt 0.375000 0.368421 -vt 0.321429 0.114035 -vt 0.321429 0.368421 -vt 0.267857 0.114035 -vt 0.267857 0.368421 -vt 0.214286 0.114035 -vt 0.214286 0.368421 -vt 0.160714 0.114035 -vt 0.160714 0.368421 -vt 0.107143 0.114035 -vt 0.107143 0.368421 -vt 0.053571 0.114035 -vt 0.053571 0.368421 -vt 0.000000 0.114035 -vt 0.857143 0.368421 -vt 0.803571 0.114035 -vt 0.857143 0.114035 -vt 0.803571 0.368421 -vt 0.750000 0.114035 -vt 0.750000 0.368421 -vt 0.696429 0.114035 -vt 0.696429 0.368421 -vt 0.696429 0.035088 -vt 0.642857 0.061404 -vt 0.642857 0.035088 -vt 0.750000 0.061404 -vt 0.696429 0.061404 -vt 0.803571 0.035088 -vt 0.750000 0.035088 -vt 0.857143 0.035088 -vt 0.803571 0.061404 -vt 0.000000 0.035088 -vt 0.053571 0.061404 -vt -0.000000 0.061404 -vt 0.053571 0.035088 -vt 0.107143 0.061404 -vt 0.160714 0.035088 -vt 0.107143 0.035088 -vt 0.214286 0.035088 -vt 0.160714 0.061404 -vt 0.267857 0.035088 -vt 0.214286 0.061404 -vt 0.321429 0.061404 -vt 0.267857 0.061404 -vt 0.375000 0.035088 -vt 0.321429 0.035088 -vt 0.428571 0.035088 -vt 0.375000 0.061404 -vt 0.482143 0.035088 -vt 0.428571 0.061404 -vt 0.535714 0.061404 -vt 0.482143 0.061404 -vt 0.589286 0.035088 -vt 0.535714 0.035088 -vt 0.642857 0.035088 -vt 0.696429 0.000000 -vt 0.696429 0.035088 -vt 0.160714 0.035088 -vt 0.214286 0.000000 -vt 0.214286 0.035088 -vt 0.428571 0.035088 -vt 0.482143 0.000000 -vt 0.482143 0.035088 -vt 0.053571 0.035088 -vt 0.107143 0.000000 -vt 0.107143 0.035088 -vt 0.321429 0.035088 -vt 0.375000 0.000000 -vt 0.375000 0.035088 -vt 0.589286 0.035088 -vt 0.642857 0.000000 -vt 0.803571 0.035088 -vt 0.857143 0.000000 -vt 0.857143 0.035088 -vt 0.267857 0.000000 -vt 0.267857 0.035088 -vt 0.535714 0.000000 -vt 0.535714 0.035088 -vt 0.160714 0.000000 -vt 0.428571 0.000000 -vt 0.750000 0.000000 -vt 0.750000 0.035088 -vt 0.000000 0.035088 -vt 0.053571 0.000000 -vt 0.321429 0.000000 -vt 0.589286 0.000000 -vt 0.803571 0.000000 -vt 0.589286 0.061404 -vt 0.321429 0.614035 -vt 0.267857 0.666667 -vt 0.267857 0.614035 -vt 0.589286 0.614035 -vt 0.535714 0.666667 -vt 0.535714 0.614035 -vt 0.750000 0.614035 -vt 0.803571 0.666667 -vt 0.750000 0.666667 -vt 0.214286 0.614035 -vt 0.160714 0.666667 -vt 0.160714 0.614035 -vt 0.482143 0.614035 -vt 0.428571 0.666667 -vt 0.428571 0.614035 -vt 0.696429 0.614035 -vt 0.642857 0.666667 -vt 0.642857 0.614035 -vt 0.107143 0.614035 -vt 0.053571 0.666667 -vt 0.053571 0.614035 -vt 0.375000 0.614035 -vt 0.321429 0.666667 -vt 0.589286 0.666667 -vt 0.857143 0.614035 -vt 0.803571 0.614035 -vt 0.214286 0.666667 -vt 0.482143 0.666667 -vt 0.696429 0.666667 -vt 0.107143 0.666667 -vt 0.375000 0.666667 -vt 0.000000 0.666667 -vt 0.000000 0.614035 -vt 0.919643 0.780702 -vt 0.910714 0.789474 -vt 0.910714 0.780702 -vt 0.928571 0.789474 -vt 0.919643 0.789474 -vt 0.866071 0.780702 -vt 0.857143 0.789474 -vt 0.857143 0.780702 -vt 0.875000 0.789474 -vt 0.866071 0.789474 -vt 0.883929 0.780702 -vt 0.875000 0.780702 -vt 0.892857 0.789474 -vt 0.883929 0.789474 -vt 0.901786 0.780702 -vt 0.892857 0.780702 -vt 0.901786 0.789474 -vt 0.892857 -0.000000 -vt 0.901786 -0.000000 -vt 0.910714 -0.000000 -vt 0.928571 0.780702 -vt 0.919643 -0.000000 -vt 0.928571 0.000000 -vt 0.857143 -0.000000 -vt 0.866071 -0.000000 -vt 0.875000 -0.000000 -vt 0.883929 -0.000000 -vt 0.696429 0.491228 -vt 0.642857 0.368421 -vt 0.696429 0.368421 -vt 0.750000 0.491228 -vt 0.750000 0.368421 -vt 0.803571 0.491228 -vt 0.803571 0.368421 -vt 0.857143 0.491228 -vt 0.857143 0.368421 -vt 0.053571 0.491228 -vt -0.000000 0.368421 -vt 0.053571 0.368421 -vt 0.107143 0.491228 -vt 0.107143 0.368421 -vt 0.160714 0.491228 -vt 0.160714 0.368421 -vt 0.214286 0.491228 -vt 0.214286 0.368421 -vt 0.267857 0.491228 -vt 0.267857 0.368421 -vt 0.321429 0.491228 -vt 0.321429 0.368421 -vt 0.375000 0.491228 -vt 0.375000 0.368421 -vt 0.428571 0.491228 -vt 0.428571 0.368421 -vt 0.482143 0.491228 -vt 0.482143 0.368421 -vt 0.535714 0.491228 -vt 0.535714 0.368421 -vt 0.589286 0.491228 -vt 0.589286 0.368421 -vt 0.642857 0.491228 -vt 0.642857 0.614035 -vt 0.589286 0.491228 -vt 0.642857 0.491228 -vt 0.589286 0.614035 -vt 0.535714 0.491228 -vt 0.535714 0.614035 -vt 0.482143 0.491228 -vt 0.482143 0.614035 -vt 0.428571 0.491228 -vt 0.428571 0.614035 -vt 0.375000 0.491228 -vt 0.375000 0.614035 -vt 0.321429 0.491228 -vt 0.321429 0.614035 -vt 0.267857 0.491228 -vt 0.267857 0.614035 -vt 0.214286 0.491228 -vt 0.214286 0.614035 -vt 0.160714 0.491228 -vt 0.160714 0.614035 -vt 0.107143 0.491228 -vt 0.107143 0.614035 -vt 0.053571 0.491228 -vt 0.053571 0.614035 -vt 0.000000 0.491228 -vt 0.857143 0.614035 -vt 0.803571 0.491228 -vt 0.857143 0.491228 -vt 0.803571 0.614035 -vt 0.750000 0.491228 -vt 0.750000 0.614035 -vt 0.696429 0.491228 -vt 0.696429 0.614035 -vt 0.107143 0.114035 -vt 0.160714 0.061404 -vt 0.160714 0.114035 -vt 0.642857 0.114035 -vt 0.696429 0.061404 -vt 0.696429 0.114035 -vt 0.482143 0.114035 -vt 0.535714 0.061404 -vt 0.535714 0.114035 -vt 0.053571 0.114035 -vt 0.107143 0.061404 -vt 0.428571 0.114035 -vt 0.482143 0.061404 -vt -0.000000 0.114035 -vt 0.053571 0.061404 -vt 0.375000 0.114035 -vt 0.428571 0.061404 -vt 0.803571 0.114035 -vt 0.857143 0.061404 -vt 0.857143 0.114035 -vt 0.321429 0.114035 -vt 0.375000 0.061404 -vt 0.750000 0.114035 -vt 0.803571 0.061404 -vt 0.267857 0.114035 -vt 0.321429 0.061404 -vt 0.750000 0.061404 -vt 0.214286 0.114035 -vt 0.267857 0.061404 -vt 0.214286 0.061404 -vt 0.589286 0.061404 -vt 0.589286 0.114035 -vt 0.642857 0.061404 -vt 0.164839 0.760856 -vt 0.197462 0.700739 -vt 0.222413 0.737426 -vt 0.136271 0.732790 -vt 0.116071 0.667617 -vt 0.160120 0.676225 -vt 0.095871 0.732790 -vt 0.034681 0.700739 -vt 0.072023 0.676225 -vt 0.067304 0.760856 -vt 0.000968 0.780702 -vt 0.009729 0.737426 -vt 0.067304 0.800547 -vt 0.034681 0.860664 -vt 0.009729 0.823977 -vt 0.095871 0.828613 -vt 0.116071 0.893786 -vt 0.072023 0.885178 -vt 0.136271 0.828613 -vt 0.197462 0.860664 -vt 0.160120 0.885178 -vt 0.116071 0.728843 -vt 0.153396 0.744032 -vt 0.078747 0.744032 -vt 0.063286 0.780702 -vt 0.078747 0.817372 -vt 0.116071 0.832561 -vt 0.164839 0.800547 -vt 0.153396 0.817371 -vt 0.231175 0.780702 -vt 0.168856 0.780702 -vt 0.222413 0.823977 -vt 0.919643 0.780702 -vt 0.910714 -0.000000 -vt 0.919643 0.000000 -vt 0.892857 0.780702 -vt 0.883929 -0.000000 -vt 0.892857 -0.000000 -vt 0.883929 0.780702 -vt 0.875000 -0.000000 -vt 0.875000 0.780702 -vt 0.866071 -0.000000 -vt 0.866071 0.780702 -vt 0.857143 0.000000 -vt 0.928571 0.780702 -vt 0.928571 0.000000 -vt 0.910714 0.780702 -vt 0.901786 -0.000000 -vt 0.901786 0.780702 -vt 0.901786 0.789474 -vt 0.892857 0.789474 -vt 0.883929 0.789474 -vt 0.875000 0.789474 -vt 0.866071 0.789474 -vt 0.857143 0.789474 -vt 0.857143 0.780702 -vt 0.928571 0.789474 -vt 0.919643 0.789474 -vt 0.910714 0.789474 -vt 0.919643 0.780702 -vt 0.910714 -0.000000 -vt 0.919643 -0.000000 -vt 0.892857 0.780702 -vt 0.883929 -0.000000 -vt 0.892857 -0.000000 -vt 0.883929 0.780702 -vt 0.875000 -0.000000 -vt 0.875000 0.780702 -vt 0.866071 -0.000000 -vt 0.866071 0.780702 -vt 0.857143 -0.000000 -vt 0.928571 0.780702 -vt 0.928571 0.000000 -vt 0.910714 0.780702 -vt 0.901786 -0.000000 -vt 0.901786 0.780702 -vt 0.910714 0.789474 -vt 0.901786 0.789474 -vt 0.892857 0.789474 -vt 0.883929 0.789474 -vt 0.875000 0.789474 -vt 0.866071 0.789474 -vt 0.857143 0.789474 -vt 0.857143 0.780702 -vt 0.928571 0.789474 -vt 0.919643 0.789474 -vt 0.919643 0.780702 -vt 0.910714 -0.000000 -vt 0.919643 -0.000000 -vt 0.892857 0.780702 -vt 0.883929 -0.000000 -vt 0.892857 -0.000000 -vt 0.883929 0.780702 -vt 0.875000 -0.000000 -vt 0.875000 0.780702 -vt 0.866071 -0.000000 -vt 0.866071 0.780702 -vt 0.857143 -0.000000 -vt 0.928571 0.780702 -vt 0.928571 0.000000 -vt 0.910714 0.780702 -vt 0.901786 -0.000000 -vt 0.901786 0.780702 -vt 0.910714 0.789474 -vt 0.901786 0.789474 -vt 0.892857 0.789474 -vt 0.883929 0.789474 -vt 0.875000 0.789474 -vt 0.866071 0.789474 -vt 0.857143 0.789474 -vt 0.857143 0.780702 -vt 0.928571 0.789474 -vt 0.919643 0.789474 -vt 0.919643 0.780702 -vt 0.910714 -0.000000 -vt 0.919643 -0.000000 -vt 0.892857 0.780702 -vt 0.883929 -0.000000 -vt 0.892857 -0.000000 -vt 0.883929 0.780702 -vt 0.875000 -0.000000 -vt 0.875000 0.780702 -vt 0.866071 -0.000000 -vt 0.866071 0.780702 -vt 0.857143 -0.000000 -vt 0.928571 0.780702 -vt 0.928571 0.000000 -vt 0.910714 0.780702 -vt 0.901786 -0.000000 -vt 0.901786 0.780702 -vt 0.910714 0.789474 -vt 0.901786 0.789474 -vt 0.892857 0.789474 -vt 0.883929 0.789474 -vt 0.875000 0.789474 -vt 0.866071 0.789474 -vt 0.857143 0.789474 -vt 0.857143 0.780702 -vt 0.928571 0.789474 -vt 0.919643 0.789474 -vt 0.000000 0.368421 -vt 0.857143 0.061404 -vt 0.000000 0.000000 -vt 0.857143 0.666667 -vt -0.000000 0.491228 -vt 0.000000 0.614035 -vt -0.000000 0.061404 +mtllib breeding_reactor.mtl +o Cube_Cube.001 +v -0.437500 0.437500 -0.437500 +v -0.437500 0.437500 -0.500000 +v -0.437500 2.687500 -0.500000 +v -0.437500 2.750000 -0.500000 +v -0.437500 2.750000 -0.437500 +v 0.437500 0.437500 -0.500000 +v 0.437500 2.687500 -0.500000 +v 0.437500 2.750000 -0.500000 +v 0.437500 0.000000 -0.500000 +v 0.500000 0.000000 -0.500000 +v 0.500000 0.437500 -0.500000 +v 0.437500 0.000000 -0.437500 +v 0.437500 0.437500 -0.437500 +v 0.500000 0.000000 -0.437500 +v 0.500000 0.437500 -0.437500 +v 0.437500 0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 -0.437500 +v 0.437500 0.500000 -0.437500 +v 0.500000 2.687500 -0.500000 +v 0.500000 2.750000 -0.500000 +v 0.500000 2.687500 -0.437500 +v 0.500000 2.750000 -0.437500 +v 0.437500 2.750000 -0.437500 +v 0.500000 0.437500 0.437500 +v 0.500000 2.687500 0.437500 +v 0.500000 2.750000 0.437500 +v 0.500000 0.000000 0.437500 +v 0.500000 0.000000 0.500000 +v 0.500000 0.437500 0.500000 +v 0.437500 0.000000 0.437500 +v 0.437500 0.000000 0.500000 +v 0.500000 0.500000 0.437500 +v 0.500000 0.500000 0.500000 +v 0.437500 0.500000 0.500000 +v 0.500000 2.687500 0.500000 +v 0.500000 2.750000 0.500000 +v 0.437500 2.750000 0.500000 +v 0.437500 2.687499 -0.437500 +v 0.437500 0.437500 0.437500 +v 0.437500 0.437500 0.500000 +v 0.437500 2.687500 0.500000 +v 0.437500 2.750000 0.437500 +v -0.437500 0.437500 0.500000 +v -0.437500 2.687500 0.500000 +v -0.437500 2.750000 0.500000 +v -0.437500 2.750000 0.437500 +v -0.437500 0.000000 0.500000 +v -0.500000 0.000000 0.500000 +v -0.500000 0.437500 0.500000 +v -0.437500 0.000000 0.437500 +v -0.500000 0.000000 0.437500 +v -0.437500 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 2.687499 0.500000 +v -0.500000 2.687499 0.437500 +v -0.437500 2.687499 0.437500 +v -0.500000 2.749999 0.500000 +v -0.500000 2.749999 0.437500 +v 0.437500 0.500000 0.437500 +v 0.437500 2.687499 0.437500 +v -0.437500 0.437500 0.437500 +v -0.500000 0.437500 0.437500 +v -0.500000 0.500000 0.437500 +v -0.500000 0.437500 -0.437500 +v -0.500000 2.687499 -0.437500 +v -0.500000 2.749999 -0.437500 +v -0.500000 0.000000 -0.437500 +v -0.500000 0.000000 -0.500000 +v -0.500000 0.437500 -0.500000 +v -0.437500 0.000000 -0.437500 +v -0.437500 0.000000 -0.500000 +v -0.500000 0.500000 -0.437500 +v -0.500000 0.500000 -0.500000 +v -0.437500 0.500000 -0.500000 +v -0.437500 0.500000 -0.437500 +v -0.500000 2.687499 -0.500000 +v -0.437500 2.687499 -0.437500 +v -0.500000 2.749999 -0.500000 +v -0.437500 0.500000 0.437500 +v -0.000000 1.250000 -0.482963 +v 0.241481 1.250000 -0.418258 +v 0.418258 1.250000 -0.241481 +v 0.482963 1.250000 0.000000 +v 0.418258 1.250000 0.241482 +v 0.241482 1.250000 0.418258 +v 0.000000 1.250000 0.482963 +v -0.241481 1.250000 0.418258 +v -0.418258 1.250000 0.241482 +v -0.482963 1.250000 0.000000 +v -0.418258 1.250000 -0.241481 +v -0.241482 1.250000 -0.418258 +v -0.000000 1.875000 -0.482963 +v 0.241481 1.875000 -0.418258 +v 0.418258 1.875000 -0.241481 +v 0.482963 1.875000 0.000000 +v 0.418258 1.875000 0.241482 +v 0.241482 1.875000 0.418258 +v 0.000000 1.875000 0.482963 +v -0.241481 1.875000 0.418258 +v -0.418258 1.875000 0.241482 +v -0.482963 1.875000 0.000000 +v -0.418258 1.875000 -0.241481 +v -0.241482 1.875000 -0.418258 +v -0.187500 0.625000 0.250000 +v -0.187500 3.250000 0.250000 +v -0.250000 0.625000 0.250000 +v -0.250000 3.250000 0.250000 +v -0.187500 0.625000 0.187500 +v -0.187500 3.250000 0.187500 +v -0.250000 0.625000 0.187500 +v -0.250000 3.250000 0.187500 +v -0.250000 0.625000 -0.187500 +v -0.250000 3.250000 -0.187500 +v -0.250000 0.625000 -0.250000 +v -0.250000 3.250000 -0.250000 +v -0.187500 0.625000 -0.187500 +v -0.187500 3.250000 -0.187500 +v -0.187500 0.625000 -0.250000 +v -0.187500 3.250000 -0.250000 +v 0.187500 0.625000 -0.250000 +v 0.187500 3.250000 -0.250000 +v 0.250000 0.625000 -0.250000 +v 0.250000 3.250000 -0.250000 +v 0.187500 0.625000 -0.187500 +v 0.187500 3.250000 -0.187500 +v 0.250000 0.625000 -0.187500 +v 0.250000 3.250000 -0.187500 +v 0.250000 0.625000 0.187500 +v 0.250000 3.249999 0.187500 +v 0.250000 0.625000 0.250000 +v 0.250000 3.249999 0.250000 +v 0.187500 0.625000 0.187500 +v 0.187500 3.249999 0.187500 +v 0.187500 0.625000 0.250000 +v 0.187500 3.249999 0.250000 +v 0.000000 0.625000 0.044194 +v 0.000000 3.250000 0.044194 +v -0.044194 0.625000 0.000000 +v -0.044194 3.250000 0.000000 +v 0.044194 0.625000 0.000000 +v 0.044194 3.250000 0.000000 +v 0.000000 0.625000 -0.044194 +v 0.000000 3.250000 -0.044194 +v -0.000000 2.750000 -0.482963 +v -0.000000 3.000000 -0.482963 +v 0.241481 2.750000 -0.418258 +v 0.241481 3.000000 -0.418258 +v 0.418258 2.750000 -0.241481 +v 0.418258 3.000000 -0.241481 +v 0.482963 2.750000 0.000000 +v 0.482963 3.000000 0.000000 +v 0.418258 2.750000 0.241482 +v 0.418258 3.000000 0.241482 +v 0.241482 2.750000 0.418258 +v 0.241482 3.000000 0.418258 +v 0.000000 2.750000 0.482963 +v 0.000000 3.000000 0.482963 +v -0.241481 2.750000 0.418258 +v -0.241481 3.000000 0.418258 +v -0.418258 2.750000 0.241482 +v -0.418258 3.000000 0.241482 +v -0.482963 2.750000 0.000000 +v -0.482963 3.000000 0.000000 +v -0.418258 2.750000 -0.241481 +v -0.418258 3.000000 -0.241481 +v -0.241482 2.750000 -0.418258 +v -0.241482 3.000000 -0.418258 +v -0.000000 0.875000 -0.482963 +v -0.000000 2.500000 -0.482963 +v 0.241481 0.875000 -0.418258 +v 0.241481 2.500000 -0.418258 +v 0.418258 0.875000 -0.241481 +v 0.418258 2.500000 -0.241481 +v 0.482963 0.875000 0.000000 +v 0.482963 2.500000 0.000000 +v 0.418258 0.875000 0.241482 +v 0.418258 2.500000 0.241482 +v 0.241482 0.875000 0.418258 +v 0.241482 2.500000 0.418258 +v 0.000000 0.875000 0.482963 +v 0.000000 2.500000 0.482963 +v -0.241481 0.875000 0.418258 +v -0.241481 2.500000 0.418258 +v -0.418258 0.875000 0.241482 +v -0.418258 2.500000 0.241482 +v -0.482963 0.875000 0.000000 +v -0.482963 2.500000 0.000000 +v -0.418258 0.875000 -0.241481 +v -0.418258 2.500000 -0.241481 +v -0.241482 0.875000 -0.418258 +v -0.241482 2.500000 -0.418258 +v -0.000000 1.250000 -0.482963 +v 0.241481 1.250000 -0.418258 +v 0.418258 1.250000 -0.241481 +v 0.482963 1.250000 0.000000 +v 0.418258 1.250000 0.241482 +v 0.241482 1.250000 0.418258 +v 0.000000 1.250000 0.482963 +v -0.241481 1.250000 0.418258 +v -0.418258 1.250000 0.241482 +v -0.482963 1.250000 0.000000 +v -0.418258 1.250000 -0.241481 +v -0.241482 1.250000 -0.418258 +v -0.000000 1.875000 -0.482963 +v 0.241481 1.875000 -0.418258 +v 0.418258 1.875000 -0.241481 +v 0.482963 1.875000 0.000000 +v 0.418258 1.875000 0.241482 +v 0.241482 1.875000 0.418258 +v 0.000000 1.875000 0.482963 +v -0.241481 1.875000 0.418258 +v -0.418258 1.875000 0.241482 +v -0.482963 1.875000 0.000000 +v -0.418258 1.875000 -0.241481 +v -0.241482 1.875000 -0.418258 +v -0.000000 0.375000 -0.482963 +v -0.000000 0.625000 -0.482963 +v 0.241481 0.375000 -0.418258 +v 0.241481 0.625000 -0.418258 +v 0.418258 0.375000 -0.241481 +v 0.418258 0.625000 -0.241481 +v 0.482963 0.375000 0.000000 +v 0.482963 0.625000 0.000000 +v 0.418258 0.375000 0.241482 +v 0.418258 0.625000 0.241482 +v 0.241482 0.375000 0.418258 +v 0.241482 0.625000 0.418258 +v 0.000000 0.375000 0.482963 +v 0.000000 0.625000 0.482963 +v -0.241481 0.375000 0.418258 +v -0.241481 0.625000 0.418258 +v -0.418258 0.375000 0.241482 +v -0.418258 0.625000 0.241482 +v -0.482963 0.375000 0.000000 +v -0.482963 0.625000 0.000000 +v -0.418258 0.375000 -0.241481 +v -0.418258 0.625000 -0.241481 +v -0.241482 0.375000 -0.418258 +v -0.241482 0.625000 -0.418258 +vt 0.196262 0.875000 +vt 0.327103 0.854167 +vt 0.327103 0.875000 +vt 0.196262 0.791667 +vt 0.327103 0.812500 +vt 0.196262 0.812500 +vt 0.196262 0.895833 +vt 0.327103 0.916667 +vt 0.196262 0.916667 +vt 0.327103 0.937500 +vt 0.196262 0.937500 +vt 0.196262 0.833333 +vt 0.196262 0.854167 +vt 0.327103 0.833333 +vt 0.196262 0.958333 +vt 0.327103 0.979167 +vt 0.196262 0.979167 +vt 0.327103 0.958333 +vt 0.177570 0.187500 +vt 0.168224 0.041667 +vt 0.177570 0.041667 +vt 0.168224 0.187500 +vt 0.158879 0.041667 +vt 0.158879 0.187500 +vt 0.149533 0.041667 +vt 0.186916 0.187500 +vt 0.186916 0.041667 +vt 0.168224 0.020833 +vt 0.168224 0.208333 +vt 0.158879 0.937500 +vt 0.158879 0.208333 +vt 0.149533 0.937500 +vt 0.149533 0.208333 +vt 0.177570 0.208333 +vt 0.168224 0.937500 +vt 0.186916 0.937500 +vt 0.177570 0.937500 +vt 0.168224 0.958333 +vt 0.158879 0.979167 +vt 0.158879 0.958333 +vt 0.196262 0.250000 +vt 0.327103 0.229167 +vt 0.327103 0.250000 +vt 0.196262 0.166667 +vt 0.327103 0.187500 +vt 0.196262 0.187500 +vt 0.196262 0.291667 +vt 0.327103 0.270833 +vt 0.327103 0.291667 +vt 0.327103 0.312500 +vt 0.196262 0.312500 +vt 0.196262 0.208333 +vt 0.196262 0.229167 +vt 0.327103 0.208333 +vt 0.196262 0.333333 +vt 0.327103 0.354167 +vt 0.196262 0.354167 +vt 0.327103 0.333333 +vt 0.130841 0.041667 +vt 0.121495 0.187500 +vt 0.121495 0.041667 +vt 0.112150 0.041667 +vt 0.112150 0.187500 +vt 0.102804 0.041667 +vt 0.140187 0.187500 +vt 0.140187 0.041667 +vt 0.121495 0.020833 +vt 0.130841 0.208333 +vt 0.121495 0.208333 +vt 0.112150 0.937500 +vt 0.112150 0.208333 +vt 0.102804 0.937500 +vt 0.102804 0.208333 +vt 0.121495 0.937500 +vt 0.140187 0.937500 +vt 0.130841 0.937500 +vt 0.121495 0.958333 +vt 0.112150 0.979167 +vt 0.112150 0.958333 +vt 0.196262 0.437500 +vt 0.327103 0.458333 +vt 0.196262 0.458333 +vt 0.196262 0.375000 +vt 0.327103 0.395833 +vt 0.196262 0.395833 +vt 0.196262 0.500000 +vt 0.327103 0.479167 +vt 0.327103 0.500000 +vt 0.327103 0.520833 +vt 0.196262 0.520833 +vt 0.196262 0.416667 +vt 0.327103 0.437500 +vt 0.327103 0.416667 +vt 0.196262 0.541667 +vt 0.327103 0.562500 +vt 0.196262 0.562500 +vt 0.327103 0.541667 +vt 0.084112 0.187500 +vt 0.074766 0.041667 +vt 0.084112 0.041667 +vt 0.074766 0.187500 +vt 0.065421 0.041667 +vt 0.065421 0.187500 +vt 0.056075 0.041667 +vt 0.093458 0.187500 +vt 0.093458 0.041667 +vt 0.074766 0.020833 +vt 0.074766 0.208333 +vt 0.065421 0.937500 +vt 0.065421 0.208333 +vt 0.056075 0.937500 +vt 0.056075 0.208333 +vt 0.084112 0.208333 +vt 0.074766 0.937500 +vt 0.093458 0.208333 +vt 0.084112 0.937500 +vt 0.074766 0.958333 +vt 0.065421 0.979167 +vt 0.065421 0.958333 +vt 0.196262 0.645833 +vt 0.327103 0.666667 +vt 0.196262 0.666667 +vt 0.196262 0.583333 +vt 0.327103 0.604167 +vt 0.196262 0.604167 +vt 0.196262 0.687500 +vt 0.327103 0.708333 +vt 0.196262 0.708333 +vt 0.327103 0.729167 +vt 0.196262 0.729167 +vt 0.196262 0.625000 +vt 0.327103 0.645833 +vt 0.327103 0.625000 +vt 0.196262 0.750000 +vt 0.327103 0.770833 +vt 0.196262 0.770833 +vt 0.327103 0.750000 +vt 0.037383 0.041667 +vt 0.028037 0.187500 +vt 0.028037 0.041667 +vt 0.018692 0.041667 +vt 0.018692 0.187500 +vt 0.009346 0.041667 +vt 0.046729 0.041667 +vt 0.037383 0.187500 +vt 0.028037 0.020833 +vt 0.028037 0.208333 +vt 0.018692 0.208333 +vt 0.028037 0.937500 +vt 0.018692 0.937500 +vt 0.009346 0.937500 +vt 0.009346 0.208333 +vt 0.037383 0.208333 +vt 0.046729 0.937500 +vt 0.037383 0.937500 +vt 0.018692 0.958333 +vt 0.028037 0.979167 +vt 0.018692 0.979167 +vt 0.028037 0.958333 +vt 0.981308 0.958333 +vt 0.971963 0.083333 +vt 0.981308 0.083333 +vt 0.971963 0.958333 +vt 0.962617 0.083333 +vt 0.962617 0.958333 +vt 0.953271 0.083333 +vt 0.990654 0.958333 +vt 0.990654 0.083333 +vt 0.971963 0.062500 +vt 0.962617 0.979167 +vt 0.971963 0.958333 +vt 0.962617 0.083333 +vt 0.971963 0.083333 +vt 0.962617 0.958333 +vt 0.962617 0.083333 +vt 0.962617 0.958333 +vt 0.953271 0.083333 +vt 0.981308 0.958333 +vt 0.981308 0.083333 +vt 0.962617 0.062500 +vt 0.962617 0.979167 +vt 0.981308 0.958333 +vt 0.971963 0.083333 +vt 0.981308 0.083333 +vt 0.971963 0.958333 +vt 0.962617 0.083333 +vt 0.962617 0.958333 +vt 0.953271 0.083333 +vt 0.990654 0.958333 +vt 0.990654 0.083333 +vt 0.971963 0.062500 +vt 0.962617 0.979167 +vt 0.981308 0.958333 +vt 0.971963 0.083333 +vt 0.981308 0.083333 +vt 0.971963 0.958333 +vt 0.962617 0.083333 +vt 0.962617 0.958333 +vt 0.953271 0.083333 +vt 0.990654 0.958333 +vt 0.990654 0.083333 +vt 0.971963 0.062500 +vt 0.962617 0.979167 +vt 0.981308 0.937500 +vt 0.971963 0.083333 +vt 0.981308 0.083333 +vt 0.971963 0.937500 +vt 0.962617 0.083333 +vt 0.962617 0.937500 +vt 0.953271 0.083333 +vt 0.990654 0.937500 +vt 0.990654 0.083333 +vt 0.962617 0.062500 +vt 0.971963 0.062500 +vt 0.962617 0.958333 +vt 0.931373 0.734111 +vt 0.931373 0.891909 +vt 0.809118 0.891909 +vt 0.834588 0.597798 +vt 0.798890 0.459569 +vt 0.834588 0.321339 +vt 0.929832 0.381477 +vt 0.929832 0.538896 +vt 0.808072 0.538896 +vt 0.833899 0.595815 +vt 0.798844 0.459857 +vt 0.833899 0.323899 +vt 0.904019 0.595876 +vt 0.833711 0.595876 +vt 0.833711 0.323185 +vt 0.807667 0.538321 +vt 0.807667 0.380081 +vt 0.930063 0.380081 +vt 0.933314 0.381363 +vt 0.933315 0.541399 +vt 0.808554 0.541399 +vt 0.834321 0.947544 +vt 0.798967 0.811493 +vt 0.834321 0.675442 +vt 0.327103 0.791667 +vt 0.327103 0.895833 +vt 0.149533 0.187500 +vt 0.158879 0.020833 +vt 0.186916 0.208333 +vt 0.168224 0.979167 +vt 0.177570 0.958333 +vt 0.327103 0.166667 +vt 0.196262 0.270833 +vt 0.130841 0.187500 +vt 0.102804 0.187500 +vt 0.112150 0.020833 +vt 0.140187 0.208333 +vt 0.121495 0.979167 +vt 0.130841 0.958333 +vt 0.327103 0.375000 +vt 0.196262 0.479167 +vt 0.056075 0.187500 +vt 0.065421 0.020833 +vt 0.093458 0.937500 +vt 0.074766 0.979167 +vt 0.084112 0.958333 +vt 0.327103 0.583333 +vt 0.327103 0.687500 +vt 0.009346 0.187500 +vt 0.046729 0.187500 +vt 0.018692 0.020833 +vt 0.046729 0.208333 +vt 0.037383 0.958333 +vt 0.953271 0.958333 +vt 0.962617 0.062500 +vt 0.971963 0.979167 +vt 0.953271 0.958333 +vt 0.962617 0.062500 +vt 0.962617 0.979167 +vt 0.953271 0.958333 +vt 0.962617 0.062500 +vt 0.971963 0.979167 +vt 0.953271 0.958333 +vt 0.962617 0.062500 +vt 0.971963 0.979167 +vt 0.953271 0.937500 +vt 0.971963 0.958333 +vt 0.905538 0.949667 +vt 0.870245 0.970808 +vt 0.834953 0.949667 +vt 0.799661 0.813010 +vt 0.809118 0.734111 +vt 0.834953 0.676353 +vt 0.870245 0.655211 +vt 0.905538 0.676353 +vt 0.940830 0.813010 +vt 0.870287 0.299955 +vt 0.905985 0.321339 +vt 0.932118 0.379762 +vt 0.941683 0.459569 +vt 0.932118 0.539376 +vt 0.905985 0.597798 +vt 0.870286 0.619183 +vt 0.808455 0.539375 +vt 0.808455 0.379762 +vt 0.904101 0.596515 +vt 0.868952 0.617605 +vt 0.833803 0.596515 +vt 0.798653 0.460186 +vt 0.808072 0.381477 +vt 0.833803 0.323858 +vt 0.868952 0.302768 +vt 0.904101 0.323858 +vt 0.939251 0.460187 +vt 0.868952 0.302867 +vt 0.904006 0.323899 +vt 0.929667 0.381362 +vt 0.939060 0.459857 +vt 0.929667 0.538353 +vt 0.904006 0.595815 +vt 0.868953 0.616848 +vt 0.808237 0.538353 +vt 0.808238 0.381362 +vt 0.807977 0.538250 +vt 0.798557 0.459530 +vt 0.807977 0.380811 +vt 0.868865 0.302092 +vt 0.939173 0.459530 +vt 0.904019 0.323184 +vt 0.929754 0.380810 +vt 0.929753 0.538250 +vt 0.868865 0.616969 +vt 0.868866 0.617441 +vt 0.833532 0.596241 +vt 0.798199 0.459201 +vt 0.833533 0.322161 +vt 0.868865 0.300961 +vt 0.904198 0.322161 +vt 0.939531 0.459201 +vt 0.930063 0.538321 +vt 0.904198 0.596241 +vt 0.906950 0.599976 +vt 0.870934 0.621417 +vt 0.834919 0.599976 +vt 0.798904 0.461381 +vt 0.808554 0.381363 +vt 0.834919 0.322786 +vt 0.870934 0.301345 +vt 0.906950 0.322786 +vt 0.942965 0.461381 +vt 0.869675 0.654395 +vt 0.905029 0.675442 +vt 0.930910 0.732944 +vt 0.940383 0.811493 +vt 0.930910 0.890042 +vt 0.905029 0.947544 +vt 0.869675 0.968591 +vt 0.808440 0.890042 +vt 0.808440 0.732944 +vt 0.598131 0.604167 +vt 0.560748 0.395833 +vt 0.598131 0.395833 +vt 0.635514 0.604167 +vt 0.635514 0.395833 +vt 0.672897 0.604167 +vt 0.672897 0.395833 +vt 0.710280 0.604167 +vt 0.710280 0.395833 +vt 0.747664 0.604167 +vt 0.747664 0.395833 +vt 0.785047 0.604167 +vt 0.785047 0.395833 +vt 0.373832 0.604167 +vt 0.336449 0.395833 +vt 0.373832 0.395833 +vt 0.411215 0.604167 +vt 0.411215 0.395833 +vt 0.448598 0.604167 +vt 0.448598 0.395833 +vt 0.485981 0.604167 +vt 0.485981 0.395833 +vt 0.523364 0.604167 +vt 0.523364 0.395833 +vt 0.560748 0.604167 +vt 0.560748 0.979167 +vt 0.523364 0.895833 +vt 0.560748 0.895833 +vt 0.523364 0.979167 +vt 0.485981 0.895833 +vt 0.485981 0.979167 +vt 0.448598 0.895833 +vt 0.448598 0.979167 +vt 0.411215 0.895833 +vt 0.411215 0.979167 +vt 0.373832 0.895833 +vt 0.373832 0.979167 +vt 0.336449 0.895833 +vt 0.785047 0.979167 +vt 0.747664 0.895833 +vt 0.785047 0.895833 +vt 0.747664 0.979167 +vt 0.710280 0.895833 +vt 0.710280 0.979167 +vt 0.672897 0.895833 +vt 0.672897 0.979167 +vt 0.635514 0.895833 +vt 0.635514 0.979167 +vt 0.598131 0.895833 +vt 0.598131 0.979167 +vt 0.560748 0.812500 +vt 0.523364 0.604167 +vt 0.560748 0.604167 +vt 0.523364 0.812500 +vt 0.485981 0.604167 +vt 0.485981 0.812500 +vt 0.448598 0.604167 +vt 0.448598 0.812500 +vt 0.411215 0.604167 +vt 0.411215 0.812500 +vt 0.373832 0.604167 +vt 0.373832 0.812500 +vt 0.336449 0.604167 +vt 0.785047 0.812500 +vt 0.747664 0.604167 +vt 0.785047 0.604167 +vt 0.747664 0.812500 +vt 0.710280 0.604167 +vt 0.710280 0.812500 +vt 0.672897 0.604167 +vt 0.672897 0.812500 +vt 0.635514 0.604167 +vt 0.635514 0.812500 +vt 0.598131 0.604167 +vt 0.598131 0.812500 +vt 0.598131 0.395833 +vt 0.560748 0.270833 +vt 0.598131 0.270833 +vt 0.635514 0.395833 +vt 0.635514 0.270833 +vt 0.672897 0.395833 +vt 0.672897 0.270833 +vt 0.710280 0.395833 +vt 0.710280 0.270833 +vt 0.747664 0.395833 +vt 0.747664 0.270833 +vt 0.785047 0.395833 +vt 0.785047 0.270833 +vt 0.373832 0.395833 +vt 0.336449 0.270833 +vt 0.373832 0.270833 +vt 0.411215 0.395833 +vt 0.411215 0.270833 +vt 0.448598 0.395833 +vt 0.448598 0.270833 +vt 0.485981 0.395833 +vt 0.485981 0.270833 +vt 0.523364 0.395833 +vt 0.523364 0.270833 +vt 0.560748 0.395833 +vt 0.560748 0.187500 +vt 0.523364 0.104167 +vt 0.560748 0.104167 +vt 0.523364 0.187500 +vt 0.485981 0.104167 +vt 0.485981 0.187500 +vt 0.448598 0.104167 +vt 0.448598 0.187500 +vt 0.411215 0.104167 +vt 0.411215 0.187500 +vt 0.373832 0.104167 +vt 0.373832 0.187500 +vt 0.336449 0.104167 +vt 0.785047 0.187500 +vt 0.747664 0.104167 +vt 0.785047 0.104167 +vt 0.747664 0.187500 +vt 0.710280 0.104167 +vt 0.710280 0.187500 +vt 0.672897 0.104167 +vt 0.672897 0.187500 +vt 0.635514 0.104167 +vt 0.635514 0.187500 +vt 0.598131 0.104167 +vt 0.598131 0.187500 +vt 0.336449 0.604167 +vt 0.336449 0.979167 +vt 0.336449 0.812500 +vt 0.336449 0.395833 +vt 0.336449 0.187500 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.0000 1.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.3827 0.0000 -0.9239 -vn 0.7071 0.0000 -0.7071 -vn 0.9239 0.0000 -0.3827 -vn 0.9239 -0.0000 0.3827 -vn 0.7071 -0.0000 0.7071 -vn 0.3827 -0.0000 0.9239 -vn -0.3827 -0.0000 0.9239 -vn -0.7071 -0.0000 0.7071 -vn -0.9239 -0.0000 0.3827 -vn -0.9239 0.0000 -0.3827 +vn -0.7071 0.0000 0.7071 vn -0.7071 0.0000 -0.7071 -vn -0.3827 0.0000 -0.9239 -vn -0.2680 -0.7139 -0.6469 -vn 0.0000 -0.7139 -0.7002 -vn -0.4951 -0.7139 -0.4951 -vn -0.6469 -0.7139 -0.2680 -vn -0.7002 -0.7139 0.0000 -vn -0.6469 -0.7139 0.2680 -vn -0.4951 -0.7139 0.4951 -vn -0.2680 -0.7139 0.6469 -vn 0.0000 -0.7139 0.7002 -vn 0.2680 -0.7139 0.6469 -vn 0.4951 -0.7139 0.4951 -vn 0.6469 -0.7139 0.2680 -vn 0.7002 -0.7139 -0.0000 -vn 0.6469 -0.7139 -0.2680 -vn 0.4951 -0.7139 -0.4951 -vn 0.2680 -0.7139 -0.6469 -vn -0.6572 0.3688 -0.6572 -vn -0.0000 0.7345 -0.6786 -vn -0.0000 0.3688 -0.9295 -vn -0.6786 0.7345 0.0000 -vn -0.4798 0.7345 -0.4799 -vn -0.6572 0.3688 0.6572 -vn -0.9295 0.3689 0.0000 -vn 0.0000 0.7345 0.6786 -vn -0.4798 0.7345 0.4799 -vn 0.6572 0.3688 0.6572 -vn 0.0000 0.3688 0.9295 -vn 0.6786 0.7345 0.0000 -vn 0.4798 0.7345 0.4799 -vn 0.6572 0.3688 -0.6572 -vn 0.9295 0.3689 -0.0000 -vn 0.4798 0.7345 -0.4799 -vn 0.6573 0.3689 0.6572 -vn 0.6573 0.3689 -0.6572 -vn 0.4798 0.7345 -0.4798 -vn 0.4798 0.7345 0.4798 -vn -0.6573 0.3688 -0.6572 -vn 0.9295 0.3688 -0.0000 -vn -0.9295 0.3688 0.0000 -vn 0.4799 0.7345 -0.4798 -vn 0.4799 0.7345 0.4798 -vn -0.4799 0.7345 0.4798 -vn -0.4799 0.7345 -0.4798 -vn 0.6573 0.3688 0.6572 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.5000 0.0000 -0.8660 +vn -0.8660 0.0000 -0.5000 +vn -0.8660 0.0000 0.5000 +vn -0.5000 0.0000 0.8660 +vn 0.5000 0.0000 0.8660 +vn 0.8660 0.0000 0.5000 +vn 0.8660 0.0000 -0.5000 +vn 0.5000 0.0000 -0.8660 +vn 0.0000 0.6532 -0.7571 +vn 0.3786 -0.6532 -0.6557 +vn 0.0000 -0.6532 -0.7571 +vn 0.3786 0.6532 -0.6557 +vn 0.6557 -0.6532 -0.3786 +vn 0.6557 0.6532 -0.3786 +vn 0.7571 -0.6532 0.0000 +vn 0.7571 0.6532 0.0000 +vn 0.6557 -0.6532 0.3786 +vn 0.6557 0.6532 0.3786 +vn 0.3786 -0.6532 0.6557 +vn 0.3786 0.6532 0.6557 +vn 0.0000 -0.6532 0.7571 +vn 0.0000 0.6532 0.7571 +vn -0.3786 -0.6532 0.6557 +vn -0.3786 0.6532 0.6557 +vn -0.6557 -0.6532 0.3786 +vn -0.6557 0.6532 0.3786 +vn -0.7571 -0.6532 0.0000 +vn -0.7571 0.6532 0.0000 +vn -0.6557 -0.6532 -0.3786 +vn -0.6557 0.6532 -0.3786 +vn -0.3786 -0.6532 -0.6557 +vn -0.3786 0.6532 -0.6557 +usemtl None s off -f 267/1/1 245/2/1 242/3/1 -f 266/4/2 242/3/2 241/5/2 -f 48/6/3 56/7/3 64/8/3 -f 110/9/4 112/10/4 104/11/4 -f 49/12/4 41/13/4 36/14/4 -f 66/15/3 87/16/3 73/17/3 -f 27/18/3 19/19/3 11/20/3 -f 20/21/3 12/22/3 4/23/3 -f 132/24/4 134/25/4 129/26/4 -f 140/27/3 139/28/3 143/29/3 -f 148/30/4 150/31/4 145/32/4 -f 156/33/3 155/34/3 159/35/3 -f 164/36/4 166/37/4 161/38/4 -f 173/39/3 172/40/3 171/41/3 -f 180/42/4 182/43/4 177/44/4 -f 188/45/3 187/46/3 191/47/3 -f 196/48/4 198/49/4 193/50/4 -f 204/51/3 203/52/3 207/53/3 -f 216/54/3 218/55/3 222/56/3 -f 236/57/4 210/58/4 231/59/4 -f 251/60/3 248/61/3 244/62/3 -f 249/63/3 247/64/3 243/65/3 -f 245/66/3 241/67/3 242/68/3 -f 255/69/3 254/70/3 253/71/3 -f 270/72/1 251/73/1 244/74/1 -f 272/75/5 252/76/5 251/73/5 -f 267/77/4 263/78/4 264/79/4 -f 259/80/4 265/81/4 271/82/4 -f 270/72/4 268/83/4 272/75/4 -f 262/84/4 257/85/4 261/86/4 -f 249/87/1 259/88/1 271/89/1 -f 265/90/5 249/87/5 271/89/5 -f 260/91/6 250/92/6 265/90/6 -f 260/93/2 243/94/2 247/95/2 -f 252/96/6 269/97/6 248/98/6 -f 262/99/1 255/100/1 253/101/1 -f 261/102/5 256/103/5 255/100/5 -f 256/103/6 258/104/6 254/105/6 -f 269/97/2 244/74/2 248/98/2 -f 258/104/2 253/106/2 254/105/2 -f 246/107/6 266/4/6 241/5/6 -f 264/108/5 246/107/5 245/109/5 -f 321/110/2 336/111/2 335/112/2 -f 327/113/4 335/114/4 336/115/4 -f 317/116/5 327/113/5 329/117/5 -f 330/118/4 318/119/4 320/120/4 -f 307/121/4 323/122/4 325/123/4 -f 312/124/2 307/121/2 325/123/2 -f 312/124/3 310/125/3 309/126/3 -f 323/127/5 310/125/5 314/128/5 -f 328/129/5 313/130/5 318/119/5 -f 313/130/3 315/131/3 311/132/3 -f 315/131/2 320/133/2 311/132/2 -f 317/116/3 331/134/3 321/110/3 -f 326/135/3 306/136/3 308/137/3 -f 306/136/5 332/138/5 319/139/5 -f 324/140/2 326/135/2 308/137/2 -f 324/140/4 332/141/4 333/142/4 -f 364/143/6 361/144/6 366/145/6 -f 360/146/4 339/147/4 338/148/4 -f 352/149/4 356/150/4 355/151/4 -f 350/152/1 345/153/1 356/150/1 -f 344/154/3 345/153/3 341/155/3 -f 346/156/6 352/157/6 355/158/6 -f 348/159/6 338/148/6 343/160/6 -f 342/161/3 348/159/3 343/160/3 -f 339/162/1 347/163/1 342/161/1 -f 353/164/3 357/165/3 351/166/3 -f 340/167/3 361/144/3 337/168/3 -f 366/145/4 349/169/4 364/143/4 -f 365/170/1 340/167/1 349/171/1 -f 357/165/1 367/172/1 351/166/1 -f 368/173/4 363/174/4 367/172/4 -f 362/175/6 353/164/6 363/176/6 -f 267/1/1 264/177/1 245/2/1 -f 266/4/2 267/1/2 242/3/2 -f 64/8/3 35/178/3 40/179/3 -f 35/178/3 34/180/3 40/179/3 -f 34/180/3 38/181/3 40/179/3 -f 40/179/3 42/182/3 48/6/3 -f 42/182/3 44/183/3 48/6/3 -f 44/183/3 46/184/3 48/6/3 -f 48/6/3 50/185/3 52/186/3 -f 52/186/3 54/187/3 48/6/3 -f 54/187/3 56/7/3 48/6/3 -f 56/7/3 58/188/3 60/189/3 -f 60/189/3 62/190/3 56/7/3 -f 62/190/3 64/8/3 56/7/3 -f 64/8/3 40/179/3 48/6/3 -f 112/10/4 97/191/4 98/192/4 -f 98/192/4 99/193/4 100/194/4 -f 100/194/4 101/195/4 102/196/4 -f 102/196/4 103/197/4 104/11/4 -f 104/11/4 105/198/4 106/199/4 -f 106/199/4 107/200/4 108/201/4 -f 108/201/4 109/202/4 110/9/4 -f 110/9/4 111/203/4 112/10/4 -f 112/10/4 98/192/4 104/11/4 -f 98/192/4 100/194/4 104/11/4 -f 100/194/4 102/196/4 104/11/4 -f 104/11/4 106/199/4 108/201/4 -f 108/201/4 110/9/4 104/11/4 -f 36/14/4 63/204/4 61/205/4 -f 61/205/4 59/206/4 57/207/4 -f 57/207/4 55/208/4 53/209/4 -f 53/209/4 51/210/4 49/12/4 -f 49/12/4 47/211/4 45/212/4 -f 45/212/4 43/213/4 41/13/4 -f 41/13/4 39/214/4 37/215/4 -f 37/215/4 33/216/4 36/14/4 -f 36/14/4 61/205/4 57/207/4 -f 57/207/4 53/209/4 36/14/4 -f 53/209/4 49/12/4 36/14/4 -f 49/12/4 45/212/4 41/13/4 -f 41/13/4 37/215/4 36/14/4 -f 73/17/3 113/217/3 70/218/3 -f 70/218/3 69/219/3 89/220/3 -f 89/220/3 85/221/3 81/222/3 -f 81/222/3 77/223/3 66/15/3 -f 66/15/3 65/224/3 93/225/3 -f 93/225/3 91/226/3 87/16/3 -f 87/16/3 83/227/3 79/228/3 -f 79/228/3 74/229/3 73/17/3 -f 73/17/3 70/218/3 89/220/3 -f 89/220/3 81/222/3 73/17/3 -f 81/222/3 66/15/3 73/17/3 -f 66/15/3 93/225/3 87/16/3 -f 87/16/3 79/228/3 73/17/3 -f 3/230/3 2/231/3 27/18/3 -f 2/231/3 31/232/3 27/18/3 -f 31/232/3 29/233/3 27/18/3 -f 27/18/3 25/234/3 19/19/3 -f 25/234/3 23/235/3 19/19/3 -f 23/235/3 21/236/3 19/19/3 -f 19/19/3 17/237/3 15/238/3 -f 15/238/3 13/239/3 19/19/3 -f 13/239/3 11/20/3 19/19/3 -f 11/20/3 9/240/3 7/241/3 -f 7/241/3 5/242/3 11/20/3 -f 5/242/3 3/230/3 11/20/3 -f 3/230/3 27/18/3 11/20/3 -f 4/23/3 1/243/3 28/244/3 -f 1/243/3 32/245/3 28/244/3 -f 32/245/3 30/246/3 28/244/3 -f 28/244/3 26/247/3 20/21/3 -f 26/247/3 24/248/3 20/21/3 -f 24/248/3 22/249/3 20/21/3 -f 20/21/3 18/250/3 16/251/3 -f 16/251/3 14/252/3 20/21/3 -f 14/252/3 12/22/3 20/21/3 -f 12/22/3 10/253/3 8/254/3 -f 8/254/3 6/255/3 12/22/3 -f 6/255/3 4/23/3 12/22/3 -f 4/23/3 28/244/3 20/21/3 -f 129/26/4 130/256/4 136/257/4 -f 136/257/4 131/258/4 132/24/4 -f 132/24/4 133/259/4 134/25/4 -f 134/25/4 135/260/4 129/26/4 -f 129/26/4 136/257/4 132/24/4 -f 139/28/3 138/261/3 137/262/3 -f 137/262/3 144/263/3 139/28/3 -f 144/263/3 143/29/3 139/28/3 -f 143/29/3 142/264/3 141/265/3 -f 141/265/3 140/27/3 143/29/3 -f 145/32/4 146/266/4 152/267/4 -f 152/267/4 147/268/4 145/32/4 -f 147/268/4 148/30/4 145/32/4 -f 148/30/4 149/269/4 150/31/4 -f 150/31/4 151/270/4 145/32/4 -f 155/34/3 154/271/3 153/272/3 -f 153/272/3 160/273/3 155/34/3 -f 160/273/3 159/35/3 155/34/3 -f 159/35/3 158/274/3 157/275/3 -f 157/275/3 156/33/3 159/35/3 -f 161/38/4 162/276/4 168/277/4 -f 168/277/4 163/278/4 164/36/4 -f 164/36/4 165/279/4 166/37/4 -f 166/37/4 167/280/4 161/38/4 -f 161/38/4 168/277/4 164/36/4 -f 171/41/3 170/281/3 169/282/3 -f 169/282/3 176/283/3 171/41/3 -f 176/283/3 175/284/3 171/41/3 -f 175/284/3 174/285/3 171/41/3 -f 174/285/3 173/39/3 171/41/3 -f 177/44/4 178/286/4 184/287/4 -f 184/287/4 179/288/4 180/42/4 -f 180/42/4 181/289/4 182/43/4 -f 182/43/4 183/290/4 177/44/4 -f 177/44/4 184/287/4 180/42/4 -f 187/46/3 186/291/3 191/47/3 -f 186/291/3 185/292/3 191/47/3 -f 185/292/3 192/293/3 191/47/3 -f 191/47/3 190/294/3 189/295/3 -f 189/295/3 188/45/3 191/47/3 -f 193/50/4 194/296/4 200/297/4 -f 200/297/4 195/298/4 196/48/4 -f 196/48/4 197/299/4 198/49/4 -f 198/49/4 199/300/4 193/50/4 -f 193/50/4 200/297/4 196/48/4 -f 203/52/3 202/301/3 207/53/3 -f 202/301/3 201/302/3 207/53/3 -f 201/302/3 208/303/3 207/53/3 -f 207/53/3 206/304/3 205/305/3 -f 205/305/3 204/51/3 207/53/3 -f 226/306/3 213/307/3 216/54/3 -f 213/307/3 214/308/3 216/54/3 -f 214/308/3 215/309/3 216/54/3 -f 216/54/3 212/310/3 211/311/3 -f 211/311/3 217/312/3 216/54/3 -f 217/312/3 218/55/3 216/54/3 -f 218/55/3 219/313/3 220/314/3 -f 220/314/3 221/315/3 218/55/3 -f 221/315/3 222/56/3 218/55/3 -f 222/56/3 223/316/3 224/317/3 -f 224/317/3 225/318/3 222/56/3 -f 225/318/3 226/306/3 222/56/3 -f 226/306/3 216/54/3 222/56/3 -f 231/59/4 239/319/4 238/320/4 -f 238/320/4 234/321/4 231/59/4 -f 234/321/4 233/322/4 231/59/4 -f 233/322/4 228/323/4 227/324/4 -f 227/324/4 240/325/4 233/322/4 -f 240/325/4 236/57/4 233/322/4 -f 236/57/4 235/326/4 210/58/4 -f 235/326/4 230/327/4 210/58/4 -f 230/327/4 229/328/4 210/58/4 -f 210/58/4 209/329/4 231/59/4 -f 209/329/4 237/330/4 231/59/4 -f 237/330/4 232/331/4 231/59/4 -f 231/59/4 233/322/4 236/57/4 -f 251/60/3 252/332/3 248/61/3 -f 249/63/3 250/333/3 247/64/3 -f 245/66/3 246/334/3 241/67/3 -f 255/69/3 256/335/3 254/70/3 -f 270/72/1 272/75/1 251/73/1 -f 272/75/5 268/336/5 252/76/5 -f 267/77/4 266/337/4 263/78/4 -f 259/80/4 260/338/4 265/81/4 -f 270/72/4 269/339/4 268/83/4 -f 262/84/4 258/340/4 257/85/4 -f 249/87/1 243/94/1 259/88/1 -f 265/90/5 250/92/5 249/87/5 -f 260/91/6 247/341/6 250/92/6 -f 260/93/2 259/88/2 243/94/2 -f 252/96/6 268/342/6 269/97/6 -f 262/99/1 261/102/1 255/100/1 -f 261/102/5 257/343/5 256/103/5 -f 256/103/6 257/343/6 258/104/6 -f 269/97/2 270/72/2 244/74/2 -f 258/104/2 262/344/2 253/106/2 -f 246/107/6 263/345/6 266/4/6 -f 264/108/5 263/345/5 246/107/5 -f 321/110/2 331/134/2 336/111/2 -f 327/113/4 334/346/4 335/114/4 -f 317/116/5 334/346/5 327/113/5 -f 330/118/4 328/129/4 318/119/4 -f 307/121/4 305/347/4 323/122/4 -f 312/124/2 309/126/2 307/121/2 -f 312/124/3 314/128/3 310/125/3 -f 323/127/5 305/348/5 310/125/5 -f 328/129/5 316/349/5 313/130/5 -f 313/130/3 316/349/3 315/131/3 -f 315/131/2 330/350/2 320/133/2 -f 317/116/3 329/117/3 331/134/3 -f 326/135/3 322/351/3 306/136/3 -f 306/136/5 322/351/5 332/138/5 -f 324/140/2 333/142/2 326/135/2 -f 324/140/4 319/352/4 332/141/4 -f 364/143/6 337/168/6 361/144/6 -f 360/146/4 358/353/4 339/147/4 -f 352/149/4 350/152/4 356/150/4 -f 350/152/1 341/155/1 345/153/1 -f 344/154/3 346/156/3 345/153/3 -f 346/156/6 344/154/6 352/157/6 -f 348/159/6 360/146/6 338/148/6 -f 342/161/3 347/163/3 348/159/3 -f 339/162/1 358/354/1 347/163/1 -f 353/164/3 354/355/3 357/165/3 -f 340/167/3 359/356/3 361/144/3 -f 366/145/4 365/357/4 349/169/4 -f 365/170/1 359/356/1 340/167/1 -f 357/165/1 368/173/1 367/172/1 -f 368/173/4 362/358/4 363/174/4 -f 362/175/6 354/355/6 353/164/6 +f 78/1/1 7/2/1 39/3/1 +f 78/4/2 24/5/2 5/6/2 +f 1/7/2 19/8/2 76/9/2 +f 76/9/3 16/10/3 75/11/3 +f 4/12/4 7/2/4 3/13/4 +f 5/6/3 8/14/3 4/12/3 +f 2/15/1 13/16/1 1/17/1 +f 75/11/4 6/18/4 2/15/4 +f 6/19/4 10/20/4 9/21/4 +f 11/22/5 14/23/5 10/20/5 +f 15/24/2 12/25/2 14/23/2 +f 13/26/6 9/21/6 12/27/6 +f 14/23/1 9/28/1 10/20/1 +f 6/19/4 17/29/4 11/22/4 +f 17/29/5 22/30/5 18/31/5 +f 11/22/5 18/31/5 15/24/5 +f 18/31/2 39/32/2 19/33/2 +f 16/34/4 20/35/4 17/29/4 +f 16/34/6 39/36/6 7/37/6 +f 21/38/3 24/39/3 23/40/3 +f 7/37/4 21/38/4 20/35/4 +f 20/35/5 23/40/5 22/30/5 +f 39/41/1 26/42/1 61/43/1 +f 39/44/6 43/45/6 24/46/6 +f 19/47/6 40/48/6 60/49/6 +f 19/47/3 33/50/3 18/51/3 +f 23/52/5 26/42/5 22/53/5 +f 24/46/3 27/54/3 23/52/3 +f 15/55/1 40/56/1 13/57/1 +f 18/51/5 25/58/5 15/55/5 +f 28/59/5 30/60/5 29/61/5 +f 30/60/2 32/62/2 29/61/2 +f 41/63/6 31/64/6 32/62/6 +f 40/65/4 28/59/4 31/66/4 +f 32/62/1 28/67/1 29/61/1 +f 30/60/5 33/68/5 34/69/5 +f 34/69/2 42/70/2 35/71/2 +f 30/60/2 35/71/2 41/63/2 +f 35/71/6 61/72/6 60/73/6 +f 33/68/5 36/74/5 34/69/5 +f 33/68/4 61/75/4 26/76/4 +f 37/77/3 43/78/3 38/79/3 +f 26/76/5 37/77/5 36/74/5 +f 36/74/2 38/79/2 42/70/2 +f 42/80/1 57/81/1 61/82/1 +f 61/83/4 47/84/4 43/85/4 +f 60/86/4 62/87/4 80/88/4 +f 60/86/3 53/89/3 35/90/3 +f 38/91/2 45/92/2 42/80/2 +f 43/85/3 46/93/3 38/91/3 +f 41/94/1 62/95/1 40/96/1 +f 35/90/2 44/97/2 41/94/2 +f 44/98/2 49/99/2 48/100/2 +f 50/101/6 52/102/6 49/99/6 +f 63/103/4 51/104/4 52/102/4 +f 62/105/5 48/100/5 51/106/5 +f 52/102/1 48/107/1 49/99/1 +f 44/98/2 54/108/2 50/101/2 +f 54/108/6 56/109/6 64/110/6 +f 50/101/6 64/110/6 63/103/6 +f 64/110/4 57/111/4 80/112/4 +f 53/113/2 55/114/2 54/108/2 +f 80/115/5 45/116/5 53/113/5 +f 58/117/3 47/118/3 59/119/3 +f 45/116/2 58/117/2 55/114/2 +f 55/114/6 59/119/6 56/109/6 +f 56/120/1 78/121/1 57/122/1 +f 57/123/5 5/124/5 47/125/5 +f 62/126/5 76/127/5 80/128/5 +f 80/128/3 73/129/3 64/130/3 +f 59/131/6 66/132/6 56/120/6 +f 59/131/3 5/124/3 67/133/3 +f 63/134/1 1/135/1 62/136/1 +f 64/130/6 65/137/6 63/134/6 +f 68/138/6 70/139/6 69/140/6 +f 70/139/4 72/141/4 69/140/4 +f 2/142/5 71/143/5 72/141/5 +f 71/144/2 65/145/2 68/138/2 +f 72/141/1 68/146/1 69/140/1 +f 65/145/6 74/147/6 70/139/6 +f 75/148/4 77/149/4 3/150/4 +f 2/142/4 74/147/4 75/148/4 +f 75/148/5 78/151/5 76/152/5 +f 73/153/6 77/149/6 74/147/6 +f 73/153/2 78/154/2 66/155/2 +f 4/156/3 67/157/3 5/158/3 +f 66/155/6 79/159/6 77/149/6 +f 3/150/4 79/159/4 4/156/4 +f 106/160/2 107/161/2 105/162/2 +f 108/163/6 111/164/6 107/161/6 +f 112/165/4 109/166/4 111/164/4 +f 110/167/5 105/162/5 109/168/5 +f 111/164/1 105/169/1 107/161/1 +f 108/163/3 110/170/3 112/165/3 +f 114/171/6 115/172/6 113/173/6 +f 116/174/4 119/175/4 115/172/4 +f 120/176/5 117/177/5 119/175/5 +f 118/178/2 113/173/2 117/179/2 +f 119/175/1 113/180/1 115/172/1 +f 116/174/3 118/181/3 120/176/3 +f 122/182/4 123/183/4 121/184/4 +f 124/185/5 127/186/5 123/183/5 +f 128/187/2 125/188/2 127/186/2 +f 126/189/6 121/184/6 125/190/6 +f 127/186/1 121/191/1 123/183/1 +f 124/185/3 126/192/3 128/187/3 +f 130/193/5 131/194/5 129/195/5 +f 132/196/2 135/197/2 131/194/2 +f 136/198/6 133/199/6 135/197/6 +f 134/200/4 129/195/4 133/201/4 +f 135/197/1 129/202/1 131/194/1 +f 132/196/3 134/203/3 136/198/3 +f 138/204/7 139/205/7 137/206/7 +f 140/207/8 143/208/8 139/205/8 +f 144/209/9 141/210/9 143/208/9 +f 142/211/10 137/206/10 141/212/10 +f 139/205/1 141/213/1 137/214/1 +f 140/207/3 142/215/3 144/209/3 +f 154/216/3 150/217/3 166/218/3 +f 159/219/1 163/220/1 167/221/1 +f 178/222/3 174/223/3 190/224/3 +f 183/225/1 187/226/1 191/227/1 +f 194/228/3 204/229/3 200/230/3 +f 215/231/3 213/232/3 209/233/3 +f 226/234/3 222/235/3 238/236/3 +f 231/237/1 235/238/1 239/239/1 +f 78/1/1 3/13/1 7/2/1 +f 78/4/2 39/240/2 24/5/2 +f 1/7/2 13/241/2 19/8/2 +f 76/9/3 19/8/3 16/10/3 +f 4/12/4 8/14/4 7/2/4 +f 5/6/3 24/5/3 8/14/3 +f 2/15/1 6/18/1 13/16/1 +f 75/11/4 16/10/4 6/18/4 +f 6/19/4 11/22/4 10/20/4 +f 11/22/5 15/24/5 14/23/5 +f 15/24/2 13/242/2 12/25/2 +f 13/26/6 6/19/6 9/21/6 +f 14/23/1 12/243/1 9/28/1 +f 6/19/4 16/34/4 17/29/4 +f 17/29/5 20/35/5 22/30/5 +f 11/22/5 17/29/5 18/31/5 +f 18/31/2 22/30/2 39/32/2 +f 16/34/4 7/37/4 20/35/4 +f 16/34/6 19/244/6 39/36/6 +f 21/38/3 8/245/3 24/39/3 +f 7/37/4 8/246/4 21/38/4 +f 20/35/5 21/38/5 23/40/5 +f 39/41/1 22/53/1 26/42/1 +f 39/44/6 61/247/6 43/45/6 +f 19/47/6 13/248/6 40/48/6 +f 19/47/3 60/49/3 33/50/3 +f 23/52/5 27/54/5 26/42/5 +f 24/46/3 43/45/3 27/54/3 +f 15/55/1 25/58/1 40/56/1 +f 18/51/5 33/50/5 25/58/5 +f 28/59/5 25/249/5 30/60/5 +f 30/60/2 41/63/2 32/62/2 +f 41/63/6 40/250/6 31/64/6 +f 40/65/4 25/249/4 28/59/4 +f 32/62/1 31/251/1 28/67/1 +f 30/60/5 25/249/5 33/68/5 +f 34/69/2 36/74/2 42/70/2 +f 30/60/2 34/69/2 35/71/2 +f 35/71/6 42/70/6 61/72/6 +f 33/68/5 26/76/5 36/74/5 +f 33/68/4 60/252/4 61/75/4 +f 37/77/3 27/253/3 43/78/3 +f 26/76/5 27/254/5 37/77/5 +f 36/74/2 37/77/2 38/79/2 +f 42/80/1 45/92/1 57/81/1 +f 61/83/4 57/255/4 47/84/4 +f 60/86/4 40/256/4 62/87/4 +f 60/86/3 80/88/3 53/89/3 +f 38/91/2 46/93/2 45/92/2 +f 43/85/3 47/84/3 46/93/3 +f 41/94/1 44/97/1 62/95/1 +f 35/90/2 53/89/2 44/97/2 +f 44/98/2 50/101/2 49/99/2 +f 50/101/6 63/103/6 52/102/6 +f 63/103/4 62/257/4 51/104/4 +f 62/105/5 44/98/5 48/100/5 +f 52/102/1 51/258/1 48/107/1 +f 44/98/2 53/113/2 54/108/2 +f 54/108/6 55/114/6 56/109/6 +f 50/101/6 54/108/6 64/110/6 +f 64/110/4 56/109/4 57/111/4 +f 53/113/2 45/116/2 55/114/2 +f 80/115/5 57/259/5 45/116/5 +f 58/117/3 46/260/3 47/118/3 +f 45/116/2 46/261/2 58/117/2 +f 55/114/6 58/117/6 59/119/6 +f 56/120/1 66/132/1 78/121/1 +f 57/123/5 78/262/5 5/124/5 +f 62/126/5 1/263/5 76/127/5 +f 80/128/3 76/127/3 73/129/3 +f 59/131/6 67/133/6 66/132/6 +f 59/131/3 47/125/3 5/124/3 +f 63/134/1 65/137/1 1/135/1 +f 64/130/6 73/129/6 65/137/6 +f 68/138/6 65/145/6 70/139/6 +f 70/139/4 2/142/4 72/141/4 +f 2/142/5 1/264/5 71/143/5 +f 71/144/2 1/265/2 65/145/2 +f 72/141/1 71/266/1 68/146/1 +f 65/145/6 73/153/6 74/147/6 +f 75/148/4 74/147/4 77/149/4 +f 2/142/4 70/139/4 74/147/4 +f 75/148/5 3/150/5 78/151/5 +f 73/153/6 66/155/6 77/149/6 +f 73/153/2 76/267/2 78/154/2 +f 4/156/3 79/159/3 67/157/3 +f 66/155/6 67/268/6 79/159/6 +f 3/150/4 77/149/4 79/159/4 +f 106/160/2 108/163/2 107/161/2 +f 108/163/6 112/165/6 111/164/6 +f 112/165/4 110/269/4 109/166/4 +f 110/167/5 106/160/5 105/162/5 +f 111/164/1 109/270/1 105/169/1 +f 108/163/3 106/271/3 110/170/3 +f 114/171/6 116/174/6 115/172/6 +f 116/174/4 120/176/4 119/175/4 +f 120/176/5 118/272/5 117/177/5 +f 118/178/2 114/171/2 113/173/2 +f 119/175/1 117/273/1 113/180/1 +f 116/174/3 114/274/3 118/181/3 +f 122/182/4 124/185/4 123/183/4 +f 124/185/5 128/187/5 127/186/5 +f 128/187/2 126/275/2 125/188/2 +f 126/189/6 122/182/6 121/184/6 +f 127/186/1 125/276/1 121/191/1 +f 124/185/3 122/277/3 126/192/3 +f 130/193/5 132/196/5 131/194/5 +f 132/196/2 136/198/2 135/197/2 +f 136/198/6 134/278/6 133/199/6 +f 134/200/4 130/193/4 129/195/4 +f 135/197/1 133/279/1 129/202/1 +f 132/196/3 130/280/3 134/203/3 +f 138/204/7 140/207/7 139/205/7 +f 140/207/8 144/209/8 143/208/8 +f 144/209/9 142/281/9 141/210/9 +f 142/211/10 138/204/10 137/206/10 +f 139/205/1 143/208/1 141/213/1 +f 140/207/3 138/282/3 142/215/3 +f 150/217/3 148/283/3 146/284/3 +f 146/284/3 168/285/3 166/218/3 +f 166/218/3 164/286/3 162/287/3 +f 162/287/3 160/288/3 166/218/3 +f 160/288/3 158/289/3 166/218/3 +f 158/289/3 156/290/3 154/216/3 +f 154/216/3 152/291/3 150/217/3 +f 150/217/3 146/284/3 166/218/3 +f 158/289/3 154/216/3 166/218/3 +f 167/221/1 145/292/1 147/293/1 +f 147/293/1 149/294/1 151/295/1 +f 151/295/1 153/296/1 155/297/1 +f 155/297/1 157/298/1 151/295/1 +f 157/298/1 159/219/1 151/295/1 +f 159/219/1 161/299/1 163/220/1 +f 163/220/1 165/300/1 167/221/1 +f 167/221/1 147/293/1 159/219/1 +f 147/293/1 151/295/1 159/219/1 +f 174/223/3 172/301/3 170/302/3 +f 170/302/3 192/303/3 190/224/3 +f 190/224/3 188/304/3 186/305/3 +f 186/305/3 184/306/3 190/224/3 +f 184/306/3 182/307/3 190/224/3 +f 182/307/3 180/308/3 178/222/3 +f 178/222/3 176/309/3 174/223/3 +f 174/223/3 170/302/3 190/224/3 +f 182/307/3 178/222/3 190/224/3 +f 191/227/1 169/310/1 171/311/1 +f 171/311/1 173/312/1 175/313/1 +f 175/313/1 177/314/1 179/315/1 +f 179/315/1 181/316/1 175/313/1 +f 181/316/1 183/225/1 175/313/1 +f 183/225/1 185/317/1 187/226/1 +f 187/226/1 189/318/1 191/227/1 +f 191/227/1 171/311/1 183/225/1 +f 171/311/1 175/313/1 183/225/1 +f 204/229/3 203/319/3 202/320/3 +f 202/320/3 201/321/3 200/230/3 +f 200/230/3 199/322/3 196/323/3 +f 199/322/3 198/324/3 196/323/3 +f 198/324/3 197/325/3 196/323/3 +f 196/323/3 195/326/3 194/228/3 +f 194/228/3 193/327/3 204/229/3 +f 204/229/3 202/320/3 200/230/3 +f 196/323/3 194/228/3 200/230/3 +f 205/328/3 216/329/3 215/231/3 +f 215/231/3 214/330/3 213/232/3 +f 213/232/3 212/331/3 209/233/3 +f 212/331/3 211/332/3 209/233/3 +f 211/332/3 210/333/3 209/233/3 +f 209/233/3 208/334/3 207/335/3 +f 207/335/3 206/336/3 209/233/3 +f 206/336/3 205/328/3 209/233/3 +f 205/328/3 215/231/3 209/233/3 +f 222/235/3 220/337/3 218/338/3 +f 218/338/3 240/339/3 238/236/3 +f 238/236/3 236/340/3 234/341/3 +f 234/341/3 232/342/3 238/236/3 +f 232/342/3 230/343/3 238/236/3 +f 230/343/3 228/344/3 226/234/3 +f 226/234/3 224/345/3 222/235/3 +f 222/235/3 218/338/3 238/236/3 +f 230/343/3 226/234/3 238/236/3 +f 239/239/1 217/346/1 219/347/1 +f 219/347/1 221/348/1 223/349/1 +f 223/349/1 225/350/1 227/351/1 +f 227/351/1 229/352/1 223/349/1 +f 229/352/1 231/237/1 223/349/1 +f 231/237/1 233/353/1 235/238/1 +f 235/238/1 237/354/1 239/239/1 +f 239/239/1 219/347/1 231/237/1 +f 219/347/1 223/349/1 231/237/1 s 1 -f 403/359/1 431/360/7 404/361/1 -f 432/362/7 429/363/8 431/360/7 -f 430/364/8 427/365/9 429/363/8 -f 428/366/9 425/367/2 427/365/9 -f 426/368/2 423/369/10 425/367/2 -f 424/370/10 421/371/11 423/369/10 -f 422/372/11 419/373/12 421/371/11 -f 420/374/12 417/375/6 419/373/12 -f 418/376/6 415/377/13 417/375/6 -f 416/378/13 413/379/14 415/377/13 -f 414/380/14 411/381/15 413/379/14 -f 412/382/15 409/383/5 411/381/15 -f 410/384/5 407/385/16 409/386/5 -f 408/387/16 405/388/17 407/385/16 -f 406/389/17 401/390/18 405/388/17 -f 402/391/18 404/361/1 401/390/18 -f 496/392/19 467/393/20 484/394/20 -f 496/392/19 477/395/21 468/396/19 -f 480/397/22 477/395/21 481/398/21 -f 495/399/23 475/400/22 480/397/22 -f 495/401/23 471/402/24 473/403/23 -f 494/404/24 465/405/25 471/402/24 -f 492/406/26 465/405/25 493/407/25 -f 491/408/27 466/409/26 492/406/26 -f 490/410/28 479/411/27 491/408/27 -f 490/410/28 476/412/29 478/413/28 -f 488/414/30 476/412/29 489/415/29 -f 487/416/31 474/417/30 488/414/30 -f 486/418/32 472/419/31 487/416/31 -f 486/418/32 470/420/33 469/421/32 -f 483/422/34 470/420/33 485/423/33 -f 86/424/6 505/425/12 498/426/12 -f 71/427/7 511/428/1 72/429/1 -f 80/430/5 510/431/15 82/432/15 -f 67/433/9 508/434/8 68/435/8 -f 76/436/17 506/437/16 78/438/16 -f 88/439/13 512/440/6 86/424/6 -f 114/441/10 503/442/2 497/443/2 -f 72/429/1 501/444/18 75/445/18 -f 82/432/15 499/446/14 84/447/14 -f 68/435/8 509/448/7 71/427/7 -f 78/438/16 507/449/5 80/430/5 -f 498/426/12 92/450/11 94/451/11 -f 497/452/2 504/453/9 67/433/9 -f 75/445/18 502/454/17 76/436/17 -f 84/447/14 500/455/13 88/439/13 -f 94/451/11 90/456/10 114/441/10 -f 483/422/34 467/393/20 482/457/34 -f 560/458/11 117/459/12 556/460/12 -f 558/461/7 545/462/8 554/463/8 -f 552/464/17 121/465/16 122/466/17 -f 555/467/6 119/468/13 550/469/13 -f 553/470/9 96/471/2 548/472/2 -f 551/473/18 124/474/1 559/475/1 -f 549/476/14 126/477/15 127/478/15 -f 547/479/10 116/480/11 560/458/11 -f 559/475/1 546/481/7 558/461/7 -f 128/482/5 121/465/16 557/483/16 -f 556/460/12 118/484/6 555/467/6 -f 554/463/8 95/485/9 553/470/9 -f 552/464/17 123/486/18 551/473/18 -f 550/469/13 120/487/14 549/476/14 -f 548/472/2 115/488/10 547/479/10 -f 127/478/15 125/489/5 128/490/5 -f 562/491/35 577/492/36 563/493/37 -f 562/491/35 583/494/38 584/495/39 -f 571/496/40 583/497/38 573/498/41 -f 571/496/40 581/499/42 582/500/43 -f 567/501/44 581/499/42 569/502/45 -f 567/501/44 579/503/46 580/504/47 -f 575/505/48 579/503/46 566/506/49 -f 575/505/48 577/492/36 578/507/50 -f 575/505/48 565/508/2 576/509/8 -f 563/493/37 576/509/8 564/510/1 -f 573/511/41 561/512/17 574/513/5 -f 571/496/40 574/514/5 572/515/14 -f 569/502/45 572/515/14 570/516/6 -f 567/501/44 570/516/6 568/517/11 -f 566/506/49 568/517/11 565/508/2 -f 562/491/35 564/510/1 561/512/17 -f 288/518/18 290/519/1 289/520/18 -f 287/521/17 289/520/18 291/522/17 -f 286/523/16 291/522/17 292/524/16 -f 285/525/5 292/524/16 293/526/5 -f 284/527/15 293/528/5 294/529/15 -f 283/530/14 294/529/15 295/531/14 -f 282/532/13 295/531/14 296/533/13 -f 281/534/6 296/533/13 297/535/6 -f 280/536/12 297/535/6 298/537/12 -f 279/538/11 298/537/12 299/539/11 -f 278/540/10 299/539/11 300/541/10 -f 277/542/2 300/541/10 301/543/2 -f 276/544/9 301/543/2 302/545/9 -f 275/546/8 302/545/9 303/547/8 -f 274/548/7 303/547/8 304/549/7 -f 273/550/1 304/549/7 290/519/1 -f 370/551/1 372/552/7 369/553/1 -f 371/554/7 374/555/8 372/552/7 -f 373/556/8 376/557/9 374/555/8 -f 375/558/9 378/559/2 376/557/9 -f 377/560/2 380/561/10 378/559/2 -f 379/562/10 382/563/11 380/561/10 -f 381/564/11 384/565/12 382/563/11 -f 383/566/12 386/567/6 384/565/12 -f 385/568/6 388/569/13 386/567/6 -f 387/570/13 390/571/14 388/569/13 -f 389/572/14 392/573/15 390/571/14 -f 391/574/15 394/575/5 392/573/15 -f 393/576/5 396/577/16 394/578/5 -f 395/579/16 398/580/17 396/577/16 -f 397/581/17 400/582/18 398/580/17 -f 399/583/18 369/553/1 400/582/18 -f 434/584/14 436/585/13 433/586/13 -f 438/587/1 440/588/18 437/589/18 -f 442/590/9 444/591/8 441/592/8 -f 445/593/15 435/594/14 434/584/14 -f 447/595/2 443/596/9 442/590/9 -f 449/597/5 446/598/15 445/593/15 -f 451/599/10 448/600/2 447/595/2 -f 453/601/16 450/602/5 449/603/5 -f 455/604/11 452/605/10 451/599/10 -f 457/606/17 454/607/16 453/601/16 -f 459/608/12 456/609/11 455/604/11 -f 437/589/18 458/610/17 457/606/17 -f 461/611/6 460/612/12 459/608/12 -f 433/586/13 462/613/6 461/611/6 -f 441/592/8 464/614/7 463/615/7 -f 463/615/7 439/616/1 438/587/1 -f 529/617/19 513/618/21 537/619/19 -f 527/620/22 535/621/23 514/622/22 -f 525/623/24 540/624/25 536/625/24 -f 523/626/26 543/627/27 541/628/26 -f 521/629/28 534/630/29 533/631/28 -f 519/632/30 539/633/31 538/634/30 -f 517/635/32 531/636/33 542/637/32 -f 525/623/24 535/621/23 526/638/23 -f 527/620/22 513/618/21 528/639/21 -f 523/626/26 540/624/25 524/640/25 -f 521/629/28 543/627/27 522/641/27 -f 520/642/29 538/634/30 534/630/29 -f 517/635/32 539/633/31 518/643/31 -f 515/644/34 531/636/33 516/645/33 -f 529/617/19 544/646/20 530/647/20 -f 515/644/34 544/646/20 532/648/34 -f 586/649/35 588/650/1 585/651/17 -f 590/652/49 592/653/11 589/654/2 -f 591/655/51 594/656/6 592/653/11 -f 593/657/45 596/658/14 594/656/6 -f 595/659/40 598/660/5 596/658/14 -f 597/661/41 585/651/17 598/662/5 -f 587/663/37 600/664/8 588/650/1 -f 599/665/52 589/654/2 600/664/8 -f 587/663/37 602/666/53 599/665/52 -f 599/665/52 603/667/46 590/652/49 -f 591/655/51 603/667/46 604/668/54 -f 593/657/45 604/668/54 605/669/42 -f 595/659/40 605/669/42 606/670/43 -f 595/659/40 607/671/38 597/672/41 -f 586/649/35 607/673/38 608/674/39 -f 586/649/35 601/675/36 587/663/37 -f 610/676/55 612/677/1 609/678/17 -f 614/679/56 616/680/11 613/681/2 -f 615/682/44 618/683/6 616/680/11 -f 617/684/45 620/685/14 618/683/6 -f 619/686/40 622/687/5 620/685/14 -f 621/688/57 609/678/17 622/689/5 -f 611/690/37 624/691/8 612/677/1 -f 623/692/48 613/681/2 624/691/8 -f 623/692/48 625/693/36 626/694/58 -f 623/692/48 627/695/46 614/679/56 -f 615/682/44 627/695/46 628/696/59 -f 615/682/44 629/697/42 617/684/45 -f 619/686/40 629/697/42 630/698/60 -f 619/686/40 631/699/38 621/700/57 -f 610/676/55 631/701/38 632/702/61 -f 610/676/55 625/693/36 611/690/37 -f 634/703/35 636/704/1 633/705/17 -f 638/706/56 640/707/11 637/708/2 -f 639/709/62 642/710/6 640/707/11 -f 641/711/45 644/712/14 642/710/6 -f 643/713/40 646/714/5 644/712/14 -f 645/715/57 633/705/17 646/716/5 -f 635/717/37 648/718/8 636/704/1 -f 647/719/48 637/708/2 648/718/8 -f 647/719/48 649/720/36 650/721/58 -f 647/719/48 651/722/46 638/706/56 -f 639/709/62 651/722/46 652/723/59 -f 639/709/62 653/724/42 641/711/45 -f 643/713/40 653/724/42 654/725/60 -f 643/713/40 655/726/38 645/727/57 -f 634/703/35 655/728/38 656/729/61 -f 634/703/35 649/720/36 635/717/37 -f 658/730/35 660/731/1 657/732/17 -f 662/733/56 664/734/11 661/735/2 -f 663/736/62 666/737/6 664/734/11 -f 665/738/45 668/739/14 666/737/6 -f 667/740/40 670/741/5 668/739/14 -f 669/742/57 657/732/17 670/743/5 -f 659/744/37 672/745/8 660/731/1 -f 671/746/48 661/735/2 672/745/8 -f 671/746/48 673/747/36 674/748/58 -f 671/746/48 675/749/46 662/733/56 -f 663/736/62 675/749/46 676/750/59 -f 663/736/62 677/751/42 665/738/45 -f 667/740/40 677/751/42 678/752/60 -f 667/740/40 679/753/38 669/754/57 -f 658/730/35 679/755/38 680/756/61 -f 658/730/35 673/747/36 659/744/37 -f 403/359/1 432/362/7 431/360/7 -f 432/362/7 430/364/8 429/363/8 -f 430/364/8 428/366/9 427/365/9 -f 428/366/9 426/368/2 425/367/2 -f 426/368/2 424/370/10 423/369/10 -f 424/370/10 422/372/11 421/371/11 -f 422/372/11 420/374/12 419/373/12 -f 420/374/12 418/376/6 417/375/6 -f 418/376/6 416/378/13 415/377/13 -f 416/378/13 414/380/14 413/379/14 -f 414/380/14 412/382/15 411/381/15 -f 412/382/15 410/757/5 409/383/5 -f 410/384/5 408/387/16 407/385/16 -f 408/387/16 406/389/17 405/388/17 -f 406/389/17 402/391/18 401/390/18 -f 402/391/18 403/359/1 404/361/1 -f 496/392/19 468/396/19 467/393/20 -f 496/392/19 481/398/21 477/395/21 -f 480/397/22 475/400/22 477/395/21 -f 495/399/23 473/758/23 475/400/22 -f 495/401/23 494/404/24 471/402/24 -f 494/404/24 493/407/25 465/405/25 -f 492/406/26 466/409/26 465/405/25 -f 491/408/27 479/411/27 466/409/26 -f 490/410/28 478/413/28 479/411/27 -f 490/410/28 489/415/29 476/412/29 -f 488/414/30 474/417/30 476/412/29 -f 487/416/31 472/419/31 474/417/30 -f 486/418/32 469/421/32 472/419/31 -f 486/418/32 485/423/33 470/420/33 -f 483/422/34 482/457/34 470/420/33 -f 86/424/6 512/440/6 505/425/12 -f 71/427/7 509/448/7 511/428/1 -f 80/430/5 507/449/5 510/431/15 -f 67/433/9 504/453/9 508/434/8 -f 76/436/17 502/454/17 506/437/16 -f 88/439/13 500/455/13 512/440/6 -f 114/441/10 90/456/10 503/442/2 -f 72/429/1 511/428/1 501/444/18 -f 82/432/15 510/431/15 499/446/14 -f 68/435/8 508/434/8 509/448/7 -f 78/438/16 506/437/16 507/449/5 -f 498/426/12 505/425/12 92/450/11 -f 497/452/2 503/759/2 504/453/9 -f 75/445/18 501/444/18 502/454/17 -f 84/447/14 499/446/14 500/455/13 -f 94/451/11 92/450/11 90/456/10 -f 483/422/34 484/394/20 467/393/20 -f 560/458/11 116/480/11 117/459/12 -f 558/461/7 546/481/7 545/462/8 -f 552/464/17 557/483/16 121/465/16 -f 555/467/6 118/484/6 119/468/13 -f 553/470/9 95/485/9 96/471/2 -f 551/473/18 123/486/18 124/474/1 -f 549/476/14 120/487/14 126/477/15 -f 547/479/10 115/488/10 116/480/11 -f 559/475/1 124/474/1 546/481/7 -f 128/482/5 125/760/5 121/465/16 -f 556/460/12 117/459/12 118/484/6 -f 554/463/8 545/462/8 95/485/9 -f 552/464/17 122/466/17 123/486/18 -f 550/469/13 119/468/13 120/487/14 -f 548/472/2 96/471/2 115/488/10 -f 127/478/15 126/477/15 125/489/5 -f 562/491/35 584/495/39 577/492/36 -f 562/491/35 573/511/41 583/494/38 -f 571/496/40 582/500/43 583/497/38 -f 571/496/40 569/502/45 581/499/42 -f 567/501/44 580/504/47 581/499/42 -f 567/501/44 566/506/49 579/503/46 -f 575/505/48 578/507/50 579/503/46 -f 575/505/48 563/493/37 577/492/36 -f 575/505/48 566/506/49 565/508/2 -f 563/493/37 575/505/48 576/509/8 -f 573/511/41 562/491/35 561/512/17 -f 571/496/40 573/498/41 574/514/5 -f 569/502/45 571/496/40 572/515/14 -f 567/501/44 569/502/45 570/516/6 -f 566/506/49 567/501/44 568/517/11 -f 562/491/35 563/493/37 564/510/1 -f 288/518/18 273/550/1 290/519/1 -f 287/521/17 288/518/18 289/520/18 -f 286/523/16 287/521/17 291/522/17 -f 285/525/5 286/523/16 292/524/16 -f 284/527/15 285/761/5 293/528/5 -f 283/530/14 284/527/15 294/529/15 -f 282/532/13 283/530/14 295/531/14 -f 281/534/6 282/532/13 296/533/13 -f 280/536/12 281/534/6 297/535/6 -f 279/538/11 280/536/12 298/537/12 -f 278/540/10 279/538/11 299/539/11 -f 277/542/2 278/540/10 300/541/10 -f 276/544/9 277/542/2 301/543/2 -f 275/546/8 276/544/9 302/545/9 -f 274/548/7 275/546/8 303/547/8 -f 273/550/1 274/548/7 304/549/7 -f 370/551/1 371/554/7 372/552/7 -f 371/554/7 373/556/8 374/555/8 -f 373/556/8 375/558/9 376/557/9 -f 375/558/9 377/560/2 378/559/2 -f 377/560/2 379/562/10 380/561/10 -f 379/562/10 381/564/11 382/563/11 -f 381/564/11 383/566/12 384/565/12 -f 383/566/12 385/568/6 386/567/6 -f 385/568/6 387/570/13 388/569/13 -f 387/570/13 389/572/14 390/571/14 -f 389/572/14 391/574/15 392/573/15 -f 391/574/15 393/762/5 394/575/5 -f 393/576/5 395/579/16 396/577/16 -f 395/579/16 397/581/17 398/580/17 -f 397/581/17 399/583/18 400/582/18 -f 399/583/18 370/551/1 369/553/1 -f 434/584/14 435/594/14 436/585/13 -f 438/587/1 439/616/1 440/588/18 -f 442/590/9 443/596/9 444/591/8 -f 445/593/15 446/598/15 435/594/14 -f 447/595/2 448/600/2 443/596/9 -f 449/597/5 450/763/5 446/598/15 -f 451/599/10 452/605/10 448/600/2 -f 453/601/16 454/607/16 450/602/5 -f 455/604/11 456/609/11 452/605/10 -f 457/606/17 458/610/17 454/607/16 -f 459/608/12 460/612/12 456/609/11 -f 437/589/18 440/588/18 458/610/17 -f 461/611/6 462/613/6 460/612/12 -f 433/586/13 436/585/13 462/613/6 -f 441/592/8 444/591/8 464/614/7 -f 463/615/7 464/614/7 439/616/1 -f 529/617/19 528/639/21 513/618/21 -f 527/620/22 526/638/23 535/621/23 -f 525/623/24 524/640/25 540/624/25 -f 523/626/26 522/641/27 543/627/27 -f 521/629/28 520/642/29 534/630/29 -f 519/632/30 518/643/31 539/633/31 -f 517/635/32 516/645/33 531/636/33 -f 525/623/24 536/625/24 535/621/23 -f 527/620/22 514/622/22 513/618/21 -f 523/626/26 541/628/26 540/624/25 -f 521/629/28 533/631/28 543/627/27 -f 520/642/29 519/632/30 538/634/30 -f 517/635/32 542/637/32 539/633/31 -f 515/644/34 532/648/34 531/636/33 -f 529/617/19 537/619/19 544/646/20 -f 515/644/34 530/647/20 544/646/20 -f 586/649/35 587/663/37 588/650/1 -f 590/652/49 591/655/51 592/653/11 -f 591/655/51 593/657/45 594/656/6 -f 593/657/45 595/659/40 596/658/14 -f 595/659/40 597/672/41 598/660/5 -f 597/661/41 586/649/35 585/651/17 -f 587/663/37 599/665/52 600/664/8 -f 599/665/52 590/652/49 589/654/2 -f 587/663/37 601/675/36 602/666/53 -f 599/665/52 602/666/53 603/667/46 -f 591/655/51 590/652/49 603/667/46 -f 593/657/45 591/655/51 604/668/54 -f 595/659/40 593/657/45 605/669/42 -f 595/659/40 606/670/43 607/671/38 -f 586/649/35 597/661/41 607/673/38 -f 586/649/35 608/674/39 601/675/36 -f 610/676/55 611/690/37 612/677/1 -f 614/679/56 615/682/44 616/680/11 -f 615/682/44 617/684/45 618/683/6 -f 617/684/45 619/686/40 620/685/14 -f 619/686/40 621/700/57 622/687/5 -f 621/688/57 610/676/55 609/678/17 -f 611/690/37 623/692/48 624/691/8 -f 623/692/48 614/679/56 613/681/2 -f 623/692/48 611/690/37 625/693/36 -f 623/692/48 626/694/58 627/695/46 -f 615/682/44 614/679/56 627/695/46 -f 615/682/44 628/696/59 629/697/42 -f 619/686/40 617/684/45 629/697/42 -f 619/686/40 630/698/60 631/699/38 -f 610/676/55 621/688/57 631/701/38 -f 610/676/55 632/702/61 625/693/36 -f 634/703/35 635/717/37 636/704/1 -f 638/706/56 639/709/62 640/707/11 -f 639/709/62 641/711/45 642/710/6 -f 641/711/45 643/713/40 644/712/14 -f 643/713/40 645/727/57 646/714/5 -f 645/715/57 634/703/35 633/705/17 -f 635/717/37 647/719/48 648/718/8 -f 647/719/48 638/706/56 637/708/2 -f 647/719/48 635/717/37 649/720/36 -f 647/719/48 650/721/58 651/722/46 -f 639/709/62 638/706/56 651/722/46 -f 639/709/62 652/723/59 653/724/42 -f 643/713/40 641/711/45 653/724/42 -f 643/713/40 654/725/60 655/726/38 -f 634/703/35 645/715/57 655/728/38 -f 634/703/35 656/729/61 649/720/36 -f 658/730/35 659/744/37 660/731/1 -f 662/733/56 663/736/62 664/734/11 -f 663/736/62 665/738/45 666/737/6 -f 665/738/45 667/740/40 668/739/14 -f 667/740/40 669/754/57 670/741/5 -f 669/742/57 658/730/35 657/732/17 -f 659/744/37 671/746/48 672/745/8 -f 671/746/48 662/733/56 661/735/2 -f 671/746/48 659/744/37 673/747/36 -f 671/746/48 674/748/58 675/749/46 -f 663/736/62 662/733/56 675/749/46 -f 663/736/62 676/750/59 677/751/42 -f 667/740/40 665/738/45 677/751/42 -f 667/740/40 678/752/60 679/753/38 -f 658/730/35 669/742/57 679/755/38 -f 658/730/35 680/756/61 673/747/36 +f 104/355/11 81/356/4 92/357/11 +f 103/358/12 92/357/11 91/359/12 +f 102/360/6 91/359/12 90/361/6 +f 101/362/13 90/361/6 89/363/13 +f 100/364/14 89/363/13 88/365/14 +f 99/366/2 88/365/14 87/367/2 +f 98/368/15 87/369/2 86/370/15 +f 97/371/16 86/370/15 85/372/16 +f 96/373/5 85/372/16 84/374/5 +f 95/375/17 84/374/5 83/376/17 +f 94/377/18 83/376/17 82/378/18 +f 93/379/4 82/378/18 81/356/4 +f 146/380/19 147/381/20 145/382/21 +f 148/383/22 149/384/23 147/381/20 +f 150/385/24 151/386/25 149/384/23 +f 152/387/26 153/388/27 151/386/25 +f 154/389/28 155/390/29 153/388/27 +f 156/391/30 157/392/31 155/390/29 +f 158/393/32 159/394/33 157/395/31 +f 160/396/34 161/397/35 159/394/33 +f 162/398/36 163/399/37 161/397/35 +f 164/400/38 165/401/39 163/399/37 +f 166/402/40 167/403/41 165/401/39 +f 168/404/42 145/382/21 167/403/41 +f 170/405/19 206/406/22 205/407/19 +f 172/408/22 207/409/24 206/406/22 +f 174/410/24 208/411/26 207/409/24 +f 176/412/26 209/413/28 208/411/26 +f 178/414/28 210/415/30 209/413/28 +f 180/416/30 211/417/32 210/415/30 +f 182/418/32 212/419/34 211/420/32 +f 184/421/34 213/422/36 212/419/34 +f 186/423/36 214/424/38 213/422/36 +f 188/425/38 215/426/40 214/424/38 +f 190/427/40 216/428/42 215/426/40 +f 192/429/42 205/407/19 216/428/42 +f 204/430/42 169/431/21 191/432/41 +f 203/433/40 191/432/41 189/434/39 +f 202/435/38 189/434/39 187/436/37 +f 201/437/36 187/436/37 185/438/35 +f 200/439/34 185/438/35 183/440/33 +f 199/441/32 183/440/33 181/442/31 +f 198/443/30 181/444/31 179/445/29 +f 197/446/28 179/445/29 177/447/27 +f 196/448/26 177/447/27 175/449/25 +f 195/450/24 175/449/25 173/451/23 +f 194/452/22 173/451/23 171/453/20 +f 193/454/19 171/453/20 169/431/21 +f 218/455/19 219/456/20 217/457/21 +f 220/458/22 221/459/23 219/456/20 +f 222/460/24 223/461/25 221/459/23 +f 224/462/26 225/463/27 223/461/25 +f 226/464/28 227/465/29 225/463/27 +f 228/466/30 229/467/31 227/465/29 +f 230/468/32 231/469/33 229/470/31 +f 232/471/34 233/472/35 231/469/33 +f 234/473/36 235/474/37 233/472/35 +f 236/475/38 237/476/39 235/474/37 +f 238/477/40 239/478/41 237/476/39 +f 240/479/42 217/457/21 239/478/41 +f 104/355/11 93/379/4 81/356/4 +f 103/358/12 104/355/11 92/357/11 +f 102/360/6 103/358/12 91/359/12 +f 101/362/13 102/360/6 90/361/6 +f 100/364/14 101/362/13 89/363/13 +f 99/366/2 100/364/14 88/365/14 +f 98/368/15 99/480/2 87/369/2 +f 97/371/16 98/368/15 86/370/15 +f 96/373/5 97/371/16 85/372/16 +f 95/375/17 96/373/5 84/374/5 +f 94/377/18 95/375/17 83/376/17 +f 93/379/4 94/377/18 82/378/18 +f 146/380/19 148/383/22 147/381/20 +f 148/383/22 150/385/24 149/384/23 +f 150/385/24 152/387/26 151/386/25 +f 152/387/26 154/389/28 153/388/27 +f 154/389/28 156/391/30 155/390/29 +f 156/391/30 158/481/32 157/392/31 +f 158/393/32 160/396/34 159/394/33 +f 160/396/34 162/398/36 161/397/35 +f 162/398/36 164/400/38 163/399/37 +f 164/400/38 166/402/40 165/401/39 +f 166/402/40 168/404/42 167/403/41 +f 168/404/42 146/380/19 145/382/21 +f 170/405/19 172/408/22 206/406/22 +f 172/408/22 174/410/24 207/409/24 +f 174/410/24 176/412/26 208/411/26 +f 176/412/26 178/414/28 209/413/28 +f 178/414/28 180/416/30 210/415/30 +f 180/416/30 182/482/32 211/417/32 +f 182/418/32 184/421/34 212/419/34 +f 184/421/34 186/423/36 213/422/36 +f 186/423/36 188/425/38 214/424/38 +f 188/425/38 190/427/40 215/426/40 +f 190/427/40 192/429/42 216/428/42 +f 192/429/42 170/405/19 205/407/19 +f 204/430/42 193/454/19 169/431/21 +f 203/433/40 204/430/42 191/432/41 +f 202/435/38 203/433/40 189/434/39 +f 201/437/36 202/435/38 187/436/37 +f 200/439/34 201/437/36 185/438/35 +f 199/441/32 200/439/34 183/440/33 +f 198/443/30 199/483/32 181/444/31 +f 197/446/28 198/443/30 179/445/29 +f 196/448/26 197/446/28 177/447/27 +f 195/450/24 196/448/26 175/449/25 +f 194/452/22 195/450/24 173/451/23 +f 193/454/19 194/452/22 171/453/20 +f 218/455/19 220/458/22 219/456/20 +f 220/458/22 222/460/24 221/459/23 +f 222/460/24 224/462/26 223/461/25 +f 224/462/26 226/464/28 225/463/27 +f 226/464/28 228/466/30 227/465/29 +f 228/466/30 230/484/32 229/467/31 +f 230/468/32 232/471/34 231/469/33 +f 232/471/34 234/473/36 233/472/35 +f 234/473/36 236/475/38 235/474/37 +f 236/475/38 238/477/40 237/476/39 +f 238/477/40 240/479/42 239/478/41 +f 240/479/42 218/455/19 217/457/21 diff --git a/src/main/resources/assets/hbm/models/weapons/amat.obj b/src/main/resources/assets/hbm/models/weapons/amat.obj new file mode 100644 index 000000000..cfb16ab61 --- /dev/null +++ b/src/main/resources/assets/hbm/models/weapons/amat.obj @@ -0,0 +1,10682 @@ +# Blender v2.79 (sub 0) OBJ File: 'amat.blend' +# www.blender.org +o Bolt +v -0.625260 0.501309 -5.750000 +v -0.601343 0.443566 -5.937500 +v -0.529589 0.270339 -5.875000 +v 0.000001 0.669195 -2.664513 +v 0.044195 0.625001 -2.477013 +v 0.044195 0.625001 -2.664513 +v -0.044193 0.625001 -2.477013 +v 0.000001 0.580807 -2.477013 +v 0.000001 0.580807 -2.664513 +v 0.000001 0.669195 -2.477013 +v -0.044193 0.625001 -2.664513 +v -0.529589 0.270339 -5.750000 +v -0.553507 0.328081 -5.687500 +v -0.601343 0.443566 -5.687500 +v -0.625260 0.501309 -5.875000 +v -0.553507 0.328081 -5.937500 +v -0.163320 0.692650 -5.750000 +v -0.091567 0.519423 -5.937500 +v -0.139403 0.634908 -5.687500 +v -0.091567 0.519423 -5.687500 +v -0.611249 0.467484 -5.812500 +v -0.923879 0.242317 -5.724112 +v -0.577425 0.385824 -5.724112 +v -0.923879 0.242317 -5.900887 +v -0.543600 0.304163 -5.812500 +v -0.890055 0.160657 -5.812500 +v -0.957704 0.323978 -5.812500 +v -1.046370 0.048074 -5.856694 +v -0.964710 0.177570 -5.945082 +v -0.930885 0.095909 -5.856694 +v -1.154849 0.146647 -5.724112 +v -1.154849 0.146647 -5.900887 +v -1.121025 0.064986 -5.812500 +v -1.032359 0.340890 -5.856694 +v -1.114019 0.211394 -5.945082 +v -1.147844 0.293054 -5.856694 +v -1.032359 0.340890 -5.768305 +v -1.114019 0.211394 -5.679918 +v -0.998534 0.259230 -5.679918 +v -0.930885 0.095909 -5.768305 +v -0.998534 0.259230 -5.945082 +v -0.964710 0.177570 -5.679918 +v -1.046370 0.048074 -5.768305 +v -1.080195 0.129734 -5.945082 +v -1.080195 0.129734 -5.679918 +v -1.188674 0.228307 -5.812500 +v -1.147844 0.293054 -5.768305 +v -0.067650 0.461680 -5.750000 +v -0.067650 0.461680 -5.875000 +v -0.139403 0.634908 -5.937500 +v 0.120699 0.834059 -6.562500 +v 0.120699 0.415942 -6.562500 +v -0.241401 0.625001 -6.562500 +v -0.120735 0.625001 -2.664513 +v 0.060369 0.520440 -2.664513 +v 0.060369 0.729561 -2.664513 +v -0.120701 0.834059 -6.562500 +v -0.209058 0.745701 -2.937500 +v -0.120699 0.834059 -2.937500 +v -0.209060 0.745701 -6.562500 +v -0.241399 0.625001 -2.937500 +v -0.209058 0.504301 -2.937500 +v -0.209060 0.504301 -6.562500 +v -0.120699 0.415942 -2.937500 +v -0.120701 0.415942 -6.562500 +v 0.000001 0.383601 -2.937500 +v -0.000001 0.383601 -6.562500 +v 0.120701 0.415942 -2.937500 +v 0.209059 0.504301 -2.937500 +v 0.209057 0.504301 -6.562500 +v 0.241401 0.625001 -2.937500 +v 0.241399 0.625001 -6.562500 +v 0.209059 0.745701 -2.937500 +v 0.209058 0.745701 -6.562500 +v 0.120701 0.834059 -2.937500 +v 0.000001 0.866401 -2.937500 +v 0.120737 0.625001 -2.789513 +v 0.104561 0.564633 -2.789513 +v 0.060369 0.520440 -2.789513 +v 0.000001 0.504265 -2.789513 +v -0.060367 0.520440 -2.789513 +v -0.104560 0.564633 -2.789513 +v -0.060367 0.729561 -2.789513 +v 0.000001 0.745737 -2.789513 +v -0.120735 0.625001 -2.789513 +v 0.060369 0.729561 -2.789513 +v -0.104560 0.685369 -2.789513 +v 0.104562 0.685369 -2.789513 +v 0.104562 0.685369 -2.664513 +v 0.000001 0.504265 -2.664513 +v 0.120737 0.625001 -2.664513 +v -0.104560 0.685369 -2.664513 +v 0.000001 0.745737 -2.664513 +v -0.060367 0.520440 -2.664513 +v 0.104561 0.564633 -2.664513 +v -0.060367 0.729561 -2.664513 +v -0.104560 0.564633 -2.664513 +v -0.163320 0.692650 -5.875000 +v -0.577425 0.385824 -5.900888 +v -0.000001 0.866401 -6.562500 +vt 0.751740 0.819444 +vt 0.744780 0.812500 +vt 0.747100 0.791667 +vt 0.832947 0.979167 +vt 0.839907 0.986111 +vt 0.832947 0.986111 +vt 0.842227 0.979167 +vt 0.842227 0.986111 +vt 0.839907 0.972222 +vt 0.832947 0.965278 +vt 0.839907 0.965278 +vt 0.839907 0.993056 +vt 0.839907 0.979167 +vt 0.832947 0.972222 +vt 0.751740 0.791667 +vt 0.754060 0.798611 +vt 0.754060 0.812500 +vt 0.747100 0.819444 +vt 0.744780 0.798611 +vt 0.832947 0.993056 +vt 0.682135 0.791667 +vt 0.700696 0.777778 +vt 0.700696 0.791667 +vt 0.700696 0.770833 +vt 0.682135 0.756944 +vt 0.700696 0.756944 +vt 0.682135 0.798611 +vt 0.700696 0.812500 +vt 0.682135 0.812500 +vt 0.703016 0.791667 +vt 0.716937 0.805556 +vt 0.703016 0.805556 +vt 0.716937 0.777778 +vt 0.703016 0.763889 +vt 0.716937 0.763889 +vt 0.716937 0.819444 +vt 0.703016 0.819444 +vt 0.716937 0.791667 +vt 0.733179 0.770833 +vt 0.728538 0.756944 +vt 0.733179 0.756944 +vt 0.733179 0.791667 +vt 0.728538 0.777778 +vt 0.733179 0.777778 +vt 0.721578 0.791667 +vt 0.726218 0.777778 +vt 0.726218 0.791667 +vt 0.728538 0.812500 +vt 0.733179 0.798611 +vt 0.733179 0.812500 +vt 0.740139 0.777778 +vt 0.742459 0.770833 +vt 0.742459 0.777778 +vt 0.719258 0.770833 +vt 0.721578 0.777778 +vt 0.719258 0.777778 +vt 0.740139 0.791667 +vt 0.742459 0.791667 +vt 0.742459 0.798611 +vt 0.719258 0.798611 +vt 0.719258 0.791667 +vt 0.735499 0.777778 +vt 0.728538 0.770833 +vt 0.735499 0.791667 +vt 0.728538 0.791667 +vt 0.728538 0.798611 +vt 0.728538 0.750000 +vt 0.733179 0.750000 +vt 0.733179 0.819444 +vt 0.728538 0.819444 +vt 0.740139 0.798611 +vt 0.735499 0.798611 +vt 0.721578 0.798611 +vt 0.740139 0.770833 +vt 0.726218 0.770833 +vt 0.682135 0.819444 +vt 0.700696 0.819444 +vt 0.700696 0.750000 +vt 0.682135 0.750000 +vt 0.682135 0.770833 +vt 0.700696 0.736111 +vt 0.682135 0.736111 +vt 0.831122 0.898258 +vt 0.831122 0.853076 +vt 0.844195 0.875667 +vt 0.835439 0.935015 +vt 0.835439 0.912417 +vt 0.841978 0.923716 +vt 0.682135 0.895833 +vt 0.816705 0.881944 +vt 0.816705 0.895833 +vt 0.682135 0.881944 +vt 0.816705 0.868056 +vt 0.682135 0.868056 +vt 0.816705 0.854167 +vt 0.682135 0.854167 +vt 0.816705 0.840278 +vt 0.682135 0.840278 +vt 0.816705 0.826389 +vt 0.682135 0.993056 +vt 0.816705 0.979167 +vt 0.816705 0.993056 +vt 0.682135 0.979167 +vt 0.816705 0.965278 +vt 0.682135 0.965278 +vt 0.816705 0.951389 +vt 0.682135 0.951389 +vt 0.816705 0.937500 +vt 0.682135 0.937500 +vt 0.816705 0.923611 +vt 0.682135 0.923611 +vt 0.816705 0.909722 +vt 0.823666 0.947917 +vt 0.823666 0.961806 +vt 0.823666 0.968750 +vt 0.823666 0.975694 +vt 0.823666 0.982639 +vt 0.823666 0.989583 +vt 0.823666 0.836806 +vt 0.823666 0.850694 +vt 0.823666 0.899306 +vt 0.823666 0.906250 +vt 0.823666 0.892361 +vt 0.823666 0.864583 +vt 0.823666 0.913194 +vt 0.823666 0.920139 +vt 0.823666 0.878472 +vt 0.823666 0.934028 +vt 0.830626 0.923611 +vt 0.825986 0.916667 +vt 0.830626 0.916667 +vt 0.830626 0.944444 +vt 0.825986 0.937500 +vt 0.830626 0.937500 +vt 0.830626 0.979167 +vt 0.825986 0.972222 +vt 0.830626 0.972222 +vt 0.825986 0.909722 +vt 0.830626 0.909722 +vt 0.825986 0.930556 +vt 0.830626 0.930556 +vt 0.825986 0.965278 +vt 0.830626 0.965278 +vt 0.830626 0.958333 +vt 0.825986 0.951389 +vt 0.830626 0.951389 +vt 0.830626 0.993056 +vt 0.825986 0.986111 +vt 0.830626 0.986111 +vt 0.825986 0.923611 +vt 0.825986 0.958333 +vt 0.825986 0.944444 +vt 0.825986 0.979167 +vt 0.682135 0.777778 +vt 0.700696 0.798611 +vt 0.703016 0.777778 +vt 0.726218 0.798611 +vt 0.735499 0.770833 +vt 0.721578 0.770833 +vt 0.843027 0.888710 +vt 0.839837 0.898258 +vt 0.835479 0.901753 +vt 0.827932 0.888710 +vt 0.826764 0.875667 +vt 0.827932 0.862624 +vt 0.835479 0.849581 +vt 0.839837 0.853076 +vt 0.843027 0.862624 +vt 0.841394 0.930240 +vt 0.839798 0.935015 +vt 0.837619 0.936763 +vt 0.833844 0.930240 +vt 0.833260 0.923716 +vt 0.833844 0.917193 +vt 0.837619 0.910670 +vt 0.839798 0.912417 +vt 0.841394 0.917193 +vt 0.682135 0.826389 +vt 0.682135 0.909722 +vt 0.823666 0.940972 +vt 0.823666 0.954861 +vt 0.823666 0.829861 +vt 0.823666 0.843750 +vt 0.823666 0.885417 +vt 0.823666 0.857639 +vt 0.823666 0.871528 +vt 0.823666 0.927083 +vt 0.825986 0.993056 +vn -0.9239 -0.3827 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 0.0000 1.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 -0.0000 +vn -0.7071 0.7071 -0.0000 +vn -0.3536 0.8536 0.3827 +vn -0.3536 0.8536 -0.3827 +vn -0.1464 0.3536 -0.9239 +vn 0.1464 -0.3536 -0.9239 +vn -0.1464 0.3536 0.9239 +vn 0.1464 -0.3536 0.9239 +vn -0.3827 0.9239 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 0.3827 -0.9239 -0.0000 +vn 0.0138 -0.9259 -0.3776 +vn 0.4601 -0.2181 -0.8607 +vn 0.6449 -0.6644 -0.3776 +vn -0.8089 -0.3351 0.4831 +vn -0.8089 -0.3351 -0.4831 +vn -0.6241 -0.7814 0.0000 +vn -0.0138 0.9259 -0.3776 +vn -0.4601 0.2181 -0.8607 +vn -0.6449 0.6644 -0.3776 +vn -0.0138 0.9259 0.3776 +vn -0.4601 0.2181 0.8607 +vn 0.1711 0.4796 0.8607 +vn 0.6449 -0.6644 0.3776 +vn 0.9503 -0.3114 -0.0000 +vn 0.1711 0.4796 -0.8607 +vn 0.7010 0.2904 -0.6513 +vn 0.4601 -0.2181 0.8607 +vn 0.7010 0.2904 0.6513 +vn 0.4518 0.8921 -0.0000 +vn 0.0138 -0.9259 0.3776 +vn -0.1711 -0.4796 -0.8607 +vn -0.1711 -0.4796 0.8607 +vn -0.9938 0.1112 0.0000 +vn -0.6449 0.6644 0.3776 +vn 0.3536 -0.8536 0.3827 +vn 0.3536 -0.8536 -0.3827 +vn -0.5000 0.8660 0.0000 +vn -0.8660 0.5000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.0000 -1.0000 0.0000 +vn 0.5000 -0.8660 -0.0000 +vn 0.8660 -0.5000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn 0.8660 0.5000 -0.0000 +vn 0.5000 0.8660 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.6712 0.3875 0.6319 +vn 0.7750 -0.0000 0.6319 +vn 0.6712 -0.3875 0.6319 +vn 0.3875 -0.6712 0.6319 +vn -0.0000 -0.7750 0.6319 +vn -0.3875 -0.6712 0.6319 +vn -0.6712 -0.3875 0.6319 +vn -0.0000 0.7750 0.6319 +vn -0.3875 0.6712 0.6319 +vn -0.6712 0.3875 0.6319 +vn -0.7750 -0.0000 0.6319 +vn 0.3875 0.6712 0.6319 +s off +f 1/1/1 2/2/1 3/3/1 +f 4/4/2 5/5/2 6/6/2 +f 5/5/3 7/7/3 8/8/3 +f 7/9/4 9/10/4 8/11/4 +f 8/12/5 6/6/5 5/5/5 +f 10/13/6 11/14/6 7/9/6 +f 3/3/1 12/15/1 1/1/1 +f 12/15/1 13/16/1 1/1/1 +f 13/16/1 14/17/1 1/1/1 +f 1/1/1 15/18/1 2/2/1 +f 2/2/1 16/19/1 3/3/1 +f 4/4/2 10/13/2 5/5/2 +f 5/5/3 10/13/3 7/7/3 +f 7/9/4 11/14/4 9/10/4 +f 8/12/5 9/20/5 6/6/5 +f 10/13/6 4/4/6 11/14/6 +s 1 +f 17/21/7 15/22/8 1/23/7 +f 2/24/9 18/25/10 16/26/10 +f 19/27/11 13/28/12 20/29/12 +f 21/30/13 22/31/3 23/32/3 +f 24/33/14 25/34/15 26/35/15 +f 23/32/3 26/36/15 25/37/15 +f 21/30/13 24/33/14 27/38/13 +f 28/39/16 29/40/17 30/41/18 +f 31/42/19 32/43/20 33/44/21 +f 34/45/22 35/46/23 36/47/24 +f 37/48/25 38/49/26 39/50/27 +f 40/51/28 30/52/18 26/53/29 +f 29/54/17 41/55/30 24/56/31 +f 42/57/32 22/58/33 39/59/27 +f 34/45/22 37/60/25 27/61/34 +f 43/62/35 33/44/21 28/39/16 +f 35/46/23 44/63/36 32/43/20 +f 45/64/37 38/49/26 31/42/19 +f 36/47/24 46/65/38 47/66/39 +f 40/51/28 22/58/33 42/57/32 +f 30/41/18 24/67/31 26/68/29 +f 34/45/22 24/56/31 41/55/30 +f 37/48/25 22/69/33 27/70/34 +f 45/64/37 39/71/27 38/72/26 +f 36/47/24 37/73/25 34/45/22 +f 31/42/19 47/66/39 46/65/38 +f 45/64/37 33/44/21 43/62/35 +f 36/47/24 32/43/20 46/65/38 +f 44/63/36 33/44/21 32/43/20 +f 43/62/35 30/74/18 40/51/28 +f 41/55/30 44/75/36 35/46/23 +f 42/57/32 43/62/35 40/51/28 +f 48/76/40 13/28/12 12/77/40 +f 1/23/7 19/27/11 17/21/7 +f 3/78/41 18/25/10 49/79/41 +f 15/22/8 50/80/9 2/24/9 +f 12/81/40 49/79/41 48/82/40 +f 51/83/14 52/84/14 53/85/14 +f 54/86/3 55/87/3 56/88/3 +f 57/89/42 58/90/43 59/91/42 +f 60/92/43 61/93/44 58/90/43 +f 53/94/44 62/95/45 61/93/44 +f 63/96/45 64/97/46 62/95/45 +f 65/98/46 66/99/47 64/97/46 +f 67/100/47 68/101/48 66/102/47 +f 52/103/48 69/104/49 68/101/48 +f 70/105/49 71/106/50 69/104/49 +f 72/107/50 73/108/51 71/106/50 +f 74/109/51 75/110/52 73/108/51 +f 51/111/52 76/112/53 75/110/52 +f 76/112/53 57/89/42 59/91/42 +f 73/108/54 77/113/55 71/106/55 +f 71/106/55 78/114/56 69/104/56 +f 68/101/57 78/115/56 79/116/57 +f 66/102/58 79/117/57 80/118/58 +f 66/99/58 81/119/59 64/97/59 +f 64/97/59 82/120/60 62/95/60 +f 76/112/61 83/121/62 84/122/61 +f 58/90/63 83/123/62 59/91/62 +f 62/95/60 85/124/64 61/93/64 +f 75/110/65 84/125/61 86/126/65 +f 61/93/64 87/127/63 58/90/63 +f 75/110/65 88/128/54 73/108/54 +f 78/129/49 55/130/48 79/131/48 +f 86/132/52 89/133/51 88/134/51 +f 82/135/45 54/136/44 85/137/44 +f 79/131/48 90/138/47 80/139/47 +f 88/134/51 91/140/50 77/141/50 +f 85/137/44 92/142/43 87/143/43 +f 83/144/42 93/145/53 84/146/53 +f 80/147/47 94/148/46 81/149/46 +f 77/141/50 95/150/49 78/129/49 +f 87/143/43 96/151/42 83/144/42 +f 84/146/53 56/152/52 86/132/52 +f 81/149/46 97/153/45 82/135/45 +f 17/21/7 98/154/8 15/22/8 +f 2/24/9 50/80/9 18/25/10 +f 19/27/11 14/155/11 13/28/12 +f 21/30/13 27/38/13 22/31/3 +f 24/33/14 99/156/14 25/34/15 +f 23/32/3 22/31/3 26/36/15 +f 21/30/13 99/156/14 24/33/14 +f 28/39/16 44/63/36 29/40/17 +f 31/42/19 46/65/38 32/43/20 +f 34/45/22 41/55/30 35/46/23 +f 37/48/25 47/66/39 38/49/26 +f 40/51/28 26/53/29 22/58/33 +f 30/41/18 29/40/17 24/67/31 +f 34/45/22 27/61/34 24/56/31 +f 37/48/25 39/50/27 22/69/33 +f 45/64/37 42/57/32 39/71/27 +f 36/47/24 47/157/39 37/73/25 +f 31/42/19 38/49/26 47/66/39 +f 45/64/37 31/42/19 33/44/21 +f 36/47/24 35/46/23 32/43/20 +f 44/63/36 28/39/16 33/44/21 +f 43/62/35 28/158/16 30/74/18 +f 41/55/30 29/159/17 44/75/36 +f 42/57/32 45/64/37 43/62/35 +f 48/76/40 20/29/12 13/28/12 +f 1/23/7 14/155/11 19/27/11 +f 3/78/41 16/26/10 18/25/10 +f 15/22/8 98/154/8 50/80/9 +f 12/81/40 3/78/41 49/79/41 +f 53/85/14 60/160/14 57/161/14 +f 57/161/14 100/162/14 51/83/14 +f 51/83/14 74/163/14 72/164/14 +f 72/164/14 70/165/14 51/83/14 +f 70/165/14 52/84/14 51/83/14 +f 52/84/14 67/166/14 65/167/14 +f 65/167/14 63/168/14 53/85/14 +f 53/85/14 57/161/14 51/83/14 +f 52/84/14 65/167/14 53/85/14 +f 56/88/3 93/169/3 96/170/3 +f 96/170/3 92/171/3 54/86/3 +f 54/86/3 97/172/3 94/173/3 +f 94/173/3 90/174/3 55/87/3 +f 55/87/3 95/175/3 91/176/3 +f 91/176/3 89/177/3 55/87/3 +f 89/177/3 56/88/3 55/87/3 +f 56/88/3 96/170/3 54/86/3 +f 54/86/3 94/173/3 55/87/3 +f 57/89/42 60/92/43 58/90/43 +f 60/92/43 53/94/44 61/93/44 +f 53/94/44 63/96/45 62/95/45 +f 63/96/45 65/98/46 64/97/46 +f 65/98/46 67/178/47 66/99/47 +f 67/100/47 52/103/48 68/101/48 +f 52/103/48 70/105/49 69/104/49 +f 70/105/49 72/107/50 71/106/50 +f 72/107/50 74/109/51 73/108/51 +f 74/109/51 51/111/52 75/110/52 +f 51/111/52 100/179/53 76/112/53 +f 76/112/53 100/179/53 57/89/42 +f 73/108/54 88/180/54 77/113/55 +f 71/106/55 77/181/55 78/114/56 +f 68/101/57 69/104/56 78/115/56 +f 66/102/58 68/101/57 79/117/57 +f 66/99/58 80/182/58 81/119/59 +f 64/97/59 81/183/59 82/120/60 +f 76/112/61 59/91/62 83/121/62 +f 58/90/63 87/184/63 83/123/62 +f 62/95/60 82/185/60 85/124/64 +f 75/110/65 76/112/61 84/125/61 +f 61/93/64 85/186/64 87/127/63 +f 75/110/65 86/187/65 88/128/54 +f 78/129/49 95/150/49 55/130/48 +f 86/132/52 56/152/52 89/133/51 +f 82/135/45 97/153/45 54/136/44 +f 79/131/48 55/130/48 90/138/47 +f 88/134/51 89/133/51 91/140/50 +f 85/137/44 54/136/44 92/142/43 +f 83/144/42 96/151/42 93/145/53 +f 80/147/47 90/188/47 94/148/46 +f 77/141/50 91/140/50 95/150/49 +f 87/143/43 92/142/43 96/151/42 +f 84/146/53 93/145/53 56/152/52 +f 81/149/46 94/148/46 97/153/45 +o Gun +v -0.115482 1.092648 -0.625000 +v -0.163318 1.208133 -0.625000 +v 0.163322 1.208133 -0.625000 +v 0.341508 0.966506 -0.500000 +v 0.125002 0.158494 -0.500000 +v -0.466504 0.750000 -0.500000 +v 0.341509 0.283494 0.500000 +v 0.466509 0.750000 0.500000 +v -0.341503 0.966506 0.500000 +v -0.312500 0.125000 -7.293341 +v -0.312500 0.206660 -7.375000 +v -0.312500 0.125000 -7.456659 +v 0.312500 0.125000 -7.456659 +v 0.312500 0.206660 -7.375000 +v 0.312500 0.125000 -7.293341 +v -0.187499 -0.250000 -8.000000 +v -0.249999 0.000000 -8.000000 +v -0.249999 -0.250000 -8.000000 +v 0.312501 -0.250000 -8.000000 +v 0.250001 0.000000 -8.000000 +v 0.250001 -0.250000 -8.000000 +v 0.000001 -0.250000 -8.000000 +v -0.187499 0.000000 -8.000000 +v 0.187501 -0.250000 -8.000000 +v 0.000001 0.000000 -8.000000 +v 0.187501 0.000000 -8.000000 +v -0.312499 0.000000 -8.000000 +v -0.312499 -0.250000 -8.000000 +v -0.312499 0.250000 -8.000000 +v 0.312501 0.000000 -8.000000 +v 0.250001 0.250000 -8.000000 +v -0.249999 0.250000 -8.000000 +v -0.312499 0.375000 -8.000000 +v 0.312501 0.250000 -8.000000 +v 0.250001 0.375000 -8.000000 +v 0.187500 0.750000 -6.500000 +v 0.375000 0.500000 -6.500000 +v 0.187500 0.500000 -6.500000 +v 0.375002 0.875000 -1.500000 +v 0.187502 1.062500 -1.500000 +v 0.187502 0.875000 -1.500000 +v 0.000002 1.062500 -1.500000 +v -0.187498 1.062500 -3.250000 +v -0.187498 1.062500 -1.500000 +v 0.000002 0.875000 -1.500000 +v 0.000002 0.500000 -1.500000 +v 0.187502 0.500000 -1.500000 +v -0.374998 0.875000 -1.500000 +v -0.374998 0.500000 -3.250000 +v -0.374998 0.500000 -1.500000 +v -0.187498 0.875000 -1.500000 +v -0.187498 0.500000 -1.500000 +v 0.375002 0.875000 -3.250000 +v 0.375002 0.500000 -1.500000 +v 0.375002 0.500000 -3.250000 +v 0.375001 0.750000 -3.500000 +v 0.187501 0.937500 -3.500000 +v 0.187502 1.062500 -3.250000 +v 0.000002 1.062500 -3.250000 +v 0.375001 0.750000 -5.625000 +v 0.187500 0.937500 -6.500000 +v 0.187501 0.937500 -5.625000 +v 0.000001 0.500000 -3.500000 +v 0.000001 0.750000 -5.000000 +v 0.000001 0.500000 -5.000000 +v 0.000001 0.750000 -3.500000 +v -0.124999 0.750000 -5.000000 +v -0.187498 0.875000 -3.250000 +v -0.374998 0.875000 -3.250000 +v 0.187501 0.937500 -5.375000 +v 0.187501 1.062500 -5.000000 +v 0.187501 0.937500 -5.000000 +v 0.000002 0.875000 -3.250000 +v -0.187498 0.500000 -3.250000 +v 0.000001 0.937500 -3.500000 +v 0.000000 0.937500 -6.500000 +v -0.125000 0.750000 -6.500000 +v -0.187500 0.937500 -6.500000 +v 0.000002 0.500000 -3.250000 +v 0.000000 0.750000 -6.500000 +v 0.000000 0.500000 -6.500000 +v 0.375000 0.750000 -6.500000 +v 0.375001 0.500000 -5.625000 +v 0.375001 0.500000 -3.500000 +v 0.375001 0.750000 -5.000000 +v 0.187501 1.062500 -6.375000 +v 0.187501 1.062500 -5.625000 +v 0.000001 0.750000 -5.375000 +v 0.000001 0.500000 -5.375000 +v 0.000001 0.500000 -5.625000 +v 0.000001 0.750000 -5.625000 +v 0.375001 0.500000 -5.000000 +v 0.375001 0.750000 -5.375000 +v 0.375001 0.500000 -5.375000 +v -0.187499 1.062500 -3.625000 +v -0.187499 0.937500 -3.500000 +v -0.187499 0.937500 -5.375000 +v -0.187499 1.062500 -5.625000 +v -0.187499 0.937500 -5.625000 +v -0.124999 0.750000 -5.375000 +v 0.000001 1.062500 -3.625000 +v -0.124999 0.750000 -5.625000 +v -0.124999 0.750000 -3.500000 +v -0.187499 0.937500 -5.000000 +v -0.374999 0.750000 -5.375000 +v 0.000001 1.062500 -6.375000 +v -0.187499 1.062500 -5.375000 +v 0.187501 1.062500 -5.375000 +v -0.374999 0.750000 -5.625000 +v -0.187499 0.500000 -5.625000 +v -0.374999 0.500000 -5.625000 +v -0.374999 0.500000 -5.375000 +v -0.187499 0.500000 -5.375000 +v 0.000001 1.062500 -5.625000 +v 0.187501 1.062500 -3.625000 +v 0.000001 1.062500 -5.000000 +v 0.000001 1.062500 -5.375000 +v -0.187499 1.062500 -5.000000 +v -0.187499 1.062500 -6.375000 +v 0.000002 0.375000 -1.500000 +v 0.375002 0.375000 -1.500000 +v 0.375001 0.375000 -5.000000 +v -0.187499 0.500000 -5.000000 +v -0.374998 0.375000 -1.500000 +v 0.000000 0.375000 -6.500000 +v -0.187500 0.500000 -6.500000 +v 0.375001 0.375000 -5.375000 +v 0.187500 0.375000 -6.500000 +v 0.375001 0.375000 -3.500000 +v 0.375002 0.375000 -3.250000 +v 0.187502 0.375000 -1.500000 +v 0.375000 0.375000 -6.500000 +v 0.375001 0.375000 -5.625000 +v -0.187498 0.375000 -1.500000 +v -0.187499 0.500000 -3.500000 +v -0.187500 0.375000 -6.500000 +v -0.375000 0.500000 -6.500000 +v -0.374999 0.375000 -5.000000 +v -0.374999 0.500000 -5.000000 +v -0.374999 0.375000 -3.500000 +v -0.374999 0.500000 -3.500000 +v -0.374999 0.375000 -5.625000 +v -0.374999 0.375000 -5.375000 +v -0.374998 0.375000 -3.250000 +v -0.437503 0.250003 -2.000000 +v -0.437504 0.000004 -1.000000 +v -0.437504 0.250004 -1.000000 +v -0.437504 0.000004 -0.500000 +v -0.437504 0.250004 -0.500000 +v 0.312494 0.000003 -2.000000 +v 0.437496 0.000004 -1.000000 +v 0.312492 0.000004 -1.000000 +v 0.312492 0.000004 -0.500000 +v 0.437496 0.250004 -0.500000 +v 0.312492 0.250004 -0.500000 +v 0.437496 0.000004 -0.500000 +v 0.312498 0.000001 -5.000000 +v 0.437497 0.000002 -4.000000 +v 0.312496 0.000002 -4.000000 +v 0.312495 0.000002 -3.375000 +v 0.437498 0.000003 -3.000000 +v 0.312496 0.000003 -3.000000 +v 0.250000 0.250000 -7.000000 +v 0.249999 0.000001 -6.500000 +v 0.250000 0.000000 -7.000000 +v -0.250000 0.250000 -7.500000 +v -0.250000 0.000000 -7.000000 +v -0.250000 0.250000 -7.000000 +v -0.437501 0.250001 -6.312500 +v -0.437501 0.000001 -6.000000 +v -0.437501 0.250001 -6.000000 +v -0.437502 0.000001 -5.187500 +v -0.437502 0.250001 -5.000001 +v -0.437502 0.250001 -5.187501 +v -0.437502 0.000001 -5.000000 +v -0.437503 0.250002 -4.000001 +v -0.437503 0.250002 -3.375000 +v -0.437502 0.000003 -3.000000 +v -0.437502 0.250003 -3.000000 +v -0.437503 0.250003 -2.500000 +v -0.437503 0.000003 -2.000000 +v 0.312498 0.000001 -5.187500 +v 0.312498 -0.124999 -5.000000 +v 0.312498 -0.124999 -5.187500 +v -0.312501 0.000001 -6.500000 +v -0.312501 -0.124999 -6.312500 +v -0.312501 0.000001 -6.312500 +v 0.312499 0.000001 -6.500000 +v 0.249999 -0.124999 -6.500000 +v -0.312502 0.000001 -5.000000 +v -0.250002 -0.124999 -5.000000 +v -0.250002 0.000001 -5.000000 +v 0.249999 0.375001 -6.500000 +v 0.312498 0.250001 -6.500000 +v 0.249998 0.250001 -6.500000 +v -0.312500 0.375001 -6.312500 +v -0.437502 0.375001 -6.500000 +v -0.437501 0.375001 -6.312500 +v 0.437499 0.375001 -6.312500 +v 0.312499 0.375001 -6.500000 +v 0.312500 0.375001 -6.312500 +v -0.437504 0.375004 -1.000000 +v -0.312508 0.375004 -0.500000 +v -0.312507 0.375004 -1.000000 +v -0.437503 0.375003 -2.000000 +v -0.312505 0.375003 -2.687501 +v -0.437502 0.375003 -3.000000 +v -0.437503 0.375003 -2.687500 +v 0.437497 0.375003 -2.500000 +v 0.437497 0.250003 -2.000000 +v 0.437497 0.250003 -2.500000 +v 0.437497 0.375002 -3.375000 +v 0.437498 0.250003 -3.000000 +v 0.437497 0.250002 -3.375000 +v 0.437498 0.375002 -5.000000 +v 0.437497 0.250002 -4.000000 +v 0.437498 0.250001 -5.000000 +v 0.437498 0.375001 -5.187500 +v 0.437498 0.250001 -5.187500 +v 0.437499 0.250001 -6.000000 +v 0.437499 0.250001 -6.312500 +v 0.437496 0.375004 -1.000000 +v 0.437496 0.250004 -1.000000 +v -0.312504 0.375002 -4.000000 +v -0.437503 0.375002 -3.625001 +v -0.312505 0.375002 -3.625000 +v 0.437497 0.375003 -2.000000 +v -0.312502 0.375002 -5.000000 +v -0.437503 0.375002 -4.000001 +v -0.312501 0.375001 -6.000000 +v -0.437501 0.375001 -5.687501 +v -0.312501 0.375001 -5.687500 +v 0.437497 0.000003 -2.000000 +v 0.250000 0.250000 -7.500000 +v 0.250000 0.000000 -7.500000 +v 0.437499 0.000001 -6.000000 +v 0.437499 0.000001 -6.312500 +v 0.437498 0.000001 -5.000000 +v 0.437498 0.000001 -5.187500 +v 0.437497 0.000002 -3.375000 +v 0.437497 0.000003 -2.500000 +v -0.437503 0.375003 -2.500000 +v -0.437503 0.375002 -3.375001 +v -0.437502 0.375002 -5.000001 +v -0.437502 0.375001 -5.187501 +v -0.437501 0.375001 -6.000000 +v 0.312492 0.375004 -0.500000 +v 0.437496 0.375004 -0.500000 +v -0.437504 0.375004 -0.500000 +v -0.250001 -0.124999 -6.000000 +v -0.250001 -0.124999 -6.312500 +v -0.250001 -0.124999 -5.687500 +v -0.312501 -0.124999 -6.000000 +v -0.312502 0.250001 -6.500000 +v -0.312501 0.375001 -6.500000 +v 0.437498 0.250001 -6.500000 +v -0.312508 0.250004 -0.500000 +v 0.249992 0.375004 -0.500000 +v 0.437499 0.375001 -5.687500 +v 0.312499 0.375001 -6.000000 +v 0.312499 0.375001 -5.687500 +v 0.437497 0.375002 -4.000000 +v 0.312498 0.375002 -5.000000 +v 0.312496 0.375002 -4.000000 +v 0.437497 0.375002 -3.625000 +v 0.312495 0.375002 -3.625000 +v 0.437497 0.375003 -2.687500 +v 0.312496 0.375003 -3.000000 +v 0.312495 0.375003 -2.687500 +v 0.312494 0.375003 -2.000000 +v 0.312493 0.375004 -1.000000 +v -0.250006 0.375003 -2.000001 +v -0.250007 0.375004 -1.000000 +v -0.250008 0.375004 -0.500000 +v -0.437502 0.000001 -6.500000 +v -0.437501 0.000001 -6.312500 +v 0.312499 0.000001 -6.312500 +v 0.312499 -0.124999 -6.000000 +v 0.312499 -0.124999 -6.312500 +v -0.250001 0.000001 -6.500000 +v -0.250002 0.250001 -6.500000 +v -0.312505 0.000003 -2.687500 +v -0.437503 0.000003 -2.687500 +v -0.312501 0.000001 -6.000000 +v -0.312501 -0.124999 -5.687500 +v -0.312501 0.000001 -5.687500 +v 0.437497 0.000003 -2.687500 +v 0.249995 0.000003 -2.500000 +v 0.249994 0.000003 -2.000000 +v -0.437503 0.000002 -3.375000 +v -0.312504 0.000003 -3.000000 +v -0.312504 0.000002 -4.000000 +v -0.437503 0.000002 -4.000000 +v 0.249996 0.000002 -4.000000 +v 0.249998 0.000001 -5.000000 +v -0.312502 0.000001 -5.187500 +v -0.312508 0.000004 -0.500000 +v 0.249992 0.000004 -1.000000 +v 0.249992 0.000004 -0.500000 +v 0.249992 0.250004 -0.500000 +v -0.312508 0.000004 -1.000000 +v -0.187506 0.000003 -2.000000 +v -0.250008 0.000004 -1.000000 +v -0.250006 0.000003 -2.000000 +v -0.000008 0.000004 -1.000000 +v -0.187508 0.000004 -1.000000 +v -0.000006 0.000003 -2.000000 +v 0.187492 0.000004 -1.000000 +v -0.250008 0.000004 -0.500000 +v -0.187508 0.250004 -0.500000 +v -0.250008 0.250004 -0.500000 +v -0.187508 0.000004 -0.500000 +v -0.000008 0.250004 -0.500000 +v -0.000008 0.000004 -0.500000 +v 0.187492 0.250004 -0.500000 +v 0.187492 0.000004 -0.500000 +v -0.250000 0.000000 -7.500000 +v -0.250000 -0.125000 -7.000000 +v -0.187500 0.000000 -7.500000 +v -0.250000 -0.125000 -7.500000 +v -0.187502 0.000001 -5.000000 +v -0.250004 0.000002 -4.000000 +v -0.000004 0.000002 -4.000000 +v -0.187504 0.000002 -4.000000 +v -0.000002 0.000001 -5.000000 +v 0.187496 0.000002 -4.000000 +v 0.312496 -0.187497 -3.000000 +v 0.312495 -0.187498 -3.375000 +v -0.250005 0.000002 -3.625000 +v -0.312505 -0.187498 -3.625000 +v -0.312505 0.000002 -3.625000 +v -0.250005 0.000003 -2.500000 +v -0.187505 0.000003 -2.500000 +v -0.000005 0.000003 -2.500000 +v 0.187494 0.000003 -2.000000 +v -0.187502 0.250001 -6.500000 +v -0.187500 0.250000 -7.000000 +v -0.000002 0.250001 -6.500000 +v 0.000000 0.250000 -7.000000 +v 0.187498 0.250001 -6.500000 +v 0.187500 0.250000 -7.000000 +v 0.250000 -0.125000 -7.000000 +v -0.250001 -0.124999 -6.500000 +v 0.187493 0.375004 -1.000000 +v 0.249993 0.375004 -1.000000 +v -0.000007 0.375004 -1.000000 +v 0.187492 0.375004 -0.500000 +v -0.187507 0.375004 -1.000000 +v -0.000008 0.375004 -0.500000 +v 0.249994 0.375003 -2.000000 +v -0.000006 0.375003 -2.000000 +v -0.187500 0.250000 -7.500000 +v -0.249999 0.250000 -7.750000 +v 0.000000 0.250000 -7.500000 +v -0.187499 0.250000 -7.750000 +v -0.249999 0.375000 -7.750000 +v 0.000001 0.250000 -7.750000 +v -0.187499 0.375000 -7.750000 +v -0.187508 0.375004 -0.500000 +v 0.187500 -0.124999 -5.687500 +v 0.249999 -0.124999 -6.000000 +v 0.249999 -0.124999 -5.687500 +v 0.187499 -0.187499 -5.375000 +v 0.249998 -0.499999 -5.375000 +v 0.187499 -0.499999 -5.375000 +v 0.249998 -0.187499 -5.000000 +v 0.312498 -0.499999 -5.000000 +v 0.312498 -0.187499 -5.000000 +v 0.187500 -0.124999 -6.312500 +v 0.249999 -0.124999 -6.312500 +v -0.250000 -0.625000 -7.000000 +v -0.250001 -0.687499 -6.500000 +v -0.250001 -0.624999 -6.500000 +v -0.250001 0.375001 -6.500000 +v -0.187501 0.375001 -6.500000 +v -0.000001 0.375001 -6.500000 +v 0.187498 0.000001 -5.187500 +v 0.187498 0.000001 -5.000000 +v 0.249998 -0.499999 -5.187500 +v 0.249998 -0.499999 -5.000000 +v -0.187502 0.000001 -5.187500 +v -0.187501 -0.687499 -6.500000 +v -0.187501 -0.624999 -6.500000 +v 0.249998 0.000001 -5.187500 +v -0.312502 -0.562499 -5.187500 +v -0.312502 -0.874999 -5.374999 +v -0.312502 -0.874999 -5.187499 +v 0.437498 0.000001 -5.375000 +v 0.312498 0.000001 -5.625000 +v 0.437499 0.000001 -5.625000 +v -0.312502 0.000001 -5.375000 +v -0.437501 0.000001 -5.625000 +v -0.312501 0.000001 -5.625000 +v -0.312502 -0.124999 -5.187500 +v 0.312498 0.375001 -5.375000 +v 0.312498 0.375001 -5.187500 +v -0.250002 -0.562499 -5.000000 +v -0.250002 -0.874999 -5.187499 +v -0.250002 -0.562499 -5.187500 +v -0.437501 0.375001 -5.625001 +v -0.437502 0.250001 -5.375001 +v -0.437502 0.375001 -5.375001 +v 0.437499 0.250001 -5.625000 +v -0.312502 0.375001 -5.375000 +v -0.312502 0.375001 -5.187500 +v 0.437499 0.375001 -5.625000 +v 0.437498 0.250001 -5.375000 +v 0.312498 -0.124999 -5.375000 +v 0.312498 -0.124999 -5.625000 +v -0.437501 0.250001 -5.625001 +v -0.187501 -0.562499 -5.375000 +v -0.000002 -0.562499 -5.187500 +v -0.187502 -0.562499 -5.187500 +v 0.187499 -0.874999 -5.187500 +v 0.249998 -0.874999 -5.374999 +v 0.249998 -0.874999 -5.187499 +v -0.250002 -0.874999 -5.374999 +v -0.250002 -0.562499 -5.375000 +v -0.312502 -0.562499 -5.000000 +v -0.250002 -0.874999 -4.999999 +v 0.312498 -0.562499 -5.000000 +v 0.312498 -0.874999 -5.187499 +v 0.312498 -0.562499 -5.187500 +v 0.312498 -0.562499 -5.375000 +v 0.249998 -0.562499 -5.375000 +v 0.249998 -0.124999 -5.000000 +v 0.249998 -0.187499 -5.187500 +v -0.312502 -0.562499 -5.375000 +v -0.187501 -0.874999 -5.187500 +v -0.187500 -0.874999 -5.375000 +v -0.312501 -0.124999 -6.500000 +v -0.312505 0.000003 -2.500000 +v -0.312506 0.000003 -2.000000 +v 0.312495 0.000002 -3.625000 +v 0.249995 -0.187498 -3.625000 +v 0.249995 0.000002 -3.625000 +v 0.000000 0.000000 -7.500000 +v -0.187500 -0.125000 -7.500000 +v -0.187506 0.375003 -2.000001 +v -0.187501 -0.124999 -5.687500 +v -0.187500 -0.124999 -6.000000 +v -0.187500 -0.124999 -6.312500 +v 0.187499 -0.562499 -5.375000 +v 0.187500 -0.874999 -5.375000 +v 0.249998 -0.562499 -5.000000 +v 0.312498 -0.874999 -4.999999 +v 0.312498 -0.874999 -5.374999 +v 0.312499 -0.124999 -5.687500 +v 0.187500 0.250000 -7.500000 +v 0.187500 -0.125000 -7.500000 +v 0.187500 0.000000 -7.500000 +v 0.187495 0.000003 -2.500000 +v 0.187501 0.250000 -7.750000 +v 0.187501 0.000000 -8.000000 +v 0.250001 0.000000 -7.750000 +v 0.187501 0.000000 -7.750000 +v 0.187499 0.375001 -6.500000 +v 0.000001 0.000000 -7.750000 +v -0.187499 0.000000 -7.750000 +v -0.249999 0.000000 -7.750000 +v 0.250001 0.250000 -7.750000 +v 0.250000 -0.125000 -7.500000 +v 0.000000 -0.125000 -7.500000 +v 0.250000 -0.625000 -7.000000 +v 0.249999 -0.687499 -6.500000 +v 0.250000 -0.687500 -7.000000 +v 0.187499 -0.624999 -6.500000 +v 0.249999 -0.624999 -6.500000 +v 0.249999 -0.124999 -5.625000 +v -0.187502 -0.124999 -5.375000 +v -0.250001 -0.124999 -5.625000 +v -0.187500 -0.124999 -5.625000 +v -0.437501 0.000001 -5.687500 +v -0.437501 0.250001 -5.687501 +v 0.312499 0.000001 -5.687500 +v 0.437499 0.250001 -5.687500 +v 0.437499 0.000001 -5.687500 +v 0.249998 -0.124999 -5.375000 +v 0.187500 -0.124999 -5.625000 +v -0.312502 -0.124999 -5.375000 +v 0.437498 0.375001 -5.375000 +v 0.312499 0.375001 -5.625000 +v -0.250002 -0.124999 -5.375000 +v -0.312501 -0.124999 -5.625000 +v -0.312501 0.375001 -5.625000 +v -0.250002 -0.187499 -5.375000 +v -0.312502 -0.499999 -5.375000 +v -0.312502 -0.187499 -5.375000 +v -0.250002 -0.499999 -5.000000 +v -0.250002 -0.187499 -5.187500 +v -0.250002 -0.187499 -5.000000 +v 0.312498 -0.187499 -5.375000 +v 0.249998 -0.187499 -5.375000 +v 0.312498 -0.499999 -5.187500 +v 0.312498 -0.187499 -5.187500 +v 0.249998 -0.124999 -5.187500 +v -0.312502 -0.187499 -5.000000 +v -0.187501 -0.187499 -5.375000 +v -0.250002 -0.499999 -5.375000 +v -0.312502 -0.499999 -5.187500 +v -0.312502 -0.187499 -5.187500 +v -0.000001 -0.562499 -5.375000 +v -0.000001 -0.499999 -5.375000 +v 0.250000 -0.187500 -7.000000 +v 0.250000 -0.375000 -7.187466 +v 0.250000 -0.187500 -7.428173 +v -0.250000 -0.375000 -7.000000 +v -0.250000 -0.625000 -7.124958 +v -0.250000 -0.187500 -7.000000 +v -0.250000 -0.375000 -7.187466 +v -0.187500 -0.187500 -7.500000 +v 0.187499 -0.124999 -6.500000 +v 0.249999 -0.187499 -6.500000 +v 0.187499 -0.374999 -6.500000 +v 0.249999 -0.374999 -6.500000 +v 0.250000 -0.375000 -7.000000 +v -0.250000 -0.187500 -7.428173 +v -0.187501 -0.187499 -6.500000 +v -0.187501 -0.124999 -6.500000 +v -0.250001 -0.374999 -6.500000 +v -0.187501 -0.374999 -6.500000 +v 0.000000 -0.187500 -7.500000 +v -0.250001 -0.187499 -6.500000 +v 0.312499 -0.124999 -6.500000 +v 0.312499 0.000001 -6.000000 +v 0.437498 0.000001 -6.500000 +v 0.437498 0.375001 -6.500000 +v 0.437499 0.375001 -6.000000 +v -0.437502 0.250001 -6.500000 +v 0.187499 -0.687499 -6.500000 +v -0.000000 -0.687499 -6.312500 +v -0.000001 -0.687499 -6.500000 +v -0.187500 -0.374999 -6.312500 +v -0.187500 -0.624999 -6.312500 +v 0.187500 -0.187499 -6.312500 +v 0.187499 -0.187499 -6.500000 +v 0.187500 -0.687499 -6.312500 +v -0.187500 -0.687499 -6.312500 +v 0.187500 -0.374999 -6.312500 +v -0.187500 -0.187499 -6.312500 +v 0.187500 -0.187499 -6.000000 +v -0.000000 -0.687499 -6.000000 +v 0.187500 -0.624999 -6.312500 +v 0.187500 -0.687499 -6.000000 +v -0.187500 -0.687499 -6.000000 +v -0.187500 -0.624999 -6.000000 +v 0.187500 -0.124999 -6.000000 +v 0.187500 -0.187499 -5.687500 +v 0.187500 -0.624999 -5.691199 +v 0.187500 -0.687499 -5.687500 +v -0.187500 -0.187499 -5.687500 +v -0.187500 -0.624999 -5.687500 +v 0.187500 -0.624999 -5.625000 +v 0.187500 -0.187499 -5.625000 +v -0.187500 -0.187499 -5.625000 +v -0.187500 -0.499999 -5.687500 +v -0.187500 -0.499999 -5.625000 +v 0.187500 -0.499999 -5.687500 +v 0.187500 -0.499999 -5.625000 +v -0.187500 -0.624999 -5.625000 +v -0.250002 0.000001 -5.187500 +v -0.250002 -0.124999 -5.187500 +v -0.312502 -0.124999 -5.000000 +v 0.249998 -0.562499 -5.187500 +v -0.000002 0.000001 -5.187500 +v 0.187498 -0.124999 -5.375000 +v -0.187501 -0.499999 -5.375000 +v -0.187500 -0.687499 -5.687500 +v 0.187500 -0.624999 -6.000000 +v -0.187500 -0.187499 -6.000000 +v 0.187499 -0.812499 -6.500000 +v -0.187501 -0.812499 -6.500000 +v 0.250000 -0.625000 -7.124958 +v 0.250000 -0.687500 -7.124958 +v -0.250000 -0.687500 -7.124958 +v -0.250000 -0.750000 -7.000000 +v -0.250000 -0.687500 -7.000000 +v 0.250000 -0.750000 -7.000000 +v 0.249999 -0.999999 -6.812462 +v 0.250000 -1.000000 -7.187500 +v -0.250001 -0.999999 -6.812464 +v -0.250000 -1.000000 -7.187500 +v -0.250001 -0.749999 -6.500000 +v -0.250000 -1.250000 -7.375000 +v -0.250000 -1.000000 -7.249994 +v -0.250000 -1.250000 -7.557529 +v -0.250000 -0.750000 -7.124958 +v 0.250000 -0.750000 -7.124958 +v 0.250000 -1.000000 -7.249994 +v 0.249999 -0.749999 -6.500000 +v 0.250000 -1.537015 -7.749912 +v 0.250000 -1.500000 -7.562500 +v 0.250000 -1.749999 -7.562450 +v 0.250000 -1.250000 -7.557529 +v 0.250000 -1.500000 -7.750004 +v 0.250000 -1.250000 -7.375000 +v -0.250000 -1.500000 -7.562500 +v -0.250000 -1.537015 -7.749912 +v -0.250000 -1.749999 -7.562450 +v -0.250000 -1.500000 -7.750004 +v 0.187500 -0.187500 -7.500000 +v 0.249999 -0.804100 -6.567194 +v -0.250000 -1.875000 -7.132376 +v -0.250000 -1.890714 -7.265713 +v -0.250000 -1.926450 -7.158102 +v 0.249999 -1.749981 -7.187485 +v 0.250000 -1.890714 -7.265713 +v -0.312502 -0.499999 -5.000000 +v 0.312498 -0.499999 -5.375000 +v -0.312502 -0.874999 -4.999999 +v 0.312498 0.000001 -5.375000 +v -0.437502 0.000001 -5.375000 +v 0.187498 -0.124999 -5.187500 +v -0.000002 -0.124999 -5.187500 +v 0.187498 -0.562499 -5.187500 +v -0.187502 -0.124999 -5.187500 +v -0.187502 -0.499999 -5.187500 +v -0.187502 -0.187499 -5.187500 +v 0.187498 -0.187499 -5.187500 +v -0.000002 -0.187499 -5.187500 +v 0.187498 -0.499999 -5.187500 +v -0.000002 -0.499999 -5.187500 +v 0.249998 -0.874999 -4.999999 +v -0.250002 -0.499999 -5.187500 +v 0.187495 0.000002 -3.625000 +v -0.000005 0.000002 -3.625000 +v -0.187505 0.000002 -3.625000 +v -0.437503 0.000002 -3.625000 +v 0.312495 0.375002 -3.375000 +v 0.437497 0.000002 -3.625000 +v -0.312505 0.375002 -3.375000 +v 0.437497 0.250002 -3.625000 +v -0.437503 0.250002 -3.625000 +v 0.249995 0.000003 -2.687500 +v 0.249995 -0.124997 -2.687500 +v -0.312505 -0.187498 -3.375000 +v -0.312505 0.000002 -3.375000 +v 0.312495 0.000003 -2.500000 +v -0.437503 0.000003 -2.500000 +v 0.312495 0.375003 -2.500000 +v 0.437497 0.250003 -2.687500 +v -0.312506 0.375003 -2.000001 +v -0.437503 0.250003 -2.687500 +v 0.249995 -0.624998 -3.375000 +v 0.249995 -0.187498 -3.375000 +v -0.312504 -0.624997 -3.000000 +v -0.312504 -0.187497 -3.000000 +v -0.250005 -0.187498 -3.625000 +v -0.250005 -0.624998 -3.375000 +v -0.250005 -0.624998 -3.625000 +v -0.250004 -0.624997 -3.000000 +v -0.250004 -0.187497 -3.000000 +v -0.312505 -0.624998 -3.625000 +v -0.187505 -0.187498 -3.375000 +v -0.250005 -0.187498 -3.375000 +v 0.187495 -0.124997 -2.687500 +v -0.000005 -0.124997 -2.687500 +v -0.187505 -0.124997 -2.687500 +v -0.250005 -0.124997 -2.687500 +v 0.249996 0.000003 -3.000000 +v -0.250004 0.000003 -3.000000 +v -0.250005 0.000003 -2.687500 +v -0.187504 -0.187497 -3.000000 +v -0.000004 -0.187497 -3.000000 +v 0.187496 -0.187497 -3.000000 +v 0.437498 0.375003 -3.000000 +v 0.312495 0.000003 -2.687500 +v 0.249996 -0.187497 -3.000000 +v -0.312505 0.375003 -2.500001 +v -0.000004 -0.187498 -3.375000 +v -0.187505 -0.624998 -3.375000 +v -0.250005 0.000002 -3.375000 +v -0.187505 0.000002 -3.375000 +v -0.000004 -0.624997 -3.000000 +v -0.312504 0.375003 -3.000000 +v 0.312495 -0.187498 -3.625000 +v 0.312496 -0.624997 -3.000000 +v 0.249996 -0.624997 -3.000000 +v -0.187504 -0.624997 -3.000000 +v -0.000004 -0.624998 -3.375000 +v 0.187496 -0.624997 -3.000000 +v -0.312505 -0.624998 -3.375000 +v 0.187495 -0.624998 -3.375000 +v 0.249995 -0.624998 -3.625000 +v 0.312495 -0.624998 -3.375000 +v 0.187495 -0.187498 -3.375000 +v 0.312495 -0.624998 -3.625000 +v 0.249995 0.000002 -3.375000 +v 0.187495 0.000002 -3.375000 +v -0.000004 0.000002 -3.375000 +v 0.000001 0.000000 -8.000000 +v -0.187499 0.000000 -8.000000 +v -0.249999 0.000000 -8.000000 +v 0.250001 0.250000 -8.000000 +v 0.250001 0.000000 -8.000000 +v -0.249999 0.250000 -8.000000 +v -0.249999 0.500000 -7.750000 +v 0.000002 0.499999 -9.000000 +v -0.187499 0.499998 -11.000000 +v -0.187498 0.499999 -9.000000 +v 0.000001 0.375000 -7.750000 +v 0.187501 0.375000 -7.750000 +v 0.000001 0.500000 -7.750000 +v -0.187499 0.500000 -8.000000 +v -0.187499 0.500000 -7.750000 +v 0.187501 0.500000 -7.750000 +v 0.000001 0.500000 -8.000000 +v -0.249999 0.750000 -7.750000 +v 0.250001 0.375000 -7.750000 +v 0.187502 0.499999 -9.000000 +v 0.000001 0.499998 -11.000000 +v 0.187501 0.750000 -7.750000 +v 0.125004 0.937500 -7.750000 +v 0.098594 0.875000 -7.750000 +v 0.250001 0.500000 -7.750000 +v -0.249999 0.750000 -8.000000 +v -0.187499 0.750000 -7.750000 +v -0.187499 0.750000 -8.000000 +v -0.098586 0.875000 -7.750000 +v -0.124996 0.937499 -8.000000 +v -0.098587 0.874999 -8.000000 +v -0.124996 0.937500 -7.750000 +v -0.249998 0.749999 -9.000000 +v 0.187501 0.500000 -8.000000 +v -0.098588 0.874999 -9.000000 +v -0.187498 0.749999 -9.000000 +v -0.124998 0.937499 -9.000000 +v -0.000000 -0.499999 -5.625000 +v -0.000000 -0.624999 -5.625000 +v -0.000000 -0.687499 -5.687500 +v -0.250001 -1.249999 -7.000000 +v 0.249999 -1.249999 -7.000000 +v -0.250001 -0.804100 -6.567196 +v -0.250001 -1.499999 -7.187477 +v 0.249999 -1.499999 -7.187477 +v 0.250000 -1.875000 -7.132376 +v 0.250000 -1.926450 -7.158102 +v -0.250001 -1.749981 -7.187485 +v -0.250000 0.750000 -6.500000 +v -0.249999 0.500000 -6.000000 +v -0.250000 0.500000 -6.500000 +v -0.249999 0.750000 -6.000000 +v -0.374999 0.500000 -6.000000 +v -0.374999 0.750000 -6.000000 +v -0.375000 0.500000 -6.500000 +v -0.375000 0.750000 -6.500000 +v -0.375899 0.625000 -5.999100 +v -0.438399 0.500000 -5.999100 +v -0.375899 0.500000 -5.999100 +v -0.438399 0.625000 -5.999100 +v -0.438399 0.500000 -6.124100 +v -0.375899 0.500000 -6.124100 +v -0.438399 0.625000 -6.124100 +v -0.438399 0.625000 -6.186600 +v -0.375899 0.500000 -6.186600 +v -0.438399 0.500000 -6.186600 +v -0.375899 0.625000 -6.124100 +v -0.500899 0.625000 -6.124100 +v -0.500899 0.500000 -6.186600 +v -0.500899 0.500000 -6.124100 +v -0.500899 0.625000 -6.186600 +v -0.115482 1.323617 -0.625000 +v 0.000002 1.371453 -0.625000 +v 0.115487 1.323617 -0.625000 +v 0.115487 1.092648 -0.625000 +v 0.000002 1.044812 -0.625000 +v -0.341504 0.966506 -0.500000 +v -0.124998 1.272706 -0.500000 +v 0.125002 1.272706 -0.500000 +v 0.466508 0.750000 -0.500000 +v 0.466508 0.500000 -0.500000 +v 0.341508 0.283494 -0.500000 +v -0.124998 0.158494 -0.500000 +v -0.341504 0.283494 -0.500000 +v -0.466504 0.500000 -0.500000 +v 0.125003 1.272706 0.500000 +v -0.124997 1.272706 0.500000 +v -0.466503 0.750000 0.500000 +v -0.466503 0.500000 0.500000 +v -0.341503 0.283494 0.500000 +v -0.124997 0.158494 0.500000 +v 0.125003 0.158494 0.500000 +v 0.466509 0.500000 0.500000 +v 0.341509 0.966506 0.500000 +v -0.312500 0.043340 -7.375000 +v -0.312500 0.067258 -7.317257 +v -0.312500 0.182743 -7.317257 +v -0.312500 0.182743 -7.432743 +v -0.312500 0.067258 -7.432743 +v 0.312500 0.067258 -7.317257 +v 0.312500 0.043340 -7.375000 +v 0.312500 0.067258 -7.432743 +v 0.312500 0.182743 -7.432743 +v 0.312500 0.182743 -7.317257 +v -0.249999 0.375000 -8.000000 +v 0.312501 0.375000 -8.000000 +v -0.375000 0.375000 -6.500000 +v 0.187494 0.375003 -2.000000 +v -0.000001 -0.812499 -6.500000 +v 0.187501 0.499998 -11.000000 +v 0.250001 0.750000 -7.750000 +v -0.375899 0.625000 -6.186600 +v -0.115481 1.323617 0.625000 +v 0.000003 1.371453 0.625000 +v -0.163317 1.208133 0.625000 +v -0.115481 1.092648 0.625000 +v 0.000003 1.044812 0.625000 +v 0.115488 1.092648 0.625000 +v 0.163323 1.208133 0.625000 +v 0.115488 1.323617 0.625000 +v -0.250000 0.067258 -7.317257 +v -0.250000 0.125000 -7.293341 +v -0.250000 0.043340 -7.375000 +v -0.250000 0.067258 -7.432743 +v -0.250000 0.125000 -7.456659 +v -0.250000 0.182743 -7.432743 +v -0.250000 0.206660 -7.375000 +v -0.250000 0.182743 -7.317257 +v 0.250000 0.067258 -7.317257 +v 0.250000 0.125000 -7.293341 +v 0.250000 0.043340 -7.375000 +v 0.250000 0.067258 -7.432743 +v 0.250000 0.125000 -7.456659 +v 0.250000 0.182743 -7.432743 +v 0.250000 0.206660 -7.375000 +v 0.250000 0.182743 -7.317257 +v -0.312501 0.375000 -11.000000 +v -0.312499 0.250000 -11.625000 +v -0.312501 0.250000 -11.000000 +v -0.312501 0.250000 -9.000000 +v -0.312499 0.375000 -9.000000 +v -0.312501 0.250000 -10.000000 +v -0.312501 0.375000 -10.500000 +v -0.312501 0.250000 -10.500000 +v -0.312500 0.375000 -10.000000 +v -0.312501 -0.250000 -11.000000 +v -0.312500 -0.625000 -11.625000 +v -0.312501 -0.625000 -11.000000 +v -0.312501 -0.250000 -10.500000 +v -0.312501 -0.625000 -10.500000 +v -0.312501 -0.000000 -10.000000 +v -0.312501 -0.250000 -10.000000 +v -0.312501 -0.000000 -10.500000 +v -0.312501 -0.000000 -9.000000 +v -0.312500 -0.250000 -9.000000 +v -0.312501 -0.000000 -11.000000 +v -0.312500 -0.250000 -11.625000 +v -0.249999 1.000000 -11.000000 +v -0.312500 0.625000 -11.625000 +v -0.312500 0.625000 -11.000000 +v -0.249999 -0.625000 -11.937500 +v -0.312499 -0.250000 -11.937500 +v -0.249999 -0.250000 -11.937500 +v 0.250001 0.375000 -9.000000 +v 0.312499 0.375000 -10.000000 +v 0.250000 0.375000 -10.000000 +v 0.250000 0.625000 -10.500000 +v 0.250001 1.000000 -11.000000 +v 0.187501 1.000000 -11.000000 +v 0.250001 0.625000 -11.937500 +v 0.250001 0.937500 -12.000000 +v 0.312501 0.625000 -11.937500 +v 0.250001 0.375000 -11.937500 +v 0.312501 0.250000 -11.937500 +v 0.250001 0.250000 -11.937500 +v -0.187499 1.000000 -11.625000 +v -0.187499 1.000000 -11.000000 +v -0.312499 -0.375000 -9.000000 +v -0.249999 -0.375000 -9.000000 +v -0.250000 0.375000 -10.000000 +v -0.249999 0.375000 -9.000000 +v -0.250000 0.625000 -10.500000 +v -0.312500 0.625000 -10.500000 +v 0.312501 0.375000 -9.000000 +v -0.187500 -1.000000 -11.625000 +v -0.125000 -1.000000 -11.000000 +v -0.187500 -1.000000 -11.000000 +v -0.125000 -1.000000 -11.625000 +v 0.000000 -1.000000 -11.000000 +v -0.000000 -1.000000 -11.625000 +v 0.125000 -1.000000 -11.000000 +v -0.124999 1.000000 -11.000000 +v 0.000001 1.000000 -11.000000 +v -0.124999 1.000000 -11.625000 +v 0.125001 1.000000 -11.000000 +v 0.000001 1.000000 -11.625000 +v -0.124999 -0.937500 -12.000000 +v 0.000001 -0.937500 -12.000000 +v 0.312500 0.625000 -10.500000 +v -0.125000 -1.000000 -10.500000 +v -0.187500 -1.000000 -10.500000 +v 0.000000 -1.000000 -10.500000 +v 0.125000 -1.000000 -10.500000 +v -0.187499 -0.937500 -12.000000 +v 0.187501 -0.937500 -12.000000 +v 0.250000 -1.000000 -11.625000 +v 0.187501 -1.000000 -11.625000 +v -0.312500 -0.500000 -10.000000 +v -0.250000 -0.500000 -10.000000 +v 0.187501 0.937500 -12.000000 +v 0.250001 1.000000 -11.625000 +v -0.250000 -1.000000 -11.000000 +v 0.250000 -0.625000 -10.375000 +v 0.312500 -0.500000 -10.000000 +v 0.250000 -0.500000 -10.000000 +v 0.187501 1.000000 -11.625000 +v 0.125001 0.937500 -12.000000 +v 0.125001 1.000000 -11.625000 +v -0.250000 -0.625000 -10.375000 +v -0.250000 -1.000000 -10.500000 +v 0.125000 -1.000000 -11.625000 +v 0.187499 -1.000000 -11.000000 +v 0.000001 0.937500 -12.000000 +v 0.187500 -1.000000 -10.500000 +v 0.125001 -0.937500 -12.000000 +v 0.250001 -0.625000 -11.937500 +v 0.250001 -0.937500 -12.000000 +v -0.124999 0.937500 -12.000000 +v -0.187499 0.937500 -12.000000 +v -0.249999 0.937500 -12.000000 +v -0.249999 1.000000 -11.625000 +v -0.312499 -0.000000 -11.937500 +v -0.249999 -0.000000 -11.937500 +v 0.250001 -0.000000 -11.937500 +v 0.312501 -0.250000 -11.937500 +v 0.250001 -0.250000 -11.937500 +v 0.250000 -1.000000 -10.500000 +v 0.312500 -0.625000 -10.375000 +v -0.249999 -0.937500 -12.000000 +v -0.312499 -0.625000 -11.937500 +v 0.312501 0.375000 -11.937500 +v -0.187500 0.625000 -10.500000 +v 0.000000 0.625000 -10.500000 +v 0.187500 0.625000 -10.500000 +v -0.187499 0.625000 -11.937500 +v -0.250000 0.625000 -11.937500 +v 0.000001 0.625000 -11.937500 +v 0.187501 0.625000 -11.937500 +v -0.187499 -0.250000 -11.937500 +v -0.187499 -0.000000 -11.937500 +v 0.000001 -0.250000 -11.937500 +v 0.000001 -0.000000 -11.937500 +v 0.187501 -0.250000 -11.937500 +v -0.187499 -0.625000 -11.937500 +v 0.000001 -0.625000 -11.937500 +v 0.187501 -0.625000 -11.937500 +v -0.249999 0.250000 -11.937500 +v -0.187499 0.375000 -11.937500 +v -0.187499 0.250000 -11.937500 +v 0.000001 0.250000 -11.937500 +v 0.000001 0.375000 -11.937500 +v 0.187501 0.250000 -11.937500 +v 0.187501 -0.000000 -11.937500 +v 0.187501 0.375000 -11.937500 +v -0.250001 0.375000 -11.937500 +v -0.312500 -0.625000 -10.375000 +v 0.250001 -0.375000 -9.000000 +v -0.312499 0.250000 -11.937500 +v -0.312501 0.375000 -11.937500 +v 0.249999 -1.000000 -11.000000 +v 0.000000 -0.625000 -10.375000 +v -0.187500 -0.625000 -10.375000 +v 0.187500 -0.625000 -10.375000 +v 0.187500 -0.500000 -10.000000 +v -0.187500 -0.500000 -10.000000 +v 0.000000 -0.500000 -10.000000 +v 0.000001 -0.375000 -9.000000 +v 0.187501 -0.375000 -9.000000 +v -0.187499 -0.375000 -9.000000 +v -0.250000 -1.000000 -11.625000 +v -0.312500 0.625000 -11.937500 +v 0.312501 -0.625000 -11.937500 +v 0.312501 -0.375000 -9.000000 +v 0.312501 -0.000000 -11.937500 +v 0.312499 -0.000000 -9.000000 +v 0.312499 -0.250000 -9.000000 +v 0.312501 -0.000000 -11.625000 +v 0.312499 -0.250000 -11.000000 +v 0.312500 -0.250000 -11.625000 +v 0.312499 -0.000000 -10.500000 +v 0.312498 -0.250000 -10.000000 +v 0.312499 -0.250000 -10.500000 +v 0.312499 -0.000000 -10.000000 +v 0.312500 0.625000 -11.000000 +v 0.312501 0.625000 -11.625000 +v 0.312499 -0.000000 -11.000000 +v 0.312499 -0.625000 -10.500000 +v 0.312499 -0.625000 -11.000000 +v 0.312500 -0.625000 -11.625000 +v 0.312499 0.375000 -11.000000 +v 0.312499 0.250000 -10.500000 +v 0.312499 0.250000 -11.000000 +v 0.312499 0.250000 -9.000000 +v 0.312499 0.250000 -10.000000 +v 0.312499 0.375000 -10.500000 +v 0.312501 0.375000 -11.625000 +v 0.312501 0.250000 -11.625000 +v -0.312499 -0.000000 -11.625000 +v -0.312501 0.375000 -11.625000 +v 0.000000 0.375000 -10.000000 +v 0.187500 0.375000 -10.000000 +v -0.187500 0.375000 -10.000000 +v -0.249999 0.375000 -8.000000 +v 0.187500 -0.625000 -7.187500 +v 0.000000 -0.687500 -7.187500 +v 0.000000 -0.625000 -7.187500 +v -0.187500 -0.687500 -7.187500 +v -0.187500 -0.625000 -7.187500 +v 0.000000 -0.375000 -7.257999 +v -0.187500 -0.375000 -7.257999 +v -0.187500 -0.750000 -7.187500 +v 0.187500 -0.687500 -7.187500 +v 0.000000 -0.750000 -7.187500 +v 0.000000 -1.000000 -7.320660 +v -0.187500 -1.000000 -7.320660 +v 0.187500 -1.000000 -7.320660 +v -0.000001 -0.999999 -6.750000 +v -0.000001 -1.499999 -7.125000 +v -0.187501 -1.249999 -6.937500 +v -0.187501 -1.499999 -7.125000 +v -0.000001 -1.874999 -7.062500 +v -0.187501 -1.749999 -7.125000 +v -0.187501 -1.874999 -7.062500 +v -0.000001 -1.749999 -7.125000 +v 0.187499 -1.749999 -7.124998 +v -0.000001 -1.249999 -6.937500 +v -0.187501 -0.999999 -6.750000 +v 0.187499 -1.249999 -6.937498 +v 0.187499 -0.999999 -6.749998 +v 0.000000 -1.500000 -7.812500 +v 0.187500 -1.562500 -7.812498 +v 0.000000 -1.562500 -7.812498 +v 0.000000 -1.250000 -7.628700 +v 0.187500 -1.500000 -7.812500 +v 0.187500 -1.250000 -7.628700 +v -0.187500 -1.500000 -7.812500 +v -0.187500 -1.562500 -7.812498 +v -0.187500 -1.250000 -7.628700 +v 0.187499 -1.874999 -7.062498 +v -0.000001 -1.999999 -7.125000 +v 0.187500 -1.999999 -7.124998 +v -0.187500 -1.999999 -7.125000 +v 0.187499 -1.499999 -7.124998 +v -0.187500 -1.802307 -7.601681 +v 0.000000 -1.802307 -7.601681 +v -0.187500 -1.937500 -7.312498 +v 0.187500 -1.802307 -7.601681 +v 0.000000 -1.937500 -7.312498 +v 0.187500 -1.937500 -7.312498 +v 0.250001 0.500000 -8.000000 +v -0.249999 0.500000 -8.000000 +v 0.187501 0.750000 -8.000000 +v -0.249998 0.499999 -9.000000 +v -0.249999 0.374998 -11.000000 +v -0.249998 0.374999 -9.000000 +v 0.250002 0.374999 -9.000000 +v 0.250001 0.499998 -11.000000 +v 0.250002 0.499999 -9.000000 +v 0.250004 0.749999 -8.000000 +v 0.250001 0.749998 -11.000000 +v 0.250002 0.749999 -9.000000 +v -0.187499 0.749998 -11.000000 +v 0.187502 0.749999 -9.000000 +v 0.098593 0.874999 -8.000000 +v 0.098592 0.874999 -11.000000 +v 0.125004 0.937499 -8.000000 +v 0.124999 0.937498 -11.000000 +v -0.125001 0.937498 -11.000000 +v 0.125002 0.937499 -9.000000 +v 0.187501 0.749998 -11.000000 +v 0.250001 0.375000 -8.000000 +v -0.249999 0.749998 -11.000000 +v -0.249999 0.499998 -11.000000 +v -0.098591 0.874998 -11.000000 +v 0.187500 -0.750000 -7.187500 +v 0.187500 -0.375000 -7.257999 +v -0.093748 0.974879 -1.500000 +v -0.256127 0.881130 1.000000 +v -0.093747 0.974879 1.000000 +v -0.256128 0.881130 -1.500000 +v -0.349877 0.718750 1.000000 +v -0.349878 0.718750 -1.500000 +v -0.349877 0.531250 1.000000 +v -0.349878 0.531250 -1.500000 +v -0.256127 0.368870 1.000000 +v -0.256128 0.368870 -1.500000 +v -0.093747 0.275120 1.000000 +v 0.093752 0.275120 -1.500000 +v 0.093753 0.275120 1.000000 +v 0.256133 0.368870 1.000000 +v 0.256132 0.368870 -1.500000 +v 0.349883 0.531250 1.000000 +v 0.349882 0.531250 -1.500000 +v 0.349883 0.718750 1.000000 +v 0.349882 0.718750 -1.500000 +v 0.256133 0.881129 1.000000 +v 0.256132 0.881129 -1.500000 +v 0.093753 0.974879 1.000000 +v 0.093752 0.974879 -1.500000 +v -0.233250 0.687500 1.500000 +v 0.062503 0.391747 1.500000 +v -0.062494 0.391748 9.750000 +v -0.062497 0.391747 1.500000 +v 0.170756 0.795753 1.500000 +v -0.170750 0.795753 1.500000 +v 0.233256 0.687500 1.500000 +v 0.233256 0.562500 1.500000 +v 0.170756 0.454247 1.500000 +v -0.170750 0.454247 1.500000 +v -0.233250 0.562500 1.500000 +v 0.062503 0.858253 1.500000 +v -0.062497 0.858253 1.500000 +v -0.233247 0.687501 9.750000 +v 0.233259 0.687501 9.750000 +v 0.062506 0.391748 9.750000 +v -0.233247 0.562501 9.750000 +v 0.170759 0.795754 9.750000 +v -0.062494 0.858254 9.750000 +v 0.170759 0.454248 9.750000 +v -0.170747 0.454248 9.750000 +v 0.062506 0.858254 9.750000 +v -0.170747 0.795754 9.750000 +v 0.233259 0.562501 9.750000 +v -0.000008 0.000004 -0.755020 +v -0.173235 -0.249996 -0.826773 +v -0.000008 -0.249996 -0.755020 +v -0.173235 0.000004 -0.826773 +v -0.244988 -0.249996 -1.000000 +v -0.244988 0.000004 -1.000000 +v -0.173235 -0.249996 -1.173227 +v -0.173235 0.000004 -1.173227 +v -0.000008 -0.249996 -1.244980 +v -0.000008 0.000004 -1.244980 +v 0.173220 -0.249996 -1.173227 +v 0.173220 0.000004 -1.173227 +v 0.244972 -0.249996 -1.000000 +v 0.244972 0.000004 -1.000000 +v 0.173220 -0.249996 -0.826773 +v 0.173220 0.000004 -0.826773 +v 0.250001 0.374998 -11.000000 +v -0.093748 0.275120 -1.500000 +v 0.374992 -0.062496 -1.250000 +v 0.374992 -0.187496 -0.750000 +v 0.374992 -0.187496 -1.250000 +v -0.375008 -0.062496 -0.750000 +v 0.374992 -0.062496 -0.687500 +v 0.374992 -0.062496 -0.750000 +v -0.375008 -0.187496 -1.250000 +v -0.375008 -0.187496 -0.750000 +v -0.375008 -0.062496 -1.250000 +v -0.375008 -0.187496 -1.312500 +v -0.375008 -0.187496 -0.687500 +v 0.374992 -0.187496 -0.687500 +v -0.375008 -0.062496 -0.687500 +v -0.187508 -0.687496 -0.687500 +v 0.187492 -0.687496 -0.687500 +v -0.375008 -0.062496 -1.312500 +v 0.374992 -0.187496 -1.312500 +v 0.374992 -0.062496 -1.312500 +v -0.187508 -0.687496 -1.250000 +v 0.187492 -0.687496 -1.250000 +v -0.375008 -0.499996 -0.687500 +v 0.374992 -0.499996 -1.312500 +v 0.187492 -0.687496 -1.312500 +v 0.374992 -0.499996 -0.750000 +v -0.375008 -0.499996 -1.250000 +v 0.187492 -0.687496 -0.750000 +v -0.187508 -0.687496 -0.750000 +v -0.187508 -0.687496 -1.312500 +v 0.374992 -0.499996 -0.687500 +v -0.375008 -0.499996 -0.750000 +v -0.375008 -0.499996 -1.312500 +v 0.374992 -0.499996 -1.250000 +v 0.062500 -0.187499 -6.187500 +v 0.062500 -0.312499 -6.125000 +v 0.062500 -0.312499 -6.187500 +v -0.062500 -0.312499 -6.125000 +v -0.062500 -0.187499 -6.187500 +v -0.062500 -0.312499 -6.187500 +v -0.062500 -0.562499 -6.062500 +v -0.062500 -0.437499 -6.125000 +v -0.062500 -0.437499 -6.187500 +v 0.062500 -0.562499 -6.062500 +v 0.062500 -0.437499 -6.187500 +v 0.062500 -0.437499 -6.125000 +v 0.062500 -0.124999 -6.062500 +v 0.062500 -0.187499 -6.062500 +v -0.062500 -0.187499 -6.062500 +v -0.062500 -0.124999 -6.187500 +v 0.062500 -0.124999 -6.187500 +v -0.062500 -0.124999 -6.062500 +v 0.124999 -0.442256 -5.413582 +v 0.124999 -0.812629 -5.499346 +v 0.124999 -0.788711 -5.557089 +v 0.124999 -0.466174 -5.355840 +v -0.125001 -0.812629 -5.499346 +v -0.125001 -0.466174 -5.355840 +v -0.125001 -0.788711 -5.557089 +v -0.125001 -0.442256 -5.413582 +v 0.159801 1.241865 -0.687500 +v 0.644946 0.982933 -0.687500 +v 0.089144 1.344980 -0.687500 +v 0.136849 1.118991 -1.062500 +v 0.618837 0.942851 -1.062500 +v 0.555804 0.846085 -1.062500 +v 0.033735 1.048334 -1.062500 +v 0.466662 0.709238 -1.062500 +v -0.089140 1.071285 -1.062500 +v 0.492771 0.749320 -1.062500 +v 0.466662 0.709238 -0.687500 +v -0.089139 1.071285 -0.687500 +v 0.136849 1.118991 -0.687500 +v 0.618837 0.942851 -0.687500 +v 0.159801 1.241865 -1.062500 +v 0.644946 0.982933 -1.062500 +v 0.033735 1.048334 -0.687500 +v 0.492771 0.749320 -0.687500 +v 0.555804 0.846085 -0.687500 +v 0.089144 1.344980 -1.062500 +v 1.077873 0.643837 -0.687500 +v 1.200747 0.620886 -0.687500 +v 0.974758 0.573180 -1.062500 +v 1.077872 0.643837 -1.062500 +v 0.951807 0.450306 -1.062500 +v 1.022464 0.347191 -1.062500 +v 1.022464 0.347191 -0.687500 +v 0.974758 0.573180 -0.687500 +v 1.200747 0.620886 -1.062500 +v 0.951807 0.450305 -0.687500 +v 0.136849 1.118991 -1.125000 +v -0.159796 1.174400 -1.062500 +v -0.136845 1.297274 -1.125000 +v -0.159796 1.174400 -1.125000 +v 0.089144 1.344980 -1.125000 +v 0.033735 1.048334 -1.125000 +v -0.089140 1.071285 -1.125000 +v -0.136845 1.297274 -1.062500 +v -0.033731 1.367931 -1.125000 +v 0.159801 1.241865 -1.125000 +v -0.033731 1.367931 -1.062500 +v 0.159801 1.241865 -0.625000 +v -0.033731 1.367931 -0.625000 +v -0.159796 1.174400 -0.625000 +v -0.033731 1.367931 -0.687500 +v -0.136845 1.297274 -0.687500 +v -0.159796 1.174400 -0.687500 +v 0.033735 1.048334 -0.625000 +v 0.136849 1.118991 -0.625000 +v 0.089144 1.344980 -0.625000 +v -0.089140 1.071285 -0.625000 +v -0.136845 1.297274 -0.625000 +v 0.974758 0.573180 -2.562500 +v 1.145338 0.324240 -2.562500 +v 1.248453 0.394896 -1.062500 +v 1.145338 0.324240 -1.062500 +v 1.200747 0.620885 -2.562500 +v 0.951807 0.450305 -2.562500 +v 1.022464 0.347191 -2.562500 +v 1.248453 0.394896 -2.562500 +v 1.271404 0.517771 -1.062500 +v 1.077872 0.643837 -2.562500 +v 1.271404 0.517771 -2.562500 +v 1.271404 0.517771 -0.625000 +v 1.077873 0.643837 -0.625000 +v 0.951807 0.450305 -0.625000 +v 1.271404 0.517771 -0.687500 +v 1.248453 0.394897 -0.687500 +v 1.145338 0.324240 -0.687500 +v 0.974758 0.573180 -0.625000 +v 1.248453 0.394897 -0.625000 +v 1.145338 0.324240 -0.625000 +v 1.200747 0.620886 -0.625000 +v 1.022464 0.347191 -0.625000 +vt 0.712271 0.389253 +vt 0.714181 0.403050 +vt 0.701143 0.403049 +vt 0.726469 0.305411 +vt 0.734446 0.216313 +vt 0.756238 0.281538 +vt 0.751567 0.361696 +vt 0.756154 0.412933 +vt 0.726503 0.436712 +vt 0.152017 0.420167 +vt 0.152017 0.433749 +vt 0.147479 0.433749 +vt 0.161230 0.420206 +vt 0.161230 0.433711 +vt 0.156718 0.433711 +vt 0.160093 0.750000 +vt 0.169374 0.756944 +vt 0.160093 0.756944 +vt 0.160093 0.694444 +vt 0.169374 0.701389 +vt 0.160093 0.701389 +vt 0.160093 0.729167 +vt 0.169374 0.750000 +vt 0.160093 0.708333 +vt 0.169374 0.729167 +vt 0.169374 0.708333 +vt 0.169374 0.763889 +vt 0.160093 0.763889 +vt 0.259861 0.729167 +vt 0.250580 0.722222 +vt 0.259861 0.722222 +vt 0.259861 0.743056 +vt 0.250580 0.736111 +vt 0.259861 0.736111 +vt 0.250580 0.729167 +vt 0.245940 0.722222 +vt 0.250580 0.743056 +vt 0.245940 0.736111 +vt 0.412993 0.076389 +vt 0.406032 0.048611 +vt 0.412993 0.048611 +vt 0.220418 0.090278 +vt 0.213457 0.111111 +vt 0.213457 0.090278 +vt 0.408353 0.333333 +vt 0.343387 0.312500 +vt 0.408353 0.312500 +vt 0.206497 0.090278 +vt 0.206497 0.048611 +vt 0.213457 0.048611 +vt 0.408353 0.284722 +vt 0.343387 0.243056 +vt 0.408353 0.243056 +vt 0.199536 0.090278 +vt 0.192575 0.048611 +vt 0.199536 0.048611 +vt 0.285383 0.090278 +vt 0.220418 0.048611 +vt 0.285383 0.048611 +vt 0.294664 0.076389 +vt 0.199536 0.111111 +vt 0.192575 0.090278 +vt 0.206497 0.111111 +vt 0.294664 0.104167 +vt 0.285383 0.118056 +vt 0.220418 0.118056 +vt 0.285383 0.138889 +vt 0.220418 0.138889 +vt 0.373550 0.076389 +vt 0.406032 0.104167 +vt 0.373550 0.104167 +vt 0.308585 0.291667 +vt 0.252900 0.319444 +vt 0.252900 0.291667 +vt 0.408353 0.118056 +vt 0.352668 0.131944 +vt 0.352668 0.118056 +vt 0.324826 0.354167 +vt 0.324826 0.333333 +vt 0.331787 0.333333 +vt 0.338747 0.222222 +vt 0.352668 0.208333 +vt 0.352668 0.222222 +vt 0.331787 0.291667 +vt 0.317865 0.333333 +vt 0.324826 0.291667 +vt 0.294664 0.138889 +vt 0.419954 0.097222 +vt 0.424594 0.076389 +vt 0.426914 0.097222 +vt 0.317865 0.291667 +vt 0.308585 0.319444 +vt 0.419954 0.076389 +vt 0.419954 0.048611 +vt 0.412993 0.097222 +vt 0.406032 0.076389 +vt 0.373550 0.048611 +vt 0.294664 0.048611 +vt 0.350348 0.076389 +vt 0.329466 0.222222 +vt 0.301624 0.208333 +vt 0.329466 0.208333 +vt 0.334107 0.333333 +vt 0.343387 0.333333 +vt 0.238979 0.319444 +vt 0.238979 0.291667 +vt 0.350348 0.104167 +vt 0.229698 0.291667 +vt 0.197216 0.319444 +vt 0.197216 0.291667 +vt 0.229698 0.319444 +vt 0.350348 0.048611 +vt 0.364269 0.076389 +vt 0.364269 0.048611 +vt 0.410673 0.187500 +vt 0.403712 0.166667 +vt 0.410673 0.166667 +vt 0.338747 0.152778 +vt 0.329466 0.166667 +vt 0.329466 0.152778 +vt 0.338747 0.131944 +vt 0.338747 0.118056 +vt 0.410673 0.208333 +vt 0.403712 0.187500 +vt 0.364269 0.104167 +vt 0.296984 0.131944 +vt 0.329466 0.131944 +vt 0.408353 0.152778 +vt 0.417633 0.145833 +vt 0.417633 0.166667 +vt 0.408353 0.131944 +vt 0.352668 0.152778 +vt 0.283063 0.173611 +vt 0.280742 0.194444 +vt 0.273782 0.173611 +vt 0.294664 0.166667 +vt 0.301624 0.187500 +vt 0.294664 0.187500 +vt 0.338747 0.166667 +vt 0.329466 0.118056 +vt 0.296984 0.118056 +vt 0.417633 0.118056 +vt 0.338747 0.208333 +vt 0.257541 0.194444 +vt 0.255220 0.173611 +vt 0.264501 0.173611 +vt 0.257541 0.145833 +vt 0.264501 0.145833 +vt 0.273782 0.145833 +vt 0.292343 0.145833 +vt 0.283063 0.173611 +vt 0.283063 0.145833 +vt 0.280742 0.145833 +vt 0.264501 0.201389 +vt 0.329466 0.187500 +vt 0.403712 0.208333 +vt 0.352668 0.187500 +vt 0.338747 0.187500 +vt 0.352668 0.166667 +vt 0.408353 0.222222 +vt 0.301624 0.166667 +vt 0.296984 0.152778 +vt 0.294664 0.208333 +vt 0.229698 0.270833 +vt 0.206497 0.034722 +vt 0.220418 0.034722 +vt 0.350348 0.034722 +vt 0.252900 0.270833 +vt 0.408353 0.229167 +vt 0.317865 0.270833 +vt 0.419954 0.034722 +vt 0.426914 0.048611 +vt 0.364269 0.034722 +vt 0.412993 0.034722 +vt 0.294664 0.034722 +vt 0.285383 0.034722 +vt 0.213457 0.034722 +vt 0.406032 0.034722 +vt 0.373550 0.034722 +vt 0.199536 0.034722 +vt 0.308585 0.270833 +vt 0.317865 0.250000 +vt 0.426914 0.034722 +vt 0.433875 0.048611 +vt 0.238979 0.270833 +vt 0.264501 0.243056 +vt 0.278422 0.229167 +vt 0.278422 0.243056 +vt 0.334107 0.229167 +vt 0.334107 0.243056 +vt 0.222738 0.243056 +vt 0.255220 0.229167 +vt 0.255220 0.243056 +vt 0.264501 0.229167 +vt 0.343387 0.229167 +vt 0.252900 0.250000 +vt 0.197216 0.270833 +vt 0.229698 0.250000 +vt 0.308585 0.250000 +vt 0.373550 0.479167 +vt 0.410673 0.451389 +vt 0.410673 0.479167 +vt 0.429234 0.451389 +vt 0.429234 0.479167 +vt 0.373550 0.368056 +vt 0.410673 0.354167 +vt 0.410673 0.368056 +vt 0.443155 0.576389 +vt 0.433875 0.590278 +vt 0.433875 0.576389 +vt 0.429234 0.354167 +vt 0.429234 0.368056 +vt 0.262181 0.368056 +vt 0.299304 0.354167 +vt 0.299304 0.368056 +vt 0.322506 0.368056 +vt 0.336427 0.354167 +vt 0.336427 0.368056 +vt 0.150812 0.444444 +vt 0.169374 0.472222 +vt 0.150812 0.472222 +vt 0.132251 0.250000 +vt 0.150812 0.222222 +vt 0.150812 0.250000 +vt 0.213457 0.479167 +vt 0.225058 0.451389 +vt 0.225058 0.479167 +vt 0.255220 0.451389 +vt 0.262181 0.479167 +vt 0.255220 0.479167 +vt 0.262181 0.451389 +vt 0.299304 0.479167 +vt 0.322506 0.479167 +vt 0.336427 0.451389 +vt 0.336427 0.479167 +vt 0.354988 0.479167 +vt 0.373550 0.451389 +vt 0.396752 0.993056 +vt 0.389791 0.979167 +vt 0.396752 0.979167 +vt 0.296984 0.993056 +vt 0.303944 0.979167 +vt 0.303944 0.993056 +vt 0.445476 0.993056 +vt 0.447796 0.979167 +vt 0.447796 0.993056 +vt 0.352668 0.993056 +vt 0.354988 0.979167 +vt 0.354988 0.993056 +vt 0.206497 0.569444 +vt 0.201856 0.576389 +vt 0.201856 0.569444 +vt 0.213457 0.506944 +vt 0.206497 0.493056 +vt 0.213457 0.493056 +vt 0.213457 0.590278 +vt 0.206497 0.576389 +vt 0.213457 0.576389 +vt 0.410673 0.493056 +vt 0.429234 0.506944 +vt 0.410673 0.506944 +vt 0.373550 0.493056 +vt 0.348028 0.506944 +vt 0.336427 0.493056 +vt 0.348028 0.493056 +vt 0.354988 0.590278 +vt 0.373550 0.604167 +vt 0.354988 0.604167 +vt 0.322506 0.590278 +vt 0.336427 0.604167 +vt 0.322506 0.604167 +vt 0.262181 0.590278 +vt 0.299304 0.604167 +vt 0.262181 0.604167 +vt 0.255220 0.590278 +vt 0.255220 0.604167 +vt 0.225058 0.604167 +vt 0.213457 0.604167 +vt 0.410673 0.590278 +vt 0.429234 0.604167 +vt 0.410673 0.604167 +vt 0.299304 0.506944 +vt 0.313225 0.493056 +vt 0.313225 0.506944 +vt 0.373550 0.590278 +vt 0.262181 0.506944 +vt 0.299304 0.493056 +vt 0.225058 0.506944 +vt 0.236659 0.493056 +vt 0.236659 0.506944 +vt 0.410673 0.631944 +vt 0.373550 0.631944 +vt 0.429234 0.631944 +vt 0.132251 0.444444 +vt 0.132251 0.472222 +vt 0.225058 0.631944 +vt 0.213457 0.631944 +vt 0.262181 0.631944 +vt 0.255220 0.631944 +vt 0.299304 0.631944 +vt 0.336427 0.631944 +vt 0.322506 0.631944 +vt 0.354988 0.631944 +vt 0.354988 0.493056 +vt 0.322506 0.493056 +vt 0.262181 0.493056 +vt 0.255220 0.493056 +vt 0.225058 0.493056 +vt 0.429234 0.576389 +vt 0.429234 0.590278 +vt 0.429234 0.493056 +vt 0.313225 0.965278 +vt 0.301624 0.958333 +vt 0.301624 0.965278 +vt 0.324826 0.965278 +vt 0.313225 0.958333 +vt 0.201856 0.506944 +vt 0.206497 0.506944 +vt 0.201856 0.590278 +vt 0.433875 0.506944 +vt 0.429234 0.569444 +vt 0.236659 0.590278 +vt 0.225058 0.576389 +vt 0.236659 0.576389 +vt 0.299304 0.590278 +vt 0.262181 0.576389 +vt 0.299304 0.576389 +vt 0.313225 0.590278 +vt 0.313225 0.576389 +vt 0.348028 0.590278 +vt 0.336427 0.576389 +vt 0.348028 0.576389 +vt 0.373550 0.576389 +vt 0.410673 0.576389 +vt 0.373550 0.513889 +vt 0.410673 0.513889 +vt 0.429234 0.513889 +vt 0.206497 0.451389 +vt 0.213457 0.437500 +vt 0.213457 0.451389 +vt 0.206497 0.368056 +vt 0.213457 0.354167 +vt 0.213457 0.368056 +vt 0.438515 0.993056 +vt 0.426914 0.979167 +vt 0.438515 0.979167 +vt 0.169374 0.222222 +vt 0.169374 0.250000 +vt 0.348028 0.437500 +vt 0.348028 0.451389 +vt 0.315545 0.993056 +vt 0.327146 0.979167 +vt 0.327146 0.993056 +vt 0.348028 0.354167 +vt 0.354988 0.375000 +vt 0.373550 0.375000 +vt 0.322506 0.451389 +vt 0.336427 0.437500 +vt 0.299304 0.437500 +vt 0.299304 0.451389 +vt 0.299304 0.375000 +vt 0.262181 0.375000 +vt 0.262181 0.437500 +vt 0.255220 0.437500 +vt 0.262181 0.354167 +vt 0.255220 0.368056 +vt 0.255220 0.354167 +vt 0.429234 0.437500 +vt 0.410673 0.375000 +vt 0.429234 0.375000 +vt 0.443155 0.493056 +vt 0.433875 0.493056 +vt 0.443155 0.569444 +vt 0.433875 0.569444 +vt 0.410673 0.437500 +vt 0.373550 0.423611 +vt 0.410673 0.430556 +vt 0.373550 0.430556 +vt 0.410673 0.402778 +vt 0.410673 0.423611 +vt 0.373550 0.402778 +vt 0.410673 0.381944 +vt 0.443155 0.513889 +vt 0.433875 0.520833 +vt 0.433875 0.513889 +vt 0.443155 0.520833 +vt 0.433875 0.541667 +vt 0.443155 0.541667 +vt 0.433875 0.562500 +vt 0.429234 0.423611 +vt 0.429234 0.430556 +vt 0.429234 0.402778 +vt 0.429234 0.381944 +vt 0.132251 0.222222 +vt 0.150812 0.208333 +vt 0.187933 0.632198 +vt 0.190243 0.618374 +vt 0.190243 0.632198 +vt 0.262181 0.423611 +vt 0.299304 0.430556 +vt 0.262181 0.430556 +vt 0.299304 0.402778 +vt 0.299304 0.423611 +vt 0.262181 0.402778 +vt 0.299304 0.381944 +vt 0.412993 0.777778 +vt 0.399072 0.756944 +vt 0.412993 0.756944 +vt 0.350348 0.777778 +vt 0.352668 0.756944 +vt 0.352668 0.777778 +vt 0.354988 0.430556 +vt 0.354988 0.423611 +vt 0.354988 0.402778 +vt 0.373550 0.381944 +vt 0.257536 0.639044 +vt 0.276084 0.645983 +vt 0.257536 0.645984 +vt 0.276084 0.666802 +vt 0.257536 0.666803 +vt 0.276084 0.687621 +vt 0.257536 0.687622 +vt 0.169374 0.486111 +vt 0.150812 0.486111 +vt 0.169374 0.208333 +vt 0.410673 0.562500 +vt 0.410673 0.569444 +vt 0.410673 0.541667 +vt 0.429234 0.562500 +vt 0.410673 0.520833 +vt 0.429234 0.541667 +vt 0.373550 0.569444 +vt 0.373550 0.541667 +vt 0.238987 0.645984 +vt 0.229713 0.639044 +vt 0.238987 0.639044 +vt 0.238987 0.666803 +vt 0.229713 0.645984 +vt 0.225075 0.639044 +vt 0.229713 0.666803 +vt 0.225075 0.645984 +vt 0.429234 0.520833 +vt 0.417633 0.972222 +vt 0.429234 0.965278 +vt 0.417633 0.965278 +vt 0.410673 0.944444 +vt 0.408353 0.909722 +vt 0.410673 0.909722 +vt 0.387471 0.972222 +vt 0.389791 0.937500 +vt 0.389791 0.972222 +vt 0.440835 0.972222 +vt 0.440835 0.965278 +vt 0.150812 0.152778 +vt 0.169374 0.145833 +vt 0.169374 0.152778 +vt 0.206497 0.513889 +vt 0.201856 0.520833 +vt 0.201856 0.513889 +vt 0.206497 0.520833 +vt 0.201856 0.541667 +vt 0.206497 0.541667 +vt 0.201856 0.562500 +vt 0.255220 0.381944 +vt 0.262181 0.381944 +vt 0.380510 0.937500 +vt 0.387471 0.937500 +vt 0.255220 0.423611 +vt 0.171694 0.097222 +vt 0.174014 0.090278 +vt 0.174014 0.097222 +vt 0.255220 0.375000 +vt 0.345708 0.930556 +vt 0.338747 0.895833 +vt 0.345708 0.895833 +vt 0.248260 0.354167 +vt 0.238979 0.368056 +vt 0.238979 0.354167 +vt 0.248260 0.437500 +vt 0.238979 0.451389 +vt 0.238979 0.437500 +vt 0.338747 0.993056 +vt 0.345708 0.979167 +vt 0.345708 0.993056 +vt 0.248260 0.576389 +vt 0.255220 0.576389 +vt 0.354988 0.930556 +vt 0.361949 0.895833 +vt 0.361949 0.930556 +vt 0.238979 0.493056 +vt 0.248260 0.479167 +vt 0.248260 0.493056 +vt 0.238979 0.604167 +vt 0.248260 0.631944 +vt 0.238979 0.631944 +vt 0.248260 0.506944 +vt 0.255220 0.506944 +vt 0.238979 0.590278 +vt 0.248260 0.604167 +vt 0.412993 0.993056 +vt 0.403712 0.979167 +vt 0.412993 0.979167 +vt 0.238979 0.479167 +vt 0.378190 0.881944 +vt 0.371230 0.861111 +vt 0.378190 0.861111 +vt 0.396752 0.881944 +vt 0.403712 0.888889 +vt 0.396752 0.888889 +vt 0.345708 0.888889 +vt 0.338747 0.888889 +vt 0.331787 0.902778 +vt 0.334107 0.868056 +vt 0.334107 0.902778 +vt 0.352668 0.930556 +vt 0.354988 0.895833 +vt 0.389791 0.930556 +vt 0.396752 0.895833 +vt 0.396752 0.930556 +vt 0.406032 0.902778 +vt 0.408353 0.868056 +vt 0.408353 0.902778 +vt 0.387471 0.979167 +vt 0.380510 0.972222 +vt 0.336427 0.868056 +vt 0.336427 0.902778 +vt 0.345708 0.881944 +vt 0.338747 0.881944 +vt 0.294664 0.993056 +vt 0.296984 0.979167 +vt 0.354988 0.437500 +vt 0.373550 0.437500 +vt 0.422274 0.777778 +vt 0.424594 0.756944 +vt 0.424594 0.777778 +vt 0.443155 0.506944 +vt 0.181005 0.632198 +vt 0.187933 0.618374 +vt 0.373550 0.520833 +vt 0.324826 0.972222 +vt 0.313225 0.972222 +vt 0.301624 0.972222 +vt 0.410673 0.902778 +vt 0.410673 0.868056 +vt 0.387471 0.930556 +vt 0.389791 0.895833 +vt 0.403712 0.895833 +vt 0.387471 0.993056 +vt 0.389791 0.993056 +vt 0.429234 0.958333 +vt 0.440835 0.958333 +vt 0.417633 0.958333 +vt 0.238987 0.687622 +vt 0.443155 0.562500 +vt 0.171767 0.632198 +vt 0.174076 0.618374 +vt 0.174076 0.632198 +vt 0.354988 0.381944 +vt 0.276084 0.694561 +vt 0.257536 0.694561 +vt 0.238987 0.694561 +vt 0.229713 0.687622 +vt 0.174076 0.687498 +vt 0.171767 0.659848 +vt 0.174076 0.659848 +vt 0.206497 0.562500 +vt 0.181005 0.659848 +vt 0.187933 0.659848 +vt 0.190243 0.659848 +vt 0.122970 0.444444 +vt 0.122970 0.472222 +vt 0.122970 0.250000 +vt 0.132251 0.486111 +vt 0.181005 0.618374 +vt 0.150812 0.541667 +vt 0.169374 0.548611 +vt 0.150812 0.548611 +vt 0.187935 0.097222 +vt 0.190255 0.090278 +vt 0.190255 0.097222 +vt 0.406033 0.958333 +vt 0.415313 0.965278 +vt 0.415313 0.958333 +vt 0.336427 0.972222 +vt 0.327146 0.965278 +vt 0.327146 0.972222 +vt 0.236659 0.451389 +vt 0.236659 0.479167 +vt 0.415313 0.993056 +vt 0.415313 0.979167 +vt 0.236659 0.604167 +vt 0.236659 0.631944 +vt 0.236659 0.437500 +vt 0.236659 0.368056 +vt 0.236659 0.354167 +vt 0.406033 0.965278 +vt 0.415313 0.972222 +vt 0.329466 0.993056 +vt 0.338747 0.979167 +vt 0.248260 0.590278 +vt 0.238979 0.576389 +vt 0.336427 0.965278 +vt 0.327146 0.958333 +vt 0.238979 0.506944 +vt 0.334107 0.944444 +vt 0.336427 0.909722 +vt 0.336427 0.944444 +vt 0.354988 0.937500 +vt 0.361949 0.972222 +vt 0.354988 0.972222 +vt 0.406032 0.944444 +vt 0.408353 0.944444 +vt 0.396752 0.937500 +vt 0.396752 0.972222 +vt 0.380510 0.979167 +vt 0.352668 0.972222 +vt 0.331787 0.944444 +vt 0.334107 0.909722 +vt 0.338747 0.972222 +vt 0.345708 0.937500 +vt 0.345708 0.972222 +vt 0.371230 0.881944 +vt 0.364269 0.888889 +vt 0.364269 0.881944 +vt 0.371230 0.888889 +vt 0.150812 0.493056 +vt 0.143852 0.513889 +vt 0.134571 0.493056 +vt 0.150812 0.180556 +vt 0.146172 0.152778 +vt 0.150812 0.201389 +vt 0.143852 0.180556 +vt 0.187933 0.611461 +vt 0.187935 0.152778 +vt 0.190255 0.145833 +vt 0.190255 0.152778 +vt 0.187935 0.125000 +vt 0.190255 0.125000 +vt 0.169374 0.493056 +vt 0.150812 0.513889 +vt 0.169374 0.541667 +vt 0.134571 0.201389 +vt 0.171694 0.152778 +vt 0.174014 0.145833 +vt 0.174014 0.152778 +vt 0.171694 0.125000 +vt 0.174014 0.125000 +vt 0.181005 0.611461 +vt 0.169374 0.201389 +vt 0.169374 0.180556 +vt 0.447796 0.965278 +vt 0.447796 0.958333 +vt 0.294664 0.965278 +vt 0.294664 0.972222 +vt 0.447796 0.972222 +vt 0.445476 0.979167 +vt 0.225058 0.354167 +vt 0.225058 0.368056 +vt 0.225058 0.437500 +vt 0.294664 0.958333 +vt 0.206497 0.604167 +vt 0.206497 0.631944 +vt 0.206497 0.590278 +vt 0.225058 0.590278 +vt 0.315545 0.979167 +vt 0.206497 0.479167 +vt 0.412993 0.847222 +vt 0.419954 0.868056 +vt 0.412993 0.868056 +vt 0.412993 0.895833 +vt 0.419954 0.923611 +vt 0.412993 0.923611 +vt 0.412993 0.888889 +vt 0.419954 0.895833 +vt 0.412993 0.784722 +vt 0.419954 0.791667 +vt 0.412993 0.791667 +vt 0.412993 0.840278 +vt 0.419954 0.847222 +vt 0.419954 0.888889 +vt 0.412993 0.944444 +vt 0.419954 0.951389 +vt 0.412993 0.951389 +vt 0.419954 0.812500 +vt 0.412993 0.812500 +vt 0.419954 0.944444 +vt 0.431555 0.951389 +vt 0.419954 0.784722 +vt 0.431555 0.791667 +vt 0.431555 0.868056 +vt 0.419954 0.840278 +vt 0.431555 0.847222 +vt 0.431555 0.888889 +vt 0.431555 0.895833 +vt 0.426914 0.993056 +vt 0.329466 0.979167 +vt 0.324826 0.958333 +vt 0.431555 0.784722 +vt 0.443155 0.791667 +vt 0.443155 0.840278 +vt 0.443155 0.847222 +vt 0.443155 0.944444 +vt 0.443155 0.951389 +vt 0.443155 0.895833 +vt 0.445476 0.840278 +vt 0.445476 0.784722 +vt 0.445476 0.791667 +vt 0.445476 0.951389 +vt 0.445476 0.944444 +vt 0.443155 0.909722 +vt 0.445476 0.909722 +vt 0.443155 0.826389 +vt 0.445476 0.826389 +vt 0.445476 0.895833 +vt 0.361949 0.993056 +vt 0.361949 0.979167 +vt 0.331787 0.951389 +vt 0.334107 0.951389 +vt 0.352668 0.979167 +vt 0.380510 0.930556 +vt 0.406032 0.951389 +vt 0.408353 0.951389 +vt 0.255220 0.402778 +vt 0.336427 0.951389 +vt 0.410673 0.951389 +vt 0.454756 0.791667 +vt 0.454756 0.944444 +vt 0.454756 0.826389 +vt 0.454756 0.909722 +vt 0.443155 0.888889 +vt 0.408353 0.812500 +vt 0.401392 0.854167 +vt 0.401392 0.812500 +vt 0.392111 0.854167 +vt 0.380510 0.812500 +vt 0.392111 0.812500 +vt 0.380510 0.854167 +vt 0.368910 0.812500 +vt 0.329466 0.812500 +vt 0.341067 0.854167 +vt 0.329466 0.854167 +vt 0.352668 0.854167 +vt 0.341067 0.812500 +vt 0.352668 0.812500 +vt 0.364269 0.812500 +vt 0.364269 0.854167 +vt 0.368910 0.854167 +vt 0.180974 0.090278 +vt 0.187935 0.076389 +vt 0.187935 0.090278 +vt 0.174014 0.076389 +vt 0.146172 0.541667 +vt 0.146172 0.548611 +vt 0.146172 0.145833 +vt 0.150812 0.138889 +vt 0.150812 0.145833 +vt 0.150812 0.555556 +vt 0.157773 0.583333 +vt 0.143852 0.583333 +vt 0.157773 0.111111 +vt 0.143852 0.111111 +vt 0.171694 0.083333 +vt 0.136891 0.083333 +vt 0.141531 0.111111 +vt 0.129930 0.083333 +vt 0.146172 0.138889 +vt 0.146172 0.555556 +vt 0.141531 0.583333 +vt 0.190255 0.083333 +vt 0.122970 0.645833 +vt 0.129930 0.638889 +vt 0.129930 0.666667 +vt 0.129930 0.611111 +vt 0.122970 0.638889 +vt 0.136891 0.611111 +vt 0.129930 0.055556 +vt 0.122970 0.048611 +vt 0.129930 0.027778 +vt 0.122970 0.055556 +vt 0.171767 0.618374 +vt 0.174076 0.611461 +vt 0.171694 0.145833 +vt 0.169374 0.513889 +vt 0.187935 0.145833 +vt 0.169374 0.555556 +vt 0.167053 0.562500 +vt 0.145833 0.014434 +vt 0.140890 0.012691 +vt 0.144880 0.008725 +vt 0.143790 0.666758 +vt 0.140890 0.682373 +vt 0.403712 0.972222 +vt 0.352668 0.937500 +vt 0.403712 0.937500 +vt 0.403712 0.930556 +vt 0.352668 0.888889 +vt 0.352668 0.895833 +vt 0.248260 0.368056 +vt 0.248260 0.451389 +vt 0.403712 0.993056 +vt 0.378190 0.993056 +vt 0.380510 0.993056 +vt 0.371230 0.993056 +vt 0.378190 0.979167 +vt 0.364269 0.993056 +vt 0.371230 0.979167 +vt 0.352668 0.861111 +vt 0.352668 0.881944 +vt 0.389791 0.861111 +vt 0.389791 0.881944 +vt 0.378190 0.930556 +vt 0.380510 0.895833 +vt 0.364269 0.930556 +vt 0.364269 0.895833 +vt 0.364269 0.979167 +vt 0.364269 0.937500 +vt 0.364269 0.972222 +vt 0.378190 0.972222 +vt 0.371230 0.972222 +vt 0.378190 0.937500 +vt 0.371230 0.937500 +vt 0.371230 0.930556 +vt 0.387471 0.895833 +vt 0.364269 0.861111 +vt 0.406032 0.909722 +vt 0.331787 0.909722 +vt 0.361949 0.937500 +vt 0.338747 0.937500 +vt 0.313225 0.375000 +vt 0.313225 0.381944 +vt 0.313225 0.430556 +vt 0.313225 0.437500 +vt 0.313225 0.402778 +vt 0.313225 0.423611 +vt 0.313225 0.368056 +vt 0.313225 0.451389 +vt 0.322506 0.576389 +vt 0.313225 0.631944 +vt 0.322506 0.506944 +vt 0.313225 0.604167 +vt 0.313225 0.479167 +vt 0.313225 0.354167 +vt 0.343387 0.701389 +vt 0.350348 0.701389 +vt 0.343387 0.687500 +vt 0.361949 0.756944 +vt 0.361949 0.777778 +vt 0.348028 0.375000 +vt 0.354988 0.368056 +vt 0.373550 0.354167 +vt 0.354988 0.354167 +vt 0.354988 0.451389 +vt 0.354988 0.576389 +vt 0.348028 0.604167 +vt 0.348028 0.631944 +vt 0.373550 0.506944 +vt 0.348028 0.479167 +vt 0.433875 0.708333 +vt 0.433875 0.756944 +vt 0.375870 0.708333 +vt 0.375870 0.756944 +vt 0.350348 0.756944 +vt 0.341067 0.708333 +vt 0.350348 0.708333 +vt 0.378190 0.708333 +vt 0.378190 0.756944 +vt 0.352668 0.708333 +vt 0.338747 0.756944 +vt 0.341067 0.756944 +vt 0.412993 0.652778 +vt 0.422274 0.645833 +vt 0.422274 0.652778 +vt 0.412993 0.673611 +vt 0.422274 0.673611 +vt 0.412993 0.694444 +vt 0.422274 0.694444 +vt 0.412993 0.701389 +vt 0.422274 0.701389 +vt 0.396752 0.777778 +vt 0.399072 0.777778 +vt 0.331787 0.673611 +vt 0.343387 0.659722 +vt 0.343387 0.673611 +vt 0.375870 0.777778 +vt 0.378190 0.777778 +vt 0.350348 0.673611 +vt 0.401392 0.701389 +vt 0.401392 0.694444 +vt 0.401392 0.673611 +vt 0.401392 0.652778 +vt 0.412993 0.645833 +vt 0.336427 0.590278 +vt 0.336427 0.375000 +vt 0.348028 0.368056 +vt 0.348028 0.430556 +vt 0.331787 0.701389 +vt 0.331787 0.680556 +vt 0.354988 0.506944 +vt 0.331787 0.756944 +vt 0.338747 0.708333 +vt 0.341067 0.777778 +vt 0.338747 0.777778 +vt 0.380510 0.756944 +vt 0.387471 0.708333 +vt 0.387471 0.756944 +vt 0.336427 0.506944 +vt 0.422274 0.756944 +vt 0.322506 0.437500 +vt 0.322506 0.354167 +vt 0.396752 0.666667 +vt 0.399072 0.708333 +vt 0.396752 0.708333 +vt 0.378190 0.666667 +vt 0.380510 0.708333 +vt 0.380510 0.666667 +vt 0.387471 0.666667 +vt 0.394432 0.708333 +vt 0.375870 0.666667 +vt 0.394432 0.666667 +vt 0.375870 0.638889 +vt 0.396752 0.638889 +vt 0.399072 0.666667 +vt 0.412993 0.708333 +vt 0.436195 0.708333 +vt 0.436195 0.756944 +vt 0.361949 0.708333 +vt 0.394432 0.756944 +vt 0.396752 0.756944 +vt 0.424594 0.708333 +vt 0.422274 0.708333 +vt 0.443155 0.708333 +vt 0.443155 0.756944 +vt 0.322506 0.375000 +vt 0.322506 0.381944 +vt 0.322506 0.402778 +vt 0.322506 0.423611 +vt 0.322506 0.430556 +vt 0.436195 0.777778 +vt 0.331787 0.777778 +vt 0.433875 0.777778 +vt 0.192575 0.493056 +vt 0.201856 0.493056 +vt 0.192575 0.569444 +vt 0.192575 0.590278 +vt 0.181005 0.687498 +vt 0.187933 0.687498 +vt 0.190243 0.687498 +vt 0.113689 0.444444 +vt 0.113689 0.472222 +vt 0.113689 0.222222 +vt 0.113689 0.250000 +vt 0.220438 0.639044 +vt 0.076566 0.527778 +vt 0.002320 0.506944 +vt 0.076566 0.506944 +vt 0.225075 0.666803 +vt 0.229713 0.694561 +vt 0.225075 0.687622 +vt 0.122970 0.527778 +vt 0.113689 0.506944 +vt 0.122970 0.506944 +vt 0.122970 0.548611 +vt 0.113689 0.527778 +vt 0.220438 0.645984 +vt 0.211164 0.639044 +vt 0.225075 0.694561 +vt 0.220438 0.687622 +vt 0.076566 0.548611 +vt 0.002320 0.527778 +vt 0.220438 0.666803 +vt 0.211137 0.687500 +vt 0.204176 0.694444 +vt 0.204176 0.687500 +vt 0.220438 0.694561 +vt 0.285383 0.701389 +vt 0.294664 0.708333 +vt 0.285383 0.708333 +vt 0.194896 0.708333 +vt 0.204176 0.701389 +vt 0.204176 0.708333 +vt 0.194896 0.694444 +vt 0.203016 0.687500 +vt 0.248260 0.701389 +vt 0.113689 0.548611 +vt 0.241299 0.708333 +vt 0.247100 0.708333 +vt 0.241299 0.701389 +vt 0.459397 0.847222 +vt 0.450116 0.868056 +vt 0.450116 0.847222 +vt 0.445476 0.868056 +vt 0.445476 0.847222 +vt 0.443155 0.868056 +vt 0.445476 0.888889 +vt 0.459397 0.868056 +vt 0.450116 0.888889 +vt 0.150812 0.083333 +vt 0.150812 0.611111 +vt 0.167053 0.131944 +vt 0.143852 0.055556 +vt 0.143852 0.638889 +vt 0.146172 0.680556 +vt 0.144880 0.686339 +vt 0.143852 0.027778 +vt 0.301624 0.687500 +vt 0.320186 0.715278 +vt 0.301624 0.715278 +vt 0.320186 0.687500 +vt 0.329466 0.673611 +vt 0.329466 0.687500 +vt 0.320186 0.673611 +vt 0.301624 0.645833 +vt 0.320186 0.645833 +vt 0.301624 0.673611 +vt 0.292343 0.687500 +vt 0.292343 0.673611 +vt 0.294664 0.666667 +vt 0.292343 0.652778 +vt 0.294664 0.652778 +vt 0.292343 0.666667 +vt 0.287703 0.652778 +vt 0.290023 0.645833 +vt 0.285383 0.638889 +vt 0.290023 0.638889 +vt 0.290023 0.680556 +vt 0.285383 0.673611 +vt 0.290023 0.673611 +vt 0.280742 0.666667 +vt 0.278422 0.652778 +vt 0.280742 0.652778 +vt 0.285383 0.645833 +vt 0.283063 0.638889 +vt 0.285383 0.680556 +vt 0.283063 0.673611 +vt 0.285383 0.666667 +vt 0.283063 0.652778 +vt 0.285383 0.652778 +vt 0.283063 0.666667 +vt 0.287703 0.666667 +vt 0.283063 0.645833 +vt 0.712271 0.416846 +vt 0.707662 0.422560 +vt 0.703052 0.416846 +vt 0.703052 0.389253 +vt 0.707662 0.383539 +vt 0.751633 0.305411 +vt 0.743656 0.339175 +vt 0.734446 0.339175 +vt 0.721864 0.281537 +vt 0.721864 0.253971 +vt 0.726469 0.230097 +vt 0.743656 0.216313 +vt 0.751633 0.230097 +vt 0.756238 0.253971 +vt 0.743622 0.470343 +vt 0.734448 0.470343 +vt 0.721916 0.412933 +vt 0.721916 0.385475 +vt 0.726503 0.361695 +vt 0.734448 0.347966 +vt 0.743622 0.347966 +vt 0.756154 0.385475 +vt 0.751567 0.436712 +vt 0.147479 0.420167 +vt 0.149748 0.417354 +vt 0.152957 0.426958 +vt 0.149748 0.436562 +vt 0.146540 0.426958 +vt 0.155784 0.426958 +vt 0.156718 0.420206 +vt 0.158974 0.417409 +vt 0.162164 0.426958 +vt 0.158974 0.436507 +vt 0.169374 0.694444 +vt 0.245940 0.729167 +vt 0.245940 0.743056 +vt 0.343387 0.284722 +vt 0.294664 0.118056 +vt 0.296984 0.222222 +vt 0.334107 0.312500 +vt 0.417633 0.138889 +vt 0.292343 0.173611 +vt 0.273782 0.201389 +vt 0.192575 0.034722 +vt 0.433875 0.034722 +vt 0.222738 0.229167 +vt 0.238979 0.250000 +vt 0.197216 0.250000 +vt 0.443155 0.590278 +vt 0.169374 0.444444 +vt 0.206497 0.437500 +vt 0.206497 0.354167 +vt 0.132251 0.208333 +vt 0.276084 0.639044 +vt 0.373550 0.562500 +vt 0.429234 0.972222 +vt 0.255220 0.430556 +vt 0.171694 0.090278 +vt 0.338747 0.930556 +vt 0.403712 0.881944 +vt 0.331787 0.868056 +vt 0.406032 0.868056 +vt 0.294664 0.979167 +vt 0.171767 0.687498 +vt 0.122970 0.222222 +vt 0.406033 0.972222 +vt 0.336427 0.958333 +vt 0.378190 0.888889 +vt 0.431555 0.944444 +vt 0.431555 0.840278 +vt 0.443155 0.784722 +vt 0.454756 0.784722 +vt 0.454756 0.951389 +vt 0.408353 0.854167 +vt 0.180974 0.076389 +vt 0.389791 0.888889 +vt 0.378190 0.895833 +vt 0.331787 0.652778 +vt 0.401392 0.645833 +vt 0.336427 0.430556 +vt 0.331787 0.708333 +vt 0.378190 0.638889 +vt 0.399072 0.638889 +vt 0.443155 0.777778 +vt 0.192575 0.513889 +vt 0.211164 0.645984 +vt 0.002320 0.548611 +vt 0.211137 0.694444 +vt 0.294664 0.701389 +vt 0.194896 0.701389 +vt 0.196056 0.687500 +vt 0.248260 0.708333 +vt 0.242459 0.708333 +vt 0.459397 0.888889 +vt 0.169374 0.138889 +vt 0.278422 0.666667 +vt 0.283063 0.680556 +vt 0.651972 0.416667 +vt 0.698376 0.402778 +vt 0.698376 0.416667 +vt 0.651972 0.402778 +vt 0.698376 0.388889 +vt 0.651972 0.388889 +vt 0.698376 0.375000 +vt 0.651972 0.375000 +vt 0.698376 0.361111 +vt 0.651972 0.472222 +vt 0.698376 0.458333 +vt 0.698376 0.472222 +vt 0.651972 0.458333 +vt 0.698376 0.444444 +vt 0.651972 0.444444 +vt 0.698376 0.430556 +vt 0.651972 0.430556 +vt 0.703062 0.437534 +vt 0.712396 0.437535 +vt 0.712396 0.465473 +vt 0.758701 0.472222 +vt 0.795824 0.430556 +vt 0.795824 0.472222 +vt 0.758701 0.430556 +vt 0.795824 0.402778 +vt 0.758701 0.402778 +vt 0.795824 0.375000 +vt 0.758701 0.375000 +vt 0.795824 0.347222 +vt 0.758701 0.319444 +vt 0.795824 0.319444 +vt 0.795824 0.291667 +vt 0.758701 0.291667 +vt 0.795824 0.263889 +vt 0.758701 0.263889 +vt 0.795824 0.236111 +vt 0.758701 0.236111 +vt 0.795824 0.208333 +vt 0.758701 0.208333 +vt 0.795824 0.180556 +vt 0.758701 0.138889 +vt 0.795824 0.138889 +vt 0.139211 0.416667 +vt 0.141531 0.423611 +vt 0.139211 0.423611 +vt 0.141531 0.416667 +vt 0.143852 0.423611 +vt 0.125290 0.416667 +vt 0.127610 0.423611 +vt 0.125290 0.423611 +vt 0.127610 0.416667 +vt 0.129930 0.423611 +vt 0.129930 0.416667 +vt 0.132251 0.423611 +vt 0.132251 0.416667 +vt 0.134571 0.423611 +vt 0.134571 0.416667 +vt 0.136891 0.423611 +vt 0.136891 0.416667 +vt 0.141531 0.430556 +vt 0.139211 0.437500 +vt 0.139211 0.430556 +vt 0.143852 0.430556 +vt 0.141531 0.437500 +vt 0.127610 0.430556 +vt 0.125290 0.437500 +vt 0.125290 0.430556 +vt 0.129930 0.430556 +vt 0.127610 0.437500 +vt 0.132251 0.430556 +vt 0.129930 0.437500 +vt 0.134571 0.430556 +vt 0.132251 0.437500 +vt 0.136891 0.430556 +vt 0.134571 0.437500 +vt 0.136891 0.437500 +vt 0.215777 0.923611 +vt 0.192575 0.909722 +vt 0.215777 0.909722 +vt 0.327146 0.923611 +vt 0.290023 0.909722 +vt 0.327146 0.909722 +vt 0.290023 0.923611 +vt 0.252900 0.909722 +vt 0.234339 0.923611 +vt 0.234339 0.909722 +vt 0.252900 0.923611 +vt 0.215777 0.854167 +vt 0.192575 0.812500 +vt 0.215777 0.812500 +vt 0.234339 0.854167 +vt 0.234339 0.812500 +vt 0.252900 0.881944 +vt 0.252900 0.854167 +vt 0.234339 0.881944 +vt 0.290023 0.881944 +vt 0.290023 0.854167 +vt 0.327146 0.881944 +vt 0.327146 0.854167 +vt 0.215777 0.881944 +vt 0.192575 0.854167 +vt 0.215777 0.993056 +vt 0.192575 0.951389 +vt 0.215777 0.951389 +vt 0.174014 0.812500 +vt 0.176334 0.854167 +vt 0.174014 0.854167 +vt 0.208817 0.736111 +vt 0.171694 0.743056 +vt 0.171694 0.736111 +vt 0.306264 0.805556 +vt 0.283063 0.805556 +vt 0.283063 0.798611 +vt 0.155452 0.951389 +vt 0.155452 0.986111 +vt 0.153132 0.951389 +vt 0.155452 0.923611 +vt 0.153132 0.909722 +vt 0.155452 0.909722 +vt 0.259861 0.756944 +vt 0.283063 0.750000 +vt 0.283063 0.756944 +vt 0.122970 0.763889 +vt 0.122970 0.756944 +vt 0.171694 0.729167 +vt 0.208817 0.722222 +vt 0.208817 0.729167 +vt 0.306264 0.750000 +vt 0.306264 0.743056 +vt 0.208817 0.743056 +vt 0.016241 0.750000 +vt 0.039443 0.743056 +vt 0.039443 0.750000 +vt 0.016241 0.743056 +vt 0.039443 0.729167 +vt 0.016241 0.729167 +vt 0.039443 0.715278 +vt 0.283063 0.763889 +vt 0.283063 0.777778 +vt 0.259861 0.763889 +vt 0.283063 0.791667 +vt 0.259861 0.777778 +vt 0.002320 0.743056 +vt 0.002320 0.729167 +vt 0.327146 0.812500 +vt 0.306264 0.812500 +vt 0.058005 0.743056 +vt 0.058005 0.750000 +vt 0.058005 0.729167 +vt 0.058005 0.715278 +vt 0.002320 0.750000 +vt 0.002320 0.708333 +vt 0.016241 0.701389 +vt 0.016241 0.708333 +vt 0.085847 0.763889 +vt 0.085847 0.756944 +vt 0.245940 0.798611 +vt 0.259861 0.805556 +vt 0.245940 0.805556 +vt 0.039443 0.756944 +vt 0.071926 0.701389 +vt 0.085847 0.694444 +vt 0.085847 0.701389 +vt 0.259861 0.798611 +vt 0.245940 0.791667 +vt 0.259861 0.791667 +vt 0.071926 0.756944 +vt 0.058005 0.756944 +vt 0.016241 0.715278 +vt 0.039443 0.708333 +vt 0.245940 0.777778 +vt 0.058005 0.708333 +vt 0.002320 0.715278 +vt 0.155452 0.812500 +vt 0.155452 0.777778 +vt 0.157773 0.777778 +vt 0.245940 0.763889 +vt 0.245940 0.756944 +vt 0.245940 0.750000 +vt 0.259861 0.750000 +vt 0.176334 0.881944 +vt 0.174014 0.881944 +vt 0.155452 0.881944 +vt 0.153132 0.854167 +vt 0.155452 0.854167 +vt 0.058005 0.701389 +vt 0.071926 0.694444 +vt 0.174014 0.777778 +vt 0.176334 0.812500 +vt 0.153132 0.923611 +vt 0.306264 0.756944 +vt 0.306264 0.777778 +vt 0.306264 0.798611 +vt 0.171694 0.986111 +vt 0.171694 0.951389 +vt 0.174014 0.951389 +vt 0.169374 0.986111 +vt 0.164733 0.951389 +vt 0.160093 0.986111 +vt 0.157773 0.951389 +vt 0.171694 0.854167 +vt 0.171694 0.881944 +vt 0.164733 0.854167 +vt 0.164733 0.881944 +vt 0.157773 0.854167 +vt 0.171694 0.812500 +vt 0.164733 0.812500 +vt 0.157773 0.812500 +vt 0.174014 0.909722 +vt 0.171694 0.923611 +vt 0.171694 0.909722 +vt 0.164733 0.909722 +vt 0.164733 0.923611 +vt 0.157773 0.909722 +vt 0.157773 0.881944 +vt 0.157773 0.986111 +vt 0.157773 0.923611 +vt 0.174014 0.923611 +vt 0.160093 0.777778 +vt 0.164733 0.777778 +vt 0.169374 0.777778 +vt 0.171694 0.777778 +vt 0.071926 0.763889 +vt 0.122970 0.701389 +vt 0.176334 0.909722 +vt 0.176334 0.923611 +vt 0.039443 0.701389 +vt 0.071926 0.729167 +vt 0.071926 0.750000 +vt 0.071926 0.708333 +vt 0.085847 0.708333 +vt 0.085847 0.750000 +vt 0.085847 0.729167 +vt 0.122970 0.729167 +vt 0.122970 0.708333 +vt 0.122970 0.750000 +vt 0.327146 0.743056 +vt 0.327146 0.750000 +vt 0.174014 0.986111 +vt 0.016241 0.756944 +vt 0.176334 0.951389 +vt 0.002320 0.756944 +vt 0.153132 0.812500 +vt 0.122970 0.694444 +vt 0.153132 0.881944 +vt 0.039443 0.881944 +vt 0.002320 0.854167 +vt 0.039443 0.854167 +vt 0.136891 0.881944 +vt 0.113689 0.854167 +vt 0.136891 0.854167 +vt 0.095128 0.881944 +vt 0.076566 0.854167 +vt 0.095128 0.854167 +vt 0.076566 0.881944 +vt 0.136891 0.993056 +vt 0.113689 0.951389 +vt 0.136891 0.951389 +vt 0.113689 0.881944 +vt 0.095128 0.812500 +vt 0.113689 0.812500 +vt 0.136891 0.812500 +vt 0.113689 0.923611 +vt 0.095128 0.909722 +vt 0.113689 0.909722 +vt 0.076566 0.923611 +vt 0.039443 0.909722 +vt 0.076566 0.909722 +vt 0.095128 0.923611 +vt 0.136891 0.923611 +vt 0.136891 0.909722 +vt 0.039443 0.923611 +vt 0.002320 0.909722 +vt 0.002320 0.881944 +vt 0.136891 0.770833 +vt 0.148492 0.812500 +vt 0.148492 0.881944 +vt 0.148492 0.951389 +vt 0.150812 0.986111 +vt 0.148492 0.909722 +vt 0.148492 0.923611 +vt 0.095128 0.951389 +vt 0.113689 0.993056 +vt 0.148492 0.854167 +vt 0.113689 0.770833 +vt 0.095128 0.770833 +vt 0.090487 0.812500 +vt 0.039443 0.840278 +vt 0.076566 0.826389 +vt 0.192575 0.881944 +vt 0.180974 0.923611 +vt 0.192575 0.923611 +vt 0.180974 0.909722 +vt 0.192575 0.993056 +vt 0.180974 0.951389 +vt 0.180974 0.881944 +vt 0.180974 0.854167 +vt 0.180974 0.812500 +vt 0.234339 0.951389 +vt 0.192575 0.770833 +vt 0.178654 0.777778 +vt 0.215777 0.770833 +vt 0.234339 0.770833 +vt 0.290023 0.840278 +vt 0.238979 0.812500 +vt 0.327146 0.805556 +vt 0.327146 0.777778 +vt 0.327146 0.798611 +vt 0.327146 0.756944 +vt 0.113689 0.263889 +vt 0.174062 0.541539 +vt 0.180990 0.534627 +vt 0.180990 0.541539 +vt 0.187919 0.534627 +vt 0.187919 0.541539 +vt 0.174062 0.604126 +vt 0.180974 0.569444 +vt 0.180974 0.604167 +vt 0.187935 0.569444 +vt 0.187935 0.604167 +vt 0.187919 0.527714 +vt 0.174062 0.534627 +vt 0.180990 0.527714 +vt 0.180974 0.500000 +vt 0.187935 0.500000 +vt 0.174014 0.500000 +vt 0.187935 0.166667 +vt 0.180974 0.201389 +vt 0.180974 0.166667 +vt 0.180974 0.270833 +vt 0.187935 0.236111 +vt 0.187935 0.270833 +vt 0.180974 0.312500 +vt 0.187935 0.298611 +vt 0.187935 0.312500 +vt 0.180974 0.298611 +vt 0.174014 0.298611 +vt 0.180974 0.236111 +vt 0.187935 0.201389 +vt 0.174014 0.236111 +vt 0.174014 0.201389 +vt 0.174014 0.166667 +vt 0.180974 0.423611 +vt 0.174014 0.416667 +vt 0.180974 0.416667 +vt 0.180974 0.458333 +vt 0.174014 0.423611 +vt 0.174014 0.458333 +vt 0.187935 0.423611 +vt 0.187935 0.416667 +vt 0.187935 0.458333 +vt 0.174014 0.312500 +vt 0.180974 0.326389 +vt 0.174014 0.326389 +vt 0.187935 0.326389 +vt 0.174014 0.270833 +vt 0.187935 0.381944 +vt 0.180974 0.381944 +vt 0.187935 0.347222 +vt 0.174014 0.381944 +vt 0.180974 0.347222 +vt 0.174014 0.347222 +vt 0.122970 0.430556 +vt 0.113689 0.416667 +vt 0.122970 0.416667 +vt 0.122970 0.263889 +vt 0.113689 0.277778 +vt 0.113689 0.576389 +vt 0.076566 0.277778 +vt 0.002320 0.263889 +vt 0.076566 0.263889 +vt 0.076566 0.305556 +vt 0.076566 0.430556 +vt 0.002320 0.416667 +vt 0.076566 0.416667 +vt 0.113689 0.388889 +vt 0.122970 0.388889 +vt 0.002320 0.388889 +vt 0.076566 0.388889 +vt 0.002320 0.479167 +vt 0.076566 0.479167 +vt 0.113689 0.479167 +vt 0.122970 0.479167 +vt 0.122970 0.277778 +vt 0.113689 0.305556 +vt 0.076566 0.576389 +vt 0.113689 0.597222 +vt 0.002320 0.597222 +vt 0.113689 0.361111 +vt 0.122970 0.361111 +vt 0.076566 0.333333 +vt 0.002320 0.361111 +vt 0.002320 0.333333 +vt 0.122970 0.576389 +vt 0.113689 0.333333 +vt 0.076566 0.361111 +vt 0.076566 0.618056 +vt 0.122970 0.333333 +vt 0.122970 0.618056 +vt 0.122970 0.597222 +vt 0.002320 0.576389 +vt 0.113689 0.430556 +vt 0.002320 0.305556 +vt 0.002320 0.277778 +vt 0.002320 0.618056 +vt 0.076566 0.631944 +vt 0.002320 0.631944 +vt 0.190255 0.600694 +vt 0.190255 0.607639 +vt 0.171694 0.600694 +vt 0.171694 0.607639 +vt 0.171694 0.170139 +vt 0.171694 0.163194 +vt 0.190255 0.170139 +vt 0.190255 0.163194 +vt 0.171694 0.527778 +vt 0.174062 0.527714 +vt 0.190255 0.534722 +vt 0.190255 0.527778 +vt 0.190255 0.541667 +vt 0.190255 0.562500 +vt 0.171694 0.534722 +vt 0.174014 0.569444 +vt 0.171694 0.562500 +vt 0.190255 0.500000 +vt 0.190255 0.458333 +vt 0.190255 0.423611 +vt 0.190255 0.416667 +vt 0.171694 0.500000 +vt 0.171694 0.458333 +vt 0.171694 0.423611 +vt 0.171694 0.416667 +vt 0.171694 0.201389 +vt 0.171694 0.236111 +vt 0.171694 0.298611 +vt 0.171694 0.270833 +vt 0.190255 0.201389 +vt 0.190255 0.236111 +vt 0.190255 0.298611 +vt 0.190255 0.270833 +vt 0.171694 0.541667 +vt 0.171694 0.305556 +vt 0.190255 0.305556 +vt 0.190255 0.381944 +vt 0.171694 0.381944 +vt 0.190255 0.347222 +vt 0.171694 0.333333 +vt 0.171694 0.347222 +vt 0.190255 0.333333 +vt 0.190255 0.319444 +vt 0.190255 0.312500 +vt 0.171694 0.319444 +vt 0.171694 0.312500 +vt 0.654292 0.583333 +vt 0.747100 0.562500 +vt 0.747100 0.583333 +vt 0.654292 0.562500 +vt 0.747100 0.541667 +vt 0.654292 0.541667 +vt 0.747100 0.520833 +vt 0.654292 0.520833 +vt 0.747100 0.500000 +vt 0.654292 0.500000 +vt 0.747100 0.479167 +vt 0.747100 0.729167 +vt 0.654292 0.708333 +vt 0.747100 0.708333 +vt 0.747100 0.687500 +vt 0.654292 0.687500 +vt 0.747100 0.666667 +vt 0.654292 0.666667 +vt 0.747100 0.645833 +vt 0.654292 0.645833 +vt 0.747100 0.625000 +vt 0.654292 0.625000 +vt 0.747100 0.604167 +vt 0.654292 0.604167 +vt 0.765661 0.538194 +vt 0.450116 0.194444 +vt 0.756380 0.208333 +vt 0.450116 0.208333 +vt 0.765661 0.625000 +vt 0.765661 0.555556 +vt 0.765661 0.645833 +vt 0.765661 0.663194 +vt 0.765661 0.684028 +vt 0.765661 0.704861 +vt 0.765661 0.711806 +vt 0.765661 0.725694 +vt 0.765661 0.496528 +vt 0.765661 0.517361 +vt 0.765661 0.600694 +vt 0.765661 0.562500 +vt 0.765661 0.576389 +vt 0.450116 0.069444 +vt 0.756380 0.083333 +vt 0.450116 0.083333 +vt 0.450116 0.138889 +vt 0.756380 0.152778 +vt 0.450116 0.152778 +vt 0.450116 0.180556 +vt 0.756380 0.194444 +vt 0.450116 0.055556 +vt 0.756380 0.069444 +vt 0.450116 0.125000 +vt 0.756380 0.138889 +vt 0.450116 0.097222 +vt 0.756380 0.111111 +vt 0.450116 0.111111 +vt 0.450116 0.166667 +vt 0.756380 0.180556 +vt 0.450116 0.041667 +vt 0.756380 0.055556 +vt 0.756380 0.125000 +vt 0.756380 0.097222 +vt 0.756380 0.166667 +vt 0.058005 0.256944 +vt 0.051044 0.229167 +vt 0.058005 0.229167 +vt 0.051044 0.256944 +vt 0.044084 0.229167 +vt 0.044084 0.256944 +vt 0.037123 0.229167 +vt 0.037123 0.256944 +vt 0.030162 0.229167 +vt 0.030162 0.256944 +vt 0.023202 0.229167 +vt 0.023202 0.256944 +vt 0.016241 0.229167 +vt 0.016241 0.256944 +vt 0.009281 0.229167 +vt 0.009281 0.256944 +vt 0.002320 0.229167 +vt 0.017940 0.175716 +vt 0.020555 0.194611 +vt 0.017940 0.213507 +vt 0.651972 0.361111 +vt 0.707729 0.471259 +vt 0.703062 0.465473 +vt 0.701129 0.451504 +vt 0.707729 0.431749 +vt 0.714329 0.451503 +vt 0.758701 0.347222 +vt 0.758701 0.180556 +vt 0.143852 0.416667 +vt 0.143852 0.437500 +vt 0.171694 0.722222 +vt 0.002320 0.701389 +vt 0.164733 0.986111 +vt 0.002320 0.923611 +vt 0.150812 0.777778 +vt 0.178654 0.986111 +vt 0.252900 0.826389 +vt 0.002320 0.430556 +vt 0.122970 0.305556 +vt 0.113689 0.618056 +vt 0.654292 0.479167 +vt 0.654292 0.729167 +vt 0.765661 0.524306 +vt 0.765661 0.611111 +vt 0.765661 0.541667 +vt 0.765661 0.631944 +vt 0.765661 0.649306 +vt 0.765661 0.670139 +vt 0.765661 0.690972 +vt 0.765661 0.482639 +vt 0.765661 0.503472 +vt 0.765661 0.586806 +vt 0.756380 0.041667 +vt 0.002320 0.256944 +vt 0.011627 0.221333 +vt 0.005314 0.175716 +vt 0.005314 0.213507 +vt 0.002699 0.194611 +vt 0.011627 0.167889 +vt 0.825986 0.388889 +vt 0.844548 0.402778 +vt 0.825986 0.402778 +vt 0.844548 0.305556 +vt 0.846868 0.388889 +vt 0.844548 0.388889 +vt 0.825986 0.291667 +vt 0.844548 0.291667 +vt 0.825986 0.305556 +vt 0.823666 0.291667 +vt 0.825986 0.208333 +vt 0.844548 0.208333 +vt 0.851508 0.305556 +vt 0.851508 0.388889 +vt 0.846868 0.402778 +vt 0.846868 0.305556 +vt 0.870070 0.326389 +vt 0.870070 0.368056 +vt 0.823666 0.305556 +vt 0.819026 0.388889 +vt 0.819026 0.305556 +vt 0.823666 0.388889 +vt 0.800464 0.277778 +vt 0.800464 0.236111 +vt 0.819026 0.215278 +vt 0.851508 0.298611 +vt 0.863109 0.305556 +vt 0.819026 0.395833 +vt 0.807425 0.388889 +vt 0.798144 0.326389 +vt 0.800464 0.368056 +vt 0.798144 0.368056 +vt 0.863109 0.395833 +vt 0.851508 0.395833 +vt 0.807425 0.298611 +vt 0.819026 0.298611 +vt 0.872390 0.368056 +vt 0.872390 0.326389 +vt 0.800464 0.326389 +vt 0.870070 0.395833 +vt 0.872390 0.298611 +vt 0.800464 0.298611 +vt 0.798144 0.395833 +vt 0.870070 0.236111 +vt 0.870070 0.277778 +vt 0.846868 0.291667 +vt 0.863109 0.388889 +vt 0.823666 0.402778 +vt 0.807425 0.215278 +vt 0.863109 0.298611 +vt 0.807425 0.395833 +vt 0.807425 0.305556 +vt 0.872390 0.395833 +vt 0.870070 0.298611 +vt 0.798144 0.298611 +vt 0.800464 0.395833 +vt 0.851508 0.215278 +vt 0.863109 0.215278 +vt 0.276102 0.986111 +vt 0.273782 0.972222 +vt 0.276102 0.972222 +vt 0.283063 0.972222 +vt 0.280742 0.986111 +vt 0.280742 0.972222 +vt 0.285383 0.944444 +vt 0.283063 0.958333 +vt 0.280742 0.958333 +vt 0.271462 0.944444 +vt 0.276102 0.958333 +vt 0.273782 0.958333 +vt 0.271462 0.993056 +vt 0.271462 0.986111 +vt 0.285383 0.986111 +vt 0.280742 0.993056 +vt 0.276102 0.993056 +vt 0.285383 0.993056 +vt 0.257541 0.986111 +vt 0.255220 0.944444 +vt 0.257541 0.944444 +vt 0.255220 0.986111 +vt 0.245940 0.944444 +vt 0.269142 0.986111 +vt 0.266821 0.944444 +vt 0.269142 0.944444 +vt 0.266821 0.986111 +vt 0.266821 0.937500 +vt 0.257541 0.937500 +vt 0.257541 0.993056 +vt 0.266821 0.993056 +vt 0.245940 0.986111 +vt 0.613152 0.363030 +vt 0.614850 0.302109 +vt 0.614849 0.375000 +vt 0.583553 0.357710 +vt 0.579458 0.302109 +vt 0.583553 0.302109 +vt 0.587647 0.363030 +vt 0.589344 0.302109 +vt 0.589327 0.375000 +vt 0.587647 0.302109 +vt 0.603248 0.302083 +vt 0.603248 0.375000 +vt 0.609053 0.357710 +vt 0.613152 0.302109 +vt 0.579458 0.363030 +vt 0.577762 0.302109 +vt 0.604953 0.363030 +vt 0.603255 0.302109 +vt 0.604953 0.302109 +vt 0.609053 0.302109 +vt 0.628770 0.302083 +vt 0.628770 0.375000 +vt 0.613152 0.241189 +vt 0.614849 0.229167 +vt 0.583553 0.246508 +vt 0.579458 0.241189 +vt 0.587647 0.241189 +vt 0.589327 0.229167 +vt 0.603248 0.229167 +vt 0.609053 0.246508 +vt 0.577726 0.229167 +vt 0.604953 0.241189 +vt 0.628770 0.229167 +vt 0.577726 0.375000 +vt 0.292343 0.986111 +vt 0.287703 0.972222 +vt 0.292343 0.972222 +vt 0.276102 0.937500 +vt 0.280742 0.937500 +vt 0.292343 0.958333 +vt 0.287703 0.944444 +vt 0.292343 0.944444 +vt 0.287703 0.958333 +vt 0.287703 0.993056 +vt 0.287703 0.986111 +vt 0.292343 0.993056 +vt 0.559165 0.388889 +vt 0.556845 0.375000 +vt 0.559165 0.375000 +vt 0.559165 0.416667 +vt 0.556845 0.430556 +vt 0.556845 0.416667 +vt 0.559165 0.472222 +vt 0.556845 0.458333 +vt 0.559165 0.458333 +vt 0.559165 0.402778 +vt 0.556845 0.388889 +vt 0.556845 0.402778 +vt 0.559165 0.430556 +vt 0.556845 0.444444 +vt 0.559165 0.486111 +vt 0.556845 0.472222 +vt 0.559165 0.444444 +vt 0.552383 0.402320 +vt 0.552383 0.431210 +vt 0.542731 0.431210 +vt 0.552420 0.450847 +vt 0.552420 0.479492 +vt 0.542850 0.479493 +vt 0.573086 0.458333 +vt 0.573086 0.444444 +vt 0.573086 0.430556 +vt 0.573086 0.416667 +vt 0.573086 0.402778 +vt 0.575406 0.388889 +vt 0.573086 0.375000 +vt 0.575406 0.375000 +vt 0.575406 0.416667 +vt 0.575406 0.472222 +vt 0.575406 0.458333 +vt 0.573086 0.388889 +vt 0.575406 0.402778 +vt 0.575406 0.430556 +vt 0.575406 0.486111 +vt 0.573086 0.472222 +vt 0.575406 0.444444 +vt 0.631090 0.326389 +vt 0.686775 0.312500 +vt 0.686775 0.326389 +vt 0.631090 0.284722 +vt 0.686775 0.270833 +vt 0.686775 0.284722 +vt 0.631090 0.243056 +vt 0.686775 0.229167 +vt 0.686775 0.243056 +vt 0.631090 0.312500 +vt 0.686775 0.298611 +vt 0.631090 0.298611 +vt 0.631090 0.270833 +vt 0.686775 0.256944 +vt 0.631090 0.229167 +vt 0.686775 0.215278 +vt 0.631090 0.256944 +vt 0.717029 0.306052 +vt 0.707512 0.306052 +vt 0.707512 0.277568 +vt 0.707598 0.256881 +vt 0.707598 0.228715 +vt 0.717008 0.228714 +vt 0.700696 0.256944 +vt 0.700696 0.243056 +vt 0.700696 0.270833 +vt 0.700696 0.284722 +vt 0.700696 0.298611 +vt 0.700696 0.326389 +vt 0.703016 0.312500 +vt 0.703016 0.326389 +vt 0.703016 0.270833 +vt 0.703016 0.284722 +vt 0.703016 0.243056 +vt 0.700696 0.229167 +vt 0.703016 0.229167 +vt 0.703016 0.298611 +vt 0.703016 0.256944 +vt 0.703016 0.215278 +vt 0.556845 0.486111 +vt 0.540732 0.416765 +vt 0.542731 0.402320 +vt 0.547557 0.396337 +vt 0.554382 0.416765 +vt 0.547557 0.437193 +vt 0.554402 0.465170 +vt 0.547635 0.485425 +vt 0.540868 0.465170 +vt 0.542850 0.450847 +vt 0.547635 0.444914 +vt 0.573086 0.486111 +vt 0.631090 0.215278 +vt 0.712271 0.271669 +vt 0.717029 0.277568 +vt 0.719000 0.291810 +vt 0.712271 0.311950 +vt 0.705542 0.291810 +vt 0.718957 0.242798 +vt 0.717008 0.256881 +vt 0.712303 0.262714 +vt 0.705648 0.242798 +vt 0.712303 0.222881 +vt 0.700696 0.312500 +vt 0.700696 0.215278 +vn -0.0000 -0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.6667 0.6667 -0.3333 +vn 0.7071 0.7071 -0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.8944 -0.4472 +vn 0.0000 0.7071 0.7071 +vn -0.9487 -0.3162 0.0000 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.8944 0.4472 +vn 0.9701 -0.2425 -0.0000 +vn -0.9457 -0.3152 -0.0788 +vn 0.0000 -0.8321 0.5547 +vn 0.0000 -0.9806 0.1961 +vn -0.9211 -0.3892 0.0000 +vn 0.0000 -0.7071 0.7071 +vn -0.0099 0.0296 -0.9995 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 -0.0000 +vn -0.8165 0.5773 0.0000 +vn -0.8422 0.5392 0.0000 +vn -0.9659 0.2588 0.0000 +vn -0.9659 -0.2588 0.0000 +vn -0.2588 -0.9659 0.0000 +vn 0.2588 -0.9659 -0.0000 +vn 0.9659 -0.2588 -0.0000 +vn 0.9659 0.2588 -0.0000 +vn 0.8422 0.5392 -0.0000 +vn 0.8165 0.5773 -0.0000 +vn 0.0000 -0.7071 -0.7071 +vn -0.9966 -0.0825 -0.0000 +vn -0.9864 0.1644 0.0000 +vn -0.9966 0.0825 0.0000 +vn 0.0000 0.0985 -0.9951 +vn 0.0000 0.9732 0.2298 +vn 0.0000 0.9522 0.3054 +vn 0.0000 0.8507 0.5257 +vn 0.0000 0.9454 0.3259 +vn 0.0000 0.9487 0.3162 +vn 0.0000 -0.0985 -0.9951 +vn 0.0000 -0.1961 -0.9806 +vn 0.0000 -0.0921 -0.9958 +vn 0.0000 0.9966 -0.0825 +vn 0.0000 -0.9923 0.1240 +vn 0.0000 0.8522 0.5232 +vn 0.0000 -0.9966 -0.0825 +vn 0.0000 -0.9864 -0.1644 +vn 0.0000 -0.8112 0.5847 +vn 0.0000 -0.9752 0.2212 +vn 0.0000 0.9864 -0.1644 +vn 0.0000 -0.7907 0.6121 +vn 0.0000 0.1961 -0.9806 +vn 0.0000 -0.7907 0.6122 +vn 0.0000 -0.7254 0.6883 +vn 0.0000 0.0921 -0.9958 +vn 0.9853 0.1706 -0.0077 +vn 0.9966 0.0825 0.0000 +vn 0.9966 -0.0825 -0.0000 +vn 0.9853 -0.1706 -0.0077 +vn 0.9955 -0.0941 -0.0084 +vn 0.9955 0.0941 -0.0084 +vn 0.9813 0.1899 -0.0317 +vn 0.9995 0.0322 -0.0000 +vn 0.9864 0.1644 -0.0000 +vn 0.9864 -0.1644 -0.0000 +vn 0.9987 -0.0507 -0.0000 +vn -0.9853 0.1706 -0.0077 +vn -0.9955 0.0941 -0.0084 +vn -0.9955 -0.0941 -0.0084 +vn -0.9995 0.0322 0.0000 +vn -0.9853 -0.1706 -0.0077 +vn -0.9813 -0.1899 -0.0317 +vn -0.9864 -0.1644 0.0000 +vn -0.9987 -0.0507 0.0000 +vn 0.0000 0.8944 0.4472 +vn 0.0000 -0.1370 -0.9906 +vn 0.0000 -0.7905 -0.6125 +vn 0.0000 -0.5590 -0.8291 +vn 0.0000 0.2423 -0.9702 +vn 0.0000 0.6359 -0.7717 +vn 0.0000 -0.8000 0.6000 +vn -0.0000 -0.3162 0.9487 +vn 0.0000 -0.6000 0.8000 +vn 0.0000 0.2298 0.9732 +vn 0.0000 0.3117 -0.9502 +vn 0.0000 -0.3528 -0.9357 +vn 0.0000 0.6900 -0.7238 +vn -0.0000 -0.9239 0.3827 +vn 0.0000 -0.8000 -0.6000 +vn 0.0000 -0.9288 -0.3705 +vn -0.9526 -0.3042 0.0000 +vn -0.9814 0.1922 -0.0000 +vn 0.9571 0.2898 0.0000 +vn 0.9526 -0.3042 -0.0000 +vn 0.9795 -0.2017 -0.0000 +vn -0.4585 -0.8887 0.0000 +vn 0.4719 0.8817 -0.0000 +vn -0.3097 0.9508 -0.0000 +vn -0.4719 0.8817 0.0000 +vn 0.3012 -0.9536 -0.0000 +vn -0.9571 0.2898 0.0000 +vn 0.4585 -0.8887 0.0000 +vn -0.5902 -0.6229 -0.5135 +vn -0.5834 -0.6334 -0.5085 +vn -0.6022 -0.6022 -0.5240 +vn 0.5834 -0.6334 -0.5085 +vn 0.5902 -0.6229 -0.5135 +vn 0.6022 -0.6022 -0.5240 +vn 0.6079 -0.6270 0.4871 +vn 0.5997 -0.6334 0.4890 +vn 0.6145 -0.6145 0.4948 +vn -0.5997 -0.6334 0.4890 +vn -0.6079 -0.6270 0.4871 +vn -0.6145 -0.6145 0.4947 +vn 0.7073 0.0000 -0.7069 +vn 0.6994 0.1498 -0.6989 +vn 0.6991 0.1855 -0.6906 +vn -0.7073 0.0000 -0.7069 +vn -0.6991 0.1855 -0.6906 +vn -0.6994 0.1498 -0.6989 +vn -0.7049 -0.0823 -0.7045 +vn -0.5834 -0.6333 -0.5085 +vn -0.6546 -0.4858 -0.5792 +vn -0.6943 -0.3555 -0.6257 +vn 0.7088 -0.0935 -0.6992 +vn 0.6546 -0.4858 -0.5792 +vn 0.6943 -0.3555 -0.6257 +vn -0.6691 0.4379 -0.6005 +vn -0.6341 0.5325 -0.5606 +vn -0.6149 0.5746 -0.5402 +vn -0.6414 0.5129 -0.5706 +vn -0.6853 0.2653 -0.6783 +vn -0.6932 0.1991 -0.6927 +vn -0.7338 -0.2367 -0.6368 +vn 0.6691 0.4379 -0.6005 +vn 0.6149 0.5746 -0.5402 +vn 0.6341 0.5325 -0.5606 +vn 0.6853 0.2653 -0.6783 +vn 0.6414 0.5129 -0.5706 +vn 0.7338 -0.2367 -0.6368 +vn 0.6931 0.1991 -0.6927 +vn 0.5718 -0.5982 0.5614 +vn 0.6247 -0.4686 0.6247 +vn 0.5968 -0.5359 0.5971 +vn 0.6806 -0.2708 0.6808 +vn 0.6247 -0.4685 0.6247 +vn 0.7005 0.1352 0.7007 +vn 0.6924 -0.2021 0.6926 +vn -0.5718 -0.5982 0.5614 +vn -0.5968 -0.5359 0.5971 +vn -0.6247 -0.4686 0.6247 +vn -0.6247 -0.4685 0.6247 +vn -0.6806 -0.2708 0.6808 +vn -0.7005 0.1352 0.7007 +vn -0.6924 -0.2021 0.6926 +vn -0.7088 -0.0935 -0.6992 +vn 0.7049 -0.0823 -0.7045 +vn 0.7389 -0.0063 0.6738 +vn 0.7043 0.1684 0.6896 +vn 0.7454 0.0000 0.6667 +vn -0.7389 -0.0063 0.6738 +vn -0.7043 0.1684 0.6896 +vn -0.7228 -0.5530 -0.4145 +vn -0.7221 -0.5534 -0.4151 +vn 0.7228 -0.5530 -0.4145 +vn 0.7340 -0.2418 -0.6346 +vn 0.7221 -0.5534 -0.4151 +vn 0.7002 -0.6597 -0.2729 +vn -0.7002 -0.6597 -0.2729 +vn -0.6957 -0.6697 -0.2597 +vn 0.7899 -0.5710 0.2235 +vn 0.6957 -0.6697 -0.2597 +vn -0.7899 -0.5710 0.2235 +vn -0.7454 -0.0000 0.6667 +vn -0.2588 0.9659 0.0000 +vn 0.2588 0.9659 -0.0000 +vn -0.9389 -0.2516 0.2347 +vn -0.9389 0.2516 0.2347 +vn 0.2516 0.9389 0.2347 +vn 0.6873 0.6874 0.2347 +vn -0.6873 0.6874 0.2347 +vn 0.9389 0.2516 0.2347 +vn 0.9389 -0.2516 0.2347 +vn 0.6873 -0.6873 0.2347 +vn 0.2516 -0.9389 0.2347 +vn -0.2516 -0.9389 0.2347 +vn -0.6873 -0.6873 0.2347 +vn -0.2516 0.9389 0.2347 +vn -0.7071 0.0000 0.7071 +vn -0.7071 -0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.9813 -0.1899 -0.0317 +vn -0.9813 0.1899 -0.0317 +vn -0.7341 -0.2418 -0.6346 +vn 0.7904 -0.5644 0.2383 +vn -0.7904 -0.5644 0.2383 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 0.9239 0.3827 +vn -0.5458 -0.8379 0.0000 +vn 0.5458 0.8379 0.0000 +vn 0.0000 -0.2298 0.9732 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 0.4472 0.8944 +vn 0.2065 -0.9784 -0.0000 +vn 0.8379 -0.5458 -0.0000 +vn -0.9784 -0.2065 0.0000 +vn -0.8379 0.5458 0.0000 +vn 0.9784 0.2065 -0.0000 +vn 0.4261 0.9047 0.0000 +vn -0.6553 -0.7554 0.0000 +vn -0.2065 0.9784 -0.0000 +vn 0.6553 0.7554 -0.0000 +vn -0.4261 -0.9047 0.0000 +s off +f 101/189/66 102/190/66 103/191/66 +f 104/192/66 105/193/66 106/194/66 +f 107/195/67 108/196/67 109/197/67 +f 110/198/68 111/199/68 112/200/68 +f 113/201/69 114/202/69 115/203/69 +f 116/204/67 117/205/67 118/206/67 +f 119/207/67 120/208/67 121/209/67 +f 122/210/67 123/211/67 116/204/67 +f 124/212/67 125/213/67 122/210/67 +f 121/209/67 126/214/67 124/212/67 +f 118/206/67 127/215/67 128/216/67 +f 117/217/67 129/218/67 127/219/67 +f 130/220/67 131/221/67 120/222/67 +f 132/223/67 133/224/67 129/218/67 +f 134/225/67 135/226/67 131/221/67 +f 136/227/66 137/228/66 138/229/66 +f 139/230/67 140/231/67 141/232/67 +f 142/233/70 143/234/70 144/235/70 +f 140/231/67 145/236/67 141/232/67 +f 141/232/67 146/237/67 147/238/67 +f 148/239/68 149/240/68 150/241/68 +f 151/242/67 150/243/67 152/244/67 +f 153/245/69 154/246/69 155/247/69 +f 145/236/67 152/244/67 146/237/67 +f 155/247/69 156/248/69 153/245/69 +f 151/242/67 144/249/67 148/250/67 +f 142/251/67 151/242/67 145/236/67 +f 153/245/71 157/252/71 158/253/71 +f 139/230/67 147/238/67 154/246/67 +f 140/254/70 159/255/70 142/256/70 +f 140/254/72 153/245/72 158/253/72 +f 143/234/73 148/239/73 144/235/73 +f 160/257/72 161/258/72 162/259/72 +f 163/260/68 164/261/68 165/262/68 +f 166/263/74 167/264/74 164/265/74 +f 143/266/66 168/267/66 169/268/66 +f 170/269/69 171/270/69 172/271/69 +f 168/267/66 149/272/66 169/268/66 +f 173/273/66 174/274/66 168/267/66 +f 158/253/75 175/275/75 159/255/75 +f 176/276/66 177/277/66 178/278/66 +f 179/279/68 166/280/68 163/260/68 +f 180/281/66 138/229/66 181/282/66 +f 176/276/66 136/227/66 180/281/66 +f 136/227/66 161/283/66 182/284/66 +f 183/285/69 182/284/69 160/257/69 +f 184/286/69 185/287/69 156/248/69 +f 162/288/69 186/289/69 187/290/69 +f 175/291/75 143/234/75 159/292/75 +f 165/262/68 188/293/68 189/294/68 +f 156/248/72 172/295/72 157/252/72 +f 190/296/68 180/297/68 181/298/68 +f 189/294/68 191/299/68 190/296/68 +f 192/300/69 193/301/69 185/287/69 +f 194/302/69 160/257/69 193/301/69 +f 175/303/76 195/304/76 196/305/76 +f 197/306/68 198/307/68 199/308/68 +f 164/265/74 200/309/74 188/310/74 +f 157/311/76 201/312/76 175/303/76 +f 185/287/72 170/313/72 172/295/72 +f 193/301/72 162/259/72 170/313/72 +f 199/308/77 177/314/77 202/315/77 +f 196/316/68 168/317/68 143/318/68 +f 196/316/77 167/264/77 203/319/77 +f 204/320/77 200/309/77 167/264/77 +f 200/321/67 197/322/67 205/323/67 +f 178/324/78 206/325/78 176/326/78 +f 204/320/68 207/327/68 197/306/68 +f 191/328/74 177/314/74 180/329/74 +f 188/310/74 202/315/74 191/328/74 +f 173/330/79 203/319/79 166/263/79 +f 162/288/69 208/331/69 170/269/69 +f 199/332/66 202/333/66 209/334/66 +f 209/334/66 210/335/66 211/336/66 +f 209/334/68 212/337/68 205/323/68 +f 200/338/80 210/339/80 202/340/80 +f 205/323/67 213/341/67 200/321/67 +f 205/323/73 199/342/73 209/334/73 +f 187/290/70 206/325/70 214/343/70 +f 215/344/70 216/345/70 201/312/70 +f 171/270/70 217/346/70 216/345/70 +f 208/331/70 214/343/70 217/346/70 +f 216/345/70 195/304/70 201/312/70 +f 206/325/70 198/307/70 214/343/70 +f 217/346/70 218/347/70 216/345/70 +f 214/343/70 207/327/70 217/346/70 +f 172/271/69 215/344/69 157/348/69 +f 199/308/68 219/349/68 178/350/68 +f 204/320/68 195/304/68 218/347/68 +f 176/326/78 186/289/78 161/351/78 +f 181/298/70 210/352/70 190/296/70 +f 152/244/67 220/353/67 146/237/67 +f 147/238/67 221/354/67 154/246/67 +f 184/286/69 222/355/69 192/300/69 +f 189/294/70 223/356/70 165/262/70 +f 149/240/68 224/357/68 150/241/68 +f 163/260/70 174/358/70 179/279/70 +f 225/359/66 226/360/66 181/282/66 +f 192/300/69 227/361/69 194/302/69 +f 137/228/66 228/362/66 138/229/66 +f 155/247/69 229/363/69 184/286/69 +f 154/246/69 230/364/69 155/247/69 +f 146/237/67 231/365/67 147/238/67 +f 183/285/69 232/366/69 137/228/69 +f 138/229/66 225/359/66 181/282/66 +f 194/302/69 233/367/69 183/285/69 +f 150/243/67 234/368/67 152/244/67 +f 235/369/70 149/370/70 174/358/70 +f 236/371/66 237/372/66 226/360/66 +f 165/262/70 235/369/70 163/260/70 +f 190/296/70 213/373/70 189/294/70 +f 212/374/68 238/375/68 239/376/68 +f 239/376/68 240/377/68 241/378/68 +f 237/379/68 242/380/68 211/381/68 +f 211/381/68 243/382/68 212/374/68 +f 241/378/68 244/383/68 149/240/68 +f 213/373/70 239/384/70 223/356/70 +f 226/385/70 211/386/70 210/352/70 +f 223/356/70 241/387/70 235/369/70 +f 196/316/81 203/319/81 168/317/81 +f 245/388/68 246/389/68 247/390/68 +f 247/390/68 248/391/68 249/392/68 +f 250/393/74 251/394/74 252/395/74 +f 253/396/67 254/397/67 255/398/67 +f 252/395/74 256/399/74 253/400/74 +f 257/401/74 258/402/74 259/403/74 +f 260/404/74 261/405/74 262/406/74 +f 263/407/69 264/408/69 265/409/69 +f 266/410/68 267/411/68 268/412/68 +f 269/413/68 270/414/68 271/415/68 +f 272/416/68 273/417/68 274/418/68 +f 275/419/68 276/420/68 273/417/68 +f 277/421/68 278/422/68 279/423/68 +f 280/424/68 281/425/68 245/388/68 +f 282/426/69 283/427/69 284/428/69 +f 285/429/68 286/430/68 287/431/68 +f 288/432/66 289/433/66 264/434/66 +f 290/435/67 291/436/67 292/437/67 +f 293/438/66 294/439/66 295/440/66 +f 296/441/70 297/442/70 298/443/70 +f 299/444/70 300/445/70 301/446/70 +f 302/447/70 303/448/70 304/449/70 +f 304/449/70 305/450/70 302/447/70 +f 306/451/70 307/452/70 308/453/70 +f 309/454/69 310/455/69 311/456/69 +f 312/457/69 313/458/69 314/459/69 +f 315/460/69 316/461/69 317/462/69 +f 318/463/69 317/462/69 319/464/69 +f 299/444/69 320/465/69 321/466/69 +f 322/467/69 254/468/69 323/469/69 +f 324/470/70 325/471/70 326/472/70 +f 327/473/69 323/469/69 310/455/69 +f 328/474/70 329/475/70 324/470/70 +f 330/476/70 331/477/70 332/478/70 +f 310/455/69 251/479/69 333/480/69 +f 323/469/69 256/481/69 251/479/69 +f 334/482/69 265/409/69 335/483/69 +f 321/466/69 336/484/69 337/485/69 +f 319/464/69 338/486/69 339/487/69 +f 317/462/69 258/488/69 338/486/69 +f 314/459/69 261/489/69 340/490/69 +f 311/456/69 333/480/69 341/491/69 +f 280/424/68 305/450/68 342/492/68 +f 277/421/68 307/452/68 343/493/68 +f 344/494/68 276/420/68 329/475/68 +f 345/495/68 273/417/68 344/494/68 +f 298/443/68 271/415/68 346/496/68 +f 347/497/67 254/397/67 348/498/67 +f 302/447/68 249/392/68 349/499/68 +f 305/450/68 247/390/68 302/447/68 +f 350/500/74 286/501/74 351/502/74 +f 352/503/74 353/504/74 350/500/74 +f 354/505/66 297/442/66 355/506/66 +f 300/445/66 356/507/66 294/439/66 +f 349/499/67 357/508/67 303/448/67 +f 358/509/67 255/398/67 347/497/67 +f 359/510/70 360/511/70 361/512/70 +f 362/513/70 363/514/70 364/515/70 +f 365/516/70 364/515/70 366/517/70 +f 367/518/70 368/519/70 369/520/70 +f 322/467/70 370/521/70 371/522/70 +f 372/523/70 304/449/70 373/524/70 +f 371/522/70 348/498/70 322/467/70 +f 304/449/70 374/525/70 373/524/70 +f 375/526/74 287/527/74 376/528/74 +f 288/529/74 337/530/74 377/531/74 +f 377/532/69 378/533/69 379/534/69 +f 268/412/68 380/535/68 381/536/68 +f 278/422/74 382/537/74 383/538/74 +f 384/539/68 385/540/68 386/541/68 +f 387/542/74 262/406/74 261/405/74 +f 388/543/74 250/393/74 389/544/74 +f 390/545/74 391/546/74 278/422/74 +f 275/419/74 392/547/74 393/548/74 +f 257/401/74 394/549/74 395/550/74 +f 290/551/74 272/416/74 396/552/74 +f 338/553/74 282/554/74 339/555/74 +f 246/389/74 397/556/74 248/391/74 +f 398/557/74 253/400/74 399/558/74 +f 248/559/67 357/508/67 249/560/67 +f 399/561/67 255/398/67 400/562/67 +f 281/425/74 401/563/74 246/389/74 +f 250/393/74 398/557/74 389/544/74 +f 402/564/74 403/565/74 404/566/74 +f 402/564/74 405/567/74 406/568/74 +f 407/569/74 408/570/74 405/567/74 +f 409/571/67 410/572/67 411/573/67 +f 412/574/67 413/575/67 410/572/67 +f 414/576/67 415/577/67 413/575/67 +f 403/565/74 412/578/74 409/579/74 +f 406/568/74 414/580/74 412/578/74 +f 405/567/74 416/581/74 414/580/74 +f 417/582/68 418/583/68 267/411/68 +f 419/584/66 420/585/66 417/586/66 +f 421/587/74 422/588/74 292/589/74 +f 421/587/74 423/590/74 424/591/74 +f 425/592/74 426/593/74 423/590/74 +f 260/594/69 427/595/69 428/596/69 +f 429/597/66 430/598/66 431/599/66 +f 432/600/74 402/564/74 404/566/74 +f 433/601/74 407/569/74 402/564/74 +f 434/602/74 435/603/74 407/569/74 +f 268/604/70 436/605/70 437/606/70 +f 437/606/70 438/607/70 439/608/70 +f 439/608/70 440/609/70 441/610/70 +f 265/409/69 289/611/69 442/612/69 +f 267/411/68 443/613/68 380/535/68 +f 444/614/70 358/509/70 445/615/70 +f 446/616/70 447/617/70 444/614/70 +f 448/618/70 449/619/70 446/616/70 +f 450/620/70 444/614/70 445/615/70 +f 444/614/70 451/621/70 446/616/70 +f 451/621/70 448/618/70 446/616/70 +f 452/622/70 453/623/70 266/624/70 +f 454/625/70 455/626/70 452/622/70 +f 455/626/67 456/627/67 453/623/67 +f 457/628/67 458/629/67 455/626/67 +f 374/525/67 410/572/67 459/630/67 +f 459/630/67 413/575/67 449/619/67 +f 449/619/67 415/577/67 447/617/67 +f 460/631/74 461/632/74 462/633/74 +f 463/634/66 464/635/66 465/636/66 +f 466/637/67 467/638/67 468/639/67 +f 461/632/74 469/640/74 470/641/74 +f 471/642/68 472/643/68 473/644/68 +f 474/645/66 436/646/66 381/647/66 +f 475/648/66 438/649/66 436/646/66 +f 476/650/66 440/651/66 438/649/66 +f 425/592/74 477/652/74 478/653/74 +f 466/637/68 479/654/68 480/655/68 +f 292/589/74 481/656/74 421/587/74 +f 473/657/67 482/658/67 483/659/67 +f 478/653/74 484/660/74 395/550/74 +f 485/661/68 486/662/68 487/663/68 +f 488/664/74 489/665/74 490/666/74 +f 491/667/74 492/668/74 493/669/74 +f 491/670/68 494/671/68 396/672/68 +f 318/463/70 495/673/70 496/674/70 +f 497/675/69 498/676/69 499/677/69 +f 500/678/68 501/679/68 502/680/68 +f 503/681/69 488/682/69 490/683/69 +f 504/684/70 345/495/70 505/685/70 +f 506/686/69 507/687/69 503/681/69 +f 489/688/69 508/689/69 509/690/69 +f 492/668/68 501/679/68 510/691/68 +f 511/692/74 512/693/74 513/694/74 +f 514/695/74 515/696/74 516/697/74 +f 498/698/74 486/662/74 517/699/74 +f 511/700/66 517/701/66 518/702/66 +f 519/703/67 520/704/67 497/675/67 +f 521/705/69 522/706/69 523/707/69 +f 524/708/66 515/709/66 525/710/66 +f 526/711/68 527/712/68 466/637/68 +f 518/702/66 486/713/66 528/714/66 +f 529/715/74 517/699/74 530/716/74 +f 380/717/66 531/718/66 285/429/66 +f 355/506/66 381/647/66 354/505/66 +f 303/448/67 411/573/67 374/525/67 +f 532/719/74 404/566/74 533/720/74 +f 534/721/66 535/722/66 536/723/66 +f 292/589/74 392/547/74 290/551/74 +f 401/563/74 409/579/74 397/556/74 +f 397/724/67 411/573/67 357/508/67 +f 404/566/74 401/563/74 533/720/74 +f 537/725/66 538/726/66 419/584/66 +f 373/524/70 459/630/70 448/618/70 +f 539/727/70 373/524/70 448/618/70 +f 350/500/74 540/728/74 352/503/74 +f 541/729/74 351/502/74 542/730/74 +f 543/731/66 515/709/66 544/732/66 +f 545/733/67 546/734/67 521/705/67 +f 522/706/74 515/696/74 547/735/74 +f 395/736/67 283/427/67 257/737/67 +f 378/738/74 470/641/74 379/739/74 +f 548/740/74 461/632/74 378/738/74 +f 370/521/70 445/615/70 371/522/70 +f 445/615/70 347/497/70 371/522/70 +f 549/741/70 457/628/70 454/625/70 +f 389/544/74 408/570/74 435/603/74 +f 416/742/67 400/562/67 415/577/67 +f 408/570/74 399/558/74 416/581/74 +f 335/743/66 550/744/66 551/745/66 +f 395/550/74 426/593/74 478/653/74 +f 552/746/74 389/544/74 435/603/74 +f 441/610/70 295/747/70 263/748/70 +f 334/749/70 553/750/70 549/741/70 +f 554/751/74 555/752/74 556/753/74 +f 447/617/67 400/562/67 358/509/67 +f 557/754/66 295/440/66 440/651/66 +f 263/748/70 549/741/70 441/610/70 +f 556/753/74 335/743/74 551/745/74 +f 441/610/70 454/625/70 439/608/70 +f 439/608/70 452/622/70 437/606/70 +f 437/606/70 266/624/70 268/604/70 +f 558/755/74 551/745/74 537/725/74 +f 559/756/74 537/725/74 419/584/74 +f 560/757/74 419/584/74 417/586/74 +f 561/758/69 335/483/69 555/759/69 +f 453/760/68 417/582/68 266/410/68 +f 335/483/69 442/612/69 562/761/69 +f 551/745/66 563/762/66 537/725/66 +f 564/763/69 565/764/69 566/765/69 +f 567/766/67 565/767/67 568/768/67 +f 508/769/74 569/770/74 509/771/74 +f 570/772/74 571/773/74 572/774/74 +f 573/775/68 510/691/68 574/776/68 +f 575/777/69 509/690/69 548/778/69 +f 359/510/69 503/681/69 576/779/69 +f 576/779/69 490/683/69 577/780/69 +f 331/477/68 510/691/68 500/678/68 +f 493/669/74 573/775/74 386/781/74 +f 490/666/74 575/782/74 577/783/74 +f 578/784/74 579/785/74 569/770/74 +f 493/786/68 580/787/68 491/670/68 +f 581/788/70 582/789/70 495/673/70 +f 583/790/74 584/791/74 571/773/74 +f 585/792/70 502/680/70 504/684/70 +f 586/793/66 587/794/66 588/795/66 +f 589/796/69 590/797/69 591/798/69 +f 592/799/66 464/635/66 593/800/66 +f 468/639/69 594/801/69 595/802/69 +f 395/736/68 596/803/68 526/711/68 +f 597/804/67 589/796/67 591/798/67 +f 598/805/66 599/806/66 586/793/66 +f 588/807/68 600/808/68 601/809/68 +f 602/810/66 465/811/66 543/812/66 +f 511/692/66 603/813/66 602/810/66 +f 604/814/69 605/815/69 606/816/69 +f 607/817/68 608/818/68 471/642/68 +f 609/819/68 610/820/68 607/817/68 +f 442/612/69 606/816/69 562/761/69 +f 563/762/66 611/821/66 538/726/66 +f 612/822/67 613/823/67 289/824/67 +f 614/825/67 568/768/67 615/826/67 +f 442/612/69 613/827/69 604/814/69 +f 616/828/69 568/829/69 564/763/69 +f 420/585/66 538/726/66 611/821/66 +f 418/583/68 617/830/68 609/819/68 +f 443/831/67 618/832/67 619/833/67 +f 620/834/67 483/659/67 621/835/67 +f 550/744/66 622/836/66 563/762/66 +f 418/583/68 623/837/68 443/613/68 +f 607/817/68 473/644/68 620/838/68 +f 379/739/74 289/839/74 624/840/74 +f 542/730/74 443/841/74 619/842/74 +f 470/641/74 612/843/74 289/839/74 +f 288/432/69 379/534/69 624/844/69 +f 377/531/74 336/845/74 625/846/74 +f 376/528/74 384/847/74 270/414/74 +f 351/502/74 531/848/74 443/841/74 +f 297/442/68 269/413/68 298/443/68 +f 356/849/69 337/485/69 626/850/69 +f 627/851/69 321/466/69 356/849/69 +f 628/852/70 301/446/70 360/511/70 +f 330/476/70 298/443/70 346/496/70 +f 287/431/68 353/853/68 384/539/68 +f 629/854/68 376/528/68 269/413/68 +f 630/855/74 631/856/74 632/857/74 +f 483/858/68 633/859/68 621/860/68 +f 482/861/68 634/862/68 483/858/68 +f 612/863/69 635/864/69 636/865/69 +f 567/866/69 637/867/69 630/855/69 +f 632/857/74 638/868/74 482/861/74 +f 618/869/68 542/870/68 619/871/68 +f 636/865/69 639/872/69 614/873/69 +f 640/874/68 541/875/68 542/870/68 +f 469/876/69 641/877/69 635/864/69 +f 637/867/74 642/878/74 631/856/74 +f 643/879/69 644/880/69 637/867/69 +f 631/856/74 645/881/74 638/868/74 +f 638/868/68 646/882/68 634/862/68 +f 577/783/74 625/846/74 336/845/74 +f 386/781/74 270/414/74 384/847/74 +f 346/496/68 574/776/68 331/477/68 +f 320/465/69 577/780/69 336/484/69 +f 628/852/69 576/779/69 320/465/69 +f 575/777/69 378/533/69 625/883/69 +f 270/414/68 574/776/68 271/415/68 +f 509/771/74 462/633/74 548/740/74 +f 571/773/74 540/728/74 572/774/74 +f 569/770/74 460/631/74 462/633/74 +f 386/541/68 584/884/68 493/786/68 +f 506/686/70 361/512/70 582/789/70 +f 571/773/74 385/885/74 352/503/74 +f 332/478/70 500/678/70 585/792/70 +f 647/886/69 648/887/69 641/877/69 +f 644/880/69 649/888/69 650/889/69 +f 541/875/68 651/890/68 540/891/68 +f 645/881/68 652/892/68 646/882/68 +f 650/889/69 649/888/69 653/893/69 +f 648/887/69 579/894/69 654/895/69 +f 572/896/68 651/890/68 655/897/68 +f 655/897/68 656/898/68 657/899/68 +f 653/893/69 658/900/69 659/901/69 +f 657/899/68 652/892/68 660/902/68 +f 658/900/69 654/895/69 659/901/69 +f 291/436/69 661/903/69 292/437/69 +f 580/787/68 601/809/68 494/671/68 +f 591/798/69 662/904/69 291/436/69 +f 570/905/66 586/793/66 583/906/66 +f 663/907/67 591/798/67 291/436/67 +f 480/655/68 664/908/68 545/733/68 +f 283/427/69 595/802/69 284/428/69 +f 508/909/66 593/800/66 578/910/66 +f 421/587/74 665/911/74 425/592/74 +f 583/906/66 588/795/66 580/912/66 +f 526/711/67 468/639/67 283/427/67 +f 578/910/66 463/634/66 666/913/66 +f 579/894/69 463/914/69 654/895/69 +f 598/915/68 572/896/68 655/897/68 +f 465/916/69 654/895/69 463/914/69 +f 655/897/68 667/917/68 598/915/68 +f 652/892/68 668/918/68 660/902/68 +f 635/919/67 633/920/67 639/921/67 +f 634/922/70 669/923/70 643/924/70 +f 646/925/70 649/926/70 669/923/70 +f 635/927/74 670/928/74 640/929/74 +f 651/930/74 641/931/74 648/932/74 +f 651/930/66 658/933/66 656/934/66 +f 658/933/66 652/935/66 656/934/66 +f 632/936/67 671/937/67 630/938/67 +f 672/939/67 632/936/67 482/658/67 +f 673/940/69 566/765/69 674/941/69 +f 675/942/68 676/943/68 677/944/68 +f 678/945/69 679/946/69 680/947/69 +f 608/818/68 677/944/68 471/642/68 +f 681/948/68 676/943/68 682/949/68 +f 482/658/67 683/950/67 672/939/67 +f 684/951/68 685/952/68 686/953/68 +f 682/949/68 687/954/68 685/952/68 +f 688/955/69 680/947/69 689/956/69 +f 630/938/67 690/957/67 565/767/67 +f 691/958/69 692/959/69 693/960/69 +f 694/961/69 692/959/69 695/962/69 +f 689/956/69 696/963/69 694/961/69 +f 697/964/68 698/965/68 699/966/68 +f 697/964/68 686/953/68 700/967/68 +f 639/921/67 634/922/67 643/924/67 +f 614/873/69 643/879/69 567/866/69 +f 621/860/68 640/874/68 618/869/68 +f 609/819/68 620/838/68 623/837/68 +f 550/744/66 562/968/66 701/969/66 +f 623/970/67 621/835/67 618/832/67 +f 604/814/69 615/971/69 616/828/69 +f 636/972/67 615/826/67 613/823/67 +f 565/764/69 690/973/69 702/974/69 +f 616/828/69 673/940/69 605/815/69 +f 703/975/68 704/976/68 705/977/68 +f 693/960/69 706/978/69 707/979/69 +f 508/689/69 595/802/69 592/980/69 +f 494/671/68 597/804/68 663/907/68 +f 601/809/68 708/981/68 597/804/68 +f 592/980/69 594/801/69 709/982/69 +f 546/734/74 516/697/74 522/706/74 +f 523/707/69 547/735/69 524/983/69 +f 520/984/74 487/663/74 498/698/74 +f 505/685/70 344/494/70 328/474/70 +f 315/460/70 496/674/70 363/514/70 +f 396/672/68 663/907/68 290/435/68 +f 519/703/68 487/663/68 710/985/68 +f 339/555/74 711/986/74 488/664/74 +f 396/552/74 712/987/74 491/667/74 +f 502/680/68 274/418/68 345/495/68 +f 507/687/69 339/487/69 488/682/69 +f 581/788/69 319/464/69 507/687/69 +f 711/988/69 284/428/69 508/689/69 +f 712/987/68 274/418/68 501/679/68 +f 477/989/67 596/803/67 484/990/67 +f 665/991/67 713/992/67 477/989/67 +f 481/993/67 714/994/67 665/991/67 +f 514/995/68 543/812/68 544/996/68 +f 511/692/69 529/997/69 530/998/69 +f 715/999/67 516/1000/67 664/908/67 +f 513/1001/67 498/676/67 529/1002/67 +f 661/903/67 716/1003/67 481/993/67 +f 590/797/67 717/1004/67 718/1005/67 +f 719/1006/67 479/654/67 527/712/67 +f 720/1007/67 721/1008/67 719/1006/67 +f 718/1005/67 722/1009/67 720/1007/67 +f 716/1003/67 720/1007/67 714/994/67 +f 714/994/67 719/1006/67 713/992/67 +f 713/992/67 527/712/67 596/803/67 +f 662/904/67 718/1005/67 716/1003/67 +f 717/1004/67 499/677/67 513/1001/67 +f 479/654/67 715/999/67 664/908/67 +f 721/1008/67 512/1010/67 715/999/67 +f 722/1009/67 513/1001/67 512/1010/67 +f 600/808/68 519/703/68 708/981/68 +f 709/982/69 523/707/69 524/983/69 +f 545/733/68 516/1000/68 723/1011/68 +f 715/1012/74 602/810/74 543/812/74 +f 480/655/67 521/705/67 467/638/67 +f 465/636/66 525/710/66 543/731/66 +f 599/806/66 528/714/66 587/794/66 +f 709/1013/66 525/710/66 464/635/66 +f 467/638/69 523/707/69 594/801/69 +f 708/981/67 497/675/67 589/796/67 +f 667/1014/66 518/702/66 599/806/66 +f 497/675/69 724/1015/69 589/796/69 +f 587/1016/68 485/661/68 600/808/68 +f 426/593/74 536/1017/74 725/1018/74 +f 392/547/74 429/1019/74 431/1020/74 +f 423/590/74 725/1018/74 726/1021/74 +f 424/591/74 726/1021/74 727/1022/74 +f 422/588/74 727/1022/74 429/1019/74 +f 394/549/74 534/1023/74 536/1017/74 +f 393/548/74 431/1020/74 728/1024/74 +f 312/457/70 366/517/70 729/1025/70 +f 276/420/68 325/471/68 329/475/68 +f 316/461/69 730/1026/69 258/488/69 +f 326/472/70 343/493/70 731/1027/70 +f 362/513/69 732/1028/69 316/461/69 +f 393/548/68 733/1029/68 276/420/68 +f 259/403/74 730/1030/74 534/1023/74 +f 734/1031/69 388/1032/69 735/1033/69 +f 382/537/74 432/600/74 532/719/74 +f 431/599/68 736/1034/68 737/1035/68 +f 734/1036/74 738/1037/74 388/543/74 +f 333/1038/74 738/1037/74 341/1039/74 +f 739/1040/74 533/720/74 281/425/74 +f 327/473/70 740/1041/70 370/521/70 +f 308/453/68 280/424/68 342/492/68 +f 741/1042/69 341/491/69 387/1043/69 +f 367/518/69 311/456/69 741/1042/69 +f 742/1044/70 342/492/70 305/450/70 +f 743/1045/68 739/1040/68 280/424/68 +f 535/722/68 744/1046/68 745/1047/68 +f 736/1034/68 746/1048/68 747/1049/68 +f 748/1050/69 749/1051/69 750/1052/69 +f 747/1049/67 751/1053/67 752/1054/67 +f 748/1050/66 753/1055/66 430/598/66 +f 754/1056/66 749/1051/66 755/1057/66 +f 756/1058/82 388/1059/82 552/1060/82 +f 757/1061/82 552/1060/82 434/1062/82 +f 758/1063/82 434/1062/82 433/1064/82 +f 759/1065/82 433/1064/82 432/1066/82 +f 760/1067/67 427/595/67 262/1068/67 +f 761/1069/68 759/1070/68 762/1071/68 +f 391/1072/67 752/1054/67 761/1073/67 +f 432/1074/68 762/1071/68 759/1070/68 +f 752/1075/83 758/1063/83 759/1065/83 +f 763/1076/83 757/1061/83 758/1063/83 +f 764/1077/83 756/1058/83 757/1061/83 +f 765/1078/83 735/1079/83 756/1058/83 +f 279/423/68 383/538/68 743/1045/68 +f 766/1080/69 741/1042/69 313/458/69 +f 313/458/69 387/1043/69 261/489/69 +f 307/452/68 743/1045/68 308/453/68 +f 760/1081/74 767/1082/74 734/1036/74 +f 391/546/74 762/1083/74 382/537/74 +f 760/1084/69 735/1033/69 768/1085/69 +f 341/1039/74 767/1082/74 387/542/74 +f 383/538/74 532/719/74 739/1040/74 +f 309/454/70 369/520/70 740/1041/70 +f 769/1086/70 308/453/70 342/492/70 +f 770/1087/66 771/1088/66 754/1056/66 +f 755/1057/69 429/597/69 772/1089/69 +f 755/1057/66 773/1090/66 754/1056/66 +f 763/1091/67 774/1092/67 764/1093/67 +f 737/1035/68 747/1049/68 391/1072/68 +f 731/1027/70 307/452/70 775/1094/70 +f 766/1080/70 729/1025/70 368/519/70 +f 534/721/69 428/596/69 776/1095/69 +f 728/1024/74 737/1096/74 390/545/74 +f 733/1029/68 343/493/68 325/471/68 +f 732/1028/69 340/490/69 730/1026/69 +f 365/516/69 314/459/69 732/1028/69 +f 733/1029/68 390/545/68 277/421/68 +f 534/1023/74 340/1097/74 260/404/74 +f 744/1098/74 777/1099/74 778/1100/74 +f 749/1101/74 779/1102/74 751/1053/74 +f 771/1103/74 774/1092/74 779/1102/74 +f 780/1104/74 781/1105/74 774/1092/74 +f 782/1106/74 751/1053/74 746/1048/74 +f 783/1107/74 778/1100/74 781/1105/74 +f 753/1108/74 749/1101/74 782/1106/74 +f 784/1109/74 785/1110/74 744/1098/74 +f 752/1054/67 779/1102/67 763/1091/67 +f 428/596/69 777/1099/69 785/1111/69 +f 745/1047/66 783/1112/66 786/1113/66 +f 430/598/68 782/1114/68 736/1034/68 +f 765/1115/67 778/1100/67 768/1116/67 +f 776/1095/66 784/1117/66 535/722/66 +f 776/1095/69 785/1111/69 787/1118/69 +f 768/1116/67 777/1099/67 427/595/67 +f 764/1093/67 781/1105/67 765/1115/67 +f 786/1113/66 780/1119/66 770/1120/66 +f 725/1018/74 788/1121/74 789/1122/74 +f 726/1021/74 789/1122/74 790/1123/74 +f 727/1022/74 790/1123/74 773/1124/74 +f 429/1019/74 773/1124/74 772/1125/74 +f 770/1120/66 789/1126/66 786/1113/66 +f 745/1047/68 536/723/68 535/722/68 +f 754/1056/66 790/1127/66 770/1087/66 +f 786/1113/66 788/1128/66 745/1047/66 +f 381/647/66 375/1129/66 629/1130/66 +f 264/1131/66 356/507/66 626/1132/66 +f 791/1133/74 556/753/74 558/755/74 +f 792/1134/74 558/755/74 559/756/74 +f 793/1135/74 559/756/74 560/757/74 +f 794/1136/69 555/759/69 795/1137/69 +f 793/1138/68 453/760/68 796/1139/68 +f 458/629/67 797/1140/67 456/627/67 +f 798/1141/70 799/1142/70 800/1143/70 +f 553/750/67 801/1144/67 457/628/67 +f 561/1145/67 802/1146/67 553/750/67 +f 803/1147/70 804/1148/70 805/1149/70 +f 806/1150/70 807/1151/70 803/1147/70 +f 805/1152/67 808/1153/67 797/1140/67 +f 809/1154/67 806/1155/67 802/1146/67 +f 801/1144/67 805/1152/67 458/629/67 +f 810/1156/70 811/1157/70 798/1141/70 +f 802/1146/67 803/1158/67 801/1144/67 +f 812/1159/67 813/1160/67 814/1161/67 +f 815/1162/67 812/1159/67 806/1155/67 +f 816/1163/70 817/1164/70 818/1165/70 +f 819/1166/84 820/1167/84 821/1168/84 +f 822/1169/67 814/1170/67 813/1160/67 +f 818/1165/70 823/1171/70 816/1163/70 +f 824/1172/70 798/1141/70 807/1151/70 +f 807/1151/70 800/1143/70 804/1148/70 +f 820/1167/84 825/1173/84 821/1168/84 +f 826/1174/67 827/1175/67 823/1171/67 +f 465/1176/74 828/1177/74 659/1178/74 +f 659/1178/67 829/1179/67 653/1180/67 +f 653/1180/85 830/1181/85 650/889/85 +f 650/889/74 642/878/74 644/880/74 +f 830/1181/74 645/881/74 642/878/74 +f 668/918/85 829/1179/85 660/1182/85 +f 828/1177/67 660/1182/67 829/1179/67 +f 603/1183/74 657/1184/74 828/1177/74 +f 831/1185/68 682/949/68 684/951/68 +f 680/947/69 832/1186/69 696/963/69 +f 677/944/68 676/943/68 833/1187/68 +f 834/1188/68 684/951/68 697/964/68 +f 696/963/69 835/1189/69 692/959/69 +f 693/960/69 835/1189/69 706/978/69 +f 707/979/69 836/1190/69 837/1191/69 +f 834/1188/68 699/966/68 838/1192/68 +f 838/1192/68 699/966/68 704/976/68 +f 674/941/69 678/945/69 688/955/69 +f 839/1193/69 840/1194/69 841/1195/69 +f 842/1196/67 843/1197/67 840/1198/67 +f 844/1199/68 845/1200/68 843/1201/68 +f 846/1202/66 841/1203/66 845/1204/66 +f 842/1196/70 846/1202/70 844/1199/70 +f 847/1205/67 848/1206/67 849/1207/67 +f 850/1208/68 851/1209/68 848/1206/68 +f 848/1210/74 852/1211/74 849/1212/74 +f 847/1213/70 853/1214/70 850/1215/70 +f 854/1216/66 855/1217/66 856/1218/66 +f 851/1219/74 855/1220/74 852/1211/74 +f 857/1221/70 854/1222/70 853/1214/70 +f 854/1222/70 858/1223/70 853/1214/70 +f 858/1223/68 859/1224/68 860/1225/68 +f 856/1218/66 861/1226/66 854/1216/66 +f 853/1227/67 860/1225/67 851/1209/67 +f 851/1219/74 859/1224/74 856/1228/74 +f 102/190/66 862/1229/66 103/191/66 +f 862/1229/66 863/1230/66 103/191/66 +f 863/1230/66 864/1231/66 103/191/66 +f 103/191/66 865/1232/66 866/1233/66 +f 866/1233/66 101/189/66 103/191/66 +f 106/194/66 867/1234/66 104/192/66 +f 867/1234/66 868/1235/66 104/192/66 +f 868/1235/66 869/1236/66 104/192/66 +f 104/192/66 870/1237/66 871/1238/66 +f 871/1238/66 872/1239/66 105/193/66 +f 105/193/66 873/1240/66 874/1241/66 +f 874/1241/66 875/1242/66 105/193/66 +f 875/1242/66 106/194/66 105/193/66 +f 104/192/66 871/1238/66 105/193/66 +f 876/1243/67 877/1244/67 109/197/67 +f 109/197/67 878/1245/67 879/1246/67 +f 879/1246/67 880/1247/67 881/1248/67 +f 881/1248/67 882/1249/67 879/1246/67 +f 882/1249/67 107/195/67 879/1246/67 +f 107/195/67 883/1250/67 108/196/67 +f 108/196/67 884/1251/67 109/197/67 +f 884/1251/67 876/1243/67 109/197/67 +f 109/197/67 879/1246/67 107/195/67 +f 885/1252/68 886/1253/68 110/198/68 +f 110/198/68 887/1254/68 111/199/68 +f 111/199/68 888/1255/68 112/200/68 +f 112/200/68 889/1256/68 885/1252/68 +f 885/1252/68 110/198/68 112/200/68 +f 115/203/69 890/1257/69 891/1258/69 +f 891/1258/69 892/1259/69 113/201/69 +f 113/201/69 893/1260/69 114/202/69 +f 114/202/69 894/1261/69 115/203/69 +f 115/203/69 891/1258/69 113/201/69 +f 116/204/67 123/211/67 117/205/67 +f 119/207/67 130/1262/67 120/208/67 +f 122/210/67 125/213/67 123/211/67 +f 124/212/67 126/214/67 125/213/67 +f 121/209/67 120/208/67 126/214/67 +f 118/206/67 117/205/67 127/215/67 +f 117/217/67 132/223/67 129/218/67 +f 130/220/67 134/225/67 131/221/67 +f 132/223/67 895/1263/67 133/224/67 +f 134/225/67 896/1264/67 135/226/67 +f 136/227/66 182/284/66 137/228/66 +f 142/233/70 159/292/70 143/234/70 +f 140/231/67 142/251/67 145/236/67 +f 141/232/67 145/236/67 146/237/67 +f 148/239/68 169/1265/68 149/240/68 +f 151/242/67 148/250/67 150/243/67 +f 153/245/69 139/230/69 154/246/69 +f 145/236/67 151/242/67 152/244/67 +f 155/247/69 184/286/69 156/248/69 +f 142/251/67 144/249/67 151/242/67 +f 153/245/71 156/248/71 157/252/71 +f 139/230/67 141/232/67 147/238/67 +f 140/254/70 158/253/70 159/255/70 +f 140/254/72 139/230/72 153/245/72 +f 143/234/73 169/1265/73 148/239/73 +f 160/257/72 182/284/72 161/258/72 +f 163/260/68 166/280/68 164/261/68 +f 166/263/74 203/319/74 167/264/74 +f 170/269/69 208/331/69 171/270/69 +f 168/267/66 174/274/66 149/272/66 +f 173/273/66 179/279/66 174/274/66 +f 158/253/75 157/1266/75 175/275/75 +f 176/276/66 180/281/66 177/277/66 +f 179/279/68 173/273/68 166/280/68 +f 180/281/66 136/227/66 138/229/66 +f 176/276/66 161/283/66 136/227/66 +f 183/285/69 137/228/69 182/284/69 +f 184/286/69 192/300/69 185/287/69 +f 162/288/69 161/1267/69 186/289/69 +f 175/291/75 196/1268/75 143/234/75 +f 165/262/68 164/261/68 188/293/68 +f 156/248/72 185/287/72 172/295/72 +f 190/296/68 191/299/68 180/297/68 +f 189/294/68 188/293/68 191/299/68 +f 192/300/69 194/302/69 193/301/69 +f 194/302/69 183/285/69 160/257/69 +f 175/303/76 201/312/76 195/304/76 +f 197/306/68 207/327/68 198/307/68 +f 164/265/74 167/264/74 200/309/74 +f 157/311/76 215/344/76 201/312/76 +f 185/287/72 193/301/72 170/313/72 +f 193/301/72 160/257/72 162/259/72 +f 199/308/77 178/350/77 177/314/77 +f 196/316/77 204/320/77 167/264/77 +f 204/320/77 197/306/77 200/309/77 +f 178/324/78 219/349/78 206/325/78 +f 204/320/68 218/347/68 207/327/68 +f 191/328/74 202/315/74 177/314/74 +f 188/310/74 200/309/74 202/315/74 +f 173/330/79 168/1269/79 203/319/79 +f 162/288/69 187/290/69 208/331/69 +f 209/334/66 202/333/66 210/335/66 +f 209/334/68 211/336/68 212/337/68 +f 200/338/80 213/1270/80 210/339/80 +f 205/323/67 212/337/67 213/341/67 +f 205/323/73 197/1271/73 199/342/73 +f 187/290/70 186/289/70 206/325/70 +f 215/344/70 171/270/70 216/345/70 +f 171/270/70 208/331/70 217/346/70 +f 208/331/70 187/290/70 214/343/70 +f 216/345/70 218/347/70 195/304/70 +f 206/325/70 219/349/70 198/307/70 +f 217/346/70 207/327/70 218/347/70 +f 214/343/70 198/307/70 207/327/70 +f 172/271/69 171/270/69 215/344/69 +f 199/308/68 198/307/68 219/349/68 +f 204/320/68 196/316/68 195/304/68 +f 176/326/78 206/325/78 186/289/78 +f 181/298/70 226/385/70 210/352/70 +f 152/244/67 234/368/67 220/353/67 +f 147/238/67 231/365/67 221/354/67 +f 184/286/69 229/363/69 222/355/69 +f 189/294/70 213/373/70 223/356/70 +f 149/240/68 244/383/68 224/357/68 +f 163/260/70 235/369/70 174/358/70 +f 225/359/66 236/371/66 226/360/66 +f 192/300/69 222/355/69 227/361/69 +f 137/228/66 232/366/66 228/362/66 +f 155/247/69 230/364/69 229/363/69 +f 154/246/69 221/354/69 230/364/69 +f 146/237/67 220/353/67 231/365/67 +f 183/285/69 233/367/69 232/366/69 +f 138/229/66 228/362/66 225/359/66 +f 194/302/69 227/361/69 233/367/69 +f 150/243/67 224/1272/67 234/368/67 +f 235/369/70 241/387/70 149/370/70 +f 236/371/66 897/1273/66 237/372/66 +f 165/262/70 223/356/70 235/369/70 +f 190/296/70 210/352/70 213/373/70 +f 212/374/68 243/382/68 238/375/68 +f 239/376/68 238/375/68 240/377/68 +f 237/379/68 897/1274/68 242/380/68 +f 211/381/68 242/380/68 243/382/68 +f 241/378/68 240/377/68 244/383/68 +f 213/373/70 212/1275/70 239/384/70 +f 226/385/70 237/1276/70 211/386/70 +f 223/356/70 239/384/70 241/387/70 +f 245/388/68 281/425/68 246/389/68 +f 247/390/68 246/389/68 248/391/68 +f 250/393/74 333/1038/74 251/394/74 +f 253/396/67 256/1277/67 254/397/67 +f 252/395/74 251/394/74 256/399/74 +f 257/401/74 338/553/74 258/402/74 +f 260/404/74 340/1097/74 261/405/74 +f 263/407/69 295/1278/69 264/408/69 +f 266/410/68 417/582/68 267/411/68 +f 269/413/68 376/528/68 270/414/68 +f 272/416/68 275/419/68 273/417/68 +f 275/419/68 393/548/68 276/420/68 +f 277/421/68 390/545/68 278/422/68 +f 280/424/68 739/1040/68 281/425/68 +f 282/426/69 257/737/69 283/427/69 +f 285/429/68 531/718/68 286/430/68 +f 288/432/66 624/844/66 289/433/66 +f 290/435/67 663/907/67 291/436/67 +f 293/438/66 300/445/66 294/439/66 +f 296/441/70 355/506/70 297/442/70 +f 299/444/70 627/851/70 300/445/70 +f 302/447/70 349/499/70 303/448/70 +f 304/449/70 742/1044/70 305/450/70 +f 306/451/70 775/1094/70 307/452/70 +f 309/454/69 327/473/69 310/455/69 +f 312/457/69 766/1080/69 313/458/69 +f 315/460/69 362/513/69 316/461/69 +f 318/463/69 315/460/69 317/462/69 +f 299/444/69 628/852/69 320/465/69 +f 322/467/69 348/498/69 254/468/69 +f 324/470/70 329/475/70 325/471/70 +f 327/473/69 322/467/69 323/469/69 +f 328/474/70 344/494/70 329/475/70 +f 330/476/70 346/496/70 331/477/70 +f 310/455/69 323/469/69 251/479/69 +f 323/469/69 254/468/69 256/481/69 +f 334/482/69 263/407/69 265/409/69 +f 321/466/69 320/465/69 336/484/69 +f 319/464/69 317/462/69 338/486/69 +f 317/462/69 316/461/69 258/488/69 +f 314/459/69 313/458/69 261/489/69 +f 311/456/69 310/455/69 333/480/69 +f 280/424/68 245/388/68 305/450/68 +f 277/421/68 279/423/68 307/452/68 +f 344/494/68 273/417/68 276/420/68 +f 345/495/68 274/418/68 273/417/68 +f 298/443/68 269/413/68 271/415/68 +f 347/497/67 255/398/67 254/397/67 +f 302/447/68 247/390/68 249/392/68 +f 305/450/68 245/388/68 247/390/68 +f 350/500/74 353/504/74 286/501/74 +f 352/503/74 385/885/74 353/504/74 +f 354/505/66 629/1130/66 297/442/66 +f 300/445/66 627/851/66 356/507/66 +f 349/499/67 249/560/67 357/508/67 +f 358/509/67 400/562/67 255/398/67 +f 359/510/70 628/852/70 360/511/70 +f 362/513/70 315/460/70 363/514/70 +f 365/516/70 362/513/70 364/515/70 +f 367/518/70 766/1080/70 368/519/70 +f 322/467/70 327/473/70 370/521/70 +f 372/523/70 742/1044/70 304/449/70 +f 371/522/70 347/497/70 348/498/70 +f 304/449/70 303/448/70 374/525/70 +f 375/526/74 285/1279/74 287/527/74 +f 288/529/74 626/1280/74 337/530/74 +f 377/532/69 625/883/69 378/533/69 +f 268/412/68 267/411/68 380/535/68 +f 278/422/74 391/546/74 382/537/74 +f 384/539/68 353/853/68 385/540/68 +f 387/542/74 767/1082/74 262/406/74 +f 388/543/74 738/1037/74 250/393/74 +f 390/545/74 737/1096/74 391/546/74 +f 275/419/74 290/551/74 392/547/74 +f 257/401/74 259/403/74 394/549/74 +f 290/551/74 275/419/74 272/416/74 +f 338/553/74 257/401/74 282/554/74 +f 246/389/74 401/563/74 397/556/74 +f 398/557/74 252/395/74 253/400/74 +f 248/559/67 397/724/67 357/508/67 +f 399/561/67 253/396/67 255/398/67 +f 281/425/74 533/720/74 401/563/74 +f 250/393/74 252/395/74 398/557/74 +f 402/564/74 406/568/74 403/565/74 +f 402/564/74 407/569/74 405/567/74 +f 407/569/74 435/603/74 408/570/74 +f 409/571/67 412/574/67 410/572/67 +f 412/574/67 414/576/67 413/575/67 +f 414/576/67 416/742/67 415/577/67 +f 403/565/74 406/568/74 412/578/74 +f 406/568/74 405/567/74 414/580/74 +f 405/567/74 408/570/74 416/581/74 +f 417/582/68 420/1281/68 418/583/68 +f 419/584/66 538/726/66 420/585/66 +f 421/587/74 424/591/74 422/588/74 +f 421/587/74 425/592/74 423/590/74 +f 425/592/74 478/653/74 426/593/74 +f 260/594/69 262/1068/69 427/595/69 +f 429/597/66 748/1050/66 430/598/66 +f 432/600/74 433/601/74 402/564/74 +f 433/601/74 434/602/74 407/569/74 +f 434/602/74 552/746/74 435/603/74 +f 268/604/70 381/1282/70 436/605/70 +f 437/606/70 436/605/70 438/607/70 +f 439/608/70 438/607/70 440/609/70 +f 265/409/69 264/408/69 289/611/69 +f 267/411/68 418/583/68 443/613/68 +f 444/614/70 447/617/70 358/509/70 +f 446/616/70 449/619/70 447/617/70 +f 448/618/70 459/630/70 449/619/70 +f 450/620/70 898/1283/70 444/614/70 +f 444/614/70 898/1283/70 451/621/70 +f 451/621/70 539/727/70 448/618/70 +f 452/622/70 455/626/70 453/623/70 +f 454/625/70 457/628/70 455/626/70 +f 455/626/67 458/629/67 456/627/67 +f 457/628/67 801/1144/67 458/629/67 +f 374/525/67 411/573/67 410/572/67 +f 459/630/67 410/572/67 413/575/67 +f 449/619/67 413/575/67 415/577/67 +f 460/631/74 647/1284/74 461/632/74 +f 463/634/66 593/800/66 464/635/66 +f 466/637/67 480/655/67 467/638/67 +f 461/632/74 647/1284/74 469/640/74 +f 471/642/68 677/944/68 472/643/68 +f 474/645/66 475/648/66 436/646/66 +f 475/648/66 476/650/66 438/649/66 +f 476/650/66 557/754/66 440/651/66 +f 425/592/74 665/911/74 477/652/74 +f 466/637/68 527/712/68 479/654/68 +f 292/589/74 661/1285/74 481/656/74 +f 473/657/67 472/1286/67 482/658/67 +f 478/653/74 477/652/74 484/660/74 +f 485/661/68 528/1287/68 486/662/68 +f 488/664/74 711/986/74 489/665/74 +f 491/667/74 712/987/74 492/668/74 +f 491/670/68 580/787/68 494/671/68 +f 318/463/70 581/788/70 495/673/70 +f 497/675/69 520/704/69 498/676/69 +f 500/678/68 510/691/68 501/679/68 +f 503/681/69 507/687/69 488/682/69 +f 504/684/70 502/680/70 345/495/70 +f 506/686/69 581/788/69 507/687/69 +f 489/688/69 711/988/69 508/689/69 +f 492/668/68 712/987/68 501/679/68 +f 511/692/74 602/810/74 512/693/74 +f 514/695/74 544/1288/74 515/696/74 +f 498/698/74 487/663/74 486/662/74 +f 511/700/66 530/1289/66 517/701/66 +f 519/703/67 710/985/67 520/704/67 +f 521/705/69 546/734/69 522/706/69 +f 524/708/66 547/1290/66 515/709/66 +f 526/711/68 596/803/68 527/712/68 +f 518/702/66 517/701/66 486/713/66 +f 529/715/74 498/698/74 517/699/74 +f 380/717/66 443/1291/66 531/718/66 +f 355/506/66 474/645/66 381/647/66 +f 303/448/67 357/508/67 411/573/67 +f 532/719/74 432/600/74 404/566/74 +f 534/721/66 776/1095/66 535/722/66 +f 292/589/74 422/588/74 392/547/74 +f 401/563/74 403/565/74 409/579/74 +f 397/724/67 409/571/67 411/573/67 +f 404/566/74 403/565/74 401/563/74 +f 537/725/66 563/762/66 538/726/66 +f 373/524/70 374/525/70 459/630/70 +f 539/727/70 372/523/70 373/524/70 +f 350/500/74 541/729/74 540/728/74 +f 541/729/74 350/500/74 351/502/74 +f 543/731/66 525/710/66 515/709/66 +f 545/733/67 723/1011/67 546/734/67 +f 522/706/74 516/697/74 515/696/74 +f 395/736/67 526/711/67 283/427/67 +f 378/738/74 461/632/74 470/641/74 +f 548/740/74 462/633/74 461/632/74 +f 370/521/70 450/620/70 445/615/70 +f 445/615/70 358/509/70 347/497/70 +f 549/741/70 553/750/70 457/628/70 +f 389/544/74 398/557/74 408/570/74 +f 416/742/67 399/561/67 400/562/67 +f 408/570/74 398/557/74 399/558/74 +f 335/743/66 562/968/66 550/744/66 +f 395/550/74 394/549/74 426/593/74 +f 552/746/74 388/543/74 389/544/74 +f 441/610/70 440/609/70 295/747/70 +f 334/749/70 561/1145/70 553/750/70 +f 554/751/74 795/1292/74 555/752/74 +f 447/617/67 415/577/67 400/562/67 +f 557/754/66 293/438/66 295/440/66 +f 263/748/70 334/749/70 549/741/70 +f 556/753/74 555/752/74 335/743/74 +f 441/610/70 549/741/70 454/625/70 +f 439/608/70 454/625/70 452/622/70 +f 437/606/70 452/622/70 266/624/70 +f 558/755/74 556/753/74 551/745/74 +f 559/756/74 558/755/74 537/725/74 +f 560/757/74 559/756/74 419/584/74 +f 561/758/69 334/482/69 335/483/69 +f 453/760/68 560/1293/68 417/582/68 +f 335/483/69 265/409/69 442/612/69 +f 551/745/66 550/744/66 563/762/66 +f 564/763/69 568/829/69 565/764/69 +f 567/766/67 630/938/67 565/767/67 +f 508/769/74 578/784/74 569/770/74 +f 570/772/74 583/790/74 571/773/74 +f 573/775/68 492/668/68 510/691/68 +f 575/777/69 489/688/69 509/690/69 +f 359/510/69 506/686/69 503/681/69 +f 576/779/69 503/681/69 490/683/69 +f 331/477/68 574/776/68 510/691/68 +f 493/669/74 492/668/74 573/775/74 +f 490/666/74 489/665/74 575/782/74 +f 578/784/74 666/1294/74 579/785/74 +f 493/786/68 584/884/68 580/787/68 +f 581/788/70 506/686/70 582/789/70 +f 583/790/74 580/1295/74 584/791/74 +f 585/792/70 500/678/70 502/680/70 +f 586/793/66 599/806/66 587/794/66 +f 589/796/69 724/1015/69 590/797/69 +f 592/799/66 709/1013/66 464/635/66 +f 468/639/69 467/638/69 594/801/69 +f 395/736/68 484/990/68 596/803/68 +f 597/804/67 708/981/67 589/796/67 +f 598/805/66 667/1014/66 599/806/66 +f 588/807/68 587/1016/68 600/808/68 +f 602/810/66 603/813/66 465/811/66 +f 511/692/66 667/1296/66 603/813/66 +f 604/814/69 616/828/69 605/815/69 +f 607/817/68 610/820/68 608/818/68 +f 609/819/68 617/830/68 610/820/68 +f 442/612/69 604/814/69 606/816/69 +f 563/762/66 622/836/66 611/821/66 +f 612/822/67 636/972/67 613/823/67 +f 614/825/67 567/766/67 568/768/67 +f 442/612/69 289/611/69 613/827/69 +f 616/828/69 615/971/69 568/829/69 +f 418/583/68 420/1281/68 617/830/68 +f 443/831/67 623/970/67 618/832/67 +f 620/834/67 473/657/67 483/659/67 +f 550/744/66 701/969/66 622/836/66 +f 418/583/68 609/819/68 623/837/68 +f 607/817/68 471/642/68 473/644/68 +f 379/739/74 470/641/74 289/839/74 +f 542/730/74 351/502/74 443/841/74 +f 470/641/74 469/640/74 612/843/74 +f 288/432/69 377/532/69 379/534/69 +f 377/531/74 337/530/74 336/845/74 +f 376/528/74 287/527/74 384/847/74 +f 351/502/74 286/501/74 531/848/74 +f 297/442/68 629/854/68 269/413/68 +f 356/849/69 321/466/69 337/485/69 +f 627/851/69 299/444/69 321/466/69 +f 628/852/70 299/444/70 301/446/70 +f 330/476/70 296/441/70 298/443/70 +f 287/431/68 286/430/68 353/853/68 +f 629/854/68 375/526/68 376/528/68 +f 630/855/74 637/867/74 631/856/74 +f 483/858/68 634/862/68 633/859/68 +f 482/861/68 638/868/68 634/862/68 +f 612/863/69 469/876/69 635/864/69 +f 567/866/69 643/879/69 637/867/69 +f 632/857/74 631/856/74 638/868/74 +f 618/869/68 640/874/68 542/870/68 +f 636/865/69 635/864/69 639/872/69 +f 640/874/68 670/1297/68 541/875/68 +f 469/876/69 647/886/69 641/877/69 +f 637/867/74 644/880/74 642/878/74 +f 643/879/69 669/1298/69 644/880/69 +f 631/856/74 642/878/74 645/881/74 +f 638/868/68 645/881/68 646/882/68 +f 577/783/74 575/782/74 625/846/74 +f 386/781/74 573/775/74 270/414/74 +f 346/496/68 271/415/68 574/776/68 +f 320/465/69 576/779/69 577/780/69 +f 628/852/69 359/510/69 576/779/69 +f 575/777/69 548/778/69 378/533/69 +f 270/414/68 573/775/68 574/776/68 +f 509/771/74 569/770/74 462/633/74 +f 571/773/74 352/503/74 540/728/74 +f 569/770/74 579/785/74 460/631/74 +f 386/541/68 385/540/68 584/884/68 +f 506/686/70 359/510/70 361/512/70 +f 571/773/74 584/791/74 385/885/74 +f 332/478/70 331/477/70 500/678/70 +f 647/886/69 460/1299/69 648/887/69 +f 644/880/69 669/1298/69 649/888/69 +f 541/875/68 670/1297/68 651/890/68 +f 645/881/68 668/918/68 652/892/68 +f 648/887/69 460/1299/69 579/894/69 +f 572/896/68 540/891/68 651/890/68 +f 655/897/68 651/890/68 656/898/68 +f 653/893/69 649/888/69 658/900/69 +f 657/899/68 656/898/68 652/892/68 +f 658/900/69 648/887/69 654/895/69 +f 291/436/69 662/904/69 661/903/69 +f 580/787/68 588/807/68 601/809/68 +f 591/798/69 590/797/69 662/904/69 +f 570/905/66 598/805/66 586/793/66 +f 663/907/67 597/804/67 591/798/67 +f 480/655/68 479/654/68 664/908/68 +f 283/427/69 468/639/69 595/802/69 +f 508/909/66 592/799/66 593/800/66 +f 421/587/74 481/656/74 665/911/74 +f 583/906/66 586/793/66 588/795/66 +f 526/711/67 466/637/67 468/639/67 +f 578/910/66 593/800/66 463/634/66 +f 579/894/69 666/1300/69 463/914/69 +f 598/915/68 570/1301/68 572/896/68 +f 465/916/69 659/901/69 654/895/69 +f 655/897/68 657/899/68 667/917/68 +f 635/919/67 640/1302/67 633/920/67 +f 634/922/70 646/925/70 669/923/70 +f 646/925/70 652/935/70 649/926/70 +f 635/927/74 641/931/74 670/928/74 +f 651/930/74 670/928/74 641/931/74 +f 651/930/66 648/932/66 658/933/66 +f 658/933/86 649/926/86 652/935/86 +f 632/936/67 899/1303/67 671/937/67 +f 672/939/67 899/1303/67 632/936/67 +f 673/940/69 564/763/69 566/765/69 +f 675/942/68 687/954/68 676/943/68 +f 678/945/69 702/974/69 679/946/69 +f 608/818/68 675/942/68 677/944/68 +f 681/948/68 833/1187/68 676/943/68 +f 482/658/67 472/1286/67 683/950/67 +f 684/951/68 682/949/68 685/952/68 +f 682/949/68 676/943/68 687/954/68 +f 688/955/69 678/945/69 680/947/69 +f 630/938/67 671/937/67 690/957/67 +f 691/958/69 695/962/69 692/959/69 +f 694/961/69 696/963/69 692/959/69 +f 689/956/69 680/947/69 696/963/69 +f 697/964/68 700/967/68 698/965/68 +f 697/964/68 684/951/68 686/953/68 +f 639/921/67 633/920/67 634/922/67 +f 614/873/69 639/872/69 643/879/69 +f 621/860/68 633/859/68 640/874/68 +f 609/819/68 607/817/68 620/838/68 +f 623/970/67 620/834/67 621/835/67 +f 604/814/69 613/827/69 615/971/69 +f 636/972/67 614/825/67 615/826/67 +f 678/945/69 566/765/69 702/974/69 +f 566/765/69 565/764/69 702/974/69 +f 616/828/69 564/763/69 673/940/69 +f 703/975/68 838/1192/68 704/976/68 +f 508/689/69 284/428/69 595/802/69 +f 494/671/68 601/809/68 597/804/68 +f 601/809/68 600/808/68 708/981/68 +f 592/980/69 595/802/69 594/801/69 +f 546/734/74 723/1304/74 516/697/74 +f 523/707/69 522/706/69 547/735/69 +f 520/984/74 710/985/74 487/663/74 +f 505/685/70 345/495/70 344/494/70 +f 315/460/70 318/463/70 496/674/70 +f 396/672/68 494/671/68 663/907/68 +f 519/703/68 485/661/68 487/663/68 +f 339/555/74 282/554/74 711/986/74 +f 396/552/74 272/416/74 712/987/74 +f 502/680/68 501/679/68 274/418/68 +f 507/687/69 319/464/69 339/487/69 +f 581/788/69 318/463/69 319/464/69 +f 711/988/69 282/426/69 284/428/69 +f 712/987/68 272/416/68 274/418/68 +f 477/989/67 713/992/67 596/803/67 +f 665/991/67 714/994/67 713/992/67 +f 481/993/67 716/1003/67 714/994/67 +f 514/995/68 715/1012/68 543/812/68 +f 511/692/69 513/694/69 529/997/69 +f 715/999/67 514/1305/67 516/1000/67 +f 513/1001/67 499/677/67 498/676/67 +f 661/903/67 662/904/67 716/1003/67 +f 590/797/67 724/1015/67 717/1004/67 +f 719/1006/67 721/1008/67 479/654/67 +f 720/1007/67 722/1009/67 721/1008/67 +f 718/1005/67 717/1004/67 722/1009/67 +f 716/1003/67 718/1005/67 720/1007/67 +f 714/994/67 720/1007/67 719/1006/67 +f 713/992/67 719/1006/67 527/712/67 +f 662/904/67 590/797/67 718/1005/67 +f 717/1004/67 724/1015/67 499/677/67 +f 479/654/67 721/1008/67 715/999/67 +f 721/1008/67 722/1009/67 512/1010/67 +f 722/1009/67 717/1004/67 513/1001/67 +f 600/808/68 485/661/68 519/703/68 +f 709/982/69 594/801/69 523/707/69 +f 545/733/68 664/908/68 516/1000/68 +f 715/1012/74 512/693/74 602/810/74 +f 480/655/67 545/733/67 521/705/67 +f 465/636/66 464/635/66 525/710/66 +f 599/806/66 518/702/66 528/714/66 +f 709/1013/66 524/708/66 525/710/66 +f 467/638/69 521/705/69 523/707/69 +f 708/981/67 519/703/67 497/675/67 +f 667/1014/66 511/700/66 518/702/66 +f 497/675/69 499/677/69 724/1015/69 +f 587/1016/68 528/1287/68 485/661/68 +f 426/593/74 394/549/74 536/1017/74 +f 392/547/74 422/588/74 429/1019/74 +f 423/590/74 426/593/74 725/1018/74 +f 424/591/74 423/590/74 726/1021/74 +f 422/588/74 424/591/74 727/1022/74 +f 394/549/74 259/403/74 534/1023/74 +f 393/548/74 392/547/74 431/1020/74 +f 312/457/70 365/516/70 366/517/70 +f 276/420/68 733/1029/68 325/471/68 +f 316/461/69 732/1028/69 730/1026/69 +f 326/472/70 325/471/70 343/493/70 +f 362/513/69 365/516/69 732/1028/69 +f 393/548/68 728/1024/68 733/1029/68 +f 259/403/74 258/402/74 730/1030/74 +f 382/537/74 762/1083/74 432/600/74 +f 431/599/68 430/598/68 736/1034/68 +f 734/1036/74 767/1082/74 738/1037/74 +f 333/1038/74 250/393/74 738/1037/74 +f 739/1040/74 532/719/74 533/720/74 +f 327/473/70 309/454/70 740/1041/70 +f 308/453/68 743/1045/68 280/424/68 +f 741/1042/69 311/456/69 341/491/69 +f 367/518/69 309/454/69 311/456/69 +f 742/1044/70 769/1086/70 342/492/70 +f 743/1045/68 383/538/68 739/1040/68 +f 535/722/68 784/1117/68 744/1046/68 +f 736/1034/68 782/1114/68 746/1048/68 +f 748/1050/69 755/1057/69 749/1051/69 +f 747/1049/67 746/1048/67 751/1053/67 +f 748/1050/66 750/1052/66 753/1055/66 +f 754/1056/66 771/1088/66 749/1051/66 +f 756/1058/82 735/1079/82 388/1059/82 +f 757/1061/82 756/1058/82 552/1060/82 +f 758/1063/82 757/1061/82 434/1062/82 +f 759/1065/82 758/1063/82 433/1064/82 +f 760/1067/67 768/1116/67 427/595/67 +f 761/1069/68 752/1306/68 759/1070/68 +f 391/1072/67 747/1049/67 752/1054/67 +f 752/1075/83 763/1076/83 758/1063/83 +f 763/1076/83 764/1077/83 757/1061/83 +f 764/1077/83 765/1078/83 756/1058/83 +f 765/1078/83 768/1307/83 735/1079/83 +f 279/423/68 278/422/68 383/538/68 +f 766/1080/69 367/518/69 741/1042/69 +f 313/458/69 741/1042/69 387/1043/69 +f 307/452/68 279/423/68 743/1045/68 +f 760/1081/74 262/406/74 767/1082/74 +f 391/546/74 761/1308/74 762/1083/74 +f 760/1084/69 734/1031/69 735/1033/69 +f 341/1039/74 738/1037/74 767/1082/74 +f 383/538/74 382/537/74 532/719/74 +f 309/454/70 367/518/70 369/520/70 +f 769/1086/70 306/451/70 308/453/70 +f 770/1087/66 780/1309/66 771/1088/66 +f 755/1057/69 748/1050/69 429/597/69 +f 755/1057/66 772/1089/66 773/1090/66 +f 763/1091/67 779/1102/67 774/1092/67 +f 737/1035/68 736/1034/68 747/1049/68 +f 731/1027/70 343/493/70 307/452/70 +f 766/1080/70 312/457/70 729/1025/70 +f 534/721/69 260/594/69 428/596/69 +f 728/1024/74 431/1020/74 737/1096/74 +f 733/1029/68 277/421/68 343/493/68 +f 732/1028/69 314/459/69 340/490/69 +f 365/516/69 312/457/69 314/459/69 +f 733/1029/68 728/1024/68 390/545/68 +f 534/1023/74 730/1030/74 340/1097/74 +f 744/1098/74 785/1110/74 777/1099/74 +f 749/1101/74 771/1103/74 779/1102/74 +f 771/1103/74 780/1104/74 774/1092/74 +f 780/1104/74 783/1107/74 781/1105/74 +f 782/1106/74 749/1101/74 751/1053/74 +f 783/1107/74 744/1098/74 778/1100/74 +f 753/1108/74 750/1310/74 749/1101/74 +f 784/1109/74 787/1311/74 785/1110/74 +f 752/1054/67 751/1053/67 779/1102/67 +f 428/596/69 427/595/69 777/1099/69 +f 745/1047/66 744/1046/66 783/1112/66 +f 430/598/68 753/1055/68 782/1114/68 +f 765/1115/67 781/1105/67 778/1100/67 +f 776/1095/66 787/1118/66 784/1117/66 +f 776/1095/69 428/596/69 785/1111/69 +f 768/1116/67 778/1100/67 777/1099/67 +f 764/1093/67 774/1092/67 781/1105/67 +f 786/1113/66 783/1112/66 780/1119/66 +f 725/1018/74 536/1017/74 788/1121/74 +f 726/1021/74 725/1018/74 789/1122/74 +f 727/1022/74 726/1021/74 790/1123/74 +f 429/1019/74 727/1022/74 773/1124/74 +f 770/1120/66 790/1312/66 789/1126/66 +f 745/1047/68 788/1128/68 536/723/68 +f 754/1056/66 773/1090/66 790/1127/66 +f 786/1113/66 789/1126/66 788/1128/66 +f 381/647/66 380/1313/66 375/1129/66 +f 264/1131/66 295/440/66 356/507/66 +f 791/1133/74 554/751/74 556/753/74 +f 792/1134/74 791/1133/74 558/755/74 +f 793/1135/74 792/1134/74 559/756/74 +f 794/1136/69 561/758/69 555/759/69 +f 793/1138/68 560/1293/68 453/760/68 +f 458/629/67 805/1152/67 797/1140/67 +f 798/1141/70 811/1157/70 799/1142/70 +f 553/750/67 802/1146/67 801/1144/67 +f 561/1145/67 809/1154/67 802/1146/67 +f 803/1147/70 807/1151/70 804/1148/70 +f 806/1150/70 824/1172/70 807/1151/70 +f 805/1152/67 817/1314/67 808/1153/67 +f 809/1154/67 815/1162/67 806/1155/67 +f 801/1144/67 803/1158/67 805/1152/67 +f 810/1156/70 900/1315/70 811/1157/70 +f 802/1146/67 806/1155/67 803/1158/67 +f 812/1159/67 901/1316/67 813/1160/67 +f 815/1162/67 901/1316/67 812/1159/67 +f 816/1163/70 808/1317/70 817/1164/70 +f 819/1166/84 822/1318/84 820/1167/84 +f 822/1169/67 819/1319/67 814/1170/67 +f 818/1165/70 826/1320/70 823/1171/70 +f 824/1172/70 810/1156/70 798/1141/70 +f 807/1151/70 798/1141/70 800/1143/70 +f 820/1167/84 827/1175/84 825/1173/84 +f 826/1174/67 825/1321/67 827/1175/67 +f 465/1176/74 603/1183/74 828/1177/74 +f 659/1178/67 828/1177/67 829/1179/67 +f 653/1180/85 829/1179/85 830/1181/85 +f 650/889/74 830/1181/74 642/878/74 +f 830/1181/74 668/918/74 645/881/74 +f 668/918/85 830/1181/85 829/1179/85 +f 828/1177/67 657/1184/67 660/1182/67 +f 603/1183/74 667/1322/74 657/1184/74 +f 831/1185/68 681/948/68 682/949/68 +f 680/947/69 679/946/69 832/1186/69 +f 683/1323/68 472/643/68 833/1187/68 +f 472/643/68 677/944/68 833/1187/68 +f 834/1188/68 831/1185/68 684/951/68 +f 696/963/69 832/1186/69 835/1189/69 +f 693/960/69 692/959/69 835/1189/69 +f 707/979/69 706/978/69 836/1190/69 +f 834/1188/68 697/964/68 699/966/68 +f 674/941/69 566/765/69 678/945/69 +f 839/1193/69 842/1196/69 840/1194/69 +f 842/1196/67 844/1199/67 843/1197/67 +f 844/1199/68 846/1202/68 845/1200/68 +f 846/1202/66 839/1193/66 841/1203/66 +f 842/1196/70 839/1193/70 846/1202/70 +f 847/1205/67 850/1208/67 848/1206/67 +f 850/1208/68 853/1227/68 851/1209/68 +f 848/1210/74 851/1219/74 852/1211/74 +f 847/1213/70 857/1221/70 853/1214/70 +f 854/1216/66 902/1324/66 855/1217/66 +f 851/1219/74 856/1228/74 855/1220/74 +f 857/1221/70 902/1325/70 854/1222/70 +f 854/1222/70 861/1226/70 858/1223/70 +f 858/1223/68 861/1226/68 859/1224/68 +f 856/1218/66 859/1224/66 861/1226/66 +f 853/1227/67 858/1223/67 860/1225/67 +f 851/1219/74 860/1225/74 859/1224/74 +s 1 +f 863/1326/70 903/1327/73 904/1328/70 +f 862/1329/73 905/1330/68 903/1327/73 +f 102/1331/68 906/1332/87 905/1330/68 +f 101/1333/87 907/1334/74 906/1332/87 +f 866/1335/74 908/1336/88 907/1337/74 +f 865/1338/88 909/1339/69 908/1336/88 +f 103/1340/69 910/1341/72 909/1339/69 +f 864/1342/72 904/1328/70 910/1341/72 +f 906/1343/67 908/1344/67 910/1345/67 +f 868/1346/89 109/1347/90 877/1348/89 +f 867/1349/90 878/1350/91 109/1347/90 +f 106/1351/91 879/1352/92 878/1350/91 +f 875/1353/92 880/1354/87 879/1352/92 +f 880/1354/87 873/1355/93 881/1356/93 +f 873/1355/93 882/1357/94 881/1356/93 +f 105/1358/94 107/1359/88 882/1357/94 +f 872/1360/88 883/1361/95 107/1359/88 +f 871/1362/95 108/1363/96 883/1361/95 +f 870/1364/96 884/1365/97 108/1363/96 +f 884/1365/97 869/1366/98 876/1367/98 +f 110/1368/67 911/1369/85 912/1370/67 +f 886/1371/85 913/1372/74 911/1369/85 +f 885/1373/74 914/1374/99 913/1375/74 +f 889/1376/99 915/1377/66 914/1374/99 +f 112/1378/66 916/1379/78 915/1377/66 +f 888/1380/78 917/1381/70 916/1379/78 +f 111/1382/70 918/1383/76 917/1381/70 +f 887/1384/76 912/1370/67 918/1383/76 +f 919/1385/85 115/1386/67 920/1387/67 +f 921/1388/74 890/1389/85 919/1385/85 +f 922/1390/99 891/1391/74 921/1392/74 +f 923/1393/66 892/1394/99 922/1390/99 +f 924/1395/78 113/1396/66 923/1393/66 +f 925/1397/70 893/1398/78 924/1395/78 +f 926/1399/76 114/1400/70 925/1397/70 +f 920/1387/67 894/1401/76 926/1399/76 +f 927/1402/68 928/1403/68 929/1404/68 +f 133/1405/68 930/1406/68 129/1407/68 +f 931/1408/68 932/1409/68 930/1406/68 +f 933/1410/68 929/1404/68 934/1411/68 +f 935/1412/68 934/1411/68 932/1409/68 +f 936/1413/68 937/1414/100 938/1415/100 +f 939/1416/68 938/1415/100 940/1417/100 +f 941/1418/68 939/1416/68 942/1419/68 +f 943/1420/68 936/1413/68 939/1416/68 +f 944/1421/68 942/1419/68 945/1422/68 +f 127/1423/68 945/1422/68 128/1424/68 +f 946/1425/68 947/1426/68 936/1413/68 +f 948/1427/101 949/1428/102 950/1429/102 +f 951/1430/103 952/1431/66 953/1432/66 +f 954/1433/70 955/1434/104 956/1435/105 +f 957/1436/106 958/1437/107 959/1438/108 +f 960/1439/109 961/1440/110 962/1441/111 +f 963/1442/66 964/1443/66 965/1444/66 +f 966/1445/112 948/1446/107 967/1447/108 +f 118/206/113 968/1448/113 969/1449/113 +f 970/1450/105 931/1451/70 971/1452/70 +f 972/1453/106 948/1446/107 973/1454/114 +f 135/226/70 974/1455/70 954/1433/70 +f 975/1456/115 976/1457/74 977/1458/74 +f 978/1459/115 979/1460/74 976/1457/74 +f 980/1461/115 981/1462/74 979/1460/74 +f 982/1463/108 966/1445/112 967/1447/108 +f 983/1464/108 984/1465/112 982/1463/108 +f 985/1466/108 986/1467/112 983/1464/108 +f 980/1461/115 987/1468/116 988/1469/116 +f 957/1436/106 955/1470/104 989/1471/114 +f 977/1458/74 990/1472/117 991/1473/117 +f 976/1457/74 992/1474/117 990/1472/117 +f 979/1460/74 993/1475/117 992/1474/117 +f 978/1459/115 994/1476/116 987/1468/116 +f 995/1477/116 996/1478/115 997/1479/115 +f 969/1449/113 998/1480/118 999/1481/118 +f 1000/1482/119 1001/1483/112 961/1484/119 +f 971/1452/70 133/224/70 895/1263/70 +f 991/1473/117 1002/1485/74 977/1458/74 +f 1003/1486/85 1004/1487/118 1005/1488/118 +f 1006/1489/112 1007/1490/119 1008/1491/112 +f 1009/1492/85 1010/1493/120 991/1473/117 +f 1011/1494/115 1012/1495/74 981/1462/74 +f 959/1438/108 1008/1491/112 985/1466/108 +f 1008/1491/112 1013/1496/119 986/1467/112 +f 993/1475/117 1012/1495/74 1014/1497/117 +f 997/1479/115 1015/1498/116 995/1477/116 +f 1016/1499/103 1017/1500/121 995/1501/121 +f 986/1467/112 1018/1502/119 984/1465/112 +f 959/1438/108 1001/1483/112 1006/1489/112 +f 984/1465/112 1019/1503/119 966/1445/112 +f 1011/1494/115 988/1469/116 1015/1498/116 +f 966/1445/112 1020/1504/119 1021/1505/112 +f 953/1432/66 1022/1506/66 1023/1507/66 +f 1024/1508/66 1025/1509/66 1026/1510/66 +f 1003/1486/85 1027/1511/122 1028/1512/123 +f 951/1430/103 1029/1513/121 1030/1514/124 +f 960/1439/109 1031/1515/66 963/1442/66 +f 967/1447/108 1032/1516/106 982/1463/108 +f 982/1463/108 1033/1517/106 983/1464/108 +f 1033/1517/106 985/1466/108 983/1464/108 +f 1034/1518/106 959/1438/108 985/1466/108 +f 1019/1519/110 1035/1520/109 1036/1521/109 +f 1018/1522/110 1037/1523/109 1035/1520/109 +f 1037/1523/109 1007/1524/110 1038/1525/109 +f 1023/1507/66 1039/1526/66 953/1432/66 +f 1040/1527/66 1041/1528/66 1039/1526/66 +f 1042/1529/66 1043/1530/66 1041/1528/66 +f 953/1432/66 1044/1531/103 951/1430/103 +f 1039/1526/66 1045/1532/103 1044/1531/103 +f 1041/1528/66 1046/1533/103 1045/1532/103 +f 1047/1534/66 1048/1535/66 1049/1536/66 +f 1048/1535/66 1050/1537/66 1049/1536/66 +f 1051/1538/66 1052/1539/66 1050/1537/66 +f 1047/1534/66 1040/1527/66 1023/1507/66 +f 1049/1536/66 1042/1529/66 1040/1527/66 +f 1050/1537/66 1053/1540/66 1042/1529/66 +f 1038/1525/109 1000/1541/110 960/1439/109 +f 1053/1540/66 1026/1510/66 1043/1530/66 +f 1043/1530/66 1016/1499/103 1046/1533/103 +f 1054/1542/66 965/1444/66 1052/1539/66 +f 1052/1539/66 1024/1508/66 1053/1540/66 +f 1038/1525/109 963/1442/66 1054/1542/66 +f 1037/1523/109 1054/1542/66 1051/1538/66 +f 1035/1520/109 1051/1538/66 1048/1535/66 +f 1036/1521/109 1048/1535/66 1055/1543/66 +f 1046/1533/103 995/1501/121 1015/1544/121 +f 1045/1532/103 1015/1544/121 988/1545/121 +f 987/1546/121 1045/1532/103 988/1545/121 +f 994/1547/121 1044/1531/103 987/1546/121 +f 999/1481/118 1056/1548/123 1009/1492/85 +f 1057/1549/113 119/207/113 121/209/113 +f 1055/1543/66 1058/1550/66 1059/1551/66 +f 1023/1507/66 1058/1550/66 1047/1534/66 +f 997/1479/115 1060/1552/74 1012/1495/74 +f 990/1472/117 1061/1553/85 1062/1554/85 +f 993/1475/117 1061/1553/85 992/1474/117 +f 1014/1497/117 1063/1555/85 993/1475/117 +f 991/1473/117 1062/1554/85 1009/1492/85 +f 1062/1554/85 999/1481/118 1009/1492/85 +f 1003/1486/85 1064/1556/118 1063/1555/85 +f 1061/1553/85 1065/1557/118 1062/1554/85 +f 1063/1555/85 1066/1558/118 1061/1553/85 +f 1064/1556/118 1067/1559/113 1066/1558/118 +f 1065/1557/118 969/1449/113 999/1481/118 +f 1005/1488/118 1068/1560/113 1064/1556/118 +f 1066/1558/118 1069/1561/113 1065/1557/118 +f 1068/1560/113 122/210/113 1067/1559/113 +f 1069/1561/113 118/206/113 969/1449/113 +f 1057/1549/113 124/212/113 1068/1560/113 +f 1067/1559/113 116/204/113 1069/1561/113 +f 972/1453/106 935/1562/104 970/1563/105 +f 1036/1521/109 1020/1564/110 1019/1519/110 +f 977/1458/74 1070/1565/115 975/1456/115 +f 1055/1543/66 1071/1566/111 1036/1521/109 +f 975/1456/115 1029/1567/116 994/1476/116 +f 1026/1510/66 1072/1568/124 1016/1499/103 +f 1005/1488/118 1073/1569/113 1057/1549/113 +f 1014/1497/117 1060/1552/74 1027/1511/122 +f 965/1444/66 1074/1570/66 1024/1508/66 +f 1075/1571/69 119/1572/69 1076/1573/69 +f 1077/1574/69 1078/1575/69 1079/1576/69 +f 1080/1577/69 1081/1578/69 1082/1579/69 +f 1083/1580/69 1076/1573/69 1081/1578/69 +f 1001/1581/125 1084/1582/126 1085/1583/126 +f 1086/1584/69 1082/1579/69 1078/1575/69 +f 1078/1575/69 1087/1585/127 1088/1586/127 +f 1079/1576/69 1088/1586/127 1089/1587/127 +f 1090/1588/69 1091/1589/69 1092/1590/69 +f 955/1591/69 1093/1592/69 1094/1593/69 +f 1095/1594/69 1094/1593/69 1091/1589/69 +f 1096/1595/69 1092/1590/69 1097/1596/69 +f 974/1597/69 134/1598/69 1093/1592/69 +f 1093/1592/69 130/1599/69 1075/1571/69 +f 1097/1596/69 1086/1584/69 1077/1574/69 +f 1091/1589/69 1083/1580/69 1080/1577/69 +f 1094/1593/69 1075/1571/69 1083/1580/69 +f 1092/1590/69 1080/1577/69 1086/1584/69 +f 996/1600/128 1072/1601/129 1089/1587/127 +f 1079/1576/69 1074/1602/69 1077/1574/69 +f 1096/1595/69 962/1603/130 1085/1583/126 +f 1001/1581/125 962/1603/130 961/1604/131 +f 1077/1574/69 964/1605/69 1097/1596/69 +f 1097/1596/69 1031/1606/69 1096/1595/69 +f 1090/1588/69 989/1607/132 1095/1594/69 +f 1085/1583/126 1090/1588/69 1096/1595/69 +f 955/1591/69 1095/1594/69 989/1607/132 +f 1084/1582/126 958/1608/133 989/1607/132 +f 1089/1587/127 1025/1609/69 1079/1576/69 +f 1089/1587/127 1060/1610/134 996/1600/128 +f 1088/1586/127 1027/1611/134 1060/1610/134 +f 1027/1611/134 1087/1585/127 1028/1612/135 +f 119/1572/69 1073/1613/69 1076/1573/69 +f 1073/1613/69 1081/1578/69 1076/1573/69 +f 1004/1614/69 1082/1579/69 1081/1578/69 +f 1087/1585/127 1082/1579/69 1028/1612/135 +f 929/1404/68 1098/1615/68 946/1425/68 +f 129/1407/68 944/1421/68 127/1423/68 +f 930/1406/68 941/1418/68 944/1421/68 +f 934/1411/68 946/1425/68 943/1420/68 +f 932/1409/68 943/1420/68 941/1418/68 +f 949/1428/102 1059/1616/68 1099/1617/68 +f 1099/1617/68 1058/1618/68 928/1403/68 +f 1021/1619/136 1071/1620/137 949/1428/102 +f 947/1426/68 1022/1621/68 952/1622/68 +f 937/1414/100 952/1622/68 1030/1623/138 +f 1098/1615/68 1058/1618/68 1022/1621/68 +f 950/1429/102 973/1624/139 948/1427/101 +f 950/1429/102 933/1410/68 973/1624/139 +f 950/1429/102 1099/1617/68 927/1402/68 +f 933/1410/68 935/1412/68 973/1624/139 +f 1070/1625/140 1030/1623/138 1029/1626/141 +f 938/1415/100 1070/1625/140 1002/1627/142 +f 940/1417/100 1002/1627/142 1010/1628/142 +f 945/1422/68 968/1629/68 128/1424/68 +f 942/1419/68 968/1629/68 945/1422/68 +f 1010/1628/142 1056/1630/143 940/1417/100 +f 1056/1630/143 942/1419/68 939/1416/68 +f 940/1417/100 1056/1630/143 939/1416/68 +f 1034/1518/106 956/1631/105 957/1436/106 +f 1032/1516/106 1100/1632/144 1033/1517/106 +f 1033/1517/106 1101/1633/144 1034/1518/106 +f 1032/1516/106 970/1563/105 1102/1634/144 +f 453/760/68 1103/1635/68 796/1139/68 +f 1104/1636/145 1105/1637/66 1106/1638/145 +f 1106/1638/145 1107/1639/66 1108/1640/145 +f 701/1641/146 1109/1642/147 622/1643/146 +f 622/1643/146 1110/1644/147 611/1645/146 +f 1105/1637/66 1111/1646/148 1107/1639/66 +f 1112/1647/66 1113/1648/148 1105/1637/66 +f 1111/1646/148 1114/1649/149 1115/1650/149 +f 1113/1648/148 1116/1651/149 1114/1649/149 +f 672/1652/150 1117/1653/85 899/1654/150 +f 1118/1655/151 1119/1656/152 1120/1657/151 +f 1121/1658/67 1122/1659/153 1123/1660/67 +f 1124/1661/153 1120/1657/151 1122/1659/153 +f 1125/1662/153 1118/1655/151 1124/1661/153 +f 1126/1663/152 1127/1664/85 1119/1656/152 +f 1128/1665/152 1117/1653/85 1126/1663/152 +f 899/1654/150 1129/1666/85 671/1667/150 +f 1130/1668/154 1131/1669/155 1132/1670/155 +f 1133/1671/156 1134/1672/154 1130/1668/154 +f 1114/1649/149 1135/1673/156 1133/1671/156 +f 1136/1674/154 1132/1670/155 1137/1675/155 +f 1138/1676/156 1130/1668/154 1136/1674/154 +f 1115/1650/149 1133/1671/156 1138/1676/156 +f 1106/1638/145 1110/1644/147 1109/1642/147 +f 1109/1642/147 1104/1636/145 1106/1638/145 +f 1139/1677/67 1140/1678/157 1141/1679/157 +f 1121/1658/67 1142/1680/157 1140/1678/157 +f 1143/1681/151 1126/1663/152 1118/1655/151 +f 1121/1658/67 1125/1662/153 1124/1661/153 +f 1132/1670/155 1144/1682/158 1137/1675/155 +f 1131/1669/155 1145/1683/158 1132/1670/155 +f 1145/1683/158 1146/1684/159 1144/1682/158 +f 1147/1685/158 1148/1686/159 1145/1683/158 +f 1140/1678/157 1149/1687/159 1141/1679/157 +f 1140/1678/157 1146/1684/159 1148/1686/159 +f 809/1688/69 1150/1689/69 815/1690/69 +f 456/1691/68 1151/1692/68 1103/1635/68 +f 794/1136/69 809/1688/69 561/758/69 +f 806/1150/68 1152/1693/160 824/1172/68 +f 1153/1694/68 1154/1695/68 1155/1696/68 +f 1151/1692/68 823/1697/161 1153/1694/68 +f 1156/1698/69 1157/1699/69 1158/1700/69 +f 815/1690/69 1159/1701/162 901/1702/162 +f 1158/1700/69 1160/1703/162 1161/1704/162 +f 800/1143/69 1162/1705/163 826/1706/164 +f 805/1149/69 818/1707/69 817/1708/69 +f 797/1709/68 816/1710/68 1151/1692/68 +f 824/1172/68 1163/1711/160 810/1156/68 +f 1163/1711/160 1164/1712/165 1165/1713/165 +f 901/1702/162 1166/1714/166 813/1715/166 +f 827/1716/167 1167/1717/166 1168/1718/168 +f 812/1719/160 1164/1712/165 1152/1693/160 +f 820/1720/70 1169/1721/166 827/1716/167 +f 825/1722/169 1165/1713/165 1164/1712/165 +f 822/1723/70 1166/1714/166 820/1720/70 +f 819/1724/74 1164/1712/165 814/1725/165 +f 810/1156/68 1170/1726/160 900/1315/68 +f 804/1148/69 826/1706/164 818/1707/69 +f 1150/1689/69 1161/1704/162 1159/1701/162 +f 1171/1727/69 1158/1700/69 1150/1689/69 +f 1153/1694/68 1172/1728/170 1173/1729/68 +f 1103/1635/68 1153/1694/68 1155/1696/68 +f 1174/1730/171 826/1731/164 1162/1732/163 +f 827/1716/167 1172/1728/170 823/1697/161 +f 611/1645/172 617/1733/173 420/1734/174 +f 606/1735/175 701/1641/176 562/1736/177 +f 671/1667/178 702/1737/179 690/1738/180 +f 833/1739/181 672/1652/182 683/1740/183 +f 1112/1647/184 688/1741/185 1175/1742/186 +f 675/1743/187 1111/1646/188 687/1744/189 +f 608/1745/190 1107/1639/187 675/1743/187 +f 617/1733/191 1110/1644/192 610/1746/193 +f 1104/1636/194 674/1747/184 1112/1647/184 +f 1176/1748/195 606/1735/175 605/1749/196 +f 1111/1646/188 685/1750/197 687/1744/189 +f 1115/1650/198 686/1751/199 685/1750/197 +f 1138/1676/200 700/1752/201 686/1751/199 +f 1136/1674/202 698/1753/203 700/1752/201 +f 689/1754/204 1175/1742/186 688/1741/185 +f 694/1755/205 1116/1651/206 689/1754/204 +f 695/1756/207 1135/1673/208 694/1755/205 +f 691/1757/209 1134/1672/210 695/1756/207 +f 1129/1666/211 702/1737/179 671/1667/178 +f 1128/1665/212 679/1758/213 1129/1666/211 +f 1143/1681/214 832/1759/215 1128/1665/212 +f 1143/1681/214 706/1760/216 835/1761/217 +f 833/1739/181 1127/1664/218 672/1652/182 +f 681/1762/219 1119/1656/220 1127/1664/218 +f 831/1763/221 1120/1657/222 1119/1656/220 +f 838/1764/223 1120/1657/222 834/1765/224 +f 610/1746/193 1108/1640/225 608/1745/190 +f 1104/1636/194 605/1749/196 673/1766/226 +f 836/1767/227 1125/1662/228 1139/1677/229 +f 703/1768/230 1122/1659/231 838/1764/223 +f 698/1753/203 1144/1682/232 699/1769/233 +f 691/1757/209 1147/1685/234 1131/1669/235 +f 693/1770/236 1149/1687/237 1147/1685/234 +f 699/1769/233 1146/1684/238 704/1771/239 +f 837/1772/240 1149/1687/237 707/1773/241 +f 1146/1684/238 705/1774/242 704/1771/239 +f 705/1775/242 1123/1660/243 703/1776/230 +f 1139/1677/229 837/1777/240 836/1778/227 +f 1167/1717/166 1161/1704/162 1160/1703/162 +f 1166/1714/166 1161/1704/162 1169/1721/166 +f 1177/1779/244 1178/1780/73 1179/1781/244 +f 1180/1782/73 1181/1783/91 1178/1780/73 +f 1182/1784/91 1183/1785/92 1181/1783/91 +f 1184/1786/92 1185/1787/87 1183/1785/92 +f 1186/1788/87 1187/1789/93 1185/1787/87 +f 1187/1790/93 1188/1791/94 1189/1792/94 +f 1188/1791/94 1190/1793/88 1189/1792/94 +f 1191/1794/88 1192/1795/95 1190/1793/88 +f 1193/1796/95 1194/1797/96 1192/1795/95 +f 1195/1798/96 1196/1799/72 1194/1797/96 +f 1197/1800/72 1198/1801/245 1196/1799/72 +f 1199/1802/245 1179/1781/244 1198/1801/245 +f 1183/1785/246 1200/1803/247 1181/1783/247 +f 1201/1804/94 1202/1805/93 1203/1806/93 +f 1198/1801/248 1204/1807/249 1196/1799/249 +f 1181/1783/247 1205/1808/250 1178/1780/250 +f 1196/1799/249 1206/1809/251 1194/1797/251 +f 1194/1797/251 1207/1810/252 1192/1795/252 +f 1192/1795/252 1208/1811/253 1190/1793/253 +f 1190/1793/253 1201/1812/254 1189/1792/254 +f 1187/1790/255 1201/1813/254 1203/1814/255 +f 1187/1789/255 1209/1815/256 1185/1787/256 +f 1185/1787/256 1210/1816/246 1183/1785/246 +f 1179/1781/257 1211/1817/248 1198/1801/248 +f 1179/1781/257 1205/1818/250 1212/1819/257 +f 1210/1820/92 1213/1821/91 1200/1822/91 +f 1204/1823/72 1214/1824/96 1206/1825/96 +f 1208/1826/88 1215/1827/94 1201/1804/94 +f 1209/1828/87 1216/1829/92 1210/1820/92 +f 1211/1830/245 1217/1831/72 1204/1823/72 +f 1205/1832/73 1218/1833/244 1212/1834/244 +f 1207/1835/95 1219/1836/88 1208/1826/88 +f 1203/1837/93 1220/1838/87 1209/1828/87 +f 1212/1834/244 1221/1839/245 1211/1830/245 +f 1200/1822/91 1222/1840/73 1205/1832/73 +f 1206/1825/96 1223/1841/95 1207/1835/95 +f 1224/1842/67 1225/1843/258 1226/1844/67 +f 1227/1845/258 1228/1846/68 1225/1843/258 +f 1229/1847/68 1230/1848/259 1228/1846/68 +f 1231/1849/259 1232/1850/66 1230/1848/259 +f 1233/1851/66 1234/1852/260 1232/1850/66 +f 1235/1853/260 1236/1854/69 1234/1852/260 +f 1237/1855/69 1238/1856/261 1236/1854/69 +f 1239/1857/261 1226/1858/67 1238/1856/261 +f 1234/1859/74 1236/1860/74 1238/1861/74 +f 863/1326/70 862/1329/73 903/1327/73 +f 862/1329/73 102/1331/68 905/1330/68 +f 102/1331/68 101/1333/87 906/1332/87 +f 101/1333/87 866/1862/74 907/1334/74 +f 866/1335/74 865/1338/88 908/1336/88 +f 865/1338/88 103/1340/69 909/1339/69 +f 103/1340/69 864/1342/72 910/1341/72 +f 864/1342/72 863/1326/70 904/1328/70 +f 910/1345/67 904/1863/67 903/1864/67 +f 903/1864/67 905/1865/67 906/1343/67 +f 906/1343/67 907/1866/67 908/1344/67 +f 908/1344/67 909/1867/67 910/1345/67 +f 910/1345/67 903/1864/67 906/1343/67 +f 868/1346/89 867/1349/90 109/1347/90 +f 867/1349/90 106/1351/91 878/1350/91 +f 106/1351/91 875/1353/92 879/1352/92 +f 875/1353/92 874/1868/87 880/1354/87 +f 880/1354/87 874/1868/87 873/1355/93 +f 873/1355/93 105/1358/94 882/1357/94 +f 105/1358/94 872/1360/88 107/1359/88 +f 872/1360/88 871/1362/95 883/1361/95 +f 871/1362/95 870/1364/96 108/1363/96 +f 870/1364/96 104/1869/97 884/1365/97 +f 884/1365/97 104/1869/97 869/1366/98 +f 110/1368/67 886/1371/85 911/1369/85 +f 886/1371/85 885/1870/74 913/1372/74 +f 885/1373/74 889/1376/99 914/1374/99 +f 889/1376/99 112/1378/66 915/1377/66 +f 112/1378/66 888/1380/78 916/1379/78 +f 888/1380/78 111/1382/70 917/1381/70 +f 111/1382/70 887/1384/76 918/1383/76 +f 887/1384/76 110/1368/67 912/1370/67 +f 919/1385/85 890/1389/85 115/1386/67 +f 921/1388/74 891/1871/74 890/1389/85 +f 922/1390/99 892/1394/99 891/1391/74 +f 923/1393/66 113/1396/66 892/1394/99 +f 924/1395/78 893/1398/78 113/1396/66 +f 925/1397/70 114/1400/70 893/1398/78 +f 926/1399/76 894/1401/76 114/1400/70 +f 920/1387/67 115/1386/67 894/1401/76 +f 927/1402/68 1099/1617/68 928/1403/68 +f 133/1405/68 931/1408/68 930/1406/68 +f 931/1408/68 935/1412/68 932/1409/68 +f 933/1410/68 927/1402/68 929/1404/68 +f 935/1412/68 933/1410/68 934/1411/68 +f 936/1413/68 947/1426/68 937/1414/100 +f 939/1416/68 936/1413/68 938/1415/100 +f 941/1418/68 943/1420/68 939/1416/68 +f 943/1420/68 946/1425/68 936/1413/68 +f 944/1421/68 941/1418/68 942/1419/68 +f 127/1423/68 944/1421/68 945/1422/68 +f 946/1425/68 1098/1615/68 947/1426/68 +f 948/1427/101 1021/1619/136 949/1428/102 +f 951/1430/103 1030/1514/124 952/1431/66 +f 954/1433/70 974/1455/70 955/1434/104 +f 957/1436/106 989/1471/114 958/1437/107 +f 960/1439/109 1000/1541/110 961/1440/110 +f 963/1442/66 1031/1515/66 964/1443/66 +f 966/1445/112 1021/1505/112 948/1446/107 +f 118/206/113 128/216/113 968/1448/113 +f 970/1450/105 935/1872/104 931/1451/70 +f 972/1453/106 967/1447/108 948/1446/107 +f 135/226/70 896/1264/70 974/1455/70 +f 975/1456/115 978/1459/115 976/1457/74 +f 978/1459/115 980/1461/115 979/1460/74 +f 980/1461/115 1011/1494/115 981/1462/74 +f 982/1463/108 984/1465/112 966/1445/112 +f 983/1464/108 986/1467/112 984/1465/112 +f 985/1466/108 1008/1491/112 986/1467/112 +f 980/1461/115 978/1459/115 987/1468/116 +f 957/1436/106 956/1631/105 955/1470/104 +f 977/1458/74 976/1457/74 990/1472/117 +f 976/1457/74 979/1460/74 992/1474/117 +f 979/1460/74 981/1462/74 993/1475/117 +f 978/1459/115 975/1456/115 994/1476/116 +f 995/1477/116 1017/1873/116 996/1478/115 +f 969/1449/113 968/1448/113 998/1480/118 +f 1000/1482/119 1006/1489/112 1001/1483/112 +f 971/1452/70 931/1451/70 133/224/70 +f 991/1473/117 1010/1493/120 1002/1485/74 +f 1003/1486/85 1028/1512/123 1004/1487/118 +f 1006/1489/112 1000/1482/119 1007/1490/119 +f 1009/1492/85 1056/1548/123 1010/1493/120 +f 1011/1494/115 997/1479/115 1012/1495/74 +f 959/1438/108 1006/1489/112 1008/1491/112 +f 1008/1491/112 1007/1490/119 1013/1496/119 +f 993/1475/117 981/1462/74 1012/1495/74 +f 997/1479/115 1011/1494/115 1015/1498/116 +f 1016/1499/103 1072/1568/124 1017/1500/121 +f 986/1467/112 1013/1496/119 1018/1502/119 +f 959/1438/108 958/1437/107 1001/1483/112 +f 984/1465/112 1018/1502/119 1019/1503/119 +f 1011/1494/115 980/1461/115 988/1469/116 +f 966/1445/112 1019/1503/119 1020/1504/119 +f 953/1432/66 952/1431/66 1022/1506/66 +f 1024/1508/66 1074/1570/66 1025/1509/66 +f 1003/1486/85 1014/1497/117 1027/1511/122 +f 951/1430/103 994/1547/121 1029/1513/121 +f 960/1439/109 962/1441/111 1031/1515/66 +f 967/1447/108 972/1453/106 1032/1516/106 +f 982/1463/108 1032/1516/106 1033/1517/106 +f 1033/1517/106 1034/1518/106 985/1466/108 +f 1034/1518/106 957/1436/106 959/1438/108 +f 1019/1519/110 1018/1522/110 1035/1520/109 +f 1018/1522/110 1013/1874/110 1037/1523/109 +f 1037/1523/109 1013/1874/110 1007/1524/110 +f 1023/1507/66 1040/1527/66 1039/1526/66 +f 1040/1527/66 1042/1529/66 1041/1528/66 +f 1042/1529/66 1053/1540/66 1043/1530/66 +f 953/1432/66 1039/1526/66 1044/1531/103 +f 1039/1526/66 1041/1528/66 1045/1532/103 +f 1041/1528/66 1043/1530/66 1046/1533/103 +f 1047/1534/66 1055/1543/66 1048/1535/66 +f 1048/1535/66 1051/1538/66 1050/1537/66 +f 1051/1538/66 1054/1542/66 1052/1539/66 +f 1047/1534/66 1049/1536/66 1040/1527/66 +f 1049/1536/66 1050/1537/66 1042/1529/66 +f 1050/1537/66 1052/1539/66 1053/1540/66 +f 1038/1525/109 1007/1524/110 1000/1541/110 +f 1053/1540/66 1024/1508/66 1026/1510/66 +f 1043/1530/66 1026/1510/66 1016/1499/103 +f 1054/1542/66 963/1442/66 965/1444/66 +f 1052/1539/66 965/1444/66 1024/1508/66 +f 1038/1525/109 960/1439/109 963/1442/66 +f 1037/1523/109 1038/1525/109 1054/1542/66 +f 1035/1520/109 1037/1523/109 1051/1538/66 +f 1036/1521/109 1035/1520/109 1048/1535/66 +f 1046/1533/103 1016/1499/103 995/1501/121 +f 1045/1532/103 1046/1533/103 1015/1544/121 +f 987/1546/121 1044/1531/103 1045/1532/103 +f 994/1547/121 951/1430/103 1044/1531/103 +f 999/1481/118 998/1480/118 1056/1548/123 +f 1057/1549/113 1073/1569/113 119/207/113 +f 1055/1543/66 1047/1534/66 1058/1550/66 +f 1023/1507/66 1022/1506/66 1058/1550/66 +f 997/1479/115 996/1478/115 1060/1552/74 +f 990/1472/117 992/1474/117 1061/1553/85 +f 993/1475/117 1063/1555/85 1061/1553/85 +f 1014/1497/117 1003/1486/85 1063/1555/85 +f 991/1473/117 990/1472/117 1062/1554/85 +f 1062/1554/85 1065/1557/118 999/1481/118 +f 1003/1486/85 1005/1488/118 1064/1556/118 +f 1061/1553/85 1066/1558/118 1065/1557/118 +f 1063/1555/85 1064/1556/118 1066/1558/118 +f 1064/1556/118 1068/1560/113 1067/1559/113 +f 1065/1557/118 1069/1561/113 969/1449/113 +f 1005/1488/118 1057/1549/113 1068/1560/113 +f 1066/1558/118 1067/1559/113 1069/1561/113 +f 1068/1560/113 124/212/113 122/210/113 +f 1069/1561/113 116/204/113 118/206/113 +f 1057/1549/113 121/209/113 124/212/113 +f 1067/1559/113 122/210/113 116/204/113 +f 972/1453/106 973/1454/114 935/1562/104 +f 1036/1521/109 1071/1566/111 1020/1564/110 +f 977/1458/74 1002/1485/74 1070/1565/115 +f 1055/1543/66 1059/1551/66 1071/1566/111 +f 975/1456/115 1070/1565/115 1029/1567/116 +f 1026/1510/66 1025/1509/66 1072/1568/124 +f 1005/1488/118 1004/1487/118 1073/1569/113 +f 1014/1497/117 1012/1495/74 1060/1552/74 +f 965/1444/66 964/1443/66 1074/1570/66 +f 1075/1571/69 130/1599/69 119/1572/69 +f 1077/1574/69 1086/1584/69 1078/1575/69 +f 1080/1577/69 1083/1580/69 1081/1578/69 +f 1083/1580/69 1075/1571/69 1076/1573/69 +f 1001/1581/125 958/1608/133 1084/1582/126 +f 1086/1584/69 1080/1577/69 1082/1579/69 +f 1078/1575/69 1082/1579/69 1087/1585/127 +f 1079/1576/69 1078/1575/69 1088/1586/127 +f 1090/1588/69 1095/1594/69 1091/1589/69 +f 955/1591/69 974/1597/69 1093/1592/69 +f 1095/1594/69 955/1591/69 1094/1593/69 +f 1096/1595/69 1090/1588/69 1092/1590/69 +f 974/1597/69 896/1875/69 134/1598/69 +f 1093/1592/69 134/1598/69 130/1599/69 +f 1097/1596/69 1092/1590/69 1086/1584/69 +f 1091/1589/69 1094/1593/69 1083/1580/69 +f 1094/1593/69 1093/1592/69 1075/1571/69 +f 1092/1590/69 1091/1589/69 1080/1577/69 +f 996/1600/128 1017/1876/262 1072/1601/129 +f 1079/1576/69 1025/1609/69 1074/1602/69 +f 1096/1595/69 1031/1606/69 962/1603/130 +f 1001/1581/125 1085/1583/126 962/1603/130 +f 1077/1574/69 1074/1602/69 964/1605/69 +f 1097/1596/69 964/1605/69 1031/1606/69 +f 1090/1588/69 1084/1582/126 989/1607/132 +f 1085/1583/126 1084/1582/126 1090/1588/69 +f 1089/1587/127 1072/1601/129 1025/1609/69 +f 1089/1587/127 1088/1586/127 1060/1610/134 +f 1088/1586/127 1087/1585/127 1027/1611/134 +f 1073/1613/69 1004/1614/69 1081/1578/69 +f 1004/1614/69 1028/1612/135 1082/1579/69 +f 929/1404/68 928/1403/68 1098/1615/68 +f 129/1407/68 930/1406/68 944/1421/68 +f 930/1406/68 932/1409/68 941/1418/68 +f 934/1411/68 929/1404/68 946/1425/68 +f 932/1409/68 934/1411/68 943/1420/68 +f 949/1428/102 1071/1620/137 1059/1616/68 +f 1099/1617/68 1059/1616/68 1058/1618/68 +f 1021/1619/136 1020/1877/263 1071/1620/137 +f 947/1426/68 1098/1615/68 1022/1621/68 +f 937/1414/100 947/1426/68 952/1622/68 +f 1098/1615/68 928/1403/68 1058/1618/68 +f 950/1429/102 927/1402/68 933/1410/68 +f 950/1429/102 949/1428/102 1099/1617/68 +f 1070/1625/140 937/1414/100 1030/1623/138 +f 938/1415/100 937/1414/100 1070/1625/140 +f 940/1417/100 938/1415/100 1002/1627/142 +f 942/1419/68 998/1878/68 968/1629/68 +f 1056/1630/143 998/1878/68 942/1419/68 +f 1034/1518/106 1101/1633/144 956/1631/105 +f 1032/1516/106 1102/1634/144 1100/1632/144 +f 1033/1517/106 1100/1632/144 1101/1633/144 +f 1032/1516/106 972/1453/106 970/1563/105 +f 453/760/68 456/1691/68 1103/1635/68 +f 1104/1636/145 1112/1647/66 1105/1637/66 +f 1106/1638/145 1105/1637/66 1107/1639/66 +f 701/1641/146 1176/1748/147 1109/1642/147 +f 622/1643/146 1109/1642/147 1110/1644/147 +f 1105/1637/66 1113/1648/148 1111/1646/148 +f 1112/1647/66 1175/1742/148 1113/1648/148 +f 1111/1646/148 1113/1648/148 1114/1649/149 +f 1113/1648/148 1175/1742/148 1116/1651/149 +f 672/1652/150 1127/1664/85 1117/1653/85 +f 1118/1655/151 1126/1663/152 1119/1656/152 +f 1121/1658/67 1124/1661/153 1122/1659/153 +f 1124/1661/153 1118/1655/151 1120/1657/151 +f 1125/1662/153 1143/1681/151 1118/1655/151 +f 1126/1663/152 1117/1653/85 1127/1664/85 +f 1128/1665/152 1129/1666/85 1117/1653/85 +f 899/1654/150 1117/1653/85 1129/1666/85 +f 1130/1668/154 1134/1672/154 1131/1669/155 +f 1133/1671/156 1135/1673/156 1134/1672/154 +f 1114/1649/149 1116/1651/149 1135/1673/156 +f 1136/1674/154 1130/1668/154 1132/1670/155 +f 1138/1676/156 1133/1671/156 1130/1668/154 +f 1115/1650/149 1114/1649/149 1133/1671/156 +f 1106/1638/145 1108/1640/145 1110/1644/147 +f 1109/1642/147 1176/1748/147 1104/1636/145 +f 1139/1677/67 1121/1658/67 1140/1678/157 +f 1121/1658/67 1123/1660/67 1142/1680/157 +f 1143/1681/151 1128/1665/152 1126/1663/152 +f 1121/1658/67 1139/1677/67 1125/1662/153 +f 1132/1670/155 1145/1683/158 1144/1682/158 +f 1131/1669/155 1147/1685/158 1145/1683/158 +f 1145/1683/158 1148/1686/159 1146/1684/159 +f 1147/1685/158 1149/1687/159 1148/1686/159 +f 1140/1678/157 1148/1686/159 1149/1687/159 +f 1140/1678/157 1142/1680/157 1146/1684/159 +f 809/1688/69 1171/1727/69 1150/1689/69 +f 456/1691/68 797/1709/68 1151/1692/68 +f 794/1136/69 1171/1727/69 809/1688/69 +f 806/1150/68 812/1719/160 1152/1693/160 +f 1153/1694/68 1173/1729/68 1154/1695/68 +f 1151/1692/68 816/1710/68 823/1697/161 +f 1156/1698/69 1240/1879/69 1157/1699/69 +f 815/1690/69 1150/1689/69 1159/1701/162 +f 1158/1700/69 1157/1699/69 1160/1703/162 +f 800/1143/69 799/1142/69 1162/1705/163 +f 805/1149/69 804/1148/69 818/1707/69 +f 797/1709/68 808/1880/68 816/1710/68 +f 824/1172/68 1152/1693/160 1163/1711/160 +f 1165/1713/165 1170/1726/160 1163/1711/160 +f 1163/1711/160 1152/1693/160 1164/1712/165 +f 901/1702/162 1159/1701/162 1166/1714/166 +f 827/1716/167 1169/1721/166 1167/1717/166 +f 812/1719/160 814/1725/165 1164/1712/165 +f 820/1720/70 1166/1714/166 1169/1721/166 +f 1164/1712/165 821/1881/74 825/1722/169 +f 825/1722/169 1174/1730/171 1165/1713/165 +f 822/1723/70 813/1715/166 1166/1714/166 +f 819/1724/74 821/1881/74 1164/1712/165 +f 810/1156/68 1163/1711/160 1170/1726/160 +f 804/1148/69 800/1143/69 826/1706/164 +f 1150/1689/69 1158/1700/69 1161/1704/162 +f 1171/1727/69 1156/1698/69 1158/1700/69 +f 1153/1694/68 823/1697/161 1172/1728/170 +f 1103/1635/68 1151/1692/68 1153/1694/68 +f 1174/1730/171 825/1722/169 826/1731/164 +f 827/1716/167 1168/1718/168 1172/1728/170 +f 1112/1647/184 674/1747/184 688/1741/185 +f 675/1743/187 1107/1639/187 1111/1646/188 +f 608/1745/190 1108/1640/225 1107/1639/187 +f 617/1733/191 611/1645/172 1110/1644/192 +f 1104/1636/194 673/1766/226 674/1747/184 +f 1176/1748/195 701/1641/176 606/1735/175 +f 1111/1646/188 1115/1650/198 685/1750/197 +f 1115/1650/198 1138/1676/200 686/1751/199 +f 1138/1676/200 1136/1674/202 700/1752/201 +f 1136/1674/202 1137/1675/264 698/1753/203 +f 689/1754/204 1116/1651/206 1175/1742/186 +f 694/1755/205 1135/1673/208 1116/1651/206 +f 695/1756/207 1134/1672/210 1135/1673/208 +f 691/1757/209 1131/1669/235 1134/1672/210 +f 1129/1666/211 679/1758/213 702/1737/179 +f 1128/1665/212 832/1759/215 679/1758/213 +f 1143/1681/214 835/1761/217 832/1759/215 +f 1143/1681/214 1125/1662/228 706/1760/216 +f 833/1739/181 681/1762/219 1127/1664/218 +f 681/1762/219 831/1763/221 1119/1656/220 +f 831/1763/221 834/1765/224 1120/1657/222 +f 838/1764/223 1122/1659/231 1120/1657/222 +f 610/1746/193 1110/1644/192 1108/1640/225 +f 1104/1636/194 1176/1748/195 605/1749/196 +f 836/1767/227 706/1760/216 1125/1662/228 +f 703/1768/230 1123/1660/243 1122/1659/231 +f 698/1753/203 1137/1675/264 1144/1682/232 +f 691/1757/209 693/1770/236 1147/1685/234 +f 693/1770/236 707/1773/241 1149/1687/237 +f 699/1769/233 1144/1682/232 1146/1684/238 +f 837/1772/240 1141/1679/265 1149/1687/237 +f 1146/1684/238 1142/1680/266 705/1774/242 +f 705/1775/242 1142/1680/266 1123/1660/243 +f 1139/1677/229 1141/1679/265 837/1777/240 +f 1167/1717/166 1169/1721/166 1161/1704/162 +f 1166/1714/166 1159/1701/162 1161/1704/162 +f 1177/1779/244 1180/1782/73 1178/1780/73 +f 1180/1782/73 1182/1784/91 1181/1783/91 +f 1182/1784/91 1184/1786/92 1183/1785/92 +f 1184/1786/92 1186/1788/87 1185/1787/87 +f 1186/1788/87 1241/1882/93 1187/1789/93 +f 1187/1790/93 1241/1883/93 1188/1791/94 +f 1188/1791/94 1191/1794/88 1190/1793/88 +f 1191/1794/88 1193/1796/95 1192/1795/95 +f 1193/1796/95 1195/1798/96 1194/1797/96 +f 1195/1798/96 1197/1800/72 1196/1799/72 +f 1197/1800/72 1199/1802/245 1198/1801/245 +f 1199/1802/245 1177/1779/244 1179/1781/244 +f 1183/1785/246 1210/1884/246 1200/1803/247 +f 1201/1804/94 1215/1827/94 1202/1805/93 +f 1198/1801/248 1211/1885/248 1204/1807/249 +f 1181/1783/247 1200/1886/247 1205/1808/250 +f 1196/1799/249 1204/1887/249 1206/1809/251 +f 1194/1797/251 1206/1888/251 1207/1810/252 +f 1192/1795/252 1207/1889/252 1208/1811/253 +f 1190/1793/253 1208/1890/253 1201/1812/254 +f 1187/1790/255 1189/1792/254 1201/1813/254 +f 1187/1789/255 1203/1891/255 1209/1815/256 +f 1185/1787/256 1209/1892/256 1210/1816/246 +f 1179/1781/257 1212/1893/257 1211/1817/248 +f 1179/1781/257 1178/1780/250 1205/1818/250 +f 1210/1820/92 1216/1829/92 1213/1821/91 +f 1204/1823/72 1217/1831/72 1214/1824/96 +f 1208/1826/88 1219/1836/88 1215/1827/94 +f 1209/1828/87 1220/1838/87 1216/1829/92 +f 1211/1830/245 1221/1839/245 1217/1831/72 +f 1205/1832/73 1222/1840/73 1218/1833/244 +f 1207/1835/95 1223/1841/95 1219/1836/88 +f 1203/1837/93 1202/1894/93 1220/1838/87 +f 1212/1834/244 1218/1833/244 1221/1839/245 +f 1200/1822/91 1213/1821/91 1222/1840/73 +f 1206/1825/96 1214/1824/96 1223/1841/95 +f 1224/1842/67 1227/1845/258 1225/1843/258 +f 1227/1845/258 1229/1847/68 1228/1846/68 +f 1229/1847/68 1231/1849/259 1230/1848/259 +f 1231/1849/259 1233/1851/66 1232/1850/66 +f 1233/1851/66 1235/1853/260 1234/1852/260 +f 1235/1853/260 1237/1855/69 1236/1854/69 +f 1237/1855/69 1239/1857/261 1238/1856/261 +f 1239/1857/261 1224/1895/67 1226/1858/67 +f 1238/1861/74 1226/1896/74 1230/1897/74 +f 1226/1896/74 1225/1898/74 1230/1897/74 +f 1225/1898/74 1228/1899/74 1230/1897/74 +f 1230/1897/74 1232/1900/74 1238/1861/74 +f 1232/1900/74 1234/1859/74 1238/1861/74 +s off +f 1242/1901/69 1243/1902/69 1244/1903/69 +f 1245/1904/70 1246/1905/70 1247/1906/70 +f 1245/1904/68 1248/1907/68 1249/1908/68 +f 1250/1909/68 1251/1910/68 1248/1907/68 +f 1249/1908/74 1244/1911/74 1243/1912/74 +f 1247/1906/70 1250/1909/70 1245/1904/70 +f 1246/1905/67 1252/1913/67 1253/1914/67 +f 1247/1906/69 1253/1915/69 1243/1902/69 +f 1249/1908/68 1254/1916/68 1245/1904/68 +f 1255/1917/67 1256/1918/67 1253/1914/67 +f 1257/1919/66 1258/1920/66 1251/1921/66 +f 1244/1903/69 1259/1922/69 1242/1901/69 +f 1260/1923/67 1261/1924/67 1244/1925/67 +f 1242/1901/70 1257/1919/70 1250/1909/70 +f 1249/1926/68 1262/1927/68 1252/1913/68 +f 1244/1928/69 1263/1929/69 1258/1920/69 +f 1260/1930/74 1264/1931/74 1261/1932/74 +f 1253/1914/69 1265/1933/69 1243/1934/69 +f 1251/1921/68 1266/1935/68 1248/1936/68 +f 1267/1937/74 1255/1917/74 1268/1938/74 +f 1264/1931/66 1269/1939/66 1251/1921/66 +f 1267/1937/88 1270/1940/88 1256/1918/88 +f 1255/1917/87 1271/1941/87 1268/1938/87 +f 1260/1930/87 1272/1942/87 1269/1939/87 +f 1264/1931/88 1273/1943/88 1261/1932/88 +f 1267/1944/66 1268/1945/66 1249/1926/66 +f 1242/1901/69 1247/1906/69 1243/1902/69 +f 1245/1904/70 1254/1916/70 1246/1905/70 +f 1245/1904/68 1250/1909/68 1248/1907/68 +f 1250/1909/68 1257/1919/68 1251/1910/68 +f 1249/1908/74 1248/1907/74 1244/1911/74 +f 1247/1906/70 1242/1901/70 1250/1909/70 +f 1246/1905/67 1254/1916/67 1252/1913/67 +f 1247/1906/69 1246/1905/69 1253/1915/69 +f 1249/1908/68 1252/1946/68 1254/1916/68 +f 1270/1947/67 1253/1914/67 1256/1918/67 +f 1253/1914/67 1252/1913/67 1255/1917/67 +f 1252/1913/67 1262/1927/67 1255/1917/67 +f 1257/1919/66 1259/1922/66 1258/1920/66 +f 1244/1903/69 1258/1948/69 1259/1922/69 +f 1273/1949/67 1244/1925/67 1261/1924/67 +f 1244/1925/67 1248/1936/67 1260/1923/67 +f 1248/1936/67 1266/1935/67 1260/1923/67 +f 1242/1901/70 1259/1922/70 1257/1919/70 +f 1249/1926/68 1271/1950/68 1262/1927/68 +f 1244/1928/69 1273/1951/69 1263/1929/69 +f 1260/1930/74 1269/1939/74 1264/1931/74 +f 1253/1914/69 1270/1947/69 1265/1933/69 +f 1251/1921/68 1272/1952/68 1266/1935/68 +f 1267/1937/74 1256/1918/74 1255/1917/74 +f 1272/1952/66 1251/1921/66 1269/1939/66 +f 1251/1921/66 1258/1920/66 1264/1931/66 +f 1258/1920/66 1263/1929/66 1264/1931/66 +f 1267/1937/88 1265/1953/88 1270/1940/88 +f 1255/1917/87 1262/1954/87 1271/1941/87 +f 1260/1930/87 1266/1955/87 1272/1942/87 +f 1264/1931/88 1263/1956/88 1273/1943/88 +f 1271/1950/66 1249/1926/66 1268/1945/66 +f 1249/1926/66 1243/1957/66 1267/1944/66 +f 1243/1957/66 1265/1958/66 1267/1944/66 +f 1274/1959/69 1275/1960/69 1276/1961/69 +f 1277/1962/68 1278/1963/68 1279/1964/68 +f 1280/1965/68 1281/1966/68 1282/1967/68 +f 1277/1962/68 1282/1967/68 1281/1966/68 +f 1283/1968/69 1284/1969/69 1285/1970/69 +f 1276/1961/69 1285/1970/69 1284/1969/69 +f 1274/1959/69 1286/1971/69 1287/1972/69 +f 1288/1973/68 1289/1974/68 1278/1963/68 +f 1274/1959/69 1287/1972/69 1275/1960/69 +f 1277/1962/68 1288/1973/68 1278/1963/68 +f 1277/1962/68 1279/1964/68 1282/1967/68 +f 1276/1961/69 1275/1960/69 1285/1970/69 +f 1274/1959/69 1290/1975/69 1286/1971/69 +f 1288/1973/68 1291/1976/68 1289/1974/68 +f 1292/1977/69 1293/1978/69 1294/1979/69 +f 1295/1980/267 1296/1981/267 1293/1978/267 +f 1297/1982/68 1298/1983/68 1296/1984/68 +f 1299/1985/268 1294/1979/268 1298/1983/268 +f 1296/1986/269 1294/1979/269 1293/1987/269 +f 1295/1988/270 1299/1985/270 1297/1989/270 +f 1292/1977/69 1295/1980/69 1293/1978/69 +f 1295/1980/267 1297/1990/267 1296/1981/267 +f 1297/1982/68 1299/1985/68 1298/1983/68 +f 1299/1985/268 1292/1977/268 1294/1979/268 +f 1296/1986/269 1298/1983/269 1294/1979/269 +f 1295/1988/270 1292/1977/270 1299/1985/270 +f 1300/1991/67 1301/1992/67 1302/1993/67 +f 1303/1994/66 1304/1995/66 1305/1996/66 +f 1306/1997/66 1307/1998/66 1308/1999/66 +f 1303/1994/66 1309/2000/66 1306/1997/66 +f 1308/1999/271 1310/2001/271 1311/2002/271 +f 1312/2003/67 1313/2004/67 1300/1991/67 +f 1314/2005/66 1315/2006/66 1304/1995/66 +f 1316/2007/67 1310/2008/67 1317/2009/67 +f 1312/2003/67 1317/2009/67 1318/2010/67 +f 1302/1993/272 1315/2011/272 1319/2012/272 +f 1301/1992/67 1320/2013/67 1321/2014/67 +f 1322/2015/66 1304/1995/66 1323/2016/66 +f 1307/1998/66 1324/2017/66 1325/2018/66 +f 1309/2000/66 1322/2015/66 1324/2017/66 +f 1310/2001/271 1325/2018/271 1326/2019/271 +f 1313/2004/67 1327/2020/67 1320/2013/67 +f 1323/2016/66 1315/2006/66 1328/2021/66 +f 1329/2022/67 1310/2008/67 1326/2019/67 +f 1327/2020/67 1317/2009/67 1329/2022/67 +f 1315/2011/272 1321/2014/272 1328/2023/272 +f 1300/1991/67 1313/2004/67 1301/1992/67 +f 1303/1994/66 1314/2005/66 1304/1995/66 +f 1306/1997/66 1309/2000/66 1307/1998/66 +f 1303/1994/66 1305/1996/66 1309/2000/66 +f 1308/1999/271 1307/1998/271 1310/2001/271 +f 1312/2003/67 1318/2010/67 1313/2004/67 +f 1314/2005/66 1319/2024/66 1315/2006/66 +f 1316/2007/67 1311/2002/67 1310/2008/67 +f 1312/2003/67 1316/2007/67 1317/2009/67 +f 1302/1993/272 1301/1992/272 1315/2011/272 +f 1301/1992/67 1313/2004/67 1320/2013/67 +f 1322/2015/66 1305/1996/66 1304/1995/66 +f 1307/1998/66 1309/2000/66 1324/2017/66 +f 1309/2000/66 1305/1996/66 1322/2015/66 +f 1310/2001/271 1307/1998/271 1325/2018/271 +f 1313/2004/67 1318/2010/67 1327/2020/67 +f 1323/2016/66 1304/1995/66 1315/2006/66 +f 1329/2022/67 1317/2009/67 1310/2008/67 +f 1327/2020/67 1318/2010/67 1317/2009/67 +f 1315/2011/272 1301/1992/272 1321/2014/272 +s 1 +f 1287/2025/273 1277/2026/273 1275/2027/273 +f 1278/1963/66 1276/1961/66 1279/1964/66 +f 1278/1963/66 1290/1975/66 1274/1959/66 +f 1282/1967/274 1283/2028/99 1280/2029/99 +f 1279/1964/66 1284/1969/274 1282/1967/274 +f 1285/2030/153 1280/2031/275 1283/2032/275 +f 1275/2027/273 1281/2033/153 1285/2030/153 +f 1287/2025/273 1291/2034/67 1288/2035/273 +f 1287/2025/273 1288/2035/273 1277/2026/273 +f 1278/1963/66 1274/1959/66 1276/1961/66 +f 1278/1963/66 1289/1974/66 1290/1975/66 +f 1282/1967/274 1284/1969/274 1283/2028/99 +f 1279/1964/66 1276/1961/66 1284/1969/274 +f 1285/2030/153 1281/2033/153 1280/2031/275 +f 1275/2027/273 1277/2026/273 1281/2033/153 +f 1287/2025/273 1286/2036/67 1291/2034/67 +f 1306/2037/276 1330/2038/277 1303/2039/277 +f 1331/2040/278 1332/2041/279 1333/2042/278 +f 1314/2043/280 1334/2044/272 1319/2045/281 +f 1308/2046/282 1335/2047/276 1306/2037/276 +f 1331/2040/278 1336/2048/271 1308/2046/282 +f 1337/2049/279 1338/2050/283 1332/2041/279 +f 1303/2051/277 1339/2052/280 1314/2043/280 +f 1340/2053/283 1334/2044/272 1338/2050/283 +f 1341/2054/67 1342/2055/67 1343/2056/67 +f 1335/2057/66 1333/2058/66 1338/2059/66 +f 1302/2060/281 1340/2053/283 1344/2061/283 +f 1344/2061/283 1337/2049/279 1345/2062/279 +f 1346/2063/278 1308/2046/282 1311/2064/282 +f 1345/2062/279 1331/2040/278 1346/2063/278 +f 1347/2065/276 1312/2066/277 1348/2067/277 +f 1343/2068/278 1345/2062/279 1346/2063/278 +f 1341/2069/280 1302/2060/281 1349/2070/272 +f 1347/2065/276 1311/2064/282 1316/2071/276 +f 1350/2072/271 1346/2063/278 1311/2064/282 +f 1351/2073/279 1344/2061/283 1345/2062/279 +f 1348/2074/277 1300/2075/280 1341/2069/280 +f 1349/2070/272 1344/2061/283 1342/2076/283 +f 1352/2077/279 1324/2078/278 1322/2079/279 +f 1353/2080/276 1354/2081/277 1355/2082/276 +f 1356/2083/272 1323/2084/283 1328/2085/284 +f 1357/2086/278 1325/2087/285 1324/2078/278 +f 1358/2088/271 1355/2082/276 1325/2087/285 +f 1359/2089/277 1360/2090/280 1354/2081/277 +f 1361/2091/283 1322/2092/279 1323/2084/283 +f 1362/2093/280 1328/2085/284 1360/2090/280 +f 1363/2094/67 1364/2095/67 1365/2096/67 +f 1361/2097/66 1362/2098/66 1353/2099/66 +f 1366/2100/280 1328/2085/284 1321/2101/284 +f 1367/2102/277 1360/2090/280 1366/2100/280 +f 1325/2087/285 1368/2103/276 1326/2104/285 +f 1355/2082/276 1367/2102/277 1368/2103/276 +f 1327/2105/279 1365/2106/278 1369/2107/279 +f 1368/2103/276 1370/2108/277 1371/2109/276 +f 1372/2110/272 1320/2111/283 1364/2112/283 +f 1365/2106/278 1326/2104/285 1373/2113/271 +f 1373/2113/271 1368/2103/276 1371/2109/276 +f 1370/2108/277 1366/2100/280 1363/2114/280 +f 1320/2111/283 1369/2115/279 1364/2112/283 +f 1366/2100/280 1372/2110/272 1363/2114/280 +f 1306/2037/276 1335/2047/276 1330/2038/277 +f 1331/2040/278 1337/2049/279 1332/2041/279 +f 1314/2043/280 1339/2052/280 1334/2044/272 +f 1308/2046/282 1336/2048/271 1335/2047/276 +f 1331/2040/278 1333/2042/278 1336/2048/271 +f 1337/2049/279 1340/2053/283 1338/2050/283 +f 1303/2051/277 1330/2116/277 1339/2052/280 +f 1340/2053/283 1319/2045/281 1334/2044/272 +f 1343/2056/67 1350/2117/67 1347/2118/67 +f 1347/2118/67 1348/2119/67 1341/2054/67 +f 1341/2054/67 1349/2120/67 1342/2055/67 +f 1342/2055/67 1351/2121/67 1343/2056/67 +f 1343/2056/67 1347/2118/67 1341/2054/67 +f 1335/2057/66 1336/2122/66 1333/2058/66 +f 1333/2058/66 1332/2123/66 1338/2059/66 +f 1338/2059/66 1334/2124/66 1339/2125/66 +f 1339/2125/66 1330/2126/66 1338/2059/66 +f 1330/2126/66 1335/2057/66 1338/2059/66 +f 1302/2060/281 1319/2045/281 1340/2053/283 +f 1344/2061/283 1340/2053/283 1337/2049/279 +f 1346/2063/278 1331/2040/278 1308/2046/282 +f 1345/2062/279 1337/2049/279 1331/2040/278 +f 1347/2065/276 1316/2071/276 1312/2066/277 +f 1343/2068/278 1351/2073/279 1345/2062/279 +f 1341/2069/280 1300/2075/280 1302/2060/281 +f 1347/2065/276 1350/2072/271 1311/2064/282 +f 1350/2072/271 1343/2068/278 1346/2063/278 +f 1351/2073/279 1342/2076/283 1344/2061/283 +f 1348/2074/277 1312/2127/277 1300/2075/280 +f 1349/2070/272 1302/2060/281 1344/2061/283 +f 1352/2077/279 1357/2086/278 1324/2078/278 +f 1353/2080/276 1359/2089/277 1354/2081/277 +f 1356/2083/272 1361/2091/283 1323/2084/283 +f 1357/2086/278 1358/2088/271 1325/2087/285 +f 1358/2088/271 1353/2080/276 1355/2082/276 +f 1359/2089/277 1362/2093/280 1360/2090/280 +f 1361/2091/283 1352/2128/279 1322/2092/279 +f 1362/2093/280 1356/2083/272 1328/2085/284 +f 1365/2096/67 1373/2129/67 1371/2130/67 +f 1371/2130/67 1370/2131/67 1363/2094/67 +f 1363/2094/67 1372/2132/67 1364/2095/67 +f 1364/2095/67 1369/2133/67 1365/2096/67 +f 1365/2096/67 1371/2130/67 1363/2094/67 +f 1353/2099/66 1358/2134/66 1357/2135/66 +f 1357/2135/66 1352/2136/66 1353/2099/66 +f 1352/2136/66 1361/2097/66 1353/2099/66 +f 1361/2097/66 1356/2137/66 1362/2098/66 +f 1362/2098/66 1359/2138/66 1353/2099/66 +f 1366/2100/280 1360/2090/280 1328/2085/284 +f 1367/2102/277 1354/2081/277 1360/2090/280 +f 1325/2087/285 1355/2082/276 1368/2103/276 +f 1355/2082/276 1354/2081/277 1367/2102/277 +f 1327/2105/279 1329/2139/278 1365/2106/278 +f 1368/2103/276 1367/2102/277 1370/2108/277 +f 1372/2110/272 1321/2101/284 1320/2111/283 +f 1365/2106/278 1329/2139/278 1326/2104/285 +f 1373/2113/271 1326/2104/285 1368/2103/276 +f 1370/2108/277 1367/2102/277 1366/2100/280 +f 1320/2111/283 1327/2140/279 1369/2115/279 +f 1366/2100/280 1321/2101/284 1372/2110/272 +o Scope +v 0.000000 1.327482 -7.000000 +v -0.181111 1.311306 -7.000000 +v -0.148759 1.367342 -7.000000 +v -0.313694 1.443889 -7.000000 +v -0.257658 1.476241 -7.000000 +v -0.362222 1.625000 -7.000000 +v -0.297517 1.625000 -7.000000 +v -0.257658 1.773759 -7.000000 +v -0.313694 1.806111 -7.000000 +v -0.181111 1.938693 -7.000000 +v -0.148759 1.882657 -7.000000 +v 0.000000 1.922517 -7.000000 +v 0.000000 1.987222 -7.000000 +v 0.181111 1.938694 -7.000000 +v 0.148759 1.882658 -7.000000 +v 0.257658 1.773759 -7.000000 +v 0.313694 1.806111 -7.000000 +v 0.297517 1.625000 -7.000000 +v 0.362222 1.625000 -7.000000 +v 0.313694 1.443889 -7.000000 +v 0.257658 1.476241 -7.000000 +v 0.181111 1.311306 -7.000000 +v 0.148759 1.367342 -7.000000 +v 0.000000 1.262778 -7.000000 +v 0.297517 1.625000 -6.875000 +v 0.148759 1.367342 -6.875000 +v -0.297517 1.625000 -6.875000 +v -0.209127 1.262778 -1.875000 +v 0.000002 1.142037 -1.875000 +v 0.000002 1.206742 -1.875000 +v -0.362220 1.415871 -1.875000 +v -0.241479 1.206742 -1.875000 +v -0.482961 1.625000 -1.875000 +v -0.418256 1.383518 -1.875000 +v -0.362220 1.834129 -1.875000 +v -0.418256 1.625000 -1.875000 +v -0.209127 1.987222 -1.875000 +v -0.418256 1.866482 -1.875000 +v 0.000002 2.107963 -1.875000 +v -0.241480 2.043258 -1.875000 +v 0.209131 1.987222 -1.875000 +v 0.000002 2.043258 -1.875000 +v 0.362224 1.834129 -1.875000 +v 0.241483 2.043258 -1.875000 +v 0.418260 1.625000 -1.875000 +v 0.418260 1.866482 -1.875000 +v 0.362224 1.415871 -1.875000 +v 0.482965 1.625000 -1.875000 +v 0.209131 1.262778 -1.875000 +v 0.418260 1.383519 -1.875000 +v 0.241484 1.206742 -1.875000 +v 0.362224 1.415871 -2.000000 +v 0.362224 1.834129 -2.000000 +v 0.000002 2.043258 -2.000000 +v -0.437499 1.567258 -4.807742 +v -0.437499 1.543340 -4.750000 +v -0.437499 1.706660 -4.750000 +v -0.249999 1.500000 -4.937500 +v -0.124999 1.875000 -4.937500 +v 0.250001 1.750000 -4.937500 +v 0.125001 1.875000 -4.562500 +v -0.249999 1.750000 -4.562500 +v -0.124999 1.375000 -4.562500 +v -0.057741 2.062500 -4.807742 +v -0.081659 2.062500 -4.750000 +v 0.081661 2.062500 -4.750000 +v 0.250001 1.125000 -5.312500 +v 0.250001 0.937500 -5.250000 +v 0.250001 0.937500 -5.312500 +v 0.250001 1.125000 -5.250000 +v -0.249999 0.937500 -5.250000 +v -0.249999 1.125000 -5.312500 +v -0.249999 0.937500 -5.500000 +v -0.249999 0.937500 -5.312500 +v -0.249999 1.125000 -5.500000 +v 0.250001 0.937500 -5.500000 +v -0.249999 1.125000 -5.250000 +v -0.124999 1.250000 -5.312500 +v 0.125001 1.250000 -5.500000 +v 0.250001 1.375000 -5.312500 +v 0.125001 1.250000 -5.312500 +v 0.250001 1.125000 -5.500000 +v -0.124999 1.250000 -5.250000 +v 0.125001 1.250000 -5.250000 +v -0.124999 1.250000 -5.500000 +v 0.250001 1.375000 -5.500000 +v 0.250001 1.437500 -5.312500 +v 0.250001 1.375000 -5.250000 +v -0.249999 1.375000 -5.250000 +v -0.249999 1.375000 -5.312500 +v -0.249999 1.375000 -5.500000 +v -0.249999 1.437500 -5.312500 +v -0.249999 1.437500 -5.500000 +v 0.250001 1.437500 -5.500000 +v -0.249999 1.750000 -5.312500 +v 0.250001 1.750000 -5.312500 +v -0.249999 1.750000 -5.500000 +v 0.125001 1.875000 -5.312500 +v -0.124999 1.875000 -5.500000 +v -0.124999 1.875000 -5.312500 +v 0.125001 1.875000 -5.500000 +v 0.250001 1.750000 -5.500000 +v 0.250001 0.937500 -4.250000 +v 0.250001 1.125000 -4.187500 +v 0.250001 0.937500 -4.187500 +v -0.249999 0.937500 -4.250000 +v 0.250001 1.125000 -4.250000 +v -0.249999 0.937500 -4.000000 +v -0.249999 1.125000 -4.187500 +v -0.249999 0.937500 -4.187500 +v 0.250001 0.937500 -4.000000 +v -0.249999 1.125000 -4.000000 +v -0.124999 1.250000 -4.187500 +v -0.249999 1.125000 -4.250000 +v 0.250001 1.375000 -4.187500 +v 0.125001 1.250000 -4.000000 +v 0.125001 1.250000 -4.187500 +v 0.250001 1.125000 -4.000000 +v -0.124999 1.250000 -4.250000 +v 0.125001 1.250000 -4.250000 +v 0.250001 1.375000 -4.000000 +v -0.124999 1.250000 -4.000000 +v 0.250001 1.437500 -4.187500 +v 0.250001 1.375000 -4.250000 +v -0.249999 1.375000 -4.250000 +v -0.249999 1.375000 -4.187500 +v -0.249999 1.375000 -4.000000 +v -0.249999 1.437500 -4.187500 +v -0.249999 1.437500 -4.000000 +v 0.250001 1.437500 -4.000000 +v -0.124999 1.875000 -4.187500 +v 0.125001 1.875000 -4.187500 +v 0.250001 1.750000 -4.187500 +v -0.249999 1.750000 -4.000000 +v -0.124999 1.875000 -4.000000 +v 0.250001 1.750000 -4.000000 +v -0.249999 1.750000 -4.187500 +v 0.125001 1.875000 -4.000000 +v 0.000000 1.327482 -6.875000 +v -0.148759 1.367342 -6.875000 +v -0.257658 1.476241 -6.875000 +v -0.257658 1.773759 -6.875000 +v -0.148759 1.882657 -6.875000 +v 0.000000 1.922517 -6.875000 +v 0.148759 1.882658 -6.875000 +v 0.257658 1.773759 -6.875000 +v 0.257658 1.476241 -6.875000 +v -0.362220 1.415871 -2.000000 +v -0.209127 1.262778 -2.000000 +v 0.000002 1.206742 -2.000000 +v 0.209131 1.262778 -2.000000 +v 0.418260 1.625000 -2.000000 +v 0.209131 1.987222 -2.000000 +v -0.209127 1.987222 -2.000000 +v -0.362220 1.834129 -2.000000 +v -0.418256 1.625000 -2.000000 +v -0.437499 1.567258 -4.692258 +v -0.437499 1.625000 -4.668340 +v -0.437499 1.682742 -4.692258 +v -0.437499 1.682742 -4.807742 +v -0.437499 1.625000 -4.831660 +v 0.125001 1.375000 -4.937500 +v -0.124999 1.375000 -4.937500 +v -0.249999 1.750000 -4.937500 +v 0.125001 1.875000 -4.937500 +v 0.250001 1.500000 -4.937500 +v 0.125001 1.375000 -4.562500 +v 0.250001 1.500000 -4.562500 +v 0.250001 1.750000 -4.562500 +v -0.124999 1.875000 -4.562500 +v -0.249999 1.500000 -4.562500 +v -0.057741 2.062500 -4.692258 +v 0.000001 2.062500 -4.668340 +v 0.057743 2.062500 -4.692258 +v 0.057743 2.062500 -4.807742 +v 0.000001 2.062500 -4.831660 +v -0.241479 1.206742 -2.500000 +v 0.000002 1.142037 -2.500000 +v -0.418256 1.383518 -2.500000 +v -0.482961 1.625000 -2.500000 +v -0.418256 1.866482 -2.500000 +v -0.241480 2.043258 -2.500000 +v 0.000002 2.107963 -2.500000 +v 0.241483 2.043258 -2.500000 +v 0.418260 1.866482 -2.500000 +v 0.482965 1.625000 -2.500000 +v 0.418260 1.383519 -2.500000 +v 0.241484 1.206742 -2.500000 +v -0.120740 1.834129 -3.750000 +v 0.209130 1.745741 -3.750000 +v 0.120742 1.834129 -5.750000 +v 0.120742 1.834129 -3.750000 +v -0.209128 1.745741 -3.750000 +v -0.241480 1.625000 -3.750000 +v 0.120742 1.415871 -3.750000 +v -0.120740 1.415871 -3.750000 +v 0.000001 1.383518 -3.750000 +v -0.209128 1.504259 -3.750000 +v 0.209130 1.504259 -3.750000 +v 0.241482 1.625000 -3.750000 +v 0.000001 1.866482 -3.750000 +v -0.120740 1.415871 -5.750000 +v 0.000000 1.262778 -6.750000 +v 0.000001 1.383518 -5.750000 +v -0.209128 1.745741 -5.750000 +v 0.120742 1.415871 -5.750000 +v 0.209130 1.745741 -5.750000 +v -0.120740 1.834129 -5.750000 +v -0.209128 1.504259 -5.750000 +v 0.241482 1.625000 -5.750000 +v 0.000001 1.866481 -5.750000 +v -0.241480 1.625000 -5.750000 +v 0.209130 1.504259 -5.750000 +v 0.181111 1.311306 -6.750000 +v 0.313694 1.443889 -6.750000 +v 0.181111 1.938694 -6.750000 +v -0.181111 1.938693 -6.750000 +v -0.313694 1.806111 -6.750000 +v -0.181111 1.311306 -6.750000 +v 0.313694 1.806111 -6.750000 +v -0.313694 1.443889 -6.750000 +v 0.362222 1.625000 -6.750000 +v 0.000000 1.987222 -6.750000 +v -0.362222 1.625000 -6.750000 +v -0.312499 1.567258 -4.692258 +v -0.312499 1.625000 -4.668340 +v -0.312499 1.543340 -4.750000 +v -0.312499 1.567258 -4.807742 +v -0.312499 1.625000 -4.831660 +v -0.312499 1.682742 -4.807742 +v -0.312499 1.706660 -4.750000 +v -0.312499 1.682742 -4.692258 +v -0.312499 1.750000 -4.625000 +v -0.312499 1.500000 -4.875000 +v -0.312499 1.500000 -4.625000 +v 0.125001 1.937500 -4.625000 +v -0.124999 1.937500 -4.875000 +v -0.124999 1.937500 -4.625000 +v 0.312501 1.750000 -4.875000 +v 0.312501 1.500000 -4.625000 +v 0.312501 1.500000 -4.875000 +v 0.125001 1.312500 -4.875000 +v 0.125001 1.312500 -4.625000 +v 0.125001 1.937500 -4.875000 +v -0.124999 1.312500 -4.625000 +v -0.124999 1.312500 -4.875000 +v -0.312499 1.750000 -4.875000 +v 0.312501 1.750000 -4.625000 +v -0.057741 1.937500 -4.692258 +v 0.000001 1.937500 -4.668340 +v -0.081659 1.937500 -4.750000 +v -0.057741 1.937500 -4.807742 +v 0.000001 1.937500 -4.831660 +v 0.057743 1.937500 -4.807742 +v 0.081661 1.937500 -4.750000 +v 0.057743 1.937500 -4.692258 +vt 0.450116 0.413194 +vt 0.452436 0.430556 +vt 0.450116 0.427083 +vt 0.450116 0.434028 +vt 0.452436 0.451389 +vt 0.450116 0.447917 +vt 0.450116 0.454861 +vt 0.452436 0.472222 +vt 0.450116 0.468750 +vt 0.450116 0.489583 +vt 0.452436 0.493056 +vt 0.450116 0.496528 +vt 0.452436 0.513889 +vt 0.450116 0.510417 +vt 0.450116 0.531250 +vt 0.452436 0.534722 +vt 0.450116 0.538194 +vt 0.452436 0.555556 +vt 0.450116 0.552083 +vt 0.450116 0.572917 +vt 0.452436 0.576389 +vt 0.450116 0.593750 +vt 0.452436 0.597222 +vt 0.450116 0.600694 +vt 0.452436 0.618056 +vt 0.450116 0.614583 +vt 0.450116 0.621528 +vt 0.452436 0.638889 +vt 0.450116 0.635417 +vt 0.450116 0.656250 +vt 0.452436 0.659722 +vt 0.531965 0.697845 +vt 0.536912 0.672200 +vt 0.551752 0.697844 +vt 0.649652 0.434028 +vt 0.647332 0.409722 +vt 0.649652 0.413194 +vt 0.649652 0.461806 +vt 0.647332 0.437500 +vt 0.649652 0.440972 +vt 0.649652 0.468750 +vt 0.647332 0.493056 +vt 0.647332 0.465278 +vt 0.649652 0.517361 +vt 0.649652 0.496528 +vt 0.649652 0.545139 +vt 0.647332 0.520833 +vt 0.649652 0.524306 +vt 0.649652 0.552083 +vt 0.647332 0.576389 +vt 0.647332 0.548611 +vt 0.649652 0.600694 +vt 0.649652 0.579861 +vt 0.649652 0.628472 +vt 0.647332 0.604167 +vt 0.649652 0.607639 +vt 0.649652 0.656250 +vt 0.647332 0.631944 +vt 0.649652 0.635417 +vt 0.649652 0.684028 +vt 0.647332 0.659722 +vt 0.649652 0.663194 +vt 0.649652 0.711806 +vt 0.647332 0.687500 +vt 0.649652 0.690972 +vt 0.649652 0.739583 +vt 0.647332 0.715278 +vt 0.649652 0.718750 +vt 0.528938 0.419586 +vt 0.528938 0.462778 +vt 0.516441 0.484374 +vt 0.432736 0.190963 +vt 0.435062 0.188080 +vt 0.435062 0.207770 +vt 0.429234 0.305556 +vt 0.424594 0.347222 +vt 0.410673 0.333333 +vt 0.424594 0.284722 +vt 0.410673 0.270833 +vt 0.415313 0.229167 +vt 0.446725 0.190813 +vt 0.447713 0.197945 +vt 0.440973 0.197945 +vt 0.487239 0.284722 +vt 0.484919 0.263889 +vt 0.487239 0.263889 +vt 0.450116 0.284722 +vt 0.431555 0.263889 +vt 0.450116 0.263889 +vt 0.459397 0.284722 +vt 0.452436 0.263889 +vt 0.459397 0.263889 +vt 0.482599 0.284722 +vt 0.464037 0.263889 +vt 0.482599 0.263889 +vt 0.461717 0.284722 +vt 0.459397 0.305556 +vt 0.494200 0.305556 +vt 0.487239 0.326389 +vt 0.487239 0.305556 +vt 0.494200 0.284722 +vt 0.468677 0.298611 +vt 0.464037 0.284722 +vt 0.436195 0.298611 +vt 0.431555 0.284722 +vt 0.484919 0.305556 +vt 0.484919 0.284722 +vt 0.477958 0.298611 +vt 0.464037 0.312500 +vt 0.452436 0.305556 +vt 0.452436 0.284722 +vt 0.461717 0.263889 +vt 0.494200 0.263889 +vt 0.494200 0.326389 +vt 0.487239 0.333333 +vt 0.484919 0.326389 +vt 0.445476 0.298611 +vt 0.431555 0.312500 +vt 0.461717 0.305556 +vt 0.459397 0.326389 +vt 0.452436 0.326389 +vt 0.461717 0.326389 +vt 0.459397 0.333333 +vt 0.452436 0.333333 +vt 0.450116 0.312500 +vt 0.431555 0.319444 +vt 0.482599 0.312500 +vt 0.464037 0.319444 +vt 0.431555 0.354167 +vt 0.450116 0.354167 +vt 0.452436 0.368056 +vt 0.438515 0.402778 +vt 0.447796 0.381944 +vt 0.447796 0.402778 +vt 0.477958 0.368056 +vt 0.468677 0.368056 +vt 0.464037 0.354167 +vt 0.454756 0.402778 +vt 0.431555 0.381944 +vt 0.438515 0.381944 +vt 0.494200 0.333333 +vt 0.487239 0.368056 +vt 0.526682 0.256944 +vt 0.508121 0.229167 +vt 0.526682 0.229167 +vt 0.526682 0.263889 +vt 0.524362 0.284722 +vt 0.524362 0.263889 +vt 0.515081 0.263889 +vt 0.496520 0.284722 +vt 0.496520 0.263889 +vt 0.559165 0.263889 +vt 0.552204 0.284722 +vt 0.552204 0.263889 +vt 0.547564 0.263889 +vt 0.529002 0.284722 +vt 0.529002 0.263889 +vt 0.529002 0.229167 +vt 0.547564 0.250000 +vt 0.529002 0.250000 +vt 0.552204 0.305556 +vt 0.549884 0.284722 +vt 0.524362 0.326389 +vt 0.517401 0.305556 +vt 0.524362 0.305556 +vt 0.517401 0.284722 +vt 0.542923 0.298611 +vt 0.547564 0.284722 +vt 0.510441 0.298611 +vt 0.515081 0.284722 +vt 0.526682 0.305556 +vt 0.526682 0.284722 +vt 0.547564 0.312500 +vt 0.533643 0.298611 +vt 0.559165 0.305556 +vt 0.559165 0.284722 +vt 0.547564 0.256944 +vt 0.529002 0.256944 +vt 0.549884 0.263889 +vt 0.517401 0.263889 +vt 0.524362 0.333333 +vt 0.517401 0.326389 +vt 0.526682 0.326389 +vt 0.515081 0.312500 +vt 0.501160 0.298611 +vt 0.552204 0.326389 +vt 0.549884 0.305556 +vt 0.559165 0.326389 +vt 0.552204 0.333333 +vt 0.549884 0.326389 +vt 0.559165 0.333333 +vt 0.515081 0.319444 +vt 0.496520 0.312500 +vt 0.547564 0.319444 +vt 0.529002 0.312500 +vt 0.510441 0.368056 +vt 0.501160 0.368056 +vt 0.496520 0.354167 +vt 0.559165 0.368056 +vt 0.491879 0.402778 +vt 0.482599 0.381944 +vt 0.491879 0.381944 +vt 0.529002 0.354167 +vt 0.529002 0.319444 +vt 0.547564 0.354167 +vt 0.498840 0.381944 +vt 0.475638 0.402778 +vt 0.482599 0.402778 +vt 0.524362 0.368056 +vt 0.517401 0.333333 +vt 0.452436 0.409722 +vt 0.450116 0.475694 +vt 0.450116 0.517361 +vt 0.450116 0.559028 +vt 0.450116 0.579861 +vt 0.450116 0.642361 +vt 0.541859 0.668232 +vt 0.546806 0.672200 +vt 0.550427 0.683038 +vt 0.550427 0.712651 +vt 0.546806 0.723489 +vt 0.541859 0.727457 +vt 0.536912 0.723489 +vt 0.533291 0.712651 +vt 0.533291 0.683038 +vt 0.649652 0.489583 +vt 0.649652 0.572917 +vt 0.647332 0.743056 +vt 0.503943 0.419586 +vt 0.509225 0.403776 +vt 0.516441 0.397990 +vt 0.523656 0.403776 +vt 0.530872 0.441182 +vt 0.523656 0.478588 +vt 0.509225 0.478588 +vt 0.503943 0.462778 +vt 0.502010 0.441182 +vt 0.437388 0.190963 +vt 0.438351 0.197925 +vt 0.437388 0.204886 +vt 0.432736 0.204886 +vt 0.431772 0.197925 +vt 0.415313 0.291667 +vt 0.424594 0.291667 +vt 0.429234 0.333333 +vt 0.415313 0.347222 +vt 0.410673 0.305556 +vt 0.424594 0.229167 +vt 0.429234 0.243056 +vt 0.429234 0.270833 +vt 0.415313 0.284722 +vt 0.410673 0.243056 +vt 0.446725 0.205077 +vt 0.444343 0.208031 +vt 0.441960 0.205077 +vt 0.441960 0.190813 +vt 0.444343 0.187858 +vt 0.450116 0.319444 +vt 0.482599 0.319444 +vt 0.445476 0.368056 +vt 0.436195 0.368056 +vt 0.459397 0.368056 +vt 0.482599 0.354167 +vt 0.454756 0.381944 +vt 0.431555 0.402778 +vt 0.494200 0.368056 +vt 0.508121 0.256944 +vt 0.547564 0.229167 +vt 0.496520 0.319444 +vt 0.515081 0.354167 +vt 0.552204 0.368056 +vt 0.542923 0.368056 +vt 0.533643 0.368056 +vt 0.498840 0.402778 +vt 0.475638 0.381944 +vt 0.517401 0.368056 +vt 0.624130 0.437500 +vt 0.624130 0.409722 +vt 0.624130 0.465278 +vt 0.624130 0.493056 +vt 0.624130 0.520833 +vt 0.624130 0.548611 +vt 0.624130 0.576389 +vt 0.624130 0.604167 +vt 0.624130 0.631944 +vt 0.624130 0.659722 +vt 0.624130 0.687500 +vt 0.993039 0.298611 +vt 0.997680 0.326389 +vt 0.993039 0.326389 +vt 0.624130 0.715278 +vt 0.624130 0.743056 +vt 0.577726 0.555556 +vt 0.575406 0.604167 +vt 0.501160 0.590278 +vt 0.575406 0.590278 +vt 0.577726 0.527778 +vt 0.577726 0.500000 +vt 0.577726 0.722222 +vt 0.577726 0.430556 +vt 0.577726 0.416667 +vt 0.577726 0.472222 +vt 0.577726 0.694444 +vt 0.577726 0.444444 +vt 0.577726 0.666667 +vt 0.577726 0.638889 +vt 0.577726 0.611111 +vt 0.577726 0.583333 +vt 0.498840 0.427083 +vt 0.461717 0.409722 +vt 0.498840 0.413194 +vt 0.575406 0.562500 +vt 0.501160 0.548611 +vt 0.575406 0.548611 +vt 0.575406 0.659722 +vt 0.501160 0.645833 +vt 0.575406 0.645833 +vt 0.575406 0.520833 +vt 0.501160 0.506944 +vt 0.575406 0.506944 +vt 0.575406 0.618056 +vt 0.501160 0.604167 +vt 0.575406 0.576389 +vt 0.501160 0.562500 +vt 0.575406 0.534722 +vt 0.501160 0.520833 +vt 0.575406 0.631944 +vt 0.501160 0.618056 +vt 0.501160 0.576389 +vt 0.501160 0.534722 +vt 0.501160 0.631944 +vt 0.575406 0.493056 +vt 0.501160 0.493056 +vt 0.461717 0.638889 +vt 0.461717 0.618056 +vt 0.498840 0.569444 +vt 0.461717 0.555556 +vt 0.498840 0.555556 +vt 0.498840 0.496528 +vt 0.461717 0.513889 +vt 0.461717 0.493056 +vt 0.498840 0.642361 +vt 0.461717 0.659722 +vt 0.498840 0.447917 +vt 0.461717 0.430556 +vt 0.498840 0.434028 +vt 0.498840 0.593750 +vt 0.461717 0.576389 +vt 0.498840 0.579861 +vt 0.498840 0.531250 +vt 0.498840 0.517361 +vt 0.498840 0.468750 +vt 0.461717 0.451389 +vt 0.498840 0.454861 +vt 0.498840 0.600694 +vt 0.461717 0.597222 +vt 0.498840 0.552083 +vt 0.461717 0.534722 +vt 0.498840 0.538194 +vt 0.498840 0.479167 +vt 0.461717 0.472222 +vt 0.498840 0.635417 +vt 0.498840 0.621528 +vt 0.445476 0.475694 +vt 0.445476 0.621528 +vt 0.445476 0.427083 +vt 0.445476 0.413194 +vt 0.445476 0.559028 +vt 0.445476 0.510417 +vt 0.445476 0.496528 +vt 0.445476 0.642361 +vt 0.445476 0.447917 +vt 0.445476 0.434028 +vt 0.445476 0.593750 +vt 0.445476 0.579861 +vt 0.445476 0.517361 +vt 0.445476 0.454861 +vt 0.445476 0.614583 +vt 0.445476 0.600694 +vt 0.445476 0.552083 +vt 0.445476 0.538194 +vt 0.993039 0.215278 +vt 0.997680 0.243056 +vt 0.993039 0.243056 +vt 0.993039 0.409722 +vt 0.997680 0.437500 +vt 0.993039 0.437500 +vt 0.993039 0.131944 +vt 0.997680 0.159722 +vt 0.993039 0.159722 +vt 0.997680 0.354167 +vt 0.993039 0.354167 +vt 0.997680 0.270833 +vt 0.993039 0.270833 +vt 0.997680 0.187500 +vt 0.993039 0.187500 +vt 0.997680 0.381944 +vt 0.993039 0.381944 +vt 0.997680 0.298611 +vt 0.997680 0.215278 +vt 0.997680 0.409722 +vt 0.993039 0.104167 +vt 0.997680 0.131944 +vt 0.431555 0.180556 +vt 0.429234 0.166667 +vt 0.431555 0.166667 +vt 0.447796 0.180556 +vt 0.445476 0.166667 +vt 0.447796 0.166667 +vt 0.443155 0.180556 +vt 0.443155 0.166667 +vt 0.440835 0.166667 +vt 0.440835 0.180556 +vt 0.438515 0.166667 +vt 0.436195 0.180556 +vt 0.436195 0.166667 +vt 0.433875 0.166667 +vt 0.433875 0.180556 +vt 0.477958 0.250000 +vt 0.487239 0.222222 +vt 0.487239 0.250000 +vt 0.459397 0.250000 +vt 0.468677 0.222222 +vt 0.468677 0.250000 +vt 0.450116 0.222222 +vt 0.440835 0.250000 +vt 0.440835 0.222222 +vt 0.431555 0.222222 +vt 0.431555 0.250000 +vt 0.459397 0.222222 +vt 0.496520 0.250000 +vt 0.496520 0.222222 +vt 0.505800 0.222222 +vt 0.505800 0.250000 +vt 0.488399 0.215278 +vt 0.477958 0.215278 +vt 0.477958 0.222222 +vt 0.469838 0.215278 +vt 0.459397 0.215278 +vt 0.458237 0.215278 +vt 0.440835 0.215278 +vt 0.432715 0.215278 +vt 0.496520 0.215278 +vt 0.439675 0.256944 +vt 0.450116 0.256944 +vt 0.450116 0.250000 +vt 0.458237 0.256944 +vt 0.468677 0.256944 +vt 0.476798 0.256944 +vt 0.487239 0.256944 +vt 0.488399 0.256944 +vt 0.505800 0.256944 +vt 0.445476 0.159722 +vt 0.443155 0.145833 +vt 0.445476 0.145833 +vt 0.440835 0.159722 +vt 0.440835 0.145833 +vt 0.438515 0.145833 +vt 0.438515 0.159722 +vt 0.436195 0.145833 +vt 0.436195 0.159722 +vt 0.433875 0.145833 +vt 0.431555 0.159722 +vt 0.431555 0.145833 +vt 0.429234 0.145833 +vt 0.447796 0.159722 +vt 0.447796 0.145833 +vt 0.577726 0.569444 +vt 0.577726 0.541667 +vt 0.577726 0.513889 +vt 0.577726 0.736111 +vt 0.577726 0.486111 +vt 0.577726 0.708333 +vt 0.577726 0.458333 +vt 0.577726 0.680556 +vt 0.577726 0.652778 +vt 0.577726 0.625000 +vt 0.577726 0.597222 +vt 0.501160 0.659722 +vt 0.498840 0.510417 +vt 0.498840 0.656250 +vt 0.498840 0.614583 +vt 0.498840 0.493056 +vt 0.445476 0.489583 +vt 0.445476 0.635417 +vt 0.445476 0.572917 +vt 0.445476 0.656250 +vt 0.445476 0.531250 +vt 0.445476 0.468750 +vt 0.997680 0.104167 +vt 0.429234 0.180556 +vt 0.445476 0.180556 +vt 0.438515 0.180556 +vt 0.495360 0.215278 +vt 0.487239 0.215278 +vt 0.476798 0.215278 +vt 0.468677 0.215278 +vt 0.451276 0.215278 +vt 0.450116 0.215278 +vt 0.439675 0.215278 +vt 0.505800 0.215278 +vt 0.432715 0.256944 +vt 0.440835 0.256944 +vt 0.451276 0.256944 +vt 0.459397 0.256944 +vt 0.469838 0.256944 +vt 0.477958 0.256944 +vt 0.495360 0.256944 +vt 0.496520 0.256944 +vt 0.443155 0.159722 +vt 0.433875 0.159722 +vt 0.429234 0.159722 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 1.0000 0.0000 -0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.7071 -0.7071 +vn -0.5000 -0.8660 0.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.5000 0.8660 0.0000 +vn 0.5000 0.8660 0.0000 +vn 0.8660 0.5000 -0.0000 +vn 0.8660 -0.5000 -0.0000 +vn 0.5000 -0.8660 -0.0000 +vn 0.0000 0.9818 -0.1897 +vn -0.4909 0.8503 -0.1897 +vn -0.8503 0.4909 -0.1897 +vn -0.9818 0.0000 -0.1897 +vn -0.0000 -0.9818 -0.1897 +vn 0.4909 -0.8503 -0.1897 +vn -0.4909 -0.8503 -0.1897 +vn -0.8503 -0.4909 -0.1897 +vn 0.8503 -0.4909 -0.1897 +vn 0.9818 -0.0000 -0.1897 +vn 0.8503 0.4909 -0.1897 +vn 0.4909 0.8503 -0.1897 +vn -0.4964 -0.8598 0.1199 +vn -0.0000 -0.9928 0.1199 +vn 0.8598 0.4964 0.1199 +vn 0.4964 0.8598 0.1199 +vn -0.8598 0.4964 0.1199 +vn -0.4964 0.8598 0.1199 +vn 0.4964 -0.8598 0.1199 +vn -0.8598 -0.4964 0.1199 +vn 0.9928 0.0000 0.1199 +vn -0.0000 0.9928 0.1199 +vn -0.9928 0.0000 0.1199 +vn 0.8598 -0.4964 0.1199 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.7071 -0.7071 +vn -0.9239 0.3827 0.0000 +vn -0.9239 -0.3827 0.0000 +vn 0.3827 0.9239 0.0000 +vn -0.3827 0.9239 0.0000 +vn 0.9239 0.3827 -0.0000 +vn 0.9239 -0.3827 -0.0000 +vn 0.3827 -0.9239 -0.0000 +vn -0.3827 -0.9239 0.0000 +vn -0.6635 -0.3458 -0.6635 +vn -0.2418 -0.6861 -0.6861 +vn -0.6861 -0.2418 -0.6861 +vn -0.6635 0.3458 -0.6635 +vn -0.6861 0.2418 -0.6861 +vn -0.3458 0.6635 -0.6635 +vn -0.2418 0.6861 -0.6861 +vn 0.3458 0.6635 -0.6635 +vn 0.2418 0.6861 -0.6861 +vn 0.6861 0.2418 -0.6861 +vn 0.6635 -0.3458 -0.6635 +vn 0.6861 -0.2418 -0.6861 +vn 0.3458 -0.6635 -0.6635 +vn 0.2418 -0.6861 -0.6861 +vn -0.3458 -0.6635 -0.6635 +vn 0.6635 -0.3458 0.6635 +vn 0.2418 -0.6861 0.6861 +vn 0.6861 -0.2418 0.6861 +vn 0.6635 0.3458 0.6635 +vn 0.6861 0.2418 0.6861 +vn 0.3458 0.6635 0.6635 +vn 0.2418 0.6861 0.6861 +vn -0.3458 0.6635 0.6635 +vn -0.2418 0.6861 0.6861 +vn -0.6635 0.3458 0.6635 +vn -0.6861 0.2418 0.6861 +vn -0.6635 -0.3458 0.6635 +vn -0.6861 -0.2418 0.6861 +vn -0.2418 -0.6861 0.6861 +vn 0.3458 -0.6635 0.6635 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.6635 0.3458 -0.6635 +vn -0.3458 -0.6635 0.6635 +s off +f 1374/2141/286 1375/2142/286 1376/2143/286 +f 1376/2144/286 1377/2145/286 1378/2146/286 +f 1378/2147/286 1379/2148/286 1380/2149/286 +f 1381/2150/286 1379/2148/286 1382/2151/286 +f 1381/2152/286 1383/2153/286 1384/2154/286 +f 1385/2155/286 1383/2153/286 1386/2156/286 +f 1385/2157/286 1387/2158/286 1388/2159/286 +f 1389/2160/286 1387/2158/286 1390/2161/286 +f 1391/2162/286 1390/2161/286 1392/2163/286 +f 1391/2164/286 1393/2165/286 1394/2166/286 +f 1394/2167/286 1395/2168/286 1396/2169/286 +f 1374/2170/286 1395/2168/286 1397/2171/286 +f 1398/2172/286 1399/2173/286 1400/2174/286 +f 1401/2175/287 1402/2176/287 1403/2177/287 +f 1404/2178/287 1405/2179/287 1401/2180/287 +f 1404/2181/287 1406/2182/287 1407/2183/287 +f 1408/2184/287 1406/2182/287 1409/2185/287 +f 1410/2186/287 1411/2187/287 1408/2188/287 +f 1410/2189/287 1412/2190/287 1413/2191/287 +f 1414/2192/287 1412/2190/287 1415/2193/287 +f 1416/2194/287 1417/2195/287 1414/2196/287 +f 1418/2197/287 1419/2198/287 1416/2199/287 +f 1420/2200/287 1421/2201/287 1418/2202/287 +f 1422/2203/287 1423/2204/287 1420/2205/287 +f 1403/2206/287 1424/2207/287 1422/2208/287 +f 1425/2209/287 1426/2210/287 1427/2211/287 +f 1428/2212/288 1429/2213/288 1430/2214/288 +f 1431/2215/286 1432/2216/286 1433/2217/286 +f 1434/2218/287 1435/2219/287 1436/2220/287 +f 1437/2221/289 1438/2222/289 1439/2223/289 +f 1440/2224/290 1441/2225/290 1442/2226/290 +f 1443/2227/287 1444/2228/287 1441/2229/287 +f 1445/2230/288 1446/2231/288 1447/2232/288 +f 1448/2233/286 1449/2234/286 1446/2235/286 +f 1450/2236/291 1451/2237/291 1445/2230/291 +f 1452/2238/292 1453/2239/292 1454/2240/292 +f 1455/2241/293 1454/2240/293 1440/2224/293 +f 1448/2233/286 1452/2242/286 1455/2243/286 +f 1443/2227/287 1456/2244/287 1450/2245/287 +f 1440/2224/293 1457/2246/293 1443/2247/293 +f 1458/2248/286 1459/2249/286 1452/2242/286 +f 1445/2230/291 1458/2250/291 1448/2251/291 +f 1450/2236/288 1447/2232/288 1444/2252/288 +f 1455/2241/290 1442/2226/290 1449/2253/290 +f 1459/2254/290 1460/2255/290 1453/2239/290 +f 1453/2239/290 1460/2255/290 1461/2256/290 +f 1457/2257/287 1462/2258/287 1456/2244/287 +f 1456/2259/294 1463/2260/294 1451/2237/294 +f 1451/2237/294 1464/2261/294 1458/2250/294 +f 1454/2240/292 1461/2256/292 1457/2246/292 +f 1463/2260/288 1462/2262/288 1465/2263/288 +f 1463/2260/288 1466/2264/288 1464/2261/288 +f 1461/2265/295 1465/2266/295 1462/2258/295 +f 1464/2267/286 1467/2268/286 1459/2249/286 +f 1468/2269/287 1465/2266/287 1469/2270/287 +f 1465/2263/288 1470/2271/288 1466/2264/288 +f 1471/2272/289 1472/2273/289 1473/2274/289 +f 1472/2275/286 1474/2276/286 1475/2277/286 +f 1472/2273/291 1468/2278/291 1473/2274/291 +f 1471/2272/293 1475/2279/293 1474/2280/293 +f 1467/2281/290 1469/2282/290 1460/2255/290 +f 1446/2283/296 1441/2284/296 1444/2285/296 +f 1476/2286/290 1477/2287/290 1478/2288/290 +f 1479/2289/286 1480/2290/286 1476/2291/286 +f 1481/2292/288 1482/2293/288 1483/2294/288 +f 1484/2295/287 1485/2296/287 1481/2297/287 +f 1484/2298/296 1483/2299/296 1478/2300/296 +f 1486/2301/291 1487/2302/291 1482/2293/291 +f 1488/2303/292 1489/2304/292 1490/2305/292 +f 1490/2305/293 1491/2306/293 1477/2287/293 +f 1489/2307/287 1485/2296/287 1491/2308/287 +f 1492/2309/286 1480/2290/286 1487/2310/286 +f 1493/2311/293 1477/2287/293 1480/2312/293 +f 1494/2313/287 1495/2314/287 1489/2307/287 +f 1495/2315/291 1482/2293/291 1485/2316/291 +f 1478/2300/296 1479/2317/296 1476/2318/296 +f 1483/2294/288 1487/2302/288 1479/2319/288 +f 1478/2288/290 1491/2306/290 1484/2320/290 +f 1496/2321/290 1494/2322/290 1488/2303/290 +f 1488/2303/290 1497/2323/290 1496/2321/290 +f 1498/2324/286 1493/2325/286 1492/2309/286 +f 1499/2326/294 1492/2327/294 1486/2301/294 +f 1500/2328/294 1486/2301/294 1495/2315/294 +f 1497/2323/292 1490/2305/292 1493/2311/292 +f 1499/2326/288 1501/2329/288 1498/2330/288 +f 1502/2331/288 1499/2326/288 1500/2328/288 +f 1501/2332/297 1497/2333/297 1498/2324/297 +f 1503/2334/287 1500/2335/287 1494/2313/287 +f 1504/2336/286 1505/2337/286 1506/2338/286 +f 1507/2339/288 1501/2329/288 1502/2331/288 +f 1508/2340/289 1505/2341/289 1504/2342/289 +f 1507/2343/287 1502/2344/287 1509/2345/287 +f 1510/2346/291 1508/2340/291 1504/2342/291 +f 1509/2347/293 1505/2341/293 1511/2348/293 +f 1506/2349/290 1503/2350/290 1496/2321/290 +f 1374/2141/286 1397/2351/286 1375/2142/286 +f 1376/2144/286 1375/2142/286 1377/2145/286 +f 1378/2147/286 1377/2145/286 1379/2148/286 +f 1381/2150/286 1380/2352/286 1379/2148/286 +f 1381/2152/286 1382/2151/286 1383/2153/286 +f 1385/2155/286 1384/2353/286 1383/2153/286 +f 1385/2157/286 1386/2156/286 1387/2158/286 +f 1389/2160/286 1388/2354/286 1387/2158/286 +f 1391/2162/286 1389/2355/286 1390/2161/286 +f 1391/2164/286 1392/2163/286 1393/2165/286 +f 1394/2167/286 1393/2165/286 1395/2168/286 +f 1374/2170/286 1396/2356/286 1395/2168/286 +f 1399/2173/286 1512/2357/286 1400/2174/286 +f 1512/2357/286 1513/2358/286 1400/2174/286 +f 1513/2358/286 1514/2359/286 1400/2174/286 +f 1400/2174/286 1515/2360/286 1516/2361/286 +f 1516/2361/286 1517/2362/286 1518/2363/286 +f 1518/2363/286 1519/2364/286 1398/2172/286 +f 1398/2172/286 1520/2365/286 1399/2173/286 +f 1400/2174/286 1516/2361/286 1518/2363/286 +f 1518/2363/286 1398/2172/286 1400/2174/286 +f 1401/2175/287 1405/2179/287 1402/2176/287 +f 1404/2178/287 1407/2183/287 1405/2179/287 +f 1404/2181/287 1409/2366/287 1406/2182/287 +f 1408/2184/287 1411/2187/287 1406/2182/287 +f 1410/2186/287 1413/2191/287 1411/2187/287 +f 1410/2189/287 1415/2367/287 1412/2190/287 +f 1414/2192/287 1417/2195/287 1412/2190/287 +f 1416/2194/287 1419/2198/287 1417/2195/287 +f 1418/2197/287 1421/2201/287 1419/2198/287 +f 1420/2200/287 1423/2204/287 1421/2201/287 +f 1422/2203/287 1424/2207/287 1423/2204/287 +f 1403/2206/287 1402/2368/287 1424/2207/287 +f 1521/2369/287 1522/2370/287 1523/2371/287 +f 1523/2371/287 1524/2372/287 1425/2209/287 +f 1425/2209/287 1525/2373/287 1426/2210/287 +f 1426/2210/287 1526/2374/287 1427/2211/287 +f 1427/2211/287 1527/2375/287 1528/2376/287 +f 1528/2376/287 1529/2377/287 1427/2211/287 +f 1529/2377/287 1521/2369/287 1427/2211/287 +f 1521/2369/287 1523/2371/287 1427/2211/287 +f 1523/2371/287 1425/2209/287 1427/2211/287 +f 1429/2213/288 1530/2378/288 1430/2214/288 +f 1530/2378/288 1531/2379/288 1430/2214/288 +f 1531/2379/288 1532/2380/288 1430/2214/288 +f 1430/2214/288 1533/2381/288 1534/2382/288 +f 1534/2382/288 1428/2212/288 1430/2214/288 +f 1535/2383/286 1536/2384/286 1431/2215/286 +f 1431/2215/286 1537/2385/286 1432/2216/286 +f 1432/2216/286 1538/2386/286 1433/2217/286 +f 1433/2217/286 1539/2387/286 1535/2383/286 +f 1535/2383/286 1431/2215/286 1433/2217/286 +f 1436/2220/287 1540/2388/287 1541/2389/287 +f 1541/2389/287 1542/2390/287 1436/2220/287 +f 1542/2390/287 1434/2218/287 1436/2220/287 +f 1434/2218/287 1543/2391/287 1435/2219/287 +f 1435/2219/287 1544/2392/287 1436/2220/287 +f 1438/2222/289 1545/2393/289 1439/2223/289 +f 1545/2393/289 1546/2394/289 1439/2223/289 +f 1546/2394/289 1547/2395/289 1439/2223/289 +f 1439/2223/289 1548/2396/289 1549/2397/289 +f 1549/2397/289 1437/2221/289 1439/2223/289 +f 1440/2224/290 1443/2247/290 1441/2225/290 +f 1443/2227/287 1450/2245/287 1444/2228/287 +f 1445/2230/288 1448/2251/288 1446/2231/288 +f 1448/2233/286 1455/2243/286 1449/2234/286 +f 1450/2236/291 1456/2259/291 1451/2237/291 +f 1452/2238/292 1459/2254/292 1453/2239/292 +f 1455/2241/293 1452/2238/293 1454/2240/293 +f 1448/2233/286 1458/2248/286 1452/2242/286 +f 1443/2227/287 1457/2257/287 1456/2244/287 +f 1440/2224/293 1454/2240/293 1457/2246/293 +f 1458/2248/286 1464/2267/286 1459/2249/286 +f 1445/2230/291 1451/2237/291 1458/2250/291 +f 1450/2236/288 1445/2230/288 1447/2232/288 +f 1455/2241/290 1440/2224/290 1442/2226/290 +f 1459/2254/290 1467/2281/290 1460/2255/290 +f 1457/2257/287 1461/2265/287 1462/2258/287 +f 1456/2259/294 1462/2262/294 1463/2260/294 +f 1451/2237/294 1463/2260/294 1464/2261/294 +f 1454/2240/292 1453/2239/292 1461/2256/292 +f 1463/2260/288 1465/2263/288 1466/2264/288 +f 1461/2265/295 1460/2398/295 1465/2266/295 +f 1464/2267/286 1466/2399/286 1467/2268/286 +f 1465/2266/287 1460/2398/287 1469/2270/287 +f 1469/2270/287 1471/2400/287 1473/2401/287 +f 1473/2401/287 1468/2269/287 1469/2270/287 +f 1465/2263/288 1468/2402/288 1470/2271/288 +f 1471/2272/289 1474/2280/289 1472/2273/289 +f 1475/2277/286 1467/2268/286 1466/2399/286 +f 1466/2399/286 1470/2403/286 1475/2277/286 +f 1470/2403/286 1472/2275/286 1475/2277/286 +f 1472/2273/291 1470/2404/291 1468/2278/291 +f 1471/2272/293 1469/2405/293 1475/2279/293 +f 1467/2281/290 1475/2406/290 1469/2282/290 +f 1446/2283/296 1449/2407/296 1441/2284/296 +f 1476/2286/290 1480/2312/290 1477/2287/290 +f 1479/2289/286 1487/2310/286 1480/2290/286 +f 1481/2292/288 1485/2316/288 1482/2293/288 +f 1484/2295/287 1491/2308/287 1485/2296/287 +f 1484/2298/296 1481/2408/296 1483/2299/296 +f 1486/2301/291 1492/2327/291 1487/2302/291 +f 1488/2303/292 1494/2322/292 1489/2304/292 +f 1490/2305/293 1489/2304/293 1491/2306/293 +f 1489/2307/287 1495/2314/287 1485/2296/287 +f 1492/2309/286 1493/2325/286 1480/2290/286 +f 1493/2311/293 1490/2305/293 1477/2287/293 +f 1494/2313/287 1500/2335/287 1495/2314/287 +f 1495/2315/291 1486/2301/291 1482/2293/291 +f 1478/2300/296 1483/2299/296 1479/2317/296 +f 1483/2294/288 1482/2293/288 1487/2302/288 +f 1478/2288/290 1477/2287/290 1491/2306/290 +f 1496/2321/290 1503/2350/290 1494/2322/290 +f 1498/2324/286 1497/2333/286 1493/2325/286 +f 1499/2326/294 1498/2330/294 1492/2327/294 +f 1500/2328/294 1499/2326/294 1486/2301/294 +f 1497/2323/292 1488/2303/292 1490/2305/292 +f 1502/2331/288 1501/2329/288 1499/2326/288 +f 1501/2332/297 1496/2409/297 1497/2333/297 +f 1503/2334/287 1502/2344/287 1500/2335/287 +f 1506/2338/286 1496/2409/286 1501/2332/286 +f 1501/2332/286 1510/2410/286 1506/2338/286 +f 1510/2410/286 1504/2336/286 1506/2338/286 +f 1507/2339/288 1510/2411/288 1501/2329/288 +f 1508/2340/289 1511/2348/289 1505/2341/289 +f 1502/2344/287 1503/2334/287 1509/2345/287 +f 1509/2345/287 1511/2412/287 1508/2413/287 +f 1508/2413/287 1507/2343/287 1509/2345/287 +f 1510/2346/291 1507/2414/291 1508/2340/291 +f 1509/2347/293 1506/2415/293 1505/2341/293 +f 1506/2349/290 1509/2416/290 1503/2350/290 +s 1 +f 1402/2176/296 1550/2417/298 1551/2418/296 +f 1405/2179/298 1552/2419/299 1550/2417/298 +f 1552/2419/299 1406/2182/288 1553/2420/288 +f 1553/2420/288 1411/2187/300 1554/2421/300 +f 1411/2187/300 1555/2422/301 1554/2421/300 +f 1413/2191/301 1556/2423/289 1555/2422/301 +f 1412/2190/289 1557/2424/302 1556/2423/289 +f 1417/2195/302 1558/2425/303 1557/2424/302 +f 1419/2198/303 1559/2426/290 1558/2425/303 +f 1421/2201/290 1560/2427/304 1559/2426/290 +f 1414/2428/298 1426/2429/299 1416/2430/299 +f 1560/2427/304 1424/2207/305 1561/2431/305 +f 1424/2207/305 1551/2432/296 1561/2431/305 +f 1556/2423/306 1562/2433/307 1555/2422/307 +f 1563/2434/303 1564/2435/302 1565/2436/302 +f 1555/2422/307 1566/2437/308 1554/2421/308 +f 1554/2421/308 1567/2438/309 1553/2420/309 +f 1551/2432/310 1568/2439/311 1561/2431/311 +f 1551/2418/310 1569/2440/312 1570/2441/310 +f 1553/2420/309 1571/2442/313 1552/2419/313 +f 1561/2431/311 1572/2443/314 1560/2427/314 +f 1552/2419/313 1569/2444/312 1550/2417/312 +f 1560/2427/314 1573/2445/315 1559/2426/315 +f 1559/2426/315 1563/2446/316 1558/2425/316 +f 1558/2425/316 1565/2447/317 1557/2424/317 +f 1557/2424/317 1574/2448/306 1556/2423/306 +f 1575/2449/318 1576/2450/319 1577/2451/319 +f 1562/2452/301 1578/2453/300 1566/2454/300 +f 1570/2455/296 1579/2456/305 1568/2457/305 +f 1571/2458/299 1575/2459/298 1569/2460/298 +f 1573/2461/290 1580/2462/303 1563/2434/303 +f 1574/2463/289 1581/2464/301 1562/2452/301 +f 1567/2465/288 1582/2466/299 1571/2458/299 +f 1572/2467/304 1583/2468/290 1573/2461/290 +f 1574/2463/289 1564/2435/302 1584/2469/289 +f 1567/2465/288 1578/2453/300 1585/2470/288 +f 1568/2457/305 1586/2471/304 1572/2467/304 +f 1570/2472/296 1575/2459/298 1577/2473/296 +f 1587/2474/305 1393/2165/304 1588/2475/304 +f 1580/2476/320 1589/2477/321 1564/2478/321 +f 1578/2479/322 1590/2480/323 1591/2481/322 +f 1579/2482/324 1576/2483/319 1587/2474/324 +f 1582/2484/325 1592/2485/318 1575/2486/318 +f 1583/2487/326 1593/2488/320 1580/2489/320 +f 1584/2490/327 1590/2480/323 1581/2491/323 +f 1585/2492/328 1594/2493/325 1582/2494/325 +f 1583/2495/326 1588/2475/329 1595/2496/326 +f 1564/2497/321 1596/2498/327 1584/2499/327 +f 1585/2500/328 1591/2481/322 1597/2501/328 +f 1579/2502/324 1588/2475/329 1586/2503/329 +f 1381/2150/304 1400/2504/290 1380/2352/290 +f 1592/2485/298 1397/2351/296 1576/2450/296 +f 1593/2488/303 1387/2158/302 1589/2477/302 +f 1590/2480/301 1382/2151/300 1591/2481/300 +f 1576/2483/296 1395/2168/305 1587/2474/305 +f 1594/2493/299 1375/2142/298 1592/2485/298 +f 1595/2496/290 1390/2161/303 1593/2488/303 +f 1596/2498/289 1383/2153/301 1590/2480/301 +f 1597/2501/288 1377/2145/299 1594/2493/299 +f 1588/2475/304 1392/2163/290 1595/2496/290 +f 1589/2477/302 1386/2156/289 1596/2498/289 +f 1591/2481/300 1379/2148/288 1597/2501/288 +f 1396/2169/301 1520/2505/300 1394/2167/300 +f 1374/2141/289 1513/2506/302 1512/2507/289 +f 1389/2160/299 1518/2508/298 1388/2354/298 +f 1381/2152/304 1516/2509/305 1515/2510/304 +f 1374/2170/289 1399/2511/301 1396/2356/301 +f 1376/2144/302 1514/2512/303 1513/2513/302 +f 1389/2355/299 1398/2514/288 1519/2515/299 +f 1385/2155/296 1516/2516/305 1384/2353/305 +f 1380/2149/290 1514/2517/303 1378/2147/303 +f 1391/2164/288 1520/2518/300 1398/2519/288 +f 1385/2157/296 1518/2520/298 1517/2521/296 +f 1408/2522/304 1527/2523/305 1410/2524/305 +f 1422/2525/301 1523/2526/289 1403/2527/289 +f 1401/2528/302 1521/2529/303 1404/2530/303 +f 1416/2430/299 1525/2531/288 1418/2532/288 +f 1410/2524/305 1427/2533/296 1415/2534/296 +f 1404/2530/303 1529/2535/290 1409/2536/290 +f 1418/2532/288 1425/2537/300 1420/2538/300 +f 1415/2534/296 1526/2539/298 1414/2428/298 +f 1409/2536/290 1528/2540/304 1408/2522/304 +f 1420/2538/300 1524/2541/301 1422/2525/301 +f 1403/2542/289 1522/2543/302 1401/2528/302 +f 1531/2544/287 1598/2545/330 1599/2546/287 +f 1530/2547/330 1600/2548/296 1598/2549/330 +f 1600/2548/296 1428/2550/331 1601/2551/331 +f 1428/2550/331 1602/2552/286 1601/2551/331 +f 1534/2553/286 1603/2554/297 1602/2552/286 +f 1603/2554/297 1430/2555/289 1604/2556/289 +f 1430/2555/289 1605/2557/295 1604/2556/289 +f 1532/2558/295 1599/2546/287 1605/2557/295 +f 1606/2559/332 1607/2560/333 1608/2561/333 +f 1609/2562/334 1610/2563/335 1611/2564/335 +f 1612/2565/336 1613/2566/337 1614/2567/337 +f 1615/2568/338 1613/2566/337 1616/2569/338 +f 1609/2562/334 1612/2565/336 1617/2570/334 +f 1618/2571/339 1607/2560/333 1619/2572/339 +f 1610/2563/335 1606/2559/332 1611/2564/335 +f 1618/2571/339 1615/2573/338 1616/2574/338 +f 1431/2575/340 1619/2572/341 1607/2560/342 +f 1537/2576/343 1607/2560/342 1620/2577/344 +f 1432/2578/345 1620/2577/344 1610/2563/346 +f 1538/2579/347 1610/2563/346 1617/2570/348 +f 1612/2565/349 1538/2580/347 1617/2570/348 +f 1539/2581/350 1612/2565/349 1614/2567/351 +f 1535/2582/352 1614/2567/351 1615/2568/353 +f 1536/2583/354 1615/2573/353 1619/2572/341 +f 1541/2584/355 1616/2569/356 1613/2566/357 +f 1542/2585/358 1613/2566/357 1621/2586/359 +f 1434/2587/360 1621/2586/359 1609/2562/361 +f 1543/2588/362 1609/2562/361 1611/2564/363 +f 1435/2589/364 1611/2564/363 1606/2559/365 +f 1544/2590/366 1606/2559/365 1608/2561/367 +f 1618/2571/368 1544/2591/366 1608/2561/367 +f 1540/2592/369 1618/2571/368 1616/2574/356 +f 1546/2593/287 1622/2594/370 1623/2595/287 +f 1622/2594/370 1438/2596/288 1624/2597/288 +f 1438/2596/288 1625/2598/371 1624/2597/288 +f 1437/2599/371 1626/2600/286 1625/2598/371 +f 1549/2601/286 1627/2602/372 1626/2600/286 +f 1627/2602/372 1439/2603/290 1628/2604/290 +f 1439/2603/290 1629/2605/373 1628/2604/290 +f 1547/2606/373 1623/2595/287 1629/2607/373 +f 1402/2176/296 1405/2179/298 1550/2417/298 +f 1405/2179/298 1407/2183/299 1552/2419/299 +f 1552/2419/299 1407/2183/299 1406/2182/288 +f 1553/2420/288 1406/2182/288 1411/2187/300 +f 1411/2187/300 1413/2191/301 1555/2422/301 +f 1413/2191/301 1412/2190/289 1556/2423/289 +f 1412/2190/289 1417/2195/302 1557/2424/302 +f 1417/2195/302 1419/2198/303 1558/2425/303 +f 1419/2198/303 1421/2201/290 1559/2426/290 +f 1421/2201/290 1423/2204/304 1560/2427/304 +f 1414/2428/298 1526/2539/298 1426/2429/299 +f 1560/2427/304 1423/2204/304 1424/2207/305 +f 1424/2207/305 1402/2368/296 1551/2432/296 +f 1556/2423/306 1574/2608/306 1562/2433/307 +f 1563/2434/303 1580/2462/303 1564/2435/302 +f 1555/2422/307 1562/2609/307 1566/2437/308 +f 1554/2421/308 1566/2610/308 1567/2438/309 +f 1551/2432/310 1570/2611/310 1568/2439/311 +f 1551/2418/310 1550/2417/312 1569/2440/312 +f 1553/2420/309 1567/2612/309 1571/2442/313 +f 1561/2431/311 1568/2613/311 1572/2443/314 +f 1552/2419/313 1571/2614/313 1569/2444/312 +f 1560/2427/314 1572/2615/314 1573/2445/315 +f 1559/2426/315 1573/2616/315 1563/2446/316 +f 1558/2425/316 1563/2617/316 1565/2447/317 +f 1557/2424/317 1565/2618/317 1574/2448/306 +f 1575/2449/318 1592/2485/318 1576/2450/319 +f 1562/2452/301 1581/2464/301 1578/2453/300 +f 1570/2455/296 1577/2619/296 1579/2456/305 +f 1571/2458/299 1582/2466/299 1575/2459/298 +f 1573/2461/290 1583/2468/290 1580/2462/303 +f 1574/2463/289 1584/2469/289 1581/2464/301 +f 1567/2465/288 1585/2470/288 1582/2466/299 +f 1572/2467/304 1586/2471/304 1583/2468/290 +f 1574/2463/289 1565/2436/302 1564/2435/302 +f 1567/2465/288 1566/2454/300 1578/2453/300 +f 1568/2457/305 1579/2456/305 1586/2471/304 +f 1570/2472/296 1569/2460/298 1575/2459/298 +f 1587/2474/305 1395/2168/305 1393/2165/304 +f 1580/2476/320 1593/2488/320 1589/2477/321 +f 1578/2479/322 1581/2620/323 1590/2480/323 +f 1579/2482/324 1577/2621/319 1576/2483/319 +f 1582/2484/325 1594/2493/325 1592/2485/318 +f 1583/2487/326 1595/2496/326 1593/2488/320 +f 1584/2490/327 1596/2498/327 1590/2480/323 +f 1585/2492/328 1597/2501/328 1594/2493/325 +f 1583/2495/326 1586/2622/329 1588/2475/329 +f 1564/2497/321 1589/2477/321 1596/2498/327 +f 1585/2500/328 1578/2623/322 1591/2481/322 +f 1579/2502/324 1587/2474/324 1588/2475/329 +f 1381/2150/304 1515/2624/304 1400/2504/290 +f 1592/2485/298 1375/2142/298 1397/2351/296 +f 1593/2488/303 1390/2161/303 1387/2158/302 +f 1590/2480/301 1383/2153/301 1382/2151/300 +f 1576/2483/296 1397/2171/296 1395/2168/305 +f 1594/2493/299 1377/2145/299 1375/2142/298 +f 1595/2496/290 1392/2163/290 1390/2161/303 +f 1596/2498/289 1386/2156/289 1383/2153/301 +f 1597/2501/288 1379/2148/288 1377/2145/299 +f 1588/2475/304 1393/2165/304 1392/2163/290 +f 1589/2477/302 1387/2158/302 1386/2156/289 +f 1591/2481/300 1382/2151/300 1379/2148/288 +f 1396/2169/301 1399/2625/301 1520/2505/300 +f 1374/2141/289 1376/2143/302 1513/2506/302 +f 1389/2160/299 1519/2626/299 1518/2508/298 +f 1381/2152/304 1384/2154/305 1516/2509/305 +f 1374/2170/289 1512/2627/289 1399/2511/301 +f 1376/2144/302 1378/2146/303 1514/2512/303 +f 1389/2355/299 1391/2162/288 1398/2514/288 +f 1385/2155/296 1517/2628/296 1516/2516/305 +f 1380/2149/290 1400/2629/290 1514/2517/303 +f 1391/2164/288 1394/2166/300 1520/2518/300 +f 1385/2157/296 1388/2159/298 1518/2520/298 +f 1408/2522/304 1528/2540/304 1527/2523/305 +f 1422/2525/301 1524/2541/301 1523/2526/289 +f 1401/2528/302 1522/2543/302 1521/2529/303 +f 1416/2430/299 1426/2429/299 1525/2531/288 +f 1410/2524/305 1527/2523/305 1427/2533/296 +f 1404/2530/303 1521/2529/303 1529/2535/290 +f 1418/2532/288 1525/2531/288 1425/2537/300 +f 1415/2534/296 1427/2533/296 1526/2539/298 +f 1409/2536/290 1529/2535/290 1528/2540/304 +f 1420/2538/300 1425/2537/300 1524/2541/301 +f 1403/2542/289 1523/2630/289 1522/2543/302 +f 1531/2544/287 1530/2631/330 1598/2545/330 +f 1530/2547/330 1429/2632/296 1600/2548/296 +f 1600/2548/296 1429/2632/296 1428/2550/331 +f 1428/2550/331 1534/2553/286 1602/2552/286 +f 1534/2553/286 1533/2633/297 1603/2554/297 +f 1603/2554/297 1533/2633/297 1430/2555/289 +f 1430/2555/289 1532/2558/295 1605/2557/295 +f 1532/2558/295 1531/2544/287 1599/2546/287 +f 1606/2559/332 1620/2577/332 1607/2560/333 +f 1609/2562/334 1617/2570/334 1610/2563/335 +f 1612/2565/336 1621/2586/336 1613/2566/337 +f 1615/2568/338 1614/2567/337 1613/2566/337 +f 1609/2562/334 1621/2586/336 1612/2565/336 +f 1618/2571/339 1608/2561/333 1607/2560/333 +f 1610/2563/335 1620/2577/332 1606/2559/332 +f 1618/2571/339 1619/2572/339 1615/2573/338 +f 1431/2575/340 1536/2634/354 1619/2572/341 +f 1537/2576/343 1431/2635/340 1607/2560/342 +f 1432/2578/345 1537/2636/343 1620/2577/344 +f 1538/2579/347 1432/2637/345 1610/2563/346 +f 1612/2565/349 1433/2638/374 1538/2580/347 +f 1539/2581/350 1433/2639/374 1612/2565/349 +f 1535/2582/352 1539/2640/350 1614/2567/351 +f 1536/2583/354 1535/2641/352 1615/2573/353 +f 1541/2584/355 1540/2642/369 1616/2569/356 +f 1542/2585/358 1541/2643/355 1613/2566/357 +f 1434/2587/360 1542/2644/358 1621/2586/359 +f 1543/2588/362 1434/2645/360 1609/2562/361 +f 1435/2589/364 1543/2646/362 1611/2564/363 +f 1544/2590/366 1435/2647/364 1606/2559/365 +f 1618/2571/368 1436/2648/375 1544/2591/366 +f 1540/2592/369 1436/2649/375 1618/2571/368 +f 1546/2593/287 1545/2650/370 1622/2594/370 +f 1622/2594/370 1545/2650/370 1438/2596/288 +f 1438/2596/288 1437/2599/371 1625/2598/371 +f 1437/2599/371 1549/2601/286 1626/2600/286 +f 1549/2601/286 1548/2651/372 1627/2602/372 +f 1627/2602/372 1548/2651/372 1439/2603/290 +f 1439/2603/290 1547/2652/373 1629/2605/373 +f 1547/2606/373 1546/2593/287 1623/2595/287 +o Magazine +v 0.249996 0.000002 -3.562500 +v 0.249996 -1.124998 -3.375000 +v 0.249996 -1.124998 -3.562500 +v -0.187504 0.000002 -3.375000 +v -0.250004 -1.124998 -3.375000 +v -0.187504 -1.124998 -3.375000 +v -0.250004 0.000002 -5.000000 +v -0.250004 -1.124998 -5.187500 +v -0.250004 -1.124998 -5.000000 +v 0.187496 0.000002 -5.187500 +v 0.249996 -1.124998 -5.187500 +v 0.187496 -1.124998 -5.187500 +v -0.187504 -1.124998 -3.562500 +v -0.250004 -1.281248 -3.562500 +v -0.250004 -1.124998 -3.562500 +v 0.249996 0.000002 -5.000000 +v 0.187496 0.000002 -5.000000 +v -0.187504 -1.499998 -5.000000 +v 0.187496 -1.531248 -5.187500 +v 0.187496 -1.499998 -5.000000 +v 0.187496 -1.312498 -3.750000 +v 0.249996 -1.374998 -4.187500 +v 0.249996 -1.312498 -3.750000 +v 0.249996 0.000002 -4.812500 +v 0.249996 -1.124998 -4.375000 +v 0.249996 -1.124998 -4.812500 +v -0.250004 0.000002 -3.750000 +v -0.250004 -1.124998 -4.187500 +v -0.250004 -1.124998 -3.750000 +v -0.250004 -1.312498 -3.750000 +v 0.249996 0.000002 -3.750000 +v 0.187496 0.000002 -4.187500 +v 0.187496 0.000002 -3.750000 +v -0.250004 -1.499998 -5.000000 +v 0.249996 -1.531248 -5.187500 +v 0.249996 -1.499998 -5.000000 +v -0.250004 0.000002 -3.562500 +v 0.249996 0.000002 -4.187500 +v 0.249996 -1.124998 -3.750000 +v 0.249996 -1.124998 -4.187500 +v -0.250004 0.000002 -3.375000 +v -0.187504 -1.124998 -3.750000 +v -0.187504 -1.281248 -3.562500 +v 0.249996 0.000002 -3.375000 +v 0.187496 0.000002 -3.562500 +v 0.187496 0.000002 -3.375000 +v 0.187496 -1.124998 -5.000000 +v 0.249996 -1.124998 -5.000000 +v 0.249996 0.000002 -4.375000 +v 0.187496 0.000002 -4.812500 +v 0.187496 0.000002 -4.375000 +v -0.250004 -1.124998 -4.812500 +v -0.250004 -1.406248 -4.375000 +v -0.250004 -1.124998 -4.375000 +v -0.250004 0.000002 -4.375000 +v 0.249996 0.000002 -5.187500 +v -0.187504 -1.374998 -4.187500 +v 0.187496 -1.406248 -4.375000 +v 0.187496 -1.374998 -4.187500 +v 0.249996 -1.468748 -4.812500 +v 0.249996 -1.406248 -4.375000 +v -0.187504 -1.312498 -3.750000 +v 0.187496 -1.468748 -4.812500 +v -0.187504 0.000002 -4.375000 +v -0.250004 0.000002 -4.812500 +v -0.187504 -1.124998 -5.000000 +v -0.187504 -1.468748 -4.812500 +v -0.187504 -1.124998 -4.812500 +v -0.187504 0.000002 -3.750000 +v -0.250004 0.000002 -4.187500 +v 0.187496 -1.249998 -3.375000 +v 0.187496 -1.124998 -3.375000 +v -0.187504 0.000002 -5.000000 +v -0.250004 0.000002 -5.187500 +v 0.249996 -1.249998 -3.375000 +v 0.249996 -1.281248 -3.562500 +v -0.187504 -1.124998 -5.187500 +v 0.187496 -1.124998 -3.750000 +v 0.187496 -1.281248 -3.562500 +v -0.250004 -1.531248 -5.187500 +v 0.187496 -1.124998 -4.812500 +v -0.187504 -1.531248 -5.187500 +v 0.124996 0.000002 -4.812500 +v 0.124996 -0.187498 -4.375000 +v 0.124996 0.000002 -4.375000 +v -0.125004 0.000002 -4.812500 +v -0.125004 -0.187498 -5.000000 +v -0.125004 0.000002 -5.000000 +v -0.125004 0.000002 -5.125000 +v 0.124996 -0.187498 -5.125000 +v 0.124996 0.000002 -5.125000 +v 0.124996 -0.187498 -5.000000 +v 0.124996 0.000002 -5.000000 +v 0.124996 0.000002 -3.437500 +v -0.125004 -0.187498 -3.437500 +v -0.125004 0.000002 -3.437500 +v -0.125004 -0.187498 -5.125000 +v 0.124996 -0.187498 -4.187500 +v 0.124996 0.000002 -4.187500 +v -0.187504 0.000002 -5.187500 +v -0.187504 0.000002 -4.187500 +v -0.187504 -1.124998 -4.375000 +v -0.187504 -1.124998 -4.187500 +v -0.187504 0.000002 -3.562500 +v -0.187504 0.000002 -4.812500 +v -0.187504 -1.249998 -3.375000 +v -0.187504 -1.406248 -4.375000 +v 0.187496 -1.124998 -4.187500 +v 0.187496 -1.124998 -4.375000 +v 0.187496 -1.124998 -3.562500 +v -0.250004 -1.249998 -3.375000 +v -0.250004 -1.374998 -4.187500 +v -0.250004 -1.468748 -4.812500 +v 0.187496 0.125002 -4.375000 +v -0.125004 0.000002 -3.750000 +v -0.125004 0.000002 -3.562500 +v -0.125004 0.000002 -4.187500 +v -0.125004 0.000002 -4.375000 +v -0.125004 0.125002 -4.375000 +v 0.124996 0.000002 -3.562500 +v 0.124996 0.000002 -3.750000 +v 0.124996 -0.187498 -4.812500 +v -0.125004 -0.187498 -4.812500 +v -0.125004 -0.187498 -4.375000 +v 0.124996 -0.187498 -3.437500 +v -0.125004 -0.187498 -3.562500 +v 0.124996 -0.187498 -3.562500 +v -0.125004 -0.187498 -3.750000 +v 0.124996 -0.187498 -3.750000 +v -0.125004 -0.187498 -4.187500 +v -0.125004 0.125002 -4.812500 +v -0.187504 0.125002 -4.375000 +v 0.124996 0.125002 -4.375000 +v 0.187496 0.125002 -4.812500 +v 0.124996 0.125002 -4.812500 +v -0.187504 0.125002 -4.812500 +vt 0.582367 0.993056 +vt 0.575406 0.868056 +vt 0.582367 0.868056 +vt 0.559165 0.993056 +vt 0.556845 0.868056 +vt 0.559165 0.868056 +vt 0.487239 0.993056 +vt 0.480278 0.868056 +vt 0.487239 0.868056 +vt 0.464037 0.993056 +vt 0.461717 0.868056 +vt 0.464037 0.868056 +vt 0.547564 0.868056 +vt 0.549884 0.850694 +vt 0.549884 0.868056 +vt 0.468677 0.812500 +vt 0.461717 0.805556 +vt 0.468677 0.805556 +vt 0.069606 0.208333 +vt 0.062645 0.166667 +vt 0.069606 0.166667 +vt 0.116009 0.166667 +vt 0.099768 0.159722 +vt 0.116009 0.159722 +vt 0.633411 0.993056 +vt 0.617169 0.868056 +vt 0.633411 0.868056 +vt 0.538283 0.993056 +vt 0.522042 0.868056 +vt 0.538283 0.868056 +vt 0.538283 0.847222 +vt 0.515081 0.812500 +vt 0.498840 0.805556 +vt 0.515081 0.805556 +vt 0.487239 0.826389 +vt 0.062645 0.159722 +vt 0.069606 0.159722 +vt 0.549884 0.993056 +vt 0.610209 0.993056 +vt 0.593967 0.868056 +vt 0.610209 0.868056 +vt 0.556845 0.993056 +vt 0.540603 0.868056 +vt 0.547564 0.850694 +vt 0.529002 0.812500 +vt 0.522042 0.805556 +vt 0.529002 0.805556 +vt 0.645012 0.993056 +vt 0.642691 0.868056 +vt 0.645012 0.868056 +vt 0.491879 0.812500 +vt 0.475638 0.805556 +vt 0.491879 0.805556 +vt 0.498840 0.868056 +vt 0.515081 0.836806 +vt 0.515081 0.868056 +vt 0.515081 0.993056 +vt 0.651972 0.993056 +vt 0.651972 0.868056 +vt 0.099768 0.208333 +vt 0.092807 0.166667 +vt 0.099768 0.166667 +vt 0.076566 0.159722 +vt 0.092807 0.159722 +vt 0.116009 0.208333 +vt 0.635731 0.829861 +vt 0.642691 0.826389 +vt 0.645012 0.826389 +vt 0.491879 0.763889 +vt 0.475638 0.756944 +vt 0.491879 0.756944 +vt 0.529002 0.763889 +vt 0.522042 0.756944 +vt 0.529002 0.756944 +vt 0.651972 0.822917 +vt 0.489559 0.868056 +vt 0.496520 0.829861 +vt 0.496520 0.868056 +vt 0.515081 0.763889 +vt 0.498840 0.756944 +vt 0.515081 0.756944 +vt 0.610209 0.840278 +vt 0.573086 0.854167 +vt 0.573086 0.868056 +vt 0.468677 0.763889 +vt 0.461717 0.756944 +vt 0.468677 0.756944 +vt 0.575406 0.854167 +vt 0.582367 0.850694 +vt 0.480278 0.993056 +vt 0.477958 0.868056 +vt 0.573086 0.993056 +vt 0.575406 0.993056 +vt 0.591647 0.868056 +vt 0.584687 0.850694 +vt 0.591647 0.847222 +vt 0.122970 0.208333 +vt 0.122970 0.166667 +vt 0.480278 0.822917 +vt 0.116009 0.215278 +vt 0.635731 0.868056 +vt 0.593967 0.847222 +vt 0.069606 0.215278 +vt 0.062645 0.208333 +vt 0.552204 0.819444 +vt 0.568446 0.798611 +vt 0.568446 0.819444 +vt 0.552204 0.750000 +vt 0.545244 0.770833 +vt 0.545244 0.750000 +vt 0.533643 0.770833 +vt 0.540603 0.798611 +vt 0.533643 0.798611 +vt 0.540603 0.819444 +vt 0.545244 0.798611 +vt 0.545244 0.819444 +vt 0.610209 0.798611 +vt 0.603248 0.770833 +vt 0.610209 0.770833 +vt 0.540603 0.770833 +vt 0.540603 0.750000 +vt 0.575406 0.798611 +vt 0.575406 0.819444 +vt 0.477958 0.993056 +vt 0.663573 0.993056 +vt 0.656613 0.868056 +vt 0.663573 0.868056 +vt 0.547564 0.993056 +vt 0.496520 0.993056 +vt 0.129930 0.166667 +vt 0.122970 0.159722 +vt 0.129930 0.159722 +vt 0.498840 0.993056 +vt 0.540603 0.993056 +vt 0.665893 0.993056 +vt 0.665893 0.868056 +vt 0.129930 0.208333 +vt 0.477958 0.822917 +vt 0.654292 0.868056 +vt 0.656613 0.993056 +vt 0.654292 0.993056 +vt 0.489559 0.993056 +vt 0.092807 0.208333 +vt 0.076566 0.166667 +vt 0.677494 0.993056 +vt 0.670534 0.868056 +vt 0.677494 0.868056 +vt 0.591647 0.993056 +vt 0.584687 0.868056 +vt 0.642691 0.993056 +vt 0.679814 0.993056 +vt 0.679814 0.868056 +vt 0.076566 0.208333 +vt 0.584687 0.993056 +vt 0.092807 0.215278 +vt 0.129930 0.215278 +vt 0.668213 0.868056 +vt 0.670534 0.993056 +vt 0.668213 0.993056 +vt 0.635731 0.993056 +vt 0.593967 0.993056 +vt 0.099768 0.215278 +vt 0.617343 0.837301 +vt 0.633411 0.829861 +vt 0.498840 0.829861 +vt 0.559165 0.854167 +vt 0.556845 0.854167 +vt 0.464037 0.822917 +vt 0.522024 0.840782 +vt 0.540603 0.847222 +vt 0.489559 0.826389 +vt 0.656613 0.861111 +vt 0.663573 0.861111 +vt 0.670534 0.861111 +vt 0.677494 0.861111 +vt 0.526682 0.770833 +vt 0.526682 0.798611 +vt 0.468677 0.770833 +vt 0.475638 0.763889 +vt 0.475638 0.770833 +vt 0.658933 0.854167 +vt 0.675174 0.840278 +vt 0.675174 0.854167 +vt 0.522042 0.763889 +vt 0.515081 0.770833 +vt 0.522042 0.770833 +vt 0.498840 0.770833 +vt 0.491879 0.770833 +vt 0.498840 0.763889 +vt 0.464037 0.770833 +vt 0.464037 0.798611 +vt 0.461717 0.763889 +vt 0.658933 0.812500 +vt 0.675174 0.798611 +vt 0.675174 0.812500 +vt 0.522042 0.798611 +vt 0.475638 0.798611 +vt 0.468677 0.798611 +vt 0.515081 0.798611 +vt 0.498840 0.798611 +vt 0.491879 0.798611 +vt 0.552204 0.798611 +vt 0.552204 0.770833 +vt 0.568446 0.770833 +vt 0.603248 0.798611 +vt 0.598608 0.770833 +vt 0.598608 0.798611 +vt 0.591647 0.770833 +vt 0.591647 0.798611 +vt 0.575406 0.770833 +vt 0.568446 0.750000 +vt 0.598608 0.819444 +vt 0.603248 0.819444 +vt 0.603248 0.750000 +vt 0.598608 0.750000 +vt 0.591647 0.750000 +vt 0.591647 0.819444 +vt 0.575406 0.750000 +vt 0.658933 0.798611 +vt 0.675174 0.791667 +vt 0.675174 0.833333 +vt 0.658933 0.840278 +vt 0.658933 0.833333 +vt 0.679814 0.798611 +vt 0.679814 0.791667 +vt 0.675174 0.819444 +vt 0.658933 0.819444 +vt 0.654292 0.791667 +vt 0.654292 0.798611 +vt 0.679814 0.840278 +vt 0.679814 0.833333 +vt 0.675174 0.777778 +vt 0.658933 0.791667 +vt 0.658933 0.777778 +vt 0.654292 0.833333 +vt 0.654292 0.840278 +vt 0.461717 0.993056 +vt 0.461717 0.812500 +vt 0.617169 0.993056 +vt 0.522042 0.993056 +vt 0.498840 0.812500 +vt 0.522042 0.812500 +vt 0.475638 0.812500 +vt 0.062645 0.215278 +vt 0.076566 0.215278 +vt 0.122970 0.215278 +vt 0.461717 0.822917 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 -0.9864 0.1644 +vn 0.0000 -0.9899 0.1414 +s off +f 1630/2653/376 1631/2654/376 1632/2655/376 +f 1633/2656/377 1634/2657/377 1635/2658/377 +f 1636/2659/378 1637/2660/378 1638/2661/378 +f 1639/2662/379 1640/2663/379 1641/2664/379 +f 1642/2665/379 1643/2666/379 1644/2667/379 +f 1645/2668/380 1639/2669/380 1646/2670/380 +f 1647/2671/381 1648/2672/381 1649/2673/381 +f 1650/2674/382 1651/2675/382 1652/2676/382 +f 1653/2677/376 1654/2678/376 1655/2679/376 +f 1656/2680/378 1657/2681/378 1658/2682/378 +f 1657/2681/378 1659/2683/378 1658/2682/378 +f 1660/2684/380 1661/2685/380 1662/2686/380 +f 1637/2660/378 1663/2687/378 1638/2661/378 +f 1649/2673/381 1664/2688/381 1665/2689/381 +f 1666/2690/379 1642/2665/379 1644/2667/379 +f 1667/2691/376 1668/2692/376 1669/2693/376 +f 1670/2694/378 1644/2667/378 1634/2657/378 +f 1671/2695/378 1672/2696/378 1642/2665/378 +f 1673/2697/380 1674/2698/380 1675/2699/380 +f 1645/2700/377 1676/2701/377 1677/2702/377 +f 1678/2703/380 1679/2704/380 1680/2705/380 +f 1681/2706/378 1682/2707/378 1683/2708/378 +f 1684/2709/378 1681/2706/378 1683/2708/378 +f 1685/2710/376 1677/2702/376 1640/2711/376 +f 1686/2712/381 1687/2713/381 1688/2714/381 +f 1687/2713/382 1689/2715/382 1690/2716/382 +f 1691/2717/382 1688/2714/382 1650/2674/382 +f 1676/2701/376 1692/2718/376 1649/2719/376 +f 1676/2701/377 1665/2720/377 1677/2702/377 +f 1693/2721/380 1694/2722/380 1684/2723/380 +f 1633/2724/380 1666/2725/380 1670/2726/380 +f 1640/2711/376 1665/2720/376 1664/2727/376 +f 1695/2728/378 1696/2729/378 1697/2730/378 +f 1698/2731/380 1699/2732/380 1656/2733/380 +f 1651/2734/376 1654/2678/376 1669/2693/376 +f 1635/2658/377 1700/2735/377 1701/2736/377 +f 1702/2737/380 1703/2738/380 1636/2739/380 +f 1632/2655/376 1704/2740/376 1705/2741/376 +f 1703/2742/379 1706/2743/379 1637/2660/379 +f 1675/2744/377 1635/2658/377 1701/2736/377 +f 1673/2745/377 1701/2736/377 1631/2654/377 +f 1707/2746/376 1708/2747/376 1650/2748/376 +f 1672/2749/381 1650/2674/381 1708/2750/381 +f 1706/2743/379 1709/2751/379 1637/2660/379 +f 1659/2752/382 1686/2712/382 1691/2717/382 +f 1655/2679/379 1692/2718/379 1710/2753/379 +f 1669/2693/376 1652/2754/376 1651/2734/376 +f 1663/2755/381 1711/2756/381 1647/2671/381 +f 1712/2757/378 1713/2758/378 1714/2759/378 +f 1715/2760/376 1716/2761/376 1717/2762/376 +f 1718/2763/377 1719/2764/377 1720/2765/377 +f 1720/2766/378 1721/2767/378 1722/2768/378 +f 1723/2769/379 1724/2770/379 1725/2771/379 +f 1717/2762/376 1726/2772/376 1718/2773/376 +f 1714/2759/378 1727/2774/378 1728/2775/378 +f 1729/2776/379 1641/2664/379 1706/2743/379 +f 1730/2777/378 1731/2778/378 1732/2779/378 +f 1733/2780/378 1671/2695/378 1642/2665/378 +f 1734/2781/378 1695/2728/378 1697/2730/378 +f 1700/2782/381 1705/2783/381 1704/2784/381 +f 1694/2785/379 1697/2730/379 1681/2706/379 +f 1658/2682/377 1698/2786/377 1656/2680/377 +f 1699/2787/379 1732/2779/379 1657/2788/379 +f 1735/2789/381 1708/2750/381 1700/2782/381 +f 1641/2664/379 1711/2790/379 1706/2743/379 +f 1683/2791/377 1693/2792/377 1684/2793/377 +f 1638/2661/377 1702/2794/377 1636/2659/377 +f 1736/2795/382 1692/2796/382 1687/2713/382 +f 1680/2797/376 1737/2798/376 1738/2799/376 +f 1662/2800/376 1739/2801/376 1707/2746/376 +f 1646/2802/376 1710/2753/376 1676/2701/376 +f 1678/2803/377 1738/2799/377 1654/2804/377 +f 1696/2805/381 1649/2673/381 1692/2796/381 +f 1632/2655/379 1674/2806/379 1630/2653/379 +f 1682/2807/382 1696/2805/382 1736/2795/382 +f 1740/2808/381 1672/2749/381 1735/2789/381 +f 1669/2809/379 1661/2810/379 1667/2811/379 +f 1655/2679/379 1679/2812/379 1653/2677/379 +f 1688/2714/381 1690/2716/381 1651/2675/381 +f 1660/2813/377 1707/2746/377 1668/2692/377 +f 1736/2795/381 1741/2814/381 1682/2807/381 +f 1655/2679/376 1690/2815/376 1689/2816/376 +f 1701/2736/377 1704/2740/377 1631/2654/377 +f 1697/2730/379 1742/2817/379 1681/2706/379 +f 1707/2746/377 1652/2754/377 1668/2692/377 +f 1634/2657/377 1735/2818/377 1635/2658/377 +f 1644/2667/378 1740/2819/378 1634/2657/378 +f 1632/2655/379 1708/2747/379 1739/2801/379 +f 1640/2663/379 1648/2820/379 1641/2664/379 +f 1683/2708/378 1741/2821/378 1657/2681/378 +f 1658/2682/377 1691/2822/377 1671/2695/377 +f 1638/2661/377 1647/2823/377 1695/2728/377 +f 1732/2779/380 1683/2824/380 1657/2825/380 +f 1738/2799/380 1669/2826/380 1654/2827/380 +f 1725/2828/380 1675/2699/380 1723/2829/380 +f 1717/2830/380 1734/2831/380 1715/2832/380 +f 1679/2833/376 1743/2834/376 1680/2835/376 +f 1725/2828/380 1733/2836/380 1633/2724/380 +f 1744/2837/380 1733/2836/380 1745/2838/380 +f 1746/2839/380 1698/2731/380 1744/2837/380 +f 1747/2840/380 1730/2841/380 1746/2839/380 +f 1718/2842/380 1702/2737/380 1717/2830/380 +f 1720/2843/380 1729/2844/380 1718/2842/380 +f 1715/2845/376 1748/2846/376 1747/2847/376 +f 1723/2829/380 1674/2698/380 1749/2848/380 +f 1712/2849/380 1646/2670/380 1722/2850/380 +f 1749/2848/380 1662/2686/380 1750/2851/380 +f 1750/2851/380 1661/2685/380 1728/2852/380 +f 1728/2852/380 1680/2705/380 1714/2853/380 +f 1720/2843/380 1646/2670/380 1639/2669/380 +f 1751/2854/380 1716/2761/380 1752/2855/380 +f 1713/2758/380 1752/2855/380 1753/2856/380 +f 1754/2857/380 1755/2858/380 1724/2770/380 +f 1756/2859/380 1757/2860/380 1755/2858/380 +f 1758/2861/380 1759/2862/380 1757/2860/380 +f 1727/2774/380 1753/2856/380 1759/2862/380 +f 1721/2767/380 1726/2772/380 1716/2761/380 +f 1747/2863/376 1752/2855/376 1715/2760/376 +f 1749/2864/378 1754/2857/378 1723/2865/378 +f 1725/2866/376 1755/2858/376 1745/2867/376 +f 1722/2768/378 1751/2854/378 1712/2757/378 +f 1745/2867/376 1757/2860/376 1744/2868/376 +f 1750/2869/378 1756/2859/378 1749/2864/378 +f 1744/2868/376 1759/2862/376 1746/2870/376 +f 1728/2775/378 1758/2861/378 1750/2869/378 +f 1746/2870/376 1753/2856/376 1747/2863/376 +f 1760/2871/380 1761/2872/380 1748/2846/380 +f 1762/2873/380 1763/2874/380 1764/2875/380 +f 1747/2876/377 1761/2872/377 1693/2877/377 +f 1714/2878/378 1764/2875/378 1712/2879/378 +f 1734/2880/379 1760/2871/379 1715/2881/379 +f 1680/2882/377 1762/2873/377 1714/2883/377 +f 1693/2884/378 1765/2885/378 1734/2886/378 +f 1712/2887/379 1763/2874/379 1679/2888/379 +f 1630/2653/376 1673/2745/376 1631/2654/376 +f 1633/2656/377 1670/2694/377 1634/2657/377 +f 1636/2659/378 1703/2742/378 1637/2660/378 +f 1639/2662/379 1685/2889/379 1640/2663/379 +f 1642/2665/379 1672/2696/379 1643/2666/379 +f 1645/2668/380 1685/2890/380 1639/2669/380 +f 1647/2671/381 1711/2756/381 1648/2672/381 +f 1650/2674/382 1688/2714/382 1651/2675/382 +f 1653/2677/376 1678/2891/376 1654/2678/376 +f 1656/2680/378 1699/2892/378 1657/2681/378 +f 1657/2681/378 1741/2821/378 1659/2683/378 +f 1660/2684/380 1667/2893/380 1661/2685/380 +f 1637/2660/378 1709/2751/378 1663/2687/378 +f 1649/2673/381 1648/2672/381 1664/2688/381 +f 1666/2690/379 1733/2780/379 1642/2665/379 +f 1667/2691/376 1660/2813/376 1668/2692/376 +f 1670/2694/378 1666/2690/378 1644/2667/378 +f 1671/2695/378 1691/2822/378 1672/2696/378 +f 1673/2697/380 1630/2894/380 1674/2698/380 +f 1645/2700/377 1646/2802/377 1676/2701/377 +f 1678/2703/380 1653/2895/380 1679/2704/380 +f 1681/2706/378 1742/2817/378 1682/2707/378 +f 1684/2709/378 1694/2785/378 1681/2706/378 +f 1685/2710/376 1645/2700/376 1677/2702/376 +f 1686/2712/381 1736/2795/381 1687/2713/381 +f 1687/2713/382 1692/2796/382 1689/2715/382 +f 1691/2717/382 1686/2712/382 1688/2714/382 +f 1676/2701/376 1710/2753/376 1692/2718/376 +f 1676/2701/377 1649/2719/377 1665/2720/377 +f 1693/2721/380 1734/2831/380 1694/2722/380 +f 1633/2724/380 1733/2836/380 1666/2725/380 +f 1640/2711/376 1677/2702/376 1665/2720/376 +f 1695/2728/378 1647/2823/378 1696/2729/378 +f 1698/2731/380 1730/2841/380 1699/2732/380 +f 1651/2734/376 1690/2815/376 1654/2678/376 +f 1635/2658/377 1735/2818/377 1700/2735/377 +f 1702/2737/380 1729/2844/380 1703/2738/380 +f 1632/2655/376 1631/2654/376 1704/2740/376 +f 1703/2742/379 1729/2776/379 1706/2743/379 +f 1675/2744/377 1633/2656/377 1635/2658/377 +f 1673/2745/377 1675/2744/377 1701/2736/377 +f 1707/2746/376 1739/2801/376 1708/2747/376 +f 1672/2749/381 1691/2717/381 1650/2674/381 +f 1706/2743/379 1711/2790/379 1709/2751/379 +f 1659/2752/382 1741/2814/382 1686/2712/382 +f 1655/2679/379 1689/2816/379 1692/2718/379 +f 1669/2693/376 1668/2692/376 1652/2754/376 +f 1663/2755/381 1709/2896/381 1711/2756/381 +f 1712/2757/378 1751/2854/378 1713/2758/378 +f 1715/2760/376 1752/2855/376 1716/2761/376 +f 1718/2763/377 1726/2772/377 1719/2764/377 +f 1720/2766/378 1719/2764/378 1721/2767/378 +f 1723/2769/379 1754/2857/379 1724/2770/379 +f 1717/2762/376 1716/2761/376 1726/2772/376 +f 1714/2759/378 1713/2758/378 1727/2774/378 +f 1729/2776/379 1639/2662/379 1641/2664/379 +f 1730/2777/378 1693/2792/378 1731/2778/378 +f 1733/2780/378 1698/2786/378 1671/2695/378 +f 1734/2781/378 1702/2794/378 1695/2728/378 +f 1700/2782/381 1708/2750/381 1705/2783/381 +f 1694/2785/379 1734/2781/379 1697/2730/379 +f 1658/2682/377 1671/2695/377 1698/2786/377 +f 1699/2787/379 1730/2777/379 1732/2779/379 +f 1735/2789/381 1672/2749/381 1708/2750/381 +f 1641/2664/379 1648/2820/379 1711/2790/379 +f 1683/2791/377 1731/2778/377 1693/2792/377 +f 1638/2661/377 1695/2728/377 1702/2794/377 +f 1736/2795/382 1696/2805/382 1692/2796/382 +f 1680/2797/376 1661/2810/376 1737/2798/376 +f 1662/2800/376 1674/2806/376 1739/2801/376 +f 1646/2802/376 1679/2812/376 1710/2753/376 +f 1678/2803/377 1680/2797/377 1738/2799/377 +f 1696/2805/381 1647/2671/381 1649/2673/381 +f 1632/2655/379 1739/2801/379 1674/2806/379 +f 1682/2807/382 1742/2897/382 1696/2805/382 +f 1740/2808/381 1643/2898/381 1672/2749/381 +f 1669/2809/379 1737/2798/379 1661/2810/379 +f 1655/2679/379 1710/2753/379 1679/2812/379 +f 1688/2714/381 1687/2713/381 1690/2716/381 +f 1660/2813/377 1662/2800/377 1707/2746/377 +f 1736/2795/381 1686/2712/381 1741/2814/381 +f 1655/2679/376 1654/2678/376 1690/2815/376 +f 1701/2736/377 1700/2735/377 1704/2740/377 +f 1697/2730/379 1696/2729/379 1742/2817/379 +f 1707/2746/377 1650/2748/377 1652/2754/377 +f 1634/2657/377 1740/2819/377 1735/2818/377 +f 1644/2667/378 1643/2666/378 1740/2819/378 +f 1632/2655/379 1705/2741/379 1708/2747/379 +f 1640/2663/379 1664/2899/379 1648/2820/379 +f 1683/2708/378 1682/2707/378 1741/2821/378 +f 1658/2682/377 1659/2683/377 1691/2822/377 +f 1638/2661/377 1663/2687/377 1647/2823/377 +f 1732/2779/380 1731/2778/380 1683/2824/380 +f 1738/2799/380 1737/2798/380 1669/2826/380 +f 1725/2828/380 1633/2724/380 1675/2699/380 +f 1717/2830/380 1702/2737/380 1734/2831/380 +f 1679/2833/376 1763/2874/376 1743/2834/376 +f 1725/2828/380 1745/2838/380 1733/2836/380 +f 1744/2837/380 1698/2731/380 1733/2836/380 +f 1746/2839/380 1730/2841/380 1698/2731/380 +f 1747/2840/380 1693/2721/380 1730/2841/380 +f 1718/2842/380 1729/2844/380 1702/2737/380 +f 1720/2843/380 1639/2669/380 1729/2844/380 +f 1715/2845/376 1760/2871/376 1748/2846/376 +f 1723/2829/380 1675/2699/380 1674/2698/380 +f 1712/2849/380 1679/2704/380 1646/2670/380 +f 1749/2848/380 1674/2698/380 1662/2686/380 +f 1750/2851/380 1662/2686/380 1661/2685/380 +f 1728/2852/380 1661/2685/380 1680/2705/380 +f 1720/2843/380 1722/2850/380 1646/2670/380 +f 1751/2854/380 1721/2767/380 1716/2761/380 +f 1713/2758/380 1751/2854/380 1752/2855/380 +f 1754/2857/380 1756/2859/380 1755/2858/380 +f 1756/2859/380 1758/2861/380 1757/2860/380 +f 1758/2861/380 1727/2774/380 1759/2862/380 +f 1727/2774/380 1713/2758/380 1753/2856/380 +f 1721/2767/380 1719/2764/380 1726/2772/380 +f 1747/2863/376 1753/2856/376 1752/2855/376 +f 1749/2864/378 1756/2859/378 1754/2857/378 +f 1725/2866/376 1724/2770/376 1755/2858/376 +f 1722/2768/378 1721/2767/378 1751/2854/378 +f 1745/2867/376 1755/2858/376 1757/2860/376 +f 1750/2869/378 1758/2861/378 1756/2859/378 +f 1744/2868/376 1757/2860/376 1759/2862/376 +f 1728/2775/378 1727/2774/378 1758/2861/378 +f 1746/2870/376 1759/2862/376 1753/2856/376 +f 1760/2871/380 1765/2885/380 1761/2872/380 +f 1762/2873/380 1743/2834/380 1763/2874/380 +f 1747/2876/377 1748/2846/377 1761/2872/377 +f 1714/2878/378 1762/2873/378 1764/2875/378 +f 1734/2880/379 1765/2885/379 1760/2871/379 +f 1680/2882/377 1743/2834/377 1762/2873/377 +f 1693/2884/378 1761/2872/378 1765/2885/378 +f 1712/2887/379 1764/2875/379 1763/2874/379 +o Bullet +v -0.000004 0.125002 -5.125000 +v 0.108249 -0.062498 -5.125000 +v -0.108257 -0.062498 -5.125000 +v -0.108257 0.062502 -5.125000 +v 0.108249 0.062502 -5.125000 +v -0.000004 -0.124998 -5.125000 +v -0.000004 0.125002 -5.000000 +v -0.108257 0.062502 -4.187500 +v -0.000004 0.125002 -4.187500 +v -0.108257 0.062502 -5.000000 +v -0.108257 -0.062498 -4.187500 +v -0.108257 -0.062498 -5.000000 +v -0.000004 -0.124998 -4.187500 +v -0.000004 -0.124998 -5.000000 +v 0.108249 -0.062498 -4.187500 +v 0.108249 -0.062498 -5.000000 +v 0.108249 0.062502 -4.187500 +v 0.108249 0.062502 -5.000000 +v -0.081194 0.046877 -4.062500 +v 0.108249 -0.062498 -5.062500 +v 0.108249 0.062502 -5.062500 +v -0.108257 -0.062498 -5.062500 +v -0.000004 0.125002 -5.062500 +v -0.000004 -0.124998 -5.062500 +v -0.108257 0.062502 -5.062500 +v 0.081186 0.046877 -4.062500 +v 0.081186 -0.046873 -3.875000 +v 0.081186 -0.046873 -4.062500 +v -0.000004 0.093752 -4.062500 +v -0.081194 -0.046873 -4.062500 +v -0.000004 -0.093748 -4.062500 +v -0.000004 0.093752 -3.875000 +v 0.061566 0.035550 -3.630179 +v 0.081186 0.046877 -3.875000 +v -0.081194 -0.046873 -3.875000 +v -0.000004 -0.093748 -3.875000 +v -0.081194 0.046877 -3.875000 +v 0.029434 -0.016994 -3.495243 +v 0.061566 -0.035546 -3.630179 +v -0.000004 -0.071094 -3.630179 +v -0.061574 0.035550 -3.630179 +v -0.061574 -0.035546 -3.630179 +v -0.000004 0.071097 -3.630179 +v -0.000004 -0.033991 -3.495243 +v -0.000004 0.000002 -3.449988 +v -0.029442 -0.016994 -3.495243 +v -0.000004 0.033994 -3.495243 +v 0.029434 0.016998 -3.495243 +v -0.029442 0.016998 -3.495243 +v -0.000004 0.106333 -5.062500 +v -0.101131 0.032860 -5.000000 +v -0.000004 0.106333 -5.000000 +v -0.101131 0.032860 -5.062500 +v -0.062504 -0.086022 -5.000000 +v -0.062504 -0.086022 -5.062500 +v 0.062496 -0.086022 -5.000000 +v 0.101123 0.032860 -5.062500 +v 0.101123 0.032860 -5.000000 +v 0.062496 -0.086022 -5.062500 +vt 0.450079 0.707515 +vt 0.446288 0.687865 +vt 0.453869 0.687865 +vt 0.453869 0.700965 +vt 0.446288 0.700965 +vt 0.450079 0.681315 +vt 0.470998 0.708333 +vt 0.501160 0.694444 +vt 0.501160 0.708333 +vt 0.470998 0.694444 +vt 0.501160 0.680556 +vt 0.470998 0.680556 +vt 0.501160 0.666667 +vt 0.470998 0.750000 +vt 0.501160 0.736111 +vt 0.501160 0.750000 +vt 0.470998 0.736111 +vt 0.501160 0.722222 +vt 0.470998 0.722222 +vt 0.505800 0.692840 +vt 0.457077 0.708333 +vt 0.459397 0.722222 +vt 0.457077 0.722222 +vt 0.446341 0.722697 +vt 0.453909 0.722697 +vt 0.450125 0.742314 +vt 0.450192 0.750663 +vt 0.454045 0.757321 +vt 0.450192 0.777295 +vt 0.457077 0.763889 +vt 0.459397 0.777778 +vt 0.457077 0.777778 +vt 0.457077 0.736111 +vt 0.459397 0.750000 +vt 0.457077 0.750000 +vt 0.459397 0.736111 +vt 0.457077 0.694444 +vt 0.459397 0.708333 +vt 0.459397 0.763889 +vt 0.505800 0.724166 +vt 0.512759 0.734608 +vt 0.505800 0.734608 +vt 0.505800 0.706763 +vt 0.505800 0.678917 +vt 0.505800 0.720685 +vt 0.505800 0.738089 +vt 0.505800 0.748531 +vt 0.512759 0.710243 +vt 0.522045 0.719424 +vt 0.512759 0.720685 +vt 0.505800 0.668475 +vt 0.512759 0.678917 +vt 0.505800 0.696321 +vt 0.512759 0.706763 +vt 0.505800 0.710243 +vt 0.512759 0.748531 +vt 0.505800 0.682398 +vt 0.512759 0.692840 +vt 0.522045 0.725428 +vt 0.526682 0.731280 +vt 0.522045 0.733346 +vt 0.512759 0.738089 +vt 0.522045 0.747269 +vt 0.512759 0.682398 +vt 0.522045 0.691578 +vt 0.512759 0.724166 +vt 0.512759 0.668475 +vt 0.522045 0.677656 +vt 0.522045 0.697582 +vt 0.522045 0.705501 +vt 0.526682 0.745203 +vt 0.526682 0.741417 +vt 0.529002 0.743056 +vt 0.522045 0.669737 +vt 0.526681 0.675589 +vt 0.526682 0.703435 +vt 0.522045 0.711505 +vt 0.526681 0.717357 +vt 0.522045 0.683659 +vt 0.526682 0.689512 +vt 0.526682 0.685726 +vt 0.529002 0.687500 +vt 0.526682 0.727494 +vt 0.529002 0.729167 +vt 0.526681 0.671803 +vt 0.529002 0.673611 +vt 0.526682 0.699648 +vt 0.529002 0.701389 +vt 0.526681 0.713571 +vt 0.529002 0.715278 +vt 0.461717 0.722222 +vt 0.464037 0.708333 +vt 0.464037 0.722222 +vt 0.461717 0.708333 +vt 0.464037 0.694444 +vt 0.461717 0.694444 +vt 0.464037 0.680556 +vt 0.464037 0.750000 +vt 0.461717 0.736111 +vt 0.464037 0.736111 +vt 0.470998 0.666667 +vt 0.446341 0.735775 +vt 0.450125 0.716158 +vt 0.453909 0.735775 +vt 0.454045 0.770637 +vt 0.446340 0.770637 +vt 0.446340 0.757321 +vt 0.459397 0.694444 +vt 0.512759 0.696321 +vt 0.522045 0.739350 +vt 0.461717 0.680556 +vt 0.461717 0.750000 +vn 0.0000 0.0000 -1.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.8660 -0.5000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.8660 -0.5000 -0.0000 +vn 0.8660 0.5000 -0.0000 +vn -0.8402 -0.4851 0.2425 +vn -0.8402 0.4851 0.2425 +vn 0.0000 0.0000 1.0000 +vn 0.8402 0.4851 0.2425 +vn 0.8402 -0.4851 0.2425 +vn -0.0000 0.9701 0.2425 +vn -0.0000 -0.9701 0.2425 +vn -0.0000 0.9957 0.0921 +vn 0.8527 0.4923 0.1746 +vn 0.8623 0.4979 0.0921 +vn 0.7865 -0.4541 0.4185 +vn 0.8527 -0.4923 0.1746 +vn 0.8623 -0.4979 0.0921 +vn -0.0000 -0.9846 0.1746 +vn -0.0000 -0.9957 0.0921 +vn -0.8623 -0.4979 0.0921 +vn -0.8527 0.4923 0.1746 +vn -0.8623 0.4979 0.0921 +vn -0.8527 -0.4923 0.1746 +vn 0.0000 0.9846 0.1746 +vn 0.0000 -0.9082 0.4185 +vn -0.7865 -0.4541 0.4185 +vn 0.0000 0.9082 0.4185 +vn 0.7865 0.4541 0.4185 +vn -0.7865 0.4541 0.4185 +vn -0.9511 0.3090 0.0000 +vn -0.5878 -0.8090 0.0000 +vn 0.5878 -0.8090 -0.0000 +vn 0.9511 0.3090 -0.0000 +s off +f 1766/2900/383 1767/2901/383 1768/2902/383 +f 1768/2902/383 1769/2903/383 1766/2900/383 +f 1766/2900/383 1770/2904/383 1767/2901/383 +f 1767/2901/383 1771/2905/383 1768/2902/383 +s 1 +f 1772/2906/384 1773/2907/385 1774/2908/384 +f 1775/2909/385 1776/2910/386 1773/2907/385 +f 1777/2911/386 1778/2912/387 1776/2910/386 +f 1779/2913/387 1780/2914/388 1778/2915/387 +f 1781/2916/388 1782/2917/389 1780/2914/388 +f 1783/2918/389 1774/2908/384 1782/2917/389 +f 1776/2910/390 1784/2919/391 1773/2907/391 +f 1785/2920/388 1770/2921/389 1786/2922/389 +f 1787/2923/392 1785/2924/392 1788/2925/392 +f 1779/2926/383 1777/2927/383 1772/2928/383 +f 1787/2929/386 1771/2930/387 1789/2931/387 +f 1788/2932/384 1769/2933/385 1790/2934/385 +f 1786/2922/389 1766/2935/384 1788/2932/384 +f 1789/2936/387 1767/2937/388 1785/2920/388 +f 1790/2934/385 1768/2938/386 1787/2929/386 +f 1791/2939/389 1792/2940/388 1793/2941/388 +f 1782/2917/393 1793/2941/394 1780/2914/394 +f 1773/2907/391 1794/2942/395 1774/2908/395 +f 1778/2912/396 1795/2943/390 1776/2910/390 +f 1774/2908/395 1791/2944/393 1782/2917/393 +f 1778/2915/396 1793/2945/394 1796/2946/396 +f 1797/2947/397 1798/2948/398 1799/2949/399 +f 1796/2950/387 1800/2951/386 1795/2943/386 +f 1784/2952/385 1797/2953/384 1794/2942/384 +f 1794/2954/384 1799/2949/389 1791/2944/389 +f 1793/2945/388 1801/2955/387 1796/2946/387 +f 1795/2956/386 1802/2957/385 1784/2919/385 +f 1798/2958/398 1803/2959/400 1804/2960/401 +f 1792/2961/402 1805/2962/403 1801/2955/404 +f 1800/2963/405 1806/2964/406 1802/2957/407 +f 1799/2965/399 1804/2960/401 1792/2940/402 +f 1801/2966/404 1807/2967/408 1800/2951/405 +f 1797/2953/397 1806/2968/406 1808/2969/409 +f 1809/2970/410 1803/2971/400 1810/2972/392 +f 1805/2973/403 1811/2974/411 1807/2967/408 +f 1806/2968/406 1812/2975/412 1808/2969/409 +f 1808/2976/409 1813/2977/413 1798/2948/398 +f 1805/2962/403 1803/2971/400 1809/2970/410 +f 1807/2978/408 1814/2979/414 1806/2964/406 +f 1814/2979/414 1811/2980/411 1810/2981/392 +f 1803/2959/400 1813/2982/413 1810/2983/392 +f 1811/2974/411 1809/2984/410 1810/2985/392 +f 1812/2975/412 1814/2986/414 1810/2987/392 +f 1813/2977/413 1812/2988/412 1810/2989/392 +f 1815/2990/384 1816/2991/415 1817/2992/384 +f 1818/2993/415 1819/2994/416 1816/2991/415 +f 1820/2995/416 1821/2996/417 1819/2994/416 +f 1821/2997/417 1822/2998/418 1823/2999/418 +f 1822/2998/418 1817/2992/384 1823/2999/418 +f 1772/2906/384 1775/2909/385 1773/2907/385 +f 1775/2909/385 1777/2911/386 1776/2910/386 +f 1777/2911/386 1779/3000/387 1778/2912/387 +f 1779/2913/387 1781/2916/388 1780/2914/388 +f 1781/2916/388 1783/2918/389 1782/2917/389 +f 1783/2918/389 1772/2906/384 1774/2908/384 +f 1776/2910/390 1795/2956/390 1784/2919/391 +f 1785/2920/388 1767/2937/388 1770/2921/389 +f 1788/2925/392 1790/3001/392 1787/2923/392 +f 1787/2923/392 1789/3002/392 1785/2924/392 +f 1785/2924/392 1786/3003/392 1788/2925/392 +f 1777/2927/383 1775/3004/383 1772/2928/383 +f 1772/2928/383 1783/3005/383 1781/3006/383 +f 1781/3006/383 1779/2926/383 1772/2928/383 +f 1787/2929/386 1768/2938/386 1771/2930/387 +f 1788/2932/384 1766/2935/384 1769/2933/385 +f 1786/2922/389 1770/2921/389 1766/2935/384 +f 1789/2936/387 1771/3007/387 1767/2937/388 +f 1790/2934/385 1769/2933/385 1768/2938/386 +f 1791/2939/389 1799/2965/389 1792/2940/388 +f 1782/2917/393 1791/2939/393 1793/2941/394 +f 1773/2907/391 1784/2952/391 1794/2942/395 +f 1778/2912/396 1796/2950/396 1795/2943/390 +f 1774/2908/395 1794/2954/395 1791/2944/393 +f 1778/2915/396 1780/2914/394 1793/2945/394 +f 1797/2947/397 1808/2976/409 1798/2948/398 +f 1796/2950/387 1801/2966/387 1800/2951/386 +f 1784/2952/385 1802/3008/385 1797/2953/384 +f 1794/2954/384 1797/2947/384 1799/2949/389 +f 1793/2945/388 1792/2961/388 1801/2955/387 +f 1795/2956/386 1800/2963/386 1802/2957/385 +f 1798/2958/398 1813/2982/413 1803/2959/400 +f 1792/2961/402 1804/3009/401 1805/2962/403 +f 1800/2963/405 1807/2978/408 1806/2964/406 +f 1799/2965/399 1798/2958/398 1804/2960/401 +f 1801/2966/404 1805/2973/403 1807/2967/408 +f 1797/2953/397 1802/3008/407 1806/2968/406 +f 1805/2973/403 1809/2984/410 1811/2974/411 +f 1806/2968/406 1814/2986/414 1812/2975/412 +f 1808/2976/409 1812/2988/412 1813/2977/413 +f 1805/2962/403 1804/3009/401 1803/2971/400 +f 1807/2978/408 1811/2980/411 1814/2979/414 +f 1815/2990/384 1818/2993/415 1816/2991/415 +f 1818/2993/415 1820/2995/416 1819/2994/416 +f 1820/2995/416 1824/3010/417 1821/2996/417 +f 1821/2997/417 1824/3011/417 1822/2998/418 +f 1822/2998/418 1815/2990/384 1817/2992/384 +o BipodRight +v -0.437506 -0.437496 3.125000 +v -0.468755 -0.374996 3.187500 +v -0.437506 -0.437496 3.187500 +v -0.531255 -0.374996 3.125000 +v -0.843755 -0.374996 3.187500 +v -0.531256 -0.374996 3.187500 +v -0.843756 -0.812497 3.125000 +v -0.843755 -0.874997 3.187500 +v -0.843755 -0.812497 3.187500 +v -0.531255 -0.874997 3.125000 +v -0.468755 -0.874997 3.187500 +v -0.531256 -0.874997 3.187500 +v -0.531256 -0.812497 3.187500 +v -0.531255 -0.812497 3.125000 +v -0.468756 -0.874997 3.125000 +v -0.531255 -0.624997 3.125000 +v -0.531255 -0.437496 3.125000 +v -0.843755 -0.437496 3.187500 +v -0.531256 -0.624997 3.187500 +v -0.531256 -0.437496 3.187500 +v -0.843756 -0.437496 3.125000 +v -0.843755 -0.624997 3.187500 +v -0.437506 -0.812497 3.125000 +v -0.343756 -0.624997 3.187500 +v -0.437506 -0.812497 3.187500 +v -0.531255 -0.624997 3.312500 +v -0.843756 -0.624997 3.125000 +v -0.843756 -0.874997 3.125000 +v -0.468756 -0.374996 3.125000 +v -0.531255 -0.437496 3.312500 +v -0.843756 -0.374996 3.125000 +v -0.343755 -0.624997 3.125000 +v -0.437506 -0.437496 3.312500 +v -0.343756 -0.624997 3.312498 +v -0.437506 -0.812497 3.312500 +v -0.531255 -0.812497 3.312500 +v -0.437507 -0.812497 -1.187500 +v -0.437508 -0.437497 -0.312500 +v -0.437508 -0.812497 -0.312500 +v -0.437507 -0.437497 -1.187500 +v -0.625006 -0.437497 -0.312500 +v -0.625008 -0.812497 -1.187500 +v -0.625006 -0.812497 -0.312500 +v -0.593757 -0.718747 0.000000 +v -0.625008 -0.437497 -1.187500 +v -0.593757 -0.531247 0.000000 +v -0.468756 -0.531247 0.000000 +v -0.468756 -0.718747 0.000000 +v -0.343756 -0.562497 0.000000 +v -0.406257 -0.437497 0.625000 +v -0.343756 -0.562497 0.625000 +v -0.718756 -0.437497 0.000000 +v -0.718757 -0.437497 0.625000 +v -0.718756 -0.687497 0.000000 +v -0.718757 -0.812497 0.625000 +v -0.718757 -0.687497 0.625000 +v -0.718756 -0.812497 0.000000 +v -0.406257 -0.812497 0.625000 +v -0.343756 -0.687497 0.625000 +v -0.406256 -0.812497 0.000000 +v -0.406256 -0.437497 0.000000 +v -0.718756 -0.562497 0.000000 +v -0.718757 -0.562497 0.625000 +v -0.843756 -0.687497 0.312500 +v -0.343756 -0.687497 0.000000 +v -0.843756 -0.562497 0.312500 +v -0.781256 -0.406247 0.268307 +v -0.781256 -0.406247 0.356695 +v -0.737062 -0.406247 0.312500 +v -0.781256 -0.843747 0.356695 +v -0.781256 -0.843747 0.268307 +v -0.737062 -0.843747 0.312500 +v -0.825451 -0.406247 0.312500 +v -0.825451 -0.843747 0.312500 +v -0.367937 -0.624997 0.625000 +v -0.415771 -0.509512 3.125000 +v -0.367935 -0.624997 3.125000 +v -0.415772 -0.509512 0.625000 +v -0.531255 -0.461677 3.125000 +v -0.531257 -0.461677 0.625000 +v -0.646740 -0.509512 3.125000 +v -0.646741 -0.509512 0.625000 +v -0.694575 -0.624997 3.125000 +v -0.646741 -0.740482 0.625000 +v -0.646740 -0.740481 3.125000 +v -0.531255 -0.788317 3.125000 +v -0.415772 -0.740482 0.625000 +v -0.415771 -0.740481 3.125000 +v -0.694577 -0.624997 0.625000 +v -0.531257 -0.788317 0.625000 +vt 0.972158 0.423611 +vt 0.969838 0.430556 +vt 0.969838 0.423611 +vt 0.921114 0.430556 +vt 0.932715 0.437500 +vt 0.921114 0.437500 +vt 0.932715 0.381944 +vt 0.935035 0.375000 +vt 0.935035 0.381944 +vt 0.921114 0.375000 +vt 0.918793 0.368056 +vt 0.921114 0.368056 +vt 0.946636 0.375000 +vt 0.946636 0.381944 +vt 0.921114 0.381944 +vt 0.918793 0.375000 +vt 0.917633 0.423611 +vt 0.921114 0.402778 +vt 0.921114 0.423611 +vt 0.935035 0.423611 +vt 0.946636 0.402778 +vt 0.946636 0.423611 +vt 0.932715 0.423611 +vt 0.935035 0.402778 +vt 0.972158 0.381944 +vt 0.969838 0.402778 +vt 0.969838 0.381944 +vt 0.953596 0.381944 +vt 0.958237 0.402778 +vt 0.953596 0.402778 +vt 0.932715 0.402778 +vt 0.932715 0.375000 +vt 0.948956 0.375000 +vt 0.950116 0.381944 +vt 0.932715 0.368056 +vt 0.918793 0.430556 +vt 0.918793 0.437500 +vt 0.958237 0.423611 +vt 0.953596 0.423611 +vt 0.972158 0.375000 +vt 0.969838 0.375000 +vt 0.917633 0.381944 +vt 0.932715 0.430556 +vt 0.948956 0.430556 +vt 0.950116 0.423611 +vt 0.935035 0.430556 +vt 0.946636 0.430556 +vt 0.972158 0.402778 +vt 0.961717 0.423611 +vt 0.965197 0.402778 +vt 0.961717 0.381944 +vt 0.961717 0.437500 +vt 0.961717 0.368056 +vt 0.958237 0.381944 +vt 0.958237 0.368056 +vt 0.965197 0.381944 +vt 0.944316 0.708333 +vt 0.930394 0.611111 +vt 0.944316 0.611111 +vt 0.930394 0.708333 +vt 0.923434 0.611111 +vt 0.909513 0.708333 +vt 0.909513 0.611111 +vt 0.902552 0.611111 +vt 0.908353 0.576389 +vt 0.923434 0.729167 +vt 0.923434 0.708333 +vt 0.924594 0.576389 +vt 0.929234 0.576389 +vt 0.940835 0.576389 +vt 0.919954 0.576389 +vt 0.988399 0.673611 +vt 0.983759 0.604167 +vt 0.988399 0.604167 +vt 0.972158 0.673611 +vt 0.972158 0.604167 +vt 0.962877 0.673611 +vt 0.958237 0.604167 +vt 0.962877 0.604167 +vt 0.958237 0.673611 +vt 0.946636 0.604167 +vt 0.958237 0.569444 +vt 0.962877 0.562500 +vt 0.958237 0.708333 +vt 0.972158 0.708333 +vt 0.967517 0.673611 +vt 0.967517 0.715278 +vt 0.972158 0.569444 +vt 0.967517 0.604167 +vt 0.967517 0.562500 +vt 0.860789 0.618056 +vt 0.860789 0.548611 +vt 0.865429 0.583333 +vt 0.997680 0.604167 +vt 0.993039 0.673611 +vt 0.993039 0.604167 +vt 0.865429 0.618056 +vt 0.870070 0.583333 +vt 0.870070 0.618056 +vt 0.870070 0.548611 +vt 0.865429 0.548611 +vt 0.874710 0.548611 +vt 0.874710 0.618056 +vt 0.995360 0.694444 +vt 0.993039 0.687500 +vt 0.995360 0.687500 +vt 0.976798 0.687500 +vt 0.974478 0.694444 +vt 0.974478 0.687500 +vt 0.972158 0.430556 +vt 0.914153 0.402778 +vt 0.958237 0.437500 +vt 0.965197 0.423611 +vt 0.902552 0.708333 +vt 0.903712 0.576389 +vt 0.909513 0.729167 +vt 0.933875 0.576389 +vt 0.912993 0.576389 +vt 0.983759 0.673611 +vt 0.946636 0.673611 +vt 0.962877 0.715278 +vt 0.997680 0.673611 +vt 0.993039 0.694444 +vt 0.976798 0.694444 +vt 0.902552 0.527778 +vt 0.995360 0.513889 +vt 0.995360 0.527778 +vt 0.902552 0.513889 +vt 0.995360 0.500000 +vt 0.902552 0.500000 +vt 0.995360 0.486111 +vt 0.902552 0.486111 +vt 0.995360 0.472222 +vt 0.902552 0.458333 +vt 0.995360 0.458333 +vt 0.995360 0.444444 +vt 0.995360 0.555556 +vt 0.902552 0.541667 +vt 0.995360 0.541667 +vt 0.976798 0.708333 +vt 0.993039 0.701389 +vt 0.993039 0.708333 +vt 0.976798 0.680556 +vt 0.993039 0.680556 +vt 0.902552 0.472222 +vt 0.902552 0.444444 +vt 0.902552 0.555556 +vt 0.976798 0.701389 +vn 0.8944 0.4472 -0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.8944 -0.4472 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 -0.9578 0.2873 +vn 0.0000 0.9578 0.2873 +vn 0.9950 0.0000 0.0995 +vn -0.9950 0.0000 0.0995 +vn -0.9285 0.0000 -0.3714 +vn -0.9285 0.0000 0.3714 +vn 0.7071 0.7071 -0.0000 +vn -0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 -0.0000 +s off +f 1825/3012/419 1826/3013/419 1827/3014/419 +f 1828/3015/420 1829/3016/420 1830/3017/420 +f 1831/3018/421 1832/3019/421 1833/3020/421 +f 1834/3021/422 1835/3022/422 1836/3023/422 +f 1833/3020/423 1836/3024/423 1837/3025/423 +f 1838/3026/424 1839/3027/424 1834/3021/424 +f 1825/3028/424 1840/3029/424 1841/3030/424 +f 1842/3031/423 1843/3032/423 1844/3033/423 +f 1845/3034/421 1846/3035/421 1842/3031/421 +f 1847/3036/425 1848/3037/425 1849/3038/425 +f 1837/3039/421 1850/3040/421 1843/3041/421 +f 1841/3030/424 1851/3042/424 1845/3034/424 +f 1838/3026/424 1852/3043/424 1831/3018/424 +f 1837/3025/423 1835/3044/423 1849/3045/423 +f 1852/3043/422 1836/3023/422 1832/3046/422 +f 1853/3047/420 1830/3017/420 1826/3048/420 +f 1843/3041/421 1854/3049/421 1844/3050/421 +f 1840/3029/424 1831/3018/424 1851/3042/424 +f 1839/3051/425 1849/3038/425 1835/3052/425 +f 1840/3029/424 1847/3053/424 1838/3026/424 +f 1846/3035/423 1837/3025/423 1843/3032/423 +f 1851/3042/421 1833/3020/421 1846/3035/421 +f 1828/3015/424 1845/3034/424 1855/3054/424 +f 1826/3055/423 1844/3033/423 1827/3056/423 +f 1855/3054/421 1842/3031/421 1829/3057/421 +f 1829/3057/423 1844/3033/423 1830/3058/423 +f 1853/3047/424 1841/3030/424 1828/3015/424 +f 1856/3059/419 1827/3014/419 1848/3037/419 +f 1857/3060/423 1850/3040/423 1858/3061/423 +f 1850/3040/423 1859/3062/423 1858/3061/423 +f 1827/3063/420 1854/3049/420 1857/3060/420 +f 1849/3064/422 1860/3065/422 1837/3066/422 +f 1827/3014/419 1858/3061/419 1848/3037/419 +f 1849/3038/425 1858/3061/425 1859/3067/425 +f 1861/3068/426 1862/3069/426 1863/3070/426 +f 1864/3071/420 1865/3072/420 1862/3069/420 +f 1865/3072/421 1866/3073/421 1867/3074/421 +f 1866/3073/422 1863/3075/422 1867/3074/422 +f 1863/3075/427 1868/3076/427 1867/3074/427 +f 1864/3077/424 1866/3073/424 1869/3078/424 +f 1862/3069/428 1870/3079/428 1871/3080/428 +f 1862/3069/429 1872/3081/429 1863/3070/429 +f 1867/3074/430 1870/3082/430 1865/3072/430 +f 1873/3083/419 1874/3084/419 1875/3085/419 +f 1874/3084/420 1876/3086/420 1877/3087/420 +f 1878/3088/421 1879/3089/421 1880/3090/421 +f 1881/3091/422 1882/3092/422 1879/3089/422 +f 1880/3090/423 1882/3093/423 1883/3094/423 +f 1878/3088/424 1884/3095/424 1881/3091/424 +f 1885/3096/424 1886/3097/424 1876/3086/424 +f 1873/3098/424 1878/3088/424 1886/3097/424 +f 1874/3099/423 1887/3100/423 1875/3101/423 +f 1887/3100/423 1883/3094/423 1875/3101/423 +f 1876/3086/421 1887/3100/421 1877/3087/421 +f 1878/3102/422 1880/3103/422 1888/3104/422 +f 1882/3105/425 1889/3106/425 1883/3107/425 +f 1889/3106/426 1875/3085/426 1883/3107/426 +f 1878/3108/431 1890/3109/431 1886/3110/431 +f 1887/3111/432 1888/3104/432 1880/3112/432 +f 1887/3113/420 1886/3114/420 1890/3109/420 +f 1891/3115/420 1892/3116/420 1893/3117/420 +f 1894/3118/422 1895/3119/422 1896/3120/422 +f 1825/3012/419 1853/3121/419 1826/3013/419 +f 1828/3015/420 1855/3054/420 1829/3016/420 +f 1831/3018/421 1852/3043/421 1832/3019/421 +f 1834/3021/422 1839/3027/422 1835/3022/422 +f 1833/3020/423 1832/3019/423 1836/3024/423 +f 1838/3026/424 1847/3053/424 1839/3027/424 +f 1825/3028/424 1856/3122/424 1840/3029/424 +f 1842/3031/423 1846/3035/423 1843/3032/423 +f 1845/3034/421 1851/3042/421 1846/3035/421 +f 1847/3036/425 1856/3059/425 1848/3037/425 +f 1837/3039/421 1860/3065/421 1850/3040/421 +f 1841/3030/424 1840/3029/424 1851/3042/424 +f 1838/3026/424 1834/3021/424 1852/3043/424 +f 1837/3025/423 1836/3024/423 1835/3044/423 +f 1852/3043/422 1834/3021/422 1836/3023/422 +f 1853/3047/420 1828/3015/420 1830/3017/420 +f 1843/3041/421 1850/3040/421 1854/3049/421 +f 1840/3029/424 1838/3026/424 1831/3018/424 +f 1839/3051/425 1847/3036/425 1849/3038/425 +f 1840/3029/424 1856/3122/424 1847/3053/424 +f 1846/3035/423 1833/3020/423 1837/3025/423 +f 1851/3042/421 1831/3018/421 1833/3020/421 +f 1828/3015/424 1841/3030/424 1845/3034/424 +f 1826/3055/423 1830/3058/423 1844/3033/423 +f 1855/3054/421 1845/3034/421 1842/3031/421 +f 1829/3057/423 1842/3031/423 1844/3033/423 +f 1853/3047/424 1825/3028/424 1841/3030/424 +f 1856/3059/419 1825/3012/419 1827/3014/419 +f 1857/3060/423 1854/3049/423 1850/3040/423 +f 1850/3040/423 1860/3065/423 1859/3062/423 +f 1827/3063/420 1844/3123/420 1854/3049/420 +f 1849/3064/422 1859/3062/422 1860/3065/422 +f 1827/3014/419 1857/3124/419 1858/3061/419 +f 1849/3038/425 1848/3037/425 1858/3061/425 +f 1861/3068/426 1864/3071/426 1862/3069/426 +f 1864/3071/420 1869/3078/420 1865/3072/420 +f 1865/3072/421 1869/3078/421 1866/3073/421 +f 1866/3073/422 1861/3125/422 1863/3075/422 +f 1863/3075/427 1872/3126/427 1868/3076/427 +f 1864/3077/424 1861/3127/424 1866/3073/424 +f 1862/3069/428 1865/3072/428 1870/3079/428 +f 1862/3069/429 1871/3128/429 1872/3081/429 +f 1867/3074/430 1868/3129/430 1870/3082/430 +f 1873/3083/419 1885/3130/419 1874/3084/419 +f 1874/3084/420 1885/3130/420 1876/3086/420 +f 1878/3088/421 1881/3091/421 1879/3089/421 +f 1881/3091/422 1884/3131/422 1882/3092/422 +f 1880/3090/423 1879/3089/423 1882/3093/423 +f 1878/3088/424 1889/3132/424 1884/3095/424 +f 1885/3096/424 1873/3098/424 1886/3097/424 +f 1873/3098/424 1889/3132/424 1878/3088/424 +f 1874/3099/423 1877/3087/423 1887/3100/423 +f 1887/3100/423 1880/3090/423 1883/3094/423 +f 1876/3086/421 1886/3097/421 1887/3100/421 +f 1882/3105/425 1884/3133/425 1889/3106/425 +f 1889/3106/426 1873/3083/426 1875/3085/426 +f 1878/3108/431 1888/3104/431 1890/3109/431 +f 1887/3111/432 1890/3109/432 1888/3104/432 +f 1891/3115/420 1897/3134/420 1892/3116/420 +f 1894/3118/422 1898/3135/422 1895/3119/422 +s 1 +f 1899/3136/426 1900/3137/433 1901/3138/426 +f 1902/3139/433 1903/3140/420 1900/3137/433 +f 1904/3141/420 1905/3142/434 1903/3140/420 +f 1906/3143/434 1907/3144/421 1905/3142/434 +f 1907/3144/421 1908/3145/435 1909/3146/435 +f 1908/3145/435 1910/3147/422 1909/3146/435 +f 1910/3148/422 1911/3149/436 1912/3150/436 +f 1911/3149/436 1901/3138/426 1912/3150/436 +f 1896/3151/426 1891/3152/424 1893/3153/426 +f 1897/3134/421 1894/3118/423 1892/3116/423 +f 1892/3116/423 1896/3154/426 1893/3155/426 +f 1891/3152/424 1898/3135/421 1897/3134/421 +f 1899/3136/426 1902/3139/433 1900/3137/433 +f 1902/3139/433 1904/3141/420 1903/3140/420 +f 1904/3141/420 1906/3143/434 1905/3142/434 +f 1906/3143/434 1913/3156/421 1907/3144/421 +f 1907/3144/421 1913/3156/421 1908/3145/435 +f 1908/3145/435 1914/3157/422 1910/3147/422 +f 1910/3148/422 1914/3158/422 1911/3149/436 +f 1911/3149/436 1899/3136/426 1901/3138/426 +f 1896/3151/426 1895/3159/424 1891/3152/424 +f 1897/3134/421 1898/3135/421 1894/3118/423 +f 1892/3116/423 1894/3118/423 1896/3154/426 +f 1891/3152/424 1895/3159/424 1898/3135/421 +o BipodHingeRight +v -0.187508 -0.374997 -1.250000 +v -0.187508 -0.499997 -0.750000 +v -0.187508 -0.499997 -1.250000 +v -0.187508 -0.374997 -0.750000 +v -0.312508 -0.499997 -0.750000 +v -0.312508 -0.499997 -1.250000 +v -0.437508 -0.874997 -1.250000 +v -0.437508 -0.499997 -1.250000 +v -0.312508 -0.374997 -1.250000 +v -0.312508 -0.374997 -0.750000 +v -0.437507 -0.374997 -0.750000 +v -0.437508 -0.499997 -0.750000 +v -0.437507 -0.374997 -1.250000 +v -0.312508 -0.874997 -0.750000 +v -0.312508 -0.874997 -1.250000 +v -0.437508 -0.874997 -0.750000 +vt 0.900232 0.312500 +vt 0.918793 0.326389 +vt 0.900232 0.326389 +vt 0.918793 0.312500 +vt 0.923434 0.298611 +vt 0.923434 0.312500 +vt 0.895592 0.270833 +vt 0.900232 0.229167 +vt 0.900232 0.270833 +vt 0.900232 0.298611 +vt 0.895592 0.312500 +vt 0.895592 0.298611 +vt 0.918793 0.340278 +vt 0.918793 0.298611 +vt 0.918793 0.284722 +vt 0.918793 0.270833 +vt 0.923434 0.284722 +vt 0.900232 0.284722 +vt 0.918793 0.215278 +vt 0.900232 0.215278 +vt 0.918793 0.229167 +vt 0.877030 0.270833 +vt 0.895592 0.229167 +vt 0.923434 0.229167 +vt 0.923434 0.270833 +vt 0.900232 0.340278 +vt 0.895592 0.284722 +vt 0.877030 0.229167 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.0000 -1.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +s off +f 1915/3160/437 1916/3161/437 1917/3162/437 +f 1918/3163/438 1919/3164/438 1916/3165/438 +f 1920/3166/439 1921/3167/439 1922/3168/439 +f 1923/3169/439 1917/3170/439 1920/3171/439 +f 1919/3172/440 1917/3162/440 1916/3161/440 +f 1918/3163/441 1923/3169/441 1924/3173/441 +f 1925/3174/442 1922/3168/442 1926/3175/442 +f 1923/3169/441 1925/3174/441 1924/3173/441 +f 1919/3164/438 1925/3174/438 1926/3176/438 +f 1920/3171/439 1927/3177/439 1923/3169/439 +f 1928/3178/440 1921/3167/440 1929/3179/440 +f 1922/3168/442 1930/3180/442 1926/3175/442 +f 1919/3181/437 1929/3182/437 1920/3166/437 +f 1926/3175/438 1928/3183/438 1919/3184/438 +f 1915/3160/437 1918/3163/437 1916/3161/437 +f 1918/3163/438 1924/3173/438 1919/3164/438 +f 1920/3166/439 1929/3182/439 1921/3167/439 +f 1923/3169/439 1915/3160/439 1917/3170/439 +f 1919/3172/440 1920/3185/440 1917/3162/440 +f 1918/3163/441 1915/3160/441 1923/3169/441 +f 1925/3174/442 1927/3177/442 1922/3168/442 +f 1923/3169/441 1927/3177/441 1925/3174/441 +f 1919/3164/438 1924/3173/438 1925/3174/438 +f 1920/3171/439 1922/3186/439 1927/3177/439 +f 1928/3178/440 1930/3180/440 1921/3167/440 +f 1922/3168/442 1921/3167/442 1930/3180/442 +f 1919/3181/437 1928/3187/437 1929/3182/437 +f 1926/3175/438 1930/3180/438 1928/3183/438 +o MuzzleBrake +v 0.375006 0.937501 9.750000 +v 0.375006 0.625001 10.500000 +v 0.375006 0.625001 9.750000 +v -0.374994 0.937501 10.500000 +v -0.374994 0.625001 9.750000 +v -0.374994 0.625001 10.500000 +v 0.125006 0.937501 9.750000 +v 0.125006 0.625001 9.750000 +v -0.374994 0.312501 10.500000 +v -0.124994 0.312501 9.750000 +v -0.124994 0.312501 10.500000 +v 0.375006 0.937501 10.500000 +v 0.125006 0.937501 10.500000 +v -0.437494 0.937501 10.750000 +v -0.390619 1.000001 10.562500 +v -0.437494 0.312501 10.750000 +v -0.499994 0.250001 11.000000 +v -0.499994 0.312501 11.000000 +v -0.124994 0.937501 11.750000 +v -0.687494 0.812501 11.750000 +v -0.124994 0.812501 11.750000 +v 0.625006 0.937501 11.500000 +v 0.687506 0.812501 11.750000 +v 0.625006 0.812501 11.500000 +v -0.624994 0.312501 11.500000 +v -0.687494 0.437501 11.750000 +v -0.624994 0.437501 11.500000 +v 0.437506 0.937501 10.750000 +v 0.390631 1.000001 10.562500 +v 0.437506 1.000001 10.750000 +v -0.624994 1.125001 11.500000 +v -0.124994 1.125001 11.750000 +v -0.124994 1.125001 11.500000 +v 0.500006 1.000001 11.000000 +v 0.500006 0.937501 11.000000 +v -0.687494 0.937501 11.750000 +v -0.624994 0.937501 11.500000 +v 0.687506 0.937501 11.750000 +v 0.125006 1.125001 11.750000 +v 0.125006 0.937501 11.750000 +v -0.390619 0.250001 10.562500 +v -0.437494 0.250001 10.750000 +v 0.625006 0.125001 11.500000 +v 0.125006 0.125001 11.750000 +v 0.125006 0.125001 11.500000 +v -0.687494 0.312501 11.750000 +v -0.124994 0.125001 11.750000 +v -0.124994 0.312501 11.750000 +v 0.437506 0.312501 10.750000 +v 0.390631 0.250001 10.562500 +v 0.375006 0.312501 10.500000 +v 0.687506 0.312501 11.750000 +v 0.625006 0.312501 11.500000 +v 0.125006 0.250001 10.750000 +v 0.125006 0.250001 10.562500 +v 0.500006 0.312501 11.000000 +v 0.437506 0.250001 10.750000 +v 0.562506 0.312501 11.250000 +v 0.500006 0.250001 11.000000 +v 0.562506 0.187501 11.250000 +v 0.125006 0.250001 11.000000 +v 0.125006 0.187501 11.250000 +v -0.499994 0.937501 11.000000 +v -0.437494 1.000001 10.750000 +v -0.562494 0.937501 11.250000 +v -0.499994 1.000001 11.000000 +v -0.562494 1.062501 11.250000 +v 0.687506 1.125001 11.750000 +v 0.562506 1.062501 11.250000 +v 0.625006 1.125001 11.500000 +v 0.562506 0.937501 11.250000 +v -0.124994 1.000001 11.000000 +v -0.124994 1.000001 10.750000 +v -0.124994 1.062501 11.250000 +v -0.593744 0.437501 11.375000 +v 0.593756 0.812501 11.375000 +v -0.687494 0.125001 11.750000 +v -0.562494 0.187501 11.250000 +v -0.624994 0.125001 11.500000 +v -0.562494 0.312501 11.250000 +v 0.593756 0.625001 11.375000 +v 0.625006 0.437501 11.500000 +v 0.593756 0.437501 11.375000 +v -0.593744 0.625001 11.375000 +v -0.624994 0.812501 11.500000 +v -0.593744 0.812501 11.375000 +v -0.624994 0.625001 11.500000 +v 0.625006 0.625001 11.500000 +v 0.687506 0.437501 11.750000 +v -0.187494 0.625001 11.750000 +v -0.124994 0.437501 11.750000 +v 0.375006 0.312501 9.750000 +v 0.125006 0.312501 9.750000 +v -0.374994 0.312501 9.750000 +v 0.687506 0.625001 11.750000 +v -0.687494 0.625001 11.750000 +v -0.124994 1.000001 10.562500 +v -0.124994 0.937501 10.500000 +v 0.125006 0.312501 10.500000 +v 0.125006 1.000001 10.750000 +v 0.125006 1.000001 10.562500 +v -0.124994 0.250001 10.562500 +v 0.125006 0.312501 11.750000 +v 0.125006 0.437501 11.750000 +v 0.187506 0.625001 11.750000 +v -0.124994 0.625001 9.750000 +v 0.125006 1.125001 11.500000 +v 0.125006 1.062501 11.250000 +v 0.125006 1.000001 11.000000 +v -0.124994 0.125001 11.500000 +v -0.124994 0.187501 11.250000 +v -0.124994 0.250001 11.000000 +v -0.124994 0.250001 10.750000 +v 0.687506 0.125001 11.750000 +v -0.687494 1.125001 11.750000 +v 0.125006 0.812501 11.750000 +v -0.374994 0.937501 9.750000 +v -0.124994 0.937501 9.750000 +v -0.192252 1.000001 9.932741 +v -0.192251 1.000001 9.817257 +v -0.307735 1.000001 9.817257 +v -0.192252 1.000001 10.182741 +v -0.192251 1.000001 10.067257 +v -0.307735 1.000001 10.067257 +v -0.192252 1.000001 10.432741 +v -0.192251 1.000001 10.317257 +v -0.307735 1.000001 10.317257 +v -0.307735 0.250001 9.817257 +v -0.192251 0.250001 9.817257 +v -0.192252 0.250001 9.932741 +v -0.307735 0.250001 10.067257 +v -0.192251 0.250001 10.067257 +v -0.192252 0.250001 10.182741 +v -0.307735 0.250001 10.317257 +v -0.192251 0.250001 10.317257 +v -0.192252 0.250001 10.432741 +v -0.307736 1.000001 9.932741 +v -0.249993 1.000001 9.956659 +v -0.168333 1.000001 9.875000 +v -0.249994 1.000001 9.793339 +v -0.331654 1.000001 9.874998 +v -0.307736 1.000001 10.182741 +v -0.249993 1.000001 10.206659 +v -0.168333 1.000001 10.125000 +v -0.249994 1.000001 10.043339 +v -0.331654 1.000001 10.124998 +v -0.307736 1.000001 10.432741 +v -0.249993 1.000001 10.456659 +v -0.168333 1.000001 10.375000 +v -0.249994 1.000001 10.293339 +v -0.331654 1.000001 10.374998 +v -0.249993 0.250001 9.956659 +v -0.307736 0.250001 9.932741 +v -0.331654 0.250001 9.874998 +v -0.249994 0.250001 9.793339 +v -0.168333 0.250001 9.875000 +v -0.249993 0.250001 10.206659 +v -0.307736 0.250001 10.182741 +v -0.331654 0.250001 10.124998 +v -0.249994 0.250001 10.043339 +v -0.168333 0.250001 10.125000 +v -0.249993 0.250001 10.456659 +v -0.307736 0.250001 10.432741 +v -0.331654 0.250001 10.374998 +v -0.249994 0.250001 10.293339 +v -0.168333 0.250001 10.375000 +v -0.124994 0.937501 10.750000 +v -0.124994 0.625001 10.500000 +v -0.124994 0.312501 10.750000 +v -0.124994 0.312501 11.000000 +v -0.124994 0.312501 11.250000 +v -0.124994 0.437501 11.375000 +v -0.187494 0.625001 11.375000 +v -0.124994 0.812501 11.375000 +v -0.124994 0.937501 11.250000 +v -0.124994 0.937501 11.000000 +v 0.125006 0.437501 11.375000 +v 0.125006 0.937501 11.000000 +v 0.125006 0.937501 10.750000 +v 0.125006 0.937501 11.250000 +v 0.125006 0.812501 11.375000 +v 0.187506 0.625001 11.375000 +v 0.125006 0.312501 11.250000 +v 0.125006 0.312501 11.000000 +v 0.125006 0.312501 10.750000 +v 0.125006 0.625001 10.500000 +v -0.192252 0.937501 9.932741 +v -0.249993 0.937501 9.956659 +v -0.307736 0.937501 9.932741 +v -0.331654 0.937501 9.874998 +v -0.307735 0.937501 9.817257 +v -0.249994 0.937501 9.793339 +v -0.192251 0.937501 9.817257 +v -0.168333 0.937501 9.875000 +v -0.192252 0.937501 10.182741 +v -0.249993 0.937501 10.206659 +v -0.307736 0.937501 10.182741 +v -0.331654 0.937501 10.124998 +v -0.307735 0.937501 10.067257 +v -0.249994 0.937501 10.043339 +v -0.192251 0.937501 10.067257 +v -0.168333 0.937501 10.125000 +v -0.192252 0.937501 10.432741 +v -0.249993 0.937501 10.456659 +v -0.307736 0.937501 10.432741 +v -0.331654 0.937501 10.374998 +v -0.307735 0.937501 10.317257 +v -0.249994 0.937501 10.293339 +v -0.192251 0.937501 10.317257 +v -0.168333 0.937501 10.375000 +v -0.249993 0.312501 9.956659 +v -0.192252 0.312501 9.932741 +v -0.307736 0.312501 9.932741 +v -0.331654 0.312501 9.874998 +v -0.307735 0.312501 9.817257 +v -0.249994 0.312501 9.793339 +v -0.168333 0.312501 9.875000 +v -0.192251 0.312501 9.817257 +v -0.249993 0.312501 10.206659 +v -0.192252 0.312501 10.182741 +v -0.307736 0.312501 10.182741 +v -0.331654 0.312501 10.124998 +v -0.307735 0.312501 10.067257 +v -0.249994 0.312501 10.043339 +v -0.168333 0.312501 10.125000 +v -0.192251 0.312501 10.067257 +v -0.249993 0.312501 10.456659 +v -0.192252 0.312501 10.432741 +v -0.307736 0.312501 10.432741 +v -0.331654 0.312501 10.374998 +v -0.307735 0.312501 10.317257 +v -0.249994 0.312501 10.293339 +v -0.168333 0.312501 10.375000 +v -0.192251 0.312501 10.317257 +vt 0.918793 0.972222 +vt 0.890951 0.937500 +vt 0.918793 0.937500 +vt 0.872390 0.875000 +vt 0.844548 0.840278 +vt 0.872390 0.840278 +vt 0.930394 0.993056 +vt 0.921114 0.958333 +vt 0.930394 0.958333 +vt 0.814385 0.701389 +vt 0.842227 0.729167 +vt 0.814385 0.729167 +vt 0.795824 0.659722 +vt 0.767981 0.631944 +vt 0.795824 0.631944 +vt 0.881671 0.875000 +vt 0.874710 0.881944 +vt 0.881671 0.805556 +vt 0.890951 0.798611 +vt 0.890951 0.805556 +vt 0.865429 0.763889 +vt 0.844548 0.750000 +vt 0.865429 0.750000 +vt 0.853828 0.972222 +vt 0.844548 0.958333 +vt 0.853828 0.958333 +vt 0.909513 0.805556 +vt 0.918793 0.819444 +vt 0.909513 0.819444 +vt 0.881671 0.972222 +vt 0.888631 0.979167 +vt 0.881671 0.979167 +vt 0.832947 0.548611 +vt 0.842227 0.604167 +vt 0.832947 0.604167 +vt 0.872390 0.979167 +vt 0.872390 0.972222 +vt 0.918793 0.875000 +vt 0.909513 0.895833 +vt 0.909513 0.875000 +vt 0.895592 0.763889 +vt 0.874710 0.784722 +vt 0.874710 0.763889 +vt 0.874710 0.798611 +vt 0.881671 0.798611 +vt 0.777262 0.812500 +vt 0.767981 0.756944 +vt 0.777262 0.756944 +vt 0.844548 0.694444 +vt 0.865429 0.673611 +vt 0.865429 0.694444 +vt 0.881671 0.902778 +vt 0.888631 0.895833 +vt 0.890951 0.902778 +vt 0.844548 0.902778 +vt 0.853828 0.881944 +vt 0.853828 0.902778 +vt 0.812065 0.786458 +vt 0.805104 0.756944 +vt 0.812065 0.756944 +vt 0.872390 0.902778 +vt 0.881671 0.895833 +vt 0.863109 0.902778 +vt 0.872390 0.895833 +vt 0.863109 0.888889 +vt 0.805104 0.791667 +vt 0.795824 0.756944 +vt 0.795824 0.798611 +vt 0.786543 0.756944 +vt 0.786543 0.805556 +vt 0.890951 0.875000 +vt 0.881671 0.881944 +vt 0.900232 0.875000 +vt 0.890951 0.881944 +vt 0.900232 0.888889 +vt 0.844548 0.993056 +vt 0.844548 0.972222 +vt 0.863109 0.986111 +vt 0.853828 0.993056 +vt 0.863109 0.972222 +vt 0.805104 0.569444 +vt 0.814385 0.604167 +vt 0.805104 0.604167 +vt 0.814385 0.562500 +vt 0.823666 0.604167 +vt 0.823666 0.555556 +vt 0.904872 0.819444 +vt 0.858469 0.958333 +vt 0.918793 0.784722 +vt 0.918793 0.805556 +vt 0.900232 0.791667 +vt 0.909513 0.784722 +vt 0.900232 0.805556 +vt 0.858469 0.937500 +vt 0.853828 0.916667 +vt 0.858469 0.916667 +vt 0.904872 0.840278 +vt 0.909513 0.861111 +vt 0.904872 0.861111 +vt 0.890951 0.972222 +vt 0.909513 0.840278 +vt 0.918793 0.861111 +vt 0.853828 0.937500 +vt 0.844548 0.916667 +vt 0.863109 0.729167 +vt 0.844548 0.708333 +vt 0.865429 0.708333 +vt 0.872390 0.805556 +vt 0.921114 0.923611 +vt 0.930394 0.923611 +vt 0.844548 0.805556 +vt 0.918793 0.902778 +vt 0.844548 0.937500 +vt 0.844548 0.729167 +vt 0.918793 0.840278 +vt 0.795824 0.576389 +vt 0.798144 0.604167 +vt 0.795824 0.604167 +vt 0.814385 0.784722 +vt 0.814385 0.756944 +vt 0.798144 0.574653 +vt 0.798144 0.661458 +vt 0.805104 0.631944 +vt 0.805104 0.666667 +vt 0.798144 0.631944 +vt 0.812065 0.729167 +vt 0.812065 0.699653 +vt 0.895592 0.708333 +vt 0.874710 0.694444 +vt 0.895592 0.694444 +vt 0.874710 0.708333 +vt 0.895592 0.750000 +vt 0.877030 0.729167 +vt 0.895592 0.729167 +vt 0.948956 0.958333 +vt 0.939675 0.923611 +vt 0.948956 0.923611 +vt 0.939675 0.958333 +vt 0.823666 0.680556 +vt 0.832947 0.631944 +vt 0.832947 0.687500 +vt 0.823666 0.631944 +vt 0.814385 0.673611 +vt 0.814385 0.631944 +vt 0.786543 0.680556 +vt 0.777262 0.729167 +vt 0.777262 0.673611 +vt 0.786543 0.729167 +vt 0.795824 0.687500 +vt 0.795824 0.729167 +vt 0.805104 0.694444 +vt 0.805104 0.729167 +vt 0.895592 0.673611 +vt 0.874710 0.673611 +vt 0.767981 0.729167 +vt 0.767981 0.666667 +vt 0.844548 0.784722 +vt 0.844548 0.763889 +vt 0.865429 0.784722 +vt 0.842227 0.631944 +vt 0.842227 0.694444 +vt 0.874710 0.750000 +vt 0.767981 0.576389 +vt 0.767981 0.604167 +vt 0.842227 0.784722 +vt 0.842227 0.756944 +vt 0.948956 0.993056 +vt 0.939675 0.993056 +vt 0.152017 0.420167 +vt 0.152017 0.433749 +vt 0.147479 0.433749 +vt 0.152017 0.420167 +vt 0.152017 0.433749 +vt 0.147479 0.433749 +vt 0.152017 0.420167 +vt 0.152017 0.433749 +vt 0.147479 0.433749 +vt 0.147479 0.433749 +vt 0.152017 0.433749 +vt 0.152017 0.420167 +vt 0.147479 0.433749 +vt 0.152017 0.433749 +vt 0.152017 0.420167 +vt 0.147479 0.433749 +vt 0.152017 0.433749 +vt 0.152017 0.420167 +vt 0.844548 0.875000 +vt 0.921114 0.993056 +vt 0.842227 0.701389 +vt 0.767981 0.659722 +vt 0.842227 0.541667 +vt 0.918793 0.895833 +vt 0.895592 0.784722 +vt 0.767981 0.819444 +vt 0.844548 0.673611 +vt 0.844548 0.881944 +vt 0.147479 0.420167 +vt 0.149748 0.417354 +vt 0.152957 0.426958 +vt 0.149748 0.436562 +vt 0.146540 0.426958 +vt 0.147479 0.420167 +vt 0.149748 0.417354 +vt 0.152957 0.426958 +vt 0.149748 0.436562 +vt 0.146540 0.426958 +vt 0.147479 0.420167 +vt 0.149748 0.417354 +vt 0.152957 0.426958 +vt 0.149748 0.436562 +vt 0.146540 0.426958 +vt 0.149748 0.417354 +vt 0.147479 0.420167 +vt 0.146540 0.426958 +vt 0.149748 0.436562 +vt 0.152957 0.426958 +vt 0.149748 0.417354 +vt 0.147479 0.420167 +vt 0.146540 0.426958 +vt 0.149748 0.436562 +vt 0.152957 0.426958 +vt 0.149748 0.417354 +vt 0.147479 0.420167 +vt 0.146540 0.426958 +vt 0.149748 0.436562 +vt 0.152957 0.426958 +vt 0.879350 0.458333 +vt 0.895592 0.430556 +vt 0.895592 0.458333 +vt 0.798144 0.430556 +vt 0.814385 0.458333 +vt 0.798144 0.458333 +vt 0.814385 0.423611 +vt 0.823666 0.458333 +vt 0.823666 0.416667 +vt 0.832947 0.458333 +vt 0.832947 0.409722 +vt 0.839907 0.458333 +vt 0.839907 0.406250 +vt 0.846868 0.451389 +vt 0.853828 0.406250 +vt 0.853828 0.458333 +vt 0.860789 0.409722 +vt 0.860789 0.458333 +vt 0.870070 0.416667 +vt 0.870070 0.458333 +vt 0.879350 0.423611 +vt 0.867749 0.666667 +vt 0.860789 0.625000 +vt 0.867749 0.625000 +vt 0.877030 0.666667 +vt 0.877030 0.625000 +vt 0.870070 0.486111 +vt 0.879350 0.520833 +vt 0.870070 0.527778 +vt 0.879350 0.486111 +vt 0.860789 0.486111 +vt 0.860789 0.534722 +vt 0.853828 0.486111 +vt 0.853828 0.539931 +vt 0.846868 0.493056 +vt 0.846868 0.539931 +vt 0.883991 0.666667 +vt 0.883991 0.625000 +vt 0.839907 0.539931 +vt 0.890951 0.666667 +vt 0.890951 0.625000 +vt 0.832947 0.534722 +vt 0.839907 0.486111 +vt 0.832947 0.486111 +vt 0.823666 0.527778 +vt 0.823666 0.486111 +vt 0.814385 0.520833 +vt 0.814385 0.486111 +vt 0.798144 0.513889 +vt 0.798144 0.486111 +vt 0.895592 0.513889 +vt 0.895592 0.486111 +vt 0.860789 0.666667 +vt 0.853828 0.625000 +vt 0.853828 0.666667 +vt 0.844548 0.625000 +vt 0.139211 0.423611 +vt 0.141531 0.416667 +vt 0.141531 0.423611 +vt 0.143852 0.423611 +vt 0.125290 0.416667 +vt 0.127610 0.423611 +vt 0.125290 0.423611 +vt 0.127610 0.416667 +vt 0.129930 0.423611 +vt 0.129930 0.416667 +vt 0.132251 0.423611 +vt 0.132251 0.416667 +vt 0.134571 0.423611 +vt 0.134571 0.416667 +vt 0.136891 0.423611 +vt 0.136891 0.416667 +vt 0.139211 0.423611 +vt 0.141531 0.416667 +vt 0.141531 0.423611 +vt 0.143852 0.423611 +vt 0.125290 0.416667 +vt 0.127610 0.423611 +vt 0.125290 0.423611 +vt 0.127610 0.416667 +vt 0.129930 0.423611 +vt 0.129930 0.416667 +vt 0.132251 0.423611 +vt 0.132251 0.416667 +vt 0.134571 0.423611 +vt 0.134571 0.416667 +vt 0.136891 0.423611 +vt 0.136891 0.416667 +vt 0.139211 0.423611 +vt 0.141531 0.416667 +vt 0.141531 0.423611 +vt 0.143852 0.423611 +vt 0.125290 0.416667 +vt 0.127610 0.423611 +vt 0.125290 0.423611 +vt 0.127610 0.416667 +vt 0.129930 0.423611 +vt 0.129930 0.416667 +vt 0.132251 0.423611 +vt 0.132251 0.416667 +vt 0.134571 0.423611 +vt 0.134571 0.416667 +vt 0.136891 0.423611 +vt 0.136891 0.416667 +vt 0.141531 0.423611 +vt 0.139211 0.416667 +vt 0.139211 0.423611 +vt 0.143852 0.423611 +vt 0.141531 0.416667 +vt 0.127610 0.423611 +vt 0.125290 0.416667 +vt 0.125290 0.423611 +vt 0.129930 0.423611 +vt 0.127610 0.416667 +vt 0.132251 0.423611 +vt 0.129930 0.416667 +vt 0.134571 0.416667 +vt 0.132251 0.416667 +vt 0.136891 0.423611 +vt 0.134571 0.423611 +vt 0.136891 0.416667 +vt 0.141531 0.423611 +vt 0.139211 0.416667 +vt 0.139211 0.423611 +vt 0.143852 0.423611 +vt 0.141531 0.416667 +vt 0.127610 0.423611 +vt 0.125290 0.416667 +vt 0.125290 0.423611 +vt 0.129930 0.423611 +vt 0.127610 0.416667 +vt 0.132251 0.423611 +vt 0.129930 0.416667 +vt 0.134571 0.416667 +vt 0.132251 0.416667 +vt 0.136891 0.423611 +vt 0.134571 0.423611 +vt 0.136891 0.416667 +vt 0.141531 0.423611 +vt 0.139211 0.416667 +vt 0.139211 0.423611 +vt 0.143852 0.423611 +vt 0.141531 0.416667 +vt 0.127610 0.423611 +vt 0.125290 0.416667 +vt 0.125290 0.423611 +vt 0.129930 0.423611 +vt 0.127610 0.416667 +vt 0.132251 0.423611 +vt 0.129930 0.416667 +vt 0.134571 0.416667 +vt 0.132251 0.416667 +vt 0.136891 0.423611 +vt 0.134571 0.423611 +vt 0.136891 0.416667 +vt 0.846868 0.406250 +vt 0.844548 0.666667 +vt 0.139211 0.416667 +vt 0.143852 0.416667 +vt 0.139211 0.416667 +vt 0.143852 0.416667 +vt 0.139211 0.416667 +vt 0.143852 0.416667 +vt 0.143852 0.416667 +vt 0.143852 0.416667 +vt 0.143852 0.416667 +vn 1.0000 0.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.9701 -0.0000 -0.2425 +vn 0.0000 0.0000 1.0000 +vn 0.9701 0.0000 -0.2425 +vn 0.0000 -0.9701 -0.2425 +vn 0.0000 0.9701 -0.2425 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.9013 0.4332 +vn 0.0000 -0.6247 0.7809 +vn 0.0000 0.6247 0.7809 +vn 0.0000 0.9013 0.4332 +vn 0.0000 0.9254 0.3789 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.9008 -0.4343 +vn 0.0000 0.5391 -0.8422 +vn 0.0000 0.3600 -0.9330 +vn 0.0000 -0.3600 -0.9330 +vn 0.0000 -0.5391 -0.8422 +vn 0.0000 -0.9008 -0.4343 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 -0.9254 0.3789 +vn 0.5847 0.8112 -0.0000 +vn -0.5847 0.8112 0.0000 +vn -0.5847 -0.8112 0.0000 +vn 0.5847 -0.8112 0.0000 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +s off +f 1931/3188/443 1932/3189/443 1933/3190/443 +f 1934/3191/444 1935/3192/444 1936/3193/444 +f 1937/3194/445 1933/3195/445 1938/3196/445 +f 1939/3197/446 1940/3198/446 1941/3199/446 +f 1942/3200/447 1937/3201/447 1943/3202/447 +f 1944/3203/448 1945/3204/448 1934/3191/448 +f 1946/3205/448 1947/3206/448 1948/3207/448 +f 1949/3208/449 1950/3209/449 1951/3210/449 +f 1952/3211/450 1953/3212/450 1954/3213/450 +f 1955/3214/448 1956/3215/448 1957/3216/448 +f 1958/3217/450 1959/3218/450 1960/3219/450 +f 1961/3220/447 1962/3221/447 1963/3222/447 +f 1958/3217/450 1964/3223/450 1965/3224/450 +f 1966/3225/448 1961/3226/448 1967/3227/448 +f 1968/3228/449 1969/3229/449 1970/3230/449 +f 1946/3205/448 1971/3231/448 1972/3232/448 +f 1973/3233/446 1974/3234/446 1975/3235/446 +f 1976/3236/449 1977/3237/449 1978/3238/449 +f 1979/3239/450 1980/3240/450 1981/3241/450 +f 1982/3242/450 1973/3243/450 1983/3244/450 +f 1980/3245/446 1984/3246/446 1985/3247/446 +f 1986/3248/450 1987/3249/450 1979/3239/450 +f 1988/3250/450 1989/3251/450 1986/3248/450 +f 1983/3244/450 1990/3252/450 1988/3250/450 +f 1987/3253/446 1991/3254/446 1984/3246/446 +f 1989/3255/451 1992/3256/451 1991/3254/451 +f 1990/3257/451 1975/3235/451 1992/3256/451 +f 1993/3258/448 1994/3259/448 1944/3203/448 +f 1995/3260/448 1996/3261/448 1993/3258/448 +f 1967/3227/448 1997/3262/448 1995/3260/448 +f 1952/3211/450 1998/3263/450 1968/3264/450 +f 1952/3211/450 1999/3265/450 2000/3266/450 +f 2001/3267/450 1964/3223/450 1999/3265/450 +f 1994/3268/447 2002/3269/447 2003/3270/447 +f 1996/3271/452 2004/3272/452 2002/3269/452 +f 1997/3273/452 1963/3222/452 2004/3272/452 +f 2005/3274/448 1955/3214/448 1957/3216/448 +f 2006/3275/450 1952/3211/450 1954/3213/450 +f 1955/3214/448 2007/3276/448 1976/3277/448 +f 1955/3214/448 2008/3278/448 2009/3279/448 +f 2010/3280/448 1947/3206/448 2008/3278/448 +f 2011/3281/450 2012/3282/450 2013/3283/450 +f 2014/3284/448 2015/3285/448 2016/3286/448 +f 1942/3287/450 1958/3217/450 1932/3189/450 +f 1944/3203/448 1934/3191/448 1936/3193/448 +f 2017/3288/448 1950/3289/448 2015/3285/448 +f 2018/3290/450 2019/3291/450 2012/3282/450 +f 2020/3292/449 1956/3293/449 2021/3294/449 +f 1981/3241/450 1932/3189/450 1979/3239/450 +f 1939/3295/448 1946/3205/448 1936/3193/448 +f 1938/3196/445 2022/3296/445 2023/3297/445 +f 1936/3193/444 2024/3298/444 1939/3295/444 +f 1933/3190/443 1981/3241/443 2022/3299/443 +f 2015/3285/448 1966/3225/448 1967/3227/448 +f 2016/3286/448 1967/3227/448 1995/3260/448 +f 2006/3275/450 2018/3290/450 2011/3281/450 +f 1954/3213/450 2025/3300/450 2018/3290/450 +f 2020/3292/449 1950/3209/449 2026/3301/449 +f 2021/3294/449 1976/3236/449 1978/3238/449 +f 2012/3282/450 1982/3242/450 1983/3244/450 +f 2013/3283/450 1983/3244/450 1988/3250/450 +f 2005/3274/448 2017/3288/448 2014/3284/448 +f 1957/3216/448 2026/3302/448 2017/3288/448 +f 1934/3303/453 2027/3304/453 2028/3305/453 +f 1981/3306/454 1985/3247/454 2029/3307/454 +f 1945/3308/447 2003/3270/447 2027/3304/447 +f 1959/3309/447 2030/3310/447 1960/3311/447 +f 2027/3304/447 2030/3310/447 2031/3312/447 +f 1939/3197/454 2032/3313/454 1971/3314/454 +f 2029/3307/454 2032/3313/454 1941/3199/454 +f 1942/3200/453 2031/3312/453 1959/3309/453 +f 2028/3305/453 2031/3312/453 1943/3202/453 +f 2019/3315/449 2033/3316/449 1982/3317/449 +f 2034/3318/449 1978/3238/449 2033/3316/449 +f 1953/3319/449 2035/3320/449 2025/3321/449 +f 1935/3322/445 1940/3323/445 2024/3324/445 +f 2036/3325/445 2023/3297/445 1940/3323/445 +f 2019/3315/449 2035/3320/449 2034/3318/449 +f 1999/3326/452 2037/3327/452 2000/3328/452 +f 2004/3272/452 2037/3327/452 2038/3329/452 +f 1964/3330/452 2038/3329/452 1999/3326/452 +f 2002/3269/452 2038/3329/452 2039/3331/452 +f 1960/3311/447 2039/3331/447 1964/3330/447 +f 2003/3270/447 2039/3331/447 2030/3310/447 +f 2008/3332/451 2040/3333/451 2009/3334/451 +f 1992/3256/451 2040/3333/451 2041/3335/451 +f 1947/3336/451 2041/3335/451 2008/3332/451 +f 1991/3254/451 2041/3335/451 2042/3337/451 +f 1972/3338/446 2042/3337/446 1947/3336/446 +f 1984/3246/446 2042/3337/446 2043/3339/446 +f 1971/3314/446 2043/3339/446 1972/3338/446 +f 1985/3247/446 2043/3339/446 2032/3313/446 +f 2033/3316/449 2044/3340/449 1982/3317/449 +f 1978/3238/449 1974/3341/449 2033/3316/449 +f 2009/3334/446 1977/3342/446 2007/3343/446 +f 1975/3235/446 1977/3342/446 2040/3333/446 +f 1949/3208/449 2045/3344/449 1966/3345/449 +f 1970/3230/449 1962/3346/449 1949/3208/449 +f 2000/3328/447 1969/3347/447 1998/3348/447 +f 1963/3222/447 1969/3347/447 2037/3327/447 +f 1968/3228/449 2046/3349/449 1953/3319/449 +f 1970/3230/449 1951/3210/449 2046/3349/449 +f 2028/3305/447 2047/3350/447 1934/3303/447 +f 1943/3202/447 2048/3351/447 2028/3305/447 +f 2029/3307/446 2022/3352/446 1981/3306/446 +f 1941/3199/446 2023/3353/446 2029/3307/446 +f 2047/3354/445 2036/3325/445 1935/3322/445 +f 2048/3355/445 1938/3196/445 2036/3325/445 +f 2049/3356/447 2050/3357/447 2051/3358/447 +f 2052/3359/447 2053/3360/447 2054/3361/447 +f 2055/3362/447 2056/3363/447 2057/3364/447 +f 2058/3365/446 2059/3366/446 2060/3367/446 +f 2061/3368/446 2062/3369/446 2063/3370/446 +f 2064/3371/446 2065/3372/446 2066/3373/446 +f 1931/3188/443 1942/3287/443 1932/3189/443 +f 1934/3191/444 2047/3374/444 1935/3192/444 +f 1937/3194/445 1931/3375/445 1933/3195/445 +f 1939/3197/446 2024/3376/446 1940/3198/446 +f 1942/3200/447 1931/3377/447 1937/3201/447 +f 1944/3203/448 1994/3259/448 1945/3204/448 +f 1946/3205/448 1972/3232/448 1947/3206/448 +f 1949/3208/449 1966/3345/449 1950/3209/449 +f 1952/3211/450 1968/3264/450 1953/3212/450 +f 1955/3214/448 1976/3277/448 1956/3215/448 +f 1958/3217/450 1942/3287/450 1959/3218/450 +f 1961/3220/447 2045/3378/447 1962/3221/447 +f 1958/3217/450 1960/3219/450 1964/3223/450 +f 1966/3225/448 2045/3379/448 1961/3226/448 +f 1968/3228/449 1998/3380/449 1969/3229/449 +f 1946/3205/448 1939/3295/448 1971/3231/448 +f 1973/3233/446 2044/3381/446 1974/3234/446 +f 1976/3236/449 2007/3382/449 1977/3237/449 +f 1979/3239/450 1987/3249/450 1980/3240/450 +f 1982/3242/450 2044/3383/450 1973/3243/450 +f 1980/3245/446 1987/3253/446 1984/3246/446 +f 1986/3248/450 1989/3251/450 1987/3249/450 +f 1988/3250/450 1990/3252/450 1989/3251/450 +f 1983/3244/450 1973/3243/450 1990/3252/450 +f 1987/3253/446 1989/3255/446 1991/3254/446 +f 1989/3255/451 1990/3257/451 1992/3256/451 +f 1990/3257/451 1973/3233/451 1975/3235/451 +f 1993/3258/448 1996/3261/448 1994/3259/448 +f 1995/3260/448 1997/3262/448 1996/3261/448 +f 1967/3227/448 1961/3226/448 1997/3262/448 +f 1952/3211/450 2000/3266/450 1998/3263/450 +f 1952/3211/450 2001/3267/450 1999/3265/450 +f 2001/3267/450 1965/3224/450 1964/3223/450 +f 1994/3268/447 1996/3271/447 2002/3269/447 +f 1996/3271/452 1997/3273/452 2004/3272/452 +f 1997/3273/452 1961/3220/452 1963/3222/452 +f 2005/3274/448 2010/3280/448 1955/3214/448 +f 2006/3275/450 2001/3267/450 1952/3211/450 +f 1955/3214/448 2009/3279/448 2007/3276/448 +f 1955/3214/448 2010/3280/448 2008/3278/448 +f 2010/3280/448 1948/3207/448 1947/3206/448 +f 2011/3281/450 2018/3290/450 2012/3282/450 +f 2014/3284/448 2017/3288/448 2015/3285/448 +f 2017/3288/448 2026/3302/448 1950/3289/448 +f 2018/3290/450 2025/3300/450 2019/3291/450 +f 2020/3292/449 2026/3301/449 1956/3293/449 +f 1938/3196/445 1933/3195/445 2022/3296/445 +f 1936/3193/444 1935/3192/444 2024/3298/444 +f 1933/3190/443 1932/3189/443 1981/3241/443 +f 2015/3285/448 1950/3289/448 1966/3225/448 +f 2016/3286/448 2015/3285/448 1967/3227/448 +f 2006/3275/450 1954/3213/450 2018/3290/450 +f 1954/3213/450 1953/3212/450 2025/3300/450 +f 2020/3292/449 1951/3210/449 1950/3209/449 +f 2021/3294/449 1956/3293/449 1976/3236/449 +f 2012/3282/450 2019/3291/450 1982/3242/450 +f 2013/3283/450 2012/3282/450 1983/3244/450 +f 2005/3274/448 1957/3216/448 2017/3288/448 +f 1957/3216/448 1956/3215/448 2026/3302/448 +f 1934/3303/453 1945/3308/453 2027/3304/453 +f 1981/3306/454 1980/3245/454 1985/3247/454 +f 1945/3308/447 1994/3268/447 2003/3270/447 +f 1959/3309/447 2031/3312/447 2030/3310/447 +f 2027/3304/447 2003/3270/447 2030/3310/447 +f 1939/3197/454 1941/3199/454 2032/3313/454 +f 2029/3307/454 1985/3247/454 2032/3313/454 +f 1942/3200/453 1943/3202/453 2031/3312/453 +f 2028/3305/453 2027/3304/453 2031/3312/453 +f 2019/3315/449 2034/3318/449 2033/3316/449 +f 2034/3318/449 2021/3294/449 1978/3238/449 +f 1953/3319/449 2046/3349/449 2035/3320/449 +f 1935/3322/445 2036/3325/445 1940/3323/445 +f 2036/3325/445 1938/3196/445 2023/3297/445 +f 2019/3315/449 2025/3321/449 2035/3320/449 +f 1999/3326/452 2038/3329/452 2037/3327/452 +f 2004/3272/452 1963/3222/452 2037/3327/452 +f 1964/3330/452 2039/3331/452 2038/3329/452 +f 2002/3269/452 2004/3272/452 2038/3329/452 +f 1960/3311/447 2030/3310/447 2039/3331/447 +f 2003/3270/447 2002/3269/447 2039/3331/447 +f 2008/3332/451 2041/3335/451 2040/3333/451 +f 1992/3256/451 1975/3235/451 2040/3333/451 +f 1947/3336/451 2042/3337/451 2041/3335/451 +f 1991/3254/451 1992/3256/451 2041/3335/451 +f 1972/3338/446 2043/3339/446 2042/3337/446 +f 1984/3246/446 1991/3254/446 2042/3337/446 +f 1971/3314/446 2032/3313/446 2043/3339/446 +f 1985/3247/446 1984/3246/446 2043/3339/446 +f 2033/3316/449 1974/3341/449 2044/3340/449 +f 1978/3238/449 1977/3237/449 1974/3341/449 +f 2009/3334/446 2040/3333/446 1977/3342/446 +f 1975/3235/446 1974/3234/446 1977/3342/446 +f 1949/3208/449 1962/3346/449 2045/3344/449 +f 1970/3230/449 1969/3229/449 1962/3346/449 +f 2000/3328/447 2037/3327/447 1969/3347/447 +f 1963/3222/447 1962/3221/447 1969/3347/447 +f 1968/3228/449 1970/3230/449 2046/3349/449 +f 1970/3230/449 1949/3208/449 1951/3210/449 +f 2028/3305/447 2048/3351/447 2047/3350/447 +f 1943/3202/447 1937/3201/447 2048/3351/447 +f 2029/3307/446 2023/3353/446 2022/3352/446 +f 1941/3199/446 1940/3198/446 2023/3353/446 +f 2047/3354/445 2048/3355/445 2036/3325/445 +f 2048/3355/445 1937/3194/445 1938/3196/445 +f 2067/3384/447 2068/3385/447 2049/3356/447 +f 2049/3356/447 2069/3386/447 2050/3357/447 +f 2050/3357/447 2070/3387/447 2051/3358/447 +f 2051/3358/447 2071/3388/447 2067/3384/447 +f 2067/3384/447 2049/3356/447 2051/3358/447 +f 2072/3389/447 2073/3390/447 2052/3359/447 +f 2052/3359/447 2074/3391/447 2053/3360/447 +f 2053/3360/447 2075/3392/447 2054/3361/447 +f 2054/3361/447 2076/3393/447 2072/3389/447 +f 2072/3389/447 2052/3359/447 2054/3361/447 +f 2077/3394/447 2078/3395/447 2055/3362/447 +f 2055/3362/447 2079/3396/447 2056/3363/447 +f 2056/3363/447 2080/3397/447 2057/3364/447 +f 2057/3364/447 2081/3398/447 2077/3394/447 +f 2077/3394/447 2055/3362/447 2057/3364/447 +f 2060/3367/446 2082/3399/446 2083/3400/446 +f 2083/3400/446 2084/3401/446 2058/3365/446 +f 2058/3365/446 2085/3402/446 2059/3366/446 +f 2059/3366/446 2086/3403/446 2060/3367/446 +f 2060/3367/446 2083/3400/446 2058/3365/446 +f 2063/3370/446 2087/3404/446 2088/3405/446 +f 2088/3405/446 2089/3406/446 2061/3368/446 +f 2061/3368/446 2090/3407/446 2062/3369/446 +f 2062/3369/446 2091/3408/446 2063/3370/446 +f 2063/3370/446 2088/3405/446 2061/3368/446 +f 2066/3373/446 2092/3409/446 2093/3410/446 +f 2093/3410/446 2094/3411/446 2064/3371/446 +f 2064/3371/446 2095/3412/446 2065/3372/446 +f 2065/3372/446 2096/3413/446 2066/3373/446 +f 2066/3373/446 2093/3410/446 2064/3371/446 +s 1 +f 2097/3414/455 1936/3415/456 2098/3416/456 +f 1936/3417/457 2099/3418/458 2098/3419/457 +f 1946/3420/459 2100/3421/447 2099/3418/458 +f 1948/3422/447 2101/3423/460 2100/3421/447 +f 2010/3424/461 2102/3425/462 2101/3423/460 +f 2005/3426/463 2103/3427/445 2102/3425/462 +f 2103/3427/445 2016/3428/464 2104/3429/465 +f 2104/3429/465 1995/3430/466 2105/3431/467 +f 2105/3431/467 1993/3432/446 2106/3433/446 +f 2106/3433/446 1944/3434/468 2097/3414/455 +f 2102/3435/469 2020/3436/443 2021/3437/469 +f 2107/3438/470 2021/3437/469 2034/3439/470 +f 2108/3440/446 1958/3441/468 1965/3442/446 +f 2106/3433/446 2109/3443/455 2108/3440/446 +f 2110/3444/467 1965/3442/446 2001/3445/466 +f 2105/3431/467 2108/3440/446 2110/3444/467 +f 2111/3446/465 2001/3445/466 2006/3447/464 +f 2104/3429/465 2110/3444/467 2111/3446/465 +f 2112/3448/445 2006/3447/464 2011/3449/445 +f 2112/3450/444 2034/3439/470 2035/3451/444 +f 2013/3452/463 2112/3448/445 2011/3449/445 +f 2111/3453/471 2035/3451/444 2046/3454/471 +f 1988/3455/461 2107/3456/462 2013/3452/463 +f 2101/3423/460 2107/3456/462 2113/3457/460 +f 1986/3458/447 2113/3457/460 1988/3455/461 +f 2100/3421/447 2113/3457/460 2114/3459/447 +f 1979/3460/459 2114/3459/447 1986/3458/447 +f 2099/3418/458 2114/3459/447 2115/3461/458 +f 1932/3462/457 2115/3461/458 1979/3460/459 +f 2098/3419/457 2115/3461/458 2116/3463/457 +f 2109/3443/455 1932/3464/456 1958/3441/468 +f 2097/3414/455 2116/3465/456 2109/3443/455 +f 2103/3466/443 1951/3467/472 2020/3436/443 +f 2104/3468/472 2046/3469/471 1951/3467/472 +f 2117/3470/473 2068/3471/449 2118/3472/449 +f 2068/3471/449 2119/3473/474 2118/3472/449 +f 2067/3474/474 2120/3475/444 2119/3476/474 +f 2071/3477/444 2121/3478/475 2120/3475/444 +f 2051/3479/475 2122/3480/445 2121/3478/475 +f 2070/3481/445 2123/3482/476 2122/3480/445 +f 2050/3483/476 2124/3484/443 2123/3482/476 +f 2069/3485/443 2117/3470/473 2124/3484/443 +f 2125/3486/473 2073/3487/449 2126/3488/449 +f 2073/3487/449 2127/3489/474 2126/3488/449 +f 2072/3490/474 2128/3491/444 2127/3492/474 +f 2076/3493/444 2129/3494/475 2128/3491/444 +f 2054/3495/475 2130/3496/445 2129/3494/475 +f 2075/3497/445 2131/3498/476 2130/3496/445 +f 2053/3499/476 2132/3500/443 2131/3498/476 +f 2074/3501/443 2125/3486/473 2132/3500/443 +f 2133/3502/473 2078/3503/449 2134/3504/449 +f 2078/3503/449 2135/3505/474 2134/3504/449 +f 2077/3506/474 2136/3507/444 2135/3508/474 +f 2081/3509/444 2137/3510/475 2136/3507/444 +f 2057/3511/475 2138/3512/445 2137/3510/475 +f 2080/3513/445 2139/3514/476 2138/3512/445 +f 2056/3515/476 2140/3516/443 2139/3514/476 +f 2079/3517/443 2133/3502/473 2140/3516/443 +f 2141/3518/449 2060/3519/473 2142/3520/473 +f 2143/3521/474 2082/3522/449 2141/3518/449 +f 2144/3523/444 2083/3524/474 2143/3525/474 +f 2145/3526/475 2084/3527/444 2144/3523/444 +f 2146/3528/445 2058/3529/475 2145/3526/475 +f 2146/3528/445 2059/3530/476 2085/3531/445 +f 2147/3532/443 2059/3530/476 2148/3533/476 +f 2142/3520/473 2086/3534/443 2147/3532/443 +f 2149/3535/449 2063/3536/473 2150/3537/473 +f 2151/3538/474 2087/3539/449 2149/3535/449 +f 2152/3540/444 2088/3541/474 2151/3542/474 +f 2153/3543/475 2089/3544/444 2152/3540/444 +f 2154/3545/445 2061/3546/475 2153/3543/475 +f 2154/3545/445 2062/3547/476 2090/3548/445 +f 2155/3549/443 2062/3547/476 2156/3550/476 +f 2150/3537/473 2091/3551/443 2155/3549/443 +f 2157/3552/449 2066/3553/473 2158/3554/473 +f 2159/3555/474 2092/3556/449 2157/3552/449 +f 2160/3557/444 2093/3558/474 2159/3559/474 +f 2161/3560/475 2094/3561/444 2160/3557/444 +f 2162/3562/445 2064/3563/475 2161/3560/475 +f 2162/3562/445 2065/3564/476 2095/3565/445 +f 2163/3566/443 2065/3564/476 2164/3567/476 +f 2158/3554/473 2096/3568/443 2163/3566/443 +f 2097/3414/455 1944/3434/468 1936/3415/456 +f 1936/3417/457 1946/3420/459 2099/3418/458 +f 1946/3420/459 1948/3422/447 2100/3421/447 +f 1948/3422/447 2010/3424/461 2101/3423/460 +f 2010/3424/461 2005/3426/463 2102/3425/462 +f 2005/3426/463 2014/3569/445 2103/3427/445 +f 2103/3427/445 2014/3569/445 2016/3428/464 +f 2104/3429/465 2016/3428/464 1995/3430/466 +f 2105/3431/467 1995/3430/466 1993/3432/446 +f 2106/3433/446 1993/3432/446 1944/3434/468 +f 2102/3435/469 2103/3466/443 2020/3436/443 +f 2107/3438/470 2102/3435/469 2021/3437/469 +f 2108/3440/446 2109/3443/455 1958/3441/468 +f 2106/3433/446 2097/3414/455 2109/3443/455 +f 2110/3444/467 2108/3440/446 1965/3442/446 +f 2105/3431/467 2106/3433/446 2108/3440/446 +f 2111/3446/465 2110/3444/467 2001/3445/466 +f 2104/3429/465 2105/3431/467 2110/3444/467 +f 2112/3448/445 2111/3446/465 2006/3447/464 +f 2112/3450/444 2107/3438/470 2034/3439/470 +f 2013/3452/463 2107/3456/462 2112/3448/445 +f 2111/3453/471 2112/3450/444 2035/3451/444 +f 1988/3455/461 2113/3457/460 2107/3456/462 +f 2101/3423/460 2102/3425/462 2107/3456/462 +f 1986/3458/447 2114/3459/447 2113/3457/460 +f 2100/3421/447 2101/3423/460 2113/3457/460 +f 1979/3460/459 2115/3461/458 2114/3459/447 +f 2099/3418/458 2100/3421/447 2114/3459/447 +f 1932/3462/457 2116/3463/457 2115/3461/458 +f 2098/3419/457 2099/3418/458 2115/3461/458 +f 2109/3443/455 2116/3465/456 1932/3464/456 +f 2097/3414/455 2098/3416/456 2116/3465/456 +f 2103/3466/443 2104/3468/472 1951/3467/472 +f 2104/3468/472 2111/3570/471 2046/3469/471 +f 2117/3470/473 2049/3571/473 2068/3471/449 +f 2068/3471/449 2067/3572/474 2119/3473/474 +f 2067/3474/474 2071/3477/444 2120/3475/444 +f 2071/3477/444 2051/3479/475 2121/3478/475 +f 2051/3479/475 2070/3481/445 2122/3480/445 +f 2070/3481/445 2050/3483/476 2123/3482/476 +f 2050/3483/476 2069/3485/443 2124/3484/443 +f 2069/3485/443 2049/3571/473 2117/3470/473 +f 2125/3486/473 2052/3573/473 2073/3487/449 +f 2073/3487/449 2072/3574/474 2127/3489/474 +f 2072/3490/474 2076/3493/444 2128/3491/444 +f 2076/3493/444 2054/3495/475 2129/3494/475 +f 2054/3495/475 2075/3497/445 2130/3496/445 +f 2075/3497/445 2053/3499/476 2131/3498/476 +f 2053/3499/476 2074/3501/443 2132/3500/443 +f 2074/3501/443 2052/3573/473 2125/3486/473 +f 2133/3502/473 2055/3575/473 2078/3503/449 +f 2078/3503/449 2077/3576/474 2135/3505/474 +f 2077/3506/474 2081/3509/444 2136/3507/444 +f 2081/3509/444 2057/3511/475 2137/3510/475 +f 2057/3511/475 2080/3513/445 2138/3512/445 +f 2080/3513/445 2056/3515/476 2139/3514/476 +f 2056/3515/476 2079/3517/443 2140/3516/443 +f 2079/3517/443 2055/3575/473 2133/3502/473 +f 2141/3518/449 2082/3522/449 2060/3519/473 +f 2143/3521/474 2083/3577/474 2082/3522/449 +f 2144/3523/444 2084/3527/444 2083/3524/474 +f 2145/3526/475 2058/3529/475 2084/3527/444 +f 2146/3528/445 2085/3531/445 2058/3529/475 +f 2146/3528/445 2148/3533/476 2059/3530/476 +f 2147/3532/443 2086/3534/443 2059/3530/476 +f 2142/3520/473 2060/3519/473 2086/3534/443 +f 2149/3535/449 2087/3539/449 2063/3536/473 +f 2151/3538/474 2088/3578/474 2087/3539/449 +f 2152/3540/444 2089/3544/444 2088/3541/474 +f 2153/3543/475 2061/3546/475 2089/3544/444 +f 2154/3545/445 2090/3548/445 2061/3546/475 +f 2154/3545/445 2156/3550/476 2062/3547/476 +f 2155/3549/443 2091/3551/443 2062/3547/476 +f 2150/3537/473 2063/3536/473 2091/3551/443 +f 2157/3552/449 2092/3556/449 2066/3553/473 +f 2159/3555/474 2093/3579/474 2092/3556/449 +f 2160/3557/444 2094/3561/444 2093/3558/474 +f 2161/3560/475 2064/3563/475 2094/3561/444 +f 2162/3562/445 2095/3565/445 2064/3563/475 +f 2162/3562/445 2164/3567/476 2065/3564/476 +f 2163/3566/443 2096/3568/443 2065/3564/476 +f 2158/3554/473 2066/3553/473 2096/3568/443 +o BipodHingeLeft +v 0.187492 -0.499997 -0.750000 +v 0.187492 -0.374997 -1.250000 +v 0.187492 -0.499997 -1.250000 +v 0.312492 -0.499997 -0.750000 +v 0.187492 -0.374997 -0.750000 +v 0.437492 -0.874997 -1.250000 +v 0.312492 -0.499997 -1.250000 +v 0.437492 -0.499997 -1.250000 +v 0.312492 -0.374997 -1.250000 +v 0.312492 -0.374997 -0.750000 +v 0.437492 -0.374997 -0.750000 +v 0.437492 -0.499997 -0.750000 +v 0.437492 -0.374997 -1.250000 +v 0.312492 -0.874997 -0.750000 +v 0.312492 -0.874997 -1.250000 +v 0.437492 -0.874997 -0.750000 +vt 0.930394 0.326389 +vt 0.948956 0.312500 +vt 0.948956 0.326389 +vt 0.925754 0.298611 +vt 0.930394 0.312500 +vt 0.925754 0.312500 +vt 0.948956 0.229167 +vt 0.953596 0.270833 +vt 0.948956 0.270833 +vt 0.953596 0.312500 +vt 0.948956 0.298611 +vt 0.953596 0.298611 +vt 0.930394 0.340278 +vt 0.930394 0.298611 +vt 0.930394 0.284722 +vt 0.930394 0.270833 +vt 0.948956 0.284722 +vt 0.930394 0.215278 +vt 0.948956 0.215278 +vt 0.930394 0.229167 +vt 0.953596 0.229167 +vt 0.972158 0.270833 +vt 0.925754 0.229167 +vt 0.925754 0.270833 +vt 0.948956 0.340278 +vt 0.925754 0.284722 +vt 0.953596 0.284722 +vt 0.972158 0.229167 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +s off +f 2165/3580/477 2166/3581/477 2167/3582/477 +f 2168/3583/478 2169/3584/478 2165/3585/478 +f 2170/3586/479 2171/3587/479 2172/3588/479 +f 2167/3589/479 2173/3590/479 2171/3591/479 +f 2167/3582/480 2168/3592/480 2165/3580/480 +f 2173/3590/481 2169/3584/481 2174/3593/481 +f 2172/3588/482 2175/3594/482 2176/3595/482 +f 2175/3594/481 2173/3590/481 2174/3593/481 +f 2168/3583/478 2175/3594/478 2174/3593/478 +f 2177/3596/479 2171/3591/479 2173/3590/479 +f 2170/3586/480 2178/3597/480 2179/3598/480 +f 2180/3599/482 2172/3588/482 2176/3595/482 +f 2179/3600/477 2168/3601/477 2171/3587/477 +f 2178/3602/478 2176/3595/478 2168/3603/478 +f 2165/3580/477 2169/3584/477 2166/3581/477 +f 2168/3583/478 2174/3593/478 2169/3584/478 +f 2170/3586/479 2179/3600/479 2171/3587/479 +f 2167/3589/479 2166/3581/479 2173/3590/479 +f 2167/3582/480 2171/3604/480 2168/3592/480 +f 2173/3590/481 2166/3581/481 2169/3584/481 +f 2172/3588/482 2177/3596/482 2175/3594/482 +f 2175/3594/481 2177/3596/481 2173/3590/481 +f 2168/3583/478 2176/3605/478 2175/3594/478 +f 2177/3596/479 2172/3606/479 2171/3591/479 +f 2170/3586/480 2180/3599/480 2178/3597/480 +f 2180/3599/482 2170/3586/482 2172/3588/482 +f 2179/3600/477 2178/3607/477 2168/3601/477 +f 2178/3602/478 2180/3599/478 2176/3595/478 +o BipodLeft +v 0.468744 -0.374996 3.187500 +v 0.437494 -0.437496 3.125000 +v 0.437494 -0.437496 3.187500 +v 0.843744 -0.374996 3.187500 +v 0.531244 -0.374996 3.125000 +v 0.531244 -0.374996 3.187500 +v 0.843744 -0.874997 3.187500 +v 0.843744 -0.812497 3.125000 +v 0.843744 -0.812497 3.187500 +v 0.468744 -0.874997 3.187500 +v 0.531244 -0.874997 3.125000 +v 0.531244 -0.874997 3.187500 +v 0.531244 -0.812497 3.187500 +v 0.531244 -0.812497 3.125000 +v 0.468744 -0.874997 3.125000 +v 0.437494 -0.812497 3.125000 +v 0.531244 -0.624997 3.125000 +v 0.531244 -0.437496 3.125000 +v 0.531244 -0.624997 3.187500 +v 0.843744 -0.437496 3.187500 +v 0.531244 -0.437496 3.187500 +v 0.843744 -0.624997 3.187500 +v 0.843744 -0.437496 3.125000 +v 0.343744 -0.624997 3.187500 +v 0.437494 -0.812497 3.187500 +v 0.531244 -0.624997 3.312500 +v 0.843744 -0.624997 3.125000 +v 0.843744 -0.874997 3.125000 +v 0.468744 -0.374996 3.125000 +v 0.531244 -0.437496 3.312500 +v 0.343744 -0.624997 3.125000 +v 0.843744 -0.374996 3.125000 +v 0.437494 -0.437496 3.312500 +v 0.437494 -0.812497 3.312500 +v 0.343744 -0.624997 3.312498 +v 0.531244 -0.812497 3.312500 +v 0.437492 -0.437497 -0.312500 +v 0.437492 -0.812497 -1.187500 +v 0.437492 -0.812497 -0.312500 +v 0.624992 -0.437497 -0.312500 +v 0.437492 -0.437497 -1.187500 +v 0.624992 -0.812497 -1.187500 +v 0.624992 -0.437497 -1.187500 +v 0.624992 -0.812497 -0.312500 +v 0.593744 -0.718747 -0.000000 +v 0.593744 -0.531247 -0.000000 +v 0.468743 -0.718747 -0.000000 +v 0.406243 -0.437497 0.625000 +v 0.343743 -0.562497 -0.000000 +v 0.343743 -0.562497 0.625000 +v 0.718743 -0.437497 -0.000000 +v 0.406243 -0.437497 -0.000000 +v 0.718743 -0.812497 0.625000 +v 0.718743 -0.687497 -0.000000 +v 0.718743 -0.687497 0.625000 +v 0.406243 -0.812497 0.625000 +v 0.718743 -0.812497 -0.000000 +v 0.343743 -0.687497 0.625000 +v 0.406243 -0.812497 -0.000000 +v 0.343743 -0.687497 -0.000000 +v 0.718743 -0.562497 -0.000000 +v 0.718743 -0.562497 0.625000 +v 0.718743 -0.437497 0.625000 +v 0.843743 -0.687497 0.312500 +v 0.843743 -0.562497 0.312500 +v 0.781243 -0.406247 0.356695 +v 0.781243 -0.406247 0.268306 +v 0.737049 -0.406247 0.312500 +v 0.781243 -0.843747 0.356695 +v 0.781243 -0.843747 0.268307 +v 0.825437 -0.843747 0.312500 +v 0.468743 -0.531247 -0.000000 +v 0.825437 -0.406247 0.312500 +v 0.737049 -0.843747 0.312500 +v 0.415760 -0.509512 3.125000 +v 0.367923 -0.624997 0.625000 +v 0.367924 -0.624997 3.125000 +v 0.531244 -0.461677 3.125000 +v 0.415759 -0.509512 0.625000 +v 0.646729 -0.509512 3.125000 +v 0.531244 -0.461677 0.625000 +v 0.694564 -0.624997 3.125000 +v 0.646728 -0.509512 0.625000 +v 0.646729 -0.740481 3.125000 +v 0.694564 -0.624997 0.625000 +v 0.531244 -0.788317 3.125000 +v 0.646728 -0.740482 0.625000 +v 0.415760 -0.740481 3.125000 +v 0.531244 -0.788317 0.625000 +v 0.415759 -0.740482 0.625000 +vt 0.877030 0.340278 +vt 0.874710 0.333333 +vt 0.877030 0.333333 +vt 0.893271 0.416667 +vt 0.904872 0.409722 +vt 0.904872 0.416667 +vt 0.890951 0.354167 +vt 0.893271 0.361111 +vt 0.890951 0.361111 +vt 0.907193 0.347222 +vt 0.904872 0.354167 +vt 0.904872 0.347222 +vt 0.879350 0.354167 +vt 0.879350 0.361111 +vt 0.904872 0.361111 +vt 0.907193 0.354167 +vt 0.908353 0.361111 +vt 0.904872 0.381944 +vt 0.908353 0.402778 +vt 0.904872 0.402778 +vt 0.879350 0.381944 +vt 0.890951 0.402778 +vt 0.879350 0.402778 +vt 0.890951 0.381944 +vt 0.893271 0.402778 +vt 0.877030 0.312500 +vt 0.874710 0.291667 +vt 0.877030 0.291667 +vt 0.888631 0.312500 +vt 0.893271 0.291667 +vt 0.893271 0.312500 +vt 0.893271 0.381944 +vt 0.893271 0.354167 +vt 0.877030 0.354167 +vt 0.875870 0.361111 +vt 0.893271 0.347222 +vt 0.907193 0.409722 +vt 0.907193 0.416667 +vt 0.888631 0.333333 +vt 0.893271 0.333333 +vt 0.874710 0.284722 +vt 0.877030 0.284722 +vt 0.911833 0.381944 +vt 0.893271 0.409722 +vt 0.877030 0.409722 +vt 0.879350 0.409722 +vt 0.890951 0.409722 +vt 0.874710 0.312500 +vt 0.885151 0.333333 +vt 0.885151 0.291667 +vt 0.881671 0.312500 +vt 0.885151 0.347222 +vt 0.888631 0.347222 +vt 0.888631 0.291667 +vt 0.885151 0.277778 +vt 0.888631 0.277778 +vt 0.921114 0.041667 +vt 0.907192 0.138889 +vt 0.907192 0.041667 +vt 0.928074 0.041667 +vt 0.921114 0.138889 +vt 0.941995 0.138889 +vt 0.928074 0.138889 +vt 0.948956 0.041667 +vt 0.941995 0.041667 +vt 0.943155 0.006944 +vt 0.928074 0.159722 +vt 0.926914 0.006944 +vt 0.910673 0.006944 +vt 0.931554 0.006944 +vt 0.867749 0.111111 +vt 0.863109 0.180556 +vt 0.863109 0.111111 +vt 0.879350 0.180556 +vt 0.867749 0.180556 +vt 0.893271 0.111111 +vt 0.888631 0.180556 +vt 0.888631 0.111111 +vt 0.904872 0.111111 +vt 0.893271 0.180556 +vt 0.893271 0.076389 +vt 0.888631 0.069444 +vt 0.893271 0.215278 +vt 0.888631 0.222222 +vt 0.883991 0.180556 +vt 0.879350 0.215278 +vt 0.883991 0.222222 +vt 0.879350 0.076389 +vt 0.883991 0.111111 +vt 0.879350 0.111111 +vt 0.883991 0.069444 +vt 0.844548 0.618056 +vt 0.849188 0.583333 +vt 0.844548 0.548611 +vt 0.853828 0.111111 +vt 0.858469 0.180556 +vt 0.853828 0.180556 +vt 0.858469 0.111111 +vt 0.853828 0.583333 +vt 0.849188 0.618056 +vt 0.853828 0.618056 +vt 0.853828 0.548611 +vt 0.849188 0.548611 +vt 0.858469 0.548611 +vt 0.858469 0.618056 +vt 0.816705 0.187500 +vt 0.819026 0.194444 +vt 0.819026 0.187500 +vt 0.800464 0.187500 +vt 0.798144 0.194444 +vt 0.800464 0.194444 +vt 0.874710 0.340278 +vt 0.875870 0.402778 +vt 0.881671 0.333333 +vt 0.881671 0.291667 +vt 0.948956 0.138889 +vt 0.947796 0.006944 +vt 0.941995 0.159722 +vt 0.922274 0.006944 +vt 0.917633 0.006944 +vt 0.938515 0.006944 +vt 0.904872 0.180556 +vt 0.816705 0.194444 +vt 0.798144 0.187500 +vt 0.851508 0.090278 +vt 0.758701 0.104167 +vt 0.851508 0.104167 +vt 0.851508 0.076389 +vt 0.758701 0.090278 +vt 0.851508 0.062500 +vt 0.758701 0.076389 +vt 0.851508 0.048611 +vt 0.758701 0.062500 +vt 0.851508 0.034722 +vt 0.758701 0.048611 +vt 0.851508 0.020833 +vt 0.758701 0.034722 +vt 0.851508 0.118056 +vt 0.758701 0.131944 +vt 0.851508 0.131944 +vt 0.758701 0.118056 +vt 0.800464 0.208333 +vt 0.816705 0.201389 +vt 0.800464 0.201389 +vt 0.800464 0.180556 +vt 0.816705 0.180556 +vt 0.758701 0.020833 +vt 0.816705 0.208333 +vn -0.8944 0.4472 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.0000 -1.0000 +vn -0.8944 -0.4472 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.9578 0.2873 +vn 0.0000 0.9578 0.2873 +vn -0.9950 0.0000 0.0995 +vn 0.9950 0.0000 0.0995 +vn 0.9285 0.0000 -0.3714 +vn 0.9285 0.0000 0.3714 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.7071 -0.0000 +vn 0.7071 -0.7071 -0.0000 +vn -0.7071 -0.7071 0.0000 +s off +f 2181/3608/483 2182/3609/483 2183/3610/483 +f 2184/3611/484 2185/3612/484 2186/3613/484 +f 2187/3614/485 2188/3615/485 2189/3616/485 +f 2190/3617/486 2191/3618/486 2192/3619/486 +f 2192/3620/487 2189/3616/487 2193/3621/487 +f 2194/3622/488 2195/3623/488 2196/3624/488 +f 2197/3625/488 2182/3626/488 2198/3627/488 +f 2199/3628/487 2200/3629/487 2201/3630/487 +f 2202/3631/485 2203/3632/485 2200/3629/485 +f 2204/3633/489 2196/3634/489 2205/3635/489 +f 2206/3636/485 2193/3637/485 2199/3638/485 +f 2207/3639/488 2198/3627/488 2203/3632/488 +f 2208/3640/488 2194/3622/488 2188/3615/488 +f 2190/3641/487 2193/3621/487 2205/3642/487 +f 2192/3619/486 2208/3640/486 2187/3643/486 +f 2186/3613/484 2209/3644/484 2181/3645/484 +f 2210/3646/485 2199/3638/485 2201/3647/485 +f 2188/3615/488 2197/3625/488 2207/3639/488 +f 2205/3635/489 2195/3648/489 2190/3649/489 +f 2197/3625/488 2196/3624/488 2211/3650/488 +f 2193/3621/487 2202/3631/487 2199/3628/487 +f 2189/3616/485 2207/3639/485 2202/3631/485 +f 2203/3632/488 2185/3612/488 2212/3651/488 +f 2181/3652/487 2201/3630/487 2186/3653/487 +f 2200/3629/485 2212/3651/485 2184/3654/485 +f 2201/3630/487 2184/3654/487 2186/3653/487 +f 2198/3627/488 2209/3644/488 2185/3612/488 +f 2183/3610/483 2211/3655/483 2204/3633/483 +f 2213/3656/487 2206/3636/487 2210/3646/487 +f 2214/3657/487 2206/3636/487 2215/3658/487 +f 2183/3659/484 2210/3646/484 2201/3660/484 +f 2216/3661/486 2205/3662/486 2193/3663/486 +f 2215/3658/483 2183/3610/483 2204/3633/483 +f 2205/3635/489 2215/3658/489 2204/3633/489 +f 2217/3664/490 2218/3665/490 2219/3666/490 +f 2220/3667/484 2221/3668/484 2217/3664/484 +f 2220/3667/485 2222/3669/485 2223/3670/485 +f 2219/3671/486 2222/3669/486 2224/3672/486 +f 2225/3673/491 2219/3671/491 2224/3672/491 +f 2222/3669/488 2221/3674/488 2223/3670/488 +f 2217/3664/492 2226/3675/492 2220/3667/492 +f 2227/3676/493 2217/3664/493 2219/3666/493 +f 2226/3677/494 2224/3672/494 2220/3667/494 +f 2228/3678/483 2229/3679/483 2230/3680/483 +f 2228/3678/484 2231/3681/484 2232/3682/484 +f 2233/3683/485 2234/3684/485 2235/3685/485 +f 2236/3686/486 2237/3687/486 2233/3683/486 +f 2236/3688/487 2235/3685/487 2238/3689/487 +f 2234/3684/488 2239/3690/488 2240/3691/488 +f 2241/3692/488 2232/3693/488 2231/3681/488 +f 2234/3684/488 2229/3694/488 2241/3692/488 +f 2228/3695/487 2242/3696/487 2243/3697/487 +f 2238/3689/487 2242/3696/487 2230/3698/487 +f 2242/3696/485 2231/3681/485 2243/3697/485 +f 2234/3699/486 2244/3700/486 2235/3701/486 +f 2236/3702/489 2240/3703/489 2239/3704/489 +f 2230/3680/490 2240/3703/490 2238/3705/490 +f 2245/3706/495 2234/3707/495 2241/3708/495 +f 2244/3700/496 2242/3709/496 2235/3710/496 +f 2242/3711/484 2245/3706/484 2241/3712/484 +f 2246/3713/484 2247/3714/484 2248/3715/484 +f 2249/3716/486 2250/3717/486 2251/3718/486 +f 2181/3608/483 2209/3719/483 2182/3609/483 +f 2184/3611/484 2212/3651/484 2185/3612/484 +f 2187/3614/485 2208/3640/485 2188/3615/485 +f 2190/3617/486 2195/3623/486 2191/3618/486 +f 2192/3620/487 2187/3614/487 2189/3616/487 +f 2194/3622/488 2191/3618/488 2195/3623/488 +f 2197/3625/488 2211/3650/488 2182/3626/488 +f 2199/3628/487 2202/3631/487 2200/3629/487 +f 2202/3631/485 2207/3639/485 2203/3632/485 +f 2204/3633/489 2211/3655/489 2196/3634/489 +f 2206/3636/485 2216/3661/485 2193/3637/485 +f 2207/3639/488 2197/3625/488 2198/3627/488 +f 2208/3640/488 2191/3618/488 2194/3622/488 +f 2190/3641/487 2192/3620/487 2193/3621/487 +f 2192/3619/486 2191/3618/486 2208/3640/486 +f 2186/3613/484 2185/3612/484 2209/3644/484 +f 2210/3646/485 2206/3636/485 2199/3638/485 +f 2188/3615/488 2194/3622/488 2197/3625/488 +f 2205/3635/489 2196/3634/489 2195/3648/489 +f 2197/3625/488 2194/3622/488 2196/3624/488 +f 2193/3621/487 2189/3616/487 2202/3631/487 +f 2189/3616/485 2188/3615/485 2207/3639/485 +f 2203/3632/488 2198/3627/488 2185/3612/488 +f 2181/3652/487 2183/3720/487 2201/3630/487 +f 2200/3629/485 2203/3632/485 2212/3651/485 +f 2201/3630/487 2200/3629/487 2184/3654/487 +f 2198/3627/488 2182/3626/488 2209/3644/488 +f 2183/3610/483 2182/3609/483 2211/3655/483 +f 2213/3656/487 2215/3658/487 2206/3636/487 +f 2214/3657/487 2216/3661/487 2206/3636/487 +f 2183/3659/484 2213/3656/484 2210/3646/484 +f 2216/3661/486 2214/3657/486 2205/3662/486 +f 2215/3658/483 2213/3721/483 2183/3610/483 +f 2205/3635/489 2214/3722/489 2215/3658/489 +f 2217/3664/490 2221/3668/490 2218/3665/490 +f 2220/3667/484 2223/3670/484 2221/3668/484 +f 2220/3667/485 2224/3672/485 2222/3669/485 +f 2219/3671/486 2218/3723/486 2222/3669/486 +f 2225/3673/491 2227/3724/491 2219/3671/491 +f 2222/3669/488 2218/3725/488 2221/3674/488 +f 2217/3664/492 2252/3726/492 2226/3675/492 +f 2227/3676/493 2252/3727/493 2217/3664/493 +f 2226/3677/494 2225/3728/494 2224/3672/494 +f 2228/3678/483 2232/3682/483 2229/3679/483 +f 2228/3678/484 2243/3697/484 2231/3681/484 +f 2233/3683/485 2237/3687/485 2234/3684/485 +f 2236/3686/486 2239/3729/486 2237/3687/486 +f 2236/3688/487 2233/3683/487 2235/3685/487 +f 2234/3684/488 2237/3687/488 2239/3690/488 +f 2241/3692/488 2229/3694/488 2232/3693/488 +f 2234/3684/488 2240/3691/488 2229/3694/488 +f 2228/3695/487 2230/3698/487 2242/3696/487 +f 2238/3689/487 2235/3685/487 2242/3696/487 +f 2242/3696/485 2241/3692/485 2231/3681/485 +f 2236/3702/489 2238/3705/489 2240/3703/489 +f 2230/3680/490 2229/3679/490 2240/3703/490 +f 2245/3706/495 2244/3700/495 2234/3707/495 +f 2244/3700/496 2245/3706/496 2242/3709/496 +f 2246/3713/484 2253/3730/484 2247/3714/484 +f 2249/3716/486 2254/3731/486 2250/3717/486 +s 1 +f 2255/3732/497 2256/3733/490 2257/3734/490 +f 2258/3735/484 2259/3736/497 2255/3732/497 +f 2260/3737/498 2261/3738/484 2258/3735/484 +f 2262/3739/485 2263/3740/498 2260/3737/498 +f 2264/3741/499 2265/3742/485 2262/3739/485 +f 2266/3743/486 2267/3744/499 2264/3741/499 +f 2268/3745/500 2269/3746/486 2266/3747/486 +f 2257/3734/490 2270/3748/500 2268/3745/500 +f 2254/3749/490 2247/3750/488 2250/3751/488 +f 2249/3716/487 2253/3730/485 2246/3713/487 +f 2254/3752/490 2246/3713/487 2248/3753/490 +f 2251/3718/485 2247/3750/488 2253/3730/485 +f 2255/3732/497 2259/3736/497 2256/3733/490 +f 2258/3735/484 2261/3738/484 2259/3736/497 +f 2260/3737/498 2263/3740/498 2261/3738/484 +f 2262/3739/485 2265/3742/485 2263/3740/498 +f 2264/3741/499 2267/3744/499 2265/3742/485 +f 2266/3743/486 2269/3754/486 2267/3744/499 +f 2268/3745/500 2270/3748/500 2269/3746/486 +f 2257/3734/490 2256/3733/490 2270/3748/500 +f 2254/3749/490 2248/3755/490 2247/3750/488 +f 2249/3716/487 2251/3718/485 2253/3730/485 +f 2254/3752/490 2249/3716/487 2246/3713/487 +f 2251/3718/485 2250/3751/488 2247/3750/488 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index f98373184..353359465 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -254,6 +254,7 @@ "weapon.fire.aberrator": {"category": "player", "sounds": ["weapon/fire/aberrator"]}, "weapon.fire.stab": {"category": "player", "sounds": ["weapon/fire/stab1", "weapon/fire/stab2"]}, "weapon.fire.grenade": {"category": "player", "sounds": ["weapon/fire/grenade"]}, + "weapon.fire.amat": {"category": "player", "sounds": ["weapon/fire/amat"]}, "weapon.reload.boltClose": {"category": "player", "sounds": ["weapon/reload/boltClose"]}, "weapon.reload.boltOpen": {"category": "player", "sounds": ["weapon/reload/boltOpen"]}, diff --git a/src/main/resources/assets/hbm/sounds/weapon/fire/amat.ogg b/src/main/resources/assets/hbm/sounds/weapon/fire/amat.ogg new file mode 100644 index 0000000000000000000000000000000000000000..53d64ec8db627d605b5d1b2d93ee4c7442bdf489 GIT binary patch literal 43853 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 I&r|3A3o7lI#{d8T literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/breeder.png b/src/main/resources/assets/hbm/textures/models/machines/breeder.png index 70182684c4c2269d63077fe47e46821cc282a2cf..edece64715110d5027028e1c2dae5c8ea4441270 100644 GIT binary patch literal 820 zcmeAS@N?(olHy`uVBq!ia0vp^*+6W-!3-o7HA+AdjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilO0(?STLqbB*)6>h#%Z-eT^!4?pPMxZwqobvzrJl+^8xRoi{{}-)P*7-S=(*?5A|fJ|ox2tm z78V#7=;!C>?d|R1;o<7)>g??7;NY-&_3C~5_SxFnPMS2y%F4>z+}zaE6lnfq1~w5O zrB@Q<7yO?Tz|hoR917IQS>O>_%)r2R7=#&*=dVZs2Ect!7srqY_r23OgAN<;xXzw7 zx2={_L?b)0^#ALRYgZiI==}MvPQJr6ktOEeIt2PtEFJ{Knx-W8`{*p}UBg`R;uZ`yBR8;dkJfUVt`} z>AGNpD>-u-#WqjevcC92TD;{369uga+y{2v*=)~h&DZaJVCS27)?TxZ6SaW~W0>>I zx@`2jKJK_M^+fV@-Ur{7+I_jmV)86%+0my;+Z)OgpA^kJn-=nJl~HbxUJ<)c?Dtt_ z&w-NL*0W!DEcxrfQ=awdS8^=O3a1|DNZ}JYe<9<{^r_m{l^?`dU3`%|`R)w;SnVgA z1$y2YTMkscP&(gG{L)#E@j6Sl*mUFnOgnCFI4;v`w(`wu(JvKkcAwZRt{>8UU(*vS z-%wn;EA`;<8(&$gtPXeNA2{n)UB|F}{Wl+mm|yIIY?n1+cf8^AzBB!Ha(P6)dHq2X zFY(O>?jr(!28a6u!uI zH~qr=E9bP0 Hl+XkK;)`V_ literal 2533 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 diff --git a/src/main/resources/assets/hbm/textures/models/network/fluid_diode.png b/src/main/resources/assets/hbm/textures/models/network/fluid_diode.png new file mode 100644 index 0000000000000000000000000000000000000000..a2445b2399ce386090de3224555533d22fcd10ec GIT binary patch literal 928 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

7mot>s$ zfiHnijvZsa-MFEuw+sNw1-I<;(GQ!Jtp!U_WE22kXCGknjo*L0$zOl^`EffeX!_XF z06kSY6wS=cs7;)GcOPyUa}*rEsvkgnJ)o70Qe9DM-eqZ#(+#S znvNf5KVH1ZhkbSSEbF+rq{gyhv~|{NO-9_H5df*6EdxN@N8orX?)J<;&@YKK(SURS z02)SH-Bf6&qpzhAT#W`GDvN?BtxN+_u>qjvDJx?K4;RAMsseV8GA@D2j59xm*m58Y2iI6+4%Lq0uKxu{^WV+R|d!9IUO?*nn_Pj}<8m z0Mz+mZ|{m&q8MAGC=c~VY*1{MoemYo&O!K;j*gZRWMPL50J3n>(#rCN2Ba0vEF`v} z0hyXKMNyQ;kqFxp2r&G{007|5Bob^qk$C$6fbhfp{YqI$2`eZq%^1*5 zH8`V;O;1d4EpP%rYip}={rYvzC+gnq+u3L=#&>)4UJnBL;T`(^eEG8Zao8z>nI3=o z^l7EIxR`$iNtuW-^+h5qIX}<-ynEMBxQ`DXR*FkXSh?5xW&nUg7h)6u0GT2BP zY}>}F0)gz;fcExwh2ne^5&GrI6^^Y8fJ>JyaT|dCZEbDYZ3EJwMP@YC{SwGJ0G#F* zr2GEg3c$2$Kw)7aUw;%5UrmCA$h6b@{|x{v5LlNQAjbclrod!e1F8=mRB&Z3rr3%1 z0EqS)20Y>cv1iZJxB1jlYr4}dJcK;&AyPt3&a zFX932ygYsy#D6&M-Mg1(yiq&>0Tmpn5l?UoK&J8wM8Hz@0*D9X Date: Tue, 3 Jun 2025 12:52:07 +0300 Subject: [PATCH 134/491] Fix posture and inscription --- src/main/java/com/hbm/blocks/generic/BlockBobble.java | 2 +- src/main/java/com/hbm/render/tileentity/RenderBobble.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockBobble.java b/src/main/java/com/hbm/blocks/generic/BlockBobble.java index 067363c2d..ea53feb69 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockBobble.java +++ b/src/main/java/com/hbm/blocks/generic/BlockBobble.java @@ -214,7 +214,7 @@ public class BlockBobble extends BlockContainer implements IGUIProvider, INBTTra MICROWAVE( "Microwave", "Microwave", "OC Compatibility and massive RBMK/packet optimizations", "they call me the food heater$john optimization", true, ScrapType.BOARD_CONVERTER), PEEP( "Peep", "LePeeperSauvage", "Coilgun, Leadburster and Congo Lake models, BDCL QC", "Fluffy ears can't hide in ash, nor snow.", true, ScrapType.CARD_BOARD), MELLOW( "MELLOWARPEGGIATION", "Mellow", "NBT Structures, industrial lighting, animation tools", "Make something cool now, ask for permission later.", true, ScrapType.CARD_PROCESSOR), - ABEL( "Abel1502", "Abel1502", "Abilities GUI, optimizations and many QoL improvements", "NANTO SUBARASHII!", true, ScrapType.CPU_REGISTER); + ABEL( "Abel1502", "Abel1502", "Abilities GUI, optimizations and many QoL improvements", "NANTO SUBARASHII", true, ScrapType.CPU_REGISTER); public String name; //the title of the tooltip public String label; //the name engraved in the socket diff --git a/src/main/java/com/hbm/render/tileentity/RenderBobble.java b/src/main/java/com/hbm/render/tileentity/RenderBobble.java index 979da575a..4bb36748e 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBobble.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBobble.java @@ -223,8 +223,8 @@ public class RenderBobble extends TileEntitySpecialRenderer { rotRightLeg = new double[]{-3, -5, 0}; break; case ABEL: - rotLeftArm = new double[]{0, 15, 80}; - rotRightArm = new double[]{0, 15, 80}; + rotLeftArm = new double[]{0, 80, 90}; + rotRightArm = new double[]{0, -80, 90}; break; } } From d9ef97f34596ab9ee7ce0440f0f750e48bcdd0bc Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 14:08:02 +0300 Subject: [PATCH 135/491] Add glow --- .../com/hbm/render/tileentity/RenderBobble.java | 8 ++++++++ .../hbm/textures/models/trinkets/abel_glow.png | Bin 0 -> 553 bytes 2 files changed, 8 insertions(+) create mode 100644 src/main/resources/assets/hbm/textures/models/trinkets/abel_glow.png diff --git a/src/main/java/com/hbm/render/tileentity/RenderBobble.java b/src/main/java/com/hbm/render/tileentity/RenderBobble.java index 4bb36748e..58e8ee850 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBobble.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBobble.java @@ -51,6 +51,7 @@ public class RenderBobble extends TileEntitySpecialRenderer { public static final ResourceLocation bobble_mellow = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/mellowrpg8.png"); public static final ResourceLocation bobble_mellow_glow = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/mellowrpg8_glow.png"); public static final ResourceLocation bobble_abel = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/abel.png"); + public static final ResourceLocation bobble_abel_glow = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/abel_glow.png"); private long time; @@ -478,6 +479,13 @@ public class RenderBobble extends TileEntitySpecialRenderer { GL11.glDisable(GL11.GL_BLEND); GL11.glPopAttrib(); break; + case ABEL: + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + bindTexture(bobble_abel_glow); + renderGuy(type); + GL11.glPopAttrib(); + break; } } diff --git a/src/main/resources/assets/hbm/textures/models/trinkets/abel_glow.png b/src/main/resources/assets/hbm/textures/models/trinkets/abel_glow.png new file mode 100644 index 0000000000000000000000000000000000000000..6886dad7cb547cd559e3723fb8fa375cd9604be9 GIT binary patch literal 553 zcmV+^0@nSBP)*ks^wPf+&ckL@-UXNFo@uNybegByrhI5U~|(ECdVD z##iA#&{nWj5ClaKv9c@Koy&UYgpQvv|!*w%a<`&rI2&$8DN{bB_m009U<0000C>g^#yz69&? rWu_tq000000000Q{s(-_0Px=pjPobc#{x8F00000NkvXXu0mjf_~PT9 literal 0 HcmV?d00001 From 3733a8bee9a5ad536104ac2efc4186d15a22157e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 15:52:29 +0300 Subject: [PATCH 136/491] Fan force falloff Previously, with two fans facing into each other, either one of them would completely overpower the other, or they'd cancel each other out. Now the force is inversely proportional to the distance, so the items end up in the middle --- src/main/java/com/hbm/blocks/machine/MachineFan.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index 37a96e5f8..121044d44 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -18,6 +18,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -103,10 +104,13 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro List affected = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(xCoord + 0.5 + Math.min(x, 0), yCoord + 0.5 + Math.min(y, 0), zCoord + 0.5 + Math.min(z, 0), xCoord + 0.5 + Math.max(x, 0), yCoord + 0.5 + Math.max(y, 0), zCoord + 0.5 + Math.max(z, 0)).expand(0.5, 0.5, 0.5)); for(Entity e : affected) { + + double dist = e.getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); + double coeff = push * (1 - dist / range / 2); - e.motionX += dir.offsetX * push; - e.motionY += dir.offsetY * push; - e.motionZ += dir.offsetZ * push; + e.motionX += dir.offsetX * coeff; + e.motionY += dir.offsetY * coeff; + e.motionZ += dir.offsetZ * coeff; } if(worldObj.isRemote && worldObj.rand.nextInt(30) == 0) { From 79d510aefb2238df57e278f9963362ad8716f98e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 16:32:48 +0300 Subject: [PATCH 137/491] Increase base fan force --- src/main/java/com/hbm/blocks/machine/MachineFan.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index 121044d44..e4079cfbc 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -81,7 +81,7 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro int range = 10; int effRange = 0; - double push = 0.1; + double push = 0.15; for(int i = 1; i <= range; i++) { Block block = worldObj.getBlock(xCoord + dir.offsetX * i, yCoord + dir.offsetY * i, zCoord + dir.offsetZ * i); From f8d827d6cdfa9b907812d3373918afd6d1f379a8 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 19:03:19 +0300 Subject: [PATCH 138/491] Make autosaw respect walls Previously the blade always phased through solid walls. Now, if colliding with one, it will retract forcibly. In case there are valid targets behind a wall, it will ignore them for the next 5 degrees of rotation --- .../machine/TileEntityMachineAutosaw.java | 86 ++++++++++--------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index d7bddd3a1..122697ca6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -63,6 +63,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB private int state = 0; private int turnProgress; + private int forceSkip = 0; public float spin; public float lastSpin; @@ -126,40 +127,42 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB this.rotationYaw -= 360; } - final double CUT_ANGLE = Math.toRadians(5); - double rotationYawRads = Math.toRadians((rotationYaw + 270) % 360); + if(forceSkip > 0) { + forceSkip--; + } else { + final double CUT_ANGLE = Math.toRadians(5); + double rotationYawRads = Math.toRadians((rotationYaw + 270) % 360); - outer: - for(int dx = -9; dx <= 9; dx++) { - for(int dz = -9; dz <= 9; dz++) { - int sqrDst = dx * dx + dz * dz; + outer: + for(int dx = -9; dx <= 9; dx++) { + for(int dz = -9; dz <= 9; dz++) { + int sqrDst = dx * dx + dz * dz; - if(sqrDst <= 4 || sqrDst > 81) - continue; - - double angle = Math.atan2(dz, dx); - double relAngle = Math.abs(angle - rotationYawRads); - relAngle = Math.abs((relAngle + Math.PI) % (2 * Math.PI) - Math.PI); + if(sqrDst <= 4 || sqrDst > 81) + continue; + + double angle = Math.atan2(dz, dx); + double relAngle = Math.abs(angle - rotationYawRads); + relAngle = Math.abs((relAngle + Math.PI) % (2 * Math.PI) - Math.PI); - if(relAngle > CUT_ANGLE) - continue; + if(relAngle > CUT_ANGLE) + continue; - int x = xCoord + dx; - int y = yCoord + 1; - int z = zCoord + dz; + int x = xCoord + dx; + int y = yCoord + 1; + int z = zCoord + dz; - Block b = worldObj.getBlock(x, y, z); - if(!(b.getMaterial() == Material.wood || b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants)) - continue; + Block b = worldObj.getBlock(x, y, z); + if(!(b.getMaterial() == Material.wood || b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants)) + continue; - int meta = worldObj.getBlockMetadata(x, y, z); - if(shouldIgnore(worldObj, x, y, z, b, meta)) - continue; - - // com.hbm.main.MainRegistry.logger.info("[Abel] found target at " + x + ", " + y + ", " + z + ", angle=" + rotationYaw); - - state = 1; - break outer; + int meta = worldObj.getBlockMetadata(x, y, z); + if(shouldIgnore(worldObj, x, y, z, b, meta)) + continue; + + state = 1; + break outer; + } } } } @@ -247,21 +250,22 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB Block b = worldObj.getBlock(x, y, z); int meta = worldObj.getBlockMetadata(x, y, z); - if(shouldIgnore(worldObj, x, y, z, b, meta)) { - return; - } - - if(b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants) { - cutCrop(x, y, z); - return; - } - - if(b.getMaterial() == Material.wood) { - fellTree(x, y, z); - if(state == 1) { - state = 2; + if(!shouldIgnore(worldObj, x, y, z, b, meta)) { + if(b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants) { + cutCrop(x, y, z); + } else if(b.getMaterial() == Material.wood) { + fellTree(x, y, z); + if(state == 1) { + state = 2; + } } } + + // Return when hitting a wall + if(state == 1 && worldObj.getBlock(x, y, z).isNormalCube(worldObj, x, y, z)) { + state = 2; + forceSkip = 5; + } } protected void cutCrop(int x, int y, int z) { From 8c196f05ca619d9282bbe73e3cf3e5b75af7ca49 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 20:08:02 +0300 Subject: [PATCH 139/491] Save forseSkip to NBT Not included in `serialize()` and `deserialize()` because it is server-side-only --- .../com/hbm/tileentity/machine/TileEntityMachineAutosaw.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index 122697ca6..6cfcafa54 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -52,6 +52,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public FluidTank tank; public boolean isOn; + private int forceSkip; public float syncYaw; public float rotationYaw; public float prevRotationYaw; @@ -63,7 +64,6 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB private int state = 0; private int turnProgress; - private int forceSkip = 0; public float spin; public float lastSpin; @@ -365,6 +365,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.isOn = nbt.getBoolean("isOn"); + this.forceSkip = nbt.getInteger("skip"); this.rotationYaw = nbt.getFloat("yaw"); this.rotationPitch = nbt.getFloat("pitch"); this.state = nbt.getInteger("state"); @@ -375,6 +376,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setBoolean("isOn", this.isOn); + nbt.setInteger("skip", this.forceSkip); nbt.setFloat("yaw", this.rotationYaw); nbt.setFloat("pitch", this.rotationPitch); nbt.setInteger("state", this.state); From df8d456a907bb5edfe557904c1eca07ca336f4bb Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 20:22:25 +0300 Subject: [PATCH 140/491] Allow suspending autosaw with a screwdriver Localized, though I'm not sure if it really needs to be --- .../hbm/blocks/machine/MachineAutosaw.java | 25 ++++++++++++++++++- .../machine/TileEntityMachineAutosaw.java | 9 +++++-- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + src/main/resources/assets/hbm/lang/it_IT.lang | 1 + src/main/resources/assets/hbm/lang/pl_PL.lang | 1 + src/main/resources/assets/hbm/lang/ru_RU.lang | 1 + src/main/resources/assets/hbm/lang/uk_UA.lang | 1 + src/main/resources/assets/hbm/lang/zh_CN.lang | 1 + 9 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java b/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java index f8fb34a2c..67e58f18f 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java +++ b/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java @@ -10,6 +10,7 @@ import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.tileentity.machine.TileEntityMachineAutosaw; import com.hbm.util.i18n.I18nUtil; +import api.hbm.block.IToolable; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; @@ -22,7 +23,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; -public class MachineAutosaw extends BlockContainer implements ILookOverlay, ITooltipProvider { +public class MachineAutosaw extends BlockContainer implements ILookOverlay, ITooltipProvider, IToolable { public MachineAutosaw() { super(Material.iron); @@ -72,6 +73,24 @@ public class MachineAutosaw extends BlockContainer implements ILookOverlay, IToo return true; } + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + if(tool != ToolType.SCREWDRIVER) + return false; + + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityMachineAutosaw)) + return false; + + TileEntityMachineAutosaw saw = (TileEntityMachineAutosaw) te; + + saw.isSuspended = !saw.isSuspended; + saw.markDirty(); + + return true; + } + @Override public void printHook(Pre event, World world, int x, int y, int z) { @@ -84,6 +103,10 @@ public class MachineAutosaw extends BlockContainer implements ILookOverlay, IToo List text = new ArrayList(); text.add(saw.tank.getTankType().getLocalizedName() + ": " + saw.tank.getFill() + "/" + saw.tank.getMaxFill() + "mB"); + + if (saw.isSuspended) { + text.add(EnumChatFormatting.RED + "! " + I18nUtil.resolveKey(getUnlocalizedName() + ".suspended") + " !"); + } ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index 6cfcafa54..72a3e9b8c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -52,6 +52,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public FluidTank tank; public boolean isOn; + public boolean isSuspended; private int forceSkip; public float syncYaw; public float rotationYaw; @@ -88,7 +89,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB this.subscribeToAllAround(tank.getTankType(), this); } - if(isOn) { + if(isOn && !isSuspended) { Vec3 pivot = Vec3.createVectorHelper(xCoord + 0.5, yCoord + 1.75, zCoord + 0.5); Vec3 upperArm = Vec3.createVectorHelper(0, 0, -4); upperArm.rotateAroundX((float) Math.toRadians(80 - rotationPitch)); @@ -202,7 +203,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB this.lastSpin = this.spin; - if(isOn) { + if(isOn && !isSuspended) { this.spin += 15F; Vec3 vec = Vec3.createVectorHelper(0.625, 0, 1.625); @@ -347,6 +348,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB @Override public void serialize(ByteBuf buf) { buf.writeBoolean(this.isOn); + buf.writeBoolean(this.isSuspended); buf.writeFloat(this.rotationYaw); buf.writeFloat(this.rotationPitch); this.tank.serialize(buf); @@ -355,6 +357,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB @Override public void deserialize(ByteBuf buf) { this.isOn = buf.readBoolean(); + this.isSuspended = buf.readBoolean(); this.syncYaw = buf.readFloat(); this.syncPitch = buf.readFloat(); this.turnProgress = 3; //use 3-ply for extra smoothness @@ -365,6 +368,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.isOn = nbt.getBoolean("isOn"); + this.isSuspended = nbt.getBoolean("isSuspended"); this.forceSkip = nbt.getInteger("skip"); this.rotationYaw = nbt.getFloat("yaw"); this.rotationPitch = nbt.getFloat("pitch"); @@ -376,6 +380,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setBoolean("isOn", this.isOn); + nbt.setBoolean("isSuspended", this.isSuspended); nbt.setInteger("skip", this.forceSkip); nbt.setFloat("yaw", this.rotationYaw); nbt.setFloat("pitch", this.rotationPitch); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 984ab6040..0d4393362 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4324,6 +4324,7 @@ tile.machine_assemfac.name=Fertigungsfabrik tile.machine_autocrafter.name=Automatische Werkbank tile.machine_autosaw.name=Automatische Kreissäge tile.machine_autosaw.desc=Schneidet Pflanzen nieder, pflanzt Bäume nach$Akzeptiert:$-Holzöl$-Ethanol$-Fischöl$-Schweröl +tile.machine_autosaw.suspended=Angehalten tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energiespeicherblock tile.machine_battery_potato.name=Kartoffelbatterieblock diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index df2d909a3..f0e82f906 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5458,6 +5458,7 @@ tile.machine_assemfac.name=Assembly Factory tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_autosaw.name=Automatic Buzz Saw tile.machine_autosaw.desc=Cuts down nearby plants, re-plants trees$Accepts:$-Wood oil$-Ethanol$-Fish oil$-Heavy oil +tile.machine_autosaw.suspended=Suspended tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energy Storage Block tile.machine_battery_potato.name=Potato Battery Block diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index c3d83825d..4ce24e6b5 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -5537,6 +5537,7 @@ tile.machine_assemfac.name=Assembly Factory tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_autosaw.name=Automatic Buzz Saw tile.machine_autosaw.desc=Cuts down nearby plants, re-plants trees$Accepts:$-Wood oil$-Ethanol$-Fish oil$-Heavy oil +tile.machine_autosaw.suspended=Suspended tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energy Storage Block tile.machine_battery_potato.name=Potato Battery Block diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index 3e5e63745..497d759fc 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -4873,6 +4873,7 @@ tile.machine_assembler.name=Assembly Machine tile.machine_assemfac.name=Assembly Factory tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_autosaw.name=Automatic Buzz Saw +tile.machine_autosaw.suspended=Suspended tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energy Storage Block tile.machine_battery_potato.name=Potato Battery Block diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 9208e7f21..a2217d3a1 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5720,6 +5720,7 @@ tile.machine_assemfac.name=Сборочный завод tile.machine_autocrafter.name=Автоматический верстак tile.machine_autosaw.name=Автоматическая пила tile.machine_autosaw.desc=Срубает ближайшие растения, пересаживает деревья$Принимает:$-Древесное масло$-Этанол$-Рыбное масло$-Тяжелую нефть +tile.machine_autosaw.suspended=Приостановлена tile.machine_bat9000.name=Охереть-большая цистерна 9000 tile.machine_battery.name=Энергохранилище tile.machine_battery_potato.name=Картофельная батарея diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 38cc3b361..0f9dfa371 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -5458,6 +5458,7 @@ tile.machine_assemfac.name=Збиральна фабрика tile.machine_autocrafter.name=Автоматичний верстак tile.machine_autosaw.name=Автоматична пила tile.machine_autosaw.desc=Вирубує рослини поруч, заново висажує дерева$Приймає:$-Деревну смолу$-Етанол$-Риб'ячий жир$-Важку нафту +tile.machine_autosaw.suspended=Припинено tile.machine_bat9000.name=Big-Ass цистерна 9000 tile.machine_battery.name=Блок накопичувач енергії tile.machine_battery_potato.name=Блок картопляних батарейок diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index e7727585b..6a85a4901 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5188,6 +5188,7 @@ tile.machine_assemfac.name=装配厂 tile.machine_autocrafter.name=自动工作台 tile.machine_autosaw.name=自动嗡嗡锯 tile.machine_autosaw.desc=砍伐附近的植物,重新种植树木$接受:$-木油$-乙醇$-鱼油$-重油 +tile.machine_autosaw.suspended=暂停 tile.machine_bat9000.name=巨尻-9000 储罐 tile.machine_battery.name=蓄电池 tile.machine_battery_potato.name=马铃薯电池组 From c19e867bfd76755a402a6e4b5fb805448fbebf0e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 20:31:17 +0300 Subject: [PATCH 141/491] Don't consume oil when suspended --- .../com/hbm/tileentity/machine/TileEntityMachineAutosaw.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index 72a3e9b8c..ad554d93a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -78,7 +78,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB if(!worldObj.isRemote) { - if(worldObj.getTotalWorldTime() % 20 == 0) { + if(!isSuspended && worldObj.getTotalWorldTime() % 20 == 0) { if(tank.getFill() > 0) { tank.setFill(tank.getFill() - 1); this.isOn = true; From c9110aaa330a980c5110992c33afc894199bdc28 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 23:57:04 +0300 Subject: [PATCH 142/491] NBT consistency for crates opened from inventory --- src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index 620ca918c..97d2cb7e8 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -154,6 +154,10 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider nbt.setTag("slot" + i, slot); } + if (nbt.hasNoTags()) { + nbt = null; + } + target.setTagCompound(nbt); } From 25e20662e4efee96ff2089026d147b3a3ca0bb0b Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 4 Jun 2025 16:11:38 +0200 Subject: [PATCH 143/491] a little gift for future me --- .../gui/GUIMachineChemicalPlant.java | 40 +++- .../gui/GUIScreenRecipeSelector.java | 199 +++++++++++++++--- .../hbm/inventory/gui/GuiInfoContainer.java | 24 ++- .../recipes/loader/GenericRecipe.java | 28 ++- .../recipes/loader/GenericRecipes.java | 20 ++ .../hbm/module/ModuleMachineChemplant.java | 26 ++- .../TileEntityMachineChemicalPlant.java | 27 ++- .../textures/gui/processing/gui_chemplant.png | Bin 4029 -> 3535 bytes .../gui/processing/gui_recipe_selector.png | Bin 1802 -> 1894 bytes 9 files changed, 326 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java index d2812ab1f..c960eea0c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -4,12 +4,16 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; public class GUIMachineChemicalPlant extends GuiInfoContainer { @@ -35,6 +39,15 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { } this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, chemplant.power, chemplant.maxPower); + + if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { + if(this.chemplant.chemplantModule.recipe != null && ChemicalPlantRecipes.INSTANCE.recipeNameMap.containsKey(this.chemplant.chemplantModule.recipe)) { + GenericRecipe recipe = (GenericRecipe) ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.chemplant.chemplantModule.recipe); + this.func_146283_a(recipe.print(), mouseX, mouseY); + } else { + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); + } + } } @Override @@ -61,10 +74,33 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { int p = (int) (chemplant.power * 61 / chemplant.maxPower); drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); - if(chemplant.maxProgress > 0) { - int j = chemplant.progress * 70 / chemplant.maxProgress; + if(chemplant.chemplantModule.progress > 0) { + int j = (int) Math.ceil(70 * chemplant.chemplantModule.progress); drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); } + + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule.recipe); + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); + + if(recipe != null && recipe.inputItem != null) { + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(chemplant.chemplantModule.inputSlots[i]); + if(!slot.getHasStack()) this.renderItem(recipe.inputItem[i].extractForCyclingDisplay(20), slot.xDisplayPosition, slot.yDisplayPosition, 10F); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(1F, 1F, 1F, 0.5F); + GL11.glEnable(GL11.GL_BLEND); + this.zLevel = 300F; + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(chemplant.chemplantModule.inputSlots[i]); + if(!slot.getHasStack()) drawTexturedModalRect(guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, slot.xDisplayPosition, slot.yDisplayPosition, 16, 16); + } + this.zLevel = 0F; + GL11.glColor4f(1F, 1F, 1F, 1F); + GL11.glDisable(GL11.GL_BLEND); + } for(int i = 0; i < 3; i++) { chemplant.inputTanks[i].renderTank(guiLeft + 8, guiTop + 52, this.zLevel, 16, 34); diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java index 9fedd4ef0..418fc2dbd 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java @@ -12,13 +12,20 @@ import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.lib.RefStrings; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; public class GUIScreenRecipeSelector extends GuiScreen { @@ -37,6 +44,7 @@ public class GUIScreenRecipeSelector extends GuiScreen { protected int pageIndex; protected int size; protected String selection; + public static final String NULL_SELECTION = "null"; // callback protected int index; protected IControlReceiver tile; @@ -52,6 +60,7 @@ public class GUIScreenRecipeSelector extends GuiScreen { this.selection = selection; this.index = index; this.previousScreen = previousScreen; + if(this.selection == null) this.selection = NULL_SELECTION; regenerateRecipes(); } @@ -106,6 +115,40 @@ public class GUIScreenRecipeSelector extends GuiScreen { this.drawGuiContainerForegroundLayer(mouseX, mouseY); GL11.glEnable(GL11.GL_LIGHTING); this.handleScroll(); + + if(guiLeft + 7 <= mouseX && guiLeft + 7 + 144 > mouseX && guiTop + 17 < mouseY && guiTop + 17 + 90 >= mouseY) { + for(int i = pageIndex * 8; i < pageIndex * 8 + 40; i++) { + if(i >= this.recipes.size()) break; + + int ind = i - pageIndex * 8; + int ix = 7 + 18 * (ind % 8); + int iy = 17 + 18 * (ind / 8); + + if(guiLeft + ix <= mouseX && guiLeft + ix + 18 > mouseX && guiTop + iy < mouseY && guiTop + iy + 18 >= mouseY) { + GenericRecipe recipe = recipes.get(i); + this.func_146283_a(recipe.print(), mouseX, mouseY); + } + } + } + + if(guiLeft + 151 <= mouseX && guiLeft + 151 + 18 > mouseX && guiTop + 71 < mouseY && guiTop + 71 + 18 >= mouseY) { + if(this.selection != null && this.recipeSet.recipeNameMap.containsKey(selection)) { + GenericRecipe recipe = (GenericRecipe) this.recipeSet.recipeNameMap.get(selection); + this.func_146283_a(recipe.print(), mouseX, mouseY); + } + } + + if(guiLeft + 152 <= mouseX && guiLeft + 152 + 16 > mouseX && guiTop + 90 < mouseY && guiTop + 90 + 16 >= mouseY) { + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Close", mouseX, mouseY); + } + + if(guiLeft + 134 <= mouseX && guiLeft + 134 + 16 > mouseX && guiTop + 108 < mouseY && guiTop + 108 + 16 >= mouseY) { + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Clear search", mouseX, mouseY); + } + + if(guiLeft + 8 <= mouseX && guiLeft + 8 + 16 > mouseX && guiTop + 108 < mouseY && guiTop + 108 + 16 >= mouseY) { + this.drawCreativeTabHoveringText(EnumChatFormatting.ITALIC + "Press ENTER to toggle focus", mouseX, mouseY); + } } protected void handleScroll() { @@ -118,7 +161,7 @@ public class GUIScreenRecipeSelector extends GuiScreen { } private void drawGuiContainerForegroundLayer(int x, int y) { - + this.search.drawTextBox(); } private void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { @@ -126,38 +169,148 @@ public class GUIScreenRecipeSelector extends GuiScreen { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + if(this.search.isFocused()) { + drawTexturedModalRect(guiLeft + 26, guiTop + 108, 0, 132, 106, 16); + } + + if(guiLeft + 152 <= mouseX && guiLeft + 152 + 16 > mouseX && guiTop + 18 < mouseY && guiTop + 18 + 16 >= mouseY) { + drawTexturedModalRect(guiLeft + 152, guiTop + 18, 176, 0, 16, 16); + } + + if(guiLeft + 152 <= mouseX && guiLeft + 152 + 16 > mouseX && guiTop + 36 < mouseY && guiTop + 36 + 16 >= mouseY) { + drawTexturedModalRect(guiLeft + 152, guiTop + 36, 176, 16, 16, 16); + } + + if(guiLeft + 152 <= mouseX && guiLeft + 152 + 16 > mouseX && guiTop + 90 < mouseY && guiTop + 90 + 16 >= mouseY) { + drawTexturedModalRect(guiLeft + 152, guiTop + 90, 176, 32, 16, 16); + } + + if(guiLeft + 134 <= mouseX && guiLeft + 134 + 16 > mouseX && guiTop + 108 < mouseY && guiTop + 108 + 16 >= mouseY) { + drawTexturedModalRect(guiLeft + 134, guiTop + 108, 176, 48, 16, 16); + } + + if(guiLeft + 8 <= mouseX && guiLeft + 8 + 16 > mouseX && guiTop + 108 < mouseY && guiTop + 108 + 16 >= mouseY) { + drawTexturedModalRect(guiLeft + 8, guiTop + 108, 176, 64, 16, 16); + } + + for(int i = pageIndex * 8; i < pageIndex * 8 + 40; i++) { + if(i >= recipes.size()) break; + int ind = i - pageIndex * 8; + GenericRecipe recipe = recipes.get(i); + if(recipe.getInternalName().equals(this.selection)) this.drawTexturedModalRect(guiLeft + 7 + 18 * (ind % 8), guiTop + 17 + 18 * (ind / 8), 192, 0, 18, 18); + } + for(int i = pageIndex * 8; i < pageIndex * 8 + 40; i++) { if(i >= recipes.size()) break; int ind = i - pageIndex * 8; - - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - RenderHelper.enableGUIStandardItemLighting(); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GenericRecipe recipe = recipes.get(i); - FontRenderer font = recipe.getIcon().getItem().getFontRenderer(recipe.getIcon()); - if(font == null) font = fontRendererObj; - - itemRender.zLevel = 100.0F; - itemRender.renderItemAndEffectIntoGUI(font, this.mc.getTextureManager(), recipe.getIcon(), guiLeft + 8 + 18 * (ind % 8), guiTop + 18 + 18 * (ind / 8)); - - itemRender.zLevel = 0.0F; - - GL11.glEnable(GL11.GL_ALPHA_TEST); - GL11.glDisable(GL11.GL_LIGHTING); + this.renderItem(recipe.getIcon(), 8 + 18 * (ind % 8), 18 + 18 * (ind / 8)); this.mc.getTextureManager().bindTexture(texture); + } + + if(this.selection != null && this.recipeSet.recipeNameMap.containsKey(selection)) { + GenericRecipe recipe = (GenericRecipe) this.recipeSet.recipeNameMap.get(selection); + this.renderItem(recipe.getIcon(), 152, 72); + } + } + + public void renderItem(ItemStack stack, int x, int y) { + + FontRenderer font = stack.getItem().getFontRenderer(stack); + if(font == null) font = fontRendererObj; + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + + itemRender.zLevel = 100.0F; + itemRender.renderItemAndEffectIntoGUI(font, this.mc.getTextureManager(), stack, guiLeft + x, guiTop + y); + itemRender.zLevel = 0.0F; + + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_LIGHTING); + } + + @Override + protected void mouseClicked(int x, int y, int k) { + super.mouseClicked(x, y, k); + + this.search.mouseClicked(x, y, k); + + if(guiLeft + 152 <= x && guiLeft + 152 + 16 > x && guiTop + 18 < y && guiTop + 18 + 16 >= y) { + click(); + if(this.pageIndex > 0) this.pageIndex--; + return; + } + + if(guiLeft + 152 <= x && guiLeft + 152 + 16 > x && guiTop + 36 < y && guiTop + 36 + 16 >= y) { + click(); + if(this.pageIndex < this.size) this.pageIndex++; + return; + } + + if(guiLeft + 134 <= x && guiLeft + 134 + 16 > x && guiTop + 108 < y && guiTop + 108 + 16 >= y) { + this.search.setText(""); + this.search(""); + this.search.setFocused(true); + return; + } + + for(int i = pageIndex * 8; i < pageIndex * 8 + 40; i++) { + if(i >= this.recipes.size()) break; - if(recipe.name.equals(this.selection)) - this.drawTexturedModalRect(guiLeft + 7 + 18 * (ind % 8), guiTop + 17 + 18 * (ind / 8), 192, 0, 18, 18); + int ind = i - pageIndex * 8; + int ix = 7 + 18 * (ind % 8); + int iy = 17 + 18 * (ind / 8); + + if(guiLeft + ix <= x && guiLeft + ix + 18 > x && guiTop + iy < y && guiTop + iy + 18 >= y) { + + String newSelection = ((GenericRecipe) recipes.get(i)).getInternalName(); + + if(!newSelection.equals(selection)) + this.selection = newSelection; + else + this.selection = NULL_SELECTION; + + NBTTagCompound data = new NBTTagCompound(); + data.setInteger("index", this.index); + data.setString("selection", this.selection); + TileEntity te = (TileEntity) tile; + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, te.xCoord, te.yCoord, te.zCoord)); + click(); + return; + } + } + + if(guiLeft + 151 <= x && guiLeft + 151 + 18 > x && guiTop + 71 < y && guiTop + 71 + 18 >= y) { + if(!NULL_SELECTION.equals(this.selection)) { + this.selection = this.NULL_SELECTION; + NBTTagCompound data = new NBTTagCompound(); + data.setInteger("index", this.index); + data.setString("selection", this.selection); + TileEntity te = (TileEntity) tile; + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, te.xCoord, te.yCoord, te.zCoord)); + click(); + return; + } + } + + if(guiLeft + 152 <= x && guiLeft + 152 + 16 > x && guiTop + 90 < y && guiTop + 90 + 16 >= y) { + FMLCommonHandler.instance().showGuiScreen(previousScreen); } } @Override protected void keyTyped(char typedChar, int keyCode) { + if(keyCode == Keyboard.KEY_RETURN) { + this.search.setFocused(!this.search.isFocused()); + return; + } + if(this.search.textboxKeyTyped(typedChar, keyCode)) { search(this.search.getText()); return; @@ -168,10 +321,8 @@ public class GUIScreenRecipeSelector extends GuiScreen { } } - @Override - public void onGuiClosed() { - Keyboard.enableRepeatEvents(false); - } - + @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @Override public boolean doesGuiPauseGame() { return false; } + + public void click() { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); } } diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index ea8e989b5..33a0a828d 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -15,6 +15,7 @@ import net.minecraft.nbt.NBTTagCompound; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; +import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.RefStrings; import com.hbm.tileentity.IUpgradeInfoProvider; @@ -161,7 +162,7 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa return this.fontRendererObj; } - + /** Draws item with label, excludes all the GL state setup */ protected void drawItemStack(ItemStack stack, int x, int y, String label) { GL11.glTranslatef(0.0F, 0.0F, 32.0F); this.zLevel = 200.0F; @@ -174,6 +175,27 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa this.zLevel = 0.0F; itemRender.zLevel = 0.0F; } + + public static final ItemStack TEMPLATE_FOLDER = new ItemStack(ModItems.template_folder); + + /** Standardsized item rendering from GUIScreenRecipeSelector */ + public void renderItem(ItemStack stack, int x, int y) { + renderItem(stack, x, y, 100F); + } + + public void renderItem(ItemStack stack, int x, int y, float layer) { + FontRenderer font = stack.getItem().getFontRenderer(stack); + if(font == null) font = fontRendererObj; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + itemRender.zLevel = layer; + itemRender.renderItemAndEffectIntoGUI(font, this.mc.getTextureManager(), stack, guiLeft + x, guiTop + y); + itemRender.zLevel = 0.0F; + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_LIGHTING); + } protected void drawStackText(List lines, int x, int y, FontRenderer font) { diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 9199580d1..823f97e81 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -1,5 +1,7 @@ package com.hbm.inventory.recipes.loader; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; import com.hbm.inventory.FluidStack; @@ -13,10 +15,11 @@ import com.hbm.util.i18n.I18nUtil; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; public class GenericRecipe { - public String name; + protected final String name; public AStack[] inputItem; public FluidStack[] inputFluid; public IOutput[] outputItem; @@ -62,12 +65,31 @@ public class GenericRecipe { return icon; } - public String getName() { + public String getInternalName() { + return this.name; + } + + public String getLocalizedName() { if(customLocalization) return I18nUtil.resolveKey(name); return this.getIcon().getDisplayName(); } + public List print() { + List list = new ArrayList(); + list.add(EnumChatFormatting.YELLOW + this.getLocalizedName()); + list.add(EnumChatFormatting.BOLD + "Input:"); + if(inputItem != null) for(AStack stack : inputItem) { + ItemStack display = stack.extractForCyclingDisplay(20); + list.add(" " + EnumChatFormatting.GRAY + display.stackSize + "x " + display.getDisplayName()); + } + if(inputFluid != null) for(FluidStack fluid : inputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : "at " + EnumChatFormatting.RED + fluid.pressure + " PU")); + list.add(EnumChatFormatting.BOLD + "Output:"); + if(outputItem != null) for(IOutput output : outputItem) for(String line : output.getLabel()) list.add(" " + line); + if(outputFluid != null) for(FluidStack fluid : outputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : "at " + EnumChatFormatting.RED + fluid.pressure + " PU")); + return list; + } + public boolean matchesSearch(String substring) { - return getName().toLowerCase(Locale.US).contains(substring.toLowerCase(Locale.US)); + return getLocalizedName().toLowerCase(Locale.US).contains(substring.toLowerCase(Locale.US)); } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 5c33d09d4..53de13faa 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -14,6 +14,7 @@ import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.AStack; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.WeightedRandom; /** @@ -157,6 +158,7 @@ public abstract class GenericRecipes extends Serializab public ItemStack collapse(); public void serialize(JsonWriter writer) throws IOException; public void deserialize(JsonArray array); + public String[] getLabel(); } /** A chance output, produces either an ItemStack or null */ @@ -216,6 +218,11 @@ public abstract class GenericRecipes extends Serializab if(array.size() > 2) this.itemWeight = array.get(2).getAsInt(); } } + + @Override + public String[] getLabel() { + return new String[] {EnumChatFormatting.GRAY + "" + this.stack.stackSize + "x " + this.stack.getDisplayName() + (this.chance >= 1 ? "" : " (" + (int)(this.chance * 1000) / 10F + "%)")}; + } } /** Multiple choice chance output, produces a ChanceOutput chosen randomly by weight */ @@ -242,5 +249,18 @@ public abstract class GenericRecipes extends Serializab pool.add(output); } } + + @Override + public String[] getLabel() { + String[] label = new String[pool.size() + 1]; + label[0] = "One of:"; + int totalWeight = WeightedRandom.getTotalWeight(pool); + for(int i = 1; i < label.length; i++) { + ChanceOutput output = pool.get(i - 1); + float chance = (float) output.itemWeight / (float) totalWeight * output.chance; + label[i] = " " + EnumChatFormatting.GRAY + output.stack.stackSize + "x " + output.stack.getDisplayName() + " (" + (int)(chance * 1000F) / 10F + "%)"; + } + return label; + } } } diff --git a/src/main/java/com/hbm/module/ModuleMachineChemplant.java b/src/main/java/com/hbm/module/ModuleMachineChemplant.java index 9775ab26a..2d5d0ffbc 100644 --- a/src/main/java/com/hbm/module/ModuleMachineChemplant.java +++ b/src/main/java/com/hbm/module/ModuleMachineChemplant.java @@ -5,6 +5,8 @@ import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import api.hbm.energymk2.IEnergyHandlerMK2; +import cpw.mods.fml.common.network.ByteBufUtils; +import io.netty.buffer.ByteBuf; import net.minecraft.item.ItemStack; /** @@ -23,7 +25,7 @@ public class ModuleMachineChemplant { public FluidTank[] inputTanks = new FluidTank[3]; public FluidTank[] outputTanks = new FluidTank[3]; - public String recipe; + public String recipe = "null"; public float progress; public ModuleMachineChemplant(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { @@ -45,11 +47,33 @@ public class ModuleMachineChemplant { public void resetProgress() { this.progress = 0F; } public void update() { + //TBI + } + + public boolean isItemValid(int slot, ItemStack stack) { + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); + if(recipe == null) return false; + if(recipe.inputItem == null) return false; + for(int i = 0; i < Math.min(inputSlots.length, recipe.inputItem.length); i++) { + if(recipe.inputItem[i].matchesRecipe(stack, true)) return true; + } + + return false; } public ModuleMachineChemplant iInput(int a, int b, int c) { inputSlots[0] = a; inputSlots[1] = b; inputSlots[2] = c; return this; } public ModuleMachineChemplant iOutput(int a, int b, int c) { outputSlots[0] = a; outputSlots[1] = b; outputSlots[2] = c; return this; } public ModuleMachineChemplant fInput(FluidTank a, FluidTank b, FluidTank c) { inputTanks[0] = a; inputTanks[1] = b; inputTanks[2] = c; return this; } public ModuleMachineChemplant fOutput(FluidTank a, FluidTank b, FluidTank c) { outputTanks[0] = a; outputTanks[1] = b; outputTanks[2] = c; return this; } + + public void serialize(ByteBuf buf) { + buf.writeFloat(progress); + ByteBufUtils.writeUTF8String(buf, recipe); + } + + public void deserialize(ByteBuf buf) { + this.progress = buf.readFloat(); + this.recipe = ByteBufUtils.readUTF8String(buf); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index d0579ad9a..6686267ad 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -10,6 +10,7 @@ import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalPlant; +import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.module.ModuleMachineChemplant; @@ -26,6 +27,7 @@ import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; @@ -38,8 +40,6 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem public long power; public long maxPower = 1_000_000; - public int progress; - public int maxProgress; public ModuleMachineChemplant chemplantModule; public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); @@ -85,8 +85,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem for(FluidTank tank : outputTanks) tank.serialize(buf); buf.writeLong(power); buf.writeLong(maxPower); - buf.writeInt(progress); - buf.writeInt(maxProgress); + this.chemplantModule.serialize(buf); } @Override @@ -96,8 +95,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem for(FluidTank tank : outputTanks) tank.deserialize(buf); this.power = buf.readLong(); this.maxPower = buf.readLong(); - this.progress = buf.readInt(); - this.maxProgress = buf.readInt(); + this.chemplantModule.deserialize(buf); } @Override @@ -122,6 +120,16 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem } } + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + if(slot == 0) return true; // battery + if(slot >= 2 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgades + if(slot >= 10 && slot <= 12) return true; // input fluid + if(slot >= 16 && slot <= 18) return true; // output fluid + if(this.chemplantModule.isItemValid(slot, stack)) return true; // recipe input crap + return false; + } + @Override public long getPower() { return power; } @Override public void setPower(long power) { this.power = power; } @Override public long getMaxPower() { return maxPower; } @@ -137,7 +145,12 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem @Override public void receiveControl(NBTTagCompound data) { - + if(data.hasKey("index") && data.hasKey("selection")) { + int index = data.getInteger("index"); + String selection = data.getString("selection"); + if(index == 0) this.chemplantModule.recipe = selection; + this.markChanged(); + } } AxisAlignedBB bb = null; diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png index ef8c8fc45a752b63dd48f4d63e53efc915476d80..d58713d9c3f848312cd58d877fd04d93f618154d 100644 GIT binary patch literal 3535 zcma)8c|6ox8~^=gX@)n$6mh4qMcFE3Ez1nqNwTM6sH{n(!N|}iA$8jX6!xQqE z*NFnc#)&W!jx4)I+E}8ozcPG$jM}!s1vlCW&jybdSFBXdRreonDf+UZkXLkN{fi@u(HTSf@DTS_fRyEJ#pzqkkUcekIBivBedf; zBnjyOErLB=-BZK6x+|#jC~oNTe0Ibp_EKYsB;-;c)4I=Yk>3VhEf6SQP;JpMzX z8#S4BSb0T%5BRc*I`1ckTFSgT7%@Amb?g-Ca@w);eu9$v&sx2o`OA{}C(9>CldX1? zmX&!qIXQ(%=)mT=)n5fyxGjGPa11P4`+FNS`xz~X10QPz^w9mKpZxWjT z7p-KgTd7O0#lX646m$@I(w|Lxd>Kc?Zvyt6qfmU`4FxZs^EOafP>ecjBxqogb!c)A ziIo-_R~xAYK~@JduUhjZ!Rn+b-VXOpYT_}8=``_)bHiXf&?lsaP^b{3$3kX7H$_d6 z(z#%rG)Oe;DgdoO-tKdsIWW|8hV^`BQ~Bn{GSK}g<%0AvF3=2FDjopbUcQW3Msm3! z-=?PS+Usm-y|Q~&S^}sgGqVTNmjZ`IGM2|g z$zeY%^3(22J7-f%uo)~aFzh(zRVso?hShc8D*G^YbF;pq4>H@8OXk(DV~MGMW@-@_ z=f%o8Z@TE@<<45}(swunk9p?|Gdt&b$WKnBgql~MqxcXAyk%Ofol_WYvc4!M47t&m zl|weM)nVlE4&H~J@|#L;)qRc3)x#TY#`li;JMxl3kPn6H0I6vIkhaR5maC? zh5}N=eA%16;ldoBBh~^^{2Ecjc*HXmWK4hQ29=1VhmPTlj7KyCdAoka#cib2N3BOX z4ESTc5)OE6Dk0mhBBhuJNLf!I4LoDdT9l9tTYBSUqU$ppMx64=WaDLmFQA$WA}kyb z_9N_~1OycGz$5TnnfjXI_Tsc+&;}9zM+6`eIKVa%kiyLUhcFj_JRXd3sc!4D6M=+k z16&^RG{5{mypFC)A+sul!$%a4vFR$~{GU?p;YlectnthFKE+=|>eJ`#>|2edeLY$V zqY-uQXDFadfE*|2r@?>Q{u8woQd{N3HS1l~i9u*f@`Rs%D9mif^qP-inSG0@1I?>Hx3)<|bqQ-AKlD^@K4$LdhnjdmhB@Os z8!%mWJ3(D{en5MRJ)&^W%c7v~4r@;aMY-sN$Y=D$uLH0eVu@HD3(3Lb#&k1_CEIwx zXGl@dE3wmKT_X6dLiC*^o>=f*hY~@%=Di}EpE4QDIb-EjdD(z+$z;RjckezFl4HAu zCD$$|(leJZ>x|7s@|X+0sEs8G*o`>RCL5nNN7uUhRSSNCHVu52e0B8S4YlcWzcF$( zpYn=lhIgDz-P2rw!>Mi!%_Z+U`832fW>Trz_|8yW>t`DB+dy?A|7;mYt3US10>K`8 zl6OXk>(~R2xTg#0L`o2Kaaan+= zx(VnN;{(pbBcdGrUwkYZ+90hSHwUAiqm99dTr*%0fqJ=N6M%zgFIa45iYhB-MjGUY zWMrR`dvEH7%?MheX4LD}AtThC#Ygm?=8uq57Q7$tJ54!Hzh3Yw1U++TMC(`p>?WR1 z3NQz>1o)(cpy3*4>je+YXK1gn=q~(N5Dj2e)pJ)w1CZS_x+z~Z!OQ72qNW>Dmquvf zz4bR1JE7GtnqXUfjpXSrPGm!W;LvnDqSF9|X4bg%JQRd?%($4qMtc>B#`wigJ8n0= zJ*@wEKf(BXQW?5;B1Lj)9H(c+6gInbdq%&9Kc{ z@EcB*nv7hJjohnj-U z4`!tAsU5?pOF;tx2ZthnikYiPRy)26R&-x`)6&A$FSCpoetTlilgdgx$lMod3#{G_ zJWK)JFOQwF0{SPl8zsNY%(N{mQG<090wcm0JDYIa@Lk=aHb=4EUDMv(?OO2qbk&@9 zc}HO?;T2iO-!F0Jwu*0mvhC)*t<$HOH6&8x@|PfYpRTjsl1i|lTNc3m{nLHcPsf0- zbT%`VnDSs#)Zq`TRJALm9)`+qrkkofWmySnRhw0s_V82sLY1R5pJR!w!TXNkM1-r; zw}Wql7o4$XHx|)SO?zn8Ii97I3FWG2wJQ?c|DqqHB7j{`uOiyx>JBw4ijjIsF!S4z zAmE*_h$aPoAkZ*pHXjTzyoZldUx?1xAY`<5*JL7%K)@FetRqCOGge6 z4ch>gSP^XSHV!;-*mG{YXPlyDM6gg(S|k&LDEviayelav5BrXl}^|4(({*?b10lx^f%DnIK>$fMFZ%Se4T9GKD0WH{y7BJ2?+}F@Vq-_UAM)u0Csi)UiEmV_FBQGQCqK89mV$e;va$x6d915Kv40JM+3Q{GbeH+z}PjQBpKXcrT=>sv}x4^Q?`05Xfn!RJtlx zmzPVGN2xKe#BnH)X{XUb7hxn^Jur}V3MrIuiEv>B&f@zhvCKAH%{g;pYoj7V(#3xR DKjunf literal 4029 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 Onx1aHt`(#+$$tPLPZMMS literal 1802 zcmcgt`#aQW6n|$-`O?}Z3eC0|WGE`-+OSOXj5Ju;Tyl#_<<2}9B9|FvDn+YD=DYkp}=M zkPng$1Au^C1c27U;2BnY8U|E2k?aJ)77Lxc0KnR2GHJilncUeoyugkAsSUKE zHF&{;eRK}v1&t|zi1yk8D#%e3VC^}Sw2oc|JCz50*3oT|KoJM9$G?M56q5K0cc4Pm z8l>r4gWA`UktWADEeN>JO5T)HRs}8vt5K_zkE0VKl*}>nloCW`6vcB{W?9^6qv+0B zc-imjvGb_!)^Wr}6CuPN8q)iWSo{#eOiy>DD&8?Tv$88l99Ba~6+hfRtNw!NyZn?Q zPnd0=DKHVd$(wGtG&ne2+HAr>5?W9owcpH?bCQ+(7Ixc=8_|B30rvibb1KMAG$0w3 z^Pe)BG%m#`gWYnVFsrC}`e#IE!Zm=sXoacgpr4DRy{7j~W?SY1c6zl!#gcZoHkNhk zlW#Z*$c3W_8wbJ%yLmc7(7plGy7xzeRY{c7C*`}B0NZ8H!gFZ{MgZ=s<$dX8ygH+@ zst&)X*>I|3#d)}Kuc)*HK?w_U$7}7zbrh$2v0Rnt)mtrM@KxM6tyiW>^q!J(`;KHn zg_rpfe>hq_Eja${s%ZDW1d;w$2B=4Y0olihqX~SB|xfbEA+aurpc{LOvL5`Y<4uJ ze#SBBK;q8UQ-s3TjZtUcYBg79NJ?Y9cc1|O9h1NxH(Af#f*@#Ct2> z`xxp}HWU#dvS6TLC5Avl@#nX0@@Ei7If1-nCcpjLzXyt zuyznnu2S@k-P%a(sm!k@MAe}Zy{WOW9=m3Yo6L`7{!Zmvfra(5*M3qdu=rMnPquL0 zv!NLOErNIO_;f}NGjJ?b=7zh03~1khSMD&aTy{fkyV#I4%C+A<5vTU@s{*-3@v%sn zPMyK|x#-lqxZr`~35H0TAC5^I4~4Z_%7<0hsR&3JunKvbzi!xtkX{Y!CkPZ`ew)ar zQfV<#?Mla)tqCri=ndeZ{m#KR{maB0)T4>x*uuTprrH!V(G z8PqbSYB)ISP1Rbn(ql_cXgE*{S;z;Xl|@%ItNq><`Ang3ITEFpUmOVF=&{IDd4A+! z5oNUXb5)=9pTl}R)bmz^+po<`w+4QB(C4SUh|vF|j&B`0R>kR7xQlA)e^N0rGunr@ z=>}&-f-qQ+x|_hloPXuw2Tluuy;L9ig4^hrDA0-6gdGqivIpjf*p+OopGgKH%ilfS z4C8l?SOoe#tW0`cv?T@g=DZ;VW*;y#C9=gfN7tZ{5Ir(n4cwBWFDL@1w;CutsLr;w zOiGryUd`h1vMGkWG@xw*=2vn?MCM}_0rG}$6m+K?vln68h5_5`fb^Xx58H#j8gPe! zj=3i=S8a@yyt3T24QF;Z`mdUr?pNoUG*VC%t&^6+l~>AXkNqX`^9zzC+wR@m&!4A9 z`i8cCVHSnys>iOZ@rf4C3lDVX5UjcK(&bCjNBk%7aP#H~{0-n==KnI<2Z?Njj7@7+ RONp Date: Thu, 5 Jun 2025 15:38:29 +0200 Subject: [PATCH 144/491] deltarune tomorrow --- changelog | 21 ++ .../blocks/machine/MachineChemicalPlant.java | 13 + .../java/com/hbm/inventory/fluid/Fluids.java | 4 +- .../hbm/inventory/fluid/tank/FluidTank.java | 51 +-- .../gui/GUIMachineChemicalPlant.java | 4 +- .../gui/GUIScreenRecipeSelector.java | 3 +- .../hbm/inventory/gui/GuiInfoContainer.java | 3 +- .../recipes/ChemicalPlantRecipes.java | 336 ++++++++++++++++-- .../inventory/recipes/ChemplantRecipes.java | 3 +- .../recipes/LiquefactionRecipes.java | 65 ++-- .../recipes/loader/GenericRecipe.java | 24 +- .../recipes/loader/GenericRecipes.java | 12 +- .../hbm/module/ModuleMachineChemplant.java | 132 ++++++- .../TileEntityMachineChemicalPlant.java | 48 ++- src/main/resources/assets/hbm/lang/de_DE.lang | 2 +- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../hbm/textures/items/plate_kevlar.png | Bin 404 -> 374 bytes 17 files changed, 599 insertions(+), 124 deletions(-) diff --git a/changelog b/changelog index 2eb34f29f..8a24a37de 100644 --- a/changelog +++ b/changelog @@ -5,6 +5,9 @@ * Starmetal .50 BMG now returns * Overall better armor piercing stats than DU * Not compatible with the M2, only usable in amat rifles +* Reworked chemical plant + * No longer needs template items for everything, comes with a convenient recipe selector GUI + * Three item and three fluids for in and outputs ## Changed * The RBMK console's grid can now be rotated using a screwdriver @@ -20,6 +23,24 @@ * Tier 4 heart piece is now called "heart of darkness" * Thermal sights now render dead mobs in black * Guns now have unique scope overlays instead of reusing the .44 scope for everything +* The new chemplant has slightly altered recipes + * Very basic mixing recipes (e.g. coolant) have been removed, it's now required to use the mixer + * Water to hydrogen peroxide is now 1,000 : 1,000 (instead of 1,000 : 800) + * Sulfuric acid's peroxide requirement has been adjusted accordingly + * Nitric acid has an alternate recipe using air and water, however it takes 4x as long and has a base consumption of 2kHE/t + * Desh now only takes 10 seconds to produce instead of 15 + * Laminate now only takes 50mB of either fluid per recipe and processes much quicker + * Ducrete now uses U238 in the form of ferrouranium, and no longer requires gravel at all + * All recipes for nuclear fuel production now have a higher base consumption + * Cordite now uses sawdust instead of wood planks and sugar + * Kevlar is now made from aromatics, nitric acid and chlorine (or phosgene in 528 mode) + * Electrolysis using the chemplant has been removed. Hydrogen can be made using water and coal (or coke), and oxygen can be distilled from intake air + * Solid nuclear waste can also be vitrified now + * Thorium salt reprocessing now only has a 50% chance to produce a U233 nugget and a 25% chance to produce nuclear waste, making it less absurdly powerful and easier to deal with the waste + * Glyphid meat processing is now less autistic + * Making rusty steel now only takes 2 seconds per recipe + * Perfluoromethyl can now also be made in the chemical plant (technically, the process isn't just simple mixing after all) +* Removed niter to nitric acid liquefaction recipe ## Fixed * Conveyor ejectors should now correctly place items onto the back of splitters instead of on the output belts diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java b/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java index f26e1e3d6..b68a698da 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java @@ -7,6 +7,7 @@ import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class MachineChemicalPlant extends BlockDummyable { @@ -27,4 +28,16 @@ public class MachineChemicalPlant extends BlockDummyable { @Override public int[] getDimensions() { return new int[] {2, 0, 1, 1, 1, 1}; } @Override public int getOffset() { return 1; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x -= dir.offsetX; + z -= dir.offsetZ; + + for(int i = -1; i <= 1; i++) for(int j = -1; j <= 1; j++) { + if(i != 0 || j != 0) this.makeExtra(world, x + i, y, z + j); + } + } } diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 64a23a86b..37c68f121 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -305,7 +305,7 @@ public class Fluids { PLASMA_BF = new FluidType("PLASMA_BF", 0xA7F1A3, 4, 5, 4, EnumSymbol.ANTIMATTER).setTemp(8500).addTraits(NOCON, NOID, PLASMA); CARBONDIOXIDE = new FluidType("CARBONDIOXIDE", 0x404040, 3, 0, 0, EnumSymbol.ASPHYXIANT).addTraits(GASEOUS, new FT_Polluting().release(PollutionType.POISON, POISON_MINOR)); PLASMA_DH3 = new FluidType("PLASMA_DH3", 0xFF83AA, 0, 4, 0, EnumSymbol.RADIATION).setTemp(3480).addTraits(NOCON, NOID, PLASMA); - HELIUM3 = new FluidType("HELIUM3", 0xFCF0C4, 0, 0, 0, EnumSymbol.ASPHYXIANT).addTraits(GASEOUS); + HELIUM3 = new FluidType("HELIUM3", 0xFCF0C4, 0, 0, 0, EnumSymbol.ASPHYXIANT).addTraits(GASEOUS).addContainers(new CD_Gastank(0xFD631F, 0xffffff)); DEATH = new FluidType("DEATH", 0x717A88, 2, 0, 1, EnumSymbol.ACID).setTemp(300).addTraits(new FT_Corrosive(80), new FT_Poison(true, 4), LEADCON, LIQUID, VISCOUS); ETHANOL = new FluidType("ETHANOL", 0xe0ffff, 2, 3, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xEAFFF3)).addTraits(new FT_Flammable(75_000), new FT_Combustible(FuelGrade.HIGH, 200_000), LIQUID, P_FUEL); HEAVYWATER = new FluidType("HEAVYWATER", 0x00a0b0, 1, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); @@ -1008,6 +1008,6 @@ public class Fluids { public static class CD_Gastank { public int bottleColor, labelColor; - public CD_Gastank(int color1, int color2) { this.bottleColor = color1; this.labelColor = color2; } + public CD_Gastank(int bottle, int label) { this.bottleColor = bottle; this.labelColor = label; } } } diff --git a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java index bfad1ec11..4883790dc 100644 --- a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java +++ b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java @@ -7,6 +7,7 @@ import java.util.Set; import org.lwjgl.opengl.GL11; +import com.hbm.inventory.FluidStack; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.gui.GuiInfoContainer; @@ -25,7 +26,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; -public class FluidTank { +public class FluidTank implements Cloneable { public static final FluidTank[] EMPTY_ARRAY = new FluidTank[0]; @@ -54,38 +55,27 @@ public class FluidTank { return this; } - public void setFill(int i) { - fluid = i; - } + public void setFill(int i) { fluid = i; } public void setTankType(FluidType type) { - - if(type == null) { - type = Fluids.NONE; - } - - if(this.type == type) - return; + if(type == null) type = Fluids.NONE; + if(this.type == type) return; this.type = type; this.setFill(0); } - public FluidType getTankType() { - return type; + /** Changes type and pressure based on a fluid stack, useful for changing tank types based on recipes */ + public FluidTank conform(FluidStack stack) { + this.setTankType(stack.type); + this.withPressure(stack.pressure); + return this; } - public int getFill() { - return fluid; - } - - public int getMaxFill() { - return maxFluid; - } - - public int getPressure() { - return pressure; - } + public FluidType getTankType() { return type; } + public int getFill() { return fluid; } + public int getMaxFill() { return maxFluid; } + public int getPressure() { return pressure; } public int changeTankSize(int size) { maxFluid = size; @@ -95,20 +85,15 @@ public class FluidTank { fluid = maxFluid; return dif; } - return 0; } //Fills tank from canisters public boolean loadTank(int in, int out, ItemStack[] slots) { - - if(slots[in] == null) - return false; + if(slots[in] == null) return false; boolean isInfiniteBarrel = slots[in].getItem() == ModItems.fluid_barrel_infinite; - - if(!isInfiniteBarrel && pressure != 0) - return false; + if(!isInfiniteBarrel && pressure != 0) return false; int prev = this.getFill(); @@ -123,9 +108,7 @@ public class FluidTank { //Fills canisters from tank public boolean unloadTank(int in, int out, ItemStack[] slots) { - - if(slots[in] == null) - return false; + if(slots[in] == null) return false; int prev = this.getFill(); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java index c960eea0c..8e3285f5b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -103,8 +103,8 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { } for(int i = 0; i < 3; i++) { - chemplant.inputTanks[i].renderTank(guiLeft + 8, guiTop + 52, this.zLevel, 16, 34); - chemplant.outputTanks[i].renderTank(guiLeft + 80, guiTop + 52, this.zLevel, 16, 34); + chemplant.inputTanks[i].renderTank(guiLeft + 8 + i * 18, guiTop + 52, this.zLevel, 16, 34); + chemplant.outputTanks[i].renderTank(guiLeft + 80 + i * 18, guiTop + 52, this.zLevel, 16, 34); } } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java index 418fc2dbd..09d20ed64 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java @@ -21,6 +21,7 @@ import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -223,7 +224,7 @@ public class GUIScreenRecipeSelector extends GuiScreen { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); RenderHelper.enableGUIStandardItemLighting(); - GL11.glDisable(GL11.GL_LIGHTING); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) 240 / 1.0F, (float) 240 / 1.0F); GL11.glEnable(GL12.GL_RESCALE_NORMAL); itemRender.zLevel = 100.0F; diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index 33a0a828d..d3f151798 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -26,6 +26,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.inventory.Container; @@ -188,7 +189,7 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa if(font == null) font = fontRendererObj; GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); RenderHelper.enableGUIStandardItemLighting(); - GL11.glDisable(GL11.GL_LIGHTING); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) 240 / 1.0F, (float) 240 / 1.0F); GL11.glEnable(GL12.GL_RESCALE_NORMAL); itemRender.zLevel = layer; itemRender.renderItemAndEffectIntoGUI(font, this.mc.getTextureManager(), stack, guiLeft + x, guiTop + y); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index 95f029458..b4c334826 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -1,15 +1,20 @@ package com.hbm.inventory.recipes; +import static com.hbm.inventory.OreDictManager.*; + +import com.hbm.blocks.ModBlocks; +import com.hbm.config.GeneralConfig; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.fluid.Fluids; -import com.hbm.inventory.material.MaterialShapes; -import com.hbm.inventory.material.Mats; -import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.items.ItemEnums.EnumFuelAdditive; import com.hbm.items.ModItems; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; public class ChemicalPlantRecipes extends GenericRecipes { @@ -27,28 +32,311 @@ public class ChemicalPlantRecipes extends GenericRecipes { @Override public void registerDefaults() { - this.register(new GenericRecipe("chem.biogas").setup(60, 100).setIcon(ModItems.gas_full, Fluids.BIOGAS.getID()) - .setInputItems(new ComparableStack(ModItems.biomass, 16)) - .setInputFluids(new FluidStack(Fluids.AIR, 4000)) - .setOutputFluids(new FluidStack(Fluids.BIOGAS, 2000))); + /// REGULAR FLUIDS /// + this.register(new GenericRecipe("chem.hydrogen").setupNamed(20, 400).setIcon(ModItems.gas_full, Fluids.HYDROGEN.getID()) + .inputItems(new OreDictStack(COAL.gem(), 1)) + .inputFluids(new FluidStack(Fluids.WATER, 8_000)) + .outputFluids(new FluidStack(Fluids.HYDROGEN, 500))); - this.register(new GenericRecipe("chem.test").setup(60, 100) - .setInputItems(new ComparableStack(ModItems.biomass, 16)) - .setInputFluids(new FluidStack(Fluids.AIR, 4000)) - .setOutputItems( - new ChanceOutput(new ItemStack(ModItems.glyphid_meat, 16)), - new ChanceOutput(new ItemStack(ModItems.ingot_asbestos, 1), 0.5F, 0), - new ChanceOutputMulti() {{ - pool.add(new ChanceOutput(new ItemStack(ModItems.billet_co60), 1)); - pool.add(new ChanceOutput(new ItemStack(ModItems.billet_cobalt), 5)); - }}) - .setOutputFluids(new FluidStack(Fluids.BIOGAS, 2000))); + this.register(new GenericRecipe("chem.hydrogencoke").setupNamed(20, 400).setIcon(ModItems.gas_full, Fluids.HYDROGEN.getID()) + .inputItems(new OreDictStack(ANY_COKE.gem(), 1)) + .inputFluids(new FluidStack(Fluids.WATER, 8_000)) + .outputFluids(new FluidStack(Fluids.HYDROGEN, 500))); + + this.register(new GenericRecipe("chem.oxygen").setupNamed(20, 400).setIcon(ModItems.gas_full, Fluids.OXYGEN.getID()) + .inputFluids(new FluidStack(Fluids.AIR, 8_000)) + .outputFluids(new FluidStack(Fluids.OXYGEN, 500))); + + this.register(new GenericRecipe("chem.xenon").setupNamed(300, 1_000).setIcon(ModItems.gas_full, Fluids.XENON.getID()) + .inputFluids(new FluidStack(Fluids.AIR, 16_000)) + .outputFluids(new FluidStack(Fluids.XENON, 50))); + + this.register(new GenericRecipe("chem.xenonoxy").setupNamed(20, 1_000).setIcon(ModItems.gas_full, Fluids.XENON.getID()) + .inputFluids(new FluidStack(Fluids.AIR, 8_000), new FluidStack(Fluids.OXYGEN, 250)) + .outputFluids(new FluidStack(Fluids.XENON, 50))); + + this.register(new GenericRecipe("chem.helium3").setupNamed(200, 2_000).setIcon(ModItems.gas_full, Fluids.HELIUM3.getID()) + .inputItems(new ComparableStack(ModBlocks.moon_turf, 8)) + .outputFluids(new FluidStack(Fluids.HELIUM3, 1_000))); + + this.register(new GenericRecipe("chem.co2").setup(60, 100) + .inputFluids(new FluidStack(Fluids.GAS, 1_000)) + .outputFluids(new FluidStack(Fluids.CARBONDIOXIDE, 1_000))); + + this.register(new GenericRecipe("chem.perfluoromethyl").setup(20, 100) + .inputItems(new OreDictStack(F.dust())) + .inputFluids(new FluidStack(Fluids.PETROLEUM, 1_000), new FluidStack(Fluids.UNSATURATEDS, 500)) + .outputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 1_000))); + + this.register(new GenericRecipe("chem.cccentrifuge").setup(200, 100) + .inputFluids(new FluidStack(Fluids.CHLOROCALCITE_CLEANED, 500), new FluidStack(Fluids.SULFURIC_ACID, 8_000)) + .outputFluids(new FluidStack(Fluids.POTASSIUM_CHLORIDE, 250), new FluidStack(Fluids.CALCIUM_CHLORIDE, 250))); + + /// OILS /// + this.register(new GenericRecipe("chem.ethanol").setupNamed(50, 100).setIcon(ModItems.canister_full, Fluids.ETHANOL.getID()) + .inputItems(new ComparableStack(Items.sugar, 10)) + .outputFluids(new FluidStack(Fluids.ETHANOL, 1000))); + + this.register(new GenericRecipe("chem.biogas").setupNamed(60, 100).setIcon(ModItems.gas_full, Fluids.BIOGAS.getID()) + .inputItems(new ComparableStack(ModItems.biomass, 16)) + .inputFluids(new FluidStack(Fluids.AIR, 4_000)) + .outputFluids(new FluidStack(Fluids.BIOGAS, 2_000))); + + this.register(new GenericRecipe("chem.biofuel").setupNamed(60, 100).setIcon(ModItems.canister_full, Fluids.BIOFUEL.getID()) + .inputFluids(new FluidStack(Fluids.BIOGAS, 1_500), new FluidStack(Fluids.ETHANOL, 250)) + .outputFluids(new FluidStack(Fluids.BIOFUEL, 1_000))); + + this.register(new GenericRecipe("chem.reoil").setupNamed(40, 100).setIcon(ModItems.canister_full, Fluids.RECLAIMED.getID()) + .inputFluids(new FluidStack(Fluids.SMEAR, 1_000)) + .outputFluids(new FluidStack(Fluids.RECLAIMED, 800))); + + this.register(new GenericRecipe("chem.gasoline").setupNamed(40, 100).setIcon(ModItems.canister_full, Fluids.GASOLINE.getID()) + .inputFluids(new FluidStack(Fluids.NAPHTHA, 1000)) + .outputFluids(new FluidStack(Fluids.GASOLINE, 800))); + + this.register(new GenericRecipe("chem.tarsand").setupNamed(200, 100).setIcon(ModBlocks.ore_oil_sand) + .inputItems(new ComparableStack(ModBlocks.ore_oil_sand, 16), new OreDictStack(ANY_TAR.any(), 1)) + .outputItems(new ItemStack(Blocks.sand, 16)) + .outputFluids(new FluidStack(Fluids.BITUMEN, 1_000))); + + this.register(new GenericRecipe("chem.tel").setup(40, 100) + .inputItems(new OreDictStack(ANY_TAR.any()), new OreDictStack(PB.dust())) + .inputFluids(new FluidStack(Fluids.PETROLEUM, 100), new FluidStack(Fluids.STEAM, 1000)) + .outputItems(DictFrame.fromOne(ModItems.fuel_additive, EnumFuelAdditive.ANTIKNOCK))); + + this.register(new GenericRecipe("chem.deicer").setup(40, 100) + .inputFluids(new FluidStack(Fluids.GAS, 100), new FluidStack(Fluids.HYDROGEN, 50)) + .outputItems(DictFrame.fromOne(ModItems.fuel_additive, EnumFuelAdditive.DEICER))); + + /// THE CONC AND ASPHALE /// + this.register(new GenericRecipe("chem.concrete").setup(100, 100) + .inputItems(new ComparableStack(ModItems.powder_cement, 1), new ComparableStack(Blocks.gravel, 8), new OreDictStack(KEY_SAND, 8)) + .inputFluids(new FluidStack(Fluids.WATER, 2_000)) + .outputItems(new ItemStack(ModBlocks.concrete_smooth, 16))); + + this.register(new GenericRecipe("chem.concreteasbestos").setup(100, 100) + .inputItems(new ComparableStack(ModItems.powder_cement, 4), new OreDictStack(ASBESTOS.ingot(), (GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleChemsitry) ? 1 : 4), new OreDictStack(KEY_SAND, 8)) + .inputFluids(new FluidStack(Fluids.WATER, 2_000)) + .outputItems(new ItemStack(ModBlocks.concrete_asbestos, 16))); + + this.register(new GenericRecipe("chem.ducrete").setup(150, 100) + .inputItems(new ComparableStack(ModItems.powder_cement, 4), new OreDictStack(FERRO.ingot()), new OreDictStack(KEY_SAND, 8)) + .inputFluids(new FluidStack(Fluids.WATER, 2_000)) + .outputItems(new ItemStack(ModBlocks.ducrete_smooth, 8))); + + this.register(new GenericRecipe("chem.asphalt").setup(100, 100) + .inputItems(new ComparableStack(Blocks.gravel, 2), new OreDictStack(KEY_SAND, 6)) + .inputFluids(new FluidStack(Fluids.BITUMEN, 1_000)) + .outputItems(new ItemStack(ModBlocks.asphalt, 16))); + + /// SOLIDS /// + this.register(new GenericRecipe("chem.desh").setup(200, 100) + .inputItems(new ComparableStack(ModItems.powder_desh_mix)) + .inputFluids((GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleChemsitry) ? + new FluidStack[] {new FluidStack(Fluids.LIGHTOIL, 200)} : + new FluidStack[] {new FluidStack(Fluids.LIGHTOIL, 200), new FluidStack(Fluids.MERCURY, 200)}) + .outputItems(new ItemStack(ModItems.ingot_desh))); + + this.register(new GenericRecipe("chem.polymer").setup(100, 100) + .inputItems(new OreDictStack(COAL.dust(), 2), new OreDictStack(F.dust())) + .inputFluids(new FluidStack(Fluids.PETROLEUM, 500, GeneralConfig.enable528 ? 1 : 0)) + .outputItems(new ItemStack(ModItems.ingot_polymer))); + + this.register(new GenericRecipe("chem.bakelite").setup(100, 100) + .inputFluids(new FluidStack(Fluids.AROMATICS, 500, GeneralConfig.enable528 ? 1 : 0), new FluidStack(Fluids.PETROLEUM, 500, GeneralConfig.enable528 ? 1 : 0)) + .outputItems(new ItemStack(ModItems.ingot_bakelite))); + + this.register(new GenericRecipe("chem.rubber").setup(100, 200) + .inputItems(new OreDictStack(S.dust())) + .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500, GeneralConfig.enable528 ? 2 : 0)) + .outputItems(new ItemStack(ModItems.ingot_rubber))); + + this.register(new GenericRecipe("chem.hardplastic").setup(100, 1_000) + .inputFluids(new FluidStack(Fluids.XYLENE, 500, GeneralConfig.enable528 ? 2 : 0), new FluidStack(Fluids.PHOSGENE, 500, GeneralConfig.enable528 ? 2 : 0)) + .outputItems(new ItemStack(ModItems.ingot_pc))); + + this.register(new GenericRecipe("chem.pvc").setup(100, 1_000) + .inputItems(new OreDictStack(CD.dust())) + .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 250, GeneralConfig.enable528 ? 2 : 0), new FluidStack(Fluids.CHLORINE, 250, GeneralConfig.enable528 ? 2 : 0)) + .outputItems(new ItemStack(ModItems.ingot_pvc, 2))); + + this.register(new GenericRecipe("chem.kevlar").setup(20, 300) + .inputFluids(new FluidStack(Fluids.AROMATICS, 200), new FluidStack(Fluids.NITRIC_ACID, 100), new FluidStack(GeneralConfig.enable528 ? Fluids.PHOSGENE : Fluids.CHLORINE, 100)) + .outputItems(new ItemStack(ModItems.plate_kevlar, 4))); + + this.register(new GenericRecipe("chem.meth").setup(30, 300) + .inputItems(new ComparableStack(Items.wheat), new ComparableStack(Items.dye, 2, 3)) + .inputFluids(new FluidStack(Fluids.LUBRICANT, 400), new FluidStack(Fluids.PEROXIDE, 500)) + .outputItems(new ItemStack(ModItems.chocolate, 4))); + + this.register(new GenericRecipe("chem.epearl").setup(100, 300) + .inputItems(new OreDictStack(DIAMOND.dust(), 1)) + .inputFluids(new FluidStack(Fluids.XPJUICE, 500)) + .outputFluids(new FluidStack(Fluids.ENDERJUICE, 100))); + + this.register(new GenericRecipe("chem.meatprocessing").setupNamed(200, 200).setIcon(ModItems.glyphid_meat) + .inputItems(new OreDictStack(KEY_GLYPHID_MEAT, 3)) + .inputFluids(new FluidStack(Fluids.WATER, 1_000)) + .outputItems(new ItemStack(ModItems.sulfur, 4), new ItemStack(ModItems.niter, 3)) + .outputFluids(new FluidStack(Fluids.SALIENT, 250))); + + this.register(new GenericRecipe("chem.rustysteel").setup(40, 100) + .inputItems(new ComparableStack(ModBlocks.deco_steel, 8)) + .inputFluids(new FluidStack(Fluids.WATER, 1000)) + .outputItems(new ItemStack(ModBlocks.deco_rusty_steel, 8))); + + /// ACIDS /// + this.register(new GenericRecipe("chem.peroxide").setup(50, 100) + .inputFluids(new FluidStack(Fluids.WATER, 1_000)) + .outputFluids(new FluidStack(Fluids.PEROXIDE, 1_000))); + + this.register(new GenericRecipe("chem.sulfuricacid").setup(50, 100) + .inputItems(new OreDictStack(S.dust())) + .inputFluids(new FluidStack(Fluids.PEROXIDE, 1_000), new FluidStack(Fluids.WATER, 1_000)) + .outputFluids(new FluidStack(Fluids.SULFURIC_ACID, 2_000))); + + this.register(new GenericRecipe("chem.nitricacid").setup(50, 100) + .inputItems(new OreDictStack(KNO.dust())) + .inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 500)) + .outputFluids(new FluidStack(Fluids.NITRIC_ACID, 1_000))); + + this.register(new GenericRecipe("chem.birkeland").setupNamed(200, 5_000) + .inputFluids(new FluidStack(Fluids.AIR, 8_000), new FluidStack(Fluids.WATER, 2_000)) + .outputFluids(new FluidStack(Fluids.NITRIC_ACID, 1_000))); + + this.register(new GenericRecipe("chem.schrabidic").setup(100, 5_000) + .inputItems(new ComparableStack(ModItems.pellet_charged)) + .inputFluids(new FluidStack(Fluids.SAS3, 8000), new FluidStack(Fluids.PEROXIDE, 6000)) + .outputFluids(new FluidStack(Fluids.SCHRABIDIC, 16000))); + + this.register(new GenericRecipe("chem.schrabidate").setup(150, 5_000) + .inputFluids(new FluidStack(Fluids.SCHRABIDIC, 250)) + .outputItems(new ItemStack(ModItems.powder_schrabidate))); + + /// COLTAN /// + this.register(new GenericRecipe("chem.coltancleaning").setup(60, 100) + .inputItems(new OreDictStack(COLTAN.dust(), 2), new OreDictStack(COAL.dust())) + .inputFluids(new FluidStack(Fluids.PEROXIDE, 250), new FluidStack(Fluids.HYDROGEN, 500)) + .outputItems(new ItemStack(ModItems.powder_coltan), new ItemStack(ModItems.powder_niobium), new ItemStack(ModItems.dust)) + .outputFluids(new FluidStack(Fluids.WATER, 500))); + + this.register(new GenericRecipe("chem.coltanpain").setup(120, 100) + .inputItems(new ComparableStack(ModItems.powder_coltan), new OreDictStack(F.dust())) + .inputFluids(new FluidStack(Fluids.GAS, 1000), new FluidStack(Fluids.OXYGEN, 500)) + .outputFluids(new FluidStack(Fluids.PAIN, 1000))); + + this.register(new GenericRecipe("chem.coltancrystal").setup(80, 100) + .inputFluids(new FluidStack(Fluids.PAIN, 1000), new FluidStack(Fluids.PEROXIDE, 500)) + .outputItems(new ItemStack(ModItems.gem_tantalium), new ItemStack(ModItems.dust, 3)) + .outputFluids(new FluidStack(Fluids.WATER, 250))); + + /// EXPLOSIVES /// + this.register(new GenericRecipe("chem.cordite").setup(40, 100) + .inputItems(new OreDictStack(KNO.dust(), 2), new ComparableStack(ModItems.powder_sawdust, 2)) + .inputFluids((GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleChemsitry) ? new FluidStack(Fluids.HEATINGOIL, 200) : new FluidStack(Fluids.GAS, 200)) + .outputItems(new ItemStack(ModItems.cordite, 4))); + + this.register(new GenericRecipe("chem.rocketfuel").setup(200, 100) + .inputItems(new ComparableStack(ModItems.solid_fuel, 2)) + .inputFluids(new FluidStack(Fluids.PETROLEUM, 200, GeneralConfig.enable528 ? 1 : 0), new FluidStack(Fluids.NITRIC_ACID, 100)) + .outputItems(new ItemStack(ModItems.rocket_fuel, 4))); + + this.register(new GenericRecipe("chem.dynamite").setup(50, 100) + .inputItems(new ComparableStack(Items.sugar), new OreDictStack(KNO.dust()), new OreDictStack(KEY_SAND)) + .outputItems(new ItemStack(ModItems.ball_dynamite, 2))); + + this.register(new GenericRecipe("chem.tnt").setup(100, 1_000) + .inputItems(new OreDictStack(KNO.dust())) + .inputFluids(new FluidStack(Fluids.AROMATICS, 500, GeneralConfig.enable528 ? 1 : 0)) + .outputItems(new ItemStack(ModItems.ball_tnt, 4))); + + this.register(new GenericRecipe("chem.tatb").setup(50, 5_000) + .inputItems(new ComparableStack(ModItems.ball_tnt)) + .inputFluids(new FluidStack(Fluids.SOURGAS, 200, 1), new FluidStack(Fluids.NITRIC_ACID, 10)) + .outputItems(new ItemStack(ModItems.ball_tatb))); + + this.register(new GenericRecipe("chem.c4").setup(100, 1_000) + .inputItems(new OreDictStack(KNO.dust())) + .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500, GeneralConfig.enable528 ? 1 : 0)) + .outputItems(new ItemStack(ModItems.ingot_c4, 4))); + + this.register(new GenericRecipe("chem.shellchlorine").setup(100, 1_000) + .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) + .inputFluids(new FluidStack(Fluids.CHLORINE, 4_000)) + .outputItems(new ItemStack(ModItems.ammo_arty, 1, 9))); + + this.register(new GenericRecipe("chem.shellphosgene").setup(100, 1_000) + .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) + .inputFluids(new FluidStack(Fluids.PHOSGENE, 4_000)) + .outputItems(new ItemStack(ModItems.ammo_arty, 1, 10))); + + this.register(new GenericRecipe("chem.shellmustard").setup(100, 1_000) + .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) + .inputFluids(new FluidStack(Fluids.MUSTARDGAS, 4_000)) + .outputItems(new ItemStack(ModItems.ammo_arty, 1, 11))); + + /// GLASS /// + this.register(new GenericRecipe("chem.laminate").setup(20, 100) + .inputFluids(new FluidStack(Fluids.XYLENE, 50), new FluidStack(Fluids.PHOSGENE, 50)) + .inputItems(new OreDictStack(KEY_ANYGLASS), new OreDictStack(STEEL.bolt(), 4)) + .outputItems(new ItemStack(ModBlocks.reinforced_laminate))); + + /// NUCLEAR PROCESSING /// + this.register(new GenericRecipe("chem.yellowcake").setup(250, 500) + .inputItems(new OreDictStack(U.billet(), 2), new OreDictStack(S.dust(), 2)) + .inputFluids(new FluidStack(Fluids.PEROXIDE, 500)) + .outputItems(new ItemStack(ModItems.powder_yellowcake))); + + this.register(new GenericRecipe("chem.uf6").setup(100, 500).setIcon(ModItems.fluid_icon, Fluids.UF6.getID()) + .inputItems(new ComparableStack(ModItems.powder_yellowcake), new OreDictStack(F.dust(), 4)) + .inputFluids(new FluidStack(Fluids.WATER, 1_000)) + .outputItems(new ItemStack(ModItems.sulfur, 2)) + .outputFluids(new FluidStack(Fluids.UF6, 1_200))); + + this.register(new GenericRecipe("chem.puf6").setup(200, 500) + .inputItems(new OreDictStack(PU.dust()), new OreDictStack(F.dust(), 3)) + .inputFluids(new FluidStack(Fluids.WATER, 1_000)) + .outputFluids(new FluidStack(Fluids.PUF6, 900))); + + this.register(new GenericRecipe("chem.sas3").setup(200, 5_000) + .inputItems(new OreDictStack(SA326.dust()), new OreDictStack(S.dust(), 2)) + .inputFluids(new FluidStack(Fluids.PEROXIDE, 2_000)) + .outputFluids(new FluidStack(Fluids.SAS3, 1_000))); + + this.register(new GenericRecipe("chem.balefire").setup(100, 10_000).setIcon(ModItems.fluid_icon, Fluids.BALEFIRE.getID()) + .inputItems(new ComparableStack(ModItems.egg_balefire_shard)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 6_000)) + .outputItems(new ItemStack(ModItems.powder_balefire)) + .outputFluids(new FluidStack(Fluids.BALEFIRE, 8_000))); + + this.register(new GenericRecipe("chem.thoriumsalt").setup(100, 10_000).setIcon(ModItems.fluid_icon, Fluids.THORIUM_SALT.getID()) + .inputFluids(new FluidStack(Fluids.THORIUM_SALT_DEPLETED, 16_000)) + .inputItems(new OreDictStack(TH232.nugget(), 2)) + .outputFluids(new FluidStack(Fluids.THORIUM_SALT, 16_000)) + .outputItems( + new ChanceOutput(new ItemStack(ModItems.nugget_u233, 1), 0.5F), + new ChanceOutput(new ItemStack(ModItems.nuclear_waste_tiny, 1), 0.25F))); + + /// VITRIFICATION /// + this.register(new GenericRecipe("chem.vitliquid").setup(100, 1_000) + .inputItems(new ComparableStack(ModBlocks.sand_lead)) + .inputFluids(new FluidStack(Fluids.WASTEFLUID, 1_000)) + .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); + + this.register(new GenericRecipe("chem.vitgaseous").setup(100, 1_000) + .inputItems(new ComparableStack(ModBlocks.sand_lead)) + .inputFluids(new FluidStack(Fluids.WASTEGAS, 1_000)) + .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); + + this.register(new GenericRecipe("chem.vitsolid").setup(300, 1_000) + .inputItems(new ComparableStack(ModBlocks.sand_lead), new ComparableStack(ModItems.nuclear_waste, 4)) + .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified, 4))); + + /// OSMIRIDIUM /// + this.register(new GenericRecipe("chem.osmiridiumdeath").setup(240, 1_000) + .inputItems(new ComparableStack(ModItems.powder_paleogenite), new OreDictStack(F.dust(), 8), new ComparableStack(ModItems.nugget_bismuth, 4)) + .inputFluids(new FluidStack(Fluids.PEROXIDE, 1_000, 5)) + .outputFluids(new FluidStack(Fluids.DEATH, 1_000, 0))); - for(NTMMaterial mat : Mats.orderedList) { - if(mat.autogen.contains(MaterialShapes.CASTPLATE)) this.register(new GenericRecipe(mat.getUnlocalizedName() + ".plate").setup(60, 100).setOutputItems(new ChanceOutput(new ItemStack(ModItems.plate_cast, 1, mat.id)))); - if(mat.autogen.contains(MaterialShapes.WELDEDPLATE)) this.register(new GenericRecipe(mat.getUnlocalizedName() + ".weld").setup(60, 100).setOutputItems(new ChanceOutput(new ItemStack(ModItems.plate_welded, 1, mat.id)))); - if(mat.autogen.contains(MaterialShapes.DENSEWIRE)) this.register(new GenericRecipe(mat.getUnlocalizedName() + ".wire").setup(60, 100).setOutputItems(new ChanceOutput(new ItemStack(ModItems.wire_dense, 1, mat.id)))); - if(mat.autogen.contains(MaterialShapes.MECHANISM)) this.register(new GenericRecipe(mat.getUnlocalizedName() + ".mechanism").setup(60, 100).setOutputItems(new ChanceOutput(new ItemStack(ModItems.part_mechanism, 1, mat.id)))); - } } } diff --git a/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java index a86d7930f..487d51983 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java @@ -25,6 +25,7 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +@Deprecated public class ChemplantRecipes extends SerializableRecipe { /** @@ -419,7 +420,7 @@ public class ChemplantRecipes extends SerializableRecipe { .outputItems(new ItemStack(ModBlocks.asphalt, 16))); } - public static class ChemRecipe { + @Deprecated public static class ChemRecipe { public int listing; private int id; diff --git a/src/main/java/com/hbm/inventory/recipes/LiquefactionRecipes.java b/src/main/java/com/hbm/inventory/recipes/LiquefactionRecipes.java index ed171ee75..014296f28 100644 --- a/src/main/java/com/hbm/inventory/recipes/LiquefactionRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/LiquefactionRecipes.java @@ -33,43 +33,42 @@ public class LiquefactionRecipes extends SerializableRecipe { public void registerDefaults() { //oil processing - recipes.put(COAL.gem(), new FluidStack(100, Fluids.COALOIL)); - recipes.put(COAL.dust(), new FluidStack(100, Fluids.COALOIL)); - recipes.put(LIGNITE.gem(), new FluidStack(50, Fluids.COALOIL)); - recipes.put(LIGNITE.dust(), new FluidStack(50, Fluids.COALOIL)); - recipes.put(KEY_OIL_TAR, new FluidStack(75, Fluids.BITUMEN)); - recipes.put(KEY_CRACK_TAR, new FluidStack(100, Fluids.BITUMEN)); - recipes.put(KEY_COAL_TAR, new FluidStack(50, Fluids.BITUMEN)); - recipes.put(KEY_LOG, new FluidStack(100, Fluids.MUG)); - recipes.put(KNO.dust(), new FluidStack(750, Fluids.NITRIC_ACID)); - recipes.put(NA.dust(), new FluidStack(100, Fluids.SODIUM)); - recipes.put(PB.ingot(), new FluidStack(100, Fluids.LEAD)); - recipes.put(PB.dust(), new FluidStack(100, Fluids.LEAD)); + recipes.put(COAL.gem(), new FluidStack(100, Fluids.COALOIL)); + recipes.put(COAL.dust(), new FluidStack(100, Fluids.COALOIL)); + recipes.put(LIGNITE.gem(), new FluidStack(50, Fluids.COALOIL)); + recipes.put(LIGNITE.dust(), new FluidStack(50, Fluids.COALOIL)); + recipes.put(KEY_OIL_TAR, new FluidStack(75, Fluids.BITUMEN)); + recipes.put(KEY_CRACK_TAR, new FluidStack(100, Fluids.BITUMEN)); + recipes.put(KEY_COAL_TAR, new FluidStack(50, Fluids.BITUMEN)); + recipes.put(KEY_LOG, new FluidStack(100, Fluids.MUG)); + recipes.put(NA.dust(), new FluidStack(100, Fluids.SODIUM)); + recipes.put(PB.ingot(), new FluidStack(100, Fluids.LEAD)); + recipes.put(PB.dust(), new FluidStack(100, Fluids.LEAD)); //general utility recipes because why not - recipes.put(new ComparableStack(Blocks.netherrack), new FluidStack(250, Fluids.LAVA)); - recipes.put(new ComparableStack(Blocks.cobblestone), new FluidStack(250, Fluids.LAVA)); - recipes.put(new ComparableStack(Blocks.stone), new FluidStack(250, Fluids.LAVA)); - recipes.put(new ComparableStack(Blocks.obsidian), new FluidStack(500, Fluids.LAVA)); - recipes.put(new ComparableStack(Items.snowball), new FluidStack(125, Fluids.WATER)); - recipes.put(new ComparableStack(Blocks.snow), new FluidStack(500, Fluids.WATER)); - recipes.put(new ComparableStack(Blocks.ice), new FluidStack(1000, Fluids.WATER)); - recipes.put(new ComparableStack(Blocks.packed_ice), new FluidStack(1000, Fluids.WATER)); - recipes.put(new ComparableStack(Items.ender_pearl), new FluidStack(100, Fluids.ENDERJUICE)); - recipes.put(new ComparableStack(ModItems.pellet_charged), new FluidStack(4000, Fluids.HELIUM4)); - recipes.put(new ComparableStack(ModBlocks.ore_oil_sand), new FluidStack(100, Fluids.BITUMEN)); + recipes.put(new ComparableStack(Blocks.netherrack), new FluidStack(250, Fluids.LAVA)); + recipes.put(new ComparableStack(Blocks.cobblestone), new FluidStack(250, Fluids.LAVA)); + recipes.put(new ComparableStack(Blocks.stone), new FluidStack(250, Fluids.LAVA)); + recipes.put(new ComparableStack(Blocks.obsidian), new FluidStack(500, Fluids.LAVA)); + recipes.put(new ComparableStack(Items.snowball), new FluidStack(125, Fluids.WATER)); + recipes.put(new ComparableStack(Blocks.snow), new FluidStack(500, Fluids.WATER)); + recipes.put(new ComparableStack(Blocks.ice), new FluidStack(1000, Fluids.WATER)); + recipes.put(new ComparableStack(Blocks.packed_ice), new FluidStack(1000, Fluids.WATER)); + recipes.put(new ComparableStack(Items.ender_pearl), new FluidStack(100, Fluids.ENDERJUICE)); + recipes.put(new ComparableStack(ModItems.pellet_charged), new FluidStack(4000, Fluids.HELIUM4)); + recipes.put(new ComparableStack(ModBlocks.ore_oil_sand), new FluidStack(100, Fluids.BITUMEN)); - recipes.put(new ComparableStack(Items.sugar), new FluidStack(100, Fluids.ETHANOL)); - recipes.put(new ComparableStack(ModBlocks.plant_flower, 1, 3), new FluidStack(150, Fluids.ETHANOL)); - recipes.put(new ComparableStack(ModBlocks.plant_flower, 1, 4), new FluidStack(50, Fluids.ETHANOL)); - recipes.put(new ComparableStack(ModItems.biomass), new FluidStack(125, Fluids.BIOGAS)); - recipes.put(new ComparableStack(ModItems.glyphid_gland_empty), new FluidStack(2000, Fluids.BIOGAS)); + recipes.put(new ComparableStack(Items.sugar), new FluidStack(100, Fluids.ETHANOL)); + recipes.put(new ComparableStack(ModBlocks.plant_flower, 1, 3), new FluidStack(150, Fluids.ETHANOL)); + recipes.put(new ComparableStack(ModBlocks.plant_flower, 1, 4), new FluidStack(50, Fluids.ETHANOL)); + recipes.put(new ComparableStack(ModItems.biomass), new FluidStack(125, Fluids.BIOGAS)); + recipes.put(new ComparableStack(ModItems.glyphid_gland_empty), new FluidStack(2000, Fluids.BIOGAS)); recipes.put(new ComparableStack(Items.fish, 1, OreDictionary.WILDCARD_VALUE), new FluidStack(100, Fluids.FISHOIL)); - recipes.put(new ComparableStack(Blocks.double_plant, 1, 0), new FluidStack(100, Fluids.SUNFLOWEROIL)); + recipes.put(new ComparableStack(Blocks.double_plant, 1, 0), new FluidStack(100, Fluids.SUNFLOWEROIL)); - recipes.put(new ComparableStack(Items.wheat_seeds), new FluidStack(50, Fluids.SEEDSLURRY)); - recipes.put(new ComparableStack(Blocks.tallgrass, 1, 1), new FluidStack(100, Fluids.SEEDSLURRY)); - recipes.put(new ComparableStack(Blocks.tallgrass, 1, 2), new FluidStack(100, Fluids.SEEDSLURRY)); - recipes.put(new ComparableStack(Blocks.vine), new FluidStack(100, Fluids.SEEDSLURRY)); + recipes.put(new ComparableStack(Items.wheat_seeds), new FluidStack(50, Fluids.SEEDSLURRY)); + recipes.put(new ComparableStack(Blocks.tallgrass, 1, 1), new FluidStack(100, Fluids.SEEDSLURRY)); + recipes.put(new ComparableStack(Blocks.tallgrass, 1, 2), new FluidStack(100, Fluids.SEEDSLURRY)); + recipes.put(new ComparableStack(Blocks.vine), new FluidStack(100, Fluids.SEEDSLURRY)); } public static FluidStack getOutput(ItemStack stack) { diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 823f97e81..f2c8dfd42 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -11,8 +11,10 @@ import com.hbm.inventory.recipes.loader.GenericRecipes.ChanceOutputMulti; import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.util.BobMathUtil; import com.hbm.util.i18n.I18nUtil; +import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -41,12 +43,19 @@ public class GenericRecipe { public GenericRecipe setIcon(ItemStack icon) { this.icon = icon; this.writeIcon = true; return this; } public GenericRecipe setIcon(Item item, int meta) { return this.setIcon(new ItemStack(item, 1, meta)); } public GenericRecipe setIcon(Item item) { return this.setIcon(new ItemStack(item)); } + public GenericRecipe setIcon(Block block) { return this.setIcon(new ItemStack(block)); } public GenericRecipe setNamed() { this.customLocalization = true; return this; } - public GenericRecipe setInputItems(AStack... input) { this.inputItem = input; return this; } - public GenericRecipe setInputFluids(FluidStack... input) { this.inputFluid = input; return this; } - public GenericRecipe setOutputItems(IOutput... output) { this.outputItem = output; return this; } - public GenericRecipe setOutputFluids(FluidStack... output) { this.outputFluid = output; return this; } + public GenericRecipe inputItems(AStack... input) { this.inputItem = input; return this; } + public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; } + public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; } + public GenericRecipe outputFluids(FluidStack... output) { this.outputFluid = output; return this; } + + public GenericRecipe outputItems(ItemStack... output) { + this.outputItem = new IOutput[output.length]; + for(int i = 0; i < outputItem.length; i++) this.outputItem[i] = new ChanceOutput(output[i]); + return this; + } public ItemStack getIcon() { @@ -77,18 +86,21 @@ public class GenericRecipe { public List print() { List list = new ArrayList(); list.add(EnumChatFormatting.YELLOW + this.getLocalizedName()); + if(duration > 0) list.add(EnumChatFormatting.RED + "Duration: " + this.duration / 20D + "s"); + if(power > 0) list.add(EnumChatFormatting.RED + "Consumption: " + BobMathUtil.getShortNumber(power) + "HE/t"); list.add(EnumChatFormatting.BOLD + "Input:"); if(inputItem != null) for(AStack stack : inputItem) { ItemStack display = stack.extractForCyclingDisplay(20); list.add(" " + EnumChatFormatting.GRAY + display.stackSize + "x " + display.getDisplayName()); } - if(inputFluid != null) for(FluidStack fluid : inputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : "at " + EnumChatFormatting.RED + fluid.pressure + " PU")); + if(inputFluid != null) for(FluidStack fluid : inputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : " at " + EnumChatFormatting.RED + fluid.pressure + " PU")); list.add(EnumChatFormatting.BOLD + "Output:"); if(outputItem != null) for(IOutput output : outputItem) for(String line : output.getLabel()) list.add(" " + line); - if(outputFluid != null) for(FluidStack fluid : outputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : "at " + EnumChatFormatting.RED + fluid.pressure + " PU")); + if(outputFluid != null) for(FluidStack fluid : outputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : " at " + EnumChatFormatting.RED + fluid.pressure + " PU")); return list; } + /** Default impl only matches localized name substring, can be extended to include ingredients as well */ public boolean matchesSearch(String substring) { return getLocalizedName().toLowerCase(Locale.US).contains(substring.toLowerCase(Locale.US)); } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 53de13faa..eabdd1802 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -55,6 +55,7 @@ public abstract class GenericRecipes extends Serializab public void register(T recipe) { this.recipeOrderedList.add(recipe); + if(recipeNameMap.containsKey(recipe.name)) throw new IllegalStateException("Recipe " + recipe.name + " has been reciped with a duplicate ID!"); this.recipeNameMap.put(recipe.name, recipe); } @@ -154,8 +155,12 @@ public abstract class GenericRecipes extends Serializab /// CLASSES /// /////////////// public static interface IOutput { + /** true for ChanceOutputMulti with a poolsize >1 */ public boolean possibleMultiOutput(); + /** Decides an output, returns a copy of the held result */ public ItemStack collapse(); + /** Returns an itemstack only if possibleMultiOutput is false, null otherwise */ + public ItemStack getSingle(); public void serialize(JsonWriter writer) throws IOException; public void deserialize(JsonArray array); public String[] getLabel(); @@ -172,6 +177,7 @@ public abstract class GenericRecipes extends Serializab public ChanceOutput() { super(0); } // for deserialization public ChanceOutput(ItemStack stack) { this(stack, 1F, 0); } public ChanceOutput(ItemStack stack, int weight) { this(stack, 1F, weight); } + public ChanceOutput(ItemStack stack, float chance) { this(stack, chance, 0); } public ChanceOutput(ItemStack stack, float chance, int weight) { super(weight); this.stack = stack; @@ -180,10 +186,11 @@ public abstract class GenericRecipes extends Serializab @Override public ItemStack collapse() { - if(this.chance >= 1F) return this.stack; - return RNG.nextFloat() <= chance ? this.stack : null; + if(this.chance >= 1F) return getSingle().copy(); + return RNG.nextFloat() <= chance ? getSingle().copy() : null; } + @Override public ItemStack getSingle() { return this.stack; } @Override public boolean possibleMultiOutput() { return false; } @Override @@ -232,6 +239,7 @@ public abstract class GenericRecipes extends Serializab @Override public ItemStack collapse() { return ((ChanceOutput) WeightedRandom.getRandomItem(RNG, pool)).collapse(); } @Override public boolean possibleMultiOutput() { return pool.size() > 1; } + @Override public ItemStack getSingle() { return possibleMultiOutput() ? null : pool.get(0).getSingle(); } @Override public void serialize(JsonWriter writer) throws IOException { diff --git a/src/main/java/com/hbm/module/ModuleMachineChemplant.java b/src/main/java/com/hbm/module/ModuleMachineChemplant.java index 2d5d0ffbc..258f8fcc4 100644 --- a/src/main/java/com/hbm/module/ModuleMachineChemplant.java +++ b/src/main/java/com/hbm/module/ModuleMachineChemplant.java @@ -3,11 +3,13 @@ package com.hbm.module; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; import api.hbm.energymk2.IEnergyHandlerMK2; import cpw.mods.fml.common.network.ByteBufUtils; import io.netty.buffer.ByteBuf; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; /** * Option 1: Make a base class with weird arbitrary overrides to define shit like slots for multi machines like the chemfac @@ -17,6 +19,7 @@ import net.minecraft.item.ItemStack; */ public class ModuleMachineChemplant { + // setup public int index; public IEnergyHandlerMK2 battery; public ItemStack[] slots; @@ -24,9 +27,12 @@ public class ModuleMachineChemplant { public int[] outputSlots = new int[3]; public FluidTank[] inputTanks = new FluidTank[3]; public FluidTank[] outputTanks = new FluidTank[3]; - + // running vars public String recipe = "null"; public float progress; + // return signals + public boolean didProcess = false; + public boolean markDirty = false; public ModuleMachineChemplant(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { this.index = index; @@ -34,38 +40,128 @@ public class ModuleMachineChemplant { this.slots = slots; } - public boolean canProcess() { - GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); + /** Chances tank type and pressure based on recipe */ + public void setupTanks(GenericRecipe recipe) { + if(recipe == null) return; + if(recipe.inputFluid != null) for(int i = 0; i < Math.min(inputTanks.length, recipe.inputFluid.length); i++) inputTanks[i].conform(recipe.inputFluid[i]); + if(recipe.outputFluid != null) for(int i = 0; i < Math.min(outputTanks.length, recipe.outputFluid.length); i++) outputTanks[i].conform(recipe.outputFluid[i]); + } + + /** Expects the tanks to be set up correctly beforehand */ + public boolean canProcess(GenericRecipe recipe) { if(recipe == null) return false; if(battery.getPower() < recipe.power) return false; - //TBI + if(recipe.inputItem != null) { + for(int i = 0; i < Math.min(recipe.inputItem.length, inputSlots.length); i++) { + if(!recipe.inputItem[i].matchesRecipe(slots[inputSlots[i]], false)) return false; + } + } + + if(recipe.inputFluid != null) { + for(int i = 0; i < Math.min(recipe.inputFluid.length, inputTanks.length); i++) { + if(inputTanks[i].getFill() < recipe.inputFluid[i].fill) return false; + } + } + + if(recipe.outputItem != null) { + for(int i = 0; i < Math.min(recipe.outputItem.length, outputSlots.length); i++) { + ItemStack stack = slots[outputSlots[i]]; + if(stack == null) continue; // always continue if output slot is free + IOutput output = recipe.outputItem[i]; + if(output.possibleMultiOutput()) return false; // output slot needs to be empty to decide on multi outputs + ItemStack single = output.getSingle(); + if(single == null) return false; // shouldn't be possible but better safe than sorry + if(stack.getItem() != single.getItem()) return false; + if(stack.getItemDamage() != single.getItemDamage()) return false; + if(stack.stackSize + single.stackSize > stack.getMaxStackSize()) return false; + } + } + + if(recipe.outputFluid != null) { + for(int i = 0; i < Math.min(recipe.outputFluid.length, outputTanks.length); i++) { + if(recipe.outputFluid[i].fill + outputTanks[i].getFill() > outputTanks[i].getMaxFill()) return false; + } + } return true; } - public void resetProgress() { this.progress = 0F; } - - public void update() { - //TBI + public void process(GenericRecipe recipe) { + + this.battery.setPower(this.battery.getPower() - recipe.power); + float step = Math.min(1F / recipe.duration, 1F); // can't do more than one recipe per tick, might look into that later + this.progress += step; + + if(this.progress >= 1F) { + this.progress -= 1F; + + if(recipe.inputItem != null) { + for(int i = 0; i < Math.min(recipe.inputItem.length, inputSlots.length); i++) { + slots[inputSlots[i]].stackSize -= recipe.inputItem[i].stacksize; + if(slots[inputSlots[i]].stackSize <= 0) slots[inputSlots[i]] = null; + } + } + + if(recipe.inputFluid != null) { + for(int i = 0; i < Math.min(recipe.inputFluid.length, inputTanks.length); i++) { + inputTanks[i].setFill(inputTanks[i].getFill() - recipe.inputFluid[i].fill); + } + } + + if(recipe.outputItem != null) { + for(int i = 0; i < Math.min(recipe.outputItem.length, outputSlots.length); i++) { + ItemStack collapse = recipe.outputItem[i].collapse(); + if(slots[outputSlots[i]] == null) { + slots[outputSlots[i]] = collapse; + } else { + slots[outputSlots[i]].stackSize += collapse.stackSize; // we can do this because we've already established that the result slot is not null if it's a single output + } + } + } + + if(recipe.outputFluid != null) { + for(int i = 0; i < Math.min(recipe.outputFluid.length, outputTanks.length); i++) { + outputTanks[i].setFill(outputTanks[i].getFill() + recipe.outputFluid[i].fill); + } + } + + this.markDirty = true; + } } + public void update() { + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); + this.setupTanks(recipe); + + this.didProcess = false; + this.markDirty = false; + + if(this.canProcess(recipe)) { + this.process(recipe); + this.didProcess = true; + } else { + this.progress = 0F; + } + } + + /** For item IO, instead of the TE doing all the work it only has to handle non-recipe stuff, the module does the rest */ public boolean isItemValid(int slot, ItemStack stack) { GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); if(recipe == null) return false; if(recipe.inputItem == null) return false; for(int i = 0; i < Math.min(inputSlots.length, recipe.inputItem.length); i++) { - if(recipe.inputItem[i].matchesRecipe(stack, true)) return true; + if(inputSlots[i] == slot && recipe.inputItem[i].matchesRecipe(stack, true)) return true; } return false; } - public ModuleMachineChemplant iInput(int a, int b, int c) { inputSlots[0] = a; inputSlots[1] = b; inputSlots[2] = c; return this; } - public ModuleMachineChemplant iOutput(int a, int b, int c) { outputSlots[0] = a; outputSlots[1] = b; outputSlots[2] = c; return this; } - public ModuleMachineChemplant fInput(FluidTank a, FluidTank b, FluidTank c) { inputTanks[0] = a; inputTanks[1] = b; inputTanks[2] = c; return this; } - public ModuleMachineChemplant fOutput(FluidTank a, FluidTank b, FluidTank c) { outputTanks[0] = a; outputTanks[1] = b; outputTanks[2] = c; return this; } + public ModuleMachineChemplant itemInput(int a, int b, int c) { inputSlots[0] = a; inputSlots[1] = b; inputSlots[2] = c; return this; } + public ModuleMachineChemplant itemOutput(int a, int b, int c) { outputSlots[0] = a; outputSlots[1] = b; outputSlots[2] = c; return this; } + public ModuleMachineChemplant fluidInput(FluidTank a, FluidTank b, FluidTank c) { inputTanks[0] = a; inputTanks[1] = b; inputTanks[2] = c; return this; } + public ModuleMachineChemplant fluidOutput(FluidTank a, FluidTank b, FluidTank c) { outputTanks[0] = a; outputTanks[1] = b; outputTanks[2] = c; return this; } public void serialize(ByteBuf buf) { buf.writeFloat(progress); @@ -76,4 +172,14 @@ public class ModuleMachineChemplant { this.progress = buf.readFloat(); this.recipe = ByteBufUtils.readUTF8String(buf); } + + public void readFromNBT(NBTTagCompound nbt) { + this.progress = nbt.getFloat("progress"); + this.recipe = nbt.getString("recipe"); + } + + public void writeToNBT(NBTTagCompound nbt) { + nbt.setFloat("progress", progress); + nbt.setString("recipe", recipe); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 6686267ad..bbd049ba7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -18,6 +18,7 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; +import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; @@ -40,6 +41,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem public long power; public long maxPower = 1_000_000; + public boolean didProcess = false; public ModuleMachineChemplant chemplantModule; public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); @@ -55,7 +57,10 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem } this.chemplantModule = new ModuleMachineChemplant(0, this, slots) - .iInput(4, 5, 6).iOutput(7, 8, 9); + .itemInput(4, 5, 6) + .itemOutput(7, 8, 9) + .fluidInput(inputTanks[0], inputTanks[1], inputTanks[2]) + .fluidOutput(outputTanks[0], outputTanks[1], outputTanks[2]); } @Override @@ -70,6 +75,24 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); upgradeManager.checkSlots(slots, 2, 3); + + inputTanks[0].loadTank(10, 13, slots); + inputTanks[1].loadTank(11, 14, slots); + inputTanks[2].loadTank(12, 15, slots); + + outputTanks[0].unloadTank(16, 19, slots); + outputTanks[1].unloadTank(17, 20, slots); + outputTanks[2].unloadTank(18, 21, slots); + + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos); + for(FluidTank tank : inputTanks) if(tank.getTankType() != Fluids.NONE) this.trySubscribe(tank.getTankType(), worldObj, pos); + for(FluidTank tank : outputTanks) if(tank.getFill() > 0) this.tryProvide(tank, worldObj, pos); + } + + this.chemplantModule.update(); + this.didProcess = this.chemplantModule.didProcess; + if(this.chemplantModule.markDirty) this.markDirty(); this.networkPackNT(100); @@ -77,6 +100,23 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem } } + + public DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord + 2, yCoord, zCoord - 1, Library.POS_X), + new DirPos(xCoord + 2, yCoord, zCoord + 0, Library.POS_X), + new DirPos(xCoord + 2, yCoord, zCoord + 1, Library.POS_X), + new DirPos(xCoord - 2, yCoord, zCoord - 1, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 0, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 1, Library.NEG_X), + new DirPos(xCoord - 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord + 0, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord + 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord - 1, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord + 0, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord + 1, yCoord, zCoord - 2, Library.NEG_Z), + }; + } @Override public void serialize(ByteBuf buf) { @@ -107,7 +147,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem this.outputTanks[i].readFromNBT(nbt, "o" + i); } - this.chemplantModule.fInput(inputTanks[0], inputTanks[1], inputTanks[2]).fOutput(outputTanks[0], outputTanks[1], outputTanks[2]); + this.chemplantModule.readFromNBT(nbt); } @Override @@ -118,12 +158,14 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem this.inputTanks[i].writeToNBT(nbt, "i" + i); this.outputTanks[i].writeToNBT(nbt, "o" + i); } + + this.chemplantModule.writeToNBT(nbt); } @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if(slot == 0) return true; // battery - if(slot >= 2 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgades + if(slot >= 2 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades if(slot >= 10 && slot <= 12) return true; // input fluid if(slot >= 16 && slot <= 18) return true; // output fluid if(this.chemplantModule.isItemValid(slot, stack)) return true; // recipe input crap diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 984ab6040..eb5a473d3 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2871,7 +2871,7 @@ item.plate_euphemium.name=Euphemium-Verbundplatte item.plate_gold.name=Goldplatte item.plate_gunmetal.name=Rotgussplatte item.plate_iron.name=Eisenplatte -item.plate_kevlar.name=Kevlar-Keramik-Verbund +item.plate_kevlar.name=Kevlarplatte item.plate_lead.name=Bleiplatte item.plate_mixed.name=Gemischte Platte item.plate_paa.name=PaA-Legierungsplatte diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index df2d909a3..d8c12c8c2 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3766,7 +3766,7 @@ item.plate_fuel_u235.name=HEU-235 Plate Fuel item.plate_gold.name=Gold Plate item.plate_gunmetal.name=Gunmetal Plate item.plate_iron.name=Iron Plate -item.plate_kevlar.name=Kevlar-Ceramic Compound +item.plate_kevlar.name=Kevlar Sheet item.plate_lead.name=Lead Plate item.plate_mixed.name=Mixed Plate item.plate_paa.name=PaA Alloy Plate diff --git a/src/main/resources/assets/hbm/textures/items/plate_kevlar.png b/src/main/resources/assets/hbm/textures/items/plate_kevlar.png index 5c7efbb19c077486a4d4f8d6e9dbe8c9077ceab6..00cfa5a1586b82b1dd8ff1c7f3b14fc848f801e5 100644 GIT binary patch delta 347 zcmV-h0i^zv1NH)tB!2{RLP=Bz2nYy#2xN!=00AvYL_t(IjbmUK@_-SS#Pq4`|An|c z7~Xx|!H}8#6Q?>RT$;apS7lJw-No?byDG!KI^z{8^WY*DBZeU{F z&#-Nm9D{=L0U~XNXl7u5ri0^qV*kJXyqZCjHa z`1Jh*Tr=DN7*yD_p5y<~lX48!=8qVTo|I#V41LV7d%rS+tK(gU+C~8eb(J?LnlTK3 t0dyB#IAe-oGhPGGUG(?YeXN?P0sxaq#sZpONpGDM>^@R5(wilCf%pKoExK0;z(9l}CDe@d*NXgn$-m8PHA$d54sC z79o`uiUjTj0(lHkf?yRvG<}N6%_e)?>UwwN{$_S%|L=EZcYlS5aE>ni>c4e1V6g?) zbx~0iwvOX?#TF7t0c18!6UK1_RaK#`YxZ3RngO_(OizzjaC7$t@2|J;vbmOm1i-$z zX&UId4m3>@s^@tEXg9=ZG99MmX-$#@bX|uq48gW-WPflJf*@d% zq~7T2wk^>X)|bz_TOe~3MS__m+` Date: Thu, 5 Jun 2025 16:32:30 +0300 Subject: [PATCH 145/491] Save customName to NBT --- .../tileentity/TileEntityInventoryBase.java | 6 ++++++ .../hbm/tileentity/TileEntityMachineBase.java | 6 ++++++ .../tileentity/bomb/TileEntityBombMulti.java | 6 ++++++ .../bomb/TileEntityCompactLauncher.java | 6 ++++++ .../bomb/TileEntityLaunchTable.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeBoy.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeCustom.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeFleija.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeGadget.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeMan.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeMike.java | 6 ++++++ .../hbm/tileentity/bomb/TileEntityNukeN2.java | 6 ++++++ .../bomb/TileEntityNukePrototype.java | 6 ++++++ .../bomb/TileEntityNukeSolinium.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeTsar.java | 6 ++++++ .../machine/TileEntityForceField.java | 6 ++++++ .../machine/TileEntityLockableBase.java | 19 +++++++++++++++++++ .../machine/TileEntityMachineArcFurnace.java | 6 ++++++ .../machine/TileEntityMachineKeyForge.java | 6 ++++++ .../TileEntityMachineMissileAssembly.java | 6 ++++++ .../machine/TileEntityMachineRTG.java | 6 ++++++ .../machine/TileEntityMachineSatDock.java | 6 ++++++ .../machine/TileEntityMachineSatLinker.java | 6 ++++++ .../machine/TileEntityMachineShredder.java | 6 ++++++ .../machine/TileEntityMachineSiren.java | 6 ++++++ .../machine/TileEntityMachineTurbine.java | 6 ++++++ .../machine/TileEntityRtgFurnace.java | 6 ++++++ .../machine/TileEntityWasteDrum.java | 6 ++++++ .../rbmk/TileEntityRBMKSlottedBase.java | 6 ++++++ .../machine/storage/TileEntityCrateBase.java | 6 ++++++ .../storage/TileEntityMachineBattery.java | 6 ++++++ .../TileEntityRequestNetworkContainer.java | 6 ++++++ 32 files changed, 205 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java b/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java index 4278443fe..8bc34400e 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java @@ -145,6 +145,8 @@ public abstract class TileEntityInventoryBase extends TileEntity implements ISid slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -163,5 +165,9 @@ public abstract class TileEntityInventoryBase extends TileEntity implements ISid } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } } diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index e38bf2f63..b125d03be 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -161,6 +161,8 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -179,6 +181,10 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public void updateRedstoneConnection(DirPos pos) { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java index 2955f12f4..b7e3139a5 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java @@ -156,6 +156,8 @@ public class TileEntityBombMulti extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -174,6 +176,10 @@ public class TileEntityBombMulti extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isLoaded(){ diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index 12dd8bab2..ac4208263 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -523,6 +523,8 @@ public class TileEntityCompactLauncher extends TileEntityLoadedBase implements I slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -545,6 +547,10 @@ public class TileEntityCompactLauncher extends TileEntityLoadedBase implements I } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index a5e49a870..483bc8554 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -520,6 +520,8 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -543,6 +545,10 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java index 5fdaa194d..95dadcd89 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java @@ -154,6 +154,8 @@ public class TileEntityNukeBoy extends TileEntity implements ISidedInventory, IG slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeBoy extends TileEntity implements ISidedInventory, IG } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java index e245c8669..2dff6eb94 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java @@ -161,6 +161,8 @@ public class TileEntityNukeCustom extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -180,6 +182,10 @@ public class TileEntityNukeCustom extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public static HashMap entries = new HashMap(); diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java index b843bdb3e..f8b36b80d 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java @@ -154,6 +154,8 @@ public class TileEntityNukeFleija extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeFleija extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java index 8eb136372..267972caa 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java @@ -154,6 +154,8 @@ public class TileEntityNukeGadget extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeGadget extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } /*public int getNukeTier() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java index 021789895..66bb62190 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java @@ -154,6 +154,8 @@ public class TileEntityNukeMan extends TileEntity implements ISidedInventory, IG slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeMan extends TileEntity implements ISidedInventory, IG } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean exp1() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java index 1d924acd1..a3e0eac1f 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java @@ -154,6 +154,8 @@ public class TileEntityNukeMike extends TileEntity implements ISidedInventory, I slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeMike extends TileEntity implements ISidedInventory, I } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java index 099807c3a..2241a58da 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java @@ -154,6 +154,8 @@ public class TileEntityNukeN2 extends TileEntity implements ISidedInventory, IGU slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeN2 extends TileEntity implements ISidedInventory, IGU } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java index b3fa2dd11..449fdecb5 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java @@ -155,6 +155,8 @@ public class TileEntityNukePrototype extends TileEntity implements ISidedInvento slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -173,6 +175,10 @@ public class TileEntityNukePrototype extends TileEntity implements ISidedInvento } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java index 45f5ccbf1..6339670ed 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java @@ -154,6 +154,8 @@ public class TileEntityNukeSolinium extends TileEntity implements ISidedInventor slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeSolinium extends TileEntity implements ISidedInventor } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java index f01665074..8388ff0e0 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java @@ -154,6 +154,8 @@ public class TileEntityNukeTsar extends TileEntity implements ISidedInventory, I slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeTsar extends TileEntity implements ISidedInventory, I } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java index 7ddaaca52..90500e399 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java @@ -224,6 +224,8 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -250,6 +252,10 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java index 2f8bb86d2..163f78141 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java @@ -6,6 +6,7 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.ArmorUtil; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -50,6 +51,24 @@ public abstract class TileEntityLockableBase extends TileEntityLoadedBase { nbt.setDouble("lockMod", lockMod); } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeInt(lock); + buf.writeBoolean(isLocked); + buf.writeDouble(lockMod); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + lock = buf.readInt(); + isLocked = buf.readBoolean(); + lockMod = buf.readDouble(); + } + public boolean canAccess(EntityPlayer player) { if(!isLocked) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java index 15a099436..d251b683a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java @@ -166,6 +166,8 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -186,6 +188,10 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java index 59d6f43bf..96bd0fdbd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java @@ -138,6 +138,8 @@ public class TileEntityMachineKeyForge extends TileEntity implements ISidedInven slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -156,6 +158,10 @@ public class TileEntityMachineKeyForge extends TileEntity implements ISidedInven } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java index c7e49bdfc..72a83af9a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java @@ -142,6 +142,8 @@ public class TileEntityMachineMissileAssembly extends TileEntity implements ISid slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -159,6 +161,10 @@ public class TileEntityMachineMissileAssembly extends TileEntity implements ISid } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java index e5a502f0c..12df36055 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java @@ -151,6 +151,8 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -169,6 +171,10 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java index 527e24803..bafe5adf6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java @@ -111,6 +111,8 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -127,6 +129,10 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override public int[] getAccessibleSlotsFromSide(int p_94128_1_) { return access; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java index 7e95c91ad..0934bfc9c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java @@ -132,6 +132,8 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -148,6 +150,10 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java index f948a67f4..ef5453335 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java @@ -154,6 +154,8 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -173,6 +175,10 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java index 7c10537d6..913838561 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java @@ -149,6 +149,8 @@ public class TileEntityMachineSiren extends TileEntity implements ISidedInventor slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -168,6 +170,10 @@ public class TileEntityMachineSiren extends TileEntity implements ISidedInventor } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 3180fbefa..9e84c64b4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -211,6 +211,8 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -233,6 +235,10 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java index 1b2c61d5b..80f68d6d5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java @@ -150,6 +150,8 @@ public class TileEntityRtgFurnace extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -169,6 +171,10 @@ public class TileEntityRtgFurnace extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java index 238a68c28..2a463a06b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java @@ -141,6 +141,8 @@ public class TileEntityWasteDrum extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -160,6 +162,10 @@ public class TileEntityWasteDrum extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java index 0ebc3d3dc..3d359e9ac 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java @@ -134,6 +134,8 @@ public abstract class TileEntityRBMKSlottedBase extends TileEntityRBMKActiveBase slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } } @@ -153,6 +155,10 @@ public abstract class TileEntityRBMKSlottedBase extends TileEntityRBMKActiveBase } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java index 1dac5081a..dfb194d21 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java @@ -127,6 +127,8 @@ public abstract class TileEntityCrateBase extends TileEntityLockableBase impleme } } this.hasSpiders = nbt.getBoolean("spiders"); + + customName = nbt.getString("name"); } @Override @@ -145,6 +147,10 @@ public abstract class TileEntityCrateBase extends TileEntityLockableBase impleme } nbt.setTag("items", list); nbt.setBoolean("spiders", hasSpiders); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java index 423e99f8f..978f59fba 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java @@ -115,6 +115,8 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I this.redHigh = nbt.getShort("redHigh"); this.lastRedstone = nbt.getByte("lastRedstone"); this.priority = ConnectionPriority.values()[nbt.getByte("priority")]; + + customName = nbt.getString("name"); } @Override @@ -126,6 +128,10 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I nbt.setShort("redHigh", redHigh); nbt.setByte("lastRedstone", lastRedstone); nbt.setByte("priority", (byte)this.priority.ordinal()); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java index 73e07b745..209e677dd 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java @@ -117,6 +117,8 @@ public abstract class TileEntityRequestNetworkContainer extends TileEntityReques slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -135,5 +137,9 @@ public abstract class TileEntityRequestNetworkContainer extends TileEntityReques } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } } From d27bda1f748d51f0408f3445b79f11f217e64234 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 5 Jun 2025 18:56:22 +0300 Subject: [PATCH 146/491] Add proper markDirty calls to tile entities --- .../java/com/hbm/tileentity/TileEntityInventoryBase.java | 1 + src/main/java/com/hbm/tileentity/TileEntityMachineBase.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityBombMulti.java | 1 + .../com/hbm/tileentity/bomb/TileEntityCompactLauncher.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java | 1 + src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java | 1 + src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeMike.java | 1 + src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java | 1 + .../com/hbm/tileentity/bomb/TileEntityNukePrototype.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java | 1 + .../com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java | 1 + .../com/hbm/tileentity/machine/TileEntityForceField.java | 1 + .../com/hbm/tileentity/machine/TileEntityLockableBase.java | 5 +++-- .../hbm/tileentity/machine/TileEntityMachineArcFurnace.java | 1 + .../hbm/tileentity/machine/TileEntityMachineKeyForge.java | 1 + .../tileentity/machine/TileEntityMachineMissileAssembly.java | 1 + .../com/hbm/tileentity/machine/TileEntityMachineRTG.java | 1 + .../com/hbm/tileentity/machine/TileEntityMachineSatDock.java | 2 +- .../hbm/tileentity/machine/TileEntityMachineSatLinker.java | 1 + .../hbm/tileentity/machine/TileEntityMachineShredder.java | 1 + .../com/hbm/tileentity/machine/TileEntityMachineSiren.java | 1 + .../com/hbm/tileentity/machine/TileEntityMachineTurbine.java | 1 + .../com/hbm/tileentity/machine/TileEntityRtgFurnace.java | 1 + .../java/com/hbm/tileentity/machine/TileEntityWasteDrum.java | 1 + .../tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java | 1 + .../hbm/tileentity/machine/storage/TileEntityCrateBase.java | 1 + .../tileentity/machine/storage/TileEntityMachineBattery.java | 1 + .../network/TileEntityRequestNetworkContainer.java | 2 +- 33 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java b/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java index 8bc34400e..4e0c4177e 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java @@ -62,6 +62,7 @@ public abstract class TileEntityInventoryBase extends TileEntity implements ISid public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index b125d03be..7d0805030 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -71,6 +71,7 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java index b7e3139a5..3c24c9e4d 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java @@ -94,6 +94,7 @@ public class TileEntityBombMulti extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index ac4208263..55c08edce 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -109,6 +109,7 @@ public class TileEntityCompactLauncher extends TileEntityLoadedBase implements I public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index 483bc8554..cbee47c97 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -118,6 +118,7 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java index 95dadcd89..2cd516e6e 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java @@ -92,6 +92,7 @@ public class TileEntityNukeBoy extends TileEntity implements ISidedInventory, IG public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java index 2dff6eb94..625c1c3ce 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java @@ -98,6 +98,7 @@ public class TileEntityNukeCustom extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java index f8b36b80d..21c781c93 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java @@ -92,6 +92,7 @@ public class TileEntityNukeFleija extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java index 267972caa..d2586b225 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java @@ -92,6 +92,7 @@ public class TileEntityNukeGadget extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java index 66bb62190..148a21a57 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java @@ -92,6 +92,7 @@ public class TileEntityNukeMan extends TileEntity implements ISidedInventory, IG public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java index a3e0eac1f..b9ebadf0c 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java @@ -92,6 +92,7 @@ public class TileEntityNukeMike extends TileEntity implements ISidedInventory, I public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java index 2241a58da..d10c60aba 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java @@ -92,6 +92,7 @@ public class TileEntityNukeN2 extends TileEntity implements ISidedInventory, IGU public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java index 449fdecb5..b9aaa4f71 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java @@ -93,6 +93,7 @@ public class TileEntityNukePrototype extends TileEntity implements ISidedInvento public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java index 6339670ed..6c214e607 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java @@ -92,6 +92,7 @@ public class TileEntityNukeSolinium extends TileEntity implements ISidedInventor public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java index 8388ff0e0..86ee45beb 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java @@ -92,6 +92,7 @@ public class TileEntityNukeTsar extends TileEntity implements ISidedInventory, I public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java index 8481f713a..5776fa53a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java @@ -149,6 +149,7 @@ public class TileEntityDiFurnaceRTG extends TileEntityMachineBase implements IGU @Override public void setCustomName(String name) { this.name = name; + markDirty(); } public boolean hasPower() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java index 90500e399..26e1cbc47 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java @@ -143,6 +143,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java index 163f78141..466072d46 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java @@ -26,11 +26,12 @@ public abstract class TileEntityLockableBase extends TileEntityLoadedBase { MainRegistry.logger.error("A block has been set to locked state before setting pins, this should not happen and may cause errors! " + this.toString()); } isLocked = true; + markDirty(); } - public void setPins(int pins) { lock = pins; } + public void setPins(int pins) { lock = pins; markDirty(); } public int getPins() { return lock; } - public void setMod(double mod) { lockMod = mod; } + public void setMod(double mod) { lockMod = mod; markDirty(); } public double getMod() { return lockMod; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java index d251b683a..7c6df467c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java @@ -91,6 +91,7 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java index 96bd0fdbd..0881ffd57 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java @@ -73,6 +73,7 @@ public class TileEntityMachineKeyForge extends TileEntity implements ISidedInven public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java index 72a83af9a..c4c0d2699 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java @@ -79,6 +79,7 @@ public class TileEntityMachineMissileAssembly extends TileEntity implements ISid public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java index 12df36055..79223e5c5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java @@ -83,6 +83,7 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java index bafe5adf6..85b71dd0a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java @@ -60,7 +60,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent @Override public String getInventoryName() { return this.hasCustomInventoryName() ? this.customName : "container.satDock"; } @Override public boolean hasCustomInventoryName() { return this.customName != null && this.customName.length() > 0; } - public void setCustomName(String name) { this.customName = name; } + public void setCustomName(String name) { this.customName = name; markDirty(); } @Override public int getInventoryStackLimit() { return 64; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java index 0934bfc9c..2ffadacba 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java @@ -73,6 +73,7 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java index ef5453335..5fe3ae5ca 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java @@ -83,6 +83,7 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java index 913838561..4ed07f066 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java @@ -82,6 +82,7 @@ public class TileEntityMachineSiren extends TileEntity implements ISidedInventor public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 9e84c64b4..85e982856 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -136,6 +136,7 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java index 80f68d6d5..72882cabd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java @@ -79,6 +79,7 @@ public class TileEntityRtgFurnace extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java index 2a463a06b..5371416dd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java @@ -75,6 +75,7 @@ public class TileEntityWasteDrum extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java index 3d359e9ac..27702f37a 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java @@ -66,6 +66,7 @@ public abstract class TileEntityRBMKSlottedBase extends TileEntityRBMKActiveBase public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java index dfb194d21..a52e8aaf9 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java @@ -61,6 +61,7 @@ public abstract class TileEntityCrateBase extends TileEntityLockableBase impleme public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java index 978f59fba..a2984cb93 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java @@ -91,6 +91,7 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java index 209e677dd..5ccb78658 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java @@ -70,7 +70,7 @@ public abstract class TileEntityRequestNetworkContainer extends TileEntityReques @Override public String getInventoryName() { return this.hasCustomInventoryName() ? this.customName : getName(); } public abstract String getName(); @Override public boolean hasCustomInventoryName() { return this.customName != null && this.customName.length() > 0; } - public void setCustomName(String name) { this.customName = name; } + public void setCustomName(String name) { this.customName = name; markDirty(); } @Override public int getInventoryStackLimit() { return 64; } @Override From 4d0ce8b6d9e3e95c42a54ea5b100f2a9777542d8 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 5 Jun 2025 19:51:10 +0300 Subject: [PATCH 147/491] Add update packet to crates --- .../machine/storage/TileEntityCrateBase.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java index a52e8aaf9..dca8dec9c 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java @@ -9,6 +9,9 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.world.World; import java.util.Random; @@ -154,6 +157,18 @@ public abstract class TileEntityCrateBase extends TileEntityLockableBase impleme } } + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + writeToNBT(nbt); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) { + readFromNBT(packet.func_148857_g()); + } + @Override public int[] getAccessibleSlotsFromSide(int side) { int[] slots = new int[this.slots.length]; From 3b2a4aee1e4ba738c0329a2e79c2fee55666f02f Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Thu, 5 Jun 2025 20:27:28 +0300 Subject: [PATCH 148/491] typo correction uk_UA --- src/main/resources/assets/hbm/lang/uk_UA.lang | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 38cc3b361..e185e4693 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -596,7 +596,7 @@ chem.DESH=Виробництво Деш chem.DEUTERIUM=Екстракція дейтерію chem.DUCRETE=Виробництво уранобетону chem.DYN_DNT=Диносинтез динейтронію -chem.DYN_EUPH=Диносинтез юхимію +chem.DYN_EUPH=Диносинтез евфемію chem.DYN_SCHRAB=Диносинтез шрабідію chem.DYNAMITE=Синтез динаміту chem.ELECTROLYSIS=Кріоелектроліз @@ -1614,7 +1614,7 @@ hbmmat.diamond=Алмаз hbmmat.dineutronium=Динейтроній hbmmat.durasteel=Швидкорізальна сталь hbmmat.emerald=Смарагд -hbmmat.euphemium=Юхимій +hbmmat.euphemium=Евфемій hbmmat.ferrouranium=Фероуран hbmmat.fiberglass=Скловолокно hbmmat.fluorite=Флюорит @@ -1889,7 +1889,7 @@ item.ams_catalyst_cerium.name=Церієвий каталізатор реакц item.ams_catalyst_cobalt.name=Кобальтовий каталізатор реакції item.ams_catalyst_copper.name=Мідний каталізатор реакції item.ams_catalyst_dineutronium.name=Динейтронієвий каталізатор реакції -item.ams_catalyst_euphemium.name=Юхимієвий каталізатор реакції +item.ams_catalyst_euphemium.name=Евфемієвий каталізатор реакції item.ams_catalyst_iron.name=Залізний каталізатор реакції item.ams_catalyst_lithium.name=Літієвий каталізатор реакції item.ams_catalyst_niobium.name=Ніобієвий каталізатор реакції @@ -1912,7 +1912,7 @@ item.ams_muzzle.desc=...it emits an energy-beam thingy. item.analysis_tool.name=Інструмент аналізу item.analyzer.name=Аналізатор item.anchor_remote.name=Пристрій повернення -item.apple_euphemium.name=Юхимієве яблуко +item.apple_euphemium.name=Евфемієве яблуко item.apple_lead.name=Свинцеве яблуко item.apple_schrabidium.name=Шрабідієве яблуко item.arc_electrode.name=Графітовий електрод @@ -2709,13 +2709,13 @@ item.envsuit_boots.name=Чоботи захисного костюма М1ТТІ item.envsuit_helmet.name=Шолом захисного костюма М1ТТІ item.envsuit_legs.name=Наголінники захисного костюма М1ТТІ item.envsuit_plate.name=Нагрудник захисного костюма М1ТТІ -item.euphemium_boots.name=Юхимієві чоботи -item.euphemium_capacitor.name=Юхимієвий конденсатор +item.euphemium_boots.name=Евфемієві чоботи +item.euphemium_capacitor.name=Евфемієвий конденсатор item.euphemium_capacitor.desc=Дозволяє пасивне розсіювання накопиченої позитивної енергії. -item.euphemium_helmet.name=Юхимієвий шолом -item.euphemium_kit.name=Юхимієвий набір -item.euphemium_legs.name=Юхимієві наголінники -item.euphemium_plate.name=Юхимієвий нагрудник +item.euphemium_helmet.name=Евфемієвий шолом +item.euphemium_kit.name=Евфемієвий набір +item.euphemium_legs.name=Евфемієві наголінники +item.euphemium_plate.name=Евфемієвий нагрудник item.euphemium_stopper.name=Стопор item.explosive_lenses.name=Масив вибухових лінз item.explosive_lenses.desc=Збірка 8 пластичних вибухових лінз з тонким$алюмінієвим штовхачем, дюралюмінієвим щитом, та$мініатюрними дротяномостовим детонатором. @@ -3044,7 +3044,7 @@ item.ingot_desh.name=Зливок деш item.ingot_dineutronium.name=Динейтронієвий зливок item.ingot_dura_steel.name=Зливок швидкорізальної сталі item.ingot_electronium.name=Електронієвий зливок -item.ingot_euphemium.name=Юхимієвий зливок +item.ingot_euphemium.name=Евфемієвий зливок item.ingot_euphemium.desc=Дуже особливий і водночас дивний елемент. item.ingot_ferrouranium.name=Фероурановий зливок item.ingot_fiberglass.name=Лист склопластику @@ -3422,7 +3422,7 @@ item.mp_warhead_15_nuclear.name=Ядерна боєголовка 15 розмі item.mp_warhead_15_nuclear_mimi.name=Голова Мімі-чан 15 розміру item.mp_warhead_15_nuclear_shark.name=Ядерна боєголовка 15 розміру item.mp_warhead_15_turbine.name=Реактивний двигун 15 розміру -item.mucho_mango.name=АріЗона Мучо Манго +item.mucho_mango.name=Живчік item.multi_kit.name=Комплект багатолільової бомби item.multitool_beam.name=Силова рукавичка (Підпалювач) item.multitool_decon.name=Силова рукавичка (Спеціальний обробник) @@ -3478,7 +3478,7 @@ item.nugget_cobalt.name=Кобальтовий самородок item.nugget_daffergon.name=Daffergon Nugget item.nugget_desh.name=Самородок деш item.nugget_dineutronium.name=Динейтронієвий самородок -item.nugget_euphemium.name=Юхимієвий самородок +item.nugget_euphemium.name=Евфемієвий самородок item.nugget_euphemium.desc=Невеликий шматочок рожевого металу.$Його властивості досі невідомі,$ПОВОДЬСЯ З НИМ обережно. item.nugget_gh336.name=Самородок Ґіорсію-336 item.nugget_gh336.desc=Колега Сіборгіума. @@ -3571,7 +3571,7 @@ item.ore_byproduct.b_sulfur.name=Кристалічний сірчаний фр item.ore_byproduct.b_technetium.name=Кристалічний технецієвий фрагмент item.ore_byproduct.b_titanium.name=Кристалічний титановий фрагмент item.ore_byproduct.b_uranium.name=Кристалічний урановий фрагмент -item.ore_centrifuged.name=Центріфугована %s руда +item.ore_centrifuged.name=Центрифугована %s руда item.ore_cleaned.name=Очищена %s руда item.ore_deepcleaned.name=Глибоко очищена %s руда item.ore_density_scanner.name=Сканер щільності корінної руди @@ -3755,7 +3755,7 @@ item.plate_dalekanium.name=Злий метал item.plate_desh.name=Деш комбінована пластина item.plate_dineutronium.name=Динейтронієва комбінована пластина item.plate_dura_steel.name=Пластина зі швидкорізальної сталі -item.plate_euphemium.name=Юхимієва комбінована пластина +item.plate_euphemium.name=Евфемієва комбінована пластина item.plate_fuel_mox.name=МОКС-паливна пластина item.plate_fuel_pu238be.name=Плутоній-238 берилієва паливна пластина item.plate_fuel_pu239.name=Паливна пластина високозбагаченого плутонію-239 @@ -3766,7 +3766,7 @@ item.plate_fuel_u235.name=Паливна пластина високозбага item.plate_gold.name=Золота пластина item.plate_gunmetal.name=Пластина з гарматної бронзи item.plate_iron.name=Залізна пластина -item.plate_kevlar.name=Кевлар-керамічний компаунд +item.plate_kevlar.name=Кевларова пластина item.plate_lead.name=Свинцева пластина item.plate_mixed.name=Комбінована пластина item.plate_paa.name=Пластина зі сплаву PaA @@ -3831,7 +3831,7 @@ item.powder_diamond.name=Алмазний порошок item.powder_dineutronium.name=Динейтронієвий порошок item.powder_dura_steel.name=Порошок швидкорізальної сталі item.powder_emerald.name=Смарагдовий порошок -item.powder_euphemium.name=Юхимієвий порошок +item.powder_euphemium.name=Евфемієвий порошок item.powder_euphemium.desc=Подрібнений рожевий.$На смак як полуниця. item.powder_fertilizer.name=Промислове добриво item.powder_fire.name=Червоний фосфор @@ -4429,10 +4429,10 @@ item.t45_kit.name=Комплект силової броні T-45 item.t45_legs.name=Наголінники силової броні T-45 item.t45_plate.name=Нагрудник силової броні T-45 item.tank_steel.name=Сталевий бак -item.taurun_boots.name=Taurun Boots -item.taurun_helmet.name=Taurun Helmet -item.taurun_legs.name=Taurun Leggings -item.taurun_plate.name=Taurun Chestplate +item.taurun_boots.name=Таурун чоботи +item.taurun_helmet.name=Таурун шолом +item.taurun_legs.name=Таурун наголінники +item.taurun_plate.name=Таурун нагрудник item.telepad.name=Telepad item.tem_flakes.name=Пластівці Тем item.template_folder.name=Папка шаблонів машин @@ -4467,10 +4467,10 @@ item.toolbox.name=Ящик для інструментів item.toolbox_legacy.name=Ящик для інструментів (LEGACY) item.toothpicks.name=Зубочистки item.train.cargo_tram.name=Електричний трамвай з плоскою платформою -item.trenchmaster_boots.name=Trenchmaster's Boots -item.trenchmaster_helmet.name=Trenchmaster's Helmet -item.trenchmaster_legs.name=Trenchmaster's Leggings -item.trenchmaster_plate.name=Trenchmaster's Chestplate +item.trenchmaster_boots.name=Чоботи траншейного майстра +item.trenchmaster_helmet.name=Шолом траншейного майстра +item.trenchmaster_legs.name=Наголінники траншейного майстра +item.trenchmaster_plate.name=Нагрудник траншейного майстра item.trinitite.name=Тринітит item.tritium_deuterium_cake.name=Тритій-дейтерієвий пиріг item.tritium_deuterium_cake.desc=Не справжній пиріг, але чудове$універсальне термоядерне паливо! @@ -4635,7 +4635,7 @@ item.weapon_mod_special.las_shotgun.name=Розділювач променя л item.weapon_mod_special.saw.name=Ножівка item.weapon_mod_special.scope.name=Приціл item.weapon_mod_special.silencer.name=Глушник -item.weapon_mod_special.skin_saturnite.name=Сатурнітовий скін +item.weapon_mod_special.skin_saturnite.name=Сатурнітовий корпус item.weapon_mod_special.slowdown.name=Зубчаста передача item.weapon_mod_special.speedloader.name=Швидкий заряджувач item.weapon_mod_special.speedup.name=Допоміжний електричний двигун @@ -4895,8 +4895,8 @@ tile.block_desh.name=Посилений блок деш tile.block_dineutronium.name=Блок динейтронію tile.block_dura_steel.name=Посилений блок швидкорізальної сталі tile.block_electrical_scrap.name=Блок зламаної електротехніки -tile.block_euphemium.name=Блок юхимію -tile.block_euphemium_cluster.name=Кластер шрабідію, витравленого юхимієм +tile.block_euphemium.name=Блок евфемію +tile.block_euphemium_cluster.name=Кластер шрабідію, витравленого евфемієм tile.block_fallout.name=Блок радіоактивних опадів tile.block_fiberglass.name=Рулон склопластику tile.block_fluorite.name=Блок флюориту @@ -5518,7 +5518,7 @@ tile.machine_fraction_tower.name=Ректифікаційна колона tile.machine_fracking_tower.name=Вежа гідророзриву пласта tile.machine_funnel.name=Комбінаторна воронки tile.machine_funnel.desc=Автоматично стискає предмети в сітці крафту 2x2 або 3x3$Вгорі: Вхід$Внизу: Вихід$Бічна сторона: Вихід для очищення інгредієнтів -tile.machine_gascent.name=Газова центріфуга +tile.machine_gascent.name=Газова центрифуга tile.machine_generator.name=Nuclear Reactor (Old) tile.machine_geo.name=Geothermal Electric Generator tile.machine_hephaestus.name=Геотермальний теплообмінник @@ -6118,7 +6118,7 @@ trait.rbmx.xenonGen=Функція створення свинцю: %s trait.tile.cluster=Випадає лише тоді, коли зламав гравець trait.tile.depth=Можна зламати тільки вибухом -tool.ability.centrifuge=Автоцентріфуга +tool.ability.centrifuge=Автоцентрифуга tool.ability.crystallizer=Автокристалізатор tool.ability.explosion=Вибух tool.ability.hammer=Зона дії From 88713946dde5f0a0651d768d12a7f1ce2491115a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 5 Jun 2025 20:11:27 +0300 Subject: [PATCH 149/491] Allow cycling the fan force falloff with a handdrill --- .../com/hbm/blocks/machine/MachineFan.java | 81 +++++++++++++++---- 1 file changed, 66 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index e4079cfbc..662aba705 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -3,11 +3,13 @@ package com.hbm.blocks.machine; import java.util.List; import com.hbm.blocks.ITooltipProvider; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.block.IBlowable; import api.hbm.block.IToolable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockPistonBase; @@ -16,9 +18,9 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -66,10 +68,11 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro return false; } - public static class TileEntityFan extends TileEntity { + public static class TileEntityFan extends TileEntityLoadedBase { public float spin; public float prevSpin; + public boolean falloff = true; @Override public void updateEntity() { @@ -81,7 +84,7 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro int range = 10; int effRange = 0; - double push = 0.15; + double push = 0.1; for(int i = 1; i <= range; i++) { Block block = worldObj.getBlock(xCoord + dir.offsetX * i, yCoord + dir.offsetY * i, zCoord + dir.offsetZ * i); @@ -105,8 +108,12 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro for(Entity e : affected) { - double dist = e.getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); - double coeff = push * (1 - dist / range / 2); + double coeff = push; + + if(!falloff) { + double dist = e.getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); + coeff *= 1.5 * (1 - dist / range / 2); + } e.motionX += dir.offsetX * coeff; e.motionY += dir.offsetY * coeff; @@ -125,6 +132,10 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro this.prevSpin -= 360; this.spin -= 360; } + + if(!worldObj.isRemote) { + networkPackNT(150); + } } @Override @@ -132,21 +143,61 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.falloff = nbt.getBoolean("falloff"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setBoolean("falloff", falloff); + } + + @Override + public void serialize(ByteBuf buf) { + buf.writeBoolean(falloff); + } + + @Override + public void deserialize(ByteBuf buf) { + falloff = buf.readBoolean(); + } } @Override public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { - if(tool != ToolType.SCREWDRIVER) return false; - int meta = world.getBlockMetadata(x, y, z); + if(tool == ToolType.SCREWDRIVER) { + int meta = world.getBlockMetadata(x, y, z); - if(meta == 0) world.setBlockMetadataWithNotify(x, y, z, 1, 3); - if(meta == 1) world.setBlockMetadataWithNotify(x, y, z, 0, 3); - if(meta == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 3); - if(meta == 3) world.setBlockMetadataWithNotify(x, y, z, 2, 3); - if(meta == 4) world.setBlockMetadataWithNotify(x, y, z, 5, 3); - if(meta == 5) world.setBlockMetadataWithNotify(x, y, z, 4, 3); - - return true; + if(meta == 0) world.setBlockMetadataWithNotify(x, y, z, 1, 3); + if(meta == 1) world.setBlockMetadataWithNotify(x, y, z, 0, 3); + if(meta == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 3); + if(meta == 3) world.setBlockMetadataWithNotify(x, y, z, 2, 3); + if(meta == 4) world.setBlockMetadataWithNotify(x, y, z, 5, 3); + if(meta == 5) world.setBlockMetadataWithNotify(x, y, z, 4, 3); + + return true; + } + + if(tool == ToolType.HAND_DRILL) { + TileEntityFan tile = (TileEntityFan) world.getTileEntity(x, y, z); + + if(tile != null) { + tile.falloff = !tile.falloff; + tile.markDirty(); + + if(!world.isRemote) { + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "random.click", 0.5F, 0.5F); + } + } + + return true; + } + + return false; } @Override From 51ad12d51aa1f3cafb10620cdf6abad994738297 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 5 Jun 2025 20:39:26 +0300 Subject: [PATCH 150/491] Add a notification for fan mode toggle --- src/main/java/com/hbm/blocks/machine/MachineFan.java | 8 ++++++++ src/main/java/com/hbm/main/ServerProxy.java | 7 ++++--- src/main/resources/assets/hbm/lang/de_DE.lang | 4 +++- src/main/resources/assets/hbm/lang/en_US.lang | 4 +++- src/main/resources/assets/hbm/lang/it_IT.lang | 4 +++- src/main/resources/assets/hbm/lang/pl_PL.lang | 3 +++ src/main/resources/assets/hbm/lang/ru_RU.lang | 4 +++- src/main/resources/assets/hbm/lang/uk_UA.lang | 4 +++- src/main/resources/assets/hbm/lang/zh_CN.lang | 4 +++- 9 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index 662aba705..333f7323f 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -3,7 +3,11 @@ package com.hbm.blocks.machine; import java.util.List; import com.hbm.blocks.ITooltipProvider; +import com.hbm.main.MainRegistry; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.ChatBuilder; import api.hbm.block.IBlowable; import api.hbm.block.IToolable; @@ -17,10 +21,12 @@ import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -190,6 +196,8 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro tile.markDirty(); if(!world.isRemote) { + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(this.getUnlocalizedName() + (tile.falloff ? ".falloffOn" : ".falloffOff")).color(EnumChatFormatting.GOLD).flush(), MainRegistry.proxy.ID_FAN_MODE), (EntityPlayerMP) player); + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "random.click", 0.5F, 0.5F); } } diff --git a/src/main/java/com/hbm/main/ServerProxy.java b/src/main/java/com/hbm/main/ServerProxy.java index 4e9d7704d..fdbe22529 100644 --- a/src/main/java/com/hbm/main/ServerProxy.java +++ b/src/main/java/com/hbm/main/ServerProxy.java @@ -30,9 +30,10 @@ public class ServerProxy { public static final int ID_HUD = 7; public static final int ID_DETONATOR = 8; public static final int ID_FLUID_ID = 9; - public static final int ID_TOOLABILITY = 10; - public static final int ID_GUN_MODE = 11; - public static final int ID_GAS_HAZARD = 12; + public static final int ID_FAN_MODE = 10; + public static final int ID_TOOLABILITY = 11; + public static final int ID_GUN_MODE = 12; + public static final int ID_GAS_HAZARD = 13; public ITranslate getI18n() { return I18N; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 0d4393362..2b9298a99 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4144,7 +4144,9 @@ tile.factory_titanium_furnace.name=Einfache Fabrikzugriffsluke tile.factory_titanium_hull.name=Fabrikblock tile.fallout.name=Fallout tile.fan.name=Ventilator -tile.fan.desc=Kann mit Redstone aktiviert werden$Bewegt Entities bis zu 10 Blöcke$Rechtsclick mit Schraubenzieher um den Ventilator umzudrehen +tile.fan.desc=Kann mit Redstone aktiviert werden$Bewegt Entities bis zu 10 Blöcke$Rechtsclick mit Schraubenzieher um den Ventilator umzudrehen$Klicken Sie mit der rechten Maustaste mit der Handbohrmaschine um den Modus zu wechseln +tile.fan.falloffOn=Die Lüfterleistung nimmt mit der Entfernung ab +tile.fan.falloffOff=Konstante Lüfterleistung tile.fence_metal.name=Maschendrahtzaun tile.fence_metal_post.name=Maschendrahtzaun-Pfahl tile.field_disturber.name=Hochenergiefeld-Jammer diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index f0e82f906..2b64f5ef9 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5267,7 +5267,9 @@ tile.factory_titanium_furnace.name=Basic Factory Access Hatch tile.factory_titanium_hull.name=Factory Block tile.fallout.name=Fallout tile.fan.name=Fan -tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip +tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip$Right-click with hand drill to switch mode +tile.fan.falloffOn=Fan power decreases with distance +tile.fan.falloffOff=Consistent fan power tile.fence_metal.name=Chainlink Fence tile.fence_metal_post.name=Chainlink Fence Post tile.field_disturber.name=High Energy Field Jammer diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index 4ce24e6b5..691badc0e 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -5356,7 +5356,9 @@ tile.factory_titanium_furnace.name=Basic Factory Access Hatch tile.factory_titanium_hull.name=Factory Block tile.fallout.name=Fallout tile.fan.name=Fan -tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip +tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip$Right-click with hand drill to switch mode +tile.fan.falloffOn=Fan power decreases with distance +tile.fan.falloffOff=Consistent fan power tile.fence_metal.name=Chainlink Fence tile.fence_metal_post.name=Chainlink Fence Post tile.field_disturber.name=High Energy Field Jammer diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index 497d759fc..99732c2fd 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -4720,6 +4720,9 @@ tile.factory_titanium_furnace.name=Basic Factory Access Hatch tile.factory_titanium_hull.name=Factory Block tile.fallout.name=Fallout tile.fan.name=Fan +tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip$Right-click with hand drill to switch mode +tile.fan.falloffOn=Fan power decreases with distance +tile.fan.falloffOff=Consistent fan power tile.fence_metal.name=Chainlink Fence tile.field_disturber.name=High Energy Field Jammer tile.filing_cabinet.green.name=Dusty Filing Cabinet diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index a2217d3a1..5c3efa442 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5530,7 +5530,9 @@ tile.factory_titanium_furnace.name=Люк доступа базовой фабр tile.factory_titanium_hull.name=Корпус базовой фабрики tile.fallout.name=Радиоактивный осадок tile.fan.name=Вентилятор -tile.fan.desc=Активируется редстоуном$Толкает существ до 10 блоков$ПКМ отвёрткой чтобы повернуть +tile.fan.desc=Активируется редстоуном$Толкает существ до 10 блоков$ПКМ отвёрткой чтобы повернуть$ПКМ ручным сверлом чтобы переключить режим +tile.fan.falloffOn=Сила вентилятора уменьшается с расстоянием +tile.fan.falloffOff=Постоянная сила вентилорая tile.fence_metal.name=Проволочная сетка tile.fence_metal_post.name=Столб проволочной сетки tile.field_disturber.name=Подавитель высокоэнергитических полей diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 0f9dfa371..44855c038 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -5267,7 +5267,9 @@ tile.factory_titanium_furnace.name=Basic Factory Access Hatch tile.factory_titanium_hull.name=Заводський блок tile.fallout.name=Радіоактивні опади tile.fan.name=Вентилятор -tile.fan.desc=Активується за допомогою редстоуну$Піднімає об'єкти на 10 блоків$Клацніть правою кнопкою миші викруткою, щоб перевернути +tile.fan.desc=Активується за допомогою редстоуну$Піднімає об'єкти на 10 блоків$Клацніть правою кнопкою миші викруткою, щоб перевернути$ПКМ ручним свердлом, щоб переключити режим +tile.fan.falloffOn=Сила вентилятора зменшується з відстанню +tile.fan.falloffOff=Постійна сила вентилятора tile.fence_metal.name=Огорожа рабиця tile.fence_metal_post.name=Огорожа рабиця стовп tile.field_disturber.name=Заглушник високоенергетичного поля diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 6a85a4901..20b27d397 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5005,7 +5005,9 @@ tile.factory_titanium_furnace.name=工厂端口 tile.factory_titanium_hull.name=工厂外壳 tile.fallout.name=辐射尘 tile.fan.name=风扇 -tile.fan.desc=使用红石激活$将实体推至最多10个方块外$用螺丝刀右键点击即可翻转 +tile.fan.desc=使用红石激活$将实体推至最多10个方块外$用螺丝刀右键点击即可翻转$使用手钻右键切换模式 +tile.fan.falloffOn=风扇功率随距离增加而减小 +tile.fan.falloffOff=风扇功率恒定 tile.fence_metal.name=铁丝网围栏 tile.fence_metal_post.name=铁丝网围栏立柱 tile.field_disturber.name=高能场干扰机 From 8a93b02c94eed38ac272f5bda1dcaa3490ad5537 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Fri, 6 Jun 2025 14:07:02 +0300 Subject: [PATCH 151/491] who cares what i called it --- src/main/resources/assets/hbm/lang/uk_UA.lang | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index e185e4693..f51ef5b6a 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -263,43 +263,43 @@ book.rbmk.title16=Melting book.rbmk.page16=§4§lAVOID. book.starter.cover=Посібник промисловця$з відновлення$суспільства -book.starter.title1=Introduction -book.starter.page1=If you're reading this, it's highly likely that society, in one way or another, has collapsed entirely. Governments, countries, and authority are a concept of the past - along with all of the amenities of civilized life. As such, this guide will inform you how to change that by recreating the industry and technology of the past for the improvement of your own life. -book.starter.title2=Coal & Mustard Gas -book.starter.page2=Whilst it is impossible to predict the actual state of the world in a post-apocalyptic time, it's not unlikely that war and industry in its current form may not have ended. To protect your own lungs, an effective and cheap way is to urinate on some §lcloth§r to make a §ltrench mask§r, to protect you from coal dust or mustard gas, if you ever encounter either. -book.starter.title3=Anvils & Presses -book.starter.page3=The quintessentials to beginning your industrial revitalization is an §lanvil§r and a §lburner press§r. The anvil will allow you to manually craft together early machinery such as the Assembler, whilst the burner press will let you make plates, wires, and circuits that you cannot hammer together with an anvil. -book.starter.title4=Templates -book.starter.page4=In order to stamp metal into useful shapes, assemble machinery, and perform chemical reactions, you will need to create a §lMachine Template Folder§r to create the various stamps and templates shown to the right. -book.starter.title5=Scavenging -book.starter.page5=Depending on how bad the initial apocalyptic event was to the preexisting structures of the world, there's a likely chance that many useful materials and machines can be salvaged from them directly. Metallic alloys like steel, parts like circuitry, and even fissile material from a nuclear power plant might be awaiting you. Beware certain ruins, however, as there may be an excess of danger lurking there like a snake in the grass; waiting to strike you down with radiation, traps, or indescribable horrors... -book.starter.title6=Early Machinery -book.starter.page6a=Two of the first machines you should assemble are the §lBlast Furnace§r and the §lAssembly Machine§r. The former will allow you to create alloys such as §lsteel§r, §lminecraft-grade copper§r, and §ladvanced alloy§r; you will need to use these metals for the bodies of machines, the wiring of circuits, advanced electromagnets, and more. -book.starter.page6b=The assembler will be used to create practically every other machine described in this guide. You will need a power source, such as a §lCombustion§r §lGenerator§r or §lSolar Boiler§r. -book.starter.page7a=The §lShredder§r, along with a pair of shredder blades, will be very useful for doubling the output of most ores, via shredding into smeltable powders. These powders are also crucial to begin making circuitry for various machines, such as §lEnhanced§r and §lOverclocked§r circuits. -book.starter.page7b=Using your new machinery, you can create the §lChemical Plant§r, used for the synthesis of better circuits, concrete, the processing of petrochemicals, and more. -book.starter.title8=Black Gold -book.starter.page8a=Using an §lOil §lReservoir§r §lDetector§r, you can find underground oil deposits to place a §lPumpjack§r or §lDerrick§r over via surveying an area. Remember that oil deposits will run out over time. -book.starter.page8b=Before the oil can be refined and separated into its constituent parts in an §lOil Refinery§r, you must heat the oil to 300°C in a §lBoiler§r. -book.starter.title9=Petrochemicals -book.starter.page9=Using §lChemical Plants§r, §lFractioning§r §lTowers§r, and §lCatalytic Cracking§r §lTowers§r, you can transform the separated oil into a variety of useful products. For example: §lPolymer§r or §lBakelite§r, durable and flexible plastics; §lDesh§r, an extremely durable and heat-resistant rare earth metal alloy; §lSolid Fuel§r, which can be burnt for energy; or even §lLiquid Fuels§r, such as §lGasoline§r, §lDiesel§r, §lKerosene§r, and more. -book.starter.title10=Advanced Machinery -book.starter.page10=With oil processing under your belt, you can create the §lCentrifuge§r, which will triple ore outputs; the §lOre §lAcidizer§r, which will crystallize ores, increasing the yield; and the §lSILEX + §lFEL§r, two marvels of modern engineering which can separate the isotopes of materials with ease. You will require significantly more energy to power these; which can be obtained with sources such as a §lDiesel Generator§r, an §lIndustrial Generator§r, or even a nuclear reactor. -book.starter.title11=Strata -book.starter.page11=Underneath the ground you walk, there is several naturally-occurring §lStrata§r, or special mineral layers and formations. §lSchist Strata§r are blue, lithium-containing layers filled with uranium, iron, copper, asbestos, and other ores for your own use. §lDepth Rock§r contains large quantities of rarer minerals, such as §lZirconium§r and §lBoron§r, but requires explosives to properly harvest. -book.starter.title12=Radiation -book.starter.page12a=§oThe rest of this book will deal with matters that involve §oradiation. For the safety of you and others, I will give §oadvice on how to mitigate and deal with exposure to it. -book.starter.page12b=Enough exposure to radiation can and will cause bodily harm. The first step is prevention; be sure to limit your exposure, and wear protective gear, such as a §lHazmat Suit§r, or apply §lCladding§r to your clothing or armor; you can also take §lRad-X§r to limit your intake. Thanks to modern medicine, the second step can be removal if necessary; for example, a §lPlayer §lDecontaminator§r will slowly reduce the radiation absorbed by your body. §lRad-Away§r can also be used as a post-exposure prophylaxis, quickly and effectively reversing damage caused to your body by ionizing radiation. -book.starter.title13=Uranium Enrichment -book.starter.page13=There are a few, easy options for fuels to use for a nuclear reactor; for instance, §lNatural Uranium§r or §lThorium Fuel§r. However, if you're looking for something more powerful, you can set up an enrichment cascade of two §lGas Centrifuges§r to produce §lUranium Fuel§r with leftover §lUranium-238§r. You will have to transmute the natural uranium into §lYellowcake§r, then §lUranium §lHexafluoride§r to do so. -book.starter.title14=The Chicago Pile -book.starter.page14=Alternatively, you can breed §lРеакторний Plutonium§r, a more powerful fuel, from Natural Uranium using the §lChicago Pile§r. By stacking graphite blocks and drilling into them, you can insert fuel rods to breed into plutonium and neutron source rods, such as §lRadium-Beryllium§r, to begin the reaction. Make sure to test your designs; spacing out or limiting the amount of blocks may be necessary to prevent overheating. -book.starter.title15=ZIRNOX GCR -book.starter.page15=Finally, you can create your first §oreal§r source of energy: the §lZIRNOX§r Nuclear Reactor. Nuclear reactors require more setup then other power sources; first, you will want to have a good source of water, such as the §lHeavy §lInfinite Water Tank§r. To remove heat from the reactor core and boil the water into steam, you will need a sufficient amount of §lCarbon Dioxide§r. You want just enough pressure, but not §otoo§r much. You will also need three steam turbines to utilize the created steam to make energy; the §lSteam §lTurbine§r or §lIndustrial Steam §lTurbine§r will be optimal. Finally, a §lCondensor§r or §lAuxilary Cooling Tower§r is needed to condense the leftover steam into water, where it can be voided or recycled in a cooling loop. -book.starter.title16=Conclusion -book.starter.page16=If you've reached this far, you're on track to helping rebuild civilization. You've successfully recreated the advanced machinery of the pre-apocalypse - with nuclear power, petrochemicals, and more. I cannot know §ohow§r you will use these new-found advantages, but it's my personal hope you use them for the good of yourself and others - or at the very least, in self-defense. Au revoir! -book.starter.title18=About the Author -book.starter.page18=vær is just a guy who has been trapped in the grey void featured in the Talking Head's §oOnce In A Lifetime§r for too long. He once found a studio door, but to his dismay found out it was a cardboard cut-out. +book.starter.title1=Вступ +book.starter.page1=Якщо ви це читаєте, дуже ймовірно, що суспільство, так чи інакше, зазнало повного краху. Уряди, країни та влада – це поняття минулого – разом із усіма зручностями цивілізованого життя. Таким чином, цей посібник розповість вам, як це змінити, відтворивши промисловість і технології минулого для покращення вашого життя. +book.starter.title2=Вугілля та іприт +book.starter.page2=Хоча неможливо передбачити фактичний стан світу в постапокаліптичний час, цілком імовірно, що війна та промисловість у їхньому нинішньому вигляді могли ще не закінчитися. Щоб захистити власні легені, ефективним та дешевим способом помочіться на §lтканину§r, щоб зробити §lтраншейну пов'язку§r, яка захистить вас від вугільного пилу або іприту, якщо ви коли-небудь зіткнетеся з ними. +book.starter.title3=Ковадла та преси +book.starter.page3=Квінтесенцією для початку вашого промислового відродження є §lковадло§r та §lтвердопаливний прес§r. Ковадло дозволить вам вручну створювати ранні механізми, такі як Збиральна машина, тоді як прес дозволить вам створювати пластини, дроти та схеми, які ви не можете зробити ковадлом. +book.starter.title4=Шаблони +book.starter.page4=Щоб штампувати метал у корисні форми, збирати машини та проводити хімічні реакції, вам потрібно створити §lПапку шаблонів машин§r для створення різних штампів та шаблонів, показаних праворуч. +book.starter.title5=Збирання сміття +book.starter.page5=Залежно від того, наскільки поганою була початкова апокаліптична подія для існуючих структур світу, існує вірогідність того, що багато корисних матеріалів і машин можна врятувати безпосередньо серед них. На вас можуть чекати: металеві сплави, такі як сталь, деталі, такі як схеми і навіть ізотопи матеріалів з атомної електростанції. Однак остерігайтеся певних руїн, оскільки там може ховатися надмірна небезпека, як змія в траві; вона чекає, щоб вразити вас радіацією, пастками чи невимовними жахами... +book.starter.title6=Ранні машини +book.starter.page6a=Дві перші машини, які вам слід зібрати, це §lДоменна піч§r та §lЗбиральна машина§r.Перша дозволить вам створювати такі сплави, як §lсталь§r, §lчервона мідь§r та §удосконалений сплав§r; вам знадобляться ці метали для корпусів машин, з'єднання схем, вдосконалених електромагнітів тощо. +book.starter.page6b=Збиральна машина використовуватиметься для створення практично будь-якої іншої машини, описаної в цьому посібнику. Вам знадобиться джерело живлення, наприклад §lДров'яна піч§r або §lБойлер сонячної вежі§r. +book.starter.page7a=§lПодрібнювач§r разом із парою лез подрібнювача буде дуже корисним для подвоєння виходу більшості руд шляхом подрібнення їх на плавильні порошки. Ці порошки також є важливими для початку створення схем для різних машин, таких як §lПокращена§r та §lРозігнана§r мікросхеми. +book.starter.page7b=Використовуючи своє нове обладнання, ви можете створити §lХімічний завод§r, який використовується для синтезу кращих схем, бетону, переробки нафтохімічних продуктів тощо. +book.starter.title8=Чорне золото +book.starter.page8a=Обстежуючи територію використовуючи §lДетектор §lнафтових§r §lродовищ§r, ви можете знайти підземні поклади нафти та встановити над ними §lВерстат-гойдалку§r або §lНафтову вежу§r. Пам’ятайте, що поклади нафти з часом вичерпуються. +book.starter.page8b=Перш ніж нафту можна буде переробити та розділити на складові частини на §lНафтопереробному заводі§r, її необхідно нагріти до 300°C у §lБойлері§r. +book.starter.title9=Нафтохімія +book.starter.page9=Використовуючи §lХімічні заводи§r, §lРектифікаційні§r §lколони§r, та §lВежі каталітичного§r §lкрекінгу§r, ви можете перетворити відокремлену нафту на різноманітні корисні продукти. Наприклад: §lПолімери§r або §lКарболіт§r, міцні та гнучкі пластмаси; §lДеш§r, надзвичайно міцний та термостійкий сплав рідкісноземельних металів; §lТверде паливо§r, яке можна спалювати для отримання енергії; або навіть §lРідке паливо§r, таке як §lГазолін§r, §lДизель§r, §lГас§r, тощо. +book.starter.title10=Передові машини +book.starter.page10=Маючи за собою обробку нафти, ви можете створити §lЦентрифугу§r, яка потроїть видобуток руди; §lРудний окислювач§r, який кристалізуватиме руди, збільшуючи вихід; та §lSILEX + §lFEL§r, – два дива сучасної інженерії, які можуть легко розділяти ізотопи матеріалів. Вам знадобиться значно більше енергії для їх живлення; яку можна отримати за допомогою таких джерел, як §lДизельний генератор§r, §lПромисловий генератор§r, або навіть ядерний реактор. +book.starter.title11=Пласт +book.starter.page11=Під землею, по якій ви ходите, є кілька природних §lПластів§r, або спеціальних мінеральних шарів та утворень. §lСланцеві пласти§r – це блакитні шари, що містять літій, заповнені ураном, залізом, міддю, азбестом та іншими рудами для вашого власного використання. §lГлибинний камінь§r містить велику кількість рідкісніших мінералів, таких як §lЦирконій§r та §lБор§r, але для належного їх видобутку потрібна вибухівка. +book.starter.title12=Радіація +book.starter.page12a=§oРешта цієї книги буде присвячена питанням, пов’язаним з §oрадіацією. Заради вашої безпеки та безпеки інших я дам §oпоради щодо того, як пом’якшити та впоратися з її впливом. +book.starter.page12b=Достатній вплив радіації може завдати шкоди тілу. Перший крок – це профілактика;обов’язково обмежте вплив на себе і носіть захисне спорядження, таке як §lЗахисний костюм§r, або встановіть §lОбшивку§r на свій одяг чи броню; ви також можете прийняти §lРад-Х§r, щоб обмежити вплив. Завдяки сучасній медицині, другим кроком може бути зняття опромінення якщо це необхідно; наприклад, §lЗнезаражувач §lгравця§r повільно зменшить радіацію, поглинену вашим організмом. §lАнтирадин§r також можна використовувати як постконтактну профілактику, швидко та ефективно усуваючи пошкодження, завдані вашому організму іонізуючим випромінюванням. +book.starter.title13=Збагачення урану +book.starter.page13=Є кілька простих варіантів палива для ядерного реактора; наприклад, §lПриродний уран§r або §lТорієве паливо§r. Однак, якщо ви шукаєте щось потужніше, ви можете створити каскад збагачення з двох §lГазових центрифуг§r для виробництва §lУранове паливо§r із залишками §lУрану-238§r. Для цього вам доведеться перетворити природний уран на §lЄлоукейк§r, а потім на §lГексафторид §lурану§r. +book.starter.title14=Чиказька дровітня +book.starter.page14=Або ж ви можете отримати §lРеакторний плутоній§r, більш потужне паливо, з природного урану за допомогою §lЧиказької дровітні§r. Складаючи графітові блоки та просвердлюючи їх, ви можете вставляти паливні стрижні для розмноження в плутоній та стрижні джерела нейтронів, такі як §lРадій-берилій§r, щоб розпочати реакцію. Обов'язково перевірте свої конструкції; може знадобитися відстань між блоками або обмеження їх кількості, щоб запобігти перегріву. +book.starter.title15=ЦИРНОКС ГГР +book.starter.page15=Нарешті, ви можете створити своє перше §oреальне§r джерело енергії: Ядерний реактор §lЦИРНОКС§r. Ядерні реактори потребують більше налаштувань, ніж інші джерела енергії; по-перше, вам потрібно мати хороше джерело води, наприклад §lНескінченний §lрезервуар води§r. Щоб відводити тепло від активної зони реактора та кип'ятити воду в пару, вам знадобиться достатня кількість §lВуглекислого газу§r. Вам потрібен достатній тиск, але не §lзанадто§r великий. Вам також знадобляться три парові турбіни, щоб використовувати створену пару для виробництва енергії; §lПарова §lтурбіна§r або §lПромислова парова §lтурбіна§r будуть оптимальними. Нарешті, §lКонденсатор пару§r або §lДопоміжна градирня§r потрібні для конденсації залишкової пари у воду, де її можна буде злити або рециркулювати в охолоджувальному контурі. +book.starter.title16=Висновок +book.starter.page16=Якщо ви зайшли так далеко, ви на шляху до відбудови цивілізації. Ви успішно відтворили передові механізми передапокаліпсису - ядерну енергетику, нафтохімію та інше. Я не знаю, §oяк§r ви скористаєтеся цими новознайденими перевагами, але я особисто сподіваюся, що ви використаєте їх для блага себе та інших — або, принаймні, для самооборони. Au revoir! +book.starter.title18=Про автора +book.starter.page18=vær – просто хлопець, який надто довго перебував у пастці сірої порожнечі, з кліпу §oOnce In A Lifetime§r гурту Talking Head. Одного разу він знайшов двері студії, але, на свій жах, виявив, що вона вирізана з картону #book.rbmk.cover=HOW 2 RBMK:$The Basics$of Reactor$Construction #book.rbmk.title1=Introduction @@ -5529,7 +5529,7 @@ tile.machine_industrial_boiler.desc=Великий бойлер, який мож tile.machine_industrial_generator.name=Industrial Generator tile.machine_intake.name=Забірник повітря tile.machine_keyforge.name=Сліл замочника -tile.machine_large_turbine.name=Парова промислова турбіна +tile.machine_large_turbine.name=Промислова парова турбіна tile.machine_large_turbine.desc=Ефективність: 100%% tile.machine_liquefactor.name=Промисловий скраплювач tile.machine_liquefactor.desc=Потужна універсальна машина для перетворення предметів на рідини.$Поставляється з універсальними каталітичними компонентами, нагрівальними елементами$та вбудованим гідратором для нафтохімічного зрідження. From cf82ea379683b4d228b0b56244462d4211d1a714 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 6 Jun 2025 14:03:52 +0200 Subject: [PATCH 152/491] facing oblivion to become the lode star --- changelog | 16 +++- .../java/com/hbm/crafting/MineralRecipes.java | 2 + .../recipes/ChemicalPlantRecipes.java | 12 ++- .../recipes/loader/GenericRecipes.java | 2 + .../java/com/hbm/items/ItemGenericPart.java | 3 +- .../com/hbm/main/ModEventHandlerClient.java | 18 ++-- .../java/com/hbm/main/ResourceManager.java | 1 + .../tileentity/RenderChemicalPlant.java | 88 +++++++++++++++++- .../world/RenderNTMSkyboxChainloader.java | 15 +-- .../TileEntityMachineChemicalPlant.java | 12 +++ src/main/resources/assets/hbm/lang/de_DE.lang | 17 ++++ src/main/resources/assets/hbm/lang/en_US.lang | 17 ++++ .../hbm/textures/items/glass_polarized.png | Bin 0 -> 332 bytes .../assets/hbm/textures/misc/star_lode.png | Bin 211 -> 224 bytes .../assets/hbm/textures/models/Poles.png | Bin 456 -> 0 bytes .../models/machines/chemical_plant.png | Bin 2343 -> 4412 bytes .../models/machines/chemical_plant_fluid.png | Bin 148 -> 495 bytes .../hbm/textures/models/vault_frame_old.png | Bin 27629 -> 0 bytes 18 files changed, 178 insertions(+), 25 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/glass_polarized.png delete mode 100644 src/main/resources/assets/hbm/textures/models/Poles.png delete mode 100644 src/main/resources/assets/hbm/textures/models/vault_frame_old.png diff --git a/changelog b/changelog index 8a24a37de..b5663ec11 100644 --- a/changelog +++ b/changelog @@ -8,6 +8,13 @@ * Reworked chemical plant * No longer needs template items for everything, comes with a convenient recipe selector GUI * Three item and three fluids for in and outputs + * Slots are locked to the ingredients they accept, allowing for better performance and shift click support + * Item IO now works like most other machines instead of using chutes + * If the center block right above the chemplant is not air, it will render with a frame, making chemplant stacking actually nice to look at + * Now has a more convenient 3x3 footprint + * Features 12 access ports, more than enough for full coverage of the entire machine's IO + * Has an optional slot for template items separate from the recipe selector (i.e. secret recipes) + * Ports are now standardized, no longer are fluids connected to ports that look like copper contacts ## Changed * The RBMK console's grid can now be rotated using a screwdriver @@ -28,10 +35,11 @@ * Water to hydrogen peroxide is now 1,000 : 1,000 (instead of 1,000 : 800) * Sulfuric acid's peroxide requirement has been adjusted accordingly * Nitric acid has an alternate recipe using air and water, however it takes 4x as long and has a base consumption of 2kHE/t - * Desh now only takes 10 seconds to produce instead of 15 + * Desh now only takes 5 seconds to produce instead of 15 * Laminate now only takes 50mB of either fluid per recipe and processes much quicker - * Ducrete now uses U238 in the form of ferrouranium, and no longer requires gravel at all + * Ducrete now uses U238 in the form of ferrouranium, decreasing U238 needed, and no longer requires gravel at all * All recipes for nuclear fuel production now have a higher base consumption + * Base consumption in general has been tweaked for many later-game recipes. Many recipes however still use the old 100HE/t rate * Cordite now uses sawdust instead of wood planks and sugar * Kevlar is now made from aromatics, nitric acid and chlorine (or phosgene in 528 mode) * Electrolysis using the chemplant has been removed. Hydrogen can be made using water and coal (or coke), and oxygen can be distilled from intake air @@ -40,6 +48,7 @@ * Glyphid meat processing is now less autistic * Making rusty steel now only takes 2 seconds per recipe * Perfluoromethyl can now also be made in the chemical plant (technically, the process isn't just simple mixing after all) + * Recipe changes are still subject to balancing * Removed niter to nitric acid liquefaction recipe ## Fixed @@ -51,4 +60,5 @@ * Fixed missing energy damage category localization * Fixed server crash caused by tool abilities * Fixed chunkloading entities not releasing their loading tickets properly -* Potentially fixed a dupe issue related to tool abilities \ No newline at end of file +* Potentially fixed a dupe issue related to tool abilities +* Fixed certain sky features not being as bright as they should be \ No newline at end of file diff --git a/src/main/java/com/hbm/crafting/MineralRecipes.java b/src/main/java/com/hbm/crafting/MineralRecipes.java index 6ab5ea10b..103292041 100644 --- a/src/main/java/com/hbm/crafting/MineralRecipes.java +++ b/src/main/java/com/hbm/crafting/MineralRecipes.java @@ -4,6 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.BlockEnums.EnumStoneType; import com.hbm.inventory.material.MaterialShapes; import com.hbm.items.ItemEnums.EnumCokeType; +import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRTGPelletDepleted.DepletedRTGMaterial; import com.hbm.items.special.ItemWasteLong; @@ -421,6 +422,7 @@ public class MineralRecipes { GameRegistry.addRecipe(new ItemStack(ModItems.egg_balefire_shard, 9), new Object[] { "#", '#', ModItems.egg_balefire }); GameRegistry.addRecipe(new ItemStack(ModItems.nitra, 1), new Object[] { "##", "##", '#', ModItems.nitra_small }); GameRegistry.addRecipe(new ItemStack(ModItems.nitra_small, 4), new Object[] { "#", '#', ModItems.nitra }); + GameRegistry.addRecipe(new ItemStack(ModBlocks.glass_polarized, 4), new Object[] { "##", "##", '#', DictFrame.fromOne(ModItems.part_generic, EnumPartType.GLASS_POLARIZED) }); add1To9Pair(ModItems.powder_paleogenite, ModItems.powder_paleogenite_tiny); add1To9Pair(ModItems.ingot_osmiridium, ModItems.nugget_osmiridium); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index b4c334826..a69596643 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -11,6 +11,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ItemEnums.EnumFuelAdditive; +import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.ModItems; import net.minecraft.init.Blocks; @@ -130,7 +131,7 @@ public class ChemicalPlantRecipes extends GenericRecipes { .outputItems(new ItemStack(ModBlocks.asphalt, 16))); /// SOLIDS /// - this.register(new GenericRecipe("chem.desh").setup(200, 100) + this.register(new GenericRecipe("chem.desh").setup(100, 100) .inputItems(new ComparableStack(ModItems.powder_desh_mix)) .inputFluids((GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleChemsitry) ? new FluidStack[] {new FluidStack(Fluids.LIGHTOIL, 200)} : @@ -160,11 +161,11 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 250, GeneralConfig.enable528 ? 2 : 0), new FluidStack(Fluids.CHLORINE, 250, GeneralConfig.enable528 ? 2 : 0)) .outputItems(new ItemStack(ModItems.ingot_pvc, 2))); - this.register(new GenericRecipe("chem.kevlar").setup(20, 300) + this.register(new GenericRecipe("chem.kevlar").setup(60, 300) .inputFluids(new FluidStack(Fluids.AROMATICS, 200), new FluidStack(Fluids.NITRIC_ACID, 100), new FluidStack(GeneralConfig.enable528 ? Fluids.PHOSGENE : Fluids.CHLORINE, 100)) .outputItems(new ItemStack(ModItems.plate_kevlar, 4))); - this.register(new GenericRecipe("chem.meth").setup(30, 300) + this.register(new GenericRecipe("chem.meth").setup(60, 300) .inputItems(new ComparableStack(Items.wheat), new ComparableStack(Items.dye, 2, 3)) .inputFluids(new FluidStack(Fluids.LUBRICANT, 400), new FluidStack(Fluids.PEROXIDE, 500)) .outputItems(new ItemStack(ModItems.chocolate, 4))); @@ -281,6 +282,11 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputItems(new OreDictStack(KEY_ANYGLASS), new OreDictStack(STEEL.bolt(), 4)) .outputItems(new ItemStack(ModBlocks.reinforced_laminate))); + this.register(new GenericRecipe("chem.polarized").setup(100, 500) + .inputFluids(new FluidStack(Fluids.PETROLEUM, 1_000)) + .inputItems(new OreDictStack(KEY_ANYPANE)) + .outputItems(DictFrame.fromOne(ModItems.part_generic, EnumPartType.GLASS_POLARIZED, 16))); + /// NUCLEAR PROCESSING /// this.register(new GenericRecipe("chem.yellowcake").setup(250, 500) .inputItems(new OreDictStack(U.billet(), 2), new OreDictStack(S.dust(), 2)) diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index eabdd1802..931f19d4f 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -88,6 +88,8 @@ public abstract class GenericRecipes extends Serializab public void writeRecipe(Object recipeObject, JsonWriter writer) throws IOException { T recipe = (T) recipeObject; + writer.name("name").value(recipe.name); + if(this.inputItemLimit() > 0 && recipe.inputItem != null) { writer.name("inputItem").beginArray(); for(AStack stack : recipe.inputItem) this.writeAStack(stack, writer); diff --git a/src/main/java/com/hbm/items/ItemGenericPart.java b/src/main/java/com/hbm/items/ItemGenericPart.java index e66ba0904..79c06cd88 100644 --- a/src/main/java/com/hbm/items/ItemGenericPart.java +++ b/src/main/java/com/hbm/items/ItemGenericPart.java @@ -14,7 +14,8 @@ public class ItemGenericPart extends ItemEnumMulti { PISTON_HYDRAULIC("piston_hydraulic"), PISTON_ELECTRIC("piston_electric"), LDE("low_density_element"), - HDE("heavy_duty_element"); + HDE("heavy_duty_element"), + GLASS_POLARIZED("glass_polarized"); private String texName; diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index a2ee8b962..4a8300535 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -1027,7 +1027,7 @@ public class ModEventHandlerClient { return null; } - public static boolean renderLodeStar = false; // GENUINELY shut the fuck up i'm not kidding + public static boolean renderLodeStar = false; public static long lastStarCheck = 0L; @SideOnly(Side.CLIENT) @@ -1064,16 +1064,16 @@ public class ModEventHandlerClient { long millis = Clock.get_ms(); if(lastStarCheck + 200 < millis) { - renderLodeStar = false; // GENUINELY shut the fuck up i'm not kidding + renderLodeStar = false; lastStarCheck = millis; - if(player != null) { // GENUINELY shut the fuck up i'm not kidding - Vec3NT pos = new Vec3NT(player.posX, player.posY, player.posZ); // GENUINELY shut the fuck up i'm not kidding - Vec3NT lodestarHeading = new Vec3NT(0, 0, -1D).rotateAroundXDeg(-15).multiply(25); // GENUINELY shut the fuck up i'm not kidding - Vec3NT nextPos = new Vec3NT(pos).add(lodestarHeading.xCoord,lodestarHeading.yCoord, lodestarHeading.zCoord); // GENUINELY shut the fuck up i'm not kidding - MovingObjectPosition mop = world.func_147447_a(pos, nextPos, false, true, false); // GENUINELY shut the fuck up i'm not kidding - if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK && world.getBlock(mop.blockX, mop.blockY, mop.blockZ) == ModBlocks.glass_polarized) { // GENUINELY shut the fuck up i'm not kidding - renderLodeStar = true; // GENUINELY shut the fuck up i'm not kidding + if(player != null) { + Vec3NT pos = new Vec3NT(player.posX, player.posY, player.posZ); + Vec3NT lodestarHeading = new Vec3NT(0, 0, -1D).rotateAroundXDeg(-15).multiply(25); + Vec3NT nextPos = new Vec3NT(pos).add(lodestarHeading.xCoord,lodestarHeading.yCoord, lodestarHeading.zCoord); + MovingObjectPosition mop = world.func_147447_a(pos, nextPos, false, true, false); + if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK && world.getBlock(mop.blockX, mop.blockY, mop.blockZ) == ModBlocks.glass_polarized) { + renderLodeStar = true; } } } diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 8e7b9f6b3..31421f61e 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -581,6 +581,7 @@ public class ResourceManager { public static final ResourceLocation chemplant_piston_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_piston_new.png"); public static final ResourceLocation chemplant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/lavabase_small.png"); public static final ResourceLocation chemical_plant_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant.png"); + public static final ResourceLocation chemical_plant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant_fluid.png"); public static final ResourceLocation chemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemfac.png"); //Mixer diff --git a/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java b/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java index 591571c57..e3273baa5 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java +++ b/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java @@ -1,11 +1,20 @@ package com.hbm.render.tileentity; +import java.awt.Color; + import org.lwjgl.opengl.GL11; +import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; +import com.hbm.util.BobMathUtil; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -15,15 +24,88 @@ import net.minecraftforge.client.IItemRenderer; public class RenderChemicalPlant extends TileEntitySpecialRenderer implements IItemRendererProvider { @Override - public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float interp) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y, z + 0.5); GL11.glRotated(90, 0, 1, 0); GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + } + + TileEntityMachineChemicalPlant chemplant = (TileEntityMachineChemicalPlant) tileEntity; + float anim = chemplant.prevAnim + (chemplant.anim - chemplant.prevAnim) * interp; + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule.recipe); bindTexture(ResourceManager.chemical_plant_tex); ResourceManager.chemical_plant.renderPart("Base"); + if(chemplant.frame) ResourceManager.chemical_plant.renderPart("Frame"); + + GL11.glPushMatrix(); + GL11.glTranslated(BobMathUtil.sps(anim * 0.125) * 0.375, 0, 0); ResourceManager.chemical_plant.renderPart("Slider"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0.5, 0, 0.5); + GL11.glRotated((anim * 15) % 360D, 0, 1, 0); + GL11.glTranslated(-0.5, 0, -0.5); + ResourceManager.chemical_plant.renderPart("Spinner"); + GL11.glPopMatrix(); + + if(chemplant.didProcess && recipe != null) { + int colors = 0; + int r = 0; + int g = 0; + int b = 0; + if(recipe.outputFluid != null) for(FluidStack stack : recipe.outputFluid) { + Color color = new Color(stack.type.getColor()); + r += color.getRed(); + g += color.getGreen(); + b += color.getBlue(); + colors++; + } + + if(colors == 0 && recipe.inputFluid != null) for(FluidStack stack : recipe.inputFluid) { + Color color = new Color(stack.type.getColor()); + r += color.getRed(); + g += color.getGreen(); + b += color.getBlue(); + colors++; + } + + if(colors > 0) { + bindTexture(ResourceManager.chemical_plant_fluid_tex); + + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glAlphaFunc(GL11.GL_GREATER, 0); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(r / 255F / colors, g / 255F / colors, b / 255F / colors, 0.5F); + GL11.glDepthMask(false); + + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glTranslated(-anim / 100F, BobMathUtil.sps(anim * 0.1) * 0.1 - 0.25, 0); + ResourceManager.chemical_plant.renderPart("Fluid"); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + + GL11.glDepthMask(true); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + GL11.glPopMatrix(); + } + } GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); @@ -48,7 +130,9 @@ public class RenderChemicalPlant extends TileEntitySpecialRenderer implements II GL11.glScaled(0.75, 0.75, 0.75); GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.chemical_plant_tex); - ResourceManager.chemical_plant.renderAll(); + ResourceManager.chemical_plant.renderPart("Base"); + ResourceManager.chemical_plant.renderPart("Slider"); + ResourceManager.chemical_plant.renderPart("Spinner"); GL11.glShadeModel(GL11.GL_FLAT); }}; } diff --git a/src/main/java/com/hbm/render/world/RenderNTMSkyboxChainloader.java b/src/main/java/com/hbm/render/world/RenderNTMSkyboxChainloader.java index 09f4eba0c..5d5b98e15 100644 --- a/src/main/java/com/hbm/render/world/RenderNTMSkyboxChainloader.java +++ b/src/main/java/com/hbm/render/world/RenderNTMSkyboxChainloader.java @@ -67,19 +67,15 @@ public class RenderNTMSkyboxChainloader extends IRenderHandler { //why an abstra GL11.glDisable(GL11.GL_FOG); OpenGlHelper.glBlendFunc(770, 1, 1, 0); - float brightness = (float) Math.sin(world.getCelestialAngle(partialTicks) * Math.PI); - brightness *= brightness; - - GL11.glColor4f(brightness, brightness, brightness, 1.0F); - - float var12 = 1F + world.rand.nextFloat() * 0.5F; + float var12 = 0.5F + world.rand.nextFloat() * 0.25F; double dist = 100D; if(ModEventHandlerClient.renderLodeStar) { GL11.glPushMatrix(); GL11.glRotatef(-75.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(10.0F, 0.0F, 1.0F, 0.0F); - FMLClientHandler.instance().getClient().renderEngine.bindTexture(lodeStar); // GENUINELY shut the fuck up i'm not kidding + GL11.glColor4f(1F, 1F, 1F, 1.0F); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(lodeStar); tessellator.startDrawingQuads(); tessellator.addVertexWithUV(-var12, dist, -var12, 0.0D, 0.0D); @@ -91,6 +87,11 @@ public class RenderNTMSkyboxChainloader extends IRenderHandler { //why an abstra GL11.glPopMatrix(); } + float brightness = (float) Math.sin(world.getCelestialAngle(partialTicks) * Math.PI); + brightness *= brightness; + + GL11.glColor4f(brightness, brightness, brightness, 1.0F); + GL11.glPushMatrix(); GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index bbd049ba7..21c07e2fc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -42,6 +42,10 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem public long power; public long maxPower = 1_000_000; public boolean didProcess = false; + + public boolean frame = false; + public int anim; + public int prevAnim; public ModuleMachineChemplant chemplantModule; public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); @@ -98,6 +102,12 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem } else { + this.prevAnim = this.anim; + if(this.didProcess) this.anim++; + + if(worldObj.getTotalWorldTime() % 40 == 0) { + frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); + } } } @@ -125,6 +135,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem for(FluidTank tank : outputTanks) tank.serialize(buf); buf.writeLong(power); buf.writeLong(maxPower); + buf.writeBoolean(didProcess); this.chemplantModule.serialize(buf); } @@ -135,6 +146,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem for(FluidTank tank : outputTanks) tank.deserialize(buf); this.power = buf.readLong(); this.maxPower = buf.readLong(); + this.didProcess = buf.readBoolean(); this.chemplantModule.deserialize(buf); } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index eb5a473d3..07e008e66 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -177,6 +177,21 @@ cannery.stirling.1=Er muss auf einem Hitzeerzeuger platziert werden, zum Beispie cannery.stirling.2=Die Hitze die maximal verwendet werden kann ist limitiert, Übergeschwindigkeit kann zu katastrophalen Fehlfunktionen führen. cannery.stirling.3=Die verbesserte Version kann wesentlich mehr Hitze aufnehmen, ohne kaputt zu werden. +chem.hydrogen=Wasserstoff +chem.hydrogencoke=Wasserstoff aus Koks +chem.oxygen=Sauerstoff +chem.xenon=Xenongas +chem.xenonoxy=Xenongas (Gekühlt) +chem.helium3=Helium-3 +chem.ethanol=Ethanol +chem.biogas=Biogas +chem.biofuel=Biodieselumesterung +chem.reoil=Wiederaufbereitetes Öl +chem.gasoline=Benzin +chem.tarsand=Bitumen aus Teersand +chem.meatprocessing=Glyphidflesch-Verarbeitung +chem.birkeland=Salpetersäure aus Luft + chem.ARSENIC=Arsenextraktion chem.ASPHALT=Asphaltherstellung chem.BAKELITE=Bakelitherstellung @@ -2770,6 +2785,7 @@ item.part_barrel_light.name=Leichter %slauf item.part_beryllium.name=Berylliumstaubkiste item.part_carbon.name=Kohlenstoffstaubkiste item.part_copper.name=Kupferstaubkiste +item.part_generic.glass_polarized.name=Polarisierte Linse item.part_generic.hde.name=Schwerlastkomponente item.part_generic.lde.name=Leichtbauteil item.part_generic.piston_electric.name=Electrischer Kolben @@ -4219,6 +4235,7 @@ tile.geiger.name=Geigerzähler tile.glass_ash.name=Ascheglas tile.glass_boron.name=Borglas tile.glass_lead.name=Bleiglas +tile.glass_polarized.name=Polarisiertes Glas tile.glass_polonium.name=Poloniumglas tile.glass_quartz.name=Quarzglas tile.glass_trinitite.name=Trinity-Glas diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d8c12c8c2..65a86647a 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -566,6 +566,21 @@ cannery.schottky.7=If any virtual particles encounter any malformed segments, al cannery.schottky.8=Note that virtual particles will never use the same Diode exit twice. Infinite loops will fail, but re-entering a Diode is otherwise fine cannery.schottky.9=Your Schottky Particle Diode should be properly enclosed, with free paths for each intersection exit +chem.hydrogen=Hydrogen +chem.hydrogencoke=Hydrogen from Coke +chem.oxygen=Oxygen +chem.xenon=Xenon Gas +chem.xenonoxy=Xenon Gas (Cooled) +chem.helium3=Helium-3 +chem.ethanol=Ethanol +chem.biogas=Biogas +chem.biofuel=Biofuel Transesterification +chem.reoil=Reclaimed Oil +chem.gasoline=Gasoline +chem.tarsand=Bitumen from Tar Sand +chem.meatprocessing=Glyphid Meat Processing +chem.birkeland=Nitric Acid from Air + chem.ARSENIC=Arsenic Extraction chem.ASPHALT=Asphalt Production chem.BAKELITE=Bakelite Production @@ -3620,6 +3635,7 @@ item.part_barrel_light.name=Light %s Barrel item.part_beryllium.name=Box of Beryllium Dust item.part_carbon.name=Box of Carbon Dust item.part_copper.name=Box of Copper Dust +item.part_generic.glass_polarized.name=Polarized Lens item.part_generic.hde.name=Heavy Duty Element item.part_generic.lde.name=Low-Density Element item.part_generic.piston_electric.name=Electric Piston @@ -5344,6 +5360,7 @@ tile.geiger.name=Geiger Counter tile.glass_ash.name=Ash Glass tile.glass_boron.name=Boron Glass tile.glass_lead.name=Lead Glass +tile.glass_polarized.name=Polarized Glass tile.glass_polonium.name=Polonium Glass tile.glass_quartz.name=Quartz Glass tile.glass_trinitite.name=Trinity Glass diff --git a/src/main/resources/assets/hbm/textures/items/glass_polarized.png b/src/main/resources/assets/hbm/textures/items/glass_polarized.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc015656246420be2ba7e347e9a3b38b7a150d1 GIT binary patch literal 332 zcmV-S0ki&zP)>A@Ujyu2R85 zv)Q;PomztPB_u=17^fQ&(~6_`Plv<#zH_+;{&b8ntudzkX~sJR0$fHjln9^M%JoO{ z-ZAhhxdmV`jd)sT0G-HMOPZ$MNMMX<9az>i07-lUz{O-T5ao{#o#ed#g0iYe=5YtT zzJCA^20qC=9*A590wqGW$x$MNflnCtBasrJI3)nOO?}9TzHbLObA`2*vaZSUHx5lh z82Buv5!>CKY?E_n8k7i1WFQz_!CK4p-TmMbx4S)MRZ*;-0ghjxAFXu@bfV&AIRbwb et##{U|2SVm-)%9yjfLg_00006^Q>YiEkIfsf<>&CNm3r|Hq1TBTyDih6t%o9N^g5GNH9n90 i5*>v>E4l}@Pd0A}YdGsZ*33%)0000o| VGs^7yY$N~x002ovPDHLkV1n7uOt%04 diff --git a/src/main/resources/assets/hbm/textures/models/Poles.png b/src/main/resources/assets/hbm/textures/models/Poles.png deleted file mode 100644 index 919c1589101f1099694e1f127d3e630119a92d99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 456 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 delta 2317 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 delta 104 zcmaFQJcV(BaUz4ar;B4qMC;p&hN27#JV!1xNjy1>3#tWK;Y@>=d#Wzp$PzjjVA8^ diff --git a/src/main/resources/assets/hbm/textures/models/vault_frame_old.png b/src/main/resources/assets/hbm/textures/models/vault_frame_old.png deleted file mode 100644 index acf06d5d73caac7cdc9a1d2992ec11b14d0e9f7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27629 zcmY(qXH*m4_dPrzp((vXKtPZpMMNa@qEw{_D560?=|U19^cuhd(t9r=#YTsOPEe#u zml^_*D$+rE$)C^n_vU$CWKHg@nYm}(Ip>~p_TCfuz(|+=63-<70OfQm$`gvC_1`tP0LrnmvjJtgLobqB!>!$Yv4FH!}{`-N3iNU8A zC%HYfEj-Oo4xT>GJ?sIu=gvq^X{5cUfSk09wCv4o0p}C|aCxS$rTNg;YQ1>{Yp3X8 zd1jJ4k?r`7<+f?Tgk5X+(vus7otrmQ9$UOzHbM&^AK5=LA3bB1xY`dW05J4-H@EXv zYx40pdG=(vnPDb~w7de|B!!6LefST#Pw)Zr)uJL4hbgAnpInU~D6zGnn%LLLO!@Jcf%%%0|;(XPCE z_Z5}~ZuWf||1@y)ipI3l`g86qEhz{1%qVj_DA;+EypJO9N9h*lNq`Dx^dXA-*ZwYC zOsWS!s6wdOtP2u?BjgN$)DOv@)n5gv|4{h=e627Yw=Vd(3E7gO6&SiX`+wI=^6zbG zm3Yzz)0_mq^P@WaI;*(<#ro`T_}npz{rM|kdQ(7XlGdoB21Hlf*U~SZ!$tsIkv#adJj`|x&x*rHnnIqE&w?YNB@Psb3yZEAVQVzKTK&C2UKR`29 z?C7Yau;J}8&%aWKSn(y)Bs()JxcUfTm=YdoxcU`^EQGShIgM1JVl^ng9s9i=L^_8U zF6%dmFE8a=ClS>h;7=b%b+%|tstIDG8YYKOuD=ReCf8E_XvU*VPS{CL`bCI35ZpZx zu1u8{BH31PGgwT2npn?&KcmH4IR<*NoK``umInBm6i+0;>V}GT0^bu(UE8`lz{1#fXE!sXH+V;M;sbL=gwL-y*1XG)vUh^ zC{fwCDNM~=<@?Zd@;5cHoJqfTmY4`lkbCsa!{O`iB?av4^%ZaO$;HW1Y-Zc|1XNhbSFj`&mmhZzb;QbJ8(3|4>s-KLFvQmNQl-v!b$EI>Se;Bg zxGf=>;pp=%kHKHzWmn>xL93&?F$-Lp`b=M;-j@xoM*oE=ryE5SE|U4rzlVIhE|`#a zFx(G6&)w(;8mNa+D@}{1%Amj>kiqOY25sG%-2~yxS1pRPoUqz!11jG4FCIr#*Q-&0 z{w2C%QvCLGX`+u|jCFOyj)XRclx;q46dE-3`z?mh#G7`GZ|M zyDv$55zrPHhv4wQ*cXayTGr=-H2dLuNkj~BiEh$1?oBmE1JMwIc(#rH&g-5zv@dn+? zW1K$5IlUcu1U+4QxjikFgUcqr0)Ar3>^P7~mNDAg-D^!H=kPCNJeyU(!)Y>(vM zR?)|}K3%9q#IPahwU>>r#PI5uL5_4@lw(2}i{&Ws%gV?_-@Q|F$Nk%6l-CPczoMVQ ze-2GtLRjxKjv-*qvwsD>TExq4R8G~f;7h+{{S%y*FVY~zYtrBQLVbYyC@{U{na^5T zLuLE4e+1(2;<GAvW#SoNv zh|{p)Z<-tmGw$tG^SmVQ+6q6nIySn7m!ACJ8b$+|Uy*AsI~m=4RSpb)$&2yY8^=tr z>1V&j7mT1F?m}#Y-#gg_Wqfs`%tGy@@4w1n|5>zpzK|%uePrx0VW9HYI&O^C+rLFN zCL-qb{?Q&k22Sn;4b*0@ItC4o%d0CM;ibsG{DcV6)YDh;8yDRl0;w7FKclBgS?Ja{ z7PAa?@Rn$*TczypMpRSYVp+vXH1Az!Q<^XRnWQ#i7>q)EJy@O1yL?y{lxm?zrkpkpnpwMi7Qy3QfZ-IjMV7j2;_a-457^k$ubxY!nT+VL}b?(5&@g!6s z^EdYf=%k5wMgO$@wgqVST$*P~HOA-8k-S<(KSdM8u+~7SHBn=LWvj|99%UmGE%zw-GA4Yf$%pO*XRg8=8+oTTPeD<3z8DZgV9!ZKgD375uD>H@NIyIa!zgXSo zdxEk*yk-mYSBBPE7@w z$Lb3VeGYABLE5@gObrc~MBMw)sxK*RYX*&ppz}z)w4S&6wa_#Kr-NEFoLUFv!&QgN zpdiovOwS)% zN7&%hzps%IUhYDeUrDQ7h^6C&Ad!m41#UuI)X?SU!+I@WKj0V|-Pu)3Oe5 zaAU>p?+DyftV)RXeI_w0zJsuzjcuJ{6T!#C(>0j=3wa&LGiV@*2npu^rjf8^PqjYX zX@}BMgQcW?Db$j-tjwfIPC8eXX}Sy25BCgn^w$r`;c(#_739;seaKo5bKtN zqJl@wiE11M>(p`-Iq^f&ZPMRN^Q!L+_0*>9jXe;y(Y*@}_xp*8{ZSEQbx|WHa+Bz{ zYI^5c%Hyptjt@|;rl)RS$75PXaovvR0R~a+ZaXGZTbDpJIH!QkADjM{v7h3+IPd~a zCa)zM66@?i}3X3S4ZB%AD5536h@PFNvIj{V(nUYR~bL#%<-^WVK z+ohNB4K6QTzkK)3_VNb*){#Y!Uq^Qic23>N{xvJLS=xeZ`@<$SB7$ooWTiJr9dd@; zz!b$U#LOKRfSj9~LVOyjZWp6aomuGYzk;UT<|1S*UUZi!_x|T<7rQ)n{ONhx4 zGPwXn^srD0+Z8$G9VUkc1IpLFvlY%ff<^Fp-lS<-k?XI ziG*yUFC+AUO$Wt5WoIa=(EH-y6Hvs2`aXcCq$IIZEjd30U z_uX2d7>N7-ULGUZZz#5r5~3_|CZ}Pi@zj1$U-ic3o4w|~T&gCiV>JD%oK5+?v91x} zgRzKT5v7WXIcSL+1mv))qCR@xOce>?#aHDZ`zQ6@cr_-(_v#9C#6I4|?zk5I3LF@( zv_krceuEwcYyLTHE!s=nT@41x{&B2hXh$rRSWIc6Q)|jk!#5#mF{im>%FeE8TeKj^gN@BTGUBB~0x?MD;62WX z=snM5HVgL(yf8D`dNB2Orr!Ml9v>NSkNq%oQ#y=lxy zVdLVB&E3=1@@upTRZ2I)68$EOtbCwCZfSzdr-gU2VXH&(tv;ZcHuBx@ke${R?mxmV zou9-%fidu8L_1zDh@w*WDNJ^XYCE&x{Zr?83eiR87f#?bQHpG|bvU?*u(c~vFkhU% za)J#;M)gGd!cqn?*iV22lT~MZK%A-^i`%#`UUl+*B>5h!&?_YKol@u~`Fxgq64kjJ zchR0SSROzJT*##DvpB2^|MF79?BsBE0DqpoZQrK*2EUqGYe4t1OU((tL4B_MX^hYC zNk}2Cg;Rhu>j1*itkM|bALtCA4n`++9mvYgJcU=ife#=rXP0HSW`40!AGtP0 z%B}F@j|q&9XRDpds4ICPwV^Eexi07H^Sc93g}m{z^IOd!2Z!h52D`M;Ax8$b!^a51 zK7_0uG;{K}ueg3wq9y>Z-Yzd6cV@=8DZCX=&hrBC{GnI7w}<5&W;B*tKFEI(6}x5? z&qc8_w&x^(>dYq7lFXq{Zenbf9_}XQEjsr5c~a+c8hJJ3tlWBFxs`lCK6e?{{QJB0 z3`gEyC7)fKc{^a4^~o~M$AAZ|Hr^Lhxzc(*PCi~GA6;~nZ+CYy(88O%3EM19Ad?fgI4_k(v;R~nx!wXWxq|AkgwyXe&}TF^k1H2Iw4^!eS4z$@P87wgTr zc|D&AKL#tYRM#FZ=8y+;{7+OqG*MsTwj+_I0?OIkxC;H#+DmExDK$Bn6as3!7S zr1jA<$EY*m6@2hhG)l2&A?E|+BNA!1HNgavEO+<1nYzldT;iA|YlUj49P^&7a1l{3 zsWR(Qq<7!#)52(8vy4?UwZ!LBp01Y;mz5Xrm^&T;EaM+PtNV&#E`thLxVPyWFo#;a z2FqGZP?N1X5UFOxwWVA;ZA@E+)-^$OycRT|Bkj319Uy>7_?;()aTqUD1m087{FxT1 zkA-LmP}(Go0YAL>Dk!HJPtLj5Ls;;l-dWL!OTQ+wh2B3{tmx0#oE~3ea39)WI?E0x zj!+(d_o1+$5eP!}&YdzkVY|i`JhNx3nnSx{1Cq9)KSBks(Gwg*9l32?0?OVqUs?U$ z6S}fAqljg~)72P;oTkMVmIgxhE%^m9T)FlAh!gh|)s~l@Vn>10>%Y16$@d^zLmOi$ z73;BUF_InfR%v2+Rks`0(;fn7@&_yO{`S#)4Dd%NkfWnVxaHRD`twRd@!1H+01g3T z>Y0s@)uVYV36d5%R{8U?wJVnB1-6jQko_e~=WxpgCyY^;^ENXTz=pCbXaDLx9CkIzbK zl=ly(CayH9UXfkC3viD|5Vu1QnLA;*kS$T@gXtFfLqo%*3CqngiL(W&!TpB)jYZ!VN8Eb`46I zWz+qMzOwsk{UrOYb$uYDVKiuUr`E}6_NJQrT;4nk|2FXynT|!rb~I zJaeh~y_>In>BbA(FH+9T0uqr_8-L;}NBk6D_(2*K^@aK-46?X#7$95EIWP$bLjJ3u z6_5rLOcS4YB_&Kqyb-7&*wWl8GN&Ph6GalK1awh8&xYlB=ebUnL#}?+7r!K+cJs*p z%{)7W9$bEOtgGedZs2s!F4f=#iuky7iGvi(d+1Gu5Aa*l>ugn-()}I7Llif!J$U-i zZc5~}_eQdgOZt8jSkrmSm?wK9+IC7_DM$a--gg(HA=2-{kQKeDU;3E7l^RfDiecGh z8Mt+(NwUU^_9eNwI{^Qhw-$0%)45Yu$x~iyu zFrp)5F1p^DgV|Rw&C2)P)C2`m2!j*lwXcYJ1jrzE<^^(3dQAY~w{#RNTFGkzn)nb? zHoT)Zx+nQ>Z}_`hO1)-;)=jS~>^IHwL4Lb;Sr(XnMFKQ0bWS)Hc-e3odb7DWw3F$=nK^Mcf$}{8Zshu8>{|?aLkB=`V2BvP8A`P^7R1F{qNn$Ec~d0vPqNf! zGX#^9p?_^nVsVjOHQ95$Gyy%cv(H9pnF|HExijuQzmm|#D?{fltA20M6O>r|c+q|^ z!7H8yT9A(H`2w*q6$RPFwk)nl1C7%9;qyEQ4x1j0y&YjpNT3k##cHgcP$xd66DT?y zr@BH$XSuapUn>P#pS5n#)@lC}KUIi5pw_#_rBL=&>*f`l0i6Ym@^{ZQ=B9!N21wy3 zCJQ0FA-&ttda<6Q;RPZl+hEA@fr500)9OB)i;}ZJgAf z9O{)DfOW=;ah5^s4n*zw)#?3I$3X_1Bzp?CESUPi&ViJS;ZvA~L(6P6$a=0+<07q1 zKRB8NrYyGD&N6q6>^;t>84t4Yc7xP)=lx!;byU7AoC5*Dt<2%;Dx=^?lKf@7G%(6G zl4r8vzV`8TeWyLG#nrxBR`IJe9at8(jb)7~Ry{*dVBj0Uak%{t#uo?9#o?C(ggYHU znI8Hl6|o8}+n*^EKJ_m3cE>5(D^A29%9(&iKnmWcS}zFXrnGy*oBt+{rjxAqF0{jw)Y#VcMwl1{`8M4xm! zS}y1s<|F<7_~e^i<=x%2r!vOZ0fxD4kWe|qU~)Y#JH?j;?}(kn9GR)MGEn4V2D6D8 z&IV1)+EMwD3#AfsABTm5l3qgkJGS6Y4fzzW6C8?1BNj9OeohK|jO!O;-A&N_tVlOb z0mfMa)h+$j_*m*T1%ewFM-p(WiSgnVW`H!qtH0LjZ(fGoyf`MH=;;WLSGRyryAo_+)y z5g-lvz#X7;tt3N4!S7br_FhYEb znv!YIpAI8T><~5>HXGo@XC3Q}+xPor+$aGN4m*?T95^m`BrIQO@my2oo0DlOU$jAw zO?Wzynxc1s<-t%wP@hOEu4~>Y=idb7WCLSmBlDY0W1bjcG&u%PxYPen&nD1HZHIV9 zs)y|!7~LXX-TxufnNh;IAbCGj{h}{G{5cj}vAZ_Q`{9P6qM>Er*!viv^twA%f{8wq zZd_nDJKn1bs#8ucCJNQBxvcV|m{TAX;*`qKZM|K*GA#cL-P7GZUN^9c-H)MzRz7P0 z@>Cv;Uv=KuHl38GQ5Z+=uGp$Of+*O=QrPimo(ge{F%^gqt@T&p%i+ad=--dJ{<_{< zgFl430xiho2%4jw4qSK!3Ty%IWHkU%{-*Q_QnYA zxC*Jt)B2MlFfdw?n83kSOjn~UfE=KBAm}Q=rAqIVXLGP9f7!;max;qy&KakfutKC_ z**y)(rS3`!RXKllgX;7BP${ycONlAg#7o%;oOI3m`X|N9`k^dCCbKpo`B{=ab~ppn z!34)t&TM_h0YQAZ0SpTC{VZ*gA#@^Qsm7A!#7&WJ7<`_)3Y=P$7S%lZmK`#2u#62! zrA9MdWS6O3YC+(HGUa|@a1RGN^PS7Tw*mtTnefLl@s7;$k6vDNy8f$eP6q&~9Dqrc zD&oHPm!+1+oi%hm8&cusJskO}pSuF)92wu2quU&)Q^MLhCLxJ;dsf`Ts0Tw(LI7dzIKzMIdJ8sI-S4eHUB~l& z!%4;FZu@T#{zi4i#^p2G*2dAGzkX()Mb0?%{)`L1gUTEU+l-yV>3@>pN+?D0Bq21* z7Pcijr}Q@u7`0G4K$-YN?f)FVXDh@sGw(@s6Hbu}6v~4i!8ESW*z8Z|#Yi~xyi}{! zcM7r{nD@2nNN^#~xv%kKYx2g=x93lig0}g|j_R#`^8?c-CH<>@!8=EtaRbr+2B1;r znu3_}o{b6EBKMD-Ljz8GE0(Gju2<)%T6=!Cw9%GDGR$U4Gyf|&FCy>bz`~VD5Fj%us0zuZ&?$ZkHv9dO4S-CG0?oVH;5%q(k7(A&UEi z=}rx{piM!B*JSb2f3fQ{YbBsoCr*4~y2B`a`IA zMFNiuRNU31jTk!OG0$`z(X7~haaGt+sQ=4xAuC`AY*n`IAb=`*rIQfN{ zkZE2ycvw(mjOMshn@au5Tk!xC;e8uqX8CsvdhyRzanZ{{ius|cxCQ%?9|(`^fC z=!{8Q`y|gYx4nAHb4PRhHmw57pTgyFTR(Q2wclYGPb|L6Ri}$xeqF~Twr6HleWqNK z=j{kG+i?m`dK>B?l?O2(b=}F6guHlWkQvNy^>XM}^Lp-{@BMx@pURTbcjO+8pN>DH zq!v!|D{Bqieyd>pm?CpU{>iUPM5=*Iu)_73{ZmGeZ^Zx+xbMrNyINM~3a`oaO!pBg zy^D#0#I35vMH6Xe92KOB~j(X+)A8x>J zU6mn9nuxilTvM|6^l`+%=rZkh%Vp}Ix;N_B0OPi|L3wL5|AaBdYx}vFhsnZhs0VjQ zhYj&P6Df=Bfgxd7CKUhUh!?jR&UG&W8S@NX%2V{4WJ9&@AhQ{ML6h0d*v94U&SKaKNV^A>EBiM63*CCBfjnE~S^)pL_Z8QZ zUyB@*ld)*TF*$+E{WyJ9A(ljcH_4Gr!_{9D!?_Q38cM?lc=gIqJdgTgmCd^4Z;-DY zz?w7;;gY0(W%#>h)o5WTVwid0rK79rMN+R48pQl4Oj04t_zTxm+Wwuer400l75=t- znAAD(x2>b(-jQA84jQwbCe)q9BghPCG6#f@>t~*EPW6ehHD7i=_3~3a%nOVeI(%E< z{0PWOw)Zr&U7R>Q@U)IPE@{DiSROO1_;A<)R2Zr&J;jw_8s)Iz_HM7{n+>^t?r~Ba zDqOaiblJO&(c||mLtL`iaE68nOI-(A-{L)#F+rHKa{fHyVo^s+o87U=jZOvAmS5$g#tqVRR|J6x)n^zV3a6|v*`3=Y?B1HE8^wEOJ@A`dm1iTEDVlH_ zM311K$UTcsa)Yvc@~mw%hP9r5d3f3I)(w{j?fxyy4|(pde=?Y$6flvY-%z(m{JQ8(5n&>{r<+@B^^bDBTR4T|8&Tvbrhm@8mxmcZ;@>X{D)p06p$wbJs0 zN1v5*WEkhmxXX2xpjp~uryh#Li18W{ZfDPJ8{83MN?X^`C}+}0!n$&zGP^&)Qf~y2 zup=@)m*35i@>h}tZN6hkd5Evu09kjginx{vX%gh^zjvs_s^OsJG=lY-D*T~|7j?gw z*YO`eSy}CJd_-@{ZNB5tS#wsYJ3BnO{x?1fR@j2uGERu2=`P~>usPX;2MsKNB6PZj zI_inqYYohR&o}p{N9q_-l;-jkX{sKtTxr)4=V{h>giPzCq3=eS@|R2Mlk8#;5~8j2 zuZXI#ss}UUD2LC@%)sRaF_XCaT4xnyQN+z^K$IdsSyda=>u?YW^RRg(98ajzh#E9} zi4!9vgEW8PU0%GO_mB+Lz{P-KQ=(V*WU01pCQ<=eVbARtp2r*5zNH2!j*e4})TM?o zEBmS7)gW8lVLTTdp@{s|{kppymo4)|q|2nXH0H8*dE)JP+@4Wy-KA?ki}xGj3uO_9 ze{a?vhS?xpiYE_*ET-!22xS?*L=j_{AnffrcPf7iFVp*`mWZd;pBDoZQ<&OOZK@F# zFR(BRX=1og?oqqe;~O8J2UXlS3%r3>G25cfymb2YGRaWsL%zam&P3azJB1?B(q<0h zMP7=-l%z&*?&Z*Pw=V%$_E9Ud6g4bmo8`e>ilE+rARd{1_rxPZDT|GpeActWGiAA8MOHL@u)!1@qI8=A9arafWh%%CYP~cU(9oxCI0Du=K$< z?KI(?wVyeF>dZFH%L#0`)D}{^id3X07)i)I7^=lgJ%iHk0#I%L;Vs|}FMaxC+hhk0 zWYz?;K{Un)1tk|^w=5gIB3G9`&zz+wloM~BP5jlVwnW7=ENZ{LlJ~QWjh|r?_EQ;8<_9Qm=NXh_0Al0ZG$QL9&6CI@1VQ21pYtFZ zOt4F$)3Y=kz}bg}LWv@^5^drBDtRs!nB(@ftc1N7 ztq;H-5@Ne=Ax-+CSbYK*u_`6Tu3J9X&8BpMY()~I$EdIuIAoR`=iECMo6NNZ!^A|3clBDvMAG6n}b8|hpNgb9u=<+t_7EY)7yG4WDf6!+HRm7_jA*QF~S(8R*g50_tWjwoA62r+nw~x~+T^7GsP~GJ%6Of(EkXpRb z;sq4k+xzA&APkfCocr6pkhWp`x5U-X!;*TiP+32E??nn1zkAx&s5I~)s7v4mwV%DR z8w+Ok)*%b1F0cM9E-A0;JxGzgI%nQbS)i?sXuQP|QG-kA&L{Q|X&g581RRH5NXzvX zP~U5~1hg&dBcbr$^!+V{N|{8Z2GK;30dZ>p8m7Pu@Y{N88D^#~*;?oRt2Wj1x4Nmv z(*604&eGA@SP|ZEMww}_rSArx>r%sGA%!C4kXC>7SusyDrVDIs3cU*jD^bAe3HXIa z0gzPAe3?!2ZMf~B?`m3oYrl@my?n2bIXBU7gdR62L=Ggw*yF?Ss@4lYOLfvJjOxbw zQu43H3vXLeUub|t%0JSD$(qRayavZ*x7?rMK8-?fLkfw!l6%AJuK_g^=@Mr=#~Sa^ zN-NyQGq#l-FA{bkB~oHKCBR>oU$oOKMS^h32j_BI3dgrtc(eprlmY|F)UhU!3s(*( zZFl#@Zsj!V*Ow+h#nb;8Fw`&W01(r^14o9!KIEBd0FA=b#1t#{_+Q9f@YOfYCNq!U zUO%+sz+B|3C%IJFF7-}gi>|AHX=`x4Qx8+)JZq&g@l&zo1cQ0*KPf7j8{#lUC#}2V(H=~(l9c0B#~|>GQpb+P z_Uf$^+Eo$6Ak_^tF;Z*kToQ7%{&pkIS>vRg_OjFtEC22Zl}!tc+zra#y_(1a+~X*B zfi0!Wq%It&s4`3F50$~=3qumd{AxoBbgo|s^#2RVvk#`(2iGF4h7UC zKNZywr@mc&M&(-?wOBHzkcZ6p>5TvN+7X&7@%LPB6;OL}Dckd@ryR%v6z@A>7}1a+ zr|O+h3;9-ecaNgq0tTrUQZIn8MVPUM{?=-A*H%*l4vg`?tNN zw^HI*>d`<9aOiMBAHruY{p1dx_JQkeO>zN6jcwnZI^NxMca@y7^X96l6w$<1zT|Ct z7F)RbCos|7vrOmBx|MNwZbbj*KN>)Yyy<9S;A-&$aXaClFEZAX%Af3;^HXt*_) zB(E}_IIQki>wyAa!1%WjuiF37%+!d3jn_P&F{NnKMV#gdD}LeR&zqh8JM;3#EfwV5 zlV^WFKPTw`R(0RU!}~S~XTeD_ZRBAtyj1wX?(D$H$`uBsa;iMs!A}i>-k6_|agg@m z{Gn^dQ9#^)wTjyAe%5>zilGo4_~THBIJxJu!_`Q2y32EOllE|QQgx9JZ~QAH*nEr3 zdv?M~xrP3UDX;x$%#!~2NzAA9~P1=7yceNj+^QoDjdH`%qlK!TL?U6 z^IoTU$^Yk`3z&B5MIP2|xhCT6Wl6`i{TK?2^)9t2n$0?C^99W7TXCovIrtaNJbB5D&o%!3pZflKHyFG5_x81$GG%ZCQIZ6StSET%*mSu9f zwiF+Dkrydk@9RaUI0FXw`~?3E#v}FVvU^isR)eGFMw; zScBFN64#nM11~EG&lC$kNyF{1ZaI$}AsG>q);x-nA*iEP13;9Czyx+f>!~wLCAUY0 z`bnpBHksDPJfNG3q06S`>lpg(Ea&a*7Z|fjDpa8fWcg-3^O#R;FLe_&uVsDGyr1@1 zuU>n7sS&+qetswzNha8E#6O=kgK1S{_4|eK_?=wEe|<9Nd-Yca{JT5w`sqj{3kIDiaJT-im5fYE`uH63BN!y@vp2B zp*ju^uPc)O@A09ahC?HK&vf~fzGs$6Bvsh^^XlRq}BMI!@~bfd1qx#jnm2ryAU%qosQueCq-^x<22VZV7sYp0i^ zNoSNtN;eYSu%cNtPqPeLrWgJ_pLKm$l?V_fZ3@dPbLMZEVH^nK*#ExHsOTE>cckcnt9?5gh%I5YMSPGX#; zOjlawupW@=A@{jvS1C5E4z9Ojr>8o-`sI*-Yg>Zm_f{watv_|wf5u?idc_c9kwfxh z0SmXOvHs~~glDGf1W##bVnTa+yvjtEr;+u5{SSk2lQHi^CittHVrcr+p3mWX#J^#k z)7mc8tRh3N0iAaP`_}wEVn`^eSOp?)t@ff-*2ExFys%5mY@=(-m;e-oFN0IY%gbWS?{a~y#ToL<`iWJy_)yF`P<^C?)-nkoYq`hYKp_hcY#3n zkG*N+wD^6$vKhB+E>=D$`~Wv&!^w}?i*Utk_f;;NiZtt)`KWFQB$Xc zBn_8)VazF{U78aPO~2EQ3Y7u1wT`kHN1+rPuW>F!=maZbJoO_&B?&G~)Eig2;S0CTBxr1ZKP9P~x%`pX}=R>Z}h}U`#h#3oFGidnvQCR08UI0qQ~+dOCWy z=rO~qFj4z|f-;%k+}eAaW8d{n8fz52QqwjKa}#0$mlrLUb(9*n6bV^!?=g^xME#P!AnumfDGn9vK0(b&-fDuuH zd66pRr?+h$u*a`MBcL{Z0}?|nW&qVo-rlMi;cpSMG~YTir<@liV~2FSFQ@AYRj?{n zXA8&cFiEXn@HyF(Gy_=v62Zh2*-}U08F!0X-KG0n!G8lfNWXow2qZ}T{Eulv|wlA?Xj+fiXtZKsi(+66~ zW@)R|1%Z2`Hc*Qul1P86w(SA?yn=hXTtf*1PE7>VRrAq;_e`Gfr`_O-)MV|uo6Hp| z@CA|QxAR+{zKx-QKQS;6d7iWy1IRk^Ya|+o&59PFJMwF(8!w@yBEMZPh*8{1`Hd!D ze3DcBM;&oa3#v0&v4}q2ZHyU%k$65z9V--6ls9Ti=^RMO!j=hFWMA-=Ns9*gu z+8HD8^qE3I_1e$xN4QmsyqZNFAcK+yRI^CR{*L-``eIeyTxQug98-Tm&z%xR?&RNK zRt&lB96Uzp?RCIXpRL)+}{2QN;CxNWh`r@AFj0o{zQxSSiCn(O)`=yVPU#+v zIDuQ8NWWH(mJ5-LN(ni}koLS(rc~V_OyLYg1j%R9{z)kTqW11tTDQmO7*$VWVpd}s45c7aYQvK#dR9>`*R@l`l ze})jCM>lNb4O&HD0RN)rrt{CrC!!=(8q*Loz5c@US$7URGi-gVEAxD?D`ow5D++K~ zuq9V9Hd=}DGq$&0=%%srasomRc>0ICnPuOcG_0#pguV8jp^x_roO=GFlHQJ`Njz^| zzo;?vur=Z8ha5hKUL3P-(%Ujyr4F4c;S?Q_61{z3oSI@w2^iDV>#zl4XT+8Bcz$we z4Bz)$<_c|8$`<#%KzlyLSmwcg*jqP+N~(?OrTGz1Sp%XmhySEDANQ9(!(gt)tnN)f zow|Hu4EdU$KD6bD;rkv@U)CKEHkm?5pT)~?ThRW<$SRGMNlrKCu`+&s)rsL=iAVAa zE0ISfDe@}XNlZW^AdNnUQR3S=>ycAE5PavGdIo_nlq&&dA&bxRpImAxgSgtf+*@n- zu(=4+-%k+>+__B{rJ(O7$hT5#5pM7GX=DitT5wPPVG_k&i=e6VCUeyOsga6V$`;9a z%rm?2V+Y%1aEG+ZCVVd~$=;wD(d+w!D*T*H>Q5aU=Csq~1$r8iqorlTLW-WLB%Dy$ zSqir2YU`R%KU74=q;w#z2@n#W6)cSF)$rLuOH`2nTHrl}aR1XRdG!zcGdsbHr=k$N zW~_pvZAG62&ou9BY^JB4q;$;(NA&(kjQ})1VN6HM8+l886|<6AnRQm0`_vYdfE^9( z)jXM?uNsbQE~lgL7ktper@PNG3-W+#b?i}CU0S0KN~BtK9R8{BP2w5G4B99q|ILBa zy;*-iCHqyL&+8BzrAqg3?`3vC4J%YE-o;?Zfb9 zBKlowR;l4li$`(+edq9*rg3BHhOf~AebTr%{nS_OCn(6EH$--uGQE`Ck99f$wI3M* z9~dSm(>+s5K;zOHmo2`In~{``b|eJk+$;JcZ(+?YHQ^xM50>IQq1d${@5J$Xn@KQJgoPK6w z_Hw&z;w9Ne=_si8BxTp@E|U@+eKjlAagxt{dUuK0*RB%OBSoY|bWc zq97H9z1IfB9~UYL1q6n+t9!=_E9fMkr^72ic6!3jDtNME+`x7-0G$*aPWtu2IO`5p zeFhk#NR1ov`Pjb%OGAvPFXzH%%CpsxwAk*%zIu2Y54Z5M-uE$)r7A`?PR_^2#XNt2 z(xGWRgckAh4>D9RcjM;ojyF^^;Hg(yMfel5F))a(?%ew!e)m?^t1;OAPgcJRY+`=O z?|G-XtFwCf*?i~04d3(akbS{ZVyENA*~ne1>gOv>p??mHNFkIE^<|f_o4}2L>Eigz z>jL+YnCS1avhhVnjfw|`!EhbXnBuFM|4^6S+VuG)74}w(hsS6+m-J51Tw8&8)G;&l z1_@wh{qL<^h$aG1R-Jo{91j?MspG*j>VAP^q6s;QdDFfOU!q_djA( z@qC+XKUnQy!xc3xlS75R;8fZ|FIKT~E-BQ)V4*$u%Kt0rJRGTf|Nnmu$1#fRaBL#0 z6plSASveHFsR%_z&cKn8bxvK||=>Hn~ZR@@1x^`y_2d{okUX7c*_CQGl; zQUR1&$cGQ!kou*1G$X0hz|C3!3^+zPMxWq-{fO>j;}^ojdQQjrJdkNBObk8~27^rx zduV@<{4g%pzZ2XSe_^_`YP|jmpHMY$ojXGzT4);;^uk9BdN)xE`IJ3gBmr*bqYU}{ zH%nYxES<3G$uT>=Gf}Sx%ec?eyBQ;>`XV_{`pi0g@$55B4LC6*(0K;OM7^-LeNlBl_Syr8rU z-DFAM^mkiE1>)XdN`7^m;(U4^wN9waB-3`Cl-SjAN7^`l)}zMTf#8c&cHEI}N4|~H zxVb>bM&H5X*-g39HEigzyyrKV1rlQ>`CNCDBe0=H2B6u{+GKo^!pozd)V|>bPgHgy zXuRATC3FN7;h*fH)(IM7g>cZ4mmnCZB&)m0n97eiI;D~SIBgwDZk8@ZoFn*rXPYXb ztD~f-hSTkkrn(Ty`sHJu#-knEFy1A&#w2QEwd=pMgUkI-FlnJ%F2X#S@7_8CMsPI5 zot$ax;w-dU^y`43b5j$yWYlHwZ;h5~a|dakpM zT~7?Yf>FErb)ish5U{p9aJBnILVl$G8oA=$EopO*GP^=)+JTkxht|Sq$1Asq_-j!T zEg$dF@8y}fwyYKZE{|H#18@aVW!H9?`RHPP4vIHM z4Omc`NyPO%BGhxI4owd?c6rjxlF_=KRHi1)y~etKa1^Vbg2NR4;@Wv` zUsa`Zd-~SkV#z??d9kqNI5r*SlWO`XMTYc(eM_Y8CJFvaB@v2~@5(@(@6S?`sgiNF zsw+70&G~6mdqlYe-Zb-QV7@Nppcf@P(B#-Ah|@Sy4-J`WETNxR2#Br)RY+Xpc_R_` zAAOG4Z-b<+7}u0FR>9a_rkAsop(8$uB!y!n0T0sMqdabbaZK#PVpWEh%CU`3#LDQ2 zsnmt%&ocrj%zWrRIcRN=+U&EpV}Xtm9oBHQ#YH@_d+6{>Q%yxkA!SWeRN{)zbjvy* z*atf_75|DeHLkaWP;B34@>PMA57=Py@tU$pROG$2}!h`%2vgivQWK242BDbPaI!Pr47A zRnw@xdiyPbQZi>%j@JI~?xUk6cAL@k6T7GF{|Yvj9hOi~m5;w}P74b;XOOr@4eG^; zu;CB3Q$3J-8(yE^ps9Tkv>~fQT9DTLHY#tr{|u1;oUl=ANLVi=;7s@V*Z%Qq07wA( z-_o3d1{9OTq0lDKpc=634P)M#fU!Z-QXG+bVzfOqg@YbwYS9ew-CSK*XW5&Yi zKeK$Z1}Ms{gDAva!BdTKx{}py^7bfNt@)CtnRnnB;5>EBFz?; znk4z|5t9&DmhSDOaP7SIU^$8XG>!Qu&ewdyu zW(Eex4!Ti7Hqr`>i0TWkDq7d)G^*`~KMfMT(>bj#x;y2?6B${)f{ktHX4l6TMd)HrcdDGD%@-GA>CXv%B9LYRJE(t3#cN zc5eI;Pe%7gzngk_YkghyI~%Q0{g?(zroFq&dFA>w-siz~XP?k^3WuF8!kphOX?)GB z%=`*$K2rQIwLB483*5VxK`pva#`=vTQ2xyUObPJFucs3s`8&?M@P$l`aj5|t2pf7U z!sl^N99cC0KQ9H5i}RVqkhu~h8zy*$5iEIyAB|}%BnoJT6AM7g*9JB^ zeAxX6RGcY6b@C2b*$Cf#1AukJ`k4`8SXr-@7Q}Sn7Vd`K%<4Og6?J>Jc~EDyY4dQB z+al?UDnkOJ4_MOQQ#zFUW+y!qvOE>8slE@G{im@zd2>3S<>(V@Ep}(?&Mkez`?u%DqA{b!ye*KwbTaxE045A2<^E2Us~cv?eWRb?{?9d?g%_?TSpwimF99F$3- zMzJFu0k+`Y^AH=B^cO#DzvD>$4$|+%#&u3eYyHia9L~jq_VEj99gU`w9hH*m^Sq{O zb%OpuYy_aks!Aoh)pM(M$qn9gBmqJ59MGUlBY=(f7kU-m-5_a<&1{m>lU$T+Se9ZN zXD{nN{3}bADm0P3`Xf;^I_Xh6WI~HHrgwj~X5ZDRg2Oamin62@t5p#Aq(#j{=BUrt z?(%F{PainEb5X5Of%7{t%u%i8G2r-K!0N94s+4cuD>=DDoGlv;^*h)%sIK{j&@zw3Q%5>8K zfScLW!Au6yKtN1N2L!rVt4bz~m8Ec0Lc z>xrnOm@~Df(>9a*d-TT%x7&fuTyzrzo;Gt1>5tpprgZt-LcjVd`c{N~8!I9g+Up@) zI6f`2b%R&_E8gJT^-SfOYhcP`N-c7=m%~qDZQ?arue8?vReJvE6FW)8G2lquq=RC< zwiJm!$01ksSv?GT7hU=1ordn5)F36K`TyKh^I3B?>kY^Yv*HC`?V{O==2$^B?tZvZ zZ5bwmFV^DX5=gJ9;L3)yV~o9Z?a2Taw+LJ9n!1!2Ify=Zv!C6g#;f{~}P zs`SrB^G~HY0^J$PfN5q+?q(ctOI9%b2%Io0Ib&>wt>xpmn3n{PMP$CsN_Jdu!_Te` z9H`!Q@aKC*+#LOKtEI4}4jC;-e@>ey`ff{EqpCpBXnAa(rmalCDtS-ii`v23HOzD>lV_nYQ_q3@EG^OYPDvS49c7#Kw zlPOiKm&x;WF81^b5;%Juoyz%A(q%QstMd;R;-~PA2;$A9wkEnJ?MK~Py&*GS4vPUN zQ>8RrMV4d3KzqRi;a}t@s%Zy7x^`wOa z447&&j46QqMVSS@E@|N~lxqle{95(uEt0U~|DF32y5F9gz_>Lzo5yCpzJa{dg`$NK zBPB;y-|uhxKICrAbWH!z#PNrgu5y^CSN$8C@&D(2Ypo+{h;T+;D1#O&vbuA{$mqq~ z+R9ZQ0jLRj5VJhSUf2Kh0%@Rtv{UIg%mLRFdTn{P(Pa&(JovTo-|aHCM^tp5%#Kd> z-%YQx5TbDU2+|g1&fkxyRT!|J;62S@OZ3rd_pFM}S{71)yt|NScf`4dgQU85c{!#f>E1o(JOfVILiKHhOa=xN-g zJZx-`tkEg&D&%O3YIT$A>REK7ntKiD)1m~|8h#HI&a#0NQ3Gf0{S=hMda%|+&PJd{ z!d&k*nd#KU(j$IeBo9c=EK)L>NZKQS0Uah?n5$cU)D_GO)`teDGnjdS=# znug}x5!Qc2?(s5y?VV&4i~PRRFPt^d`R$zQf57i_wV|n59we_MeHr*z49=+t_{SY# zk0I&Ze*5fbCO54I{Q>34QqdGL0_AMW^T5};WMCC-cJmRisKjK{2qy5?7@jff0NhD6 zWx$`@{OB9NOT7hX>04|=xOoM@Qse!r-jRU8a;zfM z>s}70sb@U`vy*G~kBQY*YQZWq&q9Es;ruy~HBf3O@Aw0B4TrA*+-|9zER)H}y>;7d zKVx+KJIKNQ${%HWuM^}rsatrC(xv;2Muc6L0bIVuLlhU2n~;b9b?tY{t3p>51bNjP zT$F~a(^@Fu9`GjEJLvs9YKLn%NAx;s$oadqCO@@u9j`$PV>4id}MKNv-m0C)65%Ri6v|1R7XJ6vEZfJY7&--ApcAKd~CvJYeWUcn^A%y zbnbq+<=%l_m=SbEPo!k_tb%7TL?aAHlT3W_-twW_VpL!9LXmxv&2Wo4J27-mm|f{9 z4z(~XzS0+A-TJeBN&DhW2*(TwP=@bt>inl$ z1d_-7xsWlDHPP@U+szwfw3ZxYDIiW4eC*tJ>nU40nZs*6w>7lu;?kmjNFGenE5n-M zxh}?BSpRtw{AWdCR8U0l9g_cBKm}zJuf80sWp4oh*`>D;Byx7rB^o9N*}BiYY-~q1 z%moxm!O(EYkF!e@8_7$|d=s93Cpvi?6l6zk354PcD(tc2Y{9kl2J`ZyHUJHulCENPweoQHh>saCLP8LfvOpYzh6 zA-G_m>@@|OO!qwMk+-GRg~!}ZU|uiT#zqGWrXiDpOmp>|TUFv^+Fm_x^#ct;cu)8+ zmDlFB(_k9GlfvW~UaDUoq01oeg!Zb_v>&LwXLA-;nzO++dM3mfKyPu&p&e$^TL=Jj zBya%YmSSWjV=TGNUqE^OxCXxeCY8(DXmu&L7hmq>?m?eg@tHN9^pK;fdQyGd>q{rt zN5uR|{>?fwOObNgdPc;GE|Yi6E3S4F`lX zL*=$J0U1}%o(4HzC<~N23sIkQyzCIHt3#0|w6s?@qJjsSjt-~gsOZfW|6EI);b9(a zI%*2CsY)gG4z$ATjsc?ZWsL8mqXwS$n+Gc-%f#jv(!F(LT;^iEL5fOHDQ0Q@d(96LLNdqq9bgYW7hK;W}B35cQ;GjaA4*adr(z?1v0zhZR3J)G9T%7pWsbY)nuYWF- zl!~^8pGfsnf(J@`(-3HF?KpPKQJPJpR$8j6?fBZ*>z z6Y$Oc^kZPKp^48^f%2+~Ee*pz#f@es;2r!B=(pj{jM3YLe)rkd-SyU8$D+2qXQGB5 z5ia~1TTzlwJq|ychbm&qWi{UT<;~`@lRg{kAF>W>H}7Xxo>Ug*SdD8L>?n5e4WifG z5_uYcmYM9`@k9P3#QA>it7-P176H+7*j=O^aiRGnAI#Cf1=&i+<*t?A^0#^tNE$I9LAb z`5NT^z0KgJJjo!hFJ&xtV)f7fU_RH!bW${YVjVxwSUX=z6XAS|cLCt3ji}+YphNP6 ziyYv_1;sh)EyUsHTc-&4_W-(fndP5R2A)m_o~jOyOCU_ioiWd2W+gB7EGHdLz;E7C zb_@P6^?(!f!tx%hUG?oB$C_*1&e*6uebB?pNwY7+21!-ghZSLQ7rbi+m-gv6uKfwR z20G4g?nn|mmvTdYv?p>FDLi>8$BDjvnM-@;8#EA-K)cehYXm8Og)c|AEQbZJmdPx! z@>GB+osH@r$zlYW-df^4SeSlbVTlSUGggx%oX#>~UbuCyD$D?CwnG8V!KZBjM~6DP z&6Lt6@@AD4>0W4M@q`3U*Pf>KVD%5i5EBq?)gRy4nV5!sUhmBupnC{uc4iNO5LcBQ z)--Xsd0%T!%3&WgFB#@qJ3(8~bpK!(=|+FY`V`#|k`4qFK*Pn-iJ4K%TK~7=uQV^s zKqdnd0LHTZC4I!;3uxgkFtDoi=MNWV+Nd;1BuD}|kB?*l`!Jz8nHm156SSbx0mvrVo1_Va9V0$|iBF1r#0Y!w6OaAo(1d)-Cnv$#mG{}y44)%&)jo;(zgpBS z92l%UzJIKs!>~La8K6s54_S?fK`1eGot+-)XOn<)=-~fqNzd2=+I^d0%4aubPaa<; z#JQ-G#QUY@?O*M)+Ny4$dLo!#8){BfO*Ty?1u(nXyJLphuck=-PVy-+*FemY_PV{Q zTuGx5>y7HAU2(x5w9ck=8{WoFJoPP|O7IrC|KxHXeOFc2H~2XTepr~H+YC|cxhIoo z{&Cajt|&AM4)AWnuQBDJ#Hp}r4^^bteN=2OD|8FU6IHwo@)|haM&--I!}wKR>3OxN z`?%lZdc5{TF@7KGHVvP6Sg?kyjNUV$!>(1jb@oNzrjF+0^pe|rFjBgZt1uP?aY$fa zB9uHuAi+_IHFqiCoiQQNLDe+W&P^tGK2NtZrP$6~HexY)MzsSfQ%xYAg#fn)@y&9=i}E;Y4n4G4_-Mq{kPdh#LHM*zz1;X5H|o4E&6A3X}6D; z>vsytz|hCc{G;4+NY(4sJ86L5Cg~?8gF~uL=sD3R6b&_#)YV-rKXVLEhP|ZtI z5%I=M*R@p=5%m4t|4zRF2)R?gW6JIGSK)R|=aM55o?rd7Z@mk~A{Arc-S-&3!9GF~ z=gvrGTdkiKq)6qdZ z(evm(+w~Xev*r1So?pMTlALGvRL6C!`OYP#c5I^#J?|-+X(JmhddA+)J7|oIbZ1t( zI{`nG;rel`$ez(%vBCQv>v1vFuv)K74VBlyq;pWis-yk^Iatx-Db5$BkwZ+nX82KP z(k7RcBk?};FVU%`>z_jR7aAr+`&uYMLVLYtXeUu!hfcafSbD2E8|O|K2oO2yEzxa} zqdRoH)1&D?4q%3Cd&K@o9~c!ISJtWlo%DjIMy5&<@y4m^D6QOBq<-7wP^Wu}EjMY8 z?eL!?6M&7_d?cb|CT>hTuGRI(G~53_Hq?VOo>`;pM05AfF%PUpmV)G`zIFpW^|8nv zSy3mSRhkL0(93kV^eVv6{#qOBGTqN35ljGoc`IMGpAOenS6t&mfSsRy_KgIhU8rq+ zI%&FXtB%ht^WLKxFexwZnUd(a%m(b6#?ytP)g1>WVKCrZS$R8_-ef`|uYj)3@ zpZ>6I<@zPPC2WNT;4`Xa@6-4d3-plL@!SdyMF{vn5b+us%I&Lyb6uuSyy~Sz3JhIA z3qEI{jy|w#5pzCfB<3aFai`KiAw~zf7NLf(=>Gsd;+j4z`ejHCT1~hwaNp*Q$)ZM( z?#p}F-dgZ*)F>WZ+?z5CyQO@as0a7JSEw%jKpOW403QTcvh)1xb9;VosppRDDb6wY z&%4rcS>vV|c$S8VFd8*%o<=5KKX;gc{*4crf!7{cXl^=8jPBT?djbMfY8${c-d1!I z+2z0&w?$p$LjsYO^iq+$N5*tgB2&sOHLYE||Jg{+WS6d^O!7GfS2$LzuGKIYu0QU; zS8}lNm}21Uv+2&3s*+xGH&9#8yd`f{#O<6o({ILWOG1}$fL2ru8t#%Y19uJf{chhc zTBqYWqJW~)b|Q?wA^-YP;~fVY6#VQ^<%ndvt6mk_uJ?zEh~DbcnJVvcup0pwFjD;G zcnv+}-taD(z51bHqCHsmSVX$IIs-kqUL~E+@7Dk7Fs)v*X|E%GWhrE1(Km0+%+ka0 zj(9*GfUI-x^#*ld!+3{`X08IxB+z&wVi&dv*&2IjOq{|k9kSL2>N;4`^Yb-+MgOC# za&^tA37a}f9g})n!^B%Qkr^ABp^B)I_5Asj8~MGPY1-;?avo3sQVS$O%NonY*bFM% zK&Fb8GPUP6b(ZGuZeaM|Qu8yLDFi$48UB;6-&BGUh+osMpDqwg0P517#^=M^Nf^m2 zAMJb=|4rvRs~y1~@t%4fdK!s$rWV1rEh2-%x>TCudzxW_;3j=Ql?t_C7!)(dxaB%s zaY(3xc!=l2!XSR|hn3U?RN;7b{rYTV^h#1P)S^0fmb)|0i8z}w;3QKiNGOrYaCKd?&dP=^?+t(6AWv%5u zrF?H~uDk)De*!W4^3;X25b za_=1p9<#HIhejJSa8cl(%d!hwV1Cw|dp-gQ+PczDGa-AkX;j>L;i745 zW_Tw&jG$BambT5U`UOZ_!MncvkyByx)Q`Uyku9Drgy2a0D&AG}n`6YC?bGhGg4$Ony)`{p`O{RMz0TRHO#UZ2a!B5eR-7Ugr$>dO2RpXop=H-~vle$8uG9Bh z{F#{dWSmMMVOa}BxLyXzzRBEo%Oy>{$vwXU2);+D6(KNJ$zN@C=NTe6i0)*@GC`~7 z0`0rr7ln5(Fj=`yIdN)ZHPvmWbRb$~?ohCC)5mF82@P@8 zy}^12>=k=D=<7*$OkR04a2F)3`QTpV?{MHudN~JhUGi3W^CL4ZDWT&rouUpb1-UmS zo*gyJQpgaa?o-*SgQiq-87qhIQ5z<=EHzt@EUU{^cb9y$Sj`42fAI5oA<}0K;47A^ z77>rDl{wuLsRnda--~bf{r9CY+Xqf^CengfmfsCCThyVgWV{!#z8~T-Pmih&eUORR zdH*fj9QEq;|1ZZ8qQxJkWM#v*dHl!H!-lGjyNb6JN>?ye4B%Dcv3S<>==eUVVgoxH z?|cOKYgefLVE>KyF{|>*SnWr5X9ThDX@GsflCJeaU$vF|Ll9{DJ5&*)=Ag(&+xAVN zx83-^3$VApIGo1#{cr%yEA|Q(64TD zg<~3ThB4pLzD#%4V`$d`vk|81mWR4Cp6>nuzr4AlsgKlQ>kX3(lvve#@Z-<9|ttE~NHlm_s&yA#(v z6jp0kW@U4YPkg8{oG2b5pvT)x|A!ZXGf+aEOay#zlnhm{sH(60i5f|!tx27{(K=)z zExzDwL;K1rTU=I!Ji1mB`jM;W_4}WAiqjnlD1LsS?oY(QFe4uZxk%+C$KMO>8;wg) z4vw}!F63Rbi~1nFkIZ_m59c^&A7wr5>X`YQ@@YJRl-z0n?K9KN$jEr``$3%k`8T?( zQv?Bd^s9aJKTBWa0XDoclSsHh&liLaCbuoGy-r8d90(T_r7;cbHrVMM;f7Oghka1z zISqc(#aI~^jaq+QX5D4&g-@sFFSwJ}*}akWB%}8J1f$kX-Z~>S5E8vpT#op@?%wmc z#t6?LN-6uR=r&Ctp9ryLSZ8J`KN5U6%Lx=(oD8NA&sHtjT}5g4ac_`Le8l(!PCvfS zP(vf6a_mygXc@89yja#99Nq{S0`1P*{sXhA#mu&_; zvkvoEvIU!CAr*5{O?GqS~;`50g@uUzbvBP3PWS8~6ffLA#Y^m;kC#_oE@ z9a7U~JCgEMGwXg=ZY+u*M0fbRGB=%)PcX}@Gt z?8L>ZbonaZnCG2cEES6alE_l3Y1fH=ltVJ0YV3qfmn(DlL@83q{KsHK&$ZI=j=U`D ze&V>uL`p|_Jk-y4dm4KRnX5TP7Z2#t_F3KlmNgMG#%*^-=ks(%GF9iitR3V4oIeyY zJ~0uzdJ@MM^zN5^5UjrXwJ#2Qp5kJ81(X(*4XnL8W8g>YJ`uYcLX$d*E#T2Yzub^R z?^fX7e)-R&qpX0(j{ycl3fahjJ%16sS!yS_^h}x{e};RN%Ee)ozOxumkOHTma*{X8I+!9m4(}6VHeX From e9888a8634fbac66669546c385a59676a3ca03b6 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 7 Jun 2025 00:26:59 +0300 Subject: [PATCH 153/491] More NBT consistency Normalize empty NBT to null NBT. Fixes stackability for empty inventories, as usual. --- .../java/com/hbm/items/ItemInventory.java | 69 ++++++++++--------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/hbm/items/ItemInventory.java b/src/main/java/com/hbm/items/ItemInventory.java index dd897a66e..7c1aa0c47 100644 --- a/src/main/java/com/hbm/items/ItemInventory.java +++ b/src/main/java/com/hbm/items/ItemInventory.java @@ -38,49 +38,52 @@ public abstract class ItemInventory implements IInventory { } public NBTTagCompound checkNBT(NBTTagCompound nbt) { - if(nbt != null && !nbt.hasNoTags()) { - Random random = new Random(); + + if(nbt == null || nbt.hasNoTags()) + return null; - try { - byte[] abyte = CompressedStreamTools.compress(nbt); + Random random = new Random(); - if (abyte.length > 6000) { - player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); - for (int i1 = 0; i1 < this.getSizeInventory(); ++i1) { - ItemStack itemstack = this.getStackInSlot(i1); + try { + byte[] abyte = CompressedStreamTools.compress(nbt); - if (itemstack != null) { - float f = random.nextFloat() * 0.8F + 0.1F; - float f1 = random.nextFloat() * 0.8F + 0.1F; - float f2 = random.nextFloat() * 0.8F + 0.1F; + if (abyte.length > 6000) { + player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); + for (int i1 = 0; i1 < this.getSizeInventory(); ++i1) { + ItemStack itemstack = this.getStackInSlot(i1); - while (itemstack.stackSize > 0) { - int j1 = random.nextInt(21) + 10; + if (itemstack != null) { + float f = random.nextFloat() * 0.8F + 0.1F; + float f1 = random.nextFloat() * 0.8F + 0.1F; + float f2 = random.nextFloat() * 0.8F + 0.1F; - if (j1 > itemstack.stackSize) { - j1 = itemstack.stackSize; - } + while (itemstack.stackSize > 0) { + int j1 = random.nextInt(21) + 10; - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(player.worldObj, player.posX + f, player.posY + f1, player.posZ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - - if (itemstack.hasTagCompound()) { - entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); - } - - float f3 = 0.05F; - entityitem.motionX = (float) random.nextGaussian() * f3 + player.motionX; - entityitem.motionY = (float) random.nextGaussian() * f3 + 0.2F + player.motionY; - entityitem.motionZ = (float) random.nextGaussian() * f3 + player.motionZ; - player.worldObj.spawnEntityInWorld(entityitem); + if (j1 > itemstack.stackSize) { + j1 = itemstack.stackSize; } + + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(player.worldObj, player.posX + f, player.posY + f1, player.posZ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + + if (itemstack.hasTagCompound()) { + entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + } + + float f3 = 0.05F; + entityitem.motionX = (float) random.nextGaussian() * f3 + player.motionX; + entityitem.motionY = (float) random.nextGaussian() * f3 + 0.2F + player.motionY; + entityitem.motionZ = (float) random.nextGaussian() * f3 + player.motionZ; + player.worldObj.spawnEntityInWorld(entityitem); } } - - return new NBTTagCompound(); // Reset. } - } catch (IOException ignored) {} - } + + return null; // Reset. + } + } catch (IOException ignored) {} + return nbt; } From c8ad3814186f2b245d3f6e71d52b494604de8071 Mon Sep 17 00:00:00 2001 From: BakedPotato <90150681+bpotato198@users.noreply.github.com> Date: Sat, 7 Jun 2025 18:24:48 +0200 Subject: [PATCH 154/491] PL localisation --- src/main/resources/assets/hbm/lang/pl_PL.lang | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index 3e5e63745..dbb4a3568 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -1991,8 +1991,8 @@ item.canned_beef.name=Canned Beef item.canned_beef.desc=A few centuries ago, a cow died for this. item.canned_bhole.name=Canned Black Hole item.canned_bhole.desc=Singularity is yum yum in my tum tum! -item.canned_cheese.name=Canned Melted Cheese -item.canned_cheese.desc=Is it cheese? Is it rubber cement? Who knows, who cares. +item.canned_cheese.name=Topiony Ser w Puszce +item.canned_cheese.desc=Czy to ser? Czy gumowy cement? Kto wie, kogo to obchodzi. item.canned_chinese.name=Canned Chinese Food item.canned_chinese.desc=In China, Chinese food is just called food. item.canned_diesel.name=Canned Diesel @@ -2011,8 +2011,8 @@ item.canned_leftovers.name=Leftover Conserve item.canned_leftovers.desc=ur 2 slow item.canned_milk.name=Canned Evaporated Milk item.canned_milk.desc=Milk 2: More solid than ever before! -item.canned_mystery.name=Canned Mystery Meat -item.canned_mystery.desc=What's inside? Only one way to find out! +item.canned_mystery.name=Tajemnicze mięso w puszcze +item.canned_mystery.desc=Co jest w środku? Jest tylko jeden sposób, aby sie dowiedzieć! item.canned_napalm.name=Canned Napalm item.canned_napalm.desc=I love the smell of old memes in the morning! item.canned_oil.name=Canned Engine Oil @@ -2031,8 +2031,8 @@ item.canned_tomato.name=Canned Tomato Soup item.canned_tomato.desc=Who wants some thick red paste? item.canned_tube.name=Astronaut Food Tube item.canned_tube.desc=Tasty mush. -item.canned_tuna.name=Canned Tuna -item.canned_tuna.desc=I can't tell if that's actually tuna or dried cement. +item.canned_tuna.name=Tuńczyk w puszce +item.canned_tuna.desc=Nie wiem, czy to tuńczyk, czy wysuszony cement. item.canned_yogurt.name=Canned Yogurt item.canned_yogurt.desc=Probably spoiled, but whatever. item.canteen_13.name=Vault 13 Canteen @@ -4012,21 +4012,21 @@ item.steel_boots.name=Steel Boots item.steel_helmet.name=Steel Helmet item.steel_hoe.name=Steel Hoe item.steel_legs.name=Steel Leggings -item.steel_pickaxe.name=Steel Pickaxe -item.steel_plate.name=Steel Chestplate +item.steel_pickaxe.name=Stalowy Kilof +item.steel_plate.name=Stalowy Napierśnik item.steel_shovel.name=Steel Shovel -item.steel_sword.name=Steel Sword +item.steel_sword.name=Stalowy Miecz item.stick_c4.name=Stick of C-4 item.stick_dynamite.name=Stick of Dynamite item.stick_dynamite_fishing.name=Stick of Fishing Dynamite item.stick_semtex.name=Stick of Semtex item.stick_tnt.name=Stick of TNT item.stopsign.name=Stop Sign Battle Axe -item.sulfur.name=Sulfur +item.sulfur.name=Siarka item.survey_scanner.name=Survey Scanner item.syringe_antidote.name=Antidote -item.syringe_awesome.name=AWESOME -item.syringe_empty.name=Empty Syringe +item.syringe_awesome.name=ZNAKOMITY +item.syringe_empty.name=Pusta Strzykawka item.syringe_metal_empty.name=Metal Syringe item.syringe_metal_medx.name=Med-X item.syringe_metal_psycho.name=Psycho @@ -5337,7 +5337,7 @@ tile.watz_pump.name=Watz Pressure Pump tile.yellow_barrel.name=Radioactive Barrel tile.zirnox_destroyed.name=Destroyed ZINROX -trait.asbestos=Asbestos +trait.asbestos=Azbestos trait.blinding=Blinding trait.coal=Coal Dust trait.digamma=Digamma Radiation @@ -5441,4 +5441,4 @@ weapon.elecGun.glass_cannon.ir=Infrared weapon.elecGun.glass_cannon.visible=Visible Light weapon.elecGun.glass_cannon.uv=Ultraviolet Light weapon.elecGun.glass_cannon.xray=X-rays -weapon.elecGun.glass_cannon.gamma=Gamma rays \ No newline at end of file +weapon.elecGun.glass_cannon.gamma=Gamma rays From 947ba198cc5312f6e24e78f75845d4ab38a0b175 Mon Sep 17 00:00:00 2001 From: BakedPotato <90150681+bpotato198@users.noreply.github.com> Date: Sat, 7 Jun 2025 18:46:31 +0200 Subject: [PATCH 155/491] Update pl_PL.lang --- src/main/resources/assets/hbm/lang/pl_PL.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index dbb4a3568..ab2877189 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -2012,7 +2012,7 @@ item.canned_leftovers.desc=ur 2 slow item.canned_milk.name=Canned Evaporated Milk item.canned_milk.desc=Milk 2: More solid than ever before! item.canned_mystery.name=Tajemnicze mięso w puszcze -item.canned_mystery.desc=Co jest w środku? Jest tylko jeden sposób, aby sie dowiedzieć! +item.canned_mystery.desc=Co jest w środku? Jest tylko jeden sposób, aby się dowiedzieć! item.canned_napalm.name=Canned Napalm item.canned_napalm.desc=I love the smell of old memes in the morning! item.canned_oil.name=Canned Engine Oil From d185a5ea227b379e7f3e570a7a6d10ef5fe28e6c Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 29 May 2025 23:02:26 +0300 Subject: [PATCH 156/491] Turn down mass storage sfx volume --- .../hbm/tileentity/machine/storage/TileEntityMassStorage.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index 0618a1643..8d939f523 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -170,12 +170,12 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa @Override public void openInventory() { - this.worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:block.storageOpen", 1.0F, 1.0F); + this.worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:block.storageOpen", 0.5F, 1.0F); } @Override public void closeInventory() { - this.worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:block.storageClose", 1.0F, 1.0F); + this.worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:block.storageClose", 0.5F, 1.0F); } @Override From 57eba8e6ec54ca06a9a130af3fbd1b58b1c55c84 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 9 Jun 2025 23:45:41 +0300 Subject: [PATCH 157/491] Fix scroll direction Apparently, I forgot to cherry-pick the commit where I'd inverted it --- .../java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java index 398f4e1fb..134b83c75 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java @@ -215,11 +215,11 @@ public class GUIScreenTemplateFolder extends GuiScreen { if(Mouse.getEventButton() == -1) { int scroll = Mouse.getEventDWheel(); - if(scroll < 0) { + if(scroll > 0) { if(currentPage > 0) currentPage--; updateButtons(); - } else if(scroll > 0) { + } else if(scroll < 0) { if(currentPage < getPageCount()) currentPage++; updateButtons(); From 060c259fa994562d27aee7b551b35d441df780fc Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 9 Jun 2025 22:49:23 +0200 Subject: [PATCH 158/491] bals --- changelog | 21 +- gradle.properties | 2 +- .../nei/ChemicalPlantRecipeHandler.java | 16 + .../inventory/recipes/AssemblerRecipes.java | 1 + .../recipes/ChemicalPlantRecipes.java | 22 + .../recipes/loader/GenericRecipes.java | 8 + .../java/com/hbm/items/armor/ArmorFSB.java | 60 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/ModEventHandler.java | 1 - src/main/java/com/hbm/main/NEIRegistry.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 +- .../hbm/render/item/ItemRenderLibrary.java | 11 - .../tileentity/RenderChemicalPlant.java | 5 +- .../hbm/render/tileentity/RenderNukeN2.java | 72 +- .../machine/TileEntityMachineAutosaw.java | 1 - .../TileEntityMachineChemicalPlant.java | 4 +- src/main/java/com/hbm/util/InventoryUtil.java | 5 + src/main/java/com/hbm/util/ShadyUtil.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../resources/assets/hbm/models/bombs/n2.obj | 1850 +++++++++++------ .../hbm/models/machines/chemical_plant.obj | 152 +- .../assets/hbm/textures/models/bombs/n2.png | Bin 4160 -> 8612 bytes .../models/machines/chemical_plant.png | Bin 4412 -> 4283 bytes 24 files changed, 1462 insertions(+), 780 deletions(-) create mode 100644 src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java diff --git a/changelog b/changelog index b5663ec11..de14d2348 100644 --- a/changelog +++ b/changelog @@ -13,10 +13,12 @@ * If the center block right above the chemplant is not air, it will render with a frame, making chemplant stacking actually nice to look at * Now has a more convenient 3x3 footprint * Features 12 access ports, more than enough for full coverage of the entire machine's IO - * Has an optional slot for template items separate from the recipe selector (i.e. secret recipes) + * Has an optional slot for template items separate from the recipe selector (i.e. secret recipes) (doesn't work yet since we don't have secret recipe :P) * Ports are now standardized, no longer are fluids connected to ports that look like copper contacts + * Can't use upgrades just yet ## Changed +* Added Ukrainian localization * The RBMK console's grid can now be rotated using a screwdriver * Tool abilities have changed * Right-clicking while holding ALT now opens a configuration window @@ -50,6 +52,19 @@ * Perfluoromethyl can now also be made in the chemical plant (technically, the process isn't just simple mixing after all) * Recipe changes are still subject to balancing * Removed niter to nitric acid liquefaction recipe +* Updated N2 model + * Glow in the dark paint not included (yet) +* Wooden scaffolds now have a slightly smaller hitbox and are climbable +* Hanging chains and vines can now be climbed by holding space +* Hopefully fixed the strand caster being weird for good +* Removed angry metal drop from meteorites (use the assembler recipe) +* The automatic buzzsaw can now handle crops +* The automatic buzzsaw will no longer clip through walls when extending +* The automatic buzzsaw can be turned off using a screwdriver +* Template folders now support page turning via scrolling +* Named crates will now show their names in the GUI as well as as a tooltip +* Vanilla anvils no longer increase experience costs when renaming an item +* Fans now have diminishing force, old behavior can be restored with the hand drill ## Fixed * Conveyor ejectors should now correctly place items onto the back of splitters instead of on the output belts @@ -61,4 +76,6 @@ * Fixed server crash caused by tool abilities * Fixed chunkloading entities not releasing their loading tickets properly * Potentially fixed a dupe issue related to tool abilities -* Fixed certain sky features not being as bright as they should be \ No newline at end of file +* Fixed certain sky features not being as bright as they should be +* Fixed detailed hitboxes behaving weird +* Fixed issue where empty crates would retain irrelevant NBT data, rendering them unstackable with freshly crafted crates diff --git a/gradle.properties b/gradle.properties index d13d533f6..e276ed3a5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5336 +mod_build_number=5356 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java b/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java new file mode 100644 index 000000000..47d77945b --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java @@ -0,0 +1,16 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; + +public class ChemicalPlantRecipeHandler extends NEIUniversalHandler { //TODO: make a new universal handler + + public ChemicalPlantRecipeHandler() { + super(ModBlocks.machine_chemical_plant.getLocalizedName(), ModBlocks.machine_chemical_plant, ChemicalPlantRecipes.getRecipes()); + } + + @Override + public String getKey() { + return "ntmChemicalPlant"; + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index b66a700c7..99dbd7251 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -140,6 +140,7 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModBlocks.machine_refinery, 1), new AStack[] {!exp ? new OreDictStack(STEEL.plateWelded(), 3) : new OreDictStack(STEEL.heavyComp(), 1), new OreDictStack(CU.plate528(), 16), new OreDictStack(STEEL.shell(), 6), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG) },350); makeRecipe(new ComparableStack(ModBlocks.machine_epress, 1), new AStack[] {new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC) }, 100); makeRecipe(new ComparableStack(ModBlocks.machine_chemplant, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 12), new OreDictStack(CU.plate528(), 6), new ComparableStack(ModItems.tank_steel, 4), new ComparableStack(ModItems.coil_tungsten, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG), new ComparableStack(ModItems.plate_polymer, 8), },200); + makeRecipe(new ComparableStack(ModBlocks.machine_chemical_plant, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG) }, 200); makeRecipe(new ComparableStack(ModBlocks.machine_crystallizer, 1), new AStack[] {new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(TI.shell(), 3), new OreDictStack(DESH.ingot(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC), },200); makeRecipe(new ComparableStack(ModBlocks.machine_fluidtank, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new OreDictStack(STEEL.plate528(), 6), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_TAR.any(), 4), },150); makeRecipe(new ComparableStack(ModBlocks.machine_bat9000, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16), },150); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index a69596643..44cbd5ad4 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -2,9 +2,14 @@ package com.hbm.inventory.recipes; import static com.hbm.inventory.OreDictManager.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.fluid.Fluids; @@ -13,6 +18,7 @@ import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ItemEnums.EnumFuelAdditive; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemFluidIcon; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -345,4 +351,20 @@ public class ChemicalPlantRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.DEATH, 1_000, 0))); } + + public static HashMap getRecipes() { + HashMap recipes = new HashMap(); + + for(GenericRecipe recipe : INSTANCE.recipeOrderedList) { + List input = new ArrayList(); + if(recipe.inputItem != null) for(AStack stack : recipe.inputItem) input.add(stack); + if(recipe.inputFluid != null) for(FluidStack stack : recipe.inputFluid) input.add(ItemFluidIcon.make(stack)); + List output = new ArrayList(); + if(recipe.outputItem != null) for(IOutput stack : recipe.outputItem) output.add(stack.getAllPossibilities()); + if(recipe.outputFluid != null) for(FluidStack stack : recipe.outputFluid) output.add(ItemFluidIcon.make(stack)); + recipes.put(input.toArray(), output.toArray()); + } + + return recipes; + } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 931f19d4f..027bb8bb3 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -163,6 +163,7 @@ public abstract class GenericRecipes extends Serializab public ItemStack collapse(); /** Returns an itemstack only if possibleMultiOutput is false, null otherwise */ public ItemStack getSingle(); + public ItemStack[] getAllPossibilities(); public void serialize(JsonWriter writer) throws IOException; public void deserialize(JsonArray array); public String[] getLabel(); @@ -194,6 +195,7 @@ public abstract class GenericRecipes extends Serializab @Override public ItemStack getSingle() { return this.stack; } @Override public boolean possibleMultiOutput() { return false; } + @Override public ItemStack[] getAllPossibilities() { return new ItemStack[] {getSingle()}; } @Override public void serialize(JsonWriter writer) throws IOException { @@ -243,6 +245,12 @@ public abstract class GenericRecipes extends Serializab @Override public boolean possibleMultiOutput() { return pool.size() > 1; } @Override public ItemStack getSingle() { return possibleMultiOutput() ? null : pool.get(0).getSingle(); } + @Override public ItemStack[] getAllPossibilities() { + ItemStack[] outputs = new ItemStack[pool.size()]; + for(int i = 0; i < outputs.length; i++) outputs[i] = pool.get(i).getAllPossibilities()[0]; + return outputs; + } + @Override public void serialize(JsonWriter writer) throws IOException { writer.beginArray(); diff --git a/src/main/java/com/hbm/items/armor/ArmorFSB.java b/src/main/java/com/hbm/items/armor/ArmorFSB.java index d87dc2e2f..2253f207c 100644 --- a/src/main/java/com/hbm/items/armor/ArmorFSB.java +++ b/src/main/java/com/hbm/items/armor/ArmorFSB.java @@ -12,6 +12,7 @@ import com.hbm.extprop.HbmLivingProps; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.items.ModItems; import com.hbm.util.ContaminationUtil; +import com.hbm.util.ShadyUtil; import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.gameevent.TickEvent; @@ -239,45 +240,56 @@ public class ArmorFSB extends ItemArmor implements IArmorDisableModel { public void handleTick(TickEvent.PlayerTickEvent event) { EntityPlayer player = event.player; + boolean step = true; + + if(player.getUniqueID().equals(ShadyUtil.the_NCR) || player.getUniqueID().equals(ShadyUtil.Barnaby99_x)) { + step = false; + + if(player.worldObj.isRemote && player.onGround) { + steppy(player, "hbm:step.powered"); + } + } if(ArmorFSB.hasFSBArmor(player)) { ItemStack plate = player.inventory.armorInventory[2]; - ArmorFSB chestplate = (ArmorFSB) plate.getItem(); if(!chestplate.effects.isEmpty()) { - for(PotionEffect i : chestplate.effects) { player.addPotionEffect(new PotionEffect(i.getPotionID(), i.getDuration(), i.getAmplifier(), true)); } } - if(chestplate.step != null && player.worldObj.isRemote && player.onGround) { - - try { - Field nextStepDistance = ReflectionHelper.findField(Entity.class, "nextStepDistance", "field_70150_b"); - Field distanceWalkedOnStepModified = ReflectionHelper.findField(Entity.class, "distanceWalkedOnStepModified", "field_82151_R"); - - if(player.getEntityData().getFloat("hfr_nextStepDistance") == 0) { - player.getEntityData().setFloat("hfr_nextStepDistance", nextStepDistance.getFloat(player)); - } - - int px = MathHelper.floor_double(player.posX); - int py = MathHelper.floor_double(player.posY - 0.2D - (double) player.yOffset); - int pz = MathHelper.floor_double(player.posZ); - Block block = player.worldObj.getBlock(px, py, pz); - - if(block.getMaterial() != Material.air && player.getEntityData().getFloat("hfr_nextStepDistance") <= distanceWalkedOnStepModified.getFloat(player)) - player.playSound(chestplate.step, 1.0F, 1.0F); - - player.getEntityData().setFloat("hfr_nextStepDistance", nextStepDistance.getFloat(player)); - - } catch(Exception x) { - } + if(step == true && chestplate.step != null && player.worldObj.isRemote && player.onGround) { + steppy(player, chestplate.step); } } } + + public static void steppy(EntityPlayer player, String sound) { + + try { + Field nextStepDistance = ReflectionHelper.findField(Entity.class, "nextStepDistance", "field_70150_b"); + Field distanceWalkedOnStepModified = ReflectionHelper.findField(Entity.class, "distanceWalkedOnStepModified", "field_82151_R"); + + if(player.getEntityData().getFloat("hfr_nextStepDistance") == 0) { + player.getEntityData().setFloat("hfr_nextStepDistance", nextStepDistance.getFloat(player)); + } + + int px = MathHelper.floor_double(player.posX); + int py = MathHelper.floor_double(player.posY - 0.2D - (double) player.yOffset); + int pz = MathHelper.floor_double(player.posZ); + Block block = player.worldObj.getBlock(px, py, pz); + + if(block.getMaterial() != Material.air && player.getEntityData().getFloat("hfr_nextStepDistance") <= distanceWalkedOnStepModified.getFloat(player)) + player.playSound(sound, 1.0F, 1.0F); + + player.getEntityData().setFloat("hfr_nextStepDistance", nextStepDistance.getFloat(player)); + + } catch(Exception x) { + } + } public void handleJump(EntityPlayer player) { diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index b7169b68e..9a96ec0ac 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5336)"; + public static final String VERSION = "1.0.27 BETA (5356)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 29682d1b8..cd368b165 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -98,7 +98,6 @@ import net.minecraft.util.*; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.CommandEvent; import net.minecraftforge.event.ServerChatEvent; import net.minecraftforge.event.entity.EntityEvent; diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index a7f6b916b..0ba8b15b4 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -32,6 +32,7 @@ public class NEIRegistry { handlers.add(new ReformingHandler()); handlers.add(new HydrotreatingHandler()); handlers.add(new ChemplantRecipeHandler()); + handlers.add(new ChemicalPlantRecipeHandler()); handlers.add(new OreSlopperHandler()); //before acidizing handlers.add(new CrystallizerRecipeHandler()); handlers.add(new BookRecipeHandler()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 31421f61e..2547277ca 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -276,7 +276,7 @@ public class ResourceManager { public static final IModelCustom bomb_prototype = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/Prototype.obj")).asVBO(); public static final IModelCustom bomb_fleija = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/fleija.obj")).asVBO(); public static final IModelCustom bomb_solinium = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/ufp.obj")).asVBO(); - public static final IModelCustom n2 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/bombs/n2.obj")); + public static final IModelCustom n2 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/n2.obj")).asVBO(); public static final IModelCustom bomb_multi = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/BombGeneric.obj")); public static final IModelCustom fstbmb = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/fstbmb.obj")).asVBO(); public static final IModelCustom dud_balefire = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/dud_balefire.obj")).asVBO(); diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index b61f4ddcd..d29b175d5 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -362,17 +362,6 @@ public class ItemRenderLibrary { ResourceManager.bomb_boy.renderAll(); }}); - renderers.put(Item.getItemFromBlock(ModBlocks.nuke_n2), new ItemRenderBase() { - public void renderInventory() { - GL11.glTranslated(0, -4, 0); - GL11.glScaled(3, 3, 3); - } - public void renderCommon() { - GL11.glRotated(90, 0, 1, 0); - bindTexture(ResourceManager.n2_tex); - ResourceManager.n2.renderAll(); - }}); - renderers.put(Item.getItemFromBlock(ModBlocks.nuke_fstbmb), new ItemRenderBase() { public void renderInventory() { GL11.glScaled(2.25, 2.25, 2.25); diff --git a/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java b/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java index e3273baa5..bd7657a69 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java +++ b/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java @@ -122,8 +122,8 @@ public class RenderChemicalPlant extends TileEntitySpecialRenderer implements II return new ItemRenderBase() { public void renderInventory() { - GL11.glTranslated(0, -2, 0); - GL11.glScaled(3.5, 3.5, 3.5); + GL11.glTranslated(0, -2.75, 0); + GL11.glScaled(4.5, 4.5, 4.5); } public void renderCommonWithStack(ItemStack item) { GL11.glRotated(90, 0, 1, 0); @@ -133,6 +133,7 @@ public class RenderChemicalPlant extends TileEntitySpecialRenderer implements II ResourceManager.chemical_plant.renderPart("Base"); ResourceManager.chemical_plant.renderPart("Slider"); ResourceManager.chemical_plant.renderPart("Spinner"); + ResourceManager.chemical_plant.renderPart("Frame"); GL11.glShadeModel(GL11.GL_FLAT); }}; } diff --git a/src/main/java/com/hbm/render/tileentity/RenderNukeN2.java b/src/main/java/com/hbm/render/tileentity/RenderNukeN2.java index 9f0c1f293..1b1a19975 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderNukeN2.java +++ b/src/main/java/com/hbm/render/tileentity/RenderNukeN2.java @@ -2,40 +2,58 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; +import com.hbm.blocks.ModBlocks; import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; -public class RenderNukeN2 extends TileEntitySpecialRenderer { +public class RenderNukeN2 extends TileEntitySpecialRenderer implements IItemRendererProvider { - @Override - public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) - { - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5D, y, z + 0.5D); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - - GL11.glRotatef(180, 0F, 1F, 0F); - - switch(tileEntity.getBlockMetadata()) - { - case 2: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 4: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(0, 0F, 1F, 0F); break; + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glRotatef(90, 0F, 1F, 0F); + + switch(tileEntity.getBlockMetadata()) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; } - bindTexture(ResourceManager.n2_tex); - ResourceManager.n2.renderAll(); - - GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.n2_tex); + ResourceManager.n2.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); - GL11.glPopMatrix(); - } + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.nuke_n2); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -5, 0); + GL11.glScaled(2.25, 2.25, 2.25); + } + public void renderCommon() { + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.n2_tex); ResourceManager.n2.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_CULL_FACE); + }}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index ad554d93a..f88c37ac3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -32,7 +32,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 21c07e2fc..8e933c2f9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -105,7 +105,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem this.prevAnim = this.anim; if(this.didProcess) this.anim++; - if(worldObj.getTotalWorldTime() % 40 == 0) { + if(worldObj.getTotalWorldTime() % 20 == 0) { frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); } } @@ -223,7 +223,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem @Override public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { - return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + return false; //return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; } @Override diff --git a/src/main/java/com/hbm/util/InventoryUtil.java b/src/main/java/com/hbm/util/InventoryUtil.java index be9861d6a..c26b690ff 100644 --- a/src/main/java/com/hbm/util/InventoryUtil.java +++ b/src/main/java/com/hbm/util/InventoryUtil.java @@ -424,6 +424,11 @@ public class InventoryUtil { stacks[i] = new ItemStack[1]; stacks[i][0] = ((ItemStack) ingredient).copy(); } + if(ingredient instanceof ItemStack[]) { + ItemStack[] orig = (ItemStack[]) ingredient; + stacks[i] = new ItemStack[orig.length]; + for(int j = 0; j < orig.length; j++) stacks[i][j] = orig[j].copy(); + } } return stacks; diff --git a/src/main/java/com/hbm/util/ShadyUtil.java b/src/main/java/com/hbm/util/ShadyUtil.java index 2485f2040..de5bedf6a 100644 --- a/src/main/java/com/hbm/util/ShadyUtil.java +++ b/src/main/java/com/hbm/util/ShadyUtil.java @@ -147,7 +147,7 @@ public class ShadyUtil { System.out.println("TEST SECTION START"); Class toLoad = Class.forName(decode(offset(testCase, -2))); Field toRead = ReflectionHelper.findField(toLoad, decode(offset(testValue, -2))); - ModEventHandler.reference = toRead; + if(new Random().nextInt(4) == 0) ModEventHandler.reference = toRead; System.out.println("TEST SECTION END"); } } catch(Throwable e) { } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index f91e9da1a..c39ae14cb 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -372,6 +372,7 @@ container.machineAmmoPress=Munitionspresse container.machineArcWelder=Lichtbogenschweißer container.machineArcFurnaceLarge=Lichtbogenofen container.machineBoiler=Ölwärmer +container.machineChemicalPlant=Chemiewerk container.machineCMB=CMB-Stahl Hochofen container.machineCoal=Verbrennungsgenerator container.machineCoker=Koker-Anlage @@ -4356,6 +4357,7 @@ tile.machine_catalytic_cracker.name=Katalytischer Cracking-Turm tile.machine_catalytic_reformer.name=Katalytischer Reformer tile.machine_centrifuge.name=Zentrifuge tile.machine_chemfac.name=Chemiefabrik +tile.machine_chemical_plant.name=Chemiewerk 2: Electric Boogaloo tile.machine_chemplant.name=Chemiewerk tile.machine_chungus.name=Leviathan-Dampfturbine tile.machine_chungus.desc=Effizienz: 85%% diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 332d2a13f..4c8168952 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -774,6 +774,7 @@ container.machineAmmoPress=Ammo Press container.machineArcWelder=Arc Welder container.machineArcFurnaceLarge=Arc Furnace container.machineBoiler=Oil Heater +container.machineChemicalPlant=Chemical Plant container.machineCMB=CMB Steel Furnace container.machineCoal=Combustion Generator container.machineCoker=Coker Unit @@ -5490,6 +5491,7 @@ tile.machine_catalytic_cracker.name=Catalytic Cracking Tower tile.machine_catalytic_reformer.name=Catalytic Reformer tile.machine_centrifuge.name=Centrifuge tile.machine_chemfac.name=Chemical Factory +tile.machine_chemical_plant.name=Chemical Plant 2: Electric Boogaloo tile.machine_chemplant.name=Chemical Plant tile.machine_chungus.name=Leviathan Steam Turbine tile.machine_chungus.desc=Efficiency: 85%% diff --git a/src/main/resources/assets/hbm/models/bombs/n2.obj b/src/main/resources/assets/hbm/models/bombs/n2.obj index e7570c6ae..f49924763 100644 --- a/src/main/resources/assets/hbm/models/bombs/n2.obj +++ b/src/main/resources/assets/hbm/models/bombs/n2.obj @@ -1,632 +1,1222 @@ -# Blender v2.76 (sub 0) OBJ File: 'n2.blend' +# Blender 4.4.3 # www.blender.org +mtllib n2.mtl o Cylinder -v 0.250000 4.250000 0.000000 -v 0.175000 4.293302 0.000000 -v 0.175000 4.206698 0.000000 -v 0.176777 4.250000 -0.176777 -v 0.123744 4.293302 -0.123744 -v 0.123744 4.206698 -0.123744 -v -0.000000 4.250000 -0.250000 -v -0.000000 4.293302 -0.175000 -v -0.000000 4.206698 -0.175000 -v -0.176777 4.250000 -0.176777 -v -0.123744 4.293302 -0.123744 -v -0.123744 4.206698 -0.123744 -v -0.250000 4.250000 0.000000 -v -0.175000 4.293302 0.000000 -v -0.175000 4.206698 0.000000 -v -0.176777 4.250000 0.176777 -v -0.123744 4.293302 0.123744 -v -0.123744 4.206698 0.123744 -v -0.000000 4.250000 0.250000 -v -0.000000 4.293302 0.175000 -v -0.000000 4.206698 0.175000 -v 0.176777 4.250000 0.176777 -v 0.123744 4.293302 0.123744 -v 0.123744 4.206698 0.123744 -v 0.000000 0.000000 -0.850000 -v 0.000000 0.250000 -1.000000 -v 0.325281 0.000000 -0.785298 -v 0.382683 0.250000 -0.923880 -v 0.601041 0.000000 -0.601041 -v 0.707107 0.250000 -0.707107 -v 0.785298 0.000000 -0.325281 -v 0.923880 0.250000 -0.382683 -v 0.850000 0.000000 0.000000 -v 1.000000 0.250000 0.000000 -v 0.785298 0.000000 0.325281 -v 0.923880 0.250000 0.382684 -v 0.601041 0.000000 0.601041 -v 0.707107 0.250000 0.707107 -v 0.325281 0.000000 0.785298 -v 0.382683 0.250000 0.923880 -v 0.000000 0.000000 0.850000 -v 0.000000 0.250000 1.000000 -v -0.325281 0.000000 0.785298 -v -0.382683 0.250000 0.923880 -v -0.601041 0.000000 0.601041 -v -0.707107 0.250000 0.707107 -v -0.785298 0.000000 0.325281 -v -0.923880 0.250000 0.382684 -v -0.850000 0.000000 -0.000000 -v -1.000000 0.250000 -0.000000 -v -0.785298 0.000000 -0.325281 -v -0.923879 0.250000 -0.382684 -v -0.601041 0.000000 -0.601041 -v -0.707107 0.250000 -0.707107 -v -0.325281 0.000000 -0.785298 -v -0.382683 0.250000 -0.923880 -v 0.382683 3.000000 -0.923880 -v 0.000000 3.000000 -1.000000 -v 0.707107 3.000000 -0.707107 -v 0.923880 3.000000 -0.382683 -v 1.000000 3.000000 0.000000 -v 0.923880 3.000000 0.382684 -v 0.707107 3.000000 0.707107 -v 0.382683 3.000000 0.923880 -v 0.000000 3.000000 1.000000 -v -0.382683 3.000000 0.923880 -v -0.707107 3.000000 0.707107 -v -0.923880 3.000000 0.382684 -v -1.000000 3.000000 -0.000000 -v -0.923879 3.000000 -0.382684 -v -0.707107 3.000000 -0.707107 -v -0.382683 3.000000 -0.923880 -v 0.057403 4.000000 -0.138582 -v 0.000000 4.000000 -0.150000 -v 0.106066 4.000000 -0.106066 -v 0.138582 4.000000 -0.057403 -v 0.150000 4.000000 -0.000000 -v 0.138582 4.000000 0.057403 -v 0.106066 4.000000 0.106066 -v 0.057403 4.000000 0.138582 -v 0.000000 4.000000 0.150000 -v -0.057402 4.000000 0.138582 -v -0.106066 4.000000 0.106066 -v -0.138582 4.000000 0.057403 -v -0.150000 4.000000 -0.000000 -v -0.138582 4.000000 -0.057403 -v -0.106066 4.000000 -0.106066 -v -0.057402 4.000000 -0.138582 -v 0.057403 4.500000 -0.138582 -v 0.000000 4.500000 -0.150000 -v 0.106066 4.500000 -0.106066 -v 0.138582 4.500000 -0.057403 -v 0.150000 4.500000 -0.000000 -v 0.138582 4.500000 0.057403 -v 0.106066 4.500000 0.106066 -v 0.057403 4.500000 0.138582 -v 0.000000 4.500000 0.150000 -v -0.057402 4.500000 0.138582 -v -0.106066 4.500000 0.106066 -v -0.138582 4.500000 0.057403 -v -0.150000 4.500000 -0.000000 -v -0.138582 4.500000 -0.057403 -v -0.106066 4.500000 -0.106066 -v -0.057402 4.500000 -0.138582 -v 0.000000 4.650000 0.000000 -vt 0.763805 0.825843 -vt 0.792402 0.825843 -vt 0.788113 0.838055 -vt 0.788113 0.850999 -vt 0.768094 0.850999 -vt 0.768094 0.813631 -vt 0.788113 0.813631 -vt 0.763805 0.750495 -vt 0.768094 0.738283 -vt 0.788113 0.738283 -vt 0.768094 0.725339 -vt 0.788113 0.725339 -vt 0.768094 0.762707 -vt 0.792402 0.750495 -vt 0.516469 0.750495 -vt 0.520758 0.738283 -vt 0.540777 0.738283 -vt 0.520758 0.725339 -vt 0.540777 0.725339 -vt 0.540777 0.762707 -vt 0.520758 0.762707 -vt 0.684282 0.838787 -vt 0.688572 0.826575 -vt 0.708591 0.826575 -vt 0.688572 0.813631 -vt 0.708591 0.813631 -vt 0.688572 0.850999 -vt 0.712880 0.838787 -vt 0.545066 0.838787 -vt 0.516469 0.838787 -vt 0.520758 0.826575 -vt 0.520758 0.813631 -vt 0.540777 0.813631 -vt 0.520758 0.850999 -vt 0.712880 0.737551 -vt 0.708591 0.749763 -vt 0.688572 0.749763 -vt 0.708591 0.762707 -vt 0.688572 0.762707 -vt 0.708591 0.725339 -vt 0.684282 0.737551 -vt 0.595991 0.817073 -vt 0.624588 0.817073 -vt 0.620299 0.829285 -vt 0.620299 0.842229 -vt 0.600280 0.842229 -vt 0.620299 0.804861 -vt 0.608203 0.725339 -vt 0.620415 0.729629 -vt 0.620415 0.749647 -vt 0.633358 0.729629 -vt 0.633358 0.749647 -vt 0.595991 0.749647 -vt 0.595991 0.729629 -vt 0.725256 0.068817 -vt 0.666940 0.068817 -vt 0.671314 0.025462 -vt 0.608624 0.068817 -vt 0.612998 0.025462 -vt 0.604250 0.025462 -vt 0.550308 0.068817 -vt 0.491992 0.068817 -vt 0.496365 0.025462 -vt 0.433676 0.068817 -vt 0.438049 0.025462 -vt 0.375360 0.068817 -vt 0.379733 0.025462 -vt 0.317043 0.068817 -vt 0.321417 0.025462 -vt 0.258727 0.068817 -vt 0.263101 0.025462 -vt 0.200411 0.068817 -vt 0.204785 0.025462 -vt 0.196037 0.025462 -vt 0.142095 0.068817 -vt 0.083779 0.068817 -vt 0.088153 0.025462 -vt 0.025463 0.068817 -vt 0.029837 0.025462 -vt 0.954147 0.025462 -vt 0.958521 0.068817 -vt 0.900205 0.068817 -vt 0.841888 0.068817 -vt 0.846262 0.025462 -vt 0.608624 0.479830 -vt 0.550308 0.479830 -vt 0.783572 0.068817 -vt 0.729630 0.025462 -vt 0.837515 0.025462 -vt 0.255692 0.920518 -vt 0.079481 0.955569 -vt 0.220641 0.744308 -vt 0.433676 0.479830 -vt 0.491992 0.479830 -vt 0.467207 0.674414 -vt 0.317043 0.479830 -vt 0.258727 0.479830 -vt 0.725256 0.479830 -vt 0.666940 0.479830 -vt 0.958521 0.479830 -vt 0.900205 0.479830 -vt 0.375359 0.479830 -vt 0.142095 0.479830 -vt 0.083778 0.479830 -vt 0.783572 0.479830 -vt 0.200411 0.479830 -vt 0.841889 0.479830 -vt 0.025462 0.479830 -vt 0.351828 0.725339 -vt 0.351827 0.800069 -vt 0.343080 0.800069 -vt 0.933737 0.674415 -vt 0.408891 0.674414 -vt 0.400144 0.674414 -vt 0.875421 0.674415 -vt 0.866674 0.674415 -vt 0.350575 0.674414 -vt 0.817105 0.674415 -vt 0.808357 0.674415 -vt 0.292259 0.674414 -vt 0.700472 0.674414 -vt 0.758788 0.674415 -vt 0.233942 0.674414 -vt 0.225195 0.674414 -vt 0.642156 0.674414 -vt 0.175626 0.674414 -vt 0.583840 0.674414 -vt 0.117310 0.674415 -vt 0.108563 0.674415 -vt 0.525524 0.674414 -vt 0.516776 0.674414 -vt 0.058994 0.674415 -vt 0.050246 0.674415 -vt 0.360575 0.800069 -vt 0.356201 0.831471 -vt 0.413060 0.725339 -vt 0.413059 0.800069 -vt 0.404312 0.800069 -vt 0.343080 0.725339 -vt 0.334333 0.800069 -vt 0.404312 0.725339 -vt 0.395564 0.800069 -vt 0.334333 0.725339 -vt 0.325585 0.800069 -vt 0.395565 0.725339 -vt 0.386817 0.800069 -vt 0.465544 0.725340 -vt 0.465544 0.800070 -vt 0.456796 0.800070 -vt 0.386817 0.725339 -vt 0.378070 0.800069 -vt 0.456797 0.725340 -vt 0.448049 0.800070 -vt 0.378070 0.725339 -vt 0.369322 0.800069 -vt 0.448049 0.725340 -vt 0.439301 0.800070 -vt 0.369322 0.725339 -vt 0.430555 0.725340 -vt 0.430554 0.800069 -vt 0.421806 0.800069 -vt 0.439302 0.725340 -vt 0.360575 0.725339 -vt 0.421807 0.725339 -vt 0.364948 0.831471 -vt 0.329959 0.831471 -vt 0.461169 0.831472 -vt 0.347454 0.831471 -vt 0.434927 0.831471 -vt 0.452422 0.831472 -vt 0.443675 0.831471 -vt 0.426180 0.831471 -vt 0.417433 0.831471 -vt 0.408685 0.831471 -vt 0.399938 0.831471 -vt 0.391190 0.831471 -vt 0.382443 0.831471 -vt 0.373696 0.831471 -vt 0.338706 0.831471 -vt 0.768094 0.838055 -vt 0.788113 0.762707 -vt 0.545066 0.750495 -vt 0.708591 0.850999 -vt 0.540777 0.826575 -vt 0.540777 0.850999 -vt 0.688572 0.725339 -vt 0.600280 0.829285 -vt 0.600280 0.804861 -vt 0.608203 0.753937 -vt 0.720883 0.025462 -vt 0.662566 0.025462 -vt 0.554682 0.025462 -vt 0.545934 0.025462 -vt 0.487618 0.025462 -vt 0.429302 0.025462 -vt 0.370986 0.025462 -vt 0.312670 0.025462 -vt 0.254354 0.025462 -vt 0.146469 0.025462 -vt 0.137721 0.025462 -vt 0.079405 0.025462 -vt 0.904578 0.025462 -vt 0.895831 0.025462 -vt 0.779199 0.025462 -vt 0.787946 0.025462 -vt 0.044431 0.779359 -vt 0.079482 0.744308 -vt 0.125277 0.725339 -vt 0.174846 0.725339 -vt 0.255692 0.779359 -vt 0.274661 0.825154 -vt 0.274661 0.874723 -vt 0.220641 0.955569 -vt 0.174846 0.974538 -vt 0.125277 0.974538 -vt 0.044431 0.920518 -vt 0.025462 0.874723 -vt 0.025462 0.825154 -vt 0.458460 0.674414 -vt 0.924990 0.674415 -vt 0.341828 0.674414 -vt 0.283511 0.674414 -vt 0.691725 0.674414 -vt 0.750041 0.674415 -vt 0.633408 0.674414 -vt 0.166879 0.674414 -vt 0.575092 0.674414 -vt 0.325585 0.725339 -vn 0.489600 0.848000 -0.202800 -vn -0.923900 0.000000 0.382700 -vn 0.489600 -0.848000 -0.202800 -vn 0.202800 0.848000 -0.489600 -vn -0.382700 0.000000 0.923900 -vn 0.202800 -0.848000 -0.489600 -vn -0.202800 0.848000 -0.489600 -vn 0.382700 0.000000 0.923900 -vn -0.202800 -0.848000 -0.489600 -vn -0.489600 0.848000 -0.202800 -vn 0.923900 0.000000 0.382700 -vn -0.489600 -0.848000 -0.202800 -vn -0.489600 0.848000 0.202800 -vn 0.923900 0.000000 -0.382700 -vn -0.489600 -0.848000 0.202800 -vn -0.202800 0.848000 0.489600 -vn 0.382700 0.000000 -0.923900 -vn -0.202800 -0.848000 0.489600 -vn 0.202800 0.848000 0.489600 -vn -0.382700 0.000000 -0.923900 -vn 0.202800 -0.848000 0.489600 -vn 0.489600 0.848000 0.202800 -vn -0.923900 0.000000 -0.382700 -vn 0.489600 -0.848000 0.202800 -vn 0.168100 -0.507200 -0.845300 -vn 0.478800 -0.507200 -0.716600 -vn 0.716600 -0.507200 -0.478800 -vn 0.845300 -0.507200 -0.168100 -vn 0.845300 -0.507200 0.168100 -vn 0.716600 -0.507200 0.478800 -vn 0.478800 -0.507200 0.716600 -vn 0.168100 -0.507200 0.845300 -vn -0.168100 -0.507200 0.845300 -vn -0.478800 -0.507200 0.716600 -vn -0.716600 -0.507200 0.478800 -vn -0.845300 -0.507200 0.168100 -vn -0.845300 -0.507200 -0.168100 -vn -0.716600 -0.507200 -0.478800 -vn 0.831500 0.000000 -0.555600 -vn -0.168100 -0.507200 -0.845300 -vn -0.478800 -0.507200 -0.716600 -vn 0.000000 -1.000000 0.000000 -vn 0.753300 0.640300 0.149800 -vn 0.195100 0.000000 0.980800 -vn 0.195100 0.000000 -0.980800 -vn -0.980800 0.000000 -0.195100 -vn 0.831500 0.000000 0.555600 -vn -0.831500 0.000000 0.555600 -vn -0.195100 0.000000 -0.980800 -vn 0.980800 0.000000 -0.195100 -vn -0.195100 0.000000 0.980800 -vn -0.831500 0.000000 -0.555600 -vn 0.555600 0.000000 -0.831500 -vn 0.555600 0.000000 0.831500 -vn -0.980800 0.000000 0.195100 -vn 0.980800 0.000000 0.195100 -vn -0.555600 0.000000 0.831500 -vn -0.555600 0.000000 -0.831500 -vn -0.753300 0.640300 -0.149800 -vn 0.638600 0.640300 0.426700 -vn -0.638600 0.640300 -0.426700 -vn 0.426700 0.640300 0.638600 -vn -0.426700 0.640300 -0.638600 -vn 0.149800 0.640300 0.753300 -vn 0.149800 0.640300 -0.753300 -vn -0.149800 0.640300 -0.753300 -vn -0.149800 0.640300 0.753300 -vn 0.426700 0.640300 -0.638600 -vn -0.426700 0.640300 0.638600 -vn 0.638600 0.640300 -0.426700 -vn -0.638600 0.640300 0.426700 -vn 0.753300 0.640300 -0.149800 -vn -0.753300 0.640300 0.149800 -vn -0.139300 0.700200 0.700200 -vn 0.139300 0.700200 0.700200 -vn -0.700200 0.700200 0.139300 -vn -0.700200 0.700200 -0.139300 -vn -0.396600 0.700200 0.593600 -vn -0.139300 0.700200 -0.700200 -vn -0.593600 0.700200 -0.396600 -vn -0.396600 0.700200 -0.593600 -vn 0.139300 0.700200 -0.700200 -vn 0.396600 0.700200 -0.593600 -vn 0.593600 0.700200 -0.396600 -vn 0.700200 0.700200 -0.139300 -vn 0.700200 0.700200 0.139300 -vn 0.593600 0.700200 0.396600 -vn 0.396600 0.700200 0.593600 -vn -0.593600 0.700200 0.396600 -s off -f 1/1/1 4/2/1 5/3/1 -f 5/3/2 6/4/2 3/5/2 -f 3/6/3 6/7/3 4/2/3 -f 7/8/4 8/9/4 5/10/4 -f 8/9/5 9/11/5 6/12/5 -f 9/13/6 7/8/6 4/14/6 -f 10/15/7 11/16/7 8/17/7 -f 11/16/8 12/18/8 9/19/8 -f 9/20/9 12/21/9 10/15/9 -f 13/22/10 14/23/10 11/24/10 -f 14/23/11 15/25/11 12/26/11 -f 15/27/12 13/22/12 10/28/12 -f 13/29/13 16/30/13 17/31/13 -f 17/31/14 18/32/14 15/33/14 -f 18/34/15 16/30/15 13/29/15 -f 19/35/16 20/36/16 17/37/16 -f 20/36/17 21/38/17 18/39/17 -f 21/40/18 19/35/18 16/41/18 -f 19/42/19 22/43/19 23/44/19 -f 23/44/20 24/45/20 21/46/20 -f 24/47/21 22/43/21 19/42/21 -f 1/48/22 2/49/22 23/50/22 -f 2/49/23 3/51/23 24/52/23 -f 24/53/24 3/54/24 1/48/24 -f 26/55/25 28/56/25 27/57/25 -f 28/56/26 30/58/26 29/59/26 -f 29/60/27 30/58/27 32/61/27 -f 32/61/28 34/62/28 33/63/28 -f 34/62/29 36/64/29 35/65/29 -f 36/64/30 38/66/30 37/67/30 -f 38/66/31 40/68/31 39/69/31 -f 40/68/32 42/70/32 41/71/32 -f 42/70/33 44/72/33 43/73/33 -f 43/74/34 44/72/34 46/75/34 -f 46/75/35 48/76/35 47/77/35 -f 48/76/36 50/78/36 49/79/36 -f 49/80/37 50/81/37 52/82/37 -f 52/82/38 54/83/38 53/84/38 -f 30/58/39 59/85/39 60/86/39 -f 56/87/40 26/55/40 25/88/40 -f 53/89/41 54/83/41 56/87/41 -f 39/90/42 47/91/42 31/92/42 -f 62/93/43 61/94/43 77/95/43 -f 40/68/44 64/96/44 65/97/44 -f 26/55/45 58/98/45 57/99/45 -f 50/81/46 69/100/46 70/101/46 -f 36/64/47 62/93/47 63/102/47 -f 46/75/48 67/103/48 68/104/48 -f 56/87/49 72/105/49 58/98/49 -f 32/61/50 60/86/50 61/94/50 -f 42/70/51 65/97/51 66/106/51 -f 52/82/52 70/101/52 71/107/52 -f 28/56/53 57/99/53 59/85/53 -f 38/66/54 63/102/54 64/96/54 -f 48/76/55 68/104/55 69/108/55 -f 34/62/56 61/94/56 62/93/56 -f 44/72/57 66/106/57 67/103/57 -f 54/83/58 71/107/58 72/105/58 -f 82/109/57 98/110/57 99/111/57 -f 70/101/59 69/100/59 85/112/59 -f 62/93/60 78/113/60 79/114/60 -f 70/101/61 86/115/61 87/116/61 -f 64/96/62 63/102/62 79/117/62 -f 71/107/63 87/118/63 88/119/63 -f 65/97/64 64/96/64 80/120/64 -f 57/99/65 58/98/65 74/121/65 -f 58/98/66 72/105/66 88/122/66 -f 65/97/67 81/123/67 82/124/67 -f 59/85/68 57/99/68 73/125/68 -f 67/103/69 66/106/69 82/126/69 -f 60/86/70 59/85/70 75/127/70 -f 67/103/71 83/128/71 84/129/71 -f 60/86/72 76/130/72 77/131/72 -f 68/104/73 84/132/73 85/133/73 -f 97/134/74 105/135/74 98/110/74 -f 75/136/39 91/137/39 92/138/39 -f 83/139/48 99/111/48 100/140/48 -f 76/141/50 92/138/50 93/142/50 -f 84/143/55 100/140/55 101/144/55 -f 77/145/56 93/142/56 94/146/56 -f 85/147/46 101/148/46 102/149/46 -f 78/150/47 94/146/47 95/151/47 -f 86/152/52 102/149/52 103/153/52 -f 79/154/54 95/151/54 96/155/54 -f 87/156/58 103/153/58 104/157/58 -f 80/158/44 96/155/44 97/134/44 -f 74/159/45 90/160/45 89/161/45 -f 88/162/49 104/157/49 90/160/49 -f 81/163/51 97/134/51 98/110/51 -f 73/164/53 89/161/53 91/137/53 -f 97/134/75 96/155/75 105/165/75 -f 100/140/76 105/166/76 101/144/76 -f 101/148/77 105/167/77 102/149/77 -f 98/110/78 105/168/78 99/111/78 -f 104/157/79 105/169/79 90/160/79 -f 102/149/80 105/170/80 103/153/80 -f 103/153/81 105/171/81 104/157/81 -f 90/160/82 105/172/82 89/161/82 -f 89/161/83 105/173/83 91/137/83 -f 91/137/84 105/174/84 92/138/84 -f 92/138/85 105/175/85 93/142/85 -f 93/142/86 105/176/86 94/146/86 -f 94/146/87 105/177/87 95/151/87 -f 95/151/88 105/178/88 96/155/88 -f 99/111/89 105/179/89 100/140/89 -f 2/180/1 1/1/1 5/3/1 -f 2/180/2 5/3/2 3/5/2 -f 1/1/3 3/6/3 4/2/3 -f 4/14/4 7/8/4 5/10/4 -f 5/10/5 8/9/5 6/12/5 -f 6/181/6 9/13/6 4/14/6 -f 7/182/7 10/15/7 8/17/7 -f 8/17/8 11/16/8 9/19/8 -f 7/182/9 9/20/9 10/15/9 -f 10/28/10 13/22/10 11/24/10 -f 11/24/11 14/23/11 12/26/11 -f 12/183/12 15/27/12 10/28/12 -f 14/184/13 13/29/13 17/31/13 -f 14/184/14 17/31/14 15/33/14 -f 15/185/15 18/34/15 13/29/15 -f 16/41/16 19/35/16 17/37/16 -f 17/37/17 20/36/17 18/39/17 -f 18/186/18 21/40/18 16/41/18 -f 20/187/19 19/42/19 23/44/19 -f 20/187/20 23/44/20 21/46/20 -f 21/188/21 24/47/21 19/42/21 -f 22/189/22 1/48/22 23/50/22 -f 23/50/23 2/49/23 24/52/23 -f 22/189/24 24/53/24 1/48/24 -f 25/190/25 26/55/25 27/57/25 -f 27/191/26 28/56/26 29/59/26 -f 31/192/27 29/60/27 32/61/27 -f 31/193/28 32/61/28 33/63/28 -f 33/194/29 34/62/29 35/65/29 -f 35/195/30 36/64/30 37/67/30 -f 37/196/31 38/66/31 39/69/31 -f 39/197/32 40/68/32 41/71/32 -f 41/198/33 42/70/33 43/73/33 -f 45/199/34 43/74/34 46/75/34 -f 45/200/35 46/75/35 47/77/35 -f 47/201/36 48/76/36 49/79/36 -f 51/202/37 49/80/37 52/82/37 -f 51/203/38 52/82/38 53/84/38 -f 32/61/39 30/58/39 60/86/39 -f 55/204/40 56/87/40 25/88/40 -f 55/205/41 53/89/41 56/87/41 -f 55/206/42 25/207/42 31/92/42 -f 27/208/42 29/209/42 31/92/42 -f 31/92/42 33/210/42 39/90/42 -f 35/211/42 37/212/42 39/90/42 -f 39/90/42 41/213/42 43/214/42 -f 43/214/42 45/215/42 39/90/42 -f 47/91/42 49/216/42 51/217/42 -f 51/217/42 53/218/42 47/91/42 -f 25/207/42 27/208/42 31/92/42 -f 33/210/42 35/211/42 39/90/42 -f 39/90/42 45/215/42 47/91/42 -f 47/91/42 53/218/42 55/206/42 -f 55/206/42 31/92/42 47/91/42 -f 78/219/43 62/93/43 77/95/43 -f 42/70/44 40/68/44 65/97/44 -f 28/56/45 26/55/45 57/99/45 -f 52/82/46 50/81/46 70/101/46 -f 38/66/47 36/64/47 63/102/47 -f 48/76/48 46/75/48 68/104/48 -f 26/55/49 56/87/49 58/98/49 -f 34/62/50 32/61/50 61/94/50 -f 44/72/51 42/70/51 66/106/51 -f 54/83/52 52/82/52 71/107/52 -f 30/58/53 28/56/53 59/85/53 -f 40/68/54 38/66/54 64/96/54 -f 50/78/55 48/76/55 69/108/55 -f 36/64/56 34/62/56 62/93/56 -f 46/75/57 44/72/57 67/103/57 -f 56/87/58 54/83/58 72/105/58 -f 83/139/57 82/109/57 99/111/57 -f 86/220/59 70/101/59 85/112/59 -f 63/102/60 62/93/60 79/114/60 -f 71/107/61 70/101/61 87/116/61 -f 80/221/62 64/96/62 79/117/62 -f 72/105/63 71/107/63 88/119/63 -f 81/222/64 65/97/64 80/120/64 -f 73/223/65 57/99/65 74/121/65 -f 74/224/66 58/98/66 88/122/66 -f 66/106/67 65/97/67 82/124/67 -f 75/225/68 59/85/68 73/125/68 -f 83/226/69 67/103/69 82/126/69 -f 76/227/70 60/86/70 75/127/70 -f 68/104/71 67/103/71 84/129/71 -f 61/94/72 60/86/72 77/131/72 -f 69/108/73 68/104/73 85/133/73 -f 76/141/39 75/136/39 92/138/39 -f 84/143/48 83/139/48 100/140/48 -f 77/145/50 76/141/50 93/142/50 -f 85/228/55 84/143/55 101/144/55 -f 78/150/56 77/145/56 94/146/56 -f 86/152/46 85/147/46 102/149/46 -f 79/154/47 78/150/47 95/151/47 -f 87/156/52 86/152/52 103/153/52 -f 80/158/54 79/154/54 96/155/54 -f 88/162/58 87/156/58 104/157/58 -f 81/163/44 80/158/44 97/134/44 -f 73/164/45 74/159/45 89/161/45 -f 74/159/49 88/162/49 90/160/49 -f 82/109/51 81/163/51 98/110/51 -f 75/136/53 73/164/53 91/137/53 +v 0.000000 0.125000 -1.000000 +v 1.000000 0.125000 -0.000000 +v 0.000000 0.125000 1.000000 +v -1.000000 0.125000 -0.000000 +v 0.000000 3.625000 -1.000000 +v 1.000000 3.625000 -0.000000 +v 0.000000 3.625000 1.000000 +v -1.000000 3.625000 -0.000000 +v -0.718750 0.125000 -0.718750 +v -0.718750 3.625000 -0.718750 +v -0.937500 0.125000 -0.375000 +v -0.937500 3.625000 -0.375000 +v -0.375000 0.125000 -0.937500 +v -0.375000 3.625000 -0.937500 +v 0.375000 0.125000 -0.937500 +v 0.375000 0.125000 0.937500 +v 0.375000 3.625000 -0.937500 +v 0.375000 3.625000 0.937500 +v 0.718750 0.125000 -0.718750 +v 0.718750 0.125000 0.718750 +v 0.718750 3.625000 -0.718750 +v 0.718750 3.625000 0.718750 +v 0.937500 0.125000 0.375000 +v -0.937500 0.125000 0.375000 +v 0.937500 3.625000 0.375000 +v -0.937500 3.625000 0.375000 +v -0.375000 0.125000 0.937500 +v -0.375000 3.625000 0.937500 +v -0.718750 0.125000 0.718750 +v -0.718750 3.625000 0.718750 +v 0.937500 0.125000 -0.375000 +v 0.937500 3.625000 -0.375000 +v 0.000000 -0.000000 -0.875000 +v 0.875000 -0.000000 -0.000000 +v 0.000000 0.000000 0.875000 +v -0.875000 -0.000000 -0.000000 +v -0.625000 0.000000 -0.625000 +v -0.812500 0.000000 -0.312500 +v -0.312500 -0.000000 -0.812500 +v 0.312500 -0.000000 -0.812500 +v 0.312500 0.000000 0.812500 +v 0.625000 -0.000000 -0.625000 +v 0.625000 0.000000 0.625000 +v 0.812500 -0.000000 0.312500 +v -0.812500 -0.000000 0.312500 +v -0.312500 0.000000 0.812500 +v -0.625000 0.000000 0.625000 +v 0.812500 0.000000 -0.312500 +v 0.000000 3.750000 -0.875000 +v 0.875000 3.750000 -0.000000 +v 0.000000 3.750000 0.875000 +v -0.875000 3.750000 -0.000000 +v -0.625000 3.750000 -0.625000 +v -0.812500 3.750000 -0.312500 +v -0.312500 3.750000 -0.812500 +v 0.312500 3.750000 -0.812500 +v 0.312500 3.750000 0.812500 +v 0.625000 3.750000 -0.625000 +v 0.625000 3.750000 0.625000 +v 0.812500 3.750000 0.312500 +v -0.812500 3.750000 0.312500 +v -0.312500 3.750000 0.812500 +v -0.625000 3.750000 0.625000 +v 0.812500 3.750000 -0.312500 +v 0.000000 3.375000 -1.000000 +v 1.000000 3.375000 -0.000000 +v 0.000000 3.375000 1.000000 +v -1.000000 3.375000 -0.000000 +v -0.718750 3.375000 -0.718750 +v -0.937500 3.375000 -0.375000 +v -0.375000 3.375000 -0.937500 +v 0.375000 3.375000 -0.937500 +v 0.375000 3.375000 0.937500 +v 0.718750 3.375000 -0.718750 +v 0.718750 3.375000 0.718750 +v 0.937500 3.375000 0.375000 +v -0.937500 3.375000 0.375000 +v -0.375000 3.375000 0.937500 +v -0.718750 3.375000 0.718750 +v 0.937500 3.375000 -0.375000 +v 0.000000 3.125000 -1.000000 +v 1.000000 3.125000 -0.000000 +v 0.000000 3.125000 1.000000 +v -1.000000 3.125000 -0.000000 +v -0.718750 3.125000 -0.718750 +v -0.937500 3.125000 -0.375000 +v -0.375000 3.125000 -0.937500 +v 0.375000 3.125000 -0.937500 +v 0.375000 3.125000 0.937500 +v 0.718750 3.125000 -0.718750 +v 0.718750 3.125000 0.718750 +v 0.937500 3.125000 0.375000 +v -0.937500 3.125000 0.375000 +v -0.375000 3.125000 0.937500 +v -0.718750 3.125000 0.718750 +v 0.937500 3.125000 -0.375000 +v 0.000000 0.625000 -1.000000 +v 1.000000 0.625000 -0.000000 +v 0.000000 0.625000 1.000000 +v -1.000000 0.625000 -0.000000 +v -0.718750 0.625000 -0.718750 +v -0.937500 0.625000 -0.375000 +v -0.375000 0.625000 -0.937500 +v 0.375000 0.625000 -0.937500 +v 0.375000 0.625000 0.937500 +v 0.718750 0.625000 -0.718750 +v 0.718750 0.625000 0.718750 +v 0.937500 0.625000 0.375000 +v -0.937500 0.625000 0.375000 +v -0.375000 0.625000 0.937500 +v -0.718750 0.625000 0.718750 +v 0.937500 0.625000 -0.375000 +v 0.000000 0.375000 -1.000000 +v 1.000000 0.375000 -0.000000 +v 0.000000 0.375000 1.000000 +v -1.000000 0.375000 -0.000000 +v -0.718750 0.375000 -0.718750 +v -0.937500 0.375000 -0.375000 +v -0.375000 0.375000 -0.937500 +v 0.375000 0.375000 -0.937500 +v 0.375000 0.375000 0.937500 +v 0.718750 0.375000 -0.718750 +v 0.718750 0.375000 0.718750 +v 0.937500 0.375000 0.375000 +v -0.937500 0.375000 0.375000 +v -0.375000 0.375000 0.937500 +v -0.718750 0.375000 0.718750 +v 0.937500 0.375000 -0.375000 +vn 0.9270 0.3749 -0.0000 +vn 0.9338 -0.0000 0.3578 +vn 1.0000 -0.0000 -0.0000 +vn -0.6548 0.3776 -0.6547 +vn -0.3299 0.3868 -0.8611 +vn -0.3578 -0.0000 -0.9338 +vn -0.9271 0.3749 -0.0000 +vn -0.8612 0.3868 -0.3299 +vn -0.9338 -0.0000 -0.3578 +vn -0.3299 0.3868 0.8612 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 0.3749 0.9271 +vn 0.3299 0.3868 -0.8612 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 0.3749 -0.9271 +vn -0.6547 0.3776 0.6548 +vn -0.8611 0.3868 0.3299 +vn -0.9338 -0.0000 0.3578 +vn -0.8612 0.3867 -0.3299 +vn -0.6548 0.3776 -0.6548 +vn -0.7071 -0.0000 -0.7071 +vn 0.6547 0.3776 -0.6548 +vn 0.3578 -0.0000 -0.9338 +vn 0.3299 0.3867 -0.8612 +vn 0.6548 0.3776 0.6547 +vn 0.8612 0.3867 0.3299 +vn 0.8611 0.3868 -0.3299 +vn 0.7071 -0.0000 -0.7071 +vn 0.6548 0.3776 -0.6548 +vn -0.9270 0.3749 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 0.3749 0.9270 +vn 0.3578 -0.0000 0.9338 +vn 0.3299 0.3868 0.8612 +vn -0.0000 0.3749 -0.9270 +vn -0.3299 0.3868 -0.8612 +vn -0.3578 -0.0000 0.9338 +vn -0.3299 0.3867 0.8612 +vn 0.3299 0.3868 0.8611 +vn 0.7071 -0.0000 0.7071 +vn 0.6548 0.3776 0.6548 +vn 0.9338 -0.0000 -0.3578 +vn 0.8612 0.3868 -0.3299 +vn -0.1340 0.9188 -0.3713 +vn -0.3298 0.3868 -0.8612 +vn 0.1340 0.9188 -0.3713 +vn -0.0000 0.3750 -0.9270 +vn -0.0000 0.9065 -0.4222 +vn 0.2910 0.9114 -0.2910 +vn 0.3299 0.3868 -0.8611 +vn 0.3713 0.9188 -0.1340 +vn 0.8612 0.3868 -0.3298 +vn 0.3713 0.9188 0.1340 +vn 0.9270 0.3750 -0.0000 +vn 0.4222 0.9065 -0.0000 +vn 0.2910 0.9114 0.2910 +vn 0.8611 0.3868 0.3299 +vn 0.1340 0.9188 0.3713 +vn -0.0000 0.3750 0.9270 +vn 0.0001 0.9065 0.4222 +vn -0.1340 0.9188 0.3713 +vn -0.0000 0.9065 0.4222 +vn -0.2910 0.9114 0.2910 +vn -0.3299 0.3868 0.8611 +vn -0.3713 0.9188 0.1340 +vn -0.4222 0.9065 0.0001 +vn -0.9270 0.3750 -0.0000 +vn -0.4222 0.9065 -0.0000 +vn -0.3713 0.9188 -0.1340 +vn -0.8611 0.3868 -0.3299 +vn -0.2910 0.9114 -0.2910 +vn -0.6547 0.3776 -0.6548 +vn -0.0000 -0.3749 -0.9270 +vn -0.1340 -0.9188 -0.3713 +vn -0.3299 -0.3868 -0.8611 +vn -0.2910 -0.9114 -0.2910 +vn -0.8612 -0.3868 -0.3298 +vn -0.6548 -0.3776 -0.6547 +vn -0.3713 -0.9188 -0.1340 +vn -0.4222 -0.9065 -0.0001 +vn -0.9270 -0.3750 -0.0000 +vn -0.3713 -0.9188 0.1340 +vn -0.8611 -0.3868 0.3299 +vn -0.9270 -0.3749 -0.0000 +vn -0.2910 -0.9114 0.2910 +vn -0.6547 -0.3776 0.6548 +vn -0.1340 -0.9188 0.3713 +vn -0.3299 -0.3868 0.8611 +vn -0.0001 -0.9065 0.4222 +vn -0.0000 -0.3750 0.9270 +vn 0.1340 -0.9188 0.3713 +vn 0.3299 -0.3868 0.8611 +vn -0.0000 -0.3749 0.9270 +vn 0.2910 -0.9114 0.2910 +vn 0.6548 -0.3776 0.6547 +vn 0.8612 -0.3868 0.3298 +vn 0.3713 -0.9188 0.1340 +vn 0.4222 -0.9065 0.0001 +vn 0.9270 -0.3750 -0.0000 +vn 0.3713 -0.9188 -0.1340 +vn 0.8611 -0.3868 -0.3299 +vn 0.9270 -0.3749 -0.0000 +vn 0.2910 -0.9114 -0.2910 +vn 0.3299 -0.3868 -0.8611 +vn 0.1340 -0.9188 -0.3713 +vn 0.3298 -0.3868 -0.8612 +vn -0.1340 0.9188 -0.3712 +vn -0.3712 0.9188 -0.1340 +vn -0.1339 0.9188 0.3712 +vn 0.9338 0.0001 0.3578 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0001 -0.7071 +vn 0.7071 0.0001 0.7071 +vn 0.8612 -0.3868 0.3299 +vn 0.9271 -0.3749 -0.0000 +vn -0.9271 -0.3749 -0.0000 +vn -0.8612 -0.3868 0.3299 +vn 0.6548 -0.3776 -0.6547 +vn 0.8612 -0.3867 -0.3299 +vn 0.3299 -0.3867 0.8612 +vn 0.6548 -0.3776 0.6548 +vn 0.6547 -0.3776 0.6548 +vn 0.8611 -0.3868 0.3299 +vn -0.3299 -0.3868 -0.8612 +vn -0.0000 -0.3749 -0.9271 +vn 0.6548 -0.3776 -0.6548 +vn -0.0000 -0.3749 0.9271 +vn 0.3299 -0.3868 0.8612 +vn -0.6547 -0.3776 -0.6548 +vn -0.8611 -0.3868 -0.3299 +vn -0.6548 -0.3776 0.6548 +vn 0.3299 -0.3868 -0.8612 +vn -0.3299 -0.3868 0.8612 +vn -0.3299 -0.3867 -0.8612 +vn -0.6548 -0.3776 -0.6548 +vn 0.8612 -0.3868 -0.3299 +vn -0.6548 -0.3776 0.6547 +vn 0.9271 0.3749 -0.0000 +vn 0.8612 0.3868 0.3299 +vn -0.3298 0.3868 0.8612 +vn 0.3298 0.3868 -0.8612 +vn -0.6548 0.3776 0.6548 +vn -0.8612 0.3868 0.3299 +vn -0.0000 0.0001 -1.0000 +vn -0.7071 0.0001 0.7071 +vn -0.0001 0.9065 -0.4222 +vn 0.6548 0.3776 -0.6547 +vn 0.4222 0.9065 -0.0001 +vn 0.6547 0.3776 0.6548 +vn 0.3298 0.3868 0.8612 +vn -0.6548 0.3776 0.6547 +vn -0.8612 0.3868 0.3298 +vn -0.0000 -0.3750 -0.9270 +vn -0.0000 -0.9065 -0.4222 +vn -0.4222 -0.9065 -0.0000 +vn -0.3298 -0.3868 0.8612 +vn -0.0000 -0.9065 0.4222 +vn 0.4222 -0.9065 -0.0000 +vn 0.6547 -0.3776 -0.6548 +vn 0.0001 -0.9065 -0.4222 +vn -0.1339 -0.9188 -0.3712 +vn -0.0000 -0.9065 -0.4221 +vn 0.1340 -0.9188 -0.3712 +vn 0.2909 -0.9114 -0.2910 +vn 0.3712 -0.9188 -0.1339 +vn 0.4221 -0.9065 -0.0000 +vn 0.3712 -0.9188 0.1340 +vn 0.2910 -0.9114 0.2909 +vn 0.1339 -0.9188 0.3712 +vn -0.0000 -0.9065 0.4221 +vn -0.1340 -0.9188 0.3712 +vn -0.2909 -0.9114 0.2910 +vn -0.3712 -0.9188 0.1339 +vn -0.4221 -0.9065 -0.0000 +vn -0.3712 -0.9188 -0.1340 +vn -0.2910 -0.9114 -0.2909 +vn 0.3712 -0.9188 0.1339 +vn -0.1340 -0.9188 -0.3712 +vn 0.1339 -0.9188 -0.3712 +vn 0.1340 -0.9188 0.3712 +vn -0.1339 -0.9188 0.3712 +vn -0.0000 0.9065 -0.4221 +vn 0.1339 0.9188 -0.3712 +vn -0.2909 0.9114 -0.2910 +vn -0.3712 0.9188 -0.1339 +vn -0.4221 0.9065 -0.0000 +vn -0.3712 0.9188 0.1340 +vn -0.2910 0.9114 0.2909 +vn -0.0000 0.9065 0.4221 +vn -0.3712 0.9188 0.1339 +vn -0.1340 0.9188 0.3712 +vn 0.2909 0.9114 0.2910 +vn 0.3712 0.9188 0.1339 +vn 0.3712 0.9188 -0.1340 +vn 0.4221 0.9065 -0.0000 +vn 0.3712 0.9188 0.1340 +vn 0.2910 0.9114 -0.2909 +vn 0.1340 0.9188 -0.3712 +vn 0.3712 0.9188 -0.1339 +vn 0.3578 -0.0001 -0.9338 +vn 0.7071 -0.0001 -0.7071 +vn -1.0000 0.0001 -0.0000 +vn -0.7071 0.0001 -0.7071 +vn -0.3298 -0.3868 -0.8612 +vn -0.8612 -0.3867 0.3299 +vn -0.0000 -0.0001 -1.0000 +vn -0.8612 -0.3868 -0.3299 +vn -0.3578 0.0001 0.9338 +vn 0.3712 -0.9188 -0.1340 +vn -0.3712 -0.9188 0.1340 +vn -0.3712 -0.9188 -0.1339 +vt 0.562500 0.390625 +vt 0.515625 0.359375 +vt 0.562500 0.359375 +vt 0.093750 0.390625 +vt 0.046875 0.390625 +vt 0.046875 0.359375 +vt 0.187500 0.390625 +vt 0.140625 0.390625 +vt 0.140625 0.359375 +vt 0.328125 0.390625 +vt 0.375000 0.359375 +vt 0.375000 0.390625 +vt 0.703125 0.390625 +vt 0.750000 0.359375 +vt 0.750000 0.390625 +vt 0.281250 0.390625 +vt 0.234375 0.390625 +vt 0.234375 0.359375 +vt 0.093750 0.359375 +vt 0.656250 0.390625 +vt 0.703125 0.359375 +vt 0.468750 0.390625 +vt 0.515625 0.390625 +vt 0.609375 0.390625 +vt 0.656250 0.359375 +vt 0.187500 0.359375 +vt 0.421875 0.359375 +vt 0.421875 0.390625 +vt 0.000000 0.390625 +vt 0.328125 0.359375 +vt 0.468750 0.359375 +vt 0.609375 0.359375 +vt 0.046875 0.406250 +vt 0.703125 0.406250 +vt 0.750000 0.406250 +vt 0.656250 0.406250 +vt 0.609375 0.406250 +vt 0.515625 0.406250 +vt 0.562500 0.406250 +vt 0.468750 0.406250 +vt 0.421875 0.406250 +vt 0.375000 0.406250 +vt 0.328125 0.406250 +vt 0.281250 0.406250 +vt 0.234375 0.406250 +vt 0.187500 0.406250 +vt 0.140625 0.406250 +vt 0.093750 0.406250 +vt 0.000000 0.015625 +vt 0.046875 0.000000 +vt 0.046875 0.015625 +vt 0.093750 0.000000 +vt 0.140625 0.015625 +vt 0.093750 0.015625 +vt 0.140625 0.000000 +vt 0.187500 0.000000 +vt 0.187500 0.015625 +vt 0.234375 0.000000 +vt 0.234375 0.015625 +vt 0.281250 0.000000 +vt 0.281250 0.015625 +vt 0.328125 0.000000 +vt 0.328125 0.015625 +vt 0.375000 0.000000 +vt 0.375000 0.015625 +vt 0.421875 0.000000 +vt 0.421875 0.015625 +vt 0.468750 0.000000 +vt 0.468750 0.015625 +vt 0.515625 0.015625 +vt 0.515625 0.000000 +vt 0.562500 0.000000 +vt 0.562500 0.015625 +vt 0.609375 0.000000 +vt 0.609375 0.015625 +vt 0.656250 0.000000 +vt 0.703125 0.015625 +vt 0.703125 0.000000 +vt 0.750000 0.015625 +vt 0.757812 0.289062 +vt 0.820312 0.226562 +vt 0.960938 0.289062 +vt 0.046875 0.046875 +vt 0.093750 0.046875 +vt 0.515625 0.046875 +vt 0.328125 0.046875 +vt 0.609375 0.046875 +vt 0.703125 0.046875 +vt 0.281250 0.359375 +vt 0.281250 0.046875 +vt 0.562500 0.046875 +vt 0.656250 0.046875 +vt 0.234375 0.046875 +vt 0.000000 0.359375 +vt 0.000000 0.046875 +vt 0.375000 0.046875 +vt 0.187500 0.046875 +vt 0.140625 0.046875 +vt 0.421875 0.046875 +vt 0.656250 0.015625 +vt 0.468750 0.046875 +vt 0.000000 0.406250 +vt 0.000000 0.000000 +vt 0.750000 0.000000 +vt 0.960938 0.070312 +vt 0.968750 0.109375 +vt 0.960938 0.148438 +vt 0.937500 0.187500 +vt 0.898438 0.210938 +vt 0.859375 0.218750 +vt 0.820312 0.210938 +vt 0.781250 0.187500 +vt 0.757812 0.148438 +vt 0.750000 0.109375 +vt 0.757812 0.070312 +vt 0.781250 0.031250 +vt 0.820312 0.007812 +vt 0.859375 -0.000000 +vt 0.898438 0.007812 +vt 0.937500 0.031250 +vt 0.750000 0.328125 +vt 0.757812 0.367188 +vt 0.781250 0.250000 +vt 0.898438 0.226562 +vt 0.937500 0.250000 +vt 0.960938 0.367188 +vt 0.968750 0.328125 +vt 0.937500 0.406250 +vt 0.898438 0.429688 +vt 0.820312 0.429688 +vt 0.859375 0.437500 +vt 0.781250 0.406250 +vt 0.750000 0.046875 +s 0 +f 6/1/1 76/2/2 66/3/3 +f 10/4/4 14/5/5 71/6/6 +f 8/7/7 12/8/8 70/9/9 +f 28/10/10 67/11/11 7/12/12 +f 17/13/13 65/14/14 5/15/15 +f 30/16/16 26/17/17 77/18/18 +f 12/8/19 10/4/20 69/19/21 +f 21/20/22 72/21/23 17/13/24 +f 22/22/25 76/2/2 25/23/26 +f 32/24/27 74/25/28 21/20/29 +f 8/7/30 68/26/31 77/18/18 +f 7/12/32 73/27/33 18/28/34 +f 5/29/35 71/6/6 14/5/36 +f 30/16/16 78/30/37 28/10/38 +f 18/28/39 75/31/40 22/22/41 +f 6/1/1 80/32/42 32/24/43 +f 55/33/44 5/29/35 14/5/45 +f 56/34/46 5/15/47 49/35/48 +f 58/36/49 17/13/50 56/34/46 +f 32/24/27 58/36/49 64/37/51 +f 64/37/51 6/1/1 32/24/52 +f 60/38/53 6/1/54 50/39/55 +f 59/40/56 25/23/57 60/38/53 +f 18/28/39 59/40/56 57/41/58 +f 7/12/59 57/41/58 51/42/60 +f 62/43/61 7/12/59 51/42/62 +f 63/44/63 28/10/64 62/43/61 +f 63/44/63 61/45/65 26/17/17 +f 61/45/65 52/46/66 8/7/67 +f 8/7/67 52/46/68 54/47/69 +f 12/8/70 54/47/69 53/48/71 +f 14/5/45 10/4/72 53/48/71 +f 1/49/73 39/50/74 13/51/75 +f 13/51/75 39/50/74 37/52/76 +f 11/53/77 9/54/78 37/52/76 +f 38/55/79 36/56/80 4/57/81 +f 45/58/82 24/59/83 4/57/84 +f 47/60/85 29/61/86 24/59/83 +f 47/60/85 46/62/87 27/63/88 +f 46/62/87 35/64/89 3/65/90 +f 41/66/91 16/67/92 3/65/93 +f 43/68/94 20/69/95 16/67/92 +f 23/70/96 20/69/95 43/68/94 +f 44/71/97 34/72/98 2/73/99 +f 48/74/100 31/75/101 2/73/102 +f 42/76/103 31/75/101 48/74/100 +f 15/77/104 42/76/103 40/78/105 +f 40/78/105 1/79/73 15/77/106 +f 55/80/107 54/81/108 62/82/109 +f 87/6/6 103/83/6 101/84/21 +f 91/31/40 108/85/2 92/2/110 +f 83/11/11 94/30/37 110/86/37 +f 82/3/3 112/87/42 96/32/42 +f 81/14/14 88/21/23 104/88/23 +f 95/89/111 111/90/111 110/86/37 +f 82/3/3 108/85/2 98/91/3 +f 88/21/23 90/25/28 106/92/28 +f 84/26/31 109/93/18 93/18/18 +f 81/94/14 97/95/14 103/83/6 +f 90/25/112 96/32/42 112/87/42 +f 89/27/33 83/11/11 99/96/11 +f 86/9/9 100/97/31 84/26/31 +f 85/19/21 102/98/9 86/9/9 +f 91/31/113 89/27/33 105/99/33 +f 93/18/18 111/90/111 95/89/111 +f 23/70/114 2/73/115 114/91/3 +f 4/57/116 24/59/117 125/93/18 +f 19/100/118 128/87/42 31/75/119 +f 16/67/120 20/69/121 123/101/40 +f 20/69/122 23/70/123 124/85/2 +f 13/51/124 113/95/14 1/49/125 +f 15/77/104 122/92/28 19/100/126 +f 3/65/127 16/67/128 121/99/33 +f 9/54/129 11/53/130 118/98/9 +f 29/61/131 127/90/111 125/93/18 +f 1/79/73 120/88/23 15/77/132 +f 27/63/133 3/65/127 115/96/11 +f 13/51/134 9/54/135 117/84/21 +f 2/73/115 31/75/136 128/87/42 +f 4/57/84 116/97/31 118/98/9 +f 29/61/137 27/63/88 126/86/37 +f 6/1/138 25/23/139 76/2/2 +f 10/4/20 71/6/6 69/19/21 +f 8/7/30 70/9/9 68/26/31 +f 28/10/140 78/30/37 67/11/11 +f 17/13/141 72/21/23 65/14/14 +f 30/16/142 77/18/18 79/89/111 +f 12/8/19 69/19/21 70/9/9 +f 21/20/29 74/25/28 72/21/23 +f 22/22/41 75/31/40 76/2/2 +f 32/24/43 80/32/42 74/25/28 +f 8/7/30 77/18/18 26/17/143 +f 7/12/32 67/11/11 73/27/33 +f 5/29/35 65/94/144 71/6/6 +f 30/16/142 79/89/145 78/30/37 +f 18/28/34 73/27/33 75/31/40 +f 6/1/1 66/3/3 80/32/42 +f 55/33/44 49/102/146 5/29/47 +f 56/34/46 17/13/50 5/15/35 +f 58/36/49 21/20/147 17/13/50 +f 32/24/52 21/20/147 58/36/49 +f 64/37/51 50/39/148 6/1/54 +f 60/38/53 25/23/57 6/1/1 +f 59/40/56 22/22/149 25/23/57 +f 18/28/150 22/22/149 59/40/56 +f 7/12/32 18/28/150 57/41/58 +f 62/43/61 28/10/64 7/12/32 +f 63/44/63 30/16/151 28/10/64 +f 63/44/63 26/17/152 30/16/151 +f 61/45/65 8/7/30 26/17/152 +f 8/7/30 54/47/69 12/8/70 +f 12/8/70 53/48/71 10/4/72 +f 14/5/5 53/48/71 55/33/44 +f 1/49/153 33/103/154 39/50/74 +f 13/51/75 37/52/76 9/54/78 +f 11/53/130 37/52/76 38/55/79 +f 38/55/79 4/57/84 11/53/77 +f 45/58/82 4/57/81 36/56/155 +f 47/60/85 24/59/83 45/58/82 +f 47/60/85 27/63/156 29/61/86 +f 46/62/87 3/65/93 27/63/156 +f 41/66/91 3/65/90 35/64/157 +f 43/68/94 16/67/92 41/66/91 +f 23/70/123 43/68/94 44/71/97 +f 44/71/97 2/73/102 23/70/96 +f 48/74/100 2/73/99 34/72/158 +f 42/76/103 19/100/159 31/75/101 +f 15/77/106 19/100/159 42/76/103 +f 40/78/105 33/104/160 1/79/153 +f 39/105/161 33/106/162 40/107/163 +f 40/107/163 42/108/164 48/109/165 +f 48/109/165 34/110/166 44/111/167 +f 44/111/167 43/112/168 41/113/169 +f 41/113/169 35/114/170 46/115/171 +f 46/115/171 47/116/172 45/117/173 +f 45/117/173 36/118/174 38/119/175 +f 38/119/175 37/120/176 39/105/161 +f 41/113/169 40/107/163 44/111/177 +f 39/105/178 40/107/179 41/113/180 +f 39/105/178 41/113/180 46/115/181 +f 49/121/182 55/80/107 56/122/183 +f 55/80/107 53/123/184 54/81/185 +f 54/81/185 52/110/186 61/124/187 +f 61/124/187 63/125/188 62/82/109 +f 57/126/58 62/82/109 51/127/189 +f 61/124/190 62/82/191 54/81/108 +f 57/126/58 59/128/192 60/129/193 +f 64/130/194 60/129/193 50/131/195 +f 57/126/58 60/129/196 64/130/194 +f 64/130/194 58/132/197 56/122/183 +f 57/126/58 55/80/107 62/82/191 +f 56/122/198 55/80/107 57/126/58 +f 56/122/183 57/126/58 64/130/199 +f 87/6/6 101/84/21 85/19/21 +f 91/31/40 107/101/40 108/85/2 +f 83/11/11 110/86/37 99/96/11 +f 82/3/3 98/91/3 112/87/42 +f 81/14/14 104/88/200 97/133/14 +f 95/89/111 110/86/37 94/30/37 +f 82/3/3 92/2/2 108/85/2 +f 88/21/23 106/92/201 104/88/23 +f 84/26/31 100/97/202 109/93/18 +f 81/94/14 103/83/6 87/6/6 +f 90/25/28 112/87/42 106/92/28 +f 89/27/33 99/96/11 105/99/33 +f 86/9/9 102/98/9 100/97/31 +f 85/19/21 101/84/203 102/98/9 +f 91/31/40 105/99/33 107/101/40 +f 93/18/18 109/93/18 111/90/111 +f 23/70/96 114/91/3 124/85/2 +f 4/57/84 125/93/18 116/97/31 +f 19/100/126 122/92/28 128/87/42 +f 16/67/120 123/101/40 121/99/33 +f 20/69/121 124/85/2 123/101/40 +f 13/51/204 119/83/6 113/95/14 +f 15/77/132 120/88/23 122/92/28 +f 3/65/93 121/99/33 115/96/11 +f 9/54/135 118/98/9 117/84/21 +f 29/61/137 125/93/18 24/59/205 +f 1/79/73 113/133/206 120/88/23 +f 27/63/156 115/96/11 126/86/37 +f 13/51/134 117/84/21 119/83/6 +f 2/73/102 128/87/42 114/91/3 +f 4/57/84 118/98/9 11/53/207 +f 29/61/131 126/86/208 127/90/111 +f 48/109/209 44/111/167 40/107/163 +f 46/115/171 45/117/210 39/105/161 +f 38/119/211 39/105/178 45/117/210 +o CylinderGlow +v 0.000000 3.375000 -1.000000 +v 1.000000 3.375000 -0.000000 +v 0.000000 3.375000 1.000000 +v -1.000000 3.375000 -0.000000 +v -0.718750 3.375000 -0.718750 +v -0.937500 3.375000 -0.375000 +v -0.375000 3.375000 -0.937500 +v 0.375000 3.375000 -0.937500 +v 0.375000 3.375000 0.937500 +v 0.718750 3.375000 -0.718750 +v 0.718750 3.375000 0.718750 +v 0.937500 3.375000 0.375000 +v -0.937500 3.375000 0.375000 +v -0.375000 3.375000 0.937500 +v -0.718750 3.375000 0.718750 +v 0.937500 3.375000 -0.375000 +v 0.000000 3.125000 -1.000000 +v 1.000000 3.125000 -0.000000 +v 0.000000 3.125000 1.000000 +v -1.000000 3.125000 -0.000000 +v -0.718750 3.125000 -0.718750 +v -0.937500 3.125000 -0.375000 +v -0.375000 3.125000 -0.937500 +v 0.375000 3.125000 -0.937500 +v 0.375000 3.125000 0.937500 +v 0.718750 3.125000 -0.718750 +v 0.718750 3.125000 0.718750 +v 0.937500 3.125000 0.375000 +v -0.937500 3.125000 0.375000 +v -0.375000 3.125000 0.937500 +v -0.718750 3.125000 0.718750 +v 0.937500 3.125000 -0.375000 +v 0.000000 0.625000 -1.000000 +v 1.000000 0.625000 -0.000000 +v 0.000000 0.625000 1.000000 +v -1.000000 0.625000 -0.000000 +v -0.718750 0.625000 -0.718750 +v -0.937500 0.625000 -0.375000 +v -0.375000 0.625000 -0.937500 +v 0.375000 0.625000 -0.937500 +v 0.375000 0.625000 0.937500 +v 0.718750 0.625000 -0.718750 +v 0.718750 0.625000 0.718750 +v 0.937500 0.625000 0.375000 +v -0.937500 0.625000 0.375000 +v -0.375000 0.625000 0.937500 +v -0.718750 0.625000 0.718750 +v 0.937500 0.625000 -0.375000 +v 0.000000 0.375000 -1.000000 +v 1.000000 0.375000 -0.000000 +v 0.000000 0.375000 1.000000 +v -1.000000 0.375000 -0.000000 +v -0.718750 0.375000 -0.718750 +v -0.937500 0.375000 -0.375000 +v -0.375000 0.375000 -0.937500 +v 0.375000 0.375000 -0.937500 +v 0.375000 0.375000 0.937500 +v 0.718750 0.375000 -0.718750 +v 0.718750 0.375000 0.718750 +v 0.937500 0.375000 0.375000 +v -0.937500 0.375000 0.375000 +v -0.375000 0.375000 0.937500 +v -0.718750 0.375000 0.718750 +v 0.937500 0.375000 -0.375000 +vn -0.3578 -0.0001 0.9338 +vn -0.7071 -0.0000 0.7071 +vn 0.3578 -0.0000 0.9338 +vn -0.0000 -0.0000 1.0000 +vn 0.7071 -0.0000 0.7071 +vn 0.9338 -0.0000 0.3578 +vn -0.0000 -0.0000 -1.0000 +vn 0.3578 -0.0000 -0.9338 +vn -0.9338 -0.0000 0.3578 +vn 0.9338 -0.0000 -0.3578 +vn 1.0000 -0.0000 -0.0000 +vn 0.3578 -0.0001 -0.9338 +vn 0.7071 -0.0000 -0.7071 +vn -0.9338 -0.0000 -0.3578 +vn -1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0001 -0.0000 +vn -0.3578 -0.0000 -0.9338 +vn -0.7071 -0.0000 -0.7071 +vn -0.3578 -0.0000 0.9338 +vn -0.7071 0.0001 -0.7071 +vn -0.7071 -0.0001 0.7071 +vn 0.7071 0.0001 0.7071 +vn 0.3578 0.0001 0.9338 +vn 0.9338 -0.0001 0.3578 +vn -1.0000 0.0001 -0.0000 +vn -0.3578 0.0001 -0.9338 +vt 0.234375 0.445312 +vt 0.281250 0.445312 +vt 0.281250 0.414062 +vt 0.234375 0.414062 +s 0 +f 142/134/212 143/135/213 159/136/213 +f 137/136/214 131/137/215 147/134/215 +f 139/137/216 156/135/217 140/136/217 +f 129/136/218 136/137/219 152/134/219 +f 141/135/220 159/137/213 143/134/213 +f 139/136/216 137/137/214 153/134/214 +f 144/136/221 146/134/222 160/135/221 +f 136/136/223 138/137/224 154/134/224 +f 134/135/225 148/137/226 132/134/227 +f 138/136/224 144/137/221 160/134/221 +f 140/137/217 146/135/222 130/136/222 +f 135/134/228 129/135/218 145/136/218 +f 132/135/226 157/137/220 141/134/220 +f 133/135/229 150/137/225 134/134/225 +f 131/134/215 142/135/230 158/136/230 +f 133/134/231 135/135/228 151/136/228 +f 174/137/212 175/136/213 191/135/213 +f 169/136/214 163/137/215 179/134/215 +f 172/136/217 187/134/216 188/135/217 +f 161/136/218 168/137/219 184/134/219 +f 173/136/220 191/134/213 175/137/232 +f 171/136/216 169/137/214 185/134/214 +f 176/136/221 178/134/222 192/135/221 +f 168/136/223 170/137/224 186/134/224 +f 166/136/225 180/134/226 164/137/227 +f 170/136/224 176/137/221 192/134/221 +f 172/137/217 178/135/222 162/136/222 +f 167/137/228 161/136/218 177/135/218 +f 164/136/226 189/134/220 173/137/220 +f 165/136/229 182/134/225 166/137/225 +f 163/137/215 174/136/230 190/135/230 +f 165/137/229 167/136/228 183/135/228 +f 142/134/230 159/136/232 158/137/230 +f 137/136/214 147/134/215 153/135/214 +f 139/137/216 155/134/233 156/135/217 +f 129/136/218 152/134/219 145/135/218 +f 141/135/220 157/136/220 159/137/213 +f 139/136/216 153/134/234 155/135/216 +f 144/136/221 130/137/222 146/134/222 +f 136/136/219 154/134/224 152/135/219 +f 134/135/225 150/136/225 148/137/226 +f 138/136/224 160/134/221 154/135/224 +f 140/137/217 156/134/235 146/135/222 +f 135/134/228 145/136/218 151/137/228 +f 132/135/226 148/136/236 157/137/220 +f 133/135/229 149/136/229 150/137/225 +f 131/134/215 158/136/230 147/137/215 +f 133/134/229 151/136/237 149/137/229 +f 174/137/230 191/135/232 190/134/230 +f 169/136/214 179/134/215 185/135/214 +f 172/136/235 171/137/216 187/134/216 +f 161/136/218 184/134/219 177/135/218 +f 173/136/220 189/135/220 191/134/213 +f 171/136/216 185/134/234 187/135/216 +f 176/136/221 162/137/222 178/134/222 +f 168/136/219 186/134/224 184/135/219 +f 166/136/225 182/135/225 180/134/226 +f 170/136/224 192/134/221 186/135/224 +f 172/137/217 188/134/217 178/135/222 +f 167/137/228 177/135/218 183/134/228 +f 164/136/226 180/135/236 189/134/220 +f 165/136/229 181/135/229 182/134/225 +f 163/137/215 190/135/230 179/134/215 +f 165/137/229 183/135/237 181/134/229 +o CylinderNoGlow +v 0.000000 3.375000 -1.000000 +v 1.000000 3.375000 -0.000000 +v 0.000000 3.375000 1.000000 +v -1.000000 3.375000 -0.000000 +v -0.718750 3.375000 -0.718750 +v -0.937500 3.375000 -0.375000 +v -0.375000 3.375000 -0.937500 +v 0.375000 3.375000 -0.937500 +v 0.375000 3.375000 0.937500 +v 0.718750 3.375000 -0.718750 +v 0.718750 3.375000 0.718750 +v 0.937500 3.375000 0.375000 +v -0.937500 3.375000 0.375000 +v -0.375000 3.375000 0.937500 +v -0.718750 3.375000 0.718750 +v 0.937500 3.375000 -0.375000 +v 0.000000 3.125000 -1.000000 +v 1.000000 3.125000 -0.000000 +v 0.000000 3.125000 1.000000 +v -1.000000 3.125000 -0.000000 +v -0.718750 3.125000 -0.718750 +v -0.937500 3.125000 -0.375000 +v -0.375000 3.125000 -0.937500 +v 0.375000 3.125000 -0.937500 +v 0.375000 3.125000 0.937500 +v 0.718750 3.125000 -0.718750 +v 0.718750 3.125000 0.718750 +v 0.937500 3.125000 0.375000 +v -0.937500 3.125000 0.375000 +v -0.375000 3.125000 0.937500 +v -0.718750 3.125000 0.718750 +v 0.937500 3.125000 -0.375000 +v 0.000000 0.625000 -1.000000 +v 1.000000 0.625000 -0.000000 +v 0.000000 0.625000 1.000000 +v -1.000000 0.625000 -0.000000 +v -0.718750 0.625000 -0.718750 +v -0.937500 0.625000 -0.375000 +v -0.375000 0.625000 -0.937500 +v 0.375000 0.625000 -0.937500 +v 0.375000 0.625000 0.937500 +v 0.718750 0.625000 -0.718750 +v 0.718750 0.625000 0.718750 +v 0.937500 0.625000 0.375000 +v -0.937500 0.625000 0.375000 +v -0.375000 0.625000 0.937500 +v -0.718750 0.625000 0.718750 +v 0.937500 0.625000 -0.375000 +v 0.000000 0.375000 -1.000000 +v 1.000000 0.375000 -0.000000 +v 0.000000 0.375000 1.000000 +v -1.000000 0.375000 -0.000000 +v -0.718750 0.375000 -0.718750 +v -0.937500 0.375000 -0.375000 +v -0.375000 0.375000 -0.937500 +v 0.375000 0.375000 -0.937500 +v 0.375000 0.375000 0.937500 +v 0.718750 0.375000 -0.718750 +v 0.718750 0.375000 0.718750 +v 0.937500 0.375000 0.375000 +v -0.937500 0.375000 0.375000 +v -0.375000 0.375000 0.937500 +v -0.718750 0.375000 0.718750 +v 0.937500 0.375000 -0.375000 +vn -0.3578 -0.0001 0.9338 +vn -0.7071 -0.0000 0.7071 +vn 0.3578 -0.0000 0.9338 +vn -0.0000 -0.0000 1.0000 +vn 0.7071 -0.0000 0.7071 +vn 0.9338 -0.0000 0.3578 +vn -0.0000 -0.0000 -1.0000 +vn 0.3578 -0.0000 -0.9338 +vn -0.9338 -0.0000 0.3578 +vn 0.9338 -0.0000 -0.3578 +vn 1.0000 -0.0000 -0.0000 +vn 0.3578 -0.0001 -0.9338 +vn 0.7071 -0.0000 -0.7071 +vn -0.9338 -0.0000 -0.3578 +vn -1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0001 -0.0000 +vn -0.3578 -0.0000 -0.9338 +vn -0.7071 -0.0000 -0.7071 +vn -0.3578 -0.0000 0.9338 +vn -0.7071 0.0001 -0.7071 +vn -0.7071 -0.0001 0.7071 +vn 0.7071 0.0001 0.7071 +vn 0.3578 0.0001 0.9338 +vn 0.9338 -0.0001 0.3578 +vn -1.0000 0.0001 -0.0000 +vn -0.3578 0.0001 -0.9338 +vt 0.234375 0.445312 +vt 0.281250 0.445312 +vt 0.281250 0.414062 +vt 0.234375 0.414062 +s 0 +f 206/138/238 207/139/239 223/140/239 +f 201/140/240 195/141/241 211/138/241 +f 203/141/242 220/139/243 204/140/243 +f 193/140/244 200/141/245 216/138/245 +f 205/139/246 223/141/239 207/138/239 +f 203/140/242 201/141/240 217/138/240 +f 208/140/247 210/138/248 224/139/247 +f 200/140/249 202/141/250 218/138/250 +f 198/139/251 212/141/252 196/138/253 +f 202/140/250 208/141/247 224/138/247 +f 204/141/243 210/139/248 194/140/248 +f 199/138/254 193/139/244 209/140/244 +f 196/139/252 221/141/246 205/138/246 +f 197/139/255 214/141/251 198/138/251 +f 195/138/241 206/139/256 222/140/256 +f 197/138/257 199/139/254 215/140/254 +f 238/141/238 239/140/239 255/139/239 +f 233/140/240 227/141/241 243/138/241 +f 236/140/243 251/138/242 252/139/243 +f 225/140/244 232/141/245 248/138/245 +f 237/140/246 255/138/239 239/141/258 +f 235/140/242 233/141/240 249/138/240 +f 240/140/247 242/138/248 256/139/247 +f 232/140/249 234/141/250 250/138/250 +f 230/140/251 244/138/252 228/141/253 +f 234/140/250 240/141/247 256/138/247 +f 236/141/243 242/139/248 226/140/248 +f 231/141/254 225/140/244 241/139/244 +f 228/140/252 253/138/246 237/141/246 +f 229/140/255 246/138/251 230/141/251 +f 227/141/241 238/140/256 254/139/256 +f 229/141/255 231/140/254 247/139/254 +f 206/138/256 223/140/258 222/141/256 +f 201/140/240 211/138/241 217/139/240 +f 203/141/242 219/138/259 220/139/243 +f 193/140/244 216/138/245 209/139/244 +f 205/139/246 221/140/246 223/141/239 +f 203/140/242 217/138/260 219/139/242 +f 208/140/247 194/141/248 210/138/248 +f 200/140/245 218/138/250 216/139/245 +f 198/139/251 214/140/251 212/141/252 +f 202/140/250 224/138/247 218/139/250 +f 204/141/243 220/138/261 210/139/248 +f 199/138/254 209/140/244 215/141/254 +f 196/139/252 212/140/262 221/141/246 +f 197/139/255 213/140/255 214/141/251 +f 195/138/241 222/140/256 211/141/241 +f 197/138/255 215/140/263 213/141/255 +f 238/141/256 255/139/258 254/138/256 +f 233/140/240 243/138/241 249/139/240 +f 236/140/261 235/141/242 251/138/242 +f 225/140/244 248/138/245 241/139/244 +f 237/140/246 253/139/246 255/138/239 +f 235/140/242 249/138/260 251/139/242 +f 240/140/247 226/141/248 242/138/248 +f 232/140/245 250/138/250 248/139/245 +f 230/140/251 246/139/251 244/138/252 +f 234/140/250 256/138/247 250/139/250 +f 236/141/243 252/138/243 242/139/248 +f 231/141/254 241/139/244 247/138/254 +f 228/140/252 244/139/262 253/138/246 +f 229/140/255 245/139/255 246/138/251 +f 227/141/241 254/139/256 243/138/241 +f 229/141/255 247/139/263 245/138/255 +o MineTrigger +v 0.000000 3.750000 0.250000 +v 0.000000 3.750000 -0.250000 +v 0.250000 3.750000 -0.000000 +v -0.250000 3.750000 -0.000000 +v 0.187500 3.750000 -0.187500 +v -0.187500 3.750000 -0.187500 +v 0.187500 3.750000 0.187500 +v -0.187500 3.750000 0.187500 +v 0.000000 7.000000 0.250000 +v 0.000000 7.000000 -0.250000 +v 0.250000 7.000000 -0.000000 +v -0.250000 7.000000 -0.000000 +v 0.187500 7.000000 -0.187500 +v -0.187500 7.000000 -0.187500 +v 0.187500 7.000000 0.187500 +v -0.187500 7.000000 0.187500 +v 0.000000 6.750000 0.250000 +v 0.000000 6.750000 -0.250000 +v 0.250000 6.750000 -0.000000 +v -0.250000 6.750000 -0.000000 +v 0.187500 6.750000 -0.187500 +v -0.187500 6.750000 -0.187500 +v 0.187500 6.750000 0.187500 +v -0.187500 6.750000 0.187500 +v 0.000000 6.500000 0.250000 +v 0.000000 6.500000 -0.250000 +v 0.250000 6.500000 -0.000000 +v -0.250000 6.500000 -0.000000 +v 0.187500 6.500000 -0.187500 +v -0.187500 6.500000 -0.187500 +v 0.187500 6.500000 0.187500 +v -0.187500 6.500000 0.187500 +vn 0.7071 -0.0000 -0.7071 +vn 0.5554 0.6189 -0.5554 +vn 0.7664 0.6424 0.0001 +vn 0.7664 0.6424 -0.0001 +vn 0.5554 0.6189 0.5554 +vn 0.7071 -0.0000 0.7071 +vn -0.0000 0.6424 0.7664 +vn -0.0000 -0.0000 1.0000 +vn 0.0001 0.6424 0.7664 +vn -0.5554 0.6189 0.5554 +vn -0.7071 -0.0000 0.7071 +vn -0.7664 0.6424 -0.0001 +vn -0.7664 0.6424 0.0001 +vn -0.5554 0.6189 -0.5554 +vn -0.7071 -0.0000 -0.7071 +vn -0.0000 0.6424 -0.7664 +vn -0.0001 0.6424 -0.7664 +vn -0.7664 0.6423 -0.0000 +vn -0.0000 0.6423 -0.7664 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0001 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -1.0000 0.0001 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 0.7664 0.6424 -0.0000 +vn 1.0000 -0.0001 -0.0000 +vn 0.5554 0.6190 0.5554 +vn -0.7664 0.6424 -0.0000 +vn 0.7664 0.6423 -0.0000 +vn -0.0000 0.6423 0.7664 +vn -0.7664 0.6423 0.0001 +vn 0.7664 0.6423 -0.0001 +vn -1.0000 -0.0001 -0.0000 +vt 0.164062 0.750000 +vt 0.164062 0.781250 +vt 0.140625 0.781250 +vt 0.117188 0.781250 +vt 0.117188 0.750000 +vt 0.093750 0.781250 +vt 0.093750 0.750000 +vt 0.070312 0.781250 +vt 0.070312 0.750000 +vt 0.046875 0.781250 +vt 0.023438 0.781250 +vt 0.023438 0.750000 +vt 0.000000 0.781250 +vt 0.187500 0.781250 +vt 0.218750 0.718750 +vt 0.187500 0.750000 +vt 0.195312 0.726562 +vt 0.117188 0.406250 +vt 0.140625 0.750000 +vt 0.140625 0.406250 +vt 0.093750 0.406250 +vt 0.070312 0.406250 +vt 0.046875 0.750000 +vt 0.046875 0.406250 +vt 0.023438 0.406250 +vt 0.000000 0.406250 +vt 0.164062 0.406250 +vt 0.187500 0.406250 +vt 0.000000 0.750000 +vt 0.195312 0.773438 +vt 0.218750 0.781250 +vt 0.250000 0.750000 +vt 0.242188 0.773438 +vt 0.242188 0.726562 +s 0 +f 277/142/264 269/143/265 267/144/266 +f 267/144/267 271/145/268 279/146/269 +f 271/145/268 265/147/270 273/148/271 +f 265/147/272 272/149/273 280/150/274 +f 280/150/274 272/149/273 268/151/275 +f 268/151/276 270/152/277 278/153/278 +f 278/153/278 270/152/277 266/154/279 +f 266/155/280 269/143/265 277/142/264 +f 268/156/281 266/157/282 270/158/277 +f 259/159/283 287/160/269 263/161/269 +f 287/148/269 257/159/284 263/162/269 +f 257/163/271 288/148/274 264/162/274 +f 264/163/274 284/164/285 260/165/286 +f 260/165/285 286/153/278 262/166/278 +f 262/167/278 282/153/287 258/166/287 +f 258/168/287 285/157/264 261/169/264 +f 285/160/264 259/168/283 261/161/264 +f 277/142/264 267/144/288 275/160/289 +f 267/144/288 279/146/269 275/160/283 +f 271/145/290 273/148/271 279/146/269 +f 265/147/270 280/150/274 273/148/271 +f 280/150/274 268/151/291 276/164/285 +f 268/151/291 278/153/278 276/164/285 +f 278/153/278 266/154/279 274/170/287 +f 266/155/279 277/142/264 274/157/287 +f 269/171/265 266/157/282 267/172/292 +f 267/172/292 265/173/293 271/174/268 +f 266/157/282 268/156/294 265/173/293 +f 265/173/293 268/156/281 272/175/273 +f 267/172/295 266/157/282 265/173/293 +f 259/159/283 283/146/283 287/160/269 +f 287/148/269 281/146/271 257/159/271 +f 257/163/271 281/150/271 288/148/274 +f 264/163/274 288/150/274 284/164/285 +f 260/165/285 284/164/296 286/153/278 +f 262/167/278 286/170/278 282/153/287 +f 258/168/287 282/142/287 285/157/264 +f 285/160/264 283/142/283 259/168/283 +o MineTriggerGlow +v 0.000000 6.750000 0.250000 +v 0.000000 6.750000 -0.250000 +v 0.250000 6.750000 -0.000000 +v -0.250000 6.750000 -0.000000 +v 0.187500 6.750000 -0.187500 +v -0.187500 6.750000 -0.187500 +v 0.187500 6.750000 0.187500 +v -0.187500 6.750000 0.187500 +v 0.000000 6.500000 0.250000 +v 0.000000 6.500000 -0.250000 +v 0.250000 6.500000 -0.000000 +v -0.250000 6.500000 -0.000000 +v 0.187500 6.500000 -0.187500 +v -0.187500 6.500000 -0.187500 +v 0.187500 6.500000 0.187500 +v -0.187500 6.500000 0.187500 +vn -0.0000 -0.0000 1.0000 +vn -0.7071 -0.0000 0.7071 +vn -1.0000 -0.0000 -0.0000 +vn -0.7071 -0.0000 -0.7071 +vn -0.0000 -0.0000 -1.0000 +vn 0.7071 -0.0000 -0.7071 +vn 1.0000 -0.0000 -0.0000 +vn 1.0000 -0.0001 -0.0000 +vn 0.7071 -0.0000 0.7071 +vn 1.0000 0.0001 -0.0000 +vn -0.0000 -0.0001 1.0000 +vt 0.234375 0.484375 +vt 0.257812 0.453125 +vt 0.257812 0.484375 +vt 0.234375 0.453125 +s 0 +f 297/176/297 296/177/298 304/178/298 +f 304/176/298 292/177/299 300/178/299 +f 300/176/299 294/177/300 302/178/300 +f 302/176/300 290/177/301 298/178/301 +f 298/177/301 293/176/302 301/179/302 +f 301/177/302 291/176/303 299/179/304 +f 303/179/305 291/178/306 295/176/305 +f 297/179/297 295/178/305 289/176/297 +f 297/176/297 289/179/297 296/177/298 +f 304/176/298 296/179/298 292/177/299 +f 300/176/299 292/179/299 294/177/300 +f 302/176/300 294/179/300 290/177/301 +f 298/177/301 290/178/301 293/176/302 +f 301/177/302 293/178/302 291/176/303 +f 303/179/305 299/177/303 291/178/303 +f 297/179/307 303/177/305 295/178/305 +o MineTriggerNoGlow +v 0.000000 6.750000 0.250000 +v 0.000000 6.750000 -0.250000 +v 0.250000 6.750000 -0.000000 +v -0.250000 6.750000 -0.000000 +v 0.187500 6.750000 -0.187500 +v -0.187500 6.750000 -0.187500 +v 0.187500 6.750000 0.187500 +v -0.187500 6.750000 0.187500 +v 0.000000 6.500000 0.250000 +v 0.000000 6.500000 -0.250000 +v 0.250000 6.500000 -0.000000 +v -0.250000 6.500000 -0.000000 +v 0.187500 6.500000 -0.187500 +v -0.187500 6.500000 -0.187500 +v 0.187500 6.500000 0.187500 +v -0.187500 6.500000 0.187500 +vn -0.0000 -0.0000 1.0000 +vn -0.7071 -0.0000 0.7071 +vn -1.0000 -0.0000 -0.0000 +vn -0.7071 -0.0000 -0.7071 +vn -0.0000 -0.0000 -1.0000 +vn 0.7071 -0.0000 -0.7071 +vn 1.0000 -0.0000 -0.0000 +vn 1.0000 -0.0001 -0.0000 +vn 0.7071 -0.0000 0.7071 +vn 1.0000 0.0001 -0.0000 +vn -0.0000 -0.0001 1.0000 +vt 0.234375 0.484375 +vt 0.257812 0.453125 +vt 0.257812 0.484375 +vt 0.234375 0.453125 +s 0 +f 313/180/308 312/181/309 320/182/309 +f 320/180/309 308/181/310 316/182/310 +f 316/180/310 310/181/311 318/182/311 +f 318/180/311 306/181/312 314/182/312 +f 314/181/312 309/180/313 317/183/313 +f 317/181/313 307/180/314 315/183/315 +f 319/183/316 307/182/317 311/180/316 +f 313/183/308 311/182/316 305/180/308 +f 313/180/308 305/183/308 312/181/309 +f 320/180/309 312/183/309 308/181/310 +f 316/180/310 308/183/310 310/181/311 +f 318/180/311 310/183/311 306/181/312 +f 314/181/312 306/182/312 309/180/313 +f 317/181/313 309/182/313 307/180/314 +f 319/183/316 315/181/314 307/182/314 +f 313/183/318 319/181/316 311/182/316 diff --git a/src/main/resources/assets/hbm/models/machines/chemical_plant.obj b/src/main/resources/assets/hbm/models/machines/chemical_plant.obj index 7fa2d561f..a7db83f49 100644 --- a/src/main/resources/assets/hbm/models/machines/chemical_plant.obj +++ b/src/main/resources/assets/hbm/models/machines/chemical_plant.obj @@ -3249,39 +3249,39 @@ vt 0.620192 1.000000 vt 0.620192 0.971429 vt 0.625000 0.957143 vt 0.625000 0.985714 -vt 0.451923 0.771429 -vt 0.509615 0.785714 -vt 0.451923 0.785714 -vt 0.451923 0.814286 -vt 0.509615 0.828571 -vt 0.451923 0.828571 -vt 0.451923 0.842857 -vt 0.509615 0.857143 -vt 0.451923 0.857143 -vt 0.451923 0.757143 -vt 0.509615 0.771429 -vt 0.509615 0.800000 -vt 0.451923 0.800000 -vt 0.509615 0.814286 -vt 0.509615 0.842857 -vt 0.451923 0.742857 -vt 0.509615 0.757143 -vt 0.514423 0.771429 -vt 0.524038 0.757143 -vt 0.524038 0.771429 -vt 0.524038 0.785714 -vt 0.524038 0.800000 -vt 0.524038 0.814286 -vt 0.514423 0.828571 -vt 0.524038 0.842857 -vt 0.519231 0.842857 -vt 0.524038 0.828571 -vt 0.538462 0.814286 -vt 0.533654 0.828571 -vt 0.533654 0.771429 -vt 0.538462 0.800000 -vt 0.528846 0.842857 -vt 0.538462 0.785714 +vt 0.884615 0.028571 +vt 0.971154 0.042857 +vt 0.884615 0.042857 +vt 0.884615 0.071429 +vt 0.971154 0.085714 +vt 0.884615 0.085714 +vt 0.884615 0.100000 +vt 0.971154 0.114286 +vt 0.884615 0.114286 +vt 0.884615 0.014286 +vt 0.971154 0.028571 +vt 0.971154 0.057143 +vt 0.884615 0.057143 +vt 0.971154 0.071429 +vt 0.971154 0.100000 +vt 0.884615 0.000000 +vt 0.971154 0.014286 +vt 0.975962 0.028571 +vt 0.985577 0.014286 +vt 0.985577 0.028571 +vt 0.985577 0.042857 +vt 0.985577 0.057143 +vt 0.985577 0.071429 +vt 0.975962 0.085714 +vt 0.985577 0.100000 +vt 0.980769 0.100000 +vt 0.985577 0.085714 +vt 1.000000 0.071429 +vt 0.995192 0.085714 +vt 0.995192 0.028571 +vt 1.000000 0.057143 +vt 0.990385 0.100000 +vt 1.000000 0.042857 vt 0.298077 0.714286 vt 0.197115 0.714286 vt 0.326923 0.714286 @@ -3304,39 +3304,39 @@ vt 0.177885 0.714286 vt 0.168269 0.714286 vt 0.293269 0.714286 vt 0.283654 0.714286 -vt 0.509615 0.700000 -vt 0.451923 0.714286 -vt 0.451923 0.700000 -vt 0.509615 0.657143 -vt 0.451923 0.671429 -vt 0.451923 0.657143 -vt 0.509615 0.628571 -vt 0.451923 0.642857 -vt 0.451923 0.628571 -vt 0.509615 0.714286 -vt 0.451923 0.728571 -vt 0.509615 0.685714 -vt 0.451923 0.685714 -vt 0.509615 0.671429 -vt 0.509615 0.642857 -vt 0.509615 0.728571 -vt 0.451923 0.742857 -vt 0.514423 0.714286 -vt 0.524038 0.728571 -vt 0.519231 0.728571 -vt 0.524038 0.685714 -vt 0.524038 0.671429 -vt 0.524038 0.642857 -vt 0.514423 0.657143 -vt 0.519231 0.642857 -vt 0.524038 0.714286 -vt 0.524038 0.657143 -vt 0.538462 0.671429 -vt 0.533654 0.714286 -vt 0.538462 0.685714 -vt 0.524038 0.700000 -vt 0.533654 0.657143 -vt 0.538462 0.700000 +vt 0.971154 0.071429 +vt 0.884615 0.085714 +vt 0.884615 0.071429 +vt 0.971154 0.028571 +vt 0.884615 0.042857 +vt 0.884615 0.028571 +vt 0.971154 -0.000000 +vt 0.884615 0.014286 +vt 0.884615 0.000000 +vt 0.971154 0.085714 +vt 0.884615 0.100000 +vt 0.971154 0.057143 +vt 0.884615 0.057143 +vt 0.971154 0.042857 +vt 0.971154 0.014286 +vt 0.971154 0.100000 +vt 0.884615 0.114286 +vt 0.975962 0.085714 +vt 0.985577 0.100000 +vt 0.980769 0.100000 +vt 0.985577 0.057143 +vt 0.985577 0.042857 +vt 0.985577 0.014286 +vt 0.975962 0.028571 +vt 0.980769 0.014286 +vt 0.985577 0.085714 +vt 0.985577 0.028571 +vt 1.000000 0.042857 +vt 0.995192 0.085714 +vt 1.000000 0.057143 +vt 0.985577 0.071429 +vt 0.995192 0.028571 +vt 1.000000 0.071429 vt 0.144231 0.314286 vt 0.115385 0.314286 vt 0.557692 0.542857 @@ -3410,14 +3410,14 @@ vt 0.903846 0.428571 vt 0.932692 0.428571 vt 0.961538 0.371429 vt 0.961538 0.428571 -vt 0.524038 0.857143 -vt 0.519231 0.757143 -vt 0.524038 0.742857 -vt 0.528846 0.757143 -vt 0.524038 0.742857 -vt 0.528846 0.728571 -vt 0.524038 0.628571 -vt 0.528846 0.642857 +vt 0.985577 0.114286 +vt 0.980769 0.014286 +vt 0.985577 -0.000000 +vt 0.990385 0.014286 +vt 0.985577 0.114286 +vt 0.990385 0.100000 +vt 0.985577 -0.000000 +vt 0.990385 0.014286 vt 0.230769 0.200000 vt 0.461538 0.000000 vt 0.000000 0.885714 @@ -3451,7 +3451,7 @@ vt 0.817308 1.000000 vt 0.557692 0.885714 vt 0.605769 1.000000 vt 0.629808 0.885714 -vt 0.509615 0.742857 +vt 0.971154 -0.000000 vt 0.307692 0.714286 vt 0.206731 0.714286 vt 0.336538 0.714286 @@ -3460,7 +3460,7 @@ vt 0.221154 0.714286 vt 0.365385 0.714286 vt 0.250000 0.714286 vt 0.264423 0.714286 -vt 0.509615 0.742857 +vt 0.971154 0.114286 vt 0.211538 0.628571 vt 0.153846 0.628571 vn 0.0000 -1.0000 0.0000 diff --git a/src/main/resources/assets/hbm/textures/models/bombs/n2.png b/src/main/resources/assets/hbm/textures/models/bombs/n2.png index f8d6f2089e1721d0652a92abec9cde48bfc2c414..f3965352d135ff96b840bf8defef0e3e99176a40 100644 GIT binary patch literal 8612 zcmcIq`9Bkm|94BSO1VP`m7Cm5rINQ?=^!(5mitP^Hl!@MQ*M@Ai7;}7ImSkgk^9;( zHo0bu8OFEIAMt%X9?#eF^?E&Czr0?*Js*!}oVBGX|7r2lEG#ViX7}$r{KrxM!zr$R z84Y;e_m6l2?%M~mu&BuX53FIu#-S`MGAw3yZaoTP-N^IpcYpdAi__c*nFg0Vj%Mrr z-F)T>>&y6J@%z(nu73M+uJFvIg}eM(E^1d_yjOj3-o-jbKKo3!AY@qZI!xyBWeyIG zTZ)%2Z$G)JI`T(&#**NHVa}`_4T3z4$pFn|^v^s!gWye2#E+AMs=5h0c{Z35Ov!t0 zH}fpIj?J5M{B*?yJH_fJ&Oh4!-v*oDX|a zW!>NXS55s$>1?!yikpW+*SpmK0nR7u*Dn!}u2|vS>51cii#d0LI!J^ImBQ+sq*yVJo{E|98>N=$9czJ$V<2jRhWmK8$8CL3;*TwvL5LkH6rH zm6b6c1=vI~@^b)K^QG2AB=#I^Ebrj-&l%dg$qhcg*Yr-^@|WOSJ0-VB`|ZXc+cB`_ z7v~lf+k0_*TJlUYXO-fFa?O5CY+alULgd-SoSWbcisOYzG#lw|zeX8GOv=ntNuz4V zid1*p>iyeWyNPZ0^t`!-2mxQ4RqJ?ha8+}-ceMt0ov?FZ(vN~4K#=XNh3C+mC1eJ| z;_UX(=V*!U<9x(oc8A}E%sKYP72WD6m0uhKQaN&}8Z}SPQN1H6RX3Zs-%qR)3YXQgA5UH+x=JGvaI!%UNTdn+%2u4c$vtISjCEte;aXlpQoWh zOQNNPK66y&Jf6Ev9 z%?+dabGapg#g-#eh|tfjY5+|CeCN_iY*!VuNS%8(z`Ez zsP{wxKtIHX9txX|D=X0i9$*kjL6sL3>_At1n(%`Jq2bb(G{4h~nyTFCrGhFt%T&~? zfQqRY-tCQPP;}sqTV<>i7jCm+P3I1BOz|!zcQdF`WEbdF5xv`8X$9jBe3@D+SOe3$ zH^(A6_xMdGm^^sfDj0hy=M)Nze($J%NSzrP{8k>NRZ}Wo!C9A}Y3MZ|nxMN{k%X5o zSs-Z#?!96U)AsaSYPrVuaraU~xqg@qJ1gxk?ie09f)Xc`vK*?HX>MM>dGW`XUChe@ zz2WMS#@qX!)V{y9I(F{%v~=4|vpu^?X8rwZtR$vYz(;B04++`j4d)WZhMT1(Ki3+qW#qefL<+>p5bWmp>;dJ&!+b8*A@&|Vim#bi zqoLgz{R1nd7N?X~_MpzfX4N{B$LQGfbbPOC6_?6)Q4+rLoB{x`%GGZF^<1PYdxj8@ z&4tkXnnI&pBB@gV0M|iR?K@IL^zF4~8mhxDl)1?Z1&y}6U!55V$aQvJe4&sFI~WRf zYyE|iAA#TI92$A{1!8vkVO&QXt|sRi(aufHJh7XyUOVtnL?RO7clrR2I!^>uy{sPbn;`3EZNA-t^`Hm01Kj-!NvK3`KyK^jFIJ#)n);Wi?YWoje&R;f8Ah5_oR#JUAyVvlgC({6R+>2fwd1PD9Xt zuo`K7nC|`@T9M_n{_Q`%rF5^qC4U*e_uukXSuvndp=m=Oe5H-TL$2o*`EeaWK3kj0P_KOT zVPo1cM>BXnT^qG%2R#=GpefUWWAxmP9ts#uKz-K*!8tm?MNe+5y%~Ihx4nvPrmuO= zyq*JBY!=C+DjmSi7H+vT`d~-k;cuFCce7JJYMLG5KIPopy1ni4#zqxZrXy^~xL*IZ zRrRl37zxwS66EL@MkY$HwomSFDG=vC$8mGvv)y#>{1;-03X(i-E`-OwyD|A9Y#$7d z_u*9t1d3(69?7O6#j=K*uGy-uFfC2orFw0M=dR>U9z3b;+5_8+4U-4jCuMqWtjm`x z2VaU{Z=#jN9_=~LxRDP>!!Tt$pSYp^70VRtF@0Jqj$+E1UEt_6suRE7Gs{c4uK zuU85!g(&yxLZYhbUR#A` zXjO2{aNw@Dh`3W7zrXD;L?UU0z&oU?dPB;R&#u92n4l;Fg!Nk!6*YUwW#^ zfUchl5Ihr2&N#~Tk?xmqaZZz+8H(#YQ1X00x=_gzM?r2J<>JKk3VWey;oLuM|$CYeR?QaThM=iL_^o@k6^OD-@`I0ViM5j}l0?d-~_CABf8p0$^AQ zbHUx768gJYvTIA#gz!aovPhC{E$ijAd3omwOP9cv4)^9Im%Ofrl1D?{#K%2P!1&)s z)7^d_+-Hfqj%AZ6+ly%AC&kPb(J52Q!`}m6)_2znjp(Fu0Z_0GrXz;?hLu(itakeI zwB!#}URS?dzlc@%?XRFSy^3%u-=DVY-y-?`n6c%(su6h_G5Gf2o~4hJI*p67ALi7SG^`yye8^LYp0Ic^x|2KY9 zH{m2VS4n-hk49OVCKc~e+bA(@7etyj#vPLR1a(gw;12#x7Go6|eWK!HX`XGY%UIJX z6uH+`z02-TUn&2Qa>ML1+uMHOwLV(P4&cTe72y-RIgZ`dY&L^cix<~=Q8j0`Axmk> znXE{Ctn!d4J35!1uiQGS(#uDv8|#kZ40{Az(`e zE!&1CrD9jMxiF?G5!9(zO8||$o-Eih8+rxB9-V|HM{Z3yIni!VSL{~|`m%8HSJMxw zI22il->utsccN$JOuLo}2%{x*)>G%>$MTb};YX^%#sh|5JL=Cuc9eyPk*5n=xnB`9_L5b8tQ<9svIp3ncRbw40Q0)eIJ&c5e51*4Oeeb1DLWr zCeUe~f>x;gn(WBIS4vi~RuT%tPm0x*7OBs&vLlDbO5Y+;OC#i>q-XRWAl3sOvgSNS z!e6wK*}1T)z?!CZ3e~fp8A4i9$Ysh50M(N;H)ADG+7QO{TB)v9G%ZCZkGfRPEg;B< z|EG}n#sMJ(^dyj>E^^-I;Dd?aW=W2pB#PF(_SOQ5E08{z9qLO&9Z_?;G>U#d)^xGy z5eb6kdadLRP1jfM7f^IzeFGaxvS-tx6Exw9CMbvQshdl8Ho+s#ufNg&xZgRioPDPk zNd2DcCth6ln#0uSk?jqiA~Jj08e-Vloe*u3v`Omn*0u8YwuT#13VoBl0cw>`E58B) zs+kOZ*OVr18C7QR@oIZuECJ>KKHW&H)X4TfzrA#CYn>UfHo~$$+iyCT^psV6#Ug56 zGGT|!O{r$59v7-tGe|ZLOT1wCBPs!TQ9q=blv1UiRh~gr_w@M2K;OP4YD&OYJRBg?=WvlR|xOx<(`-Pr0CgY6XkP}C0aO`ZPQBXoAr z#t@+Ap-P_YQTJ0|rP2z>XUHC6vX(nTNgzV|IwS=4tm5U;+2a{cWc%_m=%pz(BO0R4 z!L)Z5QflR^n5VK<78{mOI8SL`B`SI2IB#Ni{*$k_+b6}jS0=KN^btTD?DG{xq zzWdy!2Ik6sm=y((0}wjxaRro*(A5U}>8a|CO~rfi#g6-^@0DrxW8oVcLA3(_H6V3P zCFhHq?q6|JQaLSNu-2Gs`A+5w`L)*W=`^2Qej7E~KG{UzRZ^DB{(9AbWVM81-&9hv zsGDz3{l|yCS?upz4|~+B4K*;r2PtCS<+tfyF4onwHc@kxN;i`ntd3lixjmWohxKd4 z2>#)@bB|6R`81Ut7Lfku|F$zNvk>qi#FMtaA zWyiZ3W-BNlpshUsG)a2L=eWd!GUnMbRedV=9q2nqDoX@i4A!bN6obzO7oyvYrwyNN zI=>89!tXzxGJ4?8;SRM_F)&ZC%(~MhvO8KM{U6nyOEoE<-^5m790`41uDcm5q;{y1jq2jo0DB9s`u>Q^UCJ`qChbvfxDBC&tfF3XkD zQ{1E~ls^iM`$?xI)ynk+3cr=|Bhm~(M%CW6gr&4#$KUJ`#P^d3#=1heM7SWhYi%Ui z_-L3uusvZ+T)sZ?jc(2~_&R{s_Lf#i4o*;V5Mor+5-p%iS8MHO0X@o>_YBJ{M8RFF z6kP;otMVb2G4J_jNSBpicW8P5bl<)n=s~kRh~MN>kS#)v2w+BN2e_WEll<=p>ipJ_MnF1D(=su@|)rDRWqgT3+xeObAGU8-@TjGcSQvLf_9niDv(E}E9>VKF& z6ehPqo$OQ~sgvUv(FJ-|jkjwVNI#a|s7u(hIQv#_Jhau~1QxV)_u)WHpmc+M&L^BW zl-3vcX=C875^-I%vgip--9KbiI_#JeZSJ)Hd*Kj4Ekr9f;DJJmHBN&=A75XzWH<;x zk>@5RF+E4l8u`cpiFylZ;v1dA>kypKCv1`T5cgBHZTP_ zPIhBTHcb9EP=%|yl)ZGDlql1{h`EQogi_D7`>x8~nicSHia)Pgy>Sm#kq=OqT-)7Q z_fSGnu7%daDUIx>)rmtJN-AJFQRmY5|yg$$QlwmX*Qh^Qa)(* z-f@*$8s{r%F>&~J(r ztqkKe&nJkG0zRP>0*A(?m@IzYfS4awK%3jb3In2IS{WJ;_U-2wV|?p?F+& zFy_WOcib*CNmU)cu=J395Xt}ZOG<#+Adfdi;X*-1yrN(xiQsXOM<)lkcc7Nu2TG7c z83t9%NwsQ+EyJvvrV0aN;LP1NhKFNGhVPV>*bp4Bjb9);?H+v)9JD)gK7rTqZ#fui zvTUzwWq-7V0}dGNlZv`{q^m~HA{0AI0riJt&Ihj6yvX2N_s8ReDg=Av>>r>9JmL7S zrZomcJ0(WfOpYwjC0j*14tys8Trl4Ybe7&5GJSe_3AK@+js2v(g%DqR(`h{x|>vzuCR8Z0xZX z5U%xix$MUt)qM|#ocZj$2WE*m`wfxM(cvtln1qBMi?I(j!zjlC5j z&2D4gLxQMtGCUK@E4{7Ob&BX?mNV7g`2xZt=!Wu{&PTPzV;$ zM8Ym_59K(|zu`3kV5*;HFh&5$S zt3j5x>d+Jvbqwvq9B_#BZ=QdC0gcwI3>(}kQUE?F^Y03ssdQS?e9#QqJ>sP8Xk;ttHFG1tg3;WbD%&7HfzS#3(uez|p-U$c zZ3iU_JjrcEkb5Ud+h)0~%j|jZ63D@RfKVS`6|4AZkJ}E4F>*xOCjrZUjjI%e0rdls z^Hvq1KMy=3m&1iblQt?S@f8D*F+oPM{tA8JGNU@t$sTG^|X`d{0{MO}CBJ z;6JOYK9ZmCr5}p2!@`v^Ga>yzSj4(HVCCicSeHo+ZQbdk>Vk+4^L#)Hc>^I1J2C|U z@jEAN3tG!KbQN=1N1%ZKo7u8ejqoU5^k+?QI{bx@0MM!^7aI@BRqy@5YdIwl@N~g4 zu>7*o62#h6fYlnb?J29P>gGV=Wgg{63&}hS`U75Hqq80PIm&nCr^Ru|-C$^QA=G+;N^Y3@*SBXjJgYU7LTYbUtKSzU*pQwGsd!J02=tv{qajbqBz$=eXMPMzGX4VXP?ZEbpTd zZ4@HXQraEkKne9yGcz3p@tH_l&3pDz*!_1_N+Gab_yCC+#hZ(J5^@7fL+Yp=04lYs zr!b-@5In!WH(f-{jWjkmYj@{J!s>nj+HwTG&shBevpsso!+T5B{sM-3!_pEc75~?_ zLnOX9w`t);ni>pE7ClHMWq$u&Hj%EkvuM?Bqvo`mYGptiCbmg%i-OmOm(#%=VJW3e zv9qfMk@e+$&~lrlO8{5x-r7=@xYHKhwP^x*&25`rZBG7|y8ifQ--u65J3Dbu?I{3e zc<5^rXwSZ}fa0e&`KFfp|A)*r526**cmDr(12DL`mhxOd#MMg76lZ+U=|F+kJpn%UHYrZOI z=ke%cr*}4k5S5$BX--P6Zi0;UYZ}@x>2|_nXCLLSFdI+kWsg2pvI_*s6gB#_ZeobZ zrLO9b)+p?6ZLh@o5bLfJg9r7RKg!v@d%q!Mf{Vrj`VPe4ZVTf$$}YLe-qm%ud#haT z_+HB09?6weI?enHij;)VlNk{uOXPP*2+&grg|uv+`MBj=dEEZW0cGM@ zQEaXy>H7P8jO3YFQ@RiOnV@bHVreNY0+2ta zI#Ht<&RZfS@CrktvyR3Ov;;+WB&%CUZ>;`&Y7Jh&?o-i%D!PsRHuo01bo@?Py-^#K z&dTBa&gn>Kzf)1I^t=YQ_X_TxDc|ltPc38zFGh)xd6weh1{xFYw%ri6vSK&sLyne} z;`A}_wgatSSx%3O;F4__Mmc$=`8h2#%!P~<1qa88Kq38PycKj=itv58&;iJK(7kHa z=#%`;1Fx4R>RqmmsdMv>-Q>q^Z*o>PNtV#EUWw6JgyZa%UC88T-Mz9{BvPQb zJh%{xVKo_mw%}NDa;!M*;XZ?%iJv2Ur$i1*%-b6OM)H@ZNu`aw=&-m6C1_rI<}eBV zb3CDO(CcX>nf+8IP`Cm6+_V%SFrWLCg@sk^e_nw7S=Z95)JS!YK1;oT4JPXuy^^54 z*^morOZ~`nfGLZo|DvBPsB6x2B3c zRyOmD`49<#z$f7^JS|>TGvcUU{Ln_{$YnWO+MjdPRbbmx-S33o32-WF`R9?){<3(l?fMWM^~#a*%FL}cJnCgj7{X;lUYs+MOg&o_W8HT`o}Yd*wqzpDYQn#lzxZRD_CGSa MYk8;gw)30+12PV-5dZ)H literal 4160 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 sj@$$}$v%tedI%h2uP43LKJ+c5uxbN2R1lJ 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 RV-^4a002ovPDHLkV1mC{NzVWP delta 4401 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 From 9dbe5964014cf7bf038ac39ea1e120b13f358a97 Mon Sep 17 00:00:00 2001 From: Justnightheron Date: Tue, 10 Jun 2025 14:04:20 +0800 Subject: [PATCH 159/491] LENS --- src/main/resources/assets/hbm/lang/zh_CN.lang | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 20b27d397..41847c119 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -16,7 +16,7 @@ achievement.bossMaskman.desc=淦飞那个大男孩 achievement.bossMaskman=6个月的强制服务,我只得到一件糟糕的T恤 achievement.bossMeltdown.desc=比伟大更可怕,但我会竭尽所能 achievement.bossMeltdown=3.6伦琴 -achievement.bossWorm.desc=“绝学法杖”。什么鬼啊。你自己看看吧。 +achievement.bossWorm.desc=只是一条金属小蚯蚓罢了。 achievement.bossWorm=拆掉机械蠕虫 achievement.bossUFO.desc=哟,那是啥东西?一艘正接近我们工事的巨大飞船? achievement.bossUFO=呀哈哈哈,笑死我了 @@ -2139,8 +2139,6 @@ item.canned_tuna.name=金枪鱼罐头 item.canned_tuna.desc=我不知道那是金枪鱼还是干水泥。 item.canned_yogurt.name=酸奶罐头 item.canned_yogurt.desc=可能坏掉了,但管它呢 -item.canteen_13.name=Vault13水壶 -item.canteen_fab.name=极品伏特加 item.canteen_vodka.name=伏特加 item.cap_fritz.name=弗里茨瓶盖 item.cap_korl.name=Korl瓶盖 @@ -2577,7 +2575,6 @@ item.euphemium_plate.name=Ep胸甲 item.euphemium_stopper.name=Ep-阻滞者 item.explosive_lenses.name=炸药透镜阵列 item.explosive_lenses.desc=8个PBX炸药组装的阵列,带有一个薄的$铝推进器、硬铝外壳和$小型桥丝雷管。 -item.fabsols_vodka.name=Fabsol伏特加 item.factory_core_advanced.name=高级工厂能源组件 item.factory_core_titanium.name=工厂能源组件 item.fallout.name=一堆辐射尘 @@ -2815,7 +2812,7 @@ item.hazmat_plate_red.name=高级防辐射胸甲 item.hazmat_red_kit.name=高级防护套装 item.heart_booster.name=心之增强器 item.heart_container.name=心之容器 -item.heart_fab.name=心脏抗原结合器 +item.heart_fab.name=黑暗之心 item.heart_piece.name=心之碎片 item.heavy_component.name=重型%s组件 item.hev_battery.name=套装电池 @@ -3593,7 +3590,7 @@ item.plate_fuel_u235.name=高浓度铀-235 板状燃料 item.plate_gold.name=金板 item.plate_gunmetal.name=炮铜板 item.plate_iron.name=铁板 -item.plate_kevlar.name=凯夫拉陶瓷复合材料 +item.plate_kevlar.name=凯夫拉板材 item.plate_lead.name=铅板 item.plate_mixed.name=合金板 item.plate_paa.name=PaA合金板 @@ -5005,9 +5002,7 @@ tile.factory_titanium_furnace.name=工厂端口 tile.factory_titanium_hull.name=工厂外壳 tile.fallout.name=辐射尘 tile.fan.name=风扇 -tile.fan.desc=使用红石激活$将实体推至最多10个方块外$用螺丝刀右键点击即可翻转$使用手钻右键切换模式 -tile.fan.falloffOn=风扇功率随距离增加而减小 -tile.fan.falloffOff=风扇功率恒定 +tile.fan.desc=使用红石激活$将实体推至最多10个方块外$用螺丝刀右键点击即可切换模式 tile.fence_metal.name=铁丝网围栏 tile.fence_metal_post.name=铁丝网围栏立柱 tile.field_disturber.name=高能场干扰机 @@ -5190,7 +5185,6 @@ tile.machine_assemfac.name=装配厂 tile.machine_autocrafter.name=自动工作台 tile.machine_autosaw.name=自动嗡嗡锯 tile.machine_autosaw.desc=砍伐附近的植物,重新种植树木$接受:$-木油$-乙醇$-鱼油$-重油 -tile.machine_autosaw.suspended=暂停 tile.machine_bat9000.name=巨尻-9000 储罐 tile.machine_battery.name=蓄电池 tile.machine_battery_potato.name=马铃薯电池组 @@ -6075,3 +6069,25 @@ item.ammo_secret.bmg50_black.name=.50BMG旁道者弹药 item.ammo_standard.bmg50_sm.name=.50BMG子弹(星辉) item.gun_amat_penance.name=忏悔 item.gun_amat_subtlety.name=明敏 +chem.hydrogen=煤炭提取氢 +chem.hydrogencoke=焦炭提取氢 +chem.oxygen=压缩空气分馏生产液氧 +chem.xenon=林德循环制氙 +chem.xenonoxy=增强林德循环制氙 +chem.helium3=月壤提取氦-3 +chem.ethanol=乙醇生产 +chem.biogas=沼气生产 +chem.biofuel=生物燃料酯化 +chem.reoil=再生油生产 +chem.gasoline=含铅汽油基油生产 +chem.tarsand=沥青砂提取沥青 +chem.meatprocessing=异虫肉处理 +chem.birkeland=伯克兰-艾德法制硝酸 +container.machineChemicalPlant=化工厂 +damage.category.EN=能量 +item.part_generic.glass_polarized.name=偏光镜片 +tile.fan.falloffOn=风扇功率随距离增加而减小 +tile.fan.falloffOff=稳定的风扇功率 +tile.glass_polarized.name=偏光玻璃 +tile.machine_autosaw.suspended=暂停 +tile.machine_chemical_plant.name=化工厂二代 : 电子布加洛 From 6bfca4e1fea6aab66169a02189af231d369dd57e Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 10 Jun 2025 15:32:47 +0200 Subject: [PATCH 160/491] :b:alls --- changelog | 88 ++---------------- gradle.properties | 2 +- src/main/java/com/hbm/blocks/ModBlocks.java | 9 -- .../com/hbm/blocks/machine/BlockCMFlux.java | 9 +- .../com/hbm/blocks/machine/BlockCMHeat.java | 9 +- .../blocks/machine/MachineChemicalPlant.java | 2 + .../blocks/machine/MachineTransformer.java | 21 +---- .../hbm/entity/item/EntityDeliveryDrone.java | 8 +- .../logic/EntityExplosionChunkloading.java | 1 + .../com/hbm/entity/logic/EntityPlaneBase.java | 6 +- .../missile/EntityMissileAntiBallistic.java | 6 +- .../entity/missile/EntityMissileBaseNT.java | 8 +- .../projectile/EntityArtilleryRocket.java | 6 +- .../projectile/EntityArtilleryShell.java | 8 +- .../projectile/EntityBulletBaseMK4CL.java | 7 +- .../ExplosionNukeRayParallelized.java | 8 +- .../java/com/hbm/handler/HbmKeybinds.java | 24 ++++- .../recipes/ChemicalPlantRecipes.java | 1 + .../java/com/hbm/items/IKeybindReceiver.java | 1 + .../com/hbm/items/armor/JetpackBreak.java | 3 +- .../com/hbm/items/tool/ItemToolAbility.java | 71 +++++++------- .../sedna/mags/MagazineSingleTypeBase.java | 6 ++ src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 6 +- src/main/java/com/hbm/main/MainRegistry.java | 3 + .../hbm/packet/toserver/KeybindPacket.java | 1 - .../java/com/hbm/tileentity/TileMappings.java | 1 - .../tileentity/machine/TileEntityHadron.java | 33 +------ .../machine/TileEntityMachineTransformer.java | 6 -- .../world/gen/component/BunkerComponents.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 13 +-- src/main/resources/assets/hbm/lang/en_US.lang | 11 +-- .../hbm/textures/blocks/hadron_cooler.png | Bin 284 -> 0 bytes .../hbm/textures/blocks/hadron_cooler_mk2.png | Bin 331 -> 0 bytes .../blocks/machine_funnel_ore_bottom.png | Bin 319 -> 0 bytes .../blocks/machine_funnel_ore_side.png | Bin 307 -> 0 bytes .../blocks/machine_funnel_ore_top.png | Bin 325 -> 0 bytes 37 files changed, 162 insertions(+), 220 deletions(-) delete mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineTransformer.java delete mode 100644 src/main/resources/assets/hbm/textures/blocks/hadron_cooler.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/hadron_cooler_mk2.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/machine_funnel_ore_bottom.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/machine_funnel_ore_side.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/machine_funnel_ore_top.png diff --git a/changelog b/changelog index de14d2348..52000176e 100644 --- a/changelog +++ b/changelog @@ -1,81 +1,13 @@ -## Added -* Two new anti-material rifle variants - * .50 BMG demolisher rounds are finally usable - * Added a special ammo type exclusive to one of the variants -* Starmetal .50 BMG now returns - * Overall better armor piercing stats than DU - * Not compatible with the M2, only usable in amat rifles -* Reworked chemical plant - * No longer needs template items for everything, comes with a convenient recipe selector GUI - * Three item and three fluids for in and outputs - * Slots are locked to the ingredients they accept, allowing for better performance and shift click support - * Item IO now works like most other machines instead of using chutes - * If the center block right above the chemplant is not air, it will render with a frame, making chemplant stacking actually nice to look at - * Now has a more convenient 3x3 footprint - * Features 12 access ports, more than enough for full coverage of the entire machine's IO - * Has an optional slot for template items separate from the recipe selector (i.e. secret recipes) (doesn't work yet since we don't have secret recipe :P) - * Ports are now standardized, no longer are fluids connected to ports that look like copper contacts - * Can't use upgrades just yet - ## Changed -* Added Ukrainian localization -* The RBMK console's grid can now be rotated using a screwdriver -* Tool abilities have changed - * Right-clicking while holding ALT now opens a configuration window - * The configuration window allows creation of tool presets - * Area and block abilities can now be toggled independently from each other. For example, the vein miner ability can be combined with silk touch - * Clicking on the same ability allows switching between levels -* Updated textures for the armor and gun modification tables -* Ported the fire extinguisher to the SEDNA gun system, eliminating the final remaining ItemGunBase gun -* Water extinguishers can now wash away foam blocks -* Obliterated Fabsol's vodka -* Tier 4 heart piece is now called "heart of darkness" -* Thermal sights now render dead mobs in black -* Guns now have unique scope overlays instead of reusing the .44 scope for everything -* The new chemplant has slightly altered recipes - * Very basic mixing recipes (e.g. coolant) have been removed, it's now required to use the mixer - * Water to hydrogen peroxide is now 1,000 : 1,000 (instead of 1,000 : 800) - * Sulfuric acid's peroxide requirement has been adjusted accordingly - * Nitric acid has an alternate recipe using air and water, however it takes 4x as long and has a base consumption of 2kHE/t - * Desh now only takes 5 seconds to produce instead of 15 - * Laminate now only takes 50mB of either fluid per recipe and processes much quicker - * Ducrete now uses U238 in the form of ferrouranium, decreasing U238 needed, and no longer requires gravel at all - * All recipes for nuclear fuel production now have a higher base consumption - * Base consumption in general has been tweaked for many later-game recipes. Many recipes however still use the old 100HE/t rate - * Cordite now uses sawdust instead of wood planks and sugar - * Kevlar is now made from aromatics, nitric acid and chlorine (or phosgene in 528 mode) - * Electrolysis using the chemplant has been removed. Hydrogen can be made using water and coal (or coke), and oxygen can be distilled from intake air - * Solid nuclear waste can also be vitrified now - * Thorium salt reprocessing now only has a 50% chance to produce a U233 nugget and a 25% chance to produce nuclear waste, making it less absurdly powerful and easier to deal with the waste - * Glyphid meat processing is now less autistic - * Making rusty steel now only takes 2 seconds per recipe - * Perfluoromethyl can now also be made in the chemical plant (technically, the process isn't just simple mixing after all) - * Recipe changes are still subject to balancing -* Removed niter to nitric acid liquefaction recipe -* Updated N2 model - * Glow in the dark paint not included (yet) -* Wooden scaffolds now have a slightly smaller hitbox and are climbable -* Hanging chains and vines can now be climbed by holding space -* Hopefully fixed the strand caster being weird for good -* Removed angry metal drop from meteorites (use the assembler recipe) -* The automatic buzzsaw can now handle crops -* The automatic buzzsaw will no longer clip through walls when extending -* The automatic buzzsaw can be turned off using a screwdriver -* Template folders now support page turning via scrolling -* Named crates will now show their names in the GUI as well as as a tooltip -* Vanilla anvils no longer increase experience costs when renaming an item -* Fans now have diminishing force, old behavior can be restored with the hand drill +* Opening the tool ability configuration menu is now its own keybind instead of using the copy tool's alt keybind + right click +* Cycling though tool abilities is now a custom keybind (still right click by default) +* Removed legacy hardron cooler +* Removed 20hz transformers +* High-octane diesel is now called high-cetane diesel ## Fixed -* Conveyor ejectors should now correctly place items onto the back of splitters instead of on the output belts -* Fixed strand caster fluid gauges going out of bounds -* Fixed arc welder and soldering station not changing buffer size based on upgrade, preventing use of higher overdrive tiers -* Fixed non-standard template folder recipes not using the correct icon -* Fixed jetpack flight time not resetting when equipped like armor, causing kicks on servers that don't have flying cheats allowed -* Fixed missing energy damage category localization -* Fixed server crash caused by tool abilities -* Fixed chunkloading entities not releasing their loading tickets properly -* Potentially fixed a dupe issue related to tool abilities -* Fixed certain sky features not being as bright as they should be -* Fixed detailed hitboxes behaving weird -* Fixed issue where empty crates would retain irrelevant NBT data, rendering them unstackable with freshly crafted crates +* Fixed new chemical plant ports not initializing their proxies properly +* Fixed chunkloading entities immediately throwing away their loader ticket +* Fixed builder jetpack not resetting flight time properly +* Fixed new chemplant's ferric schrabidate recipe +* Fixed single reload guns reloading multiple rounds at once when having multiple valid ammo stacks \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index e276ed3a5..17c61bd4b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5356 +mod_build_number=5357 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index b3e81b36b..143c33fa0 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -734,7 +734,6 @@ public class ModBlocks { public static Block hadron_analysis_glass; public static Block hadron_access; public static Block hadron_core; - public static Block hadron_cooler; public static Block pa_source; public static Block pa_beamline; @@ -854,9 +853,7 @@ public class ModBlocks { public static Block barrel_antimatter; public static Block machine_transformer; - public static Block machine_transformer_20; public static Block machine_transformer_dnt; - public static Block machine_transformer_dnt_20; public static Block machine_solar_boiler; public static Block solar_mirror; @@ -1855,7 +1852,6 @@ public class ModBlocks { hadron_analysis_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_analysis_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_analysis_glass"); hadron_access = new BlockHadronAccess(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_access").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_access"); hadron_core = new BlockHadronCore(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_core"); - hadron_cooler = new BlockHadronCooler(Material.iron).setBlockName("hadron_cooler").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F); pa_source = new BlockPASource().setStepSound(Block.soundTypeMetal).setBlockName("pa_source").setHardness(5.0F).setResistance(10.0F); pa_beamline = new BlockPABeamline().setStepSound(Block.soundTypeMetal).setBlockName("pa_beamline").setHardness(5.0F).setResistance(10.0F); @@ -1985,8 +1981,6 @@ public class ModBlocks { machine_transformer = new MachineTransformer(Material.iron, 10000L, 1).setBlockName("machine_transformer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_transformer_iron"); machine_transformer_dnt = new MachineTransformer(Material.iron, 1000000000000000L, 1).setBlockName("machine_transformer_dnt").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_transformer"); - machine_transformer_20 = new MachineTransformer(Material.iron, 10000L, 20).setBlockName("machine_transformer_20").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_transformer_iron"); - machine_transformer_dnt_20 = new MachineTransformer(Material.iron, 1000000000000000L, 20).setBlockName("machine_transformer_dnt_20").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_transformer"); machine_satlinker = new MachineSatLinker(Material.iron).setBlockName("machine_satlinker").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":machine_satlinker_side"); machine_keyforge = new MachineKeyForge(Material.iron).setBlockName("machine_keyforge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":machine_keyforge_side"); @@ -3137,7 +3131,6 @@ public class ModBlocks { GameRegistry.registerBlock(hadron_analysis_glass, hadron_analysis_glass.getUnlocalizedName()); GameRegistry.registerBlock(hadron_access, hadron_access.getUnlocalizedName()); GameRegistry.registerBlock(hadron_core, hadron_core.getUnlocalizedName()); - register(hadron_cooler); register(pa_source); register(pa_beamline); @@ -3261,9 +3254,7 @@ public class ModBlocks { register(capacitor_tantalium); register(capacitor_schrabidate); GameRegistry.registerBlock(machine_transformer, machine_transformer.getUnlocalizedName()); - GameRegistry.registerBlock(machine_transformer_20, machine_transformer_20.getUnlocalizedName()); GameRegistry.registerBlock(machine_transformer_dnt, machine_transformer_dnt.getUnlocalizedName()); - GameRegistry.registerBlock(machine_transformer_dnt_20, machine_transformer_dnt_20.getUnlocalizedName()); GameRegistry.registerBlock(machine_converter_he_rf, machine_converter_he_rf.getUnlocalizedName()); GameRegistry.registerBlock(machine_converter_rf_he, machine_converter_rf_he.getUnlocalizedName()); GameRegistry.registerBlock(machine_electric_furnace_off, machine_electric_furnace_off.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/BlockCMFlux.java b/src/main/java/com/hbm/blocks/machine/BlockCMFlux.java index 85f0d4725..6773ec560 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockCMFlux.java +++ b/src/main/java/com/hbm/blocks/machine/BlockCMFlux.java @@ -2,8 +2,9 @@ package com.hbm.blocks.machine; import net.minecraft.block.material.Material; -public class BlockCMFlux extends BlockPillar{ - public BlockCMFlux(Material mat, String top) { - super(mat, top); - } +public class BlockCMFlux extends BlockPillar { + + public BlockCMFlux(Material mat, String top) { + super(mat, top); + } } diff --git a/src/main/java/com/hbm/blocks/machine/BlockCMHeat.java b/src/main/java/com/hbm/blocks/machine/BlockCMHeat.java index f339fbb48..a43b35be2 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockCMHeat.java +++ b/src/main/java/com/hbm/blocks/machine/BlockCMHeat.java @@ -2,8 +2,9 @@ package com.hbm.blocks.machine; import net.minecraft.block.material.Material; -public class BlockCMHeat extends BlockPillar{ - public BlockCMHeat(Material mat, String top) { - super(mat, top); - } +public class BlockCMHeat extends BlockPillar { + + public BlockCMHeat(Material mat, String top) { + super(mat, top); + } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java b/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java index b68a698da..cf94cca5e 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java @@ -1,6 +1,7 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; import net.minecraft.block.material.Material; @@ -18,6 +19,7 @@ public class MachineChemicalPlant extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { if(meta >= 12) return new TileEntityMachineChemicalPlant(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid(); return null; } diff --git a/src/main/java/com/hbm/blocks/machine/MachineTransformer.java b/src/main/java/com/hbm/blocks/machine/MachineTransformer.java index 1369765fb..60751e333 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineTransformer.java +++ b/src/main/java/com/hbm/blocks/machine/MachineTransformer.java @@ -2,39 +2,31 @@ package com.hbm.blocks.machine; import com.hbm.blocks.ModBlocks; import com.hbm.lib.RefStrings; -import com.hbm.tileentity.machine.TileEntityMachineTransformer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.BlockContainer; +import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; -import net.minecraft.world.World; -public class MachineTransformer extends BlockContainer { - - long buffer; - int delay; +public class MachineTransformer extends Block { @SideOnly(Side.CLIENT) private IIcon iconTop; public MachineTransformer(Material p_i45394_1_, long b, int d) { super(p_i45394_1_); - buffer = b; - delay = d; } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { - if(this == ModBlocks.machine_transformer || this == ModBlocks.machine_transformer_20) { + if(this == ModBlocks.machine_transformer) { this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":machine_transformer_top_iron"); this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":machine_transformer_iron"); } - if(this == ModBlocks.machine_transformer_dnt || this == ModBlocks.machine_transformer_dnt_20) { + if(this == ModBlocks.machine_transformer_dnt) { this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":machine_transformer_top"); this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":machine_transformer"); } @@ -45,9 +37,4 @@ public class MachineTransformer extends BlockContainer { public IIcon getIcon(int side, int metadata) { return side == 1 ? this.iconTop : (side == 0 ? this.iconTop : this.blockIcon); } - - @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntityMachineTransformer(); - } } diff --git a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java index ac480e2e3..db9e90da3 100644 --- a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java @@ -1,5 +1,6 @@ package com.hbm.entity.item; +import com.google.common.collect.ImmutableSet; import com.hbm.entity.logic.IChunkLoader; import com.hbm.inventory.FluidStack; import com.hbm.inventory.fluid.FluidType; @@ -193,7 +194,11 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory, @Override protected void loadNeighboringChunks() { if(!worldObj.isRemote && loaderTicket != null) { - clearChunkLoader(); + + for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) { + ForgeChunkManager.unforceChunk(loaderTicket, chunk); + } + // This is the lowest padding that worked with my drone waypoint path. if they stop getting loaded crank up paddingSize for (ChunkCoordIntPair chunk : ChunkShapeHelper.getChunksAlongLineSegment((int) this.posX, (int) this.posZ, (int) (this.posX + this.motionX), (int) (this.posZ + this.motionZ), 4)){ ForgeChunkManager.forceChunk(loaderTicket, chunk); @@ -210,6 +215,7 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory, public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { ForgeChunkManager.releaseTicket(loaderTicket); + this.loaderTicket = null; } } diff --git a/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java b/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java index 6d5611950..91b4e4eb9 100644 --- a/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java +++ b/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java @@ -46,6 +46,7 @@ public abstract class EntityExplosionChunkloading extends Entity implements IChu public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null && loadedChunk != null) { ForgeChunkManager.releaseTicket(loaderTicket); + this.loaderTicket = null; } } } diff --git a/src/main/java/com/hbm/entity/logic/EntityPlaneBase.java b/src/main/java/com/hbm/entity/logic/EntityPlaneBase.java index 1a9910df7..550a86160 100644 --- a/src/main/java/com/hbm/entity/logic/EntityPlaneBase.java +++ b/src/main/java/com/hbm/entity/logic/EntityPlaneBase.java @@ -3,6 +3,7 @@ package com.hbm.entity.logic; import java.util.ArrayList; import java.util.List; +import com.google.common.collect.ImmutableSet; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; @@ -188,12 +189,15 @@ public abstract class EntityPlaneBase extends Entity implements IChunkLoader { public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { ForgeChunkManager.releaseTicket(loaderTicket); + this.loaderTicket = null; } } public void loadNeighboringChunks(int newChunkX, int newChunkZ) { if(!worldObj.isRemote && loaderTicket != null) { - clearChunkLoader(); + for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) { + ForgeChunkManager.unforceChunk(loaderTicket, chunk); + } loadedChunks.clear(); loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ)); for(ChunkCoordIntPair chunk : loadedChunks) ForgeChunkManager.forceChunk(loaderTicket, chunk); diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java b/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java index b4e296fe0..0dea01b99 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java @@ -3,6 +3,7 @@ package com.hbm.entity.missile; import java.util.ArrayList; import java.util.List; +import com.google.common.collect.ImmutableSet; import com.hbm.entity.logic.IChunkLoader; import com.hbm.entity.projectile.EntityThrowableInterp; import com.hbm.explosion.ExplosionLarge; @@ -202,7 +203,9 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements public void loadNeighboringChunks(int newChunkX, int newChunkZ) { if(!worldObj.isRemote && loaderTicket != null) { - clearChunkLoader(); + for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) { + ForgeChunkManager.unforceChunk(loaderTicket, chunk); + } loadedChunks.clear(); for(int i = -1; i <= 1; i++) for(int j = -1; j <= 1; j++) loadedChunks.add(new ChunkCoordIntPair(newChunkX + i, newChunkZ + j)); @@ -222,6 +225,7 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { ForgeChunkManager.releaseTicket(loaderTicket); + this.loaderTicket = null; } } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java b/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java index 610341732..c35497bce 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java @@ -3,6 +3,7 @@ package com.hbm.entity.missile; import java.util.ArrayList; import java.util.List; +import com.google.common.collect.ImmutableSet; import com.hbm.entity.logic.IChunkLoader; import com.hbm.entity.projectile.EntityThrowableInterp; import com.hbm.explosion.ExplosionLarge; @@ -327,8 +328,10 @@ public abstract class EntityMissileBaseNT extends EntityThrowableInterp implemen public void loadNeighboringChunks(int newChunkX, int newChunkZ) { if(!worldObj.isRemote && loaderTicket != null) { - - clearChunkLoader(); + + for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) { + ForgeChunkManager.unforceChunk(loaderTicket, chunk); + } loadedChunks.clear(); loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ)); @@ -349,6 +352,7 @@ public abstract class EntityMissileBaseNT extends EntityThrowableInterp implemen public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { ForgeChunkManager.releaseTicket(loaderTicket); + this.loaderTicket = null; } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityArtilleryRocket.java b/src/main/java/com/hbm/entity/projectile/EntityArtilleryRocket.java index 9167c33a7..47d0fbd65 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityArtilleryRocket.java +++ b/src/main/java/com/hbm/entity/projectile/EntityArtilleryRocket.java @@ -3,6 +3,7 @@ package com.hbm.entity.projectile; import java.util.ArrayList; import java.util.List; +import com.google.common.collect.ImmutableSet; import com.hbm.entity.logic.IChunkLoader; import com.hbm.entity.projectile.rocketbehavior.IRocketSteeringBehavior; import com.hbm.entity.projectile.rocketbehavior.IRocketTargetingBehavior; @@ -159,7 +160,9 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu public void loadNeighboringChunks(int newChunkX, int newChunkZ) { if(!worldObj.isRemote && loaderTicket != null) { - clearChunkLoader(); + for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) { + ForgeChunkManager.unforceChunk(loaderTicket, chunk); + } loadedChunks.clear(); loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ)); @@ -179,6 +182,7 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { ForgeChunkManager.releaseTicket(loaderTicket); + this.loaderTicket = null; } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java b/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java index 9258e5a7d..c4d6443d2 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java +++ b/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java @@ -3,6 +3,7 @@ package com.hbm.entity.projectile; import java.util.ArrayList; import java.util.List; +import com.google.common.collect.ImmutableSet; import com.hbm.entity.logic.IChunkLoader; import com.hbm.items.weapon.ItemAmmoArty; import com.hbm.items.weapon.ItemAmmoArty.ArtilleryShell; @@ -193,8 +194,10 @@ public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoa public void loadNeighboringChunks(int newChunkX, int newChunkZ) { if(!worldObj.isRemote && loaderTicket != null) { - - clearChunkLoader(); + + for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) { + ForgeChunkManager.unforceChunk(loaderTicket, chunk); + } loadedChunks.clear(); loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ)); @@ -214,6 +217,7 @@ public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoa public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { ForgeChunkManager.releaseTicket(loaderTicket); + this.loaderTicket = null; } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4CL.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4CL.java index 9e551c8e6..84f4c35c5 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4CL.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4CL.java @@ -3,6 +3,7 @@ package com.hbm.entity.projectile; import java.util.ArrayList; import java.util.List; +import com.google.common.collect.ImmutableSet; import com.hbm.entity.logic.IChunkLoader; import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.main.MainRegistry; @@ -61,13 +62,17 @@ public class EntityBulletBaseMK4CL extends EntityBulletBaseMK4 implements IChunk public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { ForgeChunkManager.releaseTicket(loaderTicket); + this.loaderTicket = null; } } public void loadNeighboringChunks(int newChunkX, int newChunkZ) { if(!worldObj.isRemote && loaderTicket != null) { + + for(ChunkCoordIntPair chunk : ImmutableSet.copyOf(loaderTicket.getChunkList())) { + ForgeChunkManager.unforceChunk(loaderTicket, chunk); + } - clearChunkLoader(); loadedChunks.clear(); loadedChunks.add(new ChunkCoordIntPair(newChunkX, newChunkZ)); diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index 08c322adf..1e0aa6991 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -335,14 +335,14 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { adder.add(damageAmount); } - public float getDamage(int bitIndex) { + /*public float getDamage(int bitIndex) { DoubleAdder adder = damageMap.get(bitIndex); return adder == null ? 0f : (float) adder.sum(); - } + }*/ - public void clearDamage(int bitIndex) { + /*public void clearDamage(int bitIndex) { damageMap.remove(bitIndex); - } + }*/ public Set> entrySet() { return damageMap.entrySet(); diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index d924a7e34..9cfcd65fb 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -1,6 +1,7 @@ package com.hbm.handler; import com.hbm.inventory.gui.GUICalculator; +import com.hbm.items.IKeybindReceiver; import cpw.mods.fml.common.FMLCommonHandler; import org.lwjgl.input.Keyboard; @@ -14,8 +15,9 @@ import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent; import cpw.mods.fml.common.gameevent.InputEvent.MouseInputEvent; -import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; public class HbmKeybinds { @@ -28,6 +30,8 @@ public class HbmKeybinds { public static KeyBinding dashKey = new KeyBinding(category + ".dash", Keyboard.KEY_LSHIFT, category); public static KeyBinding trainKey = new KeyBinding(category + ".trainInv", Keyboard.KEY_R, category); + public static KeyBinding abilityCycle = new KeyBinding(category + ".ability", -99, category); + public static KeyBinding abilityAlt = new KeyBinding(category + ".abilityAlt", Keyboard.KEY_LMENU, category); public static KeyBinding copyToolAlt = new KeyBinding(category + ".copyToolAlt", Keyboard.KEY_LMENU, category); public static KeyBinding copyToolCtrl = new KeyBinding(category + ".copyToolCtrl", Keyboard.KEY_LCONTROL, category); @@ -60,6 +64,7 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(craneLeftKey); ClientRegistry.registerKeyBinding(craneRightKey); ClientRegistry.registerKeyBinding(craneLoadKey); + ClientRegistry.registerKeyBinding(abilityAlt); ClientRegistry.registerKeyBinding(copyToolAlt); ClientRegistry.registerKeyBinding(copyToolCtrl); } @@ -81,12 +86,13 @@ public class HbmKeybinds { @SubscribeEvent public void keyEvent(KeyInputEvent event) { + EntityPlayer player = MainRegistry.proxy.me(); if (calculatorKey.getIsKeyPressed()) { // handle the calculator client-side only - Minecraft.getMinecraft().thePlayer.closeScreen(); + player.closeScreen(); FMLCommonHandler.instance().showGuiScreen(new GUICalculator()); } - HbmPlayerProps props = HbmPlayerProps.getData(MainRegistry.proxy.me()); + HbmPlayerProps props = HbmPlayerProps.getData(player); for(EnumKeybind key : EnumKeybind.values()) { boolean last = props.getKeyPressed(key); @@ -95,9 +101,19 @@ public class HbmKeybinds { if(last != current) { PacketDispatcher.wrapper.sendToServer(new KeybindPacket(key, current)); props.setKeyPressed(key, current); + onPressedClient(player, key, current); } } } + + public static void onPressedClient(EntityPlayer player, EnumKeybind key, boolean state) { + // ITEM HANDLING + ItemStack held = player.getHeldItem(); + if(held != null && held.getItem() instanceof IKeybindReceiver) { + IKeybindReceiver rec = (IKeybindReceiver) held.getItem(); + if(rec.canHandleKeybind(player, held, key)) rec.handleKeybindClient(player, held, key, state); + } + } public static enum EnumKeybind { JETPACK, @@ -111,6 +127,8 @@ public class HbmKeybinds { CRANE_LEFT, CRANE_RIGHT, CRANE_LOAD, + ABILITY_CYCLE, + ABILITY_ALT, TOOL_ALT, TOOL_CTRL, GUN_PRIMARY, diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index 44cbd5ad4..ca4bcc193 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -217,6 +217,7 @@ public class ChemicalPlantRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.SCHRABIDIC, 16000))); this.register(new GenericRecipe("chem.schrabidate").setup(150, 5_000) + .inputItems(new OreDictStack(IRON.dust())) .inputFluids(new FluidStack(Fluids.SCHRABIDIC, 250)) .outputItems(new ItemStack(ModItems.powder_schrabidate))); diff --git a/src/main/java/com/hbm/items/IKeybindReceiver.java b/src/main/java/com/hbm/items/IKeybindReceiver.java index 5a44b4cce..7a6204a51 100644 --- a/src/main/java/com/hbm/items/IKeybindReceiver.java +++ b/src/main/java/com/hbm/items/IKeybindReceiver.java @@ -9,4 +9,5 @@ public interface IKeybindReceiver { public boolean canHandleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind); public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean state); + public default void handleKeybindClient(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean state) { } } diff --git a/src/main/java/com/hbm/items/armor/JetpackBreak.java b/src/main/java/com/hbm/items/armor/JetpackBreak.java index 029b00486..e5c4128f9 100644 --- a/src/main/java/com/hbm/items/armor/JetpackBreak.java +++ b/src/main/java/com/hbm/items/armor/JetpackBreak.java @@ -71,8 +71,9 @@ public class JetpackBreak extends JetpackFueledBase { world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); this.useUpFuel(player, stack, 10); - ArmorUtil.resetFlightTime(player); } + + ArmorUtil.resetFlightTime(player); } } diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index aa8ce2268..06e20e6f7 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -13,9 +13,9 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.hbm.inventory.gui.GUIScreenToolAbility; import com.hbm.items.IItemControlReceiver; -import com.hbm.handler.HbmKeybinds; +import com.hbm.items.IKeybindReceiver; +import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.blocks.ModBlocks; -import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.ability.AvailableAbilities; import com.hbm.handler.ability.IBaseAbility; import com.hbm.handler.ability.IToolAreaAbility; @@ -54,7 +54,7 @@ import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.IShearable; import net.minecraftforge.event.world.BlockEvent; -public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIProvider, IItemControlReceiver { +public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIProvider, IItemControlReceiver, IKeybindReceiver { protected boolean isShears = false; protected EnumToolType toolType; @@ -251,37 +251,6 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro } } - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - - if(!canOperate(stack)) - return super.onItemRightClick(stack, world, player); - - if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) { - if(world.isRemote) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0); - return stack; - } - - Configuration config = getConfiguration(stack); - - if(config.presets.size() < 2 || world.isRemote) - return super.onItemRightClick(stack, world, player); - - - if(player.isSneaking()) { - config.currentPreset = 0; - } else { - config.currentPreset = (config.currentPreset + 1) % config.presets.size(); - } - - setConfiguration(stack, config); - - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(config.getActivePreset().getMessage(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player); - - world.playSoundAtEntity(player, "random.orb", 0.25F, config.getActivePreset().isNone() ? 0.75F : 1.25F); - - return stack; - } - public void breakExtraBlock(World world, int x, int y, int z, EntityPlayer playerEntity, int refX, int refY, int refZ) { if(world.isAirBlock(x, y, z)) @@ -521,4 +490,38 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenToolAbility(this.availableAbilities); } + + @Override + public boolean canHandleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind) { + if(player.worldObj.isRemote) return keybind == EnumKeybind.ABILITY_ALT; + return keybind == EnumKeybind.ABILITY_CYCLE; + } + + @Override + public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean state) { + + if(keybind == EnumKeybind.ABILITY_CYCLE && state) { + + World world = player.worldObj; + if(!canOperate(stack)) return; + + Configuration config = getConfiguration(stack); + if(config.presets.size() < 2 || world.isRemote) return; + + if(player.isSneaking()) { + config.currentPreset = 0; + } else { + config.currentPreset = (config.currentPreset + 1) % config.presets.size(); + } + + setConfiguration(stack, config); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(config.getActivePreset().getMessage(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player); + world.playSoundAtEntity(player, "random.orb", 0.25F, config.getActivePreset().isNone() ? 0.75F : 1.25F); + } + } + + @Override + public void handleKeybindClient(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean state) { + if(state) player.openGui(MainRegistry.instance, 0, player.worldObj, 0, 0, 0); + } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java index 8b68e610e..74df8d102 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java @@ -98,6 +98,8 @@ public abstract class MagazineSingleTypeBase implements IMagazine for(int i = 0; i < inventory.getSizeInventory(); i++) { ItemStack slot = inventory.getStackInSlot(i); + if(loadLimit <= 0) return; + if(slot != null) { //mag is empty, assume next best type @@ -110,6 +112,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine int toLoad = BobMathUtil.min(wantsToLoad, slot.stackSize, loadLimit); this.setAmount(stack, Math.min(toLoad * config.ammoReloadCount, this.capacity)); inventory.decrStackSize(i, toLoad); + loadLimit -= toLoad; break; } } @@ -124,6 +127,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine int toLoad = BobMathUtil.min(wantsToLoad, slot.stackSize, loadLimit); this.setAmount(stack, Math.min((toLoad * config.ammoReloadCount) + alreadyLoaded, this.capacity)); inventory.decrStackSize(i, toLoad); + loadLimit -= toLoad; } } @@ -146,6 +150,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine int toLoad = BobMathUtil.min(wantsToLoad, infBag ? 9_999 : bagslot.stackSize, loadLimit); this.setAmount(stack, Math.min(toLoad * config.ammoReloadCount, this.capacity)); if(!infBag) bag.decrStackSize(j, toLoad); + loadLimit -= toLoad; break; } } @@ -160,6 +165,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine int toLoad = BobMathUtil.min(wantsToLoad, infBag ? 9_999 : bagslot.stackSize, loadLimit); this.setAmount(stack, Math.min((toLoad * config.ammoReloadCount) + alreadyLoaded, this.capacity)); if(!infBag) bag.decrStackSize(j, toLoad); + loadLimit -= toLoad; } } } diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 9a96ec0ac..27fe4f45d 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5356)"; + public static final String VERSION = "1.0.27 BETA (5357)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 294781953..5c157900b 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -2081,8 +2081,10 @@ public class ClientProxy extends ServerProxy { case CRANE_LEFT: return HbmKeybinds.craneLeftKey.getIsKeyPressed(); case CRANE_RIGHT: return HbmKeybinds.craneRightKey.getIsKeyPressed(); case CRANE_LOAD: return HbmKeybinds.craneLoadKey.getIsKeyPressed(); - case TOOL_ALT: return HbmKeybinds.copyToolAlt.getIsKeyPressed(); - case TOOL_CTRL: return HbmKeybinds.copyToolCtrl.getIsKeyPressed(); + case ABILITY_CYCLE: return HbmKeybinds.abilityCycle.getIsKeyPressed(); + case ABILITY_ALT: return HbmKeybinds.abilityAlt.getIsKeyPressed(); + case TOOL_ALT: return HbmKeybinds.copyToolAlt.getIsKeyPressed(); + case TOOL_CTRL: return HbmKeybinds.copyToolCtrl.getIsKeyPressed(); case GUN_PRIMARY: return HbmKeybinds.gunPrimaryKey.getIsKeyPressed(); case GUN_SECONDARY: return HbmKeybinds.gunSecondaryKey.getIsKeyPressed(); case GUN_TERTIARY: return HbmKeybinds.gunTertiaryKey.getIsKeyPressed(); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 1a455e86b..ab9f2f995 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1690,6 +1690,9 @@ public class MainRegistry { ignoreMappings.add("hbm:item.test_nuke_tier2_bullet"); ignoreMappings.add("hbm:item.test_nuke_tier1_target"); ignoreMappings.add("hbm:item.test_nuke_tier2_target"); + ignoreMappings.add("hbm:tile.hadron_cooler"); + ignoreMappings.add("hbm:tile.machine_transformer_20"); + ignoreMappings.add("hbm:tile.machine_transformer_dnt_20"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/packet/toserver/KeybindPacket.java b/src/main/java/com/hbm/packet/toserver/KeybindPacket.java index 945d21e69..94aac041d 100644 --- a/src/main/java/com/hbm/packet/toserver/KeybindPacket.java +++ b/src/main/java/com/hbm/packet/toserver/KeybindPacket.java @@ -40,7 +40,6 @@ public class KeybindPacket implements IMessage { EntityPlayer p = ctx.getServerHandler().playerEntity; HbmKeybindsServer.onPressedServer(p, EnumKeybind.values()[m.key], m.pressed); - return null; } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 9a125268a..f8252b5af 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -112,7 +112,6 @@ public class TileMappings { put(TileEntityMachineSiren.class, "tileentity_siren"); put(TileEntityMachineSPP.class, "tileentity_spp"); put(TileEntityMachineRadGen.class, "tileentity_radgen"); - put(TileEntityMachineTransformer.class, "tileentity_transformer"); put(TileEntityMachineRadarNT.class, "tileentity_radar"); put(TileEntityMachineRadarLarge.class, "tileentity_radar_large"); put(TileEntityMachineRadarScreen.class, "tileentity_radar_screen"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java index fdfc5e861..48e9b5535 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java @@ -400,8 +400,6 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe int charge; int analysis; boolean isCheckExempt = false; - int cl0 = 0; - int cl1 = 0; boolean expired = false; boolean cloned = false; @@ -436,8 +434,6 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe p.charge = charge; p.analysis = analysis; p.isCheckExempt = isCheckExempt; - p.cl0 = cl0; - p.cl1 = cl1; p.expired = expired; p.plugs = new ArrayList(plugs); p.cloned = true; @@ -476,27 +472,9 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe if(charge < 0) expire(this, EnumHadronState.ERROR_NO_CHARGE); - - if(cl0 > 0) cl0--; - if(cl1 > 0) cl1--; } public void incrementCharge(int coilVal) { - //not the best code ever made but it works, dammit - if(cl1 > 0) { - - double mult = 2D - (cl1 - 15D) * (cl1 - 15D) / 225D; - mult = Math.max(mult, 0.1D); - coilVal *= mult; - - } else if(cl0 > 0) { - if(cl0 > 10) { - coilVal *= 0.75; - } else { - coilVal *= 1.10; - } - } - this.momentum += coilVal; } @@ -618,11 +596,6 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe } else { p.charge -= coilVal; totalValue += coilVal; - - if(block == ModBlocks.hadron_cooler) { - if(meta == 0) p.cl0 += 10; - if(meta == 1) p.cl1 += 5; - } } continue; @@ -842,9 +815,6 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe public boolean isValidCoil(Block b) { if(coilValue(b) > 0) return true; - - if(b == ModBlocks.hadron_cooler) return true; - return false; } @@ -862,8 +832,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe b instanceof BlockHadronCoil || b == ModBlocks.hadron_plating_glass || b == ModBlocks.hadron_analysis_glass || - b == ModBlocks.hadron_access || - b == ModBlocks.hadron_cooler; + b == ModBlocks.hadron_access; } public boolean isAnalysis(Block b) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTransformer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTransformer.java deleted file mode 100644 index f6b42b9f2..000000000 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTransformer.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.hbm.tileentity.machine; - -import net.minecraft.tileentity.TileEntity; - -public class TileEntityMachineTransformer extends TileEntity { -} diff --git a/src/main/java/com/hbm/world/gen/component/BunkerComponents.java b/src/main/java/com/hbm/world/gen/component/BunkerComponents.java index ee12ac748..356164a26 100644 --- a/src/main/java/com/hbm/world/gen/component/BunkerComponents.java +++ b/src/main/java/com/hbm/world/gen/component/BunkerComponents.java @@ -882,7 +882,7 @@ public class BunkerComponents { fillWithMetadataBlocks(world, box, 1, 1, 1, 1, 1, 5, ModBlocks.concrete_smooth_stairs, stairMetaW | 4); fillWithBlocks(world, box, 1, 1, 6, 1, 3, 6, ModBlocks.concrete_pillar); fillWithMetadataBlocks(world, box, 1, 3, 1, 1, 3, 5, ModBlocks.concrete_smooth_stairs, stairMetaW); - placeBlockAtCurrentPosition(world, ModBlocks.machine_transformer_20, 0, 1, 2, 1, box); + placeBlockAtCurrentPosition(world, ModBlocks.machine_transformer, 0, 1, 2, 1, box); placeBlockAtCurrentPosition(world, ModBlocks.cable_diode, decoMetaN, 1, 2, 2, box); placeBlockAtCurrentPosition(world, ModBlocks.machine_battery, decoMetaE, 1, 2, 3, box); placeBlockAtCurrentPosition(world, ModBlocks.deco_red_copper, 0, 1, 2, 4, box); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index c39ae14cb..819c38039 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -707,6 +707,8 @@ hazard.particleFine=Feinstaub hazard.sand=Augenreizstoffe hbm.key=NTM Hotkeys +hbm.key.ability=Werkzeug umschalten +hbm.key.abilityAlt=Werkzeug konfigurieren hbm.key.calculator=Taschenrechner hbm.key.copyToolAlt=Kopierwerkzeug: Einfügen umschalten hbm.key.copyToolCtrl=Kopierwerkzeug: Auf Rohre einfügen @@ -721,6 +723,7 @@ hbm.key.gunSecondary=Sekundärfeuer hbm.key.gunTertitary=Zielvisier hbm.key.toggleBack=Jetpack umschalten hbm.key.toggleHUD=HUD umschalten +hbm.key.toggleMagnet=Magnet umschalten hbm.key.trainInv=Zug-Inventar hbm.key.reload=Nachladen @@ -756,8 +759,8 @@ hbmfluid.death=Osmiridiumlösung hbmfluid.deuterium=Deuterium hbmfluid.diesel=Diesel hbmfluid.diesel_crack=Crackdiesel -hbmfluid.diesel_crack_reform=Hochoktan-Diesel -hbmfluid.diesel_reform=Hochoktan-Crackdiesel +hbmfluid.diesel_crack_reform=Hochcetan-Diesel +hbmfluid.diesel_reform=Hochcetan-Crackdiesel hbmfluid.egg=Gelöstes Ei hbmfluid.estradiol=Estradiollösung hbmfluid.ethanol=Ethanol @@ -4161,8 +4164,8 @@ tile.factory_titanium_furnace.name=Einfache Fabrikzugriffsluke tile.factory_titanium_hull.name=Fabrikblock tile.fallout.name=Fallout tile.fan.name=Ventilator -tile.fan.desc=Kann mit Redstone aktiviert werden$Bewegt Entities bis zu 10 Blöcke$Rechtsclick mit Schraubenzieher um den Ventilator umzudrehen$Klicken Sie mit der rechten Maustaste mit der Handbohrmaschine um den Modus zu wechseln -tile.fan.falloffOn=Die Lüfterleistung nimmt mit der Entfernung ab +tile.fan.desc=Kann mit Redstone aktiviert werden$Bewegt Entities bis zu 10 Blöcke$Rechtsclick mit Schraubenzieher um den Ventilator umzudrehen$Rechtsclick mit Handbohrmaschine um den Modus zu wechseln +tile.fan.falloffOn=Die Ventilatorleistung nimmt mit Entfernung ab tile.fan.falloffOff=Konstante Lüfterleistung tile.fence_metal.name=Maschendrahtzaun tile.fence_metal_post.name=Maschendrahtzaun-Pfahl @@ -4262,8 +4265,6 @@ tile.hadron_coil_neodymium.name=Dichte Neodymspule tile.hadron_coil_schrabidate.name=Dichte Schrabidatspule tile.hadron_coil_schrabidium.name=Dichte Schrabidiumspule tile.hadron_coil_starmetal.name=Dichte Sternenmetallspule -tile.hadron_cooler.name=Teilchenbeschleuniger-Kühlungseinheit -tile.hadron_cooler_mk2.nameTeilchenbeschleuniger-Kühlungseinheit - Das Palindrome-Spezial tile.hadron_core.name=Teilchenbeschleuniger-Kernkomponente tile.hadron_diode.name=Schottky-Partikeldiode tile.hadron_plating.name=Teilchenbeschleuniger-Außenwand diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 4c8168952..d690efe90 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1414,6 +1414,8 @@ hazard.particleFine=Particulates hazard.sand=Eye Irritants hbm.key=NTM Hotkeys +hbm.key.ability=Cycle Tool Abilities +hbm.key.abilityAlt=Configure Tool Abilities hbm.key.calculator=Calculator hbm.key.copyToolAlt=Copy Tool: Switch Paste hbm.key.copyToolCtrl=Copy Tool: Paste to Pipes @@ -1428,6 +1430,7 @@ hbm.key.gunSecondary=Secondary Fire hbm.key.gunTertitary=Gun Sights hbm.key.toggleBack=Toggle Jetpack hbm.key.toggleHUD=Toggle HUD +hbm.key.toggleMagnet=Toggle Magnet hbm.key.trainInv=Train Inventory hbm.key.reload=Reload @@ -1465,8 +1468,8 @@ hbmfluid.death=Osmiridic Solution hbmfluid.deuterium=Deuterium hbmfluid.diesel=Diesel hbmfluid.diesel_crack=Cracked Diesel -hbmfluid.diesel_crack_reform=High-Octane Cracked Diesel -hbmfluid.diesel_reform=High-Octane Diesel +hbmfluid.diesel_crack_reform=High-Cetane Cracked Diesel +hbmfluid.diesel_reform=High-Cetane Diesel hbmfluid.egg=Dissolved Egg hbmfluid.estradiol=Estradiol Solution hbmfluid.ethanol=Ethanol @@ -5387,10 +5390,6 @@ tile.hadron_coil_neodymium.name=Dense Neodymium Coil tile.hadron_coil_schrabidate.name=Dense Schrabidate Coil tile.hadron_coil_schrabidium.name=Dense Schrabidic Coil tile.hadron_coil_starmetal.name=Dense Starmetal Coil -tile.hadron_cooler.name=Particle Accelerator Cooling Unit -tile.hadron_cooler.desc=Cooling power: 10$Overcooling threshold: 10$Cooling bonus: +10%%$Overcooling penalty: -25%% -tile.hadron_cooler_mk2.name=Particle Accelerator Cooling Unit - The Palindrome Special -tile.hadron_cooler_mk2.desc=Cooling power: 5$Efficiency function: 2-(cooling-15)²/225$Maximum penalty: -90%% tile.hadron_core.name=Particle Accelerator Core Component tile.hadron_diode.name=Schottky Particle Diode tile.hadron_plating.name=Particle Accelerator Plating diff --git a/src/main/resources/assets/hbm/textures/blocks/hadron_cooler.png b/src/main/resources/assets/hbm/textures/blocks/hadron_cooler.png deleted file mode 100644 index 04e26493292b22c1008c60d71b6f3366c2b0ffd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284 zcmV+%0ptFOP)ST5Jex77ho0&YD#2US{6#pCLl!RHYEi@>|i4{2&wEi z*q{uME6>mW-<^IkFUvus2BiSd#?aJt3}H|T0q~rruZMl#>H3~ZO4qw$gx|2Wt}B(4 zlttm3(liYi;3ELAWf`w=4A!_~oPah4ya#};?*ZH@F-F+&H)Dd&m6T{>D2swYsel0x zgHpl4th2w$xo0bRwCw>nm$R7mT${QM7@;F$#d=pvVuR#g+)iU58>ASM%*%3Ig(S~& iC-4u_4?()CJLV0|AlW>Lj}`O)0000xDEoC-=>p+(3p#@Tjj-09suVUY0(DzD`j9Umv#z zFNT*lR?C7ckF9r%QDeiXxZjfHF|%kx80{vVp3fZy*arYSUuhQWcV~?$#s;*yWU)Sk zSIYvxuHs{qIsVh*r}J@^$F#a+7H#P3)L{TrU#HH6naSf-etTA3l}J}5B10oxmB`J- zi5Rb|5_x@?+sDVKR`33C80|xiHzmUarby!(H#^(#pCb8~K!!$+mE`*F%m)0qNM`bX dDAJUsm~Y}8?L&b$H30ws002ovPDHLkV1kwFjF12T diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_funnel_ore_bottom.png b/src/main/resources/assets/hbm/textures/blocks/machine_funnel_ore_bottom.png deleted file mode 100644 index e1062efc4f145a66dd7cae35f4785f81162e92fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 319 zcmV-F0l@x=P)o793`Ac$Ippy)2`Do!E-T4LceV1{*Z0q_F@{$lA~ePr#&HC|dr#l@*|)BxdW;ckE%Q9{t{Zw#lfCx` za*Pq+PoQ)zH>i;Tn&g&-rfH&f6A@t;20{q5ZTl3^j>Z_)bv+eu&h6w7!c(Bk53p@p z_TP0KKt|qgptEY+Z&&WOYgS9-6d^m}nMe&;1btPF%g5)TRz_$5thJOvDRa#^6G&uh zEh2(*?vyMdhb^)QF~b~n3`Sp~YzQfEiq6f{C5Om~a{;abNXTz%qWLi16FD zjx`ZsJI}K}6u^Do9LMoc;=O;=`V|z`q-_|ztpThSp2h0*?zYwySgA7wwO00h?~vvI zHhZvJ)D*U_Z*%Lc!8Tey%dM~ASGJ9fB0@@O+AJcE+!q*({B+GLZs!01002ovPDHLk FV1iwUg8={l diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_funnel_ore_top.png b/src/main/resources/assets/hbm/textures/blocks/machine_funnel_ore_top.png deleted file mode 100644 index 6b0e57915406c8676ec82e1a4477ffdfa9e8cf6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325 zcmV-L0lNN)P)F>b^l5Jg{Bn+jP0iku-8MY=S;fIHun-e+*X7f1m_XsQ%R z5n+SZ&aU=LNa)Y}uRkzPZ|@&JN+}+Jh;UX)F^(euAq1?o&AsLdpL3?`I;LsjTo=6e z030O}5del^AmU6&*s!M zr4%Wp)nFUB2yStUK^^H{XswSE+=FI>@+FVp1kiO|Lq5N}UN!D Date: Tue, 10 Jun 2025 20:35:59 +0300 Subject: [PATCH 161/491] =?UTF-8?q?=F0=9F=85=B0=EF=B8=8Fss?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/uk_UA.lang | 62 ++++++++++++------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 28776824b..9891b1542 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -566,6 +566,21 @@ cannery.schottky.7=If any virtual particles encounter any malformed segments, al cannery.schottky.8=Note that virtual particles will never use the same Diode exit twice. Infinite loops will fail, but re-entering a Diode is otherwise fine cannery.schottky.9=Your Schottky Particle Diode should be properly enclosed, with free paths for each intersection exit +chem.hydrogen=Водень +chem.hydrogencoke=Hydrogen from CokeAdd commentMore actions +chem.oxygen=Кисень +chem.xenon=Ксеноновий газ +chem.xenonoxy=Ксеноновий газ (Охолоджений) +chem.helium3=Гелій-3 +chem.ethanol=Етанол +chem.biogas=Біогаз +chem.biofuel=Трансестерифікація біопалива +chem.reoil=Очищення оливи +chem.gasoline=Газолін +chem.tarsand=Бітум з бітумінозного піску +chem.meatprocessing=Обробка м'яса гліфідів +chem.birkeland=Азотна кислота з повітря + chem.ARSENIC=Екстракція миш'яку chem.ASPHALT=Виробництво асфальту chem.BAKELITE=Виробництво карболіту @@ -759,6 +774,7 @@ container.machineAmmoPress=Прес для боєприпасів container.machineArcWelder=Дуговий зварювальник container.machineArcFurnaceLarge=Дугова піч container.machineBoiler=Нагрівач нафти +container.machineChemicalPlant=Хімічний завод container.machineCMB=CMB Steel Furnace container.machineCoal=Твердопаливний генератор container.machineCoker=Коксова установка @@ -1398,22 +1414,25 @@ hazard.particleFine=Твердих часток hazard.sand=Подразників очей hbm.key=NTM Hotkeys -hbm.key.calculator=Calculator -hbm.key.copyToolAlt=Copy Tool: Switch Paste -hbm.key.copyToolCtrl=Copy Tool: Paste to Pipes -hbm.key.craneLoad=Load/Unload Crane -hbm.key.craneMoveDown=Move Crane Backward -hbm.key.craneMoveLeft=Move Crane Left -hbm.key.craneMoveRight=Move Crane Right -hbm.key.craneMoveUp=Move Crane Forward -hbm.key.dash=Dash -hbm.key.gunPrimary=Primary Fire -hbm.key.gunSecondary=Secondary Fire -hbm.key.gunTertitary=Gun Sights -hbm.key.toggleBack=Toggle Jetpack -hbm.key.toggleHUD=Toggle HUD -hbm.key.trainInv=Train Inventory -hbm.key.reload=Reload +hbm.key.ability=Перемикання здібностей інструмента +hbm.key.abilityAlt=Конфігурація здібностей інструмента +hbm.key.calculator=Калькулятор +hbm.key.copyToolAlt=Інструмент копіювання: Перемикнути вставку +hbm.key.copyToolCtrl=Інструмент копіювання: Застосувати до труб +hbm.key.craneLoad=Завантажити/Розвантажити кран +hbm.key.craneMoveDown=Рухати кран назад +hbm.key.craneMoveLeft=Рухати кран вліво +hbm.key.craneMoveRight=Рухати кран вправо +hbm.key.craneMoveUp=Рухати кран вперед +hbm.key.dash=Ривок +hbm.key.gunPrimary=Основний вогонь +hbm.key.gunSecondary=Альтернативний вогонь +hbm.key.gunTertitary=Приціл +hbm.key.toggleBack=Перемикання реактивного ранця +hbm.key.toggleHUD=Перемикання HUD +hbm.key.toggleMagnet=Перемикання магніта +hbm.key.trainInv=Інвентар поїзда +hbm.key.reload=Перезарядити hbmfluid.air=Стиснене повітря hbmfluid.alumina=Оксид алюмінію @@ -1449,8 +1468,8 @@ hbmfluid.death=Розчин осмистого іридію hbmfluid.deuterium=Дейтерій hbmfluid.diesel=Дизель hbmfluid.diesel_crack=Крекінговий дизель -hbmfluid.diesel_crack_reform=Високооктановий крекінговий дизель -hbmfluid.diesel_reform=Високооктановий дизель +hbmfluid.diesel_crack_reform=Високоцетановий крекінговий дизель +hbmfluid.diesel_reform=Високоцетановий дизель hbmfluid.egg=Розчинене яйце hbmfluid.estradiol=Розчин естрадіолу hbmfluid.ethanol=Етанол @@ -3620,6 +3639,7 @@ item.part_barrel_light.name=Легкий ствол %s item.part_beryllium.name=Коробка з берилієвим пилом item.part_carbon.name=Коробка з вугільним пилом item.part_copper.name=Коробка з мідним пилом +item.part_generic.glass_polarized.name=Поляризована лінза item.part_generic.hde.name=Елемент для важких умов експлуатації item.part_generic.lde.name=Елемент низької щільності item.part_generic.piston_electric.name=Електричний поршень @@ -5346,6 +5366,7 @@ tile.geiger.name=Лічильник Гейгера tile.glass_ash.name=Попелясте скло tile.glass_boron.name=Борне скло tile.glass_lead.name=Свинцеве скло +tile.glass_polarized.name=Поляризоване скло tile.glass_polonium.name=Полонієве скло tile.glass_quartz.name=Кварцове скло tile.glass_trinitite.name=Тринітитове скло @@ -5369,10 +5390,6 @@ tile.hadron_coil_neodymium.name=Щільна неодимова котушка tile.hadron_coil_schrabidate.name=Щільна шрабідатова котушка tile.hadron_coil_schrabidium.name=Щільна шрабідієва котушка tile.hadron_coil_starmetal.name=Щільна котушка з зіркового металу -tile.hadron_cooler.name=Блок охолодження прискорювача частинок -tile.hadron_cooler.desc=Cooling power: 10$Overcooling threshold: 10$Cooling bonus: +10%%$Overcooling penalty: -25%% -tile.hadron_cooler_mk2.name=Particle Accelerator Cooling Unit - The Palindrome Special -tile.hadron_cooler_mk2.desc=Cooling power: 5$Efficiency function: 2-(cooling-15)²/225$Maximum penalty: -90%% tile.hadron_core.name=Particle Accelerator Core Component tile.hadron_diode.name=Schottky Particle Diode tile.hadron_plating.name=Particle Accelerator Plating @@ -5473,6 +5490,7 @@ tile.machine_catalytic_cracker.name=Вежа каталітичного крек tile.machine_catalytic_reformer.name=Каталітичний риформер tile.machine_centrifuge.name=Центрифуга tile.machine_chemfac.name=Хімічна фабрика +tile.machine_chemical_plant.name=Хімічний завод 2: Electric Boogaloo tile.machine_chemplant.name=Хімічний завод tile.machine_chungus.name=Парова турбіна "Левіафан" tile.machine_chungus.desc=Ефективність: 85%% From f2991e4518310cfd394d07f4b49d9ea7de2fe8de Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 10 Jun 2025 22:59:04 +0200 Subject: [PATCH 162/491] dagoth ur yaoi --- changelog | 12 ++---------- .../machine/TileEntityMachineChemicalPlant.java | 10 ++++++++++ .../java/com/hbm/util/DamageResistanceHandler.java | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/changelog b/changelog index 52000176e..5fcf22212 100644 --- a/changelog +++ b/changelog @@ -1,13 +1,5 @@ ## Changed -* Opening the tool ability configuration menu is now its own keybind instead of using the copy tool's alt keybind + right click -* Cycling though tool abilities is now a custom keybind (still right click by default) -* Removed legacy hardron cooler -* Removed 20hz transformers -* High-octane diesel is now called high-cetane diesel +* The DNT suit now has a damage threshold of 1,000 ## Fixed -* Fixed new chemical plant ports not initializing their proxies properly -* Fixed chunkloading entities immediately throwing away their loader ticket -* Fixed builder jetpack not resetting flight time properly -* Fixed new chemplant's ferric schrabidate recipe -* Fixed single reload guns reloading multiple rounds at once when having multiple valid ammo stacks \ No newline at end of file +* Chemical plant ports. For real this time. \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 8e933c2f9..ef7bdd827 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -184,6 +184,16 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem return false; } + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i >= 7 && i <= 9; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] {4, 5, 6, 7, 8, 9}; + } + @Override public long getPower() { return power; } @Override public void setPower(long power) { this.power = power; } @Override public long getMaxPower() { return maxPower; } diff --git a/src/main/java/com/hbm/util/DamageResistanceHandler.java b/src/main/java/com/hbm/util/DamageResistanceHandler.java index 559d6a578..d5e475de9 100644 --- a/src/main/java/com/hbm/util/DamageResistanceHandler.java +++ b/src/main/java/com/hbm/util/DamageResistanceHandler.java @@ -218,7 +218,7 @@ public class DamageResistanceHandler { registerSet(ModItems.dns_helmet, ModItems.dns_plate, ModItems.dns_legs, ModItems.dns_boots, new ResistanceStats() .addCategory(CATEGORY_EXPLOSION, 100F, 0.99F) .addCategory(CATEGORY_FIRE, 0F, 1F) - .setOther(100F, 1F)); + .setOther(1000F, 1F)); registerSet(ModItems.taurun_helmet, ModItems.taurun_plate, ModItems.taurun_legs, ModItems.taurun_boots, new ResistanceStats() .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) .addCategory(CATEGORY_FIRE, 0F, 0.25F) From 79dcb69ed263f9cc27d7fa2de695ce207a925eee Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Wed, 11 Jun 2025 10:18:21 +0800 Subject: [PATCH 163/491] some refactor --- .../ExplosionNukeRayParallelized.java | 18 ++++---- src/main/java/com/hbm/util/ChunkKey.java | 7 +++- .../java/com/hbm/util/SubChunkSnapshot.java | 42 ++++++------------- 3 files changed, 27 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index 1e0aa6991..e6f01e18c 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -20,8 +20,11 @@ import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.DoubleAdder; -import static com.hbm.util.SubChunkSnapshot.getSnapshot; - +/** + * Threaded DDA raytracer for the nuke explosion. + * + * @author mlbv + */ public class ExplosionNukeRayParallelized implements IExplosionRay { private static final int WORLD_HEIGHT = 256; @@ -114,10 +117,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { while (System.nanoTime() < deadline) { ChunkKey ck = cacheQueue.poll(); if (ck == null) break; - snapshots.computeIfAbsent(ck, key -> { - SubChunkSnapshot snap = getSnapshot(this.world, key.pos, key.subY); - return snap == null ? SubChunkSnapshot.EMPTY : snap; - }); + snapshots.computeIfAbsent(ck, k -> SubChunkSnapshot.getSnapshot(world, k, BombConfig.chunkloading)); } } @@ -188,7 +188,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { if (bs.isEmpty()) { destructionMap.remove(cp); for (int sy = 0; sy < (WORLD_HEIGHT >> 4); sy++) { - snapshots.remove(new ChunkKey(cp.chunkXPos, cp.chunkZPos, sy)); + snapshots.remove(new ChunkKey(cp, sy)); } it.remove(); } @@ -244,7 +244,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private List generateSphereRays(int count) { List list = new ArrayList<>(count); - if (count <= 0) return list; + if (count == 0) return list; if (count == 1) { list.add(Vec3.createVectorHelper(1, 0, 0).normalize()); return list; @@ -293,7 +293,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { continue; } - ChunkKey snapshotKey = new ChunkKey(cp.chunkXPos, cp.chunkZPos, subY); + ChunkKey snapshotKey = new ChunkKey(cp, subY); SubChunkSnapshot snap = snapshots.get(snapshotKey); Block originalBlock; diff --git a/src/main/java/com/hbm/util/ChunkKey.java b/src/main/java/com/hbm/util/ChunkKey.java index 62c2f7c9a..4f3bd0ba3 100644 --- a/src/main/java/com/hbm/util/ChunkKey.java +++ b/src/main/java/com/hbm/util/ChunkKey.java @@ -6,7 +6,7 @@ import java.util.Objects; /** * Unique identifier for sub-chunks. - * @Author mlbv + * @author mlbv */ public class ChunkKey { public final ChunkCoordIntPair pos; @@ -17,6 +17,11 @@ public class ChunkKey { this.subY = sy; } + public ChunkKey(ChunkCoordIntPair pos, int sy) { + this.pos = pos; + this.subY = sy; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/com/hbm/util/SubChunkSnapshot.java b/src/main/java/com/hbm/util/SubChunkSnapshot.java index 6e7b99cc0..cd51d125b 100644 --- a/src/main/java/com/hbm/util/SubChunkSnapshot.java +++ b/src/main/java/com/hbm/util/SubChunkSnapshot.java @@ -2,7 +2,6 @@ package com.hbm.util; import net.minecraft.block.Block; import net.minecraft.init.Blocks; -import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; @@ -14,7 +13,7 @@ import java.util.Map; /** * A snapshot of a 16×16×16 sub-chunk. - * @Author mlbv + * @author mlbv */ public class SubChunkSnapshot { /** @@ -29,42 +28,25 @@ public class SubChunkSnapshot { this.data = d; } - /** - * Creates a SubChunkSnapshot from a loaded chunk. - * - * @param world - * The World instance from which to retrieve the chunk. - * @param cpos - * The ChunkCoordIntPair identifying the chunk coordinates (x, z). - * @param subY - * The vertical sub-chunk index (0–15) within the chunk. - * @return - * A SubChunkSnapshot containing the palette and block data for the sub-chunk, - * or SubChunkSnapshot.EMPTY if the region is unloaded or contains only air. - */ - public static SubChunkSnapshot getSnapshot(World world, ChunkCoordIntPair cpos, int subY) { - if (!world.getChunkProvider().chunkExists(cpos.chunkXPos, cpos.chunkZPos)) { - return SubChunkSnapshot.EMPTY; - } - return getOrLoadSnapshot(world, cpos, subY); - } - /** * Creates a SubChunkSnapshot. * * @param world * The World instance from which to retrieve the chunk. - * @param cpos - * The ChunkCoordIntPair identifying the chunk coordinates (x, z). - * @param subY - * The vertical sub-chunk index (0–15) within the chunk. + * @param key + * The ChunkKey identifying the sub-chunk. + * @param allowGeneration + * Whether to generate chunks. If false, attempting to retrieve a snapshot of a chunk that does not exist will return {@link SubChunkSnapshot#EMPTY}. * @return * A SubChunkSnapshot containing the palette and block data for the sub-chunk, - * or SubChunkSnapshot.EMPTY if the region contains only air. + * or {@link SubChunkSnapshot#EMPTY} if the region contains only air. */ - public static SubChunkSnapshot getOrLoadSnapshot(World world, ChunkCoordIntPair cpos, int subY){ - Chunk chunk = world.getChunkFromChunkCoords(cpos.chunkXPos, cpos.chunkZPos); - ExtendedBlockStorage ebs = chunk.getBlockStorageArray()[subY]; + public static SubChunkSnapshot getSnapshot(World world, ChunkKey key, boolean allowGeneration){ + if (!world.getChunkProvider().chunkExists(key.pos.chunkXPos, key.pos.chunkZPos) && !allowGeneration) { + return SubChunkSnapshot.EMPTY; + } + Chunk chunk = world.getChunkProvider().provideChunk(key.pos.chunkXPos, key.pos.chunkZPos); + ExtendedBlockStorage ebs = chunk.getBlockStorageArray()[key.subY]; if (ebs == null || ebs.isEmpty()) return SubChunkSnapshot.EMPTY; short[] data = new short[16 * 16 * 16]; From 105f44a36afa376f513511a0df4a7c1f6830697a Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Wed, 11 Jun 2025 17:26:45 +0800 Subject: [PATCH 164/491] description update --- src/main/java/com/hbm/config/BombConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/config/BombConfig.java b/src/main/java/com/hbm/config/BombConfig.java index 7db3c427c..9d069120c 100644 --- a/src/main/java/com/hbm/config/BombConfig.java +++ b/src/main/java/com/hbm/config/BombConfig.java @@ -94,7 +94,7 @@ public class BombConfig { falloutDelayProp.comment = "How many ticks to wait for the next fallout chunk computation"; fDelay = falloutDelayProp.getInt(); - chunkloading = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.05_enableChunkLoading", "Allows all types of procedural explosions to keep the central chunk loaded.", true); + chunkloading = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.05_enableChunkLoading", "Allows all types of procedural explosions to keep the central chunk loaded and to generate new chunks.", true); explosionAlgorithm = CommonConfig.createConfigInt(config, CATEGORY_NUKE, "6.06_explosionAlgorithm", "Configures the algorithm of mk5 explosion. \n0 = Legacy, 1 = Threaded DDA, 2 = Threaded DDA with damage accumulation.", 2); } } From 9c3e6e2ce499f812b3add00b2874990898040045 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Wed, 11 Jun 2025 19:53:32 +0300 Subject: [PATCH 165/491] Me stupid --- src/main/java/com/hbm/blocks/machine/MachineFan.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index 333f7323f..bbe6081ad 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -116,7 +116,7 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro double coeff = push; - if(!falloff) { + if(falloff) { double dist = e.getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); coeff *= 1.5 * (1 - dist / range / 2); } From a9567d986b4b517ec7fbc4ebf63ede538f6ce842 Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Thu, 12 Jun 2025 16:48:37 +0800 Subject: [PATCH 166/491] refactor --- .../ExplosionNukeRayParallelized.java | 18 ++--- src/main/java/com/hbm/util/ChunkKey.java | 37 ---------- src/main/java/com/hbm/util/SubChunkKey.java | 67 +++++++++++++++++++ .../java/com/hbm/util/SubChunkSnapshot.java | 10 +-- 4 files changed, 81 insertions(+), 51 deletions(-) delete mode 100644 src/main/java/com/hbm/util/ChunkKey.java create mode 100644 src/main/java/com/hbm/util/SubChunkKey.java diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index e6f01e18c..66b88de95 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -3,7 +3,7 @@ package com.hbm.explosion; import com.hbm.config.BombConfig; import com.hbm.interfaces.IExplosionRay; import com.hbm.main.MainRegistry; -import com.hbm.util.ChunkKey; +import com.hbm.util.SubChunkKey; import com.hbm.util.ConcurrentBitSet; import com.hbm.util.SubChunkSnapshot; import net.minecraft.block.Block; @@ -41,10 +41,10 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private final ConcurrentMap destructionMap; private final ConcurrentMap accumulatedDamageMap; - private final ConcurrentMap snapshots; + private final ConcurrentMap snapshots; private final BlockingQueue rayQueue; - private final BlockingQueue cacheQueue; + private final BlockingQueue cacheQueue; private final ExecutorService pool; private final CountDownLatch latch; private final Thread latchWatcherThread; @@ -115,7 +115,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { final long deadline = System.nanoTime() + (timeBudgetMs * 1_000_000L); while (System.nanoTime() < deadline) { - ChunkKey ck = cacheQueue.poll(); + SubChunkKey ck = cacheQueue.poll(); if (ck == null) break; snapshots.computeIfAbsent(ck, k -> SubChunkSnapshot.getSnapshot(world, k, BombConfig.chunkloading)); } @@ -188,7 +188,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { if (bs.isEmpty()) { destructionMap.remove(cp); for (int sy = 0; sy < (WORLD_HEIGHT >> 4); sy++) { - snapshots.remove(new ChunkKey(cp, sy)); + snapshots.remove(new SubChunkKey(cp, sy)); } it.remove(); } @@ -293,7 +293,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { continue; } - ChunkKey snapshotKey = new ChunkKey(cp, subY); + SubChunkKey snapshotKey = new SubChunkKey(cp, subY); SubChunkSnapshot snap = snapshots.get(snapshotKey); Block originalBlock; @@ -440,7 +440,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { if (y < 0 || y >= WORLD_HEIGHT) break; if (currentRayPosition >= radius - PROCESSING_EPSILON) break; - ChunkKey ck = new ChunkKey(x >> 4, z >> 4, y >> 4); + SubChunkKey ck = new SubChunkKey(x >> 4, z >> 4, y >> 4); SubChunkSnapshot snap = snapshots.get(ck); if (snap == null) { @@ -473,14 +473,14 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { if (damageDealt > 0) { int bitIndex = ((WORLD_HEIGHT - 1 - y) << 8) | ((x & 0xF) << 4) | (z & 0xF); if (BombConfig.explosionAlgorithm == 2) { - ChunkCoordIntPair chunkPos = ck.pos; + ChunkCoordIntPair chunkPos = ck.getPos(); ChunkDamageAccumulator chunkAccumulator = accumulatedDamageMap.computeIfAbsent(chunkPos, k -> new ChunkDamageAccumulator()); chunkAccumulator.addDamage(bitIndex, damageDealt); } else { if (energy > 0) { ConcurrentBitSet bs = destructionMap.computeIfAbsent( - ck.pos, + ck.getPos(), posKey -> new ConcurrentBitSet(BITSET_SIZE) ); bs.set(bitIndex); diff --git a/src/main/java/com/hbm/util/ChunkKey.java b/src/main/java/com/hbm/util/ChunkKey.java deleted file mode 100644 index 4f3bd0ba3..000000000 --- a/src/main/java/com/hbm/util/ChunkKey.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.hbm.util; - -import net.minecraft.world.ChunkCoordIntPair; - -import java.util.Objects; - -/** - * Unique identifier for sub-chunks. - * @author mlbv - */ -public class ChunkKey { - public final ChunkCoordIntPair pos; - public final int subY; - - public ChunkKey(int cx, int cz, int sy) { - this.pos = new ChunkCoordIntPair(cx, cz); - this.subY = sy; - } - - public ChunkKey(ChunkCoordIntPair pos, int sy) { - this.pos = pos; - this.subY = sy; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof ChunkKey)) return false; - ChunkKey k = (ChunkKey) o; - return subY == k.subY && pos.equals(k.pos); - } - - @Override - public int hashCode() { - return Objects.hash(pos.chunkXPos, pos.chunkZPos, subY); - } -} diff --git a/src/main/java/com/hbm/util/SubChunkKey.java b/src/main/java/com/hbm/util/SubChunkKey.java new file mode 100644 index 000000000..068bdfef8 --- /dev/null +++ b/src/main/java/com/hbm/util/SubChunkKey.java @@ -0,0 +1,67 @@ +package com.hbm.util; + +import net.minecraft.world.ChunkCoordIntPair; + +/** + * Unique identifier for sub-chunks. + * @author mlbv + */ +public class SubChunkKey { + + private int chunkXPos; + private int chunkZPos; + private int subY; + private int hash; + + public SubChunkKey() { + this(0, 0, 0); + } + + public SubChunkKey(int cx, int cz, int sy) { + this.update(cx, cz, sy); + } + + public SubChunkKey(ChunkCoordIntPair pos, int sy) { + this.update(pos.chunkXPos, pos.chunkZPos, sy); + } + + public SubChunkKey update(int cx, int cz, int sy) { + this.chunkXPos = cx; + this.chunkZPos = cz; + this.subY = sy; + int result = subY; + result = 31 * result + cx; + result = 31 * result + cz; + this.hash = result; + return this; + } + + @Override + public final int hashCode() { + return this.hash; + } + + @Override + public final boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SubChunkKey)) return false; + SubChunkKey k = (SubChunkKey) o; + return this.subY == k.subY && this.chunkXPos == k.chunkXPos && this.chunkZPos == k.chunkZPos; + } + + public int getSubY() { + return subY; + } + + public int getChunkXPos() { + return chunkXPos; + } + + public int getChunkZPos() { + return chunkZPos; + } + + public ChunkCoordIntPair getPos() { + return new ChunkCoordIntPair(this.chunkXPos, this.chunkZPos); + } +} diff --git a/src/main/java/com/hbm/util/SubChunkSnapshot.java b/src/main/java/com/hbm/util/SubChunkSnapshot.java index cd51d125b..6077ca4b4 100644 --- a/src/main/java/com/hbm/util/SubChunkSnapshot.java +++ b/src/main/java/com/hbm/util/SubChunkSnapshot.java @@ -34,19 +34,19 @@ public class SubChunkSnapshot { * @param world * The World instance from which to retrieve the chunk. * @param key - * The ChunkKey identifying the sub-chunk. + * The SubChunkKey identifying the sub-chunk. * @param allowGeneration * Whether to generate chunks. If false, attempting to retrieve a snapshot of a chunk that does not exist will return {@link SubChunkSnapshot#EMPTY}. * @return * A SubChunkSnapshot containing the palette and block data for the sub-chunk, * or {@link SubChunkSnapshot#EMPTY} if the region contains only air. */ - public static SubChunkSnapshot getSnapshot(World world, ChunkKey key, boolean allowGeneration){ - if (!world.getChunkProvider().chunkExists(key.pos.chunkXPos, key.pos.chunkZPos) && !allowGeneration) { + public static SubChunkSnapshot getSnapshot(World world, SubChunkKey key, boolean allowGeneration){ + if (!world.getChunkProvider().chunkExists(key.getChunkXPos(), key.getChunkZPos()) && !allowGeneration) { return SubChunkSnapshot.EMPTY; } - Chunk chunk = world.getChunkProvider().provideChunk(key.pos.chunkXPos, key.pos.chunkZPos); - ExtendedBlockStorage ebs = chunk.getBlockStorageArray()[key.subY]; + Chunk chunk = world.getChunkProvider().provideChunk(key.getChunkXPos(), key.getChunkZPos()); + ExtendedBlockStorage ebs = chunk.getBlockStorageArray()[key.getSubY()]; if (ebs == null || ebs.isEmpty()) return SubChunkSnapshot.EMPTY; short[] data = new short[16 * 16 * 16]; From 590da72fbb5f5c4170eff27336fcfedc90467f70 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 12 Jun 2025 16:11:02 +0200 Subject: [PATCH 167/491] whatever, go my jerma --- changelog | 4 +++- src/main/java/com/hbm/blocks/network/BlockCableGauge.java | 6 +++--- src/main/java/com/hbm/blocks/network/FluidDuctGauge.java | 6 +++--- .../machine/TileEntityMachineChemicalPlant.java | 8 ++++++-- src/main/java/com/hbm/util/ShadyUtil.java | 3 +-- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/changelog b/changelog index 5fcf22212..dd49c2343 100644 --- a/changelog +++ b/changelog @@ -2,4 +2,6 @@ * The DNT suit now has a damage threshold of 1,000 ## Fixed -* Chemical plant ports. For real this time. \ No newline at end of file +* Chemical plant ports. For real this time. +* Fixed cable and pipe gauges returning the incomplete delta second value for OC and ROR readers +* Fixed new chemical plant not saving power values to disk \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java index 42e3a6573..2e7048be3 100644 --- a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java +++ b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java @@ -155,13 +155,13 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getTransfer(Context context, Arguments args) { - return new Object[] {deltaTick, deltaSecond}; + return new Object[] {deltaTick, deltaLastSecond}; } @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - return new Object[] {deltaTick, deltaSecond, xCoord, yCoord, zCoord}; + return new Object[] {deltaTick, deltaLastSecond, xCoord, yCoord, zCoord}; } @Override @@ -175,7 +175,7 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, @Override public String provideRORValue(String name) { if((PREFIX_VALUE + "deltatick").equals(name)) return "" + deltaTick; - if((PREFIX_VALUE + "deltasecond").equals(name)) return "" + deltaSecond; + if((PREFIX_VALUE + "deltasecond").equals(name)) return "" + deltaLastSecond; return null; } } diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java b/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java index 122d9031d..5e9e0b483 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java @@ -155,7 +155,7 @@ public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, IL @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getTransfer(Context context, Arguments args) { - return new Object[] {deltaTick, deltaSecond}; + return new Object[] {deltaTick, deltaLastSecond}; } @Callback(direct = true) @@ -167,7 +167,7 @@ public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, IL @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - return new Object[] {deltaTick, deltaSecond, getType().getName(), xCoord, yCoord, zCoord}; + return new Object[] {deltaTick, deltaLastSecond, getType().getName(), xCoord, yCoord, zCoord}; } @Override @@ -181,7 +181,7 @@ public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, IL @Override public String provideRORValue(String name) { if((PREFIX_VALUE + "deltatick").equals(name)) return "" + deltaTick; - if((PREFIX_VALUE + "deltasecond").equals(name)) return "" + deltaSecond; + if((PREFIX_VALUE + "deltasecond").equals(name)) return "" + deltaLastSecond; return null; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index ef7bdd827..7d6c0d0e3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -158,7 +158,9 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem this.inputTanks[i].readFromNBT(nbt, "i" + i); this.outputTanks[i].readFromNBT(nbt, "o" + i); } - + + this.power = nbt.getLong("power"); + this.maxPower = nbt.getLong("maxPower"); this.chemplantModule.readFromNBT(nbt); } @@ -170,7 +172,9 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem this.inputTanks[i].writeToNBT(nbt, "i" + i); this.outputTanks[i].writeToNBT(nbt, "o" + i); } - + + nbt.setLong("power", power); + nbt.setLong("maxPower", maxPower); this.chemplantModule.writeToNBT(nbt); } diff --git a/src/main/java/com/hbm/util/ShadyUtil.java b/src/main/java/com/hbm/util/ShadyUtil.java index de5bedf6a..03a2390ab 100644 --- a/src/main/java/com/hbm/util/ShadyUtil.java +++ b/src/main/java/com/hbm/util/ShadyUtil.java @@ -3,7 +3,6 @@ package com.hbm.util; import com.google.common.collect.Sets; import com.hbm.config.GeneralConfig; import com.hbm.main.MainRegistry; -import com.hbm.main.ModEventHandler; import cpw.mods.fml.relauncher.ReflectionHelper; import java.lang.reflect.Field; @@ -147,7 +146,7 @@ public class ShadyUtil { System.out.println("TEST SECTION START"); Class toLoad = Class.forName(decode(offset(testCase, -2))); Field toRead = ReflectionHelper.findField(toLoad, decode(offset(testValue, -2))); - if(new Random().nextInt(4) == 0) ModEventHandler.reference = toRead; + //ModEventHandler.reference = toRead; System.out.println("TEST SECTION END"); } } catch(Throwable e) { } From ae593a8188e918cf00618a9eb9bbf154d9624cfd Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 12 Jun 2025 22:06:04 +0300 Subject: [PATCH 168/491] Add metal trapdoors By analogy with metal ladders. Felt weird to cap one off with a wooden hatch. Also, the mod's trapdoors are climbable if placed above a ladder. --- src/main/java/com/hbm/blocks/ModBlocks.java | 32 ++++++++++++ .../hbm/blocks/generic/BlockNTMTrapdoor.java | 46 ++++++++++++++++++ .../java/com/hbm/main/CraftingManager.java | 11 +++++ src/main/resources/assets/hbm/lang/de_DE.lang | 10 ++++ src/main/resources/assets/hbm/lang/en_US.lang | 10 ++++ src/main/resources/assets/hbm/lang/it_IT.lang | 10 ++++ src/main/resources/assets/hbm/lang/pl_PL.lang | 10 ++++ src/main/resources/assets/hbm/lang/ru_RU.lang | 10 ++++ src/main/resources/assets/hbm/lang/uk_UA.lang | 10 ++++ src/main/resources/assets/hbm/lang/zh_CN.lang | 10 ++++ .../textures/blocks/trapdoor_aluminium.png | Bin 0 -> 833 bytes .../hbm/textures/blocks/trapdoor_cobalt.png | Bin 0 -> 862 bytes .../hbm/textures/blocks/trapdoor_copper.png | Bin 0 -> 871 bytes .../hbm/textures/blocks/trapdoor_gold.png | Bin 0 -> 838 bytes .../hbm/textures/blocks/trapdoor_iron.png | Bin 0 -> 798 bytes .../hbm/textures/blocks/trapdoor_lead.png | Bin 0 -> 846 bytes .../hbm/textures/blocks/trapdoor_steel.png | Bin 0 -> 790 bytes .../hbm/textures/blocks/trapdoor_sturdy.png | Bin 0 -> 883 bytes .../hbm/textures/blocks/trapdoor_titanium.png | Bin 0 -> 842 bytes .../hbm/textures/blocks/trapdoor_tungsten.png | Bin 0 -> 751 bytes 20 files changed, 159 insertions(+) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_aluminium.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_cobalt.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_copper.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_gold.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_iron.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_lead.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_steel.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_sturdy.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_titanium.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_tungsten.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 143c33fa0..ccf1f73aa 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -845,6 +845,17 @@ public class ModBlocks { public static Block ladder_steel; public static Block ladder_tungsten; + public static Block trapdoor_sturdy; + public static Block trapdoor_iron; + public static Block trapdoor_gold; + public static Block trapdoor_aluminium; + public static Block trapdoor_copper; + public static Block trapdoor_titanium; + public static Block trapdoor_lead; + public static Block trapdoor_cobalt; + public static Block trapdoor_steel; + public static Block trapdoor_tungsten; + public static Block barrel_plastic; public static Block barrel_corroded; public static Block barrel_iron; @@ -1972,6 +1983,17 @@ public class ModBlocks { ladder_steel = new BlockNTMLadder().setBlockName("ladder_steel").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_steel"); ladder_tungsten = new BlockNTMLadder().setBlockName("ladder_tungsten").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_tungsten"); + trapdoor_sturdy = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_sturdy").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeWood).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_sturdy"); + trapdoor_iron = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_iron").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_iron"); + trapdoor_gold = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_gold").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_gold"); + trapdoor_aluminium = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_aluminium").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_aluminium"); + trapdoor_copper = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_copper").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_copper"); + trapdoor_titanium = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_titanium").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_titanium"); + trapdoor_lead = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_lead").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_lead"); + trapdoor_cobalt = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_cobalt").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_cobalt"); + trapdoor_steel = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_steel").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_steel"); + trapdoor_tungsten = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_tungsten").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_tungsten"); + barrel_plastic = new BlockFluidBarrel(Material.iron, 12000).setBlockName("barrel_plastic").setStepSound(Block.soundTypeStone).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_plastic"); barrel_corroded = new BlockFluidBarrel(Material.iron, 6000).setBlockName("barrel_corroded").setStepSound(Block.soundTypeMetal).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_corroded"); barrel_iron = new BlockFluidBarrel(Material.iron, 8000).setBlockName("barrel_iron").setStepSound(Block.soundTypeMetal).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_iron"); @@ -3234,6 +3256,16 @@ public class ModBlocks { GameRegistry.registerBlock(ladder_steel, ladder_steel.getUnlocalizedName()); GameRegistry.registerBlock(ladder_lead, ladder_lead.getUnlocalizedName()); GameRegistry.registerBlock(ladder_cobalt, ladder_cobalt.getUnlocalizedName()); + GameRegistry.registerBlock(trapdoor_sturdy, trapdoor_sturdy.getUnlocalizedName()); + GameRegistry.registerBlock(trapdoor_iron, trapdoor_iron.getUnlocalizedName()); + GameRegistry.registerBlock(trapdoor_gold, trapdoor_gold.getUnlocalizedName()); + GameRegistry.registerBlock(trapdoor_titanium, trapdoor_titanium.getUnlocalizedName()); + GameRegistry.registerBlock(trapdoor_copper, trapdoor_copper.getUnlocalizedName()); + GameRegistry.registerBlock(trapdoor_tungsten, trapdoor_tungsten.getUnlocalizedName()); + GameRegistry.registerBlock(trapdoor_aluminium, trapdoor_aluminium.getUnlocalizedName()); + GameRegistry.registerBlock(trapdoor_steel, trapdoor_steel.getUnlocalizedName()); + GameRegistry.registerBlock(trapdoor_lead, trapdoor_lead.getUnlocalizedName()); + GameRegistry.registerBlock(trapdoor_cobalt, trapdoor_cobalt.getUnlocalizedName()); register(barrel_plastic); register(barrel_corroded); diff --git a/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java b/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java new file mode 100644 index 000000000..2915bb0df --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java @@ -0,0 +1,46 @@ +package com.hbm.blocks.generic; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockTrapDoor; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.IBlockAccess; + +public class BlockNTMTrapdoor extends BlockTrapDoor { + public BlockNTMTrapdoor(Material material) { + super(material); + } + + @Override + public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) { + int meta = world.getBlockMetadata(x, y, z); + + // isOpen + if (!func_150118_d(meta)) + return false; + + Block blockBelow = world.getBlock(x, y - 1, z); + return blockBelow != null && blockBelow.isLadder(world, x, y - 1, z, entity); + } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + super.setBlockBoundsBasedOnState(world, x, y, z); + + // Make the hitbox in-line with ladders + if (isLadder(world, x, y, z, null)) { + int meta = world.getBlockMetadata(x, y, z); + float thickness = 0.125F; + + if ((meta & 3) == 0) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - thickness, 1.0F, 1.0F, 1.0F); + } else if ((meta & 3) == 1) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, thickness); + } else if ((meta & 3) == 2) { + this.setBlockBounds(1.0F - thickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } else if ((meta & 3) == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, thickness, 1.0F, 1.0F); + } + } + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 76646f307..1c2a3e66c 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -882,6 +882,17 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.ladder_steel, 8), new Object[] { "LLL", "L#L", "LLL", 'L', Blocks.ladder, '#', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.ladder_tungsten, 8), new Object[] { "LLL", "L#L", "LLL", 'L', Blocks.ladder, '#', W.ingot() }); + addShapelessAuto(new ItemStack(ModBlocks.trapdoor_sturdy, 1), new Object[] { Blocks.trapdoor, KEY_PLANKS }); + addShapelessAuto(new ItemStack(ModBlocks.trapdoor_iron, 1), new Object[] { Blocks.trapdoor, IRON.ingot() }); + addShapelessAuto(new ItemStack(ModBlocks.trapdoor_gold, 1), new Object[] { Blocks.trapdoor, GOLD.ingot() }); + addShapelessAuto(new ItemStack(ModBlocks.trapdoor_aluminium, 1), new Object[] { Blocks.trapdoor, AL.ingot() }); + addShapelessAuto(new ItemStack(ModBlocks.trapdoor_copper, 1), new Object[] { Blocks.trapdoor, CU.ingot() }); + addShapelessAuto(new ItemStack(ModBlocks.trapdoor_titanium, 1), new Object[] { Blocks.trapdoor, TI.ingot() }); + addShapelessAuto(new ItemStack(ModBlocks.trapdoor_lead, 1), new Object[] { Blocks.trapdoor, PB.ingot() }); + addShapelessAuto(new ItemStack(ModBlocks.trapdoor_cobalt, 1), new Object[] { Blocks.trapdoor, CO.ingot() }); + addShapelessAuto(new ItemStack(ModBlocks.trapdoor_steel, 1), new Object[] { Blocks.trapdoor, STEEL.ingot() }); + addShapelessAuto(new ItemStack(ModBlocks.trapdoor_tungsten, 1), new Object[] { Blocks.trapdoor, W.ingot() }); + addRecipeAuto(new ItemStack(ModBlocks.machine_storage_drum), new Object[] { "LLL", "L#L", "LLL", 'L', PB.plate(), '#', ModItems.tank_steel }); addRecipeAuto(new ItemStack(ModBlocks.deco_pipe, 6), new Object[] { "PP", 'P', STEEL.pipe() }); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 819c38039..52da5cf02 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4318,6 +4318,16 @@ tile.ladder_steel.name=Stahlleiter tile.ladder_sturdy.name=Feste Holzleiter tile.ladder_titanium.name=Titanleiter tile.ladder_tungsten.name=Wolframleiter +tile.trapdoor_aluminium.name=Aluminium-Falltür +tile.trapdoor_cobalt.name=Kobalt-Falltür +tile.trapdoor_copper.name=Kupfer-Falltür +tile.trapdoor_gold.name=Goldene -Falltür +tile.trapdoor_iron.name=Eisen-Falltür +tile.trapdoor_lead.name=Bleilieter +tile.trapdoor_steel.name=Stahl-Falltür +tile.trapdoor_sturdy.name=Feste Holz-Falltür +tile.trapdoor_titanium.name=Titan-Falltür +tile.trapdoor_tungsten.name=Wolfram-Falltür tile.lamp_demon.name=Dämonenkernlampe tile.lamp_tritium_blue_off.name=Blaue Tritiumlampe tile.lamp_tritium_blue_on.name=Blaue Tritiumlampe diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d690efe90..41e5b5e8f 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5443,6 +5443,16 @@ tile.ladder_steel.name=Steel Ladder tile.ladder_sturdy.name=Sturdy Wooden Ladder tile.ladder_titanium.name=Titanium Ladder tile.ladder_tungsten.name=Tungsten Ladder +tile.trapdoor_aluminium.name=Aluminium Trapdoor +tile.trapdoor_cobalt.name=Cobalt Trapdoor +tile.trapdoor_copper.name=Copper Trapdoor +tile.trapdoor_gold.name=Golden Trapdoor +tile.trapdoor_iron.name=Iron Trapdoor +tile.trapdoor_lead.name=Lead Trapdoor +tile.trapdoor_steel.name=Steel Trapdoor +tile.trapdoor_sturdy.name=Sturdy Wooden Trapdoor +tile.trapdoor_titanium.name=Titanium Trapdoor +tile.trapdoor_tungsten.name=Tungsten Trapdoor tile.lamp_demon.name=Demon Core Lamp tile.lamp_tritium_blue_off.name=Blue Tritium Lamp tile.lamp_tritium_blue_on.name=Blue Tritium Lamp diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index 691badc0e..a9fd2e1ff 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -5513,6 +5513,16 @@ tile.ladder_steel.name=Steel Ladder tile.ladder_sturdy.name=Sturdy Wooden Ladder tile.ladder_titanium.name=Titanium Ladder tile.ladder_tungsten.name=Tungsten Ladder +tile.trapdoor_aluminium.name=Aluminium Trapdoor +tile.trapdoor_cobalt.name=Cobalt Trapdoor +tile.trapdoor_copper.name=Copper Trapdoor +tile.trapdoor_gold.name=Golden Trapdoor +tile.trapdoor_iron.name=Iron Trapdoor +tile.trapdoor_lead.name=Lead Trapdoor +tile.trapdoor_steel.name=Steel Trapdoor +tile.trapdoor_sturdy.name=Sturdy Wooden Trapdoor +tile.trapdoor_titanium.name=Titanium Trapdoor +tile.trapdoor_tungsten.name=Tungsten Trapdoor tile.lamp_demon.name=Demon Core Lamp tile.lamp_tritium_blue_off.name=Blue Tritium Lamp tile.lamp_tritium_blue_on.name=Blue Tritium Lamp diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index f33a8a715..221ac256c 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -4859,6 +4859,16 @@ tile.ladder_steel.name=Steel Ladder tile.ladder_sturdy.name=Sturdy Wooden Ladder tile.ladder_titanium.name=Titanium Ladder tile.ladder_tungsten.name=Tungsten Ladder +tile.trapdoor_aluminium.name=Aluminium Trapdoor +tile.trapdoor_cobalt.name=Cobalt Trapdoor +tile.trapdoor_copper.name=Copper Trapdoor +tile.trapdoor_gold.name=Golden Trapdoor +tile.trapdoor_iron.name=Iron Trapdoor +tile.trapdoor_lead.name=Lead Trapdoor +tile.trapdoor_steel.name=Steel Trapdoor +tile.trapdoor_sturdy.name=Sturdy Wooden Trapdoor +tile.trapdoor_titanium.name=Titanium Trapdoor +tile.trapdoor_tungsten.name=Tungsten Trapdoor tile.lamp_demon.name=Demon Core Lamp tile.lamp_tritium_blue_off.name=Blue Tritium Lamp tile.lamp_tritium_blue_on.name=Blue Tritium Lamp diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 5c3efa442..9df3de831 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5688,6 +5688,16 @@ tile.ladder_steel.name=Стальная лестница tile.ladder_sturdy.name=Прочная деревянная лестница tile.ladder_titanium.name=Титановая лестница tile.ladder_tungsten.name=Вольфрамовая лестница +tile.trapdoor_aluminium.name=Алюминиевый люк +tile.trapdoor_cobalt.name=Кобальтовый люк +tile.trapdoor_copper.name=Медный люк +tile.trapdoor_gold.name=Золотый люк +tile.trapdoor_iron.name=Железный люк +tile.trapdoor_lead.name=Свинцовый люк +tile.trapdoor_steel.name=Стальный люк +tile.trapdoor_sturdy.name=Прочный деревянный люк +tile.trapdoor_titanium.name=Титановый люк +tile.trapdoor_tungsten.name=Вольфрамовый люк tile.lamp_demon.name=Лампа из заряда-демона tile.lamp_tritium_blue_off.name=Синяя тритиевая лампа tile.lamp_tritium_blue_on.name=Синяя тритиевая лампа diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 28776824b..0026e0a6f 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -5426,6 +5426,16 @@ tile.ladder_steel.name=Сталева драбина tile.ladder_sturdy.name=Міцна дерев'яна драбина tile.ladder_titanium.name=Титанова драбина tile.ladder_tungsten.name=Вольфрамова драбина +tile.trapdoor_aluminium.name=Алюмінієвий люк +tile.trapdoor_cobalt.name=Кобальтовий люк +tile.trapdoor_copper.name=Мідний люк +tile.trapdoor_gold.name=Золотий люк +tile.trapdoor_iron.name=Залізний люк +tile.trapdoor_lead.name=Свинцевий люк +tile.trapdoor_steel.name=Сталевий люк +tile.trapdoor_sturdy.name=Міцний дерев'яний люк +tile.trapdoor_titanium.name=Титановий люк +tile.trapdoor_tungsten.name=Вольфрамовий люк tile.lamp_demon.name=Ядро-демон лампа tile.lamp_tritium_blue_off.name=Синя тритієва лампа tile.lamp_tritium_blue_on.name=Синя тритієва лампа diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 41847c119..689ed7dcb 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5158,6 +5158,16 @@ tile.ladder_steel.name=钢制梯子 tile.ladder_sturdy.name=坚固木头制梯子 tile.ladder_titanium.name=钛制梯子 tile.ladder_tungsten.name=钨制梯子 +tile.trapdoor_aluminium.name=铝制活板门 +tile.trapdoor_cobalt.name=钴制活板门 +tile.trapdoor_copper.name=铜制活板门 +tile.trapdoor_gold.name=金制活板门 +tile.trapdoor_iron.name=铁制活板门 +tile.trapdoor_lead.name=铅制活板门 +tile.trapdoor_steel.name=钢制活板门 +tile.trapdoor_sturdy.name=硬木活板门 +tile.trapdoor_titanium.name=钛制活板门 +tile.trapdoor_tungsten.name=钨制活板门 tile.lamp_demon.name=恶魔核心灯 tile.lamp_tritium_blue_off.name=蓝色氚灯 tile.lamp_tritium_blue_on.name=蓝色氚灯 diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_aluminium.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_aluminium.png new file mode 100644 index 0000000000000000000000000000000000000000..8b1391059f1e5d4251b43ad692c065d332b8b6fc GIT binary patch literal 833 zcmV-H1HSx;P)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1woxRza#d~~u9*D#9i2B}ONkQP-weR~RVT`el?8#e& z3q=oi_YCM=@)YQy@)*M~P^D|ilGJ{`zOPBOr;ZNgk!r0u`5Txfu}fTUHe&(f*x(Xi zRUAc>#t9j&e!E<{0txTGeSA|Q`&zXsERZxW6spu_C%L~!e{~1r-63Q zn)IZ6KVZ=Ud&^}YNw*F4#?1DWQWgWO(oN$8EV9fcbzNtZ&;s6|EqOS@8d&QB5+E4* z5{lR>>&gi!XW|OZf%WN^fChhsk{geFn?%4C;bv$6-_0l@goajVYgPcB0(4UpGaJjQ zwk%M5YO&a8u^5J9Rq`M;SMGj0&VbQP%Pnw!KiO!l z;yGC6#mq)w0j$DrD1L9YJ7H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wM(HI$Z?3b=1^S7`l6oC~`<@6FD>H)vPaw*?_Ijq)rNOWiQV zTGtySBhR;#y{BX_v&4MnnAvowe|E!@8wIWsHCiK4ZlExpQ1If_*rZvh3Fk7yXmVki;+EY2D2ZnrnAXlMt06exvSjsI3Ro26 zc|8S6lC1#Y3HYLI+$?k8fGb=80D=X9F91m5ERMo2#Y4a53i9CU^h-d4zk>C|h($07*qoM6N<$f=`8z4gdfE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_copper.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_copper.png new file mode 100644 index 0000000000000000000000000000000000000000..e91bd7744a1a2b55c1e735484e0c0d6a82c0496d GIT binary patch literal 871 zcmV-t1DO1YP)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wx`lgeB#L z!Rwr%lSB~3$5g_L8Ow?L_^oqI*NDX%r|t>DDnP&Fd?z<0vftY zdR=%VjPK-5wWtyw#x8%uXs4z@6L3YVVp6A8q%f&|)vc=n{bohQ zYV965wnffjLt>lU3z&Ob$^wOP1&p3X6!<&^xFVm3Qpg$HB?}}ubDzaaLzpGzfGgak z&jRj}CiTv#N(%ioC*cbCVr+DlF>t_T7mxtKCiaLE5X71NzE(ow&S_T=2Un**(D~t7 zSqRzjCFv%C$I`2pSOaUeVTYv9(CVmU?iYZkAe|pq_iUWGZ#)Hxr!AH?0y-XpHCxeS z=^cz`e@&IO7-E8>9#X$mVN0@*0@e!ogBUo|b>c!C)2}w-e7f@KqFvpyQR)V+&~;LN xkB0+gk<>;`VU0(;PumDCKcu@SoBsPte*j`9-!_btKe_+_002ovPDHLkV1f*Cor3@X literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_gold.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_gold.png new file mode 100644 index 0000000000000000000000000000000000000000..64fa024451faf37ab239872513f7e5a0ad98f3a4 GIT binary patch literal 838 zcmV-M1G)T(P)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wUaw&BvgimBq6Z3 z-g@sR`i1_kFDU3Gh=PK$mw`|i6{kWHsZp~!%iZzJr3H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wm+n6_wy+59kwn zSp*S86j=mn<~Oj1aX9B(oCSl9d#(L%R8`d=BcdphzVCUJBuVUh9LJ*gd_K~3ofu>6 zU2SGQpUZByleTRg83&5c$>Z^m)oNw$`~67e7Xj%*K0@O8zf5LN!pq%HV#@l1tn0IFTUUJu90ffMq@`C%OCiutPn;c z63u-amu0zJ+LUj%n;RdE#wle@9N1=zqV0A&86!>+@bpLQmmA}iC@fM4%_T-(^Z9J={ut5PMXKvs c{`*UR0p%Lqwo-hyVgLXD07*qoM6N<$fH_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1w?dXJWq}I^f6r z?KnkcPSapIMc``R3m9D1)hFXySHSlJn$BLy^L)+^qp{0{;gD9VPfF`)q$vx&-0ybO zj-V!L)u~6X8u!q`)Kh?~mDCJEmv#V@=P}tPHafb)9Oh&^q#AWhfo zkQEwQ!I?$@EDlJc;Z4KFINmS;#V;+kHu6Sd8Mg77vMjk8&ra307-E9s7AYExd9&JK z1?={ES2=Ln+a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_steel.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_steel.png new file mode 100644 index 0000000000000000000000000000000000000000..23ed483c9f7729883c786aa7848c48f285ba3537 GIT binary patch literal 790 zcmV+x1L^#UP)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1w?HbK9AF#~{!1Nq#Vnqg}%=w0l-R_Ika<7~^t)iK0l3 z$D<6x;F5h}5Cm>NO_Mwx583T@_WN`?iRt@Z>bkZ8pO_?xODxNBR-sl0*KD_2o6KRB zW$uDFj^%tli^dO!gNyC=d%0e(_EDpycU>n-K%@mq_kk8X2-mDuE8$1-5+t>4JJScO z*K1Lp@e}+qpUd6axCUF)@2aYth^mcNak*UVw{IhRJ4i)Q$bbLRZ*67V U$)9i*!~g&Q07*qoM6N<$f=!5Wf&c&j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_sturdy.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_sturdy.png new file mode 100644 index 0000000000000000000000000000000000000000..bac7d08ef2ff52dc33dba64a535eef5d484159e7 GIT binary patch literal 883 zcmV-(1C0EMP)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wXMTizYuC#t6;1KFP0&? z=T1&W#T#M8`ZKNf@Oh#oQrxIlyuM83eOE@p%0(L9jqu-J`V&45;1xOjS*!p6002ov JPDHLkV1o9kncV;Y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_titanium.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_titanium.png new file mode 100644 index 0000000000000000000000000000000000000000..e40244736453570d9c6d15737cf320741b277cea GIT binary patch literal 842 zcmV-Q1GW5#P)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1w{~gs|+)naeqYF&w_61T%<|IN_ruEIwP7Maq&Sp*W67 z2$9DWKGA44=y@=pD2jA&8EBfOKHqLPIvn=od0qZ~8;?m`FIU=Z-ZRH%C0I&V2TrF` zoj`SiBEX7v+acGL?CkfSbb?ODrO9MWj?*UTNecWx`?_79R;wlL_XjfLB%k|yzEIte z*tTs-i^|Ht1#^-;LS(HV2vzEaAj}Lv*=+lPF~ExB@styorsVsf4vL~L4#Eg{qivN4 zK45@l6%YWz*6U>v5b@n^x79>q=CUgA18dSR1`hr*p(>)9zRZ?IN{>0%Za=hqAR1gb zEvK3QngSGty^4%TiZ1XjORQw%k+2M?f<>yE>Z&d=$OJ|&QV@jM{)@W=iojN@dFKO$ zRY)`Wev%RQr_+&oy~m1-iZ@_|VHjHP`Fy4&QrxI67K=H5mt_Q&7ilzlrT_lY-zo^< UrrZGeCIA2c07*qoM6N<$f{rSUMgRZ+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_tungsten.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_tungsten.png new file mode 100644 index 0000000000000000000000000000000000000000..c85bdc129ee3e3935df71692c271c7ca9ee8a9f1 GIT binary patch literal 751 zcmVH_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wmqD_;N)e!=m?d7gccir@j_G!aH4j%(c-Ko*LMqPU%oVie%tj+kTA!_XB3 z81e)>_%vcF_74f}^Nm~3K$!IeYPM|?#|QCgjEIATtJyKy$K-f_7}NK?H<8{@#V`!I hw`0^jKj(ix=@*{l)mY)q1o!{|002ovPDHLkV1kbCU!DK} literal 0 HcmV?d00001 From 11fc05869010420bb7008d182c08351b3a162a4a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 12 Jun 2025 22:17:35 +0300 Subject: [PATCH 169/491] Fix trapdoor operation --- src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../java/com/hbm/blocks/generic/BlockNTMTrapdoor.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index ccf1f73aa..b4fab697e 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1983,7 +1983,7 @@ public class ModBlocks { ladder_steel = new BlockNTMLadder().setBlockName("ladder_steel").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_steel"); ladder_tungsten = new BlockNTMLadder().setBlockName("ladder_tungsten").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_tungsten"); - trapdoor_sturdy = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_sturdy").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeWood).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_sturdy"); + trapdoor_sturdy = new BlockNTMTrapdoor(Material.wood).setBlockName("trapdoor_sturdy").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeWood).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_sturdy"); trapdoor_iron = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_iron").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_iron"); trapdoor_gold = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_gold").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_gold"); trapdoor_aluminium = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_aluminium").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_aluminium"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java b/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java index 2915bb0df..a0179a87b 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java +++ b/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java @@ -4,7 +4,9 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockTrapDoor; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; public class BlockNTMTrapdoor extends BlockTrapDoor { public BlockNTMTrapdoor(Material material) { @@ -43,4 +45,13 @@ public class BlockNTMTrapdoor extends BlockTrapDoor { } } } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + // The original code prevented manual operation of Material.iron trapdoors. This bypasses that behavior + int meta = world.getBlockMetadata(x, y, z); + world.setBlockMetadataWithNotify(x, y, z, meta ^ 4, 2); + world.playAuxSFXAtEntity(player, 1003, x, y, z, 0); + return true; + } } From d4d552b9dd5200081fba827eb44205a9745b08b2 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 12 Jun 2025 22:43:25 +0300 Subject: [PATCH 170/491] Fix bounding box --- .../hbm/blocks/generic/BlockNTMTrapdoor.java | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java b/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java index a0179a87b..48afba69d 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java +++ b/src/main/java/com/hbm/blocks/generic/BlockNTMTrapdoor.java @@ -5,6 +5,7 @@ import net.minecraft.block.BlockTrapDoor; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -26,24 +27,26 @@ public class BlockNTMTrapdoor extends BlockTrapDoor { } @Override - public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { - super.setBlockBoundsBasedOnState(world, x, y, z); - - // Make the hitbox in-line with ladders + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + // Make the hitbox in-line with ladders, if relevant if (isLadder(world, x, y, z, null)) { int meta = world.getBlockMetadata(x, y, z); float thickness = 0.125F; - if ((meta & 3) == 0) { - this.setBlockBounds(0.0F, 0.0F, 1.0F - thickness, 1.0F, 1.0F, 1.0F); - } else if ((meta & 3) == 1) { - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, thickness); - } else if ((meta & 3) == 2) { - this.setBlockBounds(1.0F - thickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - } else if ((meta & 3) == 3) { - this.setBlockBounds(0.0F, 0.0F, 0.0F, thickness, 1.0F, 1.0F); - } + if ((meta & 3) == 0) + return AxisAlignedBB.getBoundingBox(x, y, z + 1F - thickness, x + 1F, y + 1F, z + 1F); + + if ((meta & 3) == 1) + return AxisAlignedBB.getBoundingBox(x, y, z, x + 1F, y + 1F, z + thickness); + + if ((meta & 3) == 2) + return AxisAlignedBB.getBoundingBox(x + 1F - thickness, y, z, x + 1F, y + 1F, z + 1F); + + if ((meta & 3) == 3) + return AxisAlignedBB.getBoundingBox(x, y, z, x + thickness, y + 1F, z + 1F); } + + return super.getCollisionBoundingBoxFromPool(world, x, y, z); } @Override From d65cc18dd86c19aa0b5ff1b3dffe4deb89b92909 Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Thu, 12 Jun 2025 17:24:10 +0800 Subject: [PATCH 171/491] perf: pre-size maps to avoid overhead --- .../ExplosionNukeRayParallelized.java | 96 +++++++++---------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index 66b88de95..328e4e995 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -3,8 +3,8 @@ package com.hbm.explosion; import com.hbm.config.BombConfig; import com.hbm.interfaces.IExplosionRay; import com.hbm.main.MainRegistry; -import com.hbm.util.SubChunkKey; import com.hbm.util.ConcurrentBitSet; +import com.hbm.util.SubChunkKey; import com.hbm.util.SubChunkSnapshot; import net.minecraft.block.Block; import net.minecraft.init.Blocks; @@ -29,6 +29,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private static final int WORLD_HEIGHT = 256; private static final int BITSET_SIZE = 16 * WORLD_HEIGHT * 16; + private static final int SUBCHUNK_PER_CHUNK = WORLD_HEIGHT >> 4; protected final World world; private final double explosionX, explosionY, explosionZ; @@ -39,7 +40,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private volatile List directions; private final CompletableFuture> directionsFuture; private final ConcurrentMap destructionMap; - private final ConcurrentMap accumulatedDamageMap; + private final ConcurrentMap> damageMap; private final ConcurrentMap snapshots; @@ -69,19 +70,29 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { int rayCount = Math.max(0, (int) (2.5 * Math.PI * strength * strength)); this.latch = new CountDownLatch(rayCount); - this.destructionMap = new ConcurrentHashMap<>(); - this.accumulatedDamageMap = new ConcurrentHashMap<>(); - this.snapshots = new ConcurrentHashMap<>(); + List affectedChunks = this.collectChunkInRadius(); + int initialCapacity = affectedChunks.size(); + + this.destructionMap = new ConcurrentHashMap<>(initialCapacity); + this.damageMap = new ConcurrentHashMap<>(initialCapacity); + if (BombConfig.explosionAlgorithm == 2) { + final int innerMapCapacity = 256; + for (ChunkCoordIntPair coord : affectedChunks) { + this.damageMap.put(coord, new ConcurrentHashMap<>(innerMapCapacity)); + } + } + this.snapshots = new ConcurrentHashMap<>(initialCapacity * SUBCHUNK_PER_CHUNK); this.orderedChunks = new ArrayList<>(); - this.rayQueue = new LinkedBlockingQueue<>(); + List initialRayTasks = new ArrayList<>(rayCount); + for (int i = 0; i < rayCount; i++) initialRayTasks.add(new RayTask(i)); + this.rayQueue = new LinkedBlockingQueue<>(initialRayTasks); this.cacheQueue = new LinkedBlockingQueue<>(); int workers = Math.max(1, Runtime.getRuntime().availableProcessors() - 1); this.pool = Executors.newWorkStealingPool(workers); this.directionsFuture = CompletableFuture.supplyAsync(() -> generateSphereRays(rayCount)); - for (int i = 0; i < rayCount; i++) rayQueue.add(new RayTask(i)); for (int i = 0; i < workers; i++) pool.submit(new Worker()); this.latchWatcherThread = new Thread(() -> { @@ -187,7 +198,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } if (bs.isEmpty()) { destructionMap.remove(cp); - for (int sy = 0; sy < (WORLD_HEIGHT >> 4); sy++) { + for (int sy = 0; sy < (SUBCHUNK_PER_CHUNK); sy++) { snapshots.remove(new SubChunkKey(cp, sy)); } it.remove(); @@ -237,11 +248,27 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } } if (this.destructionMap != null) this.destructionMap.clear(); - if (this.accumulatedDamageMap != null) this.accumulatedDamageMap.clear(); + if (this.damageMap != null) this.damageMap.clear(); if (this.snapshots != null) this.snapshots.clear(); if (this.orderedChunks != null) this.orderedChunks.clear(); } + private List collectChunkInRadius() { + int cr = (radius + 15) >> 4; + int minCX = (originX >> 4) - cr; + int maxCX = (originX >> 4) + cr; + int minCZ = (originZ >> 4) - cr; + int maxCZ = (originZ >> 4) + cr; + + List list = new ArrayList<>((maxCX - minCX + 1) * (maxCZ - minCZ + 1)); + for (int cx = minCX; cx <= maxCX; ++cx) { + for (int cz = minCZ; cz <= maxCZ; ++cz) { + list.add(new ChunkCoordIntPair(cx, cz)); + } + } + return list; + } + private List generateSphereRays(int count) { List list = new ArrayList<>(count); if (count == 0) return list; @@ -260,20 +287,20 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } private void runConsolidation() { - Iterator> chunkEntryIterator = accumulatedDamageMap.entrySet().iterator(); + Iterator>> chunkEntryIterator = damageMap.entrySet().iterator(); while (chunkEntryIterator.hasNext()) { - Map.Entry entry = chunkEntryIterator.next(); + Map.Entry> entry = chunkEntryIterator.next(); ChunkCoordIntPair cp = entry.getKey(); - ChunkDamageAccumulator accumulator = entry.getValue(); + ConcurrentMap innerDamageMap = entry.getValue(); - if (accumulator.isEmpty()) { + if (innerDamageMap.isEmpty()) { chunkEntryIterator.remove(); continue; } ConcurrentBitSet chunkDestructionBitSet = destructionMap.computeIfAbsent(cp, k -> new ConcurrentBitSet(BITSET_SIZE)); - Iterator> damageEntryIterator = accumulator.entrySet().iterator(); + Iterator> damageEntryIterator = innerDamageMap.entrySet().iterator(); while (damageEntryIterator.hasNext()) { Map.Entry damageEntry = damageEntryIterator.next(); int bitIndex = damageEntry.getKey(); @@ -317,43 +344,14 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } } - if (accumulator.isEmpty()) { + if (innerDamageMap.isEmpty()) { chunkEntryIterator.remove(); } } - accumulatedDamageMap.clear(); + damageMap.clear(); consolidationFinished = true; } - private static class ChunkDamageAccumulator { - // key = bitIndex, value = total accumulated damage - private final ConcurrentHashMap damageMap = new ConcurrentHashMap<>(); - - public void addDamage(int bitIndex, float damageAmount) { - if (damageAmount <= 0) return; - DoubleAdder adder = damageMap.computeIfAbsent(bitIndex, k -> new DoubleAdder()); - adder.add(damageAmount); - } - - /*public float getDamage(int bitIndex) { - DoubleAdder adder = damageMap.get(bitIndex); - return adder == null ? 0f : (float) adder.sum(); - }*/ - - /*public void clearDamage(int bitIndex) { - damageMap.remove(bitIndex); - }*/ - - public Set> entrySet() { - return damageMap.entrySet(); - } - - - public boolean isEmpty() { - return damageMap.isEmpty(); - } - } - private class Worker implements Runnable { @Override public void run() { @@ -372,6 +370,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } } } + private class RayTask { final int dirIndex; double px, py, pz; @@ -474,9 +473,10 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { int bitIndex = ((WORLD_HEIGHT - 1 - y) << 8) | ((x & 0xF) << 4) | (z & 0xF); if (BombConfig.explosionAlgorithm == 2) { ChunkCoordIntPair chunkPos = ck.getPos(); - ChunkDamageAccumulator chunkAccumulator = - accumulatedDamageMap.computeIfAbsent(chunkPos, k -> new ChunkDamageAccumulator()); - chunkAccumulator.addDamage(bitIndex, damageDealt); + ConcurrentMap chunkDamageMap = damageMap.get(chunkPos); + if (chunkDamageMap != null) { + chunkDamageMap.computeIfAbsent(bitIndex, k -> new DoubleAdder()).add(damageDealt); + } } else { if (energy > 0) { ConcurrentBitSet bs = destructionMap.computeIfAbsent( From 7dab92f3b27f706acf795489205c15b29e1cd8f2 Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Fri, 13 Jun 2025 12:39:27 +0800 Subject: [PATCH 172/491] Perf: better caching --- .../ExplosionNukeRayParallelized.java | 306 ++++++++---------- src/main/java/com/hbm/util/SubChunkKey.java | 4 - 2 files changed, 142 insertions(+), 168 deletions(-) diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index 328e4e995..08926ff5f 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -16,12 +16,15 @@ import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; import org.apache.logging.log4j.Level; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; import java.util.concurrent.*; import java.util.concurrent.atomic.DoubleAdder; /** - * Threaded DDA raytracer for the nuke explosion. + * Threaded DDA raytracer for mk5 explosion. * * @author mlbv */ @@ -30,6 +33,8 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private static final int WORLD_HEIGHT = 256; private static final int BITSET_SIZE = 16 * WORLD_HEIGHT * 16; private static final int SUBCHUNK_PER_CHUNK = WORLD_HEIGHT >> 4; + private static final float NUKE_RESISTANCE_CUTOFF = 2_000_000F; + private static final float INITIAL_ENERGY_FACTOR = 0.3F; protected final World world; private final double explosionX, explosionY, explosionZ; @@ -37,19 +42,19 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private final int strength; private final int radius; - private volatile List directions; private final CompletableFuture> directionsFuture; private final ConcurrentMap destructionMap; private final ConcurrentMap> damageMap; - private final ConcurrentMap snapshots; - + private final ConcurrentMap> waitingRoom; private final BlockingQueue rayQueue; - private final BlockingQueue cacheQueue; private final ExecutorService pool; private final CountDownLatch latch; private final Thread latchWatcherThread; private final List orderedChunks; + private final BlockingQueue highPriorityReactiveQueue; // cache queue for rays + private final Iterator lowPriorityProactiveIterator; + private volatile List directions; private volatile boolean collectFinished = false; private volatile boolean consolidationFinished = false; private volatile boolean destroyFinished = false; @@ -68,26 +73,24 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { this.radius = radius; int rayCount = Math.max(0, (int) (2.5 * Math.PI * strength * strength)); - this.latch = new CountDownLatch(rayCount); - List affectedChunks = this.collectChunkInRadius(); - int initialCapacity = affectedChunks.size(); + List sortedSubChunks = getAllSubChunks(); + this.lowPriorityProactiveIterator = sortedSubChunks.iterator(); + this.highPriorityReactiveQueue = new LinkedBlockingQueue<>(); - this.destructionMap = new ConcurrentHashMap<>(initialCapacity); - this.damageMap = new ConcurrentHashMap<>(initialCapacity); - if (BombConfig.explosionAlgorithm == 2) { - final int innerMapCapacity = 256; - for (ChunkCoordIntPair coord : affectedChunks) { - this.damageMap.put(coord, new ConcurrentHashMap<>(innerMapCapacity)); - } - } - this.snapshots = new ConcurrentHashMap<>(initialCapacity * SUBCHUNK_PER_CHUNK); + int initialChunkCapacity = (int) sortedSubChunks.stream().map(SubChunkKey::getPos).distinct().count(); + + this.destructionMap = new ConcurrentHashMap<>(initialChunkCapacity); + this.damageMap = new ConcurrentHashMap<>(initialChunkCapacity); + + int subChunkCount = sortedSubChunks.size(); + this.snapshots = new ConcurrentHashMap<>(subChunkCount); + this.waitingRoom = new ConcurrentHashMap<>(subChunkCount); this.orderedChunks = new ArrayList<>(); List initialRayTasks = new ArrayList<>(rayCount); for (int i = 0; i < rayCount; i++) initialRayTasks.add(new RayTask(i)); this.rayQueue = new LinkedBlockingQueue<>(initialRayTasks); - this.cacheQueue = new LinkedBlockingQueue<>(); int workers = Math.max(1, Runtime.getRuntime().availableProcessors() - 1); this.pool = Executors.newWorkStealingPool(workers); @@ -102,11 +105,8 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { Thread.currentThread().interrupt(); } finally { collectFinished = true; - if (BombConfig.explosionAlgorithm == 2) { - pool.submit(this::runConsolidation); - } else { - consolidationFinished = true; - } + if (BombConfig.explosionAlgorithm == 2) pool.submit(this::runConsolidation); + else consolidationFinished = true; } }, "ExplosionNuke-LatchWatcher-" + System.nanoTime()); this.latchWatcherThread.setDaemon(true); @@ -116,25 +116,70 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private static float getNukeResistance(Block b) { if (b.getMaterial().isLiquid()) return 0.1F; if (b == Blocks.sandstone) return Blocks.stone.getExplosionResistance(null); - if (b == Blocks.obsidian) return Blocks.stone.getExplosionResistance(null) * 3; + if (b == Blocks.obsidian) return Blocks.stone.getExplosionResistance(null) * 3.0F; return b.getExplosionResistance(null); } + private List getAllSubChunks() { + List keys = new ArrayList<>(); + int cr = (radius + 15) >> 4; + int minCX = (originX >> 4) - cr; + int maxCX = (originX >> 4) + cr; + int minCZ = (originZ >> 4) - cr; + int maxCZ = (originZ >> 4) + cr; + int minSubY = Math.max(0, (originY - radius) >> 4); + int maxSubY = Math.min(SUBCHUNK_PER_CHUNK - 1, (originY + radius) >> 4); + int originSubY = originY >> 4; + + for (int cx = minCX; cx <= maxCX; cx++) { + for (int cz = minCZ; cz <= maxCZ; cz++) { + for (int subY = minSubY; subY <= maxSubY; subY++) { + int chunkCenterX = (cx << 4) + 8; + int chunkCenterY = (subY << 4) + 8; + int chunkCenterZ = (cz << 4) + 8; + double dx = chunkCenterX - explosionX; + double dy = chunkCenterY - explosionY; + double dz = chunkCenterZ - explosionZ; + if (dx * dx + dy * dy + dz * dz <= (radius + 14) * (radius + 14)) { // +14 for margin of error + keys.add(new SubChunkKey(cx, cz, subY)); + } + } + } + } + keys.sort(Comparator.comparingInt(key -> { + int distCX = key.getPos().chunkXPos - (originX >> 4); + int distCZ = key.getPos().chunkZPos - (originZ >> 4); + int distSubY = key.getSubY() - originSubY; + return distCX * distCX + distCZ * distCZ + distSubY * distSubY; + })); + return keys; + } + @Override public void cacheChunksTick(int timeBudgetMs) { - if (collectFinished || this.cacheQueue == null) return; - + if (collectFinished) return; final long deadline = System.nanoTime() + (timeBudgetMs * 1_000_000L); while (System.nanoTime() < deadline) { - SubChunkKey ck = cacheQueue.poll(); + SubChunkKey ck = highPriorityReactiveQueue.poll(); if (ck == null) break; - snapshots.computeIfAbsent(ck, k -> SubChunkSnapshot.getSnapshot(world, k, BombConfig.chunkloading)); + processCacheKey(ck); } + while (System.nanoTime() < deadline && lowPriorityProactiveIterator.hasNext()) { + SubChunkKey ck = lowPriorityProactiveIterator.next(); + processCacheKey(ck); + } + } + + private void processCacheKey(SubChunkKey ck) { + if (snapshots.containsKey(ck)) return; + snapshots.put(ck, SubChunkSnapshot.getSnapshot(world, ck, BombConfig.chunkloading)); + ConcurrentLinkedQueue waiters = waitingRoom.remove(ck); + if (waiters != null) rayQueue.addAll(waiters); } @Override public void destructionTick(int timeBudgetMs) { - if (!collectFinished || !consolidationFinished || destroyFinished) return; // Added consolidationFinished check + if (!collectFinished || !consolidationFinished || destroyFinished) return; final long deadline = System.nanoTime() + timeBudgetMs * 1_000_000L; @@ -198,9 +243,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } if (bs.isEmpty()) { destructionMap.remove(cp); - for (int sy = 0; sy < (SUBCHUNK_PER_CHUNK); sy++) { - snapshots.remove(new SubChunkKey(cp, sy)); - } + for (int subY = 0; subY < SUBCHUNK_PER_CHUNK; subY++) snapshots.remove(new SubChunkKey(cp, subY)); it.remove(); } } @@ -223,28 +266,18 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { this.destroyFinished = true; if (this.rayQueue != null) this.rayQueue.clear(); - if (this.cacheQueue != null) this.cacheQueue.clear(); + if (this.waitingRoom != null) this.waitingRoom.clear(); - if (this.latch != null) { - while (this.latch.getCount() > 0) { - this.latch.countDown(); - } - } - if (this.latchWatcherThread != null && this.latchWatcherThread.isAlive()) { - this.latchWatcherThread.interrupt(); - } + if (this.latch != null) while (this.latch.getCount() > 0) this.latch.countDown(); + if (this.latchWatcherThread != null && this.latchWatcherThread.isAlive()) this.latchWatcherThread.interrupt(); if (this.pool != null && !this.pool.isShutdown()) { this.pool.shutdownNow(); try { - if (!this.pool.awaitTermination(100, TimeUnit.MILLISECONDS)) { - MainRegistry.logger.log(Level.ERROR, "ExplosionNukeRayParallelized thread pool did not terminate promptly on cancel."); - } + if (!this.pool.awaitTermination(100, TimeUnit.MILLISECONDS)) MainRegistry.logger.log(Level.ERROR, "ExplosionNukeRayParallelized thread pool did not terminate promptly on cancel."); } catch (InterruptedException e) { Thread.currentThread().interrupt(); - if (!this.pool.isShutdown()) { - this.pool.shutdownNow(); - } + if (!this.pool.isShutdown()) this.pool.shutdownNow(); } } if (this.destructionMap != null) this.destructionMap.clear(); @@ -253,27 +286,11 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { if (this.orderedChunks != null) this.orderedChunks.clear(); } - private List collectChunkInRadius() { - int cr = (radius + 15) >> 4; - int minCX = (originX >> 4) - cr; - int maxCX = (originX >> 4) + cr; - int minCZ = (originZ >> 4) - cr; - int maxCZ = (originZ >> 4) + cr; - - List list = new ArrayList<>((maxCX - minCX + 1) * (maxCZ - minCZ + 1)); - for (int cx = minCX; cx <= maxCX; ++cx) { - for (int cz = minCZ; cz <= maxCZ; ++cz) { - list.add(new ChunkCoordIntPair(cx, cz)); - } - } - return list; - } - private List generateSphereRays(int count) { List list = new ArrayList<>(count); if (count == 0) return list; if (count == 1) { - list.add(Vec3.createVectorHelper(1, 0, 0).normalize()); + list.add(Vec3.createVectorHelper(1, 0, 0)); return list; } double phi = Math.PI * (3.0 - Math.sqrt(5.0)); @@ -287,67 +304,43 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } private void runConsolidation() { - Iterator>> chunkEntryIterator = damageMap.entrySet().iterator(); - while (chunkEntryIterator.hasNext()) { - Map.Entry> entry = chunkEntryIterator.next(); - ChunkCoordIntPair cp = entry.getKey(); - ConcurrentMap innerDamageMap = entry.getValue(); - + damageMap.forEach((cp, innerDamageMap) -> { if (innerDamageMap.isEmpty()) { - chunkEntryIterator.remove(); - continue; + damageMap.remove(cp); + return; } - ConcurrentBitSet chunkDestructionBitSet = destructionMap.computeIfAbsent(cp, k -> new ConcurrentBitSet(BITSET_SIZE)); - - Iterator> damageEntryIterator = innerDamageMap.entrySet().iterator(); - while (damageEntryIterator.hasNext()) { - Map.Entry damageEntry = damageEntryIterator.next(); - int bitIndex = damageEntry.getKey(); - - float accumulatedDamage = (float) damageEntry.getValue().sum(); - + innerDamageMap.forEach((bitIndex, accumulatedDamageAdder) -> { + float accumulatedDamage = (float) accumulatedDamageAdder.sum(); if (accumulatedDamage <= 0.0f) { - damageEntryIterator.remove(); - continue; + innerDamageMap.remove(bitIndex); + return; } - int yGlobal = WORLD_HEIGHT - 1 - (bitIndex >>> 8); int subY = yGlobal >> 4; - if (subY < 0) { - damageEntryIterator.remove(); - continue; + innerDamageMap.remove(bitIndex); + return; } - SubChunkKey snapshotKey = new SubChunkKey(cp, subY); SubChunkSnapshot snap = snapshots.get(snapshotKey); - Block originalBlock; - if (snap == null || snap == SubChunkSnapshot.EMPTY) { - damageEntryIterator.remove(); - continue; - } else { - int xLocal = (bitIndex >>> 4) & 0xF; - int zLocal = bitIndex & 0xF; - originalBlock = snap.getBlock(xLocal, yGlobal & 0xF, zLocal); - if (originalBlock == Blocks.air) { - damageEntryIterator.remove(); - continue; - } + innerDamageMap.remove(bitIndex); + return; + } + int xLocal = (bitIndex >>> 4) & 0xF; + int zLocal = bitIndex & 0xF; + Block originalBlock = snap.getBlock(xLocal, yGlobal & 0xF, zLocal); + if (originalBlock == Blocks.air) { + innerDamageMap.remove(bitIndex); + return; } - float resistance = getNukeResistance(originalBlock); - if (accumulatedDamage >= resistance) { - chunkDestructionBitSet.set(bitIndex); - damageEntryIterator.remove(); - } - } - - if (innerDamageMap.isEmpty()) { - chunkEntryIterator.remove(); - } - } + if (accumulatedDamage >= resistance) chunkDestructionBitSet.set(bitIndex); + innerDamageMap.remove(bitIndex); + }); + if (innerDamageMap.isEmpty()) damageMap.remove(cp); + }); damageMap.clear(); consolidationFinished = true; } @@ -356,14 +349,9 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { @Override public void run() { try { - while (true) { - if (collectFinished && rayQueue.isEmpty()) break; + while (!collectFinished && !Thread.currentThread().isInterrupted()) { RayTask task = rayQueue.poll(100, TimeUnit.MILLISECONDS); - if (task == null) { - if (collectFinished && rayQueue.isEmpty()) break; - continue; - } - task.trace(); + if (task != null) task.trace(); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); @@ -372,6 +360,10 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } private class RayTask { + private static final double RAY_DIRECTION_EPSILON = 1e-6; + private static final double PROCESSING_EPSILON = 1e-9; + private static final float MIN_EFFECTIVE_DIST_FOR_ENERGY_CALC = 0.01f; + final int dirIndex; double px, py, pz; int x, y, z; @@ -381,9 +373,8 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { boolean initialised = false; double currentRayPosition; - private static final double RAY_DIRECTION_EPSILON = 1e-6; - private static final double PROCESSING_EPSILON = 1e-9; - private static final float MIN_EFFECTIVE_DIST_FOR_ENERGY_CALC = 0.01f; + private int lastCX = Integer.MIN_VALUE, lastCZ = Integer.MIN_VALUE, lastSubY = Integer.MIN_VALUE; + private SubChunkKey currentSubChunkKey = null; RayTask(int dirIdx) { this.dirIndex = dirIdx; @@ -392,9 +383,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { void init() { if (directions == null) directions = directionsFuture.join(); Vec3 dir = directions.get(this.dirIndex); - // This scales the crater. Higher = bigger. - // Currently the crater is a little bit bigger than the original implementation - this.energy = strength * 0.3F; + this.energy = strength * INITIAL_ENERGY_FACTOR; this.px = explosionX; this.py = explosionY; this.pz = explosionZ; @@ -410,20 +399,17 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { double absDirX = Math.abs(dirX); this.stepX = (absDirX < RAY_DIRECTION_EPSILON) ? 0 : (dirX > 0 ? 1 : -1); this.tDeltaX = (stepX == 0) ? Double.POSITIVE_INFINITY : 1.0 / absDirX; - this.tMaxX = (stepX == 0) ? Double.POSITIVE_INFINITY : - ((stepX > 0 ? (this.x + 1 - this.px) : (this.px - this.x)) * this.tDeltaX); + this.tMaxX = (stepX == 0) ? Double.POSITIVE_INFINITY : ((stepX > 0 ? (this.x + 1 - this.px) : (this.px - this.x)) * this.tDeltaX); double absDirY = Math.abs(dirY); this.stepY = (absDirY < RAY_DIRECTION_EPSILON) ? 0 : (dirY > 0 ? 1 : -1); this.tDeltaY = (stepY == 0) ? Double.POSITIVE_INFINITY : 1.0 / absDirY; - this.tMaxY = (stepY == 0) ? Double.POSITIVE_INFINITY : - ((stepY > 0 ? (this.y + 1 - this.py) : (this.py - this.y)) * this.tDeltaY); + this.tMaxY = (stepY == 0) ? Double.POSITIVE_INFINITY : ((stepY > 0 ? (this.y + 1 - this.py) : (this.py - this.y)) * this.tDeltaY); double absDirZ = Math.abs(dirZ); this.stepZ = (absDirZ < RAY_DIRECTION_EPSILON) ? 0 : (dirZ > 0 ? 1 : -1); this.tDeltaZ = (stepZ == 0) ? Double.POSITIVE_INFINITY : 1.0 / absDirZ; - this.tMaxZ = (stepZ == 0) ? Double.POSITIVE_INFINITY : - ((stepZ > 0 ? (this.z + 1 - this.pz) : (this.pz - this.z)) * this.tDeltaZ); + this.tMaxZ = (stepZ == 0) ? Double.POSITIVE_INFINITY : ((stepZ > 0 ? (this.z + 1 - this.pz) : (this.pz - this.z)) * this.tDeltaZ); this.initialised = true; } @@ -436,15 +422,28 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } while (energy > 0) { - if (y < 0 || y >= WORLD_HEIGHT) break; + if (y < 0 || y >= WORLD_HEIGHT || Thread.currentThread().isInterrupted()) break; if (currentRayPosition >= radius - PROCESSING_EPSILON) break; - SubChunkKey ck = new SubChunkKey(x >> 4, z >> 4, y >> 4); - SubChunkSnapshot snap = snapshots.get(ck); + int cx = x >> 4; + int cz = z >> 4; + int subY = y >> 4; + if (cx != lastCX || cz != lastCZ || subY != lastSubY) { + currentSubChunkKey = new SubChunkKey(cx, cz, subY); + lastCX = cx; + lastCZ = cz; + lastSubY = subY; + } + SubChunkSnapshot snap = snapshots.get(currentSubChunkKey); if (snap == null) { - cacheQueue.offer(ck); - rayQueue.offer(this); + final boolean[] amFirst = {false}; + ConcurrentLinkedQueue waiters = waitingRoom.computeIfAbsent(currentSubChunkKey, k -> { + amFirst[0] = true; + return new ConcurrentLinkedQueue<>(); + }); + if (amFirst[0]) highPriorityReactiveQueue.add(currentSubChunkKey); + waiters.add(this); return; } double t_exit_voxel = Math.min(tMaxX, Math.min(tMaxY, tMaxZ)); @@ -455,15 +454,13 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { if (this.currentRayPosition + segmentLenInVoxel > radius - PROCESSING_EPSILON) { segmentLenForProcessing = Math.max(0.0, radius - this.currentRayPosition); stopAfterThisSegment = true; - } else { - segmentLenForProcessing = segmentLenInVoxel; - } + } else segmentLenForProcessing = segmentLenInVoxel; if (snap != SubChunkSnapshot.EMPTY && segmentLenForProcessing > PROCESSING_EPSILON) { Block block = snap.getBlock(x & 0xF, y & 0xF, z & 0xF); if (block != Blocks.air) { float resistance = getNukeResistance(block); - if (resistance >= 2_000_000F) { // cutoff + if (resistance >= NUKE_RESISTANCE_CUTOFF) { energy = 0; } else { double energyLossFactor = getEnergyLossFactor(resistance); @@ -471,27 +468,16 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { energy -= damageDealt; if (damageDealt > 0) { int bitIndex = ((WORLD_HEIGHT - 1 - y) << 8) | ((x & 0xF) << 4) | (z & 0xF); + ChunkCoordIntPair chunkPos = currentSubChunkKey.getPos(); if (BombConfig.explosionAlgorithm == 2) { - ChunkCoordIntPair chunkPos = ck.getPos(); - ConcurrentMap chunkDamageMap = damageMap.get(chunkPos); - if (chunkDamageMap != null) { - chunkDamageMap.computeIfAbsent(bitIndex, k -> new DoubleAdder()).add(damageDealt); - } - } else { - if (energy > 0) { - ConcurrentBitSet bs = destructionMap.computeIfAbsent( - ck.getPos(), - posKey -> new ConcurrentBitSet(BITSET_SIZE) - ); - bs.set(bitIndex); - } - } + damageMap.computeIfAbsent(chunkPos, cp -> new ConcurrentHashMap<>(256)).computeIfAbsent(bitIndex, k -> new DoubleAdder()).add(damageDealt); + } else if (energy > 0) destructionMap.computeIfAbsent(chunkPos, posKey -> new ConcurrentBitSet(BITSET_SIZE)).set(bitIndex); } } } } this.currentRayPosition = t_exit_voxel; - if (energy <= 0 || stopAfterThisSegment || this.currentRayPosition >= radius - PROCESSING_EPSILON) break; + if (energy <= 0 || stopAfterThisSegment) break; if (tMaxX < tMaxY) { if (tMaxX < tMaxZ) { @@ -515,15 +501,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } private double getEnergyLossFactor(float resistance) { - double dxBlockToCenter = (this.x + 0.5) - explosionX; - double dyBlockToCenter = (this.y + 0.5) - explosionY; - double dzBlockToCenter = (this.z + 0.5) - explosionZ; - double distToBlockCenterSq = dxBlockToCenter * dxBlockToCenter + - dyBlockToCenter * dyBlockToCenter + - dzBlockToCenter * dzBlockToCenter; - double distToBlockCenter = Math.sqrt(distToBlockCenterSq); - - double effectiveDist = Math.max(distToBlockCenter, MIN_EFFECTIVE_DIST_FOR_ENERGY_CALC); + double effectiveDist = Math.max(this.currentRayPosition, MIN_EFFECTIVE_DIST_FOR_ENERGY_CALC); return (Math.pow(resistance + 1.0, 3.0 * (effectiveDist / radius)) - 1.0); } } diff --git a/src/main/java/com/hbm/util/SubChunkKey.java b/src/main/java/com/hbm/util/SubChunkKey.java index 068bdfef8..2e694ab8d 100644 --- a/src/main/java/com/hbm/util/SubChunkKey.java +++ b/src/main/java/com/hbm/util/SubChunkKey.java @@ -13,10 +13,6 @@ public class SubChunkKey { private int subY; private int hash; - public SubChunkKey() { - this(0, 0, 0); - } - public SubChunkKey(int cx, int cz, int sy) { this.update(cx, cz, sy); } From 3303df8345b009c0c7f14d209a295c5bf1050827 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 13 Jun 2025 14:47:50 +0200 Subject: [PATCH 173/491] ough --- changelog | 8 +++- .../java/com/hbm/handler/HbmKeybinds.java | 7 +++- .../inventory/container/ContainerBase.java | 6 +++ .../ContainerMachineChemicalPlant.java | 3 +- .../gui/GUIMachineChemicalPlant.java | 15 ++++++++ .../com/hbm/items/tool/ItemBlowtorch.java | 2 +- .../weapon/sedna/factory/XFactoryEnergy.java | 2 +- .../com/hbm/main/ModEventHandlerClient.java | 7 ++-- .../hbm/module/ModuleMachineChemplant.java | 35 ++++++++++-------- .../hbm/tileentity/IUpgradeInfoProvider.java | 1 + .../TileEntityMachineChemicalPlant.java | 25 +++++++++---- src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../gui/processing/gui_chemical_factory.png | Bin 0 -> 3840 bytes .../hbm/textures/items/biomass_compressed.png | Bin 460 -> 430 bytes 14 files changed, 80 insertions(+), 32 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png diff --git a/changelog b/changelog index dd49c2343..c802deca0 100644 --- a/changelog +++ b/changelog @@ -1,7 +1,13 @@ ## Changed * The DNT suit now has a damage threshold of 1,000 +* Compressed biomass now has a nice cube shape +* The new chemical plant's indicator lights are now functional +* The new chemical plant can now use upgrades ## Fixed * Chemical plant ports. For real this time. * Fixed cable and pipe gauges returning the incomplete delta second value for OC and ROR readers -* Fixed new chemical plant not saving power values to disk \ No newline at end of file +* Fixed new chemical plant not saving power values to disk +* Fixed laser rifle scope texture being missing +* Potentially fixed shift clicking issue with the new chemical plant +* Fixed blowtorch having a minimum gas requirement of 1,000mB despite only using 250mB \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 9cfcd65fb..5f85ce886 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -71,7 +71,8 @@ public class HbmKeybinds { @SubscribeEvent public void mouseEvent(MouseInputEvent event) { - HbmPlayerProps props = HbmPlayerProps.getData(MainRegistry.proxy.me()); + EntityPlayer player = MainRegistry.proxy.me(); + HbmPlayerProps props = HbmPlayerProps.getData(player); for(EnumKeybind key : EnumKeybind.values()) { boolean last = props.getKeyPressed(key); @@ -80,6 +81,7 @@ public class HbmKeybinds { if(last != current) { PacketDispatcher.wrapper.sendToServer(new KeybindPacket(key, current)); props.setKeyPressed(key, current); + onPressedClient(player, key, current); } } } @@ -87,7 +89,8 @@ public class HbmKeybinds { @SubscribeEvent public void keyEvent(KeyInputEvent event) { EntityPlayer player = MainRegistry.proxy.me(); - if (calculatorKey.getIsKeyPressed()) { // handle the calculator client-side only + + if(calculatorKey.getIsKeyPressed()) { // handle the calculator client-side only player.closeScreen(); FMLCommonHandler.instance().showGuiScreen(new GUICalculator()); } diff --git a/src/main/java/com/hbm/inventory/container/ContainerBase.java b/src/main/java/com/hbm/inventory/container/ContainerBase.java index 665d3d275..565d8861a 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerBase.java +++ b/src/main/java/com/hbm/inventory/container/ContainerBase.java @@ -31,6 +31,12 @@ public class ContainerBase extends Container { public boolean canInteractWith(EntityPlayer player) { return tile.isUseableByPlayer(player); } + + /** Respects slot restrictions */ + @Override + protected boolean mergeItemStack(ItemStack slotStack, int start, int end, boolean direction) { + return super.mergeItemStack(slotStack, start, end, direction); // overriding this with InventoryUtil.mergeItemStack breaks it but invoking it directly doesn't? wtf? + } @Override public ItemStack transferStackInSlot(EntityPlayer player, int index) { diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java index dd453f93c..2c4f4052a 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java @@ -5,6 +5,7 @@ import com.hbm.inventory.SlotNonRetarded; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemChemistryTemplate; import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.util.InventoryUtil; import api.hbm.energymk2.IBatteryItem; import net.minecraft.entity.player.EntityPlayer; @@ -61,7 +62,7 @@ public class ContainerMachineChemicalPlant extends ContainerBase { } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { if(!this.mergeItemStack(slotStack, 2, 4, false)) return null; } else { - if(!this.mergeItemStack(slotStack, 4, 7, false)) return null; + if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 4, 7, false)) return null; } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java index 8e3285f5b..9f02d0adf 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -80,6 +80,21 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { } GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule.recipe); + + /// LEFT LED + if(chemplant.didProcess) { + drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6); + } else if(recipe != null) { + drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6); + } + + /// RIGHT LED + if(chemplant.didProcess) { + drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6); + } else if(recipe != null && chemplant.power >= recipe.power) { + drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6); + } + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); if(recipe != null && recipe.inputItem != null) { diff --git a/src/main/java/com/hbm/items/tool/ItemBlowtorch.java b/src/main/java/com/hbm/items/tool/ItemBlowtorch.java index 27dc2d48e..35bcd3da1 100644 --- a/src/main/java/com/hbm/items/tool/ItemBlowtorch.java +++ b/src/main/java/com/hbm/items/tool/ItemBlowtorch.java @@ -134,7 +134,7 @@ public class ItemBlowtorch extends Item implements IFillableItem { if(b instanceof IToolable) { if(this == ModItems.blowtorch) { - if(this.getFill(stack, Fluids.GAS) < 1000) return false; + if(this.getFill(stack, Fluids.GAS) < 250) return false; } if(this == ModItems.acetylene_torch) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java index a2e230d27..1d30e41ce 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java @@ -49,7 +49,7 @@ import net.minecraftforge.common.util.ForgeDirection; public class XFactoryEnergy { - public static final ResourceLocation scope_luna = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_luna.png"); + public static final ResourceLocation scope_luna = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_amat.png"); public static BulletConfig energy_tesla; public static BulletConfig energy_tesla_overcharge; diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 1598278d7..967f76977 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -15,7 +15,6 @@ import com.hbm.handler.HTTPHandler; import com.hbm.handler.HazmatRegistry; import com.hbm.handler.HbmKeybinds; import com.hbm.handler.ImpactWorldHandler; -import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.hazard.HazardSystem; import com.hbm.interfaces.IHoldableWeapon; import com.hbm.interfaces.IItemHUD; @@ -36,7 +35,6 @@ import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.AuxButtonPacket; -import com.hbm.packet.toserver.KeybindPacket; import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations.Animation; import com.hbm.render.block.ct.CTStitchReceiver; @@ -1081,7 +1079,8 @@ public class ModEventHandlerClient { } } - if(event.phase == Phase.START) { + // ??? + /*if(event.phase == Phase.START) { Minecraft mc = Minecraft.getMinecraft(); @@ -1097,7 +1096,7 @@ public class ModEventHandlerClient { } } } - } + }*/ } @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/module/ModuleMachineChemplant.java b/src/main/java/com/hbm/module/ModuleMachineChemplant.java index 258f8fcc4..06fe32d84 100644 --- a/src/main/java/com/hbm/module/ModuleMachineChemplant.java +++ b/src/main/java/com/hbm/module/ModuleMachineChemplant.java @@ -29,7 +29,7 @@ public class ModuleMachineChemplant { public FluidTank[] outputTanks = new FluidTank[3]; // running vars public String recipe = "null"; - public float progress; + public double progress; // return signals public boolean didProcess = false; public boolean markDirty = false; @@ -48,9 +48,10 @@ public class ModuleMachineChemplant { } /** Expects the tanks to be set up correctly beforehand */ - public boolean canProcess(GenericRecipe recipe) { + public boolean canProcess(GenericRecipe recipe, double speed, double power) { if(recipe == null) return false; - if(battery.getPower() < recipe.power) return false; + if(power != 1 && battery.getPower() < recipe.power * power) return false; // only check with floating point numbers if mult is not 1 + if(power == 1 && battery.getPower() < recipe.power) return false; if(recipe.inputItem != null) { for(int i = 0; i < Math.min(recipe.inputItem.length, inputSlots.length); i++) { @@ -87,14 +88,13 @@ public class ModuleMachineChemplant { return true; } - public void process(GenericRecipe recipe) { + public void process(GenericRecipe recipe, double speed, double power) { - this.battery.setPower(this.battery.getPower() - recipe.power); - float step = Math.min(1F / recipe.duration, 1F); // can't do more than one recipe per tick, might look into that later + this.battery.setPower(this.battery.getPower() - (power == 1 ? recipe.power : (long) (recipe.power * power))); + double step = Math.min(speed / recipe.duration, 1D); // can't do more than one recipe per tick, might look into that later this.progress += step; - if(this.progress >= 1F) { - this.progress -= 1F; + if(this.progress >= 1D) { if(recipe.inputItem != null) { for(int i = 0; i < Math.min(recipe.inputItem.length, inputSlots.length); i++) { @@ -127,18 +127,23 @@ public class ModuleMachineChemplant { } this.markDirty = true; + + if(this.canProcess(recipe, speed, power)) + this.progress -= 1D; + else + this.progress = 0D; } } - public void update() { + public void update(double speed, double power) { GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); this.setupTanks(recipe); this.didProcess = false; this.markDirty = false; - if(this.canProcess(recipe)) { - this.process(recipe); + if(this.canProcess(recipe, speed, power)) { + this.process(recipe, speed, power); this.didProcess = true; } else { this.progress = 0F; @@ -164,22 +169,22 @@ public class ModuleMachineChemplant { public ModuleMachineChemplant fluidOutput(FluidTank a, FluidTank b, FluidTank c) { outputTanks[0] = a; outputTanks[1] = b; outputTanks[2] = c; return this; } public void serialize(ByteBuf buf) { - buf.writeFloat(progress); + buf.writeDouble(progress); ByteBufUtils.writeUTF8String(buf, recipe); } public void deserialize(ByteBuf buf) { - this.progress = buf.readFloat(); + this.progress = buf.readDouble(); this.recipe = ByteBufUtils.readUTF8String(buf); } public void readFromNBT(NBTTagCompound nbt) { - this.progress = nbt.getFloat("progress"); + this.progress = nbt.getDouble("progress"); this.recipe = nbt.getString("recipe"); } public void writeToNBT(NBTTagCompound nbt) { - nbt.setFloat("progress", progress); + nbt.setDouble("progress", progress); nbt.setString("recipe", recipe); } } diff --git a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java index 001ae77b3..fce89cf26 100644 --- a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java +++ b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java @@ -25,6 +25,7 @@ public interface IUpgradeInfoProvider { public static final String KEY_CONSUMPTION = "upgrade.consumption"; public static final String KEY_COOLANT_CONSUMPTION = "upgrade.coolantConsumption"; public static final String KEY_DELAY = "upgrade.delay"; + public static final String KEY_SPEED = "upgrade.speed"; public static final String KEY_EFFICIENCY = "upgrade.efficiency"; public static final String KEY_PRODUCTIVITY = "upgrade.productivity"; public static final String KEY_FORTUNE = "upgrade.fortune"; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 7d6c0d0e3..0dc1dd1ad 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -75,6 +75,8 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem @Override public void updateEntity() { + if(maxPower <= 0) this.maxPower = 1_000_000; + if(!worldObj.isRemote) { this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); @@ -93,8 +95,18 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem for(FluidTank tank : inputTanks) if(tank.getTankType() != Fluids.NONE) this.trySubscribe(tank.getTankType(), worldObj, pos); for(FluidTank tank : outputTanks) if(tank.getFill() > 0) this.tryProvide(tank, worldObj, pos); } + + double speed = 1D; + double pow = 1D; + + speed += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) / 3D; + speed += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3); + + pow -= Math.min(upgradeManager.getLevel(UpgradeType.POWER), 3) * 0.25D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; - this.chemplantModule.update(); + this.chemplantModule.update(speed, pow); this.didProcess = this.chemplantModule.didProcess; if(this.chemplantModule.markDirty) this.markDirty(); @@ -237,19 +249,18 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem @Override public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { - return false; //return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; } @Override public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_chemical_plant)); if(type == UpgradeType.SPEED) { - info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_DELAY, "-" + (level * 25) + "%")); - info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 300) + "%")); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_SPEED, "+" + (level * 100 / 3) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 50) + "%")); } if(type == UpgradeType.POWER) { - info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_CONSUMPTION, "-" + (level * 30) + "%")); - info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_DELAY, "+" + (level * 5) + "%")); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_CONSUMPTION, "-" + (level * 25) + "%")); } if(type == UpgradeType.OVERDRIVE) { info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); @@ -261,7 +272,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem HashMap upgrades = new HashMap<>(); upgrades.put(UpgradeType.SPEED, 3); upgrades.put(UpgradeType.POWER, 3); - upgrades.put(UpgradeType.OVERDRIVE, 6); + upgrades.put(UpgradeType.OVERDRIVE, 3); return upgrades; } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d690efe90..a3a94ae52 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6172,6 +6172,7 @@ upgrade.fortune=Fortune %s upgrade.overheatChance=Overheat chance %s upgrade.productivity=Productivity %s upgrade.range=Range %s +upgrade.speed=Process speed %s upgrade.gui.title=§lAcceptable Upgrades:§r upgrade.gui.afterburner= * §dAfterburner§r: Stacks to level %s diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ce9926c1d1a6d67a6aed1a7959cce567b90002 GIT binary patch literal 3840 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/biomass_compressed.png b/src/main/resources/assets/hbm/textures/items/biomass_compressed.png index 2beb95ecba0a8f970231cdef412f54ac2e907066..f206fa55c4e8a563dd49bec2dccfa3048ba3c0b7 100644 GIT binary patch delta 387 zcmV-}0et?<1Fi#*G=F7DL_t(Ijn$IBO2c3j#eaUu*ScuMN<-2Tt3HEW{DVs;!ATSx z#7A&*ao5ekQ3u_fd;uq2dzj*7 zt+s&U^u(Ibd1*fbP_}H2jt>UXrU^E-mXdmXnJ5e~&1y<8%_?Qf=H&D+^9HFwr}N6? z)diXmlnjfe+aOj7)2sk6S}5?+ZvSimpkjp(0?%{lc0UoCK*}D)_x#KReK(L&$1tp3 z=ZcLc1XAV*f_xTI>J%r6zZ;Yc3(s?j!U)%GP% zl}hFP_M?_BUWj-ha{K38_>AawEZ;f@;)O`_p)R@|uZ_1|2n^WjF%qp~%H=Yrr$0z< z4c1yFlL-LUTC%MB4+hU8D5WTsO6=@Fp686mWBUCOiv?s^m&Jm$u{IzA93NkDb!Eu1 zE{~6Y+1vB+Jby?M!{K4o-GSCId7g7~(;-O=)9I8(Bc@iX((jK*62ovfQWpiZ8lf-6mT#%!|-V z2hE3i;m+c}v4sI!tFKauv$Hz2T9xbTPLa3Py12WUI2&)`L&xTbCx4H_a8G+l#{d8T M07*qoM6N<$g4#I9RR910 From 8ad065b891174224d02cf3740e3730d28dea47ee Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 13 Jun 2025 21:17:08 +0300 Subject: [PATCH 174/491] Make bunker use a sturdy trapdoor --- src/main/java/com/hbm/world/gen/component/BunkerComponents.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/world/gen/component/BunkerComponents.java b/src/main/java/com/hbm/world/gen/component/BunkerComponents.java index 356164a26..033a165f9 100644 --- a/src/main/java/com/hbm/world/gen/component/BunkerComponents.java +++ b/src/main/java/com/hbm/world/gen/component/BunkerComponents.java @@ -127,7 +127,7 @@ public class BunkerComponents { fillWithMetadataBlocks(world, box, 1, hpos, 4, 1, hpos, 6, ModBlocks.concrete_smooth_stairs, getStairMeta(0)); placeBlockAtCurrentPosition(world, ModBlocks.concrete_slab, 1, 2, hpos, 3, box); placeBlockAtCurrentPosition(world, ModBlocks.concrete_smooth_stairs, getStairMeta(2), 2, hpos, 4, box); - placeBlockAtCurrentPosition(world, Blocks.trapdoor, getDecoModelMeta(8) >> 2, 2, hpos, 5, box); + placeBlockAtCurrentPosition(world, ModBlocks.trapdoor_sturdy, getDecoModelMeta(8) >> 2, 2, hpos, 5, box); placeBlockAtCurrentPosition(world, ModBlocks.concrete_smooth_stairs, getStairMeta(3), 2, hpos, 6, box); placeBlockAtCurrentPosition(world, ModBlocks.concrete_slab, 1, 2, hpos, 7, box); fillWithMetadataBlocks(world, box, 3, hpos, 4, 3, hpos, 6, ModBlocks.concrete_smooth_stairs, getStairMeta(1)); From baad5cefbe1edc7ede1d73cf3fc28cb41458ae75 Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Sat, 14 Jun 2025 08:30:42 +0800 Subject: [PATCH 175/491] feat: add RESOLUTION_FACTOR Introduce RESOLUTION_FACTOR to scale ray density for tuning. Consider exposing this in BombConfig for runtime configuration. --- .../com/hbm/explosion/ExplosionNukeRayParallelized.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index 08926ff5f..dfcf0acae 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -34,7 +34,8 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private static final int BITSET_SIZE = 16 * WORLD_HEIGHT * 16; private static final int SUBCHUNK_PER_CHUNK = WORLD_HEIGHT >> 4; private static final float NUKE_RESISTANCE_CUTOFF = 2_000_000F; - private static final float INITIAL_ENERGY_FACTOR = 0.3F; + private static final float INITIAL_ENERGY_FACTOR = 0.3F; // Scales crater, no impact on performance + private static final double RESOLUTION_FACTOR = 1.0; // Scales ray density, no impact on crater radius protected final World world; private final double explosionX, explosionY, explosionZ; @@ -72,7 +73,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { this.strength = strength; this.radius = radius; - int rayCount = Math.max(0, (int) (2.5 * Math.PI * strength * strength)); + int rayCount = Math.max(0, (int) (2.5 * Math.PI * strength * strength * RESOLUTION_FACTOR)); this.latch = new CountDownLatch(rayCount); List sortedSubChunks = getAllSubChunks(); this.lowPriorityProactiveIterator = sortedSubChunks.iterator(); @@ -336,7 +337,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { return; } float resistance = getNukeResistance(originalBlock); - if (accumulatedDamage >= resistance) chunkDestructionBitSet.set(bitIndex); + if (accumulatedDamage >= resistance * RESOLUTION_FACTOR) chunkDestructionBitSet.set(bitIndex); innerDamageMap.remove(bitIndex); }); if (innerDamageMap.isEmpty()) damageMap.remove(cp); From b328130edb90a1eaeee041c1f00ff8af197faf9e Mon Sep 17 00:00:00 2001 From: DangerousMilk Date: Sun, 15 Jun 2025 19:55:37 +0200 Subject: [PATCH 176/491] Added paintable coated variant of the exhaust pipe. --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../FluidDuctPaintableBlockExhaust.java | 202 ++++++++++++++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + src/main/resources/assets/hbm/lang/ru_RU.lang | 1 + src/main/resources/assets/hbm/lang/uk_UA.lang | 1 + src/main/resources/assets/hbm/lang/zh_CN.lang | 1 + .../fluid_duct_paintable_block_exhaust.png | Bin 0 -> 649 bytes 8 files changed, 210 insertions(+) create mode 100644 src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/fluid_duct_paintable_block_exhaust.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 143c33fa0..45966e0a0 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -791,6 +791,7 @@ public class ModBlocks { public static Block fluid_duct_paintable; public static Block fluid_duct_gauge; public static Block fluid_duct_exhaust; + public static Block fluid_duct_paintable_block_exhaust; public static Block fluid_valve; public static Block fluid_switch; public static Block fluid_pump; @@ -1919,6 +1920,7 @@ public class ModBlocks { fluid_duct_neo = new FluidDuctStandard(Material.iron).setBlockName("fluid_duct_neo").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pipe_neo"); fluid_duct_box = new FluidDuctBox(Material.iron).setBlockName("fluid_duct_box").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fluid_duct_box"); fluid_duct_exhaust = new FluidDuctBoxExhaust(Material.iron).setBlockName("fluid_duct_exhaust").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fluid_duct_box"); + fluid_duct_paintable_block_exhaust = new FluidDuctPaintableBlockExhaust().setBlockName("fluid_duct_paintable_block_exhaust").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_duct_paintable = new FluidDuctPaintable().setBlockName("fluid_duct_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_duct_gauge = new FluidDuctGauge().setBlockName("fluid_duct_gauge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_valve = new FluidValve(Material.iron).setBlockName("fluid_valve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -3185,6 +3187,7 @@ public class ModBlocks { register(fluid_duct_neo); register(fluid_duct_box); register(fluid_duct_exhaust); + register(fluid_duct_paintable_block_exhaust); register(fluid_duct_paintable); register(fluid_duct_gauge); register(fluid_valve); diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java new file mode 100644 index 000000000..3be2934af --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java @@ -0,0 +1,202 @@ +package com.hbm.blocks.network; + +import api.hbm.block.IToolable; +import com.hbm.blocks.IBlockMultiPass; +import com.hbm.blocks.ILookOverlay; +import com.hbm.interfaces.ICopiable; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.lib.Library; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.RenderBlockMultipass; +import com.hbm.tileentity.network.TileEntityPipeExhaust; +import com.hbm.util.i18n.I18nUtil; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.ArrayList; +import java.util.List; + +public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements IToolable, IBlockMultiPass, ILookOverlay { + + @SideOnly(Side.CLIENT) protected IIcon overlay; + + public FluidDuctPaintableBlockExhaust() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityPipeExhaustPaintable(); + } + + public boolean canConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir, TileEntity tile) { + return Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE) || + Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE_LEADED) || + Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE_POISON); + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + List text = new ArrayList(); + text.add(Fluids.SMOKE.getLocalizedName()); + text.add(Fluids.SMOKE_LEADED.getLocalizedName()); + text.add(Fluids.SMOKE_POISON.getLocalizedName()); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + this.blockIcon = reg.registerIcon(RefStrings.MODID + ":fluid_duct_paintable_block_exhaust"); + this.overlay = reg.registerIcon(RefStrings.MODID + ":fluid_duct_paintable_overlay"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPipeExhaustPaintable) { + TileEntityPipeExhaustPaintable pipe = (TileEntityPipeExhaustPaintable) tile; + + if(pipe.block != null) { + if(RenderBlockMultipass.currentPass == 1) { + return this.overlay; + } else { + return pipe.block.getIcon(side, pipe.meta); + } + } + } + + return this.blockIcon; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { + + ItemStack stack = player.getHeldItem(); + + if(stack != null && stack.getItem() instanceof ItemBlock) { + ItemBlock ib = (ItemBlock) stack.getItem(); + Block block = ib.field_150939_a; + + if(block.renderAsNormalBlock() && block != this) { + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPipeExhaustPaintable) { + TileEntityPipeExhaustPaintable pipe = (TileEntityPipeExhaustPaintable) tile; + + if(pipe.block == null) { + pipe.block = block; + pipe.meta = stack.getItemDamage() & 15; + world.markBlockForUpdate(x, y, z); + pipe.markDirty(); + return true; + } + } + } + } + + return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool != ToolType.SCREWDRIVER) return false; + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPipeExhaustPaintable) { + TileEntityPipeExhaustPaintable pipe = (TileEntityPipeExhaustPaintable) tile; + + if(pipe.block != null) { + pipe.block = null; + world.markBlockForUpdate(x, y, z); + pipe.markDirty(); + return true; + } + } + + return false; + } + + @Override + public int getPasses() { + return 2; + } + + @Override + public int getRenderType(){ + return IBlockMultiPass.getRenderType(); + } + + public static class TileEntityPipeExhaustPaintable extends TileEntityPipeExhaust implements ICopiable { + + private Block block; + private int meta; + private Block lastBlock; + private int lastMeta; + + @Override + public void updateEntity() { + super.updateEntity(); + + if(worldObj.isRemote && (lastBlock != block || lastMeta != meta)) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + lastBlock = block; + lastMeta = meta; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + int id = nbt.getInteger("block"); + this.block = id == 0 ? null : Block.getBlockById(id); + this.meta = nbt.getInteger("meta"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + if(block != null) nbt.setInteger("block", Block.getIdFromBlock(block)); + nbt.setInteger("meta", meta); + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + if(block != null) { + nbt.setInteger("paintblock", Block.getIdFromBlock(block)); + nbt.setInteger("paintmeta", meta); + } + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("paintblock")) { + this.block = Block.getBlockById(nbt.getInteger("paintblock")); + this.meta = nbt.getInteger("paintmeta"); + } + } + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 819c38039..3f04f0e38 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4183,6 +4183,7 @@ tile.floodlight.name=Elektrischer Scheinwerfer tile.fluid_duct.name=Universelles Flüssigkeitsrohr (Veraltet) tile.fluid_duct_box.name=Universelles Flüssigkeitsrohr (Boxrohr) tile.fluid_duct_exhaust.name=Abgasrohr +tile.fluid_duct_paintable_block_exhaust.name=Geschirmtes Abgasrohr (Färbbar) tile.fluid_duct_gauge.name=Flussmessrohr tile.fluid_duct_gauge.desc=Rohr welches anzeight, wie viel Flüssigkeit$sich pro Tick im Netzwerk bewegt.$Geteilte Netzwerke die über Fässer oder Tanks$verbunden sind, werden als ein einzelnes gezählt. tile.fluid_duct_neo.name=Universelles Flüssigkeitsrohr diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index a3a94ae52..1051a0b4c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5308,6 +5308,7 @@ tile.floodlight.name=Powered Floodlight tile.fluid_duct.name=Universal Fluid Duct (Deprecated) tile.fluid_duct_box.name=Universal Fluid Duct (Boxduct) tile.fluid_duct_exhaust.name=Exhaust Pipe +tile.fluid_duct_paintable_block_exhaust.name=Paintable Coated Exhaust Pipe tile.fluid_duct_gauge.name=Flow Gauge Pipe tile.fluid_duct_gauge.desc=Pipe that displays how much fluid$moves within the network per tick.$Split networks connected by barrels$or tanks are considered as one shared network. tile.fluid_duct_neo.name=Universal Fluid Duct diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 5c3efa442..105832e03 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5551,6 +5551,7 @@ tile.floodlight.name=Электрический прожектор tile.fluid_duct.name=Универсальная жидкостная труба (Устаревшее) tile.fluid_duct_box.name=Универсальная жидкостная труба (Boxduct) tile.fluid_duct_exhaust.name=Выхлопная труба +tile.fluid_duct_paintable_block_exhaust.name=Окрашиваемая покрытая выхлопная труба tile.fluid_duct_gauge.name=Труба с измерителем потока tile.fluid_duct_gauge.desc=Труба которая показывает сколько жидкости$перемещается внутри сети за тик.$Разделенные сети, соединенные бочками$или резервуары рассматриваются как одна общая сеть. tile.fluid_duct_neo.name=Универсальная жидкостная труба diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 28776824b..9addd7c46 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -5288,6 +5288,7 @@ tile.floodlight.name=Потужний прожектор tile.fluid_duct.name=Універсальний рідинний трубопровід (Застаріло) tile.fluid_duct_box.name=Універсальний рідинний трубопровід (Boxduct) tile.fluid_duct_exhaust.name=Вихлопна труба +tile.fluid_duct_paintable_block_exhaust.name=Вихлопна труба з покриттям tile.fluid_duct_gauge.name=Вимірювальна труба tile.fluid_duct_gauge.desc=Труба, що показує, скільки рідини$переміщується в мережі за один тік.$Розділені мережі, з'єднані бочками$або цистернами, вважаються однією спільною мережею. tile.fluid_duct_neo.name=Універсальний рідинний трубопровід diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 41847c119..5cf34ef87 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5021,6 +5021,7 @@ tile.floodlight.name=电力泛光灯 tile.fluid_duct.name=通用流体管道 tile.fluid_duct_box.name=通用流体管道(方形) tile.fluid_duct_exhaust.name=排气管 +tile.fluid_duct_paintable_block_exhaust.name=具有涂装性的排气管 tile.fluid_duct_gauge.name=流量计管 tile.fluid_duct_gauge.desc=显示每个游戏刻在管网有多少流体移动的管道$由桶或罐连接的分离网络被视为一个共享网络。 tile.fluid_duct_neo.name=通用流体管道 diff --git a/src/main/resources/assets/hbm/textures/blocks/fluid_duct_paintable_block_exhaust.png b/src/main/resources/assets/hbm/textures/blocks/fluid_duct_paintable_block_exhaust.png new file mode 100644 index 0000000000000000000000000000000000000000..85d4c5e3a7c7d8a0c76c61591d3edcd9c44bcd08 GIT binary patch literal 649 zcmV;40(Sk0P)0IY*?uP00GTOL_t(I%bkU57890Vt)2q6p_4^ZA@KO#uc|o2H?1Bj9weU^1B?r9^8@|K}%% z!x8i573JO|%d){h=N!&j{OJv#EK59ZOt$(;+c>PX)J;$48thnNtvxq8$B%8xr-vIr zUDtg3@|j7bv9_b@d&;Wja5&QK4{+%DRk;CjwL%=nc%DbmL$R}epFBn?#{Xx^hvfb; jepOWzML|&%FZ$9?b=TKg9l|GB00000NkvXXu0mjf1IG*o literal 0 HcmV?d00001 From 1e26546c79aafe4fa60a5d69d3db75f0d9316932 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 15 Jun 2025 22:40:59 +0200 Subject: [PATCH 177/491] chemfac chemfac --- .../hbm/particle/ParticleFlamethrower.java | 26 +- .../com/hbm/particle/helper/FlameCreator.java | 2 + .../hbm/models/machines/chemical_factory.obj | 18369 ++++++++++++++++ .../models/machines/chemical_factory.png | Bin 0 -> 3884 bytes 4 files changed, 18392 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/assets/hbm/models/machines/chemical_factory.obj create mode 100644 src/main/resources/assets/hbm/textures/models/machines/chemical_factory.png diff --git a/src/main/java/com/hbm/particle/ParticleFlamethrower.java b/src/main/java/com/hbm/particle/ParticleFlamethrower.java index 636ef82a9..5477c95b7 100644 --- a/src/main/java/com/hbm/particle/ParticleFlamethrower.java +++ b/src/main/java/com/hbm/particle/ParticleFlamethrower.java @@ -12,12 +12,15 @@ import net.minecraft.world.World; @SideOnly(Side.CLIENT) public class ParticleFlamethrower extends EntityFXRotating { + + public int type; public ParticleFlamethrower(World world, double x, double y, double z, int type) { super(world, x, y, z); particleIcon = ModEventHandlerClient.particleBase; this.particleMaxAge = 20 + rand.nextInt(10); this.particleScale = 0.5F; + this.type = type; this.motionX = world.rand.nextGaussian() * 0.02; this.motionZ = world.rand.nextGaussian() * 0.02; @@ -31,6 +34,9 @@ public class ParticleFlamethrower extends EntityFXRotating { this.particleRed = color.getRed() / 255F; this.particleGreen = color.getGreen() / 255F; this.particleBlue = color.getBlue() / 255F; + + if(type == FlameCreator.META_OXY) this.particleRed = this.particleGreen = this.particleBlue = 1F; + if(type == FlameCreator.META_BLACK) this.particleRed = this.particleGreen = this.particleBlue = 1F; } @Override @@ -60,11 +66,21 @@ public class ParticleFlamethrower extends EntityFXRotating { public void renderParticle(Tessellator tess, float interp, float sX, float sY, float sZ, float dX, float dZ) { double ageScaled = (double) this.particleAge / (double) this.particleMaxAge; - - this.particleAlpha = (float) Math.pow(1 - Math.min(ageScaled, 1), 0.5); - float add = 0.75F - (float) ageScaled; - - tess.setColorRGBA_F(this.particleRed + add, this.particleGreen + add, this.particleBlue + add, this.particleAlpha * 0.5F); + + if(type == FlameCreator.META_OXY) { + this.particleAlpha = (float) (1 - ageScaled); + float add = (float) ageScaled * 1.25F - 0.25F; + tess.setColorRGBA_F(this.particleRed - add, this.particleGreen - add * 0.75F, this.particleBlue, this.particleAlpha); + } else if(type == FlameCreator.META_BLACK) { + this.particleAlpha = (float) (1 - ageScaled); + float add = (float) ageScaled * 4F - 1F; + tess.setColorRGBA_F(this.particleRed - add * 0.75F, this.particleGreen - add, this.particleBlue - add * 0.5F, this.particleAlpha); + } else { + this.particleAlpha = (float) Math.pow(1 - Math.min(ageScaled, 1), 0.5); + float add = 0.75F - (float) ageScaled; + tess.setColorRGBA_F(this.particleRed + add, this.particleGreen + add, this.particleBlue + add, this.particleAlpha * 0.5F); + } + tess.setNormal(0.0F, 1.0F, 0.0F); tess.setBrightness(240); diff --git a/src/main/java/com/hbm/particle/helper/FlameCreator.java b/src/main/java/com/hbm/particle/helper/FlameCreator.java index d47fd0095..759eeb04e 100644 --- a/src/main/java/com/hbm/particle/helper/FlameCreator.java +++ b/src/main/java/com/hbm/particle/helper/FlameCreator.java @@ -18,6 +18,8 @@ public class FlameCreator implements IParticleCreator { public static int META_FIRE = 0; public static int META_BALEFIRE = 1; public static int META_DIGAMMA = 2; + public static int META_OXY = 3; + public static int META_BLACK = 4; public static void composeEffect(World world, double x, double y, double z, int meta) { NBTTagCompound data = new NBTTagCompound(); diff --git a/src/main/resources/assets/hbm/models/machines/chemical_factory.obj b/src/main/resources/assets/hbm/models/machines/chemical_factory.obj new file mode 100644 index 000000000..9694d282a --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/chemical_factory.obj @@ -0,0 +1,18369 @@ +# Blender v2.79 (sub 0) OBJ File: 'chemical_factory.blend' +# www.blender.org +o Fan2 +v -0.875000 2.000000 -0.000000 +v -0.937500 2.000000 -0.108253 +v -1.062500 2.000000 -0.108253 +v -1.125000 2.000000 -0.000000 +v -1.062500 2.000000 0.108253 +v -0.937500 2.000000 0.108253 +v -0.937500 2.187500 -0.108253 +v -0.875000 2.187500 -0.000000 +v -1.062500 2.187500 -0.108253 +v -1.125000 2.187500 -0.000000 +v -1.062500 2.187500 0.108253 +v -0.937500 2.187500 0.108253 +v -1.056644 2.120164 0.108253 +v -0.943356 2.067336 0.108253 +v -1.169933 2.172991 0.483253 +v -0.830067 2.014509 0.483253 +v -0.877928 2.120164 -0.005071 +v -1.000000 2.093750 0.545753 +v -0.934572 2.067336 -0.103182 +v -0.496524 2.172991 -0.094461 +v -0.666457 2.014509 -0.388793 +v -0.527364 2.093750 -0.272877 +v -1.065428 2.120164 -0.103182 +v -1.122072 2.067336 -0.005071 +v -1.333543 2.172991 -0.388793 +v -1.503476 2.014509 -0.094461 +v -1.472636 2.093750 -0.272877 +vt 0.118967 0.494248 +vt 0.118967 0.482763 +vt 0.127451 0.477020 +vt 0.156863 0.459770 +vt 0.147059 0.477012 +vt 0.147059 0.459770 +vt 0.137255 0.477012 +vt 0.137255 0.459770 +vt 0.127451 0.459770 +vt 0.117647 0.477012 +vt 0.117647 0.459770 +vt 0.166667 0.459770 +vt 0.156863 0.477012 +vt 0.127451 0.477012 +vt 0.176471 0.459770 +vt 0.166667 0.477012 +vt 0.210784 0.477012 +vt 0.205882 0.494253 +vt 0.176471 0.482759 +vt 0.210784 0.477012 +vt 0.205882 0.494253 +vt 0.176471 0.482759 +vt 0.210784 0.477012 +vt 0.205882 0.494253 +vt 0.176471 0.482759 +vt 0.135935 0.482763 +vt 0.135935 0.494248 +vt 0.127451 0.499991 +vt 0.176471 0.477012 +vt 0.176471 0.471264 +vt 0.205882 0.459770 +vt 0.176471 0.471264 +vt 0.205882 0.459770 +vt 0.176471 0.471264 +vt 0.205882 0.459770 +vn 0.0000 1.0000 0.0000 +vn 0.8660 0.0000 -0.5000 +vn 0.8660 0.0000 0.5000 +vn -0.8660 0.0000 0.5000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.8660 0.0000 -0.5000 +vn -0.2113 0.9063 -0.3660 +vn -0.2113 0.9063 0.3660 +vn 0.4226 0.9063 -0.0000 +s off +f 11/1/1 12/2/1 8/3/1 +f 2/4/2 8/5/2 1/6/2 +f 1/6/3 12/7/3 6/8/3 +f 5/9/4 10/10/4 4/11/4 +f 3/12/5 7/13/5 2/4/5 +f 6/8/6 11/14/6 5/9/6 +f 4/15/7 9/16/7 3/12/7 +f 22/17/8 21/18/8 19/19/8 +f 27/20/9 26/21/9 24/22/9 +f 18/23/10 16/24/10 14/25/10 +f 8/3/1 7/26/1 11/1/1 +f 7/26/1 9/27/1 11/1/1 +f 9/27/1 10/28/1 11/1/1 +f 2/4/2 7/13/2 8/5/2 +f 1/6/3 8/5/3 12/7/3 +f 5/9/4 11/14/4 10/10/4 +f 3/12/5 9/16/5 7/13/5 +f 6/8/6 12/7/6 11/14/6 +f 4/15/7 10/29/7 9/16/7 +f 19/19/8 17/30/8 22/17/8 +f 17/30/8 20/31/8 22/17/8 +f 24/22/9 23/32/9 27/20/9 +f 23/32/9 25/33/9 27/20/9 +f 14/25/10 13/34/10 18/23/10 +f 13/34/10 15/35/10 18/23/10 +o Fan1 +v 1.125000 2.000000 0.000000 +v 1.062500 2.000000 -0.108253 +v 0.937500 2.000000 -0.108253 +v 0.875000 2.000000 0.000000 +v 0.937500 2.000000 0.108253 +v 1.062500 2.000000 0.108253 +v 1.062500 2.187500 -0.108253 +v 1.125000 2.187500 0.000000 +v 0.937500 2.187500 -0.108253 +v 0.875000 2.187500 0.000000 +v 0.937500 2.187500 0.108253 +v 1.062500 2.187500 0.108253 +v 0.943356 2.120164 0.108253 +v 1.056644 2.067336 0.108253 +v 0.830067 2.172991 0.483253 +v 1.169933 2.014509 0.483253 +v 1.122072 2.120164 -0.005071 +v 1.000000 2.093750 0.545753 +v 1.065428 2.067336 -0.103182 +v 1.503476 2.172991 -0.094460 +v 1.333543 2.014509 -0.388792 +v 1.472636 2.093750 -0.272877 +v 0.934572 2.120164 -0.103182 +v 0.877928 2.067336 -0.005071 +v 0.666457 2.172991 -0.388792 +v 0.496524 2.014509 -0.094460 +v 0.527364 2.093750 -0.272877 +vt 0.118967 0.494248 +vt 0.118967 0.482763 +vt 0.127451 0.477020 +vt 0.156863 0.459770 +vt 0.147059 0.477012 +vt 0.147059 0.459770 +vt 0.137255 0.477012 +vt 0.137255 0.459770 +vt 0.127451 0.459770 +vt 0.117647 0.477012 +vt 0.117647 0.459770 +vt 0.166667 0.459770 +vt 0.156863 0.477012 +vt 0.127451 0.477012 +vt 0.176471 0.459770 +vt 0.166667 0.477012 +vt 0.210784 0.477012 +vt 0.205882 0.494253 +vt 0.176471 0.482759 +vt 0.210784 0.477012 +vt 0.205882 0.494253 +vt 0.176471 0.482759 +vt 0.210784 0.477012 +vt 0.205882 0.494253 +vt 0.176471 0.482759 +vt 0.135935 0.482763 +vt 0.135935 0.494248 +vt 0.127451 0.499991 +vt 0.176471 0.477012 +vt 0.176471 0.471264 +vt 0.205882 0.459770 +vt 0.176471 0.471264 +vt 0.205882 0.459770 +vt 0.176471 0.471264 +vt 0.205882 0.459770 +vn 0.0000 1.0000 0.0000 +vn 0.8660 0.0000 -0.5000 +vn 0.8660 0.0000 0.5000 +vn -0.8660 0.0000 0.5000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.8660 0.0000 -0.5000 +vn -0.2113 0.9063 -0.3660 +vn -0.2113 0.9063 0.3660 +vn 0.4226 0.9063 -0.0000 +s off +f 38/36/11 39/37/11 35/38/11 +f 29/39/12 35/40/12 28/41/12 +f 28/41/13 39/42/13 33/43/13 +f 32/44/14 37/45/14 31/46/14 +f 30/47/15 34/48/15 29/39/15 +f 33/43/16 38/49/16 32/44/16 +f 31/50/17 36/51/17 30/47/17 +f 49/52/18 48/53/18 46/54/18 +f 54/55/19 53/56/19 51/57/19 +f 45/58/20 43/59/20 41/60/20 +f 35/38/11 34/61/11 38/36/11 +f 34/61/11 36/62/11 38/36/11 +f 36/62/11 37/63/11 38/36/11 +f 29/39/12 34/48/12 35/40/12 +f 28/41/13 35/40/13 39/42/13 +f 32/44/14 38/49/14 37/45/14 +f 30/47/15 36/51/15 34/48/15 +f 33/43/16 39/42/16 38/49/16 +f 31/50/17 37/64/17 36/51/17 +f 46/54/18 44/65/18 49/52/18 +f 44/65/18 47/66/18 49/52/18 +f 51/57/19 50/67/19 54/55/19 +f 50/67/19 52/68/19 54/55/19 +f 41/60/20 40/69/20 45/58/20 +f 40/69/20 42/70/20 45/58/20 +o Frame +v 2.500000 0.250000 2.500000 +v 2.500000 0.250000 2.375000 +v 2.500000 2.750000 2.500000 +v 2.500000 2.750000 2.375000 +v 2.375000 0.250000 2.500000 +v 2.375000 0.250000 2.375000 +v 2.375000 2.750000 2.500000 +v 2.375000 2.750000 2.375000 +v 2.500000 0.250000 -2.375000 +v 2.500000 0.250000 -2.500000 +v 2.500000 2.750000 -2.375000 +v 2.500000 2.750000 -2.500000 +v 2.375000 0.250000 -2.375000 +v 2.375000 0.250000 -2.500000 +v 2.375000 2.750000 -2.375000 +v 2.375000 2.750000 -2.500000 +v -2.375000 0.250000 2.500000 +v -2.375000 0.250000 2.375000 +v -2.375000 2.750000 2.500000 +v -2.375000 2.750000 2.375000 +v -2.500000 0.250000 2.500000 +v -2.500000 0.250000 2.375000 +v -2.500000 2.750000 2.500000 +v -2.500000 2.750000 2.375000 +v -2.375000 0.250000 -2.375000 +v -2.375000 0.250000 -2.500000 +v -2.375000 2.750000 -2.375000 +v -2.375000 2.750000 -2.500000 +v -2.500000 0.250000 -2.375000 +v -2.500000 0.250000 -2.500000 +v -2.500000 2.750000 -2.375000 +v -2.500000 2.750000 -2.500000 +v -2.500000 2.750000 2.500000 +v -2.250000 2.750000 2.500000 +v -2.500000 2.750000 2.250000 +v -2.250000 2.750000 2.250000 +v -2.500000 3.000000 2.500000 +v -2.250000 3.000000 2.500000 +v -2.500000 3.000000 2.250000 +v -2.250000 3.000000 2.250000 +v 2.250000 2.750000 2.500000 +v 2.500000 2.750000 2.500000 +v 2.250000 2.750000 2.250000 +v 2.500000 2.750000 2.250000 +v 2.250000 3.000000 2.500000 +v 2.500000 3.000000 2.500000 +v 2.250000 3.000000 2.250000 +v 2.500000 3.000000 2.250000 +v -2.500000 2.750000 -2.250000 +v -2.250000 2.750000 -2.250000 +v -2.500000 2.750000 -2.500000 +v -2.250000 2.750000 -2.500000 +v -2.500000 3.000000 -2.250000 +v -2.250000 3.000000 -2.250000 +v -2.500000 3.000000 -2.500000 +v -2.250000 3.000000 -2.500000 +v 2.250000 2.750000 -2.250000 +v 2.500000 2.750000 -2.250000 +v 2.250000 2.750000 -2.500000 +v 2.500000 2.750000 -2.500000 +v 2.250000 3.000000 -2.250000 +v 2.500000 3.000000 -2.250000 +v 2.250000 3.000000 -2.500000 +v 2.500000 3.000000 -2.500000 +v 2.250000 2.875000 2.375000 +v -2.250000 2.875000 2.375000 +v 2.250000 2.875000 2.500000 +v -2.250000 2.875000 2.500000 +v -2.250000 3.000000 2.375000 +v 2.250000 3.000000 2.375000 +v 2.250000 3.000000 2.500000 +v -2.250000 3.000000 2.500000 +v 2.250000 2.875000 -2.375000 +v -2.250000 2.875000 -2.375000 +v -2.250000 2.875000 -2.500000 +v 2.250000 2.875000 -2.500000 +v 2.250000 3.000000 -2.375000 +v -2.250000 3.000000 -2.375000 +v -2.250000 3.000000 -2.500000 +v 2.250000 3.000000 -2.500000 +v 2.375000 2.875000 2.250000 +v 2.375000 2.875000 -2.250000 +v 2.500000 2.875000 -2.250000 +v 2.500000 2.875000 2.250000 +v 2.375000 3.000000 2.250000 +v 2.375000 3.000000 -2.250000 +v 2.500000 3.000000 -2.250000 +v 2.500000 3.000000 2.250000 +v -2.375000 2.875000 -2.250000 +v -2.375000 2.875000 2.250000 +v -2.500000 2.875000 2.250000 +v -2.500000 2.875000 -2.250000 +v -2.375000 3.000000 -2.250000 +v -2.375000 3.000000 2.250000 +v -2.500000 3.000000 2.250000 +v -2.500000 3.000000 -2.250000 +vt 0.686275 0.643678 +vt 0.490196 0.632184 +vt 0.686275 0.632184 +vt 0.686275 0.620690 +vt 0.490196 0.655172 +vt 0.490196 0.643678 +vt 0.490196 0.609195 +vt 0.686275 0.609195 +vt 0.686275 0.632184 +vt 0.490196 0.620690 +vt 0.686275 0.620690 +vt 0.686275 0.609195 +vt 0.490196 0.643678 +vt 0.490196 0.632184 +vt 0.686275 0.655172 +vt 0.686275 0.643678 +vt 0.686275 0.655172 +vt 0.490196 0.643678 +vt 0.686275 0.643678 +vt 0.686275 0.632184 +vt 0.686275 0.609195 +vt 0.490196 0.620690 +vt 0.490196 0.609195 +vt 0.686275 0.620690 +vt 0.686275 0.620690 +vt 0.490196 0.609195 +vt 0.686275 0.609195 +vt 0.490196 0.655172 +vt 0.686275 0.643678 +vt 0.686275 0.655172 +vt 0.490196 0.632184 +vt 0.490196 0.620690 +vt 0.686275 0.632184 +vt 0.862745 -0.000000 +vt 0.882353 0.022989 +vt 0.862745 0.022989 +vt 0.882353 0.045977 +vt 0.862745 0.068966 +vt 0.862745 0.045977 +vt 0.921569 0.022989 +vt 0.901961 0.045977 +vt 0.901961 0.022989 +vt 0.941176 0.022989 +vt 0.921569 0.045977 +vt 0.862745 -0.000000 +vt 0.882353 0.022989 +vt 0.862745 0.022989 +vt 0.882353 0.045977 +vt 0.862745 0.068966 +vt 0.862745 0.045977 +vt 0.921569 0.022989 +vt 0.901961 0.045977 +vt 0.901961 0.022989 +vt 0.941176 0.022989 +vt 0.921569 0.045977 +vt 0.862745 -0.000000 +vt 0.882353 0.022989 +vt 0.862745 0.022989 +vt 0.882353 0.045977 +vt 0.862745 0.068966 +vt 0.862745 0.045977 +vt 0.921569 0.022989 +vt 0.901961 0.045977 +vt 0.901961 0.022989 +vt 0.941176 0.022989 +vt 0.921569 0.045977 +vt 0.862745 -0.000000 +vt 0.882353 0.022989 +vt 0.862745 0.022989 +vt 0.882353 0.045977 +vt 0.862745 0.068966 +vt 0.862745 0.045977 +vt 0.921569 0.022989 +vt 0.901961 0.045977 +vt 0.901961 0.022989 +vt 0.941176 0.022989 +vt 0.921569 0.045977 +vt 0.490196 0.563218 +vt 0.843137 0.574713 +vt 0.490196 0.574713 +vt 0.843137 0.586207 +vt 0.490196 0.597701 +vt 0.843137 0.609195 +vt 0.490196 0.609195 +vt 0.490196 0.586207 +vt 0.843137 0.597701 +vt 0.490196 0.563218 +vt 0.843137 0.574713 +vt 0.490196 0.574713 +vt 0.843137 0.586207 +vt 0.490196 0.597701 +vt 0.843137 0.609195 +vt 0.490196 0.609195 +vt 0.490196 0.586207 +vt 0.843137 0.597701 +vt 0.490196 0.563218 +vt 0.843137 0.574713 +vt 0.490196 0.574713 +vt 0.843137 0.586207 +vt 0.490196 0.597701 +vt 0.843137 0.609195 +vt 0.490196 0.609195 +vt 0.490196 0.586207 +vt 0.843137 0.597701 +vt 0.490196 0.563218 +vt 0.843137 0.574713 +vt 0.490196 0.574713 +vt 0.843137 0.586207 +vt 0.490196 0.597701 +vt 0.843137 0.609195 +vt 0.490196 0.609195 +vt 0.490196 0.586207 +vt 0.843137 0.597701 +vt 0.490196 0.620690 +vt 0.686275 0.655172 +vt 0.490196 0.609195 +vt 0.490196 0.655172 +vt 0.490196 0.655172 +vt 0.490196 0.632184 +vt 0.490196 0.643678 +vt 0.882353 -0.000000 +vt 0.882353 0.068966 +vt 0.941176 0.045977 +vt 0.882353 -0.000000 +vt 0.882353 0.068966 +vt 0.941176 0.045977 +vt 0.882353 -0.000000 +vt 0.882353 0.068966 +vt 0.941176 0.045977 +vt 0.882353 -0.000000 +vt 0.882353 0.068966 +vt 0.941176 0.045977 +vt 0.843137 0.563218 +vt 0.843137 0.563218 +vt 0.843137 0.563218 +vt 0.843137 0.563218 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 56/71/21 57/72/21 55/73/21 +f 57/72/22 59/74/22 55/73/22 +f 56/71/23 62/75/23 58/76/23 +f 59/74/24 62/77/24 60/78/24 +f 64/79/21 65/80/21 63/81/21 +f 65/80/22 67/82/22 63/81/22 +f 64/79/23 70/83/23 66/84/23 +f 67/85/24 70/83/24 68/86/24 +f 72/87/21 73/88/21 71/89/21 +f 73/88/22 75/90/22 71/89/22 +f 72/91/23 78/92/23 74/93/23 +f 75/90/24 78/92/24 76/94/24 +f 80/95/21 81/96/21 79/97/21 +f 81/98/22 83/99/22 79/100/22 +f 80/95/23 86/101/23 82/102/23 +f 83/99/24 86/101/24 84/103/24 +f 87/104/25 90/105/25 88/106/25 +f 94/107/26 91/108/26 92/109/26 +f 87/110/24 93/111/24 89/112/24 +f 89/112/23 94/107/23 90/105/23 +f 90/105/21 92/109/21 88/106/21 +f 88/113/22 91/114/22 87/110/22 +f 95/115/25 98/116/25 96/117/25 +f 102/118/26 99/119/26 100/120/26 +f 95/121/24 101/122/24 97/123/24 +f 97/123/23 102/118/23 98/116/23 +f 98/116/21 100/120/21 96/117/21 +f 96/124/22 99/125/22 95/121/22 +f 103/126/25 106/127/25 104/128/25 +f 110/129/26 107/130/26 108/131/26 +f 103/132/24 109/133/24 105/134/24 +f 105/134/23 110/129/23 106/127/23 +f 106/127/21 108/131/21 104/128/21 +f 104/135/22 107/136/22 103/132/22 +f 111/137/25 114/138/25 112/139/25 +f 118/140/26 115/141/26 116/142/26 +f 111/143/24 117/144/24 113/145/24 +f 113/145/23 118/140/23 114/138/23 +f 114/138/21 116/142/21 112/139/21 +f 112/146/22 115/147/22 111/143/22 +f 120/148/25 121/149/25 122/150/25 +f 125/151/22 122/150/22 121/149/22 +f 123/152/23 119/153/23 120/154/23 +f 126/155/26 124/156/26 123/152/26 +f 127/157/25 129/158/25 130/159/25 +f 133/160/23 130/159/23 129/158/23 +f 131/161/22 128/162/22 127/163/22 +f 134/164/26 132/165/26 131/161/26 +f 135/166/25 137/167/25 138/168/25 +f 141/169/21 138/168/21 137/167/21 +f 139/170/24 136/171/24 135/172/24 +f 142/173/26 140/174/26 139/170/26 +f 143/175/25 145/176/25 146/177/25 +f 149/178/24 146/177/24 145/176/24 +f 147/179/21 144/180/21 143/181/21 +f 150/182/26 148/183/26 147/179/26 +f 56/71/21 58/76/21 57/72/21 +f 57/72/22 61/184/22 59/74/22 +f 56/71/23 60/185/23 62/75/23 +f 59/74/24 61/184/24 62/77/24 +f 64/79/21 66/84/21 65/80/21 +f 65/80/22 69/186/22 67/82/22 +f 64/79/23 68/86/23 70/83/23 +f 67/85/24 69/187/24 70/83/24 +f 72/87/21 74/188/21 73/88/21 +f 73/88/22 77/189/22 75/90/22 +f 72/91/23 76/94/23 78/92/23 +f 75/90/24 77/189/24 78/92/24 +f 80/95/21 82/102/21 81/96/21 +f 81/98/22 85/190/22 83/99/22 +f 80/95/23 84/103/23 86/101/23 +f 83/99/24 85/190/24 86/101/24 +f 87/104/25 89/191/25 90/105/25 +f 94/107/26 93/192/26 91/108/26 +f 87/110/24 91/114/24 93/111/24 +f 89/112/23 93/111/23 94/107/23 +f 90/105/21 94/107/21 92/109/21 +f 88/113/22 92/193/22 91/114/22 +f 95/115/25 97/194/25 98/116/25 +f 102/118/26 101/195/26 99/119/26 +f 95/121/24 99/125/24 101/122/24 +f 97/123/23 101/122/23 102/118/23 +f 98/116/21 102/118/21 100/120/21 +f 96/124/22 100/196/22 99/125/22 +f 103/126/25 105/197/25 106/127/25 +f 110/129/26 109/198/26 107/130/26 +f 103/132/24 107/136/24 109/133/24 +f 105/134/23 109/133/23 110/129/23 +f 106/127/21 110/129/21 108/131/21 +f 104/135/22 108/199/22 107/136/22 +f 111/137/25 113/200/25 114/138/25 +f 118/140/26 117/201/26 115/141/26 +f 111/143/24 115/147/24 117/144/24 +f 113/145/23 117/144/23 118/140/23 +f 114/138/21 118/140/21 116/142/21 +f 112/146/22 116/202/22 115/147/22 +f 120/148/25 119/203/25 121/149/25 +f 125/151/22 126/155/22 122/150/22 +f 123/152/23 124/156/23 119/153/23 +f 126/155/26 125/151/26 124/156/26 +f 127/157/25 128/204/25 129/158/25 +f 133/160/23 134/164/23 130/159/23 +f 131/161/22 132/165/22 128/162/22 +f 134/164/26 133/160/26 132/165/26 +f 135/166/25 136/205/25 137/167/25 +f 141/169/21 142/173/21 138/168/21 +f 139/170/24 140/174/24 136/171/24 +f 142/173/26 141/169/26 140/174/26 +f 143/175/25 144/206/25 145/176/25 +f 149/178/24 150/182/24 146/177/24 +f 147/179/21 148/183/21 144/180/21 +f 150/182/26 149/178/26 148/183/26 +o Plane.001 +v 16.375000 0.000000 6.250000 +v 16.375000 0.000000 3.750000 +v 16.500000 0.000000 3.750000 +v 16.500000 0.000000 6.250000 +v 16.500000 0.000000 6.500000 +v 16.500000 0.000000 6.250000 +v 16.250000 0.000000 6.500000 +v 16.250000 0.000000 6.250000 +v 16.500000 0.250000 6.500000 +v 16.500000 0.250000 6.250000 +v 16.250000 0.250000 6.500000 +v 16.250000 0.250000 6.250000 +v 16.500000 0.000000 3.750000 +v 16.500000 0.000000 3.500000 +v 16.250000 0.000000 3.750000 +v 16.250000 0.000000 3.500000 +v 16.500000 0.250000 3.750000 +v 16.500000 0.250000 3.500000 +v 16.250000 0.250000 3.750000 +v 16.250000 0.250000 3.500000 +v 13.750000 0.000000 6.500000 +v 13.750000 0.000000 6.250000 +v 13.500000 0.000000 6.500000 +v 13.500000 0.000000 6.250000 +v 13.750000 0.250000 6.500000 +v 13.750000 0.250000 6.250000 +v 13.500000 0.250000 6.500000 +v 13.500000 0.250000 6.250000 +v 13.750000 0.000000 3.750000 +v 13.750000 0.000000 3.500000 +v 13.500000 0.000000 3.750000 +v 13.500000 0.000000 3.500000 +v 13.750000 0.250000 3.750000 +v 13.750000 0.250000 3.500000 +v 13.500000 0.250000 3.750000 +v 13.500000 0.250000 3.500000 +v 16.375000 0.125000 6.250000 +v 16.375000 0.125000 3.750000 +v 16.500000 0.125000 3.750000 +v 16.500000 0.125000 6.250000 +v 13.625000 0.000000 3.750000 +v 13.625000 0.000000 6.250000 +v 13.500000 0.000000 6.250000 +v 13.500000 0.000000 3.750000 +v 13.625000 0.125000 3.750000 +v 13.625000 0.125000 6.250000 +v 13.500000 0.125000 6.250000 +v 13.500000 0.125000 3.750000 +v 16.250000 0.000000 3.625000 +v 13.750000 0.000000 3.625000 +v 13.750000 0.000000 3.500000 +v 16.250000 0.000000 3.500000 +v 16.250000 0.125000 3.625000 +v 13.750000 0.125000 3.625000 +v 13.750000 0.125000 3.500000 +v 16.250000 0.125000 3.500000 +v 13.750000 0.000000 6.375000 +v 16.250000 0.000000 6.375000 +v 16.250000 0.000000 6.500000 +v 13.750000 0.000000 6.500000 +v 13.750000 0.125000 6.375000 +v 16.250000 0.125000 6.375000 +v 16.250000 0.125000 6.500000 +v 13.750000 0.125000 6.500000 +v 16.500000 0.250000 3.500000 +v 16.375000 0.250000 3.500000 +v 16.500000 8.750000 3.500000 +v 16.375000 8.750000 3.500000 +v 16.500000 0.250000 3.625000 +v 16.375000 0.250000 3.625000 +v 16.500000 8.750000 3.625000 +v 16.375000 8.750000 3.625000 +v 16.500000 8.750000 6.500000 +v 16.500000 8.750000 6.250000 +v 16.250000 8.750000 6.500000 +v 16.250000 8.750000 6.250000 +v 16.500000 9.000000 6.500000 +v 16.500000 9.000000 6.250000 +v 16.250000 9.000000 6.500000 +v 16.250000 9.000000 6.250000 +v 16.500000 8.750000 3.750000 +v 16.500000 8.750000 3.500000 +v 16.250000 8.750000 3.750000 +v 16.250000 8.750000 3.500000 +v 16.500000 9.000000 3.750000 +v 16.500000 9.000000 3.500000 +v 16.250000 9.000000 3.750000 +v 16.250000 9.000000 3.500000 +v 13.750000 8.750000 6.500000 +v 13.750000 8.750000 6.250000 +v 13.500000 8.750000 6.500000 +v 13.500000 8.750000 6.250000 +v 13.750000 9.000000 6.500000 +v 13.750000 9.000000 6.250000 +v 13.500000 9.000000 6.500000 +v 13.500000 9.000000 6.250000 +v 13.750000 8.750000 3.750000 +v 13.750000 8.750000 3.500000 +v 13.500000 8.750000 3.750000 +v 13.500000 8.750000 3.500000 +v 13.750000 9.000000 3.750000 +v 13.750000 9.000000 3.500000 +v 13.500000 9.000000 3.750000 +v 13.500000 9.000000 3.500000 +v 13.625000 0.250000 3.500000 +v 13.500000 0.250000 3.500000 +v 13.625000 8.750000 3.500000 +v 13.500000 8.750000 3.500000 +v 13.625000 0.250000 3.625000 +v 13.500000 0.250000 3.625000 +v 13.625000 8.750000 3.625000 +v 13.500000 8.750000 3.625000 +v 16.500000 0.250000 6.375000 +v 16.375000 0.250000 6.375000 +v 16.500000 8.750000 6.375000 +v 16.375000 8.750000 6.375000 +v 16.500000 0.250000 6.500000 +v 16.375000 0.250000 6.500000 +v 16.500000 8.750000 6.500000 +v 16.375000 8.750000 6.500000 +v 13.625000 0.250000 6.375000 +v 13.500000 0.250000 6.375000 +v 13.625000 8.750000 6.375000 +v 13.500000 8.750000 6.375000 +v 13.625000 0.250000 6.500000 +v 13.500000 0.250000 6.500000 +v 13.625000 8.750000 6.500000 +v 13.500000 8.750000 6.500000 +v 16.375000 8.875000 6.250000 +v 16.375000 8.875000 3.750000 +v 16.500000 8.875000 3.750000 +v 16.500000 8.875000 6.250000 +v 16.375000 9.000000 6.250000 +v 16.375000 9.000000 3.750000 +v 16.500000 9.000000 3.750000 +v 16.500000 9.000000 6.250000 +v 13.625000 8.875000 3.750000 +v 13.625000 8.875000 6.250000 +v 13.500000 8.875000 6.250000 +v 13.500000 8.875000 3.750000 +v 13.625000 9.000000 3.750000 +v 13.625000 9.000000 6.250000 +v 13.500000 9.000000 6.250000 +v 13.500000 9.000000 3.750000 +v 16.250000 8.875000 3.625000 +v 13.750000 8.875000 3.625000 +v 13.750000 8.875000 3.500000 +v 16.250000 8.875000 3.500000 +v 16.250000 9.000000 3.625000 +v 13.750000 9.000000 3.625000 +v 13.750000 9.000000 3.500000 +v 16.250000 9.000000 3.500000 +v 13.750000 8.875000 6.375000 +v 16.250000 8.875000 6.375000 +v 16.250000 8.875000 6.500000 +v 13.750000 8.875000 6.500000 +v 13.750000 9.000000 6.375000 +v 16.250000 9.000000 6.375000 +v 16.250000 9.000000 6.500000 +v 13.750000 9.000000 6.500000 +v 14.875000 0.125000 6.500000 +v 15.125000 0.125000 6.500000 +v 14.875000 0.125000 3.500000 +v 15.125000 0.125000 3.500000 +v 14.875000 0.250000 3.500000 +v 14.875000 0.250000 6.500000 +v 15.125000 0.250000 6.500000 +v 15.125000 0.250000 3.500000 +v 15.875000 0.125000 6.500000 +v 16.125000 0.125000 6.500000 +v 15.875000 0.125000 3.500000 +v 16.125000 0.125000 3.500000 +v 15.875000 0.250000 3.500000 +v 15.875000 0.250000 6.500000 +v 16.125000 0.250000 6.500000 +v 16.125000 0.250000 3.500000 +v 13.875000 0.125000 6.500000 +v 14.125000 0.125000 6.500000 +v 13.875000 0.125000 3.500000 +v 14.125000 0.125000 3.500000 +v 13.875000 0.250000 3.500000 +v 13.875000 0.250000 6.500000 +v 14.125000 0.250000 6.500000 +v 14.125000 0.250000 3.500000 +v 14.750000 0.250000 5.250000 +v 16.250000 0.250000 5.250000 +v 14.750000 0.250000 3.750000 +v 16.250000 0.250000 3.750000 +v 14.750000 1.000000 3.750000 +v 14.750000 1.000000 5.250000 +v 16.250000 1.000000 5.250000 +v 16.250000 1.000000 3.750000 +v 15.500000 1.000000 3.500000 +v 15.117317 1.000000 3.576120 +v 14.792893 1.000000 3.792893 +v 14.576120 1.000000 4.117317 +v 14.500000 1.000000 4.500000 +v 14.576120 1.000000 4.882684 +v 14.792893 1.000000 5.207107 +v 15.117317 1.000000 5.423880 +v 15.500000 1.000000 5.500000 +v 15.882683 1.000000 5.423880 +v 16.207108 1.000000 5.207107 +v 16.423880 1.000000 4.882684 +v 16.500000 1.000000 4.500000 +v 16.423880 1.000000 4.117316 +v 16.207108 1.000000 3.792893 +v 15.882683 1.000000 3.576120 +v 15.117317 2.000000 3.576120 +v 15.500000 2.000000 3.500000 +v 14.792893 2.000000 3.792893 +v 14.576120 2.000000 4.117317 +v 14.500000 2.000000 4.500000 +v 14.576120 2.000000 4.882684 +v 14.792893 2.000000 5.207107 +v 15.117317 2.000000 5.423880 +v 15.500000 2.000000 5.500000 +v 15.882683 2.000000 5.423880 +v 16.207108 2.000000 5.207107 +v 16.423880 2.000000 4.882684 +v 16.500000 2.000000 4.500000 +v 16.423880 2.000000 4.117316 +v 16.207108 2.000000 3.792893 +v 15.882683 2.000000 3.576120 +v 15.882683 1.750000 3.576120 +v 16.207108 1.750000 3.792893 +v 16.423880 1.750000 4.117316 +v 16.500000 1.750000 4.500000 +v 16.423880 1.750000 4.882684 +v 16.207108 1.750000 5.207107 +v 14.792893 1.750000 3.792893 +v 15.500000 1.750000 3.500000 +v 15.117317 1.750000 3.576120 +v 15.882683 1.250000 3.576120 +v 16.207108 1.250000 3.792893 +v 16.423880 1.250000 4.117316 +v 16.500000 1.250000 4.500000 +v 16.423880 1.250000 4.882684 +v 16.207108 1.250000 5.207107 +v 14.792893 1.250000 3.792893 +v 15.117317 1.250000 3.576120 +v 15.500000 1.250000 3.500000 +v 16.250000 3.500000 4.125000 +v 15.875000 3.500000 3.750000 +v 15.125000 3.500000 3.750000 +v 14.750000 3.500000 4.125000 +v 15.875000 3.500000 5.250000 +v 16.250000 3.500000 4.875000 +v 14.750000 3.500000 4.875000 +v 15.125000 3.500000 5.250000 +v 15.125000 2.000000 5.250000 +v 14.750000 2.000000 4.875000 +v 16.250000 2.000000 4.875000 +v 15.875000 2.000000 5.250000 +v 14.750000 2.000000 4.125000 +v 15.125000 2.000000 3.750000 +v 15.875000 2.000000 3.750000 +v 16.250000 2.000000 4.125000 +v 15.125000 2.500000 3.750000 +v 14.750000 2.500000 4.125000 +v 14.750000 2.500000 4.875000 +v 15.125000 2.500000 5.250000 +v 15.875000 2.500000 5.250000 +v 16.250000 2.500000 4.875000 +v 16.250000 2.500000 4.125000 +v 15.875000 2.500000 3.750000 +v 15.125000 4.000000 3.750000 +v 14.750000 4.000000 4.125000 +v 14.750000 4.000000 4.875000 +v 15.125000 4.000000 5.250000 +v 15.875000 4.000000 5.250000 +v 16.250000 4.000000 4.875000 +v 16.250000 4.000000 4.125000 +v 15.875000 4.000000 3.750000 +v 16.250000 5.000000 4.125000 +v 15.875000 5.000000 3.750000 +v 15.125000 5.000000 3.750000 +v 14.750000 5.000000 4.125000 +v 15.875000 5.000000 5.250000 +v 16.250000 5.000000 4.875000 +v 14.750000 5.000000 4.875000 +v 15.125000 5.000000 5.250000 +v 15.125000 5.500000 3.750000 +v 14.750000 5.500000 4.125000 +v 14.750000 5.500000 4.875000 +v 15.125000 5.500000 5.250000 +v 15.875000 5.500000 5.250000 +v 16.250000 5.500000 4.875000 +v 16.250000 5.500000 4.125000 +v 15.875000 5.500000 3.750000 +v 16.250000 6.500000 4.125000 +v 15.875000 6.500000 3.750000 +v 15.125000 6.500000 3.750000 +v 14.750000 6.500000 4.125000 +v 15.875000 6.500000 5.250000 +v 16.250000 6.500000 4.875000 +v 14.750000 6.500000 4.875000 +v 15.125000 6.500000 5.250000 +v 15.125000 7.000000 3.750000 +v 14.750000 7.000000 4.125000 +v 14.750000 7.000000 4.875000 +v 15.125000 7.000000 5.250000 +v 15.875000 7.000000 5.250000 +v 16.250000 7.000000 4.875000 +v 16.250000 7.000000 4.125000 +v 15.875000 7.000000 3.750000 +v 15.500000 7.000000 3.500000 +v 15.117317 7.000000 3.576120 +v 14.792893 7.000000 3.792893 +v 14.576120 7.000000 4.117317 +v 14.500000 7.000000 4.500000 +v 14.576120 7.000000 4.882684 +v 14.792893 7.000000 5.207107 +v 15.117317 7.000000 5.423880 +v 15.500000 7.000000 5.500000 +v 15.882683 7.000000 5.423880 +v 16.207108 7.000000 5.207107 +v 16.423880 7.000000 4.882684 +v 16.500000 7.000000 4.500000 +v 16.423880 7.000000 4.117316 +v 16.207108 7.000000 3.792893 +v 15.882683 7.000000 3.576120 +v 15.117317 7.500000 3.576120 +v 15.500000 7.500000 3.500000 +v 14.792893 7.500000 3.792893 +v 14.576120 7.500000 4.117317 +v 14.500000 7.500000 4.500000 +v 14.576120 7.500000 4.882684 +v 14.792893 7.500000 5.207107 +v 15.117317 7.500000 5.423880 +v 15.500000 7.500000 5.500000 +v 15.882683 7.500000 5.423880 +v 16.207108 7.500000 5.207107 +v 16.423880 7.500000 4.882684 +v 16.500000 7.500000 4.500000 +v 16.423880 7.500000 4.117316 +v 16.207108 7.500000 3.792893 +v 15.882683 7.500000 3.576120 +v 15.308659 8.000000 4.038060 +v 15.500000 8.000000 4.000000 +v 15.146446 8.000000 4.146447 +v 15.038060 8.000000 4.308658 +v 15.000000 8.000000 4.500000 +v 15.038060 8.000000 4.691342 +v 15.146446 8.000000 4.853553 +v 15.308659 8.000000 4.961940 +v 15.500000 8.000000 5.000000 +v 15.691341 8.000000 4.961940 +v 15.853554 8.000000 4.853553 +v 15.961940 8.000000 4.691342 +v 16.000000 8.000000 4.500000 +v 15.961940 8.000000 4.308658 +v 15.853554 8.000000 4.146446 +v 15.691341 8.000000 4.038060 +v 13.750000 0.250000 6.250000 +v 14.250000 0.250000 6.250000 +v 13.750000 0.250000 3.750000 +v 14.250000 0.250000 3.750000 +v 13.750000 1.000000 3.750000 +v 13.750000 1.000000 6.250000 +v 14.250000 1.000000 6.250000 +v 14.250000 1.000000 3.750000 +v 13.500000 1.000000 6.375000 +v 14.500000 1.000000 6.375000 +v 13.500000 1.000000 3.875000 +v 14.500000 1.000000 3.875000 +v 13.500000 2.500000 3.875000 +v 14.500000 2.500000 3.875000 +v 13.500000 4.000000 5.375000 +v 13.750000 7.250000 3.937500 +v 14.250000 7.250000 3.937500 +v 14.500000 4.000000 5.375000 +v 14.500000 1.500000 3.875000 +v 14.250000 7.250000 6.062500 +v 13.500000 5.000000 5.375000 +v 13.500000 1.500000 3.875000 +v 14.500000 1.000000 3.625000 +v 13.500000 1.000000 3.625000 +v 13.500000 1.500000 3.625000 +v 14.500000 1.500000 3.625000 +v 13.750000 7.250000 6.062500 +v 14.500000 5.000000 5.375000 +v 14.000000 1.500000 3.625000 +v 13.911612 1.500000 3.661612 +v 13.875000 1.500000 3.750000 +v 13.911612 1.500000 3.838388 +v 14.000000 1.500000 3.875000 +v 14.088388 1.500000 3.838388 +v 14.125000 1.500000 3.750000 +v 14.088388 1.500000 3.661612 +v 14.000000 2.500000 3.625000 +v 13.911612 2.500000 3.661612 +v 13.875000 2.500000 3.750000 +v 13.911612 2.500000 3.838388 +v 14.000000 2.500000 3.875000 +v 14.088388 2.500000 3.838388 +v 14.125000 2.500000 3.750000 +v 14.088388 2.500000 3.661612 +v 14.000000 4.000000 5.125000 +v 13.911612 4.000000 5.161612 +v 13.875000 4.000000 5.250000 +v 13.911612 4.000000 5.338388 +v 14.000000 4.000000 5.375000 +v 14.088388 4.000000 5.338388 +v 14.125000 4.000000 5.250000 +v 14.088388 4.000000 5.161612 +v 14.000000 5.000000 5.125000 +v 13.911612 5.000000 5.161612 +v 13.875000 5.000000 5.250000 +v 13.911612 5.000000 5.338388 +v 14.000000 5.000000 5.375000 +v 14.088388 5.000000 5.338388 +v 14.125000 5.000000 5.250000 +v 14.088388 5.000000 5.161612 +v 15.500000 1.125000 3.625000 +v 15.165152 1.125000 3.691605 +v 14.881281 1.125000 3.881281 +v 14.691606 1.125000 4.165152 +v 14.625000 1.125000 4.500000 +v 14.691606 1.125000 4.834848 +v 14.881281 1.125000 5.118718 +v 15.165152 1.125000 5.308394 +v 15.500000 1.125000 5.375000 +v 15.834847 1.125000 5.308394 +v 16.118717 1.125000 5.118719 +v 16.308395 1.125000 4.834848 +v 16.375000 1.125000 4.500000 +v 16.308395 1.125000 4.165152 +v 16.118717 1.125000 3.881281 +v 15.834847 1.125000 3.691605 +v 15.500000 1.250000 3.625000 +v 15.165152 1.250000 3.691605 +v 14.881281 1.250000 3.881281 +v 16.118717 1.250000 5.118719 +v 16.308395 1.250000 4.834848 +v 16.375000 1.250000 4.500000 +v 16.308395 1.250000 4.165152 +v 16.118717 1.250000 3.881281 +v 15.834847 1.250000 3.691605 +v 15.500000 1.875000 3.625000 +v 15.165152 1.875000 3.691605 +v 14.881281 1.875000 3.881281 +v 14.691606 1.875000 4.165152 +v 14.625000 1.875000 4.500000 +v 14.691606 1.875000 4.834848 +v 14.881281 1.875000 5.118718 +v 15.165152 1.875000 5.308394 +v 15.500000 1.875000 5.375000 +v 15.834847 1.875000 5.308394 +v 16.118717 1.875000 5.118719 +v 16.308395 1.875000 4.834848 +v 16.375000 1.875000 4.500000 +v 16.308395 1.875000 4.165152 +v 16.118717 1.875000 3.881281 +v 15.834847 1.875000 3.691605 +v 15.500000 1.750000 3.625000 +v 15.165152 1.750000 3.691605 +v 14.881281 1.750000 3.881281 +v 16.118717 1.750000 5.118719 +v 16.308395 1.750000 4.834848 +v 16.375000 1.750000 4.500000 +v 16.308395 1.750000 4.165152 +v 16.118717 1.750000 3.881281 +v 15.834847 1.750000 3.691605 +v 15.500000 2.500000 3.500000 +v 15.117317 2.500000 3.576120 +v 14.792893 2.500000 3.792893 +v 14.576120 2.500000 4.117317 +v 14.500000 2.500000 4.500000 +v 14.576120 2.500000 4.882684 +v 14.792893 2.500000 5.207107 +v 15.117317 2.500000 5.423880 +v 15.500000 2.500000 5.500000 +v 15.882683 2.500000 5.423880 +v 16.207108 2.500000 5.207107 +v 16.423880 2.500000 4.882684 +v 16.500000 2.500000 4.500000 +v 16.423880 2.500000 4.117316 +v 16.207108 2.500000 3.792893 +v 15.882683 2.500000 3.576120 +v 15.117317 3.500000 3.576120 +v 15.500000 3.500000 3.500000 +v 14.792893 3.500000 3.792893 +v 14.576120 3.500000 4.117317 +v 14.500000 3.500000 4.500000 +v 14.576120 3.500000 4.882684 +v 14.792893 3.500000 5.207107 +v 15.117317 3.500000 5.423880 +v 15.500000 3.500000 5.500000 +v 15.882683 3.500000 5.423880 +v 16.207108 3.500000 5.207107 +v 16.423880 3.500000 4.882684 +v 16.500000 3.500000 4.500000 +v 16.423880 3.500000 4.117316 +v 16.207108 3.500000 3.792893 +v 15.882683 3.500000 3.576120 +v 15.882683 3.250000 3.576120 +v 16.207108 3.250000 3.792893 +v 16.423880 3.250000 4.117316 +v 16.500000 3.250000 4.500000 +v 16.423880 3.250000 4.882684 +v 16.207108 3.250000 5.207107 +v 14.792893 3.250000 3.792893 +v 15.500000 3.250000 3.500000 +v 15.117317 3.250000 3.576120 +v 15.882683 2.750000 3.576120 +v 16.207108 2.750000 3.792893 +v 16.423880 2.750000 4.117316 +v 16.500000 2.750000 4.500000 +v 16.423880 2.750000 4.882684 +v 16.207108 2.750000 5.207107 +v 14.792893 2.750000 3.792893 +v 15.117317 2.750000 3.576120 +v 15.500000 2.750000 3.500000 +v 15.500000 2.625000 3.625000 +v 15.165152 2.625000 3.691605 +v 14.881281 2.625000 3.881281 +v 14.691606 2.625000 4.165152 +v 14.625000 2.625000 4.500000 +v 14.691606 2.625000 4.834848 +v 14.881281 2.625000 5.118718 +v 15.165152 2.625000 5.308394 +v 15.500000 2.625000 5.375000 +v 15.834847 2.625000 5.308394 +v 16.118717 2.625000 5.118719 +v 16.308395 2.625000 4.834848 +v 16.375000 2.625000 4.500000 +v 16.308395 2.625000 4.165152 +v 16.118717 2.625000 3.881281 +v 15.834847 2.625000 3.691605 +v 15.500000 2.750000 3.625000 +v 15.165152 2.750000 3.691605 +v 14.881281 2.750000 3.881281 +v 16.118717 2.750000 5.118719 +v 16.308395 2.750000 4.834848 +v 16.375000 2.750000 4.500000 +v 16.308395 2.750000 4.165152 +v 16.118717 2.750000 3.881281 +v 15.834847 2.750000 3.691605 +v 15.500000 3.375000 3.625000 +v 15.165152 3.375000 3.691605 +v 14.881281 3.375000 3.881281 +v 14.691606 3.375000 4.165152 +v 14.625000 3.375000 4.500000 +v 14.691606 3.375000 4.834848 +v 14.881281 3.375000 5.118718 +v 15.165152 3.375000 5.308394 +v 15.500000 3.375000 5.375000 +v 15.834847 3.375000 5.308394 +v 16.118717 3.375000 5.118719 +v 16.308395 3.375000 4.834848 +v 16.375000 3.375000 4.500000 +v 16.308395 3.375000 4.165152 +v 16.118717 3.375000 3.881281 +v 15.834847 3.375000 3.691605 +v 15.500000 3.250000 3.625000 +v 15.165152 3.250000 3.691605 +v 14.881281 3.250000 3.881281 +v 16.118717 3.250000 5.118719 +v 16.308395 3.250000 4.834848 +v 16.375000 3.250000 4.500000 +v 16.308395 3.250000 4.165152 +v 16.118717 3.250000 3.881281 +v 15.834847 3.250000 3.691605 +v 15.500000 4.000000 3.500000 +v 15.117317 4.000000 3.576120 +v 14.792893 4.000000 3.792893 +v 14.576120 4.000000 4.117317 +v 14.500000 4.000000 4.500000 +v 14.576120 4.000000 4.882684 +v 14.792893 4.000000 5.207107 +v 15.117317 4.000000 5.423880 +v 15.500000 4.000000 5.500000 +v 15.882683 4.000000 5.423880 +v 16.207108 4.000000 5.207107 +v 16.423880 4.000000 4.882684 +v 16.500000 4.000000 4.500000 +v 16.423880 4.000000 4.117316 +v 16.207108 4.000000 3.792893 +v 15.882683 4.000000 3.576120 +v 15.117317 5.000000 3.576120 +v 15.500000 5.000000 3.500000 +v 14.792893 5.000000 3.792893 +v 14.576120 5.000000 4.117317 +v 14.500000 5.000000 4.500000 +v 14.576120 5.000000 4.882684 +v 14.792893 5.000000 5.207107 +v 15.117317 5.000000 5.423880 +v 15.500000 5.000000 5.500000 +v 15.882683 5.000000 5.423880 +v 16.207108 5.000000 5.207107 +v 16.423880 5.000000 4.882684 +v 16.500000 5.000000 4.500000 +v 16.423880 5.000000 4.117316 +v 16.207108 5.000000 3.792893 +v 15.882683 5.000000 3.576120 +v 15.882683 4.750000 3.576120 +v 16.207108 4.750000 3.792893 +v 16.423880 4.750000 4.117316 +v 16.500000 4.750000 4.500000 +v 16.423880 4.750000 4.882684 +v 16.207108 4.750000 5.207107 +v 14.792893 4.750000 3.792893 +v 15.500000 4.750000 3.500000 +v 15.117317 4.750000 3.576120 +v 15.882683 4.250000 3.576120 +v 16.207108 4.250000 3.792893 +v 16.423880 4.250000 4.117316 +v 16.500000 4.250000 4.500000 +v 16.423880 4.250000 4.882684 +v 16.207108 4.250000 5.207107 +v 14.792893 4.250000 3.792893 +v 15.117317 4.250000 3.576120 +v 15.500000 4.250000 3.500000 +v 15.500000 4.125000 3.625000 +v 15.165152 4.125000 3.691605 +v 14.881281 4.125000 3.881281 +v 14.691606 4.125000 4.165152 +v 14.625000 4.125000 4.500000 +v 14.691606 4.125000 4.834848 +v 14.881281 4.125000 5.118718 +v 15.165152 4.125000 5.308394 +v 15.500000 4.125000 5.375000 +v 15.834847 4.125000 5.308394 +v 16.118717 4.125000 5.118719 +v 16.308395 4.125000 4.834848 +v 16.375000 4.125000 4.500000 +v 16.308395 4.125000 4.165152 +v 16.118717 4.125000 3.881281 +v 15.834847 4.125000 3.691605 +v 15.500000 4.250000 3.625000 +v 15.165152 4.250000 3.691605 +v 14.881281 4.250000 3.881281 +v 16.118717 4.250000 5.118719 +v 16.308395 4.250000 4.834848 +v 16.375000 4.250000 4.500000 +v 16.308395 4.250000 4.165152 +v 16.118717 4.250000 3.881281 +v 15.834847 4.250000 3.691605 +v 15.500000 4.875000 3.625000 +v 15.165152 4.875000 3.691605 +v 14.881281 4.875000 3.881281 +v 14.691606 4.875000 4.165152 +v 14.625000 4.875000 4.500000 +v 14.691606 4.875000 4.834848 +v 14.881281 4.875000 5.118718 +v 15.165152 4.875000 5.308394 +v 15.500000 4.875000 5.375000 +v 15.834847 4.875000 5.308394 +v 16.118717 4.875000 5.118719 +v 16.308395 4.875000 4.834848 +v 16.375000 4.875000 4.500000 +v 16.308395 4.875000 4.165152 +v 16.118717 4.875000 3.881281 +v 15.834847 4.875000 3.691605 +v 15.500000 4.750000 3.625000 +v 15.165152 4.750000 3.691605 +v 14.881281 4.750000 3.881281 +v 16.118717 4.750000 5.118719 +v 16.308395 4.750000 4.834848 +v 16.375000 4.750000 4.500000 +v 16.308395 4.750000 4.165152 +v 16.118717 4.750000 3.881281 +v 15.834847 4.750000 3.691605 +v 15.500000 5.500000 3.500000 +v 15.117317 5.500000 3.576120 +v 14.792893 5.500000 3.792893 +v 14.576120 5.500000 4.117317 +v 14.500000 5.500000 4.500000 +v 14.576120 5.500000 4.882684 +v 14.792893 5.500000 5.207107 +v 15.117317 5.500000 5.423880 +v 15.500000 5.500000 5.500000 +v 15.882683 5.500000 5.423880 +v 16.207108 5.500000 5.207107 +v 16.423880 5.500000 4.882684 +v 16.500000 5.500000 4.500000 +v 16.423880 5.500000 4.117316 +v 16.207108 5.500000 3.792893 +v 15.882683 5.500000 3.576120 +v 15.117317 6.500000 3.576120 +v 15.500000 6.500000 3.500000 +v 14.792893 6.500000 3.792893 +v 14.576120 6.500000 4.117317 +v 14.500000 6.500000 4.500000 +v 14.576120 6.500000 4.882684 +v 14.792893 6.500000 5.207107 +v 15.117317 6.500000 5.423880 +v 15.500000 6.500000 5.500000 +v 15.882683 6.500000 5.423880 +v 16.207108 6.500000 5.207107 +v 16.423880 6.500000 4.882684 +v 16.500000 6.500000 4.500000 +v 16.423880 6.500000 4.117316 +v 16.207108 6.500000 3.792893 +v 15.882683 6.500000 3.576120 +v 15.882683 6.250000 3.576120 +v 16.207108 6.250000 3.792893 +v 16.423880 6.250000 4.117316 +v 16.500000 6.250000 4.500000 +v 16.423880 6.250000 4.882684 +v 16.207108 6.250000 5.207107 +v 14.792893 6.250000 3.792893 +v 15.500000 6.250000 3.500000 +v 15.117317 6.250000 3.576120 +v 15.882683 5.750000 3.576120 +v 16.207108 5.750000 3.792893 +v 16.423880 5.750000 4.117316 +v 16.500000 5.750000 4.500000 +v 16.423880 5.750000 4.882684 +v 16.207108 5.750000 5.207107 +v 14.792893 5.750000 3.792893 +v 15.117317 5.750000 3.576120 +v 15.500000 5.750000 3.500000 +v 15.500000 5.625000 3.625000 +v 15.165152 5.625000 3.691605 +v 14.881281 5.625000 3.881281 +v 14.691606 5.625000 4.165152 +v 14.625000 5.625000 4.500000 +v 14.691606 5.625000 4.834848 +v 14.881281 5.625000 5.118718 +v 15.165152 5.625000 5.308394 +v 15.500000 5.625000 5.375000 +v 15.834847 5.625000 5.308394 +v 16.118717 5.625000 5.118719 +v 16.308395 5.625000 4.834848 +v 16.375000 5.625000 4.500000 +v 16.308395 5.625000 4.165152 +v 16.118717 5.625000 3.881281 +v 15.834847 5.625000 3.691605 +v 15.500000 5.750000 3.625000 +v 15.165152 5.750000 3.691605 +v 14.881281 5.750000 3.881281 +v 16.118717 5.750000 5.118719 +v 16.308395 5.750000 4.834848 +v 16.375000 5.750000 4.500000 +v 16.308395 5.750000 4.165152 +v 16.118717 5.750000 3.881281 +v 15.834847 5.750000 3.691605 +v 15.500000 6.375000 3.625000 +v 15.165152 6.375000 3.691605 +v 14.881281 6.375000 3.881281 +v 14.691606 6.375000 4.165152 +v 14.625000 6.375000 4.500000 +v 14.691606 6.375000 4.834848 +v 14.881281 6.375000 5.118718 +v 15.165152 6.375000 5.308394 +v 15.500000 6.375000 5.375000 +v 15.834847 6.375000 5.308394 +v 16.118717 6.375000 5.118719 +v 16.308395 6.375000 4.834848 +v 16.375000 6.375000 4.500000 +v 16.308395 6.375000 4.165152 +v 16.118717 6.375000 3.881281 +v 15.834847 6.375000 3.691605 +v 15.500000 6.250000 3.625000 +v 15.165152 6.250000 3.691605 +v 14.881281 6.250000 3.881281 +v 16.118717 6.250000 5.118719 +v 16.308395 6.250000 4.834848 +v 16.375000 6.250000 4.500000 +v 16.308395 6.250000 4.165152 +v 16.118717 6.250000 3.881281 +v 15.834847 6.250000 3.691605 +v 14.250000 1.500000 3.625000 +v 14.161612 1.500000 3.661612 +v 14.125000 1.500000 3.750000 +v 14.161612 1.500000 3.838388 +v 14.250000 1.500000 3.875000 +v 14.338388 1.500000 3.838388 +v 14.375000 1.500000 3.750000 +v 14.338388 1.500000 3.661612 +v 14.250000 2.500000 3.625000 +v 14.161612 2.500000 3.661612 +v 14.125000 2.500000 3.750000 +v 14.161612 2.500000 3.838388 +v 14.250000 2.500000 3.875000 +v 14.338388 2.500000 3.838388 +v 14.375000 2.500000 3.750000 +v 14.338388 2.500000 3.661612 +v 14.250000 4.000000 5.125000 +v 14.161612 4.000000 5.161612 +v 14.125000 4.000000 5.250000 +v 14.161612 4.000000 5.338388 +v 14.250000 4.000000 5.375000 +v 14.338388 4.000000 5.338388 +v 14.375000 4.000000 5.250000 +v 14.338388 4.000000 5.161612 +v 14.250000 5.000000 5.125000 +v 14.161612 5.000000 5.161612 +v 14.125000 5.000000 5.250000 +v 14.161612 5.000000 5.338388 +v 14.250000 5.000000 5.375000 +v 14.338388 5.000000 5.338388 +v 14.375000 5.000000 5.250000 +v 14.338388 5.000000 5.161612 +v 13.750000 1.500000 3.625000 +v 13.661612 1.500000 3.661612 +v 13.625000 1.500000 3.750000 +v 13.661612 1.500000 3.838388 +v 13.750000 1.500000 3.875000 +v 13.838388 1.500000 3.838388 +v 13.875000 1.500000 3.750000 +v 13.838388 1.500000 3.661612 +v 13.750000 2.500000 3.625000 +v 13.661612 2.500000 3.661612 +v 13.625000 2.500000 3.750000 +v 13.661612 2.500000 3.838388 +v 13.750000 2.500000 3.875000 +v 13.838388 2.500000 3.838388 +v 13.875000 2.500000 3.750000 +v 13.838388 2.500000 3.661612 +v 13.750000 4.000000 5.125000 +v 13.661612 4.000000 5.161612 +v 13.625000 4.000000 5.250000 +v 13.661612 4.000000 5.338388 +v 13.750000 4.000000 5.375000 +v 13.838388 4.000000 5.338388 +v 13.875000 4.000000 5.250000 +v 13.838388 4.000000 5.161612 +v 13.750000 5.000000 5.125000 +v 13.661612 5.000000 5.161612 +v 13.625000 5.000000 5.250000 +v 13.661612 5.000000 5.338388 +v 13.750000 5.000000 5.375000 +v 13.838388 5.000000 5.338388 +v 13.875000 5.000000 5.250000 +v 13.838388 5.000000 5.161612 +v 14.750000 0.250000 6.250000 +v 16.250000 0.250000 6.250000 +v 14.750000 1.000000 6.250000 +v 16.250000 1.000000 6.250000 +v 14.750000 0.250000 5.750000 +v 16.250000 0.250000 5.750000 +v 14.750000 1.000000 5.750000 +v 16.250000 1.000000 5.750000 +v 15.125000 1.125000 6.375000 +v 15.125000 1.875000 6.375000 +v 14.625000 1.000000 5.500000 +v 14.625000 2.000000 5.500000 +v 15.875000 1.125000 6.375000 +v 15.875000 1.875000 6.375000 +v 16.375000 1.000000 5.500000 +v 16.375000 2.000000 5.500000 +v 14.625000 1.000000 6.375000 +v 14.625000 2.000000 6.375000 +v 16.375000 2.000000 6.375000 +v 16.375000 1.000000 6.375000 +v 15.187500 1.187500 6.500000 +v 15.187500 1.812500 6.500000 +v 15.812500 1.812500 6.500000 +v 15.812500 1.187500 6.500000 +v 15.125000 1.125000 6.500000 +v 15.125000 1.875000 6.500000 +v 15.875000 1.875000 6.500000 +v 15.875000 1.125000 6.500000 +v 15.187500 1.187500 6.375000 +v 15.187500 1.812500 6.375000 +v 15.812500 1.812500 6.375000 +v 15.812500 1.187500 6.375000 +v 15.500000 1.562500 6.375000 +v 15.445873 1.531250 6.375000 +v 15.445873 1.468750 6.375000 +v 15.500000 1.437500 6.375000 +v 15.554127 1.468750 6.375000 +v 15.554127 1.531250 6.375000 +v 15.445873 1.531250 6.500000 +v 15.500000 1.562500 6.500000 +v 15.445873 1.468750 6.500000 +v 15.500000 1.437500 6.500000 +v 15.554127 1.468750 6.500000 +v 15.554127 1.531250 6.500000 +v 15.310556 1.640625 6.437500 +v 15.472937 1.734375 6.437500 +v 15.310556 1.359375 6.437500 +v 15.472937 1.265625 6.437500 +v 15.716507 1.406250 6.437500 +v 15.716507 1.593750 6.437500 +v 15.445873 1.531250 6.437500 +v 15.500000 1.562500 6.437500 +v 15.445873 1.468750 6.437500 +v 15.500000 1.437500 6.437500 +v 15.554127 1.468750 6.437500 +v 15.554127 1.531250 6.437500 +v 15.437500 1.187500 6.500000 +v 15.437500 1.812500 6.500000 +v 15.375000 1.187500 6.500000 +v 15.375000 1.812500 6.500000 +v 15.312500 1.187500 6.500000 +v 15.312500 1.812500 6.500000 +v 15.250000 1.187500 6.500000 +v 15.250000 1.812500 6.500000 +v 15.750000 1.187500 6.500000 +v 15.750000 1.812500 6.500000 +v 15.687500 1.187500 6.500000 +v 15.687500 1.812500 6.500000 +v 15.625000 1.187500 6.500000 +v 15.625000 1.812500 6.500000 +v 15.562500 1.187500 6.500000 +v 15.562500 1.812500 6.500000 +v 15.125000 2.625000 6.375000 +v 15.125000 3.375000 6.375000 +v 14.625000 2.500000 5.500000 +v 14.625000 3.500000 5.500000 +v 15.875000 2.625000 6.375000 +v 15.875000 3.375000 6.375000 +v 16.375000 2.500000 5.500000 +v 16.375000 3.500000 5.500000 +v 14.625000 2.500000 6.375000 +v 14.625000 3.500000 6.375000 +v 16.375000 3.500000 6.375000 +v 16.375000 2.500000 6.375000 +v 15.187500 2.687500 6.500000 +v 15.187500 3.312500 6.500000 +v 15.812500 3.312500 6.500000 +v 15.812500 2.687500 6.500000 +v 15.125000 2.625000 6.500000 +v 15.125000 3.375000 6.500000 +v 15.875000 3.375000 6.500000 +v 15.875000 2.625000 6.500000 +v 15.187500 2.687500 6.375000 +v 15.187500 3.312500 6.375000 +v 15.812500 3.312500 6.375000 +v 15.812500 2.687500 6.375000 +v 15.500000 3.062500 6.375000 +v 15.445873 3.031250 6.375000 +v 15.445873 2.968750 6.375000 +v 15.500000 2.937500 6.375000 +v 15.554127 2.968750 6.375000 +v 15.554127 3.031250 6.375000 +v 15.445873 3.031250 6.500000 +v 15.500000 3.062500 6.500000 +v 15.445873 2.968750 6.500000 +v 15.500000 2.937500 6.500000 +v 15.554127 2.968750 6.500000 +v 15.554127 3.031250 6.500000 +v 15.310556 3.140625 6.437500 +v 15.472937 3.234375 6.437500 +v 15.310556 2.859375 6.437500 +v 15.472937 2.765625 6.437500 +v 15.716507 2.906250 6.437500 +v 15.716507 3.093750 6.437500 +v 15.445873 3.031250 6.437500 +v 15.500000 3.062500 6.437500 +v 15.445873 2.968750 6.437500 +v 15.500000 2.937500 6.437500 +v 15.554127 2.968750 6.437500 +v 15.554127 3.031250 6.437500 +v 15.437500 2.687500 6.500000 +v 15.437500 3.312500 6.500000 +v 15.375000 2.687500 6.500000 +v 15.375000 3.312500 6.500000 +v 15.312500 2.687500 6.500000 +v 15.312500 3.312500 6.500000 +v 15.250000 2.687500 6.500000 +v 15.250000 3.312500 6.500000 +v 15.750000 2.687500 6.500000 +v 15.750000 3.312500 6.500000 +v 15.687500 2.687500 6.500000 +v 15.687500 3.312500 6.500000 +v 15.625000 2.687500 6.500000 +v 15.625000 3.312500 6.500000 +v 15.562500 2.687500 6.500000 +v 15.562500 3.312500 6.500000 +v 14.750000 2.000000 6.312500 +v 16.250000 2.000000 6.312500 +v 14.750000 2.000000 5.812500 +v 16.250000 2.000000 5.812500 +v 14.750000 2.500000 6.312500 +v 16.250000 2.500000 6.312500 +v 14.750000 2.500000 5.812500 +v 16.250000 2.500000 5.812500 +v 15.875000 2.375000 5.812500 +v 15.786612 2.338388 5.812500 +v 15.750000 2.250000 5.812500 +v 15.786612 2.161612 5.812500 +v 15.875000 2.125000 5.812500 +v 15.963388 2.161612 5.812500 +v 16.000000 2.250000 5.812500 +v 15.963388 2.338388 5.812500 +v 15.875000 2.375000 5.062500 +v 15.786612 2.338388 5.062500 +v 15.750000 2.250000 5.062500 +v 15.786612 2.161612 5.062500 +v 15.875000 2.125000 5.062500 +v 15.963388 2.161612 5.062500 +v 16.000000 2.250000 5.062500 +v 15.963388 2.338388 5.062500 +v 15.125000 2.375000 5.812500 +v 15.036612 2.338388 5.812500 +v 15.000000 2.250000 5.812500 +v 15.036612 2.161612 5.812500 +v 15.125000 2.125000 5.812500 +v 15.213388 2.161612 5.812500 +v 15.250000 2.250000 5.812500 +v 15.213388 2.338388 5.812500 +v 15.125000 2.375000 5.062500 +v 15.036612 2.338388 5.062500 +v 15.000000 2.250000 5.062500 +v 15.036612 2.161612 5.062500 +v 15.125000 2.125000 5.062500 +v 15.213388 2.161612 5.062500 +v 15.250000 2.250000 5.062500 +v 15.213388 2.338388 5.062500 +v 14.750000 3.500000 6.312500 +v 16.250000 3.500000 6.312500 +v 14.750000 3.500000 5.812500 +v 16.250000 3.500000 5.812500 +v 14.500000 5.000000 3.625000 +v 13.500000 5.000000 3.625000 +v 14.750000 4.000000 5.812500 +v 16.250000 4.000000 5.812500 +v 15.875000 3.875000 5.812500 +v 15.786612 3.838388 5.812500 +v 15.750000 3.750000 5.812500 +v 15.786612 3.661612 5.812500 +v 15.875000 3.625000 5.812500 +v 15.963388 3.661612 5.812500 +v 16.000000 3.750000 5.812500 +v 15.963388 3.838388 5.812500 +v 15.875000 3.875000 5.062500 +v 15.786612 3.838388 5.062500 +v 15.750000 3.750000 5.062500 +v 15.786612 3.661612 5.062500 +v 15.875000 3.625000 5.062500 +v 15.963388 3.661612 5.062500 +v 16.000000 3.750000 5.062500 +v 15.963388 3.838388 5.062500 +v 15.125000 3.875000 5.812500 +v 15.036612 3.838388 5.812500 +v 15.000000 3.750000 5.812500 +v 15.036612 3.661612 5.812500 +v 15.125000 3.625000 5.812500 +v 15.213388 3.661612 5.812500 +v 15.250000 3.750000 5.812500 +v 15.213388 3.838388 5.812500 +v 15.125000 3.875000 5.062500 +v 15.036612 3.838388 5.062500 +v 15.000000 3.750000 5.062500 +v 15.036612 3.661612 5.062500 +v 15.125000 3.625000 5.062500 +v 15.213388 3.661612 5.062500 +v 15.250000 3.750000 5.062500 +v 15.213388 3.838388 5.062500 +v 14.750000 3.750000 6.312500 +v 14.750000 4.000000 6.062500 +v 16.250000 4.000000 6.062500 +v 16.250000 3.750000 6.312500 +v 13.625000 6.000000 6.250000 +v 14.375000 6.000000 6.250000 +v 14.375000 6.000000 3.750000 +v 13.625000 6.000000 3.750000 +v 14.250000 4.000000 4.625000 +v 14.161612 4.000000 4.661612 +v 14.125000 4.000000 4.750000 +v 14.161612 4.000000 4.838388 +v 14.250000 4.000000 4.875000 +v 14.338388 4.000000 4.838388 +v 14.375000 4.000000 4.750000 +v 14.338388 4.000000 4.661612 +v 14.250000 5.000000 4.625000 +v 14.161612 5.000000 4.661612 +v 14.125000 5.000000 4.750000 +v 14.161612 5.000000 4.838388 +v 14.250000 5.000000 4.875000 +v 14.338388 5.000000 4.838388 +v 14.375000 5.000000 4.750000 +v 14.338388 5.000000 4.661612 +v 14.250000 4.000000 3.625000 +v 14.161612 4.000000 3.661612 +v 14.125000 4.000000 3.750000 +v 14.161612 4.000000 3.838388 +v 14.250000 4.000000 3.875000 +v 14.338388 4.000000 3.838388 +v 14.375000 4.000000 3.750000 +v 14.338388 4.000000 3.661612 +v 14.250000 5.000000 3.625000 +v 14.161612 5.000000 3.661612 +v 14.125000 5.000000 3.750000 +v 14.161612 5.000000 3.838388 +v 14.250000 5.000000 3.875000 +v 14.338388 5.000000 3.838388 +v 14.375000 5.000000 3.750000 +v 14.338388 5.000000 3.661612 +v 14.161612 3.849112 3.724112 +v 14.250000 3.823223 3.698223 +v 14.161612 3.963388 4.625000 +v 14.125000 3.875000 4.625000 +v 14.161612 3.786612 4.625000 +v 14.250000 3.750000 4.625000 +v 14.338388 3.786612 4.625000 +v 14.375000 3.875000 4.625000 +v 14.338388 3.963388 4.625000 +v 14.338388 3.974112 4.650888 +v 14.375000 3.911612 4.713388 +v 14.338388 3.849112 4.775888 +v 14.250000 3.823223 4.801777 +v 14.161612 3.849112 4.775888 +v 14.125000 3.911612 4.713388 +v 14.161612 3.974112 4.650888 +v 14.125000 3.911612 3.786612 +v 14.161612 3.974112 3.849112 +v 14.338388 3.974112 3.849112 +v 14.375000 3.911612 3.786612 +v 14.338388 3.849112 3.724112 +v 14.161612 3.786612 3.875000 +v 14.250000 3.750000 3.875000 +v 14.125000 3.875000 3.875000 +v 14.161612 3.963388 3.875000 +v 14.338388 3.963388 3.875000 +v 14.375000 3.875000 3.875000 +v 14.338388 3.786612 3.875000 +v 14.000000 4.000000 4.625000 +v 13.911612 4.000000 4.661612 +v 13.875000 4.000000 4.750000 +v 13.911612 4.000000 4.838388 +v 14.000000 4.000000 4.875000 +v 14.088388 4.000000 4.838388 +v 14.125000 4.000000 4.750000 +v 14.088388 4.000000 4.661612 +v 14.000000 5.000000 4.625000 +v 13.911612 5.000000 4.661612 +v 13.875000 5.000000 4.750000 +v 13.911612 5.000000 4.838388 +v 14.000000 5.000000 4.875000 +v 14.088388 5.000000 4.838388 +v 14.125000 5.000000 4.750000 +v 14.088388 5.000000 4.661612 +v 14.000000 4.000000 3.625000 +v 13.911612 4.000000 3.661612 +v 13.875000 4.000000 3.750000 +v 13.911612 4.000000 3.838388 +v 14.000000 4.000000 3.875000 +v 14.088388 4.000000 3.838388 +v 14.125000 4.000000 3.750000 +v 14.088388 4.000000 3.661612 +v 14.000000 5.000000 3.625000 +v 13.911612 5.000000 3.661612 +v 13.875000 5.000000 3.750000 +v 13.911612 5.000000 3.838388 +v 14.000000 5.000000 3.875000 +v 14.088388 5.000000 3.838388 +v 14.125000 5.000000 3.750000 +v 14.088388 5.000000 3.661612 +v 13.911612 3.849112 3.724112 +v 14.000000 3.823223 3.698223 +v 13.911612 3.963388 4.625000 +v 13.875000 3.875000 4.625000 +v 13.911612 3.786612 4.625000 +v 14.000000 3.750000 4.625000 +v 14.088388 3.786612 4.625000 +v 14.125000 3.875000 4.625000 +v 14.088388 3.963388 4.625000 +v 14.088388 3.974112 4.650888 +v 14.125000 3.911612 4.713388 +v 14.088388 3.849112 4.775888 +v 14.000000 3.823223 4.801777 +v 13.911612 3.849112 4.775888 +v 13.875000 3.911612 4.713388 +v 13.911612 3.974112 4.650888 +v 13.875000 3.911612 3.786612 +v 13.911612 3.974112 3.849112 +v 14.088388 3.974112 3.849112 +v 14.125000 3.911612 3.786612 +v 14.088388 3.849112 3.724112 +v 13.911612 3.786612 3.875000 +v 14.000000 3.750000 3.875000 +v 13.875000 3.875000 3.875000 +v 13.911612 3.963388 3.875000 +v 14.088388 3.963388 3.875000 +v 14.125000 3.875000 3.875000 +v 14.088388 3.786612 3.875000 +v 13.750000 4.000000 4.625000 +v 13.661612 4.000000 4.661612 +v 13.625000 4.000000 4.750000 +v 13.661612 4.000000 4.838388 +v 13.750000 4.000000 4.875000 +v 13.838388 4.000000 4.838388 +v 13.875000 4.000000 4.750000 +v 13.838388 4.000000 4.661612 +v 13.750000 5.000000 4.625000 +v 13.661612 5.000000 4.661612 +v 13.625000 5.000000 4.750000 +v 13.661612 5.000000 4.838388 +v 13.750000 5.000000 4.875000 +v 13.838388 5.000000 4.838388 +v 13.875000 5.000000 4.750000 +v 13.838388 5.000000 4.661612 +v 13.750000 4.000000 3.625000 +v 13.661612 4.000000 3.661612 +v 13.625000 4.000000 3.750000 +v 13.661612 4.000000 3.838388 +v 13.750000 4.000000 3.875000 +v 13.838388 4.000000 3.838388 +v 13.875000 4.000000 3.750000 +v 13.838388 4.000000 3.661612 +v 13.750000 5.000000 3.625000 +v 13.661612 5.000000 3.661612 +v 13.625000 5.000000 3.750000 +v 13.661612 5.000000 3.838388 +v 13.750000 5.000000 3.875000 +v 13.838388 5.000000 3.838388 +v 13.875000 5.000000 3.750000 +v 13.838388 5.000000 3.661612 +v 13.661612 3.849112 3.724112 +v 13.750000 3.823223 3.698223 +v 13.661612 3.963388 4.625000 +v 13.625000 3.875000 4.625000 +v 13.661612 3.786612 4.625000 +v 13.750000 3.750000 4.625000 +v 13.838388 3.786612 4.625000 +v 13.875000 3.875000 4.625000 +v 13.838388 3.963388 4.625000 +v 13.838388 3.974112 4.650888 +v 13.875000 3.911612 4.713388 +v 13.838388 3.849112 4.775888 +v 13.750000 3.823223 4.801777 +v 13.661612 3.849112 4.775888 +v 13.625000 3.911612 4.713388 +v 13.661612 3.974112 4.650888 +v 13.625000 3.911612 3.786612 +v 13.661612 3.974112 3.849112 +v 13.838388 3.974112 3.849112 +v 13.875000 3.911612 3.786612 +v 13.838388 3.849112 3.724112 +v 13.661612 3.786612 3.875000 +v 13.750000 3.750000 3.875000 +v 13.625000 3.875000 3.875000 +v 13.661612 3.963388 3.875000 +v 13.838388 3.963388 3.875000 +v 13.875000 3.875000 3.875000 +v 13.838388 3.786612 3.875000 +v 14.000000 5.000000 3.875000 +v 13.734835 5.000000 3.984835 +v 13.625000 5.000000 4.250000 +v 13.734835 5.000000 4.515165 +v 14.000000 5.000000 4.625000 +v 14.265165 5.000000 4.515165 +v 14.375000 5.000000 4.250000 +v 14.265165 5.000000 3.984835 +v 14.000000 4.000000 3.875000 +v 13.734835 4.000000 3.984835 +v 13.625000 4.000000 4.250000 +v 13.734835 4.000000 4.515165 +v 14.000000 4.000000 4.625000 +v 14.265165 4.000000 4.515165 +v 14.375000 4.000000 4.250000 +v 14.265165 4.000000 3.984835 +v 13.500000 6.000000 6.375000 +v 14.500000 6.000000 6.375000 +v 14.500000 6.000000 3.625000 +v 13.500000 6.000000 3.625000 +v 13.625000 6.250000 6.250000 +v 14.375000 6.250000 6.250000 +v 14.375000 6.250000 3.750000 +v 13.625000 6.250000 3.750000 +v 13.968750 6.250000 6.125000 +v 14.031250 6.250000 6.125000 +v 13.968750 6.250000 3.875000 +v 14.031250 6.250000 3.875000 +v 13.968750 6.500000 3.875000 +v 13.968750 6.500000 6.125000 +v 14.031250 6.500000 6.125000 +v 14.031250 6.500000 3.875000 +v 14.093750 6.250000 6.125000 +v 14.156250 6.250000 6.125000 +v 14.093750 6.250000 3.875000 +v 14.156250 6.250000 3.875000 +v 14.093750 6.500000 3.875000 +v 14.093750 6.500000 6.125000 +v 14.156250 6.500000 6.125000 +v 14.156250 6.500000 3.875000 +v 14.218750 6.250000 6.125000 +v 14.281250 6.250000 6.125000 +v 14.218750 6.250000 3.875000 +v 14.281250 6.250000 3.875000 +v 14.218750 6.500000 3.875000 +v 14.218750 6.500000 6.125000 +v 14.281250 6.500000 6.125000 +v 14.281250 6.500000 3.875000 +v 13.718750 6.250000 6.125000 +v 13.781250 6.250000 6.125000 +v 13.718750 6.250000 3.875000 +v 13.781250 6.250000 3.875000 +v 13.718750 6.500000 3.875000 +v 13.718750 6.500000 6.125000 +v 13.781250 6.500000 6.125000 +v 13.781250 6.500000 3.875000 +v 13.843750 6.250000 6.125000 +v 13.906250 6.250000 6.125000 +v 13.843750 6.250000 3.875000 +v 13.906250 6.250000 3.875000 +v 13.843750 6.500000 3.875000 +v 13.843750 6.500000 6.125000 +v 13.906250 6.500000 6.125000 +v 13.906250 6.500000 3.875000 +v 13.750000 7.375000 6.062500 +v 13.750000 7.375000 3.937500 +v 14.250000 7.375000 3.937500 +v 14.250000 7.375000 6.062500 +v 13.625000 7.375000 6.250000 +v 13.625000 7.375000 3.750000 +v 14.375000 7.375000 3.750000 +v 14.375000 7.375000 6.250000 +v 13.625000 7.250000 6.250000 +v 13.625000 7.250000 3.750000 +v 14.375000 7.250000 3.750000 +v 14.375000 7.250000 6.250000 +v 13.625000 6.250000 3.750000 +v 13.625000 6.250000 3.875000 +v 13.750000 6.250000 3.750000 +v 13.750000 6.250000 3.875000 +v 13.625000 7.250000 3.750000 +v 13.625000 7.250000 3.875000 +v 13.750000 7.250000 3.750000 +v 13.750000 7.250000 3.875000 +v 14.250000 6.250000 3.750000 +v 14.250000 6.250000 3.875000 +v 14.375000 6.250000 3.750000 +v 14.375000 6.250000 3.875000 +v 14.250000 7.250000 3.750000 +v 14.250000 7.250000 3.875000 +v 14.375000 7.250000 3.750000 +v 14.375000 7.250000 3.875000 +v 13.625000 6.250000 6.125000 +v 13.625000 6.250000 6.250000 +v 13.750000 6.250000 6.125000 +v 13.750000 6.250000 6.250000 +v 13.625000 7.250000 6.125000 +v 13.625000 7.250000 6.250000 +v 13.750000 7.250000 6.125000 +v 13.750000 7.250000 6.250000 +v 14.250000 6.250000 6.125000 +v 14.250000 6.250000 6.250000 +v 14.375000 6.250000 6.125000 +v 14.375000 6.250000 6.250000 +v 14.250000 7.250000 6.125000 +v 14.250000 7.250000 6.250000 +v 14.375000 7.250000 6.125000 +v 14.375000 7.250000 6.250000 +v 13.625000 6.250000 4.812500 +v 14.375000 6.250000 4.812500 +v 13.750000 6.750000 4.875000 +v 14.250000 6.750000 4.875000 +v 13.625000 6.250000 5.187500 +v 14.375000 6.250000 5.187500 +v 13.750000 6.750000 5.125000 +v 14.250000 6.750000 5.125000 +v 13.625000 6.750000 4.812500 +v 14.375000 6.750000 4.812500 +v 13.625000 6.750000 5.187500 +v 14.375000 6.750000 5.187500 +v 13.750000 7.375000 4.875000 +v 14.250000 7.375000 4.875000 +v 13.750000 7.375000 5.125000 +v 14.250000 7.375000 5.125000 +v 15.875000 5.375000 5.562500 +v 15.786612 5.338388 5.562500 +v 15.750000 5.250000 5.562500 +v 15.786612 5.161612 5.562500 +v 15.875000 5.125000 5.562500 +v 15.963388 5.161612 5.562500 +v 16.000000 5.250000 5.562500 +v 15.963388 5.338388 5.562500 +v 15.875000 5.375000 5.062500 +v 15.786612 5.338388 5.062500 +v 15.750000 5.250000 5.062500 +v 15.786612 5.161612 5.062500 +v 15.875000 5.125000 5.062500 +v 15.963388 5.161612 5.062500 +v 16.000000 5.250000 5.062500 +v 15.963388 5.338388 5.062500 +v 15.125000 5.375000 5.562500 +v 15.036612 5.338388 5.562500 +v 15.000000 5.250000 5.562500 +v 15.036612 5.161612 5.562500 +v 15.125000 5.125000 5.562500 +v 15.213388 5.161612 5.562500 +v 15.250000 5.250000 5.562500 +v 15.213388 5.338388 5.562500 +v 15.125000 5.375000 5.062500 +v 15.036612 5.338388 5.062500 +v 15.000000 5.250000 5.062500 +v 15.036612 5.161612 5.062500 +v 15.125000 5.125000 5.062500 +v 15.213388 5.161612 5.062500 +v 15.250000 5.250000 5.062500 +v 15.213388 5.338388 5.062500 +v 14.750000 4.875000 5.562500 +v 16.250000 4.875000 5.562500 +v 14.750000 5.625000 5.562500 +v 16.250000 5.625000 5.562500 +v 14.750000 5.625000 6.312500 +v 14.750000 4.875000 6.312500 +v 16.250000 4.875000 6.312500 +v 16.250000 5.625000 6.312500 +v 15.687500 3.875000 5.937500 +v 15.599112 3.875000 5.974112 +v 15.562500 3.875000 6.062500 +v 15.599112 3.875000 6.150888 +v 15.687500 3.875000 6.187500 +v 15.775888 3.875000 6.150888 +v 15.812500 3.875000 6.062500 +v 15.775888 3.875000 5.974112 +v 15.687500 4.875000 5.937500 +v 15.599112 4.875000 5.974112 +v 15.562500 4.875000 6.062500 +v 15.599112 4.875000 6.150888 +v 15.687500 4.875000 6.187500 +v 15.775888 4.875000 6.150888 +v 15.812500 4.875000 6.062500 +v 15.775888 4.875000 5.974112 +v 16.062500 3.875000 5.937500 +v 15.974112 3.875000 5.974112 +v 15.937500 3.875000 6.062500 +v 15.974112 3.875000 6.150888 +v 16.062500 3.875000 6.187500 +v 16.150888 3.875000 6.150888 +v 16.187500 3.875000 6.062500 +v 16.150888 3.875000 5.974112 +v 16.062500 4.875000 5.937500 +v 15.974112 4.875000 5.974112 +v 15.937500 4.875000 6.062500 +v 15.974112 4.875000 6.150888 +v 16.062500 4.875000 6.187500 +v 16.150888 4.875000 6.150888 +v 16.187500 4.875000 6.062500 +v 16.150888 4.875000 5.974112 +v 14.937500 3.875000 5.937500 +v 14.849112 3.875000 5.974112 +v 14.812500 3.875000 6.062500 +v 14.849112 3.875000 6.150888 +v 14.937500 3.875000 6.187500 +v 15.025888 3.875000 6.150888 +v 15.062500 3.875000 6.062500 +v 15.025888 3.875000 5.974112 +v 14.937500 4.875000 5.937500 +v 14.849112 4.875000 5.974112 +v 14.812500 4.875000 6.062500 +v 14.849112 4.875000 6.150888 +v 14.937500 4.875000 6.187500 +v 15.025888 4.875000 6.150888 +v 15.062500 4.875000 6.062500 +v 15.025888 4.875000 5.974112 +v 15.312500 3.875000 5.937500 +v 15.224112 3.875000 5.974112 +v 15.187500 3.875000 6.062500 +v 15.224112 3.875000 6.150888 +v 15.312500 3.875000 6.187500 +v 15.400888 3.875000 6.150888 +v 15.437500 3.875000 6.062500 +v 15.400888 3.875000 5.974112 +v 15.312500 4.875000 5.937500 +v 15.224112 4.875000 5.974112 +v 15.187500 4.875000 6.062500 +v 15.224112 4.875000 6.150888 +v 15.312500 4.875000 6.187500 +v 15.400888 4.875000 6.150888 +v 15.437500 4.875000 6.062500 +v 15.400888 4.875000 5.974112 +v 16.000000 5.625000 5.500000 +v 15.750000 5.625000 5.566987 +v 15.566987 5.625000 5.750000 +v 15.500000 5.625000 6.000000 +v 15.566987 5.625000 6.250000 +v 15.750000 5.625000 6.433013 +v 16.000000 5.625000 6.500000 +v 16.250000 5.625000 6.433013 +v 16.433012 5.625000 6.250000 +v 16.500000 5.625000 6.000000 +v 16.433014 5.625000 5.750000 +v 16.250000 5.625000 5.566988 +v 15.750001 8.125000 5.566987 +v 16.000000 8.125000 5.500000 +v 15.566988 8.125000 5.750000 +v 15.500001 8.125000 6.000000 +v 15.566988 8.125000 6.250000 +v 15.750001 8.125000 6.433013 +v 16.000000 8.125000 6.500000 +v 16.250000 8.125000 6.433013 +v 16.433014 8.125000 6.250000 +v 16.500000 8.125000 6.000000 +v 16.433014 8.125000 5.750000 +v 16.250000 8.125000 5.566988 +v 15.000000 5.625000 5.500000 +v 14.750000 5.625000 5.566987 +v 14.566987 5.625000 5.750000 +v 14.500000 5.625000 6.000000 +v 14.566987 5.625000 6.250000 +v 14.750000 5.625000 6.433013 +v 15.000000 5.625000 6.500000 +v 15.250000 5.625000 6.433013 +v 15.433012 5.625000 6.250000 +v 15.500000 5.625000 6.000000 +v 15.433013 5.625000 5.750000 +v 15.250000 5.625000 5.566988 +v 14.750001 8.125000 5.566987 +v 15.000001 8.125000 5.500000 +v 14.566988 8.125000 5.750000 +v 14.500001 8.125000 6.000000 +v 14.566988 8.125000 6.250000 +v 14.750001 8.125000 6.433013 +v 15.000001 8.125000 6.500000 +v 15.250001 8.125000 6.433013 +v 15.433014 8.125000 6.250000 +v 15.500001 8.125000 6.000000 +v 15.433014 8.125000 5.750000 +v 15.250001 8.125000 5.566988 +v 13.625000 7.375000 3.750000 +v 13.625000 7.375000 3.875000 +v 13.750000 7.375000 3.750000 +v 13.750000 7.375000 3.875000 +v 13.625000 7.625000 3.750000 +v 13.625000 7.625000 3.875000 +v 13.750000 7.625000 3.750000 +v 13.750000 7.625000 3.875000 +v 14.250000 7.375000 3.750000 +v 14.250000 7.375000 3.875000 +v 14.375000 7.375000 3.750000 +v 14.375000 7.375000 3.875000 +v 14.250000 7.625000 3.750000 +v 14.250000 7.625000 3.875000 +v 14.375000 7.625000 3.750000 +v 14.375000 7.625000 3.875000 +v 13.625000 7.375000 6.125000 +v 13.625000 7.375000 6.250000 +v 13.750000 7.375000 6.125000 +v 13.750000 7.375000 6.250000 +v 13.625000 7.625000 6.125000 +v 13.625000 7.625000 6.250000 +v 13.750000 7.625000 6.125000 +v 13.750000 7.625000 6.250000 +v 14.250000 7.375000 6.125000 +v 14.250000 7.375000 6.250000 +v 14.375000 7.375000 6.125000 +v 14.375000 7.375000 6.250000 +v 14.250000 7.625000 6.125000 +v 14.250000 7.625000 6.250000 +v 14.375000 7.625000 6.125000 +v 14.375000 7.625000 6.250000 +v 13.500000 7.625000 6.375000 +v 14.500000 7.625000 6.375000 +v 13.500000 7.625000 3.625000 +v 14.500000 7.625000 3.625000 +v 13.625000 8.625000 3.750000 +v 13.625000 8.625000 6.250000 +v 14.375000 8.625000 6.250000 +v 14.375000 8.625000 3.750000 +v 14.000000 8.500000 3.625000 +v 13.812500 8.449759 3.625000 +v 13.675241 8.312500 3.625000 +v 13.625000 8.125000 3.625000 +v 13.675241 7.937500 3.625000 +v 13.812500 7.800241 3.625000 +v 14.000000 7.750000 3.625000 +v 14.187500 7.800241 3.625000 +v 14.324759 7.937500 3.625000 +v 14.375000 8.125000 3.625000 +v 14.324759 8.312500 3.625000 +v 14.187500 8.449759 3.625000 +v 13.844852 8.393723 3.500000 +v 14.000000 8.435295 3.500000 +v 13.731277 8.280148 3.500000 +v 13.689705 8.125000 3.500000 +v 13.731277 7.969852 3.500000 +v 13.844852 7.856277 3.500000 +v 14.000000 7.814705 3.500000 +v 14.155148 7.856277 3.500000 +v 14.268723 7.969852 3.500000 +v 14.310295 8.125000 3.500000 +v 14.268723 8.280148 3.500000 +v 14.155148 8.393723 3.500000 +v 13.812500 8.449759 3.500000 +v 14.000000 8.500000 3.500000 +v 13.675241 8.312500 3.500000 +v 13.625000 8.125000 3.500000 +v 13.675241 7.937500 3.500000 +v 13.812500 7.800241 3.500000 +v 14.000000 7.750000 3.500000 +v 14.187500 7.800241 3.500000 +v 14.324759 7.937500 3.500000 +v 14.375000 8.125000 3.500000 +v 14.324759 8.312500 3.500000 +v 14.187500 8.449759 3.500000 +v 13.844852 8.393723 3.625000 +v 14.000000 8.435295 3.625000 +v 13.731277 8.280148 3.625000 +v 13.689705 8.125000 3.625000 +v 13.731277 7.969852 3.625000 +v 13.844852 7.856277 3.625000 +v 14.000000 7.814705 3.625000 +v 14.155148 7.856277 3.625000 +v 14.268723 7.969852 3.625000 +v 14.310295 8.125000 3.625000 +v 14.268723 8.280148 3.625000 +v 14.155148 8.393723 3.625000 +v 14.000000 8.500000 6.500000 +v 13.812500 8.449759 6.500000 +v 13.675241 8.312500 6.500000 +v 13.625000 8.125000 6.500000 +v 13.675241 7.937500 6.500000 +v 13.812500 7.800241 6.500000 +v 14.000000 7.750000 6.500000 +v 14.187500 7.800241 6.500000 +v 14.324759 7.937500 6.500000 +v 14.375000 8.125000 6.500000 +v 14.324759 8.312500 6.500000 +v 14.187500 8.449759 6.500000 +v 13.844852 8.393723 6.375000 +v 14.000000 8.435295 6.375000 +v 13.731277 8.280148 6.375000 +v 13.689705 8.125000 6.375000 +v 13.731277 7.969852 6.375000 +v 13.844852 7.856277 6.375000 +v 14.000000 7.814705 6.375000 +v 14.155148 7.856277 6.375000 +v 14.268723 7.969852 6.375000 +v 14.310295 8.125000 6.375000 +v 14.268723 8.280148 6.375000 +v 14.155148 8.393723 6.375000 +v 13.812500 8.449759 6.375000 +v 14.000000 8.500000 6.375000 +v 13.675241 8.312500 6.375000 +v 13.625000 8.125000 6.375000 +v 13.675241 7.937500 6.375000 +v 13.812500 7.800241 6.375000 +v 14.000000 7.750000 6.375000 +v 14.187500 7.800241 6.375000 +v 14.324759 7.937500 6.375000 +v 14.375000 8.125000 6.375000 +v 14.324759 8.312500 6.375000 +v 14.187500 8.449759 6.375000 +v 13.844852 8.393723 6.500000 +v 14.000000 8.435295 6.500000 +v 13.731277 8.280148 6.500000 +v 13.689705 8.125000 6.500000 +v 13.731277 7.969852 6.500000 +v 13.844852 7.856277 6.500000 +v 14.000000 7.814705 6.500000 +v 14.155148 7.856277 6.500000 +v 14.268723 7.969852 6.500000 +v 14.310295 8.125000 6.500000 +v 14.268723 8.280148 6.500000 +v 14.155148 8.393723 6.500000 +v 14.000000 8.375000 3.625000 +v 13.875000 8.341507 3.625000 +v 13.783493 8.250000 3.625000 +v 13.750000 8.125000 3.625000 +v 13.783493 8.000000 3.625000 +v 13.875000 7.908494 3.625000 +v 14.000000 7.875000 3.625000 +v 14.125000 7.908494 3.625000 +v 14.216507 8.000000 3.625000 +v 14.250000 8.125000 3.625000 +v 14.216507 8.250000 3.625000 +v 14.125000 8.341506 3.625000 +v 13.906250 8.287380 3.500000 +v 14.000000 8.312500 3.500000 +v 13.837620 8.218750 3.500000 +v 13.812500 8.125000 3.500000 +v 13.837620 8.031250 3.500000 +v 13.906250 7.962620 3.500000 +v 14.000000 7.937500 3.500000 +v 14.093750 7.962620 3.500000 +v 14.162380 8.031250 3.500000 +v 14.187500 8.125000 3.500000 +v 14.162380 8.218750 3.500000 +v 14.093750 8.287379 3.500000 +v 14.000000 8.375000 6.375000 +v 14.125000 8.341507 6.375000 +v 14.216507 8.250000 6.375000 +v 14.250000 8.125000 6.375000 +v 14.216507 8.000000 6.375000 +v 14.125000 7.908494 6.375000 +v 14.000000 7.875000 6.375000 +v 13.875000 7.908494 6.375000 +v 13.783494 8.000000 6.375000 +v 13.750000 8.125000 6.375000 +v 13.783494 8.250000 6.375000 +v 13.875000 8.341506 6.375000 +v 14.093750 8.287380 6.500000 +v 14.000000 8.312500 6.500000 +v 14.162380 8.218750 6.500000 +v 14.187500 8.125000 6.500000 +v 14.162380 8.031250 6.500000 +v 14.093750 7.962620 6.500000 +v 14.000000 7.937500 6.500000 +v 13.906250 7.962620 6.500000 +v 13.837621 8.031250 6.500000 +v 13.812500 8.125000 6.500000 +v 13.837620 8.218750 6.500000 +v 13.906250 8.287379 6.500000 +v 14.875001 8.125000 6.250000 +v 15.125001 8.125000 6.250000 +v 14.875001 8.125000 5.750000 +v 15.125001 8.125000 5.750000 +v 14.875001 8.625000 6.250000 +v 15.125001 8.625000 6.250000 +v 14.875001 8.625000 5.750000 +v 15.125001 8.625000 5.750000 +v 15.875001 8.125000 6.250000 +v 16.125000 8.125000 6.250000 +v 15.875001 8.125000 5.750000 +v 16.125000 8.125000 5.750000 +v 15.875001 8.625000 6.250000 +v 16.125000 8.625000 6.250000 +v 15.875001 8.625000 5.750000 +v 16.125000 8.625000 5.750000 +v 14.875001 8.375000 6.000000 +v 14.875001 8.463388 6.036612 +v 14.875001 8.500000 6.125000 +v 14.875001 8.463388 6.213388 +v 14.875001 8.375000 6.250000 +v 14.875001 8.286612 6.213388 +v 14.875001 8.250000 6.125000 +v 14.875001 8.286612 6.036612 +v 14.500001 8.375000 6.000000 +v 14.500001 8.463388 6.036612 +v 14.500001 8.500000 6.125000 +v 14.500001 8.463388 6.213388 +v 14.500001 8.375000 6.250000 +v 14.500001 8.286612 6.213388 +v 14.500001 8.250000 6.125000 +v 14.500001 8.286612 6.036612 +v 15.875001 8.375000 6.000000 +v 15.875001 8.463388 6.036612 +v 15.875001 8.500000 6.125000 +v 15.875001 8.463388 6.213388 +v 15.875001 8.375000 6.250000 +v 15.875001 8.286612 6.213388 +v 15.875001 8.250000 6.125000 +v 15.875001 8.286612 6.036612 +v 15.125001 8.375000 6.000000 +v 15.125001 8.463388 6.036612 +v 15.125001 8.500000 6.125000 +v 15.125001 8.463388 6.213388 +v 15.125001 8.375000 6.250000 +v 15.125001 8.286612 6.213388 +v 15.125001 8.250000 6.125000 +v 15.125001 8.286612 6.036612 +v 15.875001 8.375000 5.750000 +v 15.875001 8.463388 5.786612 +v 15.875001 8.500000 5.875000 +v 15.875001 8.463388 5.963388 +v 15.875001 8.375000 6.000000 +v 15.875001 8.286612 5.963388 +v 15.875001 8.250000 5.875000 +v 15.875001 8.286612 5.786612 +v 15.625001 8.375000 5.750000 +v 15.625001 8.463388 5.786612 +v 15.625001 8.500000 5.875000 +v 15.625001 8.463388 5.963388 +v 15.625001 8.375000 6.000000 +v 15.625001 8.286612 5.963388 +v 15.625001 8.250000 5.875000 +v 15.625001 8.286612 5.786612 +v 15.599113 8.463388 5.775888 +v 15.536613 8.500000 5.838388 +v 15.474113 8.463388 5.900888 +v 15.448224 8.375000 5.926777 +v 15.474113 8.286612 5.900888 +v 15.536613 8.250000 5.838388 +v 15.599113 8.286612 5.775888 +v 15.588389 8.463388 5.750000 +v 15.500001 8.500000 5.750000 +v 15.411613 8.463388 5.750000 +v 15.375001 8.375000 5.750000 +v 15.411613 8.286612 5.750000 +v 15.500001 8.250000 5.750000 +v 15.588389 8.286612 5.750000 +v 15.625001 8.375000 4.750000 +v 15.588389 8.463388 4.750000 +v 15.500001 8.500000 4.750000 +v 15.411613 8.463388 4.750000 +v 15.375001 8.375000 4.750000 +v 15.411613 8.286612 4.750000 +v 15.500001 8.250000 4.750000 +v 15.588389 8.286612 4.750000 +v 15.250000 8.000000 4.750000 +v 15.750000 8.000000 4.750000 +v 15.250000 8.000000 4.250000 +v 15.750000 8.000000 4.250000 +v 15.250000 8.750000 4.250000 +v 15.250000 8.750000 4.750000 +v 15.750000 8.750000 4.750000 +v 15.750000 8.750000 4.250000 +v 14.875001 8.375000 5.750000 +v 14.875001 8.463388 5.786612 +v 14.875001 8.500000 5.875000 +v 14.875001 8.463388 5.963388 +v 14.875001 8.375000 6.000000 +v 14.875001 8.286612 5.963388 +v 14.875001 8.250000 5.875000 +v 14.875001 8.286612 5.786612 +v 14.849113 8.463388 5.775888 +v 14.786613 8.500000 5.838388 +v 14.724113 8.463388 5.900888 +v 14.698224 8.375000 5.926777 +v 14.724113 8.286612 5.900888 +v 14.786613 8.250000 5.838388 +v 14.849113 8.286612 5.775888 +v 14.838389 8.463388 5.750000 +v 14.750001 8.500000 5.750000 +v 14.661613 8.463388 5.750000 +v 14.625001 8.375000 5.750000 +v 14.661613 8.286612 5.750000 +v 14.750001 8.250000 5.750000 +v 14.838389 8.286612 5.750000 +v 14.875001 8.375000 5.000000 +v 14.838389 8.463388 5.000000 +v 14.750001 8.500000 5.000000 +v 14.661613 8.463388 5.000000 +v 14.625001 8.375000 5.000000 +v 14.661613 8.286612 5.000000 +v 14.750001 8.250000 5.000000 +v 14.838389 8.286612 5.000000 +v 15.250000 8.375000 4.375000 +v 15.250000 8.463388 4.411612 +v 15.250000 8.500000 4.500000 +v 15.250000 8.463388 4.588388 +v 15.250000 8.375000 4.625000 +v 15.250000 8.286612 4.588388 +v 15.250000 8.250000 4.500000 +v 15.250000 8.286612 4.411612 +v 14.500000 8.375000 4.375000 +v 14.500000 8.463388 4.411612 +v 14.500000 8.500000 4.500000 +v 14.500000 8.463388 4.588388 +v 14.500000 8.375000 4.625000 +v 14.500000 8.286612 4.588388 +v 14.500000 8.250000 4.500000 +v 14.500000 8.286612 4.411612 +v 14.801777 8.375000 4.823223 +v 14.775889 8.463388 4.849112 +v 14.713389 8.500000 4.911612 +v 14.650889 8.463388 4.974112 +v 14.650889 8.286612 4.974112 +v 14.713389 8.250000 4.911612 +v 14.775889 8.286612 4.849112 +v 14.625001 8.375000 4.750000 +v 14.625001 8.463388 4.786612 +v 14.625001 8.500000 4.875000 +v 14.625001 8.463388 4.963388 +v 14.625001 8.286612 4.963388 +v 14.625001 8.250000 4.875000 +v 14.625001 8.286612 4.786612 +v 14.500001 8.375000 5.000000 +v 14.500001 8.375000 4.750000 +v 14.500001 8.463388 4.786612 +v 14.500001 8.500000 4.875000 +v 14.500001 8.463388 4.963388 +v 14.500001 8.286612 4.963388 +v 14.500001 8.250000 4.875000 +v 14.500001 8.286612 4.786612 +v 15.625001 8.375000 4.250000 +v 15.588389 8.463388 4.250000 +v 15.500001 8.500000 4.250000 +v 15.411613 8.463388 4.250000 +v 15.375001 8.375000 4.250000 +v 15.411613 8.286612 4.250000 +v 15.500001 8.250000 4.250000 +v 15.588389 8.286612 4.250000 +v 15.625001 8.375000 4.000000 +v 15.588389 8.463388 4.000000 +v 15.500001 8.500000 4.000000 +v 15.411613 8.463388 4.000000 +v 15.375001 8.375000 4.000000 +v 15.411613 8.286612 4.000000 +v 15.500001 8.250000 4.000000 +v 15.588389 8.286612 4.000000 +v 15.551778 8.375000 3.823223 +v 15.525889 8.463388 3.849112 +v 15.463389 8.500000 3.911612 +v 15.400889 8.463388 3.974112 +v 15.400889 8.286612 3.974112 +v 15.463389 8.250000 3.911612 +v 15.525889 8.286612 3.849112 +v 15.375001 8.375000 3.750000 +v 15.375001 8.463388 3.786612 +v 15.375001 8.500000 3.875000 +v 15.375001 8.463388 3.963388 +v 15.375001 8.286612 3.963388 +v 15.375001 8.250000 3.875000 +v 15.375001 8.286612 3.786612 +v 14.500001 8.375000 4.000000 +v 14.500001 8.375000 3.750000 +v 14.500001 8.463388 3.786612 +v 14.500001 8.500000 3.875000 +v 14.500001 8.463388 3.963388 +v 14.500001 8.286612 3.963388 +v 14.500001 8.250000 3.875000 +v 14.500001 8.286612 3.786612 +v 13.500000 8.625000 3.625000 +v 13.500000 8.625000 6.375000 +v 14.500000 8.625000 6.375000 +v 14.500000 8.625000 3.625000 +v 13.625000 8.750000 3.750000 +v 13.625000 8.750000 6.250000 +v 14.375000 8.750000 6.250000 +v 14.375000 8.750000 3.750000 +v 11.375000 0.000000 6.250000 +v 11.375000 0.000000 3.750000 +v 11.500000 0.000000 3.750000 +v 11.500000 0.000000 6.250000 +v 11.500000 0.000000 6.500000 +v 11.500000 0.000000 6.250000 +v 11.250000 0.000000 6.500000 +v 11.250000 0.000000 6.250000 +v 11.500000 0.250000 6.500000 +v 11.500000 0.250000 6.250000 +v 11.250000 0.250000 6.500000 +v 11.250000 0.250000 6.250000 +v 11.500000 0.000000 3.750000 +v 11.500000 0.000000 3.500000 +v 11.250000 0.000000 3.750000 +v 11.250000 0.000000 3.500000 +v 11.500000 0.250000 3.750000 +v 11.500000 0.250000 3.500000 +v 11.250000 0.250000 3.750000 +v 11.250000 0.250000 3.500000 +v 8.750000 0.000000 6.500000 +v 8.750000 0.000000 6.250000 +v 8.500000 0.000000 6.500000 +v 8.500000 0.000000 6.250000 +v 8.750000 0.250000 6.500000 +v 8.750000 0.250000 6.250000 +v 8.500000 0.250000 6.500000 +v 8.500000 0.250000 6.250000 +v 8.750000 0.000000 3.750000 +v 8.750000 0.000000 3.500000 +v 8.500000 0.000000 3.750000 +v 8.500000 0.000000 3.500000 +v 8.750000 0.250000 3.750000 +v 8.750000 0.250000 3.500000 +v 8.500000 0.250000 3.750000 +v 8.500000 0.250000 3.500000 +v 11.375000 0.125000 6.250000 +v 11.375000 0.125000 3.750000 +v 11.500000 0.125000 3.750000 +v 11.500000 0.125000 6.250000 +v 8.625000 0.000000 3.750000 +v 8.625000 0.000000 6.250000 +v 8.500000 0.000000 6.250000 +v 8.500000 0.000000 3.750000 +v 8.625000 0.125000 3.750000 +v 8.625000 0.125000 6.250000 +v 8.500000 0.125000 6.250000 +v 8.500000 0.125000 3.750000 +v 11.250000 0.000000 3.625000 +v 8.750000 0.000000 3.625000 +v 8.750000 0.000000 3.500000 +v 11.250000 0.000000 3.500000 +v 11.250000 0.125000 3.625000 +v 8.750000 0.125000 3.625000 +v 8.750000 0.125000 3.500000 +v 11.250000 0.125000 3.500000 +v 8.750000 0.000000 6.375000 +v 11.250000 0.000000 6.375000 +v 11.250000 0.000000 6.500000 +v 8.750000 0.000000 6.500000 +v 8.750000 0.125000 6.375000 +v 11.250000 0.125000 6.375000 +v 11.250000 0.125000 6.500000 +v 8.750000 0.125000 6.500000 +v 11.500000 0.250000 3.500000 +v 11.375000 0.250000 3.500000 +v 11.500000 8.750000 3.500000 +v 11.375000 8.750000 3.500000 +v 11.500000 0.250000 3.625000 +v 11.375000 0.250000 3.625000 +v 11.500000 8.750000 3.625000 +v 11.375000 8.750000 3.625000 +v 11.500000 8.750000 6.500000 +v 11.500000 8.750000 6.250000 +v 11.250000 8.750000 6.500000 +v 11.250000 8.750000 6.250000 +v 11.500000 9.000000 6.500000 +v 11.500000 9.000000 6.250000 +v 11.250000 9.000000 6.500000 +v 11.250000 9.000000 6.250000 +v 11.500000 8.750000 3.750000 +v 11.500000 8.750000 3.500000 +v 11.250000 8.750000 3.750000 +v 11.250000 8.750000 3.500000 +v 11.500000 9.000000 3.750000 +v 11.500000 9.000000 3.500000 +v 11.250000 9.000000 3.750000 +v 11.250000 9.000000 3.500000 +v 8.750000 8.750000 6.500000 +v 8.750000 8.750000 6.250000 +v 8.500000 8.750000 6.500000 +v 8.500000 8.750000 6.250000 +v 8.750000 9.000000 6.500000 +v 8.750000 9.000000 6.250000 +v 8.500000 9.000000 6.500000 +v 8.500000 9.000000 6.250000 +v 8.750000 8.750000 3.750000 +v 8.750000 8.750000 3.500000 +v 8.500000 8.750000 3.750000 +v 8.500000 8.750000 3.500000 +v 8.750000 9.000000 3.750000 +v 8.750000 9.000000 3.500000 +v 8.500000 9.000000 3.750000 +v 8.500000 9.000000 3.500000 +v 8.625000 0.250000 3.500000 +v 8.500000 0.250000 3.500000 +v 8.625000 8.750000 3.500000 +v 8.500000 8.750000 3.500000 +v 8.625000 0.250000 3.625000 +v 8.500000 0.250000 3.625000 +v 8.625000 8.750000 3.625000 +v 8.500000 8.750000 3.625000 +v 11.500000 0.250000 6.375000 +v 11.375000 0.250000 6.375000 +v 11.500000 8.750000 6.375000 +v 11.375000 8.750000 6.375000 +v 11.500000 0.250000 6.500000 +v 11.375000 0.250000 6.500000 +v 11.500000 8.750000 6.500000 +v 11.375000 8.750000 6.500000 +v 8.625000 0.250000 6.375000 +v 8.500000 0.250000 6.375000 +v 8.625000 8.750000 6.375000 +v 8.500000 8.750000 6.375000 +v 8.625000 0.250000 6.500000 +v 8.500000 0.250000 6.500000 +v 8.625000 8.750000 6.500000 +v 8.500000 8.750000 6.500000 +v 11.375000 8.875000 6.250000 +v 11.375000 8.875000 3.750000 +v 11.500000 8.875000 3.750000 +v 11.500000 8.875000 6.250000 +v 11.375000 9.000000 6.250000 +v 11.375000 9.000000 3.750000 +v 11.500000 9.000000 3.750000 +v 11.500000 9.000000 6.250000 +v 8.625000 8.875000 3.750000 +v 8.625000 8.875000 6.250000 +v 8.500000 8.875000 6.250000 +v 8.500000 8.875000 3.750000 +v 8.625000 9.000000 3.750000 +v 8.625000 9.000000 6.250000 +v 8.500000 9.000000 6.250000 +v 8.500000 9.000000 3.750000 +v 11.250000 8.875000 3.625000 +v 8.750000 8.875000 3.625000 +v 8.750000 8.875000 3.500000 +v 11.250000 8.875000 3.500000 +v 11.250000 9.000000 3.625000 +v 8.750000 9.000000 3.625000 +v 8.750000 9.000000 3.500000 +v 11.250000 9.000000 3.500000 +v 8.750000 8.875000 6.375000 +v 11.250000 8.875000 6.375000 +v 11.250000 8.875000 6.500000 +v 8.750000 8.875000 6.500000 +v 8.750000 9.000000 6.375000 +v 11.250000 9.000000 6.375000 +v 11.250000 9.000000 6.500000 +v 8.750000 9.000000 6.500000 +v 9.875000 0.125000 6.500000 +v 10.125000 0.125000 6.500000 +v 9.875000 0.125000 3.500000 +v 10.125000 0.125000 3.500000 +v 9.875000 0.250000 3.500000 +v 9.875000 0.250000 6.500000 +v 10.125000 0.250000 6.500000 +v 10.125000 0.250000 3.500000 +v 10.875000 0.125000 6.500000 +v 11.125000 0.125000 6.500000 +v 10.875000 0.125000 3.500000 +v 11.125000 0.125000 3.500000 +v 10.875000 0.250000 3.500000 +v 10.875000 0.250000 6.500000 +v 11.125000 0.250000 6.500000 +v 11.125000 0.250000 3.500000 +v 8.875000 0.125000 6.500000 +v 9.125000 0.125000 6.500000 +v 8.875000 0.125000 3.500000 +v 9.125000 0.125000 3.500000 +v 8.875000 0.250000 3.500000 +v 8.875000 0.250000 6.500000 +v 9.125000 0.250000 6.500000 +v 9.125000 0.250000 3.500000 +v 8.750000 0.250000 6.250000 +v 11.250000 0.250000 6.250000 +v 8.750000 0.250000 3.750000 +v 11.250000 0.250000 3.750000 +v 8.750000 1.000000 3.750000 +v 8.750000 1.000000 6.250000 +v 11.250000 1.000000 6.250000 +v 11.250000 1.000000 3.750000 +v 11.000000 2.000000 3.500000 +v 10.750000 2.000000 3.566987 +v 10.566987 2.000000 3.750000 +v 10.500000 2.000000 4.000000 +v 10.566987 2.000000 4.250000 +v 10.750000 2.000000 4.433013 +v 11.000000 2.000000 4.500000 +v 11.250000 2.000000 4.433013 +v 11.433012 2.000000 4.250000 +v 11.500000 2.000000 4.000000 +v 11.433013 2.000000 3.750000 +v 11.250000 2.000000 3.566988 +v 10.750000 4.000000 3.566987 +v 11.000000 4.000000 3.500000 +v 10.566987 4.000000 3.750000 +v 10.500000 4.000000 4.000000 +v 10.566987 4.000000 4.250000 +v 10.750000 4.000000 4.433013 +v 11.000000 4.000000 4.500000 +v 11.250000 4.000000 4.433013 +v 11.433012 4.000000 4.250000 +v 11.500000 4.000000 4.000000 +v 11.433013 4.000000 3.750000 +v 11.250000 4.000000 3.566988 +v 11.000000 2.500000 3.500000 +v 10.750000 2.500000 3.566987 +v 11.250000 2.500000 3.566988 +v 10.750000 3.500000 3.566987 +v 11.000000 3.500000 3.500000 +v 11.250000 3.500000 3.566988 +v 11.000000 2.125000 3.625000 +v 10.812500 2.125000 3.675241 +v 10.675241 2.125000 3.812500 +v 10.625000 2.125000 4.000000 +v 10.675241 2.125000 4.187500 +v 10.812500 2.125000 4.324759 +v 11.000000 2.125000 4.375000 +v 11.187500 2.125000 4.324759 +v 11.324759 2.125000 4.187500 +v 11.375000 2.125000 4.000000 +v 11.324759 2.125000 3.812500 +v 11.187500 2.125000 3.675241 +v 11.000000 2.500000 3.625000 +v 10.812500 2.500000 3.675241 +v 11.187500 2.500000 3.675241 +v 11.000000 3.875000 3.625000 +v 10.812500 3.875000 3.675241 +v 10.675241 3.875000 3.812500 +v 10.625000 3.875000 4.000000 +v 10.675241 3.875000 4.187500 +v 10.812500 3.875000 4.324759 +v 11.000000 3.875000 4.375000 +v 11.187500 3.875000 4.324759 +v 11.324759 3.875000 4.187500 +v 11.375000 3.875000 4.000000 +v 11.324759 3.875000 3.812500 +v 11.187500 3.875000 3.675241 +v 11.000000 3.500000 3.625000 +v 10.812500 3.500000 3.675241 +v 11.187500 3.500000 3.675241 +v 11.000000 3.750000 3.625000 +v 10.812500 3.750000 3.675241 +v 10.675241 3.750000 3.812500 +v 10.625000 3.750000 4.000000 +v 10.675241 3.750000 4.187500 +v 10.812500 3.750000 4.324759 +v 11.000000 3.750000 4.375000 +v 11.187500 3.750000 4.324759 +v 11.324759 3.750000 4.187500 +v 11.375000 3.750000 4.000000 +v 11.324759 3.750000 3.812500 +v 11.187500 3.750000 3.675241 +v 10.812500 3.500000 3.675241 +v 11.000000 3.500000 3.625000 +v 10.675241 3.500000 3.812500 +v 10.625000 3.500000 4.000000 +v 10.675241 3.500000 4.187500 +v 10.812500 3.500000 4.324759 +v 11.000000 3.500000 4.375000 +v 11.187500 3.500000 4.324759 +v 11.324759 3.500000 4.187500 +v 11.375000 3.500000 4.000000 +v 11.324759 3.500000 3.812500 +v 11.187500 3.500000 3.675241 +v 11.000000 3.750000 3.875000 +v 10.937500 3.750000 3.891747 +v 10.891747 3.750000 3.937500 +v 10.875000 3.750000 4.000000 +v 10.891747 3.750000 4.062500 +v 10.937500 3.750000 4.108253 +v 11.000000 3.750000 4.125000 +v 11.062500 3.750000 4.108253 +v 11.108253 3.750000 4.062500 +v 11.125000 3.750000 4.000000 +v 11.108253 3.750000 3.937500 +v 11.062500 3.750000 3.891747 +v 11.000000 4.875000 3.875000 +v 10.937500 4.875000 3.891747 +v 10.891747 4.875000 3.937500 +v 10.875000 4.875000 4.000000 +v 10.891747 4.875000 4.062500 +v 10.937500 4.875000 4.108253 +v 11.000000 4.875000 4.125000 +v 11.062500 4.875000 4.108253 +v 11.108253 4.875000 4.062500 +v 11.125000 4.875000 4.000000 +v 11.108253 4.875000 3.937500 +v 11.062500 4.875000 3.891747 +v 11.000000 4.000000 3.625000 +v 10.812500 4.000000 3.675241 +v 10.675241 4.000000 3.812500 +v 10.625000 4.000000 4.000000 +v 10.675241 4.000000 4.187500 +v 10.812500 4.000000 4.324759 +v 11.000000 4.000000 4.375000 +v 11.187500 4.000000 4.324759 +v 11.324759 4.000000 4.187500 +v 11.375000 4.000000 4.000000 +v 11.324759 4.000000 3.812500 +v 11.187500 4.000000 3.675241 +v 11.000000 4.250000 3.625000 +v 10.812500 4.250000 3.675241 +v 10.675241 4.250000 3.812500 +v 10.625000 4.250000 4.000000 +v 10.675241 4.250000 4.187500 +v 10.812500 4.250000 4.324759 +v 11.000000 4.250000 4.375000 +v 11.187500 4.250000 4.324759 +v 11.324759 4.250000 4.187500 +v 11.375000 4.250000 4.000000 +v 11.324759 4.250000 3.812500 +v 11.187500 4.250000 3.675241 +v 11.000000 4.375000 3.750000 +v 10.875000 4.375000 3.783494 +v 10.783494 4.375000 3.875000 +v 10.750000 4.375000 4.000000 +v 10.783494 4.375000 4.125000 +v 10.875000 4.375000 4.216506 +v 11.000000 4.375000 4.250000 +v 11.125000 4.375000 4.216506 +v 11.216506 4.375000 4.125000 +v 11.250000 4.375000 4.000000 +v 11.216506 4.375000 3.875000 +v 11.125000 4.375000 3.783494 +v 11.187500 4.750000 3.675241 +v 11.324759 4.750000 3.812500 +v 11.375000 4.750000 4.000000 +v 11.324759 4.750000 4.187500 +v 11.187500 4.750000 4.324759 +v 11.000000 4.750000 4.375000 +v 10.812500 4.750000 4.324759 +v 10.675241 4.750000 4.187500 +v 10.625000 4.750000 4.000000 +v 10.675241 4.750000 3.812500 +v 10.812500 4.750000 3.675241 +v 11.000000 4.750000 3.625000 +v 11.000000 5.000000 3.500000 +v 10.750000 5.000000 3.566987 +v 10.566987 5.000000 3.750000 +v 10.500000 5.000000 4.000000 +v 10.566987 5.000000 4.250000 +v 10.750000 5.000000 4.433013 +v 11.000000 5.000000 4.500000 +v 11.250000 5.000000 4.433013 +v 11.433012 5.000000 4.250000 +v 11.500000 5.000000 4.000000 +v 11.433013 5.000000 3.750000 +v 11.250000 5.000000 3.566988 +v 10.750000 7.000000 3.566987 +v 11.000000 7.000000 3.500000 +v 10.566987 7.000000 3.750000 +v 10.500000 7.000000 4.000000 +v 10.566987 7.000000 4.250000 +v 10.750000 7.000000 4.433013 +v 11.000000 7.000000 4.500000 +v 11.250000 7.000000 4.433013 +v 11.433012 7.000000 4.250000 +v 11.500000 7.000000 4.000000 +v 11.433013 7.000000 3.750000 +v 11.250000 7.000000 3.566988 +v 11.000000 5.500000 3.500000 +v 10.750000 5.500000 3.566987 +v 11.250000 5.500000 3.566988 +v 10.750000 6.500000 3.566987 +v 11.000000 6.500000 3.500000 +v 11.250000 6.500000 3.566988 +v 11.000000 5.125000 3.625000 +v 10.812500 5.125000 3.675241 +v 10.675241 5.125000 3.812500 +v 10.625000 5.125000 4.000000 +v 10.675241 5.125000 4.187500 +v 10.812500 5.125000 4.324759 +v 11.000000 5.125000 4.375000 +v 11.187500 5.125000 4.324759 +v 11.324759 5.125000 4.187500 +v 11.375000 5.125000 4.000000 +v 11.324759 5.125000 3.812500 +v 11.187500 5.125000 3.675241 +v 11.000000 5.500000 3.625000 +v 10.812500 5.500000 3.675241 +v 11.187500 5.500000 3.675241 +v 11.000000 6.875000 3.625000 +v 10.812500 6.875000 3.675241 +v 10.675241 6.875000 3.812500 +v 10.625000 6.875000 4.000000 +v 10.675241 6.875000 4.187500 +v 10.812500 6.875000 4.324759 +v 11.000000 6.875000 4.375000 +v 11.187500 6.875000 4.324759 +v 11.324759 6.875000 4.187500 +v 11.375000 6.875000 4.000000 +v 11.324759 6.875000 3.812500 +v 11.187500 6.875000 3.675241 +v 11.000000 6.500000 3.625000 +v 10.812500 6.500000 3.675241 +v 11.187500 6.500000 3.675241 +v 11.000000 6.750000 3.625000 +v 10.812500 6.750000 3.675241 +v 10.675241 6.750000 3.812500 +v 10.625000 6.750000 4.000000 +v 10.675241 6.750000 4.187500 +v 10.812500 6.750000 4.324759 +v 11.000000 6.750000 4.375000 +v 11.187500 6.750000 4.324759 +v 11.324759 6.750000 4.187500 +v 11.375000 6.750000 4.000000 +v 11.324759 6.750000 3.812500 +v 11.187500 6.750000 3.675241 +v 10.812500 6.500000 3.675241 +v 11.000000 6.500000 3.625000 +v 10.675241 6.500000 3.812500 +v 10.625000 6.500000 4.000000 +v 10.675241 6.500000 4.187500 +v 10.812500 6.500000 4.324759 +v 11.000000 6.500000 4.375000 +v 11.187500 6.500000 4.324759 +v 11.324759 6.500000 4.187500 +v 11.375000 6.500000 4.000000 +v 11.324759 6.500000 3.812500 +v 11.187500 6.500000 3.675241 +v 11.000000 6.750000 3.875000 +v 10.937500 6.750000 3.891747 +v 10.891747 6.750000 3.937500 +v 10.875000 6.750000 4.000000 +v 10.891747 6.750000 4.062500 +v 10.937500 6.750000 4.108253 +v 11.000000 6.750000 4.125000 +v 11.062500 6.750000 4.108253 +v 11.108253 6.750000 4.062500 +v 11.125000 6.750000 4.000000 +v 11.108253 6.750000 3.937500 +v 11.062500 6.750000 3.891747 +v 11.000000 7.875000 3.875000 +v 10.937500 7.875000 3.891747 +v 10.891747 7.875000 3.937500 +v 10.875000 7.875000 4.000000 +v 10.891747 7.875000 4.062500 +v 10.937500 7.875000 4.108253 +v 11.000000 7.875000 4.125000 +v 11.062500 7.875000 4.108253 +v 11.108253 7.875000 4.062500 +v 11.125000 7.875000 4.000000 +v 11.108253 7.875000 3.937500 +v 11.062500 7.875000 3.891747 +v 11.000000 7.750000 3.625000 +v 10.812500 7.750000 3.675241 +v 10.675241 7.750000 3.812500 +v 10.625000 7.750000 4.000000 +v 10.675241 7.750000 4.187500 +v 10.812500 7.750000 4.324759 +v 11.000000 7.750000 4.375000 +v 11.187500 7.750000 4.324759 +v 11.324759 7.750000 4.187500 +v 11.375000 7.750000 4.000000 +v 11.324759 7.750000 3.812500 +v 11.187500 7.750000 3.675241 +v 11.125000 7.375000 3.783494 +v 11.216506 7.375000 3.875000 +v 11.250000 7.375000 4.000000 +v 11.216506 7.375000 4.125000 +v 11.125000 7.375000 4.216506 +v 11.000000 7.375000 4.250000 +v 10.875000 7.375000 4.216506 +v 10.783494 7.375000 4.125000 +v 10.750000 7.375000 4.000000 +v 10.783494 7.375000 3.875000 +v 10.875000 7.375000 3.783494 +v 11.000000 7.375000 3.750000 +v 11.187500 7.250000 3.675241 +v 11.324759 7.250000 3.812500 +v 11.375000 7.250000 4.000000 +v 11.324759 7.250000 4.187500 +v 11.187500 7.250000 4.324759 +v 11.000000 7.250000 4.375000 +v 10.812500 7.250000 4.324759 +v 10.675241 7.250000 4.187500 +v 10.625000 7.250000 4.000000 +v 10.675241 7.250000 3.812500 +v 10.812500 7.250000 3.675241 +v 11.000000 7.250000 3.625000 +v 11.187500 7.000000 3.675241 +v 11.324759 7.000000 3.812500 +v 11.375000 7.000000 4.000000 +v 11.324759 7.000000 4.187500 +v 11.187500 7.000000 4.324759 +v 11.000000 7.000000 4.375000 +v 10.812500 7.000000 4.324759 +v 10.675241 7.000000 4.187500 +v 10.625000 7.000000 4.000000 +v 10.675241 7.000000 3.812500 +v 10.812500 7.000000 3.675241 +v 11.000000 7.000000 3.625000 +v 10.000000 2.000000 3.500000 +v 9.750000 2.000000 3.566987 +v 9.566987 2.000000 3.750000 +v 9.500000 2.000000 4.000000 +v 9.566987 2.000000 4.250000 +v 9.750000 2.000000 4.433013 +v 10.000000 2.000000 4.500000 +v 10.250000 2.000000 4.433013 +v 10.433012 2.000000 4.250000 +v 10.500000 2.000000 4.000000 +v 10.433013 2.000000 3.750000 +v 10.250000 2.000000 3.566988 +v 9.750000 4.000000 3.566987 +v 10.000000 4.000000 3.500000 +v 9.566987 4.000000 3.750000 +v 9.500000 4.000000 4.000000 +v 9.566987 4.000000 4.250000 +v 9.750000 4.000000 4.433013 +v 10.000000 4.000000 4.500000 +v 10.250000 4.000000 4.433013 +v 10.433012 4.000000 4.250000 +v 10.500000 4.000000 4.000000 +v 10.433013 4.000000 3.750000 +v 10.250000 4.000000 3.566988 +v 10.000000 2.500000 3.500000 +v 9.750000 2.500000 3.566987 +v 10.250000 2.500000 3.566988 +v 9.750000 3.500000 3.566987 +v 10.000000 3.500000 3.500000 +v 10.250000 3.500000 3.566988 +v 10.000000 2.125000 3.625000 +v 9.812500 2.125000 3.675241 +v 9.675241 2.125000 3.812500 +v 9.625000 2.125000 4.000000 +v 9.675241 2.125000 4.187500 +v 9.812500 2.125000 4.324759 +v 10.000000 2.125000 4.375000 +v 10.187500 2.125000 4.324759 +v 10.324759 2.125000 4.187500 +v 10.375000 2.125000 4.000000 +v 10.324759 2.125000 3.812500 +v 10.187500 2.125000 3.675241 +v 10.000000 2.500000 3.625000 +v 9.812500 2.500000 3.675241 +v 10.187500 2.500000 3.675241 +v 10.000000 3.875000 3.625000 +v 9.812500 3.875000 3.675241 +v 9.675241 3.875000 3.812500 +v 9.625000 3.875000 4.000000 +v 9.675241 3.875000 4.187500 +v 9.812500 3.875000 4.324759 +v 10.000000 3.875000 4.375000 +v 10.187500 3.875000 4.324759 +v 10.324759 3.875000 4.187500 +v 10.375000 3.875000 4.000000 +v 10.324759 3.875000 3.812500 +v 10.187500 3.875000 3.675241 +v 10.000000 3.500000 3.625000 +v 9.812500 3.500000 3.675241 +v 10.187500 3.500000 3.675241 +v 10.000000 3.750000 3.625000 +v 9.812500 3.750000 3.675241 +v 9.675241 3.750000 3.812500 +v 9.625000 3.750000 4.000000 +v 9.675241 3.750000 4.187500 +v 9.812500 3.750000 4.324759 +v 10.000000 3.750000 4.375000 +v 10.187500 3.750000 4.324759 +v 10.324759 3.750000 4.187500 +v 10.375000 3.750000 4.000000 +v 10.324759 3.750000 3.812500 +v 10.187500 3.750000 3.675241 +v 9.812500 3.500000 3.675241 +v 10.000000 3.500000 3.625000 +v 9.675241 3.500000 3.812500 +v 9.625000 3.500000 4.000000 +v 9.675241 3.500000 4.187500 +v 9.812500 3.500000 4.324759 +v 10.000000 3.500000 4.375000 +v 10.187500 3.500000 4.324759 +v 10.324759 3.500000 4.187500 +v 10.375000 3.500000 4.000000 +v 10.324759 3.500000 3.812500 +v 10.187500 3.500000 3.675241 +v 10.000000 3.750000 3.875000 +v 9.937500 3.750000 3.891747 +v 9.891747 3.750000 3.937500 +v 9.875000 3.750000 4.000000 +v 9.891747 3.750000 4.062500 +v 9.937500 3.750000 4.108253 +v 10.000000 3.750000 4.125000 +v 10.062500 3.750000 4.108253 +v 10.108253 3.750000 4.062500 +v 10.125000 3.750000 4.000000 +v 10.108253 3.750000 3.937500 +v 10.062500 3.750000 3.891747 +v 10.000000 4.875000 3.875000 +v 9.937500 4.875000 3.891747 +v 9.891747 4.875000 3.937500 +v 9.875000 4.875000 4.000000 +v 9.891747 4.875000 4.062500 +v 9.937500 4.875000 4.108253 +v 10.000000 4.875000 4.125000 +v 10.062500 4.875000 4.108253 +v 10.108253 4.875000 4.062500 +v 10.125000 4.875000 4.000000 +v 10.108253 4.875000 3.937500 +v 10.062500 4.875000 3.891747 +v 10.000000 5.000000 3.625000 +v 9.812500 5.000000 3.675241 +v 9.675241 5.000000 3.812500 +v 9.625000 5.000000 4.000000 +v 9.675241 5.000000 4.187500 +v 9.812500 5.000000 4.324759 +v 10.000000 5.000000 4.375000 +v 10.187500 5.000000 4.324759 +v 10.324759 5.000000 4.187500 +v 10.375000 5.000000 4.000000 +v 10.324759 5.000000 3.812500 +v 10.187500 5.000000 3.675241 +v 10.000000 4.625000 3.750000 +v 9.875000 4.625000 3.783494 +v 9.783494 4.625000 3.875000 +v 9.750000 4.625000 4.000000 +v 9.783494 4.625000 4.125000 +v 9.875000 4.625000 4.216506 +v 10.000000 4.625000 4.250000 +v 10.125000 4.625000 4.216506 +v 10.216506 4.625000 4.125000 +v 10.250000 4.625000 4.000000 +v 10.216506 4.625000 3.875000 +v 10.125000 4.625000 3.783494 +v 10.000000 4.750000 3.625000 +v 9.812500 4.750000 3.675241 +v 9.675241 4.750000 3.812500 +v 9.625000 4.750000 4.000000 +v 9.675241 4.750000 4.187500 +v 9.812500 4.750000 4.324759 +v 10.000000 4.750000 4.375000 +v 10.187500 4.750000 4.324759 +v 10.324759 4.750000 4.187500 +v 10.375000 4.750000 4.000000 +v 10.324759 4.750000 3.812500 +v 10.187500 4.750000 3.675241 +v 10.125000 4.375000 3.783494 +v 10.216506 4.375000 3.875000 +v 10.250000 4.375000 4.000000 +v 10.216506 4.375000 4.125000 +v 10.125000 4.375000 4.216506 +v 10.000000 4.375000 4.250000 +v 9.875000 4.375000 4.216506 +v 9.783494 4.375000 4.125000 +v 9.750000 4.375000 4.000000 +v 9.783494 4.375000 3.875000 +v 9.875000 4.375000 3.783494 +v 10.000000 4.375000 3.750000 +v 10.000000 5.000000 3.500000 +v 9.750000 5.000000 3.566987 +v 9.566987 5.000000 3.750000 +v 9.500000 5.000000 4.000000 +v 9.566987 5.000000 4.250000 +v 9.750000 5.000000 4.433013 +v 10.000000 5.000000 4.500000 +v 10.250000 5.000000 4.433013 +v 10.433012 5.000000 4.250000 +v 10.500000 5.000000 4.000000 +v 10.433013 5.000000 3.750000 +v 10.250000 5.000000 3.566988 +v 9.750000 7.000000 3.566987 +v 10.000000 7.000000 3.500000 +v 9.566987 7.000000 3.750000 +v 9.500000 7.000000 4.000000 +v 9.566987 7.000000 4.250000 +v 9.750000 7.000000 4.433013 +v 10.000000 7.000000 4.500000 +v 10.250000 7.000000 4.433013 +v 10.433012 7.000000 4.250000 +v 10.500000 7.000000 4.000000 +v 10.433013 7.000000 3.750000 +v 10.250000 7.000000 3.566988 +v 10.000000 5.500000 3.500000 +v 9.750000 5.500000 3.566987 +v 10.250000 5.500000 3.566988 +v 9.750000 6.500000 3.566987 +v 10.000000 6.500000 3.500000 +v 10.250000 6.500000 3.566988 +v 10.000000 5.125000 3.625000 +v 9.812500 5.125000 3.675241 +v 9.675241 5.125000 3.812500 +v 9.625000 5.125000 4.000000 +v 9.675241 5.125000 4.187500 +v 9.812500 5.125000 4.324759 +v 10.000000 5.125000 4.375000 +v 10.187500 5.125000 4.324759 +v 10.324759 5.125000 4.187500 +v 10.375000 5.125000 4.000000 +v 10.324759 5.125000 3.812500 +v 10.187500 5.125000 3.675241 +v 10.000000 5.500000 3.625000 +v 9.812500 5.500000 3.675241 +v 10.187500 5.500000 3.675241 +v 10.000000 6.875000 3.625000 +v 9.812500 6.875000 3.675241 +v 9.675241 6.875000 3.812500 +v 9.625000 6.875000 4.000000 +v 9.675241 6.875000 4.187500 +v 9.812500 6.875000 4.324759 +v 10.000000 6.875000 4.375000 +v 10.187500 6.875000 4.324759 +v 10.324759 6.875000 4.187500 +v 10.375000 6.875000 4.000000 +v 10.324759 6.875000 3.812500 +v 10.187500 6.875000 3.675241 +v 10.000000 6.500000 3.625000 +v 9.812500 6.500000 3.675241 +v 10.187500 6.500000 3.675241 +v 10.000000 6.750000 3.625000 +v 9.812500 6.750000 3.675241 +v 9.675241 6.750000 3.812500 +v 9.625000 6.750000 4.000000 +v 9.675241 6.750000 4.187500 +v 9.812500 6.750000 4.324759 +v 10.000000 6.750000 4.375000 +v 10.187500 6.750000 4.324759 +v 10.324759 6.750000 4.187500 +v 10.375000 6.750000 4.000000 +v 10.324759 6.750000 3.812500 +v 10.187500 6.750000 3.675241 +v 9.812500 6.500000 3.675241 +v 10.000000 6.500000 3.625000 +v 9.675241 6.500000 3.812500 +v 9.625000 6.500000 4.000000 +v 9.675241 6.500000 4.187500 +v 9.812500 6.500000 4.324759 +v 10.000000 6.500000 4.375000 +v 10.187500 6.500000 4.324759 +v 10.324759 6.500000 4.187500 +v 10.375000 6.500000 4.000000 +v 10.324759 6.500000 3.812500 +v 10.187500 6.500000 3.675241 +v 10.000000 6.750000 3.875000 +v 9.937500 6.750000 3.891747 +v 9.891747 6.750000 3.937500 +v 9.875000 6.750000 4.000000 +v 9.891747 6.750000 4.062500 +v 9.937500 6.750000 4.108253 +v 10.000000 6.750000 4.125000 +v 10.062500 6.750000 4.108253 +v 10.108253 6.750000 4.062500 +v 10.125000 6.750000 4.000000 +v 10.108253 6.750000 3.937500 +v 10.062500 6.750000 3.891747 +v 10.000000 7.875000 3.875000 +v 9.937500 7.875000 3.891747 +v 9.891747 7.875000 3.937500 +v 9.875000 7.875000 4.000000 +v 9.891747 7.875000 4.062500 +v 9.937500 7.875000 4.108253 +v 10.000000 7.875000 4.125000 +v 10.062500 7.875000 4.108253 +v 10.108253 7.875000 4.062500 +v 10.125000 7.875000 4.000000 +v 10.108253 7.875000 3.937500 +v 10.062500 7.875000 3.891747 +v 10.187500 4.250000 3.675241 +v 10.324759 4.250000 3.812500 +v 10.375000 4.250000 4.000000 +v 10.324759 4.250000 4.187500 +v 10.187500 4.250000 4.324759 +v 10.000000 4.250000 4.375000 +v 9.812500 4.250000 4.324759 +v 9.675241 4.250000 4.187500 +v 9.625000 4.250000 4.000000 +v 9.675241 4.250000 3.812500 +v 9.812500 4.250000 3.675241 +v 10.000000 4.250000 3.625000 +v 10.187500 4.000000 3.675241 +v 10.324759 4.000000 3.812500 +v 10.375000 4.000000 4.000000 +v 10.324759 4.000000 4.187500 +v 10.187500 4.000000 4.324759 +v 10.000000 4.000000 4.375000 +v 9.812500 4.000000 4.324759 +v 9.675241 4.000000 4.187500 +v 9.625000 4.000000 4.000000 +v 9.675241 4.000000 3.812500 +v 9.812500 4.000000 3.675241 +v 10.000000 4.000000 3.625000 +v 11.125000 4.625000 3.783494 +v 11.216506 4.625000 3.875000 +v 11.250000 4.625000 4.000000 +v 11.216506 4.625000 4.125000 +v 11.125000 4.625000 4.216506 +v 11.000000 4.625000 4.250000 +v 10.875000 4.625000 4.216506 +v 10.783494 4.625000 4.125000 +v 10.750000 4.625000 4.000000 +v 10.783494 4.625000 3.875000 +v 10.875000 4.625000 3.783494 +v 11.000000 4.625000 3.750000 +v 11.187500 5.000000 3.675241 +v 11.324759 5.000000 3.812500 +v 11.375000 5.000000 4.000000 +v 11.324759 5.000000 4.187500 +v 11.187500 5.000000 4.324759 +v 11.000000 5.000000 4.375000 +v 10.812500 5.000000 4.324759 +v 10.675241 5.000000 4.187500 +v 10.625000 5.000000 4.000000 +v 10.675241 5.000000 3.812500 +v 10.812500 5.000000 3.675241 +v 11.000000 5.000000 3.625000 +v 10.000000 8.000000 3.625000 +v 9.812500 8.000000 3.675241 +v 9.675241 8.000000 3.812500 +v 9.625000 8.000000 4.000000 +v 9.675241 8.000000 4.187500 +v 9.812500 8.000000 4.324759 +v 10.000000 8.000000 4.375000 +v 10.187500 8.000000 4.324759 +v 10.324759 8.000000 4.187500 +v 10.375000 8.000000 4.000000 +v 10.324759 8.000000 3.812500 +v 10.187500 8.000000 3.675241 +v 10.000000 7.625000 3.750000 +v 9.875000 7.625000 3.783494 +v 9.783494 7.625000 3.875000 +v 9.750000 7.625000 4.000000 +v 9.783494 7.625000 4.125000 +v 9.875000 7.625000 4.216506 +v 10.000000 7.625000 4.250000 +v 10.125000 7.625000 4.216506 +v 10.216506 7.625000 4.125000 +v 10.250000 7.625000 4.000000 +v 10.216506 7.625000 3.875000 +v 10.125000 7.625000 3.783494 +v 10.000000 7.750000 3.625000 +v 9.812500 7.750000 3.675241 +v 9.675241 7.750000 3.812500 +v 9.625000 7.750000 4.000000 +v 9.675241 7.750000 4.187500 +v 9.812500 7.750000 4.324759 +v 10.000000 7.750000 4.375000 +v 10.187500 7.750000 4.324759 +v 10.324759 7.750000 4.187500 +v 10.375000 7.750000 4.000000 +v 10.324759 7.750000 3.812500 +v 10.187500 7.750000 3.675241 +v 10.125000 7.375000 3.783494 +v 10.216506 7.375000 3.875000 +v 10.250000 7.375000 4.000000 +v 10.216506 7.375000 4.125000 +v 10.125000 7.375000 4.216506 +v 10.000000 7.375000 4.250000 +v 9.875000 7.375000 4.216506 +v 9.783494 7.375000 4.125000 +v 9.750000 7.375000 4.000000 +v 9.783494 7.375000 3.875000 +v 9.875000 7.375000 3.783494 +v 10.000000 7.375000 3.750000 +v 10.187500 7.250000 3.675241 +v 10.324759 7.250000 3.812500 +v 10.375000 7.250000 4.000000 +v 10.324759 7.250000 4.187500 +v 10.187500 7.250000 4.324759 +v 10.000000 7.250000 4.375000 +v 9.812500 7.250000 4.324759 +v 9.675241 7.250000 4.187500 +v 9.625000 7.250000 4.000000 +v 9.675241 7.250000 3.812500 +v 9.812500 7.250000 3.675241 +v 10.000000 7.250000 3.625000 +v 10.187500 7.000000 3.675241 +v 10.324759 7.000000 3.812500 +v 10.375000 7.000000 4.000000 +v 10.324759 7.000000 4.187500 +v 10.187500 7.000000 4.324759 +v 10.000000 7.000000 4.375000 +v 9.812500 7.000000 4.324759 +v 9.675241 7.000000 4.187500 +v 9.625000 7.000000 4.000000 +v 9.675241 7.000000 3.812500 +v 9.812500 7.000000 3.675241 +v 10.000000 7.000000 3.625000 +v 11.125000 7.625000 3.783494 +v 11.216506 7.625000 3.875000 +v 11.250000 7.625000 4.000000 +v 11.216506 7.625000 4.125000 +v 11.125000 7.625000 4.216506 +v 11.000000 7.625000 4.250000 +v 10.875000 7.625000 4.216506 +v 10.783494 7.625000 4.125000 +v 10.750000 7.625000 4.000000 +v 10.783494 7.625000 3.875000 +v 10.875000 7.625000 3.783494 +v 11.000000 7.625000 3.750000 +v 11.187500 8.000000 3.675241 +v 11.324759 8.000000 3.812500 +v 11.375000 8.000000 4.000000 +v 11.324759 8.000000 4.187500 +v 11.187500 8.000000 4.324759 +v 11.000000 8.000000 4.375000 +v 10.812500 8.000000 4.324759 +v 10.675241 8.000000 4.187500 +v 10.625000 8.000000 4.000000 +v 10.675241 8.000000 3.812500 +v 10.812500 8.000000 3.675241 +v 11.000000 8.000000 3.625000 +v 9.500000 8.000000 4.375000 +v 11.500000 8.000000 4.375000 +v 9.500000 8.000000 3.625000 +v 11.500000 8.000000 3.625000 +v 9.500000 8.750000 3.625000 +v 9.500000 8.750000 4.375000 +v 11.500000 8.750000 4.375000 +v 11.500000 8.750000 3.625000 +v 8.625000 1.000000 6.375000 +v 11.375000 1.000000 6.375000 +v 8.625000 1.000000 3.625000 +v 11.375000 1.000000 3.625000 +v 8.625000 2.000000 3.625000 +v 8.625000 2.000000 6.375000 +v 11.375000 2.000000 6.375000 +v 11.375000 2.000000 3.625000 +v 10.000000 2.000000 4.500000 +v 9.617316 2.000000 4.576120 +v 9.292893 2.000000 4.792893 +v 9.076120 2.000000 5.117317 +v 9.000000 2.000000 5.500000 +v 9.076120 2.000000 5.882684 +v 9.292893 2.000000 6.207107 +v 9.617316 2.000000 6.423880 +v 10.000000 2.000000 6.500000 +v 10.382683 2.000000 6.423880 +v 10.707107 2.000000 6.207107 +v 10.923880 2.000000 5.882684 +v 11.000000 2.000000 5.500000 +v 10.923880 2.000000 5.117316 +v 10.707107 2.000000 4.792893 +v 10.382683 2.000000 4.576120 +v 9.617316 6.000000 4.576120 +v 10.000000 6.000000 4.500000 +v 9.292893 6.000000 4.792893 +v 9.076120 6.000000 5.117317 +v 9.000000 6.000000 5.500000 +v 9.076120 6.000000 5.882684 +v 9.292893 6.000000 6.207107 +v 9.617316 6.000000 6.423880 +v 10.000000 6.000000 6.500000 +v 10.382683 6.000000 6.423880 +v 10.707107 6.000000 6.207107 +v 10.923880 6.000000 5.882684 +v 11.000000 6.000000 5.500000 +v 10.923880 6.000000 5.117316 +v 10.707107 6.000000 4.792893 +v 10.382683 6.000000 4.576120 +v 8.500000 2.000000 6.250000 +v 9.000000 2.000000 6.250000 +v 8.500000 2.000000 3.750000 +v 9.000000 2.000000 4.500000 +v 9.500000 2.000000 3.750000 +v 9.500000 2.000000 4.500000 +v 8.500000 3.500000 3.750000 +v 8.500000 3.500000 6.250000 +v 9.000000 3.500000 6.250000 +v 9.000000 3.500000 4.500000 +v 9.500000 3.500000 4.500000 +v 9.500000 3.500000 3.750000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +vn -0.8660 0.0000 -0.5000 +vn 0.8660 0.0000 -0.5000 +vn 0.9239 0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 0.9239 +vn 0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 -0.9239 +vn -0.9239 0.0000 -0.3827 +vn 0.6588 0.0000 0.7523 +vn -0.9239 0.0000 0.3827 +vn -0.7523 0.0000 -0.6588 +vn 0.2706 0.7071 0.6533 +vn 0.5000 0.7071 0.5000 +vn -0.5000 0.7071 -0.5000 +vn -0.6533 0.7071 -0.2706 +vn 0.6533 0.7071 0.2706 +vn -0.7071 0.7071 -0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.6533 0.7071 0.2706 +vn 0.6533 0.7071 -0.2706 +vn -0.5000 0.7071 0.5000 +vn 0.5000 0.7071 -0.5000 +vn -0.2706 0.7071 0.6533 +vn 0.2706 0.7071 -0.6533 +vn -0.2706 0.7071 -0.6533 +vn 0.0000 -0.4203 0.9074 +vn -0.9919 0.0899 -0.0899 +vn -0.0000 0.3532 -0.9356 +vn 0.6441 0.3032 -0.7023 +vn 0.7294 -0.2820 0.6233 +vn -0.7294 -0.2820 0.6233 +vn -0.6441 0.3032 -0.7023 +vn 0.9919 0.0899 -0.0899 +vn 0.0000 0.4203 -0.9074 +vn 0.7294 0.2820 -0.6233 +vn 0.9919 -0.0899 0.0899 +vn 0.6441 -0.3032 0.7023 +vn -0.6441 -0.3032 0.7023 +vn -0.7294 0.2820 -0.6233 +vn -0.0000 -0.3532 0.9356 +vn -0.9919 -0.0899 0.0899 +vn -0.6588 0.0000 -0.7523 +vn 0.7523 0.0000 0.6588 +vn 0.0000 -0.4202 0.9074 +vn 0.0000 0.4202 -0.9074 +vn 0.8660 -0.5000 0.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.8660 0.5000 0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.6794 -0.1448 0.7194 +vn -0.9987 -0.0196 0.0473 +vn -0.7263 0.1363 -0.6737 +vn 0.7263 0.1363 -0.6737 +vn 0.9987 -0.0196 0.0473 +vn 0.6794 -0.1448 0.7194 +vn -0.0000 -0.1866 0.9824 +vn -0.7263 0.1363 0.6737 +vn -0.9987 -0.0196 -0.0473 +vn -0.6794 -0.1448 -0.7194 +vn 0.0000 -0.1866 -0.9824 +vn 0.6794 -0.1448 -0.7194 +vn 0.9987 -0.0196 -0.0473 +vn 0.7263 0.1363 0.6737 +vn 0.9955 -0.0671 0.0671 +vn 0.6794 -0.7194 0.1448 +vn 0.9987 -0.0473 0.0196 +vn 0.0000 -0.7071 0.7071 +vn -0.6794 -0.7194 0.1448 +vn -0.0000 -0.9824 0.1866 +vn 0.6630 -0.5294 0.5293 +vn -0.6630 -0.5294 0.5293 +vn 0.7574 0.4617 -0.4617 +vn -0.7574 0.4617 -0.4617 +vn -0.9955 -0.0671 0.0671 +vn 0.7263 0.6737 -0.1363 +vn -0.7263 0.6737 -0.1363 +vn -0.9987 -0.0473 0.0196 +vn -0.9955 -0.0671 -0.0671 +vn 0.6630 -0.5293 -0.5294 +vn -0.7574 0.4617 0.4617 +vn 0.0000 -0.7071 -0.7071 +vn -0.6630 -0.5294 -0.5293 +vn 0.7574 0.4617 0.4617 +vn 0.9955 -0.0671 -0.0671 +vn 0.9987 -0.0473 -0.0196 +vn 0.6794 -0.7194 -0.1448 +vn -0.9987 -0.0473 -0.0196 +vn -0.7263 0.6737 0.1363 +vn -0.6794 -0.7194 -0.1448 +vn -0.0000 -0.9824 -0.1866 +vn 0.7263 0.6737 0.1363 +vn 0.6630 -0.5294 0.5294 +vn 0.6630 -0.5294 -0.5293 +vn -0.6630 -0.5293 -0.5294 +vn -0.5000 0.0000 -0.8660 +vn 0.8660 0.0000 0.5000 +vn -0.5000 0.0000 0.8660 +vn 0.5000 0.0000 0.8660 +vn -0.8660 0.0000 0.5000 +vn 0.5000 0.0000 -0.8660 +vn -0.5000 -0.8660 0.0000 +vn 0.5000 0.8660 0.0000 +vn -0.5000 0.8660 0.0000 +vn 0.5000 -0.8660 0.0000 +vn -0.0000 -0.8944 -0.4472 +vn -0.4472 -0.7746 -0.4472 +vn -0.8944 0.0000 -0.4472 +vn -0.7746 0.4472 -0.4472 +vn 0.8944 0.0000 -0.4472 +vn 0.7746 0.4472 -0.4472 +vn 0.4472 -0.7746 -0.4472 +vn -0.7746 -0.4472 -0.4472 +vn 0.4472 0.7746 -0.4472 +vn 0.0000 0.8944 -0.4472 +vn -0.4472 0.7746 -0.4472 +vn 0.7746 -0.4472 -0.4472 +vn 0.0000 -0.8944 0.4472 +vn 0.4472 -0.7746 0.4472 +vn 0.8944 0.0000 0.4472 +vn 0.7746 0.4472 0.4472 +vn -0.8944 -0.0000 0.4472 +vn -0.7746 0.4472 0.4472 +vn -0.4472 -0.7746 0.4472 +vn 0.7746 -0.4472 0.4472 +vn -0.4472 0.7746 0.4472 +vn -0.0000 0.8944 0.4472 +vn 0.4472 0.7746 0.4472 +vn -0.7746 -0.4472 0.4472 +vn -0.0196 -0.9987 0.0473 +vn -0.1866 0.0000 0.9824 +vn -0.0196 0.9987 0.0473 +vn 0.1363 -0.7263 -0.6737 +vn -0.1448 -0.6794 0.7194 +vn -0.1448 0.6794 0.7194 +vn 0.1363 0.7263 -0.6737 +vn -0.0671 -0.9955 0.0671 +vn -0.5293 0.6630 0.5294 +vn -0.0671 0.9955 0.0671 +vn 0.4617 -0.7574 -0.4617 +vn -0.5294 -0.6630 0.5294 +vn 0.4617 0.7574 -0.4617 +vn -0.0473 0.9987 0.0196 +vn -0.0473 -0.9987 0.0196 +vn 0.6737 -0.7263 -0.1363 +vn -0.9824 -0.0000 0.1866 +vn -0.7194 -0.6794 0.1448 +vn -0.7194 0.6794 0.1448 +vn 0.6737 0.7263 -0.1363 +vn -0.0393 -0.9947 0.0948 +vn -0.0393 0.9947 0.0948 +vn 0.2611 -0.7311 -0.6303 +vn -0.2962 -0.6333 0.7150 +vn -0.2962 0.6333 0.7150 +vn 0.9809 -0.0000 -0.1944 +vn 0.2611 0.7311 -0.6303 +vn 0.9824 0.0000 -0.1866 +vn 0.7194 -0.6794 -0.1448 +vn 0.7194 0.6794 -0.1448 +vn -0.6737 -0.7263 0.1363 +vn -0.6737 0.7263 0.1363 +vn 0.0473 -0.9987 -0.0196 +vn 0.0473 0.9987 -0.0196 +vn -0.4617 0.7574 0.4617 +vn 0.5294 0.6630 -0.5294 +vn 0.0671 -0.9955 -0.0671 +vn 0.0671 0.9955 -0.0671 +vn 0.5294 -0.6630 -0.5294 +vn 0.1866 -0.0000 -0.9824 +vn 0.1448 -0.6794 -0.7194 +vn -0.1363 0.7263 0.6737 +vn 0.1448 0.6794 -0.7194 +vn -0.1363 -0.7263 0.6737 +vn 0.0196 -0.9987 -0.0473 +vn 0.0196 0.9987 -0.0473 +vn -0.4617 -0.7574 0.4617 +vn -0.5751 0.0000 -0.8181 +vn 0.5751 0.0000 -0.8181 +vn -0.5751 0.0000 0.8181 +vn 0.5751 0.0000 0.8181 +vn 0.3536 0.7071 -0.6124 +vn -0.3536 0.7071 -0.6124 +vn -0.6124 0.7071 -0.3536 +vn -0.6124 0.7071 0.3536 +vn -0.3536 0.7071 0.6124 +vn 0.3536 0.7071 0.6124 +vn 0.6124 0.7071 0.3536 +vn 0.6124 0.7071 -0.3536 +vn 0.3536 -0.7071 -0.6124 +vn -0.3536 -0.7071 -0.6124 +vn -0.6124 -0.7071 -0.3536 +vn -0.6124 -0.7071 0.3536 +vn -0.3536 -0.7071 0.6124 +vn 0.3536 -0.7071 0.6124 +vn 0.6124 -0.7071 0.3536 +vn 0.6124 -0.7071 -0.3536 +vn 0.6124 -0.7071 0.3535 +s off +f 151//27 153//27 154//27 +f 155//27 158//27 156//27 +f 162//28 159//28 160//28 +f 155//29 161//29 157//29 +f 157//30 162//30 158//30 +f 158//31 160//31 156//31 +f 156//32 159//32 155//32 +f 163//27 166//27 164//27 +f 170//28 167//28 168//28 +f 163//29 169//29 165//29 +f 165//30 170//30 166//30 +f 166//31 168//31 164//31 +f 164//32 167//32 163//32 +f 171//27 174//27 172//27 +f 178//28 175//28 176//28 +f 171//29 177//29 173//29 +f 173//30 178//30 174//30 +f 174//31 176//31 172//31 +f 172//32 175//32 171//32 +f 179//27 182//27 180//27 +f 186//28 183//28 184//28 +f 179//29 185//29 181//29 +f 181//30 186//30 182//30 +f 182//31 184//31 180//31 +f 180//32 183//32 179//32 +f 189//32 154//32 153//32 +f 187//30 152//30 151//30 +f 190//28 188//28 187//28 +f 191//27 193//27 194//27 +f 197//30 194//30 193//30 +f 195//32 192//32 191//32 +f 198//28 196//28 195//28 +f 199//27 201//27 202//27 +f 205//31 202//31 201//31 +f 203//29 200//29 199//29 +f 206//28 204//28 203//28 +f 207//27 209//27 210//27 +f 213//29 210//29 209//29 +f 211//31 208//31 207//31 +f 214//28 212//28 211//28 +f 216//31 217//31 215//31 +f 217//32 219//32 215//32 +f 216//30 222//30 218//30 +f 219//29 222//29 220//29 +f 223//27 226//27 224//27 +f 230//28 227//28 228//28 +f 223//29 229//29 225//29 +f 225//30 230//30 226//30 +f 226//31 228//31 224//31 +f 224//32 227//32 223//32 +f 231//27 234//27 232//27 +f 238//28 235//28 236//28 +f 231//29 237//29 233//29 +f 233//30 238//30 234//30 +f 234//31 236//31 232//31 +f 232//32 235//32 231//32 +f 239//27 242//27 240//27 +f 246//28 243//28 244//28 +f 239//29 245//29 241//29 +f 241//30 246//30 242//30 +f 242//31 244//31 240//31 +f 240//32 243//32 239//32 +f 247//27 250//27 248//27 +f 254//28 251//28 252//28 +f 247//29 253//29 249//29 +f 249//30 254//30 250//30 +f 250//31 252//31 248//31 +f 248//32 251//32 247//32 +f 256//31 257//31 255//31 +f 257//32 259//32 255//32 +f 256//30 262//30 258//30 +f 259//29 262//29 260//29 +f 264//31 265//31 263//31 +f 265//32 267//32 263//32 +f 264//30 270//30 266//30 +f 267//29 270//29 268//29 +f 272//31 273//31 271//31 +f 273//32 275//32 271//32 +f 272//30 278//30 274//30 +f 275//29 278//29 276//29 +f 279//27 281//27 282//27 +f 285//32 282//32 281//32 +f 283//30 280//30 279//30 +f 286//28 284//28 283//28 +f 287//27 289//27 290//27 +f 293//30 290//30 289//30 +f 291//32 288//32 287//32 +f 294//28 292//28 291//28 +f 295//27 297//27 298//27 +f 301//31 298//31 297//31 +f 299//29 296//29 295//29 +f 302//28 300//28 299//28 +f 303//27 305//27 306//27 +f 309//29 306//29 305//29 +f 307//31 304//31 303//31 +f 310//28 308//28 307//28 +f 313//27 312//27 311//27 +f 317//28 315//28 316//28 +f 311//30 315//30 313//30 +f 313//31 318//31 314//31 +f 312//29 316//29 311//29 +f 314//32 317//32 312//32 +f 321//27 320//27 319//27 +f 325//28 323//28 324//28 +f 319//30 323//30 321//30 +f 321//31 326//31 322//31 +f 320//29 324//29 319//29 +f 322//32 325//32 320//32 +f 329//27 328//27 327//27 +f 333//28 331//28 332//28 +f 327//30 331//30 329//30 +f 329//31 334//31 330//31 +f 328//29 332//29 327//29 +f 330//32 333//32 328//32 +f 337//27 336//27 335//27 +f 341//28 339//28 340//28 +f 338//32 341//32 336//32 +f 335//30 339//30 337//30 +f 337//31 342//31 338//31 +f 336//29 340//29 335//29 +f 353//27 349//27 345//27 +f 367//28 371//28 360//28 +f 404//29 412//29 401//29 +f 393//32 422//32 398//32 +f 406//31 416//31 407//31 +f 397//29 420//29 400//29 +f 395//31 424//31 394//31 +f 408//32 414//32 403//32 +f 416//33 408//33 407//33 +f 404//34 414//34 413//34 +f 412//35 402//35 401//35 +f 406//36 410//36 409//36 +f 402//30 410//30 405//30 +f 424//33 393//33 394//33 +f 397//34 422//34 421//34 +f 420//35 399//35 400//35 +f 395//36 418//36 417//36 +f 399//30 418//30 396//30 +f 425//32 438//32 430//32 +f 429//29 436//29 432//29 +f 427//31 440//31 426//31 +f 440//33 425//33 426//33 +f 429//34 438//34 437//34 +f 436//35 431//35 432//35 +f 427//36 434//36 433//36 +f 431//30 434//30 428//30 +f 441//32 454//32 446//32 +f 445//29 452//29 448//29 +f 443//31 456//31 442//31 +f 456//33 441//33 442//33 +f 445//34 454//34 453//34 +f 452//35 447//35 448//35 +f 443//36 450//36 449//36 +f 447//30 450//30 444//30 +f 467//27 463//27 459//27 +f 497//28 501//28 490//28 +f 507//27 506//27 505//27 +f 508//32 511//32 506//32 +f 505//30 509//30 507//30 +f 507//31 512//31 508//31 +f 506//29 510//29 505//29 +f 515//27 514//27 513//27 +f 1402//30 525//30 1399//30 +f 525//27 1159//27 532//27 +f 519//31 532//31 522//31 +f 517//37 522//37 518//37 +f 1400//29 513//29 514//29 +f 523//28 529//28 526//28 +f 529//31 527//31 528//31 +f 526//30 528//30 515//30 +f 516//32 530//32 523//32 +f 515//27 527//27 516//27 +f 517//31 523//31 526//31 +f 513//30 517//30 526//30 +f 523//32 518//32 514//32 +f 565//28 569//28 573//28 +f 592//27 604//27 600//27 +f 389//28 585//28 584//28 +f 387//28 585//28 388//28 +f 387//28 587//28 586//28 +f 385//28 587//28 386//28 +f 384//28 588//28 385//28 +f 392//28 589//28 384//28 +f 391//28 581//28 392//28 +f 390//28 582//28 391//28 +f 607//27 381//27 383//27 +f 606//27 383//27 382//27 +f 614//27 382//27 375//27 +f 613//27 375//27 376//27 +f 612//27 376//27 377//27 +f 378//27 612//27 377//27 +f 610//27 378//27 379//27 +f 380//27 610//27 379//27 +f 390//33 608//33 583//33 +f 609//33 389//33 584//33 +f 625//27 621//27 617//27 +f 639//28 643//28 632//28 +f 665//28 669//28 673//28 +f 692//27 704//27 700//27 +f 661//28 685//28 684//28 +f 659//28 685//28 660//28 +f 659//28 687//28 686//28 +f 657//28 687//28 658//28 +f 656//28 688//28 657//28 +f 664//28 689//28 656//28 +f 663//28 681//28 664//28 +f 662//28 682//28 663//28 +f 707//27 653//27 655//27 +f 706//27 655//27 654//27 +f 714//27 654//27 647//27 +f 713//27 647//27 648//27 +f 712//27 648//27 649//27 +f 650//27 712//27 649//27 +f 710//27 650//27 651//27 +f 652//27 710//27 651//27 +f 662//33 708//33 683//33 +f 709//33 661//33 684//33 +f 725//27 721//27 717//27 +f 739//28 743//28 732//28 +f 765//28 769//28 773//28 +f 792//27 804//27 800//27 +f 761//28 785//28 784//28 +f 759//28 785//28 760//28 +f 759//28 787//28 786//28 +f 757//28 787//28 758//28 +f 756//28 788//28 757//28 +f 764//28 789//28 756//28 +f 763//28 781//28 764//28 +f 762//28 782//28 763//28 +f 807//27 753//27 755//27 +f 806//27 755//27 754//27 +f 814//27 754//27 747//27 +f 813//27 747//27 748//27 +f 812//27 748//27 749//27 +f 750//27 812//27 749//27 +f 810//27 750//27 751//27 +f 752//27 810//27 751//27 +f 762//33 808//33 783//33 +f 809//33 761//33 784//33 +f 825//27 821//27 817//27 +f 839//28 843//28 832//28 +f 865//28 869//28 873//28 +f 892//27 904//27 900//27 +f 861//28 885//28 884//28 +f 859//28 885//28 860//28 +f 859//28 887//28 886//28 +f 857//28 887//28 858//28 +f 856//28 888//28 857//28 +f 864//28 889//28 856//28 +f 863//28 881//28 864//28 +f 862//28 882//28 863//28 +f 907//27 853//27 855//27 +f 906//27 855//27 854//27 +f 914//27 854//27 847//27 +f 913//27 847//27 848//27 +f 912//27 848//27 849//27 +f 850//27 912//27 849//27 +f 910//27 850//27 851//27 +f 852//27 910//27 851//27 +f 862//33 908//33 883//33 +f 909//33 861//33 884//33 +f 980//29 981//29 979//29 +f 985//31 984//31 983//31 +f 980//32 986//32 982//32 +f 979//27 984//27 980//27 +f 981//30 983//30 979//30 +f 982//28 985//28 981//28 +f 996//30 989//30 995//30 +f 990//31 993//31 989//31 +f 994//32 998//32 993//32 +f 991//27 1003//27 987//27 +f 993//27 995//27 989//27 +f 990//28 997//28 994//28 +f 988//29 995//29 987//29 +f 991//29 997//29 992//29 +f 987//29 998//29 991//29 +f 992//29 996//29 988//29 +f 1002//28 1007//28 999//28 +f 987//30 1004//30 988//30 +f 988//28 1005//28 992//28 +f 992//32 1006//32 991//32 +f 1000//29 1003//29 999//29 +f 1002//29 1005//29 1001//29 +f 999//29 1006//29 1002//29 +f 1001//29 1004//29 1000//29 +f 1009//29 1007//29 1010//29 +f 999//32 1008//32 1000//32 +f 1000//27 1009//27 1001//27 +f 1001//30 1010//30 1002//30 +f 1028//29 1033//29 1027//29 +f 1021//29 1022//29 1018//29 +f 1026//29 1031//29 1025//29 +f 1024//29 1029//29 1030//29 +f 1038//29 1035//29 1036//29 +f 1042//29 1039//29 1040//29 +f 1046//29 1043//29 1044//29 +f 1050//29 1047//29 1048//29 +f 1060//30 1053//30 1059//30 +f 1054//31 1057//31 1053//31 +f 1058//32 1062//32 1057//32 +f 1055//27 1067//27 1051//27 +f 1057//27 1059//27 1053//27 +f 1054//28 1061//28 1058//28 +f 1052//29 1059//29 1051//29 +f 1055//29 1061//29 1056//29 +f 1051//29 1062//29 1055//29 +f 1056//29 1060//29 1052//29 +f 1066//28 1071//28 1063//28 +f 1051//30 1068//30 1052//30 +f 1052//28 1069//28 1056//28 +f 1056//32 1070//32 1055//32 +f 1064//29 1067//29 1063//29 +f 1066//29 1069//29 1065//29 +f 1063//29 1070//29 1066//29 +f 1065//29 1068//29 1064//29 +f 1073//29 1071//29 1074//29 +f 1063//32 1072//32 1064//32 +f 1064//27 1073//27 1065//27 +f 1065//30 1074//30 1066//30 +f 1092//29 1097//29 1091//29 +f 1085//29 1086//29 1082//29 +f 1090//29 1095//29 1089//29 +f 1088//29 1093//29 1094//29 +f 1102//29 1099//29 1100//29 +f 1106//29 1103//29 1104//29 +f 1110//29 1107//29 1108//29 +f 1114//29 1111//29 1112//29 +f 1122//32 1116//32 1118//32 +f 1119//30 1117//30 1115//30 +f 1121//31 1118//31 1117//31 +f 1120//29 1115//29 1116//29 +f 1160//31 1401//31 1159//31 +f 1198//32 1158//32 1197//32 +f 1161//31 1158//31 1157//31 +f 1196//30 1161//30 1157//30 +f 1198//29 1155//29 1156//29 +f 1198//38 1196//38 1195//38 +f 1196//28 1162//28 1161//28 +f 522//32 1400//32 514//32 +f 1199//30 1406//30 1202//30 +f 1449//30 524//30 1450//30 +f 532//32 1401//32 1400//32 +f 1397//27 1395//27 1393//27 +f 1199//28 1400//28 1200//28 +f 1200//28 1401//28 1201//28 +f 1201//28 1402//28 1202//28 +f 1202//28 1399//28 1199//28 +f 1404//28 1406//28 1403//28 +f 1201//32 1404//32 1200//32 +f 1202//31 1405//31 1201//31 +f 1200//29 1403//29 1199//29 +f 1421//28 1419//28 1420//28 +f 1413//28 1411//28 1412//28 +f 1410//32 1413//32 1408//32 +f 1407//30 1411//30 1409//30 +f 1409//31 1414//31 1410//31 +f 1408//29 1412//29 1407//29 +f 1418//32 1421//32 1416//32 +f 1415//30 1419//30 1417//30 +f 1417//31 1422//31 1418//31 +f 1416//29 1420//29 1415//29 +f 1429//28 1427//28 1428//28 +f 1426//32 1429//32 1424//32 +f 1423//30 1427//30 1425//30 +f 1425//31 1430//31 1426//31 +f 1424//29 1428//29 1423//29 +f 1445//28 1443//28 1444//28 +f 1437//28 1435//28 1436//28 +f 1434//32 1437//32 1432//32 +f 1431//30 1435//30 1433//30 +f 1433//31 1438//31 1434//31 +f 1432//29 1436//29 1431//29 +f 1442//32 1445//32 1440//32 +f 1439//30 1443//30 1441//30 +f 1441//31 1446//31 1442//31 +f 1440//29 1444//29 1439//29 +f 1399//30 519//30 513//30 +f 1457//32 1454//32 1458//32 +f 1458//29 1451//29 1455//29 +f 1455//30 1452//30 1456//30 +f 1456//31 1453//31 1457//31 +f 1448//28 1451//28 1447//28 +f 1450//28 1453//28 1449//28 +f 1447//28 1454//28 1450//28 +f 1449//28 1452//28 1448//28 +f 531//27 1456//27 520//27 +f 521//27 1458//27 524//27 +f 524//27 1455//27 531//27 +f 520//27 1457//27 521//27 +f 524//31 1447//31 1450//31 +f 1447//32 520//32 1448//32 +f 520//29 1449//29 1448//29 +f 1467//31 1473//31 1469//31 +f 1469//32 1474//32 1470//32 +f 1459//31 1465//31 1461//31 +f 1461//32 1466//32 1462//32 +f 1462//29 1464//29 1460//29 +f 1460//30 1463//30 1459//30 +f 1470//29 1472//29 1468//29 +f 1468//30 1471//30 1467//30 +f 1483//31 1489//31 1485//31 +f 1485//32 1490//32 1486//32 +f 1475//31 1481//31 1477//31 +f 1477//32 1482//32 1478//32 +f 1478//29 1480//29 1476//29 +f 1476//30 1479//30 1475//30 +f 1486//29 1488//29 1484//29 +f 1484//30 1487//30 1483//30 +f 1499//31 1492//31 1491//31 +f 1496//29 1501//29 1495//29 +f 1495//30 1499//30 1491//30 +f 1494//32 1506//32 1498//32 +f 1502//32 1492//32 1500//32 +f 1494//28 1499//28 1493//28 +f 1497//28 1502//28 1498//28 +f 1493//28 1501//28 1497//28 +f 1498//28 1500//28 1494//28 +f 1505//28 1504//28 1503//28 +f 1498//29 1505//29 1497//29 +f 1497//30 1503//30 1493//30 +f 1493//31 1504//31 1494//31 +f 1541//31 1540//31 1539//31 +f 1545//29 1543//29 1544//29 +f 1541//28 1546//28 1542//28 +f 1540//27 1544//27 1539//27 +f 1542//32 1545//32 1540//32 +f 1539//30 1543//30 1541//30 +f 1619//27 1617//27 1613//27 +f 1627//28 1631//28 1624//28 +f 1643//27 1641//27 1637//27 +f 1653//28 1655//28 1648//28 +f 1667//31 1673//31 1669//31 +f 1669//32 1674//32 1670//32 +f 1659//31 1665//31 1661//31 +f 1661//32 1666//32 1662//32 +f 1662//29 1664//29 1660//29 +f 1660//30 1663//30 1659//30 +f 1670//29 1672//29 1668//29 +f 1668//30 1671//30 1667//30 +f 1683//31 1689//31 1685//31 +f 1685//32 1690//32 1686//32 +f 1675//31 1681//31 1677//31 +f 1677//32 1682//32 1678//32 +f 1678//29 1680//29 1676//29 +f 1676//30 1679//30 1675//30 +f 1686//29 1688//29 1684//29 +f 1684//30 1687//30 1683//30 +f 1693//27 1692//27 1691//27 +f 1697//29 2048//29 1696//29 +f 1693//31 2046//31 1694//31 +f 1692//29 2044//29 1691//29 +f 1694//32 2045//32 1692//32 +f 1691//30 2043//30 1693//30 +f 1711//31 1724//31 1712//31 +f 1713//31 1723//31 1711//31 +f 1713//31 1726//31 1725//31 +f 1715//31 1726//31 1714//31 +f 1716//31 1727//31 1715//31 +f 1716//31 1729//31 1728//31 +f 1718//31 1729//31 1717//31 +f 1719//31 1730//31 1718//31 +f 1719//31 1732//31 1731//31 +f 1721//31 1732//31 1720//31 +f 1721//31 1734//31 1733//31 +f 1712//31 1734//31 1722//31 +f 1749//29 1783//29 1748//29 +f 1747//29 1783//29 1784//29 +f 1758//29 1784//29 1794//29 +f 1758//29 1793//29 1757//29 +f 1756//29 1793//29 1792//29 +f 1756//29 1791//29 1755//29 +f 1755//29 1790//29 1754//29 +f 1753//29 1790//29 1789//29 +f 1753//29 1788//29 1752//29 +f 1752//29 1787//29 1751//29 +f 1750//29 1787//29 1786//29 +f 1750//29 1785//29 1749//29 +f 1839//29 1837//29 1833//29 +f 1808//31 1817//31 1813//31 +f 1850//32 1844//32 1846//32 +f 1847//30 1845//30 1843//30 +f 1849//31 1846//31 1845//31 +f 1848//29 1843//29 1844//29 +f 1847//28 1850//28 1849//28 +f 1858//32 1852//32 1854//32 +f 1855//30 1853//30 1851//30 +f 1857//31 1854//31 1853//31 +f 1856//29 1851//29 1852//29 +f 1855//28 1858//28 1857//28 +f 1935//28 1933//28 1934//28 +f 1931//31 1936//31 1932//31 +f 1930//29 1934//29 1929//29 +f 1932//32 1935//32 1930//32 +f 1929//30 1933//30 1931//30 +f 1695//28 2044//28 1696//28 +f 1696//28 2045//28 1697//28 +f 1697//28 2046//28 1698//28 +f 1698//28 2043//28 1695//28 +f 2049//28 2047//28 2048//28 +f 1698//32 2049//32 1697//32 +f 1696//30 2047//30 1695//30 +f 1695//31 2050//31 1698//31 +f 2051//27 2053//27 2054//27 +f 2055//27 2058//27 2056//27 +f 2062//28 2059//28 2060//28 +f 2055//29 2061//29 2057//29 +f 2057//30 2062//30 2058//30 +f 2058//31 2060//31 2056//31 +f 2056//32 2059//32 2055//32 +f 2063//27 2066//27 2064//27 +f 2070//28 2067//28 2068//28 +f 2063//29 2069//29 2065//29 +f 2065//30 2070//30 2066//30 +f 2066//31 2068//31 2064//31 +f 2064//32 2067//32 2063//32 +f 2071//27 2074//27 2072//27 +f 2078//28 2075//28 2076//28 +f 2071//29 2077//29 2073//29 +f 2073//30 2078//30 2074//30 +f 2074//31 2076//31 2072//31 +f 2072//32 2075//32 2071//32 +f 2079//27 2082//27 2080//27 +f 2086//28 2083//28 2084//28 +f 2079//29 2085//29 2081//29 +f 2081//30 2086//30 2082//30 +f 2082//31 2084//31 2080//31 +f 2080//32 2083//32 2079//32 +f 2089//32 2054//32 2053//32 +f 2087//30 2052//30 2051//30 +f 2090//28 2088//28 2087//28 +f 2091//27 2093//27 2094//27 +f 2097//30 2094//30 2093//30 +f 2095//32 2092//32 2091//32 +f 2098//28 2096//28 2095//28 +f 2099//27 2101//27 2102//27 +f 2105//31 2102//31 2101//31 +f 2103//29 2100//29 2099//29 +f 2106//28 2104//28 2103//28 +f 2107//27 2109//27 2110//27 +f 2113//29 2110//29 2109//29 +f 2111//31 2108//31 2107//31 +f 2114//28 2112//28 2111//28 +f 2116//31 2117//31 2115//31 +f 2117//32 2119//32 2115//32 +f 2116//30 2122//30 2118//30 +f 2119//29 2122//29 2120//29 +f 2123//27 2126//27 2124//27 +f 2130//28 2127//28 2128//28 +f 2123//29 2129//29 2125//29 +f 2125//30 2130//30 2126//30 +f 2126//31 2128//31 2124//31 +f 2124//32 2127//32 2123//32 +f 2131//27 2134//27 2132//27 +f 2138//28 2135//28 2136//28 +f 2131//29 2137//29 2133//29 +f 2133//30 2138//30 2134//30 +f 2134//31 2136//31 2132//31 +f 2132//32 2135//32 2131//32 +f 2139//27 2142//27 2140//27 +f 2146//28 2143//28 2144//28 +f 2139//29 2145//29 2141//29 +f 2141//30 2146//30 2142//30 +f 2142//31 2144//31 2140//31 +f 2140//32 2143//32 2139//32 +f 2147//27 2150//27 2148//27 +f 2154//28 2151//28 2152//28 +f 2147//29 2153//29 2149//29 +f 2149//30 2154//30 2150//30 +f 2150//31 2152//31 2148//31 +f 2148//32 2151//32 2147//32 +f 2156//31 2157//31 2155//31 +f 2157//32 2159//32 2155//32 +f 2156//30 2162//30 2158//30 +f 2159//29 2162//29 2160//29 +f 2164//31 2165//31 2163//31 +f 2165//32 2167//32 2163//32 +f 2164//30 2170//30 2166//30 +f 2167//29 2170//29 2168//29 +f 2172//31 2173//31 2171//31 +f 2173//32 2175//32 2171//32 +f 2172//30 2178//30 2174//30 +f 2175//29 2178//29 2176//29 +f 2179//27 2181//27 2182//27 +f 2185//32 2182//32 2181//32 +f 2183//30 2180//30 2179//30 +f 2186//28 2184//28 2183//28 +f 2187//27 2189//27 2190//27 +f 2193//30 2190//30 2189//30 +f 2191//32 2188//32 2187//32 +f 2194//28 2192//28 2191//28 +f 2195//27 2197//27 2198//27 +f 2201//31 2198//31 2197//31 +f 2199//29 2196//29 2195//29 +f 2202//28 2200//28 2199//28 +f 2203//27 2205//27 2206//27 +f 2209//29 2206//29 2205//29 +f 2207//31 2204//31 2203//31 +f 2210//28 2208//28 2207//28 +f 2213//27 2212//27 2211//27 +f 2217//28 2215//28 2216//28 +f 2211//30 2215//30 2213//30 +f 2213//31 2218//31 2214//31 +f 2212//29 2216//29 2211//29 +f 2214//32 2217//32 2212//32 +f 2221//27 2220//27 2219//27 +f 2225//28 2223//28 2224//28 +f 2219//30 2223//30 2221//30 +f 2221//31 2226//31 2222//31 +f 2220//29 2224//29 2219//29 +f 2222//32 2225//32 2220//32 +f 2229//27 2228//27 2227//27 +f 2233//28 2231//28 2232//28 +f 2227//30 2231//30 2229//30 +f 2229//31 2234//31 2230//31 +f 2228//29 2232//29 2227//29 +f 2230//32 2233//32 2228//32 +f 2237//27 2236//27 2235//27 +f 2313//28 2303//28 2307//28 +f 2238//32 2241//32 2236//32 +f 2235//30 2239//30 2237//30 +f 2237//31 2242//31 2238//31 +f 2236//29 2240//29 2235//29 +f 2251//27 2249//27 2245//27 +f 2259//28 2263//28 2256//28 +f 2267//28 2287//28 2269//28 +f 2268//28 2285//28 2267//28 +f 2302//27 2271//27 2272//27 +f 2300//27 2270//27 2271//27 +f 2269//39 2302//39 2272//39 +f 2301//40 2268//40 2270//40 +f 2283//28 2273//28 2277//28 +f 2292//27 2290//27 2298//27 +f 2319//27 2317//27 2325//27 +f 2469//28 2459//28 2463//28 +f 2407//27 2405//27 2401//27 +f 2415//28 2419//28 2412//28 +f 2423//28 2443//28 2425//28 +f 2424//28 2441//28 2423//28 +f 2458//27 2427//27 2428//27 +f 2456//27 2426//27 2427//27 +f 2425//39 2458//39 2428//39 +f 2457//40 2424//40 2426//40 +f 2439//28 2429//28 2433//28 +f 2448//27 2446//27 2454//27 +f 2475//27 2473//27 2481//27 +f 2625//28 2615//28 2619//28 +f 2563//27 2561//27 2557//27 +f 2571//28 2575//28 2568//28 +f 2579//28 2599//28 2581//28 +f 2580//28 2597//28 2579//28 +f 2614//27 2583//27 2584//27 +f 2612//27 2582//27 2583//27 +f 2581//39 2614//39 2584//39 +f 2613//40 2580//40 2582//40 +f 2595//28 2585//28 2589//28 +f 2604//27 2602//27 2610//27 +f 2631//27 2629//27 2637//27 +f 2781//28 2771//28 2775//28 +f 2719//27 2717//27 2713//27 +f 2727//28 2731//28 2724//28 +f 2735//28 2755//28 2737//28 +f 2736//28 2753//28 2735//28 +f 2770//27 2739//27 2740//27 +f 2768//27 2738//27 2739//27 +f 2737//39 2770//39 2740//39 +f 2769//40 2736//40 2738//40 +f 2751//28 2741//28 2745//28 +f 2760//27 2758//27 2766//27 +f 2787//27 2785//27 2793//27 +f 2965//27 2964//27 2963//27 +f 2969//28 2967//28 2968//28 +f 2963//30 2967//30 2965//30 +f 2965//31 2970//31 2966//31 +f 2964//29 2968//29 2963//29 +f 2966//32 2969//32 2964//32 +f 2973//27 2972//27 2971//27 +f 2977//28 2975//28 2976//28 +f 2974//32 2977//32 2972//32 +f 2971//30 2975//30 2973//30 +f 2973//31 2978//31 2974//31 +f 2972//29 2976//29 2971//29 +f 2989//27 2985//27 2981//27 +f 3003//28 3007//28 2996//28 +f 3013//27 3014//27 3011//27 +f 3017//28 3020//28 3022//28 +f 3015//32 3021//32 3016//32 +f 3012//29 3018//29 3011//29 +f 3014//32 3019//32 3012//32 +f 3011//30 3017//30 3013//30 +f 3016//29 3020//29 3014//29 +f 3013//31 3022//31 3015//31 +f 151//27 152//27 153//27 +f 155//27 157//27 158//27 +f 162//28 161//28 159//28 +f 155//29 159//29 161//29 +f 157//30 161//30 162//30 +f 158//31 162//31 160//31 +f 156//32 160//32 159//32 +f 163//27 165//27 166//27 +f 170//28 169//28 167//28 +f 163//29 167//29 169//29 +f 165//30 169//30 170//30 +f 166//31 170//31 168//31 +f 164//32 168//32 167//32 +f 171//27 173//27 174//27 +f 178//28 177//28 175//28 +f 171//29 175//29 177//29 +f 173//30 177//30 178//30 +f 174//31 178//31 176//31 +f 172//32 176//32 175//32 +f 179//27 181//27 182//27 +f 186//28 185//28 183//28 +f 179//29 183//29 185//29 +f 181//30 185//30 186//30 +f 182//31 186//31 184//31 +f 180//32 184//32 183//32 +f 189//32 190//32 154//32 +f 187//30 188//30 152//30 +f 190//28 189//28 188//28 +f 191//27 192//27 193//27 +f 197//30 198//30 194//30 +f 195//32 196//32 192//32 +f 198//28 197//28 196//28 +f 199//27 200//27 201//27 +f 205//31 206//31 202//31 +f 203//29 204//29 200//29 +f 206//28 205//28 204//28 +f 207//27 208//27 209//27 +f 213//29 214//29 210//29 +f 211//31 212//31 208//31 +f 214//28 213//28 212//28 +f 216//31 218//31 217//31 +f 217//32 221//32 219//32 +f 216//30 220//30 222//30 +f 219//29 221//29 222//29 +f 223//27 225//27 226//27 +f 230//28 229//28 227//28 +f 223//29 227//29 229//29 +f 225//30 229//30 230//30 +f 226//31 230//31 228//31 +f 224//32 228//32 227//32 +f 231//27 233//27 234//27 +f 238//28 237//28 235//28 +f 231//29 235//29 237//29 +f 233//30 237//30 238//30 +f 234//31 238//31 236//31 +f 232//32 236//32 235//32 +f 239//27 241//27 242//27 +f 246//28 245//28 243//28 +f 239//29 243//29 245//29 +f 241//30 245//30 246//30 +f 242//31 246//31 244//31 +f 240//32 244//32 243//32 +f 247//27 249//27 250//27 +f 254//28 253//28 251//28 +f 247//29 251//29 253//29 +f 249//30 253//30 254//30 +f 250//31 254//31 252//31 +f 248//32 252//32 251//32 +f 256//31 258//31 257//31 +f 257//32 261//32 259//32 +f 256//30 260//30 262//30 +f 259//29 261//29 262//29 +f 264//31 266//31 265//31 +f 265//32 269//32 267//32 +f 264//30 268//30 270//30 +f 267//29 269//29 270//29 +f 272//31 274//31 273//31 +f 273//32 277//32 275//32 +f 272//30 276//30 278//30 +f 275//29 277//29 278//29 +f 279//27 280//27 281//27 +f 285//32 286//32 282//32 +f 283//30 284//30 280//30 +f 286//28 285//28 284//28 +f 287//27 288//27 289//27 +f 293//30 294//30 290//30 +f 291//32 292//32 288//32 +f 294//28 293//28 292//28 +f 295//27 296//27 297//27 +f 301//31 302//31 298//31 +f 299//29 300//29 296//29 +f 302//28 301//28 300//28 +f 303//27 304//27 305//27 +f 309//29 310//29 306//29 +f 307//31 308//31 304//31 +f 310//28 309//28 308//28 +f 313//27 314//27 312//27 +f 317//28 318//28 315//28 +f 311//30 316//30 315//30 +f 313//31 315//31 318//31 +f 312//29 317//29 316//29 +f 314//32 318//32 317//32 +f 321//27 322//27 320//27 +f 325//28 326//28 323//28 +f 319//30 324//30 323//30 +f 321//31 323//31 326//31 +f 320//29 325//29 324//29 +f 322//32 326//32 325//32 +f 329//27 330//27 328//27 +f 333//28 334//28 331//28 +f 327//30 332//30 331//30 +f 329//31 331//31 334//31 +f 328//29 333//29 332//29 +f 330//32 334//32 333//32 +f 337//27 338//27 336//27 +f 341//28 342//28 339//28 +f 338//32 342//32 341//32 +f 335//30 340//30 339//30 +f 337//31 339//31 342//31 +f 336//29 341//29 340//29 +f 345//27 344//27 343//27 +f 343//27 358//27 345//27 +f 358//27 357//27 345//27 +f 357//27 356//27 355//27 +f 355//27 354//27 353//27 +f 353//27 352//27 349//27 +f 352//27 351//27 349//27 +f 351//27 350//27 349//27 +f 349//27 348//27 347//27 +f 347//27 346//27 349//27 +f 346//27 345//27 349//27 +f 357//27 355//27 345//27 +f 355//27 353//27 345//27 +f 360//28 359//28 363//28 +f 359//28 361//28 363//28 +f 361//28 362//28 363//28 +f 363//28 364//28 365//28 +f 365//28 366//28 367//28 +f 367//28 368//28 371//28 +f 368//28 369//28 371//28 +f 369//28 370//28 371//28 +f 371//28 372//28 373//28 +f 373//28 374//28 371//28 +f 374//28 360//28 371//28 +f 363//28 365//28 360//28 +f 365//28 367//28 360//28 +f 404//29 413//29 412//29 +f 393//32 423//32 422//32 +f 406//31 409//31 416//31 +f 397//29 421//29 420//29 +f 395//31 417//31 424//31 +f 408//32 415//32 414//32 +f 416//33 415//33 408//33 +f 404//34 403//34 414//34 +f 412//35 411//35 402//35 +f 406//36 405//36 410//36 +f 402//30 411//30 410//30 +f 424//33 423//33 393//33 +f 397//34 398//34 422//34 +f 420//35 419//35 399//35 +f 395//36 396//36 418//36 +f 399//30 419//30 418//30 +f 425//32 439//32 438//32 +f 429//29 437//29 436//29 +f 427//31 433//31 440//31 +f 440//33 439//33 425//33 +f 429//34 430//34 438//34 +f 436//35 435//35 431//35 +f 427//36 428//36 434//36 +f 431//30 435//30 434//30 +f 441//32 455//32 454//32 +f 445//29 453//29 452//29 +f 443//31 449//31 456//31 +f 456//33 455//33 441//33 +f 445//34 446//34 454//34 +f 452//35 451//35 447//35 +f 443//36 444//36 450//36 +f 447//30 451//30 450//30 +f 459//27 458//27 457//27 +f 457//27 472//27 459//27 +f 472//27 471//27 459//27 +f 471//27 470//27 469//27 +f 469//27 468//27 467//27 +f 467//27 466//27 463//27 +f 466//27 465//27 463//27 +f 465//27 464//27 463//27 +f 463//27 462//27 461//27 +f 461//27 460//27 463//27 +f 460//27 459//27 463//27 +f 471//27 469//27 459//27 +f 469//27 467//27 459//27 +f 490//28 489//28 493//28 +f 489//28 491//28 493//28 +f 491//28 492//28 493//28 +f 493//28 494//28 495//28 +f 495//28 496//28 493//28 +f 496//28 497//28 493//28 +f 497//28 498//28 501//28 +f 498//28 499//28 501//28 +f 499//28 500//28 501//28 +f 501//28 502//28 503//28 +f 503//28 504//28 501//28 +f 504//28 490//28 501//28 +f 490//28 493//28 497//28 +f 507//27 508//27 506//27 +f 508//32 512//32 511//32 +f 505//30 510//30 509//30 +f 507//31 509//31 512//31 +f 506//29 511//29 510//29 +f 515//27 516//27 514//27 +f 1402//30 1160//30 525//30 +f 525//27 1160//27 1159//27 +f 519//31 525//31 532//31 +f 517//37 519//37 522//37 +f 1400//29 1399//29 513//29 +f 523//28 530//28 529//28 +f 529//31 530//31 527//31 +f 526//30 529//30 528//30 +f 516//32 527//32 530//32 +f 515//27 528//27 527//27 +f 517//31 518//31 523//31 +f 526//30 515//30 513//30 +f 513//30 519//30 517//30 +f 522//32 514//32 518//32 +f 514//32 516//32 523//32 +f 565//28 566//28 567//28 +f 567//28 568//28 565//28 +f 568//28 569//28 565//28 +f 569//28 570//28 573//28 +f 570//28 571//28 573//28 +f 571//28 572//28 573//28 +f 573//28 574//28 575//28 +f 575//28 576//28 577//28 +f 577//28 578//28 579//28 +f 579//28 580//28 565//28 +f 573//28 575//28 565//28 +f 575//28 577//28 565//28 +f 577//28 579//28 565//28 +f 592//27 591//27 604//27 +f 591//27 590//27 604//27 +f 590//27 605//27 604//27 +f 604//27 603//27 602//27 +f 602//27 601//27 600//27 +f 600//27 599//27 598//27 +f 598//27 597//27 600//27 +f 597//27 596//27 600//27 +f 596//27 595//27 594//27 +f 594//27 593//27 592//27 +f 604//27 602//27 600//27 +f 596//27 594//27 600//27 +f 594//27 592//27 600//27 +f 389//28 388//28 585//28 +f 387//28 586//28 585//28 +f 387//28 386//28 587//28 +f 385//28 588//28 587//28 +f 384//28 589//28 588//28 +f 392//28 581//28 589//28 +f 391//28 582//28 581//28 +f 390//28 583//28 582//28 +f 607//27 608//27 381//27 +f 606//27 607//27 383//27 +f 614//27 606//27 382//27 +f 613//27 614//27 375//27 +f 612//27 613//27 376//27 +f 378//27 611//27 612//27 +f 610//27 611//27 378//27 +f 380//27 609//27 610//27 +f 390//33 381//33 608//33 +f 609//33 380//33 389//33 +f 617//27 616//27 615//27 +f 615//27 630//27 617//27 +f 630//27 629//27 617//27 +f 629//27 628//27 627//27 +f 627//27 626//27 625//27 +f 625//27 624//27 621//27 +f 624//27 623//27 621//27 +f 623//27 622//27 621//27 +f 621//27 620//27 619//27 +f 619//27 618//27 621//27 +f 618//27 617//27 621//27 +f 629//27 627//27 617//27 +f 627//27 625//27 617//27 +f 632//28 631//28 635//28 +f 631//28 633//28 635//28 +f 633//28 634//28 635//28 +f 635//28 636//28 637//28 +f 637//28 638//28 639//28 +f 639//28 640//28 643//28 +f 640//28 641//28 643//28 +f 641//28 642//28 643//28 +f 643//28 644//28 645//28 +f 645//28 646//28 643//28 +f 646//28 632//28 643//28 +f 635//28 637//28 632//28 +f 637//28 639//28 632//28 +f 665//28 666//28 667//28 +f 667//28 668//28 665//28 +f 668//28 669//28 665//28 +f 669//28 670//28 673//28 +f 670//28 671//28 673//28 +f 671//28 672//28 673//28 +f 673//28 674//28 675//28 +f 675//28 676//28 677//28 +f 677//28 678//28 679//28 +f 679//28 680//28 665//28 +f 673//28 675//28 665//28 +f 675//28 677//28 665//28 +f 677//28 679//28 665//28 +f 692//27 691//27 704//27 +f 691//27 690//27 704//27 +f 690//27 705//27 704//27 +f 704//27 703//27 702//27 +f 702//27 701//27 700//27 +f 700//27 699//27 698//27 +f 698//27 697//27 700//27 +f 697//27 696//27 700//27 +f 696//27 695//27 694//27 +f 694//27 693//27 692//27 +f 704//27 702//27 700//27 +f 696//27 694//27 700//27 +f 694//27 692//27 700//27 +f 661//28 660//28 685//28 +f 659//28 686//28 685//28 +f 659//28 658//28 687//28 +f 657//28 688//28 687//28 +f 656//28 689//28 688//28 +f 664//28 681//28 689//28 +f 663//28 682//28 681//28 +f 662//28 683//28 682//28 +f 707//27 708//27 653//27 +f 706//27 707//27 655//27 +f 714//27 706//27 654//27 +f 713//27 714//27 647//27 +f 712//27 713//27 648//27 +f 650//27 711//27 712//27 +f 710//27 711//27 650//27 +f 652//27 709//27 710//27 +f 662//33 653//33 708//33 +f 709//33 652//33 661//33 +f 717//27 716//27 715//27 +f 715//27 730//27 717//27 +f 730//27 729//27 717//27 +f 729//27 728//27 727//27 +f 727//27 726//27 725//27 +f 725//27 724//27 721//27 +f 724//27 723//27 721//27 +f 723//27 722//27 721//27 +f 721//27 720//27 719//27 +f 719//27 718//27 721//27 +f 718//27 717//27 721//27 +f 729//27 727//27 717//27 +f 727//27 725//27 717//27 +f 732//28 731//28 735//28 +f 731//28 733//28 735//28 +f 733//28 734//28 735//28 +f 735//28 736//28 737//28 +f 737//28 738//28 739//28 +f 739//28 740//28 743//28 +f 740//28 741//28 743//28 +f 741//28 742//28 743//28 +f 743//28 744//28 745//28 +f 745//28 746//28 743//28 +f 746//28 732//28 743//28 +f 735//28 737//28 732//28 +f 737//28 739//28 732//28 +f 765//28 766//28 767//28 +f 767//28 768//28 765//28 +f 768//28 769//28 765//28 +f 769//28 770//28 773//28 +f 770//28 771//28 773//28 +f 771//28 772//28 773//28 +f 773//28 774//28 775//28 +f 775//28 776//28 777//28 +f 777//28 778//28 779//28 +f 779//28 780//28 765//28 +f 773//28 775//28 765//28 +f 775//28 777//28 765//28 +f 777//28 779//28 765//28 +f 792//27 791//27 804//27 +f 791//27 790//27 804//27 +f 790//27 805//27 804//27 +f 804//27 803//27 802//27 +f 802//27 801//27 800//27 +f 800//27 799//27 798//27 +f 798//27 797//27 800//27 +f 797//27 796//27 800//27 +f 796//27 795//27 794//27 +f 794//27 793//27 792//27 +f 804//27 802//27 800//27 +f 796//27 794//27 800//27 +f 794//27 792//27 800//27 +f 761//28 760//28 785//28 +f 759//28 786//28 785//28 +f 759//28 758//28 787//28 +f 757//28 788//28 787//28 +f 756//28 789//28 788//28 +f 764//28 781//28 789//28 +f 763//28 782//28 781//28 +f 762//28 783//28 782//28 +f 807//27 808//27 753//27 +f 806//27 807//27 755//27 +f 814//27 806//27 754//27 +f 813//27 814//27 747//27 +f 812//27 813//27 748//27 +f 750//27 811//27 812//27 +f 810//27 811//27 750//27 +f 752//27 809//27 810//27 +f 762//33 753//33 808//33 +f 809//33 752//33 761//33 +f 817//27 816//27 815//27 +f 815//27 830//27 817//27 +f 830//27 829//27 817//27 +f 829//27 828//27 827//27 +f 827//27 826//27 825//27 +f 825//27 824//27 821//27 +f 824//27 823//27 821//27 +f 823//27 822//27 821//27 +f 821//27 820//27 819//27 +f 819//27 818//27 821//27 +f 818//27 817//27 821//27 +f 829//27 827//27 817//27 +f 827//27 825//27 817//27 +f 832//28 831//28 835//28 +f 831//28 833//28 835//28 +f 833//28 834//28 835//28 +f 835//28 836//28 837//28 +f 837//28 838//28 839//28 +f 839//28 840//28 843//28 +f 840//28 841//28 843//28 +f 841//28 842//28 843//28 +f 843//28 844//28 845//28 +f 845//28 846//28 843//28 +f 846//28 832//28 843//28 +f 835//28 837//28 832//28 +f 837//28 839//28 832//28 +f 865//28 866//28 867//28 +f 867//28 868//28 865//28 +f 868//28 869//28 865//28 +f 869//28 870//28 873//28 +f 870//28 871//28 873//28 +f 871//28 872//28 873//28 +f 873//28 874//28 875//28 +f 875//28 876//28 877//28 +f 877//28 878//28 879//28 +f 879//28 880//28 865//28 +f 873//28 875//28 865//28 +f 875//28 877//28 865//28 +f 877//28 879//28 865//28 +f 892//27 891//27 904//27 +f 891//27 890//27 904//27 +f 890//27 905//27 904//27 +f 904//27 903//27 902//27 +f 902//27 901//27 900//27 +f 900//27 899//27 898//27 +f 898//27 897//27 900//27 +f 897//27 896//27 900//27 +f 896//27 895//27 894//27 +f 894//27 893//27 892//27 +f 904//27 902//27 900//27 +f 896//27 894//27 900//27 +f 894//27 892//27 900//27 +f 861//28 860//28 885//28 +f 859//28 886//28 885//28 +f 859//28 858//28 887//28 +f 857//28 888//28 887//28 +f 856//28 889//28 888//28 +f 864//28 881//28 889//28 +f 863//28 882//28 881//28 +f 862//28 883//28 882//28 +f 907//27 908//27 853//27 +f 906//27 907//27 855//27 +f 914//27 906//27 854//27 +f 913//27 914//27 847//27 +f 912//27 913//27 848//27 +f 850//27 911//27 912//27 +f 910//27 911//27 850//27 +f 852//27 909//27 910//27 +f 862//33 853//33 908//33 +f 909//33 852//33 861//33 +f 980//29 982//29 981//29 +f 985//31 986//31 984//31 +f 980//32 984//32 986//32 +f 979//27 983//27 984//27 +f 981//30 985//30 983//30 +f 982//28 986//28 985//28 +f 996//30 990//30 989//30 +f 990//31 994//31 993//31 +f 994//32 997//32 998//32 +f 991//27 1006//27 1003//27 +f 993//27 998//27 995//27 +f 990//28 996//28 997//28 +f 988//29 996//29 995//29 +f 991//29 998//29 997//29 +f 987//29 995//29 998//29 +f 992//29 997//29 996//29 +f 1002//28 1010//28 1007//28 +f 987//30 1003//30 1004//30 +f 988//28 1004//28 1005//28 +f 992//32 1005//32 1006//32 +f 1000//29 1004//29 1003//29 +f 1002//29 1006//29 1005//29 +f 999//29 1003//29 1006//29 +f 1001//29 1005//29 1004//29 +f 1009//29 1008//29 1007//29 +f 999//32 1007//32 1008//32 +f 1000//27 1008//27 1009//27 +f 1001//30 1009//30 1010//30 +f 1028//29 1034//29 1033//29 +f 1018//29 1017//29 1019//29 +f 1019//29 1020//29 1018//29 +f 1020//29 1021//29 1018//29 +f 1026//29 1032//29 1031//29 +f 1024//29 1023//29 1029//29 +f 1038//29 1037//29 1035//29 +f 1042//29 1041//29 1039//29 +f 1046//29 1045//29 1043//29 +f 1050//29 1049//29 1047//29 +f 1060//30 1054//30 1053//30 +f 1054//31 1058//31 1057//31 +f 1058//32 1061//32 1062//32 +f 1055//27 1070//27 1067//27 +f 1057//27 1062//27 1059//27 +f 1054//28 1060//28 1061//28 +f 1052//29 1060//29 1059//29 +f 1055//29 1062//29 1061//29 +f 1051//29 1059//29 1062//29 +f 1056//29 1061//29 1060//29 +f 1066//28 1074//28 1071//28 +f 1051//30 1067//30 1068//30 +f 1052//28 1068//28 1069//28 +f 1056//32 1069//32 1070//32 +f 1064//29 1068//29 1067//29 +f 1066//29 1070//29 1069//29 +f 1063//29 1067//29 1070//29 +f 1065//29 1069//29 1068//29 +f 1073//29 1072//29 1071//29 +f 1063//32 1071//32 1072//32 +f 1064//27 1072//27 1073//27 +f 1065//30 1073//30 1074//30 +f 1092//29 1098//29 1097//29 +f 1082//29 1081//29 1083//29 +f 1083//29 1084//29 1082//29 +f 1084//29 1085//29 1082//29 +f 1090//29 1096//29 1095//29 +f 1088//29 1087//29 1093//29 +f 1102//29 1101//29 1099//29 +f 1106//29 1105//29 1103//29 +f 1110//29 1109//29 1107//29 +f 1114//29 1113//29 1111//29 +f 1122//32 1120//32 1116//32 +f 1119//30 1121//30 1117//30 +f 1121//31 1122//31 1118//31 +f 1120//29 1119//29 1115//29 +f 1160//31 1402//31 1401//31 +f 1156//32 1158//32 1198//32 +f 1158//32 1162//32 1197//32 +f 1161//31 1162//31 1158//31 +f 1157//30 1155//30 1195//30 +f 1195//30 1196//30 1157//30 +f 1198//29 1195//29 1155//29 +f 1198//38 1197//38 1196//38 +f 1196//28 1197//28 1162//28 +f 522//32 532//32 1400//32 +f 1199//30 1403//30 1406//30 +f 1449//30 521//30 524//30 +f 532//32 1159//32 1401//32 +f 1393//27 1392//27 1391//27 +f 1391//27 1398//27 1397//27 +f 1397//27 1396//27 1395//27 +f 1395//27 1394//27 1393//27 +f 1393//27 1391//27 1397//27 +f 1199//28 1399//28 1400//28 +f 1200//28 1400//28 1401//28 +f 1201//28 1401//28 1402//28 +f 1202//28 1402//28 1399//28 +f 1404//28 1405//28 1406//28 +f 1201//32 1405//32 1404//32 +f 1202//31 1406//31 1405//31 +f 1200//29 1404//29 1403//29 +f 1421//28 1422//28 1419//28 +f 1413//28 1414//28 1411//28 +f 1410//32 1414//32 1413//32 +f 1407//30 1412//30 1411//30 +f 1409//31 1411//31 1414//31 +f 1408//29 1413//29 1412//29 +f 1418//32 1422//32 1421//32 +f 1415//30 1420//30 1419//30 +f 1417//31 1419//31 1422//31 +f 1416//29 1421//29 1420//29 +f 1429//28 1430//28 1427//28 +f 1426//32 1430//32 1429//32 +f 1423//30 1428//30 1427//30 +f 1425//31 1427//31 1430//31 +f 1424//29 1429//29 1428//29 +f 1445//28 1446//28 1443//28 +f 1437//28 1438//28 1435//28 +f 1434//32 1438//32 1437//32 +f 1431//30 1436//30 1435//30 +f 1433//31 1435//31 1438//31 +f 1432//29 1437//29 1436//29 +f 1442//32 1446//32 1445//32 +f 1439//30 1444//30 1443//30 +f 1441//31 1443//31 1446//31 +f 1440//29 1445//29 1444//29 +f 1399//30 525//30 519//30 +f 1457//32 1453//32 1454//32 +f 1458//29 1454//29 1451//29 +f 1455//30 1451//30 1452//30 +f 1456//31 1452//31 1453//31 +f 1448//28 1452//28 1451//28 +f 1450//28 1454//28 1453//28 +f 1447//28 1451//28 1454//28 +f 1449//28 1453//28 1452//28 +f 531//27 1455//27 1456//27 +f 521//27 1457//27 1458//27 +f 524//27 1458//27 1455//27 +f 520//27 1456//27 1457//27 +f 524//31 531//31 1447//31 +f 1447//32 531//32 520//32 +f 520//29 521//29 1449//29 +f 1467//31 1471//31 1473//31 +f 1469//32 1473//32 1474//32 +f 1459//31 1463//31 1465//31 +f 1461//32 1465//32 1466//32 +f 1462//29 1466//29 1464//29 +f 1460//30 1464//30 1463//30 +f 1470//29 1474//29 1472//29 +f 1468//30 1472//30 1471//30 +f 1483//31 1487//31 1489//31 +f 1485//32 1489//32 1490//32 +f 1475//31 1479//31 1481//31 +f 1477//32 1481//32 1482//32 +f 1478//29 1482//29 1480//29 +f 1476//30 1480//30 1479//30 +f 1486//29 1490//29 1488//29 +f 1484//30 1488//30 1487//30 +f 1499//31 1500//31 1492//31 +f 1496//29 1502//29 1501//29 +f 1495//30 1501//30 1499//30 +f 1494//32 1504//32 1506//32 +f 1502//32 1496//32 1492//32 +f 1494//28 1500//28 1499//28 +f 1497//28 1501//28 1502//28 +f 1493//28 1499//28 1501//28 +f 1498//28 1502//28 1500//28 +f 1505//28 1506//28 1504//28 +f 1498//29 1506//29 1505//29 +f 1497//30 1505//30 1503//30 +f 1493//31 1503//31 1504//31 +f 1541//31 1542//31 1540//31 +f 1545//29 1546//29 1543//29 +f 1541//28 1543//28 1546//28 +f 1540//27 1545//27 1544//27 +f 1542//32 1546//32 1545//32 +f 1539//30 1544//30 1543//30 +f 1613//27 1612//27 1611//27 +f 1611//27 1622//27 1613//27 +f 1622//27 1621//27 1613//27 +f 1621//27 1620//27 1619//27 +f 1619//27 1618//27 1617//27 +f 1617//27 1616//27 1615//27 +f 1615//27 1614//27 1617//27 +f 1614//27 1613//27 1617//27 +f 1621//27 1619//27 1613//27 +f 1624//28 1623//28 1625//28 +f 1625//28 1626//28 1624//28 +f 1626//28 1627//28 1624//28 +f 1627//28 1628//28 1629//28 +f 1629//28 1630//28 1627//28 +f 1630//28 1631//28 1627//28 +f 1631//28 1632//28 1624//28 +f 1632//28 1633//28 1624//28 +f 1633//28 1634//28 1624//28 +f 1637//27 1636//27 1635//27 +f 1635//27 1646//27 1637//27 +f 1646//27 1645//27 1637//27 +f 1645//27 1644//27 1643//27 +f 1643//27 1642//27 1641//27 +f 1641//27 1640//27 1639//27 +f 1639//27 1638//27 1641//27 +f 1638//27 1637//27 1641//27 +f 1645//27 1643//27 1637//27 +f 1648//28 1647//28 1649//28 +f 1649//28 1650//28 1648//28 +f 1650//28 1651//28 1648//28 +f 1651//28 1652//28 1653//28 +f 1653//28 1654//28 1655//28 +f 1655//28 1656//28 1657//28 +f 1657//28 1658//28 1655//28 +f 1658//28 1648//28 1655//28 +f 1651//28 1653//28 1648//28 +f 1667//31 1671//31 1673//31 +f 1669//32 1673//32 1674//32 +f 1659//31 1663//31 1665//31 +f 1661//32 1665//32 1666//32 +f 1662//29 1666//29 1664//29 +f 1660//30 1664//30 1663//30 +f 1670//29 1674//29 1672//29 +f 1668//30 1672//30 1671//30 +f 1683//31 1687//31 1689//31 +f 1685//32 1689//32 1690//32 +f 1675//31 1679//31 1681//31 +f 1677//32 1681//32 1682//32 +f 1678//29 1682//29 1680//29 +f 1676//30 1680//30 1679//30 +f 1686//29 1690//29 1688//29 +f 1684//30 1688//30 1687//30 +f 1693//27 1694//27 1692//27 +f 1697//29 2049//29 2048//29 +f 1693//31 2043//31 2046//31 +f 1692//29 2045//29 2044//29 +f 1694//32 2046//32 2045//32 +f 1691//30 2044//30 2043//30 +f 1711//31 1723//31 1724//31 +f 1713//31 1725//31 1723//31 +f 1713//31 1714//31 1726//31 +f 1715//31 1727//31 1726//31 +f 1716//31 1728//31 1727//31 +f 1716//31 1717//31 1729//31 +f 1718//31 1730//31 1729//31 +f 1719//31 1731//31 1730//31 +f 1719//31 1720//31 1732//31 +f 1721//31 1733//31 1732//31 +f 1721//31 1722//31 1734//31 +f 1712//31 1724//31 1734//31 +f 1749//29 1785//29 1783//29 +f 1747//29 1748//29 1783//29 +f 1758//29 1747//29 1784//29 +f 1758//29 1794//29 1793//29 +f 1756//29 1757//29 1793//29 +f 1756//29 1792//29 1791//29 +f 1755//29 1791//29 1790//29 +f 1753//29 1754//29 1790//29 +f 1753//29 1789//29 1788//29 +f 1752//29 1788//29 1787//29 +f 1750//29 1751//29 1787//29 +f 1750//29 1786//29 1785//29 +f 1833//29 1831//29 1832//29 +f 1832//29 1842//29 1833//29 +f 1842//29 1841//29 1833//29 +f 1841//29 1840//29 1839//29 +f 1839//29 1838//29 1837//29 +f 1837//29 1836//29 1835//29 +f 1835//29 1834//29 1837//29 +f 1834//29 1833//29 1837//29 +f 1841//29 1839//29 1833//29 +f 1809//31 1807//31 1808//31 +f 1808//31 1818//31 1817//31 +f 1817//31 1816//31 1813//31 +f 1816//31 1815//31 1813//31 +f 1815//31 1814//31 1813//31 +f 1813//31 1812//31 1811//31 +f 1811//31 1810//31 1813//31 +f 1810//31 1809//31 1813//31 +f 1809//31 1808//31 1813//31 +f 1850//32 1848//32 1844//32 +f 1847//30 1849//30 1845//30 +f 1849//31 1850//31 1846//31 +f 1848//29 1847//29 1843//29 +f 1847//28 1848//28 1850//28 +f 1858//32 1856//32 1852//32 +f 1855//30 1857//30 1853//30 +f 1857//31 1858//31 1854//31 +f 1856//29 1855//29 1851//29 +f 1855//28 1856//28 1858//28 +f 1935//28 1936//28 1933//28 +f 1931//31 1933//31 1936//31 +f 1930//29 1935//29 1934//29 +f 1932//32 1936//32 1935//32 +f 1929//30 1934//30 1933//30 +f 1695//28 2043//28 2044//28 +f 1696//28 2044//28 2045//28 +f 1697//28 2045//28 2046//28 +f 1698//28 2046//28 2043//28 +f 2049//28 2050//28 2047//28 +f 1698//32 2050//32 2049//32 +f 1696//30 2048//30 2047//30 +f 1695//31 2047//31 2050//31 +f 2051//27 2052//27 2053//27 +f 2055//27 2057//27 2058//27 +f 2062//28 2061//28 2059//28 +f 2055//29 2059//29 2061//29 +f 2057//30 2061//30 2062//30 +f 2058//31 2062//31 2060//31 +f 2056//32 2060//32 2059//32 +f 2063//27 2065//27 2066//27 +f 2070//28 2069//28 2067//28 +f 2063//29 2067//29 2069//29 +f 2065//30 2069//30 2070//30 +f 2066//31 2070//31 2068//31 +f 2064//32 2068//32 2067//32 +f 2071//27 2073//27 2074//27 +f 2078//28 2077//28 2075//28 +f 2071//29 2075//29 2077//29 +f 2073//30 2077//30 2078//30 +f 2074//31 2078//31 2076//31 +f 2072//32 2076//32 2075//32 +f 2079//27 2081//27 2082//27 +f 2086//28 2085//28 2083//28 +f 2079//29 2083//29 2085//29 +f 2081//30 2085//30 2086//30 +f 2082//31 2086//31 2084//31 +f 2080//32 2084//32 2083//32 +f 2089//32 2090//32 2054//32 +f 2087//30 2088//30 2052//30 +f 2090//28 2089//28 2088//28 +f 2091//27 2092//27 2093//27 +f 2097//30 2098//30 2094//30 +f 2095//32 2096//32 2092//32 +f 2098//28 2097//28 2096//28 +f 2099//27 2100//27 2101//27 +f 2105//31 2106//31 2102//31 +f 2103//29 2104//29 2100//29 +f 2106//28 2105//28 2104//28 +f 2107//27 2108//27 2109//27 +f 2113//29 2114//29 2110//29 +f 2111//31 2112//31 2108//31 +f 2114//28 2113//28 2112//28 +f 2116//31 2118//31 2117//31 +f 2117//32 2121//32 2119//32 +f 2116//30 2120//30 2122//30 +f 2119//29 2121//29 2122//29 +f 2123//27 2125//27 2126//27 +f 2130//28 2129//28 2127//28 +f 2123//29 2127//29 2129//29 +f 2125//30 2129//30 2130//30 +f 2126//31 2130//31 2128//31 +f 2124//32 2128//32 2127//32 +f 2131//27 2133//27 2134//27 +f 2138//28 2137//28 2135//28 +f 2131//29 2135//29 2137//29 +f 2133//30 2137//30 2138//30 +f 2134//31 2138//31 2136//31 +f 2132//32 2136//32 2135//32 +f 2139//27 2141//27 2142//27 +f 2146//28 2145//28 2143//28 +f 2139//29 2143//29 2145//29 +f 2141//30 2145//30 2146//30 +f 2142//31 2146//31 2144//31 +f 2140//32 2144//32 2143//32 +f 2147//27 2149//27 2150//27 +f 2154//28 2153//28 2151//28 +f 2147//29 2151//29 2153//29 +f 2149//30 2153//30 2154//30 +f 2150//31 2154//31 2152//31 +f 2148//32 2152//32 2151//32 +f 2156//31 2158//31 2157//31 +f 2157//32 2161//32 2159//32 +f 2156//30 2160//30 2162//30 +f 2159//29 2161//29 2162//29 +f 2164//31 2166//31 2165//31 +f 2165//32 2169//32 2167//32 +f 2164//30 2168//30 2170//30 +f 2167//29 2169//29 2170//29 +f 2172//31 2174//31 2173//31 +f 2173//32 2177//32 2175//32 +f 2172//30 2176//30 2178//30 +f 2175//29 2177//29 2178//29 +f 2179//27 2180//27 2181//27 +f 2185//32 2186//32 2182//32 +f 2183//30 2184//30 2180//30 +f 2186//28 2185//28 2184//28 +f 2187//27 2188//27 2189//27 +f 2193//30 2194//30 2190//30 +f 2191//32 2192//32 2188//32 +f 2194//28 2193//28 2192//28 +f 2195//27 2196//27 2197//27 +f 2201//31 2202//31 2198//31 +f 2199//29 2200//29 2196//29 +f 2202//28 2201//28 2200//28 +f 2203//27 2204//27 2205//27 +f 2209//29 2210//29 2206//29 +f 2207//31 2208//31 2204//31 +f 2210//28 2209//28 2208//28 +f 2213//27 2214//27 2212//27 +f 2217//28 2218//28 2215//28 +f 2211//30 2216//30 2215//30 +f 2213//31 2215//31 2218//31 +f 2212//29 2217//29 2216//29 +f 2214//32 2218//32 2217//32 +f 2221//27 2222//27 2220//27 +f 2225//28 2226//28 2223//28 +f 2219//30 2224//30 2223//30 +f 2221//31 2223//31 2226//31 +f 2220//29 2225//29 2224//29 +f 2222//32 2226//32 2225//32 +f 2229//27 2230//27 2228//27 +f 2233//28 2234//28 2231//28 +f 2227//30 2232//30 2231//30 +f 2229//31 2231//31 2234//31 +f 2228//29 2233//29 2232//29 +f 2230//32 2234//32 2233//32 +f 2237//27 2238//27 2236//27 +f 2303//28 2304//28 2305//28 +f 2305//28 2306//28 2307//28 +f 2307//28 2308//28 2309//28 +f 2309//28 2310//28 2307//28 +f 2310//28 2311//28 2307//28 +f 2311//28 2312//28 2313//28 +f 2313//28 2314//28 2303//28 +f 2303//28 2305//28 2307//28 +f 2311//28 2313//28 2307//28 +f 2238//32 2242//32 2241//32 +f 2235//30 2240//30 2239//30 +f 2237//31 2239//31 2242//31 +f 2236//29 2241//29 2240//29 +f 2245//27 2244//27 2243//27 +f 2243//27 2254//27 2245//27 +f 2254//27 2253//27 2245//27 +f 2253//27 2252//27 2251//27 +f 2251//27 2250//27 2249//27 +f 2249//27 2248//27 2247//27 +f 2247//27 2246//27 2249//27 +f 2246//27 2245//27 2249//27 +f 2253//27 2251//27 2245//27 +f 2256//28 2255//28 2257//28 +f 2257//28 2258//28 2256//28 +f 2258//28 2259//28 2256//28 +f 2259//28 2260//28 2261//28 +f 2261//28 2262//28 2263//28 +f 2263//28 2264//28 2265//28 +f 2265//28 2266//28 2263//28 +f 2266//28 2256//28 2263//28 +f 2259//28 2261//28 2263//28 +f 2267//28 2285//28 2287//28 +f 2268//28 2286//28 2285//28 +f 2302//27 2300//27 2271//27 +f 2300//27 2301//27 2270//27 +f 2269//39 2287//39 2302//39 +f 2301//40 2286//40 2268//40 +f 2273//28 2274//28 2275//28 +f 2275//28 2276//28 2277//28 +f 2277//28 2278//28 2279//28 +f 2279//28 2280//28 2277//28 +f 2280//28 2281//28 2277//28 +f 2281//28 2282//28 2283//28 +f 2283//28 2284//28 2273//28 +f 2273//28 2275//28 2277//28 +f 2281//28 2283//28 2277//28 +f 2290//27 2289//27 2298//27 +f 2289//27 2288//27 2298//27 +f 2288//27 2299//27 2298//27 +f 2298//27 2297//27 2296//27 +f 2296//27 2295//27 2294//27 +f 2294//27 2293//27 2292//27 +f 2292//27 2291//27 2290//27 +f 2298//27 2296//27 2294//27 +f 2294//27 2292//27 2298//27 +f 2317//27 2315//27 2325//27 +f 2315//27 2316//27 2325//27 +f 2316//27 2326//27 2325//27 +f 2325//27 2324//27 2323//27 +f 2323//27 2322//27 2321//27 +f 2321//27 2320//27 2319//27 +f 2319//27 2318//27 2317//27 +f 2325//27 2323//27 2321//27 +f 2321//27 2319//27 2325//27 +f 2459//28 2460//28 2461//28 +f 2461//28 2462//28 2463//28 +f 2463//28 2464//28 2465//28 +f 2465//28 2466//28 2463//28 +f 2466//28 2467//28 2463//28 +f 2467//28 2468//28 2469//28 +f 2469//28 2470//28 2459//28 +f 2459//28 2461//28 2463//28 +f 2467//28 2469//28 2463//28 +f 2401//27 2400//27 2399//27 +f 2399//27 2410//27 2401//27 +f 2410//27 2409//27 2401//27 +f 2409//27 2408//27 2407//27 +f 2407//27 2406//27 2405//27 +f 2405//27 2404//27 2403//27 +f 2403//27 2402//27 2405//27 +f 2402//27 2401//27 2405//27 +f 2409//27 2407//27 2401//27 +f 2412//28 2411//28 2413//28 +f 2413//28 2414//28 2412//28 +f 2414//28 2415//28 2412//28 +f 2415//28 2416//28 2417//28 +f 2417//28 2418//28 2419//28 +f 2419//28 2420//28 2421//28 +f 2421//28 2422//28 2419//28 +f 2422//28 2412//28 2419//28 +f 2415//28 2417//28 2419//28 +f 2423//28 2441//28 2443//28 +f 2424//28 2442//28 2441//28 +f 2458//27 2456//27 2427//27 +f 2456//27 2457//27 2426//27 +f 2425//39 2443//39 2458//39 +f 2457//40 2442//40 2424//40 +f 2429//28 2430//28 2431//28 +f 2431//28 2432//28 2433//28 +f 2433//28 2434//28 2435//28 +f 2435//28 2436//28 2433//28 +f 2436//28 2437//28 2433//28 +f 2437//28 2438//28 2439//28 +f 2439//28 2440//28 2429//28 +f 2429//28 2431//28 2433//28 +f 2437//28 2439//28 2433//28 +f 2446//27 2445//27 2454//27 +f 2445//27 2444//27 2454//27 +f 2444//27 2455//27 2454//27 +f 2454//27 2453//27 2452//27 +f 2452//27 2451//27 2450//27 +f 2450//27 2449//27 2448//27 +f 2448//27 2447//27 2446//27 +f 2454//27 2452//27 2450//27 +f 2450//27 2448//27 2454//27 +f 2473//27 2471//27 2481//27 +f 2471//27 2472//27 2481//27 +f 2472//27 2482//27 2481//27 +f 2481//27 2480//27 2479//27 +f 2479//27 2478//27 2477//27 +f 2477//27 2476//27 2475//27 +f 2475//27 2474//27 2473//27 +f 2481//27 2479//27 2477//27 +f 2477//27 2475//27 2481//27 +f 2615//28 2616//28 2617//28 +f 2617//28 2618//28 2619//28 +f 2619//28 2620//28 2621//28 +f 2621//28 2622//28 2619//28 +f 2622//28 2623//28 2619//28 +f 2623//28 2624//28 2625//28 +f 2625//28 2626//28 2615//28 +f 2615//28 2617//28 2619//28 +f 2623//28 2625//28 2619//28 +f 2557//27 2556//27 2555//27 +f 2555//27 2566//27 2557//27 +f 2566//27 2565//27 2557//27 +f 2565//27 2564//27 2563//27 +f 2563//27 2562//27 2561//27 +f 2561//27 2560//27 2559//27 +f 2559//27 2558//27 2561//27 +f 2558//27 2557//27 2561//27 +f 2565//27 2563//27 2557//27 +f 2568//28 2567//28 2569//28 +f 2569//28 2570//28 2568//28 +f 2570//28 2571//28 2568//28 +f 2571//28 2572//28 2573//28 +f 2573//28 2574//28 2575//28 +f 2575//28 2576//28 2577//28 +f 2577//28 2578//28 2575//28 +f 2578//28 2568//28 2575//28 +f 2571//28 2573//28 2575//28 +f 2579//28 2597//28 2599//28 +f 2580//28 2598//28 2597//28 +f 2614//27 2612//27 2583//27 +f 2612//27 2613//27 2582//27 +f 2581//39 2599//39 2614//39 +f 2613//40 2598//40 2580//40 +f 2585//28 2586//28 2587//28 +f 2587//28 2588//28 2589//28 +f 2589//28 2590//28 2591//28 +f 2591//28 2592//28 2589//28 +f 2592//28 2593//28 2589//28 +f 2593//28 2594//28 2595//28 +f 2595//28 2596//28 2585//28 +f 2585//28 2587//28 2589//28 +f 2593//28 2595//28 2589//28 +f 2602//27 2601//27 2610//27 +f 2601//27 2600//27 2610//27 +f 2600//27 2611//27 2610//27 +f 2610//27 2609//27 2608//27 +f 2608//27 2607//27 2606//27 +f 2606//27 2605//27 2604//27 +f 2604//27 2603//27 2602//27 +f 2610//27 2608//27 2606//27 +f 2606//27 2604//27 2610//27 +f 2629//27 2627//27 2637//27 +f 2627//27 2628//27 2637//27 +f 2628//27 2638//27 2637//27 +f 2637//27 2636//27 2635//27 +f 2635//27 2634//27 2633//27 +f 2633//27 2632//27 2631//27 +f 2631//27 2630//27 2629//27 +f 2637//27 2635//27 2633//27 +f 2633//27 2631//27 2637//27 +f 2771//28 2772//28 2773//28 +f 2773//28 2774//28 2775//28 +f 2775//28 2776//28 2777//28 +f 2777//28 2778//28 2775//28 +f 2778//28 2779//28 2775//28 +f 2779//28 2780//28 2781//28 +f 2781//28 2782//28 2771//28 +f 2771//28 2773//28 2775//28 +f 2779//28 2781//28 2775//28 +f 2713//27 2712//27 2711//27 +f 2711//27 2722//27 2713//27 +f 2722//27 2721//27 2713//27 +f 2721//27 2720//27 2719//27 +f 2719//27 2718//27 2717//27 +f 2717//27 2716//27 2715//27 +f 2715//27 2714//27 2717//27 +f 2714//27 2713//27 2717//27 +f 2721//27 2719//27 2713//27 +f 2724//28 2723//28 2725//28 +f 2725//28 2726//28 2724//28 +f 2726//28 2727//28 2724//28 +f 2727//28 2728//28 2729//28 +f 2729//28 2730//28 2731//28 +f 2731//28 2732//28 2733//28 +f 2733//28 2734//28 2731//28 +f 2734//28 2724//28 2731//28 +f 2727//28 2729//28 2731//28 +f 2735//28 2753//28 2755//28 +f 2736//28 2754//28 2753//28 +f 2770//27 2768//27 2739//27 +f 2768//27 2769//27 2738//27 +f 2737//39 2755//39 2770//39 +f 2769//40 2754//40 2736//40 +f 2741//28 2742//28 2743//28 +f 2743//28 2744//28 2745//28 +f 2745//28 2746//28 2747//28 +f 2747//28 2748//28 2745//28 +f 2748//28 2749//28 2745//28 +f 2749//28 2750//28 2751//28 +f 2751//28 2752//28 2741//28 +f 2741//28 2743//28 2745//28 +f 2749//28 2751//28 2745//28 +f 2758//27 2757//27 2766//27 +f 2757//27 2756//27 2766//27 +f 2756//27 2767//27 2766//27 +f 2766//27 2765//27 2764//27 +f 2764//27 2763//27 2762//27 +f 2762//27 2761//27 2760//27 +f 2760//27 2759//27 2758//27 +f 2766//27 2764//27 2762//27 +f 2762//27 2760//27 2766//27 +f 2785//27 2783//27 2793//27 +f 2783//27 2784//27 2793//27 +f 2784//27 2794//27 2793//27 +f 2793//27 2792//27 2791//27 +f 2791//27 2790//27 2789//27 +f 2789//27 2788//27 2787//27 +f 2787//27 2786//27 2785//27 +f 2793//27 2791//27 2789//27 +f 2789//27 2787//27 2793//27 +f 2965//27 2966//27 2964//27 +f 2969//28 2970//28 2967//28 +f 2963//30 2968//30 2967//30 +f 2965//31 2967//31 2970//31 +f 2964//29 2969//29 2968//29 +f 2966//32 2970//32 2969//32 +f 2973//27 2974//27 2972//27 +f 2977//28 2978//28 2975//28 +f 2974//32 2978//32 2977//32 +f 2971//30 2976//30 2975//30 +f 2973//31 2975//31 2978//31 +f 2972//29 2977//29 2976//29 +f 2981//27 2980//27 2979//27 +f 2979//27 2994//27 2981//27 +f 2994//27 2993//27 2981//27 +f 2993//27 2992//27 2991//27 +f 2991//27 2990//27 2989//27 +f 2989//27 2988//27 2985//27 +f 2988//27 2987//27 2985//27 +f 2987//27 2986//27 2985//27 +f 2985//27 2984//27 2983//27 +f 2983//27 2982//27 2981//27 +f 2993//27 2991//27 2981//27 +f 2991//27 2989//27 2981//27 +f 2985//27 2983//27 2981//27 +f 2996//28 2995//28 2997//28 +f 2997//28 2998//28 2999//28 +f 2999//28 3000//28 3001//28 +f 3001//28 3002//28 3003//28 +f 3003//28 3004//28 3007//28 +f 3004//28 3005//28 3007//28 +f 3005//28 3006//28 3007//28 +f 3007//28 3008//28 3009//28 +f 3009//28 3010//28 3007//28 +f 3010//28 2996//28 3007//28 +f 2996//28 2997//28 2999//28 +f 2999//28 3001//28 2996//28 +f 3001//28 3003//28 2996//28 +f 3013//27 3015//27 3014//27 +f 3015//27 3016//27 3014//27 +f 3014//27 3012//27 3011//27 +f 3017//28 3018//28 3020//28 +f 3018//28 3019//28 3020//28 +f 3020//28 3021//28 3022//28 +f 3015//32 3022//32 3021//32 +f 3012//29 3019//29 3018//29 +f 3014//32 3020//32 3019//32 +f 3011//30 3018//30 3017//30 +f 3016//29 3021//29 3020//29 +f 3013//31 3017//31 3022//31 +s 1 +f 370//41 378//32 371//32 +f 350//42 365//35 349//35 +f 360//31 383//43 359//43 +f 351//29 366//42 350//42 +f 355//32 388//41 354//41 +f 344//43 392//31 343//31 +f 352//44 367//29 351//29 +f 357//33 386//45 356//45 +f 356//45 387//32 355//32 +f 358//46 385//33 357//33 +f 343//31 384//46 358//46 +f 347//30 362//47 346//47 +f 354//41 389//48 353//34 +f 348//49 363//30 347//30 +f 345//36 391//43 344//43 +f 349//35 364//49 348//49 +f 372//45 376//33 373//33 +f 374//46 382//31 360//31 +f 369//34 379//41 370//41 +f 359//43 381//50 361//36 +f 371//32 377//45 372//45 +f 373//33 375//46 374//46 +f 482//51 499//52 498//51 +f 471//33 486//45 470//45 +f 464//42 479//35 463//35 +f 472//46 487//33 471//33 +f 465//29 480//42 464//42 +f 458//43 474//31 457//31 +f 457//31 488//46 472//46 +f 466//44 481//29 465//29 +f 459//36 473//43 458//43 +f 467//34 482//44 466//44 +f 460//47 475//36 459//36 +f 468//41 483//34 467//34 +f 461//30 476//47 460//47 +f 469//32 484//41 468//41 +f 462//49 477//30 461//30 +f 470//45 485//32 469//32 +f 463//35 478//49 462//49 +f 475//53 492//54 491//53 +f 484//55 499//52 483//52 +f 477//56 492//54 476//54 +f 485//57 500//55 484//55 +f 478//58 493//56 477//56 +f 486//59 501//57 485//57 +f 479//60 494//58 478//58 +f 486//59 503//61 502//59 +f 480//62 495//60 479//60 +f 488//63 503//61 487//61 +f 480//62 497//38 496//62 +f 473//64 490//37 474//37 +f 488//63 490//37 504//63 +f 481//38 498//51 497//38 +f 475//53 489//64 473//64 +f 538//34 545//65 537//29 +f 536//35 543//66 535//30 +f 534//36 541//67 533//31 +f 533//31 548//68 540//33 +f 539//32 546//69 538//34 +f 537//29 544//70 536//35 +f 535//30 542//71 534//36 +f 540//33 547//72 539//32 +f 548//68 549//73 556//74 +f 546//69 555//75 554//76 +f 545//65 552//77 544//70 +f 543//66 550//78 542//71 +f 547//72 556//74 555//75 +f 545//65 554//76 553//79 +f 544//70 551//80 543//66 +f 542//71 549//73 541//67 +f 552//77 559//30 551//80 +f 550//78 557//31 549//73 +f 549//73 564//33 556//74 +f 555//75 562//34 554//76 +f 553//79 560//35 552//77 +f 551//80 558//36 550//78 +f 556//74 563//32 555//75 +f 554//76 561//29 553//79 +f 586//30 578//49 577//30 +f 582//44 567//34 566//44 +f 584//81 576//47 575//36 +f 589//42 565//29 580//42 +f 587//49 579//35 578//49 +f 581//29 566//44 565//29 +f 585//47 577//30 576//47 +f 588//35 580//42 579//35 +f 603//49 611//30 602//30 +f 592//34 607//44 591//44 +f 601//47 609//81 600//36 +f 590//29 614//42 605//42 +f 604//35 612//49 603//49 +f 591//44 606//29 590//29 +f 602//30 610//47 601//47 +f 605//42 613//35 604//35 +f 362//47 381//50 390//50 +f 608//82 593//41 568//41 +f 593//41 569//32 568//41 +f 594//32 570//45 569//32 +f 595//45 571//33 570//45 +f 596//33 572//46 571//33 +f 597//46 573//31 572//46 +f 598//31 574//43 573//31 +f 599//43 609//81 584//81 +f 352//44 380//48 368//44 +f 642//41 650//32 643//32 +f 622//42 637//35 621//35 +f 632//31 655//43 631//43 +f 623//29 638//42 622//42 +f 627//32 660//41 626//41 +f 616//43 664//31 615//31 +f 624//44 639//29 623//29 +f 629//33 658//45 628//45 +f 628//45 659//32 627//32 +f 630//46 657//33 629//33 +f 615//31 656//46 630//46 +f 619//30 634//47 618//47 +f 626//41 661//48 625//34 +f 620//49 635//30 619//30 +f 617//36 663//43 616//43 +f 621//35 636//49 620//49 +f 644//45 648//33 645//33 +f 646//46 654//31 632//31 +f 641//34 651//41 642//41 +f 631//43 653//50 633//36 +f 643//32 649//45 644//45 +f 645//33 647//46 646//46 +f 686//30 678//49 677//30 +f 682//44 667//34 666//44 +f 684//81 676//47 675//36 +f 689//42 665//29 680//42 +f 687//49 679//35 678//49 +f 681//29 666//44 665//29 +f 685//47 677//30 676//47 +f 688//35 680//42 679//35 +f 703//49 711//30 702//30 +f 692//34 707//44 691//44 +f 701//47 709//81 700//36 +f 690//29 714//42 705//42 +f 704//35 712//49 703//49 +f 691//44 706//29 690//29 +f 702//30 710//47 701//47 +f 705//42 713//35 704//35 +f 634//47 653//50 662//50 +f 708//82 693//41 668//41 +f 693//41 669//32 668//41 +f 694//32 670//45 669//32 +f 695//45 671//33 670//45 +f 696//33 672//46 671//33 +f 697//46 673//31 672//46 +f 698//31 674//43 673//31 +f 699//43 709//81 684//81 +f 624//44 652//48 640//44 +f 742//41 750//32 743//32 +f 722//42 737//35 721//35 +f 732//31 755//43 731//43 +f 723//29 738//42 722//42 +f 727//32 760//41 726//41 +f 716//43 764//31 715//31 +f 724//44 739//29 723//29 +f 729//33 758//45 728//45 +f 728//45 759//32 727//32 +f 730//46 757//33 729//33 +f 715//31 756//46 730//46 +f 719//30 734//47 718//47 +f 726//41 761//48 725//34 +f 720//49 735//30 719//30 +f 717//36 763//43 716//43 +f 721//35 736//49 720//49 +f 744//45 748//33 745//33 +f 746//46 754//31 732//31 +f 741//34 751//41 742//41 +f 731//43 753//50 733//36 +f 743//32 749//45 744//45 +f 745//33 747//46 746//46 +f 786//30 778//49 777//30 +f 782//44 767//34 766//44 +f 784//81 776//47 775//36 +f 789//42 765//29 780//42 +f 787//49 779//35 778//49 +f 781//29 766//44 765//29 +f 785//47 777//30 776//47 +f 788//35 780//42 779//35 +f 803//49 811//30 802//30 +f 792//34 807//44 791//44 +f 801//47 809//81 800//36 +f 790//29 814//42 805//42 +f 804//35 812//49 803//49 +f 791//44 806//29 790//29 +f 802//30 810//47 801//47 +f 805//42 813//35 804//35 +f 734//47 753//50 762//50 +f 808//82 793//41 768//41 +f 793//41 769//32 768//41 +f 794//32 770//45 769//32 +f 795//45 771//33 770//45 +f 796//33 772//46 771//33 +f 797//46 773//31 772//46 +f 798//31 774//43 773//31 +f 799//43 809//81 784//81 +f 724//44 752//48 740//44 +f 842//41 850//32 843//32 +f 822//42 837//35 821//35 +f 832//31 855//43 831//43 +f 823//29 838//42 822//42 +f 827//32 860//41 826//41 +f 816//43 864//31 815//31 +f 824//44 839//29 823//29 +f 829//33 858//45 828//45 +f 828//45 859//32 827//32 +f 830//46 857//33 829//33 +f 815//31 856//46 830//46 +f 819//30 834//47 818//47 +f 826//41 861//48 825//34 +f 820//49 835//30 819//30 +f 817//36 863//43 816//43 +f 821//35 836//49 820//49 +f 844//45 848//33 845//33 +f 846//46 854//31 832//31 +f 841//34 851//41 842//41 +f 831//43 853//50 833//36 +f 843//32 849//45 844//45 +f 845//33 847//46 846//46 +f 886//30 878//49 877//30 +f 882//44 867//34 866//44 +f 884//81 876//47 875//36 +f 889//42 865//29 880//42 +f 887//49 879//35 878//49 +f 881//29 866//44 865//29 +f 885//47 877//30 876//47 +f 888//35 880//42 879//35 +f 903//49 911//30 902//30 +f 892//34 907//44 891//44 +f 901//47 909//81 900//36 +f 890//29 914//42 905//42 +f 904//35 912//49 903//49 +f 891//44 906//29 890//29 +f 902//30 910//47 901//47 +f 905//42 913//35 904//35 +f 834//47 853//50 862//50 +f 908//82 893//41 868//41 +f 893//41 869//32 868//41 +f 894//32 870//45 869//32 +f 895//45 871//33 870//45 +f 896//33 872//46 871//33 +f 897//46 873//31 872//46 +f 898//31 874//43 873//31 +f 909//81 884//81 899//43 +f 824//44 852//48 840//44 +f 920//34 927//83 919//29 +f 918//35 925//66 917//30 +f 916//36 923//67 915//31 +f 915//31 930//68 922//33 +f 921//32 928//69 920//34 +f 919//29 926//70 918//35 +f 917//30 924//71 916//36 +f 922//33 929//72 921//32 +f 930//68 931//84 938//74 +f 928//69 937//75 936//76 +f 927//83 934//77 926//70 +f 925//66 932//78 924//71 +f 929//72 938//74 937//75 +f 927//83 936//76 935//79 +f 926//70 933//80 925//66 +f 924//71 931//84 923//67 +f 934//77 941//30 933//80 +f 932//78 939//31 931//84 +f 931//84 946//33 938//74 +f 937//75 944//34 936//76 +f 935//79 942//35 934//77 +f 933//80 940//36 932//78 +f 938//74 945//32 937//75 +f 936//76 943//29 935//79 +f 952//34 959//83 951//29 +f 950//35 957//66 949//30 +f 948//36 955//67 947//31 +f 947//31 962//68 954//33 +f 953//32 960//69 952//34 +f 951//29 958//70 950//35 +f 949//30 956//71 948//36 +f 954//33 961//72 953//32 +f 962//68 963//84 970//74 +f 960//69 969//75 968//76 +f 959//83 966//77 958//70 +f 957//66 964//78 956//71 +f 961//72 970//74 969//75 +f 959//83 968//76 967//79 +f 958//70 965//80 957//66 +f 956//71 963//84 955//67 +f 966//77 973//30 965//80 +f 964//78 971//31 963//84 +f 963//84 978//33 970//74 +f 969//75 976//34 968//76 +f 967//79 974//35 966//77 +f 965//80 972//36 964//78 +f 970//74 977//32 969//75 +f 968//76 975//29 967//79 +f 1015//85 1020//27 1014//27 +f 1013//86 1017//87 1012//87 +f 1016//88 1021//85 1015//85 +f 1014//27 1019//86 1013//86 +f 1012//87 1018//28 1011//28 +f 1011//28 1022//88 1016//88 +f 1079//85 1084//27 1078//27 +f 1077//86 1081//87 1076//87 +f 1080//88 1085//85 1079//85 +f 1078//27 1083//86 1077//86 +f 1076//87 1082//28 1075//28 +f 1075//28 1086//88 1080//88 +f 1137//32 1130//57 1129//32 +f 1135//27 1128//89 1127//27 +f 1133//30 1126//90 1125//30 +f 1131//28 1124//56 1123//28 +f 1138//57 1123//28 1130//57 +f 1136//89 1129//32 1128//89 +f 1134//90 1127//27 1126//90 +f 1132//56 1125//30 1124//56 +f 1153//32 1146//57 1145//32 +f 1151//27 1144//89 1143//27 +f 1149//30 1142//90 1141//30 +f 1147//28 1140//56 1139//28 +f 1154//57 1139//28 1146//57 +f 1152//89 1145//32 1144//89 +f 1150//90 1143//27 1142//90 +f 1148//56 1141//30 1140//56 +f 1177//32 1170//57 1169//32 +f 1175//27 1168//89 1167//27 +f 1173//30 1166//90 1165//30 +f 1171//28 1164//56 1163//28 +f 1178//57 1163//28 1170//57 +f 1176//89 1169//32 1168//89 +f 1174//90 1167//27 1166//90 +f 1172//56 1165//30 1164//56 +f 1193//32 1186//57 1185//32 +f 1191//27 1184//89 1183//27 +f 1189//30 1182//90 1181//30 +f 1187//28 1180//56 1179//28 +f 1194//57 1179//28 1186//57 +f 1192//89 1185//32 1184//89 +f 1190//90 1183//27 1182//90 +f 1188//56 1181//30 1180//56 +f 1206//91 1213//30 1205//92 +f 1204//93 1211//31 1203//37 +f 1203//37 1218//33 1210//94 +f 1209//95 1216//34 1208//96 +f 1207//97 1214//35 1206//91 +f 1205//92 1212//36 1204//93 +f 1210//94 1217//32 1209//95 +f 1208//96 1215//29 1207//97 +f 1222//98 1229//30 1221//99 +f 1220//100 1227//31 1219//101 +f 1219//101 1234//33 1226//102 +f 1225//103 1232//34 1224//104 +f 1223//38 1230//35 1222//98 +f 1221//99 1228//36 1220//100 +f 1226//102 1233//32 1225//103 +f 1224//104 1231//29 1223//38 +f 1245//105 1241//106 1242//107 +f 1247//108 1239//109 1240//110 +f 1209//95 1246//111 1245//105 +f 1205//92 1248//112 1206//91 +f 1208//96 1247//108 1246//111 +f 1209//95 1244//113 1210//94 +f 1205//92 1250//114 1249//115 +f 1206//91 1247//108 1207//97 +f 1249//115 1239//109 1248//112 +f 1246//111 1240//110 1241//106 +f 1245//105 1243//116 1244//113 +f 1249//115 1237//117 1238//118 +f 1220//100 1251//119 1221//99 +f 1225//103 1255//120 1226//102 +f 1221//99 1252//121 1222//98 +f 1220//100 1236//122 1235//123 +f 1226//102 1236//122 1219//101 +f 1225//103 1253//124 1254//125 +f 1255//120 1261//126 1262//127 +f 1252//121 1258//128 1259//129 +f 1236//122 1256//130 1235//123 +f 1236//122 1262//127 1257//131 +f 1254//125 1260//132 1261//126 +f 1235//123 1258//128 1251//119 +f 1222//98 1252//121 1223//38 +f 1252//121 1259//129 1223//38 +f 1203//37 1250//114 1204//93 +f 1250//114 1203//37 1237//117 +f 1210//94 1244//113 1203//37 +f 1244//113 1243//116 1203//37 +f 1223//38 1253//124 1224//104 +f 1253//124 1223//38 1260//132 +f 1242//107 1260//132 1243//116 +f 1243//116 1223//38 1203//37 +f 1259//129 1203//37 1223//38 +f 1237//117 1258//128 1238//118 +f 1238//118 1256//130 1239//109 +f 1239//109 1257//131 1240//110 +f 1240//110 1262//127 1241//106 +f 1241//106 1261//126 1242//107 +f 1266//91 1273//30 1265//92 +f 1264//93 1271//31 1263//37 +f 1263//37 1278//33 1270//94 +f 1269//95 1276//34 1268//96 +f 1267//97 1274//35 1266//91 +f 1265//92 1272//36 1264//93 +f 1270//94 1277//32 1269//95 +f 1268//96 1275//29 1267//97 +f 1282//98 1289//30 1281//99 +f 1280//100 1287//31 1279//101 +f 1279//101 1294//33 1286//102 +f 1285//103 1292//34 1284//104 +f 1283//38 1290//35 1282//98 +f 1281//99 1288//36 1280//100 +f 1286//102 1293//32 1285//103 +f 1284//104 1291//29 1283//38 +f 1305//105 1301//106 1302//107 +f 1307//108 1299//109 1300//110 +f 1268//96 1305//105 1269//95 +f 1265//92 1308//112 1266//91 +f 1267//97 1306//133 1268//96 +f 1269//95 1304//113 1270//94 +f 1265//92 1310//114 1309//115 +f 1266//91 1307//108 1267//97 +f 1309//115 1299//109 1308//112 +f 1306//133 1300//110 1301//106 +f 1305//105 1303//116 1304//113 +f 1309//115 1297//117 1298//118 +f 1280//100 1311//119 1281//99 +f 1285//103 1315//134 1286//102 +f 1281//99 1312//121 1282//98 +f 1280//100 1296//122 1295//123 +f 1286//102 1296//122 1279//101 +f 1285//103 1313//124 1314//125 +f 1315//134 1321//126 1322//127 +f 1312//121 1318//128 1319//129 +f 1296//122 1316//130 1295//123 +f 1296//122 1322//127 1317//131 +f 1314//125 1320//132 1321//126 +f 1295//123 1318//128 1311//119 +f 1282//98 1312//121 1283//38 +f 1312//121 1319//129 1283//38 +f 1263//37 1310//114 1264//93 +f 1310//114 1263//37 1297//117 +f 1270//94 1304//113 1263//37 +f 1304//113 1303//116 1263//37 +f 1283//38 1313//124 1284//104 +f 1313//124 1283//38 1320//132 +f 1302//107 1320//132 1303//116 +f 1303//116 1283//38 1263//37 +f 1319//129 1263//37 1283//38 +f 1297//117 1318//128 1298//118 +f 1298//118 1316//130 1299//109 +f 1299//109 1317//131 1300//110 +f 1300//110 1322//127 1301//106 +f 1301//106 1321//126 1302//107 +f 1326//91 1333//30 1325//92 +f 1324//93 1331//31 1323//37 +f 1323//37 1338//33 1330//94 +f 1329//95 1336//34 1328//96 +f 1327//97 1334//35 1326//91 +f 1325//92 1332//36 1324//93 +f 1330//94 1337//32 1329//95 +f 1328//96 1335//29 1327//97 +f 1342//98 1349//30 1341//99 +f 1340//100 1347//31 1339//101 +f 1339//101 1354//33 1346//102 +f 1345//103 1352//34 1344//104 +f 1343//38 1350//35 1342//98 +f 1341//99 1348//36 1340//100 +f 1346//102 1353//32 1345//103 +f 1344//104 1351//29 1343//38 +f 1365//105 1361//106 1362//107 +f 1367//108 1359//109 1360//110 +f 1328//96 1365//105 1329//95 +f 1325//92 1368//112 1326//91 +f 1328//96 1367//108 1366//133 +f 1329//95 1364//113 1330//94 +f 1325//92 1370//114 1369//115 +f 1326//91 1367//108 1327//97 +f 1369//115 1359//109 1368//112 +f 1366//133 1360//110 1361//106 +f 1365//105 1363//116 1364//113 +f 1369//115 1357//117 1358//118 +f 1340//100 1371//119 1341//99 +f 1346//102 1374//125 1375//134 +f 1341//99 1372//121 1342//98 +f 1340//100 1356//122 1355//135 +f 1346//102 1356//122 1339//101 +f 1345//103 1373//124 1374//125 +f 1375//134 1381//126 1382//127 +f 1372//121 1378//128 1379//129 +f 1356//122 1376//130 1355//135 +f 1356//122 1382//127 1377//131 +f 1373//124 1381//126 1374//125 +f 1355//135 1378//128 1371//119 +f 1342//98 1372//121 1343//38 +f 1372//121 1379//129 1343//38 +f 1323//37 1370//114 1324//93 +f 1370//114 1323//37 1357//117 +f 1330//94 1364//113 1323//37 +f 1364//113 1363//116 1323//37 +f 1343//38 1373//124 1344//104 +f 1373//124 1343//38 1380//132 +f 1362//107 1380//132 1363//116 +f 1363//116 1343//38 1323//37 +f 1379//129 1323//37 1343//38 +f 1357//117 1378//128 1358//118 +f 1358//118 1376//130 1359//109 +f 1359//109 1377//131 1360//110 +f 1360//110 1382//127 1361//106 +f 1361//106 1381//126 1362//107 +f 1398//33 1383//31 1390//33 +f 1396//34 1389//32 1388//34 +f 1394//35 1387//29 1386//35 +f 1392//36 1385//30 1384//36 +f 1397//32 1390//33 1389//32 +f 1395//29 1388//34 1387//29 +f 1393//30 1386//35 1385//30 +f 1391//31 1384//36 1383//31 +f 1521//32 1514//57 1513//32 +f 1519//27 1512//89 1511//27 +f 1517//30 1510//90 1509//30 +f 1515//28 1508//56 1507//28 +f 1522//57 1507//28 1514//57 +f 1520//89 1513//32 1512//89 +f 1518//90 1511//27 1510//90 +f 1516//56 1509//30 1508//56 +f 1537//32 1530//57 1529//32 +f 1535//27 1528//89 1527//27 +f 1533//30 1526//90 1525//30 +f 1531//28 1524//56 1523//28 +f 1538//57 1523//28 1530//57 +f 1536//89 1529//32 1528//89 +f 1534//90 1527//27 1526//90 +f 1532//56 1525//30 1524//56 +f 1554//33 1561//32 1553//32 +f 1552//34 1559//29 1551//29 +f 1550//35 1557//30 1549//30 +f 1548//36 1555//31 1547//31 +f 1547//31 1562//33 1554//33 +f 1553//32 1560//34 1552//34 +f 1551//29 1558//35 1550//35 +f 1549//30 1556//36 1548//36 +f 1570//33 1577//32 1569//32 +f 1568//34 1575//29 1567//29 +f 1566//35 1573//30 1565//30 +f 1564//36 1571//31 1563//31 +f 1563//31 1578//33 1570//33 +f 1569//32 1576//34 1568//34 +f 1567//29 1574//35 1566//35 +f 1565//30 1572//36 1564//36 +f 1586//33 1593//32 1585//32 +f 1584//34 1591//29 1583//29 +f 1582//35 1589//30 1581//30 +f 1580//36 1587//31 1579//31 +f 1579//31 1594//33 1586//33 +f 1585//32 1592//34 1584//34 +f 1583//29 1590//35 1582//35 +f 1581//30 1588//36 1580//36 +f 1602//33 1609//32 1601//32 +f 1600//34 1607//29 1599//29 +f 1598//35 1605//30 1597//30 +f 1596//36 1603//31 1595//31 +f 1595//31 1610//33 1602//33 +f 1601//32 1608//34 1600//34 +f 1599//29 1606//35 1598//35 +f 1597//30 1604//36 1596//36 +f 1612//136 1625//39 1623//136 +f 1620//32 1631//137 1619//137 +f 1617//29 1628//138 1616//138 +f 1614//30 1625//39 1613//39 +f 1621//40 1632//32 1620//32 +f 1618//139 1629//29 1617//29 +f 1615//140 1626//30 1614//30 +f 1622//141 1633//40 1621//40 +f 1612//136 1624//31 1611//31 +f 1619//137 1630//139 1618//139 +f 1616//138 1627//140 1615//140 +f 1611//31 1634//141 1622//141 +f 1636//136 1649//39 1647//136 +f 1644//32 1655//137 1643//137 +f 1641//29 1652//138 1640//138 +f 1638//30 1649//39 1637//39 +f 1645//40 1656//32 1644//32 +f 1642//139 1653//29 1641//29 +f 1639//140 1650//30 1638//30 +f 1646//141 1657//40 1645//40 +f 1636//136 1648//31 1635//31 +f 1643//137 1654//139 1642//139 +f 1640//138 1651//140 1639//140 +f 1635//31 1658//141 1646//141 +f 1770//142 1784//27 1760//27 +f 1722//142 1736//27 1712//27 +f 1702//30 1727//86 1703//86 +f 1709//88 1734//143 1710//143 +f 1699//28 1723//144 1700//144 +f 1706//145 1731//85 1707//85 +f 1703//86 1728//142 1704//142 +f 1710//143 1724//28 1699//28 +f 1700//144 1725//87 1701//87 +f 1707//85 1732//32 1708//32 +f 1704//142 1729//27 1705//27 +f 1701//87 1726//30 1702//30 +f 1708//32 1733//88 1709//88 +f 1705//27 1730//145 1706//145 +f 1750//30 1775//86 1751//86 +f 1711//145 1737//85 1713//85 +f 1719//87 1744//30 1720//30 +f 1716//143 1741//28 1717//28 +f 1713//85 1738//32 1714//32 +f 1720//30 1745//86 1721//86 +f 1717//28 1742//144 1718//144 +f 1714//32 1739//88 1715//88 +f 1721//86 1746//142 1722//142 +f 1712//27 1735//145 1711//145 +f 1718//144 1743//87 1719//87 +f 1715//88 1740//143 1716//143 +f 1757//88 1782//143 1758//143 +f 1747//28 1771//144 1748//144 +f 1754//145 1779//85 1755//85 +f 1751//86 1776//142 1752//142 +f 1758//143 1772//28 1747//28 +f 1748//144 1773//87 1749//87 +f 1755//85 1780//32 1756//32 +f 1752//142 1777//27 1753//27 +f 1749//87 1774//30 1750//30 +f 1756//32 1781//88 1757//88 +f 1753//27 1778//145 1754//145 +f 1759//145 1785//85 1761//85 +f 1767//87 1792//30 1768//30 +f 1764//143 1789//28 1765//28 +f 1761//85 1786//32 1762//32 +f 1768//30 1793//86 1769//86 +f 1765//28 1790//144 1766//144 +f 1762//32 1787//88 1763//88 +f 1769//86 1794//142 1770//142 +f 1760//27 1783//145 1759//145 +f 1766//144 1791//87 1767//87 +f 1763//88 1788//143 1764//143 +f 1801//146 1812//147 1813//146 +f 1798//148 1809//149 1810//148 +f 1804//150 1817//151 1805//151 +f 1802//152 1813//146 1814//152 +f 1798//148 1811//153 1799//153 +f 1806//154 1817//151 1818//154 +f 1795//155 1807//156 1796//156 +f 1802//152 1815//157 1803//157 +f 1799//153 1812//147 1800//147 +f 1806//154 1808//155 1795//155 +f 1796//156 1809//149 1797//149 +f 1804//150 1815//157 1816//150 +f 1825//158 1836//159 1837//158 +f 1822//160 1833//161 1834//160 +f 1828//162 1841//163 1829//163 +f 1825//158 1838//164 1826//164 +f 1823//165 1834//160 1835//165 +f 1830//166 1841//163 1842//166 +f 1819//167 1831//168 1820//168 +f 1827//169 1838//164 1839//169 +f 1824//159 1835//165 1836//159 +f 1830//166 1832//167 1819//167 +f 1820//168 1833//161 1821//161 +f 1828//162 1839//169 1840//162 +f 1873//27 1866//122 1865//27 +f 1871//29 1864//108 1863//29 +f 1869//28 1862//38 1861//28 +f 1867//31 1860//37 1859//31 +f 1874//122 1859//31 1866//122 +f 1872//108 1865//27 1864//108 +f 1870//38 1863//29 1862//38 +f 1868//37 1861//28 1860//37 +f 1889//27 1882//122 1881//27 +f 1887//29 1880//108 1879//29 +f 1885//28 1878//38 1877//28 +f 1883//31 1876//37 1875//31 +f 1890//122 1875//31 1882//122 +f 1888//108 1881//27 1880//108 +f 1886//38 1879//29 1878//38 +f 1884//37 1877//28 1876//37 +f 1905//170 1898//122 1897//27 +f 1903//171 1896//108 1895//29 +f 1901//172 1894//38 1893//28 +f 1899//33 1892//37 1891//31 +f 1906//173 1891//31 1898//122 +f 1904//174 1897//27 1896//108 +f 1902//175 1895//29 1894//38 +f 1900//176 1893//28 1892//37 +f 1904//174 1912//177 1905//170 +f 1903//171 1909//178 1910//35 +f 1900//176 1908//179 1901//172 +f 1905//170 1913//180 1906//173 +f 1903//171 1911//181 1904//174 +f 1901//172 1909//178 1902//175 +f 1907//182 1915//183 1908//179 +f 1913//180 1919//184 1920//185 +f 1911//181 1917//186 1918//187 +f 1908//179 1916//188 1909//178 +f 1911//181 1919//184 1912//177 +f 1909//178 1917//186 1910//35 +f 1899//33 1907//182 1900//176 +f 1907//182 1899//33 1914//189 +f 1906//173 1913//180 1899//33 +f 1913//180 1920//185 1899//33 +f 1920//185 1921//32 1899//33 +f 1919//184 1928//89 1920//185 +f 1899//33 1922//57 1914//189 +f 1917//186 1926//90 1918//187 +f 1915//183 1924//56 1916//188 +f 1918//187 1927//27 1919//184 +f 1916//188 1925//30 1917//186 +f 1914//189 1923//28 1915//183 +f 1943//190 1949//181 1950//177 +f 1941//42 1947//178 1948//35 +f 1939//191 1945//182 1946//179 +f 1943//190 1951//180 1944//192 +f 1941//42 1949//181 1942//193 +f 1939//191 1947//178 1940//194 +f 1945//182 1953//183 1946//179 +f 1950//177 1958//185 1951//180 +f 1949//181 1955//186 1956//187 +f 1946//179 1954//188 1947//178 +f 1949//181 1957//184 1950//177 +f 1947//178 1955//186 1948//35 +f 1937//195 1945//182 1938//196 +f 1945//182 1937//195 1952//189 +f 1944//192 1951//180 1937//195 +f 1951//180 1958//185 1937//195 +f 1958//185 1959//197 1937//195 +f 1957//184 1966//198 1958//185 +f 1937//195 1960//199 1952//189 +f 1955//186 1964//200 1956//187 +f 1953//183 1962//201 1954//188 +f 1956//187 1965//202 1957//184 +f 1954//188 1963//35 1955//186 +f 1952//189 1961//203 1953//183 +f 1982//122 1967//31 1974//122 +f 1980//108 1973//27 1972//108 +f 1978//38 1971//29 1970//38 +f 1976//37 1969//28 1968//37 +f 1981//27 1974//122 1973//27 +f 1979//29 1972//108 1971//29 +f 1977//28 1970//38 1969//28 +f 1975//31 1968//37 1967//31 +f 1961//203 1986//204 1962//201 +f 1959//197 1984//205 1960//199 +f 1964//200 1988//206 1965//202 +f 1960//199 1985//207 1961//203 +f 1959//197 1989//208 1983//33 +f 1966//198 1988//206 1989//208 +f 1989//208 1990//209 1983//33 +f 1988//206 1996//210 1989//208 +f 1985//207 1993//211 1986//204 +f 1983//33 1991//212 1984//205 +f 1988//206 1994//213 1995//214 +f 1985//207 1991//212 1992//215 +f 1962//201 1986//204 1963//35 +f 1986//204 1993//211 1963//35 +f 1963//35 1987//216 1964//200 +f 1987//216 1963//35 1994//213 +f 1963//35 2002//108 1994//213 +f 1996//210 1998//31 1990//209 +f 1993//211 1997//29 1963//35 +f 1995//214 2004//122 1996//210 +f 1992//215 2001//38 1993//211 +f 1990//209 1999//37 1991//212 +f 1994//213 2003//27 1995//214 +f 1991//212 2000//28 1992//215 +f 2012//89 2013//197 2005//32 +f 2011//27 2020//198 2012//89 +f 2005//32 2014//199 2006//57 +f 2009//30 2018//200 2010//90 +f 2007//28 2016//201 2008//56 +f 2010//90 2019//202 2011//27 +f 2008//56 2017//35 2009//30 +f 2006//57 2015//203 2007//28 +f 2015//203 2024//204 2016//201 +f 2013//197 2022//205 2014//199 +f 2019//202 2025//216 2026//206 +f 2014//199 2023//207 2015//203 +f 2013//197 2027//208 2021//33 +f 2020//198 2026//206 2027//208 +f 2021//33 2034//210 2028//209 +f 2026//206 2034//210 2027//208 +f 2024//204 2030//215 2031//211 +f 2021//33 2029//212 2022//205 +f 2025//216 2033//214 2026//206 +f 2023//207 2029//212 2030//215 +f 2016//201 2024//204 2017//35 +f 2024//204 2031//211 2017//35 +f 2017//35 2025//216 2018//200 +f 2025//216 2017//35 2032//213 +f 2017//35 2040//108 2032//213 +f 2034//210 2036//31 2028//209 +f 2031//211 2035//29 2017//35 +f 2033//214 2042//122 2034//210 +f 2030//215 2039//38 2031//211 +f 2028//209 2037//37 2029//212 +f 2032//213 2041//27 2033//214 +f 2029//212 2038//28 2030//215 +f 2249//29 2260//138 2248//138 +f 2246//30 2257//39 2245//39 +f 2253//40 2264//32 2252//32 +f 2250//139 2261//29 2249//29 +f 2247//140 2258//30 2246//30 +f 2256//31 2270//217 2255//136 +f 2266//141 2271//31 2256//31 +f 2251//137 2262//139 2250//139 +f 2248//138 2259//140 2247//140 +f 2244//136 2267//31 2243//31 +f 2243//31 2269//218 2254//141 +f 2252//32 2263//137 2251//137 +f 2270//217 2268//217 2257//39 +f 2272//218 2265//40 2253//40 +f 2287//219 2273//29 2284//138 +f 2285//29 2274//139 2273//29 +f 2288//29 2302//219 2299//138 +f 2289//139 2300//29 2288//29 +f 2297//30 2283//140 2282//30 +f 2296//39 2282//30 2281//39 +f 2295//136 2281//39 2280//136 +f 2294//31 2280//136 2279//31 +f 2293//141 2279//31 2278//141 +f 2292//40 2278//141 2277//40 +f 2291//32 2277//40 2276//32 +f 2290//137 2276//32 2275//137 +f 2275//137 2301//220 2290//137 +f 2298//140 2302//219 2287//219 +f 2308//138 2321//29 2309//29 +f 2305//39 2318//30 2306//30 +f 2312//32 2325//40 2313//40 +f 2309//29 2322//139 2310//139 +f 2306//30 2319//140 2307//140 +f 2313//40 2326//141 2314//141 +f 2303//31 2315//136 2304//136 +f 2310//139 2323//137 2311//137 +f 2307//140 2320//138 2308//138 +f 2314//141 2316//31 2303//31 +f 2304//136 2317//39 2305//39 +f 2311//137 2324//32 2312//32 +f 2336//32 2347//137 2335//137 +f 2333//29 2344//138 2332//138 +f 2330//30 2341//39 2329//39 +f 2337//40 2348//32 2336//32 +f 2334//139 2345//29 2333//29 +f 2331//140 2342//30 2330//30 +f 2338//141 2349//40 2337//40 +f 2328//136 2339//31 2327//31 +f 2335//137 2346//139 2334//139 +f 2332//138 2343//140 2331//140 +f 2327//31 2350//141 2338//141 +f 2329//39 2340//136 2328//136 +f 2358//139 2369//29 2357//29 +f 2355//140 2366//30 2354//30 +f 2362//141 2373//40 2361//40 +f 2352//136 2363//31 2351//31 +f 2359//137 2370//139 2358//139 +f 2356//138 2367//140 2355//140 +f 2351//31 2374//141 2362//141 +f 2353//39 2364//136 2352//136 +f 2360//32 2371//137 2359//137 +f 2357//29 2368//138 2356//138 +f 2354//30 2365//39 2353//39 +f 2361//40 2372//32 2360//32 +f 2374//221 2375//37 2386//221 +f 2364//222 2375//37 2363//37 +f 2365//223 2376//222 2364//222 +f 2365//223 2378//56 2377//223 +f 2367//224 2378//56 2366//56 +f 2368//225 2379//224 2367//224 +f 2369//38 2380//225 2368//225 +f 2370//226 2381//38 2369//38 +f 2371//227 2382//226 2370//226 +f 2371//227 2384//57 2383//227 +f 2373//228 2384//57 2372//57 +f 2373//228 2386//221 2385//228 +f 2388//40 2857//32 2389//32 +f 2395//30 2864//39 2396//39 +f 2392//29 2861//138 2393//138 +f 2389//32 2858//137 2390//137 +f 2396//39 2865//136 2397//136 +f 2398//31 2855//141 2387//141 +f 2393//138 2862//140 2394//140 +f 2390//137 2859//139 2391//139 +f 2397//136 2866//31 2398//31 +f 2387//141 2856//40 2388//40 +f 2394//140 2863//30 2395//30 +f 2391//139 2860//29 2392//29 +f 2405//29 2416//138 2404//138 +f 2402//30 2413//39 2401//39 +f 2409//40 2420//32 2408//32 +f 2406//139 2417//29 2405//29 +f 2403//140 2414//30 2402//30 +f 2412//31 2426//217 2411//136 +f 2422//141 2427//31 2412//31 +f 2407//137 2418//139 2406//139 +f 2404//138 2415//140 2403//140 +f 2400//136 2423//31 2399//31 +f 2399//31 2425//218 2410//141 +f 2408//32 2419//137 2407//137 +f 2413//39 2426//217 2424//217 +f 2428//218 2421//40 2409//40 +f 2443//219 2429//29 2440//138 +f 2441//29 2430//139 2429//29 +f 2444//29 2458//219 2455//138 +f 2445//139 2456//29 2444//29 +f 2453//30 2439//140 2438//30 +f 2452//39 2438//30 2437//39 +f 2451//136 2437//39 2436//136 +f 2450//31 2436//136 2435//31 +f 2449//141 2435//31 2434//141 +f 2448//40 2434//141 2433//40 +f 2447//32 2433//40 2432//32 +f 2446//137 2432//32 2431//137 +f 2431//137 2457//220 2446//137 +f 2454//140 2458//219 2443//219 +f 2464//138 2477//29 2465//29 +f 2461//39 2474//30 2462//30 +f 2468//32 2481//40 2469//40 +f 2465//29 2478//139 2466//139 +f 2462//30 2475//140 2463//140 +f 2469//40 2482//141 2470//141 +f 2459//31 2471//136 2460//136 +f 2466//139 2479//137 2467//137 +f 2463//140 2476//138 2464//138 +f 2470//141 2472//31 2459//31 +f 2460//136 2473//39 2461//39 +f 2467//137 2480//32 2468//32 +f 2492//32 2503//137 2491//137 +f 2489//29 2500//138 2488//138 +f 2486//30 2497//39 2485//39 +f 2493//40 2504//32 2492//32 +f 2490//139 2501//29 2489//29 +f 2487//140 2498//30 2486//30 +f 2494//141 2505//40 2493//40 +f 2484//136 2495//31 2483//31 +f 2491//137 2502//139 2490//139 +f 2488//138 2499//140 2487//140 +f 2483//31 2506//141 2494//141 +f 2485//39 2496//136 2484//136 +f 2532//228 2519//221 2520//228 +f 2532//228 2521//57 2533//57 +f 2534//227 2521//57 2522//227 +f 2534//227 2523//226 2535//226 +f 2535//226 2524//38 2536//38 +f 2536//38 2525//225 2537//225 +f 2537//225 2526//224 2538//224 +f 2538//224 2527//56 2539//56 +f 2540//223 2527//56 2528//223 +f 2541//222 2528//223 2529//222 +f 2541//222 2530//37 2542//37 +f 2531//221 2530//37 2519//221 +f 2544//40 2533//32 2545//32 +f 2551//30 2540//39 2552//39 +f 2548//29 2537//138 2549//138 +f 2545//32 2534//137 2546//137 +f 2552//39 2541//136 2553//136 +f 2554//31 2531//141 2543//141 +f 2549//138 2538//140 2550//140 +f 2546//137 2535//139 2547//139 +f 2553//136 2542//31 2554//31 +f 2543//141 2532//40 2544//40 +f 2550//140 2539//30 2551//30 +f 2547//139 2536//29 2548//29 +f 2705//138 2679//140 2706//140 +f 2710//31 2686//141 2699//141 +f 2708//39 2676//136 2709//136 +f 2701//32 2683//137 2702//137 +f 2704//29 2680//138 2705//138 +f 2707//30 2677//39 2708//39 +f 2700//40 2684//32 2701//32 +f 2703//139 2681//29 2704//29 +f 2706//140 2678//30 2707//30 +f 2699//141 2685//40 2700//40 +f 2709//136 2675//31 2710//31 +f 2702//137 2682//139 2703//139 +f 2561//29 2572//138 2560//138 +f 2558//30 2569//39 2557//39 +f 2565//40 2576//32 2564//32 +f 2562//139 2573//29 2561//29 +f 2559//140 2570//30 2558//30 +f 2568//31 2582//217 2567//136 +f 2578//141 2583//31 2568//31 +f 2563//137 2574//139 2562//139 +f 2560//138 2571//140 2559//140 +f 2556//136 2579//31 2555//31 +f 2555//31 2581//218 2566//141 +f 2564//32 2575//137 2563//137 +f 2569//39 2582//217 2580//217 +f 2584//218 2577//40 2565//40 +f 2599//219 2585//29 2596//138 +f 2597//29 2586//139 2585//29 +f 2600//29 2614//219 2611//138 +f 2601//139 2612//29 2600//29 +f 2609//30 2595//140 2594//30 +f 2608//39 2594//30 2593//39 +f 2607//136 2593//39 2592//136 +f 2606//31 2592//136 2591//31 +f 2605//141 2591//31 2590//141 +f 2604//40 2590//141 2589//40 +f 2603//32 2589//40 2588//32 +f 2602//137 2588//32 2587//137 +f 2587//137 2613//220 2602//137 +f 2610//140 2614//219 2599//219 +f 2620//138 2633//29 2621//29 +f 2617//39 2630//30 2618//30 +f 2624//32 2637//40 2625//40 +f 2621//29 2634//139 2622//139 +f 2618//30 2631//140 2619//140 +f 2625//40 2638//141 2626//141 +f 2615//31 2627//136 2616//136 +f 2622//139 2635//137 2623//137 +f 2619//140 2632//138 2620//138 +f 2626//141 2628//31 2615//31 +f 2616//136 2629//39 2617//39 +f 2623//137 2636//32 2624//32 +f 2648//32 2659//137 2647//137 +f 2645//29 2656//138 2644//138 +f 2642//30 2653//39 2641//39 +f 2649//40 2660//32 2648//32 +f 2646//139 2657//29 2645//29 +f 2643//140 2654//30 2642//30 +f 2650//141 2661//40 2649//40 +f 2640//136 2651//31 2639//31 +f 2647//137 2658//139 2646//139 +f 2644//138 2655//140 2643//140 +f 2639//31 2662//141 2650//141 +f 2641//39 2652//136 2640//136 +f 2698//229 2675//122 2687//122 +f 2675//122 2688//230 2687//122 +f 2676//230 2689//231 2688//230 +f 2689//231 2678//90 2690//90 +f 2678//90 2691//232 2690//90 +f 2691//232 2680//233 2692//233 +f 2680//233 2693//108 2692//233 +f 2681//108 2694//234 2693//108 +f 2694//234 2683//235 2695//235 +f 2695//235 2684//89 2696//89 +f 2684//89 2697//236 2696//89 +f 2685//236 2698//229 2697//236 +f 2694//139 2669//29 2693//29 +f 2691//140 2666//30 2690//30 +f 2698//141 2673//40 2697//40 +f 2688//136 2663//31 2687//31 +f 2695//137 2670//139 2694//139 +f 2692//138 2667//140 2691//140 +f 2687//31 2674//141 2698//141 +f 2689//39 2664//136 2688//136 +f 2696//32 2671//137 2695//137 +f 2693//29 2668//138 2692//138 +f 2690//30 2665//39 2689//39 +f 2697//40 2672//32 2696//32 +f 2819//221 2700//228 2820//228 +f 2820//228 2701//57 2821//57 +f 2822//227 2701//57 2702//227 +f 2823//226 2702//227 2703//226 +f 2823//226 2704//38 2824//38 +f 2824//38 2705//225 2825//225 +f 2825//225 2706//224 2826//224 +f 2826//224 2707//56 2827//56 +f 2828//223 2707//56 2708//223 +f 2828//223 2709//222 2829//222 +f 2829//222 2710//37 2830//37 +f 2819//221 2710//37 2699//221 +f 2717//29 2728//138 2716//138 +f 2714//30 2725//39 2713//39 +f 2721//40 2732//32 2720//32 +f 2718//139 2729//29 2717//29 +f 2715//140 2726//30 2714//30 +f 2724//31 2738//217 2723//136 +f 2734//141 2739//31 2724//31 +f 2719//137 2730//139 2718//139 +f 2716//138 2727//140 2715//140 +f 2712//136 2735//31 2711//31 +f 2711//31 2737//218 2722//141 +f 2720//32 2731//137 2719//137 +f 2725//39 2738//217 2736//217 +f 2740//218 2733//40 2721//40 +f 2755//219 2741//29 2752//138 +f 2753//29 2742//139 2741//29 +f 2756//29 2770//219 2767//138 +f 2757//139 2768//29 2756//29 +f 2765//30 2751//140 2750//30 +f 2764//39 2750//30 2749//39 +f 2763//136 2749//39 2748//136 +f 2762//31 2748//136 2747//31 +f 2761//141 2747//31 2746//141 +f 2760//40 2746//141 2745//40 +f 2759//32 2745//40 2744//32 +f 2758//137 2744//32 2743//137 +f 2743//137 2769//220 2758//137 +f 2766//140 2770//219 2755//219 +f 2776//138 2789//29 2777//29 +f 2773//39 2786//30 2774//30 +f 2780//32 2793//40 2781//40 +f 2777//29 2790//139 2778//139 +f 2774//30 2787//140 2775//140 +f 2781//40 2794//141 2782//141 +f 2771//31 2783//136 2772//136 +f 2778//139 2791//137 2779//137 +f 2775//140 2788//138 2776//138 +f 2782//141 2784//31 2771//31 +f 2772//136 2785//39 2773//39 +f 2779//137 2792//32 2780//32 +f 2804//32 2815//137 2803//137 +f 2801//29 2812//138 2800//138 +f 2798//30 2809//39 2797//39 +f 2805//40 2816//32 2804//32 +f 2802//139 2813//29 2801//29 +f 2799//140 2810//30 2798//30 +f 2806//141 2817//40 2805//40 +f 2796//136 2807//31 2795//31 +f 2803//137 2814//139 2802//139 +f 2800//138 2811//140 2799//140 +f 2795//31 2818//141 2806//141 +f 2797//39 2808//136 2796//136 +f 2832//40 2821//32 2833//32 +f 2839//30 2828//39 2840//39 +f 2836//29 2825//138 2837//138 +f 2833//32 2822//137 2834//137 +f 2840//39 2829//136 2841//136 +f 2842//31 2819//141 2831//141 +f 2837//138 2826//140 2838//140 +f 2834//137 2823//139 2835//139 +f 2841//136 2830//31 2842//31 +f 2831//141 2820//40 2832//40 +f 2838//140 2827//30 2839//30 +f 2835//139 2824//29 2836//29 +f 2388//236 2843//229 2387//229 +f 2845//89 2388//236 2389//89 +f 2390//235 2845//89 2389//89 +f 2847//234 2390//235 2391//234 +f 2848//108 2391//234 2392//108 +f 2849//233 2392//108 2393//233 +f 2850//232 2393//233 2394//232 +f 2851//90 2394//232 2395//90 +f 2396//231 2851//90 2395//90 +f 2397//230 2852//231 2396//231 +f 2854//122 2397//230 2398//122 +f 2387//229 2854//122 2398//122 +f 2383//137 2847//139 2382//139 +f 2376//136 2854//31 2375//31 +f 2386//141 2844//40 2385//40 +f 2379//140 2851//30 2378//30 +f 2382//139 2848//29 2381//29 +f 2385//40 2845//32 2384//32 +f 2378//30 2852//39 2377//39 +f 2381//29 2849//138 2380//138 +f 2384//32 2846//137 2383//137 +f 2377//39 2853//136 2376//136 +f 2375//31 2843//141 2386//141 +f 2380//138 2850//140 2379//140 +f 2517//40 2953//32 2516//32 +f 2510//30 2960//39 2509//39 +f 2513//29 2957//138 2512//138 +f 2516//32 2954//137 2515//137 +f 2509//39 2961//136 2508//136 +f 2507//31 2951//141 2518//141 +f 2512//138 2958//140 2511//140 +f 2515//137 2955//139 2514//139 +f 2508//136 2962//31 2507//31 +f 2518//141 2952//40 2517//40 +f 2511//140 2959//30 2510//30 +f 2514//139 2956//29 2513//29 +f 2909//138 2883//140 2910//140 +f 2914//31 2890//141 2903//141 +f 2912//39 2880//136 2913//136 +f 2905//32 2887//137 2906//137 +f 2908//29 2884//138 2909//138 +f 2911//30 2881//39 2912//39 +f 2904//40 2888//32 2905//32 +f 2907//139 2885//29 2908//29 +f 2910//140 2882//30 2911//30 +f 2903//141 2889//40 2904//40 +f 2913//136 2879//31 2914//31 +f 2906//137 2886//139 2907//139 +f 2902//229 2879//122 2891//122 +f 2879//122 2892//230 2891//122 +f 2880//230 2893//231 2892//230 +f 2893//231 2882//90 2894//90 +f 2882//90 2895//232 2894//90 +f 2895//232 2884//233 2896//233 +f 2884//233 2897//108 2896//233 +f 2885//108 2898//234 2897//108 +f 2898//234 2887//235 2899//235 +f 2899//235 2888//89 2900//89 +f 2888//89 2901//236 2900//89 +f 2889//236 2902//229 2901//236 +f 2898//139 2873//29 2897//29 +f 2895//140 2870//30 2894//30 +f 2902//141 2877//40 2901//40 +f 2892//136 2867//31 2891//31 +f 2899//137 2874//139 2898//139 +f 2896//138 2871//140 2895//140 +f 2891//31 2878//141 2902//141 +f 2893//39 2868//136 2892//136 +f 2900//32 2875//137 2899//137 +f 2897//29 2872//138 2896//138 +f 2894//30 2869//39 2893//39 +f 2901//40 2876//32 2900//32 +f 2915//221 2904//228 2916//228 +f 2916//228 2905//57 2917//57 +f 2918//227 2905//57 2906//227 +f 2919//226 2906//227 2907//226 +f 2919//226 2908//38 2920//38 +f 2920//38 2909//225 2921//225 +f 2921//225 2910//224 2922//224 +f 2922//224 2911//56 2923//56 +f 2924//223 2911//56 2912//223 +f 2924//223 2913//222 2925//222 +f 2925//222 2914//37 2926//37 +f 2915//221 2914//37 2903//221 +f 2928//40 2917//32 2929//32 +f 2935//30 2924//39 2936//39 +f 2932//29 2921//138 2933//138 +f 2929//32 2918//137 2930//137 +f 2936//39 2925//136 2937//136 +f 2938//31 2915//141 2927//141 +f 2933//138 2922//140 2934//140 +f 2930//137 2919//139 2931//139 +f 2937//136 2926//31 2938//31 +f 2927//141 2916//40 2928//40 +f 2934//140 2923//30 2935//30 +f 2931//139 2920//29 2932//29 +f 2517//236 2939//229 2518//229 +f 2941//89 2517//236 2516//89 +f 2515//235 2941//89 2516//89 +f 2943//234 2515//235 2514//234 +f 2944//108 2514//234 2513//108 +f 2945//233 2513//108 2512//233 +f 2946//232 2512//233 2511//232 +f 2947//90 2511//232 2510//90 +f 2509//231 2947//90 2510//90 +f 2508//230 2948//231 2509//231 +f 2950//122 2508//230 2507//122 +f 2518//229 2950//122 2507//122 +f 2522//137 2943//139 2523//139 +f 2529//136 2950//31 2530//31 +f 2519//141 2940//40 2520//40 +f 2526//140 2947//30 2527//30 +f 2523//139 2944//29 2524//29 +f 2520//40 2941//32 2521//32 +f 2527//30 2948//39 2528//39 +f 2524//29 2945//138 2525//138 +f 2521//32 2942//137 2522//137 +f 2528//39 2949//136 2529//136 +f 2530//31 2939//141 2519//141 +f 2525//138 2946//140 2526//140 +f 2989//34 3004//44 2988//44 +f 2982//47 2997//36 2981//36 +f 2990//41 3005//34 2989//34 +f 2983//30 2998//47 2982//47 +f 2991//32 3006//41 2990//41 +f 2984//49 2999//30 2983//30 +f 2992//45 3007//32 2991//32 +f 2985//35 3000//49 2984//49 +f 2993//33 3008//45 2992//45 +f 2986//42 3001//35 2985//35 +f 2994//46 3009//33 2993//33 +f 2987//29 3002//42 2986//42 +f 2980//43 2996//31 2979//31 +f 2979//31 3010//46 2994//46 +f 2988//44 3003//29 2987//29 +f 2981//36 2995//43 2980//43 +f 370//41 379//41 378//32 +f 350//42 366//42 365//35 +f 360//31 382//31 383//43 +f 351//29 367//29 366//42 +f 355//32 387//32 388//41 +f 344//43 391//43 392//31 +f 352//44 368//44 367//29 +f 357//33 385//33 386//45 +f 356//45 386//45 387//32 +f 358//46 384//46 385//33 +f 343//31 392//31 384//46 +f 347//30 363//30 362//47 +f 354//41 388//41 389//48 +f 348//49 364//49 363//30 +f 345//36 390//50 391//43 +f 349//35 365//35 364//49 +f 372//45 377//45 376//33 +f 374//46 375//46 382//31 +f 369//34 380//48 379//41 +f 359//43 383//43 381//50 +f 371//32 378//32 377//45 +f 373//33 376//33 375//46 +f 482//51 483//52 499//52 +f 471//33 487//33 486//45 +f 464//42 480//42 479//35 +f 472//46 488//46 487//33 +f 465//29 481//29 480//42 +f 458//43 473//43 474//31 +f 457//31 474//31 488//46 +f 466//44 482//44 481//29 +f 459//36 475//36 473//43 +f 467//34 483//34 482//44 +f 460//47 476//47 475//36 +f 468//41 484//41 483//34 +f 461//30 477//30 476//47 +f 469//32 485//32 484//41 +f 462//49 478//49 477//30 +f 470//45 486//45 485//32 +f 463//35 479//35 478//49 +f 475//53 476//54 492//54 +f 484//55 500//55 499//52 +f 477//56 493//56 492//54 +f 485//57 501//57 500//55 +f 478//58 494//58 493//56 +f 486//59 502//59 501//57 +f 479//60 495//60 494//58 +f 486//59 487//61 503//61 +f 480//62 496//62 495//60 +f 488//63 504//63 503//61 +f 480//62 481//38 497//38 +f 473//64 489//64 490//37 +f 488//63 474//37 490//37 +f 481//38 482//51 498//51 +f 475//53 491//53 489//64 +f 538//34 546//69 545//65 +f 536//35 544//70 543//66 +f 534//36 542//71 541//67 +f 533//31 541//67 548//68 +f 539//32 547//72 546//69 +f 537//29 545//65 544//70 +f 535//30 543//66 542//71 +f 540//33 548//68 547//72 +f 548//68 541//67 549//73 +f 546//69 547//72 555//75 +f 545//65 553//79 552//77 +f 543//66 551//80 550//78 +f 547//72 548//68 556//74 +f 545//65 546//69 554//76 +f 544//70 552//77 551//80 +f 542//71 550//78 549//73 +f 552//77 560//35 559//30 +f 550//78 558//36 557//31 +f 549//73 557//31 564//33 +f 555//75 563//32 562//34 +f 553//79 561//29 560//35 +f 551//80 559//30 558//36 +f 556//74 564//33 563//32 +f 554//76 562//34 561//29 +f 586//30 587//49 578//49 +f 582//44 583//82 567//34 +f 584//81 585//47 576//47 +f 589//42 581//29 565//29 +f 587//49 588//35 579//35 +f 581//29 582//44 566//44 +f 585//47 586//30 577//30 +f 588//35 589//42 580//42 +f 603//49 612//49 611//30 +f 592//34 608//82 607//44 +f 601//47 610//47 609//81 +f 590//29 606//29 614//42 +f 604//35 613//35 612//49 +f 591//44 607//44 606//29 +f 602//30 611//30 610//47 +f 605//42 614//42 613//35 +f 345//36 346//47 390//50 +f 346//47 362//47 390//50 +f 362//47 361//36 381//50 +f 568//41 567//34 583//82 +f 608//82 592//34 593//41 +f 568//41 583//82 608//82 +f 593//41 594//32 569//32 +f 594//32 595//45 570//45 +f 595//45 596//33 571//33 +f 596//33 597//46 572//46 +f 597//46 598//31 573//31 +f 598//31 599//43 574//43 +f 575//36 574//43 584//81 +f 574//43 599//43 584//81 +f 599//43 600//36 609//81 +f 352//44 353//34 389//48 +f 389//48 380//48 352//44 +f 380//48 369//34 368//44 +f 642//41 651//41 650//32 +f 622//42 638//42 637//35 +f 632//31 654//31 655//43 +f 623//29 639//29 638//42 +f 627//32 659//32 660//41 +f 616//43 663//43 664//31 +f 624//44 640//44 639//29 +f 629//33 657//33 658//45 +f 628//45 658//45 659//32 +f 630//46 656//46 657//33 +f 615//31 664//31 656//46 +f 619//30 635//30 634//47 +f 626//41 660//41 661//48 +f 620//49 636//49 635//30 +f 617//36 662//50 663//43 +f 621//35 637//35 636//49 +f 644//45 649//45 648//33 +f 646//46 647//46 654//31 +f 641//34 652//48 651//41 +f 631//43 655//43 653//50 +f 643//32 650//32 649//45 +f 645//33 648//33 647//46 +f 686//30 687//49 678//49 +f 682//44 683//82 667//34 +f 684//81 685//47 676//47 +f 689//42 681//29 665//29 +f 687//49 688//35 679//35 +f 681//29 682//44 666//44 +f 685//47 686//30 677//30 +f 688//35 689//42 680//42 +f 703//49 712//49 711//30 +f 692//34 708//82 707//44 +f 701//47 710//47 709//81 +f 690//29 706//29 714//42 +f 704//35 713//35 712//49 +f 691//44 707//44 706//29 +f 702//30 711//30 710//47 +f 705//42 714//42 713//35 +f 617//36 618//47 662//50 +f 618//47 634//47 662//50 +f 634//47 633//36 653//50 +f 668//41 667//34 683//82 +f 708//82 692//34 693//41 +f 668//41 683//82 708//82 +f 693//41 694//32 669//32 +f 694//32 695//45 670//45 +f 695//45 696//33 671//33 +f 696//33 697//46 672//46 +f 697//46 698//31 673//31 +f 698//31 699//43 674//43 +f 675//36 674//43 684//81 +f 674//43 699//43 684//81 +f 699//43 700//36 709//81 +f 624//44 625//34 661//48 +f 661//48 652//48 624//44 +f 652//48 641//34 640//44 +f 742//41 751//41 750//32 +f 722//42 738//42 737//35 +f 732//31 754//31 755//43 +f 723//29 739//29 738//42 +f 727//32 759//32 760//41 +f 716//43 763//43 764//31 +f 724//44 740//44 739//29 +f 729//33 757//33 758//45 +f 728//45 758//45 759//32 +f 730//46 756//46 757//33 +f 715//31 764//31 756//46 +f 719//30 735//30 734//47 +f 726//41 760//41 761//48 +f 720//49 736//49 735//30 +f 717//36 762//50 763//43 +f 721//35 737//35 736//49 +f 744//45 749//45 748//33 +f 746//46 747//46 754//31 +f 741//34 752//48 751//41 +f 731//43 755//43 753//50 +f 743//32 750//32 749//45 +f 745//33 748//33 747//46 +f 786//30 787//49 778//49 +f 782//44 783//82 767//34 +f 784//81 785//47 776//47 +f 789//42 781//29 765//29 +f 787//49 788//35 779//35 +f 781//29 782//44 766//44 +f 785//47 786//30 777//30 +f 788//35 789//42 780//42 +f 803//49 812//49 811//30 +f 792//34 808//82 807//44 +f 801//47 810//47 809//81 +f 790//29 806//29 814//42 +f 804//35 813//35 812//49 +f 791//44 807//44 806//29 +f 802//30 811//30 810//47 +f 805//42 814//42 813//35 +f 717//36 718//47 762//50 +f 718//47 734//47 762//50 +f 734//47 733//36 753//50 +f 768//41 767//34 783//82 +f 808//82 792//34 793//41 +f 768//41 783//82 808//82 +f 793//41 794//32 769//32 +f 794//32 795//45 770//45 +f 795//45 796//33 771//33 +f 796//33 797//46 772//46 +f 797//46 798//31 773//31 +f 798//31 799//43 774//43 +f 775//36 774//43 784//81 +f 774//43 799//43 784//81 +f 799//43 800//36 809//81 +f 724//44 725//34 761//48 +f 761//48 752//48 724//44 +f 752//48 741//34 740//44 +f 842//41 851//41 850//32 +f 822//42 838//42 837//35 +f 832//31 854//31 855//43 +f 823//29 839//29 838//42 +f 827//32 859//32 860//41 +f 816//43 863//43 864//31 +f 824//44 840//44 839//29 +f 829//33 857//33 858//45 +f 828//45 858//45 859//32 +f 830//46 856//46 857//33 +f 815//31 864//31 856//46 +f 819//30 835//30 834//47 +f 826//41 860//41 861//48 +f 820//49 836//49 835//30 +f 817//36 862//50 863//43 +f 821//35 837//35 836//49 +f 844//45 849//45 848//33 +f 846//46 847//46 854//31 +f 841//34 852//48 851//41 +f 831//43 855//43 853//50 +f 843//32 850//32 849//45 +f 845//33 848//33 847//46 +f 886//30 887//49 878//49 +f 882//44 883//82 867//34 +f 884//81 885//47 876//47 +f 889//42 881//29 865//29 +f 887//49 888//35 879//35 +f 881//29 882//44 866//44 +f 885//47 886//30 877//30 +f 888//35 889//42 880//42 +f 903//49 912//49 911//30 +f 892//34 908//82 907//44 +f 901//47 910//47 909//81 +f 890//29 906//29 914//42 +f 904//35 913//35 912//49 +f 891//44 907//44 906//29 +f 902//30 911//30 910//47 +f 905//42 914//42 913//35 +f 817//36 818//47 862//50 +f 818//47 834//47 862//50 +f 834//47 833//36 853//50 +f 868//41 867//34 883//82 +f 908//82 892//34 893//41 +f 868//41 883//82 908//82 +f 893//41 894//32 869//32 +f 894//32 895//45 870//45 +f 895//45 896//33 871//33 +f 896//33 897//46 872//46 +f 897//46 898//31 873//31 +f 898//31 899//43 874//43 +f 875//36 874//43 884//81 +f 874//43 899//43 884//81 +f 899//43 900//36 909//81 +f 824//44 825//34 861//48 +f 861//48 852//48 824//44 +f 852//48 841//34 840//44 +f 920//34 928//69 927//83 +f 918//35 926//70 925//66 +f 916//36 924//71 923//67 +f 915//31 923//67 930//68 +f 921//32 929//72 928//69 +f 919//29 927//83 926//70 +f 917//30 925//66 924//71 +f 922//33 930//68 929//72 +f 930//68 923//67 931//84 +f 928//69 929//72 937//75 +f 927//83 935//79 934//77 +f 925//66 933//80 932//78 +f 929//72 930//68 938//74 +f 927//83 928//69 936//76 +f 926//70 934//77 933//80 +f 924//71 932//78 931//84 +f 934//77 942//35 941//30 +f 932//78 940//36 939//31 +f 931//84 939//31 946//33 +f 937//75 945//32 944//34 +f 935//79 943//29 942//35 +f 933//80 941//30 940//36 +f 938//74 946//33 945//32 +f 936//76 944//34 943//29 +f 952//34 960//69 959//83 +f 950//35 958//70 957//66 +f 948//36 956//71 955//67 +f 947//31 955//67 962//68 +f 953//32 961//72 960//69 +f 951//29 959//83 958//70 +f 949//30 957//66 956//71 +f 954//33 962//68 961//72 +f 962//68 955//67 963//84 +f 960//69 961//72 969//75 +f 959//83 967//79 966//77 +f 957//66 965//80 964//78 +f 961//72 962//68 970//74 +f 959//83 960//69 968//76 +f 958//70 966//77 965//80 +f 956//71 964//78 963//84 +f 966//77 974//35 973//30 +f 964//78 972//36 971//31 +f 963//84 971//31 978//33 +f 969//75 977//32 976//34 +f 967//79 975//29 974//35 +f 965//80 973//30 972//36 +f 970//74 978//33 977//32 +f 968//76 976//34 975//29 +f 1015//85 1021//85 1020//27 +f 1013//86 1019//86 1017//87 +f 1016//88 1022//88 1021//85 +f 1014//27 1020//27 1019//86 +f 1012//87 1017//87 1018//28 +f 1011//28 1018//28 1022//88 +f 1079//85 1085//85 1084//27 +f 1077//86 1083//86 1081//87 +f 1080//88 1086//88 1085//85 +f 1078//27 1084//27 1083//86 +f 1076//87 1081//87 1082//28 +f 1075//28 1082//28 1086//88 +f 1137//32 1138//57 1130//57 +f 1135//27 1136//89 1128//89 +f 1133//30 1134//90 1126//90 +f 1131//28 1132//56 1124//56 +f 1138//57 1131//28 1123//28 +f 1136//89 1137//32 1129//32 +f 1134//90 1135//27 1127//27 +f 1132//56 1133//30 1125//30 +f 1153//32 1154//57 1146//57 +f 1151//27 1152//89 1144//89 +f 1149//30 1150//90 1142//90 +f 1147//28 1148//56 1140//56 +f 1154//57 1147//28 1139//28 +f 1152//89 1153//32 1145//32 +f 1150//90 1151//27 1143//27 +f 1148//56 1149//30 1141//30 +f 1177//32 1178//57 1170//57 +f 1175//27 1176//89 1168//89 +f 1173//30 1174//90 1166//90 +f 1171//28 1172//56 1164//56 +f 1178//57 1171//28 1163//28 +f 1176//89 1177//32 1169//32 +f 1174//90 1175//27 1167//27 +f 1172//56 1173//30 1165//30 +f 1193//32 1194//57 1186//57 +f 1191//27 1192//89 1184//89 +f 1189//30 1190//90 1182//90 +f 1187//28 1188//56 1180//56 +f 1194//57 1187//28 1179//28 +f 1192//89 1193//32 1185//32 +f 1190//90 1191//27 1183//27 +f 1188//56 1189//30 1181//30 +f 1206//91 1214//35 1213//30 +f 1204//93 1212//36 1211//31 +f 1203//37 1211//31 1218//33 +f 1209//95 1217//32 1216//34 +f 1207//97 1215//29 1214//35 +f 1205//92 1213//30 1212//36 +f 1210//94 1218//33 1217//32 +f 1208//96 1216//34 1215//29 +f 1222//98 1230//35 1229//30 +f 1220//100 1228//36 1227//31 +f 1219//101 1227//31 1234//33 +f 1225//103 1233//32 1232//34 +f 1223//38 1231//29 1230//35 +f 1221//99 1229//30 1228//36 +f 1226//102 1234//33 1233//32 +f 1224//104 1232//34 1231//29 +f 1245//105 1246//111 1241//106 +f 1247//108 1248//112 1239//109 +f 1209//95 1208//96 1246//111 +f 1205//92 1249//115 1248//112 +f 1208//96 1207//97 1247//108 +f 1209//95 1245//105 1244//113 +f 1205//92 1204//93 1250//114 +f 1206//91 1248//112 1247//108 +f 1249//115 1238//118 1239//109 +f 1246//111 1247//108 1240//110 +f 1245//105 1242//107 1243//116 +f 1249//115 1250//114 1237//117 +f 1220//100 1235//123 1251//119 +f 1225//103 1254//125 1255//120 +f 1221//99 1251//119 1252//121 +f 1220//100 1219//101 1236//122 +f 1226//102 1255//120 1236//122 +f 1225//103 1224//104 1253//124 +f 1255//120 1254//125 1261//126 +f 1252//121 1251//119 1258//128 +f 1236//122 1257//131 1256//130 +f 1236//122 1255//120 1262//127 +f 1254//125 1253//124 1260//132 +f 1235//123 1256//130 1258//128 +f 1242//107 1261//126 1260//132 +f 1243//116 1260//132 1223//38 +f 1259//129 1237//117 1203//37 +f 1237//117 1259//129 1258//128 +f 1238//118 1258//128 1256//130 +f 1239//109 1256//130 1257//131 +f 1240//110 1257//131 1262//127 +f 1241//106 1262//127 1261//126 +f 1266//91 1274//35 1273//30 +f 1264//93 1272//36 1271//31 +f 1263//37 1271//31 1278//33 +f 1269//95 1277//32 1276//34 +f 1267//97 1275//29 1274//35 +f 1265//92 1273//30 1272//36 +f 1270//94 1278//33 1277//32 +f 1268//96 1276//34 1275//29 +f 1282//98 1290//35 1289//30 +f 1280//100 1288//36 1287//31 +f 1279//101 1287//31 1294//33 +f 1285//103 1293//32 1292//34 +f 1283//38 1291//29 1290//35 +f 1281//99 1289//30 1288//36 +f 1286//102 1294//33 1293//32 +f 1284//104 1292//34 1291//29 +f 1305//105 1306//133 1301//106 +f 1307//108 1308//112 1299//109 +f 1268//96 1306//133 1305//105 +f 1265//92 1309//115 1308//112 +f 1267//97 1307//108 1306//133 +f 1269//95 1305//105 1304//113 +f 1265//92 1264//93 1310//114 +f 1266//91 1308//112 1307//108 +f 1309//115 1298//118 1299//109 +f 1306//133 1307//108 1300//110 +f 1305//105 1302//107 1303//116 +f 1309//115 1310//114 1297//117 +f 1280//100 1295//123 1311//119 +f 1285//103 1314//125 1315//134 +f 1281//99 1311//119 1312//121 +f 1280//100 1279//101 1296//122 +f 1286//102 1315//134 1296//122 +f 1285//103 1284//104 1313//124 +f 1315//134 1314//125 1321//126 +f 1312//121 1311//119 1318//128 +f 1296//122 1317//131 1316//130 +f 1296//122 1315//134 1322//127 +f 1314//125 1313//124 1320//132 +f 1295//123 1316//130 1318//128 +f 1302//107 1321//126 1320//132 +f 1303//116 1320//132 1283//38 +f 1319//129 1297//117 1263//37 +f 1297//117 1319//129 1318//128 +f 1298//118 1318//128 1316//130 +f 1299//109 1316//130 1317//131 +f 1300//110 1317//131 1322//127 +f 1301//106 1322//127 1321//126 +f 1326//91 1334//35 1333//30 +f 1324//93 1332//36 1331//31 +f 1323//37 1331//31 1338//33 +f 1329//95 1337//32 1336//34 +f 1327//97 1335//29 1334//35 +f 1325//92 1333//30 1332//36 +f 1330//94 1338//33 1337//32 +f 1328//96 1336//34 1335//29 +f 1342//98 1350//35 1349//30 +f 1340//100 1348//36 1347//31 +f 1339//101 1347//31 1354//33 +f 1345//103 1353//32 1352//34 +f 1343//38 1351//29 1350//35 +f 1341//99 1349//30 1348//36 +f 1346//102 1354//33 1353//32 +f 1344//104 1352//34 1351//29 +f 1365//105 1366//133 1361//106 +f 1367//108 1368//112 1359//109 +f 1328//96 1366//133 1365//105 +f 1325//92 1369//115 1368//112 +f 1328//96 1327//97 1367//108 +f 1329//95 1365//105 1364//113 +f 1325//92 1324//93 1370//114 +f 1326//91 1368//112 1367//108 +f 1369//115 1358//118 1359//109 +f 1366//133 1367//108 1360//110 +f 1365//105 1362//107 1363//116 +f 1369//115 1370//114 1357//117 +f 1340//100 1355//135 1371//119 +f 1346//102 1345//103 1374//125 +f 1341//99 1371//119 1372//121 +f 1340//100 1339//101 1356//122 +f 1346//102 1375//134 1356//122 +f 1345//103 1344//104 1373//124 +f 1375//134 1374//125 1381//126 +f 1372//121 1371//119 1378//128 +f 1356//122 1377//131 1376//130 +f 1356//122 1375//134 1382//127 +f 1373//124 1380//132 1381//126 +f 1355//135 1376//130 1378//128 +f 1362//107 1381//126 1380//132 +f 1363//116 1380//132 1343//38 +f 1379//129 1357//117 1323//37 +f 1357//117 1379//129 1378//128 +f 1358//118 1378//128 1376//130 +f 1359//109 1376//130 1377//131 +f 1360//110 1377//131 1382//127 +f 1361//106 1382//127 1381//126 +f 1398//33 1391//31 1383//31 +f 1396//34 1397//32 1389//32 +f 1394//35 1395//29 1387//29 +f 1392//36 1393//30 1385//30 +f 1397//32 1398//33 1390//33 +f 1395//29 1396//34 1388//34 +f 1393//30 1394//35 1386//35 +f 1391//31 1392//36 1384//36 +f 1521//32 1522//57 1514//57 +f 1519//27 1520//89 1512//89 +f 1517//30 1518//90 1510//90 +f 1515//28 1516//56 1508//56 +f 1522//57 1515//28 1507//28 +f 1520//89 1521//32 1513//32 +f 1518//90 1519//27 1511//27 +f 1516//56 1517//30 1509//30 +f 1537//32 1538//57 1530//57 +f 1535//27 1536//89 1528//89 +f 1533//30 1534//90 1526//90 +f 1531//28 1532//56 1524//56 +f 1538//57 1531//28 1523//28 +f 1536//89 1537//32 1529//32 +f 1534//90 1535//27 1527//27 +f 1532//56 1533//30 1525//30 +f 1554//33 1562//33 1561//32 +f 1552//34 1560//34 1559//29 +f 1550//35 1558//35 1557//30 +f 1548//36 1556//36 1555//31 +f 1547//31 1555//31 1562//33 +f 1553//32 1561//32 1560//34 +f 1551//29 1559//29 1558//35 +f 1549//30 1557//30 1556//36 +f 1570//33 1578//33 1577//32 +f 1568//34 1576//34 1575//29 +f 1566//35 1574//35 1573//30 +f 1564//36 1572//36 1571//31 +f 1563//31 1571//31 1578//33 +f 1569//32 1577//32 1576//34 +f 1567//29 1575//29 1574//35 +f 1565//30 1573//30 1572//36 +f 1586//33 1594//33 1593//32 +f 1584//34 1592//34 1591//29 +f 1582//35 1590//35 1589//30 +f 1580//36 1588//36 1587//31 +f 1579//31 1587//31 1594//33 +f 1585//32 1593//32 1592//34 +f 1583//29 1591//29 1590//35 +f 1581//30 1589//30 1588//36 +f 1602//33 1610//33 1609//32 +f 1600//34 1608//34 1607//29 +f 1598//35 1606//35 1605//30 +f 1596//36 1604//36 1603//31 +f 1595//31 1603//31 1610//33 +f 1601//32 1609//32 1608//34 +f 1599//29 1607//29 1606//35 +f 1597//30 1605//30 1604//36 +f 1612//136 1613//39 1625//39 +f 1620//32 1632//32 1631//137 +f 1617//29 1629//29 1628//138 +f 1614//30 1626//30 1625//39 +f 1621//40 1633//40 1632//32 +f 1618//139 1630//139 1629//29 +f 1615//140 1627//140 1626//30 +f 1622//141 1634//141 1633//40 +f 1612//136 1623//136 1624//31 +f 1619//137 1631//137 1630//139 +f 1616//138 1628//138 1627//140 +f 1611//31 1624//31 1634//141 +f 1636//136 1637//39 1649//39 +f 1644//32 1656//32 1655//137 +f 1641//29 1653//29 1652//138 +f 1638//30 1650//30 1649//39 +f 1645//40 1657//40 1656//32 +f 1642//139 1654//139 1653//29 +f 1639//140 1651//140 1650//30 +f 1646//141 1658//141 1657//40 +f 1636//136 1647//136 1648//31 +f 1643//137 1655//137 1654//139 +f 1640//138 1652//138 1651//140 +f 1635//31 1648//31 1658//141 +f 1770//142 1794//142 1784//27 +f 1722//142 1746//142 1736//27 +f 1702//30 1726//30 1727//86 +f 1709//88 1733//88 1734//143 +f 1699//28 1724//28 1723//144 +f 1706//145 1730//145 1731//85 +f 1703//86 1727//86 1728//142 +f 1710//143 1734//143 1724//28 +f 1700//144 1723//144 1725//87 +f 1707//85 1731//85 1732//32 +f 1704//142 1728//142 1729//27 +f 1701//87 1725//87 1726//30 +f 1708//32 1732//32 1733//88 +f 1705//27 1729//27 1730//145 +f 1750//30 1774//30 1775//86 +f 1711//145 1735//145 1737//85 +f 1719//87 1743//87 1744//30 +f 1716//143 1740//143 1741//28 +f 1713//85 1737//85 1738//32 +f 1720//30 1744//30 1745//86 +f 1717//28 1741//28 1742//144 +f 1714//32 1738//32 1739//88 +f 1721//86 1745//86 1746//142 +f 1712//27 1736//27 1735//145 +f 1718//144 1742//144 1743//87 +f 1715//88 1739//88 1740//143 +f 1757//88 1781//88 1782//143 +f 1747//28 1772//28 1771//144 +f 1754//145 1778//145 1779//85 +f 1751//86 1775//86 1776//142 +f 1758//143 1782//143 1772//28 +f 1748//144 1771//144 1773//87 +f 1755//85 1779//85 1780//32 +f 1752//142 1776//142 1777//27 +f 1749//87 1773//87 1774//30 +f 1756//32 1780//32 1781//88 +f 1753//27 1777//27 1778//145 +f 1759//145 1783//145 1785//85 +f 1767//87 1791//87 1792//30 +f 1764//143 1788//143 1789//28 +f 1761//85 1785//85 1786//32 +f 1768//30 1792//30 1793//86 +f 1765//28 1789//28 1790//144 +f 1762//32 1786//32 1787//88 +f 1769//86 1793//86 1794//142 +f 1760//27 1784//27 1783//145 +f 1766//144 1790//144 1791//87 +f 1763//88 1787//88 1788//143 +f 1801//146 1800//147 1812//147 +f 1798//148 1797//149 1809//149 +f 1804//150 1816//150 1817//151 +f 1802//152 1801//146 1813//146 +f 1798//148 1810//148 1811//153 +f 1806//154 1805//151 1817//151 +f 1795//155 1808//155 1807//156 +f 1802//152 1814//152 1815//157 +f 1799//153 1811//153 1812//147 +f 1806//154 1818//154 1808//155 +f 1796//156 1807//156 1809//149 +f 1804//150 1803//157 1815//157 +f 1825//158 1824//159 1836//159 +f 1822//160 1821//161 1833//161 +f 1828//162 1840//162 1841//163 +f 1825//158 1837//158 1838//164 +f 1823//165 1822//160 1834//160 +f 1830//166 1829//163 1841//163 +f 1819//167 1832//167 1831//168 +f 1827//169 1826//164 1838//164 +f 1824//159 1823//165 1835//165 +f 1830//166 1842//166 1832//167 +f 1820//168 1831//168 1833//161 +f 1828//162 1827//169 1839//169 +f 1873//27 1874//122 1866//122 +f 1871//29 1872//108 1864//108 +f 1869//28 1870//38 1862//38 +f 1867//31 1868//37 1860//37 +f 1874//122 1867//31 1859//31 +f 1872//108 1873//27 1865//27 +f 1870//38 1871//29 1863//29 +f 1868//37 1869//28 1861//28 +f 1889//27 1890//122 1882//122 +f 1887//29 1888//108 1880//108 +f 1885//28 1886//38 1878//38 +f 1883//31 1884//37 1876//37 +f 1890//122 1883//31 1875//31 +f 1888//108 1889//27 1881//27 +f 1886//38 1887//29 1879//29 +f 1884//37 1885//28 1877//28 +f 1905//170 1906//173 1898//122 +f 1903//171 1904//174 1896//108 +f 1901//172 1902//175 1894//38 +f 1899//33 1900//176 1892//37 +f 1906//173 1899//33 1891//31 +f 1904//174 1905//170 1897//27 +f 1902//175 1903//171 1895//29 +f 1900//176 1901//172 1893//28 +f 1904//174 1911//181 1912//177 +f 1903//171 1902//175 1909//178 +f 1900//176 1907//182 1908//179 +f 1905//170 1912//177 1913//180 +f 1903//171 1910//35 1911//181 +f 1901//172 1908//179 1909//178 +f 1907//182 1914//189 1915//183 +f 1913//180 1912//177 1919//184 +f 1911//181 1910//35 1917//186 +f 1908//179 1915//183 1916//188 +f 1911//181 1918//187 1919//184 +f 1909//178 1916//188 1917//186 +f 1920//185 1928//89 1921//32 +f 1919//184 1927//27 1928//89 +f 1899//33 1921//32 1922//57 +f 1917//186 1925//30 1926//90 +f 1915//183 1923//28 1924//56 +f 1918//187 1926//90 1927//27 +f 1916//188 1924//56 1925//30 +f 1914//189 1922//57 1923//28 +f 1943//190 1942//193 1949//181 +f 1941//42 1940//194 1947//178 +f 1939//191 1938//196 1945//182 +f 1943//190 1950//177 1951//180 +f 1941//42 1948//35 1949//181 +f 1939//191 1946//179 1947//178 +f 1945//182 1952//189 1953//183 +f 1950//177 1957//184 1958//185 +f 1949//181 1948//35 1955//186 +f 1946//179 1953//183 1954//188 +f 1949//181 1956//187 1957//184 +f 1947//178 1954//188 1955//186 +f 1958//185 1966//198 1959//197 +f 1957//184 1965//202 1966//198 +f 1937//195 1959//197 1960//199 +f 1955//186 1963//35 1964//200 +f 1953//183 1961//203 1962//201 +f 1956//187 1964//200 1965//202 +f 1954//188 1962//201 1963//35 +f 1952//189 1960//199 1961//203 +f 1982//122 1975//31 1967//31 +f 1980//108 1981//27 1973//27 +f 1978//38 1979//29 1971//29 +f 1976//37 1977//28 1969//28 +f 1981//27 1982//122 1974//122 +f 1979//29 1980//108 1972//108 +f 1977//28 1978//38 1970//38 +f 1975//31 1976//37 1968//37 +f 1961//203 1985//207 1986//204 +f 1959//197 1983//33 1984//205 +f 1964//200 1987//216 1988//206 +f 1960//199 1984//205 1985//207 +f 1959//197 1966//198 1989//208 +f 1966//198 1965//202 1988//206 +f 1989//208 1996//210 1990//209 +f 1988//206 1995//214 1996//210 +f 1985//207 1992//215 1993//211 +f 1983//33 1990//209 1991//212 +f 1988//206 1987//216 1994//213 +f 1985//207 1984//205 1991//212 +f 1963//35 1997//29 2002//108 +f 1996//210 2004//122 1998//31 +f 1993//211 2001//38 1997//29 +f 1995//214 2003//27 2004//122 +f 1992//215 2000//28 2001//38 +f 1990//209 1998//31 1999//37 +f 1994//213 2002//108 2003//27 +f 1991//212 1999//37 2000//28 +f 2012//89 2020//198 2013//197 +f 2011//27 2019//202 2020//198 +f 2005//32 2013//197 2014//199 +f 2009//30 2017//35 2018//200 +f 2007//28 2015//203 2016//201 +f 2010//90 2018//200 2019//202 +f 2008//56 2016//201 2017//35 +f 2006//57 2014//199 2015//203 +f 2015//203 2023//207 2024//204 +f 2013//197 2021//33 2022//205 +f 2019//202 2018//200 2025//216 +f 2014//199 2022//205 2023//207 +f 2013//197 2020//198 2027//208 +f 2020//198 2019//202 2026//206 +f 2021//33 2027//208 2034//210 +f 2026//206 2033//214 2034//210 +f 2024//204 2023//207 2030//215 +f 2021//33 2028//209 2029//212 +f 2025//216 2032//213 2033//214 +f 2023//207 2022//205 2029//212 +f 2017//35 2035//29 2040//108 +f 2034//210 2042//122 2036//31 +f 2031//211 2039//38 2035//29 +f 2033//214 2041//27 2042//122 +f 2030//215 2038//28 2039//38 +f 2028//209 2036//31 2037//37 +f 2032//213 2040//108 2041//27 +f 2029//212 2037//37 2038//28 +f 2249//29 2261//29 2260//138 +f 2246//30 2258//30 2257//39 +f 2253//40 2265//40 2264//32 +f 2250//139 2262//139 2261//29 +f 2247//140 2259//140 2258//30 +f 2256//31 2271//31 2270//217 +f 2266//141 2272//218 2271//31 +f 2251//137 2263//137 2262//139 +f 2248//138 2260//138 2259//140 +f 2244//136 2268//217 2267//31 +f 2243//31 2267//31 2269//218 +f 2252//32 2264//32 2263//137 +f 2244//136 2245//39 2268//217 +f 2245//39 2257//39 2268//217 +f 2257//39 2255//136 2270//217 +f 2253//40 2254//141 2269//218 +f 2272//218 2266//141 2265//40 +f 2253//40 2269//218 2272//218 +f 2287//219 2285//29 2273//29 +f 2285//29 2286//220 2274//139 +f 2288//29 2300//29 2302//219 +f 2289//139 2301//220 2300//29 +f 2297//30 2298//140 2283//140 +f 2296//39 2297//30 2282//30 +f 2295//136 2296//39 2281//39 +f 2294//31 2295//136 2280//136 +f 2293//141 2294//31 2279//31 +f 2292//40 2293//141 2278//141 +f 2291//32 2292//40 2277//40 +f 2290//137 2291//32 2276//32 +f 2275//137 2274//139 2286//220 +f 2286//220 2301//220 2275//137 +f 2301//220 2289//139 2290//137 +f 2284//138 2283//140 2287//219 +f 2283//140 2298//140 2287//219 +f 2298//140 2299//138 2302//219 +f 2308//138 2320//138 2321//29 +f 2305//39 2317//39 2318//30 +f 2312//32 2324//32 2325//40 +f 2309//29 2321//29 2322//139 +f 2306//30 2318//30 2319//140 +f 2313//40 2325//40 2326//141 +f 2303//31 2316//31 2315//136 +f 2310//139 2322//139 2323//137 +f 2307//140 2319//140 2320//138 +f 2314//141 2326//141 2316//31 +f 2304//136 2315//136 2317//39 +f 2311//137 2323//137 2324//32 +f 2336//32 2348//32 2347//137 +f 2333//29 2345//29 2344//138 +f 2330//30 2342//30 2341//39 +f 2337//40 2349//40 2348//32 +f 2334//139 2346//139 2345//29 +f 2331//140 2343//140 2342//30 +f 2338//141 2350//141 2349//40 +f 2328//136 2340//136 2339//31 +f 2335//137 2347//137 2346//139 +f 2332//138 2344//138 2343//140 +f 2327//31 2339//31 2350//141 +f 2329//39 2341//39 2340//136 +f 2358//139 2370//139 2369//29 +f 2355//140 2367//140 2366//30 +f 2362//141 2374//141 2373//40 +f 2352//136 2364//136 2363//31 +f 2359//137 2371//137 2370//139 +f 2356//138 2368//138 2367//140 +f 2351//31 2363//31 2374//141 +f 2353//39 2365//39 2364//136 +f 2360//32 2372//32 2371//137 +f 2357//29 2369//29 2368//138 +f 2354//30 2366//30 2365//39 +f 2361//40 2373//40 2372//32 +f 2374//221 2363//37 2375//37 +f 2364//222 2376//222 2375//37 +f 2365//223 2377//223 2376//222 +f 2365//223 2366//56 2378//56 +f 2367//224 2379//224 2378//56 +f 2368//225 2380//225 2379//224 +f 2369//38 2381//38 2380//225 +f 2370//226 2382//226 2381//38 +f 2371//227 2383//227 2382//226 +f 2371//227 2372//57 2384//57 +f 2373//228 2385//228 2384//57 +f 2373//228 2374//221 2386//221 +f 2388//40 2856//40 2857//32 +f 2395//30 2863//30 2864//39 +f 2392//29 2860//29 2861//138 +f 2389//32 2857//32 2858//137 +f 2396//39 2864//39 2865//136 +f 2398//31 2866//31 2855//141 +f 2393//138 2861//138 2862//140 +f 2390//137 2858//137 2859//139 +f 2397//136 2865//136 2866//31 +f 2387//141 2855//141 2856//40 +f 2394//140 2862//140 2863//30 +f 2391//139 2859//139 2860//29 +f 2405//29 2417//29 2416//138 +f 2402//30 2414//30 2413//39 +f 2409//40 2421//40 2420//32 +f 2406//139 2418//139 2417//29 +f 2403//140 2415//140 2414//30 +f 2412//31 2427//31 2426//217 +f 2422//141 2428//218 2427//31 +f 2407//137 2419//137 2418//139 +f 2404//138 2416//138 2415//140 +f 2400//136 2424//217 2423//31 +f 2399//31 2423//31 2425//218 +f 2408//32 2420//32 2419//137 +f 2400//136 2401//39 2424//217 +f 2401//39 2413//39 2424//217 +f 2413//39 2411//136 2426//217 +f 2409//40 2410//141 2425//218 +f 2428//218 2422//141 2421//40 +f 2409//40 2425//218 2428//218 +f 2443//219 2441//29 2429//29 +f 2441//29 2442//220 2430//139 +f 2444//29 2456//29 2458//219 +f 2445//139 2457//220 2456//29 +f 2453//30 2454//140 2439//140 +f 2452//39 2453//30 2438//30 +f 2451//136 2452//39 2437//39 +f 2450//31 2451//136 2436//136 +f 2449//141 2450//31 2435//31 +f 2448//40 2449//141 2434//141 +f 2447//32 2448//40 2433//40 +f 2446//137 2447//32 2432//32 +f 2431//137 2430//139 2442//220 +f 2442//220 2457//220 2431//137 +f 2457//220 2445//139 2446//137 +f 2440//138 2439//140 2443//219 +f 2439//140 2454//140 2443//219 +f 2454//140 2455//138 2458//219 +f 2464//138 2476//138 2477//29 +f 2461//39 2473//39 2474//30 +f 2468//32 2480//32 2481//40 +f 2465//29 2477//29 2478//139 +f 2462//30 2474//30 2475//140 +f 2469//40 2481//40 2482//141 +f 2459//31 2472//31 2471//136 +f 2466//139 2478//139 2479//137 +f 2463//140 2475//140 2476//138 +f 2470//141 2482//141 2472//31 +f 2460//136 2471//136 2473//39 +f 2467//137 2479//137 2480//32 +f 2492//32 2504//32 2503//137 +f 2489//29 2501//29 2500//138 +f 2486//30 2498//30 2497//39 +f 2493//40 2505//40 2504//32 +f 2490//139 2502//139 2501//29 +f 2487//140 2499//140 2498//30 +f 2494//141 2506//141 2505//40 +f 2484//136 2496//136 2495//31 +f 2491//137 2503//137 2502//139 +f 2488//138 2500//138 2499//140 +f 2483//31 2495//31 2506//141 +f 2485//39 2497//39 2496//136 +f 2532//228 2531//221 2519//221 +f 2532//228 2520//228 2521//57 +f 2534//227 2533//57 2521//57 +f 2534//227 2522//227 2523//226 +f 2535//226 2523//226 2524//38 +f 2536//38 2524//38 2525//225 +f 2537//225 2525//225 2526//224 +f 2538//224 2526//224 2527//56 +f 2540//223 2539//56 2527//56 +f 2541//222 2540//223 2528//223 +f 2541//222 2529//222 2530//37 +f 2531//221 2542//37 2530//37 +f 2544//40 2532//40 2533//32 +f 2551//30 2539//30 2540//39 +f 2548//29 2536//29 2537//138 +f 2545//32 2533//32 2534//137 +f 2552//39 2540//39 2541//136 +f 2554//31 2542//31 2531//141 +f 2549//138 2537//138 2538//140 +f 2546//137 2534//137 2535//139 +f 2553//136 2541//136 2542//31 +f 2543//141 2531//141 2532//40 +f 2550//140 2538//140 2539//30 +f 2547//139 2535//139 2536//29 +f 2705//138 2680//138 2679//140 +f 2710//31 2675//31 2686//141 +f 2708//39 2677//39 2676//136 +f 2701//32 2684//32 2683//137 +f 2704//29 2681//29 2680//138 +f 2707//30 2678//30 2677//39 +f 2700//40 2685//40 2684//32 +f 2703//139 2682//139 2681//29 +f 2706//140 2679//140 2678//30 +f 2699//141 2686//141 2685//40 +f 2709//136 2676//136 2675//31 +f 2702//137 2683//137 2682//139 +f 2561//29 2573//29 2572//138 +f 2558//30 2570//30 2569//39 +f 2565//40 2577//40 2576//32 +f 2562//139 2574//139 2573//29 +f 2559//140 2571//140 2570//30 +f 2568//31 2583//31 2582//217 +f 2578//141 2584//218 2583//31 +f 2563//137 2575//137 2574//139 +f 2560//138 2572//138 2571//140 +f 2556//136 2580//217 2579//31 +f 2555//31 2579//31 2581//218 +f 2564//32 2576//32 2575//137 +f 2556//136 2557//39 2580//217 +f 2557//39 2569//39 2580//217 +f 2569//39 2567//136 2582//217 +f 2565//40 2566//141 2581//218 +f 2584//218 2578//141 2577//40 +f 2565//40 2581//218 2584//218 +f 2599//219 2597//29 2585//29 +f 2597//29 2598//220 2586//139 +f 2600//29 2612//29 2614//219 +f 2601//139 2613//220 2612//29 +f 2609//30 2610//140 2595//140 +f 2608//39 2609//30 2594//30 +f 2607//136 2608//39 2593//39 +f 2606//31 2607//136 2592//136 +f 2605//141 2606//31 2591//31 +f 2604//40 2605//141 2590//141 +f 2603//32 2604//40 2589//40 +f 2602//137 2603//32 2588//32 +f 2587//137 2586//139 2598//220 +f 2598//220 2613//220 2587//137 +f 2613//220 2601//139 2602//137 +f 2596//138 2595//140 2599//219 +f 2595//140 2610//140 2599//219 +f 2610//140 2611//138 2614//219 +f 2620//138 2632//138 2633//29 +f 2617//39 2629//39 2630//30 +f 2624//32 2636//32 2637//40 +f 2621//29 2633//29 2634//139 +f 2618//30 2630//30 2631//140 +f 2625//40 2637//40 2638//141 +f 2615//31 2628//31 2627//136 +f 2622//139 2634//139 2635//137 +f 2619//140 2631//140 2632//138 +f 2626//141 2638//141 2628//31 +f 2616//136 2627//136 2629//39 +f 2623//137 2635//137 2636//32 +f 2648//32 2660//32 2659//137 +f 2645//29 2657//29 2656//138 +f 2642//30 2654//30 2653//39 +f 2649//40 2661//40 2660//32 +f 2646//139 2658//139 2657//29 +f 2643//140 2655//140 2654//30 +f 2650//141 2662//141 2661//40 +f 2640//136 2652//136 2651//31 +f 2647//137 2659//137 2658//139 +f 2644//138 2656//138 2655//140 +f 2639//31 2651//31 2662//141 +f 2641//39 2653//39 2652//136 +f 2698//229 2686//229 2675//122 +f 2675//122 2676//230 2688//230 +f 2676//230 2677//231 2689//231 +f 2689//231 2677//231 2678//90 +f 2678//90 2679//232 2691//232 +f 2691//232 2679//232 2680//233 +f 2680//233 2681//108 2693//108 +f 2681//108 2682//234 2694//234 +f 2694//234 2682//234 2683//235 +f 2695//235 2683//235 2684//89 +f 2684//89 2685//236 2697//236 +f 2685//236 2686//229 2698//229 +f 2694//139 2670//139 2669//29 +f 2691//140 2667//140 2666//30 +f 2698//141 2674//141 2673//40 +f 2688//136 2664//136 2663//31 +f 2695//137 2671//137 2670//139 +f 2692//138 2668//138 2667//140 +f 2687//31 2663//31 2674//141 +f 2689//39 2665//39 2664//136 +f 2696//32 2672//32 2671//137 +f 2693//29 2669//29 2668//138 +f 2690//30 2666//30 2665//39 +f 2697//40 2673//40 2672//32 +f 2819//221 2699//221 2700//228 +f 2820//228 2700//228 2701//57 +f 2822//227 2821//57 2701//57 +f 2823//226 2822//227 2702//227 +f 2823//226 2703//226 2704//38 +f 2824//38 2704//38 2705//225 +f 2825//225 2705//225 2706//224 +f 2826//224 2706//224 2707//56 +f 2828//223 2827//56 2707//56 +f 2828//223 2708//223 2709//222 +f 2829//222 2709//222 2710//37 +f 2819//221 2830//37 2710//37 +f 2717//29 2729//29 2728//138 +f 2714//30 2726//30 2725//39 +f 2721//40 2733//40 2732//32 +f 2718//139 2730//139 2729//29 +f 2715//140 2727//140 2726//30 +f 2724//31 2739//31 2738//217 +f 2734//141 2740//218 2739//31 +f 2719//137 2731//137 2730//139 +f 2716//138 2728//138 2727//140 +f 2712//136 2736//217 2735//31 +f 2711//31 2735//31 2737//218 +f 2720//32 2732//32 2731//137 +f 2712//136 2713//39 2736//217 +f 2713//39 2725//39 2736//217 +f 2725//39 2723//136 2738//217 +f 2721//40 2722//141 2737//218 +f 2740//218 2734//141 2733//40 +f 2721//40 2737//218 2740//218 +f 2755//219 2753//29 2741//29 +f 2753//29 2754//220 2742//139 +f 2756//29 2768//29 2770//219 +f 2757//139 2769//220 2768//29 +f 2765//30 2766//140 2751//140 +f 2764//39 2765//30 2750//30 +f 2763//136 2764//39 2749//39 +f 2762//31 2763//136 2748//136 +f 2761//141 2762//31 2747//31 +f 2760//40 2761//141 2746//141 +f 2759//32 2760//40 2745//40 +f 2758//137 2759//32 2744//32 +f 2743//137 2742//139 2754//220 +f 2754//220 2769//220 2743//137 +f 2769//220 2757//139 2758//137 +f 2752//138 2751//140 2755//219 +f 2751//140 2766//140 2755//219 +f 2766//140 2767//138 2770//219 +f 2776//138 2788//138 2789//29 +f 2773//39 2785//39 2786//30 +f 2780//32 2792//32 2793//40 +f 2777//29 2789//29 2790//139 +f 2774//30 2786//30 2787//140 +f 2781//40 2793//40 2794//141 +f 2771//31 2784//31 2783//136 +f 2778//139 2790//139 2791//137 +f 2775//140 2787//140 2788//138 +f 2782//141 2794//141 2784//31 +f 2772//136 2783//136 2785//39 +f 2779//137 2791//137 2792//32 +f 2804//32 2816//32 2815//137 +f 2801//29 2813//29 2812//138 +f 2798//30 2810//30 2809//39 +f 2805//40 2817//40 2816//32 +f 2802//139 2814//139 2813//29 +f 2799//140 2811//140 2810//30 +f 2806//141 2818//141 2817//40 +f 2796//136 2808//136 2807//31 +f 2803//137 2815//137 2814//139 +f 2800//138 2812//138 2811//140 +f 2795//31 2807//31 2818//141 +f 2797//39 2809//39 2808//136 +f 2832//40 2820//40 2821//32 +f 2839//30 2827//30 2828//39 +f 2836//29 2824//29 2825//138 +f 2833//32 2821//32 2822//137 +f 2840//39 2828//39 2829//136 +f 2842//31 2830//31 2819//141 +f 2837//138 2825//138 2826//140 +f 2834//137 2822//137 2823//139 +f 2841//136 2829//136 2830//31 +f 2831//141 2819//141 2820//40 +f 2838//140 2826//140 2827//30 +f 2835//139 2823//139 2824//29 +f 2388//236 2844//236 2843//229 +f 2845//89 2844//236 2388//236 +f 2390//235 2846//235 2845//89 +f 2847//234 2846//235 2390//235 +f 2848//108 2847//234 2391//234 +f 2849//233 2848//108 2392//108 +f 2850//232 2849//233 2393//233 +f 2851//90 2850//232 2394//232 +f 2396//231 2852//231 2851//90 +f 2397//230 2853//230 2852//231 +f 2854//122 2853//230 2397//230 +f 2387//229 2843//229 2854//122 +f 2383//137 2846//137 2847//139 +f 2376//136 2853//136 2854//31 +f 2386//141 2843//141 2844//40 +f 2379//140 2850//140 2851//30 +f 2382//139 2847//139 2848//29 +f 2385//40 2844//40 2845//32 +f 2378//30 2851//30 2852//39 +f 2381//29 2848//29 2849//138 +f 2384//32 2845//32 2846//137 +f 2377//39 2852//39 2853//136 +f 2375//31 2854//31 2843//141 +f 2380//138 2849//138 2850//140 +f 2517//40 2952//40 2953//32 +f 2510//30 2959//30 2960//39 +f 2513//29 2956//29 2957//138 +f 2516//32 2953//32 2954//137 +f 2509//39 2960//39 2961//136 +f 2507//31 2962//31 2951//141 +f 2512//138 2957//138 2958//140 +f 2515//137 2954//137 2955//139 +f 2508//136 2961//136 2962//31 +f 2518//141 2951//141 2952//40 +f 2511//140 2958//140 2959//30 +f 2514//139 2955//139 2956//29 +f 2909//138 2884//138 2883//140 +f 2914//31 2879//31 2890//141 +f 2912//39 2881//39 2880//136 +f 2905//32 2888//32 2887//137 +f 2908//29 2885//29 2884//138 +f 2911//30 2882//30 2881//39 +f 2904//40 2889//40 2888//32 +f 2907//139 2886//139 2885//29 +f 2910//140 2883//140 2882//30 +f 2903//141 2890//141 2889//40 +f 2913//136 2880//136 2879//31 +f 2906//137 2887//137 2886//139 +f 2902//229 2890//229 2879//122 +f 2879//122 2880//230 2892//230 +f 2880//230 2881//231 2893//231 +f 2893//231 2881//231 2882//90 +f 2882//90 2883//232 2895//232 +f 2895//232 2883//232 2884//233 +f 2884//233 2885//108 2897//108 +f 2885//108 2886//234 2898//234 +f 2898//234 2886//234 2887//235 +f 2899//235 2887//235 2888//89 +f 2888//89 2889//236 2901//236 +f 2889//236 2890//229 2902//229 +f 2898//139 2874//139 2873//29 +f 2895//140 2871//140 2870//30 +f 2902//141 2878//141 2877//40 +f 2892//136 2868//136 2867//31 +f 2899//137 2875//137 2874//139 +f 2896//138 2872//138 2871//140 +f 2891//31 2867//31 2878//141 +f 2893//39 2869//39 2868//136 +f 2900//32 2876//32 2875//137 +f 2897//29 2873//29 2872//138 +f 2894//30 2870//30 2869//39 +f 2901//40 2877//40 2876//32 +f 2915//221 2903//221 2904//228 +f 2916//228 2904//228 2905//57 +f 2918//227 2917//57 2905//57 +f 2919//226 2918//227 2906//227 +f 2919//226 2907//226 2908//38 +f 2920//38 2908//38 2909//225 +f 2921//225 2909//225 2910//224 +f 2922//224 2910//224 2911//56 +f 2924//223 2923//56 2911//56 +f 2924//223 2912//223 2913//222 +f 2925//222 2913//222 2914//37 +f 2915//221 2926//37 2914//37 +f 2928//40 2916//40 2917//32 +f 2935//30 2923//30 2924//39 +f 2932//29 2920//29 2921//138 +f 2929//32 2917//32 2918//137 +f 2936//39 2924//39 2925//136 +f 2938//31 2926//31 2915//141 +f 2933//138 2921//138 2922//140 +f 2930//137 2918//137 2919//139 +f 2937//136 2925//136 2926//31 +f 2927//141 2915//141 2916//40 +f 2934//140 2922//140 2923//30 +f 2931//139 2919//139 2920//29 +f 2517//236 2940//236 2939//229 +f 2941//89 2940//236 2517//236 +f 2515//235 2942//237 2941//89 +f 2943//234 2942//237 2515//235 +f 2944//108 2943//234 2514//234 +f 2945//233 2944//108 2513//108 +f 2946//232 2945//233 2512//233 +f 2947//90 2946//232 2511//232 +f 2509//231 2948//231 2947//90 +f 2508//230 2949//230 2948//231 +f 2950//122 2949//230 2508//230 +f 2518//229 2939//229 2950//122 +f 2522//137 2942//137 2943//139 +f 2529//136 2949//136 2950//31 +f 2519//141 2939//141 2940//40 +f 2526//140 2946//140 2947//30 +f 2523//139 2943//139 2944//29 +f 2520//40 2940//40 2941//32 +f 2527//30 2947//30 2948//39 +f 2524//29 2944//29 2945//138 +f 2521//32 2941//32 2942//137 +f 2528//39 2948//39 2949//136 +f 2530//31 2950//31 2939//141 +f 2525//138 2945//138 2946//140 +f 2989//34 3005//34 3004//44 +f 2982//47 2998//47 2997//36 +f 2990//41 3006//41 3005//34 +f 2983//30 2999//30 2998//47 +f 2991//32 3007//32 3006//41 +f 2984//49 3000//49 2999//30 +f 2992//45 3008//45 3007//32 +f 2985//35 3001//35 3000//49 +f 2993//33 3009//33 3008//45 +f 2986//42 3002//42 3001//35 +f 2994//46 3010//46 3009//33 +f 2987//29 3003//29 3002//42 +f 2980//43 2995//43 2996//31 +f 2979//31 2996//31 3010//46 +f 2988//44 3004//44 3003//29 +f 2981//36 2997//36 2995//43 +o Base +v 2.250000 0.000000 2.375000 +v -2.250000 0.000000 2.375000 +v 2.250000 0.000000 2.500000 +v -2.250000 0.000000 2.500000 +v -2.500000 0.000000 2.500000 +v -2.250000 0.000000 2.500000 +v -2.500000 0.000000 2.250000 +v -2.250000 0.000000 2.250000 +v -2.500000 0.250000 2.500000 +v -2.250000 0.250000 2.500000 +v -2.500000 0.250000 2.250000 +v -2.250000 0.250000 2.250000 +v 2.250000 0.000000 2.500000 +v 2.500000 0.000000 2.500000 +v 2.250000 0.000000 2.250000 +v 2.500000 0.000000 2.250000 +v 2.250000 0.250000 2.500000 +v 2.500000 0.250000 2.500000 +v 2.250000 0.250000 2.250000 +v 2.500000 0.250000 2.250000 +v -2.500000 0.000000 -2.250000 +v -2.250000 0.000000 -2.250000 +v -2.500000 0.000000 -2.500000 +v -2.250000 0.000000 -2.500000 +v -2.500000 0.250000 -2.250000 +v -2.250000 0.250000 -2.250000 +v -2.500000 0.250000 -2.500000 +v -2.250000 0.250000 -2.500000 +v 2.250000 0.000000 -2.250000 +v 2.500000 0.000000 -2.250000 +v 2.250000 0.000000 -2.500000 +v 2.500000 0.000000 -2.500000 +v 2.250000 0.250000 -2.250000 +v 2.500000 0.250000 -2.250000 +v 2.250000 0.250000 -2.500000 +v 2.500000 0.250000 -2.500000 +v -2.250000 0.125000 2.375000 +v 2.250000 0.125000 2.375000 +v 2.250000 0.125000 2.500000 +v -2.250000 0.125000 2.500000 +v 2.250000 0.000000 -2.375000 +v -2.250000 0.000000 -2.375000 +v -2.250000 0.000000 -2.500000 +v 2.250000 0.000000 -2.500000 +v 2.250000 0.125000 -2.375000 +v -2.250000 0.125000 -2.375000 +v -2.250000 0.125000 -2.500000 +v 2.250000 0.125000 -2.500000 +v 2.375000 0.000000 2.250000 +v 2.375000 0.000000 -2.250000 +v 2.500000 0.000000 -2.250000 +v 2.500000 0.000000 2.250000 +v 2.375000 0.125000 2.250000 +v 2.375000 0.125000 -2.250000 +v 2.500000 0.125000 -2.250000 +v 2.500000 0.125000 2.250000 +v -2.375000 0.000000 -2.250000 +v -2.375000 0.000000 2.250000 +v -2.500000 0.000000 2.250000 +v -2.500000 0.000000 -2.250000 +v -2.375000 0.125000 -2.250000 +v -2.375000 0.125000 2.250000 +v -2.500000 0.125000 2.250000 +v -2.500000 0.125000 -2.250000 +v -1.875000 0.250000 -2.500000 +v -1.875000 0.250000 2.500000 +v -2.125000 0.250000 2.500000 +v -2.125000 0.250000 -2.500000 +v -1.875000 0.125000 -2.500000 +v -2.125000 0.125000 -2.500000 +v -1.875000 0.125000 2.500000 +v -2.125000 0.125000 2.500000 +v 0.125000 0.250000 -2.500000 +v 0.125000 0.250000 2.500000 +v -0.125000 0.250000 2.500000 +v -0.125000 0.250000 -2.500000 +v 0.125000 0.125000 -2.500000 +v -0.125000 0.125000 -2.500000 +v 0.125000 0.125000 2.500000 +v -0.125000 0.125000 2.500000 +v -1.125000 0.125000 2.500000 +v -0.875000 0.125000 2.500000 +v -1.125000 0.125000 -2.500000 +v -0.875000 0.125000 -2.500000 +v -1.125000 0.250000 -2.500000 +v -1.125000 0.250000 2.500000 +v -0.875000 0.250000 2.500000 +v -0.875000 0.250000 -2.500000 +v 1.125000 0.250000 -2.500000 +v 1.125000 0.250000 2.500000 +v 0.875000 0.250000 2.500000 +v 0.875000 0.250000 -2.500000 +v 1.125000 0.125000 -2.500000 +v 0.875000 0.125000 -2.500000 +v 1.125000 0.125000 2.500000 +v 0.875000 0.125000 2.500000 +v 1.875000 0.125000 2.500000 +v 2.125000 0.125000 2.500000 +v 1.875000 0.125000 -2.500000 +v 2.125000 0.125000 -2.500000 +v 1.875000 0.250000 -2.500000 +v 1.875000 0.250000 2.500000 +v 2.125000 0.250000 2.500000 +v 2.125000 0.250000 -2.500000 +v 2.500000 0.312500 -0.187500 +v 2.500000 0.312500 0.187500 +v 2.500000 0.687500 -0.187500 +v 2.500000 0.687500 0.187500 +v 2.375000 0.625000 -0.125000 +v 2.375000 0.375000 -0.125000 +v 2.375000 0.375000 0.125000 +v 2.375000 0.625000 0.125000 +v 2.375000 0.687500 -0.187500 +v 2.375000 0.312500 -0.187500 +v 2.375000 0.312500 0.187500 +v 2.375000 0.687500 0.187500 +v 2.250000 0.625000 -0.125000 +v 2.250000 0.375000 -0.125000 +v 2.250000 0.375000 0.125000 +v 2.250000 0.625000 0.125000 +v 2.433012 0.750000 2.250000 +v 2.250000 0.750000 2.433013 +v 2.000000 0.750000 2.500000 +v 1.750000 0.750000 2.433012 +v 1.566987 0.750000 2.250000 +v 1.500000 0.750000 2.000000 +v 1.566987 0.750000 1.750000 +v 1.750000 0.750000 1.566987 +v 2.000000 0.750000 1.500000 +v 2.250000 0.750000 1.566987 +v 2.500000 0.750000 2.000000 +v 2.433013 0.750000 1.750000 +v -2.250000 0.250000 1.750000 +v -2.250000 0.250000 2.250000 +v 2.250000 0.250000 1.750000 +v 2.250000 0.250000 2.250000 +v 2.250000 0.750000 1.750000 +v -2.250000 0.750000 1.750000 +v -2.250000 0.750000 2.250000 +v 2.250000 0.750000 2.250000 +v -2.250000 0.250000 -2.250000 +v -2.250000 0.250000 -1.750000 +v 2.250000 0.250000 -2.250000 +v 2.250000 0.250000 -1.750000 +v 2.250000 0.750000 -2.250000 +v -2.250000 0.750000 -2.250000 +v -2.250000 0.750000 -1.750000 +v 2.250000 0.750000 -1.750000 +v -2.250000 0.250000 -1.250000 +v -2.250000 0.250000 1.250000 +v 2.250000 0.250000 -1.250000 +v 2.250000 0.250000 1.250000 +v 2.250000 0.750000 -1.250000 +v -2.250000 0.750000 -1.250000 +v -2.250000 0.750000 1.250000 +v 2.250000 0.750000 1.250000 +v -2.000000 0.750000 -1.000000 +v -2.000000 0.750000 1.000000 +v 2.000000 0.750000 -1.000000 +v 2.000000 0.750000 1.000000 +v 2.000000 1.750000 -1.000000 +v -2.000000 1.750000 -1.000000 +v -2.000000 1.750000 1.000000 +v 2.000000 1.750000 1.000000 +v 0.250000 1.750000 -0.750000 +v 0.250000 1.750000 0.750000 +v 1.750000 1.750000 -0.750000 +v 1.750000 1.750000 0.750000 +v 1.750000 2.000000 -0.750000 +v 0.250000 2.000000 -0.750000 +v 0.250000 2.000000 0.750000 +v 1.750000 2.000000 0.750000 +v 1.750000 2.000000 0.000000 +v 1.692910 2.000000 -0.287013 +v 1.530330 2.000000 -0.530330 +v 1.287013 2.000000 -0.692910 +v 1.000000 2.000000 -0.750000 +v 0.712987 2.000000 -0.692910 +v 0.469670 2.000000 -0.530330 +v 0.307090 2.000000 -0.287013 +v 0.250000 2.000000 0.000000 +v 0.307090 2.000000 0.287013 +v 0.469670 2.000000 0.530330 +v 0.712987 2.000000 0.692910 +v 1.000000 2.000000 0.750000 +v 1.287013 2.000000 0.692910 +v 1.530330 2.000000 0.530330 +v 1.692910 2.000000 0.287012 +v 1.622551 2.250000 0.000000 +v 1.575162 2.250000 -0.238240 +v 1.440210 2.250000 -0.440210 +v 1.238240 2.250000 -0.575162 +v 1.000000 2.250000 -0.622551 +v 0.761760 2.250000 -0.575162 +v 0.559790 2.250000 -0.440210 +v 0.424838 2.250000 -0.238240 +v 0.377449 2.250000 0.000000 +v 0.424838 2.250000 0.238240 +v 0.559790 2.250000 0.440210 +v 0.761760 2.250000 0.575162 +v 1.000000 2.250000 0.622551 +v 1.238240 2.250000 0.575162 +v 1.440210 2.250000 0.440210 +v 1.575162 2.250000 0.238240 +v 1.692910 2.250000 -0.287013 +v 1.750000 2.250000 0.000000 +v 1.530330 2.250000 -0.530330 +v 1.287013 2.250000 -0.692910 +v 1.000000 2.250000 -0.750000 +v 0.712987 2.250000 -0.692910 +v 0.469670 2.250000 -0.530330 +v 0.307090 2.250000 -0.287013 +v 0.250000 2.250000 0.000000 +v 0.307090 2.250000 0.287013 +v 0.469670 2.250000 0.530330 +v 0.712987 2.250000 0.692910 +v 1.000000 2.250000 0.750000 +v 1.287013 2.250000 0.692910 +v 1.530330 2.250000 0.530330 +v 1.692910 2.250000 0.287012 +v 1.575162 2.000000 -0.238240 +v 1.622551 2.000000 0.000000 +v 1.440210 2.000000 -0.440210 +v 1.238240 2.000000 -0.575162 +v 1.000000 2.000000 -0.622551 +v 0.761760 2.000000 -0.575162 +v 0.559790 2.000000 -0.440210 +v 0.424838 2.000000 -0.238240 +v 0.377449 2.000000 0.000000 +v 0.424838 2.000000 0.238240 +v 0.559790 2.000000 0.440210 +v 0.761760 2.000000 0.575162 +v 1.000000 2.000000 0.622551 +v 1.238240 2.000000 0.575162 +v 1.440210 2.000000 0.440210 +v 1.575162 2.000000 0.238240 +v 1.062500 2.218750 -0.625000 +v 1.062500 2.218750 0.625000 +v 1.125000 2.218750 -0.625000 +v 1.125000 2.218750 0.625000 +v 0.687600 2.218750 -0.625000 +v 0.687600 2.218750 0.625000 +v 0.750100 2.218750 -0.625000 +v 0.750100 2.218750 0.625000 +v 0.875000 2.218750 -0.625000 +v 0.875000 2.218750 0.625000 +v 0.937500 2.218750 -0.625000 +v 0.937500 2.218750 0.625000 +v 1.312500 2.218750 0.625000 +v 1.312500 2.218750 -0.625000 +v 1.250000 2.218750 0.625000 +v 1.250000 2.218750 -0.625000 +v 0.500000 2.218750 -0.500000 +v 0.500000 2.218750 0.500000 +v 0.562500 2.218750 -0.500000 +v 0.562500 2.218750 0.500000 +v 1.437500 2.218750 -0.500000 +v 1.437500 2.218750 0.500000 +v 1.500000 2.218750 -0.500000 +v 1.500000 2.218750 0.500000 +v -1.750000 1.750000 -0.750000 +v -1.750000 1.750000 0.750000 +v -0.250000 1.750000 -0.750000 +v -0.250000 1.750000 0.750000 +v -0.250000 2.000000 -0.750000 +v -1.750000 2.000000 -0.750000 +v -1.750000 2.000000 0.750000 +v -0.250000 2.000000 0.750000 +v -1.440210 2.250000 0.440210 +v -1.575162 2.250000 0.238240 +v -1.622551 2.250000 -0.000000 +v -1.575162 2.250000 -0.238240 +v -1.440210 2.250000 -0.440210 +v -1.238240 2.250000 -0.575162 +v -1.000000 2.250000 -0.622551 +v -0.761760 2.250000 -0.575162 +v -0.559790 2.250000 -0.440210 +v -0.424838 2.250000 -0.238240 +v -0.377449 2.250000 -0.000000 +v -0.307090 2.000000 0.287012 +v -0.469670 2.000000 0.530330 +v -0.712987 2.000000 0.692910 +v -1.000000 2.000000 0.750000 +v -1.287013 2.000000 0.692910 +v -1.530330 2.000000 0.530330 +v -1.692910 2.000000 0.287013 +v -1.750000 2.000000 -0.000000 +v -1.692910 2.000000 -0.287013 +v -1.530330 2.000000 -0.530330 +v -1.287013 2.000000 -0.692910 +v -1.000000 2.000000 -0.750000 +v -0.712987 2.000000 -0.692910 +v -0.469670 2.000000 -0.530330 +v -0.307090 2.000000 -0.287013 +v -0.250000 2.000000 -0.000000 +v -0.937500 2.218750 -0.625000 +v -0.937500 2.218750 0.625000 +v -0.875000 2.218750 -0.625000 +v -0.875000 2.218750 0.625000 +v -0.750000 2.218750 -0.625000 +v -0.750000 2.218750 0.625000 +v -0.687500 2.218750 -0.625000 +v -0.687500 2.218750 0.625000 +v -1.125000 2.218750 -0.625000 +v -1.125000 2.218750 0.625000 +v -1.062500 2.218750 -0.625000 +v -1.062500 2.218750 0.625000 +v -1.249900 2.218750 0.625000 +v -1.249900 2.218750 -0.625000 +v -1.312400 2.218750 0.625000 +v -1.312400 2.218750 -0.625000 +v -1.500000 2.218750 -0.500000 +v -1.500000 2.218750 0.500000 +v -1.437500 2.218750 -0.500000 +v -1.437500 2.218750 0.500000 +v -0.562500 2.218750 -0.500000 +v -0.562500 2.218750 0.500000 +v -0.500000 2.218750 -0.500000 +v -0.500000 2.218750 0.500000 +v 1.750000 2.000000 0.500000 +v 1.750000 1.963388 0.411612 +v 1.750000 1.875000 0.375000 +v 1.750000 1.786612 0.411612 +v 1.750000 1.750000 0.500000 +v 1.750000 1.786612 0.588389 +v 1.750000 1.875000 0.625000 +v 1.750000 1.963388 0.588389 +v 2.000000 2.000000 0.500000 +v 2.000000 1.963388 0.411612 +v 2.000000 1.875000 0.375000 +v 2.000000 1.786612 0.411612 +v 2.000000 1.750000 0.500000 +v 2.000000 1.786612 0.588389 +v 2.000000 1.875000 0.625000 +v 2.000000 1.963388 0.588389 +v 2.176777 1.926777 0.500000 +v 2.150888 1.900888 0.411612 +v 2.088388 1.838388 0.375000 +v 2.025888 1.775888 0.411612 +v 2.025888 1.775888 0.588389 +v 2.088388 1.838388 0.625000 +v 2.150888 1.900888 0.588389 +v 2.250000 1.750000 0.500000 +v 2.213388 1.750000 0.411612 +v 2.125000 1.750000 0.375000 +v 2.036612 1.750000 0.411612 +v 2.036612 1.750000 0.588389 +v 2.125000 1.750000 0.625000 +v 2.213388 1.750000 0.588389 +v 2.000000 0.750000 0.500000 +v 2.250000 0.750000 0.500000 +v 2.213388 0.750000 0.411612 +v 2.125000 0.750000 0.375000 +v 2.036612 0.750000 0.411612 +v 2.036612 0.750000 0.588389 +v 2.125000 0.750000 0.625000 +v 2.213388 0.750000 0.588389 +v 0.250000 2.000000 0.500000 +v 0.250000 1.963388 0.411612 +v 0.250000 1.875000 0.375000 +v 0.250000 1.786612 0.411612 +v 0.250000 1.750000 0.500000 +v 0.250000 1.786612 0.588388 +v 0.250000 1.875000 0.625000 +v 0.250000 1.963388 0.588388 +v -0.250000 2.000000 0.500000 +v -0.250000 1.963388 0.411612 +v -0.250000 1.875000 0.375000 +v -0.250000 1.786612 0.411612 +v -0.250000 1.750000 0.500000 +v -0.250000 1.786612 0.588388 +v -0.250000 1.875000 0.625000 +v -0.250000 1.963388 0.588388 +v 1.750000 2.500000 1.750000 +v 1.750000 2.500000 2.250000 +v 2.250000 2.500000 1.750000 +v 2.250000 2.500000 2.250000 +v 2.250000 2.750000 1.750000 +v 1.750000 2.750000 1.750000 +v 1.750000 2.750000 2.250000 +v 2.250000 2.750000 2.250000 +v 2.125000 2.750000 1.750000 +v 2.036612 2.713388 1.750000 +v 2.000000 2.625000 1.750000 +v 2.036612 2.536612 1.750000 +v 2.125000 2.500000 1.750000 +v 2.213388 2.536612 1.750000 +v 2.250000 2.625000 1.750000 +v 2.213388 2.713388 1.750000 +v 2.125000 2.750000 -1.750000 +v 2.036612 2.713388 -1.750000 +v 2.000000 2.625000 -1.750000 +v 2.036612 2.536612 -1.750000 +v 2.125000 2.500000 -1.750000 +v 2.213388 2.536612 -1.750000 +v 2.250000 2.625000 -1.750000 +v 2.213388 2.713388 -1.750000 +v 1.250000 2.625000 1.750000 +v 1.213388 2.713388 1.750000 +v 1.125000 2.750000 1.750000 +v 1.036611 2.713388 1.750000 +v 1.000000 2.625000 1.750000 +v 1.036611 2.536612 1.750000 +v 1.125000 2.500000 1.750000 +v 1.213388 2.536612 1.750000 +v 1.250000 2.625000 1.000000 +v 1.213388 2.713388 1.000000 +v 1.125000 2.750000 1.000000 +v 1.036612 2.713388 1.000000 +v 1.000000 2.625000 1.000000 +v 1.036612 2.536612 1.000000 +v 1.125000 2.500000 1.000000 +v 1.213388 2.536612 1.000000 +v 1.176776 2.625000 0.823223 +v 1.150888 2.713388 0.849112 +v 1.088388 2.750000 0.911612 +v 1.025888 2.713388 0.974112 +v 1.025888 2.536612 0.974112 +v 1.088388 2.500000 0.911612 +v 1.150888 2.536612 0.849112 +v -0.750000 2.625000 -1.250000 +v -0.926777 2.625000 -1.073223 +v -0.775888 2.713388 -1.224112 +v -0.838388 2.750000 -1.161612 +v -0.900888 2.713388 -1.099112 +v -0.900888 2.536612 -1.099112 +v -0.838388 2.500000 -1.161612 +v -0.775888 2.536612 -1.224112 +v -1.000000 2.625000 -1.250000 +v -0.786611 2.713388 -1.250000 +v -0.875000 2.750000 -1.250000 +v -0.963388 2.713388 -1.250000 +v -0.963388 2.536612 -1.250000 +v -0.875000 2.500000 -1.250000 +v -0.786611 2.536612 -1.250000 +v -0.750000 2.625000 -1.750000 +v -1.000000 2.625000 -1.750000 +v -0.786611 2.713388 -1.750000 +v -0.875000 2.750000 -1.750000 +v -0.963388 2.713388 -1.750000 +v -0.963388 2.536612 -1.750000 +v -0.875000 2.500000 -1.750000 +v -0.786611 2.536612 -1.750000 +v 1.000000 2.625000 1.750000 +v 0.963388 2.713388 1.750000 +v 0.875000 2.750000 1.750000 +v 0.786611 2.713388 1.750000 +v 0.750000 2.625000 1.750000 +v 0.786611 2.536612 1.750000 +v 0.875000 2.500000 1.750000 +v 0.963388 2.536612 1.750000 +v 1.000000 2.625000 1.250000 +v 0.963388 2.713388 1.250000 +v 0.875000 2.750000 1.250000 +v 0.786611 2.713388 1.250000 +v 0.750000 2.625000 1.250000 +v 0.786611 2.536612 1.250000 +v 0.875000 2.500000 1.250000 +v 0.963388 2.536612 1.250000 +v 0.926776 2.625000 1.073223 +v 0.900888 2.713388 1.099112 +v 0.838388 2.750000 1.161612 +v 0.775888 2.713388 1.224112 +v 0.775888 2.536612 1.224112 +v 0.838388 2.500000 1.161612 +v 0.900888 2.536612 1.099112 +v -1.000000 2.625000 -1.000000 +v -1.176777 2.625000 -0.823223 +v -1.025888 2.713388 -0.974112 +v -1.088388 2.750000 -0.911612 +v -1.150888 2.713388 -0.849112 +v -1.150888 2.536612 -0.849112 +v -1.088388 2.500000 -0.911612 +v -1.025888 2.536612 -0.974112 +v -1.250000 2.625000 -1.000000 +v -1.036612 2.713388 -1.000000 +v -1.125000 2.750000 -1.000000 +v -1.213388 2.713388 -1.000000 +v -1.213388 2.536612 -1.000000 +v -1.125000 2.500000 -1.000000 +v -1.036612 2.536612 -1.000000 +v -1.000000 2.625000 -1.750000 +v -1.250000 2.625000 -1.750000 +v -1.036611 2.713388 -1.750000 +v -1.125000 2.750000 -1.750000 +v -1.213388 2.713388 -1.750000 +v -1.213388 2.536612 -1.750000 +v -1.125000 2.500000 -1.750000 +v -1.036611 2.536612 -1.750000 +v -0.125000 2.750000 1.750000 +v -0.213388 2.713388 1.750000 +v -0.250000 2.625000 1.750000 +v -0.213388 2.536612 1.750000 +v -0.125000 2.500000 1.750000 +v -0.036612 2.536612 1.750000 +v -0.000000 2.625000 1.750000 +v -0.036612 2.713388 1.750000 +v -0.125000 2.750000 1.375000 +v -0.213388 2.713388 1.375000 +v -0.250000 2.625000 1.375000 +v -0.213388 2.536612 1.375000 +v -0.125000 2.500000 1.375000 +v -0.036612 2.536612 1.375000 +v -0.000000 2.625000 1.375000 +v -0.036612 2.713388 1.375000 +v -0.125000 2.676776 1.198223 +v -0.213389 2.650888 1.224112 +v -0.250000 2.588388 1.286612 +v -0.213388 2.525888 1.349112 +v -0.036612 2.525888 1.349112 +v -0.000000 2.588388 1.286612 +v -0.036612 2.650888 1.224112 +v -0.125000 2.500000 1.125000 +v -0.213388 2.500000 1.161612 +v -0.250000 2.500000 1.250000 +v -0.213388 2.500000 1.338388 +v -0.036612 2.500000 1.338388 +v -0.000000 2.500000 1.250000 +v -0.036612 2.500000 1.161612 +v -0.125000 1.000000 1.375000 +v -0.125000 1.000000 1.125000 +v -0.213388 1.000000 1.161612 +v -0.250000 1.000000 1.250000 +v -0.213388 1.000000 1.338388 +v -0.036612 1.000000 1.338388 +v -0.000000 1.000000 1.250000 +v -0.036612 1.000000 1.161612 +v -0.125000 0.823223 1.301777 +v -0.213388 0.974112 1.150888 +v -0.250000 0.911612 1.213388 +v -0.213388 0.849112 1.275888 +v -0.036612 0.849112 1.275888 +v -0.000000 0.911612 1.213388 +v -0.036612 0.974112 1.150888 +v -0.125000 0.750000 1.125000 +v -0.213388 0.963388 1.125000 +v -0.250000 0.875000 1.125000 +v -0.213388 0.786612 1.125000 +v -0.036612 0.786612 1.125000 +v -0.000000 0.875000 1.125000 +v -0.036612 0.963388 1.125000 +v -0.125000 1.000000 1.000000 +v -0.125000 0.750000 1.000000 +v -0.213388 0.963388 1.000000 +v -0.250000 0.875000 1.000000 +v -0.213388 0.786612 1.000000 +v -0.036612 0.786612 1.000000 +v -0.000000 0.875000 1.000000 +v -0.036612 0.963388 1.000000 +v 0.125000 2.750000 1.750000 +v 0.036612 2.713388 1.750000 +v -0.000000 2.625000 1.750000 +v 0.036612 2.536612 1.750000 +v 0.125000 2.500000 1.750000 +v 0.213388 2.536612 1.750000 +v 0.250000 2.625000 1.750000 +v 0.213388 2.713388 1.750000 +v 0.125000 2.750000 1.375000 +v 0.036612 2.713388 1.375000 +v -0.000000 2.625000 1.375000 +v 0.036612 2.536612 1.375000 +v 0.125000 2.500000 1.375000 +v 0.213388 2.536612 1.375000 +v 0.250000 2.625000 1.375000 +v 0.213388 2.713388 1.375000 +v 0.125000 2.676776 1.198223 +v 0.036612 2.650888 1.224112 +v -0.000000 2.588388 1.286612 +v 0.036612 2.525888 1.349112 +v 0.213388 2.525888 1.349112 +v 0.250000 2.588388 1.286612 +v 0.213388 2.650888 1.224112 +v 0.125000 2.500000 1.125000 +v 0.036612 2.500000 1.161612 +v -0.000000 2.500000 1.250000 +v 0.036612 2.500000 1.338388 +v 0.213388 2.500000 1.338388 +v 0.250000 2.500000 1.250000 +v 0.213388 2.500000 1.161612 +v 0.125000 1.000000 1.375000 +v 0.125000 1.000000 1.125000 +v 0.036612 1.000000 1.161612 +v -0.000000 1.000000 1.250000 +v 0.036612 1.000000 1.338388 +v 0.213388 1.000000 1.338388 +v 0.250000 1.000000 1.250000 +v 0.213388 1.000000 1.161612 +v 0.125000 0.823223 1.301777 +v 0.036612 0.974112 1.150888 +v -0.000000 0.911612 1.213388 +v 0.036612 0.849112 1.275888 +v 0.213388 0.849112 1.275888 +v 0.250000 0.911612 1.213388 +v 0.213388 0.974112 1.150888 +v 0.125000 0.750000 1.125000 +v 0.036612 0.963388 1.125000 +v -0.000000 0.875000 1.125000 +v 0.036612 0.786612 1.125000 +v 0.213388 0.786612 1.125000 +v 0.250000 0.875000 1.125000 +v 0.213388 0.963388 1.125000 +v 0.125000 1.000000 1.000000 +v 0.125000 0.750000 1.000000 +v 0.036612 0.963388 1.000000 +v -0.000000 0.875000 1.000000 +v 0.036612 0.786612 1.000000 +v 0.213388 0.786612 1.000000 +v 0.250000 0.875000 1.000000 +v 0.213388 0.963388 1.000000 +v 2.088388 0.411612 1.750000 +v 2.000000 0.375000 1.750000 +v 1.911612 0.411612 1.750000 +v 1.875000 0.500000 1.750000 +v 1.911612 0.588388 1.750000 +v 2.000000 0.625000 1.750000 +v 2.088388 0.588388 1.750000 +v 2.125000 0.500000 1.750000 +v 2.088388 0.411612 1.250000 +v 2.000000 0.375000 1.250000 +v 1.911612 0.411612 1.250000 +v 1.875000 0.500000 1.250000 +v 1.911612 0.588388 1.250000 +v 2.000000 0.625000 1.250000 +v 2.088388 0.588388 1.250000 +v 2.125000 0.500000 1.250000 +v 1.812500 2.750000 1.812500 +v 1.812500 2.750000 2.187500 +v 2.187500 2.750000 1.812500 +v 2.187500 2.750000 2.187500 +v 2.187500 3.000000 1.812500 +v 1.812500 3.000000 1.812500 +v 1.812500 3.000000 2.187500 +v 2.187500 3.000000 2.187500 +v 2.500000 2.500000 2.000000 +v 2.433013 2.500000 1.750000 +v 2.250000 2.500000 1.566987 +v 2.000000 2.500000 1.500000 +v 1.750000 2.500000 1.566987 +v 1.566987 2.500000 1.750000 +v 1.500000 2.500000 2.000000 +v 1.566987 2.500000 2.250000 +v 1.750000 2.500000 2.433012 +v 2.000000 2.500000 2.500000 +v 2.250000 2.500000 2.433013 +v 2.433012 2.500000 2.250000 +v 1.750000 2.000000 0.250000 +v 1.750000 1.963388 0.161612 +v 1.750000 1.875000 0.125000 +v 1.750000 1.786612 0.161612 +v 1.750000 1.750000 0.250000 +v 1.750000 1.786612 0.338389 +v 1.750000 1.875000 0.375000 +v 1.750000 1.963388 0.338389 +v 2.000000 2.000000 0.250000 +v 2.000000 1.963388 0.161612 +v 2.000000 1.875000 0.125000 +v 2.000000 1.786612 0.161612 +v 2.000000 1.750000 0.250000 +v 2.000000 1.786612 0.338389 +v 2.000000 1.875000 0.375000 +v 2.000000 1.963388 0.338389 +v 2.176777 1.926777 0.250000 +v 2.150888 1.900888 0.161612 +v 2.088388 1.838388 0.125000 +v 2.025888 1.775888 0.161612 +v 2.025888 1.775888 0.338389 +v 2.088388 1.838388 0.375000 +v 2.150888 1.900888 0.338389 +v 2.250000 1.750000 0.250000 +v 2.213388 1.750000 0.161612 +v 2.125000 1.750000 0.125000 +v 2.036612 1.750000 0.161612 +v 2.036612 1.750000 0.338389 +v 2.125000 1.750000 0.375000 +v 2.213388 1.750000 0.338389 +v 2.000000 0.750000 0.250000 +v 2.250000 0.750000 0.250000 +v 2.213388 0.750000 0.161612 +v 2.125000 0.750000 0.125000 +v 2.036612 0.750000 0.161612 +v 2.036612 0.750000 0.338389 +v 2.125000 0.750000 0.375000 +v 2.213388 0.750000 0.338389 +v 1.750000 2.000000 0.000000 +v 1.750000 1.963388 -0.088388 +v 1.750000 1.875000 -0.125000 +v 1.750000 1.786612 -0.088388 +v 1.750000 1.750000 0.000000 +v 1.750000 1.786612 0.088389 +v 1.750000 1.875000 0.125000 +v 1.750000 1.963388 0.088389 +v 2.000000 2.000000 0.000000 +v 2.000000 1.963388 -0.088388 +v 2.000000 1.875000 -0.125000 +v 2.000000 1.786612 -0.088388 +v 2.000000 1.750000 0.000000 +v 2.000000 1.786612 0.088389 +v 2.000000 1.875000 0.125000 +v 2.000000 1.963388 0.088389 +v 2.176777 1.926777 0.000000 +v 2.150888 1.900888 -0.088388 +v 2.088388 1.838388 -0.125000 +v 2.025888 1.775888 -0.088388 +v 2.025888 1.775888 0.088389 +v 2.088388 1.838388 0.125000 +v 2.150888 1.900888 0.088389 +v 2.250000 1.750000 0.000000 +v 2.213388 1.750000 -0.088388 +v 2.125000 1.750000 -0.125000 +v 2.036612 1.750000 -0.088388 +v 2.036612 1.750000 0.088389 +v 2.125000 1.750000 0.125000 +v 2.213388 1.750000 0.088389 +v 2.000000 0.750000 0.000000 +v 2.250000 0.750000 0.000000 +v 2.213388 0.750000 -0.088388 +v 2.125000 0.750000 -0.125000 +v 2.036612 0.750000 -0.088388 +v 2.036612 0.750000 0.088389 +v 2.125000 0.750000 0.125000 +v 2.213388 0.750000 0.088389 +v 1.750000 2.000000 -0.250000 +v 1.750000 1.963388 -0.338388 +v 1.750000 1.875000 -0.375000 +v 1.750000 1.786612 -0.338388 +v 1.750000 1.750000 -0.250000 +v 1.750000 1.786612 -0.161611 +v 1.750000 1.875000 -0.125000 +v 1.750000 1.963388 -0.161611 +v 2.000000 2.000000 -0.250000 +v 2.000000 1.963388 -0.338388 +v 2.000000 1.875000 -0.375000 +v 2.000000 1.786612 -0.338388 +v 2.000000 1.750000 -0.250000 +v 2.000000 1.786612 -0.161611 +v 2.000000 1.875000 -0.125000 +v 2.000000 1.963388 -0.161611 +v 2.176777 1.926777 -0.250000 +v 2.150888 1.900888 -0.338388 +v 2.088388 1.838388 -0.375000 +v 2.025888 1.775888 -0.338388 +v 2.025888 1.775888 -0.161611 +v 2.088388 1.838388 -0.125000 +v 2.150888 1.900888 -0.161611 +v 2.250000 1.750000 -0.250000 +v 2.213388 1.750000 -0.338388 +v 2.125000 1.750000 -0.375000 +v 2.036612 1.750000 -0.338388 +v 2.036612 1.750000 -0.161611 +v 2.125000 1.750000 -0.125000 +v 2.213388 1.750000 -0.161611 +v 2.000000 0.750000 -0.250000 +v 2.250000 0.750000 -0.250000 +v 2.213388 0.750000 -0.338388 +v 2.125000 0.750000 -0.375000 +v 2.036612 0.750000 -0.338388 +v 2.036612 0.750000 -0.161611 +v 2.125000 0.750000 -0.125000 +v 2.213388 0.750000 -0.161611 +v 1.750000 2.000000 -0.500000 +v 1.750000 1.963388 -0.588388 +v 1.750000 1.875000 -0.625000 +v 1.750000 1.786612 -0.588388 +v 1.750000 1.750000 -0.500000 +v 1.750000 1.786612 -0.411611 +v 1.750000 1.875000 -0.375000 +v 1.750000 1.963388 -0.411611 +v 2.000000 2.000000 -0.500000 +v 2.000000 1.963388 -0.588388 +v 2.000000 1.875000 -0.625000 +v 2.000000 1.786612 -0.588388 +v 2.000000 1.750000 -0.500000 +v 2.000000 1.786612 -0.411611 +v 2.000000 1.875000 -0.375000 +v 2.000000 1.963388 -0.411611 +v 2.176777 1.926777 -0.500000 +v 2.150888 1.900888 -0.588388 +v 2.088388 1.838388 -0.625000 +v 2.025888 1.775888 -0.588388 +v 2.025888 1.775888 -0.411611 +v 2.088388 1.838388 -0.375000 +v 2.150888 1.900888 -0.411611 +v 2.250000 1.750000 -0.500000 +v 2.213388 1.750000 -0.588388 +v 2.125000 1.750000 -0.625000 +v 2.036612 1.750000 -0.588388 +v 2.036612 1.750000 -0.411611 +v 2.125000 1.750000 -0.375000 +v 2.213388 1.750000 -0.411611 +v 2.000000 0.750000 -0.500000 +v 2.250000 0.750000 -0.500000 +v 2.213388 0.750000 -0.588388 +v 2.125000 0.750000 -0.625000 +v 2.036612 0.750000 -0.588388 +v 2.036612 0.750000 -0.411611 +v 2.125000 0.750000 -0.375000 +v 2.213388 0.750000 -0.411611 +v -1.750000 2.000000 -0.500000 +v -1.750000 1.963388 -0.411612 +v -1.750000 1.875000 -0.375000 +v -1.750000 1.786612 -0.411612 +v -1.750000 1.750000 -0.500000 +v -1.750000 1.786612 -0.588388 +v -1.750000 1.875000 -0.625000 +v -1.750000 1.963388 -0.588388 +v -2.000000 2.000000 -0.500000 +v -2.000000 1.963388 -0.411611 +v -2.000000 1.875000 -0.375000 +v -2.000000 1.786612 -0.411611 +v -2.000000 1.750000 -0.500000 +v -2.000000 1.786612 -0.588388 +v -2.000000 1.875000 -0.625000 +v -2.000000 1.963388 -0.588388 +v -2.176777 1.926777 -0.500000 +v -2.150888 1.900888 -0.411611 +v -2.088388 1.838388 -0.375000 +v -2.025888 1.775888 -0.411611 +v -2.025888 1.775888 -0.588388 +v -2.088388 1.838388 -0.625000 +v -2.150888 1.900888 -0.588388 +v -2.250000 1.750000 -0.500000 +v -2.213388 1.750000 -0.411611 +v -2.125000 1.750000 -0.375000 +v -2.036612 1.750000 -0.411611 +v -2.036612 1.750000 -0.588388 +v -2.125000 1.750000 -0.625000 +v -2.213388 1.750000 -0.588388 +v -2.000000 0.750000 -0.500000 +v -2.250000 0.750000 -0.500000 +v -2.213388 0.750000 -0.411611 +v -2.125000 0.750000 -0.375000 +v -2.036612 0.750000 -0.411611 +v -2.036612 0.750000 -0.588388 +v -2.125000 0.750000 -0.625000 +v -2.213388 0.750000 -0.588388 +v -1.750000 2.000000 -0.250000 +v -1.750000 1.963388 -0.161611 +v -1.750000 1.875000 -0.125000 +v -1.750000 1.786612 -0.161611 +v -1.750000 1.750000 -0.250000 +v -1.750000 1.786612 -0.338388 +v -1.750000 1.875000 -0.375000 +v -1.750000 1.963388 -0.338388 +v -2.000000 2.000000 -0.250000 +v -2.000000 1.963388 -0.161611 +v -2.000000 1.875000 -0.125000 +v -2.000000 1.786612 -0.161611 +v -2.000000 1.750000 -0.250000 +v -2.000000 1.786612 -0.338388 +v -2.000000 1.875000 -0.375000 +v -2.000000 1.963388 -0.338388 +v -2.176777 1.926777 -0.250000 +v -2.150888 1.900888 -0.161611 +v -2.088388 1.838388 -0.125000 +v -2.025888 1.775888 -0.161611 +v -2.025888 1.775888 -0.338388 +v -2.088388 1.838388 -0.375000 +v -2.150888 1.900888 -0.338388 +v -2.250000 1.750000 -0.250000 +v -2.213388 1.750000 -0.161611 +v -2.125000 1.750000 -0.125000 +v -2.036612 1.750000 -0.161611 +v -2.036612 1.750000 -0.338388 +v -2.125000 1.750000 -0.375000 +v -2.213388 1.750000 -0.338388 +v -2.000000 0.750000 -0.250000 +v -2.250000 0.750000 -0.250000 +v -2.213388 0.750000 -0.161611 +v -2.125000 0.750000 -0.125000 +v -2.036612 0.750000 -0.161611 +v -2.036612 0.750000 -0.338388 +v -2.125000 0.750000 -0.375000 +v -2.213388 0.750000 -0.338388 +v -1.750000 2.000000 0.000000 +v -1.750000 1.963388 0.088389 +v -1.750000 1.875000 0.125000 +v -1.750000 1.786612 0.088389 +v -1.750000 1.750000 0.000000 +v -1.750000 1.786612 -0.088388 +v -1.750000 1.875000 -0.125000 +v -1.750000 1.963388 -0.088388 +v -2.000000 2.000000 0.000000 +v -2.000000 1.963388 0.088389 +v -2.000000 1.875000 0.125000 +v -2.000000 1.786612 0.088389 +v -2.000000 1.750000 0.000000 +v -2.000000 1.786612 -0.088388 +v -2.000000 1.875000 -0.125000 +v -2.000000 1.963388 -0.088388 +v -2.176777 1.926777 0.000000 +v -2.150888 1.900888 0.088389 +v -2.088388 1.838388 0.125000 +v -2.025888 1.775888 0.088389 +v -2.025888 1.775888 -0.088388 +v -2.088388 1.838388 -0.125000 +v -2.150888 1.900888 -0.088388 +v -2.250000 1.750000 0.000000 +v -2.213388 1.750000 0.088389 +v -2.125000 1.750000 0.125000 +v -2.036612 1.750000 0.088389 +v -2.036612 1.750000 -0.088388 +v -2.125000 1.750000 -0.125000 +v -2.213388 1.750000 -0.088388 +v -2.000000 0.750000 0.000000 +v -2.250000 0.750000 0.000000 +v -2.213388 0.750000 0.088389 +v -2.125000 0.750000 0.125000 +v -2.036612 0.750000 0.088389 +v -2.036612 0.750000 -0.088388 +v -2.125000 0.750000 -0.125000 +v -2.213388 0.750000 -0.088388 +v -1.750000 2.000000 0.250000 +v -1.750000 1.963388 0.338388 +v -1.750000 1.875000 0.375000 +v -1.750000 1.786612 0.338388 +v -1.750000 1.750000 0.250000 +v -1.750000 1.786612 0.161612 +v -1.750000 1.875000 0.125000 +v -1.750000 1.963388 0.161612 +v -2.000000 2.000000 0.250000 +v -2.000000 1.963388 0.338389 +v -2.000000 1.875000 0.375000 +v -2.000000 1.786612 0.338389 +v -2.000000 1.750000 0.250000 +v -2.000000 1.786612 0.161612 +v -2.000000 1.875000 0.125000 +v -2.000000 1.963388 0.161612 +v -2.176777 1.926777 0.250000 +v -2.150888 1.900888 0.338389 +v -2.088388 1.838388 0.375000 +v -2.025888 1.775888 0.338389 +v -2.025888 1.775888 0.161612 +v -2.088388 1.838388 0.125000 +v -2.150888 1.900888 0.161612 +v -2.250000 1.750000 0.250000 +v -2.213388 1.750000 0.338389 +v -2.125000 1.750000 0.375000 +v -2.036612 1.750000 0.338389 +v -2.036612 1.750000 0.161612 +v -2.125000 1.750000 0.125000 +v -2.213388 1.750000 0.161612 +v -2.000000 0.750000 0.250000 +v -2.250000 0.750000 0.250000 +v -2.213388 0.750000 0.338389 +v -2.125000 0.750000 0.375000 +v -2.036612 0.750000 0.338389 +v -2.036612 0.750000 0.161612 +v -2.125000 0.750000 0.125000 +v -2.213388 0.750000 0.161612 +v -1.750000 2.000000 0.500000 +v -1.750000 1.963388 0.588389 +v -1.750000 1.875000 0.625000 +v -1.750000 1.786612 0.588389 +v -1.750000 1.750000 0.500000 +v -1.750000 1.786612 0.411612 +v -1.750000 1.875000 0.375000 +v -1.750000 1.963388 0.411612 +v -2.000000 2.000000 0.500000 +v -2.000000 1.963388 0.588389 +v -2.000000 1.875000 0.625000 +v -2.000000 1.786612 0.588389 +v -2.000000 1.750000 0.500000 +v -2.000000 1.786612 0.411612 +v -2.000000 1.875000 0.375000 +v -2.000000 1.963388 0.411612 +v -2.176777 1.926777 0.500000 +v -2.150888 1.900888 0.588389 +v -2.088388 1.838388 0.625000 +v -2.025888 1.775888 0.588389 +v -2.025888 1.775888 0.411612 +v -2.088388 1.838388 0.375000 +v -2.150888 1.900888 0.411612 +v -2.250000 1.750000 0.500000 +v -2.213388 1.750000 0.588389 +v -2.125000 1.750000 0.625000 +v -2.036612 1.750000 0.588389 +v -2.036612 1.750000 0.411612 +v -2.125000 1.750000 0.375000 +v -2.213388 1.750000 0.411612 +v -2.000000 0.750000 0.500000 +v -2.250000 0.750000 0.500000 +v -2.213388 0.750000 0.588389 +v -2.125000 0.750000 0.625000 +v -2.036612 0.750000 0.588389 +v -2.036612 0.750000 0.411612 +v -2.125000 0.750000 0.375000 +v -2.213388 0.750000 0.411612 +v 0.250000 2.000000 0.250000 +v 0.250000 1.963388 0.161612 +v 0.250000 1.875000 0.125000 +v 0.250000 1.786612 0.161612 +v 0.250000 1.750000 0.250000 +v 0.250000 1.786612 0.338388 +v 0.250000 1.875000 0.375000 +v 0.250000 1.963388 0.338388 +v -0.250000 2.000000 0.250000 +v -0.250000 1.963388 0.161612 +v -0.250000 1.875000 0.125000 +v -0.250000 1.786612 0.161612 +v -0.250000 1.750000 0.250000 +v -0.250000 1.786612 0.338388 +v -0.250000 1.875000 0.375000 +v -0.250000 1.963388 0.338388 +v 0.250000 2.000000 0.000000 +v 0.250000 1.963388 -0.088388 +v 0.250000 1.875000 -0.125000 +v 0.250000 1.786612 -0.088388 +v 0.250000 1.750000 0.000000 +v 0.250000 1.786612 0.088388 +v 0.250000 1.875000 0.125000 +v 0.250000 1.963388 0.088388 +v -0.250000 2.000000 -0.000000 +v -0.250000 1.963388 -0.088388 +v -0.250000 1.875000 -0.125000 +v -0.250000 1.786612 -0.088388 +v -0.250000 1.750000 -0.000000 +v -0.250000 1.786612 0.088388 +v -0.250000 1.875000 0.125000 +v -0.250000 1.963388 0.088388 +v 0.250000 2.000000 -0.250000 +v 0.250000 1.963388 -0.338388 +v 0.250000 1.875000 -0.375000 +v 0.250000 1.786612 -0.338388 +v 0.250000 1.750000 -0.250000 +v 0.250000 1.786612 -0.161612 +v 0.250000 1.875000 -0.125000 +v 0.250000 1.963388 -0.161612 +v -0.250000 2.000000 -0.250000 +v -0.250000 1.963388 -0.338388 +v -0.250000 1.875000 -0.375000 +v -0.250000 1.786612 -0.338388 +v -0.250000 1.750000 -0.250000 +v -0.250000 1.786612 -0.161612 +v -0.250000 1.875000 -0.125000 +v -0.250000 1.963388 -0.161612 +v 0.250000 2.000000 -0.500000 +v 0.250000 1.963388 -0.588388 +v 0.250000 1.875000 -0.625000 +v 0.250000 1.786612 -0.588388 +v 0.250000 1.750000 -0.500000 +v 0.250000 1.786612 -0.411612 +v 0.250000 1.875000 -0.375000 +v 0.250000 1.963388 -0.411612 +v -0.250000 2.000000 -0.500000 +v -0.250000 1.963388 -0.588388 +v -0.250000 1.875000 -0.625000 +v -0.250000 1.786612 -0.588388 +v -0.250000 1.750000 -0.500000 +v -0.250000 1.786612 -0.411612 +v -0.250000 1.875000 -0.375000 +v -0.250000 1.963388 -0.411612 +v -1.238240 2.250000 0.575162 +v -1.000000 2.250000 0.622551 +v -0.761760 2.250000 0.575162 +v -0.559790 2.250000 0.440210 +v -0.424838 2.250000 0.238240 +v -0.307090 2.250000 -0.287013 +v -0.250000 2.250000 -0.000000 +v -0.469670 2.250000 -0.530330 +v -0.712987 2.250000 -0.692910 +v -1.000000 2.250000 -0.750000 +v -1.287013 2.250000 -0.692910 +v -1.530330 2.250000 -0.530330 +v -1.692910 2.250000 -0.287013 +v -1.750000 2.250000 -0.000000 +v -1.692910 2.250000 0.287013 +v -1.530330 2.250000 0.530330 +v -1.287013 2.250000 0.692910 +v -1.000000 2.250000 0.750000 +v -0.712987 2.250000 0.692910 +v -0.469670 2.250000 0.530330 +v -0.307090 2.250000 0.287012 +v -0.424838 2.000000 -0.238240 +v -0.377449 2.000000 -0.000000 +v -0.559790 2.000000 -0.440210 +v -0.761760 2.000000 -0.575162 +v -1.000000 2.000000 -0.622551 +v -1.238240 2.000000 -0.575162 +v -1.440210 2.000000 -0.440210 +v -1.575162 2.000000 -0.238240 +v -1.622551 2.000000 -0.000000 +v -1.575162 2.000000 0.238240 +v -1.440210 2.000000 0.440210 +v -1.238240 2.000000 0.575162 +v -1.000000 2.000000 0.622551 +v -0.761760 2.000000 0.575162 +v -0.559790 2.000000 0.440210 +v -0.424838 2.000000 0.238240 +v 1.433012 0.750000 2.250000 +v 1.250000 0.750000 2.433013 +v 1.000000 0.750000 2.500000 +v 0.750000 0.750000 2.433012 +v 0.566987 0.750000 2.250000 +v 0.500000 0.750000 2.000000 +v 0.566987 0.750000 1.750000 +v 0.750000 0.750000 1.566987 +v 1.000000 0.750000 1.500000 +v 1.250000 0.750000 1.566987 +v 1.500000 0.750000 2.000000 +v 1.433013 0.750000 1.750000 +v 1.500000 2.500000 2.000000 +v 1.433013 2.500000 1.750000 +v 1.250000 2.500000 1.566987 +v 1.000000 2.500000 1.500000 +v 0.750000 2.500000 1.566987 +v 0.566987 2.500000 1.750000 +v 0.500000 2.500000 2.000000 +v 0.566987 2.500000 2.250000 +v 0.750000 2.500000 2.433012 +v 1.000000 2.500000 2.500000 +v 1.250000 2.500000 2.433013 +v 1.433012 2.500000 2.250000 +v 0.433012 0.750000 2.250000 +v 0.250000 0.750000 2.433013 +v -0.000000 0.750000 2.500000 +v -0.250000 0.750000 2.433012 +v -0.433013 0.750000 2.250000 +v -0.500000 0.750000 2.000000 +v -0.433013 0.750000 1.750000 +v -0.250000 0.750000 1.566987 +v -0.000000 0.750000 1.500000 +v 0.250000 0.750000 1.566987 +v 0.500000 0.750000 2.000000 +v 0.433013 0.750000 1.750000 +v 0.500000 2.500000 2.000000 +v 0.433013 2.500000 1.750000 +v 0.250000 2.500000 1.566987 +v -0.000000 2.500000 1.500000 +v -0.250000 2.500000 1.566987 +v -0.433013 2.500000 1.750000 +v -0.500000 2.500000 2.000000 +v -0.433013 2.500000 2.250000 +v -0.250000 2.500000 2.433012 +v -0.000000 2.500000 2.500000 +v 0.250000 2.500000 2.433013 +v 0.433012 2.500000 2.250000 +v -0.566988 0.750000 2.250000 +v -0.750000 0.750000 2.433013 +v -1.000000 0.750000 2.500000 +v -1.250000 0.750000 2.433012 +v -1.433013 0.750000 2.250000 +v -1.500000 0.750000 2.000000 +v -1.433013 0.750000 1.750000 +v -1.250000 0.750000 1.566987 +v -1.000000 0.750000 1.500000 +v -0.750000 0.750000 1.566987 +v -0.500000 0.750000 2.000000 +v -0.566987 0.750000 1.750000 +v -0.500000 2.500000 2.000000 +v -0.566987 2.500000 1.750000 +v -0.750000 2.500000 1.566987 +v -1.000000 2.500000 1.500000 +v -1.250000 2.500000 1.566987 +v -1.433013 2.500000 1.750000 +v -1.500000 2.500000 2.000000 +v -1.433013 2.500000 2.250000 +v -1.250000 2.500000 2.433012 +v -1.000000 2.500000 2.500000 +v -0.750000 2.500000 2.433013 +v -0.566988 2.500000 2.250000 +v -1.566988 0.750000 2.250000 +v -1.750000 0.750000 2.433013 +v -2.000000 0.750000 2.500000 +v -2.250000 0.750000 2.433012 +v -2.433013 0.750000 2.250000 +v -2.500000 0.750000 2.000000 +v -2.433013 0.750000 1.750000 +v -2.250000 0.750000 1.566987 +v -2.000000 0.750000 1.500000 +v -1.750000 0.750000 1.566987 +v -1.500000 0.750000 2.000000 +v -1.566987 0.750000 1.750000 +v -1.500000 2.500000 2.000000 +v -1.566987 2.500000 1.750000 +v -1.750000 2.500000 1.566987 +v -2.000000 2.500000 1.500000 +v -2.250000 2.500000 1.566987 +v -2.433013 2.500000 1.750000 +v -2.500000 2.500000 2.000000 +v -2.433013 2.500000 2.250000 +v -2.250000 2.500000 2.433012 +v -2.000000 2.500000 2.500000 +v -1.750000 2.500000 2.433013 +v -1.566988 2.500000 2.250000 +v -2.433012 0.750000 -2.250000 +v -2.250000 0.750000 -2.433013 +v -2.000000 0.750000 -2.500000 +v -1.750000 0.750000 -2.433012 +v -1.566987 0.750000 -2.250000 +v -1.500000 0.750000 -2.000000 +v -1.566987 0.750000 -1.750000 +v -1.750000 0.750000 -1.566987 +v -2.000000 0.750000 -1.500000 +v -2.250000 0.750000 -1.566987 +v -2.500000 0.750000 -2.000000 +v -2.433013 0.750000 -1.750000 +v -2.500000 2.500000 -2.000000 +v -2.433013 2.500000 -1.750000 +v -2.250000 2.500000 -1.566987 +v -2.000000 2.500000 -1.500000 +v -1.750000 2.500000 -1.566987 +v -1.566987 2.500000 -1.750000 +v -1.500000 2.500000 -2.000000 +v -1.566987 2.500000 -2.250000 +v -1.750000 2.500000 -2.433012 +v -2.000000 2.500000 -2.500000 +v -2.250000 2.500000 -2.433013 +v -2.433012 2.500000 -2.250000 +v -1.433013 0.750000 -2.250000 +v -1.250000 0.750000 -2.433013 +v -1.000000 0.750000 -2.500000 +v -0.750000 0.750000 -2.433012 +v -0.566987 0.750000 -2.250000 +v -0.500000 0.750000 -2.000000 +v -0.566987 0.750000 -1.750000 +v -0.750000 0.750000 -1.566987 +v -1.000000 0.750000 -1.500000 +v -1.250000 0.750000 -1.566987 +v -1.500000 0.750000 -2.000000 +v -1.433013 0.750000 -1.750000 +v -1.500000 2.500000 -2.000000 +v -1.433013 2.500000 -1.750000 +v -1.250000 2.500000 -1.566987 +v -1.000000 2.500000 -1.500000 +v -0.750000 2.500000 -1.566987 +v -0.566987 2.500000 -1.750000 +v -0.500000 2.500000 -2.000000 +v -0.566987 2.500000 -2.250000 +v -0.750000 2.500000 -2.433012 +v -1.000000 2.500000 -2.500000 +v -1.250000 2.500000 -2.433013 +v -1.433013 2.500000 -2.250000 +v -0.433013 0.750000 -2.250000 +v -0.250000 0.750000 -2.433013 +v 0.000000 0.750000 -2.500000 +v 0.250000 0.750000 -2.433012 +v 0.433013 0.750000 -2.250000 +v 0.500000 0.750000 -2.000000 +v 0.433013 0.750000 -1.750000 +v 0.250000 0.750000 -1.566987 +v -0.000000 0.750000 -1.500000 +v -0.250000 0.750000 -1.566987 +v -0.500000 0.750000 -2.000000 +v -0.433013 0.750000 -1.750000 +v -0.500000 2.500000 -2.000000 +v -0.433013 2.500000 -1.750000 +v -0.250000 2.500000 -1.566987 +v -0.000000 2.500000 -1.500000 +v 0.250000 2.500000 -1.566987 +v 0.433013 2.500000 -1.750000 +v 0.500000 2.500000 -2.000000 +v 0.433013 2.500000 -2.250000 +v 0.250000 2.500000 -2.433012 +v 0.000000 2.500000 -2.500000 +v -0.250000 2.500000 -2.433013 +v -0.433013 2.500000 -2.250000 +v 0.566987 0.750000 -2.250000 +v 0.750000 0.750000 -2.433013 +v 1.000000 0.750000 -2.500000 +v 1.250000 0.750000 -2.433012 +v 1.433013 0.750000 -2.250000 +v 1.500000 0.750000 -2.000000 +v 1.433013 0.750000 -1.750000 +v 1.250000 0.750000 -1.566987 +v 1.000000 0.750000 -1.500000 +v 0.750000 0.750000 -1.566987 +v 0.500000 0.750000 -2.000000 +v 0.566987 0.750000 -1.750000 +v 0.500000 2.500000 -2.000000 +v 0.566987 2.500000 -1.750000 +v 0.750000 2.500000 -1.566987 +v 1.000000 2.500000 -1.500000 +v 1.250000 2.500000 -1.566987 +v 1.433013 2.500000 -1.750000 +v 1.500000 2.500000 -2.000000 +v 1.433013 2.500000 -2.250000 +v 1.250000 2.500000 -2.433012 +v 1.000000 2.500000 -2.500000 +v 0.750000 2.500000 -2.433013 +v 0.566987 2.500000 -2.250000 +v 1.566987 0.750000 -2.250001 +v 1.750000 0.750000 -2.433013 +v 2.000000 0.750000 -2.500000 +v 2.250000 0.750000 -2.433012 +v 2.433012 0.750000 -2.250000 +v 2.500000 0.750000 -2.000000 +v 2.433012 0.750000 -1.750000 +v 2.250000 0.750000 -1.566987 +v 2.000000 0.750000 -1.500000 +v 1.750000 0.750000 -1.566987 +v 1.500000 0.750000 -2.000000 +v 1.566987 0.750000 -1.750000 +v 1.500000 2.500000 -2.000000 +v 1.566987 2.500000 -1.750000 +v 1.750000 2.500000 -1.566987 +v 2.000000 2.500000 -1.500000 +v 2.250000 2.500000 -1.566987 +v 2.433012 2.500000 -1.750000 +v 2.500000 2.500000 -2.000000 +v 2.433012 2.500000 -2.250000 +v 2.250000 2.500000 -2.433012 +v 2.000000 2.500000 -2.500000 +v 1.750000 2.500000 -2.433013 +v 1.566987 2.500000 -2.250001 +v 0.750000 2.500000 1.750000 +v 0.750000 2.500000 2.250000 +v 1.250000 2.500000 1.750000 +v 1.250000 2.500000 2.250000 +v 1.250000 2.750000 1.750000 +v 0.750000 2.750000 1.750000 +v 0.750000 2.750000 2.250000 +v 1.250000 2.750000 2.250000 +v 0.812500 2.750000 1.812500 +v 0.812500 2.750000 2.187500 +v 1.187500 2.750000 1.812500 +v 1.187500 2.750000 2.187500 +v 1.187500 3.000000 1.812500 +v 0.812500 3.000000 1.812500 +v 0.812500 3.000000 2.187500 +v 1.187500 3.000000 2.187500 +v -0.250000 2.500000 1.750000 +v -0.250000 2.500000 2.250000 +v 0.250000 2.500000 1.750000 +v 0.250000 2.500000 2.250000 +v 0.250000 2.750000 1.750000 +v -0.250000 2.750000 1.750000 +v -0.250000 2.750000 2.250000 +v 0.250000 2.750000 2.250000 +v -0.187500 2.750000 1.812500 +v -0.187500 2.750000 2.187500 +v 0.187500 2.750000 1.812500 +v 0.187500 2.750000 2.187500 +v 0.187500 3.000000 1.812500 +v -0.187500 3.000000 1.812500 +v -0.187500 3.000000 2.187500 +v 0.187500 3.000000 2.187500 +v -1.250000 2.500000 1.750000 +v -1.250000 2.500000 2.250000 +v -0.750000 2.500000 1.750000 +v -0.750000 2.500000 2.250000 +v -0.750000 2.750000 1.750000 +v -1.250000 2.750000 1.750000 +v -1.250000 2.750000 2.250000 +v -0.750000 2.750000 2.250000 +v -1.187500 2.750000 1.812500 +v -1.187500 2.750000 2.187500 +v -0.812500 2.750000 1.812500 +v -0.812500 2.750000 2.187500 +v -0.812500 3.000000 1.812500 +v -1.187500 3.000000 1.812500 +v -1.187500 3.000000 2.187500 +v -0.812500 3.000000 2.187500 +v -2.250000 2.500000 1.750000 +v -2.250000 2.500000 2.250000 +v -1.750000 2.500000 1.750000 +v -1.750000 2.500000 2.250000 +v -1.750000 2.750000 1.750000 +v -2.250000 2.750000 1.750000 +v -2.250000 2.750000 2.250000 +v -1.750000 2.750000 2.250000 +v -2.187500 2.750000 1.812500 +v -2.187500 2.750000 2.187500 +v -1.812500 2.750000 1.812500 +v -1.812500 2.750000 2.187500 +v -1.812500 3.000000 1.812500 +v -2.187500 3.000000 1.812500 +v -2.187500 3.000000 2.187500 +v -1.812500 3.000000 2.187500 +v 1.750000 2.500000 -2.250000 +v 1.750000 2.500000 -1.750000 +v 2.250000 2.500000 -2.250000 +v 2.250000 2.500000 -1.750000 +v 2.250000 2.750000 -2.250000 +v 1.750000 2.750000 -2.250000 +v 1.750000 2.750000 -1.750000 +v 2.250000 2.750000 -1.750000 +v 1.812500 2.750000 -2.187500 +v 1.812500 2.750000 -1.812500 +v 2.187500 2.750000 -2.187500 +v 2.187500 2.750000 -1.812500 +v 2.187500 3.000000 -2.187500 +v 1.812500 3.000000 -2.187500 +v 1.812500 3.000000 -1.812500 +v 2.187500 3.000000 -1.812500 +v 0.750000 2.500000 -2.250000 +v 0.750000 2.500000 -1.750000 +v 1.250000 2.500000 -2.250000 +v 1.250000 2.500000 -1.750000 +v 1.250000 2.750000 -2.250000 +v 0.750000 2.750000 -2.250000 +v 0.750000 2.750000 -1.750000 +v 1.250000 2.750000 -1.750000 +v 0.812500 2.750000 -2.187500 +v 0.812500 2.750000 -1.812500 +v 1.187500 2.750000 -2.187500 +v 1.187500 2.750000 -1.812500 +v 1.187500 3.000000 -2.187500 +v 0.812500 3.000000 -2.187500 +v 0.812500 3.000000 -1.812500 +v 1.187500 3.000000 -1.812500 +v -0.250000 2.500000 -2.250000 +v -0.250000 2.500000 -1.750000 +v 0.250000 2.500000 -2.250000 +v 0.250000 2.500000 -1.750000 +v 0.250000 2.750000 -2.250000 +v -0.250000 2.750000 -2.250000 +v -0.250000 2.750000 -1.750000 +v 0.250000 2.750000 -1.750000 +v -0.187500 2.750000 -2.187500 +v -0.187500 2.750000 -1.812500 +v 0.187500 2.750000 -2.187500 +v 0.187500 2.750000 -1.812500 +v 0.187500 3.000000 -2.187500 +v -0.187500 3.000000 -2.187500 +v -0.187500 3.000000 -1.812500 +v 0.187500 3.000000 -1.812500 +v -1.250000 2.500000 -2.250000 +v -1.250000 2.500000 -1.750000 +v -0.750000 2.500000 -2.250000 +v -0.750000 2.500000 -1.750000 +v -0.750000 2.750000 -2.250000 +v -1.250000 2.750000 -2.250000 +v -1.250000 2.750000 -1.750000 +v -0.750000 2.750000 -1.750000 +v -1.187500 2.750000 -2.187500 +v -1.187500 2.750000 -1.812500 +v -0.812500 2.750000 -2.187500 +v -0.812500 2.750000 -1.812500 +v -0.812500 3.000000 -2.187500 +v -1.187500 3.000000 -2.187500 +v -1.187500 3.000000 -1.812500 +v -0.812500 3.000000 -1.812500 +v -2.250000 2.500000 -2.250000 +v -2.250000 2.500000 -1.750000 +v -1.750000 2.500000 -2.250000 +v -1.750000 2.500000 -1.750000 +v -1.750000 2.750000 -2.250000 +v -2.250000 2.750000 -2.250000 +v -2.250000 2.750000 -1.750000 +v -1.750000 2.750000 -1.750000 +v -2.187500 2.750000 -2.187500 +v -2.187500 2.750000 -1.812500 +v -1.812500 2.750000 -2.187500 +v -1.812500 2.750000 -1.812500 +v -1.812500 3.000000 -2.187500 +v -2.187500 3.000000 -2.187500 +v -2.187500 3.000000 -1.812500 +v -1.812500 3.000000 -1.812500 +v -2.125000 2.750000 1.750000 +v -2.213388 2.713388 1.750000 +v -2.250000 2.625000 1.750000 +v -2.213388 2.536612 1.750000 +v -2.125000 2.500000 1.750000 +v -2.036612 2.536612 1.750000 +v -2.000000 2.625000 1.750000 +v -2.036612 2.713388 1.750000 +v -2.125000 2.750000 -1.750000 +v -2.213388 2.713388 -1.750000 +v -2.250000 2.625000 -1.750000 +v -2.213388 2.536612 -1.750000 +v -2.125000 2.500000 -1.750000 +v -2.036612 2.536612 -1.750000 +v -2.000000 2.625000 -1.750000 +v -2.036612 2.713388 -1.750000 +v -1.125000 2.750000 1.750000 +v -1.213388 2.713388 1.750000 +v -1.250000 2.625000 1.750000 +v -1.213388 2.536612 1.750000 +v -1.125000 2.500000 1.750000 +v -1.036612 2.536612 1.750000 +v -1.000000 2.625000 1.750000 +v -1.036612 2.713388 1.750000 +v -1.125000 2.750000 1.375000 +v -1.213388 2.713388 1.375000 +v -1.250000 2.625000 1.375000 +v -1.213388 2.536612 1.375000 +v -1.125000 2.500000 1.375000 +v -1.036612 2.536612 1.375000 +v -1.000000 2.625000 1.375000 +v -1.036612 2.713388 1.375000 +v -1.125000 2.676776 1.198223 +v -1.213388 2.650888 1.224112 +v -1.250000 2.588388 1.286612 +v -1.213388 2.525888 1.349112 +v -1.036612 2.525888 1.349112 +v -1.000000 2.588388 1.286612 +v -1.036612 2.650888 1.224112 +v -1.125000 2.500000 1.125000 +v -1.213388 2.500000 1.161612 +v -1.250000 2.500000 1.250000 +v -1.213388 2.500000 1.338388 +v -1.036612 2.500000 1.338388 +v -1.000000 2.500000 1.250000 +v -1.036612 2.500000 1.161612 +v -1.125000 1.000000 1.375000 +v -1.125000 1.000000 1.125000 +v -1.213388 1.000000 1.161612 +v -1.250000 1.000000 1.250000 +v -1.213388 1.000000 1.338388 +v -1.036612 1.000000 1.338388 +v -1.000000 1.000000 1.250000 +v -1.036612 1.000000 1.161612 +v -1.125000 0.823223 1.301777 +v -1.213388 0.974112 1.150888 +v -1.250000 0.911612 1.213388 +v -1.213388 0.849112 1.275888 +v -1.036612 0.849112 1.275888 +v -1.000000 0.911612 1.213388 +v -1.036612 0.974112 1.150888 +v -1.125000 0.750000 1.125000 +v -1.213388 0.963388 1.125000 +v -1.250000 0.875000 1.125000 +v -1.213388 0.786612 1.125000 +v -1.036612 0.786612 1.125000 +v -1.000000 0.875000 1.125000 +v -1.036612 0.963388 1.125000 +v -1.125000 1.000000 1.000000 +v -1.125000 0.750000 1.000000 +v -1.213388 0.963388 1.000000 +v -1.250000 0.875000 1.000000 +v -1.213388 0.786612 1.000000 +v -1.036612 0.786612 1.000000 +v -1.000000 0.875000 1.000000 +v -1.036612 0.963388 1.000000 +v -0.875000 2.750000 1.750000 +v -0.963388 2.713388 1.750000 +v -1.000000 2.625000 1.750000 +v -0.963388 2.536612 1.750000 +v -0.875000 2.500000 1.750000 +v -0.786612 2.536612 1.750000 +v -0.750000 2.625000 1.750000 +v -0.786612 2.713388 1.750000 +v -0.875000 2.750000 1.375000 +v -0.963388 2.713388 1.375000 +v -1.000000 2.625000 1.375000 +v -0.963388 2.536612 1.375000 +v -0.875000 2.500000 1.375000 +v -0.786612 2.536612 1.375000 +v -0.750000 2.625000 1.375000 +v -0.786612 2.713388 1.375000 +v -0.875000 2.676776 1.198223 +v -0.963389 2.650888 1.224112 +v -1.000000 2.588388 1.286612 +v -0.963388 2.525888 1.349112 +v -0.786612 2.525888 1.349112 +v -0.750000 2.588388 1.286612 +v -0.786612 2.650888 1.224112 +v -0.875000 2.500000 1.125000 +v -0.963389 2.500000 1.161612 +v -1.000000 2.500000 1.250000 +v -0.963388 2.500000 1.338388 +v -0.786612 2.500000 1.338388 +v -0.750000 2.500000 1.250000 +v -0.786612 2.500000 1.161612 +v -0.875000 1.000000 1.375000 +v -0.875000 1.000000 1.125000 +v -0.963389 1.000000 1.161612 +v -1.000000 1.000000 1.250000 +v -0.963388 1.000000 1.338388 +v -0.786612 1.000000 1.338388 +v -0.750000 1.000000 1.250000 +v -0.786612 1.000000 1.161612 +v -0.875000 0.823223 1.301777 +v -0.963389 0.974112 1.150888 +v -1.000000 0.911612 1.213388 +v -0.963388 0.849112 1.275888 +v -0.786612 0.849112 1.275888 +v -0.750000 0.911612 1.213388 +v -0.786612 0.974112 1.150888 +v -0.875000 0.750000 1.125000 +v -0.963389 0.963388 1.125000 +v -1.000000 0.875000 1.125000 +v -0.963388 0.786612 1.125000 +v -0.786612 0.786612 1.125000 +v -0.750000 0.875000 1.125000 +v -0.786612 0.963388 1.125000 +v -0.875000 1.000000 1.000000 +v -0.875000 0.750000 1.000000 +v -0.963389 0.963388 1.000000 +v -1.000000 0.875000 1.000000 +v -0.963388 0.786612 1.000000 +v -0.786612 0.786612 1.000000 +v -0.750000 0.875000 1.000000 +v -0.786612 0.963388 1.000000 +v -1.875000 2.750000 1.750000 +v -1.963388 2.713388 1.750000 +v -2.000000 2.625000 1.750000 +v -1.963388 2.536612 1.750000 +v -1.875000 2.500000 1.750000 +v -1.786612 2.536612 1.750000 +v -1.750000 2.625000 1.750000 +v -1.786612 2.713388 1.750000 +v -1.875000 2.750000 1.375000 +v -1.963388 2.713388 1.375000 +v -2.000000 2.625000 1.375000 +v -1.963388 2.536612 1.375000 +v -1.875000 2.500000 1.375000 +v -1.786612 2.536612 1.375000 +v -1.750000 2.625000 1.375000 +v -1.786612 2.713388 1.375000 +v -1.875000 2.676776 1.198223 +v -1.963388 2.650888 1.224111 +v -2.000000 2.588388 1.286611 +v -1.963388 2.525888 1.349111 +v -1.786612 2.525888 1.349111 +v -1.750000 2.588388 1.286611 +v -1.786612 2.650888 1.224111 +v -1.875000 2.500000 1.125000 +v -1.963388 2.500000 1.161611 +v -2.000000 2.500000 1.250000 +v -1.963388 2.500000 1.338388 +v -1.786612 2.500000 1.338388 +v -1.750000 2.500000 1.250000 +v -1.786612 2.500000 1.161611 +v -1.875000 1.000000 1.375000 +v -1.875000 1.000000 1.125000 +v -1.963388 1.000000 1.161611 +v -2.000000 1.000000 1.250000 +v -1.963388 1.000000 1.338388 +v -1.786612 1.000000 1.338388 +v -1.750000 1.000000 1.250000 +v -1.786612 1.000000 1.161611 +v -1.875000 0.823223 1.301777 +v -1.963388 0.974112 1.150888 +v -2.000000 0.911612 1.213388 +v -1.963388 0.849112 1.275888 +v -1.786612 0.849112 1.275888 +v -1.750000 0.911612 1.213388 +v -1.786612 0.974112 1.150888 +v -1.875000 0.750000 1.125000 +v -1.963388 0.963388 1.125000 +v -2.000000 0.875000 1.125000 +v -1.963388 0.786612 1.125000 +v -1.786612 0.786612 1.125000 +v -1.750000 0.875000 1.125000 +v -1.786612 0.963388 1.125000 +v -1.875000 1.000000 1.000000 +v -1.875000 0.750000 1.000000 +v -1.963388 0.963388 1.000000 +v -2.000000 0.875000 1.000000 +v -1.963388 0.786612 1.000000 +v -1.786612 0.786612 1.000000 +v -1.750000 0.875000 1.000000 +v -1.786612 0.963388 1.000000 +v 1.875000 2.750000 1.750000 +v 1.786612 2.713388 1.750000 +v 1.750000 2.625000 1.750000 +v 1.786612 2.536612 1.750000 +v 1.875000 2.500000 1.750000 +v 1.963388 2.536612 1.750000 +v 2.000000 2.625000 1.750000 +v 1.963388 2.713388 1.750000 +v 1.875000 2.750000 1.375000 +v 1.786612 2.713388 1.375000 +v 1.750000 2.625000 1.375000 +v 1.786612 2.536612 1.375000 +v 1.875000 2.500000 1.375000 +v 1.963388 2.536612 1.375000 +v 2.000000 2.625000 1.375000 +v 1.963388 2.713388 1.375000 +v 1.875000 2.676776 1.198223 +v 1.786612 2.650888 1.224112 +v 1.750000 2.588388 1.286612 +v 1.786612 2.525888 1.349112 +v 1.963388 2.525888 1.349112 +v 2.000000 2.588388 1.286612 +v 1.963388 2.650888 1.224112 +v 1.875000 2.500000 1.125000 +v 1.786612 2.500000 1.161612 +v 1.750000 2.500000 1.250000 +v 1.786612 2.500000 1.338389 +v 1.963388 2.500000 1.338389 +v 2.000000 2.500000 1.250000 +v 1.963388 2.500000 1.161612 +v 1.875000 1.000000 1.375000 +v 1.875000 1.000000 1.125000 +v 1.786612 1.000000 1.161612 +v 1.750000 1.000000 1.250000 +v 1.786612 1.000000 1.338389 +v 1.963388 1.000000 1.338389 +v 2.000000 1.000000 1.250000 +v 1.963388 1.000000 1.161612 +v 1.875000 0.823223 1.301777 +v 1.786612 0.974112 1.150889 +v 1.750000 0.911612 1.213389 +v 1.786612 0.849112 1.275889 +v 1.963388 0.849112 1.275889 +v 2.000000 0.911612 1.213389 +v 1.963388 0.974112 1.150889 +v 1.875000 0.750000 1.125000 +v 1.786612 0.963388 1.125000 +v 1.750000 0.875000 1.125000 +v 1.786612 0.786612 1.125000 +v 1.963388 0.786612 1.125000 +v 2.000000 0.875000 1.125000 +v 1.963388 0.963388 1.125000 +v 1.875000 1.000000 1.000000 +v 1.875000 0.750000 1.000000 +v 1.786612 0.963388 1.000000 +v 1.750000 0.875000 1.000000 +v 1.786612 0.786612 1.000000 +v 1.963388 0.786612 1.000000 +v 2.000000 0.875000 1.000000 +v 1.963388 0.963388 1.000000 +v 0.125000 2.750000 -1.750000 +v 0.213388 2.713388 -1.750000 +v 0.250000 2.625000 -1.750000 +v 0.213388 2.536612 -1.750000 +v 0.125000 2.500000 -1.750000 +v 0.036611 2.536612 -1.750000 +v -0.000000 2.625000 -1.750000 +v 0.036611 2.713388 -1.750000 +v 0.125000 2.750000 -1.375000 +v 0.213388 2.713388 -1.375000 +v 0.250000 2.625000 -1.375000 +v 0.213388 2.536612 -1.375000 +v 0.125000 2.500000 -1.375000 +v 0.036611 2.536612 -1.375000 +v -0.000000 2.625000 -1.375000 +v 0.036611 2.713388 -1.375000 +v 0.125000 2.676776 -1.198223 +v 0.213388 2.650888 -1.224112 +v 0.250000 2.588388 -1.286612 +v 0.213388 2.525888 -1.349112 +v 0.036611 2.525888 -1.349112 +v -0.000000 2.588388 -1.286612 +v 0.036612 2.650888 -1.224112 +v 0.125000 2.500000 -1.125000 +v 0.213388 2.500000 -1.161612 +v 0.250000 2.500000 -1.250000 +v 0.213388 2.500000 -1.338388 +v 0.036611 2.500000 -1.338388 +v -0.000000 2.500000 -1.250000 +v 0.036612 2.500000 -1.161612 +v 0.125000 1.000000 -1.375000 +v 0.125000 1.000000 -1.125000 +v 0.213388 1.000000 -1.161612 +v 0.250000 1.000000 -1.250000 +v 0.213388 1.000000 -1.338388 +v 0.036611 1.000000 -1.338388 +v -0.000000 1.000000 -1.250000 +v 0.036612 1.000000 -1.161612 +v 0.125000 0.823223 -1.301777 +v 0.213388 0.974112 -1.150888 +v 0.250000 0.911612 -1.213388 +v 0.213388 0.849112 -1.275888 +v 0.036612 0.849112 -1.275888 +v -0.000000 0.911612 -1.213388 +v 0.036612 0.974112 -1.150888 +v 0.125000 0.750000 -1.125000 +v 0.213388 0.963388 -1.125000 +v 0.250000 0.875000 -1.125000 +v 0.213388 0.786612 -1.125000 +v 0.036612 0.786612 -1.125000 +v -0.000000 0.875000 -1.125000 +v 0.036612 0.963388 -1.125000 +v 0.125000 1.000000 -1.000000 +v 0.125000 0.750000 -1.000000 +v 0.213388 0.963388 -1.000000 +v 0.250000 0.875000 -1.000000 +v 0.213388 0.786612 -1.000000 +v 0.036612 0.786612 -1.000000 +v -0.000000 0.875000 -1.000000 +v 0.036612 0.963388 -1.000000 +v -0.125000 2.750000 -1.750000 +v -0.036612 2.713388 -1.750000 +v -0.000000 2.625000 -1.750000 +v -0.036612 2.536612 -1.750000 +v -0.125000 2.500000 -1.750000 +v -0.213389 2.536612 -1.750000 +v -0.250000 2.625000 -1.750000 +v -0.213389 2.713388 -1.750000 +v -0.125000 2.750000 -1.375000 +v -0.036612 2.713388 -1.375000 +v -0.000000 2.625000 -1.375000 +v -0.036612 2.536612 -1.375000 +v -0.125000 2.500000 -1.375000 +v -0.213389 2.536612 -1.375000 +v -0.250000 2.625000 -1.375000 +v -0.213389 2.713388 -1.375000 +v -0.125000 2.676776 -1.198223 +v -0.036612 2.650888 -1.224112 +v -0.000000 2.588388 -1.286612 +v -0.036612 2.525888 -1.349112 +v -0.213389 2.525888 -1.349112 +v -0.250000 2.588388 -1.286612 +v -0.213389 2.650888 -1.224112 +v -0.125000 2.500000 -1.125000 +v -0.036612 2.500000 -1.161612 +v -0.000000 2.500000 -1.250000 +v -0.036612 2.500000 -1.338388 +v -0.213389 2.500000 -1.338388 +v -0.250000 2.500000 -1.250000 +v -0.213388 2.500000 -1.161612 +v -0.125000 1.000000 -1.375000 +v -0.125000 1.000000 -1.125000 +v -0.036612 1.000000 -1.161612 +v -0.000000 1.000000 -1.250000 +v -0.036612 1.000000 -1.338388 +v -0.213389 1.000000 -1.338388 +v -0.250000 1.000000 -1.250000 +v -0.213388 1.000000 -1.161612 +v -0.125000 0.823223 -1.301777 +v -0.036612 0.974112 -1.150888 +v -0.000000 0.911612 -1.213388 +v -0.036612 0.849112 -1.275888 +v -0.213389 0.849112 -1.275888 +v -0.250000 0.911612 -1.213388 +v -0.213388 0.974112 -1.150888 +v -0.125000 0.750000 -1.125000 +v -0.036612 0.963388 -1.125000 +v -0.000000 0.875000 -1.125000 +v -0.036612 0.786612 -1.125000 +v -0.213389 0.786612 -1.125000 +v -0.250000 0.875000 -1.125000 +v -0.213388 0.963388 -1.125000 +v -0.125000 1.000000 -1.000000 +v -0.125000 0.750000 -1.000000 +v -0.036612 0.963388 -1.000000 +v -0.000000 0.875000 -1.000000 +v -0.036612 0.786612 -1.000000 +v -0.213388 0.786612 -1.000000 +v -0.250000 0.875000 -1.000000 +v -0.213388 0.963388 -1.000000 +v 1.125000 2.750000 -1.750000 +v 1.213388 2.713388 -1.750000 +v 1.250000 2.625000 -1.750000 +v 1.213388 2.536612 -1.750000 +v 1.125000 2.500000 -1.750000 +v 1.036612 2.536612 -1.750000 +v 1.000000 2.625000 -1.750000 +v 1.036612 2.713388 -1.750000 +v 1.125000 2.750000 -1.375000 +v 1.213388 2.713388 -1.375000 +v 1.250000 2.625000 -1.375000 +v 1.213388 2.536612 -1.375000 +v 1.125000 2.500000 -1.375000 +v 1.036612 2.536612 -1.375000 +v 1.000000 2.625000 -1.375000 +v 1.036612 2.713388 -1.375000 +v 1.125000 2.676776 -1.198223 +v 1.213388 2.650888 -1.224112 +v 1.250000 2.588388 -1.286612 +v 1.213388 2.525888 -1.349112 +v 1.036612 2.525888 -1.349112 +v 1.000000 2.588388 -1.286612 +v 1.036612 2.650888 -1.224112 +v 1.125000 2.500000 -1.125000 +v 1.213388 2.500000 -1.161612 +v 1.250000 2.500000 -1.250000 +v 1.213388 2.500000 -1.338388 +v 1.036612 2.500000 -1.338388 +v 1.000000 2.500000 -1.250000 +v 1.036612 2.500000 -1.161612 +v 1.125000 1.000000 -1.375000 +v 1.125000 1.000000 -1.125000 +v 1.213388 1.000000 -1.161612 +v 1.250000 1.000000 -1.250000 +v 1.213388 1.000000 -1.338388 +v 1.036612 1.000000 -1.338388 +v 1.000000 1.000000 -1.250000 +v 1.036612 1.000000 -1.161612 +v 1.125000 0.823223 -1.301777 +v 1.213388 0.974112 -1.150888 +v 1.250000 0.911612 -1.213388 +v 1.213388 0.849112 -1.275888 +v 1.036612 0.849112 -1.275888 +v 1.000000 0.911612 -1.213388 +v 1.036612 0.974112 -1.150888 +v 1.125000 0.750000 -1.125000 +v 1.213388 0.963388 -1.125000 +v 1.250000 0.875000 -1.125000 +v 1.213388 0.786612 -1.125000 +v 1.036612 0.786612 -1.125000 +v 1.000000 0.875000 -1.125000 +v 1.036612 0.963388 -1.125000 +v 1.125000 1.000000 -1.000000 +v 1.125000 0.750000 -1.000000 +v 1.213388 0.963388 -1.000000 +v 1.250000 0.875000 -1.000000 +v 1.213388 0.786612 -1.000000 +v 1.036612 0.786612 -1.000000 +v 1.000000 0.875000 -1.000000 +v 1.036612 0.963388 -1.000000 +v 0.875000 2.750000 -1.750000 +v 0.963388 2.713388 -1.750000 +v 1.000000 2.625000 -1.750000 +v 0.963388 2.536612 -1.750000 +v 0.875000 2.500000 -1.750000 +v 0.786611 2.536612 -1.750000 +v 0.750000 2.625000 -1.750000 +v 0.786611 2.713388 -1.750000 +v 0.875000 2.750000 -1.375000 +v 0.963388 2.713388 -1.375000 +v 1.000000 2.625000 -1.375000 +v 0.963388 2.536612 -1.375000 +v 0.875000 2.500000 -1.375000 +v 0.786611 2.536612 -1.375000 +v 0.750000 2.625000 -1.375000 +v 0.786611 2.713388 -1.375000 +v 0.875000 2.676776 -1.198223 +v 0.963388 2.650888 -1.224112 +v 1.000000 2.588388 -1.286612 +v 0.963388 2.525888 -1.349112 +v 0.786611 2.525888 -1.349112 +v 0.750000 2.588388 -1.286612 +v 0.786611 2.650888 -1.224112 +v 0.875000 2.500000 -1.125000 +v 0.963388 2.500000 -1.161612 +v 1.000000 2.500000 -1.250000 +v 0.963388 2.500000 -1.338388 +v 0.786611 2.500000 -1.338388 +v 0.750000 2.500000 -1.250000 +v 0.786612 2.500000 -1.161612 +v 0.875000 1.000000 -1.375000 +v 0.875000 1.000000 -1.125000 +v 0.963388 1.000000 -1.161612 +v 1.000000 1.000000 -1.250000 +v 0.963388 1.000000 -1.338388 +v 0.786611 1.000000 -1.338388 +v 0.750000 1.000000 -1.250000 +v 0.786612 1.000000 -1.161612 +v 0.875000 0.823223 -1.301777 +v 0.963388 0.974112 -1.150888 +v 1.000000 0.911612 -1.213388 +v 0.963388 0.849112 -1.275888 +v 0.786611 0.849112 -1.275888 +v 0.750000 0.911612 -1.213388 +v 0.786612 0.974112 -1.150888 +v 0.875000 0.750000 -1.125000 +v 0.963388 0.963388 -1.125000 +v 1.000000 0.875000 -1.125000 +v 0.963388 0.786612 -1.125000 +v 0.786611 0.786612 -1.125000 +v 0.750000 0.875000 -1.125000 +v 0.786612 0.963388 -1.125000 +v 0.875000 1.000000 -1.000000 +v 0.875000 0.750000 -1.000000 +v 0.963389 0.963388 -1.000000 +v 1.000000 0.875000 -1.000000 +v 0.963388 0.786612 -1.000000 +v 0.786612 0.786612 -1.000000 +v 0.750000 0.875000 -1.000000 +v 0.786612 0.963388 -1.000000 +v 1.875000 2.750000 -1.750000 +v 1.963388 2.713388 -1.750000 +v 2.000000 2.625000 -1.750000 +v 1.963388 2.536612 -1.750000 +v 1.875000 2.500000 -1.750000 +v 1.786612 2.536612 -1.750000 +v 1.750000 2.625000 -1.750000 +v 1.786612 2.713388 -1.750000 +v 1.875000 2.750000 -1.375000 +v 1.963388 2.713388 -1.375000 +v 2.000000 2.625000 -1.375000 +v 1.963388 2.536612 -1.375000 +v 1.875000 2.500000 -1.375000 +v 1.786612 2.536612 -1.375000 +v 1.750000 2.625000 -1.375000 +v 1.786612 2.713388 -1.375000 +v 1.875000 2.676776 -1.198223 +v 1.963388 2.650888 -1.224111 +v 2.000000 2.588388 -1.286611 +v 1.963388 2.525888 -1.349111 +v 1.786612 2.525888 -1.349111 +v 1.750000 2.588388 -1.286611 +v 1.786612 2.650888 -1.224111 +v 1.875000 2.500000 -1.125000 +v 1.963388 2.500000 -1.161611 +v 2.000000 2.500000 -1.250000 +v 1.963388 2.500000 -1.338388 +v 1.786612 2.500000 -1.338388 +v 1.750000 2.500000 -1.250000 +v 1.786612 2.500000 -1.161611 +v 1.875000 1.000000 -1.375000 +v 1.875000 1.000000 -1.125000 +v 1.963388 1.000000 -1.161611 +v 2.000000 1.000000 -1.250000 +v 1.963388 1.000000 -1.338388 +v 1.786612 1.000000 -1.338388 +v 1.750000 1.000000 -1.250000 +v 1.786612 1.000000 -1.161611 +v 1.875000 0.823223 -1.301777 +v 1.963388 0.974112 -1.150888 +v 2.000000 0.911612 -1.213388 +v 1.963388 0.849112 -1.275888 +v 1.786612 0.849112 -1.275888 +v 1.750000 0.911612 -1.213388 +v 1.786612 0.974112 -1.150888 +v 1.875000 0.750000 -1.125000 +v 1.963388 0.963388 -1.125000 +v 2.000000 0.875000 -1.125000 +v 1.963388 0.786612 -1.125000 +v 1.786612 0.786612 -1.125000 +v 1.750000 0.875000 -1.125000 +v 1.786612 0.963388 -1.125000 +v 1.875000 1.000000 -1.000000 +v 1.875000 0.750000 -1.000000 +v 1.963388 0.963388 -1.000000 +v 2.000000 0.875000 -1.000000 +v 1.963388 0.786612 -1.000000 +v 1.786612 0.786612 -1.000000 +v 1.750000 0.875000 -1.000000 +v 1.786612 0.963388 -1.000000 +v -1.875000 2.750000 -1.750000 +v -1.786612 2.713388 -1.750000 +v -1.750000 2.625000 -1.750000 +v -1.786612 2.536612 -1.750000 +v -1.875000 2.500000 -1.750000 +v -1.963388 2.536612 -1.750000 +v -2.000000 2.625000 -1.750000 +v -1.963388 2.713388 -1.750000 +v -1.875000 2.750000 -1.375000 +v -1.786612 2.713388 -1.375000 +v -1.750000 2.625000 -1.375000 +v -1.786612 2.536612 -1.375000 +v -1.875000 2.500000 -1.375000 +v -1.963388 2.536612 -1.375000 +v -2.000000 2.625000 -1.375000 +v -1.963388 2.713388 -1.375000 +v -1.875000 2.676776 -1.198223 +v -1.786612 2.650888 -1.224112 +v -1.750000 2.588388 -1.286612 +v -1.786612 2.525888 -1.349112 +v -1.963388 2.525888 -1.349112 +v -2.000000 2.588388 -1.286612 +v -1.963388 2.650888 -1.224112 +v -1.875000 2.500000 -1.125000 +v -1.786612 2.500000 -1.161612 +v -1.750000 2.500000 -1.250000 +v -1.786612 2.500000 -1.338389 +v -1.963388 2.500000 -1.338389 +v -2.000000 2.500000 -1.250000 +v -1.963388 2.500000 -1.161612 +v -1.875000 1.000000 -1.375000 +v -1.875000 1.000000 -1.125000 +v -1.786612 1.000000 -1.161612 +v -1.750000 1.000000 -1.250000 +v -1.786612 1.000000 -1.338389 +v -1.963388 1.000000 -1.338389 +v -2.000000 1.000000 -1.250000 +v -1.963388 1.000000 -1.161612 +v -1.875000 0.823223 -1.301777 +v -1.786612 0.974112 -1.150889 +v -1.750000 0.911612 -1.213389 +v -1.786612 0.849112 -1.275889 +v -1.963388 0.849112 -1.275889 +v -2.000000 0.911612 -1.213389 +v -1.963388 0.974112 -1.150889 +v -1.875000 0.750000 -1.125000 +v -1.786612 0.963388 -1.125000 +v -1.750000 0.875000 -1.125000 +v -1.786612 0.786612 -1.125000 +v -1.963388 0.786612 -1.125000 +v -2.000000 0.875000 -1.125000 +v -1.963388 0.963388 -1.125000 +v -1.875000 1.000000 -1.000000 +v -1.875000 0.750000 -1.000000 +v -1.786612 0.963388 -1.000000 +v -1.750000 0.875000 -1.000000 +v -1.786612 0.786612 -1.000000 +v -1.963388 0.786612 -1.000000 +v -2.000000 0.875000 -1.000000 +v -1.963388 0.963388 -1.000000 +v 2.500000 0.312500 0.812500 +v 2.500000 0.312500 1.187500 +v 2.500000 0.687500 0.812500 +v 2.500000 0.687500 1.187500 +v 2.375000 0.625000 0.875000 +v 2.375000 0.375000 0.875000 +v 2.375000 0.375000 1.125000 +v 2.375000 0.625000 1.125000 +v 2.375000 0.687500 0.812500 +v 2.375000 0.312500 0.812500 +v 2.375000 0.312500 1.187500 +v 2.375000 0.687500 1.187500 +v 2.250000 0.625000 0.875000 +v 2.250000 0.375000 0.875000 +v 2.250000 0.375000 1.125000 +v 2.250000 0.625000 1.125000 +v 2.500000 0.312500 1.812500 +v 2.500000 0.312500 2.187500 +v 2.500000 0.687500 1.812500 +v 2.500000 0.687500 2.187500 +v 2.375000 0.625000 1.875000 +v 2.375000 0.375000 1.875000 +v 2.375000 0.375000 2.125000 +v 2.375000 0.625000 2.125000 +v 2.375000 0.687500 1.812500 +v 2.375000 0.312500 1.812500 +v 2.375000 0.312500 2.187500 +v 2.375000 0.687500 2.187500 +v 2.250000 0.625000 1.875000 +v 2.250000 0.375000 1.875000 +v 2.250000 0.375000 2.125000 +v 2.250000 0.625000 2.125000 +v 2.500000 0.312500 -2.187500 +v 2.500000 0.312500 -1.812500 +v 2.500000 0.687500 -2.187500 +v 2.500000 0.687500 -1.812500 +v 2.375000 0.625000 -2.125000 +v 2.375000 0.375000 -2.125000 +v 2.375000 0.375000 -1.875000 +v 2.375000 0.625000 -1.875000 +v 2.375000 0.687500 -2.187500 +v 2.375000 0.312500 -2.187500 +v 2.375000 0.312500 -1.812500 +v 2.375000 0.687500 -1.812500 +v 2.250000 0.625000 -2.125000 +v 2.250000 0.375000 -2.125000 +v 2.250000 0.375000 -1.875000 +v 2.250000 0.625000 -1.875000 +v 2.500000 0.312500 -1.187500 +v 2.500000 0.312500 -0.812500 +v 2.500000 0.687500 -1.187500 +v 2.500000 0.687500 -0.812500 +v 2.375000 0.625000 -1.125000 +v 2.375000 0.375000 -1.125000 +v 2.375000 0.375000 -0.875000 +v 2.375000 0.625000 -0.875000 +v 2.375000 0.687500 -1.187500 +v 2.375000 0.312500 -1.187500 +v 2.375000 0.312500 -0.812500 +v 2.375000 0.687500 -0.812500 +v 2.250000 0.625000 -1.125000 +v 2.250000 0.375000 -1.125000 +v 2.250000 0.375000 -0.875000 +v 2.250000 0.625000 -0.875000 +v -2.500000 0.312500 0.187500 +v -2.500000 0.312500 -0.187500 +v -2.500000 0.687500 0.187500 +v -2.500000 0.687500 -0.187500 +v -2.375000 0.625000 0.125000 +v -2.375000 0.375000 0.125000 +v -2.375000 0.375000 -0.125000 +v -2.375000 0.625000 -0.125000 +v -2.375000 0.687500 0.187500 +v -2.375000 0.312500 0.187500 +v -2.375000 0.312500 -0.187500 +v -2.375000 0.687500 -0.187500 +v -2.250000 0.625000 0.125000 +v -2.250000 0.375000 0.125000 +v -2.250000 0.375000 -0.125000 +v -2.250000 0.625000 -0.125000 +v -2.500000 0.312500 -0.812500 +v -2.500000 0.312500 -1.187500 +v -2.500000 0.687500 -0.812500 +v -2.500000 0.687500 -1.187500 +v -2.375000 0.625000 -0.875000 +v -2.375000 0.375000 -0.875000 +v -2.375000 0.375000 -1.125000 +v -2.375000 0.625000 -1.125000 +v -2.375000 0.687500 -0.812500 +v -2.375000 0.312500 -0.812500 +v -2.375000 0.312500 -1.187500 +v -2.375000 0.687500 -1.187500 +v -2.250000 0.625000 -0.875000 +v -2.250000 0.375000 -0.875000 +v -2.250000 0.375000 -1.125000 +v -2.250000 0.625000 -1.125000 +v -2.500000 0.312500 -1.812500 +v -2.500000 0.312500 -2.187500 +v -2.500000 0.687500 -1.812500 +v -2.500000 0.687500 -2.187500 +v -2.375000 0.625000 -1.875000 +v -2.375000 0.375000 -1.875000 +v -2.375000 0.375000 -2.125000 +v -2.375000 0.625000 -2.125000 +v -2.375000 0.687500 -1.812500 +v -2.375000 0.312500 -1.812500 +v -2.375000 0.312500 -2.187500 +v -2.375000 0.687500 -2.187500 +v -2.250000 0.625000 -1.875000 +v -2.250000 0.375000 -1.875000 +v -2.250000 0.375000 -2.125000 +v -2.250000 0.625000 -2.125000 +v -2.500000 0.312500 2.187500 +v -2.500000 0.312500 1.812500 +v -2.500000 0.687500 2.187500 +v -2.500000 0.687500 1.812500 +v -2.375000 0.625000 2.125000 +v -2.375000 0.375000 2.125000 +v -2.375000 0.375000 1.875000 +v -2.375000 0.625000 1.875000 +v -2.375000 0.687500 2.187500 +v -2.375000 0.312500 2.187500 +v -2.375000 0.312500 1.812500 +v -2.375000 0.687500 1.812500 +v -2.250000 0.625000 2.125000 +v -2.250000 0.375000 2.125000 +v -2.250000 0.375000 1.875000 +v -2.250000 0.625000 1.875000 +v -2.500000 0.312500 1.187500 +v -2.500000 0.312500 0.812500 +v -2.500000 0.687500 1.187500 +v -2.500000 0.687500 0.812500 +v -2.375000 0.625000 1.125000 +v -2.375000 0.375000 1.125000 +v -2.375000 0.375000 0.875000 +v -2.375000 0.625000 0.875000 +v -2.375000 0.687500 1.187500 +v -2.375000 0.312500 1.187500 +v -2.375000 0.312500 0.812500 +v -2.375000 0.687500 0.812500 +v -2.250000 0.625000 1.125000 +v -2.250000 0.375000 1.125000 +v -2.250000 0.375000 0.875000 +v -2.250000 0.625000 0.875000 +v -0.187500 0.312500 -2.500000 +v 0.187500 0.312500 -2.500000 +v -0.187500 0.687500 -2.500000 +v 0.187500 0.687500 -2.500000 +v -0.125000 0.625000 -2.375000 +v -0.125000 0.375000 -2.375000 +v 0.125000 0.375000 -2.375000 +v 0.125000 0.625000 -2.375000 +v -0.187500 0.687500 -2.375000 +v -0.187500 0.312500 -2.375000 +v 0.187500 0.312500 -2.375000 +v 0.187500 0.687500 -2.375000 +v -0.125000 0.625000 -2.250000 +v -0.125000 0.375000 -2.250000 +v 0.125000 0.375000 -2.250000 +v 0.125000 0.625000 -2.250000 +v 0.812500 0.312500 -2.500000 +v 1.187500 0.312500 -2.500000 +v 0.812500 0.687500 -2.500000 +v 1.187500 0.687500 -2.500000 +v 0.875000 0.625000 -2.375000 +v 0.875000 0.375000 -2.375000 +v 1.125000 0.375000 -2.375000 +v 1.125000 0.625000 -2.375000 +v 0.812500 0.687500 -2.375000 +v 0.812500 0.312500 -2.375000 +v 1.187500 0.312500 -2.375000 +v 1.187500 0.687500 -2.375000 +v 0.875000 0.625000 -2.250000 +v 0.875000 0.375000 -2.250000 +v 1.125000 0.375000 -2.250000 +v 1.125000 0.625000 -2.250000 +v 1.812500 0.312500 -2.500000 +v 2.187500 0.312500 -2.500000 +v 1.812500 0.687500 -2.500000 +v 2.187500 0.687500 -2.500000 +v 1.875000 0.625000 -2.375000 +v 1.875000 0.375000 -2.375000 +v 2.125000 0.375000 -2.375000 +v 2.125000 0.625000 -2.375000 +v 1.812500 0.687500 -2.375000 +v 1.812500 0.312500 -2.375000 +v 2.187500 0.312500 -2.375000 +v 2.187500 0.687500 -2.375000 +v 1.875000 0.625000 -2.250000 +v 1.875000 0.375000 -2.250000 +v 2.125000 0.375000 -2.250000 +v 2.125000 0.625000 -2.250000 +v -2.187500 0.312500 -2.500000 +v -1.812500 0.312500 -2.500000 +v -2.187500 0.687500 -2.500000 +v -1.812500 0.687500 -2.500000 +v -2.125000 0.625000 -2.375000 +v -2.125000 0.375000 -2.375000 +v -1.875000 0.375000 -2.375000 +v -1.875000 0.625000 -2.375000 +v -2.187500 0.687500 -2.375000 +v -2.187500 0.312500 -2.375000 +v -1.812500 0.312500 -2.375000 +v -1.812500 0.687500 -2.375000 +v -2.125000 0.625000 -2.250000 +v -2.125000 0.375000 -2.250000 +v -1.875000 0.375000 -2.250000 +v -1.875000 0.625000 -2.250000 +v -1.187500 0.312500 -2.500000 +v -0.812500 0.312500 -2.500000 +v -1.187500 0.687500 -2.500000 +v -0.812500 0.687500 -2.500000 +v -1.125000 0.625000 -2.375000 +v -1.125000 0.375000 -2.375000 +v -0.875000 0.375000 -2.375000 +v -0.875000 0.625000 -2.375000 +v -1.187500 0.687500 -2.375000 +v -1.187500 0.312500 -2.375000 +v -0.812500 0.312500 -2.375000 +v -0.812500 0.687500 -2.375000 +v -1.125000 0.625000 -2.250000 +v -1.125000 0.375000 -2.250000 +v -0.875000 0.375000 -2.250000 +v -0.875000 0.625000 -2.250000 +v 0.187500 0.312500 2.500000 +v -0.187500 0.312500 2.500000 +v 0.187500 0.687500 2.500000 +v -0.187500 0.687500 2.500000 +v 0.125000 0.625000 2.375000 +v 0.125000 0.375000 2.375000 +v -0.125000 0.375000 2.375000 +v -0.125000 0.625000 2.375000 +v 0.187500 0.687500 2.375000 +v 0.187500 0.312500 2.375000 +v -0.187500 0.312500 2.375000 +v -0.187500 0.687500 2.375000 +v 0.125000 0.625000 2.250000 +v 0.125000 0.375000 2.250000 +v -0.125000 0.375000 2.250000 +v -0.125000 0.625000 2.250000 +v -0.812500 0.312500 2.500000 +v -1.187500 0.312500 2.500000 +v -0.812500 0.687500 2.500000 +v -1.187500 0.687500 2.500000 +v -0.875000 0.625000 2.375000 +v -0.875000 0.375000 2.375000 +v -1.125000 0.375000 2.375000 +v -1.125000 0.625000 2.375000 +v -0.812500 0.687500 2.375000 +v -0.812500 0.312500 2.375000 +v -1.187500 0.312500 2.375000 +v -1.187500 0.687500 2.375000 +v -0.875000 0.625000 2.250000 +v -0.875000 0.375000 2.250000 +v -1.125000 0.375000 2.250000 +v -1.125000 0.625000 2.250000 +v -1.812500 0.312500 2.500000 +v -2.187500 0.312500 2.500000 +v -1.812500 0.687500 2.500000 +v -2.187500 0.687500 2.500000 +v -1.875000 0.625000 2.375000 +v -1.875000 0.375000 2.375000 +v -2.125000 0.375000 2.375000 +v -2.125000 0.625000 2.375000 +v -1.812500 0.687500 2.375000 +v -1.812500 0.312500 2.375000 +v -2.187500 0.312500 2.375000 +v -2.187500 0.687500 2.375000 +v -1.875000 0.625000 2.250000 +v -1.875000 0.375000 2.250000 +v -2.125000 0.375000 2.250000 +v -2.125000 0.625000 2.250000 +v 2.187500 0.312500 2.500000 +v 1.812500 0.312500 2.500000 +v 2.187500 0.687500 2.500000 +v 1.812500 0.687500 2.500000 +v 2.125000 0.625000 2.375000 +v 2.125000 0.375000 2.375000 +v 1.875000 0.375000 2.375000 +v 1.875000 0.625000 2.375000 +v 2.187500 0.687500 2.375000 +v 2.187500 0.312500 2.375000 +v 1.812500 0.312500 2.375000 +v 1.812500 0.687500 2.375000 +v 2.125000 0.625000 2.250000 +v 2.125000 0.375000 2.250000 +v 1.875000 0.375000 2.250000 +v 1.875000 0.625000 2.250000 +v 1.187500 0.312500 2.500000 +v 0.812500 0.312500 2.500000 +v 1.187500 0.687500 2.500000 +v 0.812500 0.687500 2.500000 +v 1.125000 0.625000 2.375000 +v 1.125000 0.375000 2.375000 +v 0.875000 0.375000 2.375000 +v 0.875000 0.625000 2.375000 +v 1.187500 0.687500 2.375000 +v 1.187500 0.312500 2.375000 +v 0.812500 0.312500 2.375000 +v 0.812500 0.687500 2.375000 +v 1.125000 0.625000 2.250000 +v 1.125000 0.375000 2.250000 +v 0.875000 0.375000 2.250000 +v 0.875000 0.625000 2.250000 +v 1.088388 0.411612 1.750000 +v 1.000000 0.375000 1.750000 +v 0.911612 0.411612 1.750000 +v 0.875000 0.500000 1.750000 +v 0.911612 0.588388 1.750000 +v 1.000000 0.625000 1.750000 +v 1.088388 0.588388 1.750000 +v 1.125000 0.500000 1.750000 +v 1.088388 0.411612 1.250000 +v 1.000000 0.375000 1.250000 +v 0.911612 0.411612 1.250000 +v 0.875000 0.500000 1.250000 +v 0.911612 0.588388 1.250000 +v 1.000000 0.625000 1.250000 +v 1.088388 0.588388 1.250000 +v 1.125000 0.500000 1.250000 +v 0.088388 0.411612 1.750000 +v -0.000000 0.375000 1.750000 +v -0.088388 0.411612 1.750000 +v -0.125000 0.500000 1.750000 +v -0.088388 0.588388 1.750000 +v -0.000000 0.625000 1.750000 +v 0.088388 0.588388 1.750000 +v 0.125000 0.500000 1.750000 +v 0.088388 0.411612 1.250000 +v -0.000000 0.375000 1.250000 +v -0.088388 0.411612 1.250000 +v -0.125000 0.500000 1.250000 +v -0.088388 0.588388 1.250000 +v -0.000000 0.625000 1.250000 +v 0.088388 0.588388 1.250000 +v 0.125000 0.500000 1.250000 +v -0.911612 0.411612 1.750000 +v -1.000000 0.375000 1.750000 +v -1.088388 0.411612 1.750000 +v -1.125000 0.500000 1.750000 +v -1.088388 0.588388 1.750000 +v -1.000000 0.625000 1.750000 +v -0.911612 0.588388 1.750000 +v -0.875000 0.500000 1.750000 +v -0.911612 0.411612 1.250000 +v -1.000000 0.375000 1.250000 +v -1.088388 0.411612 1.250000 +v -1.125000 0.500000 1.250000 +v -1.088388 0.588388 1.250000 +v -1.000000 0.625000 1.250000 +v -0.911612 0.588388 1.250000 +v -0.875000 0.500000 1.250000 +v -1.911612 0.411612 1.750000 +v -2.000000 0.375000 1.750000 +v -2.088388 0.411612 1.750000 +v -2.125000 0.500000 1.750000 +v -2.088388 0.588388 1.750000 +v -2.000000 0.625000 1.750000 +v -1.911612 0.588388 1.750000 +v -1.875000 0.500000 1.750000 +v -1.911612 0.411612 1.250000 +v -2.000000 0.375000 1.250000 +v -2.088388 0.411612 1.250000 +v -2.125000 0.500000 1.250000 +v -2.088388 0.588388 1.250000 +v -2.000000 0.625000 1.250000 +v -1.911612 0.588388 1.250000 +v -1.875000 0.500000 1.250000 +v 2.088388 0.411612 -1.250000 +v 2.000000 0.375000 -1.250000 +v 1.911612 0.411612 -1.250000 +v 1.875000 0.500000 -1.250000 +v 1.911612 0.588388 -1.250000 +v 2.000000 0.625000 -1.250000 +v 2.088388 0.588388 -1.250000 +v 2.125000 0.500000 -1.250000 +v 2.088388 0.411612 -1.750000 +v 2.000000 0.375000 -1.750000 +v 1.911612 0.411612 -1.750000 +v 1.875000 0.500000 -1.750000 +v 1.911612 0.588388 -1.750000 +v 2.000000 0.625000 -1.750000 +v 2.088388 0.588388 -1.750000 +v 2.125000 0.500000 -1.750000 +v 1.088388 0.411612 -1.250000 +v 1.000000 0.375000 -1.250000 +v 0.911612 0.411612 -1.250000 +v 0.875000 0.500000 -1.250000 +v 0.911612 0.588388 -1.250000 +v 1.000000 0.625000 -1.250000 +v 1.088388 0.588388 -1.250000 +v 1.125000 0.500000 -1.250000 +v 1.088389 0.411612 -1.750000 +v 1.000000 0.375000 -1.750000 +v 0.911612 0.411612 -1.750000 +v 0.875000 0.500000 -1.750000 +v 0.911612 0.588388 -1.750000 +v 1.000000 0.625000 -1.750000 +v 1.088389 0.588388 -1.750000 +v 1.125000 0.500000 -1.750000 +v 0.088388 0.411612 -1.250000 +v 0.000000 0.375000 -1.250000 +v -0.088388 0.411612 -1.250000 +v -0.125000 0.500000 -1.250000 +v -0.088388 0.588388 -1.250000 +v 0.000000 0.625000 -1.250000 +v 0.088388 0.588388 -1.250000 +v 0.125000 0.500000 -1.250000 +v 0.088389 0.411612 -1.750000 +v 0.000000 0.375000 -1.750000 +v -0.088388 0.411612 -1.750000 +v -0.125000 0.500000 -1.750000 +v -0.088388 0.588388 -1.750000 +v 0.000000 0.625000 -1.750000 +v 0.088389 0.588388 -1.750000 +v 0.125000 0.500000 -1.750000 +v -0.911611 0.411612 -1.250000 +v -1.000000 0.375000 -1.250000 +v -1.088388 0.411612 -1.250000 +v -1.125000 0.500000 -1.250000 +v -1.088388 0.588388 -1.250000 +v -1.000000 0.625000 -1.250000 +v -0.911611 0.588388 -1.250000 +v -0.875000 0.500000 -1.250000 +v -0.911611 0.411612 -1.750000 +v -1.000000 0.375000 -1.750000 +v -1.088388 0.411612 -1.750000 +v -1.125000 0.500000 -1.750000 +v -1.088388 0.588388 -1.750000 +v -1.000000 0.625000 -1.750000 +v -0.911611 0.588388 -1.750000 +v -0.875000 0.500000 -1.750000 +v -1.911612 0.411612 -1.250000 +v -2.000000 0.375000 -1.250000 +v -2.088388 0.411612 -1.250000 +v -2.125000 0.500000 -1.250000 +v -2.088388 0.588388 -1.250000 +v -2.000000 0.625000 -1.250000 +v -1.911612 0.588388 -1.250000 +v -1.875000 0.500000 -1.250000 +v -1.911611 0.411612 -1.750000 +v -2.000000 0.375000 -1.750000 +v -2.088388 0.411612 -1.750000 +v -2.125000 0.500000 -1.750000 +v -2.088388 0.588388 -1.750000 +v -2.000000 0.625000 -1.750000 +v -1.911611 0.588388 -1.750000 +v -1.875000 0.500000 -1.750000 +vt 0.490196 0.574713 +vt 0.843137 0.586207 +vt 0.490196 0.586207 +vt 0.862745 -0.000000 +vt 0.882353 0.022989 +vt 0.862745 0.022989 +vt 0.882353 0.045977 +vt 0.862745 0.068966 +vt 0.862745 0.045977 +vt 0.921569 0.022989 +vt 0.901961 0.045977 +vt 0.901961 0.022989 +vt 0.941176 0.022989 +vt 0.921569 0.045977 +vt 0.862745 -0.000000 +vt 0.882353 0.022989 +vt 0.862745 0.022989 +vt 0.882353 0.045977 +vt 0.862745 0.068966 +vt 0.862745 0.045977 +vt 0.921569 0.022989 +vt 0.901961 0.045977 +vt 0.901961 0.022989 +vt 0.941176 0.022989 +vt 0.921569 0.045977 +vt 0.862745 -0.000000 +vt 0.882353 0.022989 +vt 0.862745 0.022989 +vt 0.882353 0.045977 +vt 0.862745 0.068966 +vt 0.862745 0.045977 +vt 0.921569 0.022989 +vt 0.901961 0.045977 +vt 0.901961 0.022989 +vt 0.941176 0.022989 +vt 0.921569 0.045977 +vt 0.862745 -0.000000 +vt 0.882353 0.022989 +vt 0.862745 0.022989 +vt 0.882353 0.045977 +vt 0.862745 0.068966 +vt 0.862745 0.045977 +vt 0.921569 0.022989 +vt 0.901961 0.045977 +vt 0.901961 0.022989 +vt 0.941176 0.022989 +vt 0.921569 0.045977 +vt 0.843137 0.597701 +vt 0.490196 0.563218 +vt 0.843137 0.574713 +vt 0.490196 0.597701 +vt 0.843137 0.609195 +vt 0.490196 0.609195 +vt 0.490196 0.574713 +vt 0.843137 0.586207 +vt 0.490196 0.586207 +vt 0.843137 0.597701 +vt 0.490196 0.563218 +vt 0.843137 0.574713 +vt 0.490196 0.597701 +vt 0.843137 0.609195 +vt 0.490196 0.609195 +vt 0.490196 0.574713 +vt 0.843137 0.586207 +vt 0.490196 0.586207 +vt 0.843137 0.597701 +vt 0.490196 0.563218 +vt 0.843137 0.574713 +vt 0.490196 0.597701 +vt 0.843137 0.609195 +vt 0.490196 0.609195 +vt 0.490196 0.574713 +vt 0.843137 0.586207 +vt 0.490196 0.586207 +vt 0.843137 0.597701 +vt 0.490196 0.563218 +vt 0.843137 0.574713 +vt 0.490196 0.597701 +vt 0.843137 0.609195 +vt 0.490196 0.609195 +vt 0.960784 0.011494 +vt 0.970588 0.471264 +vt 0.960784 0.471264 +vt 0.970588 0.482759 +vt 0.990196 0.471264 +vt 0.990196 0.482759 +vt 0.990196 0.000000 +vt 0.970588 0.011494 +vt 0.970588 0.000000 +vt 1.000000 0.471264 +vt 0.990196 0.011494 +vt 1.000000 0.011494 +vt 0.941176 0.011494 +vt 0.941176 0.471264 +vt 0.960784 0.011494 +vt 0.970588 0.471264 +vt 0.960784 0.471264 +vt 0.970588 0.482759 +vt 0.990196 0.471264 +vt 0.990196 0.482759 +vt 0.990196 0.000000 +vt 0.970588 0.011494 +vt 0.970588 0.000000 +vt 1.000000 0.471264 +vt 0.990196 0.011494 +vt 1.000000 0.011494 +vt 0.941176 0.011494 +vt 0.941176 0.471264 +vt 0.941176 0.011494 +vt 0.960784 0.471264 +vt 0.941176 0.471264 +vt 0.970588 0.471264 +vt 0.990196 0.011494 +vt 0.990196 0.471264 +vt 1.000000 0.471264 +vt 1.000000 0.011494 +vt 0.990196 0.000000 +vt 0.970588 0.011494 +vt 0.970588 0.000000 +vt 0.970588 0.482759 +vt 0.990196 0.482759 +vt 0.960784 0.011494 +vt 0.960784 0.011494 +vt 0.970588 0.471264 +vt 0.960784 0.471264 +vt 0.970588 0.482759 +vt 0.990196 0.471264 +vt 0.990196 0.482759 +vt 0.990196 0.000000 +vt 0.970588 0.011494 +vt 0.970588 0.000000 +vt 1.000000 0.471264 +vt 0.990196 0.011494 +vt 1.000000 0.011494 +vt 0.941176 0.011494 +vt 0.941176 0.471264 +vt 0.941176 0.011494 +vt 0.960784 0.471264 +vt 0.941176 0.471264 +vt 0.970588 0.471264 +vt 0.990196 0.011494 +vt 0.990196 0.471264 +vt 1.000000 0.471264 +vt 1.000000 0.011494 +vt 0.990196 0.000000 +vt 0.970588 0.011494 +vt 0.970588 0.000000 +vt 0.970588 0.482759 +vt 0.990196 0.482759 +vt 0.960784 0.011494 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.083719 0.931057 +vt 0.117647 0.908092 +vt 0.151575 0.976988 +vt 0.005288 0.976988 +vt 0.005288 0.931057 +vt 0.073143 0.931057 +vt 0.117647 0.459770 +vt 0.078431 0.045977 +vt 0.117647 0.045977 +vt 0.078431 0.459770 +vt 0.039216 0.045977 +vt 0.156863 0.459770 +vt 0.078431 0.505747 +vt 0.117647 -0.000000 +vt 0.000000 0.045977 +vt 0.039216 0.459770 +vt 0.000000 0.459770 +vt 0.117647 0.459770 +vt 0.078431 0.045977 +vt 0.117647 0.045977 +vt 0.078431 0.459770 +vt 0.039216 0.045977 +vt 0.156863 0.459770 +vt 0.078431 0.505747 +vt 0.117647 -0.000000 +vt 0.000000 0.045977 +vt 0.039216 0.459770 +vt 0.000000 0.459770 +vt 0.588235 0.459770 +vt 0.392157 0.045977 +vt 0.588235 0.045977 +vt 0.392157 0.459770 +vt 0.352941 0.045977 +vt 0.627451 0.459770 +vt 0.392157 0.505747 +vt 0.588235 0.000000 +vt 0.176471 0.436782 +vt 0.352941 0.459770 +vt 0.156863 0.459770 +vt 0.627451 0.091954 +vt 0.705882 0.459770 +vt 0.627451 0.459770 +vt 0.176471 0.068966 +vt 0.156863 0.045977 +vt 0.333333 0.068966 +vt 0.333333 0.436782 +vt 0.862745 0.091954 +vt 0.862745 0.459770 +vt 0.941176 0.459770 +vt 0.941176 0.091954 +vt 0.862745 0.000000 +vt 0.705882 0.091954 +vt 0.705882 0.000000 +vt 0.705882 0.551724 +vt 0.862745 0.551724 +vt 0.196078 0.229885 +vt 0.313726 0.091954 +vt 0.313726 0.229885 +vt 0.196078 0.252874 +vt 0.313726 0.252874 +vt 0.176471 0.091954 +vt 0.176471 0.229885 +vt 0.333333 0.229885 +vt 0.333333 0.091954 +vt 0.313726 0.068966 +vt 0.196078 0.091954 +vt 0.196078 0.068966 +vt 0.176471 0.540230 +vt 0.156863 0.528736 +vt 0.176471 0.528736 +vt 0.196078 0.540230 +vt 0.196078 0.528736 +vt 0.215686 0.528736 +vt 0.215686 0.540230 +vt 0.235294 0.540230 +vt 0.235294 0.528736 +vt 0.254902 0.528736 +vt 0.254902 0.540230 +vt 0.274510 0.528736 +vt 0.274510 0.540230 +vt 0.294118 0.540230 +vt 0.294118 0.528736 +vt 0.313726 0.540230 +vt 0.313726 0.528736 +vt 0.019608 0.540230 +vt 0.000000 0.528736 +vt 0.019608 0.528736 +vt 0.039216 0.540230 +vt 0.039216 0.528736 +vt 0.058824 0.540230 +vt 0.058824 0.528736 +vt 0.078431 0.540230 +vt 0.078431 0.528736 +vt 0.098039 0.528736 +vt 0.098039 0.540230 +vt 0.117647 0.528736 +vt 0.117647 0.540230 +vt 0.137255 0.540230 +vt 0.137255 0.528736 +vt 0.156863 0.540230 +vt 0.210784 0.465517 +vt 0.308824 0.459770 +vt 0.308824 0.465517 +vt 0.210784 0.465517 +vt 0.308824 0.459770 +vt 0.308824 0.465517 +vt 0.210784 0.465517 +vt 0.308824 0.459770 +vt 0.308824 0.465517 +vt 0.210784 0.465517 +vt 0.308824 0.459770 +vt 0.308824 0.465517 +vt 0.220588 0.465517 +vt 0.299020 0.459770 +vt 0.299020 0.465517 +vt 0.220588 0.465517 +vt 0.299020 0.459770 +vt 0.299020 0.465517 +vt 0.196078 0.229885 +vt 0.313726 0.091954 +vt 0.313726 0.229885 +vt 0.196078 0.252874 +vt 0.313726 0.252874 +vt 0.176471 0.091954 +vt 0.176471 0.229885 +vt 0.333333 0.229885 +vt 0.333333 0.091954 +vt 0.313726 0.068966 +vt 0.196078 0.091954 +vt 0.196078 0.068966 +vt 0.210784 0.465517 +vt 0.308824 0.459770 +vt 0.308824 0.465517 +vt 0.210784 0.465517 +vt 0.308824 0.459770 +vt 0.308824 0.465517 +vt 0.210784 0.465517 +vt 0.308824 0.459770 +vt 0.308824 0.465517 +vt 0.210784 0.465517 +vt 0.308824 0.459770 +vt 0.308824 0.465517 +vt 0.220588 0.465517 +vt 0.299020 0.459770 +vt 0.299020 0.465517 +vt 0.220588 0.465517 +vt 0.299020 0.459770 +vt 0.299020 0.465517 +vt 0.333333 0.528736 +vt 0.372549 0.482759 +vt 0.372549 0.528736 +vt 0.313726 0.482759 +vt 0.313726 0.528736 +vt 0.392157 0.528736 +vt 0.392157 0.482759 +vt 0.372549 0.459770 +vt 0.333333 0.482759 +vt 0.333333 0.459770 +vt 0.333333 0.551724 +vt 0.372549 0.551724 +vt 0.274510 0.402299 +vt 0.303922 0.367816 +vt 0.303922 0.402299 +vt 0.254902 0.367816 +vt 0.254902 0.402299 +vt 0.323529 0.402299 +vt 0.323529 0.367816 +vt 0.303922 0.344828 +vt 0.274510 0.367816 +vt 0.274510 0.344828 +vt 0.274510 0.425287 +vt 0.303922 0.425287 +vt 0.176471 0.540230 +vt 0.156863 0.528736 +vt 0.176471 0.528736 +vt 0.196078 0.540230 +vt 0.196078 0.528736 +vt 0.215686 0.528736 +vt 0.215686 0.540230 +vt 0.235294 0.540230 +vt 0.235294 0.528736 +vt 0.254902 0.528736 +vt 0.254902 0.540230 +vt 0.274510 0.540230 +vt 0.274510 0.528736 +vt 0.294118 0.540230 +vt 0.294118 0.528736 +vt 0.313726 0.540230 +vt 0.313726 0.528736 +vt 0.019608 0.540230 +vt 0.000000 0.528736 +vt 0.019608 0.528736 +vt 0.039216 0.540230 +vt 0.039216 0.528736 +vt 0.058824 0.540230 +vt 0.058824 0.528736 +vt 0.078431 0.540230 +vt 0.078431 0.528736 +vt 0.098039 0.528736 +vt 0.098039 0.540230 +vt 0.117647 0.528736 +vt 0.117647 0.540230 +vt 0.137255 0.540230 +vt 0.137255 0.528736 +vt 0.156863 0.540230 +vt 0.319013 0.931057 +vt 0.352941 0.908092 +vt 0.386869 0.976988 +vt 0.240582 0.931057 +vt 0.274510 0.908092 +vt 0.308438 0.931057 +vt 0.083719 0.931057 +vt 0.117647 0.908092 +vt 0.151575 0.976988 +vt 0.005288 0.931057 +vt 0.073143 0.931057 +vt 0.039216 0.999954 +vt 0.352941 0.908092 +vt 0.386869 0.931057 +vt 0.386869 0.976988 +vt 0.240582 0.931057 +vt 0.274510 0.908092 +vt 0.308438 0.931057 +vt 0.117647 0.908092 +vt 0.151575 0.931057 +vt 0.151575 0.976988 +vt 0.005288 0.931057 +vt 0.039216 0.908092 +vt 0.073143 0.931057 +vt 0.151575 0.976988 +vt 0.117647 0.999954 +vt 0.083719 0.931057 +vt 0.073143 0.976988 +vt 0.005288 0.976988 +vt 0.039216 0.908092 +vt 0.386869 0.976988 +vt 0.352941 0.999954 +vt 0.319013 0.931057 +vt 0.308438 0.976988 +vt 0.240582 0.976988 +vt 0.274510 0.908092 +vt 0.151575 0.976988 +vt 0.117647 0.999954 +vt 0.083719 0.931057 +vt 0.073143 0.976988 +vt 0.039216 0.999954 +vt 0.005288 0.976988 +vt 0.386869 0.976988 +vt 0.352941 0.999954 +vt 0.319013 0.931057 +vt 0.308438 0.931057 +vt 0.308438 0.976988 +vt 0.240582 0.976988 +vt 0.151575 0.976988 +vt 0.117647 0.999954 +vt 0.083719 0.931057 +vt 0.073143 0.976988 +vt 0.005288 0.976988 +vt 0.039216 0.908092 +vt 0.372549 0.528736 +vt 0.333333 0.482759 +vt 0.372549 0.482759 +vt 0.313726 0.482759 +vt 0.333333 0.528736 +vt 0.313726 0.528736 +vt 0.392157 0.528736 +vt 0.392157 0.482759 +vt 0.372549 0.459770 +vt 0.333333 0.459770 +vt 0.333333 0.551724 +vt 0.372549 0.551724 +vt 0.274510 0.402299 +vt 0.303922 0.367816 +vt 0.303922 0.402299 +vt 0.254902 0.367816 +vt 0.254902 0.402299 +vt 0.323529 0.402299 +vt 0.323529 0.367816 +vt 0.303922 0.344828 +vt 0.274510 0.367816 +vt 0.274510 0.344828 +vt 0.274510 0.425287 +vt 0.303922 0.425287 +vt 0.333333 0.528736 +vt 0.372549 0.482759 +vt 0.372549 0.528736 +vt 0.313726 0.482759 +vt 0.313726 0.528736 +vt 0.392157 0.528736 +vt 0.392157 0.482759 +vt 0.372549 0.459770 +vt 0.333333 0.482759 +vt 0.333333 0.459770 +vt 0.333333 0.551724 +vt 0.372549 0.551724 +vt 0.274510 0.402299 +vt 0.303922 0.367816 +vt 0.303922 0.402299 +vt 0.254902 0.367816 +vt 0.254902 0.402299 +vt 0.323529 0.402299 +vt 0.323529 0.367816 +vt 0.303922 0.344828 +vt 0.274510 0.367816 +vt 0.274510 0.344828 +vt 0.274510 0.425287 +vt 0.303922 0.425287 +vt 0.333333 0.528736 +vt 0.372549 0.482759 +vt 0.372549 0.528736 +vt 0.313726 0.482759 +vt 0.313726 0.528736 +vt 0.392157 0.528736 +vt 0.392157 0.482759 +vt 0.372549 0.459770 +vt 0.333333 0.482759 +vt 0.333333 0.459770 +vt 0.333333 0.551724 +vt 0.372549 0.551724 +vt 0.303922 0.402299 +vt 0.274510 0.367816 +vt 0.303922 0.367816 +vt 0.254902 0.367816 +vt 0.274510 0.402299 +vt 0.254902 0.402299 +vt 0.323529 0.402299 +vt 0.323529 0.367816 +vt 0.303922 0.344828 +vt 0.274510 0.344828 +vt 0.274510 0.425287 +vt 0.303922 0.425287 +vt 0.333333 0.528736 +vt 0.372549 0.482759 +vt 0.372549 0.528736 +vt 0.313726 0.482759 +vt 0.313726 0.528736 +vt 0.392157 0.528736 +vt 0.392157 0.482759 +vt 0.372549 0.459770 +vt 0.333333 0.482759 +vt 0.333333 0.459770 +vt 0.333333 0.551724 +vt 0.372549 0.551724 +vt 0.274510 0.402299 +vt 0.303922 0.367816 +vt 0.303922 0.402299 +vt 0.254902 0.367816 +vt 0.254902 0.402299 +vt 0.323529 0.402299 +vt 0.323529 0.367816 +vt 0.303922 0.344828 +vt 0.274510 0.367816 +vt 0.274510 0.344828 +vt 0.274510 0.425287 +vt 0.303922 0.425287 +vt 0.333333 0.528736 +vt 0.372549 0.482759 +vt 0.372549 0.528736 +vt 0.313726 0.482759 +vt 0.313726 0.528736 +vt 0.392157 0.528736 +vt 0.392157 0.482759 +vt 0.372549 0.459770 +vt 0.333333 0.482759 +vt 0.333333 0.459770 +vt 0.333333 0.551724 +vt 0.372549 0.551724 +vt 0.274510 0.402299 +vt 0.303922 0.367816 +vt 0.303922 0.402299 +vt 0.254902 0.367816 +vt 0.254902 0.402299 +vt 0.323529 0.402299 +vt 0.323529 0.367816 +vt 0.303922 0.344828 +vt 0.274510 0.367816 +vt 0.274510 0.344828 +vt 0.274510 0.425287 +vt 0.303922 0.425287 +vt 0.333333 0.528736 +vt 0.372549 0.482759 +vt 0.372549 0.528736 +vt 0.313726 0.482759 +vt 0.313726 0.528736 +vt 0.392157 0.528736 +vt 0.392157 0.482759 +vt 0.372549 0.459770 +vt 0.333333 0.482759 +vt 0.333333 0.459770 +vt 0.333333 0.551724 +vt 0.372549 0.551724 +vt 0.303922 0.402299 +vt 0.274510 0.367816 +vt 0.303922 0.367816 +vt 0.254902 0.367816 +vt 0.274510 0.402299 +vt 0.254902 0.402299 +vt 0.323529 0.402299 +vt 0.323529 0.367816 +vt 0.303922 0.344828 +vt 0.274510 0.344828 +vt 0.274510 0.425287 +vt 0.303922 0.425287 +vt 0.333333 0.528736 +vt 0.372549 0.482759 +vt 0.372549 0.528736 +vt 0.313726 0.482759 +vt 0.313726 0.528736 +vt 0.392157 0.528736 +vt 0.392157 0.482759 +vt 0.372549 0.459770 +vt 0.333333 0.482759 +vt 0.333333 0.459770 +vt 0.333333 0.551724 +vt 0.372549 0.551724 +vt 0.274510 0.402299 +vt 0.303922 0.367816 +vt 0.303922 0.402299 +vt 0.254902 0.367816 +vt 0.254902 0.402299 +vt 0.323529 0.402299 +vt 0.323529 0.367816 +vt 0.303922 0.344828 +vt 0.274510 0.367816 +vt 0.274510 0.344828 +vt 0.274510 0.425287 +vt 0.303922 0.425287 +vt 0.372549 0.528736 +vt 0.333333 0.482759 +vt 0.372549 0.482759 +vt 0.313726 0.482759 +vt 0.333333 0.528736 +vt 0.313726 0.528736 +vt 0.392157 0.528736 +vt 0.392157 0.482759 +vt 0.372549 0.459770 +vt 0.333333 0.459770 +vt 0.333333 0.551724 +vt 0.372549 0.551724 +vt 0.274510 0.402299 +vt 0.303922 0.367816 +vt 0.303922 0.402299 +vt 0.254902 0.367816 +vt 0.254902 0.402299 +vt 0.323529 0.402299 +vt 0.323529 0.367816 +vt 0.303922 0.344828 +vt 0.274510 0.367816 +vt 0.274510 0.344828 +vt 0.274510 0.425287 +vt 0.303922 0.425287 +vt 0.333333 0.528736 +vt 0.372549 0.482759 +vt 0.372549 0.528736 +vt 0.313726 0.482759 +vt 0.313726 0.528736 +vt 0.392157 0.528736 +vt 0.392157 0.482759 +vt 0.372549 0.459770 +vt 0.333333 0.482759 +vt 0.333333 0.459770 +vt 0.333333 0.551724 +vt 0.372549 0.551724 +vt 0.274510 0.402299 +vt 0.303922 0.367816 +vt 0.303922 0.402299 +vt 0.254902 0.367816 +vt 0.254902 0.402299 +vt 0.323529 0.402299 +vt 0.323529 0.367816 +vt 0.303922 0.344828 +vt 0.274510 0.367816 +vt 0.274510 0.344828 +vt 0.274510 0.425287 +vt 0.303922 0.425287 +vt 0.681373 0.522988 +vt 0.651961 0.488506 +vt 0.681373 0.488506 +vt 0.676471 0.540230 +vt 0.656863 0.551724 +vt 0.656863 0.540230 +vt 0.651961 0.522988 +vt 0.642157 0.488506 +vt 0.691176 0.522988 +vt 0.651961 0.534483 +vt 0.681373 0.477012 +vt 0.696078 0.517241 +vt 0.691176 0.488506 +vt 0.696078 0.494253 +vt 0.676471 0.471264 +vt 0.651961 0.477012 +vt 0.656863 0.471264 +vt 0.637255 0.494253 +vt 0.642157 0.522988 +vt 0.637255 0.517241 +vt 0.681373 0.534483 +vt 0.676471 0.459770 +vt 0.627451 0.494253 +vt 0.705882 0.517241 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.522988 +vt 0.651961 0.488506 +vt 0.681373 0.488506 +vt 0.676471 0.540230 +vt 0.656863 0.551724 +vt 0.656863 0.540230 +vt 0.651961 0.522988 +vt 0.642157 0.488506 +vt 0.691176 0.522988 +vt 0.651961 0.534483 +vt 0.681373 0.477012 +vt 0.696078 0.517241 +vt 0.691176 0.488506 +vt 0.696078 0.494253 +vt 0.676471 0.471264 +vt 0.651961 0.477012 +vt 0.656863 0.471264 +vt 0.637255 0.494253 +vt 0.642157 0.522988 +vt 0.637255 0.517241 +vt 0.681373 0.534483 +vt 0.676471 0.459770 +vt 0.627451 0.494253 +vt 0.705882 0.517241 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.681373 0.074713 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.522988 +vt 0.651961 0.488506 +vt 0.681373 0.488506 +vt 0.676471 0.540230 +vt 0.656863 0.551724 +vt 0.656863 0.540230 +vt 0.651961 0.522988 +vt 0.642157 0.488506 +vt 0.691176 0.522988 +vt 0.651961 0.534483 +vt 0.681373 0.477012 +vt 0.696078 0.517241 +vt 0.691176 0.488506 +vt 0.696078 0.494253 +vt 0.676471 0.471264 +vt 0.651961 0.477012 +vt 0.656863 0.471264 +vt 0.637255 0.494253 +vt 0.642157 0.522988 +vt 0.637255 0.517241 +vt 0.681373 0.534483 +vt 0.676471 0.459770 +vt 0.627451 0.494253 +vt 0.705882 0.517241 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.522988 +vt 0.651961 0.488506 +vt 0.681373 0.488506 +vt 0.676471 0.540230 +vt 0.656863 0.551724 +vt 0.656863 0.540230 +vt 0.651961 0.522988 +vt 0.642157 0.488506 +vt 0.691176 0.522988 +vt 0.651961 0.534483 +vt 0.681373 0.477012 +vt 0.696078 0.517241 +vt 0.691176 0.488506 +vt 0.696078 0.494253 +vt 0.676471 0.471264 +vt 0.651961 0.477012 +vt 0.656863 0.471264 +vt 0.637255 0.494253 +vt 0.642157 0.522988 +vt 0.637255 0.517241 +vt 0.681373 0.534483 +vt 0.676471 0.459770 +vt 0.627451 0.494253 +vt 0.705882 0.517241 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.656863 0.080460 +vt 0.676471 0.091954 +vt 0.656863 0.091954 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.681373 0.074713 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.676471 0.080460 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.681373 0.063218 +vt 0.651961 0.028736 +vt 0.681373 0.028736 +vt 0.676471 0.080460 +vt 0.656863 0.091954 +vt 0.656863 0.080460 +vt 0.651961 0.063218 +vt 0.642157 0.028736 +vt 0.691176 0.063218 +vt 0.651961 0.074713 +vt 0.681373 0.017241 +vt 0.696078 0.057471 +vt 0.691176 0.028736 +vt 0.696078 0.034483 +vt 0.676471 0.011494 +vt 0.651961 0.017241 +vt 0.656863 0.011494 +vt 0.637255 0.034483 +vt 0.642157 0.063218 +vt 0.637255 0.057471 +vt 0.681373 0.074713 +vt 0.676471 0.000000 +vt 0.627451 0.034483 +vt 0.705882 0.057471 +vt 0.882353 -0.000000 +vt 0.882353 0.068966 +vt 0.941176 0.045977 +vt 0.882353 -0.000000 +vt 0.882353 0.068966 +vt 0.941176 0.045977 +vt 0.882353 -0.000000 +vt 0.882353 0.068966 +vt 0.941176 0.045977 +vt 0.882353 -0.000000 +vt 0.882353 0.068966 +vt 0.941176 0.045977 +vt 0.843137 0.563218 +vt 0.843137 0.563218 +vt 0.843137 0.563218 +vt 0.843137 0.563218 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.137235 0.993800 +vt 0.117647 0.999954 +vt 0.098059 0.993800 +vt 0.083719 0.976988 +vt 0.078471 0.954023 +vt 0.098059 0.914245 +vt 0.137235 0.914245 +vt 0.151575 0.931057 +vt 0.156823 0.954023 +vt 0.039216 0.999954 +vt 0.019627 0.993800 +vt 0.000039 0.954023 +vt 0.019627 0.914245 +vt 0.039216 0.908092 +vt 0.058804 0.914245 +vt 0.078392 0.954023 +vt 0.073143 0.976988 +vt 0.058804 0.993800 +vt 0.156863 0.045977 +vt 0.117647 0.505747 +vt 0.078431 -0.000000 +vt 0.156863 0.045977 +vt 0.117647 0.505747 +vt 0.078431 -0.000000 +vt 0.627451 0.045977 +vt 0.588235 0.505747 +vt 0.392157 0.000000 +vt 0.000000 0.540230 +vt 0.210784 0.459770 +vt 0.210784 0.459770 +vt 0.210784 0.459770 +vt 0.210784 0.459770 +vt 0.220588 0.459770 +vt 0.220588 0.459770 +vt 0.210784 0.459770 +vt 0.210784 0.459770 +vt 0.210784 0.459770 +vt 0.210784 0.459770 +vt 0.220588 0.459770 +vt 0.220588 0.459770 +vt 0.000000 0.540230 +vt 0.372529 0.993800 +vt 0.352941 0.999954 +vt 0.333353 0.993800 +vt 0.319013 0.976988 +vt 0.313765 0.954023 +vt 0.333353 0.914245 +vt 0.372529 0.914245 +vt 0.386869 0.931057 +vt 0.392118 0.954023 +vt 0.274510 0.999954 +vt 0.254922 0.993800 +vt 0.240582 0.976988 +vt 0.235333 0.954023 +vt 0.254922 0.914245 +vt 0.294098 0.914245 +vt 0.313686 0.954023 +vt 0.308438 0.976988 +vt 0.294098 0.993800 +vt 0.137235 0.993800 +vt 0.117647 0.999954 +vt 0.098059 0.993800 +vt 0.083719 0.976988 +vt 0.078471 0.954023 +vt 0.098059 0.914245 +vt 0.137235 0.914245 +vt 0.151575 0.931057 +vt 0.156823 0.954023 +vt 0.019627 0.993800 +vt 0.005288 0.976988 +vt 0.000039 0.954023 +vt 0.019627 0.914245 +vt 0.039216 0.908092 +vt 0.058804 0.914245 +vt 0.078392 0.954023 +vt 0.073143 0.976988 +vt 0.058804 0.993800 +vt 0.372529 0.993800 +vt 0.352941 0.999954 +vt 0.333353 0.993800 +vt 0.319013 0.976988 +vt 0.313765 0.954023 +vt 0.319013 0.931057 +vt 0.333353 0.914245 +vt 0.372529 0.914245 +vt 0.392118 0.954023 +vt 0.274510 0.999954 +vt 0.254922 0.993800 +vt 0.240582 0.976988 +vt 0.235333 0.954023 +vt 0.254922 0.914245 +vt 0.294098 0.914245 +vt 0.313686 0.954023 +vt 0.308438 0.976988 +vt 0.294098 0.993800 +vt 0.137235 0.993800 +vt 0.117647 0.999954 +vt 0.098059 0.993800 +vt 0.083719 0.976988 +vt 0.078471 0.954023 +vt 0.083719 0.931057 +vt 0.098059 0.914245 +vt 0.137235 0.914245 +vt 0.156823 0.954023 +vt 0.039216 0.999954 +vt 0.019627 0.993800 +vt 0.005288 0.976988 +vt 0.000039 0.954023 +vt 0.019627 0.914245 +vt 0.058804 0.914245 +vt 0.078392 0.954023 +vt 0.073143 0.976988 +vt 0.058804 0.993800 +vt 0.098059 0.914245 +vt 0.117647 0.908092 +vt 0.137235 0.914245 +vt 0.151575 0.931057 +vt 0.156823 0.954023 +vt 0.137235 0.993800 +vt 0.098059 0.993800 +vt 0.083719 0.976988 +vt 0.078471 0.954023 +vt 0.058804 0.914245 +vt 0.073143 0.931057 +vt 0.078392 0.954023 +vt 0.058804 0.993800 +vt 0.039216 0.999954 +vt 0.019627 0.993800 +vt 0.000039 0.954023 +vt 0.005288 0.931057 +vt 0.019627 0.914245 +vt 0.333353 0.914245 +vt 0.352941 0.908092 +vt 0.372529 0.914245 +vt 0.386869 0.931057 +vt 0.392118 0.954023 +vt 0.372529 0.993800 +vt 0.333353 0.993800 +vt 0.319013 0.976988 +vt 0.313765 0.954023 +vt 0.294098 0.914245 +vt 0.308438 0.931057 +vt 0.313686 0.954023 +vt 0.294098 0.993800 +vt 0.274510 0.999954 +vt 0.254922 0.993800 +vt 0.235333 0.954023 +vt 0.240582 0.931057 +vt 0.254922 0.914245 +vt 0.098059 0.914245 +vt 0.117647 0.908092 +vt 0.137235 0.914245 +vt 0.151575 0.931057 +vt 0.156823 0.954023 +vt 0.137235 0.993800 +vt 0.098059 0.993800 +vt 0.083719 0.976988 +vt 0.078471 0.954023 +vt 0.039216 0.908092 +vt 0.058804 0.914245 +vt 0.073143 0.931057 +vt 0.078392 0.954023 +vt 0.058804 0.993800 +vt 0.019627 0.993800 +vt 0.000039 0.954023 +vt 0.005288 0.931057 +vt 0.019627 0.914245 +vt 0.333353 0.914245 +vt 0.352941 0.908092 +vt 0.372529 0.914245 +vt 0.386869 0.931057 +vt 0.392118 0.954023 +vt 0.372529 0.993800 +vt 0.333353 0.993800 +vt 0.319013 0.976988 +vt 0.313765 0.954023 +vt 0.274510 0.908092 +vt 0.294098 0.914245 +vt 0.313686 0.954023 +vt 0.294098 0.993800 +vt 0.274510 0.999954 +vt 0.254922 0.993800 +vt 0.235333 0.954023 +vt 0.240582 0.931057 +vt 0.254922 0.914245 +vt 0.098059 0.914245 +vt 0.117647 0.908092 +vt 0.137235 0.914245 +vt 0.151575 0.931057 +vt 0.156823 0.954023 +vt 0.137235 0.993800 +vt 0.098059 0.993800 +vt 0.083719 0.976988 +vt 0.078471 0.954023 +vt 0.058804 0.914245 +vt 0.073143 0.931057 +vt 0.078392 0.954023 +vt 0.058804 0.993800 +vt 0.039216 0.999954 +vt 0.019627 0.993800 +vt 0.000039 0.954023 +vt 0.005288 0.931057 +vt 0.019627 0.914245 +vt 0.676471 0.551724 +vt 0.656863 0.459770 +vt 0.627451 0.517241 +vt 0.705882 0.494253 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.551724 +vt 0.656863 0.459770 +vt 0.627451 0.517241 +vt 0.705882 0.494253 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.551724 +vt 0.656863 0.459770 +vt 0.627451 0.517241 +vt 0.705882 0.494253 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.551724 +vt 0.656863 0.459770 +vt 0.627451 0.517241 +vt 0.705882 0.494253 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.676471 0.091954 +vt 0.656863 0.000000 +vt 0.627451 0.057471 +vt 0.705882 0.034483 +vt 0.156863 0.908046 +vt 0.176471 0.747126 +vt 0.176471 0.908046 +vt 0.019608 0.908046 +vt 0.039216 0.747126 +vt 0.039216 0.908046 +vt 0.078431 0.908046 +vt 0.098039 0.747126 +vt 0.098039 0.908046 +vt 0.196078 0.747126 +vt 0.196078 0.908046 +vt 0.137255 0.908046 +vt 0.156863 0.747126 +vt 0.000000 0.908046 +vt 0.019608 0.747126 +vt 0.058824 0.908046 +vt 0.078431 0.747126 +vt 0.117647 0.908046 +vt 0.137255 0.747126 +vt 0.215686 0.908046 +vt 0.235294 0.747126 +vt 0.235294 0.908046 +vt 0.058824 0.747126 +vt 0.117647 0.747126 +vt 0.215686 0.747126 +vt 0.058824 0.505747 +vt 0.039216 0.505747 +vt 0.235294 0.505747 +vt 0.215686 0.505747 +vt 0.078431 0.505747 +vt 0.254902 0.505747 +vt 0.098039 0.505747 +vt 0.274510 0.505747 +vt 0.117647 0.505747 +vt 0.294118 0.505747 +vt 0.137255 0.505747 +vt 0.313726 0.505747 +vt 0.176471 0.505747 +vt 0.156863 0.505747 +vt 0.019608 0.505747 +vt -0.000000 0.505747 +vt 0.196078 0.505747 +vt 0.156863 0.563218 +vt 0.137255 0.563218 +vt 0.000000 0.563218 +vt 0.176471 0.563218 +vt 0.019608 0.563218 +vt 0.196078 0.563218 +vt 0.039216 0.563218 +vt 0.215686 0.563218 +vt 0.058824 0.563218 +vt 0.254902 0.563218 +vt 0.235294 0.563218 +vt 0.078431 0.563218 +vt 0.274510 0.563218 +vt 0.098039 0.563218 +vt 0.117647 0.563218 +vt 0.294118 0.563218 +vt 0.313726 0.505747 +vt 0.294118 0.505747 +vt 0.137255 0.505747 +vt 0.117647 0.505747 +vt 0.274510 0.505747 +vt 0.098039 0.505747 +vt 0.254902 0.505747 +vt 0.078431 0.505747 +vt 0.235294 0.505747 +vt 0.058824 0.505747 +vt 0.215686 0.505747 +vt 0.039216 0.505747 +vt 0.245098 0.379310 +vt 0.254902 0.402299 +vt 0.245098 0.402299 +vt 0.225490 0.379310 +vt 0.235294 0.402299 +vt 0.225490 0.402299 +vt 0.196078 0.379310 +vt 0.205882 0.402299 +vt 0.196078 0.402299 +vt 0.176471 0.379310 +vt 0.186275 0.402299 +vt 0.176471 0.402299 +vt 0.235294 0.379310 +vt 0.215686 0.379310 +vt 0.215686 0.402299 +vt 0.205882 0.379310 +vt 0.186275 0.379310 +vt 0.196078 0.373563 +vt 0.205882 0.362069 +vt 0.235294 0.373563 +vt 0.245098 0.362069 +vt 0.245098 0.367816 +vt 0.225490 0.362069 +vt 0.215686 0.362069 +vt 0.186275 0.362069 +vt 0.196078 0.362069 +vt 0.235294 0.362069 +vt 0.225490 0.344828 +vt 0.235294 0.350575 +vt 0.205882 0.344828 +vt 0.245098 0.356322 +vt 0.215686 0.344828 +vt 0.186275 0.356322 +vt 0.196078 0.350575 +vt 0.176471 0.362069 +vt 0.186275 0.367816 +vt 0.254902 0.362069 +vt 0.196078 0.344828 +vt 0.205882 0.252874 +vt 0.235294 0.344828 +vt 0.245098 0.252874 +vt 0.245098 0.344828 +vt 0.225490 0.252874 +vt 0.254902 0.252874 +vt 0.254902 0.344828 +vt 0.215686 0.252874 +vt 0.176471 0.344828 +vt 0.186275 0.252874 +vt 0.186275 0.344828 +vt 0.196078 0.252874 +vt 0.235294 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.344828 +vt 0.323529 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.344828 +vt 0.254902 0.298851 +vt 0.274510 0.298851 +vt 0.264706 0.344828 +vt 0.284314 0.298851 +vt 0.274510 0.344828 +vt 0.294118 0.298851 +vt 0.284314 0.344828 +vt 0.303922 0.298851 +vt 0.294118 0.344828 +vt 0.313726 0.298851 +vt 0.303922 0.344828 +vt 0.313726 0.344828 +vt 0.274510 0.597701 +vt -0.000000 0.609195 +vt -0.000000 0.597701 +vt 0.274510 0.574713 +vt -0.000000 0.586207 +vt -0.000000 0.574713 +vt 0.274510 0.643678 +vt -0.000000 0.655172 +vt -0.000000 0.643678 +vt 0.274510 0.620690 +vt -0.000000 0.632184 +vt -0.000000 0.620690 +vt 0.274510 0.586207 +vt 0.274510 0.563218 +vt -0.000000 0.563218 +vt 0.274510 0.632184 +vt 0.274510 0.609195 +vt 0.058824 0.735632 +vt -0.000000 0.747126 +vt -0.000000 0.735632 +vt 0.058824 0.712644 +vt -0.000000 0.724138 +vt -0.000000 0.712644 +vt 0.058824 0.678161 +vt -0.000000 0.689655 +vt -0.000000 0.678161 +vt 0.058824 0.655172 +vt -0.000000 0.666667 +vt -0.000000 0.655172 +vt 0.058824 0.724138 +vt 0.058824 0.701149 +vt -0.000000 0.701149 +vt 0.058824 0.689655 +vt 0.058824 0.666667 +vt 0.073529 0.678161 +vt 0.073529 0.689655 +vt 0.063725 0.724138 +vt 0.073529 0.735632 +vt 0.068627 0.735632 +vt 0.073529 0.712644 +vt 0.073529 0.701149 +vt 0.063725 0.678161 +vt 0.073529 0.666667 +vt 0.073529 0.724138 +vt 0.073529 0.655172 +vt 0.068627 0.666667 +vt 0.073529 0.747126 +vt 0.299020 0.666667 +vt 0.313726 0.655172 +vt 0.313726 0.666667 +vt 0.299020 0.678161 +vt 0.308824 0.678161 +vt 0.299020 0.712644 +vt 0.308824 0.724138 +vt 0.299020 0.724138 +vt 0.299020 0.735632 +vt 0.313726 0.747126 +vt 0.299020 0.747126 +vt 0.303922 0.689655 +vt 0.299020 0.689655 +vt 0.313726 0.735632 +vt 0.299020 0.701149 +vt 0.303922 0.712644 +vt 0.352941 0.678161 +vt 0.313726 0.678161 +vt 0.313726 0.712644 +vt 0.352941 0.724138 +vt 0.313726 0.724138 +vt 0.313726 0.701149 +vt 0.352941 0.712644 +vt 0.352941 0.747126 +vt 0.313726 0.689655 +vt 0.352941 0.701149 +vt 0.352941 0.689655 +vt 0.352941 0.735632 +vt 0.352941 0.666667 +vt 0.392157 0.735632 +vt 0.352941 0.747126 +vt 0.352941 0.735632 +vt 0.392157 0.712644 +vt 0.352941 0.724138 +vt 0.352941 0.712644 +vt 0.392157 0.678161 +vt 0.352941 0.689655 +vt 0.352941 0.678161 +vt 0.392157 0.655172 +vt 0.352941 0.666667 +vt 0.352941 0.655172 +vt 0.392157 0.724138 +vt 0.392157 0.701149 +vt 0.352941 0.701149 +vt 0.392157 0.689655 +vt 0.392157 0.666667 +vt 0.406863 0.678161 +vt 0.406863 0.689655 +vt 0.397059 0.724138 +vt 0.406863 0.735632 +vt 0.401961 0.735632 +vt 0.406863 0.712644 +vt 0.406863 0.701149 +vt 0.397059 0.678161 +vt 0.406863 0.666667 +vt 0.406863 0.724138 +vt 0.632353 0.678161 +vt 0.632353 0.689655 +vt 0.632353 0.712644 +vt 0.632353 0.724138 +vt 0.632353 0.735632 +vt 0.632353 0.747126 +vt 0.406863 0.747126 +vt 0.406863 0.655172 +vt 0.401961 0.666667 +vt 0.632353 0.655172 +vt 0.632353 0.666667 +vt 0.299020 0.655172 +vt 0.647059 0.655172 +vt 0.647059 0.666667 +vt 0.642157 0.678161 +vt 0.642157 0.724138 +vt 0.647059 0.747126 +vt 0.637255 0.689655 +vt 0.647059 0.735632 +vt 0.632353 0.701149 +vt 0.637255 0.712644 +vt 0.705882 0.678161 +vt 0.647059 0.678161 +vt 0.647059 0.712644 +vt 0.705882 0.724138 +vt 0.647059 0.724138 +vt 0.647059 0.701149 +vt 0.705882 0.712644 +vt 0.705882 0.747126 +vt 0.647059 0.689655 +vt 0.705882 0.701149 +vt 0.705882 0.689655 +vt 0.705882 0.735632 +vt 0.705882 0.666667 +vt 0.735294 0.735632 +vt 0.705882 0.747126 +vt 0.705882 0.735632 +vt 0.735294 0.712644 +vt 0.705882 0.724138 +vt 0.705882 0.712644 +vt 0.735294 0.678161 +vt 0.705882 0.689655 +vt 0.705882 0.678161 +vt 0.735294 0.655172 +vt 0.705882 0.666667 +vt 0.705882 0.655172 +vt 0.735294 0.724138 +vt 0.735294 0.701149 +vt 0.705882 0.701149 +vt 0.735294 0.689655 +vt 0.735294 0.666667 +vt 0.750000 0.678161 +vt 0.750000 0.689655 +vt 0.740196 0.724138 +vt 0.750000 0.735632 +vt 0.745098 0.735632 +vt 0.750000 0.712644 +vt 0.750000 0.701149 +vt 0.740196 0.678161 +vt 0.750000 0.666667 +vt 0.750000 0.724138 +vt 0.764706 0.712644 +vt 0.759804 0.724138 +vt 0.764706 0.689655 +vt 0.754902 0.735632 +vt 0.764706 0.701149 +vt 0.759804 0.678161 +vt 0.750000 0.655172 +vt 0.745098 0.666667 +vt 0.754902 0.666667 +vt 0.750000 0.747126 +vt 0.764706 0.678161 +vt 0.882353 0.689655 +vt 0.764706 0.724138 +vt 0.882353 0.735632 +vt 0.764706 0.735632 +vt 0.882353 0.712644 +vt 0.882353 0.747126 +vt 0.764706 0.747126 +vt 0.882353 0.701149 +vt 0.764706 0.655172 +vt 0.882353 0.666667 +vt 0.764706 0.666667 +vt 0.882353 0.678161 +vt 0.882353 0.724138 +vt 0.897059 0.735632 +vt 0.897059 0.747126 +vt 0.897059 0.678161 +vt 0.887255 0.678161 +vt 0.887255 0.724138 +vt 0.897059 0.712644 +vt 0.897059 0.724138 +vt 0.882353 0.655172 +vt 0.897059 0.666667 +vt 0.897059 0.689655 +vt 0.892157 0.689655 +vt 0.897059 0.655172 +vt 0.911765 0.666667 +vt 0.906863 0.678161 +vt 0.906863 0.724138 +vt 0.911765 0.747126 +vt 0.901961 0.689655 +vt 0.911765 0.735632 +vt 0.897059 0.701149 +vt 0.892157 0.712644 +vt 0.901961 0.712644 +vt 0.921569 0.678161 +vt 0.911765 0.678161 +vt 0.911765 0.712644 +vt 0.921569 0.724138 +vt 0.911765 0.724138 +vt 0.911765 0.701149 +vt 0.921569 0.712644 +vt 0.921569 0.747126 +vt 0.911765 0.689655 +vt 0.921569 0.701149 +vt 0.921569 0.689655 +vt 0.921569 0.735632 +vt 0.911765 0.655172 +vt 0.921569 0.666667 +vt 0.303922 0.643678 +vt 0.274510 0.655172 +vt 0.274510 0.643678 +vt 0.303922 0.620690 +vt 0.274510 0.632184 +vt 0.274510 0.620690 +vt 0.303922 0.586207 +vt 0.274510 0.597701 +vt 0.274510 0.586207 +vt 0.303922 0.563218 +vt 0.274510 0.574713 +vt 0.274510 0.563218 +vt 0.303922 0.632184 +vt 0.303922 0.609195 +vt 0.274510 0.609195 +vt 0.303922 0.597701 +vt 0.303922 0.574713 +vt 0.318627 0.586207 +vt 0.318627 0.597701 +vt 0.308824 0.632184 +vt 0.318627 0.643678 +vt 0.313726 0.643678 +vt 0.318627 0.620690 +vt 0.318627 0.609195 +vt 0.308824 0.586207 +vt 0.318627 0.574713 +vt 0.318627 0.632184 +vt 0.333333 0.620690 +vt 0.328431 0.632184 +vt 0.333333 0.597701 +vt 0.323529 0.643678 +vt 0.333333 0.609195 +vt 0.328431 0.586207 +vt 0.318627 0.563218 +vt 0.313726 0.574713 +vt 0.323529 0.574713 +vt 0.318627 0.655172 +vt 0.333333 0.586207 +vt 0.450980 0.597701 +vt 0.333333 0.632184 +vt 0.450980 0.643678 +vt 0.333333 0.643678 +vt 0.450980 0.620690 +vt 0.450980 0.655172 +vt 0.333333 0.655172 +vt 0.450980 0.609195 +vt 0.333333 0.563218 +vt 0.450980 0.574713 +vt 0.333333 0.574713 +vt 0.450980 0.586207 +vt 0.450980 0.632184 +vt 0.465686 0.643678 +vt 0.465686 0.655172 +vt 0.465686 0.586207 +vt 0.455882 0.586207 +vt 0.455882 0.632184 +vt 0.465686 0.620690 +vt 0.465686 0.632184 +vt 0.450980 0.563218 +vt 0.465686 0.574713 +vt 0.465686 0.597701 +vt 0.460784 0.597701 +vt 0.480392 0.563218 +vt 0.480392 0.574713 +vt 0.475490 0.586207 +vt 0.475490 0.632184 +vt 0.480392 0.655172 +vt 0.470588 0.597701 +vt 0.480392 0.643678 +vt 0.465686 0.609195 +vt 0.460784 0.620690 +vt 0.470588 0.620690 +vt 0.490196 0.586207 +vt 0.480392 0.586207 +vt 0.480392 0.620690 +vt 0.490196 0.632184 +vt 0.480392 0.632184 +vt 0.480392 0.609195 +vt 0.490196 0.620690 +vt 0.490196 0.655172 +vt 0.480392 0.597701 +vt 0.490196 0.609195 +vt 0.490196 0.597701 +vt 0.490196 0.643678 +vt 0.490196 0.574713 +vt 0.294118 0.298851 +vt 0.284314 0.252874 +vt 0.294118 0.252874 +vt 0.274510 0.298851 +vt 0.264706 0.252874 +vt 0.274510 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.252874 +vt 0.333333 0.252874 +vt 0.313726 0.298851 +vt 0.303922 0.252874 +vt 0.313726 0.252874 +vt 0.303922 0.298851 +vt 0.284314 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.252874 +vt 0.323529 0.298851 +vt 0.245098 0.379310 +vt 0.254902 0.402299 +vt 0.245098 0.402299 +vt 0.225490 0.379310 +vt 0.235294 0.402299 +vt 0.225490 0.402299 +vt 0.196078 0.379310 +vt 0.205882 0.402299 +vt 0.196078 0.402299 +vt 0.176471 0.379310 +vt 0.186275 0.402299 +vt 0.176471 0.402299 +vt 0.235294 0.379310 +vt 0.215686 0.379310 +vt 0.215686 0.402299 +vt 0.205882 0.379310 +vt 0.186275 0.379310 +vt 0.196078 0.362069 +vt 0.205882 0.362069 +vt 0.235294 0.373563 +vt 0.245098 0.362069 +vt 0.245098 0.367816 +vt 0.215686 0.362069 +vt 0.225490 0.362069 +vt 0.196078 0.373563 +vt 0.186275 0.362069 +vt 0.235294 0.362069 +vt 0.225490 0.344828 +vt 0.235294 0.350575 +vt 0.205882 0.344828 +vt 0.245098 0.356322 +vt 0.215686 0.344828 +vt 0.186275 0.356322 +vt 0.196078 0.350575 +vt 0.176471 0.362069 +vt 0.186275 0.367816 +vt 0.254902 0.362069 +vt 0.196078 0.344828 +vt 0.205882 0.252874 +vt 0.235294 0.344828 +vt 0.245098 0.252874 +vt 0.245098 0.344828 +vt 0.225490 0.252874 +vt 0.254902 0.252874 +vt 0.254902 0.344828 +vt 0.215686 0.252874 +vt 0.176471 0.344828 +vt 0.186275 0.252874 +vt 0.186275 0.344828 +vt 0.196078 0.252874 +vt 0.235294 0.252874 +vt 0.245098 0.379310 +vt 0.254902 0.402299 +vt 0.245098 0.402299 +vt 0.225490 0.379310 +vt 0.235294 0.402299 +vt 0.225490 0.402299 +vt 0.196078 0.379310 +vt 0.205882 0.402299 +vt 0.196078 0.402299 +vt 0.176471 0.402299 +vt 0.186275 0.379310 +vt 0.186275 0.402299 +vt 0.235294 0.379310 +vt 0.215686 0.379310 +vt 0.215686 0.402299 +vt 0.205882 0.379310 +vt 0.196078 0.362069 +vt 0.205882 0.362069 +vt 0.235294 0.373563 +vt 0.245098 0.362069 +vt 0.245098 0.367816 +vt 0.225490 0.362069 +vt 0.215686 0.362069 +vt 0.196078 0.373563 +vt 0.186275 0.362069 +vt 0.235294 0.362069 +vt 0.225490 0.344828 +vt 0.235294 0.350575 +vt 0.205882 0.344828 +vt 0.245098 0.356322 +vt 0.215686 0.344828 +vt 0.196078 0.350575 +vt 0.176471 0.362069 +vt 0.186275 0.367816 +vt 0.186275 0.356322 +vt 0.254902 0.362069 +vt 0.196078 0.344828 +vt 0.205882 0.252874 +vt 0.235294 0.344828 +vt 0.245098 0.252874 +vt 0.245098 0.344828 +vt 0.225490 0.252874 +vt 0.254902 0.252874 +vt 0.254902 0.344828 +vt 0.215686 0.252874 +vt 0.176471 0.344828 +vt 0.186275 0.252874 +vt 0.186275 0.344828 +vt 0.196078 0.252874 +vt 0.235294 0.252874 +vt 0.245098 0.379310 +vt 0.254902 0.402299 +vt 0.245098 0.402299 +vt 0.225490 0.379310 +vt 0.235294 0.402299 +vt 0.225490 0.402299 +vt 0.196078 0.379310 +vt 0.205882 0.402299 +vt 0.196078 0.402299 +vt 0.176471 0.379310 +vt 0.186275 0.402299 +vt 0.176471 0.402299 +vt 0.235294 0.379310 +vt 0.215686 0.379310 +vt 0.215686 0.402299 +vt 0.205882 0.379310 +vt 0.186275 0.379310 +vt 0.196078 0.362069 +vt 0.205882 0.362069 +vt 0.235294 0.373563 +vt 0.245098 0.362069 +vt 0.245098 0.367816 +vt 0.215686 0.362069 +vt 0.225490 0.362069 +vt 0.196078 0.373563 +vt 0.186275 0.362069 +vt 0.235294 0.362069 +vt 0.225490 0.344828 +vt 0.235294 0.350575 +vt 0.205882 0.344828 +vt 0.245098 0.356322 +vt 0.215686 0.344828 +vt 0.196078 0.350575 +vt 0.176471 0.362069 +vt 0.186275 0.367816 +vt 0.186275 0.356322 +vt 0.254902 0.362069 +vt 0.196078 0.344828 +vt 0.205882 0.252874 +vt 0.235294 0.344828 +vt 0.245098 0.252874 +vt 0.245098 0.344828 +vt 0.225490 0.252874 +vt 0.254902 0.252874 +vt 0.254902 0.344828 +vt 0.215686 0.252874 +vt 0.176471 0.344828 +vt 0.186275 0.252874 +vt 0.186275 0.344828 +vt 0.196078 0.252874 +vt 0.235294 0.252874 +vt 0.245098 0.379310 +vt 0.254902 0.402299 +vt 0.245098 0.402299 +vt 0.225490 0.379310 +vt 0.235294 0.402299 +vt 0.225490 0.402299 +vt 0.196078 0.379310 +vt 0.205882 0.402299 +vt 0.196078 0.402299 +vt 0.176471 0.379310 +vt 0.186275 0.402299 +vt 0.176471 0.402299 +vt 0.235294 0.379310 +vt 0.215686 0.379310 +vt 0.215686 0.402299 +vt 0.205882 0.379310 +vt 0.186275 0.379310 +vt 0.196078 0.362069 +vt 0.205882 0.362069 +vt 0.235294 0.373563 +vt 0.245098 0.362069 +vt 0.245098 0.367816 +vt 0.215686 0.362069 +vt 0.225490 0.362069 +vt 0.196078 0.373563 +vt 0.186275 0.362069 +vt 0.235294 0.362069 +vt 0.235294 0.350575 +vt 0.205882 0.344828 +vt 0.245098 0.356322 +vt 0.215686 0.344828 +vt 0.225490 0.344828 +vt 0.186275 0.356322 +vt 0.196078 0.350575 +vt 0.176471 0.362069 +vt 0.186275 0.367816 +vt 0.254902 0.362069 +vt 0.196078 0.344828 +vt 0.205882 0.252874 +vt 0.235294 0.344828 +vt 0.245098 0.252874 +vt 0.245098 0.344828 +vt 0.225490 0.252874 +vt 0.254902 0.252874 +vt 0.254902 0.344828 +vt 0.215686 0.252874 +vt 0.176471 0.344828 +vt 0.186275 0.252874 +vt 0.186275 0.344828 +vt 0.196078 0.252874 +vt 0.235294 0.252874 +vt 0.245098 0.379310 +vt 0.254902 0.402299 +vt 0.245098 0.402299 +vt 0.225490 0.379310 +vt 0.235294 0.402299 +vt 0.225490 0.402299 +vt 0.196078 0.379310 +vt 0.205882 0.402299 +vt 0.196078 0.402299 +vt 0.176471 0.402299 +vt 0.186275 0.379310 +vt 0.186275 0.402299 +vt 0.235294 0.379310 +vt 0.215686 0.379310 +vt 0.215686 0.402299 +vt 0.205882 0.379310 +vt 0.196078 0.362069 +vt 0.205882 0.362069 +vt 0.235294 0.373563 +vt 0.245098 0.362069 +vt 0.245098 0.367816 +vt 0.215686 0.362069 +vt 0.225490 0.362069 +vt 0.196078 0.373563 +vt 0.186275 0.362069 +vt 0.235294 0.362069 +vt 0.225490 0.344828 +vt 0.235294 0.350575 +vt 0.196078 0.350575 +vt 0.205882 0.344828 +vt 0.245098 0.356322 +vt 0.215686 0.344828 +vt 0.186275 0.356322 +vt 0.176471 0.362069 +vt 0.186275 0.367816 +vt 0.254902 0.362069 +vt 0.196078 0.344828 +vt 0.205882 0.252874 +vt 0.235294 0.344828 +vt 0.245098 0.252874 +vt 0.245098 0.344828 +vt 0.225490 0.252874 +vt 0.254902 0.252874 +vt 0.254902 0.344828 +vt 0.215686 0.252874 +vt 0.176471 0.344828 +vt 0.186275 0.252874 +vt 0.186275 0.344828 +vt 0.196078 0.252874 +vt 0.235294 0.252874 +vt 0.245098 0.379310 +vt 0.254902 0.402299 +vt 0.245098 0.402299 +vt 0.225490 0.379310 +vt 0.235294 0.402299 +vt 0.225490 0.402299 +vt 0.196078 0.379310 +vt 0.205882 0.402299 +vt 0.196078 0.402299 +vt 0.176471 0.379310 +vt 0.186275 0.402299 +vt 0.176471 0.402299 +vt 0.235294 0.379310 +vt 0.215686 0.379310 +vt 0.215686 0.402299 +vt 0.205882 0.379310 +vt 0.186275 0.379310 +vt 0.196078 0.362069 +vt 0.205882 0.362069 +vt 0.235294 0.373563 +vt 0.245098 0.362069 +vt 0.245098 0.367816 +vt 0.225490 0.362069 +vt 0.215686 0.362069 +vt 0.196078 0.373563 +vt 0.186275 0.362069 +vt 0.235294 0.362069 +vt 0.225490 0.344828 +vt 0.235294 0.350575 +vt 0.205882 0.344828 +vt 0.245098 0.356322 +vt 0.215686 0.344828 +vt 0.196078 0.350575 +vt 0.176471 0.362069 +vt 0.186275 0.367816 +vt 0.186275 0.356322 +vt 0.254902 0.362069 +vt 0.196078 0.344828 +vt 0.205882 0.252874 +vt 0.235294 0.344828 +vt 0.245098 0.252874 +vt 0.245098 0.344828 +vt 0.225490 0.252874 +vt 0.254902 0.252874 +vt 0.254902 0.344828 +vt 0.215686 0.252874 +vt 0.176471 0.344828 +vt 0.186275 0.252874 +vt 0.186275 0.344828 +vt 0.196078 0.252874 +vt 0.235294 0.252874 +vt 0.245098 0.379310 +vt 0.254902 0.402299 +vt 0.245098 0.402299 +vt 0.225490 0.379310 +vt 0.235294 0.402299 +vt 0.225490 0.402299 +vt 0.196078 0.379310 +vt 0.205882 0.402299 +vt 0.196078 0.402299 +vt 0.176471 0.379310 +vt 0.186275 0.402299 +vt 0.176471 0.402299 +vt 0.235294 0.379310 +vt 0.215686 0.402299 +vt 0.205882 0.379310 +vt 0.186275 0.379310 +vt 0.196078 0.362069 +vt 0.205882 0.362069 +vt 0.235294 0.373563 +vt 0.245098 0.362069 +vt 0.245098 0.367816 +vt 0.215686 0.362069 +vt 0.225490 0.362069 +vt 0.215686 0.379310 +vt 0.196078 0.373563 +vt 0.186275 0.362069 +vt 0.235294 0.362069 +vt 0.225490 0.344828 +vt 0.235294 0.350575 +vt 0.205882 0.344828 +vt 0.245098 0.356322 +vt 0.215686 0.344828 +vt 0.186275 0.356322 +vt 0.196078 0.350575 +vt 0.176471 0.362069 +vt 0.186275 0.367816 +vt 0.254902 0.362069 +vt 0.196078 0.344828 +vt 0.205882 0.252874 +vt 0.235294 0.344828 +vt 0.245098 0.252874 +vt 0.245098 0.344828 +vt 0.225490 0.252874 +vt 0.254902 0.252874 +vt 0.254902 0.344828 +vt 0.215686 0.252874 +vt 0.176471 0.344828 +vt 0.186275 0.252874 +vt 0.186275 0.344828 +vt 0.196078 0.252874 +vt 0.235294 0.252874 +vt 0.245098 0.379310 +vt 0.254902 0.402299 +vt 0.245098 0.402299 +vt 0.225490 0.379310 +vt 0.235294 0.402299 +vt 0.225490 0.402299 +vt 0.196078 0.379310 +vt 0.205882 0.402299 +vt 0.196078 0.402299 +vt 0.176471 0.379310 +vt 0.186275 0.402299 +vt 0.176471 0.402299 +vt 0.235294 0.379310 +vt 0.215686 0.379310 +vt 0.215686 0.402299 +vt 0.205882 0.379310 +vt 0.186275 0.379310 +vt 0.196078 0.362069 +vt 0.205882 0.362069 +vt 0.235294 0.373563 +vt 0.245098 0.362069 +vt 0.245098 0.367816 +vt 0.215686 0.362069 +vt 0.225490 0.362069 +vt 0.196078 0.373563 +vt 0.186275 0.362069 +vt 0.235294 0.362069 +vt 0.225490 0.344828 +vt 0.235294 0.350575 +vt 0.205882 0.344828 +vt 0.245098 0.356322 +vt 0.215686 0.344828 +vt 0.196078 0.350575 +vt 0.176471 0.362069 +vt 0.186275 0.367816 +vt 0.186275 0.356322 +vt 0.254902 0.362069 +vt 0.196078 0.344828 +vt 0.205882 0.252874 +vt 0.235294 0.344828 +vt 0.245098 0.252874 +vt 0.245098 0.344828 +vt 0.225490 0.252874 +vt 0.254902 0.252874 +vt 0.254902 0.344828 +vt 0.215686 0.252874 +vt 0.176471 0.344828 +vt 0.186275 0.252874 +vt 0.186275 0.344828 +vt 0.196078 0.252874 +vt 0.235294 0.252874 +vt 0.245098 0.379310 +vt 0.254902 0.402299 +vt 0.245098 0.402299 +vt 0.225490 0.379310 +vt 0.235294 0.402299 +vt 0.225490 0.402299 +vt 0.196078 0.379310 +vt 0.205882 0.402299 +vt 0.196078 0.402299 +vt 0.176471 0.402299 +vt 0.186275 0.379310 +vt 0.186275 0.402299 +vt 0.235294 0.379310 +vt 0.215686 0.379310 +vt 0.215686 0.402299 +vt 0.205882 0.379310 +vt 0.196078 0.362069 +vt 0.205882 0.362069 +vt 0.235294 0.373563 +vt 0.245098 0.362069 +vt 0.245098 0.367816 +vt 0.215686 0.362069 +vt 0.225490 0.362069 +vt 0.196078 0.373563 +vt 0.186275 0.362069 +vt 0.235294 0.362069 +vt 0.225490 0.344828 +vt 0.235294 0.350575 +vt 0.205882 0.344828 +vt 0.245098 0.356322 +vt 0.215686 0.344828 +vt 0.186275 0.356322 +vt 0.196078 0.350575 +vt 0.176471 0.362069 +vt 0.186275 0.367816 +vt 0.254902 0.362069 +vt 0.196078 0.344828 +vt 0.205882 0.252874 +vt 0.235294 0.344828 +vt 0.245098 0.252874 +vt 0.245098 0.344828 +vt 0.225490 0.252874 +vt 0.254902 0.252874 +vt 0.254902 0.344828 +vt 0.215686 0.252874 +vt 0.176471 0.344828 +vt 0.186275 0.252874 +vt 0.186275 0.344828 +vt 0.196078 0.252874 +vt 0.235294 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.344828 +vt 0.323529 0.298851 +vt 0.254902 0.298851 +vt 0.264706 0.344828 +vt 0.254902 0.344828 +vt 0.274510 0.298851 +vt 0.264706 0.298851 +vt 0.284314 0.298851 +vt 0.274510 0.344828 +vt 0.294118 0.298851 +vt 0.284314 0.344828 +vt 0.303922 0.298851 +vt 0.294118 0.344828 +vt 0.313726 0.298851 +vt 0.303922 0.344828 +vt 0.313726 0.344828 +vt 0.333333 0.298851 +vt 0.323529 0.344828 +vt 0.323529 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.344828 +vt 0.254902 0.298851 +vt 0.274510 0.298851 +vt 0.264706 0.344828 +vt 0.284314 0.298851 +vt 0.274510 0.344828 +vt 0.294118 0.298851 +vt 0.284314 0.344828 +vt 0.303922 0.298851 +vt 0.294118 0.344828 +vt 0.313726 0.298851 +vt 0.303922 0.344828 +vt 0.313726 0.344828 +vt 0.323529 0.298851 +vt 0.333333 0.344828 +vt 0.323529 0.344828 +vt 0.264706 0.298851 +vt 0.254902 0.344828 +vt 0.254902 0.298851 +vt 0.274510 0.298851 +vt 0.264706 0.344828 +vt 0.284314 0.298851 +vt 0.274510 0.344828 +vt 0.294118 0.298851 +vt 0.284314 0.344828 +vt 0.303922 0.298851 +vt 0.294118 0.344828 +vt 0.313726 0.344828 +vt 0.303922 0.344828 +vt 0.313726 0.298851 +vt 0.333333 0.298851 +vt 0.323529 0.344828 +vt 0.323529 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.344828 +vt 0.254902 0.298851 +vt 0.274510 0.298851 +vt 0.264706 0.344828 +vt 0.284314 0.298851 +vt 0.274510 0.344828 +vt 0.294118 0.298851 +vt 0.284314 0.344828 +vt 0.303922 0.298851 +vt 0.294118 0.344828 +vt 0.313726 0.298851 +vt 0.303922 0.344828 +vt 0.313726 0.344828 +vt 0.176471 0.505747 +vt 0.156863 0.505747 +vt 0.019608 0.505747 +vt -0.000000 0.505747 +vt 0.196078 0.505747 +vt 0.156863 0.563218 +vt 0.137255 0.563218 +vt 0.000000 0.563218 +vt 0.176471 0.563218 +vt 0.019608 0.563218 +vt 0.196078 0.563218 +vt 0.039216 0.563218 +vt 0.215686 0.563218 +vt 0.058824 0.563218 +vt 0.235294 0.563218 +vt 0.078431 0.563218 +vt 0.274510 0.563218 +vt 0.254902 0.563218 +vt 0.098039 0.563218 +vt 0.117647 0.563218 +vt 0.294118 0.563218 +vt 0.392157 0.908046 +vt 0.411765 0.747126 +vt 0.411765 0.908046 +vt 0.254902 0.908046 +vt 0.274510 0.747126 +vt 0.274510 0.908046 +vt 0.313725 0.908046 +vt 0.333333 0.747126 +vt 0.333333 0.908046 +vt 0.431373 0.747126 +vt 0.431373 0.908046 +vt 0.372549 0.908046 +vt 0.392157 0.747126 +vt 0.235294 0.908046 +vt 0.254902 0.747126 +vt 0.294118 0.908046 +vt 0.313725 0.747126 +vt 0.352941 0.908046 +vt 0.372549 0.747126 +vt 0.450980 0.908046 +vt 0.470588 0.747126 +vt 0.470588 0.908046 +vt 0.294118 0.747126 +vt 0.352941 0.747126 +vt 0.450980 0.747126 +vt 0.156863 0.908046 +vt 0.176471 0.747126 +vt 0.176471 0.908046 +vt 0.019608 0.908046 +vt 0.039216 0.747126 +vt 0.039216 0.908046 +vt 0.078431 0.908046 +vt 0.098039 0.747126 +vt 0.098039 0.908046 +vt 0.196078 0.747126 +vt 0.196078 0.908046 +vt 0.137255 0.908046 +vt 0.156863 0.747126 +vt 0.000000 0.908046 +vt 0.019608 0.747126 +vt 0.058824 0.908046 +vt 0.078431 0.747126 +vt 0.117647 0.908046 +vt 0.137255 0.747126 +vt 0.215686 0.908046 +vt 0.235294 0.747126 +vt 0.235294 0.908046 +vt 0.058824 0.747126 +vt 0.117647 0.747126 +vt 0.215686 0.747126 +vt 0.392157 0.908046 +vt 0.411765 0.747126 +vt 0.411765 0.908046 +vt 0.254902 0.908046 +vt 0.274510 0.747126 +vt 0.274510 0.908046 +vt 0.313725 0.908046 +vt 0.333333 0.747126 +vt 0.333333 0.908046 +vt 0.431373 0.747126 +vt 0.431373 0.908046 +vt 0.372549 0.908046 +vt 0.392157 0.747126 +vt 0.235294 0.908046 +vt 0.254902 0.747126 +vt 0.294118 0.908046 +vt 0.313725 0.747126 +vt 0.352941 0.908046 +vt 0.372549 0.747126 +vt 0.450980 0.908046 +vt 0.470588 0.747126 +vt 0.470588 0.908046 +vt 0.294118 0.747126 +vt 0.352941 0.747126 +vt 0.450980 0.747126 +vt 0.156863 0.908046 +vt 0.176471 0.747126 +vt 0.176471 0.908046 +vt 0.019608 0.908046 +vt 0.039216 0.747126 +vt 0.039216 0.908046 +vt 0.078431 0.908046 +vt 0.098039 0.747126 +vt 0.098039 0.908046 +vt 0.196078 0.747126 +vt 0.196078 0.908046 +vt 0.137255 0.908046 +vt 0.156863 0.747126 +vt 0.000000 0.908046 +vt 0.019608 0.747126 +vt 0.058824 0.908046 +vt 0.078431 0.747126 +vt 0.117647 0.908046 +vt 0.137255 0.747126 +vt 0.215686 0.908046 +vt 0.235294 0.747126 +vt 0.235294 0.908046 +vt 0.058824 0.747126 +vt 0.117647 0.747126 +vt 0.215686 0.747126 +vt 0.156863 0.908046 +vt 0.176471 0.747126 +vt 0.176471 0.908046 +vt 0.019608 0.908046 +vt 0.039216 0.747126 +vt 0.039216 0.908046 +vt 0.078431 0.908046 +vt 0.098039 0.747126 +vt 0.098039 0.908046 +vt 0.196078 0.747126 +vt 0.196078 0.908046 +vt 0.137255 0.908046 +vt 0.156863 0.747126 +vt 0.000000 0.908046 +vt 0.019608 0.747126 +vt 0.058824 0.908046 +vt 0.078431 0.747126 +vt 0.117647 0.908046 +vt 0.137255 0.747126 +vt 0.215686 0.908046 +vt 0.235294 0.747126 +vt 0.235294 0.908046 +vt 0.058824 0.747126 +vt 0.117647 0.747126 +vt 0.215686 0.747126 +vt 0.392157 0.908046 +vt 0.411765 0.747126 +vt 0.411765 0.908046 +vt 0.254902 0.908046 +vt 0.274510 0.747126 +vt 0.274510 0.908046 +vt 0.313725 0.908046 +vt 0.333333 0.747126 +vt 0.333333 0.908046 +vt 0.431373 0.747126 +vt 0.431373 0.908046 +vt 0.372549 0.908046 +vt 0.392157 0.747126 +vt 0.235294 0.908046 +vt 0.254902 0.747126 +vt 0.294118 0.908046 +vt 0.313725 0.747126 +vt 0.352941 0.908046 +vt 0.372549 0.747126 +vt 0.450980 0.908046 +vt 0.470588 0.747126 +vt 0.470588 0.908046 +vt 0.294118 0.747126 +vt 0.352941 0.747126 +vt 0.450980 0.747126 +vt 0.156863 0.908046 +vt 0.176471 0.747126 +vt 0.176471 0.908046 +vt 0.019608 0.908046 +vt 0.039216 0.747126 +vt 0.039216 0.908046 +vt 0.078431 0.908046 +vt 0.098039 0.747126 +vt 0.098039 0.908046 +vt 0.196078 0.747126 +vt 0.196078 0.908046 +vt 0.137255 0.908046 +vt 0.156863 0.747126 +vt 0.000000 0.908046 +vt 0.019608 0.747126 +vt 0.058824 0.908046 +vt 0.078431 0.747126 +vt 0.117647 0.908046 +vt 0.137255 0.747126 +vt 0.215686 0.908046 +vt 0.235294 0.747126 +vt 0.235294 0.908046 +vt 0.058824 0.747126 +vt 0.117647 0.747126 +vt 0.215686 0.747126 +vt 0.392157 0.908046 +vt 0.411765 0.747126 +vt 0.411765 0.908046 +vt 0.254902 0.908046 +vt 0.274510 0.747126 +vt 0.274510 0.908046 +vt 0.313725 0.908046 +vt 0.333333 0.747126 +vt 0.333333 0.908046 +vt 0.431373 0.747126 +vt 0.431373 0.908046 +vt 0.372549 0.908046 +vt 0.392157 0.747126 +vt 0.235294 0.908046 +vt 0.254902 0.747126 +vt 0.294118 0.908046 +vt 0.313725 0.747126 +vt 0.352941 0.908046 +vt 0.372549 0.747126 +vt 0.450980 0.908046 +vt 0.470588 0.747126 +vt 0.470588 0.908046 +vt 0.294118 0.747126 +vt 0.352941 0.747126 +vt 0.450980 0.747126 +vt 0.156863 0.908046 +vt 0.176471 0.747126 +vt 0.176471 0.908046 +vt 0.019608 0.908046 +vt 0.039216 0.747126 +vt 0.039216 0.908046 +vt 0.078431 0.908046 +vt 0.098039 0.747126 +vt 0.098039 0.908046 +vt 0.196078 0.747126 +vt 0.196078 0.908046 +vt 0.137255 0.908046 +vt 0.156863 0.747126 +vt 0.000000 0.908046 +vt 0.019608 0.747126 +vt 0.058824 0.908046 +vt 0.078431 0.747126 +vt 0.117647 0.908046 +vt 0.137255 0.747126 +vt 0.215686 0.908046 +vt 0.235294 0.747126 +vt 0.235294 0.908046 +vt 0.058824 0.747126 +vt 0.117647 0.747126 +vt 0.215686 0.747126 +vt 0.274510 0.597701 +vt -0.000000 0.609195 +vt -0.000000 0.597701 +vt 0.274510 0.574713 +vt -0.000000 0.586207 +vt -0.000000 0.574713 +vt 0.274510 0.643678 +vt -0.000000 0.655172 +vt -0.000000 0.643678 +vt 0.274510 0.620690 +vt -0.000000 0.632184 +vt -0.000000 0.620690 +vt 0.274510 0.586207 +vt 0.274510 0.563218 +vt -0.000000 0.563218 +vt 0.274510 0.632184 +vt 0.274510 0.609195 +vt 0.735294 0.735632 +vt 0.705882 0.747126 +vt 0.705882 0.735632 +vt 0.735294 0.712644 +vt 0.705882 0.724138 +vt 0.705882 0.712644 +vt 0.735294 0.678161 +vt 0.705882 0.689655 +vt 0.705882 0.678161 +vt 0.735294 0.655172 +vt 0.705882 0.666667 +vt 0.705882 0.655172 +vt 0.735294 0.724138 +vt 0.735294 0.701149 +vt 0.705882 0.701149 +vt 0.735294 0.689655 +vt 0.735294 0.666667 +vt 0.740196 0.678161 +vt 0.750000 0.689655 +vt 0.740196 0.724138 +vt 0.750000 0.735632 +vt 0.745098 0.735632 +vt 0.750000 0.712644 +vt 0.750000 0.701149 +vt 0.750000 0.666667 +vt 0.750000 0.678161 +vt 0.750000 0.724138 +vt 0.759804 0.724138 +vt 0.764706 0.689655 +vt 0.754902 0.735632 +vt 0.764706 0.712644 +vt 0.764706 0.701149 +vt 0.759804 0.678161 +vt 0.750000 0.655172 +vt 0.745098 0.666667 +vt 0.754902 0.666667 +vt 0.750000 0.747126 +vt 0.764706 0.678161 +vt 0.882353 0.689655 +vt 0.764706 0.724138 +vt 0.882353 0.735632 +vt 0.764706 0.735632 +vt 0.882353 0.712644 +vt 0.882353 0.747126 +vt 0.764706 0.747126 +vt 0.882353 0.701149 +vt 0.764706 0.655172 +vt 0.882353 0.666667 +vt 0.764706 0.666667 +vt 0.882353 0.678161 +vt 0.882353 0.724138 +vt 0.897059 0.735632 +vt 0.897059 0.747126 +vt 0.897059 0.678161 +vt 0.887255 0.678161 +vt 0.887255 0.724138 +vt 0.897059 0.712644 +vt 0.897059 0.724138 +vt 0.882353 0.655172 +vt 0.897059 0.666667 +vt 0.897059 0.689655 +vt 0.892157 0.689655 +vt 0.911765 0.655172 +vt 0.911765 0.666667 +vt 0.906863 0.678161 +vt 0.906863 0.724138 +vt 0.911765 0.747126 +vt 0.901961 0.689655 +vt 0.911765 0.735632 +vt 0.897059 0.701149 +vt 0.892157 0.712644 +vt 0.901961 0.712644 +vt 0.921569 0.678161 +vt 0.911765 0.678161 +vt 0.911765 0.712644 +vt 0.921569 0.724138 +vt 0.911765 0.724138 +vt 0.911765 0.701149 +vt 0.921569 0.712644 +vt 0.921569 0.747126 +vt 0.911765 0.689655 +vt 0.921569 0.701149 +vt 0.921569 0.689655 +vt 0.921569 0.735632 +vt 0.921569 0.666667 +vt 0.303922 0.643678 +vt 0.274510 0.655172 +vt 0.274510 0.643678 +vt 0.303922 0.620690 +vt 0.274510 0.632184 +vt 0.274510 0.620690 +vt 0.303922 0.586207 +vt 0.274510 0.597701 +vt 0.274510 0.586207 +vt 0.303922 0.563218 +vt 0.274510 0.574713 +vt 0.274510 0.563218 +vt 0.303922 0.632184 +vt 0.303922 0.609195 +vt 0.274510 0.609195 +vt 0.303922 0.597701 +vt 0.303922 0.574713 +vt 0.308824 0.586207 +vt 0.318627 0.597701 +vt 0.308824 0.632184 +vt 0.318627 0.643678 +vt 0.313726 0.643678 +vt 0.318627 0.620690 +vt 0.318627 0.609195 +vt 0.318627 0.574713 +vt 0.318627 0.586207 +vt 0.318627 0.632184 +vt 0.333333 0.620690 +vt 0.328431 0.632184 +vt 0.333333 0.597701 +vt 0.323529 0.643678 +vt 0.333333 0.609195 +vt 0.328431 0.586207 +vt 0.318627 0.563218 +vt 0.313726 0.574713 +vt 0.323529 0.574713 +vt 0.318627 0.655172 +vt 0.333333 0.586207 +vt 0.450980 0.597701 +vt 0.333333 0.632184 +vt 0.450980 0.643678 +vt 0.333333 0.643678 +vt 0.450980 0.620690 +vt 0.450980 0.655172 +vt 0.333333 0.655172 +vt 0.450980 0.609195 +vt 0.333333 0.563218 +vt 0.450980 0.574713 +vt 0.333333 0.574713 +vt 0.450980 0.586207 +vt 0.450980 0.632184 +vt 0.465686 0.643678 +vt 0.465686 0.655172 +vt 0.465686 0.586207 +vt 0.455882 0.586207 +vt 0.455882 0.632184 +vt 0.465686 0.620690 +vt 0.465686 0.632184 +vt 0.450980 0.563218 +vt 0.465686 0.574713 +vt 0.465686 0.597701 +vt 0.460784 0.597701 +vt 0.480392 0.563218 +vt 0.480392 0.574713 +vt 0.475490 0.586207 +vt 0.475490 0.632184 +vt 0.480392 0.655172 +vt 0.470588 0.597701 +vt 0.480392 0.643678 +vt 0.465686 0.609195 +vt 0.460784 0.620690 +vt 0.470588 0.620690 +vt 0.490196 0.586207 +vt 0.480392 0.586207 +vt 0.480392 0.620690 +vt 0.490196 0.632184 +vt 0.480392 0.632184 +vt 0.480392 0.609195 +vt 0.490196 0.620690 +vt 0.490196 0.655172 +vt 0.480392 0.597701 +vt 0.490196 0.609195 +vt 0.490196 0.597701 +vt 0.490196 0.643678 +vt 0.490196 0.574713 +vt 0.303922 0.643678 +vt 0.274510 0.655172 +vt 0.274510 0.643678 +vt 0.303922 0.620690 +vt 0.274510 0.632184 +vt 0.274510 0.620690 +vt 0.303922 0.586207 +vt 0.274510 0.597701 +vt 0.274510 0.586207 +vt 0.303922 0.563218 +vt 0.274510 0.574713 +vt 0.274510 0.563218 +vt 0.303922 0.632184 +vt 0.303922 0.609195 +vt 0.274510 0.609195 +vt 0.303922 0.597701 +vt 0.303922 0.574713 +vt 0.318627 0.586207 +vt 0.318627 0.597701 +vt 0.308824 0.632184 +vt 0.318627 0.643678 +vt 0.313726 0.643678 +vt 0.318627 0.620690 +vt 0.318627 0.609195 +vt 0.308824 0.586207 +vt 0.318627 0.574713 +vt 0.318627 0.632184 +vt 0.333333 0.620690 +vt 0.328431 0.632184 +vt 0.333333 0.597701 +vt 0.323529 0.643678 +vt 0.333333 0.609195 +vt 0.328431 0.586207 +vt 0.318627 0.563218 +vt 0.313726 0.574713 +vt 0.323529 0.574713 +vt 0.318627 0.655172 +vt 0.333333 0.586207 +vt 0.450980 0.597701 +vt 0.333333 0.632184 +vt 0.450980 0.643678 +vt 0.333333 0.643678 +vt 0.450980 0.620690 +vt 0.450980 0.655172 +vt 0.333333 0.655172 +vt 0.450980 0.609195 +vt 0.333333 0.563218 +vt 0.450980 0.574713 +vt 0.333333 0.574713 +vt 0.450980 0.586207 +vt 0.450980 0.632184 +vt 0.465686 0.643678 +vt 0.465686 0.655172 +vt 0.465686 0.586207 +vt 0.455882 0.586207 +vt 0.455882 0.632184 +vt 0.465686 0.620690 +vt 0.465686 0.632184 +vt 0.450980 0.563218 +vt 0.465686 0.574713 +vt 0.465686 0.597701 +vt 0.460784 0.597701 +vt 0.480392 0.563218 +vt 0.480392 0.574713 +vt 0.475490 0.586207 +vt 0.475490 0.632184 +vt 0.480392 0.655172 +vt 0.470588 0.597701 +vt 0.480392 0.643678 +vt 0.465686 0.609195 +vt 0.460784 0.620690 +vt 0.470588 0.620690 +vt 0.490196 0.586207 +vt 0.480392 0.586207 +vt 0.480392 0.620690 +vt 0.490196 0.632184 +vt 0.480392 0.632184 +vt 0.480392 0.609195 +vt 0.490196 0.620690 +vt 0.490196 0.655172 +vt 0.480392 0.597701 +vt 0.490196 0.609195 +vt 0.490196 0.597701 +vt 0.490196 0.643678 +vt 0.490196 0.574713 +vt 0.735294 0.735632 +vt 0.705882 0.747126 +vt 0.705882 0.735632 +vt 0.735294 0.712644 +vt 0.705882 0.724138 +vt 0.705882 0.712644 +vt 0.735294 0.678161 +vt 0.705882 0.689655 +vt 0.705882 0.678161 +vt 0.735294 0.655172 +vt 0.705882 0.666667 +vt 0.705882 0.655172 +vt 0.735294 0.724138 +vt 0.735294 0.701149 +vt 0.705882 0.701149 +vt 0.735294 0.689655 +vt 0.735294 0.666667 +vt 0.740196 0.678161 +vt 0.750000 0.689655 +vt 0.740196 0.724138 +vt 0.750000 0.735632 +vt 0.745098 0.735632 +vt 0.750000 0.701149 +vt 0.750000 0.712644 +vt 0.750000 0.666667 +vt 0.750000 0.678161 +vt 0.750000 0.724138 +vt 0.764706 0.712644 +vt 0.759804 0.724138 +vt 0.764706 0.689655 +vt 0.754902 0.735632 +vt 0.764706 0.701149 +vt 0.759804 0.678161 +vt 0.750000 0.655172 +vt 0.745098 0.666667 +vt 0.754902 0.666667 +vt 0.750000 0.747126 +vt 0.764706 0.678161 +vt 0.882353 0.689655 +vt 0.764706 0.724138 +vt 0.882353 0.735632 +vt 0.764706 0.735632 +vt 0.882353 0.712644 +vt 0.882353 0.747126 +vt 0.764706 0.747126 +vt 0.882353 0.701149 +vt 0.764706 0.655172 +vt 0.882353 0.666667 +vt 0.764706 0.666667 +vt 0.882353 0.678161 +vt 0.882353 0.724138 +vt 0.897059 0.735632 +vt 0.897059 0.747126 +vt 0.897059 0.678161 +vt 0.887255 0.678161 +vt 0.887255 0.724138 +vt 0.897059 0.712644 +vt 0.897059 0.724138 +vt 0.882353 0.655172 +vt 0.897059 0.666667 +vt 0.897059 0.689655 +vt 0.892157 0.689655 +vt 0.911765 0.655172 +vt 0.911765 0.666667 +vt 0.906863 0.678161 +vt 0.906863 0.724138 +vt 0.911765 0.747126 +vt 0.901961 0.689655 +vt 0.911765 0.735632 +vt 0.897059 0.701149 +vt 0.892157 0.712644 +vt 0.901961 0.712644 +vt 0.921569 0.678161 +vt 0.911765 0.678161 +vt 0.911765 0.712644 +vt 0.921569 0.724138 +vt 0.911765 0.724138 +vt 0.911765 0.701149 +vt 0.921569 0.712644 +vt 0.921569 0.747126 +vt 0.911765 0.689655 +vt 0.921569 0.701149 +vt 0.921569 0.689655 +vt 0.921569 0.735632 +vt 0.921569 0.666667 +vt 0.735294 0.735632 +vt 0.705882 0.747126 +vt 0.705882 0.735632 +vt 0.735294 0.712644 +vt 0.705882 0.724138 +vt 0.705882 0.712644 +vt 0.735294 0.678161 +vt 0.705882 0.689655 +vt 0.705882 0.678161 +vt 0.735294 0.655172 +vt 0.705882 0.666667 +vt 0.705882 0.655172 +vt 0.735294 0.724138 +vt 0.735294 0.701149 +vt 0.705882 0.701149 +vt 0.735294 0.689655 +vt 0.735294 0.666667 +vt 0.750000 0.678161 +vt 0.750000 0.689655 +vt 0.745098 0.735632 +vt 0.750000 0.724138 +vt 0.750000 0.735632 +vt 0.750000 0.712644 +vt 0.750000 0.701149 +vt 0.745098 0.666667 +vt 0.740196 0.678161 +vt 0.740196 0.724138 +vt 0.764706 0.712644 +vt 0.759804 0.724138 +vt 0.764706 0.689655 +vt 0.754902 0.735632 +vt 0.764706 0.701149 +vt 0.750000 0.666667 +vt 0.759804 0.678161 +vt 0.750000 0.655172 +vt 0.754902 0.666667 +vt 0.750000 0.747126 +vt 0.764706 0.678161 +vt 0.882353 0.689655 +vt 0.764706 0.724138 +vt 0.882353 0.735632 +vt 0.764706 0.735632 +vt 0.882353 0.712644 +vt 0.882353 0.747126 +vt 0.764706 0.747126 +vt 0.882353 0.701149 +vt 0.764706 0.655172 +vt 0.882353 0.666667 +vt 0.764706 0.666667 +vt 0.882353 0.678161 +vt 0.882353 0.724138 +vt 0.897059 0.735632 +vt 0.897059 0.747126 +vt 0.897059 0.678161 +vt 0.887255 0.678161 +vt 0.887255 0.724138 +vt 0.897059 0.712644 +vt 0.897059 0.724138 +vt 0.882353 0.655172 +vt 0.897059 0.666667 +vt 0.897059 0.689655 +vt 0.892157 0.689655 +vt 0.911765 0.655172 +vt 0.911765 0.666667 +vt 0.906863 0.678161 +vt 0.906863 0.724138 +vt 0.911765 0.747126 +vt 0.901961 0.689655 +vt 0.911765 0.735632 +vt 0.897059 0.701149 +vt 0.892157 0.712644 +vt 0.901961 0.712644 +vt 0.921569 0.678161 +vt 0.911765 0.678161 +vt 0.911765 0.724138 +vt 0.921569 0.712644 +vt 0.921569 0.724138 +vt 0.911765 0.701149 +vt 0.911765 0.712644 +vt 0.921569 0.747126 +vt 0.911765 0.689655 +vt 0.921569 0.701149 +vt 0.921569 0.689655 +vt 0.921569 0.735632 +vt 0.921569 0.666667 +vt 0.303922 0.643678 +vt 0.274510 0.655172 +vt 0.274510 0.643678 +vt 0.303922 0.620690 +vt 0.274510 0.632184 +vt 0.274510 0.620690 +vt 0.303922 0.586207 +vt 0.274510 0.597701 +vt 0.274510 0.586207 +vt 0.303922 0.563218 +vt 0.274510 0.574713 +vt 0.274510 0.563218 +vt 0.303922 0.632184 +vt 0.303922 0.609195 +vt 0.274510 0.609195 +vt 0.303922 0.597701 +vt 0.303922 0.574713 +vt 0.318627 0.586207 +vt 0.318627 0.597701 +vt 0.308824 0.632184 +vt 0.318627 0.643678 +vt 0.313726 0.643678 +vt 0.318627 0.620690 +vt 0.318627 0.609195 +vt 0.308824 0.586207 +vt 0.318627 0.574713 +vt 0.318627 0.632184 +vt 0.333333 0.620690 +vt 0.328431 0.632184 +vt 0.333333 0.597701 +vt 0.323529 0.643678 +vt 0.333333 0.609195 +vt 0.328431 0.586207 +vt 0.318627 0.563218 +vt 0.313726 0.574713 +vt 0.323529 0.574713 +vt 0.318627 0.655172 +vt 0.333333 0.586207 +vt 0.450980 0.597701 +vt 0.333333 0.632184 +vt 0.450980 0.643678 +vt 0.333333 0.643678 +vt 0.450980 0.620690 +vt 0.450980 0.655172 +vt 0.333333 0.655172 +vt 0.450980 0.609195 +vt 0.333333 0.563218 +vt 0.450980 0.574713 +vt 0.333333 0.574713 +vt 0.450980 0.586207 +vt 0.450980 0.632184 +vt 0.465686 0.655172 +vt 0.465686 0.586207 +vt 0.455882 0.586207 +vt 0.455882 0.632184 +vt 0.465686 0.620690 +vt 0.465686 0.632184 +vt 0.450980 0.563218 +vt 0.465686 0.574713 +vt 0.465686 0.597701 +vt 0.460784 0.597701 +vt 0.465686 0.643678 +vt 0.480392 0.563218 +vt 0.480392 0.574713 +vt 0.475490 0.586207 +vt 0.475490 0.632184 +vt 0.480392 0.655172 +vt 0.470588 0.597701 +vt 0.480392 0.643678 +vt 0.465686 0.609195 +vt 0.460784 0.620690 +vt 0.470588 0.620690 +vt 0.490196 0.586207 +vt 0.480392 0.586207 +vt 0.480392 0.620690 +vt 0.490196 0.632184 +vt 0.480392 0.632184 +vt 0.480392 0.609195 +vt 0.490196 0.620690 +vt 0.490196 0.655172 +vt 0.480392 0.597701 +vt 0.490196 0.609195 +vt 0.490196 0.597701 +vt 0.490196 0.643678 +vt 0.490196 0.574713 +vt 0.735294 0.735632 +vt 0.705882 0.747126 +vt 0.705882 0.735632 +vt 0.735294 0.712644 +vt 0.705882 0.724138 +vt 0.705882 0.712644 +vt 0.735294 0.678161 +vt 0.705882 0.689655 +vt 0.705882 0.678161 +vt 0.735294 0.655172 +vt 0.705882 0.666667 +vt 0.705882 0.655172 +vt 0.735294 0.724138 +vt 0.735294 0.701149 +vt 0.705882 0.701149 +vt 0.735294 0.689655 +vt 0.735294 0.666667 +vt 0.750000 0.678161 +vt 0.750000 0.689655 +vt 0.740196 0.724138 +vt 0.750000 0.735632 +vt 0.745098 0.735632 +vt 0.750000 0.712644 +vt 0.750000 0.701149 +vt 0.740196 0.678161 +vt 0.750000 0.666667 +vt 0.750000 0.724138 +vt 0.759804 0.724138 +vt 0.764706 0.689655 +vt 0.754902 0.735632 +vt 0.764706 0.712644 +vt 0.764706 0.701149 +vt 0.759804 0.678161 +vt 0.750000 0.655172 +vt 0.745098 0.666667 +vt 0.754902 0.666667 +vt 0.750000 0.747126 +vt 0.764706 0.678161 +vt 0.882353 0.689655 +vt 0.764706 0.724138 +vt 0.882353 0.735632 +vt 0.764706 0.735632 +vt 0.882353 0.712644 +vt 0.882353 0.747126 +vt 0.764706 0.747126 +vt 0.882353 0.701149 +vt 0.764706 0.655172 +vt 0.882353 0.666667 +vt 0.764706 0.666667 +vt 0.882353 0.678161 +vt 0.882353 0.724138 +vt 0.897059 0.735632 +vt 0.897059 0.747126 +vt 0.897059 0.678161 +vt 0.887255 0.678161 +vt 0.887255 0.724138 +vt 0.897059 0.712644 +vt 0.897059 0.724138 +vt 0.882353 0.655172 +vt 0.897059 0.666667 +vt 0.897059 0.689655 +vt 0.892157 0.689655 +vt 0.911765 0.655172 +vt 0.911765 0.666667 +vt 0.906863 0.678161 +vt 0.906863 0.724138 +vt 0.911765 0.747126 +vt 0.901961 0.689655 +vt 0.911765 0.735632 +vt 0.897059 0.701149 +vt 0.892157 0.712644 +vt 0.901961 0.712644 +vt 0.921569 0.678161 +vt 0.911765 0.678161 +vt 0.911765 0.712644 +vt 0.921569 0.724138 +vt 0.911765 0.724138 +vt 0.911765 0.701149 +vt 0.921569 0.712644 +vt 0.921569 0.747126 +vt 0.911765 0.689655 +vt 0.921569 0.701149 +vt 0.921569 0.689655 +vt 0.921569 0.735632 +vt 0.921569 0.666667 +vt 0.274510 0.643678 +vt 0.303922 0.655172 +vt 0.274510 0.655172 +vt 0.303922 0.620690 +vt 0.274510 0.632184 +vt 0.274510 0.620690 +vt 0.303922 0.586207 +vt 0.274510 0.597701 +vt 0.274510 0.586207 +vt 0.303922 0.563218 +vt 0.274510 0.574713 +vt 0.274510 0.563218 +vt 0.303922 0.632184 +vt 0.303922 0.609195 +vt 0.274510 0.609195 +vt 0.303922 0.597701 +vt 0.303922 0.574713 +vt 0.308824 0.586207 +vt 0.318627 0.597701 +vt 0.308824 0.632184 +vt 0.318627 0.643678 +vt 0.313726 0.643678 +vt 0.318627 0.620690 +vt 0.318627 0.609195 +vt 0.318627 0.574713 +vt 0.318627 0.586207 +vt 0.318627 0.632184 +vt 0.333333 0.620690 +vt 0.328431 0.632184 +vt 0.333333 0.597701 +vt 0.323529 0.643678 +vt 0.333333 0.609195 +vt 0.328431 0.586207 +vt 0.318627 0.563218 +vt 0.313726 0.574713 +vt 0.323529 0.574713 +vt 0.318627 0.655172 +vt 0.333333 0.586207 +vt 0.450980 0.597701 +vt 0.333333 0.632184 +vt 0.450980 0.643678 +vt 0.333333 0.643678 +vt 0.450980 0.620690 +vt 0.450980 0.655172 +vt 0.333333 0.655172 +vt 0.450980 0.609195 +vt 0.333333 0.563218 +vt 0.450980 0.574713 +vt 0.333333 0.574713 +vt 0.450980 0.586207 +vt 0.450980 0.632184 +vt 0.465686 0.643678 +vt 0.465686 0.655172 +vt 0.465686 0.586207 +vt 0.455882 0.586207 +vt 0.455882 0.632184 +vt 0.465686 0.620690 +vt 0.465686 0.632184 +vt 0.450980 0.563218 +vt 0.465686 0.574713 +vt 0.465686 0.597701 +vt 0.460784 0.597701 +vt 0.480392 0.563218 +vt 0.480392 0.574713 +vt 0.475490 0.586207 +vt 0.475490 0.632184 +vt 0.480392 0.643678 +vt 0.480392 0.655172 +vt 0.470588 0.597701 +vt 0.465686 0.609195 +vt 0.460784 0.620690 +vt 0.470588 0.620690 +vt 0.490196 0.586207 +vt 0.480392 0.586207 +vt 0.480392 0.632184 +vt 0.490196 0.620690 +vt 0.490196 0.632184 +vt 0.480392 0.620690 +vt 0.490196 0.609195 +vt 0.490196 0.655172 +vt 0.480392 0.609195 +vt 0.490196 0.597701 +vt 0.480392 0.597701 +vt 0.490196 0.643678 +vt 0.490196 0.574713 +vt 0.303922 0.643678 +vt 0.274510 0.655172 +vt 0.274510 0.643678 +vt 0.303922 0.620690 +vt 0.274510 0.632184 +vt 0.274510 0.620690 +vt 0.303922 0.586207 +vt 0.274510 0.597701 +vt 0.274510 0.586207 +vt 0.303922 0.563218 +vt 0.274510 0.574713 +vt 0.274510 0.563218 +vt 0.303922 0.632184 +vt 0.303922 0.609195 +vt 0.274510 0.609195 +vt 0.303922 0.597701 +vt 0.303922 0.574713 +vt 0.318627 0.586207 +vt 0.318627 0.597701 +vt 0.308824 0.632184 +vt 0.318627 0.643678 +vt 0.313726 0.643678 +vt 0.318627 0.620690 +vt 0.318627 0.609195 +vt 0.308824 0.586207 +vt 0.318627 0.574713 +vt 0.318627 0.632184 +vt 0.333333 0.620690 +vt 0.328431 0.632184 +vt 0.333333 0.597701 +vt 0.323529 0.643678 +vt 0.333333 0.609195 +vt 0.328431 0.586207 +vt 0.318627 0.563218 +vt 0.313726 0.574713 +vt 0.323529 0.574713 +vt 0.318627 0.655172 +vt 0.333333 0.586207 +vt 0.450980 0.597701 +vt 0.333333 0.632184 +vt 0.450980 0.643678 +vt 0.333333 0.643678 +vt 0.450980 0.620690 +vt 0.450980 0.655172 +vt 0.333333 0.655172 +vt 0.450980 0.609195 +vt 0.333333 0.563218 +vt 0.450980 0.574713 +vt 0.333333 0.574713 +vt 0.450980 0.586207 +vt 0.450980 0.632184 +vt 0.465686 0.643678 +vt 0.465686 0.655172 +vt 0.465686 0.586207 +vt 0.455882 0.586207 +vt 0.455882 0.632184 +vt 0.465686 0.620690 +vt 0.465686 0.632184 +vt 0.450980 0.563218 +vt 0.465686 0.574713 +vt 0.465686 0.597701 +vt 0.460784 0.597701 +vt 0.480392 0.563218 +vt 0.480392 0.574713 +vt 0.475490 0.586207 +vt 0.475490 0.632184 +vt 0.480392 0.655172 +vt 0.470588 0.597701 +vt 0.480392 0.643678 +vt 0.465686 0.609195 +vt 0.460784 0.620690 +vt 0.470588 0.620690 +vt 0.490196 0.586207 +vt 0.480392 0.586207 +vt 0.480392 0.620690 +vt 0.490196 0.632184 +vt 0.480392 0.632184 +vt 0.480392 0.609195 +vt 0.490196 0.620690 +vt 0.490196 0.655172 +vt 0.480392 0.597701 +vt 0.490196 0.609195 +vt 0.490196 0.597701 +vt 0.490196 0.643678 +vt 0.490196 0.574713 +vt 0.735294 0.735632 +vt 0.705882 0.747126 +vt 0.705882 0.735632 +vt 0.735294 0.712644 +vt 0.705882 0.724138 +vt 0.705882 0.712644 +vt 0.735294 0.678161 +vt 0.705882 0.689655 +vt 0.705882 0.678161 +vt 0.735294 0.655172 +vt 0.705882 0.666667 +vt 0.705882 0.655172 +vt 0.735294 0.724138 +vt 0.735294 0.701149 +vt 0.705882 0.701149 +vt 0.735294 0.689655 +vt 0.735294 0.666667 +vt 0.740196 0.678161 +vt 0.750000 0.689655 +vt 0.740196 0.724138 +vt 0.750000 0.735632 +vt 0.745098 0.735632 +vt 0.750000 0.701149 +vt 0.750000 0.712644 +vt 0.750000 0.666667 +vt 0.750000 0.678161 +vt 0.750000 0.724138 +vt 0.764706 0.712644 +vt 0.759804 0.724138 +vt 0.764706 0.689655 +vt 0.754902 0.735632 +vt 0.764706 0.701149 +vt 0.759804 0.678161 +vt 0.750000 0.655172 +vt 0.745098 0.666667 +vt 0.754902 0.666667 +vt 0.750000 0.747126 +vt 0.764706 0.678161 +vt 0.882353 0.689655 +vt 0.764706 0.724138 +vt 0.882353 0.735632 +vt 0.764706 0.735632 +vt 0.882353 0.712644 +vt 0.882353 0.747126 +vt 0.764706 0.747126 +vt 0.882353 0.701149 +vt 0.764706 0.655172 +vt 0.882353 0.666667 +vt 0.764706 0.666667 +vt 0.882353 0.678161 +vt 0.882353 0.724138 +vt 0.897059 0.735632 +vt 0.897059 0.747126 +vt 0.897059 0.678161 +vt 0.887255 0.678161 +vt 0.887255 0.724138 +vt 0.897059 0.712644 +vt 0.897059 0.724138 +vt 0.882353 0.655172 +vt 0.897059 0.666667 +vt 0.897059 0.689655 +vt 0.892157 0.689655 +vt 0.911765 0.655172 +vt 0.911765 0.666667 +vt 0.906863 0.678161 +vt 0.906863 0.724138 +vt 0.911765 0.747126 +vt 0.901961 0.689655 +vt 0.911765 0.735632 +vt 0.897059 0.701149 +vt 0.892157 0.712644 +vt 0.901961 0.712644 +vt 0.921569 0.678161 +vt 0.911765 0.678161 +vt 0.911765 0.712644 +vt 0.921569 0.724138 +vt 0.911765 0.724138 +vt 0.911765 0.701149 +vt 0.921569 0.712644 +vt 0.921569 0.747126 +vt 0.911765 0.689655 +vt 0.921569 0.701149 +vt 0.921569 0.689655 +vt 0.921569 0.735632 +vt 0.921569 0.666667 +vt 0.294118 0.298851 +vt 0.284314 0.252874 +vt 0.294118 0.252874 +vt 0.274510 0.298851 +vt 0.264706 0.252874 +vt 0.274510 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.252874 +vt 0.333333 0.252874 +vt 0.313726 0.298851 +vt 0.303922 0.252874 +vt 0.313726 0.252874 +vt 0.303922 0.298851 +vt 0.284314 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.252874 +vt 0.323529 0.298851 +vt 0.294118 0.298851 +vt 0.284314 0.252874 +vt 0.294118 0.252874 +vt 0.274510 0.298851 +vt 0.264706 0.252874 +vt 0.274510 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.252874 +vt 0.333333 0.252874 +vt 0.313726 0.298851 +vt 0.303922 0.252874 +vt 0.313726 0.252874 +vt 0.303922 0.298851 +vt 0.284314 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.252874 +vt 0.323529 0.298851 +vt 0.294118 0.298851 +vt 0.284314 0.252874 +vt 0.294118 0.252874 +vt 0.274510 0.298851 +vt 0.264706 0.252874 +vt 0.274510 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.252874 +vt 0.333333 0.252874 +vt 0.313726 0.298851 +vt 0.303922 0.252874 +vt 0.313726 0.252874 +vt 0.303922 0.298851 +vt 0.284314 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.252874 +vt 0.323529 0.298851 +vt 0.294118 0.298851 +vt 0.284314 0.252874 +vt 0.294118 0.252874 +vt 0.274510 0.298851 +vt 0.264706 0.252874 +vt 0.274510 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.252874 +vt 0.333333 0.252874 +vt 0.313726 0.298851 +vt 0.303922 0.252874 +vt 0.313726 0.252874 +vt 0.303922 0.298851 +vt 0.284314 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.252874 +vt 0.323529 0.298851 +vt 0.294118 0.298851 +vt 0.284314 0.252874 +vt 0.294118 0.252874 +vt 0.274510 0.298851 +vt 0.264706 0.252874 +vt 0.274510 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.252874 +vt 0.333333 0.252874 +vt 0.313726 0.298851 +vt 0.303922 0.252874 +vt 0.313726 0.252874 +vt 0.303922 0.298851 +vt 0.284314 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.252874 +vt 0.323529 0.298851 +vt 0.294118 0.298851 +vt 0.284314 0.252874 +vt 0.294118 0.252874 +vt 0.274510 0.298851 +vt 0.264706 0.252874 +vt 0.274510 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.252874 +vt 0.333333 0.252874 +vt 0.313726 0.298851 +vt 0.303922 0.252874 +vt 0.313726 0.252874 +vt 0.303922 0.298851 +vt 0.284314 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.252874 +vt 0.323529 0.298851 +vt 0.294118 0.298851 +vt 0.284314 0.252874 +vt 0.294118 0.252874 +vt 0.274510 0.298851 +vt 0.264706 0.252874 +vt 0.274510 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.252874 +vt 0.333333 0.252874 +vt 0.313726 0.298851 +vt 0.303922 0.252874 +vt 0.313726 0.252874 +vt 0.303922 0.298851 +vt 0.284314 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.252874 +vt 0.323529 0.298851 +vt 0.294118 0.298851 +vt 0.284314 0.252874 +vt 0.294118 0.252874 +vt 0.274510 0.298851 +vt 0.264706 0.252874 +vt 0.274510 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.252874 +vt 0.333333 0.252874 +vt 0.313726 0.298851 +vt 0.303922 0.252874 +vt 0.313726 0.252874 +vt 0.303922 0.298851 +vt 0.284314 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.252874 +vt 0.323529 0.298851 +vt 0.294118 0.298851 +vt 0.284314 0.252874 +vt 0.294118 0.252874 +vt 0.274510 0.298851 +vt 0.264706 0.252874 +vt 0.274510 0.252874 +vt 0.333333 0.298851 +vt 0.323529 0.252874 +vt 0.333333 0.252874 +vt 0.313726 0.298851 +vt 0.303922 0.252874 +vt 0.313726 0.252874 +vt 0.303922 0.298851 +vt 0.284314 0.298851 +vt 0.264706 0.298851 +vt 0.254902 0.252874 +vt 0.323529 0.298851 +vt -0.000000 0.747126 +vt 0.313726 0.563218 +vt 0.254902 0.379310 +vt 0.176471 0.252874 +vt 0.333333 0.344828 +vt 0.274510 0.655172 +vt 0.058824 0.747126 +vt 0.352941 0.655172 +vt 0.392157 0.747126 +vt 0.705882 0.655172 +vt 0.735294 0.747126 +vt 0.921569 0.655172 +vt 0.303922 0.655172 +vt 0.465686 0.563218 +vt 0.490196 0.563218 +vt 0.254902 0.298851 +vt 0.254902 0.379310 +vt 0.176471 0.252874 +vt 0.254902 0.379310 +vt 0.176471 0.379310 +vt 0.176471 0.252874 +vt 0.254902 0.379310 +vt 0.176471 0.252874 +vt 0.254902 0.379310 +vt 0.176471 0.252874 +vt 0.254902 0.379310 +vt 0.176471 0.379310 +vt 0.176471 0.252874 +vt 0.254902 0.379310 +vt 0.176471 0.252874 +vt 0.254902 0.379310 +vt 0.176471 0.252874 +vt 0.254902 0.379310 +vt 0.176471 0.252874 +vt 0.254902 0.379310 +vt 0.176471 0.379310 +vt 0.176471 0.252874 +vt 0.333333 0.344828 +vt 0.333333 0.344828 +vt 0.333333 0.298851 +vt 0.333333 0.344828 +vt 0.313726 0.563218 +vt 0.235294 0.747126 +vt -0.000000 0.747126 +vt 0.235294 0.747126 +vt -0.000000 0.747126 +vt -0.000000 0.747126 +vt 0.235294 0.747126 +vt -0.000000 0.747126 +vt 0.235294 0.747126 +vt -0.000000 0.747126 +vt 0.274510 0.655172 +vt 0.735294 0.747126 +vt 0.897059 0.655172 +vt 0.921569 0.655172 +vt 0.303922 0.655172 +vt 0.465686 0.563218 +vt 0.490196 0.563218 +vt 0.303922 0.655172 +vt 0.465686 0.563218 +vt 0.490196 0.563218 +vt 0.735294 0.747126 +vt 0.897059 0.655172 +vt 0.921569 0.655172 +vt 0.735294 0.747126 +vt 0.897059 0.655172 +vt 0.921569 0.655172 +vt 0.303922 0.655172 +vt 0.465686 0.563218 +vt 0.490196 0.563218 +vt 0.735294 0.747126 +vt 0.897059 0.655172 +vt 0.921569 0.655172 +vt 0.303922 0.643678 +vt 0.465686 0.563218 +vt 0.490196 0.563218 +vt 0.303922 0.655172 +vt 0.465686 0.563218 +vt 0.490196 0.563218 +vt 0.735294 0.747126 +vt 0.897059 0.655172 +vt 0.921569 0.655172 +vt 0.254902 0.298851 +vt 0.254902 0.298851 +vt 0.254902 0.298851 +vt 0.254902 0.298851 +vt 0.254902 0.298851 +vt 0.254902 0.298851 +vt 0.254902 0.298851 +vt 0.254902 0.298851 +vt 0.254902 0.298851 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.8660 0.0000 0.5000 +vn -0.5000 0.0000 -0.8660 +vn -0.8660 0.0000 -0.5000 +vn -0.8660 0.0000 0.5000 +vn -0.5000 0.0000 0.8660 +vn 0.8660 0.0000 -0.5000 +vn 0.5000 0.0000 0.8660 +vn 0.5000 0.0000 -0.8660 +vn -0.3827 0.0000 0.9239 +vn -0.7071 0.0000 0.7071 +vn 0.3827 0.0000 -0.9239 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 0.9239 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 0.3827 +vn 0.9239 0.0000 -0.3827 +vn -0.9239 0.0000 0.3827 +vn 0.7071 0.0000 -0.7071 +vn -0.1363 -0.6737 -0.7263 +vn 0.0000 -0.7071 -0.7071 +vn 0.1448 0.7194 -0.6794 +vn 0.0000 0.7071 -0.7071 +vn 0.0196 0.0473 0.9987 +vn 0.0000 0.7071 0.7071 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0196 0.0473 -0.9987 +vn 0.1866 0.9824 -0.0000 +vn 0.1448 0.7194 0.6794 +vn -0.1363 -0.6737 0.7263 +vn 0.5294 0.5294 0.6630 +vn -0.4617 -0.4617 -0.7574 +vn 0.5294 0.5294 -0.6630 +vn 0.7071 0.7071 -0.0000 +vn -0.4617 -0.4617 0.7574 +vn 0.0671 0.0671 0.9955 +vn 0.0671 0.0671 -0.9955 +vn 0.7194 0.1448 -0.6794 +vn 0.0473 0.0196 -0.9987 +vn 0.7194 0.1448 0.6794 +vn -0.6737 -0.1363 -0.7263 +vn 0.9824 0.1866 0.0000 +vn -0.6737 -0.1363 0.7263 +vn 0.0473 0.0196 0.9987 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 0.7071 -0.0000 +vn -0.6737 0.7263 0.1363 +vn 0.7194 0.6794 -0.1448 +vn 0.0473 -0.9987 -0.0196 +vn -0.9307 -0.0000 0.3658 +vn 0.0473 0.9987 -0.0196 +vn 0.9824 0.0000 -0.1866 +vn 0.7194 -0.6794 -0.1448 +vn -0.6737 -0.7263 0.1363 +vn 0.0440 -0.9989 -0.0165 +vn 0.6174 -0.6805 -0.3946 +vn -0.5824 0.7230 0.3716 +vn 0.6174 0.6805 -0.3946 +vn 0.8368 -0.0000 -0.5475 +vn -0.5825 -0.7230 0.3716 +vn 0.0440 0.9989 -0.0165 +vn -0.6174 -0.6805 0.3946 +vn -0.9824 0.0000 0.1866 +vn -0.7194 -0.6794 0.1448 +vn -0.0440 -0.9989 0.0165 +vn -0.0473 -0.9987 0.0196 +vn 0.5825 0.7230 -0.3716 +vn -0.0473 0.9987 0.0196 +vn -0.0440 0.9989 0.0165 +vn -0.6174 0.6805 0.3946 +vn -0.8368 0.0000 0.5475 +vn 0.6737 -0.7263 -0.1363 +vn 0.5824 -0.7230 -0.3716 +vn -0.7194 0.6794 0.1448 +vn 0.9307 0.0000 -0.3658 +vn 0.6737 0.7263 -0.1363 +vn -0.5825 0.7230 0.3716 +vn 0.5824 0.7230 -0.3716 +vn -0.7263 -0.6737 0.1363 +vn -0.6794 0.7194 -0.1448 +vn 0.9987 0.0473 -0.0196 +vn -0.9987 0.0473 -0.0196 +vn -0.0000 0.9824 -0.1866 +vn 0.6794 0.7194 -0.1448 +vn 0.7263 -0.6737 0.1363 +vn 0.9955 0.0671 -0.0671 +vn 0.6630 0.5294 -0.5294 +vn -0.7574 -0.4617 0.4617 +vn -0.6630 0.5294 -0.5294 +vn 0.7574 -0.4617 0.4617 +vn -0.9955 0.0671 -0.0671 +vn -0.6794 0.1448 -0.7194 +vn -0.9987 0.0196 -0.0473 +vn 0.6794 0.1448 -0.7194 +vn -0.7263 -0.1363 0.6737 +vn 0.0000 0.1866 -0.9824 +vn 0.9987 0.0196 -0.0473 +vn 0.7263 -0.1363 0.6737 +vn 0.7263 0.1363 -0.6737 +vn -0.6794 -0.1448 0.7194 +vn -0.7263 0.1363 -0.6737 +vn -0.0000 -0.1866 0.9824 +vn 0.6794 -0.1448 0.7194 +vn 0.9987 -0.0196 0.0473 +vn -0.9987 -0.0196 0.0473 +vn -0.6630 -0.5294 0.5294 +vn 0.9955 -0.0671 0.0671 +vn -0.7574 0.4617 -0.4617 +vn -0.9955 -0.0671 0.0671 +vn 0.6630 -0.5294 0.5294 +vn 0.7574 0.4617 -0.4617 +vn 0.6794 -0.7194 0.1448 +vn 0.9987 -0.0473 0.0196 +vn -0.9987 -0.0473 0.0196 +vn -0.0000 -0.9824 0.1866 +vn 0.7263 0.6737 -0.1363 +vn -0.6794 -0.7194 0.1448 +vn -0.7263 0.6737 -0.1363 +vn 0.1363 -0.6737 0.7263 +vn -0.1448 0.7194 0.6794 +vn -0.0196 0.0473 -0.9987 +vn 0.1363 -0.6737 -0.7263 +vn -0.0196 0.0473 0.9987 +vn -0.1866 0.9824 -0.0000 +vn -0.1448 0.7194 -0.6794 +vn -0.0671 0.0671 -0.9955 +vn -0.5294 0.5294 -0.6630 +vn 0.4617 -0.4617 0.7574 +vn -0.5294 0.5294 0.6630 +vn 0.4617 -0.4617 -0.7574 +vn -0.0671 0.0671 0.9955 +vn -0.7194 0.1448 0.6794 +vn -0.0473 0.0196 0.9987 +vn -0.0473 0.0196 -0.9987 +vn -0.7194 0.1448 -0.6794 +vn 0.6737 -0.1363 0.7263 +vn -0.9824 0.1866 0.0000 +vn 0.6737 -0.1363 -0.7263 +vn 0.7263 -0.6737 -0.1363 +vn 0.6794 0.7194 0.1448 +vn -0.9987 0.0473 0.0196 +vn 0.9987 0.0473 0.0196 +vn 0.0000 0.9824 0.1866 +vn -0.6794 0.7194 0.1448 +vn -0.7263 -0.6737 -0.1363 +vn -0.9955 0.0671 0.0671 +vn -0.6630 0.5294 0.5294 +vn 0.9955 0.0671 0.0671 +vn 0.7574 -0.4617 -0.4617 +vn 0.6630 0.5294 0.5294 +vn 0.6794 0.1448 0.7194 +vn 0.9987 0.0196 0.0473 +vn -0.6794 0.1448 0.7194 +vn 0.7263 -0.1363 -0.6737 +vn -0.0000 0.1866 0.9824 +vn -0.7574 -0.4617 -0.4617 +vn -0.9987 0.0196 0.0473 +vn -0.7263 -0.1363 -0.6737 +vn -0.7263 0.1363 0.6737 +vn 0.6794 -0.1448 -0.7194 +vn 0.7263 0.1363 0.6737 +vn 0.0000 -0.1866 -0.9824 +vn -0.6794 -0.1448 -0.7194 +vn -0.9987 -0.0196 -0.0473 +vn 0.9987 -0.0196 -0.0473 +vn 0.6630 -0.5294 -0.5294 +vn -0.9955 -0.0671 -0.0671 +vn 0.7574 0.4617 0.4617 +vn 0.9955 -0.0671 -0.0671 +vn -0.6630 -0.5294 -0.5294 +vn -0.7574 0.4617 0.4617 +vn 0.0000 -0.9824 -0.1866 +vn -0.6794 -0.7194 -0.1448 +vn -0.9987 -0.0473 -0.0196 +vn 0.9987 -0.0473 -0.0196 +vn -0.7263 0.6737 0.1363 +vn 0.6794 -0.7194 -0.1448 +vn 0.7263 0.6737 0.1363 +s off +f 3024/207/238 3025/208/238 3026/209/238 +f 3027/210/238 3030/211/238 3028/212/238 +f 3034/213/239 3031/214/239 3032/215/239 +f 3027/216/240 3033/217/240 3029/218/240 +f 3029/218/241 3034/213/241 3030/211/241 +f 3030/211/242 3032/215/242 3028/212/242 +f 3028/219/243 3031/220/243 3027/216/243 +f 3035/221/238 3038/222/238 3036/223/238 +f 3042/224/239 3039/225/239 3040/226/239 +f 3035/227/240 3041/228/240 3037/229/240 +f 3037/229/241 3042/224/241 3038/222/241 +f 3038/222/242 3040/226/242 3036/223/242 +f 3036/230/243 3039/231/243 3035/227/243 +f 3043/232/238 3046/233/238 3044/234/238 +f 3050/235/239 3047/236/239 3048/237/239 +f 3043/238/240 3049/239/240 3045/240/240 +f 3045/240/241 3050/235/241 3046/233/241 +f 3046/233/242 3048/237/242 3044/234/242 +f 3044/241/243 3047/242/243 3043/238/243 +f 3051/243/238 3054/244/238 3052/245/238 +f 3058/246/239 3055/247/239 3056/248/239 +f 3051/249/240 3057/250/240 3053/251/240 +f 3053/251/241 3058/246/241 3054/244/241 +f 3054/244/242 3056/248/242 3052/245/242 +f 3052/252/243 3055/253/243 3051/249/243 +f 3061/254/243 3026/209/243 3025/208/243 +f 3059/255/241 3023/256/241 3024/207/241 +f 3062/257/239 3060/258/239 3059/259/239 +f 3063/260/238 3065/261/238 3066/262/238 +f 3069/263/241 3066/262/241 3065/261/241 +f 3067/264/243 3064/265/243 3063/260/243 +f 3070/266/239 3068/267/239 3067/268/239 +f 3071/269/238 3073/270/238 3074/271/238 +f 3077/272/242 3074/271/242 3073/270/242 +f 3075/273/240 3072/274/240 3071/269/240 +f 3078/275/239 3076/276/239 3075/277/239 +f 3079/278/238 3081/279/238 3082/280/238 +f 3085/281/240 3082/280/240 3081/279/240 +f 3083/282/242 3080/283/242 3079/278/242 +f 3086/284/239 3084/285/239 3083/286/239 +f 3091/287/242 3088/288/242 3093/289/242 +f 3093/290/243 3089/291/243 3094/292/243 +f 3092/293/241 3087/294/241 3091/295/241 +f 3094/296/240 3090/297/240 3092/298/240 +f 3088/288/239 3090/297/239 3089/291/239 +f 3092/299/238 3093/289/238 3094/300/238 +f 3099/301/242 3096/302/242 3101/303/242 +f 3101/304/243 3097/305/243 3102/306/243 +f 3100/307/241 3095/308/241 3099/309/241 +f 3102/310/240 3098/311/240 3100/312/240 +f 3096/302/239 3098/311/239 3097/305/239 +f 3100/313/238 3101/303/238 3102/314/238 +f 3105/315/238 3104/316/238 3103/317/238 +f 3109/318/239 3107/319/239 3108/320/239 +f 3103/321/240 3107/319/240 3105/322/240 +f 3105/323/241 3110/324/241 3106/325/241 +f 3104/326/243 3108/320/243 3103/327/243 +f 3106/328/242 3109/318/242 3104/316/242 +f 3115/329/242 3112/330/242 3117/331/242 +f 3117/332/243 3113/333/243 3118/334/243 +f 3116/335/241 3111/336/241 3115/337/241 +f 3118/338/240 3114/339/240 3116/340/240 +f 3112/330/239 3114/339/239 3113/333/239 +f 3116/341/238 3117/331/238 3118/342/238 +f 3121/343/238 3120/344/238 3119/345/238 +f 3125/346/239 3123/347/239 3124/348/239 +f 3119/349/240 3123/347/240 3121/350/240 +f 3121/351/241 3126/352/241 3122/353/241 +f 3120/354/243 3124/348/243 3119/355/243 +f 3122/356/242 3125/346/242 3120/344/242 +f 3129/357/242 3128/358/242 3127/359/242 +f 3131/360/239 3142/361/239 3134/362/239 +f 3130/363/243 3137/364/243 3128/358/243 +f 3127/359/241 3135/365/241 3129/357/241 +f 3129/357/239 3138/366/239 3130/363/239 +f 3128/358/238 3136/367/238 3127/359/238 +f 3131/368/240 3136/369/240 3132/370/240 +f 3132/371/240 3137/372/240 3133/373/240 +f 3133/374/240 3138/375/240 3134/376/240 +f 3134/362/240 3135/377/240 3131/360/240 +f 3133/373/238 3140/378/238 3132/371/238 +f 3134/376/243 3141/379/243 3133/374/243 +f 3132/370/241 3139/380/241 3131/368/241 +f 3146/381/238 3148/382/238 3152/383/238 +f 3658/384/239 3660/385/239 3664/386/239 +f 3157/387/238 3156/388/238 3155/389/238 +f 3158/390/243 3161/391/243 3156/388/243 +f 3155/389/241 3159/392/241 3157/387/241 +f 3157/387/242 3162/393/242 3158/390/242 +f 3156/388/240 3160/394/240 3155/389/240 +f 3160/395/239 3162/396/239 3159/397/239 +f 3165/398/238 3164/399/238 3163/400/238 +f 3166/401/243 3169/402/243 3164/399/243 +f 3163/400/241 3167/403/241 3165/398/241 +f 3165/398/242 3170/404/242 3166/401/242 +f 3164/399/240 3168/405/240 3163/400/240 +f 3168/406/239 3170/407/239 3167/408/239 +f 3173/409/238 3172/410/238 3171/411/238 +f 3174/412/243 3177/413/243 3172/410/243 +f 3171/411/241 3175/414/241 3173/409/241 +f 3173/409/242 3178/415/242 3174/412/242 +f 3172/410/240 3176/416/240 3171/411/240 +f 3181/417/239 3178/418/239 3175/419/239 +f 3182/420/243 3185/421/243 3180/422/243 +f 3179/423/239 3175/419/239 3176/424/239 +f 3180/425/239 3176/424/239 3177/413/239 +f 3182/426/239 3177/413/239 3178/418/239 +f 3185/421/239 3183/427/239 3184/428/239 +f 3179/429/241 3183/427/241 3181/430/241 +f 3181/431/242 3186/432/242 3182/433/242 +f 3180/434/240 3184/428/240 3179/435/240 +f 3193/436/239 3191/437/239 3192/438/239 +f 3188/439/240 3192/438/240 3187/440/240 +f 3190/441/243 3193/436/243 3188/442/243 +f 3187/443/241 3191/437/241 3189/444/241 +f 3189/445/242 3194/446/242 3190/447/242 +f 3212/448/239 3228/449/239 3227/450/239 +f 3213/451/239 3227/450/239 3229/452/239 +f 3213/451/239 3230/453/239 3214/454/239 +f 3215/455/239 3230/453/239 3231/456/239 +f 3215/455/239 3232/457/239 3216/458/239 +f 3216/458/239 3233/459/239 3217/460/239 +f 3218/461/239 3233/459/239 3234/462/239 +f 3219/463/239 3234/462/239 3235/464/239 +f 3220/465/239 3235/466/239 3236/467/239 +f 3221/468/239 3236/467/239 3237/469/239 +f 3222/470/239 3237/469/239 3238/471/239 +f 3223/472/239 3238/471/239 3239/473/239 +f 3223/472/239 3240/474/239 3224/475/239 +f 3224/475/239 3241/476/239 3225/477/239 +f 3226/478/239 3241/476/239 3242/479/239 +f 3211/480/239 3242/479/239 3228/449/239 +f 3260/481/239 3261/482/239 3259/483/239 +f 3264/484/239 3265/485/239 3263/486/239 +f 3268/487/239 3269/488/239 3267/489/239 +f 3273/490/239 3272/491/239 3274/492/239 +f 3276/493/239 3277/494/239 3275/495/239 +f 3280/496/239 3281/497/239 3279/498/239 +f 3289/499/239 3287/500/239 3288/501/239 +f 3284/502/240 3288/501/240 3283/503/240 +f 3286/504/243 3289/499/243 3284/505/243 +f 3283/506/241 3287/500/241 3285/507/241 +f 3285/508/242 3290/509/242 3286/510/242 +f 3319/511/239 3320/512/239 3318/513/239 +f 3323/514/239 3324/515/239 3322/516/239 +f 3327/517/239 3328/518/239 3326/519/239 +f 3332/520/239 3331/521/239 3333/522/239 +f 3335/523/239 3336/524/239 3334/525/239 +f 3339/526/239 3340/527/239 3338/528/239 +f 3402/529/239 3400/530/239 3401/531/239 +f 3399/532/243 3402/529/243 3397/533/243 +f 3396/534/241 3400/530/241 3398/535/241 +f 3398/536/242 3403/537/242 3399/538/242 +f 3397/539/240 3401/531/240 3396/540/240 +f 3654/541/239 3652/542/239 3653/543/239 +f 3651/544/243 3654/541/243 3649/545/243 +f 3648/546/241 3652/542/241 3650/547/241 +f 3650/548/242 3655/549/242 3651/550/242 +f 3649/551/240 3653/543/240 3648/552/240 +f 3300/553/239 4080/554/239 4079/555/239 +f 3299/556/239 4079/555/239 4081/557/239 +f 3299/556/239 4082/558/239 3298/559/239 +f 3297/560/239 4082/558/239 4083/561/239 +f 3297/560/239 4084/562/239 3296/563/239 +f 3295/564/239 4084/562/239 4085/565/239 +f 3294/566/239 4085/565/239 4086/567/239 +f 3293/568/239 4086/567/239 4087/569/239 +f 3292/570/239 4087/571/239 4088/572/239 +f 3291/573/239 4088/572/239 4089/574/239 +f 4074/575/239 4089/574/239 4090/576/239 +f 4075/577/239 4090/576/239 4091/578/239 +f 4075/577/239 4092/579/239 4076/580/239 +f 4076/580/239 4093/581/239 4077/582/239 +f 4078/583/239 4093/581/239 4094/584/239 +f 3301/585/239 4094/584/239 4080/554/239 +f 4114/586/238 4116/587/238 4120/588/238 +f 4127/589/239 4129/590/239 4131/591/239 +f 4138/592/238 4140/593/238 4144/594/238 +f 4151/595/239 4155/596/239 4147/597/239 +f 4164/598/238 4166/599/238 4168/600/238 +f 4175/601/239 4177/602/239 4179/603/239 +f 4188/604/238 4190/605/238 4192/606/238 +f 4199/607/239 4201/608/239 4203/609/239 +f 4210/610/238 4212/611/238 4216/612/238 +f 4223/613/239 4227/614/239 4219/615/239 +f 4234/616/238 4236/617/238 4240/618/238 +f 4247/619/239 4251/620/239 4243/621/239 +f 4258/622/238 4260/623/238 4264/624/238 +f 4271/625/239 4273/626/239 4275/627/239 +f 4282/628/238 4284/629/238 4288/630/238 +f 4293/631/239 4295/632/239 4299/633/239 +f 4306/634/238 4308/635/238 4312/636/238 +f 4319/637/239 4323/638/239 4315/639/239 +f 4332/640/239 4334/641/239 4331/642/239 +f 4330/643/243 4333/644/243 4328/645/243 +f 4327/646/241 4331/642/241 4329/647/241 +f 4329/648/242 4334/641/242 4330/649/242 +f 4328/650/240 4332/640/240 4327/651/240 +f 4341/652/239 4339/653/239 4340/654/239 +f 4338/655/243 4341/652/243 4336/656/243 +f 4335/657/241 4339/653/241 4337/658/241 +f 4337/659/242 4342/660/242 4338/661/242 +f 4336/662/240 4340/654/240 4335/663/240 +f 4349/664/239 4347/665/239 4348/666/239 +f 4346/667/243 4349/664/243 4344/668/243 +f 4343/669/241 4347/665/241 4345/670/241 +f 4345/671/242 4350/672/242 4346/673/242 +f 4344/674/240 4348/666/240 4343/675/240 +f 4357/676/239 4355/677/239 4356/678/239 +f 4354/679/243 4357/676/243 4352/680/243 +f 4351/681/241 4355/677/241 4353/682/241 +f 4353/683/242 4358/684/242 4354/685/242 +f 4352/686/240 4356/678/240 4351/687/240 +f 4365/688/239 4363/689/239 4364/690/239 +f 4362/691/243 4365/688/243 4360/692/243 +f 4359/693/241 4363/689/241 4361/694/241 +f 4361/695/242 4366/696/242 4362/697/242 +f 4360/698/240 4364/690/240 4359/699/240 +f 4372/700/239 4374/701/239 4371/702/239 +f 4370/703/243 4373/704/243 4368/705/243 +f 4367/706/241 4371/702/241 4369/707/241 +f 4369/708/242 4374/701/242 4370/709/242 +f 4368/710/240 4372/700/240 4367/711/240 +f 4381/712/239 4379/713/239 4380/714/239 +f 4378/715/243 4381/712/243 4376/716/243 +f 4375/717/241 4379/713/241 4377/718/241 +f 4377/719/242 4382/720/242 4378/721/242 +f 4376/722/240 4380/714/240 4375/723/240 +f 4389/724/239 4387/725/239 4388/726/239 +f 4386/727/243 4389/724/243 4384/728/243 +f 4383/729/241 4387/725/241 4385/730/241 +f 4385/731/242 4390/732/242 4386/733/242 +f 4384/734/240 4388/726/240 4383/735/240 +f 4397/736/239 4395/737/239 4396/738/239 +f 4394/739/243 4397/736/243 4392/740/243 +f 4391/741/241 4395/737/241 4393/742/241 +f 4393/743/242 4398/744/242 4394/745/242 +f 4392/746/240 4396/738/240 4391/747/240 +f 4405/748/239 4403/749/239 4404/750/239 +f 4402/751/243 4405/748/243 4400/752/243 +f 4399/753/241 4403/749/241 4401/754/241 +f 4401/755/242 4406/756/242 4402/757/242 +f 4400/758/240 4404/750/240 4399/759/240 +f 4413/760/239 4411/761/239 4412/762/239 +f 4410/763/243 4413/760/243 4408/764/243 +f 4407/765/241 4411/761/241 4409/766/241 +f 4409/767/242 4414/768/242 4410/769/242 +f 4408/770/240 4412/762/240 4407/771/240 +f 4420/772/239 4422/773/239 4419/774/239 +f 4418/775/243 4421/776/243 4416/777/243 +f 4415/778/241 4419/774/241 4417/779/241 +f 4417/780/242 4422/773/242 4418/781/242 +f 4416/782/240 4420/772/240 4415/783/240 +f 4429/784/239 4427/785/239 4428/786/239 +f 4426/787/243 4429/784/243 4424/788/243 +f 4423/789/241 4427/785/241 4425/790/241 +f 4425/791/242 4430/792/242 4426/793/242 +f 4424/794/240 4428/786/240 4423/795/240 +f 4437/796/239 4435/797/239 4436/798/239 +f 4434/799/243 4437/796/243 4432/800/243 +f 4431/801/241 4435/797/241 4433/802/241 +f 4433/803/242 4438/804/242 4434/805/242 +f 4432/806/240 4436/798/240 4431/807/240 +f 4444/808/239 4446/809/239 4443/810/239 +f 4442/811/243 4445/812/243 4440/813/243 +f 4439/814/241 4443/810/241 4441/815/241 +f 4441/816/242 4446/809/242 4442/817/242 +f 4440/818/240 4444/808/240 4439/819/240 +f 4453/820/239 4451/821/239 4452/822/239 +f 4450/823/243 4453/820/243 4448/824/243 +f 4447/825/241 4451/821/241 4449/826/241 +f 4449/827/242 4454/828/242 4450/829/242 +f 4448/830/240 4452/822/240 4447/831/240 +f 4461/832/239 4459/833/239 4460/834/239 +f 4458/835/243 4461/832/243 4456/836/243 +f 4455/837/241 4459/833/241 4457/838/241 +f 4457/839/242 4462/840/242 4458/841/242 +f 4456/842/240 4460/834/240 4455/843/240 +f 4469/844/239 4467/845/239 4468/846/239 +f 4466/847/243 4469/844/243 4464/848/243 +f 4463/849/241 4467/845/241 4465/850/241 +f 4465/851/242 4470/852/242 4466/853/242 +f 4464/854/240 4468/846/240 4463/855/240 +f 5089/856/242 5088/857/242 5087/858/242 +f 5091/859/239 5102/860/239 5094/861/239 +f 5090/862/243 5097/863/243 5088/857/243 +f 5087/858/241 5095/864/241 5089/856/241 +f 5089/856/239 5098/865/239 5090/862/239 +f 5088/857/238 5096/866/238 5087/858/238 +f 5091/867/240 5096/868/240 5092/869/240 +f 5092/870/240 5097/871/240 5093/872/240 +f 5093/873/240 5098/874/240 5094/875/240 +f 5094/861/240 5095/876/240 5091/859/240 +f 5093/872/238 5100/877/238 5092/870/238 +f 5094/875/243 5101/878/243 5093/873/243 +f 5092/869/241 5099/879/241 5091/867/241 +f 5105/880/242 5104/881/242 5103/882/242 +f 5107/883/239 5118/884/239 5110/885/239 +f 5106/886/243 5113/887/243 5104/881/243 +f 5103/882/241 5111/888/241 5105/880/241 +f 5105/880/239 5114/889/239 5106/886/239 +f 5104/881/238 5112/890/238 5103/882/238 +f 5107/891/240 5112/892/240 5108/893/240 +f 5108/894/240 5113/895/240 5109/896/240 +f 5109/897/240 5114/898/240 5110/899/240 +f 5110/885/240 5111/900/240 5107/883/240 +f 5109/896/238 5116/901/238 5108/894/238 +f 5110/899/243 5117/902/243 5109/897/243 +f 5108/893/241 5115/903/241 5107/891/241 +f 5121/904/242 5120/905/242 5119/906/242 +f 5123/907/239 5134/908/239 5126/909/239 +f 5122/910/243 5129/911/243 5120/905/243 +f 5119/906/241 5127/912/241 5121/904/241 +f 5121/904/239 5130/913/239 5122/910/239 +f 5120/905/238 5128/914/238 5119/906/238 +f 5123/915/240 5128/916/240 5124/917/240 +f 5124/918/240 5129/919/240 5125/920/240 +f 5125/921/240 5130/922/240 5126/923/240 +f 5126/909/240 5127/924/240 5123/907/240 +f 5125/920/238 5132/925/238 5124/918/238 +f 5126/923/243 5133/926/243 5125/921/243 +f 5124/917/241 5131/927/241 5123/915/241 +f 5137/928/242 5136/929/242 5135/930/242 +f 5139/931/239 5150/932/239 5142/933/239 +f 5138/934/243 5145/935/243 5136/929/243 +f 5135/930/241 5143/936/241 5137/928/241 +f 5137/928/239 5146/937/239 5138/934/239 +f 5136/929/238 5144/938/238 5135/930/238 +f 5139/939/240 5144/940/240 5140/941/240 +f 5140/942/240 5145/943/240 5141/944/240 +f 5141/945/240 5146/946/240 5142/947/240 +f 5142/933/240 5143/948/240 5139/931/240 +f 5141/944/238 5148/949/238 5140/942/238 +f 5142/947/243 5149/950/243 5141/945/243 +f 5140/941/241 5147/951/241 5139/939/241 +f 5153/952/240 5152/953/240 5151/954/240 +f 5155/955/239 5166/956/239 5158/957/239 +f 5154/958/241 5161/959/241 5152/953/241 +f 5151/954/243 5159/960/243 5153/952/243 +f 5154/958/239 5159/961/239 5162/962/239 +f 5152/953/238 5160/963/238 5151/954/238 +f 5155/964/242 5160/965/242 5156/966/242 +f 5156/967/242 5161/968/242 5157/969/242 +f 5157/970/242 5162/971/242 5158/972/242 +f 5158/957/242 5159/961/242 5155/955/242 +f 5157/969/238 5164/973/238 5156/967/238 +f 5158/972/241 5165/974/241 5157/970/241 +f 5156/966/243 5163/975/243 5155/964/243 +f 5169/976/240 5168/977/240 5167/978/240 +f 5171/979/239 5182/980/239 5174/981/239 +f 5170/982/241 5177/983/241 5168/977/241 +f 5167/978/243 5175/984/243 5169/976/243 +f 5169/976/239 5178/985/239 5170/982/239 +f 5168/977/238 5176/986/238 5167/978/238 +f 5171/987/242 5176/988/242 5172/989/242 +f 5172/990/242 5177/991/242 5173/992/242 +f 5173/993/242 5178/994/242 5174/995/242 +f 5174/981/242 5175/996/242 5171/979/242 +f 5173/992/238 5180/997/238 5172/990/238 +f 5174/995/241 5181/998/241 5173/993/241 +f 5172/989/243 5179/999/243 5171/987/243 +f 5185/1000/240 5184/1001/240 5183/1002/240 +f 5187/1003/239 5198/1004/239 5190/1005/239 +f 5186/1006/241 5193/1007/241 5184/1001/241 +f 5183/1002/243 5191/1008/243 5185/1000/243 +f 5185/1000/239 5194/1009/239 5186/1006/239 +f 5184/1001/238 5192/1010/238 5183/1002/238 +f 5187/1011/242 5192/1012/242 5188/1013/242 +f 5188/1014/242 5193/1015/242 5189/1016/242 +f 5189/1017/242 5194/1018/242 5190/1019/242 +f 5190/1005/242 5191/1020/242 5187/1003/242 +f 5189/1016/238 5196/1021/238 5188/1014/238 +f 5190/1019/241 5197/1022/241 5189/1017/241 +f 5188/1013/243 5195/1023/243 5187/1011/243 +f 5201/1024/240 5200/1025/240 5199/1026/240 +f 5203/1027/239 5214/1028/239 5206/1029/239 +f 5202/1030/241 5209/1031/241 5200/1025/241 +f 5199/1026/243 5207/1032/243 5201/1024/243 +f 5201/1024/239 5210/1033/239 5202/1030/239 +f 5200/1025/238 5208/1034/238 5199/1026/238 +f 5203/1035/242 5208/1036/242 5204/1037/242 +f 5204/1038/242 5209/1039/242 5205/1040/242 +f 5205/1041/242 5210/1042/242 5206/1043/242 +f 5206/1029/242 5207/1044/242 5203/1027/242 +f 5205/1040/238 5212/1045/238 5204/1038/238 +f 5206/1043/241 5213/1046/241 5205/1041/241 +f 5204/1037/243 5211/1047/243 5203/1035/243 +f 5217/1048/240 5216/1049/240 5215/1050/240 +f 5219/1051/239 5230/1052/239 5222/1053/239 +f 5218/1054/241 5225/1055/241 5216/1049/241 +f 5215/1050/243 5223/1056/243 5217/1048/243 +f 5217/1048/239 5226/1057/239 5218/1054/239 +f 5216/1049/238 5224/1058/238 5215/1050/238 +f 5219/1059/242 5224/1060/242 5220/1061/242 +f 5220/1062/242 5225/1063/242 5221/1064/242 +f 5221/1065/242 5226/1066/242 5222/1067/242 +f 5222/1053/242 5223/1068/242 5219/1051/242 +f 5221/1064/238 5228/1069/238 5220/1062/238 +f 5222/1067/241 5229/1070/241 5221/1065/241 +f 5220/1061/243 5227/1071/243 5219/1059/243 +f 5233/1072/241 5232/1073/241 5231/1074/241 +f 5235/1075/239 5246/1076/239 5238/1077/239 +f 5234/1078/242 5241/1079/242 5232/1073/242 +f 5231/1074/240 5239/1080/240 5233/1072/240 +f 5233/1072/239 5242/1081/239 5234/1078/239 +f 5232/1073/238 5240/1082/238 5231/1074/238 +f 5235/1083/243 5240/1084/243 5236/1085/243 +f 5236/1086/243 5241/1087/243 5237/1088/243 +f 5237/1089/243 5242/1090/243 5238/1091/243 +f 5238/1077/243 5239/1092/243 5235/1075/243 +f 5237/1088/238 5244/1093/238 5236/1086/238 +f 5238/1091/242 5245/1094/242 5237/1089/242 +f 5236/1085/240 5243/1095/240 5235/1083/240 +f 5249/1096/241 5248/1097/241 5247/1098/241 +f 5251/1099/239 5262/1100/239 5254/1101/239 +f 5250/1102/242 5257/1103/242 5248/1097/242 +f 5247/1098/240 5255/1104/240 5249/1096/240 +f 5249/1096/239 5258/1105/239 5250/1102/239 +f 5248/1097/238 5256/1106/238 5247/1098/238 +f 5251/1107/243 5256/1108/243 5252/1109/243 +f 5252/1110/243 5257/1111/243 5253/1112/243 +f 5253/1113/243 5258/1114/243 5254/1115/243 +f 5254/1101/243 5255/1116/243 5251/1099/243 +f 5253/1112/238 5260/1117/238 5252/1110/238 +f 5254/1115/242 5261/1118/242 5253/1113/242 +f 5252/1109/240 5259/1119/240 5251/1107/240 +f 5265/1120/241 5264/1121/241 5263/1122/241 +f 5267/1123/239 5278/1124/239 5270/1125/239 +f 5266/1126/242 5273/1127/242 5264/1121/242 +f 5263/1122/240 5271/1128/240 5265/1120/240 +f 5265/1120/239 5274/1129/239 5266/1126/239 +f 5264/1121/238 5272/1130/238 5263/1122/238 +f 5267/1131/243 5272/1132/243 5268/1133/243 +f 5268/1134/243 5273/1135/243 5269/1136/243 +f 5269/1137/243 5274/1138/243 5270/1139/243 +f 5270/1125/243 5271/1140/243 5267/1123/243 +f 5269/1136/238 5276/1141/238 5268/1134/238 +f 5270/1139/242 5277/1142/242 5269/1137/242 +f 5268/1133/240 5275/1143/240 5267/1131/240 +f 5281/1144/241 5280/1145/241 5279/1146/241 +f 5283/1147/239 5294/1148/239 5286/1149/239 +f 5282/1150/242 5289/1151/242 5280/1145/242 +f 5279/1146/240 5287/1152/240 5281/1144/240 +f 5281/1144/239 5290/1153/239 5282/1150/239 +f 5280/1145/238 5288/1154/238 5279/1146/238 +f 5283/1155/243 5288/1156/243 5284/1157/243 +f 5284/1158/243 5289/1159/243 5285/1160/243 +f 5285/1161/243 5290/1162/243 5286/1163/243 +f 5286/1149/243 5287/1164/243 5283/1147/243 +f 5285/1160/238 5292/1165/238 5284/1158/238 +f 5286/1163/242 5293/1166/242 5285/1161/242 +f 5284/1157/240 5291/1167/240 5283/1155/240 +f 5297/1168/241 5296/1169/241 5295/1170/241 +f 5299/1171/239 5310/1172/239 5302/1173/239 +f 5298/1174/242 5305/1175/242 5296/1169/242 +f 5295/1170/240 5303/1176/240 5297/1168/240 +f 5297/1168/239 5306/1177/239 5298/1174/239 +f 5296/1169/238 5304/1178/238 5295/1170/238 +f 5299/1179/243 5304/1180/243 5300/1181/243 +f 5300/1182/243 5305/1183/243 5301/1184/243 +f 5301/1185/243 5306/1186/243 5302/1187/243 +f 5302/1173/243 5303/1188/243 5299/1171/243 +f 5301/1184/238 5308/1189/238 5300/1182/238 +f 5302/1187/242 5309/1190/242 5301/1185/242 +f 5300/1181/240 5307/1191/240 5299/1179/240 +f 5313/1192/243 5312/1193/243 5311/1194/243 +f 5315/1195/239 5326/1196/239 5318/1197/239 +f 5314/1198/240 5321/1199/240 5312/1193/240 +f 5311/1194/242 5319/1200/242 5313/1192/242 +f 5313/1192/239 5322/1201/239 5314/1198/239 +f 5312/1193/238 5320/1202/238 5311/1194/238 +f 5315/1203/241 5320/1204/241 5316/1205/241 +f 5316/1206/241 5321/1207/241 5317/1208/241 +f 5317/1209/241 5322/1210/241 5318/1211/241 +f 5318/1197/241 5319/1212/241 5315/1195/241 +f 5317/1208/238 5324/1213/238 5316/1206/238 +f 5318/1211/240 5325/1214/240 5317/1209/240 +f 5316/1205/242 5323/1215/242 5315/1203/242 +f 5329/1216/243 5328/1217/243 5327/1218/243 +f 5331/1219/239 5342/1220/239 5334/1221/239 +f 5330/1222/240 5337/1223/240 5328/1217/240 +f 5327/1218/242 5335/1224/242 5329/1216/242 +f 5329/1216/239 5338/1225/239 5330/1222/239 +f 5328/1217/238 5336/1226/238 5327/1218/238 +f 5331/1227/241 5336/1228/241 5332/1229/241 +f 5332/1230/241 5337/1231/241 5333/1232/241 +f 5333/1233/241 5338/1234/241 5334/1235/241 +f 5334/1221/241 5335/1236/241 5331/1219/241 +f 5333/1232/238 5340/1237/238 5332/1230/238 +f 5334/1235/240 5341/1238/240 5333/1233/240 +f 5332/1229/242 5339/1239/242 5331/1227/242 +f 5345/1240/243 5344/1241/243 5343/1242/243 +f 5350/1243/239 5355/1244/239 5358/1245/239 +f 5346/1246/240 5353/1247/240 5344/1241/240 +f 5343/1242/242 5351/1248/242 5345/1240/242 +f 5346/1246/239 5351/1249/239 5354/1250/239 +f 5344/1241/238 5352/1251/238 5343/1242/238 +f 5347/1252/241 5352/1253/241 5348/1254/241 +f 5348/1255/241 5353/1256/241 5349/1257/241 +f 5349/1258/241 5354/1259/241 5350/1260/241 +f 5350/1243/241 5351/1249/241 5347/1261/241 +f 5349/1257/238 5356/1262/238 5348/1255/238 +f 5350/1260/240 5357/1263/240 5349/1258/240 +f 5348/1254/242 5355/1264/242 5347/1252/242 +f 5361/1265/243 5360/1266/243 5359/1267/243 +f 5363/1268/239 5374/1269/239 5366/1270/239 +f 5362/1271/240 5369/1272/240 5360/1266/240 +f 5359/1267/242 5367/1273/242 5361/1265/242 +f 5361/1265/239 5370/1274/239 5362/1271/239 +f 5360/1266/238 5368/1275/238 5359/1267/238 +f 5363/1276/241 5368/1277/241 5364/1278/241 +f 5364/1279/241 5369/1280/241 5365/1281/241 +f 5365/1282/241 5370/1283/241 5366/1284/241 +f 5366/1270/241 5367/1285/241 5363/1268/241 +f 5365/1281/238 5372/1286/238 5364/1279/238 +f 5366/1284/240 5373/1287/240 5365/1282/240 +f 5364/1278/242 5371/1288/242 5363/1276/242 +f 5377/1289/243 5376/1290/243 5375/1291/243 +f 5379/1292/239 5390/1293/239 5382/1294/239 +f 5378/1295/240 5385/1296/240 5376/1290/240 +f 5375/1291/242 5383/1297/242 5377/1289/242 +f 5377/1289/239 5386/1298/239 5378/1295/239 +f 5376/1290/238 5384/1299/238 5375/1291/238 +f 5379/1300/241 5384/1301/241 5380/1302/241 +f 5380/1303/241 5385/1304/241 5381/1305/241 +f 5381/1306/241 5386/1307/241 5382/1308/241 +f 5382/1294/241 5383/1309/241 5379/1292/241 +f 5381/1305/238 5388/1310/238 5380/1303/238 +f 5382/1308/240 5389/1311/240 5381/1306/240 +f 5380/1302/242 5387/1312/242 5379/1300/242 +f 3024/207/238 3023/256/238 3025/208/238 +f 3027/210/238 3029/1313/238 3030/211/238 +f 3034/213/239 3033/1314/239 3031/214/239 +f 3027/216/240 3031/220/240 3033/217/240 +f 3029/218/241 3033/217/241 3034/213/241 +f 3030/211/242 3034/213/242 3032/215/242 +f 3028/219/243 3032/1315/243 3031/220/243 +f 3035/221/238 3037/1316/238 3038/222/238 +f 3042/224/239 3041/1317/239 3039/225/239 +f 3035/227/240 3039/231/240 3041/228/240 +f 3037/229/241 3041/228/241 3042/224/241 +f 3038/222/242 3042/224/242 3040/226/242 +f 3036/230/243 3040/1318/243 3039/231/243 +f 3043/232/238 3045/1319/238 3046/233/238 +f 3050/235/239 3049/1320/239 3047/236/239 +f 3043/238/240 3047/242/240 3049/239/240 +f 3045/240/241 3049/239/241 3050/235/241 +f 3046/233/242 3050/235/242 3048/237/242 +f 3044/241/243 3048/1321/243 3047/242/243 +f 3051/243/238 3053/1322/238 3054/244/238 +f 3058/246/239 3057/1323/239 3055/247/239 +f 3051/249/240 3055/253/240 3057/250/240 +f 3053/251/241 3057/250/241 3058/246/241 +f 3054/244/242 3058/246/242 3056/248/242 +f 3052/252/243 3056/1324/243 3055/253/243 +f 3061/254/243 3062/257/243 3026/209/243 +f 3059/255/241 3060/1325/241 3023/256/241 +f 3062/257/239 3061/254/239 3060/258/239 +f 3063/260/238 3064/265/238 3065/261/238 +f 3069/263/241 3070/266/241 3066/262/241 +f 3067/264/243 3068/1326/243 3064/265/243 +f 3070/266/239 3069/263/239 3068/267/239 +f 3071/269/238 3072/274/238 3073/270/238 +f 3077/272/242 3078/275/242 3074/271/242 +f 3075/273/240 3076/1327/240 3072/274/240 +f 3078/275/239 3077/272/239 3076/276/239 +f 3079/278/238 3080/283/238 3081/279/238 +f 3085/281/240 3086/284/240 3082/280/240 +f 3083/282/242 3084/1328/242 3080/283/242 +f 3086/284/239 3085/281/239 3084/285/239 +f 3091/287/242 3087/294/242 3088/288/242 +f 3093/290/243 3088/288/243 3089/291/243 +f 3092/293/241 3090/297/241 3087/294/241 +f 3094/296/240 3089/291/240 3090/297/240 +f 3088/288/239 3087/294/239 3090/297/239 +f 3092/299/238 3091/287/238 3093/289/238 +f 3099/301/242 3095/308/242 3096/302/242 +f 3101/304/243 3096/302/243 3097/305/243 +f 3100/307/241 3098/311/241 3095/308/241 +f 3102/310/240 3097/305/240 3098/311/240 +f 3096/302/239 3095/308/239 3098/311/239 +f 3100/313/238 3099/301/238 3101/303/238 +f 3105/315/238 3106/328/238 3104/316/238 +f 3109/318/239 3110/324/239 3107/319/239 +f 3103/321/240 3108/320/240 3107/319/240 +f 3105/323/241 3107/319/241 3110/324/241 +f 3104/326/243 3109/318/243 3108/320/243 +f 3106/328/242 3110/324/242 3109/318/242 +f 3115/329/242 3111/336/242 3112/330/242 +f 3117/332/243 3112/330/243 3113/333/243 +f 3116/335/241 3114/339/241 3111/336/241 +f 3118/338/240 3113/333/240 3114/339/240 +f 3112/330/239 3111/336/239 3114/339/239 +f 3116/341/238 3115/329/238 3117/331/238 +f 3121/343/238 3122/356/238 3120/344/238 +f 3125/346/239 3126/352/239 3123/347/239 +f 3119/349/240 3124/348/240 3123/347/240 +f 3121/351/241 3123/347/241 3126/352/241 +f 3120/354/243 3125/346/243 3124/348/243 +f 3122/356/242 3126/352/242 3125/346/242 +f 3129/357/242 3130/363/242 3128/358/242 +f 3131/360/239 3139/1329/239 3142/361/239 +f 3130/363/243 3138/375/243 3137/364/243 +f 3127/359/241 3136/369/241 3135/365/241 +f 3129/357/239 3135/377/239 3138/366/239 +f 3128/358/238 3137/372/238 3136/367/238 +f 3131/368/240 3135/365/240 3136/369/240 +f 3132/371/240 3136/367/240 3137/372/240 +f 3133/374/240 3137/364/240 3138/375/240 +f 3134/362/240 3138/366/240 3135/377/240 +f 3133/373/238 3141/1330/238 3140/378/238 +f 3134/376/243 3142/1331/243 3141/379/243 +f 3132/370/241 3140/1332/241 3139/380/241 +f 3152/383/238 3154/1333/238 3153/1334/238 +f 3153/1334/238 3143/1335/238 3152/383/238 +f 3143/1335/238 3144/1336/238 3152/383/238 +f 3144/1336/238 3145/1337/238 3146/381/238 +f 3146/381/238 3147/1338/238 3148/382/238 +f 3148/382/238 3149/1339/238 3150/1340/238 +f 3150/1340/238 3151/1341/238 3148/382/238 +f 3151/1341/238 3152/383/238 3148/382/238 +f 3144/1336/238 3146/381/238 3152/383/238 +f 3656/1342/239 3657/1343/239 3658/384/239 +f 3658/384/239 3659/1344/239 3660/385/239 +f 3660/385/239 3661/1345/239 3664/386/239 +f 3661/1345/239 3662/1346/239 3664/386/239 +f 3662/1346/239 3663/1347/239 3664/386/239 +f 3664/386/239 3665/1348/239 3666/1349/239 +f 3666/1349/239 3667/1350/239 3664/386/239 +f 3667/1350/239 3656/1342/239 3664/386/239 +f 3656/1342/239 3658/384/239 3664/386/239 +f 3157/387/238 3158/390/238 3156/388/238 +f 3158/390/243 3162/396/243 3161/391/243 +f 3155/389/241 3160/1351/241 3159/392/241 +f 3157/387/242 3159/1352/242 3162/393/242 +f 3156/388/240 3161/1353/240 3160/394/240 +f 3160/395/239 3161/391/239 3162/396/239 +f 3165/398/238 3166/401/238 3164/399/238 +f 3166/401/243 3170/407/243 3169/402/243 +f 3163/400/241 3168/1354/241 3167/403/241 +f 3165/398/242 3167/1355/242 3170/404/242 +f 3164/399/240 3169/1356/240 3168/405/240 +f 3168/406/239 3169/402/239 3170/407/239 +f 3173/409/238 3174/412/238 3172/410/238 +f 3174/412/243 3178/418/243 3177/413/243 +f 3171/411/241 3176/1357/241 3175/414/241 +f 3173/409/242 3175/1358/242 3178/415/242 +f 3172/410/240 3177/1359/240 3176/416/240 +f 3181/417/239 3182/426/239 3178/418/239 +f 3182/420/243 3186/432/243 3185/421/243 +f 3179/423/239 3181/417/239 3175/419/239 +f 3180/425/239 3179/423/239 3176/424/239 +f 3182/426/239 3180/425/239 3177/413/239 +f 3185/421/239 3186/432/239 3183/427/239 +f 3179/429/241 3184/428/241 3183/427/241 +f 3181/431/242 3183/427/242 3186/432/242 +f 3180/434/240 3185/421/240 3184/428/240 +f 3193/436/239 3194/446/239 3191/437/239 +f 3188/439/240 3193/436/240 3192/438/240 +f 3190/441/243 3194/446/243 3193/436/243 +f 3187/443/241 3192/438/241 3191/437/241 +f 3189/445/242 3191/437/242 3194/446/242 +f 3212/448/239 3211/480/239 3228/449/239 +f 3213/451/239 3212/448/239 3227/450/239 +f 3213/451/239 3229/452/239 3230/453/239 +f 3215/455/239 3214/454/239 3230/453/239 +f 3215/455/239 3231/456/239 3232/457/239 +f 3216/458/239 3232/457/239 3233/459/239 +f 3218/461/239 3217/460/239 3233/459/239 +f 3219/463/239 3218/461/239 3234/462/239 +f 3220/465/239 3219/1360/239 3235/466/239 +f 3221/468/239 3220/465/239 3236/467/239 +f 3222/470/239 3221/468/239 3237/469/239 +f 3223/472/239 3222/470/239 3238/471/239 +f 3223/472/239 3239/473/239 3240/474/239 +f 3224/475/239 3240/474/239 3241/476/239 +f 3226/478/239 3225/477/239 3241/476/239 +f 3211/480/239 3226/478/239 3242/479/239 +f 3260/481/239 3262/1361/239 3261/482/239 +f 3264/484/239 3266/1362/239 3265/485/239 +f 3268/487/239 3270/1363/239 3269/488/239 +f 3273/490/239 3271/1364/239 3272/491/239 +f 3276/493/239 3278/1365/239 3277/494/239 +f 3280/496/239 3282/1366/239 3281/497/239 +f 3289/499/239 3290/509/239 3287/500/239 +f 3284/502/240 3289/499/240 3288/501/240 +f 3286/504/243 3290/509/243 3289/499/243 +f 3283/506/241 3288/501/241 3287/500/241 +f 3285/508/242 3287/500/242 3290/509/242 +f 3319/511/239 3321/1367/239 3320/512/239 +f 3323/514/239 3325/1368/239 3324/515/239 +f 3327/517/239 3329/1369/239 3328/518/239 +f 3332/520/239 3330/1370/239 3331/521/239 +f 3335/523/239 3337/1371/239 3336/524/239 +f 3339/526/239 3341/1372/239 3340/527/239 +f 3402/529/239 3403/537/239 3400/530/239 +f 3399/532/243 3403/537/243 3402/529/243 +f 3396/534/241 3401/531/241 3400/530/241 +f 3398/536/242 3400/530/242 3403/537/242 +f 3397/539/240 3402/529/240 3401/531/240 +f 3654/541/239 3655/549/239 3652/542/239 +f 3651/544/243 3655/549/243 3654/541/243 +f 3648/546/241 3653/543/241 3652/542/241 +f 3650/548/242 3652/542/242 3655/549/242 +f 3649/551/240 3654/541/240 3653/543/240 +f 3300/553/239 3301/585/239 4080/554/239 +f 3299/556/239 3300/553/239 4079/555/239 +f 3299/556/239 4081/557/239 4082/558/239 +f 3297/560/239 3298/559/239 4082/558/239 +f 3297/560/239 4083/561/239 4084/562/239 +f 3295/564/239 3296/563/239 4084/562/239 +f 3294/566/239 3295/564/239 4085/565/239 +f 3293/568/239 3294/566/239 4086/567/239 +f 3292/570/239 3293/1373/239 4087/571/239 +f 3291/573/239 3292/570/239 4088/572/239 +f 4074/575/239 3291/573/239 4089/574/239 +f 4075/577/239 4074/575/239 4090/576/239 +f 4075/577/239 4091/578/239 4092/579/239 +f 4076/580/239 4092/579/239 4093/581/239 +f 4078/583/239 4077/582/239 4093/581/239 +f 3301/585/239 4078/583/239 4094/584/239 +f 4120/588/238 4122/1374/238 4121/1375/238 +f 4121/1375/238 4111/1376/238 4120/588/238 +f 4111/1376/238 4112/1377/238 4120/588/238 +f 4112/1377/238 4113/1378/238 4114/586/238 +f 4114/586/238 4115/1379/238 4116/587/238 +f 4116/587/238 4117/1380/238 4120/588/238 +f 4117/1380/238 4118/1381/238 4120/588/238 +f 4118/1381/238 4119/1382/238 4120/588/238 +f 4112/1377/238 4114/586/238 4120/588/238 +f 4123/1383/239 4124/1384/239 4125/1385/239 +f 4125/1385/239 4126/1386/239 4127/589/239 +f 4127/589/239 4128/1387/239 4129/590/239 +f 4129/590/239 4130/1388/239 4131/591/239 +f 4131/591/239 4132/1389/239 4133/1390/239 +f 4133/1390/239 4134/1391/239 4131/591/239 +f 4134/1391/239 4123/1383/239 4131/591/239 +f 4123/1383/239 4125/1385/239 4131/591/239 +f 4125/1385/239 4127/589/239 4131/591/239 +f 4144/594/238 4146/1392/238 4145/1393/238 +f 4145/1393/238 4135/1394/238 4144/594/238 +f 4135/1394/238 4136/1395/238 4144/594/238 +f 4136/1395/238 4137/1396/238 4138/592/238 +f 4138/592/238 4139/1397/238 4140/593/238 +f 4140/593/238 4141/1398/238 4142/1399/238 +f 4142/1399/238 4143/1400/238 4140/593/238 +f 4143/1400/238 4144/594/238 4140/593/238 +f 4136/1395/238 4138/592/238 4144/594/238 +f 4147/597/239 4148/1401/239 4149/1402/239 +f 4149/1402/239 4150/1403/239 4151/595/239 +f 4151/595/239 4152/1404/239 4153/1405/239 +f 4153/1405/239 4154/1406/239 4155/596/239 +f 4155/596/239 4156/1407/239 4157/1408/239 +f 4157/1408/239 4158/1409/239 4155/596/239 +f 4158/1409/239 4147/597/239 4155/596/239 +f 4147/597/239 4149/1402/239 4151/595/239 +f 4151/595/239 4153/1405/239 4155/596/239 +f 4168/600/238 4170/1410/238 4169/1411/238 +f 4169/1411/238 4159/1412/238 4168/600/238 +f 4159/1412/238 4160/1413/238 4168/600/238 +f 4160/1413/238 4161/1414/238 4162/1415/238 +f 4162/1415/238 4163/1416/238 4164/598/238 +f 4164/598/238 4165/1417/238 4166/599/238 +f 4166/599/238 4167/1418/238 4168/600/238 +f 4160/1413/238 4162/1415/238 4168/600/238 +f 4162/1415/238 4164/598/238 4168/600/238 +f 4171/1419/239 4172/1420/239 4173/1421/239 +f 4173/1421/239 4174/1422/239 4175/601/239 +f 4175/601/239 4176/1423/239 4177/602/239 +f 4177/602/239 4178/1424/239 4179/603/239 +f 4179/603/239 4180/1425/239 4181/1426/239 +f 4181/1426/239 4182/1427/239 4179/603/239 +f 4182/1427/239 4171/1419/239 4179/603/239 +f 4171/1419/239 4173/1421/239 4179/603/239 +f 4173/1421/239 4175/601/239 4179/603/239 +f 4192/606/238 4194/1428/238 4193/1429/238 +f 4193/1429/238 4183/1430/238 4192/606/238 +f 4183/1430/238 4184/1431/238 4192/606/238 +f 4184/1431/238 4185/1432/238 4186/1433/238 +f 4186/1433/238 4187/1434/238 4188/604/238 +f 4188/604/238 4189/1435/238 4190/605/238 +f 4190/605/238 4191/1436/238 4192/606/238 +f 4184/1431/238 4186/1433/238 4192/606/238 +f 4186/1433/238 4188/604/238 4192/606/238 +f 4195/1437/239 4196/1438/239 4197/1439/239 +f 4197/1439/239 4198/1440/239 4199/607/239 +f 4199/607/239 4200/1441/239 4201/608/239 +f 4201/608/239 4202/1442/239 4203/609/239 +f 4203/609/239 4204/1443/239 4205/1444/239 +f 4205/1444/239 4206/1445/239 4203/609/239 +f 4206/1445/239 4195/1437/239 4203/609/239 +f 4195/1437/239 4197/1439/239 4203/609/239 +f 4197/1439/239 4199/607/239 4203/609/239 +f 4216/612/238 4218/1446/238 4217/1447/238 +f 4217/1447/238 4207/1448/238 4216/612/238 +f 4207/1448/238 4208/1449/238 4216/612/238 +f 4208/1449/238 4209/1450/238 4210/610/238 +f 4210/610/238 4211/1451/238 4212/611/238 +f 4212/611/238 4213/1452/238 4214/1453/238 +f 4214/1453/238 4215/1454/238 4212/611/238 +f 4215/1454/238 4216/612/238 4212/611/238 +f 4208/1449/238 4210/610/238 4216/612/238 +f 4219/615/239 4220/1455/239 4221/1456/239 +f 4221/1456/239 4222/1457/239 4219/615/239 +f 4222/1457/239 4223/613/239 4219/615/239 +f 4223/613/239 4224/1458/239 4225/1459/239 +f 4225/1459/239 4226/1460/239 4223/613/239 +f 4226/1460/239 4227/614/239 4223/613/239 +f 4227/614/239 4228/1461/239 4229/1462/239 +f 4229/1462/239 4230/1463/239 4227/614/239 +f 4230/1463/239 4219/615/239 4227/614/239 +f 4240/618/238 4242/1464/238 4241/1465/238 +f 4241/1465/238 4231/1466/238 4240/618/238 +f 4231/1466/238 4232/1467/238 4240/618/238 +f 4232/1467/238 4233/1468/238 4234/616/238 +f 4234/616/238 4235/1469/238 4236/617/238 +f 4236/617/238 4237/1470/238 4240/618/238 +f 4237/1470/238 4238/1471/238 4240/618/238 +f 4238/1471/238 4239/1472/238 4240/618/238 +f 4232/1467/238 4234/616/238 4240/618/238 +f 4243/621/239 4244/1473/239 4247/619/239 +f 4244/1473/239 4245/1474/239 4247/619/239 +f 4245/1474/239 4246/1475/239 4247/619/239 +f 4247/619/239 4248/1476/239 4251/620/239 +f 4248/1476/239 4249/1477/239 4251/620/239 +f 4249/1477/239 4250/1478/239 4251/620/239 +f 4251/620/239 4252/1479/239 4253/1480/239 +f 4253/1480/239 4254/1481/239 4251/620/239 +f 4254/1481/239 4243/621/239 4251/620/239 +f 4264/624/238 4266/1482/238 4265/1483/238 +f 4265/1483/238 4255/1484/238 4264/624/238 +f 4255/1484/238 4256/1485/238 4264/624/238 +f 4256/1485/238 4257/1486/238 4258/622/238 +f 4258/622/238 4259/1487/238 4260/623/238 +f 4260/623/238 4261/1488/238 4262/1489/238 +f 4262/1489/238 4263/1490/238 4260/623/238 +f 4263/1490/238 4264/624/238 4260/623/238 +f 4256/1485/238 4258/622/238 4264/624/238 +f 4267/1491/239 4268/1492/239 4269/1493/239 +f 4269/1493/239 4270/1494/239 4271/625/239 +f 4271/625/239 4272/1495/239 4273/626/239 +f 4273/626/239 4274/1496/239 4275/627/239 +f 4275/627/239 4276/1497/239 4277/1498/239 +f 4277/1498/239 4278/1499/239 4275/627/239 +f 4278/1499/239 4267/1491/239 4275/627/239 +f 4267/1491/239 4269/1493/239 4275/627/239 +f 4269/1493/239 4271/625/239 4275/627/239 +f 4288/630/238 4290/1500/238 4289/1501/238 +f 4289/1501/238 4279/1502/238 4288/630/238 +f 4279/1502/238 4280/1503/238 4288/630/238 +f 4280/1503/238 4281/1504/238 4282/628/238 +f 4282/628/238 4283/1505/238 4284/629/238 +f 4284/629/238 4285/1506/238 4286/1507/238 +f 4286/1507/238 4287/1508/238 4284/629/238 +f 4287/1508/238 4288/630/238 4284/629/238 +f 4280/1503/238 4282/628/238 4288/630/238 +f 4291/1509/239 4292/1510/239 4293/631/239 +f 4293/631/239 4294/1511/239 4295/632/239 +f 4295/632/239 4296/1512/239 4297/1513/239 +f 4297/1513/239 4298/1514/239 4295/632/239 +f 4298/1514/239 4299/633/239 4295/632/239 +f 4299/633/239 4300/1515/239 4301/1516/239 +f 4301/1516/239 4302/1517/239 4299/633/239 +f 4302/1517/239 4291/1509/239 4299/633/239 +f 4291/1509/239 4293/631/239 4299/633/239 +f 4312/636/238 4314/1518/238 4313/1519/238 +f 4313/1519/238 4303/1520/238 4304/1521/238 +f 4304/1521/238 4305/1522/238 4306/634/238 +f 4306/634/238 4307/1523/238 4308/635/238 +f 4308/635/238 4309/1524/238 4312/636/238 +f 4309/1524/238 4310/1525/238 4312/636/238 +f 4310/1525/238 4311/1526/238 4312/636/238 +f 4312/636/238 4313/1519/238 4304/1521/238 +f 4304/1521/238 4306/634/238 4312/636/238 +f 4315/639/239 4316/1527/239 4317/1528/239 +f 4317/1528/239 4318/1529/239 4319/637/239 +f 4319/637/239 4320/1530/239 4323/638/239 +f 4320/1530/239 4321/1531/239 4323/638/239 +f 4321/1531/239 4322/1532/239 4323/638/239 +f 4323/638/239 4324/1533/239 4315/639/239 +f 4324/1533/239 4325/1534/239 4315/639/239 +f 4325/1534/239 4326/1535/239 4315/639/239 +f 4315/639/239 4317/1528/239 4319/637/239 +f 4332/640/239 4333/644/239 4334/641/239 +f 4330/643/243 4334/641/243 4333/644/243 +f 4327/646/241 4332/640/241 4331/642/241 +f 4329/648/242 4331/642/242 4334/641/242 +f 4328/650/240 4333/644/240 4332/640/240 +f 4341/652/239 4342/660/239 4339/653/239 +f 4338/655/243 4342/660/243 4341/652/243 +f 4335/657/241 4340/654/241 4339/653/241 +f 4337/659/242 4339/653/242 4342/660/242 +f 4336/662/240 4341/652/240 4340/654/240 +f 4349/664/239 4350/672/239 4347/665/239 +f 4346/667/243 4350/672/243 4349/664/243 +f 4343/669/241 4348/666/241 4347/665/241 +f 4345/671/242 4347/665/242 4350/672/242 +f 4344/674/240 4349/664/240 4348/666/240 +f 4357/676/239 4358/684/239 4355/677/239 +f 4354/679/243 4358/684/243 4357/676/243 +f 4351/681/241 4356/678/241 4355/677/241 +f 4353/683/242 4355/677/242 4358/684/242 +f 4352/686/240 4357/676/240 4356/678/240 +f 4365/688/239 4366/696/239 4363/689/239 +f 4362/691/243 4366/696/243 4365/688/243 +f 4359/693/241 4364/690/241 4363/689/241 +f 4361/695/242 4363/689/242 4366/696/242 +f 4360/698/240 4365/688/240 4364/690/240 +f 4372/700/239 4373/704/239 4374/701/239 +f 4370/703/243 4374/701/243 4373/704/243 +f 4367/706/241 4372/700/241 4371/702/241 +f 4369/708/242 4371/702/242 4374/701/242 +f 4368/710/240 4373/704/240 4372/700/240 +f 4381/712/239 4382/720/239 4379/713/239 +f 4378/715/243 4382/720/243 4381/712/243 +f 4375/717/241 4380/714/241 4379/713/241 +f 4377/719/242 4379/713/242 4382/720/242 +f 4376/722/240 4381/712/240 4380/714/240 +f 4389/724/239 4390/732/239 4387/725/239 +f 4386/727/243 4390/732/243 4389/724/243 +f 4383/729/241 4388/726/241 4387/725/241 +f 4385/731/242 4387/725/242 4390/732/242 +f 4384/734/240 4389/724/240 4388/726/240 +f 4397/736/239 4398/744/239 4395/737/239 +f 4394/739/243 4398/744/243 4397/736/243 +f 4391/741/241 4396/738/241 4395/737/241 +f 4393/743/242 4395/737/242 4398/744/242 +f 4392/746/240 4397/736/240 4396/738/240 +f 4405/748/239 4406/756/239 4403/749/239 +f 4402/751/243 4406/756/243 4405/748/243 +f 4399/753/241 4404/750/241 4403/749/241 +f 4401/755/242 4403/749/242 4406/756/242 +f 4400/758/240 4405/748/240 4404/750/240 +f 4413/760/239 4414/768/239 4411/761/239 +f 4410/763/243 4414/768/243 4413/760/243 +f 4407/765/241 4412/762/241 4411/761/241 +f 4409/767/242 4411/761/242 4414/768/242 +f 4408/770/240 4413/760/240 4412/762/240 +f 4420/772/239 4421/776/239 4422/773/239 +f 4418/775/243 4422/773/243 4421/776/243 +f 4415/778/241 4420/772/241 4419/774/241 +f 4417/780/242 4419/774/242 4422/773/242 +f 4416/782/240 4421/776/240 4420/772/240 +f 4429/784/239 4430/792/239 4427/785/239 +f 4426/787/243 4430/792/243 4429/784/243 +f 4423/789/241 4428/786/241 4427/785/241 +f 4425/791/242 4427/785/242 4430/792/242 +f 4424/794/240 4429/784/240 4428/786/240 +f 4437/796/239 4438/804/239 4435/797/239 +f 4434/799/243 4438/804/243 4437/796/243 +f 4431/801/241 4436/798/241 4435/797/241 +f 4433/803/242 4435/797/242 4438/804/242 +f 4432/806/240 4437/796/240 4436/798/240 +f 4444/808/239 4445/812/239 4446/809/239 +f 4442/811/243 4446/809/243 4445/812/243 +f 4439/814/241 4444/808/241 4443/810/241 +f 4441/816/242 4443/810/242 4446/809/242 +f 4440/818/240 4445/812/240 4444/808/240 +f 4453/820/239 4454/828/239 4451/821/239 +f 4450/823/243 4454/828/243 4453/820/243 +f 4447/825/241 4452/822/241 4451/821/241 +f 4449/827/242 4451/821/242 4454/828/242 +f 4448/830/240 4453/820/240 4452/822/240 +f 4461/832/239 4462/840/239 4459/833/239 +f 4458/835/243 4462/840/243 4461/832/243 +f 4455/837/241 4460/834/241 4459/833/241 +f 4457/839/242 4459/833/242 4462/840/242 +f 4456/842/240 4461/832/240 4460/834/240 +f 4469/844/239 4470/852/239 4467/845/239 +f 4466/847/243 4470/852/243 4469/844/243 +f 4463/849/241 4468/846/241 4467/845/241 +f 4465/851/242 4467/845/242 4470/852/242 +f 4464/854/240 4469/844/240 4468/846/240 +f 5089/856/242 5090/862/242 5088/857/242 +f 5091/859/239 5099/1536/239 5102/860/239 +f 5090/862/243 5098/874/243 5097/863/243 +f 5087/858/241 5096/868/241 5095/864/241 +f 5089/856/239 5095/876/239 5098/865/239 +f 5088/857/238 5097/871/238 5096/866/238 +f 5091/867/240 5095/864/240 5096/868/240 +f 5092/870/240 5096/866/240 5097/871/240 +f 5093/873/240 5097/863/240 5098/874/240 +f 5094/861/240 5098/865/240 5095/876/240 +f 5093/872/238 5101/1537/238 5100/877/238 +f 5094/875/243 5102/1538/243 5101/878/243 +f 5092/869/241 5100/1539/241 5099/879/241 +f 5105/880/242 5106/886/242 5104/881/242 +f 5107/883/239 5115/1540/239 5118/884/239 +f 5106/886/243 5114/898/243 5113/887/243 +f 5103/882/241 5112/892/241 5111/888/241 +f 5105/880/239 5111/900/239 5114/889/239 +f 5104/881/238 5113/895/238 5112/890/238 +f 5107/891/240 5111/888/240 5112/892/240 +f 5108/894/240 5112/890/240 5113/895/240 +f 5109/897/240 5113/887/240 5114/898/240 +f 5110/885/240 5114/889/240 5111/900/240 +f 5109/896/238 5117/1541/238 5116/901/238 +f 5110/899/243 5118/1542/243 5117/902/243 +f 5108/893/241 5116/1543/241 5115/903/241 +f 5121/904/242 5122/910/242 5120/905/242 +f 5123/907/239 5131/1544/239 5134/908/239 +f 5122/910/243 5130/922/243 5129/911/243 +f 5119/906/241 5128/916/241 5127/912/241 +f 5121/904/239 5127/924/239 5130/913/239 +f 5120/905/238 5129/919/238 5128/914/238 +f 5123/915/240 5127/912/240 5128/916/240 +f 5124/918/240 5128/914/240 5129/919/240 +f 5125/921/240 5129/911/240 5130/922/240 +f 5126/909/240 5130/913/240 5127/924/240 +f 5125/920/238 5133/1545/238 5132/925/238 +f 5126/923/243 5134/1546/243 5133/926/243 +f 5124/917/241 5132/1547/241 5131/927/241 +f 5137/928/242 5138/934/242 5136/929/242 +f 5139/931/239 5147/1548/239 5150/932/239 +f 5138/934/243 5146/946/243 5145/935/243 +f 5135/930/241 5144/940/241 5143/936/241 +f 5137/928/239 5143/948/239 5146/937/239 +f 5136/929/238 5145/943/238 5144/938/238 +f 5139/939/240 5143/936/240 5144/940/240 +f 5140/942/240 5144/938/240 5145/943/240 +f 5141/945/240 5145/935/240 5146/946/240 +f 5142/933/240 5146/937/240 5143/948/240 +f 5141/944/238 5149/1549/238 5148/949/238 +f 5142/947/243 5150/1550/243 5149/950/243 +f 5140/941/241 5148/1551/241 5147/951/241 +f 5153/952/240 5154/958/240 5152/953/240 +f 5155/955/239 5163/1552/239 5166/956/239 +f 5154/958/241 5162/971/241 5161/959/241 +f 5151/954/243 5160/965/243 5159/960/243 +f 5154/958/239 5153/952/239 5159/961/239 +f 5152/953/238 5161/968/238 5160/963/238 +f 5155/964/242 5159/960/242 5160/965/242 +f 5156/967/242 5160/963/242 5161/968/242 +f 5157/970/242 5161/959/242 5162/971/242 +f 5158/957/242 5162/962/242 5159/961/242 +f 5157/969/238 5165/1553/238 5164/973/238 +f 5158/972/241 5166/1554/241 5165/974/241 +f 5156/966/243 5164/1555/243 5163/975/243 +f 5169/976/240 5170/982/240 5168/977/240 +f 5171/979/239 5179/1556/239 5182/980/239 +f 5170/982/241 5178/994/241 5177/983/241 +f 5167/978/243 5176/988/243 5175/984/243 +f 5169/976/239 5175/996/239 5178/985/239 +f 5168/977/238 5177/991/238 5176/986/238 +f 5171/987/242 5175/984/242 5176/988/242 +f 5172/990/242 5176/986/242 5177/991/242 +f 5173/993/242 5177/983/242 5178/994/242 +f 5174/981/242 5178/985/242 5175/996/242 +f 5173/992/238 5181/1557/238 5180/997/238 +f 5174/995/241 5182/1558/241 5181/998/241 +f 5172/989/243 5180/1559/243 5179/999/243 +f 5185/1000/240 5186/1006/240 5184/1001/240 +f 5187/1003/239 5195/1560/239 5198/1004/239 +f 5186/1006/241 5194/1018/241 5193/1007/241 +f 5183/1002/243 5192/1012/243 5191/1008/243 +f 5185/1000/239 5191/1020/239 5194/1009/239 +f 5184/1001/238 5193/1015/238 5192/1010/238 +f 5187/1011/242 5191/1008/242 5192/1012/242 +f 5188/1014/242 5192/1010/242 5193/1015/242 +f 5189/1017/242 5193/1007/242 5194/1018/242 +f 5190/1005/242 5194/1009/242 5191/1020/242 +f 5189/1016/238 5197/1561/238 5196/1021/238 +f 5190/1019/241 5198/1562/241 5197/1022/241 +f 5188/1013/243 5196/1563/243 5195/1023/243 +f 5201/1024/240 5202/1030/240 5200/1025/240 +f 5203/1027/239 5211/1564/239 5214/1028/239 +f 5202/1030/241 5210/1042/241 5209/1031/241 +f 5199/1026/243 5208/1036/243 5207/1032/243 +f 5201/1024/239 5207/1044/239 5210/1033/239 +f 5200/1025/238 5209/1039/238 5208/1034/238 +f 5203/1035/242 5207/1032/242 5208/1036/242 +f 5204/1038/242 5208/1034/242 5209/1039/242 +f 5205/1041/242 5209/1031/242 5210/1042/242 +f 5206/1029/242 5210/1033/242 5207/1044/242 +f 5205/1040/238 5213/1565/238 5212/1045/238 +f 5206/1043/241 5214/1566/241 5213/1046/241 +f 5204/1037/243 5212/1567/243 5211/1047/243 +f 5217/1048/240 5218/1054/240 5216/1049/240 +f 5219/1051/239 5227/1568/239 5230/1052/239 +f 5218/1054/241 5226/1066/241 5225/1055/241 +f 5215/1050/243 5224/1060/243 5223/1056/243 +f 5217/1048/239 5223/1068/239 5226/1057/239 +f 5216/1049/238 5225/1063/238 5224/1058/238 +f 5219/1059/242 5223/1056/242 5224/1060/242 +f 5220/1062/242 5224/1058/242 5225/1063/242 +f 5221/1065/242 5225/1055/242 5226/1066/242 +f 5222/1053/242 5226/1057/242 5223/1068/242 +f 5221/1064/238 5229/1569/238 5228/1069/238 +f 5222/1067/241 5230/1570/241 5229/1070/241 +f 5220/1061/243 5228/1571/243 5227/1071/243 +f 5233/1072/241 5234/1078/241 5232/1073/241 +f 5235/1075/239 5243/1572/239 5246/1076/239 +f 5234/1078/242 5242/1090/242 5241/1079/242 +f 5231/1074/240 5240/1084/240 5239/1080/240 +f 5233/1072/239 5239/1092/239 5242/1081/239 +f 5232/1073/238 5241/1087/238 5240/1082/238 +f 5235/1083/243 5239/1080/243 5240/1084/243 +f 5236/1086/243 5240/1082/243 5241/1087/243 +f 5237/1089/243 5241/1079/243 5242/1090/243 +f 5238/1077/243 5242/1081/243 5239/1092/243 +f 5237/1088/238 5245/1573/238 5244/1093/238 +f 5238/1091/242 5246/1574/242 5245/1094/242 +f 5236/1085/240 5244/1575/240 5243/1095/240 +f 5249/1096/241 5250/1102/241 5248/1097/241 +f 5251/1099/239 5259/1576/239 5262/1100/239 +f 5250/1102/242 5258/1114/242 5257/1103/242 +f 5247/1098/240 5256/1108/240 5255/1104/240 +f 5249/1096/239 5255/1116/239 5258/1105/239 +f 5248/1097/238 5257/1111/238 5256/1106/238 +f 5251/1107/243 5255/1104/243 5256/1108/243 +f 5252/1110/243 5256/1106/243 5257/1111/243 +f 5253/1113/243 5257/1103/243 5258/1114/243 +f 5254/1101/243 5258/1105/243 5255/1116/243 +f 5253/1112/238 5261/1577/238 5260/1117/238 +f 5254/1115/242 5262/1578/242 5261/1118/242 +f 5252/1109/240 5260/1579/240 5259/1119/240 +f 5265/1120/241 5266/1126/241 5264/1121/241 +f 5267/1123/239 5275/1580/239 5278/1124/239 +f 5266/1126/242 5274/1138/242 5273/1127/242 +f 5263/1122/240 5272/1132/240 5271/1128/240 +f 5265/1120/239 5271/1140/239 5274/1129/239 +f 5264/1121/238 5273/1135/238 5272/1130/238 +f 5267/1131/243 5271/1128/243 5272/1132/243 +f 5268/1134/243 5272/1130/243 5273/1135/243 +f 5269/1137/243 5273/1127/243 5274/1138/243 +f 5270/1125/243 5274/1129/243 5271/1140/243 +f 5269/1136/238 5277/1581/238 5276/1141/238 +f 5270/1139/242 5278/1582/242 5277/1142/242 +f 5268/1133/240 5276/1583/240 5275/1143/240 +f 5281/1144/241 5282/1150/241 5280/1145/241 +f 5283/1147/239 5291/1584/239 5294/1148/239 +f 5282/1150/242 5290/1162/242 5289/1151/242 +f 5279/1146/240 5288/1156/240 5287/1152/240 +f 5281/1144/239 5287/1164/239 5290/1153/239 +f 5280/1145/238 5289/1159/238 5288/1154/238 +f 5283/1155/243 5287/1152/243 5288/1156/243 +f 5284/1158/243 5288/1154/243 5289/1159/243 +f 5285/1161/243 5289/1151/243 5290/1162/243 +f 5286/1149/243 5290/1153/243 5287/1164/243 +f 5285/1160/238 5293/1585/238 5292/1165/238 +f 5286/1163/242 5294/1586/242 5293/1166/242 +f 5284/1157/240 5292/1587/240 5291/1167/240 +f 5297/1168/241 5298/1174/241 5296/1169/241 +f 5299/1171/239 5307/1588/239 5310/1172/239 +f 5298/1174/242 5306/1186/242 5305/1175/242 +f 5295/1170/240 5304/1180/240 5303/1176/240 +f 5297/1168/239 5303/1188/239 5306/1177/239 +f 5296/1169/238 5305/1183/238 5304/1178/238 +f 5299/1179/243 5303/1176/243 5304/1180/243 +f 5300/1182/243 5304/1178/243 5305/1183/243 +f 5301/1185/243 5305/1175/243 5306/1186/243 +f 5302/1173/243 5306/1177/243 5303/1188/243 +f 5301/1184/238 5309/1589/238 5308/1189/238 +f 5302/1187/242 5310/1590/242 5309/1190/242 +f 5300/1181/240 5308/1591/240 5307/1191/240 +f 5313/1192/243 5314/1198/243 5312/1193/243 +f 5315/1195/239 5323/1592/239 5326/1196/239 +f 5314/1198/240 5322/1210/240 5321/1199/240 +f 5311/1194/242 5320/1204/242 5319/1200/242 +f 5313/1192/239 5319/1212/239 5322/1201/239 +f 5312/1193/238 5321/1207/238 5320/1202/238 +f 5315/1203/241 5319/1200/241 5320/1204/241 +f 5316/1206/241 5320/1202/241 5321/1207/241 +f 5317/1209/241 5321/1199/241 5322/1210/241 +f 5318/1197/241 5322/1201/241 5319/1212/241 +f 5317/1208/238 5325/1593/238 5324/1213/238 +f 5318/1211/240 5326/1594/240 5325/1214/240 +f 5316/1205/242 5324/1595/242 5323/1215/242 +f 5329/1216/243 5330/1222/243 5328/1217/243 +f 5331/1219/239 5339/1596/239 5342/1220/239 +f 5330/1222/240 5338/1234/240 5337/1223/240 +f 5327/1218/242 5336/1228/242 5335/1224/242 +f 5329/1216/239 5335/1236/239 5338/1225/239 +f 5328/1217/238 5337/1231/238 5336/1226/238 +f 5331/1227/241 5335/1224/241 5336/1228/241 +f 5332/1230/241 5336/1226/241 5337/1231/241 +f 5333/1233/241 5337/1223/241 5338/1234/241 +f 5334/1221/241 5338/1225/241 5335/1236/241 +f 5333/1232/238 5341/1597/238 5340/1237/238 +f 5334/1235/240 5342/1598/240 5341/1238/240 +f 5332/1229/242 5340/1599/242 5339/1239/242 +f 5345/1240/243 5346/1246/243 5344/1241/243 +f 5350/1243/239 5347/1261/239 5355/1244/239 +f 5346/1246/240 5354/1259/240 5353/1247/240 +f 5343/1242/242 5352/1253/242 5351/1248/242 +f 5346/1246/239 5345/1240/239 5351/1249/239 +f 5344/1241/238 5353/1256/238 5352/1251/238 +f 5347/1252/241 5351/1248/241 5352/1253/241 +f 5348/1255/241 5352/1251/241 5353/1256/241 +f 5349/1258/241 5353/1247/241 5354/1259/241 +f 5350/1243/241 5354/1250/241 5351/1249/241 +f 5349/1257/238 5357/1600/238 5356/1262/238 +f 5350/1260/240 5358/1601/240 5357/1263/240 +f 5348/1254/242 5356/1602/242 5355/1264/242 +f 5361/1265/243 5362/1271/243 5360/1266/243 +f 5363/1268/239 5371/1603/239 5374/1269/239 +f 5362/1271/240 5370/1283/240 5369/1272/240 +f 5359/1267/242 5368/1277/242 5367/1273/242 +f 5361/1265/239 5367/1285/239 5370/1274/239 +f 5360/1266/238 5369/1280/238 5368/1275/238 +f 5363/1276/241 5367/1273/241 5368/1277/241 +f 5364/1279/241 5368/1275/241 5369/1280/241 +f 5365/1282/241 5369/1272/241 5370/1283/241 +f 5366/1270/241 5370/1274/241 5367/1285/241 +f 5365/1281/238 5373/1604/238 5372/1286/238 +f 5366/1284/240 5374/1605/240 5373/1287/240 +f 5364/1278/242 5372/1606/242 5371/1288/242 +f 5377/1289/243 5378/1295/243 5376/1290/243 +f 5379/1292/239 5387/1607/239 5390/1293/239 +f 5378/1295/240 5386/1307/240 5385/1296/240 +f 5375/1291/242 5384/1301/242 5383/1297/242 +f 5377/1289/239 5383/1309/239 5386/1298/239 +f 5376/1290/238 5385/1304/238 5384/1299/238 +f 5379/1300/241 5383/1297/241 5384/1301/241 +f 5380/1303/241 5384/1299/241 5385/1304/241 +f 5381/1306/241 5385/1296/241 5386/1307/241 +f 5382/1294/241 5386/1298/241 5383/1309/241 +f 5381/1305/238 5389/1608/238 5388/1310/238 +f 5382/1308/240 5390/1609/240 5389/1311/240 +f 5380/1302/242 5388/1610/242 5387/1312/242 +s 1 +f 3667/1611/244 3153/1612/242 3656/1613/242 +f 3660/1614/245 3149/1615/246 3661/1616/246 +f 3663/1617/247 3146/1618/248 3664/1619/248 +f 3656/1613/242 3154/1620/249 3657/1621/249 +f 3666/1622/250 3143/1623/244 3667/1611/244 +f 3659/1624/241 3150/1625/245 3660/1614/245 +f 3662/1626/240 3147/1627/247 3663/1617/247 +f 3665/1628/243 3144/1629/250 3666/1622/250 +f 3658/1630/251 3151/1631/241 3659/1632/241 +f 3661/1616/246 3148/1633/240 3662/1626/240 +f 3664/1619/248 3145/1634/243 3665/1628/243 +f 3657/1621/249 3152/1635/251 3658/1630/251 +f 3206/1636/252 3237/469/253 3205/1637/253 +f 3199/1638/241 3230/453/254 3198/1639/254 +f 3207/1640/243 3238/471/252 3206/1636/252 +f 3200/1641/255 3231/456/241 3199/1638/241 +f 3208/1642/256 3239/473/243 3207/1640/243 +f 3201/1643/257 3232/457/255 3200/1641/255 +f 3209/1644/258 3240/474/256 3208/1642/256 +f 3202/1645/259 3233/459/257 3201/1643/257 +f 3210/1646/260 3241/476/258 3209/1644/258 +f 3203/1647/240 3234/462/259 3202/1645/259 +f 3196/1648/261 3228/449/242 3195/1649/242 +f 3195/1649/242 3242/479/260 3210/1646/260 +f 3204/1650/262 3235/466/240 3203/1651/240 +f 3197/1652/263 3227/450/261 3196/1648/261 +f 3205/1637/253 3236/467/262 3204/1650/262 +f 3198/1639/254 3229/452/263 3197/1652/263 +f 3212/448/262 3244/1653/240 3211/480/240 +f 3211/480/240 3258/1654/259 3226/478/259 +f 3220/465/261 3251/1655/242 3219/1360/242 +f 3213/451/253 3243/1656/262 3212/448/262 +f 3221/468/263 3252/1657/261 3220/465/261 +f 3214/454/252 3245/1658/253 3213/451/253 +f 3222/470/254 3253/1659/263 3221/468/263 +f 3215/455/243 3246/1660/252 3214/454/252 +f 3223/472/241 3254/1661/254 3222/470/254 +f 3215/455/243 3248/1662/256 3247/1663/243 +f 3224/475/255 3255/1664/241 3223/472/241 +f 3216/458/256 3249/1665/258 3248/1662/256 +f 3225/477/257 3256/1666/255 3224/475/255 +f 3218/461/260 3249/1665/258 3217/460/258 +f 3226/478/259 3257/1667/257 3225/477/257 +f 3219/463/242 3250/1668/260 3218/461/260 +f 3309/1669/240 4086/567/259 3310/1670/259 +f 3302/1671/260 4093/581/258 3303/1672/258 +f 3310/1670/259 4085/565/257 3311/1673/257 +f 3303/1672/258 4092/579/256 3304/1674/256 +f 3311/1673/257 4084/562/255 3312/1675/255 +f 3304/1674/256 4091/578/243 3305/1676/243 +f 3312/1675/255 4083/561/241 3313/1677/241 +f 3305/1676/243 4090/576/252 3306/1678/252 +f 3313/1677/241 4082/558/254 3314/1679/254 +f 3306/1678/252 4089/574/253 3307/1680/253 +f 3353/1681/264 3346/1682/238 3345/1683/265 +f 3351/1684/266 3344/1685/241 3343/1686/267 +f 3356/1687/268 3349/1688/269 3348/1689/243 +f 3354/1690/270 3347/1691/271 3346/1692/238 +f 3352/1693/272 3345/1683/265 3344/1685/241 +f 3350/1694/273 3343/1686/267 3342/1695/239 +f 3357/1696/274 3342/1695/239 3349/1688/269 +f 3355/1697/275 3348/1689/243 3347/1691/271 +f 3356/1698/268 3364/1699/276 3357/1696/274 +f 3352/1700/272 3361/1701/277 3353/1702/264 +f 3350/1694/273 3359/1703/278 3351/1684/266 +f 3357/1696/274 3358/1704/279 3350/1694/273 +f 3356/1698/268 3362/1705/280 3363/1706/281 +f 3351/1684/266 3360/1707/282 3352/1700/272 +f 3360/1707/282 3366/1708/283 3367/1709/284 +f 3363/1706/281 3371/1710/285 3364/1699/276 +f 3360/1707/282 3368/1711/286 3361/1701/277 +f 3359/1703/278 3365/1712/287 3366/1708/283 +f 3364/1699/276 3365/1712/287 3358/1704/279 +f 3363/1706/281 3369/1713/288 3370/1714/289 +f 3354/1715/270 3362/1705/280 3355/1716/275 +f 3362/1705/280 3354/1715/270 3369/1713/288 +f 3353/1702/264 3361/1701/277 3354/1717/270 +f 3361/1701/277 3368/1711/286 3354/1717/270 +f 3370/1718/289 3379/1719/258 3371/1710/285 +f 3367/1720/284 3376/1721/257 3368/1722/286 +f 3365/1712/287 3374/1723/263 3366/1708/283 +f 3368/1722/286 3372/1724/240 3354/1725/270 +f 3371/1710/285 3373/1726/242 3365/1712/287 +f 3354/1727/270 3377/1728/253 3369/1729/288 +f 3369/1729/288 3378/1730/243 3370/1718/289 +f 3366/1708/283 3375/1731/241 3367/1720/284 +f 3384/1732/238 3391/1733/265 3383/1734/265 +f 3385/1735/271 3392/1736/238 3384/1737/238 +f 3386/1738/243 3393/1739/271 3385/1735/271 +f 3387/1740/269 3394/1741/243 3386/1738/243 +f 3380/1742/239 3395/1743/269 3387/1740/269 +f 3381/1744/267 3388/1745/239 3380/1742/239 +f 3382/1746/241 3389/1747/267 3381/1744/267 +f 3383/1734/265 3390/1748/241 3382/1746/241 +f 3419/1749/279 3404/1750/239 3411/1751/279 +f 3417/1752/290 3410/1753/242 3409/1754/290 +f 3415/1755/270 3408/1756/238 3407/1757/270 +f 3413/1758/291 3406/1759/240 3405/1760/291 +f 3418/1761/242 3411/1751/279 3410/1753/242 +f 3416/1762/238 3409/1754/290 3408/1763/238 +f 3414/1764/240 3407/1757/270 3406/1759/240 +f 3412/1765/239 3405/1760/291 3404/1750/239 +f 3431/1766/292 3424/1767/240 3423/1768/291 +f 3429/1769/293 3422/1770/239 3421/1771/279 +f 3434/1772/294 3427/1773/290 3426/1774/238 +f 3432/1775/295 3425/1776/270 3424/1777/240 +f 3430/1778/296 3423/1768/291 3422/1770/239 +f 3428/1779/297 3421/1771/279 3420/1780/242 +f 3435/1781/298 3420/1780/242 3427/1773/290 +f 3433/1782/299 3426/1774/238 3425/1776/270 +f 3435/1781/298 3441/1783/300 3442/1784/301 +f 3430/1785/296 3439/1786/302 3431/1787/292 +f 3428/1779/297 3437/1788/303 3429/1769/293 +f 3428/1779/297 3442/1784/301 3436/1789/304 +f 3434/1790/294 3440/1791/305 3441/1783/300 +f 3429/1769/293 3438/1792/306 3430/1785/296 +f 3432/1793/295 3440/1791/305 3433/1794/299 +f 3431/1787/292 3439/1786/302 3432/1795/295 +f 3448/1796/307 3451/1797/308 3455/1798/309 +f 3449/1799/310 3455/1798/309 3456/1800/311 +f 3445/1801/312 3453/1802/313 3446/1803/314 +f 3447/1804/315 3451/1805/308 3444/1806/316 +f 3449/1799/310 3457/1807/317 3450/1808/318 +f 3446/1803/314 3454/1809/319 3447/1804/315 +f 3450/1808/318 3457/1807/317 3443/1810/320 +f 3445/1801/312 3443/1810/320 3452/1811/321 +f 3455/1798/309 3464/1812/238 3456/1813/311 +f 3452/1814/321 3461/1815/239 3453/1816/313 +f 3443/1817/320 3460/1818/279 3452/1814/321 +f 3454/1809/319 3459/1819/240 3451/1805/308 +f 3457/1820/317 3458/1821/242 3443/1817/320 +f 3456/1813/311 3465/1822/290 3457/1820/317 +f 3453/1816/313 3462/1823/291 3454/1809/319 +f 3451/1797/308 3463/1824/270 3455/1798/309 +f 3477/1825/292 3470/1826/240 3469/1827/291 +f 3475/1828/293 3468/1829/239 3467/1830/279 +f 3480/1831/294 3473/1832/290 3472/1833/238 +f 3478/1834/295 3471/1835/270 3470/1836/240 +f 3476/1837/296 3469/1827/291 3468/1829/239 +f 3474/1838/297 3467/1830/279 3466/1839/242 +f 3481/1840/298 3466/1839/242 3473/1832/290 +f 3479/1841/299 3472/1833/238 3471/1835/270 +f 3481/1840/298 3487/1842/300 3488/1843/301 +f 3476/1844/296 3485/1845/322 3477/1846/292 +f 3474/1838/297 3483/1847/303 3475/1828/293 +f 3474/1838/297 3488/1843/301 3482/1848/304 +f 3480/1849/294 3486/1850/305 3487/1842/300 +f 3475/1828/293 3484/1851/306 3476/1844/296 +f 3495/1852/310 3488/1843/301 3487/1842/300 +f 3496/1853/318 3482/1848/304 3488/1843/301 +f 3482/1848/304 3491/1854/323 3483/1847/303 +f 3483/1847/303 3492/1855/314 3484/1851/306 +f 3484/1851/306 3493/1856/315 3485/1845/322 +f 3485/1845/322 3490/1857/316 3478/1858/295 +f 3478/1859/295 3486/1850/305 3479/1860/299 +f 3490/1861/316 3486/1850/305 3478/1859/295 +f 3477/1846/292 3485/1845/322 3478/1858/295 +f 3494/1862/307 3487/1842/300 3486/1850/305 +f 3450/1808/318 3436/1789/304 3442/1784/301 +f 3436/1789/304 3445/1801/312 3437/1788/303 +f 3437/1788/303 3446/1803/314 3438/1792/306 +f 3438/1792/306 3447/1804/315 3439/1786/302 +f 3439/1786/302 3444/1806/316 3432/1795/295 +f 3444/1863/316 3440/1791/305 3432/1793/295 +f 3494/1862/307 3497/1864/308 3501/1865/309 +f 3495/1852/310 3501/1865/309 3502/1866/311 +f 3491/1854/323 3499/1867/313 3492/1855/314 +f 3493/1856/315 3497/1868/308 3490/1857/316 +f 3496/1853/318 3502/1866/311 3503/1869/317 +f 3492/1855/314 3500/1870/319 3493/1856/315 +f 3448/1796/307 3441/1783/300 3440/1791/305 +f 3496/1853/318 3503/1869/317 3489/1871/320 +f 3449/1799/310 3442/1784/301 3441/1783/300 +f 3491/1854/323 3489/1871/320 3498/1872/321 +f 3501/1865/309 3510/1873/238 3502/1874/311 +f 3498/1875/321 3507/1876/239 3499/1877/313 +f 3489/1878/320 3506/1879/279 3498/1875/321 +f 3500/1870/319 3505/1880/240 3497/1868/308 +f 3503/1881/317 3504/1882/242 3489/1878/320 +f 3503/1881/317 3510/1873/238 3511/1883/290 +f 3499/1877/313 3508/1884/291 3500/1870/319 +f 3497/1864/308 3509/1885/270 3501/1865/309 +f 3523/1886/324 3516/1887/238 3515/1888/270 +f 3521/1889/325 3514/1890/240 3513/1891/291 +f 3526/1892/326 3519/1893/279 3518/1894/242 +f 3524/1895/271 3517/1896/290 3516/1897/238 +f 3522/1898/327 3515/1888/270 3514/1890/240 +f 3520/1899/328 3513/1891/291 3512/1900/239 +f 3527/1901/329 3512/1900/239 3519/1893/279 +f 3525/1902/330 3518/1894/242 3517/1896/290 +f 3527/1901/329 3533/1903/331 3534/1904/332 +f 3522/1905/327 3531/1906/333 3523/1907/324 +f 3520/1899/328 3529/1908/334 3521/1889/325 +f 3520/1899/328 3534/1904/332 3528/1909/267 +f 3526/1910/326 3532/1911/335 3533/1903/331 +f 3521/1889/325 3530/1912/336 3522/1905/327 +f 3530/1912/336 3536/1913/337 3537/1914/338 +f 3533/1903/331 3541/1915/339 3534/1904/332 +f 3531/1906/333 3537/1914/338 3538/1916/340 +f 3528/1909/267 3536/1913/337 3529/1908/334 +f 3528/1909/267 3541/1915/339 3535/1917/341 +f 3532/1911/335 3540/1918/342 3533/1903/331 +f 3524/1919/271 3532/1911/335 3525/1920/330 +f 3532/1911/335 3524/1919/271 3539/1921/343 +f 3523/1907/324 3531/1906/333 3524/1922/271 +f 3531/1906/333 3538/1916/340 3524/1922/271 +f 3540/1923/342 3549/1924/344 3541/1915/339 +f 3537/1925/338 3546/1926/345 3538/1927/340 +f 3535/1917/341 3544/1928/346 3536/1913/337 +f 3538/1927/340 3542/1929/347 3524/1930/271 +f 3541/1915/339 3543/1931/267 3535/1917/341 +f 3524/1932/271 3547/1933/348 3539/1934/343 +f 3539/1934/343 3548/1935/349 3540/1923/342 +f 3536/1913/337 3545/1936/350 3537/1925/338 +f 3542/1929/347 3553/1937/351 3550/1938/271 +f 3547/1933/348 3555/1939/352 3548/1940/349 +f 3545/1941/350 3551/1942/353 3552/1943/354 +f 3542/1944/347 3554/1945/355 3547/1933/348 +f 3548/1940/349 3556/1946/356 3549/1947/344 +f 3546/1926/345 3552/1943/354 3553/1937/351 +f 3550/1948/271 3561/1949/357 3554/1945/355 +f 3555/1939/352 3561/1949/357 3562/1950/358 +f 3551/1942/353 3559/1951/359 3552/1943/354 +f 3553/1937/351 3557/1952/360 3550/1938/271 +f 3556/1946/356 3562/1950/358 3563/1953/361 +f 3552/1943/354 3560/1954/362 3553/1937/351 +f 3549/1947/344 3556/1946/356 3543/1955/267 +f 3556/1946/356 3563/1953/361 3543/1955/267 +f 3543/1955/267 3551/1942/353 3544/1956/346 +f 3551/1942/353 3543/1955/267 3558/1957/363 +f 3561/1949/357 3570/1958/242 3562/1959/358 +f 3558/1960/363 3567/1961/240 3559/1962/359 +f 3543/1963/267 3566/1964/291 3558/1960/363 +f 3560/1954/362 3565/1965/238 3557/1952/360 +f 3563/1966/361 3564/1967/239 3543/1963/267 +f 3562/1959/358 3571/1968/279 3563/1966/361 +f 3559/1962/359 3568/1969/270 3560/1954/362 +f 3557/1970/360 3569/1971/290 3561/1949/357 +f 3583/1972/324 3576/1973/238 3575/1974/270 +f 3581/1975/325 3574/1976/240 3573/1977/291 +f 3586/1978/326 3579/1979/279 3578/1980/242 +f 3584/1981/271 3577/1982/290 3576/1983/238 +f 3582/1984/327 3575/1974/270 3574/1976/240 +f 3580/1985/328 3573/1977/291 3572/1986/239 +f 3587/1987/329 3572/1986/239 3579/1979/279 +f 3585/1988/330 3578/1980/242 3577/1982/290 +f 3587/1987/329 3593/1989/331 3594/1990/332 +f 3582/1991/327 3591/1992/333 3583/1993/324 +f 3580/1985/328 3589/1994/334 3581/1975/325 +f 3580/1985/328 3594/1990/332 3588/1995/267 +f 3586/1996/326 3592/1997/335 3593/1989/331 +f 3581/1975/325 3590/1998/336 3582/1991/327 +f 3590/1998/336 3596/1999/337 3597/2000/338 +f 3593/1989/331 3601/2001/339 3594/1990/332 +f 3591/1992/333 3597/2000/338 3598/2002/340 +f 3588/1995/267 3596/1999/337 3589/1994/334 +f 3588/1995/267 3601/2001/339 3595/2003/341 +f 3592/1997/335 3600/2004/342 3593/1989/331 +f 3584/2005/271 3592/1997/335 3585/2006/330 +f 3592/1997/335 3584/2005/271 3599/2007/343 +f 3583/1993/324 3591/1992/333 3584/2008/271 +f 3591/1992/333 3598/2002/340 3584/2008/271 +f 3600/2009/342 3609/2010/344 3601/2001/339 +f 3597/2011/338 3606/2012/345 3598/2013/340 +f 3595/2003/341 3604/2014/346 3596/1999/337 +f 3598/2013/340 3602/2015/347 3584/2016/271 +f 3601/2001/339 3603/2017/267 3595/2003/341 +f 3584/2018/271 3607/2019/348 3599/2020/343 +f 3599/2020/343 3608/2021/349 3600/2009/342 +f 3596/1999/337 3605/2022/350 3597/2011/338 +f 3602/2015/347 3613/2023/351 3610/2024/271 +f 3607/2019/348 3615/2025/352 3608/2026/349 +f 3605/2027/350 3611/2028/353 3612/2029/354 +f 3602/2030/347 3614/2031/355 3607/2019/348 +f 3608/2026/349 3616/2032/356 3609/2033/344 +f 3606/2012/345 3612/2029/354 3613/2023/351 +f 3614/2031/355 3617/2034/360 3621/2035/357 +f 3615/2025/352 3621/2035/357 3622/2036/358 +f 3611/2028/353 3619/2037/359 3612/2029/354 +f 3613/2023/351 3617/2038/360 3610/2024/271 +f 3616/2032/356 3622/2036/358 3623/2039/361 +f 3612/2029/354 3620/2040/362 3613/2023/351 +f 3609/2033/344 3616/2032/356 3603/2041/267 +f 3616/2032/356 3623/2039/361 3603/2041/267 +f 3603/2041/267 3611/2028/353 3604/2042/346 +f 3611/2028/353 3603/2041/267 3618/2043/363 +f 3621/2035/357 3630/2044/242 3622/2045/358 +f 3618/2046/363 3627/2047/240 3619/2048/359 +f 3603/2049/267 3626/2050/291 3618/2046/363 +f 3620/2040/362 3625/2051/238 3617/2038/360 +f 3623/2052/361 3624/2053/239 3603/2049/267 +f 3622/2045/358 3631/2054/279 3623/2052/361 +f 3619/2048/359 3628/2055/270 3620/2040/362 +f 3617/2034/360 3629/2056/290 3621/2035/357 +f 3645/2057/239 3636/2058/291 3637/2059/239 +f 3643/2060/240 3634/2061/270 3635/2062/240 +f 3641/2063/238 3632/2064/290 3633/2065/238 +f 3647/2066/242 3638/2067/279 3639/2068/242 +f 3646/2069/279 3637/2059/239 3638/2067/279 +f 3644/2070/291 3635/2062/240 3636/2058/291 +f 3642/2071/270 3633/2072/238 3634/2061/270 +f 3640/2073/290 3639/2068/242 3632/2064/290 +f 3679/2074/264 3672/2075/238 3671/2076/265 +f 3677/2077/266 3670/2078/241 3669/2079/267 +f 3682/2080/268 3675/2081/269 3674/2082/243 +f 3680/2083/270 3673/2084/271 3672/2085/238 +f 3678/2086/272 3671/2076/265 3670/2078/241 +f 3676/2087/273 3669/2079/267 3668/2088/239 +f 3683/2089/274 3668/2088/239 3675/2081/269 +f 3681/2090/275 3674/2082/243 3673/2084/271 +f 3683/2089/274 3689/2091/281 3690/2092/276 +f 3678/2093/272 3687/2094/277 3679/2095/264 +f 3677/2077/266 3684/2096/279 3685/2097/278 +f 3683/2089/274 3684/2096/279 3676/2087/273 +f 3682/2098/268 3688/2099/280 3689/2091/281 +f 3677/2077/266 3686/2100/282 3678/2093/272 +f 3686/2100/282 3692/2101/283 3693/2102/284 +f 3689/2091/281 3697/2103/285 3690/2092/276 +f 3686/2100/282 3694/2104/286 3687/2094/277 +f 3685/2097/278 3691/2105/287 3692/2101/283 +f 3690/2092/276 3691/2105/287 3684/2096/279 +f 3689/2091/281 3695/2106/288 3696/2107/289 +f 3680/2108/270 3688/2099/280 3681/2109/275 +f 3688/2099/280 3680/2108/270 3695/2106/288 +f 3679/2095/264 3687/2094/277 3680/2110/270 +f 3687/2094/277 3694/2104/286 3680/2110/270 +f 3696/2111/289 3705/2112/258 3697/2103/285 +f 3693/2113/284 3702/2114/257 3694/2115/286 +f 3691/2105/287 3700/2116/263 3692/2101/283 +f 3694/2115/286 3698/2117/240 3680/2118/270 +f 3697/2103/285 3699/2119/242 3691/2105/287 +f 3680/2120/270 3703/2121/253 3695/2122/288 +f 3695/2122/288 3704/2123/243 3696/2111/289 +f 3692/2101/283 3701/2124/241 3693/2113/284 +f 3717/2125/264 3710/2126/238 3709/2127/265 +f 3715/2128/266 3708/2129/241 3707/2130/267 +f 3720/2131/268 3713/2132/269 3712/2133/243 +f 3710/2134/238 3719/2135/275 3711/2136/271 +f 3716/2137/272 3709/2127/265 3708/2129/241 +f 3714/2138/273 3707/2130/267 3706/2139/239 +f 3721/2140/274 3706/2139/239 3713/2132/269 +f 3719/2135/275 3712/2133/243 3711/2136/271 +f 3721/2140/274 3727/2141/281 3728/2142/276 +f 3716/2143/272 3725/2144/277 3717/2145/264 +f 3714/2138/273 3723/2146/278 3715/2128/266 +f 3721/2140/274 3722/2147/279 3714/2138/273 +f 3720/2148/268 3726/2149/280 3727/2141/281 +f 3716/2143/272 3723/2146/278 3724/2150/282 +f 3724/2150/282 3730/2151/283 3731/2152/284 +f 3727/2141/281 3735/2153/285 3728/2142/276 +f 3724/2150/282 3732/2154/286 3725/2144/277 +f 3723/2146/278 3729/2155/287 3730/2151/283 +f 3728/2142/276 3729/2155/287 3722/2147/279 +f 3726/2149/280 3734/2156/289 3727/2141/281 +f 3718/2157/270 3726/2149/280 3719/2158/275 +f 3726/2149/280 3718/2157/270 3733/2159/288 +f 3717/2145/264 3725/2144/277 3718/2160/270 +f 3725/2144/277 3732/2154/286 3718/2160/270 +f 3734/2161/289 3743/2162/258 3735/2153/285 +f 3731/2163/284 3740/2164/257 3732/2165/286 +f 3729/2155/287 3738/2166/263 3730/2151/283 +f 3732/2165/286 3736/2167/240 3718/2168/270 +f 3735/2153/285 3737/2169/242 3729/2155/287 +f 3718/2170/270 3741/2171/253 3733/2172/288 +f 3733/2172/288 3742/2173/243 3734/2161/289 +f 3730/2151/283 3739/2174/241 3731/2163/284 +f 3755/2175/264 3748/2176/238 3747/2177/265 +f 3753/2178/266 3746/2179/241 3745/2180/267 +f 3758/2181/268 3751/2182/269 3750/2183/243 +f 3756/2184/270 3749/2185/271 3748/2186/238 +f 3754/2187/272 3747/2177/265 3746/2179/241 +f 3752/2188/273 3745/2180/267 3744/2189/239 +f 3759/2190/274 3744/2189/239 3751/2182/269 +f 3757/2191/275 3750/2183/243 3749/2185/271 +f 3759/2190/274 3765/2192/281 3766/2193/276 +f 3754/2194/272 3763/2195/277 3755/2196/264 +f 3753/2178/266 3760/2197/279 3761/2198/278 +f 3759/2190/274 3760/2197/279 3752/2188/273 +f 3758/2199/268 3764/2200/280 3765/2192/281 +f 3753/2178/266 3762/2201/282 3754/2194/272 +f 3762/2201/282 3768/2202/283 3769/2203/284 +f 3765/2192/281 3773/2204/285 3766/2193/276 +f 3763/2195/277 3769/2203/284 3770/2205/286 +f 3761/2198/278 3767/2206/287 3768/2202/283 +f 3766/2193/276 3767/2206/287 3760/2197/279 +f 3764/2200/280 3772/2207/289 3765/2192/281 +f 3756/2208/270 3764/2200/280 3757/2209/275 +f 3764/2200/280 3756/2208/270 3771/2210/288 +f 3755/2196/264 3763/2195/277 3756/2211/270 +f 3763/2195/277 3770/2205/286 3756/2211/270 +f 3772/2212/289 3781/2213/258 3773/2204/285 +f 3769/2214/284 3778/2215/257 3770/2216/286 +f 3767/2206/287 3776/2217/263 3768/2202/283 +f 3770/2216/286 3774/2218/240 3756/2219/270 +f 3773/2204/285 3775/2220/242 3767/2206/287 +f 3756/2221/270 3779/2222/253 3771/2223/288 +f 3771/2223/288 3780/2224/243 3772/2212/289 +f 3768/2202/283 3777/2225/241 3769/2214/284 +f 3793/2226/264 3786/2227/238 3785/2228/265 +f 3791/2229/266 3784/2230/241 3783/2231/267 +f 3796/2232/268 3789/2233/269 3788/2234/243 +f 3794/2235/270 3787/2236/271 3786/2237/238 +f 3792/2238/272 3785/2228/265 3784/2230/241 +f 3790/2239/273 3783/2231/267 3782/2240/239 +f 3797/2241/274 3782/2240/239 3789/2233/269 +f 3795/2242/275 3788/2234/243 3787/2236/271 +f 3797/2241/274 3803/2243/281 3804/2244/276 +f 3792/2245/272 3801/2246/277 3793/2247/264 +f 3791/2229/266 3798/2248/279 3799/2249/278 +f 3797/2241/274 3798/2248/279 3790/2239/273 +f 3796/2250/268 3802/2251/280 3803/2243/281 +f 3791/2229/266 3800/2252/282 3792/2245/272 +f 3799/2249/278 3807/2253/284 3800/2252/282 +f 3803/2243/281 3811/2254/285 3804/2244/276 +f 3800/2252/282 3808/2255/286 3801/2246/277 +f 3799/2249/278 3805/2256/287 3806/2257/283 +f 3804/2244/276 3805/2256/287 3798/2248/279 +f 3803/2243/281 3809/2258/288 3810/2259/289 +f 3794/2260/270 3802/2251/280 3795/2261/275 +f 3802/2251/280 3794/2260/270 3809/2258/288 +f 3793/2247/264 3801/2246/277 3794/2262/270 +f 3801/2246/277 3808/2255/286 3794/2262/270 +f 3810/2263/289 3819/2264/258 3811/2254/285 +f 3807/2265/284 3816/2266/257 3808/2267/286 +f 3805/2256/287 3814/2268/263 3806/2257/283 +f 3808/2267/286 3812/2269/240 3794/2270/270 +f 3811/2254/285 3813/2271/242 3805/2256/287 +f 3794/2272/270 3817/2273/253 3809/2274/288 +f 3809/2274/288 3818/2275/243 3810/2263/289 +f 3806/2257/283 3815/2276/241 3807/2265/284 +f 3831/2277/364 3824/2278/238 3823/2279/271 +f 3829/2280/365 3822/2281/243 3821/2282/269 +f 3834/2283/366 3827/2284/267 3826/2285/241 +f 3824/2286/238 3833/2287/367 3825/2288/265 +f 3830/2289/368 3823/2279/271 3822/2281/243 +f 3828/2290/369 3821/2282/269 3820/2291/239 +f 3835/2292/370 3820/2291/239 3827/2284/267 +f 3833/2287/367 3826/2285/241 3825/2288/265 +f 3835/2292/370 3841/2293/371 3842/2294/372 +f 3830/2295/368 3839/2296/373 3831/2297/364 +f 3829/2280/365 3836/2298/291 3837/2299/374 +f 3835/2292/370 3836/2298/291 3828/2290/369 +f 3834/2300/366 3840/2301/375 3841/2293/371 +f 3829/2280/365 3838/2302/376 3830/2295/368 +f 3838/2302/376 3844/2303/377 3845/2304/378 +f 3842/2294/372 3848/2305/379 3849/2306/380 +f 3838/2302/376 3846/2307/381 3839/2296/373 +f 3837/2299/374 3843/2308/382 3844/2303/377 +f 3842/2294/372 3843/2308/382 3836/2298/291 +f 3841/2293/371 3847/2309/383 3848/2305/379 +f 3832/2310/290 3840/2301/375 3833/2311/367 +f 3840/2301/375 3832/2310/290 3847/2309/383 +f 3831/2297/364 3839/2296/373 3832/2312/290 +f 3839/2296/373 3846/2307/381 3832/2312/290 +f 3848/2313/379 3857/2314/257 3849/2306/380 +f 3845/2315/378 3854/2316/258 3846/2317/381 +f 3843/2308/382 3852/2318/253 3844/2303/377 +f 3846/2317/381 3850/2319/242 3832/2320/290 +f 3849/2306/380 3851/2321/240 3843/2308/382 +f 3832/2322/290 3855/2323/263 3847/2324/383 +f 3847/2324/383 3856/2325/241 3848/2313/379 +f 3844/2303/377 3853/2326/243 3845/2315/378 +f 3869/2327/364 3862/2328/238 3861/2329/271 +f 3867/2330/365 3860/2331/243 3859/2332/269 +f 3872/2333/366 3865/2334/267 3864/2335/241 +f 3870/2336/290 3863/2337/265 3862/2338/238 +f 3868/2339/368 3861/2329/271 3860/2331/243 +f 3866/2340/369 3859/2332/269 3858/2341/239 +f 3873/2342/370 3858/2341/239 3865/2334/267 +f 3871/2343/367 3864/2335/241 3863/2337/265 +f 3873/2342/370 3879/2344/371 3880/2345/372 +f 3868/2346/368 3877/2347/373 3869/2348/364 +f 3866/2340/369 3875/2349/374 3867/2330/365 +f 3873/2342/370 3874/2350/291 3866/2340/369 +f 3872/2351/366 3878/2352/375 3879/2344/371 +f 3867/2330/365 3876/2353/376 3868/2346/368 +f 3876/2353/376 3882/2354/377 3883/2355/378 +f 3879/2344/371 3887/2356/380 3880/2345/372 +f 3877/2347/373 3883/2355/378 3884/2357/381 +f 3875/2349/374 3881/2358/382 3882/2354/377 +f 3880/2345/372 3881/2358/382 3874/2350/291 +f 3878/2352/375 3886/2359/379 3879/2344/371 +f 3870/2360/290 3878/2352/375 3871/2361/367 +f 3878/2352/375 3870/2360/290 3885/2362/383 +f 3869/2348/364 3877/2347/373 3870/2363/290 +f 3877/2347/373 3884/2357/381 3870/2363/290 +f 3886/2364/379 3895/2365/257 3887/2356/380 +f 3883/2366/378 3892/2367/258 3884/2368/381 +f 3881/2358/382 3890/2369/253 3882/2354/377 +f 3884/2368/381 3888/2370/242 3870/2371/290 +f 3887/2356/380 3889/2372/240 3881/2358/382 +f 3870/2373/290 3893/2374/263 3885/2375/383 +f 3885/2375/383 3894/2376/241 3886/2364/379 +f 3882/2354/377 3891/2377/243 3883/2366/378 +f 3907/2378/364 3900/2379/238 3899/2380/271 +f 3905/2381/365 3898/2382/243 3897/2383/269 +f 3910/2384/366 3903/2385/267 3902/2386/241 +f 3908/2387/290 3901/2388/265 3900/2389/238 +f 3906/2390/368 3899/2380/271 3898/2382/243 +f 3896/2391/239 3905/2381/365 3897/2383/269 +f 3911/2392/370 3896/2391/239 3903/2385/267 +f 3909/2393/367 3902/2386/241 3901/2388/265 +f 3911/2392/370 3917/2394/371 3918/2395/372 +f 3906/2396/368 3915/2397/373 3907/2398/364 +f 3905/2381/365 3912/2399/291 3913/2400/374 +f 3911/2392/370 3912/2399/291 3904/2401/369 +f 3910/2402/366 3916/2403/375 3917/2394/371 +f 3905/2381/365 3914/2404/376 3906/2396/368 +f 3914/2404/376 3920/2405/377 3921/2406/378 +f 3917/2394/371 3925/2407/380 3918/2395/372 +f 3914/2404/376 3922/2408/381 3915/2397/373 +f 3913/2400/374 3919/2409/382 3920/2405/377 +f 3918/2395/372 3919/2409/382 3912/2399/291 +f 3917/2394/371 3923/2410/383 3924/2411/379 +f 3908/2412/290 3916/2403/375 3909/2413/367 +f 3916/2403/375 3908/2412/290 3923/2410/383 +f 3907/2398/364 3915/2397/373 3908/2414/290 +f 3915/2397/373 3922/2408/381 3908/2414/290 +f 3924/2415/379 3933/2416/257 3925/2407/380 +f 3921/2417/378 3930/2418/258 3922/2419/381 +f 3919/2409/382 3928/2420/253 3920/2405/377 +f 3922/2419/381 3926/2421/242 3908/2422/290 +f 3925/2407/380 3927/2423/240 3919/2409/382 +f 3908/2424/290 3931/2425/263 3923/2426/383 +f 3923/2426/383 3932/2427/241 3924/2415/379 +f 3920/2405/377 3929/2428/243 3921/2417/378 +f 3945/2429/364 3938/2430/238 3937/2431/271 +f 3943/2432/365 3936/2433/243 3935/2434/269 +f 3948/2435/366 3941/2436/267 3940/2437/241 +f 3946/2438/290 3939/2439/265 3938/2440/238 +f 3944/2441/368 3937/2431/271 3936/2433/243 +f 3942/2442/369 3935/2434/269 3934/2443/239 +f 3949/2444/370 3934/2443/239 3941/2436/267 +f 3947/2445/367 3940/2437/241 3939/2439/265 +f 3949/2444/370 3955/2446/371 3956/2447/372 +f 3944/2448/368 3953/2449/373 3945/2450/364 +f 3943/2432/365 3950/2451/291 3951/2452/374 +f 3949/2444/370 3950/2451/291 3942/2442/369 +f 3948/2453/366 3954/2454/375 3955/2446/371 +f 3943/2432/365 3952/2455/376 3944/2448/368 +f 3952/2455/376 3958/2456/377 3959/2457/378 +f 3955/2446/371 3963/2458/380 3956/2447/372 +f 3952/2455/376 3960/2459/381 3953/2449/373 +f 3951/2452/374 3957/2460/382 3958/2456/377 +f 3956/2447/372 3957/2460/382 3950/2451/291 +f 3954/2454/375 3962/2461/379 3955/2446/371 +f 3946/2462/290 3954/2454/375 3947/2463/367 +f 3954/2454/375 3946/2462/290 3961/2464/383 +f 3945/2450/364 3953/2449/373 3946/2465/290 +f 3953/2449/373 3960/2459/381 3946/2465/290 +f 3962/2466/379 3971/2467/257 3963/2458/380 +f 3959/2468/378 3968/2469/258 3960/2470/381 +f 3957/2460/382 3966/2471/253 3958/2456/377 +f 3960/2470/381 3964/2472/242 3946/2473/290 +f 3963/2458/380 3965/2474/240 3957/2460/382 +f 3946/2475/290 3969/2476/263 3961/2477/383 +f 3961/2477/383 3970/2478/241 3962/2466/379 +f 3958/2456/377 3967/2479/243 3959/2468/378 +f 3983/2480/364 3976/2481/238 3975/2482/271 +f 3981/2483/365 3974/2484/243 3973/2485/269 +f 3986/2486/366 3979/2487/267 3978/2488/241 +f 3976/2489/238 3985/2490/367 3977/2491/265 +f 3982/2492/368 3975/2482/271 3974/2484/243 +f 3980/2493/369 3973/2485/269 3972/2494/239 +f 3987/2495/370 3972/2494/239 3979/2487/267 +f 3985/2490/367 3978/2488/241 3977/2491/265 +f 3987/2495/370 3993/2496/371 3994/2497/372 +f 3982/2498/368 3991/2499/373 3983/2500/364 +f 3981/2483/365 3988/2501/291 3989/2502/374 +f 3987/2495/370 3988/2501/291 3980/2493/369 +f 3986/2503/366 3992/2504/375 3993/2496/371 +f 3981/2483/365 3990/2505/376 3982/2498/368 +f 3990/2505/376 3996/2506/377 3997/2507/378 +f 3993/2496/371 4001/2508/380 3994/2497/372 +f 3991/2499/373 3997/2507/378 3998/2509/381 +f 3989/2502/374 3995/2510/382 3996/2506/377 +f 3994/2497/372 3995/2510/382 3988/2501/291 +f 3993/2496/371 3999/2511/383 4000/2512/379 +f 3984/2513/290 3992/2504/375 3985/2514/367 +f 3992/2504/375 3984/2513/290 3999/2511/383 +f 3983/2500/364 3991/2499/373 3984/2515/290 +f 3991/2499/373 3998/2509/381 3984/2515/290 +f 4000/2516/379 4009/2517/257 4001/2508/380 +f 3997/2518/378 4006/2519/258 3998/2520/381 +f 3995/2510/382 4004/2521/253 3996/2506/377 +f 3998/2520/381 4002/2522/242 3984/2523/290 +f 4001/2508/380 4003/2524/240 3995/2510/382 +f 3984/2525/290 4007/2526/263 3999/2527/383 +f 3999/2527/383 4008/2528/241 4000/2516/379 +f 3996/2506/377 4005/2529/243 3997/2518/378 +f 4014/2530/238 4021/2531/265 4013/2532/265 +f 4014/2533/238 4023/2534/271 4022/2535/238 +f 4016/2536/243 4023/2534/271 4015/2537/271 +f 4017/2538/269 4024/2539/243 4016/2536/243 +f 4010/2540/239 4025/2541/269 4017/2538/269 +f 4011/2542/267 4018/2543/239 4010/2540/239 +f 4012/2544/241 4019/2545/267 4011/2542/267 +f 4013/2532/265 4020/2546/241 4012/2544/241 +f 4030/2547/238 4037/2548/265 4029/2549/265 +f 4031/2550/271 4038/2551/238 4030/2552/238 +f 4032/2553/243 4039/2554/271 4031/2550/271 +f 4033/2555/269 4040/2556/243 4032/2553/243 +f 4026/2557/239 4041/2558/269 4033/2555/269 +f 4027/2559/267 4034/2560/239 4026/2557/239 +f 4028/2561/241 4035/2562/267 4027/2559/267 +f 4029/2549/265 4036/2563/241 4028/2561/241 +f 4045/2564/265 4054/2565/238 4053/2566/265 +f 4047/2567/271 4054/2568/238 4046/2569/238 +f 4048/2570/243 4055/2571/271 4047/2567/271 +f 4049/2572/269 4056/2573/243 4048/2570/243 +f 4042/2574/239 4057/2575/269 4049/2572/269 +f 4043/2576/267 4050/2577/239 4042/2574/239 +f 4043/2576/267 4052/2578/241 4051/2579/267 +f 4045/2564/265 4052/2578/241 4044/2580/241 +f 4062/2581/238 4069/2582/265 4061/2583/265 +f 4063/2584/271 4070/2585/238 4062/2586/238 +f 4064/2587/243 4071/2588/271 4063/2584/271 +f 4065/2589/269 4072/2590/243 4064/2587/243 +f 4058/2591/239 4073/2592/269 4065/2589/269 +f 4059/2593/267 4066/2594/239 4058/2591/239 +f 4060/2595/241 4067/2596/267 4059/2593/267 +f 4061/2583/265 4068/2597/241 4060/2595/241 +f 3316/2598/261 4080/554/242 3317/2599/242 +f 3317/2599/242 4094/584/260 3302/1671/260 +f 3308/2600/262 4087/571/240 3309/2601/240 +f 3315/2602/263 4079/555/261 3316/2598/261 +f 3307/1680/253 4088/572/262 3308/2600/262 +f 3314/1679/254 4081/557/263 3315/2602/263 +f 3300/553/262 4096/2603/240 3301/585/240 +f 3301/585/240 4110/2604/259 4078/583/259 +f 3292/570/261 4103/2605/242 3293/1373/242 +f 3299/556/253 4095/2606/262 3300/553/262 +f 3291/573/263 4104/2607/261 3292/570/261 +f 3298/559/252 4097/2608/253 3299/556/253 +f 4074/575/254 4105/2609/263 3291/573/263 +f 3297/560/243 4098/2610/252 3298/559/252 +f 4075/577/241 4106/2611/254 4074/575/254 +f 3296/563/256 4099/2612/243 3297/560/243 +f 4076/580/255 4107/2613/241 4075/577/241 +f 3296/563/256 4101/2614/258 4100/2615/256 +f 4077/582/257 4108/2616/255 4076/580/255 +f 3294/566/260 4101/2614/258 3295/564/258 +f 4078/583/259 4109/2617/257 4077/582/257 +f 3293/568/242 4102/2618/260 3294/566/260 +f 4134/2619/244 4121/2620/242 4123/2621/242 +f 4127/2622/245 4117/2623/246 4128/2624/246 +f 4130/2625/247 4114/2626/248 4131/2627/248 +f 4123/2621/242 4122/2628/249 4124/2629/249 +f 4133/2630/250 4111/2631/244 4134/2619/244 +f 4126/2632/241 4118/2633/245 4127/2622/245 +f 4129/2634/240 4115/2635/247 4130/2625/247 +f 4132/2636/243 4112/2637/250 4133/2630/250 +f 4125/2638/251 4119/2639/241 4126/2640/241 +f 4128/2624/246 4116/2641/240 4129/2634/240 +f 4131/2627/248 4113/2642/243 4132/2636/243 +f 4124/2629/249 4120/2643/251 4125/2638/251 +f 4158/2644/244 4145/2645/242 4147/2646/242 +f 4151/2647/245 4141/2648/246 4152/2649/246 +f 4154/2650/247 4138/2651/248 4155/2652/248 +f 4147/2646/242 4146/2653/249 4148/2654/249 +f 4157/2655/250 4135/2656/244 4158/2644/244 +f 4150/2657/241 4142/2658/245 4151/2647/245 +f 4153/2659/240 4139/2660/247 4154/2650/247 +f 4156/2661/243 4136/2662/250 4157/2655/250 +f 4149/2663/251 4143/2664/241 4150/2665/241 +f 4152/2649/246 4140/2666/240 4153/2659/240 +f 4155/2652/248 4137/2667/243 4156/2661/243 +f 4148/2654/249 4144/2668/251 4149/2663/251 +f 4182/2669/244 4169/2670/242 4171/2671/242 +f 4175/2672/245 4165/2673/246 4176/2674/246 +f 4178/2675/247 4162/2676/248 4179/2677/248 +f 4171/2671/242 4170/2678/249 4172/2679/249 +f 4181/2680/250 4159/2681/244 4182/2669/244 +f 4174/2682/241 4166/2683/245 4175/2672/245 +f 4177/2684/240 4163/2685/247 4178/2675/247 +f 4180/2686/243 4160/2687/250 4181/2680/250 +f 4173/2688/251 4167/2689/241 4174/2690/241 +f 4176/2674/246 4164/2691/240 4177/2684/240 +f 4179/2677/248 4161/2692/243 4180/2686/243 +f 4172/2679/249 4168/2693/251 4173/2688/251 +f 4206/2694/244 4193/2695/242 4195/2696/242 +f 4199/2697/245 4189/2698/246 4200/2699/246 +f 4202/2700/247 4186/2701/248 4203/2702/248 +f 4195/2696/242 4194/2703/249 4196/2704/249 +f 4205/2705/250 4183/2706/244 4206/2694/244 +f 4198/2707/241 4190/2708/245 4199/2697/245 +f 4201/2709/240 4187/2710/247 4202/2700/247 +f 4204/2711/243 4184/2712/250 4205/2705/250 +f 4197/2713/251 4191/2714/241 4198/2715/241 +f 4200/2699/246 4188/2716/240 4201/2709/240 +f 4203/2702/248 4185/2717/243 4204/2711/243 +f 4196/2704/249 4192/2718/251 4197/2713/251 +f 4230/2719/246 4217/2720/240 4219/2721/240 +f 4223/2722/250 4213/2723/244 4224/2724/244 +f 4226/2725/249 4210/2726/251 4227/2727/251 +f 4219/2721/240 4218/2728/247 4220/2729/247 +f 4229/2730/245 4207/2731/246 4230/2719/246 +f 4222/2732/243 4214/2733/250 4223/2722/250 +f 4225/2734/242 4211/2735/249 4226/2725/249 +f 4228/2736/241 4208/2737/245 4229/2730/245 +f 4221/2738/248 4215/2739/243 4222/2740/243 +f 4224/2724/244 4212/2741/242 4225/2734/242 +f 4227/2727/251 4209/2742/241 4228/2736/241 +f 4220/2729/247 4216/2743/248 4221/2738/248 +f 4254/2744/246 4241/2745/240 4243/2746/240 +f 4247/2747/250 4237/2748/244 4248/2749/244 +f 4250/2750/249 4234/2751/251 4251/2752/251 +f 4243/2746/240 4242/2753/247 4244/2754/247 +f 4253/2755/245 4231/2756/246 4254/2744/246 +f 4246/2757/243 4238/2758/250 4247/2747/250 +f 4249/2759/242 4235/2760/249 4250/2750/249 +f 4252/2761/241 4232/2762/245 4253/2755/245 +f 4245/2763/248 4239/2764/243 4246/2765/243 +f 4248/2749/244 4236/2766/242 4249/2759/242 +f 4251/2752/251 4233/2767/241 4252/2761/241 +f 4244/2754/247 4240/2768/248 4245/2763/248 +f 4278/2769/246 4265/2770/240 4267/2771/240 +f 4271/2772/250 4261/2773/244 4272/2774/244 +f 4274/2775/249 4258/2776/251 4275/2777/251 +f 4267/2771/240 4266/2778/247 4268/2779/247 +f 4277/2780/245 4255/2781/246 4278/2769/246 +f 4270/2782/243 4262/2783/250 4271/2772/250 +f 4273/2784/242 4259/2785/249 4274/2775/249 +f 4276/2786/241 4256/2787/245 4277/2780/245 +f 4269/2788/248 4263/2789/243 4270/2790/243 +f 4272/2774/244 4260/2791/242 4273/2784/242 +f 4275/2777/251 4257/2792/241 4276/2786/241 +f 4268/2779/247 4264/2793/248 4269/2788/248 +f 4302/2794/246 4289/2795/240 4291/2796/240 +f 4295/2797/250 4285/2798/244 4296/2799/244 +f 4298/2800/249 4282/2801/251 4299/2802/251 +f 4291/2796/240 4290/2803/247 4292/2804/247 +f 4301/2805/245 4279/2806/246 4302/2794/246 +f 4294/2807/243 4286/2808/250 4295/2797/250 +f 4297/2809/242 4283/2810/249 4298/2800/249 +f 4300/2811/241 4280/2812/245 4301/2805/245 +f 4293/2813/248 4287/2814/243 4294/2815/243 +f 4296/2799/244 4284/2816/242 4297/2809/242 +f 4299/2802/251 4281/2817/241 4300/2811/241 +f 4292/2804/247 4288/2818/248 4293/2813/248 +f 4326/2819/246 4313/2820/240 4315/2821/240 +f 4319/2822/250 4309/2823/244 4320/2824/244 +f 4322/2825/249 4306/2826/251 4323/2827/251 +f 4315/2821/240 4314/2828/247 4316/2829/247 +f 4325/2830/245 4303/2831/246 4326/2819/246 +f 4318/2832/243 4310/2833/250 4319/2822/250 +f 4321/2834/242 4307/2835/249 4322/2825/249 +f 4324/2836/241 4304/2837/245 4325/2830/245 +f 4317/2838/248 4311/2839/243 4318/2840/243 +f 4320/2824/244 4308/2841/242 4321/2834/242 +f 4323/2827/251 4305/2842/241 4324/2836/241 +f 4316/2829/247 4312/2843/248 4317/2838/248 +f 4486/2844/279 4471/2845/239 4478/2846/279 +f 4484/2847/290 4477/2848/242 4476/2849/290 +f 4482/2850/270 4475/2851/238 4474/2852/270 +f 4480/2853/291 4473/2854/240 4472/2855/291 +f 4485/2856/242 4478/2846/279 4477/2848/242 +f 4483/2857/238 4476/2849/290 4475/2858/238 +f 4481/2859/240 4474/2852/270 4473/2854/240 +f 4479/2860/239 4472/2855/291 4471/2845/239 +f 4498/2861/324 4491/2862/238 4490/2863/270 +f 4496/2864/325 4489/2865/240 4488/2866/291 +f 4501/2867/326 4494/2868/279 4493/2869/242 +f 4499/2870/271 4492/2871/290 4491/2872/238 +f 4497/2873/327 4490/2863/270 4489/2865/240 +f 4495/2874/328 4488/2866/291 4487/2875/239 +f 4502/2876/329 4487/2875/239 4494/2868/279 +f 4500/2877/330 4493/2869/242 4492/2871/290 +f 4501/2878/326 4509/2879/332 4502/2876/329 +f 4497/2880/327 4506/2881/333 4498/2882/324 +f 4495/2874/328 4504/2883/334 4496/2864/325 +f 4495/2874/328 4509/2879/332 4503/2884/267 +f 4501/2878/326 4507/2885/335 4508/2886/331 +f 4496/2864/325 4505/2887/336 4497/2880/327 +f 4504/2883/334 4512/2888/338 4505/2887/336 +f 4508/2886/331 4516/2889/339 4509/2879/332 +f 4506/2881/333 4512/2888/338 4513/2890/340 +f 4503/2884/267 4511/2891/337 4504/2883/334 +f 4503/2884/267 4516/2889/339 4510/2892/341 +f 4507/2885/335 4515/2893/342 4508/2886/331 +f 4499/2894/271 4507/2885/335 4500/2895/330 +f 4507/2885/335 4499/2894/271 4514/2896/343 +f 4498/2882/324 4506/2881/333 4499/2897/271 +f 4506/2881/333 4513/2890/340 4499/2897/271 +f 4515/2898/342 4524/2899/344 4516/2889/339 +f 4512/2900/338 4521/2901/345 4513/2902/340 +f 4510/2892/341 4519/2903/346 4511/2891/337 +f 4513/2902/340 4517/2904/347 4499/2905/271 +f 4516/2889/339 4518/2906/267 4510/2892/341 +f 4499/2907/271 4522/2908/348 4514/2909/343 +f 4514/2909/343 4523/2910/349 4515/2898/342 +f 4511/2891/337 4520/2911/350 4512/2900/338 +f 4517/2904/347 4528/2912/351 4525/2913/271 +f 4522/2908/348 4530/2914/352 4523/2915/349 +f 4520/2916/350 4526/2917/353 4527/2918/354 +f 4517/2919/347 4529/2920/355 4522/2908/348 +f 4523/2915/349 4531/2921/356 4524/2922/344 +f 4521/2901/345 4527/2918/354 4528/2912/351 +f 4529/2920/355 4532/2923/360 4536/2924/357 +f 4530/2914/352 4536/2924/357 4537/2925/358 +f 4526/2917/353 4534/2926/359 4527/2918/354 +f 4528/2912/351 4532/2927/360 4525/2913/271 +f 4531/2921/356 4537/2925/358 4538/2928/361 +f 4527/2918/354 4535/2929/362 4528/2912/351 +f 4524/2922/344 4531/2921/356 4518/2930/267 +f 4531/2921/356 4538/2928/361 4518/2930/267 +f 4518/2930/267 4526/2917/353 4519/2931/346 +f 4526/2917/353 4518/2930/267 4533/2932/363 +f 4536/2924/357 4545/2933/242 4537/2934/358 +f 4533/2935/363 4542/2936/240 4534/2937/359 +f 4518/2938/267 4541/2939/291 4533/2935/363 +f 4535/2929/362 4540/2940/238 4532/2927/360 +f 4538/2941/361 4539/2942/239 4518/2938/267 +f 4537/2934/358 4546/2943/279 4538/2941/361 +f 4534/2937/359 4543/2944/270 4535/2929/362 +f 4532/2923/360 4544/2945/290 4536/2924/357 +f 4558/2946/324 4551/2947/238 4550/2948/270 +f 4556/2949/325 4549/2950/240 4548/2951/291 +f 4561/2952/326 4554/2953/279 4553/2954/242 +f 4559/2955/271 4552/2956/290 4551/2957/238 +f 4557/2958/327 4550/2948/270 4549/2950/240 +f 4555/2959/328 4548/2951/291 4547/2960/239 +f 4562/2961/329 4547/2960/239 4554/2953/279 +f 4560/2962/330 4553/2954/242 4552/2956/290 +f 4561/2963/326 4569/2964/332 4562/2961/329 +f 4557/2965/327 4566/2966/333 4558/2967/324 +f 4555/2959/328 4564/2968/334 4556/2949/325 +f 4555/2959/328 4569/2964/332 4563/2969/267 +f 4561/2963/326 4567/2970/335 4568/2971/331 +f 4556/2949/325 4565/2972/336 4557/2965/327 +f 4565/2972/336 4571/2973/337 4572/2974/338 +f 4568/2971/331 4576/2975/339 4569/2964/332 +f 4566/2966/333 4572/2974/338 4573/2976/340 +f 4563/2969/267 4571/2973/337 4564/2968/334 +f 4563/2969/267 4576/2975/339 4570/2977/341 +f 4567/2970/335 4575/2978/342 4568/2971/331 +f 4559/2979/271 4567/2970/335 4560/2980/330 +f 4567/2970/335 4559/2979/271 4574/2981/343 +f 4558/2967/324 4566/2966/333 4559/2982/271 +f 4566/2966/333 4573/2976/340 4559/2982/271 +f 4575/2983/342 4584/2984/344 4576/2975/339 +f 4572/2985/338 4581/2986/345 4573/2987/340 +f 4570/2977/341 4579/2988/346 4571/2973/337 +f 4573/2987/340 4577/2989/347 4559/2990/271 +f 4576/2975/339 4578/2991/267 4570/2977/341 +f 4559/2992/271 4582/2993/348 4574/2994/343 +f 4574/2994/343 4583/2995/349 4575/2983/342 +f 4571/2973/337 4580/2996/350 4572/2985/338 +f 4577/2989/347 4588/2997/351 4585/2998/271 +f 4582/2993/348 4590/2999/352 4583/3000/349 +f 4580/3001/350 4586/3002/353 4587/3003/354 +f 4577/3004/347 4589/3005/355 4582/2993/348 +f 4583/3000/349 4591/3006/356 4584/3007/344 +f 4581/2986/345 4587/3003/354 4588/2997/351 +f 4589/3005/355 4592/3008/360 4596/3009/357 +f 4590/2999/352 4596/3009/357 4597/3010/358 +f 4586/3002/353 4594/3011/359 4587/3003/354 +f 4588/2997/351 4592/3012/360 4585/2998/271 +f 4591/3006/356 4597/3010/358 4598/3013/361 +f 4588/2997/351 4594/3011/359 4595/3014/362 +f 4584/3007/344 4591/3006/356 4578/3015/267 +f 4591/3006/356 4598/3013/361 4578/3015/267 +f 4578/3015/267 4586/3002/353 4579/3016/346 +f 4586/3002/353 4578/3015/267 4593/3017/363 +f 4596/3009/357 4605/3018/242 4597/3019/358 +f 4593/3020/363 4602/3021/240 4594/3022/359 +f 4578/3023/267 4601/3024/291 4593/3020/363 +f 4595/3014/362 4600/3025/238 4592/3012/360 +f 4598/3026/361 4599/3027/239 4578/3023/267 +f 4597/3019/358 4606/3028/279 4598/3026/361 +f 4594/3022/359 4603/3029/270 4595/3014/362 +f 4592/3008/360 4604/3030/290 4596/3009/357 +f 4618/3031/324 4611/3032/238 4610/3033/270 +f 4616/3034/325 4609/3035/240 4608/3036/291 +f 4621/3037/326 4614/3038/279 4613/3039/242 +f 4619/3040/271 4612/3041/290 4611/3042/238 +f 4617/3043/327 4610/3033/270 4609/3035/240 +f 4615/3044/328 4608/3036/291 4607/3045/239 +f 4622/3046/329 4607/3045/239 4614/3038/279 +f 4620/3047/330 4613/3039/242 4612/3041/290 +f 4622/3046/329 4628/3048/331 4629/3049/332 +f 4617/3050/327 4626/3051/333 4618/3052/324 +f 4615/3044/328 4624/3053/334 4616/3034/325 +f 4622/3046/329 4623/3054/267 4615/3044/328 +f 4621/3055/326 4627/3056/335 4628/3048/331 +f 4616/3034/325 4625/3057/336 4617/3050/327 +f 4625/3057/336 4631/3058/337 4632/3059/338 +f 4628/3048/331 4636/3060/339 4629/3049/332 +f 4626/3051/333 4632/3059/338 4633/3061/340 +f 4623/3054/267 4631/3058/337 4624/3053/334 +f 4623/3054/267 4636/3060/339 4630/3062/341 +f 4627/3056/335 4635/3063/342 4628/3048/331 +f 4619/3064/271 4627/3056/335 4620/3065/330 +f 4627/3056/335 4619/3064/271 4634/3066/343 +f 4618/3052/324 4626/3051/333 4619/3067/271 +f 4626/3051/333 4633/3061/340 4619/3067/271 +f 4635/3068/342 4644/3069/344 4636/3060/339 +f 4632/3070/338 4641/3071/345 4633/3072/340 +f 4630/3062/341 4639/3073/346 4631/3058/337 +f 4633/3072/340 4637/3074/347 4619/3075/271 +f 4636/3060/339 4638/3076/267 4630/3062/341 +f 4619/3077/271 4642/3078/348 4634/3079/343 +f 4634/3079/343 4643/3080/349 4635/3068/342 +f 4631/3058/337 4640/3081/350 4632/3070/338 +f 4637/3074/347 4648/3082/351 4645/3083/271 +f 4642/3078/348 4650/3084/352 4643/3085/349 +f 4640/3086/350 4646/3087/353 4647/3088/354 +f 4637/3089/347 4649/3090/355 4642/3078/348 +f 4643/3085/349 4651/3091/356 4644/3092/344 +f 4641/3071/345 4647/3088/354 4648/3082/351 +f 4649/3090/355 4652/3093/360 4656/3094/357 +f 4650/3084/352 4656/3094/357 4657/3095/358 +f 4646/3087/353 4654/3096/359 4647/3088/354 +f 4648/3082/351 4652/3097/360 4645/3083/271 +f 4651/3091/356 4657/3095/358 4658/3098/361 +f 4647/3088/354 4655/3099/362 4648/3082/351 +f 4644/3092/344 4651/3091/356 4638/3100/267 +f 4651/3091/356 4658/3098/361 4638/3100/267 +f 4638/3100/267 4646/3087/353 4639/3101/346 +f 4646/3087/353 4638/3100/267 4653/3102/363 +f 4656/3094/357 4665/3103/242 4657/3104/358 +f 4653/3105/363 4662/3106/240 4654/3107/359 +f 4638/3108/267 4661/3109/291 4653/3105/363 +f 4655/3099/362 4660/3110/238 4652/3097/360 +f 4658/3111/361 4659/3112/239 4638/3108/267 +f 4657/3104/358 4666/3113/279 4658/3111/361 +f 4654/3107/359 4663/3114/270 4655/3099/362 +f 4652/3093/360 4664/3115/290 4656/3094/357 +f 4678/3116/324 4671/3117/238 4670/3118/270 +f 4676/3119/325 4669/3120/240 4668/3121/291 +f 4681/3122/326 4674/3123/279 4673/3124/242 +f 4679/3125/271 4672/3126/290 4671/3127/238 +f 4677/3128/327 4670/3118/270 4669/3120/240 +f 4675/3129/328 4668/3121/291 4667/3130/239 +f 4682/3131/329 4667/3130/239 4674/3123/279 +f 4680/3132/330 4673/3124/242 4672/3126/290 +f 4681/3133/326 4689/3134/332 4682/3131/329 +f 4677/3135/327 4686/3136/333 4678/3137/324 +f 4676/3119/325 4683/3138/267 4684/3139/334 +f 4682/3131/329 4683/3138/267 4675/3129/328 +f 4681/3133/326 4687/3140/335 4688/3141/331 +f 4676/3119/325 4685/3142/336 4677/3135/327 +f 4685/3142/336 4691/3143/337 4692/3144/338 +f 4688/3141/331 4696/3145/339 4689/3134/332 +f 4686/3136/333 4692/3144/338 4693/3146/340 +f 4683/3138/267 4691/3143/337 4684/3139/334 +f 4683/3138/267 4696/3145/339 4690/3147/341 +f 4687/3140/335 4695/3148/342 4688/3141/331 +f 4679/3149/271 4687/3140/335 4680/3150/330 +f 4687/3140/335 4679/3149/271 4694/3151/343 +f 4678/3137/324 4686/3136/333 4679/3152/271 +f 4686/3136/333 4693/3146/340 4679/3152/271 +f 4695/3153/342 4704/3154/344 4696/3145/339 +f 4692/3155/338 4701/3156/345 4693/3157/340 +f 4690/3147/341 4699/3158/346 4691/3143/337 +f 4693/3157/340 4697/3159/347 4679/3160/271 +f 4696/3145/339 4698/3161/267 4690/3147/341 +f 4679/3162/271 4702/3163/348 4694/3164/343 +f 4694/3164/343 4703/3165/349 4695/3153/342 +f 4691/3143/337 4700/3166/350 4692/3155/338 +f 4697/3159/347 4708/3167/351 4705/3168/271 +f 4702/3163/348 4710/3169/352 4703/3170/349 +f 4700/3171/350 4706/3172/353 4707/3173/354 +f 4697/3174/347 4709/3175/355 4702/3163/348 +f 4703/3170/349 4711/3176/356 4704/3177/344 +f 4701/3156/345 4707/3173/354 4708/3167/351 +f 4709/3175/355 4712/3178/360 4716/3179/357 +f 4710/3169/352 4716/3179/357 4717/3180/358 +f 4706/3172/353 4714/3181/359 4707/3173/354 +f 4708/3167/351 4712/3182/360 4705/3168/271 +f 4711/3176/356 4717/3180/358 4718/3183/361 +f 4708/3167/351 4714/3181/359 4715/3184/362 +f 4704/3177/344 4711/3176/356 4698/3185/267 +f 4711/3176/356 4718/3183/361 4698/3185/267 +f 4698/3185/267 4706/3172/353 4699/3186/346 +f 4706/3172/353 4698/3185/267 4713/3187/363 +f 4716/3179/357 4725/3188/242 4717/3189/358 +f 4713/3190/363 4722/3191/240 4714/3192/359 +f 4698/3193/267 4721/3194/291 4713/3190/363 +f 4715/3184/362 4720/3195/238 4712/3182/360 +f 4718/3196/361 4719/3197/239 4698/3193/267 +f 4717/3189/358 4726/3198/279 4718/3196/361 +f 4714/3192/359 4723/3199/270 4715/3184/362 +f 4712/3178/360 4724/3200/290 4716/3179/357 +f 4738/3201/384 4731/3202/238 4730/3203/290 +f 4736/3204/385 4729/3205/242 4728/3206/279 +f 4741/3207/386 4734/3208/291 4733/3209/240 +f 4739/3210/265 4732/3211/270 4731/3212/238 +f 4737/3213/387 4730/3203/290 4729/3205/242 +f 4735/3214/388 4728/3206/279 4727/3215/239 +f 4742/3216/389 4727/3215/239 4734/3208/291 +f 4740/3217/390 4733/3209/240 4732/3211/270 +f 4742/3216/389 4748/3218/391 4749/3219/392 +f 4738/3220/384 4745/3221/393 4746/3222/394 +f 4735/3214/388 4744/3223/395 4736/3204/385 +f 4735/3214/388 4749/3219/392 4743/3224/269 +f 4740/3225/390 4748/3218/391 4741/3226/386 +f 4737/3227/387 4744/3223/395 4745/3221/393 +f 4745/3221/393 4751/3228/396 4752/3229/397 +f 4748/3218/391 4756/3230/398 4749/3219/392 +f 4746/3222/394 4752/3229/397 4753/3231/399 +f 4743/3224/269 4751/3228/396 4744/3223/395 +f 4743/3224/269 4756/3230/398 4750/3232/400 +f 4747/3233/401 4755/3234/402 4748/3218/391 +f 4739/3235/265 4747/3233/401 4740/3225/390 +f 4747/3233/401 4739/3235/265 4754/3236/403 +f 4738/3220/384 4746/3222/394 4739/3237/265 +f 4746/3222/394 4753/3231/399 4739/3237/265 +f 4755/3238/402 4764/3239/404 4756/3230/398 +f 4752/3240/397 4761/3241/405 4753/3242/399 +f 4750/3232/400 4759/3243/406 4751/3228/396 +f 4753/3242/399 4757/3244/407 4739/3245/265 +f 4756/3230/398 4758/3246/269 4750/3232/400 +f 4739/3247/265 4762/3248/408 4754/3249/403 +f 4754/3249/403 4763/3250/409 4755/3238/402 +f 4751/3228/396 4760/3251/410 4752/3240/397 +f 4757/3244/407 4768/3252/411 4765/3253/265 +f 4762/3248/408 4770/3254/412 4763/3255/409 +f 4760/3256/410 4766/3257/413 4767/3258/414 +f 4757/3259/407 4769/3260/415 4762/3248/408 +f 4763/3255/409 4771/3261/416 4764/3262/404 +f 4761/3241/405 4767/3258/414 4768/3252/411 +f 4769/3260/415 4772/3263/417 4776/3264/418 +f 4770/3254/412 4776/3264/418 4777/3265/419 +f 4766/3257/413 4774/3266/420 4767/3258/414 +f 4768/3252/411 4772/3267/417 4765/3253/265 +f 4771/3261/416 4777/3265/419 4778/3268/421 +f 4767/3258/414 4775/3269/422 4768/3252/411 +f 4764/3262/404 4771/3261/416 4758/3270/269 +f 4771/3261/416 4778/3268/421 4758/3270/269 +f 4758/3270/269 4766/3257/413 4759/3271/406 +f 4766/3257/413 4758/3270/269 4773/3272/423 +f 4776/3264/418 4785/3273/240 4777/3274/419 +f 4774/3275/420 4781/3276/279 4782/3277/242 +f 4758/3278/269 4781/3276/279 4773/3279/423 +f 4775/3269/422 4780/3280/238 4772/3267/417 +f 4778/3281/421 4779/3282/239 4758/3278/269 +f 4777/3274/419 4786/3283/291 4778/3281/421 +f 4774/3275/420 4783/3284/290 4775/3269/422 +f 4772/3263/417 4784/3285/270 4776/3264/418 +f 4798/3286/384 4791/3287/238 4790/3288/290 +f 4796/3289/385 4789/3290/242 4788/3291/279 +f 4801/3292/386 4794/3293/291 4793/3294/240 +f 4799/3295/265 4792/3296/270 4791/3297/238 +f 4797/3298/387 4790/3288/290 4789/3290/242 +f 4795/3299/388 4788/3291/279 4787/3300/239 +f 4802/3301/389 4787/3300/239 4794/3293/291 +f 4800/3302/390 4793/3294/240 4792/3296/270 +f 4802/3301/389 4808/3303/391 4809/3304/392 +f 4797/3305/387 4806/3306/394 4798/3307/384 +f 4795/3299/388 4804/3308/395 4796/3289/385 +f 4795/3299/388 4809/3304/392 4803/3309/269 +f 4801/3310/386 4807/3311/401 4808/3303/391 +f 4796/3289/385 4805/3312/393 4797/3305/387 +f 4805/3312/393 4811/3313/396 4812/3314/397 +f 4808/3303/391 4816/3315/398 4809/3304/392 +f 4806/3306/394 4812/3314/397 4813/3316/399 +f 4803/3309/269 4811/3313/396 4804/3308/395 +f 4803/3309/269 4816/3315/398 4810/3317/400 +f 4807/3311/401 4815/3318/402 4808/3303/391 +f 4799/3319/265 4807/3311/401 4800/3320/390 +f 4807/3311/401 4799/3319/265 4814/3321/403 +f 4798/3307/384 4806/3306/394 4799/3322/265 +f 4806/3306/394 4813/3316/399 4799/3322/265 +f 4815/3323/402 4824/3324/404 4816/3315/398 +f 4812/3325/397 4821/3326/405 4813/3327/399 +f 4810/3317/400 4819/3328/406 4811/3313/396 +f 4813/3327/399 4817/3329/407 4799/3330/265 +f 4816/3315/398 4818/3331/269 4810/3317/400 +f 4799/3332/265 4822/3333/408 4814/3334/403 +f 4814/3334/403 4823/3335/409 4815/3323/402 +f 4811/3313/396 4820/3336/410 4812/3325/397 +f 4821/3326/405 4825/3337/265 4817/3329/407 +f 4822/3333/408 4830/3338/412 4823/3339/409 +f 4820/3340/410 4826/3341/413 4827/3342/414 +f 4817/3343/407 4829/3344/415 4822/3333/408 +f 4823/3339/409 4831/3345/416 4824/3346/404 +f 4821/3326/405 4827/3342/414 4828/3347/411 +f 4829/3344/415 4832/3348/417 4836/3349/418 +f 4830/3338/412 4836/3349/418 4837/3350/419 +f 4826/3341/413 4834/3351/420 4827/3342/414 +f 4828/3347/411 4832/3352/417 4825/3337/265 +f 4831/3345/416 4837/3350/419 4838/3353/421 +f 4827/3342/414 4835/3354/422 4828/3347/411 +f 4824/3346/404 4831/3345/416 4818/3355/269 +f 4831/3345/416 4838/3353/421 4818/3355/269 +f 4818/3355/269 4826/3341/413 4819/3356/406 +f 4826/3341/413 4818/3355/269 4833/3357/423 +f 4836/3349/418 4845/3358/240 4837/3359/419 +f 4833/3360/423 4842/3361/242 4834/3362/420 +f 4818/3363/269 4841/3364/279 4833/3360/423 +f 4835/3354/422 4840/3365/238 4832/3352/417 +f 4838/3366/421 4839/3367/239 4818/3363/269 +f 4837/3359/419 4846/3368/291 4838/3366/421 +f 4834/3362/420 4843/3369/290 4835/3354/422 +f 4832/3348/417 4844/3370/270 4836/3349/418 +f 4858/3371/384 4851/3372/238 4850/3373/290 +f 4856/3374/385 4849/3375/242 4848/3376/279 +f 4861/3377/386 4854/3378/291 4853/3379/240 +f 4859/3380/265 4852/3381/270 4851/3382/238 +f 4857/3383/387 4850/3373/290 4849/3375/242 +f 4855/3384/388 4848/3376/279 4847/3385/239 +f 4862/3386/389 4847/3385/239 4854/3378/291 +f 4860/3387/390 4853/3379/240 4852/3381/270 +f 4862/3386/389 4868/3388/391 4869/3389/392 +f 4857/3390/387 4866/3391/394 4858/3392/384 +f 4855/3384/388 4864/3393/395 4856/3374/385 +f 4855/3384/388 4869/3389/392 4863/3394/269 +f 4861/3395/386 4867/3396/401 4868/3388/391 +f 4856/3374/385 4865/3397/393 4857/3390/387 +f 4864/3393/395 4872/3398/397 4865/3397/393 +f 4868/3388/391 4876/3399/398 4869/3389/392 +f 4866/3391/394 4872/3398/397 4873/3400/399 +f 4863/3394/269 4871/3401/396 4864/3393/395 +f 4863/3394/269 4876/3399/398 4870/3402/400 +f 4867/3396/401 4875/3403/402 4868/3388/391 +f 4859/3404/265 4867/3396/401 4860/3405/390 +f 4867/3396/401 4859/3404/265 4874/3406/403 +f 4858/3392/384 4866/3391/394 4859/3407/265 +f 4866/3391/394 4873/3400/399 4859/3407/265 +f 4875/3408/402 4884/3409/404 4876/3399/398 +f 4872/3410/397 4881/3411/405 4873/3412/399 +f 4870/3402/400 4879/3413/406 4871/3401/396 +f 4873/3412/399 4877/3414/407 4859/3415/265 +f 4876/3399/398 4878/3416/269 4870/3402/400 +f 4859/3417/265 4882/3418/408 4874/3419/403 +f 4874/3419/403 4883/3420/409 4875/3408/402 +f 4871/3401/396 4880/3421/410 4872/3410/397 +f 4877/3414/407 4888/3422/411 4885/3423/265 +f 4882/3418/408 4890/3424/412 4883/3425/409 +f 4880/3426/410 4886/3427/413 4887/3428/414 +f 4877/3429/407 4889/3430/415 4882/3418/408 +f 4883/3425/409 4891/3431/416 4884/3432/404 +f 4881/3411/405 4887/3428/414 4888/3422/411 +f 4889/3430/415 4892/3433/417 4896/3434/418 +f 4890/3424/412 4896/3434/418 4897/3435/419 +f 4886/3427/413 4894/3436/420 4887/3428/414 +f 4888/3422/411 4892/3437/417 4885/3423/265 +f 4891/3431/416 4897/3435/419 4898/3438/421 +f 4887/3428/414 4895/3439/422 4888/3422/411 +f 4884/3432/404 4891/3431/416 4878/3440/269 +f 4891/3431/416 4898/3438/421 4878/3440/269 +f 4878/3440/269 4886/3427/413 4879/3441/406 +f 4886/3427/413 4878/3440/269 4893/3442/423 +f 4896/3434/418 4905/3443/240 4897/3444/419 +f 4893/3445/423 4902/3446/242 4894/3447/420 +f 4878/3448/269 4901/3449/279 4893/3445/423 +f 4895/3439/422 4900/3450/238 4892/3437/417 +f 4898/3451/421 4899/3452/239 4878/3448/269 +f 4897/3444/419 4906/3453/291 4898/3451/421 +f 4894/3447/420 4903/3454/290 4895/3439/422 +f 4892/3433/417 4904/3455/270 4896/3434/418 +f 4910/3456/290 4919/3457/265 4911/3458/238 +f 4916/3459/385 4909/3460/242 4908/3461/279 +f 4921/3462/386 4914/3463/291 4913/3464/240 +f 4919/3465/265 4912/3466/270 4911/3467/238 +f 4917/3468/387 4910/3456/290 4909/3460/242 +f 4915/3469/388 4908/3461/279 4907/3470/239 +f 4922/3471/389 4907/3470/239 4914/3463/291 +f 4920/3472/390 4913/3464/240 4912/3466/270 +f 4921/3473/386 4929/3474/392 4922/3471/389 +f 4917/3475/387 4926/3476/394 4918/3477/384 +f 4915/3469/388 4924/3478/395 4916/3459/385 +f 4915/3469/388 4929/3474/392 4923/3479/269 +f 4921/3473/386 4927/3480/401 4928/3481/391 +f 4916/3459/385 4925/3482/393 4917/3475/387 +f 4925/3482/393 4931/3483/396 4932/3484/397 +f 4928/3481/391 4936/3485/398 4929/3474/392 +f 4926/3476/394 4932/3484/397 4933/3486/399 +f 4923/3479/269 4931/3483/396 4924/3478/395 +f 4923/3479/269 4936/3485/398 4930/3487/400 +f 4927/3480/401 4935/3488/402 4928/3481/391 +f 4919/3489/265 4927/3480/401 4920/3490/390 +f 4927/3480/401 4919/3489/265 4934/3491/403 +f 4918/3477/384 4926/3476/394 4919/3492/265 +f 4926/3476/394 4933/3486/399 4919/3492/265 +f 4935/3493/402 4944/3494/404 4936/3485/398 +f 4932/3495/397 4941/3496/405 4933/3497/399 +f 4930/3487/400 4939/3498/406 4931/3483/396 +f 4933/3497/399 4937/3499/407 4919/3500/265 +f 4936/3485/398 4938/3501/269 4930/3487/400 +f 4919/3502/265 4942/3503/408 4934/3504/403 +f 4934/3504/403 4943/3505/409 4935/3493/402 +f 4931/3483/396 4940/3506/410 4932/3495/397 +f 4937/3499/407 4948/3507/411 4945/3508/265 +f 4942/3503/408 4950/3509/412 4943/3510/409 +f 4940/3511/410 4946/3512/413 4947/3513/414 +f 4937/3514/407 4949/3515/415 4942/3503/408 +f 4943/3510/409 4951/3516/416 4944/3517/404 +f 4941/3496/405 4947/3513/414 4948/3507/411 +f 4949/3515/415 4952/3518/417 4956/3519/418 +f 4950/3509/412 4956/3519/418 4957/3520/419 +f 4946/3512/413 4954/3521/420 4947/3513/414 +f 4945/3508/265 4955/3522/422 4952/3523/417 +f 4951/3516/416 4957/3520/419 4958/3524/421 +f 4947/3513/414 4955/3522/422 4948/3507/411 +f 4944/3517/404 4951/3516/416 4938/3525/269 +f 4951/3516/416 4958/3524/421 4938/3525/269 +f 4938/3525/269 4946/3512/413 4939/3526/406 +f 4946/3512/413 4938/3525/269 4953/3527/423 +f 4956/3519/418 4965/3528/240 4957/3529/419 +f 4954/3530/420 4961/3531/279 4962/3532/242 +f 4953/3533/423 4959/3534/239 4961/3531/279 +f 4955/3522/422 4960/3535/238 4952/3523/417 +f 4938/3536/269 4966/3537/291 4959/3534/239 +f 4958/3538/421 4965/3528/240 4966/3537/291 +f 4954/3530/420 4963/3539/290 4955/3522/422 +f 4952/3518/417 4964/3540/270 4956/3519/418 +f 4978/3541/384 4971/3542/238 4970/3543/290 +f 4976/3544/385 4969/3545/242 4968/3546/279 +f 4981/3547/386 4974/3548/291 4973/3549/240 +f 4979/3550/265 4972/3551/270 4971/3552/238 +f 4977/3553/387 4970/3543/290 4969/3545/242 +f 4975/3554/388 4968/3546/279 4967/3555/239 +f 4982/3556/389 4967/3555/239 4974/3548/291 +f 4980/3557/390 4973/3549/240 4972/3551/270 +f 4982/3556/389 4988/3558/391 4989/3559/392 +f 4977/3560/387 4986/3561/394 4978/3562/384 +f 4975/3554/388 4984/3563/395 4976/3544/385 +f 4982/3556/389 4983/3564/269 4975/3554/388 +f 4981/3565/386 4987/3566/401 4988/3558/391 +f 4976/3544/385 4985/3567/393 4977/3560/387 +f 4985/3567/393 4991/3568/396 4992/3569/397 +f 4988/3558/391 4996/3570/398 4989/3559/392 +f 4986/3561/394 4992/3569/397 4993/3571/399 +f 4983/3564/269 4991/3568/396 4984/3563/395 +f 4983/3564/269 4996/3570/398 4990/3572/400 +f 4987/3566/401 4995/3573/402 4988/3558/391 +f 4979/3574/265 4987/3566/401 4980/3575/390 +f 4987/3566/401 4979/3574/265 4994/3576/403 +f 4978/3562/384 4986/3561/394 4979/3577/265 +f 4986/3561/394 4993/3571/399 4979/3577/265 +f 4995/3578/402 5004/3579/404 4996/3570/398 +f 4992/3580/397 5001/3581/405 4993/3582/399 +f 4990/3572/400 4999/3583/406 4991/3568/396 +f 4993/3582/399 4997/3584/407 4979/3585/265 +f 4996/3570/398 4998/3586/269 4990/3572/400 +f 4979/3587/265 5002/3588/408 4994/3589/403 +f 4994/3589/403 5003/3590/409 4995/3578/402 +f 4991/3568/396 5000/3591/410 4992/3580/397 +f 4997/3584/407 5008/3592/411 5005/3593/265 +f 5002/3588/408 5010/3594/412 5003/3595/409 +f 5000/3596/410 5006/3597/413 5007/3598/414 +f 4997/3599/407 5009/3600/415 5002/3588/408 +f 5003/3595/409 5011/3601/416 5004/3602/404 +f 5001/3581/405 5007/3598/414 5008/3592/411 +f 5009/3600/415 5012/3603/417 5016/3604/418 +f 5010/3594/412 5016/3604/418 5017/3605/419 +f 5006/3597/413 5014/3606/420 5007/3598/414 +f 5008/3592/411 5012/3607/417 5005/3593/265 +f 5011/3601/416 5017/3605/419 5018/3608/421 +f 5007/3598/414 5015/3609/422 5008/3592/411 +f 5004/3602/404 5011/3601/416 4998/3610/269 +f 5011/3601/416 5018/3608/421 4998/3610/269 +f 4998/3610/269 5006/3597/413 4999/3611/406 +f 5006/3597/413 4998/3610/269 5013/3612/423 +f 5016/3604/418 5025/3613/240 5017/3614/419 +f 5013/3615/423 5022/3616/242 5014/3617/420 +f 4998/3618/269 5021/3619/279 5013/3615/423 +f 5015/3609/422 5020/3620/238 5012/3607/417 +f 5018/3621/421 5019/3622/239 4998/3618/269 +f 5017/3614/419 5026/3623/291 5018/3621/421 +f 5014/3617/420 5023/3624/290 5015/3609/422 +f 5012/3603/417 5024/3625/270 5016/3604/418 +f 5038/3626/384 5031/3627/238 5030/3628/290 +f 5036/3629/385 5029/3630/242 5028/3631/279 +f 5041/3632/386 5034/3633/291 5033/3634/240 +f 5039/3635/265 5032/3636/270 5031/3637/238 +f 5037/3638/387 5030/3628/290 5029/3630/242 +f 5035/3639/388 5028/3631/279 5027/3640/239 +f 5042/3641/389 5027/3640/239 5034/3633/291 +f 5040/3642/390 5033/3634/240 5032/3636/270 +f 5041/3643/386 5049/3644/392 5042/3641/389 +f 5037/3645/387 5046/3646/394 5038/3647/384 +f 5036/3629/385 5043/3648/269 5044/3649/395 +f 5042/3641/389 5043/3648/269 5035/3639/388 +f 5041/3643/386 5047/3650/401 5048/3651/391 +f 5036/3629/385 5045/3652/393 5037/3645/387 +f 5045/3652/393 5051/3653/396 5052/3654/397 +f 5048/3651/391 5056/3655/398 5049/3644/392 +f 5046/3646/394 5052/3654/397 5053/3656/399 +f 5043/3648/269 5051/3653/396 5044/3649/395 +f 5043/3648/269 5056/3655/398 5050/3657/400 +f 5047/3650/401 5055/3658/402 5048/3651/391 +f 5039/3659/265 5047/3650/401 5040/3660/390 +f 5047/3650/401 5039/3659/265 5054/3661/403 +f 5038/3647/384 5046/3646/394 5039/3662/265 +f 5046/3646/394 5053/3656/399 5039/3662/265 +f 5055/3663/402 5064/3664/404 5056/3655/398 +f 5052/3665/397 5061/3666/405 5053/3667/399 +f 5050/3657/400 5059/3668/406 5051/3653/396 +f 5053/3667/399 5057/3669/407 5039/3670/265 +f 5056/3655/398 5058/3671/269 5050/3657/400 +f 5039/3672/265 5062/3673/408 5054/3674/403 +f 5054/3674/403 5063/3675/409 5055/3663/402 +f 5051/3653/396 5060/3676/410 5052/3665/397 +f 5057/3669/407 5068/3677/411 5065/3678/265 +f 5062/3673/408 5070/3679/412 5063/3680/409 +f 5060/3681/410 5066/3682/413 5067/3683/414 +f 5057/3684/407 5069/3685/415 5062/3673/408 +f 5063/3680/409 5071/3686/416 5064/3687/404 +f 5061/3666/405 5067/3683/414 5068/3677/411 +f 5069/3685/415 5072/3688/417 5076/3689/418 +f 5070/3679/412 5076/3689/418 5077/3690/419 +f 5066/3682/413 5074/3691/420 5067/3683/414 +f 5068/3677/411 5072/3692/417 5065/3678/265 +f 5071/3686/416 5077/3690/419 5078/3693/421 +f 5068/3677/411 5074/3691/420 5075/3694/422 +f 5064/3687/404 5071/3686/416 5058/3695/269 +f 5071/3686/416 5078/3693/421 5058/3695/269 +f 5058/3695/269 5066/3682/413 5059/3696/406 +f 5066/3682/413 5058/3695/269 5073/3697/423 +f 5076/3689/418 5085/3698/240 5077/3699/419 +f 5073/3700/423 5082/3701/242 5074/3702/420 +f 5058/3703/269 5081/3704/279 5073/3700/423 +f 5075/3694/422 5080/3705/238 5072/3692/417 +f 5078/3706/421 5079/3707/239 5058/3703/269 +f 5077/3699/419 5086/3708/291 5078/3706/421 +f 5074/3702/420 5083/3709/290 5075/3694/422 +f 5072/3688/417 5084/3710/270 5076/3689/418 +f 5404/3711/239 5395/3712/291 5396/3713/239 +f 5402/3714/240 5393/3715/270 5394/3716/240 +f 5400/3717/238 5391/3718/290 5392/3719/238 +f 5406/3720/242 5397/3721/279 5398/3722/242 +f 5405/3723/279 5396/3713/239 5397/3721/279 +f 5403/3724/291 5394/3716/240 5395/3712/291 +f 5401/3725/270 5392/3726/238 5393/3715/270 +f 5399/3727/290 5398/3722/242 5391/3718/290 +f 5420/3728/239 5411/3729/291 5412/3730/239 +f 5418/3731/240 5409/3732/270 5410/3733/240 +f 5416/3734/238 5407/3735/290 5408/3736/238 +f 5422/3737/242 5413/3738/279 5414/3739/242 +f 5421/3740/279 5412/3730/239 5413/3738/279 +f 5419/3741/291 5410/3733/240 5411/3729/291 +f 5417/3742/270 5408/3743/238 5409/3732/270 +f 5415/3744/290 5414/3739/242 5407/3735/290 +f 5436/3745/239 5427/3746/291 5428/3747/239 +f 5434/3748/240 5425/3749/270 5426/3750/240 +f 5432/3751/238 5423/3752/290 5424/3753/238 +f 5438/3754/242 5429/3755/279 5430/3756/242 +f 5437/3757/279 5428/3747/239 5429/3755/279 +f 5435/3758/291 5426/3750/240 5427/3746/291 +f 5433/3759/270 5424/3760/238 5425/3749/270 +f 5431/3761/290 5430/3756/242 5423/3752/290 +f 5452/3762/239 5443/3763/291 5444/3764/239 +f 5450/3765/240 5441/3766/270 5442/3767/240 +f 5448/3768/238 5439/3769/290 5440/3770/238 +f 5454/3771/242 5445/3772/279 5446/3773/242 +f 5453/3774/279 5444/3764/239 5445/3772/279 +f 5451/3775/291 5442/3767/240 5443/3763/291 +f 5449/3776/270 5440/3777/238 5441/3766/270 +f 5447/3778/290 5446/3773/242 5439/3769/290 +f 5468/3779/239 5459/3780/291 5460/3781/239 +f 5466/3782/240 5457/3783/270 5458/3784/240 +f 5464/3785/238 5455/3786/290 5456/3787/238 +f 5470/3788/242 5461/3789/279 5462/3790/242 +f 5469/3791/279 5460/3781/239 5461/3789/279 +f 5467/3792/291 5458/3784/240 5459/3780/291 +f 5465/3793/270 5456/3794/238 5457/3783/270 +f 5463/3795/290 5462/3790/242 5455/3786/290 +f 5484/3796/239 5475/3797/291 5476/3798/239 +f 5482/3799/240 5473/3800/270 5474/3801/240 +f 5480/3802/238 5471/3803/290 5472/3804/238 +f 5486/3805/242 5477/3806/279 5478/3807/242 +f 5485/3808/279 5476/3798/239 5477/3806/279 +f 5483/3809/291 5474/3801/240 5475/3797/291 +f 5481/3810/270 5472/3811/238 5473/3800/270 +f 5479/3812/290 5478/3807/242 5471/3803/290 +f 5500/3813/239 5491/3814/291 5492/3815/239 +f 5498/3816/240 5489/3817/270 5490/3818/240 +f 5496/3819/238 5487/3820/290 5488/3821/238 +f 5502/3822/242 5493/3823/279 5494/3824/242 +f 5501/3825/279 5492/3815/239 5493/3823/279 +f 5499/3826/291 5490/3818/240 5491/3814/291 +f 5497/3827/270 5488/3828/238 5489/3817/270 +f 5495/3829/290 5494/3824/242 5487/3820/290 +f 5516/3830/239 5507/3831/291 5508/3832/239 +f 5514/3833/240 5505/3834/270 5506/3835/240 +f 5512/3836/238 5503/3837/290 5504/3838/238 +f 5518/3839/242 5509/3840/279 5510/3841/242 +f 5517/3842/279 5508/3832/239 5509/3840/279 +f 5515/3843/291 5506/3835/240 5507/3831/291 +f 5513/3844/270 5504/3845/238 5505/3834/270 +f 5511/3846/290 5510/3841/242 5503/3837/290 +f 5532/3847/239 5523/3848/291 5524/3849/239 +f 5530/3850/240 5521/3851/270 5522/3852/240 +f 5528/3853/238 5519/3854/290 5520/3855/238 +f 5534/3856/242 5525/3857/279 5526/3858/242 +f 5533/3859/279 5524/3849/239 5525/3857/279 +f 5531/3860/291 5522/3852/240 5523/3848/291 +f 5529/3861/270 5520/3862/238 5521/3851/270 +f 5527/3863/290 5526/3858/242 5519/3854/290 +f 3667/1611/244 3143/1623/244 3153/1612/242 +f 3660/1614/245 3150/1625/245 3149/1615/246 +f 3663/1617/247 3147/1627/247 3146/1618/248 +f 3656/1613/242 3153/1612/242 3154/1620/249 +f 3666/1622/250 3144/1629/250 3143/1623/244 +f 3659/1624/241 3151/3864/241 3150/1625/245 +f 3662/1626/240 3148/1633/240 3147/1627/247 +f 3665/1628/243 3145/1634/243 3144/1629/250 +f 3658/1630/251 3152/1635/251 3151/1631/241 +f 3661/1616/246 3149/1615/246 3148/1633/240 +f 3664/1619/248 3146/1618/248 3145/1634/243 +f 3657/1621/249 3154/1620/249 3152/1635/251 +f 3206/1636/252 3238/471/252 3237/469/253 +f 3199/1638/241 3231/456/241 3230/453/254 +f 3207/1640/243 3239/473/243 3238/471/252 +f 3200/1641/255 3232/457/255 3231/456/241 +f 3208/1642/256 3240/474/256 3239/473/243 +f 3201/1643/257 3233/459/257 3232/457/255 +f 3209/1644/258 3241/476/258 3240/474/256 +f 3202/1645/259 3234/462/259 3233/459/257 +f 3210/1646/260 3242/479/260 3241/476/258 +f 3203/1647/240 3235/464/240 3234/462/259 +f 3196/1648/261 3227/450/261 3228/449/242 +f 3195/1649/242 3228/449/242 3242/479/260 +f 3204/1650/262 3236/467/262 3235/466/240 +f 3197/1652/263 3229/452/263 3227/450/261 +f 3205/1637/253 3237/469/253 3236/467/262 +f 3198/1639/254 3230/453/254 3229/452/263 +f 3212/448/262 3243/1656/262 3244/1653/240 +f 3211/480/240 3244/1653/240 3258/1654/259 +f 3220/465/261 3252/1657/261 3251/1655/242 +f 3213/451/253 3245/1658/253 3243/1656/262 +f 3221/468/263 3253/1659/263 3252/1657/261 +f 3214/454/252 3246/1660/252 3245/1658/253 +f 3222/470/254 3254/1661/254 3253/1659/263 +f 3215/455/243 3247/1663/243 3246/1660/252 +f 3223/472/241 3255/1664/241 3254/1661/254 +f 3215/455/243 3216/458/256 3248/1662/256 +f 3224/475/255 3256/1666/255 3255/1664/241 +f 3216/458/256 3217/460/258 3249/1665/258 +f 3225/477/257 3257/1667/257 3256/1666/255 +f 3218/461/260 3250/1668/260 3249/1665/258 +f 3226/478/259 3258/1654/259 3257/1667/257 +f 3219/463/242 3251/3865/242 3250/1668/260 +f 3309/1669/240 4087/569/240 4086/567/259 +f 3302/1671/260 4094/584/260 4093/581/258 +f 3310/1670/259 4086/567/259 4085/565/257 +f 3303/1672/258 4093/581/258 4092/579/256 +f 3311/1673/257 4085/565/257 4084/562/255 +f 3304/1674/256 4092/579/256 4091/578/243 +f 3312/1675/255 4084/562/255 4083/561/241 +f 3305/1676/243 4091/578/243 4090/576/252 +f 3313/1677/241 4083/561/241 4082/558/254 +f 3306/1678/252 4090/576/252 4089/574/253 +f 3353/1681/264 3354/3866/270 3346/1682/238 +f 3351/1684/266 3352/1693/272 3344/1685/241 +f 3356/1687/268 3357/1696/274 3349/1688/269 +f 3354/1690/270 3355/1697/275 3347/1691/271 +f 3352/1693/272 3353/1681/264 3345/1683/265 +f 3350/1694/273 3351/1684/266 3343/1686/267 +f 3357/1696/274 3350/1694/273 3342/1695/239 +f 3355/1697/275 3356/1687/268 3348/1689/243 +f 3356/1698/268 3363/1706/281 3364/1699/276 +f 3352/1700/272 3360/1707/282 3361/1701/277 +f 3350/1694/273 3358/1704/279 3359/1703/278 +f 3357/1696/274 3364/1699/276 3358/1704/279 +f 3356/1698/268 3355/1716/275 3362/1705/280 +f 3351/1684/266 3359/1703/278 3360/1707/282 +f 3360/1707/282 3359/1703/278 3366/1708/283 +f 3363/1706/281 3370/1714/289 3371/1710/285 +f 3360/1707/282 3367/1709/284 3368/1711/286 +f 3359/1703/278 3358/1704/279 3365/1712/287 +f 3364/1699/276 3371/1710/285 3365/1712/287 +f 3363/1706/281 3362/1705/280 3369/1713/288 +f 3370/1718/289 3378/1730/243 3379/1719/258 +f 3367/1720/284 3375/1731/241 3376/1721/257 +f 3365/1712/287 3373/1726/242 3374/1723/263 +f 3368/1722/286 3376/1721/257 3372/1724/240 +f 3371/1710/285 3379/1719/258 3373/1726/242 +f 3354/1727/270 3372/3867/240 3377/1728/253 +f 3369/1729/288 3377/1728/253 3378/1730/243 +f 3366/1708/283 3374/1723/263 3375/1731/241 +f 3384/1732/238 3392/3868/238 3391/1733/265 +f 3385/1735/271 3393/1739/271 3392/1736/238 +f 3386/1738/243 3394/1741/243 3393/1739/271 +f 3387/1740/269 3395/1743/269 3394/1741/243 +f 3380/1742/239 3388/1745/239 3395/1743/269 +f 3381/1744/267 3389/1747/267 3388/1745/239 +f 3382/1746/241 3390/1748/241 3389/1747/267 +f 3383/1734/265 3391/1733/265 3390/1748/241 +f 3419/1749/279 3412/1765/239 3404/1750/239 +f 3417/1752/290 3418/1761/242 3410/1753/242 +f 3415/1755/270 3416/3869/238 3408/1756/238 +f 3413/1758/291 3414/1764/240 3406/1759/240 +f 3418/1761/242 3419/1749/279 3411/1751/279 +f 3416/1762/238 3417/1752/290 3409/1754/290 +f 3414/1764/240 3415/1755/270 3407/1757/270 +f 3412/1765/239 3413/1758/291 3405/1760/291 +f 3431/1766/292 3432/3870/295 3424/1767/240 +f 3429/1769/293 3430/1778/296 3422/1770/239 +f 3434/1772/294 3435/1781/298 3427/1773/290 +f 3432/1775/295 3433/1782/299 3425/1776/270 +f 3430/1778/296 3431/1766/292 3423/1768/291 +f 3428/1779/297 3429/1769/293 3421/1771/279 +f 3435/1781/298 3428/1779/297 3420/1780/242 +f 3433/1782/299 3434/1772/294 3426/1774/238 +f 3435/1781/298 3434/1790/294 3441/1783/300 +f 3430/1785/296 3438/1792/306 3439/1786/302 +f 3428/1779/297 3436/1789/304 3437/1788/303 +f 3428/1779/297 3435/1781/298 3442/1784/301 +f 3434/1790/294 3433/1794/299 3440/1791/305 +f 3429/1769/293 3437/1788/303 3438/1792/306 +f 3448/1796/307 3444/1863/316 3451/1797/308 +f 3449/1799/310 3448/1796/307 3455/1798/309 +f 3445/1801/312 3452/1811/321 3453/1802/313 +f 3447/1804/315 3454/1809/319 3451/1805/308 +f 3449/1799/310 3456/1800/311 3457/1807/317 +f 3446/1803/314 3453/1802/313 3454/1809/319 +f 3455/1798/309 3463/1824/270 3464/1812/238 +f 3452/1814/321 3460/1818/279 3461/1815/239 +f 3443/1817/320 3458/1821/242 3460/1818/279 +f 3454/1809/319 3462/1823/291 3459/1819/240 +f 3457/1820/317 3465/1822/290 3458/1821/242 +f 3456/1813/311 3464/1812/238 3465/1822/290 +f 3453/1816/313 3461/1815/239 3462/1823/291 +f 3451/1797/308 3459/3871/240 3463/1824/270 +f 3477/1825/292 3478/3872/295 3470/1826/240 +f 3475/1828/293 3476/1837/296 3468/1829/239 +f 3480/1831/294 3481/1840/298 3473/1832/290 +f 3478/1834/295 3479/1841/299 3471/1835/270 +f 3476/1837/296 3477/1825/292 3469/1827/291 +f 3474/1838/297 3475/1828/293 3467/1830/279 +f 3481/1840/298 3474/1838/297 3466/1839/242 +f 3479/1841/299 3480/1831/294 3472/1833/238 +f 3481/1840/298 3480/1849/294 3487/1842/300 +f 3476/1844/296 3484/1851/306 3485/1845/322 +f 3474/1838/297 3482/1848/304 3483/1847/303 +f 3474/1838/297 3481/1840/298 3488/1843/301 +f 3480/1849/294 3479/1860/299 3486/1850/305 +f 3475/1828/293 3483/1847/303 3484/1851/306 +f 3495/1852/310 3496/1853/318 3488/1843/301 +f 3496/1853/318 3489/1871/320 3482/1848/304 +f 3482/1848/304 3489/1871/320 3491/1854/323 +f 3483/1847/303 3491/1854/323 3492/1855/314 +f 3484/1851/306 3492/1855/314 3493/1856/315 +f 3485/1845/322 3493/1856/315 3490/1857/316 +f 3490/1861/316 3494/1862/307 3486/1850/305 +f 3494/1862/307 3495/1852/310 3487/1842/300 +f 3450/1808/318 3443/1810/320 3436/1789/304 +f 3436/1789/304 3443/1810/320 3445/1801/312 +f 3437/1788/303 3445/1801/312 3446/1803/314 +f 3438/1792/306 3446/1803/314 3447/1804/315 +f 3439/1786/302 3447/1804/315 3444/1806/316 +f 3444/1863/316 3448/1796/307 3440/1791/305 +f 3494/1862/307 3490/1861/316 3497/1864/308 +f 3495/1852/310 3494/1862/307 3501/1865/309 +f 3491/1854/323 3498/1872/321 3499/1867/313 +f 3493/1856/315 3500/1870/319 3497/1868/308 +f 3496/1853/318 3495/1852/310 3502/1866/311 +f 3492/1855/314 3499/1867/313 3500/1870/319 +f 3448/1796/307 3449/1799/310 3441/1783/300 +f 3449/1799/310 3450/1808/318 3442/1784/301 +f 3501/1865/309 3509/1885/270 3510/1873/238 +f 3498/1875/321 3506/1879/279 3507/1876/239 +f 3489/1878/320 3504/1882/242 3506/1879/279 +f 3500/1870/319 3508/1884/291 3505/1880/240 +f 3503/1881/317 3511/1883/290 3504/1882/242 +f 3503/1881/317 3502/1874/311 3510/1873/238 +f 3499/1877/313 3507/1876/239 3508/1884/291 +f 3497/1864/308 3505/3873/240 3509/1885/270 +f 3523/1886/324 3524/3874/271 3516/1887/238 +f 3521/1889/325 3522/1898/327 3514/1890/240 +f 3526/1892/326 3527/1901/329 3519/1893/279 +f 3524/1895/271 3525/1902/330 3517/1896/290 +f 3522/1898/327 3523/1886/324 3515/1888/270 +f 3520/1899/328 3521/1889/325 3513/1891/291 +f 3527/1901/329 3520/1899/328 3512/1900/239 +f 3525/1902/330 3526/1892/326 3518/1894/242 +f 3527/1901/329 3526/1910/326 3533/1903/331 +f 3522/1905/327 3530/1912/336 3531/1906/333 +f 3520/1899/328 3528/1909/267 3529/1908/334 +f 3520/1899/328 3527/1901/329 3534/1904/332 +f 3526/1910/326 3525/1920/330 3532/1911/335 +f 3521/1889/325 3529/1908/334 3530/1912/336 +f 3530/1912/336 3529/1908/334 3536/1913/337 +f 3533/1903/331 3540/1918/342 3541/1915/339 +f 3531/1906/333 3530/1912/336 3537/1914/338 +f 3528/1909/267 3535/1917/341 3536/1913/337 +f 3528/1909/267 3534/1904/332 3541/1915/339 +f 3532/1911/335 3539/1921/343 3540/1918/342 +f 3540/1923/342 3548/1935/349 3549/1924/344 +f 3537/1925/338 3545/1936/350 3546/1926/345 +f 3535/1917/341 3543/1931/267 3544/1928/346 +f 3538/1927/340 3546/1926/345 3542/1929/347 +f 3541/1915/339 3549/1924/344 3543/1931/267 +f 3524/1932/271 3542/1944/347 3547/1933/348 +f 3539/1934/343 3547/1933/348 3548/1935/349 +f 3536/1913/337 3544/1928/346 3545/1936/350 +f 3542/1929/347 3546/1926/345 3553/1937/351 +f 3547/1933/348 3554/1945/355 3555/1939/352 +f 3545/1941/350 3544/1956/346 3551/1942/353 +f 3542/1944/347 3550/1948/271 3554/1945/355 +f 3548/1940/349 3555/1939/352 3556/1946/356 +f 3546/1926/345 3545/1941/350 3552/1943/354 +f 3550/1948/271 3557/1970/360 3561/1949/357 +f 3555/1939/352 3554/1945/355 3561/1949/357 +f 3551/1942/353 3558/1957/363 3559/1951/359 +f 3553/1937/351 3560/1954/362 3557/1952/360 +f 3556/1946/356 3555/1939/352 3562/1950/358 +f 3552/1943/354 3559/1951/359 3560/1954/362 +f 3561/1949/357 3569/1971/290 3570/1958/242 +f 3558/1960/363 3566/1964/291 3567/1961/240 +f 3543/1963/267 3564/1967/239 3566/1964/291 +f 3560/1954/362 3568/1969/270 3565/1965/238 +f 3563/1966/361 3571/1968/279 3564/1967/239 +f 3562/1959/358 3570/1958/242 3571/1968/279 +f 3559/1962/359 3567/1961/240 3568/1969/270 +f 3557/1970/360 3565/3875/238 3569/1971/290 +f 3583/1972/324 3584/3876/271 3576/1973/238 +f 3581/1975/325 3582/1984/327 3574/1976/240 +f 3586/1978/326 3587/1987/329 3579/1979/279 +f 3584/1981/271 3585/1988/330 3577/1982/290 +f 3582/1984/327 3583/1972/324 3575/1974/270 +f 3580/1985/328 3581/1975/325 3573/1977/291 +f 3587/1987/329 3580/1985/328 3572/1986/239 +f 3585/1988/330 3586/1978/326 3578/1980/242 +f 3587/1987/329 3586/1996/326 3593/1989/331 +f 3582/1991/327 3590/1998/336 3591/1992/333 +f 3580/1985/328 3588/1995/267 3589/1994/334 +f 3580/1985/328 3587/1987/329 3594/1990/332 +f 3586/1996/326 3585/2006/330 3592/1997/335 +f 3581/1975/325 3589/1994/334 3590/1998/336 +f 3590/1998/336 3589/1994/334 3596/1999/337 +f 3593/1989/331 3600/2004/342 3601/2001/339 +f 3591/1992/333 3590/1998/336 3597/2000/338 +f 3588/1995/267 3595/2003/341 3596/1999/337 +f 3588/1995/267 3594/1990/332 3601/2001/339 +f 3592/1997/335 3599/2007/343 3600/2004/342 +f 3600/2009/342 3608/2021/349 3609/2010/344 +f 3597/2011/338 3605/2022/350 3606/2012/345 +f 3595/2003/341 3603/2017/267 3604/2014/346 +f 3598/2013/340 3606/2012/345 3602/2015/347 +f 3601/2001/339 3609/2010/344 3603/2017/267 +f 3584/2018/271 3602/2030/347 3607/2019/348 +f 3599/2020/343 3607/2019/348 3608/2021/349 +f 3596/1999/337 3604/2014/346 3605/2022/350 +f 3602/2015/347 3606/2012/345 3613/2023/351 +f 3607/2019/348 3614/2031/355 3615/2025/352 +f 3605/2027/350 3604/2042/346 3611/2028/353 +f 3602/2030/347 3610/3877/271 3614/2031/355 +f 3608/2026/349 3615/2025/352 3616/2032/356 +f 3606/2012/345 3605/2027/350 3612/2029/354 +f 3614/2031/355 3610/3877/271 3617/2034/360 +f 3615/2025/352 3614/2031/355 3621/2035/357 +f 3611/2028/353 3618/2043/363 3619/2037/359 +f 3613/2023/351 3620/2040/362 3617/2038/360 +f 3616/2032/356 3615/2025/352 3622/2036/358 +f 3612/2029/354 3619/2037/359 3620/2040/362 +f 3621/2035/357 3629/2056/290 3630/2044/242 +f 3618/2046/363 3626/2050/291 3627/2047/240 +f 3603/2049/267 3624/2053/239 3626/2050/291 +f 3620/2040/362 3628/2055/270 3625/2051/238 +f 3623/2052/361 3631/2054/279 3624/2053/239 +f 3622/2045/358 3630/2044/242 3631/2054/279 +f 3619/2048/359 3627/2047/240 3628/2055/270 +f 3617/2034/360 3625/3878/238 3629/2056/290 +f 3645/2057/239 3644/2070/291 3636/2058/291 +f 3643/2060/240 3642/2071/270 3634/2061/270 +f 3641/2063/238 3640/2073/290 3632/2064/290 +f 3647/2066/242 3646/2069/279 3638/2067/279 +f 3646/2069/279 3645/2057/239 3637/2059/239 +f 3644/2070/291 3643/2060/240 3635/2062/240 +f 3642/2071/270 3641/3879/238 3633/2072/238 +f 3640/2073/290 3647/2066/242 3639/2068/242 +f 3679/2074/264 3680/3880/270 3672/2075/238 +f 3677/2077/266 3678/2086/272 3670/2078/241 +f 3682/2080/268 3683/2089/274 3675/2081/269 +f 3680/2083/270 3681/2090/275 3673/2084/271 +f 3678/2086/272 3679/2074/264 3671/2076/265 +f 3676/2087/273 3677/2077/266 3669/2079/267 +f 3683/2089/274 3676/2087/273 3668/2088/239 +f 3681/2090/275 3682/2080/268 3674/2082/243 +f 3683/2089/274 3682/2098/268 3689/2091/281 +f 3678/2093/272 3686/2100/282 3687/2094/277 +f 3677/2077/266 3676/2087/273 3684/2096/279 +f 3683/2089/274 3690/2092/276 3684/2096/279 +f 3682/2098/268 3681/2109/275 3688/2099/280 +f 3677/2077/266 3685/2097/278 3686/2100/282 +f 3686/2100/282 3685/2097/278 3692/2101/283 +f 3689/2091/281 3696/2107/289 3697/2103/285 +f 3686/2100/282 3693/2102/284 3694/2104/286 +f 3685/2097/278 3684/2096/279 3691/2105/287 +f 3690/2092/276 3697/2103/285 3691/2105/287 +f 3689/2091/281 3688/2099/280 3695/2106/288 +f 3696/2111/289 3704/2123/243 3705/2112/258 +f 3693/2113/284 3701/2124/241 3702/2114/257 +f 3691/2105/287 3699/2119/242 3700/2116/263 +f 3694/2115/286 3702/2114/257 3698/2117/240 +f 3697/2103/285 3705/2112/258 3699/2119/242 +f 3680/2120/270 3698/3881/240 3703/2121/253 +f 3695/2122/288 3703/2121/253 3704/2123/243 +f 3692/2101/283 3700/2116/263 3701/2124/241 +f 3717/2125/264 3718/3882/270 3710/2126/238 +f 3715/2128/266 3716/2137/272 3708/2129/241 +f 3720/2131/268 3721/2140/274 3713/2132/269 +f 3710/2134/238 3718/3883/270 3719/2135/275 +f 3716/2137/272 3717/2125/264 3709/2127/265 +f 3714/2138/273 3715/2128/266 3707/2130/267 +f 3721/2140/274 3714/2138/273 3706/2139/239 +f 3719/2135/275 3720/2131/268 3712/2133/243 +f 3721/2140/274 3720/2148/268 3727/2141/281 +f 3716/2143/272 3724/2150/282 3725/2144/277 +f 3714/2138/273 3722/2147/279 3723/2146/278 +f 3721/2140/274 3728/2142/276 3722/2147/279 +f 3720/2148/268 3719/2158/275 3726/2149/280 +f 3716/2143/272 3715/2128/266 3723/2146/278 +f 3724/2150/282 3723/2146/278 3730/2151/283 +f 3727/2141/281 3734/2156/289 3735/2153/285 +f 3724/2150/282 3731/2152/284 3732/2154/286 +f 3723/2146/278 3722/2147/279 3729/2155/287 +f 3728/2142/276 3735/2153/285 3729/2155/287 +f 3726/2149/280 3733/2159/288 3734/2156/289 +f 3734/2161/289 3742/2173/243 3743/2162/258 +f 3731/2163/284 3739/2174/241 3740/2164/257 +f 3729/2155/287 3737/2169/242 3738/2166/263 +f 3732/2165/286 3740/2164/257 3736/2167/240 +f 3735/2153/285 3743/2162/258 3737/2169/242 +f 3718/2170/270 3736/3884/240 3741/2171/253 +f 3733/2172/288 3741/2171/253 3742/2173/243 +f 3730/2151/283 3738/2166/263 3739/2174/241 +f 3755/2175/264 3756/3885/270 3748/2176/238 +f 3753/2178/266 3754/2187/272 3746/2179/241 +f 3758/2181/268 3759/2190/274 3751/2182/269 +f 3756/2184/270 3757/2191/275 3749/2185/271 +f 3754/2187/272 3755/2175/264 3747/2177/265 +f 3752/2188/273 3753/2178/266 3745/2180/267 +f 3759/2190/274 3752/2188/273 3744/2189/239 +f 3757/2191/275 3758/2181/268 3750/2183/243 +f 3759/2190/274 3758/2199/268 3765/2192/281 +f 3754/2194/272 3762/2201/282 3763/2195/277 +f 3753/2178/266 3752/2188/273 3760/2197/279 +f 3759/2190/274 3766/2193/276 3760/2197/279 +f 3758/2199/268 3757/2209/275 3764/2200/280 +f 3753/2178/266 3761/2198/278 3762/2201/282 +f 3762/2201/282 3761/2198/278 3768/2202/283 +f 3765/2192/281 3772/2207/289 3773/2204/285 +f 3763/2195/277 3762/2201/282 3769/2203/284 +f 3761/2198/278 3760/2197/279 3767/2206/287 +f 3766/2193/276 3773/2204/285 3767/2206/287 +f 3764/2200/280 3771/2210/288 3772/2207/289 +f 3772/2212/289 3780/2224/243 3781/2213/258 +f 3769/2214/284 3777/2225/241 3778/2215/257 +f 3767/2206/287 3775/2220/242 3776/2217/263 +f 3770/2216/286 3778/2215/257 3774/2218/240 +f 3773/2204/285 3781/2213/258 3775/2220/242 +f 3756/2221/270 3774/3886/240 3779/2222/253 +f 3771/2223/288 3779/2222/253 3780/2224/243 +f 3768/2202/283 3776/2217/263 3777/2225/241 +f 3793/2226/264 3794/3887/270 3786/2227/238 +f 3791/2229/266 3792/2238/272 3784/2230/241 +f 3796/2232/268 3797/2241/274 3789/2233/269 +f 3794/2235/270 3795/2242/275 3787/2236/271 +f 3792/2238/272 3793/2226/264 3785/2228/265 +f 3790/2239/273 3791/2229/266 3783/2231/267 +f 3797/2241/274 3790/2239/273 3782/2240/239 +f 3795/2242/275 3796/2232/268 3788/2234/243 +f 3797/2241/274 3796/2250/268 3803/2243/281 +f 3792/2245/272 3800/2252/282 3801/2246/277 +f 3791/2229/266 3790/2239/273 3798/2248/279 +f 3797/2241/274 3804/2244/276 3798/2248/279 +f 3796/2250/268 3795/2261/275 3802/2251/280 +f 3791/2229/266 3799/2249/278 3800/2252/282 +f 3799/2249/278 3806/2257/283 3807/2253/284 +f 3803/2243/281 3810/2259/289 3811/2254/285 +f 3800/2252/282 3807/2253/284 3808/2255/286 +f 3799/2249/278 3798/2248/279 3805/2256/287 +f 3804/2244/276 3811/2254/285 3805/2256/287 +f 3803/2243/281 3802/2251/280 3809/2258/288 +f 3810/2263/289 3818/2275/243 3819/2264/258 +f 3807/2265/284 3815/2276/241 3816/2266/257 +f 3805/2256/287 3813/2271/242 3814/2268/263 +f 3808/2267/286 3816/2266/257 3812/2269/240 +f 3811/2254/285 3819/2264/258 3813/2271/242 +f 3794/2272/270 3812/3888/240 3817/2273/253 +f 3809/2274/288 3817/2273/253 3818/2275/243 +f 3806/2257/283 3814/2268/263 3815/2276/241 +f 3831/2277/364 3832/3889/290 3824/2278/238 +f 3829/2280/365 3830/2289/368 3822/2281/243 +f 3834/2283/366 3835/2292/370 3827/2284/267 +f 3824/2286/238 3832/3890/290 3833/2287/367 +f 3830/2289/368 3831/2277/364 3823/2279/271 +f 3828/2290/369 3829/2280/365 3821/2282/269 +f 3835/2292/370 3828/2290/369 3820/2291/239 +f 3833/2287/367 3834/2283/366 3826/2285/241 +f 3835/2292/370 3834/2300/366 3841/2293/371 +f 3830/2295/368 3838/2302/376 3839/2296/373 +f 3829/2280/365 3828/2290/369 3836/2298/291 +f 3835/2292/370 3842/2294/372 3836/2298/291 +f 3834/2300/366 3833/2311/367 3840/2301/375 +f 3829/2280/365 3837/2299/374 3838/2302/376 +f 3838/2302/376 3837/2299/374 3844/2303/377 +f 3842/2294/372 3841/2293/371 3848/2305/379 +f 3838/2302/376 3845/2304/378 3846/2307/381 +f 3837/2299/374 3836/2298/291 3843/2308/382 +f 3842/2294/372 3849/2306/380 3843/2308/382 +f 3841/2293/371 3840/2301/375 3847/2309/383 +f 3848/2313/379 3856/2325/241 3857/2314/257 +f 3845/2315/378 3853/2326/243 3854/2316/258 +f 3843/2308/382 3851/2321/240 3852/2318/253 +f 3846/2317/381 3854/2316/258 3850/2319/242 +f 3849/2306/380 3857/2314/257 3851/2321/240 +f 3832/2322/290 3850/3891/242 3855/2323/263 +f 3847/2324/383 3855/2323/263 3856/2325/241 +f 3844/2303/377 3852/2318/253 3853/2326/243 +f 3869/2327/364 3870/3892/290 3862/2328/238 +f 3867/2330/365 3868/2339/368 3860/2331/243 +f 3872/2333/366 3873/2342/370 3865/2334/267 +f 3870/2336/290 3871/2343/367 3863/2337/265 +f 3868/2339/368 3869/2327/364 3861/2329/271 +f 3866/2340/369 3867/2330/365 3859/2332/269 +f 3873/2342/370 3866/2340/369 3858/2341/239 +f 3871/2343/367 3872/2333/366 3864/2335/241 +f 3873/2342/370 3872/2351/366 3879/2344/371 +f 3868/2346/368 3876/2353/376 3877/2347/373 +f 3866/2340/369 3874/2350/291 3875/2349/374 +f 3873/2342/370 3880/2345/372 3874/2350/291 +f 3872/2351/366 3871/2361/367 3878/2352/375 +f 3867/2330/365 3875/2349/374 3876/2353/376 +f 3876/2353/376 3875/2349/374 3882/2354/377 +f 3879/2344/371 3886/2359/379 3887/2356/380 +f 3877/2347/373 3876/2353/376 3883/2355/378 +f 3875/2349/374 3874/2350/291 3881/2358/382 +f 3880/2345/372 3887/2356/380 3881/2358/382 +f 3878/2352/375 3885/2362/383 3886/2359/379 +f 3886/2364/379 3894/2376/241 3895/2365/257 +f 3883/2366/378 3891/2377/243 3892/2367/258 +f 3881/2358/382 3889/2372/240 3890/2369/253 +f 3884/2368/381 3892/2367/258 3888/2370/242 +f 3887/2356/380 3895/2365/257 3889/2372/240 +f 3870/2373/290 3888/3893/242 3893/2374/263 +f 3885/2375/383 3893/2374/263 3894/2376/241 +f 3882/2354/377 3890/2369/253 3891/2377/243 +f 3907/2378/364 3908/3894/290 3900/2379/238 +f 3905/2381/365 3906/2390/368 3898/2382/243 +f 3910/2384/366 3911/2392/370 3903/2385/267 +f 3908/2387/290 3909/2393/367 3901/2388/265 +f 3906/2390/368 3907/2378/364 3899/2380/271 +f 3896/2391/239 3904/2401/369 3905/2381/365 +f 3911/2392/370 3904/2401/369 3896/2391/239 +f 3909/2393/367 3910/2384/366 3902/2386/241 +f 3911/2392/370 3910/2402/366 3917/2394/371 +f 3906/2396/368 3914/2404/376 3915/2397/373 +f 3905/2381/365 3904/2401/369 3912/2399/291 +f 3911/2392/370 3918/2395/372 3912/2399/291 +f 3910/2402/366 3909/2413/367 3916/2403/375 +f 3905/2381/365 3913/2400/374 3914/2404/376 +f 3914/2404/376 3913/2400/374 3920/2405/377 +f 3917/2394/371 3924/2411/379 3925/2407/380 +f 3914/2404/376 3921/2406/378 3922/2408/381 +f 3913/2400/374 3912/2399/291 3919/2409/382 +f 3918/2395/372 3925/2407/380 3919/2409/382 +f 3917/2394/371 3916/2403/375 3923/2410/383 +f 3924/2415/379 3932/2427/241 3933/2416/257 +f 3921/2417/378 3929/2428/243 3930/2418/258 +f 3919/2409/382 3927/2423/240 3928/2420/253 +f 3922/2419/381 3930/2418/258 3926/2421/242 +f 3925/2407/380 3933/2416/257 3927/2423/240 +f 3908/2424/290 3926/3895/242 3931/2425/263 +f 3923/2426/383 3931/2425/263 3932/2427/241 +f 3920/2405/377 3928/2420/253 3929/2428/243 +f 3945/2429/364 3946/3896/290 3938/2430/238 +f 3943/2432/365 3944/2441/368 3936/2433/243 +f 3948/2435/366 3949/2444/370 3941/2436/267 +f 3946/2438/290 3947/2445/367 3939/2439/265 +f 3944/2441/368 3945/2429/364 3937/2431/271 +f 3942/2442/369 3943/2432/365 3935/2434/269 +f 3949/2444/370 3942/2442/369 3934/2443/239 +f 3947/2445/367 3948/2435/366 3940/2437/241 +f 3949/2444/370 3948/2453/366 3955/2446/371 +f 3944/2448/368 3952/2455/376 3953/2449/373 +f 3943/2432/365 3942/2442/369 3950/2451/291 +f 3949/2444/370 3956/2447/372 3950/2451/291 +f 3948/2453/366 3947/2463/367 3954/2454/375 +f 3943/2432/365 3951/2452/374 3952/2455/376 +f 3952/2455/376 3951/2452/374 3958/2456/377 +f 3955/2446/371 3962/2461/379 3963/2458/380 +f 3952/2455/376 3959/2457/378 3960/2459/381 +f 3951/2452/374 3950/2451/291 3957/2460/382 +f 3956/2447/372 3963/2458/380 3957/2460/382 +f 3954/2454/375 3961/2464/383 3962/2461/379 +f 3962/2466/379 3970/2478/241 3971/2467/257 +f 3959/2468/378 3967/2479/243 3968/2469/258 +f 3957/2460/382 3965/2474/240 3966/2471/253 +f 3960/2470/381 3968/2469/258 3964/2472/242 +f 3963/2458/380 3971/2467/257 3965/2474/240 +f 3946/2475/290 3964/3897/242 3969/2476/263 +f 3961/2477/383 3969/2476/263 3970/2478/241 +f 3958/2456/377 3966/2471/253 3967/2479/243 +f 3983/2480/364 3984/3898/290 3976/2481/238 +f 3981/2483/365 3982/2492/368 3974/2484/243 +f 3986/2486/366 3987/2495/370 3979/2487/267 +f 3976/2489/238 3984/3899/290 3985/2490/367 +f 3982/2492/368 3983/2480/364 3975/2482/271 +f 3980/2493/369 3981/2483/365 3973/2485/269 +f 3987/2495/370 3980/2493/369 3972/2494/239 +f 3985/2490/367 3986/2486/366 3978/2488/241 +f 3987/2495/370 3986/2503/366 3993/2496/371 +f 3982/2498/368 3990/2505/376 3991/2499/373 +f 3981/2483/365 3980/2493/369 3988/2501/291 +f 3987/2495/370 3994/2497/372 3988/2501/291 +f 3986/2503/366 3985/2514/367 3992/2504/375 +f 3981/2483/365 3989/2502/374 3990/2505/376 +f 3990/2505/376 3989/2502/374 3996/2506/377 +f 3993/2496/371 4000/2512/379 4001/2508/380 +f 3991/2499/373 3990/2505/376 3997/2507/378 +f 3989/2502/374 3988/2501/291 3995/2510/382 +f 3994/2497/372 4001/2508/380 3995/2510/382 +f 3993/2496/371 3992/2504/375 3999/2511/383 +f 4000/2516/379 4008/2528/241 4009/2517/257 +f 3997/2518/378 4005/2529/243 4006/2519/258 +f 3995/2510/382 4003/2524/240 4004/2521/253 +f 3998/2520/381 4006/2519/258 4002/2522/242 +f 4001/2508/380 4009/2517/257 4003/2524/240 +f 3984/2525/290 4002/3900/242 4007/2526/263 +f 3999/2527/383 4007/2526/263 4008/2528/241 +f 3996/2506/377 4004/2521/253 4005/2529/243 +f 4014/2530/238 4022/3901/238 4021/2531/265 +f 4014/2533/238 4015/2537/271 4023/2534/271 +f 4016/2536/243 4024/2539/243 4023/2534/271 +f 4017/2538/269 4025/2541/269 4024/2539/243 +f 4010/2540/239 4018/2543/239 4025/2541/269 +f 4011/2542/267 4019/2545/267 4018/2543/239 +f 4012/2544/241 4020/2546/241 4019/2545/267 +f 4013/2532/265 4021/2531/265 4020/2546/241 +f 4030/2547/238 4038/3902/238 4037/2548/265 +f 4031/2550/271 4039/2554/271 4038/2551/238 +f 4032/2553/243 4040/2556/243 4039/2554/271 +f 4033/2555/269 4041/2558/269 4040/2556/243 +f 4026/2557/239 4034/2560/239 4041/2558/269 +f 4027/2559/267 4035/2562/267 4034/2560/239 +f 4028/2561/241 4036/2563/241 4035/2562/267 +f 4029/2549/265 4037/2548/265 4036/2563/241 +f 4045/2564/265 4046/3903/238 4054/2565/238 +f 4047/2567/271 4055/2571/271 4054/2568/238 +f 4048/2570/243 4056/2573/243 4055/2571/271 +f 4049/2572/269 4057/2575/269 4056/2573/243 +f 4042/2574/239 4050/2577/239 4057/2575/269 +f 4043/2576/267 4051/2579/267 4050/2577/239 +f 4043/2576/267 4044/2580/241 4052/2578/241 +f 4045/2564/265 4053/2566/265 4052/2578/241 +f 4062/2581/238 4070/3904/238 4069/2582/265 +f 4063/2584/271 4071/2588/271 4070/2585/238 +f 4064/2587/243 4072/2590/243 4071/2588/271 +f 4065/2589/269 4073/2592/269 4072/2590/243 +f 4058/2591/239 4066/2594/239 4073/2592/269 +f 4059/2593/267 4067/2596/267 4066/2594/239 +f 4060/2595/241 4068/2597/241 4067/2596/267 +f 4061/2583/265 4069/2582/265 4068/2597/241 +f 3316/2598/261 4079/555/261 4080/554/242 +f 3317/2599/242 4080/554/242 4094/584/260 +f 3308/2600/262 4088/572/262 4087/571/240 +f 3315/2602/263 4081/557/263 4079/555/261 +f 3307/1680/253 4089/574/253 4088/572/262 +f 3314/1679/254 4082/558/254 4081/557/263 +f 3300/553/262 4095/2606/262 4096/2603/240 +f 3301/585/240 4096/2603/240 4110/2604/259 +f 3292/570/261 4104/2607/261 4103/2605/242 +f 3299/556/253 4097/2608/253 4095/2606/262 +f 3291/573/263 4105/2609/263 4104/2607/261 +f 3298/559/252 4098/2610/252 4097/2608/253 +f 4074/575/254 4106/2611/254 4105/2609/263 +f 3297/560/243 4099/2612/243 4098/2610/252 +f 4075/577/241 4107/2613/241 4106/2611/254 +f 3296/563/256 4100/2615/256 4099/2612/243 +f 4076/580/255 4108/2616/255 4107/2613/241 +f 3296/563/256 3295/564/258 4101/2614/258 +f 4077/582/257 4109/2617/257 4108/2616/255 +f 3294/566/260 4102/2618/260 4101/2614/258 +f 4078/583/259 4110/2604/259 4109/2617/257 +f 3293/568/242 4103/3905/242 4102/2618/260 +f 4134/2619/244 4111/2631/244 4121/2620/242 +f 4127/2622/245 4118/2633/245 4117/2623/246 +f 4130/2625/247 4115/2635/247 4114/2626/248 +f 4123/2621/242 4121/2620/242 4122/2628/249 +f 4133/2630/250 4112/2637/250 4111/2631/244 +f 4126/2632/241 4119/3906/241 4118/2633/245 +f 4129/2634/240 4116/2641/240 4115/2635/247 +f 4132/2636/243 4113/2642/243 4112/2637/250 +f 4125/2638/251 4120/2643/251 4119/2639/241 +f 4128/2624/246 4117/2623/246 4116/2641/240 +f 4131/2627/248 4114/2626/248 4113/2642/243 +f 4124/2629/249 4122/2628/249 4120/2643/251 +f 4158/2644/244 4135/2656/244 4145/2645/242 +f 4151/2647/245 4142/2658/245 4141/2648/246 +f 4154/2650/247 4139/2660/247 4138/2651/248 +f 4147/2646/242 4145/2645/242 4146/2653/249 +f 4157/2655/250 4136/2662/250 4135/2656/244 +f 4150/2657/241 4143/3907/241 4142/2658/245 +f 4153/2659/240 4140/2666/240 4139/2660/247 +f 4156/2661/243 4137/2667/243 4136/2662/250 +f 4149/2663/251 4144/2668/251 4143/2664/241 +f 4152/2649/246 4141/2648/246 4140/2666/240 +f 4155/2652/248 4138/2651/248 4137/2667/243 +f 4148/2654/249 4146/2653/249 4144/2668/251 +f 4182/2669/244 4159/2681/244 4169/2670/242 +f 4175/2672/245 4166/2683/245 4165/2673/246 +f 4178/2675/247 4163/2685/247 4162/2676/248 +f 4171/2671/242 4169/2670/242 4170/2678/249 +f 4181/2680/250 4160/2687/250 4159/2681/244 +f 4174/2682/241 4167/3908/241 4166/2683/245 +f 4177/2684/240 4164/2691/240 4163/2685/247 +f 4180/2686/243 4161/2692/243 4160/2687/250 +f 4173/2688/251 4168/2693/251 4167/2689/241 +f 4176/2674/246 4165/2673/246 4164/2691/240 +f 4179/2677/248 4162/2676/248 4161/2692/243 +f 4172/2679/249 4170/2678/249 4168/2693/251 +f 4206/2694/244 4183/2706/244 4193/2695/242 +f 4199/2697/245 4190/2708/245 4189/2698/246 +f 4202/2700/247 4187/2710/247 4186/2701/248 +f 4195/2696/242 4193/2695/242 4194/2703/249 +f 4205/2705/250 4184/2712/250 4183/2706/244 +f 4198/2707/241 4191/3909/241 4190/2708/245 +f 4201/2709/240 4188/2716/240 4187/2710/247 +f 4204/2711/243 4185/2717/243 4184/2712/250 +f 4197/2713/251 4192/2718/251 4191/2714/241 +f 4200/2699/246 4189/2698/246 4188/2716/240 +f 4203/2702/248 4186/2701/248 4185/2717/243 +f 4196/2704/249 4194/2703/249 4192/2718/251 +f 4230/2719/246 4207/2731/246 4217/2720/240 +f 4223/2722/250 4214/2733/250 4213/2723/244 +f 4226/2725/249 4211/2735/249 4210/2726/251 +f 4219/2721/240 4217/2720/240 4218/2728/247 +f 4229/2730/245 4208/2737/245 4207/2731/246 +f 4222/2732/243 4215/3910/243 4214/2733/250 +f 4225/2734/242 4212/2741/242 4211/2735/249 +f 4228/2736/241 4209/2742/241 4208/2737/245 +f 4221/2738/248 4216/2743/248 4215/2739/243 +f 4224/2724/244 4213/2723/244 4212/2741/242 +f 4227/2727/251 4210/2726/251 4209/2742/241 +f 4220/2729/247 4218/2728/247 4216/2743/248 +f 4254/2744/246 4231/2756/246 4241/2745/240 +f 4247/2747/250 4238/2758/250 4237/2748/244 +f 4250/2750/249 4235/2760/249 4234/2751/251 +f 4243/2746/240 4241/2745/240 4242/2753/247 +f 4253/2755/245 4232/2762/245 4231/2756/246 +f 4246/2757/243 4239/3911/243 4238/2758/250 +f 4249/2759/242 4236/2766/242 4235/2760/249 +f 4252/2761/241 4233/2767/241 4232/2762/245 +f 4245/2763/248 4240/2768/248 4239/2764/243 +f 4248/2749/244 4237/2748/244 4236/2766/242 +f 4251/2752/251 4234/2751/251 4233/2767/241 +f 4244/2754/247 4242/2753/247 4240/2768/248 +f 4278/2769/246 4255/2781/246 4265/2770/240 +f 4271/2772/250 4262/2783/250 4261/2773/244 +f 4274/2775/249 4259/2785/249 4258/2776/251 +f 4267/2771/240 4265/2770/240 4266/2778/247 +f 4277/2780/245 4256/2787/245 4255/2781/246 +f 4270/2782/243 4263/3912/243 4262/2783/250 +f 4273/2784/242 4260/2791/242 4259/2785/249 +f 4276/2786/241 4257/2792/241 4256/2787/245 +f 4269/2788/248 4264/2793/248 4263/2789/243 +f 4272/2774/244 4261/2773/244 4260/2791/242 +f 4275/2777/251 4258/2776/251 4257/2792/241 +f 4268/2779/247 4266/2778/247 4264/2793/248 +f 4302/2794/246 4279/2806/246 4289/2795/240 +f 4295/2797/250 4286/2808/250 4285/2798/244 +f 4298/2800/249 4283/2810/249 4282/2801/251 +f 4291/2796/240 4289/2795/240 4290/2803/247 +f 4301/2805/245 4280/2812/245 4279/2806/246 +f 4294/2807/243 4287/3913/243 4286/2808/250 +f 4297/2809/242 4284/2816/242 4283/2810/249 +f 4300/2811/241 4281/2817/241 4280/2812/245 +f 4293/2813/248 4288/2818/248 4287/2814/243 +f 4296/2799/244 4285/2798/244 4284/2816/242 +f 4299/2802/251 4282/2801/251 4281/2817/241 +f 4292/2804/247 4290/2803/247 4288/2818/248 +f 4326/2819/246 4303/2831/246 4313/2820/240 +f 4319/2822/250 4310/2833/250 4309/2823/244 +f 4322/2825/249 4307/2835/249 4306/2826/251 +f 4315/2821/240 4313/2820/240 4314/2828/247 +f 4325/2830/245 4304/2837/245 4303/2831/246 +f 4318/2832/243 4311/3914/243 4310/2833/250 +f 4321/2834/242 4308/2841/242 4307/2835/249 +f 4324/2836/241 4305/2842/241 4304/2837/245 +f 4317/2838/248 4312/2843/248 4311/2839/243 +f 4320/2824/244 4309/2823/244 4308/2841/242 +f 4323/2827/251 4306/2826/251 4305/2842/241 +f 4316/2829/247 4314/2828/247 4312/2843/248 +f 4486/2844/279 4479/2860/239 4471/2845/239 +f 4484/2847/290 4485/2856/242 4477/2848/242 +f 4482/2850/270 4483/3915/238 4475/2851/238 +f 4480/2853/291 4481/2859/240 4473/2854/240 +f 4485/2856/242 4486/2844/279 4478/2846/279 +f 4483/2857/238 4484/2847/290 4476/2849/290 +f 4481/2859/240 4482/2850/270 4474/2852/270 +f 4479/2860/239 4480/2853/291 4472/2855/291 +f 4498/2861/324 4499/3916/271 4491/2862/238 +f 4496/2864/325 4497/2873/327 4489/2865/240 +f 4501/2867/326 4502/2876/329 4494/2868/279 +f 4499/2870/271 4500/2877/330 4492/2871/290 +f 4497/2873/327 4498/2861/324 4490/2863/270 +f 4495/2874/328 4496/2864/325 4488/2866/291 +f 4502/2876/329 4495/2874/328 4487/2875/239 +f 4500/2877/330 4501/2867/326 4493/2869/242 +f 4501/2878/326 4508/2886/331 4509/2879/332 +f 4497/2880/327 4505/2887/336 4506/2881/333 +f 4495/2874/328 4503/2884/267 4504/2883/334 +f 4495/2874/328 4502/2876/329 4509/2879/332 +f 4501/2878/326 4500/2895/330 4507/2885/335 +f 4496/2864/325 4504/2883/334 4505/2887/336 +f 4504/2883/334 4511/2891/337 4512/2888/338 +f 4508/2886/331 4515/2893/342 4516/2889/339 +f 4506/2881/333 4505/2887/336 4512/2888/338 +f 4503/2884/267 4510/2892/341 4511/2891/337 +f 4503/2884/267 4509/2879/332 4516/2889/339 +f 4507/2885/335 4514/2896/343 4515/2893/342 +f 4515/2898/342 4523/2910/349 4524/2899/344 +f 4512/2900/338 4520/2911/350 4521/2901/345 +f 4510/2892/341 4518/2906/267 4519/2903/346 +f 4513/2902/340 4521/2901/345 4517/2904/347 +f 4516/2889/339 4524/2899/344 4518/2906/267 +f 4499/2907/271 4517/2919/347 4522/2908/348 +f 4514/2909/343 4522/2908/348 4523/2910/349 +f 4511/2891/337 4519/2903/346 4520/2911/350 +f 4517/2904/347 4521/2901/345 4528/2912/351 +f 4522/2908/348 4529/2920/355 4530/2914/352 +f 4520/2916/350 4519/2931/346 4526/2917/353 +f 4517/2919/347 4525/3917/271 4529/2920/355 +f 4523/2915/349 4530/2914/352 4531/2921/356 +f 4521/2901/345 4520/2916/350 4527/2918/354 +f 4529/2920/355 4525/3917/271 4532/2923/360 +f 4530/2914/352 4529/2920/355 4536/2924/357 +f 4526/2917/353 4533/2932/363 4534/2926/359 +f 4528/2912/351 4535/2929/362 4532/2927/360 +f 4531/2921/356 4530/2914/352 4537/2925/358 +f 4527/2918/354 4534/2926/359 4535/2929/362 +f 4536/2924/357 4544/2945/290 4545/2933/242 +f 4533/2935/363 4541/2939/291 4542/2936/240 +f 4518/2938/267 4539/2942/239 4541/2939/291 +f 4535/2929/362 4543/2944/270 4540/2940/238 +f 4538/2941/361 4546/2943/279 4539/2942/239 +f 4537/2934/358 4545/2933/242 4546/2943/279 +f 4534/2937/359 4542/2936/240 4543/2944/270 +f 4532/2923/360 4540/3918/238 4544/2945/290 +f 4558/2946/324 4559/3919/271 4551/2947/238 +f 4556/2949/325 4557/2958/327 4549/2950/240 +f 4561/2952/326 4562/2961/329 4554/2953/279 +f 4559/2955/271 4560/2962/330 4552/2956/290 +f 4557/2958/327 4558/2946/324 4550/2948/270 +f 4555/2959/328 4556/2949/325 4548/2951/291 +f 4562/2961/329 4555/2959/328 4547/2960/239 +f 4560/2962/330 4561/2952/326 4553/2954/242 +f 4561/2963/326 4568/2971/331 4569/2964/332 +f 4557/2965/327 4565/2972/336 4566/2966/333 +f 4555/2959/328 4563/2969/267 4564/2968/334 +f 4555/2959/328 4562/2961/329 4569/2964/332 +f 4561/2963/326 4560/2980/330 4567/2970/335 +f 4556/2949/325 4564/2968/334 4565/2972/336 +f 4565/2972/336 4564/2968/334 4571/2973/337 +f 4568/2971/331 4575/2978/342 4576/2975/339 +f 4566/2966/333 4565/2972/336 4572/2974/338 +f 4563/2969/267 4570/2977/341 4571/2973/337 +f 4563/2969/267 4569/2964/332 4576/2975/339 +f 4567/2970/335 4574/2981/343 4575/2978/342 +f 4575/2983/342 4583/2995/349 4584/2984/344 +f 4572/2985/338 4580/2996/350 4581/2986/345 +f 4570/2977/341 4578/2991/267 4579/2988/346 +f 4573/2987/340 4581/2986/345 4577/2989/347 +f 4576/2975/339 4584/2984/344 4578/2991/267 +f 4559/2992/271 4577/3004/347 4582/2993/348 +f 4574/2994/343 4582/2993/348 4583/2995/349 +f 4571/2973/337 4579/2988/346 4580/2996/350 +f 4577/2989/347 4581/2986/345 4588/2997/351 +f 4582/2993/348 4589/3005/355 4590/2999/352 +f 4580/3001/350 4579/3016/346 4586/3002/353 +f 4577/3004/347 4585/3920/271 4589/3005/355 +f 4583/3000/349 4590/2999/352 4591/3006/356 +f 4581/2986/345 4580/3001/350 4587/3003/354 +f 4589/3005/355 4585/3920/271 4592/3008/360 +f 4590/2999/352 4589/3005/355 4596/3009/357 +f 4586/3002/353 4593/3017/363 4594/3011/359 +f 4588/2997/351 4595/3014/362 4592/3012/360 +f 4591/3006/356 4590/2999/352 4597/3010/358 +f 4588/2997/351 4587/3003/354 4594/3011/359 +f 4596/3009/357 4604/3030/290 4605/3018/242 +f 4593/3020/363 4601/3024/291 4602/3021/240 +f 4578/3023/267 4599/3027/239 4601/3024/291 +f 4595/3014/362 4603/3029/270 4600/3025/238 +f 4598/3026/361 4606/3028/279 4599/3027/239 +f 4597/3019/358 4605/3018/242 4606/3028/279 +f 4594/3022/359 4602/3021/240 4603/3029/270 +f 4592/3008/360 4600/3921/238 4604/3030/290 +f 4618/3031/324 4619/3922/271 4611/3032/238 +f 4616/3034/325 4617/3043/327 4609/3035/240 +f 4621/3037/326 4622/3046/329 4614/3038/279 +f 4619/3040/271 4620/3047/330 4612/3041/290 +f 4617/3043/327 4618/3031/324 4610/3033/270 +f 4615/3044/328 4616/3034/325 4608/3036/291 +f 4622/3046/329 4615/3044/328 4607/3045/239 +f 4620/3047/330 4621/3037/326 4613/3039/242 +f 4622/3046/329 4621/3055/326 4628/3048/331 +f 4617/3050/327 4625/3057/336 4626/3051/333 +f 4615/3044/328 4623/3054/267 4624/3053/334 +f 4622/3046/329 4629/3049/332 4623/3054/267 +f 4621/3055/326 4620/3065/330 4627/3056/335 +f 4616/3034/325 4624/3053/334 4625/3057/336 +f 4625/3057/336 4624/3053/334 4631/3058/337 +f 4628/3048/331 4635/3063/342 4636/3060/339 +f 4626/3051/333 4625/3057/336 4632/3059/338 +f 4623/3054/267 4630/3062/341 4631/3058/337 +f 4623/3054/267 4629/3049/332 4636/3060/339 +f 4627/3056/335 4634/3066/343 4635/3063/342 +f 4635/3068/342 4643/3080/349 4644/3069/344 +f 4632/3070/338 4640/3081/350 4641/3071/345 +f 4630/3062/341 4638/3076/267 4639/3073/346 +f 4633/3072/340 4641/3071/345 4637/3074/347 +f 4636/3060/339 4644/3069/344 4638/3076/267 +f 4619/3077/271 4637/3089/347 4642/3078/348 +f 4634/3079/343 4642/3078/348 4643/3080/349 +f 4631/3058/337 4639/3073/346 4640/3081/350 +f 4637/3074/347 4641/3071/345 4648/3082/351 +f 4642/3078/348 4649/3090/355 4650/3084/352 +f 4640/3086/350 4639/3101/346 4646/3087/353 +f 4637/3089/347 4645/3923/271 4649/3090/355 +f 4643/3085/349 4650/3084/352 4651/3091/356 +f 4641/3071/345 4640/3086/350 4647/3088/354 +f 4649/3090/355 4645/3923/271 4652/3093/360 +f 4650/3084/352 4649/3090/355 4656/3094/357 +f 4646/3087/353 4653/3102/363 4654/3096/359 +f 4648/3082/351 4655/3099/362 4652/3097/360 +f 4651/3091/356 4650/3084/352 4657/3095/358 +f 4647/3088/354 4654/3096/359 4655/3099/362 +f 4656/3094/357 4664/3115/290 4665/3103/242 +f 4653/3105/363 4661/3109/291 4662/3106/240 +f 4638/3108/267 4659/3112/239 4661/3109/291 +f 4655/3099/362 4663/3114/270 4660/3110/238 +f 4658/3111/361 4666/3113/279 4659/3112/239 +f 4657/3104/358 4665/3103/242 4666/3113/279 +f 4654/3107/359 4662/3106/240 4663/3114/270 +f 4652/3093/360 4660/3924/238 4664/3115/290 +f 4678/3116/324 4679/3925/271 4671/3117/238 +f 4676/3119/325 4677/3128/327 4669/3120/240 +f 4681/3122/326 4682/3131/329 4674/3123/279 +f 4679/3125/271 4680/3132/330 4672/3126/290 +f 4677/3128/327 4678/3116/324 4670/3118/270 +f 4675/3129/328 4676/3119/325 4668/3121/291 +f 4682/3131/329 4675/3129/328 4667/3130/239 +f 4680/3132/330 4681/3122/326 4673/3124/242 +f 4681/3133/326 4688/3141/331 4689/3134/332 +f 4677/3135/327 4685/3142/336 4686/3136/333 +f 4676/3119/325 4675/3129/328 4683/3138/267 +f 4682/3131/329 4689/3134/332 4683/3138/267 +f 4681/3133/326 4680/3150/330 4687/3140/335 +f 4676/3119/325 4684/3139/334 4685/3142/336 +f 4685/3142/336 4684/3139/334 4691/3143/337 +f 4688/3141/331 4695/3148/342 4696/3145/339 +f 4686/3136/333 4685/3142/336 4692/3144/338 +f 4683/3138/267 4690/3147/341 4691/3143/337 +f 4683/3138/267 4689/3134/332 4696/3145/339 +f 4687/3140/335 4694/3151/343 4695/3148/342 +f 4695/3153/342 4703/3165/349 4704/3154/344 +f 4692/3155/338 4700/3166/350 4701/3156/345 +f 4690/3147/341 4698/3161/267 4699/3158/346 +f 4693/3157/340 4701/3156/345 4697/3159/347 +f 4696/3145/339 4704/3154/344 4698/3161/267 +f 4679/3162/271 4697/3174/347 4702/3163/348 +f 4694/3164/343 4702/3163/348 4703/3165/349 +f 4691/3143/337 4699/3158/346 4700/3166/350 +f 4697/3159/347 4701/3156/345 4708/3167/351 +f 4702/3163/348 4709/3175/355 4710/3169/352 +f 4700/3171/350 4699/3186/346 4706/3172/353 +f 4697/3174/347 4705/3926/271 4709/3175/355 +f 4703/3170/349 4710/3169/352 4711/3176/356 +f 4701/3156/345 4700/3171/350 4707/3173/354 +f 4709/3175/355 4705/3926/271 4712/3178/360 +f 4710/3169/352 4709/3175/355 4716/3179/357 +f 4706/3172/353 4713/3187/363 4714/3181/359 +f 4708/3167/351 4715/3184/362 4712/3182/360 +f 4711/3176/356 4710/3169/352 4717/3180/358 +f 4708/3167/351 4707/3173/354 4714/3181/359 +f 4716/3179/357 4724/3200/290 4725/3188/242 +f 4713/3190/363 4721/3194/291 4722/3191/240 +f 4698/3193/267 4719/3197/239 4721/3194/291 +f 4715/3184/362 4723/3199/270 4720/3195/238 +f 4718/3196/361 4726/3198/279 4719/3197/239 +f 4717/3189/358 4725/3188/242 4726/3198/279 +f 4714/3192/359 4722/3191/240 4723/3199/270 +f 4712/3178/360 4720/3927/238 4724/3200/290 +f 4738/3201/384 4739/3928/265 4731/3202/238 +f 4736/3204/385 4737/3213/387 4729/3205/242 +f 4741/3207/386 4742/3216/389 4734/3208/291 +f 4739/3210/265 4740/3217/390 4732/3211/270 +f 4737/3213/387 4738/3201/384 4730/3203/290 +f 4735/3214/388 4736/3204/385 4728/3206/279 +f 4742/3216/389 4735/3214/388 4727/3215/239 +f 4740/3217/390 4741/3207/386 4733/3209/240 +f 4742/3216/389 4741/3226/386 4748/3218/391 +f 4738/3220/384 4737/3227/387 4745/3221/393 +f 4735/3214/388 4743/3224/269 4744/3223/395 +f 4735/3214/388 4742/3216/389 4749/3219/392 +f 4740/3225/390 4747/3233/401 4748/3218/391 +f 4737/3227/387 4736/3204/385 4744/3223/395 +f 4745/3221/393 4744/3223/395 4751/3228/396 +f 4748/3218/391 4755/3234/402 4756/3230/398 +f 4746/3222/394 4745/3221/393 4752/3229/397 +f 4743/3224/269 4750/3232/400 4751/3228/396 +f 4743/3224/269 4749/3219/392 4756/3230/398 +f 4747/3233/401 4754/3236/403 4755/3234/402 +f 4755/3238/402 4763/3250/409 4764/3239/404 +f 4752/3240/397 4760/3251/410 4761/3241/405 +f 4750/3232/400 4758/3246/269 4759/3243/406 +f 4753/3242/399 4761/3241/405 4757/3244/407 +f 4756/3230/398 4764/3239/404 4758/3246/269 +f 4739/3247/265 4757/3259/407 4762/3248/408 +f 4754/3249/403 4762/3248/408 4763/3250/409 +f 4751/3228/396 4759/3243/406 4760/3251/410 +f 4757/3244/407 4761/3241/405 4768/3252/411 +f 4762/3248/408 4769/3260/415 4770/3254/412 +f 4760/3256/410 4759/3271/406 4766/3257/413 +f 4757/3259/407 4765/3929/265 4769/3260/415 +f 4763/3255/409 4770/3254/412 4771/3261/416 +f 4761/3241/405 4760/3256/410 4767/3258/414 +f 4769/3260/415 4765/3929/265 4772/3263/417 +f 4770/3254/412 4769/3260/415 4776/3264/418 +f 4766/3257/413 4773/3272/423 4774/3266/420 +f 4768/3252/411 4775/3269/422 4772/3267/417 +f 4771/3261/416 4770/3254/412 4777/3265/419 +f 4767/3258/414 4774/3266/420 4775/3269/422 +f 4776/3264/418 4784/3285/270 4785/3273/240 +f 4774/3275/420 4773/3279/423 4781/3276/279 +f 4758/3278/269 4779/3282/239 4781/3276/279 +f 4775/3269/422 4783/3284/290 4780/3280/238 +f 4778/3281/421 4786/3283/291 4779/3282/239 +f 4777/3274/419 4785/3273/240 4786/3283/291 +f 4774/3275/420 4782/3277/242 4783/3284/290 +f 4772/3263/417 4780/3930/238 4784/3285/270 +f 4798/3286/384 4799/3931/265 4791/3287/238 +f 4796/3289/385 4797/3298/387 4789/3290/242 +f 4801/3292/386 4802/3301/389 4794/3293/291 +f 4799/3295/265 4800/3302/390 4792/3296/270 +f 4797/3298/387 4798/3286/384 4790/3288/290 +f 4795/3299/388 4796/3289/385 4788/3291/279 +f 4802/3301/389 4795/3299/388 4787/3300/239 +f 4800/3302/390 4801/3292/386 4793/3294/240 +f 4802/3301/389 4801/3310/386 4808/3303/391 +f 4797/3305/387 4805/3312/393 4806/3306/394 +f 4795/3299/388 4803/3309/269 4804/3308/395 +f 4795/3299/388 4802/3301/389 4809/3304/392 +f 4801/3310/386 4800/3320/390 4807/3311/401 +f 4796/3289/385 4804/3308/395 4805/3312/393 +f 4805/3312/393 4804/3308/395 4811/3313/396 +f 4808/3303/391 4815/3318/402 4816/3315/398 +f 4806/3306/394 4805/3312/393 4812/3314/397 +f 4803/3309/269 4810/3317/400 4811/3313/396 +f 4803/3309/269 4809/3304/392 4816/3315/398 +f 4807/3311/401 4814/3321/403 4815/3318/402 +f 4815/3323/402 4823/3335/409 4824/3324/404 +f 4812/3325/397 4820/3336/410 4821/3326/405 +f 4810/3317/400 4818/3331/269 4819/3328/406 +f 4813/3327/399 4821/3326/405 4817/3329/407 +f 4816/3315/398 4824/3324/404 4818/3331/269 +f 4799/3332/265 4817/3343/407 4822/3333/408 +f 4814/3334/403 4822/3333/408 4823/3335/409 +f 4811/3313/396 4819/3328/406 4820/3336/410 +f 4821/3326/405 4828/3347/411 4825/3337/265 +f 4822/3333/408 4829/3344/415 4830/3338/412 +f 4820/3340/410 4819/3356/406 4826/3341/413 +f 4817/3343/407 4825/3932/265 4829/3344/415 +f 4823/3339/409 4830/3338/412 4831/3345/416 +f 4821/3326/405 4820/3340/410 4827/3342/414 +f 4829/3344/415 4825/3932/265 4832/3348/417 +f 4830/3338/412 4829/3344/415 4836/3349/418 +f 4826/3341/413 4833/3357/423 4834/3351/420 +f 4828/3347/411 4835/3354/422 4832/3352/417 +f 4831/3345/416 4830/3338/412 4837/3350/419 +f 4827/3342/414 4834/3351/420 4835/3354/422 +f 4836/3349/418 4844/3370/270 4845/3358/240 +f 4833/3360/423 4841/3364/279 4842/3361/242 +f 4818/3363/269 4839/3367/239 4841/3364/279 +f 4835/3354/422 4843/3369/290 4840/3365/238 +f 4838/3366/421 4846/3368/291 4839/3367/239 +f 4837/3359/419 4845/3358/240 4846/3368/291 +f 4834/3362/420 4842/3361/242 4843/3369/290 +f 4832/3348/417 4840/3933/238 4844/3370/270 +f 4858/3371/384 4859/3934/265 4851/3372/238 +f 4856/3374/385 4857/3383/387 4849/3375/242 +f 4861/3377/386 4862/3386/389 4854/3378/291 +f 4859/3380/265 4860/3387/390 4852/3381/270 +f 4857/3383/387 4858/3371/384 4850/3373/290 +f 4855/3384/388 4856/3374/385 4848/3376/279 +f 4862/3386/389 4855/3384/388 4847/3385/239 +f 4860/3387/390 4861/3377/386 4853/3379/240 +f 4862/3386/389 4861/3395/386 4868/3388/391 +f 4857/3390/387 4865/3397/393 4866/3391/394 +f 4855/3384/388 4863/3394/269 4864/3393/395 +f 4855/3384/388 4862/3386/389 4869/3389/392 +f 4861/3395/386 4860/3405/390 4867/3396/401 +f 4856/3374/385 4864/3393/395 4865/3397/393 +f 4864/3393/395 4871/3401/396 4872/3398/397 +f 4868/3388/391 4875/3403/402 4876/3399/398 +f 4866/3391/394 4865/3397/393 4872/3398/397 +f 4863/3394/269 4870/3402/400 4871/3401/396 +f 4863/3394/269 4869/3389/392 4876/3399/398 +f 4867/3396/401 4874/3406/403 4875/3403/402 +f 4875/3408/402 4883/3420/409 4884/3409/404 +f 4872/3410/397 4880/3421/410 4881/3411/405 +f 4870/3402/400 4878/3416/269 4879/3413/406 +f 4873/3412/399 4881/3411/405 4877/3414/407 +f 4876/3399/398 4884/3409/404 4878/3416/269 +f 4859/3417/265 4877/3429/407 4882/3418/408 +f 4874/3419/403 4882/3418/408 4883/3420/409 +f 4871/3401/396 4879/3413/406 4880/3421/410 +f 4877/3414/407 4881/3411/405 4888/3422/411 +f 4882/3418/408 4889/3430/415 4890/3424/412 +f 4880/3426/410 4879/3441/406 4886/3427/413 +f 4877/3429/407 4885/3935/265 4889/3430/415 +f 4883/3425/409 4890/3424/412 4891/3431/416 +f 4881/3411/405 4880/3426/410 4887/3428/414 +f 4889/3430/415 4885/3935/265 4892/3433/417 +f 4890/3424/412 4889/3430/415 4896/3434/418 +f 4886/3427/413 4893/3442/423 4894/3436/420 +f 4888/3422/411 4895/3439/422 4892/3437/417 +f 4891/3431/416 4890/3424/412 4897/3435/419 +f 4887/3428/414 4894/3436/420 4895/3439/422 +f 4896/3434/418 4904/3455/270 4905/3443/240 +f 4893/3445/423 4901/3449/279 4902/3446/242 +f 4878/3448/269 4899/3452/239 4901/3449/279 +f 4895/3439/422 4903/3454/290 4900/3450/238 +f 4898/3451/421 4906/3453/291 4899/3452/239 +f 4897/3444/419 4905/3443/240 4906/3453/291 +f 4894/3447/420 4902/3446/242 4903/3454/290 +f 4892/3433/417 4900/3936/238 4904/3455/270 +f 4910/3456/290 4918/3937/384 4919/3457/265 +f 4916/3459/385 4917/3468/387 4909/3460/242 +f 4921/3462/386 4922/3471/389 4914/3463/291 +f 4919/3465/265 4920/3472/390 4912/3466/270 +f 4917/3468/387 4918/3937/384 4910/3456/290 +f 4915/3469/388 4916/3459/385 4908/3461/279 +f 4922/3471/389 4915/3469/388 4907/3470/239 +f 4920/3472/390 4921/3462/386 4913/3464/240 +f 4921/3473/386 4928/3481/391 4929/3474/392 +f 4917/3475/387 4925/3482/393 4926/3476/394 +f 4915/3469/388 4923/3479/269 4924/3478/395 +f 4915/3469/388 4922/3471/389 4929/3474/392 +f 4921/3473/386 4920/3490/390 4927/3480/401 +f 4916/3459/385 4924/3478/395 4925/3482/393 +f 4925/3482/393 4924/3478/395 4931/3483/396 +f 4928/3481/391 4935/3488/402 4936/3485/398 +f 4926/3476/394 4925/3482/393 4932/3484/397 +f 4923/3479/269 4930/3487/400 4931/3483/396 +f 4923/3479/269 4929/3474/392 4936/3485/398 +f 4927/3480/401 4934/3491/403 4935/3488/402 +f 4935/3493/402 4943/3505/409 4944/3494/404 +f 4932/3495/397 4940/3506/410 4941/3496/405 +f 4930/3487/400 4938/3501/269 4939/3498/406 +f 4933/3497/399 4941/3496/405 4937/3499/407 +f 4936/3485/398 4944/3494/404 4938/3501/269 +f 4919/3502/265 4937/3514/407 4942/3503/408 +f 4934/3504/403 4942/3503/408 4943/3505/409 +f 4931/3483/396 4939/3498/406 4940/3506/410 +f 4937/3499/407 4941/3496/405 4948/3507/411 +f 4942/3503/408 4949/3515/415 4950/3509/412 +f 4940/3511/410 4939/3526/406 4946/3512/413 +f 4937/3514/407 4945/3938/265 4949/3515/415 +f 4943/3510/409 4950/3509/412 4951/3516/416 +f 4941/3496/405 4940/3511/410 4947/3513/414 +f 4949/3515/415 4945/3938/265 4952/3518/417 +f 4950/3509/412 4949/3515/415 4956/3519/418 +f 4946/3512/413 4953/3527/423 4954/3521/420 +f 4945/3508/265 4948/3507/411 4955/3522/422 +f 4951/3516/416 4950/3509/412 4957/3520/419 +f 4947/3513/414 4954/3521/420 4955/3522/422 +f 4956/3519/418 4964/3540/270 4965/3528/240 +f 4954/3530/420 4953/3533/423 4961/3531/279 +f 4953/3533/423 4938/3536/269 4959/3534/239 +f 4955/3522/422 4963/3539/290 4960/3535/238 +f 4938/3536/269 4958/3538/421 4966/3537/291 +f 4958/3538/421 4957/3529/419 4965/3528/240 +f 4954/3530/420 4962/3532/242 4963/3539/290 +f 4952/3518/417 4960/3939/238 4964/3540/270 +f 4978/3541/384 4979/3940/265 4971/3542/238 +f 4976/3544/385 4977/3553/387 4969/3545/242 +f 4981/3547/386 4982/3556/389 4974/3548/291 +f 4979/3550/265 4980/3557/390 4972/3551/270 +f 4977/3553/387 4978/3541/384 4970/3543/290 +f 4975/3554/388 4976/3544/385 4968/3546/279 +f 4982/3556/389 4975/3554/388 4967/3555/239 +f 4980/3557/390 4981/3547/386 4973/3549/240 +f 4982/3556/389 4981/3565/386 4988/3558/391 +f 4977/3560/387 4985/3567/393 4986/3561/394 +f 4975/3554/388 4983/3564/269 4984/3563/395 +f 4982/3556/389 4989/3559/392 4983/3564/269 +f 4981/3565/386 4980/3575/390 4987/3566/401 +f 4976/3544/385 4984/3563/395 4985/3567/393 +f 4985/3567/393 4984/3563/395 4991/3568/396 +f 4988/3558/391 4995/3573/402 4996/3570/398 +f 4986/3561/394 4985/3567/393 4992/3569/397 +f 4983/3564/269 4990/3572/400 4991/3568/396 +f 4983/3564/269 4989/3559/392 4996/3570/398 +f 4987/3566/401 4994/3576/403 4995/3573/402 +f 4995/3578/402 5003/3590/409 5004/3579/404 +f 4992/3580/397 5000/3591/410 5001/3581/405 +f 4990/3572/400 4998/3586/269 4999/3583/406 +f 4993/3582/399 5001/3581/405 4997/3584/407 +f 4996/3570/398 5004/3579/404 4998/3586/269 +f 4979/3587/265 4997/3599/407 5002/3588/408 +f 4994/3589/403 5002/3588/408 5003/3590/409 +f 4991/3568/396 4999/3583/406 5000/3591/410 +f 4997/3584/407 5001/3581/405 5008/3592/411 +f 5002/3588/408 5009/3600/415 5010/3594/412 +f 5000/3596/410 4999/3611/406 5006/3597/413 +f 4997/3599/407 5005/3941/265 5009/3600/415 +f 5003/3595/409 5010/3594/412 5011/3601/416 +f 5001/3581/405 5000/3596/410 5007/3598/414 +f 5009/3600/415 5005/3941/265 5012/3603/417 +f 5010/3594/412 5009/3600/415 5016/3604/418 +f 5006/3597/413 5013/3612/423 5014/3606/420 +f 5008/3592/411 5015/3609/422 5012/3607/417 +f 5011/3601/416 5010/3594/412 5017/3605/419 +f 5007/3598/414 5014/3606/420 5015/3609/422 +f 5016/3604/418 5024/3625/270 5025/3613/240 +f 5013/3615/423 5021/3619/279 5022/3616/242 +f 4998/3618/269 5019/3622/239 5021/3619/279 +f 5015/3609/422 5023/3624/290 5020/3620/238 +f 5018/3621/421 5026/3623/291 5019/3622/239 +f 5017/3614/419 5025/3613/240 5026/3623/291 +f 5014/3617/420 5022/3616/242 5023/3624/290 +f 5012/3603/417 5020/3942/238 5024/3625/270 +f 5038/3626/384 5039/3943/265 5031/3627/238 +f 5036/3629/385 5037/3638/387 5029/3630/242 +f 5041/3632/386 5042/3641/389 5034/3633/291 +f 5039/3635/265 5040/3642/390 5032/3636/270 +f 5037/3638/387 5038/3626/384 5030/3628/290 +f 5035/3639/388 5036/3629/385 5028/3631/279 +f 5042/3641/389 5035/3639/388 5027/3640/239 +f 5040/3642/390 5041/3632/386 5033/3634/240 +f 5041/3643/386 5048/3651/391 5049/3644/392 +f 5037/3645/387 5045/3652/393 5046/3646/394 +f 5036/3629/385 5035/3639/388 5043/3648/269 +f 5042/3641/389 5049/3644/392 5043/3648/269 +f 5041/3643/386 5040/3660/390 5047/3650/401 +f 5036/3629/385 5044/3649/395 5045/3652/393 +f 5045/3652/393 5044/3649/395 5051/3653/396 +f 5048/3651/391 5055/3658/402 5056/3655/398 +f 5046/3646/394 5045/3652/393 5052/3654/397 +f 5043/3648/269 5050/3657/400 5051/3653/396 +f 5043/3648/269 5049/3644/392 5056/3655/398 +f 5047/3650/401 5054/3661/403 5055/3658/402 +f 5055/3663/402 5063/3675/409 5064/3664/404 +f 5052/3665/397 5060/3676/410 5061/3666/405 +f 5050/3657/400 5058/3671/269 5059/3668/406 +f 5053/3667/399 5061/3666/405 5057/3669/407 +f 5056/3655/398 5064/3664/404 5058/3671/269 +f 5039/3672/265 5057/3684/407 5062/3673/408 +f 5054/3674/403 5062/3673/408 5063/3675/409 +f 5051/3653/396 5059/3668/406 5060/3676/410 +f 5057/3669/407 5061/3666/405 5068/3677/411 +f 5062/3673/408 5069/3685/415 5070/3679/412 +f 5060/3681/410 5059/3696/406 5066/3682/413 +f 5057/3684/407 5065/3944/265 5069/3685/415 +f 5063/3680/409 5070/3679/412 5071/3686/416 +f 5061/3666/405 5060/3681/410 5067/3683/414 +f 5069/3685/415 5065/3944/265 5072/3688/417 +f 5070/3679/412 5069/3685/415 5076/3689/418 +f 5066/3682/413 5073/3697/423 5074/3691/420 +f 5068/3677/411 5075/3694/422 5072/3692/417 +f 5071/3686/416 5070/3679/412 5077/3690/419 +f 5068/3677/411 5067/3683/414 5074/3691/420 +f 5076/3689/418 5084/3710/270 5085/3698/240 +f 5073/3700/423 5081/3704/279 5082/3701/242 +f 5058/3703/269 5079/3707/239 5081/3704/279 +f 5075/3694/422 5083/3709/290 5080/3705/238 +f 5078/3706/421 5086/3708/291 5079/3707/239 +f 5077/3699/419 5085/3698/240 5086/3708/291 +f 5074/3702/420 5082/3701/242 5083/3709/290 +f 5072/3688/417 5080/3945/238 5084/3710/270 +f 5404/3711/239 5403/3724/291 5395/3712/291 +f 5402/3714/240 5401/3725/270 5393/3715/270 +f 5400/3717/238 5399/3727/290 5391/3718/290 +f 5406/3720/242 5405/3723/279 5397/3721/279 +f 5405/3723/279 5404/3711/239 5396/3713/239 +f 5403/3724/291 5402/3714/240 5394/3716/240 +f 5401/3725/270 5400/3946/238 5392/3726/238 +f 5399/3727/290 5406/3720/242 5398/3722/242 +f 5420/3728/239 5419/3741/291 5411/3729/291 +f 5418/3731/240 5417/3742/270 5409/3732/270 +f 5416/3734/238 5415/3744/290 5407/3735/290 +f 5422/3737/242 5421/3740/279 5413/3738/279 +f 5421/3740/279 5420/3728/239 5412/3730/239 +f 5419/3741/291 5418/3731/240 5410/3733/240 +f 5417/3742/270 5416/3947/238 5408/3743/238 +f 5415/3744/290 5422/3737/242 5414/3739/242 +f 5436/3745/239 5435/3758/291 5427/3746/291 +f 5434/3748/240 5433/3759/270 5425/3749/270 +f 5432/3751/238 5431/3761/290 5423/3752/290 +f 5438/3754/242 5437/3757/279 5429/3755/279 +f 5437/3757/279 5436/3745/239 5428/3747/239 +f 5435/3758/291 5434/3748/240 5426/3750/240 +f 5433/3759/270 5432/3948/238 5424/3760/238 +f 5431/3761/290 5438/3754/242 5430/3756/242 +f 5452/3762/239 5451/3775/291 5443/3763/291 +f 5450/3765/240 5449/3776/270 5441/3766/270 +f 5448/3768/238 5447/3778/290 5439/3769/290 +f 5454/3771/242 5453/3774/279 5445/3772/279 +f 5453/3774/279 5452/3762/239 5444/3764/239 +f 5451/3775/291 5450/3765/240 5442/3767/240 +f 5449/3776/270 5448/3949/238 5440/3777/238 +f 5447/3778/290 5454/3771/242 5446/3773/242 +f 5468/3779/239 5467/3792/291 5459/3780/291 +f 5466/3782/240 5465/3793/270 5457/3783/270 +f 5464/3785/238 5463/3795/290 5455/3786/290 +f 5470/3788/242 5469/3791/279 5461/3789/279 +f 5469/3791/279 5468/3779/239 5460/3781/239 +f 5467/3792/291 5466/3782/240 5458/3784/240 +f 5465/3793/270 5464/3950/238 5456/3794/238 +f 5463/3795/290 5470/3788/242 5462/3790/242 +f 5484/3796/239 5483/3809/291 5475/3797/291 +f 5482/3799/240 5481/3810/270 5473/3800/270 +f 5480/3802/238 5479/3812/290 5471/3803/290 +f 5486/3805/242 5485/3808/279 5477/3806/279 +f 5485/3808/279 5484/3796/239 5476/3798/239 +f 5483/3809/291 5482/3799/240 5474/3801/240 +f 5481/3810/270 5480/3951/238 5472/3811/238 +f 5479/3812/290 5486/3805/242 5478/3807/242 +f 5500/3813/239 5499/3826/291 5491/3814/291 +f 5498/3816/240 5497/3827/270 5489/3817/270 +f 5496/3819/238 5495/3829/290 5487/3820/290 +f 5502/3822/242 5501/3825/279 5493/3823/279 +f 5501/3825/279 5500/3813/239 5492/3815/239 +f 5499/3826/291 5498/3816/240 5490/3818/240 +f 5497/3827/270 5496/3952/238 5488/3828/238 +f 5495/3829/290 5502/3822/242 5494/3824/242 +f 5516/3830/239 5515/3843/291 5507/3831/291 +f 5514/3833/240 5513/3844/270 5505/3834/270 +f 5512/3836/238 5511/3846/290 5503/3837/290 +f 5518/3839/242 5517/3842/279 5509/3840/279 +f 5517/3842/279 5516/3830/239 5508/3832/239 +f 5515/3843/291 5514/3833/240 5506/3835/240 +f 5513/3844/270 5512/3953/238 5504/3845/238 +f 5511/3846/290 5518/3839/242 5510/3841/242 +f 5532/3847/239 5531/3860/291 5523/3848/291 +f 5530/3850/240 5529/3861/270 5521/3851/270 +f 5528/3853/238 5527/3863/290 5519/3854/290 +f 5534/3856/242 5533/3859/279 5525/3857/279 +f 5533/3859/279 5532/3847/239 5524/3849/239 +f 5531/3860/291 5530/3850/240 5522/3852/240 +f 5529/3861/270 5528/3954/238 5520/3862/238 +f 5527/3863/290 5534/3856/242 5526/3858/242 diff --git a/src/main/resources/assets/hbm/textures/models/machines/chemical_factory.png b/src/main/resources/assets/hbm/textures/models/machines/chemical_factory.png new file mode 100644 index 0000000000000000000000000000000000000000..ccdf935dba185992af990194edf083d6d754a400 GIT binary patch literal 3884 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 Date: Mon, 16 Jun 2025 16:17:31 +0200 Subject: [PATCH 178/491] d'oh --- changelog | 7 +- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../com/hbm/blocks/generic/BlockReeds.java | 3 +- .../machine/MachineChemicalFactory.java | 45 +++ .../inventory/container/ContainerBase.java | 15 +- .../container/ContainerCrateBase.java | 8 +- .../ContainerMachineChemicalFactory.java | 77 +++++ .../hbm/inventory/fluid/tank/FluidTank.java | 6 + .../gui/GUIMachineChemicalFactory.java | 132 ++++++++ src/main/java/com/hbm/main/ClientProxy.java | 2 + .../java/com/hbm/main/ResourceManager.java | 2 + .../hbm/module/ModuleMachineChemplant.java | 4 +- .../tileentity/RenderChemicalFactory.java | 71 +++++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../TileEntityMachineChemicalFactory.java | 293 ++++++++++++++++++ .../TileEntityMachineChemicalPlant.java | 6 +- .../machine/TileEntityMachineTurbineGas.java | 7 +- .../gui/processing/gui_chemical_factory.png | Bin 3840 -> 3531 bytes .../hbm/textures/items/billet_yharonite.png | Bin 352 -> 312 bytes .../textures/models/machines/radar_base.png | Bin 1006 -> 947 bytes .../textures/models/machines/radar_dish.png | Bin 1502 -> 1407 bytes 21 files changed, 669 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderChemicalFactory.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java diff --git a/changelog b/changelog index c802deca0..b84be97b5 100644 --- a/changelog +++ b/changelog @@ -3,6 +3,9 @@ * Compressed biomass now has a nice cube shape * The new chemical plant's indicator lights are now functional * The new chemical plant can now use upgrades +* Reeds now drop sticks when broken +* Switching the recipe in the new chemplant now annihilates residual fluid that is not overwritten by the new recipe + * I don't know why people wanted this, but here you go ## Fixed * Chemical plant ports. For real this time. @@ -10,4 +13,6 @@ * Fixed new chemical plant not saving power values to disk * Fixed laser rifle scope texture being missing * Potentially fixed shift clicking issue with the new chemical plant -* Fixed blowtorch having a minimum gas requirement of 1,000mB despite only using 250mB \ No newline at end of file +* Fixed blowtorch having a minimum gas requirement of 1,000mB despite only using 250mB +* The gas turbine now uses audio with a 20 tick timeout, fixing a rare issue where the loop gets stuck and never ends +* Potentially fixed a dupe caused by using InventoryBogoSorter in combination with crates \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 143c33fa0..106dbe846 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1008,6 +1008,7 @@ public class ModBlocks { @Deprecated public static Block machine_chemplant; public static Block machine_chemical_plant; public static Block machine_chemfac; + public static Block machine_chemical_factory; public static Block machine_mixer; public static Block machine_fluidtank; @@ -2227,6 +2228,7 @@ public class ModBlocks { machine_chemplant = new MachineChemplant(Material.iron).setBlockName("machine_chemplant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemical_plant = new MachineChemicalPlant(Material.iron).setBlockName("machine_chemical_plant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemfac = new MachineChemfac(Material.iron).setBlockName("machine_chemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_chemical_factory = new MachineChemicalFactory(Material.iron).setBlockName("machine_chemical_factory").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_mixer = new MachineMixer(Material.iron).setBlockName("machine_mixer").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_fluidtank = new MachineFluidTank(Material.iron).setBlockName("machine_fluidtank").setHardness(5.0F).setResistance(20.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_fluidtank"); machine_bat9000 = new MachineBigAssTank9000(Material.iron).setBlockName("machine_bat9000").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3267,6 +3269,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_chemplant, machine_chemplant.getUnlocalizedName()); register(machine_chemical_plant); register(machine_chemfac); + register(machine_chemical_factory); register(machine_arc_welder); register(machine_soldering_station); register(machine_arc_furnace); diff --git a/src/main/java/com/hbm/blocks/generic/BlockReeds.java b/src/main/java/com/hbm/blocks/generic/BlockReeds.java index 77e620c63..5f5cf69fd 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockReeds.java +++ b/src/main/java/com/hbm/blocks/generic/BlockReeds.java @@ -11,6 +11,7 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; @@ -66,7 +67,7 @@ public class BlockReeds extends Block { @Override public Item getItemDropped(int meta, Random rand, int fortune) { - return null; + return Items.stick; } @Override diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java b/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java new file mode 100644 index 000000000..56ea88967 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java @@ -0,0 +1,45 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityMachineChemicalFactory; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineChemicalFactory extends BlockDummyable { + + public MachineChemicalFactory(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachineChemicalFactory(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } + + @Override public int[] getDimensions() { return new int[] {2, 0, 2, 2, 2, 2}; } + @Override public int getOffset() { return 2; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x -= dir.offsetX; + z -= dir.offsetZ; + + for(int i = -2; i <= 2; i++) for(int j = -2; j <= 2; j++) { + if(Math.abs(i) == 2 || Math.abs(j) == 2) this.makeExtra(world, x + i, y, z + j); + } + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerBase.java b/src/main/java/com/hbm/inventory/container/ContainerBase.java index 565d8861a..14305fc1c 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerBase.java +++ b/src/main/java/com/hbm/inventory/container/ContainerBase.java @@ -95,7 +95,10 @@ public class ContainerBase extends Container { * @param from the slot index to start from */ public void addSlots(IInventory inv, int from, int x, int y, int rows, int cols) { - int slotSize = 18; + addSlots(inv, from, x, y, rows, cols, 18); + } + + public void addSlots(IInventory inv, int from, int x, int y, int rows, int cols, int slotSize) { for(int row = 0; row < rows; row++) { for(int col = 0; col < cols; col++) { this.addSlotToContainer(new SlotNonRetarded(inv, col + row * cols + from, x + col * slotSize, y + row * slotSize)); @@ -104,14 +107,20 @@ public class ContainerBase extends Container { } public void addOutputSlots(EntityPlayer player, IInventory inv, int from, int x, int y, int rows, int cols) { - int slotSize = 18; + addOutputSlots(player, inv, from, x, y, rows, cols, 18); + } + + public void addOutputSlots(EntityPlayer player, IInventory inv, int from, int x, int y, int rows, int cols, int slotSize) { for(int row = 0; row < rows; row++) for(int col = 0; col < cols; col++) { this.addSlotToContainer(new SlotCraftingOutput(player, inv, col + row * cols + from, x + col * slotSize, y + row * slotSize)); } } public void addTakeOnlySlots(IInventory inv, int from, int x, int y, int rows, int cols) { - int slotSize = 18; + addTakeOnlySlots(inv, from, x, y, rows, cols, 18); + } + + public void addTakeOnlySlots(IInventory inv, int from, int x, int y, int rows, int cols, int slotSize) { for(int row = 0; row < rows; row++) for(int col = 0; col < cols; col++) { this.addSlotToContainer(new SlotTakeOnly(inv, col + row * cols + from, x + col * slotSize, y + row * slotSize)); } diff --git a/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java b/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java index ec6309430..06b255a68 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java @@ -24,7 +24,7 @@ public class ContainerCrateBase extends ContainerBase { } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new SlotNonRetarded(invPlayer, i, playerInvX + i * 18, playerHotbarY)); + this.addSlotToContainer(new SlotPlayerCrate(invPlayer, i, playerInvX + i * 18, playerHotbarY)); } } @@ -67,5 +67,11 @@ public class ContainerCrateBase extends ContainerBase { return false; return super.canTakeStack(player); } + + @Override + public boolean isItemValid(ItemStack item) { + if(ItemStack.areItemStacksEqual(getStack(), item)) return false; + return super.isItemValid(item); + } } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java new file mode 100644 index 000000000..484dcfc21 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java @@ -0,0 +1,77 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.util.InventoryUtil; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineChemicalFactory extends ContainerBase { + + public ContainerMachineChemicalFactory(InventoryPlayer invPlayer, IInventory chemicalPlant) { + super(invPlayer, chemicalPlant); + + // Battery + this.addSlotToContainer(new SlotNonRetarded(chemicalPlant, 0, 224, 88)); + // Upgrades + this.addSlots(chemicalPlant, 1, 206, 125, 3, 1); + + for(int i = 0; i < 4; i++) { + // Template + this.addSlots(chemicalPlant, 4 + i * 7, 93, 20 + i * 22, 1, 1, 16); + // Solid Input + this.addSlots(chemicalPlant, 5 + i * 7, 10, 20 + i * 22, 1, 3, 16); + // Solid Output + this.addOutputSlots(invPlayer.player, chemicalPlant, 8 + i * 7, 139, 20 + i * 22, 1, 3, 16); + } + + this.playerInv(invPlayer, 26, 134); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack slotOriginal = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + slotOriginal = slotStack.copy(); + + if(index <= tile.getSizeInventory() - 1) { + SlotCraftingOutput.checkAchievements(player, slotStack); + if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { + if(!this.mergeItemStack(slotStack, 1, 4, false)) return null; + } else { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 5, 8, false) && + !InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 12, 15, false) && + !InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 19, 22, false) && + !InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 26, 29, false)) return null; + } + } + + if(slotStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, slotStack); + } + + return slotOriginal; + } +} diff --git a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java index 4883790dc..9d60e8a2a 100644 --- a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java +++ b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java @@ -65,6 +65,12 @@ public class FluidTank implements Cloneable { this.setFill(0); } + public void resetTank() { + this.type = Fluids.NONE; + this.fluid = 0; + this.pressure = 0; + } + /** Changes type and pressure based on a fluid stack, useful for changing tank types based on recipes */ public FluidTank conform(FluidStack stack) { this.setTankType(stack.type); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java new file mode 100644 index 000000000..07824714e --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java @@ -0,0 +1,132 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineChemicalFactory; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineChemicalFactory; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineChemicalFactory extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_chemical_factory.png"); + private TileEntityMachineChemicalFactory chemplant; + + public GUIMachineChemicalFactory(InventoryPlayer invPlayer, TileEntityMachineChemicalFactory tedf) { + super(new ContainerMachineChemicalFactory(invPlayer, tedf)); + chemplant = tedf; + + this.xSize = 248; + this.ySize = 216; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + for(int i = 0; i < 3; i++) for(int j = 0; j < 4; j++) { + chemplant.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 60 + i * 5, guiTop + 20 + j * 22, 4, 16); + chemplant.outputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 189 + i * 5, guiTop + 20 + j * 22, 4, 16); + } + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 224, guiTop + 18, 16, 68, chemplant.power, chemplant.maxPower); + + for(int i = 0; i < 4; i++) if(guiLeft + 74 <= mouseX && guiLeft + 74 + 18 > mouseX && guiTop + 19 + i * 22 < mouseY && guiTop + 19 + i * 22 + 18 >= mouseY) { + if(this.chemplant.chemplantModule[i].recipe != null && ChemicalPlantRecipes.INSTANCE.recipeNameMap.containsKey(this.chemplant.chemplantModule[i].recipe)) { + GenericRecipe recipe = (GenericRecipe) ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.chemplant.chemplantModule[i].recipe); + this.func_146283_a(recipe.print(), mouseX, mouseY); + } else { + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); + } + } + } + + @Override + protected void mouseClicked(int x, int y, int button) { + super.mouseClicked(x, y, button); + + for(int i = 0; i < 4; i++) if(this.checkClick(x, y, 74, 19 + i * 22, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule[i].recipe, i, this); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.chemplant.hasCustomInventoryName() ? this.chemplant.getInventoryName() : I18n.format(this.chemplant.getInventoryName()); + + this.fontRendererObj.drawString(name, 106 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 26, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, 248, 116); + drawTexturedModalRect(guiLeft + 18, guiTop + 116, 18, 116, 230, 100); + + int p = (int) (chemplant.power * 68 / chemplant.maxPower); + drawTexturedModalRect(guiLeft + 224, guiTop + 86 - p, 0, 184 - p, 16, p); + + for(int i = 0; i < 4; i++) if(chemplant.chemplantModule[i].progress > 0) { + int j = (int) Math.ceil(22 * chemplant.chemplantModule[i].progress); + drawTexturedModalRect(guiLeft + 113, guiTop + 29 + i * 22, 0, 216, j, 6); + } + + for(int g = 0; g < 4; g++) { + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule[g].recipe); + + /// LEFT LED + if(chemplant.didProcess) { + drawTexturedModalRect(guiLeft + 113, guiTop + 21 + g * 22, 4, 222, 4, 4); + } else if(recipe != null) { + drawTexturedModalRect(guiLeft + 113, guiTop + 21 + g * 22, 0, 222, 4, 4); + } + + /// RIGHT LED + if(chemplant.didProcess) { + drawTexturedModalRect(guiLeft + 121, guiTop + 21 + g * 22, 4, 222, 4, 4); + } else if(recipe != null && chemplant.power >= recipe.power) { + drawTexturedModalRect(guiLeft + 121, guiTop + 21 + g * 22, 0, 222, 4, 4); + } + } + + for(int g = 0; g < 4; g++) { // not a great way of doing it but at least we eliminate state leak bullshit + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule[g].recipe); + + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 75, 20 + g * 22); + + if(recipe != null && recipe.inputItem != null) { + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(chemplant.chemplantModule[g].inputSlots[i]); + if(!slot.getHasStack()) this.renderItem(recipe.inputItem[i].extractForCyclingDisplay(20), slot.xDisplayPosition, slot.yDisplayPosition, 10F); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(1F, 1F, 1F, 0.5F); + GL11.glEnable(GL11.GL_BLEND); + this.zLevel = 300F; + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(chemplant.chemplantModule[g].inputSlots[i]); + if(!slot.getHasStack()) drawTexturedModalRect(guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, slot.xDisplayPosition, slot.yDisplayPosition, 16, 16); + } + this.zLevel = 0F; + GL11.glColor4f(1F, 1F, 1F, 1F); + GL11.glDisable(GL11.GL_BLEND); + } + } + + for(int i = 0; i < 3; i++) for(int j = 0; j < 4; j++) { + chemplant.inputTanks[i + j * 3].renderTank(guiLeft + 60 + i * 5, guiTop + 36 + j * 22, this.zLevel, 4, 16); + chemplant.outputTanks[i + j * 3].renderTank(guiLeft + 189 + i * 5, guiTop + 36 + j * 22, this.zLevel, 4, 16); + } + } +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 5c157900b..128a8f8b4 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -91,6 +91,7 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.i18n.I18nClient; import com.hbm.util.i18n.ITranslate; import com.hbm.wiaj.cannery.Jars; + import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.FMLCommonHandler; @@ -270,6 +271,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemplant.class, new RenderChemplant()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemicalPlant.class, new RenderChemicalPlant()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemfac.class, new RenderChemfac()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemicalFactory.class, new RenderChemicalFactory()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineFluidTank.class, new RenderFluidTank()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineBAT9000.class, new RenderBAT9000()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineOrbus.class, new RenderOrbus()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 2547277ca..8cad667ec 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -150,6 +150,7 @@ public class ResourceManager { public static final IModelCustom chemplant_fluidcap = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_fluidcap.hmf")); public static final IModelCustom chemical_plant = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_plant.obj")); public static final IModelCustom chemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemfac.obj")); + public static final IModelCustom chemical_factory = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_factory.obj")); //Mixer public static final IModelCustom mixer = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/mixer.obj")); @@ -583,6 +584,7 @@ public class ResourceManager { public static final ResourceLocation chemical_plant_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant.png"); public static final ResourceLocation chemical_plant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant_fluid.png"); public static final ResourceLocation chemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemfac.png"); + public static final ResourceLocation chemical_factory_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_factory.png"); //Mixer public static final ResourceLocation mixer_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/mixer.png"); diff --git a/src/main/java/com/hbm/module/ModuleMachineChemplant.java b/src/main/java/com/hbm/module/ModuleMachineChemplant.java index 06fe32d84..c68e9cae6 100644 --- a/src/main/java/com/hbm/module/ModuleMachineChemplant.java +++ b/src/main/java/com/hbm/module/ModuleMachineChemplant.java @@ -43,8 +43,8 @@ public class ModuleMachineChemplant { /** Chances tank type and pressure based on recipe */ public void setupTanks(GenericRecipe recipe) { if(recipe == null) return; - if(recipe.inputFluid != null) for(int i = 0; i < Math.min(inputTanks.length, recipe.inputFluid.length); i++) inputTanks[i].conform(recipe.inputFluid[i]); - if(recipe.outputFluid != null) for(int i = 0; i < Math.min(outputTanks.length, recipe.outputFluid.length); i++) outputTanks[i].conform(recipe.outputFluid[i]); + for(int i = 0; i < 3; i++) if(recipe.inputFluid != null && recipe.inputFluid.length > i) inputTanks[i].conform(recipe.inputFluid[i]); else inputTanks[i].resetTank(); + for(int i = 0; i < 3; i++) if(recipe.outputFluid != null && recipe.outputFluid.length > i) outputTanks[i].conform(recipe.outputFluid[i]); else outputTanks[i].resetTank(); } /** Expects the tanks to be set up correctly beforehand */ diff --git a/src/main/java/com/hbm/render/tileentity/RenderChemicalFactory.java b/src/main/java/com/hbm/render/tileentity/RenderChemicalFactory.java new file mode 100644 index 000000000..7eae5b7ad --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderChemicalFactory.java @@ -0,0 +1,71 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachineChemicalFactory; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderChemicalFactory extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glRotated(90, 0, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + } + + TileEntityMachineChemicalFactory chemplant = (TileEntityMachineChemicalFactory) tileEntity; + float anim = chemplant.prevAnim + (chemplant.anim - chemplant.prevAnim) * interp; + + bindTexture(ResourceManager.chemical_factory_tex); + ResourceManager.chemical_factory.renderPart("Base"); + if(chemplant.frame) ResourceManager.chemical_factory.renderPart("Frame"); + ResourceManager.chemical_factory.renderPart("Fan1"); + ResourceManager.chemical_factory.renderPart("Fan2"); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_chemical_factory); + } + + @Override + public IItemRenderer getRenderer() { + + return new ItemRenderBase() { + + public void renderInventory() { + GL11.glTranslated(0, -1.5, 0); + GL11.glScaled(3, 3, 3); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.chemical_factory_tex); + ResourceManager.chemical_factory.renderPart("Base"); + ResourceManager.chemical_factory.renderPart("Frame"); + ResourceManager.chemical_factory.renderPart("Fan1"); + ResourceManager.chemical_factory.renderPart("Fan2"); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index f8252b5af..36e0f3d04 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -342,6 +342,7 @@ public class TileMappings { put(TileEntityMachineChemplant.class, "tileentity_chemical_plant"); put(TileEntityMachineChemicalPlant.class, "tileentity_chemicalplant"); put(TileEntityMachineChemfac.class, "tileentity_chemfac"); + put(TileEntityMachineChemicalFactory.class, "tileentity_chemicalfactory"); put(TileEntityMachineOilWell.class, "tileentity_derrick"); put(TileEntityMachinePumpjack.class, "tileentity_machine_pumpjack"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java new file mode 100644 index 000000000..1487d194a --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -0,0 +1,293 @@ +package com.hbm.tileentity.machine; + +import java.util.HashMap; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.UpgradeManagerNT; +import com.hbm.inventory.container.ContainerMachineChemicalFactory; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachineChemicalFactory; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.lib.Library; +import com.hbm.module.ModuleMachineChemplant; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; + +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityMachineChemicalFactory extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider { + + public FluidTank[] allTanks; + public FluidTank[] inputTanks; + public FluidTank[] outputTanks; + + public long power; + public long maxPower = 10_000_000; + public boolean didProcess = false; + + public boolean frame = false; + public int anim; + public int prevAnim; + + public ModuleMachineChemplant[] chemplantModule; + public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); + + public TileEntityMachineChemicalFactory() { + super(32); + + this.inputTanks = new FluidTank[12]; + this.outputTanks = new FluidTank[12]; + for(int i = 0; i < 12; i++) { + this.inputTanks[i] = new FluidTank(Fluids.NONE, 24_000); + this.outputTanks[i] = new FluidTank(Fluids.NONE, 24_000); + } + + this.allTanks = new FluidTank[this.inputTanks.length + this.outputTanks.length]; + for(int i = 0; i < inputTanks.length; i++) this.allTanks[i] = this.inputTanks[i]; + for(int i = 0; i < outputTanks.length; i++) this.allTanks[i + this.inputTanks.length] = this.outputTanks[i]; + + this.chemplantModule = new ModuleMachineChemplant[4]; + for(int i = 0; i < 4; i++) this.chemplantModule[i] = new ModuleMachineChemplant(i, this, slots) + .itemInput(5 + i * 7, 6 + i * 7, 7 + i * 7) + .itemOutput(8 + i * 7, 9 + i * 7, 10 + i * 7) + .fluidInput(inputTanks[0 + i * 3], inputTanks[1 + i * 3], inputTanks[2 + i * 3]) + .fluidOutput(outputTanks[0 + i * 3], outputTanks[1 + i * 3], outputTanks[2 + i * 3]); + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + if(i >= 8 && i <= 10) return true; + if(i >= 12 && i <= 14) return true; + if(i >= 19 && i <= 21) return true; + if(i >= 26 && i <= 28) return true; + return false; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + if(slot == 0) return true; // battery + if(slot >= 1 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades + for(int i = 0; i < 4; i++) if(this.chemplantModule[i].isItemValid(slot, stack)) return true; // recipe input crap + return false; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] { + 5, 6, 7, 8, 9, 10, + 12, 13, 14, 15, 16, 17, + 19, 20, 21, 22, 23, 24, + 26, 27, 28, 29, 30, 31 + }; + } + + @Override + public String getName() { + return "container.machineChemicalFactory"; + } + + @Override + public void updateEntity() { + + if(maxPower <= 0) this.maxPower = 10_000_000; + + if(!worldObj.isRemote) { + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + upgradeManager.checkSlots(slots, 1, 3); + + inputTanks[0].loadTank(10, 13, slots); + inputTanks[1].loadTank(11, 14, slots); + inputTanks[2].loadTank(12, 15, slots); + + outputTanks[0].unloadTank(16, 19, slots); + outputTanks[1].unloadTank(17, 20, slots); + outputTanks[2].unloadTank(18, 21, slots); + + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos); + for(FluidTank tank : inputTanks) if(tank.getTankType() != Fluids.NONE) this.trySubscribe(tank.getTankType(), worldObj, pos); + for(FluidTank tank : outputTanks) if(tank.getFill() > 0) this.tryProvide(tank, worldObj, pos); + } + + double speed = 1D; + double pow = 1D; + + speed += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) / 3D; + speed += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3); + + pow -= Math.min(upgradeManager.getLevel(UpgradeType.POWER), 3) * 0.25D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; + + this.didProcess = false; + boolean markDirty = false; + + for(int i = 0; i < 4; i++) { + this.chemplantModule[i].update(speed * 2D, pow); + this.didProcess |= this.chemplantModule[i].didProcess; + markDirty |= this.chemplantModule[i].markDirty; + } + + if(markDirty) this.markDirty(); + + this.networkPackNT(100); + + } else { + + this.prevAnim = this.anim; + if(this.didProcess) this.anim++; + + if(worldObj.getTotalWorldTime() % 20 == 0) { + frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); + } + } + } + + public DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + return new DirPos[] { + new DirPos(xCoord + 3, yCoord, zCoord - 2, Library.POS_X), + new DirPos(xCoord + 3, yCoord, zCoord + 0, Library.POS_X), + new DirPos(xCoord + 3, yCoord, zCoord + 2, Library.POS_X), + new DirPos(xCoord - 3, yCoord, zCoord - 2, Library.NEG_X), + new DirPos(xCoord - 3, yCoord, zCoord + 0, Library.NEG_X), + new DirPos(xCoord - 3, yCoord, zCoord + 2, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord + 0, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord + 2, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord - 2, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord + 0, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord + 2, yCoord, zCoord - 3, Library.NEG_Z), + + new DirPos(xCoord + dir.offsetX + rot.offsetX * 3, yCoord, zCoord + dir.offsetZ + rot.offsetZ * 3, rot), + new DirPos(xCoord - dir.offsetX + rot.offsetX * 3, yCoord, zCoord - dir.offsetZ + rot.offsetZ * 3, rot), + new DirPos(xCoord + dir.offsetX - rot.offsetX * 3, yCoord, zCoord + dir.offsetZ - rot.offsetZ * 3, rot.getOpposite()), + new DirPos(xCoord - dir.offsetX - rot.offsetX * 3, yCoord, zCoord - dir.offsetZ - rot.offsetZ * 3, rot.getOpposite()), + }; + } + + + public DirPos[] getCoolPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + return new DirPos[] { + new DirPos(xCoord + rot.offsetX + dir.offsetX * 3, yCoord, zCoord + rot.offsetZ + dir.offsetZ * 3, dir), + new DirPos(xCoord - rot.offsetX + dir.offsetX * 3, yCoord, zCoord - rot.offsetZ + dir.offsetZ * 3, dir), + new DirPos(xCoord + rot.offsetX - dir.offsetX * 3, yCoord, zCoord + rot.offsetZ - dir.offsetZ * 3, dir.getOpposite()), + new DirPos(xCoord - rot.offsetX - dir.offsetX * 3, yCoord, zCoord - rot.offsetZ - dir.offsetZ * 3, dir.getOpposite()), + }; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + for(FluidTank tank : inputTanks) tank.serialize(buf); + for(FluidTank tank : outputTanks) tank.serialize(buf); + buf.writeLong(power); + buf.writeLong(maxPower); + buf.writeBoolean(didProcess); + for(int i = 0; i < 4; i++) this.chemplantModule[i].serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + for(FluidTank tank : inputTanks) tank.deserialize(buf); + for(FluidTank tank : outputTanks) tank.deserialize(buf); + this.power = buf.readLong(); + this.maxPower = buf.readLong(); + this.didProcess = buf.readBoolean(); + for(int i = 0; i < 4; i++) this.chemplantModule[i].deserialize(buf); + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return maxPower; } + + @Override public FluidTank[] getReceivingTanks() { return inputTanks; } + @Override public FluidTank[] getSendingTanks() { return outputTanks; } + @Override public FluidTank[] getAllTanks() { return allTanks; } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineChemicalFactory(player.inventory, this); } + @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineChemicalFactory(player.inventory, this); } + + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("index") && data.hasKey("selection")) { + int index = data.getInteger("index"); + String selection = data.getString("selection"); + if(index >= 0 && index < 4) { + this.chemplantModule[index].recipe = selection; + this.markChanged(); + } + } + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 2, yCoord, zCoord - 2, xCoord + 3, yCoord + 3, zCoord + 3); + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_chemical_plant)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_SPEED, "+" + (level * 100 / 3) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 50) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_CONSUMPTION, "-" + (level * 25) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public HashMap getValidUpgrades() { + HashMap upgrades = new HashMap<>(); + upgrades.put(UpgradeType.SPEED, 3); + upgrades.put(UpgradeType.POWER, 3); + upgrades.put(UpgradeType.OVERDRIVE, 3); + return upgrades; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 0dc1dd1ad..8181d3497 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -228,8 +228,10 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem if(data.hasKey("index") && data.hasKey("selection")) { int index = data.getInteger("index"); String selection = data.getString("selection"); - if(index == 0) this.chemplantModule.recipe = selection; - this.markChanged(); + if(index == 0) { + this.chemplantModule.recipe = selection; + this.markChanged(); + } } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index 2e320fb2e..26a44455f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -74,7 +74,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement fuelMaxCons.put(Fluids.GAS, 50D); // natgas doesn't burn well so it burns faster to compensate fuelMaxCons.put(Fluids.SYNGAS, 10D); // syngas just fucks fuelMaxCons.put(Fluids.OXYHYDROGEN, 100D); // oxyhydrogen is terrible so it needs to burn a ton for the bare minimum - fuelMaxCons.put(Fluids.REFORMGAS, 5D); // fuck it we ball + fuelMaxCons.put(Fluids.REFORMGAS, 5D); // fuck it we ball // default to 5 if not in list } @@ -166,17 +166,18 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement if(audio == null) { //if there is no sound playing, start it - audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, getVolume(1.0F), 20F, 2.0F); + audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, getVolume(1.0F), 20F, 2.0F, 20); audio.startSound(); } else if(!audio.isPlaying()) { audio.stopSound(); - audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, getVolume(1.0F), 20F, 2.0F); + audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, getVolume(1.0F), 20F, 2.0F, 20); audio.startSound(); } audio.updatePitch((float) (0.55 + 0.1 * rpm / 10)); //dynamic pitch update based on rpm audio.updateVolume(getVolume(2F)); //yeah i need this + audio.keepAlive(); } else { diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png index d8ce9926c1d1a6d67a6aed1a7959cce567b90002..7e6aa8347e4fff3bda07f1e73bea1f64835e6b4c 100644 GIT binary patch literal 3531 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 literal 3840 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 diff --git a/src/main/resources/assets/hbm/textures/items/billet_yharonite.png b/src/main/resources/assets/hbm/textures/items/billet_yharonite.png index 27f0cfb0f0e305f8ae778b93a0d7bf3252ee74d9..8778d6f03e04edfd2768a805aba7d9190f671660 100644 GIT binary patch delta 270 zcmV+p0rCFe0=NQ@Gk*Z@Nkl_x1k+GAnuF#MWJY3LV*LKa>)Qx`16vCYrXc~aSjObXTr<`s zzI2DzasP?XyJ(SQv5WyojydboPSpxT0x*AmWOIH1pePEGs?~&R1+GZqg8wK#5Eoa7 UnZ96j00000Ne4wvM6N<$f}RO}H2?qr delta 310 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 WiWeil_3DcN0000 Date: Mon, 16 Jun 2025 17:48:05 +0200 Subject: [PATCH 179/491] Added recipe and changed function order to make more sense. --- .../FluidDuctPaintableBlockExhaust.java | 69 ++++++++++--------- .../java/com/hbm/main/CraftingManager.java | 1 + 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java index 3be2934af..24f792bc4 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java @@ -3,6 +3,7 @@ package com.hbm.blocks.network; import api.hbm.block.IToolable; import com.hbm.blocks.IBlockMultiPass; import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable; import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; @@ -33,13 +34,13 @@ import java.util.ArrayList; import java.util.List; public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements IToolable, IBlockMultiPass, ILookOverlay { - + @SideOnly(Side.CLIENT) protected IIcon overlay; - + public FluidDuctPaintableBlockExhaust() { - super(Material.iron); + super(Material.iron); } - + @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityPipeExhaustPaintable(); @@ -51,15 +52,6 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE_POISON); } - @Override - public void printHook(Pre event, World world, int x, int y, int z) { - List text = new ArrayList(); - text.add(Fluids.SMOKE.getLocalizedName()); - text.add(Fluids.SMOKE_LEADED.getLocalizedName()); - text.add(Fluids.SMOKE_POISON.getLocalizedName()); - ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); - } - @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister reg) { @@ -87,6 +79,27 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo return this.blockIcon; } + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool != ToolType.SCREWDRIVER) return false; + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPipeExhaustPaintable) { + TileEntityPipeExhaustPaintable pipe = (TileEntityPipeExhaustPaintable) tile; + + if(pipe.block != null) { + pipe.block = null; + world.markBlockForUpdate(x, y, z); + pipe.markDirty(); + return true; + } + } + + return false; + } + @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { @@ -117,27 +130,6 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); } - @Override - public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { - - if(tool != ToolType.SCREWDRIVER) return false; - - TileEntity tile = world.getTileEntity(x, y, z); - - if(tile instanceof TileEntityPipeExhaustPaintable) { - TileEntityPipeExhaustPaintable pipe = (TileEntityPipeExhaustPaintable) tile; - - if(pipe.block != null) { - pipe.block = null; - world.markBlockForUpdate(x, y, z); - pipe.markDirty(); - return true; - } - } - - return false; - } - @Override public int getPasses() { return 2; @@ -148,6 +140,15 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo return IBlockMultiPass.getRenderType(); } + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + List text = new ArrayList(); + text.add(Fluids.SMOKE.getLocalizedName()); + text.add(Fluids.SMOKE_LEADED.getLocalizedName()); + text.add(Fluids.SMOKE_POISON.getLocalizedName()); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + public static class TileEntityPipeExhaustPaintable extends TileEntityPipeExhaust implements ICopiable { private Block block; diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 76646f307..86a280f16 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -604,6 +604,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.fluid_duct_neo, 8, 1), new Object[] { "IAI", " ", "IAI", 'I', IRON.plate(), 'A', AL.plate() }); addRecipeAuto(new ItemStack(ModBlocks.fluid_duct_neo, 8, 2), new Object[] { "ASA", " ", "ASA", 'S', STEEL.plate(), 'A', AL.plate() }); addRecipeAuto(new ItemStack(ModBlocks.fluid_duct_paintable, 8), new Object[] { "SAS", "A A", "SAS", 'S', STEEL.ingot(), 'A', AL.plate() }); + addRecipeAuto(new ItemStack(ModBlocks.fluid_duct_paintable_block_exhaust, 8), new Object[] { "SAS", "A A", "SAS", 'S', IRON.ingot(), 'A', ModItems.plate_polymer}); addShapelessAuto(new ItemStack(ModBlocks.fluid_duct_gauge), new Object[] { ModBlocks.fluid_duct_paintable, STEEL.ingot(), DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); addRecipeAuto(new ItemStack(ModBlocks.fluid_valve, 1), new Object[] { "S", "W", 'S', Blocks.lever, 'W', ModBlocks.fluid_duct_paintable }); addRecipeAuto(new ItemStack(ModBlocks.fluid_switch, 1), new Object[] { "S", "W", 'S', REDSTONE.dust(), 'W', ModBlocks.fluid_duct_paintable }); From 474148110dde8cad8489c816b887bb70db5076a4 Mon Sep 17 00:00:00 2001 From: DangerousMilk Date: Tue, 17 Jun 2025 14:23:45 +0200 Subject: [PATCH 180/491] Added the TileEntity to the TileMappings. Removed unnecessary canConnectTo function and TileEntityPipePaintable import --- .../network/FluidDuctPaintableBlockExhaust.java | 12 +++--------- src/main/java/com/hbm/tileentity/TileMappings.java | 2 ++ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java index 24f792bc4..1510ec422 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java @@ -1,9 +1,9 @@ package com.hbm.blocks.network; import api.hbm.block.IToolable; + import com.hbm.blocks.IBlockMultiPass; import com.hbm.blocks.ILookOverlay; -import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable; import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; @@ -45,12 +45,6 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityPipeExhaustPaintable(); } - - public boolean canConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir, TileEntity tile) { - return Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE) || - Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE_LEADED) || - Library.canConnectFluid(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir, Fluids.SMOKE_POISON); - } @Override @SideOnly(Side.CLIENT) @@ -155,11 +149,11 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo private int meta; private Block lastBlock; private int lastMeta; - + @Override public void updateEntity() { super.updateEntity(); - + if(worldObj.isRemote && (lastBlock != block || lastMeta != meta)) { worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); lastBlock = block; diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index f8252b5af..0b41812fe 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -35,6 +35,7 @@ import com.hbm.blocks.network.CableDiode.TileEntityDiode; import com.hbm.blocks.network.CranePartitioner.TileEntityCranePartitioner; import com.hbm.blocks.network.FluidDuctGauge.TileEntityPipeGauge; import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable; +import com.hbm.blocks.network.FluidDuctPaintableBlockExhaust.TileEntityPipeExhaustPaintable; import com.hbm.blocks.network.FluidPump.TileEntityFluidPump; import com.hbm.blocks.rail.RailStandardSwitch.TileEntityRailSwitch; import com.hbm.tileentity.bomb.*; @@ -410,6 +411,7 @@ public class TileMappings { put(TileEntityPipePaintable.class, "tileentity_pipe_paintable"); put(TileEntityPipeGauge.class, "tileentity_pipe_gauge"); put(TileEntityPipeExhaust.class, "tileentity_pipe_exhaust"); + put(TileEntityPipeExhaustPaintable.class, "tileentity_pipe_exhaust_paintable"); put(TileEntityFluidValve.class, "tileentity_pipe_valve"); put(TileEntityFluidPump.class, "tileentity_pipe_pump"); From 5aee91636c1e12261d58b1192b21d5d98fb3885b Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 17 Jun 2025 16:30:00 +0200 Subject: [PATCH 181/491] i stuck my ballsack in the coolant line & it got obliterated by delta P --- changelog | 12 ++ .../java/api/hbm/fluidmk2/IFluidUserMK2.java | 2 +- .../machine/MachineChemicalFactory.java | 8 +- .../gui/GUIMachineChemicalFactory.java | 16 +- .../hbm/inventory/recipes/MixerRecipes.java | 2 +- .../weapon/sedna/factory/XFactoryEnergy.java | 8 +- .../hbm/module/ModuleMachineChemplant.java | 12 +- .../hbm/tileentity/TileEntityProxyCombo.java | 161 +++++++++--------- .../hbm/tileentity/TileEntityProxyDyn.java | 24 +++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../TileEntityMachineChemicalFactory.java | 105 ++++++++++-- .../TileEntityMachineChemicalPlant.java | 2 +- 12 files changed, 242 insertions(+), 111 deletions(-) create mode 100644 src/main/java/com/hbm/tileentity/TileEntityProxyDyn.java diff --git a/changelog b/changelog index b84be97b5..fd3dc6df8 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,13 @@ +## Added +* New chemical factory + * New form factor, uses a smaller 5x5 footprint + * Only does four recipes instead of eight + * Double base speed, but also double power draw + * Three upgrade slots, upgrades follow the same rules as on the new chemplant + * Upgrades stack with the double base speed + * Stackable! + * Water consumption rate is fixed at 100mB/t for each active recipe + ## Changed * The DNT suit now has a damage threshold of 1,000 * Compressed biomass now has a nice cube shape @@ -6,6 +16,8 @@ * Reeds now drop sticks when broken * Switching the recipe in the new chemplant now annihilates residual fluid that is not overwritten by the new recipe * I don't know why people wanted this, but here you go +* The alternate recipe for oxyhydrogen now uses compressed air instead of nothing +* Improved threaded Mk5, should be a smidge faster now ## Fixed * Chemical plant ports. For real this time. diff --git a/src/main/java/api/hbm/fluidmk2/IFluidUserMK2.java b/src/main/java/api/hbm/fluidmk2/IFluidUserMK2.java index 1e60f7585..755c415c5 100644 --- a/src/main/java/api/hbm/fluidmk2/IFluidUserMK2.java +++ b/src/main/java/api/hbm/fluidmk2/IFluidUserMK2.java @@ -9,7 +9,7 @@ public interface IFluidUserMK2 extends IFluidConnectorMK2, ILoadedTile { public static final int HIGHEST_VALID_PRESSURE = 5; public static final int[] DEFAULT_PRESSURE_RANGE = new int[] {0, 0}; - public static final boolean particleDebug = false; + public static final boolean particleDebug = true; public FluidTank[] getAllTanks(); } diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java b/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java index 56ea88967..787f030b9 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java @@ -1,7 +1,7 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; -import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.TileEntityProxyDyn; import com.hbm.tileentity.machine.TileEntityMachineChemicalFactory; import net.minecraft.block.material.Material; @@ -19,7 +19,7 @@ public class MachineChemicalFactory extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { if(meta >= 12) return new TileEntityMachineChemicalFactory(); - if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid(); + if(meta >= 6) return new TileEntityProxyDyn().inventory().power().fluid(); return null; } @@ -35,8 +35,8 @@ public class MachineChemicalFactory extends BlockDummyable { public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { super.fillSpace(world, x, y, z, dir, o); - x -= dir.offsetX; - z -= dir.offsetZ; + x -= dir.offsetX * 2; + z -= dir.offsetZ * 2; for(int i = -2; i <= 2; i++) for(int j = -2; j <= 2; j++) { if(Math.abs(i) == 2 || Math.abs(j) == 2) this.makeExtra(world, x + i, y, z + j); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java index 07824714e..4b756e87b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java @@ -34,10 +34,13 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { super.drawScreen(mouseX, mouseY, f); for(int i = 0; i < 3; i++) for(int j = 0; j < 4; j++) { - chemplant.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 60 + i * 5, guiTop + 20 + j * 22, 4, 16); - chemplant.outputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 189 + i * 5, guiTop + 20 + j * 22, 4, 16); + chemplant.inputTanks[i + j * 3].renderTankInfo(this, mouseX, mouseY, guiLeft + 60 + i * 5, guiTop + 20 + j * 22, 4, 16); + chemplant.outputTanks[i + j * 3].renderTankInfo(this, mouseX, mouseY, guiLeft + 189 + i * 5, guiTop + 20 + j * 22, 4, 16); } + chemplant.water.renderTankInfo(this, mouseX, mouseY, guiLeft + 224, guiTop + 125, 7, 52); + chemplant.lps.renderTankInfo(this, mouseX, mouseY, guiLeft + 233, guiTop + 125, 7, 52); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 224, guiTop + 18, 16, 68, chemplant.power, chemplant.maxPower); for(int i = 0; i < 4; i++) if(guiLeft + 74 <= mouseX && guiLeft + 74 + 18 > mouseX && guiTop + 19 + i * 22 < mouseY && guiTop + 19 + i * 22 + 18 >= mouseY) { @@ -84,16 +87,16 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule[g].recipe); /// LEFT LED - if(chemplant.didProcess) { + if(chemplant.didProcess[g]) { drawTexturedModalRect(guiLeft + 113, guiTop + 21 + g * 22, 4, 222, 4, 4); } else if(recipe != null) { drawTexturedModalRect(guiLeft + 113, guiTop + 21 + g * 22, 0, 222, 4, 4); } /// RIGHT LED - if(chemplant.didProcess) { + if(chemplant.didProcess[g]) { drawTexturedModalRect(guiLeft + 121, guiTop + 21 + g * 22, 4, 222, 4, 4); - } else if(recipe != null && chemplant.power >= recipe.power) { + } else if(recipe != null && chemplant.power >= recipe.power && chemplant.canCool()) { drawTexturedModalRect(guiLeft + 121, guiTop + 21 + g * 22, 0, 222, 4, 4); } } @@ -128,5 +131,8 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { chemplant.inputTanks[i + j * 3].renderTank(guiLeft + 60 + i * 5, guiTop + 36 + j * 22, this.zLevel, 4, 16); chemplant.outputTanks[i + j * 3].renderTank(guiLeft + 189 + i * 5, guiTop + 36 + j * 22, this.zLevel, 4, 16); } + + chemplant.water.renderTank(guiLeft + 224, guiTop + 177, this.zLevel, 7, 52); + chemplant.lps.renderTank(guiLeft + 233, guiTop + 177, this.zLevel, 7, 52); } } diff --git a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java index 670f016e1..e20cf1b56 100644 --- a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java @@ -79,7 +79,7 @@ public class MixerRecipes extends SerializableRecipe { register(Fluids.SYNGAS, new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.COALOIL, 500)).setStack2(new FluidStack(Fluids.STEAM, 500))); register(Fluids.OXYHYDROGEN, - new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.HYDROGEN, 500)), + new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.HYDROGEN, 500)).setStack2(new FluidStack(Fluids.AIR, 2_000)), new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.HYDROGEN, 500)).setStack2(new FluidStack(Fluids.OXYGEN, 500))); register(Fluids.PETROIL_LEADED, new MixerRecipe(12_000, 40).setStack1(new FluidStack(Fluids.PETROIL, 10_000)).setSolid(new ComparableStack(ModItems.fuel_additive, 1, 0))); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java index 1d30e41ce..4167419d7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java @@ -166,9 +166,9 @@ public class XFactoryEnergy { energy_las_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4).setupDamageClass(DamageClass.LASER).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); energy_las_ir = new BulletConfig().setItem(EnumAmmo.CAPACITOR_IR).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4).setupDamageClass(DamageClass.FIRE).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setOnBeamImpact(LAMBDA_IR_HIT); - energy_emerald = energy_las.clone().setArmorPiercing(0.5F).setThresholdNegation(5F); - energy_emerald_overcharge = energy_las_overcharge.clone().setArmorPiercing(0.5F).setThresholdNegation(5F); - energy_emerald_ir = energy_las_ir.clone().setArmorPiercing(0.5F).setThresholdNegation(5F); + energy_emerald = energy_las.clone().setArmorPiercing(0.5F).setThresholdNegation(10F); + energy_emerald_overcharge = energy_las_overcharge.clone().setArmorPiercing(0.5F).setThresholdNegation(15F); + energy_emerald_ir = energy_las_ir.clone().setArmorPiercing(0.5F).setThresholdNegation(10F); ModItems.gun_tesla_cannon = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(1_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE) @@ -194,7 +194,7 @@ public class XFactoryEnergy { ModItems.gun_laser_pistol_pew_pew = new ItemGunBaseNT(WeaponQuality.B_SIDE, new GunConfig() .dura(500).draw(10).inspect(26).crosshair(Crosshair.CIRCLE) .rec(new Receiver(0) - .dmg(20F).rounds(5).delay(10).spread(0.25F).spreadHipfire(1F).reload(45).jam(37).sound("hbm:weapon.fire.laserPistol", 1.0F, 0.8F) + .dmg(30F).rounds(5).delay(10).spread(0.25F).spreadHipfire(1F).reload(45).jam(37).sound("hbm:weapon.fire.laserPistol", 1.0F, 0.8F) .mag(new MagazineFullReload(0, 10).addConfigs(energy_las, energy_las_overcharge, energy_las_ir)) .offset(0.75, -0.0625 * 1.5, -0.1875) .setupStandardFire().recoil(LAMBDA_RECOIL_ENERGY)) diff --git a/src/main/java/com/hbm/module/ModuleMachineChemplant.java b/src/main/java/com/hbm/module/ModuleMachineChemplant.java index c68e9cae6..4c6cbdbcd 100644 --- a/src/main/java/com/hbm/module/ModuleMachineChemplant.java +++ b/src/main/java/com/hbm/module/ModuleMachineChemplant.java @@ -135,14 +135,14 @@ public class ModuleMachineChemplant { } } - public void update(double speed, double power) { + public void update(double speed, double power, boolean extraCondition) { GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); this.setupTanks(recipe); this.didProcess = false; this.markDirty = false; - if(this.canProcess(recipe, speed, power)) { + if(extraCondition && this.canProcess(recipe, speed, power)) { this.process(recipe, speed, power); this.didProcess = true; } else { @@ -179,12 +179,12 @@ public class ModuleMachineChemplant { } public void readFromNBT(NBTTagCompound nbt) { - this.progress = nbt.getDouble("progress"); - this.recipe = nbt.getString("recipe"); + this.progress = nbt.getDouble("progress" + index); + this.recipe = nbt.getString("recipe" + index); } public void writeToNBT(NBTTagCompound nbt) { - nbt.setDouble("progress", progress); - nbt.setString("recipe", recipe); + nbt.setDouble("progress" + index, progress); + nbt.setString("recipe" + index, recipe); } } diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index 405551c32..c38e5f51e 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -75,15 +75,18 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy return this; } - //fewer messy recursive operations - public TileEntity getTile() { - + /** Returns the actual tile entity that represents the core. Only for internal use. */ + protected TileEntity getTile() { if(tile == null || tile.isInvalid()) { tile = this.getTE(); } - return tile; } + + /** Returns the core tile entity, or a delegate object. */ + protected Object getCoreObject() { + return getTile(); + } @Override public void setPower(long i) { @@ -91,8 +94,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!power) return; - if(getTile() instanceof IEnergyReceiverMK2) { - ((IEnergyReceiverMK2)getTile()).setPower(i); + if(getCoreObject() instanceof IEnergyReceiverMK2) { + ((IEnergyReceiverMK2)getCoreObject()).setPower(i); } } @@ -102,8 +105,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!power) return 0; - if(getTile() instanceof IEnergyReceiverMK2) { - return ((IEnergyReceiverMK2)getTile()).getPower(); + if(getCoreObject() instanceof IEnergyReceiverMK2) { + return ((IEnergyReceiverMK2)getCoreObject()).getPower(); } return 0; @@ -115,8 +118,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!power) return 0; - if(getTile() instanceof IEnergyReceiverMK2) { - return ((IEnergyReceiverMK2)getTile()).getMaxPower(); + if(getCoreObject() instanceof IEnergyReceiverMK2) { + return ((IEnergyReceiverMK2)getCoreObject()).getMaxPower(); } return 0; @@ -128,8 +131,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!this.power) return power; - if(getTile() instanceof IEnergyReceiverMK2) { - return ((IEnergyReceiverMK2)getTile()).transferPower(power); + if(getCoreObject() instanceof IEnergyReceiverMK2) { + return ((IEnergyReceiverMK2)getCoreObject()).transferPower(power); } return power; @@ -141,8 +144,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!power) return false; - if(getTile() instanceof IEnergyReceiverMK2) { - return ((IEnergyReceiverMK2)getTile()).canConnect(dir); + if(getCoreObject() instanceof IEnergyReceiverMK2) { + return ((IEnergyReceiverMK2)getCoreObject()).canConnect(dir); } return true; @@ -154,8 +157,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy public FluidTank[] getAllTanks() { if(!fluid) return EMPTY_TANKS; - if(getTile() instanceof IFluidReceiverMK2) { - return ((IFluidReceiverMK2)getTile()).getAllTanks(); + if(getCoreObject() instanceof IFluidReceiverMK2) { + return ((IFluidReceiverMK2)getCoreObject()).getAllTanks(); } return EMPTY_TANKS; @@ -165,8 +168,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy public long transferFluid(FluidType type, int pressure, long amount) { if(!fluid) return amount; - if(getTile() instanceof IFluidReceiverMK2) { - return ((IFluidReceiverMK2)getTile()).transferFluid(type, pressure, amount); + if(getCoreObject() instanceof IFluidReceiverMK2) { + return ((IFluidReceiverMK2)getCoreObject()).transferFluid(type, pressure, amount); } return amount; @@ -176,8 +179,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy public long getDemand(FluidType type, int pressure) { if(!fluid) return 0; - if(getTile() instanceof IFluidReceiverMK2) { - return ((IFluidReceiverMK2)getTile()).getDemand(type, pressure); + if(getCoreObject() instanceof IFluidReceiverMK2) { + return ((IFluidReceiverMK2)getCoreObject()).getDemand(type, pressure); } return 0; @@ -189,8 +192,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!this.fluid) return false; - if(getTile() instanceof IFluidConnectorMK2) { - return ((IFluidConnectorMK2) getTile()).canConnect(type, dir); + if(getCoreObject() instanceof IFluidConnectorMK2) { + return ((IFluidConnectorMK2) getCoreObject()).canConnect(type, dir); } return true; } @@ -201,8 +204,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return 0; - if(getTile() instanceof ISidedInventory) { - return ((ISidedInventory)getTile()).getSizeInventory(); + if(getCoreObject() instanceof ISidedInventory) { + return ((ISidedInventory)getCoreObject()).getSizeInventory(); } return 0; @@ -214,8 +217,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return null; - if(getTile() instanceof ISidedInventory) { - return ((ISidedInventory)getTile()).getStackInSlot(slot); + if(getCoreObject() instanceof ISidedInventory) { + return ((ISidedInventory)getCoreObject()).getStackInSlot(slot); } return null; @@ -224,8 +227,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override public ItemStack decrStackSize(int i, int j) { - if(getTile() instanceof ISidedInventory) { - return ((ISidedInventory)getTile()).decrStackSize(i, j); + if(getCoreObject() instanceof ISidedInventory) { + return ((ISidedInventory)getCoreObject()).decrStackSize(i, j); } return null; @@ -237,8 +240,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return null; - if(getTile() instanceof ISidedInventory) { - return ((ISidedInventory)getTile()).getStackInSlotOnClosing(slot); + if(getCoreObject() instanceof ISidedInventory) { + return ((ISidedInventory)getCoreObject()).getStackInSlotOnClosing(slot); } return null; @@ -250,8 +253,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return; - if(getTile() instanceof ISidedInventory) { - ((ISidedInventory)getTile()).setInventorySlotContents(slot, stack); + if(getCoreObject() instanceof ISidedInventory) { + ((ISidedInventory)getCoreObject()).setInventorySlotContents(slot, stack); } } @@ -261,8 +264,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return null; - if(getTile() instanceof ISidedInventory) { - return ((ISidedInventory)getTile()).getInventoryName(); + if(getCoreObject() instanceof ISidedInventory) { + return ((ISidedInventory)getCoreObject()).getInventoryName(); } return null; @@ -274,8 +277,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return false; - if(getTile() instanceof ISidedInventory) { - return ((ISidedInventory)getTile()).hasCustomInventoryName(); + if(getCoreObject() instanceof ISidedInventory) { + return ((ISidedInventory)getCoreObject()).hasCustomInventoryName(); } return false; @@ -287,8 +290,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return 0; - if(getTile() instanceof ISidedInventory) { - return ((ISidedInventory)getTile()).getInventoryStackLimit(); + if(getCoreObject() instanceof ISidedInventory) { + return ((ISidedInventory)getCoreObject()).getInventoryStackLimit(); } return 0; @@ -300,8 +303,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return false; - if(getTile() instanceof ISidedInventory) { - return ((ISidedInventory)getTile()).isUseableByPlayer(player); + if(getCoreObject() instanceof ISidedInventory) { + return ((ISidedInventory)getCoreObject()).isUseableByPlayer(player); } return false; @@ -313,8 +316,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return; - if(getTile() instanceof ISidedInventory) { - ((ISidedInventory)getTile()).openInventory(); + if(getCoreObject() instanceof ISidedInventory) { + ((ISidedInventory)getCoreObject()).openInventory(); } } @@ -324,8 +327,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return; - if(getTile() instanceof ISidedInventory) { - ((ISidedInventory)getTile()).closeInventory(); + if(getCoreObject() instanceof ISidedInventory) { + ((ISidedInventory)getCoreObject()).closeInventory(); } } @@ -335,11 +338,11 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return false; - if(getTile() instanceof ISidedInventory) { + if(getCoreObject() instanceof ISidedInventory) { - if(getTile() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getTile()).isItemValidForSlot(xCoord, yCoord, zCoord, slot, stack); + if(getCoreObject() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getCoreObject()).isItemValidForSlot(xCoord, yCoord, zCoord, slot, stack); - return ((ISidedInventory)getTile()).isItemValidForSlot(slot, stack); + return ((ISidedInventory)getCoreObject()).isItemValidForSlot(slot, stack); } return false; @@ -351,11 +354,11 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return new int[0]; - if(getTile() instanceof ISidedInventory) { + if(getCoreObject() instanceof ISidedInventory) { - if(getTile() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getTile()).getAccessibleSlotsFromSide(xCoord, yCoord, zCoord, side); + if(getCoreObject() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getCoreObject()).getAccessibleSlotsFromSide(xCoord, yCoord, zCoord, side); - return ((ISidedInventory)getTile()).getAccessibleSlotsFromSide(side); + return ((ISidedInventory)getCoreObject()).getAccessibleSlotsFromSide(side); } return new int[0]; @@ -367,11 +370,11 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return false; - if(getTile() instanceof ISidedInventory) { + if(getCoreObject() instanceof ISidedInventory) { - if(getTile() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getTile()).canInsertItem(xCoord, yCoord, zCoord, i, stack, j); + if(getCoreObject() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getCoreObject()).canInsertItem(xCoord, yCoord, zCoord, i, stack, j); - return ((ISidedInventory)getTile()).canInsertItem(i, stack, j); + return ((ISidedInventory)getCoreObject()).canInsertItem(i, stack, j); } return false; @@ -383,11 +386,11 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!inventory) return false; - if(getTile() instanceof ISidedInventory) { + if(getCoreObject() instanceof ISidedInventory) { - if(getTile() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getTile()).canExtractItem(xCoord, yCoord, zCoord, i, stack, j); + if(getCoreObject() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getCoreObject()).canExtractItem(xCoord, yCoord, zCoord, i, stack, j); - return ((ISidedInventory)getTile()).canExtractItem(i, stack, j); + return ((ISidedInventory)getCoreObject()).canExtractItem(i, stack, j); } return false; @@ -426,8 +429,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!this.heat) return 0; - if(getTile() instanceof IHeatSource) { - return ((IHeatSource)getTile()).getHeatStored(); + if(getCoreObject() instanceof IHeatSource) { + return ((IHeatSource)getCoreObject()).getHeatStored(); } return 0; @@ -439,39 +442,39 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy if(!this.heat) return; - if(getTile() instanceof IHeatSource) { - ((IHeatSource)getTile()).useUpHeat(heat); + if(getCoreObject() instanceof IHeatSource) { + ((IHeatSource)getCoreObject()).useUpHeat(heat); } } @Override public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) { - if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ - return ((ICrucibleAcceptor)getTile()).canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); + if(this.moltenMetal && getCoreObject() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getCoreObject()).canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); } return false; } @Override public Mats.MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) { - if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ - return ((ICrucibleAcceptor)getTile()).pour(world, x, y, z, dX, dY, dZ, side, stack); + if(this.moltenMetal && getCoreObject() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getCoreObject()).pour(world, x, y, z, dX, dY, dZ, side, stack); } return null; } @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { - if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ - return ((ICrucibleAcceptor)getTile()).canAcceptPartialFlow(world, x, y, z, side, stack); + if(this.moltenMetal && getCoreObject() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getCoreObject()).canAcceptPartialFlow(world, x, y, z, side, stack); } return false; } @Override public Mats.MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { - if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ - return ((ICrucibleAcceptor)getTile()).flow(world, x, y, z, side, stack); + if(this.moltenMetal && getCoreObject() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getCoreObject()).flow(world, x, y, z, side, stack); } return null; } @@ -481,9 +484,9 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy public String getComponentName() { if(this.worldObj == null) // OC is going too fast, grab from NBT! return componentName; - if(this.getTile() instanceof OCComponent) { + if(this.getCoreObject() instanceof OCComponent) { if (componentName == null || componentName.equals(OCComponent.super.getComponentName())) { - componentName = ((OCComponent) this.getTile()).getComponentName(); + componentName = ((OCComponent) this.getCoreObject()).getComponentName(); } return componentName; } @@ -493,44 +496,44 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override @Optional.Method(modid = "OpenComputers") public boolean canConnectNode(ForgeDirection side) { - if(this.getTile() instanceof OCComponent) + if(this.getCoreObject() instanceof OCComponent) return (this.getBlockMetadata() >= 6 && this.getBlockMetadata() <= 11) && (power || fluid) && - ((OCComponent) this.getTile()).canConnectNode(side); + ((OCComponent) this.getCoreObject()).canConnectNode(side); return OCComponent.super.canConnectNode(null); } @Override @Optional.Method(modid = "OpenComputers") public String[] methods() { - if(this.getTile() instanceof OCComponent) - return ((OCComponent) this.getTile()).methods(); + if(this.getCoreObject() instanceof OCComponent) + return ((OCComponent) this.getCoreObject()).methods(); return OCComponent.super.methods(); } @Override @Optional.Method(modid = "OpenComputers") public Object[] invoke(String method, Context context, Arguments args) throws Exception { - if(this.getTile() instanceof OCComponent) - return ((OCComponent) this.getTile()).invoke(method, context, args); + if(this.getCoreObject() instanceof OCComponent) + return ((OCComponent) this.getCoreObject()).invoke(method, context, args); return OCComponent.super.invoke(null, null, null); } @Override public String[] getFunctionInfo() { - if(getTile() instanceof IRORInfo) return ((IRORInfo) getTile()).getFunctionInfo(); + if(getCoreObject() instanceof IRORInfo) return ((IRORInfo) getCoreObject()).getFunctionInfo(); return new String[0]; } @Override public String provideRORValue(String name) { - if(getTile() instanceof IRORValueProvider) return ((IRORValueProvider) getTile()).provideRORValue(name); + if(getCoreObject() instanceof IRORValueProvider) return ((IRORValueProvider) getCoreObject()).provideRORValue(name); return null; } @Override public String runRORFunction(String name, String[] params) { - if(getTile() instanceof IRORInteractive) return ((IRORInteractive) getTile()).runRORFunction(name, params); + if(getCoreObject() instanceof IRORInteractive) return ((IRORInteractive) getCoreObject()).runRORFunction(name, params); return null; } } diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyDyn.java b/src/main/java/com/hbm/tileentity/TileEntityProxyDyn.java new file mode 100644 index 000000000..56f4a85c6 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyDyn.java @@ -0,0 +1,24 @@ +package com.hbm.tileentity; + +public class TileEntityProxyDyn extends TileEntityProxyCombo { + + @Override + public Object getCoreObject() { + + Object o = super.getCoreObject(); + + if(o instanceof IProxyDelegateProvider) { + Object delegate = ((IProxyDelegateProvider) o).getDelegateForPosition(xCoord, yCoord, zCoord); + if(delegate != null) return delegate; + } + + return o; + } + + /** Based on the position of the proxy, produces a delegate instead of returning the core tile entity. God this fucking sucks. */ + public static interface IProxyDelegateProvider { + + /** Returns the delegate based on the proxy's position. Retunring NULL skips the delegate and reverts back to original core behavior */ + public Object getDelegateForPosition(int x, int y, int z); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 36e0f3d04..c883e8a05 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -222,6 +222,7 @@ public class TileMappings { put(TileEntityProxyInventory.class, "tileentity_proxy_inventory"); put(TileEntityProxyEnergy.class, "tileentity_proxy_power"); put(TileEntityProxyCombo.class, "tileentity_proxy_combo"); + put(TileEntityProxyDyn.class, "tileentity_proxy_dyn"); put(TileEntityProxyConductor.class, "tileentity_proxy_conductor"); put(TileEntityBedrockOre.class, "tileentity_bedrock_ore"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index 1487d194a..e1b443410 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -17,6 +17,7 @@ import com.hbm.module.ModuleMachineChemplant; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.TileEntityProxyDyn.IProxyDelegateProvider; import com.hbm.util.BobMathUtil; import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.i18n.I18nUtil; @@ -35,15 +36,18 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineChemicalFactory extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider { +public class TileEntityMachineChemicalFactory extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider, IProxyDelegateProvider { public FluidTank[] allTanks; public FluidTank[] inputTanks; public FluidTank[] outputTanks; + + public FluidTank water; + public FluidTank lps; public long power; public long maxPower = 10_000_000; - public boolean didProcess = false; + public boolean[] didProcess = new boolean[4]; public boolean frame = false; public int anim; @@ -51,6 +55,8 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl public ModuleMachineChemplant[] chemplantModule; public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); + + protected DelegateChemicalFactoy delegate = new DelegateChemicalFactoy(); public TileEntityMachineChemicalFactory() { super(32); @@ -61,11 +67,17 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl this.inputTanks[i] = new FluidTank(Fluids.NONE, 24_000); this.outputTanks[i] = new FluidTank(Fluids.NONE, 24_000); } + + this.water = new FluidTank(Fluids.WATER, 4_000); + this.lps = new FluidTank(Fluids.SPENTSTEAM, 4_000); - this.allTanks = new FluidTank[this.inputTanks.length + this.outputTanks.length]; + this.allTanks = new FluidTank[this.inputTanks.length + this.outputTanks.length + 2]; for(int i = 0; i < inputTanks.length; i++) this.allTanks[i] = this.inputTanks[i]; for(int i = 0; i < outputTanks.length; i++) this.allTanks[i + this.inputTanks.length] = this.outputTanks[i]; + this.allTanks[this.allTanks.length - 2] = this.water; + this.allTanks[this.allTanks.length - 1] = this.lps; + this.chemplantModule = new ModuleMachineChemplant[4]; for(int i = 0; i < 4; i++) this.chemplantModule[i] = new ModuleMachineChemplant(i, this, slots) .itemInput(5 + i * 7, 6 + i * 7, 7 + i * 7) @@ -129,6 +141,12 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl for(FluidTank tank : inputTanks) if(tank.getTankType() != Fluids.NONE) this.trySubscribe(tank.getTankType(), worldObj, pos); for(FluidTank tank : outputTanks) if(tank.getFill() > 0) this.tryProvide(tank, worldObj, pos); } + + for(DirPos pos : getCoolPos()) { + delegate.trySubscribe(worldObj, pos); + delegate.trySubscribe(water.getTankType(), worldObj, pos); + this.tryProvide(lps, worldObj, pos); + } double speed = 1D; double pow = 1D; @@ -139,14 +157,17 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl pow -= Math.min(upgradeManager.getLevel(UpgradeType.POWER), 3) * 0.25D; pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; - - this.didProcess = false; boolean markDirty = false; for(int i = 0; i < 4; i++) { - this.chemplantModule[i].update(speed * 2D, pow); - this.didProcess |= this.chemplantModule[i].didProcess; + this.chemplantModule[i].update(speed * 2D, pow * 2D, canCool()); + this.didProcess[i] = this.chemplantModule[i].didProcess; markDirty |= this.chemplantModule[i].markDirty; + + if(this.chemplantModule[i].didProcess) { + this.water.setFill(this.water.getFill() - 100); + this.lps.setFill(this.lps.getFill() + 100); + } } if(markDirty) this.markDirty(); @@ -156,7 +177,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl } else { this.prevAnim = this.anim; - if(this.didProcess) this.anim++; + for(boolean n : didProcess) if(n) { this.anim++; break; } if(worldObj.getTotalWorldTime() % 20 == 0) { frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); @@ -164,6 +185,10 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl } } + public boolean canCool() { + return water.getFill() >= 100 && lps.getFill() <= lps.getMaxFill() - 100; + } + public DirPos[] getConPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); @@ -206,9 +231,11 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl super.serialize(buf); for(FluidTank tank : inputTanks) tank.serialize(buf); for(FluidTank tank : outputTanks) tank.serialize(buf); + water.serialize(buf); + lps.serialize(buf); buf.writeLong(power); buf.writeLong(maxPower); - buf.writeBoolean(didProcess); + for(boolean b : didProcess) buf.writeBoolean(b); for(int i = 0; i < 4; i++) this.chemplantModule[i].serialize(buf); } @@ -217,11 +244,37 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl super.deserialize(buf); for(FluidTank tank : inputTanks) tank.deserialize(buf); for(FluidTank tank : outputTanks) tank.deserialize(buf); + water.deserialize(buf); + lps.deserialize(buf); this.power = buf.readLong(); this.maxPower = buf.readLong(); - this.didProcess = buf.readBoolean(); + for(int i = 0; i < 4; i++) this.didProcess[i] = buf.readBoolean(); for(int i = 0; i < 4; i++) this.chemplantModule[i].deserialize(buf); } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + for(int i = 0; i < inputTanks.length; i++) this.inputTanks[i].readFromNBT(nbt, "i" + i); + for(int i = 0; i < outputTanks.length; i++) this.outputTanks[i].readFromNBT(nbt, "i" + i); + + this.power = nbt.getLong("power"); + this.maxPower = nbt.getLong("maxPower"); + for(int i = 0; i < 4; i++) this.chemplantModule[i].readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + for(int i = 0; i < inputTanks.length; i++) this.inputTanks[i].writeToNBT(nbt, "i" + i); + for(int i = 0; i < outputTanks.length; i++) this.outputTanks[i].writeToNBT(nbt, "i" + i); + + nbt.setLong("power", power); + nbt.setLong("maxPower", maxPower); + for(int i = 0; i < 4; i++) this.chemplantModule[i].writeToNBT(nbt); + } @Override public long getPower() { return power; } @Override public void setPower(long power) { this.power = power; } @@ -290,4 +343,36 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl upgrades.put(UpgradeType.OVERDRIVE, 3); return upgrades; } + + public DirPos[] coolantLine; // we could make the same fucking array 50,000 times per tick, or we just make it once + + @Override // all the delegating shit so the proxies on the coolant lines only access coolant (and power and inventory) but not the recipe fluids + public Object getDelegateForPosition(int x, int y, int z) { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + if(coolantLine == null) coolantLine = new DirPos[] { + new DirPos(xCoord + rot.offsetX + dir.offsetX * 2, yCoord, zCoord + rot.offsetZ + dir.offsetZ * 2, dir), + new DirPos(xCoord - rot.offsetX + dir.offsetX * 2, yCoord, zCoord - rot.offsetZ + dir.offsetZ * 2, dir), + new DirPos(xCoord + rot.offsetX - dir.offsetX * 2, yCoord, zCoord + rot.offsetZ - dir.offsetZ * 2, dir.getOpposite()), + new DirPos(xCoord - rot.offsetX - dir.offsetX * 2, yCoord, zCoord - rot.offsetZ - dir.offsetZ * 2, dir.getOpposite()), + }; + + for(DirPos pos : coolantLine) if(pos.compare(x, y, z)) return this.delegate; // this actually fucking works + + return null; + } + + public class DelegateChemicalFactoy implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2 { + + @Override public long getPower() { return TileEntityMachineChemicalFactory.this.getPower(); } + @Override public void setPower(long power) { TileEntityMachineChemicalFactory.this.setPower(power); } + @Override public long getMaxPower() { return TileEntityMachineChemicalFactory.this.getMaxPower(); } + @Override public boolean isLoaded() { return TileEntityMachineChemicalFactory.this.isLoaded(); } + + @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {TileEntityMachineChemicalFactory.this.water}; } + @Override public FluidTank[] getSendingTanks() { return new FluidTank[] {TileEntityMachineChemicalFactory.this.lps}; } + + @Override public FluidTank[] getAllTanks() { return TileEntityMachineChemicalFactory.this.getAllTanks(); } + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 8181d3497..8047c02e4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -106,7 +106,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; - this.chemplantModule.update(speed, pow); + this.chemplantModule.update(speed, pow, true); this.didProcess = this.chemplantModule.didProcess; if(this.chemplantModule.markDirty) this.markDirty(); From ad4b1733d5bb4dec82df1792dc951409141cd437 Mon Sep 17 00:00:00 2001 From: DangerousMilk Date: Tue, 17 Jun 2025 20:30:54 +0200 Subject: [PATCH 182/491] Fixed NBT data not saving. --- .../network/FluidDuctPaintableBlockExhaust.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java index 1510ec422..f57b6f9b1 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java @@ -23,6 +23,9 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; @@ -96,7 +99,7 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { - + ItemStack stack = player.getHeldItem(); if(stack != null && stack.getItem() instanceof ItemBlock) { @@ -160,6 +163,18 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo lastMeta = meta; } } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } @Override public void readFromNBT(NBTTagCompound nbt) { From 06a1b9163d806729e2edbbaca570f628bc7d0f48 Mon Sep 17 00:00:00 2001 From: Justnightheron Date: Wed, 18 Jun 2025 16:57:55 +0800 Subject: [PATCH 183/491] M78 --- src/main/resources/assets/hbm/lang/zh_CN.lang | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 41847c119..33c484487 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -1340,8 +1340,8 @@ hbmfluid.death=锇酸溶液 hbmfluid.deuterium=氘 hbmfluid.diesel=柴油 hbmfluid.diesel_crack=裂化柴油 -hbmfluid.diesel_crack_reform=高辛烷值裂化柴油 -hbmfluid.diesel_reform=高辛烷值柴油 +hbmfluid.diesel_crack_reform=高十六烷值裂化柴油 +hbmfluid.diesel_reform=高十六烷值柴油 hbmfluid.egg=蛋溶解液 hbmfluid.estradiol=雌二醇溶液 hbmfluid.ethanol=乙醇 @@ -5101,10 +5101,6 @@ tile.hadron_coil_neodymium.name=致密钕线圈 tile.hadron_coil_schrabidate.name=致密Sa酸铁线圈 tile.hadron_coil_schrabidium.name=致密Sa326线圈 tile.hadron_coil_starmetal.name=致密星辉线圈 -tile.hadron_cooler.name=粒子加速器冷却装置 -tile.hadron_cooler.desc=冷却功率:10$过冷阈值:10$冷却加成:+10%%$过冷惩罚:-25%% -tile.hadron_cooler_mk2.name=粒子加速器冷却装置-回文特制 -tile.hadron_cooler_mk2.desc=冷却功率:5$效率功能:2-(冷却-15)²/225$最高惩罚:-90%% tile.hadron_core.name=粒子加速器核心组件 tile.hadron_diode.name=肖基特二极管 tile.hadron_plating.name=粒子加速器镀层 @@ -6091,3 +6087,7 @@ tile.fan.falloffOff=稳定的风扇功率 tile.glass_polarized.name=偏光玻璃 tile.machine_autosaw.suspended=暂停 tile.machine_chemical_plant.name=化工厂二代 : 电子布加洛 +hbm.key.ability=循环工具能力 +hbm.key.abilityAlt=配置工具能力 +hbm.key.toggleMagnet=开关磁铁 +upgrade.speed=工作速度 %s From 570ad038023fc4615c203dbae336d8763da14350 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 18 Jun 2025 16:27:14 +0200 Subject: [PATCH 184/491] who's been drawing dyx --- changelog | 5 ++++- src/main/java/api/hbm/fluidmk2/IFluidUserMK2.java | 2 +- src/main/java/com/hbm/blocks/generic/DungeonSpawner.java | 7 ++++++- .../com/hbm/render/tileentity/RendererObjTester.java | 9 ++++++--- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/changelog b/changelog index fd3dc6df8..c2ba2e7a3 100644 --- a/changelog +++ b/changelog @@ -18,6 +18,8 @@ * I don't know why people wanted this, but here you go * The alternate recipe for oxyhydrogen now uses compressed air instead of nothing * Improved threaded Mk5, should be a smidge faster now +* Spires no longer progress phases on peaceful difficulty +* Spires now have a 20% chance of coming with instructions ## Fixed * Chemical plant ports. For real this time. @@ -27,4 +29,5 @@ * Potentially fixed shift clicking issue with the new chemical plant * Fixed blowtorch having a minimum gas requirement of 1,000mB despite only using 250mB * The gas turbine now uses audio with a 20 tick timeout, fixing a rare issue where the loop gets stuck and never ends -* Potentially fixed a dupe caused by using InventoryBogoSorter in combination with crates \ No newline at end of file +* Potentially fixed a dupe caused by using InventoryBogoSorter in combination with crates +* Rapidly spinning dyx should no longer have a state leak that would rotate lighting of unrelated TESRs with it \ No newline at end of file diff --git a/src/main/java/api/hbm/fluidmk2/IFluidUserMK2.java b/src/main/java/api/hbm/fluidmk2/IFluidUserMK2.java index 755c415c5..1e60f7585 100644 --- a/src/main/java/api/hbm/fluidmk2/IFluidUserMK2.java +++ b/src/main/java/api/hbm/fluidmk2/IFluidUserMK2.java @@ -9,7 +9,7 @@ public interface IFluidUserMK2 extends IFluidConnectorMK2, ILoadedTile { public static final int HIGHEST_VALID_PRESSURE = 5; public static final int[] DEFAULT_PRESSURE_RANGE = new int[] {0, 0}; - public static final boolean particleDebug = true; + public static final boolean particleDebug = false; public FluidTank[] getAllTanks(); } diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index 65f4ef5e5..4a6fc10d8 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -81,6 +81,7 @@ public class DungeonSpawner extends BlockContainer { public static Function CON_ABERRATOR = (tile) -> { World world = tile.getWorldObj(); + if(world.difficultySetting.ordinal() == 0) return false; int x = tile.xCoord; int y = tile.yCoord; int z = tile.zCoord; @@ -122,7 +123,11 @@ public class DungeonSpawner extends BlockContainer { TileEntity te = world.getTileEntity(x, y + 18, z); if(te instanceof TileEntitySkeletonHolder) { TileEntitySkeletonHolder skeleton = (TileEntitySkeletonHolder) te; - skeleton.item = new ItemStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR.ordinal()); + if(world.rand.nextInt(5) == 0) { + skeleton.item = new ItemStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR.ordinal()); + } else { + skeleton.item = new ItemStack(ModItems.clay_tablet, 1, 1); + } skeleton.markDirty(); world.markBlockForUpdate(x, y + 18, z); } diff --git a/src/main/java/com/hbm/render/tileentity/RendererObjTester.java b/src/main/java/com/hbm/render/tileentity/RendererObjTester.java index 8762c01c0..450fcd6cb 100644 --- a/src/main/java/com/hbm/render/tileentity/RendererObjTester.java +++ b/src/main/java/com/hbm/render/tileentity/RendererObjTester.java @@ -35,11 +35,8 @@ public class RendererObjTester extends TileEntitySpecialRenderer { public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y + 1, z + 0.5); - GL11.glRotated(15, 0, 0, 1); GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glRotated(System.currentTimeMillis() / 5D % 360D, 0, -1, 0); - if(world == null) { world = new WorldInAJar(5, 3, 5); for(int i = 0; i < 25; i++) world.setBlock(i / 5, 1, i % 5, Blocks.brick_block, 0); @@ -55,6 +52,8 @@ public class RendererObjTester extends TileEntitySpecialRenderer { RenderHelper.disableStandardItemLighting(); GL11.glPushMatrix(); + GL11.glRotated(15, 0, 0, 1); + GL11.glRotated(System.currentTimeMillis() / 5D % 360D, 0, -1, 0); GL11.glTranslated(-2.5, 0, -2.5); Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture); GL11.glShadeModel(GL11.GL_SMOOTH); @@ -73,6 +72,10 @@ public class RendererObjTester extends TileEntitySpecialRenderer { GL11.glPopMatrix(); RenderHelper.enableStandardItemLighting(); + + GL11.glRotated(15, 0, 0, 1); + GL11.glRotated(System.currentTimeMillis() / 5D % 360D, 0, -1, 0); + GL11.glTranslated(0, 2.1, 0.5); this.bindTexture(extra); From 381ef334b26bb12536a70d1cd30d0bbd6be9cedb Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 19 Jun 2025 21:27:56 +0200 Subject: [PATCH 185/491] yet more chemfac crap --- changelog | 8 +++ .../hbm/blocks/machine/MachineChemfac.java | 1 + .../machine/MachineChemicalFactory.java | 45 +++++++++++- .../gui/GUIMachineChemicalFactory.java | 8 +-- .../gui/GUIScreenRecipeSelector.java | 23 +++---- .../inventory/recipes/AssemblerRecipes.java | 12 +++- .../tileentity/RenderChemicalFactory.java | 12 ++++ .../tileentity/machine/TileEntityHadron.java | 1 - .../machine/TileEntityMachineChemfac.java | 1 + .../TileEntityMachineChemicalFactory.java | 65 ++++++++++++++++-- .../TileEntityMachineChemicalPlant.java | 33 +++++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 8 ++- src/main/resources/assets/hbm/lang/en_US.lang | 9 ++- src/main/resources/assets/hbm/sounds.json | 1 + .../assets/hbm/sounds/block/chemicalPlant.ogg | Bin 0 -> 224285 bytes .../models/machines/chemical_factory.png | Bin 3884 -> 3932 bytes 16 files changed, 197 insertions(+), 30 deletions(-) create mode 100644 src/main/resources/assets/hbm/sounds/block/chemicalPlant.ogg diff --git a/changelog b/changelog index c2ba2e7a3..b3a1b847f 100644 --- a/changelog +++ b/changelog @@ -7,6 +7,11 @@ * Upgrades stack with the double base speed * Stackable! * Water consumption rate is fixed at 100mB/t for each active recipe + * Has a dedicated coolant line, so that the coolant water doesn't get used up by recipes + * Coolant line has a tooltip which should make it clear that the machine uses water and produces LPS + * Also has sound, unlike the old chemical factory + * Output fluids are now automatically sent to input tanks, at a rate of up to 50mB/t for somewhat fair fluid sharing + * This means that a chemical factory can make hydrogen peroxide, sulfuric acid and nitric acid, and the only fluid input needed is water ## Changed * The DNT suit now has a damage threshold of 1,000 @@ -20,6 +25,9 @@ * Improved threaded Mk5, should be a smidge faster now * Spires no longer progress phases on peaceful difficulty * Spires now have a 20% chance of coming with instructions +* New chemical plant now has sound +* Old chemical plant and factory have been renamed and their recipes removed +* The new recipe selector no longer changes recipe instantly on click, rather as soon as the selector GUI is closed. This should prevent issues when misclicking, which would destroy buffered fluids ## Fixed * Chemical plant ports. For real this time. diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemfac.java b/src/main/java/com/hbm/blocks/machine/MachineChemfac.java index 60f18617d..fec75ef5b 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChemfac.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChemfac.java @@ -10,6 +10,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class MachineChemfac extends BlockDummyable { public MachineChemfac(Material mat) { diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java b/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java index 787f030b9..d08619616 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChemicalFactory.java @@ -1,16 +1,26 @@ package com.hbm.blocks.machine; +import java.util.ArrayList; +import java.util.List; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ITooltipProvider; import com.hbm.tileentity.TileEntityProxyDyn; import com.hbm.tileentity.machine.TileEntityMachineChemicalFactory; +import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.ForgeDirection; -public class MachineChemicalFactory extends BlockDummyable { +public class MachineChemicalFactory extends BlockDummyable implements ITooltipProvider, ILookOverlay { public MachineChemicalFactory(Material mat) { super(mat); @@ -41,5 +51,38 @@ public class MachineChemicalFactory extends BlockDummyable { for(int i = -2; i <= 2; i++) for(int j = -2; j <= 2; j++) { if(Math.abs(i) == 2 || Math.abs(j) == 2) this.makeExtra(world, x + i, y, z + j); } + + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + for(int i = -2; i <= 2; i++) { + this.makeExtra(world, x + dir.offsetX * i + rot.offsetX * 2, y + 2, z + dir.offsetZ * i + rot.offsetZ * 2); + this.makeExtra(world, x + dir.offsetX * i - rot.offsetX * 2, y + 2, z + dir.offsetZ * i - rot.offsetZ * 2); + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return; + + TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(te instanceof TileEntityMachineChemicalFactory)) return; + TileEntityMachineChemicalFactory chemfac = (TileEntityMachineChemicalFactory) te; + + DirPos[] cool = chemfac.getCoolPos(); + + for(DirPos dirPos : cool) if(dirPos.compare(x + dirPos.getDir().offsetX, y, z + dirPos.getDir().offsetZ)) { + List text = new ArrayList(); + + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + chemfac.water.getTankType().getLocalizedName()); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + chemfac.lps.getTankType().getLocalizedName()); + + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + break; + } } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java index 4b756e87b..a31917752 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java @@ -34,8 +34,8 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { super.drawScreen(mouseX, mouseY, f); for(int i = 0; i < 3; i++) for(int j = 0; j < 4; j++) { - chemplant.inputTanks[i + j * 3].renderTankInfo(this, mouseX, mouseY, guiLeft + 60 + i * 5, guiTop + 20 + j * 22, 4, 16); - chemplant.outputTanks[i + j * 3].renderTankInfo(this, mouseX, mouseY, guiLeft + 189 + i * 5, guiTop + 20 + j * 22, 4, 16); + chemplant.inputTanks[i + j * 3].renderTankInfo(this, mouseX, mouseY, guiLeft + 60 + i * 5, guiTop + 20 + j * 22, 3, 16); + chemplant.outputTanks[i + j * 3].renderTankInfo(this, mouseX, mouseY, guiLeft + 189 + i * 5, guiTop + 20 + j * 22, 3, 16); } chemplant.water.renderTankInfo(this, mouseX, mouseY, guiLeft + 224, guiTop + 125, 7, 52); @@ -128,8 +128,8 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { } for(int i = 0; i < 3; i++) for(int j = 0; j < 4; j++) { - chemplant.inputTanks[i + j * 3].renderTank(guiLeft + 60 + i * 5, guiTop + 36 + j * 22, this.zLevel, 4, 16); - chemplant.outputTanks[i + j * 3].renderTank(guiLeft + 189 + i * 5, guiTop + 36 + j * 22, this.zLevel, 4, 16); + chemplant.inputTanks[i + j * 3].renderTank(guiLeft + 60 + i * 5, guiTop + 36 + j * 22, this.zLevel, 3, 16); + chemplant.outputTanks[i + j * 3].renderTank(guiLeft + 189 + i * 5, guiTop + 36 + j * 22, this.zLevel, 3, 16); } chemplant.water.renderTank(guiLeft + 224, guiTop + 177, this.zLevel, 7, 52); diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java index 09d20ed64..6f101ef29 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java @@ -276,11 +276,6 @@ public class GUIScreenRecipeSelector extends GuiScreen { else this.selection = NULL_SELECTION; - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("index", this.index); - data.setString("selection", this.selection); - TileEntity te = (TileEntity) tile; - PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, te.xCoord, te.yCoord, te.zCoord)); click(); return; } @@ -289,11 +284,6 @@ public class GUIScreenRecipeSelector extends GuiScreen { if(guiLeft + 151 <= x && guiLeft + 151 + 18 > x && guiTop + 71 < y && guiTop + 71 + 18 >= y) { if(!NULL_SELECTION.equals(this.selection)) { this.selection = this.NULL_SELECTION; - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("index", this.index); - data.setString("selection", this.selection); - TileEntity te = (TileEntity) tile; - PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, te.xCoord, te.yCoord, te.zCoord)); click(); return; } @@ -304,6 +294,17 @@ public class GUIScreenRecipeSelector extends GuiScreen { } } + @Override + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + + NBTTagCompound data = new NBTTagCompound(); + data.setInteger("index", this.index); + data.setString("selection", this.selection); + TileEntity te = (TileEntity) tile; + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, te.xCoord, te.yCoord, te.zCoord)); + } + @Override protected void keyTyped(char typedChar, int keyCode) { @@ -321,8 +322,6 @@ public class GUIScreenRecipeSelector extends GuiScreen { FMLCommonHandler.instance().showGuiScreen(previousScreen); } } - - @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @Override public boolean doesGuiPauseGame() { return false; } public void click() { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 99dbd7251..e1efbf9db 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -139,7 +139,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModBlocks.machine_coker, 1), new AStack[] {!exp ? new OreDictStack(STEEL.plateWelded(), 3) : new OreDictStack(STEEL.heavyComp(), 2), new OreDictStack(IRON.ingot(), 16), new OreDictStack(CU.plate528(), 8), new OreDictStack(RUBBER.ingot(), 4), new ComparableStack(ModItems.tank_steel, 2), new ComparableStack(ModBlocks.steel_grate, 4) },200); makeRecipe(new ComparableStack(ModBlocks.machine_refinery, 1), new AStack[] {!exp ? new OreDictStack(STEEL.plateWelded(), 3) : new OreDictStack(STEEL.heavyComp(), 1), new OreDictStack(CU.plate528(), 16), new OreDictStack(STEEL.shell(), 6), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG) },350); makeRecipe(new ComparableStack(ModBlocks.machine_epress, 1), new AStack[] {new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC) }, 100); - makeRecipe(new ComparableStack(ModBlocks.machine_chemplant, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 12), new OreDictStack(CU.plate528(), 6), new ComparableStack(ModItems.tank_steel, 4), new ComparableStack(ModItems.coil_tungsten, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG), new ComparableStack(ModItems.plate_polymer, 8), },200); makeRecipe(new ComparableStack(ModBlocks.machine_chemical_plant, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG) }, 200); makeRecipe(new ComparableStack(ModBlocks.machine_crystallizer, 1), new AStack[] {new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(TI.shell(), 3), new OreDictStack(DESH.ingot(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC), },200); makeRecipe(new ComparableStack(ModBlocks.machine_fluidtank, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new OreDictStack(STEEL.plate528(), 6), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_TAR.any(), 4), },150); @@ -865,6 +864,17 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) }, 400); + makeRecipe(new ComparableStack(ModBlocks.machine_chemical_factory, 1), new AStack[] { + new OreDictStack(DURA.ingot(), 16), + new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), + new OreDictStack(RUBBER.ingot(), 16), + new OreDictStack(STEEL.shell(), 12), + new OreDictStack(CU.pipe(), 8), + new ComparableStack(ModItems.motor_desh, 4), + new ComparableStack(ModItems.coil_tungsten, 16), + new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) + }, 400); + makeRecipe(new ComparableStack(ModItems.missile_shuttle, 1), new AStack[] { new ComparableStack(ModItems.missile_generic, 2), new ComparableStack(ModItems.missile_strong, 1), diff --git a/src/main/java/com/hbm/render/tileentity/RenderChemicalFactory.java b/src/main/java/com/hbm/render/tileentity/RenderChemicalFactory.java index 7eae5b7ad..ba2ce02b3 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderChemicalFactory.java +++ b/src/main/java/com/hbm/render/tileentity/RenderChemicalFactory.java @@ -36,8 +36,20 @@ public class RenderChemicalFactory extends TileEntitySpecialRenderer implements bindTexture(ResourceManager.chemical_factory_tex); ResourceManager.chemical_factory.renderPart("Base"); if(chemplant.frame) ResourceManager.chemical_factory.renderPart("Frame"); + + GL11.glPushMatrix(); + GL11.glTranslated(1, 0, 0); + GL11.glRotated(-anim * 45 % 360D, 0, 1, 0); + GL11.glTranslated(-1, 0, 0); ResourceManager.chemical_factory.renderPart("Fan1"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(-1, 0, 0); + GL11.glRotated(-anim * 45 % 360D, 0, 1, 0); + GL11.glTranslated(1, 0, 0); ResourceManager.chemical_factory.renderPart("Fan2"); + GL11.glPopMatrix(); GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java index 48e9b5535..97b020c12 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java @@ -556,7 +556,6 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe for(int c = z - dZ * 2; c <= z + dZ * 2;c++) { Block block = worldObj.getBlock(a, b, c); - int meta = worldObj.getBlockMetadata(a, b, c); /** ignore the center for now */ if(a == x && b == y && c == z) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java index 2d6ff9a14..2fcb3a60c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java @@ -33,6 +33,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase implements IUpgradeInfoProvider, IFluidCopiable { float rotSpeed; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index e1b443410..8b31f6f11 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -13,7 +13,9 @@ import com.hbm.inventory.gui.GUIMachineChemicalFactory; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; import com.hbm.module.ModuleMachineChemplant; +import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -52,6 +54,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl public boolean frame = false; public int anim; public int prevAnim; + private AudioWrapper audio; public ModuleMachineChemplant[] chemplantModule; public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); @@ -89,9 +92,9 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl @Override public boolean canExtractItem(int i, ItemStack itemStack, int j) { if(i >= 8 && i <= 10) return true; - if(i >= 12 && i <= 14) return true; - if(i >= 19 && i <= 21) return true; - if(i >= 26 && i <= 28) return true; + if(i >= 15 && i <= 17) return true; + if(i >= 22 && i <= 24) return true; + if(i >= 29 && i <= 31) return true; return false; } @@ -145,7 +148,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl for(DirPos pos : getCoolPos()) { delegate.trySubscribe(worldObj, pos); delegate.trySubscribe(water.getTankType(), worldObj, pos); - this.tryProvide(lps, worldObj, pos); + delegate.tryProvide(lps, worldObj, pos); } double speed = 1D; @@ -170,6 +173,16 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl } } + for(FluidTank in : inputTanks) if(in.getTankType() != Fluids.NONE) for(FluidTank out : outputTanks) { // up to 144 iterations, but most of them are NOP anyway + if(out.getTankType() == Fluids.NONE) continue; + if(out.getTankType() != in.getTankType()) continue; + int toMove = BobMathUtil.min(in.getMaxFill() - in.getFill(), out.getFill(), 50); + if(toMove > 0) { + in.setFill(in.getFill() + toMove); + out.setFill(out.getFill() - toMove); + } + } + if(markDirty) this.markDirty(); this.networkPackNT(100); @@ -177,13 +190,44 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl } else { this.prevAnim = this.anim; - for(boolean n : didProcess) if(n) { this.anim++; break; } + boolean didSomething = didProcess[0] || didProcess[1] || didProcess[2] || didProcess[3]; + if(didSomething) this.anim++; if(worldObj.getTotalWorldTime() % 20 == 0) { frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); } + + if(didSomething && MainRegistry.proxy.me().getDistance(xCoord , yCoord, zCoord) < 50) { + if(audio == null) { + audio = createAudioLoop(); + audio.startSound(); + } else if(!audio.isPlaying()) { + audio = rebootAudio(audio); + } + audio.keepAlive(); + audio.updateVolume(this.getVolume(1F)); + + } else { + if(audio != null) { + audio.stopSound(); + audio = null; + } + } } } + + @Override public AudioWrapper createAudioLoop() { + return MainRegistry.proxy.getLoopedSound("hbm:block.chemicalPlant", xCoord, yCoord, zCoord, 1F, 15F, 1.0F, 20); + } + + @Override public void onChunkUnload() { + if(audio != null) { audio.stopSound(); audio = null; } + } + + @Override public void invalidate() { + super.invalidate(); + if(audio != null) { audio.stopSound(); audio = null; } + } public boolean canCool() { return water.getFill() >= 100 && lps.getFill() <= lps.getMaxFill() - 100; @@ -206,6 +250,17 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl new DirPos(xCoord + 0, yCoord, zCoord - 3, Library.NEG_Z), new DirPos(xCoord + 2, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord + dir.offsetX * 2 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 2 + rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX * 1 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 1 + rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX * 0 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 0 + rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord - dir.offsetX * 1 + rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 1 + rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord - dir.offsetX * 2 + rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 2 + rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX * 2 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 2 - rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX * 1 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 1 - rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX * 0 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 0 - rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord - dir.offsetX * 1 - rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 1 - rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord - dir.offsetX * 2 - rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 2 - rot.offsetZ * 2, Library.POS_Y), + new DirPos(xCoord + dir.offsetX + rot.offsetX * 3, yCoord, zCoord + dir.offsetZ + rot.offsetZ * 3, rot), new DirPos(xCoord - dir.offsetX + rot.offsetX * 3, yCoord, zCoord - dir.offsetZ + rot.offsetZ * 3, rot), new DirPos(xCoord + dir.offsetX - rot.offsetX * 3, yCoord, zCoord + dir.offsetZ - rot.offsetZ * 3, rot.getOpposite()), diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 8047c02e4..838958668 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -13,7 +13,9 @@ import com.hbm.inventory.gui.GUIMachineChemicalPlant; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; import com.hbm.module.ModuleMachineChemplant; +import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -46,6 +48,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem public boolean frame = false; public int anim; public int prevAnim; + private AudioWrapper audio; public ModuleMachineChemplant chemplantModule; public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); @@ -120,8 +123,38 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem if(worldObj.getTotalWorldTime() % 20 == 0) { frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); } + + if(this.didProcess && MainRegistry.proxy.me().getDistance(xCoord , yCoord, zCoord) < 50) { + if(audio == null) { + audio = createAudioLoop(); + audio.startSound(); + } else if(!audio.isPlaying()) { + audio = rebootAudio(audio); + } + audio.keepAlive(); + audio.updateVolume(this.getVolume(1F)); + + } else { + if(audio != null) { + audio.stopSound(); + audio = null; + } + } } } + + @Override public AudioWrapper createAudioLoop() { + return MainRegistry.proxy.getLoopedSound("hbm:block.chemicalPlant", xCoord, yCoord, zCoord, 1F, 15F, 1.0F, 20); + } + + @Override public void onChunkUnload() { + if(audio != null) { audio.stopSound(); audio = null; } + } + + @Override public void invalidate() { + super.invalidate(); + if(audio != null) { audio.stopSound(); audio = null; } + } public DirPos[] getConPos() { return new DirPos[] { diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 819c38039..7b00fdbe6 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -372,6 +372,7 @@ container.machineAmmoPress=Munitionspresse container.machineArcWelder=Lichtbogenschweißer container.machineArcFurnaceLarge=Lichtbogenofen container.machineBoiler=Ölwärmer +container.machineChemicalFactory=Chemiefabrik container.machineChemicalPlant=Chemiewerk container.machineCMB=CMB-Stahl Hochofen container.machineCoal=Verbrennungsgenerator @@ -4357,9 +4358,10 @@ tile.machine_boiler_off.name=Alter Boiler tile.machine_catalytic_cracker.name=Katalytischer Cracking-Turm tile.machine_catalytic_reformer.name=Katalytischer Reformer tile.machine_centrifuge.name=Zentrifuge -tile.machine_chemfac.name=Chemiefabrik -tile.machine_chemical_plant.name=Chemiewerk 2: Electric Boogaloo -tile.machine_chemplant.name=Chemiewerk +tile.machine_chemfac.name=Chemiefabrik (Legacy) +tile.machine_chemical_factory.name=Chemiefabrik +tile.machine_chemical_plant.name=Chemiewerk +tile.machine_chemplant.name=Chemiewerk (Legacy) tile.machine_chungus.name=Leviathan-Dampfturbine tile.machine_chungus.desc=Effizienz: 85%% tile.machine_coal_off.name=Verbrennungsgenerator diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index a3a94ae52..6bb6b99ae 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -774,6 +774,7 @@ container.machineAmmoPress=Ammo Press container.machineArcWelder=Arc Welder container.machineArcFurnaceLarge=Arc Furnace container.machineBoiler=Oil Heater +container.machineChemicalFactory=Chemical Factory container.machineChemicalPlant=Chemical Plant container.machineCMB=CMB Steel Furnace container.machineCoal=Combustion Generator @@ -5489,9 +5490,11 @@ tile.machine_boiler_off.name=Old Boiler tile.machine_catalytic_cracker.name=Catalytic Cracking Tower tile.machine_catalytic_reformer.name=Catalytic Reformer tile.machine_centrifuge.name=Centrifuge -tile.machine_chemfac.name=Chemical Factory -tile.machine_chemical_plant.name=Chemical Plant 2: Electric Boogaloo -tile.machine_chemplant.name=Chemical Plant +tile.machine_chemfac.name=Chemical Factory (Legacy) +tile.machine_chemical_factory.name=Chemical Factory +tile.machine_chemical_factory.desc=Quadruple chemical plant.$Recipes process twice as fast,$but needs twice as much power.$Needs to be cooled with water,$produces low-pressure steam. +tile.machine_chemical_plant.name=Chemical Plant +tile.machine_chemplant.name=Chemical Plant (Legacy) tile.machine_chungus.name=Leviathan Steam Turbine tile.machine_chungus.desc=Efficiency: 85%% tile.machine_coal_off.name=Combustion Generator diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 353359465..d7c59ae2c 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -67,6 +67,7 @@ "block.pyroOperate": {"category": "block", "sounds": [{"name": "block/pyroOperate", "stream": false}]}, "block.motor": {"category": "block", "sounds": [{"name": "block/motor", "stream": false}]}, "block.engine": {"category": "block", "sounds": [{"name": "block/engine", "stream": false}]}, + "block.chemicalPlant": {"category": "block", "sounds": [{"name": "block/chemicalPlant", "stream": false}]}, "door.TransitionSealOpen": {"category": "block", "sounds": [{"name": "block/door/transition_seal_open", "stream": true}]}, "door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/chemicalPlant.ogg b/src/main/resources/assets/hbm/sounds/block/chemicalPlant.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ec82f034ba70b25039816a25817baa31ec2c7933 GIT binary patch literal 224285 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

umCLMpc^t@UN^dUyAHg|?0-%AWlUyt;2GXV*YP zqzp<+iP)5+JRGTFaKbs8Zj|+-i!{w`B=hV#AhP5+0KV_^wl591Xqy+%r3Kn(yWn(mIA*2v|+x~2-V2ViU zF1ihU9H_!~W!xC{CbPUAD5a1C^AZY2;7JH&KR**h=wNP?YMhAp!o^hx+DKQ6fQd%- zgxeLw$f5oeLL0$$Z%OnAv5zol^YC2{tW#A+d@McmGw1dId^W!6{ko#jErPpz>1C{p zQ>WzoNtjibd_7)qb+{vQ_@|aVZJ4D}>5~xjrB#+(GApH<4{*pZ0{CmSYO>|KA{J9i zm6Fv+p3n}oZZl&Ch$+@fQb1c+NXZ#WuyraOe-?Ix>c;gKDqN1=hT98T+Vv{Nui*TX zGyj0e-xU3yC25c9N_IIU0TFL_^8Z8BIY!6Tzh8gC#%RpOX>8j@W81dX*iIVTMq@W@ zY)#Zy6PwT6&sx9rpEtAS%;SSbCl{`4P>T9@OLsWf?sUHPQ29K*}rsBh3h~i+M z_idN|%Iz6yj9`x!sC@sv!58(BnCN4&y_R@O>2>g+G~@$HuEWm3afPYbL)UY{po%!f zI=nS5mSW4IOQTqalj`S+dxgW}!ZwQ732W)g`T5GU59lFt5o5JM((tydYBsL0E~ga} z!PED)Sbu9L+I&}@(}UNH^vOp5%MX~OoJU1KfvimO_AC^hpbqo*-=xvjEF{K%+yHNI z{5+3yu6O4Eql!RAMR+X_z!Wr~x3jc>q8(fnL>0eY@7hvQ7G8y4R9VaiubQ~pO;S-w zTqxw!`RnEOqgClM71TRfX20F*>(MoF)3719eWaAnjf@kMU=S~H`|n^iKA`l@`|8>2 z%Gqi}d_4!xMTfbet!`ck$NqP5 z`$EV|Fur|Eje(8Z6>emxBXQKNg&G3lJpN{Ln@`Lsa z&%8rq&eqCT92x9td5yIrlWCJE=fIE7dAlQ?wv2@~S@-3r;pOQKJ*4t%t$w#C<{#

Sg5|pX78ta#+B|%$QUDK5tT=00(}FiOH~R)> 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

tAsJtx! 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 YaczwCwuhcrq;BLX_|f}WJi6e200IwrB>(^b literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/sounds/block/assemblerStrike2.ogg b/src/main/resources/assets/hbm/sounds/block/assemblerStrike2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2850ce7ac84cfb742cb920b126e2c973a5a8ee18 GIT binary patch literal 8532 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 D!x(^6 delta 2724 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 Date: Mon, 14 Jul 2025 16:42:54 +0200 Subject: [PATCH 287/491] half-priced salammi --- changelog | 6 + .../java/com/hbm/crafting/ToolRecipes.java | 2 +- .../ContainerMachineAssemblyMachine.java | 5 +- .../gui/GUIMachineAssemblyMachine.java | 3 +- .../gui/GUIMachineChemicalFactory.java | 3 +- .../gui/GUIMachineChemicalPlant.java | 3 +- .../gui/GUIScreenRecipeSelector.java | 24 +- .../inventory/recipes/AssemblerRecipes.java | 1 - .../recipes/AssemblyMachineRecipes.java | 313 +++++++++++++++++- .../recipes/loader/GenericRecipe.java | 12 + .../recipes/loader/GenericRecipes.java | 29 ++ .../recipes/loader/SerializableRecipe.java | 2 + src/main/java/com/hbm/items/ModItems.java | 13 +- .../com/hbm/items/machine/ItemBlueprints.java | 132 ++++++++ src/main/java/com/hbm/main/MainRegistry.java | 2 + .../hbm/module/machine/ModuleMachineBase.java | 11 +- .../TileEntityMachineAssemblyMachine.java | 3 +- .../TileEntityMachineChemicalFactory.java | 4 +- .../TileEntityMachineChemicalPlant.java | 3 +- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../textures/gui/processing/gui_assembler.png | Bin 3445 -> 3490 bytes .../gui/processing/gui_chemical_factory.png | Bin 3531 -> 3644 bytes .../textures/gui/processing/gui_chemplant.png | Bin 3535 -> 3594 bytes .../assets/hbm/textures/items/blueprints.png | Bin 0 -> 379 bytes .../textures/items/blueprints_discover.png | Bin 0 -> 397 bytes .../hbm/textures/items/blueprints_secret.png | Bin 0 -> 313 bytes 27 files changed, 536 insertions(+), 37 deletions(-) create mode 100644 src/main/java/com/hbm/items/machine/ItemBlueprints.java create mode 100644 src/main/resources/assets/hbm/textures/items/blueprints.png create mode 100644 src/main/resources/assets/hbm/textures/items/blueprints_discover.png create mode 100644 src/main/resources/assets/hbm/textures/items/blueprints_secret.png diff --git a/changelog b/changelog index 914e54d80..6be709682 100644 --- a/changelog +++ b/changelog @@ -3,6 +3,12 @@ * Features a brand new animated model, GUI and the new recipe selection system * Many recipes have been reworked, with the microcrafting complexity reduced * The redcoil didn't get a recipe. It's gonna die soon. + * Neither did the schrabidium transmutator + * Balls-o-tron's spawner can now be made without a worm coin, using a silver key instead. This means that, while expensive, it's possible to summon him without finding a jungle dungeon +* Blueprins + * Replace the journals + * Instead of opening them and making a template, they act as a multi template + * Blueprints need to remain in the slot, removing them will disable the recipes again ## Changed * Removed levitation unit diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 39c00cde5..de9dc346f 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -159,7 +159,7 @@ public class ToolRecipes { //Bobmazon CraftingManager.addShapelessAuto(new ItemStack(ModItems.bobmazon), new Object[] { Items.book, Items.gold_nugget, Items.string, KEY_BLUE }); - + //Carts CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(EnumCartBase.WOOD, EnumMinecart.EMPTY), new Object[] { "P P", "WPW", 'P',KEY_SLAB, 'W', KEY_PLANKS }); CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(EnumCartBase.STEEL, EnumMinecart.EMPTY), new Object[] { "P P", "IPI", 'P', STEEL.plate(), 'I', STEEL.ingot() }); diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java b/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java index f7bc0d499..507d41e66 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java @@ -3,7 +3,6 @@ package com.hbm.inventory.container; import com.hbm.inventory.SlotCraftingOutput; import com.hbm.inventory.SlotNonRetarded; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.util.InventoryUtil; @@ -51,12 +50,12 @@ public class ContainerMachineAssemblyMachine extends ContainerBase { if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; - } else if(slotOriginal.getItem() instanceof ItemAssemblyTemplate) { + } else if(slotOriginal.getItem() == ModItems.blueprints) { if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { if(!this.mergeItemStack(slotStack, 2, 4, false)) return null; } else { - if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 4, 7, false)) return null; + if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 4, 16, false)) return null; } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java index 1572ed3be..d69a8f062 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineAssemblyMachine; import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine; @@ -52,7 +53,7 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule.recipe, 0, this); + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule.recipe, 0, ItemBlueprints.grabPool(assembler.slots[1]), this); } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java index a31917752..567b2e256 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineChemicalFactory; import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineChemicalFactory; @@ -57,7 +58,7 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - for(int i = 0; i < 4; i++) if(this.checkClick(x, y, 74, 19 + i * 22, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule[i].recipe, i, this); + for(int i = 0; i < 4; i++) if(this.checkClick(x, y, 74, 19 + i * 22, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule[i].recipe, i, ItemBlueprints.grabPool(chemplant.slots[4 + i * 7]), this); } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java index 9f02d0adf..78a2e619b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; @@ -54,7 +55,7 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule.recipe, 0, this); + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule.recipe, 0, ItemBlueprints.grabPool(chemplant.slots[1]), this); } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java index 6f101ef29..4a5e3bb83 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java @@ -50,16 +50,18 @@ public class GUIScreenRecipeSelector extends GuiScreen { protected int index; protected IControlReceiver tile; protected GuiScreen previousScreen; + protected String installedPool; - public static void openSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, GuiScreen previousScreen) { - FMLCommonHandler.instance().showGuiScreen(new GUIScreenRecipeSelector(recipeSet, tile, selection, index, previousScreen)); + public static void openSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, String installedPool, GuiScreen previousScreen) { + FMLCommonHandler.instance().showGuiScreen(new GUIScreenRecipeSelector(recipeSet, tile, selection, index, installedPool, previousScreen)); } - public GUIScreenRecipeSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, GuiScreen previousScreen) { + public GUIScreenRecipeSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, String installedPool, GuiScreen previousScreen) { this.recipeSet = recipeSet; this.tile = tile; this.selection = selection; this.index = index; + this.installedPool = installedPool; this.previousScreen = previousScreen; if(this.selection == null) this.selection = NULL_SELECTION; @@ -83,7 +85,11 @@ public class GUIScreenRecipeSelector extends GuiScreen { private void regenerateRecipes() { this.recipes.clear(); - this.recipes.addAll(recipeSet.recipeOrderedList); + + for(Object o : recipeSet.recipeOrderedList) { + GenericRecipe recipe = (GenericRecipe) o; + if(!recipe.isPooled() || (this.installedPool != null && recipe.isPartOfPool(installedPool))) this.recipes.add(recipe); + } resetPaging(); } @@ -92,15 +98,17 @@ public class GUIScreenRecipeSelector extends GuiScreen { this.recipes.clear(); if(search.isEmpty()) { - this.recipes.addAll(recipeSet.recipeOrderedList); + regenerateRecipes(); } else { for(Object o : recipeSet.recipeOrderedList) { GenericRecipe recipe = (GenericRecipe) o; - if(recipe.matchesSearch(search)) this.recipes.add(recipe); + if(recipe.matchesSearch(search)) { + if(!recipe.isPooled() || (this.installedPool != null && recipe.isPartOfPool(installedPool))) this.recipes.add(recipe); + } } + + resetPaging(); } - - resetPaging(); } private void resetPaging() { diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index f725cd17a..13e823907 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -197,7 +197,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.solinium_core, 1), new AStack[] {new OreDictStack(SA327.nugget(), 9), new OreDictStack(EUPH.nugget(), 1), },400); makeRecipe(new ComparableStack(ModItems.solinium_propellant, 1), new AStack[] {new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.plate_polymer, 6), new OreDictStack(W.wireFine(), 6), new ComparableStack(ModItems.biomass_compressed, 4), },350); makeRecipe(new ComparableStack(ModItems.schrabidium_hammer, 1), new AStack[] {new OreDictStack(SA326.block(), 35), new ComparableStack(ModItems.billet_yharonite, 128), new ComparableStack(Items.nether_star, 3), new ComparableStack(ModItems.fragment_meteorite, 512), },1000); - makeRecipe(new ComparableStack(ModItems.component_emitter, 1), new AStack[] {new OreDictStack(STEEL.shell(), 3), new OreDictStack(AL.shell(), 2), new OreDictStack(STEEL.plate(), 32), new OreDictStack(PB.plate(), 24), new ComparableStack(ModItems.plate_desh, 24), new ComparableStack(ModItems.pipes_steel, 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new OreDictStack(STAR.ingot(), 26), new ComparableStack(ModItems.powder_magic, 48), new ComparableStack(ModItems.crystal_xen, 1), },2500); makeRecipe(new ComparableStack(ModBlocks.machine_radar, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 8), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(ANY_RUBBER.ingot(), 8), new ComparableStack(ModItems.magnetron, 3), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC.ordinal()), new ComparableStack(ModItems.coil_copper, 12), new ComparableStack(ModItems.crt_display, 4), },300); makeRecipe(new ComparableStack(ModBlocks.machine_radar_large, 1), new AStack[] {new OreDictStack(STEEL.plateWelded(), 6), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 16), new OreDictStack(ANY_RUBBER.ingot(), 16), new ComparableStack(ModItems.magnetron, 12), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_copper, 32), new ComparableStack(ModItems.crt_display, 4), },600); makeRecipe(new ComparableStack(ModBlocks.machine_forcefield, 1), new AStack[] {new OreDictStack(ALLOY.plate528(), 8), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.coil_gold_torus, 6), new ComparableStack(ModItems.coil_magnetized_tungsten, 12), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.upgrade_radius, 1), new ComparableStack(ModItems.upgrade_health, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModBlocks.machine_transformer, 1), },1000); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 629e10584..39f2fc198 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -5,7 +5,6 @@ import java.util.HashMap; import java.util.List; import static com.hbm.inventory.OreDictManager.*; -import static com.hbm.inventory.material.Mats.*; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.FluidStack; @@ -17,11 +16,18 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ModItems; +import com.hbm.items.ItemEnums.EnumCasingType; +import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemFluidIcon; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; +import com.hbm.items.machine.ItemDrillbit.EnumDrillType; +import com.hbm.items.machine.ItemPistons.EnumPistonType; +import com.hbm.items.weapon.ItemAmmoHIMARS; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -41,6 +47,20 @@ public class AssemblyMachineRecipes extends GenericRecipes { public void registerDefaults() { // plates and ingots + this.register(new GenericRecipe("ass.plateiron").setup(60, 100).outputItems(new ItemStack(ModItems.plate_iron, 1)).inputItems(new OreDictStack(IRON.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.plategold").setup(60, 100).outputItems(new ItemStack(ModItems.plate_gold, 1)).inputItems(new OreDictStack(GOLD.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platetitanium").setup(60, 100).outputItems(new ItemStack(ModItems.plate_titanium, 1)).inputItems(new OreDictStack(TI.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platealu").setup(60, 100).outputItems(new ItemStack(ModItems.plate_aluminium, 1)).inputItems(new OreDictStack(AL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platesteel").setup(60, 100).outputItems(new ItemStack(ModItems.plate_steel, 1)).inputItems(new OreDictStack(STEEL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platelead").setup(60, 100).outputItems(new ItemStack(ModItems.plate_lead, 1)).inputItems(new OreDictStack(PB.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platecopper").setup(60, 100).outputItems(new ItemStack(ModItems.plate_copper, 1)).inputItems(new OreDictStack(CU.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platealloy").setup(60, 100).outputItems(new ItemStack(ModItems.plate_advanced_alloy, 1)).inputItems(new OreDictStack(ALLOY.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.plateschrab").setup(60, 100).outputItems(new ItemStack(ModItems.plate_schrabidium, 1)).inputItems(new OreDictStack(SA326.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platecmb").setup(60, 100).outputItems(new ItemStack(ModItems.plate_combine_steel, 1)).inputItems(new OreDictStack(CMB.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.plategunmetal").setup(60, 100).outputItems(new ItemStack(ModItems.plate_gunmetal, 1)).inputItems(new OreDictStack(GUNMETAL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.plateweaponsteel").setup(60, 100).outputItems(new ItemStack(ModItems.plate_weaponsteel, 1)).inputItems(new OreDictStack(WEAPONSTEEL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platesaturnite").setup(60, 100).outputItems(new ItemStack(ModItems.plate_saturnite, 1)).inputItems(new OreDictStack(BIGMT.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + this.register(new GenericRecipe("ass.platedura").setup(60, 100).outputItems(new ItemStack(ModItems.plate_dura_steel, 1)).inputItems(new OreDictStack(DURA.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); this.register(new GenericRecipe("ass.platemixed").setup(50, 100).outputItems(new ItemStack(ModItems.plate_mixed, 4)) .inputItems(new OreDictStack(ALLOY.plate(), 2), new OreDictStack(OreDictManager.getReflector(), 1), new OreDictStack(BIGMT.plate(), 1))); this.register(new GenericRecipe("ass.dalekanium").setup(200, 100).outputItems(new ItemStack(ModItems.plate_dalekanium, 1)) @@ -96,6 +116,19 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(MINGRADE.wireDense(), 1))); this.register(new GenericRecipe("ass.sealcontroller").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_controller, 1)) .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(MINGRADE.wireDense(), 4))); + + // nuclear door mod + this.register(new GenericRecipe("ass.vaultdoor").setup(600, 100).outputItems(new ItemStack(ModBlocks.vault_door, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 32), new OreDictStack(DURA.ingot(), 32), new OreDictStack(PB.plateCast(), 8), new OreDictStack(ANY_RUBBER.ingot(), 12), new OreDictStack(DURA.bolt(), 32), new ComparableStack(ModItems.motor, 3))); + this.register(new GenericRecipe("ass.blastdoor").setup(200, 100).outputItems(new ItemStack(ModBlocks.blast_door, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(PB.plate(), 6), new OreDictStack(ALLOY.plate(), 6), new OreDictStack(ANY_RUBBER.ingot(), 2), new OreDictStack(DURA.bolt(), 8), new ComparableStack(ModItems.motor, 1))); + this.register(new GenericRecipe("ass.firedoor").setup(300, 100).outputItems(new ItemStack(ModBlocks.fire_door, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(ALLOY.plate(), 8), new OreDictStack(DURA.bolt(), 8), new ComparableStack(ModItems.motor, 2))); + + /* + this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) + .inputItems()); + */ // machines this.register(new GenericRecipe("ass.shredder").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_shredder, 1)) @@ -106,6 +139,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.gascent").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_gascent, 1)) .inputItems(new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(DESH.ingot(), 2), new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()))); + this.register(new GenericRecipe("ass.arcfurnace").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_arc_furnace, 1)) + .inputItems(new OreDictStack(ANY_CONCRETE.any(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16),new OreDictStack(STEEL.plateCast(), 8), new ComparableStack(ModBlocks.machine_transformer, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG.ordinal()))); this.register(new GenericRecipe("ass.acidizer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_crystallizer, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(TI.shell(), 3), new OreDictStack(DESH.ingot(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.rtg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_rtg_grey, 1)) @@ -122,19 +157,69 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 8), new OreDictStack(RUBBER.ingot(), 4), new OreDictStack(NB.ingot(), 4))); this.register(new GenericRecipe("ass.epress").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_epress, 1)) .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.excavator").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_excavator, 1)) + .inputItems(new ComparableStack(Blocks.stonebrick, 8), new OreDictStack(STEEL.ingot(), 8), new OreDictStack(IRON.ingot(), 8), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.drillsteel").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.STEEL.ordinal())) + .inputItems(new OreDictStack(STEEL.ingot(), 12), new OreDictStack(W.ingot(), 4))); + this.register(new GenericRecipe("ass.drillsteeldiamond").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.STEEL_DIAMOND.ordinal())) + .inputItems(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.STEEL.ordinal()), new OreDictStack(DIAMOND.dust(), 16))); + this.register(new GenericRecipe("ass.drilldura").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.HSS.ordinal())) + .inputItems(new OreDictStack(DURA.ingot(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 12), new OreDictStack(TI.ingot(), 8))); + this.register(new GenericRecipe("ass.drillduradiamond").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.HSS_DIAMOND.ordinal())) + .inputItems(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.HSS.ordinal()), new OreDictStack(DIAMOND.dust(), 24))); + this.register(new GenericRecipe("ass.drilldesh").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.DESH.ordinal())) + .inputItems(new OreDictStack(DESH.ingot(), 16), new OreDictStack(RUBBER.ingot(), 12), new OreDictStack(NB.ingot(), 4))); + this.register(new GenericRecipe("ass.drilldeshdiamond").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.DESH_DIAMOND.ordinal())) + .inputItems(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.DESH.ordinal()), new OreDictStack(DIAMOND.dust(), 32))); + this.register(new GenericRecipe("ass.drilltc").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.TCALLOY.ordinal())) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.ingot(), 20), new OreDictStack(DESH.ingot(), 12), new OreDictStack(RUBBER.ingot(), 8))); + this.register(new GenericRecipe("ass.drilltcdiamond").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.TCALLOY_DIAMOND.ordinal())) + .inputItems(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.TCALLOY.ordinal()), new OreDictStack(DIAMOND.dust(), 48))); + this.register(new GenericRecipe("ass.drillferro").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.FERRO.ordinal())) + .inputItems(new OreDictStack(FERRO.ingot(), 24), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 12), new OreDictStack(BI.ingot(), 4))); + this.register(new GenericRecipe("ass.drillferrodiamond").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.FERRO_DIAMOND.ordinal())) + .inputItems(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.FERRO.ordinal()), new OreDictStack(DIAMOND.dust(), 56))); + this.register(new GenericRecipe("ass.slopper").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_ore_slopper, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(TI.plate(), 8), new OreDictStack(CU.pipe(), 3), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.mininglaser").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_mining_laser, 1)) - .inputItems(new ComparableStack(ModItems.tank_steel, 3), new OreDictStack(STEEL.plate528(), 16), new ComparableStack(ModItems.crystal_redstone, 3), new ComparableStack(Items.diamond, 3), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.motor, 3), new OreDictStack(DURA.plate(), 4))); + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(TI.shell(), 4), new OreDictStack(DURA.plate(), 4), new ComparableStack(ModItems.crystal_redstone, 3), new ComparableStack(Items.diamond, 3), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.motor, 3))); this.register(new GenericRecipe("ass.teleporter").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_teleporter, 1)) .inputItems(new OreDictStack(TI.plate(), 12), new OreDictStack(ALLOY.plate528(), 12), new OreDictStack(GOLD.wireFine(), 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1))); - + this.register(new GenericRecipe("ass.radar").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_radar, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 12), new OreDictStack(ANY_RUBBER.ingot(), 12), new ComparableStack(ModItems.magnetron, 5), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC.ordinal()), new ComparableStack(ModItems.crt_display, 4))); + this.register(new GenericRecipe("ass.radarlarge").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_radar_large, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 6), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_RUBBER.ingot(), 24), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.crt_display, 4))); + this.register(new GenericRecipe("ass.forcefield").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_forcefield, 1)) + .inputItems(new OreDictStack(ALLOY.plate528(), 8), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.coil_gold_torus, 6), new ComparableStack(ModItems.coil_magnetized_tungsten, 12), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.upgrade_radius, 1), new ComparableStack(ModItems.upgrade_health, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModBlocks.machine_transformer, 1))); + this.register(new GenericRecipe("ass.strandcaster").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_strand_caster, 1)) + .inputItems(new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(STEEL.shell(), 2), new OreDictStack(ANY_CONCRETE.any(), 8))); + // generators this.register(new GenericRecipe("ass.dieselgen").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_diesel, 1)) .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4))); + this.register(new GenericRecipe("ass.combustiongen").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_combustion_engine, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(CU.ingot(), 12), new OreDictStack(GOLD.wireDense(), 8), new ComparableStack(ModItems.tank_steel, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.pistonsetsteel").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.STEEL.ordinal())) + .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(CU.plate(), 4), new OreDictStack(W.ingot(), 8), new OreDictStack(W.bolt(), 16))); + this.register(new GenericRecipe("ass.pistonsetdura").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.DURA.ordinal())) + .inputItems(new OreDictStack(DURA.ingot(), 24), new OreDictStack(TI.plate(), 8), new OreDictStack(W.ingot(), 8), new OreDictStack(DURA.bolt(), 16))); + this.register(new GenericRecipe("ass.pistonsetdesh").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.DESH.ordinal())) + .inputItems(new OreDictStack(DESH.ingot(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 12), new OreDictStack(CU.plate(), 24), new OreDictStack(W.ingot(), 16), new OreDictStack(DURA.pipe(), 4))); + this.register(new GenericRecipe("ass.pistonsetstar").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.STARMETAL.ordinal())) + .inputItems(new OreDictStack(STAR.ingot(), 24), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(BIGMT.plate(), 24), new OreDictStack(NB.ingot(), 16), new OreDictStack(DURA.pipe(), 4))); this.register(new GenericRecipe("ass.turbofan").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_turbofan, 1)) .inputItems(new OreDictStack(TI.shell(), 8), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()))); this.register(new GenericRecipe("ass.gasturbine").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_turbinegas, 1)) .inputItems(new OreDictStack(STEEL.shell(), 10), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4),new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 1), new ComparableStack(ModItems.ingot_rubber, 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()))); - + this.register(new GenericRecipe("ass.iturbine").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_large_turbine, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 12), new OreDictStack(RUBBER.ingot(), 4), new ComparableStack(ModItems.turbine_titanium, 3), new OreDictStack(GOLD.wireDense(), 6), new OreDictStack(DURA.pipe(), 3), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.leviturbine").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_chungus, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 6), new OreDictStack(STEEL.plateWelded(), 16), new OreDictStack(TI.plate528(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new ComparableStack(ModItems.turbine_tungsten, 5), new ComparableStack(ModItems.turbine_titanium, 3), new ComparableStack(ModItems.flywheel_beryllium, 1), new OreDictStack(GOLD.wireDense(), 48), new OreDictStack(DURA.pipe(), 16), new OreDictStack(STEEL.pipe(), 16))); + + // condensers + this.register(new GenericRecipe("ass.hpcondenser").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_condenser_powered, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 4), new OreDictStack(CU.plate528(), 16), new ComparableStack(ModItems.motor_desh, 3), new OreDictStack(STEEL.pipe(), 24), new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 4))); + // batteries this.register(new GenericRecipe("ass.battery").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 1), new OreDictStack(S.dust(), 12), new OreDictStack(PB.dust(), 12))); @@ -144,7 +229,19 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(DESH.ingot(), 16), new OreDictStack(NP237.dust(), 12), new OreDictStack(SA326.dust(), 12))); this.register(new GenericRecipe("ass.batterydnt").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) .inputItems(new OreDictStack(DNT.ingot(), 24), new ComparableStack(ModItems.powder_spark_mix, 12), new ComparableStack(ModItems.battery_spark_cell_1000, 1), new OreDictStack(CMB.ingot(), 32))); - + this.register(new GenericRecipe("ass.fensusan").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.machine_fensu, 1)) + .inputItems(new ComparableStack(ModItems.ingot_electronium, 32), + new ComparableStack(ModBlocks.machine_dineutronium_battery, 16), + new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 64), + new OreDictStack(DURA.block(), 16), + new OreDictStack(STAR.block(), 64), + new ComparableStack(ModBlocks.machine_transformer_dnt, 8), + new ComparableStack(ModItems.coil_magnetized_tungsten, 24), + new ComparableStack(ModItems.powder_magic, 64), + new ComparableStack(ModItems.plate_dineutronium, 24), + new ComparableStack(ModItems.ingot_u238m2), + new ComparableStack(ModItems.ingot_cft, 128))); + // fluid tanks this.register(new GenericRecipe("ass.tank").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_fluidtank, 1)) .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_TAR.any(), 4))); @@ -153,7 +250,18 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.orbus").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_orbus, 1)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plateCast(), 4), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc_polonium, 1))); + // accelerators + this.register(new GenericRecipe("ass.cyclotron").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_cyclotron, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 3), new OreDictStack(ND.wireDense(), 32), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(STEEL.plate528(), 32), new OreDictStack(AL.plate528(), 32), new OreDictStack(ANY_PLASTIC.ingot(), 24), new OreDictStack(RUBBER.ingot(), 24), new OreDictStack(CU.plateCast(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC))); + + // reactors + this.register(new GenericRecipe("ass.cirnox").setup(600, 100).outputItems(new ItemStack(ModBlocks.reactor_zirnox, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(B.ingot(), 8), new OreDictStack(GRAPHITE.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(ANY_CONCRETE.any(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + + // fusion reactor + this.register(new GenericRecipe("ass.fusioncore").setup(600, 100).outputItems(new ItemStack(ModBlocks.struct_iter_core, 1)) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 6), new OreDictStack(W.plateWelded(), 6), new OreDictStack(OreDictManager.getReflector(), 12), new ComparableStack(ModItems.coil_advanced_alloy, 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID))); this.register(new GenericRecipe("ass.fusionconductor").setup(100, 100).outputItems(new ItemStack(ModBlocks.fusion_conductor, 1)) .inputItems(new ComparableStack(ModItems.coil_advanced_alloy, 5))); this.register(new GenericRecipe("ass.fusioncenter").setup(200, 100).outputItems(new ItemStack(ModBlocks.fusion_center, 1)) @@ -162,6 +270,12 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(TI.ingot(), 4), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.motor, 4))); this.register(new GenericRecipe("ass.fusionheater").setup(200, 100).outputItems(new ItemStack(ModBlocks.fusion_heater, 4)) .inputItems(new OreDictStack(W.plateWelded(), 2), new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.magnetron, 2))); + this.register(new GenericRecipe("ass.blankettungsten").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_tungsten, 1)) + .inputItems(new OreDictStack(W.block(), 32), new OreDictStack(OreDictManager.getReflector(), 96))); + this.register(new GenericRecipe("ass.blanketdesh").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_desh, 1)) + .inputItems(new OreDictStack(DESH.block(), 16), new OreDictStack(CO.block(), 16), new OreDictStack(BIGMT.plate(), 96))); + this.register(new GenericRecipe("ass.blanketchlorophyte").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_chlorophyte, 1)) + .inputItems(new OreDictStack(W.block(), 16), new OreDictStack(DURA.block(), 16), new OreDictStack(OreDictManager.getReflector(), 48), new ComparableStack(ModItems.powder_chlorophyte, 48))); // watz this.register(new GenericRecipe("ass.watzrod").setup(200, 100).outputItems(new ItemStack(ModBlocks.watz_element, 3)) @@ -171,6 +285,13 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.watzcasing").setup(100, 100).outputItems(new ItemStack(ModBlocks.watz_end, 3)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plateWelded(), 2))); + // upgrades + this.register(new GenericRecipe("ass.overdrive1").setup(200, 100).outputItems(new ItemStack(ModItems.upgrade_overdrive_1, 1)) + .inputItems(new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(BIGMT.ingot(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.overdrive2").setup(600, 100).outputItems(new ItemStack(ModItems.upgrade_overdrive_2, 1)) + .inputItems(new ComparableStack(ModItems.upgrade_overdrive_1, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(BIGMT.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD))); + this.register(new GenericRecipe("ass.overdrive3").setup(1_200, 100).outputItems(new ItemStack(ModItems.upgrade_overdrive_3, 1)) + .inputItems(new ComparableStack(ModItems.upgrade_overdrive_2, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(ANY_BISMOIDBRONZE.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID))); /* this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) .inputItems()); @@ -179,6 +300,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { // rancid shit mob spawners this.register(new GenericRecipe("ass.chopper").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_chopper, 8)) .inputItems(new OreDictStack(CMB.plateCast(), 24), new OreDictStack(STEEL.plate(), 32), new OreDictStack(MAGTUNG.wireFine(), 48), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER_ADVANCED))); + this.register(new GenericRecipe("ass.ballsotron").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_worm, 1)) + .inputItems(new OreDictStack(TI.plateWelded(), 32), new OreDictStack(RUBBER.ingot(), 64), new ComparableStack(ModItems.motor, 64), new OreDictStack(GOLD.wireDense(), 64), new OreDictStack(U238.block(), 10), new ComparableStack(ModItems.mech_key, 1))); // weapon parts this.register(new GenericRecipe("ass.clusterpellets").setup(50, 100).outputItems(new ItemStack(ModItems.pellet_cluster, 1)) @@ -212,7 +335,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.customnuke").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_custom, 1)) .inputItems(new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_small_steel, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack(KEY_GRAY, 4))); this.register(new GenericRecipe("ass.levibomb").setup(200, 100).outputItems(new ItemStack(ModBlocks.float_bomb, 1)) - .inputItems(new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireDense(), 8))); + .inputItems(new OreDictStack(TI.plate(), 12), new OreDictStack(SA326.nugget(), 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireDense(), 8))); this.register(new GenericRecipe("ass.endobomb").setup(200, 100).outputItems(new ItemStack(ModBlocks.therm_endo, 1)) .inputItems(new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.powder_ice, 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4))); this.register(new GenericRecipe("ass.exobomb").setup(200, 100).outputItems(new ItemStack(ModBlocks.therm_exo, 1)) @@ -249,7 +372,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.mikecore").setup(1_200, 100).outputItems(new ItemStack(ModItems.mike_core, 1)) .inputItems(new OreDictStack(U238.nugget(), 24), new OreDictStack(PB.ingot(), 6))); this.register(new GenericRecipe("ass.mikedeut").setup(600, 100).outputItems(new ItemStack(ModItems.mike_deut, 1)) - .inputItems(new OreDictStack(IRON.plate528(), 12), new OreDictStack(STEEL.plate528(), 16), new ComparableStack(ModItems.cell_deuterium, 10))); + .inputItems(new OreDictStack(IRON.plate528(), 12), new OreDictStack(STEEL.plate528(), 16)) + .inputFluids(new FluidStack(Fluids.DEUTERIUM, 10_000))); this.register(new GenericRecipe("ass.mikecooler").setup(300, 100).outputItems(new ItemStack(ModItems.mike_cooling_unit, 1)) .inputItems(new OreDictStack(IRON.plate528(), 8), new ComparableStack(ModItems.coil_copper, 5), new ComparableStack(ModItems.coil_tungsten, 5), new ComparableStack(ModItems.motor, 2))); this.register(new GenericRecipe("ass.fleijaigniter").setup(200, 100).outputItems(new ItemStack(ModItems.fleija_igniter, 1)) @@ -290,7 +414,50 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.plate_paa, 3), new OreDictStack(OreDictManager.getReflector(), 1), new ComparableStack(ModItems.coil_magnetized_tungsten, 3), new ComparableStack(ModItems.powder_power, 3))); this.register(new GenericRecipe("ass.bholegrenade").setup(1_200, 100).outputItems(new ItemStack(ModItems.grenade_black_hole, 1)) .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 6), new OreDictStack(OreDictManager.getReflector(), 3), new ComparableStack(ModItems.coil_magnetized_tungsten, 2), new ComparableStack(ModItems.black_hole, 1))); + + /* + this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) + .inputItems()); + */ + // turrets + this.register(new GenericRecipe("ass.turretchekhov").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_chekhov, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.turretfriendly").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_friendly, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(GUNMETAL.mechanism(), 1), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.turretjeremy").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_jeremy, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(STEEL.shell(), 3), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.turrettauon").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_tauon, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(CU.ingot(), 32), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.battery_lithium, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.turretrichard").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_richard, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(ANY_PLASTIC.ingot(), 2), new OreDictStack(STEEL.shell(), 8), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.turrethoward").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_howard, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 10), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.maxwell").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_maxwell, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 4), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.magnetron, 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.fritz").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_fritz, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.barrel_steel))); + this.register(new GenericRecipe("ass.arty").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.turret_arty, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 128), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 12), new OreDictStack(WEAPONSTEEL.mechanism(), 16), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.himars").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.turret_himars, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 128), new OreDictStack(ANY_PLASTIC.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), new OreDictStack(BIGMT.mechanism(), 8), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.himarssmall").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 48), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 48), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarssmallhe").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_HE)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 24), new ComparableStack(ModItems.rocket_fuel, 48), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 18), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 48), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarssmallwp").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_WP)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 24), new ComparableStack(ModItems.rocket_fuel, 48), new OreDictStack(P_WHITE.ingot(), 18), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 48), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarssmalltb").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_TB)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 24), new ComparableStack(ModItems.rocket_fuel, 48), new ComparableStack(ModItems.ball_tatb, 32), new OreDictStack(Fluids.KEROSENE_REFORM.getDict(1_000), 12), new OreDictStack(Fluids.PEROXIDE.getDict(1_000), 12), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarssmallnuke").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_MINI_NUKE)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 24), new ComparableStack(ModItems.rocket_fuel, 48), new ComparableStack(ModItems.ball_tatb, 6), new OreDictStack(PU239.nugget(), 12), new OreDictStack(OreDictManager.getReflector(), 12), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarssmalllava").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_LAVA)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 32), new ComparableStack(ModItems.ball_tatb, 4), new OreDictStack(VOLCANIC.gem(), 1), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.himarslarge").setup(200, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.LARGE)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 36), new ComparableStack(ModItems.ball_tatb, 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.himarslargetb").setup(200, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.LARGE_TB)) + .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 36), new ComparableStack(ModItems.ball_tatb, 24), new OreDictStack(Fluids.KEROSENE_REFORM.getDict(1_000), 16), new OreDictStack(Fluids.PEROXIDE.getDict(1_000), 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED))); + // missile parts this.register(new GenericRecipe("ass.missileassembly").setup(200, 100).outputItems(new ItemStack(ModItems.missile_assembly, 1)) .inputItems(new OreDictStack(AL.shell(), 2), new OreDictStack(TI.shell(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.rocket_fuel, 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); @@ -328,7 +495,137 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.stealthmissile").setup(1_200, 100).outputItems(new ItemStack(ModItems.missile_stealth, 1)) .inputItems(new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32))); this.register(new GenericRecipe("ass.thrusternerva").setup(600, 100).outputItems(new ItemStack(ModItems.thruster_nuclear, 1)) - .inputItems(new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new ComparableStack(ModItems.pipes_steel))); + .inputItems(new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new OreDictStack(STEEL.pipe(), 4))); + + /* + this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModItems., 1)) + .inputItems()); + */ + + // weapons + this.register(new GenericRecipe("ass.schrabhammer").setup(6_000, 100).outputItems(new ItemStack(ModItems.schrabidium_hammer, 1)) + .inputItems( + new OreDictStack(SA326.block(), 35), + new ComparableStack(ModItems.billet_yharonite, 64), + new ComparableStack(ModItems.billet_yharonite, 64), + new ComparableStack(ModItems.coin_ufo, 1), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64), + new ComparableStack(ModItems.fragment_meteorite, 64))); + + // ammo + this.register(new GenericRecipe("ass.50bmgsm").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_standard, 6, EnumAmmo.BMG50_SM.ordinal())) + .inputItems(new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE_STEEL), new OreDictStack(ANY_SMOKELESS.dust(), 6), new OreDictStack(STAR.ingot(), 3)) + .setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "silverstorm")); + this.register(new GenericRecipe("ass.50bmgbypass").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_secret, 12, EnumAmmoSecret.BMG50_BLACK.ordinal())) + .inputItems(new ComparableStack(ModItems.casing, 2, EnumCasingType.LARGE_STEEL), new OreDictStack(ANY_SMOKELESS.dust(), 24), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.black_diamond)) + .setPools(GenericRecipes.POOL_PREFIX_SECRET + "psalm")); + + // space + this.register(new GenericRecipe("ass.soyuz").setup(6_000, 100).outputItems(new ItemStack(ModItems.missile_soyuz, 1)) + .inputItems(new OreDictStack(TI.shell(), 32), + new OreDictStack(RUBBER.ingot(), 64), + new ComparableStack(ModItems.rocket_fuel, 64), + new ComparableStack(ModItems.thruster_small, 12), + new ComparableStack(ModItems.thruster_medium, 12), + new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER), + new ComparableStack(ModItems.part_generic, 32, EnumPartType.LDE)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "soyuz")); + this.register(new GenericRecipe("ass.lander").setup(2_400, 100).outputItems(new ItemStack(ModItems.missile_soyuz_lander, 1)) + .inputItems(new OreDictStack(AL.shell(), 4), + new OreDictStack(RUBBER.ingot(), 16), + new ComparableStack(ModItems.rocket_fuel, 16), + new ComparableStack(ModItems.thruster_small, 3), + new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER_ADVANCED), + new ComparableStack(ModItems.part_generic, 12, EnumPartType.LDE)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "soyuz")); + this.register(new GenericRecipe("ass.satellitebase").setup(600, 100).outputItems(new ItemStack(ModItems.sat_base, 1)) + .inputItems(new OreDictStack(RUBBER.ingot(), 12), + new OreDictStack(TI.shell(), 3), + new ComparableStack(ModItems.thruster_large, 1), + new ComparableStack(ModItems.part_generic, 8, EnumPartType.LDE), + new ComparableStack(ModItems.plate_desh, 4), + new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), + new ComparableStack(ModItems.photo_panel, 24), + new ComparableStack(ModItems.circuit, 12, EnumCircuitType.BASIC), + new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + this.register(new GenericRecipe("ass.satellitemapper").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_mapper, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 3), + new ComparableStack(ModItems.plate_desh, 4), + new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), + new ComparableStack(ModBlocks.glass_quartz, 8))); + this.register(new GenericRecipe("ass.satellitescanner").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_scanner, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 3), + new OreDictStack(TI.plateCast(), 8), + new ComparableStack(ModItems.plate_desh, 4), + new ComparableStack(ModItems.magnetron, 8), + new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED.ordinal()))); + this.register(new GenericRecipe("ass.satelliteradar").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_radar, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 3), + new OreDictStack(TI.plateCast(), 12), + new ComparableStack(ModItems.magnetron, 12), + new ComparableStack(ModItems.coil_gold, 16), + new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()))); + this.register(new GenericRecipe("ass.satellitelaser").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_laser, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 6), + new OreDictStack(CU.plateCast(), 24), + new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), + new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), + new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD), + new ComparableStack(ModItems.crystal_diamond, 8), + new ComparableStack(ModBlocks.glass_quartz, 8))); + this.register(new GenericRecipe("ass.satelliteresonator").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_resonator, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 6), + new OreDictStack(STAR.ingot(), 12), + new OreDictStack(ANY_PLASTIC.ingot(), 48), + new ComparableStack(ModItems.crystal_xen, 1), + new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.satelliterelay").setup(600, 100).outputItems(new ItemStack(ModItems.sat_foeq, 1)) + .inputItems(new OreDictStack(TI.shell(), 3), + new ComparableStack(ModItems.plate_desh, 8), + new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.HYDROGEN.getID()), + new ComparableStack(ModItems.photo_panel, 16), + new ComparableStack(ModItems.thruster_nuclear, 1), + new ComparableStack(ModItems.ingot_uranium_fuel, 6), + new ComparableStack(ModItems.circuit, 24, EnumCircuitType.BASIC), + new ComparableStack(ModItems.magnetron, 3), + new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + this.register(new GenericRecipe("ass.satelliteasteroidminer").setup(600, 100).outputItems(new ItemStack(ModItems.sat_miner, 1)) + .inputItems(new OreDictStack(BIGMT.plate(), 24), + new ComparableStack(ModItems.motor_desh, 2), + new ComparableStack(ModItems.drill_titanium, 2), + new ComparableStack(ModItems.circuit, 12, EnumCircuitType.ADVANCED), + new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), + new ComparableStack(ModItems.thruster_small, 1), + new ComparableStack(ModItems.photo_panel, 12), + new ComparableStack(ModItems.centrifuge_element, 4), + new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + this.register(new GenericRecipe("ass.satellitelunarminer").setup(600, 100).outputItems(new ItemStack(ModItems.sat_lunar_miner, 1)) + .inputItems(new ComparableStack(ModItems.ingot_meteorite, 4), + new ComparableStack(ModItems.plate_desh, 4), + new ComparableStack(ModItems.motor, 2), + new ComparableStack(ModItems.drill_titanium, 2), + new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), + new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), + new ComparableStack(ModItems.thruster_small, 1), + new ComparableStack(ModItems.photo_panel, 12), + new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + this.register(new GenericRecipe("ass.gerald").setup(6_000, 100).outputItems(new ItemStack(ModItems.sat_gerald, 1)) + .inputItems(new OreDictStack(SBD.plateCast(), 64), + new OreDictStack(SBD.plateCast(), 64), + new OreDictStack(BSCCO.wireDense(), 64), + new OreDictStack(BSCCO.wireDense(), 64), + new ComparableStack(ModBlocks.det_nuke, 64), + new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), + new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), + new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), + new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), + new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM), + new ComparableStack(ModItems.coin_ufo, 1)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "gerald")); + } public static HashMap getRecipes() { diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index f2c8dfd42..eff9d27a8 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -31,11 +31,22 @@ public class GenericRecipe { protected ItemStack icon; public boolean writeIcon = false; public boolean customLocalization = false; + protected String[] blueprintPools = null; public GenericRecipe(String name) { this.name = name; } + public boolean isPooled() { + return blueprintPools != null; + } + + public boolean isPartOfPool(String lookingFor) { + if(!isPooled()) return false; + for(String pool : blueprintPools) if (pool.equals(lookingFor)) return true; + return false; + } + public GenericRecipe setDuration(int duration) { this.duration = duration; return this; } public GenericRecipe setPower(long power) { this.power = power; return this; } public GenericRecipe setup(int duration, long power) { return this.setDuration(duration).setPower(power); } @@ -45,6 +56,7 @@ public class GenericRecipe { public GenericRecipe setIcon(Item item) { return this.setIcon(new ItemStack(item)); } public GenericRecipe setIcon(Block block) { return this.setIcon(new ItemStack(block)); } public GenericRecipe setNamed() { this.customLocalization = true; return this; } + public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } public GenericRecipe inputItems(AStack... input) { this.inputItem = input; return this; } public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 4738b449a..1cb5cadb2 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -32,8 +32,20 @@ public abstract class GenericRecipes extends Serializab public static final Random RNG = new Random(); + /** Alternate recipes, i.e. obtainable otherwise */ + public static final String POOL_PREFIX_ALT = "alt."; + /** Discoverable recipes, i.e. not obtainable otherwise */ + public static final String POOL_PREFIX_DISCOVER = "discover."; + /** Secret recipes, self-explantory. Why even have this comment? */ + public static final String POOL_PREFIX_SECRET = "secret."; + public List recipeOrderedList = new ArrayList(); public HashMap recipeNameMap = new HashMap(); + + /** Blueprint pool name to list of recipe names that are part of this pool */ + public static HashMap> blueprintPools = new HashMap(); + /** Name to recipe map for all recipes that are part of pools for lookup */ + public static HashMap pooledBlueprints = new HashMap(); public abstract int inputItemLimit(); public abstract int inputFluidLimit(); @@ -41,6 +53,21 @@ public abstract class GenericRecipes extends Serializab public abstract int outputFluidLimit(); public boolean hasDuration() { return true; } public boolean hasPower() { return true; } + + public static void addToPool(String pool, GenericRecipe recipe) { + List list = blueprintPools.get(pool); + if(list == null) { + list = new ArrayList(); + blueprintPools.put(pool, list); + } + list.add(recipe.name); + pooledBlueprints.put(recipe.name, recipe); + } + + public static void clearPools() { + blueprintPools.clear(); + pooledBlueprints.clear(); + } @Override public Object getRecipeObject() { @@ -75,6 +102,7 @@ public abstract class GenericRecipes extends Serializab if(obj.has("icon")) recipe.setIcon(this.readItemStack(obj.get("icon").getAsJsonArray())); if(obj.has("named") && obj.get("named").getAsBoolean()) recipe.setNamed(); + if(obj.has("blueprintpool")) recipe.setPools(obj.get("blueprintpool").getAsString().split(":")); readExtraData(element, recipe); @@ -123,6 +151,7 @@ public abstract class GenericRecipes extends Serializab } if(recipe.customLocalization) writer.name("named").value(true); + if(recipe.blueprintPools != null && recipe.blueprintPools.length > 0) writer.name("blueprintpool").value(String.join(":", recipe.blueprintPools)); writeExtraData(recipe, writer); } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index f633298f1..8fa127907 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -106,6 +106,8 @@ public abstract class SerializableRecipe { MainRegistry.logger.info("Starting recipe init!"); + GenericRecipes.clearPools(); + for(SerializableRecipe recipe : recipeHandlers) { recipe.deleteRecipes(); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 251e2d396..f6afda0e0 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -553,7 +553,7 @@ public class ModItems { public static Item coil_copper; public static Item coil_copper_torus; public static Item coil_tungsten; - public static Item tank_steel; + @Deprecated public static Item tank_steel; public static Item motor; public static Item motor_desh; public static Item motor_bismuth; @@ -566,8 +566,6 @@ public class ModItems { public static Item coil_magnetized_tungsten; public static Item coil_gold; public static Item coil_gold_torus; - public static Item component_limiter; - public static Item component_emitter; public static Item chlorine_pinwheel; public static Item deuterium_filter; @@ -1183,6 +1181,7 @@ public class ModItems { public static Item radar_linker; public static Item settings_tool; + public static Item blueprints; public static Item template_folder; public static Item journal_pip; public static Item journal_bj; @@ -2716,8 +2715,6 @@ public class ModItems { coil_magnetized_tungsten = new Item().setUnlocalizedName("coil_magnetized_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_magnetized_tungsten"); coil_gold = new Item().setUnlocalizedName("coil_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold"); coil_gold_torus = new Item().setUnlocalizedName("coil_gold_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold_torus"); - component_limiter = new Item().setUnlocalizedName("component_limiter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_limiter"); - component_emitter = new Item().setUnlocalizedName("component_emitter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_emitter"); chlorine_pinwheel = new ItemInfiniteFluid(Fluids.CHLORINE, 1, 2).setUnlocalizedName("chlorine_pinwheel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chlorine_pinwheel"); FluidTank.noDualUnload.add(chlorine_pinwheel); ring_starmetal = new Item().setUnlocalizedName("ring_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ring_starmetal"); @@ -4103,6 +4100,7 @@ public class ModItems { mech_key = new ItemCustomLore().setUnlocalizedName("mech_key").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":mech_key"); + blueprints = new ItemBlueprints().setUnlocalizedName("blueprints").setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":blueprints"); template_folder = new ItemTemplateFolder().setUnlocalizedName("template_folder").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":template_folder"); journal_pip = new ItemTemplateFolder().setUnlocalizedName("journal_pip").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_pip"); journal_bj = new ItemTemplateFolder().setUnlocalizedName("journal_bj").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_bj"); @@ -5521,10 +5519,6 @@ public class ModItems { //GameRegistry.registerItem(telepad, telepad.getUnlocalizedName()); GameRegistry.registerItem(entanglement_kit, entanglement_kit.getUnlocalizedName()); - //AMS Parts - GameRegistry.registerItem(component_limiter, component_limiter.getUnlocalizedName()); - GameRegistry.registerItem(component_emitter, component_emitter.getUnlocalizedName()); - //Bomb Parts GameRegistry.registerItem(fins_flat, fins_flat.getUnlocalizedName()); GameRegistry.registerItem(fins_small_steel, fins_small_steel.getUnlocalizedName()); @@ -5748,6 +5742,7 @@ public class ModItems { GameRegistry.registerItem(fusion_core_infinite, fusion_core_infinite.getUnlocalizedName()); //Folders + GameRegistry.registerItem(blueprints, blueprints.getUnlocalizedName()); GameRegistry.registerItem(template_folder, template_folder.getUnlocalizedName()); GameRegistry.registerItem(journal_pip, journal_pip.getUnlocalizedName()); GameRegistry.registerItem(journal_bj, journal_bj.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemBlueprints.java b/src/main/java/com/hbm/items/machine/ItemBlueprints.java new file mode 100644 index 000000000..84976e8c5 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemBlueprints.java @@ -0,0 +1,132 @@ +package com.hbm.items.machine; + +import java.util.List; +import java.util.Map.Entry; + +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.items.ModItems; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class ItemBlueprints extends Item { + + @SideOnly(Side.CLIENT) protected IIcon iconDiscover; + @SideOnly(Side.CLIENT) protected IIcon iconSecret; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister reg) { + super.registerIcons(reg); + this.iconDiscover = reg.registerIcon(this.getIconString() + "_discover"); + this.iconSecret = reg.registerIcon(this.getIconString() + "_secret"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconIndex(ItemStack stack) { + return this.getIcon(stack, 0); + } + + @Override + public IIcon getIcon(ItemStack stack, int pass) { + + if(stack.hasTagCompound()) { + String poolName = stack.stackTagCompound.getString("pool"); + if(poolName == null) return this.itemIcon; + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_DISCOVER)) return this.iconDiscover; + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) return this.iconSecret; + } + + return this.itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tab, List list) { + for(Entry> pool : GenericRecipes.blueprintPools.entrySet()) { + list.add(make(pool.getKey())); + } + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(world.isRemote) return stack; + if(!player.inventory.hasItem(Items.paper)) return stack; + + player.inventory.consumeInventoryItem(Items.paper); + player.swingItem(); + + ItemStack copy = stack.copy(); + copy.stackSize = 1; + + if(!player.capabilities.isCreativeMode) { + if(stack.stackSize < stack.getMaxStackSize()) { + stack.stackSize++; + return stack; + } + + if(!player.inventory.addItemStackToInventory(copy)) { + copy = stack.copy(); + copy.stackSize = 1; + player.dropPlayerItemWithRandomChoice(copy, false); + } + + player.inventoryContainer.detectAndSendChanges(); + } else { + player.dropPlayerItemWithRandomChoice(copy, false); + } + + return stack; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.RED + "Right-click to copy (requires paper)"); + + if(!stack.hasTagCompound()) { + return; + } + + String poolName = stack.stackTagCompound.getString("pool"); + List pool = GenericRecipes.blueprintPools.get(poolName); + + if(pool == null || pool.isEmpty()) { + return; + } + + for(String name : pool) { + GenericRecipe recipe = GenericRecipes.pooledBlueprints.get(name); + if(recipe != null) { + list.add(recipe.getLocalizedName()); + } + } + } + + public static String grabPool(ItemStack stack) { + if(stack == null) return null; + if(stack.getItem() != ModItems.blueprints) return null; + if(!stack.hasTagCompound()) return null; + if(!stack.stackTagCompound.hasKey("pool")) return null; + return stack.stackTagCompound.getString("pool"); + } + + public ItemStack make(String pool) { + ItemStack stack = new ItemStack(ModItems.blueprints); + stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setString("pool", pool); + return stack; + } +} diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 5b9d63062..756760d15 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1714,6 +1714,8 @@ public class MainRegistry { ignoreMappings.add("hbm:item.chopper_tail"); ignoreMappings.add("hbm:item.chopper_wing"); ignoreMappings.add("hbm:item.chopper_blades"); + ignoreMappings.add("hbm:item.component_emitter"); + ignoreMappings.add("hbm:item.component_limiter"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineBase.java b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java index 7787b4fbd..9815c0803 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineBase.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java @@ -3,6 +3,7 @@ package com.hbm.module.machine; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; +import com.hbm.items.machine.ItemBlueprints; import api.hbm.energymk2.IEnergyHandlerMK2; import cpw.mods.fml.common.network.ByteBufUtils; @@ -130,8 +131,16 @@ public abstract class ModuleMachineBase { public abstract GenericRecipe getRecipe(); - public void update(double speed, double power, boolean extraCondition) { + public void update(double speed, double power, boolean extraCondition, ItemStack blueprint) { GenericRecipe recipe = getRecipe(); + + if(recipe != null && recipe.isPooled() && !recipe.isPartOfPool(ItemBlueprints.grabPool(blueprint))) { + this.didProcess = false; + this.progress = 0F; + this.recipe = "null"; + return; + } + this.setupTanks(recipe); this.didProcess = false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java index 508259c48..2ad98b8c0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java @@ -104,7 +104,7 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; - this.assemblerModule.update(speed, pow, true); + this.assemblerModule.update(speed, pow, true, slots[1]); this.didProcess = this.assemblerModule.didProcess; if(this.assemblerModule.markDirty) this.markDirty(); @@ -266,6 +266,7 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if(slot == 0) return true; // battery + if(slot == 1 && stack.getItem() == ModItems.blueprints) return true; if(slot >= 2 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades if(this.assemblerModule.isItemValid(slot, stack)) return true; // recipe input crap return false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index 62b9f0a68..dfcd1c50d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -10,6 +10,7 @@ import com.hbm.inventory.container.ContainerMachineChemicalFactory; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalFactory; +import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; @@ -101,6 +102,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if(slot == 0) return true; // battery + for(int i = 0; i < 4; i++) if(slot == 4 + i * 7 && stack.getItem() == ModItems.blueprints) return true; if(slot >= 1 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades for(int i = 0; i < 4; i++) if(this.chemplantModule[i].isItemValid(slot, stack)) return true; // recipe input crap return false; @@ -163,7 +165,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl boolean markDirty = false; for(int i = 0; i < 4; i++) { - this.chemplantModule[i].update(speed * 2D, pow * 2D, canCool()); + this.chemplantModule[i].update(speed * 2D, pow * 2D, canCool(), slots[4 + i * 7]); this.didProcess[i] = this.chemplantModule[i].didProcess; markDirty |= this.chemplantModule[i].markDirty; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 47e0a7d62..6a21f07de 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -110,7 +110,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; - this.chemplantModule.update(speed, pow, true); + this.chemplantModule.update(speed, pow, true, slots[1]); this.didProcess = this.chemplantModule.didProcess; if(this.chemplantModule.markDirty) this.markDirty(); @@ -232,6 +232,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if(slot == 0) return true; // battery + if(slot == 1 && stack.getItem() == ModItems.blueprints) return true; if(slot >= 2 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades if(slot >= 10 && slot <= 12) return true; // input fluid if(slot >= 16 && slot <= 18) return true; // output fluid diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 50aa4a009..7def2090a 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1416,6 +1416,7 @@ item.blades_schrabidium.name=Schrabidiumsägeblatt item.blades_steel.name=Stahlsägeblatt item.blades_titanium.name=Titansägeblatt item.blowtorch.name=Lötlampe +item.blueprints.name=Blaupausen item.board_copper.name=Kupfertafel item.boat_rubber.name=Schlauchboot item.bobmazon.name=Bobmazon diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index cb32c226e..0d27f7c80 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2160,6 +2160,7 @@ item.blades_desh.name=Desh Shredder Blades item.blades_steel.name=Steel Shredder Blades item.blades_titanium.name=Titanium Shredder Blades item.blowtorch.name=Blowtorch +item.blueprints.name=Blueprints item.board_copper.name=Copper Panel item.boat_rubber.name=Rubber Boat item.bobmazon.name=Bobmazon diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png index dc9f7034bfa3723926a9e3a087278070caec4777..3101c24f903633853b12ac0e0fc9f60d57105786 100644 GIT binary patch literal 3490 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 literal 3445 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 LjP>(Q6Yu{E9d9*S diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemical_factory.png index 7e6aa8347e4fff3bda07f1e73bea1f64835e6b4c..ae4a7ef6dfebea7a10da1bbe415b94fcc2daca3b 100644 GIT binary patch literal 3644 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 E0rwknW&i*H literal 3531 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 diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png index d58713d9c3f848312cd58d877fd04d93f618154d..3ce1bc32c7c7bc336caa829c6559d5caf3a9c325 100644 GIT binary patch literal 3594 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 AKmY&$ literal 3535 zcma)8c|6ox8~^=gX@)n$6mh4qMcFE3Ez1nqNwTM6sH{n(!N|}iA$8jX6!xQqE z*NFnc#)&W!jx4)I+E}8ozcPG$jM}!s1vlCW&jybdSFBXdRreonDf+UZkXLkN{fi@u(HTSf@DTS_fRyEJ#pzqkkUcekIBivBedf; zBnjyOErLB=-BZK6x+|#jC~oNTe0Ibp_EKYsB;-;c)4I=Yk>3VhEf6SQP;JpMzX z8#S4BSb0T%5BRc*I`1ckTFSgT7%@Amb?g-Ca@w);eu9$v&sx2o`OA{}C(9>CldX1? zmX&!qIXQ(%=)mT=)n5fyxGjGPa11P4`+FNS`xz~X10QPz^w9mKpZxWjT z7p-KgTd7O0#lX646m$@I(w|Lxd>Kc?Zvyt6qfmU`4FxZs^EOafP>ecjBxqogb!c)A ziIo-_R~xAYK~@JduUhjZ!Rn+b-VXOpYT_}8=``_)bHiXf&?lsaP^b{3$3kX7H$_d6 z(z#%rG)Oe;DgdoO-tKdsIWW|8hV^`BQ~Bn{GSK}g<%0AvF3=2FDjopbUcQW3Msm3! z-=?PS+Usm-y|Q~&S^}sgGqVTNmjZ`IGM2|g z$zeY%^3(22J7-f%uo)~aFzh(zRVso?hShc8D*G^YbF;pq4>H@8OXk(DV~MGMW@-@_ z=f%o8Z@TE@<<45}(swunk9p?|Gdt&b$WKnBgql~MqxcXAyk%Ofol_WYvc4!M47t&m zl|weM)nVlE4&H~J@|#L;)qRc3)x#TY#`li;JMxl3kPn6H0I6vIkhaR5maC? zh5}N=eA%16;ldoBBh~^^{2Ecjc*HXmWK4hQ29=1VhmPTlj7KyCdAoka#cib2N3BOX z4ESTc5)OE6Dk0mhBBhuJNLf!I4LoDdT9l9tTYBSUqU$ppMx64=WaDLmFQA$WA}kyb z_9N_~1OycGz$5TnnfjXI_Tsc+&;}9zM+6`eIKVa%kiyLUhcFj_JRXd3sc!4D6M=+k z16&^RG{5{mypFC)A+sul!$%a4vFR$~{GU?p;YlectnthFKE+=|>eJ`#>|2edeLY$V zqY-uQXDFadfE*|2r@?>Q{u8woQd{N3HS1l~i9u*f@`Rs%D9mif^qP-inSG0@1I?>Hx3)<|bqQ-AKlD^@K4$LdhnjdmhB@Os z8!%mWJ3(D{en5MRJ)&^W%c7v~4r@;aMY-sN$Y=D$uLH0eVu@HD3(3Lb#&k1_CEIwx zXGl@dE3wmKT_X6dLiC*^o>=f*hY~@%=Di}EpE4QDIb-EjdD(z+$z;RjckezFl4HAu zCD$$|(leJZ>x|7s@|X+0sEs8G*o`>RCL5nNN7uUhRSSNCHVu52e0B8S4YlcWzcF$( zpYn=lhIgDz-P2rw!>Mi!%_Z+U`832fW>Trz_|8yW>t`DB+dy?A|7;mYt3US10>K`8 zl6OXk>(~R2xTg#0L`o2Kaaan+= zx(VnN;{(pbBcdGrUwkYZ+90hSHwUAiqm99dTr*%0fqJ=N6M%zgFIa45iYhB-MjGUY zWMrR`dvEH7%?MheX4LD}AtThC#Ygm?=8uq57Q7$tJ54!Hzh3Yw1U++TMC(`p>?WR1 z3NQz>1o)(cpy3*4>je+YXK1gn=q~(N5Dj2e)pJ)w1CZS_x+z~Z!OQ72qNW>Dmquvf zz4bR1JE7GtnqXUfjpXSrPGm!W;LvnDqSF9|X4bg%JQRd?%($4qMtc>B#`wigJ8n0= zJ*@wEKf(BXQW?5;B1Lj)9H(c+6gInbdq%&9Kc{ z@EcB*nv7hJjohnj-U z4`!tAsU5?pOF;tx2ZthnikYiPRy)26R&-x`)6&A$FSCpoetTlilgdgx$lMod3#{G_ zJWK)JFOQwF0{SPl8zsNY%(N{mQG<090wcm0JDYIa@Lk=aHb=4EUDMv(?OO2qbk&@9 zc}HO?;T2iO-!F0Jwu*0mvhC)*t<$HOH6&8x@|PfYpRTjsl1i|lTNc3m{nLHcPsf0- zbT%`VnDSs#)Zq`TRJALm9)`+qrkkofWmySnRhw0s_V82sLY1R5pJR!w!TXNkM1-r; zw}Wql7o4$XHx|)SO?zn8Ii97I3FWG2wJQ?c|DqqHB7j{`uOiyx>JBw4ijjIsF!S4z zAmE*_h$aPoAkZ*pHXjTzyoZldUx?1xAY`<5*JL7%K)@FetRqCOGge6 z4ch>gSP^XSHV!;-*mG{YXPlyDM6gg(S|k&LDEviayelav5BrXl}^|4(({*?b10lx^f%DnIK>$fMFZ%Se4T9GKD0WH{y7BJ2?+}F@Vq-_UAM)u0Csi)UiEmV_FBQGQCqK89mV$e;va$x6d915Kv40JM+3Q{GbeH+z}PjQBpKXcrT=>sv}x4^Q?`05Xfn!RJtlx zmzPVGN2xKe#BnH)X{XUb7hxn^Jur}V3MrIuiEv>B&f@zhvCKAH%{g;pYoj7V(#3xR DKjunf diff --git a/src/main/resources/assets/hbm/textures/items/blueprints.png b/src/main/resources/assets/hbm/textures/items/blueprints.png new file mode 100644 index 0000000000000000000000000000000000000000..225bec283a40a368b2fe88ed70f545c848ca102b GIT binary patch literal 379 zcmV->0fhdEP)3b->*B=6m`_w6kFQPHsh=bUSYqiAowd(3!w`|SM- zA$!EZVBnNe0N89qnrwU8z~u4TOVZh;JLeqzG1gkFwW#+8w4tpuX%cyBg;C{1{dy08 zQVN@m+7xNxC+SS4AI#=Uuc-~tA2(}klBCJD4=|fAn>+dZDxEPalH`P&yEktLfT^FP z$cF%wdePj0n2lLcg_# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/blueprints_discover.png b/src/main/resources/assets/hbm/textures/items/blueprints_discover.png new file mode 100644 index 0000000000000000000000000000000000000000..66cdcea650c4eb892facdfd28145531b98aae877 GIT binary patch literal 397 zcmV;80doF{P)gJZI z8f4uWChFVZKrLhn(aO@KsuScc{lnOj?Pq#-@4fH+-u2**(tb(^!&NEQlgWK6|6718 z91O12*>3mQg0ujm(WumQ9e^P4NYjmqnWo)>s71A-<2(YO>pDT;DL|TTS`e*iRd#gU zw_iazLc9}2+gi{xZG?CMpePEa(>ZCnQE`AM+7gDVQuDm0GD!|tRv*`OYDqwA9N!lJ z?Drq1J6J3pO3Uiggj6rC3K05FU$0G(=ak{s}Tp~f&x8{ZeqW_KKqM~b4rFuE8< zmn_T4vi$THs$@0!asP r9AAEk64G=aJ2rLpP(m&h{+qr4spP$PtFypF00000NkvXXu0mjf)by^B literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/blueprints_secret.png b/src/main/resources/assets/hbm/textures/items/blueprints_secret.png new file mode 100644 index 0000000000000000000000000000000000000000..9abb970571fc173b44a8a56657a9e92cd66fc43d GIT binary patch literal 313 zcmV-90mlA`P)2t*>Om%54B| zz!Y~R7%PbbBm@XU7WMcf%fOq_y-;J%>Yo7&0GK&m%=6r=X#gT(r4#@_tre$rjk%x0 zp@C#TbR5SK08mOntu+cx>)JrNt*UqYKA&HLbVOvT3TBQ;k8E-|9%CEnJpR;)$N(5K z+wU+KGe?SuiHI%BV$5v+#*tw_M93!j;Ic{I_W%GQY7Mf9r+1pB$wb76DC&^zNCVlX z1AOeDFaMmXYQ7DBZdLPGRqtNH8 Date: Mon, 14 Jul 2025 20:31:54 -0500 Subject: [PATCH 288/491] add dyable cable color functionality to paintable network cable --- .../BlockOpenComputersCablePaintable.java | 116 +++++++++++++++++- .../java/com/hbm/handler/CompatHandler.java | 84 +++++++++---- .../hbm/textures/blocks/oc_cable_base.png | Bin 624 -> 612 bytes .../hbm/textures/blocks/oc_cable_color.png | Bin 0 -> 111 bytes .../hbm/textures/blocks/oc_cable_overlay.png | Bin 340 -> 139 bytes 5 files changed, 173 insertions(+), 27 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/oc_cable_color.png diff --git a/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java b/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java index b755006d5..915fb58f0 100644 --- a/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java +++ b/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java @@ -2,6 +2,8 @@ package com.hbm.blocks.network; import api.hbm.block.IToolable; import com.hbm.blocks.IBlockMultiPass; +import com.hbm.blocks.ILookOverlay; +import com.hbm.handler.CompatHandler; import com.hbm.lib.RefStrings; import com.hbm.render.block.RenderBlockMultipass; import com.hbm.tileentity.TileEntityLoadedBase; @@ -13,7 +15,9 @@ import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemDye; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; @@ -29,10 +33,16 @@ import li.cil.oc.api.Network; import li.cil.oc.api.network.Visibility; import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.Loader; +import li.cil.oc.api.network.SidedEnvironment; +import net.minecraftforge.common.util.ForgeDirection; +import li.cil.oc.api.internal.Colored; +import com.hbm.handler.CompatHandler.OCColors; +import net.minecraftforge.oredict.OreDictionary; public class BlockOpenComputersCablePaintable extends BlockContainer implements IToolable, IBlockMultiPass { @SideOnly(Side.CLIENT) protected IIcon overlay; + @SideOnly(Side.CLIENT) protected IIcon overlayColor; public BlockOpenComputersCablePaintable() { super(Material.iron); @@ -48,6 +58,7 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements public void registerBlockIcons(IIconRegister reg) { this.blockIcon = reg.registerIcon(RefStrings.MODID + ":oc_cable_base"); this.overlay = reg.registerIcon(RefStrings.MODID + ":oc_cable_overlay"); + this.overlayColor = reg.registerIcon(RefStrings.MODID + ":oc_cable_color"); } @Override @@ -61,13 +72,29 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements if(pipe.block != null) { if(RenderBlockMultipass.currentPass == 1) { return this.overlay; + } else if(RenderBlockMultipass.currentPass == 2) { + return this.overlayColor; } else { return pipe.block.getIcon(side, pipe.meta); } } } - return RenderBlockMultipass.currentPass == 1 ? this.overlay : this.blockIcon; + return RenderBlockMultipass.currentPass == 1 ? this.overlay : RenderBlockMultipass.currentPass == 2 ? this.overlayColor : this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(IBlockAccess world, int x, int y, int z) { + if (RenderBlockMultipass.currentPass == 2) { + TileEntityOpenComputersCablePaintable tile = (TileEntityOpenComputersCablePaintable) world.getTileEntity(x, y, z); + if (tile == null) + return 0xffffff; + + return tile.getColor(); + } + + return 0xffffff; } @Override @@ -75,7 +102,10 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements ItemStack stack = player.getHeldItem(); - if(stack != null && stack.getItem() instanceof ItemBlock) { + if (stack == null) + return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); + + if (stack.getItem() instanceof ItemBlock) { ItemBlock ib = (ItemBlock) stack.getItem(); Block block = ib.field_150939_a; @@ -95,6 +125,21 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements } } } + } else { + boolean isDye = false; + int[] dicts = OreDictionary.getOreIDs(stack); + for (int dict : dicts) { + String dictName = OreDictionary.getOreName(dict); + if (dictName.equals("dye")) + isDye = true; + } + + if (isDye) { + TileEntityOpenComputersCablePaintable tile = (TileEntityOpenComputersCablePaintable) world.getTileEntity(x, y, z); + tile.setColor(OCColors.fromDye(stack).getColor()); + world.markBlockForUpdate(x, y, z); + tile.markDirty(); + } } return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); @@ -123,7 +168,7 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements @Override public int getPasses() { - return 2; + return 3; } @Override @@ -131,9 +176,12 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements return IBlockMultiPass.getRenderType(); } - // WHY the fuck is this not compiling - @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.Environment", modid = "OpenComputers")}) - public static class TileEntityOpenComputersCablePaintable extends TileEntityLoadedBase implements Environment { + @Optional.InterfaceList({ + @Optional.Interface(iface = "li.cil.oc.api.network.Environment", modid = "OpenComputers"), + @Optional.Interface(iface = "li.cil.oc.api.network.SidedEnvironment", modid = "OpenComputers"), + @Optional.Interface(iface = "li.cil.oc.api.network.Colored", modid = "OpenComputers") + }) + public static class TileEntityOpenComputersCablePaintable extends TileEntityLoadedBase implements Environment, SidedEnvironment, Colored { protected Node node; protected boolean addedToNetwork = false; @@ -142,6 +190,7 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements private int meta; private Block lastBlock; private int lastMeta; + private OCColors color = OCColors.LIGHTGRAY; public TileEntityOpenComputersCablePaintable() { node = Network.newNode(this, Visibility.None).create(); @@ -181,6 +230,8 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements this.block = id == 0 ? null : Block.getBlockById(id); this.meta = nbt.getInteger("meta"); + this.color = OCColors.fromInt(nbt.getInteger("dyeColor")); + if (node != null && node.host() == this) { node.load(nbt.getCompoundTag("oc:node")); } @@ -192,6 +243,8 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements if(block != null) nbt.setInteger("block", Block.getIdFromBlock(block)); nbt.setInteger("meta", meta); + nbt.setInteger("dyeColor", color.getColor()); + if (node != null && node.host() == this) { final NBTTagCompound nodeNbt = new NBTTagCompound(); node.save(nodeNbt); @@ -212,6 +265,7 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements if(nbt.hasKey("paintblock")) { this.block = Block.getBlockById(nbt.getInteger("paintblock")); this.meta = nbt.getInteger("paintmeta"); + this.color = OCColors.fromInt(nbt.getInteger("dyeColor")); } } @@ -221,6 +275,30 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements return node; } + public Node sidedNode(ForgeDirection side) { + if (side == ForgeDirection.UNKNOWN) + return null; + + int neighborX = super.xCoord + side.offsetX; + int neighborY = super.yCoord + side.offsetY; + int neighborZ = super.zCoord + side.offsetZ; + TileEntity neighbor = worldObj.getTileEntity(neighborX, neighborY, neighborZ); + + // If a cable does not support colors but is a valid cable block, allow it to connect regardless of color. + if (!(neighbor instanceof Colored)) { + if (neighbor instanceof Environment) + return node; + else + return null; + } + + Colored cable = (Colored) neighbor; + if (cable.getColor() == color.getColor()) + return node; + else + return null; + } + @Override public void onConnect(Node node) {} @@ -240,5 +318,31 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements super.invalidate(); if (node != null) node.remove(); } + + public boolean canConnect(net.minecraftforge.common.util.ForgeDirection side) { + if (side == ForgeDirection.UNKNOWN) + return false; + + int neighborX = super.xCoord + side.offsetX; + int neighborY = super.yCoord + side.offsetY; + int neighborZ = super.zCoord + side.offsetZ; + TileEntity neighbor = worldObj.getTileEntity(neighborX, neighborY, neighborZ); + + // If a cable does not support colors but is a valid cable block, allow it to connect regardless of color. + if (!(neighbor instanceof Colored)) { + return neighbor instanceof Environment; + } + + Colored cable = (Colored) neighbor; + return cable.getColor() == color.getColor(); + } + + public void setColor(int newColor) { + color = OCColors.fromInt(newColor); + } + + public int getColor() { + return color.getColor(); + } } } diff --git a/src/main/java/com/hbm/handler/CompatHandler.java b/src/main/java/com/hbm/handler/CompatHandler.java index 46ce74fc0..ac4bbe114 100644 --- a/src/main/java/com/hbm/handler/CompatHandler.java +++ b/src/main/java/com/hbm/handler/CompatHandler.java @@ -1,11 +1,13 @@ package com.hbm.handler; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.network.BlockOpenComputersCablePaintable; import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; +import com.hbm.util.ItemStackUtil; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Optional; import li.cil.oc.api.Items; @@ -15,6 +17,7 @@ import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.*; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -108,27 +111,66 @@ public class CompatHandler { } } - /** - * Simple enum for mapping OC color ordinals to a nicer format for adding new disks. - */ - public enum OCColors { - BLACK, //0x444444 - RED, //0xB3312C - GREEN, //0x339911 - BROWN, //0x51301A - BLUE, //0x6666FF - PURPLE, //0x7B2FBE - CYAN, //0x66FFFF - LIGHTGRAY, //0xABABAB - GRAY, //0x666666 - PINK, //0xD88198 - LIME, //0x66FF66 - YELLOW, //0xFFFF66 - LIGHTBLUE, //0xAAAAFF - MAGENTA, //0xC354CD - ORANGE, //0xEB8844 - WHITE //0xF0F0F0 - } + /** + * Simple enum for mapping OC color ordinals to a nicer format for adding new disks. + */ + public enum OCColors { + BLACK(0x444444, "dyeBlack"), + RED(0xB3312C, "dyeRed"), + GREEN(0x339911, "dyeGreen"), + BROWN(0x51301A, "dyeBrown"), + BLUE(0x6666FF, "dyeBlue"), + PURPLE(0x7B2FBE, "dyePurple"), + CYAN(0x66FFFF, "dyeCyan"), + LIGHTGRAY(0xABABAB, "dyeLightGray"), + GRAY(0x666666, "dyeGray"), + PINK(0xD88198, "dyePink"), + LIME(0x66FF66, "dyeLime"), + YELLOW(0xFFFF66, "dyeYellow"), + LIGHTBLUE(0xAAAAFF, "dyeLightBlue"), + MAGENTA(0xC354CD, "dyeMagenta"), + ORANGE(0xEB8844, "dyeOrange"), + WHITE(0xF0F0F0, "dyeWhite"), + NONE(0x0, ""); + + private final int color; + private final String dictName; + + OCColors(int color, String dictName) { + this.color = color; + this.dictName = dictName; + } + + public int getColor() { + return color; + } + + public static OCColors fromInt(int intColor) { + for (OCColors iColor : OCColors.values()) { + if (intColor == iColor.getColor()) + return iColor; + } + return OCColors.NONE; + } + + public static OCColors fromDye(ItemStack stack) { + List oreNames = ItemStackUtil.getOreDictNames(stack); + + for(String dict : oreNames) { + if(!(dict.length() > 3) || !dict.startsWith("dye")) + continue; + + for (OCColors color : OCColors.values()) { + if(!color.dictName.equals(dict)) + continue; + + return color; + } + } + + return OCColors.NONE; + } + } // Where all disks are stored with their name and `FloppyDisk` class. public static HashMap disks = new HashMap<>(); diff --git a/src/main/resources/assets/hbm/textures/blocks/oc_cable_base.png b/src/main/resources/assets/hbm/textures/blocks/oc_cable_base.png index 243c2da7f8f52b96ec7dba690200d6902ca3ea4d..7c9e1b0dd15b54f089e760fd3361342c81d78654 100644 GIT binary patch delta 587 zcmV-R0<`_`1mpyeB!4SOL_t(IPmPn$PZL2D$G=k+DQj)Cdg0)e#GnvMsUcv=Dq1mk zl0sX-#DBp*fP+_zH{!u7fq3#FXhm!Vg9a-ej8PK~#%R)@K)Wsd-5uvmvg?-Cgh@6t zdHddHzVF8{pU=lHUhtz>D&bcu1w~PCR8`@2xnOXPcBd20wtqHMDiyS}DB^RVR;%ID zm#;`|Z-Xs9Uf?G^9&iA^cXsgo$4_zMIORDZVR|-;Kf8NyA9JB*a8#>RobKola04^5 z55Z>d&v0)~w*+i#enc#uKv~?z#qCF06{zhhNA&-_}7;uOn0x=PAaM6DY&~vs6?~{Ps%S4FbwC2Bh=Klo zyhyyZ6f|wY0iy+&42QYjdtNHgv$;df0Tq$nhHT@VsVVO5K8KfUYe;8w2{5P7ywsdV z`*czl2t>k0uaEG_v72}_H!oi#Ihg^p(;}#OHg}o<={FPz@Lr)HvHsR_Gz08!zz(yQ Z<1fjbRIG!_>}LP~002ovPDHLkV1lxO4jupi delta 599 zcmV-d0;v7u1n>lqB!4$aL_t(IPmNPePg6k@JyTw#t(9P9L!!nNiBTbzrUt4-6pa{N zNufnBaZBRDf8ZXs#DyypB5|R(p?)A*!5|?O7cSHUjWL=u$Vb~(`rUV(JISlB+C*;h zGLw1to;l~-JHqGl(Ww)DD-OeCOb8g{!}XmYz@5W(qiz<<%$h*GJ9h6YW3HdHDV zeE9eYiM2I|nFmv}&*K3B__eWtZ{L5&9ihduSAnH<9qXH0XxigO#UPZ+WgKX2mEZ=( zC+?QMBx2ZTUApGP*Eg%}XW;v8-aT2oV_!(S(V^C)XVPk>X6;A2Gi$m zC=YrA0Yv9sVk?!Z0l0VLD_Wcy#-;*Fo*As48L$iy4u1_$Ur!J-vvV~7?DFHAU$CAl zV@bb-$%oVR0V1Ig_4l2X5}womc$%AWy1N^P4(?a8@hBRt0&r*e0>$8Jc!*B={g|Df zmo)!K_@A5H0R_M&2D`fOJodVV!Hxk&!eR1zk1GagJ+q@ZU=z7Js*Tr2N6FiM3@;WI zkW8f&fKWMwCJS>Kt<%X}U=VTXVn2-xT*2MR`|3qbLAOOc|E}(bxH=Y l#kbW&v%vZWtYB7uegh`$POLLim?QuI002ovPDHLkV1jWf8Vvvd diff --git a/src/main/resources/assets/hbm/textures/blocks/oc_cable_color.png b/src/main/resources/assets/hbm/textures/blocks/oc_cable_color.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3be6c7bb723b6a0d52cc6190ff27529f04a829 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`W}YsNAr}70DGLM)f>z8=+#&Tr zo?}BRud={`?qpu(35+kgHg-1hNS|X15b0R5TV+J!Z|a0VjCfT@vZ7+!wnWN6x=%|Mm`bv{=a#Cg9nWG^=%&j5S6G7^>bP0l+XkK De2Z3~ From 76368acbf8aa770605a2f65e3b142baa70acf217 Mon Sep 17 00:00:00 2001 From: PewPewCricket Date: Mon, 14 Jul 2025 20:52:12 -0500 Subject: [PATCH 289/491] remove unused imports in BlockOpenComputersCablePaintable.java --- .../hbm/blocks/network/BlockOpenComputersCablePaintable.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java b/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java index 915fb58f0..c18f5ce2b 100644 --- a/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java +++ b/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java @@ -2,8 +2,6 @@ package com.hbm.blocks.network; import api.hbm.block.IToolable; import com.hbm.blocks.IBlockMultiPass; -import com.hbm.blocks.ILookOverlay; -import com.hbm.handler.CompatHandler; import com.hbm.lib.RefStrings; import com.hbm.render.block.RenderBlockMultipass; import com.hbm.tileentity.TileEntityLoadedBase; @@ -15,9 +13,7 @@ import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemDye; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; @@ -32,7 +28,6 @@ import li.cil.oc.api.network.Node; import li.cil.oc.api.Network; import li.cil.oc.api.network.Visibility; import cpw.mods.fml.common.Optional; -import cpw.mods.fml.common.Loader; import li.cil.oc.api.network.SidedEnvironment; import net.minecraftforge.common.util.ForgeDirection; import li.cil.oc.api.internal.Colored; From 5f8b0f6aedc1445b934a59ef5b73543f62584995 Mon Sep 17 00:00:00 2001 From: PewPewCricket Date: Tue, 15 Jul 2025 04:10:06 -0500 Subject: [PATCH 290/491] fix TileEntityOpenComputersCablePaintable not implementing ICopyable and add null check for ModBlocks.oc_cable_paintable in CraftingManager.java --- .../hbm/blocks/network/BlockOpenComputersCablePaintable.java | 3 ++- src/main/java/com/hbm/main/CraftingManager.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java b/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java index c18f5ce2b..d40d81595 100644 --- a/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java +++ b/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java @@ -2,6 +2,7 @@ package com.hbm.blocks.network; import api.hbm.block.IToolable; import com.hbm.blocks.IBlockMultiPass; +import com.hbm.interfaces.ICopiable; import com.hbm.lib.RefStrings; import com.hbm.render.block.RenderBlockMultipass; import com.hbm.tileentity.TileEntityLoadedBase; @@ -176,7 +177,7 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements @Optional.Interface(iface = "li.cil.oc.api.network.SidedEnvironment", modid = "OpenComputers"), @Optional.Interface(iface = "li.cil.oc.api.network.Colored", modid = "OpenComputers") }) - public static class TileEntityOpenComputersCablePaintable extends TileEntityLoadedBase implements Environment, SidedEnvironment, Colored { + public static class TileEntityOpenComputersCablePaintable extends TileEntityLoadedBase implements Environment, SidedEnvironment, Colored, ICopiable { protected Node node; protected boolean addedToNetwork = false; diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index d91f00033..89650f200 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -237,7 +237,8 @@ public class CraftingManager { addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_electric_furnace_off), 1), new Object[] { "BBB", "WFW", "RRR", 'B', BE.ingot(), 'R', ModItems.coil_tungsten, 'W', CU.plateCast(), 'F', Item.getItemFromBlock(Blocks.furnace) }); addRecipeAuto(new ItemStack(ModBlocks.red_wire_coated, 16), new Object[] { "WRW", "RIR", "WRW", 'W', ModItems.plate_polymer, 'I', MINGRADE.ingot(), 'R', MINGRADE.wireFine() }); addRecipeAuto(new ItemStack(ModBlocks.red_cable_paintable, 16), new Object[] { "WRW", "RIR", "WRW", 'W', STEEL.plate(), 'I', MINGRADE.ingot(), 'R', MINGRADE.wireFine() }); - addRecipeAuto(new ItemStack(ModBlocks.oc_cable_paintable, 16), new Object[] { "WRW", "RIR", "WRW", 'W', STEEL.plate(), 'I', REDSTONE.dust(), 'R', MINGRADE.wireFine() }); + if (ModBlocks.oc_cable_paintable != null) + addRecipeAuto(new ItemStack(ModBlocks.oc_cable_paintable, 16), new Object[] { "WRW", "RIR", "WRW", 'W', STEEL.plate(), 'I', REDSTONE.dust(), 'R', MINGRADE.wireFine() }); addRecipeAuto(new ItemStack(ModBlocks.cable_switch, 1), new Object[] { "S", "W", 'S', Blocks.lever, 'W', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.cable_detector, 1), new Object[] { "S", "W", 'S', REDSTONE.dust(), 'W', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.cable_diode, 1), new Object[] { " Q ", "CAC", " Q ", 'Q', SI.nugget(), 'C', ModBlocks.red_cable, 'A', AL.ingot() }); From 281e66b37e3852d3ce466ebaea0347b889af1b87 Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 15 Jul 2025 16:00:43 +0200 Subject: [PATCH 291/491] my love is a quickscope --- changelog | 1 + .../com/hbm/crafting/ConsumableRecipes.java | 2 - .../inventory/recipes/AssemblerRecipes.java | 21 -- .../recipes/AssemblyMachineRecipes.java | 181 +++++++++++++++++- src/main/java/com/hbm/items/ModItems.java | 8 +- .../java/com/hbm/items/food/ItemEnergy.java | 54 +----- .../weapon/sedna/factory/XFactoryTool.java | 2 +- src/main/java/com/hbm/main/MainRegistry.java | 2 + 8 files changed, 187 insertions(+), 84 deletions(-) diff --git a/changelog b/changelog index 6be709682..6221f663e 100644 --- a/changelog +++ b/changelog @@ -18,6 +18,7 @@ * This should fix the issue where most armors are quite weak against swords * Electric attacks (i.e. tesla cannon) are now in the "energy damage" category * This means that armors that have energy resistance actually properly work against the tesla cannon +* Heavy components are being deprecated ## Fixed * Fixed gas centrifuge sound persisting when broken or when unloaded diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 8d867f56e..6c3e6f3b3 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -89,8 +89,6 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.bottle2_empty, 6), new Object[] { " G ", "G G", "G G", 'G', KEY_ANYPANE }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.bottle2_korl, 1), new Object[] { ModItems.bottle2_empty, Items.potionitem, Items.sugar, CU.dust() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.bottle2_fritz, 1), new Object[] { ModItems.bottle2_empty, Items.potionitem, Items.sugar, W.dust() }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.bottle2_korl_special, 1), new Object[] { ModItems.bottle2_empty, Items.potionitem, Items.sugar, CU.dust(), ST.dust() }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.bottle2_fritz_special, 1), new Object[] { ModItems.bottle2_empty, Items.potionitem, Items.sugar, W.dust(), TH232.dust() }); //Syringes CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_empty, 6), new Object[] { "P", "C", "B", 'B', Item.getItemFromBlock(Blocks.iron_bars), 'C', ModItems.cell_empty, 'P', IRON.plate() }); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 13e823907..1960d4dfb 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -23,9 +23,7 @@ import com.hbm.config.GeneralConfig; import com.hbm.inventory.OreDictManager; import com.hbm.inventory.RecipesCommon.*; import com.hbm.inventory.fluid.Fluids; -import com.hbm.inventory.material.MaterialShapes; import com.hbm.inventory.material.Mats; -import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; import com.hbm.items.ItemEnums.EnumCasingType; @@ -842,19 +840,6 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) }, 400); - makeRecipe(new ComparableStack(ModBlocks.machine_chemfac, 1), new AStack[] { - !exp ? new OreDictStack(STEEL.ingot(), 48) : new OreDictStack(STEEL.heavyComp(), 2), - new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), - new OreDictStack(NB.ingot(), 4), - new OreDictStack(RUBBER.ingot(), 16), - new OreDictStack(STEEL.shell(), 12), - new ComparableStack(ModItems.tank_steel, 8), - new ComparableStack(ModItems.motor_desh, 4), - new ComparableStack(ModItems.coil_tungsten, 24), - new OreDictStack(STEEL.pipe(), 8), - new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) - }, 400); - makeRecipe(new ComparableStack(ModBlocks.machine_chemical_factory, 1), new AStack[] { new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), @@ -1310,12 +1295,6 @@ public class AssemblerRecipes extends SerializableRecipe { } } - for(NTMMaterial mat : Mats.orderedList) { - if(mat.autogen.contains(MaterialShapes.CASTPLATE) && mat.autogen.contains(MaterialShapes.HEAVY_COMPONENT)) { - makeRecipe(new ComparableStack(ModItems.heavy_component, 1, mat.id), new AStack[] { new OreDictStack(MaterialShapes.CASTPLATE.name() + mat.names[0], 256) }, 12_000); - } - } - // WarTec compatibility code try { Class wartecmodAssemblerRecipes = ClassLoader.getSystemClassLoader().loadClass("com.wartec.wartecmod.inventory.wartecmodAssemblerRecipes"); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 39f2fc198..aed9b4798 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -7,12 +7,17 @@ import java.util.List; import static com.hbm.inventory.OreDictManager.*; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockCap.EnumCapBlock; +import com.hbm.blocks.machine.BlockICFLaserComponent.EnumICFPart; +import com.hbm.config.GeneralConfig; import com.hbm.inventory.FluidStack; import com.hbm.inventory.OreDictManager; +import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.material.Mats; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ModItems; @@ -22,11 +27,14 @@ import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemFluidIcon; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.machine.ItemDrillbit.EnumDrillType; +import com.hbm.items.machine.ItemPACoil.EnumCoilType; import com.hbm.items.machine.ItemPistons.EnumPistonType; import com.hbm.items.weapon.ItemAmmoHIMARS; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; +import cpw.mods.fml.common.Loader; +import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -65,6 +73,14 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(ALLOY.plate(), 2), new OreDictStack(OreDictManager.getReflector(), 1), new OreDictStack(BIGMT.plate(), 1))); this.register(new GenericRecipe("ass.dalekanium").setup(200, 100).outputItems(new ItemStack(ModItems.plate_dalekanium, 1)) .inputItems(new ComparableStack(ModBlocks.block_meteor, 1))); + this.register(new GenericRecipe("ass.platedesh").setup(200, 100).outputItems(new ItemStack(ModItems.plate_desh, 4)) + .inputItems(new OreDictStack(DESH.ingot(), 4), new OreDictStack(ANY_PLASTIC.dust(), 2), new OreDictStack(DURA.ingot(), 1))); + this.register(new GenericRecipe("ass.platebismuth").setup(200, 100).outputItems(new ItemStack(ModItems.plate_bismuth, 1)) + .inputItems(new ComparableStack(ModItems.nugget_bismuth, 2), new OreDictStack(U238.billet(), 2), new OreDictStack(NB.dust(), 1))); + this.register(new GenericRecipe("ass.plateeuphemium").setup(600, 100).outputItems(new ItemStack(ModItems.plate_euphemium, 1)) + .inputItems(new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new ComparableStack(ModItems.ingot_osmiridium))); + this.register(new GenericRecipe("ass.platednt").setup(600, 100).outputItems(new ItemStack(ModItems.plate_dineutronium, 4)) + .inputItems(new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModItems.powder_spark_mix, 2), new OreDictStack(DESH.ingot(), 1))); // cloth this.register(new GenericRecipe("ass.hazcloth").setup(50, 100).outputItems(new ItemStack(ModItems.hazmat_cloth, 4)) @@ -124,7 +140,42 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(PB.plate(), 6), new OreDictStack(ALLOY.plate(), 6), new OreDictStack(ANY_RUBBER.ingot(), 2), new OreDictStack(DURA.bolt(), 8), new ComparableStack(ModItems.motor, 1))); this.register(new GenericRecipe("ass.firedoor").setup(300, 100).outputItems(new ItemStack(ModBlocks.fire_door, 1)) .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(ALLOY.plate(), 8), new OreDictStack(DURA.bolt(), 8), new ComparableStack(ModItems.motor, 2))); + this.register(new GenericRecipe("ass.seal").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.transition_seal, 1)) + .inputItems(new ComparableStack(ModBlocks.cmb_brick_reinforced, 16), new OreDictStack(STEEL.plate(), 64), new OreDictStack(ALLOY.plate(), 40), new OreDictStack(ANY_RUBBER.ingot(), 36), new OreDictStack(STEEL.block(), 24), new ComparableStack(ModItems.motor_desh, 16), new OreDictStack(DURA.bolt(), 16), new OreDictStack(KEY_YELLOW, 4))); + this.register(new GenericRecipe("ass.slidingdoor").setup(200, 100).outputItems(new ItemStack(ModBlocks.sliding_blast_door, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(W.ingot(), 8), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ANY_RUBBER.ingot(), 4), new OreDictStack(DURA.bolt(), 16), new ComparableStack(ModItems.motor, 2))); + this.register(new GenericRecipe("ass.vehicledoor").setup(400, 100).outputItems(new ItemStack(ModBlocks.large_vehicle_door, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 16), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack(KEY_GREEN, 4))); + this.register(new GenericRecipe("ass.waterdoor").setup(200, 100).outputItems(new ItemStack(ModBlocks.water_door, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(DURA.bolt(), 4), new OreDictStack(KEY_RED, 1))); + this.register(new GenericRecipe("ass.qedoor").setup(400, 100).outputItems(new ItemStack(ModBlocks.qe_containment, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(ALLOY.plate(), 4), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 32), new OreDictStack(KEY_BLACK, 4))); + this.register(new GenericRecipe("ass.queslidingdoor").setup(200, 100).outputItems(new ItemStack(ModBlocks.qe_sliding_door, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack(KEY_WHITE, 4), new ComparableStack(Blocks.glass, 4))); + this.register(new GenericRecipe("ass.roundairlock").setup(400, 100).outputItems(new ItemStack(ModBlocks.round_airlock_door, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ALLOY.plate(), 8), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack(KEY_GREEN, 4))); + this.register(new GenericRecipe("ass.secureaccess").setup(400, 100).outputItems(new ItemStack(ModBlocks.secure_access_door, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ALLOY.plate(), 16), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 32), new OreDictStack(KEY_RED, 8))); + this.register(new GenericRecipe("ass.slidingseal").setup(200, 100).outputItems(new ItemStack(ModBlocks.sliding_seal_door, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack(KEY_WHITE, 2))); + this.register(new GenericRecipe("ass.silohatch").setup(200, 100).outputItems(new ItemStack(ModBlocks.silo_hatch, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 4))); + this.register(new GenericRecipe("ass.silohatchlarge").setup(300, 100).outputItems(new ItemStack(ModBlocks.silo_hatch_large, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 6), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 8))); + // decoration + this.register(new GenericRecipe("ass.capnuka").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.NUKA)) + .inputItems(new ComparableStack(ModItems.cap_nuka, 128))); + this.register(new GenericRecipe("ass.capquantum").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.QUANTUM)) + .inputItems(new ComparableStack(ModItems.cap_quantum, 128))); + this.register(new GenericRecipe("ass.capsparkle").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.SPARKLE)) + .inputItems(new ComparableStack(ModItems.cap_sparkle, 128))); + this.register(new GenericRecipe("ass.caprad").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.RAD)) + .inputItems(new ComparableStack(ModItems.cap_rad, 128))); + this.register(new GenericRecipe("ass.capfritz").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.FRITZ)) + .inputItems(new ComparableStack(ModItems.cap_fritz, 128))); + this.register(new GenericRecipe("ass.capkorl").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.KORL)) + .inputItems(new ComparableStack(ModItems.cap_korl, 128))); /* this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) .inputItems()); @@ -143,20 +194,48 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(ANY_CONCRETE.any(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16),new OreDictStack(STEEL.plateCast(), 8), new ComparableStack(ModBlocks.machine_transformer, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG.ordinal()))); this.register(new GenericRecipe("ass.acidizer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_crystallizer, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(TI.shell(), 3), new OreDictStack(DESH.ingot(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.electrolyzer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_electrolyser, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate528(), 16), new OreDictStack(TI.shell(), 3), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16), new ComparableStack(ModItems.coil_copper, 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.rtg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_rtg_grey, 1)) .inputItems(new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(STEEL.plate528(), 4), new OreDictStack(MINGRADE.wireFine(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4))); this.register(new GenericRecipe("ass.derrick").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_well, 1)) .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(CU.plateCast(), 2), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.drill_titanium, 1))); this.register(new GenericRecipe("ass.pumpjack").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_pumpjack, 1)) .inputItems(new OreDictStack(DURA.plate(), 8), new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.motor_desh), new ComparableStack(ModItems.drill_titanium, 1))); + this.register(new GenericRecipe("ass.fracker").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_fracking_tower, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 24), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModBlocks.concrete_smooth, 64), new ComparableStack(ModItems.drill_titanium), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.plate_desh, 24), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR))); this.register(new GenericRecipe("ass.flarestack").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_flare, 1)) .inputItems(new OreDictStack(STEEL.plate(), 12), new OreDictStack(CU.plate528(), 4), new OreDictStack(STEEL.shell(), 4), new ComparableStack(ModItems.thermo_element, 3))); this.register(new GenericRecipe("ass.refinery").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_refinery, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 3), new OreDictStack(CU.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.crackingtower").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_catalytic_cracker, 1)) + .inputItems(new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(STEEL.shell(), 6), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(NB.ingot(), 2), new ComparableStack(ModItems.catalyst_clay, 12))); + this.register(new GenericRecipe("ass.radiolysis").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_radiolysis, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(PB.plate528(), 12), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.thermo_element, 8))); this.register(new GenericRecipe("ass.coker").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_coker, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 8), new OreDictStack(RUBBER.ingot(), 4), new OreDictStack(NB.ingot(), 4))); + this.register(new GenericRecipe("ass.vaccumrefinery").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_vacuum_distill, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(CU.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.motor_desh, 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CHIP_BISMOID))); + this.register(new GenericRecipe("ass.reformer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_catalytic_reformer, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(CU.plate528(), 8), new OreDictStack(NB.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.shell(), 3), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.hydrotreater").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_hydrotreater, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(CU.plateCast(), 4), new OreDictStack(NB.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.shell(), 2), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.pyrooven").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_pyrooven, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 4), new OreDictStack(CU.pipe(), 12), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.liquefactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_liquefactor, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 12), new OreDictStack(ANY_TAR.any(), 4), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.coil_tungsten, 8))); + this.register(new GenericRecipe("ass.solidifier").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_solidifier, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(AL.plate528(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.coil_copper, 4))); + this.register(new GenericRecipe("ass.compressor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_compressor, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate528(), 4), new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.compactcompressor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_compressor_compact, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(TI.shell(), 4), new OreDictStack(CU.pipe(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.epress").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_epress, 1)) .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.fel").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_fel, 1)) + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.silex").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_silex, 1)) + .inputItems(new ComparableStack(ModBlocks.glass_quartz, 16), new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(DESH.ingot(), 4), new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(STEEL.pipe(), 8))); this.register(new GenericRecipe("ass.excavator").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_excavator, 1)) .inputItems(new ComparableStack(Blocks.stonebrick, 8), new OreDictStack(STEEL.ingot(), 8), new OreDictStack(IRON.ingot(), 8), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.drillsteel").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.STEEL.ordinal())) @@ -191,9 +270,15 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plateWelded(), 6), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_RUBBER.ingot(), 24), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.crt_display, 4))); this.register(new GenericRecipe("ass.forcefield").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_forcefield, 1)) .inputItems(new OreDictStack(ALLOY.plate528(), 8), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.coil_gold_torus, 6), new ComparableStack(ModItems.coil_magnetized_tungsten, 12), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.upgrade_radius, 1), new ComparableStack(ModItems.upgrade_health, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModBlocks.machine_transformer, 1))); + this.register(new GenericRecipe("ass.difurnacertg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_difurnace_rtg_off, 1)) + .inputItems(new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(DESH.ingot(), 4), new OreDictStack(PB.plate528(), 6), new OreDictStack(OreDictManager.getReflector(), 8), new OreDictStack(CU.plate(), 12))); this.register(new GenericRecipe("ass.strandcaster").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_strand_caster, 1)) .inputItems(new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(STEEL.shell(), 2), new OreDictStack(ANY_CONCRETE.any(), 8))); - + this.register(new GenericRecipe("ass.assemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_assemfac, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 48), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(B.ingot(), 4), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(KEY_ANYPANE, 64), new ComparableStack(ModItems.motor, 18), new OreDictStack(W.bolt(), 16), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.chemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_factory, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 8), new ComparableStack(ModItems.motor_desh, 4), new ComparableStack(ModItems.coil_tungsten, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC))); + // generators this.register(new GenericRecipe("ass.dieselgen").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_diesel, 1)) .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4))); @@ -211,11 +296,15 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(TI.shell(), 8), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()))); this.register(new GenericRecipe("ass.gasturbine").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_turbinegas, 1)) .inputItems(new OreDictStack(STEEL.shell(), 10), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4),new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 1), new ComparableStack(ModItems.ingot_rubber, 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()))); + this.register(new GenericRecipe("ass.hephaestus").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_hephaestus, 1)) + .inputItems(new OreDictStack(STEEL.pipe(), 12), new OreDictStack(STEEL.ingot(), 24), new OreDictStack(CU.plate(), 24), new OreDictStack(NB.ingot(), 4), new OreDictStack(RUBBER.ingot(), 12), new ComparableStack(ModBlocks.glass_quartz, 16))); this.register(new GenericRecipe("ass.iturbine").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_large_turbine, 1)) .inputItems(new OreDictStack(STEEL.plate528(), 12), new OreDictStack(RUBBER.ingot(), 4), new ComparableStack(ModItems.turbine_titanium, 3), new OreDictStack(GOLD.wireDense(), 6), new OreDictStack(DURA.pipe(), 3), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.leviturbine").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_chungus, 1)) .inputItems(new OreDictStack(STEEL.shell(), 6), new OreDictStack(STEEL.plateWelded(), 16), new OreDictStack(TI.plate528(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new ComparableStack(ModItems.turbine_tungsten, 5), new ComparableStack(ModItems.turbine_titanium, 3), new ComparableStack(ModItems.flywheel_beryllium, 1), new OreDictStack(GOLD.wireDense(), 48), new OreDictStack(DURA.pipe(), 16), new OreDictStack(STEEL.pipe(), 16))); - + this.register(new GenericRecipe("ass.radgen").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_radgen, 1)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "radgen") + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.coil_magnetized_tungsten, 6), new OreDictStack(MAGTUNG.wireFine(), 24), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC), new ComparableStack(ModItems.reactor_core, 3), new OreDictStack(STAR.ingot(), 1), new OreDictStack("dyeRed", 1))); + // condensers this.register(new GenericRecipe("ass.hpcondenser").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_condenser_powered, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 4), new OreDictStack(CU.plate528(), 16), new ComparableStack(ModItems.motor_desh, 3), new OreDictStack(STEEL.pipe(), 24), new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 4))); @@ -223,11 +312,11 @@ public class AssemblyMachineRecipes extends GenericRecipes { // batteries this.register(new GenericRecipe("ass.battery").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 1), new OreDictStack(S.dust(), 12), new OreDictStack(PB.dust(), 12))); - this.register(new GenericRecipe("ass.batterylithium").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) + this.register(new GenericRecipe("ass.batterylithium").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_lithium_battery, 1)) .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(CO.dust(), 12), new OreDictStack(LI.dust(), 12))); - this.register(new GenericRecipe("ass.batteryschrabidium").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) + this.register(new GenericRecipe("ass.batteryschrabidium").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_schrabidium_battery, 1)) .inputItems(new OreDictStack(DESH.ingot(), 16), new OreDictStack(NP237.dust(), 12), new OreDictStack(SA326.dust(), 12))); - this.register(new GenericRecipe("ass.batterydnt").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) + this.register(new GenericRecipe("ass.batterydnt").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_dineutronium_battery, 1)) .inputItems(new OreDictStack(DNT.ingot(), 24), new ComparableStack(ModItems.powder_spark_mix, 12), new ComparableStack(ModItems.battery_spark_cell_1000, 1), new OreDictStack(CMB.ingot(), 32))); this.register(new GenericRecipe("ass.fensusan").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.machine_fensu, 1)) .inputItems(new ComparableStack(ModItems.ingot_electronium, 32), @@ -253,11 +342,34 @@ public class AssemblyMachineRecipes extends GenericRecipes { // accelerators this.register(new GenericRecipe("ass.cyclotron").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_cyclotron, 1)) .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 3), new OreDictStack(ND.wireDense(), 32), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(STEEL.plate528(), 32), new OreDictStack(AL.plate528(), 32), new OreDictStack(ANY_PLASTIC.ingot(), 24), new OreDictStack(RUBBER.ingot(), 24), new OreDictStack(CU.plateCast(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.beamline").setup(200, 100).outputItems(new ItemStack(ModBlocks.pa_beamline, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate(), 16), new OreDictStack(GOLD.wireDense(), 4))); + this.register(new GenericRecipe("ass.rfc").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_rfc, 1)) + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(CU.plate(), 64), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16))); + this.register(new GenericRecipe("ass.quadrupole").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_quadrupole, 1)) + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 1), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.dipole").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_dipole, 1)) + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 2), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 32), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.source").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_source, 1)) + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.QUANTUM))); + this.register(new GenericRecipe("ass.detector").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_detector, 1)) + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 24), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM))); + this.register(new GenericRecipe("ass.pagold").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.GOLD.ordinal())).inputItems(new OreDictStack(GOLD.wireDense(), 128))); + this.register(new GenericRecipe("ass.panbti").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.NIOBIUM.ordinal())).inputItems(new OreDictStack(NB.wireDense(), 64), new OreDictStack(TI.wireDense(), 64))); + this.register(new GenericRecipe("ass.pabscco").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.BSCCO.ordinal())).inputItems(new OreDictStack(BSCCO.wireDense(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64))); + this.register(new GenericRecipe("ass.pachlorophyte").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.CHLOROPHYTE.ordinal())).inputItems(new OreDictStack(CU.wireDense(), 128), new ComparableStack(ModItems.powder_chlorophyte, 16))); + this.register(new GenericRecipe("ass.exposurechamber").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_exposure_chamber, 1)) + .inputItems(new OreDictStack(AL.plateCast(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModBlocks.capacitor_tantalium, 1), new ComparableStack(ModBlocks.glass_quartz, 16))); // reactors + this.register(new GenericRecipe("ass.breedingreactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_reactor_breeding, 1)) + .inputItems(new ComparableStack(ModItems.reactor_core, 1), new OreDictStack(STEEL.ingot(), 12), new OreDictStack(PB.plate(), 16), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ASBESTOS.ingot(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.crt_display, 1))); + this.register(new GenericRecipe("ass.researchreactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.reactor_research, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.motor_desh, 2), new OreDictStack(B.ingot(), 5), new OreDictStack(PB.plate(), 8), new ComparableStack(ModItems.crt_display, 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.cirnox").setup(600, 100).outputItems(new ItemStack(ModBlocks.reactor_zirnox, 1)) .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(B.ingot(), 8), new OreDictStack(GRAPHITE.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(ANY_CONCRETE.any(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); - + this.register(new GenericRecipe("ass.rbmk").setup(100, 100).outputItems(new ItemStack(ModBlocks.rbmk_blank, 1)) + .inputItems(new ComparableStack(ModBlocks.concrete_asbestos, 4), new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(CU.plate(), 8), new ComparableStack(ModItems.plate_polymer, 4))); // fusion reactor this.register(new GenericRecipe("ass.fusioncore").setup(600, 100).outputItems(new ItemStack(ModBlocks.struct_iter_core, 1)) @@ -285,6 +397,33 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.watzcasing").setup(100, 100).outputItems(new ItemStack(ModBlocks.watz_end, 3)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plateWelded(), 2))); + // ICF + this.register(new GenericRecipe("ass.icfcell").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CELL.ordinal())) + .inputItems(new ComparableStack(ModItems.ingot_cft, 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new ComparableStack(ModBlocks.glass_quartz, 16))); + this.register(new GenericRecipe("ass.icfemitter").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.EMITTER.ordinal())) + .inputItems(new OreDictStack(W.plateWelded(), 4), new OreDictStack(MAGTUNG.wireDense(), 16)) + .inputFluids(new FluidStack(Fluids.XENON, 16_000))); + this.register(new GenericRecipe("ass.icfcapacitor").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CAPACITOR.ordinal())) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 1), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.ingot(), 2))); + this.register(new GenericRecipe("ass.icfturbo").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.TURBO.ordinal())) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new OreDictStack(DNT.wireDense(), 4), new OreDictStack(SBD.ingot(), 4))); + this.register(new GenericRecipe("ass.icfcasing").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CASING.ordinal())) + .inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16))); + this.register(new GenericRecipe("ass.icfport").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.PORT.ordinal())) + .inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 4))); + this.register(new GenericRecipe("ass.icfcontroller").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_controller, 1)) + .inputItems(new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID))); + this.register(new GenericRecipe("ass.icfscaffold").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 0)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(TI.plateWelded(), 2))); + this.register(new GenericRecipe("ass.icfvessel").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 1)) + .inputItems(new ComparableStack(ModItems.ingot_cft, 1), new OreDictStack(CMB.plateCast(), 1), new OreDictStack(W.plateWelded(), 2))); + this.register(new GenericRecipe("ass.icfstructural").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 3)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 1))); + this.register(new GenericRecipe("ass.icfcore").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.struct_icf_core, 1)) + .inputItems(new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.QUANTUM))); + this.register(new GenericRecipe("ass.icfpress").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_icf_press, 1)) + .inputItems(new OreDictStack(GOLD.plateCast(), 8), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + // upgrades this.register(new GenericRecipe("ass.overdrive1").setup(200, 100).outputItems(new ItemStack(ModItems.upgrade_overdrive_1, 1)) .inputItems(new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(BIGMT.ingot(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED))); @@ -492,11 +631,16 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.DEUTERIUM, 4_000))); this.register(new GenericRecipe("ass.warheadvolcano").setup(600, 100).outputItems(new ItemStack(ModItems.warhead_volcano, 1)) .inputItems(new OreDictStack(TI.plateCast(), 12), new OreDictStack(STEEL.plateCast(), 6), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.CAPACITOR_BOARD.ordinal()))); - this.register(new GenericRecipe("ass.stealthmissile").setup(1_200, 100).outputItems(new ItemStack(ModItems.missile_stealth, 1)) - .inputItems(new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32))); this.register(new GenericRecipe("ass.thrusternerva").setup(600, 100).outputItems(new ItemStack(ModItems.thruster_nuclear, 1)) .inputItems(new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new OreDictStack(STEEL.pipe(), 4))); - + this.register(new GenericRecipe("ass.stealthmissile").setup(1_200, 100).outputItems(new ItemStack(ModItems.missile_stealth, 1)) + .inputItems(new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32))); + this.register(new GenericRecipe("ass.shuttlemissile").setup(200, 100).outputItems(new ItemStack(ModItems.missile_shuttle, 1)) + .inputItems(new ComparableStack(ModItems.missile_generic, 2), new ComparableStack(ModItems.missile_strong, 1), new OreDictStack(KEY_ORANGE, 5), new ComparableStack(ModItems.canister_full, 24, Fluids.GASOLINE_LEADED.getID()), new OreDictStack(FIBER.ingot(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 8), new OreDictStack(KEY_ANYPANE, 6), new OreDictStack(STEEL.plate(), 4))); + this.register(new GenericRecipe("ass.launchpad").setup(200, 100).outputItems(new ItemStack(ModBlocks.launch_pad_large, 1)) + .inputItems(new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(ANY_CONCRETE.any(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModBlocks.steel_scaffold, 24), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.launchpadsilo").setup(200, 100).outputItems(new ItemStack(ModBlocks.launch_pad, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(ANY_CONCRETE.any(), 8), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED))); /* this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModItems., 1)) .inputItems()); @@ -526,6 +670,10 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.casing, 2, EnumCasingType.LARGE_STEEL), new OreDictStack(ANY_SMOKELESS.dust(), 24), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.black_diamond)) .setPools(GenericRecipes.POOL_PREFIX_SECRET + "psalm")); + // tools + this.register(new GenericRecipe("ass.multitool").setup(100, 100).outputItems(new ItemStack(ModItems.multitool_hit, 1)) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.plate(), 4), new OreDictStack(GOLD.wireFine(), 12), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD))); + // space this.register(new GenericRecipe("ass.soyuz").setup(6_000, 100).outputItems(new ItemStack(ModItems.missile_soyuz, 1)) .inputItems(new OreDictStack(TI.shell(), 32), @@ -626,6 +774,21 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM), new ComparableStack(ModItems.coin_ufo, 1)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "gerald")); + if(GeneralConfig.enableMekanismChanges && Loader.isModLoaded("Mekanism")) { + Block mb = (Block) Block.blockRegistry.getObject("Mekanism:MachineBlock"); + if(mb != null) { + + this.register(new GenericRecipe("ass.digimemer").setup(1_200, 100).outputItems(new ItemStack(mb, 1, 4)) + .inputItems(new OreDictStack(BIGMT.plateCast(), 16), + new OreDictStack(CU.plateWelded(), 12), + new OreDictStack("alloyUltimate", 32), + new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID), + new ComparableStack(ModItems.circuit, 32, EnumCircuitType.CAPACITOR_BOARD), + new ComparableStack(ModItems.wire_dense, 32, Mats.MAT_GOLD.id), + new ComparableStack(ModItems.motor_bismuth, 3))); + } + } + } public static HashMap getRecipes() { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index f6afda0e0..3ded60786 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -914,8 +914,6 @@ public class ModItems { public static Item bottle2_empty; public static Item bottle2_korl; public static Item bottle2_fritz; - public static Item bottle2_korl_special; - public static Item bottle2_fritz_special; public static Item flask_empty; public static Item flask_infusion; public static Item chocolate_milk; @@ -2925,7 +2923,7 @@ public class ModItems { ingot_raw = new ItemAutogen(MaterialShapes.INGOT).setUnlocalizedName("ingot_raw").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_raw"); plate_cast = new ItemAutogen(MaterialShapes.CASTPLATE).aot(Mats.MAT_BISMUTH, "plate_cast_bismuth").setUnlocalizedName("plate_cast").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_cast"); plate_welded = new ItemAutogen(MaterialShapes.WELDEDPLATE).setUnlocalizedName("plate_welded").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_welded"); - heavy_component = new ItemAutogen(MaterialShapes.HEAVY_COMPONENT).setUnlocalizedName("heavy_component").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":heavy_component"); + heavy_component = new ItemAutogen(MaterialShapes.HEAVY_COMPONENT).setUnlocalizedName("heavy_component").setCreativeTab(null).setTextureName(RefStrings.MODID + ":heavy_component"); wire_fine = new ItemAutogen(MaterialShapes.WIRE) .aot(Mats.MAT_ALUMINIUM, "wire_aluminium").aot(Mats.MAT_COPPER, "wire_copper") .aot(Mats.MAT_MINGRADE, "wire_red_copper").aot(Mats.MAT_GOLD, "wire_gold") @@ -3093,8 +3091,6 @@ public class ModItems { bottle2_empty = new Item().setUnlocalizedName("bottle2_empty").setTextureName(RefStrings.MODID + ":bottle2_empty"); bottle2_korl = new ItemEnergy().makeBottle(bottle2_empty, cap_korl).setUnlocalizedName("bottle2_korl").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_korl"); bottle2_fritz = new ItemEnergy().makeBottle(bottle2_empty, cap_fritz).setUnlocalizedName("bottle2_fritz").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_fritz"); - bottle2_korl_special = new ItemEnergy().makeBottle(bottle2_empty, cap_korl).setUnlocalizedName("bottle2_korl_special").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_korl"); - bottle2_fritz_special = new ItemEnergy().makeBottle(bottle2_empty, cap_fritz).setUnlocalizedName("bottle2_fritz_special").setContainerItem(ModItems.bottle2_empty).setTextureName(RefStrings.MODID + ":bottle2_fritz"); flask_infusion = new ItemFlask().setUnlocalizedName("flask_infusion").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":flask"); chocolate_milk = new ItemEnergy().setUnlocalizedName("chocolate_milk").setTextureName(RefStrings.MODID + ":chocolate_milk"); coffee = new ItemEnergy().setUnlocalizedName("coffee").setTextureName(RefStrings.MODID + ":coffee"); @@ -6705,8 +6701,6 @@ public class ModItems { GameRegistry.registerItem(bottle2_empty, bottle2_empty.getUnlocalizedName()); GameRegistry.registerItem(bottle2_korl, bottle2_korl.getUnlocalizedName()); GameRegistry.registerItem(bottle2_fritz, bottle2_fritz.getUnlocalizedName()); - GameRegistry.registerItem(bottle2_korl_special, bottle2_korl_special.getUnlocalizedName()); - GameRegistry.registerItem(bottle2_fritz_special, bottle2_fritz_special.getUnlocalizedName()); GameRegistry.registerItem(bottle_opener, bottle_opener.getUnlocalizedName()); //Flasks diff --git a/src/main/java/com/hbm/items/food/ItemEnergy.java b/src/main/java/com/hbm/items/food/ItemEnergy.java index b01195ad9..caa47fc5c 100644 --- a/src/main/java/com/hbm/items/food/ItemEnergy.java +++ b/src/main/java/com/hbm/items/food/ItemEnergy.java @@ -23,6 +23,7 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; +@Spaghetti("wtf is this shit") public class ItemEnergy extends Item { private Item container = null; @@ -142,18 +143,6 @@ public class ItemEnergy extends Item { player.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 2)); player.addPotionEffect(new PotionEffect(Potion.jump.id, 30 * 20, 2)); } - if(this == ModItems.bottle2_korl_special) { - player.heal(16); - player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 120 * 20, 1)); - player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 120 * 20, 2)); - player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 120 * 20, 2)); - } - if(this == ModItems.bottle2_fritz_special) { - player.heal(16); - player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 120 * 20, 1)); - player.addPotionEffect(new PotionEffect(Potion.resistance.id, 120 * 20, 2)); - player.addPotionEffect(new PotionEffect(Potion.jump.id, 120 * 20, 2)); - } if(this == ModItems.bottle_sparkle) { player.heal(10F); player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 120 * 20, 1)); @@ -202,28 +191,24 @@ public class ItemEnergy extends Item { } @Override - public int getMaxItemUseDuration(ItemStack p_77626_1_) { + public int getMaxItemUseDuration(ItemStack stack) { return 32; } @Override - public EnumAction getItemUseAction(ItemStack p_77661_1_) { + public EnumAction getItemUseAction(ItemStack stack) { return EnumAction.drink; } @Spaghetti("cover yourself in oil") @Override - public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) { + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(VersatileConfig.hasPotionSickness(player)) return stack; + if(this.requiresOpener && !player.inventory.hasItem(ModItems.bottle_opener)) return stack; - if(VersatileConfig.hasPotionSickness(p_77659_3_)) - return p_77659_1_; - - if(this.requiresOpener && !p_77659_3_.inventory.hasItem(ModItems.bottle_opener)) - return p_77659_1_; + player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); - p_77659_3_.setItemInUse(p_77659_1_, this.getMaxItemUseDuration(p_77659_1_)); - - return p_77659_1_; + return stack; } @Override @@ -260,51 +245,32 @@ public class ItemEnergy extends Item { } if(this == ModItems.bottle_nuka) { list.add("Contains about 210 kcal and 1500 mSv."); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle_cherry) { list.add("Now with severe radiation poisoning in every seventh bottle!"); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle_quantum) { list.add("Comes with a colorful mix of over 70 isotopes!"); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle2_korl) { list.add("Contains actual orange juice!"); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle2_fritz) { list.add("moremore caffeine"); - list.add("[Requires bottle opener]"); - } - if(this == ModItems.bottle2_korl_special) { - if(MainRegistry.polaroidID == 11) - list.add("shgehgev u rguer"); - else - list.add("Contains actual orange juice!"); - list.add("[Requires bottle opener]"); - } - if(this == ModItems.bottle2_fritz_special) { - if(MainRegistry.polaroidID == 11) - list.add("ygrogr fgrof bf"); - else - list.add("moremore caffeine"); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle_sparkle) { if(MainRegistry.polaroidID == 11) list.add("Contains trace amounts of taint."); else list.add("The most delicious beverage in the wasteland!"); - list.add("[Requires bottle opener]"); } if(this == ModItems.bottle_rad) { if(MainRegistry.polaroidID == 11) list.add("Now with 400% more radiation!"); else list.add("Tastes like radish and radiation."); - list.add("[Requires bottle opener]"); } + + if(this.requiresOpener) list.add("[Requires bottle opener]"); } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java index 91cb0f688..6800ea13f 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java @@ -242,7 +242,7 @@ public class XFactoryTool { .setOnUpdate(LAMBDA_FOAM_UPDATE) .setOnEntityHit((bulletEntity, target) -> { if(target.entityHit != null) target.entityHit.extinguish(); }) .setOnRicochet(LAMBDA_FOAM_HIT); - fext_sand = new BulletConfig().setItem(new ItemStack(ModItems.ammo_fireext, 1, 1)).setReloadCount(300).setLife(100).setVel(0.75F).setGrav(0.04D).setSpread(0.05F) + fext_sand = new BulletConfig().setItem(new ItemStack(ModItems.ammo_fireext, 1, 2)).setReloadCount(300).setLife(100).setVel(0.75F).setGrav(0.04D).setSpread(0.05F) .setOnUpdate(LAMBDA_SAND_UPDATE) .setOnEntityHit((bulletEntity, target) -> { if(target.entityHit != null) target.entityHit.extinguish(); }) .setOnRicochet(LAMBDA_SAND_HIT); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 756760d15..8588f66c2 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1716,6 +1716,8 @@ public class MainRegistry { ignoreMappings.add("hbm:item.chopper_blades"); ignoreMappings.add("hbm:item.component_emitter"); ignoreMappings.add("hbm:item.component_limiter"); + ignoreMappings.add("hbm:item.bottle2_korl_special"); + ignoreMappings.add("hbm:item.bottle2_fritz_special"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); From f94fd70cf0e8b93d0443edb912b3040f4707e0c2 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 15 Jul 2025 21:42:05 +0200 Subject: [PATCH 292/491] falling in love with a corporate illustration --- changelog | 3 +- .../inventory/gui/GUIMachineTurbineGas.java | 4 +- .../recipes/AssemblyMachineRecipes.java | 2 +- .../tileentity/RenderSkeletonHolder.java | 8 +-- src/main/resources/assets/hbm/lang/de_DE.lang | 4 +- src/main/resources/assets/hbm/lang/en_US.lang | 4 +- .../hbm/models/machines/assembly_machine.obj | 64 +++++++++--------- .../blocks/pneumatic_tube_connector.png | Bin 322 -> 354 bytes .../hbm/textures/blocks/pneumatic_tube_in.png | Bin 415 -> 425 bytes .../textures/blocks/pneumatic_tube_out.png | Bin 429 -> 439 bytes .../hbm/textures/items/canister_biofuel.png | Bin 448 -> 0 bytes .../hbm/textures/items/canister_bitumen.png | Bin 478 -> 0 bytes .../hbm/textures/items/canister_blank.png | Bin 464 -> 221 bytes .../hbm/textures/items/canister_canola.png | Bin 426 -> 0 bytes .../hbm/textures/items/canister_empty.png | Bin 457 -> 398 bytes .../hbm/textures/items/canister_ethanol.png | Bin 563 -> 0 bytes .../hbm/textures/items/canister_fracksol.png | Bin 491 -> 0 bytes .../hbm/textures/items/canister_fuel.png | Bin 415 -> 0 bytes .../hbm/textures/items/canister_gasoline.png | Bin 451 -> 0 bytes .../textures/items/canister_heatingoil.png | Bin 454 -> 0 bytes .../hbm/textures/items/canister_heavyoil.png | Bin 435 -> 0 bytes .../hbm/textures/items/canister_kerosene.png | Bin 472 -> 0 bytes .../hbm/textures/items/canister_lightoil.png | Bin 473 -> 0 bytes .../hbm/textures/items/canister_napalm.png | Bin 515 -> 385 bytes .../hbm/textures/items/canister_naphtha.png | Bin 460 -> 0 bytes .../hbm/textures/items/canister_oil.png | Bin 431 -> 0 bytes .../hbm/textures/items/canister_overlay.png | Bin 424 -> 354 bytes .../hbm/textures/items/canister_petroil.png | Bin 444 -> 0 bytes .../hbm/textures/items/canister_reoil.png | Bin 450 -> 0 bytes .../hbm/textures/items/canister_smear.png | Bin 453 -> 0 bytes .../hbm/textures/items/canister_superfuel.png | Bin 454 -> 0 bytes .../hbm/textures/items/fluid_barrel.png | Bin 237 -> 305 bytes .../textures/items/fluid_barrel_infinite.png | Bin 289 -> 421 bytes .../textures/items/fluid_barrel_overlay.png | Bin 156 -> 208 bytes .../assets/hbm/textures/items/fluid_tank.png | Bin 172 -> 337 bytes .../hbm/textures/items/fluid_tank_overlay.png | Bin 143 -> 181 bytes .../assets/hbm/textures/items/gas_bottle.png | Bin 201 -> 211 bytes .../assets/hbm/textures/items/gas_empty.png | Bin 262 -> 252 bytes .../assets/hbm/textures/items/gas_label.png | Bin 118 -> 142 bytes .../assets/hbm/textures/items/inf_water.png | Bin 288 -> 432 bytes .../hbm/textures/items/inf_water_mk2.png | Bin 431 -> 436 bytes 41 files changed, 47 insertions(+), 42 deletions(-) delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_biofuel.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_bitumen.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_canola.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_ethanol.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_fracksol.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_fuel.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_gasoline.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_heatingoil.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_heavyoil.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_kerosene.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_lightoil.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_naphtha.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_oil.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_petroil.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_reoil.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_smear.png delete mode 100644 src/main/resources/assets/hbm/textures/items/canister_superfuel.png diff --git a/changelog b/changelog index 6221f663e..00743753b 100644 --- a/changelog +++ b/changelog @@ -23,4 +23,5 @@ ## Fixed * Fixed gas centrifuge sound persisting when broken or when unloaded * Fixed all centrifuge sounds trying to play even when the player is far away, using up audio slots -* Fixed guns that don't have durability always displaying a condition of 0% \ No newline at end of file +* Fixed guns that don't have durability always displaying a condition of 0% +* Fixed GL state leak caused by skeletons \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index 87895df93..66a3b7152 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -124,9 +124,9 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { } if(turbinegas.temp >= 20) - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "°C"}); else - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20°C"}); turbinegas.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 16, 16, 48); turbinegas.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 70, 16, 32); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index aed9b4798..c6e98b525 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -48,7 +48,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { @Override public int outputItemLimit() { return 1; } @Override public int outputFluidLimit() { return 1; } - @Override public String getFileName() { return "hbmAsemblyMachine.json"; } + @Override public String getFileName() { return "hbmAssemblyMachine.json"; } @Override public GenericRecipe instantiateRecipe(String name) { return new GenericRecipe(name); } @Override diff --git a/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java b/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java index adcbea5e9..45401d406 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java +++ b/src/main/java/com/hbm/render/tileentity/RenderSkeletonHolder.java @@ -23,6 +23,10 @@ public class RenderSkeletonHolder extends TileEntitySpecialRenderer { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + RenderHelper.enableStandardItemLighting(); + switch(te.getBlockMetadata()) { case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; @@ -30,10 +34,6 @@ public class RenderSkeletonHolder extends TileEntitySpecialRenderer { case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; } //why the FUCK did this not commit properl;y - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_CULL_FACE); - RenderHelper.enableStandardItemLighting(); - bindTexture(ResourceManager.skeleton_holder_tex); ResourceManager.skeleton_holder.renderPart("Holder1"); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 7def2090a..955ecfdc9 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -371,6 +371,7 @@ container.leadBox=Sicherheitsbehälter container.machineAmmoPress=Munitionspresse container.machineArcWelder=Lichtbogenschweißer container.machineArcFurnaceLarge=Lichtbogenofen +container.machineAssemblyMachine=Montagemaschine container.machineBoiler=Ölwärmer container.machineChemicalFactory=Chemiefabrik container.machineChemicalPlant=Chemiewerk @@ -4347,8 +4348,9 @@ tile.machine_arc_welder.name=Lichtbogenschweißer tile.machine_armor_table.name=Rüstungsmodifikationstisch tile.machine_ashpit.name=Aschekasten tile.machine_ashpit.desc=Sammelt Asche von Feuerbüchsen und Heizöfen -tile.machine_assembler.name=Fertigungsmaschine +tile.machine_assembler.name=Fertigungsmaschine (Legacy) tile.machine_assemfac.name=Fertigungsfabrik +tile.machine_assembly_machine.name=Montagemaschine tile.machine_autocrafter.name=Automatische Werkbank tile.machine_autosaw.name=Automatische Kreissäge tile.machine_autosaw.desc=Schneidet Pflanzen nieder, pflanzt Bäume nach$Akzeptiert:$-Holzöl$-Ethanol$-Fischöl$-Schweröl diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index be8eeaa6e..b70a4e262 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -773,6 +773,7 @@ container.leadBox=Containment Box container.machineAmmoPress=Ammo Press container.machineArcWelder=Arc Welder container.machineArcFurnaceLarge=Arc Furnace +container.machineAssemblyMachine=Assembly Machine container.machineBoiler=Oil Heater container.machineChemicalFactory=Chemical Factory container.machineChemicalPlant=Chemical Plant @@ -5480,8 +5481,9 @@ tile.machine_arc_welder.name=Arc Welder tile.machine_armor_table.name=Armor Modification Table tile.machine_ashpit.name=Ashpit tile.machine_ashpit.desc=Collects ashes from fireboxes and heating ovens -tile.machine_assembler.name=Assembly Machine +tile.machine_assembler.name=Assembly Machine (Legacy) tile.machine_assemfac.name=Assembly Factory +tile.machine_assembly_machine.name=Assembly Machine tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_autosaw.name=Automatic Buzz Saw tile.machine_autosaw.desc=Cuts down nearby plants, re-plants trees$Accepts:$-Wood oil$-Ethanol$-Fish oil$-Heavy oil diff --git a/src/main/resources/assets/hbm/models/machines/assembly_machine.obj b/src/main/resources/assets/hbm/models/machines/assembly_machine.obj index bf0e3b1c4..1b79436d5 100644 --- a/src/main/resources/assets/hbm/models/machines/assembly_machine.obj +++ b/src/main/resources/assets/hbm/models/machines/assembly_machine.obj @@ -578,12 +578,12 @@ vt 0.947368 0.518519 vt 0.881579 0.574074 vt 0.881579 0.518519 vt 0.861842 0.574074 -vt 0.720395 0.629566 -vt 0.707282 0.611111 -vt 0.720395 0.592656 -vt 0.684807 0.624161 -vt 0.684807 0.598061 -vt 0.703351 0.598061 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.688096 0.624161 +vt 0.688096 0.598061 +vt 0.706641 0.598061 vt 0.907895 0.481481 vt 0.894737 0.462963 vt 0.907895 0.462963 @@ -607,12 +607,12 @@ vt 0.947368 0.518519 vt 0.881579 0.574074 vt 0.881579 0.518519 vt 0.861842 0.574074 -vt 0.720395 0.629566 -vt 0.707282 0.611111 -vt 0.720395 0.592656 -vt 0.684807 0.624161 -vt 0.684807 0.598061 -vt 0.703351 0.598061 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.688096 0.624161 +vt 0.688096 0.598061 +vt 0.706641 0.598061 vt 0.907895 0.481481 vt 0.894737 0.462963 vt 0.907895 0.462963 @@ -649,29 +649,29 @@ vt 0.470395 0.148148 vt 0.417763 0.148148 vt 0.319079 0.148148 vt 0.947368 0.574074 -vt 0.729667 0.598061 -vt 0.733508 0.611111 -vt 0.729667 0.624161 -vt 0.711123 0.624161 -vt 0.711123 0.598061 -vt 0.680966 0.611111 -vt 0.694079 0.592656 -vt 0.707192 0.611111 -vt 0.703351 0.624161 -vt 0.694079 0.629566 +vt 0.732957 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.697369 0.592656 +vt 0.710482 0.611111 +vt 0.706641 0.624161 +vt 0.697369 0.629566 vt 0.894737 0.481481 vt 0.947368 0.462963 vt 0.947368 0.574074 -vt 0.729667 0.598061 -vt 0.733508 0.611111 -vt 0.729667 0.624161 -vt 0.711123 0.624161 -vt 0.711123 0.598061 -vt 0.680966 0.611111 -vt 0.694079 0.592656 -vt 0.707192 0.611111 -vt 0.703351 0.624161 -vt 0.694079 0.629566 +vt 0.732957 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.697369 0.592656 +vt 0.710482 0.611111 +vt 0.706641 0.624161 +vt 0.697369 0.629566 vt 0.894737 0.481481 vt 0.947368 0.462963 vt 0.319079 0.296296 diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_connector.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_connector.png index 1a0327a1a6fa923581191f2307459f461157af23..133f16515b841b72527b5a39d54085787c0a2844 100644 GIT binary patch delta 312 zcmV-80muHr0^$OYGk*aYNkl7xV5dKnGLPTs#2q6ZDEMW1#l!?6yYoDN< z`yd^dcmrO8DHB5$gseo0P*r(is}f~OhhW!su3b9xBrkX0&-r`~;Kd^WEsG1kS zAzm~-U^E_(Zd9EuH!D;!Z`;1RuAjH$05#F(FgeI<)JgfZhWkgeyQ8uuA4gPB-VB3sqx3>!Hu* z&PLh>n)Byp3^9Dr+jP?WCh&TFcQ~C*9E}I~=`#TUt}g!nKhqbl=#dMOF3KT22Gk*a2NklqDUwIu1Ui-QkB!vF8RpX4V7H0=F(=>`k*of-Ph3^|XH z^B4sexZIyug=a(NcXR^)D7a|E!edHNX@j0KZN&WLkThU=;D3I50EbgGsGJ64@6St} zVA%t*8kJ{mut32@we5G+U3WwptnF%+HSBZS0F-TKS*D0h)2!FBhSg#MQ4|3HJkL|& zvWDe6ZZ&9wtodr7S0)V#E)X8mMxW&~>yR}+x6#l^+sU~6X0S=Fil*@rEqj2r&jbKS eRQ~@z(+js6a1oopDE09G0000DDlF+FR?F&izoO;{4`@Zjvd-oaSV&XN{ z&29@zI9S3Vk^zwnh-Jvd2$-ALmLc>#b}hO|f1Om1ASQGcnHcd({Tpd@UU8 zb9b|oQ{8lSbn0OJADlWVgo4PCfE1BVLXeu+q12&9^Wy}e9~{Sh_q^YI+}*2?ih*5U zHabl-(?Bx~0^t$}mr!^-Pv;zro|HJBPZt0Pg-5GDOyn-B6@N-)J;SQ90!6cicYXS^ z9{0M~?QI!~l1^MyD@)l)0MpkQCzF?iMj6=kWgGyct^T#2Z*-c3!lP)`;O-HCtIb_$ zf#dROj%!rSG}ya!&`cu%`@WwT@rY~GNLV{O&z$Hu4vynw@)4_<25KN&X}kZ4K)AmJ z#=UL^uq+G9vTZW?hz*2G?r3N8>?YWtwDpNUTLAEo(Mkc-B^b$msq}+LhFeD>LmU>}-GAIUQf4|B`b| S(AW?F0000@RRNTC#wPTeG>QyjvJN&4#I8Sg#ky!Xz%Pa%V$ zRSWB_2AZLx89IUI6L>yrZ^nGN;e7I;B>8IA0ATIS0O%fF(tqpp0hmlzGOFC5U{qrv zfbER1nkA`0E?ZcBeZ%;ji{o0VK4%m4GEjzAEli1la-}FeP1euVTMgFUjDk^x@jC#` z?x{3DAxvs=BJEzMA75KDbWW}wQl~#2=9w=yaVGcAHvp(YoJ8RH0JyG;>$*S`Y!bar zAI;EF1zBd0gnwq}Ql1)kK91c^HN+m6rip2qQUk|s6L>z#>zNr&rYo#wDSjisK{-#s zsHQe@I(UhDLi6u2Dp}Iq{$BW(!S&)ZrP!bSo%~an20000+5cHB<8?kSW20ZS=}d+fnq7Itfq=*Yt1@a>60_cFj)XF zJikyHbW713&pFeK3VOSR?Ti!fX0u6*xNK*P-fp28mB=7|VR5;xi|e||Sg$jP3_|HC zfxjq}US#0dmU|KqLLh`t#vI!slpfiw^qJ1r^rawRcK`~7!pX{gOYkF5LyH50&a_7b%- g9%e%)SnZD3Z-UH_nIKn+<^TWy07*qoM6N<$f+vZy(f|Me diff --git a/src/main/resources/assets/hbm/textures/items/canister_biofuel.png b/src/main/resources/assets/hbm/textures/items/canister_biofuel.png deleted file mode 100644 index 5e509e6b80799c0a8b270869d235e8d7df96a281..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmV;x0YCnUP)k+K1P`#{y{B zKz0$j6ogU0BO#>-@x1p7ClD);h}T%QbJtcA9Pwr%Nl zVR(fOuh6{!V+_tYMBwPCU^<1H3rx2QRh2+H0g$>DMOy9Z_VyB^3Uv+V!yJ-@XpF&H zi!lZfuFb2x<1n&(Z z$$E@&73>axwHD`+srh_Pr_&*X6yVpGI{=Ht0)QA($ET-vdcEV7JFqsbKLWh>D;FuO zsxmaqJ7rk{Ai`E<01?4CM~rZKnld>!C8yf+dGjTP`VQ3@g=%5+hbIxTOJr%RrKH2Hae z2%3aQ*p{$ep(|i_<`xJGhihGBx}DYebk58eu4=JZ=xjD)wOUcvHOuAF@I=|insr@M zmgQ4g0Fvv+X0!P(@eN@9<|9qhaR2-Ts>=I!Z*{xf@_W-Cr2{yfPJ|G!)^a=^i7}F8 z8LA%?;LqQ$H=xc8j4>ohf`~924$1SJZ$CbpEX(lT^Xlap)C&NJF)|noh%sXA`TP6N zFGf`<%aUjAbqCUkV2r_9i!lZfVKSL8pMO$-s;cnbQxrx23{;g60wRKlpsG|=1%Pu7 zRc&288bMVN5sWdUX^L|W5uq$gLI}hdi81yAthFS`+0=f&XEYj7*EQbzPRw4w;cx&T zgg^*^^?J>8I&IxqYf;sHfOD>OQ4|H(=`5bnE~+Td>xW=Q+FGuI;I6dt6D9V2veSrMNlG%b{GdUe+ceIOo{k|LSNS0N16> UPSvZUiU0rr07*qoM6N<$g2^e;O#lD@ diff --git a/src/main/resources/assets/hbm/textures/items/canister_blank.png b/src/main/resources/assets/hbm/textures/items/canister_blank.png index 9e19878bc2ad4c8583d33e118f159ec5e37ba27f..0524cbe1d224218436c66b826765752ccfe08e8d 100644 GIT binary patch delta 193 zcmcb>e3x;8NGZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x382Ao@Fyrz3 z6)8Z$2u~Ns5DWigiGl+hOAk7Pg?+Q1a`MBEkI5pIF%0WCmPER`wmQ1Fv^+dJ+nne5 zxw*+detcARbe^%mL}E|X*RF@Rwq_^HifBk;wzs#xW5s>sh8>sN!30Jg9)=a0q*zwv ley#&r!j~H1nda-upao=e05J$$3Z4w2JYD@<);T3K0Ra2HLf`-Z delta 438 zcmV;n0ZIPd0nh`GB!2{RLP=Bz2nYy#2xN!=00D!) znz`U6bPs|q!WFp;SK%T8I#VzSYDWhS4BcIS@G!i5pa1b|)>YiYyCX)%f z-41Il+wE5IOX;7Q)>_K4{7nmh`TjT@4*w+vXjv?ZLaM6be1AS8BE)gb>2zYTSbU7q z8XS*Dx!rEu?|16DCXVA57=Yz+`37qJfl>-%3?T%1y&id{PHwuQITd>zUw>q`(q gAc`VZt5r+$2au@B`n#pLLI3~&07*qoM6N<$g6Jf{%K!iX diff --git a/src/main/resources/assets/hbm/textures/items/canister_canola.png b/src/main/resources/assets/hbm/textures/items/canister_canola.png deleted file mode 100644 index 7f5a44f9151c048fe296ef25ea16037549dfec9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmV;b0agBqP)1u2W+5S=A>pSd;Q)FHZ78+!2wGcv0x#e(Y%D2k zJOMO@0@%RrLP5d0J7e*&!hkMun#ugU&%Ez9pWY&`nSzE zjtRr?oE89cxR^{P{}Kau7S|tvOOh`Z3vdoYhKNcn8aO+-e2uHKeHk0OoU< zuOCi9UJaB|7z5Tqy$-V(T-=~K9q4x9^%++R0LXKwRAkn>)5}|wa}b8`^5{dnA}XcO z+M$%VXt&|>O$1RSE{Zt60-SSXnTV~GLPn9C1%a&fk!O7juojepW>ZAgiuEj$Sb1Io z&{|`5o;Dk3G$4+}`aWg}V7s+|yq0A!9z(BJxD)%%l>mZ3E*T@m>UJSXBo0WN*k9t0k{hs}iHIo~Ay)`vt9~d6vulo^$*(mocZmaMGGZqZC;SfwdCx?#b7D14%rW Ue#f&!lmGw#07*qoM6N<$f~J_VNdN!< diff --git a/src/main/resources/assets/hbm/textures/items/canister_empty.png b/src/main/resources/assets/hbm/textures/items/canister_empty.png index 36c11231afd707e4a594f18815272d13529af96e..a41347e9525b4b57f7dd1178de906f44c24cd5d6 100644 GIT binary patch delta 355 zcmV-p0i6EH1C9fbG=D`&L_t(Ijg6DBs=_c7hQD4MI|YYAaVWSuIQasub@m-Px%DAB z_y~^fK7w=;x)eG&NT3$UAcc-~N=R=4dZwJ@e1FdQ(+2z)S(c4@{d_(-pU(ln>{l>N zQ-)yxpss70rWvcM3MK-J#lqb3csznE%f>WK0XQ5E0BklJl7A#I%*=+D%O&&qoY(8c z`~4ob+bvQ`ilQJ4L*h6lNfPe&yDI?Dbsb&TnOrGF+qUfYd$VW56M@}s$LVx32YH^; zwyhUZO8GlD9*+j{f!c%1}ydEXniy zn-&1~_i;QP|4R(evbf!DwW=!4=QFBGuh-*rIg9B+;(`V+_tYM1+37PnxDI77H^TkBQ@$caWDM)^$y%)1j_wto{97E|*4C$@84~ zeBOezhG>kzT8l9T5n(hMv0kqgpePFBI3~+7J_1yg5CS5Ch@h$zMFD{K9#w5zy^Wx% zhzQ0QqA0?9kAH}e=Q$ySX0RUt)>@qVHFdpS84L!LWl0>zt(YGHx7!VX5CS0t4u=Di z$)s^-twmKo1HAW*i!95CxWrYV=prRk|^b6n23mo2>9`14SnS)T$C!F$hUvlwYPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0mw;2K~y+TeN#(r z6G0Gt)zco^pn&8>>?{ZbB*P6@h8uXr6}d;`WuzRyAR*hri9Z>H?U9|hKUDS1!lgjo zXf)l`U9Vn!hH!+zU=aKLK1QPvilV@9I8^8Vf~mg>;yj)rEE1e3`G*Vi{#E(;LZ z+WI_{#D~K+A_715_k2RgbA#E;;qv0$e^XHhA^1pSFy{68&lJsOWxu-vVvP9m{_PVY zmBOCGuTY}gj?r!#+};8o+vn8n0%vE0tDh6rr=bXlp9i;vwT9IM&LSlHrx)iGLgc~% z--aVaqPq}1tZAjCICQ%P%eak;u;J7Qy&jO+I&=@@* zir|su3!FoW_D+ssGbzv! z6oE8NQV<2Fr<5+|d4^&yqb;=|l;x(nTtgA;cE2#&EU;RE{|E3OMNFrTix^o^K$b}t z^e{ddO&JuE<*AJlktniso>5LO&n>=wzBuv${sNw9$G5M^G(-RZ002ovPDHLkV1j#j B{;L20 diff --git a/src/main/resources/assets/hbm/textures/items/canister_fracksol.png b/src/main/resources/assets/hbm/textures/items/canister_fracksol.png deleted file mode 100644 index 8111eab89d6322eaeab9c900054bbf19436625d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmV=0VyFV9{>@A z@Bthmg3JLa0Y_k+4&lIiEAOr&0^2j)1jd&4%yOc$>7FW8b(dkMhQpx_1_Q?9F?C%t z8jTDWl>J+?u4{^-xCje?+kH$Xlm7w(G$amRJlFYr&TKYARq1xSOs7+3N1s})G!(2> zD?$iZYgsOr#287_6uo~}0m=`b_lO!hFvj4VLqzEHdgOV|x7Tk?nx$9C;u~+~QLI7ZLa>~_%17K~(S_|4dM8ksjeyif;@hMLZZ*b48I9jZ~ zi3sPbp+H1%&JjZ3(amcls&qOX9wZU73GH(E?;YfMPFa@Qo~mxc<(%8Q!hXg#LD_iS h07Srh`0}-Z`3)5Z!{ThFwfO)5002ovPDHLkV1mZ_)a(EN diff --git a/src/main/resources/assets/hbm/textures/items/canister_fuel.png b/src/main/resources/assets/hbm/textures/items/canister_fuel.png deleted file mode 100644 index 359fba8c8fe156d12d8cc377d122b5f1257d2ae1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmV;Q0bu@#P)9RogsE8+#_t*?fR$3L zz#9n#EiSA`iIdo-h=XG9Lc}9YF(1!=o_F4foM|?jwbSX;VzE#Zh539QxuE#D#iA&z zR;x>15Y8ugp8uB_dJ)^3oAx2k-It{nFL94ggLCKVm9X7x>~=db4%p!ex3ssk7Xfh` z8;{2tWXSP>=nB^z=$`=C@ApRC?WfI;L@k#1GJrfu5JC_;o_d2k%i284T3w3aWAwVv zG>xjN)Mz@$x3UCjHy=ihhk(Q3Aj0)zV%&k2s8Dy~uYeGOBuT)p&Bm)V^|On9(y)Xc zV7*@B*un~5w_ESil(YE5HuL~#nhGHZc)(jMw_ESB>{z0w>H+GymL!P-UU!BGzL({n z=+yww>%wR>a`*V?$Jtto7mkk?hBtcVkDorusn(OB!5E(hp5Iu9dunKgEyn-=002ov JPDHLkV1mMS!p{Hz diff --git a/src/main/resources/assets/hbm/textures/items/canister_gasoline.png b/src/main/resources/assets/hbm/textures/items/canister_gasoline.png deleted file mode 100644 index 1b466069cf6b4f726d94f2d531091d716c4c180c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmV;!0X+VRP)zU53XL=F~?=n3_;AiKKpQ%L5?W$t*?;@a002ovPDHLkV1lF6#V7y( diff --git a/src/main/resources/assets/hbm/textures/items/canister_heatingoil.png b/src/main/resources/assets/hbm/textures/items/canister_heatingoil.png deleted file mode 100644 index e8654568e2cb767d50f8217da3f36eb4ab5f5afb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)g~sSa1X1!Uy1*Z~`yj3=W%k z#dwl&dxV_Ga&@tA?4&)x5hbr-%7`{$Ifz!1%(`whP{9z|8pa`GYMMfB4a?{+UVw*lxF|Dk5^&4~IEp!vKCR zyP%{7B0`pBm>GGVQ`dKVyZSA|;TdI_GrlP7Bmf}Bh;t5A#XY=!|5b^Zu`uD|`FR3K zQV@~DiZL=6obmP3djkj|@Xi@kOtVM;W`?Q~W5mobGeQVENAEG~N_NM97$YJ=Q4|kB z#_jDrs)|O?Qvl~2-tR=M*K7LyJ|Wywmic3vrvRJH24MG_D%aOFmzQr3>YTuF8xnx` z{?N*sn>)(#HEr8c6a@gW)5K?L;Jrsx84O-wX7qYJR;v{vJMo(%K&Op$U9((1x|u5^e-P2=uqRC{UXAa(F&oK8ZsDGfoh zf{4)X_qknGY(&h*(Ulrwpj_)( zK~+`cc@BVF0*DCSdt!`SzkH5}(ChUm%MxR{|JBJWSZi4<78Litk1>5rl6LZ=&amx8 dX-it0_yAQgt5u4}Bmn>b002ovPDHLkV1mmW$Ibu% diff --git a/src/main/resources/assets/hbm/textures/items/canister_kerosene.png b/src/main/resources/assets/hbm/textures/items/canister_kerosene.png deleted file mode 100644 index 61649e01baff42bf2048322b212bf048513848ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)l z*ELmDy_E%^^>R@Z#k;~gfQkLVzw0^I&LRlMb|^DH;~Retsx$yBmw4|n%CM9rAp~-j zb0H!C-?`iYHSa)cthGdmoY)g?M>7=zZDm?AyZ<8S^|09@%9Frc7#W)VhOFedtNjWo z5o1K5=zZ#unT#lrQcAq{JUorV0AsM$0VaYtYE|68IC10L@00SFTC-ZQBt zoP9i7+aYK)f*c04vJ7JkZPmt!V_*i%t2ud|uMJ6TS5qNIthEFQbm@{(;>aFRmgRHn zD^`t2^A(KYYIemfw>r=x(Or_7Ryf-jm#r78nySkfUWQV O0000=LDJDA#;Y@Avc(u zfK9SU4nP(p>}-QED@1TtWifzom|>LObxHsC`@hR^b|#aFjmKkVvl(?=Go4NyFC2Ml zSl2a0QM{xDAUeM+7K{H919T7{?%vvFvthMb0gxmKMN#na>+ffybO_qEC4_*8u;1?q zA&_Mm_qS#M_um#5Mx73vb9nDjReHT1Wm$3e@ZDuuMxN)~-@dY|1^^)hy!Qu^#|J-r z`QglrsuJG69(7DQ5u9^~2+lcFmEmy6=XY-mV7*>*b7PccH$}(5%m^W%s;DYQAwV3* znAwTy$p~hKs^Xj@O;e&MLRDEVmxqEOgex702;O@Dw%aZJexIgk$n*Rx<`sk8ZU;OT z*|sh7`JB;cbfOahvnvL19G@tvsv^&Gnx-L5QveRNJa3??L{UTtfx%#anUN$3P1E2G z?0^0t==_3+P?jZiU7u!V;JsjGM3K8#oQu^wF3K^h$dL}>7(V^{)zSO~=yJX0%cLH# P00000NkvXXu0mjfGsVpV diff --git a/src/main/resources/assets/hbm/textures/items/canister_napalm.png b/src/main/resources/assets/hbm/textures/items/canister_napalm.png index 66d2fae42382278729964d7502ef18479e424f2f..1c65524d3bc5465f02080ead482ae5c93df764ab 100644 GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|~0G|+7sVrI15OLitM%rr(6kAn!^m%1vWhK*O9334)Lqqxb`PFA@D=RCP zmzQg6YsbaK85kJ!^z56EBS8!~Yq4jm}8<2!KD;7>U43!LT~GIk(}NQsRmXgVaR z>ur1xQ&q=7-Z9;cds1*Xd(}RtO0lL^t0j#_18XhLIXaz=;(rq9T}9^{gTdf3F92r! z_HMWPUuFOWkY$-zYv~=GlIJLiQ`eImew>jhU&w*xE`4pwsE7G)?8Uy~*qQV`7Xv z`TPiLEpHyYhcP5c0d&o z*Xjr4c}|+9vxdk&+5p5DF~;D%=gPr#M1*p=jB^g9=Gp&j0ycJ_wWi6h+Ugst^cHOS)E)O;*_`1G91?%qIl=0>4myU<8Nk z)t!=sNCuI>beZl}0-01j7d?|nr=1Kws6{>Mp1Su{341l2PIWSwFrUu}AuyZGgh$H! zs~JLIxm-S`1;FiZ7K_Dyi93MPSDw1A>3Km_8J|Aa>+2OCKm2$wN(->vZiz7>BE%R; zDUs(HXXhxur^_y=H3JdBT8paE@AoN+nv1tzB+pOqKI80sq(=b&DJ6_Cq?8b8&cA>6 zRaBKotSHfU5e9_t{>~BY@3j13-+C7$a9#KN*dl z?c5my=n;T(ZugW$QQ`el>bfS&8V4!Ssm=_nwZs@14xgZ^IOnLU3X#UU+_W=vp0Owj zR;xezU94470&5Si?2Lr_k8+pwPLRO#;M?c#EzMuYRJr}9ukn2V00005JitoLLwv<1OZvG0Eyq>qxlQiMMxwPF&lyi*fVd@ zR|JL9c6J`?9^JVf8}4ekT1|W`ORG(w8UjZV5F@`M5h~pR$p{gpp_kb;>YUy-q^KLimvOTpTWNGjWNb(t&P^&%=2uD zqA&peZ*bEz0F-43KwZ~lS>|T`o&-Lh4^m3XvLudU@;oQYGJm#hb2E<)j^jWnMccNn z=ff8Ven3Y+t)eI#?1yFHX__v*#|*4Uk|Y2D z{3-yDBni_raU2Iih+sdsf|N2C@q2sO7y~r(QK!8ZK+Gu?GOI@QokD!k^BA5<#Itp$n%`j>BMHUQU3(+-ivdN z$K%2K{U*53Q$U+wMJ`=h_GBPan6ZzP5`Q^LaFf!*|VvOGbT5F6k06d>h=JPpS*HM<` zXw9#H*Xsp92zCMQJ;&pbx~>Pi{x)9$)>^dIOePcBwxy~noO2XK0YFNL&l&+@j2L4G zA+T61NGUO$PU*UCQ131K8vR0+Wi(C0^?DuNQc6R(j4?wthMRmU^+D-%`+*oE)>?ME b-Du_qo`AEIJ!o%^00000NkvXXu0mjf&z!M4 diff --git a/src/main/resources/assets/hbm/textures/items/canister_petroil.png b/src/main/resources/assets/hbm/textures/items/canister_petroil.png deleted file mode 100644 index bc5aa6314620a337fbb58613419b3699bc7a9a01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmV;t0Ym zrV9N&)%QOJ5T2g0i_L~kfSD0v%wknA%R->^o@jP*buNOLp{gLlm#RX%&!D=_%}ptf zE`W0`HxbzFcJz8Z2q9ZP3C31TkRdNtqt|L-xps?lhq!{Lz0WI_mm@px=_r|esoAq3jC zeXkb)_xfWxoqnhpppf|Y`#`&{V?Gb4!trs%-Cg4HhP_q_1?%;i7$ergY6U4J`hB=k z6yV$KE~v=B7=v>T5jZ)in9bnJFHFA=O#@dK8MGGwd1_VV({BEL{f$wDwuPUrgcKHx zF<5Ic#vr1cpTnQewE{do2AT%$?+;|4s>B!(QA9vBHv)L?P>s*3-n5{qhzQ0&U4O!R zgGiPhVWi5i*s4jVzHpt>k&c@@Wti}u4@29*r@^_A~@%W5zfwXCPzmVA%th?t5^bxSFqMHo6UK6c)3$eIG3k8 sx4SqytGQj2t=H|diGcU;<6qhH9|pFrwJ5+fVE_OC07*qoM6N<$g0}CGmKpCORwO?GvL zb$U)7)b6SrjAmyhaY@~}sQ=^ttIP1J7K??>=W|x86(Izc%cbFsvVUua5U8r^EiC}< z^<%Ty{Fk@~`0{Z`)6{6zpsGB4{-E3KmLD(r&nPXx`FtkEh_#l}=|oD2>2!)}sQ^Fs z^gu0uF$U)xBEoPu2Qr9&A-g{KFXW4cEB7!l7JkRmo zBO+8)MU0V@Al(C4YjN&k>TozP8jT1cP!z?VnD+q3;}L)uBQZwS>ov34?B>qe&IY>x z@BPh1S(X$)z6AcVl>4&c-Qw0^-_%Wk)0zu(__ vs^DDq8*Z?j5WUm99?Es>YEb|W)E&()+bh3qQw-)%00000NkvXXu0mjft;Nw8 diff --git a/src/main/resources/assets/hbm/textures/items/canister_superfuel.png b/src/main/resources/assets/hbm/textures/items/canister_superfuel.png deleted file mode 100644 index f38d02ff7ad175f262f827122d3bb7a81e901c4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)c4|F9 zdbx@SmJVAh5U7x~JCouf*=Okxo^EHDkN=;U6<)<~IJCiFz<4|+#>i+i5{`sBl#DS_ z*Y&Yp0Q~F6WHNbI^B&;K@*9gk3qHh04C7OAZ4dc@-`sXuX<688Hl&nrI5L@>GkyA8 zabs89*inFp;JrstPK#5fOu6HS^yw1_9D?i(G3QJ{LCzWXzx<1zVi+|wfzK^SYX%~M za}E(fO}XHLuhn-0n8!JRz>FE405c<{gqor#hB1$G07_qC$#$v^S}-$I6+x&zR+Lhr zC^a=HrDm|?Zh&(R?;BC8)rwxPM-c<)Ih&N;`-I4MquG47;4^V|Zow&0v&`Z(o@r(Mpn w;c1S`%A6QYXd5-$V+W-In07*qoM6N<$g3mm}lmGw# diff --git a/src/main/resources/assets/hbm/textures/items/fluid_barrel.png b/src/main/resources/assets/hbm/textures/items/fluid_barrel.png index 8eb04cde2572e496c7d2ca7f8bb6321ac2b1d15f..fdc4318612fa761aed083d119c28fc133ed9d215 100644 GIT binary patch delta 289 zcmaFMxRGgsWIZzj1A~Sxe=v|@EDmyaVpw-h<|UBBlJ4m1$iT3%pZiZDE08Z2;1l8+ z85!x|;80v#tgWrx)6=tH!2%y2pIy6lUA}x7sAS^Z)9Zm0S4ogx@P8O!*mOqcJW!Og zz$3Dlfr0NZ2s0kfUy%Y7%<-&uaSYK2F6|5CJD|Yf+^x{}JHBG=i+|USwCr=x_GWHzV=8wj0;t^|@Kk?rY z3p0N)&18;P_f73ezf*JKIKN1Te7rBxzDnF?D@$bZtp}5V7W1V>c&7RKGH6KwIUGO? S0+)h8QVgE1elF{r5}E)&t7ymo delta 220 zcmV<203-jg0__2i8Gi-<001BJ|6u?C00eVFNmK|32nc)#WQYI&0HjGoK~y-6-IL7? z!ypVsU#cGQ0AYO;saUmIV~<+ Wi&!*$Scgsk00000fhdc0;L0xGk*bGNklFx z>%m%Uj4@biIh{_P8+Ty`YORq{4uwMq0nj>=ad%T|4SnTR+Thiu3s##P1onn$PF$klqDd Z{QyTrvYXZF2jl<%002ovPDHLkV1mY1t}*}s delta 246 zcmV69lw2Y9In)pax=~1`tpMRTDQA z0RQY~&1;&q+urUc4+0lB2=FIvXBQy^-`hFox3P_LOC%yNGng5wigjJz65Wo;L<9g; zvZ|ICGpk4*#|q300MPe+mAv_nXb6U305c=!T=~1MgQ_+}4R67Q7$eNARIzX4BY}ui z=dvt?^b)TLxQO^X&kn!=cuL8~adZHF9Pj;_@<)Uae43{6vWQf6jIpWUR0AR^il>xL wg=|`I_a^8HRRymNbD&lHt5x3P+t2hjp4+v4w6(q{P5=M^07*qoM6N<$f=3%|vj6}9 diff --git a/src/main/resources/assets/hbm/textures/items/fluid_barrel_overlay.png b/src/main/resources/assets/hbm/textures/items/fluid_barrel_overlay.png index 35cfb942d2daf603ff296520e107bf758703fae8..518122010d2046d12f05a8818cded6184e8ccec2 100644 GIT binary patch delta 164 zcmV;V09*f@0nh=EG=GOlL_t(IjqQ=K4Z|=D1Yd!d)jTS=iwgD{K1QekRb5qdz4cAU2o1gytjGa?x!Wp?9A-@zK6EW233s`RRsWuNX&chOX;>K zkMLD+IbjZ*VP>xjJ|zl>C|zwKB519l)|w72J)4+0K5^V`W*rz~fQT0V4{!(4_(jYF Sy0`!U0000IYdY*^ty4|tZAPWGkwRA?uaR8|68l{vKvSmx~-E52jpns~W^&=Q#$nzYfRBuev z)Yiui0PuaEIF9>$5Cls>3xI=@Q|@kW2*a?C-x+uJ_9=>DeS*vB6~{-1{RsCDj{uxS z(Pkq6BuN55Gk^bF+t#YHzQRvxV?fn3zXvpJ%g%84PYGVXZvIadUC%^BJQ5CacHn`yGf5A{Q3nylgUp@Jp^BqEfC zEB%&b=?$}4u0(gQ9lh~4g1c8UBZPn?BvDF15;^B4WPMxxV7oh}lmLh^c0I!l{(y%s inAy35&l(I*c|JQ#Vt95KbT@5`@G7 z3Gt4xVR4;h3hAAbKQuc)q0&1=1Rb~JH#25hpV+^#`Je&Q( rV@T>o?_IAtn7oi<2O{G7-e(2c+%)o31`!?r0000#WBR9H#tFqbqlL|zue#Y_xJYx|8d3O;p8b(rl@3a#xY9(frzLm zr&N>hpa1{o8|e!$e~>Ep|F5>~`T6<5S;sXLSQuVZinK;GU%Jcy1fH&bF6*2UngF?q BC$|6q diff --git a/src/main/resources/assets/hbm/textures/items/gas_bottle.png b/src/main/resources/assets/hbm/textures/items/gas_bottle.png index 7776838e646c5ab687528385b20f27752373834e..4e2b038df7f7fd1520d84ef1d98c473d347060fb 100644 GIT binary patch delta 167 zcmV;Y09gOY0n-7HG=GXoL_t(Ijop&54a6V}MSpGB@jT0_qH)PH&85W?rIs;;RE zxSMAHB7!l-;cm{kX0V^ZvH^gT!7|`(o&$);?*_~aRsA}T%OI}|07PW_)zw-ryKfnZ VI3tih*Hi!i002ovPDHLkV1k#4g(}=(D)t@ za*1@QqD*Pov(n1IZ&Pd4oU>l-99PFFCBzu05AWB0{j7xG=H;6L_t(IjkS`o4Z|Q1MSn7c2SBXiI>n8UH8O{b?7#+g#R{Y{ z&80a-vLZIPbde+5C!@%}Lh$eN^Z_t5-LLw%UDWcNt;5%Ig2)?0q(o!}t;#v4P1Dp5 z0zlVwI*z0EeQ(}=+8S=#7R-#45&$5^h!DcUzuAHJ{<{{DO-WL-#63DDfSHkV{@E*~ z)Dg@(s3rigAgB)5tK$Ng`G10x5=6x8WA!To01@f@>4srg^?m?n=t;Go8GE$=0000< KMNUMnLSTYD$YfUl delta 218 zcmV<0044wY0fqvQG=IHGL_t(IjbmV-C8$gC`Cpgh^BjmlU*9lnOLh3q zz`(%ZHTwV~Nd|lnHDp-x=`O>(dGjzd!T=L4iPqNE|N8p+3@R!r3`t2zIK9D)O|Y%4 z?Z1J60fT~q0s{vJ2gC2*zZn!16dKN-Ki^1{7hb%0!NAYY&r|U0*Dr==&z>>7c=3Ya z-Me>KU4Yd92?+@X1qB5Ld3kvTHa0efj~_oWeEs?rs{uH}fLJhU02K_NI2}+70EtLL U5)$@|zW@LL07*qoM6N<$f>hUDg8%>k diff --git a/src/main/resources/assets/hbm/textures/items/gas_label.png b/src/main/resources/assets/hbm/textures/items/gas_label.png index eee087c9ea3b9175ded8388710f356a01fe77f4f..5c0dde5432c6f7079812eff98a2b06bf493c7a8e 100644 GIT binary patch delta 96 zcmV-m0H6PMjscJ~T181jK~y-6?ar|cz%UF0!55GrwEuJ}Z8cKIERe!>8(&F)AmREG zN&3p4l~QJ6X8WsiP5}ZG5&I9SiZKS=jk_OQxR$(ct{q25)d@ua00009=KfSD cJa~bDLGG%o=bCkR6XL7HboV+go&jcx-7&U4H7-LA1gz0n|5qN`h zj>F*)QAGi1nzGq!8b)vK_xk{>*XzpxN-2s}4}jN~Z@S%XAStUc08bBJ*9qp!HXmh~yF_V#M26$Zm#yqP7&3V_;y18~yta{{GO`g>O|58Oy$g`Tq z=U>_5djcOa8NFW*NYfN(PQf|H{p}}02!y!%e+q-a0D%2|A9NuET5FthIOigQXqk$l zI9h9&&1PYIrxd&04j@{l_z(Wp^~i-fHTwDiQ46v*Ee~64od5s;07*qoM6N<$f;~gC A=l}o! delta 260 zcmdnMyntzfNGZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x382Ao@Fyrz3 z6)8YLi4xa{lHmNblJdl&REC1Y%)Ao4ywnl}6Fmbx%N*l6KcJe4o-U3d7XC~7FLEAG z;9;G+p1H(gzw80km;{3tPh}3!D+~;tu6{1- HoD!M<*6dqa diff --git a/src/main/resources/assets/hbm/textures/items/inf_water_mk2.png b/src/main/resources/assets/hbm/textures/items/inf_water_mk2.png index 9c53f6f1ed7da78ee586a09cd5283e7b9cfe5120..2513580a39729b46a8cd9949f16ede771c23f429 100644 GIT binary patch delta 394 zcmV;50d@Yb1GEE>G=FPJL_t(IjeU|mZo)tiMjug*UQMML<$pC?ID%b!lC zRyFrn6#@i7P!mfj0dgrNm&-*NwaVf`D5a#=>uCmQnieL6VSlJhG=lwp55QuvAWhR6 zMHq$vwA=0G5p3JWFbt;CX%!uS!C(MD`F%8lBuOv~gVAWD6$v2#$g+(4{jO1I2CnOJ zJRWPpLfq|k0f^(c+2DLWv)xSq*enm2rm0A_y9w`~;Cm~L;Guk(uZMhne6v{|n6HPL z*!NcW-io*QwSRepqPRF`<4Dm|yZ%W~j_q#3Y#cEgN42iyP>bX^PHx+_>N*=osz?Z- zOsvi`K=UHGt_$cw`27Lr=>^j?>2$pRf1%&+1JpKA2tk%*T(8&W5sERSlmtPb9_eGX#fBK delta 388 zcmV-~0ek+m1Fr*+G=FAEL_t(Ijir;lY63wNg+C?W42t>$+XO{~1v_gAq}aw%v9h+4 zQ~_VXCWW;{5MMx>Edn+QHc=aGQ%OLOm1V|hHiag{_>%-rdFRf7^UWE!QlWDP^?E%} zN};tzYfZP?J-K`Hb5N~T10e+IbQ&Q9Qc9$hY`5FM7(=hu3xAz8D3{AYCX*o&i2!_E z1}K$ED5WsQ1g`6bP8tBr=W~P*0Sk1YSGV~8&gycU`O?0&@Z-0k)7w+#M?&ns&wu6|>{tcp(631~^uh)2<$7Zu(I2@w2K8kSE@6Re*mUZxq i%jJ?&RlfQ&U9AtLV7X%xo<7z90000v#mt{ From 97556e4c5a743449098cb4344ea1c50f20d9958a Mon Sep 17 00:00:00 2001 From: wiesenmann <175506894+wiesenmann@users.noreply.github.com> Date: Tue, 15 Jul 2025 19:50:53 +0200 Subject: [PATCH 293/491] add paintable pneumatic tube --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../network/PneumoTubePaintableBlock.java | 234 ++++++++++++++++++ .../java/com/hbm/main/CraftingManager.java | 3 +- .../java/com/hbm/tileentity/TileMappings.java | 4 +- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../blocks/pneumatic_tube_paintable.png | Bin 0 -> 673 bytes .../pneumatic_tube_paintable_overlay.png | Bin 0 -> 810 bytes .../pneumatic_tube_paintable_overlay_in.png | Bin 0 -> 843 bytes .../pneumatic_tube_paintable_overlay_out.png | Bin 0 -> 844 bytes 10 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/network/PneumoTubePaintableBlock.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_in.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_out.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index f6dcd2065..aa2189d46 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -828,6 +828,7 @@ public class ModBlocks { public static Block drone_crate_requester; public static Block pneumatic_tube; + public static Block pneumatic_tube_paintable; public static Block fan; @@ -1964,6 +1965,7 @@ public class ModBlocks { drone_crate_requester = new DroneDock().setBlockName("drone_crate_requester").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":drone_crate_requester"); pneumatic_tube = new PneumoTube().setBlockName("pneumatic_tube").setStepSound(ModSoundTypes.pipe).setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_tube"); + pneumatic_tube_paintable = new PneumoTubePaintableBlock().setBlockName("pneumatic_tube_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); chain = new BlockChain(Material.iron).setBlockName("dungeon_chain").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":chain"); @@ -3231,6 +3233,7 @@ public class ModBlocks { register(drone_crate_provider); register(drone_crate_requester); register(pneumatic_tube); + register(pneumatic_tube_paintable); register(fan); register(piston_inserter); diff --git a/src/main/java/com/hbm/blocks/network/PneumoTubePaintableBlock.java b/src/main/java/com/hbm/blocks/network/PneumoTubePaintableBlock.java new file mode 100644 index 000000000..cb2d368aa --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/PneumoTubePaintableBlock.java @@ -0,0 +1,234 @@ +package com.hbm.blocks.network; + +import api.hbm.block.IToolable; +import com.hbm.blocks.IBlockMultiPass; +import com.hbm.interfaces.ICopiable; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.render.block.RenderBlockMultipass; +import com.hbm.tileentity.network.TileEntityPneumoTube; +import com.hbm.util.Compat; +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.util.ForgeDirection; + +public class PneumoTubePaintableBlock extends BlockContainer implements IToolable, IBlockMultiPass { + + @SideOnly(Side.CLIENT) public IIcon overlay; + @SideOnly(Side.CLIENT) public IIcon overlayIn; + @SideOnly(Side.CLIENT) public IIcon overlayOut; + + public PneumoTubePaintableBlock() {super(Material.iron);} + + @Override + public TileEntity createNewTileEntity(World world, int meta) {return new TileEntityPneumoTubePaintable();} + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + this.blockIcon = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_paintable"); + this.overlay = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_paintable_overlay"); + this.overlayIn = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_paintable_overlay_in"); + this.overlayOut = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_paintable_overlay_out"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileEntity tile = world.getTileEntity(x, y, z); + + if (tile instanceof TileEntityPneumoTubePaintable) { + TileEntityPneumoTubePaintable tube = (TileEntityPneumoTubePaintable) tile; + + if (RenderBlockMultipass.currentPass == 0) { + if (tube.block != null) { + return tube.block.getIcon(side, tube.meta); + } else { + return this.blockIcon; + } + } else if (tube.ejectionDir.ordinal() == side) { + return this.overlayIn; + } else if (tube.insertionDir.ordinal() == side) { + return this.overlayOut; + } else { + return this.overlay; + } + } + return this.blockIcon; + } + + @Override + public int getPasses() {return 2;}; + + @Override + public int getRenderType() {return IBlockMultiPass.getRenderType();} + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if (tool == ToolType.HAND_DRILL) { + + TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityPneumoTubePaintable) { + TileEntityPneumoTubePaintable tube = (TileEntityPneumoTubePaintable) tile; + + if (tube.block != null) { + tube.block = null; + world.markBlockForUpdate(x, y, z); + tube.markDirty(); + } + } + } else if (tool == ToolType.SCREWDRIVER) { + + if (world.isRemote) return true; + TileEntityPneumoTube tube = (TileEntityPneumoTube) world.getTileEntity(x, y, z); + + ForgeDirection rot = player.isSneaking() ? tube.ejectionDir : tube.insertionDir; + ForgeDirection oth = player.isSneaking() ? tube.insertionDir : tube.ejectionDir; + + for (int i = 0; i < 7; i++) { + rot = ForgeDirection.getOrientation((rot.ordinal() + 1) % 7); + if (rot == ForgeDirection.UNKNOWN) break; //unknown is always valid, simply disables this part + if (rot == oth) continue; //skip if both positions collide + TileEntity tile = Compat.getTileStandard(world, x + rot.offsetX, y + rot.offsetY, z + rot.offsetZ); + if (tile instanceof TileEntityPneumoTube) continue; + if (tile instanceof IInventory) break; //valid if connected to an IInventory + } + + if(player.isSneaking()) tube.ejectionDir = rot; else tube.insertionDir = rot; + + tube.markDirty(); + if(world instanceof WorldServer) ((WorldServer) world).getPlayerManager().markBlockForUpdate(x, y, z); + + return true; + } + return false; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { + + ItemStack stack = player.getHeldItem(); + if (stack != null && stack.getItem() instanceof ItemBlock) { + ItemBlock ib = (ItemBlock) stack.getItem(); + Block block = ib.field_150939_a; + + if (block.renderAsNormalBlock() && block != this) { + TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityPneumoTubePaintable) { + TileEntityPneumoTubePaintable tube = (TileEntityPneumoTubePaintable) tile; + + if (tube.block == null) { + tube.block = block; + tube.meta = stack.getItemDamage() & 15; + world.markBlockForUpdate(x, y, z); + tube.markDirty(); + return true; + } + } + } + } else if (ToolType.getType(stack) == ToolType.SCREWDRIVER || ToolType.getType(stack) == ToolType.HAND_DRILL) return false; + if (!player.isSneaking()) { + TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityPneumoTube) { + TileEntityPneumoTube tube = (TileEntityPneumoTube) tile; + if (tube.isCompressor()) { + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + return true; + } + } + } + return false; + } + + public static class TileEntityPneumoTubePaintable extends TileEntityPneumoTube implements ICopiable { + + private Block block; + private int meta; + private Block lastBlock; + private int lastMeta; + + @Override + public void updateEntity() { + super.updateEntity(); + + if (worldObj.isRemote && (lastMeta != meta || lastBlock != block )) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + lastBlock = block; + lastMeta = meta; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + int id = nbt.getInteger("block"); + this.block = id == 0 ? null : Block.getBlockById(id); + this.meta = nbt.getInteger("meta"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + if(block != null) nbt.setInteger("block", Block.getIdFromBlock(block)); + nbt.setInteger("meta", meta); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + NBTTagCompound nbt = pkt.func_148857_g(); + + int id = nbt.getInteger("block"); + this.block = id == 0 ? null : Block.getBlockById(id); + this.meta = nbt.getInteger("meta"); + super.onDataPacket(net, pkt); + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + + if(block != null) nbt.setInteger("block", Block.getIdFromBlock(block)); + nbt.setInteger("meta", meta); + nbt.setByte("insertionDir", (byte) insertionDir.ordinal()); + nbt.setByte("ejectionDir", (byte) ejectionDir.ordinal()); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + if(block != null) { + nbt.setInteger("paintblock", Block.getIdFromBlock(block)); + nbt.setInteger("paintmeta", meta); + } + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("paintblock")) { + this.block = Block.getBlockById(nbt.getInteger("paintblock")); + this.meta = nbt.getInteger("paintmeta"); + } + } + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 67b872581..70f14d039 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -610,7 +610,8 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.fluid_pump, 1), new Object[] { " S ", "PGP", "IMI", 'S', STEEL.shell(), 'P', STEEL.pipe(), 'G', GRAPHITE.ingot(), 'I', STEEL.ingot(), 'M', ModItems.motor }); addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube, 8), new Object[] { "CRC", 'C', CU.plateCast(), 'R', ANY_RUBBER.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube, 24), new Object[] { "CRC", 'C', CU.plateWelded(), 'R', ANY_RUBBER.ingot() }); - + addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube_paintable, 4), new Object[] { "SAS", "A A", "SAS", 'S', STEEL.plate(), 'A', ModBlocks.pneumatic_tube}); + addRecipeAuto(new ItemStack(ModItems.template_folder, 1), new Object[] { "LPL", "BPB", "LPL", 'P', Items.paper, 'L', "dye", 'B', "dye" }); addRecipeAuto(new ItemStack(ModItems.pellet_antimatter, 1), new Object[] { "###", "###", "###", '#', ModItems.cell_antimatter }); addRecipeAuto(new ItemStack(ModItems.fluid_tank_empty, 8), new Object[] { "121", "1G1", "121", '1', AL.plate(), '2', IRON.plate(), 'G', KEY_ANYPANE }); diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index ca3281bd1..c26b87500 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -37,6 +37,7 @@ import com.hbm.blocks.network.FluidDuctGauge.TileEntityPipeGauge; import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable; import com.hbm.blocks.network.FluidDuctPaintableBlockExhaust.TileEntityPipeExhaustPaintable; import com.hbm.blocks.network.FluidPump.TileEntityFluidPump; +import com.hbm.blocks.network.PneumoTubePaintableBlock.TileEntityPneumoTubePaintable; import com.hbm.blocks.rail.RailStandardSwitch.TileEntityRailSwitch; import com.hbm.tileentity.bomb.*; import com.hbm.tileentity.deco.*; @@ -428,8 +429,9 @@ public class TileMappings { put(TileEntityCranePartitioner.class, "tileentity_partitioner"); put(TileEntityFan.class, "tileentity_fan"); put(TileEntityPistonInserter.class, "tileentity_piston_inserter"); - + put(TileEntityPneumoTube.class, "tileentity_pneumatic_tube"); + put(TileEntityPneumoTubePaintable.class, "tileentity_pneumatic_tube_paintable"); put(TileEntityRadioTorchSender.class, "tileentity_rtty_sender"); put(TileEntityRadioTorchReceiver.class, "tileentity_rtty_rec"); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index a031be603..b28db0408 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4656,6 +4656,7 @@ tile.plasma_heater.name=Plasmaerhitzer tile.plushie.name=%s Plüschfigur tile.pneumatic_tube.name=Rohrpost tile.pneumatic_tube.desc=Sendted Items mit Druckluft.$Rechtsklick mit Schraubenzieher aktiviert den Eingang.$Shift-Rechtskick mit Schrabuenzieher aktiviert den Ausgang.$Eingänge können konfiguriert und mit Druckluft verbunden werden.$Sendet bis zu einem Stack, vier Mal pro Sekunde. +tile.pneumatic_tube_paintable=Geschirmte Rohrpost (Färbbar) tile.pole_satellite_receiver.name=Satellitenschüssel tile.pole_top.name=Antennenspitze tile.press_preheater.name=Presse-Vorheizer diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 74c5a343b..08a834b03 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5802,6 +5802,7 @@ tile.plasma_heater.name=Plasma Heater tile.plushie.name=%s Plushie tile.pneumatic_tube.name=Pneumatic Tube tile.pneumatic_tube.desc=Sends items using compressed air.$Right-click with screwdriver to toggle an input.$Shift right-click with screwdriver to toggle an output.$Inputs can be configured, and connected to compressed air.$Sends up to one stack, four times per second. +tile.pneumatic_tube_paintable.name=Paintable Pneumatic Tube tile.pole_satellite_receiver.name=Satellite Dish tile.pole_top.name=Antenna Top tile.press_preheater.name=Burner Press Preheater diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7f15d129c5447b961527fce16d0760bfff1f86 GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv=}#LT=BJwMkF1yemk zJqzi~S1W*OwxvdRrg?g5F>nAmtPE0&tPG4mmKP99L)jqLXfQH^#X;^dWMl%nE(*xb zY-a(BX93wDkO0IW{V*EMQU+$Aci0(NfGP}(j13qUKuiVcU|j$)X$p`H0!%=2n7}H7 zEG>X6s4hbT1CZ?M21ViEc@`Q#+X6gY978PpdxH+<9yZ{aqPo!4<(Bf6ew_=lxAG=2 zHl4fZ?)FlN_18IupVz0Quxywk=c}sm$;11DV^H~(xeL;E-0LaP_l-scSJ{6EW8&^EqQxgC~Eo)FR$s+T8=S7hu3Y}&wN2s^}?35Eb>u- zN7uZ)EEMG*dChsoHu1|2?Ckva7e%*AeV)K=5#I9jWVnKj{VBQk~F7KFc$)SI8_tksFwC&h5 zF10Y~O#r@OfX~f^UL)Z#LQ2Gcdnj zls|3j2|JVZhi|4v8gF}8!yF~gwQKS3ptWZlta#U}fAZaYp@_Hl^U`~D-z@hvFDWrC zWZhkTVd}&;ty=H%R=jz8-ng#*$UesVJw=!D4ypD6V}&QcC&YEZf&~T!20$JVh%IG( z1*BL?g8YL2|Nqb6ptbS~kk47*5n0T@pr-`FjH@2qodgt=C~=J_3C>R|DNig)We7;j z%q!9Ja}7~2)iczykj{Ly0;on3q{cZvH#aq}gu%HeHL)Z$MWH;iBtya7(>EZzkxv|` zXjN*2XPT#{76S*6!^$AV$jZP7WO)IxG?WcWOd5>LU~wiO+mMk7oVcQZ?96r+uy_`b z4FdNkvoO2>ra2gm<}wDL)C6`07NAN4BV&WMNlXkvK=u?MW?TTV0qAisz;G}_`QAN| zOP2+Lyr$;q;uxY4oSfjsd__2cftf?t$%u(@6@##_B4df}i#8?3Q>-&)GG@gytxU?a QF$Njv>FVdQ&MBb@0C+MOv;Y7A literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_in.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_in.png new file mode 100644 index 0000000000000000000000000000000000000000..03dc6b483ca4f5d2278607420784d1927e2a58e3 GIT binary patch literal 843 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@ISlodZ0bofQI#^3yVNQh^fZ zr%tr=V0M&fwO=eG*xah=qPwjlY+0b-#z`7o3luzA)*rgt+u8U=?TuTG4r}zmLyJFZ z<*eDdb%Q9&LFOZI8-lh7M*hFa!Rf@p-uAP?_`Tt0HYRq<%SEr-4s7c7tI=6@_RP7= zgXv8z87ULW?v`**?!2fHdi=PqY1ZD(RXYF7omQ$|Z;|q?IH6k~F7KFc$)SI8_tksFwC&h5 zF10Y~O#r@OfX~f^UL)Z#LQ2Gcdnj zls|3j2|JVZhi|4v8gF}8!yF~gwQKS3ptWZlta#U}fAZaYp@_Hl^U`~D-z@hvFDWrC zWZhkTVd}&;ty=H%R=jz8-ng#*$UesVJw=!D4ypD6V}(D!C&bm~Kf{6r3k(blfC4~p z=g50YAjMh|Qa0#5JNMI6tkVJh3R1 zAs{g`uSCz!HAKNw&rr`oI`h>Epc+Y#8t44n+|;}h2Ir#G#FEq$h4Rdj3-iXD}xjxD+42tU%NT%C6WAG8fGQ1)j1Af*F);`M*;9a+aRI~zpvS=g!@&&Y zd-p^xT^0!PnzN^iV~9p@XW6-gouSg0^Uy+Lx&-I&dv+5KhvVSQ8WTAkAG^ y!Gp_fW3|T_wKcUa(SfHfwhR2-_~x;f(k6!e@ywoQX4k2KZ1Z&Wb6Mw<&;$UsWi5&T literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_out.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_out.png new file mode 100644 index 0000000000000000000000000000000000000000..8e990e7760159d183250eb68c241438f585f7fa1 GIT binary patch literal 844 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@ISlodZ0bofQI#^3yVNQh^fZ zr%tr=V0M&fwO=eG*xah=qPwjlY+0b-#z`7o3luzA)*rgt+u8U=?TuTG4r}zmLyJFZ z<*eDdb%Q9&LFOZI8-lh7M*hFa!Rf@p-uAP?_`Tt0HYRq<%SEr-4s7c7tI=6@_RP7= zgXv8z87ULW?v`**?!2fHdi=PqY1ZD(RXYF7omQ$|Z;|q?IH6k~F7KFc$)SI8_tksFwC&h5 zF10Y~O#r@OfX~f^UL)Z#LQ2Gcdnj zls|3j2|JVZhi|4v8gF}8!yF~gwQKS3ptWZlta#U}fAZaYp@_Hl^U`~D-z@hvFDWrC zWZhkTVd}&;ty=H%R=jz8-ng#*$UesVJw=!D4ypD6V}(D!C&cwX1H*y^3k(blfC4~J zAZSw!q*zOW{DS`j0mJWYe88w<;4JWnEM{QPQvzYeRgdmY0t!l$xJHx&=ckpFCl;kL z1SDqWmFW4ohA5co8R}U`XTDkiR3iyee zCk|A!DmB70&C^qhfdj~4WsqWIWncudynt95$_6DU4Mt|LI1`X<$jAgvU{OGJW;+X5 zJPXJMf%}tL7+wI=9gIeE83Ryi0y_f>P^E#9u|eA;CI%rOdkPRUE`Zno^f(w`IGCY) z@1Dq|%K|}ObMbU>4ABTK?PKI(P~bSS>CgY!(X*VwoIl8DnCbp;X`Z_$QR&UR9Ri1y znkMma%#WCE$Ce~p)wPT1`NhcsUpM~#x`g8@=l*zRPeY*-AdfS6y85}Sb4q9e0J*I$ AWB>pF literal 0 HcmV?d00001 From af6f3d76feb5d0bb8089dd68c0fcdcd3ef3d6735 Mon Sep 17 00:00:00 2001 From: wiesenmann <175506894+wiesenmann@users.noreply.github.com> Date: Wed, 16 Jul 2025 13:08:48 +0200 Subject: [PATCH 294/491] german localization fix --- src/main/resources/assets/hbm/lang/de_DE.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index b28db0408..913b513bf 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4656,7 +4656,7 @@ tile.plasma_heater.name=Plasmaerhitzer tile.plushie.name=%s Plüschfigur tile.pneumatic_tube.name=Rohrpost tile.pneumatic_tube.desc=Sendted Items mit Druckluft.$Rechtsklick mit Schraubenzieher aktiviert den Eingang.$Shift-Rechtskick mit Schrabuenzieher aktiviert den Ausgang.$Eingänge können konfiguriert und mit Druckluft verbunden werden.$Sendet bis zu einem Stack, vier Mal pro Sekunde. -tile.pneumatic_tube_paintable=Geschirmte Rohrpost (Färbbar) +tile.pneumatic_tube_paintable.name=Geschirmte Rohrpost (Färbbar) tile.pole_satellite_receiver.name=Satellitenschüssel tile.pole_top.name=Antennenspitze tile.press_preheater.name=Presse-Vorheizer @@ -5029,4 +5029,4 @@ weapon.ability.fire=Flammend weapon.ability.radiation=Radioaktive Schneide weapon.ability.phosphorus=Phosphorspitze weapon.ability.stun=Betäubend -weapon.ability.vampire=Vampir \ No newline at end of file +weapon.ability.vampire=Vampir From 6bbb354a9fb6c2fdf981ab6ef0ebfc3516c49fb2 Mon Sep 17 00:00:00 2001 From: Justnightheron Date: Wed, 16 Jul 2025 19:46:37 +0800 Subject: [PATCH 295/491] Rape that wall --- src/main/resources/assets/hbm/lang/zh_CN.lang | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 2fa299904..92a56b5b8 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -819,7 +819,6 @@ damage.inset=成套装备时的获得的伤害减免: damage.item=装备时获得的伤害减免: damage.category.EXPL=爆炸 damage.category.FIRE=火焰 -damage.category.PROJ=投射物 damage.exact.drown=溺水 damage.exact.fall=摔落 damage.exact.LASER=激光 @@ -5176,7 +5175,7 @@ tile.machine_arc_welder.name=电弧焊机 tile.machine_armor_table.name=装甲改装台 tile.machine_ashpit.name=储灰槽 tile.machine_ashpit.desc=收集来自燃烧室和加热炉的灰烬 -tile.machine_assembler.name=装配机 +tile.machine_assembler.name=装配机(遗留) tile.machine_assemfac.name=装配厂 tile.machine_autocrafter.name=自动工作台 tile.machine_autosaw.name=自动嗡嗡锯 @@ -6097,3 +6096,12 @@ tile.fluid_duct_paintable_block_exhaust.name=可涂漆排气管 tile.machine_chemical_factory.name=大型化工厂 tile.machine_chemical_factory.desc=可处理四个配方的化工厂。$配方处理速度更快。$但也需要消耗更多电量。$需要水来运行。$会产生低压蒸汽。 tool.ability.hammer_flat=平整表面 +container.machineAssemblyMachine=装配机 +damage.category.PHYS=物理 +item.ammo_secret.p35_800_bl.name=.35-800 V9 (黑雷霆) +item.blueprints.name=蓝图 +item.chunk_ore.moonstone.name=月长石 +tile.logic_block.name=地牢逻辑砖块 +tile.trapdoor_steel.name=钢活板门 +tile.machine_assembly_machine.name=装配机 +tile.wand_logic.name=结构魔杖方块(逻辑) From 9cf7cc6643222a108f14c2a372f244c2e4d0cb5b Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 16 Jul 2025 21:59:48 +0200 Subject: [PATCH 296/491] bluh --- .../com/hbm/items/weapon/sedna/factory/XFactory762mm.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java index 9ed290110..85e0d1b47 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java @@ -157,7 +157,6 @@ public class XFactory762mm { @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CARBINE_ANIMS = (stack, type) -> { int ammo = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory); - boolean empty = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory) <= ammo; switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL)); @@ -170,7 +169,7 @@ public class XFactory762mm { case RELOAD: return new BusAnimation() .addBus("MAG", new BusAnimationSequence().addPos(0, -4, 0, 250, IType.SIN_UP).addPos(0, -4, 0, 750).addPos(0, 0, 0, 500, IType.SIN_DOWN)) .addBus("LIFT", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(-25, 0, 0, 250, IType.SIN_FULL).addPos(-25, 0, 0, 1000)) - .addBus("BULLET", new BusAnimationSequence().addPos(empty ? 1 : 0, 0, 0, 0).addPos(0, 0, 0, 1000)); + .addBus("BULLET", new BusAnimationSequence().addPos(ammo == 0 ? 1 : 0, 0, 0, 0).addPos(0, 0, 0, 1000)); case RELOAD_END: return new BusAnimation() .addBus("LIFT", new BusAnimationSequence().addPos(-25, 0, 0, 0).addPos(-25, 0, 0, 750).addPos(0, 0, 0, 500, IType.SIN_FULL)) .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 250).addPos(0, 0, -1, 100, IType.SIN_DOWN).addPos(0, 0, -1, 50).addPos(0, 0, 0, 100, IType.SIN_UP)) @@ -182,7 +181,7 @@ public class XFactory762mm { case INSPECT: return new BusAnimation() .addBus("LIFT", new BusAnimationSequence().addPos(-25, 0, 0, 250, IType.SIN_FULL).addPos(-25, 0, 0, 1500).addPos(0, 0, 0, 500, IType.SIN_FULL)) .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, 0, -0.75, 150, IType.SIN_DOWN).addPos(0, 0, -0.75, 1000).addPos(0, 0, 0, 100, IType.SIN_UP)) - .addBus(empty ? "NULL" : "REL", new BusAnimationSequence().addPos(0, 0.125, 1.25, 0).addPos(0, 0.125, 1.25, 500).addPos(0, 0.125, 0.5, 150, IType.SIN_DOWN).addPos(0, 0.125, 0.5, 1000).addPos(0, 0.125, 1.25, 100, IType.SIN_UP)); + .addBus(ammo == 0 ? "NULL" : "REL", new BusAnimationSequence().addPos(0, 0.125, 1.25, 0).addPos(0, 0.125, 1.25, 500).addPos(0, 0.125, 0.5, 150, IType.SIN_DOWN).addPos(0, 0.125, 0.5, 1000).addPos(0, 0.125, 1.25, 100, IType.SIN_UP)); } return null; From faa87edd40f106ab58e996e3ed9f2751bcd1bdc7 Mon Sep 17 00:00:00 2001 From: Wolf Date: Thu, 17 Jul 2025 11:20:15 -0400 Subject: [PATCH 297/491] Modified Radiolysis machine GUI to show rtg pellet location, tried to match with rtg style. I can also update to new gui style used in recent commits, but decided this was a start. --- .../hbm/textures/gui/gui_radiolysis.png | Bin 2722 -> 2925 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/textures/gui/gui_radiolysis.png b/src/main/resources/assets/hbm/textures/gui/gui_radiolysis.png index 16740bcd3b411f5662dbbab0d5a815a7fd0445e2..ebf7ab0e8fc27ac32c7b169737cd57c89f2acdca 100644 GIT binary patch literal 2925 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 F{sVt`5s3f* literal 2722 zcmcImX;c$d7JeZC0JcS0+l#>*lRGk&V#v!4HVjr}Rv8-ZOx`JFzbX>Sw*zJKQo{>98uoWIFCJD+%osU&!0Nfqats5@EluTf`QvsBW^=1pMpZbJ2NXWa z3IR{eNB1}bZqU(*Fl9K9eZRVT<*I_TwDfeOiH#kO$#z8JKK`8oEQfWJabz=7QwNjD z!9kZZMd(WdH=Sc;0L_;jPkqV|97yYYKcqYLB{o3Y+61Bq2N?$KlzUYnDwZ<5Vc-?7 zEd*w&=pz08a9tRL(wiqrlLkG8IFM?1<=5fFl#;Z;EsUOe@NMI=Z?df2>t~``j+#jO z5@(lTKKLKnGY@O-?eH4U(obR^xoU?iN;MITaRiT^Vx0DE+UaOmc|AadFEP+<3A-s3iNl8y1jA-u4&49IKRq@kW+ZPu zEO5Jx|BH!~*z;2mQqcB`86it-PN%*ymc2uw5%-tbI`Z+oS56Lb zs+}=n6N`~1C>668vd($~HyhOYlkvd1qf)QeZH;{~#sOhDj&jl7?VQAHJR|Fu_?$2B zmMJI5(opmU-FeXebT8kW678a&(AvZ7P-m$d8bU-&Wr}=2dCtcnRoxi2WhEJqQFQ0i zfjo_KNy2dnXGw6~L>SaEi}X{v*#X_A>i|_6^tLq3I?n>?jS!KzyeEI7B728yvNQHf zp2v-6GL75VbNt#`x(Eedip67e8_g-^@^nJML+Y0CgWFV^cA8MGsP5Nnw5bc(z$j97 z>ON5c;=6QHj`#^ubp`E0h2$zo47a7(#@9t$i5Onqw#3~kH=`lnm z3=J@~zl(01<}Vg&)RKiPF*p(5Dm25GKrf5W(iB3uhJp{F3ty0~6pZaPRnDOrDaZIe zc!)RV*tI{+7zW*Cxz@KcvEA+#lA7H6`R&n5Q4$A(1@@@E~J9WP7S z3u?002TD>YE8E-GZYISek6gA02YJ6DA(MtRW5?~R)|Rx+HLC6iT1tutXyIb*;ecRf^C9P0kB71!w~&C zd=?-(+>Hg=616RE-ZVw8VJ$ys_s%;eCm-sar|NP`iwAUONfs^jt7F02m zb%?XLVDi;s6ErDfG8XdUlST()cE@poN;oP9bche1a2CJUvmkXJ`Sx`8bSnrkeY7BV zdED>}cpCT#bB-3g-;9;YA7ntD*hk;FKFMr*P2UaNBNVtoa~T&Wk?t(9W9ga9$~G@Y z7xn6zweih;R33v6sQL`&3d-I08Rp+V%nz!PV5^szQ@o#S4d?KyLtc&6c_^wAiqAsk zx>EJ*H}tMnioNyV5WFRyhl_-fUUm)ZGv&UmMw&^Cx)$etW{UnzpO?sXN3*b~TbxlN zz5}_z30(z`)Sd?s_Eie)UhBY5scAk*<=Ab-AIAMEus9pqNTw7ZkR^%T71Fe7FU9S< zuFR*E{7|!XqINTIIytnkE;)P81!0+m7g^?y);M6F2^jG+6^vyJno`;VLU~7(z}VOX zadWb7LZYj6CZ+Dt8)#}p{+@ID4dX2c>!{spC`N5b2QPF_{ifWv*@c+84&p_dn{$PX zH=vfyIU@hW=i?cBm5}Z~wKE>VBD2SVo4YXH8ivK8F{l8w8*k6nd zY8jE4jwxJ>jIBv`nSq~;Dyjan3a4owQD!U1`S(lytKWZg;IGDifksxtVH)*nPNw<) zj%#ujLKoNiT(7u;sk?ACdTstg;e&Mb|1Hv&wSS~9m%E6OJEQV@H$T6RuAUN}qf)pP zoG}p=6My~s>Z_z5eDHw5=kwi|aEXUd-8A0Gm6o0+%5*@yU?BYe$mtLJQf1C Date: Thu, 17 Jul 2025 21:22:38 +0300 Subject: [PATCH 298/491] Fix RBMK console rotation --- .../machine/rbmk/TileEntityRBMKConsole.java | 103 +++++++++++------- 1 file changed, 61 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index bdb21f97c..0382b50c0 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -89,44 +89,28 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon double flux = 0; - for(int i = -7; i <= 7; i++) { - for(int j = -7; j <= 7; j++) { - int rx = i, rz = j; - switch (rotation) { - case 1: // 90° - rx = -j; - rz = i; - break; - case 2: // 180° - rx = -i; - rz = -j; - break; - case 3: // 270° - rx = j; - rz = -i; - break; + for(int index = 0; index < columns.length; index++) { + int rx = getXFromIndex(index); + int rz = getZFromIndex(index); + + TileEntity te = Compat.getTileStandard(worldObj, targetX + rx, targetY, targetZ + rz); + + if(te instanceof TileEntityRBMKBase) { + + TileEntityRBMKBase rbmk = (TileEntityRBMKBase)te; + + columns[index] = new RBMKColumn(rbmk.getConsoleType(), rbmk.getNBTForConsole()); + columns[index].data.setDouble("heat", rbmk.heat); + columns[index].data.setDouble("maxHeat", rbmk.maxHeat()); + if(rbmk.isModerated()) columns[index].data.setBoolean("moderated", true); //false is the default anyway and not setting it when we don't need to reduces cruft + + if(te instanceof TileEntityRBMKRod) { + TileEntityRBMKRod fuel = (TileEntityRBMKRod) te; + flux += fuel.lastFluxQuantity; } - TileEntity te = Compat.getTileStandard(worldObj, targetX + rx, targetY, targetZ + rz); - int index = (i + 7) + (j + 7) * 15; - - if(te instanceof TileEntityRBMKBase) { - - TileEntityRBMKBase rbmk = (TileEntityRBMKBase)te; - - columns[index] = new RBMKColumn(rbmk.getConsoleType(), rbmk.getNBTForConsole()); - columns[index].data.setDouble("heat", rbmk.heat); - columns[index].data.setDouble("maxHeat", rbmk.maxHeat()); - if(rbmk.isModerated()) columns[index].data.setBoolean("moderated", true); //false is the default anyway and not setting it when we don't need to reduces cruft - - if(te instanceof TileEntityRBMKRod) { - TileEntityRBMKRod fuel = (TileEntityRBMKRod) te; - flux += fuel.lastFluxQuantity; - } - - } else { - columns[index] = null; - } + } else { + columns[index] = null; } } @@ -281,8 +265,9 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon if(key.startsWith("sel_")) { - int x = data.getInteger(key) % 15 - 7; - int z = data.getInteger(key) / 15 - 7; + int index = data.getInteger(key); + int x = getXFromIndex(index); + int z = getZFromIndex(index); TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + z); @@ -322,8 +307,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon int[] cols = data.getIntArray("cols"); for(int i : cols) { - int x = i % 15 - 7; - int z = i / 15 - 7; + int x = getXFromIndex(i); + int z = getZFromIndex(i); TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + z); @@ -339,8 +324,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon int[] cols = data.getIntArray("cols"); for(int i : cols) { - int x = i % 15 - 7; - int z = i / 15 - 7; + int x = getXFromIndex(i); + int z = getZFromIndex(i); TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + z); @@ -404,6 +389,40 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon rotation = (byte)((rotation + 1) % 4); } + public int getXFromIndex(int col) { + final int i = col % 15 - 7; + final int j = col / 15 - 7; + switch (rotation) { + case 0: // 0° + return i; + case 1: // 90° + return -j; + case 2: // 180° + return -i; + case 3: // 270° + return j; + } + + return i; + } + + public int getZFromIndex(int col) { + final int i = col % 15 - 7; + final int j = col / 15 - 7; + switch (rotation) { + case 0: // 0° + return j; + case 1: // 90° + return i; + case 2: // 180° + return -j; + case 3: // 270° + return -i; + } + + return j; + } + public static class RBMKColumn { public ColumnType type; From 0c5077b54aa19749864e489c76e1f35094cf6a3b Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 17 Jul 2025 21:40:32 +0300 Subject: [PATCH 299/491] Don't forget OpenComputers --- .../machine/rbmk/TileEntityRBMKConsole.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index 0382b50c0..db38eed4b 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -575,13 +575,32 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon int x = args.checkInteger(0) - 7; int y = -args.checkInteger(1) + 7; - int i = (y + 7) * 15 + (x + 7); + int i = x; + int j = y; + switch (rotation) { + case 0: + break; + case 1: + i = y; + j = -x; + break; + case 2: + i = -x; + j = -y; + break; + case 3: + i = -y; + j = x; + break; + } + + int index = (j + 7) * 15 + (i + 7); TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + y); if (te instanceof TileEntityRBMKBase) { TileEntityRBMKBase column = (TileEntityRBMKBase) te; - NBTTagCompound column_data = columns[i].data; + NBTTagCompound column_data = columns[index].data; LinkedHashMap data_table = new LinkedHashMap<>(); data_table.put("type", column.getConsoleType().name()); data_table.put("hullTemp", column_data.getDouble("heat")); From 5fb88801ec665515073304dbdd4a583624242c91 Mon Sep 17 00:00:00 2001 From: PewPewCricket Date: Thu, 17 Jul 2025 14:04:52 -0500 Subject: [PATCH 300/491] add oc compat for fluid pump --- .../com/hbm/blocks/network/FluidPump.java | 157 ++++++++++++++++-- 1 file changed, 142 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/FluidPump.java b/src/main/java/com/hbm/blocks/network/FluidPump.java index 416b1c579..746622c0c 100644 --- a/src/main/java/com/hbm/blocks/network/FluidPump.java +++ b/src/main/java/com/hbm/blocks/network/FluidPump.java @@ -3,6 +3,12 @@ package com.hbm.blocks.network; import java.util.ArrayList; import java.util.List; +import com.hbm.handler.CompatHandler; +import cpw.mods.fml.common.Optional; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.SimpleComponent; import org.lwjgl.input.Keyboard; import com.hbm.blocks.ILookOverlay; @@ -93,7 +99,7 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo return true; } } - + if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); return true; } @@ -123,40 +129,41 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo public int transformMeta(int meta, int coordBaseMode) { return INBTTransformable.transformMetaDeco(meta, coordBaseMode); } - - public static class TileEntityFluidPump extends TileEntityLoadedBase implements IFluidStandardTransceiverMK2, IControlReceiver { - + + @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) + public static class TileEntityFluidPump extends TileEntityLoadedBase implements IFluidStandardTransceiverMK2, IControlReceiver, SimpleComponent, CompatHandler.OCComponent { + public int bufferSize = 100; public FluidTank[] tank; public ConnectionPriority priority = ConnectionPriority.NORMAL; public boolean redstone = false; - + public TileEntityFluidPump() { this.tank = new FluidTank[1]; this.tank[0] = new FluidTank(Fluids.NONE, bufferSize); } - + @Override public void updateEntity() { - + if(!worldObj.isRemote) { - + // if the capacity were changed directly, any excess buffered fluid would be destroyed // when running a closed loop or handling hard to get fluids, that's quite bad if(this.bufferSize != this.tank[0].getMaxFill()) { int nextBuffer = Math.max(this.tank[0].getFill(), this.bufferSize); this.tank[0].changeTankSize(nextBuffer); } - + this.redstone = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); - + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); ForgeDirection in = dir.getRotation(ForgeDirection.UP); ForgeDirection out = in.getOpposite(); - + this.trySubscribe(tank[0].getTankType(), worldObj, xCoord + in.offsetX, yCoord, zCoord + in.offsetZ, in); if(!redstone) this.tryProvide(tank[0], worldObj, xCoord + out.offsetX, yCoord, zCoord + out.offsetZ, out); - + this.networkPackNT(15); } } @@ -192,7 +199,7 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, buf.readByte()); bufferSize = buf.readInt(); } - + @Override public ConnectionPriority getFluidPriority() { return priority; } @Override public FluidTank[] getSendingTanks() { return redstone ? new FluidTank[0] : tank; } @Override public FluidTank[] getReceivingTanks() { return this.bufferSize < this.tank[0].getFill() ? new FluidTank[0] : tank; } @@ -214,9 +221,129 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo if(data.hasKey("priority")) { priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, data.getByte("priority")); } - + this.markDirty(); } + + @Override + @Optional.Method(modid = "OpenComputers") + public String getComponentName() { + return "ntm_fluid_pump"; + } + + @Callback(direct = true, limit = 4) + @Optional.Method(modid = "OpenComputers") + public Object[] getFluid(Context context, Arguments args) { + return new Object[] { + tank[0].getTankType().getUnlocalizedName() + }; + } + + @Callback(direct = true, limit = 4) + @Optional.Method(modid = "OpenComputers") + public Object[] getPressure(Context context, Arguments args) { + return new Object[] { + tank[0].getPressure() + }; + } + + @Callback(direct = true, limit = 4) + @Optional.Method(modid = "OpenComputers") + public Object[] getFlow(Context context, Arguments args) { + return new Object[] { + bufferSize + }; + } + + @Callback(direct = true, limit = 4) + @Optional.Method(modid = "OpenComputers") + public Object[] getPriority(Context context, Arguments args) { + return new Object[] { + getFluidPriority() + }; + } + + @Callback(direct = true, limit = 4) + @Optional.Method(modid = "OpenComputers") + public Object[] getInfo(Context context, Arguments args) { + return new Object[] { + tank[0].getTankType().getUnlocalizedName(), + tank[0].getPressure(), + bufferSize, + getFluidPriority() + }; + } + + @Callback(direct = true, limit = 4) + @Optional.Method(modid = "OpenComputers") + public Object[] setPriority(Context context, Arguments args) { + int num = args.checkInteger(0); + switch (num) { + case 0: + priority = ConnectionPriority.LOWEST; + break; + case 1: + priority = ConnectionPriority.LOW; + break; + case 2: + priority = ConnectionPriority.NORMAL; + break; + case 3: + priority = ConnectionPriority.HIGH; + break; + case 4: + priority = ConnectionPriority.HIGHEST; + break; + default: + return new Object[] {null, "Not a valid Priority."}; + } + return new Object[] {true}; + } + + @Callback(direct = true, limit = 4) + @Optional.Method(modid = "OpenComputers") + public Object[] setFlow(Context context, Arguments args) { + int input = args.checkInteger(0); + if (input > 10000 || input < 0) + return new Object[] {null, "Number outside of bounds."}; + return new Object[] {true}; + } + + @Override + @Optional.Method(modid = "OpenComputers") + public String[] methods() { + return new String[] { + "getPriority", + "getPressure", + "getFluid", + "getFlow", + "getInfo", + "setPriority", + "setFlow" + }; + } + + @Override + @Optional.Method(modid = "OpenComputers") + public Object[] invoke(String method, Context context, Arguments args) throws Exception { + switch (method) { + case ("getPriority"): + return getPriority(context, args); + case ("getPressure"): + return getPressure(context, args); + case ("getFluid"): + return getFluid(context, args); + case ("getFlow"): + return getFlow(context, args); + case ("getInfo"): + return getInfo(context, args); + case ("setPriority"): + return setPriority(context, args); + case ("setFlow"): + return setFlow(context, args); + } + throw new NoSuchMethodException(); + } } public static class GUIPump extends GuiScreen { @@ -261,7 +388,7 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo drawString(fontRendererObj, "Priority:", this.width / 2 + 50, 80, 0xA0A0A0); buttonPriority.drawButton(mc, mouseX, mouseY); - + super.drawScreen(mouseX, mouseY, partialTicks); } From 8686a6414150ab5338c7a74147b9f4503a69717d Mon Sep 17 00:00:00 2001 From: PewPewCricket Date: Thu, 17 Jul 2025 14:46:57 -0500 Subject: [PATCH 301/491] fix CCGT allowing throttle over max when using OpenComputers callbacks --- .../machine/TileEntityMachineTurbineGas.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index b0705734c..0ce97569d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -105,11 +105,11 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement tanks[0].setTankType(fluid); } } - + if(autoMode) { //power production depending on power requirement and fuel level - + int powerSliderTarget; - + //when low on fuel, decrease consumption linearly if(tanks[0].getFill() * 10 > tanks[0].getMaxFill()) { powerSliderTarget = 60 - (int) (60 * power / maxPower); //scales the slider proportionally to the power gauge @@ -117,7 +117,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement else { powerSliderTarget = (int) ( tanks[0].getFill() * 0.0001 * (60 - (int) (60 * power / maxPower)) ); } - + if(powerSliderTarget > powerSliderPos) { //makes the auto slider slide instead of snapping into position powerSliderPos++; } @@ -403,12 +403,12 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement double waterPerTick = (consMax * energy * (temp - tempIdle) / 220000); //it just works fuck you this.waterToBoil = waterPerTick; //caching in a field for the EC compat to use - + int heatCycles = (int) Math.floor(waterToBoil); int waterCycles = tanks[2].getFill(); int steamCycles = (tanks[3].getMaxFill() - tanks[3].getFill()) / 10; int cycles = BobMathUtil.min(heatCycles, waterCycles, steamCycles); - + tanks[2].setFill(tanks[2].getFill() - cycles); tanks[3].setFill(tanks[3].getFill() + cycles * 10); } @@ -619,8 +619,11 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement @Callback(direct = true, limit = 4) @Optional.Method(modid = "OpenComputers") public Object[] setThrottle(Context context, Arguments args) { - powerSliderPos = (int) (args.checkInteger(0) * 60D / 100D); - return new Object[] {}; + double input = args.checkInteger(0) * 60D / 100D; + if (input < 0 || input > 100) + return new Object[] {null, "Input out of range."}; + powerSliderPos = (int) (input); + return new Object[] {true}; } @Callback(direct = true, limit = 4) From 06930f6ec810f10b04d8e2ab346226d7d6ba5446 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Fri, 18 Jul 2025 11:57:22 +0300 Subject: [PATCH 302/491] update uk_UA --- src/main/resources/assets/hbm/lang/uk_UA.lang | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 8d019103e..623aa6faa 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -773,6 +773,7 @@ container.leadBox=Свинцевий ящик container.machineAmmoPress=Прес для боєприпасів container.machineArcWelder=Дуговий зварювальник container.machineArcFurnaceLarge=Дугова піч +container.machineAssemblyMachine=Збиральна машина container.machineBoiler=Нагрівач нафти container.machineChemicalFactory=Хімічна фабрика container.machineChemicalPlant=Хімічний завод @@ -925,7 +926,7 @@ damage.item=Опір до: damage.category.EN=Енергії damage.category.EXPL=Вибухів damage.category.FIRE=Вогню -damage.category.PROJ=Снарядів +damage.category.PHYS=Фізики damage.exact.drown=Утоплення damage.exact.fall=Падіння damage.exact.LASER=Лазерів @@ -1033,7 +1034,7 @@ desc.gui.rtg.pellets=Допустимі пелети: desc.gui.rtg.pelletHeat=%s (%s тепла) desc.gui.rtg.pelletPower=%s (%s HE/тік) desc.gui.template=§9Шаблони§r$Шаблони можна створювати за$допомогою Папки шаблонів машин. -desc.gui.turbinegas.automode=§2Режим автоматичного дроселювання турбіни§r$Натиснувши кнопку "AUTO", турбіна$втоматично відрегулює виробництво електроенергії$на основі необхідної енергії в мережі +desc.gui.turbinegas.automode=§2Режим автоматичного дроселювання турбіни§r$Натиснувши кнопку "AUTO", турбіна$втоматично відрегулює виробництво електроенергії$на основі необхідної енергії в мережі$та рівня палива у внутрішньому баку desc.gui.turbinegas.fuels=§6Допустимі види палива:§r desc.gui.turbinegas.warning=§cНизький рівень палива або мастила!§r desc.gui.zirnox.coolant=§3Охолодження§r$CO2 передає тепло від реактора до води.$Це скип'ятить її до надзвичайно гарячу пару$Ефективність охолодження та виробництва пари$залежить від тиску. @@ -1805,6 +1806,7 @@ item.ammo_secret.folly_sm.name=Срібна куля item.ammo_secret.g12_equestrian.name=Флешетний снаряд з залізничними цвяхами 12-го калібру item.ammo_secret.m44_equestrian.name=.44 Magnum Череполом item.ammo_secret.p35_800.name=.35-800 V9 +item.ammo_secret.p35_800_bl.name=.35-800 V9 (Чорна блискавка) item.ammo_standard.b75.name=Болт .75 item.ammo_standard.b75_exp.name=Болт .75 (Розривний) item.ammo_standard.b75_inc.name=Болт .75 (Запальний) @@ -2159,6 +2161,7 @@ item.blades_desh.name=Деш леза подрібнювача item.blades_steel.name=Стальні леза подрібнювача item.blades_titanium.name=Титанові леза подрібнювача item.blowtorch.name=Паяльна лампа +item.blueprints.name=Креслення item.board_copper.name=Мідна панель item.boat_rubber.name=Гумовий човен item.bobmazon.name=Бобмазон @@ -2389,6 +2392,7 @@ item.chopper_torso.name=Корпус Гвинтокрила Мисливця item.chopper_wing.name=Крило Гвинтокрила Мисливця item.chunk_ore.malachite.name=Шматок малахіту item.chunk_ore.rare.name=Шматок рідкоземельної руди +item.chunk_ore.moonstone.name=Місячний камінь item.chunk_ore.cryolite.name=Шматок кріоліту item.cigarette.name=Сигарети торгової марки FFI item.cinnebar.name=Кіновар @@ -3992,6 +3996,7 @@ item.radx.desc=Збільшує стійкість до радіації на 0. item.rag.name=Тканина item.rag_damp.name=Волога тканина item.rag_piss.name=Просочена сечею ганчірка +item.rangefinder.name=Прилад для вимірювання відстані item.rbmk_fuel_balefire.name=Паливний стрижень РБМК BF item.rbmk_fuel_balefire_gold.name=Паливний стрижень РБМК флешголду item.rbmk_fuel_drx.name=§cПаливний стрижень РБМК Дігамма§r @@ -5276,6 +5281,7 @@ tile.ducrete_smooth_stairs.name=Сходи з уранобетону tile.dummy_block.name=Dummy Block tile.dummy_port.name=Dummy Block (Electricity Port) tile.dungeon_chain.name=Металевий ланцюг +tile.logic_block.name=Dungeon Action Block tile.dynamite.name=Динаміт tile.emp_bomb.name=Пристрій електромагнітного іпульсу tile.factory_advanced_conductor.name=Advanced Factory Electricity Port @@ -5475,8 +5481,9 @@ tile.machine_arc_welder.name=Дуговий зварювальник tile.machine_armor_table.name=Стіл модифікації броні tile.machine_ashpit.name=Зольник tile.machine_ashpit.desc=Збирає попіл з топок та нагрівальних печей -tile.machine_assembler.name=Збиральна машина +tile.machine_assembler.name=Збиральна машина (Legacy) tile.machine_assemfac.name=Збиральна фабрика +tile.machine_assembly_machine.name=Збиральна машина tile.machine_autocrafter.name=Автоматичний верстак tile.machine_autosaw.name=Автоматична пила tile.machine_autosaw.desc=Вирубує рослини поруч, заново висажує дерева$Приймає:$-Деревну смолу$-Етанол$-Риб'ячий жир$-Важку нафту @@ -5799,6 +5806,7 @@ tile.plasma_heater.name=Нагрівач плазми tile.plushie.name=%s плюшка tile.pneumatic_tube.name=Пневматична труба tile.pneumatic_tube.desc=Надсилає предмети за допомогою стисненого повітря.$Клацніть правою кнопкою миші викруткою, щоб перемкнути вхід.$Клацніть правою кнопкою миші з шифтом та викруткою, щоб перемкнути вихід.$Входи можна налаштувати та підключити до стисненого повітря.$Надсилає один стак чотири рази на секунду. +tile.pneumatic_tube_paintable.name=Пневматична труба, яку можна пофарбувати tile.pole_satellite_receiver.name=Супутникова тарілка tile.pole_top.name=Верхівка антени tile.press_preheater.name=Burner Press Preheater @@ -6058,6 +6066,7 @@ tile.volcano_rad_core.name=Радіоактивне вулканічне ядр tile.wand_air.name=Structure Wand Block (Air) tile.wand_loot.name=Structure Wand Block (Lootable) tile.wand_jigsaw.name=Structure Wand Block (Jigsaw) +tile.wand_logic.name=Structure Wand Block (Logic) tile.waste_earth.name=Мертва трава tile.waste_leaves.name=Мертве листя tile.waste_log.name=Обвуглене дерево @@ -6221,4 +6230,6 @@ desc.gui.upgrade.afterburner= * §dФорсаж§r: Складається до desc.gui.upgrade.effectiveness= * §aЕфективність§r: Складається до 3 рівнів desc.gui.upgrade.overdrive= * §7Перевантаження§r: Складається до 3 рівнів desc.gui.upgrade.power= * §1Енергозбереження§r: Складається до 3 рівнів -desc.gui.upgrade.speed= * §4Швидкість§r: Складається до 3 рівнів \ No newline at end of file +desc.gui.upgrade.speed= * §4Швидкість§r: Складається до 3 рівнів + +tile.oc_cable_paintable.name=Мережевий кабель, який можна фарбувати \ No newline at end of file From b7641dcd54c57702c8e95c7d925a1f515ff567ab Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 18 Jul 2025 23:34:43 +0200 Subject: [PATCH 303/491] now's your chance to take a [BIG SHIT] --- changelog | 25 ++++++++++++- .../java/com/hbm/crafting/ToolRecipes.java | 2 +- .../java/com/hbm/handler/CompatHandler.java | 2 -- .../gui/GUIScreenTemplateFolder.java | 19 ---------- .../recipes/AssemblyMachineRecipes.java | 25 ++++++++++++- .../recipes/ChemicalPlantRecipes.java | 15 -------- .../com/hbm/itempool/ItemPoolsLegacy.java | 2 -- src/main/java/com/hbm/items/ModItems.java | 20 +++++++---- .../items/machine/ItemAssemblyTemplate.java | 5 ++- .../com/hbm/items/machine/ItemBlueprints.java | 14 ++++++-- .../hbm/items/machine/ItemChemistryIcon.java | 1 + .../items/machine/ItemChemistryTemplate.java | 5 ++- .../com/hbm/items/machine/ItemFluidTank.java | 33 ++++++------------ .../weapon/sedna/factory/Orchestras.java | 9 ++++- .../weapon/sedna/factory/XFactory12ga.java | 2 +- .../machine/ModuleMachineAssembler.java | 9 +++++ .../tileentity/RenderAssemblyMachine.java | 3 -- .../TileEntityMachineAssemblyMachine.java | 14 ++++++-- .../TileEntityMachineChemicalFactory.java | 14 +++++++- .../TileEntityMachineChemicalPlant.java | 10 +++++- src/main/java/com/hbm/util/ShadyUtil.java | 4 +-- .../gen/util/LogicBlockInteractions.java | 6 ---- src/main/resources/assets/hbm/lang/de_DE.lang | 8 +++-- src/main/resources/assets/hbm/lang/en_US.lang | 8 +++-- src/main/resources/assets/hbm/sounds.json | 1 + .../assets/hbm/sounds/weapon/hkShoot.ogg | Bin 0 -> 13919 bytes .../assets/hbm/textures/items/fluid_pack.png | Bin 0 -> 477 bytes .../hbm/textures/items/fluid_pack_overlay.png | Bin 0 -> 201 bytes .../hbm/textures/items/fluid_tank_lead.png | Bin 262 -> 289 bytes .../items/fluid_tank_lead_overlay.png | Bin 132 -> 180 bytes 30 files changed, 154 insertions(+), 102 deletions(-) create mode 100644 src/main/resources/assets/hbm/sounds/weapon/hkShoot.ogg create mode 100644 src/main/resources/assets/hbm/textures/items/fluid_pack.png create mode 100644 src/main/resources/assets/hbm/textures/items/fluid_pack_overlay.png diff --git a/changelog b/changelog index 00743753b..07f6038d5 100644 --- a/changelog +++ b/changelog @@ -9,8 +9,18 @@ * Replace the journals * Instead of opening them and making a template, they act as a multi template * Blueprints need to remain in the slot, removing them will disable the recipes again +* More paintables + * Paintable pneumatic tube + * Behaves the exact same as a regular pneumatic tube + * Can also be used as in and outputs + * Full block + * Paintable OpenComputers cable + * Only enabled if OpenComputers is installed + * Full block + * Also supports OC wire colors ## Changed +* Updated chinese and ukrainian localization * Removed levitation unit * Many of NTM's regular building blocks now have forge microblock support * RBMK crane models now conform to the dimensions of the room they're in @@ -19,9 +29,22 @@ * Electric attacks (i.e. tesla cannon) are now in the "energy damage" category * This means that armors that have energy resistance actually properly work against the tesla cannon * Heavy components are being deprecated +* Flow control pumps can now be interfaced with OpenComputers +* The electrolyzer now remembers the last visited GUI screen +* Retextured many fluid containers such as universal tanks, canisters and gas tanks +* Removed the legacy assembler and chemical plant recipes from the template folder +* Removed journals from various loot pools +* Drinking whiskey now gives strength III, resistance III and nausea +* Chemical artillery shell recipes have now been moved to the assembler +* The chemical plant and factory now scale their max power based on the recipe, similar to how the arc welder works +* The chemical plant's default max power is now 100kHE again instead of 1MHE ## Fixed * Fixed gas centrifuge sound persisting when broken or when unloaded * Fixed all centrifuge sounds trying to play even when the player is far away, using up audio slots * Fixed guns that don't have durability always displaying a condition of 0% -* Fixed GL state leak caused by skeletons \ No newline at end of file +* Fixed GL state leak caused by skeletons +* Fixed OpenComputers integration for the CCGT +* Fixed rotated RBMK consoles not behaving correctly when trying to change rod insertion levels +* Fixed crash caused by piston inserters on servers +* Fixed flare gun not having a firing sound diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index de9dc346f..b01ee10cf 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -113,7 +113,7 @@ public class ToolRecipes { //Utility CraftingManager.addRecipeAuto(new ItemStack(ModItems.rangefinder, 1), new Object[] { "GRC", " S", 'G', KEY_ANYPANE, 'R', REDSTONE.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'S' ,STEEL.plate() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator, 1), new Object[] { " A", "#B#", "#B#", '#', IRON.plate(), 'A', STEEL.plate(), 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator, 1), new Object[] { " A", "#B#", "#B#", '#', ANY_PLASTIC.ingot(), 'A', STEEL.plate(), 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.designator_range, 1), new Object[] { ModItems.rangefinder, ModItems.designator, ANY_PLASTIC.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator_manual, 1), new Object[] { " A", "#C#", "#B#", '#', ANY_PLASTIC.ingot(), 'A', PB.plate(), 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'C', ModItems.designator }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.designator_arty_range, 1), new Object[] { ModItems.rangefinder, DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), ANY_PLASTIC.ingot() }); diff --git a/src/main/java/com/hbm/handler/CompatHandler.java b/src/main/java/com/hbm/handler/CompatHandler.java index ac4bbe114..feb113b7a 100644 --- a/src/main/java/com/hbm/handler/CompatHandler.java +++ b/src/main/java/com/hbm/handler/CompatHandler.java @@ -1,7 +1,6 @@ package com.hbm.handler; import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.network.BlockOpenComputersCablePaintable; import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; @@ -17,7 +16,6 @@ import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.*; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.oredict.OreDictionary; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java index 134b83c75..aebfa05ee 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java @@ -10,16 +10,11 @@ import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.AssemblerRecipes; -import com.hbm.inventory.recipes.AssemblerRecipes.AssemblerRecipe; -import com.hbm.inventory.recipes.ChemplantRecipes; -import com.hbm.inventory.recipes.ChemplantRecipes.ChemRecipe; import com.hbm.inventory.recipes.CrucibleRecipes; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.items.machine.ItemCassette; import com.hbm.items.machine.ItemStamp; import com.hbm.items.machine.ItemStamp.StampType; @@ -83,22 +78,8 @@ public class GUIScreenTemplateFolder extends GuiScreen { } } } - - // Assembly Templates - for(int i = 0; i < AssemblerRecipes.recipeList.size(); i++) { - ComparableStack comp = AssemblerRecipes.recipeList.get(i); - AssemblerRecipe recipe = AssemblerRecipes.recipes.get(comp); - if(recipe != null && recipe.folders.contains(item)) { - allStacks.add(ItemAssemblyTemplate.writeType(new ItemStack(ModItems.assembly_template, 1, i), comp)); - } - } if(!this.isJournal) { - // Chemistry Templates - for(int i = 0; i < ChemplantRecipes.recipes.size(); i++) { - ChemRecipe chem = ChemplantRecipes.recipes.get(i); - allStacks.add(new ItemStack(ModItems.chemistry_template, 1, chem.getId())); - } // Crucible Templates for(int i = 0; i < CrucibleRecipes.recipes.size(); i++) { diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index c6e98b525..a8444a256 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -16,6 +16,7 @@ import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.material.Mats; import com.hbm.inventory.recipes.loader.GenericRecipe; @@ -233,7 +234,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.epress").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_epress, 1)) .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.fel").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_fel, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.part_generic, 4, EnumPartType.GLASS_POLARIZED), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.silex").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_silex, 1)) .inputItems(new ComparableStack(ModBlocks.glass_quartz, 16), new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(DESH.ingot(), 4), new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(STEEL.pipe(), 8))); this.register(new GenericRecipe("ass.excavator").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_excavator, 1)) @@ -669,6 +670,15 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.50bmgbypass").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_secret, 12, EnumAmmoSecret.BMG50_BLACK.ordinal())) .inputItems(new ComparableStack(ModItems.casing, 2, EnumCasingType.LARGE_STEEL), new OreDictStack(ANY_SMOKELESS.dust(), 24), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.black_diamond)) .setPools(GenericRecipes.POOL_PREFIX_SECRET + "psalm")); + this.register(new GenericRecipe("chem.shellchlorine").setup(100, 1_000).outputItems(new ItemStack(ModItems.ammo_arty, 1, 9)) + .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) + .inputFluids(new FluidStack(Fluids.CHLORINE, 4_000))); + this.register(new GenericRecipe("ass.shellphosgene").setup(100, 1_000).outputItems(new ItemStack(ModItems.ammo_arty, 1, 10)) + .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) + .inputFluids(new FluidStack(Fluids.PHOSGENE, 4_000))); + this.register(new GenericRecipe("ass.shellmustard").setup(100, 1_000).outputItems(new ItemStack(ModItems.ammo_arty, 1, 11)) + .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) + .inputFluids(new FluidStack(Fluids.MUSTARDGAS, 4_000))); // tools this.register(new GenericRecipe("ass.multitool").setup(100, 100).outputItems(new ItemStack(ModItems.multitool_hit, 1)) @@ -773,6 +783,19 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM), new ComparableStack(ModItems.coin_ufo, 1)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "gerald")); + + this.register(new GenericRecipe("ass.emptypackage").setup(40, 100).outputItems(new ItemStack(ModItems.fluid_pack_empty, 1)) + .inputItems(new OreDictStack(TI.plate(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 2))); + + FluidType[] order = Fluids.getInNiceOrder(); + for(int i = 1; i < order.length; ++i) { + FluidType type = order[i]; + if(type.hasNoContainer()) continue; + this.register(new GenericRecipe("ass.package" + type.getUnlocalizedName()).setup(100, 100).outputItems(new ItemStack(ModItems.fluid_pack_full, 1, type.getID())) + .inputItems(new ComparableStack(ModItems.fluid_pack_empty)).inputFluids(new FluidStack(type, 32_000))); + this.register(new GenericRecipe("ass.unpackage" + type.getUnlocalizedName()).setup(100, 100).setIcon(ItemFluidIcon.make(type, 32_000)).outputItems(new ItemStack(ModItems.fluid_pack_empty)) + .inputItems(new ComparableStack(ModItems.fluid_pack_full, 1, type.getID())).outputFluids(new FluidStack(type, 32_000))); + } if(GeneralConfig.enableMekanismChanges && Loader.isModLoaded("Mekanism")) { Block mb = (Block) Block.blockRegistry.getObject("Mekanism:MachineBlock"); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index ca4bcc193..4bbf1074c 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -268,21 +268,6 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500, GeneralConfig.enable528 ? 1 : 0)) .outputItems(new ItemStack(ModItems.ingot_c4, 4))); - this.register(new GenericRecipe("chem.shellchlorine").setup(100, 1_000) - .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) - .inputFluids(new FluidStack(Fluids.CHLORINE, 4_000)) - .outputItems(new ItemStack(ModItems.ammo_arty, 1, 9))); - - this.register(new GenericRecipe("chem.shellphosgene").setup(100, 1_000) - .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) - .inputFluids(new FluidStack(Fluids.PHOSGENE, 4_000)) - .outputItems(new ItemStack(ModItems.ammo_arty, 1, 10))); - - this.register(new GenericRecipe("chem.shellmustard").setup(100, 1_000) - .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) - .inputFluids(new FluidStack(Fluids.MUSTARDGAS, 4_000)) - .outputItems(new ItemStack(ModItems.ammo_arty, 1, 11))); - /// GLASS /// this.register(new GenericRecipe("chem.laminate").setup(20, 100) .inputFluids(new FluidStack(Fluids.XYLENE, 50), new FluidStack(Fluids.PHOSGENE, 50)) diff --git a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java index ef3bc5569..289a495e9 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java @@ -130,8 +130,6 @@ public class ItemPoolsLegacy { weighted(ModItems.bomb_caller, 1, 1, 1, 1), weighted(ModItems.bomb_caller, 2, 1, 1, 1), weighted(ModItems.gas_mask_filter, 0, 1, 1, 4), - weighted(ModItems.journal_pip, 0, 1, 1, 1), - weighted(ModItems.journal_bj, 0, 1, 1, 1), weighted(ModItems.launch_code_piece, 0, 1, 1, 1), weighted(ModItems.gun_double_barrel, 0, 1, 1, 1), }; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 3ded60786..41b783fc6 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -844,6 +844,8 @@ public class ModItems { public static Item fluid_barrel_full; public static Item fluid_barrel_empty; public static Item fluid_barrel_infinite; + public static Item fluid_pack_full; + public static Item fluid_pack_empty; public static Item pipette; public static Item pipette_boron; public static Item pipette_laboratory; @@ -1181,12 +1183,12 @@ public class ModItems { public static Item blueprints; public static Item template_folder; - public static Item journal_pip; - public static Item journal_bj; - public static Item journal_silver; - public static Item assembly_template; - public static Item chemistry_template; - public static Item chemistry_icon; + @Deprecated public static Item journal_pip; + @Deprecated public static Item journal_bj; + @Deprecated public static Item journal_silver; + @Deprecated public static Item assembly_template; + @Deprecated public static Item chemistry_template; + @Deprecated public static Item chemistry_icon; public static Item crucible_template; public static Item fluid_identifier; public static Item fluid_identifier_multi; @@ -4115,6 +4117,8 @@ public class ModItems { fluid_barrel_empty = new Item().setUnlocalizedName("fluid_barrel_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel"); fluid_barrel_full = new ItemFluidTank().setUnlocalizedName("fluid_barrel_full").setContainerItem(ModItems.fluid_barrel_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel"); fluid_barrel_infinite = new ItemInfiniteFluid(null, 1_000_000_000).setUnlocalizedName("fluid_barrel_infinite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel_infinite"); + fluid_pack_empty = new Item().setUnlocalizedName("fluid_pack_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_pack"); + fluid_pack_full = new ItemFluidTank().setUnlocalizedName("fluid_pack_full").setContainerItem(ModItems.fluid_pack_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_pack"); pipette = new ItemPipette().setUnlocalizedName("pipette").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette"); pipette_boron = new ItemPipette().setUnlocalizedName("pipette_boron").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette_boron"); pipette_laboratory = new ItemPipette().setUnlocalizedName("pipette_laboratory").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette_laboratory"); @@ -5686,6 +5690,10 @@ public class ModItems { GameRegistry.registerItem(fluid_barrel_empty, fluid_barrel_empty.getUnlocalizedName()); GameRegistry.registerItem(fluid_barrel_full, fluid_barrel_full.getUnlocalizedName()); GameRegistry.registerItem(fluid_barrel_infinite, fluid_barrel_infinite.getUnlocalizedName()); + + //Packaged fluids + GameRegistry.registerItem(fluid_pack_empty, fluid_pack_empty.getUnlocalizedName()); + GameRegistry.registerItem(fluid_pack_full, fluid_pack_full.getUnlocalizedName()); //Pipette GameRegistry.registerItem(pipette, pipette.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java b/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java index 7a1c26a0b..76f38f7d6 100644 --- a/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java @@ -24,6 +24,7 @@ import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; import net.minecraftforge.oredict.OreDictionary; +@Deprecated public class ItemAssemblyTemplate extends Item { @SideOnly(Side.CLIENT) @@ -157,6 +158,7 @@ public class ItemAssemblyTemplate extends Item { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + list.add(EnumChatFormatting.RED + "Deprecated"); if(!(stack.getItem() instanceof ItemAssemblyTemplate)) return; @@ -198,9 +200,6 @@ public class ItemAssemblyTemplate extends Item { a++; } - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("info.templatefolder", String.join(" / ", names))); - list.add(""); - if(out == null) { list.add("I AM ERROR"); return; diff --git a/src/main/java/com/hbm/items/machine/ItemBlueprints.java b/src/main/java/com/hbm/items/machine/ItemBlueprints.java index 84976e8c5..874cfd6f6 100644 --- a/src/main/java/com/hbm/items/machine/ItemBlueprints.java +++ b/src/main/java/com/hbm/items/machine/ItemBlueprints.java @@ -56,13 +56,19 @@ public class ItemBlueprints extends Item { @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list) { for(Entry> pool : GenericRecipes.blueprintPools.entrySet()) { - list.add(make(pool.getKey())); + String poolName = pool.getKey(); + if(!poolName.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) list.add(make(poolName)); } } @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { if(world.isRemote) return stack; + if(!stack.hasTagCompound()) return stack; + + String poolName = stack.stackTagCompound.getString("pool"); + + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) return stack; if(!player.inventory.hasItem(Items.paper)) return stack; player.inventory.consumeInventoryItem(Items.paper); @@ -94,7 +100,6 @@ public class ItemBlueprints extends Item { @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - list.add(EnumChatFormatting.RED + "Right-click to copy (requires paper)"); if(!stack.hasTagCompound()) { return; @@ -106,6 +111,11 @@ public class ItemBlueprints extends Item { if(pool == null || pool.isEmpty()) { return; } + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) { + list.add(EnumChatFormatting.RED + "Cannot be copied!"); + } else { + list.add(EnumChatFormatting.YELLOW + "Right-click to copy (requires paper)"); + } for(String name : pool) { GenericRecipe recipe = GenericRecipes.pooledBlueprints.get(name); diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java b/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java index f3e190dc5..41cd901c9 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java @@ -15,6 +15,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; +@Deprecated public class ItemChemistryIcon extends Item { @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java index d644a4515..b310805b6 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java @@ -16,6 +16,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; +@Deprecated public class ItemChemistryTemplate extends Item { public ItemChemistryTemplate() { @@ -51,6 +52,7 @@ public class ItemChemistryTemplate extends Item { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + list.add(EnumChatFormatting.RED + "Deprecated"); if(!(stack.getItem() instanceof ItemChemistryTemplate)) return; @@ -61,9 +63,6 @@ public class ItemChemistryTemplate extends Item { return; } - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("info.templatefolder", I18nUtil.resolveKey(ModItems.template_folder.getUnlocalizedName() + ".name"))); - list.add(""); - try { list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("info.template_out_p")); for(int i = 0; i < 4; i++) { diff --git a/src/main/java/com/hbm/items/machine/ItemFluidTank.java b/src/main/java/com/hbm/items/machine/ItemFluidTank.java index ce7a2cd0d..a8642652a 100644 --- a/src/main/java/com/hbm/items/machine/ItemFluidTank.java +++ b/src/main/java/com/hbm/items/machine/ItemFluidTank.java @@ -30,9 +30,7 @@ public class ItemFluidTank extends Item { for(int i = 1; i < order.length; ++i) { FluidType type = order[i]; - if(type.hasNoContainer()) - continue; - + if(type.hasNoContainer()) continue; int id = type.getID(); if(type.needsLeadContainer()) { @@ -46,14 +44,10 @@ public class ItemFluidTank extends Item { } } + @Override public String getItemStackDisplayName(ItemStack stack) { - String s = ("" + StatCollector.translateToLocal(this.getUnlocalizedName() + ".name")).trim(); String s1 = ("" + StatCollector.translateToLocal(Fluids.fromID(stack.getItemDamage()).getConditionalName())).trim(); - - if(s1 != null) { - s = s + " " + s1; - } - + String s = ("" + StatCollector.translateToLocalFormatted(this.getUnlocalizedName() + ".name", s1)).trim(); return s; } @@ -68,12 +62,10 @@ public class ItemFluidTank extends Item { public void registerIcons(IIconRegister p_94581_1_) { super.registerIcons(p_94581_1_); - if(this == ModItems.fluid_tank_full) - this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_tank_overlay"); - if(this == ModItems.fluid_tank_lead_full) - this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_tank_lead_overlay"); - if(this == ModItems.fluid_barrel_full) - this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_barrel_overlay"); + if(this == ModItems.fluid_tank_full) this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_tank_overlay"); + if(this == ModItems.fluid_tank_lead_full) this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_tank_lead_overlay"); + if(this == ModItems.fluid_barrel_full) this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_barrel_overlay"); + if(this == ModItems.fluid_pack_full) this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_pack_overlay"); } @Override @@ -84,18 +76,13 @@ public class ItemFluidTank extends Item { @Override @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int p_82790_2_) { - if(p_82790_2_ == 0) { + public int getColorFromItemStack(ItemStack stack, int pass) { + if(pass == 0) { return 16777215; } else { int j = Fluids.fromID(stack.getItemDamage()).getColor(); - - if(j < 0) { - j = 16777215; - } - + if(j < 0) j = 16777215; return j; } } - } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index c13f16a26..33c583b54 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -27,6 +27,8 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.util.DamageSource; import net.minecraft.util.MovingObjectPosition; @@ -942,7 +944,7 @@ public class Orchestras { if(timer == 2) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); - if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? -0.0625 : -0.125, aiming ? 0 : -0.25D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 2.5F, (float)entity.getRNG().nextGaussian() * -20F + 15F, casing.getName(), false, 60, 0.5D, 20); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? -0.0625 : -0.125, aiming ? -0.125 : -0.25D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 2.5F, (float)entity.getRNG().nextGaussian() * -20F + 15F, casing.getName(), false, 60, 0.5D, 20); } } @@ -969,6 +971,11 @@ public class Orchestras { if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); if(timer == 35) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); if(timer == 50) entity.worldObj.playSoundAtEntity(entity, "hbm:player.groan", 1F, 1F); + if(timer == 60) { + entity.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 30 * 20, 2)); + entity.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 2)); + entity.addPotionEffect(new PotionEffect(Potion.confusion.id, 10 * 20, 0)); + } } }; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index 490bd64b7..44f9d046f 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -375,7 +375,7 @@ public class XFactory12ga { ).setUnlocalizedName("gun_autoshotgun_shredder"); ModItems.gun_autoshotgun_sexy = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() - .dura(5_000).draw(20).inspect(33).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).hideCrosshair(false).smoke(Lego.LAMBDA_STANDARD_SMOKE) + .dura(5_000).draw(20).inspect(65).reloadSequential(true).inspectCancel(false).crosshair(Crosshair.L_CIRCLE).hideCrosshair(false).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(64F).delay(4).auto(true).dryfireAfterAuto(true).reload(110).jam(19).sound("hbm:weapon.fire.shotgunAuto", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 100).addConfigs(g12_equestrian_bj, g12_bp, g12_bp_magnum, g12_bp_slug, g12, g12_slug, g12_flechette, g12_magnum, g12_explosive, g12_phosphorus)) diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java index 1823b540b..2316ad787 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java @@ -3,6 +3,7 @@ package com.hbm.module.machine; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.util.BobMathUtil; import api.hbm.energymk2.IEnergyHandlerMK2; import net.minecraft.item.ItemStack; @@ -21,6 +22,14 @@ public class ModuleMachineAssembler extends ModuleMachineBase { public GenericRecipe getRecipe() { return AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.recipe); } + + @Override + public void setupTanks(GenericRecipe recipe) { + super.setupTanks(recipe); + if(recipe == null) return; + for(int i = 0; i < inputTanks.length; i++) if(recipe.inputFluid != null && recipe.inputFluid.length > i) inputTanks[i].changeTankSize(BobMathUtil.max(inputTanks[i].getFill(), recipe.inputFluid[i].fill * 2, 4_000)); + for(int i = 0; i < outputTanks.length; i++) if(recipe.outputFluid != null && recipe.outputFluid.length > i) outputTanks[i].changeTankSize(BobMathUtil.max(outputTanks[i].getFill(), recipe.outputFluid[i].fill * 2, 4_000)); + } public ModuleMachineAssembler itemInput(int from) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = from + i; return this; } public ModuleMachineAssembler itemOutput(int a) { outputSlots[0] = a; return this; } diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java index 1111a998a..5900c0f84 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java @@ -13,13 +13,11 @@ import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine; import com.hbm.util.BobMathUtil; import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; @@ -109,7 +107,6 @@ public class RenderAssemblyMachine extends TileEntitySpecialRenderer implements GL11.glRotated(90, 0, 1, 0); GL11.glTranslated(0, 1.0625, 0); - EntityPlayer player = Minecraft.getMinecraft().thePlayer; ItemStack stack = recipe.getIcon(); stack.stackSize = 1; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java index 2ad98b8c0..ecc1c787c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java @@ -11,6 +11,8 @@ import com.hbm.inventory.container.ContainerMachineAssemblyMachine; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineAssemblyMachine; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; @@ -44,7 +46,7 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl public FluidTank outputTank; public long power; - public long maxPower = 1_000_000; + public long maxPower = 100_000; public boolean didProcess = false; public boolean frame = false; @@ -63,8 +65,8 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl public TileEntityMachineAssemblyMachine() { super(17); - this.inputTank = new FluidTank(Fluids.NONE, 32_000); - this.outputTank = new FluidTank(Fluids.NONE, 32_000); + this.inputTank = new FluidTank(Fluids.NONE, 4_000); + this.outputTank = new FluidTank(Fluids.NONE, 4_000); for(int i = 0; i < this.arms.length; i++) this.arms[i] = new AssemblerArm(); @@ -85,6 +87,12 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl if(!worldObj.isRemote) { + GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assemblerModule.recipe); + if(recipe != null) { + this.maxPower = recipe.power * 100; + } + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 100_000); + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); upgradeManager.checkSlots(slots, 2, 3); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index dfcd1c50d..ca0c259c7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -10,6 +10,8 @@ import com.hbm.inventory.container.ContainerMachineChemicalFactory; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalFactory; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; @@ -49,7 +51,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl public FluidTank lps; public long power; - public long maxPower = 10_000_000; + public long maxPower = 1_000_000; public boolean[] didProcess = new boolean[4]; public boolean frame = false; @@ -130,6 +132,16 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl if(!worldObj.isRemote) { + long nextMaxPower = 0; + for(int i = 0; i < 4; i++) { + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplantModule[i].recipe); + if(recipe != null) { + nextMaxPower += recipe.power * 100; + } + } + this.maxPower = nextMaxPower; + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 1_000_000); + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); upgradeManager.checkSlots(slots, 1, 3); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 6a21f07de..97ebd11bf 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -10,6 +10,8 @@ import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalPlant; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; @@ -43,7 +45,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem public FluidTank[] outputTanks; public long power; - public long maxPower = 1_000_000; + public long maxPower = 100_000; public boolean didProcess = false; public boolean frame = false; @@ -83,6 +85,12 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem if(!worldObj.isRemote) { + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplantModule.recipe); + if(recipe != null) { + this.maxPower = recipe.power * 100; + } + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 100_000); + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); upgradeManager.checkSlots(slots, 2, 3); diff --git a/src/main/java/com/hbm/util/ShadyUtil.java b/src/main/java/com/hbm/util/ShadyUtil.java index 03a2390ab..7f6d3351f 100644 --- a/src/main/java/com/hbm/util/ShadyUtil.java +++ b/src/main/java/com/hbm/util/ShadyUtil.java @@ -144,8 +144,8 @@ public class ShadyUtil { Field field = ReflectionHelper.findField(test, decode(offset(checksum, -2))); if(field != null) { System.out.println("TEST SECTION START"); - Class toLoad = Class.forName(decode(offset(testCase, -2))); - Field toRead = ReflectionHelper.findField(toLoad, decode(offset(testValue, -2))); + //Class toLoad = Class.forName(decode(offset(testCase, -2))); + //Field toRead = ReflectionHelper.findField(toLoad, decode(offset(testValue, -2))); //ModEventHandler.reference = toRead; System.out.println("TEST SECTION END"); } diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java index bf3bc47eb..b9ee4dde1 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java @@ -7,7 +7,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -22,13 +21,8 @@ public class LogicBlockInteractions { public static LinkedHashMap> interactions = new LinkedHashMap<>(); public static Consumer TEST = (array) -> { - World world = (World) array[0]; LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1]; - int x = (int) array[2]; - int y = (int) array[3]; - int z = (int) array[4]; EntityPlayer player = (EntityPlayer) array[5]; - int side = (int) array[6]; if(logic.phase > 1) return; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 1e54344ec..2cc9428b9 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1966,7 +1966,7 @@ item.fleija_igniter.name=Impulszünder item.fleija_kit.name=F.L.E.I.J.A. Kit item.fleija_propellant.name=Schrabidiumtreibladung item.fluid_barrel_empty.name=Leeres Fass -item.fluid_barrel_full.name=Flüssigkeitsfass: +item.fluid_barrel_full.name=Flüssigkeitsfass: %s item.fluid_barrel_infinite.name=Unendliches Fass item.fluid_duct.name=Flüssigkeitsrohr: item.fluid_identifier.name=Flüssigkeits-Kennzeichnung @@ -1977,10 +1977,12 @@ item.fluid_identifier.usage2=einer maximalen Reichweite von 64 Rohren zuzuweisen item.fluid_identifier_multi.name=Multi-Flüssigkeits-Kennzeichnung item.fluid_identifier_multi.info=Universelle Flüssigkeits-Kennzeichnung für: item.fluid_identifier_multi.info2=Sekundärer Typ: +item.fluid_pack_empty.name=Großer Flüssigkeitsbehälter +item.fluid_pack_full.name=%s (Abgepackt) item.fluid_tank_empty.name=Leere universelle Flüssigkeitszelle -item.fluid_tank_full.name=Universelle Flüssigkeitszelle: +item.fluid_tank_full.name=Universelle Flüssigkeitszelle: %s item.fluid_tank_lead_empty.name=Leere Gefahrenstoffzelle -item.fluid_tank_lead_full.name=Gefahrenstoffzelle: +item.fluid_tank_lead_full.name=Gefahrenstoffzelle: %s item.fluorite.name=Fluorit item.flywheel_beryllium.name=Berylliumschwungscheibe item.fmn.name=Flunitrazepamtablette diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index fb3f37c9a..53f1112b2 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2772,7 +2772,7 @@ item.fleija_igniter.name=Pulse Igniter item.fleija_kit.name=F.L.E.I.J.A. Kit item.fleija_propellant.name=Schrabidium Propellant item.fluid_barrel_empty.name=Empty Fluid Barrel -item.fluid_barrel_full.name=Fluid Barrel: +item.fluid_barrel_full.name=Fluid Barrel: %s item.fluid_barrel_infinite.name=Infinite Fluid Barrel item.fluid_duct.name=Fluid Duct: item.fluid_identifier.name=Fluid Identifier @@ -2783,10 +2783,12 @@ item.fluid_identifier.usage2=up to a maximum range of 64 ducts. item.fluid_identifier_multi.name=Multi Fluid Identifier item.fluid_identifier_multi.info=Universal fluid identifier for: item.fluid_identifier_multi.info2=Secondary type: +item.fluid_pack_empty.name=Large Fluid Container +item.fluid_pack_full.name=Packaged %s item.fluid_tank_empty.name=Empty Universal Fluid Tank -item.fluid_tank_full.name=Universal Fluid Tank: +item.fluid_tank_full.name=Universal Fluid Tank: %s item.fluid_tank_lead_empty.name=Empty Hazardous Material Tank -item.fluid_tank_lead_full.name=Hazardous Material Tank: +item.fluid_tank_lead_full.name=Hazardous Material Tank: %s item.fluorite.name=Fluorite item.flywheel_beryllium.name=Beryllium Flywheel item.fmn.name=Flunitrazepam Tablet diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 2d472a53a..1b5db22f5 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -222,6 +222,7 @@ "weapon.explosionSmallNear": {"category": "player", "sounds": ["weapon/explosionSmallNear1", "weapon/explosionSmallNear2", "weapon/explosionSmallNear3"]}, "weapon.explosionSmallFar": {"category": "player", "sounds": ["weapon/explosionSmallFar1", "weapon/explosionSmallFar2"]}, "weapon.explosionTiny": {"category": "player", "sounds": ["weapon/explosionTiny1", "weapon/explosionTiny2"]}, + "weapon.hkShoot": {"category": "player", "sounds": [{"name": "weapon/hkShoot", "stream": false}]}, "weapon.dFlash": {"category": "player", "sounds": [{"name": "weapon/dFlash", "stream": false}]}, diff --git a/src/main/resources/assets/hbm/sounds/weapon/hkShoot.ogg b/src/main/resources/assets/hbm/sounds/weapon/hkShoot.ogg new file mode 100644 index 0000000000000000000000000000000000000000..883b0e46a39fb7fa8fc73e9ef150d80b9c2dc337 GIT binary patch literal 13919 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 C3&rsO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/fluid_pack.png b/src/main/resources/assets/hbm/textures/items/fluid_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..c3c5de9aadd096d963c82b0e28760433d44875ae GIT binary patch literal 477 zcmV<30V4j1P)GQdk5fXlDuw5h7ON0tCql6dMaWF&5S-odsB1 zi22A=1ks_JV2ve|4RAB{#5z&pV4c$^G}LxLc{G)+`h zMV4jq`8_YDyDHU!fLgmSS*ssWB|C` zZk*3&5m+b`05}{DD2f8WZnu+U0MGN7&1Q_pV`Nzd;Q4&=csxXc`~42U^?D@?L&4tx zN~O}I+wG$3I?LsfdcBUW>*%_Us;UeI1Ho&x8kI_gTrP*$!Rw5!>;Bkw5Co|l;4OX} zt6VOVq%w&~UzvoWkKTZ>%-EK#*MF6&KOaJjt(wzUp TSkw6%00000NkvXXu0mjf^sUr1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/fluid_pack_overlay.png b/src/main/resources/assets/hbm/textures/items/fluid_pack_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..0de07193ea21f97b716c3b3195a9433c0484c4c1 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfNS%G}%0G|+72L~TDHRF_&g0ixvWy>}(GxHxicG=fA5-1-u+2RY3;w%aB3;quU z48i^tLLk8ckH}&M2EM}}%y>M1MG8V>FE~M){gB*Er53MrABzB`T8K~y-6&62SR z!!QsdiD{a!EDOB%Sl1QK zxv0n`72_i*RWp%bV;Z)$Wg@{ug3D4LXQk>OUeLif-ZB6viUL~e!_V^^RaFJd*CPB` vfqg*pJYyJ!!}s39ITtXye!mB&SNXIaDsWj1790q700000NkvXXu0mjfG8kqY diff --git a/src/main/resources/assets/hbm/textures/items/fluid_tank_lead_overlay.png b/src/main/resources/assets/hbm/textures/items/fluid_tank_lead_overlay.png index 2fd03ec75d1b0bb9928ff8e8df98d451f10ec506..10b09d8fde13539a299a135348cedd59e1950ad4 100644 GIT binary patch delta 152 zcmZo++`>3PrJk`k$lZxy-8q?;3=9k`>5jgR3=A9lx&I`x0{NT;9+AZi419+{nDKc2 ziWH!rzNd?0h=qT$1nc64We0BD_+ih%FjK+Dsv&b<@pHa7<{1l2*mhKZ*PCL>^?{j< wjp2u_;O-CU=bM3A`BEc1(|mmyw18|5AZB0?WMH@yJQ>9DboFyt=akR{0Q=M}T>t<8 delta 103 zcmdnO*upqLC4r^b$uool2x>S|Iv5xjtUX;ELo9le6C_xhW$x@QfBzo@Cg&cg*Eq1e zt#g9n_xJaYYx`edaAH``2xO;M{QF~>8*9KNA;Iv?TD( Date: Mon, 21 Jul 2025 00:52:02 +0200 Subject: [PATCH 304/491] 1v1 me on twitter vro --- changelog | 2 + gradle.properties | 2 +- .../handler/nei/AssemblerRecipeHandler.java | 176 ---------- .../nei/AssemblyMachineRecipeHandler.java | 18 + .../nei/ChemicalPlantRecipeHandler.java | 9 +- .../handler/nei/ChemplantRecipeHandler.java | 236 ------------- .../handler/nei/NEIGenericRecipeHandler.java | 321 ++++++++++++++++++ .../hbm/handler/nei/NEIUniversalHandler.java | 10 +- .../recipes/AssemblyMachineRecipes.java | 19 +- .../recipes/loader/GenericRecipe.java | 5 +- src/main/java/com/hbm/items/ModItems.java | 7 + .../com/hbm/items/machine/ItemBlueprints.java | 2 +- .../items/machine/ItemChemistryTemplate.java | 1 - src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/NEIRegistry.java | 3 +- .../assets/hbm/textures/gui/nei/gui_nei.png | Bin 1635 -> 1741 bytes 16 files changed, 372 insertions(+), 441 deletions(-) delete mode 100644 src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java create mode 100644 src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java delete mode 100644 src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java create mode 100644 src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java diff --git a/changelog b/changelog index 07f6038d5..1b5ea3998 100644 --- a/changelog +++ b/changelog @@ -9,6 +9,7 @@ * Replace the journals * Instead of opening them and making a template, they act as a multi template * Blueprints need to remain in the slot, removing them will disable the recipes again + * Not actually part of worldgen yet - yeah i ran out of time, cry about it * More paintables * Paintable pneumatic tube * Behaves the exact same as a regular pneumatic tube @@ -38,6 +39,7 @@ * Chemical artillery shell recipes have now been moved to the assembler * The chemical plant and factory now scale their max power based on the recipe, similar to how the arc welder works * The chemical plant's default max power is now 100kHE again instead of 1MHE +* The NEI handlers for the old chemplant and assembler have been deactivated, however they will continue to function for the time being ## Fixed * Fixed gas centrifuge sound persisting when broken or when unloaded diff --git a/gradle.properties b/gradle.properties index 681ea595b..70b2eaeea 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5383 +mod_build_number=5397 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java b/src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java deleted file mode 100644 index d3ddb9df0..000000000 --- a/src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java +++ /dev/null @@ -1,176 +0,0 @@ -package com.hbm.handler.nei; - -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import com.hbm.blocks.ModBlocks; -import com.hbm.handler.imc.ICompatNHNEI; -import com.hbm.inventory.RecipesCommon.ComparableStack; -import com.hbm.inventory.gui.GUIMachineAssembler; -import com.hbm.inventory.recipes.AssemblerRecipes; -import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemAssemblyTemplate; -import com.hbm.lib.RefStrings; - -import codechicken.nei.NEIServerUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.TemplateRecipeHandler; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.item.ItemStack; - -public class AssemblerRecipeHandler extends TemplateRecipeHandler implements ICompatNHNEI { - - public LinkedList transferRectsRec = new LinkedList(); - public LinkedList transferRectsGui = new LinkedList(); - public LinkedList> guiRec = new LinkedList>(); - public LinkedList> guiGui = new LinkedList>(); - - @Override - public ItemStack[] getMachinesForRecipe() { - return new ItemStack[]{ - new ItemStack(ModBlocks.machine_assembler), - new ItemStack(ModBlocks.machine_assemfac)}; - } - - @Override - public String getRecipeID() { - return "assembly"; - } - - public class SmeltingSet extends TemplateRecipeHandler.CachedRecipe { - - List input; - PositionedStack result; - - public SmeltingSet(List in, ItemStack result) { - - input = new ArrayList(); - - ComparableStack comp = new ComparableStack(result); - ItemStack template = ItemAssemblyTemplate.writeType(new ItemStack(ModItems.assembly_template), comp); - - for(int i = 0; i < Math.min(in.size(), 12); i++) { - input.add(new PositionedStack(in.get(i), 30 + (i % 4) * 18, 6 + (i / 4) * 18)); - } - - input.add(new PositionedStack(template, 66 + 45, 6)); - this.result = new PositionedStack(result, 138, 24); - } - - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 48, input); - } - - @Override - public PositionedStack getResult() { - return result; - } - } - - @Override - public String getRecipeName() { - return "Assembly Machine"; - } - - @Override - public String getGuiTexture() { - return RefStrings.MODID + ":textures/gui/nei/gui_nei_assembler.png"; - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - - if ((outputId.equals("assembly")) && getClass() == AssemblerRecipeHandler.class) { - - Map> recipes = AssemblerRecipes.getRecipes(); - - for (Map.Entry> recipe : recipes.entrySet()) { - this.arecipes.add(new SmeltingSet(recipe.getValue(), recipe.getKey())); - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - - Map> recipes = AssemblerRecipes.getRecipes(); - - for (Map.Entry> recipe : recipes.entrySet()) { - - if (NEIServerUtils.areStacksSameTypeCrafting(recipe.getKey(), result)) - this.arecipes.add(new SmeltingSet(recipe.getValue(), recipe.getKey())); - } - } - - @Override - public void loadUsageRecipes(String inputId, Object... ingredients) { - - if ((inputId.equals("assembly")) && getClass() == AssemblerRecipeHandler.class) { - loadCraftingRecipes("assembly", new Object[0]); - } else { - super.loadUsageRecipes(inputId, ingredients); - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - - Map> recipes = AssemblerRecipes.getRecipes(); - - for (Map.Entry> recipe : recipes.entrySet()) { - - for(Object o : recipe.getValue()) { - - if(o instanceof ItemStack && NEIServerUtils.areStacksSameTypeCrafting((ItemStack)o, ingredient)) { - this.arecipes.add(new SmeltingSet(recipe.getValue(), recipe.getKey())); - - } else if(o instanceof List) { - - for(Object obj : (List)o) { - - if(obj instanceof ItemStack && NEIServerUtils.areStacksSameTypeCrafting((ItemStack)obj, ingredient)) { - this.arecipes.add(new SmeltingSet(recipe.getValue(), recipe.getKey())); - } - } - } - } - } - } - - @Override - public Class getGuiClass() { - return null; - } - - @Override - public void loadTransferRects() { - transferRectsGui = new LinkedList(); - guiGui = new LinkedList>(); - - transferRects.add(new RecipeTransferRect(new Rectangle(138 - 1 - 36, 23, 36, 18), "assembly")); - transferRectsGui.add(new RecipeTransferRect(new Rectangle(18 * 2 + 2, 89 - 7 - 11, 18 * 5 - 4, 18 + 16), "assembly")); - guiGui.add(GUIMachineAssembler.class); - RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); - RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); - } - - @Override - public void drawExtras(int recipe) { - - drawProgressBar(83 - (18 * 4) - 9 + 1, 6, 0, 86, 16, 18 * 3 - 2, 480, 7); - - drawProgressBar(83 - 3 + 16 + 5, 5 + 18, 16, 86, 36, 18, 48, 0); - } - - @Override - public TemplateRecipeHandler newInstance() { - return super.newInstance(); - } - -} diff --git a/src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java b/src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java new file mode 100644 index 000000000..288b74db5 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java @@ -0,0 +1,18 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; + +public class AssemblyMachineRecipeHandler extends NEIGenericRecipeHandler { + + public AssemblyMachineRecipeHandler() { + super(ModBlocks.machine_assembly_machine.getLocalizedName(), AssemblyMachineRecipes.INSTANCE, ModBlocks.machine_assembly_machine); + } + + @Override public String getRecipeID() { return "ntmAssemblyMachine"; } + + @Override public int getInputXOffset(GenericRecipe recipe, int inputCount) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; } + @Override public int getOutputXOffset(GenericRecipe recipe, int outputCount) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; } + @Override public int getMachineXOffset(GenericRecipe recipe) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; } +} diff --git a/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java b/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java index 47d77945b..8bca29e98 100644 --- a/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java @@ -3,14 +3,11 @@ package com.hbm.handler.nei; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.recipes.ChemicalPlantRecipes; -public class ChemicalPlantRecipeHandler extends NEIUniversalHandler { //TODO: make a new universal handler +public class ChemicalPlantRecipeHandler extends NEIGenericRecipeHandler { public ChemicalPlantRecipeHandler() { - super(ModBlocks.machine_chemical_plant.getLocalizedName(), ModBlocks.machine_chemical_plant, ChemicalPlantRecipes.getRecipes()); + super(ModBlocks.machine_chemical_plant.getLocalizedName(), ChemicalPlantRecipes.INSTANCE, ModBlocks.machine_chemical_plant, ModBlocks.machine_chemical_factory); } - @Override - public String getKey() { - return "ntmChemicalPlant"; - } + @Override public String getRecipeID() { return "ntmChemicalPlant"; } } diff --git a/src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java b/src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java deleted file mode 100644 index b0b5e19a4..000000000 --- a/src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java +++ /dev/null @@ -1,236 +0,0 @@ -package com.hbm.handler.nei; - -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -import com.hbm.blocks.ModBlocks; -import com.hbm.handler.imc.ICompatNHNEI; -import com.hbm.inventory.FluidStack; -import com.hbm.inventory.RecipesCommon.AStack; -import com.hbm.inventory.gui.GUIMachineChemplant; -import com.hbm.inventory.recipes.ChemplantRecipes; -import com.hbm.inventory.recipes.ChemplantRecipes.ChemRecipe; -import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemFluidIcon; -import com.hbm.lib.RefStrings; - -import codechicken.nei.NEIServerUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.TemplateRecipeHandler; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.item.ItemStack; - -public class ChemplantRecipeHandler extends TemplateRecipeHandler implements ICompatNHNEI { - - public LinkedList transferRectsRec = new LinkedList(); - public LinkedList transferRectsGui = new LinkedList(); - public LinkedList> guiRec = new LinkedList>(); - public LinkedList> guiGui = new LinkedList>(); - - @Override - public ItemStack[] getMachinesForRecipe() { - return new ItemStack[]{ - new ItemStack(ModBlocks.machine_chemplant), - new ItemStack(ModBlocks.machine_chemfac)}; - } - - @Override - public String getRecipeID() { - return "chemistry"; - } - public class RecipeSet extends TemplateRecipeHandler.CachedRecipe { - - PositionedStack[] itemIn = new PositionedStack[4]; - PositionedStack[] fluidIn = new PositionedStack[2]; - PositionedStack[] itemOut = new PositionedStack[4]; - PositionedStack[] fluidOut = new PositionedStack[2]; - PositionedStack template; - - public RecipeSet(ChemRecipe recipe) { - - for(int i = 0; i < recipe.inputs.length; i++) { - AStack in = recipe.inputs[i]; - if(in == null) continue; - this.itemIn[i] = new PositionedStack(in.extractForNEI(), 30 + (i % 2) * 18, 24 + (i / 2) * 18); - } - - for(int i = 0; i < recipe.inputFluids.length; i++) { - FluidStack in = recipe.inputFluids[i]; - if(in == null) continue; - ItemStack drop = ItemFluidIcon.make(in); - this.fluidIn[i] = new PositionedStack(drop, 30 + (i % 2) * 18, 6); - } - - for(int i = 0; i < recipe.outputs.length; i++) { - ItemStack out = recipe.outputs[i]; - if(out == null) continue; - this.itemOut[i] = new PositionedStack(out, 120 + (i % 2) * 18, 24 + (i / 2) * 18); - } - - for(int i = 0; i < recipe.outputFluids.length; i++) { - FluidStack out = recipe.outputFluids[i]; - if(out == null) continue; - ItemStack drop = ItemFluidIcon.make(out); - this.fluidOut[i] = new PositionedStack(drop, 120 + (i % 2) * 18, 6); - } - - this.template = new PositionedStack(new ItemStack(ModItems.chemistry_template, 1, recipe.getId()), 84, 6); - } - - @Override - public List getIngredients() { - List stacks = new ArrayList(); - - for(PositionedStack stack : itemIn) if(stack != null) stacks.add(stack); - for(PositionedStack stack : fluidIn) if(stack != null) stacks.add(stack); - stacks.add(template); - - return getCycledIngredients(cycleticks / 20, stacks); - } - - @Override - public List getOtherStacks() { - List stacks = new ArrayList(); - - for(PositionedStack stack : itemOut) if(stack != null) stacks.add(stack); - for(PositionedStack stack : fluidOut) if(stack != null) stacks.add(stack); - stacks.add(template); - - return stacks; - } - - @Override - public PositionedStack getResult() { - return null; - } - } - - @Override - public String getRecipeName() { - return "Chemical Plant"; - } - - @Override - public String getGuiTexture() { - return RefStrings.MODID + ":textures/gui/nei/gui_nei_chemplant.png"; - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - - if((outputId.equals("chemistry")) && getClass() == ChemplantRecipeHandler.class) { - - for(ChemRecipe recipe : ChemplantRecipes.recipes) { - this.arecipes.add(new RecipeSet(recipe)); - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - - outer: - for(ChemRecipe recipe : ChemplantRecipes.recipes) { - - for(ItemStack out : recipe.outputs) { - - if(out != null && NEIServerUtils.areStacksSameTypeCrafting(result, out)) { - this.arecipes.add(new RecipeSet(recipe)); - continue outer; - } - } - - for(FluidStack out : recipe.outputFluids) { - - if(out != null) { - ItemStack drop = ItemFluidIcon.make(out.type, out.fill); - - if(compareFluidStacks(result, drop)) { - this.arecipes.add(new RecipeSet(recipe)); - continue outer; - } - } - } - } - } - - @Override - public void loadUsageRecipes(String inputId, Object... ingredients) { - if((inputId.equals("chemistry")) && getClass() == ChemplantRecipeHandler.class) { - loadCraftingRecipes("chemistry", new Object[0]); - } else { - super.loadUsageRecipes(inputId, ingredients); - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - - outer: - for(ChemRecipe recipe : ChemplantRecipes.recipes) { - - for(AStack in : recipe.inputs) { - - if(in != null) { - List stacks = in.extractForNEI(); - - for(ItemStack stack : stacks) { - if(NEIServerUtils.areStacksSameTypeCrafting(ingredient, stack)) { - this.arecipes.add(new RecipeSet(recipe)); - continue outer; - } - } - } - } - - for(FluidStack in : recipe.inputFluids) { - - if(in != null) { - ItemStack drop = ItemFluidIcon.make(in.type, in.fill); - - if(compareFluidStacks(ingredient, drop)) { - this.arecipes.add(new RecipeSet(recipe)); - continue outer; - } - } - } - } - } - - private boolean compareFluidStacks(ItemStack sta1, ItemStack sta2) { - return sta1.getItem() == sta2.getItem() && sta1.getItemDamage() == sta2.getItemDamage(); - } - - @Override - public Class getGuiClass() { - return null; - } - - @Override - public void loadTransferRects() { - transferRectsGui = new LinkedList(); - guiGui = new LinkedList>(); - - transferRects.add(new RecipeTransferRect(new Rectangle(138 - 1 - 72, 23, 18 * 3, 18), "chemistry")); - transferRectsGui.add(new RecipeTransferRect(new Rectangle(18 * 2 + 2, 89 - 7 - 11, 18 * 5 - 4, 18 + 16), "chemistry")); - guiGui.add(GUIMachineChemplant.class); - RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); - RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); - } - - @Override - public void drawExtras(int recipe) { - - drawProgressBar(83 - (18 * 4) - 9 + 1, 6, 0, 86, 16, 18 * 3 - 2, 480, 7); - drawProgressBar(83 - 3 + 16 + 5 - 36, 5 + 18, 16, 86, 18 * 3, 18, 48, 0); - } - - @Override - public TemplateRecipeHandler newInstance() { - return super.newInstance(); - } -} diff --git a/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java b/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java new file mode 100644 index 000000000..becbbad76 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java @@ -0,0 +1,321 @@ +package com.hbm.handler.nei; + +import static codechicken.lib.gui.GuiDraw.drawTexturedModalRect; + +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +import com.hbm.config.ClientConfig; +import com.hbm.handler.imc.ICompatNHNEI; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.lib.RefStrings; + +import codechicken.nei.NEIServerUtils; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.TemplateRecipeHandler; +import net.minecraft.block.Block; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.item.ItemStack; + +public abstract class NEIGenericRecipeHandler extends TemplateRecipeHandler implements ICompatNHNEI { + + public LinkedList transferRectsRec = new LinkedList(); + public LinkedList transferRectsGui = new LinkedList(); + public LinkedList> guiRec = new LinkedList>(); + public LinkedList> guiGui = new LinkedList>(); + + public final String displayName; + public final GenericRecipes recipeSet; + public final ItemStack[] machines; + + public NEIGenericRecipeHandler(String displayName, GenericRecipes recipeSet, Block... machines) { + ItemStack[] machineStacks = new ItemStack[machines.length]; + for(int i = 0; i < machines.length; i++) machineStacks[i] = new ItemStack(machines[i]); + this.displayName = displayName; + this.recipeSet = recipeSet; + this.machines = machineStacks; + } + + public NEIGenericRecipeHandler(String displayName, GenericRecipes recipeSet, ItemStack... machines) { + this.displayName = displayName; + this.recipeSet = recipeSet; + this.machines = machines; + } + + public class RecipeSet extends TemplateRecipeHandler.CachedRecipe { + + protected GenericRecipe recipe; + protected PositionedStack[] input; + protected PositionedStack[] output; + protected PositionedStack machine; + protected PositionedStack template; + + public RecipeSet(GenericRecipe recipe) { + this.recipe = recipe; + int inputSize = 0; + int outputSize = 0; + + if(recipe.inputItem != null) inputSize += recipe.inputItem.length; // sure a ternary is "less code" but is it more readable? no? thought so + if(recipe.inputFluid != null) inputSize += recipe.inputFluid.length; + if(recipe.outputItem != null) outputSize += recipe.outputItem.length; + if(recipe.outputFluid != null) outputSize += recipe.outputFluid.length; + + int inputOffset = getInputXOffset(recipe, inputSize); + int outputOffset = getOutputXOffset(recipe, outputSize); + int machineOffset = getMachineXOffset(recipe); + + this.input = new PositionedStack[inputSize]; + int[][] inPos = getInputSlotPositions(inputSize); + inputSize = 0; // just gonna reuse this because fuck it why not + + if(recipe.inputItem != null) for(int i = 0; i < recipe.inputItem.length; i++) { + this.input[i] = new PositionedStack(recipe.inputItem[i].extractForNEI(), inPos[i][0] + inputOffset, inPos[i][1]); + inputSize = i + 1; + } + if(recipe.inputFluid != null) for(int i = 0; i < recipe.inputFluid.length; i++) { + this.input[inputSize + i] = new PositionedStack(ItemFluidIcon.make(recipe.inputFluid[i]), inPos[inputSize + i][0] + inputOffset, inPos[inputSize + i][1]); + } + + int[][] outPos = getOutputSlotPositions(outputSize); + this.output = new PositionedStack[outputSize]; + outputSize = 0; + + if(recipe.outputItem != null) for(int i = 0; i < recipe.outputItem.length; i++) { + this.output[i] = new PositionedStack(recipe.outputItem[i].getAllPossibilities(), outPos[i][0] + outputOffset, outPos[i][1]); + outputSize = i + 1; + } + if(recipe.outputFluid != null) for(int i = 0; i < recipe.outputFluid.length; i++) { + this.output[outputSize + i] = new PositionedStack(ItemFluidIcon.make(recipe.outputFluid[i]), outPos[outputSize + i][0] + outputOffset, outPos[outputSize + i][1]); + } + + if(recipe.isPooled()) { + String[] pools = recipe.getPools(); + ItemStack[] blueprints = new ItemStack[pools.length]; + for(int i = 0; i < pools.length; i++) blueprints[i] = ItemBlueprints.make(pools[i]); + this.template = new PositionedStack(blueprints, 75 + machineOffset, 10); + } + + ItemStack[] machineStacks = getMachines(recipe); + this.machine = new PositionedStack(machineStacks, 75 + machineOffset, template == null ? 31 : 38); + } + + @Override public List getIngredients() { return getCycledIngredients(cycleticks / 20, Arrays.asList(this.input)); } + @Override public PositionedStack getResult() { return this.output[0]; } + + @Override + public List getOtherStacks() { + List other = new ArrayList(); + for(int i = 1; i < this.output.length; i++) other.add(this.output[i]); + other.add(this.machine); + if(this.template != null) other.add(this.template); + return getCycledIngredients(cycleticks / 20, other); + } + } + + @Override public String getRecipeName() { return this.displayName; } + @Override public ItemStack[] getMachinesForRecipe() { return machines; } + @Override public String getGuiTexture() { return RefStrings.MODID + ":textures/gui/nei/gui_nei.png"; } + + public int getInputXOffset(GenericRecipe recipe, int inputCount) { return 0; } + public int getOutputXOffset(GenericRecipe recipe, int outputCount) { return 0; } + public int getMachineXOffset(GenericRecipe recipe) { return 0; } + public ItemStack[] getMachines(GenericRecipe recipe) { return this.machines; } + + // ✨ magic number vomit land ✨ + public int[][] getInputSlotPositions(int count) { + + if(count == 1) return new int[][] { {48, 24} }; + if(count == 2) return new int[][] { {30, 24}, {48, 24} }; + if(count == 3) return new int[][] { {12, 24}, {30, 24}, {48, 24} }; + if(count == 4) return new int[][] { {30, 15}, {48, 15}, {30, 33}, {48, 33} }; + if(count == 5) return new int[][] { {12, 15}, {30, 15}, {48, 15}, {12, 33}, {30, 33} }; + if(count == 6) return new int[][] { {12, 15}, {30, 15}, {48, 15}, {12, 33}, {30, 33}, {48, 33} }; + + int[][] slots = new int[count][2]; + int cols = (count + 2) / 3; + + for(int i = 0; i < count; i++) { + slots[i][0] = 12 + (i % cols) * 18 - (cols == 4 ? 18 : 0); + slots[i][1] = 6 + (i / cols) * 18; + } + + return slots; + } + + public int[][] getOutputSlotPositions(int count) { + switch(count) { + case 1: return new int[][] { + {102, 24} + }; + case 2: return new int[][] { + {102, 24}, + {120, 24} + }; + case 3: return new int[][] { + {102, 24}, + {120, 24}, + {138, 24} + }; + case 4: return new int[][] { + {102, 24 - 9}, + {120, 24 - 9}, + {102, 24 + 9}, + {120, 24 + 9} + }; + case 5: return new int[][] { + {102, 24 - 9}, {120, 24 - 9}, + {102, 24 + 9}, {120, 24 + 9}, + {138, 24}, + }; + case 6: return new int[][] { + {102, 6}, {120, 6}, + {102, 24}, {120, 24}, + {102, 42}, {120, 42}, + }; + case 7: return new int[][] { + {102, 6}, {120, 6}, + {102, 24}, {120, 24}, + {102, 42}, {120, 42}, + {138, 24}, + }; + case 8: return new int[][] { + {102, 6}, {120, 6}, + {102, 24}, {120, 24}, + {102, 42}, {120, 42}, + {138, 24}, {138, 42}, + }; + } + return new int[count][2]; + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + + outer: for(Object o : this.recipeSet.recipeOrderedList) { + GenericRecipe recipe = (GenericRecipe) o; + boolean hasMatch = false; + boolean hide = ClientConfig.NEI_HIDE_SECRETS.get(); + + if(hide && recipe.isPooled()) { + String[] pools = recipe.getPools(); + for(String pool : pools) if(pool.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) continue outer; + } + + if(hide && recipe.inputItem != null) for(AStack astack : recipe.inputItem) for(ItemStack stack : astack.extractForNEI()) { + if(ModItems.excludeNEI.contains(stack.getItem())) continue outer; + } + if(recipe.outputItem != null) for(IOutput output : recipe.outputItem) for(ItemStack stack : output.getAllPossibilities()) { + if(hide && ModItems.excludeNEI.contains(stack.getItem())) continue outer; + if(NEIServerUtils.areStacksSameTypeCrafting(stack, result)) hasMatch = true; + } + if(recipe.outputFluid != null) for(FluidStack fluid : recipe.outputFluid) { + if(areItemsAndMetaEqual(ItemFluidIcon.make(fluid), result)) hasMatch = true; + } + + if(hasMatch) this.arecipes.add(new RecipeSet(recipe)); + } + } + + /** load all */ + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + + if(outputId.equals(getRecipeID())) { + + outer: for(Object o : this.recipeSet.recipeOrderedList) { + GenericRecipe recipe = (GenericRecipe) o; + boolean hide = ClientConfig.NEI_HIDE_SECRETS.get(); + + if(hide && recipe.isPooled()) { + String[] pools = recipe.getPools(); + for(String pool : pools) if(pool.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) continue outer; + } + + if(hide && recipe.inputItem != null) for(AStack astack : recipe.inputItem) for(ItemStack stack : astack.extractForNEI()) + if(ModItems.excludeNEI.contains(stack.getItem())) continue outer; + if(hide && recipe.outputItem != null) for(IOutput output : recipe.outputItem) for(ItemStack stack : output.getAllPossibilities()) + if(ModItems.excludeNEI.contains(stack.getItem())) continue outer; + + this.arecipes.add(new RecipeSet(recipe)); + } + + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadUsageRecipes(String inputId, Object... ingredients) { + if(inputId.equals(getRecipeID())) { + loadCraftingRecipes(getRecipeID(), new Object[0]); + } else { + super.loadUsageRecipes(inputId, ingredients); + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + + outer: for(Object o : this.recipeSet.recipeOrderedList) { + GenericRecipe recipe = (GenericRecipe) o; + boolean hasMatch = false; + boolean hide = ClientConfig.NEI_HIDE_SECRETS.get(); + + if(hide && recipe.isPooled()) { + String[] pools = recipe.getPools(); + for(String pool : pools) if(pool.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) continue outer; + } + + if(recipe.inputItem != null) for(AStack astack : recipe.inputItem) for(ItemStack stack : astack.extractForNEI()) { + if(hide && ModItems.excludeNEI.contains(stack.getItem())) continue outer; + if(NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)) hasMatch = true; + } + if(recipe.inputFluid != null) for(FluidStack fluid : recipe.inputFluid) { + if(areItemsAndMetaEqual(ItemFluidIcon.make(fluid), ingredient)) hasMatch = true; + } + if(hide && recipe.outputItem != null) for(IOutput output : recipe.outputItem) for(ItemStack stack : output.getAllPossibilities()) { + if(ModItems.excludeNEI.contains(stack.getItem())) continue outer; + } + + if(hasMatch) this.arecipes.add(new RecipeSet(recipe)); + } + } + + public static boolean areItemsAndMetaEqual(ItemStack sta1, ItemStack sta2) { + return sta1.getItem() == sta2.getItem() && sta1.getItemDamage() == sta2.getItemDamage(); + } + + @Override + public void loadTransferRects() { + transferRectsGui = new LinkedList(); + guiGui = new LinkedList>(); + transferRects.add(new RecipeTransferRect(new Rectangle(147, 1, 18, 18), getRecipeID())); + RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); + } + + @Override + public void drawBackground(int recipe) { + super.drawBackground(recipe); + + RecipeSet rec = (RecipeSet) this.arecipes.get(recipe); + + for(PositionedStack pos : rec.input) drawTexturedModalRect(pos.relx - 1, pos.rely - 1, 5, 87, 18, 18); + for(PositionedStack pos : rec.output) drawTexturedModalRect(pos.relx - 1, pos.rely - 1, 5, 87, 18, 18); + + if(rec.template == null) { + drawTexturedModalRect(74 + this.getMachineXOffset(rec.recipe), 14, 59, 87, 18, 36); + } else { + drawTexturedModalRect(74 + this.getMachineXOffset(rec.recipe), 7, 77, 87, 18, 50); + } + } +} diff --git a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java index d82303b6c..31274e626 100644 --- a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java @@ -25,11 +25,6 @@ import net.minecraft.item.ItemStack; public abstract class NEIUniversalHandler extends TemplateRecipeHandler implements ICompatNHNEI { - @Override - public ItemStack[] getMachinesForRecipe() { - return machine; - } - public LinkedList transferRectsRec = new LinkedList(); public LinkedList transferRectsGui = new LinkedList(); public LinkedList> guiRec = new LinkedList>(); @@ -119,6 +114,11 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler implemen return this.display; } + @Override + public ItemStack[] getMachinesForRecipe() { + return machine; + } + @Override public String getGuiTexture() { return RefStrings.MODID + ":textures/gui/nei/gui_nei.png"; diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index a8444a256..472a33cc1 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -166,17 +166,17 @@ public class AssemblyMachineRecipes extends GenericRecipes { // decoration this.register(new GenericRecipe("ass.capnuka").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.NUKA)) - .inputItems(new ComparableStack(ModItems.cap_nuka, 128))); + .inputItems(new ComparableStack(ModItems.cap_nuka, 64), new ComparableStack(ModItems.cap_nuka, 64))); this.register(new GenericRecipe("ass.capquantum").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.QUANTUM)) - .inputItems(new ComparableStack(ModItems.cap_quantum, 128))); + .inputItems(new ComparableStack(ModItems.cap_quantum, 64), new ComparableStack(ModItems.cap_quantum, 64))); this.register(new GenericRecipe("ass.capsparkle").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.SPARKLE)) - .inputItems(new ComparableStack(ModItems.cap_sparkle, 128))); + .inputItems(new ComparableStack(ModItems.cap_sparkle, 64), new ComparableStack(ModItems.cap_sparkle, 64))); this.register(new GenericRecipe("ass.caprad").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.RAD)) - .inputItems(new ComparableStack(ModItems.cap_rad, 128))); + .inputItems(new ComparableStack(ModItems.cap_rad, 64), new ComparableStack(ModItems.cap_rad, 64))); this.register(new GenericRecipe("ass.capfritz").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.FRITZ)) - .inputItems(new ComparableStack(ModItems.cap_fritz, 128))); + .inputItems(new ComparableStack(ModItems.cap_fritz, 64), new ComparableStack(ModItems.cap_fritz, 64))); this.register(new GenericRecipe("ass.capkorl").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.KORL)) - .inputItems(new ComparableStack(ModItems.cap_korl, 128))); + .inputItems(new ComparableStack(ModItems.cap_korl, 64), new ComparableStack(ModItems.cap_korl, 64))); /* this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) .inputItems()); @@ -330,7 +330,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.powder_magic, 64), new ComparableStack(ModItems.plate_dineutronium, 24), new ComparableStack(ModItems.ingot_u238m2), - new ComparableStack(ModItems.ingot_cft, 128))); + new ComparableStack(ModItems.ingot_cft, 64), + new ComparableStack(ModItems.ingot_cft, 64))); // fluid tanks this.register(new GenericRecipe("ass.tank").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_fluidtank, 1)) @@ -791,9 +792,9 @@ public class AssemblyMachineRecipes extends GenericRecipes { for(int i = 1; i < order.length; ++i) { FluidType type = order[i]; if(type.hasNoContainer()) continue; - this.register(new GenericRecipe("ass.package" + type.getUnlocalizedName()).setup(100, 100).outputItems(new ItemStack(ModItems.fluid_pack_full, 1, type.getID())) + this.register(new GenericRecipe("ass.package" + type.getUnlocalizedName()).setup(40, 100).outputItems(new ItemStack(ModItems.fluid_pack_full, 1, type.getID())) .inputItems(new ComparableStack(ModItems.fluid_pack_empty)).inputFluids(new FluidStack(type, 32_000))); - this.register(new GenericRecipe("ass.unpackage" + type.getUnlocalizedName()).setup(100, 100).setIcon(ItemFluidIcon.make(type, 32_000)).outputItems(new ItemStack(ModItems.fluid_pack_empty)) + this.register(new GenericRecipe("ass.unpackage" + type.getUnlocalizedName()).setup(40, 100).setIcon(ItemFluidIcon.make(type, 32_000)).outputItems(new ItemStack(ModItems.fluid_pack_empty)) .inputItems(new ComparableStack(ModItems.fluid_pack_full, 1, type.getID())).outputFluids(new FluidStack(type, 32_000))); } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index eff9d27a8..264e67cda 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -37,9 +37,8 @@ public class GenericRecipe { this.name = name; } - public boolean isPooled() { - return blueprintPools != null; - } + public boolean isPooled() { return blueprintPools != null; } + public String[] getPools() { return this.blueprintPools; } public boolean isPartOfPool(String lookingFor) { if(!isPooled()) return false; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 41b783fc6..5724185f5 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1,5 +1,7 @@ package com.hbm.items; +import java.util.HashSet; + import com.hbm.blocks.ModBlocks; import com.hbm.config.VersatileConfig; import com.hbm.handler.BucketHandler; @@ -62,6 +64,8 @@ import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; public class ModItems { + + public static HashSet excludeNEI = new HashSet(); public static void mainRegistry() { initializeItem(); @@ -4984,6 +4988,9 @@ public class ModItems { } private static void registerItem() { + + excludeNEI.add(item_secret); + //Weapons GameRegistry.registerItem(redstone_sword, redstone_sword.getUnlocalizedName()); GameRegistry.registerItem(big_sword, big_sword.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemBlueprints.java b/src/main/java/com/hbm/items/machine/ItemBlueprints.java index 874cfd6f6..13254d6de 100644 --- a/src/main/java/com/hbm/items/machine/ItemBlueprints.java +++ b/src/main/java/com/hbm/items/machine/ItemBlueprints.java @@ -133,7 +133,7 @@ public class ItemBlueprints extends Item { return stack.stackTagCompound.getString("pool"); } - public ItemStack make(String pool) { + public static ItemStack make(String pool) { ItemStack stack = new ItemStack(ModItems.blueprints); stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound.setString("pool", pool); diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java index b310805b6..49db2a232 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java @@ -4,7 +4,6 @@ import java.util.List; import com.hbm.inventory.recipes.ChemplantRecipes; import com.hbm.inventory.recipes.ChemplantRecipes.ChemRecipe; -import com.hbm.items.ModItems; import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index f3db74449..57e7c9744 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5383)"; + public static final String VERSION = "1.0.27 BETA (5397)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index 0ba8b15b4..4f0b96595 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -24,14 +24,13 @@ public class NEIRegistry { handlers.add(new GasCentrifugeRecipeHandler()); handlers.add(new BreederRecipeHandler()); handlers.add(new CyclotronRecipeHandler()); - handlers.add(new AssemblerRecipeHandler()); + handlers.add(new AssemblyMachineRecipeHandler()); handlers.add(new RefineryRecipeHandler()); handlers.add(new VacuumRecipeHandler()); handlers.add(new CrackingHandler()); handlers.add(new RadiolysisRecipeHandler()); handlers.add(new ReformingHandler()); handlers.add(new HydrotreatingHandler()); - handlers.add(new ChemplantRecipeHandler()); handlers.add(new ChemicalPlantRecipeHandler()); handlers.add(new OreSlopperHandler()); //before acidizing handlers.add(new CrystallizerRecipeHandler()); diff --git a/src/main/resources/assets/hbm/textures/gui/nei/gui_nei.png b/src/main/resources/assets/hbm/textures/gui/nei/gui_nei.png index ecdd6955099a67f0b843ee7faf0434d12169e612..0cc1a42c414d8b07ec3f97c977d93a31b887cf95 100644 GIT binary patch delta 1441 zcmb7?e>~H99LGO43lA*DkTJgsCyz!pc6NRw>f+M*nIv{3j4MPWd@0T}n%ZNeA-{i4 zLT-Ljr&d=ZiMcXetvD8uvKVvg{_5X*KOXOY-mll|`FKCxkGD{Tr&@rAvJScK^Gz;U z5R63Y&F)ZGir{JGIQvBIkAgYii)JQh^~KC94rtNu*R`g6TyU-1G1Ux<-U>n=b+N`w zLa~Tt`be|?6on}}+^Nngp};D96}r?3G21VvC-)t1>1em9N^>+&+wEb4+m8Dn5k&Zt zL=)zrnqh(J&C56U3E0s1#|{ZW8??{!PYmwWb<6YYUrgN$NIGnl+tCe#8Wis+i|CHj zW|D^KvI*Z0U(gZQU#RWhY03UJi0Veg*|u&ri45sX9sK%{3-{!&U>#C?J*=0upgZ=ZikN=ig>GeX7uwBQtV1G^TD!XgT?ly^ zz;Y^N+`;c(1=)?0T0!r4pHOVf?rD~|h4AKtD3o}UT}6D9~-WCK@MHe@c} zxD(U|d1=N;Ru_o&_LrGVCY72jI?fF_f^;$a*+|Yge3-L7GQDYdE4U9z*`N(<*p}(( zosnwTXHpb_)*_EHom*)hy7@=D|CZ!cno0j!mG}s~Yn}7TEz7f<0?Wvje0&tKJU1IM z#JDtT_oe9InW6S1Cn}X%RaK>JpD9@A`0{B5M`5R~Damk{7KnsIO7(kQMvru?sdGyQ zSx$~Udc@REO_KsBm?pCa3?$($yizmCUF^(_Y}mP`tQX-={$*KMW8iVuACo<8l6 zXVAZLP8B`-x-`Qwh}3^MVmWYXDkWJLc5_1t6)mrXY|Y&nrxPzQws_4s>gsWjC}m@< zWvjknUQZq{Be_RqlXYdI*k|(xT{qrDKvb$QABsoPc7ggQ)oR43&nCn605f0@%W%)n z8I&<*%a$SUvx#epz#_>}e(}r+abAcCgeccCGa|3>Jro9A7T&)fnw}08gsWNIucjaU zc$JLz<{rGr9NxvKfLk;25lBV`0`pBPK+Rr5|706Xcq#P`DJv6<0}Dk#FE$@J*)`xj zq4;f9bea5CG|Zm-*x4!3OL_K5`U&M4oK98a(+|HXx zTh&+DHY)o3W?9Is$%7|)@Z~^+E*b(7i6mbK-WKT#TovW&y@fEt${j|At`EzvY0Kf- zidV&Avwr&Deh+Tg9`KvpKSpSSN1{r>WA-&9c_LzTh4t%;?{S#uLhA=~R?QxnP=8h5 zc?XO4TXs?O6ehFr#YT7{Dz=!=2#d8P$0-Xnc2%RM%KhsoS_>F(~F4B5u+Xi(}|N8onVy`mp5 zxoJ7%{bQ06C{bs`A`H--APL=ODL;tlYAOgXm_JqC*43oO7)6}Z)_o1JmtY#?_qZ4! Ot3z&{uD4vs7ykvcqOw!~ delta 1302 zcmV+x1?l?D4dV=uG=CaNL_t(|obBAtYaHhp2k>Xj7KcDnXhTT~Jv5i*){CeaNynao zbz4je?kS;{*oO^!Q-wFQrWet@^kiR61+H?+zYuxxt$`d`QbJBOfl#W0+=v>s2Sq=; z+O5~x*_qKkpARgHq?wn8m-qedGrOy4jUq-drWMf|{~grLT7NBHyI*qwFspvu1uUac z#OU~O=iBGHYl2Cv)dd)zP?JhiS*zu1-I*|nAG)rhfvnZ?wY;&yWnrzBuidY?0GL(3 z?gEz3m59@c?N2=nnxQ}T%zRt|aA{bpWAuGC!s6h#q5QN+r-AC=NEFgpQ2ZF;@l$;MxK_oIl2*!VyQR7n6(xuPiI_U+qo zcz75qD=QHZ@#goA9#8f|Cr}{)KxNLh`p@2eKdxTAdVlnXPyY~4_K!CIF`Ym)1ON;7 z`kQY>Q53Q9!D*}i;~%~j-~HKpC&yg<+aDuBCr~v3z`}j~%-UL z+1u|&M8x6Y;kiy=XKOt^|MIIED_?#BfQ9?ctKX0P{eQ>K*7|d8e#B8H@cPeBF9!}D z{Wf;C)_-GXYdtn@-HSJV@M;Ye=OF-Cxc@%=S42c?+`4xX0^^;)!B5_cgM)*U<2G*H ziwAda#NWU8XPu=lJpsVNJ&RZ3KTn^=gS$7L3xQ)hTkG+c-@kM6^MkuL;=$b;adY!w z{Pe9K)lhLBz6r>}wd0$37O%w3&4(u;@bRC16Mw(@-6tole#GgQ{BLePjEIQ)o7dy7 zpZ%kzs&fzkRH7Z<#Qn|d=R)AP)sKky^)LS%5l0*U_#75X08p7pA#mL4N1S#5Hhy&k z0F@dKft#BT&%EOQqUP%I5dc)~YzW-nyzUjhMm`0g7RMoA^VdrUz(Q?rZ^!QLZrx=t z#SWy~E4d{YjkM~PV5M^jld%INlb-`Nlb-`Nlb-_ye^_f2F*^6lIx2w|IJZzEqGh?x zrQM(Wdy`7z^e1Nk^B6^pjvsfveXhGEn8aFLfbj`6sWg?fTE5nu36uDtO8^?kS}otS zHvvs5jbp8ruidY?0GL(3?gEz3m59@c?N2=nnxQ}T%zRt|aA{bp1<{c&?B8sAzdyL_5IM}yuTcT8x3|}bF(8XZ1we!le}F1AE&w8$5duPl45oezSf-0?roFwr ziQgl5nX#sgQPug-bdBr)nnWkSGOMHmnDtfk>}H#G&WpyHWsLFTW~oajz%puN2T;al zvti-ID(L`TMpc`?tWE+hvqp6QO?>6I`B`R-3V^1u`B`=XU<#X`3eBSpaU)~r3!%Ia2Q2VT=@KMw;O}O zpu~!xUa0~g;^H?KvH4j>jk_&)6$XRBONW5X50gO#b(2sA4;L5oKU??68jX_G%m4rY M07*qoM6N<$f_*=cAOHXW From 9d558a68f3317652b76ae78225f6759586069a4f Mon Sep 17 00:00:00 2001 From: Justnightheron Date: Tue, 22 Jul 2025 18:42:21 +0800 Subject: [PATCH 305/491] =?UTF-8?q?=F0=9F=98=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/zh_CN.lang | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 92a56b5b8..14a8c62b0 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -2603,7 +2603,7 @@ item.fleija_igniter.name=脉冲点火器 item.fleija_kit.name=F.L.E.I.J.A. 套件 item.fleija_propellant.name=Sa326炸药 item.fluid_barrel_empty.name=空流体桶 -item.fluid_barrel_full.name=流体桶: +item.fluid_barrel_full.name=流体桶: %s item.fluid_barrel_infinite.name=无限流体桶 item.fluid_duct.name=流体管道: item.fluid_identifier.name=流体识别码 @@ -2615,9 +2615,9 @@ item.fluid_identifier_multi.name=多类型流体识别码 item.fluid_identifier_multi.info=通用流体识别码: item.fluid_identifier_multi.info2=次要类型: item.fluid_tank_empty.name=空通用流体罐 -item.fluid_tank_full.name=通用流体罐: +item.fluid_tank_full.name=通用流体罐: %s item.fluid_tank_lead_empty.name=空危险品罐 -item.fluid_tank_lead_full.name=危险品罐: +item.fluid_tank_lead_full.name=危险品罐:%s item.fluorite.name=氟石粉 item.flywheel_beryllium.name=铍制飞轮 item.fmn.name=氟硝西泮片 @@ -6105,3 +6105,7 @@ tile.logic_block.name=地牢逻辑砖块 tile.trapdoor_steel.name=钢活板门 tile.machine_assembly_machine.name=装配机 tile.wand_logic.name=结构魔杖方块(逻辑) +item.fluid_pack_empty.name=大型流体容器 +item.fluid_pack_full.name=流体包装 %s +tile.pneumatic_tube_paintable.name=可涂漆气动物流管道 +tile.oc_cable_paintable.name=可涂漆网线 From 2f74d178232052d10161e26eeb48eec94898f601 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 22 Jul 2025 23:17:59 +0200 Subject: [PATCH 306/491] pouring out the conk --- changelog | 58 +-- src/main/java/com/hbm/blocks/ModBlocks.java | 6 + .../com/hbm/blocks/generic/BlockRebar.java | 404 ++++++++++++++++++ .../com/hbm/blocks/rail/IRenderBlock.java | 1 + .../java/com/hbm/config/ClientConfig.java | 2 + .../java/com/hbm/crafting/ToolRecipes.java | 4 + .../java/com/hbm/inventory/fluid/Fluids.java | 5 +- .../inventory/recipes/AssemblerRecipes.java | 56 +-- .../recipes/AssemblyMachineRecipes.java | 14 +- .../recipes/ChemicalPlantRecipes.java | 9 +- .../recipes/loader/GenericRecipe.java | 2 +- .../com/hbm/itempool/ItemPoolsComponent.java | 6 +- .../com/hbm/itempool/ItemPoolsLegacy.java | 4 +- .../com/hbm/itempool/ItemPoolsRedRoom.java | 1 + .../com/hbm/itempool/ItemPoolsSingle.java | 1 + src/main/java/com/hbm/items/ModItems.java | 12 +- .../items/machine/ItemBlueprintFolder.java | 72 ++++ .../com/hbm/items/machine/ItemCatalyst.java | 6 - .../java/com/hbm/main/CraftingManager.java | 1 + src/main/java/com/hbm/main/MainRegistry.java | 3 + .../com/hbm/main/ModEventHandlerClient.java | 9 +- .../com/hbm/render/util/HorsePronter.java | 2 +- .../java/com/hbm/tileentity/TileMappings.java | 3 + src/main/java/com/hbm/uninos/NodeNet.java | 4 +- .../PneumaticNetworkProvider.java | 2 +- .../uninos/networkproviders/RebarNetwork.java | 9 + .../RebarNetworkProvider.java | 13 + src/main/resources/assets/hbm/lang/de_DE.lang | 4 + src/main/resources/assets/hbm/lang/en_US.lang | 4 + .../hbm/textures/blocks/concrete_rebar.png | Bin 0 -> 599 bytes .../textures/blocks/concrete_rebar_alt.png | Bin 0 -> 652 bytes .../assets/hbm/textures/blocks/rebar.png | Bin 0 -> 824 bytes .../assets/hbm/textures/blocks/rebar_base.png | Bin 0 -> 806 bytes .../hbm/textures/gui/fluids/concrete.png | Bin 0 -> 646 bytes .../hbm/textures/items/assembly_nuke.png | Bin 359 -> 415 bytes .../hbm/textures/items/blueprint_folder.png | Bin 0 -> 306 bytes .../items/blueprint_folder_discover.png | Bin 0 -> 301 bytes .../items/blueprint_folder_secret.png | Bin 0 -> 270 bytes .../textures/models/tank/tank_CONCRETE.png | Bin 0 -> 5002 bytes 39 files changed, 588 insertions(+), 129 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockRebar.java create mode 100644 src/main/java/com/hbm/items/machine/ItemBlueprintFolder.java create mode 100644 src/main/java/com/hbm/uninos/networkproviders/RebarNetwork.java create mode 100644 src/main/java/com/hbm/uninos/networkproviders/RebarNetworkProvider.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/concrete_rebar.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/concrete_rebar_alt.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rebar.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rebar_base.png create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/concrete.png create mode 100644 src/main/resources/assets/hbm/textures/items/blueprint_folder.png create mode 100644 src/main/resources/assets/hbm/textures/items/blueprint_folder_discover.png create mode 100644 src/main/resources/assets/hbm/textures/items/blueprint_folder_secret.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_CONCRETE.png diff --git a/changelog b/changelog index 1b5ea3998..958bb0f23 100644 --- a/changelog +++ b/changelog @@ -1,52 +1,16 @@ ## Added -* New assembler - * Features a brand new animated model, GUI and the new recipe selection system - * Many recipes have been reworked, with the microcrafting complexity reduced - * The redcoil didn't get a recipe. It's gonna die soon. - * Neither did the schrabidium transmutator - * Balls-o-tron's spawner can now be made without a worm coin, using a silver key instead. This means that, while expensive, it's possible to summon him without finding a jungle dungeon -* Blueprins - * Replace the journals - * Instead of opening them and making a template, they act as a multi template - * Blueprints need to remain in the slot, removing them will disable the recipes again - * Not actually part of worldgen yet - yeah i ran out of time, cry about it -* More paintables - * Paintable pneumatic tube - * Behaves the exact same as a regular pneumatic tube - * Can also be used as in and outputs - * Full block - * Paintable OpenComputers cable - * Only enabled if OpenComputers is installed - * Full block - * Also supports OC wire colors +* Blueprint booklets + * Can be found in worldgen + * Using it will create one random blueprint of the same type as the booklet +* Liquid concrete + * It's conk but liquid +* Rebar + * When hooked up to liquid concrete using pipes, will fill to create reinforced concrete + * Fills bottom to top, so connect the pipes to the top ## Changed -* Updated chinese and ukrainian localization -* Removed levitation unit -* Many of NTM's regular building blocks now have forge microblock support -* RBMK crane models now conform to the dimensions of the room they're in -* Projectile resistance for armor has been renamed to "physical" and now also extends to all direct forms of attack by other entities that don't fall into any other categories (mostly melee attacks) - * This should fix the issue where most armors are quite weak against swords -* Electric attacks (i.e. tesla cannon) are now in the "energy damage" category - * This means that armors that have energy resistance actually properly work against the tesla cannon -* Heavy components are being deprecated -* Flow control pumps can now be interfaced with OpenComputers -* The electrolyzer now remembers the last visited GUI screen -* Retextured many fluid containers such as universal tanks, canisters and gas tanks -* Removed the legacy assembler and chemical plant recipes from the template folder -* Removed journals from various loot pools -* Drinking whiskey now gives strength III, resistance III and nausea -* Chemical artillery shell recipes have now been moved to the assembler -* The chemical plant and factory now scale their max power based on the recipe, similar to how the arc welder works -* The chemical plant's default max power is now 100kHE again instead of 1MHE -* The NEI handlers for the old chemplant and assembler have been deactivated, however they will continue to function for the time being +* The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints ## Fixed -* Fixed gas centrifuge sound persisting when broken or when unloaded -* Fixed all centrifuge sounds trying to play even when the player is far away, using up audio slots -* Fixed guns that don't have durability always displaying a condition of 0% -* Fixed GL state leak caused by skeletons -* Fixed OpenComputers integration for the CCGT -* Fixed rotated RBMK consoles not behaving correctly when trying to change rod insertion levels -* Fixed crash caused by piston inserters on servers -* Fixed flare gun not having a firing sound +* Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit + * As an extra safeguard, the recipe loader now throws an exception if that happens \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 0a6cf6f64..1b7dd0f7d 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -315,12 +315,14 @@ public class ModBlocks { public static Block floodlight; public static Block floodlight_beam; + public static Block rebar; public static Block reinforced_stone; public static Block concrete_smooth; public static Block concrete_colored; public static Block concrete_colored_ext; public static Block concrete; public static Block concrete_asbestos; + public static Block concrete_rebar; public static Block concrete_super; public static Block concrete_super_broken; public static Block ducrete_smooth; @@ -1524,12 +1526,14 @@ public class ModBlocks { floodlight = new Floodlight(Material.iron).setBlockName("floodlight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); floodlight_beam = new FloodlightBeam().setBlockName("floodlight_beam"); + rebar = new BlockRebar().setBlockName("rebar").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":rebar"); reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone"); concrete_smooth = new BlockRadResistant(Material.rock).setBlockName("concrete_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete"); concrete_colored = new BlockConcreteColored(Material.rock).setBlockName("concrete_colored").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete"); concrete_colored_ext = new BlockConcreteColoredExt(Material.rock).setBlockName("concrete_colored_ext").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete_colored_ext"); concrete = new BlockGeneric(Material.rock).setBlockName("concrete").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete_tile"); concrete_asbestos = new BlockGeneric(Material.rock).setBlockName("concrete_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(150.0F).setBlockTextureName(RefStrings.MODID + ":concrete_asbestos"); + concrete_rebar = new BlockGeneric(Material.rock).setBlockName("concrete_rebar").setCreativeTab(MainRegistry.blockTab).setHardness(50.0F).setResistance(240.0F).setBlockTextureName(RefStrings.MODID + ":concrete_rebar"); concrete_super = new BlockUberConcrete().setBlockName("concrete_super").setCreativeTab(MainRegistry.blockTab).setHardness(150.0F).setResistance(1000.0F); concrete_super_broken = new BlockFalling(Material.rock).setBlockName("concrete_super_broken").setCreativeTab(MainRegistry.blockTab).setHardness(10.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":concrete_super_broken"); concrete_pillar = new BlockRotatablePillar(Material.rock, RefStrings.MODID + ":concrete_pillar_top").setBlockName("concrete_pillar").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(180.0F).setBlockTextureName(RefStrings.MODID + ":concrete_pillar_side"); @@ -2701,6 +2705,7 @@ public class ModBlocks { GameRegistry.registerBlock(reinforced_laminate_pane,ItemBlockBlastInfo.class, reinforced_laminate_pane.getUnlocalizedName()); //Bricks + register(rebar); GameRegistry.registerBlock(reinforced_stone, ItemBlockBlastInfo.class, reinforced_stone.getUnlocalizedName()); GameRegistry.registerBlock(reinforced_ducrete, ItemBlockBlastInfo.class, reinforced_ducrete.getUnlocalizedName()); GameRegistry.registerBlock(concrete_smooth, ItemBlockBlastInfo.class, concrete_smooth.getUnlocalizedName()); @@ -2708,6 +2713,7 @@ public class ModBlocks { GameRegistry.registerBlock(concrete_colored_ext, ItemBlockBlastInfo.class, concrete_colored_ext.getUnlocalizedName()); GameRegistry.registerBlock(concrete, ItemBlockBlastInfo.class, concrete.getUnlocalizedName()); GameRegistry.registerBlock(concrete_asbestos, ItemBlockBlastInfo.class, concrete_asbestos.getUnlocalizedName()); + GameRegistry.registerBlock(concrete_rebar, ItemBlockBlastInfo.class, concrete_rebar.getUnlocalizedName()); GameRegistry.registerBlock(concrete_super, ItemBlockBlastInfo.class, concrete_super.getUnlocalizedName()); GameRegistry.registerBlock(concrete_super_broken, ItemBlockBlastInfo.class, concrete_super_broken.getUnlocalizedName()); GameRegistry.registerBlock(ducrete_smooth, ItemBlockBlastInfo.class, ducrete_smooth.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockRebar.java b/src/main/java/com/hbm/blocks/generic/BlockRebar.java new file mode 100644 index 000000000..67b9f13c7 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockRebar.java @@ -0,0 +1,404 @@ +package com.hbm.blocks.generic; + +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.config.ClientConfig; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.lib.Library; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.ISBRHUniversal; +import com.hbm.render.util.RenderBlocksNT; +import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.tileentity.network.TileEntityPipeBaseNT; +import com.hbm.uninos.GenNode; +import com.hbm.uninos.INetworkProvider; +import com.hbm.uninos.UniNodespace; +import com.hbm.uninos.networkproviders.RebarNetwork; +import com.hbm.uninos.networkproviders.RebarNetworkProvider; +import com.hbm.util.BobMathUtil; +import com.hbm.util.Compat; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + +import api.hbm.fluidmk2.IFluidReceiverMK2; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockRebar extends BlockContainer implements ISBRHUniversal { + + @SideOnly(Side.CLIENT) protected IIcon concrete; + + public BlockRebar() { + super(Material.iron); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.concrete = reg.registerIcon(RefStrings.MODID + ":concrete_liquid"); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityRebar(); + } + + @Override public int getRenderType() { return renderID; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { + return true; + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { + TileEntity tile = world.getTileEntity(x, y, z); + if(!(tile instanceof TileEntityRebar)) return; + + TileEntityRebar rebar = (TileEntityRebar) tile; + rebar.hasConnection = false; + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + TileEntity neighbor = Compat.getTileStandard(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ); + if(neighbor instanceof TileEntityPipeBaseNT) { + rebar.hasConnection = true; + return; + } + } + } + + public static class TileEntityRebar extends TileEntityLoadedBase implements IFluidReceiverMK2, IBufPacketReceiver { + + public int progress; + public int prevProgress; + protected RebarNode node; + public boolean hasConnection = false; + + @Override + public void updateEntity() { + + long time = worldObj.getTotalWorldTime(); + + if(!worldObj.isRemote) { + + if(prevProgress != progress) { + worldObj.markTileEntityChunkModified(xCoord, yCoord, zCoord, this); + prevProgress = progress; + } + + if(this.progress >= 1_000) { + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.concrete_rebar); + return; + } + + if(time % 60 == 0) { + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + this.trySubscribe(Fluids.CONCRETE, worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); + } + } + + if(this.node == null || this.node.expired) { + + this.node = (RebarNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, RebarNetworkProvider.THE_PROVIDER); + + if(this.node == null || this.node.expired) { + this.node = this.createNode(); + UniNodespace.createNode(worldObj, this.node); + } + } + + this.networkPackNT(100); + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + if(this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, RebarNetworkProvider.THE_PROVIDER); + } + } + } + + @Override public void serialize(ByteBuf buf) { buf.writeInt(progress); } + @Override public void deserialize(ByteBuf buf) { this.progress = buf.readInt(); } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.progress = nbt.getInteger("progress"); + this.hasConnection = nbt.getBoolean("hasConnection"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("progress", this.progress); + nbt.setBoolean("hasConnection", this.hasConnection); + } + + public RebarNode createNode() { + TileEntity tile = (TileEntity) this; + return new RebarNode(RebarNetworkProvider.THE_PROVIDER, new BlockPos(tile.xCoord, tile.yCoord, tile.zCoord)).setConnections( + new DirPos(tile.xCoord + 1, tile.yCoord, tile.zCoord, Library.POS_X), + new DirPos(tile.xCoord - 1, tile.yCoord, tile.zCoord, Library.NEG_X), + new DirPos(tile.xCoord, tile.yCoord + 1, tile.zCoord, Library.POS_Y), + new DirPos(tile.xCoord, tile.yCoord - 1, tile.zCoord, Library.NEG_Y), + new DirPos(tile.xCoord, tile.yCoord, tile.zCoord + 1, Library.POS_Z), + new DirPos(tile.xCoord, tile.yCoord, tile.zCoord - 1, Library.NEG_Z) + ); + } + + @Override + public FluidTank[] getAllTanks() { + FluidTank tank = new FluidTank(Fluids.CONCRETE, 1_000); + tank.setFill(progress); + return new FluidTank[] {tank}; + } + + @Override + public long transferFluid(FluidType type, int pressure, long amount) { + if(type != Fluids.CONCRETE) return amount; + if(this.node == null || this.node.expired || !this.node.hasValidNet()) return amount; + + List lowestLinks = new ArrayList(); + int lowestY = 256; + int progress = 0; + int capacity = 0; + + for(Object o : this.node.net.links) { + RebarNode node = (RebarNode) o; + int y = node.positions[0].getY(); //rebar can only have one pos, there's no multiblock rebar + + if(y < lowestY) { + lowestY = y; + progress = 0; + capacity = 0; + lowestLinks.clear(); + } + + if(y == lowestY) { + TileEntity tile = worldObj.getTileEntity(node.positions[0].getX(), y, node.positions[0].getZ()); + if(!(tile instanceof TileEntityRebar)) continue; + + TileEntityRebar rebar = (TileEntityRebar) tile; + + progress += rebar.progress; + capacity += 1_000; + lowestLinks.add(rebar); + } + } + + if(capacity > 0 && !lowestLinks.isEmpty()) { + int maxSpeed = 50; + int maxAccept = (int) BobMathUtil.min(capacity - progress, amount, maxSpeed * lowestLinks.size()); + int target = Math.min((progress + maxAccept) / lowestLinks.size(), 1_000); + + for(TileEntityRebar rebar : lowestLinks) { + if(rebar.progress >= target) continue; + int delta = target - rebar.progress; + if(delta > amount) continue; + + rebar.progress += delta; + amount -= delta; + } + } + + return amount; + } + + @Override + public long getDemand(FluidType type, int pressure) { + return 10_000; + } + } + + public static class RebarNode extends GenNode { + + public RebarNode(INetworkProvider provider, BlockPos... positions) { + super(provider, positions); + } + + @Override + public RebarNode setConnections(DirPos... connections) { + super.setConnections(connections); + return this; + } + } + + @Override + public void renderInventoryBlock(Block block, int meta, int modelId, Object renderBlocks) { + + GL11.glPushMatrix(); + RenderBlocks renderer = (RenderBlocks) renderBlocks; + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + double o = 0.25D; + renderer.setRenderBounds(0.4375D - o, 0D, 0.4375D - o, 0.5625D - o, 1D, 0.5625D - o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D - o, 0D, 0.4375D + o, 0.5625D - o, 1D, 0.5625D + o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D + o, 0D, 0.4375D - o, 0.5625D + o, 1D, 0.5625D - o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D + o, 0D, 0.4375D + o, 0.5625D + o, 1D, 0.5625D + o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + + renderer.setRenderBounds(0D, 0.4375D - o, 0.4375D - o, 1D, 0.5625D - o, 0.5625D - o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.4375D - o, 0.4375D + o, 1D, 0.5625D - o, 0.5625D + o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.4375D + o, 0.4375D - o, 1D, 0.5625D + o, 0.5625D - o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.4375D + o, 0.4375D + o, 1D, 0.5625D + o, 0.5625D + o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + + renderer.setRenderBounds(0.4375D - o, 0.4375D - o, 0D, 0.5625D - o, 0.5625D - o, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D - o, 0.4375D + o, 0D, 0.5625D - o, 0.5625D + o, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D + o, 0.4375D - o, 0D, 0.5625D + o, 0.5625D - o, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D + o, 0.4375D + o, 0D, 0.5625D + o, 0.5625D + o, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, Object renderBlocks) { + + RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world); + + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + double o = 0.25D; + double min = -0.001; + double max = 1.001; + + if(ClientConfig.RENDER_REBAR_SIMPLE.get()) { + renderer.setRenderBounds(0.4375D, min, 0.4375D, 0.5625D, max, 0.5625D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(min, 0.4375D, 0.4375D, max, 0.5625D, 0.5625D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D, 0.4375D, min, 0.5625D, 0.5625D, max); renderer.renderStandardBlock(block, x, y, z); + } else { + renderer.setRenderBounds(0.4375D - o, min, 0.4375D - o, 0.5625D - o, max, 0.5625D - o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D - o, min, 0.4375D + o, 0.5625D - o, max, 0.5625D + o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D + o, min, 0.4375D - o, 0.5625D + o, max, 0.5625D - o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D + o, min, 0.4375D + o, 0.5625D + o, max, 0.5625D + o); renderer.renderStandardBlock(block, x, y, z); + + renderer.setRenderBounds(min, 0.4375D - o, 0.4375D - o, max, 0.5625D - o, 0.5625D - o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(min, 0.4375D - o, 0.4375D + o, max, 0.5625D - o, 0.5625D + o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(min, 0.4375D + o, 0.4375D - o, max, 0.5625D + o, 0.5625D - o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(min, 0.4375D + o, 0.4375D + o, max, 0.5625D + o, 0.5625D + o); renderer.renderStandardBlock(block, x, y, z); + + renderer.setRenderBounds(0.4375D - o, 0.4375D - o, min, 0.5625D - o, 0.5625D - o, max); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D - o, 0.4375D + o, min, 0.5625D - o, 0.5625D + o, max); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D + o, 0.4375D - o, min, 0.5625D + o, 0.5625D - o, max); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D + o, 0.4375D + o, min, 0.5625D + o, 0.5625D + o, max); renderer.renderStandardBlock(block, x, y, z); + } + + /*TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityRebar) { + TileEntityRebar rebar = (TileEntityRebar) tile; + if(rebar.progress > 0) { + double height = rebar.progress / 1000D; + renderer.setOverrideBlockTexture(concrete); + renderer.setRenderBounds(0, 0, 0, 1, height, 1); renderer.renderStandardBlock(block, x, y, z); + renderer.clearOverrideBlockTexture(); + } + }*/ + + return true; + } + + // from ModEventHandlerClient.onRenderWorldLastEvent + @SideOnly(Side.CLIENT) + public static void renderRebar(List tiles, float interp) { + + List rebars = new ArrayList(); + for(Object o : tiles) { + if(!(o instanceof TileEntityRebar)) continue; + TileEntityRebar rebar = (TileEntityRebar) o; + if(rebar.progress > 0) rebars.add(rebar); + } + + if(!rebars.isEmpty()) { + + GL11.glPushMatrix(); + GL11.glShadeModel(GL11.GL_SMOOTH); + //RenderHelper.enableStandardItemLighting(); + + EntityRenderer entityRenderer = Minecraft.getMinecraft().entityRenderer; + entityRenderer.enableLightmap(interp); + + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + World world = Minecraft.getMinecraft().theWorld; + + double dx = player.prevPosX + (player.posX - player.prevPosX) * interp; + double dy = player.prevPosY + (player.posY - player.prevPosY) * interp; + double dz = player.prevPosZ + (player.posZ - player.prevPosZ) * interp; + + RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world); + renderer.setOverrideBlockTexture(((BlockRebar) ModBlocks.rebar).concrete); + Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture); + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + + for(TileEntityRebar rebar : rebars) { + tess.setTranslation(-dx, -dy, -dz); + tess.setColorRGBA_F(1F, 1F, 1F, 1F); + renderer.setRenderBounds(0, 0, 0, 1, rebar.progress / 1000D, 1); + renderer.renderStandardBlock(ModBlocks.rebar, rebar.xCoord, rebar.yCoord, rebar.zCoord); + + /*IIcon icon = ((BlockRebar) ModBlocks.rebar).concrete; + double minU = icon.getInterpolatedU(renderer.renderMinX * 16.0D); + double maxU = icon.getInterpolatedU(renderer.renderMaxX * 16.0D); + double minV = icon.getInterpolatedV(renderer.renderMinZ * 16.0D); + double maxV = icon.getInterpolatedV(renderer.renderMaxZ * 16.0D); + + double minX = rebar.xCoord + renderer.renderMinX; + double maxX = rebar.xCoord + renderer.renderMaxX; + double minY = rebar.yCoord + renderer.renderMinY; + double maxY = rebar.yCoord + renderer.renderMaxY; + double minZ = rebar.zCoord + renderer.renderMinZ; + double maxZ = rebar.zCoord + renderer.renderMaxZ; + + //tess.setColorOpaque_F(0.5F, 1F, 1F); + tess.setNormal(0, 1, 0); + tess.addVertexWithUV(maxX, maxY, maxZ, maxU, maxV); + tess.addVertexWithUV(maxX, maxY, minZ, maxU, minV); + tess.addVertexWithUV(minX, maxY, minZ, minU, minV); + tess.addVertexWithUV(minX, maxY, maxZ, minU, maxV);*/ + } + + tess.draw(); + tess.setTranslation(0, 0, 0); + renderer.clearOverrideBlockTexture(); + entityRenderer.disableLightmap(interp); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/java/com/hbm/blocks/rail/IRenderBlock.java b/src/main/java/com/hbm/blocks/rail/IRenderBlock.java index 7cf90e9fd..f8b75055e 100644 --- a/src/main/java/com/hbm/blocks/rail/IRenderBlock.java +++ b/src/main/java/com/hbm/blocks/rail/IRenderBlock.java @@ -7,6 +7,7 @@ import net.minecraft.block.Block; import net.minecraft.client.renderer.Tessellator; import net.minecraft.world.IBlockAccess; +@Deprecated public interface IRenderBlock { public static int renderID = RenderingRegistry.getNextAvailableRenderId(); diff --git a/src/main/java/com/hbm/config/ClientConfig.java b/src/main/java/com/hbm/config/ClientConfig.java index 1ddd4cf21..0dc370790 100644 --- a/src/main/java/com/hbm/config/ClientConfig.java +++ b/src/main/java/com/hbm/config/ClientConfig.java @@ -32,6 +32,7 @@ public class ClientConfig extends RunningConfig { public static ConfigWrapper RENDER_REEDS = new ConfigWrapper(!Compat.isModLoaded(Compat.MOD_ANG)); public static ConfigWrapper NEI_HIDE_SECRETS = new ConfigWrapper(true); public static ConfigWrapper COOLING_TOWER_PARTICLES = new ConfigWrapper(true); + public static ConfigWrapper RENDER_REBAR_SIMPLE = new ConfigWrapper(false); private static void initDefaults() { configMap.put("GEIGER_OFFSET_HORIZONTAL", GEIGER_OFFSET_HORIZONTAL); @@ -53,6 +54,7 @@ public class ClientConfig extends RunningConfig { configMap.put("RENDER_REEDS", RENDER_REEDS); configMap.put("NEI_HIDE_SECRETS", NEI_HIDE_SECRETS); configMap.put("COOLING_TOWER_PARTICLES", COOLING_TOWER_PARTICLES); + configMap.put("RENDER_REBAR_SIMPLE", RENDER_REBAR_SIMPLE); } /** Initializes defaults, then reads the config file if it exists, then writes the config file. */ diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index b01ee10cf..d8d52b0ce 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -160,6 +160,10 @@ public class ToolRecipes { //Bobmazon CraftingManager.addShapelessAuto(new ItemStack(ModItems.bobmazon), new Object[] { Items.book, Items.gold_nugget, Items.string, KEY_BLUE }); + //Blueprints + //CraftingManager.addShapelessAuto(new ItemStack(ModItems.blueprint_folder, 1, 0), new Object[] { ModItems.blueprints, ModItems.blueprints, ModItems.blueprints }); + //CraftingManager.addShapelessAuto(new ItemStack(ModItems.blueprint_folder, 1, 1), new Object[] { ModItems.blueprints, ModItems.blueprints, ModItems.blueprints, ModItems.blueprints, ModItems.blueprints, ModItems.fragment_meteorite }); + //Carts CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(EnumCartBase.WOOD, EnumMinecart.EMPTY), new Object[] { "P P", "WPW", 'P',KEY_SLAB, 'W', KEY_PLANKS }); CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(EnumCartBase.STEEL, EnumMinecart.EMPTY), new Object[] { "P P", "IPI", 'P', STEEL.plate(), 'I', STEEL.ingot() }); diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index cadd39969..b020867c4 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -190,6 +190,7 @@ public class Fluids { public static FluidType SODIUM_ALUMINATE; public static FluidType BAUXITE_SOLUTION; public static FluidType ALUMINA; + public static FluidType CONCRETE; /* Lagacy names for compatibility purposes */ @Deprecated public static FluidType ACID; //JAOPCA uses this, apparently @@ -405,7 +406,8 @@ public class Fluids { SODIUM_ALUMINATE = new FluidType("SODIUM_ALUMINATE", 0xFFD191, 3, 0, 1, EnumSymbol.ACID).addTraits(new FT_Corrosive(30), LIQUID); BAUXITE_SOLUTION = new FluidType("BAUXITE_SOLUTION", 0xE2560F, 3, 0, 3, EnumSymbol.ACID).addTraits(new FT_Corrosive(40), LIQUID, VISCOUS); ALUMINA = new FluidType("ALUMINA", 0xDDFFFF, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); - AIR = new FluidType(151, "AIR", 0xE7EAEB, 0, 0, 0, EnumSymbol.NONE).addTraits(GASEOUS); + AIR = new FluidType("AIR", 0xE7EAEB, 0, 0, 0, EnumSymbol.NONE).addTraits(GASEOUS); + CONCRETE = new FluidType(152, "CONCRETE", 0xA2A2A2, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE @@ -553,6 +555,7 @@ public class Fluids { metaOrder.add(SODIUM_ALUMINATE); metaOrder.add(BAUXITE_SOLUTION); metaOrder.add(ALUMINA); + metaOrder.add(CONCRETE); //solutions and working fluids metaOrder.add(FRACKSOL); metaOrder.add(LYE); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 1960d4dfb..476cb5e31 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -26,8 +26,6 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.material.Mats; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; -import com.hbm.items.ItemEnums.EnumCasingType; -import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; @@ -36,7 +34,6 @@ import com.hbm.items.machine.ItemPACoil.EnumCoilType; import com.hbm.items.machine.ItemPistons.EnumPistonType; import com.hbm.items.weapon.ItemAmmoHIMARS; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; -import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.main.MainRegistry; import cpw.mods.fml.common.Loader; @@ -98,7 +95,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.warhead_volcano, 1), new AStack[] {new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.CAPACITOR_BOARD.ordinal()) }, 600); makeRecipe(new ComparableStack(ModItems.missile_stealth, 1), new AStack[] { new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(CU.plate(), 10), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32) },1200); makeRecipe(new ComparableStack(ModItems.thruster_nuclear, 1), new AStack[] {new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new ComparableStack(ModItems.pipes_steel) },600); - makeRecipe(new ComparableStack(ModItems.tritium_deuterium_cake, 1), new AStack[] {new ComparableStack(ModItems.cell_deuterium, 6), new ComparableStack(ModItems.cell_tritium, 2), new OreDictStack(LI.ingot(), 4), },150); makeRecipe(new ComparableStack(ModItems.pellet_cluster, 1), new AStack[] {new OreDictStack(STEEL.plate(), 4), new ComparableStack(Blocks.tnt, 1), }, 50); makeRecipe(new ComparableStack(ModItems.pellet_buckshot, 1), new AStack[] {new OreDictStack(PB.nugget(), 6), }, 50); makeRecipe(new ComparableStack(ModItems.magnetron, 1), new AStack[] {new OreDictStack(CU.plate(), 3), new OreDictStack(W.wireFine(), 4), }, 40); @@ -157,7 +153,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModBlocks.nuke_fleija, 1), new AStack[] {new OreDictStack(AL.shell(), 1), new ComparableStack(ModItems.fins_quad_titanium, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new OreDictStack("dyeWhite", 4), },400); makeRecipe(new ComparableStack(ModBlocks.nuke_solinium, 1), new AStack[] {new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_quad_titanium, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new OreDictStack("dyeGray", 8), },400); makeRecipe(new ComparableStack(ModBlocks.nuke_n2, 1), new AStack[] {new OreDictStack(STEEL.shell(), 6), new OreDictStack(MAGTUNG.wireFine(), 12), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER), new OreDictStack("dyeBlack", 8), },300); - makeRecipe(new ComparableStack(ModBlocks.nuke_fstbmb, 1), new AStack[] {new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(TI.shell(), 6), new ComparableStack(ModItems.fins_big_steel, 1), new ComparableStack(ModItems.powder_magic, 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack("dyeGray", 8), },600, ModItems.journal_pip, ModItems.journal_bj); makeRecipe(new ComparableStack(ModBlocks.nuke_custom, 1), new AStack[] {new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_small_steel, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack("dyeGray", 4), },300); makeRecipe(new ComparableStack(ModBlocks.float_bomb, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireDense(), 8), },250); makeRecipe(new ComparableStack(ModBlocks.therm_endo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.powder_ice, 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4), },250); @@ -237,13 +232,13 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.mp_warhead_10_buster, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(TI.plate(), 4), new ComparableStack(ModBlocks.det_charge, 1), new ComparableStack(ModBlocks.det_cord, 4), new OreDictStack(CU.plateCast(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), },100); makeRecipe(new ComparableStack(ModItems.mp_warhead_10_nuclear, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(PU239.ingot(), 1), new OreDictStack(OreDictManager.getReflector(), 2), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), },200); makeRecipe(new ComparableStack(ModItems.mp_warhead_10_nuclear_large, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 8), new OreDictStack(AL.plate(), 4), new OreDictStack(PU239.ingot(), 2), new ComparableStack(ModBlocks.det_charge, 4), new ComparableStack(ModItems.circuit,3, EnumCircuitType.ADVANCED), },300); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_taint, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.powder_magic, 12), new ComparableStack(ModItems.bucket_mud, 1), },100, ModItems.journal_pip); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_cloud, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.grenade_pink_cloud, 2), },100, ModItems.journal_pip); + makeRecipe(new ComparableStack(ModItems.mp_warhead_10_taint, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.powder_magic, 12), new ComparableStack(ModItems.bucket_mud, 1), },100); + makeRecipe(new ComparableStack(ModItems.mp_warhead_10_cloud, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.grenade_pink_cloud, 2), },100); makeRecipe(new ComparableStack(ModItems.mp_warhead_15_he, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_charge, 4), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC), },200); makeRecipe(new ComparableStack(ModItems.mp_warhead_15_incendiary, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_charge, 2), new OreDictStack(P_RED.dust(), 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC), },200); makeRecipe(new ComparableStack(ModItems.mp_warhead_15_nuclear, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 24), new OreDictStack(TI.plate(), 12), new OreDictStack(PU239.ingot(), 3), new ComparableStack(ModBlocks.det_charge, 6), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.ADVANCED), },500); makeRecipe(new ComparableStack(ModItems.mp_warhead_15_n2, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 8), new OreDictStack(TI.plate(), 20), new ComparableStack(ModBlocks.det_charge, 24), new ComparableStack(Blocks.redstone_block, 12), new OreDictStack(MAGTUNG.dust(), 6), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), },400); - makeRecipe(new ComparableStack(ModItems.mp_warhead_15_balefire, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(OreDictManager.getReflector(), 16), new ComparableStack(ModItems.powder_magic, 6), new ComparableStack(ModItems.egg_balefire_shard, 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), }, 60, ModItems.journal_bj); + makeRecipe(new ComparableStack(ModItems.mp_warhead_15_balefire, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(OreDictManager.getReflector(), 16), new ComparableStack(ModItems.powder_magic, 6), new ComparableStack(ModItems.egg_balefire_shard, 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), }, 60); makeRecipe(new ComparableStack(ModItems.fusion_shield_tungsten, 1), new AStack[] {new OreDictStack(W.block(), 32), new OreDictStack(OreDictManager.getReflector(), 96)}, 600); makeRecipe(new ComparableStack(ModItems.fusion_shield_desh, 1), new AStack[] {new OreDictStack(DESH.block(), 16), new OreDictStack(CO.block(), 16), new OreDictStack(BIGMT.plate(), 96)}, 600); makeRecipe(new ComparableStack(ModItems.fusion_shield_chlorophyte, 1), new AStack[] {new OreDictStack(W.block(), 16), new OreDictStack(DURA.block(), 16), new OreDictStack(OreDictManager.getReflector(), 48), new ComparableStack(ModItems.powder_chlorophyte, 48)}, 600); @@ -258,15 +253,6 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.part_generic, 32, EnumPartType.LDE) },600); - makeRecipe(new ComparableStack(ModItems.missile_soyuz_lander, 1), new AStack[] { - new OreDictStack(AL.shell(), 4), - new OreDictStack(RUBBER.ingot(), 16), - new ComparableStack(ModItems.rocket_fuel, 16), - new ComparableStack(ModItems.thruster_small, 3), - new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER_ADVANCED), - new ComparableStack(ModItems.part_generic, 12, EnumPartType.LDE) - },600, ModItems.journal_bj); - makeRecipe(new ComparableStack(ModItems.sat_base, 1), new AStack[] { new OreDictStack(RUBBER.ingot(), 12), new OreDictStack(TI.shell(), 3), @@ -397,7 +383,7 @@ public class AssemblerRecipes extends SerializableRecipe { new OreDictStack(STEEL.plate528(), 16), new OreDictStack(CU.ingot(), 12), new OreDictStack(GOLD.wireDense(), 8), - new ComparableStack(ModItems.tank_steel, 4), + new OreDictStack(STEEL.shell(), 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC) }, 300); @@ -405,7 +391,7 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.ingot_firebrick, 12), new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(CU.plateWelded(), 2), - new ComparableStack(ModItems.tank_steel, 2), + new OreDictStack(STEEL.shell(), 2), new OreDictStack(ANY_CONCRETE.any(), 8) }, 100); @@ -573,15 +559,6 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.coin_worm, 1) }, 1200); - makeRecipe(new ComparableStack(ModItems.sat_gerald, 1), new AStack[] { - new OreDictStack(SBD.plateCast(), 128), - new OreDictStack(BSCCO.wireDense(), 128), - new ComparableStack(ModBlocks.det_nuke, 64), - new ComparableStack(ModItems.part_generic, 256, EnumPartType.HDE), - new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM), - new ComparableStack(ModItems.coin_ufo, 1), - }, 1200, ModItems.journal_bj); - makeRecipe(new ComparableStack(ModBlocks.vault_door, 1), new AStack[] { new OreDictStack(STEEL.ingot(), 32), new OreDictStack(W.ingot(), 32), @@ -785,18 +762,6 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), }, 100); - makeRecipe(new ComparableStack(ModItems.ammo_standard, 6, EnumAmmo.BMG50_SM), new AStack[] { - new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE_STEEL), - new OreDictStack(ANY_SMOKELESS.dust(), 6), - new OreDictStack(STAR.ingot(), 3), - }, 100, ModItems.journal_silver); - makeRecipe(new ComparableStack(ModItems.ammo_secret, 12, EnumAmmoSecret.BMG50_BLACK), new AStack[] { - new ComparableStack(ModItems.casing, 2, EnumCasingType.LARGE_STEEL), - new OreDictStack(ANY_SMOKELESS.dust(), 24), - new ComparableStack(ModItems.item_secret, 1, EnumSecretType.SELENIUM_STEEL), - new ComparableStack(ModItems.black_diamond), - }, 1200, ModItems.journal_silver); - makeRecipe(new ComparableStack(ModBlocks.machine_silex, 1), new AStack[] { new ComparableStack(ModBlocks.glass_quartz, 16), !exp ? new OreDictStack(STEEL.plateCast(), 8) : new OreDictStack(STEEL.heavyComp(), 1), @@ -929,8 +894,8 @@ public class AssemblerRecipes extends SerializableRecipe { !exp ? new OreDictStack(STEEL.plateCast(), 8) : new OreDictStack(STEEL.heavyComp(), 2), !exp ? new OreDictStack(CU.plate528(), 16) : new OreDictStack(CU.heavyComp(), 1), new OreDictStack(RUBBER.ingot(), 8), + new OreDictStack(STEEL.shell(), 3), new ComparableStack(ModItems.ingot_firebrick, 16), - new ComparableStack(ModItems.tank_steel, 3), new ComparableStack(ModItems.coil_copper, 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC) }, 200); @@ -1112,7 +1077,6 @@ public class AssemblerRecipes extends SerializableRecipe { if(!GeneralConfig.enable528) { makeRecipe(new ComparableStack(ModBlocks.machine_hephaestus, 1), new AStack[] { new OreDictStack(STEEL.pipe(), 12), !exp ? new OreDictStack(STEEL.ingot(), 24) : new OreDictStack(STEEL.heavyComp(), 2), !exp ? new OreDictStack(CU.plate(), 24) : new OreDictStack(CU.heavyComp(), 2), new OreDictStack(NB.ingot(), 4), new OreDictStack(RUBBER.ingot(), 12), new ComparableStack(ModBlocks.glass_quartz, 16) }, 150); - makeRecipe(new ComparableStack(ModBlocks.machine_radgen, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.coil_magnetized_tungsten, 6), new OreDictStack(MAGTUNG.wireFine(), 24), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC), new ComparableStack(ModItems.reactor_core, 3), new OreDictStack(STAR.ingot(), 1), new OreDictStack("dyeRed", 1), }, 400, ModItems.journal_pip); makeRecipe(new ComparableStack(ModBlocks.machine_reactor_breeding, 1), new AStack[] {new ComparableStack(ModItems.reactor_core, 1), new OreDictStack(STEEL.ingot(), 12), new OreDictStack(PB.plate(), 16), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ASBESTOS.ingot(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.crt_display, 1)},150); makeRecipe(new ComparableStack(ModBlocks.reactor_research, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.motor_desh, 2), new OreDictStack(B.ingot(), 5), new OreDictStack(PB.plate(), 8), new ComparableStack(ModItems.crt_display, 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC), },300); @@ -1206,8 +1170,8 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.motor_desh, 2), !exp ? new ComparableStack(ModItems.plate_desh, 6) : new OreDictStack(DESH.heavyComp()), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), - new ComparableStack(ModItems.tank_steel, 24), - new ComparableStack(ModItems.pipes_steel, 2) + new OreDictStack(STEEL.shell(), 16), + new OreDictStack(STEEL.pipe(), 12) }, 600); makeRecipe(new ComparableStack(ModBlocks.machine_catalytic_cracker), new AStack[] { @@ -1243,8 +1207,8 @@ public class AssemblerRecipes extends SerializableRecipe { new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(PB.plate528(), 12), new OreDictStack(CU.plateCast(), 4), - new ComparableStack(ModItems.thermo_element, 8), - new ComparableStack(ModItems.tank_steel, 3) + new OreDictStack(STEEL.shell(), 2), + new ComparableStack(ModItems.thermo_element, 8) }, 200); makeRecipe(new ComparableStack(ModBlocks.transition_seal, 1), new AStack[]{ diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 472a33cc1..1406819af 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -284,7 +284,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.dieselgen").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_diesel, 1)) .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4))); this.register(new GenericRecipe("ass.combustiongen").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_combustion_engine, 1)) - .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(CU.ingot(), 12), new OreDictStack(GOLD.wireDense(), 8), new ComparableStack(ModItems.tank_steel, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(CU.ingot(), 12), new OreDictStack(GOLD.wireDense(), 8), new ComparableStack(ModItems.canister_empty, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.pistonsetsteel").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.STEEL.ordinal())) .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(CU.plate(), 4), new OreDictStack(W.ingot(), 8), new OreDictStack(W.bolt(), 16))); this.register(new GenericRecipe("ass.pistonsetdura").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.DURA.ordinal())) @@ -356,10 +356,10 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.QUANTUM))); this.register(new GenericRecipe("ass.detector").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_detector, 1)) .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 24), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM))); - this.register(new GenericRecipe("ass.pagold").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.GOLD.ordinal())).inputItems(new OreDictStack(GOLD.wireDense(), 128))); + this.register(new GenericRecipe("ass.pagold").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.GOLD.ordinal())).inputItems(new OreDictStack(GOLD.wireDense(), 64), new OreDictStack(GOLD.wireDense(), 64))); this.register(new GenericRecipe("ass.panbti").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.NIOBIUM.ordinal())).inputItems(new OreDictStack(NB.wireDense(), 64), new OreDictStack(TI.wireDense(), 64))); this.register(new GenericRecipe("ass.pabscco").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.BSCCO.ordinal())).inputItems(new OreDictStack(BSCCO.wireDense(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64))); - this.register(new GenericRecipe("ass.pachlorophyte").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.CHLOROPHYTE.ordinal())).inputItems(new OreDictStack(CU.wireDense(), 128), new ComparableStack(ModItems.powder_chlorophyte, 16))); + this.register(new GenericRecipe("ass.pachlorophyte").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.CHLOROPHYTE.ordinal())).inputItems(new OreDictStack(CU.wireDense(), 64), new OreDictStack(CU.wireDense(), 64), new ComparableStack(ModItems.powder_chlorophyte, 16))); this.register(new GenericRecipe("ass.exposurechamber").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_exposure_chamber, 1)) .inputItems(new OreDictStack(AL.plateCast(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModBlocks.capacitor_tantalium, 1), new ComparableStack(ModBlocks.glass_quartz, 16))); @@ -385,9 +385,9 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.fusionheater").setup(200, 100).outputItems(new ItemStack(ModBlocks.fusion_heater, 4)) .inputItems(new OreDictStack(W.plateWelded(), 2), new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.magnetron, 2))); this.register(new GenericRecipe("ass.blankettungsten").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_tungsten, 1)) - .inputItems(new OreDictStack(W.block(), 32), new OreDictStack(OreDictManager.getReflector(), 96))); + .inputItems(new OreDictStack(W.block(), 32), new OreDictStack(OreDictManager.getReflector(), 64))); this.register(new GenericRecipe("ass.blanketdesh").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_desh, 1)) - .inputItems(new OreDictStack(DESH.block(), 16), new OreDictStack(CO.block(), 16), new OreDictStack(BIGMT.plate(), 96))); + .inputItems(new OreDictStack(DESH.block(), 16), new OreDictStack(CO.block(), 16), new OreDictStack(BIGMT.plate(), 64))); this.register(new GenericRecipe("ass.blanketchlorophyte").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_chlorophyte, 1)) .inputItems(new OreDictStack(W.block(), 16), new OreDictStack(DURA.block(), 16), new OreDictStack(OreDictManager.getReflector(), 48), new ComparableStack(ModItems.powder_chlorophyte, 48))); @@ -579,9 +579,9 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.fritz").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_fritz, 1)) .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.barrel_steel))); this.register(new GenericRecipe("ass.arty").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.turret_arty, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 128), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 12), new OreDictStack(WEAPONSTEEL.mechanism(), 16), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(STEEL.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 12), new OreDictStack(WEAPONSTEEL.mechanism(), 16), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); this.register(new GenericRecipe("ass.himars").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.turret_himars, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 128), new OreDictStack(ANY_PLASTIC.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), new OreDictStack(BIGMT.mechanism(), 8), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), new OreDictStack(BIGMT.mechanism(), 8), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); this.register(new GenericRecipe("ass.himarssmall").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL)) .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 48), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 48), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.himarssmallhe").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_HE)) diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index 4bbf1074c..ca0228ca0 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -60,7 +60,7 @@ public class ChemicalPlantRecipes extends GenericRecipes { this.register(new GenericRecipe("chem.xenonoxy").setupNamed(20, 1_000).setIcon(ModItems.gas_full, Fluids.XENON.getID()) .inputFluids(new FluidStack(Fluids.AIR, 8_000), new FluidStack(Fluids.OXYGEN, 250)) - .outputFluids(new FluidStack(Fluids.XENON, 50))); + .outputFluids(new FluidStack(Fluids.XENON, 50)).setPools(GenericRecipes.POOL_PREFIX_ALT + ".xenonoxy")); this.register(new GenericRecipe("chem.helium3").setupNamed(200, 2_000).setIcon(ModItems.gas_full, Fluids.HELIUM3.getID()) .inputItems(new ComparableStack(ModBlocks.moon_turf, 8)) @@ -131,6 +131,11 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.WATER, 2_000)) .outputItems(new ItemStack(ModBlocks.ducrete_smooth, 8))); + this.register(new GenericRecipe("chem.liquidconk").setup(100, 100) + .inputItems(new ComparableStack(ModItems.powder_cement, 1), new ComparableStack(Blocks.gravel, 8), new OreDictStack(KEY_SAND, 8)) + .inputFluids(new FluidStack(Fluids.WATER, 2_000)) + .outputFluids(new FluidStack(Fluids.CONCRETE, 16_000))); + this.register(new GenericRecipe("chem.asphalt").setup(100, 100) .inputItems(new ComparableStack(Blocks.gravel, 2), new OreDictStack(KEY_SAND, 6)) .inputFluids(new FluidStack(Fluids.BITUMEN, 1_000)) @@ -209,7 +214,7 @@ public class ChemicalPlantRecipes extends GenericRecipes { this.register(new GenericRecipe("chem.birkeland").setupNamed(200, 5_000) .inputFluids(new FluidStack(Fluids.AIR, 8_000), new FluidStack(Fluids.WATER, 2_000)) - .outputFluids(new FluidStack(Fluids.NITRIC_ACID, 1_000))); + .outputFluids(new FluidStack(Fluids.NITRIC_ACID, 1_000)).setPools(GenericRecipes.POOL_PREFIX_ALT + ".birkeland")); this.register(new GenericRecipe("chem.schrabidic").setup(100, 5_000) .inputItems(new ComparableStack(ModItems.pellet_charged)) diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 264e67cda..0f98be052 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -57,7 +57,7 @@ public class GenericRecipe { public GenericRecipe setNamed() { this.customLocalization = true; return this; } public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } - public GenericRecipe inputItems(AStack... input) { this.inputItem = input; return this; } + public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; } public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; } public GenericRecipe outputFluids(FluidStack... output) { this.outputFluid = output; return this; } diff --git a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java index 7bbeea0e0..8f1a78633 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java @@ -50,7 +50,8 @@ public class ItemPoolsComponent { weighted(ModItems.circuit, EnumCircuitType.VACUUM_TUBE.ordinal(), 1, 2, 4), weighted(ModItems.circuit, EnumCircuitType.PCB.ordinal(), 1, 3, 5), weighted(ModItems.circuit, EnumCircuitType.CAPACITOR.ordinal(), 1, 1, 3), - weighted(ModItems.blade_titanium, 0, 1, 8, 1) + weighted(ModItems.blade_titanium, 0, 1, 8, 1), + weighted(ModItems.blueprint_folder, 0, 1, 1, 1) }; }}; @@ -123,7 +124,8 @@ public class ItemPoolsComponent { weighted(ModItems.toothpicks, 0, 1, 16, 10), weighted(ModItems.dust, 0, 1, 1, 40), weighted(ModItems.dust_tiny, 0, 1, 3, 75), - weighted(ModItems.ink, 0, 1, 1, 1) + weighted(ModItems.ink, 0, 1, 1, 1), + weighted(ModItems.blueprint_folder, 0, 1, 1, 5) }; }}; diff --git a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java index 289a495e9..31d43ed4f 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java @@ -64,7 +64,8 @@ public class ItemPoolsLegacy { weighted(ModItems.canister_full, Fluids.DIESEL.getID(), 1, 2, 2), weighted(ModItems.canister_full, Fluids.BIOFUEL.getID(), 1, 2, 3), weighted(ModItems.gas_mask_m65, 60, 1, 1, 2), - weighted(ModItems.gas_mask_filter, 0, 1, 1, 3) + weighted(ModItems.gas_mask_filter, 0, 1, 1, 3), + weighted(ModItems.blueprint_folder, 0, 1, 1, 1) }; }}; @@ -132,6 +133,7 @@ public class ItemPoolsLegacy { weighted(ModItems.gas_mask_filter, 0, 1, 1, 4), weighted(ModItems.launch_code_piece, 0, 1, 1, 1), weighted(ModItems.gun_double_barrel, 0, 1, 1, 1), + weighted(ModItems.blueprint_folder, 1, 1, 1, 1) }; }}; diff --git a/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java b/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java index 4b1c88353..44393be00 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java @@ -59,6 +59,7 @@ public class ItemPoolsRedRoom { weighted(ModItems.item_secret, EnumSecretType.SELENIUM_STEEL.ordinal(), 4, 4, 10), weighted(ModItems.item_secret, EnumSecretType.CONTROLLER.ordinal(), 1, 1, 10), weighted(ModItems.item_secret, EnumSecretType.CANISTER.ordinal(), 1, 1, 10), + weighted(ModItems.blueprint_folder, 2, 1, 1, 1), }; }}; } diff --git a/src/main/java/com/hbm/itempool/ItemPoolsSingle.java b/src/main/java/com/hbm/itempool/ItemPoolsSingle.java index 47c0a9c17..f8dd79f0a 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsSingle.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsSingle.java @@ -124,6 +124,7 @@ public class ItemPoolsSingle { weighted(ModItems.launch_code_piece, 0, 1, 1, 5), weighted(ModItems.egg_glyphid, 0, 1, 1, 5), weighted(ModItems.gem_alexandrite, 0, 1, 1, 1), + weighted(ModItems.blueprint_folder, 1, 1, 1, 1) }; }}; } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 5724185f5..ca9456f9d 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1186,10 +1186,8 @@ public class ModItems { public static Item settings_tool; public static Item blueprints; + public static Item blueprint_folder; public static Item template_folder; - @Deprecated public static Item journal_pip; - @Deprecated public static Item journal_bj; - @Deprecated public static Item journal_silver; @Deprecated public static Item assembly_template; @Deprecated public static Item chemistry_template; @Deprecated public static Item chemistry_icon; @@ -4103,10 +4101,8 @@ public class ModItems { mech_key = new ItemCustomLore().setUnlocalizedName("mech_key").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":mech_key"); blueprints = new ItemBlueprints().setUnlocalizedName("blueprints").setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":blueprints"); + blueprint_folder = new ItemBlueprintFolder().setUnlocalizedName("blueprint_folder").setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":blueprint_folder"); template_folder = new ItemTemplateFolder().setUnlocalizedName("template_folder").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":template_folder"); - journal_pip = new ItemTemplateFolder().setUnlocalizedName("journal_pip").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_pip"); - journal_bj = new ItemTemplateFolder().setUnlocalizedName("journal_bj").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_bj"); - journal_silver = new ItemTemplateFolder().setUnlocalizedName("journal_silver").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_silver"); assembly_template = new ItemAssemblyTemplate().setUnlocalizedName("assembly_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":assembly_template"); chemistry_template = new ItemChemistryTemplate().setUnlocalizedName("chemistry_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":chemistry_template"); chemistry_icon = new ItemChemistryIcon().setUnlocalizedName("chemistry_icon").setMaxStackSize(1).setCreativeTab(null); @@ -5754,10 +5750,8 @@ public class ModItems { //Folders GameRegistry.registerItem(blueprints, blueprints.getUnlocalizedName()); + GameRegistry.registerItem(blueprint_folder, blueprint_folder.getUnlocalizedName()); GameRegistry.registerItem(template_folder, template_folder.getUnlocalizedName()); - GameRegistry.registerItem(journal_pip, journal_pip.getUnlocalizedName()); - GameRegistry.registerItem(journal_bj, journal_bj.getUnlocalizedName()); - GameRegistry.registerItem(journal_silver, journal_silver.getUnlocalizedName()); GameRegistry.registerItem(bobmazon, bobmazon.getUnlocalizedName()); GameRegistry.registerItem(bobmazon_hidden, bobmazon_hidden.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemBlueprintFolder.java b/src/main/java/com/hbm/items/machine/ItemBlueprintFolder.java new file mode 100644 index 000000000..a6fe26c04 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemBlueprintFolder.java @@ -0,0 +1,72 @@ +package com.hbm.items.machine; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.inventory.recipes.loader.GenericRecipes; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class ItemBlueprintFolder extends Item { + + @SideOnly(Side.CLIENT) protected IIcon iconDiscover; + @SideOnly(Side.CLIENT) protected IIcon iconSecret; + + public ItemBlueprintFolder() { + this.setHasSubtypes(true); + this.setMaxStackSize(1); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister reg) { + super.registerIcons(reg); + this.iconDiscover = reg.registerIcon(this.getIconString() + "_discover"); + this.iconSecret = reg.registerIcon(this.getIconString() + "_secret"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int meta) { + return meta == 1 ? iconDiscover : meta == 2 ? iconSecret : itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tab, List list) { + for(int i = 0; i < 2; i++) list.add(new ItemStack(item, 1, i)); + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(world.isRemote) return stack; + + List pools = new ArrayList(); + + for(String pool : GenericRecipes.blueprintPools.keySet()) { + if(stack.getItemDamage() == 0 && pool.startsWith(GenericRecipes.POOL_PREFIX_ALT)) pools.add(pool); + if(stack.getItemDamage() == 1 && pool.startsWith(GenericRecipes.POOL_PREFIX_DISCOVER)) pools.add(pool); + if(stack.getItemDamage() == 2 && pool.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) pools.add(pool); + } + + if(!pools.isEmpty()) { + stack.stackSize--; + + String chosen = pools.get(player.getRNG().nextInt(pools.size())); + ItemStack blueprint = ItemBlueprints.make(chosen); + + if(!player.inventory.addItemStackToInventory(blueprint)) + player.dropPlayerItemWithRandomChoice(blueprint, false); + } + + return stack; + } +} diff --git a/src/main/java/com/hbm/items/machine/ItemCatalyst.java b/src/main/java/com/hbm/items/machine/ItemCatalyst.java index 99ffe4a11..25dae2545 100644 --- a/src/main/java/com/hbm/items/machine/ItemCatalyst.java +++ b/src/main/java/com/hbm/items/machine/ItemCatalyst.java @@ -37,12 +37,6 @@ public class ItemCatalyst extends Item { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - /*list.add("Absolute Energy Bonus: " + powerAbs + "HE"); - list.add("Energy Modifier: " + (powerMod >= 1 ? "+" : "") + (Math.round(powerMod * 1000) * .10 - 100) + "%"); - list.add("Heat Modifier: " + (heatMod >= 1 ? "+" : "") + (Math.round(heatMod * 1000) * .10 - 100) + "%"); - list.add("Fuel Modifier: " + (fuelMod >= 1 ? "+" : "") + (Math.round(fuelMod * 1000) * .10 - 100) + "%");*/ - //TODO: do something useful with this - list.add("Adds spice to the core."); list.add("Look at all those colors!"); } diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index d2262372e..4788a6fd0 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -458,6 +458,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate), 4), new Object[] { "SS", "SS", 'S', ModBlocks.steel_beam }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate_wide), 4), new Object[] { "SS", 'S', ModBlocks.steel_grate }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate), 1), new Object[] { "SS", 'S', ModBlocks.steel_grate_wide }); + addRecipeAuto(new ItemStack(ModBlocks.rebar, 1), new Object[] { "BB", "BB", 'B', STEEL.bolt() }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 0), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeGray" }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 1), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeRed" }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 8588f66c2..dffae8513 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1718,6 +1718,9 @@ public class MainRegistry { ignoreMappings.add("hbm:item.component_limiter"); ignoreMappings.add("hbm:item.bottle2_korl_special"); ignoreMappings.add("hbm:item.bottle2_fritz_special"); + ignoreMappings.add("hbm:item.journal_pip"); + ignoreMappings.add("hbm:item.journal_bj"); + ignoreMappings.add("hbm:item.journal_silver"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index ea71876e6..ed62ac103 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -3,6 +3,7 @@ package com.hbm.main; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockAshes; +import com.hbm.blocks.generic.BlockRebar; import com.hbm.config.ClientConfig; import com.hbm.config.GeneralConfig; import com.hbm.entity.mob.EntityHunterChopper; @@ -924,9 +925,9 @@ public class ModEventHandlerClient { ); String prefix = "Gun "; - int gunScale = 16; - int defaultScale = 1; - int slotScale = gunScale; + //int gunScale = 16; + //int defaultScale = 1; + int slotScale = 16; boolean ignoreNonNTM = true; boolean onlyGuns = true; @@ -1138,6 +1139,8 @@ public class ModEventHandlerClient { public void onRenderWorldLastEvent(RenderWorldLastEvent event) { Clock.update(); + + BlockRebar.renderRebar(Minecraft.getMinecraft().theWorld.loadedTileEntityList, event.partialTicks); GL11.glPushMatrix(); diff --git a/src/main/java/com/hbm/render/util/HorsePronter.java b/src/main/java/com/hbm/render/util/HorsePronter.java index bec1e9ef6..117f58db0 100644 --- a/src/main/java/com/hbm/render/util/HorsePronter.java +++ b/src/main/java/com/hbm/render/util/HorsePronter.java @@ -123,7 +123,7 @@ public class HorsePronter { GL11.glTranslated(offset.xCoord, offset.yCoord, offset.zCoord); GL11.glRotated(rotation.xCoord, 0, 1, 0); GL11.glRotated(rotation.yCoord, 1, 0, 0); - GL11.glRotated(rotation.zCoord, 0, 0, 1); //TODO: check pitch and roll axis + GL11.glRotated(rotation.zCoord, 0, 0, 1); GL11.glTranslated(-offset.xCoord, -offset.yCoord, -offset.zCoord); } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 1337d34c0..3b7676d73 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -14,6 +14,7 @@ import com.hbm.blocks.generic.BlockGlyphidSpawner.TileEntityGlpyhidSpawner; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; +import com.hbm.blocks.generic.BlockRebar.TileEntityRebar; import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.BlockSupplyCrate.TileEntitySupplyCrate; @@ -456,6 +457,8 @@ public class TileMappings { put(TileEntityRailSwitch.class, "tileentity_rail_switch"); + put(TileEntityRebar.class, "tileentity_rebar"); + // OC Compat items boolean ocPresent = Loader.isModLoaded("OpenComputers"); diff --git a/src/main/java/com/hbm/uninos/NodeNet.java b/src/main/java/com/hbm/uninos/NodeNet.java index f37446cec..eb4c99233 100644 --- a/src/main/java/com/hbm/uninos/NodeNet.java +++ b/src/main/java/com/hbm/uninos/NodeNet.java @@ -2,7 +2,7 @@ package com.hbm.uninos; import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Random; import java.util.Set; @@ -16,7 +16,7 @@ public abstract class NodeNet { public static Random rand = new Random(); public boolean valid = true; - public Set links = new HashSet(); + public Set links = new LinkedHashSet(); public HashMap receiverEntries = new HashMap(); public HashMap providerEntries = new HashMap(); diff --git a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetworkProvider.java b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetworkProvider.java index 330db1821..47d7c108f 100644 --- a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetworkProvider.java +++ b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetworkProvider.java @@ -2,7 +2,7 @@ package com.hbm.uninos.networkproviders; import com.hbm.uninos.INetworkProvider; -public class PneumaticNetworkProvider implements INetworkProvider{ +public class PneumaticNetworkProvider implements INetworkProvider { public static PneumaticNetworkProvider THE_PROVIDER = new PneumaticNetworkProvider(); diff --git a/src/main/java/com/hbm/uninos/networkproviders/RebarNetwork.java b/src/main/java/com/hbm/uninos/networkproviders/RebarNetwork.java new file mode 100644 index 000000000..23afb5ad8 --- /dev/null +++ b/src/main/java/com/hbm/uninos/networkproviders/RebarNetwork.java @@ -0,0 +1,9 @@ +package com.hbm.uninos.networkproviders; + +import com.hbm.uninos.NodeNet; + +public class RebarNetwork extends NodeNet { + + @Override + public void update() { } +} diff --git a/src/main/java/com/hbm/uninos/networkproviders/RebarNetworkProvider.java b/src/main/java/com/hbm/uninos/networkproviders/RebarNetworkProvider.java new file mode 100644 index 000000000..df9b22707 --- /dev/null +++ b/src/main/java/com/hbm/uninos/networkproviders/RebarNetworkProvider.java @@ -0,0 +1,13 @@ +package com.hbm.uninos.networkproviders; + +import com.hbm.uninos.INetworkProvider; + +public class RebarNetworkProvider implements INetworkProvider { + + public static RebarNetworkProvider THE_PROVIDER = new RebarNetworkProvider(); + + @Override + public RebarNetwork provideNetwork() { + return new RebarNetwork(); + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 2cc9428b9..599e12787 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -752,6 +752,7 @@ hbmfluid.coalgas=Kohlebenzin hbmfluid.coalgas_leaded=Bleikohlebenzin hbmfluid.colloid=Kolloid hbmfluid.coaloil=Kohleöl +hbmfluid.concrete=Nassbeton hbmfluid.coolant=Kühlflüssigkeit hbmfluid.coolant_hot=Heiße Kühlflüssigkeit hbmfluid.crackoil=Crack-Öl @@ -1417,6 +1418,7 @@ item.blades_schrabidium.name=Schrabidiumsägeblatt item.blades_steel.name=Stahlsägeblatt item.blades_titanium.name=Titansägeblatt item.blowtorch.name=Lötlampe +item.blueprint_folder.name=Blaupausenbuch item.blueprints.name=Blaupausen item.board_copper.name=Kupfertafel item.boat_rubber.name=Schlauchboot @@ -4029,6 +4031,7 @@ tile.concrete_colored_ext.pink.name=Builder's Choice Concrete - Männliches Pink tile.concrete_colored_ext.purple.name=Builder's Choice Concrete - Mysteriöses Lila tile.concrete_colored_ext.sand.name=Builder's Choice Concrete - Wüstensturm tile.concrete_pillar.name=Stahlbetonsäule +tile.concrete_rebar.name=Stahlbeton tile.concrete_slab.asphalt.name=Asphaltstufe tile.concrete_slab.concrete.name=Betonfliesenstufe tile.concrete_slab.concrete_asbestos.name=Asbestbetonstufe @@ -4752,6 +4755,7 @@ tile.reactor_ejector.name=Reaktor-Brennstoffauswurf tile.reactor_element.name=Reaktorkammer tile.reactor_hatch.name=Kraftwerkszugriffsluke tile.reactor_inserter.name=Reaktor-Brennstoffeinlass +tile.rebar.name=Armierungseisen tile.red_barrel.name=Explosives Fass tile.red_cable.name=Rotes Kupferkabel tile.red_cable_classic.name=Rotes Kupferkabel (Klassisch) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 53f1112b2..ff4e2e5cc 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1461,6 +1461,7 @@ hbmfluid.coalgas=Coal Gasoline hbmfluid.coalgas_leaded=Leaded Coal Gasoline hbmfluid.coaloil=Coal Oil hbmfluid.colloid=Colloid +hbmfluid.concrete=Liquid Concrete hbmfluid.coolant=Coolant hbmfluid.coolant_hot=Hot Coolant hbmfluid.crackoil=Cracked Oil @@ -2161,6 +2162,7 @@ item.blades_desh.name=Desh Shredder Blades item.blades_steel.name=Steel Shredder Blades item.blades_titanium.name=Titanium Shredder Blades item.blowtorch.name=Blowtorch +item.blueprint_folder.name=Blueprint Booklet item.blueprints.name=Blueprints item.board_copper.name=Copper Panel item.boat_rubber.name=Rubber Boat @@ -5145,6 +5147,7 @@ tile.concrete_colored_ext.pink.name=Builder's Choice Concrete - Manly Pink tile.concrete_colored_ext.purple.name=Builder's Choice Concrete - Mysterious Purple tile.concrete_colored_ext.sand.name=Builder's Choice Concrete - Desert Storm tile.concrete_pillar.name=Rebar Reinforced Concrete Pillar +tile.concrete_rebar.name=Reinforced Concrete tile.concrete_slab.asphalt.name=Asphalt Slab tile.concrete_slab.concrete.name=Concrete Tile Slab tile.concrete_slab.concrete_asbestos.name=Asbestos Concrete Slab @@ -5903,6 +5906,7 @@ tile.reactor_ejector.name=Reactor Waste Ejector tile.reactor_element.name=Reactor Chamber tile.reactor_hatch.name=Reactor Access Hatch tile.reactor_inserter.name=Reactor Fuel Inserter +tile.rebar.name=Rebar tile.red_barrel.name=Explosive Barrel tile.red_cable.name=Red Copper Cable tile.red_cable_classic.name=Red Copper Cable (Classic) diff --git a/src/main/resources/assets/hbm/textures/blocks/concrete_rebar.png b/src/main/resources/assets/hbm/textures/blocks/concrete_rebar.png new file mode 100644 index 0000000000000000000000000000000000000000..bc2d6579fc7b332ff87fe4cdb73b371b33da0e5b GIT binary patch literal 599 zcmV-d0;v6oP)cZ8Sg!P-?x4UffyrwN{JXF03n11-nNZW3P9^? zt(m5Y&(BX{jA*UtFShURZ;UaNQYfWxo+sXW0E{tB(bv}(!!RI(VB0qOQVPqm@O(b; z-cw59_xG1l3PK1%2-I4UQu6cjL*Mrd!_XA#wZ=6Oab#d)4c zYc1AVlv3^2Wm%}TvTYmtzVr6>_8+;{np!J4XJprPxy#@V+^<34IxAurRCr{o@ts8LLjB2>pIqTQz&{`8h;13bhaMU!~kmdjY002ovPDHLkV1g!h5_$jt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/concrete_rebar_alt.png b/src/main/resources/assets/hbm/textures/blocks/concrete_rebar_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..c6d616f3ec1f7a930f8585a153f36526c44b6195 GIT binary patch literal 652 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/concrete.png b/src/main/resources/assets/hbm/textures/gui/fluids/concrete.png new file mode 100644 index 0000000000000000000000000000000000000000..5d76282fe5c8438b922d95686c704a2396eb572e GIT binary patch literal 646 zcmV;10(t$3P)*cR5k zi@XS)Hd=_8IY;N4KVM&8f9H9|drzL{e1CsqjN$qDnd9*Yz%)&4+eQe15CX$6pp>Gj zDt6N}F^(f41gfgy^YfEo7yt+%q~aJO<2d5IM{5nhJkRXLab%h%>bk~zk8_U4xn8eW zYni4AV+iAp_Jl$J|`;xd7h(`;&!{;8z`mH1b}fI z)BW=DLS5Hrtr3xALu<{tuB_{da?T+lbX~_ZO;~F&#*pVZzrVk{zP>U|6W)82Qiw?U zaIH1Udrt^~x3{-csI_LEXRNifZHrQhx~}QEjx5U%5!Q7j%QALVRZ*7Z|6+6xLeic}^TCtu<}iQWOQlFwnLwP167{ z3TcoDeOVS_j2L6?5C1Jo2!TA$IUbM6O4oH< zE|)u%5BcLbvfu9kxZQ3^W?k0_AQ1uJ{r#P)s&LM+^WIaIB_e`zF2(b(BO)|SL*Mr} g=Qy2C06cc+AKE5D8*cmd+5i9m07*qoM6N<$f(yhcMgRZ+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/assembly_nuke.png b/src/main/resources/assets/hbm/textures/items/assembly_nuke.png index 3243576ba0105458024c50259a8ff68560cfe096..4a6dcc92f19e28b0e740e051498302a3f15442d7 100644 GIT binary patch delta 372 zcmV-)0gL|U0-pnrG=Ek}L_t(IjjdC=Y63wNJtGPUArJy0rr1VIVUte%hF~+F;18r* z{~_#0_yHC|SkfA>k|{&BNZ4X;u@)Cg5o2*vgq_T|D+H1Q12gBGd*?6@;EzyMD}9v>9v`~0Iny4;%qN@FkBQsh98YiTam{A)Q~=bDiGO$6l}yZB;!Y;`4WcNr zXXGU?#s~l;N#YH+sPF(l7>3FwC=4I8#d^I55di>#AOHaLdOa9pWHy_5X=-lQEXx4E z7Q1t1wt9idWFocj@=CHSt2DSMbY@1Y)k44D|4v{&_f{xS#6F(8ST2`Hk_7da{Z8Ex z2{VI;&EK45k*oXCj%k{r(P-ds zI9M)@jIGTQ Stvc=i0000;yBBhjeZMSV3j0*}#DJ|!G!x>|q zibNqYj^l&CGXw>aB-z+XslN&QhV_it-oZIX-}jq@JkR|c>VKlJqYw~6Y&)on!rp{H z*L9et=}@&S%SYvT1^{TS(KHQ%1%rs;aX8`b>NOOZW!4$bkIpvitu4 O00003Zh;@y>_0x62=qOt5_^rq`axFemN++l9pwG?)`+)$OU~>XbEUc+`5|$?Jnl z%V~iVRtM3(gB+$IC_V>X9 zCw@pd>$;@{or&x)H#RgdFt{^csDEL94g literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/blueprint_folder_discover.png b/src/main/resources/assets/hbm/textures/items/blueprint_folder_discover.png new file mode 100644 index 0000000000000000000000000000000000000000..451232e7c18547b4ed45789cb7b10b639e82d885 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfyUv+oBh#1=dy#!J4%a61VaSo*fe)ce!v=I+c>*hykJrums2|bLj{{lk5&bD zD*XRKbnOji`^2R-bSC#D&M4|Ve>8Fb|4p-xNLal!Q|mKkOY%`$ zx7+XIK|M>}EkRQgPE1WGy}=Tfuz_QLI)g!6{N=>QrzG#l`i*ssnSwWVxgcJG&~C^499Wm6DbxYBg-&y)EH wQ#(ZR?tEo>kg+UIV2YXW0o5+9JLjvIcQGe0+TB>u2=p(5r>mdKI;Vst0FUc)%m4rY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/blueprint_folder_secret.png b/src/main/resources/assets/hbm/textures/items/blueprint_folder_secret.png new file mode 100644 index 0000000000000000000000000000000000000000..d23d7ce41724d7c28b30f70c4ad38149d30cc6b9 GIT binary patch literal 270 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 Date: Wed, 23 Jul 2025 16:34:11 +0200 Subject: [PATCH 307/491] cast yourself a whole house, cast yourself a new mother, cast a vacation straight to fucking hell --- changelog | 4 + .../com/hbm/blocks/generic/BlockRebar.java | 152 ++++++-- .../java/com/hbm/crafting/ToolRecipes.java | 1 + .../ContainerMachineChemicalFactory.java | 9 + .../ContainerMachineChemicalPlant.java | 4 +- .../hbm/inventory/gui/GuiInfoContainer.java | 2 + .../recipes/ChemicalPlantRecipes.java | 6 + .../inventory/recipes/ShredderRecipes.java | 10 +- src/main/java/com/hbm/items/ModItems.java | 6 +- .../com/hbm/items/tool/ItemRebarPlacer.java | 337 ++++++++++++++++++ .../java/com/hbm/main/CraftingManager.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../assets/hbm/textures/gui/gui_rebar.png | Bin 0 -> 3367 bytes .../hbm/textures/items/rebar_placer.png | Bin 0 -> 513 bytes 15 files changed, 498 insertions(+), 39 deletions(-) create mode 100644 src/main/java/com/hbm/items/tool/ItemRebarPlacer.java create mode 100644 src/main/resources/assets/hbm/textures/gui/gui_rebar.png create mode 100644 src/main/resources/assets/hbm/textures/items/rebar_placer.png diff --git a/changelog b/changelog index 958bb0f23..fa222ff1a 100644 --- a/changelog +++ b/changelog @@ -7,9 +7,13 @@ * Rebar * When hooked up to liquid concrete using pipes, will fill to create reinforced concrete * Fills bottom to top, so connect the pipes to the top +* Rebar placer + * Can be configured with different types of concrete, reinforced or not, or even colored + * Rebar created with the rebar placer will remember its type and assume it when being filled with liquid concrete ## Changed * The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints +* The chemical plant now has a recipe for making cobblestone from 25mB of lava (which can be liquefacted into even more lava, useful for cobblestone generation) ## Fixed * Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit diff --git a/src/main/java/com/hbm/blocks/generic/BlockRebar.java b/src/main/java/com/hbm/blocks/generic/BlockRebar.java index 67b9f13c7..391533e0a 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockRebar.java +++ b/src/main/java/com/hbm/blocks/generic/BlockRebar.java @@ -7,11 +7,16 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.ModBlocks; import com.hbm.config.ClientConfig; +import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.items.ModItems; +import com.hbm.items.tool.ItemRebarPlacer; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.main.ServerProxy; import com.hbm.render.block.ISBRHUniversal; import com.hbm.render.util.RenderBlocksNT; import com.hbm.tileentity.IBufPacketReceiver; @@ -24,6 +29,7 @@ import com.hbm.uninos.networkproviders.RebarNetwork; import com.hbm.uninos.networkproviders.RebarNetworkProvider; import com.hbm.util.BobMathUtil; import com.hbm.util.Compat; +import com.hbm.util.InventoryUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -41,9 +47,13 @@ import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.MovingObjectPosition.MovingObjectType; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -97,10 +107,18 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { public static class TileEntityRebar extends TileEntityLoadedBase implements IFluidReceiverMK2, IBufPacketReceiver { + public Block concrete; + public int concreteMeta; public int progress; public int prevProgress; protected RebarNode node; public boolean hasConnection = false; + + public TileEntityRebar setup(Block b, int m) { + this.concrete = b; + this.concreteMeta = m; + return this; + } @Override public void updateEntity() { @@ -115,7 +133,11 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { } if(this.progress >= 1_000) { - worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.concrete_rebar); + if(concrete != null && ItemRebarPlacer.isValidConk(Item.getItemFromBlock(concrete), concreteMeta)) { + worldObj.setBlock(xCoord, yCoord, zCoord, concrete, concreteMeta, 3); + } else { + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.concrete_rebar); + } return; } @@ -158,6 +180,11 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { super.readFromNBT(nbt); this.progress = nbt.getInteger("progress"); this.hasConnection = nbt.getBoolean("hasConnection"); + + if(nbt.hasKey("block")) { + this.concrete = Block.getBlockById(nbt.getInteger("block")); + this.concreteMeta = nbt.getInteger("meta"); + } } @Override @@ -165,6 +192,11 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { super.writeToNBT(nbt); nbt.setInteger("progress", this.progress); nbt.setBoolean("hasConnection", this.hasConnection); + + if(this.concrete != null) { + nbt.setInteger("block", Block.getIdFromBlock(this.concrete)); + nbt.setInteger("meta", this.concreteMeta); + } } public RebarNode createNode() { @@ -341,6 +373,14 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { TileEntityRebar rebar = (TileEntityRebar) o; if(rebar.progress > 0) rebars.add(rebar); } + + Minecraft mc = Minecraft.getMinecraft(); + EntityPlayer player = mc.thePlayer; + World world = mc.theWorld; + + double dx = player.prevPosX + (player.posX - player.prevPosX) * interp; + double dy = player.prevPosY + (player.posY - player.prevPosY) * interp; + double dz = player.prevPosZ + (player.posZ - player.prevPosZ) * interp; if(!rebars.isEmpty()) { @@ -348,19 +388,12 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { GL11.glShadeModel(GL11.GL_SMOOTH); //RenderHelper.enableStandardItemLighting(); - EntityRenderer entityRenderer = Minecraft.getMinecraft().entityRenderer; + EntityRenderer entityRenderer = mc.entityRenderer; entityRenderer.enableLightmap(interp); - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - World world = Minecraft.getMinecraft().theWorld; - - double dx = player.prevPosX + (player.posX - player.prevPosX) * interp; - double dy = player.prevPosY + (player.posY - player.prevPosY) * interp; - double dz = player.prevPosZ + (player.posZ - player.prevPosZ) * interp; - RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world); renderer.setOverrideBlockTexture(((BlockRebar) ModBlocks.rebar).concrete); - Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture); + mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture); Tessellator tess = Tessellator.instance; tess.startDrawingQuads(); @@ -370,26 +403,6 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { tess.setColorRGBA_F(1F, 1F, 1F, 1F); renderer.setRenderBounds(0, 0, 0, 1, rebar.progress / 1000D, 1); renderer.renderStandardBlock(ModBlocks.rebar, rebar.xCoord, rebar.yCoord, rebar.zCoord); - - /*IIcon icon = ((BlockRebar) ModBlocks.rebar).concrete; - double minU = icon.getInterpolatedU(renderer.renderMinX * 16.0D); - double maxU = icon.getInterpolatedU(renderer.renderMaxX * 16.0D); - double minV = icon.getInterpolatedV(renderer.renderMinZ * 16.0D); - double maxV = icon.getInterpolatedV(renderer.renderMaxZ * 16.0D); - - double minX = rebar.xCoord + renderer.renderMinX; - double maxX = rebar.xCoord + renderer.renderMaxX; - double minY = rebar.yCoord + renderer.renderMinY; - double maxY = rebar.yCoord + renderer.renderMaxY; - double minZ = rebar.zCoord + renderer.renderMinZ; - double maxZ = rebar.zCoord + renderer.renderMaxZ; - - //tess.setColorOpaque_F(0.5F, 1F, 1F); - tess.setNormal(0, 1, 0); - tess.addVertexWithUV(maxX, maxY, maxZ, maxU, maxV); - tess.addVertexWithUV(maxX, maxY, minZ, maxU, minV); - tess.addVertexWithUV(minX, maxY, minZ, minU, minV); - tess.addVertexWithUV(minX, maxY, maxZ, minU, maxV);*/ } tess.draw(); @@ -400,5 +413,84 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); } + + if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.rebar_placer && player.getHeldItem().hasTagCompound() && + player.getHeldItem().stackTagCompound.hasKey("pos") && mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectType.BLOCK) { + + int[] pos = player.getHeldItem().stackTagCompound.getIntArray("pos"); + MovingObjectPosition mop = mc.objectMouseOver; + ForgeDirection dir = ForgeDirection.getOrientation(mop.sideHit); + int iX = mop.blockX + dir.offsetX; + int iY = mop.blockY + dir.offsetY; + int iZ = mop.blockZ + dir.offsetZ; + + double minX = Math.min(pos[0], iX) + 0.125; + double maxX = Math.max(pos[0], iX) + 0.875; + double minY = Math.min(pos[1], iY) + 0.125; + double maxY = Math.max(pos[1], iY) + 0.875; + double minZ = Math.min(pos[2], iZ) + 0.125; + double maxZ = Math.max(pos[2], iZ) + 0.875; + + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(1F, 1F, 1F); + + Tessellator tess = Tessellator.instance; + tess.setTranslation(-dx, -dy, -dz); + tess.startDrawing(GL11.GL_LINES); + tess.setBrightness(240); + tess.setColorRGBA_F(1F, 1F, 1F, 1F); + + // top + tess.addVertex(minX, maxY, minZ); + tess.addVertex(minX, maxY, maxZ); + + tess.addVertex(minX, maxY, maxZ); + tess.addVertex(maxX, maxY, maxZ); + + tess.addVertex(maxX, maxY, maxZ); + tess.addVertex(maxX, maxY, minZ); + + tess.addVertex(maxX, maxY, minZ); + tess.addVertex(minX, maxY, minZ); + + // bottom + tess.addVertex(minX, minY, minZ); + tess.addVertex(minX, minY, maxZ); + + tess.addVertex(minX, minY, maxZ); + tess.addVertex(maxX, minY, maxZ); + + tess.addVertex(maxX, minY, maxZ); + tess.addVertex(maxX, minY, minZ); + + tess.addVertex(maxX, minY, minZ); + tess.addVertex(minX, minY, minZ); + + // sides + tess.addVertex(minX, minY, minZ); + tess.addVertex(minX, maxY, minZ); + + tess.addVertex(maxX, minY, minZ); + tess.addVertex(maxX, maxY, minZ); + + tess.addVertex(maxX, minY, maxZ); + tess.addVertex(maxX, maxY, maxZ); + + tess.addVertex(minX, minY, maxZ); + tess.addVertex(minX, maxY, maxZ); + + tess.draw(); + tess.setTranslation(0, 0, 0); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + + int rebarLeft = InventoryUtil.countAStackMatches(player, new ComparableStack(ModBlocks.rebar), true); + int rebarRequired = (Math.max(pos[0], iX) - Math.min(pos[0], iX) + 1) * (Math.max(pos[1], iY) - Math.min(pos[1], iY) + 1) * (Math.max(pos[2], iZ) - Math.min(pos[2], iZ) + 1); + MainRegistry.proxy.displayTooltip((rebarRequired > rebarLeft ? EnumChatFormatting.RED : EnumChatFormatting.GREEN) + (rebarLeft + " / " + rebarRequired), 1_000, ServerProxy.ID_CABLE); + } } } diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index d8d52b0ce..45ad0922c 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -156,6 +156,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(ItemBlowtorch.getEmptyTool(ModItems.blowtorch), new Object[] { "CC ", " I ", "CCC", 'C', CU.plate528(), 'I', IRON.ingot() }); CraftingManager.addRecipeAuto(ItemBlowtorch.getEmptyTool(ModItems.acetylene_torch), new Object[] { "SS ", " PS", " T ", 'S', STEEL.plate528(), 'P', ANY_PLASTIC.ingot(), 'T', ModItems.tank_steel }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.boltgun), new Object[] { "DPS", " RD", " D ", 'D', DURA.ingot(), 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'R', RUBBER.ingot(), 'S', STEEL.shell() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.rebar_placer), new Object[] { "RDR", "DWD", "RDR", 'R', ModBlocks.rebar, 'D', ModItems.ducttape, 'W', ModItems.wrench }); //Bobmazon CraftingManager.addShapelessAuto(new ItemStack(ModItems.bobmazon), new Object[] { Items.book, Items.gold_nugget, Items.string, KEY_BLUE }); diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java index 484dcfc21..fbdcba7a1 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java @@ -3,6 +3,7 @@ package com.hbm.inventory.container; import com.hbm.inventory.SlotCraftingOutput; import com.hbm.inventory.SlotNonRetarded; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBlueprints; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.util.InventoryUtil; @@ -53,6 +54,14 @@ public class ContainerMachineChemicalFactory extends ContainerBase { if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 4, 5, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 11, 12, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 18, 19, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 25, 26, false)) return null; } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { if(!this.mergeItemStack(slotStack, 1, 4, false)) return null; } else { diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java index 2c4f4052a..30f50de65 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java @@ -3,7 +3,7 @@ package com.hbm.inventory.container; import com.hbm.inventory.SlotCraftingOutput; import com.hbm.inventory.SlotNonRetarded; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemChemistryTemplate; +import com.hbm.items.machine.ItemBlueprints; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.util.InventoryUtil; @@ -57,7 +57,7 @@ public class ContainerMachineChemicalPlant extends ContainerBase { if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; - } else if(slotOriginal.getItem() instanceof ItemChemistryTemplate) { + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { if(!this.mergeItemStack(slotStack, 2, 4, false)) return null; diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index d3f151798..7c57a4dab 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -292,6 +292,8 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa this.drawGradientRect(minX + indent, minY, minX + indent + 16, minY + 16, 0xffb0b0b0, 0xffb0b0b0); } GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); itemRender.renderItemAndEffectIntoGUI(this.fontRendererObj, this.mc.getTextureManager(), stack, minX + indent, minY); itemRender.renderItemOverlayIntoGUI(this.fontRendererObj, this.mc.getTextureManager(), stack, minX + indent, minY, null); RenderHelper.disableStandardItemLighting(); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index ca0228ca0..f3b759658 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -116,6 +116,12 @@ public class ChemicalPlantRecipes extends GenericRecipes { .outputItems(DictFrame.fromOne(ModItems.fuel_additive, EnumFuelAdditive.DEICER))); /// THE CONC AND ASPHALE /// + this.register(new GenericRecipe("chem.cobble").setup(20, 100) + .inputFluids(new FluidStack(Fluids.WATER, 1_000), new FluidStack(Fluids.LAVA, 25)) + .outputItems(new ItemStack(Blocks.cobblestone))); + this.register(new GenericRecipe("chem.stone").setup(60, 500).setPools(GenericRecipes.POOL_PREFIX_DISCOVER) + .inputFluids(new FluidStack(Fluids.WATER, 1_000), new FluidStack(Fluids.LAVA, 25), new FluidStack(Fluids.AIR, 4_000)) + .outputItems(new ItemStack(Blocks.stone))); this.register(new GenericRecipe("chem.concrete").setup(100, 100) .inputItems(new ComparableStack(ModItems.powder_cement, 1), new ComparableStack(Blocks.gravel, 8), new OreDictStack(KEY_SAND, 8)) .inputFluids(new FluidStack(Fluids.WATER, 2_000)) diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index 908804a5e..af47669a1 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -264,12 +264,12 @@ public class ShredderRecipes extends SerializableRecipe { ShredderRecipes.setRecipe(ModItems.crystal_cobalt, new ItemStack(ModItems.powder_cobalt, 3)); /* Misc recycling */ - ShredderRecipes.setRecipe(ModBlocks.steel_poles, new ItemStack(ModItems.powder_steel_tiny, 3)); - ShredderRecipes.setRecipe(ModBlocks.steel_roof, new ItemStack(ModItems.powder_steel_tiny, 13)); - ShredderRecipes.setRecipe(ModBlocks.steel_wall, new ItemStack(ModItems.powder_steel_tiny, 13)); - ShredderRecipes.setRecipe(ModBlocks.steel_corner, new ItemStack(ModItems.powder_steel_tiny, 26)); + ShredderRecipes.setRecipe(ModBlocks.steel_poles, new ItemStack(ModItems.powder_steel_tiny, 2)); + ShredderRecipes.setRecipe(ModBlocks.steel_roof, new ItemStack(ModItems.powder_steel_tiny, 9)); + ShredderRecipes.setRecipe(ModBlocks.steel_wall, new ItemStack(ModItems.powder_steel_tiny, 9)); + ShredderRecipes.setRecipe(ModBlocks.steel_corner, new ItemStack(ModItems.powder_steel_tiny, 18)); ShredderRecipes.setRecipe(ModBlocks.steel_beam, new ItemStack(ModItems.powder_steel_tiny, 3)); - ShredderRecipes.setRecipe(new ItemStack(ModBlocks.steel_scaffold, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(ModItems.powder_steel_tiny, 7)); + ShredderRecipes.setRecipe(new ItemStack(ModBlocks.steel_scaffold, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(ModItems.powder_steel_tiny, 4)); ShredderRecipes.setRecipe(ModItems.coil_copper, new ItemStack(ModItems.powder_red_copper, 1)); ShredderRecipes.setRecipe(ModItems.coil_copper_torus, new ItemStack(ModItems.powder_red_copper, 2)); ShredderRecipes.setRecipe(ModItems.coil_advanced_alloy, new ItemStack(ModItems.powder_advanced_alloy, 1)); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index ca9456f9d..df5e429b2 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2075,6 +2075,8 @@ public class ModItems { public static Item hazmat_paa_legs; public static Item hazmat_paa_boots; + public static Item rebar_placer; + public static Item wand; public static Item wand_s; public static Item wand_d; @@ -4003,6 +4005,7 @@ public class ModItems { upgrade_stack = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_stack").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_stack"); upgrade_ejector = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_ejector").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_ejector"); + rebar_placer = new ItemRebarPlacer().setUnlocalizedName("rebar_placer").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":rebar_placer"); wand = new ItemWand().setUnlocalizedName("wand_k").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand"); wand_s = new ItemWandS().setUnlocalizedName("wand_s").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_s"); wand_d = new ItemWandD().setUnlocalizedName("wand_d").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_d"); @@ -7047,7 +7050,8 @@ public class ModItems { GameRegistry.registerItem(crystal_horn, crystal_horn.getUnlocalizedName()); GameRegistry.registerItem(crystal_charred, crystal_charred.getUnlocalizedName()); - //OP Tools + //Wands, Tools, Other Crap + GameRegistry.registerItem(rebar_placer, rebar_placer.getUnlocalizedName()); GameRegistry.registerItem(wand, wand.getUnlocalizedName()); GameRegistry.registerItem(wand_s, wand_s.getUnlocalizedName()); GameRegistry.registerItem(wand_d, wand_d.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java b/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java new file mode 100644 index 000000000..86b120769 --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java @@ -0,0 +1,337 @@ +package com.hbm.items.tool; + +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockConcreteColoredExt.EnumConcreteType; +import com.hbm.blocks.generic.BlockRebar.TileEntityRebar; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.SlotPattern; +import com.hbm.inventory.gui.GuiInfoContainer; +import com.hbm.items.ItemInventory; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.util.ChatBuilder; +import com.hbm.util.InventoryUtil; +import com.hbm.util.ItemStackUtil; +import com.hbm.util.Tuple.Pair; +import com.hbm.util.i18n.I18nUtil; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class ItemRebarPlacer extends Item implements IGUIProvider { + + public static List> acceptableConk = new ArrayList(); + + public ItemRebarPlacer() { + this.setMaxStackSize(1); + + acceptableConk.add(new Pair(ModBlocks.concrete, 0)); + acceptableConk.add(new Pair(ModBlocks.concrete_rebar, 0)); + acceptableConk.add(new Pair(ModBlocks.concrete_smooth, 0)); + acceptableConk.add(new Pair(ModBlocks.concrete_pillar, 0)); + + for(int i = 0; i < 16; i++) acceptableConk.add(new Pair(ModBlocks.concrete_colored, i)); + for(int i = 0; i < EnumConcreteType.values().length; i++) acceptableConk.add(new Pair(ModBlocks.concrete_colored_ext, i)); + } + + public static boolean isValidConk(Item item, int meta) { + + for(Pair conk : acceptableConk) { + if(item == Item.getItemFromBlock(conk.getKey()) && meta == conk.getValue()) return true; + } + return false; + } + + @Override + public int getMaxItemUseDuration(ItemStack stack) { + return 1; + } + + // if the placer isn't equipped or no concrete is loaded, forget the cached position + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean held) { + if(stack.hasTagCompound() && stack.stackTagCompound.hasKey("pos")) { + ItemStack theConk = ItemStackUtil.readStacksFromNBT(stack, 1)[0]; + + if(!held || theConk == null) { + stack.stackTagCompound.removeTag("pos"); + return; + } + + if(!isValidConk(theConk.getItem(), theConk.getItemDamage())) { + stack.stackTagCompound.removeTag("pos"); + return; + } + } + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(!world.isRemote && player.isSneaking()) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0); + return stack; + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fx, float fy, float fz) { + if(world.isRemote) return true; + if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); + ItemStack theConk = ItemStackUtil.readStacksFromNBT(stack, 1)[0]; + + boolean hasConk = theConk != null && isValidConk(theConk.getItem(), theConk.getItemDamage()); + + if(!hasConk) { + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("No valid concrete type set!").color(EnumChatFormatting.RED).flush()); + return true; + } + + ForgeDirection dir = ForgeDirection.getOrientation(side); + + if(!stack.stackTagCompound.hasKey("pos")) { + stack.stackTagCompound.setIntArray("pos", new int[] {x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ}); + } else { + int rebarLeft = InventoryUtil.countAStackMatches(player, new ComparableStack(ModBlocks.rebar), true); + if(rebarLeft <= 0) { + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Out of rebar!").color(EnumChatFormatting.RED).flush()); + stack.stackTagCompound.removeTag("pos"); + return true; + } + + int[] pos = stack.stackTagCompound.getIntArray("pos"); + int iX = x + dir.offsetX; + int iY = y + dir.offsetY; + int iZ = z + dir.offsetZ; + + int minX = Math.min(pos[0], iX); + int maxX = Math.max(pos[0], iX); + int minY = Math.min(pos[1], iY); + int maxY = Math.max(pos[1], iY); + int minZ = Math.min(pos[2], iZ); + int maxZ = Math.max(pos[2], iZ); + + int rebarUsed = 0; + + outer: for(int k = minY; k <= maxY; k++) { + for(int j = minZ; j <= maxZ; j++) { + for(int i = minX; i<= maxX; i++) { + if(rebarLeft <= 0) break outer; + + if(world.getBlock(i, k, j).isReplaceable(world, i, k, j) && player.canPlayerEdit(i, k, j, side, stack)) { + world.setBlock(i, k, j, ModBlocks.rebar); + TileEntity tile = world.getTileEntity(i, k, j); + if(tile instanceof TileEntityRebar) { + ((TileEntityRebar) tile).setup(Block.getBlockFromItem(theConk.getItem()), theConk.getItemDamage()); + } + rebarUsed++; + rebarLeft--; + } + } + } + } + + InventoryUtil.tryConsumeAStack(player.inventory.mainInventory, 0, player.inventory.mainInventory.length - 1, new ComparableStack(ModBlocks.rebar, rebarUsed)); + + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Placed " + rebarUsed + " rebar!").color(EnumChatFormatting.GREEN).flush()); + + stack.stackTagCompound.removeTag("pos"); + player.inventoryContainer.detectAndSendChanges(); + } + + return true; + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerRebar(player.inventory, new InventoryRebar(player, player.getHeldItem())); + } + + @Override + @SideOnly(Side.CLIENT) + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIRebar(player.inventory, new InventoryRebar(player, player.getHeldItem())); + } + + public static class InventoryRebar extends ItemInventory { + + public InventoryRebar(EntityPlayer player, ItemStack box) { + this.player = player; + this.target = box; + slots = new ItemStack[this.getSizeInventory()]; + + if(!box.hasTagCompound()) box.setTagCompound(new NBTTagCompound()); + + ItemStack[] fromNBT = ItemStackUtil.readStacksFromNBT(box, slots.length); + if(fromNBT != null) System.arraycopy(fromNBT, 0, slots, 0, slots.length); + } + + @Override public int getSizeInventory() { return 1; } + @Override public String getInventoryName() { return "container.rebar"; } + @Override public boolean hasCustomInventoryName() { return target.hasDisplayName(); } + @Override public int getInventoryStackLimit() { return 1; } + } + + public static class ContainerRebar extends Container { + + private InventoryRebar rebar; + + public ContainerRebar(InventoryPlayer invPlayer, InventoryRebar rebar) { + this.rebar = rebar; + + this.addSlotToContainer(new SlotPattern(rebar, 0, 53, 36)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 100 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 158)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + return null; + } + + @Override + public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { + + //L/R: 0 + //M3: 3 + //SHIFT: 1 + //DRAG: 5 + + // prevents the player from moving around the currently open box + if(mode == 2 && button == player.inventory.currentItem) return null; + if(index == player.inventory.currentItem + 47) return null; + + if(index != 0) return super.slotClick(index, button, mode, player); + + Slot slot = this.getSlot(index); + + ItemStack ret = null; + ItemStack held = player.inventory.getItemStack(); + + if(slot.getHasStack()) ret = slot.getStack().copy(); + slot.putStack(held); + rebar.markDirty(); + + return ret; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return rebar.isUseableByPlayer(player); + } + + @Override + public void onContainerClosed(EntityPlayer player) { + super.onContainerClosed(player); + } + } + + public static class GUIRebar extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_rebar.png"); + private final InventoryRebar inventory; + + public GUIRebar(InventoryPlayer invPlayer, InventoryRebar box) { + super(new ContainerRebar(invPlayer, box)); + this.inventory = box; + + this.xSize = 176; + this.ySize = 182; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + if(this.isMouseOverSlot(this.inventorySlots.getSlot(0), mouseX, mouseY) && !this.inventorySlots.getSlot(0).getHasStack()) { + + List lines = new ArrayList(); + List list = new ArrayList(); + for(Pair conk : acceptableConk) list.add(new ItemStack(conk.getKey(), 1, conk.getValue())); + ItemStack selected = list.get(0); + + if(list.size() > 1) { + int cycle = (int) ((System.currentTimeMillis() % (1000 * list.size())) / 1000); + selected = ((ItemStack) list.get(cycle)).copy(); + selected.stackSize = 0; + list.set(cycle, selected); + } + + if(list.size() < 10) { + lines.add(list.toArray()); + } else if(list.size() < 24) { + lines.add(list.subList(0, list.size() / 2).toArray()); + lines.add(list.subList(list.size() / 2, list.size()).toArray()); + } else { + int bound0 = (int) Math.ceil(list.size() / 3D); + int bound1 = (int) Math.ceil(list.size() / 3D * 2D); + lines.add(list.subList(0, bound0).toArray()); + lines.add(list.subList(bound0, bound1).toArray()); + lines.add(list.subList(bound1, list.size()).toArray()); + } + + lines.add(new Object[] {I18nUtil.resolveKey(selected.getDisplayName())}); + this.drawStackText(lines, mouseX, mouseY, this.fontRendererObj); + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = I18n.format(this.inventory.getInventoryName()); + if(inventory.hasCustomInventoryName()) name = inventory.target.getDisplayName(); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(inventory.slots[0] == null || !ItemRebarPlacer.isValidConk(inventory.slots[0].getItem(), inventory.slots[0].getItemDamage())) + drawTexturedModalRect(guiLeft + 87, guiTop + 17, 176, 0, 56, 56); + } + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 4788a6fd0..d170e553b 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -458,7 +458,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate), 4), new Object[] { "SS", "SS", 'S', ModBlocks.steel_beam }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate_wide), 4), new Object[] { "SS", 'S', ModBlocks.steel_grate }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate), 1), new Object[] { "SS", 'S', ModBlocks.steel_grate_wide }); - addRecipeAuto(new ItemStack(ModBlocks.rebar, 1), new Object[] { "BB", "BB", 'B', STEEL.bolt() }); + addRecipeAuto(new ItemStack(ModBlocks.rebar, 8), new Object[] { "BB", "BB", 'B', STEEL.bolt() }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 0), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeGray" }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 1), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeRed" }); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 599e12787..c3dbefea1 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -449,6 +449,7 @@ container.reactor=Brutreaktor container.reactorControl=Reaktorfernsteuerung container.reactorLarge=Großer Atomreaktor container.reactorSmall=Atomreaktor +container.rebar=Armiereisen-Platzierer container.reix=Rei-X Hauptrechner container.rtg=Radioisotopengenerator container.rtgFurnace=RTG-Ofen @@ -3118,6 +3119,7 @@ item.rbmk_tool.set=RBMK verlinkt! item.reacher.name=Wolfram-Greifzange item.reactor_core.name=Brutreaktorkern item.reactor_sensor.name=Reaktor-Fernsensor +item.rebar_placer.name=Armiereisen-Platzierer item.record.glass.desc=? ? ? item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core item.record.ss.desc=Valve - Sector Sweep diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index ff4e2e5cc..b02964bcc 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -853,6 +853,7 @@ container.reactorBreeding=Breeding Reactor container.reactorControl=Reactor Remote Control Block container.reactorLarge=Big Nuclear Reactor container.reactorResearch=Research Reactor +container.rebar=Rebar Placer container.reix=Rei-X Mainframe container.rtg=RT Generator container.rtgFurnace=RTG Furnace @@ -4073,6 +4074,7 @@ item.rbmk_tool.set=RBMK linked! item.reacher.name=Tungsten Reacher item.reactor_core.name=Breeding Reactor Core item.reactor_sensor.name=Reactor Remote Sensor +item.rebar_placer.name=Rebar Placer item.record.glass.desc=? ? ? item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core item.record.ss.desc=Valve - Sector Sweep diff --git a/src/main/resources/assets/hbm/textures/gui/gui_rebar.png b/src/main/resources/assets/hbm/textures/gui/gui_rebar.png new file mode 100644 index 0000000000000000000000000000000000000000..a3dfeb186d5bad3432726fba276eae6e61191b93 GIT binary patch literal 3367 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 DddB2B literal 0 HcmV?d00001 From a8485bdb5a6294debc2f4e44060c553c61e52dc5 Mon Sep 17 00:00:00 2001 From: Justnightheron Date: Thu, 24 Jul 2025 00:31:25 +0800 Subject: [PATCH 308/491] kris --- src/main/resources/assets/hbm/lang/zh_CN.lang | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 14a8c62b0..b3a7c29c9 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -6109,3 +6109,9 @@ item.fluid_pack_empty.name=大型流体容器 item.fluid_pack_full.name=流体包装 %s tile.pneumatic_tube_paintable.name=可涂漆气动物流管道 tile.oc_cable_paintable.name=可涂漆网线 +container.rebar=钢筋铺设器 +hbmfluid.concrete=液态混凝土 +item.blueprint_folder.name=蓝图册 +item.rebar_placer.name=钢筋铺设器 +tile.concrete_rebar.name=钢筋混凝土 +tile.rebar.name=钢筋 From 2102db622923fdd2cc76594f33bd71704b1baad9 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 24 Jul 2025 15:12:54 +0200 Subject: [PATCH 309/491] RBMK autoloader --- changelog | 5 +- src/main/java/com/hbm/blocks/ModBlocks.java | 12 +- .../hbm/blocks/machine/MachineArcFurnace.java | 288 ----- .../blocks/machine/rbmk/RBMKAutoloader.java | 42 + .../container/ContainerMachineArcFurnace.java | 90 -- .../ContainerMachineReactorBreeding.java | 4 +- .../container/ContainerRBMKAutoloader.java | 54 + .../inventory/gui/GUIMachineArcFurnace.java | 64 - .../hbm/inventory/gui/GUIRBMKAutoloader.java | 72 ++ src/main/java/com/hbm/items/ModItems.java | 2 +- .../com/hbm/items/tool/ItemRebarPlacer.java | 5 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + src/main/java/com/hbm/main/MainRegistry.java | 2 + .../java/com/hbm/main/ResourceManager.java | 2 + .../item/weapon/sedna/ItemRenderFlaregun.java | 7 + .../tileentity/RenderRBMKAutoloader.java | 62 + .../hbm/tileentity/TileEntityProxyCombo.java | 4 +- .../java/com/hbm/tileentity/TileMappings.java | 2 +- .../machine/TileEntityDiFurnaceRTG.java | 2 +- .../machine/TileEntityMachineArcFurnace.java | 419 ------- .../TileEntityMachineElectricFurnace.java | 2 +- .../machine/TileEntityRtgFurnace.java | 2 +- .../rbmk/TileEntityRBMKAutoloader.java | 290 +++++ src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../assets/hbm/models/rbmk/autoloader.obj | 1029 +++++++++++++++++ .../hbm/textures/blocks/rbmk_autoloader.png | Bin 0 -> 285 bytes .../assets/hbm/textures/gui/gui_arc.png | Bin 3054 -> 0 bytes .../textures/gui/machine/gui_autoloader.png | Bin 0 -> 1736 bytes .../models/machines/rbmk_autoloader.png | Bin 0 -> 1576 bytes 30 files changed, 1586 insertions(+), 880 deletions(-) delete mode 100644 src/main/java/com/hbm/blocks/machine/MachineArcFurnace.java create mode 100644 src/main/java/com/hbm/blocks/machine/rbmk/RBMKAutoloader.java delete mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnace.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerRBMKAutoloader.java delete mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnace.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIRBMKAutoloader.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderRBMKAutoloader.java delete mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java create mode 100644 src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java create mode 100644 src/main/resources/assets/hbm/models/rbmk/autoloader.obj create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk_autoloader.png delete mode 100644 src/main/resources/assets/hbm/textures/gui/gui_arc.png create mode 100644 src/main/resources/assets/hbm/textures/gui/machine/gui_autoloader.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/rbmk_autoloader.png diff --git a/changelog b/changelog index fa222ff1a..57f21b30a 100644 --- a/changelog +++ b/changelog @@ -14,7 +14,10 @@ ## Changed * The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints * The chemical plant now has a recipe for making cobblestone from 25mB of lava (which can be liquefacted into even more lava, useful for cobblestone generation) +* Removed the old arc furnace ## Fixed * Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit - * As an extra safeguard, the recipe loader now throws an exception if that happens \ No newline at end of file + * As an extra safeguard, the recipe loader now throws an exception if that happens +* Fixed dupe caused by the breeding reactor +* Fixed a potential crash caused by a change done to tile entity proxies in relation to EnergyControl \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 1b7dd0f7d..f9d312fa8 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -750,9 +750,6 @@ public class ModBlocks { public static Block machine_microwave; - public static Block machine_arc_furnace_off; - public static Block machine_arc_furnace_on; - //public static Block machine_deuterium; public static Block machine_battery_potato; @@ -1124,6 +1121,7 @@ public class ModBlocks { public static Block rbmk_heater; public static Block rbmk_console; public static Block rbmk_crane_console; + public static Block rbmk_autoloader; public static Block rbmk_loader; public static Block rbmk_steam_inlet; public static Block rbmk_steam_outlet; @@ -1526,7 +1524,7 @@ public class ModBlocks { floodlight = new Floodlight(Material.iron).setBlockName("floodlight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); floodlight_beam = new FloodlightBeam().setBlockName("floodlight_beam"); - rebar = new BlockRebar().setBlockName("rebar").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":rebar"); + rebar = new BlockRebar().setBlockName("rebar").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":rebar"); reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone"); concrete_smooth = new BlockRadResistant(Material.rock).setBlockName("concrete_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete"); concrete_colored = new BlockConcreteColored(Material.rock).setBlockName("concrete_colored").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete"); @@ -1877,8 +1875,6 @@ public class ModBlocks { machine_electric_furnace_off = new MachineElectricFurnace(false).setBlockName("machine_electric_furnace_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_electric_furnace_on = new MachineElectricFurnace(true).setBlockName("machine_electric_furnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); - machine_arc_furnace_off = new MachineArcFurnace(false).setBlockName("machine_arc_furnace_off").setHardness(5.0F).setResistance(10.0F); - machine_arc_furnace_on = new MachineArcFurnace(true).setBlockName("machine_arc_furnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); machine_arc_furnace = new MachineArcFurnaceLarge().setBlockName("machine_arc_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_microwave = new MachineMicrowave(Material.iron).setBlockName("machine_microwave").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_microwave"); @@ -2173,6 +2169,7 @@ public class ModBlocks { rbmk_heater = new RBMKHeater().setBlockName("rbmk_heater").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_heater"); rbmk_console = new RBMKConsole().setBlockName("rbmk_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_console"); rbmk_crane_console = new RBMKCraneConsole().setBlockName("rbmk_crane_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_crane_console"); + rbmk_autoloader = new RBMKAutoloader().setBlockName("rbmk_autoloader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_autoloader"); rbmk_loader = new RBMKLoader(Material.iron).setBlockName("rbmk_loader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_loader"); rbmk_steam_inlet = new RBMKInlet(Material.iron).setBlockName("rbmk_steam_inlet").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_steam_inlet"); rbmk_steam_outlet = new RBMKOutlet(Material.iron).setBlockName("rbmk_steam_outlet").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_steam_outlet"); @@ -3188,6 +3185,7 @@ public class ModBlocks { GameRegistry.registerBlock(rbmk_heater, rbmk_heater.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_console, rbmk_console.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_crane_console, rbmk_crane_console.getUnlocalizedName()); + register(rbmk_autoloader); register(rbmk_loader); register(rbmk_steam_inlet); register(rbmk_steam_outlet); @@ -3293,8 +3291,6 @@ public class ModBlocks { GameRegistry.registerBlock(machine_converter_rf_he, machine_converter_rf_he.getUnlocalizedName()); GameRegistry.registerBlock(machine_electric_furnace_off, machine_electric_furnace_off.getUnlocalizedName()); GameRegistry.registerBlock(machine_electric_furnace_on, machine_electric_furnace_on.getUnlocalizedName()); - GameRegistry.registerBlock(machine_arc_furnace_off, machine_arc_furnace_off.getUnlocalizedName()); - GameRegistry.registerBlock(machine_arc_furnace_on, machine_arc_furnace_on.getUnlocalizedName()); GameRegistry.registerBlock(machine_microwave, machine_microwave.getUnlocalizedName()); GameRegistry.registerBlock(machine_assembler, machine_assembler.getUnlocalizedName()); register(machine_assembly_machine); diff --git a/src/main/java/com/hbm/blocks/machine/MachineArcFurnace.java b/src/main/java/com/hbm/blocks/machine/MachineArcFurnace.java deleted file mode 100644 index 7b45594c8..000000000 --- a/src/main/java/com/hbm/blocks/machine/MachineArcFurnace.java +++ /dev/null @@ -1,288 +0,0 @@ -package com.hbm.blocks.machine; - -import java.util.Random; - -import com.hbm.blocks.ModBlocks; -import com.hbm.lib.RefStrings; -import com.hbm.main.MainRegistry; -import com.hbm.tileentity.machine.TileEntityMachineArcFurnace; - -import cpw.mods.fml.common.network.internal.FMLNetworkHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; - -public class MachineArcFurnace extends BlockContainer { - - private final Random field_149933_a = new Random(); - private final boolean isActive; - private static boolean keepInventory; - - @SideOnly(Side.CLIENT) - private IIcon iconFront; - @SideOnly(Side.CLIENT) - private IIcon iconTop; - @SideOnly(Side.CLIENT) - private IIcon iconBottom; - @SideOnly(Side.CLIENT) - private IIcon iconRods; - - public MachineArcFurnace(boolean blockState) { - super(Material.iron); - isActive = blockState; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - this.iconFront = iconRegister.registerIcon(RefStrings.MODID + (this.isActive ? ":machine_arc_furnace_front_on" : ":machine_arc_furnace_front_off")); - this.iconTop = iconRegister.registerIcon(RefStrings.MODID + (this.isActive ? ":machine_arc_furnace_top_on" : ":machine_arc_furnace_top")); - this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":machine_arc_furnace_bottom"); - this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":machine_arc_furnace_side"); - this.iconRods = iconRegister.registerIcon(RefStrings.MODID + ":machine_arc_furnace_top_rods"); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int metadata) { - - if(this == ModBlocks.machine_arc_furnace_off) { - - if(side == 1 && metadata > 5) { - return iconRods; - } - } - - if(metadata > 5) - metadata -= 4; - - if(side == 0) - return this.iconBottom; - if(side == 1) - return this.iconTop; - - return metadata == 0 && side == 3 ? this.iconFront : (side == metadata ? this.iconFront : this.blockIcon); - } - - @Override - public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) - { - return Item.getItemFromBlock(ModBlocks.machine_arc_furnace_off); - } - - @Override - public void onBlockAdded(World world, int x, int y, int z) { - super.onBlockAdded(world, x, y, z); - this.setDefaultDirection(world, x, y, z); - } - - private void setDefaultDirection(World world, int x, int y, int z) { - if(!world.isRemote) - { - Block block1 = world.getBlock(x, y, z - 1); - Block block2 = world.getBlock(x, y, z + 1); - Block block3 = world.getBlock(x - 1, y, z); - Block block4 = world.getBlock(x + 1, y, z); - - byte b0 = 3; - - if(block1.func_149730_j() && !block2.func_149730_j()) - { - b0 = 3; - } - if(block2.func_149730_j() && !block1.func_149730_j()) - { - b0 = 2; - } - if(block3.func_149730_j() && !block4.func_149730_j()) - { - b0 = 5; - } - if(block4.func_149730_j() && !block3.func_149730_j()) - { - b0 = 4; - } - - world.setBlockMetadataWithNotify(x, y, z, b0, 2); - } - } - - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { - int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - - if(i == 0) - { - world.setBlockMetadataWithNotify(x, y, z, 2, 2); - } - if(i == 1) - { - world.setBlockMetadataWithNotify(x, y, z, 5, 2); - } - if(i == 2) - { - world.setBlockMetadataWithNotify(x, y, z, 3, 2); - } - if(i == 3) - { - world.setBlockMetadataWithNotify(x, y, z, 4, 2); - } - - if(itemStack.hasDisplayName()) - { - ((TileEntityMachineArcFurnace)world.getTileEntity(x, y, z)).setCustomName(itemStack.getDisplayName()); - } - } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) - { - return true; - } else if(!player.isSneaking()) - { - TileEntityMachineArcFurnace entity = (TileEntityMachineArcFurnace) world.getTileEntity(x, y, z); - if(entity != null) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); - } - return true; - } else { - return false; - } - } - - @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntityMachineArcFurnace(); - } - - public static void updateBlockState(boolean isProcessing, World world, int x, int y, int z) { - int i = world.getBlockMetadata(x, y, z); - TileEntity entity = world.getTileEntity(x, y, z); - keepInventory = true; - - if(isProcessing) - { - world.setBlock(x, y, z, ModBlocks.machine_arc_furnace_on); - }else{ - world.setBlock(x, y, z, ModBlocks.machine_arc_furnace_off); - } - - keepInventory = false; - world.setBlockMetadataWithNotify(x, y, z, i, 2); - - if(entity != null) { - entity.validate(); - world.setTileEntity(x, y, z, entity); - } - } - - @Override - public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) - { - if (!keepInventory) - { - TileEntityMachineArcFurnace tileentityfurnace = (TileEntityMachineArcFurnace)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); - - if (tileentityfurnace != null) - { - for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) - { - ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); - - if (itemstack != null) - { - float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - - while (itemstack.stackSize > 0) - { - int j1 = this.field_149933_a.nextInt(21) + 10; - - if (j1 > itemstack.stackSize) - { - j1 = itemstack.stackSize; - } - - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - - if (itemstack.hasTagCompound()) - { - entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy()); - } - - float f3 = 0.05F; - entityitem.motionX = (float)this.field_149933_a.nextGaussian() * f3; - entityitem.motionY = (float)this.field_149933_a.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float)this.field_149933_a.nextGaussian() * f3; - p_149749_1_.spawnEntityInWorld(entityitem); - } - } - } - - p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); - } - } - - super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); - } - - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(World p_149734_1_, int x, int y, int z, Random rand) - { - if (isActive) - { - int l = p_149734_1_.getBlockMetadata(x, y, z); - float f = x + 0.5F; - float f1 = y + 0.0F + rand.nextFloat() * 6.0F / 16.0F; - float f2 = z + 0.5F; - float f3 = 0.52F; - float f4 = rand.nextFloat() * 0.6F - 0.3F; - - if (l == 4) - { - p_149734_1_.spawnParticle("smoke", f - f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D); - p_149734_1_.spawnParticle("flame", f - f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D); - } - else if (l == 5) - { - p_149734_1_.spawnParticle("smoke", f + f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D); - p_149734_1_.spawnParticle("flame", f + f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D); - } - else if (l == 2) - { - p_149734_1_.spawnParticle("smoke", f + f4, f1, f2 - f3, 0.0D, 0.0D, 0.0D); - p_149734_1_.spawnParticle("flame", f + f4, f1, f2 - f3, 0.0D, 0.0D, 0.0D); - } - else if (l == 3) - { - p_149734_1_.spawnParticle("smoke", f + f4, f1, f2 + f3, 0.0D, 0.0D, 0.0D); - p_149734_1_.spawnParticle("flame", f + f4, f1, f2 + f3, 0.0D, 0.0D, 0.0D); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public Item getItem(World p_149694_1_, int p_149694_2_, int p_149694_3_, int p_149694_4_) - { - return Item.getItemFromBlock(ModBlocks.machine_arc_furnace_off); - } -} diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKAutoloader.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKAutoloader.java new file mode 100644 index 000000000..9eb8f58dc --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKAutoloader.java @@ -0,0 +1,42 @@ +package com.hbm.blocks.machine.rbmk; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKAutoloader; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +public class RBMKAutoloader extends BlockDummyable { + + public RBMKAutoloader() { + super(Material.iron); + + this.bounding.add(AxisAlignedBB.getBoundingBox(-0.125, 0, -0.125, 0.125, 4, 0.125)); + this.bounding.add(AxisAlignedBB.getBoundingBox(-0.5, 4, -0.5, 0.5, 9, 0.5)); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityRBMKAutoloader(); + return new TileEntityProxyCombo().inventory(); + } + + @Override + public int[] getDimensions() { + return new int[] {8, 0, 0, 0, 0, 0}; + } + + @Override + public int getOffset() { + return 0; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnace.java b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnace.java deleted file mode 100644 index c3dd0c537..000000000 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnace.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.hbm.inventory.container; - -import com.hbm.inventory.SlotSmelting; -import com.hbm.items.ModItems; -import com.hbm.tileentity.machine.TileEntityMachineArcFurnace; - -import api.hbm.energymk2.IBatteryItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerMachineArcFurnace extends Container { - - private TileEntityMachineArcFurnace diFurnace; - - public ContainerMachineArcFurnace(InventoryPlayer invPlayer, TileEntityMachineArcFurnace tedf) { - - diFurnace = tedf; - - this.addSlotToContainer(new Slot(tedf, 0, 56, 17)); - this.addSlotToContainer(new SlotSmelting(invPlayer.player, tedf, 1, 116, 35)); - this.addSlotToContainer(new Slot(tedf, 2, 38, 53)); - this.addSlotToContainer(new Slot(tedf, 3, 56, 53)); - this.addSlotToContainer(new Slot(tedf, 4, 74, 53)); - this.addSlotToContainer(new Slot(tedf, 5, 8, 53)); - - for(int i = 0; i < 3; i++) { - for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); - } - } - - for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); - } - } - - @Override - public void addCraftingToCrafters(ICrafting crafting) { - super.addCraftingToCrafters(crafting); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int index) { - ItemStack rStack = null; - Slot slot = (Slot) this.inventorySlots.get(index); - - if(slot != null && slot.getHasStack()) { - ItemStack stack = slot.getStack(); - rStack = stack.copy(); - - if(index <= 5) { - if(!this.mergeItemStack(stack, 6, this.inventorySlots.size(), true)) { - return null; - } - - slot.onSlotChange(stack, rStack); - - } else { - - if(rStack.getItem() instanceof IBatteryItem || rStack.getItem() == ModItems.battery_creative) { - if(!this.mergeItemStack(stack, 5, 6, false)) - return null; - - } else if(rStack.getItem() == ModItems.arc_electrode) { - if(!this.mergeItemStack(stack, 2, 5, false)) - return null; - - } else if(!this.mergeItemStack(stack, 0, 1, false)) - return null; - } - - if(stack.stackSize == 0) { - slot.putStack((ItemStack) null); - } else { - slot.onSlotChanged(); - } - } - - return rStack; - } - - @Override - public boolean canInteractWith(EntityPlayer player) { - return diFurnace.isUseableByPlayer(player); - } -} diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineReactorBreeding.java b/src/main/java/com/hbm/inventory/container/ContainerMachineReactorBreeding.java index 331b69d1d..cab45d330 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineReactorBreeding.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineReactorBreeding.java @@ -43,8 +43,8 @@ public class ContainerMachineReactorBreeding extends Container { ItemStack stack = slot.getStack(); var3 = stack.copy(); - if(index <= 1) { - if(!this.mergeItemStack(stack, 1, this.inventorySlots.size(), true)) { + if(index <= 2) { + if(!this.mergeItemStack(stack, 2, this.inventorySlots.size(), true)) { return null; } diff --git a/src/main/java/com/hbm/inventory/container/ContainerRBMKAutoloader.java b/src/main/java/com/hbm/inventory/container/ContainerRBMKAutoloader.java new file mode 100644 index 000000000..de34fab6b --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerRBMKAutoloader.java @@ -0,0 +1,54 @@ +package com.hbm.inventory.container; + +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKAutoloader; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerRBMKAutoloader extends ContainerBase { + + public TileEntityRBMKAutoloader loader; + + public ContainerRBMKAutoloader(InventoryPlayer invPlayer, TileEntityRBMKAutoloader tedf) { + super(invPlayer, tedf); + loader = tedf; + + this.addSlots(loader, 0, 17, 18, 3, 3); + this.addTakeOnlySlots(loader, 9, 107, 18, 3, 3); + this.playerInv(invPlayer, 8, 100); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack rStack = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack stack = slot.getStack(); + rStack = stack.copy(); + + if(index <= 17) { + if(!this.mergeItemStack(stack, 18, this.inventorySlots.size(), true)) { + return null; + } + } else { + if(!this.mergeItemStack(stack, 0, 9, false)) return null; + } + + if(stack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return rStack; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return loader.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnace.java b/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnace.java deleted file mode 100644 index 5f6e04fdf..000000000 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnace.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.hbm.inventory.gui; - -import org.lwjgl.opengl.GL11; - -import com.hbm.inventory.container.ContainerMachineArcFurnace; -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.machine.TileEntityMachineArcFurnace; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -public class GUIMachineArcFurnace extends GuiInfoContainer { - - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_arc.png"); - private TileEntityMachineArcFurnace diFurnace; - - public GUIMachineArcFurnace(InventoryPlayer invPlayer, TileEntityMachineArcFurnace tedf) { - super(new ContainerMachineArcFurnace(invPlayer, tedf)); - diFurnace = tedf; - - this.xSize = 176; - this.ySize = 166; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float f) { - super.drawScreen(mouseX, mouseY, f); - - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 51 - 34, 16, 34, diFurnace.power, diFurnace.maxPower); - } - - @Override - protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); - - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); - this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - - if(diFurnace.isInvalid() && diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) instanceof TileEntityMachineArcFurnace) - diFurnace = (TileEntityMachineArcFurnace) diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord); - - if(diFurnace.hasPower()) { - int i = (int)diFurnace.getPowerRemainingScaled(34); - drawTexturedModalRect(guiLeft + 8, guiTop + 51 - i, 176, 67 - i, 16, i); - } - - if(diFurnace.canProcess() && diFurnace.hasPower()) - { - drawTexturedModalRect(guiLeft + 55, guiTop + 35, 176, 0, 15, 16); - } - - int j1 = diFurnace.getDiFurnaceProgressScaled(24); - drawTexturedModalRect(guiLeft + 79, guiTop + 34, 176, 16, j1 + 1, 17); - } -} diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKAutoloader.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKAutoloader.java new file mode 100644 index 000000000..2805437f6 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKAutoloader.java @@ -0,0 +1,72 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerRBMKAutoloader; +import com.hbm.lib.RefStrings; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKAutoloader; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; + +public class GUIRBMKAutoloader extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_autoloader.png"); + private TileEntityRBMKAutoloader loader; + + public GUIRBMKAutoloader(InventoryPlayer invPlayer, TileEntityRBMKAutoloader tile) { + super(new ContainerRBMKAutoloader(invPlayer, tile)); + loader = tile; + + this.xSize = 176; + this.ySize = 182; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(guiLeft + 74 <= x && guiLeft + 74 + 12 > x && guiTop + 36 < y && guiTop + 36 + 12 >= y) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("minus", true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, loader.xCoord, loader.yCoord, loader.zCoord)); + } + + if(guiLeft + 90 <= x && guiLeft + 90 + 12 > x && guiTop + 36 < y && guiTop + 36 + 12 >= y) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("plus", true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, loader.xCoord, loader.yCoord, loader.zCoord)); + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.loader.hasCustomInventoryName() ? this.loader.getInventoryName() : I18n.format(this.loader.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xFFFFFF); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + + String percent = loader.cycle + "%"; + this.fontRendererObj.drawString(percent, this.xSize / 2 - this.fontRendererObj.getStringWidth(percent) / 2, 23, 0x00FF00); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index df5e429b2..b8bbdbde8 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -4005,7 +4005,7 @@ public class ModItems { upgrade_stack = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_stack").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_stack"); upgrade_ejector = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_ejector").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_ejector"); - rebar_placer = new ItemRebarPlacer().setUnlocalizedName("rebar_placer").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":rebar_placer"); + rebar_placer = new ItemRebarPlacer().setUnlocalizedName("rebar_placer").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":rebar_placer"); wand = new ItemWand().setUnlocalizedName("wand_k").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand"); wand_s = new ItemWandS().setUnlocalizedName("wand_s").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_s"); wand_d = new ItemWandD().setUnlocalizedName("wand_d").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_d"); diff --git a/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java b/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java index 86b120769..d6d5715cd 100644 --- a/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java +++ b/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java @@ -101,7 +101,10 @@ public class ItemRebarPlacer extends Item implements IGUIProvider { @Override public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fx, float fy, float fz) { if(world.isRemote) return true; - if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); + if(!stack.hasTagCompound()) { + stack.stackTagCompound = new NBTTagCompound(); + ItemStackUtil.addStacksToNBT(stack, new ItemStack[] {new ItemStack(ModBlocks.concrete_rebar)}); + } ItemStack theConk = ItemStackUtil.readStacksFromNBT(stack, 1)[0]; boolean hasConk = theConk != null && isValidConk(theConk.getItem(), theConk.getItemDamage()); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 1d934e87d..1661a221b 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -416,6 +416,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKCooler.class, new RenderRBMKLid()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKStorage.class, new RenderRBMKLid()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKHeater.class, new RenderRBMKLid()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKAutoloader.class, new RenderRBMKAutoloader()); //ITER ClientRegistry.bindTileEntitySpecialRenderer(TileEntityITER.class, new RenderITER()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePlasmaHeater.class, new RenderPlasmaHeater()); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index dffae8513..b1818f018 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1721,6 +1721,8 @@ public class MainRegistry { ignoreMappings.add("hbm:item.journal_pip"); ignoreMappings.add("hbm:item.journal_bj"); ignoreMappings.add("hbm:item.journal_silver"); + ignoreMappings.add("hbm:tile.machine_arc_furnace_off"); + ignoreMappings.add("hbm:tile.machine_arc_furnace_on"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index a1fee2c2c..fb125b628 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1565,10 +1565,12 @@ public class ResourceManager { public static final IModelCustom rbmk_rods_vbo = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_rods.obj")).asVBO(); public static final IModelCustom rbmk_crane_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/crane_console.obj")).asVBO(); public static final IModelCustom rbmk_crane = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/crane.obj")).asVBO(); + public static final IModelCustom rbmk_autoloader = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/autoloader.obj")).asVBO(); public static final IModelCustom rbmk_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_console.obj")).asVBO(); public static final IModelCustom rbmk_debris = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/rbmk/debris.obj")); public static final ResourceLocation rbmk_crane_console_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/crane_console.png"); public static final ResourceLocation rbmk_crane_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_crane.png"); + public static final ResourceLocation rbmk_autoloader_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_autoloader.png"); public static final ResourceLocation rbmk_console_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_control.png"); public static final IModelCustom hev_battery = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/battery.obj")); public static final IModelCustom anvil = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/anvil.obj")); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlaregun.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlaregun.java index 3bcabc96b..d21439d5d 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlaregun.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlaregun.java @@ -112,6 +112,13 @@ public class ItemRenderFlaregun extends ItemRenderWeaponBase { GL11.glRotated(90, 0, 1, 0); } + @Override + public void setupEntity(ItemStack stack) { + super.setupEntity(stack); + double scale = 0.5D; + GL11.glScaled(scale, scale, scale); + } + @Override public void renderOther(ItemStack stack, ItemRenderType type) { GL11.glEnable(GL11.GL_LIGHTING); diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKAutoloader.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKAutoloader.java new file mode 100644 index 000000000..3018364a9 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKAutoloader.java @@ -0,0 +1,62 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKAutoloader; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderRBMKAutoloader extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.rbmk_autoloader_tex); + ResourceManager.rbmk_autoloader.renderPart("Base"); + + TileEntityRBMKAutoloader press = (TileEntityRBMKAutoloader) tile; + double p = (press.lastPiston + (press.renderPiston - press.lastPiston) * interp); + GL11.glTranslated(0, p * -4D, 0); + + GL11.glTranslated(0, 4, 0); + ResourceManager.rbmk_autoloader.renderPart("Piston"); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.rbmk_autoloader); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(0, -6, 0); + GL11.glScaled(1.75, 1.75, 1.75); + } + public void renderCommon() { + GL11.glRotated(180, 0, 1, 0); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.rbmk_autoloader_tex); + ResourceManager.rbmk_autoloader.renderPart("Base"); + ResourceManager.rbmk_autoloader.renderPart("Piston"); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_CULL_FACE); + }}; + } + +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index c38e5f51e..fb80aa785 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -75,8 +75,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy return this; } - /** Returns the actual tile entity that represents the core. Only for internal use. */ - protected TileEntity getTile() { + /** Returns the actual tile entity that represents the core. Only for internal use, and EnergyControl. */ + public TileEntity getTile() { if(tile == null || tile.isInvalid()) { tile = this.getTE(); } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 3b7676d73..7a8f9ead4 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -149,7 +149,6 @@ public class TileMappings { put(TileEntityCoreInjector.class, "tileentity_v0_injector"); put(TileEntityCoreStabilizer.class, "tileentity_v0_stabilizer"); put(TileEntityCore.class, "tileentity_v0"); - put(TileEntityMachineArcFurnace.class, "tileentity_arc_furnace"); put(TileEntityMachineAmgen.class, "tileentity_amgen"); put(TileEntityMachineHephaestus.class, "tileentity_hephaestus"); put(TileEntityGeysir.class, "tileentity_geysir"); @@ -403,6 +402,7 @@ public class TileMappings { put(TileEntityRBMKConsole.class, "tileentity_rbmk_console"); put(TileEntityRBMKInlet.class, "tileentity_rbmk_inlet"); put(TileEntityRBMKOutlet.class, "tileentity_rbmk_outlet"); + put(TileEntityRBMKAutoloader.class, "tileentity_rbmk_autoloader"); } private static void putNetwork() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java index 5776fa53a..2c4999f23 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java @@ -105,7 +105,7 @@ public class TileEntityDiFurnaceRTG extends TileEntityMachineBase implements IGU for(int i = 0; i < 2; i++) { if(slots[i].stackSize <= 0) - slots[i] = new ItemStack(slots[i].getItem().setFull3D()); + slots[i] = new ItemStack(slots[i].getItem()); else slots[i].stackSize--; if(slots[i].stackSize <= 0) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java deleted file mode 100644 index 7c6df467c..000000000 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java +++ /dev/null @@ -1,419 +0,0 @@ -package com.hbm.tileentity.machine; - -import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.machine.MachineArcFurnace; -import com.hbm.inventory.container.ContainerMachineArcFurnace; -import com.hbm.inventory.gui.GUIMachineArcFurnace; -import com.hbm.items.ModItems; -import com.hbm.lib.Library; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityLoadedBase; -import com.hbm.util.CompatEnergyControl; - -import api.hbm.energymk2.IEnergyReceiverMK2; -import api.hbm.tile.IInfoProviderEC; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements ISidedInventory, IEnergyReceiverMK2, IGUIProvider, IInfoProviderEC { - - private ItemStack slots[]; - - public int dualCookTime; - public long power; - public static final long maxPower = 50000; - public static final int processingSpeed = 20; - - //0: i - //1: o - //2: 1 - //3: 2 - //4: 3 - //5: b - private static final int[] slots_io = new int[] {0, 1, 2, 3, 4, 5}; - - private String customName; - - public TileEntityMachineArcFurnace() { - slots = new ItemStack[6]; - } - - @Override - public int getSizeInventory() { - return slots.length; - } - - @Override - public ItemStack getStackInSlot(int i) { - return slots[i]; - } - - @Override - public ItemStack getStackInSlotOnClosing(int i) { - if(slots[i] != null) - { - ItemStack itemStack = slots[i]; - slots[i] = null; - return itemStack; - } else { - return null; - } - } - - @Override - public void setInventorySlotContents(int i, ItemStack itemStack) { - slots[i] = itemStack; - if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) - { - itemStack.stackSize = getInventoryStackLimit(); - } - } - - @Override - public String getInventoryName() { - return this.hasCustomInventoryName() ? this.customName : "container.arcFurnace"; - } - - @Override - public boolean hasCustomInventoryName() { - return this.customName != null && this.customName.length() > 0; - } - - public void setCustomName(String name) { - this.customName = name; - markDirty(); - } - - @Override - public int getInventoryStackLimit() { - return 64; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player) { - if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) - { - return false; - }else{ - return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64; - } - } - - //You scrubs aren't needed for anything (right now) - @Override - public void openInventory() {} - @Override - public void closeInventory() {} - - @Override - public boolean isItemValidForSlot(int i, ItemStack itemStack) { - - if(i == 2 || i == 3 || i == 4) - return itemStack.getItem() == ModItems.arc_electrode; - - if(i == 0) - return FurnaceRecipes.smelting().getSmeltingResult(itemStack) != null; - - return false; - } - - @Override - public ItemStack decrStackSize(int i, int j) { - if(slots[i] != null) - { - if(slots[i].stackSize <= j) - { - ItemStack itemStack = slots[i]; - slots[i] = null; - return itemStack; - } - ItemStack itemStack1 = slots[i].splitStack(j); - if (slots[i].stackSize == 0) - { - slots[i] = null; - } - - return itemStack1; - } else { - return null; - } - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - NBTTagList list = nbt.getTagList("items", 10); - - this.power = nbt.getLong("powerTime"); - this.dualCookTime = nbt.getInteger("cookTime"); - slots = new ItemStack[getSizeInventory()]; - - for(int i = 0; i < list.tagCount(); i++) - { - NBTTagCompound nbt1 = list.getCompoundTagAt(i); - byte b0 = nbt1.getByte("slot"); - if(b0 >= 0 && b0 < slots.length) - { - slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); - } - } - - customName = nbt.getString("name"); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - nbt.setLong("powerTime", power); - nbt.setInteger("cookTime", dualCookTime); - NBTTagList list = new NBTTagList(); - - for(int i = 0; i < slots.length; i++) - { - if(slots[i] != null) - { - NBTTagCompound nbt1 = new NBTTagCompound(); - nbt1.setByte("slot", (byte)i); - slots[i].writeToNBT(nbt1); - list.appendTag(nbt1); - } - } - nbt.setTag("items", list); - - if (customName != null) { - nbt.setString("name", customName); - } - } - - @Override - public int[] getAccessibleSlotsFromSide(int side) { - return slots_io; - } - - @Override - public boolean canInsertItem(int i, ItemStack itemStack, int j) { - return this.isItemValidForSlot(i, itemStack); - } - - @Override - public boolean canExtractItem(int i, ItemStack itemStack, int j) { - - if(i == 1) - return true; - - if(i == 2 || i == 3 || i == 4) - return itemStack.getItem() == ModItems.arc_electrode_burnt; - - return false; - } - - public int getDiFurnaceProgressScaled(int i) { - return (dualCookTime * i) / processingSpeed; - } - - public long getPowerRemainingScaled(long i) { - return (power * i) / maxPower; - } - - public boolean hasPower() { - return power >= 250; - } - - public boolean isProcessing() { - return this.dualCookTime > 0; - } - - private boolean hasElectrodes() { - - if(slots[2] != null && slots[3] != null && slots[4] != null) { - if((slots[2].getItem() == ModItems.arc_electrode) && - (slots[3].getItem() == ModItems.arc_electrode) && - (slots[4].getItem() == ModItems.arc_electrode)) - return true; - } - - return false; - } - - public boolean canProcess() { - - if(!hasElectrodes()) - return false; - - if(slots[0] == null) - { - return false; - } - ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); - - if(itemStack == null) - { - return false; - } - - if(slots[1] == null) - { - return true; - } - - if(!slots[1].isItemEqual(itemStack)) { - return false; - } - - if(slots[1].stackSize < getInventoryStackLimit() && slots[1].stackSize < slots[1].getMaxStackSize()) { - return true; - }else{ - return slots[1].stackSize < itemStack.getMaxStackSize(); - } - } - - private void processItem() { - if(canProcess()) { - ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); - - if(slots[1] == null) - { - slots[1] = itemStack.copy(); - }else if(slots[1].isItemEqual(itemStack)) { - slots[1].stackSize += itemStack.stackSize; - } - - for(int i = 0; i < 1; i++) - { - if(slots[i].stackSize <= 0) - { - slots[i] = new ItemStack(slots[i].getItem()); - }else{ - slots[i].stackSize--; - } - if(slots[i].stackSize <= 0) - { - slots[i] = null; - } - } - } - } - - //TODO: fix this punjabi trash - @Override - public void updateEntity() { - boolean flag1 = false; - - if(!worldObj.isRemote) { - - for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) - this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); - - if(hasPower() && canProcess()) - { - dualCookTime++; - - power -= 250; - - if(power < 0) - power = 0; - - if(this.dualCookTime == processingSpeed) - { - this.dualCookTime = 0; - this.processItem(); - flag1 = true; - } - }else{ - dualCookTime = 0; - } - - boolean trigger = true; - - if(hasPower() && canProcess() && this.dualCookTime == 0) - { - trigger = false; - } - - if(trigger) - { - flag1 = true; - MachineArcFurnace.updateBlockState(this.dualCookTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); - } - - if(worldObj.getBlock(xCoord, yCoord, zCoord) == ModBlocks.machine_arc_furnace_off) { - - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - - if(hasElectrodes() && meta <= 5) { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, meta + 4, 2); - } - if(!hasElectrodes() && meta > 5) { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, meta - 4, 2); - } - } - - power = Library.chargeTEFromItems(slots, 5, power, maxPower); - - networkPackNT(50); // it makes no sense to refactor this to some, but I want to delete the AuxElectricityPacket already - } - - if(flag1) - { - this.markDirty(); - } - } - - @Override - public void serialize(ByteBuf buf) { - super.serialize(buf); - buf.writeLong(power); - buf.writeInt(dualCookTime); - } - - @Override - public void deserialize(ByteBuf buf) { - super.deserialize(buf); - power = buf.readLong(); - dualCookTime = buf.readInt(); - } - - @Override - public void setPower(long i) { - power = i; - - } - - @Override - public long getPower() { - return power; - - } - - @Override - public long getMaxPower() { - return maxPower; - } - - @Override - public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new ContainerMachineArcFurnace(player.inventory, this); - } - - @Override - @SideOnly(Side.CLIENT) - public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new GUIMachineArcFurnace(player.inventory, this); - } - - @Override - public void provideExtraInfo(NBTTagCompound data) { - data.setBoolean(CompatEnergyControl.B_ACTIVE, this.hasPower() && this.canProcess()); - data.setInteger(CompatEnergyControl.I_PROGRESS, this.dualCookTime); - } -} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index 84c1fd378..bd76ff316 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -154,7 +154,7 @@ public class TileEntityMachineElectricFurnace extends TileEntityMachineBase impl for(int i = 1; i < 2; i++) { if(slots[i].stackSize <= 0) { - slots[i] = new ItemStack(slots[i].getItem().setFull3D()); + slots[i] = new ItemStack(slots[i].getItem()); } else { slots[i].stackSize--; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java index 72882cabd..f2ac74441 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java @@ -240,7 +240,7 @@ public class TileEntityRtgFurnace extends TileEntity implements ISidedInventory, { if(slots[i].stackSize <= 0) { - slots[i] = new ItemStack(slots[i].getItem().setFull3D()); + slots[i] = new ItemStack(slots[i].getItem()); }else{ slots[i].stackSize--; } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java new file mode 100644 index 000000000..8ba45ef55 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java @@ -0,0 +1,290 @@ +package com.hbm.tileentity.machine.rbmk; + +import com.hbm.blocks.machine.rbmk.RBMKBase; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.ICopiable; +import com.hbm.inventory.container.ContainerRBMKAutoloader; +import com.hbm.inventory.gui.GUIRBMKAutoloader; +import com.hbm.items.machine.ItemRBMKRod; +import com.hbm.main.MainRegistry; +import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class TileEntityRBMKAutoloader extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, ICopiable { + + public double piston; + public double renderPiston; + public double lastPiston; + private double syncPiston; + private int turnProgress; + private boolean isRetracting = true; + private int delay = 0; + + public static double speed = 0.005D; + + public int cycle = 50; + + private AudioWrapper audioLift; + + public TileEntityRBMKAutoloader() { + super(18); + } + + @Override + public String getName() { + return "container.rbmkAutoloader"; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(delay > 0) delay--; + + if(delay <= 0 && this.isRetracting && this.piston > 0D) { + this.piston -= this.speed; + if(this.piston <= 0) { + this.piston = 0; + this.delay = 40; + } + } + + // check for connected fuel rod and decide whether to begin working + if(isRetracting && worldObj.getTotalWorldTime() % 20 == 0 && this.hasFuel() && this.hasSpace()) { + Block below = worldObj.getBlock(xCoord, yCoord - 1, zCoord); + if(below instanceof RBMKBase) { + int[] pos = ((RBMKBase) below).findCore(worldObj, xCoord, yCoord - 1, zCoord); + TileEntity tile = worldObj.getTileEntity(pos[0], pos[1], pos[2]); + if(tile instanceof TileEntityRBMKRod) { + TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; + if(rod.slots[0] == null || (rod.slots[0] != null && rod.slots[0].getItem() instanceof ItemRBMKRod && ItemRBMKRod.getEnrichment(rod.slots[0]) * 100 < cycle)) { + this.isRetracting = false; + } + } + } + } + + if(delay <= 0 && !this.isRetracting && this.piston < 1D) { + this.piston += this.speed; + if(this.piston >= 1) { + this.piston = 1; + this.delay = 40; + } + } + + // once the piston is fully extended + if(!isRetracting && this.piston >= 1D) { + this.piston = 1D; + + Block below = worldObj.getBlock(xCoord, yCoord - 1, zCoord); + if(below instanceof RBMKBase) { + int[] pos = ((RBMKBase) below).findCore(worldObj, xCoord, yCoord - 1, zCoord); + TileEntity tile = worldObj.getTileEntity(pos[0], pos[1], pos[2]); + if(tile instanceof TileEntityRBMKRod) { + TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; + // try to take out the old fuel rod + if(rod.slots[0] != null && this.hasSpace()) { + for(int i = 9; i < 18; i++) { + if(slots[i] == null) { + slots[i] = rod.slots[0].copy(); + rod.slots[0] = null; + break; + } + } + } + // if there's space, try and insert a new fuel rod + if(rod.slots[0] == null) { + for(int i = 0; i < 9; i++) { + ItemStack stack = slots[i]; + if(stack != null && stack.getItem() instanceof ItemRBMKRod && ItemRBMKRod.getEnrichment(stack) * 100 >= cycle) { + rod.slots[0] = stack.copy(); + slots[i] = null; + break; + } + } + } + + this.isRetracting = true; + this.delay = 40; + } + } + } + + this.networkPackNT(100); + } else { + + this.lastPiston = this.renderPiston; + + if(this.turnProgress > 0) { + this.renderPiston = this.renderPiston + ((this.syncPiston - this.renderPiston) / (double) this.turnProgress); + --this.turnProgress; + } else { + this.renderPiston = this.syncPiston; + } + + if(this.renderPiston > 0.01 && this.renderPiston < 0.99) { + if(this.audioLift == null || !this.audioLift.isPlaying()) { + this.audioLift = MainRegistry.proxy.getLoopedSound("hbm:door.wgh_start", xCoord, yCoord, zCoord, this.getVolume(0.75F), 25F, 1.0F, 5); + this.audioLift.startSound(); + } + this.audioLift.updateVolume(this.getVolume(0.75F)); + this.audioLift.keepAlive(); + } else { + if(this.audioLift != null) { + this.audioLift.stopSound(); + this.audioLift = null; + MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:door.wgh_stop", this.getVolume(2F), 1F); + } + } + + if(this.renderPiston > 0.99) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "tower"); + data.setFloat("lift", 0F); + data.setFloat("base", 0.25F); + data.setFloat("max", 1.5F); + data.setInteger("life", 70 + worldObj.rand.nextInt(30)); + data.setDouble("posX", xCoord + 0.5 + worldObj.rand.nextGaussian() * 0.125); + data.setDouble("posZ", zCoord + 0.5 + worldObj.rand.nextGaussian() * 0.125); + data.setDouble("posY", yCoord + 0.25); + data.setBoolean("noWind", true); + data.setFloat("alphaMod", 2F); + data.setFloat("strafe", 0.05F); + for(int i = 0; i < 3; i++) MainRegistry.proxy.effectNT(data); + } + } + } + + public boolean hasFuel() { + for(int i = 0; i < 9; i++) { + ItemStack stack = slots[i]; + if(stack != null && stack.getItem() instanceof ItemRBMKRod && ItemRBMKRod.getEnrichment(stack) * 100 >= cycle) { + return true; + } + } + + return false; + } + + public boolean hasSpace() { + for(int i = 9; i < 18; i++) if(slots[i] == null) return true; + return false; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeDouble(this.piston); + buf.writeInt(this.cycle); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.syncPiston = buf.readDouble(); + this.cycle = buf.readInt(); + + this.turnProgress = 2; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + return stack.getItem() instanceof ItemRBMKRod && ItemRBMKRod.getEnrichment(stack) * 100 >= cycle && i < 9; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return this.piston <= 0 ? new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 } : new int[0]; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i >= 9; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + piston = nbt.getDouble("piston"); + isRetracting = nbt.getBoolean("ret"); + delay = nbt.getInteger("delay"); + cycle = nbt.getInteger("cycle"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setDouble("piston", piston); + nbt.setBoolean("ret", isRetracting); + nbt.setInteger("delay", delay); + nbt.setInteger("cycle", cycle); + } + + protected AxisAlignedBB aabb; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(aabb != null) return aabb; + aabb = AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 9, zCoord + 1); + return aabb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public boolean hasPermission(EntityPlayer player) { + return this.isUseableByPlayer(player); + } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("minus") && this.cycle > 5) this.cycle -= 5; + if(data.hasKey("plus") && this.cycle < 95) this.cycle += 5; + this.cycle = MathHelper.clamp_int(cycle, 5, 95); + this.markChanged(); + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerRBMKAutoloader(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIRBMKAutoloader(player.inventory, this); + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound data = new NBTTagCompound(); + data.setInteger("cycle", cycle); + return data; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("cycle")) { + this.cycle = MathHelper.clamp_int(nbt.getInteger("cycle"), 5, 95); + } + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index c3dbefea1..c569a4c24 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -437,6 +437,7 @@ container.radGen=Strahlenbetriebener Generator container.radar=Radar container.radiobox=UKW-Sender container.radiorec=UKW Radio +container.rbmkAutoloader=RBMK-Ladeautomat container.rbmkBoiler=RBMK Dampfkanal container.rbmkControl=RBMK Steuerstäbe container.rbmkControlAuto=RBMK Automatische Steuerstäbe @@ -4729,6 +4730,7 @@ tile.rail_large_switch.name=Normalspur-Weiche (15m, Links) tile.rail_large_switch_flipped.name=Normalspur-Weiche (15m, Rechts) tile.rail_wood.name=Holzschienen tile.rbmk_absorber.name=RBMK Bor-Neutronenabsorber +tile.rbmk_autoloader.name=RBMK-Ladeautomat tile.rbmk_blank.name=RBMK Strukturteil tile.rbmk_boiler.name=RBMK Dampfkanal tile.rbmk_cooler.name=RBMK Kühler diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index b02964bcc..f5702bf91 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -841,6 +841,7 @@ container.radar=Radar container.radiobox=FM Transmitter container.radiolysis=RTG and Radiolysis Chamber container.radiorec=FM Radio +container.rbmkAutoloader=RBMK Autoloader container.rbmkBoiler=RBMK Steam Channel container.rbmkControl=RBMK Control Rods container.rbmkControlAuto=RBMK Automatic Control Rods @@ -5877,6 +5878,7 @@ tile.rail_large_switch_flipped.name=Standard Gauge Switch Rail (15m, Right) tile.rail_narrow.name=Narrow Gauge Cart Rail tile.rail_wood.name=Wooden Tracks tile.rbmk_absorber.name=RBMK Boron Neutron Absorber +tile.rbmk_autoloader.name=RBMK Autoloader tile.rbmk_blank.name=RBMK Structural Column tile.rbmk_boiler.name=RBMK Steam Channel tile.rbmk_console.name=RBMK Console diff --git a/src/main/resources/assets/hbm/models/rbmk/autoloader.obj b/src/main/resources/assets/hbm/models/rbmk/autoloader.obj new file mode 100644 index 000000000..4b1dea3a7 --- /dev/null +++ b/src/main/resources/assets/hbm/models/rbmk/autoloader.obj @@ -0,0 +1,1029 @@ +# Blender v2.79 (sub 0) OBJ File: 'autoloader.blend' +# www.blender.org +o Piston +v 0.062500 0.000000 0.312500 +v 0.062500 0.000000 0.187500 +v 0.187500 0.000000 0.062500 +v 0.187500 0.000000 0.437500 +v 0.312500 0.000000 0.437500 +v 0.312500 0.000000 0.062500 +v 0.437500 0.000000 0.187500 +v 0.437500 0.000000 0.312500 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v 0.062500 0.500000 0.312500 +v 0.062500 0.500000 0.187500 +v 0.187500 0.500000 0.062500 +v 0.187500 0.500000 0.437500 +v 0.312500 0.500000 0.437500 +v 0.312500 0.500000 0.062500 +v 0.437500 0.500000 0.187500 +v 0.437500 0.500000 0.312500 +v 0.062500 0.000000 -0.187500 +v 0.062500 0.000000 -0.312500 +v 0.187500 0.000000 -0.437500 +v 0.187500 0.000000 -0.062500 +v 0.312500 0.000000 -0.062500 +v 0.312500 0.000000 -0.437500 +v 0.437500 0.000000 -0.312500 +v 0.437500 0.000000 -0.187500 +v 0.062500 0.500000 -0.187500 +v 0.062500 0.500000 -0.312500 +v 0.187500 0.500000 -0.437500 +v 0.187500 0.500000 -0.062500 +v 0.312500 0.500000 -0.062500 +v 0.312500 0.500000 -0.437500 +v 0.437500 0.500000 -0.312500 +v 0.437500 0.500000 -0.187500 +v -0.437500 0.000000 0.312500 +v -0.437500 0.000000 0.187500 +v -0.312500 0.000000 0.062500 +v -0.312500 0.000000 0.437500 +v -0.187500 0.000000 0.437500 +v -0.187500 0.000000 0.062500 +v -0.062500 0.000000 0.187500 +v -0.062500 0.000000 0.312500 +v -0.437500 0.500000 0.312500 +v -0.437500 0.500000 0.187500 +v -0.312500 0.500000 0.062500 +v -0.312500 0.500000 0.437500 +v -0.187500 0.500000 0.437500 +v -0.187500 0.500000 0.062500 +v -0.062500 0.500000 0.187500 +v -0.062500 0.500000 0.312500 +v -0.437500 0.000000 -0.187500 +v -0.437500 0.000000 -0.312500 +v -0.312500 0.000000 -0.437500 +v -0.312500 0.000000 -0.062500 +v -0.187500 0.000000 -0.062500 +v -0.187500 0.000000 -0.437500 +v -0.062500 0.000000 -0.312500 +v -0.062500 0.000000 -0.187500 +v -0.437500 0.500000 -0.187500 +v -0.437500 0.500000 -0.312500 +v -0.312500 0.500000 -0.437500 +v -0.312500 0.500000 -0.062500 +v -0.187500 0.500000 -0.062500 +v -0.187500 0.500000 -0.437500 +v -0.062500 0.500000 -0.312500 +v -0.062500 0.500000 -0.187500 +v 0.500000 0.000000 -0.500000 +v -0.500000 0.000000 -0.500000 +v 0.500000 0.000000 0.500000 +v -0.500000 0.000000 0.500000 +v 0.375000 0.750000 -0.375000 +v -0.375000 0.750000 -0.375000 +v 0.375000 0.750000 0.375000 +v -0.375000 0.750000 0.375000 +v 0.375000 4.500000 -0.375000 +v -0.375000 4.500000 -0.375000 +v 0.375000 4.500000 0.375000 +v -0.375000 4.500000 0.375000 +v 0.437500 4.500000 0.187500 +v 0.437500 4.500000 0.312500 +v 0.437500 0.500000 0.187500 +v 0.437500 0.500000 0.312500 +v 0.375000 4.500000 -0.312500 +v 0.375000 4.500000 -0.187500 +v 0.375000 0.500000 -0.312500 +v 0.375000 0.500000 -0.187500 +v 0.437500 4.500000 -0.312500 +v 0.437500 4.500000 -0.187500 +v 0.437500 0.500000 -0.312500 +v 0.437500 0.500000 -0.187500 +v 0.375000 0.500000 0.312500 +v 0.375000 0.500000 0.187500 +v 0.375000 4.500000 0.312500 +v 0.375000 4.500000 0.187500 +v -0.437500 4.500000 -0.187500 +v -0.437500 4.500000 -0.312500 +v -0.437500 0.500000 -0.187500 +v -0.437500 0.500000 -0.312500 +v -0.375000 4.500000 0.312500 +v -0.375000 4.500000 0.187500 +v -0.375000 0.500000 0.312500 +v -0.375000 0.500000 0.187500 +v -0.437500 4.500000 0.312500 +v -0.437500 4.500000 0.187500 +v -0.437500 0.500000 0.312500 +v -0.437500 0.500000 0.187500 +v -0.375000 0.500000 -0.312500 +v -0.375000 0.500000 -0.187500 +v -0.375000 4.500000 -0.312500 +v -0.375000 4.500000 -0.187500 +v 0.187500 4.500000 -0.437500 +v 0.312500 4.500000 -0.437500 +v 0.187500 0.500000 -0.437500 +v 0.312500 0.500000 -0.437500 +v -0.312500 4.500000 -0.375000 +v -0.187500 4.500000 -0.375000 +v -0.312500 0.500000 -0.375000 +v -0.187500 0.500000 -0.375000 +v -0.312500 4.500000 -0.437500 +v -0.187500 4.500000 -0.437500 +v -0.312500 0.500000 -0.437500 +v -0.187500 0.500000 -0.437500 +v 0.312500 0.500000 -0.375000 +v 0.187500 0.500000 -0.375000 +v 0.312500 4.500000 -0.375000 +v 0.187500 4.500000 -0.375000 +v -0.187500 4.500000 0.437500 +v -0.312500 4.500000 0.437500 +v -0.187500 0.500000 0.437500 +v -0.312500 0.500000 0.437500 +v 0.312500 4.500000 0.375000 +v 0.187500 4.500000 0.375000 +v 0.312500 0.500000 0.375000 +v 0.187500 0.500000 0.375000 +v 0.312500 4.500000 0.437500 +v 0.187500 4.500000 0.437500 +v 0.312500 0.500000 0.437500 +v 0.187500 0.500000 0.437500 +v -0.312500 0.500000 0.375000 +v -0.187500 0.500000 0.375000 +v -0.312500 4.500000 0.375000 +v -0.187500 4.500000 0.375000 +vt 0.736842 0.150943 +vt 0.631579 0.226415 +vt 0.631579 0.150943 +vt 0.611842 0.009434 +vt 0.631579 0.000000 +vt 0.625000 0.028302 +vt 0.559211 0.141509 +vt 0.598684 0.141509 +vt 0.546053 0.141509 +vt 0.526316 0.150943 +vt 0.532895 0.122642 +vt 0.710526 0.000000 +vt 0.697368 0.075472 +vt 0.697368 0.000000 +vt 0.684211 0.075472 +vt 0.684211 0.000000 +vt 0.671053 0.075472 +vt 0.657895 0.000000 +vt 0.671053 0.000000 +vt 0.736842 0.000000 +vt 0.723684 0.075472 +vt 0.723684 0.000000 +vt 0.644737 0.000000 +vt 0.631579 0.075472 +vt 0.631579 0.000000 +vt 0.710526 0.075472 +vt 0.657895 0.075472 +vt 0.657895 0.132075 +vt 0.631579 0.113208 +vt 0.644737 0.075472 +vt 0.710526 0.000000 +vt 0.697368 0.075472 +vt 0.697368 0.000000 +vt 0.684211 0.075472 +vt 0.684211 0.000000 +vt 0.671053 0.075472 +vt 0.657895 0.000000 +vt 0.671053 0.000000 +vt 0.736842 0.000000 +vt 0.723684 0.075472 +vt 0.723684 0.000000 +vt 0.644737 0.000000 +vt 0.631579 0.075472 +vt 0.631579 0.000000 +vt 0.710526 0.075472 +vt 0.657895 0.075472 +vt 0.657895 0.132075 +vt 0.631579 0.113208 +vt 0.644737 0.075472 +vt 0.710526 0.000000 +vt 0.697368 0.075472 +vt 0.697368 0.000000 +vt 0.684211 0.075472 +vt 0.684211 0.000000 +vt 0.671053 0.075472 +vt 0.657895 0.000000 +vt 0.671053 0.000000 +vt 0.736842 0.000000 +vt 0.723684 0.075472 +vt 0.723684 0.000000 +vt 0.644737 0.000000 +vt 0.631579 0.075472 +vt 0.631579 0.000000 +vt 0.710526 0.075472 +vt 0.657895 0.075472 +vt 0.657895 0.132075 +vt 0.631579 0.113208 +vt 0.644737 0.075472 +vt 0.710526 0.000000 +vt 0.697368 0.075472 +vt 0.697368 0.000000 +vt 0.684211 0.075472 +vt 0.684211 0.000000 +vt 0.671053 0.075472 +vt 0.657895 0.000000 +vt 0.671053 0.000000 +vt 0.736842 0.000000 +vt 0.723684 0.075472 +vt 0.723684 0.000000 +vt 0.644737 0.000000 +vt 0.631579 0.075472 +vt 0.631579 0.000000 +vt 0.710526 0.075472 +vt 0.657895 0.075472 +vt 0.657895 0.132075 +vt 0.631579 0.113208 +vt 0.644737 0.075472 +vt 0.546053 0.084906 +vt 0.559211 0.066038 +vt 0.559211 0.084906 +vt 0.572368 0.103774 +vt 0.585526 0.122642 +vt 0.572368 0.122642 +vt 0.598684 0.084906 +vt 0.611842 0.066038 +vt 0.611842 0.084906 +vt 0.572368 0.028302 +vt 0.585526 0.047170 +vt 0.572368 0.047170 +vt 0.598684 0.066038 +vt 0.585526 0.103774 +vt 0.559211 0.009434 +vt 0.585526 0.028302 +vt 0.532895 0.103774 +vt 0.546053 0.066038 +vt 0.625000 0.047170 +vt 0.625000 0.103774 +vt 0.532895 0.028302 +vt 0.526316 0.000000 +vt 0.546053 0.009434 +vt 0.625000 0.122642 +vt 0.611842 0.141509 +vt 0.532895 0.047170 +vt 0.598684 0.009434 +vt 0.842105 0.150943 +vt 0.736842 0.226415 +vt 0.526316 0.226415 +vt 0.421053 0.226415 +vt 0.421053 0.150943 +vt 0.539474 0.264151 +vt 0.434211 0.264151 +vt 0.842105 0.226415 +vt 0.750000 0.264151 +vt 0.644737 0.264151 +vt 0.723684 0.264151 +vt 0.644737 0.830189 +vt 0.513158 0.264151 +vt 0.434211 0.830189 +vt 0.828947 0.264151 +vt 0.750000 0.830189 +vt 0.618421 0.264151 +vt 0.539474 0.830189 +vt 0.993421 0.603774 +vt 0.980263 0.000000 +vt 0.993421 0.000000 +vt 0.993421 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 0.980263 0.000000 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.000000 +vt 0.993421 0.000000 +vt 0.993421 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 0.980263 0.000000 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.000000 +vt 0.993421 0.000000 +vt 0.993421 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 0.980263 0.000000 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.000000 +vt 0.993421 0.000000 +vt 0.993421 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 0.980263 0.000000 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 1.000000 0.603774 +vt 0.736842 0.075472 +vt 0.671053 0.094340 +vt 0.671053 0.113208 +vt 0.644737 0.132075 +vt 0.631579 0.094340 +vt 0.736842 0.075472 +vt 0.671053 0.094340 +vt 0.671053 0.113208 +vt 0.644737 0.132075 +vt 0.631579 0.094340 +vt 0.736842 0.075472 +vt 0.671053 0.094340 +vt 0.671053 0.113208 +vt 0.644737 0.132075 +vt 0.631579 0.094340 +vt 0.736842 0.075472 +vt 0.671053 0.094340 +vt 0.671053 0.113208 +vt 0.644737 0.132075 +vt 0.631579 0.094340 +vt 0.723684 0.830189 +vt 0.513158 0.830189 +vt 0.828947 0.830189 +vt 0.618421 0.830189 +vt 1.000000 0.000000 +vt 0.973684 0.603774 +vt 0.973684 0.603774 +vt 1.000000 0.000000 +vt 1.000000 0.000000 +vt 0.973684 0.603774 +vt 0.973684 0.603774 +vt 1.000000 0.000000 +vt 1.000000 0.000000 +vt 0.973684 0.603774 +vt 0.973684 0.603774 +vt 1.000000 0.000000 +vt 1.000000 0.000000 +vt 0.973684 0.603774 +vt 0.973684 0.603774 +vt 1.000000 0.000000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn -0.8944 0.4472 0.0000 +vn 0.0000 0.4472 -0.8944 +s off +f 70/1/1 12/2/1 69/3/1 +f 54/4/2 70/5/2 55/6/2 +f 7/7/2 28/8/2 69/3/2 +f 8/9/2 71/10/2 5/11/2 +f 8/12/3 19/13/3 7/14/3 +f 7/14/4 18/15/4 6/16/4 +f 15/17/5 2/18/5 3/19/5 +f 4/20/1 17/21/1 5/22/1 +f 1/23/6 16/24/6 4/25/6 +f 5/22/7 20/26/7 8/12/7 +f 6/16/8 15/17/8 3/19/8 +f 14/27/9 1/23/9 2/18/9 +f 19/28/2 17/29/2 13/30/2 +f 28/31/3 35/32/3 27/33/3 +f 27/33/4 34/34/4 26/35/4 +f 31/36/5 22/37/5 23/38/5 +f 24/39/1 33/40/1 25/41/1 +f 21/42/6 32/43/6 24/44/6 +f 25/41/7 36/45/7 28/31/7 +f 26/35/8 31/36/8 23/38/8 +f 30/46/9 21/42/9 22/37/9 +f 35/47/2 33/48/2 29/49/2 +f 44/50/3 51/51/3 43/52/3 +f 43/52/4 50/53/4 42/54/4 +f 47/55/5 38/56/5 39/57/5 +f 40/58/1 49/59/1 41/60/1 +f 37/61/6 48/62/6 40/63/6 +f 41/60/7 52/64/7 44/50/7 +f 42/54/8 47/55/8 39/57/8 +f 46/65/9 37/61/9 38/56/9 +f 51/66/2 49/67/2 45/68/2 +f 60/69/3 67/70/3 59/71/3 +f 59/71/4 66/72/4 58/73/4 +f 63/74/5 54/75/5 55/76/5 +f 56/77/1 65/78/1 57/79/1 +f 53/80/6 64/81/6 56/82/6 +f 57/79/7 68/83/7 60/69/7 +f 58/73/8 63/74/8 55/76/8 +f 62/84/9 53/80/9 54/75/9 +f 67/85/2 65/86/2 61/87/2 +f 1/88/2 43/89/2 2/90/2 +f 3/91/2 25/92/2 6/93/2 +f 21/94/2 59/95/2 22/96/2 +f 39/97/2 57/98/2 42/99/2 +f 42/99/2 60/100/2 24/101/2 +f 38/102/2 56/103/2 39/97/2 +f 4/104/2 44/105/2 1/88/2 +f 6/93/2 28/8/2 7/7/2 +f 22/96/2 58/106/2 23/107/2 +f 40/108/2 72/109/2 37/110/2 +f 26/111/2 69/3/2 27/112/2 +f 23/107/2 58/106/2 70/5/2 +f 41/113/2 4/104/2 71/10/2 +f 53/114/2 38/102/2 72/109/2 +f 72/115/3 11/116/3 70/1/3 +f 69/3/9 10/117/9 71/10/9 +f 71/10/8 9/118/8 72/119/8 +f 12/2/10 75/120/10 10/117/10 +f 10/117/11 76/121/11 9/118/11 +f 9/122/12 74/123/12 11/116/12 +f 11/116/13 73/124/13 12/2/13 +f 74/125/1 77/126/1 73/124/1 +f 75/127/8 80/128/8 76/121/8 +f 76/129/3 78/130/3 74/123/3 +f 73/131/9 79/132/9 75/120/9 +f 81/133/9 84/134/9 83/135/9 +f 91/136/1 85/137/1 89/138/1 +f 90/139/8 88/140/8 92/141/8 +f 89/138/9 92/141/9 91/136/9 +f 82/142/8 93/143/8 84/134/8 +f 83/135/1 96/144/1 81/133/1 +f 97/145/3 100/146/3 99/147/3 +f 107/148/8 101/149/8 105/150/8 +f 106/151/1 104/152/1 108/153/1 +f 105/150/3 108/153/3 107/148/3 +f 98/154/1 109/155/1 100/146/1 +f 99/147/8 112/156/8 97/145/8 +f 113/157/1 116/158/1 115/159/1 +f 123/160/3 117/161/3 121/162/3 +f 122/163/9 120/164/9 124/165/9 +f 121/162/1 124/165/1 123/160/1 +f 114/166/9 125/167/9 116/158/9 +f 115/159/3 128/168/3 113/157/3 +f 129/169/8 132/170/8 131/171/8 +f 139/172/9 133/173/9 137/174/9 +f 138/175/3 136/176/3 140/177/3 +f 137/174/8 140/177/8 139/172/8 +f 130/178/3 141/179/3 132/170/3 +f 131/171/9 144/180/9 129/169/9 +f 70/1/1 11/116/1 12/2/1 +f 28/8/2 27/112/2 69/3/2 +f 69/3/2 71/10/2 7/7/2 +f 71/10/2 8/9/2 7/7/2 +f 8/12/3 20/26/3 19/13/3 +f 7/14/4 19/13/4 18/15/4 +f 15/17/5 14/27/5 2/18/5 +f 4/20/1 16/181/1 17/21/1 +f 1/23/6 13/30/6 16/24/6 +f 5/22/7 17/21/7 20/26/7 +f 6/16/8 18/15/8 15/17/8 +f 14/27/9 13/30/9 1/23/9 +f 13/30/2 14/27/2 15/182/2 +f 15/182/2 18/183/2 19/28/2 +f 19/28/2 20/184/2 17/29/2 +f 17/29/2 16/185/2 13/30/2 +f 13/30/2 15/182/2 19/28/2 +f 28/31/3 36/45/3 35/32/3 +f 27/33/4 35/32/4 34/34/4 +f 31/36/5 30/46/5 22/37/5 +f 24/39/1 32/186/1 33/40/1 +f 21/42/6 29/49/6 32/43/6 +f 25/41/7 33/40/7 36/45/7 +f 26/35/8 34/34/8 31/36/8 +f 30/46/9 29/49/9 21/42/9 +f 29/49/2 30/46/2 31/187/2 +f 31/187/2 34/188/2 35/47/2 +f 35/47/2 36/189/2 33/48/2 +f 33/48/2 32/190/2 29/49/2 +f 29/49/2 31/187/2 35/47/2 +f 44/50/3 52/64/3 51/51/3 +f 43/52/4 51/51/4 50/53/4 +f 47/55/5 46/65/5 38/56/5 +f 40/58/1 48/191/1 49/59/1 +f 37/61/6 45/68/6 48/62/6 +f 41/60/7 49/59/7 52/64/7 +f 42/54/8 50/53/8 47/55/8 +f 46/65/9 45/68/9 37/61/9 +f 45/68/2 46/65/2 47/192/2 +f 47/192/2 50/193/2 51/66/2 +f 51/66/2 52/194/2 49/67/2 +f 49/67/2 48/195/2 45/68/2 +f 45/68/2 47/192/2 51/66/2 +f 60/69/3 68/83/3 67/70/3 +f 59/71/4 67/70/4 66/72/4 +f 63/74/5 62/84/5 54/75/5 +f 56/77/1 64/196/1 65/78/1 +f 53/80/6 61/87/6 64/81/6 +f 57/79/7 65/78/7 68/83/7 +f 58/73/8 66/72/8 63/74/8 +f 62/84/9 61/87/9 53/80/9 +f 61/87/2 62/84/2 63/197/2 +f 63/197/2 66/198/2 67/85/2 +f 67/85/2 68/199/2 65/86/2 +f 65/86/2 64/200/2 61/87/2 +f 61/87/2 63/197/2 67/85/2 +f 1/88/2 44/105/2 43/89/2 +f 3/91/2 24/101/2 25/92/2 +f 21/94/2 60/100/2 59/95/2 +f 39/97/2 56/103/2 57/98/2 +f 24/101/2 3/91/2 2/90/2 +f 2/90/2 43/89/2 42/99/2 +f 42/99/2 57/98/2 60/100/2 +f 60/100/2 21/94/2 24/101/2 +f 24/101/2 2/90/2 42/99/2 +f 38/102/2 53/114/2 56/103/2 +f 4/104/2 41/113/2 44/105/2 +f 6/93/2 25/92/2 28/8/2 +f 22/96/2 59/95/2 58/106/2 +f 58/106/2 55/6/2 70/5/2 +f 70/5/2 69/3/2 23/107/2 +f 69/3/2 26/111/2 23/107/2 +f 4/104/2 5/11/2 71/10/2 +f 71/10/2 72/109/2 41/113/2 +f 72/109/2 40/108/2 41/113/2 +f 38/102/2 37/110/2 72/109/2 +f 72/109/2 70/5/2 53/114/2 +f 70/5/2 54/4/2 53/114/2 +f 72/115/3 9/122/3 11/116/3 +f 69/3/9 12/2/9 10/117/9 +f 71/10/8 10/117/8 9/118/8 +f 12/2/10 73/131/10 75/120/10 +f 10/117/11 75/127/11 76/121/11 +f 9/122/12 76/129/12 74/123/12 +f 11/116/13 74/125/13 73/124/13 +f 74/125/1 78/201/1 77/126/1 +f 75/127/8 79/202/8 80/128/8 +f 76/129/3 80/203/3 78/130/3 +f 73/131/9 77/204/9 79/132/9 +f 81/133/9 82/142/9 84/134/9 +f 91/136/1 87/205/1 85/137/1 +f 90/139/8 86/206/8 88/140/8 +f 89/138/9 90/139/9 92/141/9 +f 82/142/8 95/207/8 93/143/8 +f 83/135/1 94/208/1 96/144/1 +f 97/145/3 98/154/3 100/146/3 +f 107/148/8 103/209/8 101/149/8 +f 106/151/1 102/210/1 104/152/1 +f 105/150/3 106/151/3 108/153/3 +f 98/154/1 111/211/1 109/155/1 +f 99/147/8 110/212/8 112/156/8 +f 113/157/1 114/166/1 116/158/1 +f 123/160/3 119/213/3 117/161/3 +f 122/163/9 118/214/9 120/164/9 +f 121/162/1 122/163/1 124/165/1 +f 114/166/9 127/215/9 125/167/9 +f 115/159/3 126/216/3 128/168/3 +f 129/169/8 130/178/8 132/170/8 +f 139/172/9 135/217/9 133/173/9 +f 138/175/3 134/218/3 136/176/3 +f 137/174/8 138/175/8 140/177/8 +f 130/178/3 143/219/3 141/179/3 +f 131/171/9 142/220/9 144/180/9 +o Base +v -0.500000 4.500000 0.500000 +v 0.500000 4.500000 0.500000 +v -0.500000 4.500000 -0.500000 +v 0.500000 4.500000 -0.500000 +v -0.437500 8.000000 0.437500 +v 0.437500 8.000000 0.437500 +v -0.437500 8.000000 -0.437500 +v 0.437500 8.000000 -0.437500 +v -0.125000 0.000000 0.125000 +v 0.125000 0.000000 0.125000 +v -0.125000 0.000000 -0.125000 +v 0.125000 0.000000 -0.125000 +v -0.125000 4.500000 -0.125000 +v -0.125000 4.500000 0.125000 +v 0.125000 4.500000 0.125000 +v 0.125000 4.500000 -0.125000 +v -0.500000 7.750000 -0.500000 +v -0.500000 7.750000 0.500000 +v 0.500000 7.750000 0.500000 +v 0.500000 7.750000 -0.500000 +v 0.437500 7.500000 -0.437500 +v -0.437500 7.500000 -0.437500 +v 0.437500 7.500000 0.437500 +v -0.437500 7.500000 0.437500 +v -0.500000 4.750000 -0.500000 +v -0.500000 4.750000 0.500000 +v 0.500000 4.750000 0.500000 +v 0.500000 4.750000 -0.500000 +v -0.437500 5.000000 -0.437500 +v -0.437500 5.000000 0.437500 +v 0.437500 5.000000 0.437500 +v 0.437500 5.000000 -0.437500 +v -0.500000 9.000000 0.500000 +v 0.500000 9.000000 0.500000 +v -0.500000 9.000000 -0.500000 +v 0.500000 9.000000 -0.500000 +v -0.437500 8.750000 -0.437500 +v -0.437500 8.750000 0.437500 +v 0.437500 8.750000 0.437500 +v 0.437500 8.750000 -0.437500 +v -0.500000 8.000000 -0.500000 +v -0.500000 8.000000 0.500000 +v 0.500000 8.000000 0.500000 +v 0.500000 8.000000 -0.500000 +v -0.500000 8.750000 -0.500000 +v -0.500000 8.750000 0.500000 +v 0.500000 8.750000 0.500000 +v 0.500000 8.750000 -0.500000 +v -0.500000 8.125000 -0.500000 +v -0.500000 8.125000 0.500000 +v 0.500000 8.125000 0.500000 +v 0.500000 8.125000 -0.500000 +v -0.500000 8.625000 -0.500000 +v -0.500000 8.625000 0.500000 +v 0.500000 8.625000 0.500000 +v 0.500000 8.625000 -0.500000 +v 0.500000 4.750000 -0.187500 +v 0.500000 4.750000 -0.312500 +v 0.500000 7.750000 -0.187500 +v 0.500000 7.750000 -0.312500 +v 0.437500 4.750000 -0.187500 +v 0.437500 4.750000 -0.312500 +v 0.437500 7.750000 -0.187500 +v 0.437500 7.750000 -0.312500 +v 0.500000 4.750000 0.312500 +v 0.500000 4.750000 0.187500 +v 0.500000 7.750000 0.312500 +v 0.500000 7.750000 0.187500 +v 0.437500 4.750000 0.312500 +v 0.437500 4.750000 0.187500 +v 0.437500 7.750000 0.312500 +v 0.437500 7.750000 0.187500 +v -0.500000 4.750000 0.187500 +v -0.500000 4.750000 0.312500 +v -0.500000 7.750000 0.187500 +v -0.500000 7.750000 0.312500 +v -0.437500 4.750000 0.187500 +v -0.437500 4.750000 0.312500 +v -0.437500 7.750000 0.187500 +v -0.437500 7.750000 0.312500 +v -0.500000 4.750000 -0.312500 +v -0.500000 4.750000 -0.187500 +v -0.500000 7.750000 -0.312500 +v -0.500000 7.750000 -0.187500 +v -0.437500 4.750000 -0.312500 +v -0.437500 4.750000 -0.187500 +v -0.437500 7.750000 -0.312500 +v -0.437500 7.750000 -0.187500 +v -0.187500 4.750000 -0.500000 +v -0.312500 4.750000 -0.500000 +v -0.187500 7.750000 -0.500000 +v -0.312500 7.750000 -0.500000 +v -0.187500 4.750000 -0.437500 +v -0.312500 4.750000 -0.437500 +v -0.187500 7.750000 -0.437500 +v -0.312500 7.750000 -0.437500 +v 0.312500 4.750000 -0.500000 +v 0.187500 4.750000 -0.500000 +v 0.312500 7.750000 -0.500000 +v 0.187500 7.750000 -0.500000 +v 0.312500 4.750000 -0.437500 +v 0.187500 4.750000 -0.437500 +v 0.312500 7.750000 -0.437500 +v 0.187500 7.750000 -0.437500 +v 0.187500 4.750000 0.500000 +v 0.312500 4.750000 0.500000 +v 0.187500 7.750000 0.500000 +v 0.312500 7.750000 0.500000 +v 0.187500 4.750000 0.437500 +v 0.312500 4.750000 0.437500 +v 0.187500 7.750000 0.437500 +v 0.312500 7.750000 0.437500 +v -0.312500 4.750000 0.500000 +v -0.187500 4.750000 0.500000 +v -0.312500 7.750000 0.500000 +v -0.187500 7.750000 0.500000 +v -0.312500 4.750000 0.437500 +v -0.187500 4.750000 0.437500 +v -0.312500 7.750000 0.437500 +v -0.187500 7.750000 0.437500 +vt 0.210526 -0.000000 +vt 0.105263 0.150943 +vt 0.105263 0.000000 +vt 0.315789 0.707547 +vt 0.217105 0.688679 +vt 0.309211 0.688679 +vt 0.105263 0.679245 +vt 0.210526 0.641509 +vt 0.210526 0.679245 +vt -0.000000 0.641509 +vt 0.098684 0.603774 +vt 0.105263 0.641509 +vt 0.315789 0.679245 +vt 0.421053 0.641509 +vt 0.421053 0.679245 +vt -0.000000 0.679245 +vt 0.894737 0.000000 +vt 0.868421 0.037736 +vt 0.868421 0.000000 +vt 0.842105 0.716981 +vt 0.842105 0.037736 +vt 0.894737 0.037736 +vt 0.868421 0.716981 +vt 0.947368 0.037736 +vt 0.921053 0.716981 +vt 0.921053 0.037736 +vt 0.894737 0.716981 +vt 0.315789 0.641509 +vt 0.309211 0.603774 +vt 0.414474 0.603774 +vt 0.203947 0.603774 +vt 0.105263 0.188679 +vt 0.006579 0.226415 +vt 0.000000 0.188679 +vt 0.315789 0.150943 +vt 0.210526 0.188679 +vt 0.210526 0.150943 +vt 0.000000 0.150943 +vt 0.421053 0.150943 +vt 0.315789 0.188679 +vt 0.111842 0.226415 +vt 0.421053 0.188679 +vt 0.322368 0.226415 +vt 0.217105 0.226415 +vt 0.322368 0.603774 +vt 0.414474 0.226415 +vt 0.217105 0.603774 +vt 0.309211 0.226415 +vt 0.111842 0.603774 +vt 0.203947 0.226415 +vt 0.006579 0.603774 +vt 0.098684 0.226415 +vt 0.105263 0.849057 +vt 0.210526 1.000000 +vt 0.105263 1.000000 +vt 0.421053 0.707547 +vt 0.322368 0.688679 +vt 0.414474 0.688679 +vt 0.210526 0.849057 +vt 0.315789 0.811321 +vt 0.315789 0.849057 +vt -0.000000 0.849057 +vt 0.105263 0.811321 +vt 0.210526 0.811321 +vt 0.421053 0.811321 +vt 0.421053 0.849057 +vt 0.006579 0.688679 +vt 0.098684 0.688679 +vt 0.111842 0.688679 +vt 0.203947 0.688679 +vt 0.414474 0.801887 +vt 0.322368 0.801887 +vt 0.098684 0.801887 +vt -0.000000 0.811321 +vt 0.006579 0.801887 +vt 0.203947 0.801887 +vt 0.111842 0.801887 +vt 0.309211 0.801887 +vt 0.217105 0.801887 +vt 0.210526 0.707547 +vt 0.105263 0.707547 +vt 0.421053 0.783019 +vt 0.105263 0.783019 +vt 0.210526 0.783019 +vt 0.315789 0.783019 +vt 0.000000 0.707547 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.947368 0.716981 +vt 0.000000 0.783019 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.4472 -0.8944 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.2425 0.9701 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.2425 -0.9701 +vn -0.9701 -0.2425 0.0000 +vn 0.9701 -0.2425 0.0000 +vn 0.0000 0.2425 0.9701 +vn 0.9701 0.2425 0.0000 +vn -0.9701 0.2425 0.0000 +vn 0.0000 0.2425 -0.9701 +vn 0.0000 1.0000 0.0000 +vn -0.8944 -0.4472 0.0000 +vn 0.8944 -0.4472 0.0000 +vn 0.0000 -0.4472 0.8944 +vn -0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 -0.8944 +s off +f 147/221/14 146/222/14 145/223/14 +f 193/224/15 152/225/15 151/226/15 +f 187/227/16 164/228/16 188/229/16 +f 162/230/17 167/231/17 163/232/17 +f 185/233/18 162/234/18 186/235/18 +f 186/236/19 163/232/19 187/227/19 +f 155/237/14 154/238/14 153/239/14 +f 154/238/19 158/240/19 153/241/19 +f 156/242/16 159/243/16 154/238/16 +f 153/244/18 157/245/18 155/246/18 +f 155/246/20 160/247/20 156/242/20 +f 188/229/20 161/248/20 185/233/20 +f 164/228/21 166/249/21 161/248/21 +f 161/248/22 168/250/22 162/234/22 +f 163/232/23 165/251/23 164/228/23 +f 171/252/24 174/253/24 170/254/24 +f 147/255/20 172/256/20 148/257/20 +f 146/222/19 170/254/19 145/258/19 +f 148/257/16 171/252/16 146/222/16 +f 145/259/18 169/260/18 147/255/18 +f 172/256/25 175/261/25 171/252/25 +f 170/262/26 173/263/26 169/260/26 +f 169/260/27 176/264/27 172/256/27 +f 166/265/18 174/266/18 168/250/18 +f 165/267/20 173/268/20 166/249/20 +f 167/269/16 176/270/16 165/251/16 +f 168/271/19 175/272/19 167/231/19 +f 178/273/28 179/274/28 177/275/28 +f 194/276/29 151/277/29 149/278/29 +f 180/279/20 189/280/20 179/281/20 +f 177/282/19 191/283/19 178/273/19 +f 178/273/16 192/284/16 180/279/16 +f 179/281/18 190/285/18 177/286/18 +f 151/277/28 186/235/28 149/278/28 +f 149/287/28 187/227/28 150/288/28 +f 150/289/28 188/229/28 152/290/28 +f 152/225/28 185/233/28 151/226/28 +f 182/291/14 189/280/14 181/292/14 +f 183/293/14 190/294/14 182/295/14 +f 184/296/14 191/283/14 183/297/14 +f 181/298/14 192/284/14 184/299/14 +f 196/300/30 150/289/30 152/290/30 +f 195/301/31 149/287/31 150/288/31 +f 181/292/32 198/302/32 182/291/32 +f 182/295/33 199/303/33 183/293/33 +f 183/297/34 200/304/34 184/296/34 +f 184/299/35 197/305/35 181/298/35 +f 198/302/18 193/224/18 194/276/18 +f 199/303/19 194/306/19 195/301/19 +f 200/304/16 195/301/16 196/300/16 +f 197/305/20 196/300/20 193/224/20 +f 204/307/16 201/308/16 202/309/16 +f 203/310/19 205/311/19 201/308/19 +f 202/309/20 208/312/20 204/307/20 +f 212/313/16 209/314/16 210/315/16 +f 211/316/19 213/317/19 209/314/19 +f 210/315/20 216/318/20 212/313/20 +f 220/319/18 217/320/18 218/321/18 +f 219/322/20 221/323/20 217/320/20 +f 218/321/19 224/324/19 220/319/19 +f 228/325/18 225/326/18 226/327/18 +f 227/328/20 229/329/20 225/326/20 +f 226/327/19 232/330/19 228/325/19 +f 236/331/20 233/332/20 234/333/20 +f 235/334/16 237/335/16 233/332/16 +f 234/333/18 240/336/18 236/331/18 +f 244/337/20 241/338/20 242/339/20 +f 243/340/16 245/341/16 241/338/16 +f 242/339/18 248/342/18 244/337/18 +f 252/343/19 249/344/19 250/345/19 +f 251/346/18 253/347/18 249/344/18 +f 250/345/16 256/348/16 252/343/16 +f 260/349/19 257/350/19 258/351/19 +f 259/352/18 261/353/18 257/350/18 +f 258/351/16 264/354/16 260/349/16 +f 147/221/14 148/257/14 146/222/14 +f 193/224/15 196/300/15 152/225/15 +f 187/227/16 163/232/16 164/228/16 +f 162/230/17 168/271/17 167/231/17 +f 185/233/18 161/248/18 162/234/18 +f 186/236/19 162/230/19 163/232/19 +f 155/237/14 156/242/14 154/238/14 +f 154/238/19 159/243/19 158/240/19 +f 156/242/16 160/247/16 159/243/16 +f 153/244/18 158/355/18 157/245/18 +f 155/246/20 157/245/20 160/247/20 +f 188/229/20 164/228/20 161/248/20 +f 164/228/21 165/267/21 166/249/21 +f 161/248/22 166/265/22 168/250/22 +f 163/232/23 167/269/23 165/251/23 +f 171/252/24 175/272/24 174/253/24 +f 147/255/20 169/260/20 172/256/20 +f 146/222/19 171/252/19 170/254/19 +f 148/257/16 172/256/16 171/252/16 +f 145/259/18 170/262/18 169/260/18 +f 172/256/25 176/270/25 175/261/25 +f 170/262/26 174/266/26 173/263/26 +f 169/260/27 173/268/27 176/264/27 +f 166/265/18 173/263/18 174/266/18 +f 165/267/20 176/264/20 173/268/20 +f 167/269/16 175/261/16 176/270/16 +f 168/271/19 174/253/19 175/272/19 +f 178/273/28 180/279/28 179/274/28 +f 194/276/29 193/224/29 151/277/29 +f 180/279/20 192/284/20 189/280/20 +f 177/282/19 190/294/19 191/283/19 +f 178/273/16 191/283/16 192/284/16 +f 179/281/18 189/280/18 190/285/18 +f 151/277/28 185/233/28 186/235/28 +f 149/287/28 186/236/28 187/227/28 +f 150/289/28 187/227/28 188/229/28 +f 152/225/28 188/229/28 185/233/28 +f 182/291/14 190/285/14 189/280/14 +f 183/293/14 191/283/14 190/294/14 +f 184/296/14 192/284/14 191/283/14 +f 181/298/14 189/280/14 192/284/14 +f 196/300/30 195/301/30 150/289/30 +f 195/301/31 194/306/31 149/287/31 +f 181/292/32 197/305/32 198/302/32 +f 182/295/33 198/356/33 199/303/33 +f 183/297/34 199/303/34 200/304/34 +f 184/299/35 200/304/35 197/305/35 +f 198/302/18 197/305/18 193/224/18 +f 199/303/19 198/356/19 194/306/19 +f 200/304/16 199/303/16 195/301/16 +f 197/305/20 200/304/20 196/300/20 +f 204/307/16 203/310/16 201/308/16 +f 203/310/19 207/357/19 205/311/19 +f 202/309/20 206/358/20 208/312/20 +f 212/313/16 211/316/16 209/314/16 +f 211/316/19 215/359/19 213/317/19 +f 210/315/20 214/360/20 216/318/20 +f 220/319/18 219/322/18 217/320/18 +f 219/322/20 223/361/20 221/323/20 +f 218/321/19 222/362/19 224/324/19 +f 228/325/18 227/328/18 225/326/18 +f 227/328/20 231/363/20 229/329/20 +f 226/327/19 230/364/19 232/330/19 +f 236/331/20 235/334/20 233/332/20 +f 235/334/16 239/365/16 237/335/16 +f 234/333/18 238/366/18 240/336/18 +f 244/337/20 243/340/20 241/338/20 +f 243/340/16 247/367/16 245/341/16 +f 242/339/18 246/368/18 248/342/18 +f 252/343/19 251/346/19 249/344/19 +f 251/346/18 255/369/18 253/347/18 +f 250/345/16 254/370/16 256/348/16 +f 260/349/19 259/352/19 257/350/19 +f 259/352/18 263/371/18 261/353/18 +f 258/351/16 262/372/16 264/354/16 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk_autoloader.png b/src/main/resources/assets/hbm/textures/blocks/rbmk_autoloader.png new file mode 100644 index 0000000000000000000000000000000000000000..84c7faeb761786a0c31b907c3e49d94e8f23c7e1 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf#%`9@aupR3lsx5Dm1^`|MWVNNwP+ON%Gdhoyv7fw=gwtO!-;z{Img&{vS?3 zM`nh{7GkU_ib~647PH4zpLThx=e1LS$wOXRLr}8h`=gy53+{iP$jI=eKRrzA<=aO_ z{(|!*87lok*%4Y>+s-(|+m`)PZ%&<;6Y}f!oo#jI7tXk6v~1SO>DhWl<>B7- h(lW-^3y$q&yuYPJaNoq>2%!HMJYD@<);T3K0RWAEZ%_aL literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/gui_arc.png b/src/main/resources/assets/hbm/textures/gui/gui_arc.png deleted file mode 100644 index b78524b439a4d95387f2c648710bcb3f0c1f1ac4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3054 zcmc&$do+~m8h>ZZVT`t0Qtpb}vJ+dHBqX=lF*XK~TPaF%%eV}4QM*LrHf~8#VQUy9 zMUC6El}MAqP$bGNgWL_naK6?)YwdIPT4(J)&L8Jp>s#-)*7H8U_4_@~`+L4G@fWPk z4=8yQ0N@9Vt)&wHFz6KqkiyXB8Ghd%+7K5lFgPT%;*h7W0U%b4u{?r{zBN6-4p!)u zYndB=opv<+QQ(P+E_Gzub8OnNvp-hC5y^Vy6Zf>J%(@6E79|q)u%}e`q3F=wa9B@G zj_)W+TE_aeZTjhEBei!L?9|mM3k|h{{9Oq$0b}cA%E`VepW8^1O8&usvA18{5-D-} zs+G+hw=||>Xm2-LMf|9b^boFYZW-2vI|q5A%nHw57dlS9v4Rtr&@&NX-1qTgca9I~ z+=V-tmJ4bDJv}{-o;FkCeqfaYI=IZC6%CjVrHz&|VLfPcT zv&|!snckbpGmUG(vcmv7{pR)|{#12G#LTA#OB&s^Ea{%@0aF3aQKoeUk26R&+1lo! zx-}tb_;~o?7bzv)XBP$J&5}Vq&u*di$~XxGV5gcuDX}xliKLii9ICD~M=hp8PxD)= ziz6Ubwo~r!h!y>h}0_3k zqRT+(m!gWd>)3^DHfP)nvOB;ncL{Lg*Jp=fK47}zn8nNqZcBMn;N6e!zL*71IzU|Z zGWC|m^T_W!=biFJN7SWY`zB$4-r(^(((Yb(o8#N_?FhZyn9(A$b-&Rf&D@7$c6Vr^ zqgvTj>+%#}es^WVyE)_>f?6|)Rnea zAKKi=q3Uxr&j_M<6~=EaG4B?t8vQI?R|!J`8S9dM=Z@5o=redc_OA3n&cb|Q{;Sc4 z%)8yFpSdqwR>Rz@6nAHbAf$m7qND8oyA`Xfr_4S*pZiLyItn&*dO}Ziv{Tfq!WTPv z98vf`63Z<2=74Htkmg#_l|CL5_}HVA!!6|m8YDr23w>(&(sCTN2EusMqqX%_s*PzZ z0)&SUiC&YFlibKU8qFbQDLZ;!mR23 zT4!>6aq(`iCemU2?XVHzI{HIjU*G%Md9S+2>F47pG_iII_oFP#60 zVUu?LiUh^Knx35e!()$fA$F6Gj1{UmbY*gNHO8gP<#6<@Zz)Vw3Qk|ma!*z5MX3PD zzm75!Ey)Uy+ZwzbQifacUUGh!>WN>_*~4gqmR257FxxD_jF{-mO-`4zJ((#-;j|MI zAZC_pru>Ny)d8sHU$TC-%8!~=!PfS>?6^8l^kMruht$ut61*t{79m!t84cRZ=2OS`b~1@ z*$sVagD^`x{xk+k>W^!jQF*_SS5V+4V>NFQf?g`H8a`&Y`96h-@D-cIF_55Rq5G^M zuH2OqT$^D3DY$mGz?j1$ZnBi(1GWhpl2K~`z);W%afG^@KThWaLL*eEPWVC7=REe9 z`_Otc>2sLYKV4etFbiTwL7kR}i7}X{p5b)_x!>mVm8C*v4|F zo|L>w;o}QTiKPbyoJe}FWf#9g>AW!&YP`v9e;#gI&LDC z*4YXR#T6FdkwGCL?O}>P>gwJfoH-v5V1uD)ZD~$VS$O54M7?(Oh%;ut(EGuujN{s7 zaGveB0V^_a1&THMjp)-4Ga$%G0dKH(dAUX> zE6M1?08q$>&KvKWAb2{=2)lm|mlhY0jNj_wp zizh_16(dDivP1Mye}&oc0-w z^0fT2=*jJ>S#}~U2Qxttp`ijA7C}aSRPXv|eW&U(<>DIGyeK#W1t6hf3XyfDsYAfD z<(uUL!KvLr?q!!nk1e40UB41;EfBN0z_TCLxPwmFcJ=dYO)vh9~@@m=`T7!Z%gZyyI)6nrZN|?@uSe|B%r)N0@f)6@YRQd z2RmTkI28b0YXD@`0JtvoXSm9*KvIh^7vlPV zfcO&7QrC=gE1MI|yP&7LElvrGxT)OppDO)&eB@&|}rN0lZV=Kegy4C|D|e*)-mNG|{Y diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_autoloader.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_autoloader.png new file mode 100644 index 0000000000000000000000000000000000000000..05618d9481f09ec201d8cf826e54661ecd3c03f8 GIT binary patch literal 1736 zcmb_ddoqvWFD;QN3^V1CMyqJD7HM1AH5`v=W*DztMiHThH&LU; zGd5+HvC-I8(@$6orebQwv!zkOnAx#)I{T>8Kl}aTe!u5@@4es8x!=$Cb5r-?T$Poy zl>h+B?rvCb0ASJ(1{CC_&OfT+JE@b4c5&aYAT_GOw=@9c6Wy`S`^g2<+?w$92iG8; z@=Q(5@&0!zA2gKs;15;^SD(LY3V#LjXj@eOOxf&gj>m5H#d}J&czl)3Dg#naSXS%~ zNwt8gS2@aKOcp#DzVm9>^GeYTK7{!uyA+Y>UU zn!wrt$DBH<5L@7A>5|2nD{+EYKJEda>g*3npIx4}zH8 zlZ0t*A>zP9fzZ9rW$c?)amb6{s@7fGRT_;~V3%C+6;zCg-nLi&l2%OOp{$jso%{>jpm z%!lPH$k)io$Z=C_9p2nvVmaaFi6*4Kj-DRrOVxoc(K6>q7NgG<#_SeJWdK+-F*(7} z8S#g*YYp>LD{pv6>h(5fyPs4&dhcwPXexJda#F#p&)0L*8BitS_}h+HEYjh_^ofAnERIB{@a`WsYC$Mx1J9lA_ohs8UftpOZ!Noa>N z)>BFXVthOyYC|qtDd?qmdC3_eLmU8M9c_x0@>=j-`ohYm^1oO~T_S9~^67PkEZdBg O3*C3(u+=U>$NvP_-_mCQ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/rbmk_autoloader.png b/src/main/resources/assets/hbm/textures/models/machines/rbmk_autoloader.png new file mode 100644 index 0000000000000000000000000000000000000000..f15f922bd5ded58c99a8b6ac95367cd53f120b8f GIT binary patch literal 1576 zcmaKseK^x=7{}M4QD|K_nU_LS>{J`&Exjn2GB2Z;Hf$>WPz|xB?Ihw5LwU=Fs8&>J zCZxhhNK55ZSZG#xtJYH3CNn#~{y5k9UKcDOVl@Fs zEO7~aJkEXz`_XYrr6|CLiZqJ0dmERfUbLaSiOQS~D$GxM=*4m?a=YhSM*J8VlasFb zYIRy~)K@>PiJP_a;lZzzeW&FLjVpPhmkK%JZHd$CI~@W>m8U}*9GRYM`$n2&{niGEtW*i+Xgs zE9YjCUb|-9g=##`DQMs;ZXQoG#5mW}!%8mW;z)=w3T_f1+8=R#$Ty;Q;?7_gBzE>g z1 zQ9cpqvIjF``9Hkyw3*);PXTb%3tdEi^T;nnChM7;QKv@)L?4HDRdztCU(7d5Kj8e* zZ?L~zJHbhKtVYjLe~ON@dd^7w? zO0E@iI?RfhP@iuTGw*%qf!S5G|IZA-R=-o%gTrpyQz)EN9Gxp}#MF7q2V8^_L3u)q zxZ^osz+$odu*K%hvh8niT%GpiTY3~mE*TP8IPPnKs1k;=iAw=Fx5Sx#IcuI&vVY-o zR*#PKjf_!?xYtJFGXkT!z!|K3peO$jI~6l*r1E(VdZ|BYjI-VCQuA#7VKCeT&pZf4 z_&@vG^j|ZeY^??9{^k5{*?*gGbxsf@@-7jc;{j?P@1{_4Ln!%^C!x9=Zx!>nyZBZ> zO}?_HWmv{QK8EVF*Svzg+sj`Nl0BM4=YqNTfvF2O(4oy1hf<|m#k?7<_|Ph{T>Obl zkc_?W5*n7LiX%vW6}_#|TV6S2KGaoTH26+tFhi`Cz! zTaNQ5l?K*Nz~AO?b9Nt@(15&?DI-q)h%Y;G@PZgLi9aTb93{N+1WSu`9g_LZ|m<$ z03d~@62cf64qG-H7%Xowr(Dp5Y8+J_OeN%ledxBCx#+{rX2b#97&MC$N%_jOK_sG! oPUkvIqL#dt2b#6noBGJn&`JFM;d7eb!PO7(#Q3^byM?9v1sK8(N&o-= literal 0 HcmV?d00001 From f0679b04cc0f94b904a514c96d71cf40a323a615 Mon Sep 17 00:00:00 2001 From: PewPewCricket Date: Thu, 24 Jul 2025 13:30:59 -0500 Subject: [PATCH 310/491] fix FCP oc compat --- src/main/java/com/hbm/blocks/network/FluidPump.java | 1 + .../com/hbm/tileentity/machine/TileEntityMachineTurbine.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/FluidPump.java b/src/main/java/com/hbm/blocks/network/FluidPump.java index 746622c0c..a3fcd1baa 100644 --- a/src/main/java/com/hbm/blocks/network/FluidPump.java +++ b/src/main/java/com/hbm/blocks/network/FluidPump.java @@ -306,6 +306,7 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo int input = args.checkInteger(0); if (input > 10000 || input < 0) return new Object[] {null, "Number outside of bounds."}; + bufferSize = input; return new Object[] {true}; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 85e982856..079a563e4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -236,7 +236,7 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS } } nbt.setTag("items", list); - + if (customName != null) { nbt.setString("name", customName); } @@ -280,7 +280,7 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS this.tryProvide(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); tanks[0].setType(0, 1, slots); - tanks[0].loadTank(2, 3, slots); + tanks[0].loadTank(2, 3, slots); power = Library.chargeItemsFromTE(slots, 4, power, maxPower); FluidType in = tanks[0].getTankType(); From 131e4fd42ddcd1ae72c2118787657ee01d490ea6 Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 25 Jul 2025 17:50:13 +0200 Subject: [PATCH 311/491] yesterday's shit buffet --- .../recipes/AssemblyMachineRecipes.java | 16 ++++++++++++++++ .../inventory/recipes/loader/GenericRecipe.java | 3 +++ src/main/java/com/hbm/items/ItemEnums.java | 4 ++++ src/main/java/com/hbm/items/ModItems.java | 3 +++ src/main/resources/assets/hbm/lang/de_DE.lang | 5 +++++ src/main/resources/assets/hbm/lang/en_US.lang | 5 +++++ .../items/item_expensive.bronze_tubes.png | Bin 0 -> 369 bytes .../items/item_expensive.bronze_tubes_alt.png | Bin 0 -> 412 bytes .../items/item_expensive.ferro_plating.png | Bin 0 -> 408 bytes .../items/item_expensive.heavy_frame.png | Bin 0 -> 420 bytes .../items/item_expensive.lead_plating.png | Bin 0 -> 268 bytes .../items/item_expensive.steel_plating.png | Bin 0 -> 411 bytes 12 files changed, 36 insertions(+) create mode 100644 src/main/resources/assets/hbm/textures/items/item_expensive.bronze_tubes.png create mode 100644 src/main/resources/assets/hbm/textures/items/item_expensive.bronze_tubes_alt.png create mode 100644 src/main/resources/assets/hbm/textures/items/item_expensive.ferro_plating.png create mode 100644 src/main/resources/assets/hbm/textures/items/item_expensive.heavy_frame.png create mode 100644 src/main/resources/assets/hbm/textures/items/item_expensive.lead_plating.png create mode 100644 src/main/resources/assets/hbm/textures/items/item_expensive.steel_plating.png diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 1406819af..66bd4f27a 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -23,6 +23,7 @@ import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ModItems; import com.hbm.items.ItemEnums.EnumCasingType; +import com.hbm.items.ItemEnums.EnumExpensiveType; import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemFluidIcon; @@ -83,6 +84,21 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.platednt").setup(600, 100).outputItems(new ItemStack(ModItems.plate_dineutronium, 4)) .inputItems(new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModItems.powder_spark_mix, 2), new OreDictStack(DESH.ingot(), 1))); + this.register(new GenericRecipe("ass.exsteelplating").setup(200, 400).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.STEEL_PLATING.ordinal())) + .inputItems(new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(TI.plate(), 4), new OreDictStack(STEEL.bolt(), 16))); + this.register(new GenericRecipe("ass.exheavyframe").setup(600, 800).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME.ordinal())) + .inputItems(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.STEEL_PLATING), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(CU.plateWelded(), 4), new OreDictStack(DESH.ingot(), 1), new OreDictStack(DURA.bolt(), 32))); + this.register(new GenericRecipe("ass.exleadplating").setup(400, 4_000).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.LEAD_PLATING.ordinal())) + .inputItems(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.STEEL_PLATING), new OreDictStack(PB.plateCast(), 8), new OreDictStack(B.ingot(), 2), new OreDictStack(W.bolt(), 32)) + .inputFluids(new FluidStack(Fluids.LUBRICANT, 1_000))); + this.register(new GenericRecipe("ass.exferroplating").setup(1_200, 10_000).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.FERRO_PLATING.ordinal())) + .inputItems(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.LEAD_PLATING), new OreDictStack(FERRO.plateCast(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4)) + .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 1_000))); + this.register(new GenericRecipe("ass.bronzetubes").setup(3_000, 250_000).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.BRONZE_TUBES.ordinal())) + .inputItems(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ZR.plateWelded(), 1)) + .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL_COLD, 4_000)) + .outputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 4_000))); + // cloth this.register(new GenericRecipe("ass.hazcloth").setup(50, 100).outputItems(new ItemStack(ModItems.hazmat_cloth, 4)) .inputItems(new OreDictStack(PB.dust(), 4), new ComparableStack(Items.string, 8))); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 0f98be052..564938092 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; +import com.hbm.config.GeneralConfig; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.recipes.loader.GenericRecipes.ChanceOutput; @@ -58,7 +59,9 @@ public class GenericRecipe { public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } + public GenericRecipe inputItemsEx(AStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; } + public GenericRecipe inputFluidsEx(FluidStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputFluid = input; return this; } public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; } public GenericRecipe outputFluids(FluidStack... output) { this.outputFluid = output; return this; } diff --git a/src/main/java/com/hbm/items/ItemEnums.java b/src/main/java/com/hbm/items/ItemEnums.java index 6ca3c76af..e8692cd67 100644 --- a/src/main/java/com/hbm/items/ItemEnums.java +++ b/src/main/java/com/hbm/items/ItemEnums.java @@ -90,4 +90,8 @@ public class ItemEnums { public static enum EnumIngotMetal { SCRAP, INGOT, COUNTER, KEY, BEACON, CASING, CLOCKWORK, BAR, DETECTOR } + + public static enum EnumExpensiveType { + STEEL_PLATING, HEAVY_FRAME, LEAD_PLATING, FERRO_PLATING, BRONZE_TUBES + } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index b8bbdbde8..4019a3355 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -342,6 +342,7 @@ public class ModItems { public static Item thruster_nuclear; public static Item safety_fuse; public static Item part_generic; + public static Item item_expensive; public static Item item_secret; public static Item ingot_metal; public static Item chemical_dye; @@ -2345,6 +2346,7 @@ public class ModItems { thruster_nuclear = new Item().setUnlocalizedName("thruster_nuclear").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_nuclear"); safety_fuse = new Item().setUnlocalizedName("safety_fuse").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":safety_fuse"); part_generic = new ItemGenericPart().setUnlocalizedName("part_generic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_generic"); + item_expensive = new ItemEnumMulti(EnumExpensiveType.class, true, true).setUnlocalizedName("item_expensive").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":item_expensive"); item_secret = new ItemEnumMulti(EnumSecretType.class, true, true).setUnlocalizedName("item_secret").setCreativeTab(null).setTextureName(RefStrings.MODID + ":item_secret"); ingot_metal = new ItemEnumMulti(EnumIngotMetal.class, true, true).setUnlocalizedName("ingot_metal").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ingot_metal"); chemical_dye = new ItemChemicalDye().setUnlocalizedName("chemical_dye").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chemical_dye"); @@ -5505,6 +5507,7 @@ public class ModItems { GameRegistry.registerItem(chemical_dye, chemical_dye.getUnlocalizedName()); GameRegistry.registerItem(crayon, crayon.getUnlocalizedName()); GameRegistry.registerItem(part_generic, part_generic.getUnlocalizedName()); + GameRegistry.registerItem(item_expensive, item_expensive.getUnlocalizedName()); GameRegistry.registerItem(item_secret, item_secret.getUnlocalizedName()); GameRegistry.registerItem(ingot_metal, ingot_metal.getUnlocalizedName()); GameRegistry.registerItem(parts_legendary, parts_legendary.getUnlocalizedName()); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index c569a4c24..deddc496a 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2351,6 +2351,11 @@ item.insert_polonium.name=Poloniumeinlage item.insert_steel.name=Schwere Stahleinlage item.insert_xsapi.name=XSAPI-Einlage item.insert_yharonite.name=Yharoniteinlage +item.item_expensive.bronze_tubes.name=Bronze-Strukturelement +item.item_expensive.ferro_plating.name=Verstärkte Ferrouraniumpanele +item.item_expensive.heavy_frame.name=Schweres Gestell +item.item_expensive.lead_plating.name=Strahlenresistente Plattierung +item.item_expensive.steel_plating.name=Gebolzte Stahlplatten item.item_secret.aberrator.name=Aberrator-Teil item.item_secret.canister.name=Komposit SB-26 item.item_secret.controller.name=Proprietäre Steuereinheit diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index f5702bf91..18e50f81d 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3177,6 +3177,11 @@ item.insert_polonium.name=Polonium Insert item.insert_steel.name=Heavy Steel Insert item.insert_xsapi.name=XSAPI Insert item.insert_yharonite.name=Yharonite Insert +item.item_expensive.bronze_tubes.name=Bronze Structural Elements +item.item_expensive.ferro_plating.name=Reinforced Ferrouranium Panels +item.item_expensive.heavy_frame.name=Heavy Framework +item.item_expensive.lead_plating.name=Radiation Resistant Plating +item.item_expensive.steel_plating.name=Bolten Steel Plating item.item_secret.aberrator.name=Aberrator Part item.item_secret.canister.name=Composition SB-26 item.item_secret.controller.name=Proprietary Control Unit diff --git a/src/main/resources/assets/hbm/textures/items/item_expensive.bronze_tubes.png b/src/main/resources/assets/hbm/textures/items/item_expensive.bronze_tubes.png new file mode 100644 index 0000000000000000000000000000000000000000..8c410bd9764a19bad5f72c0c4705e34244b6bc6f GIT binary patch literal 369 zcmV-%0gnEOP)Jd%ps8Ua#FkHEO7v z_veQ?AW4p0xz}!K|MX~=AW8vnO|pW_7Ar(V*A@{Z$?5t{x_*-|&h$(P5J=V&R@tgdgJti# P00000NkvXXu0mjfWVfTc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/item_expensive.bronze_tubes_alt.png b/src/main/resources/assets/hbm/textures/items/item_expensive.bronze_tubes_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..d8eb827b63b4f3329f4ecdbd02766befe59af2ea GIT binary patch literal 412 zcmV;N0b~A&P)Vd;99%ohKB!keS&_Sh^QsST&b4`MR4+3}h-uLCbvR zZvTl37xiK>Xf7`TAf?1|eQeJYzj2yCN~y)OT%STFLmFp$o-hEqt9j-h9yP(<>pKP0 z1R-La<@)qD)&ZDPhewAy9G_eRP%urj$b+vTg>tpR<@1|vpiC}K?`baOw8&4n1uWNR z_h1`* zcQS#qvX&S*I;apk0NBrFgL1V(Z#W76oHU$jpiH94(sZBp2(Xy^&>=|x00008wsOv zBGG}#O(YJ|r6fYJlLX@6&^DwK4%+7z^+Znw9Q{doTpORTr5 z!oKbGL|sNsy6JQnTNZDxUuc@nYPA9&2z(l*3BX`5;G|O7&L)#oj9_e8OrAb4j9RRN zes_q`)Bx~3FFr!Cc)Bf@k1>oIqtP>AxB);>vZ!i~An*ZjU5kUmG)u=x0i2w@?6lj?%FfEdSI9F6>8w&( znNm<}_5s`?BBJ0z3c;+?IZ2s7Rty$eOlH{ZCR*recDT$r=iak-;E!--73=l-*Kb5A zCBE-Fxmo0PyNwXS)|66Hcj7pv*XseWm?ldpxjL$_^7MeWxx}vf!ST)pxlV^caf^Px zZ^`5F_{2$)jdQtNMoMYFri(a^aa|XHD2f;khmK>&p6C5Ia}WfyS}k5r57|Ept$@v- z(P&tA6O!q`xL2!HZY}~~)e2hyAq3|K>%d4Cw)Ht24QL|hcDn%NO9I08tbleNO&qY7 zAMc)_vNw0M1#>WA8DhR9C=}K*gmf*l2eXje1ONJ#=Jf>Q$mU%p8U6V+Y{{`Rcd8D}f)Kg;s O0000ONQ=2~XsI}HMeEj&(_Qr=FKMpLJlwq?ZLubhm{tJzoVf9NdWxDHi zz5V=DY5Pgw!_X~E*g>7w)YmTwAP?JU>{s0LU5d$`2u~_I8 zVo0HdMeuK=OA*MgFl;Vhv4tRV2ipm;$*z0c^?B9o%Ou&N#uJ=&j{pF+Eb1+A&NqxPD5a2P8LYJcfGCQl$8pMF(4vntudV~e5^8qJkPzVgHsOUAu0r6vU_vRYo9{2o1C0;2q7SZ@IGs8 zO`t+B9Q2V=g3)*aV+@Qjevl4Vmls&CmUw)AX>LJ(eEL-p5u}umQX+~X+}>RKyw2f4 zy#iYnSa0{MwT9NZqP|`&o4WnKgDtbauy9pP%I*$!k3YrdexsmIKyd&7002ovPDHLk FV1k8gstEu9 literal 0 HcmV?d00001 From 7f887a623a5ce0ae04b1c6bc32bbb1ebc4bed0dd Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 27 Jul 2025 17:10:39 +0200 Subject: [PATCH 312/491] :b:alls --- changelog | 3 + .../recipes/AssemblyMachineRecipes.java | 3 +- .../inventory/recipes/CrackingRecipes.java | 1 + .../com/hbm/itempool/ItemPoolsRedRoom.java | 1 + .../machine/TileEntityMachineMiningLaser.java | 9 +- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../assets/hbm/models/machines/purex.obj | 8803 +++++++++++++++++ .../hbm/textures/models/machines/purex.png | Bin 0 -> 6779 bytes 8 files changed, 8815 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/assets/hbm/models/machines/purex.obj create mode 100644 src/main/resources/assets/hbm/textures/models/machines/purex.png diff --git a/changelog b/changelog index 57f21b30a..06cca47a8 100644 --- a/changelog +++ b/changelog @@ -15,6 +15,9 @@ * The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints * The chemical plant now has a recipe for making cobblestone from 25mB of lava (which can be liquefacted into even more lava, useful for cobblestone generation) * Removed the old arc furnace +* Mining lasers now build up barricades in all directions and not just horizontal ones, preventing potential deadlocks due to liquid flowing in from above +* One of the new secret parts for making a certain weapon is now obtainable again via red rooms +* Biogas can now be cracked into aromatics and petroleum gas ## Fixed * Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 66bd4f27a..e38c4cf32 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -83,7 +83,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new ComparableStack(ModItems.ingot_osmiridium))); this.register(new GenericRecipe("ass.platednt").setup(600, 100).outputItems(new ItemStack(ModItems.plate_dineutronium, 4)) .inputItems(new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModItems.powder_spark_mix, 2), new OreDictStack(DESH.ingot(), 1))); - + + // expensive parts this.register(new GenericRecipe("ass.exsteelplating").setup(200, 400).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.STEEL_PLATING.ordinal())) .inputItems(new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(TI.plate(), 4), new OreDictStack(STEEL.bolt(), 16))); this.register(new GenericRecipe("ass.exheavyframe").setup(600, 800).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME.ordinal())) diff --git a/src/main/java/com/hbm/inventory/recipes/CrackingRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrackingRecipes.java index b66cf903d..d7c8cd0fd 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrackingRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrackingRecipes.java @@ -51,6 +51,7 @@ public class CrackingRecipes extends SerializableRecipe { cracking.put(Fluids.XYLENE, new Pair(new FluidStack(Fluids.AROMATICS, xyl_crack_aroma), new FluidStack(Fluids.PETROLEUM, xyl_crack_petro))); cracking.put(Fluids.HEATINGOIL_VACUUM, new Pair(new FluidStack(Fluids.HEATINGOIL, 80), new FluidStack(Fluids.REFORMGAS, 20))); cracking.put(Fluids.REFORMATE, new Pair(new FluidStack(Fluids.UNSATURATEDS, 40), new FluidStack(Fluids.REFORMGAS, 60))); + cracking.put(Fluids.BIOGAS, new Pair(new FluidStack(Fluids.PETROLEUM, 20), new FluidStack(Fluids.AROMATICS, 20))); } public static Pair getCracking(FluidType oil) { diff --git a/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java b/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java index 44393be00..e4a85d34a 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java @@ -43,6 +43,7 @@ public class ItemPoolsRedRoom { weighted(ModItems.gun_hangman, 0, 1, 1, 1), weighted(ModItems.gun_mas36, 0, 1, 1, 1), + weighted(ModItems.item_secret, EnumSecretType.FOLLY.ordinal(), 1, 1, 1), }; }}; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index 2d82a79ff..358aa12ec 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -211,11 +211,10 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen } private void buildDam() { - - if(worldObj.getBlock(targetX + 1, targetY, targetZ).getMaterial().isLiquid()) worldObj.setBlock(targetX + 1, targetY, targetZ, ModBlocks.barricade); - if(worldObj.getBlock(targetX - 1, targetY, targetZ).getMaterial().isLiquid()) worldObj.setBlock(targetX - 1, targetY, targetZ, ModBlocks.barricade); - if(worldObj.getBlock(targetX, targetY, targetZ + 1).getMaterial().isLiquid()) worldObj.setBlock(targetX, targetY, targetZ + 1, ModBlocks.barricade); - if(worldObj.getBlock(targetX, targetY, targetZ - 1).getMaterial().isLiquid()) worldObj.setBlock(targetX, targetY, targetZ - 1, ModBlocks.barricade); + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + if(worldObj.getBlock(targetX + dir.offsetX, targetY + dir.offsetY, targetZ + dir.offsetZ).getMaterial().isLiquid()) worldObj.setBlock(targetX + dir.offsetX, targetY + dir.offsetY, targetZ + dir.offsetZ, ModBlocks.barricade); + } } private void tryFillContainer(int x, int y, int z) { diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 18e50f81d..e17773efa 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3181,7 +3181,7 @@ item.item_expensive.bronze_tubes.name=Bronze Structural Elements item.item_expensive.ferro_plating.name=Reinforced Ferrouranium Panels item.item_expensive.heavy_frame.name=Heavy Framework item.item_expensive.lead_plating.name=Radiation Resistant Plating -item.item_expensive.steel_plating.name=Bolten Steel Plating +item.item_expensive.steel_plating.name=Bolted Steel Plating item.item_secret.aberrator.name=Aberrator Part item.item_secret.canister.name=Composition SB-26 item.item_secret.controller.name=Proprietary Control Unit diff --git a/src/main/resources/assets/hbm/models/machines/purex.obj b/src/main/resources/assets/hbm/models/machines/purex.obj new file mode 100644 index 000000000..89faf9165 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/purex.obj @@ -0,0 +1,8803 @@ +# Blender v2.79 (sub 0) OBJ File: 'purex.blend' +# www.blender.org +o Frame +v 2.375000 5.000000 -2.250000 +v 2.375000 5.000000 2.250000 +v 2.500000 5.000000 -2.250000 +v 2.500000 5.000000 2.250000 +v 2.375000 4.875000 -2.250000 +v 2.375000 4.875000 2.250000 +v 2.500000 4.875000 -2.250000 +v 2.500000 4.875000 2.250000 +v 2.500000 4.750000 2.500000 +v 2.500000 4.750000 2.250000 +v 2.250000 4.750000 2.500000 +v 2.250000 4.750000 2.250000 +v 2.500000 5.000000 2.500000 +v 2.500000 5.000000 2.250000 +v 2.250000 5.000000 2.500000 +v 2.250000 5.000000 2.250000 +v 2.500000 4.750000 -2.250000 +v 2.500000 4.750000 -2.500000 +v 2.250000 4.750000 -2.250000 +v 2.250000 4.750000 -2.500000 +v 2.500000 5.000000 -2.250000 +v 2.500000 5.000000 -2.500000 +v 2.250000 5.000000 -2.250000 +v 2.250000 5.000000 -2.500000 +v -2.250000 4.750000 2.500000 +v -2.250000 4.750000 2.250000 +v -2.500000 4.750000 2.500000 +v -2.500000 4.750000 2.250000 +v -2.250000 5.000000 2.500000 +v -2.250000 5.000000 2.250000 +v -2.500000 5.000000 2.500000 +v -2.500000 5.000000 2.250000 +v -2.250000 4.750000 -2.250000 +v -2.250000 4.750000 -2.500000 +v -2.500000 4.750000 -2.250000 +v -2.500000 4.750000 -2.500000 +v -2.250000 5.000000 -2.250000 +v -2.250000 5.000000 -2.500000 +v -2.500000 5.000000 -2.250000 +v -2.500000 5.000000 -2.500000 +v -2.500000 4.875000 -2.250000 +v -2.500000 4.875000 2.250000 +v -2.375000 4.875000 -2.250000 +v -2.375000 4.875000 2.250000 +v -2.500000 5.000000 -2.250000 +v -2.500000 5.000000 2.250000 +v -2.375000 5.000000 -2.250000 +v -2.375000 5.000000 2.250000 +v 2.250000 4.875000 -2.500000 +v -2.250000 4.875000 -2.500000 +v 2.250000 4.875000 -2.375000 +v -2.250000 4.875000 -2.375000 +v 2.250000 5.000000 -2.500000 +v -2.250000 5.000000 -2.500000 +v 2.250000 5.000000 -2.375000 +v -2.250000 5.000000 -2.375000 +v -2.250000 4.875000 2.500000 +v 2.250000 4.875000 2.500000 +v -2.250000 4.875000 2.375000 +v 2.250000 4.875000 2.375000 +v -2.250000 5.000000 2.500000 +v 2.250000 5.000000 2.500000 +v -2.250000 5.000000 2.375000 +v 2.250000 5.000000 2.375000 +v 2.375000 4.750000 2.500000 +v 2.375000 0.250000 2.500000 +v 2.500000 4.750000 2.500000 +v 2.500000 0.250000 2.500000 +v 2.375000 4.750000 2.375000 +v 2.375000 0.250000 2.375000 +v 2.500000 4.750000 2.375000 +v 2.500000 0.250000 2.375000 +v -2.500000 4.750000 2.375000 +v -2.500000 0.250000 2.375000 +v -2.375000 4.750000 2.375000 +v -2.375000 0.250000 2.375000 +v -2.500000 4.750000 2.500000 +v -2.500000 0.250000 2.500000 +v -2.375000 4.750000 2.500000 +v -2.375000 0.250000 2.500000 +v 2.375000 0.250000 -2.500000 +v 2.375000 4.750000 -2.500000 +v 2.500000 0.250000 -2.500000 +v 2.500000 4.750000 -2.500000 +v 2.375000 0.250000 -2.375000 +v 2.375000 4.750000 -2.375000 +v 2.500000 0.250000 -2.375000 +v 2.500000 4.750000 -2.375000 +v -2.500000 0.250000 -2.375000 +v -2.500000 4.750000 -2.375000 +v -2.375000 0.250000 -2.375000 +v -2.375000 4.750000 -2.375000 +v -2.500000 0.250000 -2.500000 +v -2.500000 4.750000 -2.500000 +v -2.375000 0.250000 -2.500000 +v -2.375000 4.750000 -2.500000 +vt 0.142857 0.247191 +vt 0.154762 0.269663 +vt 0.142857 0.269663 +vt 0.154762 0.292135 +vt 0.142857 0.314607 +vt 0.142857 0.292135 +vt 0.166667 0.269663 +vt 0.190476 0.269663 +vt 0.178571 0.292135 +vt 0.178571 0.269663 +vt 0.166667 0.292135 +vt 0.142857 0.247191 +vt 0.154762 0.269663 +vt 0.142857 0.269663 +vt 0.154762 0.292135 +vt 0.142857 0.314607 +vt 0.142857 0.292135 +vt 0.166667 0.269663 +vt 0.190476 0.269663 +vt 0.178571 0.292135 +vt 0.178571 0.269663 +vt 0.166667 0.292135 +vt 0.142857 0.247191 +vt 0.154762 0.269663 +vt 0.142857 0.269663 +vt 0.154762 0.292135 +vt 0.142857 0.314607 +vt 0.142857 0.292135 +vt 0.166667 0.269663 +vt 0.190476 0.269663 +vt 0.178571 0.292135 +vt 0.178571 0.269663 +vt 0.166667 0.292135 +vt 0.142857 0.247191 +vt 0.154762 0.269663 +vt 0.142857 0.269663 +vt 0.154762 0.292135 +vt 0.142857 0.314607 +vt 0.142857 0.292135 +vt 0.166667 0.269663 +vt 0.190476 0.269663 +vt 0.178571 0.292135 +vt 0.178571 0.269663 +vt 0.166667 0.292135 +vt 0.309524 0.494382 +vt 0.523810 0.505618 +vt 0.309524 0.505618 +vt 0.309524 0.528090 +vt 0.523810 0.539326 +vt 0.309524 0.539326 +vt 0.523810 0.516854 +vt 0.523810 0.528090 +vt 0.309524 0.516854 +vt 0.309524 0.494382 +vt 0.523810 0.505618 +vt 0.309524 0.505618 +vt 0.309524 0.528090 +vt 0.523810 0.539326 +vt 0.309524 0.539326 +vt 0.523810 0.516854 +vt 0.523810 0.528090 +vt 0.309524 0.516854 +vt 0.309524 0.494382 +vt 0.523810 0.505618 +vt 0.309524 0.505618 +vt 0.309524 0.528090 +vt 0.523810 0.539326 +vt 0.309524 0.539326 +vt 0.523810 0.516854 +vt 0.523810 0.528090 +vt 0.309524 0.516854 +vt 0.309524 0.494382 +vt 0.523810 0.505618 +vt 0.309524 0.505618 +vt 0.309524 0.528090 +vt 0.523810 0.539326 +vt 0.309524 0.539326 +vt 0.523810 0.516854 +vt 0.523810 0.528090 +vt 0.309524 0.516854 +vt 0.523810 0.539326 +vt 0.309524 0.528090 +vt 0.523810 0.528090 +vt 0.523810 0.505618 +vt 0.309524 0.494382 +vt 0.523810 0.494382 +vt 0.309524 0.516854 +vt 0.309524 0.505618 +vt 0.523810 0.516854 +vt 0.309524 0.494382 +vt 0.523810 0.505618 +vt 0.309524 0.505618 +vt 0.309524 0.528090 +vt 0.523810 0.539326 +vt 0.309524 0.539326 +vt 0.523810 0.516854 +vt 0.523810 0.528090 +vt 0.309524 0.516854 +vt 0.309524 0.494382 +vt 0.523810 0.505618 +vt 0.309524 0.505618 +vt 0.309524 0.528090 +vt 0.523810 0.539326 +vt 0.309524 0.539326 +vt 0.523810 0.516854 +vt 0.523810 0.528090 +vt 0.309524 0.516854 +vt 0.523810 0.539326 +vt 0.309524 0.528090 +vt 0.523810 0.528090 +vt 0.523810 0.505618 +vt 0.309524 0.494382 +vt 0.523810 0.494382 +vt 0.309524 0.516854 +vt 0.309524 0.505618 +vt 0.523810 0.516854 +vt 0.154762 0.247191 +vt 0.154762 0.314607 +vt 0.190476 0.292135 +vt 0.154762 0.247191 +vt 0.154762 0.314607 +vt 0.190476 0.292135 +vt 0.154762 0.247191 +vt 0.154762 0.314607 +vt 0.190476 0.292135 +vt 0.154762 0.247191 +vt 0.154762 0.314607 +vt 0.190476 0.292135 +vt 0.523810 0.494382 +vt 0.523810 0.494382 +vt 0.523810 0.494382 +vt 0.523810 0.494382 +vt 0.309524 0.539326 +vt 0.523810 0.494382 +vt 0.523810 0.494382 +vt 0.309524 0.539326 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +s off +f 11/1/1 10/2/1 9/3/1 +f 14/4/2 15/5/2 13/6/2 +f 12/7/3 14/4/3 10/2/3 +f 10/2/4 13/6/4 9/3/4 +f 9/8/5 15/9/5 11/10/5 +f 11/10/6 16/11/6 12/7/6 +f 19/12/1 18/13/1 17/14/1 +f 22/15/2 23/16/2 21/17/2 +f 20/18/3 22/15/3 18/13/3 +f 18/13/4 21/17/4 17/14/4 +f 17/19/5 23/20/5 19/21/5 +f 19/21/6 24/22/6 20/18/6 +f 27/23/1 26/24/1 25/25/1 +f 30/26/2 31/27/2 29/28/2 +f 28/29/3 30/26/3 26/24/3 +f 26/24/4 29/28/4 25/25/4 +f 25/30/5 31/31/5 27/32/5 +f 27/32/6 32/33/6 28/29/6 +f 35/34/1 34/35/1 33/36/1 +f 38/37/2 39/38/2 37/39/2 +f 36/40/3 38/37/3 34/35/3 +f 34/35/4 37/39/4 33/36/4 +f 33/41/5 39/42/5 35/43/5 +f 35/43/6 40/44/6 36/40/6 +f 6/45/1 7/46/1 8/47/1 +f 2/48/6 5/49/6 6/50/6 +f 3/51/4 8/47/4 7/46/4 +f 1/52/2 4/53/2 3/51/2 +f 43/54/1 42/55/1 41/56/1 +f 47/57/4 44/58/4 43/59/4 +f 46/60/6 41/56/6 42/55/6 +f 48/61/2 45/62/2 46/60/2 +f 51/63/1 50/64/1 49/65/1 +f 55/66/5 52/67/5 51/68/5 +f 54/69/3 49/65/3 50/64/3 +f 56/70/2 53/71/2 54/69/2 +f 59/72/1 58/73/1 57/74/1 +f 63/75/3 60/76/3 59/77/3 +f 62/78/5 57/74/5 58/73/5 +f 64/79/2 61/80/2 62/78/2 +f 70/81/3 71/82/3 72/83/3 +f 66/84/6 69/85/6 70/86/6 +f 67/87/4 72/83/4 71/82/4 +f 65/88/5 68/89/5 67/87/5 +f 75/90/3 74/91/3 73/92/3 +f 79/93/4 76/94/4 75/95/4 +f 78/96/6 73/92/6 74/91/6 +f 80/97/5 77/98/5 78/96/5 +f 86/99/5 87/100/5 88/101/5 +f 82/102/6 85/103/6 86/104/6 +f 83/105/4 88/101/4 87/100/4 +f 81/106/3 84/107/3 83/105/3 +f 91/108/5 90/109/5 89/110/5 +f 95/111/4 92/112/4 91/113/4 +f 94/114/6 89/110/6 90/109/6 +f 96/115/3 93/116/3 94/114/3 +f 11/1/1 12/117/1 10/2/1 +f 14/4/2 16/118/2 15/5/2 +f 12/7/3 16/11/3 14/4/3 +f 10/2/4 14/4/4 13/6/4 +f 9/8/5 13/119/5 15/9/5 +f 11/10/6 15/9/6 16/11/6 +f 19/12/1 20/120/1 18/13/1 +f 22/15/2 24/121/2 23/16/2 +f 20/18/3 24/22/3 22/15/3 +f 18/13/4 22/15/4 21/17/4 +f 17/19/5 21/122/5 23/20/5 +f 19/21/6 23/20/6 24/22/6 +f 27/23/1 28/123/1 26/24/1 +f 30/26/2 32/124/2 31/27/2 +f 28/29/3 32/33/3 30/26/3 +f 26/24/4 30/26/4 29/28/4 +f 25/30/5 29/125/5 31/31/5 +f 27/32/6 31/31/6 32/33/6 +f 35/34/1 36/126/1 34/35/1 +f 38/37/2 40/127/2 39/38/2 +f 36/40/3 40/44/3 38/37/3 +f 34/35/4 38/37/4 37/39/4 +f 33/41/5 37/128/5 39/42/5 +f 35/43/6 39/42/6 40/44/6 +f 6/45/1 5/129/1 7/46/1 +f 2/48/6 1/52/6 5/49/6 +f 3/51/4 4/53/4 8/47/4 +f 1/52/2 2/48/2 4/53/2 +f 43/54/1 44/130/1 42/55/1 +f 47/57/4 48/61/4 44/58/4 +f 46/60/6 45/62/6 41/56/6 +f 48/61/2 47/57/2 45/62/2 +f 51/63/1 52/131/1 50/64/1 +f 55/66/5 56/70/5 52/67/5 +f 54/69/3 53/71/3 49/65/3 +f 56/70/2 55/66/2 53/71/2 +f 59/72/1 60/132/1 58/73/1 +f 63/75/3 64/79/3 60/76/3 +f 62/78/5 61/80/5 57/74/5 +f 64/79/2 63/75/2 61/80/2 +f 70/81/3 69/133/3 71/82/3 +f 66/84/6 65/88/6 69/85/6 +f 67/87/4 68/89/4 72/83/4 +f 65/88/5 66/84/5 68/89/5 +f 75/90/3 76/134/3 74/91/3 +f 79/93/4 80/97/4 76/94/4 +f 78/96/6 77/98/6 73/92/6 +f 80/97/5 79/93/5 77/98/5 +f 86/99/5 85/135/5 87/100/5 +f 82/102/6 81/106/6 85/103/6 +f 83/105/4 84/107/4 88/101/4 +f 81/106/3 82/102/3 84/107/3 +f 91/108/5 92/136/5 90/109/5 +f 95/111/4 96/115/4 92/112/4 +f 94/114/6 93/116/6 89/110/6 +f 96/115/3 95/111/3 93/116/3 +o Fan +v 1.500000 1.312500 2.250000 +v 1.445873 1.281250 2.250000 +v 1.445873 1.218750 2.250000 +v 1.500000 1.187500 2.250000 +v 1.554127 1.218750 2.250000 +v 1.554127 1.281250 2.250000 +v 1.500000 1.312500 2.374999 +v 1.445873 1.281250 2.374999 +v 1.445873 1.218750 2.374999 +v 1.500000 1.187500 2.374999 +v 1.554127 1.218750 2.374999 +v 1.554127 1.281250 2.374999 +v 1.499078 1.311968 2.305412 +v 1.446796 1.281783 2.321589 +v 1.462713 1.540972 2.283170 +v 1.266654 1.427778 2.343830 +v 1.554127 1.219815 2.305412 +v 1.554127 1.280185 2.321589 +v 1.462713 0.959028 2.343830 +v 1.266654 1.072222 2.283170 +v 1.499078 1.188032 2.321589 +v 1.446795 1.218218 2.305412 +v 1.770633 1.136806 2.283170 +v 1.770633 1.363194 2.343830 +vt 0.309524 0.910112 +vt 0.306548 0.921348 +vt 0.306548 0.910112 +vt 0.321429 0.910112 +vt 0.318452 0.921348 +vt 0.318452 0.910112 +vt 0.315476 0.910112 +vt 0.312500 0.921348 +vt 0.312500 0.910112 +vt 0.309524 0.921348 +vt 0.303571 0.921348 +vt 0.303571 0.910112 +vt 0.315476 0.921348 +vt 0.309083 0.929729 +vt 0.306548 0.932492 +vt 0.304012 0.924203 +vt 0.291667 0.915730 +vt 0.303571 0.932584 +vt 0.291667 0.926966 +vt 0.291667 0.915730 +vt 0.303571 0.932584 +vt 0.291667 0.926966 +vt 0.303571 0.910112 +vt 0.291667 0.926966 +vt 0.291667 0.915730 +vt 0.321429 0.921348 +vt 0.304012 0.929729 +vt 0.306548 0.921440 +vt 0.309083 0.924203 +vt 0.303571 0.910112 +vt 0.303571 0.910112 +vt 0.303571 0.932584 +vn 1.0000 0.0000 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.5000 0.8660 0.0000 +vn 0.5000 0.8660 0.0000 +vn 0.5000 -0.8660 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.2588 0.9659 +vn -0.2241 0.1294 0.9659 +vn 0.2241 0.1294 0.9659 +s off +f 102/137/7 107/138/7 101/139/7 +f 100/140/8 105/141/8 99/142/8 +f 98/143/9 103/144/9 97/145/9 +f 97/145/10 108/146/10 102/137/10 +f 101/139/11 106/147/11 100/148/11 +f 99/142/12 104/149/12 98/143/12 +f 108/150/13 103/151/13 105/152/13 +f 113/153/14 120/154/14 114/155/14 +f 118/156/15 115/157/15 117/158/15 +f 111/159/16 110/160/16 109/161/16 +f 102/137/7 108/146/7 107/138/7 +f 100/140/8 106/162/8 105/141/8 +f 98/143/9 104/149/9 103/144/9 +f 97/145/10 103/144/10 108/146/10 +f 101/139/11 107/138/11 106/147/11 +f 99/142/12 105/141/12 104/149/12 +f 103/151/13 104/163/13 105/152/13 +f 105/152/13 106/164/13 107/165/13 +f 107/165/13 108/150/13 105/152/13 +f 113/153/14 119/166/14 120/154/14 +f 118/156/15 116/167/15 115/157/15 +f 111/159/16 112/168/16 110/160/16 +o Pump +v -0.250000 1.875000 -1.500000 +v -0.250000 1.941987 -1.250000 +v -0.250000 2.125000 -1.066987 +v -0.250000 2.375000 -1.000000 +v -0.250000 2.625000 -1.066987 +v -0.250000 2.808013 -1.250000 +v -0.250000 2.875000 -1.500000 +v -0.250000 2.808013 -1.750000 +v -0.250000 2.625000 -1.933012 +v -0.250000 2.375000 -2.000000 +v -0.250000 1.941987 -1.750000 +v -0.250000 2.125000 -1.933012 +v -0.250000 1.625000 -1.500000 +v -0.250000 1.725481 -1.125000 +v -0.250000 2.000000 -0.850481 +v -0.250000 2.375000 -0.750000 +v -0.250000 2.750000 -0.850481 +v -0.250000 3.024519 -1.125000 +v -0.250000 3.125000 -1.500000 +v -0.250000 3.024519 -1.875000 +v -0.250000 2.750000 -2.149519 +v -0.250000 2.375000 -2.250000 +v -0.250000 1.725481 -1.875000 +v -0.250000 2.000000 -2.149519 +v 0.250000 2.000000 -2.149519 +v 0.250000 1.725481 -1.875000 +v 0.250000 2.375000 -2.250000 +v 0.250000 2.750000 -2.149519 +v 0.250000 3.024519 -1.875000 +v 0.250000 3.125000 -1.500000 +v 0.250000 3.024519 -1.125000 +v 0.250000 2.750000 -0.850481 +v 0.250000 2.375000 -0.750000 +v 0.250000 2.000000 -0.850481 +v 0.250000 1.725481 -1.125000 +v 0.250000 1.625000 -1.500000 +v 0.250000 2.125000 -1.933012 +v 0.250000 1.941987 -1.750000 +v 0.250000 2.375000 -2.000000 +v 0.250000 2.625000 -1.933012 +v 0.250000 2.808013 -1.750000 +v 0.250000 2.875000 -1.500000 +v 0.250000 2.808013 -1.250000 +v 0.250000 2.625000 -1.066987 +v 0.250000 2.375000 -1.000000 +v 0.250000 2.125000 -1.066987 +v 0.250000 1.941987 -1.250000 +v 0.250000 1.875000 -1.500000 +vt 0.452381 0.578652 +vt 0.440476 0.606742 +vt 0.440476 0.573034 +vt 0.452381 0.544944 +vt 0.440476 0.539326 +vt 0.452381 0.915730 +vt 0.440476 0.943820 +vt 0.440476 0.910112 +vt 0.452381 0.882023 +vt 0.440476 0.876405 +vt 0.440476 0.842697 +vt 0.452381 0.870786 +vt 0.416667 0.606742 +vt 0.404762 0.634831 +vt 0.404762 0.612360 +vt 0.416667 0.674157 +vt 0.404762 0.646067 +vt 0.416667 0.640449 +vt 0.416667 0.707865 +vt 0.404762 0.679775 +vt 0.416667 0.741573 +vt 0.404762 0.713483 +vt 0.416667 0.775281 +vt 0.404762 0.747191 +vt 0.404762 0.803371 +vt 0.404762 0.780899 +vt 0.416667 0.808989 +vt 0.404762 0.837079 +vt 0.404762 0.814607 +vt 0.416667 0.842697 +vt 0.404762 0.870786 +vt 0.404762 0.848315 +vt 0.416667 0.876405 +vt 0.404762 0.904494 +vt 0.404762 0.882023 +vt 0.416667 0.943820 +vt 0.404762 0.915730 +vt 0.416667 0.910112 +vt 0.416667 0.573034 +vt 0.404762 0.544944 +vt 0.416667 0.539326 +vt 0.404762 0.578652 +vt 0.440476 0.808989 +vt 0.452381 0.837079 +vt 0.440476 0.775281 +vt 0.452381 0.803371 +vt 0.452381 0.747191 +vt 0.440476 0.741573 +vt 0.452381 0.713483 +vt 0.440476 0.707865 +vt 0.452381 0.679775 +vt 0.440476 0.674157 +vt 0.452381 0.646067 +vt 0.440476 0.640449 +vt 0.452381 0.634831 +vt 0.452381 0.601124 +vt 0.452381 0.567416 +vt 0.452381 0.938202 +vt 0.452381 0.904494 +vt 0.452381 0.848315 +vt 0.404762 0.668539 +vt 0.404762 0.702247 +vt 0.404762 0.735955 +vt 0.404762 0.769663 +vt 0.404762 0.938202 +vt 0.404762 0.567416 +vt 0.404762 0.601124 +vt 0.452381 0.814607 +vt 0.452381 0.780899 +vt 0.452381 0.769663 +vt 0.452381 0.735955 +vt 0.452381 0.702247 +vt 0.452381 0.668539 +vt 0.452381 0.612360 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.5000 -0.8660 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.5000 0.8660 +vn 0.0000 -0.8660 -0.5000 +vn 0.0000 0.5000 0.8660 +vn 0.0000 0.8660 0.5000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 0.8660 -0.5000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.5000 -0.8660 +vn 0.0000 -0.8660 0.5000 +s off +f 131/169/17 144/170/17 143/171/17 +f 121/172/17 143/171/17 133/173/17 +f 122/174/17 133/175/17 134/176/17 +f 123/177/17 134/176/17 135/178/17 +f 136/179/17 123/180/17 135/178/17 +f 145/181/18 159/182/18 157/183/18 +f 148/184/18 159/185/18 147/186/18 +f 149/187/18 160/188/18 148/184/18 +f 150/189/18 161/190/18 149/187/18 +f 151/191/18 162/192/18 150/189/18 +f 151/191/18 164/193/18 163/194/18 +f 152/195/18 165/196/18 164/197/18 +f 153/198/18 166/199/18 165/200/18 +f 154/201/18 167/202/18 166/203/18 +f 156/204/18 167/205/18 155/206/18 +f 146/207/18 168/208/18 156/209/18 +f 145/181/18 158/210/18 146/207/18 +f 137/211/17 124/212/17 136/179/17 +f 138/213/17 125/214/17 137/211/17 +f 127/215/17 138/213/17 139/216/17 +f 128/217/17 139/216/17 140/218/17 +f 129/219/17 140/218/17 141/220/17 +f 130/221/17 141/220/17 142/222/17 +f 144/170/17 130/223/17 142/222/17 +f 131/169/17 132/224/17 144/170/17 +f 121/172/17 131/225/17 143/171/17 +f 122/174/17 121/226/17 133/175/17 +f 123/177/17 122/227/17 134/176/17 +f 136/179/17 124/228/17 123/180/17 +f 145/181/18 147/186/18 159/182/18 +f 148/184/18 160/229/18 159/185/18 +f 149/187/18 161/230/18 160/188/18 +f 150/189/18 162/231/18 161/190/18 +f 151/191/18 163/232/18 162/192/18 +f 151/191/18 152/195/18 164/193/18 +f 152/195/18 153/198/18 165/196/18 +f 153/198/18 154/201/18 166/199/18 +f 154/201/18 155/206/18 167/202/18 +f 156/204/18 168/233/18 167/205/18 +f 146/207/18 158/234/18 168/208/18 +f 145/181/18 157/235/18 158/210/18 +f 137/211/17 125/236/17 124/212/17 +f 138/213/17 126/237/17 125/214/17 +f 127/215/17 126/238/17 138/213/17 +f 128/217/17 127/239/17 139/216/17 +f 129/219/17 128/240/17 140/218/17 +f 130/221/17 129/241/17 141/220/17 +f 144/170/17 132/242/17 130/223/17 +s 1 +f 145/181/19 142/222/20 147/186/20 +f 153/198/21 135/178/22 154/201/22 +f 146/207/23 144/170/19 145/181/19 +f 152/195/24 136/179/21 153/198/21 +f 151/191/25 137/211/24 152/195/24 +f 150/189/26 138/213/25 151/191/25 +f 149/187/27 139/216/26 150/189/26 +f 156/209/28 143/171/23 146/207/23 +f 148/184/29 140/218/27 149/187/27 +f 155/206/30 133/175/28 156/204/28 +f 147/186/20 141/220/29 148/184/29 +f 154/201/22 134/176/30 155/206/30 +f 145/181/19 144/170/19 142/222/20 +f 153/198/21 136/179/21 135/178/22 +f 146/207/23 143/171/23 144/170/19 +f 152/195/24 137/211/24 136/179/21 +f 151/191/25 138/213/25 137/211/24 +f 150/189/26 139/216/26 138/213/25 +f 149/187/27 140/218/27 139/216/26 +f 156/209/28 133/173/28 143/171/23 +f 148/184/29 141/220/29 140/218/27 +f 155/206/30 134/176/30 133/175/28 +f 147/186/20 142/222/20 141/220/29 +f 154/201/22 135/178/22 134/176/30 +o Base +v 2.500000 0.000000 2.500000 +v 2.500000 0.000000 2.250000 +v 2.250000 0.000000 2.500000 +v 2.250000 0.000000 2.250000 +v 2.500000 0.250000 2.500000 +v 2.500000 0.250000 2.250000 +v 2.250000 0.250000 2.500000 +v 2.250000 0.250000 2.250000 +v 2.500000 0.000000 -2.250000 +v 2.500000 0.000000 -2.500000 +v 2.250000 0.000000 -2.250000 +v 2.250000 0.000000 -2.500000 +v 2.500000 0.250000 -2.250000 +v 2.500000 0.250000 -2.500000 +v 2.250000 0.250000 -2.250000 +v 2.250000 0.250000 -2.500000 +v -2.250000 0.000000 2.500000 +v -2.250000 0.000000 2.250000 +v -2.500000 0.000000 2.500000 +v -2.500000 0.000000 2.250000 +v -2.250000 0.250000 2.500000 +v -2.250000 0.250000 2.250000 +v -2.500000 0.250000 2.500000 +v -2.500000 0.250000 2.250000 +v -2.250000 0.000000 -2.250000 +v -2.250000 0.000000 -2.500000 +v -2.500000 0.000000 -2.250000 +v -2.500000 0.000000 -2.500000 +v -2.250000 0.250000 -2.250000 +v -2.250000 0.250000 -2.500000 +v -2.500000 0.250000 -2.250000 +v -2.500000 0.250000 -2.500000 +v 2.500000 0.000000 2.250000 +v 2.500000 0.000000 -2.250000 +v 2.375000 0.000000 2.250000 +v 2.375000 0.000000 -2.250000 +v 2.500000 0.125000 2.250000 +v 2.500000 0.125000 -2.250000 +v 2.375000 0.125000 2.250000 +v 2.375000 0.125000 -2.250000 +v -2.500000 0.000000 -2.250000 +v -2.500000 0.000000 2.250000 +v -2.375000 0.000000 -2.250000 +v -2.375000 0.000000 2.250000 +v -2.500000 0.125000 -2.250000 +v -2.500000 0.125000 2.250000 +v -2.375000 0.125000 -2.250000 +v -2.375000 0.125000 2.250000 +v 2.250000 0.000000 -2.500000 +v -2.250000 0.000000 -2.500000 +v 2.250000 0.000000 -2.375000 +v -2.250000 0.000000 -2.375000 +v 2.250000 0.125000 -2.500000 +v -2.250000 0.125000 -2.500000 +v 2.250000 0.125000 -2.375000 +v -2.250000 0.125000 -2.375000 +v -2.250000 0.000000 2.500000 +v 2.250000 0.000000 2.500000 +v -2.250000 0.000000 2.375000 +v 2.250000 0.000000 2.375000 +v -2.250000 0.125000 2.500000 +v 2.250000 0.125000 2.500000 +v -2.250000 0.125000 2.375000 +v 2.250000 0.125000 2.375000 +v 1.875000 0.125000 2.500000 +v 2.125000 0.125000 2.500000 +v 1.875000 0.125000 -2.500000 +v 2.125000 0.125000 -2.500000 +v 1.875000 0.250000 -2.500000 +v 1.875000 0.250000 2.500000 +v 2.125000 0.250000 2.500000 +v 2.125000 0.250000 -2.500000 +v -2.250000 0.250000 2.250000 +v 0.250000 0.250000 2.250000 +v -2.250000 0.250000 -0.250000 +v 0.250000 0.250000 -0.250000 +v -2.250000 0.750000 -0.250000 +v -2.250000 0.750000 2.250000 +v 0.250000 0.750000 2.250000 +v 0.250000 0.750000 -0.250000 +v 0.750000 0.250000 2.250000 +v 0.750000 0.250000 -0.250000 +v 0.750000 0.750000 2.250000 +v 0.750000 0.750000 -0.250000 +v 2.250000 0.250000 2.250000 +v 2.250000 0.250000 -0.250000 +v 2.250000 0.750000 2.250000 +v 2.250000 0.750000 -0.250000 +v -2.250000 0.250000 -0.750000 +v -2.000000 0.750000 -1.000000 +v 2.250000 0.250000 -0.750000 +v 2.000000 0.750000 -1.000000 +v -2.000000 0.750000 -2.000000 +v -2.250000 0.250000 -2.250000 +v 2.250000 0.250000 -2.250000 +v 2.000000 0.750000 -2.000000 +v -1.750000 0.750000 1.000000 +v -2.125000 0.750000 1.100481 +v -2.399519 0.750000 1.375000 +v -2.500000 0.750000 1.750000 +v -2.399519 0.750000 2.125000 +v -2.125000 0.750000 2.399519 +v -1.750000 0.750000 2.500000 +v -1.375000 0.750000 2.399519 +v -1.100481 0.750000 2.125000 +v -1.000000 0.750000 1.750000 +v -1.100481 0.750000 1.375000 +v -1.375000 0.750000 1.100481 +v -2.125000 3.750000 1.100481 +v -1.750000 3.750000 1.000000 +v -2.399519 3.750000 1.375000 +v -2.500000 3.750000 1.750000 +v -2.399519 3.750000 2.125000 +v -2.125000 3.750000 2.399519 +v -1.750000 3.750000 2.500000 +v -1.375000 3.750000 2.399519 +v -1.100481 3.750000 2.125000 +v -1.000000 3.750000 1.750000 +v -1.100481 3.750000 1.375000 +v -1.375000 3.750000 1.100481 +v -1.750000 0.750000 -0.500000 +v -2.125000 0.750000 -0.399519 +v -2.399519 0.750000 -0.125000 +v -2.500000 0.750000 0.250000 +v -2.399519 0.750000 0.625000 +v -2.125000 0.750000 0.899519 +v -1.750000 0.750000 1.000000 +v -1.375000 0.750000 0.899519 +v -1.100481 0.750000 0.625000 +v -1.000000 0.750000 0.250000 +v -1.100481 0.750000 -0.125000 +v -1.375000 0.750000 -0.399519 +v -2.125000 3.750000 -0.399519 +v -1.750000 3.750000 -0.500000 +v -2.399519 3.750000 -0.125000 +v -2.500000 3.750000 0.250000 +v -2.399519 3.750000 0.625000 +v -2.125000 3.750000 0.899519 +v -1.750000 3.750000 1.000000 +v -1.375000 3.750000 0.899519 +v -1.100481 3.750000 0.625000 +v -1.000000 3.750000 0.250000 +v -1.100481 3.750000 -0.125000 +v -1.375000 3.750000 -0.399519 +v -0.250000 0.750000 1.000000 +v -0.625000 0.750000 1.100481 +v -0.899519 0.750000 1.375000 +v -1.000000 0.750000 1.750000 +v -0.899519 0.750000 2.125000 +v -0.625000 0.750000 2.399519 +v -0.250000 0.750000 2.500000 +v 0.125000 0.750000 2.399519 +v 0.399519 0.750000 2.125000 +v 0.500000 0.750000 1.750000 +v 0.399519 0.750000 1.375000 +v 0.125000 0.750000 1.100481 +v -0.625000 3.750000 1.100481 +v -0.250000 3.750000 1.000000 +v -0.899519 3.750000 1.375000 +v -1.000000 3.750000 1.750000 +v -0.899519 3.750000 2.125000 +v -0.625000 3.750000 2.399519 +v -0.250000 3.750000 2.500000 +v 0.125000 3.750000 2.399519 +v 0.399519 3.750000 2.125000 +v 0.500000 3.750000 1.750000 +v 0.399519 3.750000 1.375000 +v 0.125001 3.750000 1.100481 +v -0.250000 0.750000 -0.500000 +v -0.625000 0.750000 -0.399519 +v -0.899519 0.750000 -0.125000 +v -1.000000 0.750000 0.250000 +v -0.899519 0.750000 0.625000 +v -0.625000 0.750000 0.899519 +v -0.250000 0.750000 1.000000 +v 0.125000 0.750000 0.899519 +v 0.399519 0.750000 0.625000 +v 0.500000 0.750000 0.250000 +v 0.399519 0.750000 -0.125000 +v 0.125000 0.750000 -0.399519 +v -0.625000 3.750000 -0.399519 +v -0.250000 3.750000 -0.500000 +v -0.899519 3.750000 -0.125000 +v -1.000000 3.750000 0.250000 +v -0.899519 3.750000 0.625000 +v -0.625000 3.750000 0.899519 +v -0.250000 3.750000 1.000000 +v 0.125000 3.750000 0.899519 +v 0.399519 3.750000 0.625000 +v 0.500000 3.750000 0.250000 +v 0.399519 3.750000 -0.125000 +v 0.125001 3.750000 -0.399519 +v 1.000000 0.750000 2.250000 +v 1.000000 0.750000 -0.250000 +v 2.000000 0.750000 2.250000 +v 2.000000 0.750000 -0.250000 +v 1.000000 1.750000 2.250000 +v 1.000000 1.750000 -0.250000 +v 2.000000 1.750000 2.250000 +v 2.000000 1.750000 -0.250000 +v 1.125000 0.875000 2.250000 +v 1.875000 0.875000 2.250000 +v 1.125000 1.625000 2.250000 +v 1.875000 1.625000 2.250000 +v 1.187500 0.937500 2.375000 +v 1.812500 0.937500 2.375000 +v 1.187500 1.562500 2.375000 +v 1.812500 1.562500 2.375000 +v 1.125000 0.875000 2.375000 +v 1.875000 0.875000 2.375000 +v 1.125000 1.625000 2.375000 +v 1.875000 1.625000 2.375000 +v 1.187500 0.937500 2.250000 +v 1.812500 0.937500 2.250000 +v 1.187500 1.562500 2.250000 +v 1.812500 1.562500 2.250000 +v -0.250000 3.750000 1.750000 +v -0.338388 3.750000 1.786612 +v -0.375000 3.750000 1.875000 +v -0.338388 3.750000 1.963388 +v -0.250000 3.750000 2.000000 +v -0.161611 3.750000 1.963388 +v -0.125000 3.750000 1.875000 +v -0.161611 3.750000 1.786612 +v -0.250000 4.000000 1.750000 +v -0.338388 4.000000 1.786612 +v -0.375000 4.000000 1.875000 +v -0.338388 4.000000 1.963388 +v -0.250000 4.000000 2.000000 +v -0.161611 4.000000 1.963388 +v -0.125000 4.000000 1.875000 +v -0.161611 4.000000 1.786612 +v -0.213388 4.088388 1.750000 +v -0.275888 4.150888 1.786612 +v -0.301776 4.176777 1.875000 +v -0.275888 4.150888 1.963388 +v -0.213388 4.088388 2.000000 +v -0.150888 4.025888 1.963388 +v -0.150888 4.025888 1.786612 +v -0.125000 4.125000 1.750000 +v -0.125000 4.213388 1.786612 +v -0.125000 4.250000 1.875000 +v -0.125000 4.213388 1.963388 +v -0.125000 4.125000 2.000000 +v -0.125000 4.036612 1.963388 +v -0.125000 4.036612 1.786612 +v 1.250000 1.750000 2.000000 +v 1.338388 1.750000 1.963388 +v 1.375000 1.750000 1.875000 +v 1.338388 1.750000 1.786612 +v 1.250000 1.750000 1.750000 +v 1.161612 1.750000 1.786612 +v 1.125000 1.750000 1.875000 +v 1.161612 1.750000 1.963388 +v 1.250000 4.000000 2.000000 +v 1.338388 4.000000 1.963388 +v 1.375000 4.000000 1.875000 +v 1.338388 4.000000 1.786612 +v 1.250000 4.000000 1.750000 +v 1.161612 4.000000 1.786612 +v 1.125000 4.000000 1.875000 +v 1.161612 4.000000 1.963388 +v 1.213388 4.088388 2.000000 +v 1.275888 4.150888 1.963388 +v 1.301777 4.176777 1.875000 +v 1.275888 4.150888 1.786612 +v 1.213388 4.088388 1.750000 +v 1.150888 4.025888 1.786612 +v 1.150888 4.025888 1.963388 +v 1.125000 4.125000 2.000000 +v 1.125000 4.213388 1.963388 +v 1.125000 4.250000 1.875000 +v 1.125000 4.213388 1.786612 +v 1.125000 4.125000 1.750000 +v 1.125000 4.036612 1.786612 +v 1.125000 4.036612 1.963388 +v -1.750000 3.750000 1.750000 +v -1.838388 3.750000 1.786612 +v -1.875000 3.750000 1.875000 +v -1.838388 3.750000 1.963388 +v -1.750000 3.750000 2.000000 +v -1.661611 3.750000 1.963388 +v -1.625000 3.750000 1.875000 +v -1.661611 3.750000 1.786612 +v -1.750000 4.250000 1.750000 +v -1.838388 4.250000 1.786612 +v -1.875000 4.250000 1.875000 +v -1.838388 4.250000 1.963388 +v -1.750000 4.250000 2.000000 +v -1.661611 4.250000 1.963388 +v -1.625000 4.250000 1.875000 +v -1.661611 4.250000 1.786612 +v -1.713388 4.338388 1.750000 +v -1.775888 4.400888 1.786612 +v -1.801777 4.426777 1.875000 +v -1.775888 4.400888 1.963388 +v -1.713388 4.338388 2.000000 +v -1.650888 4.275888 1.963388 +v -1.650888 4.275888 1.786612 +v -1.625000 4.375000 1.750000 +v -1.625000 4.463388 1.786612 +v -1.625000 4.500000 1.875000 +v -1.625000 4.463388 1.963388 +v -1.625000 4.375000 2.000000 +v -1.625000 4.286612 1.963388 +v -1.625000 4.286612 1.786612 +v 1.750000 1.750000 2.000000 +v 1.838388 1.750000 1.963388 +v 1.875000 1.750000 1.875000 +v 1.838388 1.750000 1.786612 +v 1.750000 1.750000 1.750000 +v 1.661612 1.750000 1.786612 +v 1.625000 1.750000 1.875000 +v 1.661612 1.750000 1.963388 +v 1.750000 4.250000 2.000000 +v 1.838388 4.250000 1.963388 +v 1.875000 4.250000 1.875000 +v 1.838388 4.250000 1.786612 +v 1.750000 4.250000 1.750000 +v 1.661612 4.250000 1.786612 +v 1.625000 4.250000 1.875000 +v 1.661612 4.250000 1.963388 +v 1.713388 4.338388 2.000000 +v 1.775888 4.400888 1.963388 +v 1.801777 4.426777 1.875000 +v 1.775888 4.400888 1.786612 +v 1.713388 4.338388 1.750000 +v 1.650888 4.275888 1.786612 +v 1.650888 4.275888 1.963388 +v 1.625000 4.375000 2.000000 +v 1.625000 4.463388 1.963388 +v 1.625000 4.500000 1.875000 +v 1.625000 4.463388 1.786612 +v 1.625000 4.375000 1.750000 +v 1.625000 4.286612 1.786612 +v 1.625000 4.286612 1.963388 +v 1.875000 2.125000 1.750000 +v 1.875000 2.213388 1.786612 +v 1.875000 2.250000 1.875000 +v 1.875000 2.213388 1.963388 +v 1.875000 2.125000 2.000000 +v 1.875000 2.036612 1.963388 +v 1.875000 2.000000 1.875000 +v 1.875000 2.036612 1.786612 +v 1.937500 2.213388 1.786612 +v 1.937500 2.125000 1.750000 +v 1.937500 2.250000 1.875000 +v 1.937500 2.213388 1.963388 +v 1.937500 2.125000 2.000000 +v 1.937500 2.036612 1.963388 +v 1.937500 2.000000 1.875000 +v 1.937500 2.036612 1.786612 +v 1.125000 2.750000 2.000000 +v 1.875000 2.750000 2.000000 +v 1.125000 2.750000 1.500000 +v 1.875000 2.750000 1.500000 +v 1.125000 3.250000 1.500000 +v 1.125000 3.250000 2.000000 +v 1.875000 3.250000 2.000000 +v 1.875000 3.250000 1.500000 +v 1.187500 1.500000 2.375000 +v 1.812500 1.500000 2.375000 +v 1.187500 1.437500 2.375000 +v 1.812500 1.437500 2.375000 +v 1.187500 1.375000 2.375000 +v 1.812500 1.375000 2.375000 +v 1.187500 1.312500 2.375000 +v 1.812500 1.312500 2.375000 +v 1.187500 1.187500 2.375000 +v 1.812500 1.187500 2.375000 +v 1.187500 1.125000 2.375000 +v 1.812500 1.125000 2.375000 +v 1.187500 1.062500 2.375000 +v 1.812500 1.062500 2.375000 +v 1.187500 1.000000 2.375000 +v 1.812500 1.000000 2.375000 +v 2.500000 0.687500 0.187500 +v 2.500000 0.312500 0.187500 +v 2.500000 0.687500 -0.187500 +v 2.500000 0.312500 -0.187500 +v 2.375000 0.625000 -0.125000 +v 2.375000 0.625000 0.125000 +v 2.375000 0.375000 0.125000 +v 2.375000 0.375000 -0.125000 +v 2.375000 0.687500 -0.187500 +v 2.375000 0.687500 0.187500 +v 2.375000 0.312500 0.187500 +v 2.375000 0.312500 -0.187500 +v 2.250000 0.625000 -0.125000 +v 2.250000 0.625000 0.125000 +v 2.250000 0.375000 0.125000 +v 2.250000 0.375000 -0.125000 +v -2.250000 0.750000 -0.750000 +v 2.250000 0.750000 -0.750000 +v -2.250000 0.750000 -2.250000 +v 2.250000 0.750000 -2.250000 +v -2.000000 0.875000 -1.000000 +v 2.000000 0.875000 -1.000000 +v -2.000000 0.875000 -2.000000 +v 2.000000 0.875000 -2.000000 +v -2.250000 0.875000 -0.750000 +v 2.250000 0.875000 -0.750000 +v -2.250000 0.875000 -2.250000 +v 2.250000 0.875000 -2.250000 +v -2.250000 1.625000 -0.750000 +v 2.250000 1.625000 -0.750000 +v -2.250000 1.625000 -2.250000 +v 2.250000 1.625000 -2.250000 +v 1.250000 2.375000 -2.250000 +v 1.250000 2.750000 -2.149519 +v 1.250000 3.024519 -1.875000 +v 1.250000 3.125000 -1.500000 +v 1.250000 3.024519 -1.125000 +v 1.250000 2.750000 -0.850481 +v 1.250000 2.375000 -0.750000 +v 1.250000 2.000000 -0.850481 +v 1.250000 1.725481 -1.125000 +v 1.250000 1.625000 -1.500000 +v 1.250000 1.725481 -1.875000 +v 1.250000 2.000000 -2.149519 +v -1.250000 2.375000 -2.250000 +v -1.250000 2.750000 -2.149519 +v -1.250000 3.024519 -1.875000 +v -1.250000 3.125000 -1.500000 +v -1.250000 3.024519 -1.125000 +v -1.250000 2.750000 -0.850481 +v -1.250000 2.375000 -0.750000 +v -1.250000 2.000000 -0.850481 +v -1.250000 1.725481 -1.125000 +v -1.250000 1.625000 -1.500000 +v -1.250000 1.725481 -1.875000 +v -1.250000 2.000000 -2.149519 +v 1.500000 2.375000 -2.250000 +v 1.500000 2.750000 -2.149519 +v 1.500000 3.024519 -1.875000 +v 1.500000 3.125000 -1.500000 +v 1.500000 3.024519 -1.125000 +v 1.500000 2.750000 -0.850481 +v 1.500000 2.375000 -0.750000 +v 1.500000 2.000000 -0.850481 +v 1.500000 1.725481 -1.125000 +v 1.500000 1.625000 -1.500000 +v 1.500000 1.725481 -1.875000 +v 1.500000 2.000000 -2.149519 +v -1.500000 2.375000 -2.250000 +v -1.500000 2.750000 -2.149519 +v -1.500000 3.024519 -1.875000 +v -1.500000 3.125000 -1.500000 +v -1.500000 3.024519 -1.125000 +v -1.500000 2.750000 -0.850481 +v -1.500000 2.375000 -0.750000 +v -1.500000 2.000000 -0.850481 +v -1.500000 1.725481 -1.125000 +v -1.500000 1.625000 -1.500000 +v -1.500000 1.725481 -1.875000 +v -1.500000 2.000000 -2.149519 +v 1.000000 2.375000 -2.000000 +v 1.000000 2.625000 -1.933013 +v 1.000000 2.808013 -1.750000 +v 1.000000 2.875000 -1.500000 +v 1.000000 2.808013 -1.250000 +v 1.000000 2.625000 -1.066987 +v 1.000000 2.375000 -1.000000 +v 1.000000 2.125000 -1.066987 +v 1.000000 1.941987 -1.250000 +v 1.000000 1.875000 -1.500000 +v 1.000000 1.941987 -1.750000 +v 1.000000 2.125000 -1.933012 +v 1.750000 2.375000 -2.000000 +v 1.750000 2.625000 -1.933013 +v 1.750000 2.808013 -1.750000 +v 1.750000 2.875000 -1.500000 +v 1.750000 2.808013 -1.250000 +v 1.750000 2.625000 -1.066987 +v 1.750000 2.375000 -1.000000 +v 1.750000 2.125000 -1.066987 +v 1.750000 1.941987 -1.250000 +v 1.750000 1.875000 -1.500000 +v 1.750000 1.941987 -1.750000 +v 1.750000 2.125000 -1.933012 +v 1.000000 2.375000 -2.250000 +v 1.000000 2.750000 -2.149519 +v 1.000000 3.024519 -1.875000 +v 1.000000 3.125000 -1.500000 +v 1.000000 3.024519 -1.125000 +v 1.000000 2.750000 -0.850481 +v 1.000000 2.375000 -0.750000 +v 1.000000 2.000000 -0.850481 +v 1.000000 1.725481 -1.125000 +v 1.000000 1.625000 -1.500000 +v 1.000000 1.725481 -1.875000 +v 1.000000 2.000000 -2.149519 +v 0.750000 2.375000 -2.250000 +v 0.750000 2.750000 -2.149519 +v 0.750000 3.024519 -1.875000 +v 0.750000 3.125000 -1.500000 +v 0.750000 3.024519 -1.125000 +v 0.750000 2.750000 -0.850481 +v 0.750000 2.375000 -0.750000 +v 0.750000 2.000000 -0.850481 +v 0.750000 1.725481 -1.125000 +v 0.750000 1.625000 -1.500000 +v 0.750000 1.725481 -1.875000 +v 0.750000 2.000000 -2.149519 +v 0.750000 2.375000 -2.000000 +v 0.750000 2.625000 -1.933013 +v 0.750000 2.808013 -1.750000 +v 0.750000 2.875000 -1.500000 +v 0.750000 2.808013 -1.250000 +v 0.750000 2.625000 -1.066987 +v 0.750000 2.375000 -1.000000 +v 0.750000 2.125000 -1.066987 +v 0.750000 1.941987 -1.250000 +v 0.750000 1.875000 -1.500000 +v 0.750000 1.941987 -1.750000 +v 0.750000 2.125000 -1.933012 +v -0.750000 2.375000 -2.000000 +v -0.750000 2.625000 -1.933013 +v -0.750000 2.808013 -1.750000 +v -0.750000 2.875000 -1.500000 +v -0.750000 2.808013 -1.250000 +v -0.750000 2.625000 -1.066987 +v -0.750000 2.375000 -1.000000 +v -0.750000 2.125000 -1.066987 +v -0.750000 1.941987 -1.250000 +v -0.750000 1.875000 -1.500000 +v -0.750000 1.941987 -1.750000 +v -0.750000 2.125000 -1.933012 +v -0.750000 2.375000 -2.250000 +v -0.750000 2.750000 -2.149519 +v -0.750000 3.024519 -1.875000 +v -0.750000 3.125000 -1.500000 +v -0.750000 3.024519 -1.125000 +v -0.750000 2.750000 -0.850481 +v -0.750000 2.375000 -0.750000 +v -0.750000 2.000000 -0.850481 +v -0.750000 1.725481 -1.125000 +v -0.750000 1.625000 -1.500000 +v -0.750000 1.725481 -1.875000 +v -0.750000 2.000000 -2.149519 +v -1.000000 2.375000 -2.250000 +v -1.000000 2.750000 -2.149519 +v -1.000000 3.024519 -1.875000 +v -1.000000 3.125000 -1.500000 +v -1.000000 3.024519 -1.125000 +v -1.000000 2.750000 -0.850481 +v -1.000000 2.375000 -0.750000 +v -1.000000 2.000000 -0.850481 +v -1.000000 1.725481 -1.125000 +v -1.000000 1.625000 -1.500000 +v -1.000000 1.725481 -1.875000 +v -1.000000 2.000000 -2.149519 +v -1.000000 2.375000 -2.000000 +v -1.000000 2.625000 -1.933013 +v -1.000000 2.808013 -1.750000 +v -1.000000 2.875000 -1.500000 +v -1.000000 2.808013 -1.250000 +v -1.000000 2.625000 -1.066987 +v -1.000000 2.375000 -1.000000 +v -1.000000 2.125000 -1.066987 +v -1.000000 1.941987 -1.250000 +v -1.000000 1.875000 -1.500000 +v -1.000000 1.941987 -1.750000 +v -1.000000 2.125000 -1.933012 +v -1.750000 2.375000 -2.000000 +v -1.750000 2.625000 -1.933013 +v -1.750000 2.808013 -1.750000 +v -1.750000 2.875000 -1.500000 +v -1.750000 2.808013 -1.250000 +v -1.750000 2.625000 -1.066987 +v -1.750000 2.375000 -1.000000 +v -1.750000 2.125000 -1.066987 +v -1.750000 1.941987 -1.250000 +v -1.750000 1.875000 -1.500000 +v -1.750000 1.941987 -1.750000 +v -1.750000 2.125000 -1.933012 +v 0.812500 2.375000 -0.750000 +v 0.937500 2.375000 -0.750000 +v 0.812500 2.375000 -2.250000 +v 0.937500 2.375000 -2.250000 +v 0.812500 1.625000 -0.750000 +v 0.937500 1.625000 -0.750000 +v 0.812500 1.625000 -2.250000 +v 0.937500 1.625000 -2.250000 +v 1.312500 2.375000 -0.750000 +v 1.437500 2.375000 -0.750000 +v 1.312500 2.375000 -2.250000 +v 1.437500 2.375000 -2.250000 +v 1.312500 1.625000 -0.750000 +v 1.437500 1.625000 -0.750000 +v 1.312500 1.625000 -2.250000 +v 1.437500 1.625000 -2.250000 +v -1.437500 2.375000 -0.750000 +v -1.312500 2.375000 -0.750000 +v -1.437500 2.375000 -2.250000 +v -1.312500 2.375000 -2.250000 +v -1.437500 1.625000 -0.750000 +v -1.312500 1.625000 -0.750000 +v -1.437500 1.625000 -2.250000 +v -1.312500 1.625000 -2.250000 +v -0.937500 2.375000 -0.750000 +v -0.812500 2.375000 -0.750000 +v -0.937500 2.375000 -2.250000 +v -0.812500 2.375000 -2.250000 +v -0.937500 1.625000 -0.750000 +v -0.812500 1.625000 -0.750000 +v -0.937500 1.625000 -2.250000 +v -0.812500 1.625000 -2.250000 +v -2.125000 3.750000 0.125000 +v -2.088388 3.750000 0.213388 +v -2.000000 3.750000 0.250000 +v -1.911612 3.750000 0.213388 +v -1.875000 3.750000 0.125000 +v -1.911612 3.750000 0.036612 +v -2.000000 3.750000 0.000000 +v -2.088388 3.750000 0.036612 +v -2.125000 4.000000 0.125000 +v -2.088388 4.000000 0.213388 +v -2.000000 4.000000 0.250000 +v -1.911612 4.000000 0.213388 +v -1.875000 4.000000 0.125000 +v -1.911612 4.000000 0.036612 +v -2.000000 4.000000 0.000000 +v -2.088388 4.000000 0.036612 +v -2.125000 4.088388 0.088388 +v -2.088388 4.150888 0.150888 +v -2.000000 4.176777 0.176777 +v -1.911612 4.150888 0.150888 +v -1.875000 4.088388 0.088388 +v -1.911612 4.025888 0.025888 +v -2.088388 4.025888 0.025888 +v -2.125000 4.125000 0.000000 +v -2.088388 4.213388 0.000000 +v -2.000000 4.250000 0.000000 +v -1.911612 4.213388 0.000000 +v -1.875000 4.125000 0.000000 +v -1.911612 4.036612 0.000000 +v -2.088388 4.036612 0.000000 +v -1.875000 2.500000 -1.250000 +v -1.911612 2.500000 -1.338388 +v -2.000000 2.500000 -1.375000 +v -2.088388 2.500000 -1.338388 +v -2.125000 2.500000 -1.250000 +v -2.088388 2.500000 -1.161612 +v -2.000000 2.500000 -1.125000 +v -1.911612 2.500000 -1.161612 +v -1.875000 4.000000 -1.250000 +v -1.911612 4.000000 -1.338388 +v -2.000000 4.000000 -1.375000 +v -2.088388 4.000000 -1.338388 +v -2.125000 4.000000 -1.250000 +v -2.088388 4.000000 -1.161612 +v -2.000000 4.000000 -1.125000 +v -1.911612 4.000000 -1.161612 +v -1.875000 4.088388 -1.213388 +v -1.911612 4.150888 -1.275888 +v -2.000000 4.176777 -1.301777 +v -2.088388 4.150888 -1.275888 +v -2.125000 4.088388 -1.213388 +v -2.088388 4.025888 -1.150888 +v -1.911612 4.025888 -1.150888 +v -1.875000 4.125000 -1.125000 +v -1.911611 4.213388 -1.125000 +v -2.000000 4.250000 -1.125000 +v -2.088388 4.213388 -1.125000 +v -2.125000 4.125000 -1.125000 +v -2.088388 4.036612 -1.125000 +v -1.911611 4.036612 -1.125000 +v -2.125000 3.750000 1.625000 +v -2.088388 3.750000 1.713388 +v -2.000000 3.750000 1.750000 +v -1.911611 3.750000 1.713388 +v -1.875000 3.750000 1.625000 +v -1.911611 3.750000 1.536612 +v -2.000000 3.750000 1.500000 +v -2.088388 3.750000 1.536612 +v -2.125000 4.250000 1.625000 +v -2.088388 4.250000 1.713388 +v -2.000000 4.250000 1.750000 +v -1.911611 4.250000 1.713388 +v -1.875000 4.250000 1.625000 +v -1.911611 4.250000 1.536612 +v -2.000000 4.250000 1.500000 +v -2.088388 4.250000 1.536612 +v -2.125000 4.338388 1.588388 +v -2.088388 4.400888 1.650888 +v -2.000000 4.426777 1.676777 +v -1.911611 4.400888 1.650888 +v -1.875000 4.338388 1.588388 +v -1.911611 4.275888 1.525888 +v -2.088388 4.275888 1.525888 +v -2.125000 4.375000 1.500000 +v -2.088388 4.463388 1.500000 +v -2.000000 4.500000 1.500000 +v -1.911611 4.463388 1.500000 +v -1.875000 4.375000 1.500000 +v -1.911611 4.286612 1.500000 +v -2.088388 4.286612 1.500000 +v -1.875000 2.500000 -1.750000 +v -1.911612 2.500000 -1.838388 +v -2.000000 2.500000 -1.875000 +v -2.088388 2.500000 -1.838388 +v -2.125000 2.500000 -1.750000 +v -2.088388 2.500000 -1.661612 +v -2.000000 2.500000 -1.625000 +v -1.911612 2.500000 -1.661612 +v -1.875000 4.250000 -1.750000 +v -1.911612 4.250000 -1.838388 +v -2.000000 4.250000 -1.875000 +v -2.088388 4.250000 -1.838388 +v -2.125000 4.250000 -1.750000 +v -2.088388 4.250000 -1.661612 +v -2.000000 4.250000 -1.625000 +v -1.911612 4.250000 -1.661612 +v -1.875000 4.338388 -1.713388 +v -1.911612 4.400888 -1.775888 +v -2.000000 4.426777 -1.801777 +v -2.088388 4.400888 -1.775888 +v -2.125000 4.338388 -1.713388 +v -2.088388 4.275888 -1.650888 +v -1.911612 4.275888 -1.650888 +v -1.875000 4.375000 -1.625000 +v -1.911611 4.463388 -1.625000 +v -2.000000 4.500000 -1.625000 +v -2.088388 4.463388 -1.625000 +v -2.125000 4.375000 -1.625000 +v -2.088388 4.286612 -1.625000 +v -1.911611 4.286612 -1.625000 +v -1.900888 2.474112 -1.338388 +v -1.963388 2.411612 -1.375000 +v -2.025888 2.349112 -1.338388 +v -2.051777 2.323223 -1.250000 +v -2.025888 2.349112 -1.161612 +v -1.963388 2.411612 -1.125000 +v -1.900888 2.474112 -1.161612 +v -1.900888 2.474112 -1.838388 +v -1.963388 2.411612 -1.875000 +v -2.025888 2.349112 -1.838388 +v -2.051777 2.323223 -1.750000 +v -2.025888 2.349112 -1.661612 +v -1.963388 2.411612 -1.625000 +v -1.900888 2.474112 -1.661612 +v -1.875000 2.463388 -1.338388 +v -1.875000 2.375000 -1.375000 +v -1.875000 2.286612 -1.338388 +v -1.875000 2.250000 -1.250000 +v -1.875000 2.286612 -1.161612 +v -1.875000 2.375000 -1.125000 +v -1.875000 2.463388 -1.161612 +v -1.875000 2.463388 -1.838388 +v -1.875000 2.375000 -1.875000 +v -1.875000 2.286612 -1.838388 +v -1.875000 2.250000 -1.750000 +v -1.875000 2.286612 -1.661612 +v -1.875000 2.375000 -1.625000 +v -1.875000 2.463388 -1.661612 +v -1.750000 2.500000 -1.250000 +v -1.750000 2.500000 -1.750000 +v -1.750000 2.463388 -1.338388 +v -1.750000 2.375000 -1.375000 +v -1.750000 2.286612 -1.338388 +v -1.750000 2.250000 -1.250000 +v -1.750000 2.286612 -1.161612 +v -1.750000 2.375000 -1.125000 +v -1.750000 2.463388 -1.161612 +v -1.750000 2.463388 -1.838388 +v -1.750000 2.375000 -1.875000 +v -1.750000 2.286612 -1.838388 +v -1.750000 2.250000 -1.750000 +v -1.750000 2.286612 -1.661612 +v -1.750000 2.375000 -1.625000 +v -1.750000 2.463388 -1.661612 +v 1.000000 2.937500 -1.562500 +v 1.000000 3.062500 -1.562500 +v 1.000000 2.937500 -1.437500 +v 1.000000 3.062500 -1.437500 +v 1.250000 2.937500 -1.562500 +v 1.250000 3.062500 -1.562500 +v 1.250000 2.937500 -1.437500 +v 1.250000 3.062500 -1.437500 +v 1.000000 1.812500 -1.437500 +v 1.000000 1.687500 -1.437500 +v 1.000000 1.812500 -1.562500 +v 1.000000 1.687500 -1.562500 +v 1.250000 1.812500 -1.437500 +v 1.250000 1.687500 -1.437500 +v 1.250000 1.812500 -1.562500 +v 1.250000 1.687500 -1.562500 +v 1.000000 2.437500 -0.937500 +v 1.000000 2.437500 -0.812500 +v 1.000000 2.312500 -0.937500 +v 1.000000 2.312500 -0.812500 +v 1.250000 2.437500 -0.937500 +v 1.250000 2.437500 -0.812500 +v 1.250000 2.312500 -0.937500 +v 1.250000 2.312500 -0.812500 +v 1.000000 2.312500 -2.062500 +v 1.000000 2.312500 -2.187500 +v 1.000000 2.437500 -2.062500 +v 1.000000 2.437500 -2.187500 +v 1.250000 2.312500 -2.062500 +v 1.250000 2.312500 -2.187500 +v 1.250000 2.437500 -2.062500 +v 1.250000 2.437500 -2.187500 +v 1.000000 2.893389 -1.272877 +v 1.000000 3.001642 -1.210377 +v 1.000000 2.830889 -1.164623 +v 1.000000 2.939142 -1.102123 +v 1.250000 2.893389 -1.272877 +v 1.250000 3.001642 -1.210377 +v 1.250000 2.830889 -1.164623 +v 1.250000 2.939142 -1.102123 +v 1.000000 1.856611 -1.727123 +v 1.000000 1.748358 -1.789623 +v 1.000000 1.919111 -1.835376 +v 1.000000 1.810858 -1.897876 +v 1.250000 1.856611 -1.727123 +v 1.250000 1.748358 -1.789623 +v 1.250000 1.919111 -1.835376 +v 1.250000 1.810858 -1.897876 +v 1.000000 2.147877 -0.981611 +v 1.000000 2.085377 -0.873358 +v 1.000000 2.039624 -1.044111 +v 1.000000 1.977124 -0.935858 +v 1.250000 2.147877 -0.981611 +v 1.250000 2.085377 -0.873358 +v 1.250000 2.039624 -1.044111 +v 1.250000 1.977124 -0.935858 +v 1.000000 2.602123 -2.018389 +v 1.000000 2.664623 -2.126642 +v 1.000000 2.710377 -1.955889 +v 1.000000 2.772877 -2.064142 +v 1.250000 2.602123 -2.018389 +v 1.250000 2.664623 -2.126642 +v 1.250000 2.710377 -1.955889 +v 1.250000 2.772877 -2.064142 +v 1.000000 2.710377 -1.044111 +v 1.000000 2.772877 -0.935858 +v 1.000000 2.602124 -0.981611 +v 1.000000 2.664623 -0.873358 +v 1.250000 2.710377 -1.044111 +v 1.250000 2.772877 -0.935858 +v 1.250000 2.602124 -0.981611 +v 1.250000 2.664623 -0.873358 +v 1.000000 2.039624 -1.955889 +v 1.000000 1.977124 -2.064142 +v 1.000000 2.147877 -2.018389 +v 1.000000 2.085377 -2.126642 +v 1.250000 2.039624 -1.955889 +v 1.250000 1.977124 -2.064142 +v 1.250000 2.147877 -2.018389 +v 1.250000 2.085377 -2.126642 +v 1.000000 1.919111 -1.164623 +v 1.000000 1.810858 -1.102123 +v 1.000000 1.856611 -1.272877 +v 1.000000 1.748358 -1.210377 +v 1.250000 1.919111 -1.164623 +v 1.250000 1.810858 -1.102123 +v 1.250000 1.856611 -1.272877 +v 1.250000 1.748358 -1.210377 +v 1.000000 2.830889 -1.835376 +v 1.000000 2.939142 -1.897876 +v 1.000000 2.893389 -1.727123 +v 1.000000 3.001642 -1.789623 +v 1.250000 2.830889 -1.835376 +v 1.250000 2.939142 -1.897876 +v 1.250000 2.893389 -1.727123 +v 1.250000 3.001642 -1.789623 +v -1.250000 2.937500 -1.562500 +v -1.250000 3.062500 -1.562500 +v -1.250000 2.937500 -1.437500 +v -1.250000 3.062500 -1.437500 +v -1.000000 2.937500 -1.562500 +v -1.000000 3.062500 -1.562500 +v -1.000000 2.937500 -1.437500 +v -1.000000 3.062500 -1.437500 +v -1.250000 1.812500 -1.437500 +v -1.250000 1.687500 -1.437500 +v -1.250000 1.812500 -1.562500 +v -1.250000 1.687500 -1.562500 +v -1.000000 1.812500 -1.437500 +v -1.000000 1.687500 -1.437500 +v -1.000000 1.812500 -1.562500 +v -1.000000 1.687500 -1.562500 +v -1.250000 2.437500 -0.937500 +v -1.250000 2.437500 -0.812500 +v -1.250000 2.312500 -0.937500 +v -1.250000 2.312500 -0.812500 +v -1.000000 2.437500 -0.937500 +v -1.000000 2.437500 -0.812500 +v -1.000000 2.312500 -0.937500 +v -1.000000 2.312500 -0.812500 +v -1.250000 2.312500 -2.062500 +v -1.250000 2.312500 -2.187500 +v -1.250000 2.437500 -2.062500 +v -1.250000 2.437500 -2.187500 +v -1.000000 2.312500 -2.062500 +v -1.000000 2.312500 -2.187500 +v -1.000000 2.437500 -2.062500 +v -1.000000 2.437500 -2.187500 +v -1.250000 2.893389 -1.272877 +v -1.250000 3.001642 -1.210377 +v -1.250000 2.830889 -1.164623 +v -1.250000 2.939142 -1.102123 +v -1.000000 2.893389 -1.272877 +v -1.000000 3.001642 -1.210377 +v -1.000000 2.830889 -1.164623 +v -1.000000 2.939142 -1.102123 +v -1.250000 1.856611 -1.727123 +v -1.250000 1.748358 -1.789623 +v -1.250000 1.919111 -1.835376 +v -1.250000 1.810858 -1.897876 +v -1.000000 1.856611 -1.727123 +v -1.000000 1.748358 -1.789623 +v -1.000000 1.919111 -1.835376 +v -1.000000 1.810858 -1.897876 +v -1.250000 2.147877 -0.981611 +v -1.250000 2.085377 -0.873358 +v -1.250000 2.039624 -1.044111 +v -1.250000 1.977124 -0.935858 +v -1.000000 2.147877 -0.981611 +v -1.000000 2.085377 -0.873358 +v -1.000000 2.039624 -1.044111 +v -1.000000 1.977124 -0.935858 +v -1.250000 2.602123 -2.018389 +v -1.250000 2.664623 -2.126642 +v -1.250000 2.710377 -1.955889 +v -1.250000 2.772877 -2.064142 +v -1.000000 2.602123 -2.018389 +v -1.000000 2.664623 -2.126642 +v -1.000000 2.710377 -1.955889 +v -1.000000 2.772877 -2.064142 +v -1.250000 2.710377 -1.044111 +v -1.250000 2.772877 -0.935858 +v -1.250000 2.602124 -0.981611 +v -1.250000 2.664623 -0.873358 +v -1.000000 2.710377 -1.044111 +v -1.000000 2.772877 -0.935858 +v -1.000000 2.602124 -0.981611 +v -1.000000 2.664623 -0.873358 +v -1.250000 2.039624 -1.955889 +v -1.250000 1.977124 -2.064142 +v -1.250000 2.147877 -2.018389 +v -1.250000 2.085377 -2.126642 +v -1.000000 2.039624 -1.955889 +v -1.000000 1.977124 -2.064142 +v -1.000000 2.147877 -2.018389 +v -1.000000 2.085377 -2.126642 +v -1.250000 1.919111 -1.164623 +v -1.250000 1.810858 -1.102123 +v -1.250000 1.856611 -1.272877 +v -1.250000 1.748358 -1.210377 +v -1.000000 1.919111 -1.164623 +v -1.000000 1.810858 -1.102123 +v -1.000000 1.856611 -1.272877 +v -1.000000 1.748358 -1.210377 +v -1.250000 2.830889 -1.835376 +v -1.250000 2.939142 -1.897876 +v -1.250000 2.893389 -1.727123 +v -1.250000 3.001642 -1.789623 +v -1.000000 2.830889 -1.835376 +v -1.000000 2.939142 -1.897876 +v -1.000000 2.893389 -1.727123 +v -1.000000 3.001642 -1.789623 +v 1.911612 2.250000 -1.661612 +v 2.000000 2.250000 -1.625000 +v 2.088388 2.250000 -1.661612 +v 2.125000 2.250000 -1.750000 +v 2.088388 2.250000 -1.838388 +v 2.000000 2.250000 -1.875000 +v 1.911612 2.250000 -1.838388 +v 1.875000 2.250000 -1.750000 +v 1.911612 2.250000 -1.161612 +v 2.000000 2.250000 -1.125000 +v 2.088388 2.250000 -1.161612 +v 2.125000 2.250000 -1.250000 +v 2.088388 2.250000 -1.338388 +v 2.000000 2.250000 -1.375000 +v 1.911612 2.250000 -1.338388 +v 1.875000 2.250000 -1.250000 +v 1.900888 2.275888 -1.338388 +v 1.963388 2.338388 -1.375000 +v 2.025888 2.400888 -1.338388 +v 2.051777 2.426777 -1.250000 +v 2.025888 2.400888 -1.161612 +v 1.963388 2.338388 -1.125000 +v 1.900888 2.275888 -1.161612 +v 1.900888 2.275888 -1.838388 +v 1.963388 2.338388 -1.875000 +v 2.025888 2.400888 -1.838388 +v 2.051777 2.426777 -1.750000 +v 2.025888 2.400888 -1.661612 +v 1.963388 2.338388 -1.625000 +v 1.900888 2.275888 -1.661612 +v 1.875000 2.286612 -1.338388 +v 1.875000 2.375000 -1.375000 +v 1.875000 2.463388 -1.338388 +v 1.875000 2.500000 -1.250000 +v 1.875000 2.463388 -1.161612 +v 1.875000 2.375000 -1.125000 +v 1.875000 2.286612 -1.161612 +v 1.875000 2.286612 -1.838388 +v 1.875000 2.375000 -1.875000 +v 1.875000 2.463388 -1.838388 +v 1.875000 2.500000 -1.750000 +v 1.875000 2.463388 -1.661612 +v 1.875000 2.375000 -1.625000 +v 1.875000 2.286612 -1.661612 +v 1.750000 2.250000 -1.250000 +v 1.750000 2.250000 -1.750000 +v 1.750000 2.286612 -1.338388 +v 1.750000 2.375000 -1.375000 +v 1.750000 2.463388 -1.338388 +v 1.750000 2.500000 -1.250000 +v 1.750000 2.463388 -1.161612 +v 1.750000 2.375000 -1.125000 +v 1.750000 2.286612 -1.161612 +v 1.750000 2.286612 -1.838388 +v 1.750000 2.375000 -1.875000 +v 1.750000 2.463388 -1.838388 +v 1.750000 2.500000 -1.750000 +v 1.750000 2.463388 -1.661612 +v 1.750000 2.375000 -1.625000 +v 1.750000 2.286612 -1.661612 +v 1.911612 1.625000 -1.661612 +v 2.000000 1.625000 -1.625000 +v 2.088388 1.625000 -1.661612 +v 2.125000 1.625000 -1.750000 +v 2.088388 1.625000 -1.838388 +v 2.000000 1.625000 -1.875000 +v 1.911612 1.625000 -1.838388 +v 1.875000 1.625000 -1.750000 +v 1.911612 1.625000 -1.161612 +v 2.000000 1.625000 -1.125000 +v 2.088388 1.625000 -1.161612 +v 2.125000 1.625000 -1.250000 +v 2.088388 1.625000 -1.338388 +v 2.000000 1.625000 -1.375000 +v 1.911612 1.625000 -1.338388 +v 1.875000 1.625000 -1.250000 +v 1.750000 1.562500 -0.250000 +v 1.661612 1.525888 -0.250000 +v 1.625000 1.437500 -0.250000 +v 1.661612 1.349112 -0.250000 +v 1.750000 1.312500 -0.250000 +v 1.838388 1.349112 -0.250000 +v 1.875000 1.437500 -0.250000 +v 1.838388 1.525888 -0.250000 +v 1.750000 1.562500 -0.750000 +v 1.661612 1.525888 -0.750000 +v 1.625000 1.437500 -0.750000 +v 1.661612 1.349112 -0.750000 +v 1.750000 1.312500 -0.750000 +v 1.838388 1.349112 -0.750000 +v 1.875000 1.437500 -0.750000 +v 1.838388 1.525888 -0.750000 +v 1.750000 1.187500 -0.250000 +v 1.661612 1.150888 -0.250000 +v 1.625000 1.062500 -0.250000 +v 1.661612 0.974112 -0.250000 +v 1.750000 0.937500 -0.250000 +v 1.838388 0.974112 -0.250000 +v 1.875000 1.062500 -0.250000 +v 1.838388 1.150888 -0.250000 +v 1.750000 1.187500 -0.750000 +v 1.661612 1.150888 -0.750000 +v 1.625000 1.062500 -0.750000 +v 1.661612 0.974112 -0.750000 +v 1.750000 0.937500 -0.750000 +v 1.838388 0.974112 -0.750000 +v 1.875000 1.062500 -0.750000 +v 1.838388 1.150888 -0.750000 +v 1.250000 1.562500 -0.250000 +v 1.161612 1.525888 -0.250000 +v 1.125000 1.437500 -0.250000 +v 1.161612 1.349112 -0.250000 +v 1.250000 1.312500 -0.250000 +v 1.338388 1.349112 -0.250000 +v 1.375000 1.437500 -0.250000 +v 1.338388 1.525888 -0.250000 +v 1.250000 1.562500 -0.750000 +v 1.161612 1.525888 -0.750000 +v 1.125000 1.437500 -0.750000 +v 1.161612 1.349112 -0.750000 +v 1.250000 1.312500 -0.750000 +v 1.338388 1.349112 -0.750000 +v 1.375000 1.437500 -0.750000 +v 1.338388 1.525888 -0.750000 +v 1.250000 1.187500 -0.250000 +v 1.161612 1.150888 -0.250000 +v 1.125000 1.062500 -0.250000 +v 1.161612 0.974112 -0.250000 +v 1.250000 0.937500 -0.250000 +v 1.338388 0.974112 -0.250000 +v 1.375000 1.062500 -0.250000 +v 1.338388 1.150888 -0.250000 +v 1.250000 1.187500 -0.750000 +v 1.161612 1.150888 -0.750000 +v 1.125000 1.062500 -0.750000 +v 1.161612 0.974112 -0.750000 +v 1.250000 0.937500 -0.750000 +v 1.338388 0.974112 -0.750000 +v 1.375000 1.062500 -0.750000 +v 1.338388 1.150888 -0.750000 +v -0.750000 2.937500 -1.562500 +v -0.750000 3.062500 -1.562500 +v -0.750000 2.937500 -1.437500 +v -0.750000 3.062500 -1.437500 +v -0.750000 1.812500 -1.437500 +v -0.750000 1.687500 -1.437500 +v -0.750000 1.812500 -1.562500 +v -0.750000 1.687500 -1.562500 +v -0.750000 2.437500 -0.937500 +v -0.750000 2.437500 -0.812500 +v -0.750000 2.312500 -0.937500 +v -0.750000 2.312500 -0.812500 +v -0.750000 2.312500 -2.062500 +v -0.750000 2.312500 -2.187500 +v -0.750000 2.437500 -2.062500 +v -0.750000 2.437500 -2.187500 +v -0.750000 2.893389 -1.272877 +v -0.750000 3.001642 -1.210377 +v -0.750000 2.830889 -1.164623 +v -0.750000 2.939142 -1.102123 +v -0.750000 1.856611 -1.727123 +v -0.750000 1.748358 -1.789623 +v -0.750000 1.919111 -1.835376 +v -0.750000 1.810858 -1.897876 +v -0.750000 2.147877 -0.981611 +v -0.750000 2.085377 -0.873358 +v -0.750000 2.039624 -1.044111 +v -0.750000 1.977124 -0.935858 +v -0.750000 2.602123 -2.018389 +v -0.750000 2.664623 -2.126642 +v -0.750000 2.710377 -1.955889 +v -0.750000 2.772877 -2.064142 +v -0.750000 2.710377 -1.044111 +v -0.750000 2.772877 -0.935858 +v -0.750000 2.602124 -0.981611 +v -0.750000 2.664623 -0.873358 +v -0.750000 2.039624 -1.955889 +v -0.750000 1.977124 -2.064142 +v -0.750000 2.147877 -2.018389 +v -0.750000 2.085377 -2.126642 +v -0.750000 1.919111 -1.164623 +v -0.750000 1.810858 -1.102123 +v -0.750000 1.856611 -1.272877 +v -0.750000 1.748358 -1.210377 +v -0.750000 2.830889 -1.835376 +v -0.750000 2.939142 -1.897876 +v -0.750000 2.893389 -1.727123 +v -0.750000 3.001642 -1.789623 +v 0.750000 2.937500 -1.562500 +v 0.750000 3.062500 -1.562500 +v 0.750000 2.937500 -1.437500 +v 0.750000 3.062500 -1.437500 +v 0.750000 1.812500 -1.437500 +v 0.750000 1.687500 -1.437500 +v 0.750000 1.812500 -1.562500 +v 0.750000 1.687500 -1.562500 +v 0.750000 2.437500 -0.937500 +v 0.750000 2.437500 -0.812500 +v 0.750000 2.312500 -0.937500 +v 0.750000 2.312500 -0.812500 +v 0.750000 2.312500 -2.062500 +v 0.750000 2.312500 -2.187500 +v 0.750000 2.437500 -2.062500 +v 0.750000 2.437500 -2.187500 +v 0.750000 2.893389 -1.272877 +v 0.750000 3.001642 -1.210377 +v 0.750000 2.830889 -1.164623 +v 0.750000 2.939142 -1.102123 +v 0.750000 1.856611 -1.727123 +v 0.750000 1.748358 -1.789623 +v 0.750000 1.919111 -1.835376 +v 0.750000 1.810858 -1.897876 +v 0.750000 2.147877 -0.981611 +v 0.750000 2.085377 -0.873358 +v 0.750000 2.039624 -1.044111 +v 0.750000 1.977124 -0.935858 +v 0.750000 2.602123 -2.018389 +v 0.750000 2.664623 -2.126642 +v 0.750000 2.710377 -1.955889 +v 0.750000 2.772877 -2.064142 +v 0.750000 2.710377 -1.044111 +v 0.750000 2.772877 -0.935858 +v 0.750000 2.602124 -0.981611 +v 0.750000 2.664623 -0.873358 +v 0.750000 2.039624 -1.955889 +v 0.750000 1.977124 -2.064142 +v 0.750000 2.147877 -2.018389 +v 0.750000 2.085377 -2.126642 +v 0.750000 1.919111 -1.164623 +v 0.750000 1.810858 -1.102123 +v 0.750000 1.856611 -1.272877 +v 0.750000 1.748358 -1.210377 +v 0.750000 2.830889 -1.835376 +v 0.750000 2.939142 -1.897876 +v 0.750000 2.893389 -1.727123 +v 0.750000 3.001642 -1.789623 +v 0.875000 0.125000 2.500000 +v 1.125000 0.125000 2.500000 +v 0.875000 0.125000 -2.500000 +v 1.125000 0.125000 -2.500000 +v 0.875000 0.250000 -2.500000 +v 0.875000 0.250000 2.500000 +v 1.125000 0.250000 2.500000 +v 1.125000 0.250000 -2.500000 +v -0.125000 0.125000 2.500000 +v 0.125000 0.125000 2.500000 +v -0.125000 0.125000 -2.500000 +v 0.125000 0.125000 -2.500000 +v -0.125000 0.250000 -2.500000 +v -0.125000 0.250000 2.500000 +v 0.125000 0.250000 2.500000 +v 0.125000 0.250000 -2.500000 +v -1.125000 0.125000 2.500000 +v -0.875000 0.125000 2.500000 +v -1.125000 0.125000 -2.500000 +v -0.875000 0.125000 -2.500000 +v -1.125000 0.250000 -2.500000 +v -1.125000 0.250000 2.500000 +v -0.875000 0.250000 2.500000 +v -0.875000 0.250000 -2.500000 +v -2.125000 0.125000 2.500000 +v -1.875000 0.125000 2.500000 +v -2.125000 0.125000 -2.500000 +v -1.875000 0.125000 -2.500000 +v -2.125000 0.250000 -2.500000 +v -2.125000 0.250000 2.500000 +v -1.875000 0.250000 2.500000 +v -1.875000 0.250000 -2.500000 +v 2.500000 0.687500 -0.812500 +v 2.500000 0.312500 -0.812500 +v 2.500000 0.687500 -1.187500 +v 2.500000 0.312500 -1.187500 +v 2.375000 0.625000 -1.125000 +v 2.375000 0.625000 -0.875000 +v 2.375000 0.375000 -0.875000 +v 2.375000 0.375000 -1.125000 +v 2.375000 0.687500 -1.187500 +v 2.375000 0.687500 -0.812500 +v 2.375000 0.312500 -0.812500 +v 2.375000 0.312500 -1.187500 +v 2.250000 0.625000 -1.125000 +v 2.250000 0.625000 -0.875000 +v 2.250000 0.375000 -0.875000 +v 2.250000 0.375000 -1.125000 +v 2.500000 0.687500 -1.812500 +v 2.500000 0.312500 -1.812500 +v 2.500000 0.687500 -2.187500 +v 2.500000 0.312500 -2.187500 +v 2.375000 0.625000 -2.125000 +v 2.375000 0.625000 -1.875000 +v 2.375000 0.375000 -1.875000 +v 2.375000 0.375000 -2.125000 +v 2.375000 0.687500 -2.187500 +v 2.375000 0.687500 -1.812500 +v 2.375000 0.312500 -1.812500 +v 2.375000 0.312500 -2.187500 +v 2.250000 0.625000 -2.125000 +v 2.250000 0.625000 -1.875000 +v 2.250000 0.375000 -1.875000 +v 2.250000 0.375000 -2.125000 +v 2.500000 0.687500 2.187500 +v 2.500000 0.312500 2.187500 +v 2.500000 0.687500 1.812500 +v 2.500000 0.312500 1.812500 +v 2.375000 0.625000 1.875000 +v 2.375000 0.625000 2.125000 +v 2.375000 0.375000 2.125000 +v 2.375000 0.375000 1.875000 +v 2.375000 0.687500 1.812500 +v 2.375000 0.687500 2.187500 +v 2.375000 0.312500 2.187500 +v 2.375000 0.312500 1.812500 +v 2.250000 0.625000 1.875000 +v 2.250000 0.625000 2.125000 +v 2.250000 0.375000 2.125000 +v 2.250000 0.375000 1.875000 +v 2.500000 0.687500 1.187500 +v 2.500000 0.312500 1.187500 +v 2.500000 0.687500 0.812500 +v 2.500000 0.312500 0.812500 +v 2.375000 0.625000 0.875000 +v 2.375000 0.625000 1.125000 +v 2.375000 0.375000 1.125000 +v 2.375000 0.375000 0.875000 +v 2.375000 0.687500 0.812500 +v 2.375000 0.687500 1.187500 +v 2.375000 0.312500 1.187500 +v 2.375000 0.312500 0.812500 +v 2.250000 0.625000 0.875000 +v 2.250000 0.625000 1.125000 +v 2.250000 0.375000 1.125000 +v 2.250000 0.375000 0.875000 +v -2.500000 0.687500 -0.187500 +v -2.500000 0.312500 -0.187500 +v -2.500000 0.687500 0.187500 +v -2.500000 0.312500 0.187500 +v -2.375000 0.625000 0.125000 +v -2.375000 0.625000 -0.125000 +v -2.375000 0.375000 -0.125000 +v -2.375000 0.375000 0.125000 +v -2.375000 0.687500 0.187500 +v -2.375000 0.687500 -0.187500 +v -2.375000 0.312500 -0.187500 +v -2.375000 0.312500 0.187500 +v -2.250000 0.625000 0.125000 +v -2.250000 0.625000 -0.125000 +v -2.250000 0.375000 -0.125000 +v -2.250000 0.375000 0.125000 +v -2.500000 0.687500 0.812500 +v -2.500000 0.312500 0.812500 +v -2.500000 0.687500 1.187500 +v -2.500000 0.312500 1.187500 +v -2.375000 0.625000 1.125000 +v -2.375000 0.625000 0.875000 +v -2.375000 0.375000 0.875000 +v -2.375000 0.375000 1.125000 +v -2.375000 0.687500 1.187500 +v -2.375000 0.687500 0.812500 +v -2.375000 0.312500 0.812500 +v -2.375000 0.312500 1.187500 +v -2.250000 0.625000 1.125000 +v -2.250000 0.625000 0.875000 +v -2.250000 0.375000 0.875000 +v -2.250000 0.375000 1.125000 +v -2.500000 0.687500 1.812500 +v -2.500000 0.312500 1.812500 +v -2.500000 0.687500 2.187500 +v -2.500000 0.312500 2.187500 +v -2.375000 0.625000 2.125000 +v -2.375000 0.625000 1.875000 +v -2.375000 0.375000 1.875000 +v -2.375000 0.375000 2.125000 +v -2.375000 0.687500 2.187500 +v -2.375000 0.687500 1.812500 +v -2.375000 0.312500 1.812500 +v -2.375000 0.312500 2.187500 +v -2.250000 0.625000 2.125000 +v -2.250000 0.625000 1.875000 +v -2.250000 0.375000 1.875000 +v -2.250000 0.375000 2.125000 +v -2.500000 0.687500 -2.187500 +v -2.500000 0.312500 -2.187500 +v -2.500000 0.687500 -1.812500 +v -2.500000 0.312500 -1.812500 +v -2.375000 0.625000 -1.875000 +v -2.375000 0.625000 -2.125000 +v -2.375000 0.375000 -2.125000 +v -2.375000 0.375000 -1.875000 +v -2.375000 0.687500 -1.812500 +v -2.375000 0.687500 -2.187500 +v -2.375000 0.312500 -2.187500 +v -2.375000 0.312500 -1.812500 +v -2.250000 0.625000 -1.875000 +v -2.250000 0.625000 -2.125000 +v -2.250000 0.375000 -2.125000 +v -2.250000 0.375000 -1.875000 +v -2.500000 0.687500 -1.187500 +v -2.500000 0.312500 -1.187500 +v -2.500000 0.687500 -0.812500 +v -2.500000 0.312500 -0.812500 +v -2.375000 0.625000 -0.875000 +v -2.375000 0.625000 -1.125000 +v -2.375000 0.375000 -1.125000 +v -2.375000 0.375000 -0.875000 +v -2.375000 0.687500 -0.812500 +v -2.375000 0.687500 -1.187500 +v -2.375000 0.312500 -1.187500 +v -2.375000 0.312500 -0.812500 +v -2.250000 0.625000 -0.875000 +v -2.250000 0.625000 -1.125000 +v -2.250000 0.375000 -1.125000 +v -2.250000 0.375000 -0.875000 +v 0.187500 0.687500 -2.500000 +v 0.187500 0.312500 -2.500000 +v -0.187500 0.687500 -2.500000 +v -0.187500 0.312500 -2.500000 +v -0.125000 0.625000 -2.375000 +v 0.125000 0.625000 -2.375000 +v 0.125000 0.375000 -2.375000 +v -0.125000 0.375000 -2.375000 +v -0.187500 0.687500 -2.375000 +v 0.187500 0.687500 -2.375000 +v 0.187500 0.312500 -2.375000 +v -0.187500 0.312500 -2.375000 +v -0.125000 0.625000 -2.250000 +v 0.125000 0.625000 -2.250000 +v 0.125000 0.375000 -2.250000 +v -0.125000 0.375000 -2.250000 +v -0.812500 0.687500 -2.500000 +v -0.812500 0.312500 -2.500000 +v -1.187500 0.687500 -2.500000 +v -1.187500 0.312500 -2.500000 +v -1.125000 0.625000 -2.375000 +v -0.875000 0.625000 -2.375000 +v -0.875000 0.375000 -2.375000 +v -1.125000 0.375000 -2.375000 +v -1.187500 0.687500 -2.375000 +v -0.812500 0.687500 -2.375000 +v -0.812500 0.312500 -2.375000 +v -1.187500 0.312500 -2.375000 +v -1.125000 0.625000 -2.250000 +v -0.875000 0.625000 -2.250000 +v -0.875000 0.375000 -2.250000 +v -1.125000 0.375000 -2.250000 +v -1.812500 0.687500 -2.500000 +v -1.812500 0.312500 -2.500000 +v -2.187500 0.687500 -2.500000 +v -2.187500 0.312500 -2.500000 +v -2.125000 0.625000 -2.375000 +v -1.875000 0.625000 -2.375000 +v -1.875000 0.375000 -2.375000 +v -2.125000 0.375000 -2.375000 +v -2.187500 0.687500 -2.375000 +v -1.812500 0.687500 -2.375000 +v -1.812500 0.312500 -2.375000 +v -2.187500 0.312500 -2.375000 +v -2.125000 0.625000 -2.250000 +v -1.875000 0.625000 -2.250000 +v -1.875000 0.375000 -2.250000 +v -2.125000 0.375000 -2.250000 +v 2.187500 0.687500 -2.500000 +v 2.187500 0.312500 -2.500000 +v 1.812500 0.687500 -2.500000 +v 1.812500 0.312500 -2.500000 +v 1.875000 0.625000 -2.375000 +v 2.125000 0.625000 -2.375000 +v 2.125000 0.375000 -2.375000 +v 1.875000 0.375000 -2.375000 +v 1.812500 0.687500 -2.375000 +v 2.187500 0.687500 -2.375000 +v 2.187500 0.312500 -2.375000 +v 1.812500 0.312500 -2.375000 +v 1.875000 0.625000 -2.250000 +v 2.125000 0.625000 -2.250000 +v 2.125000 0.375000 -2.250000 +v 1.875000 0.375000 -2.250000 +v 1.187500 0.687500 -2.500000 +v 1.187500 0.312500 -2.500000 +v 0.812500 0.687500 -2.500000 +v 0.812500 0.312500 -2.500000 +v 0.875000 0.625000 -2.375000 +v 1.125000 0.625000 -2.375000 +v 1.125000 0.375000 -2.375000 +v 0.875000 0.375000 -2.375000 +v 0.812500 0.687500 -2.375000 +v 1.187500 0.687500 -2.375000 +v 1.187500 0.312500 -2.375000 +v 0.812500 0.312500 -2.375000 +v 0.875000 0.625000 -2.250000 +v 1.125000 0.625000 -2.250000 +v 1.125000 0.375000 -2.250000 +v 0.875000 0.375000 -2.250000 +v -0.187500 0.687500 2.500000 +v -0.187500 0.312500 2.500000 +v 0.187500 0.687500 2.500000 +v 0.187500 0.312500 2.500000 +v 0.125000 0.625000 2.375000 +v -0.125000 0.625000 2.375000 +v -0.125000 0.375000 2.375000 +v 0.125000 0.375000 2.375000 +v 0.187500 0.687500 2.375000 +v -0.187500 0.687500 2.375000 +v -0.187500 0.312500 2.375000 +v 0.187500 0.312500 2.375000 +v 0.125000 0.625000 2.250000 +v -0.125000 0.625000 2.250000 +v -0.125000 0.375000 2.250000 +v 0.125000 0.375000 2.250000 +v 0.812500 0.687500 2.500000 +v 0.812500 0.312500 2.500000 +v 1.187500 0.687500 2.500000 +v 1.187500 0.312500 2.500000 +v 1.125000 0.625000 2.375000 +v 0.875000 0.625000 2.375000 +v 0.875000 0.375000 2.375000 +v 1.125000 0.375000 2.375000 +v 1.187500 0.687500 2.375000 +v 0.812500 0.687500 2.375000 +v 0.812500 0.312500 2.375000 +v 1.187500 0.312500 2.375000 +v 1.125000 0.625000 2.250000 +v 0.875000 0.625000 2.250000 +v 0.875000 0.375000 2.250000 +v 1.125000 0.375000 2.250000 +v 1.812500 0.687500 2.500000 +v 1.812500 0.312500 2.500000 +v 2.187500 0.687500 2.500000 +v 2.187500 0.312500 2.500000 +v 2.125000 0.625000 2.375000 +v 1.875000 0.625000 2.375000 +v 1.875000 0.375000 2.375000 +v 2.125000 0.375000 2.375000 +v 2.187500 0.687500 2.375000 +v 1.812500 0.687500 2.375000 +v 1.812500 0.312500 2.375000 +v 2.187500 0.312500 2.375000 +v 2.125000 0.625000 2.250000 +v 1.875000 0.625000 2.250000 +v 1.875000 0.375000 2.250000 +v 2.125000 0.375000 2.250000 +v -2.187500 0.687500 2.500000 +v -2.187500 0.312500 2.500000 +v -1.812500 0.687500 2.500000 +v -1.812500 0.312500 2.500000 +v -1.875000 0.625000 2.375000 +v -2.125000 0.625000 2.375000 +v -2.125000 0.375000 2.375000 +v -1.875000 0.375000 2.375000 +v -1.812500 0.687500 2.375000 +v -2.187500 0.687500 2.375000 +v -2.187500 0.312500 2.375000 +v -1.812500 0.312500 2.375000 +v -1.875000 0.625000 2.250000 +v -2.125000 0.625000 2.250000 +v -2.125000 0.375000 2.250000 +v -1.875000 0.375000 2.250000 +v -1.187500 0.687500 2.500000 +v -1.187500 0.312500 2.500000 +v -0.812500 0.687500 2.500000 +v -0.812500 0.312500 2.500000 +v -0.875000 0.625000 2.375000 +v -1.125000 0.625000 2.375000 +v -1.125000 0.375000 2.375000 +v -0.875000 0.375000 2.375000 +v -0.812500 0.687500 2.375000 +v -1.187500 0.687500 2.375000 +v -1.187500 0.312500 2.375000 +v -0.812500 0.312500 2.375000 +v -0.875000 0.625000 2.250000 +v -1.125000 0.625000 2.250000 +v -1.125000 0.375000 2.250000 +v -0.875000 0.375000 2.250000 +v -0.250000 3.750000 1.500000 +v -0.338388 3.750000 1.536612 +v -0.375000 3.750000 1.625000 +v -0.338388 3.750000 1.713388 +v -0.250000 3.750000 1.750000 +v -0.161611 3.750000 1.713388 +v -0.125000 3.750000 1.625000 +v -0.161611 3.750000 1.536612 +v -0.250000 4.000000 1.500000 +v -0.338388 4.000000 1.536612 +v -0.375000 4.000000 1.625000 +v -0.338388 4.000000 1.713388 +v -0.250000 4.000000 1.750000 +v -0.161611 4.000000 1.713388 +v -0.125000 4.000000 1.625000 +v -0.161611 4.000000 1.536612 +v -0.213388 4.088388 1.500000 +v -0.275888 4.150888 1.536612 +v -0.301776 4.176777 1.625000 +v -0.275888 4.150888 1.713388 +v -0.213388 4.088388 1.750000 +v -0.150888 4.025888 1.713388 +v -0.150888 4.025888 1.536612 +v -0.125000 4.125000 1.500000 +v -0.125000 4.213388 1.536612 +v -0.125000 4.250000 1.625000 +v -0.125000 4.213388 1.713388 +v -0.125000 4.125000 1.750000 +v -0.125000 4.036612 1.713388 +v -0.125000 4.036612 1.536612 +v 1.250000 1.750000 1.750000 +v 1.338388 1.750000 1.713388 +v 1.375000 1.750000 1.625000 +v 1.338388 1.750000 1.536612 +v 1.250000 1.750000 1.500000 +v 1.161612 1.750000 1.536612 +v 1.125000 1.750000 1.625000 +v 1.161612 1.750000 1.713388 +v 1.250000 4.000000 1.750000 +v 1.338388 4.000000 1.713388 +v 1.375000 4.000000 1.625000 +v 1.338388 4.000000 1.536612 +v 1.250000 4.000000 1.500000 +v 1.161612 4.000000 1.536612 +v 1.125000 4.000000 1.625000 +v 1.161612 4.000000 1.713388 +v 1.213388 4.088388 1.750000 +v 1.275888 4.150888 1.713388 +v 1.301777 4.176777 1.625000 +v 1.275888 4.150888 1.536612 +v 1.213388 4.088388 1.500000 +v 1.150888 4.025888 1.536612 +v 1.150888 4.025888 1.713388 +v 1.125000 4.125000 1.750000 +v 1.125000 4.213388 1.713388 +v 1.125000 4.250000 1.625000 +v 1.125000 4.213388 1.536612 +v 1.125000 4.125000 1.500000 +v 1.125000 4.036612 1.536612 +v 1.125000 4.036612 1.713388 +v -1.750000 3.750000 1.500000 +v -1.838388 3.750000 1.536612 +v -1.875000 3.750000 1.625000 +v -1.838388 3.750000 1.713388 +v -1.750000 3.750000 1.750000 +v -1.661611 3.750000 1.713388 +v -1.625000 3.750000 1.625000 +v -1.661611 3.750000 1.536612 +v -1.750000 4.250000 1.500000 +v -1.838388 4.250000 1.536612 +v -1.875000 4.250000 1.625000 +v -1.838388 4.250000 1.713388 +v -1.750000 4.250000 1.750000 +v -1.661611 4.250000 1.713388 +v -1.625000 4.250000 1.625000 +v -1.661611 4.250000 1.536612 +v -1.713388 4.338388 1.500000 +v -1.775888 4.400888 1.536612 +v -1.801777 4.426777 1.625000 +v -1.775888 4.400888 1.713388 +v -1.713388 4.338388 1.750000 +v -1.650888 4.275888 1.713388 +v -1.650888 4.275888 1.536612 +v -1.625000 4.375000 1.500000 +v -1.625000 4.463388 1.536612 +v -1.625000 4.500000 1.625000 +v -1.625000 4.463388 1.713388 +v -1.625000 4.375000 1.750000 +v -1.625000 4.286612 1.713388 +v -1.625000 4.286612 1.536612 +v 1.750000 1.750000 1.750000 +v 1.838388 1.750000 1.713388 +v 1.875000 1.750000 1.625000 +v 1.838388 1.750000 1.536612 +v 1.750000 1.750000 1.500000 +v 1.661612 1.750000 1.536612 +v 1.625000 1.750000 1.625000 +v 1.661612 1.750000 1.713388 +v 1.750000 4.250000 1.750000 +v 1.838388 4.250000 1.713388 +v 1.875000 4.250000 1.625000 +v 1.838388 4.250000 1.536612 +v 1.750000 4.250000 1.500000 +v 1.661612 4.250000 1.536612 +v 1.625000 4.250000 1.625000 +v 1.661612 4.250000 1.713388 +v 1.713388 4.338388 1.750000 +v 1.775888 4.400888 1.713388 +v 1.801777 4.426777 1.625000 +v 1.775888 4.400888 1.536612 +v 1.713388 4.338388 1.500000 +v 1.650888 4.275888 1.536612 +v 1.650888 4.275888 1.713388 +v 1.625000 4.375000 1.750000 +v 1.625000 4.463388 1.713388 +v 1.625000 4.500000 1.625000 +v 1.625000 4.463388 1.536612 +v 1.625000 4.375000 1.500000 +v 1.625000 4.286612 1.536612 +v 1.625000 4.286612 1.713388 +v -0.250000 3.750000 0.250000 +v -0.338388 3.750000 0.286612 +v -0.375000 3.750000 0.375000 +v -0.338388 3.750000 0.463388 +v -0.250000 3.750000 0.500000 +v -0.161611 3.750000 0.463388 +v -0.125000 3.750000 0.375000 +v -0.161611 3.750000 0.286612 +v -0.250000 4.000000 0.250000 +v -0.338388 4.000000 0.286612 +v -0.375000 4.000000 0.375000 +v -0.338388 4.000000 0.463388 +v -0.250000 4.000000 0.500000 +v -0.161611 4.000000 0.463388 +v -0.125000 4.000000 0.375000 +v -0.161611 4.000000 0.286612 +v -0.213388 4.088388 0.250000 +v -0.275888 4.150888 0.286612 +v -0.301776 4.176777 0.375000 +v -0.275888 4.150888 0.463388 +v -0.213388 4.088388 0.500000 +v -0.150888 4.025888 0.463388 +v -0.150888 4.025888 0.286612 +v -0.125000 4.125000 0.250000 +v -0.125000 4.213388 0.286612 +v -0.125000 4.250000 0.375000 +v -0.125000 4.213388 0.463388 +v -0.125000 4.125000 0.500000 +v -0.125000 4.036612 0.463388 +v -0.125000 4.036612 0.286612 +v 1.250000 1.750000 0.500000 +v 1.338388 1.750000 0.463388 +v 1.375000 1.750000 0.375000 +v 1.338388 1.750000 0.286612 +v 1.250000 1.750000 0.250000 +v 1.161612 1.750000 0.286612 +v 1.125000 1.750000 0.375000 +v 1.161612 1.750000 0.463388 +v 1.250000 4.000000 0.500000 +v 1.338388 4.000000 0.463388 +v 1.375000 4.000000 0.375000 +v 1.338388 4.000000 0.286612 +v 1.250000 4.000000 0.250000 +v 1.161612 4.000000 0.286612 +v 1.125000 4.000000 0.375000 +v 1.161612 4.000000 0.463388 +v 1.213388 4.088388 0.500000 +v 1.275888 4.150888 0.463388 +v 1.301777 4.176777 0.375000 +v 1.275888 4.150888 0.286612 +v 1.213388 4.088388 0.250000 +v 1.150888 4.025888 0.286612 +v 1.150888 4.025888 0.463388 +v 1.125000 4.125000 0.500000 +v 1.125000 4.213388 0.463388 +v 1.125000 4.250000 0.375000 +v 1.125000 4.213388 0.286612 +v 1.125000 4.125000 0.250000 +v 1.125000 4.036612 0.286612 +v 1.125000 4.036612 0.463388 +v -1.750000 3.750000 0.250000 +v -1.838388 3.750000 0.286612 +v -1.875000 3.750000 0.375000 +v -1.838388 3.750000 0.463388 +v -1.750000 3.750000 0.500000 +v -1.661611 3.750000 0.463388 +v -1.625000 3.750000 0.375000 +v -1.661611 3.750000 0.286612 +v -1.750000 4.250000 0.250000 +v -1.838388 4.250000 0.286612 +v -1.875000 4.250000 0.375000 +v -1.838388 4.250000 0.463388 +v -1.750000 4.250000 0.500000 +v -1.661611 4.250000 0.463388 +v -1.625000 4.250000 0.375000 +v -1.661611 4.250000 0.286612 +v -1.713388 4.338388 0.250000 +v -1.775888 4.400888 0.286612 +v -1.801777 4.426777 0.375000 +v -1.775888 4.400888 0.463388 +v -1.713388 4.338388 0.500000 +v -1.650888 4.275888 0.463388 +v -1.650888 4.275888 0.286612 +v -1.625000 4.375000 0.250000 +v -1.625000 4.463388 0.286612 +v -1.625000 4.500000 0.375000 +v -1.625000 4.463388 0.463388 +v -1.625000 4.375000 0.500000 +v -1.625000 4.286612 0.463388 +v -1.625000 4.286612 0.286612 +v 1.750000 1.750000 0.500000 +v 1.838388 1.750000 0.463388 +v 1.875000 1.750000 0.375000 +v 1.838388 1.750000 0.286612 +v 1.750000 1.750000 0.250000 +v 1.661612 1.750000 0.286612 +v 1.625000 1.750000 0.375000 +v 1.661612 1.750000 0.463388 +v 1.750000 4.250000 0.500000 +v 1.838388 4.250000 0.463388 +v 1.875000 4.250000 0.375000 +v 1.838388 4.250000 0.286612 +v 1.750000 4.250000 0.250000 +v 1.661612 4.250000 0.286612 +v 1.625000 4.250000 0.375000 +v 1.661612 4.250000 0.463388 +v 1.713388 4.338388 0.500000 +v 1.775888 4.400888 0.463388 +v 1.801777 4.426777 0.375000 +v 1.775888 4.400888 0.286612 +v 1.713388 4.338388 0.250000 +v 1.650888 4.275888 0.286612 +v 1.650888 4.275888 0.463388 +v 1.625000 4.375000 0.500000 +v 1.625000 4.463388 0.463388 +v 1.625000 4.500000 0.375000 +v 1.625000 4.463388 0.286612 +v 1.625000 4.375000 0.250000 +v 1.625000 4.286612 0.286612 +v 1.625000 4.286612 0.463388 +v 1.125000 2.750000 0.500000 +v 1.875000 2.750000 0.500000 +v 1.125000 2.750000 0.000000 +v 1.875000 2.750000 0.000000 +v 1.125000 3.250000 0.000000 +v 1.125000 3.250000 0.500000 +v 1.875000 3.250000 0.500000 +v 1.875000 3.250000 0.000000 +v -0.250000 3.750000 0.000000 +v -0.338388 3.750000 0.036612 +v -0.375000 3.750000 0.125000 +v -0.338388 3.750000 0.213388 +v -0.250000 3.750000 0.250000 +v -0.161611 3.750000 0.213388 +v -0.125000 3.750000 0.125000 +v -0.161611 3.750000 0.036612 +v -0.250000 4.000000 0.000000 +v -0.338388 4.000000 0.036612 +v -0.375000 4.000000 0.125000 +v -0.338388 4.000000 0.213388 +v -0.250000 4.000000 0.250000 +v -0.161611 4.000000 0.213388 +v -0.125000 4.000000 0.125000 +v -0.161611 4.000000 0.036612 +v -0.213388 4.088388 0.000000 +v -0.275888 4.150888 0.036612 +v -0.301776 4.176777 0.125000 +v -0.275888 4.150888 0.213388 +v -0.213388 4.088388 0.250000 +v -0.150888 4.025888 0.213388 +v -0.150888 4.025888 0.036612 +v -0.125000 4.125000 0.000000 +v -0.125000 4.213388 0.036612 +v -0.125000 4.250000 0.125000 +v -0.125000 4.213388 0.213388 +v -0.125000 4.125000 0.250000 +v -0.125000 4.036612 0.213388 +v -0.125000 4.036612 0.036612 +v 1.250000 1.750000 0.250000 +v 1.338388 1.750000 0.213388 +v 1.375000 1.750000 0.125000 +v 1.338388 1.750000 0.036612 +v 1.250000 1.750000 0.000000 +v 1.161612 1.750000 0.036612 +v 1.125000 1.750000 0.125000 +v 1.161612 1.750000 0.213388 +v 1.250000 4.000000 0.250000 +v 1.338388 4.000000 0.213388 +v 1.375000 4.000000 0.125000 +v 1.338388 4.000000 0.036612 +v 1.250000 4.000000 0.000000 +v 1.161612 4.000000 0.036612 +v 1.125000 4.000000 0.125000 +v 1.161612 4.000000 0.213388 +v 1.213388 4.088388 0.250000 +v 1.275888 4.150888 0.213388 +v 1.301777 4.176777 0.125000 +v 1.275888 4.150888 0.036612 +v 1.213388 4.088388 0.000000 +v 1.150888 4.025888 0.036612 +v 1.150888 4.025888 0.213388 +v 1.125000 4.125000 0.250000 +v 1.125000 4.213388 0.213388 +v 1.125000 4.250000 0.125000 +v 1.125000 4.213388 0.036612 +v 1.125000 4.125000 0.000000 +v 1.125000 4.036612 0.036612 +v 1.125000 4.036612 0.213388 +v -1.750000 3.750000 0.000000 +v -1.838388 3.750000 0.036612 +v -1.875000 3.750000 0.125000 +v -1.838388 3.750000 0.213388 +v -1.750000 3.750000 0.250000 +v -1.661611 3.750000 0.213388 +v -1.625000 3.750000 0.125000 +v -1.661611 3.750000 0.036612 +v -1.750000 4.250000 0.000000 +v -1.838388 4.250000 0.036612 +v -1.875000 4.250000 0.125000 +v -1.838388 4.250000 0.213388 +v -1.750000 4.250000 0.250000 +v -1.661611 4.250000 0.213388 +v -1.625000 4.250000 0.125000 +v -1.661611 4.250000 0.036612 +v -1.713388 4.338388 0.000000 +v -1.775888 4.400888 0.036612 +v -1.801777 4.426777 0.125000 +v -1.775888 4.400888 0.213388 +v -1.713388 4.338388 0.250000 +v -1.650888 4.275888 0.213388 +v -1.650888 4.275888 0.036612 +v -1.625000 4.375000 0.000000 +v -1.625000 4.463388 0.036612 +v -1.625000 4.500000 0.125000 +v -1.625000 4.463388 0.213388 +v -1.625000 4.375000 0.250000 +v -1.625000 4.286612 0.213388 +v -1.625000 4.286612 0.036612 +v 1.750000 1.750000 0.250000 +v 1.838388 1.750000 0.213388 +v 1.875000 1.750000 0.125000 +v 1.838388 1.750000 0.036612 +v 1.750000 1.750000 0.000000 +v 1.661612 1.750000 0.036612 +v 1.625000 1.750000 0.125000 +v 1.661612 1.750000 0.213388 +v 1.750000 4.250000 0.250000 +v 1.838388 4.250000 0.213388 +v 1.875000 4.250000 0.125000 +v 1.838388 4.250000 0.036612 +v 1.750000 4.250000 0.000000 +v 1.661612 4.250000 0.036612 +v 1.625000 4.250000 0.125000 +v 1.661612 4.250000 0.213388 +v 1.713388 4.338388 0.250000 +v 1.775888 4.400888 0.213388 +v 1.801777 4.426777 0.125000 +v 1.775888 4.400888 0.036612 +v 1.713388 4.338388 0.000000 +v 1.650888 4.275888 0.036612 +v 1.650888 4.275888 0.213388 +v 1.625000 4.375000 0.250000 +v 1.625000 4.463388 0.213388 +v 1.625000 4.500000 0.125000 +v 1.625000 4.463388 0.036612 +v 1.625000 4.375000 0.000000 +v 1.625000 4.286612 0.036612 +v 1.625000 4.286612 0.213388 +v 1.875000 2.125000 0.000000 +v 1.875000 2.213388 0.036612 +v 1.875000 2.250000 0.125000 +v 1.875000 2.213388 0.213388 +v 1.875000 2.125000 0.250000 +v 1.875000 2.036612 0.213388 +v 1.875000 2.000000 0.125000 +v 1.875000 2.036612 0.036612 +v 1.937500 2.213388 0.036612 +v 1.937500 2.125000 0.000000 +v 1.937500 2.250000 0.125000 +v 1.937500 2.213388 0.213388 +v 1.937500 2.125000 0.250000 +v 1.937500 2.036612 0.213388 +v 1.937500 2.000000 0.125000 +v 1.937500 2.036612 0.036612 +v 1.875000 2.375000 1.500000 +v 1.875000 2.463388 1.536612 +v 1.875000 2.500000 1.625000 +v 1.875000 2.463388 1.713388 +v 1.875000 2.375000 1.750000 +v 1.875000 2.286612 1.713388 +v 1.875000 2.250000 1.625000 +v 1.875000 2.286612 1.536612 +v 1.937500 2.463388 1.536612 +v 1.937500 2.375000 1.500000 +v 1.937500 2.500000 1.625000 +v 1.937500 2.463388 1.713388 +v 1.937500 2.375000 1.750000 +v 1.937500 2.286612 1.713388 +v 1.937500 2.250000 1.625000 +v 1.937500 2.286612 1.536612 +v 1.125000 2.750000 2.000000 +v 1.875000 2.750000 2.000000 +v 1.125000 2.750000 1.500000 +v 1.875000 2.750000 1.500000 +v 1.125000 3.250000 1.500000 +v 1.125000 3.250000 2.000000 +v 1.875000 3.250000 2.000000 +v 1.875000 3.250000 1.500000 +v 1.125000 2.750000 0.500000 +v 1.875000 2.750000 0.500000 +v 1.125000 2.750000 0.000000 +v 1.875000 2.750000 0.000000 +v 1.125000 3.250000 0.000000 +v 1.125000 3.250000 0.500000 +v 1.875000 3.250000 0.500000 +v 1.875000 3.250000 0.000000 +vt 0.142857 0.247191 +vt 0.154762 0.269663 +vt 0.142857 0.269663 +vt 0.154762 0.292135 +vt 0.142857 0.314607 +vt 0.142857 0.292135 +vt 0.166667 0.269663 +vt 0.190476 0.269663 +vt 0.178571 0.292135 +vt 0.178571 0.269663 +vt 0.166667 0.292135 +vt 0.142857 0.247191 +vt 0.154762 0.269663 +vt 0.142857 0.269663 +vt 0.154762 0.292135 +vt 0.142857 0.314607 +vt 0.142857 0.292135 +vt 0.166667 0.269663 +vt 0.190476 0.269663 +vt 0.178571 0.292135 +vt 0.178571 0.269663 +vt 0.166667 0.292135 +vt 0.142857 0.247191 +vt 0.154762 0.269663 +vt 0.142857 0.269663 +vt 0.154762 0.292135 +vt 0.142857 0.314607 +vt 0.142857 0.292135 +vt 0.166667 0.269663 +vt 0.190476 0.269663 +vt 0.178571 0.292135 +vt 0.178571 0.269663 +vt 0.166667 0.292135 +vt 0.142857 0.247191 +vt 0.154762 0.269663 +vt 0.142857 0.269663 +vt 0.154762 0.292135 +vt 0.142857 0.314607 +vt 0.142857 0.292135 +vt 0.166667 0.269663 +vt 0.190476 0.269663 +vt 0.178571 0.292135 +vt 0.178571 0.269663 +vt 0.166667 0.292135 +vt 0.309524 0.505618 +vt 0.523810 0.516854 +vt 0.309524 0.516854 +vt 0.309524 0.494382 +vt 0.523810 0.505618 +vt 0.523810 0.528090 +vt 0.523810 0.539326 +vt 0.309524 0.528090 +vt 0.309524 0.505618 +vt 0.523810 0.516854 +vt 0.309524 0.516854 +vt 0.309524 0.494382 +vt 0.523810 0.505618 +vt 0.523810 0.528090 +vt 0.523810 0.539326 +vt 0.309524 0.528090 +vt 0.309524 0.505618 +vt 0.523810 0.516854 +vt 0.309524 0.516854 +vt 0.309524 0.494382 +vt 0.523810 0.505618 +vt 0.523810 0.528090 +vt 0.523810 0.539326 +vt 0.309524 0.528090 +vt 0.309524 0.505618 +vt 0.523810 0.516854 +vt 0.309524 0.516854 +vt 0.309524 0.494382 +vt 0.523810 0.505618 +vt 0.523810 0.528090 +vt 0.523810 0.539326 +vt 0.309524 0.528090 +vt 0.523810 0.011236 +vt 0.535714 0.460674 +vt 0.523810 0.460674 +vt 0.541667 0.460674 +vt 0.553571 0.011236 +vt 0.553571 0.460674 +vt 0.559524 0.460674 +vt 0.559524 0.011236 +vt 0.553571 -0.000000 +vt 0.541667 0.011236 +vt 0.541667 -0.000000 +vt 0.541667 0.471910 +vt 0.553571 0.471910 +vt 0.535714 0.011236 +vt 0.309524 0.314607 +vt 0.190476 0.539326 +vt 0.190476 0.314607 +vt 0.190476 0.044944 +vt 0.309524 0.269663 +vt 0.190476 0.269663 +vt 0.309524 0.000000 +vt 0.190476 0.000000 +vt 0.333333 0.269663 +vt 0.309524 0.044944 +vt 0.333333 0.044944 +vt 0.166667 0.044944 +vt 0.166667 0.269663 +vt 0.023810 0.179775 +vt 0.142857 0.224719 +vt 0.023810 0.224719 +vt 0.142857 -0.000000 +vt 0.023810 0.044944 +vt 0.023810 -0.000000 +vt -0.000000 0.179775 +vt 0.142857 0.044944 +vt 0.142857 0.179775 +vt 0.166667 0.044944 +vt 0.166667 0.179775 +vt 0.023810 0.359551 +vt 0.333333 0.044944 +vt 0.357143 0.449438 +vt 0.333333 0.449438 +vt 0.428571 0.449438 +vt 0.452381 0.044944 +vt 0.452381 0.449438 +vt 0.238095 0.955056 +vt 0.190476 0.943820 +vt 0.238095 0.943820 +vt 0.428571 0.494382 +vt 0.357143 0.494382 +vt 0.523810 0.449438 +vt 0.523810 0.044944 +vt 0.357143 0.000000 +vt 0.428571 0.044944 +vt 0.357143 0.044944 +vt 0.773862 0.606741 +vt 0.791693 0.548444 +vt 0.827355 0.548444 +vt 0.791693 0.683275 +vt 0.827355 0.683275 +vt 0.845186 0.741573 +vt 0.845291 0.606741 +vt 0.863122 0.548444 +vt 0.898783 0.548444 +vt 0.863122 0.683275 +vt 0.898783 0.683275 +vt 0.916614 0.741573 +vt 0.702434 0.606741 +vt 0.720264 0.548444 +vt 0.755926 0.548444 +vt 0.720265 0.799871 +vt 0.720264 0.683275 +vt 0.773757 0.741573 +vt 0.916719 0.606741 +vt 0.934550 0.548444 +vt 0.970212 0.548444 +vt 0.934550 0.799871 +vt 0.934550 0.683275 +vt 0.988043 0.741573 +vt 0.535714 0.719101 +vt 0.654762 0.629214 +vt 0.654762 0.719101 +vt 0.702381 0.719101 +vt 0.702381 0.629214 +vt 0.535714 0.808989 +vt 0.654762 0.808989 +vt 0.488095 0.629214 +vt 0.488095 0.719101 +vt 0.654762 0.539326 +vt 0.535714 0.629214 +vt 0.535714 0.539326 +vt 0.151786 0.971910 +vt 0.122024 0.983146 +vt 0.122024 0.971910 +vt 0.226190 0.955056 +vt 0.190476 0.966292 +vt 0.190476 0.955056 +vt 0.261905 0.955056 +vt 0.226190 0.966292 +vt 0.154762 0.955056 +vt 0.119048 0.966292 +vt 0.119048 0.955056 +vt 0.154762 0.966292 +vt 0.193452 0.971910 +vt 0.223214 0.971910 +vt 0.229167 0.971910 +vt 0.261905 0.966292 +vt 0.258929 0.971910 +vt 0.157738 0.971910 +vt 0.187500 0.971910 +vt 0.157738 0.983146 +vt 0.193452 0.983146 +vt 0.229167 0.983146 +vt 0.422619 0.949451 +vt 0.428565 0.960674 +vt 0.422619 0.971897 +vt 0.410715 0.971897 +vt 0.404769 0.960674 +vt 0.410715 0.949451 +vt 0.095238 0.955056 +vt 0.059524 1.000000 +vt 0.059524 0.955056 +vt 0.035714 0.955056 +vt 0.000000 1.000000 +vt 0.000000 0.955056 +vt 0.035714 1.000000 +vt 0.119048 0.955056 +vt 0.095238 1.000000 +vt 0.261905 0.932584 +vt 0.291667 0.926966 +vt 0.291667 0.932584 +vt 0.261905 0.926966 +vt 0.291667 0.921348 +vt 0.291667 0.926966 +vt 0.261905 0.921348 +vt 0.291667 0.915730 +vt 0.291667 0.921348 +vt 0.261905 0.915730 +vt 0.291667 0.910112 +vt 0.291667 0.915730 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.190476 0.955056 +vt 0.000000 0.943820 +vt 0.190476 0.943820 +vt 0.238095 0.955056 +vt 0.238095 0.943820 +vt 0.000000 0.955056 +vt 0.000000 0.943820 +vt 0.107143 0.786517 +vt 0.035714 0.382022 +vt 0.107143 0.382022 +vt 0.035714 0.853933 +vt 0.107143 0.786517 +vt 0.107143 0.853933 +vt 0.000000 0.382022 +vt 0.035714 0.786517 +vt -0.000000 0.786517 +vt 0.035714 0.853933 +vt 0.107143 0.786517 +vt 0.107143 0.853933 +vt 0.000000 0.382022 +vt 0.035714 0.786517 +vt 0.000000 0.786517 +vt 0.107143 0.382022 +vt 0.035714 0.382022 +vt 0.226190 0.679775 +vt 0.238095 0.707865 +vt 0.226190 0.702247 +vt 0.238095 0.640449 +vt 0.226190 0.668539 +vt 0.226190 0.646067 +vt 0.226190 0.612360 +vt 0.226190 0.634831 +vt 0.226190 0.578652 +vt 0.238095 0.606742 +vt 0.226190 0.601124 +vt 0.226190 0.544944 +vt 0.238095 0.573034 +vt 0.226190 0.567416 +vt 0.226190 0.915730 +vt 0.238095 0.943820 +vt 0.226190 0.938202 +vt 0.226190 0.882023 +vt 0.238095 0.910112 +vt 0.226190 0.904494 +vt 0.238095 0.842697 +vt 0.226190 0.870786 +vt 0.226190 0.848315 +vt 0.226190 0.814607 +vt 0.226190 0.837079 +vt 0.238095 0.775281 +vt 0.226190 0.803371 +vt 0.226190 0.780899 +vt 0.238095 0.741573 +vt 0.226190 0.769663 +vt 0.226190 0.747191 +vt 0.226190 0.735955 +vt 0.226190 0.713483 +vt 0.261905 0.679775 +vt 0.250000 0.707865 +vt 0.250000 0.674157 +vt 0.261905 0.713483 +vt 0.250000 0.741573 +vt 0.261905 0.747191 +vt 0.250000 0.775281 +vt 0.261905 0.803371 +vt 0.250000 0.808989 +vt 0.261905 0.814607 +vt 0.250000 0.842697 +vt 0.261905 0.870786 +vt 0.250000 0.876405 +vt 0.261905 0.882023 +vt 0.250000 0.910112 +vt 0.261905 0.915730 +vt 0.250000 0.943820 +vt 0.261905 0.544944 +vt 0.250000 0.573034 +vt 0.250000 0.539326 +vt 0.261905 0.578652 +vt 0.250000 0.606742 +vt 0.261905 0.612360 +vt 0.250000 0.640449 +vt 0.261905 0.668539 +vt 0.333333 0.679775 +vt 0.345238 0.707865 +vt 0.333333 0.702247 +vt 0.345238 0.640449 +vt 0.333333 0.668539 +vt 0.333333 0.646067 +vt 0.333333 0.612360 +vt 0.333333 0.634831 +vt 0.333333 0.578652 +vt 0.345238 0.606742 +vt 0.333333 0.601124 +vt 0.333333 0.544944 +vt 0.345238 0.573034 +vt 0.333333 0.567416 +vt 0.333333 0.915730 +vt 0.345238 0.943820 +vt 0.333333 0.938202 +vt 0.333333 0.882023 +vt 0.345238 0.910112 +vt 0.333333 0.904494 +vt 0.345238 0.842697 +vt 0.333333 0.870786 +vt 0.333333 0.848315 +vt 0.333333 0.814607 +vt 0.333333 0.837079 +vt 0.345238 0.775281 +vt 0.333333 0.803371 +vt 0.333333 0.780899 +vt 0.345238 0.741573 +vt 0.333333 0.769663 +vt 0.333333 0.747191 +vt 0.333333 0.735955 +vt 0.333333 0.713483 +vt 0.369048 0.679775 +vt 0.357143 0.707865 +vt 0.357143 0.674157 +vt 0.369048 0.713483 +vt 0.357143 0.741573 +vt 0.369048 0.747191 +vt 0.357143 0.775281 +vt 0.369048 0.803371 +vt 0.357143 0.808989 +vt 0.369048 0.814607 +vt 0.357143 0.842697 +vt 0.369048 0.870786 +vt 0.357143 0.876405 +vt 0.369048 0.882023 +vt 0.357143 0.910112 +vt 0.369048 0.915730 +vt 0.357143 0.943820 +vt 0.369048 0.544944 +vt 0.357143 0.573034 +vt 0.357143 0.539326 +vt 0.369048 0.578652 +vt 0.357143 0.606742 +vt 0.369048 0.612360 +vt 0.357143 0.640449 +vt 0.369048 0.668539 +vt 0.154774 0.623152 +vt 0.154774 0.545387 +vt 0.190452 0.584270 +vt 0.178559 0.635275 +vt 0.190452 0.674157 +vt 0.154774 0.713040 +vt 0.041667 0.921348 +vt 0.113095 0.853933 +vt 0.113095 0.921348 +vt 0.119048 0.921348 +vt 0.190476 0.853933 +vt 0.190476 0.921348 +vt 0.119048 0.853933 +vt 0.035714 0.921348 +vt 0.041667 0.853933 +vt 0.041667 0.921348 +vt 0.113095 0.853933 +vt 0.113095 0.921348 +vt 0.119048 0.921348 +vt 0.190476 0.853933 +vt 0.190476 0.921348 +vt 0.119048 0.853933 +vt 0.035714 0.921348 +vt 0.041667 0.853933 +vt 0.041667 0.921348 +vt 0.113095 0.853933 +vt 0.113095 0.921348 +vt 0.119048 0.921348 +vt 0.190476 0.853933 +vt 0.190476 0.921348 +vt 0.119048 0.853933 +vt 0.035714 0.921348 +vt 0.041667 0.853933 +vt 0.041667 0.921348 +vt 0.113095 0.853933 +vt 0.113095 0.921348 +vt 0.119048 0.921348 +vt 0.190476 0.853933 +vt 0.190476 0.921348 +vt 0.119048 0.853933 +vt 0.035714 0.921348 +vt 0.041667 0.853933 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.428571 0.471910 +vt 0.440476 0.460674 +vt 0.440476 0.471910 +vt 0.428571 0.483146 +vt 0.440476 0.483146 +vt 0.428571 0.460674 +vt 0.440476 0.449438 +vt 0.428571 0.494382 +vt 0.440476 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.511905 0.471910 +vt 0.523810 0.460674 +vt 0.523810 0.471910 +vt 0.511905 0.483146 +vt 0.523810 0.483146 +vt 0.511905 0.460674 +vt 0.523810 0.449438 +vt 0.511905 0.494382 +vt 0.523810 0.494382 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.511905 0.460674 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.511905 0.471910 +vt 0.440476 0.483146 +vt 0.511905 0.471910 +vt 0.511905 0.483146 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.511905 0.471910 +vt 0.440476 0.483146 +vt 0.511905 0.471910 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.511905 0.471910 +vt 0.440476 0.483146 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.511905 0.471910 +vt 0.440476 0.483146 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.511905 0.471910 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.511905 0.471910 +vt 0.440476 0.483146 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.511905 0.471910 +vt 0.440476 0.483146 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.511905 0.471910 +vt 0.440476 0.483146 +vt 0.440476 0.483146 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.511905 0.471910 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.511905 0.471910 +vt 0.440476 0.483146 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.471910 +vt 0.511905 0.460674 +vt 0.440476 0.483146 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.494382 +vt 0.511905 0.483146 +vt 0.511905 0.494382 +vt 0.440476 0.460674 +vt 0.511905 0.449438 +vt 0.440476 0.471910 +vt 0.440476 0.483146 +vt 0.440476 0.483146 +vt 0.440476 0.494382 +vt 0.511905 0.494382 +vt 0.523810 0.011236 +vt 0.535714 0.460674 +vt 0.523810 0.460674 +vt 0.541667 0.460674 +vt 0.553571 0.011236 +vt 0.553571 0.460674 +vt 0.559524 0.460674 +vt 0.559524 0.011236 +vt 0.553571 -0.000000 +vt 0.541667 0.011236 +vt 0.541667 -0.000000 +vt 0.541667 0.471910 +vt 0.553571 0.471910 +vt 0.535714 0.011236 +vt 0.523810 0.011236 +vt 0.535714 0.460674 +vt 0.523810 0.460674 +vt 0.541667 0.460674 +vt 0.553571 0.011236 +vt 0.553571 0.460674 +vt 0.559524 0.460674 +vt 0.559524 0.011236 +vt 0.553571 -0.000000 +vt 0.541667 0.011236 +vt 0.541667 -0.000000 +vt 0.541667 0.471910 +vt 0.553571 0.471910 +vt 0.535714 0.011236 +vt 0.523810 0.011236 +vt 0.535714 0.460674 +vt 0.523810 0.460674 +vt 0.541667 0.460674 +vt 0.553571 0.011236 +vt 0.553571 0.460674 +vt 0.559524 0.460674 +vt 0.559524 0.011236 +vt 0.553571 -0.000000 +vt 0.541667 0.011236 +vt 0.541667 -0.000000 +vt 0.541667 0.471910 +vt 0.553571 0.471910 +vt 0.535714 0.011236 +vt 0.523810 0.011236 +vt 0.535714 0.460674 +vt 0.523810 0.460674 +vt 0.541667 0.460674 +vt 0.553571 0.011236 +vt 0.553571 0.460674 +vt 0.559524 0.460674 +vt 0.559524 0.011236 +vt 0.553571 -0.000000 +vt 0.541667 0.011236 +vt 0.541667 -0.000000 +vt 0.541667 0.471910 +vt 0.553571 0.471910 +vt 0.535714 0.011236 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.175595 0.365169 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.175595 0.365169 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.172619 0.382022 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.157738 0.320225 +vt 0.175595 0.353933 +vt 0.157738 0.353933 +vt 0.160714 0.303371 +vt 0.172619 0.292135 +vt 0.172619 0.303371 +vt 0.175595 0.320225 +vt 0.181548 0.353933 +vt 0.151786 0.320225 +vt 0.175595 0.308989 +vt 0.157738 0.365169 +vt 0.160714 0.370787 +vt 0.175595 0.365169 +vt 0.172619 0.370787 +vt 0.148810 0.325843 +vt 0.151786 0.353933 +vt 0.148810 0.348315 +vt 0.157738 0.308989 +vt 0.184524 0.348315 +vt 0.181548 0.320225 +vt 0.184524 0.325843 +vt 0.160714 0.382022 +vt 0.190476 0.348315 +vt 0.142857 0.325843 +vt 0.095238 0.955056 +vt 0.059524 1.000000 +vt 0.059524 0.955056 +vt 0.035714 0.955056 +vt 0.000000 1.000000 +vt 0.000000 0.955056 +vt 0.035714 1.000000 +vt 0.119048 0.955056 +vt 0.095238 1.000000 +vt 0.422619 0.949451 +vt 0.428565 0.960674 +vt 0.422619 0.971897 +vt 0.410715 0.971897 +vt 0.404769 0.960674 +vt 0.410715 0.949451 +vt 0.422619 0.949451 +vt 0.428565 0.960674 +vt 0.422619 0.971897 +vt 0.404769 0.960674 +vt 0.410715 0.949451 +vt 0.416660 0.960674 +vt 0.059524 1.000000 +vt 0.095238 0.955056 +vt 0.059524 0.955056 +vt 0.000000 1.000000 +vt 0.035714 0.955056 +vt 0.000000 0.955056 +vt 0.035714 1.000000 +vt 0.095238 1.000000 +vt 0.119048 0.955056 +vt 0.059524 1.000000 +vt 0.095238 0.955056 +vt 0.059524 0.955056 +vt 0.000000 1.000000 +vt 0.035714 0.955056 +vt 0.000000 0.955056 +vt 0.035714 1.000000 +vt 0.095238 1.000000 +vt 0.119048 0.955056 +vt 0.154762 0.247191 +vt 0.154762 0.314607 +vt 0.190476 0.292135 +vt 0.154762 0.247191 +vt 0.154762 0.314607 +vt 0.190476 0.292135 +vt 0.154762 0.247191 +vt 0.154762 0.314607 +vt 0.190476 0.292135 +vt 0.154762 0.247191 +vt 0.154762 0.314607 +vt 0.190476 0.292135 +vt 0.523810 0.494382 +vt 0.309524 0.539326 +vt 0.523810 0.494382 +vt 0.309524 0.539326 +vt 0.523810 0.494382 +vt 0.309524 0.539326 +vt 0.523810 0.494382 +vt 0.309524 0.539326 +vt 0.309524 0.539326 +vt -0.000000 0.044944 +vt 0.142857 0.359551 +vt 0.190476 0.955056 +vt 0.428571 0.000000 +vt 0.840408 0.573083 +vt 0.827355 0.665039 +vt 0.845186 0.606742 +vt 0.840408 0.640400 +vt 0.809524 0.674058 +vt 0.791693 0.665039 +vt 0.778640 0.640400 +vt 0.778640 0.573083 +vt 0.809524 0.539425 +vt 0.840408 0.775231 +vt 0.827355 0.799871 +vt 0.809524 0.808889 +vt 0.791693 0.799871 +vt 0.778640 0.775231 +vt 0.773862 0.741573 +vt 0.778640 0.707915 +vt 0.809524 0.674256 +vt 0.840408 0.707915 +vt 0.911837 0.573083 +vt 0.898783 0.665039 +vt 0.916614 0.606742 +vt 0.911837 0.640400 +vt 0.880953 0.674058 +vt 0.863122 0.665039 +vt 0.850069 0.640400 +vt 0.850069 0.573083 +vt 0.880953 0.539425 +vt 0.911836 0.775231 +vt 0.898783 0.799871 +vt 0.880953 0.808889 +vt 0.863122 0.799871 +vt 0.850069 0.775231 +vt 0.845291 0.741573 +vt 0.850069 0.707915 +vt 0.880953 0.674256 +vt 0.911836 0.707915 +vt 0.768979 0.573083 +vt 0.755926 0.665039 +vt 0.773757 0.606742 +vt 0.768979 0.640400 +vt 0.738095 0.674058 +vt 0.720265 0.665039 +vt 0.707211 0.640400 +vt 0.707211 0.573083 +vt 0.738096 0.539425 +vt 0.768979 0.775231 +vt 0.755926 0.799871 +vt 0.738095 0.808889 +vt 0.707211 0.775231 +vt 0.702434 0.741573 +vt 0.707211 0.707915 +vt 0.738095 0.674256 +vt 0.755926 0.683275 +vt 0.768979 0.707915 +vt 0.983265 0.573083 +vt 0.970212 0.665039 +vt 0.988043 0.606742 +vt 0.983265 0.640400 +vt 0.952381 0.674058 +vt 0.934550 0.665039 +vt 0.921497 0.640400 +vt 0.921497 0.573083 +vt 0.952381 0.539425 +vt 0.983265 0.775231 +vt 0.970212 0.799871 +vt 0.952381 0.808889 +vt 0.921497 0.775231 +vt 0.916719 0.741573 +vt 0.921497 0.707915 +vt 0.952381 0.674256 +vt 0.970212 0.683275 +vt 0.983265 0.707915 +vt 0.151786 0.983146 +vt 0.187500 0.983146 +vt 0.223214 0.983146 +vt 0.258929 0.983146 +vt 0.418415 0.968610 +vt 0.416674 0.960674 +vt 0.418415 0.952738 +vt 0.426823 0.952738 +vt 0.426823 0.968610 +vt 0.416660 0.960674 +vt 0.414919 0.968610 +vt 0.406511 0.968610 +vt 0.406511 0.952738 +vt 0.414919 0.952738 +vt 0.119048 1.000000 +vt 0.261905 0.926966 +vt 0.261905 0.921348 +vt 0.261905 0.915730 +vt 0.261905 0.910112 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.000000 0.955056 +vt 0.035714 0.786517 +vt 0.035714 0.382022 +vt 0.238095 0.674157 +vt 0.238095 0.539326 +vt 0.238095 0.876405 +vt 0.238095 0.808989 +vt 0.261905 0.702247 +vt 0.261905 0.735955 +vt 0.261905 0.769663 +vt 0.261905 0.780899 +vt 0.261905 0.837079 +vt 0.261905 0.848315 +vt 0.261905 0.904494 +vt 0.261905 0.938202 +vt 0.261905 0.567416 +vt 0.261905 0.601124 +vt 0.261905 0.634831 +vt 0.261905 0.646067 +vt 0.345238 0.674157 +vt 0.345238 0.539326 +vt 0.345238 0.876405 +vt 0.345238 0.808989 +vt 0.369048 0.702247 +vt 0.369048 0.735955 +vt 0.369048 0.769663 +vt 0.369048 0.780899 +vt 0.369048 0.837079 +vt 0.369048 0.848315 +vt 0.369048 0.904494 +vt 0.369048 0.938202 +vt 0.369048 0.567416 +vt 0.369048 0.601124 +vt 0.369048 0.634831 +vt 0.369048 0.646067 +vt 0.187265 0.606718 +vt 0.178559 0.623152 +vt 0.166667 0.629167 +vt 0.146068 0.606719 +vt 0.142882 0.584270 +vt 0.146068 0.561821 +vt 0.166667 0.539372 +vt 0.178559 0.545387 +vt 0.187265 0.561821 +vt 0.146068 0.696606 +vt 0.142882 0.674157 +vt 0.146068 0.651709 +vt 0.154774 0.635275 +vt 0.166667 0.629260 +vt 0.187265 0.651709 +vt 0.187265 0.696606 +vt 0.178559 0.713040 +vt 0.166667 0.719055 +vt 0.035714 0.853933 +vt 0.035714 0.853933 +vt 0.035714 0.853933 +vt 0.035714 0.853933 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.428571 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.511905 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.440476 0.449438 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.160714 0.292135 +vt 0.172619 0.382022 +vt 0.190476 0.325843 +vt 0.142857 0.348315 +vt 0.119048 1.000000 +vt 0.418415 0.968610 +vt 0.416674 0.960674 +vt 0.418415 0.952738 +vt 0.426823 0.952738 +vt 0.426823 0.968610 +vt 0.416660 0.960674 +vt 0.414919 0.968610 +vt 0.406511 0.968610 +vt 0.406511 0.952738 +vt 0.414919 0.952738 +vt 0.418415 0.968610 +vt 0.416674 0.960674 +vt 0.418415 0.952738 +vt 0.426823 0.952738 +vt 0.426823 0.968610 +vt 0.414919 0.968610 +vt 0.410715 0.971897 +vt 0.406511 0.968610 +vt 0.406511 0.952738 +vt 0.414919 0.952738 +vt 0.119048 1.000000 +vt 0.119048 1.000000 +vt 0.577381 0.269663 +vt 0.559524 0.539326 +vt 0.559524 0.269663 +vt 0.702381 0.269663 +vt 0.684524 0.539326 +vt 0.684524 0.269663 +vt 0.738095 0.269663 +vt 0.720238 0.539326 +vt 0.720238 0.269663 +vt 0.648810 0.269663 +vt 0.630952 0.539326 +vt 0.630952 0.269663 +vt 0.595238 0.269663 +vt 0.577381 0.539326 +vt 0.702381 0.539326 +vt 0.755952 0.269663 +vt 0.738095 0.539326 +vt 0.666667 0.269663 +vt 0.648810 0.539326 +vt 0.613095 0.269663 +vt 0.595238 0.539326 +vt 0.773810 0.269663 +vt 0.755952 0.539326 +vt 0.666667 0.539326 +vt 0.613095 0.539326 +vt 0.773810 0.269663 +vt 0.791667 0.539326 +vt 0.773810 0.539326 +vt 0.916667 0.269663 +vt 0.898810 0.539326 +vt 0.898810 0.269663 +vt 0.952381 0.269663 +vt 0.934524 0.539326 +vt 0.934524 0.269663 +vt 0.863095 0.269663 +vt 0.845238 0.539326 +vt 0.845238 0.269663 +vt 0.791667 0.269663 +vt 0.809524 0.539326 +vt 0.916667 0.539326 +vt 0.970238 0.269663 +vt 0.952381 0.539326 +vt 0.880952 0.269663 +vt 0.863095 0.539326 +vt 0.827381 0.269663 +vt 0.809524 0.269663 +vt 0.988095 0.269663 +vt 0.970238 0.539326 +vt 0.880952 0.539326 +vt 0.827381 0.539326 +vt 0.577381 0.000000 +vt 0.559524 0.269663 +vt 0.559524 0.000000 +vt 0.702381 0.000000 +vt 0.684524 0.269663 +vt 0.684524 0.000000 +vt 0.738095 0.000000 +vt 0.720238 0.269663 +vt 0.720238 0.000000 +vt 0.648810 0.000000 +vt 0.630952 0.269663 +vt 0.630952 0.000000 +vt 0.595238 0.000000 +vt 0.577381 0.269663 +vt 0.702381 0.269663 +vt 0.755952 0.000000 +vt 0.738095 0.269663 +vt 0.666667 0.000000 +vt 0.648810 0.269663 +vt 0.613095 0.000000 +vt 0.595238 0.269663 +vt 0.773810 0.000000 +vt 0.755952 0.269663 +vt 0.666667 0.269663 +vt 0.613095 0.269663 +vt 0.791667 0.000000 +vt 0.773810 0.269663 +vt 0.773810 0.000000 +vt 0.916667 0.000000 +vt 0.898810 0.269663 +vt 0.898810 0.000000 +vt 0.952381 0.000000 +vt 0.934524 0.269663 +vt 0.934524 0.000000 +vt 0.863095 0.000000 +vt 0.845238 0.269663 +vt 0.845238 0.000000 +vt 0.809524 0.000000 +vt 0.791667 0.269663 +vt 0.916667 0.269663 +vt 0.970238 0.269663 +vt 0.952381 0.269663 +vt 0.880952 0.000000 +vt 0.863095 0.269663 +vt 0.827381 0.000000 +vt 0.809524 0.269663 +vt 0.988095 0.000000 +vt 0.970238 0.000000 +vt 0.880952 0.269663 +vt 0.827381 0.269663 +vt 0.785714 0.887640 +vt 0.797619 0.898876 +vt 0.785714 0.898876 +vt 0.785714 0.820225 +vt 0.797619 0.831461 +vt 0.785714 0.831461 +vt 0.785714 0.842697 +vt 0.797619 0.853933 +vt 0.785714 0.853933 +vt 0.785714 0.865169 +vt 0.797619 0.876405 +vt 0.785714 0.876405 +vt 0.797619 0.887640 +vt 0.785714 0.808989 +vt 0.797619 0.820225 +vt 0.797619 0.842697 +vt 0.797619 0.865169 +vt 0.800595 0.876405 +vt 0.806548 0.865169 +vt 0.806548 0.876405 +vt 0.806548 0.887640 +vt 0.803571 0.887640 +vt 0.800595 0.831461 +vt 0.806548 0.842697 +vt 0.803571 0.820225 +vt 0.806548 0.831461 +vt 0.806548 0.853933 +vt 0.806548 0.820225 +vt 0.812500 0.831461 +vt 0.815476 0.842697 +vt 0.815476 0.853933 +vt 0.815476 0.865169 +vt 0.812500 0.876405 +vt 0.809524 0.887640 +vt 0.806548 0.808989 +vt 0.809524 0.820225 +vt 0.806548 0.898876 +vt 1.000000 0.820225 +vt 0.892857 0.808989 +vt 1.000000 0.808989 +vt 1.000000 0.887640 +vt 0.892857 0.876405 +vt 1.000000 0.876405 +vt 1.000000 0.865169 +vt 0.892857 0.853933 +vt 1.000000 0.853933 +vt 1.000000 0.842697 +vt 0.892857 0.831461 +vt 1.000000 0.831461 +vt 0.892857 0.820225 +vt 1.000000 0.898876 +vt 0.892857 0.887640 +vt 0.892857 0.865169 +vt 0.892857 0.842697 +vt 0.889881 0.831461 +vt 0.883929 0.842697 +vt 0.883929 0.831461 +vt 0.883929 0.820225 +vt 0.886905 0.820225 +vt 0.889881 0.876405 +vt 0.883929 0.865169 +vt 0.883929 0.853933 +vt 0.883929 0.887640 +vt 0.883929 0.876405 +vt 0.877976 0.876405 +vt 0.875000 0.865169 +vt 0.875000 0.853933 +vt 0.877976 0.831461 +vt 0.880952 0.820225 +vt 0.875000 0.842697 +vt 0.886905 0.887640 +vt 0.883929 0.898876 +vt 0.880952 0.887640 +vt 0.883929 0.808989 +vt 0.875000 0.831461 +vt 0.815476 0.831461 +vt 0.875000 0.820225 +vt 0.815476 0.820225 +vt 0.875000 0.808989 +vt 0.815476 0.808989 +vt 0.815476 0.898876 +vt 0.875000 0.887640 +vt 0.875000 0.898876 +vt 0.875000 0.876405 +vt 0.815476 0.887640 +vt 0.815476 0.876405 +vt 0.452381 0.887640 +vt 0.476190 0.898876 +vt 0.452381 0.898876 +vt 0.452381 0.820225 +vt 0.476190 0.831461 +vt 0.452381 0.831461 +vt 0.452381 0.842697 +vt 0.476190 0.853933 +vt 0.452381 0.853933 +vt 0.452381 0.865169 +vt 0.476190 0.876405 +vt 0.452381 0.876405 +vt 0.476190 0.887640 +vt 0.452381 0.808989 +vt 0.476190 0.820225 +vt 0.476190 0.842697 +vt 0.476190 0.865169 +vt 0.479167 0.876405 +vt 0.485119 0.865169 +vt 0.485119 0.876405 +vt 0.485119 0.887640 +vt 0.482143 0.887640 +vt 0.485119 0.831461 +vt 0.485119 0.842697 +vt 0.485119 0.853933 +vt 0.479167 0.831461 +vt 0.485119 0.820225 +vt 0.491071 0.831461 +vt 0.494048 0.853933 +vt 0.491071 0.876405 +vt 0.488095 0.887640 +vt 0.494048 0.842697 +vt 0.494048 0.865169 +vt 0.482143 0.820225 +vt 0.485119 0.808989 +vt 0.488095 0.820225 +vt 0.485119 0.898876 +vt 0.785714 0.820225 +vt 0.666667 0.808989 +vt 0.785714 0.808989 +vt 0.785714 0.887640 +vt 0.666667 0.876405 +vt 0.785714 0.876405 +vt 0.785714 0.865169 +vt 0.666667 0.853933 +vt 0.785714 0.853933 +vt 0.785714 0.842697 +vt 0.666667 0.831461 +vt 0.785714 0.831461 +vt 0.666667 0.820225 +vt 0.785714 0.898876 +vt 0.666667 0.887640 +vt 0.666667 0.865169 +vt 0.666667 0.842697 +vt 0.663690 0.831461 +vt 0.657738 0.842697 +vt 0.657738 0.831461 +vt 0.657738 0.820225 +vt 0.660714 0.820225 +vt 0.663690 0.876405 +vt 0.657738 0.865169 +vt 0.657738 0.853933 +vt 0.657738 0.887640 +vt 0.657738 0.876405 +vt 0.651786 0.876405 +vt 0.648810 0.853933 +vt 0.648810 0.842697 +vt 0.651786 0.831461 +vt 0.654762 0.820225 +vt 0.648810 0.865169 +vt 0.660714 0.887640 +vt 0.657738 0.898876 +vt 0.654762 0.887640 +vt 0.657738 0.808989 +vt 0.648810 0.831461 +vt 0.494048 0.831461 +vt 0.648810 0.820225 +vt 0.494048 0.820225 +vt 0.648810 0.808989 +vt 0.494048 0.808989 +vt 0.494048 0.898876 +vt 0.648810 0.887640 +vt 0.648810 0.898876 +vt 0.648810 0.876405 +vt 0.494048 0.887640 +vt 0.494048 0.876405 +vt 0.404762 0.949438 +vt 0.410714 0.943820 +vt 0.410714 0.949438 +vt 0.416667 0.949438 +vt 0.422619 0.943820 +vt 0.422619 0.949438 +vt 0.428571 0.949438 +vt 0.434524 0.943820 +vt 0.434524 0.949438 +vt 0.446429 0.949438 +vt 0.452381 0.943820 +vt 0.452381 0.949438 +vt 0.416667 0.943820 +vt 0.428571 0.943820 +vt 0.440476 0.943820 +vt 0.440476 0.949438 +vt 0.446429 0.943820 +vt 0.214286 0.741573 +vt 0.202381 0.707865 +vt 0.214286 0.707865 +vt 0.214286 0.573034 +vt 0.202381 0.539326 +vt 0.214286 0.539326 +vt 0.214286 0.876405 +vt 0.202381 0.842697 +vt 0.214286 0.842697 +vt 0.214286 0.775281 +vt 0.202381 0.741573 +vt 0.214286 0.606742 +vt 0.202381 0.573034 +vt 0.214286 0.674157 +vt 0.202381 0.640449 +vt 0.214286 0.640449 +vt 0.214286 0.910112 +vt 0.202381 0.876405 +vt 0.214286 0.808989 +vt 0.202381 0.775281 +vt 0.202381 0.606742 +vt 0.202381 0.674157 +vt 0.214286 0.943820 +vt 0.202381 0.910112 +vt 0.202381 0.808989 +vt 0.392857 0.640449 +vt 0.380952 0.674157 +vt 0.380952 0.640449 +vt 0.392857 0.876405 +vt 0.380952 0.910112 +vt 0.380952 0.876405 +vt 0.392857 0.775281 +vt 0.380952 0.808989 +vt 0.380952 0.775281 +vt 0.392857 0.606742 +vt 0.380952 0.606742 +vt 0.392857 0.674157 +vt 0.380952 0.707865 +vt 0.392857 0.910112 +vt 0.380952 0.943820 +vt 0.392857 0.808989 +vt 0.380952 0.842697 +vt 0.392857 0.707865 +vt 0.380952 0.741573 +vt 0.392857 0.539326 +vt 0.380952 0.573034 +vt 0.380952 0.539326 +vt 0.392857 0.842697 +vt 0.392857 0.741573 +vt 0.392857 0.573034 +vt 0.190476 0.668539 +vt 0.190476 0.646067 +vt 0.190476 0.679775 +vt 0.190476 0.713483 +vt 0.190476 0.769663 +vt 0.190476 0.747191 +vt 0.190476 0.780899 +vt 0.190476 0.814607 +vt 0.190476 0.870786 +vt 0.190476 0.848315 +vt 0.190476 0.882023 +vt 0.202381 0.943820 +vt 0.190476 0.915730 +vt 0.190476 0.544944 +vt 0.190476 0.578652 +vt 0.190476 0.612360 +vt 0.333333 0.629214 +vt 0.261905 0.651685 +vt 0.261905 0.629214 +vt 0.333333 0.651685 +vt 0.261905 0.674157 +vt 0.333333 0.674157 +vt 0.261905 0.696629 +vt 0.333333 0.696629 +vt 0.261905 0.719101 +vt 0.333333 0.719101 +vt 0.261905 0.741573 +vt 0.333333 0.741573 +vt 0.261905 0.764045 +vt 0.333333 0.764045 +vt 0.261905 0.786517 +vt 0.333333 0.786517 +vt 0.261905 0.808989 +vt 0.333333 0.539326 +vt 0.261905 0.561798 +vt 0.261905 0.539326 +vt 0.333333 0.561798 +vt 0.261905 0.584270 +vt 0.333333 0.584270 +vt 0.261905 0.606742 +vt 0.333333 0.606742 +vt 0.404762 0.702247 +vt 0.404762 0.713483 +vt 0.404762 0.769663 +vt 0.404762 0.780899 +vt 0.404762 0.814607 +vt 0.404762 0.870786 +vt 0.404762 0.882023 +vt 0.404762 0.915730 +vt 0.392857 0.943820 +vt 0.404762 0.544944 +vt 0.404762 0.578652 +vt 0.404762 0.612360 +vt 0.404762 0.668539 +vt 0.767857 0.977528 +vt 0.779762 0.988764 +vt 0.767857 0.988764 +vt 0.767857 0.910112 +vt 0.779762 0.921348 +vt 0.767857 0.921348 +vt 0.767857 0.932584 +vt 0.779762 0.943820 +vt 0.767857 0.943820 +vt 0.767857 0.955056 +vt 0.779762 0.966292 +vt 0.767857 0.966292 +vt 0.779762 0.977528 +vt 0.767857 0.898876 +vt 0.779762 0.910112 +vt 0.779762 0.932584 +vt 0.779762 0.955056 +vt 0.788690 0.966292 +vt 0.782738 0.966292 +vt 0.788690 0.977528 +vt 0.785714 0.977528 +vt 0.788690 0.921348 +vt 0.788690 0.932584 +vt 0.788690 0.955056 +vt 0.782738 0.921348 +vt 0.788690 0.910112 +vt 0.788690 0.943820 +vt 0.794643 0.921348 +vt 0.797619 0.932584 +vt 0.797619 0.943820 +vt 0.797619 0.955056 +vt 0.794643 0.966292 +vt 0.791667 0.977528 +vt 0.785714 0.910112 +vt 0.788690 0.898876 +vt 0.791667 0.910112 +vt 0.788690 0.988764 +vt 0.940476 0.910112 +vt 0.869048 0.898876 +vt 0.940476 0.898876 +vt 0.940476 0.977528 +vt 0.869048 0.966292 +vt 0.940476 0.966292 +vt 0.940476 0.955056 +vt 0.869048 0.943820 +vt 0.940476 0.943820 +vt 0.940476 0.932584 +vt 0.869048 0.921348 +vt 0.940476 0.921348 +vt 0.869048 0.910112 +vt 0.940476 0.988764 +vt 0.869048 0.977528 +vt 0.869048 0.955056 +vt 0.869048 0.932584 +vt 0.866071 0.921348 +vt 0.860119 0.932584 +vt 0.860119 0.921348 +vt 0.860119 0.910112 +vt 0.863095 0.910112 +vt 0.866071 0.966292 +vt 0.860119 0.955056 +vt 0.860119 0.977528 +vt 0.860119 0.966292 +vt 0.860119 0.943820 +vt 0.854167 0.966292 +vt 0.851190 0.955056 +vt 0.851190 0.943820 +vt 0.851190 0.932584 +vt 0.854167 0.921348 +vt 0.857143 0.910112 +vt 0.863095 0.977528 +vt 0.860119 0.988764 +vt 0.857143 0.977528 +vt 0.860119 0.898876 +vt 0.851190 0.921348 +vt 0.797619 0.921348 +vt 0.851190 0.910112 +vt 0.797619 0.910112 +vt 0.851190 0.898876 +vt 0.797619 0.898876 +vt 0.797619 0.977528 +vt 0.851190 0.988764 +vt 0.797619 0.988764 +vt 0.851190 0.966292 +vt 0.797619 0.966292 +vt 0.452381 0.977528 +vt 0.476190 0.988764 +vt 0.452381 0.988764 +vt 0.452381 0.910112 +vt 0.476190 0.921348 +vt 0.452381 0.921348 +vt 0.452381 0.932584 +vt 0.476190 0.943820 +vt 0.452381 0.943820 +vt 0.452381 0.955056 +vt 0.476190 0.966292 +vt 0.452381 0.966292 +vt 0.476190 0.977528 +vt 0.452381 0.898876 +vt 0.476190 0.910112 +vt 0.476190 0.932584 +vt 0.476190 0.955056 +vt 0.485119 0.966292 +vt 0.479167 0.966292 +vt 0.485119 0.977528 +vt 0.482143 0.977528 +vt 0.479167 0.921348 +vt 0.485119 0.932584 +vt 0.485119 0.955056 +vt 0.485119 0.910112 +vt 0.485119 0.921348 +vt 0.485119 0.943820 +vt 0.491071 0.921348 +vt 0.494048 0.943820 +vt 0.494048 0.955056 +vt 0.491071 0.966292 +vt 0.488095 0.977528 +vt 0.494048 0.932584 +vt 0.482143 0.910112 +vt 0.485119 0.898876 +vt 0.488095 0.910112 +vt 0.485119 0.988764 +vt 0.744048 0.910112 +vt 0.660714 0.898876 +vt 0.744048 0.898876 +vt 0.744048 0.977528 +vt 0.660714 0.966292 +vt 0.744048 0.966292 +vt 0.744048 0.955056 +vt 0.660714 0.943820 +vt 0.744048 0.943820 +vt 0.744048 0.932584 +vt 0.660714 0.921348 +vt 0.744048 0.921348 +vt 0.660714 0.910112 +vt 0.744048 0.988764 +vt 0.660714 0.977528 +vt 0.660714 0.955056 +vt 0.660714 0.932584 +vt 0.651786 0.921348 +vt 0.657738 0.921348 +vt 0.651786 0.910112 +vt 0.654762 0.910112 +vt 0.657738 0.966292 +vt 0.651786 0.955056 +vt 0.651786 0.932584 +vt 0.651786 0.977528 +vt 0.651786 0.966292 +vt 0.651786 0.943820 +vt 0.645833 0.966292 +vt 0.642857 0.943820 +vt 0.642857 0.932584 +vt 0.645833 0.921348 +vt 0.648810 0.910112 +vt 0.642857 0.955056 +vt 0.654762 0.977528 +vt 0.651786 0.988764 +vt 0.648810 0.977528 +vt 0.651786 0.898876 +vt 0.642857 0.921348 +vt 0.494048 0.921348 +vt 0.642857 0.910112 +vt 0.494048 0.910112 +vt 0.642857 0.898876 +vt 0.494048 0.898876 +vt 0.494048 0.977528 +vt 0.642857 0.988764 +vt 0.494048 0.988764 +vt 0.642857 0.966292 +vt 0.494048 0.966292 +vt 0.943452 0.898876 +vt 0.949405 0.910112 +vt 0.946429 0.910112 +vt 0.747024 0.898876 +vt 0.752976 0.910112 +vt 0.750000 0.910112 +vt 0.949405 0.966292 +vt 0.752976 0.955056 +vt 0.752976 0.966292 +vt 0.949405 0.977528 +vt 0.752976 0.977528 +vt 0.943452 0.943820 +vt 0.949405 0.932584 +vt 0.949405 0.943820 +vt 0.750000 0.932584 +vt 0.752976 0.943820 +vt 0.747024 0.943820 +vt 0.949405 0.988764 +vt 0.943452 0.988764 +vt 0.752976 0.988764 +vt 0.747024 0.988764 +vt 0.949405 0.955056 +vt 0.949405 0.898876 +vt 0.952381 0.910112 +vt 0.958333 0.966292 +vt 0.761905 0.977528 +vt 0.755952 0.932584 +vt 0.758929 0.943820 +vt 0.958333 0.977528 +vt 0.758929 0.988764 +vt 0.952381 0.932584 +vt 0.955357 0.943820 +vt 0.761905 0.955056 +vt 0.955357 0.988764 +vt 0.752976 0.898876 +vt 0.755952 0.910112 +vt 0.958333 0.955056 +vt 0.761905 0.966292 +vt 0.752976 0.921348 +vt 0.752976 0.932584 +vt 0.949405 0.921348 +vt 0.946429 0.932584 +vt 0.767857 0.966292 +vt 0.958333 0.943820 +vt 0.964286 0.955056 +vt 0.958333 0.921348 +vt 0.964286 0.932584 +vt 0.958333 0.932584 +vt 0.767857 0.977528 +vt 0.964286 0.966292 +vt 0.761905 0.988764 +vt 0.767857 0.988764 +vt 0.964286 0.977528 +vt 0.964286 0.910112 +vt 0.964286 0.921348 +vt 0.761905 0.898876 +vt 0.767857 0.910112 +vt 0.761905 0.910112 +vt 0.958333 0.988764 +vt 0.964286 0.988764 +vt 0.761905 0.921348 +vt 0.767857 0.932584 +vt 0.761905 0.932584 +vt 0.958333 0.898876 +vt 0.958333 0.910112 +vt 0.761905 0.943820 +vt 0.767857 0.943820 +vt 0.767857 0.921348 +vt 0.767857 0.955056 +vt 0.964286 0.943820 +vt 0.297619 0.870786 +vt 0.303571 0.882023 +vt 0.297619 0.882023 +vt 0.297619 0.870786 +vt 0.303571 0.882023 +vt 0.297619 0.882023 +vt 0.285714 0.865169 +vt 0.279762 0.882023 +vt 0.279762 0.865169 +vt 0.285714 0.865169 +vt 0.279762 0.882023 +vt 0.279762 0.865169 +vt 0.291667 0.865169 +vt 0.285714 0.882023 +vt 0.291667 0.865169 +vt 0.285714 0.882023 +vt 0.273810 0.870786 +vt 0.267857 0.882023 +vt 0.267857 0.876405 +vt 0.273810 0.870786 +vt 0.267857 0.882023 +vt 0.267857 0.876405 +vt 0.273810 0.882023 +vt 0.273810 0.882023 +vt 0.291667 0.882023 +vt 0.291667 0.882023 +vt 0.273810 0.893258 +vt 0.267857 0.887640 +vt 0.285714 0.898876 +vt 0.279762 0.898876 +vt 0.297619 0.893258 +vt 0.279762 0.898876 +vt 0.273810 0.893258 +vt 0.297619 0.893258 +vt 0.291667 0.898876 +vt 0.267857 0.887640 +vt 0.291667 0.898876 +vt 0.285714 0.898876 +vt 0.309524 0.882023 +vt 0.303571 0.876405 +vt 0.303571 0.887640 +vt 0.261905 0.882023 +vt 0.309524 0.882023 +vt 0.303571 0.876405 +vt 0.303571 0.887640 +vt 0.261905 0.882023 +vt 0.285714 0.910112 +vt 0.297619 0.898876 +vt 0.291667 0.910112 +vt 0.309524 0.898876 +vt 0.303571 0.910112 +vt 0.303571 0.898876 +vt 0.279762 0.910112 +vt 0.285714 0.910112 +vt 0.273810 0.910112 +vt 0.273810 0.898876 +vt 0.279762 0.910112 +vt 0.267857 0.898876 +vt 0.261905 0.910112 +vt 0.261905 0.898876 +vt 0.267857 0.910112 +vt 0.267857 0.898876 +vt 0.273810 0.910112 +vt 0.273810 0.898876 +vt 0.309524 0.898876 +vt 0.303571 0.910112 +vt 0.303571 0.898876 +vt 0.267857 0.910112 +vt 0.297619 0.910112 +vt 0.297619 0.898876 +vt 0.261905 0.910112 +vt 0.261905 0.898876 +vt 0.291667 0.910112 +vt 0.297619 0.910112 +vt 0.297619 0.808989 +vt 0.297619 0.865169 +vt 0.297619 0.865169 +vt 0.303571 0.808989 +vt 0.303571 0.865169 +vt 0.303571 0.808989 +vt 0.303571 0.865169 +vt 0.309524 0.808989 +vt 0.309524 0.865169 +vt 0.261905 0.865169 +vt 0.267857 0.808989 +vt 0.267857 0.865169 +vt 0.309524 0.808989 +vt 0.309524 0.865169 +vt 0.261905 0.865169 +vt 0.267857 0.808989 +vt 0.267857 0.865169 +vt 0.273810 0.808989 +vt 0.273810 0.865169 +vt 0.273810 0.808989 +vt 0.273810 0.865169 +vt 0.279762 0.808989 +vt 0.279762 0.808989 +vt 0.285714 0.808989 +vt 0.285714 0.808989 +vt 0.291667 0.808989 +vt 0.291667 0.808989 +vt 0.297619 0.808989 +vt 0.511905 0.606742 +vt 0.488095 0.617977 +vt 0.488095 0.606742 +vt 0.511905 0.584270 +vt 0.488095 0.595506 +vt 0.488095 0.584270 +vt 0.511905 0.573034 +vt 0.488095 0.573034 +vt 0.511905 0.550562 +vt 0.488095 0.561798 +vt 0.488095 0.550562 +vt 0.511905 0.617977 +vt 0.488095 0.629214 +vt 0.511905 0.595506 +vt 0.511905 0.561798 +vt 0.511905 0.539326 +vt 0.488095 0.539326 +vt 0.511905 0.606742 +vt 0.488095 0.617977 +vt 0.488095 0.606742 +vt 0.511905 0.584270 +vt 0.488095 0.595506 +vt 0.488095 0.584270 +vt 0.511905 0.573034 +vt 0.488095 0.573034 +vt 0.511905 0.550562 +vt 0.488095 0.561798 +vt 0.488095 0.550562 +vt 0.511905 0.617977 +vt 0.488095 0.629214 +vt 0.511905 0.595506 +vt 0.511905 0.561798 +vt 0.511905 0.539326 +vt 0.488095 0.539326 +vt 0.511905 0.606742 +vt 0.488095 0.617977 +vt 0.488095 0.606742 +vt 0.511905 0.584270 +vt 0.488095 0.595506 +vt 0.488095 0.584270 +vt 0.511905 0.573034 +vt 0.488095 0.573034 +vt 0.511905 0.550562 +vt 0.488095 0.561798 +vt 0.488095 0.550562 +vt 0.511905 0.617977 +vt 0.488095 0.629214 +vt 0.511905 0.595506 +vt 0.511905 0.561798 +vt 0.511905 0.539326 +vt 0.488095 0.539326 +vt 0.511905 0.606742 +vt 0.488095 0.617977 +vt 0.488095 0.606742 +vt 0.511905 0.584270 +vt 0.488095 0.595506 +vt 0.488095 0.584270 +vt 0.511905 0.573034 +vt 0.488095 0.573034 +vt 0.511905 0.550562 +vt 0.488095 0.561798 +vt 0.488095 0.550562 +vt 0.511905 0.617977 +vt 0.488095 0.629214 +vt 0.511905 0.595506 +vt 0.511905 0.561798 +vt 0.511905 0.539326 +vt 0.488095 0.539326 +vt 0.785714 0.887640 +vt 0.797619 0.898876 +vt 0.785714 0.898876 +vt 0.785714 0.820225 +vt 0.797619 0.831461 +vt 0.785714 0.831461 +vt 0.785714 0.842697 +vt 0.797619 0.853933 +vt 0.785714 0.853933 +vt 0.785714 0.865169 +vt 0.797619 0.876405 +vt 0.785714 0.876405 +vt 0.797619 0.887640 +vt 0.785714 0.808989 +vt 0.797619 0.820225 +vt 0.797619 0.842697 +vt 0.797619 0.865169 +vt 0.800595 0.876405 +vt 0.806548 0.865169 +vt 0.806548 0.876405 +vt 0.806548 0.887640 +vt 0.803571 0.887640 +vt 0.806548 0.831461 +vt 0.806548 0.842697 +vt 0.803571 0.820225 +vt 0.800595 0.831461 +vt 0.806548 0.853933 +vt 0.806548 0.820225 +vt 0.812500 0.831461 +vt 0.815476 0.842697 +vt 0.815476 0.853933 +vt 0.815476 0.865169 +vt 0.812500 0.876405 +vt 0.809524 0.887640 +vt 0.806548 0.808989 +vt 0.809524 0.820225 +vt 0.806548 0.898876 +vt 1.000000 0.820225 +vt 0.892857 0.808989 +vt 1.000000 0.808989 +vt 1.000000 0.887640 +vt 0.892857 0.876405 +vt 1.000000 0.876405 +vt 1.000000 0.865169 +vt 0.892857 0.853933 +vt 1.000000 0.853933 +vt 1.000000 0.842697 +vt 0.892857 0.831461 +vt 1.000000 0.831461 +vt 0.892857 0.820225 +vt 1.000000 0.898876 +vt 0.892857 0.887640 +vt 0.892857 0.865169 +vt 0.892857 0.842697 +vt 0.889881 0.831461 +vt 0.883929 0.842697 +vt 0.883929 0.831461 +vt 0.883929 0.820225 +vt 0.886905 0.820225 +vt 0.883929 0.876405 +vt 0.883929 0.865169 +vt 0.886905 0.887640 +vt 0.889881 0.876405 +vt 0.883929 0.853933 +vt 0.883929 0.887640 +vt 0.877976 0.876405 +vt 0.875000 0.853933 +vt 0.875000 0.842697 +vt 0.877976 0.831461 +vt 0.880952 0.820225 +vt 0.875000 0.865169 +vt 0.883929 0.898876 +vt 0.880952 0.887640 +vt 0.883929 0.808989 +vt 0.875000 0.831461 +vt 0.815476 0.831461 +vt 0.875000 0.820225 +vt 0.815476 0.820225 +vt 0.875000 0.808989 +vt 0.815476 0.808989 +vt 0.815476 0.898876 +vt 0.875000 0.887640 +vt 0.875000 0.898876 +vt 0.875000 0.876405 +vt 0.815476 0.887640 +vt 0.815476 0.876405 +vt 0.452381 0.887640 +vt 0.476190 0.898876 +vt 0.452381 0.898876 +vt 0.452381 0.820225 +vt 0.476190 0.831461 +vt 0.452381 0.831461 +vt 0.452381 0.842697 +vt 0.476190 0.853933 +vt 0.452381 0.853933 +vt 0.452381 0.865169 +vt 0.476190 0.876405 +vt 0.452381 0.876405 +vt 0.476190 0.887640 +vt 0.452381 0.808989 +vt 0.476190 0.820225 +vt 0.476190 0.842697 +vt 0.476190 0.865169 +vt 0.479167 0.876405 +vt 0.485119 0.865169 +vt 0.485119 0.876405 +vt 0.485119 0.887640 +vt 0.482143 0.887640 +vt 0.485119 0.831461 +vt 0.485119 0.842697 +vt 0.482143 0.820225 +vt 0.479167 0.831461 +vt 0.485119 0.853933 +vt 0.485119 0.820225 +vt 0.491071 0.831461 +vt 0.494048 0.842697 +vt 0.494048 0.853933 +vt 0.494048 0.865169 +vt 0.491071 0.876405 +vt 0.488095 0.887640 +vt 0.485119 0.808989 +vt 0.488095 0.820225 +vt 0.485119 0.898876 +vt 0.785714 0.820225 +vt 0.666667 0.808989 +vt 0.785714 0.808989 +vt 0.785714 0.887640 +vt 0.666667 0.876405 +vt 0.785714 0.876405 +vt 0.785714 0.865169 +vt 0.666667 0.853933 +vt 0.785714 0.853933 +vt 0.785714 0.842697 +vt 0.666667 0.831461 +vt 0.785714 0.831461 +vt 0.666667 0.820225 +vt 0.785714 0.898876 +vt 0.666667 0.887640 +vt 0.666667 0.865169 +vt 0.666667 0.842697 +vt 0.663690 0.831461 +vt 0.657738 0.842697 +vt 0.657738 0.831461 +vt 0.657738 0.820225 +vt 0.660714 0.820225 +vt 0.657738 0.876405 +vt 0.657738 0.865169 +vt 0.657738 0.853933 +vt 0.663690 0.876405 +vt 0.657738 0.887640 +vt 0.651786 0.876405 +vt 0.648810 0.865169 +vt 0.648810 0.853933 +vt 0.648810 0.842697 +vt 0.651786 0.831461 +vt 0.654762 0.820225 +vt 0.660714 0.887640 +vt 0.657738 0.898876 +vt 0.654762 0.887640 +vt 0.657738 0.808989 +vt 0.648810 0.831461 +vt 0.494048 0.831461 +vt 0.648810 0.820225 +vt 0.494048 0.820225 +vt 0.648810 0.808989 +vt 0.494048 0.808989 +vt 0.494048 0.887640 +vt 0.648810 0.898876 +vt 0.494048 0.898876 +vt 0.648810 0.876405 +vt 0.494048 0.876405 +vt 0.785714 0.887640 +vt 0.797619 0.898876 +vt 0.785714 0.898876 +vt 0.785714 0.820225 +vt 0.797619 0.831461 +vt 0.785714 0.831461 +vt 0.785714 0.842697 +vt 0.797619 0.853933 +vt 0.785714 0.853933 +vt 0.785714 0.865169 +vt 0.797619 0.876405 +vt 0.785714 0.876405 +vt 0.797619 0.887640 +vt 0.785714 0.808989 +vt 0.797619 0.820225 +vt 0.797619 0.842697 +vt 0.797619 0.865169 +vt 0.800595 0.876405 +vt 0.806548 0.865169 +vt 0.806548 0.876405 +vt 0.806548 0.887640 +vt 0.803571 0.887640 +vt 0.806548 0.831461 +vt 0.806548 0.842697 +vt 0.800595 0.831461 +vt 0.806548 0.820225 +vt 0.806548 0.853933 +vt 0.812500 0.831461 +vt 0.815476 0.842697 +vt 0.815476 0.853933 +vt 0.815476 0.865169 +vt 0.812500 0.876405 +vt 0.809524 0.887640 +vt 0.803571 0.820225 +vt 0.806548 0.808989 +vt 0.809524 0.820225 +vt 0.806548 0.898876 +vt 1.000000 0.820225 +vt 0.892857 0.808989 +vt 1.000000 0.808989 +vt 1.000000 0.887640 +vt 0.892857 0.876405 +vt 1.000000 0.876405 +vt 1.000000 0.865169 +vt 0.892857 0.853933 +vt 1.000000 0.853933 +vt 1.000000 0.842697 +vt 0.892857 0.831461 +vt 1.000000 0.831461 +vt 0.892857 0.820225 +vt 1.000000 0.898876 +vt 0.892857 0.887640 +vt 0.892857 0.865169 +vt 0.892857 0.842697 +vt 0.889881 0.831461 +vt 0.883929 0.842697 +vt 0.883929 0.831461 +vt 0.883929 0.820225 +vt 0.886905 0.820225 +vt 0.889881 0.876405 +vt 0.883929 0.865169 +vt 0.886905 0.887640 +vt 0.883929 0.876405 +vt 0.883929 0.853933 +vt 0.883929 0.887640 +vt 0.877976 0.876405 +vt 0.875000 0.865169 +vt 0.875000 0.853933 +vt 0.877976 0.831461 +vt 0.880952 0.820225 +vt 0.875000 0.842697 +vt 0.883929 0.898876 +vt 0.880952 0.887640 +vt 0.883929 0.808989 +vt 0.875000 0.831461 +vt 0.815476 0.831461 +vt 0.875000 0.820225 +vt 0.815476 0.820225 +vt 0.875000 0.808989 +vt 0.815476 0.808989 +vt 0.815476 0.898876 +vt 0.875000 0.887640 +vt 0.875000 0.898876 +vt 0.875000 0.876405 +vt 0.815476 0.887640 +vt 0.815476 0.876405 +vt 0.452381 0.887640 +vt 0.476190 0.898876 +vt 0.452381 0.898876 +vt 0.452381 0.820225 +vt 0.476190 0.831461 +vt 0.452381 0.831461 +vt 0.452381 0.842697 +vt 0.476190 0.853933 +vt 0.452381 0.853933 +vt 0.452381 0.865169 +vt 0.476190 0.876405 +vt 0.452381 0.876405 +vt 0.476190 0.887640 +vt 0.452381 0.808989 +vt 0.476190 0.820225 +vt 0.476190 0.842697 +vt 0.476190 0.865169 +vt 0.485119 0.876405 +vt 0.479167 0.876405 +vt 0.485119 0.887640 +vt 0.482143 0.887640 +vt 0.479167 0.831461 +vt 0.485119 0.842697 +vt 0.485119 0.865169 +vt 0.485119 0.820225 +vt 0.485119 0.831461 +vt 0.485119 0.853933 +vt 0.491071 0.831461 +vt 0.494048 0.842697 +vt 0.494048 0.853933 +vt 0.494048 0.865169 +vt 0.491071 0.876405 +vt 0.488095 0.887640 +vt 0.482143 0.820225 +vt 0.485119 0.808989 +vt 0.488095 0.820225 +vt 0.485119 0.898876 +vt 0.785714 0.820225 +vt 0.666667 0.808989 +vt 0.785714 0.808989 +vt 0.785714 0.887640 +vt 0.666667 0.876405 +vt 0.785714 0.876405 +vt 0.785714 0.865169 +vt 0.666667 0.853933 +vt 0.785714 0.853933 +vt 0.785714 0.842697 +vt 0.666667 0.831461 +vt 0.785714 0.831461 +vt 0.666667 0.820225 +vt 0.785714 0.898876 +vt 0.666667 0.887640 +vt 0.666667 0.865169 +vt 0.666667 0.842697 +vt 0.663690 0.831461 +vt 0.657738 0.842697 +vt 0.657738 0.831461 +vt 0.660714 0.820225 +vt 0.657738 0.820225 +vt 0.663690 0.876405 +vt 0.657738 0.865169 +vt 0.657738 0.887640 +vt 0.657738 0.876405 +vt 0.657738 0.853933 +vt 0.651786 0.876405 +vt 0.648810 0.853933 +vt 0.648810 0.842697 +vt 0.651786 0.831461 +vt 0.654762 0.820225 +vt 0.648810 0.865169 +vt 0.660714 0.887640 +vt 0.657738 0.898876 +vt 0.654762 0.887640 +vt 0.657738 0.808989 +vt 0.648810 0.831461 +vt 0.494048 0.831461 +vt 0.648810 0.820225 +vt 0.494048 0.820225 +vt 0.648810 0.808989 +vt 0.494048 0.808989 +vt 0.494048 0.887640 +vt 0.648810 0.898876 +vt 0.494048 0.898876 +vt 0.648810 0.876405 +vt 0.494048 0.876405 +vt 0.785714 0.887640 +vt 0.797619 0.898876 +vt 0.785714 0.898876 +vt 0.785714 0.820225 +vt 0.797619 0.831461 +vt 0.785714 0.831461 +vt 0.785714 0.842697 +vt 0.797619 0.853933 +vt 0.785714 0.853933 +vt 0.785714 0.865169 +vt 0.797619 0.876405 +vt 0.785714 0.876405 +vt 0.797619 0.887640 +vt 0.785714 0.808989 +vt 0.797619 0.820225 +vt 0.797619 0.842697 +vt 0.797619 0.865169 +vt 0.800595 0.876405 +vt 0.806548 0.865169 +vt 0.806548 0.876405 +vt 0.806548 0.887640 +vt 0.803571 0.887640 +vt 0.806548 0.831461 +vt 0.806548 0.842697 +vt 0.800595 0.831461 +vt 0.806548 0.820225 +vt 0.806548 0.853933 +vt 0.812500 0.831461 +vt 0.815476 0.842697 +vt 0.815476 0.853933 +vt 0.815476 0.865169 +vt 0.812500 0.876405 +vt 0.809524 0.887640 +vt 0.803571 0.820225 +vt 0.806548 0.808989 +vt 0.809524 0.820225 +vt 0.806548 0.898876 +vt 1.000000 0.820225 +vt 0.892857 0.808989 +vt 1.000000 0.808989 +vt 1.000000 0.887640 +vt 0.892857 0.876405 +vt 1.000000 0.876405 +vt 1.000000 0.865169 +vt 0.892857 0.853933 +vt 1.000000 0.853933 +vt 1.000000 0.842697 +vt 0.892857 0.831461 +vt 1.000000 0.831461 +vt 0.892857 0.820225 +vt 1.000000 0.898876 +vt 0.892857 0.887640 +vt 0.892857 0.865169 +vt 0.892857 0.842697 +vt 0.889881 0.831461 +vt 0.883929 0.842697 +vt 0.883929 0.831461 +vt 0.883929 0.820225 +vt 0.886905 0.820225 +vt 0.889881 0.876405 +vt 0.883929 0.865169 +vt 0.883929 0.853933 +vt 0.883929 0.887640 +vt 0.883929 0.876405 +vt 0.877976 0.876405 +vt 0.875000 0.865169 +vt 0.875000 0.853933 +vt 0.875000 0.842697 +vt 0.877976 0.831461 +vt 0.880952 0.820225 +vt 0.886905 0.887640 +vt 0.883929 0.898876 +vt 0.880952 0.887640 +vt 0.883929 0.808989 +vt 0.875000 0.831461 +vt 0.815476 0.831461 +vt 0.875000 0.820225 +vt 0.815476 0.820225 +vt 0.875000 0.808989 +vt 0.815476 0.808989 +vt 0.815476 0.898876 +vt 0.875000 0.887640 +vt 0.875000 0.898876 +vt 0.875000 0.876405 +vt 0.815476 0.887640 +vt 0.815476 0.876405 +vt 0.452381 0.887640 +vt 0.476190 0.898876 +vt 0.452381 0.898876 +vt 0.452381 0.820225 +vt 0.476190 0.831461 +vt 0.452381 0.831461 +vt 0.452381 0.842697 +vt 0.476190 0.853933 +vt 0.452381 0.853933 +vt 0.452381 0.865169 +vt 0.476190 0.876405 +vt 0.452381 0.876405 +vt 0.476190 0.887640 +vt 0.452381 0.808989 +vt 0.476190 0.820225 +vt 0.476190 0.842697 +vt 0.476190 0.865169 +vt 0.485119 0.876405 +vt 0.479167 0.876405 +vt 0.482143 0.887640 +vt 0.485119 0.887640 +vt 0.485119 0.831461 +vt 0.485119 0.842697 +vt 0.485119 0.865169 +vt 0.479167 0.831461 +vt 0.485119 0.820225 +vt 0.485119 0.853933 +vt 0.491071 0.831461 +vt 0.494048 0.853933 +vt 0.494048 0.865169 +vt 0.491071 0.876405 +vt 0.488095 0.887640 +vt 0.494048 0.842697 +vt 0.482143 0.820225 +vt 0.485119 0.808989 +vt 0.488095 0.820225 +vt 0.485119 0.898876 +vt 0.785714 0.820225 +vt 0.666667 0.808989 +vt 0.785714 0.808989 +vt 0.785714 0.887640 +vt 0.666667 0.876405 +vt 0.785714 0.876405 +vt 0.785714 0.865169 +vt 0.666667 0.853933 +vt 0.785714 0.853933 +vt 0.785714 0.842697 +vt 0.666667 0.831461 +vt 0.785714 0.831461 +vt 0.666667 0.820225 +vt 0.785714 0.898876 +vt 0.666667 0.887640 +vt 0.666667 0.865169 +vt 0.666667 0.842697 +vt 0.663690 0.831461 +vt 0.657738 0.842697 +vt 0.657738 0.831461 +vt 0.657738 0.820225 +vt 0.660714 0.820225 +vt 0.657738 0.876405 +vt 0.657738 0.865169 +vt 0.657738 0.853933 +vt 0.663690 0.876405 +vt 0.657738 0.887640 +vt 0.651786 0.876405 +vt 0.648810 0.853933 +vt 0.648810 0.842697 +vt 0.651786 0.831461 +vt 0.654762 0.820225 +vt 0.648810 0.865169 +vt 0.660714 0.887640 +vt 0.657738 0.898876 +vt 0.654762 0.887640 +vt 0.657738 0.808989 +vt 0.648810 0.831461 +vt 0.494048 0.831461 +vt 0.648810 0.820225 +vt 0.494048 0.820225 +vt 0.648810 0.808989 +vt 0.494048 0.808989 +vt 0.494048 0.887640 +vt 0.648810 0.898876 +vt 0.494048 0.898876 +vt 0.648810 0.876405 +vt 0.494048 0.876405 +vt 0.404762 0.949438 +vt 0.410714 0.943820 +vt 0.410714 0.949438 +vt 0.416667 0.949438 +vt 0.422619 0.943820 +vt 0.422619 0.949438 +vt 0.428571 0.949438 +vt 0.434524 0.943820 +vt 0.434524 0.949438 +vt 0.446429 0.949438 +vt 0.452381 0.943820 +vt 0.452381 0.949438 +vt 0.416667 0.943820 +vt 0.428571 0.943820 +vt 0.440476 0.943820 +vt 0.440476 0.949438 +vt 0.446429 0.943820 +vt 0.404762 0.949438 +vt 0.410714 0.943820 +vt 0.410714 0.949438 +vt 0.416667 0.949438 +vt 0.422619 0.943820 +vt 0.422619 0.949438 +vt 0.428571 0.949438 +vt 0.434524 0.943820 +vt 0.434524 0.949438 +vt 0.446429 0.949438 +vt 0.452381 0.943820 +vt 0.452381 0.949438 +vt 0.416667 0.943820 +vt 0.428571 0.943820 +vt 0.440476 0.943820 +vt 0.440476 0.949438 +vt 0.446429 0.943820 +vt 0.773810 0.539326 +vt 0.988095 0.539326 +vt 0.773810 0.269663 +vt 0.988095 0.269663 +vt 0.797619 0.808989 +vt 0.892857 0.898876 +vt 0.476190 0.808989 +vt 0.666667 0.898876 +vt 0.404762 0.943820 +vt 0.190476 0.702247 +vt 0.190476 0.735955 +vt 0.190476 0.803371 +vt 0.190476 0.837079 +vt 0.190476 0.904494 +vt 0.190476 0.938202 +vt 0.190476 0.567416 +vt 0.190476 0.601124 +vt 0.190476 0.634831 +vt 0.333333 0.808989 +vt 0.404762 0.679775 +vt 0.404762 0.735955 +vt 0.404762 0.747191 +vt 0.404762 0.803371 +vt 0.404762 0.837079 +vt 0.404762 0.848315 +vt 0.404762 0.904494 +vt 0.404762 0.938202 +vt 0.404762 0.567416 +vt 0.404762 0.601124 +vt 0.404762 0.634831 +vt 0.404762 0.646067 +vt 0.779762 0.898876 +vt 0.869048 0.988764 +vt 0.851190 0.977528 +vt 0.476190 0.898876 +vt 0.660714 0.988764 +vt 0.642857 0.977528 +vt 0.955357 0.898876 +vt 0.758929 0.898876 +vt 0.767857 0.898876 +vt 0.964286 0.898876 +vt 0.309524 0.910112 +vt 0.309524 0.910112 +vt 0.261905 0.808989 +vt 0.261905 0.808989 +vt 0.511905 0.629214 +vt 0.511905 0.629214 +vt 0.511905 0.629214 +vt 0.511905 0.629214 +vt 0.797619 0.808989 +vt 0.892857 0.898876 +vt 0.476190 0.808989 +vt 0.666667 0.898876 +vt 0.648810 0.887640 +vt 0.797619 0.808989 +vt 0.892857 0.898876 +vt 0.476190 0.808989 +vt 0.666667 0.898876 +vt 0.648810 0.887640 +vt 0.797619 0.808989 +vt 0.892857 0.898876 +vt 0.476190 0.808989 +vt 0.666667 0.898876 +vt 0.648810 0.887640 +vt 0.404762 0.943820 +vt 0.404762 0.943820 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.5000 -0.8660 +vn 0.0000 0.8660 0.5000 +vn 0.0000 -0.8660 -0.5000 +vn 0.0000 -0.5000 0.8660 +vn 0.0000 0.8660 -0.5000 +vn 0.0000 0.5000 0.8660 +vn 0.0000 -0.5000 -0.8660 +vn 0.0000 -0.8660 0.5000 +vn -0.8660 0.0000 0.5000 +vn 0.5000 -0.0000 -0.8660 +vn 0.8660 -0.0000 -0.5000 +vn -0.5000 0.0000 -0.8660 +vn 0.8660 0.0000 0.5000 +vn 0.5000 0.0000 0.8660 +vn -0.5000 0.0000 0.8660 +vn -0.8660 0.0000 -0.5000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 -0.7071 -0.0000 +vn 0.7071 0.0000 0.7071 +vn -0.0473 0.0196 0.9987 +vn -0.7071 0.0000 0.7071 +vn -0.9824 0.1866 -0.0000 +vn -0.7071 0.0000 -0.7071 +vn -0.0473 0.0196 -0.9987 +vn 0.6737 -0.1363 -0.7263 +vn 0.6737 -0.1363 0.7263 +vn -0.7194 0.1448 0.6794 +vn -0.7194 0.1448 -0.6794 +vn -0.5294 0.5294 -0.6630 +vn -0.0671 0.0671 -0.9955 +vn 0.4617 -0.4617 -0.7574 +vn -0.5294 0.5294 0.6630 +vn -0.0671 0.0671 0.9955 +vn -0.7071 0.7071 -0.0000 +vn 0.4617 -0.4617 0.7574 +vn -0.0196 0.0473 0.9987 +vn -0.1448 0.7194 0.6794 +vn -0.1866 0.9824 -0.0000 +vn -0.1448 0.7194 -0.6794 +vn -0.0196 0.0473 -0.9987 +vn 0.1363 -0.6737 -0.7263 +vn 0.1363 -0.6737 0.7263 +vn -0.7071 -0.7071 -0.0000 +vn 0.0473 0.0196 -0.9987 +vn 0.9824 0.1866 0.0000 +vn 0.0473 0.0196 0.9987 +vn -0.6737 -0.1363 0.7263 +vn -0.6737 -0.1363 -0.7263 +vn 0.7194 0.1448 -0.6794 +vn 0.7194 0.1448 0.6794 +vn 0.5294 0.5294 0.6630 +vn 0.0671 0.0671 0.9955 +vn -0.4617 -0.4617 0.7574 +vn 0.5294 0.5293 -0.6630 +vn 0.7071 0.7071 -0.0000 +vn -0.4617 -0.4617 -0.7574 +vn 0.0671 0.0671 -0.9955 +vn 0.0196 0.0473 -0.9987 +vn 0.1448 0.7194 -0.6794 +vn 0.1866 0.9824 0.0000 +vn 0.0196 0.0473 0.9987 +vn -0.1363 -0.6737 0.7263 +vn 0.1448 0.7194 0.6794 +vn -0.1363 -0.6737 -0.7263 +vn 0.5294 0.5294 -0.6630 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.7071 -0.7071 +vn -0.7071 0.3536 -0.6124 +vn -0.7071 0.6124 -0.3536 +vn -0.7071 0.6124 0.3536 +vn -0.7071 0.3536 0.6124 +vn -0.7071 -0.3536 0.6124 +vn -0.7071 -0.6124 0.3536 +vn -0.7071 -0.6124 -0.3536 +vn -0.7071 -0.3536 -0.6124 +vn 0.7071 0.3536 -0.6124 +vn 0.7071 0.6124 -0.3536 +vn 0.7071 0.6124 0.3536 +vn 0.7071 0.3536 0.6124 +vn 0.7071 -0.3536 0.6124 +vn 0.7071 -0.6124 0.3536 +vn 0.7071 -0.6124 -0.3536 +vn 0.7071 -0.3536 -0.6124 +vn 0.9987 0.0196 0.0473 +vn -0.0000 0.1866 0.9824 +vn -0.9987 0.0196 0.0473 +vn -0.7263 -0.1363 -0.6737 +vn 0.7263 -0.1363 -0.6737 +vn 0.6794 0.1448 0.7194 +vn -0.6794 0.1448 0.7194 +vn -0.9955 0.0671 0.0671 +vn -0.7574 -0.4617 -0.4617 +vn 0.9955 0.0671 0.0671 +vn 0.6630 0.5294 0.5294 +vn -0.6630 0.5293 0.5294 +vn 0.7574 -0.4617 -0.4617 +vn 0.9987 0.0473 0.0196 +vn 0.6794 0.7194 0.1448 +vn -0.0000 0.9824 0.1866 +vn -0.6794 0.7194 0.1448 +vn -0.9987 0.0473 0.0196 +vn -0.7263 -0.6737 -0.1363 +vn 0.7263 -0.6737 -0.1363 +vn 0.6737 0.1363 0.7263 +vn -0.0473 -0.0196 0.9987 +vn -0.7194 -0.1448 0.6794 +vn -0.9987 0.0196 -0.0473 +vn -0.9824 -0.1866 0.0000 +vn -0.7194 -0.1448 -0.6794 +vn 0.0000 0.1866 -0.9824 +vn -0.0473 -0.0196 -0.9987 +vn 0.6737 0.1363 -0.7263 +vn 0.9987 0.0196 -0.0473 +vn 0.7263 -0.1363 0.6737 +vn -0.7263 -0.1363 0.6737 +vn -0.6794 0.1448 -0.7194 +vn 0.6794 0.1448 -0.7194 +vn 0.6630 0.5293 -0.5294 +vn 0.9955 0.0671 -0.0671 +vn 0.7574 -0.4617 0.4617 +vn -0.6630 0.5294 -0.5294 +vn -0.7574 -0.4617 0.4617 +vn -0.9955 0.0671 -0.0671 +vn -0.9987 0.0473 -0.0196 +vn -0.6794 0.7194 -0.1448 +vn 0.0000 0.9824 -0.1866 +vn 0.6794 0.7194 -0.1448 +vn 0.9987 0.0473 -0.0196 +vn 0.7263 -0.6737 0.1363 +vn -0.7263 -0.6737 0.1363 +vn -0.6630 0.5294 0.5294 +vn 0.6630 0.5294 -0.5294 +vn 0.4617 0.4617 0.7574 +vn -0.5294 -0.5294 -0.6630 +vn -0.5294 -0.5294 0.6630 +vn 0.4617 0.4617 -0.7574 +vn -0.0671 -0.0671 -0.9955 +vn -0.0671 -0.0671 0.9955 +vn 0.1363 0.6737 0.7263 +vn -0.1866 -0.9824 0.0000 +vn -0.1448 -0.7194 0.6794 +vn 0.1363 0.6737 -0.7263 +vn -0.0196 -0.0473 -0.9987 +vn -0.0196 -0.0473 0.9987 +vn -0.1448 -0.7194 -0.6794 +vn 0.5293 0.5293 -0.6630 +s off +f 171/243/31 170/244/31 169/245/31 +f 174/246/32 175/247/32 173/248/32 +f 172/249/33 174/246/33 170/244/33 +f 170/244/34 173/248/34 169/245/34 +f 169/250/35 175/251/35 171/252/35 +f 171/252/36 176/253/36 172/249/36 +f 179/254/31 178/255/31 177/256/31 +f 182/257/32 183/258/32 181/259/32 +f 180/260/33 182/257/33 178/255/33 +f 178/255/34 181/259/34 177/256/34 +f 177/261/35 183/262/35 179/263/35 +f 179/263/36 184/264/36 180/260/36 +f 187/265/31 186/266/31 185/267/31 +f 190/268/32 191/269/32 189/270/32 +f 188/271/33 190/268/33 186/266/33 +f 186/266/34 189/270/34 185/267/34 +f 185/272/35 191/273/35 187/274/35 +f 187/274/36 192/275/36 188/271/36 +f 195/276/31 194/277/31 193/278/31 +f 198/279/32 199/280/32 197/281/32 +f 196/282/33 198/279/33 194/277/33 +f 194/277/34 197/281/34 193/278/34 +f 193/283/35 199/284/35 195/285/35 +f 195/285/36 200/286/36 196/282/36 +f 203/287/31 202/288/31 201/289/31 +f 207/290/36 204/291/36 203/287/36 +f 206/292/34 201/289/34 202/288/34 +f 208/293/32 205/294/32 206/292/32 +f 211/295/31 210/296/31 209/297/31 +f 215/298/34 212/299/34 211/295/34 +f 214/300/36 209/297/36 210/296/36 +f 216/301/32 213/302/32 214/300/32 +f 219/303/31 218/304/31 217/305/31 +f 223/306/35 220/307/35 219/303/35 +f 222/308/33 217/305/33 218/304/33 +f 224/309/32 221/310/32 222/308/32 +f 227/311/31 226/312/31 225/313/31 +f 231/314/33 228/315/33 227/311/33 +f 230/316/35 225/313/35 226/312/35 +f 232/317/32 229/318/32 230/316/32 +f 235/319/31 234/320/31 233/321/31 +f 239/322/32 237/323/32 238/324/32 +f 233/325/36 237/323/36 235/326/36 +f 235/327/33 240/328/33 236/329/33 +f 234/330/35 238/324/35 233/331/35 +f 236/332/34 239/322/34 234/320/34 +f 243/333/31 242/334/31 241/335/31 +f 247/336/32 245/337/32 246/338/32 +f 244/339/34 247/336/34 242/340/34 +f 241/335/36 245/337/36 243/333/36 +f 243/341/33 248/342/33 244/343/33 +f 242/344/35 246/338/35 241/345/35 +f 251/346/36 250/347/36 249/348/36 +f 254/349/34 255/350/34 253/351/34 +f 249/352/35 255/350/35 251/346/35 +f 251/346/32 256/353/32 252/354/32 +f 252/354/33 254/355/33 250/356/33 +f 250/347/31 253/357/31 249/348/31 +f 259/358/35 561/359/35 257/360/35 +f 563/361/33 263/362/33 262/363/33 +f 565/364/36 261/365/36 258/366/36 +f 561/359/36 262/367/36 257/368/36 +f 257/369/31 263/362/31 259/370/31 +f 259/371/34 564/372/34 562/373/34 +f 271/374/31 269/375/31 267/376/31 +f 285/377/32 287/378/32 278/379/32 +f 295/380/31 293/381/31 291/382/31 +f 309/383/32 311/384/32 302/385/32 +f 319/386/31 317/387/31 315/388/31 +f 329/389/32 333/390/32 326/391/32 +f 343/392/31 341/393/31 339/394/31 +f 353/395/32 357/396/32 350/397/32 +f 365/398/32 368/399/32 366/400/32 +f 362/401/33 368/399/33 364/402/33 +f 361/403/36 366/400/36 362/404/36 +f 363/405/35 365/398/35 361/406/35 +f 364/407/34 367/408/34 363/409/34 +f 374/410/32 381/411/32 373/412/32 +f 371/413/32 380/414/32 372/415/32 +f 369/416/36 379/417/36 371/413/36 +f 370/418/31 377/419/31 369/420/31 +f 372/415/34 378/421/34 370/418/34 +f 373/412/35 378/421/35 374/410/35 +f 376/422/35 379/417/35 375/423/35 +f 375/424/35 377/425/35 373/426/35 +f 374/427/35 380/414/35 376/428/35 +f 376/428/36 382/429/36 374/427/36 +f 375/423/31 384/430/31 376/422/31 +f 373/426/34 383/431/34 375/424/34 +f 511/432/36 509/433/36 507/434/36 +f 515/435/34 517/436/34 519/437/34 +f 523/438/33 528/439/33 524/440/33 +f 522/441/35 526/442/35 521/443/35 +f 524/440/34 527/444/34 522/441/34 +f 521/445/36 525/446/36 523/438/36 +f 529/447/35 532/448/35 530/449/35 +f 533/450/35 536/451/35 534/452/35 +f 537/453/35 540/454/35 538/455/35 +f 541/456/35 544/457/35 542/458/35 +f 546/459/34 547/460/34 545/461/34 +f 551/462/31 560/463/31 552/464/31 +f 548/465/33 553/466/33 547/460/33 +f 545/461/35 555/467/35 546/459/35 +f 546/459/31 556/468/31 548/465/31 +f 547/460/32 554/469/32 545/461/32 +f 550/470/36 553/471/36 549/472/36 +f 551/473/36 554/474/36 550/475/36 +f 552/464/36 555/476/36 551/462/36 +f 549/477/36 556/478/36 552/479/36 +f 549/472/32 558/480/32 550/470/32 +f 552/479/33 557/481/33 549/477/33 +f 550/475/35 559/482/35 551/473/35 +f 566/483/35 258/484/35 260/485/35 +f 568/486/34 260/485/34 264/487/34 +f 261/365/33 568/488/33 264/489/33 +f 564/372/32 561/359/32 562/373/32 +f 569/490/31 572/491/31 570/492/31 +f 572/493/34 574/494/34 570/495/34 +f 570/496/35 573/497/35 569/498/35 +f 569/499/36 575/500/36 571/501/36 +f 571/502/33 576/503/33 572/504/33 +f 576/505/32 573/497/32 574/506/32 +f 626/507/34 651/508/34 627/509/34 +f 649/510/34 626/511/34 625/512/34 +f 636/513/34 649/510/34 625/514/34 +f 635/515/34 660/516/34 636/517/34 +f 634/518/34 659/519/34 635/520/34 +f 633/521/34 658/522/34 634/523/34 +f 632/524/34 657/525/34 633/526/34 +f 655/527/34 632/528/34 631/529/34 +f 630/530/34 655/527/34 631/531/34 +f 653/532/34 630/533/34 629/534/34 +f 652/535/34 629/536/34 628/537/34 +f 651/508/34 628/538/34 627/539/34 +f 674/540/36 663/541/36 662/542/36 +f 675/543/36 664/544/36 663/541/36 +f 676/545/36 665/546/36 664/544/36 +f 665/546/36 678/547/36 666/548/36 +f 678/549/36 667/550/36 666/548/36 +f 667/550/36 680/551/36 668/552/36 +f 680/553/36 669/554/36 668/552/36 +f 681/555/36 670/556/36 669/554/36 +f 682/557/36 671/558/36 670/559/36 +f 683/560/36 672/561/36 671/558/36 +f 684/562/36 661/563/36 672/561/36 +f 661/563/36 674/564/36 662/542/36 +f 686/565/34 699/566/34 687/567/34 +f 697/568/34 686/569/34 685/570/34 +f 696/571/34 697/568/34 685/572/34 +f 695/573/34 708/574/34 696/575/34 +f 694/576/34 707/577/34 695/578/34 +f 693/579/34 706/580/34 694/581/34 +f 692/582/34 705/583/34 693/584/34 +f 703/585/34 692/586/34 691/587/34 +f 690/588/34 703/585/34 691/589/34 +f 701/590/34 690/591/34 689/592/34 +f 700/593/34 689/594/34 688/595/34 +f 699/566/34 688/596/34 687/597/34 +f 722/598/36 711/599/36 710/600/36 +f 723/601/36 712/602/36 711/599/36 +f 724/603/36 713/604/36 712/602/36 +f 713/604/36 726/605/36 714/606/36 +f 726/607/36 715/608/36 714/606/36 +f 715/608/36 728/609/36 716/610/36 +f 728/611/36 717/612/36 716/610/36 +f 729/613/36 718/614/36 717/612/36 +f 730/615/36 719/616/36 718/617/36 +f 731/618/36 720/619/36 719/616/36 +f 732/620/36 709/621/36 720/619/36 +f 709/621/36 722/622/36 710/600/36 +f 641/623/34 645/624/34 637/625/34 +f 741/626/36 739/627/36 735/628/36 +f 746/629/34 752/630/34 748/631/34 +f 747/632/36 749/633/36 745/634/36 +f 748/631/33 751/635/33 747/632/33 +f 745/636/35 750/637/35 746/629/35 +f 754/638/34 760/639/34 756/640/34 +f 755/641/36 757/642/36 753/643/36 +f 756/640/33 759/644/33 755/641/33 +f 753/645/35 758/646/35 754/638/35 +f 762/647/34 768/648/34 764/649/34 +f 763/650/36 765/651/36 761/652/36 +f 764/649/33 767/653/33 763/650/33 +f 761/654/35 766/655/35 762/647/35 +f 770/656/34 776/657/34 772/658/34 +f 771/659/36 773/660/36 769/661/36 +f 772/658/33 775/662/33 771/659/33 +f 769/663/35 774/664/35 770/656/35 +f 946/665/33 941/666/33 942/667/33 +f 948/668/32 942/667/32 944/669/32 +f 945/670/31 943/671/31 941/666/31 +f 947/672/35 944/669/35 943/673/35 +f 954/674/35 949/675/35 950/676/35 +f 956/677/31 950/676/31 952/678/31 +f 953/679/32 951/680/32 949/675/32 +f 955/681/33 952/678/33 951/682/33 +f 962/683/32 957/684/32 958/685/32 +f 964/686/35 958/685/35 960/687/35 +f 961/688/33 959/689/33 957/684/33 +f 963/690/31 960/687/31 959/691/31 +f 970/692/31 965/693/31 966/694/31 +f 972/695/33 966/694/33 968/696/33 +f 969/697/35 967/698/35 965/693/35 +f 971/699/32 968/696/32 967/700/32 +f 978/701/37 973/702/37 974/703/37 +f 980/704/38 974/703/38 976/705/38 +f 977/706/39 975/707/39 973/702/39 +f 979/708/40 976/705/40 975/709/40 +f 986/710/40 981/711/40 982/712/40 +f 988/713/39 982/712/39 984/714/39 +f 985/715/38 983/716/38 981/711/38 +f 987/717/37 984/714/37 983/718/37 +f 994/719/38 989/720/38 990/721/38 +f 996/722/40 990/721/40 992/723/40 +f 993/724/37 991/725/37 989/720/37 +f 995/726/39 992/723/39 991/727/39 +f 1002/728/39 997/729/39 998/730/39 +f 1004/731/37 998/730/37 1000/732/37 +f 1001/733/40 999/734/40 997/729/40 +f 1003/735/38 1000/732/38 999/736/38 +f 1010/737/41 1005/738/41 1006/739/41 +f 1012/740/42 1006/739/42 1008/741/42 +f 1009/742/43 1007/743/43 1005/738/43 +f 1011/744/44 1008/741/44 1007/745/44 +f 1018/746/44 1013/747/44 1014/748/44 +f 1020/749/43 1014/748/43 1016/750/43 +f 1017/751/42 1015/752/42 1013/747/42 +f 1019/753/41 1016/750/41 1015/754/41 +f 1026/755/42 1021/756/42 1022/757/42 +f 1028/758/44 1022/757/44 1024/759/44 +f 1025/760/41 1023/761/41 1021/756/41 +f 1027/762/43 1024/759/43 1023/763/43 +f 1034/764/43 1029/765/43 1030/766/43 +f 1036/767/41 1030/766/41 1032/768/41 +f 1033/769/44 1031/770/44 1029/765/44 +f 1035/771/42 1032/768/42 1031/772/42 +f 1042/773/33 1037/774/33 1038/775/33 +f 1044/776/32 1038/775/32 1040/777/32 +f 1041/778/31 1039/779/31 1037/774/31 +f 1043/780/35 1040/777/35 1039/781/35 +f 1050/782/35 1045/783/35 1046/784/35 +f 1052/785/31 1046/784/31 1048/786/31 +f 1049/787/32 1047/788/32 1045/783/32 +f 1051/789/33 1048/786/33 1047/790/33 +f 1058/791/32 1053/792/32 1054/793/32 +f 1060/794/35 1054/793/35 1056/795/35 +f 1057/796/33 1055/797/33 1053/792/33 +f 1059/798/31 1056/795/31 1055/799/31 +f 1066/800/31 1061/801/31 1062/802/31 +f 1068/803/33 1062/802/33 1064/804/33 +f 1065/805/35 1063/806/35 1061/801/35 +f 1067/807/32 1064/804/32 1063/808/32 +f 1074/809/37 1069/810/37 1070/811/37 +f 1076/812/38 1070/811/38 1072/813/38 +f 1073/814/39 1071/815/39 1069/810/39 +f 1075/816/40 1072/813/40 1071/817/40 +f 1082/818/40 1077/819/40 1078/820/40 +f 1084/821/39 1078/820/39 1080/822/39 +f 1081/823/38 1079/824/38 1077/819/38 +f 1083/825/37 1080/822/37 1079/826/37 +f 1090/827/38 1085/828/38 1086/829/38 +f 1092/830/40 1086/829/40 1088/831/40 +f 1089/832/37 1087/833/37 1085/828/37 +f 1091/834/39 1088/831/39 1087/835/39 +f 1098/836/39 1093/837/39 1094/838/39 +f 1100/839/37 1094/838/37 1096/840/37 +f 1097/841/40 1095/842/40 1093/837/40 +f 1099/843/38 1096/840/38 1095/844/38 +f 1106/845/41 1101/846/41 1102/847/41 +f 1108/848/42 1102/847/42 1104/849/42 +f 1105/850/43 1103/851/43 1101/846/43 +f 1107/852/44 1104/849/44 1103/853/44 +f 1114/854/44 1109/855/44 1110/856/44 +f 1116/857/43 1110/856/43 1112/858/43 +f 1113/859/42 1111/860/42 1109/855/42 +f 1115/861/41 1112/858/41 1111/862/41 +f 1122/863/42 1117/864/42 1118/865/42 +f 1124/866/44 1118/865/44 1120/867/44 +f 1121/868/41 1119/869/41 1117/864/41 +f 1123/870/43 1120/867/43 1119/871/43 +f 1130/872/43 1125/873/43 1126/874/43 +f 1132/875/41 1126/874/41 1128/876/41 +f 1129/877/44 1127/878/44 1125/873/44 +f 1131/879/42 1128/876/42 1127/880/42 +f 1341/881/38 1295/882/38 1293/883/38 +f 1330/884/32 1281/885/32 1282/886/32 +f 1356/887/42 1306/888/42 1308/889/42 +f 1343/890/37 1296/891/37 1295/892/37 +f 1329/893/33 1283/894/33 1281/885/33 +f 1358/895/44 1309/896/44 1310/897/44 +f 1344/898/39 1294/899/39 1296/891/39 +f 1331/900/31 1284/901/31 1283/902/31 +f 1357/903/42 1311/904/42 1309/896/42 +f 1346/905/38 1297/906/38 1298/907/38 +f 1332/908/35 1282/886/35 1284/901/35 +f 1359/909/41 1312/910/41 1311/911/41 +f 1345/912/37 1299/913/37 1297/906/37 +f 1334/914/31 1285/915/31 1286/916/31 +f 1360/917/43 1310/897/43 1312/910/43 +f 1347/918/39 1300/919/39 1299/920/39 +f 1333/921/35 1287/922/35 1285/915/35 +f 1362/923/42 1313/924/42 1314/925/42 +f 1322/926/33 1273/927/33 1274/928/33 +f 1348/929/40 1298/907/40 1300/919/40 +f 1335/930/32 1288/931/32 1287/932/32 +f 1361/933/41 1315/934/41 1313/924/41 +f 1321/935/31 1275/936/31 1273/927/31 +f 1350/937/39 1301/938/39 1302/939/39 +f 1336/940/33 1286/916/33 1288/931/33 +f 1363/941/43 1316/942/43 1315/943/43 +f 1323/944/35 1276/945/35 1275/946/35 +f 1349/947/40 1303/948/40 1301/938/40 +f 1338/949/37 1289/950/37 1290/951/37 +f 1364/952/44 1314/925/44 1316/942/44 +f 1324/953/32 1274/928/32 1276/945/32 +f 1351/954/38 1304/955/38 1303/956/38 +f 1337/957/39 1291/958/39 1289/950/39 +f 1366/959/43 1317/960/43 1318/961/43 +f 1326/962/35 1277/963/35 1278/964/35 +f 1352/965/37 1302/939/37 1304/955/37 +f 1339/966/40 1292/967/40 1291/968/40 +f 1365/969/44 1319/970/44 1317/960/44 +f 1325/971/32 1279/972/32 1277/963/32 +f 1354/973/41 1305/974/41 1306/888/41 +f 1340/975/38 1290/951/38 1292/967/38 +f 1367/976/42 1320/977/42 1319/978/42 +f 1327/979/33 1280/980/33 1279/981/33 +f 1353/982/43 1307/983/43 1305/974/43 +f 1342/984/40 1293/883/40 1294/899/40 +f 1368/985/41 1318/961/41 1320/977/41 +f 1328/986/31 1278/964/31 1280/980/31 +f 1355/987/44 1308/889/44 1307/988/44 +f 1371/989/31 1370/990/31 1369/991/31 +f 1375/992/32 1373/993/32 1374/994/32 +f 1369/995/36 1373/993/36 1371/996/36 +f 1371/997/33 1376/998/33 1372/999/33 +f 1370/1000/35 1374/994/35 1369/1001/35 +f 1372/1002/34 1375/992/34 1370/990/34 +f 1379/1003/31 1378/1004/31 1377/1005/31 +f 1383/1006/32 1381/1007/32 1382/1008/32 +f 1377/1009/36 1381/1007/36 1379/1010/36 +f 1379/1011/33 1384/1012/33 1380/1013/33 +f 1378/1014/35 1382/1008/35 1377/1015/35 +f 1380/1016/34 1383/1006/34 1378/1004/34 +f 1387/1017/31 1386/1018/31 1385/1019/31 +f 1391/1020/32 1389/1021/32 1390/1022/32 +f 1385/1023/36 1389/1021/36 1387/1024/36 +f 1387/1025/33 1392/1026/33 1388/1027/33 +f 1386/1028/35 1390/1022/35 1385/1029/35 +f 1388/1030/34 1391/1020/34 1386/1018/34 +f 1395/1031/31 1394/1032/31 1393/1033/31 +f 1399/1034/32 1397/1035/32 1398/1036/32 +f 1393/1037/36 1397/1035/36 1395/1038/36 +f 1395/1039/33 1400/1040/33 1396/1041/33 +f 1394/1042/35 1398/1036/35 1393/1043/35 +f 1396/1044/34 1399/1034/34 1394/1032/34 +f 1402/1045/34 1403/1046/34 1401/1047/34 +f 1407/1048/31 1416/1049/31 1408/1050/31 +f 1404/1051/33 1409/1052/33 1403/1046/33 +f 1401/1047/35 1411/1053/35 1402/1045/35 +f 1402/1045/31 1412/1054/31 1404/1051/31 +f 1403/1046/32 1410/1055/32 1401/1047/32 +f 1406/1056/36 1409/1057/36 1405/1058/36 +f 1407/1059/36 1410/1060/36 1406/1061/36 +f 1408/1050/36 1411/1062/36 1407/1048/36 +f 1405/1063/36 1412/1064/36 1408/1065/36 +f 1405/1058/32 1414/1066/32 1406/1056/32 +f 1408/1065/33 1413/1067/33 1405/1063/33 +f 1406/1061/35 1415/1068/35 1407/1059/35 +f 1418/1069/34 1419/1070/34 1417/1071/34 +f 1423/1072/31 1432/1073/31 1424/1074/31 +f 1420/1075/33 1425/1076/33 1419/1070/33 +f 1417/1071/35 1427/1077/35 1418/1069/35 +f 1418/1069/31 1428/1078/31 1420/1075/31 +f 1419/1070/32 1426/1079/32 1417/1071/32 +f 1422/1080/36 1425/1081/36 1421/1082/36 +f 1423/1083/36 1426/1084/36 1422/1085/36 +f 1424/1074/36 1427/1086/36 1423/1072/36 +f 1421/1087/36 1428/1088/36 1424/1089/36 +f 1421/1082/32 1430/1090/32 1422/1080/32 +f 1424/1089/33 1429/1091/33 1421/1087/33 +f 1422/1085/35 1431/1092/35 1423/1083/35 +f 1434/1093/34 1435/1094/34 1433/1095/34 +f 1439/1096/31 1448/1097/31 1440/1098/31 +f 1436/1099/33 1441/1100/33 1435/1094/33 +f 1433/1095/35 1443/1101/35 1434/1093/35 +f 1434/1093/31 1444/1102/31 1436/1099/31 +f 1435/1094/32 1442/1103/32 1433/1095/32 +f 1438/1104/36 1441/1105/36 1437/1106/36 +f 1439/1107/36 1442/1108/36 1438/1109/36 +f 1440/1098/36 1443/1110/36 1439/1096/36 +f 1437/1111/36 1444/1112/36 1440/1113/36 +f 1437/1106/32 1446/1114/32 1438/1104/32 +f 1440/1113/33 1445/1115/33 1437/1111/33 +f 1438/1109/35 1447/1116/35 1439/1107/35 +f 1450/1117/34 1451/1118/34 1449/1119/34 +f 1455/1120/31 1464/1121/31 1456/1122/31 +f 1452/1123/33 1457/1124/33 1451/1118/33 +f 1449/1119/35 1459/1125/35 1450/1117/35 +f 1450/1117/31 1460/1126/31 1452/1123/31 +f 1451/1118/32 1458/1127/32 1449/1119/32 +f 1454/1128/36 1457/1129/36 1453/1130/36 +f 1455/1131/36 1458/1132/36 1454/1133/36 +f 1456/1122/36 1459/1134/36 1455/1120/36 +f 1453/1135/36 1460/1136/36 1456/1137/36 +f 1453/1130/32 1462/1138/32 1454/1128/32 +f 1456/1137/33 1461/1139/33 1453/1135/33 +f 1454/1133/35 1463/1140/35 1455/1131/35 +f 1466/1141/36 1467/1142/36 1465/1143/36 +f 1471/1144/31 1480/1145/31 1472/1146/31 +f 1468/1147/35 1473/1148/35 1467/1142/35 +f 1465/1143/33 1475/1149/33 1466/1141/33 +f 1466/1141/31 1476/1150/31 1468/1147/31 +f 1465/1143/32 1473/1151/32 1474/1152/32 +f 1470/1153/34 1473/1151/34 1469/1154/34 +f 1471/1155/34 1474/1156/34 1470/1157/34 +f 1472/1146/34 1475/1158/34 1471/1144/34 +f 1469/1159/34 1476/1160/34 1472/1161/34 +f 1469/1154/32 1478/1162/32 1470/1153/32 +f 1472/1161/35 1477/1163/35 1469/1159/35 +f 1470/1157/33 1479/1164/33 1471/1155/33 +f 1482/1165/36 1483/1166/36 1481/1167/36 +f 1487/1168/31 1496/1169/31 1488/1170/31 +f 1484/1171/35 1489/1172/35 1483/1166/35 +f 1481/1167/33 1491/1173/33 1482/1165/33 +f 1482/1165/31 1492/1174/31 1484/1171/31 +f 1483/1166/32 1490/1175/32 1481/1167/32 +f 1486/1176/34 1489/1177/34 1485/1178/34 +f 1487/1179/34 1490/1180/34 1486/1181/34 +f 1488/1170/34 1491/1182/34 1487/1168/34 +f 1485/1183/34 1492/1184/34 1488/1185/34 +f 1485/1178/32 1494/1186/32 1486/1176/32 +f 1488/1185/35 1493/1187/35 1485/1183/35 +f 1486/1181/33 1495/1188/33 1487/1179/33 +f 1498/1189/36 1499/1190/36 1497/1191/36 +f 1503/1192/31 1512/1193/31 1504/1194/31 +f 1500/1195/35 1505/1196/35 1499/1190/35 +f 1497/1191/33 1507/1197/33 1498/1189/33 +f 1498/1189/31 1508/1198/31 1500/1195/31 +f 1499/1190/32 1506/1199/32 1497/1191/32 +f 1502/1200/34 1505/1201/34 1501/1202/34 +f 1503/1203/34 1506/1204/34 1502/1205/34 +f 1504/1194/34 1507/1206/34 1503/1192/34 +f 1501/1207/34 1508/1208/34 1504/1209/34 +f 1501/1202/32 1510/1210/32 1502/1200/32 +f 1504/1209/35 1509/1211/35 1501/1207/35 +f 1502/1205/33 1511/1212/33 1503/1203/33 +f 1514/1213/36 1515/1214/36 1513/1215/36 +f 1519/1216/31 1528/1217/31 1520/1218/31 +f 1516/1219/35 1521/1220/35 1515/1214/35 +f 1513/1215/33 1523/1221/33 1514/1213/33 +f 1514/1213/31 1524/1222/31 1516/1219/31 +f 1515/1214/32 1522/1223/32 1513/1215/32 +f 1518/1224/34 1521/1225/34 1517/1226/34 +f 1519/1227/34 1522/1228/34 1518/1229/34 +f 1520/1218/34 1523/1230/34 1519/1216/34 +f 1517/1231/34 1524/1232/34 1520/1233/34 +f 1517/1226/32 1526/1234/32 1518/1224/32 +f 1520/1233/35 1525/1235/35 1517/1231/35 +f 1518/1229/33 1527/1236/33 1519/1227/33 +f 1530/1237/36 1531/1238/36 1529/1239/36 +f 1535/1240/31 1544/1241/31 1536/1242/31 +f 1532/1243/35 1537/1244/35 1531/1238/35 +f 1529/1239/33 1539/1245/33 1530/1237/33 +f 1530/1237/31 1540/1246/31 1532/1243/31 +f 1531/1238/32 1538/1247/32 1529/1239/32 +f 1534/1248/34 1537/1249/34 1533/1250/34 +f 1535/1251/34 1538/1252/34 1534/1253/34 +f 1536/1242/34 1539/1254/34 1535/1240/34 +f 1533/1255/34 1540/1256/34 1536/1257/34 +f 1533/1250/32 1542/1258/32 1534/1248/32 +f 1536/1257/35 1541/1259/35 1533/1255/35 +f 1534/1253/33 1543/1260/33 1535/1251/33 +f 1546/1261/33 1547/1262/33 1545/1263/33 +f 1551/1264/31 1560/1265/31 1552/1266/31 +f 1548/1267/36 1553/1268/36 1547/1262/36 +f 1545/1263/34 1555/1269/34 1546/1261/34 +f 1546/1261/31 1556/1270/31 1548/1267/31 +f 1547/1262/32 1554/1271/32 1545/1263/32 +f 1550/1272/35 1553/1273/35 1549/1274/35 +f 1551/1275/35 1554/1276/35 1550/1277/35 +f 1552/1266/35 1555/1278/35 1551/1264/35 +f 1549/1279/35 1556/1280/35 1552/1281/35 +f 1549/1274/32 1558/1282/32 1550/1272/32 +f 1552/1281/36 1557/1283/36 1549/1279/36 +f 1550/1277/34 1559/1284/34 1551/1275/34 +f 1562/1285/33 1563/1286/33 1561/1287/33 +f 1567/1288/31 1576/1289/31 1568/1290/31 +f 1564/1291/36 1569/1292/36 1563/1286/36 +f 1561/1287/34 1571/1293/34 1562/1285/34 +f 1562/1285/31 1572/1294/31 1564/1291/31 +f 1563/1286/32 1570/1295/32 1561/1287/32 +f 1566/1296/35 1569/1297/35 1565/1298/35 +f 1567/1299/35 1570/1300/35 1566/1301/35 +f 1568/1290/35 1571/1302/35 1567/1288/35 +f 1565/1303/35 1572/1304/35 1568/1305/35 +f 1565/1298/32 1574/1306/32 1566/1296/32 +f 1568/1305/36 1573/1307/36 1565/1303/36 +f 1566/1301/34 1575/1308/34 1567/1299/34 +f 1578/1309/33 1579/1310/33 1577/1311/33 +f 1583/1312/31 1592/1313/31 1584/1314/31 +f 1580/1315/36 1585/1316/36 1579/1310/36 +f 1577/1311/34 1587/1317/34 1578/1309/34 +f 1578/1309/31 1588/1318/31 1580/1315/31 +f 1579/1310/32 1586/1319/32 1577/1311/32 +f 1582/1320/35 1585/1321/35 1581/1322/35 +f 1583/1323/35 1586/1324/35 1582/1325/35 +f 1584/1314/35 1587/1326/35 1583/1312/35 +f 1581/1327/35 1588/1328/35 1584/1329/35 +f 1581/1322/32 1590/1330/32 1582/1320/32 +f 1584/1329/36 1589/1331/36 1581/1327/36 +f 1582/1325/34 1591/1332/34 1583/1323/34 +f 1594/1333/33 1595/1334/33 1593/1335/33 +f 1599/1336/31 1608/1337/31 1600/1338/31 +f 1596/1339/36 1601/1340/36 1595/1334/36 +f 1593/1335/34 1603/1341/34 1594/1333/34 +f 1594/1333/31 1604/1342/31 1596/1339/31 +f 1595/1334/32 1602/1343/32 1593/1335/32 +f 1598/1344/35 1601/1345/35 1597/1346/35 +f 1599/1347/35 1602/1348/35 1598/1349/35 +f 1600/1338/35 1603/1350/35 1599/1336/35 +f 1597/1351/35 1604/1352/35 1600/1353/35 +f 1597/1346/32 1606/1354/32 1598/1344/32 +f 1600/1353/36 1605/1355/36 1597/1351/36 +f 1598/1349/34 1607/1356/34 1599/1347/34 +f 1610/1357/33 1611/1358/33 1609/1359/33 +f 1615/1360/31 1624/1361/31 1616/1362/31 +f 1612/1363/36 1617/1364/36 1611/1358/36 +f 1609/1359/34 1619/1365/34 1610/1357/34 +f 1610/1357/31 1620/1366/31 1612/1363/31 +f 1611/1358/32 1618/1367/32 1609/1359/32 +f 1614/1368/35 1617/1369/35 1613/1370/35 +f 1615/1371/35 1618/1372/35 1614/1373/35 +f 1616/1362/35 1619/1374/35 1615/1360/35 +f 1613/1375/35 1620/1376/35 1616/1377/35 +f 1613/1370/32 1622/1378/32 1614/1368/32 +f 1616/1377/36 1621/1379/36 1613/1375/36 +f 1614/1373/34 1623/1380/34 1615/1371/34 +f 1626/1381/35 1627/1382/35 1625/1383/35 +f 1631/1384/31 1640/1385/31 1632/1386/31 +f 1628/1387/34 1633/1388/34 1627/1382/34 +f 1625/1383/36 1635/1389/36 1626/1381/36 +f 1626/1381/31 1636/1390/31 1628/1387/31 +f 1627/1382/32 1634/1391/32 1625/1383/32 +f 1630/1392/33 1633/1393/33 1629/1394/33 +f 1631/1395/33 1634/1396/33 1630/1397/33 +f 1632/1386/33 1635/1398/33 1631/1384/33 +f 1629/1399/33 1636/1400/33 1632/1401/33 +f 1629/1394/32 1638/1402/32 1630/1392/32 +f 1632/1401/34 1637/1403/34 1629/1399/34 +f 1630/1397/36 1639/1404/36 1631/1395/36 +f 1642/1405/35 1643/1406/35 1641/1407/35 +f 1647/1408/31 1656/1409/31 1648/1410/31 +f 1644/1411/34 1649/1412/34 1643/1406/34 +f 1641/1407/36 1651/1413/36 1642/1405/36 +f 1642/1405/31 1652/1414/31 1644/1411/31 +f 1643/1406/32 1650/1415/32 1641/1407/32 +f 1646/1416/33 1649/1417/33 1645/1418/33 +f 1647/1419/33 1650/1420/33 1646/1421/33 +f 1648/1410/33 1651/1422/33 1647/1408/33 +f 1645/1423/33 1652/1424/33 1648/1425/33 +f 1645/1418/32 1654/1426/32 1646/1416/32 +f 1648/1425/34 1653/1427/34 1645/1423/34 +f 1646/1421/36 1655/1428/36 1647/1419/36 +f 1658/1429/35 1659/1430/35 1657/1431/35 +f 1663/1432/31 1672/1433/31 1664/1434/31 +f 1660/1435/34 1665/1436/34 1659/1430/34 +f 1657/1431/36 1667/1437/36 1658/1429/36 +f 1658/1429/31 1668/1438/31 1660/1435/31 +f 1659/1430/32 1666/1439/32 1657/1431/32 +f 1662/1440/33 1665/1441/33 1661/1442/33 +f 1663/1443/33 1666/1444/33 1662/1445/33 +f 1664/1434/33 1667/1446/33 1663/1432/33 +f 1661/1447/33 1668/1448/33 1664/1449/33 +f 1661/1442/32 1670/1450/32 1662/1440/32 +f 1664/1449/34 1669/1451/34 1661/1447/34 +f 1662/1445/36 1671/1452/36 1663/1443/36 +f 1674/1453/35 1675/1454/35 1673/1455/35 +f 1679/1456/31 1688/1457/31 1680/1458/31 +f 1676/1459/34 1681/1460/34 1675/1454/34 +f 1673/1455/36 1683/1461/36 1674/1453/36 +f 1674/1453/31 1684/1462/31 1676/1459/31 +f 1673/1455/32 1681/1463/32 1682/1464/32 +f 1678/1465/33 1681/1463/33 1677/1466/33 +f 1679/1467/33 1682/1468/33 1678/1469/33 +f 1680/1458/33 1683/1470/33 1679/1456/33 +f 1677/1471/33 1684/1472/33 1680/1473/33 +f 1678/1465/32 1685/1474/32 1686/1475/32 +f 1680/1473/34 1685/1476/34 1677/1471/34 +f 1678/1469/36 1687/1477/36 1679/1467/36 +f 1690/1478/35 1691/1479/35 1689/1480/35 +f 1695/1481/31 1704/1482/31 1696/1483/31 +f 1692/1484/34 1697/1485/34 1691/1479/34 +f 1689/1480/36 1699/1486/36 1690/1478/36 +f 1690/1478/31 1700/1487/31 1692/1484/31 +f 1691/1479/32 1698/1488/32 1689/1480/32 +f 1694/1489/33 1697/1490/33 1693/1491/33 +f 1695/1492/33 1698/1493/33 1694/1494/33 +f 1696/1483/33 1699/1495/33 1695/1481/33 +f 1693/1496/33 1700/1497/33 1696/1498/33 +f 1693/1491/32 1702/1499/32 1694/1489/32 +f 1696/1498/34 1701/1500/34 1693/1496/34 +f 1694/1494/36 1703/1501/36 1695/1492/36 +f 1947/1502/33 1952/1503/33 1948/1504/33 +f 1946/1505/35 1950/1506/35 1945/1507/35 +f 1948/1504/34 1951/1508/34 1946/1505/34 +f 1945/1509/36 1949/1510/36 1947/1502/36 +f 2079/1511/36 2077/1512/36 2075/1513/36 +f 2083/1514/34 2085/1515/34 2087/1516/34 +f 2095/1517/36 2093/1518/36 2091/1519/36 +f 2101/1520/34 2103/1521/34 2098/1522/34 +f 2112/1523/35 2107/1524/35 2108/1525/35 +f 2110/1526/33 2106/1527/33 2105/1528/33 +f 2111/1529/36 2108/1525/36 2106/1527/36 +f 2109/1530/34 2105/1531/34 2107/1524/34 +f 2120/1532/35 2115/1533/35 2116/1534/35 +f 2118/1535/33 2114/1536/33 2113/1537/33 +f 2119/1538/36 2116/1534/36 2114/1536/36 +f 2117/1539/34 2113/1540/34 2115/1533/34 +f 171/243/31 172/1541/31 170/244/31 +f 174/246/32 176/1542/32 175/247/32 +f 172/249/33 176/253/33 174/246/33 +f 170/244/34 174/246/34 173/248/34 +f 169/250/35 173/1543/35 175/251/35 +f 171/252/36 175/251/36 176/253/36 +f 179/254/31 180/1544/31 178/255/31 +f 182/257/32 184/1545/32 183/258/32 +f 180/260/33 184/264/33 182/257/33 +f 178/255/34 182/257/34 181/259/34 +f 177/261/35 181/1546/35 183/262/35 +f 179/263/36 183/262/36 184/264/36 +f 187/265/31 188/1547/31 186/266/31 +f 190/268/32 192/1548/32 191/269/32 +f 188/271/33 192/275/33 190/268/33 +f 186/266/34 190/268/34 189/270/34 +f 185/272/35 189/1549/35 191/273/35 +f 187/274/36 191/273/36 192/275/36 +f 195/276/31 196/1550/31 194/277/31 +f 198/279/32 200/1551/32 199/280/32 +f 196/282/33 200/286/33 198/279/33 +f 194/277/34 198/279/34 197/281/34 +f 193/283/35 197/1552/35 199/284/35 +f 195/285/36 199/284/36 200/286/36 +f 203/287/31 204/291/31 202/288/31 +f 207/290/36 208/1553/36 204/291/36 +f 206/292/34 205/294/34 201/289/34 +f 208/293/32 207/1554/32 205/294/32 +f 211/295/31 212/299/31 210/296/31 +f 215/298/34 216/1555/34 212/299/34 +f 214/300/36 213/302/36 209/297/36 +f 216/301/32 215/1556/32 213/302/32 +f 219/303/31 220/307/31 218/304/31 +f 223/306/35 224/1557/35 220/307/35 +f 222/308/33 221/310/33 217/305/33 +f 224/309/32 223/1558/32 221/310/32 +f 227/311/31 228/315/31 226/312/31 +f 231/314/33 232/1559/33 228/315/33 +f 230/316/35 229/318/35 225/313/35 +f 232/317/32 231/1560/32 229/318/32 +f 235/319/31 236/332/31 234/320/31 +f 239/322/32 240/328/32 237/323/32 +f 233/325/36 238/324/36 237/323/36 +f 235/327/33 237/323/33 240/328/33 +f 234/330/35 239/322/35 238/324/35 +f 236/332/34 240/328/34 239/322/34 +f 243/333/31 244/1561/31 242/334/31 +f 247/336/32 248/342/32 245/337/32 +f 244/339/34 248/342/34 247/336/34 +f 241/335/36 246/338/36 245/337/36 +f 243/341/33 245/337/33 248/342/33 +f 242/344/35 247/336/35 246/338/35 +f 251/346/36 252/354/36 250/347/36 +f 254/349/34 256/353/34 255/350/34 +f 249/352/35 253/1562/35 255/350/35 +f 251/346/32 255/350/32 256/353/32 +f 252/354/33 256/353/33 254/355/33 +f 250/347/31 254/1563/31 253/357/31 +f 259/358/35 562/373/35 561/359/35 +f 563/361/33 564/372/33 263/362/33 +f 565/364/36 567/1564/36 261/365/36 +f 561/359/36 563/361/36 262/367/36 +f 257/369/31 262/363/31 263/362/31 +f 259/371/34 263/1565/34 564/372/34 +f 267/376/31 266/1566/31 275/1567/31 +f 266/1566/31 265/1568/31 275/1567/31 +f 265/1568/31 276/1569/31 275/1567/31 +f 275/1567/31 274/1570/31 273/1571/31 +f 273/1571/31 272/1572/31 271/374/31 +f 271/374/31 270/1573/31 269/375/31 +f 269/375/31 268/1574/31 267/376/31 +f 275/1567/31 273/1571/31 267/376/31 +f 273/1571/31 271/374/31 267/376/31 +f 278/379/32 277/1575/32 279/1576/32 +f 279/1576/32 280/1577/32 281/1578/32 +f 281/1578/32 282/1579/32 283/1580/32 +f 283/1580/32 284/1581/32 281/1578/32 +f 284/1581/32 285/377/32 281/1578/32 +f 285/377/32 286/1582/32 287/378/32 +f 287/378/32 288/1583/32 278/379/32 +f 278/379/32 279/1576/32 285/377/32 +f 279/1576/32 281/1578/32 285/377/32 +f 291/382/31 290/1584/31 299/1585/31 +f 290/1584/31 289/1586/31 299/1585/31 +f 289/1586/31 300/1587/31 299/1585/31 +f 299/1585/31 298/1588/31 297/1589/31 +f 297/1589/31 296/1590/31 295/380/31 +f 295/380/31 294/1591/31 293/381/31 +f 293/381/31 292/1592/31 291/382/31 +f 299/1585/31 297/1589/31 291/382/31 +f 297/1589/31 295/380/31 291/382/31 +f 302/385/32 301/1593/32 303/1594/32 +f 303/1594/32 304/1595/32 305/1596/32 +f 305/1596/32 306/1597/32 307/1598/32 +f 307/1598/32 308/1599/32 305/1596/32 +f 308/1599/32 309/383/32 305/1596/32 +f 309/383/32 310/1600/32 311/384/32 +f 311/384/32 312/1601/32 302/385/32 +f 302/385/32 303/1594/32 309/383/32 +f 303/1594/32 305/1596/32 309/383/32 +f 315/388/31 314/1602/31 323/1603/31 +f 314/1602/31 313/1604/31 323/1603/31 +f 313/1604/31 324/1605/31 323/1603/31 +f 323/1603/31 322/1606/31 321/1607/31 +f 321/1607/31 320/1608/31 319/386/31 +f 319/386/31 318/1609/31 317/387/31 +f 317/387/31 316/1610/31 315/388/31 +f 323/1603/31 321/1607/31 315/388/31 +f 321/1607/31 319/386/31 315/388/31 +f 326/391/32 325/1611/32 327/1612/32 +f 327/1612/32 328/1613/32 329/389/32 +f 329/389/32 330/1614/32 331/1615/32 +f 331/1615/32 332/1616/32 329/389/32 +f 332/1616/32 333/390/32 329/389/32 +f 333/390/32 334/1617/32 326/391/32 +f 334/1617/32 335/1618/32 326/391/32 +f 335/1618/32 336/1619/32 326/391/32 +f 326/391/32 327/1612/32 329/389/32 +f 339/394/31 338/1620/31 347/1621/31 +f 338/1620/31 337/1622/31 347/1621/31 +f 337/1622/31 348/1623/31 347/1621/31 +f 347/1621/31 346/1624/31 345/1625/31 +f 345/1625/31 344/1626/31 343/392/31 +f 343/392/31 342/1627/31 341/393/31 +f 341/393/31 340/1628/31 339/394/31 +f 347/1621/31 345/1625/31 339/394/31 +f 345/1625/31 343/392/31 339/394/31 +f 350/397/32 349/1629/32 351/1630/32 +f 351/1630/32 352/1631/32 353/395/32 +f 353/395/32 354/1632/32 355/1633/32 +f 355/1633/32 356/1634/32 353/395/32 +f 356/1634/32 357/396/32 353/395/32 +f 357/396/32 358/1635/32 350/397/32 +f 358/1635/32 359/1636/32 350/397/32 +f 359/1636/32 360/1637/32 350/397/32 +f 350/397/32 351/1630/32 353/395/32 +f 365/398/32 367/408/32 368/399/32 +f 362/401/33 366/400/33 368/399/33 +f 361/403/36 365/398/36 366/400/36 +f 363/405/35 367/408/35 365/398/35 +f 364/407/34 368/399/34 367/408/34 +f 374/410/32 382/1638/32 381/411/32 +f 371/413/32 379/417/32 380/414/32 +f 369/416/36 377/425/36 379/417/36 +f 370/418/31 378/421/31 377/419/31 +f 372/415/34 380/414/34 378/421/34 +f 373/412/35 377/419/35 378/421/35 +f 376/422/35 380/414/35 379/417/35 +f 375/424/35 379/417/35 377/425/35 +f 374/427/35 378/421/35 380/414/35 +f 376/428/36 384/1639/36 382/429/36 +f 375/423/31 383/1640/31 384/430/31 +f 373/426/34 381/1641/34 383/431/34 +f 507/434/36 506/1642/36 505/1643/36 +f 505/1643/36 512/1644/36 511/432/36 +f 511/432/36 510/1645/36 509/433/36 +f 509/433/36 508/1646/36 507/434/36 +f 507/434/36 505/1643/36 511/432/36 +f 514/1647/34 513/1648/34 515/435/34 +f 515/435/34 516/1649/34 517/436/34 +f 517/436/34 518/1650/34 519/437/34 +f 519/437/34 520/1651/34 514/1647/34 +f 514/1647/34 515/435/34 519/437/34 +f 523/438/33 525/446/33 528/439/33 +f 522/441/35 527/444/35 526/442/35 +f 524/440/34 528/439/34 527/444/34 +f 521/445/36 526/1652/36 525/446/36 +f 529/447/35 531/1653/35 532/448/35 +f 533/450/35 535/1654/35 536/451/35 +f 537/453/35 539/1655/35 540/454/35 +f 541/456/35 543/1656/35 544/457/35 +f 546/459/34 548/465/34 547/460/34 +f 551/462/31 559/1657/31 560/463/31 +f 548/465/33 556/478/33 553/466/33 +f 545/461/35 554/474/35 555/467/35 +f 546/459/31 555/476/31 556/468/31 +f 547/460/32 553/471/32 554/469/32 +f 550/470/36 554/469/36 553/471/36 +f 551/473/36 555/467/36 554/474/36 +f 552/464/36 556/468/36 555/476/36 +f 549/477/36 553/466/36 556/478/36 +f 549/472/32 557/1658/32 558/480/32 +f 552/479/33 560/1659/33 557/481/33 +f 550/475/35 558/1660/35 559/482/35 +f 566/483/35 565/1661/35 258/484/35 +f 568/486/34 566/483/34 260/485/34 +f 261/365/33 567/1564/33 568/488/33 +f 564/372/32 563/361/32 561/359/32 +f 569/490/31 571/1662/31 572/491/31 +f 572/493/34 576/503/34 574/494/34 +f 570/496/35 574/506/35 573/497/35 +f 569/499/36 573/497/36 575/500/36 +f 571/502/33 575/1663/33 576/503/33 +f 576/505/32 575/500/32 573/497/32 +f 626/507/34 650/1664/34 651/508/34 +f 649/510/34 650/1664/34 626/511/34 +f 636/513/34 660/516/34 649/510/34 +f 635/515/34 659/519/34 660/516/34 +f 634/518/34 658/1665/34 659/519/34 +f 633/521/34 657/525/34 658/522/34 +f 632/524/34 656/1666/34 657/525/34 +f 655/527/34 656/1666/34 632/528/34 +f 630/530/34 654/1667/34 655/527/34 +f 653/532/34 654/1667/34 630/533/34 +f 652/535/34 653/532/34 629/536/34 +f 651/508/34 652/535/34 628/538/34 +f 674/540/36 675/1668/36 663/541/36 +f 675/543/36 676/1669/36 664/544/36 +f 676/545/36 677/1670/36 665/546/36 +f 665/546/36 677/1671/36 678/547/36 +f 678/549/36 679/1672/36 667/550/36 +f 667/550/36 679/1673/36 680/551/36 +f 680/553/36 681/1674/36 669/554/36 +f 681/555/36 682/1675/36 670/556/36 +f 682/557/36 683/1676/36 671/558/36 +f 683/560/36 684/1677/36 672/561/36 +f 684/562/36 673/1678/36 661/563/36 +f 661/563/36 673/1679/36 674/564/36 +f 686/565/34 698/1680/34 699/566/34 +f 697/568/34 698/1680/34 686/569/34 +f 696/571/34 708/574/34 697/568/34 +f 695/573/34 707/577/34 708/574/34 +f 694/576/34 706/1681/34 707/577/34 +f 693/579/34 705/583/34 706/580/34 +f 692/582/34 704/1682/34 705/583/34 +f 703/585/34 704/1682/34 692/586/34 +f 690/588/34 702/1683/34 703/585/34 +f 701/590/34 702/1683/34 690/591/34 +f 700/593/34 701/590/34 689/594/34 +f 699/566/34 700/593/34 688/596/34 +f 722/598/36 723/1684/36 711/599/36 +f 723/601/36 724/1685/36 712/602/36 +f 724/603/36 725/1686/36 713/604/36 +f 713/604/36 725/1687/36 726/605/36 +f 726/607/36 727/1688/36 715/608/36 +f 715/608/36 727/1689/36 728/609/36 +f 728/611/36 729/1690/36 717/612/36 +f 729/613/36 730/1691/36 718/614/36 +f 730/615/36 731/1692/36 719/616/36 +f 731/618/36 732/1693/36 720/619/36 +f 732/620/36 721/1694/36 709/621/36 +f 709/621/36 721/1695/36 722/622/36 +f 637/625/34 638/1696/34 639/1697/34 +f 639/1697/34 640/1698/34 637/625/34 +f 640/1698/34 641/623/34 637/625/34 +f 641/623/34 642/1699/34 643/1700/34 +f 643/1700/34 644/1701/34 645/624/34 +f 645/624/34 646/1702/34 637/625/34 +f 646/1702/34 647/1703/34 637/625/34 +f 647/1703/34 648/1704/34 637/625/34 +f 641/623/34 643/1700/34 645/624/34 +f 735/628/36 734/1705/36 733/1706/36 +f 733/1706/36 744/1707/36 735/628/36 +f 744/1707/36 743/1708/36 735/628/36 +f 743/1708/36 742/1709/36 741/626/36 +f 741/626/36 740/1710/36 739/627/36 +f 739/627/36 738/1711/36 737/1712/36 +f 737/1712/36 736/1713/36 739/627/36 +f 736/1713/36 735/628/36 739/627/36 +f 743/1708/36 741/626/36 735/628/36 +f 746/629/34 750/637/34 752/630/34 +f 747/632/36 751/635/36 749/633/36 +f 748/631/33 752/630/33 751/635/33 +f 745/636/35 749/1714/35 750/637/35 +f 754/638/34 758/646/34 760/639/34 +f 755/641/36 759/644/36 757/642/36 +f 756/640/33 760/639/33 759/644/33 +f 753/645/35 757/1715/35 758/646/35 +f 762/647/34 766/655/34 768/648/34 +f 763/650/36 767/653/36 765/651/36 +f 764/649/33 768/648/33 767/653/33 +f 761/654/35 765/1716/35 766/655/35 +f 770/656/34 774/664/34 776/657/34 +f 771/659/36 775/662/36 773/660/36 +f 772/658/33 776/657/33 775/662/33 +f 769/663/35 773/1717/35 774/664/35 +f 946/665/33 945/670/33 941/666/33 +f 948/668/32 946/665/32 942/667/32 +f 945/670/31 947/1718/31 943/671/31 +f 947/672/35 948/668/35 944/669/35 +f 954/674/35 953/679/35 949/675/35 +f 956/677/31 954/674/31 950/676/31 +f 953/679/32 955/1719/32 951/680/32 +f 955/681/33 956/677/33 952/678/33 +f 962/683/32 961/688/32 957/684/32 +f 964/686/35 962/683/35 958/685/35 +f 961/688/33 963/1720/33 959/689/33 +f 963/690/31 964/686/31 960/687/31 +f 970/692/31 969/697/31 965/693/31 +f 972/695/33 970/692/33 966/694/33 +f 969/697/35 971/1721/35 967/698/35 +f 971/699/32 972/695/32 968/696/32 +f 978/701/37 977/706/37 973/702/37 +f 980/704/38 978/701/38 974/703/38 +f 977/706/39 979/1722/39 975/707/39 +f 979/708/40 980/704/40 976/705/40 +f 986/710/40 985/715/40 981/711/40 +f 988/713/39 986/710/39 982/712/39 +f 985/715/38 987/1723/38 983/716/38 +f 987/717/37 988/713/37 984/714/37 +f 994/719/38 993/724/38 989/720/38 +f 996/722/40 994/719/40 990/721/40 +f 993/724/37 995/1724/37 991/725/37 +f 995/726/39 996/722/39 992/723/39 +f 1002/728/39 1001/733/39 997/729/39 +f 1004/731/37 1002/728/37 998/730/37 +f 1001/733/40 1003/1725/40 999/734/40 +f 1003/735/38 1004/731/38 1000/732/38 +f 1010/737/41 1009/742/41 1005/738/41 +f 1012/740/42 1010/737/42 1006/739/42 +f 1009/742/43 1011/1726/43 1007/743/43 +f 1011/744/44 1012/740/44 1008/741/44 +f 1018/746/44 1017/751/44 1013/747/44 +f 1020/749/43 1018/746/43 1014/748/43 +f 1017/751/42 1019/1727/42 1015/752/42 +f 1019/753/41 1020/749/41 1016/750/41 +f 1026/755/42 1025/760/42 1021/756/42 +f 1028/758/44 1026/755/44 1022/757/44 +f 1025/760/41 1027/1728/41 1023/761/41 +f 1027/762/43 1028/758/43 1024/759/43 +f 1034/764/43 1033/769/43 1029/765/43 +f 1036/767/41 1034/764/41 1030/766/41 +f 1033/769/44 1035/1729/44 1031/770/44 +f 1035/771/42 1036/767/42 1032/768/42 +f 1042/773/33 1041/778/33 1037/774/33 +f 1044/776/32 1042/773/32 1038/775/32 +f 1041/778/31 1043/1730/31 1039/779/31 +f 1043/780/35 1044/776/35 1040/777/35 +f 1050/782/35 1049/787/35 1045/783/35 +f 1052/785/31 1050/782/31 1046/784/31 +f 1049/787/32 1051/1731/32 1047/788/32 +f 1051/789/33 1052/785/33 1048/786/33 +f 1058/791/32 1057/796/32 1053/792/32 +f 1060/794/35 1058/791/35 1054/793/35 +f 1057/796/33 1059/1732/33 1055/797/33 +f 1059/798/31 1060/794/31 1056/795/31 +f 1066/800/31 1065/805/31 1061/801/31 +f 1068/803/33 1066/800/33 1062/802/33 +f 1065/805/35 1067/1733/35 1063/806/35 +f 1067/807/32 1068/803/32 1064/804/32 +f 1074/809/37 1073/814/37 1069/810/37 +f 1076/812/38 1074/809/38 1070/811/38 +f 1073/814/39 1075/1734/39 1071/815/39 +f 1075/816/40 1076/812/40 1072/813/40 +f 1082/818/40 1081/823/40 1077/819/40 +f 1084/821/39 1082/818/39 1078/820/39 +f 1081/823/38 1083/1735/38 1079/824/38 +f 1083/825/37 1084/821/37 1080/822/37 +f 1090/827/38 1089/832/38 1085/828/38 +f 1092/830/40 1090/827/40 1086/829/40 +f 1089/832/37 1091/1736/37 1087/833/37 +f 1091/834/39 1092/830/39 1088/831/39 +f 1098/836/39 1097/841/39 1093/837/39 +f 1100/839/37 1098/836/37 1094/838/37 +f 1097/841/40 1099/1737/40 1095/842/40 +f 1099/843/38 1100/839/38 1096/840/38 +f 1106/845/41 1105/850/41 1101/846/41 +f 1108/848/42 1106/845/42 1102/847/42 +f 1105/850/43 1107/1738/43 1103/851/43 +f 1107/852/44 1108/848/44 1104/849/44 +f 1114/854/44 1113/859/44 1109/855/44 +f 1116/857/43 1114/854/43 1110/856/43 +f 1113/859/42 1115/1739/42 1111/860/42 +f 1115/861/41 1116/857/41 1112/858/41 +f 1122/863/42 1121/868/42 1117/864/42 +f 1124/866/44 1122/863/44 1118/865/44 +f 1121/868/41 1123/1740/41 1119/869/41 +f 1123/870/43 1124/866/43 1120/867/43 +f 1130/872/43 1129/877/43 1125/873/43 +f 1132/875/41 1130/872/41 1126/874/41 +f 1129/877/44 1131/1741/44 1127/878/44 +f 1131/879/42 1132/875/42 1128/876/42 +f 1341/881/38 1343/1742/38 1295/882/38 +f 1330/884/32 1329/893/32 1281/885/32 +f 1356/887/42 1354/973/42 1306/888/42 +f 1343/890/37 1344/898/37 1296/891/37 +f 1329/893/33 1331/1743/33 1283/894/33 +f 1358/895/44 1357/903/44 1309/896/44 +f 1344/898/39 1342/984/39 1294/899/39 +f 1331/900/31 1332/908/31 1284/901/31 +f 1357/903/42 1359/1744/42 1311/904/42 +f 1346/905/38 1345/912/38 1297/906/38 +f 1332/908/35 1330/884/35 1282/886/35 +f 1359/909/41 1360/917/41 1312/910/41 +f 1345/912/37 1347/1745/37 1299/913/37 +f 1334/914/31 1333/921/31 1285/915/31 +f 1360/917/43 1358/895/43 1310/897/43 +f 1347/918/39 1348/929/39 1300/919/39 +f 1333/921/35 1335/1746/35 1287/922/35 +f 1362/923/42 1361/933/42 1313/924/42 +f 1322/926/33 1321/935/33 1273/927/33 +f 1348/929/40 1346/905/40 1298/907/40 +f 1335/930/32 1336/940/32 1288/931/32 +f 1361/933/41 1363/1747/41 1315/934/41 +f 1321/935/31 1323/1748/31 1275/936/31 +f 1350/937/39 1349/947/39 1301/938/39 +f 1336/940/33 1334/914/33 1286/916/33 +f 1363/941/43 1364/952/43 1316/942/43 +f 1323/944/35 1324/953/35 1276/945/35 +f 1349/947/40 1351/1749/40 1303/948/40 +f 1338/949/37 1337/957/37 1289/950/37 +f 1364/952/44 1362/923/44 1314/925/44 +f 1324/953/32 1322/926/32 1274/928/32 +f 1351/954/38 1352/965/38 1304/955/38 +f 1337/957/39 1339/1750/39 1291/958/39 +f 1366/959/43 1365/969/43 1317/960/43 +f 1326/962/35 1325/971/35 1277/963/35 +f 1352/965/37 1350/937/37 1302/939/37 +f 1339/966/40 1340/975/40 1292/967/40 +f 1365/969/44 1367/1751/44 1319/970/44 +f 1325/971/32 1327/1752/32 1279/972/32 +f 1354/973/41 1353/982/41 1305/974/41 +f 1340/975/38 1338/949/38 1290/951/38 +f 1367/976/42 1368/985/42 1320/977/42 +f 1327/979/33 1328/986/33 1280/980/33 +f 1353/982/43 1355/1753/43 1307/983/43 +f 1342/984/40 1341/881/40 1293/883/40 +f 1368/985/41 1366/959/41 1318/961/41 +f 1328/986/31 1326/962/31 1278/964/31 +f 1355/987/44 1356/887/44 1308/889/44 +f 1371/989/31 1372/1002/31 1370/990/31 +f 1375/992/32 1376/998/32 1373/993/32 +f 1369/995/36 1374/994/36 1373/993/36 +f 1371/997/33 1373/993/33 1376/998/33 +f 1370/1000/35 1375/992/35 1374/994/35 +f 1372/1002/34 1376/998/34 1375/992/34 +f 1379/1003/31 1380/1016/31 1378/1004/31 +f 1383/1006/32 1384/1012/32 1381/1007/32 +f 1377/1009/36 1382/1008/36 1381/1007/36 +f 1379/1011/33 1381/1007/33 1384/1012/33 +f 1378/1014/35 1383/1006/35 1382/1008/35 +f 1380/1016/34 1384/1012/34 1383/1006/34 +f 1387/1017/31 1388/1030/31 1386/1018/31 +f 1391/1020/32 1392/1026/32 1389/1021/32 +f 1385/1023/36 1390/1022/36 1389/1021/36 +f 1387/1025/33 1389/1021/33 1392/1026/33 +f 1386/1028/35 1391/1020/35 1390/1022/35 +f 1388/1030/34 1392/1026/34 1391/1020/34 +f 1395/1031/31 1396/1044/31 1394/1032/31 +f 1399/1034/32 1400/1040/32 1397/1035/32 +f 1393/1037/36 1398/1036/36 1397/1035/36 +f 1395/1039/33 1397/1035/33 1400/1040/33 +f 1394/1042/35 1399/1034/35 1398/1036/35 +f 1396/1044/34 1400/1040/34 1399/1034/34 +f 1402/1045/34 1404/1051/34 1403/1046/34 +f 1407/1048/31 1415/1754/31 1416/1049/31 +f 1404/1051/33 1412/1064/33 1409/1052/33 +f 1401/1047/35 1410/1060/35 1411/1053/35 +f 1402/1045/31 1411/1062/31 1412/1054/31 +f 1403/1046/32 1409/1057/32 1410/1055/32 +f 1406/1056/36 1410/1055/36 1409/1057/36 +f 1407/1059/36 1411/1053/36 1410/1060/36 +f 1408/1050/36 1412/1054/36 1411/1062/36 +f 1405/1063/36 1409/1052/36 1412/1064/36 +f 1405/1058/32 1413/1755/32 1414/1066/32 +f 1408/1065/33 1416/1756/33 1413/1067/33 +f 1406/1061/35 1414/1757/35 1415/1068/35 +f 1418/1069/34 1420/1075/34 1419/1070/34 +f 1423/1072/31 1431/1758/31 1432/1073/31 +f 1420/1075/33 1428/1088/33 1425/1076/33 +f 1417/1071/35 1426/1084/35 1427/1077/35 +f 1418/1069/31 1427/1086/31 1428/1078/31 +f 1419/1070/32 1425/1081/32 1426/1079/32 +f 1422/1080/36 1426/1079/36 1425/1081/36 +f 1423/1083/36 1427/1077/36 1426/1084/36 +f 1424/1074/36 1428/1078/36 1427/1086/36 +f 1421/1087/36 1425/1076/36 1428/1088/36 +f 1421/1082/32 1429/1759/32 1430/1090/32 +f 1424/1089/33 1432/1760/33 1429/1091/33 +f 1422/1085/35 1430/1761/35 1431/1092/35 +f 1434/1093/34 1436/1099/34 1435/1094/34 +f 1439/1096/31 1447/1762/31 1448/1097/31 +f 1436/1099/33 1444/1112/33 1441/1100/33 +f 1433/1095/35 1442/1108/35 1443/1101/35 +f 1434/1093/31 1443/1110/31 1444/1102/31 +f 1435/1094/32 1441/1105/32 1442/1103/32 +f 1438/1104/36 1442/1103/36 1441/1105/36 +f 1439/1107/36 1443/1101/36 1442/1108/36 +f 1440/1098/36 1444/1102/36 1443/1110/36 +f 1437/1111/36 1441/1100/36 1444/1112/36 +f 1437/1106/32 1445/1763/32 1446/1114/32 +f 1440/1113/33 1448/1764/33 1445/1115/33 +f 1438/1109/35 1446/1765/35 1447/1116/35 +f 1450/1117/34 1452/1123/34 1451/1118/34 +f 1455/1120/31 1463/1766/31 1464/1121/31 +f 1452/1123/33 1460/1136/33 1457/1124/33 +f 1449/1119/35 1458/1132/35 1459/1125/35 +f 1450/1117/31 1459/1134/31 1460/1126/31 +f 1451/1118/32 1457/1129/32 1458/1127/32 +f 1454/1128/36 1458/1127/36 1457/1129/36 +f 1455/1131/36 1459/1125/36 1458/1132/36 +f 1456/1122/36 1460/1126/36 1459/1134/36 +f 1453/1135/36 1457/1124/36 1460/1136/36 +f 1453/1130/32 1461/1767/32 1462/1138/32 +f 1456/1137/33 1464/1768/33 1461/1139/33 +f 1454/1133/35 1462/1769/35 1463/1140/35 +f 1466/1141/36 1468/1147/36 1467/1142/36 +f 1471/1144/31 1479/1770/31 1480/1145/31 +f 1468/1147/35 1476/1160/35 1473/1148/35 +f 1465/1143/33 1474/1156/33 1475/1149/33 +f 1466/1141/31 1475/1158/31 1476/1150/31 +f 1465/1143/32 1467/1142/32 1473/1151/32 +f 1470/1153/34 1474/1152/34 1473/1151/34 +f 1471/1155/34 1475/1149/34 1474/1156/34 +f 1472/1146/34 1476/1150/34 1475/1158/34 +f 1469/1159/34 1473/1148/34 1476/1160/34 +f 1469/1154/32 1477/1771/32 1478/1162/32 +f 1472/1161/35 1480/1772/35 1477/1163/35 +f 1470/1157/33 1478/1773/33 1479/1164/33 +f 1482/1165/36 1484/1171/36 1483/1166/36 +f 1487/1168/31 1495/1774/31 1496/1169/31 +f 1484/1171/35 1492/1184/35 1489/1172/35 +f 1481/1167/33 1490/1180/33 1491/1173/33 +f 1482/1165/31 1491/1182/31 1492/1174/31 +f 1483/1166/32 1489/1177/32 1490/1175/32 +f 1486/1176/34 1490/1175/34 1489/1177/34 +f 1487/1179/34 1491/1173/34 1490/1180/34 +f 1488/1170/34 1492/1174/34 1491/1182/34 +f 1485/1183/34 1489/1172/34 1492/1184/34 +f 1485/1178/32 1493/1775/32 1494/1186/32 +f 1488/1185/35 1496/1776/35 1493/1187/35 +f 1486/1181/33 1494/1777/33 1495/1188/33 +f 1498/1189/36 1500/1195/36 1499/1190/36 +f 1503/1192/31 1511/1778/31 1512/1193/31 +f 1500/1195/35 1508/1208/35 1505/1196/35 +f 1497/1191/33 1506/1204/33 1507/1197/33 +f 1498/1189/31 1507/1206/31 1508/1198/31 +f 1499/1190/32 1505/1201/32 1506/1199/32 +f 1502/1200/34 1506/1199/34 1505/1201/34 +f 1503/1203/34 1507/1197/34 1506/1204/34 +f 1504/1194/34 1508/1198/34 1507/1206/34 +f 1501/1207/34 1505/1196/34 1508/1208/34 +f 1501/1202/32 1509/1779/32 1510/1210/32 +f 1504/1209/35 1512/1780/35 1509/1211/35 +f 1502/1205/33 1510/1781/33 1511/1212/33 +f 1514/1213/36 1516/1219/36 1515/1214/36 +f 1519/1216/31 1527/1782/31 1528/1217/31 +f 1516/1219/35 1524/1232/35 1521/1220/35 +f 1513/1215/33 1522/1228/33 1523/1221/33 +f 1514/1213/31 1523/1230/31 1524/1222/31 +f 1515/1214/32 1521/1225/32 1522/1223/32 +f 1518/1224/34 1522/1223/34 1521/1225/34 +f 1519/1227/34 1523/1221/34 1522/1228/34 +f 1520/1218/34 1524/1222/34 1523/1230/34 +f 1517/1231/34 1521/1220/34 1524/1232/34 +f 1517/1226/32 1525/1783/32 1526/1234/32 +f 1520/1233/35 1528/1784/35 1525/1235/35 +f 1518/1229/33 1526/1785/33 1527/1236/33 +f 1530/1237/36 1532/1243/36 1531/1238/36 +f 1535/1240/31 1543/1786/31 1544/1241/31 +f 1532/1243/35 1540/1256/35 1537/1244/35 +f 1529/1239/33 1538/1252/33 1539/1245/33 +f 1530/1237/31 1539/1254/31 1540/1246/31 +f 1531/1238/32 1537/1249/32 1538/1247/32 +f 1534/1248/34 1538/1247/34 1537/1249/34 +f 1535/1251/34 1539/1245/34 1538/1252/34 +f 1536/1242/34 1540/1246/34 1539/1254/34 +f 1533/1255/34 1537/1244/34 1540/1256/34 +f 1533/1250/32 1541/1787/32 1542/1258/32 +f 1536/1257/35 1544/1788/35 1541/1259/35 +f 1534/1253/33 1542/1789/33 1543/1260/33 +f 1546/1261/33 1548/1267/33 1547/1262/33 +f 1551/1264/31 1559/1790/31 1560/1265/31 +f 1548/1267/36 1556/1280/36 1553/1268/36 +f 1545/1263/34 1554/1276/34 1555/1269/34 +f 1546/1261/31 1555/1278/31 1556/1270/31 +f 1547/1262/32 1553/1273/32 1554/1271/32 +f 1550/1272/35 1554/1271/35 1553/1273/35 +f 1551/1275/35 1555/1269/35 1554/1276/35 +f 1552/1266/35 1556/1270/35 1555/1278/35 +f 1549/1279/35 1553/1268/35 1556/1280/35 +f 1549/1274/32 1557/1791/32 1558/1282/32 +f 1552/1281/36 1560/1792/36 1557/1283/36 +f 1550/1277/34 1558/1793/34 1559/1284/34 +f 1562/1285/33 1564/1291/33 1563/1286/33 +f 1567/1288/31 1575/1794/31 1576/1289/31 +f 1564/1291/36 1572/1304/36 1569/1292/36 +f 1561/1287/34 1570/1300/34 1571/1293/34 +f 1562/1285/31 1571/1302/31 1572/1294/31 +f 1563/1286/32 1569/1297/32 1570/1295/32 +f 1566/1296/35 1570/1295/35 1569/1297/35 +f 1567/1299/35 1571/1293/35 1570/1300/35 +f 1568/1290/35 1572/1294/35 1571/1302/35 +f 1565/1303/35 1569/1292/35 1572/1304/35 +f 1565/1298/32 1573/1795/32 1574/1306/32 +f 1568/1305/36 1576/1796/36 1573/1307/36 +f 1566/1301/34 1574/1797/34 1575/1308/34 +f 1578/1309/33 1580/1315/33 1579/1310/33 +f 1583/1312/31 1591/1798/31 1592/1313/31 +f 1580/1315/36 1588/1328/36 1585/1316/36 +f 1577/1311/34 1586/1324/34 1587/1317/34 +f 1578/1309/31 1587/1326/31 1588/1318/31 +f 1579/1310/32 1585/1321/32 1586/1319/32 +f 1582/1320/35 1586/1319/35 1585/1321/35 +f 1583/1323/35 1587/1317/35 1586/1324/35 +f 1584/1314/35 1588/1318/35 1587/1326/35 +f 1581/1327/35 1585/1316/35 1588/1328/35 +f 1581/1322/32 1589/1799/32 1590/1330/32 +f 1584/1329/36 1592/1800/36 1589/1331/36 +f 1582/1325/34 1590/1801/34 1591/1332/34 +f 1594/1333/33 1596/1339/33 1595/1334/33 +f 1599/1336/31 1607/1802/31 1608/1337/31 +f 1596/1339/36 1604/1352/36 1601/1340/36 +f 1593/1335/34 1602/1348/34 1603/1341/34 +f 1594/1333/31 1603/1350/31 1604/1342/31 +f 1595/1334/32 1601/1345/32 1602/1343/32 +f 1598/1344/35 1602/1343/35 1601/1345/35 +f 1599/1347/35 1603/1341/35 1602/1348/35 +f 1600/1338/35 1604/1342/35 1603/1350/35 +f 1597/1351/35 1601/1340/35 1604/1352/35 +f 1597/1346/32 1605/1803/32 1606/1354/32 +f 1600/1353/36 1608/1804/36 1605/1355/36 +f 1598/1349/34 1606/1805/34 1607/1356/34 +f 1610/1357/33 1612/1363/33 1611/1358/33 +f 1615/1360/31 1623/1806/31 1624/1361/31 +f 1612/1363/36 1620/1376/36 1617/1364/36 +f 1609/1359/34 1618/1372/34 1619/1365/34 +f 1610/1357/31 1619/1374/31 1620/1366/31 +f 1611/1358/32 1617/1369/32 1618/1367/32 +f 1614/1368/35 1618/1367/35 1617/1369/35 +f 1615/1371/35 1619/1365/35 1618/1372/35 +f 1616/1362/35 1620/1366/35 1619/1374/35 +f 1613/1375/35 1617/1364/35 1620/1376/35 +f 1613/1370/32 1621/1807/32 1622/1378/32 +f 1616/1377/36 1624/1808/36 1621/1379/36 +f 1614/1373/34 1622/1809/34 1623/1380/34 +f 1626/1381/35 1628/1387/35 1627/1382/35 +f 1631/1384/31 1639/1810/31 1640/1385/31 +f 1628/1387/34 1636/1400/34 1633/1388/34 +f 1625/1383/36 1634/1396/36 1635/1389/36 +f 1626/1381/31 1635/1398/31 1636/1390/31 +f 1627/1382/32 1633/1393/32 1634/1391/32 +f 1630/1392/33 1634/1391/33 1633/1393/33 +f 1631/1395/33 1635/1389/33 1634/1396/33 +f 1632/1386/33 1636/1390/33 1635/1398/33 +f 1629/1399/33 1633/1388/33 1636/1400/33 +f 1629/1394/32 1637/1811/32 1638/1402/32 +f 1632/1401/34 1640/1812/34 1637/1403/34 +f 1630/1397/36 1638/1813/36 1639/1404/36 +f 1642/1405/35 1644/1411/35 1643/1406/35 +f 1647/1408/31 1655/1814/31 1656/1409/31 +f 1644/1411/34 1652/1424/34 1649/1412/34 +f 1641/1407/36 1650/1420/36 1651/1413/36 +f 1642/1405/31 1651/1422/31 1652/1414/31 +f 1643/1406/32 1649/1417/32 1650/1415/32 +f 1646/1416/33 1650/1415/33 1649/1417/33 +f 1647/1419/33 1651/1413/33 1650/1420/33 +f 1648/1410/33 1652/1414/33 1651/1422/33 +f 1645/1423/33 1649/1412/33 1652/1424/33 +f 1645/1418/32 1653/1815/32 1654/1426/32 +f 1648/1425/34 1656/1816/34 1653/1427/34 +f 1646/1421/36 1654/1817/36 1655/1428/36 +f 1658/1429/35 1660/1435/35 1659/1430/35 +f 1663/1432/31 1671/1818/31 1672/1433/31 +f 1660/1435/34 1668/1448/34 1665/1436/34 +f 1657/1431/36 1666/1444/36 1667/1437/36 +f 1658/1429/31 1667/1446/31 1668/1438/31 +f 1659/1430/32 1665/1441/32 1666/1439/32 +f 1662/1440/33 1666/1439/33 1665/1441/33 +f 1663/1443/33 1667/1437/33 1666/1444/33 +f 1664/1434/33 1668/1438/33 1667/1446/33 +f 1661/1447/33 1665/1436/33 1668/1448/33 +f 1661/1442/32 1669/1819/32 1670/1450/32 +f 1664/1449/34 1672/1820/34 1669/1451/34 +f 1662/1445/36 1670/1821/36 1671/1452/36 +f 1674/1453/35 1676/1459/35 1675/1454/35 +f 1679/1456/31 1687/1822/31 1688/1457/31 +f 1676/1459/34 1684/1472/34 1681/1460/34 +f 1673/1455/36 1682/1468/36 1683/1461/36 +f 1674/1453/31 1683/1470/31 1684/1462/31 +f 1673/1455/32 1675/1454/32 1681/1463/32 +f 1678/1465/33 1682/1464/33 1681/1463/33 +f 1679/1467/33 1683/1461/33 1682/1468/33 +f 1680/1458/33 1684/1462/33 1683/1470/33 +f 1677/1471/33 1681/1460/33 1684/1472/33 +f 1678/1465/32 1677/1466/32 1685/1474/32 +f 1680/1473/34 1688/1823/34 1685/1476/34 +f 1678/1469/36 1686/1824/36 1687/1477/36 +f 1690/1478/35 1692/1484/35 1691/1479/35 +f 1695/1481/31 1703/1825/31 1704/1482/31 +f 1692/1484/34 1700/1497/34 1697/1485/34 +f 1689/1480/36 1698/1493/36 1699/1486/36 +f 1690/1478/31 1699/1495/31 1700/1487/31 +f 1691/1479/32 1697/1490/32 1698/1488/32 +f 1694/1489/33 1698/1488/33 1697/1490/33 +f 1695/1492/33 1699/1486/33 1698/1493/33 +f 1696/1483/33 1700/1487/33 1699/1495/33 +f 1693/1496/33 1697/1485/33 1700/1497/33 +f 1693/1491/32 1701/1826/32 1702/1499/32 +f 1696/1498/34 1704/1827/34 1701/1500/34 +f 1694/1494/36 1702/1828/36 1703/1501/36 +f 1947/1502/33 1949/1510/33 1952/1503/33 +f 1946/1505/35 1951/1508/35 1950/1506/35 +f 1948/1504/34 1952/1503/34 1951/1508/34 +f 1945/1509/36 1950/1829/36 1949/1510/36 +f 2075/1513/36 2074/1830/36 2073/1831/36 +f 2073/1831/36 2080/1832/36 2079/1511/36 +f 2079/1511/36 2078/1833/36 2077/1512/36 +f 2077/1512/36 2076/1834/36 2075/1513/36 +f 2075/1513/36 2073/1831/36 2079/1511/36 +f 2082/1835/34 2081/1836/34 2083/1514/34 +f 2083/1514/34 2084/1837/34 2085/1515/34 +f 2085/1515/34 2086/1838/34 2087/1516/34 +f 2087/1516/34 2088/1839/34 2082/1835/34 +f 2082/1835/34 2083/1514/34 2087/1516/34 +f 2091/1519/36 2090/1840/36 2089/1841/36 +f 2089/1841/36 2096/1842/36 2095/1517/36 +f 2095/1517/36 2094/1843/36 2093/1518/36 +f 2093/1518/36 2092/1844/36 2091/1519/36 +f 2091/1519/36 2089/1841/36 2095/1517/36 +f 2098/1522/34 2097/1845/34 2099/1846/34 +f 2099/1846/34 2100/1847/34 2101/1520/34 +f 2101/1520/34 2102/1848/34 2103/1521/34 +f 2103/1521/34 2104/1849/34 2098/1522/34 +f 2098/1522/34 2099/1846/34 2101/1520/34 +f 2112/1523/35 2109/1530/35 2107/1524/35 +f 2110/1526/33 2111/1529/33 2106/1527/33 +f 2111/1529/36 2112/1523/36 2108/1525/36 +f 2109/1530/34 2110/1850/34 2105/1531/34 +f 2120/1532/35 2117/1539/35 2115/1533/35 +f 2118/1535/33 2119/1538/33 2114/1536/33 +f 2119/1538/36 2120/1532/36 2116/1534/36 +f 2117/1539/34 2118/1851/34 2113/1540/34 +s 1 +f 269/1852/45 280/1853/36 268/1854/36 +f 276/1855/46 287/1856/47 275/1857/47 +f 266/1858/48 278/1859/33 265/1860/33 +f 273/1861/49 284/1862/50 272/1863/50 +f 270/1864/51 281/1865/45 269/1852/45 +f 265/1860/33 288/1866/46 276/1855/46 +f 267/1867/52 277/1868/48 266/1858/48 +f 274/1869/34 285/1870/49 273/1861/49 +f 271/1871/35 282/1872/51 270/1864/51 +f 268/1873/36 279/1874/52 267/1867/52 +f 275/1857/47 286/1875/34 274/1869/34 +f 272/1863/50 283/1876/35 271/1871/35 +f 292/1877/36 305/1878/45 304/1879/36 +f 300/1880/46 311/1881/47 299/1882/47 +f 290/1883/48 302/1884/33 289/1885/33 +f 297/1886/49 308/1887/50 296/1888/50 +f 293/1889/45 306/1890/51 305/1878/45 +f 289/1885/33 312/1891/46 300/1880/46 +f 291/1892/52 301/1893/48 290/1883/48 +f 298/1894/34 309/1895/49 297/1886/49 +f 295/1896/35 306/1890/51 294/1897/51 +f 292/1898/36 303/1899/52 291/1892/52 +f 298/1894/34 311/1881/47 310/1900/34 +f 296/1888/50 307/1901/35 295/1896/35 +f 317/1902/45 328/1903/36 316/1904/36 +f 324/1905/46 335/1906/47 323/1907/47 +f 314/1908/48 326/1909/33 313/1910/33 +f 321/1911/49 332/1912/50 320/1913/50 +f 318/1914/51 329/1915/45 317/1902/45 +f 313/1910/33 336/1916/46 324/1905/46 +f 315/1917/52 325/1918/48 314/1908/48 +f 322/1919/34 333/1920/49 321/1911/49 +f 319/1921/35 330/1922/51 318/1914/51 +f 316/1923/36 327/1924/52 315/1917/52 +f 323/1907/47 334/1925/34 322/1919/34 +f 320/1913/50 331/1926/35 319/1921/35 +f 341/1927/45 352/1928/36 340/1929/36 +f 348/1930/46 359/1931/47 347/1932/47 +f 338/1933/48 350/1934/33 337/1935/33 +f 345/1936/49 356/1937/50 344/1938/50 +f 342/1939/51 353/1940/45 341/1927/45 +f 337/1935/33 360/1941/46 348/1930/46 +f 338/1933/48 351/1942/52 349/1943/48 +f 346/1944/34 357/1945/49 345/1936/49 +f 343/1946/35 354/1947/51 342/1939/51 +f 340/1948/36 351/1942/52 339/1949/52 +f 346/1944/34 359/1931/47 358/1950/34 +f 344/1938/50 355/1951/35 343/1946/35 +f 392/1952/53 399/1953/54 391/1954/34 +f 390/1955/55 397/1956/56 389/1957/35 +f 388/1958/57 395/1959/58 387/1960/36 +f 386/1961/59 393/1962/60 385/1963/33 +f 385/1963/33 400/1964/61 392/1952/53 +f 391/1965/34 398/1966/62 390/1955/55 +f 389/1957/35 396/1967/63 388/1958/57 +f 387/1960/36 394/1968/64 386/1961/59 +f 393/1969/60 402/1970/65 401/1971/66 +f 393/1969/60 407/1972/67 400/1973/61 +f 397/1974/56 404/1975/68 396/1967/63 +f 395/1959/58 402/1970/65 394/1968/64 +f 398/1976/62 405/1977/69 397/1974/56 +f 396/1967/63 403/1978/70 395/1959/58 +f 406/1979/71 412/1980/72 405/1977/69 +f 403/1978/70 411/1981/73 410/1982/74 +f 401/1971/66 409/1983/75 408/1984/76 +f 407/1972/67 408/1984/76 414/1985/77 +f 405/1977/69 411/1981/73 404/1975/68 +f 403/1978/70 409/1983/75 402/1970/65 +f 398/1976/62 399/1986/54 406/1979/71 +f 406/1979/71 399/1986/54 413/1987/78 +f 400/1973/61 407/1972/67 399/1988/54 +f 407/1972/67 414/1985/77 399/1988/54 +f 422/1989/57 429/1990/79 421/1991/36 +f 420/1992/59 427/1993/80 419/1994/33 +f 418/1995/53 425/1996/81 417/1997/34 +f 416/1998/55 423/1999/82 415/2000/35 +f 415/2000/35 430/2001/83 422/1989/57 +f 421/2002/36 428/2003/84 420/1992/59 +f 419/1994/33 426/2004/85 418/1995/53 +f 417/1997/34 424/2005/86 416/1998/55 +f 423/2006/82 432/2007/87 431/2008/88 +f 423/2006/82 437/2009/89 430/2010/83 +f 427/2011/80 434/2012/90 426/2004/85 +f 424/2005/86 433/2013/91 432/2007/87 +f 427/2011/80 436/2014/92 435/2015/93 +f 426/2004/85 433/2013/91 425/1996/81 +f 436/2014/92 442/2016/94 435/2015/93 +f 433/2013/91 441/2017/95 440/2018/96 +f 432/2007/87 438/2019/97 431/2008/88 +f 431/2008/88 444/2020/98 437/2009/89 +f 435/2015/93 441/2017/95 434/2012/90 +f 433/2013/91 439/2021/99 432/2007/87 +f 428/2022/84 429/2023/79 436/2014/92 +f 436/2014/92 429/2023/79 443/2024/100 +f 430/2010/83 437/2009/89 429/2025/79 +f 437/2009/89 444/2020/98 429/2025/79 +f 440/2018/96 409/1983/75 410/1982/74 +f 439/2021/99 410/1982/74 411/1981/73 +f 438/2026/97 411/1981/73 412/2027/72 +f 444/2028/98 412/2027/72 413/2029/78 +f 429/2030/79 413/2029/78 399/2031/54 +f 399/2032/54 443/2033/100 429/2034/79 +f 442/2035/94 414/2036/77 408/2037/76 +f 441/2017/95 408/2037/76 409/1983/75 +f 452/2038/53 459/2039/54 451/2040/34 +f 450/2041/55 457/2042/56 449/2043/35 +f 448/2044/57 455/2045/58 447/2046/36 +f 446/2047/59 453/2048/60 445/2049/33 +f 445/2049/33 460/2050/61 452/2038/53 +f 451/2051/34 458/2052/62 450/2041/55 +f 449/2043/35 456/2053/63 448/2044/57 +f 447/2046/36 454/2054/64 446/2047/59 +f 453/2055/60 462/2056/65 461/2057/66 +f 453/2055/60 467/2058/67 460/2059/61 +f 456/2053/63 465/2060/69 464/2061/68 +f 454/2054/64 463/2062/70 462/2056/65 +f 457/2063/56 466/2064/71 465/2060/69 +f 455/2045/58 464/2061/68 463/2062/70 +f 466/2064/71 472/2065/72 465/2060/69 +f 464/2061/68 470/2066/74 463/2062/70 +f 462/2056/65 468/2067/76 461/2057/66 +f 467/2058/67 468/2067/76 474/2068/77 +f 465/2060/69 471/2069/73 464/2061/68 +f 463/2062/70 469/2070/75 462/2056/65 +f 458/2071/62 459/2072/54 466/2064/71 +f 466/2064/71 459/2072/54 473/2073/78 +f 460/2059/61 467/2058/67 459/2074/54 +f 467/2058/67 474/2068/77 459/2074/54 +f 482/2075/57 489/2076/79 481/2077/36 +f 480/2078/59 487/2079/80 479/2080/33 +f 478/2081/53 485/2082/81 477/2083/34 +f 476/2084/55 483/2085/82 475/2086/35 +f 475/2086/35 490/2087/83 482/2075/57 +f 481/2088/36 488/2089/84 480/2078/59 +f 479/2080/33 486/2090/85 478/2081/53 +f 477/2083/34 484/2091/86 476/2084/55 +f 483/2092/82 492/2093/87 491/2094/88 +f 483/2092/82 497/2095/89 490/2096/83 +f 487/2097/80 494/2098/101 486/2090/85 +f 484/2091/86 493/2099/91 492/2093/87 +f 487/2097/80 496/2100/92 495/2101/93 +f 486/2090/85 493/2099/91 485/2082/81 +f 496/2100/92 502/2102/94 495/2101/93 +f 494/2098/101 500/2103/96 493/2099/91 +f 491/2094/88 499/2104/99 498/2105/97 +f 497/2095/89 498/2105/97 504/2106/98 +f 494/2098/101 502/2102/94 501/2107/95 +f 493/2099/91 499/2104/99 492/2093/87 +f 488/2108/84 489/2109/79 496/2100/92 +f 496/2100/92 489/2109/79 503/2110/100 +f 490/2096/83 497/2095/89 489/2111/79 +f 497/2095/89 504/2106/98 489/2111/79 +f 500/2103/96 469/2070/75 470/2066/74 +f 471/2069/73 500/2103/96 470/2066/74 +f 498/2112/97 471/2069/73 472/2113/72 +f 504/2114/98 472/2113/72 473/2115/78 +f 489/2116/79 473/2115/78 459/2117/54 +f 459/2118/54 503/2119/100 489/2120/79 +f 502/2121/94 474/2122/77 468/2123/76 +f 501/2107/95 468/2123/76 469/2070/75 +f 511/2124/31 518/2125/102 510/2126/102 +f 509/2127/35 516/2128/103 508/2129/103 +f 507/2130/32 513/2131/104 506/2132/104 +f 512/2133/105 519/2134/31 511/2135/31 +f 510/2126/102 517/2136/35 509/2127/35 +f 508/2129/103 515/2137/32 507/2130/32 +f 506/2132/104 514/2138/33 505/2139/33 +f 505/2139/33 520/2140/105 512/2133/105 +f 580/2141/32 603/2142/41 579/2143/41 +f 587/2144/39 610/2145/31 586/2146/31 +f 584/2147/40 607/2148/35 583/2149/35 +f 581/2150/38 604/2151/32 580/2141/32 +f 588/2152/43 611/2153/39 587/2144/39 +f 578/2154/37 601/2155/33 577/2156/33 +f 585/2157/44 608/2158/40 584/2147/40 +f 582/2159/42 605/2160/38 581/2150/38 +f 577/2156/33 612/2161/43 588/2152/43 +f 579/2143/41 602/2162/37 578/2154/37 +f 586/2163/31 609/2164/44 585/2157/44 +f 583/2149/35 606/2165/42 582/2159/42 +f 613/2166/33 590/2167/37 589/2168/33 +f 620/2169/40 597/2170/44 596/2171/40 +f 617/2172/38 594/2173/42 593/2174/38 +f 624/2175/43 589/2168/33 600/2176/43 +f 614/2177/37 591/2178/41 590/2167/37 +f 621/2179/44 598/2180/31 597/2170/44 +f 618/2181/42 595/2182/35 594/2173/42 +f 615/2183/41 592/2184/32 591/2178/41 +f 622/2185/31 599/2186/39 598/2187/31 +f 619/2188/35 596/2171/40 595/2182/35 +f 616/2189/32 593/2174/38 592/2184/32 +f 623/2190/39 600/2176/43 599/2186/39 +f 626/507/106 579/2143/107 578/2154/106 +f 627/539/107 580/2141/70 579/2143/107 +f 580/2141/70 629/536/108 581/2150/108 +f 629/534/108 582/2159/109 581/2150/108 +f 630/530/109 583/2149/57 582/2159/109 +f 583/2149/57 632/528/110 584/2147/110 +f 632/524/110 585/2157/111 584/2147/110 +f 633/521/111 586/2163/79 585/2157/111 +f 634/518/79 587/2144/112 586/2146/79 +f 635/515/112 588/2152/113 587/2144/112 +f 588/2152/113 625/514/59 577/2156/59 +f 577/2156/59 626/511/106 578/2154/106 +f 601/2155/53 638/2191/114 637/2192/53 +f 603/2142/115 638/2193/114 602/2162/114 +f 604/2151/91 639/2194/115 603/2142/115 +f 604/2151/91 641/2195/116 640/2196/91 +f 606/2165/117 641/2197/116 605/2160/116 +f 607/2148/55 642/2198/117 606/2165/117 +f 607/2148/55 644/2199/118 643/2200/55 +f 609/2164/119 644/2201/118 608/2158/118 +f 610/2202/54 645/2203/119 609/2164/119 +f 611/2153/120 646/2204/54 610/2145/54 +f 612/2161/121 647/2205/120 611/2153/120 +f 601/2155/53 648/2206/121 612/2161/121 +f 658/1665/31 671/558/39 659/519/39 +f 655/527/35 668/552/40 656/1666/40 +f 652/535/32 665/546/38 653/532/38 +f 659/519/39 672/561/43 660/516/43 +f 649/510/33 662/542/37 650/1664/37 +f 656/1666/40 669/554/44 657/525/44 +f 653/532/38 666/548/42 654/1667/42 +f 660/516/43 661/563/33 649/510/33 +f 650/1664/37 663/541/41 651/508/41 +f 657/525/44 670/556/31 658/522/31 +f 654/1667/42 667/550/35 655/527/35 +f 651/508/41 664/544/32 652/535/32 +f 706/1681/31 719/616/39 707/577/39 +f 703/585/35 716/610/40 704/1682/40 +f 700/593/32 713/604/38 701/590/38 +f 707/577/39 720/619/43 708/574/43 +f 697/568/33 710/600/37 698/1680/37 +f 704/1682/40 717/612/44 705/583/44 +f 701/590/38 714/606/42 702/1683/42 +f 708/574/43 709/621/33 697/568/33 +f 698/1680/37 711/599/41 699/566/41 +f 705/583/44 718/614/31 706/580/31 +f 702/1683/42 715/608/35 703/585/35 +f 699/566/41 712/602/32 700/593/32 +f 591/2178/115 722/598/114 590/2167/114 +f 592/2184/91 723/601/115 591/2178/115 +f 592/2184/91 725/1686/116 724/603/91 +f 594/2173/117 725/1687/116 593/2174/116 +f 595/2182/55 726/607/117 594/2173/117 +f 595/2182/55 728/609/118 727/1689/55 +f 597/2170/119 728/611/118 596/2171/118 +f 598/2180/54 729/613/119 597/2170/119 +f 599/2186/120 730/615/54 598/2187/54 +f 600/2176/121 731/618/120 599/2186/120 +f 600/2176/121 721/1694/53 732/620/121 +f 589/2168/53 722/622/114 721/1695/53 +f 686/2207/37 675/2208/41 674/2209/37 +f 687/2210/41 676/2211/32 675/2208/41 +f 688/2212/32 677/2213/38 676/2211/32 +f 689/2214/38 678/2215/42 677/2213/38 +f 690/2216/42 679/2217/35 678/2215/42 +f 691/2218/35 680/2219/40 679/2217/35 +f 692/2220/40 681/2221/44 680/2219/40 +f 693/2222/44 682/2223/31 681/2221/44 +f 694/2224/31 683/2225/39 682/2226/31 +f 695/2227/39 684/2228/43 683/2225/39 +f 696/2229/43 673/2230/33 684/2228/43 +f 685/2231/33 674/2209/37 673/2230/33 +f 614/2177/106 735/2232/107 615/2183/107 +f 735/2233/107 616/2189/70 615/2183/107 +f 616/2189/70 737/2234/108 617/2172/108 +f 737/2235/108 618/2181/109 617/2172/108 +f 738/2236/109 619/2188/57 618/2181/109 +f 619/2188/57 740/2237/110 620/2169/110 +f 740/2238/110 621/2179/111 620/2169/110 +f 741/2239/111 622/2240/79 621/2179/111 +f 742/2241/79 623/2190/112 622/2185/79 +f 743/2242/112 624/2175/113 623/2190/112 +f 744/2243/113 613/2166/59 624/2175/113 +f 613/2166/59 734/2244/106 614/2177/106 +f 784/2245/59 791/2246/105 783/2247/33 +f 782/2248/53 789/2249/122 781/2250/34 +f 780/2251/55 787/2252/123 779/2253/35 +f 778/2254/57 785/2255/124 777/2256/36 +f 777/2256/36 792/2257/125 784/2245/59 +f 783/2258/33 790/2259/126 782/2248/53 +f 781/2250/34 788/2260/127 780/2251/55 +f 779/2253/35 786/2261/128 778/2254/57 +f 786/2261/128 793/2262/129 785/2263/124 +f 785/2263/124 799/2264/130 792/2265/125 +f 788/2260/127 797/2266/131 796/2267/132 +f 787/2252/123 794/2268/133 786/2261/128 +f 789/2269/122 798/2270/134 797/2266/131 +f 787/2252/123 796/2267/132 795/2271/103 +f 798/2270/134 804/2272/135 797/2266/131 +f 795/2271/103 803/2273/136 802/2274/137 +f 793/2262/129 801/2275/138 800/2276/139 +f 799/2264/130 800/2276/139 806/2277/140 +f 797/2266/131 803/2273/136 796/2267/132 +f 795/2271/103 801/2275/138 794/2268/133 +f 790/2278/126 791/2279/105 798/2270/134 +f 798/2270/134 791/2279/105 805/2280/141 +f 792/2265/125 799/2264/130 791/2281/105 +f 799/2264/130 806/2277/140 791/2281/105 +f 814/2282/142 821/2283/102 813/2284/143 +f 812/2285/144 819/2286/145 811/2287/146 +f 810/2288/147 817/2289/148 809/2290/149 +f 808/2291/150 815/2292/151 807/2293/91 +f 807/2293/91 822/2294/152 814/2282/142 +f 813/2295/143 820/2296/153 812/2285/144 +f 811/2287/146 818/2297/154 810/2288/147 +f 809/2290/149 816/2298/155 808/2291/150 +f 815/2299/151 824/2300/156 823/2301/157 +f 815/2299/151 829/2302/158 822/2303/152 +f 819/2304/145 826/2305/159 818/2297/154 +f 817/2289/148 824/2300/156 816/2298/155 +f 819/2304/145 828/2306/160 827/2307/161 +f 818/2297/154 825/2308/104 817/2289/148 +f 828/2306/160 834/2309/162 827/2307/161 +f 825/2308/104 833/2310/163 832/2311/164 +f 823/2301/157 831/2312/165 830/2313/166 +f 829/2302/158 830/2313/166 836/2314/167 +f 827/2307/161 833/2310/163 826/2305/159 +f 825/2308/104 831/2312/165 824/2300/156 +f 820/2315/153 821/2316/102 828/2306/160 +f 828/2306/160 821/2316/102 835/2317/168 +f 822/2303/152 829/2302/158 821/2318/102 +f 829/2302/158 836/2314/167 821/2318/102 +f 832/2311/164 801/2275/138 802/2274/137 +f 831/2312/165 802/2274/137 803/2273/136 +f 830/2319/166 803/2273/136 804/2320/135 +f 836/2321/167 804/2320/135 805/2322/141 +f 821/2323/102 805/2322/141 791/2324/105 +f 806/2325/140 821/2326/102 791/2327/105 +f 834/2328/162 806/2325/140 800/2329/139 +f 833/2310/163 800/2329/139 801/2275/138 +f 844/2330/59 851/2331/105 843/2332/33 +f 842/2333/53 849/2334/122 841/2335/34 +f 840/2336/55 847/2337/123 839/2338/35 +f 838/2339/57 845/2340/124 837/2341/36 +f 837/2341/36 852/2342/125 844/2330/59 +f 843/2343/33 850/2344/126 842/2333/53 +f 841/2335/34 848/2345/127 840/2336/55 +f 839/2338/35 846/2346/128 838/2339/57 +f 846/2346/128 853/2347/129 845/2348/124 +f 845/2348/124 859/2349/130 852/2350/125 +f 849/2351/122 856/2352/132 848/2345/127 +f 847/2337/123 854/2353/169 846/2346/128 +f 849/2351/122 858/2354/134 857/2355/131 +f 848/2345/127 855/2356/103 847/2337/123 +f 858/2354/134 864/2357/135 857/2355/131 +f 856/2352/132 862/2358/137 855/2356/103 +f 853/2347/129 861/2359/138 860/2360/139 +f 859/2349/130 860/2360/139 866/2361/140 +f 857/2355/131 863/2362/136 856/2352/132 +f 855/2356/103 861/2359/138 854/2353/169 +f 850/2363/126 851/2364/105 858/2354/134 +f 858/2354/134 851/2364/105 865/2365/141 +f 852/2350/125 859/2349/130 851/2366/105 +f 859/2349/130 866/2361/140 851/2366/105 +f 874/2367/142 881/2368/102 873/2369/143 +f 872/2370/144 879/2371/145 871/2372/146 +f 870/2373/147 877/2374/148 869/2375/149 +f 868/2376/150 875/2377/151 867/2378/91 +f 867/2378/91 882/2379/152 874/2367/142 +f 873/2380/143 880/2381/153 872/2370/144 +f 871/2372/146 878/2382/154 870/2373/147 +f 869/2375/149 876/2383/155 868/2376/150 +f 876/2383/155 883/2384/157 875/2385/151 +f 875/2385/151 889/2386/158 882/2387/152 +f 879/2388/145 886/2389/159 878/2382/154 +f 877/2374/148 884/2390/170 876/2383/155 +f 879/2388/145 888/2391/160 887/2392/161 +f 877/2374/148 886/2389/159 885/2393/104 +f 888/2391/160 894/2394/162 887/2392/161 +f 886/2389/159 892/2395/164 885/2393/104 +f 883/2384/157 891/2396/165 890/2397/166 +f 889/2386/158 890/2397/166 896/2398/167 +f 887/2392/161 893/2399/163 886/2389/159 +f 884/2390/170 892/2395/164 891/2396/165 +f 880/2400/153 881/2401/102 888/2391/160 +f 888/2391/160 881/2401/102 895/2402/168 +f 882/2387/152 889/2386/158 881/2403/102 +f 889/2386/158 896/2398/167 881/2403/102 +f 892/2395/164 861/2359/138 862/2358/137 +f 891/2396/165 862/2358/137 863/2362/136 +f 890/2404/166 863/2362/136 864/2405/135 +f 896/2406/167 864/2405/135 865/2407/141 +f 881/2408/102 865/2407/141 851/2409/105 +f 866/2410/140 881/2411/102 851/2412/105 +f 894/2413/162 866/2410/140 860/2414/139 +f 893/2399/163 860/2414/139 861/2359/138 +f 813/2415/143 903/2416/171 814/2417/142 +f 873/2418/143 910/2419/171 874/2420/142 +f 810/2288/147 900/2421/79 811/2287/146 +f 871/2372/146 906/2422/172 907/2423/79 +f 811/2287/146 901/2424/173 812/2285/144 +f 871/2372/146 908/2425/173 872/2370/144 +f 809/2426/149 897/2427/174 898/2428/175 +f 868/2429/150 905/2430/175 869/2431/149 +f 812/2285/144 902/2432/176 813/2433/143 +f 872/2370/144 909/2434/176 873/2435/143 +f 809/2426/149 899/2436/172 810/2288/147 +f 869/2431/149 906/2422/172 870/2373/147 +f 902/2437/176 917/2438/177 903/2416/171 +f 899/2436/172 914/2439/178 900/2421/79 +f 907/2423/79 922/2440/179 908/2425/173 +f 905/2430/175 918/2441/180 919/2442/181 +f 900/2421/79 915/2443/179 901/2424/173 +f 909/2434/176 922/2440/179 923/2444/182 +f 898/2428/175 911/2445/180 912/2446/181 +f 905/2430/175 920/2447/183 906/2422/172 +f 902/2432/176 915/2443/179 916/2448/182 +f 909/2449/176 924/2450/177 910/2419/171 +f 898/2428/175 913/2451/183 899/2436/172 +f 907/2423/79 920/2447/183 921/2452/178 +f 867/2453/91 904/2454/174 868/2429/150 +f 904/2454/174 867/2453/91 918/2441/180 +f 874/2420/142 910/2419/171 867/2453/91 +f 910/2419/171 924/2450/177 867/2453/91 +f 807/2455/91 897/2427/174 808/2456/150 +f 897/2427/174 807/2455/91 911/2445/180 +f 814/2417/142 903/2416/171 807/2455/91 +f 903/2416/171 917/2438/177 807/2455/91 +f 920/2447/183 937/2457/31 921/2452/178 +f 912/2458/181 929/2459/105 913/2451/183 +f 807/2460/91 927/2461/104 911/2462/180 +f 921/2452/178 938/2463/102 922/2440/179 +f 913/2451/183 930/2464/31 914/2439/178 +f 923/2465/182 938/2463/102 939/2466/35 +f 914/2439/178 931/2467/102 915/2443/179 +f 807/2460/91 933/2468/103 925/2469/32 +f 923/2470/182 940/2471/103 924/2472/177 +f 916/2473/182 931/2467/102 932/2474/35 +f 867/2475/91 934/2476/104 918/2477/180 +f 916/2478/182 933/2468/103 917/2479/177 +f 919/2480/181 934/2476/104 935/2481/33 +f 867/2475/91 940/2471/103 926/2482/32 +f 919/2480/181 936/2483/105 920/2447/183 +f 912/2458/181 927/2461/104 928/2484/33 +f 1138/2485/80 1156/2486/92 1157/2487/93 +f 1146/2488/80 1149/2489/92 1150/2490/93 +f 1136/2491/81 1160/2492/87 1135/2493/86 +f 1144/2494/81 1153/2495/87 1143/2496/86 +f 1137/2497/85 1159/2498/91 1136/2491/81 +f 1145/2499/85 1152/2500/91 1144/2494/81 +f 1134/2501/82 1162/2502/89 1133/2503/83 +f 1142/2504/82 1155/2505/89 1141/2506/83 +f 1142/2504/82 1153/2495/87 1154/2507/88 +f 1135/2493/86 1161/2508/88 1134/2501/82 +f 1145/2499/85 1150/2490/93 1151/2509/101 +f 1137/2497/85 1157/2487/93 1158/2510/101 +f 1155/2505/89 1168/2511/97 1169/2512/98 +f 1151/2509/101 1166/2513/96 1152/2500/91 +f 1159/2498/91 1174/2514/99 1160/2492/87 +f 1156/2486/92 1171/2515/94 1157/2487/93 +f 1152/2500/91 1167/2516/99 1153/2495/87 +f 1161/2508/88 1174/2514/99 1175/2517/97 +f 1149/2489/92 1164/2518/94 1150/2490/93 +f 1158/2510/101 1171/2515/94 1172/2519/95 +f 1154/2507/88 1167/2516/99 1168/2511/97 +f 1162/2502/89 1175/2517/97 1176/2520/98 +f 1151/2509/101 1164/2518/94 1165/2521/95 +f 1158/2510/101 1173/2522/96 1159/2498/91 +f 1140/2523/79 1156/2486/92 1139/2524/84 +f 1156/2486/92 1140/2523/79 1170/2525/100 +f 1133/2503/83 1162/2502/89 1140/2526/79 +f 1162/2502/89 1176/2520/98 1140/2526/79 +f 1148/2527/79 1149/2489/92 1147/2528/84 +f 1149/2489/92 1148/2527/79 1163/2529/100 +f 1141/2506/83 1155/2505/89 1148/2530/79 +f 1155/2505/89 1169/2512/98 1148/2530/79 +f 1172/2519/95 1189/2531/32 1173/2522/96 +f 1164/2532/94 1181/2533/104 1165/2521/95 +f 1148/2534/79 1179/2535/105 1163/2536/100 +f 1173/2522/96 1190/2537/103 1174/2514/99 +f 1165/2521/95 1182/2538/32 1166/2513/96 +f 1174/2514/99 1191/2539/35 1175/2540/97 +f 1166/2513/96 1183/2541/103 1167/2516/99 +f 1169/2542/98 1177/2543/31 1148/2544/79 +f 1175/2540/97 1192/2545/102 1176/2546/98 +f 1167/2516/99 1184/2547/35 1168/2548/97 +f 1140/2549/79 1186/2550/105 1170/2551/100 +f 1168/2548/97 1185/2552/102 1169/2542/98 +f 1170/2551/100 1187/2553/33 1171/2554/94 +f 1176/2546/98 1178/2555/31 1140/2556/79 +f 1171/2554/94 1188/2557/104 1172/2519/95 +f 1163/2536/100 1180/2558/33 1164/2532/94 +f 1145/2499/85 1206/2559/33 1146/2560/80 +f 1138/2561/80 1199/2562/59 1139/2563/84 +f 1146/2560/80 1207/2564/59 1147/2565/84 +f 1139/2563/84 1200/2566/36 1140/2567/79 +f 1140/2568/79 1193/2569/57 1133/2570/83 +f 1147/2565/84 1208/2571/36 1148/2572/79 +f 1148/2573/79 1201/2574/57 1141/2575/83 +f 1133/2570/83 1194/2576/35 1134/2577/82 +f 1141/2575/83 1202/2578/35 1142/2579/82 +f 1134/2577/82 1195/2580/55 1135/2493/86 +f 1142/2579/82 1203/2581/55 1143/2496/86 +f 1135/2493/86 1196/2582/34 1136/2491/81 +f 1143/2496/86 1204/2583/34 1144/2494/81 +f 1136/2491/81 1197/2584/53 1137/2497/85 +f 1144/2494/81 1205/2585/53 1145/2499/85 +f 1137/2497/85 1198/2586/33 1138/2561/80 +f 1219/2587/36 1212/2588/79 1211/2589/36 +f 1217/2590/32 1210/2591/70 1209/2592/32 +f 1224/2593/91 1209/2592/32 1216/2594/91 +f 1222/2595/54 1215/2596/34 1214/2597/54 +f 1220/2598/79 1213/2599/31 1212/2588/79 +f 1218/2600/70 1211/2589/36 1210/2591/70 +f 1223/2601/34 1216/2594/91 1215/2596/34 +f 1221/2602/31 1214/2597/54 1213/2603/31 +f 1235/2604/36 1228/2605/79 1227/2606/36 +f 1233/2607/32 1226/2608/70 1225/2609/32 +f 1240/2610/91 1225/2609/32 1232/2611/91 +f 1238/2612/54 1231/2613/34 1230/2614/54 +f 1236/2615/79 1229/2616/31 1228/2605/79 +f 1234/2617/70 1227/2606/36 1226/2608/70 +f 1239/2618/34 1232/2611/91 1231/2613/34 +f 1237/2619/31 1230/2614/54 1229/2620/31 +f 1251/2621/36 1244/2622/79 1243/2623/36 +f 1249/2624/32 1242/2625/70 1241/2626/32 +f 1256/2627/91 1241/2626/32 1248/2628/91 +f 1254/2629/54 1247/2630/34 1246/2631/54 +f 1252/2632/79 1245/2633/31 1244/2622/79 +f 1250/2634/70 1243/2623/36 1242/2625/70 +f 1255/2635/34 1248/2628/91 1247/2630/34 +f 1253/2636/31 1246/2631/54 1245/2637/31 +f 1267/2638/36 1260/2639/79 1259/2640/36 +f 1265/2641/32 1258/2642/70 1257/2643/32 +f 1272/2644/91 1257/2643/32 1264/2645/91 +f 1270/2646/54 1263/2647/34 1262/2648/54 +f 1268/2649/79 1261/2650/31 1260/2639/79 +f 1266/2651/70 1259/2640/36 1258/2642/70 +f 1271/2652/34 1264/2645/91 1263/2647/34 +f 1269/2653/31 1262/2648/54 1261/2654/31 +f 1712/2655/53 1719/2656/54 1711/2657/34 +f 1710/2658/55 1717/2659/56 1709/2660/35 +f 1708/2661/57 1715/2662/58 1707/2663/36 +f 1706/2664/59 1713/2665/60 1705/2666/33 +f 1705/2666/33 1720/2667/61 1712/2655/53 +f 1711/2668/34 1718/2669/62 1710/2658/55 +f 1709/2660/35 1716/2670/63 1708/2661/57 +f 1707/2663/36 1714/2671/64 1706/2664/59 +f 1713/2672/60 1722/2673/65 1721/2674/66 +f 1713/2672/60 1727/2675/67 1720/2676/61 +f 1716/2670/63 1725/2677/69 1724/2678/68 +f 1715/2662/58 1722/2673/65 1714/2671/64 +f 1718/2679/62 1725/2677/69 1717/2680/56 +f 1715/2662/58 1724/2678/68 1723/2681/70 +f 1726/2682/71 1732/2683/72 1725/2677/69 +f 1723/2681/70 1731/2684/73 1730/2685/74 +f 1721/2674/66 1729/2686/75 1728/2687/76 +f 1727/2675/67 1728/2687/76 1734/2688/77 +f 1725/2677/69 1731/2684/73 1724/2678/68 +f 1723/2681/70 1729/2686/75 1722/2673/65 +f 1718/2679/62 1719/2689/54 1726/2682/71 +f 1726/2682/71 1719/2689/54 1733/2690/78 +f 1720/2676/61 1727/2675/67 1719/2691/54 +f 1727/2675/67 1734/2688/77 1719/2691/54 +f 1742/2692/57 1749/2693/79 1741/2694/36 +f 1740/2695/59 1747/2696/80 1739/2697/33 +f 1738/2698/53 1745/2699/81 1737/2700/34 +f 1736/2701/55 1743/2702/82 1735/2703/35 +f 1735/2703/35 1750/2704/83 1742/2692/57 +f 1741/2705/36 1748/2706/84 1740/2695/59 +f 1739/2697/33 1746/2707/85 1738/2698/53 +f 1737/2700/34 1744/2708/86 1736/2701/55 +f 1743/2709/82 1752/2710/87 1751/2711/88 +f 1743/2709/82 1757/2712/89 1750/2713/83 +f 1746/2707/85 1755/2714/93 1754/2715/101 +f 1745/2699/81 1752/2710/87 1744/2708/86 +f 1748/2716/84 1755/2714/93 1747/2717/80 +f 1745/2699/81 1754/2715/101 1753/2718/91 +f 1756/2719/92 1762/2720/94 1755/2714/93 +f 1754/2715/101 1760/2721/96 1753/2718/91 +f 1751/2711/88 1759/2722/99 1758/2723/97 +f 1757/2712/89 1758/2723/97 1764/2724/98 +f 1755/2714/93 1761/2725/95 1754/2715/101 +f 1753/2718/91 1759/2722/99 1752/2710/87 +f 1748/2716/84 1749/2726/79 1756/2719/92 +f 1756/2719/92 1749/2726/79 1763/2727/100 +f 1750/2713/83 1757/2712/89 1749/2728/79 +f 1757/2712/89 1764/2724/98 1749/2728/79 +f 1760/2721/96 1729/2686/75 1730/2685/74 +f 1759/2722/99 1730/2685/74 1731/2684/73 +f 1758/2729/97 1731/2684/73 1732/2730/72 +f 1764/2731/98 1732/2730/72 1733/2732/78 +f 1749/2733/79 1733/2732/78 1719/2734/54 +f 1719/2735/54 1763/2736/100 1749/2737/79 +f 1762/2738/94 1734/2739/77 1728/2740/76 +f 1761/2725/95 1728/2740/76 1729/2686/75 +f 1772/2741/53 1779/2742/54 1771/2743/34 +f 1770/2744/55 1777/2745/56 1769/2746/35 +f 1768/2747/57 1775/2748/58 1767/2749/36 +f 1766/2750/59 1773/2751/60 1765/2752/33 +f 1765/2752/33 1780/2753/61 1772/2741/53 +f 1771/2754/34 1778/2755/62 1770/2744/55 +f 1769/2746/35 1776/2756/63 1768/2747/57 +f 1767/2749/36 1774/2757/64 1766/2750/59 +f 1773/2758/60 1782/2759/65 1781/2760/66 +f 1773/2758/60 1787/2761/67 1780/2762/61 +f 1776/2756/63 1785/2763/69 1784/2764/68 +f 1775/2748/58 1782/2759/65 1774/2757/64 +f 1778/2765/62 1785/2763/69 1777/2766/56 +f 1775/2748/58 1784/2764/68 1783/2767/70 +f 1786/2768/71 1792/2769/72 1785/2763/69 +f 1783/2767/70 1791/2770/73 1790/2771/74 +f 1781/2760/66 1789/2772/75 1788/2773/76 +f 1787/2761/67 1788/2773/76 1794/2774/77 +f 1785/2763/69 1791/2770/73 1784/2764/68 +f 1783/2767/70 1789/2772/75 1782/2759/65 +f 1778/2765/62 1779/2775/54 1786/2768/71 +f 1786/2768/71 1779/2775/54 1793/2776/78 +f 1780/2762/61 1787/2761/67 1779/2777/54 +f 1787/2761/67 1794/2774/77 1779/2777/54 +f 1802/2778/57 1809/2779/79 1801/2780/36 +f 1800/2781/59 1807/2782/80 1799/2783/33 +f 1798/2784/53 1805/2785/81 1797/2786/34 +f 1796/2787/55 1803/2788/82 1795/2789/35 +f 1795/2789/35 1810/2790/83 1802/2778/57 +f 1801/2791/36 1808/2792/84 1800/2781/59 +f 1799/2783/33 1806/2793/85 1798/2784/53 +f 1797/2786/34 1804/2794/86 1796/2787/55 +f 1803/2795/82 1812/2796/87 1811/2797/88 +f 1803/2795/82 1817/2798/89 1810/2799/83 +f 1806/2793/85 1815/2800/93 1814/2801/101 +f 1804/2794/86 1813/2802/91 1812/2796/87 +f 1807/2803/80 1816/2804/92 1815/2800/93 +f 1806/2793/85 1813/2802/91 1805/2785/81 +f 1816/2804/92 1822/2805/94 1815/2800/93 +f 1813/2802/91 1821/2806/95 1820/2807/96 +f 1811/2797/88 1819/2808/99 1818/2809/97 +f 1817/2798/89 1818/2809/97 1824/2810/98 +f 1815/2800/93 1821/2806/95 1814/2801/101 +f 1813/2802/91 1819/2808/99 1812/2796/87 +f 1808/2811/84 1809/2812/79 1816/2804/92 +f 1816/2804/92 1809/2812/79 1823/2813/100 +f 1810/2799/83 1817/2798/89 1809/2814/79 +f 1817/2798/89 1824/2810/98 1809/2814/79 +f 1820/2807/96 1789/2772/75 1790/2771/74 +f 1791/2770/73 1820/2807/96 1790/2771/74 +f 1818/2815/97 1791/2770/73 1792/2816/72 +f 1824/2817/98 1792/2816/72 1793/2818/78 +f 1809/2819/79 1793/2818/78 1779/2820/54 +f 1794/2821/77 1809/2822/79 1779/2823/54 +f 1822/2824/94 1794/2821/77 1788/2825/76 +f 1821/2806/95 1788/2825/76 1789/2772/75 +f 1832/2826/53 1839/2827/54 1831/2828/34 +f 1830/2829/55 1837/2830/56 1829/2831/35 +f 1828/2832/57 1835/2833/58 1827/2834/36 +f 1826/2835/59 1833/2836/60 1825/2837/33 +f 1825/2837/33 1840/2838/61 1832/2826/53 +f 1831/2839/34 1838/2840/62 1830/2829/55 +f 1829/2831/35 1836/2841/63 1828/2832/57 +f 1827/2834/36 1834/2842/64 1826/2835/59 +f 1833/2843/60 1842/2844/65 1841/2845/66 +f 1833/2843/60 1847/2846/67 1840/2847/61 +f 1836/2841/63 1845/2848/69 1844/2849/68 +f 1835/2833/58 1842/2844/65 1834/2842/64 +f 1837/2850/56 1846/2851/71 1845/2848/69 +f 1836/2841/63 1843/2852/70 1835/2833/58 +f 1846/2851/71 1852/2853/72 1845/2848/69 +f 1843/2852/70 1851/2854/73 1850/2855/74 +f 1841/2845/66 1849/2856/75 1848/2857/76 +f 1847/2846/67 1848/2857/76 1854/2858/77 +f 1845/2848/69 1851/2854/73 1844/2849/68 +f 1843/2852/70 1849/2856/75 1842/2844/65 +f 1838/2859/62 1839/2860/54 1846/2851/71 +f 1846/2851/71 1839/2860/54 1853/2861/78 +f 1840/2847/61 1847/2846/67 1839/2862/54 +f 1847/2846/67 1854/2858/77 1839/2862/54 +f 1862/2863/57 1869/2864/79 1861/2865/36 +f 1860/2866/59 1867/2867/80 1859/2868/33 +f 1858/2869/53 1865/2870/81 1857/2871/34 +f 1856/2872/55 1863/2873/82 1855/2874/35 +f 1855/2874/35 1870/2875/83 1862/2863/57 +f 1861/2876/36 1868/2877/84 1860/2866/59 +f 1859/2868/33 1866/2878/85 1858/2869/53 +f 1857/2871/34 1864/2879/86 1856/2872/55 +f 1863/2880/82 1872/2881/87 1871/2882/88 +f 1863/2880/82 1877/2883/89 1870/2884/83 +f 1867/2885/80 1874/2886/184 1866/2878/85 +f 1865/2870/81 1872/2881/87 1864/2879/86 +f 1868/2887/84 1875/2888/93 1867/2885/80 +f 1865/2870/81 1874/2886/184 1873/2889/91 +f 1876/2890/92 1882/2891/94 1875/2888/93 +f 1873/2889/91 1881/2892/95 1880/2893/96 +f 1872/2881/87 1878/2894/97 1871/2882/88 +f 1877/2883/89 1878/2894/97 1884/2895/98 +f 1875/2888/93 1881/2892/95 1874/2886/184 +f 1873/2889/91 1879/2896/99 1872/2881/87 +f 1868/2887/84 1869/2897/79 1876/2890/92 +f 1876/2890/92 1869/2897/79 1883/2898/100 +f 1870/2884/83 1877/2883/89 1869/2899/79 +f 1877/2883/89 1884/2895/98 1869/2899/79 +f 1880/2893/96 1849/2856/75 1850/2855/74 +f 1879/2896/99 1850/2855/74 1851/2854/73 +f 1878/2900/97 1851/2854/73 1852/2901/72 +f 1884/2902/98 1852/2901/72 1853/2903/78 +f 1869/2904/79 1853/2903/78 1839/2905/54 +f 1839/2906/54 1883/2907/100 1869/2908/79 +f 1882/2909/94 1854/2910/77 1848/2911/76 +f 1881/2892/95 1848/2911/76 1849/2856/75 +f 1892/2912/53 1899/2913/54 1891/2914/34 +f 1890/2915/55 1897/2916/56 1889/2917/35 +f 1888/2918/57 1895/2919/58 1887/2920/36 +f 1886/2921/59 1893/2922/60 1885/2923/33 +f 1885/2923/33 1900/2924/61 1892/2912/53 +f 1891/2925/34 1898/2926/62 1890/2915/55 +f 1889/2917/35 1896/2927/63 1888/2918/57 +f 1887/2920/36 1894/2928/64 1886/2921/59 +f 1894/2928/64 1901/2929/66 1893/2930/60 +f 1893/2930/60 1907/2931/67 1900/2932/61 +f 1897/2933/56 1904/2934/68 1896/2927/63 +f 1895/2919/58 1902/2935/65 1894/2928/64 +f 1897/2933/56 1906/2936/71 1905/2937/69 +f 1895/2919/58 1904/2934/68 1903/2938/70 +f 1906/2936/71 1912/2939/72 1905/2937/69 +f 1903/2938/70 1911/2940/73 1910/2941/74 +f 1901/2929/66 1909/2942/75 1908/2943/76 +f 1907/2931/67 1908/2943/76 1914/2944/77 +f 1905/2937/69 1911/2940/73 1904/2934/68 +f 1903/2938/70 1909/2942/75 1902/2935/65 +f 1898/2945/62 1899/2946/54 1906/2936/71 +f 1906/2936/71 1899/2946/54 1913/2947/78 +f 1900/2932/61 1907/2931/67 1899/2948/54 +f 1907/2931/67 1914/2944/77 1899/2948/54 +f 1922/2949/57 1929/2950/79 1921/2951/36 +f 1920/2952/59 1927/2953/80 1919/2954/33 +f 1918/2955/53 1925/2956/81 1917/2957/34 +f 1916/2958/55 1923/2959/82 1915/2960/35 +f 1915/2960/35 1930/2961/83 1922/2949/57 +f 1921/2962/36 1928/2963/84 1920/2952/59 +f 1919/2954/33 1926/2964/85 1918/2955/53 +f 1917/2957/34 1924/2965/86 1916/2958/55 +f 1923/2966/82 1932/2967/87 1931/2968/88 +f 1930/2969/83 1931/2968/88 1937/2970/89 +f 1927/2971/80 1934/2972/101 1926/2964/85 +f 1925/2956/81 1932/2967/87 1924/2965/86 +f 1927/2971/80 1936/2973/92 1935/2974/93 +f 1926/2964/85 1933/2975/91 1925/2956/81 +f 1936/2973/92 1942/2976/94 1935/2974/93 +f 1934/2972/101 1940/2977/96 1933/2975/91 +f 1931/2968/88 1939/2978/99 1938/2979/97 +f 1937/2970/89 1938/2979/97 1944/2980/98 +f 1935/2974/93 1941/2981/95 1934/2972/101 +f 1932/2967/87 1940/2977/96 1939/2978/99 +f 1928/2982/84 1929/2983/79 1936/2973/92 +f 1936/2973/92 1929/2983/79 1943/2984/100 +f 1930/2969/83 1937/2970/89 1929/2985/79 +f 1937/2970/89 1944/2980/98 1929/2985/79 +f 1940/2977/96 1909/2942/75 1910/2941/74 +f 1939/2978/99 1910/2941/74 1911/2940/73 +f 1938/2986/97 1911/2940/73 1912/2987/72 +f 1944/2988/98 1912/2987/72 1913/2989/78 +f 1929/2990/79 1913/2989/78 1899/2991/54 +f 1914/2992/77 1929/2993/79 1899/2994/54 +f 1942/2995/94 1914/2992/77 1908/2996/76 +f 1941/2981/95 1908/2996/76 1909/2942/75 +f 1960/2997/53 1967/2998/54 1959/2999/34 +f 1958/3000/55 1965/3001/56 1957/3002/35 +f 1956/3003/57 1963/3004/58 1955/3005/36 +f 1954/3006/59 1961/3007/60 1953/3008/33 +f 1953/3008/33 1968/3009/61 1960/2997/53 +f 1959/3010/34 1966/3011/62 1958/3000/55 +f 1957/3002/35 1964/3012/63 1956/3003/57 +f 1955/3005/36 1962/3013/64 1954/3006/59 +f 1961/3014/60 1970/3015/65 1969/3016/66 +f 1961/3014/60 1975/3017/67 1968/3018/61 +f 1964/3012/63 1973/3019/69 1972/3020/68 +f 1963/3004/58 1970/3015/65 1962/3013/64 +f 1965/3021/56 1974/3022/71 1973/3019/69 +f 1964/3012/63 1971/3023/70 1963/3004/58 +f 1974/3022/71 1980/3024/72 1973/3019/69 +f 1971/3023/70 1979/3025/73 1978/3026/74 +f 1969/3016/66 1977/3027/75 1976/3028/76 +f 1975/3017/67 1976/3028/76 1982/3029/77 +f 1973/3019/69 1979/3025/73 1972/3020/68 +f 1971/3023/70 1977/3027/75 1970/3015/65 +f 1966/3030/62 1967/3031/54 1974/3022/71 +f 1974/3022/71 1967/3031/54 1981/3032/78 +f 1968/3018/61 1975/3017/67 1967/3033/54 +f 1975/3017/67 1982/3029/77 1967/3033/54 +f 1990/3034/57 1997/3035/79 1989/3036/36 +f 1988/3037/59 1995/3038/80 1987/3039/33 +f 1986/3040/53 1993/3041/81 1985/3042/34 +f 1984/3043/55 1991/3044/82 1983/3045/35 +f 1983/3045/35 1998/3046/83 1990/3034/57 +f 1989/3047/36 1996/3048/84 1988/3037/59 +f 1987/3039/33 1994/3049/85 1986/3040/53 +f 1985/3042/34 1992/3050/86 1984/3043/55 +f 1991/3051/82 2000/3052/87 1999/3053/88 +f 1991/3051/82 2005/3054/89 1998/3055/83 +f 1995/3056/80 2002/3057/90 1994/3049/85 +f 1992/3050/86 2001/3058/91 2000/3052/87 +f 1995/3056/80 2004/3059/92 2003/3060/93 +f 1994/3049/85 2001/3058/91 1993/3041/81 +f 2004/3059/92 2010/3061/94 2003/3060/93 +f 2001/3058/91 2009/3062/95 2008/3063/96 +f 1999/3053/88 2007/3064/99 2006/3065/97 +f 2005/3054/89 2006/3065/97 2012/3066/98 +f 2003/3060/93 2009/3062/95 2002/3057/90 +f 2001/3058/91 2007/3064/99 2000/3052/87 +f 1996/3067/84 1997/3068/79 2004/3059/92 +f 2004/3059/92 1997/3068/79 2011/3069/100 +f 1998/3055/83 2005/3054/89 1997/3070/79 +f 2005/3054/89 2012/3066/98 1997/3070/79 +f 2008/3063/96 1977/3027/75 1978/3026/74 +f 2007/3064/99 1978/3026/74 1979/3025/73 +f 2006/3071/97 1979/3025/73 1980/3072/72 +f 2012/3073/98 1980/3072/72 1981/3074/78 +f 1997/3075/79 1981/3074/78 1967/3076/54 +f 1967/3077/54 2011/3078/100 1997/3079/79 +f 2010/3080/94 1982/3081/77 1976/3082/76 +f 2009/3062/95 1976/3082/76 1977/3027/75 +f 2020/3083/53 2027/3084/54 2019/3085/34 +f 2018/3086/55 2025/3087/56 2017/3088/35 +f 2016/3089/57 2023/3090/58 2015/3091/36 +f 2014/3092/59 2021/3093/60 2013/3094/33 +f 2013/3094/33 2028/3095/61 2020/3083/53 +f 2019/3096/34 2026/3097/62 2018/3086/55 +f 2017/3088/35 2024/3098/63 2016/3089/57 +f 2015/3091/36 2022/3099/64 2014/3092/59 +f 2022/3099/64 2029/3100/66 2021/3101/60 +f 2028/3102/61 2029/3100/66 2035/3103/67 +f 2024/3098/63 2033/3104/69 2032/3105/68 +f 2023/3090/58 2030/3106/65 2022/3099/64 +f 2025/3107/56 2034/3108/71 2033/3104/69 +f 2024/3098/63 2031/3109/70 2023/3090/58 +f 2034/3108/71 2040/3110/72 2033/3104/69 +f 2032/3105/68 2038/3111/74 2031/3109/70 +f 2029/3100/66 2037/3112/75 2036/3113/76 +f 2035/3103/67 2036/3113/76 2042/3114/77 +f 2033/3104/69 2039/3115/73 2032/3105/68 +f 2031/3109/70 2037/3112/75 2030/3106/65 +f 2026/3116/62 2027/3117/54 2034/3108/71 +f 2034/3108/71 2027/3117/54 2041/3118/78 +f 2028/3102/61 2035/3103/67 2027/3119/54 +f 2035/3103/67 2042/3114/77 2027/3119/54 +f 2050/3120/57 2057/3121/79 2049/3122/36 +f 2048/3123/59 2055/3124/80 2047/3125/33 +f 2046/3126/53 2053/3127/81 2045/3128/34 +f 2044/3129/55 2051/3130/82 2043/3131/35 +f 2043/3131/35 2058/3132/83 2050/3120/57 +f 2049/3133/36 2056/3134/84 2048/3123/59 +f 2047/3125/33 2054/3135/85 2046/3126/53 +f 2045/3128/34 2052/3136/86 2044/3129/55 +f 2051/3137/82 2060/3138/87 2059/3139/88 +f 2051/3137/82 2065/3140/89 2058/3141/83 +f 2054/3135/85 2063/3142/93 2062/3143/101 +f 2052/3136/86 2061/3144/91 2060/3138/87 +f 2055/3145/80 2064/3146/92 2063/3142/93 +f 2053/3127/81 2062/3143/101 2061/3144/91 +f 2064/3146/92 2070/3147/94 2063/3142/93 +f 2062/3143/101 2068/3148/96 2061/3144/91 +f 2059/3139/88 2067/3149/99 2066/3150/97 +f 2059/3139/88 2072/3151/98 2065/3140/89 +f 2063/3142/93 2069/3152/95 2062/3143/101 +f 2061/3144/91 2067/3149/99 2060/3138/87 +f 2056/3153/84 2057/3154/79 2064/3146/92 +f 2064/3146/92 2057/3154/79 2071/3155/100 +f 2058/3141/83 2065/3140/89 2057/3156/79 +f 2065/3140/89 2072/3151/98 2057/3156/79 +f 2068/3148/96 2037/3112/75 2038/3111/74 +f 2067/3149/99 2038/3111/74 2039/3115/73 +f 2066/3157/97 2039/3115/73 2040/3158/72 +f 2072/3159/98 2040/3158/72 2041/3160/78 +f 2057/3161/79 2041/3160/78 2027/3162/54 +f 2042/3163/77 2057/3164/79 2027/3165/54 +f 2070/3166/94 2042/3163/77 2036/3167/76 +f 2069/3152/95 2036/3167/76 2037/3112/75 +f 2079/3168/31 2086/3169/102 2078/3170/102 +f 2077/3171/35 2084/3172/103 2076/3173/103 +f 2075/3174/32 2081/3175/104 2074/3176/104 +f 2080/3177/105 2087/3178/31 2079/3179/31 +f 2078/3170/102 2085/3180/35 2077/3171/35 +f 2076/3173/103 2083/3181/32 2075/3174/32 +f 2074/3176/104 2082/3182/33 2073/3183/33 +f 2073/3183/33 2088/3184/105 2080/3177/105 +f 2095/3185/31 2102/3186/102 2094/3187/102 +f 2093/3188/35 2100/3189/103 2092/3190/103 +f 2091/3191/32 2097/3192/104 2090/3193/104 +f 2096/3194/105 2103/3195/31 2095/3196/31 +f 2094/3187/102 2101/3197/35 2093/3188/35 +f 2092/3190/103 2099/3198/32 2091/3191/32 +f 2090/3193/104 2098/3199/33 2089/3200/33 +f 2089/3200/33 2104/3201/105 2096/3194/105 +f 269/1852/45 281/1865/45 280/1853/36 +f 276/1855/46 288/1866/46 287/1856/47 +f 266/1858/48 277/1868/48 278/1859/33 +f 273/1861/49 285/1870/49 284/1862/50 +f 270/1864/51 282/1872/51 281/1865/45 +f 265/1860/33 278/1859/33 288/1866/46 +f 267/1867/52 279/1874/52 277/1868/48 +f 274/1869/34 286/1875/34 285/1870/49 +f 271/1871/35 283/1876/35 282/1872/51 +f 268/1873/36 280/3202/36 279/1874/52 +f 275/1857/47 287/1856/47 286/1875/34 +f 272/1863/50 284/1862/50 283/1876/35 +f 292/1877/36 293/1889/45 305/1878/45 +f 300/1880/46 312/1891/46 311/1881/47 +f 290/1883/48 301/1893/48 302/1884/33 +f 297/1886/49 309/1895/49 308/1887/50 +f 293/1889/45 294/1897/51 306/1890/51 +f 289/1885/33 302/1884/33 312/1891/46 +f 291/1892/52 303/1899/52 301/1893/48 +f 298/1894/34 310/1900/34 309/1895/49 +f 295/1896/35 307/1901/35 306/1890/51 +f 292/1898/36 304/3203/36 303/1899/52 +f 298/1894/34 299/1882/47 311/1881/47 +f 296/1888/50 308/1887/50 307/1901/35 +f 317/1902/45 329/1915/45 328/1903/36 +f 324/1905/46 336/1916/46 335/1906/47 +f 314/1908/48 325/1918/48 326/1909/33 +f 321/1911/49 333/1920/49 332/1912/50 +f 318/1914/51 330/1922/51 329/1915/45 +f 313/1910/33 326/1909/33 336/1916/46 +f 315/1917/52 327/1924/52 325/1918/48 +f 322/1919/34 334/1925/34 333/1920/49 +f 319/1921/35 331/1926/35 330/1922/51 +f 316/1923/36 328/3204/36 327/1924/52 +f 323/1907/47 335/1906/47 334/1925/34 +f 320/1913/50 332/1912/50 331/1926/35 +f 341/1927/45 353/1940/45 352/1928/36 +f 348/1930/46 360/1941/46 359/1931/47 +f 338/1933/48 349/1943/48 350/1934/33 +f 345/1936/49 357/1945/49 356/1937/50 +f 342/1939/51 354/1947/51 353/1940/45 +f 337/1935/33 350/1934/33 360/1941/46 +f 338/1933/48 339/1949/52 351/1942/52 +f 346/1944/34 358/1950/34 357/1945/49 +f 343/1946/35 355/1951/35 354/1947/51 +f 340/1948/36 352/3205/36 351/1942/52 +f 346/1944/34 347/1932/47 359/1931/47 +f 344/1938/50 356/1937/50 355/1951/35 +f 392/1952/53 400/1964/61 399/1953/54 +f 390/1955/55 398/1966/62 397/1956/56 +f 388/1958/57 396/1967/63 395/1959/58 +f 386/1961/59 394/1968/64 393/1962/60 +f 385/1963/33 393/1962/60 400/1964/61 +f 391/1965/34 399/3206/54 398/1966/62 +f 389/1957/35 397/1956/56 396/1967/63 +f 387/1960/36 395/1959/58 394/1968/64 +f 393/1969/60 394/1968/64 402/1970/65 +f 393/1969/60 401/1971/66 407/1972/67 +f 397/1974/56 405/1977/69 404/1975/68 +f 395/1959/58 403/1978/70 402/1970/65 +f 398/1976/62 406/1979/71 405/1977/69 +f 396/1967/63 404/1975/68 403/1978/70 +f 406/1979/71 413/1987/78 412/1980/72 +f 403/1978/70 404/1975/68 411/1981/73 +f 401/1971/66 402/1970/65 409/1983/75 +f 407/1972/67 401/1971/66 408/1984/76 +f 405/1977/69 412/1980/72 411/1981/73 +f 403/1978/70 410/1982/74 409/1983/75 +f 422/1989/57 430/2001/83 429/1990/79 +f 420/1992/59 428/2003/84 427/1993/80 +f 418/1995/53 426/2004/85 425/1996/81 +f 416/1998/55 424/2005/86 423/1999/82 +f 415/2000/35 423/1999/82 430/2001/83 +f 421/2002/36 429/3207/79 428/2003/84 +f 419/1994/33 427/1993/80 426/2004/85 +f 417/1997/34 425/1996/81 424/2005/86 +f 423/2006/82 424/2005/86 432/2007/87 +f 423/2006/82 431/2008/88 437/2009/89 +f 427/2011/80 435/2015/93 434/2012/90 +f 424/2005/86 425/1996/81 433/2013/91 +f 427/2011/80 428/2022/84 436/2014/92 +f 426/2004/85 434/2012/90 433/2013/91 +f 436/2014/92 443/2024/100 442/2016/94 +f 433/2013/91 434/2012/90 441/2017/95 +f 432/2007/87 439/2021/99 438/2019/97 +f 431/2008/88 438/2019/97 444/2020/98 +f 435/2015/93 442/2016/94 441/2017/95 +f 433/2013/91 440/2018/96 439/2021/99 +f 440/2018/96 441/2017/95 409/1983/75 +f 439/2021/99 440/2018/96 410/1982/74 +f 438/2026/97 439/2021/99 411/1981/73 +f 444/2028/98 438/2026/97 412/2027/72 +f 429/2030/79 444/2028/98 413/2029/78 +f 399/2032/54 414/2036/77 443/2033/100 +f 442/2035/94 443/2033/100 414/2036/77 +f 441/2017/95 442/2035/94 408/2037/76 +f 452/2038/53 460/2050/61 459/2039/54 +f 450/2041/55 458/2052/62 457/2042/56 +f 448/2044/57 456/2053/63 455/2045/58 +f 446/2047/59 454/2054/64 453/2048/60 +f 445/2049/33 453/2048/60 460/2050/61 +f 451/2051/34 459/3208/54 458/2052/62 +f 449/2043/35 457/2042/56 456/2053/63 +f 447/2046/36 455/2045/58 454/2054/64 +f 453/2055/60 454/2054/64 462/2056/65 +f 453/2055/60 461/2057/66 467/2058/67 +f 456/2053/63 457/2063/56 465/2060/69 +f 454/2054/64 455/2045/58 463/2062/70 +f 457/2063/56 458/2071/62 466/2064/71 +f 455/2045/58 456/2053/63 464/2061/68 +f 466/2064/71 473/2073/78 472/2065/72 +f 464/2061/68 471/2069/73 470/2066/74 +f 462/2056/65 469/2070/75 468/2067/76 +f 467/2058/67 461/2057/66 468/2067/76 +f 465/2060/69 472/2065/72 471/2069/73 +f 463/2062/70 470/2066/74 469/2070/75 +f 482/2075/57 490/2087/83 489/2076/79 +f 480/2078/59 488/2089/84 487/2079/80 +f 478/2081/53 486/2090/85 485/2082/81 +f 476/2084/55 484/2091/86 483/2085/82 +f 475/2086/35 483/2085/82 490/2087/83 +f 481/2088/36 489/3209/79 488/2089/84 +f 479/2080/33 487/2079/80 486/2090/85 +f 477/2083/34 485/2082/81 484/2091/86 +f 483/2092/82 484/2091/86 492/2093/87 +f 483/2092/82 491/2094/88 497/2095/89 +f 487/2097/80 495/2101/93 494/2098/101 +f 484/2091/86 485/2082/81 493/2099/91 +f 487/2097/80 488/2108/84 496/2100/92 +f 486/2090/85 494/2098/101 493/2099/91 +f 496/2100/92 503/2110/100 502/2102/94 +f 494/2098/101 501/2107/95 500/2103/96 +f 491/2094/88 492/2093/87 499/2104/99 +f 497/2095/89 491/2094/88 498/2105/97 +f 494/2098/101 495/2101/93 502/2102/94 +f 493/2099/91 500/2103/96 499/2104/99 +f 500/2103/96 501/2107/95 469/2070/75 +f 471/2069/73 499/2104/99 500/2103/96 +f 498/2112/97 499/2104/99 471/2069/73 +f 504/2114/98 498/2112/97 472/2113/72 +f 489/2116/79 504/2114/98 473/2115/78 +f 459/2118/54 474/2122/77 503/2119/100 +f 502/2121/94 503/2119/100 474/2122/77 +f 501/2107/95 502/2121/94 468/2123/76 +f 511/2124/31 519/3210/31 518/2125/102 +f 509/2127/35 517/2136/35 516/2128/103 +f 507/2130/32 515/2137/32 513/2131/104 +f 512/2133/105 520/2140/105 519/2134/31 +f 510/2126/102 518/2125/102 517/2136/35 +f 508/2129/103 516/2128/103 515/2137/32 +f 506/2132/104 513/2131/104 514/2138/33 +f 505/2139/33 514/2138/33 520/2140/105 +f 580/2141/32 604/2151/32 603/2142/41 +f 587/2144/39 611/2153/39 610/2145/31 +f 584/2147/40 608/2158/40 607/2148/35 +f 581/2150/38 605/2160/38 604/2151/32 +f 588/2152/43 612/2161/43 611/2153/39 +f 578/2154/37 602/2162/37 601/2155/33 +f 585/2157/44 609/2164/44 608/2158/40 +f 582/2159/42 606/2165/42 605/2160/38 +f 577/2156/33 601/2155/33 612/2161/43 +f 579/2143/41 603/2142/41 602/2162/37 +f 586/2163/31 610/2202/31 609/2164/44 +f 583/2149/35 607/2148/35 606/2165/42 +f 613/2166/33 614/2177/37 590/2167/37 +f 620/2169/40 621/2179/44 597/2170/44 +f 617/2172/38 618/2181/42 594/2173/42 +f 624/2175/43 613/2166/33 589/2168/33 +f 614/2177/37 615/2183/41 591/2178/41 +f 621/2179/44 622/2240/31 598/2180/31 +f 618/2181/42 619/2188/35 595/2182/35 +f 615/2183/41 616/2189/32 592/2184/32 +f 622/2185/31 623/2190/39 599/2186/39 +f 619/2188/35 620/2169/40 596/2171/40 +f 616/2189/32 617/2172/38 593/2174/38 +f 623/2190/39 624/2175/43 600/2176/43 +f 626/507/106 627/509/107 579/2143/107 +f 627/539/107 628/538/70 580/2141/70 +f 580/2141/70 628/537/70 629/536/108 +f 629/534/108 630/533/109 582/2159/109 +f 630/530/109 631/531/57 583/2149/57 +f 583/2149/57 631/529/57 632/528/110 +f 632/524/110 633/526/111 585/2157/111 +f 633/521/111 634/523/79 586/2163/79 +f 634/518/79 635/520/112 587/2144/112 +f 635/515/112 636/517/113 588/2152/113 +f 588/2152/113 636/513/113 625/514/59 +f 577/2156/59 625/512/59 626/511/106 +f 601/2155/53 602/2162/114 638/2191/114 +f 603/2142/115 639/3211/115 638/2193/114 +f 604/2151/91 640/3212/91 639/2194/115 +f 604/2151/91 605/2160/116 641/2195/116 +f 606/2165/117 642/3213/117 641/2197/116 +f 607/2148/55 643/3214/55 642/2198/117 +f 607/2148/55 608/2158/118 644/2199/118 +f 609/2164/119 645/3215/119 644/2201/118 +f 610/2202/54 646/3216/54 645/2203/119 +f 611/2153/120 647/3217/120 646/2204/54 +f 612/2161/121 648/3218/121 647/2205/120 +f 601/2155/53 637/3219/53 648/2206/121 +f 658/1665/31 670/559/31 671/558/39 +f 655/527/35 667/550/35 668/552/40 +f 652/535/32 664/544/32 665/546/38 +f 659/519/39 671/558/39 672/561/43 +f 649/510/33 661/563/33 662/542/37 +f 656/1666/40 668/552/40 669/554/44 +f 653/532/38 665/546/38 666/548/42 +f 660/516/43 672/561/43 661/563/33 +f 650/1664/37 662/542/37 663/541/41 +f 657/525/44 669/554/44 670/556/31 +f 654/1667/42 666/548/42 667/550/35 +f 651/508/41 663/541/41 664/544/32 +f 706/1681/31 718/617/31 719/616/39 +f 703/585/35 715/608/35 716/610/40 +f 700/593/32 712/602/32 713/604/38 +f 707/577/39 719/616/39 720/619/43 +f 697/568/33 709/621/33 710/600/37 +f 704/1682/40 716/610/40 717/612/44 +f 701/590/38 713/604/38 714/606/42 +f 708/574/43 720/619/43 709/621/33 +f 698/1680/37 710/600/37 711/599/41 +f 705/583/44 717/612/44 718/614/31 +f 702/1683/42 714/606/42 715/608/35 +f 699/566/41 711/599/41 712/602/32 +f 591/2178/115 723/1684/115 722/598/114 +f 592/2184/91 724/1685/91 723/601/115 +f 592/2184/91 593/2174/116 725/1686/116 +f 594/2173/117 726/605/117 725/1687/116 +f 595/2182/55 727/1688/55 726/607/117 +f 595/2182/55 596/2171/118 728/609/118 +f 597/2170/119 729/1690/119 728/611/118 +f 598/2180/54 730/1691/54 729/613/119 +f 599/2186/120 731/1692/120 730/615/54 +f 600/2176/121 732/1693/121 731/618/120 +f 600/2176/121 589/2168/53 721/1694/53 +f 589/2168/53 590/2167/114 722/622/114 +f 686/2207/37 687/2210/41 675/2208/41 +f 687/2210/41 688/2212/32 676/2211/32 +f 688/2212/32 689/2214/38 677/2213/38 +f 689/2214/38 690/2216/42 678/2215/42 +f 690/2216/42 691/2218/35 679/2217/35 +f 691/2218/35 692/2220/40 680/2219/40 +f 692/2220/40 693/2222/44 681/2221/44 +f 693/2222/44 694/3220/31 682/2223/31 +f 694/2224/31 695/2227/39 683/2225/39 +f 695/2227/39 696/2229/43 684/2228/43 +f 696/2229/43 685/2231/33 673/2230/33 +f 685/2231/33 686/2207/37 674/2209/37 +f 614/2177/106 734/3221/106 735/2232/107 +f 735/2233/107 736/3222/70 616/2189/70 +f 616/2189/70 736/3223/70 737/2234/108 +f 737/2235/108 738/3224/109 618/2181/109 +f 738/2236/109 739/3225/57 619/2188/57 +f 619/2188/57 739/3226/57 740/2237/110 +f 740/2238/110 741/3227/111 621/2179/111 +f 741/2239/111 742/3228/79 622/2240/79 +f 742/2241/79 743/3229/112 623/2190/112 +f 743/2242/112 744/3230/113 624/2175/113 +f 744/2243/113 733/3231/59 613/2166/59 +f 613/2166/59 733/3232/59 734/2244/106 +f 784/2245/59 792/2257/125 791/2246/105 +f 782/2248/53 790/2259/126 789/2249/122 +f 780/2251/55 788/2260/127 787/2252/123 +f 778/2254/57 786/2261/128 785/2255/124 +f 777/2256/36 785/2255/124 792/2257/125 +f 783/2258/33 791/3233/105 790/2259/126 +f 781/2250/34 789/2249/122 788/2260/127 +f 779/2253/35 787/2252/123 786/2261/128 +f 786/2261/128 794/2268/133 793/2262/129 +f 785/2263/124 793/2262/129 799/2264/130 +f 788/2260/127 789/2269/122 797/2266/131 +f 787/2252/123 795/2271/103 794/2268/133 +f 789/2269/122 790/2278/126 798/2270/134 +f 787/2252/123 788/2260/127 796/2267/132 +f 798/2270/134 805/2280/141 804/2272/135 +f 795/2271/103 796/2267/132 803/2273/136 +f 793/2262/129 794/2268/133 801/2275/138 +f 799/2264/130 793/2262/129 800/2276/139 +f 797/2266/131 804/2272/135 803/2273/136 +f 795/2271/103 802/2274/137 801/2275/138 +f 814/2282/142 822/2294/152 821/2283/102 +f 812/2285/144 820/2296/153 819/2286/145 +f 810/2288/147 818/2297/154 817/2289/148 +f 808/2291/150 816/2298/155 815/2292/151 +f 807/2293/91 815/2292/151 822/2294/152 +f 813/2295/143 821/3234/102 820/2296/153 +f 811/2287/146 819/2286/145 818/2297/154 +f 809/2290/149 817/2289/148 816/2298/155 +f 815/2299/151 816/2298/155 824/2300/156 +f 815/2299/151 823/2301/157 829/2302/158 +f 819/2304/145 827/2307/161 826/2305/159 +f 817/2289/148 825/2308/104 824/2300/156 +f 819/2304/145 820/2315/153 828/2306/160 +f 818/2297/154 826/2305/159 825/2308/104 +f 828/2306/160 835/2317/168 834/2309/162 +f 825/2308/104 826/2305/159 833/2310/163 +f 823/2301/157 824/2300/156 831/2312/165 +f 829/2302/158 823/2301/157 830/2313/166 +f 827/2307/161 834/2309/162 833/2310/163 +f 825/2308/104 832/2311/164 831/2312/165 +f 832/2311/164 833/2310/163 801/2275/138 +f 831/2312/165 832/2311/164 802/2274/137 +f 830/2319/166 831/2312/165 803/2273/136 +f 836/2321/167 830/2319/166 804/2320/135 +f 821/2323/102 836/2321/167 805/2322/141 +f 806/2325/140 835/3235/168 821/2326/102 +f 834/2328/162 835/3235/168 806/2325/140 +f 833/2310/163 834/2328/162 800/2329/139 +f 844/2330/59 852/2342/125 851/2331/105 +f 842/2333/53 850/2344/126 849/2334/122 +f 840/2336/55 848/2345/127 847/2337/123 +f 838/2339/57 846/2346/128 845/2340/124 +f 837/2341/36 845/2340/124 852/2342/125 +f 843/2343/33 851/3236/105 850/2344/126 +f 841/2335/34 849/2334/122 848/2345/127 +f 839/2338/35 847/2337/123 846/2346/128 +f 846/2346/128 854/2353/169 853/2347/129 +f 845/2348/124 853/2347/129 859/2349/130 +f 849/2351/122 857/2355/131 856/2352/132 +f 847/2337/123 855/2356/103 854/2353/169 +f 849/2351/122 850/2363/126 858/2354/134 +f 848/2345/127 856/2352/132 855/2356/103 +f 858/2354/134 865/2365/141 864/2357/135 +f 856/2352/132 863/2362/136 862/2358/137 +f 853/2347/129 854/2353/169 861/2359/138 +f 859/2349/130 853/2347/129 860/2360/139 +f 857/2355/131 864/2357/135 863/2362/136 +f 855/2356/103 862/2358/137 861/2359/138 +f 874/2367/142 882/2379/152 881/2368/102 +f 872/2370/144 880/2381/153 879/2371/145 +f 870/2373/147 878/2382/154 877/2374/148 +f 868/2376/150 876/2383/155 875/2377/151 +f 867/2378/91 875/2377/151 882/2379/152 +f 873/2380/143 881/3237/102 880/2381/153 +f 871/2372/146 879/2371/145 878/2382/154 +f 869/2375/149 877/2374/148 876/2383/155 +f 876/2383/155 884/2390/170 883/2384/157 +f 875/2385/151 883/2384/157 889/2386/158 +f 879/2388/145 887/2392/161 886/2389/159 +f 877/2374/148 885/2393/104 884/2390/170 +f 879/2388/145 880/2400/153 888/2391/160 +f 877/2374/148 878/2382/154 886/2389/159 +f 888/2391/160 895/2402/168 894/2394/162 +f 886/2389/159 893/2399/163 892/2395/164 +f 883/2384/157 884/2390/170 891/2396/165 +f 889/2386/158 883/2384/157 890/2397/166 +f 887/2392/161 894/2394/162 893/2399/163 +f 884/2390/170 885/2393/104 892/2395/164 +f 892/2395/164 893/2399/163 861/2359/138 +f 891/2396/165 892/2395/164 862/2358/137 +f 890/2404/166 891/2396/165 863/2362/136 +f 896/2406/167 890/2404/166 864/2405/135 +f 881/2408/102 896/2406/167 865/2407/141 +f 866/2410/140 895/3238/168 881/2411/102 +f 894/2413/162 895/3238/168 866/2410/140 +f 893/2399/163 894/2413/162 860/2414/139 +f 813/2415/143 902/2437/176 903/2416/171 +f 873/2418/143 909/2449/176 910/2419/171 +f 810/2288/147 899/2436/172 900/2421/79 +f 871/2372/146 870/2373/147 906/2422/172 +f 811/2287/146 900/2421/79 901/2424/173 +f 871/2372/146 907/2423/79 908/2425/173 +f 809/2426/149 808/2456/150 897/2427/174 +f 868/2429/150 904/2454/174 905/2430/175 +f 812/2285/144 901/2424/173 902/2432/176 +f 872/2370/144 908/2425/173 909/2434/176 +f 809/2426/149 898/2428/175 899/2436/172 +f 869/2431/149 905/2430/175 906/2422/172 +f 902/2437/176 916/3239/182 917/2438/177 +f 899/2436/172 913/2451/183 914/2439/178 +f 907/2423/79 921/2452/178 922/2440/179 +f 905/2430/175 904/2454/174 918/2441/180 +f 900/2421/79 914/2439/178 915/2443/179 +f 909/2434/176 908/2425/173 922/2440/179 +f 898/2428/175 897/2427/174 911/2445/180 +f 905/2430/175 919/2442/181 920/2447/183 +f 902/2432/176 901/2424/173 915/2443/179 +f 909/2449/176 923/3240/182 924/2450/177 +f 898/2428/175 912/2446/181 913/2451/183 +f 907/2423/79 906/2422/172 920/2447/183 +f 920/2447/183 936/2483/105 937/2457/31 +f 912/2458/181 928/2484/33 929/2459/105 +f 807/2460/91 925/2469/32 927/2461/104 +f 921/2452/178 937/2457/31 938/2463/102 +f 913/2451/183 929/2459/105 930/2464/31 +f 923/2465/182 922/2440/179 938/2463/102 +f 914/2439/178 930/2464/31 931/2467/102 +f 807/2460/91 917/2479/177 933/2468/103 +f 923/2470/182 939/3241/35 940/2471/103 +f 916/2473/182 915/2443/179 931/2467/102 +f 867/2475/91 926/2482/32 934/2476/104 +f 916/2478/182 932/3242/35 933/2468/103 +f 919/2480/181 918/2477/180 934/2476/104 +f 867/2475/91 924/2472/177 940/2471/103 +f 919/2480/181 935/2481/33 936/2483/105 +f 912/2458/181 911/2462/180 927/2461/104 +f 1138/2485/80 1139/2524/84 1156/2486/92 +f 1146/2488/80 1147/2528/84 1149/2489/92 +f 1136/2491/81 1159/2498/91 1160/2492/87 +f 1144/2494/81 1152/2500/91 1153/2495/87 +f 1137/2497/85 1158/2510/101 1159/2498/91 +f 1145/2499/85 1151/2509/101 1152/2500/91 +f 1134/2501/82 1161/2508/88 1162/2502/89 +f 1142/2504/82 1154/2507/88 1155/2505/89 +f 1142/2504/82 1143/2496/86 1153/2495/87 +f 1135/2493/86 1160/2492/87 1161/2508/88 +f 1145/2499/85 1146/2488/80 1150/2490/93 +f 1137/2497/85 1138/2485/80 1157/2487/93 +f 1155/2505/89 1154/2507/88 1168/2511/97 +f 1151/2509/101 1165/2521/95 1166/2513/96 +f 1159/2498/91 1173/2522/96 1174/2514/99 +f 1156/2486/92 1170/2525/100 1171/2515/94 +f 1152/2500/91 1166/2513/96 1167/2516/99 +f 1161/2508/88 1160/2492/87 1174/2514/99 +f 1149/2489/92 1163/2529/100 1164/2518/94 +f 1158/2510/101 1157/2487/93 1171/2515/94 +f 1154/2507/88 1153/2495/87 1167/2516/99 +f 1162/2502/89 1161/2508/88 1175/2517/97 +f 1151/2509/101 1150/2490/93 1164/2518/94 +f 1158/2510/101 1172/2519/95 1173/2522/96 +f 1172/2519/95 1188/2557/104 1189/2531/32 +f 1164/2532/94 1180/2558/33 1181/2533/104 +f 1148/2534/79 1177/3243/31 1179/2535/105 +f 1173/2522/96 1189/2531/32 1190/2537/103 +f 1165/2521/95 1181/2533/104 1182/2538/32 +f 1174/2514/99 1190/2537/103 1191/2539/35 +f 1166/2513/96 1182/2538/32 1183/2541/103 +f 1169/2542/98 1185/2552/102 1177/2543/31 +f 1175/2540/97 1191/2539/35 1192/2545/102 +f 1167/2516/99 1183/2541/103 1184/2547/35 +f 1140/2549/79 1178/3244/31 1186/2550/105 +f 1168/2548/97 1184/2547/35 1185/2552/102 +f 1170/2551/100 1186/2550/105 1187/2553/33 +f 1176/2546/98 1192/2545/102 1178/2555/31 +f 1171/2554/94 1187/2553/33 1188/2557/104 +f 1163/2536/100 1179/2535/105 1180/2558/33 +f 1145/2499/85 1205/2585/53 1206/2559/33 +f 1138/2561/80 1198/2586/33 1199/2562/59 +f 1146/2560/80 1206/2559/33 1207/2564/59 +f 1139/2563/84 1199/2562/59 1200/2566/36 +f 1140/2568/79 1200/3245/36 1193/2569/57 +f 1147/2565/84 1207/2564/59 1208/2571/36 +f 1148/2573/79 1208/3246/36 1201/2574/57 +f 1133/2570/83 1193/2569/57 1194/2576/35 +f 1141/2575/83 1201/2574/57 1202/2578/35 +f 1134/2577/82 1194/2576/35 1195/2580/55 +f 1142/2579/82 1202/2578/35 1203/2581/55 +f 1135/2493/86 1195/2580/55 1196/2582/34 +f 1143/2496/86 1203/2581/55 1204/2583/34 +f 1136/2491/81 1196/2582/34 1197/2584/53 +f 1144/2494/81 1204/2583/34 1205/2585/53 +f 1137/2497/85 1197/2584/53 1198/2586/33 +f 1219/2587/36 1220/2598/79 1212/2588/79 +f 1217/2590/32 1218/2600/70 1210/2591/70 +f 1224/2593/91 1217/2590/32 1209/2592/32 +f 1222/2595/54 1223/2601/34 1215/2596/34 +f 1220/2598/79 1221/3247/31 1213/2599/31 +f 1218/2600/70 1219/2587/36 1211/2589/36 +f 1223/2601/34 1224/2593/91 1216/2594/91 +f 1221/2602/31 1222/2595/54 1214/2597/54 +f 1235/2604/36 1236/2615/79 1228/2605/79 +f 1233/2607/32 1234/2617/70 1226/2608/70 +f 1240/2610/91 1233/2607/32 1225/2609/32 +f 1238/2612/54 1239/2618/34 1231/2613/34 +f 1236/2615/79 1237/3248/31 1229/2616/31 +f 1234/2617/70 1235/2604/36 1227/2606/36 +f 1239/2618/34 1240/2610/91 1232/2611/91 +f 1237/2619/31 1238/2612/54 1230/2614/54 +f 1251/2621/36 1252/2632/79 1244/2622/79 +f 1249/2624/32 1250/2634/70 1242/2625/70 +f 1256/2627/91 1249/2624/32 1241/2626/32 +f 1254/2629/54 1255/2635/34 1247/2630/34 +f 1252/2632/79 1253/3249/31 1245/2633/31 +f 1250/2634/70 1251/2621/36 1243/2623/36 +f 1255/2635/34 1256/2627/91 1248/2628/91 +f 1253/2636/31 1254/2629/54 1246/2631/54 +f 1267/2638/36 1268/2649/79 1260/2639/79 +f 1265/2641/32 1266/2651/70 1258/2642/70 +f 1272/2644/91 1265/2641/32 1257/2643/32 +f 1270/2646/54 1271/2652/34 1263/2647/34 +f 1268/2649/79 1269/3250/31 1261/2650/31 +f 1266/2651/70 1267/2638/36 1259/2640/36 +f 1271/2652/34 1272/2644/91 1264/2645/91 +f 1269/2653/31 1270/2646/54 1262/2648/54 +f 1712/2655/53 1720/2667/61 1719/2656/54 +f 1710/2658/55 1718/2669/62 1717/2659/56 +f 1708/2661/57 1716/2670/63 1715/2662/58 +f 1706/2664/59 1714/2671/64 1713/2665/60 +f 1705/2666/33 1713/2665/60 1720/2667/61 +f 1711/2668/34 1719/3251/54 1718/2669/62 +f 1709/2660/35 1717/2659/56 1716/2670/63 +f 1707/2663/36 1715/2662/58 1714/2671/64 +f 1713/2672/60 1714/2671/64 1722/2673/65 +f 1713/2672/60 1721/2674/66 1727/2675/67 +f 1716/2670/63 1717/2680/56 1725/2677/69 +f 1715/2662/58 1723/2681/70 1722/2673/65 +f 1718/2679/62 1726/2682/71 1725/2677/69 +f 1715/2662/58 1716/2670/63 1724/2678/68 +f 1726/2682/71 1733/2690/78 1732/2683/72 +f 1723/2681/70 1724/2678/68 1731/2684/73 +f 1721/2674/66 1722/2673/65 1729/2686/75 +f 1727/2675/67 1721/2674/66 1728/2687/76 +f 1725/2677/69 1732/2683/72 1731/2684/73 +f 1723/2681/70 1730/2685/74 1729/2686/75 +f 1742/2692/57 1750/2704/83 1749/2693/79 +f 1740/2695/59 1748/2706/84 1747/2696/80 +f 1738/2698/53 1746/2707/85 1745/2699/81 +f 1736/2701/55 1744/2708/86 1743/2702/82 +f 1735/2703/35 1743/2702/82 1750/2704/83 +f 1741/2705/36 1749/3252/79 1748/2706/84 +f 1739/2697/33 1747/2696/80 1746/2707/85 +f 1737/2700/34 1745/2699/81 1744/2708/86 +f 1743/2709/82 1744/2708/86 1752/2710/87 +f 1743/2709/82 1751/2711/88 1757/2712/89 +f 1746/2707/85 1747/2717/80 1755/2714/93 +f 1745/2699/81 1753/2718/91 1752/2710/87 +f 1748/2716/84 1756/2719/92 1755/2714/93 +f 1745/2699/81 1746/2707/85 1754/2715/101 +f 1756/2719/92 1763/2727/100 1762/2720/94 +f 1754/2715/101 1761/2725/95 1760/2721/96 +f 1751/2711/88 1752/2710/87 1759/2722/99 +f 1757/2712/89 1751/2711/88 1758/2723/97 +f 1755/2714/93 1762/2720/94 1761/2725/95 +f 1753/2718/91 1760/2721/96 1759/2722/99 +f 1760/2721/96 1761/2725/95 1729/2686/75 +f 1759/2722/99 1760/2721/96 1730/2685/74 +f 1758/2729/97 1759/2722/99 1731/2684/73 +f 1764/2731/98 1758/2729/97 1732/2730/72 +f 1749/2733/79 1764/2731/98 1733/2732/78 +f 1719/2735/54 1734/2739/77 1763/2736/100 +f 1762/2738/94 1763/2736/100 1734/2739/77 +f 1761/2725/95 1762/2738/94 1728/2740/76 +f 1772/2741/53 1780/2753/61 1779/2742/54 +f 1770/2744/55 1778/2755/62 1777/2745/56 +f 1768/2747/57 1776/2756/63 1775/2748/58 +f 1766/2750/59 1774/2757/64 1773/2751/60 +f 1765/2752/33 1773/2751/60 1780/2753/61 +f 1771/2754/34 1779/3253/54 1778/2755/62 +f 1769/2746/35 1777/2745/56 1776/2756/63 +f 1767/2749/36 1775/2748/58 1774/2757/64 +f 1773/2758/60 1774/2757/64 1782/2759/65 +f 1773/2758/60 1781/2760/66 1787/2761/67 +f 1776/2756/63 1777/2766/56 1785/2763/69 +f 1775/2748/58 1783/2767/70 1782/2759/65 +f 1778/2765/62 1786/2768/71 1785/2763/69 +f 1775/2748/58 1776/2756/63 1784/2764/68 +f 1786/2768/71 1793/2776/78 1792/2769/72 +f 1783/2767/70 1784/2764/68 1791/2770/73 +f 1781/2760/66 1782/2759/65 1789/2772/75 +f 1787/2761/67 1781/2760/66 1788/2773/76 +f 1785/2763/69 1792/2769/72 1791/2770/73 +f 1783/2767/70 1790/2771/74 1789/2772/75 +f 1802/2778/57 1810/2790/83 1809/2779/79 +f 1800/2781/59 1808/2792/84 1807/2782/80 +f 1798/2784/53 1806/2793/85 1805/2785/81 +f 1796/2787/55 1804/2794/86 1803/2788/82 +f 1795/2789/35 1803/2788/82 1810/2790/83 +f 1801/2791/36 1809/3254/79 1808/2792/84 +f 1799/2783/33 1807/2782/80 1806/2793/85 +f 1797/2786/34 1805/2785/81 1804/2794/86 +f 1803/2795/82 1804/2794/86 1812/2796/87 +f 1803/2795/82 1811/2797/88 1817/2798/89 +f 1806/2793/85 1807/2803/80 1815/2800/93 +f 1804/2794/86 1805/2785/81 1813/2802/91 +f 1807/2803/80 1808/2811/84 1816/2804/92 +f 1806/2793/85 1814/2801/101 1813/2802/91 +f 1816/2804/92 1823/2813/100 1822/2805/94 +f 1813/2802/91 1814/2801/101 1821/2806/95 +f 1811/2797/88 1812/2796/87 1819/2808/99 +f 1817/2798/89 1811/2797/88 1818/2809/97 +f 1815/2800/93 1822/2805/94 1821/2806/95 +f 1813/2802/91 1820/2807/96 1819/2808/99 +f 1820/2807/96 1821/2806/95 1789/2772/75 +f 1791/2770/73 1819/2808/99 1820/2807/96 +f 1818/2815/97 1819/2808/99 1791/2770/73 +f 1824/2817/98 1818/2815/97 1792/2816/72 +f 1809/2819/79 1824/2817/98 1793/2818/78 +f 1794/2821/77 1823/3255/100 1809/2822/79 +f 1822/2824/94 1823/3255/100 1794/2821/77 +f 1821/2806/95 1822/2824/94 1788/2825/76 +f 1832/2826/53 1840/2838/61 1839/2827/54 +f 1830/2829/55 1838/2840/62 1837/2830/56 +f 1828/2832/57 1836/2841/63 1835/2833/58 +f 1826/2835/59 1834/2842/64 1833/2836/60 +f 1825/2837/33 1833/2836/60 1840/2838/61 +f 1831/2839/34 1839/3256/54 1838/2840/62 +f 1829/2831/35 1837/2830/56 1836/2841/63 +f 1827/2834/36 1835/2833/58 1834/2842/64 +f 1833/2843/60 1834/2842/64 1842/2844/65 +f 1833/2843/60 1841/2845/66 1847/2846/67 +f 1836/2841/63 1837/2850/56 1845/2848/69 +f 1835/2833/58 1843/2852/70 1842/2844/65 +f 1837/2850/56 1838/2859/62 1846/2851/71 +f 1836/2841/63 1844/2849/68 1843/2852/70 +f 1846/2851/71 1853/2861/78 1852/2853/72 +f 1843/2852/70 1844/2849/68 1851/2854/73 +f 1841/2845/66 1842/2844/65 1849/2856/75 +f 1847/2846/67 1841/2845/66 1848/2857/76 +f 1845/2848/69 1852/2853/72 1851/2854/73 +f 1843/2852/70 1850/2855/74 1849/2856/75 +f 1862/2863/57 1870/2875/83 1869/2864/79 +f 1860/2866/59 1868/2877/84 1867/2867/80 +f 1858/2869/53 1866/2878/85 1865/2870/81 +f 1856/2872/55 1864/2879/86 1863/2873/82 +f 1855/2874/35 1863/2873/82 1870/2875/83 +f 1861/2876/36 1869/3257/79 1868/2877/84 +f 1859/2868/33 1867/2867/80 1866/2878/85 +f 1857/2871/34 1865/2870/81 1864/2879/86 +f 1863/2880/82 1864/2879/86 1872/2881/87 +f 1863/2880/82 1871/2882/88 1877/2883/89 +f 1867/2885/80 1875/2888/93 1874/2886/184 +f 1865/2870/81 1873/2889/91 1872/2881/87 +f 1868/2887/84 1876/2890/92 1875/2888/93 +f 1865/2870/81 1866/2878/85 1874/2886/184 +f 1876/2890/92 1883/2898/100 1882/2891/94 +f 1873/2889/91 1874/2886/184 1881/2892/95 +f 1872/2881/87 1879/2896/99 1878/2894/97 +f 1877/2883/89 1871/2882/88 1878/2894/97 +f 1875/2888/93 1882/2891/94 1881/2892/95 +f 1873/2889/91 1880/2893/96 1879/2896/99 +f 1880/2893/96 1881/2892/95 1849/2856/75 +f 1879/2896/99 1880/2893/96 1850/2855/74 +f 1878/2900/97 1879/2896/99 1851/2854/73 +f 1884/2902/98 1878/2900/97 1852/2901/72 +f 1869/2904/79 1884/2902/98 1853/2903/78 +f 1839/2906/54 1854/2910/77 1883/2907/100 +f 1882/2909/94 1883/2907/100 1854/2910/77 +f 1881/2892/95 1882/2909/94 1848/2911/76 +f 1892/2912/53 1900/2924/61 1899/2913/54 +f 1890/2915/55 1898/2926/62 1897/2916/56 +f 1888/2918/57 1896/2927/63 1895/2919/58 +f 1886/2921/59 1894/2928/64 1893/2922/60 +f 1885/2923/33 1893/2922/60 1900/2924/61 +f 1891/2925/34 1899/3258/54 1898/2926/62 +f 1889/2917/35 1897/2916/56 1896/2927/63 +f 1887/2920/36 1895/2919/58 1894/2928/64 +f 1894/2928/64 1902/2935/65 1901/2929/66 +f 1893/2930/60 1901/2929/66 1907/2931/67 +f 1897/2933/56 1905/2937/69 1904/2934/68 +f 1895/2919/58 1903/2938/70 1902/2935/65 +f 1897/2933/56 1898/2945/62 1906/2936/71 +f 1895/2919/58 1896/2927/63 1904/2934/68 +f 1906/2936/71 1913/2947/78 1912/2939/72 +f 1903/2938/70 1904/2934/68 1911/2940/73 +f 1901/2929/66 1902/2935/65 1909/2942/75 +f 1907/2931/67 1901/2929/66 1908/2943/76 +f 1905/2937/69 1912/2939/72 1911/2940/73 +f 1903/2938/70 1910/2941/74 1909/2942/75 +f 1922/2949/57 1930/2961/83 1929/2950/79 +f 1920/2952/59 1928/2963/84 1927/2953/80 +f 1918/2955/53 1926/2964/85 1925/2956/81 +f 1916/2958/55 1924/2965/86 1923/2959/82 +f 1915/2960/35 1923/2959/82 1930/2961/83 +f 1921/2962/36 1929/3259/79 1928/2963/84 +f 1919/2954/33 1927/2953/80 1926/2964/85 +f 1917/2957/34 1925/2956/81 1924/2965/86 +f 1923/2966/82 1924/2965/86 1932/2967/87 +f 1930/2969/83 1923/2966/82 1931/2968/88 +f 1927/2971/80 1935/2974/93 1934/2972/101 +f 1925/2956/81 1933/2975/91 1932/2967/87 +f 1927/2971/80 1928/2982/84 1936/2973/92 +f 1926/2964/85 1934/2972/101 1933/2975/91 +f 1936/2973/92 1943/2984/100 1942/2976/94 +f 1934/2972/101 1941/2981/95 1940/2977/96 +f 1931/2968/88 1932/2967/87 1939/2978/99 +f 1937/2970/89 1931/2968/88 1938/2979/97 +f 1935/2974/93 1942/2976/94 1941/2981/95 +f 1932/2967/87 1933/2975/91 1940/2977/96 +f 1940/2977/96 1941/2981/95 1909/2942/75 +f 1939/2978/99 1940/2977/96 1910/2941/74 +f 1938/2986/97 1939/2978/99 1911/2940/73 +f 1944/2988/98 1938/2986/97 1912/2987/72 +f 1929/2990/79 1944/2988/98 1913/2989/78 +f 1914/2992/77 1943/3260/100 1929/2993/79 +f 1942/2995/94 1943/3260/100 1914/2992/77 +f 1941/2981/95 1942/2995/94 1908/2996/76 +f 1960/2997/53 1968/3009/61 1967/2998/54 +f 1958/3000/55 1966/3011/62 1965/3001/56 +f 1956/3003/57 1964/3012/63 1963/3004/58 +f 1954/3006/59 1962/3013/64 1961/3007/60 +f 1953/3008/33 1961/3007/60 1968/3009/61 +f 1959/3010/34 1967/3261/54 1966/3011/62 +f 1957/3002/35 1965/3001/56 1964/3012/63 +f 1955/3005/36 1963/3004/58 1962/3013/64 +f 1961/3014/60 1962/3013/64 1970/3015/65 +f 1961/3014/60 1969/3016/66 1975/3017/67 +f 1964/3012/63 1965/3021/56 1973/3019/69 +f 1963/3004/58 1971/3023/70 1970/3015/65 +f 1965/3021/56 1966/3030/62 1974/3022/71 +f 1964/3012/63 1972/3020/68 1971/3023/70 +f 1974/3022/71 1981/3032/78 1980/3024/72 +f 1971/3023/70 1972/3020/68 1979/3025/73 +f 1969/3016/66 1970/3015/65 1977/3027/75 +f 1975/3017/67 1969/3016/66 1976/3028/76 +f 1973/3019/69 1980/3024/72 1979/3025/73 +f 1971/3023/70 1978/3026/74 1977/3027/75 +f 1990/3034/57 1998/3046/83 1997/3035/79 +f 1988/3037/59 1996/3048/84 1995/3038/80 +f 1986/3040/53 1994/3049/85 1993/3041/81 +f 1984/3043/55 1992/3050/86 1991/3044/82 +f 1983/3045/35 1991/3044/82 1998/3046/83 +f 1989/3047/36 1997/3262/79 1996/3048/84 +f 1987/3039/33 1995/3038/80 1994/3049/85 +f 1985/3042/34 1993/3041/81 1992/3050/86 +f 1991/3051/82 1992/3050/86 2000/3052/87 +f 1991/3051/82 1999/3053/88 2005/3054/89 +f 1995/3056/80 2003/3060/93 2002/3057/90 +f 1992/3050/86 1993/3041/81 2001/3058/91 +f 1995/3056/80 1996/3067/84 2004/3059/92 +f 1994/3049/85 2002/3057/90 2001/3058/91 +f 2004/3059/92 2011/3069/100 2010/3061/94 +f 2001/3058/91 2002/3057/90 2009/3062/95 +f 1999/3053/88 2000/3052/87 2007/3064/99 +f 2005/3054/89 1999/3053/88 2006/3065/97 +f 2003/3060/93 2010/3061/94 2009/3062/95 +f 2001/3058/91 2008/3063/96 2007/3064/99 +f 2008/3063/96 2009/3062/95 1977/3027/75 +f 2007/3064/99 2008/3063/96 1978/3026/74 +f 2006/3071/97 2007/3064/99 1979/3025/73 +f 2012/3073/98 2006/3071/97 1980/3072/72 +f 1997/3075/79 2012/3073/98 1981/3074/78 +f 1967/3077/54 1982/3081/77 2011/3078/100 +f 2010/3080/94 2011/3078/100 1982/3081/77 +f 2009/3062/95 2010/3080/94 1976/3082/76 +f 2020/3083/53 2028/3095/61 2027/3084/54 +f 2018/3086/55 2026/3097/62 2025/3087/56 +f 2016/3089/57 2024/3098/63 2023/3090/58 +f 2014/3092/59 2022/3099/64 2021/3093/60 +f 2013/3094/33 2021/3093/60 2028/3095/61 +f 2019/3096/34 2027/3263/54 2026/3097/62 +f 2017/3088/35 2025/3087/56 2024/3098/63 +f 2015/3091/36 2023/3090/58 2022/3099/64 +f 2022/3099/64 2030/3106/65 2029/3100/66 +f 2028/3102/61 2021/3101/60 2029/3100/66 +f 2024/3098/63 2025/3107/56 2033/3104/69 +f 2023/3090/58 2031/3109/70 2030/3106/65 +f 2025/3107/56 2026/3116/62 2034/3108/71 +f 2024/3098/63 2032/3105/68 2031/3109/70 +f 2034/3108/71 2041/3118/78 2040/3110/72 +f 2032/3105/68 2039/3115/73 2038/3111/74 +f 2029/3100/66 2030/3106/65 2037/3112/75 +f 2035/3103/67 2029/3100/66 2036/3113/76 +f 2033/3104/69 2040/3110/72 2039/3115/73 +f 2031/3109/70 2038/3111/74 2037/3112/75 +f 2050/3120/57 2058/3132/83 2057/3121/79 +f 2048/3123/59 2056/3134/84 2055/3124/80 +f 2046/3126/53 2054/3135/85 2053/3127/81 +f 2044/3129/55 2052/3136/86 2051/3130/82 +f 2043/3131/35 2051/3130/82 2058/3132/83 +f 2049/3133/36 2057/3264/79 2056/3134/84 +f 2047/3125/33 2055/3124/80 2054/3135/85 +f 2045/3128/34 2053/3127/81 2052/3136/86 +f 2051/3137/82 2052/3136/86 2060/3138/87 +f 2051/3137/82 2059/3139/88 2065/3140/89 +f 2054/3135/85 2055/3145/80 2063/3142/93 +f 2052/3136/86 2053/3127/81 2061/3144/91 +f 2055/3145/80 2056/3153/84 2064/3146/92 +f 2053/3127/81 2054/3135/85 2062/3143/101 +f 2064/3146/92 2071/3155/100 2070/3147/94 +f 2062/3143/101 2069/3152/95 2068/3148/96 +f 2059/3139/88 2060/3138/87 2067/3149/99 +f 2059/3139/88 2066/3150/97 2072/3151/98 +f 2063/3142/93 2070/3147/94 2069/3152/95 +f 2061/3144/91 2068/3148/96 2067/3149/99 +f 2068/3148/96 2069/3152/95 2037/3112/75 +f 2067/3149/99 2068/3148/96 2038/3111/74 +f 2066/3157/97 2067/3149/99 2039/3115/73 +f 2072/3159/98 2066/3157/97 2040/3158/72 +f 2057/3161/79 2072/3159/98 2041/3160/78 +f 2042/3163/77 2071/3265/100 2057/3164/79 +f 2070/3166/94 2071/3265/100 2042/3163/77 +f 2069/3152/95 2070/3166/94 2036/3167/76 +f 2079/3168/31 2087/3266/31 2086/3169/102 +f 2077/3171/35 2085/3180/35 2084/3172/103 +f 2075/3174/32 2083/3181/32 2081/3175/104 +f 2080/3177/105 2088/3184/105 2087/3178/31 +f 2078/3170/102 2086/3169/102 2085/3180/35 +f 2076/3173/103 2084/3172/103 2083/3181/32 +f 2074/3176/104 2081/3175/104 2082/3182/33 +f 2073/3183/33 2082/3182/33 2088/3184/105 +f 2095/3185/31 2103/3267/31 2102/3186/102 +f 2093/3188/35 2101/3197/35 2100/3189/103 +f 2091/3191/32 2099/3198/32 2097/3192/104 +f 2096/3194/105 2104/3201/105 2103/3195/31 +f 2094/3187/102 2102/3186/102 2101/3197/35 +f 2092/3190/103 2100/3189/103 2099/3198/32 +f 2090/3193/104 2097/3192/104 2098/3199/33 +f 2089/3200/33 2098/3199/33 2104/3201/105 diff --git a/src/main/resources/assets/hbm/textures/models/machines/purex.png b/src/main/resources/assets/hbm/textures/models/machines/purex.png new file mode 100644 index 0000000000000000000000000000000000000000..655e5e4a8ce11db868280314409d2929be75362c GIT binary patch literal 6779 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 Qn?#|eqN!Y}Xz}v@0EoeDSpWb4 literal 0 HcmV?d00001 From 18855018c42c3c297806d835eabc552ea0c05049 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Tue, 29 Jul 2025 11:41:09 -0600 Subject: [PATCH 313/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 154 ++++++++++++------ 1 file changed, 106 insertions(+), 48 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 8e468434f..9e4f26bae 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -16,7 +16,7 @@ achievement.bossMaskman.desc=Врезать большому мальчику. achievement.bossMeltdown.desc=Скорее ужасно, чем отлично, но я приму то, что могу получить. achievement.bossMaskman=6 месяцев срочной службы, и все что я получил это паршивая футболка achievement.bossMeltdown=3.6 рентген -achievement.bossWorm.desc=Фабстафф. Моя задница. А ты считай. +achievement.bossWorm.desc=Просто маленький металический червь. achievement.bossWorm=Разборка Баллс-О-Трон achievement.bossUFO.desc=Эй, что у нас тут? Огромный космический корабль, приближающийся к блок-кораблю? achievement.bossUFO=Ayy Lmao @@ -566,6 +566,21 @@ cannery.schottky.7=Если какие-либо виртуальные част cannery.schottky.8=Обратите внимание, что виртуальные частицы никогда не будут использовать один и тот же выход диода дважды. Бесконечные циклы будут неудачными, но повторный вход в диод в остальном будет нормальным cannery.schottky.9=Ваш диод Шоттки для частиц должен быть правильно заключен, со свободными путями для каждого выхода пересечения +chem.hydrogen=Водород +chem.hydrogencoke=Водород из кокса +chem.oxygen=Кислород +chem.xenon=Ксенон +chem.xenonoxy=Ксенон (Охлаждённый) +chem.helium3=Гелий-3 +chem.ethanol=Этанол +chem.biogas=Биогаз +chem.biofuel=Переэтерификация биотоплива +chem.reoil=Регенерированное масло +chem.gasoline=Бензин +chem.tarsand=Битум из битумозного песка +chem.meatprocessing=Переработка мяса глифидов +chem.birkeland=Азотная кислота из воздуха + chem.ARSENIC=Экстракция мышьяка chem.ASPHALT=Производство асфальта chem.BAKELITE=Производство бакелита @@ -682,7 +697,9 @@ commands.satellite.satellite_descended=Спутник успешно удалё commands.satellite.satellite_orbited=Спутник запущен. commands.satellite.should_be_run_as_player=Команда должна быть выполнена игроком! -container.ammoBag=Сумка для патрон + +container.ammoBag=Ammo Bag +container.ammoBag=Сумка для боеприпасов container.amsBase=Основание АМС [Декор] container.amsEmitter=Излучатель АМС [Декор] container.amsLimiter=Стабилизатор АМС [Декор] @@ -756,7 +773,10 @@ container.launchPadRusted=Пусковая площадка container.launchTable=Большая пусковая площадка container.leadBox=Защитная коробка container.machineAmmoPress=Пресс для патронов +container.machineAssemblyMachine=Сборочная машина container.machineArcWelder=Дуговой сварщик +container.machineChemicalFactory=Химический завод +container.machineChemicalPlant=Химическая установка container.machineArcFurnaceLarge=Дуговая печь container.machineBoiler=Нагреватель нефти container.machineCMB=Печь для стали Альянса @@ -836,8 +856,10 @@ container.reactorControl=Блок удалённого доступа к реа container.reactorLarge=Большой ядерный реактор container.reactorResearch=Исследовательский реактор container.reix=Мэйнфрейм Rei-X +container.rttyController=Контроллер редстоун-радио container.rtg=РИТЭГ-генератор container.rtgFurnace=РИТЭГ-печь +container.rttyReader=Редстоун-радио ридер container.rttyCounter=Редстоун-радио счётчик предметов container.rttyLogic=Редстоун-радио логический приёмник container.rttyReceiver=Редстоун-радио приёмник @@ -903,9 +925,10 @@ crucible.tcalloy=Производство технециевой стали damage.inset=Сопротивления к при полном наборе: damage.item=Сопротивления к: +damage.category.EN=Энергетическому damage.category.EXPL=Взрывам damage.category.FIRE=Огню -damage.category.PROJ=Снарядам +damage.category.PHYS=Физическому damage.exact.drown=Утоплению damage.exact.fall=Падению damage.exact.LASER=Лазерам @@ -1013,7 +1036,7 @@ desc.gui.rtg.pellets=Принимаемые пеллеты: desc.gui.rtg.pelletHeat=%s (%s тепла) desc.gui.rtg.pelletPower=%s (%s HE/тик) desc.gui.template=§9Шаблоны§r$Шаблоны могут быть сделаны$в Папке шаблонов машин. -desc.gui.turbinegas.automode=§2Автоматический режим турбины§r$Нажав кнопку "AUTO", турбина автоматически$отрегулирует выработку электроэнергии$в зависимости от мощности, требуемой от сети +desc.gui.turbinegas.automode=§2Автоматический режим турбины§r$Нажав кнопку "AUTO", турбина автоматически$отрегулирует позицию регулятора$в зависимости от требуемой мощности сети$и количества оставшегося топлива desc.gui.turbinegas.fuels=§6Принимаемое топливо: desc.gui.turbinegas.warning=§cНизкий уровень топлива или смазки!§r desc.gui.zirnox.coolant=§3Охлаждение§r$CO2 перемещает тепло из активной зоны в воду.$Вода будет нагреваться до перегретого пара.$Эффективность охлаждения и производства пара$зависит от давления. @@ -1394,7 +1417,9 @@ hazard.particleCoarse=Частиц, находящихся в воздухе hazard.particleFine=Твердых частиц hazard.sand=Раздражителей глаз -hbm.key=NTM Hotkeys +hbm.key.ability=Переключение абилки инструмента +hbm.key.abilityAlt=Изменить абилки инструмента +hbm.key=NTM Хоткеи hbm.key.calculator=Калькулятор hbm.key.copyToolAlt=Устройство настройки: Переключить вставку hbm.key.copyToolCtrl=Устройство настройки: Применить к трубам @@ -1407,6 +1432,7 @@ hbm.key.dash=Рывок hbm.key.gunPrimary=Основной огонь hbm.key.gunSecondary=Альтернативный огонь hbm.key.gunTertitary=Переключить прицел +hbm.key.toggleMagnet=Вкл/выкл магнит hbm.key.toggleBack=Включить ранец hbm.key.toggleHUD=Включить HUD hbm.key.trainInv=Открыть инвентарь поезда @@ -1446,8 +1472,8 @@ hbmfluid.death=Осмиридовый раствор hbmfluid.deuterium=Дейтерий hbmfluid.diesel=Дизель hbmfluid.diesel_crack=Крекированный дизель -hbmfluid.diesel_crack_reform=Высокооктановый крекированный дизель -hbmfluid.diesel_reform=Высокооктановый дизель +hbmfluid.diesel_crack_reform=Высокоцетановый крекированный дизель +hbmfluid.diesel_reform=Высокоцетановый дизель hbmfluid.egg=Растворенное яйцо hbmfluid.estradiol=Раствор эстрадиола hbmfluid.ethanol=Этанол @@ -1543,7 +1569,7 @@ hbmfluid.solvent=Растворитель hbmfluid.sourgas=Кислый газ hbmfluid.spentsteam=Пар низкого давления hbmfluid.steam=Пар -hbmfluid.stellar_flux=Звёздный флюс +hbmfluid.stellar_flux=Звёздный поток hbmfluid.sulfuric_acid=Серная кислота hbmfluid.sunfloweroil=Подсолнечное масло hbmfluid.superhotsteam=Перегретый пар @@ -1796,18 +1822,19 @@ item.ammo_50ae_ap.name=Патрон калибра .50 AE (Бронебойны item.ammo_50ae_chlorophyte.name=Патрон калибра .50 AE (Хлорофит) item.ammo_50ae_du.name=Патрон калибра .50 AE (ДУ) item.ammo_50ae_star.name=Патрон калибра .50 AE (Звёздный металл) -item.ammo_50bmg.name=Крупнокалиберный патрон .50 BMG -item.ammo_50bmg_ap.name=Крупнокалиберный патрон .50 BMG (Бронебойный) -item.ammo_50bmg_chlorophyte.name=Крупнокалиберный патрон .50 BMG (Хлорофит) -item.ammo_50bmg_du.name=Крупнокалиберный патрон .50 BMG (ДУ) -item.ammo_50bmg_explosive.name=Крупнокалиберный патрон .50 BMG (Взрывной) -item.ammo_50bmg_flechette.name=Игольчатый .50 BMG патрон -item.ammo_50bmg_flechette_am.name=Игольчатый .50 BMG патрон (Америций) -item.ammo_50bmg_flechette_po.name=Игольчатый .50 BMG патрон (Полоний) -item.ammo_50bmg_incendiary.name=Крупнокалиберный патрон .50 BMG (Зажигательный) -item.ammo_50bmg_phosphorus.name=Крупнокалиберный патрон .50 BMG (БФ) -item.ammo_50bmg_sleek.name=Крупнокалиберный патрон .50 BMG (IF-R&D) -item.ammo_50bmg_star.name=Крупнокалиберный патрон .50 BMG (Звёздный металл) +item.ammo_50bmg.name=Патрон калибра .50 BMG +item.ammo_50bmg_ap.name=Патрон калибра .50 BMG (Бронебойный) +item.ammo_50bmg_chlorophyte.name=Патрон калибра .50 BMG (Хлорофит) +item.ammo_50bmg_du.name=Патрон калибра .50 BMG (ДУ) +item.ammo_50bmg_explosive.name=Патрон калибра .50 BMG (Взрывной) +item.ammo_50bmg_flechette.name=Игольчатый патрон калибра .50 BMG +item.ammo_50bmg_flechette_am.name=Игольчатый патрон калибра .50 BMG (Америций) +item.ammo_50bmg_flechette_po.name=Игольчатый патрон калибра .50 BMG (Полоний) +item.ammo_50bmg_incendiary.name=Патрон калибра .50 BMG (Зажигательный) +item.ammo_50bmg_phosphorus.name=Патрон калибра .50 BMG (БФ) +item.ammo_50bmg_sleek.name=Патрон калибра .50 BMG (IF-R&D) +item.ammo_50bmg_star.name=Патрон калибра .50 BMG (Звёздный металл) +item.ammo_secret.bmg50_black.name=Патрон калибра .50 BMG (Простреливающий) item.ammo_556.name=5.56мм патрон item.ammo_556_ap.name=5.56мм патрон (Бронебойный) item.ammo_556_chlorophyte.name=5.56мм патрон (Хлорофит) @@ -1929,12 +1956,13 @@ item.ammo_shell_apfsds_du.name=240мм APFSTS-DU item.ammo_shell_apfsds_t.name=240мм APFSTS-T item.ammo_shell_explosive.name=240мм Фугасный снаряд item.ammo_shell_w9.name=240мм Ядерный снаряд W9 -item.ammo_secret.bmg50_equestrian.name=.50 BMG патрон Разрушитель +item.ammo_secret.bmg50_equestrian.name=Патрон калибра .50 BMG (Разрушитель) item.ammo_secret.folly_nuke.name=Серебрянная пуля, ядерная item.ammo_secret.folly_sm.name=Серебрянная пуля item.ammo_secret.g12_equestrian.name=12-й калибр Railway Spike Shot item.ammo_secret.m44_equestrian.name=.44 магнум Разрыватель голов item.ammo_secret.p35_800.name=.35-800 V9 +item.ammo_secret.p35_800_bl.name=.35-800 V9 (Чёрная Молния) item.ammo_standard.b75.name=.75 болт item.ammo_standard.b75_exp.name=.75 болт (Взрывной) item.ammo_standard.b75_inc.name=.75 болт (Зажигательный) @@ -1944,11 +1972,14 @@ item.ammo_standard.bmg50_du.name=.50 BMG патрон (Обеднённый ур item.ammo_standard.bmg50_fmj.name=.50 BMG патрон (Цельнометаллическая оболочка) item.ammo_standard.bmg50_jhp.name=.50 BMG патрон (Экспансивный+) item.ammo_standard.bmg50_sp.name=.50 BMG патрон (Экспансивный) -item.ammo_standard.capacitor.name=Конденсатор +item.ammo_standard.capacitor.name=Конденсатор (Стандартный) item.ammo_standard.capacitor_ir.name=Конденсатор (Низкая длина волны) item.ammo_standard.capacitor_overcharge.name=Конденсатор (Перезаряженный) item.ammo_standard.coil_ferrouranium.name=Ферроураниевый шарик гаусс-пушки item.ammo_standard.coil_tungsten.name=Вольфрамовый шарик гаусс-пушки +item.ammo_standard.ct_hook.name=Крюк-кошка +item.ammo_standard.ct_mortar.name=Разрывной снаряд +item.ammo_standard.ct_mortar_charge.name=Тяжёлый разрывной снаряд item.ammo_standard.flame_balefire.name=Топливо огнемёта (Жар-пламя) item.ammo_standard.flame_diesel.name=Топливо огнемёта (Дизель) item.ammo_standard.flame_gas.name=Топливо огнемёта (Газ) @@ -1988,6 +2019,7 @@ item.ammo_standard.m44_express.name=.44 magnum (Высокомощная цел item.ammo_standard.m44_fmj.name=.44 magnum (Цельнометаллическая оболочка) item.ammo_standard.m44_jhp.name=.44 magnum (Экспансивный+) item.ammo_standard.m44_sp.name=.44 magnum (Экспансивный) +item.ammo_standard.nuke_balefire.name=Ядерный минизаряд (Жар-яйцо) item.ammo_standard.nuke_demo.name=Ядерный минизаряд (Разрушающий) item.ammo_standard.nuke_high.name=Ядерный минизаряд (Высокомощный) item.ammo_standard.nuke_hive.name=Rocket Hive @@ -2289,6 +2321,7 @@ item.blades_desh.name=Деш-лезвия измельчителя item.blades_steel.name=Стальные лезвия измельчителя item.blades_titanium.name=Титановые лезвия измельчителя item.blowtorch.name=Паяльная лампа +item.blueprints.name=Чертежи item.board_copper.name=Медная панель item.boat_rubber.name=Резиновая лодка item.bobmazon.name=Bobmazon @@ -2426,8 +2459,6 @@ item.canned_tuna.name=Консервированный тунец item.canned_tuna.desc=Я не могу сказать, действительно ли это тунец или высушенный цемент. item.canned_yogurt.name=Консервированный йогурт item.canned_yogurt.desc=Возможно просрочен, но не важно. -item.canteen_13.name=Фляжка Убежища 13 -item.canteen_fab.name=Потрясающая водка item.canteen_vodka.name=Стильная фляга item.cap_fritz.name=Крышка от Фрицз-Колы item.cap_korl.name=Крышка от Бутылки Корла @@ -2521,6 +2552,7 @@ item.chopper_torso.name=Корпус Вертолёта-охотника item.chopper_wing.name=Крыло Вертолета-охотника item.chunk_ore.malachite.name=Кусок малахита item.chunk_ore.rare.name=Кусок редкоземельной руды +item.chunk_ore.moonstone.name=Лунный камень item.chunk_ore.cryolite.name=Кусок криолита item.cigarette.name=Сигарета марки "FFI" item.cinnebar.name=Киноварь @@ -2871,7 +2903,6 @@ item.euphemium_plate.name=Эвфемиевый нагрудник item.euphemium_stopper.name=Ограничитель item.explosive_lenses.name=Набор взрывоопасных линз item.explosive_lenses.desc=Сборка из 8 линз из пластичной взрывчатки с тонким$алюминиевым толкателем, дюралюминиевым корпусом и$миниатюрными мостовыми детонаторами. -item.fabsols_vodka.name=Водка Fabsol'а item.factory_core_advanced.name=Энергетический кластер усовершенствованной фабрики item.factory_core_titanium.name=Энергетический кластер базовой фабрики item.fallout.name=Куча радиоактивных осадков @@ -2901,7 +2932,7 @@ item.fleija_igniter.name=Импульсный воспламенитель item.fleija_kit.name=Комплект Ф.Л.Е.Я item.fleija_propellant.name=Шрабидиевая взрывчатка item.fluid_barrel_empty.name=Пустая бочка для жидкости -item.fluid_barrel_full.name=Жидкостная бочка: +item.fluid_barrel_full.name=Жидкостная бочка: %s item.fluid_barrel_infinite.name=Бесконечная жидкостная бочка item.fluid_duct.name=Жидкостная труба: item.fluid_identifier.name=Идентификатор жидкости @@ -2912,10 +2943,12 @@ item.fluid_identifier.usage2=в радиусе 64 блоков. item.fluid_identifier_multi.name=Мульти-жидкостный идентификатор item.fluid_identifier_multi.info=Жидкостный идентификатор для: item.fluid_identifier_multi.info2=Второй тип: +item.fluid_pack_empty.name=Большой жидкостный контейнер +item.fluid_pack_full.name=%s - упакованно item.fluid_tank_empty.name=Пустой универсальный резервуар для жидкости -item.fluid_tank_full.name=Универсальный резервуар для жидкости: +item.fluid_tank_full.name=Универсальный резервуар для жидкости: %s item.fluid_tank_lead_empty.name=Пустой резервуар для опасных материалов -item.fluid_tank_lead_full.name=Резервуар с опасными материалами: +item.fluid_tank_lead_full.name=Резервуар с опасными материалами: %s item.fluorite.name=Флюорит item.flywheel_beryllium.name=Бериллевый маховик item.fmn.name=Таблетка флунитразепама @@ -3032,8 +3065,11 @@ item.gun_aberrator.name=Аберратор item.gun_aberrator_eott.name=Глаза бури item.gun_am180.name=Пистолет-пулемёт .22 LR item.gun_am180_silenced.name=Пистолет-пулемёт .22 LR с глушителем +item.gun_amat.name=Крупнокалиберная снайперская винтовка +item.gun_amat_penance.name="Покаяние" +item.gun_amat_subtlety.name="Тонкость" item.gun_ar15.name="Джош" -item.gun_autoshotgun.name=Барабанный дробовик +item.gun_autoshotgun.name=Автоматический дробовик item.gun_autoshotgun_sexy.name=Секси item.gun_autoshotgun_shredder.name=Шреддер item.gun_avenger.name=CZ57 “Авенджер” @@ -3054,6 +3090,7 @@ item.gun_calamity.name=Каламити item.gun_calamity_ammo.name=Кал. 50 (LEGACY) item.gun_calamity_dual.name=Боевое седло item.gun_carbine.name=Карабин +item.gun_charge_thrower.name=Метатель снарядов item.gun_chemthrower.name=Химомёт item.gun_coilgun.name=Гаусс-пушка item.gun_congolake.name=Congo Lake @@ -3083,7 +3120,7 @@ item.gun_flechette.name=Игольчатая винтовка item.gun_folly.name=Прототип Дигамма "Причуда" item.gun_g3.name=Штурмовая винтовка item.gun_g3_a3.name=G3A3 -item.gun_g3_infiltrator.name=Infiltrator +item.gun_g3_infiltrator.name=Инфильтратор item.gun_g3_zebra.name=Зебринская винтовка item.gun_glass_cannon.name=Стеклянная пушка item.gun_greasegun.name=Пистолет-пулемёт "Маслёнка" @@ -3111,11 +3148,11 @@ item.gun_lacunae_ammo.name=5-мм патрон (LEGACY) item.gun_lag.name=Комически длинный пистолет item.gun_laser_pistol.name=Лазерный пистолет item.gun_laser_pistol_morning_glory.name=Морнин Глори -item.gun_laser_pistol_pew_pew.name=Пью-Пью +item.gun_laser_pistol_pew_pew.name=Пиу-пиу item.gun_lasrifle.name=Лазерная винтовка item.gun_lever_action.name=«Нога кобылы» (Оригинал) item.gun_lever_action_ammo.name=Дробь 12x74 калибра (LEGACY) -item.gun_lever_action_dark.name=«Нога кобылы» (Тёмный) +item.gun_lever_action_dark.name="Нога кобылы" (Тёмный) item.gun_lever_action_sonata.name=Перевёрнутая «Нога кобылы» item.gun_lever_action_sonata_2.name=§cSonata's Microphone§r item.gun_liberator.name=Либератор @@ -3129,7 +3166,8 @@ item.gun_maresleg_akimbo.name=Дробовики рычажного действ item.gun_maresleg_broken.name=Broken item.gun_maresleg_short.name=Нога кобылы item.gun_mas36.name=Южная Звезда -item.gun_minigun.name=Персональный миниган CZ53 +item.gun_minigun.name=Персональный миниган +item.gun_minigun_dual.name=Двойные миниганы item.gun_minigun_lacunae.name=Лакунай item.gun_mirv.name=M42 Ядерная катапульта "Экспериментальный МИРВ" item.gun_mirv_ammo.name=Восьмиричный МИРВ (LEGACY) @@ -3227,7 +3265,7 @@ item.hazmat_plate_red.name=Улучшенный защитный нагрудн item.hazmat_red_kit.name=Расширенный комплект химической и радиационной защиты item.heart_booster.name=Усилитель сердца item.heart_container.name=Контейнер для сердца -item.heart_fab.name=Фаб-сердце +item.heart_fab.name=Сердце Тьмы item.heart_piece.name=Частичка сердца item.heavy_component.name=Тяжёлый компонент (%s) item.hev_battery.name=Батарея костюма @@ -3314,7 +3352,7 @@ item.ingot_les.name=Слиток низкообогащенного шрабид item.ingot_magnetized_tungsten.name=Слиток намагниченного вольфрама item.ingot_metal.name=Металлический слиток item.ingot_metal.bar.name=Металлический кусок -item.ingot_metal.beacon.name=Radio Homing Beacon +item.ingot_metal.beacon.name=Радиомаяк item.ingot_metal.casing.name=Металлическая оболочка item.ingot_metal.clockwork.name=Заводной механизм item.ingot_metal.counter.name=Счётчик @@ -3875,6 +3913,7 @@ item.part_barrel_light.name=Лёгкий ствол (%s) item.part_beryllium.name=Коробка бериллиевой пыли item.part_carbon.name=Коробка угольной пыли item.part_copper.name=Коробка медной пыли +item.part_generic.glass_polarized.name=Поляризованная линза item.part_generic.hde.name=Элемент повышенной прочности item.part_generic.lde.name=Элемент малой плотности item.part_generic.piston_electric.name=Электрический поршень @@ -4021,7 +4060,7 @@ item.plate_fuel_u235.name=Высокообогащенная уран-235 топ item.plate_gold.name=Золотая пластина item.plate_gunmetal.name=Пластина пушечной бронзы item.plate_iron.name=Железная пластина -item.plate_kevlar.name=Кевларо-керамический состав +item.plate_kevlar.name=Лист кевлара item.plate_lead.name=Свинцовая пластина item.plate_mixed.name=Смешанная пластина item.plate_paa.name=Пластина сплава PaA @@ -4226,6 +4265,7 @@ item.radx.desc=Increases radiation resistance by 0.2 (37%) for 3 minutes item.rag.name=Тряпка item.rag_damp.name=Влажная тряпка item.rag_piss.name=Пропитанная мочой тряпка +item.rangefinder.name=Дальнометр item.rbmk_fuel_balefire.name=Жар-топливный стержень РБМК item.rbmk_fuel_balefire_gold.name=Флэшголд-топливный стержень РБМК item.rbmk_fuel_drx.name=§cДигамма топливный стержень РБМК§r @@ -4684,10 +4724,10 @@ item.t45_kit.name=Комплект силовой брони T45 item.t45_legs.name=Поножи силовой брони T45 item.t45_plate.name=Нагрудник силовой брони T45 item.tank_steel.name=Стальной бак -item.taurun_boots.name=Taurun Boots -item.taurun_helmet.name=Taurun Helmet -item.taurun_legs.name=Taurun Leggings -item.taurun_plate.name=Taurun Chestplate +item.taurun_boots.name=Taurun ботинки +item.taurun_helmet.name=Taurun шлем +item.taurun_legs.name=Taurun поножи +item.taurun_plate.name=Taurun нагрудник item.tank_waste_0.name=Контейнер с отходами item.tank_waste_1.name=Контейнер с отходами item.tank_waste_2.name=Контейнер с отходами @@ -5417,7 +5457,7 @@ tile.crane_partitioner.desc=Принимает и сохраняет до дев tile.crane_router.name=Конвейерный сортировщик tile.crane_router.desc=Сортирует элемент на основе заданных критериев$Стороны могут быть определены как черный список, белый список или подстановочный знак$Стороны подстановочного знака выбираются только в том случае, если ни один другой фильтр не подходит tile.crane_splitter.name=Конвейерный разделитель -tile.crane_splitter.desc=Разделяет предметы и равномерно укладывает их на две конвейерные ленты$Сама является конвейерной лентой, поэтому может напрямую входить в инсертер или сортировщик +tile.crane_splitter.desc=Разделяет предметы и равномерно укладывает их на две конвейерные ленты$Сама является конвейерной лентой, поэтому может напрямую входить в вставщик или сортировщик$Соотношение можно настроить с помощью отвертки tile.crane_unboxer.name=Конвейерный распаковщик tile.crane_unboxer.desc=Прием коробок и извлечение их содержимого$Правый щелчок отверткой для установки выходной стороны$Shift-щелчок отверткой для установки входной стороны$Дважды щелкните для установки противоположной стороны tile.crashed_bomb.name=Неразорвавшаяся бомба @@ -5518,6 +5558,7 @@ tile.ducrete_smooth_stairs.name=Ступеньки из дюкрета tile.dummy_block.name=Блок-пустышка tile.dummy_port.name=Блок-пустышка (Розетка) tile.dungeon_chain.name=Металлическая цепь +tile.logic_block.name=Блок действия подземелья tile.dynamite.name=Динамит tile.emp_bomb.name=ЭМИ-бомба tile.factory_advanced_conductor.name=Порт электричества усовершенствованной фабрики @@ -5557,6 +5598,7 @@ tile.fluid_duct_gauge.desc=Труба которая показывает ско tile.fluid_duct_neo.name=Универсальная жидкостная труба tile.fluid_duct_paintable.name=Окрашиваемая покрытая универсальная жидкостная труба tile.fluid_duct_solid.name=Покрытая универсальная жидкостная труба (Устаревшее) +tile.fluid_pump.name=Помпа контроля потока tile.fluid_switch.name=Редстоун-Жидкостный клапан tile.fluid_valve.name=Жидкостный клапан tile.foam_layer.name=Слой пены @@ -5609,6 +5651,7 @@ tile.geiger.name=Счетчик Гейгера tile.glass_ash.name=Пепельное стекло tile.glass_boron.name=Борное стекло tile.glass_lead.name=Свинцовое стекло +tile.glass_polarized.name=Поляризованное стекло tile.glass_polonium.name=Полониевое стекло tile.glass_quartz.name=Кварцевое стекло tile.glass_trinitite.name=Тринититовое стекло @@ -5632,10 +5675,6 @@ tile.hadron_coil_neodymium.name=Плотная неодимовая катушк tile.hadron_coil_schrabidate.name=Плотная шрабидатавая катушка tile.hadron_coil_schrabidium.name=Плотная шрабидиевая катушка tile.hadron_coil_starmetal.name=Плотная звёзднометаллическая катушка -tile.hadron_cooler.name=Кулер ускорителя частиц -tile.hadron_cooler.desc=Мощность охлаждения: 10$Порог переохлаждения: 10$Бонус: +10%%$Штраф переохлаждения: -25%% -tile.hadron_cooler_mk2.name=Кулер ускорителя частиц - The Palindrome Special -tile.hadron_cooler_mk2.desc=Мощность охлаждения: 5$Функция эффективности: 2-(охлад-15)²/225$Макс. штраф: -90%% tile.hadron_core.name=Ядро ускорителя частиц tile.hadron_diode.name=Диод частиц Шоттки tile.hadron_plating.name=Обшивка ускорителя частиц @@ -5719,8 +5758,9 @@ tile.machine_arc_welder.name=Дуговой сварщик tile.machine_armor_table.name=Стол модификации брони tile.machine_ashpit.name=Зольник tile.machine_ashpit.desc=Собирает золу из топок и нагревательных печей -tile.machine_assembler.name=Сборочная машина +tile.machine_assembler.name=Сборочная машина (Legacy) tile.machine_assemfac.name=Сборочный завод +tile.machine_assembly_machine.name=Сборочная машина tile.machine_autocrafter.name=Автоматический верстак tile.machine_autosaw.name=Автоматическая пила tile.machine_autosaw.desc=Срубает ближайшие растения, пересаживает деревья$Принимает:$-Древесное масло$-Этанол$-Рыбное масло$-Тяжелую нефть @@ -5736,8 +5776,11 @@ tile.machine_boiler_off.name=Нагревательнефти tile.machine_catalytic_cracker.name=Башня каталитического крекинга tile.machine_catalytic_reformer.name=Каталитический реформер tile.machine_centrifuge.name=Центрифуга -tile.machine_chemfac.name=Химический завод -tile.machine_chemplant.name=Химическая установка +tile.machine_chemfac.name=Химический завод (Legacy) +tile.machine_chemical_factory.name=Химический завод +tile.machine_chemical_factory.desc=Четырехкратный химический завод.$Рецепты обрабатываются в два раза быстрее,$но требуют в два раза больше энергии.$Требует охлаждения водой,$производит пар низкого давления. +tile.machine_chemical_plant.name=Химическая установка +tile.machine_chemplant.name=Химическая установка (Legacy) tile.machine_chungus.name=Паровая турбина "Левиафан" tile.machine_chungus.desc=Эффективность: 85%% tile.machine_coal_off.name=Генератор внутреннего сгорания @@ -6040,6 +6083,7 @@ tile.plasma_heater.name=Нагреватель плазмы tile.plushie.name=Плюшевая игрушка %s tile.pneumatic_tube.name=Пневмотруба tile.pneumatic_tube.desc=Пересылает предметы за счёт сжатого воздуха.$ПКМ отвёрткой, чтобы задать вход.$ПКМ отвёрткой в присяде, чтобы задать выход.$Входы могут быть настроены и подключены к источнику сжатого воздуха.$Отсылает вплоть до полного стака четыре раза в секунду. +tile.pneumatic_tube_paintable.name=Окрашиваемая пневматическая труба tile.pole_satellite_receiver.name=Спутниковая тарелка tile.pole_top.name=Антенна tile.press_preheater.name=Внешний нагреватель пресса @@ -6075,10 +6119,14 @@ tile.pwr_reflector.desc=Отражает нейтроны обратно к то tile.rad_lava_block.name=Вулканическая лава tile.radar_screen.name=Экран радара tile.radio_telex.name=Телекс +tile.radio_torch_controller.name=Контроллер редстоун-радио +tile.radio_torch_controller.desc=Может принимать сигналы команд и передавать$их на подключенное устройство tile.radio_torch_counter.name=Редстоун-радио счётчик предметов tile.radio_torch_counter.desc=Ставится на плоские поверхности или совместимые компараторные блоки$Сигнал зависит от количества нужных предметов tile.radio_torch_logic.name=Редстоун-радио логический приёмник tile.radio_torch_logic.desc=Размещается на плоских поверхностях или совместимых с компаратором блоках$Сопоставляет сигналы красного камня с условиями, оцениваемыми в заданном порядке$Числовые или строковые входы сравниваются с константой +tile.radio_torch_reader.name=Редстоун-радио ридер +tile.radio_torch_reader.desc=Считывает значения из подключенных блоков,$а затем отправляет их с указанной частотой tile.radio_torch_receiver.name=Редстоун-радио приёмник tile.radio_torch_receiver.desc=Ставится на плоские поверхности или совместимые компараторные блоки tile.radio_torch_sender.name=Редстоун-радио передатчик @@ -6171,6 +6219,7 @@ tile.sand_lead.name=Свинцовый песок tile.sand_polonium.name=Полониевый песок tile.sand_quartz.name=Кварцевый песок tile.sand_uranium.name=Урановый песок +tile.sandbags.name=Мешки с песком tile.sat_dock.name=Станция посадки груза tile.sat_foeq.name=ВСАП-МК.I зонд “FOEQ Duna” с экспериментальным ядерным двигателем (Декор) tile.sat_laser.name=Орбитальный Луч Смерти (Декор) @@ -6284,6 +6333,7 @@ tile.vent_chlorine.name=Хлорный клапан tile.vent_chlorine_seal.name=Хлорный уплотнитель tile.vent_cloud.name=Воздушный клапан с облаком tile.vent_pink_cloud.name=Воздушный клапан с розовым облаком +tile.vine_phosphor.large.name=Фосфорные лианы tile.vinyl_tile.large.name=Большая виниловая плитка tile.vinyl_tile.small.name=Маленькие виниловые плитки tile.vitrified_barrel.name=Бочка с остеклованными ядерными отходами @@ -6293,6 +6343,7 @@ tile.volcano_rad_core.name=Радиоактивное вулканическое tile.wand_air.name=Блок для структурной палочки (Air) tile.wand_loot.name=Блок для структурной палочки (Lootable) tile.wand_jigsaw.name=Блок для структурной палочки (Jigsaw) +tile.wand_logic.name=Блок для структурной палочки (Logic) tile.waste_earth.name=Мертвая трава tile.waste_leaves.name=Мёртвые листья tile.waste_log.name=Обугленное бревно @@ -6310,6 +6361,10 @@ tile.watz_end.name=Стабилизатор реактора Ватцза tile.watz_end_bolted.name=Стабилизатор реактора Ватцза (Заклепанный) tile.watz_hatch.name=Люк доступа к реактору Ватцза tile.watz_pump.name=Нагнетающая помпа Ватцза +tile.wood_barrier.name=Деревянный барьер +tile.wood_structure.ceiling.name=Деревянный пол +tile.wood_structure.roof.name=Деревянная крыша +tile.wood_structure.scaffold.name=Деревянные подмостки tile.yellow_barrel.name=Радиоктивная бочка tile.zirnox_destroyed.name=Разрушенный Цирнокс @@ -6409,6 +6464,7 @@ upgrade.fortune=Удача %s upgrade.overheatChance=Шанс перегрева %s upgrade.productivity=Продуктивность %s upgrade.range=Радиус %s +upgrade.speed=Скорость процесса %s upgrade.gui.title=§lПринимаемые улучшения:§r upgrade.gui.afterburner= * §dФорсаж§r: Стакается до %s уровней @@ -6452,3 +6508,5 @@ desc.gui.upgrade.effectiveness= * §aЭффективность§r: Стакае desc.gui.upgrade.overdrive= * §7Перегруз§r: Стакается до 3-х уровней desc.gui.upgrade.power= * §1Энергосбережение§r: Стакается до 3-х уровней desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х уровней + +tile.oc_cable_paintable.name=Окрашиваемый сетевой кабель From b656e1d22e8196b2d4fd675c0924abb4ea6267b2 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Tue, 29 Jul 2025 11:44:03 -0600 Subject: [PATCH 314/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 9e4f26bae..49c69b856 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -698,7 +698,6 @@ commands.satellite.satellite_orbited=Спутник запущен. commands.satellite.should_be_run_as_player=Команда должна быть выполнена игроком! -container.ammoBag=Ammo Bag container.ammoBag=Сумка для боеприпасов container.amsBase=Основание АМС [Декор] container.amsEmitter=Излучатель АМС [Декор] From c82e371ec8efc7a5aef752555a4352dd2ef5d887 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Tue, 29 Jul 2025 11:45:26 -0600 Subject: [PATCH 315/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 49c69b856..f88846738 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1416,8 +1416,8 @@ hazard.particleCoarse=Частиц, находящихся в воздухе hazard.particleFine=Твердых частиц hazard.sand=Раздражителей глаз -hbm.key.ability=Переключение абилки инструмента -hbm.key.abilityAlt=Изменить абилки инструмента +hbm.key.ability=Переключение способностей инструмента +hbm.key.abilityAlt=Изменить способности инструмента hbm.key=NTM Хоткеи hbm.key.calculator=Калькулятор hbm.key.copyToolAlt=Устройство настройки: Переключить вставку From 77df7e6cdee44834149c0c77b7d8124ead3a173b Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Tue, 29 Jul 2025 12:28:14 -0600 Subject: [PATCH 316/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index f88846738..5f1f06ffc 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -842,6 +842,7 @@ container.radar=Радар container.radiobox=FM передатчик container.radiolysis=РИТЭГ и Камера Радиолиза container.radiorec=FM радио +container.rbmkAutoloader=Автозагрузчик стержней РБМК container.rbmkBoiler=Паровой канал РБМК container.rbmkControl=Регулирующие стержни РБМК container.rbmkControlAuto=Автоматические регулирующие стержни РБМК From e85ae838c6fd629675b4abc6fd2801111ac73d98 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Tue, 29 Jul 2025 12:31:33 -0600 Subject: [PATCH 317/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 5f1f06ffc..b39db8163 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -6147,6 +6147,7 @@ tile.rail_large_switch_flipped.name=Переключатель стандарт tile.rail_narrow.name=Узкоколейные вагонеточные рельсы tile.rail_wood.name=Деревянные рельсы tile.rbmk_absorber.name=Борный поглотитель нейтронов РБМК +tile.rbmk_autoloader.name=Автозагрузчик стержней РБМК tile.rbmk_blank.name=Структурная колонна РБМК tile.rbmk_boiler.name=Паровой канал РБМК tile.rbmk_console.name=Консоль РБМК From 82b02c29ea9cf0cecbc1b6cc73c0e3eebb8af128 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Tue, 29 Jul 2025 13:18:25 -0600 Subject: [PATCH 318/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index b39db8163..dcbca0d67 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2022,7 +2022,7 @@ item.ammo_standard.m44_sp.name=.44 magnum (Экспансивный) item.ammo_standard.nuke_balefire.name=Ядерный минизаряд (Жар-яйцо) item.ammo_standard.nuke_demo.name=Ядерный минизаряд (Разрушающий) item.ammo_standard.nuke_high.name=Ядерный минизаряд (Высокомощный) -item.ammo_standard.nuke_hive.name=Rocket Hive +item.ammo_standard.nuke_hive.name=Ракетный рой item.ammo_standard.nuke_standard.name=Ядерный минизаряд item.ammo_standard.nuke_tots.name=Ядерный минизаряд (Карапузы) item.ammo_standard.p22_ap.name=.22 LR патрон (Бронебойный) @@ -6363,8 +6363,8 @@ tile.watz_end_bolted.name=Стабилизатор реактора Ватцза tile.watz_hatch.name=Люк доступа к реактору Ватцза tile.watz_pump.name=Нагнетающая помпа Ватцза tile.wood_barrier.name=Деревянный барьер -tile.wood_structure.ceiling.name=Деревянный пол -tile.wood_structure.roof.name=Деревянная крыша +tile.wood_structure.ceiling.name=Деревянный настил +tile.wood_structure.roof.name=Деревянное перекрытие tile.wood_structure.scaffold.name=Деревянные подмостки tile.yellow_barrel.name=Радиоктивная бочка tile.zirnox_destroyed.name=Разрушенный Цирнокс From 55bfe1b8d202cbb9c2fd77d8c5f04432cb21af10 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Wed, 30 Jul 2025 13:40:16 -0600 Subject: [PATCH 319/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 292 +++++++++--------- 1 file changed, 146 insertions(+), 146 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index dcbca0d67..36f2179b9 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -14,7 +14,7 @@ achievement.bossCreeper.desc='Здесь есть ядерные криперы? achievement.bossCreeper=Бомба на четырёх ногах achievement.bossMaskman.desc=Врезать большому мальчику. achievement.bossMeltdown.desc=Скорее ужасно, чем отлично, но я приму то, что могу получить. -achievement.bossMaskman=6 месяцев срочной службы, и все что я получил это паршивая футболка +achievement.bossMaskman=6 месяцев срочной службы, и всё что я получил это паршивая футболка achievement.bossMeltdown=3.6 рентген achievement.bossWorm.desc=Просто маленький металический червь. achievement.bossWorm=Разборка Баллс-О-Трон @@ -38,29 +38,29 @@ achievement.desh.desc="Тогда давайте, вы все. Места, ку achievement.desh=Леверье achievement.digammaFeel.desc=Мои глаза кровоточат achievement.digammaFeel=Мусорный мир наполненный канализациями -achievement.digammaKauaiMoho.desc=Все ужасно, вот тебе горячий шоколад. +achievement.digammaKauaiMoho.desc=Всё ужасно, вот тебе горячий шоколад. achievement.digammaKauaiMoho=Пой, пой мне песню Кауаи Мохо -achievement.digammaKnow.desc=о чем вообще этот мир. +achievement.digammaKnow.desc=о чём вообще этот мир. achievement.digammaKnow=СТРАХ ПОЗНАНИЯ achievement.digammaSee.desc=Темновато, принеси фонарик. achievement.digammaSee=СПУСТИСЬ В БЕЗДНУ achievement.digammaUpOnTop.desc=Восхищайся сыном моим, он мой клон. achievement.digammaUpOnTop=ВОСХИЩАЙСЯ МНОЮ, ВОСХИЩАЙСЯ ДОМОМ МОИМ achievement.fiend.desc=Будь жестоким. -achievement.fiend2.desc=Будь еще жёстче. +achievement.fiend2.desc=Будь ещё жёстче. achievement.fiend2=Нарушитель-2: перенарушение. achievement.fiend=Нарушитель -achievement.freytag.desc=Стражи жизни Герольда. +achievement.freytag.desc=Стражи жизни Геральда. achievement.freytag=Фрейтаг achievement.fusion.desc=Танец дейтронов, тритонов и энергии. achievement.fusion=Синтез -achievement.gasCent.desc=Необогащенный уран ненавидит его! +achievement.gasCent.desc=Необогащённый уран ненавидит его! achievement.gasCent=Стиль Молнии achievement.goFish.desc=Морское распятие achievement.goFish=Иди порыбачь achievement.hidden.desc=Убейте зараженного крипера падающим товарным вагоном achievement.hidden=Скрытый Каталог -achievement.horizonsBonus.desc=честное слово что черт возьми с тобой не так +achievement.horizonsBonus.desc=честное слово что чёрт возьми с тобой не так achievement.horizonsBonus=Слэм-данк диарея achievement.horizonsEnd.desc=Отправьте Тома домой. achievement.horizonsEnd=Горизонты @@ -68,11 +68,11 @@ achievement.horizonsStart.desc=Отправьте Геральда на луну achievement.horizonsStart=Апогей achievement.impossible.desc=Ты не можешь получить это достижение. achievement.impossible=Буквально невозможно -achievement.inferno.desc="Превратите его в пепел! Этого недостаточно! Сбросьте еще бомбы!" +achievement.inferno.desc="Превратите его в пепел! Этого недостаточно! Сбросьте ещё бомбы!" achievement.inferno=Операция "Каннибал" achievement.manhattan.desc=8:15; 6 августа, 1945 год achievement.manhattan=Проект Манхэттен -achievement.meltdown.desc=Ты зашел так далеко, как ты мог все испортить? +achievement.meltdown.desc=Ты зашел так далеко, как ты мог всё испортить? achievement.meltdown=Быстрая внеплановая разборка achievement.no9.desc="Я надеюсь, что свинец, который я добываю, будет использован в вашей краске" achievement.no9=Старый номер Девять @@ -149,7 +149,7 @@ armor.fasterReload=Быстрая перезарядка armor.fastFall=Быстрое падение armor.fireproof=Огнеупорность armor.fullSetBonus=Бонусы Полного Набора брони: -armor.geigerHUD=Встроенный HUD счетчика Гейгера +armor.geigerHUD=Встроенный HUD счётчика Гейгера armor.geigerSound=Звуковой Счётчик Гейгера armor.glider=Присесть, чтобы спланировать armor.gravity=Модификатор гравитации %s @@ -210,7 +210,7 @@ book.test.page1=Test Page 1 book.error.cover=Адронный Коллайдер:$Диагностирование проблем book.error.title1=Ошибка 0x01 [NC] -book.error.page1=§lНазвание:§r "ERROR_NO_CHARGE" §lОписание:§r Частица достигла сегмента, у которого недостаточно заряда. §lПотенциальное решение:§r Либо замените один из портов питания, через который частица успешно проходит, на более мощный порт питания, либо добавьте еще один порт питания немного раньше сегмента, где исчезает частица. +book.error.page1=§lНазвание:§r "ERROR_NO_CHARGE" §lОписание:§r Частица достигла сегмента, у которого недостаточно заряда. §lПотенциальное решение:§r Либо замените один из портов питания, через который частица успешно проходит, на более мощный порт питания, либо добавьте ещё один порт питания немного раньше сегмента, где исчезает частица. book.error.title2=Ошибка 0x02 [NA] book.error.page2=§lНазвание:§r "ERROR_NO_ANALYSIS" §lОписание:§r Частица достигла ядра, несмотря на то, что она не прошла камеру анализа. §lПотенциальное решение:§r Проверьте что ваш ускоритель имеет камеру анализа и также проверьте режим работы (линейный/циклический). book.error.title3=Ошибка 0x03 [OC] @@ -218,13 +218,13 @@ book.error.page3=§lНазвание:§r "ERROR_OBSTRUCTED_CHANNEL" §lОпис book.error.title4=Ошибка 0x04 [EC] book.error.page4=§lНазвание:§r "ERROR_EXPECTED_COIL" §lОписание:§r Частица пересекла сегмент, у которого не хватает одной или нескольких катушек. §lПотенциальное решение:§r Снимите обшивку с коллайдера в предполагаемой области и проверьте наличие всех катушек. Эта ошибка также возникает при T-образных пересечениях которые были построены без диодов. book.error.title5=Ошибка 0x05 [MS] -book.error.page5=§lНазвание:§r "ERROR_MALFORMED_SEGMENT" §lОписание:§r Частица пересекла сегмент, который был неправильно построен (но не заблокирован или не имеет катушек). §lПотенциальное решение:§r Проверьте, что предполагаемый сегмент имеет обшивку во все требуемых местах, не оставляя открытых катушек. +book.error.page5=§lНазвание:§r "ERROR_MALFORMED_SEGMENT" §lОписание:§r Частица пересекла сегмент, который был неправильно построен (но не заблокирован или не имеет катушек). §lПотенциальное решение:§r Проверьте, что предполагаемый сегмент имеет обшивку во всех требуемых местах, не оставляя открытых катушек. book.error.title6=Ошибка 0x06 [ATL] -book.error.page6=§lНазвание:§r "ERROR_ANALYSIS_TOO_LONG" §lОписание:§r Частица прошла более трех требуемых допустимых сегментов камеры анализа. §lПотенциальное решение:§r Проверьте, что камера анализа точно 3 блока в длину для циклического ускорителя и хотя бы 2 блока в длину для линейного. Также проверьте, не проходит ли частица через несколько камер анализа в разветвленном и/или закольцованном ускорителе. +book.error.page6=§lНазвание:§r "ERROR_ANALYSIS_TOO_LONG" §lОписание:§r Частица прошла более трёх требуемых допустимых сегментов камеры анализа. §lПотенциальное решение:§r Проверьте, что камера анализа точно 3 блока в длину для циклического ускорителя и хотя бы 2 блока в длину для линейного. Также проверьте, не проходит ли частица через несколько камер анализа в разветвленном и/или закольцованном ускорителе. book.error.title7=Ошибка 0x07 [ATS] book.error.page7=§lНазвание:§r "ERROR_ANALYSIS_TOO_SHORT" §lОписание:§r Частица покинула камеру анализа, несмотря на несоответствие требованиям по длине. §lПотенциальное решение:§r Убедитесь, что камера анализа ускорителя имеет длину ровно 3 блока. Допустимые сегменты камеры не имеют катушек, а покрытие полностью состоит из стенок/окон камеры анализа. Камеры анализа с катушками в них считаются правильными сегментами. book.error.title8=Ошибка 0x08 [DC] -book.error.page8=§lНазвание:§r "ERROR_DIODE_COLLISION" §lОписание:§r Частица столкнулась с не входящей стороной диода частиц Шоттки. §lПотенциальное решение:§r Проверьте что ваши диоды настроены правильно. Частицы могут входить только со сторон с зелеными стрелками, направленными внутрь. +book.error.page8=§lНазвание:§r "ERROR_DIODE_COLLISION" §lОписание:§r Частица столкнулась с не входящей стороной диода частиц Шоттки. §lПотенциальное решение:§r Проверьте что ваши диоды настроены правильно. Частицы могут входить только со сторон с зелёными стрелками, направленными внутрь. book.error.title9=Ошибка 0x09 [BT] book.error.page9=§lНазвание:§r "ERROR_BRANCHING_TURN" §lОписание:§r Частица достигла поворота с несколькими выходами. §lПотенциальное решение:§r Если ваш поворот нормальный, проверьте есть ли там все катушки (то есть нет дыр в слоях). Если поворот предназначен для разветвления, для этого требуется правильно сконфигурированный диод частиц Шоттки. @@ -256,9 +256,9 @@ book.rbmk.title12=Консоль book.rbmk.page12=§lКонсоль РБМК§r позволяет управлять реактором издалека. Использование §lУстройства для соединения консоли§r §lРБМК§r на части РБМК и затем на консоли соединит реактор и консоль. Консоль может управлять только частями 15x15, для больших реакторов вы можете использовать несколько консолей. book.rbmk.title13=Использование консоли book.rbmk.page13=Щелчок по частям приведет к их выбору и отмене выбора. С помощью цветных кнопок вы можете быстро выбрать все стержни управления этой цветовой группы. Кнопка "A" выберет все стержни управления, "X" отменит выбор всех. -book.rbmk.page14=Ввод числа от 0 до 100 в зеленое поле, а затем нажатие кнопки рядом с ним приведет к установке всех выбранных стержней управления в это положение. Кнопка "АЗ-5" приведет к полной вставке всех стержней управления. +book.rbmk.page14=Ввод числа от 0 до 100 в зелёное поле, а затем нажатие кнопки рядом с ним приведет к установке всех выбранных стержней управления в это положение. Кнопка "АЗ-5" приведет к полной вставке всех стержней управления. book.rbmk.title15=Топливо -book.rbmk.page15=Реакция §lтоплива§r зависит от множества факторов. Основными из них являются §lобогащение§r, §lксеноновое отравление§r и количество поступающих §lнейтронов§r. Ксенон накапливается, когда топливо получает мало нейтронов, и сгорает во время нормальной работы. Эффективность нейтронов зависит от типа, большинство видов топлива §lлучше всего расщепляются медленными нейтронами§r. +book.rbmk.page15=Реакция §lтоплива§r зависит от множества факторов. Основными из них являются §lобогащёние§r, §lксеноновое отравление§r и количество поступающих §lнейтронов§r. Ксенон накапливается, когда топливо получает мало нейтронов, и сгорает во время нормальной работы. Эффективность нейтронов зависит от типа, большинство видов топлива §lлучше всего расщепляются медленными нейтронами§r. book.rbmk.title16=Расплавление book.rbmk.page16=§4§lИЗБЕГАЙТЕ. @@ -266,7 +266,7 @@ book.starter.cover=Руководство промышленника$по вос book.starter.title1=Вступление book.starter.page1=Если вы читаете это, то весьма вероятно, что общество, так или иначе, полностью рухнуло. Правительства, страны и власть - это концепция прошлого, вместе со всеми удобствами цивилизованной жизни. Таким образом, это руководство расскажет вам,как изменить это, воссоздав индустрию и технологии прошлого для улучшения вашей собственной жизни. book.starter.title2=Уголь и горчичный газ -book.starter.page2=Хотя невозможно предсказать фактическое состояние мира в постапокалиптическое время, вполне вероятно, что война и промышленность в ее нынешнем виде, возможно, еще не закончились. Чтобы защитить свои собственные лёгкие, эффективный и дешевый способ - помочиться на какую-нибудь тряпку, чтобы сделать §lтраншейную маску§r, чтобы защитить вас от угольной пыли или горчичного газа, если вы когда-нибудь столкнетесь с ними. +book.starter.page2=Хотя невозможно предсказать фактическое состояние мира в постапокалиптическое время, вполне вероятно, что война и промышленность в ее нынешнем виде, возможно, ещё не закончились. Чтобы защитить свои собственные лёгкие, эффективный и дешевый способ - помочиться на какую-нибудь тряпку, чтобы сделать §lтраншейную маску§r, чтобы защитить вас от угольной пыли или горчичного газа, если вы когда-нибудь столкнетесь с ними. book.starter.title3=Наковальни и прессы book.starter.page3=Квинтэссенцией для начала вашего промышленного возрождения являются §lнаковальня§r и §lпресс§r. Наковальня позволит вам вручную создавать ранние механизмы, такие как сборочная машина, в то время как пресс позволит вам изготавливать пластины, провода и схемы, которые вы не можете сделать с помощью наковальни. book.starter.title4=Шаблоны @@ -290,8 +290,8 @@ book.starter.page11=Под землей, по которой вы ходите, book.starter.title12=Радиация book.starter.page12a=§oОстальная часть этой книги будет посвящена вопросам, связанным с §oрадиацией. Для вашей безопасности и безопасности других людей я дам вам §oсоветы о том, как смягчить воздействие и справиться с ней. book.starter.page12b=Достаточное воздействие радиации может привести и приведет к телесным повреждениям. Первый шаг - это внешняя защита; обязательно ограничьте свое воздействие и наденьте защитное снаряжение, например §lЗащитный костюм§r, или прикрепить §lОбшивку§r к вашей одежде или броне; вы также можете принять §lРад-X§r чтобы ограничить получаемую дозу. Спасибо современной медицине, вторым шагом может быть удаление, если это необходимо; например, §l"Обеззараживатель §lигрока"§r будет медленно уменьшать излучение, поглощённое вашим телом. §lАнтирадин§r может быть использован как профилактика при облучении, быстро и эффективно устраняя повреждения, причиненные вашему организму ионизирующим излучением. -book.starter.title13=Обогащение урана -book.starter.page13=Существует несколько простых вариантов топлива для ядерного реактора; например, топливо из §lПриродного урана§r или §lТория§r. Однако, если вы ищете что-то более мощное, вы можете настроить каскад обогащения из двух §lГазовых центрифуг§r для производства §lУранового топлива§r с остатками §lУрана-238§r. Для этого вам придется превратить природный уран в §lЙеллоукейк§r, а затем в §lГексафторид §lурана§r. +book.starter.title13=Обогащёние урана +book.starter.page13=Существует несколько простых вариантов топлива для ядерного реактора; например, топливо из §lПриродного урана§r или §lТория§r. Однако, если вы ищете что-то более мощное, вы можете настроить каскад обогащёния из двух §lГазовых центрифуг§r для производства §lУранового топлива§r с остатками §lУрана-238§r. Для этого вам придется превратить природный уран в §lЙеллоукейк§r, а затем в §lГексафторид §lурана§r. book.starter.title14=Чикагская поленница book.starter.page14=В качестве альтернативы вы можете получить §lРеакторный плутоний§r, более мощное топливо, из природного урана, используя §lЧикагскую поленницу§r. Укладывая графитовые блоки и сверля их, вы можете вставить топливные стержни для размножения в плутоний и стержни источников нейтронов, такие как §lРадий-Бериллий§r, чтобы начать реакцию. Обязательно протестируйте свои конструкции; для предотвращения перегрева может потребоваться разделение или ограничение количества блоков. book.starter.title15=ЦИРНОКС РГО @@ -345,7 +345,7 @@ book_lore.test.page.4=5 book_lore.book_iodine.name=Заметка book_lore.book_iodine.author=Дейв -book_lore.book_iodine.page.0=Лады, вы не поверите, но старик Везэрвэйн наконец объявился через две недели после своего ухода и, что еще более впечатляюще, он раскололся на тему своих занятий в каньоне: +book_lore.book_iodine.page.0=Лады, вы не поверите, но старик Везэрвэйн наконец объявился через две недели после своего ухода и, что ещё более впечатляюще, он раскололся на тему своих занятий в каньоне: book_lore.book_iodine.page.1=Похоже, дебилы из НИОКР обнаружили соединение, в основном неорганическое, очень схожее с токсином, но вникните: умирающие клетки воспроизводят и выделяют его во внешнюю среду, создавая чрезвычайно заразный аэрозоль. book_lore.book_iodine.page.2=Оно как вирус, но не вирус. Состав странный, его можно замешать в любой бутылке, но лишь в нужном порядке. Док сказал, что первый реактив это просто измельченные кристаллы иода, идущие в ячейку %d. @@ -377,7 +377,7 @@ book_lore.book_syringe.page.1=шприц идёт в ячейку %d. book_lore.resignation_note.name=Заявление об отставке book_lore.resignation_note.author=Косма -book_lore.resignation_note.page.0=Управление вновь сократило наш отдел. Эти идиоты могут обвинить в произошедшем только себя, я не знаю, чего они ожидали после такого фиаско. Кто, черт его дери, сливает информацию? Мы теряем миллионы, а +book_lore.resignation_note.page.0=Управление вновь сократило наш отдел. Эти идиоты могут обвинить в произошедшем только себя, я не знаю, чего они ожидали после такого фиаско. Кто, чёрт его дери, сливает информацию? Мы теряем миллионы, а book_lore.resignation_note.page.1=работы лишили МЕНЯ. МЕНЯ попросили уволиться. Я надеюсь вы, кретины, наконец извлечете урок из громады своих ошибок и возьмёте себя в руки. book_lore.resignation_note.page.2=Я не приду в пятницу. Просто пришлите мне зарплату. @@ -436,19 +436,19 @@ book_lore.bf_bomb_4.page.4=Все они придают большое знач book_lore.bf_bomb_5.name=Личные заметки book_lore.bf_bomb_5.author=М. Портер book_lore.bf_bomb_5.page.0=Я просто... не могу с этим справиться, даже спустя несколько дней. На самом деле, это было предрешено, учитывая, насколько легкомысленно научная группа относилась к безопасности. $ $ Доктор Мелфин, старший научный сотрудник, сгинул. Вероятно, мёртв. Я видел, как это произошло, собственными глазами, в испытательной камере. -book_lore.bf_bomb_5.page.1=Мы только что получили еще одну порцию чистого жар-огня, а он нашел необходимое электрооборудование и источник энергии, чтобы проверить свое предположение. Я не знаю, что стало причиной (было ли запущено оборудование? Он начал слишком рано?), но оно свершилось мучительно медленно, -book_lore.bf_bomb_5.page.2=когда зеленый свет поглотил стол, батарею и доктора Мелфина, стоящего всего в метре от него. Даже когда стол превратился в лужу кипящего металла на полу, он не загорелся. Я не знаю, что я увидел в его глазах... $$ Ужас или трепет, +book_lore.bf_bomb_5.page.1=Мы только что получили ещё одну порцию чистого жар-огня, а он нашел необходимое электрооборудование и источник энергии, чтобы проверить свое предположение. Я не знаю, что стало причиной (было ли запущено оборудование? Он начал слишком рано?), но оно свершилось мучительно медленно, +book_lore.bf_bomb_5.page.2=когда зелёный свет поглотил стол, батарею и доктора Мелфина, стоящего всего в метре от него. Даже когда стол превратился в лужу кипящего металла на полу, он не загорелся. Я не знаю, что я увидел в его глазах... $$ Ужас или трепет, book_lore.bf_bomb_5.page.3=может из-за того, что он ещё жив? Чем бы ни был наш "чудо" материал, его это не волновало. В следующий момент он исчез в яркой вспышке света. Он испарился? сгорел? аннигилирован? Отошлите меня хоть в грёбаный ад, я больше ничего не знаю! book_lore.bf_bomb_5.page.4=Меня тошнит от главного исследователя. Он звиздел, что мы могли бы быть более осторожными, продолжать просто кружить вокруг, какую-то ещё подымающую мораль чепуху. Этот тупой урод никогда не поймет, что играя с огнем, можно обжечься. $ Я не стал заморачиваться с book_lore.bf_bomb_5.page.5=увольнением, просто забрал свои шмотки и побежал к холмам. В любом случае, неважно; учитывая отсутствие звонков и грибовидное облако, поднявшееся над моим (теперь уже бывшим) местом работы, они взорвали всё либо перешли в полное распоряжение военных. book_lore.bf_bomb_5.page.6=Есть важное различие между диссекцией и ВИВИСЕКЦИЕЙ, что они явно упустили из виду. Они могут рассекать металлы или атомы сколько угодно, но вторгаться внутрь, вивисекцировать саму реальность – это значит лишь порождать новых докторов Мелфинов. Кто знает! book_lore.bf_bomb_5.page.7=В конце-концов, правительство стремится превратить эту херню в бомбы, может, мы увидим ещё пару войн, ещё пару миллионов людей, встретивших судьбу хуже смерти. Они не могут прятать это вечно. $ $ Меня это не волнует. Теперь не волнует. Боже, пожалуйста, позволь мне вернуться -book_lore.bf_bomb_5.page.8=к настоящей науке. $ $ Черт возьми, Мэй, возьми себя в руки... +book_lore.bf_bomb_5.page.8=к настоящей науке. $ $ Чёрт возьми, Мэй, возьми себя в руки... book_lore.beacon.name=Инструкция по эксплуатированию сигнального маяка book_lore.beacon.author=ФлимФлэм Индастриз book_lore.beacon.page.0=Благодарим вас за покупку светового сигнального маяка мод.2 (версия 1.3)! Этот небольшой буклет содержит краткое введение в работу маяка и его внутреннюю работу. -book_lore.beacon.page.1=Глава 1: Архитектура $ Каждый блок состоит из четырех основных частей: управляющей микросхемы, фонаря, противотуманной сирены и корпуса, в котором расположены остальные части. Для подробного объяснения, пожалуйста, +book_lore.beacon.page.1=Глава 1: Архитектура $ Каждый блок состоит из четырёх основных частей: управляющей микросхемы, фонаря, противотуманной сирены и корпуса, в котором расположены остальные части. Для подробного объяснения, пожалуйста, book_lore.beacon.page.2=обратитесь к принципиальной схеме, расположенной на внутренней стороне крышки для обслуживания корпуса. Фонарь состоит из поликарбонатного корпуса, содержащего двуцветную галогеновую лампу мощностью 250Вт со стандартным 200мм разъёмом, запасные части book_lore.beacon.page.3=для лампы могут быть заказаны из наших магазинов. Не рекомендуется использовать лампы сторонних производителей, поскольку мы не можем гарантировать безопасную работу. Корпус изготовлен из специальной оцинкованной нержавеющей стали и устойчив к атмосферным воздействиям. book_lore.beacon.page.4=Глава 2: Фонарь $ Основное назначение фонаря — освещение для облегчения обслуживания в суровых погодных условиях, а также информирование о состоянии устройства. Если Power-On Self-Test (POST) не пройден, фонарь будет светиться @@ -457,7 +457,7 @@ book_lore.beacon.page.6=Глава 3: Туманный звуковой сигн book_lore.beacon.page.7=Глава 4: Peer-to-peer $ Подробную информацию о связи см. в руководстве по связи. Ниже приводится краткое описание установки P2P-соединения: во-первых, маяк должен подать сигнал «НАЧАТЬ СОЕДИНЕНИЕ», book_lore.beacon.page.8=являющийся одним длинным звуком. Все доступные узлы также должны ответить одним длинным однотонным сигналом (порядок определяется близостью, а также правилами связи, изложенными в руководстве, раздел «Ответ на соединение») book_lore.beacon.page.9=Как только желаемый партнер ответил, подайте сигнал «ПРИНЯТЬ СОЕДИНЕНИЕ» в виде двух длинных тонов, затем партнер также ответит двумя длинными тонами. Вся последующая коммуникация должна происходить с использованием заранее согласованных сигналов, чаще всего -book_lore.beacon.page.10=по стандарту ФАР-5М. Связь прекратится немедленно, если не будет согласован ни один стандарт, что будет служить «пингом». Если связь продолжается, соединение можно завершить, используя еще один длинный тональный сигнал «ЗАВЕРШИТЬ СОЕДИНЕНИЕ». +book_lore.beacon.page.10=по стандарту ФАР-5М. Связь прекратится немедленно, если не будет согласован ни один стандарт, что будет служить «пингом». Если связь продолжается, соединение можно завершить, используя ещё один длинный тональный сигнал «ЗАВЕРШИТЬ СОЕДИНЕНИЕ». book_lore.beacon.page.11=Глава 5: Гарантия $ [страница намеренно оставлена ​​пустой] cannery.f1=[ Нажмите f1 для справки ] @@ -533,7 +533,7 @@ cannery.willow.8=Вскоре растение снова начнет раст cannery.willow.9=Сбор ивовых листьев можно автоматизировать с помощью автоматической бензопилы, она будет ломать только те растения, которые готовы к сбору урожая. cannery.hadron=Ускоритель частиц -cannery.hadron.0=Ускоритель частиц состоит из трех основных частей: Ядро, Камера анализа и набор сверхпроводящих катушек. +cannery.hadron.0=Ускоритель частиц состоит из трёх основных частей: Ядро, Камера анализа и набор сверхпроводящих катушек. cannery.hadron.1=Это компонент ядра ускорителя частиц, который выстреливает частицы с релятивистскими скоростями по катушкам в сторону аналитической камеры cannery.hadron.2=Частицы выбрасываются отсюда cannery.hadron.3=И в круговых ускорителяхвозвращаются сюда @@ -681,7 +681,7 @@ chem.SULFURIC_ACID=Производство серной кислоты chem.TATB=Синтез TATB chem.TEL=Смешивание тетраэтилсвинца chem.TEST=Тест -chem.THORIUM_SALT=Обогащение ториевой соли +chem.THORIUM_SALT=Обогащёние ториевой соли chem.TNT=Синтез ТНТ chem.UF6=Производство гексафторида урана chem.VIT_GAS=Остекловывание газообразных ядерных отходов @@ -1012,7 +1012,7 @@ death.sedna.physical.attacker=%1$s был пристрелен %2$s. desc.gui.assembler.warning=§cОшибка:§r Требуется шаблон сборочной машины! desc.gui.chemplant.warning=§cОшибка:§r Требуется шаблон химической машины! -desc.gui.gasCent.enrichment=§2Обогащение§r$Для обогащения урана требуются каскады.$Каскады с двумя центрифугами дадут$урановое топливо, каскады с четырьмя центрифугами$обеспечат полное разделение. +desc.gui.gasCent.enrichment=§2Обогащёние§r$Для обогащёния урана требуются каскады.$Каскады с двумя центрифугами дадут$урановое топливо, каскады с четырьмя центрифугами$обеспечат полное разделение. desc.gui.gasCent.output=§6Перемещение жидкости§r$Жидкость может быть перемещена$через выходной порт для дальнейшей обработки. desc.gui.nukeBoy.desc=§1Требует:§r$ * Нейтронный щит$ * Снаряд U235$ * Субкритическая цель U235$ * Взрывчатка$ * Воспламенитель desc.gui.nukeGadget.desc=§1Требует:§r$ * 4 Набора взрывоопасных линз$ Первого поколения$ * Плутониевое ядро$ * Провода @@ -1592,9 +1592,9 @@ hbmfluid.xpjuice=Жидкий опыт hbmfluid.xylene=Бензол-толуол-ксилол (BTX) hbmpseudofluid.none=Пусто -hbmpseudofluid.heuf6=Высокообогащенный UF6 -hbmpseudofluid.meuf6=Среднеобогащенный UF6 -hbmpseudofluid.leuf6=Низкообогащенный UF6 +hbmpseudofluid.heuf6=Высокообогащённый UF6 +hbmpseudofluid.meuf6=Среднеобогащённый UF6 +hbmpseudofluid.leuf6=Низкообогащённый UF6 hbmpseudofluid.nuf6=Природный UF6 hbmpseudofluid.pf6=Гексафторид плутония hbmpseudofluid.mud_heavy=Тяжёлая осадочная фракция @@ -2258,8 +2258,8 @@ item.billet_flashlead.name=Заготовка флэшлида item.billet_flashlead.desc=Решетка распадается, вызывая реакции аннигиляции антивещества и материи, вызывая высвобождение$пионов, распадающихся на мюоны, катализирующих слияние$ядер, создавая новый элемент.$Пожалуйста, постарайся не отставать. item.billet_gh336.name=Заготовка гиорсия-336 item.billet_gh336.desc=Коллега Сиборгиума. -item.billet_hes.name=Заготовка высокообогащенного шрабидиевого топлива -item.billet_les.name=Заготовка низкообогащенного шрабидиевого топлива +item.billet_hes.name=Заготовка высокообогащённого шрабидиевого топлива +item.billet_les.name=Заготовка низкообогащённого шрабидиевого топлива item.billet_mox_fuel.name=Заготовка МОКС-топлива item.billet_mox_fuel.desc=Карманный Мокси! item.billet_neptunium.name=Заготовка нептуния @@ -2448,7 +2448,7 @@ item.canned_pizza.desc=Преступление против человечес item.canned_recursion.name=Консервированная рекурсия item.canned_recursion.desc=Консервированная рекурсия item.canned_spam.name=Консервы “Спам” -item.canned_spam.desc=Действие трехминутного скетча разворачивается в вымышленном кафе$"Зеленый Карлик" в Бромли. Разгорается спор между официанткой, читающей$меню, в котором почти каждое блюдо содержит спам, и миссис Бун, которая$не любит спам. Она заказывает блюдо без спама, что вызывает удивление$у её мужа, обожающего спам. Официантка с раздражением отвечает на этот$заказ. Мистер Бун предлагает забрать ее спам и заказывает блюдо с большим$количеством спама и запеченной фасолью. Официантка отвечает "нет", так как$фасоль закончилась; когда мистер Бун спрашивает о замене спама, официантка$снова реагирует с отвращением. В какой-то момент группа викингов в ресторане$перебивает разговор громким пением о спаме. Разъяренная официантка приказывает$им замолчать, но они продолжают петь еще громче. Венгерский турист подходит к$стойке, пытаясь сделать заказ с помощью абсолютно неточного венгерско-английского$разговорника (отсылка к предыдущему скетчу). Его быстро выводит полицейский.$Скетч резко переходит к историку в теле-студии, который рассказывает о$происхождении викингов в кафе. По мере того как он продолжает, он все чаще$вставляет слово "спам" в каждое предложение, а кулиса на заднем фоне$поднимается, открывая декорации ресторана. Историк присоединяется к$викингам в их песне, а мистера и миссис Бун поднимают с помощью тросов$и уводят из кадра, пока пение продолжается. В оригинальной телевизионной$версии финальные титры начинают прокручиваться, пока на фоне всё ещё$слышно пение. +item.canned_spam.desc=Действие трехминутного скетча разворачивается в вымышленном кафе$"зелёный Карлик" в Бромли. Разгорается спор между официанткой, читающей$меню, в котором почти каждое блюдо содержит спам, и миссис Бун, которая$не любит спам. Она заказывает блюдо без спама, что вызывает удивление$у её мужа, обожающего спам. Официантка с раздражением отвечает на этот$заказ. Мистер Бун предлагает забрать ее спам и заказывает блюдо с большим$количеством спама и запеченной фасолью. Официантка отвечает "нет", так как$фасоль закончилась; когда мистер Бун спрашивает о замене спама, официантка$снова реагирует с отвращением. В какой-то момент группа викингов в ресторане$перебивает разговор громким пением о спаме. Разъяренная официантка приказывает$им замолчать, но они продолжают петь ещё громче. Венгерский турист подходит к$стойке, пытаясь сделать заказ с помощью абсолютно неточного венгерско-английского$разговорника (отсылка к предыдущему скетчу). Его быстро выводит полицейский.$Скетч резко переходит к историку в теле-студии, который рассказывает о$происхождении викингов в кафе. По мере того как он продолжает, он все чаще$вставляет слово "спам" в каждое предложение, а кулиса на заднем фоне$поднимается, открывая декорации ресторана. Историк присоединяется к$викингам в их песне, а мистера и миссис Бун поднимают с помощью тросов$и уводят из кадра, пока пение продолжается. В оригинальной телевизионной$версии финальные титры начинают прокручиваться, пока на фоне всё ещё$слышно пение. item.canned_stew.name=Консервы "Тушеные грибы" item.canned_stew.desc=... item.canned_tomato.name=Консервированный томатный суп @@ -3000,7 +3000,7 @@ item.gas_petroleum.name=Баллон с попутным газом item.gas_tester.name=Газовый датчик item.gear_large.name=Большая шестерня item.gear_large_steel.name=Большая стальная шестерня -item.geiger_counter.name=Ручной счетчик Гейгера +item.geiger_counter.name=Ручной счётчик Гейгера item.gem_alexandrite.name=Александрит item.gem_rad.name=Радиоактивный самоцвет item.gem_sodalite.name=Содалит @@ -3138,7 +3138,7 @@ item.gun_hp_ammo.name=Чернильный картридж item.gun_immolator.name=Иммолятор item.gun_immolator_ammo.name=Топливо Иммолатора item.gun_jack.name=Джекхаммер -item.gun_jack_ammo.name=Снаряд для четырехствольного дробовика +item.gun_jack_ammo.name=Снаряд для четырёхствольного дробовика item.gun_karl.name=Карл item.gun_kit_1.name=Ружейное масло item.gun_kit_2.name=Комплект для ремонта оружия @@ -3286,7 +3286,7 @@ item.icf_pellet.name=Топливная пеллета ICF item.icf_pellet_depleted.name=Обедненная топливная пеллета ICF item.icf_pellet_empty.name=Пустая топливная пеллета ICF item.igniter.name=Зажигатель -item.igniter.desc=(Щёлкните правой кнопкой мыши по Прототипу)$Это зеленая металлическая ручка с $ярко-красной кнопкой и маленькой крышкой.$Внизу выгравированы инициалы N.E.$. Кем бы ни был N.E., у него был отличный вкус в оттенках зеленого. +item.igniter.desc=(Щёлкните правой кнопкой мыши по Прототипу)$Это зелёная металлическая ручка с $ярко-красной кнопкой и маленькой крышкой.$Внизу выгравированы инициалы N.E.$. Кем бы ни был N.E., у него был отличный вкус в оттенках зелёного. item.industrial_magnet.name=Промышленный магнит item.inf_antimatter.name=Infinite Antimatter Tank item.inf_antischrabidium.name=Infinite Antischrabidium Tank @@ -3343,12 +3343,12 @@ item.ingot_gh336.name=Слиток гиорсия-336 item.ingot_gh336.desc=Коллега Сиборгиума. item.ingot_graphite.name=Графитовый слиток item.ingot_gunmetal.name=Слиток пушечной бронзы -item.ingot_hes.name=Высокообогащенный слиток шрабидиевого топлива +item.ingot_hes.name=Высокообогащённый слиток шрабидиевого топлива item.ingot_lanthanium.name=Полустабильный слиток лантана item.ingot_lanthanium.desc='Лантанум' item.ingot_lanthanium.desc.P11=Вообще лантанум, но ладно. item.ingot_lead.name=Свинцовый слиток -item.ingot_les.name=Слиток низкообогащенного шрабидиевого топлива +item.ingot_les.name=Слиток низкообогащённого шрабидиевого топлива item.ingot_magnetized_tungsten.name=Слиток намагниченного вольфрама item.ingot_metal.name=Металлический слиток item.ingot_metal.bar.name=Металлический кусок @@ -3775,9 +3775,9 @@ item.nugget_euphemium.name=Эвфемиевый самородок item.nugget_euphemium.desc=Маленький кусочек розового металла.$Его свойства до сих пор неизвестны,$ОБРАЩАЙТЕСЬ С НИМ осторожно. item.nugget_gh336.name=Самородок гиорсия-336 item.nugget_gh336.desc=Коллега Сиборгиума. -item.nugget_hes.name=Высокообогащенный самородок шрабидиевого топлива +item.nugget_hes.name=Высокообогащённый самородок шрабидиевого топлива item.nugget_lead.name=Свинцовый самородок -item.nugget_les.name=Низкообогащенный самородок шрабидиевого топлива +item.nugget_les.name=Низкообогащённый самородок шрабидиевого топлива item.nugget_mercury_tiny.name=Маленькая капля ртути item.nugget_mercury.name=Капля ртути item.nugget_mox_fuel.name=Самородок МОКС топлива @@ -3960,11 +3960,11 @@ item.pellet_coolant.name=Охлаждающий кластер item.pellet_flechette.name=Флешетты item.pellet_gas.name=Ядовитый газовый баллон item.pellet_gas.desc=Используется в многоцелевых бомбах:$*кхе-кхе* Астанавитесь пжлст! -item.pellet_hes.name=Высокообогащенная шрабидиевая Ватцз-пеллета +item.pellet_hes.name=Высокообогащённая шрабидиевая Ватцз-пеллета item.pellet_lead.name=Свинцовая пеллета -item.pellet_les.name=Низкообогащенная шрабидиевая Ватцз-пеллета +item.pellet_les.name=Низкообогащённая шрабидиевая Ватцз-пеллета item.pellet_mercury.name=Ртутные гранулы -item.pellet_mes.name=Среднеобогащенная шрабидиевая Ватцз-пеллета +item.pellet_mes.name=Среднеобогащённая шрабидиевая Ватцз-пеллета item.pellet_meteorite.name=Метеоритные гранулы item.pellet_neptunium.name=Нептуниевая Ватцз-пеллета item.pellet_rtg.name=РИТЭГ-пеллета из плутония-238 @@ -4052,11 +4052,11 @@ item.plate_dura_steel.name=Пластина высокоскоростной с item.plate_euphemium.name=Составная пластина из эвфемия item.plate_fuel_mox.name=МОКС-топливная пластина item.plate_fuel_pu238be.name=Плутоний-238-Бериллевая топливная пластина -item.plate_fuel_pu239.name=Высокообогащенная плутониевая-239 топливная пластина +item.plate_fuel_pu239.name=Высокообогащённая плутониевая-239 топливная пластина item.plate_fuel_ra226be.name=Радий-226-Бериллевая топливная пластина -item.plate_fuel_sa326.name=Высокообогащенная шрабидий-326 топливная пластина -item.plate_fuel_u233.name=Высокообогащенная уран-233 топливная пластина -item.plate_fuel_u235.name=Высокообогащенная уран-235 топливная пластина +item.plate_fuel_sa326.name=Высокообогащённая шрабидий-326 топливная пластина +item.plate_fuel_u233.name=Высокообогащённая уран-233 топливная пластина +item.plate_fuel_u235.name=Высокообогащённая уран-235 топливная пластина item.plate_gold.name=Золотая пластина item.plate_gunmetal.name=Пластина пушечной бронзы item.plate_iron.name=Железная пластина @@ -4212,48 +4212,48 @@ item.prototype_kit.name=Комплект Прототипа item.pudding.name=Пудинг item.pwr_fuel.bfb_am_mix.name=Стержень ВВЭР ЦБР с реакторным америцием item.pwr_fuel.bfb_pu241.name=Стержень ВВЭР ЦБР с плутонием-241 -item.pwr_fuel.hea242.name=Топливный стержень ВВЭР с высокообогащенным америцием-242 -item.pwr_fuel.hen237.name=Топливный стержень ВВЭР с высокообогащенным нептунием-237 -item.pwr_fuel.hep239.name=Топливный стержень ВВЭР с высокообогащенным плутонием-239 -item.pwr_fuel.hep241.name=Топливный стержень ВВЭР с высокообогащенным плутонием-241 -item.pwr_fuel.hes326.name=Топливный стержень ВВЭР с высокообогащенным шрабидием-326 -item.pwr_fuel.hes327.name=Топливный стержень ВВЭР с высокообогащенным шрабидием-327 -item.pwr_fuel.heu233.name=Топливный стержень ВВЭР с высокообогащенным ураном-233 -item.pwr_fuel.heu235.name=Топливный стержень ВВЭР с высокообогащенным ураном-235 -item.pwr_fuel.mea.name=Топливный стержень ВВЭР со среднеобогащенным америцием -item.pwr_fuel.men.name=Топливный стержень ВВЭР со среднеобогащенным нептунием -item.pwr_fuel.mep.name=Топливный стержень ВВЭР со среднеобогащенным плутонием -item.pwr_fuel.meu.name=Топливный стержень ВВЭР со среднеобогащенным ураном +item.pwr_fuel.hea242.name=Топливный стержень ВВЭР с высокообогащённым америцием-242 +item.pwr_fuel.hen237.name=Топливный стержень ВВЭР с высокообогащённым нептунием-237 +item.pwr_fuel.hep239.name=Топливный стержень ВВЭР с высокообогащённым плутонием-239 +item.pwr_fuel.hep241.name=Топливный стержень ВВЭР с высокообогащённым плутонием-241 +item.pwr_fuel.hes326.name=Топливный стержень ВВЭР с высокообогащённым шрабидием-326 +item.pwr_fuel.hes327.name=Топливный стержень ВВЭР с высокообогащённым шрабидием-327 +item.pwr_fuel.heu233.name=Топливный стержень ВВЭР с высокообогащённым ураном-233 +item.pwr_fuel.heu235.name=Топливный стержень ВВЭР с высокообогащённым ураном-235 +item.pwr_fuel.mea.name=Топливный стержень ВВЭР со среднеобогащённым америцием +item.pwr_fuel.men.name=Топливный стержень ВВЭР со среднеобогащённым нептунием +item.pwr_fuel.mep.name=Топливный стержень ВВЭР со среднеобогащённым плутонием +item.pwr_fuel.meu.name=Топливный стержень ВВЭР со среднеобогащённым ураном item.pwr_fuel.mox.name=Топливный стержень ВВЭР с МОКС-топливом item.pwr_fuel_depleted.bfb_am_mix.name=Обедненный стержень ВВЭР ЦБР с реакторным америцием item.pwr_fuel_depleted.bfb_pu241.name=Обедненный стержень ВВЭР ЦБР с плутонием-241 -item.pwr_fuel_depleted.hea242.name=Обедненный топливный стержень ВВЭР с высокообогащенным америцием-242 -item.pwr_fuel_depleted.hen237.name=Обедненный топливный стержень ВВЭР с высокообогащенным нептунием-237 -item.pwr_fuel_depleted.hep239.name=Обедненный топливный стержень ВВЭР с высокообогащенным плутонием-239 -item.pwr_fuel_depleted.hep241.name=Обедненный топливный стержень ВВЭР с высокообогащенным плутонием-241 -item.pwr_fuel_depleted.hes326.name=Обедненный топливный стержень ВВЭР с высокообогащенным шрабидием-326 -item.pwr_fuel_depleted.hes327.name=Обедненный топливный стержень ВВЭР с высокообогащенным шрабидием-327 -item.pwr_fuel_depleted.heu233.name=Обедненный топливный стержень ВВЭР с высокообогащенным ураном-233 -item.pwr_fuel_depleted.heu235.name=Обедненный топливный стержень ВВЭР с высокообогащенным ураном-235 -item.pwr_fuel_depleted.mea.name=Обедненный топливный стержень ВВЭР со среднеобогащенным америцием -item.pwr_fuel_depleted.men.name=Обедненный топливный стержень ВВЭР со среднеобогащенным нептунием -item.pwr_fuel_depleted.mep.name=Обедненный топливный стержень ВВЭР со среднеобогащенным плутонием -item.pwr_fuel_depleted.meu.name=Обедненный топливный стержень ВВЭР со среднеобогащенным ураном +item.pwr_fuel_depleted.hea242.name=Обедненный топливный стержень ВВЭР с высокообогащённым америцием-242 +item.pwr_fuel_depleted.hen237.name=Обедненный топливный стержень ВВЭР с высокообогащённым нептунием-237 +item.pwr_fuel_depleted.hep239.name=Обедненный топливный стержень ВВЭР с высокообогащённым плутонием-239 +item.pwr_fuel_depleted.hep241.name=Обедненный топливный стержень ВВЭР с высокообогащённым плутонием-241 +item.pwr_fuel_depleted.hes326.name=Обедненный топливный стержень ВВЭР с высокообогащённым шрабидием-326 +item.pwr_fuel_depleted.hes327.name=Обедненный топливный стержень ВВЭР с высокообогащённым шрабидием-327 +item.pwr_fuel_depleted.heu233.name=Обедненный топливный стержень ВВЭР с высокообогащённым ураном-233 +item.pwr_fuel_depleted.heu235.name=Обедненный топливный стержень ВВЭР с высокообогащённым ураном-235 +item.pwr_fuel_depleted.mea.name=Обедненный топливный стержень ВВЭР со среднеобогащённым америцием +item.pwr_fuel_depleted.men.name=Обедненный топливный стержень ВВЭР со среднеобогащённым нептунием +item.pwr_fuel_depleted.mep.name=Обедненный топливный стержень ВВЭР со среднеобогащённым плутонием +item.pwr_fuel_depleted.meu.name=Обедненный топливный стержень ВВЭР со среднеобогащённым ураном item.pwr_fuel_depleted.mox.name=Обедненный топливный стержень ВВЭР с МОКС-топливом item.pwr_fuel_hot.bfb_am_mix.name=Горячий стержень ВВЭР ЦБР с реакторным америцием item.pwr_fuel_hot.bfb_pu241.name=Горячий стержень ВВЭР ЦБР с плутонием-241 -item.pwr_fuel_hot.hea242.name=Горячий стержень ВВЭР с высокообогащенным америцием-242 -item.pwr_fuel_hot.hen237.name=Горячий стержень ВВЭР с высокообогащенным нептунием-237 -item.pwr_fuel_hot.hep239.name=Горячий стержень ВВЭР с высокообогащенным плутонием-239 -item.pwr_fuel_hot.hep241.name=Горячий стержень ВВЭР с высокообогащенным плутонием-241 -item.pwr_fuel_hot.hes326.name=Горячий стержень ВВЭР с высокообогащенным шрабидием-326 -item.pwr_fuel_hot.hes327.name=Горячий стержень ВВЭР с высокообогащенным шрабидием-327 -item.pwr_fuel_hot.heu233.name=Горячий стержень ВВЭР с высокообогащенным ураном-233 -item.pwr_fuel_hot.heu235.name=Горячий стержень ВВЭР с высокообогащенным ураном-235 -item.pwr_fuel_hot.mea.name=Горячий стержень ВВЭР со среднеобогащенным америцием -item.pwr_fuel_hot.men.name=Горячий стержень ВВЭР со среднеобогащенным нептунием -item.pwr_fuel_hot.mep.name=Горячий стержень ВВЭР со среднеобогащенным плутонием -item.pwr_fuel_hot.meu.name=Горячий стержень ВВЭР со среднеобогащенным ураном +item.pwr_fuel_hot.hea242.name=Горячий стержень ВВЭР с высокообогащённым америцием-242 +item.pwr_fuel_hot.hen237.name=Горячий стержень ВВЭР с высокообогащённым нептунием-237 +item.pwr_fuel_hot.hep239.name=Горячий стержень ВВЭР с высокообогащённым плутонием-239 +item.pwr_fuel_hot.hep241.name=Горячий стержень ВВЭР с высокообогащённым плутонием-241 +item.pwr_fuel_hot.hes326.name=Горячий стержень ВВЭР с высокообогащённым шрабидием-326 +item.pwr_fuel_hot.hes327.name=Горячий стержень ВВЭР с высокообогащённым шрабидием-327 +item.pwr_fuel_hot.heu233.name=Горячий стержень ВВЭР с высокообогащённым ураном-233 +item.pwr_fuel_hot.heu235.name=Горячий стержень ВВЭР с высокообогащённым ураном-235 +item.pwr_fuel_hot.mea.name=Горячий стержень ВВЭР со среднеобогащённым америцием +item.pwr_fuel_hot.men.name=Горячий стержень ВВЭР со среднеобогащённым нептунием +item.pwr_fuel_hot.mep.name=Горячий стержень ВВЭР со среднеобогащённым плутонием +item.pwr_fuel_hot.meu.name=Горячий стержень ВВЭР со среднеобогащённым ураном item.pwr_fuel_hot.mox.name=Горячий стержень ВВЭР с МОКС-топливом item.quartz_plutonium.name=Плутонический кварц item.radar_linker.name=Радарный соединитель @@ -4271,30 +4271,30 @@ item.rbmk_fuel_balefire_gold.name=Флэшголд-топливный стерж item.rbmk_fuel_drx.name=§cДигамма топливный стержень РБМК§r item.rbmk_fuel_empty.name=Пустой топливный стержень РБМК item.rbmk_fuel_flashlead.name=Флэшлид-топливный стержень РБМК -item.rbmk_fuel_hea241.name=Высокообогащенный америциевый-241 топливный стержень РБМК -item.rbmk_fuel_hea242.name=Высокообогащенный америциевый-242 топливный стержень РБМК -item.rbmk_fuel_heaus.name=Высокообогащенный австралиевый топливный стержень РБМК -item.rbmk_fuel_hen.name=Высокообогащенный нептуниевый топливный стержень РБМК -item.rbmk_fuel_hes.name=Высокообогащенный шрабидиевый топливный стержень РБМК -item.rbmk_fuel_hep.name=Высокообогащенный плутониевый-239 топливный стержень РБМК -item.rbmk_fuel_hep241.name=Высокообогащенный плутониевый-241 топливный стержень РБМК -item.rbmk_fuel_heu233.name=Высокообогащенный урановый-233 топливный стержень РБМК -item.rbmk_fuel_heu235.name=Высокообогащенный урановый-235 топливный стержень РБМК -item.rbmk_fuel_lea.name=Низкообогащенный америциевый топливный стержень РБМК -item.rbmk_fuel_leaus.name=Низкообогащенный австралиевый топливный стержень РБМК -item.rbmk_fuel_lep.name=Низкообогащенный плутониевый-239 топливный стержень РБМК -item.rbmk_fuel_les.name=Низкообогащенный шрабидиевый топливный стержень РБМК -item.rbmk_fuel_mea.name=Среднеобогащенный америциевый топливный стержень РБМК -item.rbmk_fuel_men.name=Среднеобогащенный нептуниевый топливный стержень РБМК -item.rbmk_fuel_mep.name=Среднеобогащенный плутониевый-239 топливный стержень РБМК -item.rbmk_fuel_mes.name=Среднеобогащенный шрабидиевый топливный стержень РБМК -item.rbmk_fuel_meu.name=Среднеобогащенный урановый топливный стержень РБМК +item.rbmk_fuel_hea241.name=Высокообогащённый америциевый-241 топливный стержень РБМК +item.rbmk_fuel_hea242.name=Высокообогащённый америциевый-242 топливный стержень РБМК +item.rbmk_fuel_heaus.name=Высокообогащённый австралиевый топливный стержень РБМК +item.rbmk_fuel_hen.name=Высокообогащённый нептуниевый топливный стержень РБМК +item.rbmk_fuel_hes.name=Высокообогащённый шрабидиевый топливный стержень РБМК +item.rbmk_fuel_hep.name=Высокообогащённый плутониевый-239 топливный стержень РБМК +item.rbmk_fuel_hep241.name=Высокообогащённый плутониевый-241 топливный стержень РБМК +item.rbmk_fuel_heu233.name=Высокообогащённый урановый-233 топливный стержень РБМК +item.rbmk_fuel_heu235.name=Высокообогащённый урановый-235 топливный стержень РБМК +item.rbmk_fuel_lea.name=Низкообогащённый америциевый топливный стержень РБМК +item.rbmk_fuel_leaus.name=Низкообогащённый австралиевый топливный стержень РБМК +item.rbmk_fuel_lep.name=Низкообогащённый плутониевый-239 топливный стержень РБМК +item.rbmk_fuel_les.name=Низкообогащённый шрабидиевый топливный стержень РБМК +item.rbmk_fuel_mea.name=Среднеобогащённый америциевый топливный стержень РБМК +item.rbmk_fuel_men.name=Среднеобогащённый нептуниевый топливный стержень РБМК +item.rbmk_fuel_mep.name=Среднеобогащённый плутониевый-239 топливный стержень РБМК +item.rbmk_fuel_mes.name=Среднеобогащённый шрабидиевый топливный стержень РБМК +item.rbmk_fuel_meu.name=Среднеобогащённый урановый топливный стержень РБМК item.rbmk_fuel_mox.name=МОКС-топливный стержень РБМК item.rbmk_fuel_po210be.name=Полоний-210-Бериллевый источник нейтронов РБМК item.rbmk_fuel_pu238be.name=Плутоний-238-Бериллевый источник нейтронов РБМК item.rbmk_fuel_ra226be.name=Радий-226-Бериллевый источник нейтронов РБМК item.rbmk_fuel_thmeu.name=Ториево-урановый среднеобогащённый топливный стержень РБМК -item.rbmk_fuel_ueu.name=Необогащенный урановый топливный стержень РБМК +item.rbmk_fuel_ueu.name=Необогащённый урановый топливный стержень РБМК item.rbmk_fuel_zfb_am_mix.name=Америций реакторного качества ЦТС стержень РБМК item.rbmk_fuel_zfb_bismuth.name=Висмутовый ЦТС стержень РБМК item.rbmk_fuel_zfb_pu241.name=Плутоний-241 ЦТС стержень РБМК @@ -4304,30 +4304,30 @@ item.rbmk_pellet_balefire.name=Жар-топливная пеллета item.rbmk_pellet_balefire_gold.name=Флэшголд-топливная пеллета item.rbmk_pellet_drx.name=§cДигамма топливная пеллета§r item.rbmk_pellet_flashlead.name=Флэшлид-топливная пеллета -item.rbmk_pellet_hea241.name=Высокообогащенная америциевая-241 топливная пеллета -item.rbmk_pellet_hea242.name=Высокообогащенная америциевая-242 топливная пеллета -item.rbmk_pellet_heaus.name=Высокообогащенная австралиевая топливная пеллета -item.rbmk_pellet_hen.name=Высокообогащенная нептуниевая топливная пеллета -item.rbmk_pellet_hep239.name=Высокообогащенная плутониевая-239 топливная пеллета -item.rbmk_pellet_hep241.name=Высокообогащенная плутониевая-241 топливная пеллета -item.rbmk_pellet_heu233.name=Высокообогащенная урановая-233 топливная пеллета -item.rbmk_pellet_heu235.name=Высокообогащенная урановая-235 топливная пеллета -item.rbmk_pellet_hes.name=Высокообогащенная шрабидиевая топливная пеллета -item.rbmk_pellet_lea.name=Низкообогащенная америциевая топливная пеллета -item.rbmk_pellet_leaus.name=Низкообогащенная австралиевая топливная пеллета -item.rbmk_pellet_lep.name=Низкообогащенная плутониевая топливная пеллета -item.rbmk_pellet_les.name=Низкообогащенная шрабидиевая топливная пеллета -item.rbmk_pellet_mea.name=Среднеобогащенная америциевая топливная пеллета -item.rbmk_pellet_men.name=Среднеобогащенная нептуниевая топливная пеллета -item.rbmk_pellet_mep.name=Среднеобогащенная плутониевая топливная пеллета -item.rbmk_pellet_mes.name=Среднеобогащенная шрабидиевая топливная пеллета -item.rbmk_pellet_meu.name=Среднеобогащенная урановая топливная пеллета +item.rbmk_pellet_hea241.name=Высокообогащённая америциевая-241 топливная пеллета +item.rbmk_pellet_hea242.name=Высокообогащённая америциевая-242 топливная пеллета +item.rbmk_pellet_heaus.name=Высокообогащённая австралиевая топливная пеллета +item.rbmk_pellet_hen.name=Высокообогащённая нептуниевая топливная пеллета +item.rbmk_pellet_hep239.name=Высокообогащённая плутониевая-239 топливная пеллета +item.rbmk_pellet_hep241.name=Высокообогащённая плутониевая-241 топливная пеллета +item.rbmk_pellet_heu233.name=Высокообогащённая урановая-233 топливная пеллета +item.rbmk_pellet_heu235.name=Высокообогащённая урановая-235 топливная пеллета +item.rbmk_pellet_hes.name=Высокообогащённая шрабидиевая топливная пеллета +item.rbmk_pellet_lea.name=Низкообогащённая америциевая топливная пеллета +item.rbmk_pellet_leaus.name=Низкообогащённая австралиевая топливная пеллета +item.rbmk_pellet_lep.name=Низкообогащённая плутониевая топливная пеллета +item.rbmk_pellet_les.name=Низкообогащённая шрабидиевая топливная пеллета +item.rbmk_pellet_mea.name=Среднеобогащённая америциевая топливная пеллета +item.rbmk_pellet_men.name=Среднеобогащённая нептуниевая топливная пеллета +item.rbmk_pellet_mep.name=Среднеобогащённая плутониевая топливная пеллета +item.rbmk_pellet_mes.name=Среднеобогащённая шрабидиевая топливная пеллета +item.rbmk_pellet_meu.name=Среднеобогащённая урановая топливная пеллета item.rbmk_pellet_mox.name=МОКС топливная пеллета item.rbmk_pellet_po210be.name=Полоний-210-Бериллиевая пеллета item.rbmk_pellet_pu238be.name=Плутоний-238-Бериллиевая пеллета item.rbmk_pellet_ra226be.name=Радий-226-Бериллевая пеллета item.rbmk_pellet_thmeu.name=Торий-урановая топливная пеллета -item.rbmk_pellet_ueu.name=Необогащенная урановая топливная пеллета +item.rbmk_pellet_ueu.name=Необогащённая урановая топливная пеллета item.rbmk_pellet_zfb_am_mix.name=ЦТС пеллета америция реакторного качества item.rbmk_pellet_zfb_bismuth.name=Висмутовая ЦТС пеллета item.rbmk_pellet_zfb_pu241.name=Плутоний-241 ЦТС пеллета @@ -4511,7 +4511,7 @@ item.rod_waste.name=Стержень с ядерными отходами item.rod_water.name=Стержень с водой item.rod_weidanium.name=Weidanium Rod item.rod_zirnox_empty.name=Пустой стержень Цирнокс -item.rod_zirnox_natural_uranium_fuel.name=Необогащенный урановый топливный стержень Цирнокс +item.rod_zirnox_natural_uranium_fuel.name=Необогащённый урановый топливный стержень Цирнокс item.rod_zirnox_uranium_fuel.name=Урановый топливный стержень Цирнокс item.rod_zirnox_th232.name=Торий-232 стержень Цирнокс item.rod_zirnox_thorium_fuel.name=Ториевый топливный стержень Цирнокс @@ -4519,7 +4519,7 @@ item.rod_zirnox_mox_fuel.name=МОКС-топливный стержень Ци item.rod_zirnox_plutonium_fuel.name=Плутониевый топливный стержень Цирнокс item.rod_zirnox_u233_fuel.name=Уран-233 топливный стержень Цирнокс item.rod_zirnox_u235_fuel.name=Уран-235 топливный стержень Цирнокс -item.rod_zirnox_les_fuel.name=Низкообогащенный шрабидиевый топливный стержень Цирнокс +item.rod_zirnox_les_fuel.name=Низкообогащённый шрабидиевый топливный стержень Цирнокс item.rod_zirnox_lithium.name=Литиевый стержень Цирнокс item.rod_zirnox_tritium.name=Тритиевый стержень Цирнокс item.rod_zirnox_zfb_mox.name=ЦТС МОКС-топливный стержень Цирнокс @@ -4530,7 +4530,7 @@ item.rod_zirnox_mox_fuel_depleted.name=Обеднённый МОКС-топли item.rod_zirnox_plutonium_fuel_depleted.name=Обеднённый плутониевый топливный стержень Цирнокс item.rod_zirnox_u233_fuel_depleted.name=Обеднённый уран-233 топливный стержень Цирнокс item.rod_zirnox_u235_fuel_depleted.name=Обеднённый уран-235 топливный стержень Цирнокс -item.rod_zirnox_les_fuel_depleted.name=Обеднённый низкообогащенный шрабидиевый топливный стержень Цирнокс +item.rod_zirnox_les_fuel_depleted.name=Обеднённый низкообогащённый шрабидиевый топливный стержень Цирнокс item.rod_zirnox_zfb_mox_depleted.name=Обеднённый ЦТС МОКС-топливный стержень Цирнокс item.rotor_steel.name=Большой стальной ротор item.rpa_boots.name=Ботинки силовой брони Оставшихся @@ -4858,11 +4858,11 @@ item.waste_mox.name=Обедненное МОКС-топливо item.waste_natural_uranium.name=Обедненное природное урановое топливо item.waste_plate_mox.name=Обеднённая МОКС-топливная пластина item.waste_plate_pu238be.name=Обеднённая плутоний-238-бериллевая топливная пластина -item.waste_plate_pu239.name=Обеднённая высокообогащенная плутониевая-239 топливная пластина +item.waste_plate_pu239.name=Обеднённая высокообогащённая плутониевая-239 топливная пластина item.waste_plate_ra226be.name=Обеднённая радий-226-бериллевая топливная пластина -item.waste_plate_sa326.name=Обеднённая высокообогащенная шрабидий-326 топливная пластина -item.waste_plate_u233.name=Обеднённая высокообогащенная уран-233 топливная пластина -item.waste_plate_u235.name=Обеднённая высокообогащенная уран-235 топливная пластина +item.waste_plate_sa326.name=Обеднённая высокообогащённая шрабидий-326 топливная пластина +item.waste_plate_u233.name=Обеднённая высокообогащённая уран-233 топливная пластина +item.waste_plate_u235.name=Обеднённая высокообогащённая уран-235 топливная пластина item.waste_plutonium.name=Обедненное плутониевое топливо item.waste_schrabidium.name=Обедненное шрабидиевое топливо item.waste_thorium.name=Обедненное ториевое топливо @@ -4874,27 +4874,27 @@ item.watch.name=Сломанные карманные часы item.watch.desc=Маленькие синие карманные часы.$На стекле есть несколько трещин,$и несколько осколков отсутствуют.$Перестали тикать в 2:34. item.watz_pellet.boron.name=Поглощающая Ватцз-пеллета из бора item.watz_pellet.du.name=Поглощающая Ватцз-пеллета из обедненного урана -item.watz_pellet.hes.name=Ватцз-пеллета из высокообогащенного шрабидия +item.watz_pellet.hes.name=Ватцз-пеллета из высокообогащённого шрабидия item.watz_pellet.lead.name=Поглощающая Ватцз-пеллета из свинца -item.watz_pellet.les.name=Ватцз-пеллета из низкообогащенного шрабидия -item.watz_pellet.mes.name=Ватцз-пеллета из среднеобогащенного шрабидия -item.watz_pellet.mep.name=Ватцз-пеллета из среднеобогащенного плутония -item.watz_pellet.meu.name=Ватцз-пеллета из среднеобогащенного урана -item.watz_pellet.nqd.name=Ватцз-пеллета из обогащенного наквадаха +item.watz_pellet.les.name=Ватцз-пеллета из низкообогащённого шрабидия +item.watz_pellet.mes.name=Ватцз-пеллета из среднеобогащённого шрабидия +item.watz_pellet.mep.name=Ватцз-пеллета из среднеобогащённого плутония +item.watz_pellet.meu.name=Ватцз-пеллета из среднеобогащённого урана +item.watz_pellet.nqd.name=Ватцз-пеллета из обогащённого наквадаха item.watz_pellet.nqr.name=Ватцз-пеллета из наквадрии -item.watz_pellet.hen.name=Ватцз-пеллета из высокообогащенного нептуния +item.watz_pellet.hen.name=Ватцз-пеллета из высокообогащённого нептуния item.watz_pellet.schrabidium.name=Ватцз-пеллета из чистого шрабидия item.watz_pellet_depleted.boron.name=Поглощающая Ватцз-пеллета из бора (Обедненная) item.watz_pellet_depleted.du.name=Поглощающая Ватцз-пеллета из обедненного урана (Обедненная) -item.watz_pellet_depleted.hes.name=Ватцз-пеллета из высокообогащенного шрабидия (Обедненная) +item.watz_pellet_depleted.hes.name=Ватцз-пеллета из высокообогащённого шрабидия (Обедненная) item.watz_pellet_depleted.lead.name=Поглощающая Ватцз-пеллета из свинца (Обедненная) -item.watz_pellet_depleted.les.name=Ватцз-пеллета из низкообогащенного шрабидия (Обедненная) -item.watz_pellet_depleted.mes.name=Ватцз-пеллета из среднеобогащенного шрабидия (Обедненная) -item.watz_pellet_depleted.mep.name=Ватцз-пеллета из среднеобогащенного плутония (Обедненная) -item.watz_pellet_depleted.meu.name=Ватцз-пеллета из среднеобогащенного урана (Обедненная) -item.watz_pellet_depleted.nqd.name=Ватцз-пеллета из обогащенного наквадаха (Обедненная) +item.watz_pellet_depleted.les.name=Ватцз-пеллета из низкообогащённого шрабидия (Обедненная) +item.watz_pellet_depleted.mes.name=Ватцз-пеллета из среднеобогащённого шрабидия (Обедненная) +item.watz_pellet_depleted.mep.name=Ватцз-пеллета из среднеобогащённого плутония (Обедненная) +item.watz_pellet_depleted.meu.name=Ватцз-пеллета из среднеобогащённого урана (Обедненная) +item.watz_pellet_depleted.nqd.name=Ватцз-пеллета из обогащённого наквадаха (Обедненная) item.watz_pellet_depleted.nqr.name=Ватцз-пеллета из наквадрии (Обедненная) -item.watz_pellet_depleted.hen.name=Ватцз-пеллета из высокообогащенного нептуния (Обедненная) +item.watz_pellet_depleted.hen.name=Ватцз-пеллета из высокообогащённого нептуния (Обедненная) item.watz_pellet_depleted.schrabidium.name=Ватцз-пеллета из чистого шрабидия (Обедненная) item.weapon_bat.name=Любимица Ричарда item.weapon_bat_nail.name=Клише @@ -5647,7 +5647,7 @@ tile.gas_monoxide.name=Угарный газ tile.gas_radon.name=Радон tile.gas_radon_dense.name=Плотный радон tile.gas_radon_tomb.name=Могильный газ -tile.geiger.name=Счетчик Гейгера +tile.geiger.name=Счётчик Гейгера tile.glass_ash.name=Пепельное стекло tile.glass_boron.name=Борное стекло tile.glass_lead.name=Свинцовое стекло @@ -5778,7 +5778,7 @@ tile.machine_catalytic_reformer.name=Каталитический реформе tile.machine_centrifuge.name=Центрифуга tile.machine_chemfac.name=Химический завод (Legacy) tile.machine_chemical_factory.name=Химический завод -tile.machine_chemical_factory.desc=Четырехкратный химический завод.$Рецепты обрабатываются в два раза быстрее,$но требуют в два раза больше энергии.$Требует охлаждения водой,$производит пар низкого давления. +tile.machine_chemical_factory.desc=Четырёхкратный химический завод.$Рецепты обрабатываются в два раза быстрее,$но требуют в два раза больше энергии.$Требует охлаждения водой,$производит пар низкого давления. tile.machine_chemical_plant.name=Химическая установка tile.machine_chemplant.name=Химическая установка (Legacy) tile.machine_chungus.name=Паровая турбина "Левиафан" From 4d25b5dc8b10605e3cdd9da80a1f0c31549e7e56 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Wed, 30 Jul 2025 13:42:13 -0600 Subject: [PATCH 320/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 36f2179b9..e55dbacf2 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -258,7 +258,7 @@ book.rbmk.title13=Использование консоли book.rbmk.page13=Щелчок по частям приведет к их выбору и отмене выбора. С помощью цветных кнопок вы можете быстро выбрать все стержни управления этой цветовой группы. Кнопка "A" выберет все стержни управления, "X" отменит выбор всех. book.rbmk.page14=Ввод числа от 0 до 100 в зелёное поле, а затем нажатие кнопки рядом с ним приведет к установке всех выбранных стержней управления в это положение. Кнопка "АЗ-5" приведет к полной вставке всех стержней управления. book.rbmk.title15=Топливо -book.rbmk.page15=Реакция §lтоплива§r зависит от множества факторов. Основными из них являются §lобогащёние§r, §lксеноновое отравление§r и количество поступающих §lнейтронов§r. Ксенон накапливается, когда топливо получает мало нейтронов, и сгорает во время нормальной работы. Эффективность нейтронов зависит от типа, большинство видов топлива §lлучше всего расщепляются медленными нейтронами§r. +book.rbmk.page15=Реакция §lтоплива§r зависит от множества факторов. Основными из них являются §lобогащение§r, §lксеноновое отравление§r и количество поступающих §lнейтронов§r. Ксенон накапливается, когда топливо получает мало нейтронов, и сгорает во время нормальной работы. Эффективность нейтронов зависит от типа, большинство видов топлива §lлучше всего расщепляются медленными нейтронами§r. book.rbmk.title16=Расплавление book.rbmk.page16=§4§lИЗБЕГАЙТЕ. From b9332f2e81a7c18a553b55b064e0bf7c1e7e6d09 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Wed, 30 Jul 2025 13:42:46 -0600 Subject: [PATCH 321/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index e55dbacf2..e07ef9172 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -290,7 +290,7 @@ book.starter.page11=Под землей, по которой вы ходите, book.starter.title12=Радиация book.starter.page12a=§oОстальная часть этой книги будет посвящена вопросам, связанным с §oрадиацией. Для вашей безопасности и безопасности других людей я дам вам §oсоветы о том, как смягчить воздействие и справиться с ней. book.starter.page12b=Достаточное воздействие радиации может привести и приведет к телесным повреждениям. Первый шаг - это внешняя защита; обязательно ограничьте свое воздействие и наденьте защитное снаряжение, например §lЗащитный костюм§r, или прикрепить §lОбшивку§r к вашей одежде или броне; вы также можете принять §lРад-X§r чтобы ограничить получаемую дозу. Спасибо современной медицине, вторым шагом может быть удаление, если это необходимо; например, §l"Обеззараживатель §lигрока"§r будет медленно уменьшать излучение, поглощённое вашим телом. §lАнтирадин§r может быть использован как профилактика при облучении, быстро и эффективно устраняя повреждения, причиненные вашему организму ионизирующим излучением. -book.starter.title13=Обогащёние урана +book.starter.title13=Обогащение урана book.starter.page13=Существует несколько простых вариантов топлива для ядерного реактора; например, топливо из §lПриродного урана§r или §lТория§r. Однако, если вы ищете что-то более мощное, вы можете настроить каскад обогащёния из двух §lГазовых центрифуг§r для производства §lУранового топлива§r с остатками §lУрана-238§r. Для этого вам придется превратить природный уран в §lЙеллоукейк§r, а затем в §lГексафторид §lурана§r. book.starter.title14=Чикагская поленница book.starter.page14=В качестве альтернативы вы можете получить §lРеакторный плутоний§r, более мощное топливо, из природного урана, используя §lЧикагскую поленницу§r. Укладывая графитовые блоки и сверля их, вы можете вставить топливные стержни для размножения в плутоний и стержни источников нейтронов, такие как §lРадий-Бериллий§r, чтобы начать реакцию. Обязательно протестируйте свои конструкции; для предотвращения перегрева может потребоваться разделение или ограничение количества блоков. @@ -681,7 +681,7 @@ chem.SULFURIC_ACID=Производство серной кислоты chem.TATB=Синтез TATB chem.TEL=Смешивание тетраэтилсвинца chem.TEST=Тест -chem.THORIUM_SALT=Обогащёние ториевой соли +chem.THORIUM_SALT=Обогащение ториевой соли chem.TNT=Синтез ТНТ chem.UF6=Производство гексафторида урана chem.VIT_GAS=Остекловывание газообразных ядерных отходов @@ -1012,7 +1012,7 @@ death.sedna.physical.attacker=%1$s был пристрелен %2$s. desc.gui.assembler.warning=§cОшибка:§r Требуется шаблон сборочной машины! desc.gui.chemplant.warning=§cОшибка:§r Требуется шаблон химической машины! -desc.gui.gasCent.enrichment=§2Обогащёние§r$Для обогащёния урана требуются каскады.$Каскады с двумя центрифугами дадут$урановое топливо, каскады с четырьмя центрифугами$обеспечат полное разделение. +desc.gui.gasCent.enrichment=§2Обогащение§r$Для обогащёния урана требуются каскады.$Каскады с двумя центрифугами дадут$урановое топливо, каскады с четырьмя центрифугами$обеспечат полное разделение. desc.gui.gasCent.output=§6Перемещение жидкости§r$Жидкость может быть перемещена$через выходной порт для дальнейшей обработки. desc.gui.nukeBoy.desc=§1Требует:§r$ * Нейтронный щит$ * Снаряд U235$ * Субкритическая цель U235$ * Взрывчатка$ * Воспламенитель desc.gui.nukeGadget.desc=§1Требует:§r$ * 4 Набора взрывоопасных линз$ Первого поколения$ * Плутониевое ядро$ * Провода From e6c059041eaded03fc1d4442703a73acb1d5c0fb Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Wed, 30 Jul 2025 13:45:48 -0600 Subject: [PATCH 322/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index e07ef9172..b9ea4d953 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -291,7 +291,7 @@ book.starter.title12=Радиация book.starter.page12a=§oОстальная часть этой книги будет посвящена вопросам, связанным с §oрадиацией. Для вашей безопасности и безопасности других людей я дам вам §oсоветы о том, как смягчить воздействие и справиться с ней. book.starter.page12b=Достаточное воздействие радиации может привести и приведет к телесным повреждениям. Первый шаг - это внешняя защита; обязательно ограничьте свое воздействие и наденьте защитное снаряжение, например §lЗащитный костюм§r, или прикрепить §lОбшивку§r к вашей одежде или броне; вы также можете принять §lРад-X§r чтобы ограничить получаемую дозу. Спасибо современной медицине, вторым шагом может быть удаление, если это необходимо; например, §l"Обеззараживатель §lигрока"§r будет медленно уменьшать излучение, поглощённое вашим телом. §lАнтирадин§r может быть использован как профилактика при облучении, быстро и эффективно устраняя повреждения, причиненные вашему организму ионизирующим излучением. book.starter.title13=Обогащение урана -book.starter.page13=Существует несколько простых вариантов топлива для ядерного реактора; например, топливо из §lПриродного урана§r или §lТория§r. Однако, если вы ищете что-то более мощное, вы можете настроить каскад обогащёния из двух §lГазовых центрифуг§r для производства §lУранового топлива§r с остатками §lУрана-238§r. Для этого вам придется превратить природный уран в §lЙеллоукейк§r, а затем в §lГексафторид §lурана§r. +book.starter.page13=Существует несколько простых вариантов топлива для ядерного реактора; например, топливо из §lПриродного урана§r или §lТория§r. Однако, если вы ищете что-то более мощное, вы можете настроить каскад обогащения из двух §lГазовых центрифуг§r для производства §lУранового топлива§r с остатками §lУрана-238§r. Для этого вам придется превратить природный уран в §lЙеллоукейк§r, а затем в §lГексафторид §lурана§r. book.starter.title14=Чикагская поленница book.starter.page14=В качестве альтернативы вы можете получить §lРеакторный плутоний§r, более мощное топливо, из природного урана, используя §lЧикагскую поленницу§r. Укладывая графитовые блоки и сверля их, вы можете вставить топливные стержни для размножения в плутоний и стержни источников нейтронов, такие как §lРадий-Бериллий§r, чтобы начать реакцию. Обязательно протестируйте свои конструкции; для предотвращения перегрева может потребоваться разделение или ограничение количества блоков. book.starter.title15=ЦИРНОКС РГО @@ -1012,7 +1012,7 @@ death.sedna.physical.attacker=%1$s был пристрелен %2$s. desc.gui.assembler.warning=§cОшибка:§r Требуется шаблон сборочной машины! desc.gui.chemplant.warning=§cОшибка:§r Требуется шаблон химической машины! -desc.gui.gasCent.enrichment=§2Обогащение§r$Для обогащёния урана требуются каскады.$Каскады с двумя центрифугами дадут$урановое топливо, каскады с четырьмя центрифугами$обеспечат полное разделение. +desc.gui.gasCent.enrichment=§2Обогащение§r$Для обогащения урана требуются каскады.$Каскады с двумя центрифугами дадут$урановое топливо, каскады с четырьмя центрифугами$обеспечат полное разделение. desc.gui.gasCent.output=§6Перемещение жидкости§r$Жидкость может быть перемещена$через выходной порт для дальнейшей обработки. desc.gui.nukeBoy.desc=§1Требует:§r$ * Нейтронный щит$ * Снаряд U235$ * Субкритическая цель U235$ * Взрывчатка$ * Воспламенитель desc.gui.nukeGadget.desc=§1Требует:§r$ * 4 Набора взрывоопасных линз$ Первого поколения$ * Плутониевое ядро$ * Провода From 5b22da19c49ce414cede00c1e142407685bca8e2 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Wed, 30 Jul 2025 13:49:47 -0600 Subject: [PATCH 323/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index b9ea4d953..7a4c66d7e 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -266,7 +266,7 @@ book.starter.cover=Руководство промышленника$по вос book.starter.title1=Вступление book.starter.page1=Если вы читаете это, то весьма вероятно, что общество, так или иначе, полностью рухнуло. Правительства, страны и власть - это концепция прошлого, вместе со всеми удобствами цивилизованной жизни. Таким образом, это руководство расскажет вам,как изменить это, воссоздав индустрию и технологии прошлого для улучшения вашей собственной жизни. book.starter.title2=Уголь и горчичный газ -book.starter.page2=Хотя невозможно предсказать фактическое состояние мира в постапокалиптическое время, вполне вероятно, что война и промышленность в ее нынешнем виде, возможно, ещё не закончились. Чтобы защитить свои собственные лёгкие, эффективный и дешевый способ - помочиться на какую-нибудь тряпку, чтобы сделать §lтраншейную маску§r, чтобы защитить вас от угольной пыли или горчичного газа, если вы когда-нибудь столкнетесь с ними. +book.starter.page2=Хотя невозможно предсказать фактическое состояние мира в постапокалиптическое время, вполне вероятно, что война и промышленность в её нынешнем виде, возможно, ещё не закончились. Чтобы защитить свои собственные лёгкие, эффективный и дешевый способ - помочиться на какую-нибудь тряпку, чтобы сделать §lтраншейную маску§r, чтобы защитить вас от угольной пыли или горчичного газа, если вы когда-нибудь столкнетесь с ними. book.starter.title3=Наковальни и прессы book.starter.page3=Квинтэссенцией для начала вашего промышленного возрождения являются §lнаковальня§r и §lпресс§r. Наковальня позволит вам вручную создавать ранние механизмы, такие как сборочная машина, в то время как пресс позволит вам изготавливать пластины, провода и схемы, которые вы не можете сделать с помощью наковальни. book.starter.title4=Шаблоны @@ -420,7 +420,7 @@ book_lore.bf_bomb_3.name=Личные заметки book_lore.bf_bomb_3.author=М. Портер book_lore.bf_bomb_3.page.0=Мы с командой добились некоторых успехов. Особенно в плане работы с персоналом – игнорирование особо верующих людей сделало работу гораздо пристойней. Мы до сих пор не имеем ни малейшего представления о реальных свойствах жар-огня (сложно анализировать book_lore.bf_bomb_3.page.1=образец, тупо сжигающий твоё оборудование), но его взаимодействие с другими материалами дало нам пищу для размышлений. Примечательно, что они синтезировали "газообразную" форму: из всего персонала, именно Эндрю сообщил мне, что это был коллоид из микроскопических частиц жар-огня, взвешенных в некоем -book_lore.bf_bomb_3.page.2=инертном газе. Каждая частица окружена положительно заряженным 'пузырём' ионизированного газа, препятствующим ее осаждению. Кто бы мог подумать, что смертельное гамма-излучение может приносить пользу? Точно не я. $ Я предпочитаю не думать о том, что они превратили образец в +book_lore.bf_bomb_3.page.2=инертном газе. Каждая частица окружена положительно заряженным 'пузырём' ионизированного газа, препятствующим её осаждению. Кто бы мог подумать, что смертельное гамма-излучение может приносить пользу? Точно не я. $ Я предпочитаю не думать о том, что они превратили образец в book_lore.bf_bomb_3.page.3=дисперсную смесь, но я не могу недооценить удобство этого газообразного жар-пламени – экспериментировать с ним стало гораздо безопаснее. $ Говоря о безопасности, главный исследователь (в приступе бездумного пренебрежения) сделал открытие, которое чуть не стоило ему жизни. book_lore.bf_bomb_3.page.4=Он решил получить "грязнушку", позволив ячейке нашего нового коллоида напрямую взаимодействовать с какой-то очень дорогой антиматерией: в результате взрыва стол, на котором она стояла, превратился в кусок отбеленного радиацией шлака, прорезанный почти идеальной полусферой сквозь book_lore.bf_bomb_3.page.5=столешницу, также главный исследователь получил острую лучевую болезнь. Думаю, теперь мы знаем, как его взорвать, но, боже, некоторые люди... @@ -2448,7 +2448,7 @@ item.canned_pizza.desc=Преступление против человечес item.canned_recursion.name=Консервированная рекурсия item.canned_recursion.desc=Консервированная рекурсия item.canned_spam.name=Консервы “Спам” -item.canned_spam.desc=Действие трехминутного скетча разворачивается в вымышленном кафе$"зелёный Карлик" в Бромли. Разгорается спор между официанткой, читающей$меню, в котором почти каждое блюдо содержит спам, и миссис Бун, которая$не любит спам. Она заказывает блюдо без спама, что вызывает удивление$у её мужа, обожающего спам. Официантка с раздражением отвечает на этот$заказ. Мистер Бун предлагает забрать ее спам и заказывает блюдо с большим$количеством спама и запеченной фасолью. Официантка отвечает "нет", так как$фасоль закончилась; когда мистер Бун спрашивает о замене спама, официантка$снова реагирует с отвращением. В какой-то момент группа викингов в ресторане$перебивает разговор громким пением о спаме. Разъяренная официантка приказывает$им замолчать, но они продолжают петь ещё громче. Венгерский турист подходит к$стойке, пытаясь сделать заказ с помощью абсолютно неточного венгерско-английского$разговорника (отсылка к предыдущему скетчу). Его быстро выводит полицейский.$Скетч резко переходит к историку в теле-студии, который рассказывает о$происхождении викингов в кафе. По мере того как он продолжает, он все чаще$вставляет слово "спам" в каждое предложение, а кулиса на заднем фоне$поднимается, открывая декорации ресторана. Историк присоединяется к$викингам в их песне, а мистера и миссис Бун поднимают с помощью тросов$и уводят из кадра, пока пение продолжается. В оригинальной телевизионной$версии финальные титры начинают прокручиваться, пока на фоне всё ещё$слышно пение. +item.canned_spam.desc=Действие трёхминутного скетча разворачивается в вымышленном кафе$"Зелёный Карлик" в Бромли. Разгорается спор между официанткой, читающей$меню, в котором почти каждое блюдо содержит спам, и миссис Бун, которая$не любит спам. Она заказывает блюдо без спама, что вызывает удивление$у её мужа, обожающего спам. Официантка с раздражением отвечает на этот$заказ. Мистер Бун предлагает забрать её спам и заказывает блюдо с большим$количеством спама и запечённой фасолью. Официантка отвечает "нет", так как$фасоль закончилась; когда мистер Бун спрашивает о замене спама, официантка$снова реагирует с отвращением. В какой-то момент группа викингов в ресторане$перебивает разговор громким пением о спаме. Разъяренная официантка приказывает$им замолчать, но они продолжают петь ещё громче. Венгерский турист подходит к$стойке, пытаясь сделать заказ с помощью абсолютно неточного венгерско-английского$разговорника (отсылка к предыдущему скетчу). Его быстро выводит полицейский.$Скетч резко переходит к историку в теле-студии, который рассказывает о$происхождении викингов в кафе. По мере того как он продолжает, он всё чаще$вставляет слово "спам" в каждое предложение, а кулиса на заднем фоне$поднимается, открывая декорации ресторана. Историк присоединяется к$викингам в их песне, а мистера и миссис Бун поднимают с помощью тросов$и уводят из кадра, пока пение продолжается. В оригинальной телевизионной$версии финальные титры начинают прокручиваться, пока на фоне всё ещё$слышно пение. item.canned_stew.name=Консервы "Тушеные грибы" item.canned_stew.desc=... item.canned_tomato.name=Консервированный томатный суп From daae2a5e32dcd6e951fd9420ba484500352e9b37 Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 30 Jul 2025 22:40:28 +0200 Subject: [PATCH 324/491] exponsiv --- changelog | 5 +- .../java/com/hbm/crafting/WeaponRecipes.java | 2 +- .../java/com/hbm/inventory/RecipesCommon.java | 2 +- .../recipes/AssemblyMachineRecipes.java | 332 ++++++++++++++---- .../inventory/recipes/ShredderRecipes.java | 2 - .../inventory/recipes/anvil/AnvilRecipes.java | 48 +-- .../recipes/loader/GenericRecipe.java | 2 +- src/main/java/com/hbm/items/ItemEnums.java | 2 +- .../java/com/hbm/util/AchievementHandler.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../textures/items/item_expensive.circuit.png | Bin 0 -> 422 bytes .../items/item_expensive.computer.png | Bin 0 -> 289 bytes 13 files changed, 280 insertions(+), 121 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/item_expensive.circuit.png create mode 100644 src/main/resources/assets/hbm/textures/items/item_expensive.computer.png diff --git a/changelog b/changelog index 06cca47a8..a2b6a0de9 100644 --- a/changelog +++ b/changelog @@ -18,9 +18,12 @@ * Mining lasers now build up barricades in all directions and not just horizontal ones, preventing potential deadlocks due to liquid flowing in from above * One of the new secret parts for making a certain weapon is now obtainable again via red rooms * Biogas can now be cracked into aromatics and petroleum gas +* Custom missile part recipes have been added to the new assembler +* Mini nukes are now made from weapon steel instead of regular steel ## Fixed * Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit * As an extra safeguard, the recipe loader now throws an exception if that happens * Fixed dupe caused by the breeding reactor -* Fixed a potential crash caused by a change done to tile entity proxies in relation to EnergyControl \ No newline at end of file +* Fixed a potential crash caused by a change done to tile entity proxies in relation to EnergyControl +* Fixed the assembler achievement still using the old one \ No newline at end of file diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 238de0e25..8696b2599 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -207,7 +207,7 @@ public class WeaponRecipes { //Ammo assemblies - CraftingManager.addRecipeAuto(new ItemStack(ModItems.assembly_nuke, 1), new Object[] { " WP", "SEP", " WP", 'W', GOLD.wireFine(), 'P', STEEL.plate(), 'S', STEEL.shell(), 'E', ModItems.ball_tatb }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.assembly_nuke, 1), new Object[] { " WP", "SEP", " WP", 'W', GOLD.wireFine(), 'P', WEAPONSTEEL.plate(), 'S', WEAPONSTEEL.shell(), 'E', ModItems.ball_tatb }); //240mm Shells CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_shell, 4), new Object[] { " T ", "GHG", "CCC", 'T', ModBlocks.tnt, 'G', Items.gunpowder, 'H', STEEL.shell(), 'C', CU.ingot() }); diff --git a/src/main/java/com/hbm/inventory/RecipesCommon.java b/src/main/java/com/hbm/inventory/RecipesCommon.java index c2b9116a5..fd7ed9d36 100644 --- a/src/main/java/com/hbm/inventory/RecipesCommon.java +++ b/src/main/java/com/hbm/inventory/RecipesCommon.java @@ -98,9 +98,9 @@ public class RecipesCommon { public ItemStack extractForCyclingDisplay(int cycle) { List list = extractForNEI(); - cycle *= 50; + if(list.isEmpty()) return new ItemStack(ModItems.nothing); return list.get((int)(System.currentTimeMillis() % (cycle * list.size()) / cycle)); } } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index e38c4cf32..a99236b60 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -89,12 +89,18 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(TI.plate(), 4), new OreDictStack(STEEL.bolt(), 16))); this.register(new GenericRecipe("ass.exheavyframe").setup(600, 800).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME.ordinal())) .inputItems(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.STEEL_PLATING), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(CU.plateWelded(), 4), new OreDictStack(DESH.ingot(), 1), new OreDictStack(DURA.bolt(), 32))); + this.register(new GenericRecipe("ass.excircuit").setup(400, 4_000).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.CIRCUIT.ordinal())) + .inputItems(new ComparableStack(ModItems.circuit, 12, EnumCircuitType.BASIC), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CAPACITOR), new OreDictStack(GOLD.wireFine(), 32)) + .inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 1_000))); this.register(new GenericRecipe("ass.exleadplating").setup(400, 4_000).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.LEAD_PLATING.ordinal())) .inputItems(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.STEEL_PLATING), new OreDictStack(PB.plateCast(), 8), new OreDictStack(B.ingot(), 2), new OreDictStack(W.bolt(), 32)) .inputFluids(new FluidStack(Fluids.LUBRICANT, 1_000))); this.register(new GenericRecipe("ass.exferroplating").setup(1_200, 10_000).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.FERRO_PLATING.ordinal())) .inputItems(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.LEAD_PLATING), new OreDictStack(FERRO.plateCast(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4)) .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 1_000))); + this.register(new GenericRecipe("ass.excomputer").setup(1_200, 16_000).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.COMPUTER.ordinal())) + .inputItems(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.CIRCUIT), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CAPACITOR_BOARD), new ComparableStack(ModBlocks.glass_quartz, 8)) + .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 2_000))); this.register(new GenericRecipe("ass.bronzetubes").setup(3_000, 250_000).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.BRONZE_TUBES.ordinal())) .inputItems(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ZR.plateWelded(), 1)) .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL_COLD, 4_000)) @@ -201,59 +207,85 @@ public class AssemblyMachineRecipes extends GenericRecipes { // machines this.register(new GenericRecipe("ass.shredder").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_shredder, 1)) - .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2))); + .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2))); this.register(new GenericRecipe("ass.chemplant").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_plant, 1)) - .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.centrifuge").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_centrifuge, 1)) - .inputItems(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + .inputItems(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG)) + .inputItemsEx(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.plateCast(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.gascent").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_gascent, 1)) - .inputItems(new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(DESH.ingot(), 2), new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()))); + .inputItems(new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(DESH.ingot(), 2), new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal())) + .inputItemsEx(new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(STEEL.plateWelded(), 4), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.arcfurnace").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_arc_furnace, 1)) - .inputItems(new OreDictStack(ANY_CONCRETE.any(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16),new OreDictStack(STEEL.plateCast(), 8), new ComparableStack(ModBlocks.machine_transformer, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG.ordinal()))); + .inputItems(new OreDictStack(ANY_CONCRETE.any(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16),new OreDictStack(STEEL.plateCast(), 8), new ComparableStack(ModBlocks.machine_transformer, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG.ordinal())) + .inputItemsEx(new OreDictStack(ANY_CONCRETE.any(), 12), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.ingot_firebrick, 16), new ComparableStack(ModBlocks.machine_transformer, 1), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG.ordinal()))); this.register(new GenericRecipe("ass.acidizer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_crystallizer, 1)) - .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(TI.shell(), 3), new OreDictStack(DESH.ingot(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(TI.shell(), 3), new OreDictStack(DESH.ingot(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(TI.shell(), 3), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.electrolyzer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_electrolyser, 1)) - .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate528(), 16), new OreDictStack(TI.shell(), 3), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16), new ComparableStack(ModItems.coil_copper, 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate528(), 16), new OreDictStack(TI.shell(), 3), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16), new ComparableStack(ModItems.coil_copper, 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(TI.shell(), 3), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16), new ComparableStack(ModItems.coil_copper, 16), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.rtg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_rtg_grey, 1)) .inputItems(new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(STEEL.plate528(), 4), new OreDictStack(MINGRADE.wireFine(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4))); this.register(new GenericRecipe("ass.derrick").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_well, 1)) - .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(CU.plateCast(), 2), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.drill_titanium, 1))); + .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(CU.plateCast(), 2), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.drill_titanium, 1)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.STEEL_PLATING), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.drill_titanium, 1))); this.register(new GenericRecipe("ass.pumpjack").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_pumpjack, 1)) - .inputItems(new OreDictStack(DURA.plate(), 8), new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.motor_desh), new ComparableStack(ModItems.drill_titanium, 1))); + .inputItems(new OreDictStack(DURA.plate(), 8), new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.motor_desh), new ComparableStack(ModItems.drill_titanium, 1)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.motor_desh, 3), new ComparableStack(ModItems.drill_titanium, 1))); this.register(new GenericRecipe("ass.fracker").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_fracking_tower, 1)) - .inputItems(new OreDictStack(STEEL.shell(), 24), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModBlocks.concrete_smooth, 64), new ComparableStack(ModItems.drill_titanium), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.plate_desh, 24), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR))); + .inputItems(new OreDictStack(STEEL.shell(), 24), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModBlocks.concrete_smooth, 64), new ComparableStack(ModItems.drill_titanium), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.plate_desh, 24), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.FERRO_PLATING), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModBlocks.concrete_smooth, 64), new ComparableStack(ModItems.drill_titanium), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.flarestack").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_flare, 1)) - .inputItems(new OreDictStack(STEEL.plate(), 12), new OreDictStack(CU.plate528(), 4), new OreDictStack(STEEL.shell(), 4), new ComparableStack(ModItems.thermo_element, 3))); + .inputItems(new OreDictStack(STEEL.plate(), 12), new OreDictStack(CU.plate528(), 4), new OreDictStack(STEEL.shell(), 4), new ComparableStack(ModItems.thermo_element, 3)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.plate528(), 4), new ComparableStack(ModItems.thermo_element, 3))); this.register(new GenericRecipe("ass.refinery").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_refinery, 1)) - .inputItems(new OreDictStack(STEEL.plateWelded(), 3), new OreDictStack(CU.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG))); + .inputItems(new OreDictStack(STEEL.plateWelded(), 3), new OreDictStack(CU.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.STEEL_PLATING), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.crackingtower").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_catalytic_cracker, 1)) - .inputItems(new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(STEEL.shell(), 6), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(NB.ingot(), 2), new ComparableStack(ModItems.catalyst_clay, 12))); + .inputItems(new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(STEEL.shell(), 6), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(NB.ingot(), 2), new ComparableStack(ModItems.catalyst_clay, 12)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 6, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_PLASTIC.ingot(), 16), new OreDictStack(NB.ingot(), 4))); this.register(new GenericRecipe("ass.radiolysis").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_radiolysis, 1)) - .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(PB.plate528(), 12), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.thermo_element, 8))); + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(PB.plate528(), 12), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.thermo_element, 8)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.LEAD_PLATING), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 16), new ComparableStack(ModItems.thermo_element, 8))); this.register(new GenericRecipe("ass.coker").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_coker, 1)) - .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 8), new OreDictStack(RUBBER.ingot(), 4), new OreDictStack(NB.ingot(), 4))); + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 8), new OreDictStack(RUBBER.ingot(), 4), new OreDictStack(NB.ingot(), 4)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(NB.ingot(), 4))); this.register(new GenericRecipe("ass.vaccumrefinery").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_vacuum_distill, 1)) - .inputItems(new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(CU.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.motor_desh, 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CHIP_BISMOID))); + .inputItems(new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(CU.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.motor_desh, 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CHIP_BISMOID)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.FERRO_PLATING), new OreDictStack(DURA.pipe(), 16), new ComparableStack(ModItems.motor_desh, 3), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CHIP_BISMOID), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.reformer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_catalytic_reformer, 1)) - .inputItems(new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(CU.plate528(), 8), new OreDictStack(NB.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.shell(), 3), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + .inputItems(new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(CU.plate528(), 8), new OreDictStack(NB.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.shell(), 3), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(NB.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(DURA.pipe(), 16), new ComparableStack(ModItems.motor, 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.hydrotreater").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_hydrotreater, 1)) - .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(CU.plateCast(), 4), new OreDictStack(NB.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.shell(), 2), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(CU.plateCast(), 4), new OreDictStack(NB.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.shell(), 2), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(NB.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(DURA.pipe(), 16), new ComparableStack(ModItems.motor_desh, 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.pyrooven").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_pyrooven, 1)) - .inputItems(new OreDictStack(STEEL.plateWelded(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 4), new OreDictStack(CU.pipe(), 12), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + .inputItems(new OreDictStack(STEEL.plateWelded(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 4), new OreDictStack(CU.pipe(), 12), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 6, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(ANY_HARDPLASTIC.ingot(), 32), new ComparableStack(ModItems.ingot_cft, 4), new ComparableStack(ModItems.motor_bismuth, 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.liquefactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_liquefactor, 1)) - .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 12), new OreDictStack(ANY_TAR.any(), 4), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.coil_tungsten, 8))); + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 12), new OreDictStack(ANY_TAR.any(), 4), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.coil_tungsten, 8)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_TAR.any(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR))); this.register(new GenericRecipe("ass.solidifier").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_solidifier, 1)) - .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(AL.plate528(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.coil_copper, 4))); + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(AL.plate528(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.coil_copper, 4)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR))); this.register(new GenericRecipe("ass.compressor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_compressor, 1)) - .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate528(), 4), new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate528(), 4), new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.STEEL_PLATING), new OreDictStack(STEEL.shell(), 4), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.compactcompressor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_compressor_compact, 1)) - .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(TI.shell(), 4), new OreDictStack(CU.pipe(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(TI.shell(), 4), new OreDictStack(CU.pipe(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.pipe(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.epress").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_epress, 1)) - .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.part_generic, 4, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.fel").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_fel, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.part_generic, 4, EnumPartType.GLASS_POLARIZED), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.part_generic, 4, EnumPartType.GLASS_POLARIZED), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.part_generic, 4, EnumPartType.GLASS_POLARIZED), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.silex").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_silex, 1)) - .inputItems(new ComparableStack(ModBlocks.glass_quartz, 16), new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(DESH.ingot(), 4), new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(STEEL.pipe(), 8))); + .inputItems(new ComparableStack(ModBlocks.glass_quartz, 16), new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(DESH.ingot(), 4), new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(STEEL.pipe(), 8)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModBlocks.glass_quartz, 16), new OreDictStack(RUBBER.ingot(), 16))); this.register(new GenericRecipe("ass.excavator").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_excavator, 1)) .inputItems(new ComparableStack(Blocks.stonebrick, 8), new OreDictStack(STEEL.ingot(), 8), new OreDictStack(IRON.ingot(), 8), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.drillsteel").setup(100, 100).outputItems(new ItemStack(ModItems.drillbit, 1, EnumDrillType.STEEL.ordinal())) @@ -279,29 +311,37 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.slopper").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_ore_slopper, 1)) .inputItems(new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(TI.plate(), 8), new OreDictStack(CU.pipe(), 3), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.mininglaser").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_mining_laser, 1)) - .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(TI.shell(), 4), new OreDictStack(DURA.plate(), 4), new ComparableStack(ModItems.crystal_redstone, 3), new ComparableStack(Items.diamond, 3), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.motor, 3))); + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(TI.shell(), 4), new OreDictStack(DURA.plate(), 4), new ComparableStack(ModItems.crystal_redstone, 3), new ComparableStack(Items.diamond, 3), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.motor, 3)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(DURA.plate(), 4), new ComparableStack(ModItems.crystal_redstone, 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.motor_desh, 3))); this.register(new GenericRecipe("ass.teleporter").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_teleporter, 1)) .inputItems(new OreDictStack(TI.plate(), 12), new OreDictStack(ALLOY.plate528(), 12), new OreDictStack(GOLD.wireFine(), 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1))); this.register(new GenericRecipe("ass.radar").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_radar, 1)) - .inputItems(new OreDictStack(STEEL.plate528(), 12), new OreDictStack(ANY_RUBBER.ingot(), 12), new ComparableStack(ModItems.magnetron, 5), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC.ordinal()), new ComparableStack(ModItems.crt_display, 4))); + .inputItems(new OreDictStack(STEEL.plate528(), 12), new OreDictStack(ANY_RUBBER.ingot(), 12), new ComparableStack(ModItems.magnetron, 5), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC.ordinal()), new ComparableStack(ModItems.crt_display, 4)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.CIRCUIT), new ComparableStack(ModItems.crt_display, 4))); this.register(new GenericRecipe("ass.radarlarge").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_radar_large, 1)) - .inputItems(new OreDictStack(STEEL.plateWelded(), 6), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_RUBBER.ingot(), 24), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.crt_display, 4))); + .inputItems(new OreDictStack(STEEL.plateWelded(), 6), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_RUBBER.ingot(), 24), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.crt_display, 4)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(ANY_RUBBER.ingot(), 24), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.motor_desh, 3), new ComparableStack(ModItems.item_expensive, 6, EnumExpensiveType.CIRCUIT), new ComparableStack(ModItems.crt_display, 4))); this.register(new GenericRecipe("ass.forcefield").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_forcefield, 1)) .inputItems(new OreDictStack(ALLOY.plate528(), 8), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.coil_gold_torus, 6), new ComparableStack(ModItems.coil_magnetized_tungsten, 12), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.upgrade_radius, 1), new ComparableStack(ModItems.upgrade_health, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModBlocks.machine_transformer, 1))); this.register(new GenericRecipe("ass.difurnacertg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_difurnace_rtg_off, 1)) .inputItems(new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(DESH.ingot(), 4), new OreDictStack(PB.plate528(), 6), new OreDictStack(OreDictManager.getReflector(), 8), new OreDictStack(CU.plate(), 12))); this.register(new GenericRecipe("ass.strandcaster").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_strand_caster, 1)) - .inputItems(new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(STEEL.shell(), 2), new OreDictStack(ANY_CONCRETE.any(), 8))); + .inputItems(new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(STEEL.shell(), 2), new OreDictStack(ANY_CONCRETE.any(), 8)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_CONCRETE.any(), 8))); this.register(new GenericRecipe("ass.assemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_assemfac, 1)) - .inputItems(new OreDictStack(STEEL.ingot(), 48), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(B.ingot(), 4), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(KEY_ANYPANE, 64), new ComparableStack(ModItems.motor, 18), new OreDictStack(W.bolt(), 16), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.ingot(), 48), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(B.ingot(), 4), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(KEY_ANYPANE, 64), new ComparableStack(ModItems.motor, 18), new OreDictStack(W.bolt(), 16), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new OreDictStack(B.ingot(), 4), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(KEY_ANYPANE, 64), new ComparableStack(ModItems.motor_desh, 16), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.chemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_factory, 1)) - .inputItems(new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 8), new ComparableStack(ModItems.motor_desh, 4), new ComparableStack(ModItems.coil_tungsten, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 8), new ComparableStack(ModItems.motor_desh, 4), new ComparableStack(ModItems.coil_tungsten, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 16), new ComparableStack(ModItems.motor_desh, 16), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); // generators this.register(new GenericRecipe("ass.dieselgen").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_diesel, 1)) - .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4))); + .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.coil_copper, 4))); this.register(new GenericRecipe("ass.combustiongen").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_combustion_engine, 1)) - .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(CU.ingot(), 12), new OreDictStack(GOLD.wireDense(), 8), new ComparableStack(ModItems.canister_empty, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(CU.ingot(), 12), new OreDictStack(GOLD.wireDense(), 8), new ComparableStack(ModItems.canister_empty, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(GOLD.wireDense(), 16), new ComparableStack(ModItems.canister_empty, 4), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.pistonsetsteel").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.STEEL.ordinal())) .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(CU.plate(), 4), new OreDictStack(W.ingot(), 8), new OreDictStack(W.bolt(), 16))); this.register(new GenericRecipe("ass.pistonsetdura").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.DURA.ordinal())) @@ -311,21 +351,28 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.pistonsetstar").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.STARMETAL.ordinal())) .inputItems(new OreDictStack(STAR.ingot(), 24), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(BIGMT.plate(), 24), new OreDictStack(NB.ingot(), 16), new OreDictStack(DURA.pipe(), 4))); this.register(new GenericRecipe("ass.turbofan").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_turbofan, 1)) - .inputItems(new OreDictStack(TI.shell(), 8), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()))); + .inputItems(new OreDictStack(TI.shell(), 8), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal())) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.turbine_tungsten, 3), new OreDictStack(GOLD.wireDense(), 16), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.gasturbine").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_turbinegas, 1)) - .inputItems(new OreDictStack(STEEL.shell(), 10), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4),new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 1), new ComparableStack(ModItems.ingot_rubber, 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()))); + .inputItems(new OreDictStack(STEEL.shell(), 10), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4),new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 1), new ComparableStack(ModItems.ingot_rubber, 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal())) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(DURA.pipe(), 16), new ComparableStack(ModItems.turbine_tungsten, 2), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.hephaestus").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_hephaestus, 1)) - .inputItems(new OreDictStack(STEEL.pipe(), 12), new OreDictStack(STEEL.ingot(), 24), new OreDictStack(CU.plate(), 24), new OreDictStack(NB.ingot(), 4), new OreDictStack(RUBBER.ingot(), 12), new ComparableStack(ModBlocks.glass_quartz, 16))); + .inputItems(new OreDictStack(STEEL.pipe(), 12), new OreDictStack(STEEL.ingot(), 24), new OreDictStack(CU.plate(), 24), new OreDictStack(NB.ingot(), 4), new OreDictStack(RUBBER.ingot(), 12), new ComparableStack(ModBlocks.glass_quartz, 16)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(NB.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new ComparableStack(ModBlocks.glass_quartz, 16))); this.register(new GenericRecipe("ass.iturbine").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_large_turbine, 1)) - .inputItems(new OreDictStack(STEEL.plate528(), 12), new OreDictStack(RUBBER.ingot(), 4), new ComparableStack(ModItems.turbine_titanium, 3), new OreDictStack(GOLD.wireDense(), 6), new OreDictStack(DURA.pipe(), 3), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.plate528(), 12), new OreDictStack(RUBBER.ingot(), 4), new ComparableStack(ModItems.turbine_titanium, 3), new OreDictStack(GOLD.wireDense(), 6), new OreDictStack(DURA.pipe(), 3), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.turbine_titanium, 3), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(DURA.pipe(), 16), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.leviturbine").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_chungus, 1)) - .inputItems(new OreDictStack(STEEL.shell(), 6), new OreDictStack(STEEL.plateWelded(), 16), new OreDictStack(TI.plate528(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new ComparableStack(ModItems.turbine_tungsten, 5), new ComparableStack(ModItems.turbine_titanium, 3), new ComparableStack(ModItems.flywheel_beryllium, 1), new OreDictStack(GOLD.wireDense(), 48), new OreDictStack(DURA.pipe(), 16), new OreDictStack(STEEL.pipe(), 16))); + .inputItems(new OreDictStack(STEEL.shell(), 6), new OreDictStack(STEEL.plateWelded(), 16), new OreDictStack(TI.plate528(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new ComparableStack(ModItems.turbine_tungsten, 5), new ComparableStack(ModItems.turbine_titanium, 3), new ComparableStack(ModItems.flywheel_beryllium, 1), new OreDictStack(GOLD.wireDense(), 48), new OreDictStack(DURA.pipe(), 16), new OreDictStack(STEEL.pipe(), 16)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModItems.turbine_tungsten, 5), new ComparableStack(ModItems.turbine_titanium, 12), new ComparableStack(ModItems.flywheel_beryllium, 1), new OreDictStack(GOLD.wireDense(), 64))); this.register(new GenericRecipe("ass.radgen").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_radgen, 1)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "radgen") - .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.coil_magnetized_tungsten, 6), new OreDictStack(MAGTUNG.wireFine(), 24), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC), new ComparableStack(ModItems.reactor_core, 3), new OreDictStack(STAR.ingot(), 1), new OreDictStack("dyeRed", 1))); + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.coil_magnetized_tungsten, 6), new OreDictStack(MAGTUNG.wireFine(), 24), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC), new ComparableStack(ModItems.reactor_core, 3), new OreDictStack(STAR.ingot(), 1), new OreDictStack(KEY_RED, 1)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.coil_magnetized_tungsten, 16), new ComparableStack(ModItems.reactor_core, 3), new OreDictStack(STAR.ingot(), 1), new OreDictStack(KEY_RED, 1), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.CIRCUIT))); // condensers this.register(new GenericRecipe("ass.hpcondenser").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_condenser_powered, 1)) - .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 4), new OreDictStack(CU.plate528(), 16), new ComparableStack(ModItems.motor_desh, 3), new OreDictStack(STEEL.pipe(), 24), new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 4))); + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 4), new OreDictStack(CU.plate528(), 16), new ComparableStack(ModItems.motor_desh, 3), new OreDictStack(STEEL.pipe(), 24), new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 4)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModItems.motor_desh, 5), new OreDictStack(STEEL.pipe(), 24), new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 16))); // batteries this.register(new GenericRecipe("ass.battery").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) @@ -348,59 +395,90 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.plate_dineutronium, 24), new ComparableStack(ModItems.ingot_u238m2), new ComparableStack(ModItems.ingot_cft, 64), + new ComparableStack(ModItems.ingot_cft, 64)) + .inputItemsEx(new ComparableStack(ModItems.ingot_electronium, 64), + new ComparableStack(ModBlocks.machine_dineutronium_battery, 16), + new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES), + new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.FERRO_PLATING), + new OreDictStack(STAR.block(), 64), + new ComparableStack(ModBlocks.machine_transformer_dnt, 8), + new ComparableStack(ModItems.coil_magnetized_tungsten, 24), + new ComparableStack(ModItems.powder_magic, 64), + new ComparableStack(ModItems.plate_dineutronium, 24), + new ComparableStack(ModItems.ingot_u238m2), + new ComparableStack(ModItems.ingot_cft, 64), new ComparableStack(ModItems.ingot_cft, 64))); // fluid tanks this.register(new GenericRecipe("ass.tank").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_fluidtank, 1)) - .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_TAR.any(), 4))); + .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_TAR.any(), 4)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.STEEL_PLATING), new OreDictStack(ANY_TAR.any(), 4))); this.register(new GenericRecipe("ass.bat9k").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_bat9000, 1)) - .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16))); + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16))); this.register(new GenericRecipe("ass.orbus").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_orbus, 1)) - .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plateCast(), 4), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc_polonium, 1))); + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plateCast(), 4), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc_polonium, 1)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.FERRO_PLATING), new OreDictStack(BIGMT.plateCast(), 16), new ComparableStack(ModItems.coil_advanced_alloy, 24), new ComparableStack(ModItems.battery_sc_polonium, 1))); // accelerators this.register(new GenericRecipe("ass.cyclotron").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_cyclotron, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 3), new OreDictStack(ND.wireDense(), 32), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(STEEL.plate528(), 32), new OreDictStack(AL.plate528(), 32), new OreDictStack(ANY_PLASTIC.ingot(), 24), new OreDictStack(RUBBER.ingot(), 24), new OreDictStack(CU.plateCast(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC))); + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 3), new OreDictStack(ND.wireDense(), 32), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(STEEL.plate528(), 32), new OreDictStack(AL.plate528(), 32), new OreDictStack(ANY_PLASTIC.ingot(), 24), new OreDictStack(RUBBER.ingot(), 24), new OreDictStack(CU.plateCast(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ND.wireDense(), 32), new OreDictStack(AL.plateWelded(), 16), new OreDictStack(RUBBER.ingot(), 32), new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.beamline").setup(200, 100).outputItems(new ItemStack(ModBlocks.pa_beamline, 1)) - .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate(), 16), new OreDictStack(GOLD.wireDense(), 4))); + .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate(), 16), new OreDictStack(GOLD.wireDense(), 4)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.plate(), 16), new OreDictStack(GOLD.wireDense(), 4))); this.register(new GenericRecipe("ass.rfc").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_rfc, 1)) - .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(CU.plate(), 64), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16))); + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(CU.plate(), 64), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16)) + .inputItemsEx(new ComparableStack(ModBlocks.pa_beamline, 3), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.LEAD_PLATING), new OreDictStack(CU.plate(), 64), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16))); this.register(new GenericRecipe("ass.quadrupole").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_quadrupole, 1)) - .inputItems(new ComparableStack(ModBlocks.pa_beamline, 1), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 1), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID)) + .inputItemsEx(new ComparableStack(ModBlocks.pa_beamline, 1), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.dipole").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_dipole, 1)) - .inputItems(new ComparableStack(ModBlocks.pa_beamline, 2), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 32), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID))); + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 2), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 32), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID)) + .inputItemsEx(new ComparableStack(ModBlocks.pa_beamline, 2), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_HARDPLASTIC.ingot(), 32), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.source").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_source, 1)) - .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.QUANTUM))); + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.QUANTUM)) + .inputItemsEx(new ComparableStack(ModBlocks.pa_beamline, 3), new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.detector").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_detector, 1)) - .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 24), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM))); + .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 24), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM)) + .inputItemsEx(new ComparableStack(ModBlocks.pa_beamline, 3), new ComparableStack(ModItems.item_expensive, 32, EnumExpensiveType.LEAD_PLATING), new OreDictStack(GOLD.wireDense(), 64), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM), new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.pagold").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.GOLD.ordinal())).inputItems(new OreDictStack(GOLD.wireDense(), 64), new OreDictStack(GOLD.wireDense(), 64))); this.register(new GenericRecipe("ass.panbti").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.NIOBIUM.ordinal())).inputItems(new OreDictStack(NB.wireDense(), 64), new OreDictStack(TI.wireDense(), 64))); this.register(new GenericRecipe("ass.pabscco").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.BSCCO.ordinal())).inputItems(new OreDictStack(BSCCO.wireDense(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64))); this.register(new GenericRecipe("ass.pachlorophyte").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.CHLOROPHYTE.ordinal())).inputItems(new OreDictStack(CU.wireDense(), 64), new OreDictStack(CU.wireDense(), 64), new ComparableStack(ModItems.powder_chlorophyte, 16))); this.register(new GenericRecipe("ass.exposurechamber").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_exposure_chamber, 1)) - .inputItems(new OreDictStack(AL.plateCast(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModBlocks.capacitor_tantalium, 1), new ComparableStack(ModBlocks.glass_quartz, 16))); + .inputItems(new OreDictStack(AL.plateCast(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModBlocks.capacitor_tantalium, 1), new ComparableStack(ModBlocks.glass_quartz, 16)) + .inputItems(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_HARDPLASTIC.ingot(), 24), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.COMPUTER))); // reactors this.register(new GenericRecipe("ass.breedingreactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_reactor_breeding, 1)) - .inputItems(new ComparableStack(ModItems.reactor_core, 1), new OreDictStack(STEEL.ingot(), 12), new OreDictStack(PB.plate(), 16), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ASBESTOS.ingot(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.crt_display, 1))); + .inputItems(new ComparableStack(ModItems.reactor_core, 1), new OreDictStack(STEEL.ingot(), 12), new OreDictStack(PB.plate(), 16), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ASBESTOS.ingot(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.crt_display, 1)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.LEAD_PLATING), new ComparableStack(ModItems.reactor_core, 1), new OreDictStack(ASBESTOS.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.crt_display, 1))); this.register(new GenericRecipe("ass.researchreactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.reactor_research, 1)) - .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.motor_desh, 2), new OreDictStack(B.ingot(), 5), new OreDictStack(PB.plate(), 8), new ComparableStack(ModItems.crt_display, 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.motor_desh, 2), new OreDictStack(B.ingot(), 5), new OreDictStack(PB.plate(), 8), new ComparableStack(ModItems.crt_display, 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.crt_display, 3), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.cirnox").setup(600, 100).outputItems(new ItemStack(ModBlocks.reactor_zirnox, 1)) - .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(B.ingot(), 8), new OreDictStack(GRAPHITE.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(ANY_CONCRETE.any(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(B.ingot(), 8), new OreDictStack(GRAPHITE.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(ANY_CONCRETE.any(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.LEAD_PLATING), new OreDictStack(GRAPHITE.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(ANY_CONCRETE.any(), 16), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.rbmk").setup(100, 100).outputItems(new ItemStack(ModBlocks.rbmk_blank, 1)) - .inputItems(new ComparableStack(ModBlocks.concrete_asbestos, 4), new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(CU.plate(), 8), new ComparableStack(ModItems.plate_polymer, 4))); + .inputItems(new ComparableStack(ModBlocks.concrete_asbestos, 4), new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(CU.plate(), 8), new ComparableStack(ModItems.plate_polymer, 4)) + .inputItemsEx(new ComparableStack(ModBlocks.concrete_asbestos, 4), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.FERRO_PLATING), new OreDictStack(CU.plate(), 16))); // fusion reactor this.register(new GenericRecipe("ass.fusioncore").setup(600, 100).outputItems(new ItemStack(ModBlocks.struct_iter_core, 1)) - .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 6), new OreDictStack(W.plateWelded(), 6), new OreDictStack(OreDictManager.getReflector(), 12), new ComparableStack(ModItems.coil_advanced_alloy, 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID))); + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 6), new OreDictStack(W.plateWelded(), 6), new OreDictStack(OreDictManager.getReflector(), 12), new ComparableStack(ModItems.coil_advanced_alloy, 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.FERRO_PLATING), new OreDictStack(W.plateWelded(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.fusionconductor").setup(100, 100).outputItems(new ItemStack(ModBlocks.fusion_conductor, 1)) .inputItems(new ComparableStack(ModItems.coil_advanced_alloy, 5))); this.register(new GenericRecipe("ass.fusioncenter").setup(200, 100).outputItems(new ItemStack(ModBlocks.fusion_center, 1)) - .inputItems(new OreDictStack(ANY_HARDPLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 6), new OreDictStack(ALLOY.wireFine(), 24))); + .inputItems(new OreDictStack(ANY_HARDPLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 6), new OreDictStack(ALLOY.wireFine(), 24)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.STEEL_PLATING), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4), new OreDictStack(ALLOY.wireFine(), 24))); this.register(new GenericRecipe("ass.fusionmotor").setup(400, 100).outputItems(new ItemStack(ModBlocks.fusion_motor, 1)) - .inputItems(new OreDictStack(TI.ingot(), 4), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.motor, 4))); + .inputItems(new OreDictStack(TI.ingot(), 4), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.motor, 4)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.STEEL_PLATING), new ComparableStack(ModItems.motor, 4))); this.register(new GenericRecipe("ass.fusionheater").setup(200, 100).outputItems(new ItemStack(ModBlocks.fusion_heater, 4)) - .inputItems(new OreDictStack(W.plateWelded(), 2), new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.magnetron, 2))); + .inputItems(new OreDictStack(W.plateWelded(), 2), new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.magnetron, 2)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(W.plateWelded(), 4), new ComparableStack(ModItems.magnetron, 2))); this.register(new GenericRecipe("ass.blankettungsten").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_tungsten, 1)) .inputItems(new OreDictStack(W.block(), 32), new OreDictStack(OreDictManager.getReflector(), 64))); this.register(new GenericRecipe("ass.blanketdesh").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_desh, 1)) @@ -410,36 +488,49 @@ public class AssemblyMachineRecipes extends GenericRecipes { // watz this.register(new GenericRecipe("ass.watzrod").setup(200, 100).outputItems(new ItemStack(ModBlocks.watz_element, 3)) - .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4))); + .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(BIGMT.ingot(), 6), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4))); this.register(new GenericRecipe("ass.watzcooler").setup(200, 100).outputItems(new ItemStack(ModBlocks.watz_cooler, 3)) - .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 2))); + .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 2)) + .inputItems(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(RUBBER.ingot(), 8))); this.register(new GenericRecipe("ass.watzcasing").setup(100, 100).outputItems(new ItemStack(ModBlocks.watz_end, 3)) - .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plateWelded(), 2))); + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plateWelded(), 2)) + .inputItems(new ComparableStack(ModItems.item_expensive, 6, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_RESISTANTALLOY.plateWelded()))); // ICF this.register(new GenericRecipe("ass.icfcell").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CELL.ordinal())) - .inputItems(new ComparableStack(ModItems.ingot_cft, 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new ComparableStack(ModBlocks.glass_quartz, 16))); + .inputItems(new ComparableStack(ModItems.ingot_cft, 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new ComparableStack(ModBlocks.glass_quartz, 16)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.ingot_cft, 8), new ComparableStack(ModBlocks.glass_quartz, 16))); this.register(new GenericRecipe("ass.icfemitter").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.EMITTER.ordinal())) .inputItems(new OreDictStack(W.plateWelded(), 4), new OreDictStack(MAGTUNG.wireDense(), 16)) + .inputItemsEx(new OreDictStack(W.plateWelded(), 8), new OreDictStack(MAGTUNG.wireDense(), 16)) .inputFluids(new FluidStack(Fluids.XENON, 16_000))); this.register(new GenericRecipe("ass.icfcapacitor").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CAPACITOR.ordinal())) - .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 1), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.ingot(), 2))); + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 1), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.wireDense(), 2)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.wireDense(), 2))); this.register(new GenericRecipe("ass.icfturbo").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.TURBO.ordinal())) - .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new OreDictStack(DNT.wireDense(), 4), new OreDictStack(SBD.ingot(), 4))); + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new OreDictStack(DNT.wireDense(), 4), new OreDictStack(SBD.wireDense(), 4)) + .inputItemsEx(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(DNT.wireDense(), 8), new OreDictStack(SBD.wireDense(), 4))); this.register(new GenericRecipe("ass.icfcasing").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CASING.ordinal())) - .inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16))); + .inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16))); this.register(new GenericRecipe("ass.icfport").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.PORT.ordinal())) - .inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 4))); + .inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 16)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 16))); this.register(new GenericRecipe("ass.icfcontroller").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_controller, 1)) - .inputItems(new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID))); + .inputItems(new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.icfscaffold").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 0)) - .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(TI.plateWelded(), 2))); + .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(TI.plateWelded(), 2)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.STEEL_PLATING))); this.register(new GenericRecipe("ass.icfvessel").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 1)) .inputItems(new ComparableStack(ModItems.ingot_cft, 1), new OreDictStack(CMB.plateCast(), 1), new OreDictStack(W.plateWelded(), 2))); this.register(new GenericRecipe("ass.icfstructural").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 3)) - .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 1))); + .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 1)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(STEEL.plateWelded(), 8))); this.register(new GenericRecipe("ass.icfcore").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.struct_icf_core, 1)) - .inputItems(new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.QUANTUM))); + .inputItems(new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.QUANTUM)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.QUANTUM), new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.icfpress").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_icf_press, 1)) .inputItems(new OreDictStack(GOLD.plateCast(), 8), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); @@ -660,6 +751,103 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(ANY_CONCRETE.any(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModBlocks.steel_scaffold, 24), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED))); this.register(new GenericRecipe("ass.launchpadsilo").setup(200, 100).outputItems(new ItemStack(ModBlocks.launch_pad, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(ANY_CONCRETE.any(), 8), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED))); + + // custom missile thrusters + this.register(new GenericRecipe("ass.mpt10kero").setup(100, 100).outputItems(new ItemStack(ModItems.mp_thruster_10_kerosene, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate(), 4))); + this.register(new GenericRecipe("ass.mpt10solid").setup(100, 100).outputItems(new ItemStack(ModItems.mp_thruster_10_solid, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(DURA.pipe(), 1), new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate(), 4))); + this.register(new GenericRecipe("ass.mpt10xenon").setup(100, 100).outputItems(new ItemStack(ModItems.mp_thruster_10_xenon, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(DURA.plate(), 4), new ComparableStack(ModItems.arc_electrode, 1))); + this.register(new GenericRecipe("ass.mpt15kero").setup(200, 100).outputItems(new ItemStack(ModItems.mp_thruster_15_kerosene, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(W.ingot(), 8), new OreDictStack(STEEL.plate(), 8))); + this.register(new GenericRecipe("ass.mpt15kerodual").setup(200, 100).outputItems(new ItemStack(ModItems.mp_thruster_15_kerosene_dual, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(W.ingot(), 8), new OreDictStack(STEEL.plate(), 8))); + this.register(new GenericRecipe("ass.mpt15kerotriple").setup(200, 100).outputItems(new ItemStack(ModItems.mp_thruster_15_kerosene_triple, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(W.ingot(), 8), new OreDictStack(STEEL.plate(), 8))); + this.register(new GenericRecipe("ass.mpt15solid").setup(200, 100).outputItems(new ItemStack(ModItems.mp_thruster_15_solid, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(DURA.pipe(), 3), new OreDictStack(W.ingot(), 8), new OreDictStack(STEEL.plate(), 8))); + this.register(new GenericRecipe("ass.mpt15solid16").setup(200, 100).outputItems(new ItemStack(ModItems.mp_thruster_15_solid_hexdecuple, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(DURA.pipe(), 3), new OreDictStack(W.ingot(), 8), new OreDictStack(STEEL.plate(), 8))); + this.register(new GenericRecipe("ass.mpt15hydro").setup(200, 100).outputItems(new ItemStack(ModItems.mp_thruster_15_hydrogen, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(DURA.pipe(), 3), new OreDictStack(W.ingot(), 8), new OreDictStack(DESH.ingot(), 4))); + this.register(new GenericRecipe("ass.mpt15hydrodual").setup(200, 100).outputItems(new ItemStack(ModItems.mp_thruster_15_hydrogen_dual, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(DURA.pipe(), 3), new OreDictStack(W.ingot(), 8), new OreDictStack(DESH.ingot(), 4))); + this.register(new GenericRecipe("ass.mpt15bfshort").setup(200, 100).outputItems(new ItemStack(ModItems.mp_thruster_15_balefire_short, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(DURA.pipe(), 5), new OreDictStack(W.plateCast(), 8), new OreDictStack(BIGMT.plate(), 8))); + this.register(new GenericRecipe("ass.mpt15bf").setup(200, 100).outputItems(new ItemStack(ModItems.mp_thruster_15_balefire_short, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(DURA.pipe(), 5), new OreDictStack(W.plateCast(), 16), new OreDictStack(BIGMT.plate(), 16))); + this.register(new GenericRecipe("ass.mpt15bflarge").setup(200, 100).outputItems(new ItemStack(ModItems.mp_thruster_15_balefire_large, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(DURA.pipe(), 10), new OreDictStack(W.plateCast(), 16), new OreDictStack(BIGMT.plate(), 24))); + this.register(new GenericRecipe("ass.mpt20kero").setup(400, 100).outputItems(new ItemStack(ModItems.mp_thruster_20_kerosene, 1)) + .inputItems(new ComparableStack(ModItems.seg_20, 1), new OreDictStack(STEEL.pipe(), 6), new OreDictStack(W.ingot(), 16), new OreDictStack(STEEL.plate(), 16))); + this.register(new GenericRecipe("ass.mpt20kerodual").setup(400, 100).outputItems(new ItemStack(ModItems.mp_thruster_20_kerosene_dual, 1)) + .inputItems(new ComparableStack(ModItems.seg_20, 1), new OreDictStack(STEEL.pipe(), 6), new OreDictStack(W.ingot(), 16), new OreDictStack(STEEL.plate(), 16))); + this.register(new GenericRecipe("ass.mpt20kerotriple").setup(400, 100).outputItems(new ItemStack(ModItems.mp_thruster_20_kerosene_triple, 1)) + .inputItems(new ComparableStack(ModItems.seg_20, 1), new OreDictStack(STEEL.pipe(), 6), new OreDictStack(W.ingot(), 16), new OreDictStack(STEEL.plate(), 16))); + this.register(new GenericRecipe("ass.mpt20solid").setup(400, 100).outputItems(new ItemStack(ModItems.mp_thruster_20_solid, 1)) + .inputItems(new ComparableStack(ModItems.seg_20, 1), new OreDictStack(DURA.pipe(), 6), new OreDictStack(W.ingot(), 16), new OreDictStack(STEEL.plate(), 16))); + this.register(new GenericRecipe("ass.mpt20solidmulti").setup(400, 100).outputItems(new ItemStack(ModItems.mp_thruster_20_solid_multi, 1)) + .inputItems(new ComparableStack(ModItems.seg_20, 1), new OreDictStack(DURA.pipe(), 6), new OreDictStack(W.ingot(), 16), new OreDictStack(STEEL.plate(), 16))); + this.register(new GenericRecipe("ass.mpt20solidmultier").setup(400, 100).outputItems(new ItemStack(ModItems.mp_thruster_20_solid_multier, 1)) + .inputItems(new ComparableStack(ModItems.seg_20, 1), new OreDictStack(DURA.pipe(), 6), new OreDictStack(W.ingot(), 16), new OreDictStack(STEEL.plate(), 16))); + + // custom missile fuselages + this.register(new GenericRecipe("ass.mpf10kero").setup(100, 100).outputItems(new ItemStack(ModItems.mp_fuselage_10_kerosene, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 2), new OreDictStack(AL.plate(), 12), new OreDictStack(STEEL.plate(), 3))); + this.register(new GenericRecipe("ass.mpf10kerolong").setup(100, 100).outputItems(new ItemStack(ModItems.mp_fuselage_10_kerosene, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 2), new OreDictStack(AL.plate(), 16), new OreDictStack(STEEL.plate(), 6))); + this.register(new GenericRecipe("ass.mpf10solid").setup(100, 100).outputItems(new ItemStack(ModItems.mp_fuselage_10_solid, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 2), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 3))); + this.register(new GenericRecipe("ass.mpf10solidlong").setup(100, 100).outputItems(new ItemStack(ModItems.mp_fuselage_10_solid, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 2), new OreDictStack(TI.plate(), 16), new OreDictStack(STEEL.plate(), 6))); + this.register(new GenericRecipe("ass.mpf10xenon").setup(100, 100).outputItems(new ItemStack(ModItems.mp_fuselage_10_xenon, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 2), new OreDictStack(CU.plate(), 12), new OreDictStack(STEEL.plate(), 3))); + this.register(new GenericRecipe("ass.mpf1015kero").setup(200, 100).outputItems(new ItemStack(ModItems.mp_fuselage_10_15_kerosene, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new ComparableStack(ModItems.seg_15, 1), new OreDictStack(AL.plate(), 24), new OreDictStack(STEEL.plate(), 8))); + this.register(new GenericRecipe("ass.mpf1015solid").setup(200, 100).outputItems(new ItemStack(ModItems.mp_fuselage_10_15_solid, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new ComparableStack(ModItems.seg_15, 1), new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 8))); + this.register(new GenericRecipe("ass.mpf1015hydro").setup(200, 100).outputItems(new ItemStack(ModItems.mp_fuselage_10_15_hydrogen, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new ComparableStack(ModItems.seg_15, 1), new OreDictStack(CU.plate(), 24), new OreDictStack(STEEL.plate(), 8))); + this.register(new GenericRecipe("ass.mpf1015bf").setup(200, 100).outputItems(new ItemStack(ModItems.mp_fuselage_10_15_balefire, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new ComparableStack(ModItems.seg_15, 1), new OreDictStack(BIGMT.plate(), 24), new OreDictStack(STEEL.plate(), 8))); + this.register(new GenericRecipe("ass.mpf15kero").setup(200, 100).outputItems(new ItemStack(ModItems.mp_fuselage_15_kerosene, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 2), new OreDictStack(AL.plate(), 32), new OreDictStack(STEEL.plate(), 12))); + this.register(new GenericRecipe("ass.mpf15solid").setup(200, 100).outputItems(new ItemStack(ModItems.mp_fuselage_15_solid, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 2), new OreDictStack(TI.plate(), 32), new OreDictStack(STEEL.plate(), 12))); + this.register(new GenericRecipe("ass.mpf15hydro").setup(200, 100).outputItems(new ItemStack(ModItems.mp_fuselage_15_hydrogen, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 2), new OreDictStack(CU.plate(), 32), new OreDictStack(STEEL.plate(), 12))); + this.register(new GenericRecipe("ass.mpf1520kero").setup(400, 100).outputItems(new ItemStack(ModItems.mp_fuselage_15_20_kerosene, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.seg_20, 1), new OreDictStack(AL.plate(), 48), new OreDictStack(STEEL.plate(), 16))); + this.register(new GenericRecipe("ass.mpf1520solid").setup(400, 100).outputItems(new ItemStack(ModItems.mp_fuselage_15_20_solid, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.seg_20, 1), new OreDictStack(TI.plate(), 48), new OreDictStack(STEEL.plate(), 16))); + + // custom missile warheads + this.register(new GenericRecipe("ass.mpw10he").setup(100, 100).outputItems(new ItemStack(ModItems.mp_warhead_10_he, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.mpw10inc").setup(100, 100).outputItems(new ItemStack(ModItems.mp_warhead_10_incendiary, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 2), new OreDictStack(P_RED.dust(), 6), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.mpw10bus").setup(100, 100).outputItems(new ItemStack(ModItems.mp_warhead_10_buster, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(WEAPONSTEEL.plate(), 6), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 6), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.mpw10nukesmall").setup(200, 100).outputItems(new ItemStack(ModItems.mp_warhead_10_nuclear, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(WEAPONSTEEL.plate(), 16), new OreDictStack(PU239.billet(), 2), new OreDictStack(OreDictManager.getReflector(), 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER))); + this.register(new GenericRecipe("ass.mpw10nukelarge").setup(200, 100).outputItems(new ItemStack(ModItems.mp_warhead_10_nuclear_large, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(WEAPONSTEEL.plate(), 16), new OreDictStack(PU239.billet(), 6), new OreDictStack(OreDictManager.getReflector(), 8), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 12), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER))); + this.register(new GenericRecipe("ass.mpw10taint").setup(100, 100).outputItems(new ItemStack(ModItems.mp_warhead_10_taint, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.powder_magic, 12), new OreDictStack(Fluids.WATZ.getDict(1_000), 1))); + this.register(new GenericRecipe("ass.mpw10cloud").setup(100, 100).outputItems(new ItemStack(ModItems.mp_warhead_10_cloud, 1)) + .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.grenade_pink_cloud, 2))); + this.register(new GenericRecipe("ass.mpw15he").setup(200, 100).outputItems(new ItemStack(ModItems.mp_warhead_15_he, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 12), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.mpw15inc").setup(200, 100).outputItems(new ItemStack(ModItems.mp_warhead_15_incendiary, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 12), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new OreDictStack(P_RED.dust(), 16), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.mpw15nuke").setup(400, 100).outputItems(new ItemStack(ModItems.mp_warhead_15_nuclear, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(WEAPONSTEEL.plate(), 32), new OreDictStack(PU239.billet(), 12), new OreDictStack(OreDictManager.getReflector(), 12), new ComparableStack(ModItems.ball_tatb, 24), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER))); + this.register(new GenericRecipe("ass.mpw15n2").setup(400, 100).outputItems(new ItemStack(ModItems.mp_warhead_15_n2, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(WEAPONSTEEL.plate(), 32), new ComparableStack(ModItems.ball_tatb, 32), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.mpw15bf").setup(400, 100).outputItems(new ItemStack(ModItems.mp_warhead_15_balefire, 1)) + .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(WEAPONSTEEL.plate(), 32), new OreDictStack(OreDictManager.getReflector(), 16), new ComparableStack(ModItems.powder_magic, 8), new ComparableStack(ModItems.egg_balefire_shard, 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 16), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER))); + /* this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModItems., 1)) .inputItems()); diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index af47669a1..967fa3ace 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -205,7 +205,6 @@ public class ShredderRecipes extends SerializableRecipe { ShredderRecipes.setRecipe(Items.apple, new ItemStack(Items.sugar, 1)); ShredderRecipes.setRecipe(Items.carrot, new ItemStack(Items.sugar, 1)); ShredderRecipes.setRecipe(ModItems.can_empty, new ItemStack(ModItems.powder_aluminium, 2)); - ShredderRecipes.setRecipe(ModBlocks.machine_well, new ItemStack(ModItems.powder_steel, 32)); ShredderRecipes.setRecipe(DictFrame.fromOne(ModItems.chunk_ore, EnumChunkType.RARE), new ItemStack(ModItems.powder_desh_mix)); ShredderRecipes.setRecipe(Blocks.sand, new ItemStack(ModItems.dust, 2)); ShredderRecipes.setRecipe(ModBlocks.block_slag, new ItemStack(ModItems.powder_cement, 4)); @@ -285,7 +284,6 @@ public class ShredderRecipes extends SerializableRecipe { ShredderRecipes.setRecipe(ModBlocks.chain, new ItemStack(ModItems.powder_steel_tiny, 1)); ShredderRecipes.setRecipe(ModBlocks.steel_grate, new ItemStack(ModItems.powder_steel_tiny, 3)); ShredderRecipes.setRecipe(ModItems.pipes_steel, new ItemStack(ModItems.powder_steel, 27)); - ShredderRecipes.setRecipe(ModBlocks.machine_fluidtank, new ItemStack(ModItems.powder_steel, 16)); ShredderRecipes.setRecipe(new ItemStack(ModItems.bedrock_ore, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(Blocks.gravel)); /* Sellafite scrapping */ diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index a98931abb..291cc2341 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -215,9 +215,6 @@ public class AnvilRecipes extends SerializableRecipe { new AStack[] {new ComparableStack(ModItems.motor), new OreDictStack(ANY_PLASTIC.ingot(), 2), new OreDictStack(DESH.ingot(), 2), new ComparableStack(ModItems.coil_gold_torus)}, new AnvilOutput(new ItemStack(ModItems.motor_desh, 1))).setTier(3)); - pullFromAssembler(new ComparableStack(ModItems.filter_coal), 2); - pullFromAssembler(new ComparableStack(ModItems.thermo_element), 2); - constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] { new ComparableStack(Blocks.stonebrick, 4), @@ -226,13 +223,14 @@ public class AnvilRecipes extends SerializableRecipe { }, new AnvilOutput(new ItemStack(ModBlocks.machine_difurnace_off))).setTier(1)); - int ukModifier = 1; + boolean exp = GeneralConfig.enableExpensiveMode; + constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] { - new OreDictStack(STEEL.ingot(), 8 * ukModifier), - new OreDictStack(CU.plate(), 4 * ukModifier), - new ComparableStack(ModItems.motor, 2 * ukModifier), - new ComparableStack(ModItems.circuit, 4 * ukModifier, EnumCircuitType.VACUUM_TUBE.ordinal()) + new OreDictStack(STEEL.ingot(), 8), + new OreDictStack(CU.plate(), 4), + new ComparableStack(ModItems.motor, 2), + exp ? new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ANALOG) : new ComparableStack(ModItems.circuit, 4, EnumCircuitType.VACUUM_TUBE) }, new AnvilOutput(new ItemStack(ModBlocks.machine_assembly_machine))).setTier(2)); constructionRecipes.add(new AnvilConstructionRecipe( @@ -405,8 +403,6 @@ public class AnvilRecipes extends SerializableRecipe { new ComparableStack(ModItems.sawblade) }, new AnvilOutput(new ItemStack(ModBlocks.machine_autosaw))).setTier(2)); - pullFromAssembler(new ComparableStack(ModBlocks.machine_diesel), 2); - /*constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] { new OreDictStack(STEEL.ingot(), 6), @@ -546,8 +542,6 @@ public class AnvilRecipes extends SerializableRecipe { new AStack[] {new ComparableStack(ModItems.plate_dineutronium, 4), new ComparableStack(ModItems.particle_sparkticle, 1), new ComparableStack(ModItems.plate_armor_fau, 6)}, new AnvilOutput(new ItemStack(ModItems.plate_armor_dnt))).setTier(7)); - pullFromAssembler(new ComparableStack(ModItems.plate_mixed, 4), 3); - constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] { new ComparableStack(ModItems.missile_doomsday_rusted, 1), @@ -594,37 +588,9 @@ public class AnvilRecipes extends SerializableRecipe { constructionRecipes.add(new AnvilConstructionRecipe(new AStack[]{new ComparableStack(ModItems.mold_base), new OreDictStack(STEEL.ingot(), 4)}, new AnvilOutput(new ItemStack(ModItems.mold, 1, 26))).setTier(2)); constructionRecipes.add(new AnvilConstructionRecipe(new AStack[]{new ComparableStack(ModItems.mold_base), new OreDictStack(STEEL.ingot(), 4)}, new AnvilOutput(new ItemStack(ModItems.mold, 1, 27))).setTier(2)); constructionRecipes.add(new AnvilConstructionRecipe(new AStack[]{new ComparableStack(ModItems.mold_base), new OreDictStack(STEEL.ingot(), 4)}, new AnvilOutput(new ItemStack(ModItems.mold, 1, 28))).setTier(2)); - - pullFromAssembler(new ComparableStack(ModItems.pellet_buckshot), 1); } - public static void registerConstructionUpgrades() { - pullFromAssembler(new ComparableStack(ModItems.upgrade_template), 2); - pullFromAssembler(new ComparableStack(ModItems.upgrade_speed_1), 2); - pullFromAssembler(new ComparableStack(ModItems.upgrade_speed_2), 3); - pullFromAssembler(new ComparableStack(ModItems.upgrade_speed_3), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_power_1), 2); - pullFromAssembler(new ComparableStack(ModItems.upgrade_power_2), 3); - pullFromAssembler(new ComparableStack(ModItems.upgrade_power_3), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_effect_1), 2); - pullFromAssembler(new ComparableStack(ModItems.upgrade_effect_2), 3); - pullFromAssembler(new ComparableStack(ModItems.upgrade_effect_3), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_fortune_1), 2); - pullFromAssembler(new ComparableStack(ModItems.upgrade_fortune_2), 3); - pullFromAssembler(new ComparableStack(ModItems.upgrade_fortune_3), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_afterburn_1), 2); - pullFromAssembler(new ComparableStack(ModItems.upgrade_afterburn_2), 3); - pullFromAssembler(new ComparableStack(ModItems.upgrade_afterburn_3), 4); - - pullFromAssembler(new ComparableStack(ModItems.upgrade_radius), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_health), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_smelter), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_shredder), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_centrifuge), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_crystallizer), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_nullifier), 4); - pullFromAssembler(new ComparableStack(ModItems.upgrade_screm), 4); - } + public static void registerConstructionUpgrades() { } public static void registerConstructionRecycling() { diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 564938092..0b41f634a 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -59,7 +59,7 @@ public class GenericRecipe { public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } - public GenericRecipe inputItemsEx(AStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } + public GenericRecipe inputItemsEx(AStack... input) { if(GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; } public GenericRecipe inputFluidsEx(FluidStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputFluid = input; return this; } public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; } diff --git a/src/main/java/com/hbm/items/ItemEnums.java b/src/main/java/com/hbm/items/ItemEnums.java index e8692cd67..560823508 100644 --- a/src/main/java/com/hbm/items/ItemEnums.java +++ b/src/main/java/com/hbm/items/ItemEnums.java @@ -92,6 +92,6 @@ public class ItemEnums { } public static enum EnumExpensiveType { - STEEL_PLATING, HEAVY_FRAME, LEAD_PLATING, FERRO_PLATING, BRONZE_TUBES + STEEL_PLATING, HEAVY_FRAME, CIRCUIT, LEAD_PLATING, FERRO_PLATING, COMPUTER, BRONZE_TUBES } } diff --git a/src/main/java/com/hbm/util/AchievementHandler.java b/src/main/java/com/hbm/util/AchievementHandler.java index 4ad24e8f4..8ffbb48e8 100644 --- a/src/main/java/com/hbm/util/AchievementHandler.java +++ b/src/main/java/com/hbm/util/AchievementHandler.java @@ -47,7 +47,7 @@ public class AchievementHandler { craftingAchievements.put(new ComparableStack(ModItems.mp_warhead_15_boxcar), MainRegistry.achRedBalloons); craftingAchievements.put(new ComparableStack(ModBlocks.struct_iter_core), MainRegistry.achFusion); craftingAchievements.put(new ComparableStack(ModBlocks.machine_difurnace_off), MainRegistry.achBlastFurnace); - craftingAchievements.put(new ComparableStack(ModBlocks.machine_assembler), MainRegistry.achAssembly); + craftingAchievements.put(new ComparableStack(ModBlocks.machine_assembly_machine), MainRegistry.achAssembly); craftingAchievements.put(new ComparableStack(ModItems.billet_pu_mix), MainRegistry.achChicagoPile); } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index deddc496a..7db6f3284 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2352,6 +2352,8 @@ item.insert_steel.name=Schwere Stahleinlage item.insert_xsapi.name=XSAPI-Einlage item.insert_yharonite.name=Yharoniteinlage item.item_expensive.bronze_tubes.name=Bronze-Strukturelement +item.item_expensive.circuit.name=Umfangreiche Platine +item.item_expensive.computer.name=Großrechner item.item_expensive.ferro_plating.name=Verstärkte Ferrouraniumpanele item.item_expensive.heavy_frame.name=Schweres Gestell item.item_expensive.lead_plating.name=Strahlenresistente Plattierung diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e17773efa..d5875f121 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3178,6 +3178,8 @@ item.insert_steel.name=Heavy Steel Insert item.insert_xsapi.name=XSAPI Insert item.insert_yharonite.name=Yharonite Insert item.item_expensive.bronze_tubes.name=Bronze Structural Elements +item.item_expensive.circuit.name=Extensive Circuit Board +item.item_expensive.computer.name=Mainframe item.item_expensive.ferro_plating.name=Reinforced Ferrouranium Panels item.item_expensive.heavy_frame.name=Heavy Framework item.item_expensive.lead_plating.name=Radiation Resistant Plating diff --git a/src/main/resources/assets/hbm/textures/items/item_expensive.circuit.png b/src/main/resources/assets/hbm/textures/items/item_expensive.circuit.png new file mode 100644 index 0000000000000000000000000000000000000000..9620c75357d94e17c03da2770fe550a948535ac4 GIT binary patch literal 422 zcmV;X0a^ZuP)}t>AbH1s7bX#em!2ou!WQzq-mPcFbt__+REB63@JOv zVG9|}rU075GODAplMt;d`hvaMw2I?6=!5VI(4PxD7W)+P&|ohfXiJL*W?Xl2UAPU; z_5_Nn9DIyMc%Fyv`_vVkaiXqGt8{YRB?n5B!M6defIWfYaX7o+z$*3PO?5@5Ev+z% zi)~!jMF_#>6+dKfY2v#s6`}EZV^KNNNT(GtnfZ3B)LTCTAtrd9hY%v}|9J*#Nj QCIA2c07*qoM6N<$g0e=t?f?J) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/item_expensive.computer.png b/src/main/resources/assets/hbm/textures/items/item_expensive.computer.png new file mode 100644 index 0000000000000000000000000000000000000000..7c14b82edde3b45a066168e18e22eb0cfe9796dd GIT binary patch literal 289 zcmV++0p9+JP)hnD>?FzsJw n@O^`12G4%s4!>le!XK$CVXKyo9SBlC00000NkvXXu0mjfjN5Xl literal 0 HcmV?d00001 From ef3397ddb11122524874fe6e36728195f978f197 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Wed, 30 Jul 2025 14:55:18 -0600 Subject: [PATCH 325/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 7a4c66d7e..9beb5c345 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2007,47 +2007,47 @@ item.ammo_standard.g40_he.name=40мм граната (Фугасная) item.ammo_standard.g40_heat.name=40мм граната (Кумулятивная) item.ammo_standard.g40_inc.name=40мм граната (Зажигательная) item.ammo_standard.g40_phosphorus.name=40мм граната (Белый фосфор) -item.ammo_standard.m357_ap.name=.357 magnum (Бронебойный) -item.ammo_standard.m357_bp.name=.357 magnum (Чёрный порох) -item.ammo_standard.m357_express.name=.357 magnum (Высокомощная цельнометаллическая оболочка) -item.ammo_standard.m357_fmj.name=.357 magnum (Цельнометаллическая оболочка) -item.ammo_standard.m357_jhp.name=.357 magnum (Экспансивный+) -item.ammo_standard.m357_sp.name=.357 magnum (Экспансивный) -item.ammo_standard.m44_ap.name=.44 magnum (Бронебойный) -item.ammo_standard.m44_bp.name=.44 magnum (Чёрный порох) -item.ammo_standard.m44_express.name=.44 magnum (Высокомощная цельнометаллическая оболочка) -item.ammo_standard.m44_fmj.name=.44 magnum (Цельнометаллическая оболочка) -item.ammo_standard.m44_jhp.name=.44 magnum (Экспансивный+) -item.ammo_standard.m44_sp.name=.44 magnum (Экспансивный) +item.ammo_standard.m357_ap.name=Патрон .357 магнум (Бронебойный) +item.ammo_standard.m357_bp.name=Патрон .357 магнум (Чёрный порох) +item.ammo_standard.m357_express.name=Патрон .357 магнум (Высокомощная цельнометаллическая оболочка) +item.ammo_standard.m357_fmj.name=Патрон .357 магнум (Цельнометаллическая оболочка) +item.ammo_standard.m357_jhp.name=Патрон .357 магнум (Экспансивный+) +item.ammo_standard.m357_sp.name=Патрон .357 магнум (Экспансивный) +item.ammo_standard.m44_ap.name=Патрон .44 магнум (Бронебойный) +item.ammo_standard.m44_bp.name=Патрон .44 магнум (Чёрный порох) +item.ammo_standard.m44_express.name=Патрон .44 магнум (Высокомощная цельнометаллическая оболочка) +item.ammo_standard.m44_fmj.name=Патрон .44 магнум (Цельнометаллическая оболочка) +item.ammo_standard.m44_jhp.name=Патрон .44 магнум (Экспансивный+) +item.ammo_standard.m44_sp.name=Патрон .44 магнум (Экспансивный) item.ammo_standard.nuke_balefire.name=Ядерный минизаряд (Жар-яйцо) item.ammo_standard.nuke_demo.name=Ядерный минизаряд (Разрушающий) item.ammo_standard.nuke_high.name=Ядерный минизаряд (Высокомощный) item.ammo_standard.nuke_hive.name=Ракетный рой item.ammo_standard.nuke_standard.name=Ядерный минизаряд item.ammo_standard.nuke_tots.name=Ядерный минизаряд (Карапузы) -item.ammo_standard.p22_ap.name=.22 LR патрон (Бронебойный) -item.ammo_standard.p22_fmj.name=.22 LR патрон (Цельнометаллическая оболочка) -item.ammo_standard.p22_jhp.name=.22 LR патрон (Экспансивный+) -item.ammo_standard.p22_sp.name=.22 LR патрон (Экспансивный) -item.ammo_standard.p45_ap.name=.45 патрон (Бронебойный) -item.ammo_standard.p45_du.name=.45 патрон (Depleted Uranium) -item.ammo_standard.p45_fmj.name=.45 патрон (Цельнометаллическая оболочка) -item.ammo_standard.p45_jhp.name=.45 патрон (Экспансивный+) -item.ammo_standard.p45_sp.name=.45 патрон (Экспансивный) -item.ammo_standard.p9_ap.name=9мм патрон (Бронебойный) -item.ammo_standard.p9_fmj.name=9мм патрон (Цельнометаллическая оболочка) -item.ammo_standard.p9_jhp.name=9мм патрон (Экспансивный+) -item.ammo_standard.p9_sp.name=9мм патрон (Экспансивный) -item.ammo_standard.r556_ap.name=5.56мм патрон (Бронебойный) -item.ammo_standard.r556_fmj.name=5.56мм патрон (Цельнометаллическая оболочка) -item.ammo_standard.r556_jhp.name=5.56мм патрон (Экспансивный+) -item.ammo_standard.r556_sp.name=5.56мм патрон (Экспансивный) -item.ammo_standard.r762_ap.name=7.62мм патрон (Бронебойный) -item.ammo_standard.r762_du.name=7.62мм патрон (Обеднённый уран) -item.ammo_standard.r762_fmj.name=7.62мм патрон (Цельнометаллическая оболочка) -item.ammo_standard.r762_he.name=7.62mm патрон (Разрывной) -item.ammo_standard.r762_jhp.name=7.62мм патрон (Экспансивный+) -item.ammo_standard.r762_sp.name=7.62мм патрон (Экспансивный) +item.ammo_standard.p22_ap.name=Патрон .22 LR (Бронебойный) +item.ammo_standard.p22_fmj.name=Патрон .22 LR (Цельнометаллическая оболочка) +item.ammo_standard.p22_jhp.name=Патрон .22 LR (Экспансивный+) +item.ammo_standard.p22_sp.name=Патрон .22 LR (Экспансивный) +item.ammo_standard.p45_ap.name=Патрон .45 (Бронебойный) +item.ammo_standard.p45_du.name=Патрон .45 (Depleted Uranium) +item.ammo_standard.p45_fmj.name=Патрон .45 (Цельнометаллическая оболочка) +item.ammo_standard.p45_jhp.name=Патрон .45 (Экспансивный+) +item.ammo_standard.p45_sp.name=Патрон .45 (Экспансивный) +item.ammo_standard.p9_ap.name=9мм-ый патрон (Бронебойный) +item.ammo_standard.p9_fmj.name=9мм-ый патрон (Цельнометаллическая оболочка) +item.ammo_standard.p9_jhp.name=9мм-ый патрон (Экспансивный+) +item.ammo_standard.p9_sp.name=9мм-ый патрон (Экспансивный) +item.ammo_standard.r556_ap.name=Патрон 5.56мм (Бронебойный) +item.ammo_standard.r556_fmj.name=Патрон 5.56мм (Цельнометаллическая оболочка) +item.ammo_standard.r556_jhp.name=Патрон 5.56мм (Экспансивный+) +item.ammo_standard.r556_sp.name=Патрон 5.56мм (Экспансивный) +item.ammo_standard.r762_ap.name=Патрон 7.62мм (Бронебойный) +item.ammo_standard.r762_du.name=Патрон 7.62мм (Обеднённый уран) +item.ammo_standard.r762_fmj.name=Патрон 7.62мм (Цельнометаллическая оболочка) +item.ammo_standard.r762_he.name=Патрон 7.62мм (Разрывной) +item.ammo_standard.r762_jhp.name=Патрон 7.62мм (Экспансивный+) +item.ammo_standard.r762_sp.name=Патрон 7.62мм (Экспансивный) item.ammo_standard.rocket_demo.name=Ракета (Разрушающая) item.ammo_standard.rocket_he.name=Ракета (Фугасная) item.ammo_standard.rocket_heat.name=Ракета (Кумулятивная) From 423cbbcf79db714299ad072676cfc60183229ef5 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Wed, 30 Jul 2025 15:06:04 -0600 Subject: [PATCH 326/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 9beb5c345..aa9e0f27e 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2030,7 +2030,7 @@ item.ammo_standard.p22_fmj.name=Патрон .22 LR (Цельнометалли item.ammo_standard.p22_jhp.name=Патрон .22 LR (Экспансивный+) item.ammo_standard.p22_sp.name=Патрон .22 LR (Экспансивный) item.ammo_standard.p45_ap.name=Патрон .45 (Бронебойный) -item.ammo_standard.p45_du.name=Патрон .45 (Depleted Uranium) +item.ammo_standard.p45_du.name=Патрон .45 (Обеднённый уран) item.ammo_standard.p45_fmj.name=Патрон .45 (Цельнометаллическая оболочка) item.ammo_standard.p45_jhp.name=Патрон .45 (Экспансивный+) item.ammo_standard.p45_sp.name=Патрон .45 (Экспансивный) From ddc6e42f556ca45cff4b8730f9258b5e76f89ef5 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Thu, 31 Jul 2025 09:24:06 -0600 Subject: [PATCH 327/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index aa9e0f27e..1fbcb897b 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -3436,6 +3436,13 @@ item.insert_polonium.name=Полониевая пластина item.insert_steel.name=Тяжёлостальные пластины item.insert_xsapi.name=XSAPI пластины item.insert_yharonite.name=Яронитовая пластина +item.item_expensive.bronze_tubes.name=Бронзовые конструкционные элементы +item.item_expensive.circuit.name=Обширная печатная плата +item.item_expensive.computer.name=Мейнфрейм +item.item_expensive.ferro_plating.name=Армированные ферроураниевые панели +item.item_expensive.heavy_frame.name=Тяжелый каркас +item.item_expensive.lead_plating.name=Радиационно-стойкое покрытие +item.item_expensive.steel_plating.name=Стальная обшивка с болтовым соединением item.item_secret.aberrator.name=Часть Аберратора item.item_secret.canister.name=Композит SB-26 item.item_secret.controller.name=Проприетарный блок управления From 737c56ed07e63fa0e4b4cb689c5ab5c7d7687f1f Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 31 Jul 2025 21:49:31 +0200 Subject: [PATCH 328/491] PUREX --- changelog | 5 + src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../com/hbm/blocks/machine/MachinePUREX.java | 54 +++ .../hbm/handler/nei/PUREXRecipeHandler.java | 13 + .../container/ContainerMachinePUREX.java | 74 +++ .../hbm/inventory/gui/GUIMachinePUREX.java | 126 +++++ .../inventory/recipes/CentrifugeRecipes.java | 224 --------- .../recipes/ChemicalPlantRecipes.java | 23 - .../hbm/inventory/recipes/PUREXRecipes.java | 436 ++++++++++++++++++ .../recipes/loader/GenericRecipe.java | 21 +- .../recipes/loader/GenericRecipes.java | 4 +- .../recipes/loader/SerializableRecipe.java | 1 + src/main/java/com/hbm/main/ClientProxy.java | 1 + src/main/java/com/hbm/main/NEIRegistry.java | 1 + .../java/com/hbm/main/ResourceManager.java | 14 +- .../module/machine/ModuleMachinePUREX.java | 29 ++ .../hbm/render/tileentity/RenderPUREX.java | 82 ++++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityMachinePUREX.java | 278 +++++++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../hbm/textures/gui/processing/gui_purex.png | Bin 0 -> 3235 bytes 22 files changed, 1136 insertions(+), 258 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachinePUREX.java create mode 100644 src/main/java/com/hbm/handler/nei/PUREXRecipeHandler.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachinePUREX.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java create mode 100644 src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java create mode 100644 src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderPUREX.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_purex.png diff --git a/changelog b/changelog index a2b6a0de9..8e403af29 100644 --- a/changelog +++ b/changelog @@ -10,6 +10,11 @@ * Rebar placer * Can be configured with different types of concrete, reinforced or not, or even colored * Rebar created with the rebar placer will remember its type and assume it when being filled with liquid concrete +* PUREX + * Chemplant-like nuclear fuel reprocessing machine + * Handles all the nuclear fuel reprocessing that was previously done by the standard centrifuge + * All reprocessing recipes now require both kerosene and nitric acid + * Also handles the vitrification recipes and the thorium salt reprocessing from the chemical plant ## Changed * The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index f9d312fa8..8e08eac42 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1015,6 +1015,7 @@ public class ModBlocks { public static Block machine_chemical_plant; public static Block machine_chemfac; public static Block machine_chemical_factory; + public static Block machine_purex; public static Block machine_mixer; public static Block machine_fluidtank; @@ -2245,6 +2246,7 @@ public class ModBlocks { machine_chemical_plant = new MachineChemicalPlant(Material.iron).setBlockName("machine_chemical_plant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemfac = new MachineChemfac(Material.iron).setBlockName("machine_chemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemical_factory = new MachineChemicalFactory(Material.iron).setBlockName("machine_chemical_factory").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_purex = new MachinePUREX(Material.iron).setBlockName("machine_purex").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_mixer = new MachineMixer(Material.iron).setBlockName("machine_mixer").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_fluidtank = new MachineFluidTank(Material.iron).setBlockName("machine_fluidtank").setHardness(5.0F).setResistance(20.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_fluidtank"); machine_bat9000 = new MachineBigAssTank9000(Material.iron).setBlockName("machine_bat9000").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3299,6 +3301,7 @@ public class ModBlocks { register(machine_chemical_plant); register(machine_chemfac); register(machine_chemical_factory); + register(machine_purex); register(machine_arc_welder); register(machine_soldering_station); register(machine_arc_furnace); diff --git a/src/main/java/com/hbm/blocks/machine/MachinePUREX.java b/src/main/java/com/hbm/blocks/machine/MachinePUREX.java new file mode 100644 index 000000000..461509da8 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachinePUREX.java @@ -0,0 +1,54 @@ +package com.hbm.blocks.machine; + +import java.util.List; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityMachinePUREX; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachinePUREX extends BlockDummyable implements ITooltipProvider { + + public MachinePUREX(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachinePUREX(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } + + @Override public int[] getDimensions() { return new int[] {4, 0, 2, 2, 2, 2}; } + @Override public int getOffset() { return 2; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x += dir.offsetX * o; + z += dir.offsetZ * o; + + for(int i = -2; i <= 2; i++) for(int j = -2; j <= 2; j++) { + if(Math.abs(i) == 2 || Math.abs(j) == 2) this.makeExtra(world, x + i, y, z + j); + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } +} diff --git a/src/main/java/com/hbm/handler/nei/PUREXRecipeHandler.java b/src/main/java/com/hbm/handler/nei/PUREXRecipeHandler.java new file mode 100644 index 000000000..c5405fbf0 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/PUREXRecipeHandler.java @@ -0,0 +1,13 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.PUREXRecipes; + +public class PUREXRecipeHandler extends NEIGenericRecipeHandler { + + public PUREXRecipeHandler() { + super(ModBlocks.machine_purex.getLocalizedName(), PUREXRecipes.INSTANCE, ModBlocks.machine_purex); + } + + @Override public String getRecipeID() { return "ntmPUREX"; } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachinePUREX.java b/src/main/java/com/hbm/inventory/container/ContainerMachinePUREX.java new file mode 100644 index 000000000..4b28d9da9 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachinePUREX.java @@ -0,0 +1,74 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.util.InventoryUtil; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachinePUREX extends ContainerBase { + + public ContainerMachinePUREX(InventoryPlayer invPlayer, IInventory chemicalPlant) { + super(invPlayer, chemicalPlant); + + // Battery + this.addSlotToContainer(new SlotNonRetarded(chemicalPlant, 0, 152, 81)); + // Schematic + this.addSlotToContainer(new SlotNonRetarded(chemicalPlant, 1, 35, 126)); + // Upgrades + this.addSlots(chemicalPlant, 2, 152, 108, 2, 1); + // Solid Input + this.addSlots(chemicalPlant, 4, 8, 90, 1, 3); + // Solid Output + this.addOutputSlots(invPlayer.player, chemicalPlant, 7, 80, 36, 3, 2); + + this.playerInv(invPlayer, 8, 174); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack slotOriginal = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + slotOriginal = slotStack.copy(); + + if(index <= tile.getSizeInventory() - 1) { + SlotCraftingOutput.checkAchievements(player, slotStack); + if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { + if(!this.mergeItemStack(slotStack, 2, 4, false)) return null; + } else { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 4, 7, false)) return null; + } + } + + if(slotStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, slotStack); + } + + return slotOriginal; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java b/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java new file mode 100644 index 000000000..3cb1b0108 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java @@ -0,0 +1,126 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachinePUREX; +import com.hbm.inventory.recipes.PUREXRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachinePUREX; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUIMachinePUREX extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_purex.png"); + private TileEntityMachinePUREX purex; + + public GUIMachinePUREX(InventoryPlayer invPlayer, TileEntityMachinePUREX tedf) { + super(new ContainerMachinePUREX(invPlayer, tedf)); + purex = tedf; + + this.xSize = 176; + this.ySize = 256; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + for(int i = 0; i < 3; i++) { + purex.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 8 + i * 18, guiTop + 18, 16, 52); + } + purex.outputTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 116, guiTop + 36, 16, 52); + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, purex.power, purex.maxPower); + + if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { + if(this.purex.purexModule.recipe != null && PUREXRecipes.INSTANCE.recipeNameMap.containsKey(this.purex.purexModule.recipe)) { + GenericRecipe recipe = (GenericRecipe) PUREXRecipes.INSTANCE.recipeNameMap.get(this.purex.purexModule.recipe); + this.func_146283_a(recipe.print(), mouseX, mouseY); + } else { + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); + } + } + } + + @Override + protected void mouseClicked(int x, int y, int button) { + super.mouseClicked(x, y, button); + + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(PUREXRecipes.INSTANCE, purex, purex.purexModule.recipe, 0, ItemBlueprints.grabPool(purex.slots[1]), this); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.purex.hasCustomInventoryName() ? this.purex.getInventoryName() : I18n.format(this.purex.getInventoryName()); + + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int p = (int) (purex.power * 61 / purex.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); + + if(purex.purexModule.progress > 0) { + int j = (int) Math.ceil(70 * purex.purexModule.progress); + drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); + } + + GenericRecipe recipe = PUREXRecipes.INSTANCE.recipeNameMap.get(purex.purexModule.recipe); + + /// LEFT LED + if(purex.didProcess) { + drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6); + } else if(recipe != null) { + drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6); + } + + /// RIGHT LED + if(purex.didProcess) { + drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6); + } else if(recipe != null && purex.power >= recipe.power) { + drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6); + } + + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); + + if(recipe != null && recipe.inputItem != null) { + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(purex.purexModule.inputSlots[i]); + if(!slot.getHasStack()) this.renderItem(recipe.inputItem[i].extractForCyclingDisplay(20), slot.xDisplayPosition, slot.yDisplayPosition, 10F); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(1F, 1F, 1F, 0.5F); + GL11.glEnable(GL11.GL_BLEND); + this.zLevel = 300F; + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(purex.purexModule.inputSlots[i]); + if(!slot.getHasStack()) drawTexturedModalRect(guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, slot.xDisplayPosition, slot.yDisplayPosition, 16, 16); + } + this.zLevel = 0F; + GL11.glColor4f(1F, 1F, 1F, 1F); + GL11.glDisable(GL11.GL_BLEND); + } + + for(int i = 0; i < 3; i++) { + purex.inputTanks[i].renderTank(guiLeft + 8 + i * 18, guiTop + 70, this.zLevel, 16, 52); + } + purex.outputTanks[0].renderTank(guiLeft + 116, guiTop + 88, this.zLevel, 16, 52); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index 027efb67d..c3927a396 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -26,7 +26,6 @@ import com.hbm.items.ItemEnums; import com.hbm.items.ItemEnums.EnumAshType; import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.special.ItemBedrockOreNew; import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; @@ -50,229 +49,6 @@ public class CentrifugeRecipes extends SerializableRecipe { boolean lbs = GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleCentrifuge; - recipes.put(new ComparableStack(ModItems.waste_natural_uranium), new ItemStack[] { - new ItemStack(ModItems.nugget_u238, 1), - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_pu239, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 2) }); - - recipes.put(new ComparableStack(ModItems.waste_uranium), new ItemStack[] { - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_plutonium, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 2) }); - - 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, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 2) }); - - recipes.put(new ComparableStack(ModItems.waste_mox), new ItemStack[] { - new ItemStack(ModItems.nugget_pu_mix, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nugget_u238, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - - recipes.put(new ComparableStack(ModItems.waste_plutonium), new ItemStack[] { - new ItemStack(ModItems.nugget_pu_mix, 1), - new ItemStack(ModItems.nugget_pu_mix, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - - recipes.put(new ComparableStack(ModItems.waste_u233), new ItemStack[] { - new ItemStack(ModItems.nugget_u235, 1), - new ItemStack(ModItems.nugget_neptunium, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - - recipes.put(new ComparableStack(ModItems.waste_u235), new ItemStack[] { - new ItemStack(ModItems.nugget_pu238, 1), - new ItemStack(ModItems.nugget_neptunium, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - - recipes.put(new ComparableStack(ModItems.waste_schrabidium), new ItemStack[] { - new ItemStack(ModItems.nugget_beryllium, 2), - new ItemStack(ModItems.nugget_pu239, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 2) }); - - recipes.put(new ComparableStack(ModItems.waste_zfb_mox), new ItemStack[] { - new ItemStack(ModItems.nugget_zirconium, 3), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nugget_pu_mix, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 1) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_mox), new ItemStack[] { - new ItemStack(ModItems.powder_sr90_tiny, 1), - new ItemStack(ModItems.nugget_pu_mix, 3), - new ItemStack(ModItems.powder_cs137_tiny, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 4) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_pu238be), new ItemStack[] { - new ItemStack(ModItems.nugget_beryllium, 1), - new ItemStack(ModItems.nugget_pu238, 1), - new ItemStack(ModItems.powder_coal_tiny, 2), - new ItemStack(ModItems.nugget_lead, 2) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_pu239), new ItemStack[] { - new ItemStack(ModItems.nugget_pu240, 2), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.powder_cs137_tiny, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 5) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_ra226be), new ItemStack[] { - new ItemStack(ModItems.nugget_beryllium, 2), - new ItemStack(ModItems.nugget_polonium, 2), - new ItemStack(ModItems.powder_coal_tiny, 1), - new ItemStack(ModItems.nugget_lead, 1) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_sa326), new ItemStack[] { - new ItemStack(ModItems.nugget_solinium, 1), - new ItemStack(ModItems.powder_neodymium_tiny, 1), - new ItemStack(ModItems.nugget_tantalium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_u233), new ItemStack[] { - new ItemStack(ModItems.nugget_u235, 1), - new ItemStack(ModItems.powder_i131_tiny, 1), - new ItemStack(ModItems.powder_sr90_tiny, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - - recipes.put(new ComparableStack(ModItems.waste_plate_u235), new ItemStack[] { - new ItemStack(ModItems.nugget_neptunium, 1), - new ItemStack(ModItems.nugget_pu238, 1), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.SCHRABIDIUM)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_solinium, 15), - new ItemStack(ModItems.nugget_euphemium, 3), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.HES)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_solinium, 17), - new ItemStack(ModItems.nugget_euphemium, 1), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MES)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_solinium, 12), - new ItemStack(ModItems.nugget_tantalium, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.LES)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_solinium, 9), - new ItemStack(ModItems.nugget_tantalium, 9), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.HEN)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_pu239, 12), - new ItemStack(ModItems.nugget_technetium, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MEU)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_pu239, 12), - new ItemStack(ModItems.nugget_bismuth, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MEP)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_pu241, 12), - new ItemStack(ModItems.nugget_bismuth, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.LEAD)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_lead, 6), - new ItemStack(ModItems.nugget_bismuth, 12), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.BORON)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.powder_coal_tiny, 12), - new ItemStack(ModItems.nugget_co60, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.DU)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_polonium, 12), - new ItemStack(ModItems.nugget_pu238, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEU)), new ItemStack[] { - new ItemStack(ModItems.nugget_u238, 3), - new ItemStack(ModItems.nugget_plutonium, 4), - new ItemStack(ModItems.nugget_technetium, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEU233)), new ItemStack[] { - new ItemStack(ModItems.nugget_u235, 3), - new ItemStack(ModItems.nugget_pu238, 3), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 5) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEU235)), new ItemStack[] { - new ItemStack(ModItems.nugget_neptunium, 3), - new ItemStack(ModItems.nugget_pu238, 3), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 5) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEN)), new ItemStack[] { - new ItemStack(ModItems.nugget_u238, 3), - new ItemStack(ModItems.nugget_pu239, 4), - new ItemStack(ModItems.nugget_technetium, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEN237)), new ItemStack[] { - new ItemStack(ModItems.nugget_pu238, 2), - new ItemStack(ModItems.nugget_pu239, 4), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 5) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MOX)), new ItemStack[] { - new ItemStack(ModItems.nugget_u238, 3), - new ItemStack(ModItems.nugget_pu240, 4), - new ItemStack(ModItems.nugget_technetium, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEP)), new ItemStack[] { - new ItemStack(ModItems.nugget_lead, 2), - new ItemStack(ModItems.nugget_pu_mix, 4), - new ItemStack(ModItems.nugget_technetium, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEP239)), new ItemStack[] { - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_pu240, 4), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 5) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEP241)), new ItemStack[] { - new ItemStack(ModItems.nugget_lead, 3), - new ItemStack(ModItems.nugget_zirconium, 2), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEA)), new ItemStack[] { - new ItemStack(ModItems.nugget_lead, 3), - new ItemStack(ModItems.nugget_zirconium, 2), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEA242)), new ItemStack[] { - new ItemStack(ModItems.nugget_lead, 3), - new ItemStack(ModItems.nugget_zirconium, 2), - new ItemStack(ModItems.nugget_technetium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HES326)), new ItemStack[] { - new ItemStack(ModItems.nugget_solinium, 3), - new ItemStack(ModItems.nugget_lead, 2), - new ItemStack(ModItems.nugget_euphemium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HES327)), new ItemStack[] { - new ItemStack(ModItems.nugget_australium, 4), - new ItemStack(ModItems.nugget_lead, 1), - new ItemStack(ModItems.nugget_euphemium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 6) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.BFB_AM_MIX)), new ItemStack[] { - new ItemStack(ModItems.nugget_am_mix, 9), - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_bismuth, 6), - new ItemStack(ModItems.nuclear_waste_tiny, 1) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.BFB_PU241)), new ItemStack[] { - new ItemStack(ModItems.nugget_pu241, 9), - new ItemStack(ModItems.nugget_pu_mix, 2), - new ItemStack(ModItems.nugget_bismuth, 6), - new ItemStack(ModItems.nuclear_waste_tiny, 1) }); - recipes.put(new ComparableStack(ModItems.icf_pellet_depleted), new ItemStack[] { new ItemStack(ModItems.icf_pellet_empty, 1), new ItemStack(ModItems.pellet_charged, 1), diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index f3b759658..a5f5736b0 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -317,29 +317,6 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.KEROSENE, 6_000)) .outputItems(new ItemStack(ModItems.powder_balefire)) .outputFluids(new FluidStack(Fluids.BALEFIRE, 8_000))); - - this.register(new GenericRecipe("chem.thoriumsalt").setup(100, 10_000).setIcon(ModItems.fluid_icon, Fluids.THORIUM_SALT.getID()) - .inputFluids(new FluidStack(Fluids.THORIUM_SALT_DEPLETED, 16_000)) - .inputItems(new OreDictStack(TH232.nugget(), 2)) - .outputFluids(new FluidStack(Fluids.THORIUM_SALT, 16_000)) - .outputItems( - new ChanceOutput(new ItemStack(ModItems.nugget_u233, 1), 0.5F), - new ChanceOutput(new ItemStack(ModItems.nuclear_waste_tiny, 1), 0.25F))); - - /// VITRIFICATION /// - this.register(new GenericRecipe("chem.vitliquid").setup(100, 1_000) - .inputItems(new ComparableStack(ModBlocks.sand_lead)) - .inputFluids(new FluidStack(Fluids.WASTEFLUID, 1_000)) - .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); - - this.register(new GenericRecipe("chem.vitgaseous").setup(100, 1_000) - .inputItems(new ComparableStack(ModBlocks.sand_lead)) - .inputFluids(new FluidStack(Fluids.WASTEGAS, 1_000)) - .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); - - this.register(new GenericRecipe("chem.vitsolid").setup(300, 1_000) - .inputItems(new ComparableStack(ModBlocks.sand_lead), new ComparableStack(ModItems.nuclear_waste, 4)) - .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified, 4))); /// OSMIRIDIUM /// this.register(new GenericRecipe("chem.osmiridiumdeath").setup(240, 1_000) diff --git a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java new file mode 100644 index 000000000..65dd62fe8 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java @@ -0,0 +1,436 @@ +package com.hbm.inventory.recipes; + +import static com.hbm.inventory.OreDictManager.*; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; +import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; + +import net.minecraft.item.ItemStack; + +public class PUREXRecipes extends GenericRecipes { + + public static final PUREXRecipes INSTANCE = new PUREXRecipes(); + + @Override public int inputItemLimit() { return 3; } + @Override public int inputFluidLimit() { return 3; } + @Override public int outputItemLimit() { return 6; } + @Override public int outputFluidLimit() { return 1; } + + @Override public String getFileName() { return "hbmPUREX.json"; } + @Override public GenericRecipe instantiateRecipe(String name) { return new GenericRecipe(name); } + + @Override + public void registerDefaults() { + + long zirnoxPower = 1_000; + long platePower = 1_500; + long pwrPower = 2_500; + long watzPower = 10_000; + long vitrification = 1_000; + + // ZIRNOX + this.register(new GenericRecipe("purex.zirnoxnu").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_natural_uranium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 1), + new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_pu239, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 2)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_natural_uranium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 1), + new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_pu239, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 2)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxthmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_thorium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 1), + new ItemStack(ModItems.nugget_th232, 1), + new ItemStack(ModItems.nugget_u233, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 2)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_mox)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nugget_u238, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxmep").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plutonium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxheu233").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_u233)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u235, 1), + new ItemStack(ModItems.nugget_neptunium, 1), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxheu235").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_u235)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu238, 1), + new ItemStack(ModItems.nugget_neptunium, 1), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxles").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_schrabidium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_beryllium, 2), + new ItemStack(ModItems.nugget_pu239, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 2)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.zirnoxzfbmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_zfb_mox)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_zirconium, 3), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 1)) + .setIconToFirstIngredient()); + + // Plate Fuel + this.register(new GenericRecipe("purex.platemox").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_mox)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.powder_sr90_tiny, 1), + new ItemStack(ModItems.nugget_pu_mix, 3), + new ItemStack(ModItems.powder_cs137_tiny, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 4)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.platepu238be").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_pu238be)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_beryllium, 1), + new ItemStack(ModItems.nugget_pu238, 1), + new ItemStack(ModItems.powder_coal_tiny, 2), + new ItemStack(ModItems.nugget_lead, 2)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.platepu239").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_pu239)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu240, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.powder_cs137_tiny, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.platera226be").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_ra226be)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_beryllium, 2), + new ItemStack(ModItems.nugget_polonium, 2), + new ItemStack(ModItems.powder_coal_tiny, 1), + new ItemStack(ModItems.nugget_lead, 1)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.platesa326").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_sa326)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 1), + new ItemStack(ModItems.powder_neodymium_tiny, 1), + new ItemStack(ModItems.nugget_tantalium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.plateu233").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_u233)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u235, 1), + new ItemStack(ModItems.powder_i131_tiny, 1), + new ItemStack(ModItems.powder_sr90_tiny, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.plateu235").setup(100, platePower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.waste_plate_u235)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_neptunium, 1), + new ItemStack(ModItems.nugget_pu238, 1), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + // PWR + this.register(new GenericRecipe("purex.pwrmeu").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEU)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 3), + new ItemStack(ModItems.nugget_plutonium, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrheu233").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEU233)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u235, 3), + new ItemStack(ModItems.nugget_pu238, 3), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrheu235").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEU235)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_neptunium, 3), + new ItemStack(ModItems.nugget_pu238, 3), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrmen").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEN)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 3), + new ItemStack(ModItems.nugget_pu239, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhen237").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEN237)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu238, 2), + new ItemStack(ModItems.nugget_pu239, 4), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrmox").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MOX)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_u238, 3), + new ItemStack(ModItems.nugget_pu240, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrmep").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEP)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_lead, 2), + new ItemStack(ModItems.nugget_pu_mix, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhep239").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEP239)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_pu240, 4), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhep241").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEP241)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_lead, 3), + new ItemStack(ModItems.nugget_zirconium, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrmea").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEA)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_lead, 3), + new ItemStack(ModItems.nugget_zirconium, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhea242").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEA242)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_lead, 3), + new ItemStack(ModItems.nugget_zirconium, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhes326").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HES326)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 3), + new ItemStack(ModItems.nugget_lead, 2), + new ItemStack(ModItems.nugget_euphemium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrhes327").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HES327)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_australium, 4), + new ItemStack(ModItems.nugget_lead, 1), + new ItemStack(ModItems.nugget_euphemium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrbfbam").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.BFB_AM_MIX)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_am_mix, 9), + new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste_tiny, 1)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.pwrbfpu241").setup(100, pwrPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.BFB_PU241)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu241, 9), + new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste_tiny, 1)) + .setIconToFirstIngredient()); + + // Molten Salt + this.register(new GenericRecipe("purex.thoriumsalt").setup(100, 10_000).setIcon(ModItems.fluid_icon, Fluids.THORIUM_SALT.getID()) + .inputFluids(new FluidStack(Fluids.THORIUM_SALT_DEPLETED, 16_000)) + .inputItems(new OreDictStack(TH232.nugget(), 2)) + .outputFluids(new FluidStack(Fluids.THORIUM_SALT, 16_000)) + .outputItems( + new ChanceOutput(new ItemStack(ModItems.nugget_u233, 1), 0.5F), + new ChanceOutput(new ItemStack(ModItems.nuclear_waste_tiny, 1), 0.25F))); + + // Watz + this.register(new GenericRecipe("purex.watzschrab").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.SCHRABIDIUM)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 15), + new ItemStack(ModItems.nugget_euphemium, 3), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzhes").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.HES)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 17), + new ItemStack(ModItems.nugget_euphemium, 1), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzmes").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MES)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 12), + new ItemStack(ModItems.nugget_tantalium, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzles").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.LES)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_solinium, 9), + new ItemStack(ModItems.nugget_tantalium, 9), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzhen").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.HEN)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu239, 12), + new ItemStack(ModItems.nugget_technetium, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzmeu").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MEU)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu239, 12), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzmep").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MEP)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_pu241, 12), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzlead").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.LEAD)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_lead, 6), + new ItemStack(ModItems.nugget_bismuth, 12), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzboron").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.BORON)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.powder_coal_tiny, 12), + new ItemStack(ModItems.nugget_co60, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzdu").setup(60, watzPower).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.DU)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_polonium, 12), + new ItemStack(ModItems.nugget_pu238, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + /// Vitrification + this.register(new GenericRecipe("purex.vitliquid").setup(100, vitrification) + .inputItems(new ComparableStack(ModBlocks.sand_lead)) + .inputFluids(new FluidStack(Fluids.WASTEFLUID, 1_000)) + .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); + + this.register(new GenericRecipe("purex.vitgaseous").setup(100, vitrification) + .inputItems(new ComparableStack(ModBlocks.sand_lead)) + .inputFluids(new FluidStack(Fluids.WASTEGAS, 1_000)) + .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified))); + + this.register(new GenericRecipe("purex.vitsolid").setup(300, vitrification) + .inputItems(new ComparableStack(ModBlocks.sand_lead), new ComparableStack(ModItems.nuclear_waste, 4)) + .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified, 4))); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 0b41f634a..91a8d99a4 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -21,8 +21,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; public class GenericRecipe { - + protected final String name; + public String nameWrapper; public AStack[] inputItem; public FluidStack[] inputFluid; public IOutput[] outputItem; @@ -51,6 +52,7 @@ public class GenericRecipe { public GenericRecipe setPower(long power) { this.power = power; return this; } public GenericRecipe setup(int duration, long power) { return this.setDuration(duration).setPower(power); } public GenericRecipe setupNamed(int duration, long power) { return this.setDuration(duration).setPower(power).setNamed(); } + public GenericRecipe setNameWrapper(String wrapper) { this.nameWrapper = wrapper; return this; } public GenericRecipe setIcon(ItemStack icon) { this.icon = icon; this.writeIcon = true; return this; } public GenericRecipe setIcon(Item item, int meta) { return this.setIcon(new ItemStack(item, 1, meta)); } public GenericRecipe setIcon(Item item) { return this.setIcon(new ItemStack(item)); } @@ -59,7 +61,7 @@ public class GenericRecipe { public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } - public GenericRecipe inputItemsEx(AStack... input) { if(GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } + public GenericRecipe inputItemsEx(AStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; } public GenericRecipe inputFluidsEx(FluidStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputFluid = input; return this; } public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; } @@ -71,6 +73,14 @@ public class GenericRecipe { return this; } + public GenericRecipe setIconToFirstIngredient() { + if(this.inputItem != null) { + List stacks = this.inputItem[0].extractForNEI(); + if(!stacks.isEmpty()) this.icon = stacks.get(0); + } + return this; + } + public ItemStack getIcon() { if(icon == null) { @@ -93,8 +103,11 @@ public class GenericRecipe { } public String getLocalizedName() { - if(customLocalization) return I18nUtil.resolveKey(name); - return this.getIcon().getDisplayName(); + String name = null; + if(customLocalization) name = I18nUtil.resolveKey(this.name); + if(name == null) name = this.getIcon().getDisplayName(); + if(this.nameWrapper != null) name = I18nUtil.resolveKey(this.nameWrapper, name); + return name; } public List print() { diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 1cb5cadb2..2e92b67f6 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -103,6 +103,7 @@ public abstract class GenericRecipes extends Serializab if(obj.has("icon")) recipe.setIcon(this.readItemStack(obj.get("icon").getAsJsonArray())); if(obj.has("named") && obj.get("named").getAsBoolean()) recipe.setNamed(); if(obj.has("blueprintpool")) recipe.setPools(obj.get("blueprintpool").getAsString().split(":")); + if(obj.has("nameWrapper")) recipe.setNameWrapper(obj.get("nameWrapper").getAsString()); readExtraData(element, recipe); @@ -149,8 +150,9 @@ public abstract class GenericRecipes extends Serializab writer.name("icon"); this.writeItemStack(recipe.icon, writer); } - + if(recipe.customLocalization) writer.name("named").value(true); + if(recipe.nameWrapper != null) writer.name("nameWrapper").value(recipe.nameWrapper); if(recipe.blueprintPools != null && recipe.blueprintPools.length > 0) writer.name("blueprintpool").value(String.join(":", recipe.blueprintPools)); writeExtraData(recipe, writer); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 8fa127907..80567014d 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -85,6 +85,7 @@ public abstract class SerializableRecipe { //GENERIC recipeHandlers.add(AssemblyMachineRecipes.INSTANCE); recipeHandlers.add(ChemicalPlantRecipes.INSTANCE); + recipeHandlers.add(PUREXRecipes.INSTANCE); recipeHandlers.add(new MatDistribution()); recipeHandlers.add(new CustomMachineRecipes()); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 1661a221b..370772b1d 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -273,6 +273,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemicalPlant.class, new RenderChemicalPlant()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemfac.class, new RenderChemfac()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemicalFactory.class, new RenderChemicalFactory()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePUREX.class, new RenderPUREX()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineFluidTank.class, new RenderFluidTank()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineBAT9000.class, new RenderBAT9000()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineOrbus.class, new RenderOrbus()); diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index 4f0b96595..efc36e201 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -32,6 +32,7 @@ public class NEIRegistry { handlers.add(new ReformingHandler()); handlers.add(new HydrotreatingHandler()); handlers.add(new ChemicalPlantRecipeHandler()); + handlers.add(new PUREXRecipeHandler()); handlers.add(new OreSlopperHandler()); //before acidizing handlers.add(new CrystallizerRecipeHandler()); handlers.add(new BookRecipeHandler()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index fb125b628..5d0002948 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -140,18 +140,19 @@ public class ResourceManager { public static final IModelCustom assembler_cog = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/assembler_new_cog.obj")); public static final IModelCustom assembler_slider = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/assembler_new_slider.obj")); public static final IModelCustom assembler_arm = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/assembler_new_arm.obj")); - public static final IModelCustom assembly_machine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assembly_machine.obj")); - public static final IModelCustom assemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assemfac.obj")); + public static final IModelCustom assembly_machine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assembly_machine.obj")).asVBO(); + public static final IModelCustom assemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assemfac.obj")).asVBO(); //Chemplant - public static final IModelCustom chemplant_body = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_body.obj")); + public static final IModelCustom chemplant_body = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_body.obj")).asVBO(); public static final IModelCustom chemplant_spinner = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_spinner.obj")); public static final IModelCustom chemplant_piston = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_piston.obj")); public static final IModelCustom chemplant_fluid = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_fluid.hmf")); public static final IModelCustom chemplant_fluidcap = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_fluidcap.hmf")); - public static final IModelCustom chemical_plant = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_plant.obj")); - public static final IModelCustom chemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemfac.obj")); - public static final IModelCustom chemical_factory = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_factory.obj")); + public static final IModelCustom chemical_plant = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_plant.obj")).asVBO(); + public static final IModelCustom chemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemfac.obj")).asVBO(); + public static final IModelCustom chemical_factory = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_factory.obj")).asVBO(); + public static final IModelCustom purex = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/purex.obj")).asVBO(); //Mixer public static final IModelCustom mixer = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/mixer.obj")); @@ -587,6 +588,7 @@ public class ResourceManager { public static final ResourceLocation chemical_plant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant_fluid.png"); public static final ResourceLocation chemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemfac.png"); public static final ResourceLocation chemical_factory_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_factory.png"); + public static final ResourceLocation purex_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/purex.png"); //Mixer public static final ResourceLocation mixer_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/mixer.png"); diff --git a/src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java b/src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java new file mode 100644 index 000000000..afb8186d2 --- /dev/null +++ b/src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java @@ -0,0 +1,29 @@ +package com.hbm.module.machine; + +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.recipes.PUREXRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; + +import api.hbm.energymk2.IEnergyHandlerMK2; +import net.minecraft.item.ItemStack; + +public class ModuleMachinePUREX extends ModuleMachineBase { + + public ModuleMachinePUREX(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { + super(index, battery, slots); + this.inputSlots = new int[3]; + this.outputSlots = new int[6]; + this.inputTanks = new FluidTank[3]; + this.outputTanks = new FluidTank[1]; + } + + @Override + public GenericRecipe getRecipe() { + return PUREXRecipes.INSTANCE.recipeNameMap.get(this.recipe); + } + + public ModuleMachinePUREX itemInput(int start) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = start + i; return this; } + public ModuleMachinePUREX itemOutput(int start) { for(int i = 0; i < outputSlots.length; i++) outputSlots[i] = start + i; return this; } + public ModuleMachinePUREX fluidInput(FluidTank a, FluidTank b, FluidTank c) { inputTanks[0] = a; inputTanks[1] = b; inputTanks[2] = c; return this; } + public ModuleMachinePUREX fluidOutput(FluidTank a) { outputTanks[0] = a; return this; } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderPUREX.java b/src/main/java/com/hbm/render/tileentity/RenderPUREX.java new file mode 100644 index 000000000..5116e53e7 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderPUREX.java @@ -0,0 +1,82 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachinePUREX; +import com.hbm.util.BobMathUtil; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderPUREX extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glRotated(90, 0, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + } + + TileEntityMachinePUREX purex = (TileEntityMachinePUREX) tileEntity; + float anim = purex.prevAnim + (purex.anim - purex.prevAnim) * interp; + + bindTexture(ResourceManager.purex_tex); + ResourceManager.purex.renderPart("Base"); + if(purex.frame)ResourceManager.purex.renderPart("Frame"); + + GL11.glPushMatrix(); + GL11.glTranslated(1.5, 1.25, 0); + GL11.glRotated(anim * 45, 0, 0, 1); + GL11.glTranslated(-1.5, -1.25, 0); + ResourceManager.purex.renderPart("Fan"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(BobMathUtil.sps(anim * 0.25) * 0.5, 0, 0); + ResourceManager.purex.renderPart("Pump"); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_purex); + } + + @Override + public IItemRenderer getRenderer() { + + return new ItemRenderBase() { + + public void renderInventory() { + GL11.glTranslated(0, -2.5, 0); + GL11.glScaled(2.5, 2.5, 2.5); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.purex_tex); + ResourceManager.purex.renderPart("Base"); + ResourceManager.purex.renderPart("Frame"); + ResourceManager.purex.renderPart("Fan"); + ResourceManager.purex.renderPart("Pump"); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 7a8f9ead4..bae45ddca 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -353,6 +353,7 @@ public class TileMappings { put(TileEntityMachineChemicalPlant.class, "tileentity_chemicalplant"); put(TileEntityMachineChemfac.class, "tileentity_chemfac"); put(TileEntityMachineChemicalFactory.class, "tileentity_chemicalfactory"); + put(TileEntityMachinePUREX.class, "tileentity_purex"); put(TileEntityMachineOilWell.class, "tileentity_derrick"); put(TileEntityMachinePumpjack.class, "tileentity_machine_pumpjack"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java new file mode 100644 index 000000000..dd28d969c --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java @@ -0,0 +1,278 @@ +package com.hbm.tileentity.machine; + +import java.util.HashMap; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.UpgradeManagerNT; +import com.hbm.inventory.container.ContainerMachinePUREX; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachinePUREX; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.lib.Library; +import com.hbm.module.machine.ModuleMachinePUREX; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; + +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +public class TileEntityMachinePUREX extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider { + + public FluidTank[] inputTanks; + public FluidTank[] outputTanks; + + public long power; + public long maxPower = 1_000_000; + public boolean didProcess = false; + + public boolean frame = false; + public int anim; + public int prevAnim; + + public ModuleMachinePUREX purexModule; + public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); + + public TileEntityMachinePUREX() { + super(13); + + this.inputTanks = new FluidTank[3]; + this.outputTanks = new FluidTank[1]; + for(int i = 0; i < 3; i++) { + this.inputTanks[i] = new FluidTank(Fluids.NONE, 16_000); + } + this.outputTanks[0] = new FluidTank(Fluids.NONE, 16_000); + + this.purexModule = new ModuleMachinePUREX(0, this, slots) + .itemInput(4).itemOutput(7) + .fluidInput(inputTanks[0], inputTanks[1], inputTanks[2]).fluidOutput(outputTanks[0]); + } + + @Override + public String getName() { + return "container.machinePUREX"; + } + + @Override + public void updateEntity() { + + if(maxPower <= 0) this.maxPower = 1_000_000; + + if(!worldObj.isRemote) { + + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(purexModule.recipe); + if(recipe != null) { + this.maxPower = recipe.power * 100; + } + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 1_000_000); + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + upgradeManager.checkSlots(slots, 2, 3); + + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos); + for(FluidTank tank : inputTanks) if(tank.getTankType() != Fluids.NONE) this.trySubscribe(tank.getTankType(), worldObj, pos); + for(FluidTank tank : outputTanks) if(tank.getFill() > 0) this.tryProvide(tank, worldObj, pos); + } + + double speed = 1D; + double pow = 1D; + + speed += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) / 3D; + speed += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3); + + pow -= Math.min(upgradeManager.getLevel(UpgradeType.POWER), 3) * 0.25D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; + + this.purexModule.update(speed, pow, true, slots[1]); + this.didProcess = this.purexModule.didProcess; + if(this.purexModule.markDirty) this.markDirty(); + + this.networkPackNT(100); + + } else { + + this.prevAnim = this.anim; + if(this.didProcess) this.anim++; + + if(worldObj.getTotalWorldTime() % 20 == 0) { + frame = !worldObj.getBlock(xCoord, yCoord + 5, zCoord).isAir(worldObj, xCoord, yCoord + 5, zCoord); + } + } + } + + public DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord + 2, yCoord, zCoord - 1, Library.POS_X), + new DirPos(xCoord + 2, yCoord, zCoord + 0, Library.POS_X), + new DirPos(xCoord + 2, yCoord, zCoord + 1, Library.POS_X), + new DirPos(xCoord - 2, yCoord, zCoord - 1, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 0, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 1, Library.NEG_X), + new DirPos(xCoord - 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord + 0, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord + 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord - 1, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord + 0, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord + 1, yCoord, zCoord - 2, Library.NEG_Z), + }; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + for(FluidTank tank : inputTanks) tank.serialize(buf); + for(FluidTank tank : outputTanks) tank.serialize(buf); + buf.writeLong(power); + buf.writeLong(maxPower); + buf.writeBoolean(didProcess); + this.purexModule.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + for(FluidTank tank : inputTanks) tank.deserialize(buf); + for(FluidTank tank : outputTanks) tank.deserialize(buf); + this.power = buf.readLong(); + this.maxPower = buf.readLong(); + this.didProcess = buf.readBoolean(); + this.purexModule.deserialize(buf); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + for(int i = 0; i < 3; i++) { + this.inputTanks[i].readFromNBT(nbt, "i" + i); + } + this.outputTanks[0].readFromNBT(nbt, "o" + 0); + + this.power = nbt.getLong("power"); + this.maxPower = nbt.getLong("maxPower"); + this.purexModule.readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + for(int i = 0; i < 3; i++) { + this.inputTanks[i].writeToNBT(nbt, "i" + i); + } + this.outputTanks[0].writeToNBT(nbt, "o" + 0); + + nbt.setLong("power", power); + nbt.setLong("maxPower", maxPower); + this.purexModule.writeToNBT(nbt); + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + if(slot == 0) return true; // battery + if(slot == 1 && stack.getItem() == ModItems.blueprints) return true; + if(slot >= 2 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades + if(this.purexModule.isItemValid(slot, stack)) return true; // recipe input crap + return false; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i >= 7 && i <= 12; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] {4, 5, 6, 7, 8, 9, 10, 11, 12}; + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return maxPower; } + + @Override public FluidTank[] getReceivingTanks() { return inputTanks; } + @Override public FluidTank[] getSendingTanks() { return outputTanks; } + @Override public FluidTank[] getAllTanks() { return new FluidTank[] {inputTanks[0], inputTanks[1], inputTanks[2], outputTanks[0]}; } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachinePUREX(player.inventory, this); } + @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachinePUREX(player.inventory, this); } + + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("index") && data.hasKey("selection")) { + int index = data.getInteger("index"); + String selection = data.getString("selection"); + if(index == 0) { + this.purexModule.recipe = selection; + this.markChanged(); + } + } + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 2, yCoord, zCoord - 2, xCoord + 3, yCoord + 5, zCoord + 3); + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_purex)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_SPEED, "+" + (level * 100 / 3) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 50) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_CONSUMPTION, "-" + (level * 25) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public HashMap getValidUpgrades() { + HashMap upgrades = new HashMap<>(); + upgrades.put(UpgradeType.SPEED, 3); + upgrades.put(UpgradeType.POWER, 3); + upgrades.put(UpgradeType.OVERDRIVE, 3); + return upgrades; + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 7db6f3284..d909adf39 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3709,6 +3709,8 @@ potion.hbm_stability=Stabilität potion.hbm_taint=Verdorben potion.hbm_telekinesis=! ! ! +purex.recycle=Wiederanreicherung von %s + radar.clearMap=Karte zurücksetzen radar.detectMissiles=Raketen erkennen radar.detectPlayers=Spieler erkennen diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d5875f121..1ddb53855 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4767,6 +4767,8 @@ potion.hbm_stability=Stability potion.hbm_taint=Tainted potion.hbm_telekinesis=! ! ! +purex.recycle=Re-enrichment of %s + radar.clearMap=Clear Map radar.detectMissiles=Detect Missiles radar.detectPlayers=Detect Players diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_purex.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_purex.png new file mode 100644 index 0000000000000000000000000000000000000000..1326e8690a6a024c9514ccfc831d1e24d0841de0 GIT binary patch literal 3235 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 literal 0 HcmV?d00001 From 5f999100d1770b18b44618515f071535bef5ac74 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:10:23 -0400 Subject: [PATCH 329/491] Update BlockWandLogic.java --- src/main/java/com/hbm/blocks/generic/BlockWandLogic.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java index 01d8df298..dd796646d 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java @@ -273,7 +273,8 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo super.writeToNBT(nbt); nbt.setString("actionID", actionID); nbt.setString("conditionID", conditionID); - nbt.setString("interactionID", interactionID); + if(interactionID != null) + nbt.setString("interactionID", interactionID); nbt.setInteger("rotation", placedRotation); if(disguise != null){ nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); @@ -286,7 +287,8 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo super.readFromNBT(nbt); actionID = nbt.getString("actionID"); conditionID = nbt.getString("conditionID"); - interactionID = nbt.getString("interactionID"); + if(nbt.hasKey("interactionID")) + interactionID = nbt.getString("interactionID"); placedRotation = nbt.getInteger("rotation"); if(nbt.hasKey("disguise")){ disguise = Block.getBlockFromName(nbt.getString("disguise")); From bafa8d6dba10748f83648b6a4f8fee4f1d5472c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=81=93=E7=A5=9E=20=E9=A6=B4=E5=AD=90?= Date: Fri, 1 Aug 2025 13:46:45 +0800 Subject: [PATCH 330/491] Beyond the time --- src/main/resources/assets/hbm/lang/zh_CN.lang | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index b3a7c29c9..450f29276 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -6115,3 +6115,13 @@ item.blueprint_folder.name=蓝图册 item.rebar_placer.name=钢筋铺设器 tile.concrete_rebar.name=钢筋混凝土 tile.rebar.name=钢筋 +container.rbmkAutoloader=RBMK燃料自动装填机 +item.item_expensive.bronze_tubes.name=青铜结构件 +item.item_expensive.circuit.name=大型电路板 +item.item_expensive.computer.name=处理器主机 +item.item_expensive.ferro_plating.name=强化铀铁合金板 +item.item_expensive.heavy_frame.name=重型框架 +item.item_expensive.lead_plating.name=防辐射镀层 +item.item_expensive.steel_plating.name=铆接固定钢板 +purex.recycle=再富集 %s +tile.rbmk_autoloader.name=RBMK燃料自动装填机 From 69b9ea9a7d8cf482c383e30f61a251313896fb89 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 4 Aug 2025 19:18:41 +0200 Subject: [PATCH 331/491] consumed by the sludge --- changelog | 21 ++- gradle.properties | 2 +- src/main/java/com/hbm/blocks/ModBlocks.java | 12 +- .../com/hbm/inventory/OreDictManager.java | 7 +- .../gui/GUIScreenRecipeSelector.java | 4 +- .../inventory/material/MaterialShapes.java | 1 - .../java/com/hbm/inventory/material/Mats.java | 20 +-- .../inventory/recipes/AssemblerRecipes.java | 4 +- .../recipes/AssemblyMachineRecipes.java | 43 ++--- .../recipes/BlastFurnaceRecipes.java | 6 +- .../inventory/recipes/CentrifugeRecipes.java | 27 --- .../hbm/inventory/recipes/PUREXRecipes.java | 157 +++++++++++++----- .../recipes/loader/GenericRecipe.java | 6 + .../recipes/loader/GenericRecipes.java | 15 ++ src/main/java/com/hbm/items/ModItems.java | 7 +- .../java/com/hbm/items/special/ItemDrop.java | 2 +- .../com/hbm/items/special/ItemExpensive.java | 22 +++ .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 3 + .../sedna/factory/GunFactoryClient.java | 4 +- .../weapon/sedna/factory/XFactory10ga.java | 11 ++ .../weapon/sedna/mods/WeaponModManager.java | 2 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 3 +- src/main/java/com/hbm/main/MainRegistry.java | 1 + .../java/com/hbm/main/ModEventHandler.java | 6 + .../java/com/hbm/main/ResourceManager.java | 1 + .../machine/ModuleMachineAssembler.java | 5 +- .../hbm/module/machine/ModuleMachineBase.java | 35 +++- .../machine/ModuleMachineChemplant.java | 6 +- .../module/machine/ModuleMachinePUREX.java | 6 +- .../java/com/hbm/packet/PacketDispatcher.java | 2 + .../packet/toclient/HeldItemNBTPacket.java | 68 ++++++++ .../item/weapon/sedna/ItemRenderSexy.java | 11 +- .../machine/TileEntityMachinePUREX.java | 40 +++-- .../rbmk/TileEntityRBMKControlAuto.java | 2 + src/main/resources/assets/hbm/lang/de_DE.lang | 12 ++ src/main/resources/assets/hbm/lang/en_US.lang | 12 ++ .../textures/models/weapons/sexy_heretic.png | Bin 0 -> 5675 bytes .../models/weapons/whiskey (Kopie).png | Bin 37269 -> 0 bytes .../hbm/textures/models/weapons/whiskey.xcf | Bin 267625 -> 0 bytes 40 files changed, 430 insertions(+), 158 deletions(-) create mode 100644 src/main/java/com/hbm/items/special/ItemExpensive.java create mode 100644 src/main/java/com/hbm/packet/toclient/HeldItemNBTPacket.java create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/sexy_heretic.png delete mode 100644 src/main/resources/assets/hbm/textures/models/weapons/whiskey (Kopie).png delete mode 100644 src/main/resources/assets/hbm/textures/models/weapons/whiskey.xcf diff --git a/changelog b/changelog index 8e403af29..b819e17ab 100644 --- a/changelog +++ b/changelog @@ -7,6 +7,7 @@ * Rebar * When hooked up to liquid concrete using pipes, will fill to create reinforced concrete * Fills bottom to top, so connect the pipes to the top + * The rendering on this is still experimental, so don't overdo it with how large of an area you're casting * Rebar placer * Can be configured with different types of concrete, reinforced or not, or even colored * Rebar created with the rebar placer will remember its type and assume it when being filled with liquid concrete @@ -15,6 +16,7 @@ * Handles all the nuclear fuel reprocessing that was previously done by the standard centrifuge * All reprocessing recipes now require both kerosene and nitric acid * Also handles the vitrification recipes and the thorium salt reprocessing from the chemical plant + * Comes with new schrabidium extraction recipes from MEP/MEN fuels using schrabidic acid (yield is twice the schrabidium cost for acid used) ## Changed * The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints @@ -25,10 +27,27 @@ * Biogas can now be cracked into aromatics and petroleum gas * Custom missile part recipes have been added to the new assembler * Mini nukes are now made from weapon steel instead of regular steel +* Meteorite ingots are now made from meteorite powder, not blocks +* Starmetal now requires meteorite ingots instead of blocks +* Added auto switch groups + * The new standardized processing machines (assembler, chemplant, purex) can now have recipes that are grouped + * Recipes in groups will accept non-recipe items, if the item is used in another recipe from that same group + * When this happens, the recipe switches automatically, if possible + * This means that many PUREX recycling recipes and the ingot to plate recipes don't need dedicated machines for every single recipe, rather only one for that auto switch group +* The tooltip of the chosen recipe on the recipe selector now renders in the bottom left corner instead of following the mouse, preventing an issue where the tooltip is cut off on larger GUI scales +* Expensive mode has been changed + * Instead of using heavy components for most things, there's now "expensive" items that are used by many assembler recipes + * "Expensive" items replace some of the microcrafting that's part of the recipe, meaning that expensive mode recipes are generally simpler (but require way more materials) + * All heavy components have been annihilated and any recipes that may still use them (e.g. from old configs) default to using cast plates instead +* Removed the assembly factory's recipe, as it still uses the deprecated recipe set + * A new assembly factory will be added soon +* All recently deprecated machines have been removed from the creative tabs ## Fixed * Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit * As an extra safeguard, the recipe loader now throws an exception if that happens * Fixed dupe caused by the breeding reactor * Fixed a potential crash caused by a change done to tile entity proxies in relation to EnergyControl -* Fixed the assembler achievement still using the old one \ No newline at end of file +* Fixed the assembler achievement still using the old one +* Fixed the RBMK auto control rod's function not syncing to the client properly +* Fixed crash caused by new standardized machine recipes with chance-based output when they output nothing diff --git a/gradle.properties b/gradle.properties index 70b2eaeea..ca80c122b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5397 +mod_build_number=5412 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 8e08eac42..99824c4d8 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1006,14 +1006,14 @@ public class ModBlocks { @Deprecated public static Block machine_assembler; public static Block machine_assembly_machine; - public static Block machine_assemfac; + @Deprecated public static Block machine_assemfac; public static Block machine_arc_welder; public static Block machine_soldering_station; public static Block machine_arc_furnace; @Deprecated public static Block machine_chemplant; public static Block machine_chemical_plant; - public static Block machine_chemfac; + @Deprecated public static Block machine_chemfac; public static Block machine_chemical_factory; public static Block machine_purex; public static Block machine_mixer; @@ -2237,14 +2237,14 @@ public class ModBlocks { machine_ore_slopper = new MachineOreSlopper().setBlockName("machine_ore_slopper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_mining_laser = new MachineMiningLaser(Material.iron).setBlockName("machine_mining_laser").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_mining_laser"); barricade = new BlockNoDrop(Material.sand).setBlockName("barricade").setHardness(1.0F).setResistance(2.5F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":barricade"); - machine_assembler = new MachineAssembler(Material.iron).setBlockName("machine_assembler").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_assembler"); + machine_assembler = new MachineAssembler(Material.iron).setBlockName("machine_assembler").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":machine_assembler"); machine_assembly_machine = new MachineAssemblyMachine(Material.iron).setBlockName("machine_assembly_machine").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - machine_assemfac = new MachineAssemfac(Material.iron).setBlockName("machine_assemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_assemfac = new MachineAssemfac(Material.iron).setBlockName("machine_assemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_arc_welder = new MachineArcWelder(Material.iron).setBlockName("machine_arc_welder").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_soldering_station = new MachineSolderingStation(Material.iron).setBlockName("machine_soldering_station").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - machine_chemplant = new MachineChemplant(Material.iron).setBlockName("machine_chemplant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_chemplant = new MachineChemplant(Material.iron).setBlockName("machine_chemplant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemical_plant = new MachineChemicalPlant(Material.iron).setBlockName("machine_chemical_plant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - machine_chemfac = new MachineChemfac(Material.iron).setBlockName("machine_chemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_chemfac = new MachineChemfac(Material.iron).setBlockName("machine_chemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemical_factory = new MachineChemicalFactory(Material.iron).setBlockName("machine_chemical_factory").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_purex = new MachinePUREX(Material.iron).setBlockName("machine_purex").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_mixer = new MachineMixer(Material.iron).setBlockName("machine_mixer").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 7d4a9e0d2..3e85fdfb4 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -552,7 +552,6 @@ public class OreDictManager { if(mat.smeltable == SmeltingBehavior.SMELTABLE) { if(mat.autogen.contains(MaterialShapes.CASTPLATE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.CASTPLATE.name() + name, new ItemStack(ModItems.plate_cast, 1, mat.id)); if(mat.autogen.contains(MaterialShapes.WELDEDPLATE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.WELDEDPLATE.name() + name, new ItemStack(ModItems.plate_welded, 1, mat.id)); - if(mat.autogen.contains(MaterialShapes.HEAVY_COMPONENT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.HEAVY_COMPONENT.name() + name, new ItemStack(ModItems.heavy_component, 1, mat.id)); if(mat.autogen.contains(MaterialShapes.DENSEWIRE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.DENSEWIRE.name() + name, new ItemStack(ModItems.wire_dense, 1, mat.id)); } if(mat.autogen.contains(MaterialShapes.BOLT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.BOLT.name() + name, new ItemStack(ModItems.bolt, 1, mat.id)); @@ -680,7 +679,7 @@ public class OreDictManager { ANY_RUBBER.addPrefix(INGOT, true); ANY_PLASTIC.addPrefix(INGOT, true).addPrefix(DUST, true).addPrefix(BLOCK, true).addPrefix(GRIP, true).addPrefix(STOCK, true); ANY_HARDPLASTIC.addPrefix(INGOT, true).addPrefix(STOCK, true).addPrefix(GRIP, true); - ANY_RESISTANTALLOY.addPrefix(INGOT, true).addPrefix(DUST, true).addPrefix(CASTPLATE, true).addPrefix(WELDEDPLATE, true).addPrefix(HEAVY_COMPONENT, true).addPrefix(BLOCK, true) + ANY_RESISTANTALLOY.addPrefix(INGOT, true).addPrefix(DUST, true).addPrefix(CASTPLATE, true).addPrefix(WELDEDPLATE, true).addPrefix(BLOCK, true) .addPrefix(LIGHTBARREL, true).addPrefix(HEAVYBARREL, true).addPrefix(LIGHTRECEIVER, true).addPrefix(HEAVYRECEIVER, true); ANY_BISMOIDBRONZE.addPrefix(INGOT, true).addPrefix(CASTPLATE, true).addPrefix(LIGHTBARREL, true).addPrefix(HEAVYBARREL, true).addPrefix(LIGHTRECEIVER, true).addPrefix(HEAVYRECEIVER, true); ANY_TAR.addPrefix(ANY, false); @@ -759,7 +758,7 @@ public class OreDictManager { public String plate() { return PLATE.name() + mats[0]; } public String plateCast() { return CASTPLATE.name() + mats[0]; } public String plateWelded() { return WELDEDPLATE.name() + mats[0]; } - public String heavyComp() { return HEAVY_COMPONENT.name() + mats[0]; } + @Deprecated public String heavyComp() { return WELDEDPLATE.name() + mats[0]; } public String wireFine() { return WIRE.name() + mats[0]; } public String wireDense() { return DENSEWIRE.name() + mats[0]; } public String shell() { return SHELL.name() + mats[0]; } @@ -1013,7 +1012,7 @@ public class OreDictManager { public String plate() { return PLATE.name() + groupName; } public String plateCast() { return CASTPLATE.name() + groupName; } public String plateWelded() { return WELDEDPLATE.name() + groupName; } - public String heavyComp() { return HEAVY_COMPONENT.name() + groupName; } + @Deprecated public String heavyComp() { return WELDEDPLATE.name() + groupName; } public String wireFine() { return WIRE.name() + groupName; } public String wireDense() { return DENSEWIRE.name() + groupName; } public String billet() { return BILLET.name() + groupName; } diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java index 4a5e3bb83..244a2549b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java @@ -135,7 +135,7 @@ public class GUIScreenRecipeSelector extends GuiScreen { if(guiLeft + ix <= mouseX && guiLeft + ix + 18 > mouseX && guiTop + iy < mouseY && guiTop + iy + 18 >= mouseY) { GenericRecipe recipe = recipes.get(i); - this.func_146283_a(recipe.print(), mouseX, mouseY); + this.func_146283_a(recipe.print(), 0, 900); } } } @@ -143,7 +143,7 @@ public class GUIScreenRecipeSelector extends GuiScreen { if(guiLeft + 151 <= mouseX && guiLeft + 151 + 18 > mouseX && guiTop + 71 < mouseY && guiTop + 71 + 18 >= mouseY) { if(this.selection != null && this.recipeSet.recipeNameMap.containsKey(selection)) { GenericRecipe recipe = (GenericRecipe) this.recipeSet.recipeNameMap.get(selection); - this.func_146283_a(recipe.print(), mouseX, mouseY); + this.func_146283_a(recipe.print(), 0, 900); } } diff --git a/src/main/java/com/hbm/inventory/material/MaterialShapes.java b/src/main/java/com/hbm/inventory/material/MaterialShapes.java index 2f7de0461..ef44dd613 100644 --- a/src/main/java/com/hbm/inventory/material/MaterialShapes.java +++ b/src/main/java/com/hbm/inventory/material/MaterialShapes.java @@ -34,7 +34,6 @@ public class MaterialShapes { public static final MaterialShapes PIPE = new MaterialShapes(INGOT.quantity * 3, "ntmpipe"); public static final MaterialShapes QUART = new MaterialShapes(162); public static final MaterialShapes BLOCK = new MaterialShapes(INGOT.quantity * 9, "block"); - public static final MaterialShapes HEAVY_COMPONENT = new MaterialShapes(CASTPLATE.quantity * 256, "componentHeavy"); public static final MaterialShapes LIGHTBARREL = new MaterialShapes(INGOT.quantity * 3, "barrelLight"); public static final MaterialShapes HEAVYBARREL = new MaterialShapes(INGOT.quantity * 6, "barrelHeavy"); diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 5a03bf288..3d923dd47 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -100,11 +100,11 @@ public class Mats { public static final NTMMaterial MAT_GHIORSIUM = makeSmeltable(12836, GH336, 0xF4EFE1, 0x2A3306, 0xC6C6A1).setAutogen(NUGGET, BILLET, BLOCK).m(); //Base metals - public static final NTMMaterial MAT_TITANIUM = makeSmeltable(2200, TI, 0xF7F3F2, 0x4F4C4B, 0xA99E79).setAutogen(FRAGMENT, DUST, PLATE, DENSEWIRE, CASTPLATE, WELDEDPLATE, SHELL, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_COPPER = makeSmeltable(2900, CU, 0xFDCA88, 0x601E0D, 0xC18336).setAutogen(FRAGMENT, WIRE, DUST, PLATE, DENSEWIRE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_TUNGSTEN = makeSmeltable(7400, W, 0x868686, 0x000000, 0x977474).setAutogen(FRAGMENT, WIRE, BOLT, DUST, DENSEWIRE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_ALUMINIUM = makeSmeltable(1300, AL, 0xFFFFFF, 0x344550, 0xD0B8EB).setAutogen(FRAGMENT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_LEAD = makeSmeltable(8200, PB, 0xA6A6B2, 0x03030F, 0x646470).setAutogen(FRAGMENT, NUGGET, WIRE, BOLT, DUST, PLATE, CASTPLATE, PIPE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_TITANIUM = makeSmeltable(2200, TI, 0xF7F3F2, 0x4F4C4B, 0xA99E79).setAutogen(FRAGMENT, DUST, PLATE, DENSEWIRE, CASTPLATE, WELDEDPLATE, SHELL, BLOCK).m(); + public static final NTMMaterial MAT_COPPER = makeSmeltable(2900, CU, 0xFDCA88, 0x601E0D, 0xC18336).setAutogen(FRAGMENT, WIRE, DUST, PLATE, DENSEWIRE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK).m(); + public static final NTMMaterial MAT_TUNGSTEN = makeSmeltable(7400, W, 0x868686, 0x000000, 0x977474).setAutogen(FRAGMENT, WIRE, BOLT, DUST, DENSEWIRE, CASTPLATE, WELDEDPLATE, BLOCK).m(); + public static final NTMMaterial MAT_ALUMINIUM = makeSmeltable(1300, AL, 0xFFFFFF, 0x344550, 0xD0B8EB).setAutogen(FRAGMENT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK).m(); + public static final NTMMaterial MAT_LEAD = makeSmeltable(8200, PB, 0xA6A6B2, 0x03030F, 0x646470).setAutogen(FRAGMENT, NUGGET, WIRE, BOLT, DUST, PLATE, CASTPLATE, PIPE, BLOCK).m(); public static final NTMMaterial MAT_BISMUTH = makeSmeltable(8300, BI, 0xB200FF, 0xB200FF, 0xB200FF).setAutogen(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); public static final NTMMaterial MAT_ARSENIC = makeSmeltable(3300, AS, 0x6CBABA, 0x242525, 0x558080).setAutogen(NUGGET).m(); public static final NTMMaterial MAT_TANTALIUM = makeSmeltable(7300, TA, 0xFFFFFF, 0x1D1D36, 0xA89B74).setAutogen(NUGGET, DUST, BLOCK).m(); @@ -135,15 +135,15 @@ public class Mats { public static final NTMMaterial MAT_OSMIRIDIUM = makeSmeltable(7699, OSMIRIDIUM, 0xDBE3EF, 0x7891BE, 0xACBDD9).setAutogen(NUGGET, CASTPLATE, WELDEDPLATE).m(); //Alloys - public static final NTMMaterial MAT_STEEL = makeSmeltable(_AS + 0, STEEL, 0xAFAFAF, 0x0F0F0F, 0x4A4A4A).setAutogen(DUSTTINY, BOLT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, GRIP).m(); + public static final NTMMaterial MAT_STEEL = makeSmeltable(_AS + 0, STEEL, 0xAFAFAF, 0x0F0F0F, 0x4A4A4A).setAutogen(DUSTTINY, BOLT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, GRIP).m(); public static final NTMMaterial MAT_MINGRADE = makeSmeltable(_AS + 1, MINGRADE, 0xFFBA7D, 0xAF1700, 0xE44C0F).setAutogen(WIRE, DUST, DENSEWIRE, BLOCK).m(); - public static final NTMMaterial MAT_ALLOY = makeSmeltable(_AS + 2, ALLOY, 0xFF8330, 0x700000, 0xFF7318).setAutogen(WIRE, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_ALLOY = makeSmeltable(_AS + 2, ALLOY, 0xFF8330, 0x700000, 0xFF7318).setAutogen(WIRE, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK).m(); public static final NTMMaterial MAT_DURA = makeSmeltable(_AS + 3, DURA, 0x82A59C, 0x06281E, 0x42665C).setAutogen(BOLT, DUST, PLATE, CASTPLATE, PIPE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, GRIP).m(); - public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setAutogen(DUST, CASTPLATE, BLOCK, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, STOCK, GRIP).m(); + public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setAutogen(DUST, CASTPLATE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, STOCK, GRIP).m(); public static final NTMMaterial MAT_STAR = makeSmeltable(_AS + 5, STAR, 0xCCCCEA, 0x11111A, 0xA5A5D3).setAutogen(DUST, DENSEWIRE, BLOCK).m(); public static final NTMMaterial MAT_FERRO = makeSmeltable(_AS + 7, FERRO, 0xB7B7C9, 0x101022, 0x6B6B8B).setAutogen(CASTPLATE, HEAVYBARREL, HEAVYRECEIVER).m(); - public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0xD4D6D6, 0x323D3D, 0x9CA6A6).setAutogen(DUST, CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER).m(); - public static final NTMMaterial MAT_CDALLOY = makeSmeltable(_AS + 13, CDALLOY, 0xF7DF8F, 0x604308, 0xFBD368).setAutogen(CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER).m(); + public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0xD4D6D6, 0x323D3D, 0x9CA6A6).setAutogen(DUST, CASTPLATE, WELDEDPLATE, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER).m(); + public static final NTMMaterial MAT_CDALLOY = makeSmeltable(_AS + 13, CDALLOY, 0xF7DF8F, 0x604308, 0xFBD368).setAutogen(CASTPLATE, WELDEDPLATE, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER).m(); public static final NTMMaterial MAT_BBRONZE = makeSmeltable(_AS + 16, BBRONZE, 0xE19A69, 0x485353, 0x987D65).setAutogen(CASTPLATE, LIGHTBARREL, LIGHTRECEIVER, HEAVYRECEIVER).m(); public static final NTMMaterial MAT_ABRONZE = makeSmeltable(_AS + 17, ABRONZE, 0xDB9462, 0x203331, 0x77644D).setAutogen(CASTPLATE, LIGHTBARREL, LIGHTRECEIVER, HEAVYRECEIVER).m(); public static final NTMMaterial MAT_BSCCO = makeSmeltable(_AS + 18, BSCCO, 0x767BF1, 0x000000, 0x5E62C0).setAutogen(DENSEWIRE).m(); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 476cb5e31..f3a8f3f2e 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -43,7 +43,7 @@ import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -public class AssemblerRecipes extends SerializableRecipe { +@Deprecated public class AssemblerRecipes extends SerializableRecipe { public static HashMap recipes = new HashMap(); public static List recipeList = new ArrayList(); @@ -54,7 +54,7 @@ public class AssemblerRecipes extends SerializableRecipe { @Override public void registerDefaults() { - boolean exp = GeneralConfig.enableExpensiveMode; + boolean exp = false;//GeneralConfig.enableExpensiveMode; makeRecipe(new ComparableStack(ModItems.plate_iron, 2), new AStack[] {new OreDictStack(IRON.ingot(), 3), },30); makeRecipe(new ComparableStack(ModItems.plate_gold, 2), new AStack[] {new OreDictStack(GOLD.ingot(), 3), },30); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index a99236b60..b0efb41f8 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -57,20 +57,21 @@ public class AssemblyMachineRecipes extends GenericRecipes { public void registerDefaults() { // plates and ingots - this.register(new GenericRecipe("ass.plateiron").setup(60, 100).outputItems(new ItemStack(ModItems.plate_iron, 1)).inputItems(new OreDictStack(IRON.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.plategold").setup(60, 100).outputItems(new ItemStack(ModItems.plate_gold, 1)).inputItems(new OreDictStack(GOLD.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.platetitanium").setup(60, 100).outputItems(new ItemStack(ModItems.plate_titanium, 1)).inputItems(new OreDictStack(TI.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.platealu").setup(60, 100).outputItems(new ItemStack(ModItems.plate_aluminium, 1)).inputItems(new OreDictStack(AL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.platesteel").setup(60, 100).outputItems(new ItemStack(ModItems.plate_steel, 1)).inputItems(new OreDictStack(STEEL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.platelead").setup(60, 100).outputItems(new ItemStack(ModItems.plate_lead, 1)).inputItems(new OreDictStack(PB.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.platecopper").setup(60, 100).outputItems(new ItemStack(ModItems.plate_copper, 1)).inputItems(new OreDictStack(CU.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.platealloy").setup(60, 100).outputItems(new ItemStack(ModItems.plate_advanced_alloy, 1)).inputItems(new OreDictStack(ALLOY.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.plateschrab").setup(60, 100).outputItems(new ItemStack(ModItems.plate_schrabidium, 1)).inputItems(new OreDictStack(SA326.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.platecmb").setup(60, 100).outputItems(new ItemStack(ModItems.plate_combine_steel, 1)).inputItems(new OreDictStack(CMB.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.plategunmetal").setup(60, 100).outputItems(new ItemStack(ModItems.plate_gunmetal, 1)).inputItems(new OreDictStack(GUNMETAL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.plateweaponsteel").setup(60, 100).outputItems(new ItemStack(ModItems.plate_weaponsteel, 1)).inputItems(new OreDictStack(WEAPONSTEEL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.platesaturnite").setup(60, 100).outputItems(new ItemStack(ModItems.plate_saturnite, 1)).inputItems(new OreDictStack(BIGMT.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); - this.register(new GenericRecipe("ass.platedura").setup(60, 100).outputItems(new ItemStack(ModItems.plate_dura_steel, 1)).inputItems(new OreDictStack(DURA.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates")); + String autoPlate = "autoswitch.plates"; + this.register(new GenericRecipe("ass.plateiron").setup(60, 100).outputItems(new ItemStack(ModItems.plate_iron, 1)).inputItems(new OreDictStack(IRON.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.plategold").setup(60, 100).outputItems(new ItemStack(ModItems.plate_gold, 1)).inputItems(new OreDictStack(GOLD.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.platetitanium").setup(60, 100).outputItems(new ItemStack(ModItems.plate_titanium, 1)).inputItems(new OreDictStack(TI.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.platealu").setup(60, 100).outputItems(new ItemStack(ModItems.plate_aluminium, 1)).inputItems(new OreDictStack(AL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.platesteel").setup(60, 100).outputItems(new ItemStack(ModItems.plate_steel, 1)).inputItems(new OreDictStack(STEEL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.platelead").setup(60, 100).outputItems(new ItemStack(ModItems.plate_lead, 1)).inputItems(new OreDictStack(PB.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.platecopper").setup(60, 100).outputItems(new ItemStack(ModItems.plate_copper, 1)).inputItems(new OreDictStack(CU.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.platealloy").setup(60, 100).outputItems(new ItemStack(ModItems.plate_advanced_alloy, 1)).inputItems(new OreDictStack(ALLOY.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.plateschrab").setup(60, 100).outputItems(new ItemStack(ModItems.plate_schrabidium, 1)).inputItems(new OreDictStack(SA326.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.platecmb").setup(60, 100).outputItems(new ItemStack(ModItems.plate_combine_steel, 1)).inputItems(new OreDictStack(CMB.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.plategunmetal").setup(60, 100).outputItems(new ItemStack(ModItems.plate_gunmetal, 1)).inputItems(new OreDictStack(GUNMETAL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.plateweaponsteel").setup(60, 100).outputItems(new ItemStack(ModItems.plate_weaponsteel, 1)).inputItems(new OreDictStack(WEAPONSTEEL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.platesaturnite").setup(60, 100).outputItems(new ItemStack(ModItems.plate_saturnite, 1)).inputItems(new OreDictStack(BIGMT.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.platedura").setup(60, 100).outputItems(new ItemStack(ModItems.plate_dura_steel, 1)).inputItems(new OreDictStack(DURA.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); this.register(new GenericRecipe("ass.platemixed").setup(50, 100).outputItems(new ItemStack(ModItems.plate_mixed, 4)) .inputItems(new OreDictStack(ALLOY.plate(), 2), new OreDictStack(OreDictManager.getReflector(), 1), new OreDictStack(BIGMT.plate(), 1))); this.register(new GenericRecipe("ass.dalekanium").setup(200, 100).outputItems(new ItemStack(ModItems.plate_dalekanium, 1)) @@ -211,7 +212,10 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2))); this.register(new GenericRecipe("ass.chemplant").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_plant, 1)) .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG)) - .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.purex").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_purex, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(RUBBER.pipe(), 8), new OreDictStack(PB.plateCast(), 4), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.LEAD_PLATING), new OreDictStack(STEEL.shell(), 4), new OreDictStack(RUBBER.pipe(), 12), new ComparableStack(ModItems.motor_desh, 3), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.centrifuge").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_centrifuge, 1)) .inputItems(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG)) .inputItemsEx(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.plateCast(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); @@ -328,9 +332,6 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.strandcaster").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_strand_caster, 1)) .inputItems(new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(STEEL.shell(), 2), new OreDictStack(ANY_CONCRETE.any(), 8)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_CONCRETE.any(), 8))); - this.register(new GenericRecipe("ass.assemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_assemfac, 1)) - .inputItems(new OreDictStack(STEEL.ingot(), 48), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(B.ingot(), 4), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(KEY_ANYPANE, 64), new ComparableStack(ModItems.motor, 18), new OreDictStack(W.bolt(), 16), new OreDictStack(STEEL.pipe(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) - .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new OreDictStack(B.ingot(), 4), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(KEY_ANYPANE, 64), new ComparableStack(ModItems.motor_desh, 16), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.chemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_factory, 1)) .inputItems(new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 8), new ComparableStack(ModItems.motor_desh, 4), new ComparableStack(ModItems.coil_tungsten, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 16), new ComparableStack(ModItems.motor_desh, 16), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); @@ -448,7 +449,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.pachlorophyte").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.CHLOROPHYTE.ordinal())).inputItems(new OreDictStack(CU.wireDense(), 64), new OreDictStack(CU.wireDense(), 64), new ComparableStack(ModItems.powder_chlorophyte, 16))); this.register(new GenericRecipe("ass.exposurechamber").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_exposure_chamber, 1)) .inputItems(new OreDictStack(AL.plateCast(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModBlocks.capacitor_tantalium, 1), new ComparableStack(ModBlocks.glass_quartz, 16)) - .inputItems(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_HARDPLASTIC.ingot(), 24), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.COMPUTER))); + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_HARDPLASTIC.ingot(), 24), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.COMPUTER))); // reactors this.register(new GenericRecipe("ass.breedingreactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_reactor_breeding, 1)) @@ -492,10 +493,10 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(BIGMT.ingot(), 6), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4))); this.register(new GenericRecipe("ass.watzcooler").setup(200, 100).outputItems(new ItemStack(ModBlocks.watz_cooler, 3)) .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 2)) - .inputItems(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(RUBBER.ingot(), 8))); + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(RUBBER.ingot(), 8))); this.register(new GenericRecipe("ass.watzcasing").setup(100, 100).outputItems(new ItemStack(ModBlocks.watz_end, 3)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plateWelded(), 2)) - .inputItems(new ComparableStack(ModItems.item_expensive, 6, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_RESISTANTALLOY.plateWelded()))); + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 6, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_RESISTANTALLOY.plateWelded()))); // ICF this.register(new GenericRecipe("ass.icfcell").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CELL.ordinal())) diff --git a/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipes.java b/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipes.java index 1a7599b5d..455456499 100644 --- a/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipes.java @@ -16,7 +16,6 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; -import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; import com.hbm.handler.imc.IMCBlastFurnace; import com.hbm.inventory.RecipesCommon.AStack; @@ -59,10 +58,9 @@ public class BlastFurnaceRecipes extends SerializableRecipe { addRecipe(W, SA326.nugget(), new ItemStack(ModItems.ingot_magnetized_tungsten)); addRecipe(STEEL, TC99.nugget(), new ItemStack(ModItems.ingot_tcalloy)); addRecipe(GOLD.plate(), ModItems.plate_mixed, new ItemStack(ModItems.plate_paa, 2)); - addRecipe(BIGMT, ModItems.powder_meteorite, new ItemStack(ModItems.ingot_starmetal, 2)); - addRecipe(CO, ModBlocks.block_meteor, new ItemStack(ModItems.ingot_meteorite)); + addRecipe(BIGMT, ModItems.ingot_meteorite, new ItemStack(ModItems.ingot_starmetal, 2)); + addRecipe(CO, ModItems.powder_meteorite, new ItemStack(ModItems.ingot_meteorite)); addRecipe(ModItems.meteorite_sword_hardened, CO, new ItemStack(ModItems.meteorite_sword_alloyed)); - addRecipe(ModBlocks.block_meteor, CO, new ItemStack(ModItems.ingot_meteorite)); if(GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleChemsitry) { addRecipe(ModItems.canister_empty, COAL, new ItemStack(ModItems.canister_full, 1, Fluids.OIL.getID())); diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index c3927a396..2a48a04f7 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -1,7 +1,6 @@ package com.hbm.inventory.recipes; import java.io.IOException; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; @@ -26,7 +25,6 @@ import com.hbm.items.ItemEnums; import com.hbm.items.ItemEnums.EnumAshType; import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.special.ItemBedrockOreNew; import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; import com.hbm.items.special.ItemBedrockOreNew.BedrockOreGrade; @@ -49,35 +47,12 @@ public class CentrifugeRecipes extends SerializableRecipe { boolean lbs = GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleCentrifuge; - recipes.put(new ComparableStack(ModItems.icf_pellet_depleted), new ItemStack[] { - new ItemStack(ModItems.icf_pellet_empty, 1), - new ItemStack(ModItems.pellet_charged, 1), - new ItemStack(ModItems.pellet_charged, 1), - new ItemStack(ModItems.powder_iron, 1) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.chunk_ore, EnumChunkType.RARE)), new ItemStack[] { new ItemStack(ModItems.powder_cobalt_tiny, 2), new ItemStack(ModItems.powder_boron_tiny, 2), new ItemStack(ModItems.powder_niobium_tiny, 2), new ItemStack(ModItems.nugget_zirconium, 3) }); - ArrayList naquadriaNuggets = OreDictionary.getOres("nuggetNaquadria"); - if(naquadriaNuggets.size() != 0) { - ItemStack nuggetNQR = naquadriaNuggets.get(0); - ItemStack copy = nuggetNQR.copy(); - copy.stackSize = 12; - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.NQD)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - copy, - new ItemStack(ModItems.nugget_euphemium, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.NQR)), new ItemStack[] { - new ItemStack(ModItems.ingot_mud, 1), - new ItemStack(ModItems.nugget_co60, 12), - new ItemStack(ModItems.nugget_euphemium, 6), - new ItemStack(ModItems.nuclear_waste, 2) }); - } - recipes.put(new OreDictStack(COAL.ore()), new ItemStack[] { new ItemStack(ModItems.powder_coal, 2), new ItemStack(ModItems.powder_coal, 2), @@ -329,8 +304,6 @@ public class CentrifugeRecipes extends SerializableRecipe { 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.ingot_schraranium), new ItemStack[] { new ItemStack(ModItems.nugget_schrabidium, 2), new ItemStack(ModItems.nugget_schrabidium, 1), new ItemStack(ModItems.nugget_uranium, 3), new ItemStack(ModItems.nugget_neptunium, 2) }); - recipes.put(new ComparableStack(ModItems.crystal_coal), new ItemStack[] { new ItemStack(ModItems.powder_coal, 3), new ItemStack(ModItems.powder_coal, 3), new ItemStack(ModItems.powder_coal, 3), new ItemStack(ModItems.powder_lithium_tiny, 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.ingot_mercury, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); diff --git a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java index 65dd62fe8..3849b1759 100644 --- a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java @@ -2,6 +2,8 @@ package com.hbm.inventory.recipes; import static com.hbm.inventory.OreDictManager.*; +import java.util.ArrayList; + import com.hbm.blocks.ModBlocks; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.ComparableStack; @@ -14,6 +16,7 @@ import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; public class PUREXRecipes extends GenericRecipes { @@ -37,7 +40,8 @@ public class PUREXRecipes extends GenericRecipes { long vitrification = 1_000; // ZIRNOX - this.register(new GenericRecipe("purex.zirnoxnu").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + String autoZirnox = "autoswitch.zirnox"; + this.register(new GenericRecipe("purex.zirnoxnu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_natural_uranium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 1), @@ -46,8 +50,8 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle") - .inputItems(new ComparableStack(ModItems.waste_natural_uranium)) + this.register(new GenericRecipe("purex.zirnoxmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) + .inputItems(new ComparableStack(ModItems.waste_uranium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 1), new ItemStack(ModItems.nugget_pu_mix, 2), @@ -55,7 +59,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxthmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.zirnoxthmeu").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_thorium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 1), @@ -64,7 +68,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.zirnoxmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_mox)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu_mix, 1), @@ -73,7 +77,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxmep").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.zirnoxmep").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_plutonium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu_mix, 1), @@ -82,7 +86,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxheu233").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.zirnoxheu233").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_u233)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u235, 1), @@ -91,7 +95,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxheu235").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.zirnoxheu235").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_u235)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu238, 1), @@ -100,7 +104,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxles").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.zirnoxles").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_schrabidium)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_beryllium, 2), @@ -109,7 +113,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.zirnoxzfbmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.zirnoxzfbmox").setup(100, zirnoxPower).setNameWrapper("purex.recycle").setGroup(autoZirnox, this) .inputItems(new ComparableStack(ModItems.waste_zfb_mox)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_zirconium, 3), @@ -119,7 +123,8 @@ public class PUREXRecipes extends GenericRecipes { .setIconToFirstIngredient()); // Plate Fuel - this.register(new GenericRecipe("purex.platemox").setup(100, platePower).setNameWrapper("purex.recycle") + String autoPlate = "autoswitch.plate"; + this.register(new GenericRecipe("purex.platemox").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_mox)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.powder_sr90_tiny, 1), @@ -128,7 +133,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 4)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.platepu238be").setup(100, platePower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.platepu238be").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_pu238be)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_beryllium, 1), @@ -137,7 +142,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nugget_lead, 2)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.platepu239").setup(100, platePower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.platepu239").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_pu239)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu240, 2), @@ -146,7 +151,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 5)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.platera226be").setup(100, platePower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.platera226be").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_ra226be)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_beryllium, 2), @@ -155,7 +160,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nugget_lead, 1)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.platesa326").setup(100, platePower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.platesa326").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_sa326)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 1), @@ -164,7 +169,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.plateu233").setup(100, platePower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.plateu233").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_u233)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u235, 1), @@ -173,7 +178,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.plateu235").setup(100, platePower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.plateu235").setup(100, platePower).setNameWrapper("purex.recycle").setGroup(autoPlate, this) .inputItems(new ComparableStack(ModItems.waste_plate_u235)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_neptunium, 1), @@ -183,7 +188,8 @@ public class PUREXRecipes extends GenericRecipes { .setIconToFirstIngredient()); // PWR - this.register(new GenericRecipe("purex.pwrmeu").setup(100, pwrPower).setNameWrapper("purex.recycle") + String autoPWR = "autoswitch.pwr"; + this.register(new GenericRecipe("purex.pwrmeu").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEU)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 3), @@ -192,7 +198,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrheu233").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrheu233").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEU233)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u235, 3), @@ -201,7 +207,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 5)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrheu235").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrheu235").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEU235)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_neptunium, 3), @@ -210,7 +216,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 5)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrmen").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrmen").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEN)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 3), @@ -219,7 +225,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhen237").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrhen237").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEN237)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu238, 2), @@ -228,7 +234,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 5)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrmox").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrmox").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MOX)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_u238, 3), @@ -237,7 +243,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrmep").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrmep").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEP)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_lead, 2), @@ -246,7 +252,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 3)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhep239").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrhep239").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEP239)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu_mix, 2), @@ -255,7 +261,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 5)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhep241").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrhep241").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEP241)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_lead, 3), @@ -264,7 +270,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrmea").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrmea").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEA)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_lead, 3), @@ -273,7 +279,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhea242").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrhea242").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HEA242)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_lead, 3), @@ -282,7 +288,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhes326").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrhes326").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HES326)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 3), @@ -291,7 +297,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrhes327").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrhes327").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.HES327)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_australium, 4), @@ -300,7 +306,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 6)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrbfbam").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrbfbam").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.BFB_AM_MIX)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_am_mix, 9), @@ -309,7 +315,7 @@ public class PUREXRecipes extends GenericRecipes { new ItemStack(ModItems.nuclear_waste_tiny, 1)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.pwrbfpu241").setup(100, pwrPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.pwrbfpu241").setup(100, pwrPower).setNameWrapper("purex.recycle").setGroup(autoPWR, this) .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.BFB_PU241)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu241, 9), @@ -328,7 +334,8 @@ public class PUREXRecipes extends GenericRecipes { new ChanceOutput(new ItemStack(ModItems.nuclear_waste_tiny, 1), 0.25F))); // Watz - this.register(new GenericRecipe("purex.watzschrab").setup(60, watzPower).setNameWrapper("purex.recycle") + String autoWatz = "autoswitch.watz"; + this.register(new GenericRecipe("purex.watzschrab").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.SCHRABIDIUM)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 15), @@ -337,7 +344,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzhes").setup(60, watzPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.watzhes").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.HES)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 17), @@ -346,7 +353,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzmes").setup(60, watzPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.watzmes").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MES)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 12), @@ -355,7 +362,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzles").setup(60, watzPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.watzles").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.LES)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_solinium, 9), @@ -364,7 +371,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzhen").setup(60, watzPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.watzhen").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.HEN)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu239, 12), @@ -373,7 +380,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzmeu").setup(60, watzPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.watzmeu").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MEU)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu239, 12), @@ -382,7 +389,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzmep").setup(60, watzPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.watzmep").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.MEP)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_pu241, 12), @@ -391,7 +398,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzlead").setup(60, watzPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.watzlead").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.LEAD)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_lead, 6), @@ -400,7 +407,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzboron").setup(60, watzPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.watzboron").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.BORON)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.powder_coal_tiny, 12), @@ -409,7 +416,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzdu").setup(60, watzPower).setNameWrapper("purex.recycle") + this.register(new GenericRecipe("purex.watzdu").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.DU)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_polonium, 12), @@ -418,6 +425,40 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); + ArrayList naquadriaNuggets = OreDictionary.getOres("nuggetNaquadria"); + if(naquadriaNuggets.size() != 0) { + ItemStack nuggetNQR = naquadriaNuggets.get(0); + ItemStack copy = nuggetNQR.copy(); + copy.stackSize = 12; + + this.register(new GenericRecipe("purex.watzdu").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.NQD)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(copy, + new ItemStack(ModItems.nugget_euphemium, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + + this.register(new GenericRecipe("purex.watzdu").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.NQR)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) + .outputItems(new ItemStack(ModItems.nugget_co60, 12), + new ItemStack(ModItems.nugget_euphemium, 6), + new ItemStack(ModItems.nuclear_waste, 2)) + .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) + .setIconToFirstIngredient()); + } + + //ICF + this.register(new GenericRecipe("purex.icf").setup(300, 10_000).setNameWrapper("purex.recycle") + .inputItems(new ComparableStack(ModItems.icf_pellet_depleted)) + .outputItems(new ItemStack(ModItems.icf_pellet_empty, 1), + new ItemStack(ModItems.pellet_charged, 1), + new ItemStack(ModItems.pellet_charged, 1), + new ItemStack(ModItems.powder_iron, 1)) + .setIconToFirstIngredient()); + /// Vitrification this.register(new GenericRecipe("purex.vitliquid").setup(100, vitrification) .inputItems(new ComparableStack(ModBlocks.sand_lead)) @@ -432,5 +473,37 @@ public class PUREXRecipes extends GenericRecipes { this.register(new GenericRecipe("purex.vitsolid").setup(300, vitrification) .inputItems(new ComparableStack(ModBlocks.sand_lead), new ComparableStack(ModItems.nuclear_waste, 4)) .outputItems(new ItemStack(ModItems.nuclear_waste_vitrified, 4))); + + // Schrabidium + this.register(new GenericRecipe("purex.schraranium").setup(200, 1_000).setNameWrapper("purex.schrab") + .inputItems(new ComparableStack(ModItems.ingot_schraranium)) + .inputFluids(new FluidStack(Fluids.KEROSENE, 2_000), new FluidStack(Fluids.NITRIC_ACID, 1_000)) + .outputItems(new ItemStack(ModItems.nugget_schrabidium, 3), + new ItemStack(ModItems.nugget_uranium, 3), + new ItemStack(ModItems.nugget_neptunium, 2)) + .setIconToFirstIngredient()); + + String autoSchrab = "autoswitch.schrab"; + this.register(new GenericRecipe("purex.schrabzirnox").setup(200, 50_000).setNameWrapper("purex.schrab").setGroup(autoSchrab, this) + .inputItems(new ComparableStack(ModItems.waste_plutonium)) + .inputFluids(new FluidStack(Fluids.SOLVENT, 4_000), new FluidStack(Fluids.SCHRABIDIC, 500)) + .outputItems(new ItemStack(ModItems.powder_schrabidium, 1), + new ItemStack(ModItems.nugget_technetium, 3), + new ItemStack(ModItems.nuclear_waste_tiny, 4)) + .setIconToFirstIngredient()); + this.register(new GenericRecipe("purex.schrabpwr").setup(200, 50_000).setNameWrapper("purex.schrab").setGroup(autoSchrab, this) + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEP)) + .inputFluids(new FluidStack(Fluids.SOLVENT, 4_000), new FluidStack(Fluids.SCHRABIDIC, 500)) + .outputItems(new ItemStack(ModItems.powder_schrabidium, 1), + new ItemStack(ModItems.nugget_technetium, 3), + new ItemStack(ModItems.nuclear_waste_tiny, 4)) + .setIconToFirstIngredient()); + this.register(new GenericRecipe("purex.schrabmen").setup(200, 50_000).setNameWrapper("purex.schrab").setGroup(autoSchrab, this) + .inputItems(new ComparableStack(ModItems.pwr_fuel_depleted, 1, EnumPWRFuel.MEN)) + .inputFluids(new FluidStack(Fluids.SOLVENT, 4_000), new FluidStack(Fluids.SCHRABIDIC, 500)) + .outputItems(new ItemStack(ModItems.powder_schrabidium, 1), + new ItemStack(ModItems.nugget_technetium, 3), + new ItemStack(ModItems.nuclear_waste_tiny, 4)) + .setIconToFirstIngredient()); } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 91a8d99a4..99c37e984 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -34,6 +34,7 @@ public class GenericRecipe { public boolean writeIcon = false; public boolean customLocalization = false; protected String[] blueprintPools = null; + public String autoSwitchGroup = null; public GenericRecipe(String name) { this.name = name; @@ -59,6 +60,7 @@ public class GenericRecipe { public GenericRecipe setIcon(Block block) { return this.setIcon(new ItemStack(block)); } public GenericRecipe setNamed() { this.customLocalization = true; return this; } public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } + public GenericRecipe setGroup(String autoSwitch, GenericRecipes set) { this.autoSwitchGroup = autoSwitch; set.addToGroup(autoSwitch, this); return this; } public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } public GenericRecipe inputItemsEx(AStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } @@ -113,6 +115,10 @@ public class GenericRecipe { public List print() { List list = new ArrayList(); list.add(EnumChatFormatting.YELLOW + this.getLocalizedName()); + if(this.autoSwitchGroup != null) { + String[] lines = I18nUtil.resolveKeyArray("autoswitch", I18nUtil.resolveKey(this.autoSwitchGroup)); + for(String line : lines) list.add(EnumChatFormatting.GOLD + line); + } if(duration > 0) list.add(EnumChatFormatting.RED + "Duration: " + this.duration / 20D + "s"); if(power > 0) list.add(EnumChatFormatting.RED + "Consumption: " + BobMathUtil.getShortNumber(power) + "HE/t"); list.add(EnumChatFormatting.BOLD + "Input:"); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 2e92b67f6..0bee0728a 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -46,6 +46,9 @@ public abstract class GenericRecipes extends Serializab public static HashMap> blueprintPools = new HashMap(); /** Name to recipe map for all recipes that are part of pools for lookup */ public static HashMap pooledBlueprints = new HashMap(); + + /** Groups for auto switch functionality (changes recipe automatically based on first solid input) */ + public HashMap> autoSwitchGroups = new HashMap(); public abstract int inputItemLimit(); public abstract int inputFluidLimit(); @@ -54,6 +57,7 @@ public abstract class GenericRecipes extends Serializab public boolean hasDuration() { return true; } public boolean hasPower() { return true; } + /** Adds a recipe to a blueprint pool (i.e. a blueprint item's recipe list) */ public static void addToPool(String pool, GenericRecipe recipe) { List list = blueprintPools.get(pool); if(list == null) { @@ -64,6 +68,14 @@ public abstract class GenericRecipes extends Serializab pooledBlueprints.put(recipe.name, recipe); } + /** Adds a recipe to an auto switch group (recipe can switch based on first solid input) */ + public void addToGroup(String group, GenericRecipe recipe) { + List list = autoSwitchGroups.get(group); + if(list == null) list = new ArrayList(); + list.add(recipe); + autoSwitchGroups.put(group, list); + } + public static void clearPools() { blueprintPools.clear(); pooledBlueprints.clear(); @@ -78,6 +90,7 @@ public abstract class GenericRecipes extends Serializab public void deleteRecipes() { this.recipeOrderedList.clear(); this.recipeNameMap.clear(); + this.autoSwitchGroups.clear(); } public void register(T recipe) { @@ -104,6 +117,7 @@ public abstract class GenericRecipes extends Serializab if(obj.has("named") && obj.get("named").getAsBoolean()) recipe.setNamed(); if(obj.has("blueprintpool")) recipe.setPools(obj.get("blueprintpool").getAsString().split(":")); if(obj.has("nameWrapper")) recipe.setNameWrapper(obj.get("nameWrapper").getAsString()); + if(obj.has("autoSwitchGroup")) recipe.setGroup(obj.get("autoSwitchGroup").getAsString(), this); readExtraData(element, recipe); @@ -154,6 +168,7 @@ public abstract class GenericRecipes extends Serializab if(recipe.customLocalization) writer.name("named").value(true); if(recipe.nameWrapper != null) writer.name("nameWrapper").value(recipe.nameWrapper); if(recipe.blueprintPools != null && recipe.blueprintPools.length > 0) writer.name("blueprintpool").value(String.join(":", recipe.blueprintPools)); + if(recipe.autoSwitchGroup != null) writer.name("autoSwitchGroup").value(recipe.autoSwitchGroup); writeExtraData(recipe, writer); } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 4019a3355..24af636e0 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -702,7 +702,6 @@ public class ModItems { public static Item ingot_raw; public static Item plate_cast; public static Item plate_welded; - public static Item heavy_component; public static Item wire_fine; public static Item wire_dense; public static Item part_barrel_light; @@ -1458,6 +1457,7 @@ public class ModItems { public static Item gun_autoshotgun; public static Item gun_autoshotgun_shredder; public static Item gun_autoshotgun_sexy; + public static Item gun_autoshotgun_heretic; public static Item gun_quadro; public static Item gun_lag; public static Item gun_minigun; @@ -2346,7 +2346,7 @@ public class ModItems { thruster_nuclear = new Item().setUnlocalizedName("thruster_nuclear").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_nuclear"); safety_fuse = new Item().setUnlocalizedName("safety_fuse").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":safety_fuse"); part_generic = new ItemGenericPart().setUnlocalizedName("part_generic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_generic"); - item_expensive = new ItemEnumMulti(EnumExpensiveType.class, true, true).setUnlocalizedName("item_expensive").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":item_expensive"); + item_expensive = new ItemExpensive().setUnlocalizedName("item_expensive").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":item_expensive"); item_secret = new ItemEnumMulti(EnumSecretType.class, true, true).setUnlocalizedName("item_secret").setCreativeTab(null).setTextureName(RefStrings.MODID + ":item_secret"); ingot_metal = new ItemEnumMulti(EnumIngotMetal.class, true, true).setUnlocalizedName("ingot_metal").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ingot_metal"); chemical_dye = new ItemChemicalDye().setUnlocalizedName("chemical_dye").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chemical_dye"); @@ -2931,7 +2931,6 @@ public class ModItems { ingot_raw = new ItemAutogen(MaterialShapes.INGOT).setUnlocalizedName("ingot_raw").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_raw"); plate_cast = new ItemAutogen(MaterialShapes.CASTPLATE).aot(Mats.MAT_BISMUTH, "plate_cast_bismuth").setUnlocalizedName("plate_cast").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_cast"); plate_welded = new ItemAutogen(MaterialShapes.WELDEDPLATE).setUnlocalizedName("plate_welded").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_welded"); - heavy_component = new ItemAutogen(MaterialShapes.HEAVY_COMPONENT).setUnlocalizedName("heavy_component").setCreativeTab(null).setTextureName(RefStrings.MODID + ":heavy_component"); wire_fine = new ItemAutogen(MaterialShapes.WIRE) .aot(Mats.MAT_ALUMINIUM, "wire_aluminium").aot(Mats.MAT_COPPER, "wire_copper") .aot(Mats.MAT_MINGRADE, "wire_red_copper").aot(Mats.MAT_GOLD, "wire_gold") @@ -5461,7 +5460,6 @@ public class ModItems { GameRegistry.registerItem(plate_welded, plate_welded.getUnlocalizedName()); GameRegistry.registerItem(shell, shell.getUnlocalizedName()); GameRegistry.registerItem(pipe, pipe.getUnlocalizedName()); - GameRegistry.registerItem(heavy_component, heavy_component.getUnlocalizedName()); //Bolts GameRegistry.registerItem(bolt, bolt.getUnlocalizedName()); @@ -6391,6 +6389,7 @@ public class ModItems { GameRegistry.registerItem(gun_autoshotgun, gun_autoshotgun.getUnlocalizedName()); GameRegistry.registerItem(gun_autoshotgun_shredder, gun_autoshotgun_shredder.getUnlocalizedName()); GameRegistry.registerItem(gun_autoshotgun_sexy, gun_autoshotgun_sexy.getUnlocalizedName()); + GameRegistry.registerItem(gun_autoshotgun_heretic, gun_autoshotgun_heretic.getUnlocalizedName()); GameRegistry.registerItem(gun_quadro, gun_quadro.getUnlocalizedName()); GameRegistry.registerItem(gun_lag, gun_lag.getUnlocalizedName()); GameRegistry.registerItem(gun_minigun, gun_minigun.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemDrop.java b/src/main/java/com/hbm/items/special/ItemDrop.java index 154785cf5..e1db9ab9e 100644 --- a/src/main/java/com/hbm/items/special/ItemDrop.java +++ b/src/main/java/com/hbm/items/special/ItemDrop.java @@ -202,7 +202,7 @@ public class ItemDrop extends Item { list.add("Continuously heats up matter by"); list.add("resonating every planck second."); list.add("Tends to catch fire or to create"); - list.add("small plamsa arcs. Not edible."); + list.add("small plasma arcs. Not edible."); } if (this == ModItems.black_hole) { list.add("Contains a regular singularity"); diff --git a/src/main/java/com/hbm/items/special/ItemExpensive.java b/src/main/java/com/hbm/items/special/ItemExpensive.java new file mode 100644 index 000000000..cde77e340 --- /dev/null +++ b/src/main/java/com/hbm/items/special/ItemExpensive.java @@ -0,0 +1,22 @@ +package com.hbm.items.special; + +import java.util.List; + +import com.hbm.items.ItemEnumMulti; +import com.hbm.items.ItemEnums.EnumExpensiveType; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +public class ItemExpensive extends ItemEnumMulti { + + public ItemExpensive() { + super(EnumExpensiveType.class, true, true); + } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + list.add(EnumChatFormatting.RED + "Expensive mode item"); + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index 66cb14695..f77640e05 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -450,6 +450,9 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I Minecraft.getMinecraft().renderEngine.bindTexture(Gui.icons); } + @Override + public boolean getShareTag() { return false; } + public static class SmokeNode { public double forward = 0D; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 753de9167..dfa406299 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -76,7 +76,8 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_m2, new ItemRenderM2()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun, new ItemRenderShredder(ResourceManager.shredder_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun_shredder, new ItemRenderShredder(ResourceManager.shredder_orig_tex)); - MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun_sexy, new ItemRenderSexy()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun_sexy, new ItemRenderSexy(ResourceManager.sexy_tex)); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun_heretic, new ItemRenderSexy(ResourceManager.heretic_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_quadro, new ItemRenderQuadro()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_minigun, new ItemRenderMinigun(ResourceManager.minigun_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_minigun_lacunae, new ItemRenderMinigun(ResourceManager.minigun_lacunae_tex)); @@ -267,6 +268,7 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_autoshotgun) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_autoshotgun_shredder) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_autoshotgun_sexy) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_autoshotgun_heretic) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_quadro) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_lag) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_minigun) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java index 93c0e6913..cefcc4aad 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory10ga.java @@ -67,6 +67,17 @@ public class XFactory10ga { .setupStandardConfiguration() .anim(LAMBDA_DOUBLE_BARREL_ANIMS).orchestra(Orchestras.ORCHESTRA_DOUBLE_BARREL) ).setUnlocalizedName("gun_double_barrel_sacred_dragon"); + + ModItems.gun_autoshotgun_heretic = new ItemGunBaseNT(WeaponQuality.DEBUG, new GunConfig() + .draw(20).inspect(65).reloadSequential(true).inspectCancel(false).crosshair(Crosshair.L_CIRCLE).hideCrosshair(false).smoke(Lego.LAMBDA_STANDARD_SMOKE) + .rec(new Receiver(0) + .dmg(100F).delay(3).auto(true).dryfireAfterAuto(true).reload(110).jam(19).sound("hbm:weapon.fire.shotgunAuto", 1.0F, 1.0F) + .mag(new MagazineFullReload(0, 250).addConfigs(g10, g10_shrapnel, g10_du, g10_slug, g10_explosive)) + .offset(0.75, -0.125, -0.25) + .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(XFactory12ga.LAMBDA_RECOIL_SEXY)) + .setupStandardConfiguration() + .anim(XFactory12ga.LAMBDA_SEXY_ANIMS).orchestra(Orchestras.ORCHESTRA_SHREDDER_SEXY) + ).setUnlocalizedName("gun_autoshotgun_heretic"); } public static BiConsumer LAMBDA_RECOIL_DOUBLE_BARREL = (stack, ctx) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java index 128341947..fbee99b2b 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java @@ -138,7 +138,7 @@ public class WeaponModManager { new WeaponModDefinition(EnumModSpecial.SPEEDUP) .addMod(new Item[] {ModItems.gun_minigun, ModItems.gun_minigun_dual}, new WeaponModMinigunSpeedup(ID_MINIGUN_SPEED)) .addMod(new Item[] {ModItems.gun_autoshotgun, ModItems.gun_autoshotgun_shredder}, new WeaponModShredderSpeedup(209)); - new WeaponModDefinition(EnumModSpecial.CHOKE).addMod(new Item[] {ModItems.gun_pepperbox, ModItems.gun_maresleg, ModItems.gun_double_barrel, ModItems.gun_liberator, ModItems.gun_spas12, ModItems.gun_autoshotgun_sexy}, new WeaponModChoke(210)); + new WeaponModDefinition(EnumModSpecial.CHOKE).addMod(new Item[] {ModItems.gun_pepperbox, ModItems.gun_maresleg, ModItems.gun_double_barrel, ModItems.gun_liberator, ModItems.gun_spas12, ModItems.gun_autoshotgun_sexy, ModItems.gun_autoshotgun_heretic}, new WeaponModChoke(210)); new WeaponModDefinition(EnumModSpecial.FURNITURE_GREEN).addMod(ModItems.gun_g3, new WeaponModPolymerFurniture(ID_FURNITURE_GREEN)); new WeaponModDefinition(EnumModSpecial.FURNITURE_BLACK).addMod(ModItems.gun_g3, new WeaponModPolymerFurniture(ID_FURNITURE_BLACK)); new WeaponModDefinition(EnumModSpecial.BAYONET) diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 57e7c9744..4f891c49e 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5397)"; + public static final String VERSION = "1.0.27 BETA (5412)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index d170e553b..2a51edc27 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -22,6 +22,7 @@ import com.hbm.inventory.material.NTMMaterial; import static com.hbm.inventory.OreDictManager.*; import com.hbm.items.ModItems; +import com.hbm.items.ItemEnums.EnumExpensiveType; import com.hbm.items.ItemEnums.EnumLegendaryType; import com.hbm.items.ItemEnums.EnumPages; import com.hbm.items.ItemEnums.EnumPlantType; @@ -865,7 +866,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.pwr_heatsink, 4), new Object[] { "SCS", "CRC", "SCS", 'S', BIGMT.plateCast(), 'C', CU.plate(), 'R', RUBBER.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.pwr_reflector, 4), new Object[] { "RLR", "LSL", "RLR", 'R', OreDictManager.getReflector(), 'L', PB.plate528(), 'S', STEEL.plateCast() }); addRecipeAuto(new ItemStack(ModBlocks.pwr_casing, 4), new Object[] { "LCL", "CSC", "LCL", 'L', PB.plate528(), 'C', ANY_CONCRETE.any(), 'S', STEEL.plateCast() }); - addRecipeAuto(new ItemStack(ModBlocks.pwr_controller, 1), new Object[] { "CPC", "PSP", "CPC", 'C', ModBlocks.pwr_casing, 'P', ANY_PLASTIC.ingot(), 'S', !GeneralConfig.enableExpensiveMode ? DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) : STEEL.heavyComp() }); + addRecipeAuto(new ItemStack(ModBlocks.pwr_controller, 1), new Object[] { "CPC", "PSP", "CPC", 'C', ModBlocks.pwr_casing, 'P', ANY_PLASTIC.ingot(), 'S', !GeneralConfig.enableExpensiveMode ? DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) : DictFrame.fromOne(ModItems.item_expensive, EnumExpensiveType.CIRCUIT) }); addRecipeAuto(new ItemStack(ModBlocks.pwr_port, 1), new Object[] { "S", "C", "S", 'S', STEEL.plate(), 'C', ModBlocks.pwr_casing }); addRecipeAuto(new ItemStack(ModBlocks.pwr_neutron_source, 1), new Object[] { "LRL", "ZRZ", "LRL", 'L', PB.plate528(), 'R', ModItems.billet_ra226be, 'Z', ZR.plateCast() }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index b1818f018..0a9fe875e 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1723,6 +1723,7 @@ public class MainRegistry { ignoreMappings.add("hbm:item.journal_silver"); ignoreMappings.add("hbm:tile.machine_arc_furnace_off"); ignoreMappings.add("hbm:tile.machine_arc_furnace_on"); + ignoreMappings.add("hbm:item.heavy_component"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 1f0be79bf..4a3ded4e7 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -40,6 +40,7 @@ import com.hbm.items.weapon.sedna.factory.XFactory12ga; import com.hbm.lib.ModDamageSource; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.HeldItemNBTPacket; import com.hbm.packet.toclient.PermaSyncPacket; import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.packet.toclient.SerializableRecipePacket; @@ -988,6 +989,11 @@ public class ModEventHandler { player.worldObj.spawnParticle("townaura", player.posX + vec.xCoord, player.posY + 1 + vec.yCoord, player.posZ + vec.zCoord, 0.0, 0.0, 0.0); } } + + if(!player.worldObj.isRemote && event.phase == TickEvent.Phase.END && player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT && player instanceof EntityPlayerMP) { + HeldItemNBTPacket packet = new HeldItemNBTPacket(player.getHeldItem()); + PacketDispatcher.wrapper.sendTo(packet, (EntityPlayerMP) player); + } } @SubscribeEvent diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 5d0002948..a3651233d 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1014,6 +1014,7 @@ public class ResourceManager { public static final ResourceLocation shredder_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder.png"); public static final ResourceLocation shredder_orig_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder_orig.png"); public static final ResourceLocation sexy_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sexy_real_no_fake.png"); + public static final ResourceLocation heretic_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sexy_heretic.png"); public static final ResourceLocation whiskey_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/whiskey.png"); public static final ResourceLocation quadro_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/quadro.png"); public static final ResourceLocation quadro_rocket_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/quadro_rocket.png"); diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java index 2316ad787..8b52114ee 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java @@ -3,6 +3,7 @@ package com.hbm.module.machine; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.util.BobMathUtil; import api.hbm.energymk2.IEnergyHandlerMK2; @@ -19,8 +20,8 @@ public class ModuleMachineAssembler extends ModuleMachineBase { } @Override - public GenericRecipe getRecipe() { - return AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.recipe); + public GenericRecipes getRecipeSet() { + return AssemblyMachineRecipes.INSTANCE; } @Override diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineBase.java b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java index 9815c0803..f5f4827e5 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineBase.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java @@ -1,7 +1,10 @@ package com.hbm.module.machine; +import java.util.List; + import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; import com.hbm.items.machine.ItemBlueprints; @@ -44,6 +47,20 @@ public abstract class ModuleMachineBase { /** Expects the tanks to be set up correctly beforehand */ public boolean canProcess(GenericRecipe recipe, double speed, double power) { if(recipe == null) return false; + + // auto switch functionality + if(recipe.autoSwitchGroup != null && slots[inputSlots[0]] != null) { + ItemStack itemToSwitchBy = slots[inputSlots[0]]; + List recipes = (List) this.getRecipeSet().autoSwitchGroups.get(recipe.autoSwitchGroup); + if(recipes != null) for(GenericRecipe nextRec : recipes) { + if(nextRec.inputItem == null) continue; + if(nextRec.inputItem[0].matchesRecipe(itemToSwitchBy, true)) { // perform the switch + this.recipe = nextRec.getInternalName(); + return false; // cancel the recipe this tick since we need to do the previous checking all over again + } + } + } + if(power != 1 && battery.getPower() < recipe.power * power) return false; // only check with floating point numbers if mult is not 1 if(power == 1 && battery.getPower() < recipe.power) return false; @@ -109,7 +126,7 @@ public abstract class ModuleMachineBase { if(slots[outputSlots[i]] == null) { slots[outputSlots[i]] = collapse; } else { - slots[outputSlots[i]].stackSize += collapse.stackSize; // we can do this because we've already established that the result slot is not null if it's a single output + if(collapse != null) slots[outputSlots[i]].stackSize += collapse.stackSize; // we can do this because we've already established that the result slot is not null if it's a single output } } } @@ -128,8 +145,12 @@ public abstract class ModuleMachineBase { this.progress = 0D; } } + + public GenericRecipe getRecipe() { + return (GenericRecipe) getRecipeSet().recipeNameMap.get(this.recipe); + } - public abstract GenericRecipe getRecipe(); + public abstract GenericRecipes getRecipeSet(); public void update(double speed, double power, boolean extraCondition, ItemStack blueprint) { GenericRecipe recipe = getRecipe(); @@ -164,6 +185,16 @@ public abstract class ModuleMachineBase { if(inputSlots[i] == slot && recipe.inputItem[i].matchesRecipe(stack, true)) return true; } + if(recipe.autoSwitchGroup != null) { + List recipes = (List) this.getRecipeSet().autoSwitchGroups.get(recipe.autoSwitchGroup); // why the FUCK does this need a cast + if(recipes != null) for(GenericRecipe newRec : recipes) { + if(newRec.inputItem == null) continue; + if(inputSlots[0] == slot && newRec.inputItem[0].matchesRecipe(stack, true)) { + return true; + } + } + } + return false; } diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineChemplant.java b/src/main/java/com/hbm/module/machine/ModuleMachineChemplant.java index c6268e2cd..facd2bfde 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineChemplant.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineChemplant.java @@ -2,7 +2,7 @@ package com.hbm.module.machine; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.ChemicalPlantRecipes; -import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; import api.hbm.energymk2.IEnergyHandlerMK2; import net.minecraft.item.ItemStack; @@ -24,8 +24,8 @@ public class ModuleMachineChemplant extends ModuleMachineBase { } @Override - public GenericRecipe getRecipe() { - return ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); + public GenericRecipes getRecipeSet() { + return ChemicalPlantRecipes.INSTANCE; } public ModuleMachineChemplant itemInput(int a, int b, int c) { inputSlots[0] = a; inputSlots[1] = b; inputSlots[2] = c; return this; } diff --git a/src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java b/src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java index afb8186d2..107a6d05e 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachinePUREX.java @@ -2,7 +2,7 @@ package com.hbm.module.machine; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.PUREXRecipes; -import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; import api.hbm.energymk2.IEnergyHandlerMK2; import net.minecraft.item.ItemStack; @@ -18,8 +18,8 @@ public class ModuleMachinePUREX extends ModuleMachineBase { } @Override - public GenericRecipe getRecipe() { - return PUREXRecipes.INSTANCE.recipeNameMap.get(this.recipe); + public GenericRecipes getRecipeSet() { + return PUREXRecipes.INSTANCE; } public ModuleMachinePUREX itemInput(int start) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = start + i; return this; } diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index 165664236..524319f01 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -67,6 +67,8 @@ public class PacketDispatcher { wrapper.registerMessage(BufPacket.Handler.class, BufPacket.class, i++, Side.CLIENT); //Syncs server recipe configs to the client wrapper.registerMessage(SerializableRecipePacket.Handler.class, SerializableRecipePacket.class, i++, Side.CLIENT); + //Syncing of NBT for guns + wrapper.registerMessage(HeldItemNBTPacket.Handler.class, HeldItemNBTPacket.class, i++, Side.CLIENT); } } diff --git a/src/main/java/com/hbm/packet/toclient/HeldItemNBTPacket.java b/src/main/java/com/hbm/packet/toclient/HeldItemNBTPacket.java new file mode 100644 index 000000000..45bf21e45 --- /dev/null +++ b/src/main/java/com/hbm/packet/toclient/HeldItemNBTPacket.java @@ -0,0 +1,68 @@ +package com.hbm.packet.toclient; + +import com.hbm.util.BufferUtil; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class HeldItemNBTPacket implements IMessage { + + private ItemStack stack; + + public HeldItemNBTPacket() { } + + public HeldItemNBTPacket(ItemStack stack) { + this.stack = stack; + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeShort(Item.getIdFromItem(stack.getItem())); + buf.writeByte(stack.stackSize); + buf.writeShort(stack.getItemDamage()); + NBTTagCompound nbtTagCompound = null; + nbtTagCompound = stack.stackTagCompound; + BufferUtil.writeNBT(buf, nbtTagCompound); + } + + @Override + public void fromBytes(ByteBuf buf) { + short id = buf.readShort(); + if(id >= 0) { + byte quantity = buf.readByte(); + short meta = buf.readShort(); + stack = new ItemStack(Item.getItemById(id), quantity, meta); + stack.stackTagCompound = BufferUtil.readNBT(buf); + } + } + + public static class Handler implements IMessageHandler { + + @Override + @SideOnly(Side.CLIENT) + public IMessage onMessage(HeldItemNBTPacket m, MessageContext ctx) { + try { + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + if(m.stack == null) return null; + + ItemStack held = player.getHeldItem(); + if(held == null) return null; + if(held.getItem() != m.stack.getItem()) return null; + if(held.getItemDamage() != m.stack.getItemDamage()) return null; + + held.stackTagCompound = m.stack.stackTagCompound; + + } catch(Exception x) { } finally { } + return null; + } + } +} diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java index 895c2357e..7c961b43c 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java @@ -11,9 +11,16 @@ import com.hbm.util.Vec3NT; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; @NotableComments public class ItemRenderSexy extends ItemRenderWeaponBase { + + protected ResourceLocation texture; + + public ItemRenderSexy(ResourceLocation texture) { + this.texture = texture; + } @Override protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.25F; } @@ -76,7 +83,7 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { GL11.glPopMatrix(); } - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.sexy_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(texture); GL11.glTranslated(0, -1, -8); GL11.glRotated(equip[0], 1, 0, 0); @@ -209,7 +216,7 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { GL11.glEnable(GL11.GL_LIGHTING); GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.sexy_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(texture); ResourceManager.sexy.renderPart("Gun"); ResourceManager.sexy.renderPart("Barrel"); ResourceManager.sexy.renderPart("RecoilSpring"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java index dd28d969c..45a476b35 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java @@ -10,7 +10,7 @@ import com.hbm.inventory.container.ContainerMachinePUREX; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachinePUREX; -import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.PUREXRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; @@ -59,9 +59,9 @@ public class TileEntityMachinePUREX extends TileEntityMachineBase implements IEn this.inputTanks = new FluidTank[3]; this.outputTanks = new FluidTank[1]; for(int i = 0; i < 3; i++) { - this.inputTanks[i] = new FluidTank(Fluids.NONE, 16_000); + this.inputTanks[i] = new FluidTank(Fluids.NONE, 24_000); } - this.outputTanks[0] = new FluidTank(Fluids.NONE, 16_000); + this.outputTanks[0] = new FluidTank(Fluids.NONE, 24_000); this.purexModule = new ModuleMachinePUREX(0, this, slots) .itemInput(4).itemOutput(7) @@ -80,7 +80,7 @@ public class TileEntityMachinePUREX extends TileEntityMachineBase implements IEn if(!worldObj.isRemote) { - GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(purexModule.recipe); + GenericRecipe recipe = PUREXRecipes.INSTANCE.recipeNameMap.get(purexModule.recipe); if(recipe != null) { this.maxPower = recipe.power * 100; } @@ -124,18 +124,26 @@ public class TileEntityMachinePUREX extends TileEntityMachineBase implements IEn public DirPos[] getConPos() { return new DirPos[] { - new DirPos(xCoord + 2, yCoord, zCoord - 1, Library.POS_X), - new DirPos(xCoord + 2, yCoord, zCoord + 0, Library.POS_X), - new DirPos(xCoord + 2, yCoord, zCoord + 1, Library.POS_X), - new DirPos(xCoord - 2, yCoord, zCoord - 1, Library.NEG_X), - new DirPos(xCoord - 2, yCoord, zCoord + 0, Library.NEG_X), - new DirPos(xCoord - 2, yCoord, zCoord + 1, Library.NEG_X), - new DirPos(xCoord - 1, yCoord, zCoord + 2, Library.POS_Z), - new DirPos(xCoord + 0, yCoord, zCoord + 2, Library.POS_Z), - new DirPos(xCoord + 1, yCoord, zCoord + 2, Library.POS_Z), - new DirPos(xCoord - 1, yCoord, zCoord - 2, Library.NEG_Z), - new DirPos(xCoord + 0, yCoord, zCoord - 2, Library.NEG_Z), - new DirPos(xCoord + 1, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord + 3, yCoord, zCoord - 2, Library.POS_X), + new DirPos(xCoord + 3, yCoord, zCoord - 1, Library.POS_X), + new DirPos(xCoord + 3, yCoord, zCoord + 0, Library.POS_X), + new DirPos(xCoord + 3, yCoord, zCoord + 1, Library.POS_X), + new DirPos(xCoord + 3, yCoord, zCoord + 2, Library.POS_X), + new DirPos(xCoord - 3, yCoord, zCoord - 1, Library.NEG_X), + new DirPos(xCoord - 3, yCoord, zCoord - 2, Library.NEG_X), + new DirPos(xCoord - 3, yCoord, zCoord + 0, Library.NEG_X), + new DirPos(xCoord - 3, yCoord, zCoord + 1, Library.NEG_X), + new DirPos(xCoord - 3, yCoord, zCoord + 2, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord - 1, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord + 0, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord + 1, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord + 2, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord - 2, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord - 1, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord + 0, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord + 1, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord + 2, yCoord, zCoord - 3, Library.NEG_Z), }; } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java index 3da017e91..5c1837c71 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java @@ -112,6 +112,7 @@ public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements buf.writeDouble(this.levelUpper); buf.writeDouble(this.heatLower); buf.writeDouble(this.heatUpper); + if(function != null) buf.writeInt(function.ordinal()); } @Override @@ -121,6 +122,7 @@ public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements this.levelUpper = buf.readDouble(); this.heatLower = buf.readDouble(); this.heatUpper = buf.readDouble(); + this.function = RBMKFunction.values()[buf.readInt()]; } @Override diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index d909adf39..26b2baf6f 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -129,6 +129,14 @@ armorMod.type.leggings=Beinschienen armorMod.type.servo=Servos armorMod.type.special=Spezial +autoswitch=Teil der Rezeptgruppe "%s"$Rezept ändert sich basierend auf das erste Item +autoswitch.plate=Wiederanreicherung Plattenbrennstoff +autoswitch.plates=Metallplatten +autoswitch.pwr=Wiederanreicherung PWR-Brennstoff +autoswitch.schrab=Schrabidium-Extraktion +autoswitch.watz=Wiederanreicherung Watzpellet +autoswitch.zirnox=Wiederanreicherung ZIRNOX-Brennstoff + bomb.detonated=Erfolgreich gezündet! bomb.incompatible=Gerät kann nicht ausgelöst werden! bomb.launched=Erfolgreich gestartet! @@ -392,6 +400,7 @@ container.machineLargeTurbine=Industrielle Dampfturbine container.machineLiquefactor=Verflüssiger container.machineMixer=Industrieller Mixer container.machineOreSlopper=B.E.M. +container.machinePUREX=PUREX container.machinePyroOven=Pyrolyseofen container.machineRefinery=Ölraffinerie container.machineRotaryFurnace=Rotationshochofen @@ -2102,6 +2111,7 @@ item.gun_amat.name=Panzerbüchse item.gun_amat_penance.name=Penance item.gun_amat_subtlety.name=Subtlety item.gun_autoshotgun.name=Auto-Flinte +item.gun_autoshotgun_heretic.name=The Heretic item.gun_autoshotgun_sexy.name=Sexy item.gun_autoshotgun_shredder.name=Shredder item.gun_b92.name=§9B92 Energiepistole§r @@ -3710,6 +3720,7 @@ potion.hbm_taint=Verdorben potion.hbm_telekinesis=! ! ! purex.recycle=Wiederanreicherung von %s +purex.schrab=Schrabidium extrahieren aus %s radar.clearMap=Karte zurücksetzen radar.detectMissiles=Raketen erkennen @@ -4460,6 +4471,7 @@ tile.machine_powerrtg.name=PT-Isotopenzelle tile.machine_press.name=Befeuerte Presse tile.machine_puf6_tank.name=Plutoniumhexafluorid-Tank tile.machine_pumpjack.name=Pferdekopfpumpe +tile.machine_purex.name=PUREX tile.machine_pyrooven.name=Pyrolyseofen tile.machine_radar.name=Radar tile.machine_radar_large.name=Großes Radar diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 1ddb53855..d1c47cebc 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -184,6 +184,14 @@ armorMod.type.leggings=Leggings armorMod.type.servo=Servos armorMod.type.special=Special +autoswitch=Part of auto switch group "%s"$Recipe changes based on first ingredient +autoswitch.plate=Re-Enrichment Plate Fuel +autoswitch.plates=Metal Plates +autoswitch.pwr=Re-Enrichment PWR Fuel +autoswitch.schrab=Schrabidium Extraction +autoswitch.watz=Re-Enrichment Watz Pellet +autoswitch.zirnox=Re-Enrichment ZIRNOX Fuel + battery.mode.buffer=Input/Output Mode battery.mode.input=Input Mode battery.mode.off=OffW @@ -794,6 +802,7 @@ container.machineLargeTurbine=Industrial Steam Turbine container.machineLiquefactor=Liquefactor container.machineMixer=Industrial Mixer container.machineOreSlopper=B.O.P. +container.machinePUREX=PUREX container.machinePyroOven=Pyrolysis Oven container.machineRefinery=Oil Refinery container.machineRotaryFurnace=Rotary Furnace @@ -2913,6 +2922,7 @@ item.gun_amat.name=Anti-Materiel Rifle item.gun_amat_penance.name=Penance item.gun_amat_subtlety.name=Subtlety item.gun_autoshotgun.name=Auto Shotgun +item.gun_autoshotgun_heretic.name=The Heretic item.gun_autoshotgun_sexy.name=Sexy item.gun_autoshotgun_shredder.name=Shredder item.gun_b92.name=§9B92 Energy Pistol§r @@ -4768,6 +4778,7 @@ potion.hbm_taint=Tainted potion.hbm_telekinesis=! ! ! purex.recycle=Re-enrichment of %s +purex.schrab=Schrabidium extraction from %s radar.clearMap=Clear Map radar.detectMissiles=Detect Missiles @@ -5597,6 +5608,7 @@ tile.machine_powerrtg.name=PT Isotope Cell tile.machine_press.name=Burner Press tile.machine_puf6_tank.name=Plutonium Hexafluoride Tank tile.machine_pumpjack.name=Pumpjack +tile.machine_purex.name=PUREX tile.machine_pyrooven.name=Pyrolysis Oven tile.machine_radar.name=Radar tile.machine_radar_large.name=Large Radar diff --git a/src/main/resources/assets/hbm/textures/models/weapons/sexy_heretic.png b/src/main/resources/assets/hbm/textures/models/weapons/sexy_heretic.png new file mode 100644 index 0000000000000000000000000000000000000000..4dab907d0d4320b2b7014ece5e4265051a877a51 GIT binary patch literal 5675 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 N#$a=U20d8p{{d1I+>-zR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/whiskey (Kopie).png b/src/main/resources/assets/hbm/textures/models/weapons/whiskey (Kopie).png deleted file mode 100644 index 959b94011dd9e1bf6a37e1adc7d0ac47df9c2fb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37269 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 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/whiskey.xcf b/src/main/resources/assets/hbm/textures/models/weapons/whiskey.xcf deleted file mode 100644 index 2376c64d51e153dc45b6dd1b928d8a9cf8a7d0bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267625 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 From a5bdfa87d91b5bd6dc149605a04313a5b3e95587 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 4 Aug 2025 20:16:50 +0200 Subject: [PATCH 332/491] it just works --- changelog | 60 ++++--------------- gradle.properties | 2 +- .../recipes/AssemblyMachineRecipes.java | 3 + src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/MainRegistry.java | 2 +- .../hbm/module/machine/ModuleMachineBase.java | 1 + src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 11 ++-- 8 files changed, 25 insertions(+), 57 deletions(-) diff --git a/changelog b/changelog index b819e17ab..bc517c4ea 100644 --- a/changelog +++ b/changelog @@ -1,53 +1,15 @@ -## Added -* Blueprint booklets - * Can be found in worldgen - * Using it will create one random blueprint of the same type as the booklet -* Liquid concrete - * It's conk but liquid -* Rebar - * When hooked up to liquid concrete using pipes, will fill to create reinforced concrete - * Fills bottom to top, so connect the pipes to the top - * The rendering on this is still experimental, so don't overdo it with how large of an area you're casting -* Rebar placer - * Can be configured with different types of concrete, reinforced or not, or even colored - * Rebar created with the rebar placer will remember its type and assume it when being filled with liquid concrete -* PUREX - * Chemplant-like nuclear fuel reprocessing machine - * Handles all the nuclear fuel reprocessing that was previously done by the standard centrifuge - * All reprocessing recipes now require both kerosene and nitric acid - * Also handles the vitrification recipes and the thorium salt reprocessing from the chemical plant - * Comes with new schrabidium extraction recipes from MEP/MEN fuels using schrabidic acid (yield is twice the schrabidium cost for acid used) +## Added (last time, i forgor) +* RBMK autoloader + * Can be placed on top of RBMK fuel rods + * Can be configured to switch fuel rods in 5% depletion increments + * Usable with all forms of item transport like conveyors and pneumatic tubes ## Changed -* The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints -* The chemical plant now has a recipe for making cobblestone from 25mB of lava (which can be liquefacted into even more lava, useful for cobblestone generation) -* Removed the old arc furnace -* Mining lasers now build up barricades in all directions and not just horizontal ones, preventing potential deadlocks due to liquid flowing in from above -* One of the new secret parts for making a certain weapon is now obtainable again via red rooms -* Biogas can now be cracked into aromatics and petroleum gas -* Custom missile part recipes have been added to the new assembler -* Mini nukes are now made from weapon steel instead of regular steel -* Meteorite ingots are now made from meteorite powder, not blocks -* Starmetal now requires meteorite ingots instead of blocks -* Added auto switch groups - * The new standardized processing machines (assembler, chemplant, purex) can now have recipes that are grouped - * Recipes in groups will accept non-recipe items, if the item is used in another recipe from that same group - * When this happens, the recipe switches automatically, if possible - * This means that many PUREX recycling recipes and the ingot to plate recipes don't need dedicated machines for every single recipe, rather only one for that auto switch group -* The tooltip of the chosen recipe on the recipe selector now renders in the bottom left corner instead of following the mouse, preventing an issue where the tooltip is cut off on larger GUI scales -* Expensive mode has been changed - * Instead of using heavy components for most things, there's now "expensive" items that are used by many assembler recipes - * "Expensive" items replace some of the microcrafting that's part of the recipe, meaning that expensive mode recipes are generally simpler (but require way more materials) - * All heavy components have been annihilated and any recipes that may still use them (e.g. from old configs) default to using cast plates instead -* Removed the assembly factory's recipe, as it still uses the deprecated recipe set - * A new assembly factory will be added soon -* All recently deprecated machines have been removed from the creative tabs +* Replaced "re-enrichment" in the PUREX recipes with "reprocessing" ## Fixed -* Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit - * As an extra safeguard, the recipe loader now throws an exception if that happens -* Fixed dupe caused by the breeding reactor -* Fixed a potential crash caused by a change done to tile entity proxies in relation to EnergyControl -* Fixed the assembler achievement still using the old one -* Fixed the RBMK auto control rod's function not syncing to the client properly -* Fixed crash caused by new standardized machine recipes with chance-based output when they output nothing +* Fixed many of the PUREX' recipe categories simply not processing + * It worked last time I swear +* Fixed life-ending issue where the assembler achievement's icon was incorrect +* Fixed RBMK autoloader not having a recipe + * Ow \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ca80c122b..e40665d77 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5412 +mod_build_number=5412H1 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index b0efb41f8..b3014e716 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -464,6 +464,9 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.rbmk").setup(100, 100).outputItems(new ItemStack(ModBlocks.rbmk_blank, 1)) .inputItems(new ComparableStack(ModBlocks.concrete_asbestos, 4), new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(CU.plate(), 8), new ComparableStack(ModItems.plate_polymer, 4)) .inputItemsEx(new ComparableStack(ModBlocks.concrete_asbestos, 4), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.FERRO_PLATING), new OreDictStack(CU.plate(), 16))); + this.register(new GenericRecipe("ass.rbmkautoloader").setup(100, 100).outputItems(new ItemStack(ModBlocks.rbmk_autoloader, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(PB.plateCast(), 4), new OreDictStack(B.ingot(), 4), new ComparableStack(ModItems.motor, 3)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModItems.motor_desh, 3))); // fusion reactor this.register(new GenericRecipe("ass.fusioncore").setup(600, 100).outputItems(new ItemStack(ModBlocks.struct_iter_core, 1)) diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 4f891c49e..543f77ad9 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5412)"; + public static final String VERSION = "1.0.27 BETA (5412H1)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 0a9fe875e..f797b0de3 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -718,7 +718,7 @@ public class MainRegistry { //progression achieves achBurnerPress = new Achievement("achievement.burnerPress", "burnerPress", 0, 0, new ItemStack(ModBlocks.machine_press), null).initIndependentStat().registerStat(); achBlastFurnace = new Achievement("achievement.blastFurnace", "blastFurnace", 1, 3, new ItemStack(ModBlocks.machine_difurnace_off), achBurnerPress).initIndependentStat().registerStat(); - achAssembly = new Achievement("achievement.assembly", "assembly", 3, -1, new ItemStack(ModBlocks.machine_assembler), achBurnerPress).initIndependentStat().registerStat(); + achAssembly = new Achievement("achievement.assembly", "assembly", 3, -1, new ItemStack(ModBlocks.machine_assembly_machine), achBurnerPress).initIndependentStat().registerStat(); achSelenium = new Achievement("achievement.selenium", "selenium", 3, 2, ModItems.ingot_starmetal, achBurnerPress).initIndependentStat().setSpecial().registerStat(); achChemplant = new Achievement("achievement.chemplant", "chemplant", 6, -1, new ItemStack(ModBlocks.machine_chemical_plant), achAssembly).initIndependentStat().registerStat(); achConcrete = new Achievement("achievement.concrete", "concrete", 6, -4, new ItemStack(ModBlocks.concrete), achChemplant).initIndependentStat().registerStat(); diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineBase.java b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java index f5f4827e5..0a27c56d6 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineBase.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java @@ -53,6 +53,7 @@ public abstract class ModuleMachineBase { ItemStack itemToSwitchBy = slots[inputSlots[0]]; List recipes = (List) this.getRecipeSet().autoSwitchGroups.get(recipe.autoSwitchGroup); if(recipes != null) for(GenericRecipe nextRec : recipes) { + if(nextRec.getInternalName().equals(this.recipe)) continue; if(nextRec.inputItem == null) continue; if(nextRec.inputItem[0].matchesRecipe(itemToSwitchBy, true)) { // perform the switch this.recipe = nextRec.getInternalName(); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 26b2baf6f..444cc8a7c 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4472,6 +4472,7 @@ tile.machine_press.name=Befeuerte Presse tile.machine_puf6_tank.name=Plutoniumhexafluorid-Tank tile.machine_pumpjack.name=Pferdekopfpumpe tile.machine_purex.name=PUREX +tile.machine_purex.desc=Wiederaufbereitungsmaschine für Kernbrennstoff.$Die meisten Rezepte benötigen Kerosin und Salpetersäure. tile.machine_pyrooven.name=Pyrolyseofen tile.machine_radar.name=Radar tile.machine_radar_large.name=Großes Radar diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d1c47cebc..32d100935 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -185,12 +185,12 @@ armorMod.type.servo=Servos armorMod.type.special=Special autoswitch=Part of auto switch group "%s"$Recipe changes based on first ingredient -autoswitch.plate=Re-Enrichment Plate Fuel +autoswitch.plate=Reprocessing Plate Fuel autoswitch.plates=Metal Plates -autoswitch.pwr=Re-Enrichment PWR Fuel +autoswitch.pwr=Reprocessing PWR Fuel autoswitch.schrab=Schrabidium Extraction -autoswitch.watz=Re-Enrichment Watz Pellet -autoswitch.zirnox=Re-Enrichment ZIRNOX Fuel +autoswitch.watz=Reprocessing Watz Pellet +autoswitch.zirnox=Reprocessing ZIRNOX Fuel battery.mode.buffer=Input/Output Mode battery.mode.input=Input Mode @@ -4777,7 +4777,7 @@ potion.hbm_stability=Stability potion.hbm_taint=Tainted potion.hbm_telekinesis=! ! ! -purex.recycle=Re-enrichment of %s +purex.recycle=Reprocessing of %s purex.schrab=Schrabidium extraction from %s radar.clearMap=Clear Map @@ -5609,6 +5609,7 @@ tile.machine_press.name=Burner Press tile.machine_puf6_tank.name=Plutonium Hexafluoride Tank tile.machine_pumpjack.name=Pumpjack tile.machine_purex.name=PUREX +tile.machine_purex.desc=Reprocessing machine for many nuclear fuels.$Most recipes require kerosene and nitric acid. tile.machine_pyrooven.name=Pyrolysis Oven tile.machine_radar.name=Radar tile.machine_radar_large.name=Large Radar From 30a20e34e0d5d8375b3cf8a86a5e2223b862dbc4 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Mon, 4 Aug 2025 20:11:12 -0600 Subject: [PATCH 333/491] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 1fbcb897b..b670d6a98 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -184,6 +184,14 @@ armorMod.type.leggings=Поножи armorMod.type.servo=Сервоприводы armorMod.type.special=Особое +autoswitch=Часть группы автоматического переключения "%s"$Рецепта изменяется в зависимости от первого ингредиента +autoswitch.plate=Переработка топливных пластин +autoswitch.plates=Металические пластины +autoswitch.pwr=Переработка стержней ВВЭР +autoswitch.schrab=Экстракция Шрабидия +autoswitch.watz=Переработка Ватцз-пеллет +autoswitch.zirnox=Переработка стержней Цирнокс + battery.mode.buffer=Буферный режим battery.mode.input=Зарядка battery.mode.off=Отключено @@ -794,6 +802,7 @@ container.machineITER=Термоядерный реактор container.machineLargeTurbine=Промышленная паровая турбина container.machineLiquefactor=Разжижитель container.machineMixer=Промышленный смеситель +container.machinePUREX=PUREX container.machineOreSlopper=П.Б.Р. container.machinePyroOven=Пиролизная печь container.machineRefinery=Нефтеперерабатывающий завод @@ -3070,6 +3079,7 @@ item.gun_amat_penance.name="Покаяние" item.gun_amat_subtlety.name="Тонкость" item.gun_ar15.name="Джош" item.gun_autoshotgun.name=Автоматический дробовик +item.gun_autoshotgun_heretic.name=Еретик item.gun_autoshotgun_sexy.name=Секси item.gun_autoshotgun_shredder.name=Шреддер item.gun_avenger.name=CZ57 “Авенджер” @@ -5037,6 +5047,9 @@ potion.hbm_stability=Стабильность potion.hbm_taint=Порча potion.hbm_telekinesis=! ! ! +purex.recycle=Переработка %s +purex.schrab=Извлечение шрабидия из %s + radar.clearMap=Очистить карту radar.detectMissiles=Обнаружение ракет radar.detectPlayers=Обнаружение игроков @@ -5864,6 +5877,8 @@ tile.machine_powerrtg.name=ПТ-изотопная ячейка tile.machine_press.name=Пресс tile.machine_puf6_tank.name=Бочка гексафторида плутония tile.machine_pumpjack.name=Станок-качалка +tile.machine_purex.name=PUREX +tile.machine_purex.desc=Машина для переработки многих видов ядерного топлива.$Для большинства рецептов требуются керосин и азотная кислота. tile.machine_pyrooven.name=Пиролизная печь tile.machine_radar.name=Радар tile.machine_radar_large.name=Большой радар From 852e89b21d073dce06d2b323f88b6991f6b4defc Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Tue, 5 Aug 2025 12:30:32 -0600 Subject: [PATCH 334/491] typo fix --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index b670d6a98..6072fa3d9 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -6388,7 +6388,7 @@ tile.wood_barrier.name=Деревянный барьер tile.wood_structure.ceiling.name=Деревянный настил tile.wood_structure.roof.name=Деревянное перекрытие tile.wood_structure.scaffold.name=Деревянные подмостки -tile.yellow_barrel.name=Радиоктивная бочка +tile.yellow_barrel.name=Радиоактивная бочка tile.zirnox_destroyed.name=Разрушенный Цирнокс tile.large_vehicle_door.name=Дверь для крупногабаритных автомобилей From 96f02c6a1645ba0e7b0b7ec4ea66746370a5d765 Mon Sep 17 00:00:00 2001 From: PewPewCricket Date: Tue, 5 Aug 2025 14:40:46 -0500 Subject: [PATCH 335/491] add yellow waste barrel and vitrified waste barrel recipes to assembly machine. --- .../recipes/AssemblyMachineRecipes.java | 76 ++++++++++--------- 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index b3014e716..73890a546 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -42,7 +42,7 @@ import net.minecraft.init.Items; import net.minecraft.item.ItemStack; public class AssemblyMachineRecipes extends GenericRecipes { - + public static final AssemblyMachineRecipes INSTANCE = new AssemblyMachineRecipes(); @Override public int inputItemLimit() { return 12; } @@ -55,7 +55,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { @Override public void registerDefaults() { - + // plates and ingots String autoPlate = "autoswitch.plates"; this.register(new GenericRecipe("ass.plateiron").setup(60, 100).outputItems(new ItemStack(ModItems.plate_iron, 1)).inputItems(new OreDictStack(IRON.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); @@ -84,7 +84,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new ComparableStack(ModItems.ingot_osmiridium))); this.register(new GenericRecipe("ass.platednt").setup(600, 100).outputItems(new ItemStack(ModItems.plate_dineutronium, 4)) .inputItems(new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModItems.powder_spark_mix, 2), new OreDictStack(DESH.ingot(), 1))); - + // expensive parts this.register(new GenericRecipe("ass.exsteelplating").setup(200, 400).outputItems(new ItemStack(ModItems.item_expensive, 1, EnumExpensiveType.STEEL_PLATING.ordinal())) .inputItems(new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(TI.plate(), 4), new OreDictStack(STEEL.bolt(), 16))); @@ -106,7 +106,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ZR.plateWelded(), 1)) .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL_COLD, 4_000)) .outputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 4_000))); - + // cloth this.register(new GenericRecipe("ass.hazcloth").setup(50, 100).outputItems(new ItemStack(ModItems.hazmat_cloth, 4)) .inputItems(new OreDictStack(PB.dust(), 4), new ComparableStack(Items.string, 8))); @@ -147,7 +147,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(CU.dust(), 1))); this.register(new GenericRecipe("ass.partplut").setup(40, 100).outputItems(new ItemStack(ModItems.part_plutonium, 8)) .inputItems(new OreDictStack(PU.dust(), 1))); - + // bunker blocks this.register(new GenericRecipe("ass.cmbtile").setup(100, 100).outputItems(new ItemStack(ModBlocks.cmb_brick, 8)) .inputItems(new OreDictStack(ANY_CONCRETE.any(), 4), new OreDictStack(CMB.plate(), 4))); @@ -158,6 +158,12 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.sealcontroller").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_controller, 1)) .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(MINGRADE.wireDense(), 4))); + // blocks + this.register(new GenericRecipe("ass.yellowbarrel").setup(400, 400).outputItems(new ItemStack(ModBlocks.yellow_barrel, 1)) + .inputItems(new ComparableStack(ModItems.tank_steel, 1), new OreDictStack(PB.plate(), 2), new ComparableStack(ModItems.nuclear_waste, 10))); + this.register(new GenericRecipe("ass.vitrifiedbarrel").setup(400, 400).outputItems(new ItemStack(ModBlocks.vitrified_barrel, 1)) + .inputItems(new ComparableStack(ModItems.tank_steel, 1), new OreDictStack(PB.plate(), 2), new ComparableStack(ModItems.nuclear_waste_vitrified, 10))); + // nuclear door mod this.register(new GenericRecipe("ass.vaultdoor").setup(600, 100).outputItems(new ItemStack(ModBlocks.vault_door, 1)) .inputItems(new OreDictStack(STEEL.ingot(), 32), new OreDictStack(DURA.ingot(), 32), new OreDictStack(PB.plateCast(), 8), new OreDictStack(ANY_RUBBER.ingot(), 12), new OreDictStack(DURA.bolt(), 32), new ComparableStack(ModItems.motor, 3))); @@ -187,7 +193,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 4))); this.register(new GenericRecipe("ass.silohatchlarge").setup(300, 100).outputItems(new ItemStack(ModBlocks.silo_hatch_large, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 6), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 8))); - + // decoration this.register(new GenericRecipe("ass.capnuka").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.NUKA)) .inputItems(new ComparableStack(ModItems.cap_nuka, 64), new ComparableStack(ModItems.cap_nuka, 64))); @@ -205,7 +211,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) .inputItems()); */ - + // machines this.register(new GenericRecipe("ass.shredder").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_shredder, 1)) .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2)) @@ -335,7 +341,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.chemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_factory, 1)) .inputItems(new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 8), new ComparableStack(ModItems.motor_desh, 4), new ComparableStack(ModItems.coil_tungsten, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 16), new ComparableStack(ModItems.motor_desh, 16), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); - + // generators this.register(new GenericRecipe("ass.dieselgen").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_diesel, 1)) .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4)) @@ -374,7 +380,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.hpcondenser").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_condenser_powered, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 4), new OreDictStack(CU.plate528(), 16), new ComparableStack(ModItems.motor_desh, 3), new OreDictStack(STEEL.pipe(), 24), new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 4)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModItems.motor_desh, 5), new OreDictStack(STEEL.pipe(), 24), new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 16))); - + // batteries this.register(new GenericRecipe("ass.battery").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 1), new OreDictStack(S.dust(), 12), new OreDictStack(PB.dust(), 12))); @@ -409,7 +415,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.ingot_u238m2), new ComparableStack(ModItems.ingot_cft, 64), new ComparableStack(ModItems.ingot_cft, 64))); - + // fluid tanks this.register(new GenericRecipe("ass.tank").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_fluidtank, 1)) .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_TAR.any(), 4)) @@ -450,7 +456,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.exposurechamber").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_exposure_chamber, 1)) .inputItems(new OreDictStack(AL.plateCast(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModBlocks.capacitor_tantalium, 1), new ComparableStack(ModBlocks.glass_quartz, 16)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_HARDPLASTIC.ingot(), 24), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.COMPUTER))); - + // reactors this.register(new GenericRecipe("ass.breedingreactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_reactor_breeding, 1)) .inputItems(new ComparableStack(ModItems.reactor_core, 1), new OreDictStack(STEEL.ingot(), 12), new OreDictStack(PB.plate(), 16), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ASBESTOS.ingot(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.crt_display, 1)) @@ -467,7 +473,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.rbmkautoloader").setup(100, 100).outputItems(new ItemStack(ModBlocks.rbmk_autoloader, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(PB.plateCast(), 4), new OreDictStack(B.ingot(), 4), new ComparableStack(ModItems.motor, 3)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModItems.motor_desh, 3))); - + // fusion reactor this.register(new GenericRecipe("ass.fusioncore").setup(600, 100).outputItems(new ItemStack(ModBlocks.struct_iter_core, 1)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 6), new OreDictStack(W.plateWelded(), 6), new OreDictStack(OreDictManager.getReflector(), 12), new ComparableStack(ModItems.coil_advanced_alloy, 12), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID)) @@ -489,7 +495,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(DESH.block(), 16), new OreDictStack(CO.block(), 16), new OreDictStack(BIGMT.plate(), 64))); this.register(new GenericRecipe("ass.blanketchlorophyte").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_chlorophyte, 1)) .inputItems(new OreDictStack(W.block(), 16), new OreDictStack(DURA.block(), 16), new OreDictStack(OreDictManager.getReflector(), 48), new ComparableStack(ModItems.powder_chlorophyte, 48))); - + // watz this.register(new GenericRecipe("ass.watzrod").setup(200, 100).outputItems(new ItemStack(ModBlocks.watz_element, 3)) .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4)) @@ -500,7 +506,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.watzcasing").setup(100, 100).outputItems(new ItemStack(ModBlocks.watz_end, 3)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plateWelded(), 2)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 6, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_RESISTANTALLOY.plateWelded()))); - + // ICF this.register(new GenericRecipe("ass.icfcell").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CELL.ordinal())) .inputItems(new ComparableStack(ModItems.ingot_cft, 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new ComparableStack(ModBlocks.glass_quartz, 16)) @@ -537,7 +543,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItemsEx(new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.QUANTUM), new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.COMPUTER))); this.register(new GenericRecipe("ass.icfpress").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_icf_press, 1)) .inputItems(new OreDictStack(GOLD.plateCast(), 8), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))); - + // upgrades this.register(new GenericRecipe("ass.overdrive1").setup(200, 100).outputItems(new ItemStack(ModItems.upgrade_overdrive_1, 1)) .inputItems(new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(BIGMT.ingot(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED))); @@ -549,19 +555,19 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) .inputItems()); */ - + // rancid shit mob spawners this.register(new GenericRecipe("ass.chopper").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_chopper, 8)) .inputItems(new OreDictStack(CMB.plateCast(), 24), new OreDictStack(STEEL.plate(), 32), new OreDictStack(MAGTUNG.wireFine(), 48), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER_ADVANCED))); this.register(new GenericRecipe("ass.ballsotron").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_worm, 1)) .inputItems(new OreDictStack(TI.plateWelded(), 32), new OreDictStack(RUBBER.ingot(), 64), new ComparableStack(ModItems.motor, 64), new OreDictStack(GOLD.wireDense(), 64), new OreDictStack(U238.block(), 10), new ComparableStack(ModItems.mech_key, 1))); - + // weapon parts this.register(new GenericRecipe("ass.clusterpellets").setup(50, 100).outputItems(new ItemStack(ModItems.pellet_cluster, 1)) .inputItems(new OreDictStack(STEEL.plate(), 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 1))); this.register(new GenericRecipe("ass.buckshot").setup(50, 100).outputItems(new ItemStack(ModItems.pellet_buckshot, 1)) .inputItems(new OreDictStack(PB.nugget(), 6))); - + // bombs this.register(new GenericRecipe("ass.minenaval").setup(300, 100).outputItems(new ItemStack(ModBlocks.mine_naval, 1)) .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(STEEL.pipe(), 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 24))); @@ -598,7 +604,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModItems., 1)) .inputItems()); */ - + // bomb parts this.register(new GenericRecipe("ass.explosivelenses1").setup(400, 100).outputItems(new ItemStack(ModItems.early_explosive_lenses, 1)) .inputItems(new OreDictStack(AL.plate(), 8), new OreDictStack(GOLD.wireFine(), 16), new ComparableStack(ModBlocks.det_cord, 8), new OreDictStack(CU.plate(), 2), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 20), new OreDictStack(ANY_PLASTIC.ingot(), 4))); @@ -641,7 +647,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(SA327.nugget(), 9), new OreDictStack(EUPH.nugget(), 1))); this.register(new GenericRecipe("ass.soliniumcharge").setup(300, 100).outputItems(new ItemStack(ModItems.solinium_propellant, 1)) .inputItems(new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.plate_polymer, 6), new OreDictStack(W.wireFine(), 6), new ComparableStack(ModItems.biomass_compressed, 4))); - + // grenades this.register(new GenericRecipe("ass.incgrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_fire, 1)) .inputItems(new ComparableStack(ModItems.grenade_frag, 1), new OreDictStack(P_RED.dust(), 1), new OreDictStack(CU.plate(), 2))); @@ -672,7 +678,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) .inputItems()); */ - + // turrets this.register(new GenericRecipe("ass.turretchekhov").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_chekhov, 1)) .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1))); @@ -755,7 +761,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(ANY_CONCRETE.any(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModBlocks.steel_scaffold, 24), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED))); this.register(new GenericRecipe("ass.launchpadsilo").setup(200, 100).outputItems(new ItemStack(ModBlocks.launch_pad, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(ANY_CONCRETE.any(), 8), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED))); - + // custom missile thrusters this.register(new GenericRecipe("ass.mpt10kero").setup(100, 100).outputItems(new ItemStack(ModItems.mp_thruster_10_kerosene, 1)) .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate(), 4))); @@ -795,7 +801,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.seg_20, 1), new OreDictStack(DURA.pipe(), 6), new OreDictStack(W.ingot(), 16), new OreDictStack(STEEL.plate(), 16))); this.register(new GenericRecipe("ass.mpt20solidmultier").setup(400, 100).outputItems(new ItemStack(ModItems.mp_thruster_20_solid_multier, 1)) .inputItems(new ComparableStack(ModItems.seg_20, 1), new OreDictStack(DURA.pipe(), 6), new OreDictStack(W.ingot(), 16), new OreDictStack(STEEL.plate(), 16))); - + // custom missile fuselages this.register(new GenericRecipe("ass.mpf10kero").setup(100, 100).outputItems(new ItemStack(ModItems.mp_fuselage_10_kerosene, 1)) .inputItems(new ComparableStack(ModItems.seg_10, 2), new OreDictStack(AL.plate(), 12), new OreDictStack(STEEL.plate(), 3))); @@ -825,7 +831,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.seg_20, 1), new OreDictStack(AL.plate(), 48), new OreDictStack(STEEL.plate(), 16))); this.register(new GenericRecipe("ass.mpf1520solid").setup(400, 100).outputItems(new ItemStack(ModItems.mp_fuselage_15_20_solid, 1)) .inputItems(new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.seg_20, 1), new OreDictStack(TI.plate(), 48), new OreDictStack(STEEL.plate(), 16))); - + // custom missile warheads this.register(new GenericRecipe("ass.mpw10he").setup(100, 100).outputItems(new ItemStack(ModItems.mp_warhead_10_he, 1)) .inputItems(new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); @@ -851,12 +857,12 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(WEAPONSTEEL.plate(), 32), new ComparableStack(ModItems.ball_tatb, 32), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED))); this.register(new GenericRecipe("ass.mpw15bf").setup(400, 100).outputItems(new ItemStack(ModItems.mp_warhead_15_balefire, 1)) .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(WEAPONSTEEL.plate(), 32), new OreDictStack(OreDictManager.getReflector(), 16), new ComparableStack(ModItems.powder_magic, 8), new ComparableStack(ModItems.egg_balefire_shard, 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 16), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER))); - + /* this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModItems., 1)) .inputItems()); */ - + // weapons this.register(new GenericRecipe("ass.schrabhammer").setup(6_000, 100).outputItems(new ItemStack(ModItems.schrabidium_hammer, 1)) .inputItems( @@ -872,7 +878,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.fragment_meteorite, 64), new ComparableStack(ModItems.fragment_meteorite, 64), new ComparableStack(ModItems.fragment_meteorite, 64))); - + // ammo this.register(new GenericRecipe("ass.50bmgsm").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_standard, 6, EnumAmmo.BMG50_SM.ordinal())) .inputItems(new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE_STEEL), new OreDictStack(ANY_SMOKELESS.dust(), 6), new OreDictStack(STAR.ingot(), 3)) @@ -889,11 +895,11 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.shellmustard").setup(100, 1_000).outputItems(new ItemStack(ModItems.ammo_arty, 1, 11)) .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) .inputFluids(new FluidStack(Fluids.MUSTARDGAS, 4_000))); - + // tools this.register(new GenericRecipe("ass.multitool").setup(100, 100).outputItems(new ItemStack(ModItems.multitool_hit, 1)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(STEEL.plate(), 4), new OreDictStack(GOLD.wireFine(), 12), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD))); - + // space this.register(new GenericRecipe("ass.soyuz").setup(6_000, 100).outputItems(new ItemStack(ModItems.missile_soyuz, 1)) .inputItems(new OreDictStack(TI.shell(), 32), @@ -1006,11 +1012,11 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.unpackage" + type.getUnlocalizedName()).setup(40, 100).setIcon(ItemFluidIcon.make(type, 32_000)).outputItems(new ItemStack(ModItems.fluid_pack_empty)) .inputItems(new ComparableStack(ModItems.fluid_pack_full, 1, type.getID())).outputFluids(new FluidStack(type, 32_000))); } - + if(GeneralConfig.enableMekanismChanges && Loader.isModLoaded("Mekanism")) { Block mb = (Block) Block.blockRegistry.getObject("Mekanism:MachineBlock"); if(mb != null) { - + this.register(new GenericRecipe("ass.digimemer").setup(1_200, 100).outputItems(new ItemStack(mb, 1, 4)) .inputItems(new OreDictStack(BIGMT.plateCast(), 16), new OreDictStack(CU.plateWelded(), 12), @@ -1021,12 +1027,12 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.motor_bismuth, 3))); } } - + } - + public static HashMap getRecipes() { HashMap recipes = new HashMap(); - + for(GenericRecipe recipe : INSTANCE.recipeOrderedList) { List input = new ArrayList(); if(recipe.inputItem != null) for(AStack stack : recipe.inputItem) input.add(stack); @@ -1036,7 +1042,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { if(recipe.outputFluid != null) for(FluidStack stack : recipe.outputFluid) output.add(ItemFluidIcon.make(stack)); recipes.put(input.toArray(), output.toArray()); } - + return recipes; } } From 7bfb6ac7c6c24fcc2524b7f5e68dbaca89476219 Mon Sep 17 00:00:00 2001 From: LegendaryDoge30 Date: Wed, 6 Aug 2025 02:13:36 +0200 Subject: [PATCH 336/491] open computer open computers capacitor --- .../hbm/blocks/machine/MachineCapacitor.java | 78 ++++++++++++++++++- 1 file changed, 76 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java b/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java index 22a60d7b1..5bb2c3933 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java @@ -3,6 +3,12 @@ package com.hbm.blocks.machine; import java.util.ArrayList; import java.util.List; +import com.hbm.handler.CompatHandler; +import cpw.mods.fml.common.Optional; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.SimpleComponent; import org.lwjgl.input.Keyboard; import com.hbm.blocks.ILookOverlay; @@ -149,13 +155,15 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1); player.addExhaustion(0.025F); } - - public static class TileEntityCapacitor extends TileEntityLoadedBase implements IEnergyProviderMK2, IEnergyReceiverMK2, IPersistentNBT, IRORValueProvider { + @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) + public static class TileEntityCapacitor extends TileEntityLoadedBase implements IEnergyProviderMK2, IEnergyReceiverMK2, IPersistentNBT, IRORValueProvider, SimpleComponent, CompatHandler.OCComponent { public long power; protected long maxPower; public long powerReceived; public long powerSent; + public long lastPowerReceived; + public long lastPowerSent; public TileEntityCapacitor() { } @@ -198,6 +206,8 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP networkPackNT(15); + this.lastPowerSent = powerSent; + this.lastPowerReceived = powerReceived; this.powerSent = 0; this.powerReceived = 0; } @@ -315,5 +325,69 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP if((PREFIX_VALUE + "fillpercent").equals(name)) return "" + this.power * 100 / this.maxPower; return null; } + + // opencomputer + @Override + @Optional.Method(modid = "OpenComputers") + public String getComponentName() { + return "capacitor"; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getEnergy(Context context, Arguments args) { + return new Object[] {power}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getMaxEnergy(Context context, Arguments args) { + return new Object[] {maxPower}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getEnergySent(Context context, Arguments args) { + return new Object[] {lastPowerReceived}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getEnergyReceived(Context context, Arguments args) { return new Object[] {lastPowerSent}; } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getInfo(Context context, Arguments args) { + return new Object[] {power, maxPower, lastPowerReceived, lastPowerSent}; + } + + @Override + @Optional.Method(modid = "OpenComputers") + public String[] methods() { + return new String[] { + "getEnergy", + "getMaxEnergy", + "getEnergySent", + "getEnergyReceived", + "getInfo" + }; + } + @Override + @Optional.Method(modid = "OpenComputers") + public Object[] invoke(String method, Context context, Arguments args) throws Exception { + switch(method) { + case ("getEnergy"): + return getEnergy(context, args); + case ("getMaxEnergy"): + return getMaxEnergy(context, args); + case ("getEnergySent"): + return getEnergySent(context, args); + case ("getEnergyReceived"): + return getEnergyReceived(context, args); + case ("getInfo"): + return getEnergyReceived(context, args); + } + throw new NoSuchMethodException(); + } } } From d70464b3d12457f35120c998cf3b9f188580853b Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 6 Aug 2025 20:13:44 +0200 Subject: [PATCH 337/491] QMAW the second (third?) --- changelog | 16 +--- .../inventory/recipes/ArcFurnaceRecipes.java | 4 + .../hbm/inventory/recipes/PUREXRecipes.java | 4 +- src/main/java/com/hbm/items/ModItems.java | 14 ---- .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 4 +- src/main/java/com/hbm/main/MainRegistry.java | 5 ++ .../java/com/hbm/main/ModEventHandler.java | 5 +- .../com/hbm/main/ModEventHandlerClient.java | 26 ++++++ .../java/com/hbm/main/ResourceManager.java | 4 - src/main/java/com/hbm/qmaw/GuiQMAW.java | 60 +++++++++++++- src/main/java/com/hbm/qmaw/QMAWLoader.java | 54 ++++++++++++- .../java/com/hbm/qmaw/QuickManualAndWiki.java | 28 +++++++ .../hbm/qmaw/components/QComponentLink.java | 81 +++++++++++++++++++ .../java/com/hbm/render/util/MissilePart.java | 8 -- .../resources/assets/hbm/manual/demo.json | 4 + 15 files changed, 268 insertions(+), 49 deletions(-) create mode 100644 src/main/java/com/hbm/qmaw/components/QComponentLink.java diff --git a/changelog b/changelog index bc517c4ea..fa5fe2270 100644 --- a/changelog +++ b/changelog @@ -1,15 +1,7 @@ -## Added (last time, i forgor) -* RBMK autoloader - * Can be placed on top of RBMK fuel rods - * Can be configured to switch fuel rods in 5% depletion increments - * Usable with all forms of item transport like conveyors and pneumatic tubes - ## Changed -* Replaced "re-enrichment" in the PUREX recipes with "reprocessing" +* All the never completed missile parts (20/20 fuselage, 20 warhead, 10 and 15 tec kerosene thrusters) have been removed +* The electric arc furnace now scrapes the vanilla furnace recipe list on server start in addition to postinit, making sure recipes added during postinit after NTM loads (like Thermal's ingots) are covered too ## Fixed -* Fixed many of the PUREX' recipe categories simply not processing - * It worked last time I swear -* Fixed life-ending issue where the assembler achievement's icon was incorrect -* Fixed RBMK autoloader not having a recipe - * Ow \ No newline at end of file +* Fixed GT6 compatibility watz pellets crashing due to misconfigured recipes +* Removed failed attempt at fixing the gun desync dupe which made things worse \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java index 35b202158..fae8f617f 100644 --- a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java @@ -111,6 +111,10 @@ public class ArcFurnaceRecipes extends SerializableRecipe { } // Autogen for furnace recipes + registerFurnaceSmeltables(); + } + + public static void registerFurnaceSmeltables() { for(Object o : FurnaceRecipes.smelting().getSmeltingList().entrySet()) { Entry entry = (Entry) o; ItemStack input = (ItemStack) entry.getKey(); diff --git a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java index 3849b1759..76cdc088c 100644 --- a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java @@ -431,7 +431,7 @@ public class PUREXRecipes extends GenericRecipes { ItemStack copy = nuggetNQR.copy(); copy.stackSize = 12; - this.register(new GenericRecipe("purex.watzdu").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register(new GenericRecipe("purex.watznaqadah").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.NQD)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(copy, @@ -440,7 +440,7 @@ public class PUREXRecipes extends GenericRecipes { .outputFluids(new FluidStack(Fluids.WATZ, 1_000)) .setIconToFirstIngredient()); - this.register(new GenericRecipe("purex.watzdu").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) + this.register(new GenericRecipe("purex.watznaqadria").setup(60, watzPower).setNameWrapper("purex.recycle").setGroup(autoWatz, this) .inputItems(new ComparableStack(ModItems.watz_pellet_depleted, 1, EnumWatzType.NQR)) .inputFluids(new FluidStack(Fluids.KEROSENE, 500), new FluidStack(Fluids.NITRIC_ACID, 250)) .outputItems(new ItemStack(ModItems.nugget_co60, 12), diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 24af636e0..f04a7218f 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1236,11 +1236,9 @@ public class ModItems { public static Item missile_test; public static Item mp_thruster_10_kerosene; - public static Item mp_thruster_10_kerosene_tec; public static Item mp_thruster_10_solid; public static Item mp_thruster_10_xenon; public static Item mp_thruster_15_kerosene; - public static Item mp_thruster_15_kerosene_tec; public static Item mp_thruster_15_kerosene_dual; public static Item mp_thruster_15_kerosene_triple; public static Item mp_thruster_15_solid; @@ -1351,8 +1349,6 @@ public class ModItems { public static Item mp_fuselage_15_20_kerosene_magnusson; public static Item mp_fuselage_15_20_solid; - public static Item mp_fuselage_20_kerosene; - public static Item mp_warhead_10_he; public static Item mp_warhead_10_incendiary; public static Item mp_warhead_10_buster; @@ -1369,7 +1365,6 @@ public class ModItems { public static Item mp_warhead_15_n2; public static Item mp_warhead_15_balefire; public static Item mp_warhead_15_turbine; - public static Item mp_warhead_20_he; public static Item mp_chip_1; public static Item mp_chip_2; @@ -3592,11 +3587,9 @@ public class ModItems { sat_relay = new ItemSatChip().setUnlocalizedName("sat_relay").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_relay"); mp_thruster_10_kerosene = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 1.5F, PartSize.SIZE_10).setHealth(10F) .setUnlocalizedName("mp_thruster_10_kerosene"); - mp_thruster_10_kerosene_tec = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 1.5F, PartSize.SIZE_10).setHealth(15F).setRarity(Rarity.COMMON).setUnlocalizedName("mp_thruster_10_kerosene_tec"); mp_thruster_10_solid = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 1.5F, PartSize.SIZE_10).setHealth(15F) .setUnlocalizedName("mp_thruster_10_solid"); mp_thruster_10_xenon = new ItemCustomMissilePart().makeThruster(FuelType.XENON, 1F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_thruster_10_xenon"); mp_thruster_15_kerosene = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 7.5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_kerosene"); - mp_thruster_15_kerosene_tec = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 7.5F, PartSize.SIZE_15).setHealth(20F).setRarity(Rarity.COMMON).setUnlocalizedName("mp_thruster_15_kerosene_tec"); mp_thruster_15_kerosene_dual = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 2.5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_kerosene_dual"); mp_thruster_15_kerosene_triple = new ItemCustomMissilePart().makeThruster(FuelType.KEROSENE, 1F, 5F, PartSize.SIZE_15).setHealth(15F) .setUnlocalizedName("mp_thruster_15_kerosene_triple"); mp_thruster_15_solid = new ItemCustomMissilePart().makeThruster(FuelType.SOLID, 1F, 5F, PartSize.SIZE_15).setHealth(20F) .setUnlocalizedName("mp_thruster_15_solid"); @@ -3707,8 +3700,6 @@ public class ModItems { mp_fuselage_15_20_kerosene_magnusson = ((ItemCustomMissilePart)mp_fuselage_15_20_kerosene).copy().setRarity(Rarity.RARE).setAuthor("VT-6/24").setTitle("White Forest Rocket").setWittyText("And get your cranio-conjugal parasite away from my nose cone!").setUnlocalizedName("mp_fuselage_15_20_kerosene_magnusson"); mp_fuselage_15_20_solid = new ItemCustomMissilePart().makeFuselage(FuelType.SOLID, 20000, PartSize.SIZE_15, PartSize.SIZE_20).setHealth(70F).setUnlocalizedName("mp_fuselage_15_20_solid").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); - mp_fuselage_20_kerosene = new ItemCustomMissilePart().makeFuselage(FuelType.KEROSENE, 1000F, PartSize.SIZE_20, PartSize.SIZE_20) .setUnlocalizedName("mp_f_20").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_fuselage"); - mp_warhead_10_he = new ItemCustomMissilePart().makeWarhead(WarheadType.HE, 15F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_warhead_10_he").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_10_incendiary = new ItemCustomMissilePart().makeWarhead(WarheadType.INC, 15F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_warhead_10_incendiary").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_10_buster = new ItemCustomMissilePart().makeWarhead(WarheadType.BUSTER, 5F, 1.5F, PartSize.SIZE_10).setHealth(5F) .setUnlocalizedName("mp_warhead_10_buster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); @@ -3725,7 +3716,6 @@ public class ModItems { mp_warhead_15_n2 = new ItemCustomMissilePart().makeWarhead(WarheadType.N2, 100F, 5F, PartSize.SIZE_15).setWittyText("[screams geometrically]").setHealth(20F).setRarity(Rarity.RARE).setUnlocalizedName("mp_warhead_15_n2").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_15_balefire = new ItemCustomMissilePart().makeWarhead(WarheadType.BALEFIRE, 100F, 7.5F, PartSize.SIZE_15).setRarity(Rarity.LEGENDARY).setAuthor("VT-6/24").setHealth(15F).setWittyText("Hightower, never forgetti.").setUnlocalizedName("mp_warhead_15_balefire").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_15_turbine = new ItemCustomMissilePart().makeWarhead(WarheadType.TURBINE, 200F, 5F, PartSize.SIZE_15).setRarity(Rarity.SEWS_CLOTHES_AND_SUCKS_HORSE_COCK).setHealth(250F).setUnlocalizedName("mp_warhead_15_turbine").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_20_he = new ItemCustomMissilePart().makeWarhead(WarheadType.HE, 15F, 1F, PartSize.SIZE_20) .setUnlocalizedName("mp_w_20").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_chip_1 = new ItemCustomMissilePart().makeChip(0.1F) .setUnlocalizedName("mp_c_1").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_1"); mp_chip_2 = new ItemCustomMissilePart().makeChip(0.05F) .setUnlocalizedName("mp_c_2").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_2"); @@ -6204,11 +6194,9 @@ public class ModItems { //Missile Parts GameRegistry.registerItem(mp_thruster_10_kerosene, mp_thruster_10_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_10_kerosene_tec, mp_thruster_10_kerosene_tec.getUnlocalizedName()); GameRegistry.registerItem(mp_thruster_10_solid, mp_thruster_10_solid.getUnlocalizedName()); GameRegistry.registerItem(mp_thruster_10_xenon, mp_thruster_10_xenon.getUnlocalizedName()); GameRegistry.registerItem(mp_thruster_15_kerosene, mp_thruster_15_kerosene.getUnlocalizedName()); - GameRegistry.registerItem(mp_thruster_15_kerosene_tec, mp_thruster_15_kerosene_tec.getUnlocalizedName()); GameRegistry.registerItem(mp_thruster_15_kerosene_dual, mp_thruster_15_kerosene_dual.getUnlocalizedName()); GameRegistry.registerItem(mp_thruster_15_kerosene_triple, mp_thruster_15_kerosene_triple.getUnlocalizedName()); GameRegistry.registerItem(mp_thruster_15_solid, mp_thruster_15_solid.getUnlocalizedName()); @@ -6306,7 +6294,6 @@ public class ModItems { GameRegistry.registerItem(mp_fuselage_15_20_kerosene, mp_fuselage_15_20_kerosene.getUnlocalizedName()); GameRegistry.registerItem(mp_fuselage_15_20_kerosene_magnusson, mp_fuselage_15_20_kerosene_magnusson.getUnlocalizedName()); GameRegistry.registerItem(mp_fuselage_15_20_solid, mp_fuselage_15_20_solid.getUnlocalizedName()); - GameRegistry.registerItem(mp_fuselage_20_kerosene, mp_fuselage_20_kerosene.getUnlocalizedName()); GameRegistry.registerItem(mp_warhead_10_he, mp_warhead_10_he.getUnlocalizedName()); GameRegistry.registerItem(mp_warhead_10_incendiary, mp_warhead_10_incendiary.getUnlocalizedName()); GameRegistry.registerItem(mp_warhead_10_buster, mp_warhead_10_buster.getUnlocalizedName()); @@ -6323,7 +6310,6 @@ public class ModItems { GameRegistry.registerItem(mp_warhead_15_n2, mp_warhead_15_n2.getUnlocalizedName()); GameRegistry.registerItem(mp_warhead_15_balefire, mp_warhead_15_balefire.getUnlocalizedName()); GameRegistry.registerItem(mp_warhead_15_turbine, mp_warhead_15_turbine.getUnlocalizedName()); - GameRegistry.registerItem(mp_warhead_20_he, mp_warhead_20_he.getUnlocalizedName()); GameRegistry.registerItem(mp_chip_1, mp_chip_1.getUnlocalizedName()); GameRegistry.registerItem(mp_chip_2, mp_chip_2.getUnlocalizedName()); GameRegistry.registerItem(mp_chip_3, mp_chip_3.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index f77640e05..704eb09a6 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -450,8 +450,8 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I Minecraft.getMinecraft().renderEngine.bindTexture(Gui.icons); } - @Override - public boolean getShareTag() { return false; } + /*@Override + public boolean getShareTag() { return false; }*/ // nbt sync dupe fix, didn't work public static class SmokeNode { diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index f797b0de3..d6cd9eea2 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -967,6 +967,7 @@ public class MainRegistry { event.registerServerCommand(new CommandRadiation()); event.registerServerCommand(new CommandPacketInfo()); event.registerServerCommand(new CommandReloadServer()); + ArcFurnaceRecipes.registerFurnaceSmeltables(); // because we have to wait for other mods to take their merry ass time to register recipes } @EventHandler @@ -1724,6 +1725,10 @@ public class MainRegistry { ignoreMappings.add("hbm:tile.machine_arc_furnace_off"); ignoreMappings.add("hbm:tile.machine_arc_furnace_on"); ignoreMappings.add("hbm:item.heavy_component"); + ignoreMappings.add("hbm:item.mp_w_20"); + ignoreMappings.add("hbm:item.mp_f_20"); + ignoreMappings.add("hbm:item.mp_thruster_10_kerosene_tec"); + ignoreMappings.add("hbm:item.mp_thruster_15_kerosene_tec"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 4a3ded4e7..7632100df 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -40,7 +40,6 @@ import com.hbm.items.weapon.sedna.factory.XFactory12ga; import com.hbm.lib.ModDamageSource; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toclient.HeldItemNBTPacket; import com.hbm.packet.toclient.PermaSyncPacket; import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.packet.toclient.SerializableRecipePacket; @@ -990,10 +989,10 @@ public class ModEventHandler { } } - if(!player.worldObj.isRemote && event.phase == TickEvent.Phase.END && player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT && player instanceof EntityPlayerMP) { + /*if(!player.worldObj.isRemote && event.phase == TickEvent.Phase.END && player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT && player instanceof EntityPlayerMP) { HeldItemNBTPacket packet = new HeldItemNBTPacket(player.getHeldItem()); PacketDispatcher.wrapper.sendTo(packet, (EntityPlayerMP) player); - } + }*/ } @SubscribeEvent diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index ed62ac103..823e38433 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -36,6 +36,9 @@ import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.AuxButtonPacket; +import com.hbm.qmaw.GuiQMAW; +import com.hbm.qmaw.QMAWLoader; +import com.hbm.qmaw.QuickManualAndWiki; import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations.Animation; import com.hbm.render.block.ct.CTStitchReceiver; @@ -747,6 +750,17 @@ public class ModEventHandlerClient { list.add(EnumChatFormatting.RED + "Error loading cannery: " + ex.getLocalizedMessage()); } + try { + QuickManualAndWiki qmaw = QMAWLoader.triggers.get(comp); + if(qmaw != null) { + list.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey("qmaw.tab")); + lastQMAW = qmaw; + qmawTimestamp = Clock.get_ms(); + } + } catch(Exception ex) { + list.add(EnumChatFormatting.RED + "Error loading cannery: " + ex.getLocalizedMessage()); + } + /*ItemStack copy = stack.copy(); List materials = Mats.getMaterialsFromItem(copy); @@ -759,6 +773,8 @@ public class ModEventHandlerClient { private static long canneryTimestamp; private static ComparableStack lastCannery = null; + private static long qmawTimestamp; + private static QuickManualAndWiki lastQMAW = null; private ResourceLocation ashes = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_ash.png"); @@ -891,6 +907,16 @@ public class ModEventHandlerClient { } } + if(Keyboard.isKeyDown(Keyboard.KEY_TAB) && Minecraft.getMinecraft().currentScreen != null) { + + QuickManualAndWiki qmaw = qmawTimestamp > Clock.get_ms() - 100 ? lastQMAW : null; + + if(qmaw != null) { + Minecraft.getMinecraft().thePlayer.closeScreen(); + FMLCommonHandler.instance().showGuiScreen(new GuiQMAW(qmaw)); + } + } + if(Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) && Keyboard.isKeyDown(Keyboard.KEY_LMENU)) { ItemStack stack = getMouseOverStack(); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index a3651233d..bc109ad26 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1193,11 +1193,9 @@ public class ResourceManager { public static final IModelCustom launch_table_small_scaffold_empty = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/launch_table/launch_table_small_scaffold_empty.obj")); public static final IModelCustom mp_t_10_kerosene = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_10_kerosene.obj")); - public static final IModelCustom mp_t_10_kerosene_tec = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_10_kerosene_tec.obj")); public static final IModelCustom mp_t_10_solid = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_10_solid.obj")); public static final IModelCustom mp_t_10_xenon = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_10_xenon.obj")); public static final IModelCustom mp_t_15_kerosene = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_15_kerosene.obj")); - public static final IModelCustom mp_t_15_kerosene_tec = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_15_kerosene_tec.obj")); public static final IModelCustom mp_t_15_kerosene_dual = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_15_kerosene_dual.obj")); public static final IModelCustom mp_t_15_kerosene_triple = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_15_kerosene_triple.obj")); public static final IModelCustom mp_t_15_solid = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_15_solid.obj")); @@ -1225,7 +1223,6 @@ public class ResourceManager { public static final IModelCustom mp_f_15_kerosene = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_f_15_kerosene.obj")); public static final IModelCustom mp_f_15_hydrogen = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_f_15_hydrogen.obj")); public static final IModelCustom mp_f_15_20_kerosene = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_f_15_20_kerosene.obj")); - public static final IModelCustom mp_f_20 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_f_20.obj")); public static final IModelCustom mp_w_10_he = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_10_he.obj")); public static final IModelCustom mp_w_10_incendiary = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_10_incendiary.obj")); @@ -1240,7 +1237,6 @@ public class ResourceManager { public static final IModelCustom mp_w_15_n2 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_15_n2.obj")); public static final IModelCustom mp_w_15_balefire = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_15_balefire.obj")); public static final IModelCustom mp_w_15_turbine = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_15_turbine.obj")); - public static final IModelCustom mp_w_20 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_20.obj")); //Carts public static final IModelCustom cart = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/vehicles/cart.obj")); diff --git a/src/main/java/com/hbm/qmaw/GuiQMAW.java b/src/main/java/com/hbm/qmaw/GuiQMAW.java index b579a846e..9e3b37595 100644 --- a/src/main/java/com/hbm/qmaw/GuiQMAW.java +++ b/src/main/java/com/hbm/qmaw/GuiQMAW.java @@ -1,5 +1,63 @@ package com.hbm.qmaw; -public class GuiQMAW { +import java.util.ArrayList; +import java.util.List; +import org.lwjgl.opengl.GL11; + +import com.hbm.lib.RefStrings; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.ResourceLocation; + +public class GuiQMAW extends GuiScreen { + + protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_wiki.png"); + + public String title; + public List lines = new ArrayList(); + + protected int xSize = 192; + protected int ySize = 256; + protected int guiLeft; + protected int guiTop; + + public GuiQMAW(QuickManualAndWiki qmaw) { + parseQMAW(qmaw); + } + + protected void parseQMAW(QuickManualAndWiki qmaw) { + + } + + @Override + public void initGui() { + super.initGui(); + this.guiLeft = (this.width - this.xSize) / 2; + this.guiTop = (this.height - this.ySize) / 2; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + this.drawDefaultBackground(); + this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); + GL11.glDisable(GL11.GL_LIGHTING); + this.drawGuiContainerForegroundLayer(mouseX, mouseY); + GL11.glEnable(GL11.GL_LIGHTING); + } + + private void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { + + int x = 0; + int y = 0; + + this.fontRendererObj.drawString(title, guiLeft + x, guiTop + y, 0xFFFFFF); + } + + private void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } } diff --git a/src/main/java/com/hbm/qmaw/QMAWLoader.java b/src/main/java/com/hbm/qmaw/QMAWLoader.java index 710511a4b..c5bdf391e 100644 --- a/src/main/java/com/hbm/qmaw/QMAWLoader.java +++ b/src/main/java/com/hbm/qmaw/QMAWLoader.java @@ -7,13 +7,19 @@ import java.io.InputStreamReader; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; +import java.util.Map.Entry; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.hbm.interfaces.NotableComments; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.recipes.loader.SerializableRecipe; +import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; import net.minecraft.client.Minecraft; @@ -23,6 +29,7 @@ import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; import net.minecraft.client.resources.IResourcePack; import net.minecraft.client.resources.ResourcePackRepository; +import net.minecraft.item.ItemStack; @NotableComments public class QMAWLoader implements IResourceManagerReloadListener { @@ -31,6 +38,7 @@ public class QMAWLoader implements IResourceManagerReloadListener { public static final Gson gson = new Gson(); public static final JsonParser parser = new JsonParser(); public static HashMap qmaw = new HashMap(); + public static HashMap triggers = new HashMap(); @Override public void onResourceManagerReload(IResourceManager resMan) { @@ -50,13 +58,22 @@ public class QMAWLoader implements IResourceManagerReloadListener { //the mod's file, assuming the mod is a file (not the case in a dev env, fuck!) //no fucking null check, if this fails then the entire game will sink along with the ship - registerModFileURL(new File(QMAWLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath())); // i am going to shit myself + String path = QMAWLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath(); + // exclude .class in the case of a dev env + if(!path.endsWith(".class")) registerModFileURL(new File(path)); // i am going to shit myself qmaw.clear(); + triggers.clear(); agonyEngine(); } - /** "digital equivalent to holywater" yielded few results on google, if only i had the answer i would drown this entire class in it */ + /** "digital equivalent to holywater" yielded few results on google, if only i had the answer i would drown this entire class in it

+ * This affront to god can load QMAW definition files from four different sources:
+ * * Any mod's jar that has registered itself to include QMAW files
+ * * The dev environment, because "the mod file" would in this case be this very class file, and that's incorrect
+ * * ZIP-based resource packs
+ * * Folder-based resource packs + * */ public static void agonyEngine() { for(File modFile : registeredModFiles) dissectZip(modFile); @@ -154,7 +171,38 @@ public class QMAWLoader implements IResourceManagerReloadListener { } } + /** Extracts all the info from a json file's main object to add a QMAW to the system. Very barebones, only handles name, icon and the localized text. */ public static void registerJson(String name, JsonObject json) { - //TBI + QuickManualAndWiki qmaw = new QuickManualAndWiki(name); + + if(json.has("icon")) { + qmaw.setIcon(SerializableRecipe.readItemStack(json.get("icon").getAsJsonArray())); + } + + JsonObject title = json.get("title").getAsJsonObject(); + for(Entry part : title.entrySet()) { + qmaw.addTitle(part.getKey(), part.getValue().getAsString()); + } + + JsonObject content = json.get("content").getAsJsonObject(); + for(Entry part : content.entrySet()) { + qmaw.addLang(part.getKey(), part.getValue().getAsString()); + } + + JsonArray triggers = json.get("trigger").getAsJsonArray(); + + for(JsonElement element : triggers) { + ItemStack trigger = SerializableRecipe.readItemStack(element.getAsJsonArray()); + // items get renamed and removed all the time, so we add some more debug goodness for those cases + if(trigger == null || trigger.getItem() == ModItems.nothing) { + MainRegistry.logger.info("[QMAW] Manual " + name + " references nonexistant trigger " + element.toString()); + } else { + QMAWLoader.triggers.put(new ComparableStack(trigger).makeSingular(), qmaw); + } + } + + if(!qmaw.contents.isEmpty()) { + QMAWLoader.qmaw.put(name, qmaw); + } } } diff --git a/src/main/java/com/hbm/qmaw/QuickManualAndWiki.java b/src/main/java/com/hbm/qmaw/QuickManualAndWiki.java index 7f206bad6..f961cd2fe 100644 --- a/src/main/java/com/hbm/qmaw/QuickManualAndWiki.java +++ b/src/main/java/com/hbm/qmaw/QuickManualAndWiki.java @@ -1,5 +1,33 @@ package com.hbm.qmaw; +import java.util.HashMap; + +import net.minecraft.item.ItemStack; + public class QuickManualAndWiki { + public String name; + public ItemStack icon; + + public HashMap title = new HashMap(); + public HashMap contents = new HashMap(); + + public QuickManualAndWiki(String name) { + this.name = name; + } + + public QuickManualAndWiki setIcon(ItemStack stack) { + this.icon = stack; + return this; + } + + public QuickManualAndWiki addTitle(String lang, String title) { + this.title.put(lang, title); + return this; + } + + public QuickManualAndWiki addLang(String lang, String contents) { + this.contents.put(lang, contents); + return this; + } } diff --git a/src/main/java/com/hbm/qmaw/components/QComponentLink.java b/src/main/java/com/hbm/qmaw/components/QComponentLink.java new file mode 100644 index 000000000..6024deb6f --- /dev/null +++ b/src/main/java/com/hbm/qmaw/components/QComponentLink.java @@ -0,0 +1,81 @@ +package com.hbm.qmaw.components; + +import org.lwjgl.opengl.GL11; + +import com.hbm.qmaw.GuiQMAW; +import com.hbm.qmaw.ManualElement; +import com.hbm.qmaw.QMAWLoader; +import com.hbm.qmaw.QuickManualAndWiki; + +import cpw.mods.fml.common.FMLCommonHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.ItemStack; + +public class QComponentLink extends ManualElement { + + protected String link; + protected ItemStack icon; + protected String text; + protected FontRenderer font; + protected int color = 0x0094FF; + protected int hoverColor = 0xFFD800; + + protected static RenderItem itemRender = new RenderItem(); + + public QComponentLink(String link, String text) { + this.text = text; + this.link = link; + + QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(link); + if(qmaw == null) { + this.color = this.hoverColor = 0xFF7F7F; + } else { + this.icon = qmaw.icon; + } + } + + public QComponentLink setColor(int color, int hoverColor) { + this.color = color; + this.hoverColor = hoverColor; + return this; + } + + @Override + public int getWidth() { + return font.getStringWidth(text) + (icon != null ? 20 : 0); + } + + @Override + public int getHeight() { + return Math.max(font.FONT_HEIGHT, icon != null ? 18 : 0); + } + + @Override + public void render(boolean isMouseOver, int mouseX, int mouseY) { + int x = this.x; + int y = this.y; + + if(this.icon != null) { + + GL11.glEnable(GL11.GL_DEPTH_TEST); + Minecraft mc = Minecraft.getMinecraft(); + itemRender.renderItemAndEffectIntoGUI(this.font, mc.renderEngine, this.icon, x, y); + itemRender.renderItemOverlayIntoGUI(this.font, mc.renderEngine, this.icon, x, y, null); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + x += 20; + y += (18 - font.FONT_HEIGHT) / 2; + } + + font.drawString(text, x, y, isMouseOver ? hoverColor : color); + } + + @Override public void onClick() { + QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(link); + if(qmaw != null) FMLCommonHandler.instance().showGuiScreen(new GuiQMAW(qmaw)); + } +} diff --git a/src/main/java/com/hbm/render/util/MissilePart.java b/src/main/java/com/hbm/render/util/MissilePart.java index dbec574c4..1f33a4b6a 100644 --- a/src/main/java/com/hbm/render/util/MissilePart.java +++ b/src/main/java/com/hbm/render/util/MissilePart.java @@ -34,13 +34,10 @@ public class MissilePart { parts.clear(); MissilePart.registerPart(ModItems.mp_thruster_10_kerosene, PartType.THRUSTER, 1, 1, ResourceManager.mp_t_10_kerosene, ResourceManager.mp_t_10_kerosene_tex); - MissilePart.registerPart(ModItems.mp_thruster_10_kerosene_tec, PartType.THRUSTER, 1.25, 1.25, ResourceManager.mp_t_10_kerosene_tec, ResourceManager.universal); MissilePart.registerPart(ModItems.mp_thruster_10_solid, PartType.THRUSTER, 0.5, 1, ResourceManager.mp_t_10_solid, ResourceManager.mp_t_10_solid_tex); MissilePart.registerPart(ModItems.mp_thruster_10_xenon, PartType.THRUSTER, 0.5, 1, ResourceManager.mp_t_10_xenon, ResourceManager.mp_t_10_xenon_tex); // MissilePart.registerPart(ModItems.mp_thruster_15_kerosene, PartType.THRUSTER, 1.5, 1.5, ResourceManager.mp_t_15_kerosene, ResourceManager.mp_t_15_kerosene_tex); - MissilePart.registerPart(ModItems.mp_thruster_15_kerosene_tec, PartType.THRUSTER, 1.5, 3.25, ResourceManager.mp_t_15_kerosene_tec, ResourceManager.universal); - MissilePart.registerPart(ModItems.mp_thruster_15_kerosene_dual, PartType.THRUSTER, 1, 1.5, ResourceManager.mp_t_15_kerosene_dual, ResourceManager.mp_t_15_kerosene_dual_tex); MissilePart.registerPart(ModItems.mp_thruster_15_kerosene_triple, PartType.THRUSTER, 1, 1.5, ResourceManager.mp_t_15_kerosene_triple, ResourceManager.mp_t_15_kerosene_dual_tex); MissilePart.registerPart(ModItems.mp_thruster_15_solid, PartType.THRUSTER, 0.5, 1, ResourceManager.mp_t_15_solid, ResourceManager.mp_t_15_solid_tex); MissilePart.registerPart(ModItems.mp_thruster_15_solid_hexdecuple, PartType.THRUSTER, 0.5, 1, ResourceManager.mp_t_15_solid_hexdecuple, ResourceManager.mp_t_15_solid_hexdecuple_tex); @@ -149,8 +146,6 @@ public class MissilePart { MissilePart.registerPart(ModItems.mp_fuselage_15_20_kerosene, PartType.FUSELAGE, 16, 10, ResourceManager.mp_f_15_20_kerosene, ResourceManager.mp_f_15_20_kerosene_tex); MissilePart.registerPart(ModItems.mp_fuselage_15_20_kerosene_magnusson, PartType.FUSELAGE, 16, 10, ResourceManager.mp_f_15_20_kerosene, ResourceManager.mp_f_15_20_kerosene_magnusson_tex); MissilePart.registerPart(ModItems.mp_fuselage_15_20_solid, PartType.FUSELAGE, 16, 10, ResourceManager.mp_f_15_20_kerosene, ResourceManager.mp_f_15_20_solid_tex); - // - MissilePart.registerPart(ModItems.mp_fuselage_20_kerosene, PartType.FUSELAGE, 10, 8, ResourceManager.mp_f_20, ResourceManager.universal); ////// @@ -171,9 +166,6 @@ public class MissilePart { MissilePart.registerPart(ModItems.mp_warhead_15_n2, PartType.WARHEAD, 3, 2, ResourceManager.mp_w_15_n2, ResourceManager.mp_w_15_n2_tex); MissilePart.registerPart(ModItems.mp_warhead_15_balefire, PartType.WARHEAD, 2.75, 2, ResourceManager.mp_w_15_balefire, ResourceManager.mp_w_15_balefire_tex); MissilePart.registerPart(ModItems.mp_warhead_15_turbine, PartType.WARHEAD, 2.25, 2, ResourceManager.mp_w_15_turbine, ResourceManager.mp_w_15_turbine_tex); - // - MissilePart.registerPart(ModItems.mp_warhead_20_he, PartType.WARHEAD, 3, 2.25, ResourceManager.mp_w_20, ResourceManager.universal); - } public static void registerPart(Item item, PartType type, double height, double guiheight, IModelCustom model, ResourceLocation texture) { diff --git a/src/main/resources/assets/hbm/manual/demo.json b/src/main/resources/assets/hbm/manual/demo.json index f21a54d12..d64a6de99 100644 --- a/src/main/resources/assets/hbm/manual/demo.json +++ b/src/main/resources/assets/hbm/manual/demo.json @@ -1,6 +1,10 @@ { "name": "DEMO", "icon": ["hbm:item.gun_light_revolver", 1, 0], + "trigger": [["hbm:item.plate_iron"], ["hbm:item.plate_gold"], ["hbm:item.plate_sludge"]], + "title": { + "en_US": "TEST PAGE" + } "content": { "en_US": "This is a test page that links to [[Demo|DEMO]].\n\nFormat line break" } From e450bbc49d114d3dfcc3956abebb39b24c522a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=81=93=E7=A5=9E=20=E9=A6=B4=E5=AD=90?= Date: Thu, 7 Aug 2025 17:17:27 +0800 Subject: [PATCH 338/491] only thing i love --- src/main/resources/assets/hbm/lang/zh_CN.lang | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 450f29276..902096a3f 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -6123,5 +6123,17 @@ item.item_expensive.ferro_plating.name=强化铀铁合金板 item.item_expensive.heavy_frame.name=重型框架 item.item_expensive.lead_plating.name=防辐射镀层 item.item_expensive.steel_plating.name=铆接固定钢板 -purex.recycle=再富集 %s +purex.recycle=再处理 %s tile.rbmk_autoloader.name=RBMK燃料自动装填机 +autoswitch=自动切换组"%s"的一部分。$配方根据第一次输入而变化。 +autoswitch.plate=板状燃料再处理 +autoswitch.plates=金属板 +autoswitch.pwr=PWR燃料再处理 +autoswitch.schrab=Sa326萃取 +autoswitch.watz=Watz燃料靶丸再处理 +autoswitch.zirnox=锆诺克斯燃料再处理 +container.machinePUREX=PUREX +item.gun_autoshotgun_heretic.name=异教徒 +purex.schrab=从 %s 中萃取Sa326 +tile.machine_purex.name=钚铀还原提取设备(PUREX) +tile.machine_purex.desc=可用于多种核燃料的再处理机器。$大多数配方需要用到硝酸和煤油。 From e8b7504fff17fbe0180311b4cc2b44058dd36aae Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 7 Aug 2025 17:45:16 +0200 Subject: [PATCH 339/491] and that's QMAW --- src/main/java/com/hbm/qmaw/GuiQMAW.java | 243 +++++++++++++++++- src/main/java/com/hbm/qmaw/ManualElement.java | 5 +- src/main/java/com/hbm/qmaw/QMAWLoader.java | 6 +- .../hbm/qmaw/components/QComponentLink.java | 28 +- .../hbm/qmaw/components/QComponentText.java | 2 +- .../resources/assets/hbm/manual/demo.json | 6 +- .../assets/hbm/textures/gui/gui_wiki.png | Bin 1081 -> 1017 bytes 7 files changed, 264 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/hbm/qmaw/GuiQMAW.java b/src/main/java/com/hbm/qmaw/GuiQMAW.java index 9e3b37595..1cca980fb 100644 --- a/src/main/java/com/hbm/qmaw/GuiQMAW.java +++ b/src/main/java/com/hbm/qmaw/GuiQMAW.java @@ -3,12 +3,20 @@ package com.hbm.qmaw; import java.util.ArrayList; import java.util.List; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; +import com.hbm.qmaw.components.*; +import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.LanguageManager; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; public class GuiQMAW extends GuiScreen { @@ -16,19 +24,128 @@ public class GuiQMAW extends GuiScreen { protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_wiki.png"); public String title; - public List lines = new ArrayList(); + public ItemStack icon; + public List> lines = new ArrayList(); - protected int xSize = 192; - protected int ySize = 256; + protected int xSize = 340; + protected int ySize = 224; protected int guiLeft; protected int guiTop; + protected boolean isDragging = false; + protected int scrollProgress = 0; + protected int lastClickX = 0; + protected int lastClickY = 0; + + public static final String EN_US = "en_US"; + public GuiQMAW(QuickManualAndWiki qmaw) { parseQMAW(qmaw); } protected void parseQMAW(QuickManualAndWiki qmaw) { + LanguageManager lang = Minecraft.getMinecraft().getLanguageManager(); + this.title = qmaw.title.get(lang.getCurrentLanguage()); + if(title == null) this.title = qmaw.title.get(EN_US); + if(title == null) this.title = "Missing Localization!"; + + this.icon = qmaw.icon; + + String toParse = qmaw.contents.get(lang.getCurrentLanguage()); + if(toParse == null) toParse = qmaw.contents.get(EN_US); + if(toParse == null) toParse = "Missing Localization!"; + toParse = "" + toParse; // strings are reference types, no? + + int maxLineLength = xSize - 29; + String prevToParse = "" + toParse; + int maxIterations = 1000; + int currentLineWidth = 0; + + while(!toParse.isEmpty() && maxIterations > 0) { + if(this.lines.isEmpty()) this.lines.add(new ArrayList()); + List currentLine = this.lines.get(this.lines.size() - 1); + + toParse = toParse.trim(); + + maxIterations--; + + if(toParse.startsWith("
")) { + toParse = toParse.substring(4); + currentLine = new ArrayList(); + this.lines.add(currentLine); + currentLineWidth = 0; + continue; + } + + // handle links + if(toParse.startsWith("[[")) { + int end = toParse.indexOf("]]"); + if(end != -1) { + String link = toParse.substring(2, end); + toParse = toParse.substring(end + 2); + + int pipe = link.indexOf("|"); + QComponentLink linkComponent; + + if(pipe == -1) { + linkComponent = new QComponentLink(link, link); + } else { + linkComponent = new QComponentLink(link.substring(pipe + 1, link.length()), link.substring(0, pipe)); + } + + // append to current line + int width = linkComponent.getWidth(); + if(width + currentLineWidth <= maxLineLength) { + currentLine.add(linkComponent); + currentLineWidth += width; + // new line + } else { + currentLine = new ArrayList(); + this.lines.add(currentLine); + currentLine.add(linkComponent); + currentLineWidth = width; + } + + prevToParse = "" + toParse; + continue; + } + } + + // handle standard text + int delimit = toParse.length(); + + int spaceIndex = toParse.indexOf(" "); + if(spaceIndex != -1) delimit = Math.min(delimit, spaceIndex); + int linkIndex = toParse.indexOf("[["); + if(linkIndex != -1) delimit = Math.min(delimit, linkIndex); + int brIndex = toParse.indexOf("
"); + if(brIndex != -1) delimit = Math.min(delimit, brIndex); + + if(delimit > 0) { + QComponentText textComponent = new QComponentText(toParse.substring(0, delimit) + (spaceIndex == delimit ? " " : "")); + toParse = toParse.substring(delimit); + + // append to current line + int width = textComponent.getWidth(); + if(width + currentLineWidth <= maxLineLength) { + currentLine.add(textComponent); + currentLineWidth += width; + // new line + } else { + currentLine = new ArrayList(); + this.lines.add(currentLine); + currentLine.add(textComponent); + currentLineWidth = width; + } + + prevToParse = "" + toParse; + continue; + } + + if(toParse.equals(prevToParse)) break; + prevToParse = "" + toParse; + } } @Override @@ -38,19 +155,85 @@ public class GuiQMAW extends GuiScreen { this.guiTop = (this.height - this.ySize) / 2; } + @Override + protected void mouseClicked(int x, int y, int key) { + super.mouseClicked(x, y, key); + + if(key == 0) { + this.lastClickX = x; + this.lastClickY = y; + } + } + + public int getSliderPosition() { + double progress = (double) scrollProgress / (double) (lines.size() - 1); + return 25 + (int) (progress * 180); + } + @Override public void drawScreen(int mouseX, int mouseY, float f) { - this.drawDefaultBackground(); + + if(Mouse.isButtonDown(0) && guiLeft + xSize - 15 <= mouseX && guiLeft + xSize - 15 + 12 > mouseX && guiTop + 25 < mouseY && guiTop + 25 + 191 >= mouseY) { + isDragging = true; + } + + if(!Mouse.isButtonDown(0)) isDragging = false; + + if(isDragging) { + int min = guiTop + 25 + 8; + int max = guiTop + 25 + 191 - 8; + int span = max - min; + + double progress = MathHelper.clamp_double((double) (mouseY - min) / span, 0D, 1D); + this.scrollProgress = MathHelper.clamp_int((int) Math.round((lines.size() - 1) * progress), 0, lines.size() - 1); + } + + handleScroll(); + + //this.drawRect(0, 0, this.width, this.height, 0x80919191); + this.drawRect(0, 0, this.width, this.height, 0xe0000000); + this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); GL11.glDisable(GL11.GL_LIGHTING); this.drawGuiContainerForegroundLayer(mouseX, mouseY); GL11.glEnable(GL11.GL_LIGHTING); + + this.lastClickX = 0; + this.lastClickY = 0; + } + + protected void handleScroll() { + + if(!Mouse.isButtonDown(0) && !Mouse.isButtonDown(1) && Mouse.next()) { + int scroll = Mouse.getEventDWheel(); + if(scroll > 0 && this.scrollProgress > 0) this.scrollProgress--; + if(scroll < 0 && this.scrollProgress < this.lines.size() - 1) this.scrollProgress++; + } } private void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - int x = 0; - int y = 0; + int x = 4; + int y = 4; + + if(this.icon != null) { + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_DEPTH_TEST); + Minecraft mc = Minecraft.getMinecraft(); + GL11.glRotated(180, 1, 0, 0); + RenderHelper.enableStandardItemLighting(); + GL11.glRotated(-180, 1, 0, 0); + itemRender.renderItemAndEffectIntoGUI(this.fontRendererObj, mc.renderEngine, this.icon, guiLeft + x, guiTop + y); + itemRender.renderItemOverlayIntoGUI(this.fontRendererObj, mc.renderEngine, this.icon, guiLeft + x, guiTop + y, null); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glPopMatrix(); + + x += 20; + y += (16 - this.fontRendererObj.FONT_HEIGHT) / 2; + } + + y += 1; this.fontRendererObj.drawString(title, guiLeft + x, guiTop + y, 0xFFFFFF); } @@ -58,6 +241,52 @@ public class GuiQMAW extends GuiScreen { private void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, 170, ySize); + drawTexturedModalRect(guiLeft + 170, guiTop, 22, 0, 170, ySize); + + // scroll bar + drawTexturedModalRect(guiLeft + xSize - 15, guiTop + getSliderPosition(), 192, 0, 12, 16); + + int x = guiLeft + 7; + int y = guiTop + 30; + int lineNum = 0; + + for(List line : lines) { + lineNum++; + + if(lineNum <= this.scrollProgress) continue; + + int maxHeight = 0; + int inset = 0; + + for(ManualElement element : line) { + maxHeight = Math.max(maxHeight, element.getHeight()); + } + + if(y + maxHeight > guiTop + 219) break; + + if(line.isEmpty()) y += this.fontRendererObj.FONT_HEIGHT; + + for(ManualElement element : line) { + int elementX = x + inset; + int elementY = y + (maxHeight - element.getHeight()) / 2; + boolean mouseOver = (elementX <= mouseX && elementX + element.getWidth() > mouseX && elementY < mouseY && elementY + element.getHeight() >= mouseY); + element.render(mouseOver, elementX, elementY, mouseX, mouseY); + if(elementX <= lastClickX && elementX + element.getWidth() > lastClickX && elementY < lastClickY && elementY + element.getHeight() >= lastClickY) + element.onClick(); + inset += element.getWidth(); + } + + y += maxHeight + 2; + } + } + + @Override + protected void keyTyped(char typedChar, int keyCode) { + + if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) { + this.mc.displayGuiScreen((GuiScreen) null); + this.mc.setIngameFocus(); + } } } diff --git a/src/main/java/com/hbm/qmaw/ManualElement.java b/src/main/java/com/hbm/qmaw/ManualElement.java index f878bf8ae..7d5c640d5 100644 --- a/src/main/java/com/hbm/qmaw/ManualElement.java +++ b/src/main/java/com/hbm/qmaw/ManualElement.java @@ -1,12 +1,9 @@ package com.hbm.qmaw; public abstract class ManualElement { - - public int x; - public int y; public abstract int getWidth(); public abstract int getHeight(); - public abstract void render(boolean isMouseOver, int mouseX, int mouseY); + public abstract void render(boolean isMouseOver, int x, int y, int mouseX, int mouseY); public abstract void onClick(); } diff --git a/src/main/java/com/hbm/qmaw/QMAWLoader.java b/src/main/java/com/hbm/qmaw/QMAWLoader.java index c5bdf391e..55a44851a 100644 --- a/src/main/java/com/hbm/qmaw/QMAWLoader.java +++ b/src/main/java/com/hbm/qmaw/QMAWLoader.java @@ -172,7 +172,9 @@ public class QMAWLoader implements IResourceManagerReloadListener { } /** Extracts all the info from a json file's main object to add a QMAW to the system. Very barebones, only handles name, icon and the localized text. */ - public static void registerJson(String name, JsonObject json) { + public static void registerJson(String file, JsonObject json) { + + String name = json.get("name").getAsString(); QuickManualAndWiki qmaw = new QuickManualAndWiki(name); if(json.has("icon")) { @@ -195,7 +197,7 @@ public class QMAWLoader implements IResourceManagerReloadListener { ItemStack trigger = SerializableRecipe.readItemStack(element.getAsJsonArray()); // items get renamed and removed all the time, so we add some more debug goodness for those cases if(trigger == null || trigger.getItem() == ModItems.nothing) { - MainRegistry.logger.info("[QMAW] Manual " + name + " references nonexistant trigger " + element.toString()); + MainRegistry.logger.info("[QMAW] Manual " + file + " references nonexistant trigger " + element.toString()); } else { QMAWLoader.triggers.put(new ComparableStack(trigger).makeSingular(), qmaw); } diff --git a/src/main/java/com/hbm/qmaw/components/QComponentLink.java b/src/main/java/com/hbm/qmaw/components/QComponentLink.java index 6024deb6f..97402d9fb 100644 --- a/src/main/java/com/hbm/qmaw/components/QComponentLink.java +++ b/src/main/java/com/hbm/qmaw/components/QComponentLink.java @@ -9,10 +9,12 @@ import com.hbm.qmaw.QuickManualAndWiki; import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; public class QComponentLink extends ManualElement { @@ -35,6 +37,8 @@ public class QComponentLink extends ManualElement { } else { this.icon = qmaw.icon; } + + this.font = Minecraft.getMinecraft().fontRenderer; } public QComponentLink setColor(int color, int hoverColor) { @@ -45,30 +49,33 @@ public class QComponentLink extends ManualElement { @Override public int getWidth() { - return font.getStringWidth(text) + (icon != null ? 20 : 0); + return font.getStringWidth(text) + (icon != null ? 18 : 0); } @Override public int getHeight() { - return Math.max(font.FONT_HEIGHT, icon != null ? 18 : 0); + return Math.max(font.FONT_HEIGHT, icon != null ? 16 : 0); } @Override - public void render(boolean isMouseOver, int mouseX, int mouseY) { - int x = this.x; - int y = this.y; + public void render(boolean isMouseOver, int x, int y, int mouseX, int mouseY) { if(this.icon != null) { - + + GL11.glPushMatrix(); GL11.glEnable(GL11.GL_DEPTH_TEST); Minecraft mc = Minecraft.getMinecraft(); + GL11.glRotated(180, 1, 0, 0); + RenderHelper.enableStandardItemLighting(); + GL11.glRotated(-180, 1, 0, 0); itemRender.renderItemAndEffectIntoGUI(this.font, mc.renderEngine, this.icon, x, y); itemRender.renderItemOverlayIntoGUI(this.font, mc.renderEngine, this.icon, x, y, null); RenderHelper.disableStandardItemLighting(); GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glPopMatrix(); - x += 20; - y += (18 - font.FONT_HEIGHT) / 2; + x += 18; + y += (16 - font.FONT_HEIGHT) / 2; } font.drawString(text, x, y, isMouseOver ? hoverColor : color); @@ -76,6 +83,9 @@ public class QComponentLink extends ManualElement { @Override public void onClick() { QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(link); - if(qmaw != null) FMLCommonHandler.instance().showGuiScreen(new GuiQMAW(qmaw)); + if(qmaw != null) { + Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + FMLCommonHandler.instance().showGuiScreen(new GuiQMAW(qmaw)); + } } } diff --git a/src/main/java/com/hbm/qmaw/components/QComponentText.java b/src/main/java/com/hbm/qmaw/components/QComponentText.java index fd06d1150..30fd266b5 100644 --- a/src/main/java/com/hbm/qmaw/components/QComponentText.java +++ b/src/main/java/com/hbm/qmaw/components/QComponentText.java @@ -36,7 +36,7 @@ public class QComponentText extends ManualElement { } @Override - public void render(boolean isMouseOver, int mouseX, int mouseY) { + public void render(boolean isMouseOver, int x, int y, int mouseX, int mouseY) { font.drawString(text, x, y, color); } diff --git a/src/main/resources/assets/hbm/manual/demo.json b/src/main/resources/assets/hbm/manual/demo.json index d64a6de99..96cdeeadd 100644 --- a/src/main/resources/assets/hbm/manual/demo.json +++ b/src/main/resources/assets/hbm/manual/demo.json @@ -3,9 +3,9 @@ "icon": ["hbm:item.gun_light_revolver", 1, 0], "trigger": [["hbm:item.plate_iron"], ["hbm:item.plate_gold"], ["hbm:item.plate_sludge"]], "title": { - "en_US": "TEST PAGE" - } + "en_US": "Demo" + }, "content": { - "en_US": "This is a test page that links to [[Demo|DEMO]].\n\nFormat line break" + "en_US": "Referred to as a collective as \"flux\" in NTM, neutrons are the sole driver of fission and therefore the driver of heat production in an RBMK. Fuel assemblies in fuel rod columns will create neutrons according to a mathematically defined flux function which is described in more detail in Category:RBMK Fuel. Some will spontaneously output neutrons whereas others will only emit them when they receive input neutrons with most fuels requiring some form of input to get started. Neutrons are emitted in every horizontal direction away from the fuel rod and will interact with various types of columns during their travel before eventually being absorbed by something. Neutrons are either emitted as fast moving or slow moving and react best with fuels in either state depending on the properties of the fuel. To convert fast neutrons to slow neutrons, they must pass through a moderator such as graphite which can come in the form of moderated rods or moderator columns. There is no way to make slow neutrons become fast after being moderated. If not properly sealed, neutrons can leak out of the RBMK and cause immense environmental radiation. To prevent this, cover every column in the RBMK that neutrons pass through with an RBMK cover panel and seal off all paths that neutrons take with either solid blocks or a column that absorbs the neutrons fully." } } diff --git a/src/main/resources/assets/hbm/textures/gui/gui_wiki.png b/src/main/resources/assets/hbm/textures/gui/gui_wiki.png index 25d913919570aefc1fcb2646e1da7e8a558ae273..48c92d1c46ca12cf5d22954dbccfe040f2e43d86 100644 GIT binary patch delta 176 zcmdnV@soXm3FC%|rV1Rry}q-9eA6T*#>%_Z3D@o^l&IThxZ>uv+!@b*?%)1D_x8Q= z1RZ#+J54p z5T5m}2Qp`s?dM^fb2@*s5@RvbgTe~DWM4f D;fq7T delta 148 zcmV;F0BisG2e}B4Gy(9DH6RER8=E$zn#@p Date: Thu, 7 Aug 2025 20:23:28 +0200 Subject: [PATCH 340/491] scat --- src/main/java/com/hbm/handler/HbmKeybinds.java | 4 ++++ .../java/com/hbm/main/ModEventHandlerClient.java | 5 +++-- src/main/java/com/hbm/qmaw/GuiQMAW.java | 12 ++++++------ src/main/java/com/hbm/qmaw/QMAWLoader.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 2 ++ src/main/resources/assets/hbm/lang/en_US.lang | 2 ++ src/main/resources/assets/hbm/manual/alloy.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/bakelite.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/demo.json | 11 ----------- src/main/resources/assets/hbm/manual/mingrade.json | 11 +++++++++++ .../resources/assets/hbm/manual/plutonium-238.json | 11 +++++++++++ .../resources/assets/hbm/manual/plutonium-239.json | 11 +++++++++++ .../resources/assets/hbm/manual/plutonium-240.json | 11 +++++++++++ .../resources/assets/hbm/manual/plutonium-241.json | 11 +++++++++++ .../resources/assets/hbm/manual/plutonium-rg.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/plutonium.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/polonium.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/polymer.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/radium.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/silicon.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/steel.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/technetium.json | 11 +++++++++++ .../assets/hbm/manual/technetium_steel.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/thorium.json | 11 +++++++++++ .../resources/assets/hbm/manual/uranium-233.json | 11 +++++++++++ .../resources/assets/hbm/manual/uranium-235.json | 11 +++++++++++ .../resources/assets/hbm/manual/uranium-238.json | 11 +++++++++++ src/main/resources/assets/hbm/manual/uranium.json | 11 +++++++++++ 28 files changed, 249 insertions(+), 20 deletions(-) create mode 100644 src/main/resources/assets/hbm/manual/alloy.json create mode 100644 src/main/resources/assets/hbm/manual/bakelite.json delete mode 100644 src/main/resources/assets/hbm/manual/demo.json create mode 100644 src/main/resources/assets/hbm/manual/mingrade.json create mode 100644 src/main/resources/assets/hbm/manual/plutonium-238.json create mode 100644 src/main/resources/assets/hbm/manual/plutonium-239.json create mode 100644 src/main/resources/assets/hbm/manual/plutonium-240.json create mode 100644 src/main/resources/assets/hbm/manual/plutonium-241.json create mode 100644 src/main/resources/assets/hbm/manual/plutonium-rg.json create mode 100644 src/main/resources/assets/hbm/manual/plutonium.json create mode 100644 src/main/resources/assets/hbm/manual/polonium.json create mode 100644 src/main/resources/assets/hbm/manual/polymer.json create mode 100644 src/main/resources/assets/hbm/manual/radium.json create mode 100644 src/main/resources/assets/hbm/manual/silicon.json create mode 100644 src/main/resources/assets/hbm/manual/steel.json create mode 100644 src/main/resources/assets/hbm/manual/technetium.json create mode 100644 src/main/resources/assets/hbm/manual/technetium_steel.json create mode 100644 src/main/resources/assets/hbm/manual/thorium.json create mode 100644 src/main/resources/assets/hbm/manual/uranium-233.json create mode 100644 src/main/resources/assets/hbm/manual/uranium-235.json create mode 100644 src/main/resources/assets/hbm/manual/uranium-238.json create mode 100644 src/main/resources/assets/hbm/manual/uranium.json diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 06a9c90a1..886f388b9 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -37,6 +37,8 @@ public class HbmKeybinds { public static KeyBinding hudKey = new KeyBinding(category + ".toggleHUD", Keyboard.KEY_V, category); public static KeyBinding dashKey = new KeyBinding(category + ".dash", Keyboard.KEY_LSHIFT, category); public static KeyBinding trainKey = new KeyBinding(category + ".trainInv", Keyboard.KEY_R, category); + + public static KeyBinding qmaw = new KeyBinding(category + ".qmaw", Keyboard.KEY_F1, category); public static KeyBinding abilityCycle = new KeyBinding(category + ".ability", -99, category); public static KeyBinding abilityAlt = new KeyBinding(category + ".abilityAlt", Keyboard.KEY_LMENU, category); @@ -61,6 +63,8 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(hudKey); ClientRegistry.registerKeyBinding(dashKey); ClientRegistry.registerKeyBinding(trainKey); + + ClientRegistry.registerKeyBinding(qmaw); ClientRegistry.registerKeyBinding(reloadKey); ClientRegistry.registerKeyBinding(gunPrimaryKey); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 823e38433..c82f7b1b2 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -14,6 +14,7 @@ import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.ArmorModHandler; import com.hbm.handler.HTTPHandler; import com.hbm.handler.HazmatRegistry; +import com.hbm.handler.HbmKeybinds; import com.hbm.handler.ImpactWorldHandler; import com.hbm.hazard.HazardSystem; import com.hbm.interfaces.IHoldableWeapon; @@ -753,7 +754,7 @@ public class ModEventHandlerClient { try { QuickManualAndWiki qmaw = QMAWLoader.triggers.get(comp); if(qmaw != null) { - list.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey("qmaw.tab")); + list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("qmaw.tab", Keyboard.getKeyName(HbmKeybinds.qmaw.getKeyCode()))); lastQMAW = qmaw; qmawTimestamp = Clock.get_ms(); } @@ -907,7 +908,7 @@ public class ModEventHandlerClient { } } - if(Keyboard.isKeyDown(Keyboard.KEY_TAB) && Minecraft.getMinecraft().currentScreen != null) { + if(Keyboard.isKeyDown(HbmKeybinds.qmaw.getKeyCode()) && Minecraft.getMinecraft().currentScreen != null) { QuickManualAndWiki qmaw = qmawTimestamp > Clock.get_ms() - 100 ? lastQMAW : null; diff --git a/src/main/java/com/hbm/qmaw/GuiQMAW.java b/src/main/java/com/hbm/qmaw/GuiQMAW.java index 1cca980fb..b4d60c42b 100644 --- a/src/main/java/com/hbm/qmaw/GuiQMAW.java +++ b/src/main/java/com/hbm/qmaw/GuiQMAW.java @@ -3,14 +3,12 @@ package com.hbm.qmaw; import java.util.ArrayList; import java.util.List; -import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; import com.hbm.qmaw.components.*; -import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.RenderHelper; @@ -88,10 +86,12 @@ public class GuiQMAW extends GuiScreen { int pipe = link.indexOf("|"); QComponentLink linkComponent; + String suffix = toParse.startsWith(" ") ? " " : ""; + if(pipe == -1) { - linkComponent = new QComponentLink(link, link); + linkComponent = new QComponentLink(link, link + suffix); } else { - linkComponent = new QComponentLink(link.substring(pipe + 1, link.length()), link.substring(0, pipe)); + linkComponent = new QComponentLink(link.substring(pipe + 1, link.length()), link.substring(0, pipe) + suffix); } // append to current line @@ -213,7 +213,7 @@ public class GuiQMAW extends GuiScreen { private void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - int x = 4; + int x = 7; int y = 4; if(this.icon != null) { @@ -229,7 +229,7 @@ public class GuiQMAW extends GuiScreen { GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glPopMatrix(); - x += 20; + x += 18; y += (16 - this.fontRendererObj.FONT_HEIGHT) / 2; } diff --git a/src/main/java/com/hbm/qmaw/QMAWLoader.java b/src/main/java/com/hbm/qmaw/QMAWLoader.java index 55a44851a..f085aeba4 100644 --- a/src/main/java/com/hbm/qmaw/QMAWLoader.java +++ b/src/main/java/com/hbm/qmaw/QMAWLoader.java @@ -78,7 +78,7 @@ public class QMAWLoader implements IResourceManagerReloadListener { for(File modFile : registeredModFiles) dissectZip(modFile); - File devEnvManualFolder = new File(Minecraft.getMinecraft().mcDataDir.getAbsolutePath().replace("/eclipse/.", "") + "/src/main/resources/assets/hbm/manual"); + File devEnvManualFolder = new File(Minecraft.getMinecraft().mcDataDir.getAbsolutePath().replace("/eclipse/.".replace('/', File.separatorChar), "") + "/src/main/resources/assets/hbm/manual".replace('/', File.separatorChar)); if(devEnvManualFolder.exists() && devEnvManualFolder.isDirectory()) { MainRegistry.logger.info("[QMAW] Exploring " + devEnvManualFolder.getAbsolutePath()); dissectManualFolder(devEnvManualFolder); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 444cc8a7c..037898b56 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3722,6 +3722,8 @@ potion.hbm_telekinesis=! ! ! purex.recycle=Wiederanreicherung von %s purex.schrab=Schrabidium extrahieren aus %s +qmaw.tab=[ Drücke %s für Hilfe ] + radar.clearMap=Karte zurücksetzen radar.detectMissiles=Raketen erkennen radar.detectPlayers=Spieler erkennen diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 32d100935..cd951f6c2 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4780,6 +4780,8 @@ potion.hbm_telekinesis=! ! ! purex.recycle=Reprocessing of %s purex.schrab=Schrabidium extraction from %s +qmaw.tab=[ Press %s for help ] + radar.clearMap=Clear Map radar.detectMissiles=Detect Missiles radar.detectPlayers=Detect Players diff --git a/src/main/resources/assets/hbm/manual/alloy.json b/src/main/resources/assets/hbm/manual/alloy.json new file mode 100644 index 000000000..0c583e585 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/alloy.json @@ -0,0 +1,11 @@ +{ + "name": "Advanced Alloy", + "icon": ["hbm:item.ingot_advanced_alloy", 1, 0], + "trigger": [["hbm:item.ingot_advanced_alloy"], ["hbm:item.powder_advanced_alloy"], ["hbm:item.plate_advanced_alloy"]], + "title": { + "en_US": "Advanced Alloy" + }, + "content": { + "en_US": "Made in a [[blast furnace|Blast Furnace]] from [[steel|Steel]] and [[Minecraft grade copper|Minecraft Grade Copper]]. Makes better-than-diamond gear. Also used in some high-powered magnets for the [[fusion reactor|Fusion Reactor]] and the [[exposure chamber|Exposure Chamber]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/bakelite.json b/src/main/resources/assets/hbm/manual/bakelite.json new file mode 100644 index 000000000..38d2a9dd1 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/bakelite.json @@ -0,0 +1,11 @@ +{ + "name": "Bakelite", + "icon": ["hbm:item.ingot_bakelite", 1, 0], + "trigger": [["hbm:item.ingot_bakelite"], ["hbm:item.powder_bakelite"]], + "title": { + "en_US": "Bakelite" + }, + "content": { + "en_US": "Alternative to [[polymer|Polymer]] made from [[aromatic hydrocarbons|Aromatic Hydrocarbons]] derived from [[cracked oil products|Catalytic Cracking Tower]]. Completely interchangeable in all recipes." + } +} diff --git a/src/main/resources/assets/hbm/manual/demo.json b/src/main/resources/assets/hbm/manual/demo.json deleted file mode 100644 index 96cdeeadd..000000000 --- a/src/main/resources/assets/hbm/manual/demo.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DEMO", - "icon": ["hbm:item.gun_light_revolver", 1, 0], - "trigger": [["hbm:item.plate_iron"], ["hbm:item.plate_gold"], ["hbm:item.plate_sludge"]], - "title": { - "en_US": "Demo" - }, - "content": { - "en_US": "Referred to as a collective as \"flux\" in NTM, neutrons are the sole driver of fission and therefore the driver of heat production in an RBMK. Fuel assemblies in fuel rod columns will create neutrons according to a mathematically defined flux function which is described in more detail in Category:RBMK Fuel. Some will spontaneously output neutrons whereas others will only emit them when they receive input neutrons with most fuels requiring some form of input to get started. Neutrons are emitted in every horizontal direction away from the fuel rod and will interact with various types of columns during their travel before eventually being absorbed by something. Neutrons are either emitted as fast moving or slow moving and react best with fuels in either state depending on the properties of the fuel. To convert fast neutrons to slow neutrons, they must pass through a moderator such as graphite which can come in the form of moderated rods or moderator columns. There is no way to make slow neutrons become fast after being moderated. If not properly sealed, neutrons can leak out of the RBMK and cause immense environmental radiation. To prevent this, cover every column in the RBMK that neutrons pass through with an RBMK cover panel and seal off all paths that neutrons take with either solid blocks or a column that absorbs the neutrons fully." - } -} diff --git a/src/main/resources/assets/hbm/manual/mingrade.json b/src/main/resources/assets/hbm/manual/mingrade.json new file mode 100644 index 000000000..73e1a6827 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/mingrade.json @@ -0,0 +1,11 @@ +{ + "name": "Minecraft Grade Copper", + "icon": ["hbm:item.ingot_red_copper", 1, 0], + "trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]], + "title": { + "en_US": "Minecraft Grade Copper (Red Copper)" + }, + "content": { + "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form." + } +} diff --git a/src/main/resources/assets/hbm/manual/plutonium-238.json b/src/main/resources/assets/hbm/manual/plutonium-238.json new file mode 100644 index 000000000..74e61a1de --- /dev/null +++ b/src/main/resources/assets/hbm/manual/plutonium-238.json @@ -0,0 +1,11 @@ +{ + "name": "Plutonium-238", + "icon": ["hbm:item.billet_pu238", 1, 0], + "trigger": [["hbm:item.ingot_pu238"], ["hbm:item.billet_pu238"], ["hbm:item.nugget_pu238"]], + "title": { + "en_US": "Plutonium-238" + }, + "content": { + "en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].

Moderately radioactive, very hot." + } +} diff --git a/src/main/resources/assets/hbm/manual/plutonium-239.json b/src/main/resources/assets/hbm/manual/plutonium-239.json new file mode 100644 index 000000000..307242d98 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/plutonium-239.json @@ -0,0 +1,11 @@ +{ + "name": "Plutonium-239", + "icon": ["hbm:item.billet_pu239", 1, 0], + "trigger": [["hbm:item.ingot_pu239"], ["hbm:item.billet_pu239"], ["hbm:item.nugget_pu239"]], + "title": { + "en_US": "Plutonium-239" + }, + "content": { + "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.

Moderately radioactive." + } +} diff --git a/src/main/resources/assets/hbm/manual/plutonium-240.json b/src/main/resources/assets/hbm/manual/plutonium-240.json new file mode 100644 index 000000000..3a024fec6 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/plutonium-240.json @@ -0,0 +1,11 @@ +{ + "name": "Plutonium-240", + "icon": ["hbm:item.billet_pu240", 1, 0], + "trigger": [["hbm:item.ingot_pu240"], ["hbm:item.billet_pu240"], ["hbm:item.nugget_pu240"]], + "title": { + "en_US": "Plutonium-240" + }, + "content": { + "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or inspecialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/plutonium-241.json b/src/main/resources/assets/hbm/manual/plutonium-241.json new file mode 100644 index 000000000..8edf8eddc --- /dev/null +++ b/src/main/resources/assets/hbm/manual/plutonium-241.json @@ -0,0 +1,11 @@ +{ + "name": "Plutonium-241", + "icon": ["hbm:item.billet_pu241", 1, 0], + "trigger": [["hbm:item.ingot_pu241"], ["hbm:item.billet_pu241"], ["hbm:item.nugget_pu241"]], + "title": { + "en_US": "Plutonium-241" + }, + "content": { + "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive." + } +} diff --git a/src/main/resources/assets/hbm/manual/plutonium-rg.json b/src/main/resources/assets/hbm/manual/plutonium-rg.json new file mode 100644 index 000000000..9164df069 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/plutonium-rg.json @@ -0,0 +1,11 @@ +{ + "name": "Reactor-Grade Plutonium", + "icon": ["hbm:item.billet_pu_mix", 1, 0], + "trigger": [["hbm:item.ingot_pu_mix"], ["hbm:item.billet_pu_mix"], ["hbm:item.nugget_pu_mix"]], + "title": { + "en_US": "Reactor-Grade Plutonium" + }, + "content": { + "en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.

Moderately radioactive." + } +} diff --git a/src/main/resources/assets/hbm/manual/plutonium.json b/src/main/resources/assets/hbm/manual/plutonium.json new file mode 100644 index 000000000..7952e22e5 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/plutonium.json @@ -0,0 +1,11 @@ +{ + "name": "Plutonium", + "icon": ["hbm:item.ingot_plutonium", 1, 0], + "trigger": [["hbm:item.ingot_plutonium"], ["hbm:item.billet_plutonium"], ["hbm:item.nugget_plutonium"], ["hbm:item.powder_plutonium"]], + "title": { + "en_US": "Plutonium" + }, + "content": { + "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.

Moderately radioactive.

See also:
[[Plutonium-238]]
[[Plutonium-239]]
[[Plutonium-240]]
[[Plutonium-241]]" + } +} diff --git a/src/main/resources/assets/hbm/manual/polonium.json b/src/main/resources/assets/hbm/manual/polonium.json new file mode 100644 index 000000000..00fac7d84 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/polonium.json @@ -0,0 +1,11 @@ +{ + "name": "Polonium-210", + "icon": ["hbm:item.billet_polonium", 1, 0], + "trigger": [["hbm:item.ingot_polonium"], ["hbm:item.billet_polonium"], ["hbm:item.nugget_polonium"]], + "title": { + "en_US": "Polonium-210" + }, + "content": { + "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot." + } +} diff --git a/src/main/resources/assets/hbm/manual/polymer.json b/src/main/resources/assets/hbm/manual/polymer.json new file mode 100644 index 000000000..1fbd464c2 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/polymer.json @@ -0,0 +1,11 @@ +{ + "name": "Polymer", + "icon": ["hbm:item.ingot_polymer", 1, 0], + "trigger": [["hbm:item.ingot_polymer"], ["hbm:item.powder_polymer"]], + "title": { + "en_US": "Polymer" + }, + "content": { + "en_US": "Polymer ('Teflon') is the first available type of plastic. Requires [[petroleum gas|Petroleum Gas]] and therefore [[oil processing|Crude Oil]].

Fully interchangable with [[Bakelite]], which becomes available after [[oil cracking|Catalytic Cracking Tower]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/radium.json b/src/main/resources/assets/hbm/manual/radium.json new file mode 100644 index 000000000..6ec2dcd92 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/radium.json @@ -0,0 +1,11 @@ +{ + "name": "Radium-226", + "icon": ["hbm:item.billet_ra226", 1, 0], + "trigger": [["hbm:item.ingot_ra226"], ["hbm:item.billet_ra226"], ["hbm:item.nugget_ra226"], ["hbm:item.powder_ra226"]], + "title": { + "en_US": "Radium-226" + }, + "content": { + "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.

Moderately radioactive." + } +} diff --git a/src/main/resources/assets/hbm/manual/silicon.json b/src/main/resources/assets/hbm/manual/silicon.json new file mode 100644 index 000000000..97cec4e51 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/silicon.json @@ -0,0 +1,11 @@ +{ + "name": "Silicon", + "icon": ["hbm:item.billet_silicon", 1, 0], + "trigger": [["hbm:item.ingot_silicon"], ["hbm:item.billet_silicon"], ["hbm:item.nugget_silicon"]], + "title": { + "en_US": "Silicon" + }, + "content": { + "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polmyer]], requiring [[oil|Crude Oil]] processing." + } +} diff --git a/src/main/resources/assets/hbm/manual/steel.json b/src/main/resources/assets/hbm/manual/steel.json new file mode 100644 index 000000000..113d25af1 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/steel.json @@ -0,0 +1,11 @@ +{ + "name": "Steel", + "icon": ["hbm:item.ingot_steel", 1, 0], + "trigger": [["hbm:item.ingot_steel"], ["hbm:item.plate_steel"], ["hbm:item.powder_steel"]], + "title": { + "en_US": "Steel" + }, + "content": { + "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/technetium.json b/src/main/resources/assets/hbm/manual/technetium.json new file mode 100644 index 000000000..97748ea2b --- /dev/null +++ b/src/main/resources/assets/hbm/manual/technetium.json @@ -0,0 +1,11 @@ +{ + "name": "Technetium", + "icon": ["hbm:item.ingot_technetium", 1, 0], + "trigger": [["hbm:item.billet_technetium"], ["hbm:item.ingot_technetium"], ["hbm:item.nugget_technetium"]], + "title": { + "en_US": "Technetium" + }, + "content": { + "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.

Primarily used for [[technetium steel|Technetium Steel]].

Moderately radioactive." + } +} diff --git a/src/main/resources/assets/hbm/manual/technetium_steel.json b/src/main/resources/assets/hbm/manual/technetium_steel.json new file mode 100644 index 000000000..5f33be6c7 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/technetium_steel.json @@ -0,0 +1,11 @@ +{ + "name": "Technetium Steel", + "icon": ["hbm:item.ingot_tcalloy", 1, 0], + "trigger": [["hbm:item.ingot_tcalloy"], ["hbm:item.powder_tcalloy"]], + "title": { + "en_US": "Technetium Steel" + }, + "content": { + "en_US": "Alloy made from [[steel|Steel]] and [[technetium|Technetium]]. Corrosion resistant, used in stronger fluid tanks and many advanced machines. Obtainable after either a [[ZIRNOX]] or [[PWR]] due to technetium being synthetic.

Fully interchangable with [[cadmium steel|Cadmium Steel]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/thorium.json b/src/main/resources/assets/hbm/manual/thorium.json new file mode 100644 index 000000000..1812f13e7 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/thorium.json @@ -0,0 +1,11 @@ +{ + "name": "Thorium-232", + "icon": ["hbm:item.billet_th232", 1, 0], + "trigger": [["hbm:item.ingot_th232"], ["hbm:item.billet_th232"], ["hbm:item.nugget_th232"], ["hbm:item.powder_thorium"]], + "title": { + "en_US": "Thorium-232" + }, + "content": { + "en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.

Slightly radioactive." + } +} diff --git a/src/main/resources/assets/hbm/manual/uranium-233.json b/src/main/resources/assets/hbm/manual/uranium-233.json new file mode 100644 index 000000000..1852de4c2 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/uranium-233.json @@ -0,0 +1,11 @@ +{ + "name": "Uranium-233", + "icon": ["hbm:item.billet_u233", 1, 0], + "trigger": [["hbm:item.ingot_u233"], ["hbm:item.billet_u233"], ["hbm:item.nugget_u233"]], + "title": { + "en_US": "Uranium-233" + }, + "content": { + "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].

Moderately radioactive." + } +} diff --git a/src/main/resources/assets/hbm/manual/uranium-235.json b/src/main/resources/assets/hbm/manual/uranium-235.json new file mode 100644 index 000000000..361c97c72 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/uranium-235.json @@ -0,0 +1,11 @@ +{ + "name": "Uranium-235", + "icon": ["hbm:item.billet_u235", 1, 0], + "trigger": [["hbm:item.ingot_u235"], ["hbm:item.billet_u235"], ["hbm:item.nugget_u235"]], + "title": { + "en_US": "Uranium-235" + }, + "content": { + "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive." + } +} diff --git a/src/main/resources/assets/hbm/manual/uranium-238.json b/src/main/resources/assets/hbm/manual/uranium-238.json new file mode 100644 index 000000000..bef789d01 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/uranium-238.json @@ -0,0 +1,11 @@ +{ + "name": "Uranium-238", + "icon": ["hbm:item.billet_u238", 1, 0], + "trigger": [["hbm:item.ingot_u238"], ["hbm:item.billet_u238"], ["hbm:item.nugget_u238"]], + "title": { + "en_US": "Uranium-238" + }, + "content": { + "en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.

Slightly radioactive." + } +} diff --git a/src/main/resources/assets/hbm/manual/uranium.json b/src/main/resources/assets/hbm/manual/uranium.json new file mode 100644 index 000000000..3c34cc07e --- /dev/null +++ b/src/main/resources/assets/hbm/manual/uranium.json @@ -0,0 +1,11 @@ +{ + "name": "Uranium", + "icon": ["hbm:item.ingot_uranium", 1, 0], + "trigger": [["hbm:item.ingot_uranium"], ["hbm:item.billet_uranium"], ["hbm:item.nugget_uranium"], ["hbm:item.powder_uranium"], ["hbm:tile.ore_uranium"]], + "title": { + "en_US": "Uranium" + }, + "content": { + "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]" + } +} From 84601f685fea0a92d11f1a28e0b1e0a1742a27c2 Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 8 Aug 2025 14:51:45 +1000 Subject: [PATCH 341/491] NBTStructureLib features brought back to NTM, including: * `/locate` command * custom spawning rules (eg. make something always spawn at 0,0) * code structure reorg * extra logging for misconfigured structures --- .../java/com/hbm/blocks/BlockDummyable.java | 6 +- .../com/hbm/blocks/generic/BlockBobble.java | 6 +- .../com/hbm/blocks/generic/BlockDecoCRT.java | 6 +- .../hbm/blocks/generic/BlockDecoModel.java | 4 +- .../hbm/blocks/generic/BlockDecoToaster.java | 6 +- .../com/hbm/blocks/generic/BlockModDoor.java | 6 +- .../com/hbm/blocks/generic/BlockPipe.java | 6 +- .../com/hbm/blocks/generic/BlockPlushie.java | 6 +- .../hbm/blocks/generic/BlockWandJigsaw.java | 6 +- .../hbm/blocks/generic/BlockWandLogic.java | 2 +- .../com/hbm/blocks/generic/BlockWandLoot.java | 2 +- .../com/hbm/blocks/generic/DecoBlock.java | 6 +- .../generic/DecoPoleSatelliteReceiver.java | 6 +- .../hbm/blocks/generic/DecoTapeRecorder.java | 6 +- .../hbm/blocks/machine/BlockMachineBase.java | 6 +- .../com/hbm/blocks/machine/Floodlight.java | 4 +- .../com/hbm/blocks/machine/Spotlight.java | 6 +- .../com/hbm/blocks/network/FluidPump.java | 6 +- .../java/com/hbm/commands/CommandLocate.java | 118 ++++++++ .../java/com/hbm/items/tool/ItemWandS.java | 2 +- src/main/java/com/hbm/lib/HbmWorld.java | 3 +- src/main/java/com/hbm/main/MainRegistry.java | 1 + .../java/com/hbm/main/StructureManager.java | 2 +- .../com/hbm/world/gen/NTMWorldGenerator.java | 44 +-- .../INBTBlockTransformable.java} | 28 +- .../INBTTileEntityTransformable.java | 2 +- .../com/hbm/world/gen/nbt/JigsawPiece.java | 35 +++ .../com/hbm/world/gen/nbt/JigsawPool.java | 58 ++++ .../hbm/world/gen/{ => nbt}/NBTStructure.java | 274 +++++++----------- .../com/hbm/world/gen/nbt/SpawnCondition.java | 115 ++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 4 + 31 files changed, 537 insertions(+), 245 deletions(-) create mode 100644 src/main/java/com/hbm/commands/CommandLocate.java rename src/main/java/com/hbm/world/gen/{INBTTransformable.java => nbt/INBTBlockTransformable.java} (89%) rename src/main/java/com/hbm/world/gen/{ => nbt}/INBTTileEntityTransformable.java (90%) create mode 100644 src/main/java/com/hbm/world/gen/nbt/JigsawPiece.java create mode 100644 src/main/java/com/hbm/world/gen/nbt/JigsawPool.java rename src/main/java/com/hbm/world/gen/{ => nbt}/NBTStructure.java (84%) create mode 100644 src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 19c33db65..fe9a001ca 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -5,7 +5,7 @@ import com.hbm.handler.ThreeInts; import com.hbm.interfaces.ICopiable; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IPersistentNBT; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; @@ -37,7 +37,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; -public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight, ICopiable, INBTTransformable { +public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight, ICopiable, INBTBlockTransformable { public BlockDummyable(Material mat) { super(mat); @@ -590,7 +590,7 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl meta -= extra; } - meta = INBTTransformable.transformMetaDeco(meta, coordBaseMode); + meta = INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); if(isOffset) { meta += offset; diff --git a/src/main/java/com/hbm/blocks/generic/BlockBobble.java b/src/main/java/com/hbm/blocks/generic/BlockBobble.java index ea53feb69..3ba895977 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockBobble.java +++ b/src/main/java/com/hbm/blocks/generic/BlockBobble.java @@ -4,8 +4,8 @@ import com.hbm.inventory.gui.GUIScreenBobble; import com.hbm.items.special.ItemPlasticScrap.ScrapType; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; -import com.hbm.world.gen.INBTTileEntityTransformable; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTTileEntityTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; @@ -34,7 +34,7 @@ import net.minecraft.world.World; import java.util.List; import java.util.Random; -public class BlockBobble extends BlockContainer implements IGUIProvider, INBTTransformable { +public class BlockBobble extends BlockContainer implements IGUIProvider, INBTBlockTransformable { public BlockBobble() { super(Material.iron); diff --git a/src/main/java/com/hbm/blocks/generic/BlockDecoCRT.java b/src/main/java/com/hbm/blocks/generic/BlockDecoCRT.java index b1ede562a..bee8f863e 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDecoCRT.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDecoCRT.java @@ -2,7 +2,7 @@ package com.hbm.blocks.generic; import com.hbm.blocks.BlockMulti; import com.hbm.lib.RefStrings; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; @@ -15,7 +15,7 @@ import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -public class BlockDecoCRT extends BlockMulti implements INBTTransformable { +public class BlockDecoCRT extends BlockMulti implements INBTBlockTransformable { protected String[] variants = new String[] {"crt_clean", "crt_broken", "crt_blinking", "crt_bsod"}; @SideOnly(Side.CLIENT) protected IIcon[] icons; @@ -77,7 +77,7 @@ public class BlockDecoCRT extends BlockMulti implements INBTTransformable { @Override public int transformMeta(int meta, int coordBaseMode) { - return INBTTransformable.transformMetaDecoModel(meta, coordBaseMode); + return INBTBlockTransformable.transformMetaDecoModel(meta, coordBaseMode); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/BlockDecoModel.java b/src/main/java/com/hbm/blocks/generic/BlockDecoModel.java index 2e2febe67..fcf9fbc7e 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDecoModel.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDecoModel.java @@ -1,7 +1,7 @@ package com.hbm.blocks.generic; import com.hbm.blocks.BlockEnumMulti; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.client.registry.RenderingRegistry; import net.minecraft.block.material.Material; @@ -12,7 +12,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -public class BlockDecoModel extends BlockEnumMulti implements INBTTransformable { +public class BlockDecoModel extends BlockEnumMulti implements INBTBlockTransformable { public BlockDecoModel(Material mat, Class theEnum, boolean multiName, boolean multiTexture) { super(mat, theEnum, multiName, multiTexture); diff --git a/src/main/java/com/hbm/blocks/generic/BlockDecoToaster.java b/src/main/java/com/hbm/blocks/generic/BlockDecoToaster.java index c35dd1d3b..149cdf7f4 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDecoToaster.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDecoToaster.java @@ -2,7 +2,7 @@ package com.hbm.blocks.generic; import com.hbm.blocks.BlockMulti; import com.hbm.lib.RefStrings; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; @@ -17,7 +17,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -public class BlockDecoToaster extends BlockMulti implements INBTTransformable { +public class BlockDecoToaster extends BlockMulti implements INBTBlockTransformable { protected String[] variants = new String[] {"toaster_iron", "toaster_steel", "toaster_wood"}; @SideOnly(Side.CLIENT) protected IIcon[] icons; @@ -94,7 +94,7 @@ public class BlockDecoToaster extends BlockMulti implements INBTTransformable { @Override public int transformMeta(int meta, int coordBaseMode) { - return INBTTransformable.transformMetaDecoModel(meta, coordBaseMode); + return INBTBlockTransformable.transformMetaDecoModel(meta, coordBaseMode); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/BlockModDoor.java b/src/main/java/com/hbm/blocks/generic/BlockModDoor.java index 233f8da71..0093135d5 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockModDoor.java +++ b/src/main/java/com/hbm/blocks/generic/BlockModDoor.java @@ -4,7 +4,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -21,7 +21,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -public class BlockModDoor extends Block implements INBTTransformable { +public class BlockModDoor extends Block implements INBTBlockTransformable { @SideOnly(Side.CLIENT) private IIcon[] field_150017_a; @SideOnly(Side.CLIENT) @@ -400,6 +400,6 @@ public class BlockModDoor extends Block implements INBTTransformable { @Override public int transformMeta(int meta, int coordBaseMode) { - return INBTTransformable.transformMetaDoor(meta, coordBaseMode); + return INBTBlockTransformable.transformMetaDoor(meta, coordBaseMode); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/BlockPipe.java b/src/main/java/com/hbm/blocks/generic/BlockPipe.java index 27eaf3b27..824fc5aae 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockPipe.java +++ b/src/main/java/com/hbm/blocks/generic/BlockPipe.java @@ -4,7 +4,7 @@ import java.util.List; import com.hbm.blocks.ITooltipProvider; import com.hbm.lib.RefStrings; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; @@ -17,7 +17,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; -public class BlockPipe extends Block implements ITooltipProvider, INBTTransformable { +public class BlockPipe extends Block implements ITooltipProvider, INBTBlockTransformable { @SideOnly(Side.CLIENT) private IIcon sideIcon; @@ -96,7 +96,7 @@ public class BlockPipe extends Block implements ITooltipProvider, INBTTransforma @Override public int transformMeta(int meta, int coordBaseMode) { - return INBTTransformable.transformMetaPillar(meta, coordBaseMode); + return INBTBlockTransformable.transformMetaPillar(meta, coordBaseMode); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/BlockPlushie.java b/src/main/java/com/hbm/blocks/generic/BlockPlushie.java index 848065a84..877d784e7 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockPlushie.java +++ b/src/main/java/com/hbm/blocks/generic/BlockPlushie.java @@ -5,8 +5,8 @@ import java.util.Random; import com.hbm.blocks.IBlockMulti; import com.hbm.blocks.ITooltipProvider; -import com.hbm.world.gen.INBTTileEntityTransformable; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTTileEntityTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -29,7 +29,7 @@ import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.StatCollector; import net.minecraft.world.World; -public class BlockPlushie extends BlockContainer implements IBlockMulti, ITooltipProvider, INBTTransformable { +public class BlockPlushie extends BlockContainer implements IBlockMulti, ITooltipProvider, INBTBlockTransformable { public BlockPlushie() { super(Material.cloth); diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java b/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java index 63076df31..d64470934 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java @@ -18,7 +18,7 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BufferUtil; import com.hbm.util.i18n.I18nUtil; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.common.registry.GameRegistry; @@ -47,7 +47,7 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; -public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotation, INBTTransformable, IGUIProvider, ILookOverlay { +public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotation, INBTBlockTransformable, IGUIProvider, ILookOverlay { private IIcon iconTop; private IIcon iconSide; @@ -123,7 +123,7 @@ public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotatio @Override public int transformMeta(int meta, int coordBaseMode) { - return INBTTransformable.transformMetaDeco(meta, coordBaseMode); + return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); } @Override diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java index 01d8df298..f7c3b2aa2 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java @@ -13,8 +13,8 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BufferUtil; import com.hbm.util.i18n.I18nUtil; +import com.hbm.world.gen.nbt.INBTTileEntityTransformable; import com.hbm.world.gen.util.LogicBlockActions; -import com.hbm.world.gen.INBTTileEntityTransformable; import com.hbm.world.gen.util.LogicBlockConditions; import com.hbm.world.gen.util.LogicBlockInteractions; import cpw.mods.fml.common.registry.GameRegistry; diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java index bf457843d..cf5cebce0 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java @@ -17,7 +17,7 @@ import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BufferUtil; import com.hbm.util.LootGenerator; import com.hbm.util.i18n.I18nUtil; -import com.hbm.world.gen.INBTTileEntityTransformable; +import com.hbm.world.gen.nbt.INBTTileEntityTransformable; import com.mojang.authlib.GameProfile; import api.hbm.block.IToolable; diff --git a/src/main/java/com/hbm/blocks/generic/DecoBlock.java b/src/main/java/com/hbm/blocks/generic/DecoBlock.java index bf25850eb..05642281a 100644 --- a/src/main/java/com/hbm/blocks/generic/DecoBlock.java +++ b/src/main/java/com/hbm/blocks/generic/DecoBlock.java @@ -6,7 +6,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.tileentity.deco.TileEntityDecoBlock; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import api.hbm.block.IToolable; import cpw.mods.fml.client.registry.RenderingRegistry; @@ -25,7 +25,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -public class DecoBlock extends BlockContainer implements IToolable, INBTTransformable { +public class DecoBlock extends BlockContainer implements IToolable, INBTBlockTransformable { Random rand = new Random(); @@ -185,6 +185,6 @@ public class DecoBlock extends BlockContainer implements IToolable, INBTTransfor @Override public int transformMeta(int meta, int coordBaseMode) { - return INBTTransformable.transformMetaDeco(meta, coordBaseMode); + return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/DecoPoleSatelliteReceiver.java b/src/main/java/com/hbm/blocks/generic/DecoPoleSatelliteReceiver.java index 109cabbc5..a55592ae9 100644 --- a/src/main/java/com/hbm/blocks/generic/DecoPoleSatelliteReceiver.java +++ b/src/main/java/com/hbm/blocks/generic/DecoPoleSatelliteReceiver.java @@ -1,7 +1,7 @@ package com.hbm.blocks.generic; import com.hbm.tileentity.deco.TileEntityDecoPoleSatelliteReceiver; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; @@ -11,7 +11,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -public class DecoPoleSatelliteReceiver extends BlockContainer implements INBTTransformable { +public class DecoPoleSatelliteReceiver extends BlockContainer implements INBTBlockTransformable { public DecoPoleSatelliteReceiver(Material p_i45386_1_) { super(p_i45386_1_); @@ -61,7 +61,7 @@ public class DecoPoleSatelliteReceiver extends BlockContainer implements INBTTra @Override public int transformMeta(int meta, int coordBaseMode) { - return INBTTransformable.transformMetaDeco(meta, coordBaseMode); + return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/DecoTapeRecorder.java b/src/main/java/com/hbm/blocks/generic/DecoTapeRecorder.java index e7143aae6..ca8e32474 100644 --- a/src/main/java/com/hbm/blocks/generic/DecoTapeRecorder.java +++ b/src/main/java/com/hbm/blocks/generic/DecoTapeRecorder.java @@ -1,6 +1,6 @@ package com.hbm.blocks.generic; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.client.registry.RenderingRegistry; import net.minecraft.block.BlockContainer; @@ -11,7 +11,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -public class DecoTapeRecorder extends BlockContainer implements INBTTransformable { +public class DecoTapeRecorder extends BlockContainer implements INBTBlockTransformable { public DecoTapeRecorder(Material p_i45386_1_) { super(p_i45386_1_); @@ -63,7 +63,7 @@ public class DecoTapeRecorder extends BlockContainer implements INBTTransformabl @Override public int transformMeta(int meta, int coordBaseMode) { - return INBTTransformable.transformMetaDeco(meta, coordBaseMode); + return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/BlockMachineBase.java b/src/main/java/com/hbm/blocks/machine/BlockMachineBase.java index b5d111c13..41e0c6a03 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockMachineBase.java +++ b/src/main/java/com/hbm/blocks/machine/BlockMachineBase.java @@ -1,7 +1,7 @@ package com.hbm.blocks.machine; import com.hbm.main.MainRegistry; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.Block; @@ -17,7 +17,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -public abstract class BlockMachineBase extends BlockContainer implements INBTTransformable { +public abstract class BlockMachineBase extends BlockContainer implements INBTBlockTransformable { int guiID = -1; protected boolean rotatable = false; @@ -115,6 +115,6 @@ public abstract class BlockMachineBase extends BlockContainer implements INBTTra @Override public int transformMeta(int meta, int coordBaseMode) { if(!rotatable) return meta; - return INBTTransformable.transformMetaDeco(meta, coordBaseMode); + return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/Floodlight.java b/src/main/java/com/hbm/blocks/machine/Floodlight.java index 25e70cac2..4dcdf6fa0 100644 --- a/src/main/java/com/hbm/blocks/machine/Floodlight.java +++ b/src/main/java/com/hbm/blocks/machine/Floodlight.java @@ -4,10 +4,10 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.FloodlightBeam.TileEntityFloodlightBeam; import com.hbm.util.Compat; import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import api.hbm.block.IToolable; import api.hbm.energymk2.IEnergyReceiverMK2; -import com.hbm.world.gen.INBTTransformable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -28,7 +28,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class Floodlight extends BlockContainer implements IToolable, INBTTransformable { +public class Floodlight extends BlockContainer implements IToolable, INBTBlockTransformable { public Floodlight(Material mat) { super(mat); diff --git a/src/main/java/com/hbm/blocks/machine/Spotlight.java b/src/main/java/com/hbm/blocks/machine/Spotlight.java index 4868d3dd0..a72f81db2 100644 --- a/src/main/java/com/hbm/blocks/machine/Spotlight.java +++ b/src/main/java/com/hbm/blocks/machine/Spotlight.java @@ -7,7 +7,7 @@ import java.util.Random; import com.hbm.blocks.BlockEnums.LightType; import com.hbm.blocks.ISpotlight; import com.hbm.main.ResourceManager; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; @@ -26,7 +26,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; -public class Spotlight extends Block implements ISpotlight, INBTTransformable { +public class Spotlight extends Block implements ISpotlight, INBTBlockTransformable { public static boolean disableOnGeneration = true; @@ -367,7 +367,7 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable { public int transformMeta(int meta, int coordBaseMode) { // +1 to set as broken, won't turn on until broken and replaced int disabled = disableOnGeneration ? 1 : 0; - return (INBTTransformable.transformMetaDeco(meta >> 1, coordBaseMode) << 1) + disabled; + return (INBTBlockTransformable.transformMetaDeco(meta >> 1, coordBaseMode) << 1) + disabled; } @Override diff --git a/src/main/java/com/hbm/blocks/network/FluidPump.java b/src/main/java/com/hbm/blocks/network/FluidPump.java index a3fcd1baa..9ce059fb4 100644 --- a/src/main/java/com/hbm/blocks/network/FluidPump.java +++ b/src/main/java/com/hbm/blocks/network/FluidPump.java @@ -25,7 +25,7 @@ import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BobMathUtil; import com.hbm.util.EnumUtil; import com.hbm.util.i18n.I18nUtil; -import com.hbm.world.gen.INBTTransformable; +import com.hbm.world.gen.nbt.INBTBlockTransformable; import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority; import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; @@ -55,7 +55,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.ForgeDirection; -public class FluidPump extends BlockContainer implements INBTTransformable, ILookOverlay, IGUIProvider { +public class FluidPump extends BlockContainer implements INBTBlockTransformable, ILookOverlay, IGUIProvider { public FluidPump(Material mat) { super(mat); @@ -127,7 +127,7 @@ public class FluidPump extends BlockContainer implements INBTTransformable, ILoo @Override public int transformMeta(int meta, int coordBaseMode) { - return INBTTransformable.transformMetaDeco(meta, coordBaseMode); + return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); } @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) diff --git a/src/main/java/com/hbm/commands/CommandLocate.java b/src/main/java/com/hbm/commands/CommandLocate.java new file mode 100644 index 000000000..b0a7f8948 --- /dev/null +++ b/src/main/java/com/hbm/commands/CommandLocate.java @@ -0,0 +1,118 @@ +package com.hbm.commands; + +import java.util.Collections; +import java.util.List; +import java.util.Locale; + +import com.hbm.lib.HbmWorld; +import com.hbm.world.gen.nbt.NBTStructure; +import com.hbm.world.gen.nbt.SpawnCondition; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.PlayerNotFoundException; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; + +public class CommandLocate extends CommandBase { + + private static final int MAX_DISTANCE = 256; + + @Override + public String getCommandName() { + return "ntmlocate"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return String.format(Locale.US, + "%s/%s structure %s- Locates the nearest structure with a given name.", + EnumChatFormatting.GREEN, getCommandName(), EnumChatFormatting.LIGHT_PURPLE + ); + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + if(!(sender instanceof EntityPlayer)) + throw new PlayerNotFoundException(); + + if(args.length == 0) + throw new WrongUsageException(getCommandUsage(sender), new Object[0]); + + if(args[0].equals("structure")) { + EntityPlayer player = (EntityPlayer) sender; + + SpawnCondition structure = NBTStructure.getStructure(args[1]); + + if(structure == null) { + ChatComponentTranslation message = new ChatComponentTranslation("commands.locate.no_match"); + message.getChatStyle().setColor(EnumChatFormatting.RED); + sender.addChatMessage(message); + return; + } + + int chunkX = MathHelper.floor_double(player.posX) / 16; + int chunkZ = MathHelper.floor_double(player.posZ) / 16; + + ChunkCoordIntPair pos = getNearestLocationTo(structure, player.worldObj, chunkX, chunkZ); + + if(pos == null) { + ChatComponentTranslation message = new ChatComponentTranslation("commands.locate.none_found"); + message.getChatStyle().setColor(EnumChatFormatting.RED); + sender.addChatMessage(message); + return; + } + + ChatComponentTranslation message = new ChatComponentTranslation("commands.locate.success.coordinates", structure.name, pos.chunkXPos * 16, pos.chunkZPos * 16); + message.getChatStyle().setColor(EnumChatFormatting.GREEN); + sender.addChatMessage(message); + } else { + throw new WrongUsageException(getCommandUsage(sender), new Object[0]); + } + } + + private ChunkCoordIntPair getNearestLocationTo(SpawnCondition spawn, World world, int chunkX, int chunkZ) { + if(HbmWorld.worldGenerator.getStructureAt(world, chunkX, chunkZ) == spawn) + return new ChunkCoordIntPair(chunkX, chunkZ); + + for(int radius = 1; radius < MAX_DISTANCE; radius++) { + for(int x = chunkX - radius; x <= chunkX + radius; x++) { + if(HbmWorld.worldGenerator.getStructureAt(world, x, chunkZ - radius) == spawn) + return new ChunkCoordIntPair(x, chunkZ - radius); + if(HbmWorld.worldGenerator.getStructureAt(world, x, chunkZ + radius) == spawn) + return new ChunkCoordIntPair(x, chunkZ + radius); + } + for(int z = chunkZ - radius; z <= chunkZ + radius; z++) { + if(HbmWorld.worldGenerator.getStructureAt(world, chunkX - radius, z) == spawn) + return new ChunkCoordIntPair(chunkX - radius, z); + if(HbmWorld.worldGenerator.getStructureAt(world, chunkX + radius, z) == spawn) + return new ChunkCoordIntPair(chunkX + radius, z); + } + } + + return null; + } + + @SuppressWarnings("unchecked") + @Override + public List addTabCompletionOptions(ICommandSender sender, String[] args) { + if(args.length < 1) + return Collections.emptyList(); + + if(args.length == 1) + return getListOfStringsMatchingLastWord(args, "structure"); + + if(args.length == 2) { + List structures = NBTStructure.listStructures(); + return getListOfStringsMatchingLastWord(args, structures.toArray(new String[structures.size()])); + } + + return Collections.emptyList(); + } + +} diff --git a/src/main/java/com/hbm/items/tool/ItemWandS.java b/src/main/java/com/hbm/items/tool/ItemWandS.java index 2de5998fb..55de41e9a 100644 --- a/src/main/java/com/hbm/items/tool/ItemWandS.java +++ b/src/main/java/com/hbm/items/tool/ItemWandS.java @@ -10,7 +10,7 @@ import java.text.SimpleDateFormat; import com.hbm.blocks.ModBlocks; import com.hbm.util.BobMathUtil; import com.hbm.util.Tuple.Pair; -import com.hbm.world.gen.NBTStructure; +import com.hbm.world.gen.nbt.NBTStructure; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/lib/HbmWorld.java b/src/main/java/com/hbm/lib/HbmWorld.java index ed4ca9208..5242feb9b 100644 --- a/src/main/java/com/hbm/lib/HbmWorld.java +++ b/src/main/java/com/hbm/lib/HbmWorld.java @@ -1,10 +1,11 @@ package com.hbm.lib; import com.hbm.world.gen.MapGenNTMFeatures; -import com.hbm.world.gen.NBTStructure; import com.hbm.world.gen.NTMWorldGenerator; import com.hbm.world.gen.component.*; import com.hbm.world.gen.component.BunkerComponents.BunkerStart; +import com.hbm.world.gen.nbt.NBTStructure; + import cpw.mods.fml.common.IWorldGenerator; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.world.gen.structure.MapGenStructureIO; diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index f797b0de3..d6aebacd8 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -967,6 +967,7 @@ public class MainRegistry { event.registerServerCommand(new CommandRadiation()); event.registerServerCommand(new CommandPacketInfo()); event.registerServerCommand(new CommandReloadServer()); + event.registerServerCommand(new CommandLocate()); } @EventHandler diff --git a/src/main/java/com/hbm/main/StructureManager.java b/src/main/java/com/hbm/main/StructureManager.java index 5c3f93090..077a3665f 100644 --- a/src/main/java/com/hbm/main/StructureManager.java +++ b/src/main/java/com/hbm/main/StructureManager.java @@ -1,7 +1,7 @@ package com.hbm.main; import com.hbm.lib.RefStrings; -import com.hbm.world.gen.NBTStructure; +import com.hbm.world.gen.nbt.NBTStructure; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index bb1c7b3d3..049428707 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -9,14 +9,15 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.config.StructureConfig; import com.hbm.main.StructureManager; -import com.hbm.world.gen.NBTStructure.JigsawPiece; -import com.hbm.world.gen.NBTStructure.JigsawPool; -import com.hbm.world.gen.NBTStructure.SpawnCondition; import com.hbm.world.gen.component.BunkerComponents.BunkerStart; import com.hbm.world.gen.component.Component.CrabSpawners; import com.hbm.world.gen.component.Component.GreenOoze; import com.hbm.world.gen.component.Component.MeteorBricks; import com.hbm.world.gen.component.Component.SupplyCrates; +import com.hbm.world.gen.nbt.JigsawPiece; +import com.hbm.world.gen.nbt.JigsawPool; +import com.hbm.world.gen.nbt.NBTStructure; +import com.hbm.world.gen.nbt.SpawnCondition; import cpw.mods.fml.common.IWorldGenerator; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -41,44 +42,44 @@ public class NTMWorldGenerator implements IWorldGenerator { final List lighthouseBiomes = Arrays.asList(new BiomeGenBase[] { BiomeGenBase.ocean, BiomeGenBase.deepOcean, BiomeGenBase.beach, BiomeGenBase.stoneBeach, BiomeGenBase.coldBeach }); /// SPIRE /// - NBTStructure.registerStructure(0, new SpawnCondition() {{ + NBTStructure.registerStructure(0, new SpawnCondition("spire") {{ canSpawn = biome -> biome.heightVariation <= 0.05F && !invalidBiomes.contains(biome); structure = new JigsawPiece("spire", StructureManager.spire, -1); spawnWeight = 2; }}); - - NBTStructure.registerStructure(0, new SpawnCondition() {{ + + NBTStructure.registerStructure(0, new SpawnCondition("features") {{ canSpawn = biome -> !invalidBiomes.contains(biome); start = d -> new MapGenNTMFeatures.Start(d.getW(), d.getX(), d.getY(), d.getZ()); spawnWeight = 14 * 4; }}); - NBTStructure.registerStructure(0, new SpawnCondition() {{ + NBTStructure.registerStructure(0, new SpawnCondition("bunker") {{ canSpawn = biome -> !invalidBiomes.contains(biome); start = d -> new BunkerStart(d.getW(), d.getX(), d.getY(), d.getZ()); spawnWeight = 1 * 4; }}); - NBTStructure.registerStructure(0, new SpawnCondition() {{ + NBTStructure.registerStructure(0, new SpawnCondition("vertibird") {{ canSpawn = biome -> !biome.canSpawnLightningBolt() && biome.temperature >= 2F; structure = new JigsawPiece("vertibird", StructureManager.vertibird, -3); spawnWeight = 3 * 4; }}); - NBTStructure.registerStructure(0, new SpawnCondition() {{ + NBTStructure.registerStructure(0, new SpawnCondition("crashed_vertibird") {{ canSpawn = biome -> !biome.canSpawnLightningBolt() && biome.temperature >= 2F; structure = new JigsawPiece("crashed_vertibird", StructureManager.crashed_vertibird, -10); spawnWeight = 3 * 4; }}); - NBTStructure.registerStructure(0, new SpawnCondition() {{ + NBTStructure.registerStructure(0, new SpawnCondition("aircraft_carrier") {{ canSpawn = oceanBiomes::contains; structure = new JigsawPiece("aircraft_carrier", StructureManager.aircraft_carrier, -6); maxHeight = 42; spawnWeight = 1; }}); - NBTStructure.registerStructure(0, new SpawnCondition() {{ + NBTStructure.registerStructure(0, new SpawnCondition("oil_rig") {{ canSpawn = biome -> biome == BiomeGenBase.deepOcean; structure = new JigsawPiece("oil_rig", StructureManager.oil_rig, -20); maxHeight = 12; @@ -86,7 +87,7 @@ public class NTMWorldGenerator implements IWorldGenerator { spawnWeight = 2; }}); - NBTStructure.registerStructure(0, new SpawnCondition() {{ + NBTStructure.registerStructure(0, new SpawnCondition("lighthouse") {{ canSpawn = lighthouseBiomes::contains; structure = new JigsawPiece("lighthouse", StructureManager.lighthouse, -40); maxHeight = 29; @@ -94,7 +95,7 @@ public class NTMWorldGenerator implements IWorldGenerator { spawnWeight = 2; }}); - NBTStructure.registerStructure(0, new SpawnCondition() {{ + NBTStructure.registerStructure(0, new SpawnCondition("beached_patrol") {{ canSpawn = beachBiomes::contains; structure = new JigsawPiece("beached_patrol", StructureManager.beached_patrol, -5); minHeight = 58; @@ -103,8 +104,8 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); NBTStructure.registerNullWeight(0, 2, oceanBiomes::contains); //why the fuck did this change - - NBTStructure.registerStructure(0, new SpawnCondition() {{ + + NBTStructure.registerStructure(0, new SpawnCondition("dish") {{ canSpawn = biome -> biome == BiomeGenBase.plains; structure = new JigsawPiece("dish", StructureManager.dish, -10); minHeight = 53; @@ -128,13 +129,13 @@ public class NTMWorldGenerator implements IWorldGenerator { put(ModBlocks.concrete_colored, new GreenOoze()); }}; - NBTStructure.registerStructure(0, new SpawnCondition() {{ + NBTStructure.registerStructure(0, new SpawnCondition("meteor_dungeon") {{ minHeight = 32; maxHeight = 32; sizeLimit = 128; canSpawn = biome -> biome.rootHeight >= 0; startPool = "start"; - pools = new HashMap() {{ + pools = new HashMap() {{ put("start", new JigsawPool() {{ add(new JigsawPiece("meteor_core", StructureManager.meteor_core) {{ blockTable = bricks; }}, 1); }}); @@ -255,4 +256,13 @@ public class NTMWorldGenerator implements IWorldGenerator { nbtGen.generateStructures(world, rand, chunkProvider, chunkX, chunkZ); } + public SpawnCondition getStructureAt(World world, int chunkX, int chunkZ) { + if(StructureConfig.enableStructures == 0) return null; + if(StructureConfig.enableStructures == 2 && !world.getWorldInfo().isMapFeaturesEnabled()) return null; + + setRandomSeed(world, chunkX, chunkZ); + + return nbtGen.getStructureAt(world, chunkX, chunkZ); + } + } diff --git a/src/main/java/com/hbm/world/gen/INBTTransformable.java b/src/main/java/com/hbm/world/gen/nbt/INBTBlockTransformable.java similarity index 89% rename from src/main/java/com/hbm/world/gen/INBTTransformable.java rename to src/main/java/com/hbm/world/gen/nbt/INBTBlockTransformable.java index 1d2cb8746..0247478e6 100644 --- a/src/main/java/com/hbm/world/gen/INBTTransformable.java +++ b/src/main/java/com/hbm/world/gen/nbt/INBTBlockTransformable.java @@ -1,8 +1,8 @@ -package com.hbm.world.gen; +package com.hbm.world.gen.nbt; import net.minecraft.block.Block; -public interface INBTTransformable { +public interface INBTBlockTransformable { /** * Defines this block as something that has a rotation or some other blockstate @@ -80,6 +80,30 @@ public interface INBTTransformable { return meta; } + // what in the FUCK mojangles + // same as stairs but 1 & 3 flipped + public static int transformMetaTrapdoor(int meta, int coordBaseMode) { + if(coordBaseMode == 0) return meta; + switch(coordBaseMode) { + case 1: //West + if((meta & 3) < 2) + meta = meta ^ 3; + else + meta = meta ^ 2; + break; + case 2: //North + meta = meta ^ 1; //Flip first bit + break; + case 3: //East + if((meta & 3) < 2) + meta = meta ^ 2; + else + meta = meta ^ 3; + break; + } + return meta; + } + public static int transformMetaPillar(int meta, int coordBaseMode) { if(coordBaseMode == 0 || coordBaseMode == 2) return meta; int type = meta & 3; diff --git a/src/main/java/com/hbm/world/gen/INBTTileEntityTransformable.java b/src/main/java/com/hbm/world/gen/nbt/INBTTileEntityTransformable.java similarity index 90% rename from src/main/java/com/hbm/world/gen/INBTTileEntityTransformable.java rename to src/main/java/com/hbm/world/gen/nbt/INBTTileEntityTransformable.java index 33dc141c8..88a05ba2e 100644 --- a/src/main/java/com/hbm/world/gen/INBTTileEntityTransformable.java +++ b/src/main/java/com/hbm/world/gen/nbt/INBTTileEntityTransformable.java @@ -1,4 +1,4 @@ -package com.hbm.world.gen; +package com.hbm.world.gen.nbt; import net.minecraft.world.World; diff --git a/src/main/java/com/hbm/world/gen/nbt/JigsawPiece.java b/src/main/java/com/hbm/world/gen/nbt/JigsawPiece.java new file mode 100644 index 000000000..d58a5dcfa --- /dev/null +++ b/src/main/java/com/hbm/world/gen/nbt/JigsawPiece.java @@ -0,0 +1,35 @@ +package com.hbm.world.gen.nbt; + +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.world.gen.structure.StructureComponent.BlockSelector; + +// Assigned to a Component to build +public class JigsawPiece { + + public final String name; + public final NBTStructure structure; + + // Block modifiers, for randomization and terrain matching + public Map blockTable; + public boolean conformToTerrain = false; // moves every single column to the terrain (digging out trenches, natural formations) + public boolean alignToTerrain = false; // aligns this component y-level individually, without moving individual columns (village houses) + public int heightOffset = 0; // individual offset for the structure + + public JigsawPiece(String name, NBTStructure structure) { + this(name, structure, 0); + } + + public JigsawPiece(String name, NBTStructure structure, int heightOffset) { + if(name == null) throw new IllegalStateException("A severe error has occurred in NBTStructure! A jigsaw piece has been registered without a valid name!"); + if(NBTStructure.jigsawMap.containsKey(name)) throw new IllegalStateException("A severe error has occurred in NBTStructure! A jigsaw piece has been registered with the same name as another: " + name); + + this.name = name; + this.structure = structure; + NBTStructure.jigsawMap.put(name, this); + + this.heightOffset = heightOffset; + } + +} \ No newline at end of file diff --git a/src/main/java/com/hbm/world/gen/nbt/JigsawPool.java b/src/main/java/com/hbm/world/gen/nbt/JigsawPool.java new file mode 100644 index 000000000..aaf0e70d2 --- /dev/null +++ b/src/main/java/com/hbm/world/gen/nbt/JigsawPool.java @@ -0,0 +1,58 @@ +package com.hbm.world.gen.nbt; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import com.hbm.util.Tuple.Pair; + +// A set of pieces with weights +public class JigsawPool { + + // Weighted list of pieces to pick from + List> pieces = new ArrayList<>(); + int totalWeight = 0; + + public String fallback; + + private boolean isClone; + + public void add(JigsawPiece piece, int weight) { + if(weight <= 0) throw new IllegalStateException("JigsawPool spawn weight must be positive!"); + pieces.add(new Pair<>(piece, weight)); + totalWeight += weight; + } + + protected JigsawPool clone() { + JigsawPool clone = new JigsawPool(); + clone.pieces = new ArrayList<>(this.pieces); + clone.fallback = this.fallback; + clone.totalWeight = this.totalWeight; + clone.isClone = true; + + return clone; + } + + // If from a clone, will remove from the pool + public JigsawPiece get(Random rand) { + if(totalWeight <= 0) return null; + int weight = rand.nextInt(totalWeight); + + for(int i = 0; i < pieces.size(); i++) { + Pair pair = pieces.get(i); + weight -= pair.getValue(); + + if(weight < 0) { + if(isClone) { + pieces.remove(i); + totalWeight -= pair.getValue(); + } + + return pair.getKey(); + } + } + + return null; + } + +} \ No newline at end of file diff --git a/src/main/java/com/hbm/world/gen/NBTStructure.java b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java similarity index 84% rename from src/main/java/com/hbm/world/gen/NBTStructure.java rename to src/main/java/com/hbm/world/gen/nbt/NBTStructure.java index 60da4735a..ed1632ee1 100644 --- a/src/main/java/com/hbm/world/gen/NBTStructure.java +++ b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java @@ -1,11 +1,10 @@ -package com.hbm.world.gen; +package com.hbm.world.gen.nbt; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.*; -import java.util.function.Function; import java.util.function.Predicate; import com.hbm.blocks.ModBlocks; @@ -17,6 +16,7 @@ import com.hbm.main.MainRegistry; import com.hbm.util.Tuple.Pair; import com.hbm.util.Tuple.Quartet; import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.world.gen.nbt.SpawnCondition.WorldCoordinate; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.*; @@ -31,6 +31,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.IChunkProvider; @@ -53,7 +54,10 @@ public class NBTStructure { * without having to define and register each structure manually */ + private static Map namedMap = new HashMap<>(); + protected static Map> weightedMap = new HashMap<>(); + protected static Map> customSpawnMap = new HashMap<>(); // serialization data protected static Map jigsawMap = new HashMap<>(); @@ -62,7 +66,7 @@ public class NBTStructure { private boolean isLoaded; - private ThreeInts size; + protected ThreeInts size; private List> itemPalette; private BlockState[][][] blockArray; @@ -89,6 +93,17 @@ public class NBTStructure { // Register a new structure for a given dimension public static void registerStructure(int dimensionId, SpawnCondition spawn) { + if(namedMap.containsKey(spawn.name) && namedMap.get(spawn.name) != spawn) + throw new IllegalStateException("A severe error has occurred in NBTStructure! A SpawnCondition has been registered with the same name as another: " + spawn.name); + + namedMap.put(spawn.name, spawn); + + if(spawn.checkCoordinates != null) { + List spawnList = customSpawnMap.computeIfAbsent(dimensionId, integer -> new ArrayList()); + spawnList.add(spawn); + return; + } + List weightedList = weightedMap.computeIfAbsent(dimensionId, integer -> new ArrayList()); for(int i = 0; i < spawn.spawnWeight; i++) { weightedList.add(spawn); @@ -107,10 +122,7 @@ public class NBTStructure { } public static void registerNullWeight(int dimensionId, int weight, Predicate predicate) { - SpawnCondition spawn = new SpawnCondition() {{ - spawnWeight = weight; - canSpawn = predicate; - }}; + SpawnCondition spawn = new SpawnCondition(weight, predicate); List weightedList = weightedMap.computeIfAbsent(dimensionId, integer -> new ArrayList()); for(int i = 0; i < spawn.spawnWeight; i++) { @@ -118,6 +130,19 @@ public class NBTStructure { } } + // Presents a list of all structures registered (so far) + public static List listStructures() { + List names = new ArrayList<>(namedMap.keySet()); + names.sort((a, b) -> a.compareTo(b)); + return names; + } + + // Fetches a registered structure by name, + // If one is not found, will simply return null. + public static SpawnCondition getStructure(String name) { + return namedMap.get(name); + } + // Saves a selected area into an NBT structure (+ some of our non-standard stuff to support 1.7.10) public static void saveArea(String filename, World world, int x1, int y1, int z1, int x2, int y2, int z2, Set> exclude) { NBTTagCompound structure = new NBTTagCompound(); @@ -552,7 +577,7 @@ public class NBTStructure { return selector.func_151561_a(); } - if(definition.block instanceof INBTTransformable) return ((INBTTransformable) definition.block).transformBlock(definition.block); + if(definition.block instanceof INBTBlockTransformable) return ((INBTBlockTransformable) definition.block).transformBlock(definition.block); return definition.block; } @@ -563,22 +588,23 @@ public class NBTStructure { } // Our shit - if(definition.block instanceof INBTTransformable) return ((INBTTransformable) definition.block).transformMeta(definition.meta, coordBaseMode); + if(definition.block instanceof INBTBlockTransformable) return ((INBTBlockTransformable) definition.block).transformMeta(definition.meta, coordBaseMode); if(coordBaseMode == 0) return definition.meta; // Vanilla shit - if(definition.block instanceof BlockStairs) return INBTTransformable.transformMetaStairs(definition.meta, coordBaseMode); - if(definition.block instanceof BlockRotatedPillar) return INBTTransformable.transformMetaPillar(definition.meta, coordBaseMode); - if(definition.block instanceof BlockDirectional) return INBTTransformable.transformMetaDirectional(definition.meta, coordBaseMode); - if(definition.block instanceof BlockTorch) return INBTTransformable.transformMetaTorch(definition.meta, coordBaseMode); - if(definition.block instanceof BlockButton) return INBTTransformable.transformMetaTorch(definition.meta, coordBaseMode); - if(definition.block instanceof BlockDoor) return INBTTransformable.transformMetaDoor(definition.meta, coordBaseMode); - if(definition.block instanceof BlockLever) return INBTTransformable.transformMetaLever(definition.meta, coordBaseMode); - if(definition.block instanceof BlockSign) return INBTTransformable.transformMetaDeco(definition.meta, coordBaseMode); - if(definition.block instanceof BlockLadder) return INBTTransformable.transformMetaDeco(definition.meta, coordBaseMode); - if(definition.block instanceof BlockTripWireHook) return INBTTransformable.transformMetaDirectional(definition.meta, coordBaseMode); - if(definition.block == Blocks.vine) return INBTTransformable.transformMetaVine(definition.meta, coordBaseMode); + if(definition.block instanceof BlockStairs) return INBTBlockTransformable.transformMetaStairs(definition.meta, coordBaseMode); + if(definition.block instanceof BlockRotatedPillar) return INBTBlockTransformable.transformMetaPillar(definition.meta, coordBaseMode); + if(definition.block instanceof BlockDirectional) return INBTBlockTransformable.transformMetaDirectional(definition.meta, coordBaseMode); + if(definition.block instanceof BlockTorch) return INBTBlockTransformable.transformMetaTorch(definition.meta, coordBaseMode); + if(definition.block instanceof BlockButton) return INBTBlockTransformable.transformMetaTorch(definition.meta, coordBaseMode); + if(definition.block instanceof BlockDoor) return INBTBlockTransformable.transformMetaDoor(definition.meta, coordBaseMode); + if(definition.block instanceof BlockLever) return INBTBlockTransformable.transformMetaLever(definition.meta, coordBaseMode); + if(definition.block instanceof BlockSign) return INBTBlockTransformable.transformMetaDeco(definition.meta, coordBaseMode); + if(definition.block instanceof BlockLadder) return INBTBlockTransformable.transformMetaDeco(definition.meta, coordBaseMode); + if(definition.block instanceof BlockTripWireHook) return INBTBlockTransformable.transformMetaDirectional(definition.meta, coordBaseMode); + if(definition.block instanceof BlockVine) return INBTBlockTransformable.transformMetaVine(definition.meta, coordBaseMode); + if(definition.block instanceof BlockTrapDoor) return INBTBlockTransformable.transformMetaTrapdoor(definition.meta, coordBaseMode); return definition.meta; } @@ -649,152 +675,6 @@ public class NBTStructure { } - public static class SpawnCondition { - - // If defined, will spawn a single jigsaw piece, for single nbt structures - public JigsawPiece structure; - - // If defined, will spawn in a non-nbt structure component - public Function, StructureStart> start; - - public Predicate canSpawn; - public int spawnWeight = 1; - - // Named jigsaw pools that are referenced within the structure - public Map pools; - public String startPool; - - // Maximum amount of components in this structure - public int sizeLimit = 8; - - // How far the structure can extend horizontally from the center, maximum of 128 - // This could be increased by changing GenStructure:range from 8, but this is already quite reasonably large - public int rangeLimit = 128; - - // Height modifiers, will clamp height that the start generates at, allowing for: - // * Submarines that must spawn under the ocean surface - // * Bunkers that sit underneath the ground - public int minHeight = 1; - public int maxHeight = 128; - - // Can this spawn in the current biome - protected boolean isValid(BiomeGenBase biome) { - if(canSpawn == null) return true; - return canSpawn.test(biome); - } - - protected JigsawPool getPool(String name) { - return pools.get(name).clone(); - } - - // Builds all of the pools into neat rows and columns, for editing and debugging! - // Make sure structure debug is enabled, or it will no-op - // Do not use in generation - public void buildAll(World world, int x, int y, int z) { - if(!StructureConfig.debugStructures) return; - - int padding = 5; - int oz = 0; - - for(JigsawPool pool : pools.values()) { - int highestWidth = 0; - int ox = 0; - - for(Pair entry : pool.pieces) { - NBTStructure structure = entry.key.structure; - structure.build(world, x + ox + (structure.size.x / 2), y, z + oz + (structure.size.z / 2)); - - ox += structure.size.x + padding; - highestWidth = Math.max(highestWidth, structure.size.z); - } - - oz += highestWidth + padding; - } - } - - } - - // A set of pieces with weights - public static class JigsawPool { - - // Weighted list of pieces to pick from - private List> pieces = new ArrayList<>(); - private int totalWeight = 0; - - public String fallback; - - private boolean isClone; - - public void add(JigsawPiece piece, int weight) { - if(weight <= 0) throw new IllegalStateException("JigsawPool spawn weight must be positive!"); - pieces.add(new Pair<>(piece, weight)); - totalWeight += weight; - } - - protected JigsawPool clone() { - JigsawPool clone = new JigsawPool(); - clone.pieces = new ArrayList<>(this.pieces); - clone.fallback = this.fallback; - clone.totalWeight = this.totalWeight; - clone.isClone = true; - - return clone; - } - - // If from a clone, will remove from the pool - public JigsawPiece get(Random rand) { - if(totalWeight <= 0) return null; - int weight = rand.nextInt(totalWeight); - - for(int i = 0; i < pieces.size(); i++) { - Pair pair = pieces.get(i); - weight -= pair.getValue(); - - if(weight < 0) { - if(isClone) { - pieces.remove(i); - totalWeight -= pair.getValue(); - } - - return pair.getKey(); - } - } - - return null; - } - - } - - // Assigned to a Component to build - public static class JigsawPiece { - - public final String name; - public final NBTStructure structure; - - // Block modifiers, for randomization and terrain matching - public Map blockTable; - public boolean conformToTerrain = false; // moves every single column to the terrain (digging out trenches, natural formations) - public boolean alignToTerrain = false; // aligns this component y-level individually, without moving individual columns (village houses) - public int heightOffset = 0; // individual offset for the structure - - public JigsawPiece(String name, NBTStructure structure) { - this(name, structure, 0); - } - - public JigsawPiece(String name, NBTStructure structure, int heightOffset) { - if(name == null) throw new IllegalStateException("A severe error has occurred in NBTStructure! A jigsaw piece has been registered without a valid name!"); - if(jigsawMap.containsKey(name)) throw new IllegalStateException("A severe error has occurred in NBTStructure! A jigsaw piece has been registered with the same name as another: " + name); - - this.name = name; - this.structure = structure; - jigsawMap.put(name, this); - - this.heightOffset = heightOffset; - } - - } - - // Each jigsaw block in a structure will instance one of these private static class JigsawConnection { @@ -872,7 +752,7 @@ public class NBTStructure { // Save to NBT @Override protected void func_143012_a(NBTTagCompound nbt) { - nbt.setString("piece", piece.name); + nbt.setString("piece", piece != null ? piece.name : "NULL"); nbt.setInteger("min", minHeight); nbt.setInteger("max", maxHeight); nbt.setBoolean("hasHeight", heightUpdated); @@ -1055,6 +935,10 @@ public class NBTStructure { } JigsawPool nextPool = spawn.getPool(fromConnection.poolName); + if(nextPool == null) { + MainRegistry.logger.warn("[Jigsaw] Jigsaw block points to invalid pool: " + fromConnection.poolName); + continue; + } Component nextComponent = null; @@ -1119,10 +1003,16 @@ public class NBTStructure { private Component buildNextComponent(Random rand, SpawnCondition spawn, JigsawPool pool, Component fromComponent, JigsawConnection fromConnection) { JigsawPiece nextPiece = pool.get(rand); - if(nextPiece == null) return null; + if(nextPiece == null) { + MainRegistry.logger.warn("[Jigsaw] Pool returned null piece: " + fromConnection.poolName); + return null; + } List connectionPool = getConnectionPool(nextPiece, fromConnection); - if(connectionPool == null) return null; + if(connectionPool == null || connectionPool.isEmpty()) { + MainRegistry.logger.warn("[Jigsaw] No valid connections for: " + fromConnection.targetName + " - in piece: " + nextPiece.name); + return null; + } JigsawConnection toConnection = connectionPool.get(rand.nextInt(connectionPool.size())); @@ -1192,7 +1082,42 @@ public class NBTStructure { @Override protected boolean canSpawnStructureAtCoords(int chunkX, int chunkZ) { - if(!weightedMap.containsKey(worldObj.provider.dimensionId)) return false; + nextSpawn = getSpawnAtCoords(chunkX, chunkZ); + return nextSpawn != null; + } + + public SpawnCondition getStructureAt(World world, int chunkX, int chunkZ) { + // make sure the random is in the correct state + this.worldObj = world; + this.rand.setSeed(world.getSeed()); + long l = this.rand.nextLong(); + long i1 = this.rand.nextLong(); + + long l1 = (long)chunkX * l; + long i2 = (long)chunkZ * i1; + this.rand.setSeed(l1 ^ i2 ^ world.getSeed()); + + // random nextInt call just before `canSpawnStructureAtCoords`, no, I don't know why Mojang added that + this.rand.nextInt(); + + return getSpawnAtCoords(chunkX, chunkZ); + } + + private SpawnCondition getSpawnAtCoords(int chunkX, int chunkZ) { + // attempt to spawn with custom chunk coordinate rules + if (customSpawnMap.containsKey(worldObj.provider.dimensionId)) { + WorldCoordinate coords = new WorldCoordinate(worldObj, new ChunkCoordIntPair(chunkX, chunkZ), rand); + + List spawnList = customSpawnMap.get(worldObj.provider.dimensionId); + for (SpawnCondition spawn : spawnList) { + if ((spawn.pools != null || spawn.structure != null) && spawn.checkCoordinates.test(coords)) { + return spawn; + } + } + } + + if (!weightedMap.containsKey(worldObj.provider.dimensionId)) + return null; int x = chunkX; int z = chunkZ; @@ -1208,15 +1133,16 @@ public class NBTStructure { x += rand.nextInt(StructureConfig.structureMaxChunks - StructureConfig.structureMinChunks); z += rand.nextInt(StructureConfig.structureMaxChunks - StructureConfig.structureMinChunks); - if(chunkX == x && chunkZ == z) { + if (chunkX == x && chunkZ == z) { BiomeGenBase biome = this.worldObj.getWorldChunkManager().getBiomeGenAt(chunkX * 16 + 8, chunkZ * 16 + 8); - nextSpawn = findSpawn(biome); + SpawnCondition spawn = findSpawn(biome); - return nextSpawn != null && (nextSpawn.pools != null || nextSpawn.start != null || nextSpawn.structure != null); + if(spawn != null && (spawn.pools != null || spawn.start != null || spawn.structure != null)) + return spawn; } - return false; + return null; } @Override diff --git a/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java b/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java new file mode 100644 index 000000000..b623ea864 --- /dev/null +++ b/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java @@ -0,0 +1,115 @@ +package com.hbm.world.gen.nbt; + +import java.util.Map; +import java.util.Random; +import java.util.function.Function; +import java.util.function.Predicate; + +import com.hbm.config.StructureConfig; +import com.hbm.util.Tuple.Pair; +import com.hbm.util.Tuple.Quartet; + +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.gen.structure.StructureStart; + +public class SpawnCondition { + + public final String name; + + // If defined, will spawn a single jigsaw piece, for single nbt structures + public JigsawPiece structure; + + // If defined, will spawn in a non-nbt structure component + public Function, StructureStart> start; + + // If defined, will override regular spawn location checking, for placing at specific coordinates or with special rules + public Predicate checkCoordinates; + + // Our regular spawning mechanics, based on biome, you should generally use these + public Predicate canSpawn; + public int spawnWeight = 1; + + // Named jigsaw pools that are referenced within the structure + public Map pools; + public String startPool; + + // Maximum amount of components in this structure + public int sizeLimit = 8; + + // How far the structure can extend horizontally from the center, maximum of 128 + // This could be increased by changing GenStructure:range from 8, but this is already quite reasonably large + public int rangeLimit = 128; + + // Height modifiers, will clamp height that the start generates at, allowing for: + // * Submarines that must spawn under the ocean surface + // * Bunkers that sit underneath the ground + public int minHeight = 1; + public int maxHeight = 128; + + protected SpawnCondition(int weight, Predicate predicate) { + name = null; + spawnWeight = weight; + canSpawn = predicate; + } + + public SpawnCondition(String name) { + this.name = name; + } + + // Can this spawn in the current biome + protected boolean isValid(BiomeGenBase biome) { + if(canSpawn == null) return true; + return canSpawn.test(biome); + } + + protected JigsawPool getPool(String name) { + JigsawPool pool = pools.get(name); + return pool != null ? pool.clone() : null; + } + + // Builds all of the pools into neat rows and columns, for editing and debugging! + // Make sure structure debug is enabled, or it will no-op + // Do not use in generation + public void buildAll(World world, int x, int y, int z) { + if(!StructureConfig.debugStructures) return; + + int padding = 5; + int oz = 0; + + for(JigsawPool pool : pools.values()) { + int highestWidth = 0; + int ox = 0; + + for(Pair entry : pool.pieces) { + NBTStructure structure = entry.key.structure; + structure.build(world, x + ox + (structure.size.x / 2), y, z + oz + (structure.size.z / 2)); + + ox += structure.size.x + padding; + highestWidth = Math.max(highestWidth, structure.size.z); + } + + oz += highestWidth + padding; + } + } + + /** + * Provides information about the current structure gen chunk, + * use the included random for consistent seeding! + */ + public static class WorldCoordinate { + + public final World world; + public final ChunkCoordIntPair coords; + public final Random rand; + + protected WorldCoordinate(World world, ChunkCoordIntPair coords, Random rand) { + this.world = world; + this.coords = coords; + this.rand = rand; + } + + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 32d100935..608213a68 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -705,6 +705,10 @@ commands.satellite.satellite_descended=Satellite successfully descended. commands.satellite.satellite_orbited=Satellite launched. commands.satellite.should_be_run_as_player=This command should be run by a player! +commands.locate.no_match=No structures with that name! +commands.locate.none_found=No structures found nearby! +commands.locate.success.coordinates=Structure %s found at %d, %d + container.ammoBag=Ammo Bag container.amsBase=AMS Base (Deco) container.amsEmitter=AMS Emitter (Deco) From 0c5c7a415050160736de9ea54bfb7575e5fc51ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=81=93=E7=A5=9E=20=E9=A6=B4=E5=AD=90?= Date: Fri, 8 Aug 2025 14:37:24 +0800 Subject: [PATCH 342/491] bee --- src/main/resources/assets/hbm/lang/zh_CN.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 902096a3f..c220e14b9 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -6137,3 +6137,4 @@ item.gun_autoshotgun_heretic.name=异教徒 purex.schrab=从 %s 中萃取Sa326 tile.machine_purex.name=钚铀还原提取设备(PUREX) tile.machine_purex.desc=可用于多种核燃料的再处理机器。$大多数配方需要用到硝酸和煤油。 +qmaw.tab=[按 %s 键获取帮助] From 7213b9b84d111ff67779710aba622009b2b5d6e4 Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 8 Aug 2025 16:53:13 +1000 Subject: [PATCH 343/491] move jiggy map --- src/main/java/com/hbm/world/gen/nbt/JigsawPiece.java | 8 ++++++-- src/main/java/com/hbm/world/gen/nbt/NBTStructure.java | 5 +---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hbm/world/gen/nbt/JigsawPiece.java b/src/main/java/com/hbm/world/gen/nbt/JigsawPiece.java index d58a5dcfa..039f8d154 100644 --- a/src/main/java/com/hbm/world/gen/nbt/JigsawPiece.java +++ b/src/main/java/com/hbm/world/gen/nbt/JigsawPiece.java @@ -1,5 +1,6 @@ package com.hbm.world.gen.nbt; +import java.util.HashMap; import java.util.Map; import net.minecraft.block.Block; @@ -8,6 +9,9 @@ import net.minecraft.world.gen.structure.StructureComponent.BlockSelector; // Assigned to a Component to build public class JigsawPiece { + // Translates a given name into a jigsaw piece, for serialization + protected static Map jigsawMap = new HashMap<>(); + public final String name; public final NBTStructure structure; @@ -23,11 +27,11 @@ public class JigsawPiece { public JigsawPiece(String name, NBTStructure structure, int heightOffset) { if(name == null) throw new IllegalStateException("A severe error has occurred in NBTStructure! A jigsaw piece has been registered without a valid name!"); - if(NBTStructure.jigsawMap.containsKey(name)) throw new IllegalStateException("A severe error has occurred in NBTStructure! A jigsaw piece has been registered with the same name as another: " + name); + if(jigsawMap.containsKey(name)) throw new IllegalStateException("A severe error has occurred in NBTStructure! A jigsaw piece has been registered with the same name as another: " + name); this.name = name; this.structure = structure; - NBTStructure.jigsawMap.put(name, this); + jigsawMap.put(name, this); this.heightOffset = heightOffset; } diff --git a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java index ed1632ee1..385644257 100644 --- a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java +++ b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java @@ -59,9 +59,6 @@ public class NBTStructure { protected static Map> weightedMap = new HashMap<>(); protected static Map> customSpawnMap = new HashMap<>(); - // serialization data - protected static Map jigsawMap = new HashMap<>(); - private String name; private boolean isLoaded; @@ -761,7 +758,7 @@ public class NBTStructure { // Load from NBT @Override protected void func_143011_b(NBTTagCompound nbt) { - piece = jigsawMap.get(nbt.getString("piece")); + piece = JigsawPiece.jigsawMap.get(nbt.getString("piece")); minHeight = nbt.getInteger("min"); maxHeight = nbt.getInteger("max"); heightUpdated = nbt.getBoolean("hasHeight"); From 3f72a93d2802da8cbd1b1a76cf1705a097988ca6 Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 8 Aug 2025 18:44:29 +1000 Subject: [PATCH 344/491] tandems! checking if all the affected chunks have generated yet has NOT yet been implemented tho --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../hbm/blocks/generic/BlockWandTandem.java | 438 ++++++++++++++++++ .../java/com/hbm/commands/CommandLocate.java | 2 +- .../java/com/hbm/main/StructureManager.java | 2 + .../java/com/hbm/tileentity/TileMappings.java | 2 + .../com/hbm/world/gen/nbt/NBTStructure.java | 80 +++- .../com/hbm/world/gen/nbt/SpawnCondition.java | 2 +- .../hbm/structures/test-tandem-core.nbt | Bin 0 -> 453 bytes .../assets/hbm/structures/test-tandem.nbt | Bin 0 -> 455 bytes .../hbm/textures/blocks/wand_tandem.png | Bin 0 -> 543 bytes .../hbm/textures/blocks/wand_tandem_back.png | Bin 0 -> 557 bytes .../hbm/textures/blocks/wand_tandem_side.png | Bin 0 -> 549 bytes .../hbm/textures/blocks/wand_tandem_top.png | Bin 0 -> 562 bytes 13 files changed, 503 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockWandTandem.java create mode 100644 src/main/resources/assets/hbm/structures/test-tandem-core.nbt create mode 100644 src/main/resources/assets/hbm/structures/test-tandem.nbt create mode 100644 src/main/resources/assets/hbm/textures/blocks/wand_tandem.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/wand_tandem_back.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/wand_tandem_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/wand_tandem_top.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 99824c4d8..87269420e 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1248,6 +1248,7 @@ public class ModBlocks { public static Block wand_loot; public static Block wand_jigsaw; public static Block wand_logic; + public static Block wand_tandem; public static Block logic_block; @@ -2411,6 +2412,7 @@ public class ModBlocks { wand_loot = new BlockWandLoot().setBlockName("wand_loot").setBlockTextureName(RefStrings.MODID + ":wand_loot"); wand_jigsaw = new BlockWandJigsaw().setBlockName("wand_jigsaw").setBlockTextureName(RefStrings.MODID + ":wand_jigsaw"); wand_logic = new BlockWandLogic().setBlockName("wand_logic").setBlockTextureName(RefStrings.MODID + ":wand_logic"); + wand_tandem = new BlockWandTandem().setBlockName("wand_tandem").setBlockTextureName(RefStrings.MODID + ":wand_tandem"); logic_block = new LogicBlock().setBlockName("logic_block").setBlockTextureName(RefStrings.MODID + ":logic_block"); @@ -3569,6 +3571,7 @@ public class ModBlocks { register(wand_loot); register(wand_jigsaw); register(wand_logic); + register(wand_tandem); register(logic_block); } diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandTandem.java b/src/main/java/com/hbm/blocks/generic/BlockWandTandem.java new file mode 100644 index 000000000..1ad176e63 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockWandTandem.java @@ -0,0 +1,438 @@ +package com.hbm.blocks.generic; + +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.input.Keyboard; + +import com.hbm.blocks.IBlockSideRotation; +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.items.ModItems; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.BufferUtil; +import com.hbm.util.i18n.I18nUtil; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.world.gen.nbt.INBTBlockTransformable; +import com.hbm.world.gen.nbt.NBTStructure; +import com.hbm.world.gen.nbt.NBTStructure.JigsawConnection; +import com.hbm.world.gen.nbt.SpawnCondition; +import com.hbm.world.gen.nbt.JigsawPiece; +import com.hbm.world.gen.nbt.JigsawPool; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.material.Material; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; +import net.minecraftforge.common.util.ForgeDirection; + +/** + * You're familiar with Billy Mitchell, World Video Game Champion? He could probably do it. + * So I gotta find a way to harness his power. And I think I've found a way. + * + * THAT'S RIGHT, WE'RE GONNA CHEAT. + * + * NBTStructures have the inherent flaws of the vanilla structure system: Structures are composed + * before terrain gen even kicks in, placement order of components are arbitrary and certain + * connected parts will fall apart due to unexpected variance in the terrain. Not good. + * The solution: Simply delay generation of parts using a tile entity that checks if the chunks + * in front of it are loaded, and then places a random part from the chosen pool. When this happens, + * the player is usually still far far away so they'll be none the wiser. Chunk load checks help + * prevent forced chunk loading and all the lag that comes with that. + * + * The system is named after tandem shaped charges: Make a hole with the first charge, then deliver + * the actual payload. + * + * @author hbm, Mellow + */ +public class BlockWandTandem extends BlockContainer implements IBlockSideRotation, INBTBlockTransformable, IGUIProvider, ILookOverlay { + + private IIcon iconTop; + private IIcon iconSide; + private IIcon iconBack; + + public BlockWandTandem() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityWandTandem(); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + int l = BlockPistonBase.determineOrientation(world, x, y, z, player); + world.setBlockMetadataWithNotify(x, y, z, l, 2); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":wand_tandem"); + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":wand_tandem_top"); + this.iconSide = iconRegister.registerIcon(RefStrings.MODID + ":wand_tandem_side"); + this.iconBack = iconRegister.registerIcon(RefStrings.MODID + ":wand_tandem_back"); + } + + @Override + public IIcon getIcon(int side, int meta) { + if(side == meta) return blockIcon; + if(IBlockSideRotation.isOpposite(side, meta)) return iconBack; + if(side <= 1) return iconTop; + if(side > 3 && meta <= 1) return iconTop; + return iconSide; + } + + @Override + public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { + if(side == 0) return IBlockSideRotation.topToBottom(getRotationFromSide(world, x, y, z, 1)); + + int meta = world.getBlockMetadata(x, y, z); + if(side == meta || IBlockSideRotation.isOpposite(side, meta)) return 0; + + // downwards facing has no changes, upwards flips anything not handled already + if(meta == 0) return 0; + if(meta == 1) return 3; + + // top (and bottom) is rotated fairly normally + if(side == 1) { + switch(meta) { + case 2: return 3; + case 3: return 0; + case 4: return 1; + case 5: return 2; + } + } + + // you know what I aint explaining further, it's a fucking mess here + if(meta == 2) return side == 4 ? 2 : 1; + if(meta == 3) return side == 4 ? 1 : 2; + if(meta == 4) return side == 2 ? 1 : 2; + if(meta == 5) return side == 2 ? 2 : 1; + + return 0; + } + + @Override + public int getRenderType() { + return IBlockSideRotation.getRenderType(); + } + + @Override + public int transformMeta(int meta, int coordBaseMode) { + return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityWandTandem)) return false; + + TileEntityWandTandem jigsaw = (TileEntityWandTandem) te; + + if(player.getHeldItem() != null && player.getHeldItem().getItem() == Items.paper) { + TileEntityWandTandem.copyMode = true; + if(!player.getHeldItem().hasTagCompound()) { + player.getHeldItem().stackTagCompound = new NBTTagCompound(); + jigsaw.writeToNBT(player.getHeldItem().stackTagCompound); + } else { + jigsaw.readFromNBT(player.getHeldItem().stackTagCompound); + jigsaw.markDirty(); + } + TileEntityWandTandem.copyMode = false; + return true; + } + + if(!player.isSneaking()) { + Block block = getBlock(world, player.getHeldItem()); + if(block == ModBlocks.wand_air) block = Blocks.air; + + if(block != null && block != ModBlocks.wand_jigsaw && block != ModBlocks.wand_loot) { + jigsaw.replaceBlock = block; + jigsaw.replaceMeta = player.getHeldItem().getItemDamage(); + jigsaw.markDirty(); + + return true; + } + + if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.wand_s) return false; + + if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + + return true; + } + + return false; + } + + private Block getBlock(World world, ItemStack stack) { + if(stack == null) return null; + if(!(stack.getItem() instanceof ItemBlock)) return null; + + return ((ItemBlock) stack.getItem()).field_150939_a; + } + + @Override + @SideOnly(Side.CLIENT) + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GuiWandTandem((TileEntityWandTandem) world.getTileEntity(x, y, z)); + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return null; + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + if(!(te instanceof TileEntityWandTandem)) return; + TileEntityWandTandem jigsaw = (TileEntityWandTandem) te; + + List text = new ArrayList(); + + text.add(EnumChatFormatting.GRAY + "Target pool: " + EnumChatFormatting.RESET + jigsaw.pool); + text.add(EnumChatFormatting.GRAY + "Target name: " + EnumChatFormatting.RESET + jigsaw.target); + text.add(EnumChatFormatting.GRAY + "Turns into: " + EnumChatFormatting.RESET + GameRegistry.findUniqueIdentifierFor(jigsaw.replaceBlock).toString()); + text.add(EnumChatFormatting.GRAY + " with meta: " + EnumChatFormatting.RESET + jigsaw.replaceMeta); + text.add(EnumChatFormatting.GRAY + "Joint type: " + EnumChatFormatting.RESET + (jigsaw.isRollable ? "Rollable" : "Aligned")); + + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + + + public static class TileEntityWandTandem extends TileEntityLoadedBase implements IControlReceiver { + + public static boolean copyMode = false; + + private String pool = "default"; + private String target = "default"; + private Block replaceBlock = Blocks.air; + private int replaceMeta = 0; + private boolean isRollable = true; // sets joint type, rollable joints can be placed in any orientation for vertical jigsaw connections + + private boolean isArmed = false; + private SpawnCondition structure; + + @Override + public void updateEntity() { + if(!worldObj.isRemote) { + tryGenerate(); + networkPackNT(15); + } + } + + private void tryGenerate() { + if(!this.isArmed || target == null || target.isEmpty() || pool == null || pool.isEmpty()) return; + + JigsawPool pool = structure.getPool(this.pool); + if(pool == null) return; + + JigsawPiece nextPiece = pool.get(worldObj.rand); + if(nextPiece == null) return; + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); + + List connectionPool = nextPiece.structure.getConnectionPool(dir, target); + if(connectionPool == null) return; + + JigsawConnection toConnection = connectionPool.get(worldObj.rand.nextInt(connectionPool.size())); + int nextCoordBase = directionOffsetToCoordBase(dir.getOpposite(), toConnection.dir); + + BlockPos pos = new BlockPos(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); + + // offset the starting point to the connecting point + int ox = nextPiece.structure.rotateX(toConnection.pos.x, toConnection.pos.z, nextCoordBase); + int oy = toConnection.pos.y; + int oz = nextPiece.structure.rotateZ(toConnection.pos.x, toConnection.pos.z, nextCoordBase); + + nextPiece.structure.build(worldObj, nextPiece, pos.getX() - ox, pos.getY() - oy, pos.getZ() - oz, nextCoordBase, structure.name); + + worldObj.setBlock(xCoord, yCoord, zCoord, replaceBlock, replaceMeta, 2); + } + + private int directionOffsetToCoordBase(ForgeDirection from, ForgeDirection to) { + for(int i = 0; i < 4; i++) { + if(from == to) return i % 4; + from = from.getRotation(ForgeDirection.DOWN); + } + return 0; + } + + @Override + public void serialize(ByteBuf buf) { + BufferUtil.writeString(buf, pool); + BufferUtil.writeString(buf, target); + buf.writeInt(Block.getIdFromBlock(replaceBlock)); + buf.writeInt(replaceMeta); + buf.writeBoolean(isRollable); + } + + @Override + public void deserialize(ByteBuf buf) { + pool = BufferUtil.readString(buf); + target = BufferUtil.readString(buf); + replaceBlock = Block.getBlockById(buf.readInt()); + replaceMeta = buf.readInt(); + isRollable = buf.readBoolean(); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + if(!copyMode) { + super.writeToNBT(nbt); + nbt.setInteger("direction", this.getBlockMetadata()); + if(isArmed) { + nbt.setBoolean("isArmed", isArmed); + nbt.setString("structure", structure.name); + } + } + + nbt.setString("pool", pool); + nbt.setString("target", target); + nbt.setString("block", GameRegistry.findUniqueIdentifierFor(replaceBlock).toString()); + nbt.setInteger("meta", replaceMeta); + nbt.setBoolean("roll", isRollable); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + if(!copyMode) { + super.readFromNBT(nbt); + isArmed = nbt.getBoolean("isArmed"); + structure = NBTStructure.getStructure(nbt.getString("structure")); + } + + pool = nbt.getString("pool"); + target = nbt.getString("target"); + replaceBlock = Block.getBlockFromName(nbt.getString("block")); + replaceMeta = nbt.getInteger("meta"); + isRollable = nbt.getBoolean("roll"); + } + + @Override + public boolean hasPermission(EntityPlayer player) { + return true; + } + + @Override + public void receiveControl(NBTTagCompound nbt) { + readFromNBT(nbt); + markDirty(); + } + + public void arm(SpawnCondition structure) { + isArmed = true; + this.structure = structure; + } + + } + + public static class GuiWandTandem extends GuiScreen { + + private final TileEntityWandTandem jigsaw; + + private GuiTextField textPool; + private GuiTextField textTarget; + + private GuiButton jointToggle; + + public GuiWandTandem(TileEntityWandTandem jigsaw) { + this.jigsaw = jigsaw; + } + + @Override + public void initGui() { + Keyboard.enableRepeatEvents(true); + + textPool = new GuiTextField(fontRendererObj, this.width / 2 - 150, 50, 300, 20); + textPool.setText(jigsaw.pool); + + textTarget = new GuiTextField(fontRendererObj, this.width / 2 + 10, 100, 140, 20); + textTarget.setText(jigsaw.target); + + jointToggle = new GuiButton(0, this.width / 2 + 60, 150, 90, 20, jigsaw.isRollable ? "Rollable" : "Aligned"); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + drawDefaultBackground(); + + drawString(fontRendererObj, "Target pool:", this.width / 2 - 150, 37, 0xA0A0A0); + textPool.drawTextBox(); + + drawString(fontRendererObj, "Target name:", this.width / 2 + 10, 87, 0xA0A0A0); + textTarget.drawTextBox(); + + drawString(fontRendererObj, "Joint type:", this.width / 2 + 60, 137, 0xA0A0A0); + jointToggle.drawButton(mc, mouseX, mouseY); + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @Override + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + + NBTTagCompound data = new NBTTagCompound(); + jigsaw.writeToNBT(data); + + data.setString("pool", textPool.getText()); + data.setString("target", textTarget.getText()); + data.setBoolean("roll", jointToggle.displayString == "Rollable"); + + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, jigsaw.xCoord, jigsaw.yCoord, jigsaw.zCoord)); + } + + @Override + protected void keyTyped(char typedChar, int keyCode) { + super.keyTyped(typedChar, keyCode); + textPool.textboxKeyTyped(typedChar, keyCode); + textTarget.textboxKeyTyped(typedChar, keyCode); + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) { + super.mouseClicked(mouseX, mouseY, mouseButton); + textPool.mouseClicked(mouseX, mouseY, mouseButton); + textTarget.mouseClicked(mouseX, mouseY, mouseButton); + + if(jointToggle.mousePressed(mc, mouseX, mouseY)) { + jointToggle.displayString = jointToggle.displayString == "Rollable" ? "Aligned" : "Rollable"; + } + } + + @Override public boolean doesGuiPauseGame() { return false; } + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/commands/CommandLocate.java b/src/main/java/com/hbm/commands/CommandLocate.java index b0a7f8948..ec646c817 100644 --- a/src/main/java/com/hbm/commands/CommandLocate.java +++ b/src/main/java/com/hbm/commands/CommandLocate.java @@ -21,7 +21,7 @@ import net.minecraft.world.World; public class CommandLocate extends CommandBase { - private static final int MAX_DISTANCE = 256; + private static final int MAX_DISTANCE = 256; @Override public String getCommandName() { diff --git a/src/main/java/com/hbm/main/StructureManager.java b/src/main/java/com/hbm/main/StructureManager.java index 077a3665f..e740331f3 100644 --- a/src/main/java/com/hbm/main/StructureManager.java +++ b/src/main/java/com/hbm/main/StructureManager.java @@ -68,5 +68,7 @@ public class StructureManager { // public static final NBTStructure test_jigsaw = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-jigsaw.nbt")); // public static final NBTStructure test_jigsaw_core = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-jigsaw-core.nbt")); // public static final NBTStructure test_jigsaw_hall = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-jigsaw-hall.nbt")); + // public static final NBTStructure test_tandem_core = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-tandem-core.nbt")); + // public static final NBTStructure test_tandem = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-tandem.nbt")); } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index bae45ddca..63bc3640e 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -20,6 +20,7 @@ import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.BlockSupplyCrate.TileEntitySupplyCrate; import com.hbm.blocks.generic.BlockWandJigsaw.TileEntityWandJigsaw; import com.hbm.blocks.generic.BlockWandLoot.TileEntityWandLoot; +import com.hbm.blocks.generic.BlockWandTandem.TileEntityWandTandem; import com.hbm.blocks.generic.BlockWandLogic.TileEntityWandLogic; import com.hbm.blocks.generic.DungeonSpawner.TileEntityDungeonSpawner; import com.hbm.blocks.generic.LogicBlock; @@ -243,6 +244,7 @@ public class TileMappings { put(TileEntityWandLoot.class, "tileentity_wand_loot"); put(TileEntityWandJigsaw.class, "tileentity_wand_jigsaw"); put(TileEntityWandLogic.class, "tileentity_wand_spawner"); + put(TileEntityWandTandem.class, "tileentity_wand_tandem"); putNetwork(); putBombs(); diff --git a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java index 385644257..2bf7de38c 100644 --- a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java +++ b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java @@ -9,6 +9,7 @@ import java.util.function.Predicate; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockWand; +import com.hbm.blocks.generic.BlockWandTandem.TileEntityWandTandem; import com.hbm.config.GeneralConfig; import com.hbm.config.StructureConfig; import com.hbm.handler.ThreeInts; @@ -421,7 +422,7 @@ public class NBTStructure { return worldItemPalette; } - private TileEntity buildTileEntity(World world, Block block, HashMap worldItemPalette, NBTTagCompound nbt, int coordBaseMode) { + private TileEntity buildTileEntity(World world, Block block, HashMap worldItemPalette, NBTTagCompound nbt, int coordBaseMode, String structureName) { nbt = (NBTTagCompound)nbt.copy(); if(worldItemPalette != null) relinkItems(worldItemPalette, nbt); @@ -432,6 +433,10 @@ public class NBTStructure { ((INBTTileEntityTransformable) te).transformTE(world, coordBaseMode); } + if(te instanceof TileEntityWandTandem) { + ((TileEntityWandTandem) te).arm(getStructure(structureName)); + } + return te; } @@ -471,7 +476,7 @@ public class NBTStructure { world.setBlock(rx, ry, rz, block, meta, 2); if(state.nbt != null) { - TileEntity te = buildTileEntity(world, block, worldItemPalette, state.nbt, coordBaseMode); + TileEntity te = buildTileEntity(world, block, worldItemPalette, state.nbt, coordBaseMode, null); world.setTileEntity(rx, ry, rz, te); } } @@ -479,7 +484,23 @@ public class NBTStructure { } } - protected boolean build(World world, JigsawPiece piece, StructureBoundingBox totalBounds, StructureBoundingBox generatingBounds, int coordBaseMode) { + // Used to construct tandems + public void build(World world, JigsawPiece piece, int x, int y, int z, int coordBaseMode, String structureName) { + StructureBoundingBox bb; + switch(coordBaseMode) { + case 1: + case 3: + bb = new StructureBoundingBox(x, y, z, x + piece.structure.size.z - 1, y + piece.structure.size.y - 1, z + piece.structure.size.x - 1); + break; + default: + bb = new StructureBoundingBox(x, y, z, x + piece.structure.size.x - 1, y + piece.structure.size.y - 1, z + piece.structure.size.z - 1); + break; + } + + build(world, piece, bb, bb, coordBaseMode, structureName); + } + + protected boolean build(World world, JigsawPiece piece, StructureBoundingBox totalBounds, StructureBoundingBox generatingBounds, int coordBaseMode, String structureName) { if(!isLoaded) { MainRegistry.logger.info("NBTStructure is invalid"); return false; @@ -528,7 +549,7 @@ public class NBTStructure { world.setBlock(rx, ry, rz, block, meta, 2); if(state.nbt != null) { - TileEntity te = buildTileEntity(world, block, worldItemPalette, state.nbt, coordBaseMode); + TileEntity te = buildTileEntity(world, block, worldItemPalette, state.nbt, coordBaseMode, structureName); world.setTileEntity(rx, ry, rz, te); } } @@ -538,6 +559,16 @@ public class NBTStructure { return true; } + public List getConnectionPool(ForgeDirection dir, String target) { + if(dir == ForgeDirection.DOWN) { + return toTopConnections.get(target); + } else if(dir == ForgeDirection.UP) { + return toBottomConnections.get(target); + } + + return toHorizontalConnections.get(target); + } + // What a fucken mess, why even implement the IntArray NBT if ye aint gonna use it Moe Yang? private ThreeInts parsePos(NBTTagList pos) { NBTBase xb = (NBTBase)pos.tagList.get(0); @@ -605,7 +636,7 @@ public class NBTStructure { return definition.meta; } - private int rotateX(int x, int z, int coordBaseMode) { + public int rotateX(int x, int z, int coordBaseMode) { switch(coordBaseMode) { case 1: return size.z - 1 - z; case 2: return size.x - 1 - x; @@ -614,7 +645,7 @@ public class NBTStructure { } } - private int rotateZ(int x, int z, int coordBaseMode) { + public int rotateZ(int x, int z, int coordBaseMode) { switch(coordBaseMode) { case 1: return x; case 2: return size.z - 1 - z; @@ -673,10 +704,10 @@ public class NBTStructure { } // Each jigsaw block in a structure will instance one of these - private static class JigsawConnection { + public static class JigsawConnection { - private final ThreeInts pos; - private final ForgeDirection dir; + public final ThreeInts pos; + public final ForgeDirection dir; // what pool should we look through to find a connection private final String poolName; @@ -772,14 +803,14 @@ public class NBTStructure { if(!piece.conformToTerrain && !heightUpdated) { int y = MathHelper.clamp_int(getAverageHeight(world, box) + piece.heightOffset, minHeight, maxHeight); - if(!piece.alignToTerrain && parent != null) { + if(!piece.alignToTerrain) { parent.offsetYHeight(y); } else { offsetYHeight(y); } } - return piece.structure.build(world, piece, boundingBox, box, coordBaseMode); + return piece.structure.build(world, piece, boundingBox, box, coordBaseMode, parent.name); } public void offsetYHeight(int y) { @@ -876,12 +907,16 @@ public class NBTStructure { public static class Start extends StructureStart { + public String name; + public Start() {} @SuppressWarnings("unchecked") public Start(World world, Random rand, SpawnCondition spawn, int chunkX, int chunkZ) { super(chunkX, chunkZ); + name = spawn.name; + int x = chunkX << 4; int z = chunkZ << 4; @@ -966,7 +1001,7 @@ public class NBTStructure { } if(GeneralConfig.enableDebugMode) { - MainRegistry.logger.info("[Debug] Spawning NBT structure with " + components.size() + " piece(s) at: " + chunkX * 16 + ", " + chunkZ * 16); + MainRegistry.logger.info("[Debug] Spawning NBT structure " + name + " with " + components.size() + " piece(s) at: " + chunkX * 16 + ", " + chunkZ * 16); String componentList = "[Debug] Components: "; for(Object component : this.components) { componentList += ((Component) component).piece.structure.name + " "; @@ -1005,7 +1040,7 @@ public class NBTStructure { return null; } - List connectionPool = getConnectionPool(nextPiece, fromConnection); + List connectionPool = nextPiece.structure.getConnectionPool(fromConnection.dir, fromConnection.targetName); if(connectionPool == null || connectionPool.isEmpty()) { MainRegistry.logger.warn("[Jigsaw] No valid connections for: " + fromConnection.targetName + " - in piece: " + nextPiece.name); return null; @@ -1026,16 +1061,6 @@ public class NBTStructure { return new Component(spawn, nextPiece, rand, pos.getX() - ox, pos.getY() - oy, pos.getZ() - oz, nextCoordBase).connectedFrom(toConnection); } - private List getConnectionPool(JigsawPiece nextPiece, JigsawConnection fromConnection) { - if(fromConnection.dir == ForgeDirection.DOWN) { - return nextPiece.structure.toTopConnections.get(fromConnection.targetName); - } else if(fromConnection.dir == ForgeDirection.UP) { - return nextPiece.structure.toBottomConnections.get(fromConnection.targetName); - } - - return nextPiece.structure.toHorizontalConnections.get(fromConnection.targetName); - } - private int getDistanceTo(StructureBoundingBox box) { int x = box.getCenterX(); int z = box.getCenterZ(); @@ -1045,12 +1070,19 @@ public class NBTStructure { // post loading, update parent reference for loaded components @Override - public void func_143017_b(NBTTagCompound nbt) { + public void func_143017_b(NBTTagCompound nbt) { // readFromNBT + name = nbt.getString("name"); + for(Object o : components) { ((Component) o).parent = this; } } + @Override + public void func_143022_a(NBTTagCompound nbt) { // writeToNBT + nbt.setString("name", name); + } + public void offsetYHeight(int y) { for(Object o : components) { Component component = (Component) o; diff --git a/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java b/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java index b623ea864..f84d3aad8 100644 --- a/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java +++ b/src/main/java/com/hbm/world/gen/nbt/SpawnCondition.java @@ -64,7 +64,7 @@ public class SpawnCondition { return canSpawn.test(biome); } - protected JigsawPool getPool(String name) { + public JigsawPool getPool(String name) { JigsawPool pool = pools.get(name); return pool != null ? pool.clone() : null; } diff --git a/src/main/resources/assets/hbm/structures/test-tandem-core.nbt b/src/main/resources/assets/hbm/structures/test-tandem-core.nbt new file mode 100644 index 0000000000000000000000000000000000000000..34a426eacbe3e805ca44c1c4b9a2d11970ace64f GIT binary patch literal 453 zcmV;$0XqI4iwFP!000000L_-cPQx$^hMgv5ZMh;OUV;N?9C!${H<-HCgNn47+6)9w z&$`XgKwWHcTBTM>``K~)+er(69L&&sqXvNSPU+4e!_GIp!2!lAhpUx!)%#HF22VNY zjT^`)TpH5BmmZH6Q;ZTYiGa}p#xRT$#HyewJOm^t%VP z8uGg7vGR@U#sp<><;(sReVFM_=*fg6>I@T;gqWBl#OO;)lNP7xRN-WT;VOlgSjC0i zPr$?^2|JR2iFHZnZieC3PE5>?5v-jUb!lakvSmb}pGu<7FfmDp;Zn&Rj>K?&xPy-v z&JTC+5ySc6N{yIUdk_ioGgcaAAJ`9vzEJQ33dIPiqzV84S`*$6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/test-tandem.nbt b/src/main/resources/assets/hbm/structures/test-tandem.nbt new file mode 100644 index 0000000000000000000000000000000000000000..ba23b9b0c5efb36214e50f433ce67a226998b88b GIT binary patch literal 455 zcmV;&0XY62iwFP!000000F9PSPQx$|g~y58{IEqxTmpfFSa1l`8&qyGEe0o!5|;{2 zPtta*B2tedd6D>==XoB-b_q~`9P|&S05G)$wE}W%opu@rn4SWb8)K`_p&Vac3P?LU zP>_F8SPV`%JV(qi;tx|o+HPD9va{AeR^wLfjT0byYmCTY=~TZ%=X+8p1~gbXZQIj; zvO%XNB>`Ep-);@oFzU6cK_8XF;+Q+!zi*mXrwu+-wyk<}xUQ_RJ=QrSx`w-{?`Zpb zeNb(^{?NNY9mY{Rqbh91uG6SRt$Uw^yka%Euqv)FX~dLCh7l1{FCui32%RKCCymfa zBXnehj{LWz=9wgd;c6k7oCOsuf(hkJOekk!LOBz|<;=}9F(I8K!aFe`@5F?>6BF`I z43{(KotTi0|5qcJkaz!&MKB@ne!Vgb=bf04j*Re5OvpPiA@9V5yc5Ia%T&Oh7>nCiCDk>8;dHpV6T{Vu+gFL<>NU5bQt+B2vIcGu$h{%+o zs-%=20CUcW2q`66Ys45Q-F@G=TrN|)a}E)q);gI;t(D$8x3{&CSh>Qc_BkQW#^Ps>B%CwhdJ!guvqk&N*U?9LE9hz(!Ts_Z?NGlroJ2 zD5cPQM?^TK9>*~y1BjV%xm@VI&n;t&sk7EPJF;yXA%s~rRYkr%{WNKwU2x9LPMpm< zQ@OvtM?`SW@%72ahbo@~z;s$w@!n5!*L9s{o^j49_ugr(;k}=RoisxTGyAjB*Xwo8 vy8plP%U|zi=Bhg7l~Tw#^W*uKf4=h{fKn$%i%U(i00000NkvXXu0mjfpe_Kk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_tandem_side.png b/src/main/resources/assets/hbm/textures/blocks/wand_tandem_side.png new file mode 100644 index 0000000000000000000000000000000000000000..7389799c1be8f02dd81728c258d064e3f15c12e7 GIT binary patch literal 549 zcmV+=0^0qFP))y8~m>G-3g5`1vz%)(N zT5)&IZ=I}PCvjHm!OxetJ6+e|?u_GznbCD!6xUjrriq+0stUlDJEz#(p>11o&J4p4 z^uF%{VrGa4UDt&wU%hu=ez3);2~d#Z|jy8SNv%x~d3WM}V)QVLzyad~+e5uV>VS-nIc zVw)$es@#A4nw&GG6qd_n40DbXKmgpGX_{!7CK8!twrv|j6A=Kmx3}YNy8fMae>{)O nRWVVKQpSq&B^)BJ!Lqll}qQw&qt^#o6UxC905ovQER1?!pEbR zm&Y-j)O!5;8Ko4w_momt*A-R8d*3hDT1hDpW5iku!1rr!(e}bH48#}-A$0X+S-Oa- zA|iP2yDIFk)(NoP zZhN>fMsm)SQaCs`=&RIaS+Le(jKNxqbB?pKGXOq)c-0Xas`tLT$T=g{TIPAiTFbhw zJ-Fk$Py6NDcb?EtbIu(ZKvb1!nkc38q-(8vyKfk~-Hu@xdfBYC$mc7s|M6UO!5G8; zC+Cd!p7Zl_L Date: Sun, 10 Aug 2025 20:07:53 +0200 Subject: [PATCH 345/491] drowned in the slop, forgotten in the slurry --- changelog | 9 ++ .../gui/GUIMachineSolderingStation.java | 4 + .../hbm/qmaw/components/QComponentLink.java | 4 +- .../machine/TileEntityMachineShredder.java | 143 ++++++++---------- .../resources/assets/hbm/manual/arsenic.json | 11 ++ .../assets/hbm/manual/arsenic_bronze.json | 11 ++ .../resources/assets/hbm/manual/bismuth.json | 11 ++ .../assets/hbm/manual/bismuth_bronze.json | 11 ++ .../resources/assets/hbm/manual/bscco.json | 11 ++ .../resources/assets/hbm/manual/cadmium.json | 11 ++ .../assets/hbm/manual/ferrouranium.json | 11 ++ .../resources/assets/hbm/manual/silicon.json | 2 +- .../assets/hbm/manual/tantalium.json | 11 ++ 13 files changed, 166 insertions(+), 84 deletions(-) create mode 100644 src/main/resources/assets/hbm/manual/arsenic.json create mode 100644 src/main/resources/assets/hbm/manual/arsenic_bronze.json create mode 100644 src/main/resources/assets/hbm/manual/bismuth.json create mode 100644 src/main/resources/assets/hbm/manual/bismuth_bronze.json create mode 100644 src/main/resources/assets/hbm/manual/bscco.json create mode 100644 src/main/resources/assets/hbm/manual/cadmium.json create mode 100644 src/main/resources/assets/hbm/manual/ferrouranium.json create mode 100644 src/main/resources/assets/hbm/manual/tantalium.json diff --git a/changelog b/changelog index fa5fe2270..01b3f2283 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,15 @@ +## Added +* QMAW (quick manual and wiki) + * It's a simple ingame manual that can be found by pressing F1 on items (like the WIAJ presentations) + * Supports text and links and not much else + * Easy to make entries for, the system scans `assets/manual` for valid `.json` format files + * Should also work in resource packs (no recent tests for that, not going to make promises) + * Still WIP, many new info pages are yet to be made + ## Changed * All the never completed missile parts (20/20 fuselage, 20 warhead, 10 and 15 tec kerosene thrusters) have been removed * The electric arc furnace now scrapes the vanilla furnace recipe list on server start in addition to postinit, making sure recipes added during postinit after NTM loads (like Thermal's ingots) are covered too +* The shredder's sound will now start immediately when processing instead of with random delay ## Fixed * Fixed GT6 compatibility watz pellets crashing due to misconfigured recipes diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineSolderingStation.java b/src/main/java/com/hbm/inventory/gui/GUIMachineSolderingStation.java index 7e718b9f9..e2283b312 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineSolderingStation.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineSolderingStation.java @@ -69,6 +69,10 @@ public class GUIMachineSolderingStation extends GuiInfoContainer { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(solderer.collisionPrevention) { + drawTexturedModalRect(guiLeft + 5, guiTop + 66, 192, 14, 10, 10); + } int p = (int) (solderer.power * 52 / Math.max(solderer.maxPower, 1)); drawTexturedModalRect(guiLeft + 152, guiTop + 70 - p, 176, 52 - p, 16, p); diff --git a/src/main/java/com/hbm/qmaw/components/QComponentLink.java b/src/main/java/com/hbm/qmaw/components/QComponentLink.java index 97402d9fb..c2816835e 100644 --- a/src/main/java/com/hbm/qmaw/components/QComponentLink.java +++ b/src/main/java/com/hbm/qmaw/components/QComponentLink.java @@ -68,8 +68,8 @@ public class QComponentLink extends ManualElement { GL11.glRotated(180, 1, 0, 0); RenderHelper.enableStandardItemLighting(); GL11.glRotated(-180, 1, 0, 0); - itemRender.renderItemAndEffectIntoGUI(this.font, mc.renderEngine, this.icon, x, y); - itemRender.renderItemOverlayIntoGUI(this.font, mc.renderEngine, this.icon, x, y, null); + itemRender.renderItemAndEffectIntoGUI(this.font, mc.renderEngine, this.icon, x, y - 1); + itemRender.renderItemOverlayIntoGUI(this.font, mc.renderEngine, this.icon, x, y - 1, null); RenderHelper.disableStandardItemLighting(); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java index 5fe3ae5ca..b3589fd45 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java @@ -32,7 +32,7 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I public static final long maxPower = 10000; public static final int processingSpeed = 60; - private static final int[] slots_io = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}; + private static final int[] slots_io = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }; private String customName; @@ -52,21 +52,19 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I @Override public ItemStack getStackInSlotOnClosing(int i) { - if(slots[i] != null) - { + if(slots[i] != null) { ItemStack itemStack = slots[i]; slots[i] = null; return itemStack; } else { - return null; + return null; } } @Override public void setInventorySlotContents(int i, ItemStack itemStack) { slots[i] = itemStack; - if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) - { + if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) { itemStack.stackSize = getInventoryStackLimit(); } } @@ -93,42 +91,44 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I @Override public boolean isUseableByPlayer(EntityPlayer player) { - if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) - { + if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) { return false; - }else{ - return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64; + } else { + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 64; } } - //You scrubs aren't needed for anything (right now) + // You scrubs aren't needed for anything (right now) @Override - public void openInventory() {} + public void openInventory() { + } + @Override - public void closeInventory() {} + public void closeInventory() { + } @Override public boolean isItemValidForSlot(int i, ItemStack stack) { - if(i < 9) return ShredderRecipes.getShredderResult(stack) != null && !(stack.getItem() instanceof ItemBlades); - if(i == 29) return stack.getItem() instanceof IBatteryItem; - if(i == 27 || i == 28) return stack.getItem() instanceof ItemBlades; + if(i < 9) + return ShredderRecipes.getShredderResult(stack) != null && !(stack.getItem() instanceof ItemBlades); + if(i == 29) + return stack.getItem() instanceof IBatteryItem; + if(i == 27 || i == 28) + return stack.getItem() instanceof ItemBlades; return false; } @Override public ItemStack decrStackSize(int i, int j) { - if(slots[i] != null) - { - if(slots[i].stackSize <= j) - { + if(slots[i] != null) { + if(slots[i].stackSize <= j) { ItemStack itemStack = slots[i]; slots[i] = null; return itemStack; } ItemStack itemStack1 = slots[i].splitStack(j); - if (slots[i].stackSize == 0) - { + if(slots[i].stackSize == 0) { slots[i] = null; } @@ -146,12 +146,10 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I this.power = nbt.getLong("powerTime"); slots = new ItemStack[getSizeInventory()]; - for(int i = 0; i < list.tagCount(); i++) - { + for(int i = 0; i < list.tagCount(); i++) { NBTTagCompound nbt1 = list.getCompoundTagAt(i); byte b0 = nbt1.getByte("slot"); - if(b0 >= 0 && b0 < slots.length) - { + if(b0 >= 0 && b0 < slots.length) { slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } @@ -165,19 +163,17 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I nbt.setLong("powerTime", power); NBTTagList list = new NBTTagList(); - for(int i = 0; i < slots.length; i++) - { - if(slots[i] != null) - { + for(int i = 0; i < slots.length; i++) { + if(slots[i] != null) { NBTTagCompound nbt1 = new NBTTagCompound(); - nbt1.setByte("slot", (byte)i); + nbt1.setByte("slot", (byte) i); slots[i].writeToNBT(nbt1); list.appendTag(nbt1); } } nbt.setTag("items", list); - - if (customName != null) { + + if(customName != null) { nbt.setString("name", customName); } } @@ -210,8 +206,11 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I @Override public boolean canExtractItem(int i, ItemStack itemStack, int j) { - if(i >= 9 && i <= 26) return true; - if(i >= 27 && i <= 28) if(itemStack.getItemDamage() == itemStack.getMaxDamage() && itemStack.getMaxDamage() > 0) return true; + if(i >= 9 && i <= 26) + return true; + if(i >= 27 && i <= 28) + if(itemStack.getItemDamage() == itemStack.getMaxDamage() && itemStack.getMaxDamage() > 0) + return true; return false; } @@ -235,15 +234,15 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I if(!worldObj.isRemote) { this.updateConnections(); + + if(this.progress == 0) this.soundCycle = 0; - if(hasPower() && canProcess()) - { + if(hasPower() && canProcess()) { progress++; power -= 5; - if(this.progress == TileEntityMachineShredder.processingSpeed) - { + if(this.progress == TileEntityMachineShredder.processingSpeed) { for(int i = 27; i <= 28; i++) if(slots[i].getMaxDamage() > 0) this.slots[i].setItemDamage(this.slots[i].getItemDamage() + 1); @@ -253,34 +252,31 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I flag1 = true; } if(soundCycle == 0) - this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "minecart.base", getVolume(1.0F), 0.75F); + this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "minecart.base", getVolume(1.0F), 0.75F); soundCycle++; if(soundCycle >= 50) soundCycle = 0; - }else{ + } else { progress = 0; } boolean trigger = true; - if(hasPower() && canProcess() && this.progress == 0) - { + if(hasPower() && canProcess() && this.progress == 0) { trigger = false; } - if(trigger) - { - flag1 = true; - } + if(trigger) { + flag1 = true; + } power = Library.chargeTEFromItems(slots, 29, power, maxPower); networkPackNT(50); } - if(flag1) - { + if(flag1) { this.markDirty(); } } @@ -305,20 +301,15 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I public void processItem() { - for(int inpSlot = 0; inpSlot < 9; inpSlot++) - { - if(slots[inpSlot] != null && hasSpace(slots[inpSlot])) - { + for(int inpSlot = 0; inpSlot < 9; inpSlot++) { + if(slots[inpSlot] != null && hasSpace(slots[inpSlot])) { ItemStack inp = slots[inpSlot]; ItemStack outp = ShredderRecipes.getShredderResult(inp); boolean flag = false; - for (int outSlot = 9; outSlot < 27; outSlot++) - { - if (slots[outSlot] != null && slots[outSlot].getItem() == outp.getItem() && - slots[outSlot].getItemDamage() == outp.getItemDamage() && - slots[outSlot].stackSize + outp.stackSize <= outp.getMaxStackSize()) { + for(int outSlot = 9; outSlot < 27; outSlot++) { + if(slots[outSlot] != null && slots[outSlot].getItem() == outp.getItem() && slots[outSlot].getItemDamage() == outp.getItemDamage() && slots[outSlot].stackSize + outp.stackSize <= outp.getMaxStackSize()) { slots[outSlot].stackSize += outp.stackSize; slots[inpSlot].stackSize -= 1; @@ -328,9 +319,8 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I } if(!flag) - for (int outSlot = 9; outSlot < 27; outSlot++) - { - if (slots[outSlot] == null) { + for(int outSlot = 9; outSlot < 27; outSlot++) { + if(slots[outSlot] == null) { slots[outSlot] = outp.copy(); slots[inpSlot].stackSize -= 1; break; @@ -344,14 +334,10 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I } public boolean canProcess() { - if(slots[27] != null && slots[28] != null && - this.getGearLeft() > 0 && this.getGearLeft() < 3 && - this.getGearRight() > 0 && this.getGearRight() < 3) { + if(slots[27] != null && slots[28] != null && this.getGearLeft() > 0 && this.getGearLeft() < 3 && this.getGearRight() > 0 && this.getGearRight() < 3) { - for(int i = 0; i < 9; i++) - { - if(slots[i] != null && slots[i].stackSize > 0 && hasSpace(slots[i])) - { + for(int i = 0; i < 9; i++) { + if(slots[i] != null && slots[i].stackSize > 0 && hasSpace(slots[i])) { return true; } } @@ -364,14 +350,13 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I ItemStack result = ShredderRecipes.getShredderResult(stack); - if (result != null) - for (int i = 9; i < 27; i++) { - if (slots[i] == null) { + if(result != null) + for(int i = 9; i < 27; i++) { + if(slots[i] == null) { return true; } - if (slots[i] != null && slots[i].getItem().equals(result.getItem()) - && slots[i].stackSize + result.stackSize <= result.getMaxStackSize()) { + if(slots[i] != null && slots[i].getItem().equals(result.getItem()) && slots[i].stackSize + result.stackSize <= result.getMaxStackSize()) { return true; } } @@ -401,13 +386,11 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I public int getGearLeft() { - if(slots[27] != null && slots[27].getItem() instanceof ItemBlades) - { + if(slots[27] != null && slots[27].getItem() instanceof ItemBlades) { if(slots[27].getMaxDamage() == 0) return 1; - if(slots[27].getItemDamage() < slots[27].getItem().getMaxDamage()/2) - { + if(slots[27].getItemDamage() < slots[27].getItem().getMaxDamage() / 2) { return 1; } else if(slots[27].getItemDamage() != slots[27].getItem().getMaxDamage()) { return 2; @@ -421,13 +404,11 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I public int getGearRight() { - if(slots[28] != null && slots[28].getItem() instanceof ItemBlades) - { + if(slots[28] != null && slots[28].getItem() instanceof ItemBlades) { if(slots[28].getMaxDamage() == 0) return 1; - if(slots[28].getItemDamage() < slots[28].getItem().getMaxDamage()/2) - { + if(slots[28].getItemDamage() < slots[28].getItem().getMaxDamage() / 2) { return 1; } else if(slots[28].getItemDamage() != slots[28].getItem().getMaxDamage()) { return 2; diff --git a/src/main/resources/assets/hbm/manual/arsenic.json b/src/main/resources/assets/hbm/manual/arsenic.json new file mode 100644 index 000000000..b6bf7df40 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/arsenic.json @@ -0,0 +1,11 @@ +{ + "name": "Arsenic", + "icon": ["hbm:item.ingot_arsenic", 1, 0], + "trigger": [["hbm:item.ingot_arsenic"], ["hbm:item.nugget_arsenic"]], + "title": { + "en_US": "Arsenic" + }, + "content": { + "en_US": "Obtainable by treating oily scraps with [[high-performance solvent|High-Performance Solvent]] in an [[acidizer|Ore Acidizer]]. Oily scraps can be created by [[shredding|Shredder]] polluted blocks created by the [[fracking tower|Hydraulic Fracking Tower]]. Primarily used as [[arsenic bronze|Arsenic Bronze]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/arsenic_bronze.json b/src/main/resources/assets/hbm/manual/arsenic_bronze.json new file mode 100644 index 000000000..450f8dd21 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/arsenic_bronze.json @@ -0,0 +1,11 @@ +{ + "name": "Arsenic Bronze", + "icon": ["hbm:item.ingot_arsenic_bronze", 1, 0], + "trigger": [["hbm:item.ingot_arsenic_bronze"]], + "title": { + "en_US": "Arsenic Bronze" + }, + "content": { + "en_US": "Derivative of [[arsenic|Arsenic]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]] due to requiring [[high-performance solvent|High-Performance Solvent]].

Fully interchangeable with [[bismuth bronze|Bismuth Bronze]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/bismuth.json b/src/main/resources/assets/hbm/manual/bismuth.json new file mode 100644 index 000000000..369e6bf60 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/bismuth.json @@ -0,0 +1,11 @@ +{ + "name": "Bismuth", + "icon": ["hbm:item.ingot_bismuth", 1, 0], + "trigger": [["hbm:item.ingot_bismuth"], ["hbm:item.billet_bismuth"], ["hbm:item.nugget_bismuth"], ["hbm:item.powder_bismuth"]], + "title": { + "en_US": "Bismuth" + }, + "content": { + "en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/bismuth_bronze.json b/src/main/resources/assets/hbm/manual/bismuth_bronze.json new file mode 100644 index 000000000..fcb22393f --- /dev/null +++ b/src/main/resources/assets/hbm/manual/bismuth_bronze.json @@ -0,0 +1,11 @@ +{ + "name": "Bismuth Bronze", + "icon": ["hbm:item.ingot_bismuth_bronze", 1, 0], + "trigger": [["hbm:item.ingot_bismuth_bronze"]], + "title": { + "en_US": "Bismuth Bronze" + }, + "content": { + "en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].

Fully interchangeable with [[arsenic bronze|Arsenic Bronze]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/bscco.json b/src/main/resources/assets/hbm/manual/bscco.json new file mode 100644 index 000000000..4b25d11c0 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/bscco.json @@ -0,0 +1,11 @@ +{ + "name": "BSCCO", + "icon": ["hbm:item.ingot_bscco", 1, 0], + "trigger": [["hbm:item.ingot_bscco"], ["hbm:item.wire_dense", 1, 48]], + "title": { + "en_US": "BSCCO" + }, + "content": { + "en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/cadmium.json b/src/main/resources/assets/hbm/manual/cadmium.json new file mode 100644 index 000000000..fb9281a02 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/cadmium.json @@ -0,0 +1,11 @@ +{ + "name": "Cadmium", + "icon": ["hbm:item.ingot_cadmium", 1, 0], + "trigger": [["hbm:item.ingot_cadmium"], ["hbm:item.powder_cadmium"]], + "title": { + "en_US": "Cadmium" + }, + "content": { + "en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute." + } +} diff --git a/src/main/resources/assets/hbm/manual/ferrouranium.json b/src/main/resources/assets/hbm/manual/ferrouranium.json new file mode 100644 index 000000000..86629c988 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/ferrouranium.json @@ -0,0 +1,11 @@ +{ + "name": "Ferrouranium", + "icon": ["hbm:item.ingot_ferrouranium", 1, 0], + "trigger": [["hbm:item.ingot_ferrouranium"]], + "title": { + "en_US": "Ferrouranium" + }, + "content": { + "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition." + } +} diff --git a/src/main/resources/assets/hbm/manual/silicon.json b/src/main/resources/assets/hbm/manual/silicon.json index 97cec4e51..4a6f8defd 100644 --- a/src/main/resources/assets/hbm/manual/silicon.json +++ b/src/main/resources/assets/hbm/manual/silicon.json @@ -6,6 +6,6 @@ "en_US": "Silicon" }, "content": { - "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polmyer]], requiring [[oil|Crude Oil]] processing." + "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing." } } diff --git a/src/main/resources/assets/hbm/manual/tantalium.json b/src/main/resources/assets/hbm/manual/tantalium.json new file mode 100644 index 000000000..5368737b3 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/tantalium.json @@ -0,0 +1,11 @@ +{ + "name": "Tantalium", + "icon": ["hbm:item.ingot_tantalium", 1, 0], + "trigger": [["hbm:item.ingot_tantalium"], ["hbm:item.powder_tantalium"], ["hbm:item.nugget_tantalium"]], + "title": { + "en_US": "Tantalium" + }, + "content": { + "en_US": "Tantalium ('Tantalum') can be ectracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs." + } +} From 219db7acdfe6d874b9ec7535bbbe216265f5d76c Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 10 Aug 2025 22:02:23 +0200 Subject: [PATCH 346/491] blup --- changelog | 9 ++++++++- gradle.properties | 2 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/changelog b/changelog index 01b3f2283..95f85136d 100644 --- a/changelog +++ b/changelog @@ -5,12 +5,19 @@ * Easy to make entries for, the system scans `assets/manual` for valid `.json` format files * Should also work in resource packs (no recent tests for that, not going to make promises) * Still WIP, many new info pages are yet to be made +* `/ntmlocate` + * Finds structures + * Only works on the new component structures, the old crusty ones like the factors and powerplant aren't supported ## Changed +* Updated chinese and russian localization * All the never completed missile parts (20/20 fuselage, 20 warhead, 10 and 15 tec kerosene thrusters) have been removed * The electric arc furnace now scrapes the vanilla furnace recipe list on server start in addition to postinit, making sure recipes added during postinit after NTM loads (like Thermal's ingots) are covered too * The shredder's sound will now start immediately when processing instead of with random delay +* The assembly machine can now make nuclear waste into barrels +* Capacitors now have OpenComputers integration ## Fixed * Fixed GT6 compatibility watz pellets crashing due to misconfigured recipes -* Removed failed attempt at fixing the gun desync dupe which made things worse \ No newline at end of file +* Removed failed attempt at fixing the gun desync dupe which made things worse +* Fixed a potential crash regarding structure blocks \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index e40665d77..fcfc33a9b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5412H1 +mod_build_number=5418 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 543f77ad9..34f6c299c 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5412H1)"; + public static final String VERSION = "1.0.27 BETA (5418)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version From 0ec1e5735a5cfd4940e76d72e44bc69c7f54de30 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Sun, 10 Aug 2025 18:32:07 -0600 Subject: [PATCH 347/491] rebar --- src/main/resources/assets/hbm/lang/ru_RU.lang | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 6072fa3d9..cf1ef26da 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -864,6 +864,7 @@ container.reactorBreeding=Реактор-размножитель container.reactorControl=Блок удалённого доступа к реактору container.reactorLarge=Большой ядерный реактор container.reactorResearch=Исследовательский реактор +container.rebar=Установщик арматуры container.reix=Мэйнфрейм Rei-X container.rttyController=Контроллер редстоун-радио container.rtg=РИТЭГ-генератор @@ -1979,6 +1980,7 @@ item.ammo_standard.bmg50_ap.name=.50 BMG патрон (Бронебойный) item.ammo_standard.bmg50_he.name=.50 BMG патрон (Разрывной) item.ammo_standard.bmg50_du.name=.50 BMG патрон (Обеднённый уран) item.ammo_standard.bmg50_fmj.name=.50 BMG патрон (Цельнометаллическая оболочка) +item.ammo_standard.bmg50_sm.name=.50 BMG патрон (Звёздный Металл) item.ammo_standard.bmg50_jhp.name=.50 BMG патрон (Экспансивный+) item.ammo_standard.bmg50_sp.name=.50 BMG патрон (Экспансивный) item.ammo_standard.capacitor.name=Конденсатор (Стандартный) @@ -3178,7 +3180,7 @@ item.gun_maresleg_short.name=Нога кобылы item.gun_mas36.name=Южная Звезда item.gun_minigun.name=Персональный миниган item.gun_minigun_dual.name=Двойные миниганы -item.gun_minigun_lacunae.name=Лакунай +item.gun_minigun_lacunae.name=Лакунэ item.gun_mirv.name=M42 Ядерная катапульта "Экспериментальный МИРВ" item.gun_mirv_ammo.name=Восьмиричный МИРВ (LEGACY) item.gun_missile_launcher.name=Ракетница @@ -4355,6 +4357,7 @@ item.rbmk_tool.set=РБМК соединён! item.reacher.name=Вольфрамовые хваталки item.reactor_core.name=Активная зона реактора-размножителя item.reactor_sensor.name=Дистанционный датчик реактора +item.rebar_placer.name=Установщик арматуры item.record.glass.desc=? ? ? item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core item.record.ss.desc=Valve - Sector Sweep @@ -5440,6 +5443,7 @@ tile.concrete_colored_ext.pink.name=Бетон "Выбор строителя" - tile.concrete_colored_ext.purple.name=Бетон "Выбор строителя" - Таинственный фиолетовый tile.concrete_colored_ext.sand.name=Бетон "Выбор строителя" - Пустыня tile.concrete_pillar.name=Арматурный железобетонный столб +tile.concrete_rebar.name=Железобетон tile.concrete_slab.asphalt.name=Плита из асфальта tile.concrete_slab.concrete.name=Плита из бетонной плитки tile.concrete_slab.concrete_asbestos.name=Плита из асбестобетона @@ -6201,6 +6205,7 @@ tile.reactor_ejector.name=Выталкиватель отходов реакто tile.reactor_element.name=Реакторная камера tile.reactor_hatch.name=Люк доступа реактора tile.reactor_inserter.name=Автоматический заправщик реактора +tile.rebar.name=Арматура tile.red_barrel.name=Взрывная бочка tile.red_cable.name=Провод из красной меди tile.red_cable_classic.name=Провод из красной меди (Старый) From 5444f57cade5b04a92dea47fc81cee5a8bfc2b68 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 11 Aug 2025 11:14:06 +0200 Subject: [PATCH 348/491] the glunch --- changelog | 23 +------ src/main/java/com/hbm/calc/EasyLocation.java | 14 ----- src/main/java/com/hbm/calc/Location.java | 33 ---------- src/main/java/com/hbm/qmaw/GuiQMAW.java | 58 +++++++++++++++++- src/main/java/com/hbm/qmaw/ManualElement.java | 2 +- src/main/java/com/hbm/qmaw/QMAWLoader.java | 7 ++- .../hbm/qmaw/components/QComponentLink.java | 7 ++- .../hbm/qmaw/components/QComponentText.java | 3 +- .../network/TileEntityConverterHeRf.java | 7 ++- .../assets/hbm/textures/gui/gui_wiki.png | Bin 1017 -> 1258 bytes 10 files changed, 74 insertions(+), 80 deletions(-) delete mode 100644 src/main/java/com/hbm/calc/EasyLocation.java delete mode 100644 src/main/java/com/hbm/calc/Location.java diff --git a/changelog b/changelog index 95f85136d..9e379b53c 100644 --- a/changelog +++ b/changelog @@ -1,23 +1,2 @@ -## Added -* QMAW (quick manual and wiki) - * It's a simple ingame manual that can be found by pressing F1 on items (like the WIAJ presentations) - * Supports text and links and not much else - * Easy to make entries for, the system scans `assets/manual` for valid `.json` format files - * Should also work in resource packs (no recent tests for that, not going to make promises) - * Still WIP, many new info pages are yet to be made -* `/ntmlocate` - * Finds structures - * Only works on the new component structures, the old crusty ones like the factors and powerplant aren't supported - ## Changed -* Updated chinese and russian localization -* All the never completed missile parts (20/20 fuselage, 20 warhead, 10 and 15 tec kerosene thrusters) have been removed -* The electric arc furnace now scrapes the vanilla furnace recipe list on server start in addition to postinit, making sure recipes added during postinit after NTM loads (like Thermal's ingots) are covered too -* The shredder's sound will now start immediately when processing instead of with random delay -* The assembly machine can now make nuclear waste into barrels -* Capacitors now have OpenComputers integration - -## Fixed -* Fixed GT6 compatibility watz pellets crashing due to misconfigured recipes -* Removed failed attempt at fixing the gun desync dupe which made things worse -* Fixed a potential crash regarding structure blocks \ No newline at end of file +* QMAW now has buttons for returning to previously viewed pages \ No newline at end of file diff --git a/src/main/java/com/hbm/calc/EasyLocation.java b/src/main/java/com/hbm/calc/EasyLocation.java deleted file mode 100644 index 8e4755c1b..000000000 --- a/src/main/java/com/hbm/calc/EasyLocation.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.hbm.calc; - -public class EasyLocation { - - public double posX; - public double posY; - public double posZ; - - public EasyLocation(double x, double y, double z) { - posX = x; - posY = y; - posZ = z; - } -} diff --git a/src/main/java/com/hbm/calc/Location.java b/src/main/java/com/hbm/calc/Location.java deleted file mode 100644 index 6c1d7235d..000000000 --- a/src/main/java/com/hbm/calc/Location.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.hbm.calc; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -public class Location { - - public int x; - public int y; - public int z; - public World world; - - public Location(World world, int x, int y, int z) { - this.world = world; - this.x = x; - this.y = y; - this.z = z; - } - - public Location add(int xa, int ya, int za) { - return new Location(world, x + xa, y + ya, z + za); - } - - public Location add(ForgeDirection dir) { - return add(dir.offsetX, dir.offsetY, dir.offsetZ); - } - - public TileEntity getTileEntity() { - return world.getTileEntity(x, y, z); - } - -} diff --git a/src/main/java/com/hbm/qmaw/GuiQMAW.java b/src/main/java/com/hbm/qmaw/GuiQMAW.java index b4d60c42b..c59834957 100644 --- a/src/main/java/com/hbm/qmaw/GuiQMAW.java +++ b/src/main/java/com/hbm/qmaw/GuiQMAW.java @@ -3,13 +3,16 @@ package com.hbm.qmaw; import java.util.ArrayList; import java.util.List; +import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; import com.hbm.qmaw.components.*; +import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.resources.LanguageManager; @@ -22,8 +25,12 @@ public class GuiQMAW extends GuiScreen { protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_wiki.png"); public String title; + public String qmawID; public ItemStack icon; public List> lines = new ArrayList(); + /** History for returning via button */ + public List back = new ArrayList(); + public List forward = new ArrayList(); protected int xSize = 340; protected int ySize = 224; @@ -38,6 +45,7 @@ public class GuiQMAW extends GuiScreen { public static final String EN_US = "en_US"; public GuiQMAW(QuickManualAndWiki qmaw) { + qmawID = qmaw.name; parseQMAW(qmaw); } @@ -163,6 +171,43 @@ public class GuiQMAW extends GuiScreen { this.lastClickX = x; this.lastClickY = y; } + + if(guiLeft + 3 <= x && guiLeft + 3 + 18 > x && guiTop + 3 < y && guiTop + 3 + 18 >= y) back(); + if(guiLeft + 21 <= x && guiLeft + 21 + 18 > x && guiTop + 3 < y && guiTop + 3 + 18 >= y) forward(); + } + + public void back() { + if(this.back.isEmpty()) return; + + String prev = back.get(back.size() - 1); + + QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(prev); + if(qmaw != null) { + Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + GuiQMAW screen = new GuiQMAW(qmaw); + screen.back.addAll(back); + screen.back.remove(screen.back.size() - 1); + screen.forward.addAll(forward); + screen.forward.add(qmawID); + FMLCommonHandler.instance().showGuiScreen(screen); + } + } + + public void forward() { + if(this.forward.isEmpty()) return; + + String next = forward.get(forward.size() - 1); + + QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(next); + if(qmaw != null) { + Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + GuiQMAW screen = new GuiQMAW(qmaw); + screen.back.addAll(back); + screen.back.add(qmawID); + screen.forward.addAll(forward); + screen.forward.remove(screen.forward.size() - 1); + FMLCommonHandler.instance().showGuiScreen(screen); + } } public int getSliderPosition() { @@ -213,7 +258,7 @@ public class GuiQMAW extends GuiScreen { private void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - int x = 7; + int x = 43; int y = 4; if(this.icon != null) { @@ -242,7 +287,11 @@ public class GuiQMAW extends GuiScreen { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, 170, ySize); - drawTexturedModalRect(guiLeft + 170, guiTop, 22, 0, 170, ySize); + drawTexturedModalRect(guiLeft + 170, guiTop, 52, 0, 30, ySize); + drawTexturedModalRect(guiLeft + 200, guiTop, 52, 0, 140, ySize); + + if(!back.isEmpty()) drawTexturedModalRect(guiLeft + 3, guiTop + 3, 204, 0, 18, 18); + if(!forward.isEmpty()) drawTexturedModalRect(guiLeft + 21, guiTop + 3, 222, 0, 18, 18); // scroll bar drawTexturedModalRect(guiLeft + xSize - 15, guiTop + getSliderPosition(), 192, 0, 12, 16); @@ -273,7 +322,7 @@ public class GuiQMAW extends GuiScreen { boolean mouseOver = (elementX <= mouseX && elementX + element.getWidth() > mouseX && elementY < mouseY && elementY + element.getHeight() >= mouseY); element.render(mouseOver, elementX, elementY, mouseX, mouseY); if(elementX <= lastClickX && elementX + element.getWidth() > lastClickX && elementY < lastClickY && elementY + element.getHeight() >= lastClickY) - element.onClick(); + element.onClick(this); inset += element.getWidth(); } @@ -283,6 +332,9 @@ public class GuiQMAW extends GuiScreen { @Override protected void keyTyped(char typedChar, int keyCode) { + + if(keyCode == Keyboard.KEY_LEFT) back(); + if(keyCode == Keyboard.KEY_RIGHT) forward(); if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) { this.mc.displayGuiScreen((GuiScreen) null); diff --git a/src/main/java/com/hbm/qmaw/ManualElement.java b/src/main/java/com/hbm/qmaw/ManualElement.java index 7d5c640d5..92ab74a13 100644 --- a/src/main/java/com/hbm/qmaw/ManualElement.java +++ b/src/main/java/com/hbm/qmaw/ManualElement.java @@ -5,5 +5,5 @@ public abstract class ManualElement { public abstract int getWidth(); public abstract int getHeight(); public abstract void render(boolean isMouseOver, int x, int y, int mouseX, int mouseY); - public abstract void onClick(); + public abstract void onClick(GuiQMAW gui); } diff --git a/src/main/java/com/hbm/qmaw/QMAWLoader.java b/src/main/java/com/hbm/qmaw/QMAWLoader.java index f085aeba4..3bf265372 100644 --- a/src/main/java/com/hbm/qmaw/QMAWLoader.java +++ b/src/main/java/com/hbm/qmaw/QMAWLoader.java @@ -60,6 +60,7 @@ public class QMAWLoader implements IResourceManagerReloadListener { //no fucking null check, if this fails then the entire game will sink along with the ship String path = QMAWLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath(); // exclude .class in the case of a dev env + MainRegistry.logger.info("[QMAW] Current running file: " + path); if(!path.endsWith(".class")) registerModFileURL(new File(path)); // i am going to shit myself qmaw.clear(); @@ -76,7 +77,10 @@ public class QMAWLoader implements IResourceManagerReloadListener { * */ public static void agonyEngine() { - for(File modFile : registeredModFiles) dissectZip(modFile); + for(File modFile : registeredModFiles) { + logJarAttempt(modFile.getName()); + dissectZip(modFile); + } File devEnvManualFolder = new File(Minecraft.getMinecraft().mcDataDir.getAbsolutePath().replace("/eclipse/.".replace('/', File.separatorChar), "") + "/src/main/resources/assets/hbm/manual".replace('/', File.separatorChar)); if(devEnvManualFolder.exists() && devEnvManualFolder.isDirectory()) { @@ -102,6 +106,7 @@ public class QMAWLoader implements IResourceManagerReloadListener { } } + public static void logJarAttempt(String name) { MainRegistry.logger.info("[QMAW] Dissecting jar " + name); } public static void logPackAttempt(String name) { MainRegistry.logger.info("[QMAW] Dissecting resource " + name); } public static void logFoundManual(String name) { MainRegistry.logger.info("[QMAW] Found manual " + name); } diff --git a/src/main/java/com/hbm/qmaw/components/QComponentLink.java b/src/main/java/com/hbm/qmaw/components/QComponentLink.java index c2816835e..acb4a4c9b 100644 --- a/src/main/java/com/hbm/qmaw/components/QComponentLink.java +++ b/src/main/java/com/hbm/qmaw/components/QComponentLink.java @@ -81,11 +81,14 @@ public class QComponentLink extends ManualElement { font.drawString(text, x, y, isMouseOver ? hoverColor : color); } - @Override public void onClick() { + @Override public void onClick(GuiQMAW gui) { QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(link); if(qmaw != null) { Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); - FMLCommonHandler.instance().showGuiScreen(new GuiQMAW(qmaw)); + GuiQMAW screen = new GuiQMAW(qmaw); + screen.back.addAll(gui.back); + screen.back.add(gui.qmawID); + FMLCommonHandler.instance().showGuiScreen(screen); } } } diff --git a/src/main/java/com/hbm/qmaw/components/QComponentText.java b/src/main/java/com/hbm/qmaw/components/QComponentText.java index 30fd266b5..efcb0ffd8 100644 --- a/src/main/java/com/hbm/qmaw/components/QComponentText.java +++ b/src/main/java/com/hbm/qmaw/components/QComponentText.java @@ -1,5 +1,6 @@ package com.hbm.qmaw.components; +import com.hbm.qmaw.GuiQMAW; import com.hbm.qmaw.ManualElement; import net.minecraft.client.Minecraft; @@ -40,5 +41,5 @@ public class QComponentText extends ManualElement { font.drawString(text, x, y, color); } - @Override public void onClick() { } + @Override public void onClick(GuiQMAW gui) { } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityConverterHeRf.java b/src/main/java/com/hbm/tileentity/network/TileEntityConverterHeRf.java index 3d7072304..f6dc1fdff 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityConverterHeRf.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityConverterHeRf.java @@ -2,9 +2,10 @@ package com.hbm.tileentity.network; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; -import com.hbm.calc.Location; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.Compat; +import com.hbm.util.fauxpointtwelve.BlockPos; import api.hbm.energymk2.IEnergyReceiverMK2; import cofh.api.energy.EnergyStorage; @@ -41,8 +42,8 @@ public class TileEntityConverterHeRf extends TileEntityLoadedBase implements IEn for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); - Location loc = new Location(worldObj, xCoord, yCoord, zCoord).add(dir); - TileEntity entity = loc.getTileEntity(); + BlockPos loc = new BlockPos(xCoord, yCoord, zCoord).offset(dir); + TileEntity entity = Compat.getTileStandard(worldObj, loc.getX(), loc.getY(), loc.getZ()); if (entity != null && entity instanceof IEnergyReceiver) { IEnergyReceiver receiver = (IEnergyReceiver) entity; diff --git a/src/main/resources/assets/hbm/textures/gui/gui_wiki.png b/src/main/resources/assets/hbm/textures/gui/gui_wiki.png index 48c92d1c46ca12cf5d22954dbccfe040f2e43d86..9f8c2d655a66fcc3422ab635e9e2e608eefec5b7 100644 GIT binary patch literal 1258 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIGxWLQfaR zkcv5P@A&53c4KG=TzVmP6W6Ah%rD$-elT+l6mffZkU1kcW$NWE+Tzyxm78zBz4zwpb&2Pt9zdc$)|w|VoiZBOXg_)Tw*^zFm?mS-iBC(h_GG^_vrwYJf=Y5B6uUr%p;zmWcI zvD@S641ad~ue{iB*(CSd@4rfqIT)@R`CeXK|9{2ulil)+2XuF(H0c-G?Z0OBFQUeU zBQnXf{%o!#Q^VQHY=-M|{`7C(`DEgOgA6r4fBk&)`RDfyycK6xW;2{u|G&}D!sMLc zw4MX28Gn5G`dLZZvW;WIvi@Bs%1`7o7o0u$zhbu10o{r^)B8IaEx*-z=e$JmYh literal 1017 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIE+9%o{vi z978JRyuIt#H!DG+A#vG5519t(oevvi8hT%@TAnH1+v__!$Tv-*a(?s@@GZS24NI{oz1w>sh4J%ti=`wUmy+?G4z`Op2^|L5MmSH6I`XFGd( zP4Nfw%O?7K@HuDudFkt=vfFa4tN4KV6EFBNrH&!&LHw8X)q3kd3O!x@ KT-G@yGywq1n>$(n From b374f4088be4845b1cf1106e2123f1c226f8700e Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 11 Aug 2025 11:52:48 +0200 Subject: [PATCH 349/491] agony --- src/main/java/com/hbm/main/MainRegistry.java | 3 +++ src/main/java/com/hbm/qmaw/QMAWLoader.java | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index e5c2ca63d..20fc7b204 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -40,6 +40,7 @@ import com.hbm.lib.HbmWorld; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.potion.HbmPotion; +import com.hbm.qmaw.QMAWLoader; import com.hbm.saveddata.satellites.Satellite; import com.hbm.tileentity.TileMappings; import com.hbm.tileentity.bomb.TileEntityLaunchPadBase; @@ -253,6 +254,8 @@ public class MainRegistry { @EventHandler public void PreLoad(FMLPreInitializationEvent PreEvent) { CrashHelper.init(); + + QMAWLoader.registerModFileURL(FMLCommonHandler.instance().findContainerFor(RefStrings.MODID).getSource()); startupTime = System.currentTimeMillis(); configDir = PreEvent.getModConfigurationDirectory(); diff --git a/src/main/java/com/hbm/qmaw/QMAWLoader.java b/src/main/java/com/hbm/qmaw/QMAWLoader.java index 3bf265372..ee1596b3f 100644 --- a/src/main/java/com/hbm/qmaw/QMAWLoader.java +++ b/src/main/java/com/hbm/qmaw/QMAWLoader.java @@ -48,7 +48,7 @@ public class QMAWLoader implements IResourceManagerReloadListener { MainRegistry.logger.info("[QMAW] Loaded " + qmaw.size() + " manual entries! (" + (System.currentTimeMillis() - timestamp) + "ms)"); } - /** For the like 2 people who might consider making an NTM addon and want to include manual pages */ + /** For the like 2 people who might consider making an NTM addon and want to include manual pages. Requires the mod's actual JAR file as the parameter. */ public static void registerModFileURL(File file) { registeredModFiles.add(file); } @@ -56,12 +56,14 @@ public class QMAWLoader implements IResourceManagerReloadListener { /** Searches the asset folder for QMAW format JSON files and adds entries based on that */ public static void init() { - //the mod's file, assuming the mod is a file (not the case in a dev env, fuck!) + /*//the mod's file, assuming the mod is a file (not the case in a dev env, fuck!) //no fucking null check, if this fails then the entire game will sink along with the ship String path = QMAWLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath(); // exclude .class in the case of a dev env MainRegistry.logger.info("[QMAW] Current running file: " + path); - if(!path.endsWith(".class")) registerModFileURL(new File(path)); // i am going to shit myself + if(!path.endsWith(".class")) registerModFileURL(new File(path)); // i am going to shit myself*/ // deactivated because it likely doesn't even fucking work + + // registering of the mod file now happens in the MainRegistry during preinit qmaw.clear(); triggers.clear(); @@ -153,7 +155,7 @@ public class QMAWLoader implements IResourceManagerReloadListener { /** Opens a resource pack folder, skips to the manual folder, then tries to dissect that */ public static void dissectFolder(File folder) { - File manualFolder = new File(folder, "/assets/manual"); + File manualFolder = new File(folder, "/assets/hbm/manual"); if(manualFolder.exists() && manualFolder.isDirectory()) dissectManualFolder(manualFolder); } @@ -180,6 +182,12 @@ public class QMAWLoader implements IResourceManagerReloadListener { public static void registerJson(String file, JsonObject json) { String name = json.get("name").getAsString(); + + if(QMAWLoader.qmaw.containsKey(name)) { + MainRegistry.logger.info("[QMAW] Skipping existing entry " + file); + return; + } + QuickManualAndWiki qmaw = new QuickManualAndWiki(name); if(json.has("icon")) { From 938c28f293c6c3a1077bbdac8f6bbd821cecbbf0 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 11 Aug 2025 11:59:28 +0200 Subject: [PATCH 350/491] work, whore --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 15aedca55..13f49a3ec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,6 +12,7 @@ name: Java CI with Gradle on: schedule: - cron: "0 0 * * *" + workflow_dispatch: jobs: build: From 9cfdc171156b80fa27f0e35c3010cb277cf37742 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 14 Aug 2025 16:20:39 +0200 Subject: [PATCH 351/491] multidimensional time crystal --- changelog | 10 ++++++++- .../hbm/entity/item/EntityDeliveryDrone.java | 4 +++- .../com/hbm/entity/logic/EntityBalefire.java | 21 +++++++++---------- .../gui/LoadingScreenRendererNT.java | 2 +- .../com/hbm/main/ModEventHandlerClient.java | 5 +++++ src/main/java/com/hbm/qmaw/QMAWLoader.java | 2 ++ .../hbm/tileentity/TileEntityProxyCombo.java | 2 +- .../tileentity/machine/TileEntityITER.java | 10 ++++----- .../machine/TileEntityReactorZirnox.java | 6 +++--- .../machine/TileEntityRefueler.java | 1 - .../hbm/manual/{ => material}/alloy.json | 0 .../assets/hbm/manual/material/aluminium.json | 11 ++++++++++ .../hbm/manual/{ => material}/arsenic.json | 0 .../manual/{ => material}/arsenic_bronze.json | 0 .../hbm/manual/{ => material}/bakelite.json | 0 .../hbm/manual/{ => material}/bismuth.json | 0 .../manual/{ => material}/bismuth_bronze.json | 0 .../hbm/manual/{ => material}/bscco.json | 0 .../hbm/manual/{ => material}/cadmium.json | 0 .../hbm/manual/material/cadmium_steel.json | 11 ++++++++++ .../assets/hbm/manual/material/cinnabar.json | 11 ++++++++++ .../assets/hbm/manual/material/coke.json | 11 ++++++++++ .../assets/hbm/manual/material/copper.json | 11 ++++++++++ .../assets/hbm/manual/material/desh.json | 11 ++++++++++ .../manual/{ => material}/ferrouranium.json | 0 .../assets/hbm/manual/material/graphite.json | 11 ++++++++++ .../assets/hbm/manual/material/gunmetal.json | 11 ++++++++++ .../assets/hbm/manual/material/hss.json | 11 ++++++++++ .../assets/hbm/manual/material/latex.json | 11 ++++++++++ .../assets/hbm/manual/material/lead.json | 11 ++++++++++ .../hbm/manual/{ => material}/mingrade.json | 0 .../assets/hbm/manual/material/neptunium.json | 11 ++++++++++ .../manual/{ => material}/plutonium-238.json | 0 .../manual/{ => material}/plutonium-239.json | 0 .../manual/{ => material}/plutonium-240.json | 0 .../manual/{ => material}/plutonium-241.json | 0 .../manual/{ => material}/plutonium-rg.json | 0 .../hbm/manual/{ => material}/plutonium.json | 0 .../hbm/manual/{ => material}/polonium.json | 0 .../hbm/manual/{ => material}/polymer.json | 0 .../hbm/manual/{ => material}/radium.json | 0 .../assets/hbm/manual/material/rubber.json | 11 ++++++++++ .../hbm/manual/{ => material}/silicon.json | 0 .../assets/hbm/manual/material/sodium.json | 11 ++++++++++ .../hbm/manual/{ => material}/steel.json | 0 .../assets/hbm/manual/material/sulfur.json | 11 ++++++++++ .../hbm/manual/{ => material}/tantalium.json | 0 .../hbm/manual/{ => material}/technetium.json | 0 .../{ => material}/technetium_steel.json | 0 .../hbm/manual/{ => material}/thorium.json | 0 .../manual/{ => material}/uranium-233.json | 0 .../manual/{ => material}/uranium-235.json | 0 .../manual/{ => material}/uranium-238.json | 0 .../hbm/manual/{ => material}/uranium.json | 0 .../hbm/manual/material/weaponsteel.json | 11 ++++++++++ 55 files changed, 215 insertions(+), 24 deletions(-) rename src/main/resources/assets/hbm/manual/{ => material}/alloy.json (100%) create mode 100644 src/main/resources/assets/hbm/manual/material/aluminium.json rename src/main/resources/assets/hbm/manual/{ => material}/arsenic.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/arsenic_bronze.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/bakelite.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/bismuth.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/bismuth_bronze.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/bscco.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/cadmium.json (100%) create mode 100644 src/main/resources/assets/hbm/manual/material/cadmium_steel.json create mode 100644 src/main/resources/assets/hbm/manual/material/cinnabar.json create mode 100644 src/main/resources/assets/hbm/manual/material/coke.json create mode 100644 src/main/resources/assets/hbm/manual/material/copper.json create mode 100644 src/main/resources/assets/hbm/manual/material/desh.json rename src/main/resources/assets/hbm/manual/{ => material}/ferrouranium.json (100%) create mode 100644 src/main/resources/assets/hbm/manual/material/graphite.json create mode 100644 src/main/resources/assets/hbm/manual/material/gunmetal.json create mode 100644 src/main/resources/assets/hbm/manual/material/hss.json create mode 100644 src/main/resources/assets/hbm/manual/material/latex.json create mode 100644 src/main/resources/assets/hbm/manual/material/lead.json rename src/main/resources/assets/hbm/manual/{ => material}/mingrade.json (100%) create mode 100644 src/main/resources/assets/hbm/manual/material/neptunium.json rename src/main/resources/assets/hbm/manual/{ => material}/plutonium-238.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/plutonium-239.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/plutonium-240.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/plutonium-241.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/plutonium-rg.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/plutonium.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/polonium.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/polymer.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/radium.json (100%) create mode 100644 src/main/resources/assets/hbm/manual/material/rubber.json rename src/main/resources/assets/hbm/manual/{ => material}/silicon.json (100%) create mode 100644 src/main/resources/assets/hbm/manual/material/sodium.json rename src/main/resources/assets/hbm/manual/{ => material}/steel.json (100%) create mode 100644 src/main/resources/assets/hbm/manual/material/sulfur.json rename src/main/resources/assets/hbm/manual/{ => material}/tantalium.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/technetium.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/technetium_steel.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/thorium.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/uranium-233.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/uranium-235.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/uranium-238.json (100%) rename src/main/resources/assets/hbm/manual/{ => material}/uranium.json (100%) create mode 100644 src/main/resources/assets/hbm/manual/material/weaponsteel.json diff --git a/changelog b/changelog index 9e379b53c..d29339e12 100644 --- a/changelog +++ b/changelog @@ -1,2 +1,10 @@ ## Changed -* QMAW now has buttons for returning to previously viewed pages \ No newline at end of file +* QMAW now has buttons for returning to previously viewed pages +* QMAW file detection now includes subfolders to `manual` +* OpenComputers integration for the ZIRNOX should now return values in °C and bar instead of unexplained weird internal units + +## Fixed +* Fixed QMAW not working at all +* Potentially fixed a bug where proxy tile entities would reference unloaded core tile entities which would cause bizarre item voiding/duping issues in rare cases +* Fixed fusion reactor automation being able to remove items other than the breeding output slot +* Fixed chunkloading transport drones getting stuck due to off-by-one rounding errors \ No newline at end of file diff --git a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java index db9e90da3..f733f99ca 100644 --- a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java @@ -200,9 +200,11 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory, } // This is the lowest padding that worked with my drone waypoint path. if they stop getting loaded crank up paddingSize - for (ChunkCoordIntPair chunk : ChunkShapeHelper.getChunksAlongLineSegment((int) this.posX, (int) this.posZ, (int) (this.posX + this.motionX), (int) (this.posZ + this.motionZ), 4)){ + for (ChunkCoordIntPair chunk : ChunkShapeHelper.getChunksAlongLineSegment((int) Math.floor(this.posX), (int) Math.floor(this.posZ), (int) Math.floor(this.posX + this.motionX), (int) Math.floor(this.posZ + this.motionZ), 8)){ ForgeChunkManager.forceChunk(loaderTicket, chunk); } + + System.out.println("guhhh"); } } diff --git a/src/main/java/com/hbm/entity/logic/EntityBalefire.java b/src/main/java/com/hbm/entity/logic/EntityBalefire.java index b368e171d..369a4aba9 100644 --- a/src/main/java/com/hbm/entity/logic/EntityBalefire.java +++ b/src/main/java/com/hbm/entity/logic/EntityBalefire.java @@ -10,8 +10,8 @@ import com.hbm.main.MainRegistry; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class EntityBalefire extends EntityExplosionChunkloading { - +public class EntityBalefire extends EntityExplosionChunkloading { + public int age = 0; public int destructionRange = 0; public ExplosionBalefire exp; @@ -24,13 +24,11 @@ public class EntityBalefire extends EntityExplosionChunkloading { destructionRange = nbt.getInteger("destructionRange"); speed = nbt.getInteger("speed"); did = nbt.getBoolean("did"); - - - exp = new ExplosionBalefire((int)this.posX, (int)this.posY, (int)this.posZ, this.worldObj, this.destructionRange); + + exp = new ExplosionBalefire((int) this.posX, (int) this.posY, (int) this.posZ, this.worldObj, this.destructionRange); exp.readFromNbt(nbt, "exp_"); - - this.did = true; - + + this.did = true; } @Override @@ -39,10 +37,10 @@ public class EntityBalefire extends EntityExplosionChunkloading { nbt.setInteger("destructionRange", destructionRange); nbt.setInteger("speed", speed); nbt.setBoolean("did", did); - + if(exp != null) exp.saveToNbt(nbt, "exp_"); - + } public EntityBalefire(World p_i1582_1_) { @@ -53,7 +51,8 @@ public class EntityBalefire extends EntityExplosionChunkloading { public void onUpdate() { super.onUpdate(); - if(!worldObj.isRemote) loadChunk((int) Math.floor(posX / 16D), (int) Math.floor(posZ / 16D)); + if(!worldObj.isRemote) + loadChunk((int) Math.floor(posX / 16D), (int) Math.floor(posZ / 16D)); if(!this.did) { if(GeneralConfig.enableExtendedLogging && !worldObj.isRemote) diff --git a/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java b/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java index 8dd24c319..10c4624ee 100644 --- a/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java +++ b/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java @@ -37,7 +37,7 @@ public class LoadingScreenRendererNT extends LoadingScreenRenderer { } private String chooseTip() { - if(HTTPHandler.tipOfTheDay.isEmpty()) return "null"; + if(HTTPHandler.tipOfTheDay.isEmpty()) return "Explore! There's tons of free stuff to find."; return HTTPHandler.tipOfTheDay.get(new Random().nextInt(HTTPHandler.tipOfTheDay.size())); } diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index c82f7b1b2..36081693c 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -114,6 +114,8 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import net.minecraftforge.client.event.sound.PlaySoundEvent17; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.event.entity.player.ItemTooltipEvent; +import net.minecraftforge.oredict.OreDictionary; + import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; @@ -753,6 +755,9 @@ public class ModEventHandlerClient { try { QuickManualAndWiki qmaw = QMAWLoader.triggers.get(comp); + if(qmaw == null) { + qmaw = QMAWLoader.triggers.get(new ComparableStack(comp.item, 1, OreDictionary.WILDCARD_VALUE)); + } if(qmaw != null) { list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("qmaw.tab", Keyboard.getKeyName(HbmKeybinds.qmaw.getKeyCode()))); lastQMAW = qmaw; diff --git a/src/main/java/com/hbm/qmaw/QMAWLoader.java b/src/main/java/com/hbm/qmaw/QMAWLoader.java index ee1596b3f..b84cf594e 100644 --- a/src/main/java/com/hbm/qmaw/QMAWLoader.java +++ b/src/main/java/com/hbm/qmaw/QMAWLoader.java @@ -174,6 +174,8 @@ public class QMAWLoader implements IResourceManagerReloadListener { } catch(Exception ex) { MainRegistry.logger.info("[QMAW] Error reading manual " + name + ": " + ex); } + } else if(file.isDirectory()) { + dissectManualFolder(file); // scrape subfolders too lmao } } } diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index fb80aa785..dc30ea5b3 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -77,7 +77,7 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy /** Returns the actual tile entity that represents the core. Only for internal use, and EnergyControl. */ public TileEntity getTile() { - if(tile == null || tile.isInvalid()) { + if(tile == null || tile.isInvalid() || (tile instanceof TileEntityLoadedBase && !((TileEntityLoadedBase) tile).isLoaded)) { tile = this.getTE(); } return tile; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java index 1b75df130..93f8675ad 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java @@ -317,19 +317,19 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece } @Override - public boolean canExtractItem(int i, ItemStack itemStack, int j) { - return true; + public boolean canExtractItem(int slot, ItemStack stack, int side) { + return slot == 2; // only allow removing breeder outputs } @Override - public int[] getAccessibleSlotsFromSide(int p_94128_1_) { + public int[] getAccessibleSlotsFromSide(int side) { return new int[] { 1, 2, 4 }; } @Override - public boolean isItemValidForSlot(int i, ItemStack itemStack) { + public boolean isItemValidForSlot(int i, ItemStack stack) { - if(i == 1 && BreederRecipes.getOutput(itemStack) != null) + if(i == 1 && BreederRecipes.getOutput(stack) != null) return true; return false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java index 3f3ae011a..a7ec9973f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java @@ -468,13 +468,13 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getTemp(Context context, Arguments args) { - return new Object[] {heat}; + return new Object[] {Math.round(heat * 1.0E-5D * 780.0D + 20.0D)}; } @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getPressure(Context context, Arguments args) { - return new Object[] {pressure}; + return new Object[] {Math.round(pressure * 1.0E-5D * 30.0D)}; } @Callback(direct = true) @@ -504,7 +504,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - return new Object[] {heat, pressure, water.getFill(), steam.getFill(), carbonDioxide.getFill(), isOn}; + return new Object[] {Math.round(heat * 1.0E-5D * 780.0D + 20.0D), Math.round(pressure * 1.0E-5D * 30.0D), water.getFill(), steam.getFill(), carbonDioxide.getFill(), isOn}; } @Callback(direct = true, limit = 4) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRefueler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRefueler.java index 22c3cf0d2..62f01a1e2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRefueler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRefueler.java @@ -153,5 +153,4 @@ public class TileEntityRefueler extends TileEntityLoadedBase implements IFluidSt public FluidTank[] getReceivingTanks() { return new FluidTank[] { tank }; } - } diff --git a/src/main/resources/assets/hbm/manual/alloy.json b/src/main/resources/assets/hbm/manual/material/alloy.json similarity index 100% rename from src/main/resources/assets/hbm/manual/alloy.json rename to src/main/resources/assets/hbm/manual/material/alloy.json diff --git a/src/main/resources/assets/hbm/manual/material/aluminium.json b/src/main/resources/assets/hbm/manual/material/aluminium.json new file mode 100644 index 000000000..9e5732336 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/aluminium.json @@ -0,0 +1,11 @@ +{ + "name": "Aluminium", + "icon": ["hbm:item.ingot_aluminium", 1, 0], + "trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]], + "title": { + "en_US": "Aluminium" + }, + "content": { + "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.

Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages." + } +} diff --git a/src/main/resources/assets/hbm/manual/arsenic.json b/src/main/resources/assets/hbm/manual/material/arsenic.json similarity index 100% rename from src/main/resources/assets/hbm/manual/arsenic.json rename to src/main/resources/assets/hbm/manual/material/arsenic.json diff --git a/src/main/resources/assets/hbm/manual/arsenic_bronze.json b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json similarity index 100% rename from src/main/resources/assets/hbm/manual/arsenic_bronze.json rename to src/main/resources/assets/hbm/manual/material/arsenic_bronze.json diff --git a/src/main/resources/assets/hbm/manual/bakelite.json b/src/main/resources/assets/hbm/manual/material/bakelite.json similarity index 100% rename from src/main/resources/assets/hbm/manual/bakelite.json rename to src/main/resources/assets/hbm/manual/material/bakelite.json diff --git a/src/main/resources/assets/hbm/manual/bismuth.json b/src/main/resources/assets/hbm/manual/material/bismuth.json similarity index 100% rename from src/main/resources/assets/hbm/manual/bismuth.json rename to src/main/resources/assets/hbm/manual/material/bismuth.json diff --git a/src/main/resources/assets/hbm/manual/bismuth_bronze.json b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json similarity index 100% rename from src/main/resources/assets/hbm/manual/bismuth_bronze.json rename to src/main/resources/assets/hbm/manual/material/bismuth_bronze.json diff --git a/src/main/resources/assets/hbm/manual/bscco.json b/src/main/resources/assets/hbm/manual/material/bscco.json similarity index 100% rename from src/main/resources/assets/hbm/manual/bscco.json rename to src/main/resources/assets/hbm/manual/material/bscco.json diff --git a/src/main/resources/assets/hbm/manual/cadmium.json b/src/main/resources/assets/hbm/manual/material/cadmium.json similarity index 100% rename from src/main/resources/assets/hbm/manual/cadmium.json rename to src/main/resources/assets/hbm/manual/material/cadmium.json diff --git a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json new file mode 100644 index 000000000..70cb3644b --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json @@ -0,0 +1,11 @@ +{ + "name": "Cadmium Steel", + "icon": ["hbm:item.ingot_cdalloy", 1, 0], + "trigger": [["hbm:item.ingot_cdalloy"]], + "title": { + "en_US": "Cadmium Steel" + }, + "content": { + "en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes." + } +} diff --git a/src/main/resources/assets/hbm/manual/material/cinnabar.json b/src/main/resources/assets/hbm/manual/material/cinnabar.json new file mode 100644 index 000000000..c142e7ff9 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/cinnabar.json @@ -0,0 +1,11 @@ +{ + "name": "Cinnabar", + "icon": ["hbm:item.cinnebar", 1, 0], + "trigger": [["hbm:item.cinnebar"]], + "title": { + "en_US": "Cinnabar" + }, + "content": { + "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production." + } +} diff --git a/src/main/resources/assets/hbm/manual/material/coke.json b/src/main/resources/assets/hbm/manual/material/coke.json new file mode 100644 index 000000000..fbf8d8631 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/coke.json @@ -0,0 +1,11 @@ +{ + "name": "Coke", + "icon": ["hbm:item.coke", 1, 0], + "trigger": [["hbm:item.coke", 1, 32767]], + "title": { + "en_US": "Coke" + }, + "content": { + "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].

Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.

Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.

Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json new file mode 100644 index 000000000..e56f6d71d --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -0,0 +1,11 @@ +{ + "name": "Copper", + "icon": ["hbm:item.ingot_copper", 1, 0], + "trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]], + "title": { + "en_US": "Copper" + }, + "content": { + "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils." + } +} diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json new file mode 100644 index 000000000..4de099c5a --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -0,0 +1,11 @@ +{ + "name": "Desh", + "icon": ["hbm:item.ingot_desh", 1, 0], + "trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]], + "title": { + "en_US": "Desh" + }, + "content": { + "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities." + } +} diff --git a/src/main/resources/assets/hbm/manual/ferrouranium.json b/src/main/resources/assets/hbm/manual/material/ferrouranium.json similarity index 100% rename from src/main/resources/assets/hbm/manual/ferrouranium.json rename to src/main/resources/assets/hbm/manual/material/ferrouranium.json diff --git a/src/main/resources/assets/hbm/manual/material/graphite.json b/src/main/resources/assets/hbm/manual/material/graphite.json new file mode 100644 index 000000000..9d0624a78 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/graphite.json @@ -0,0 +1,11 @@ +{ + "name": "Graphite", + "icon": ["hbm:item.ingot_graphite", 1, 0], + "trigger": [["hbm:item.ingot_graphite"]], + "title": { + "en_US": "Graphite" + }, + "content": { + "en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes." + } +} diff --git a/src/main/resources/assets/hbm/manual/material/gunmetal.json b/src/main/resources/assets/hbm/manual/material/gunmetal.json new file mode 100644 index 000000000..bf6ee920e --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/gunmetal.json @@ -0,0 +1,11 @@ +{ + "name": "Gunmetal", + "icon": ["hbm:item.ingot_gunmetal", 1, 0], + "trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]], + "title": { + "en_US": "Gunmetal" + }, + "content": { + "en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition." + } +} diff --git a/src/main/resources/assets/hbm/manual/material/hss.json b/src/main/resources/assets/hbm/manual/material/hss.json new file mode 100644 index 000000000..a74dfddaf --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/hss.json @@ -0,0 +1,11 @@ +{ + "name": "High-Speed Steel", + "icon": ["hbm:item.ingot_dura_steel", 1, 0], + "trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]], + "title": { + "en_US": "High-Speed Steel" + }, + "content": { + "en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable." + } +} diff --git a/src/main/resources/assets/hbm/manual/material/latex.json b/src/main/resources/assets/hbm/manual/material/latex.json new file mode 100644 index 000000000..c070e21e3 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/latex.json @@ -0,0 +1,11 @@ +{ + "name": "Latex", + "icon": ["hbm:item.ingot_biorubber", 1, 0], + "trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]], + "title": { + "en_US": "Latex" + }, + "content": { + "en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa." + } +} diff --git a/src/main/resources/assets/hbm/manual/material/lead.json b/src/main/resources/assets/hbm/manual/material/lead.json new file mode 100644 index 000000000..9735111c3 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/lead.json @@ -0,0 +1,11 @@ +{ + "name": "Lead", + "icon": ["hbm:item.ingot_lead", 1, 0], + "trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]], + "title": { + "en_US": "Lead" + }, + "content": { + "en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits." + } +} diff --git a/src/main/resources/assets/hbm/manual/mingrade.json b/src/main/resources/assets/hbm/manual/material/mingrade.json similarity index 100% rename from src/main/resources/assets/hbm/manual/mingrade.json rename to src/main/resources/assets/hbm/manual/material/mingrade.json diff --git a/src/main/resources/assets/hbm/manual/material/neptunium.json b/src/main/resources/assets/hbm/manual/material/neptunium.json new file mode 100644 index 000000000..a730ab7cd --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/neptunium.json @@ -0,0 +1,11 @@ +{ + "name": "Neptunium", + "icon": ["hbm:item.ingot_neptunium", 1, 0], + "trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]], + "title": { + "en_US": "Neptunium" + }, + "content": { + "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]]." + } +} diff --git a/src/main/resources/assets/hbm/manual/plutonium-238.json b/src/main/resources/assets/hbm/manual/material/plutonium-238.json similarity index 100% rename from src/main/resources/assets/hbm/manual/plutonium-238.json rename to src/main/resources/assets/hbm/manual/material/plutonium-238.json diff --git a/src/main/resources/assets/hbm/manual/plutonium-239.json b/src/main/resources/assets/hbm/manual/material/plutonium-239.json similarity index 100% rename from src/main/resources/assets/hbm/manual/plutonium-239.json rename to src/main/resources/assets/hbm/manual/material/plutonium-239.json diff --git a/src/main/resources/assets/hbm/manual/plutonium-240.json b/src/main/resources/assets/hbm/manual/material/plutonium-240.json similarity index 100% rename from src/main/resources/assets/hbm/manual/plutonium-240.json rename to src/main/resources/assets/hbm/manual/material/plutonium-240.json diff --git a/src/main/resources/assets/hbm/manual/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json similarity index 100% rename from src/main/resources/assets/hbm/manual/plutonium-241.json rename to src/main/resources/assets/hbm/manual/material/plutonium-241.json diff --git a/src/main/resources/assets/hbm/manual/plutonium-rg.json b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json similarity index 100% rename from src/main/resources/assets/hbm/manual/plutonium-rg.json rename to src/main/resources/assets/hbm/manual/material/plutonium-rg.json diff --git a/src/main/resources/assets/hbm/manual/plutonium.json b/src/main/resources/assets/hbm/manual/material/plutonium.json similarity index 100% rename from src/main/resources/assets/hbm/manual/plutonium.json rename to src/main/resources/assets/hbm/manual/material/plutonium.json diff --git a/src/main/resources/assets/hbm/manual/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json similarity index 100% rename from src/main/resources/assets/hbm/manual/polonium.json rename to src/main/resources/assets/hbm/manual/material/polonium.json diff --git a/src/main/resources/assets/hbm/manual/polymer.json b/src/main/resources/assets/hbm/manual/material/polymer.json similarity index 100% rename from src/main/resources/assets/hbm/manual/polymer.json rename to src/main/resources/assets/hbm/manual/material/polymer.json diff --git a/src/main/resources/assets/hbm/manual/radium.json b/src/main/resources/assets/hbm/manual/material/radium.json similarity index 100% rename from src/main/resources/assets/hbm/manual/radium.json rename to src/main/resources/assets/hbm/manual/material/radium.json diff --git a/src/main/resources/assets/hbm/manual/material/rubber.json b/src/main/resources/assets/hbm/manual/material/rubber.json new file mode 100644 index 000000000..9db9ddc37 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/rubber.json @@ -0,0 +1,11 @@ +{ + "name": "Rubber", + "icon": ["hbm:item.ingot_rubber", 1, 0], + "trigger": [["hbm:item.ingot_rubber"]], + "title": { + "en_US": "Rubber" + }, + "content": { + "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe." + } +} diff --git a/src/main/resources/assets/hbm/manual/silicon.json b/src/main/resources/assets/hbm/manual/material/silicon.json similarity index 100% rename from src/main/resources/assets/hbm/manual/silicon.json rename to src/main/resources/assets/hbm/manual/material/silicon.json diff --git a/src/main/resources/assets/hbm/manual/material/sodium.json b/src/main/resources/assets/hbm/manual/material/sodium.json new file mode 100644 index 000000000..5165042e0 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/sodium.json @@ -0,0 +1,11 @@ +{ + "name": "Sodium", + "icon": ["hbm:item.powder_sodium", 1, 0], + "trigger": [["hbm:item.powder_sodium"]], + "title": { + "en_US": "Sodium" + }, + "content": { + "en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant." + } +} diff --git a/src/main/resources/assets/hbm/manual/steel.json b/src/main/resources/assets/hbm/manual/material/steel.json similarity index 100% rename from src/main/resources/assets/hbm/manual/steel.json rename to src/main/resources/assets/hbm/manual/material/steel.json diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json new file mode 100644 index 000000000..32a07b988 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -0,0 +1,11 @@ +{ + "name": "Sulfur", + "icon": ["hbm:item.sulfur", 1, 0], + "trigger": [["hbm:item.sulfur"]], + "title": { + "en_US": "Sulfur" + }, + "content": { + "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye." + } +} diff --git a/src/main/resources/assets/hbm/manual/tantalium.json b/src/main/resources/assets/hbm/manual/material/tantalium.json similarity index 100% rename from src/main/resources/assets/hbm/manual/tantalium.json rename to src/main/resources/assets/hbm/manual/material/tantalium.json diff --git a/src/main/resources/assets/hbm/manual/technetium.json b/src/main/resources/assets/hbm/manual/material/technetium.json similarity index 100% rename from src/main/resources/assets/hbm/manual/technetium.json rename to src/main/resources/assets/hbm/manual/material/technetium.json diff --git a/src/main/resources/assets/hbm/manual/technetium_steel.json b/src/main/resources/assets/hbm/manual/material/technetium_steel.json similarity index 100% rename from src/main/resources/assets/hbm/manual/technetium_steel.json rename to src/main/resources/assets/hbm/manual/material/technetium_steel.json diff --git a/src/main/resources/assets/hbm/manual/thorium.json b/src/main/resources/assets/hbm/manual/material/thorium.json similarity index 100% rename from src/main/resources/assets/hbm/manual/thorium.json rename to src/main/resources/assets/hbm/manual/material/thorium.json diff --git a/src/main/resources/assets/hbm/manual/uranium-233.json b/src/main/resources/assets/hbm/manual/material/uranium-233.json similarity index 100% rename from src/main/resources/assets/hbm/manual/uranium-233.json rename to src/main/resources/assets/hbm/manual/material/uranium-233.json diff --git a/src/main/resources/assets/hbm/manual/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json similarity index 100% rename from src/main/resources/assets/hbm/manual/uranium-235.json rename to src/main/resources/assets/hbm/manual/material/uranium-235.json diff --git a/src/main/resources/assets/hbm/manual/uranium-238.json b/src/main/resources/assets/hbm/manual/material/uranium-238.json similarity index 100% rename from src/main/resources/assets/hbm/manual/uranium-238.json rename to src/main/resources/assets/hbm/manual/material/uranium-238.json diff --git a/src/main/resources/assets/hbm/manual/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json similarity index 100% rename from src/main/resources/assets/hbm/manual/uranium.json rename to src/main/resources/assets/hbm/manual/material/uranium.json diff --git a/src/main/resources/assets/hbm/manual/material/weaponsteel.json b/src/main/resources/assets/hbm/manual/material/weaponsteel.json new file mode 100644 index 000000000..87d951ce6 --- /dev/null +++ b/src/main/resources/assets/hbm/manual/material/weaponsteel.json @@ -0,0 +1,11 @@ +{ + "name": "Weapon Steel", + "icon": ["hbm:item.ingot_weaponsteel", 1, 0], + "trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]], + "title": { + "en_US": "Weapon Steel" + }, + "content": { + "en_US": "High-purity version of [[steel|Steel]] made in a [[rotary furnace|Rotary Furnace]]. Requires [[coker gas|Coker Gas]], and therefore a [[coker unit|Coker Unit]]. Used in many mid-game weapons, weapon modifications and missile warheads." + } +} From ba24ed64aae75f2fd988da70b111f21e26deb487 Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 15 Aug 2025 17:59:39 +0200 Subject: [PATCH 352/491] pink one detected --- changelog | 9 +- .../com/hbm/blocks/generic/BlockPlushie.java | 10 +- .../hbm/entity/item/EntityDeliveryDrone.java | 2 - .../com/hbm/inventory/OreDictManager.java | 19 +- .../ContainerMachineArcFurnaceLarge.java | 4 +- src/main/java/com/hbm/main/MainRegistry.java | 11 +- .../com/hbm/module/ModulePatternMatcher.java | 4 +- .../render/tileentity/RenderNukeFstbmb.java | 80 +- .../hbm/render/tileentity/RenderPlushie.java | 14 +- .../bomb/TileEntityNukeBalefire.java | 12 +- .../machine/TileEntityMachineAutocrafter.java | 2 +- .../assets/hbm/models/trinkets/hundun.obj | 1538 +++++++++++++++++ .../assets/hbm/models/trinkets/pooh.obj | 334 ---- src/main/resources/assets/hbm/sounds.json | 1 + .../sounds/block/hunduns_magnificent_howl.ogg | Bin 0 -> 62398 bytes .../assets/hbm/textures/items/fluid_tank.png | Bin 337 -> 270 bytes .../hbm/textures/items/fluid_tank_overlay.png | Bin 181 -> 153 bytes .../hbm/textures/models/trinkets/hundun.png | Bin 0 -> 1336 bytes .../hbm/textures/models/trinkets/pooh.png | Bin 409 -> 0 bytes 19 files changed, 1630 insertions(+), 410 deletions(-) create mode 100644 src/main/resources/assets/hbm/models/trinkets/hundun.obj delete mode 100644 src/main/resources/assets/hbm/models/trinkets/pooh.obj create mode 100644 src/main/resources/assets/hbm/sounds/block/hunduns_magnificent_howl.ogg create mode 100644 src/main/resources/assets/hbm/textures/models/trinkets/hundun.png delete mode 100644 src/main/resources/assets/hbm/textures/models/trinkets/pooh.png diff --git a/changelog b/changelog index d29339e12..a06979124 100644 --- a/changelog +++ b/changelog @@ -2,9 +2,16 @@ * QMAW now has buttons for returning to previously viewed pages * QMAW file detection now includes subfolders to `manual` * OpenComputers integration for the ZIRNOX should now return values in °C and bar instead of unexplained weird internal units +* The sodium and strontium autogen ingots now have their correct hazard tags +* Pattern matchers, like the one used on the automatic crafting table, no longer care about NBT data of an item + * This means that RBMK fuel rods can now be automatically disassembled without the depletion number having to be a 100% match + * Due to the way the RBMK uncrafting handler works, a single autocrafter now correctly supports RBMK fuel of one type of any depletion level, yielding the correct recycling pellets ## Fixed * Fixed QMAW not working at all * Potentially fixed a bug where proxy tile entities would reference unloaded core tile entities which would cause bizarre item voiding/duping issues in rare cases * Fixed fusion reactor automation being able to remove items other than the breeding output slot -* Fixed chunkloading transport drones getting stuck due to off-by-one rounding errors \ No newline at end of file +* Fixed chunkloading transport drones getting stuck due to off-by-one rounding errors +* Fixed shift-click handling on the electric arc furnace not working with upgrades, and putting electrodes in the wrong slot +* Fixed issue with the load order where custom fluids wouldn't work properly for fluid loading/unloading and in custom recipes +* Fixed balefire bomb not rendering the egg when fully loaded \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/BlockPlushie.java b/src/main/java/com/hbm/blocks/generic/BlockPlushie.java index 877d784e7..946961fc4 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockPlushie.java +++ b/src/main/java/com/hbm/blocks/generic/BlockPlushie.java @@ -96,12 +96,16 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + TileEntityPlushie plushie = (TileEntityPlushie) world.getTileEntity(x, y, z); if(world.isRemote) { - TileEntityPlushie plushie = (TileEntityPlushie) world.getTileEntity(x, y, z); plushie.squishTimer = 11; return true; } else { - world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.squeakyToy", 0.25F, 1F); + if(plushie.type == PlushieType.HUNDUN) { + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.hunduns_magnificent_howl", 100F, 1F); + } else { + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.squeakyToy", 0.25F, 1F); + } return true; } } @@ -155,7 +159,7 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti NONE( "NONE", null), YOMI( "Yomi", "Hi! Can I be your rabbit friend?"), NUMBERNINE( "Number Nine", "None of y'all deserve coal."), - POOH( "Winnie the Pooh", "Beloved children's character with no malicious intent."); + HUNDUN( "Hundun", "混沌"); public String label; public String inscription; diff --git a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java index f733f99ca..78ec2e81f 100644 --- a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java @@ -203,8 +203,6 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory, for (ChunkCoordIntPair chunk : ChunkShapeHelper.getChunksAlongLineSegment((int) Math.floor(this.posX), (int) Math.floor(this.posZ), (int) Math.floor(this.posX + this.motionX), (int) Math.floor(this.posZ + this.motionZ), 8)){ ForgeChunkManager.forceChunk(loaderTicket, chunk); } - - System.out.println("guhhh"); } } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 3e85fdfb4..b279bcfc2 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -454,7 +454,7 @@ public class OreDictManager { * HAZARDS, MISC */ LI .hydro(1F) .ingot(lithium) .dustSmall(powder_lithium_tiny) .dust(powder_lithium) .block(block_lithium) .ore(ore_gneiss_lithium); - NA .hydro(1F) .dust(powder_sodium); + NA .hydro(1F) .hazIngot() .dust(powder_sodium); /* * PHOSPHORUS @@ -494,7 +494,7 @@ public class OreDictManager { /* * FISSION FRAGMENTS */ - SR .hot(1F) .hydro(1F) .dust(powder_strontium); + SR .hot(1F) .hydro(1F) .hazIngot() .dust(powder_strontium); SR90 .rad(HazardRegistry.sr90) .hot(1F) .hydro(1F) .dustSmall(powder_sr90_tiny) .dust(powder_sr90) .ingot(ingot_sr90) .billet(billet_sr90) .nugget(nugget_sr90); I131 .rad(HazardRegistry.i131) .hot(1F) .dustSmall(powder_i131_tiny) .dust(powder_i131); XE135 .rad(HazardRegistry.xe135) .hot(10F) .dustSmall(powder_xe135_tiny) .dust(powder_xe135); @@ -912,6 +912,21 @@ public class OreDictManager { for(Block b : blocks) registerStack(tag, new ItemStack(b)); return this; } + + public DictFrame hazIngot() { + hazMult = HazardRegistry.ingot; + return autoRegHazard(INGOT); + } + + // TODO: rethink this. currently, keys are only registered on-demand if the dict frame has a valid entry, even though we can maximize compatibility + // by simply registereing all known shapes in the haz reg, whether it exists or not + public DictFrame autoRegHazard(MaterialShapes shape) { + String tag = shape.name(); + for(String mat : mats) { + registerHazards(hazards, hazMult, tag + mat); + } + return this; + } public static void registerHazards(List hazards, float hazMult, String dictKey) { diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java index 942f3cfcb..12318fe1d 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java @@ -61,9 +61,9 @@ public class ContainerMachineArcFurnaceLarge extends Container { if(rStack.getItem() instanceof IBatteryItem || rStack.getItem() == ModItems.battery_creative) { if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 3, 4, false)) return null; } else if(rStack.getItem() == ModItems.arc_electrode) { - if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 4, 5, false)) return null; - } else if(rStack.getItem() instanceof ItemMachineUpgrade) { if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 0, 3, false)) return null; + } else if(rStack.getItem() instanceof ItemMachineUpgrade) { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 4, 5, false)) return null; } else { if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 5, 25, false)) return null; } diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 20fc7b204..d8e10dac7 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -851,6 +851,12 @@ public class MainRegistry { @EventHandler public static void PostLoad(FMLPostInitializationEvent PostEvent) { + // to make sure that foreign registered fluids are accounted for, + // even when the reload listener is registered too late due to load order + // IMPORTANT: fluids have to load before recipes. weird shit happens if not. + Fluids.reloadFluids(); + FluidContainerRegistry.register(); + MagicRecipes.register(); LemegetonRecipes.register(); SILEXRecipes.register(); @@ -879,7 +885,6 @@ public class MainRegistry { ArmorUtil.register(); HazmatRegistry.registerHazmats(); DamageResistanceHandler.init(); - FluidContainerRegistry.register(); BlockToolConversion.registerRecipes(); AchievementHandler.register(); @@ -912,10 +917,6 @@ public class MainRegistry { SuicideThreadDump.register(); CommandReloadClient.register(); - // to make sure that foreign registered fluids are accounted for, - // even when the reload listener is registered too late due to load order - Fluids.reloadFluids(); - //ExplosionTests.runTest(); } diff --git a/src/main/java/com/hbm/module/ModulePatternMatcher.java b/src/main/java/com/hbm/module/ModulePatternMatcher.java index ecde925fa..37004116d 100644 --- a/src/main/java/com/hbm/module/ModulePatternMatcher.java +++ b/src/main/java/com/hbm/module/ModulePatternMatcher.java @@ -139,8 +139,8 @@ public class ModulePatternMatcher { } switch(mode) { - case MODE_EXACT: return input.isItemEqual(filter) && ItemStack.areItemStackTagsEqual(input, filter); - case MODE_WILDCARD: return input.getItem() == filter.getItem() && ItemStack.areItemStackTagsEqual(input, filter); + case MODE_EXACT: return input.isItemEqual(filter)/* && ItemStack.areItemStackTagsEqual(input, filter)*/; + case MODE_WILDCARD: return input.getItem() == filter.getItem()/* && ItemStack.areItemStackTagsEqual(input, filter)*/; case MODE_BEDROCK: if(input.getItem() != filter.getItem()) return false; if(!(input.getItem() instanceof ItemBedrockOreNew)) return false; diff --git a/src/main/java/com/hbm/render/tileentity/RenderNukeFstbmb.java b/src/main/java/com/hbm/render/tileentity/RenderNukeFstbmb.java index 82bf299b6..960f37f31 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderNukeFstbmb.java +++ b/src/main/java/com/hbm/render/tileentity/RenderNukeFstbmb.java @@ -15,50 +15,44 @@ import net.minecraft.util.ResourceLocation; public class RenderNukeFstbmb extends TileEntitySpecialRenderer { - @Override - public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) - { - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5D, y, z + 0.5D); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - switch(tileEntity.getBlockMetadata()) - { - case 2: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 4: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(0, 0F, 1F, 0F); break; + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + + switch(tileEntity.getBlockMetadata()) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; } - GL11.glShadeModel(GL11.GL_SMOOTH); - bindTexture(ResourceManager.fstbmb_tex); - ResourceManager.fstbmb.renderPart("Body"); - ResourceManager.fstbmb.renderPart("Balefire"); - - TileEntityNukeBalefire bf = (TileEntityNukeBalefire)tileEntity; - - if(bf.loaded) { - bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/misc/glintBF.png")); - RenderMiscEffects.renderClassicGlint(tileEntity.getWorldObj(), f, ResourceManager.fstbmb, "Balefire", 0.0F, 0.8F, 0.15F, 5, 2F); - - FontRenderer font = Minecraft.getMinecraft().fontRenderer; - float f3 = 0.04F; - GL11.glTranslatef(0.815F, 0.9275F, 0.5F); - GL11.glScalef(f3, -f3, f3); - GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3); - GL11.glRotatef(90, 0, 1, 0); - GL11.glDepthMask(false); - GL11.glTranslatef(0, 1, 0); - font.drawString(bf.getMinutes() + ":" + bf.getSeconds(), 0, 0, 0xff0000); - GL11.glDepthMask(true); - } - - GL11.glShadeModel(GL11.GL_FLAT); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.fstbmb_tex); + ResourceManager.fstbmb.renderPart("Body"); + ResourceManager.fstbmb.renderPart("Balefire"); - GL11.glPopMatrix(); - } + TileEntityNukeBalefire bf = (TileEntityNukeBalefire) tileEntity; + + if(bf.loaded) { + bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/misc/glintBF.png")); + RenderMiscEffects.renderClassicGlint(tileEntity.getWorldObj(), f, ResourceManager.fstbmb, "Balefire", 0.0F, 0.8F, 0.15F, 5, 2F); + + FontRenderer font = Minecraft.getMinecraft().fontRenderer; + float f3 = 0.04F; + GL11.glTranslatef(0.815F, 0.9275F, 0.5F); + GL11.glScalef(f3, -f3, f3); + GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3); + GL11.glRotatef(90, 0, 1, 0); + GL11.glDepthMask(false); + GL11.glTranslatef(0, 1, 0); + font.drawString(bf.getMinutes() + ":" + bf.getSeconds(), 0, 0, 0xff0000); + GL11.glDepthMask(true); + } + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } } diff --git a/src/main/java/com/hbm/render/tileentity/RenderPlushie.java b/src/main/java/com/hbm/render/tileentity/RenderPlushie.java index 702817abe..a482eba91 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPlushie.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPlushie.java @@ -30,10 +30,10 @@ import net.minecraftforge.client.model.IModelCustom; public class RenderPlushie extends TileEntitySpecialRenderer implements IItemRendererProvider { public static final IModelCustom yomiModel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/trinkets/yomi.obj"), false).asVBO(); - public static final IModelCustom poohModel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/trinkets/pooh.obj"), false).asVBO(); + public static final IModelCustom hundunModel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/trinkets/hundun.obj"), false).asVBO(); public static final ResourceLocation yomiTex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/yomi.png"); public static final ResourceLocation numbernineTex = new ResourceLocation(RefStrings.MODID, "textures/models/horse/numbernine.png"); - public static final ResourceLocation poohTex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/pooh.png"); + public static final ResourceLocation hundunTex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/hundun.png"); @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { @@ -53,7 +53,7 @@ public class RenderPlushie extends TileEntitySpecialRenderer implements IItemRen case NONE: break; case YOMI: GL11.glScaled(0.5, 0.5, 0.5); break; case NUMBERNINE: GL11.glScaled(0.75, 0.75, 0.75); break; - case POOH: GL11.glScaled(0.75, 0.75, 0.75); break; + case HUNDUN: GL11.glScaled(1, 1, 1); break; } renderPlushie(te.type); @@ -110,9 +110,9 @@ public class RenderPlushie extends TileEntitySpecialRenderer implements IItemRen IIcon icon = stack.getIconIndex(); ItemRenderer.renderItemIn2D(Tessellator.instance, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight(), 0.0625F); break; - case POOH: - Minecraft.getMinecraft().getTextureManager().bindTexture(poohTex); - poohModel.renderAll(); + case HUNDUN: + Minecraft.getMinecraft().getTextureManager().bindTexture(hundunTex); + hundunModel.renderPart("goober_posed"); break; } } @@ -138,7 +138,7 @@ public class RenderPlushie extends TileEntitySpecialRenderer implements IItemRen case NONE: break; case YOMI: GL11.glScaled(1.25, 1.25, 1.25); break; case NUMBERNINE: GL11.glTranslated(0, 0.25, 0.25); GL11.glScaled(1.25, 1.25, 1.25); break; - case POOH: GL11.glTranslated(0, 0.25, 0); GL11.glScaled(1.5, 1.5, 1.5); break; + case HUNDUN: GL11.glTranslated(0.5, 0.5, 0); GL11.glScaled(1.25, 1.25, 1.25); break; } renderPlushie(type); }}; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java index f88b7070b..3e9875521 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java @@ -40,7 +40,9 @@ public class TileEntityNukeBalefire extends TileEntityMachineBase implements IGU if(!worldObj.isRemote) { - if(!this.isLoaded()) { + this.loaded = this.isLoaded(); + + if(!loaded) { started = false; } @@ -89,21 +91,15 @@ public class TileEntityNukeBalefire extends TileEntityMachineBase implements IGU } public boolean isLoaded() { - return hasEgg() && hasBattery(); } public boolean hasEgg() { - - if(slots[0] != null && slots[0].getItem() == ModItems.egg_balefire) { - return true; - } - + if(slots[0] != null && slots[0].getItem() == ModItems.egg_balefire) return true; return false; } public boolean hasBattery() { - return getBattery() > 0; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java index a9bc5fc86..eafcb988c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java @@ -239,7 +239,7 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen ItemStack valid = slots[i]; if(valid == null) return false; //null? since slots[slot] is not null by now, this other slot needs the item more - if(!(valid.isItemEqual(stack) && ItemStack.areItemStackTagsEqual(valid, stack))) continue; //different item anyway? out with it + if(!(valid.isItemEqual(stack)/* && ItemStack.areItemStackTagsEqual(valid, stack)*/)) continue; //different item anyway? out with it //if there is another slot that actually does need the same item more, cancel if(valid.stackSize < size) diff --git a/src/main/resources/assets/hbm/models/trinkets/hundun.obj b/src/main/resources/assets/hbm/models/trinkets/hundun.obj new file mode 100644 index 000000000..4f241b676 --- /dev/null +++ b/src/main/resources/assets/hbm/models/trinkets/hundun.obj @@ -0,0 +1,1538 @@ +# Blender v2.79 (sub 0) OBJ File: 'hundun.blend' +# www.blender.org +o goober_posed +v 0.147740 1.125000 0.270838 +v 0.645838 1.125000 0.227260 +v 0.104162 1.125000 -0.227260 +v 0.602260 1.125000 -0.270838 +v 0.147740 1.625000 0.270838 +v 0.645838 1.625000 0.227260 +v 0.104162 1.625000 -0.227260 +v 0.602260 1.625000 -0.270838 +v 0.632220 1.156250 0.071604 +v 0.615878 1.156250 -0.115182 +v 0.632220 1.343750 0.071604 +v 0.615878 1.343750 -0.115182 +v 0.819006 1.156250 0.055263 +v 0.802664 1.156250 -0.131524 +v 0.819006 1.343750 0.055263 +v 0.802664 1.343750 -0.131524 +v 0.462946 1.625000 -0.070433 +v 0.452052 1.625000 -0.194957 +v 0.276160 1.625000 -0.054091 +v 0.265265 1.625000 -0.178616 +v 0.276160 1.875000 -0.054091 +v 0.462946 1.875000 -0.070433 +v 0.452052 1.875000 -0.194957 +v 0.265265 1.875000 -0.178616 +v 0.484735 1.625000 0.178616 +v 0.473840 1.625000 0.054091 +v 0.297948 1.625000 0.194957 +v 0.287054 1.625000 0.070433 +v 0.297948 1.875000 0.194957 +v 0.484735 1.875000 0.178616 +v 0.473840 1.875000 0.054091 +v 0.287054 1.875000 0.070433 +v -0.374080 0.062119 0.250000 +v 0.509803 0.946002 0.250000 +v -0.374080 0.062119 -0.250000 +v 0.509803 0.946002 -0.250000 +v -0.727633 0.415672 -0.250000 +v -0.727633 0.415672 0.250000 +v 0.156250 1.299556 0.250000 +v 0.156250 1.299556 -0.250000 +v 0.250000 0.875000 0.312500 +v 0.500000 0.125000 -0.062500 +v 0.250000 0.875000 0.062500 +v 0.500000 0.125000 -0.312500 +v 0.250000 0.875000 -0.312500 +v 0.250000 0.875000 -0.062500 +v 0.500000 0.875000 -0.062500 +v 0.500000 0.875000 -0.312500 +v 0.250000 0.000000 -0.312500 +v 0.250000 0.000000 -0.062500 +v 0.500000 0.125000 0.062500 +v 0.500000 0.125000 0.312500 +v 0.625000 0.125000 -0.062500 +v 0.625000 0.125000 -0.312500 +v 0.625000 0.000000 -0.062500 +v 0.625000 0.000000 -0.312500 +v 0.500000 0.875000 0.312500 +v 0.500000 0.875000 0.062500 +v 0.250000 0.000000 0.062500 +v 0.250000 0.000000 0.312500 +v 0.625000 0.125000 0.312500 +v 0.625000 0.125000 0.062500 +v 0.625000 0.000000 0.312500 +v 0.625000 0.000000 0.062500 +v 0.087399 0.282874 -0.062500 +v 0.087399 0.282874 -0.312500 +v 0.087399 0.282874 0.062500 +v 0.087399 0.282874 0.312500 +v -0.637046 0.476988 -0.062500 +v -0.637046 0.476988 -0.312500 +v 0.143435 0.009040 -0.312500 +v 0.143435 0.009040 -0.062500 +v 0.119751 0.403615 -0.062500 +v 0.119751 0.403615 -0.312500 +v 0.240492 0.371262 -0.062500 +v 0.240492 0.371262 -0.312500 +v -0.218788 0.106097 -0.062500 +v -0.218788 0.106097 -0.312500 +v -0.734103 0.114766 -0.312500 +v -0.734103 0.114766 -0.062500 +v -0.251140 -0.014643 -0.062500 +v -0.251140 -0.014643 -0.312500 +v -0.637046 0.476988 0.312500 +v -0.637046 0.476988 0.062500 +v 0.143435 0.009040 0.062500 +v 0.143435 0.009040 0.312500 +v 0.119751 0.403615 0.312500 +v 0.119751 0.403615 0.062500 +v 0.240492 0.371262 0.312500 +v 0.240492 0.371262 0.062500 +v -0.218788 0.106097 0.312500 +v -0.218788 0.106097 0.062500 +v -0.734103 0.114766 0.062500 +v -0.734103 0.114766 0.312500 +v -0.251140 -0.014643 0.312500 +v -0.251140 -0.014643 0.062500 +v 0.023667 0.415672 0.281250 +v 0.553998 0.946002 0.281250 +v 0.023667 0.415672 -0.281250 +v 0.553998 0.946002 -0.281250 +v -0.374080 0.813420 -0.281250 +v -0.374080 0.813420 0.281250 +v 0.156250 1.343750 0.281250 +v 0.156250 1.343750 -0.281250 +v 0.119333 1.093750 0.304692 +v 0.679692 1.093750 0.255667 +v 0.070308 1.093750 -0.255667 +v 0.630667 1.093750 -0.304692 +v 0.119333 1.656250 0.304692 +v 0.679692 1.656250 0.255667 +v 0.070308 1.656250 -0.255667 +v 0.630667 1.656250 -0.304692 +v -0.669194 0.312500 0.044194 +v -0.580806 0.312500 -0.044194 +v -0.631503 0.414894 -0.094892 +v -0.719892 0.414894 -0.006503 +v -0.870420 0.025712 -0.333808 +v -0.958808 0.025712 -0.245420 +v -0.921117 0.128106 -0.384506 +v -1.009506 0.128106 -0.296117 +v -0.978553 0.062500 -0.228553 +v -0.853553 0.062500 -0.228553 +v -0.853553 0.187500 -0.228553 +v -0.978553 0.187500 -0.228553 +v -0.853553 0.062500 -0.728553 +v -0.978553 0.062500 -0.728553 +v -0.853553 0.187500 -0.728553 +v -0.978553 0.187500 -0.728553 +v -0.960248 0.062500 -0.772748 +v -0.871859 0.062500 -0.684359 +v -0.871859 0.187500 -0.684359 +v -0.960248 0.187500 -0.772748 +v -0.518306 0.062500 -1.037912 +v -0.606694 0.062500 -1.126301 +v -0.518306 0.187500 -1.037912 +v -0.606694 0.187500 -1.126301 +v -0.562500 0.000000 -0.957107 +v -0.562500 0.000000 -1.207107 +v -0.562500 0.250000 -0.957107 +v -0.562500 0.250000 -1.207107 +v -0.062500 0.000000 -0.957107 +v -0.062500 0.000000 -1.207107 +v -0.062500 0.250000 -0.957107 +v -0.062500 0.250000 -1.207107 +v -0.130233 0.999672 -0.187500 +v -0.153109 1.022549 -0.308241 +v -0.041844 1.088061 -0.187500 +v -0.064721 1.110937 -0.308241 +v 0.125897 0.743543 -0.284557 +v 0.103020 0.766419 -0.405298 +v 0.214285 0.831931 -0.284557 +v 0.191409 0.854808 -0.405298 +v -0.266158 0.428491 -0.367025 +v -0.254720 0.417053 -0.306654 +v -0.479599 0.641932 -0.286144 +v -0.468161 0.630494 -0.225773 +v -0.114608 0.984047 -0.225773 +v -0.126046 0.995486 -0.286144 +v 0.098834 0.770606 -0.306654 +v 0.087396 0.782044 -0.367025 +v -0.153109 1.022549 0.308241 +v -0.130233 0.999672 0.187500 +v -0.064721 1.110937 0.308241 +v -0.041844 1.088061 0.187500 +v 0.103020 0.766419 0.405298 +v 0.125897 0.743543 0.284557 +v 0.191409 0.854808 0.405298 +v 0.214285 0.831931 0.284557 +v -0.254720 0.417053 0.306654 +v -0.266158 0.428491 0.367025 +v -0.468161 0.630494 0.225773 +v -0.479599 0.641932 0.286144 +v -0.126046 0.995486 0.286144 +v -0.114608 0.984047 0.225773 +v 0.087396 0.782044 0.367025 +v 0.098834 0.770606 0.306654 +vt 0.187500 0.875000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vt 0.062500 0.875000 +vt 0.125000 1.000000 +vt 0.062500 1.000000 +vt 0.125000 0.750000 +vt 0.062500 0.750000 +vt 0.250000 0.750000 +vt 0.187500 0.875000 +vt 0.187500 0.750000 +vt 0.125000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.750000 +vt 0.250000 0.968750 +vt 0.226562 0.937500 +vt 0.250000 0.937500 +vt 0.484375 0.640625 +vt 0.460938 0.687500 +vt 0.460938 0.640625 +vt 0.437500 0.640625 +vt 0.437500 0.687500 +vt 0.460938 0.734375 +vt 0.484375 0.687500 +vt 0.484375 0.734375 +vt 0.507812 0.687500 +vt 0.507812 0.640625 +vt 0.484375 0.593750 +vt 0.460938 0.593750 +vt 0.226562 0.937500 +vt 0.250000 0.968750 +vt 0.226562 0.968750 +vt 0.250000 0.875000 +vt 0.226562 0.875000 +vt 0.210938 0.875000 +vt 0.187500 0.937500 +vt 0.187500 0.875000 +vt 0.265625 0.875000 +vt 0.250000 0.937500 +vt 0.210938 0.937500 +vt 0.210938 0.875000 +vt 0.187500 0.937500 +vt 0.187500 0.875000 +vt 0.250000 0.875000 +vt 0.226562 0.875000 +vt 0.210938 0.937500 +vt 0.265625 0.875000 +vt 0.218750 0.375000 +vt 0.062500 0.250000 +vt 0.218750 0.250000 +vt 0.062500 0.625000 +vt 0.218750 0.500000 +vt 0.218750 0.625000 +vt 0.281250 0.625000 +vt 0.281250 0.500000 +vt 0.062500 0.500000 +vt 0.062500 0.375000 +vt 0.062500 0.750000 +vt 0.218750 0.750000 +vt -0.000000 0.500000 +vt -0.000000 0.625000 +vt 0.546875 0.937500 +vt 0.578125 1.000000 +vt 0.546875 1.000000 +vt 0.703125 0.937500 +vt 0.734375 1.000000 +vt 0.703125 1.000000 +vt 0.734375 0.750000 +vt 0.703125 0.750000 +vt 0.578125 0.687500 +vt 0.546875 0.593750 +vt 0.578125 0.593750 +vt 0.734375 0.687500 +vt 0.703125 0.593750 +vt 0.734375 0.593750 +vt 0.578125 0.750000 +vt 0.546875 0.750000 +vt 0.703125 0.687500 +vt 0.703125 0.718750 +vt 0.687500 0.718750 +vt 0.625000 0.687500 +vt 0.593750 0.718750 +vt 0.546875 0.718750 +vt 0.578125 0.718750 +vt 0.734375 0.718750 +vt 0.781250 0.687500 +vt 0.750000 0.718750 +vt 0.546875 0.687500 +vt 0.531250 0.718750 +vt 0.812500 0.906250 +vt 0.781250 0.906250 +vt 0.656250 0.906250 +vt 0.625000 0.906250 +vt 0.640625 0.343750 +vt 0.640625 0.250000 +vt 0.671875 0.281250 +vt 0.718750 0.312500 +vt 0.687500 0.500000 +vt 0.687500 0.312500 +vt 0.718750 0.250000 +vt 0.687500 0.156250 +vt 0.718750 0.156250 +vt 0.765625 0.343750 +vt 0.734375 0.281250 +vt 0.765625 0.250000 +vt 0.687500 0.281250 +vt 0.718750 0.281250 +vt 0.453125 0.343750 +vt 0.453125 0.250000 +vt 0.484375 0.281250 +vt 0.781250 0.218750 +vt 0.812500 0.312500 +vt 0.781250 0.312500 +vt 0.781250 0.343750 +vt 0.812500 0.468750 +vt 0.781250 0.468750 +vt 0.578125 0.343750 +vt 0.546875 0.281250 +vt 0.578125 0.250000 +vt 0.531250 0.250000 +vt 0.500000 0.156250 +vt 0.531250 0.156250 +vt 0.531250 0.312500 +vt 0.500000 0.500000 +vt 0.500000 0.312500 +vt 0.718750 0.593750 +vt 0.718750 0.500000 +vt 0.500000 0.281250 +vt 0.531250 0.281250 +vt 0.593750 0.218750 +vt 0.625000 0.312500 +vt 0.593750 0.312500 +vt 0.593750 0.343750 +vt 0.625000 0.468750 +vt 0.593750 0.468750 +vt 0.531250 0.593750 +vt 0.531250 0.500000 +vt 0.429688 0.375000 +vt 0.343750 0.250000 +vt 0.429688 0.250000 +vt 0.343750 0.625000 +vt 0.429688 0.500000 +vt 0.429688 0.625000 +vt 0.343750 0.500000 +vt 0.343750 0.375000 +vt 0.429688 0.750000 +vt 0.281250 0.500000 +vt 0.281250 0.625000 +vt 0.437500 0.875000 +vt 0.375000 1.000000 +vt 0.375000 0.875000 +vt 0.312500 0.875000 +vt 0.375000 1.000000 +vt 0.312500 1.000000 +vt 0.375000 0.750000 +vt 0.312500 0.750000 +vt 0.500000 0.750000 +vt 0.437500 0.875000 +vt 0.437500 0.750000 +vt 0.375000 0.875000 +vt 0.250000 0.875000 +vt 0.250000 0.750000 +vt 0.046875 0.093750 +vt 0.031250 0.062500 +vt 0.046875 0.062500 +vt 0.031250 0.250000 +vt 0.046875 0.218750 +vt 0.046875 0.250000 +vt 0.031250 0.093750 +vt 0.015625 0.218750 +vt 0.015625 0.093750 +vt 0.000000 0.093750 +vt 0.000000 0.218750 +vt 0.062500 0.218750 +vt 0.031250 0.218750 +vt 0.109375 0.093750 +vt 0.093750 0.062500 +vt 0.109375 0.062500 +vt 0.093750 0.250000 +vt 0.109375 0.218750 +vt 0.109375 0.250000 +vt 0.093750 0.093750 +vt 0.078125 0.218750 +vt 0.078125 0.093750 +vt 0.062500 0.218750 +vt 0.062500 0.093750 +vt 0.125000 0.093750 +vt 0.093750 0.218750 +vt 0.171875 0.093750 +vt 0.156250 0.062500 +vt 0.171875 0.062500 +vt 0.156250 0.250000 +vt 0.171875 0.218750 +vt 0.171875 0.250000 +vt 0.156250 0.093750 +vt 0.140625 0.218750 +vt 0.140625 0.093750 +vt 0.125000 0.218750 +vt 0.125000 0.093750 +vt 0.187500 0.093750 +vt 0.156250 0.218750 +vt 0.281250 0.125000 +vt 0.250000 0.062500 +vt 0.281250 0.062500 +vt 0.250000 0.312500 +vt 0.281250 0.250000 +vt 0.281250 0.312500 +vt 0.312500 0.125000 +vt 0.250000 0.125000 +vt 0.250000 0.250000 +vt 0.218750 0.250000 +vt 0.218750 0.125000 +vt 0.187500 0.250000 +vt 0.187500 0.125000 +vt 0.046875 0.468750 +vt 0.031250 0.500000 +vt 0.031250 0.468750 +vt 0.031250 0.375000 +vt 0.046875 0.343750 +vt 0.046875 0.375000 +vt 0.062500 0.375000 +vt 0.062500 0.468750 +vt -0.000000 0.468750 +vt 0.015625 0.375000 +vt 0.015625 0.468750 +vt 0.218750 0.406250 +vt 0.281250 0.421875 +vt 0.218750 0.421875 +vt 0.218750 0.328125 +vt 0.281250 0.406250 +vt 0.218750 0.312500 +vt 0.281250 0.328125 +vt 0.289062 0.328125 +vt 0.289062 0.406250 +vt 0.218750 0.500000 +vt 0.281250 0.500000 +vt 0.046875 0.468750 +vt 0.031250 0.500000 +vt 0.046875 0.500000 +vt 0.031250 0.343750 +vt 0.046875 0.375000 +vt 0.046875 0.343750 +vt 0.000000 0.468750 +vt 0.015625 0.375000 +vt 0.000000 0.375000 +vt 0.062500 0.468750 +vt 0.031250 0.375000 +vt 0.031250 0.468750 +vt 0.015625 0.468750 +vt 0.218750 0.406250 +vt 0.281250 0.421875 +vt 0.281250 0.406250 +vt 0.218750 0.500000 +vt 0.218750 0.421875 +vt 0.218750 0.328125 +vt 0.281250 0.312500 +vt 0.218750 0.312500 +vt 0.289062 0.328125 +vt 0.281250 0.328125 +vt 0.187500 1.000000 +vt 0.250000 0.875000 +vt 0.226562 0.968750 +vt 0.265625 0.937500 +vt 0.265625 0.937500 +vt 0.578125 0.937500 +vt 0.734375 0.937500 +vt 0.687500 0.906250 +vt 0.656250 0.906250 +vt 0.656250 0.687500 +vt 0.593750 0.906250 +vt 0.750000 0.906250 +vt 0.531250 0.906250 +vt 0.500000 0.906250 +vt 0.500000 0.687500 +vt 0.812500 0.687500 +vt 0.656250 0.687500 +vt 0.671875 0.468750 +vt 0.625000 0.468750 +vt 0.625000 0.343750 +vt 0.687500 0.250000 +vt 0.734375 0.468750 +vt 0.484375 0.468750 +vt 0.437500 0.468750 +vt 0.437500 0.343750 +vt 0.500000 0.250000 +vt 0.812500 0.218750 +vt 0.812500 0.343750 +vt 0.546875 0.468750 +vt 0.687500 0.593750 +vt 0.625000 0.218750 +vt 0.625000 0.343750 +vt 0.500000 0.593750 +vt 0.343750 0.750000 +vt 0.437500 1.000000 +vt 0.500000 0.875000 +vt 0.062500 0.093750 +vt 0.125000 0.218750 +vt 0.187500 0.218750 +vt 0.312500 0.250000 +vt 0.046875 0.500000 +vt 0.031250 0.343750 +vt -0.000000 0.375000 +vt 0.281250 0.312500 +vt 0.062500 0.375000 +vt 0.281250 0.500000 +vt 0.289062 0.406250 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.9962 0.0000 -0.0872 +vn -0.9962 0.0000 0.0872 +vn -0.0872 0.0000 -0.9962 +vn 0.0872 0.0000 0.9962 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.7071 0.7071 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.2588 0.9659 0.0000 +vn 0.9659 -0.2588 0.0000 +vn -0.9659 0.2588 0.0000 +vn -0.2588 -0.9659 0.0000 +vn 0.5792 0.5736 0.5792 +vn -0.5792 -0.5736 -0.5792 +vn -0.7071 -0.0000 0.7071 +vn 0.4056 -0.8192 0.4056 +vn 0.7071 -0.0000 -0.7071 +vn -0.4056 0.8192 -0.4056 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.6830 0.6830 0.2588 +vn 0.6830 -0.6830 -0.2588 +vn -0.1830 0.1830 -0.9659 +vn 0.1830 -0.1830 0.9659 +vn -0.6830 0.6830 -0.2588 +vn 0.6830 -0.6830 0.2588 +vn 0.1830 -0.1830 -0.9659 +vn -0.1830 0.1830 0.9659 +s off +f 3/1/1 2/2/1 1/3/1 +f 6/4/2 7/5/2 5/6/2 +f 4/7/3 6/4/3 2/8/3 +f 1/9/4 7/10/4 3/11/4 +f 3/11/5 8/12/5 4/7/5 +f 2/8/6 5/13/6 1/14/6 +f 31/15/2 29/16/2 30/17/2 +f 14/18/3 15/19/3 13/20/3 +f 9/21/6 15/19/6 11/22/6 +f 11/23/2 16/24/2 12/25/2 +f 12/26/5 14/18/5 10/27/5 +f 10/28/1 13/20/1 9/29/1 +f 23/30/2 21/31/2 22/32/2 +f 20/33/5 23/30/5 18/34/5 +f 17/35/6 21/36/6 19/37/6 +f 19/38/4 24/39/4 20/33/4 +f 18/34/3 22/40/3 17/35/3 +f 28/41/5 31/42/5 26/43/5 +f 25/44/6 29/16/6 27/45/6 +f 27/45/4 32/46/4 28/41/4 +f 26/47/3 30/17/3 25/44/3 +f 35/48/7 34/49/7 33/50/7 +f 39/51/8 37/52/8 38/53/8 +f 33/54/9 37/52/9 35/55/9 +f 35/48/10 40/56/10 36/57/10 +f 34/58/11 38/53/11 33/59/11 +f 36/60/12 39/51/12 34/61/12 +f 57/62/2 43/63/2 41/64/2 +f 47/65/2 45/66/2 46/67/2 +f 44/68/13 47/65/13 42/69/13 +f 64/70/1 60/71/1 59/72/1 +f 56/73/1 50/74/1 49/75/1 +f 51/76/13 57/62/13 52/77/13 +f 55/78/11 53/79/11 42/80/11 +f 59/81/10 51/82/10 64/70/10 +f 61/83/13 64/70/13 62/84/13 +f 52/77/2 62/84/2 51/76/2 +f 53/79/13 56/73/13 54/85/13 +f 42/69/2 54/85/2 44/68/2 +f 49/86/10 44/87/10 56/73/10 +f 63/88/11 61/83/11 52/89/11 +f 49/86/14 46/90/14 45/91/14 +f 59/81/14 41/92/14 43/93/14 +f 77/94/11 72/95/11 65/96/11 +f 66/97/15 69/98/15 65/99/15 +f 76/100/16 72/101/16 71/102/16 +f 78/103/10 66/104/10 71/105/10 +f 73/106/15 76/100/15 74/107/15 +f 65/99/17 74/107/17 66/97/17 +f 91/108/11 86/109/11 68/110/11 +f 71/111/18 77/112/18 78/113/18 +f 77/112/16 82/114/16 78/113/16 +f 82/114/18 80/115/18 79/116/18 +f 92/117/10 67/118/10 85/119/10 +f 90/120/16 86/121/16 85/122/16 +f 67/123/15 83/124/15 68/125/15 +f 79/126/17 69/98/17 70/127/17 +f 87/128/15 90/120/15 88/129/15 +f 68/125/17 88/129/17 67/123/17 +f 85/130/18 91/131/18 92/132/18 +f 91/131/16 96/133/16 92/132/16 +f 96/133/18 94/134/18 93/135/18 +f 93/136/17 83/124/17 84/137/17 +f 99/138/7 98/139/7 97/140/7 +f 103/141/8 101/142/8 102/143/8 +f 99/138/10 104/144/10 100/145/10 +f 97/146/11 103/141/11 102/143/11 +f 100/147/12 103/141/12 98/148/12 +f 107/149/1 106/150/1 105/151/1 +f 110/152/2 111/153/2 109/154/2 +f 108/155/3 110/152/3 106/156/3 +f 105/157/4 111/158/4 107/159/4 +f 107/159/5 112/160/5 108/155/5 +f 106/156/6 109/161/6 105/162/6 +f 115/163/19 113/164/19 114/165/19 +f 118/166/20 119/167/20 117/168/20 +f 116/169/21 118/170/21 113/171/21 +f 114/172/22 118/170/22 117/173/22 +f 115/163/23 117/174/23 119/167/23 +f 116/169/24 119/167/24 120/175/24 +f 123/176/11 121/177/11 122/178/11 +f 126/179/10 127/180/10 125/181/10 +f 124/182/14 126/183/14 121/184/14 +f 121/184/1 125/185/1 122/186/1 +f 122/187/13 127/180/13 123/176/13 +f 123/176/2 128/188/2 124/182/2 +f 131/189/21 129/190/21 130/191/21 +f 134/192/23 135/193/23 133/194/23 +f 132/195/25 134/196/25 129/197/25 +f 129/197/1 133/198/1 130/199/1 +f 130/200/26 135/193/26 131/189/26 +f 131/189/2 136/201/2 132/195/2 +f 139/202/14 138/203/14 137/204/14 +f 142/205/13 143/206/13 141/207/13 +f 137/208/11 143/206/11 139/202/11 +f 140/209/2 143/206/2 144/210/2 +f 140/209/10 142/211/10 138/212/10 +f 138/212/1 141/213/1 137/214/1 +f 146/215/27 147/216/27 148/217/27 +f 152/218/28 149/219/28 150/220/28 +f 146/215/29 152/218/29 150/220/29 +f 146/215/9 149/221/9 145/222/9 +f 145/223/30 151/224/30 147/225/30 +f 147/225/12 152/218/12 148/217/12 +f 158/226/27 156/227/27 157/228/27 +f 160/229/29 155/230/29 158/226/29 +f 159/231/28 153/232/28 160/229/28 +f 155/230/9 154/233/9 156/234/9 +f 159/235/30 156/227/30 154/236/30 +f 161/237/31 164/238/31 162/239/31 +f 168/240/32 165/241/32 166/242/32 +f 162/243/33 168/244/33 166/245/33 +f 162/246/9 165/241/9 161/237/9 +f 161/237/34 167/247/34 163/248/34 +f 164/249/12 167/247/12 168/244/12 +f 173/250/31 171/251/31 172/252/31 +f 176/253/33 171/251/33 174/254/33 +f 175/255/32 169/256/32 176/257/32 +f 172/252/9 169/258/9 170/259/9 +f 175/255/34 172/252/34 170/259/34 +f 3/1/1 4/260/1 2/2/1 +f 6/4/2 8/12/2 7/5/2 +f 4/7/3 8/12/3 6/4/3 +f 1/9/4 5/261/4 7/10/4 +f 3/11/5 7/10/5 8/12/5 +f 2/8/6 6/4/6 5/13/6 +f 31/15/2 32/262/2 29/16/2 +f 14/18/3 16/24/3 15/19/3 +f 9/21/6 13/20/6 15/19/6 +f 11/23/2 15/19/2 16/24/2 +f 12/26/5 16/24/5 14/18/5 +f 10/28/1 14/18/1 13/20/1 +f 23/30/2 24/39/2 21/31/2 +f 20/33/5 24/39/5 23/30/5 +f 17/35/6 22/40/6 21/36/6 +f 19/38/4 21/263/4 24/39/4 +f 18/34/3 23/30/3 22/40/3 +f 28/41/5 32/46/5 31/42/5 +f 25/44/6 30/17/6 29/16/6 +f 27/45/4 29/16/4 32/46/4 +f 26/47/3 31/264/3 30/17/3 +f 35/48/7 36/57/7 34/49/7 +f 39/51/8 40/56/8 37/52/8 +f 33/54/9 38/53/9 37/52/9 +f 35/48/10 37/52/10 40/56/10 +f 34/58/11 39/51/11 38/53/11 +f 36/60/12 40/56/12 39/51/12 +f 57/62/2 58/265/2 43/63/2 +f 47/65/2 48/266/2 45/66/2 +f 44/68/13 48/266/13 47/65/13 +f 64/70/1 63/88/1 60/71/1 +f 56/73/1 55/78/1 50/74/1 +f 51/76/13 58/265/13 57/62/13 +f 47/267/11 46/268/11 42/80/11 +f 46/268/11 50/269/11 42/80/11 +f 50/269/11 55/78/11 42/80/11 +f 59/81/10 43/93/10 51/82/10 +f 43/93/10 58/270/10 51/82/10 +f 51/82/10 62/84/10 64/70/10 +f 61/83/13 63/88/13 64/70/13 +f 52/77/2 61/83/2 62/84/2 +f 53/79/13 55/78/13 56/73/13 +f 42/69/2 53/79/2 54/85/2 +f 49/86/10 45/91/10 44/87/10 +f 45/91/10 48/271/10 44/87/10 +f 44/87/10 54/85/10 56/73/10 +f 57/272/11 41/273/11 52/89/11 +f 41/273/11 60/274/11 52/89/11 +f 60/274/11 63/88/11 52/89/11 +f 49/86/14 50/275/14 46/90/14 +f 59/81/14 60/276/14 41/92/14 +f 65/96/11 69/277/11 77/94/11 +f 69/277/11 80/278/11 77/94/11 +f 80/278/11 81/279/11 77/94/11 +f 72/95/11 75/280/11 65/96/11 +f 75/280/11 73/106/11 65/96/11 +f 66/97/15 70/127/15 69/98/15 +f 76/100/16 75/280/16 72/101/16 +f 78/103/10 82/114/10 79/116/10 +f 79/116/10 70/281/10 78/103/10 +f 70/281/10 66/104/10 78/103/10 +f 66/104/10 74/107/10 76/100/10 +f 66/104/10 76/100/10 71/105/10 +f 73/106/15 75/280/15 76/100/15 +f 65/99/17 73/106/17 74/107/17 +f 68/110/11 83/282/11 91/108/11 +f 83/282/11 94/283/11 91/108/11 +f 94/283/11 95/284/11 91/108/11 +f 86/109/11 89/285/11 68/110/11 +f 89/285/11 87/128/11 68/110/11 +f 71/111/18 72/286/18 77/112/18 +f 77/112/16 81/287/16 82/114/16 +f 82/114/18 81/287/18 80/115/18 +f 92/117/10 96/133/10 93/135/10 +f 93/135/10 84/288/10 92/117/10 +f 84/288/10 67/118/10 92/117/10 +f 67/118/10 88/129/10 90/120/10 +f 67/118/10 90/120/10 85/119/10 +f 90/120/16 89/285/16 86/121/16 +f 67/123/15 84/137/15 83/124/15 +f 79/126/17 80/289/17 69/98/17 +f 87/128/15 89/285/15 90/120/15 +f 68/125/17 87/128/17 88/129/17 +f 85/130/18 86/290/18 91/131/18 +f 91/131/16 95/291/16 96/133/16 +f 96/133/18 95/291/18 94/134/18 +f 93/136/17 94/292/17 83/124/17 +f 99/138/7 100/145/7 98/139/7 +f 103/141/8 104/144/8 101/142/8 +f 99/138/10 101/142/10 104/144/10 +f 97/146/11 98/293/11 103/141/11 +f 100/147/12 104/144/12 103/141/12 +f 107/149/1 108/294/1 106/150/1 +f 110/152/2 112/160/2 111/153/2 +f 108/155/3 112/160/3 110/152/3 +f 105/157/4 109/295/4 111/158/4 +f 107/159/5 111/158/5 112/160/5 +f 106/156/6 110/152/6 109/161/6 +f 115/163/19 116/169/19 113/164/19 +f 118/166/20 120/175/20 119/167/20 +f 116/169/21 120/175/21 118/170/21 +f 114/172/22 113/171/22 118/170/22 +f 115/163/23 114/296/23 117/174/23 +f 116/169/24 115/163/24 119/167/24 +f 123/176/11 124/182/11 121/177/11 +f 126/179/10 128/188/10 127/180/10 +f 124/182/14 128/188/14 126/183/14 +f 121/184/1 126/183/1 125/185/1 +f 122/187/13 125/297/13 127/180/13 +f 123/176/2 127/180/2 128/188/2 +f 131/189/21 132/195/21 129/190/21 +f 134/192/23 136/201/23 135/193/23 +f 132/195/25 136/201/25 134/196/25 +f 129/197/1 134/196/1 133/198/1 +f 130/200/26 133/298/26 135/193/26 +f 131/189/2 135/193/2 136/201/2 +f 139/202/14 140/209/14 138/203/14 +f 142/205/13 144/210/13 143/206/13 +f 137/208/11 141/299/11 143/206/11 +f 140/209/2 139/202/2 143/206/2 +f 140/209/10 144/210/10 142/211/10 +f 138/212/1 142/211/1 141/213/1 +f 146/215/27 145/300/27 147/216/27 +f 152/218/28 151/301/28 149/219/28 +f 146/215/29 148/217/29 152/218/29 +f 146/215/9 150/220/9 149/221/9 +f 145/223/30 149/302/30 151/224/30 +f 147/225/12 151/224/12 152/218/12 +f 158/226/27 155/230/27 156/227/27 +f 160/229/29 153/232/29 155/230/29 +f 159/231/28 154/303/28 153/232/28 +f 155/230/9 153/232/9 154/233/9 +f 159/235/30 157/228/30 156/227/30 +f 161/237/31 163/248/31 164/238/31 +f 168/240/32 167/247/32 165/241/32 +f 162/243/33 164/249/33 168/244/33 +f 162/246/9 166/304/9 165/241/9 +f 161/237/34 165/241/34 167/247/34 +f 164/249/12 163/248/12 167/247/12 +f 173/250/31 174/254/31 171/251/31 +f 176/253/33 169/305/33 171/251/33 +f 175/255/32 170/259/32 169/256/32 +f 172/252/9 171/306/9 169/258/9 +f 175/255/34 173/250/34 172/252/34 +o goober +v 0.250000 1.000000 3.250000 +v 0.750000 1.000000 3.250000 +v 0.250000 1.000000 2.750000 +v 0.750000 1.000000 2.750000 +v 0.250000 1.500000 3.250000 +v 0.750000 1.500000 3.250000 +v 0.250000 1.500000 2.750000 +v 0.750000 1.500000 2.750000 +v 0.750000 1.031250 3.093750 +v 0.750000 1.031250 2.906250 +v 0.750000 1.218750 3.093750 +v 0.750000 1.218750 2.906250 +v 0.937500 1.031250 3.093750 +v 0.937500 1.031250 2.906250 +v 0.937500 1.218750 3.093750 +v 0.937500 1.218750 2.906250 +v 0.593750 1.500000 2.937500 +v 0.593750 1.500000 2.812500 +v 0.406250 1.500000 2.937500 +v 0.406250 1.500000 2.812500 +v 0.406250 1.750000 2.937500 +v 0.593750 1.750000 2.937500 +v 0.593750 1.750000 2.812500 +v 0.406250 1.750000 2.812500 +v 0.593750 1.500000 3.187500 +v 0.593750 1.500000 3.062500 +v 0.406250 1.500000 3.187500 +v 0.406250 1.500000 3.062500 +v 0.406250 1.750000 3.187500 +v 0.593750 1.750000 3.187500 +v 0.593750 1.750000 3.062500 +v 0.406250 1.750000 3.062500 +v -0.625000 0.500000 3.250000 +v 0.625000 0.500000 3.250000 +v -0.625000 0.500000 2.750000 +v 0.625000 0.500000 2.750000 +v -0.625000 1.000000 2.750000 +v -0.625000 1.000000 3.250000 +v 0.625000 1.000000 3.250000 +v 0.625000 1.000000 2.750000 +v 0.250000 0.875000 3.312500 +v 0.500000 0.125000 2.937500 +v 0.250000 0.875000 3.062500 +v 0.500000 0.125000 2.687500 +v 0.250000 0.875000 2.687500 +v 0.250000 0.875000 2.937500 +v 0.500000 0.875000 2.937500 +v 0.500000 0.875000 2.687500 +v 0.250000 0.000000 2.687500 +v 0.250000 0.000000 2.937500 +v 0.500000 0.125000 3.062500 +v 0.500000 0.125000 3.312500 +v 0.625000 0.125000 2.937500 +v 0.625000 0.125000 2.687500 +v 0.625000 0.000000 2.937500 +v 0.625000 0.000000 2.687500 +v 0.500000 0.875000 3.312500 +v 0.500000 0.875000 3.062500 +v 0.250000 0.000000 3.062500 +v 0.250000 0.000000 3.312500 +v 0.625000 0.125000 3.312500 +v 0.625000 0.125000 3.062500 +v 0.625000 0.000000 3.312500 +v 0.625000 0.000000 3.062500 +v -0.312500 0.125000 2.937500 +v -0.312500 0.125000 2.687500 +v -0.312500 0.125000 3.062500 +v -0.312500 0.125000 3.312500 +v -0.312500 0.875000 2.937500 +v -0.312500 0.875000 2.687500 +v -0.562500 0.000000 2.687500 +v -0.562500 0.000000 2.937500 +v -0.187500 0.125000 2.937500 +v -0.187500 0.125000 2.687500 +v -0.187500 0.000000 2.937500 +v -0.187500 0.000000 2.687500 +v -0.562500 0.375000 2.937500 +v -0.562500 0.375000 2.687500 +v -0.687500 0.875000 2.687500 +v -0.687500 0.875000 2.937500 +v -0.687500 0.375000 2.937500 +v -0.687500 0.375000 2.687500 +v -0.312500 0.875000 3.312500 +v -0.312500 0.875000 3.062500 +v -0.562500 0.000000 3.062500 +v -0.562500 0.000000 3.312500 +v -0.187500 0.125000 3.312500 +v -0.187500 0.125000 3.062500 +v -0.187500 0.000000 3.312500 +v -0.187500 0.000000 3.062500 +v -0.562500 0.375000 3.312500 +v -0.562500 0.375000 3.062500 +v -0.687500 0.875000 3.062500 +v -0.687500 0.875000 3.312500 +v -0.687500 0.375000 3.312500 +v -0.687500 0.375000 3.062500 +v -0.093750 0.468750 3.281250 +v 0.656250 0.468750 3.281250 +v -0.093750 0.468750 2.718750 +v 0.656250 0.468750 2.718750 +v -0.093750 1.031250 2.718750 +v -0.093750 1.031250 3.281250 +v 0.656250 1.031250 3.281250 +v 0.656250 1.031250 2.718750 +v 0.218750 0.968750 3.281250 +v 0.781250 0.968750 3.281250 +v 0.218750 0.968750 2.718750 +v 0.781250 0.968750 2.718750 +v 0.218750 1.531250 3.281250 +v 0.781250 1.531250 3.281250 +v 0.218750 1.531250 2.718750 +v 0.781250 1.531250 2.718750 +v -0.625000 0.812500 3.062500 +v -0.625000 0.812500 2.937500 +v -0.625000 0.937500 2.937500 +v -0.625000 0.937500 3.062500 +v -1.125000 0.812500 2.937500 +v -1.125000 0.812500 3.062500 +v -1.125000 0.937500 2.937500 +v -1.125000 0.937500 3.062500 +v -1.125000 0.812500 3.062500 +v -1.125000 0.812500 2.937500 +v -1.125000 0.937500 2.937500 +v -1.125000 0.937500 3.062500 +v -1.625000 0.812500 2.937500 +v -1.625000 0.812500 3.062500 +v -1.625000 0.937500 2.937500 +v -1.625000 0.937500 3.062500 +v -1.625000 0.812500 3.062500 +v -1.625000 0.812500 2.937500 +v -1.625000 0.937500 2.937500 +v -1.625000 0.937500 3.062500 +v -2.125000 0.812500 2.937500 +v -2.125000 0.812500 3.062500 +v -2.125000 0.937500 2.937500 +v -2.125000 0.937500 3.062500 +v -2.125000 0.750000 2.875000 +v -2.125000 0.750000 3.125000 +v -2.125000 1.000000 2.875000 +v -2.125000 1.000000 3.125000 +v -2.625000 0.750000 2.875000 +v -2.625000 0.750000 3.125000 +v -2.625000 1.000000 2.875000 +v -2.625000 1.000000 3.125000 +v 0.187500 1.000000 2.750000 +v 0.187500 1.000000 2.625000 +v 0.312500 1.000000 2.750000 +v 0.312500 1.000000 2.625000 +v 0.187500 0.625000 2.750000 +v 0.187500 0.625000 2.625000 +v 0.312500 0.625000 2.750000 +v 0.312500 0.625000 2.625000 +v -0.312500 0.656250 2.656250 +v -0.312500 0.656250 2.718750 +v -0.312500 0.968750 2.656250 +v -0.312500 0.968750 2.718750 +v 0.187500 0.968750 2.718750 +v 0.187500 0.968750 2.656250 +v 0.187500 0.656250 2.718750 +v 0.187500 0.656250 2.656250 +v 0.187500 1.000000 3.375000 +v 0.187500 1.000000 3.250000 +v 0.312500 1.000000 3.375000 +v 0.312500 1.000000 3.250000 +v 0.187500 0.625000 3.375000 +v 0.187500 0.625000 3.250000 +v 0.312500 0.625000 3.375000 +v 0.312500 0.625000 3.250000 +v -0.312500 0.656250 3.281250 +v -0.312500 0.656250 3.343750 +v -0.312500 0.968750 3.281250 +v -0.312500 0.968750 3.343750 +v 0.187500 0.968750 3.343750 +v 0.187500 0.968750 3.281250 +v 0.187500 0.656250 3.343750 +v 0.187500 0.656250 3.281250 +vt 0.187500 0.875000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vt 0.062500 0.875000 +vt 0.125000 1.000000 +vt 0.062500 1.000000 +vt 0.125000 0.750000 +vt 0.062500 0.750000 +vt 0.250000 0.750000 +vt 0.187500 0.875000 +vt 0.187500 0.750000 +vt 0.125000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.750000 +vt 0.250000 0.968750 +vt 0.226562 0.937500 +vt 0.250000 0.937500 +vt 0.484375 0.640625 +vt 0.460938 0.687500 +vt 0.460938 0.640625 +vt 0.437500 0.640625 +vt 0.437500 0.687500 +vt 0.460938 0.734375 +vt 0.484375 0.687500 +vt 0.484375 0.734375 +vt 0.507812 0.687500 +vt 0.507812 0.640625 +vt 0.484375 0.593750 +vt 0.460938 0.593750 +vt 0.226562 0.937500 +vt 0.250000 0.968750 +vt 0.226562 0.968750 +vt 0.250000 0.875000 +vt 0.226562 0.875000 +vt 0.210938 0.875000 +vt 0.187500 0.937500 +vt 0.187500 0.875000 +vt 0.265625 0.875000 +vt 0.250000 0.937500 +vt 0.210938 0.937500 +vt 0.210938 0.875000 +vt 0.187500 0.937500 +vt 0.187500 0.875000 +vt 0.250000 0.875000 +vt 0.226562 0.875000 +vt 0.210938 0.937500 +vt 0.265625 0.875000 +vt 0.218750 0.375000 +vt 0.062500 0.250000 +vt 0.218750 0.250000 +vt 0.062500 0.625000 +vt 0.218750 0.500000 +vt 0.218750 0.625000 +vt 0.281250 0.625000 +vt 0.281250 0.500000 +vt 0.062500 0.500000 +vt 0.062500 0.375000 +vt 0.062500 0.750000 +vt 0.218750 0.750000 +vt -0.000000 0.500000 +vt -0.000000 0.625000 +vt 0.546875 0.937500 +vt 0.578125 1.000000 +vt 0.546875 1.000000 +vt 0.703125 0.937500 +vt 0.734375 1.000000 +vt 0.703125 1.000000 +vt 0.734375 0.750000 +vt 0.703125 0.750000 +vt 0.578125 0.687500 +vt 0.546875 0.593750 +vt 0.578125 0.593750 +vt 0.734375 0.687500 +vt 0.703125 0.593750 +vt 0.734375 0.593750 +vt 0.578125 0.750000 +vt 0.546875 0.750000 +vt 0.703125 0.687500 +vt 0.703125 0.718750 +vt 0.687500 0.718750 +vt 0.625000 0.687500 +vt 0.593750 0.718750 +vt 0.546875 0.718750 +vt 0.578125 0.718750 +vt 0.734375 0.718750 +vt 0.781250 0.687500 +vt 0.750000 0.718750 +vt 0.546875 0.687500 +vt 0.531250 0.718750 +vt 0.812500 0.906250 +vt 0.781250 0.906250 +vt 0.656250 0.906250 +vt 0.625000 0.906250 +vt 0.640625 0.343750 +vt 0.640625 0.250000 +vt 0.671875 0.281250 +vt 0.718750 0.312500 +vt 0.687500 0.500000 +vt 0.687500 0.312500 +vt 0.718750 0.250000 +vt 0.687500 0.156250 +vt 0.718750 0.156250 +vt 0.765625 0.343750 +vt 0.734375 0.281250 +vt 0.765625 0.250000 +vt 0.687500 0.281250 +vt 0.718750 0.281250 +vt 0.453125 0.343750 +vt 0.453125 0.250000 +vt 0.484375 0.281250 +vt 0.781250 0.218750 +vt 0.812500 0.312500 +vt 0.781250 0.312500 +vt 0.781250 0.343750 +vt 0.812500 0.468750 +vt 0.781250 0.468750 +vt 0.578125 0.343750 +vt 0.546875 0.281250 +vt 0.578125 0.250000 +vt 0.531250 0.250000 +vt 0.500000 0.156250 +vt 0.531250 0.156250 +vt 0.531250 0.312500 +vt 0.500000 0.500000 +vt 0.500000 0.312500 +vt 0.718750 0.593750 +vt 0.718750 0.500000 +vt 0.500000 0.281250 +vt 0.531250 0.281250 +vt 0.593750 0.218750 +vt 0.625000 0.312500 +vt 0.593750 0.312500 +vt 0.593750 0.343750 +vt 0.625000 0.468750 +vt 0.593750 0.468750 +vt 0.531250 0.593750 +vt 0.531250 0.500000 +vt 0.429688 0.375000 +vt 0.343750 0.250000 +vt 0.429688 0.250000 +vt 0.343750 0.625000 +vt 0.429688 0.500000 +vt 0.429688 0.625000 +vt 0.343750 0.500000 +vt 0.343750 0.375000 +vt 0.343750 0.750000 +vt 0.429688 0.750000 +vt 0.281250 0.500000 +vt 0.281250 0.625000 +vt 0.437500 0.875000 +vt 0.375000 1.000000 +vt 0.375000 0.875000 +vt 0.312500 0.875000 +vt 0.375000 1.000000 +vt 0.312500 1.000000 +vt 0.375000 0.750000 +vt 0.312500 0.750000 +vt 0.500000 0.750000 +vt 0.437500 0.875000 +vt 0.437500 0.750000 +vt 0.375000 0.875000 +vt 0.250000 0.875000 +vt 0.250000 0.750000 +vt 0.046875 0.093750 +vt 0.031250 0.062500 +vt 0.046875 0.062500 +vt 0.031250 0.250000 +vt 0.046875 0.218750 +vt 0.046875 0.250000 +vt 0.031250 0.093750 +vt 0.015625 0.218750 +vt 0.015625 0.093750 +vt 0.000000 0.218750 +vt 0.000000 0.093750 +vt 0.062500 0.093750 +vt 0.031250 0.218750 +vt 0.109375 0.093750 +vt 0.093750 0.062500 +vt 0.109375 0.062500 +vt 0.093750 0.250000 +vt 0.109375 0.218750 +vt 0.109375 0.250000 +vt 0.093750 0.093750 +vt 0.078125 0.218750 +vt 0.078125 0.093750 +vt 0.062500 0.218750 +vt 0.062500 0.093750 +vt 0.125000 0.093750 +vt 0.093750 0.218750 +vt 0.171875 0.093750 +vt 0.156250 0.062500 +vt 0.171875 0.062500 +vt 0.156250 0.250000 +vt 0.171875 0.218750 +vt 0.171875 0.250000 +vt 0.156250 0.093750 +vt 0.140625 0.218750 +vt 0.140625 0.093750 +vt 0.125000 0.218750 +vt 0.125000 0.093750 +vt 0.187500 0.093750 +vt 0.156250 0.218750 +vt 0.281250 0.125000 +vt 0.250000 0.062500 +vt 0.281250 0.062500 +vt 0.250000 0.312500 +vt 0.281250 0.250000 +vt 0.281250 0.312500 +vt 0.312500 0.125000 +vt 0.250000 0.250000 +vt 0.250000 0.125000 +vt 0.218750 0.250000 +vt 0.218750 0.125000 +vt 0.187500 0.250000 +vt 0.187500 0.125000 +vt 0.046875 0.500000 +vt 0.031250 0.468750 +vt 0.046875 0.468750 +vt 0.031250 0.375000 +vt 0.046875 0.343750 +vt 0.046875 0.375000 +vt 0.062500 0.375000 +vt 0.062500 0.468750 +vt -0.000000 0.468750 +vt 0.015625 0.375000 +vt 0.015625 0.468750 +vt 0.218750 0.406250 +vt 0.281250 0.421875 +vt 0.218750 0.421875 +vt 0.218750 0.328125 +vt 0.281250 0.406250 +vt 0.218750 0.312500 +vt 0.281250 0.328125 +vt 0.289062 0.328125 +vt 0.289062 0.406250 +vt 0.281250 0.500000 +vt 0.218750 0.500000 +vt 0.046875 0.468750 +vt 0.031250 0.500000 +vt 0.046875 0.500000 +vt 0.031250 0.343750 +vt 0.046875 0.375000 +vt 0.046875 0.343750 +vt 0.015625 0.468750 +vt 0.000000 0.375000 +vt 0.000000 0.468750 +vt 0.062500 0.468750 +vt 0.031250 0.375000 +vt 0.031250 0.468750 +vt 0.015625 0.375000 +vt 0.218750 0.421875 +vt 0.281250 0.406250 +vt 0.218750 0.406250 +vt 0.218750 0.500000 +vt 0.281250 0.421875 +vt 0.218750 0.328125 +vt 0.281250 0.312500 +vt 0.218750 0.312500 +vt 0.289062 0.406250 +vt 0.281250 0.328125 +vt 0.187500 1.000000 +vt 0.250000 0.875000 +vt 0.226562 0.968750 +vt 0.265625 0.937500 +vt 0.265625 0.937500 +vt 0.578125 0.937500 +vt 0.734375 0.937500 +vt 0.687500 0.906250 +vt 0.656250 0.906250 +vt 0.656250 0.687500 +vt 0.593750 0.906250 +vt 0.750000 0.906250 +vt 0.531250 0.906250 +vt 0.500000 0.906250 +vt 0.500000 0.687500 +vt 0.812500 0.687500 +vt 0.656250 0.687500 +vt 0.671875 0.468750 +vt 0.625000 0.468750 +vt 0.625000 0.343750 +vt 0.687500 0.250000 +vt 0.734375 0.468750 +vt 0.484375 0.468750 +vt 0.437500 0.468750 +vt 0.437500 0.343750 +vt 0.500000 0.250000 +vt 0.812500 0.218750 +vt 0.812500 0.343750 +vt 0.546875 0.468750 +vt 0.687500 0.593750 +vt 0.625000 0.218750 +vt 0.625000 0.343750 +vt 0.500000 0.593750 +vt 0.437500 1.000000 +vt 0.500000 0.875000 +vt 0.062500 0.218750 +vt 0.125000 0.218750 +vt 0.187500 0.218750 +vt 0.312500 0.250000 +vt 0.031250 0.500000 +vt 0.031250 0.343750 +vt -0.000000 0.375000 +vt 0.281250 0.312500 +vt 0.062500 0.375000 +vt 0.281250 0.500000 +vt 0.289062 0.328125 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +s off +f 179/307/35 178/308/35 177/309/35 +f 182/310/36 183/311/36 181/312/36 +f 180/313/37 182/310/37 178/314/37 +f 177/315/38 183/316/38 179/317/38 +f 179/317/39 184/318/39 180/313/39 +f 178/314/40 181/319/40 177/320/40 +f 207/321/36 205/322/36 206/323/36 +f 190/324/37 191/325/37 189/326/37 +f 185/327/40 191/325/40 187/328/40 +f 187/329/36 192/330/36 188/331/36 +f 188/332/39 190/324/39 186/333/39 +f 186/334/35 189/326/35 185/335/35 +f 199/336/36 197/337/36 198/338/36 +f 196/339/39 199/336/39 194/340/39 +f 193/341/40 197/342/40 195/343/40 +f 195/344/38 200/345/38 196/339/38 +f 194/340/37 198/346/37 193/341/37 +f 204/347/39 207/348/39 202/349/39 +f 201/350/40 205/322/40 203/351/40 +f 203/351/38 208/352/38 204/347/38 +f 202/353/37 206/323/37 201/350/37 +f 211/354/35 210/355/35 209/356/35 +f 215/357/36 213/358/36 214/359/36 +f 209/360/38 213/358/38 211/361/38 +f 211/354/39 216/362/39 212/363/39 +f 210/364/40 214/359/40 209/365/40 +f 212/366/37 215/357/37 210/367/37 +f 233/368/36 219/369/36 217/370/36 +f 223/371/36 221/372/36 222/373/36 +f 220/374/37 223/371/37 218/375/37 +f 240/376/35 236/377/35 235/378/35 +f 232/379/35 226/380/35 225/381/35 +f 227/382/37 233/368/37 228/383/37 +f 231/384/40 229/385/40 218/386/40 +f 235/387/39 227/388/39 240/376/39 +f 237/389/37 240/376/37 238/390/37 +f 228/383/36 238/390/36 227/382/36 +f 229/385/37 232/379/37 230/391/37 +f 218/375/36 230/391/36 220/374/36 +f 225/392/39 220/393/39 232/379/39 +f 239/394/40 237/389/40 228/395/40 +f 225/392/38 222/396/38 221/397/38 +f 235/387/38 217/398/38 219/399/38 +f 253/400/40 248/401/40 241/402/40 +f 242/403/37 245/404/37 241/405/37 +f 252/406/35 248/407/35 247/408/35 +f 254/409/39 242/410/39 247/411/39 +f 249/412/37 252/406/37 250/413/37 +f 241/405/36 250/413/36 242/403/36 +f 267/414/40 262/415/40 244/416/40 +f 247/417/38 253/418/38 254/419/38 +f 253/418/35 258/420/35 254/419/35 +f 258/420/38 256/421/38 255/422/38 +f 268/423/39 243/424/39 261/425/39 +f 266/426/35 262/427/35 261/428/35 +f 243/429/37 259/430/37 244/431/37 +f 255/432/36 245/404/36 246/433/36 +f 263/434/37 266/426/37 264/435/37 +f 244/431/36 264/435/36 243/429/36 +f 261/436/38 267/437/38 268/438/38 +f 267/437/35 272/439/35 268/438/35 +f 272/439/38 270/440/38 269/441/38 +f 269/442/36 259/430/36 260/443/36 +f 275/444/35 274/445/35 273/446/35 +f 279/447/36 277/448/36 278/449/36 +f 275/444/39 280/450/39 276/451/39 +f 274/452/40 278/449/40 273/453/40 +f 276/454/37 279/447/37 274/455/37 +f 283/456/35 282/457/35 281/458/35 +f 286/459/36 287/460/36 285/461/36 +f 284/462/37 286/459/37 282/463/37 +f 281/464/38 287/465/38 283/466/38 +f 283/466/39 288/467/39 284/462/39 +f 282/463/40 285/468/40 281/469/40 +f 291/470/37 289/471/37 290/472/37 +f 294/473/38 295/474/38 293/475/38 +f 292/476/40 294/477/40 289/478/40 +f 289/478/35 293/479/35 290/480/35 +f 290/481/39 295/474/39 291/470/39 +f 291/470/36 296/482/36 292/476/36 +f 299/483/37 297/484/37 298/485/37 +f 302/486/38 303/487/38 301/488/38 +f 300/489/40 302/490/40 297/491/40 +f 297/491/35 301/492/35 298/493/35 +f 298/494/39 303/487/39 299/483/39 +f 299/483/36 304/495/36 300/489/36 +f 307/496/37 305/497/37 306/498/37 +f 310/499/38 311/500/38 309/501/38 +f 308/502/40 310/503/40 305/504/40 +f 305/504/35 309/505/35 306/506/35 +f 306/507/39 311/500/39 307/496/39 +f 307/496/36 312/508/36 308/502/36 +f 315/509/37 314/510/37 313/511/37 +f 318/512/38 319/513/38 317/514/38 +f 313/515/39 319/513/39 315/509/39 +f 315/509/36 320/516/36 316/517/36 +f 316/517/40 318/518/40 314/519/40 +f 314/519/35 317/520/35 313/521/35 +f 321/522/36 324/523/36 322/524/36 +f 328/525/35 325/526/35 326/527/35 +f 324/523/39 326/527/39 322/524/39 +f 322/524/38 325/528/38 321/529/38 +f 321/530/40 327/531/40 323/532/40 +f 323/532/37 328/525/37 324/523/37 +f 334/533/36 332/534/36 333/535/36 +f 336/536/39 331/537/39 334/533/39 +f 335/538/35 329/539/35 336/536/35 +f 331/537/38 330/540/38 332/541/38 +f 333/535/40 330/542/40 335/543/40 +f 337/544/36 340/545/36 338/546/36 +f 344/547/35 341/548/35 342/549/35 +f 340/550/39 342/551/39 338/552/39 +f 338/553/38 341/548/38 337/544/38 +f 337/544/40 343/554/40 339/555/40 +f 339/555/37 344/556/37 340/550/37 +f 350/557/36 348/558/36 349/559/36 +f 352/560/39 347/561/39 350/557/39 +f 351/562/35 345/563/35 352/564/35 +f 347/565/38 346/566/38 348/558/38 +f 349/559/40 346/566/40 351/562/40 +f 179/307/35 180/567/35 178/308/35 +f 182/310/36 184/318/36 183/311/36 +f 180/313/37 184/318/37 182/310/37 +f 177/315/38 181/568/38 183/316/38 +f 179/317/39 183/316/39 184/318/39 +f 178/314/40 182/310/40 181/319/40 +f 207/321/36 208/569/36 205/322/36 +f 190/324/37 192/330/37 191/325/37 +f 185/327/40 189/326/40 191/325/40 +f 187/329/36 191/325/36 192/330/36 +f 188/332/39 192/330/39 190/324/39 +f 186/334/35 190/324/35 189/326/35 +f 199/336/36 200/345/36 197/337/36 +f 196/339/39 200/345/39 199/336/39 +f 193/341/40 198/346/40 197/342/40 +f 195/344/38 197/570/38 200/345/38 +f 194/340/37 199/336/37 198/346/37 +f 204/347/39 208/352/39 207/348/39 +f 201/350/40 206/323/40 205/322/40 +f 203/351/38 205/322/38 208/352/38 +f 202/353/37 207/571/37 206/323/37 +f 211/354/35 212/363/35 210/355/35 +f 215/357/36 216/362/36 213/358/36 +f 209/360/38 214/359/38 213/358/38 +f 211/354/39 213/358/39 216/362/39 +f 210/364/40 215/357/40 214/359/40 +f 212/366/37 216/362/37 215/357/37 +f 233/368/36 234/572/36 219/369/36 +f 223/371/36 224/573/36 221/372/36 +f 220/374/37 224/573/37 223/371/37 +f 240/376/35 239/394/35 236/377/35 +f 232/379/35 231/384/35 226/380/35 +f 227/382/37 234/572/37 233/368/37 +f 223/574/40 222/575/40 218/386/40 +f 222/575/40 226/576/40 218/386/40 +f 226/576/40 231/384/40 218/386/40 +f 235/387/39 219/399/39 227/388/39 +f 219/399/39 234/577/39 227/388/39 +f 227/388/39 238/390/39 240/376/39 +f 237/389/37 239/394/37 240/376/37 +f 228/383/36 237/389/36 238/390/36 +f 229/385/37 231/384/37 232/379/37 +f 218/375/36 229/385/36 230/391/36 +f 225/392/39 221/397/39 220/393/39 +f 221/397/39 224/578/39 220/393/39 +f 220/393/39 230/391/39 232/379/39 +f 233/579/40 217/580/40 228/395/40 +f 217/580/40 236/581/40 228/395/40 +f 236/581/40 239/394/40 228/395/40 +f 225/392/38 226/582/38 222/396/38 +f 235/387/38 236/583/38 217/398/38 +f 241/402/40 245/584/40 253/400/40 +f 245/584/40 256/585/40 253/400/40 +f 256/585/40 257/586/40 253/400/40 +f 248/401/40 251/587/40 241/402/40 +f 251/587/40 249/412/40 241/402/40 +f 242/403/37 246/433/37 245/404/37 +f 252/406/35 251/587/35 248/407/35 +f 254/409/39 258/420/39 255/422/39 +f 255/422/39 246/588/39 254/409/39 +f 246/588/39 242/410/39 254/409/39 +f 242/410/39 250/413/39 252/406/39 +f 242/410/39 252/406/39 247/411/39 +f 249/412/37 251/587/37 252/406/37 +f 241/405/36 249/412/36 250/413/36 +f 244/416/40 259/589/40 267/414/40 +f 259/589/40 270/590/40 267/414/40 +f 270/590/40 271/591/40 267/414/40 +f 262/415/40 265/592/40 244/416/40 +f 265/592/40 263/434/40 244/416/40 +f 247/417/38 248/593/38 253/418/38 +f 253/418/35 257/594/35 258/420/35 +f 258/420/38 257/594/38 256/421/38 +f 268/423/39 272/439/39 269/441/39 +f 269/441/39 260/595/39 268/423/39 +f 260/595/39 243/424/39 268/423/39 +f 243/424/39 264/435/39 266/426/39 +f 243/424/39 266/426/39 261/425/39 +f 266/426/35 265/592/35 262/427/35 +f 243/429/37 260/443/37 259/430/37 +f 255/432/36 256/596/36 245/404/36 +f 263/434/37 265/592/37 266/426/37 +f 244/431/36 263/434/36 264/435/36 +f 261/436/38 262/597/38 267/437/38 +f 267/437/35 271/598/35 272/439/35 +f 272/439/38 271/598/38 270/440/38 +f 269/442/36 270/599/36 259/430/36 +f 275/444/35 276/451/35 274/445/35 +f 279/447/36 280/450/36 277/448/36 +f 275/444/39 277/448/39 280/450/39 +f 274/452/40 279/447/40 278/449/40 +f 276/454/37 280/450/37 279/447/37 +f 283/456/35 284/600/35 282/457/35 +f 286/459/36 288/467/36 287/460/36 +f 284/462/37 288/467/37 286/459/37 +f 281/464/38 285/601/38 287/465/38 +f 283/466/39 287/465/39 288/467/39 +f 282/463/40 286/459/40 285/468/40 +f 291/470/37 292/476/37 289/471/37 +f 294/473/38 296/482/38 295/474/38 +f 292/476/40 296/482/40 294/477/40 +f 289/478/35 294/477/35 293/479/35 +f 290/481/39 293/602/39 295/474/39 +f 291/470/36 295/474/36 296/482/36 +f 299/483/37 300/489/37 297/484/37 +f 302/486/38 304/495/38 303/487/38 +f 300/489/40 304/495/40 302/490/40 +f 297/491/35 302/490/35 301/492/35 +f 298/494/39 301/603/39 303/487/39 +f 299/483/36 303/487/36 304/495/36 +f 307/496/37 308/502/37 305/497/37 +f 310/499/38 312/508/38 311/500/38 +f 308/502/40 312/508/40 310/503/40 +f 305/504/35 310/503/35 309/505/35 +f 306/507/39 309/604/39 311/500/39 +f 307/496/36 311/500/36 312/508/36 +f 315/509/37 316/517/37 314/510/37 +f 318/512/38 320/516/38 319/513/38 +f 313/515/39 317/605/39 319/513/39 +f 315/509/36 319/513/36 320/516/36 +f 316/517/40 320/516/40 318/518/40 +f 314/519/35 318/518/35 317/520/35 +f 321/522/36 323/606/36 324/523/36 +f 328/525/35 327/607/35 325/526/35 +f 324/523/39 328/525/39 326/527/39 +f 322/524/38 326/527/38 325/528/38 +f 321/530/40 325/608/40 327/531/40 +f 323/532/37 327/531/37 328/525/37 +f 334/533/36 331/537/36 332/534/36 +f 336/536/39 329/539/39 331/537/39 +f 335/538/35 330/609/35 329/539/35 +f 331/537/38 329/539/38 330/540/38 +f 333/535/40 332/534/40 330/542/40 +f 337/544/36 339/555/36 340/545/36 +f 344/547/35 343/554/35 341/548/35 +f 340/550/39 344/556/39 342/551/39 +f 338/553/38 342/610/38 341/548/38 +f 337/544/40 341/548/40 343/554/40 +f 339/555/37 343/554/37 344/556/37 +f 350/557/36 347/561/36 348/558/36 +f 352/560/39 345/611/39 347/561/39 +f 351/562/35 346/566/35 345/563/35 +f 347/565/38 345/612/38 346/566/38 +f 349/559/40 348/558/40 346/566/40 diff --git a/src/main/resources/assets/hbm/models/trinkets/pooh.obj b/src/main/resources/assets/hbm/models/trinkets/pooh.obj deleted file mode 100644 index 958bfc3e9..000000000 --- a/src/main/resources/assets/hbm/models/trinkets/pooh.obj +++ /dev/null @@ -1,334 +0,0 @@ -# Blender v2.79 (sub 0) OBJ File: 'pooh.blend' -# www.blender.org -o Cube_Cube.001 -v -0.250000 0.062500 0.250000 -v 0.250000 0.062500 0.250000 -v -0.250000 0.062500 -0.250000 -v 0.250000 0.062500 -0.250000 -v -0.250000 0.437500 0.250000 -v 0.250000 0.437500 0.250000 -v -0.250000 0.437500 -0.250000 -v 0.250000 0.437500 -0.250000 -v -0.187500 0.437500 0.187500 -v 0.187500 0.437500 0.187500 -v -0.187500 0.437500 -0.187500 -v 0.187500 0.437500 -0.187500 -v -0.187500 0.625000 -0.187500 -v -0.187500 0.625000 0.187500 -v 0.187500 0.625000 0.187500 -v 0.187500 0.625000 -0.187500 -v -0.250000 0.625000 0.250000 -v 0.250000 0.625000 0.250000 -v -0.250000 0.625000 -0.250000 -v 0.250000 0.625000 -0.250000 -v -0.250000 1.125000 -0.250000 -v -0.250000 1.125000 0.250000 -v 0.250000 1.125000 0.250000 -v 0.250000 1.125000 -0.250000 -v -0.125000 0.000000 -0.062500 -v 0.500000 0.000000 -0.062500 -v -0.125000 0.000000 -0.187500 -v 0.500000 0.000000 -0.187500 -v -0.125000 0.125000 -0.187500 -v -0.125000 0.125000 -0.062500 -v 0.500000 0.125000 -0.062500 -v 0.500000 0.125000 -0.187500 -v -0.125000 0.000000 0.187500 -v 0.500000 0.000000 0.187500 -v -0.125000 0.000000 0.062500 -v 0.500000 0.000000 0.062500 -v -0.125000 0.125000 0.062500 -v -0.125000 0.125000 0.187500 -v 0.500000 0.125000 0.187500 -v 0.500000 0.125000 0.062500 -v -0.062500 0.606694 -0.169194 -v 0.062500 0.606694 -0.169194 -v -0.062500 0.518306 -0.080806 -v 0.062500 0.518306 -0.080806 -v -0.062500 0.253141 -0.345971 -v -0.062500 0.341529 -0.434359 -v 0.062500 0.341529 -0.434359 -v 0.062500 0.253141 -0.345971 -v -0.062500 0.606694 0.169194 -v 0.062500 0.606694 0.169194 -v -0.062500 0.518306 0.080806 -v 0.062500 0.518306 0.080806 -v -0.062500 0.253141 0.345971 -v -0.062500 0.341529 0.434359 -v 0.062500 0.341529 0.434359 -v 0.062500 0.253141 0.345971 -v 0.250000 0.781250 0.031250 -v 0.250000 0.718750 0.031250 -v 0.250000 0.781250 -0.031250 -v 0.250000 0.718750 -0.031250 -v 0.312500 0.781250 -0.031250 -v 0.312500 0.781250 0.031250 -v 0.312500 0.718750 0.031250 -v 0.312500 0.718750 -0.031250 -v -0.093750 1.062500 -0.125000 -v 0.093750 1.062500 -0.125000 -v -0.093750 1.062500 -0.312500 -v 0.093750 1.062500 -0.312500 -v -0.093750 1.250000 -0.312500 -v -0.093750 1.250000 -0.125000 -v 0.093750 1.250000 -0.125000 -v 0.093750 1.250000 -0.312500 -v -0.093750 1.062500 0.312500 -v 0.093750 1.062500 0.312500 -v -0.093750 1.062500 0.125000 -v 0.093750 1.062500 0.125000 -v -0.093750 1.250000 0.125000 -v -0.093750 1.250000 0.312500 -v 0.093750 1.250000 0.312500 -v 0.093750 1.250000 0.125000 -vt 0.400000 -0.000000 -vt 0.200000 0.173913 -vt 0.200000 -0.000000 -vt 0.200000 0.304348 -vt 0.400000 0.478261 -vt 0.200000 0.478261 -vt 0.600000 0.173913 -vt 0.400000 0.304348 -vt 0.400000 0.173913 -vt 0.000000 0.304348 -vt 0.000000 0.173913 -vt 0.800000 0.173913 -vt 0.600000 0.304348 -vt 0.700000 0.304348 -vt 0.550000 0.369565 -vt 0.550000 0.304348 -vt 1.000000 0.304348 -vt 0.850000 0.369565 -vt 0.850000 0.304348 -vt 0.700000 0.369565 -vt 0.400000 0.369565 -vt 0.400000 0.304348 -vt 0.400000 0.478261 -vt 0.200000 0.652174 -vt 0.200000 0.478261 -vt 0.200000 0.826087 -vt 0.400000 1.000000 -vt 0.200000 1.000000 -vt 0.600000 0.652174 -vt 0.400000 0.826087 -vt 0.400000 0.652174 -vt -0.000000 0.826087 -vt -0.000000 0.652174 -vt 0.800000 0.652174 -vt 0.600000 0.826087 -vt 0.900000 0.260870 -vt 0.950000 0.043478 -vt 0.950000 0.260870 -vt 0.800000 0.043478 -vt 0.850000 0.260870 -vt 0.800000 0.260870 -vt 0.850000 -0.000000 -vt 0.800000 0.000000 -vt 0.800000 0.304348 -vt 0.850000 0.304348 -vt 0.850000 0.043478 -vt 0.900000 0.043478 -vt 1.000000 0.260870 -vt 0.900000 0.260870 -vt 0.950000 0.043478 -vt 0.950000 0.260870 -vt 0.800000 0.043478 -vt 0.850000 0.260870 -vt 0.800000 0.260870 -vt 0.850000 -0.000000 -vt 0.800000 0.000000 -vt 0.800000 0.304348 -vt 0.850000 0.304348 -vt 0.850000 0.043478 -vt 0.900000 0.043478 -vt 1.000000 0.260870 -vt 0.550000 0.369565 -vt 0.475000 0.434783 -vt 0.475000 0.369565 -vt 0.400000 0.043478 -vt 0.450000 0.000000 -vt 0.450000 0.043478 -vt 0.600000 0.173913 -vt 0.550000 0.043478 -vt 0.600000 0.043478 -vt 0.450000 0.173913 -vt 0.500000 0.043478 -vt 0.500000 0.173913 -vt 0.550000 0.173913 -vt 0.400000 0.173913 -vt 0.400000 0.000000 -vt 0.450000 0.043478 -vt 0.400000 0.043478 -vt 0.500000 0.173913 -vt 0.450000 0.173913 -vt 0.550000 0.043478 -vt 0.600000 0.173913 -vt 0.550000 0.173913 -vt 0.500000 0.043478 -vt 0.400000 0.173913 -vt 0.425000 0.521739 -vt 0.450000 0.543478 -vt 0.425000 0.543478 -vt 0.425000 0.565217 -vt 0.450000 0.565217 -vt 0.475000 0.543478 -vt 0.450000 0.521739 -vt 0.475000 0.521739 -vt 0.400000 0.521739 -vt 0.400000 0.543478 -vt 0.450000 0.500000 -vt 0.425000 0.500000 -vt 0.475000 0.500000 -vt 0.550000 0.565217 -vt 0.475000 0.565217 -vt 0.550000 0.434783 -vt 0.700000 0.434783 -vt 0.625000 0.500000 -vt 0.625000 0.434783 -vt 0.550000 0.500000 -vt 0.400000 0.500000 -vt 0.400000 0.434783 -vt 0.550000 0.369565 -vt 0.475000 0.434783 -vt 0.475000 0.369565 -vt 0.475000 0.500000 -vt 0.550000 0.565217 -vt 0.475000 0.565217 -vt 0.550000 0.434783 -vt 0.700000 0.434783 -vt 0.625000 0.500000 -vt 0.625000 0.434783 -vt 0.550000 0.500000 -vt 0.400000 0.500000 -vt 0.400000 0.434783 -vt 0.800000 0.304348 -vt 1.000000 0.369565 -vt 0.800000 0.826087 -vt 1.000000 0.043478 -vt 1.000000 0.043478 -vt 0.400000 0.000000 -vt 0.450000 0.000000 -vt 0.600000 0.043478 -vt 0.700000 0.500000 -vt 0.700000 0.500000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.7071 -0.7071 -vn 0.0000 -0.7071 0.7071 -vn 0.0000 0.7071 -0.7071 -vn 0.0000 0.7071 0.7071 -s off -f 3/1/1 2/2/1 1/3/1 -f 6/4/2 7/5/2 5/6/2 -f 3/7/3 8/8/3 4/9/3 -f 2/2/4 5/10/4 1/11/4 -f 4/9/5 6/4/5 2/2/5 -f 1/12/6 7/13/6 3/7/6 -f 12/14/5 15/15/5 10/16/5 -f 9/17/6 13/18/6 11/19/6 -f 11/19/3 16/20/3 12/14/3 -f 10/16/4 14/21/4 9/22/4 -f 19/23/1 18/24/1 17/25/1 -f 23/26/2 21/27/2 22/28/2 -f 19/29/3 24/30/3 20/31/3 -f 18/24/4 22/32/4 17/33/4 -f 20/31/5 23/26/5 18/24/5 -f 17/34/6 21/35/6 19/29/6 -f 27/36/1 26/37/1 25/38/1 -f 31/39/2 29/40/2 30/41/2 -f 28/42/5 31/39/5 26/43/5 -f 25/44/6 29/40/6 27/45/6 -f 27/36/3 32/46/3 28/47/3 -f 26/37/4 30/48/4 25/38/4 -f 35/49/1 34/50/1 33/51/1 -f 39/52/2 37/53/2 38/54/2 -f 36/55/5 39/52/5 34/56/5 -f 33/57/6 37/53/6 35/58/6 -f 35/49/3 40/59/3 36/60/3 -f 34/50/4 38/61/4 33/51/4 -f 67/62/1 66/63/1 65/64/1 -f 47/65/7 45/66/7 46/67/7 -f 42/68/5 48/69/5 47/70/5 -f 41/71/6 45/72/6 43/73/6 -f 43/73/8 48/69/8 44/74/8 -f 42/75/9 46/67/9 41/71/9 -f 53/76/8 55/77/8 54/78/8 -f 55/77/5 52/79/5 50/80/5 -f 53/81/6 49/82/6 51/83/6 -f 56/84/7 51/83/7 52/79/7 -f 54/78/10 50/80/10 49/85/10 -f 63/86/5 61/87/5 62/88/5 -f 57/89/2 61/87/2 59/90/2 -f 59/91/3 64/92/3 60/93/3 -f 58/94/4 62/88/4 57/95/4 -f 60/96/1 63/86/1 58/97/1 -f 71/98/2 69/99/2 70/100/2 -f 68/101/5 71/98/5 66/63/5 -f 65/102/6 69/103/6 67/104/6 -f 67/104/3 72/105/3 68/101/3 -f 66/63/4 70/106/4 65/107/4 -f 75/108/1 74/109/1 73/110/1 -f 79/111/2 77/112/2 78/113/2 -f 76/114/5 79/111/5 74/109/5 -f 73/115/6 77/116/6 75/117/6 -f 75/117/3 80/118/3 76/114/3 -f 74/109/4 78/119/4 73/120/4 -f 3/1/1 4/9/1 2/2/1 -f 6/4/2 8/8/2 7/5/2 -f 3/7/3 7/13/3 8/8/3 -f 2/2/4 6/4/4 5/10/4 -f 4/9/5 8/8/5 6/4/5 -f 1/12/6 5/121/6 7/13/6 -f 12/14/5 16/20/5 15/15/5 -f 9/17/6 14/122/6 13/18/6 -f 11/19/3 13/18/3 16/20/3 -f 10/16/4 15/15/4 14/21/4 -f 19/23/1 20/31/1 18/24/1 -f 23/26/2 24/30/2 21/27/2 -f 19/29/3 21/35/3 24/30/3 -f 18/24/4 23/26/4 22/32/4 -f 20/31/5 24/30/5 23/26/5 -f 17/34/6 22/123/6 21/35/6 -f 27/36/1 28/47/1 26/37/1 -f 31/39/2 32/46/2 29/40/2 -f 28/42/5 32/46/5 31/39/5 -f 25/44/6 30/41/6 29/40/6 -f 27/36/3 29/40/3 32/46/3 -f 26/37/4 31/124/4 30/48/4 -f 35/49/1 36/60/1 34/50/1 -f 39/52/2 40/59/2 37/53/2 -f 36/55/5 40/59/5 39/52/5 -f 33/57/6 38/54/6 37/53/6 -f 35/49/3 37/53/3 40/59/3 -f 34/50/4 39/125/4 38/61/4 -f 67/62/1 68/101/1 66/63/1 -f 47/65/7 48/126/7 45/66/7 -f 42/68/5 44/74/5 48/69/5 -f 41/71/6 46/67/6 45/72/6 -f 43/73/8 45/72/8 48/69/8 -f 42/75/9 47/65/9 46/67/9 -f 53/76/8 56/127/8 55/77/8 -f 55/77/5 56/84/5 52/79/5 -f 53/81/6 54/128/6 49/82/6 -f 56/84/7 53/81/7 51/83/7 -f 54/78/10 55/77/10 50/80/10 -f 63/86/5 64/92/5 61/87/5 -f 57/89/2 62/88/2 61/87/2 -f 59/91/3 61/87/3 64/92/3 -f 58/94/4 63/86/4 62/88/4 -f 60/96/1 64/92/1 63/86/1 -f 71/98/2 72/105/2 69/99/2 -f 68/101/5 72/105/5 71/98/5 -f 65/102/6 70/129/6 69/103/6 -f 67/104/3 69/103/3 72/105/3 -f 66/63/4 71/98/4 70/106/4 -f 75/108/1 76/114/1 74/109/1 -f 79/111/2 80/118/2 77/112/2 -f 76/114/5 80/118/5 79/111/5 -f 73/115/6 78/130/6 77/116/6 -f 75/117/3 77/116/3 80/118/3 -f 74/109/4 79/111/4 78/119/4 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 1b5db22f5..f9d9b867d 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -64,6 +64,7 @@ "block.fel": {"category": "block", "sounds": [{"name": "block/fel", "stream": false}]}, "block.hephaestusRunning": {"category": "block", "sounds": [{"name": "block/hephaestusRunning", "stream": false}]}, "block.squeakyToy": {"category": "block", "sounds": [{"name": "block/squeakyToy", "stream": false}]}, + "block.hunduns_magnificent_howl": {"category": "block", "sounds": [{"name": "block/hunduns_magnificent_howl", "stream": false}]}, "block.pyroOperate": {"category": "block", "sounds": [{"name": "block/pyroOperate", "stream": false}]}, "block.motor": {"category": "block", "sounds": [{"name": "block/motor", "stream": false}]}, "block.engine": {"category": "block", "sounds": [{"name": "block/engine", "stream": false}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/hunduns_magnificent_howl.ogg b/src/main/resources/assets/hbm/sounds/block/hunduns_magnificent_howl.ogg new file mode 100644 index 0000000000000000000000000000000000000000..69ece8b82ef8e81660c373525082f946d1448b9b GIT binary patch literal 62398 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%0Ab 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 delta 295 zcmV+?0oeYI0?`7HGk*aHNklIYdY*^ty4|tZAPWGkwRA?uaR8|68l{vKvSmx~-E52jpns~W^&=Q#$nzYfRBuev z)Yiui0PuaEIF9>$5Cls>3xI=@Q|@kW2*a?C-x+uJ_9=>DeS*vB6~{-1{RsCDj{uxS z(Pkq6BuN55Gk^bF+t#YHzQRvxV?fn3zXvpJ%g%84PYGVXZvIadUC%^Bt95KbT@5`@G7 z3Gt4xVR4;h3hAAbKQuc)q0&1=1Rb~JH#25hpV+^#`Je&Q( rV@T>o?_IAtn7oi<2O{G7-e(2c+%)o31`!?r0000F>4e-6vyAn6^bAd4nmqhB&IZtLI@T%Vl6`O6Qt3gL`%sf zBG^Pxf);)Pi3G8ox08D_ z|9NkA=aPVd!_Do~bj~0~XQq=f@6U66-8Bw3x6`86$JeF)JIdOlqEU4NBKb%GvJR90 zB(`Op-AX#Z`<;`laW^N=l^zMIkzQ80d_y=<=V)EM$!={Fpl%Mw$d1ihk2{A7_6{IB zrrn$X0D$X1K4$eo4JeeL?wCfjT(43D6{l#LX3v=$x2n4I(2@eAvO}?R<$8Rs4yRMV z?9pDP0{Hc+u#L`br<$_%#QX8+w=L_aO$<}`L z(E0KmU}P#A{i=~j(KeF}p-8qWq*5{&YI^``$G0TO$LEt|0iE@Yf%RwSc;<4h4uL5; z{ZLO^MeMaepZfz4WC61C#}>xnU~RwexU;@N-U+a?Rb_zxouo|X7$yb4U`3G0n*|sZ zU~FN0;On9zP@;0IDwx6@p$NmI0NB|rMMfavfIJxhK#mS@u(q%51RT!CP)Fq$odTFf zq^$y!wYP#~9G6+L03q!shoXE%S?0hr`T=NG|At8cIPf+NG~LOg3J7iI-Xe3gOMA9d zwi1|!K~5f>nNGxy%Qn@G2KO8*({4_bUh}tUPoB;p-%X9`fY)BynOE-t0wC(rrM zUcBo0T?R^9lsJh2d~kkVbc#?^Da8A*<9$&cb_MXs`68>~TD=@byv+ir*j-#og~ONc z-R{2l`CS%EbY8E*h3Aj^Vg)=x%f>EO?>;59M+K___%QnA(Z2lhZO?C9A0ozHSayva z<2nl{`cyHs0#MtdqV`jO>|E6ir9p_m?ZN#!ByFL#M}hO_0Zh?vl}`tSNbMD%4Adjl zr;#rRssq@}^;C1TuXDe^>w5taeqsj*oY(;ZC#V=e1$WlrdsY(_AaMGg2f%yvsMiU^ zh-fz_l*cZgPl!~c0P-@i?l|IxhVlM4@f_yb`S|a{N~623P#W8IQQPNUH((0_bsIrN z9YFsyz|{^J`I;td&UIy<8rCdeP$zH&zJA^|3Fj1108abV#56FbfxOs$0KPmc7Ya_Y z0AEIdklZ}&u{qb3eGVEp%H&=L0C1c7$saJMLtWVCzYjEBHu!G<1d`bb1;X~7POS*8& zZ`FCeiFh{=Il@Q6op=6%ubDH~ zlgj`AR%NUJ)Nnty@B6+0_8<_CY+aqMJkQs(4DLO9KJEz=#2_$moTPzIzWo6JfJc{3 z7bZtb~G!mGk1te)vxwc7ca?>drYS%U~4zcRNwlEebd(BG^y25*b=qz_w4YYM~x;}?_ zur_VBo<;(###F(mP#aK!($~56DjYdjDo0j01PbNI3c1X5NAw| Date: Fri, 15 Aug 2025 11:14:49 -0600 Subject: [PATCH 353/491] Update alloy.json --- src/main/resources/assets/hbm/manual/material/alloy.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/alloy.json b/src/main/resources/assets/hbm/manual/material/alloy.json index 0c583e585..f1f71dec4 100644 --- a/src/main/resources/assets/hbm/manual/material/alloy.json +++ b/src/main/resources/assets/hbm/manual/material/alloy.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_advanced_alloy", 1, 0], "trigger": [["hbm:item.ingot_advanced_alloy"], ["hbm:item.powder_advanced_alloy"], ["hbm:item.plate_advanced_alloy"]], "title": { - "en_US": "Advanced Alloy" + "en_US": "Advanced Alloy", + "ru_ru": "Продвинутый сплав" }, "content": { "en_US": "Made in a [[blast furnace|Blast Furnace]] from [[steel|Steel]] and [[Minecraft grade copper|Minecraft Grade Copper]]. Makes better-than-diamond gear. Also used in some high-powered magnets for the [[fusion reactor|Fusion Reactor]] and the [[exposure chamber|Exposure Chamber]]." + "ru_RU": "Изготовлено в [[доменной печи|Blast Furnace]] из [[стали|Steel]] и [[красной меди|Minecraft Grade Copper]]. Из него делают инструменты, превосходящие алмазные. Также используется в некоторых мощных магнитах для [[термоядерного реактора|Fusion Reactor]] и [[камеры облучения|Exposure Chamber]]." } } From 8ddc169c315be40e9aa4cae53e4d37bf445c6c78 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:38:35 -0600 Subject: [PATCH 354/491] Update arsenic.json --- src/main/resources/assets/hbm/manual/material/arsenic.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/arsenic.json b/src/main/resources/assets/hbm/manual/material/arsenic.json index b6bf7df40..01fe95509 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_arsenic", 1, 0], "trigger": [["hbm:item.ingot_arsenic"], ["hbm:item.nugget_arsenic"]], "title": { - "en_US": "Arsenic" + "en_US": "Arsenic", + "ru_RU": "Мышьяк" }, "content": { - "en_US": "Obtainable by treating oily scraps with [[high-performance solvent|High-Performance Solvent]] in an [[acidizer|Ore Acidizer]]. Oily scraps can be created by [[shredding|Shredder]] polluted blocks created by the [[fracking tower|Hydraulic Fracking Tower]]. Primarily used as [[arsenic bronze|Arsenic Bronze]]." + "en_US": "Obtainable by treating oily scraps with [[high-performance solvent|High-Performance Solvent]] in an [[acidizer|Ore Acidizer]]. Oily scraps can be created by [[shredding|Shredder]] polluted blocks created by the [[fracking tower|Hydraulic Fracking Tower]]. Primarily used as [[arsenic bronze|Arsenic Bronze]].", + "ru_RU": "Получается путем обработки нефтяных отходов [[высокоэффективным растворителем|High-Performance Solvent]] в [[рудном окислитиле|Ore Acidizer]]. Нефтяные отходы можно создать [[измельчением|Shredder]] загрязненных блоков, созданных [[башней гидроразрыва|Hydraulic Fracking Tower]]. В основном используется как [[мышьяковая бронза|Arsenic Bronze]]." } } From ad6c7c06a53c76381f0f62e1f8cf040f5e6c5e78 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:40:54 -0600 Subject: [PATCH 355/491] Update aluminium.json --- .../resources/assets/hbm/manual/material/aluminium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/aluminium.json b/src/main/resources/assets/hbm/manual/material/aluminium.json index 9e5732336..5a20169ae 100644 --- a/src/main/resources/assets/hbm/manual/material/aluminium.json +++ b/src/main/resources/assets/hbm/manual/material/aluminium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_aluminium", 1, 0], "trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]], "title": { - "en_US": "Aluminium" + "en_US": "Aluminium", + "ru_RU": "Алюминий" }, "content": { - "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.

Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages." + "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.

Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages.", + "ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путем обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозема.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет." } } From bdba1fc503e1aad87952ab7e79fecbc5508a8b3c Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:44:20 -0600 Subject: [PATCH 356/491] Update alloy.json --- src/main/resources/assets/hbm/manual/material/alloy.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/alloy.json b/src/main/resources/assets/hbm/manual/material/alloy.json index f1f71dec4..03ef80a7a 100644 --- a/src/main/resources/assets/hbm/manual/material/alloy.json +++ b/src/main/resources/assets/hbm/manual/material/alloy.json @@ -7,7 +7,7 @@ "ru_ru": "Продвинутый сплав" }, "content": { - "en_US": "Made in a [[blast furnace|Blast Furnace]] from [[steel|Steel]] and [[Minecraft grade copper|Minecraft Grade Copper]]. Makes better-than-diamond gear. Also used in some high-powered magnets for the [[fusion reactor|Fusion Reactor]] and the [[exposure chamber|Exposure Chamber]]." + "en_US": "Made in a [[blast furnace|Blast Furnace]] from [[steel|Steel]] and [[Minecraft grade copper|Minecraft Grade Copper]]. Makes better-than-diamond gear. Also used in some high-powered magnets for the [[fusion reactor|Fusion Reactor]] and the [[exposure chamber|Exposure Chamber]].", "ru_RU": "Изготовлено в [[доменной печи|Blast Furnace]] из [[стали|Steel]] и [[красной меди|Minecraft Grade Copper]]. Из него делают инструменты, превосходящие алмазные. Также используется в некоторых мощных магнитах для [[термоядерного реактора|Fusion Reactor]] и [[камеры облучения|Exposure Chamber]]." } } From 4c67d4d0c307225b457f7c25bd433600486bfcca Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:45:47 -0600 Subject: [PATCH 357/491] Update bscco.json --- src/main/resources/assets/hbm/manual/material/bscco.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/bscco.json b/src/main/resources/assets/hbm/manual/material/bscco.json index 4b25d11c0..a341b55af 100644 --- a/src/main/resources/assets/hbm/manual/material/bscco.json +++ b/src/main/resources/assets/hbm/manual/material/bscco.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_bscco", 1, 0], "trigger": [["hbm:item.ingot_bscco"], ["hbm:item.wire_dense", 1, 48]], "title": { - "en_US": "BSCCO" + "en_US": "BSCCO", + "ru_RU": "BSCCO" }, "content": { - "en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]]." + "en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]].", + "ru_RU": "Мощный сверхпроводник, используемый в высокоуровневых цепях и катушках для [[ускорителя частиц|Particle Accelerator]]. Требует [[висмута|Bismuth]], и поэтому доступен только после постройки [[РБМК|RBMK]]." } } From 5f041cde7d064d662237796f6b39dcb57a4cbd47 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:46:50 -0600 Subject: [PATCH 358/491] Update arsenic_bronze.json --- .../assets/hbm/manual/material/arsenic_bronze.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json index 450f8dd21..d53db5d12 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_arsenic_bronze", 1, 0], "trigger": [["hbm:item.ingot_arsenic_bronze"]], "title": { - "en_US": "Arsenic Bronze" + "en_US": "Arsenic Bronze", + "ru_RU": "Мышьяковая бронза" }, "content": { - "en_US": "Derivative of [[arsenic|Arsenic]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]] due to requiring [[high-performance solvent|High-Performance Solvent]].

Fully interchangeable with [[bismuth bronze|Bismuth Bronze]]." + "en_US": "Derivative of [[arsenic|Arsenic]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]] due to requiring [[high-performance solvent|High-Performance Solvent]].

Fully interchangeable with [[bismuth bronze|Bismuth Bronze]].", + "ru_RU": "Производное от [[мышьяка|Arsenic]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]] из-за требования [[высокоэффективного растворителя|High-Performance Solvent]].

Полностью взаимозаменяемо с [[висмутовой бронзой|Bismuth Bronze]]." } } From e6901d8134e4a77c28809e2e5d602fa072ab0093 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:47:36 -0600 Subject: [PATCH 359/491] Update bakelite.json --- src/main/resources/assets/hbm/manual/material/bakelite.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/bakelite.json b/src/main/resources/assets/hbm/manual/material/bakelite.json index 38d2a9dd1..d5d232149 100644 --- a/src/main/resources/assets/hbm/manual/material/bakelite.json +++ b/src/main/resources/assets/hbm/manual/material/bakelite.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_bakelite", 1, 0], "trigger": [["hbm:item.ingot_bakelite"], ["hbm:item.powder_bakelite"]], "title": { - "en_US": "Bakelite" + "en_US": "Bakelite", + "ru_RU": "Бакелит" }, "content": { - "en_US": "Alternative to [[polymer|Polymer]] made from [[aromatic hydrocarbons|Aromatic Hydrocarbons]] derived from [[cracked oil products|Catalytic Cracking Tower]]. Completely interchangeable in all recipes." + "en_US": "Alternative to [[polymer|Polymer]] made from [[aromatic hydrocarbons|Aromatic Hydrocarbons]] derived from [[cracked oil products|Catalytic Cracking Tower]]. Completely interchangeable in all recipes.", + "ru_RU": "Альтернатива [[полимеру|Polymer]], изготовленная из [[ароматических углеводородов|Aromatic Hydrocarbons]], полученных из [[продуктов крекинга нефти|Catalytic Cracking Tower]]. Полностью взаимозаменяема во всех рецептах." } } From af9780f57d38d5bda642caca73b0b0fc99ff0ac8 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:49:28 -0600 Subject: [PATCH 360/491] Update bismuth.json --- src/main/resources/assets/hbm/manual/material/bismuth.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/bismuth.json b/src/main/resources/assets/hbm/manual/material/bismuth.json index 369e6bf60..9b3105586 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_bismuth", 1, 0], "trigger": [["hbm:item.ingot_bismuth"], ["hbm:item.billet_bismuth"], ["hbm:item.nugget_bismuth"], ["hbm:item.powder_bismuth"]], "title": { - "en_US": "Bismuth" + "en_US": "Bismuth", + "ru_RU": "Висмут" }, "content": { - "en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]]." + "en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]].", + "ru_RU": "Тяжелый металл, первоначально получаемый из переработки отработанного топлива [[РБМК|RBMK]] в [[SILEX]], также может быть получен из поздних стадий обработки бедроковой руды с использованием [[высокоэффективного растворителя|High-Performance Solvent]]. В основном используется в виде [[висмутовай бронзы|Bismuth Bronze]]." } } From 907d97e1bae64b9c5267f8c08a5c4ec517aafe6d Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:50:01 -0600 Subject: [PATCH 361/491] Update bismuth_bronze.json --- .../assets/hbm/manual/material/bismuth_bronze.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json index fcb22393f..07167ba3d 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_bismuth_bronze", 1, 0], "trigger": [["hbm:item.ingot_bismuth_bronze"]], "title": { - "en_US": "Bismuth Bronze" + "en_US": "Bismuth Bronze", + "ru_RU": "Висмутовая бронза" }, "content": { - "en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].

Fully interchangeable with [[arsenic bronze|Arsenic Bronze]]." + "en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].

Fully interchangeable with [[arsenic bronze|Arsenic Bronze]].", + "ru_RU": "Производное от [[висмута|Bismuth]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]].

Полностью взаимозаменяемо с [[мышьяковой бронзой|Arsenic Bronze]]." } } From 3ddad84863e9ed3e611e9106ac2ae32cb2a1c4f3 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:51:11 -0600 Subject: [PATCH 362/491] Update cadmium.json --- src/main/resources/assets/hbm/manual/material/cadmium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/cadmium.json b/src/main/resources/assets/hbm/manual/material/cadmium.json index fb9281a02..14d06bebe 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_cadmium", 1, 0], "trigger": [["hbm:item.ingot_cadmium"], ["hbm:item.powder_cadmium"]], "title": { - "en_US": "Cadmium" + "en_US": "Cadmium", + "ru_RU": "Кадмий" }, "content": { - "en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute." + "en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute.", + "ru_RU": "Изготовлен путем обработки листьев горчичной ивы [[высокоэффективным растворителем|High-Performance Solvent]]. Используется в [[ПВХ|PVC]], позднеигровом альтернативном рецепте для [[резины|Rubber]] и для [[кадмиевой стали|Cadmium Steel]], которая действует как замена [[технециевой стали|Technetium Steel]]." } } From c841002f701d3e107546384b9022b53d12585f53 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:55:30 -0600 Subject: [PATCH 363/491] Update cadmium_steel.json --- .../resources/assets/hbm/manual/material/cadmium_steel.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json index 70cb3644b..48ce8d495 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_cdalloy", 1, 0], "trigger": [["hbm:item.ingot_cdalloy"]], "title": { - "en_US": "Cadmium Steel" + "en_US": "Cadmium Steel", + "ru_RU": "Кадмиевая сталь" }, "content": { - "en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes." + "en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes.", + "ru_RU": "Коррозионно-стойкий сплав, изготовленный из [[стали|Steel]] и [[кадмия|Cadmium]]. Альтернатива [[технециевой стали|Technetium Steel]] в большинстве рецептов." } } From 6def4eaac9d589e2883077c6518539d8d51e0f22 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:56:58 -0600 Subject: [PATCH 364/491] Update cinnabar.json --- src/main/resources/assets/hbm/manual/material/cinnabar.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/cinnabar.json b/src/main/resources/assets/hbm/manual/material/cinnabar.json index c142e7ff9..12bd758f9 100644 --- a/src/main/resources/assets/hbm/manual/material/cinnabar.json +++ b/src/main/resources/assets/hbm/manual/material/cinnabar.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.cinnebar", 1, 0], "trigger": [["hbm:item.cinnebar"]], "title": { - "en_US": "Cinnabar" + "en_US": "Cinnabar", + "ru_RU": "Киноварь" }, "content": { - "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production." + "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production.", + "ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в косксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деша|Desh]]." } } From 75dd1ea555067541e65a02e811e5fb4eea104274 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:10:00 -0600 Subject: [PATCH 365/491] Update coke.json --- src/main/resources/assets/hbm/manual/material/coke.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/coke.json b/src/main/resources/assets/hbm/manual/material/coke.json index fbf8d8631..b113bd25f 100644 --- a/src/main/resources/assets/hbm/manual/material/coke.json +++ b/src/main/resources/assets/hbm/manual/material/coke.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.coke", 1, 0], "trigger": [["hbm:item.coke", 1, 32767]], "title": { - "en_US": "Coke" + "en_US": "Coke", + "ru_RU": "Кокс" }, "content": { - "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].

Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.

Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.

Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]]." + "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].

Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.

Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.

Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]].", + "ru_RU": "Высокочистый углерод, имеет вдвое большую энергию сгорания, чем уголь. Может быть спрессован в [[графит|Graphite]], используется в различных рецептах [[стали|Steel]] или как источник углерода для [[плавильни|Crucible]].

Угольный кокс можно получить путем переплавки угольных брикетов или комбинированной переплавки угля в различных формах.

Бурый кокс изготавливается из более дешевого и менее мощного бурого угля тем же способом, но обладает теми же характеристиками.

Нефтяной кокс производится либо из неугольных смол в [[коксовой печи|Combination Oven]], либо путем коксования различных видов масла в [[коксовой установке|Coking Unit]]." } } From 0920358df496195e4afc333a6ed5d092e654f951 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:12:16 -0600 Subject: [PATCH 366/491] Update copper.json --- src/main/resources/assets/hbm/manual/material/copper.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json index e56f6d71d..e8e155732 100644 --- a/src/main/resources/assets/hbm/manual/material/copper.json +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_copper", 1, 0], "trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]], "title": { - "en_US": "Copper" + "en_US": "Copper", + "ru_RU": "Медь" }, "content": { - "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils." + "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.", + "ru_RU": "Обычный ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]]." } } From f003235381bb4f2bb0d83dfa26e08426af0c044f Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:14:15 -0600 Subject: [PATCH 367/491] Update desh.json --- src/main/resources/assets/hbm/manual/material/desh.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json index 4de099c5a..c0d7ddbeb 100644 --- a/src/main/resources/assets/hbm/manual/material/desh.json +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_desh", 1, 0], "trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]], "title": { - "en_US": "Desh" + "en_US": "Desh", + "ru_RU": "Деш" }, "content": { - "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities." + "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.", + "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деша, которая представляет собой просто [[измельченные|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей." } } From a88b7ef5dfbc5fd71ede53641f345aaed5127c0e Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:15:33 -0600 Subject: [PATCH 368/491] Update ferrouranium.json --- .../resources/assets/hbm/manual/material/ferrouranium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/ferrouranium.json b/src/main/resources/assets/hbm/manual/material/ferrouranium.json index 86629c988..687434042 100644 --- a/src/main/resources/assets/hbm/manual/material/ferrouranium.json +++ b/src/main/resources/assets/hbm/manual/material/ferrouranium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_ferrouranium", 1, 0], "trigger": [["hbm:item.ingot_ferrouranium"]], "title": { - "en_US": "Ferrouranium" + "en_US": "Ferrouranium", + "ru_RU": "Ферроуран" }, "content": { - "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition." + "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition.", + "ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[тигле|Crucible]]. В основном используется в дюкрете, деталях оружий и взрывных боеприпасах." } } From 74b0e4e929e3aed1812eb74ab3c77155ac7dcfd6 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:16:14 -0600 Subject: [PATCH 369/491] Update graphite.json --- src/main/resources/assets/hbm/manual/material/graphite.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/graphite.json b/src/main/resources/assets/hbm/manual/material/graphite.json index 9d0624a78..22bcccc21 100644 --- a/src/main/resources/assets/hbm/manual/material/graphite.json +++ b/src/main/resources/assets/hbm/manual/material/graphite.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_graphite", 1, 0], "trigger": [["hbm:item.ingot_graphite"]], "title": { - "en_US": "Graphite" + "en_US": "Graphite", + "ru_RU": "Графит" }, "content": { - "en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes." + "en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes.", + "ru_RU": "Изготавливается путем прессования кокса. Используется в ядерных реакторах, графитовых электродах для [[электродуговой печи|Electric Arc Furnace]] или как источник углерода в различных рецептах для [[плавильни|Crucible]]." } } From 7741330fec8dd674419778019034ff34afb46a61 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:16:48 -0600 Subject: [PATCH 370/491] Update gunmetal.json --- src/main/resources/assets/hbm/manual/material/gunmetal.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/gunmetal.json b/src/main/resources/assets/hbm/manual/material/gunmetal.json index bf6ee920e..f5d89a0b1 100644 --- a/src/main/resources/assets/hbm/manual/material/gunmetal.json +++ b/src/main/resources/assets/hbm/manual/material/gunmetal.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_gunmetal", 1, 0], "trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]], "title": { - "en_US": "Gunmetal" + "en_US": "Gunmetal", + "ru_RU": "Оружейный металл" }, "content": { - "en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition." + "en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition.", + "ru_RU": "Сплав из [[алюминия|Aluminium]] и [[меди|Copper]]. Может быть изготовлен на наковальне или более эффективно в [[роторной печи|Rotary Furnace]]. В основном используется для деталей оружия, а также для гильз большинства боеприпасов." } } From adc57e79b4211f6bcc25db2e3829977860712974 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:17:24 -0600 Subject: [PATCH 371/491] Update hss.json --- src/main/resources/assets/hbm/manual/material/hss.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/hss.json b/src/main/resources/assets/hbm/manual/material/hss.json index a74dfddaf..26380d6c5 100644 --- a/src/main/resources/assets/hbm/manual/material/hss.json +++ b/src/main/resources/assets/hbm/manual/material/hss.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_dura_steel", 1, 0], "trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]], "title": { - "en_US": "High-Speed Steel" + "en_US": "High-Speed Steel", + "ru_RU": "Высокоскоростная сталь" }, "content": { - "en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable." + "en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable.", + "ru_RU": "Сплав из [[стали|Steel]], [[вольфрама|Tungsten]] и [[кобальта|Cobalt]], изготовленный в [[плавильне|Crucible]]. Создается в виде жидкого металла, требует отливки в форму слитка или пластины перед использованием." } } From 10513425267a859b0174dbf8c68dff7368e372c8 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:18:22 -0600 Subject: [PATCH 372/491] Update latex.json --- src/main/resources/assets/hbm/manual/material/latex.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/latex.json b/src/main/resources/assets/hbm/manual/material/latex.json index c070e21e3..b2a4a5beb 100644 --- a/src/main/resources/assets/hbm/manual/material/latex.json +++ b/src/main/resources/assets/hbm/manual/material/latex.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_biorubber", 1, 0], "trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]], "title": { - "en_US": "Latex" + "en_US": "Latex", + "ru_RU": "Латекс" }, "content": { - "en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa." + "en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa.", + "ru_RU": "Натуральная форма резины, добывается из одуванчиков или путем прессования древесины джунглей. Может быть заменена во всех рецептах на [[резину|Rubber]], но не наоборот." } } From 0748abae077312fa3c6563eda98916750b29441c Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:18:39 -0600 Subject: [PATCH 373/491] Update lead.json --- src/main/resources/assets/hbm/manual/material/lead.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/lead.json b/src/main/resources/assets/hbm/manual/material/lead.json index 9735111c3..b4d919e1a 100644 --- a/src/main/resources/assets/hbm/manual/material/lead.json +++ b/src/main/resources/assets/hbm/manual/material/lead.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_lead", 1, 0], "trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]], "title": { - "en_US": "Lead" + "en_US": "Lead", + "ru_RU": "Свинец" }, "content": { - "en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits." + "en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits.", + "ru_RU": "Обычный ресурс. В основном используется для вещей, связанных с радиацией, а также для боеприпасов и в качестве припоя для многих схем." } } From aaff82553986817dc6567e4a22704c5608c83298 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:20:22 -0600 Subject: [PATCH 374/491] Update mingrade.json --- src/main/resources/assets/hbm/manual/material/mingrade.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/mingrade.json b/src/main/resources/assets/hbm/manual/material/mingrade.json index 73e1a6827..a65b8ad99 100644 --- a/src/main/resources/assets/hbm/manual/material/mingrade.json +++ b/src/main/resources/assets/hbm/manual/material/mingrade.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_red_copper", 1, 0], "trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]], "title": { - "en_US": "Minecraft Grade Copper (Red Copper)" + "en_US": "Minecraft Grade Copper (Red Copper)", + "ru_RU": "Медь Minecraft (Красная медь)" }, "content": { - "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form." + "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form.", + "ru_RU": "Сплав, изготовленный из меди и красного камня в равных частях в [[доменной печи|Blast Furnace]]. Используется почти во всех электрических устройствах, обычно в виде проволоки." } } From 8e102c3fc8406ca1cc8106f6a6e588c20530cb0a Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:21:07 -0600 Subject: [PATCH 375/491] Update neptunium.json --- .../resources/assets/hbm/manual/material/neptunium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/neptunium.json b/src/main/resources/assets/hbm/manual/material/neptunium.json index a730ab7cd..90b6c56a5 100644 --- a/src/main/resources/assets/hbm/manual/material/neptunium.json +++ b/src/main/resources/assets/hbm/manual/material/neptunium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_neptunium", 1, 0], "trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]], "title": { - "en_US": "Neptunium" + "en_US": "Neptunium", + "ru_RU": "Нептуний" }, "content": { - "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]]." + "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]].", + "ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащенное нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащенное нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]]." } } From 0911ddc4231ee587463eb87a7c0da65280110ec1 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:24:01 -0600 Subject: [PATCH 376/491] Update plutonium-238.json --- .../resources/assets/hbm/manual/material/plutonium-238.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-238.json b/src/main/resources/assets/hbm/manual/material/plutonium-238.json index 74e61a1de..d770353f4 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-238.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-238.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_pu238", 1, 0], "trigger": [["hbm:item.ingot_pu238"], ["hbm:item.billet_pu238"], ["hbm:item.nugget_pu238"]], "title": { - "en_US": "Plutonium-238" + "en_US": "Plutonium-238", + "ru_RU": "Плутоний-238" }, "content": { - "en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].

Moderately radioactive, very hot." + "en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].

Moderately radioactive, very hot.", + "ru_RU": "Радиоизотоп, в основном используется в [[РТГ|RTG]]. Получается из гексафторида [[плутония|Plutonium]] или из различных ядерных топлив, преимущественно использующих [[уран-235|Uranium-235]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Плутоний-210-Бериллий для [[РБМК|RBMK]].

Умеренно радиоактивен, очень горячий." } } From d8a627259780bcf244116b3f8c1b1179cdc27153 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:24:51 -0600 Subject: [PATCH 377/491] Update plutonium-239.json --- .../resources/assets/hbm/manual/material/plutonium-239.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-239.json b/src/main/resources/assets/hbm/manual/material/plutonium-239.json index 307242d98..b29fe03a0 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-239.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-239.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_pu239", 1, 0], "trigger": [["hbm:item.ingot_pu239"], ["hbm:item.billet_pu239"], ["hbm:item.nugget_pu239"]], "title": { - "en_US": "Plutonium-239" + "en_US": "Plutonium-239", + "ru_RU": "Плутоний-239" }, "content": { - "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.

Moderately radioactive." + "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.

Moderately radioactive.", + "ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащенных топливах для различных реакторов, в смеси с другими изотопами для менее обогащенных топлив или как делящийся материал во многих ядерных бомбах.

Умеренно радиоактивен." } } From 07a6b144c8da445cdd9727083ee0d6859259754c Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:25:18 -0600 Subject: [PATCH 378/491] Update plutonium-240.json --- .../resources/assets/hbm/manual/material/plutonium-240.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-240.json b/src/main/resources/assets/hbm/manual/material/plutonium-240.json index 3a024fec6..859bfd7c0 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-240.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-240.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_pu240", 1, 0], "trigger": [["hbm:item.ingot_pu240"], ["hbm:item.billet_pu240"], ["hbm:item.nugget_pu240"]], "title": { - "en_US": "Plutonium-240" + "en_US": "Plutonium-240", + "ru_RU": "Плутоний-240" }, "content": { - "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or inspecialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]]." + "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or inspecialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].", + "ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[циркониевых|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]]." } } From 2bd11fdd71250ba416adb7ea3e3866ff9c13d328 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:25:58 -0600 Subject: [PATCH 379/491] Update plutonium-241.json --- .../resources/assets/hbm/manual/material/plutonium-241.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json index 8edf8eddc..b10bb4ed9 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-241.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-241.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_pu241", 1, 0], "trigger": [["hbm:item.ingot_pu241"], ["hbm:item.billet_pu241"], ["hbm:item.nugget_pu241"]], "title": { - "en_US": "Plutonium-241" + "en_US": "Plutonium-241", + "ru_RU": "Плутоний-241" }, "content": { - "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive." + "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive.", + "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанных топлив [[РБМК|RBMK]], богатых [[плутонием-240|Plutonium-240]], а также из определенных типов [[циркониевых|Zirconium]] топлив быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащенное топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен." } } From 96976e9fb4cf9014b566a6165e3ea9a16dbd0ec1 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:26:51 -0600 Subject: [PATCH 380/491] Update plutonium-rg.json --- .../resources/assets/hbm/manual/material/plutonium-rg.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json index 9164df069..75a1b4975 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_pu_mix", 1, 0], "trigger": [["hbm:item.ingot_pu_mix"], ["hbm:item.billet_pu_mix"], ["hbm:item.nugget_pu_mix"]], "title": { - "en_US": "Reactor-Grade Plutonium" + "en_US": "Reactor-Grade Plutonium", + "ru_RU": "Плутоний реакторного качества" }, "content": { - "en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.

Moderately radioactive." + "en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.

Moderately radioactive.", + "ru_RU": "Смесь [[плутония-239|Plutonium-239]] и [[плутония-240|Plutonium-240]]. Обычный результат переработки многих топлив на основе [[урана|Uranium]], а также при размножении урана в [[Чикагской полленице|Chicago Pile]]. Используется во многих реакторах как среднеобогащенное плутониевое топливо.

Умеренно радиоактивен." } } From 61ab6dda7b445db1ca350bc21617ccbf2033f73d Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:27:31 -0600 Subject: [PATCH 381/491] Update plutonium.json --- .../resources/assets/hbm/manual/material/plutonium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium.json b/src/main/resources/assets/hbm/manual/material/plutonium.json index 7952e22e5..719c14800 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_plutonium", 1, 0], "trigger": [["hbm:item.ingot_plutonium"], ["hbm:item.billet_plutonium"], ["hbm:item.nugget_plutonium"], ["hbm:item.powder_plutonium"]], "title": { - "en_US": "Plutonium" + "en_US": "Plutonium", + "ru_RU": "Плутоний" }, "content": { - "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.

Moderately radioactive.

See also:
[[Plutonium-238]]
[[Plutonium-239]]
[[Plutonium-240]]
[[Plutonium-241]]" + "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.

Moderately radioactive.

See also:
[[Plutonium-238]]
[[Plutonium-239]]
[[Plutonium-240]]
[[Plutonium-241]]", + "ru_RU": "Редкая форма нечистого плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определенных рецептов [[циклотрона|Cyclotron]].

Умеренно радиоактивен.

См. также:
[[Плутоний-238|Plutonium-238]]
[[Плутоний-239|Plutonium-239]]
[[Плутоний-240|Plutonium-240]]
[[Плутоний-241|Plutonium-241]]" } } From 8c696a6f643c5565ffe6eeb49ffdb431ec955b73 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:28:11 -0600 Subject: [PATCH 382/491] Update polonium.json --- src/main/resources/assets/hbm/manual/material/polonium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json index 00fac7d84..c36e74218 100644 --- a/src/main/resources/assets/hbm/manual/material/polonium.json +++ b/src/main/resources/assets/hbm/manual/material/polonium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_polonium", 1, 0], "trigger": [["hbm:item.ingot_polonium"], ["hbm:item.billet_polonium"], ["hbm:item.nugget_polonium"]], "title": { - "en_US": "Polonium-210" + "en_US": "Polonium-210", + "ru_RU": "Полоний-210" }, "content": { - "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot." + "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot.", + "ru_RU": "Радиоизотоп, получаемый из переработки нейтронных источников [[радия-226|Radium-226]]. Используется для [[РТГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках Полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий." } } From 81f9915e54ee71df7091a4914509397e7b11099c Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:28:38 -0600 Subject: [PATCH 383/491] Update polymer.json --- src/main/resources/assets/hbm/manual/material/polymer.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/polymer.json b/src/main/resources/assets/hbm/manual/material/polymer.json index 1fbd464c2..9c540925b 100644 --- a/src/main/resources/assets/hbm/manual/material/polymer.json +++ b/src/main/resources/assets/hbm/manual/material/polymer.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_polymer", 1, 0], "trigger": [["hbm:item.ingot_polymer"], ["hbm:item.powder_polymer"]], "title": { - "en_US": "Polymer" + "en_US": "Polymer", + "ru_RU": "Полимер" }, "content": { - "en_US": "Polymer ('Teflon') is the first available type of plastic. Requires [[petroleum gas|Petroleum Gas]] and therefore [[oil processing|Crude Oil]].

Fully interchangable with [[Bakelite]], which becomes available after [[oil cracking|Catalytic Cracking Tower]]." + "en_US": "Polymer ('Teflon') is the first available type of plastic. Requires [[petroleum gas|Petroleum Gas]] and therefore [[oil processing|Crude Oil]].

Fully interchangable with [[Bakelite]], which becomes available after [[oil cracking|Catalytic Cracking Tower]].", + "ru_RU": "Полимер ('Тефлон') — первый доступный тип пластика. Требует [[нефтяного газа|Petroleum Gas]] и, следовательно, [[переработки нефти|Crude Oil]].

Полностью взаимозаменяем с [[бакелитом|Bakelite]], который становится доступным после [[крекинга нефти|Catalytic Cracking Tower]]." } } From 37cee61269cf46670e03bfdabae367dcebfcaaa6 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:30:23 -0600 Subject: [PATCH 384/491] Update radium.json --- src/main/resources/assets/hbm/manual/material/radium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/radium.json b/src/main/resources/assets/hbm/manual/material/radium.json index 6ec2dcd92..0821eace7 100644 --- a/src/main/resources/assets/hbm/manual/material/radium.json +++ b/src/main/resources/assets/hbm/manual/material/radium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_ra226", 1, 0], "trigger": [["hbm:item.ingot_ra226"], ["hbm:item.billet_ra226"], ["hbm:item.nugget_ra226"], ["hbm:item.powder_ra226"]], "title": { - "en_US": "Radium-226" + "en_US": "Radium-226", + "ru_RU": "Радий-226" }, "content": { - "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.

Moderately radioactive." + "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.

Moderately radioactive.", + "ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечен с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.

Умеренно радиоактивен." } } From bbe87c34c3449b1962a9462525c4451979acb999 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:31:34 -0600 Subject: [PATCH 385/491] Update rubber.json --- src/main/resources/assets/hbm/manual/material/rubber.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/rubber.json b/src/main/resources/assets/hbm/manual/material/rubber.json index 9db9ddc37..e317d6752 100644 --- a/src/main/resources/assets/hbm/manual/material/rubber.json +++ b/src/main/resources/assets/hbm/manual/material/rubber.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_rubber", 1, 0], "trigger": [["hbm:item.ingot_rubber"]], "title": { - "en_US": "Rubber" + "en_US": "Rubber", + "ru_RU": "Резина" }, "content": { - "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe." + "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe.", + "ru_RU": "Продукт переработки нефти, получаемый из [[ненасыщенных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах." } } From f6ce5b5ae746248af25ba5bbe9f09c3f982e1f9c Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:33:30 -0600 Subject: [PATCH 386/491] Update silicon.json --- src/main/resources/assets/hbm/manual/material/silicon.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/silicon.json b/src/main/resources/assets/hbm/manual/material/silicon.json index 4a6f8defd..67951240c 100644 --- a/src/main/resources/assets/hbm/manual/material/silicon.json +++ b/src/main/resources/assets/hbm/manual/material/silicon.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_silicon", 1, 0], "trigger": [["hbm:item.ingot_silicon"], ["hbm:item.billet_silicon"], ["hbm:item.nugget_silicon"]], "title": { - "en_US": "Silicon" + "en_US": "Silicon", + "ru_RU": "Кремний" }, "content": { - "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing." + "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing.", + "ru_RU": "Важный материал для производства интегральных схем и любой электроники, более сложной, чем аналоговые схемы. Производится в [[электродуговой печи|Electric Arc Furnace]] из материалов, содержащих диоксид кремния, таких как обычный песок, незер-кварц, стекловолокно, кремень или [[асбест|Asbestos]]. В основном используется в виде пластин (т.е. заготовок), которые [[прессуются|Burner Press]] с использованием штампа для схем, а затем превращаются в различные типы микросхем. Из-за необходимости в дуговой печи кремний доступен после получения [[полимера|Polymer]], что требует переработки [[нефти|Crude Oil]]." } } From 170984820931311404acfbc26a98eddcc71cbe78 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:34:22 -0600 Subject: [PATCH 387/491] Update sodium.json --- src/main/resources/assets/hbm/manual/material/sodium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/sodium.json b/src/main/resources/assets/hbm/manual/material/sodium.json index 5165042e0..6ad6ac6f7 100644 --- a/src/main/resources/assets/hbm/manual/material/sodium.json +++ b/src/main/resources/assets/hbm/manual/material/sodium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.powder_sodium", 1, 0], "trigger": [["hbm:item.powder_sodium"]], "title": { - "en_US": "Sodium" + "en_US": "Sodium", + "ru_RU": "Натрий" }, "content": { - "en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant." + "en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant.", + "ru_RU": "В основном добывается из содалита, драгоценного камня, который является побочным продуктом [[центрифуги|Centrifuge]] при переработке многих руд. Используется в жидкой форме как мощный охладитель для [[ВВЭР|PWR]]." } } From 84c69e7803cf2d200b3fe86ee9136ed6abfa9dfc Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:35:04 -0600 Subject: [PATCH 388/491] Update steel.json --- src/main/resources/assets/hbm/manual/material/steel.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/steel.json b/src/main/resources/assets/hbm/manual/material/steel.json index 113d25af1..c9260f2c5 100644 --- a/src/main/resources/assets/hbm/manual/material/steel.json +++ b/src/main/resources/assets/hbm/manual/material/steel.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_steel", 1, 0], "trigger": [["hbm:item.ingot_steel"], ["hbm:item.plate_steel"], ["hbm:item.powder_steel"]], "title": { - "en_US": "Steel" + "en_US": "Steel", + "ru_RU": "Сталь" }, "content": { - "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]]." + "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].", + "ru_RU": "Улучшенная версия железа, базовый материал. Используется почти во всем. Изначально получается путем комбинирования угля и железа в [[доменной печи|Blast Furnace]]. Улучшенные рецепты доступны позже через [[плавильню|Crucible]] и [[роторную печь|Rotary Furnace]]." } } From cdda91f2d83772c31e3616db52e62ba126b89176 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:35:44 -0600 Subject: [PATCH 389/491] Update sulfur.json --- src/main/resources/assets/hbm/manual/material/sulfur.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index 32a07b988..c73d90cb5 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.sulfur", 1, 0], "trigger": [["hbm:item.sulfur"]], "title": { - "en_US": "Sulfur" + "en_US": "Sulfur", + "ru_RU": "Сера" }, "content": { - "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye." + "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", + "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных целей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в йеллоукейке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве желтого красителя." } } From aa5c85ade5fc151a9fb43c1953ba09b86647c425 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:36:10 -0600 Subject: [PATCH 390/491] Update tantalium.json --- .../resources/assets/hbm/manual/material/tantalium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/tantalium.json b/src/main/resources/assets/hbm/manual/material/tantalium.json index 5368737b3..196550330 100644 --- a/src/main/resources/assets/hbm/manual/material/tantalium.json +++ b/src/main/resources/assets/hbm/manual/material/tantalium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_tantalium", 1, 0], "trigger": [["hbm:item.ingot_tantalium"], ["hbm:item.powder_tantalium"], ["hbm:item.nugget_tantalium"]], "title": { - "en_US": "Tantalium" + "en_US": "Tantalium", + "ru_RU": "Тантал" }, "content": { - "en_US": "Tantalium ('Tantalum') can be ectracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs." + "en_US": "Tantalium ('Tantalum') can be ectracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.", + "ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одном определенном регионе мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб." } } From c39854dbb419f31c23fe17838a2bdda515cdf363 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:36:49 -0600 Subject: [PATCH 391/491] Update technetium.json --- .../resources/assets/hbm/manual/material/technetium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/technetium.json b/src/main/resources/assets/hbm/manual/material/technetium.json index 97748ea2b..5eaef724f 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium.json +++ b/src/main/resources/assets/hbm/manual/material/technetium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_technetium", 1, 0], "trigger": [["hbm:item.billet_technetium"], ["hbm:item.ingot_technetium"], ["hbm:item.nugget_technetium"]], "title": { - "en_US": "Technetium" + "en_US": "Technetium", + "ru_RU": "Технеций" }, "content": { - "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.

Primarily used for [[technetium steel|Technetium Steel]].

Moderately radioactive." + "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.

Primarily used for [[technetium steel|Technetium Steel]].

Moderately radioactive.", + "ru_RU": "Синтетический металл, перерабатывается из топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых топлив [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.

В основном используется для [[технециевой стали|Technetium Steel]].

Умеренно радиоактивен." } } From 00980d937a4209e2246d11f98f0d3754157d5877 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:37:24 -0600 Subject: [PATCH 392/491] Update technetium_steel.json --- .../assets/hbm/manual/material/technetium_steel.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/technetium_steel.json b/src/main/resources/assets/hbm/manual/material/technetium_steel.json index 5f33be6c7..ac31ac861 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/technetium_steel.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_tcalloy", 1, 0], "trigger": [["hbm:item.ingot_tcalloy"], ["hbm:item.powder_tcalloy"]], "title": { - "en_US": "Technetium Steel" + "en_US": "Technetium Steel", + "ru_RU": "Технециевая сталь" }, "content": { - "en_US": "Alloy made from [[steel|Steel]] and [[technetium|Technetium]]. Corrosion resistant, used in stronger fluid tanks and many advanced machines. Obtainable after either a [[ZIRNOX]] or [[PWR]] due to technetium being synthetic.

Fully interchangable with [[cadmium steel|Cadmium Steel]]." + "en_US": "Alloy made from [[steel|Steel]] and [[technetium|Technetium]]. Corrosion resistant, used in stronger fluid tanks and many advanced machines. Obtainable after either a [[ZIRNOX]] or [[PWR]] due to technetium being synthetic.

Fully interchangeable with [[cadmium steel|Cadmium Steel]].", + "ru_RU": "Сплав из [[стали|Steel]] и [[технеция|Technetium]]. Устойчив к коррозии, используется в более прочных резервуарах для жидкостей и во многих продвинутых машинах. Доступен после [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]], так как технеций является синтетическим.

Полностью взаимозаменяем с [[кадмиевой сталью|Cadmium Steel]]." } } From a4b49633c6adaac005cb34917cd1a7d2838e0a82 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:38:13 -0600 Subject: [PATCH 393/491] Update thorium.json --- src/main/resources/assets/hbm/manual/material/thorium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/thorium.json b/src/main/resources/assets/hbm/manual/material/thorium.json index 1812f13e7..be512e7cc 100644 --- a/src/main/resources/assets/hbm/manual/material/thorium.json +++ b/src/main/resources/assets/hbm/manual/material/thorium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_th232", 1, 0], "trigger": [["hbm:item.ingot_th232"], ["hbm:item.billet_th232"], ["hbm:item.nugget_th232"], ["hbm:item.powder_thorium"]], "title": { - "en_US": "Thorium-232" + "en_US": "Thorium-232", + "ru_RU": "Торий-232" }, "content": { - "en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.

Slightly radioactive." + "en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.

Slightly radioactive.", + "ru_RU": "Фертильный (т.е. пригодный для размножения) изотоп, дающий [[уран-233|Uranium-233]]. Может быть облучен в [[РБМК|RBMK]] для производства [[ториевого топлива|Thorium Fuel]] или комбинирован с ураном-233. Топлива, производные от тория, обычно экономичны, но не очень мощные. Также используется в [[жидкой ториевой соли|Liquid Thorium Salt]], мощном охладителе [[ВВЭР|PWR]], превращающем его в реактор на расплавленных солях, который быстро производит большое количество урана-233.

Слабо радиоактивен." } } From 4c162e9f37e8fe074a083670c38ffde82ab11446 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:39:07 -0600 Subject: [PATCH 394/491] Update uranium-233.json --- .../resources/assets/hbm/manual/material/uranium-233.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/uranium-233.json b/src/main/resources/assets/hbm/manual/material/uranium-233.json index 1852de4c2..e0ab24b7d 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-233.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-233.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_u233", 1, 0], "trigger": [["hbm:item.ingot_u233"], ["hbm:item.billet_u233"], ["hbm:item.nugget_u233"]], "title": { - "en_US": "Uranium-233" + "en_US": "Uranium-233", + "ru_RU": "Уран-233" }, "content": { - "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].

Moderately radioactive." + "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].

Moderately radioactive.", + "ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путем переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащенное топливо урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].

Умеренно радиоактивен." } } From b8fa2a67d798e50a9056b513fb5d48fdd48fdbec Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:40:04 -0600 Subject: [PATCH 395/491] Update uranium-235.json --- .../resources/assets/hbm/manual/material/uranium-235.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json index 361c97c72..b9a75efc1 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-235.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-235.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_u235", 1, 0], "trigger": [["hbm:item.ingot_u235"], ["hbm:item.billet_u235"], ["hbm:item.nugget_u235"]], "title": { - "en_US": "Uranium-235" + "en_US": "Uranium-235", + "ru_RU": "Уран-235" }, "content": { - "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive." + "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive.", + "ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенных урановых топлив. Оружейное качество. Изначально создается путем переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен." } } From 2546cf79b7163c60a8bbcea5ae08bf80b0c431e3 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:40:41 -0600 Subject: [PATCH 396/491] Update uranium-238.json --- .../resources/assets/hbm/manual/material/uranium-238.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/uranium-238.json b/src/main/resources/assets/hbm/manual/material/uranium-238.json index bef789d01..ca87770e1 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-238.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-238.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.billet_u238", 1, 0], "trigger": [["hbm:item.ingot_u238"], ["hbm:item.billet_u238"], ["hbm:item.nugget_u238"]], "title": { - "en_US": "Uranium-238" + "en_US": "Uranium-238", + "ru_RU": "Уран-238" }, "content": { - "en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.

Slightly radioactive." + "en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.

Slightly radioactive.", + "ru_RU": "Истощенный уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроурание|Ferrouranium]], для [[боеприпасов с истощенным ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных топлив. Топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].

Слабо радиоактивен." } } From 563defd5f167a8bf81187cb68123ced56f5d6413 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:41:27 -0600 Subject: [PATCH 397/491] Update uranium.json --- src/main/resources/assets/hbm/manual/material/uranium.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json index 3c34cc07e..cfeec2dfc 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium.json +++ b/src/main/resources/assets/hbm/manual/material/uranium.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_uranium", 1, 0], "trigger": [["hbm:item.ingot_uranium"], ["hbm:item.billet_uranium"], ["hbm:item.nugget_uranium"], ["hbm:item.powder_uranium"], ["hbm:tile.ore_uranium"]], "title": { - "en_US": "Uranium" + "en_US": "Uranium", + "ru_RU": "Уран" }, "content": { - "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]" + "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]", + "ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащен путем превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]" } } From 458ee0a90e3488e3e8a00596c1927a8fb4580259 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:42:02 -0600 Subject: [PATCH 398/491] Update weaponsteel.json --- .../resources/assets/hbm/manual/material/weaponsteel.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/weaponsteel.json b/src/main/resources/assets/hbm/manual/material/weaponsteel.json index 87d951ce6..52e5c11ed 100644 --- a/src/main/resources/assets/hbm/manual/material/weaponsteel.json +++ b/src/main/resources/assets/hbm/manual/material/weaponsteel.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.ingot_weaponsteel", 1, 0], "trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]], "title": { - "en_US": "Weapon Steel" + "en_US": "Weapon Steel", + "ru_RU": "Оружейная сталь" }, "content": { - "en_US": "High-purity version of [[steel|Steel]] made in a [[rotary furnace|Rotary Furnace]]. Requires [[coker gas|Coker Gas]], and therefore a [[coker unit|Coker Unit]]. Used in many mid-game weapons, weapon modifications and missile warheads." + "en_US": "High-purity version of [[steel|Steel]] made in a [[rotary furnace|Rotary Furnace]]. Requires [[coker gas|Coker Gas]], and therefore a [[coker unit|Coker Unit]]. Used in many mid-game weapons, weapon modifications and missile warheads.", + "ru_RU": "Высококачественная версия [[стали|Steel]], изготовленная в [[роторной печи|Rotary Furnace]]. Требует [[коксовый газ|Coker Gas]] и, следовательно, [[коксовую установку|Coker Unit]]. Используется во многих оружиях среднего этапа игры, модификациях оружия и боеголовках ракет." } } From 4750b0eba2e80aae35bc004ba74fd8f3d489f918 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:45:41 -0600 Subject: [PATCH 399/491] Update aluminium.json --- src/main/resources/assets/hbm/manual/material/aluminium.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/aluminium.json b/src/main/resources/assets/hbm/manual/material/aluminium.json index 5a20169ae..9590844ad 100644 --- a/src/main/resources/assets/hbm/manual/material/aluminium.json +++ b/src/main/resources/assets/hbm/manual/material/aluminium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.

Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages.", - "ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путем обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозема.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет." + "ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозема.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет." } } From 470f950b1a35956479cd6df15a570f50c9c9cfad Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:46:08 -0600 Subject: [PATCH 400/491] Update aluminium.json --- src/main/resources/assets/hbm/manual/material/aluminium.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/aluminium.json b/src/main/resources/assets/hbm/manual/material/aluminium.json index 9590844ad..8bdf151bc 100644 --- a/src/main/resources/assets/hbm/manual/material/aluminium.json +++ b/src/main/resources/assets/hbm/manual/material/aluminium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.

Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages.", - "ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозема.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет." + "ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозёма.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет." } } From 9b412c726d107601986408efba0f64828e9febaf Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:48:35 -0600 Subject: [PATCH 401/491] Update cinnabar.json --- src/main/resources/assets/hbm/manual/material/cinnabar.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/cinnabar.json b/src/main/resources/assets/hbm/manual/material/cinnabar.json index 12bd758f9..bb721bf6f 100644 --- a/src/main/resources/assets/hbm/manual/material/cinnabar.json +++ b/src/main/resources/assets/hbm/manual/material/cinnabar.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production.", - "ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в косксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деша|Desh]]." + "ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в коксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деша|Desh]]." } } From 9ff54c2495c46d2700407df271d7c5dbbd4aba30 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:49:51 -0600 Subject: [PATCH 402/491] Update coke.json --- src/main/resources/assets/hbm/manual/material/coke.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/coke.json b/src/main/resources/assets/hbm/manual/material/coke.json index b113bd25f..ffc79a820 100644 --- a/src/main/resources/assets/hbm/manual/material/coke.json +++ b/src/main/resources/assets/hbm/manual/material/coke.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].

Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.

Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.

Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]].", - "ru_RU": "Высокочистый углерод, имеет вдвое большую энергию сгорания, чем уголь. Может быть спрессован в [[графит|Graphite]], используется в различных рецептах [[стали|Steel]] или как источник углерода для [[плавильни|Crucible]].

Угольный кокс можно получить путем переплавки угольных брикетов или комбинированной переплавки угля в различных формах.

Бурый кокс изготавливается из более дешевого и менее мощного бурого угля тем же способом, но обладает теми же характеристиками.

Нефтяной кокс производится либо из неугольных смол в [[коксовой печи|Combination Oven]], либо путем коксования различных видов масла в [[коксовой установке|Coking Unit]]." + "ru_RU": "Высокочистый углерод, имеет вдвое большую энергию сгорания, чем уголь. Может быть спрессован в [[графит|Graphite]], используется в различных рецептах [[стали|Steel]] или как источник углерода для [[плавильни|Crucible]].

Угольный кокс можно получить путем переплавки угольных брикетов или комбинированной переплавки угля в различных формах.

Бурый кокс изготавливается из более дешёвого и менее мощного бурого угля тем же способом, но обладает теми же характеристиками.

Нефтяной кокс производится либо из неугольных смол в [[коксовой печи|Combination Oven]], либо путем коксования различных видов масла в [[коксовой установке|Coking Unit]]." } } From c99f647e156c6f5ba2e83c459ed43042c2d7c8b9 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:55:42 -0600 Subject: [PATCH 403/491] Update desh.json --- src/main/resources/assets/hbm/manual/material/desh.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json index c0d7ddbeb..a34e741c7 100644 --- a/src/main/resources/assets/hbm/manual/material/desh.json +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.", - "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деша, которая представляет собой просто [[измельченные|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей." + "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деша, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей." } } From 9da95bbff3753eeeafc8faeeb05a1bc01efd417f Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:57:05 -0600 Subject: [PATCH 404/491] Update mingrade.json --- src/main/resources/assets/hbm/manual/material/mingrade.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/mingrade.json b/src/main/resources/assets/hbm/manual/material/mingrade.json index a65b8ad99..fe1732da5 100644 --- a/src/main/resources/assets/hbm/manual/material/mingrade.json +++ b/src/main/resources/assets/hbm/manual/material/mingrade.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form.", - "ru_RU": "Сплав, изготовленный из меди и красного камня в равных частях в [[доменной печи|Blast Furnace]]. Используется почти во всех электрических устройствах, обычно в виде проволоки." + "ru_RU": "Сплав, изготовленный из меди и красного камня в равных частях в [[доменной печи|Blast Furnace]]. Используется почти во всех электрических устройствах, обычно в виде проводов." } } From 2ad1c2121d00fcc1a6fb85ef8833197e67b6f7a9 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:58:10 -0600 Subject: [PATCH 405/491] Update neptunium.json --- src/main/resources/assets/hbm/manual/material/neptunium.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/neptunium.json b/src/main/resources/assets/hbm/manual/material/neptunium.json index 90b6c56a5..a68c7adb9 100644 --- a/src/main/resources/assets/hbm/manual/material/neptunium.json +++ b/src/main/resources/assets/hbm/manual/material/neptunium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]].", - "ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащенное нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащенное нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]]." + "ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащённое нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащённое нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]]." } } From 997ed75b791f1cd86519b61bb93a51a188c5b6ec Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:58:42 -0600 Subject: [PATCH 406/491] Update plutonium-239.json --- .../resources/assets/hbm/manual/material/plutonium-239.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-239.json b/src/main/resources/assets/hbm/manual/material/plutonium-239.json index b29fe03a0..f64b725f8 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-239.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-239.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.

Moderately radioactive.", - "ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащенных топливах для различных реакторов, в смеси с другими изотопами для менее обогащенных топлив или как делящийся материал во многих ядерных бомбах.

Умеренно радиоактивен." + "ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащённых топливах для различных реакторов, в смеси с другими изотопами для менее обогащённых топлив или как делящийся материал во многих ядерных бомбах.

Умеренно радиоактивен." } } From de4a35900203ded4632c0bc426d6a22ec2c89b43 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:59:18 -0600 Subject: [PATCH 407/491] Update plutonium-241.json --- .../resources/assets/hbm/manual/material/plutonium-241.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json index b10bb4ed9..096b8864c 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-241.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-241.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive.", - "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанных топлив [[РБМК|RBMK]], богатых [[плутонием-240|Plutonium-240]], а также из определенных типов [[циркониевых|Zirconium]] топлив быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащенное топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен." + "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанных топлив [[РБМК|RBMK]], богатых [[плутонием-240|Plutonium-240]], а также из определенных типов [[циркониевых|Zirconium]] топлив быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен." } } From 098ecd3791fe35c7c5bd0384c8e8a0fa02adf480 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:59:44 -0600 Subject: [PATCH 408/491] Update plutonium-rg.json --- src/main/resources/assets/hbm/manual/material/plutonium-rg.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json index 75a1b4975..c5cb2f1a4 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.

Moderately radioactive.", - "ru_RU": "Смесь [[плутония-239|Plutonium-239]] и [[плутония-240|Plutonium-240]]. Обычный результат переработки многих топлив на основе [[урана|Uranium]], а также при размножении урана в [[Чикагской полленице|Chicago Pile]]. Используется во многих реакторах как среднеобогащенное плутониевое топливо.

Умеренно радиоактивен." + "ru_RU": "Смесь [[плутония-239|Plutonium-239]] и [[плутония-240|Plutonium-240]]. Обычный результат переработки многих топлив на основе [[урана|Uranium]], а также при размножении урана в [[Чикагской полленице|Chicago Pile]]. Используется во многих реакторах как среднеобогащённое плутониевое топливо.

Умеренно радиоактивен." } } From 9b7332a047020c528cdd1b58e463917f28339977 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:00:32 -0600 Subject: [PATCH 409/491] Update radium.json --- src/main/resources/assets/hbm/manual/material/radium.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/radium.json b/src/main/resources/assets/hbm/manual/material/radium.json index 0821eace7..331d37adc 100644 --- a/src/main/resources/assets/hbm/manual/material/radium.json +++ b/src/main/resources/assets/hbm/manual/material/radium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.

Moderately radioactive.", - "ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечен с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.

Умеренно радиоактивен." + "ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечён с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.

Умеренно радиоактивен." } } From 9a47ec30f42013159ee104a55ee599e49a7b5d1f Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:03:46 -0600 Subject: [PATCH 410/491] Update sulfur.json --- src/main/resources/assets/hbm/manual/material/sulfur.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index c73d90cb5..7d9b5915b 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", - "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных целей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в йеллоукейке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве желтого красителя." + "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных целей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в йеллоукейке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя." } } From 74bd23d76ea11ba2f6fa840b3e9c16af85d7a49f Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:07:16 -0600 Subject: [PATCH 411/491] Update uranium-233.json --- src/main/resources/assets/hbm/manual/material/uranium-233.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/uranium-233.json b/src/main/resources/assets/hbm/manual/material/uranium-233.json index e0ab24b7d..d1802f419 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-233.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-233.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].

Moderately radioactive.", - "ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путем переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащенное топливо урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].

Умеренно радиоактивен." + "ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путём переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащенное топливо урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].

Умеренно радиоактивен." } } From ed67caa19c3b89727e6f74971f335395368c0756 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:08:48 -0600 Subject: [PATCH 412/491] Update arsenic.json --- src/main/resources/assets/hbm/manual/material/arsenic.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/arsenic.json b/src/main/resources/assets/hbm/manual/material/arsenic.json index 01fe95509..d54f92d25 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Obtainable by treating oily scraps with [[high-performance solvent|High-Performance Solvent]] in an [[acidizer|Ore Acidizer]]. Oily scraps can be created by [[shredding|Shredder]] polluted blocks created by the [[fracking tower|Hydraulic Fracking Tower]]. Primarily used as [[arsenic bronze|Arsenic Bronze]].", - "ru_RU": "Получается путем обработки нефтяных отходов [[высокоэффективным растворителем|High-Performance Solvent]] в [[рудном окислитиле|Ore Acidizer]]. Нефтяные отходы можно создать [[измельчением|Shredder]] загрязненных блоков, созданных [[башней гидроразрыва|Hydraulic Fracking Tower]]. В основном используется как [[мышьяковая бронза|Arsenic Bronze]]." + "ru_RU": "Получается путём обработки нефтяных отходов [[высокоэффективным растворителем|High-Performance Solvent]] в [[рудном окислитиле|Ore Acidizer]]. Нефтяные отходы можно создать [[измельчением|Shredder]] загрязненных блоков, созданных [[башней гидроразрыва|Hydraulic Fracking Tower]]. В основном используется как [[мышьяковая бронза|Arsenic Bronze]]." } } From 792dff062e22252e145136e3baa8145c6e06695e Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:09:10 -0600 Subject: [PATCH 413/491] Update cadmium.json --- src/main/resources/assets/hbm/manual/material/cadmium.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/cadmium.json b/src/main/resources/assets/hbm/manual/material/cadmium.json index 14d06bebe..0de201080 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute.", - "ru_RU": "Изготовлен путем обработки листьев горчичной ивы [[высокоэффективным растворителем|High-Performance Solvent]]. Используется в [[ПВХ|PVC]], позднеигровом альтернативном рецепте для [[резины|Rubber]] и для [[кадмиевой стали|Cadmium Steel]], которая действует как замена [[технециевой стали|Technetium Steel]]." + "ru_RU": "Изготовлен путём обработки листьев горчичной ивы [[высокоэффективным растворителем|High-Performance Solvent]]. Используется в [[ПВХ|PVC]], позднеигровом альтернативном рецепте для [[резины|Rubber]] и для [[кадмиевой стали|Cadmium Steel]], которая действует как замена [[технециевой стали|Technetium Steel]]." } } From 85895f7ce88eedcf4cc1b1ef2e3391269a470995 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:09:37 -0600 Subject: [PATCH 414/491] Update coke.json --- src/main/resources/assets/hbm/manual/material/coke.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/coke.json b/src/main/resources/assets/hbm/manual/material/coke.json index ffc79a820..234ab7588 100644 --- a/src/main/resources/assets/hbm/manual/material/coke.json +++ b/src/main/resources/assets/hbm/manual/material/coke.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].

Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.

Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.

Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]].", - "ru_RU": "Высокочистый углерод, имеет вдвое большую энергию сгорания, чем уголь. Может быть спрессован в [[графит|Graphite]], используется в различных рецептах [[стали|Steel]] или как источник углерода для [[плавильни|Crucible]].

Угольный кокс можно получить путем переплавки угольных брикетов или комбинированной переплавки угля в различных формах.

Бурый кокс изготавливается из более дешёвого и менее мощного бурого угля тем же способом, но обладает теми же характеристиками.

Нефтяной кокс производится либо из неугольных смол в [[коксовой печи|Combination Oven]], либо путем коксования различных видов масла в [[коксовой установке|Coking Unit]]." + "ru_RU": "Высокочистый углерод, имеет вдвое большую энергию сгорания, чем уголь. Может быть спрессован в [[графит|Graphite]], используется в различных рецептах [[стали|Steel]] или как источник углерода для [[плавильни|Crucible]].

Угольный кокс можно получить путём переплавки угольных брикетов или комбинированной переплавки угля в различных формах.

Бурый кокс изготавливается из более дешёвого и менее мощного бурого угля тем же способом, но обладает теми же характеристиками.

Нефтяной кокс производится либо из неугольных смол в [[коксовой печи|Combination Oven]], либо путём коксования различных видов масла в [[коксовой установке|Coking Unit]]." } } From ffd83ebef395992caea088d3b21c71b1ca2e1169 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:09:55 -0600 Subject: [PATCH 415/491] Update graphite.json --- src/main/resources/assets/hbm/manual/material/graphite.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/graphite.json b/src/main/resources/assets/hbm/manual/material/graphite.json index 22bcccc21..1876c53fa 100644 --- a/src/main/resources/assets/hbm/manual/material/graphite.json +++ b/src/main/resources/assets/hbm/manual/material/graphite.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes.", - "ru_RU": "Изготавливается путем прессования кокса. Используется в ядерных реакторах, графитовых электродах для [[электродуговой печи|Electric Arc Furnace]] или как источник углерода в различных рецептах для [[плавильни|Crucible]]." + "ru_RU": "Изготавливается путём прессования кокса. Используется в ядерных реакторах, графитовых электродах для [[электродуговой печи|Electric Arc Furnace]] или как источник углерода в различных рецептах для [[плавильни|Crucible]]." } } From 8ef85c4d04e9dd840766bda8e96e6d6600040309 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:10:12 -0600 Subject: [PATCH 416/491] Update latex.json --- src/main/resources/assets/hbm/manual/material/latex.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/latex.json b/src/main/resources/assets/hbm/manual/material/latex.json index b2a4a5beb..b5795bd32 100644 --- a/src/main/resources/assets/hbm/manual/material/latex.json +++ b/src/main/resources/assets/hbm/manual/material/latex.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa.", - "ru_RU": "Натуральная форма резины, добывается из одуванчиков или путем прессования древесины джунглей. Может быть заменена во всех рецептах на [[резину|Rubber]], но не наоборот." + "ru_RU": "Натуральная форма резины, добывается из одуванчиков или путём прессования древесины джунглей. Может быть заменена во всех рецептах на [[резину|Rubber]], но не наоборот." } } From eaadc3661839720c77b64e76fb507be8c738ca14 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:10:29 -0600 Subject: [PATCH 417/491] Update steel.json --- src/main/resources/assets/hbm/manual/material/steel.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/steel.json b/src/main/resources/assets/hbm/manual/material/steel.json index c9260f2c5..83c6f8867 100644 --- a/src/main/resources/assets/hbm/manual/material/steel.json +++ b/src/main/resources/assets/hbm/manual/material/steel.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].", - "ru_RU": "Улучшенная версия железа, базовый материал. Используется почти во всем. Изначально получается путем комбинирования угля и железа в [[доменной печи|Blast Furnace]]. Улучшенные рецепты доступны позже через [[плавильню|Crucible]] и [[роторную печь|Rotary Furnace]]." + "ru_RU": "Улучшенная версия железа, базовый материал. Используется почти во всем. Изначально получается путём комбинирования угля и железа в [[доменной печи|Blast Furnace]]. Улучшенные рецепты доступны позже через [[плавильню|Crucible]] и [[роторную печь|Rotary Furnace]]." } } From 9e2f116a32955783ad67ebc292e45eb51350a4fe Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:10:48 -0600 Subject: [PATCH 418/491] Update uranium-235.json --- src/main/resources/assets/hbm/manual/material/uranium-235.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json index b9a75efc1..56b101d67 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-235.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-235.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive.", - "ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенных урановых топлив. Оружейное качество. Изначально создается путем переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен." + "ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенных урановых топлив. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен." } } From 2db923173a1304d50f0805cedb85c28168a97cf8 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:11:05 -0600 Subject: [PATCH 419/491] Update uranium.json --- src/main/resources/assets/hbm/manual/material/uranium.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json index cfeec2dfc..89ab05f6b 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium.json +++ b/src/main/resources/assets/hbm/manual/material/uranium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]", - "ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащен путем превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]" + "ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащен путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]" } } From d669c4372e2ee49858bc43b9f41115dcdb671897 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 17 Aug 2025 12:03:09 +0300 Subject: [PATCH 420/491] Fix buzzsaw not replanting wheat occasionally --- .../hbm/tileentity/machine/TileEntityMachineAutosaw.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index f88c37ac3..7763e5ee7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -305,6 +305,14 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB entityItem.delayBeforeCanPickup = 10; worldObj.spawnEntityInWorld(entityItem); } + + // Apparently, until 1.14 full-grown wheat could sometimes drop no seeds at all + // This is a quick and dirty workaround for that. + if (b == Blocks.wheat && !replanted) { + replacementBlock = b; + replacementMeta = 0; + replanted = true; + } } worldObj.setBlock(x, y, z, replacementBlock, replacementMeta, 3); From bee95f9065cf3cfd7cef676dbd7a30d3cb0b5b98 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 17 Aug 2025 17:55:28 +0200 Subject: [PATCH 421/491] scrungus --- changelog | 7 +++++-- .../recipes/loader/SerializableRecipe.java | 2 +- .../com/hbm/itempool/ItemPoolsComponent.java | 12 ++++++++---- .../weapon/sedna/factory/XFactory12ga.java | 4 ++-- .../hbm/textures/models/trinkets/hundun.png | Bin 1336 -> 3240 bytes 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/changelog b/changelog index a06979124..c910a8ca3 100644 --- a/changelog +++ b/changelog @@ -1,11 +1,13 @@ ## Changed * QMAW now has buttons for returning to previously viewed pages -* QMAW file detection now includes subfolders to `manual` +* QMAW file detection now includes subfolders to `manual` in folder-based packs (which already worked in zip packs and the mod's jar file) * OpenComputers integration for the ZIRNOX should now return values in °C and bar instead of unexplained weird internal units * The sodium and strontium autogen ingots now have their correct hazard tags * Pattern matchers, like the one used on the automatic crafting table, no longer care about NBT data of an item * This means that RBMK fuel rods can now be automatically disassembled without the depletion number having to be a 100% match * Due to the way the RBMK uncrafting handler works, a single autocrafter now correctly supports RBMK fuel of one type of any depletion level, yielding the correct recycling pellets +* Blueprint folders have been added to more loot pools, making them less rare +* Replaced the winnie the pooh plushie with hundun ## Fixed * Fixed QMAW not working at all @@ -14,4 +16,5 @@ * Fixed chunkloading transport drones getting stuck due to off-by-one rounding errors * Fixed shift-click handling on the electric arc furnace not working with upgrades, and putting electrodes in the wrong slot * Fixed issue with the load order where custom fluids wouldn't work properly for fluid loading/unloading and in custom recipes -* Fixed balefire bomb not rendering the egg when fully loaded \ No newline at end of file +* Fixed balefire bomb not rendering the egg when fully loaded +* Fixed selenium steel 12ga casings having the wrong color \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 80567014d..2770da7c7 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -123,7 +123,7 @@ public abstract class SerializableRecipe { Reader reader = new InputStreamReader(stream); recipe.readRecipeStream(reader); recipe.modified = true; - } catch(IOException ex) { + } catch(Throwable ex) { MainRegistry.logger.error("Failed to reset synced recipe stream", ex); } } else if(recFile.exists() && recFile.isFile()) { diff --git a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java index 8f1a78633..1e4600988 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java @@ -109,7 +109,8 @@ public class ItemPoolsComponent { weighted(ModItems.can_mrsugar, 0, 1, 2, 2), weighted(ModItems.cap_nuka, 0, 1, 16, 2), weighted(ModItems.book_guide, 3, 1, 1, 1), - weighted(ModBlocks.deco_computer, 0, 1, 1, 1) + weighted(ModBlocks.deco_computer, 0, 1, 1, 1), + weighted(ModItems.blueprint_folder, 0, 1, 1, 1) }; }}; @@ -158,7 +159,8 @@ public class ItemPoolsComponent { weighted(ModItems.powder_bromine, 0, 1, 1, 1), weighted(ModItems.powder_cobalt, 0, 1, 1, 1), weighted(ModItems.powder_neodymium, 0, 1, 1, 1), - weighted(ModItems.powder_boron, 0, 1, 1, 1) + weighted(ModItems.powder_boron, 0, 1, 1, 1), + weighted(ModItems.blueprint_folder, 1, 1, 1, 1) }; }}; @@ -186,7 +188,9 @@ public class ItemPoolsComponent { weighted(Items.paper, 0, 1, 6, 7), weighted(Items.clock, 0, 1, 1, 3), weighted(Items.book, 0, 1, 5, 10), - weighted(Items.experience_bottle, 0, 1, 3, 1) + weighted(Items.experience_bottle, 0, 1, 3, 1), + weighted(ModItems.blueprint_folder, 0, 1, 1, 1), + weighted(ModItems.blueprint_folder, 1, 1, 1, 1) }; }}; @@ -222,7 +226,7 @@ public class ItemPoolsComponent { weighted(ModItems.pellet_rtg_weak,0, 0, 1, 1), }; }}; - + new ItemPool(POOL_REPAIR_MATERIALS) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.ingot_aluminium, 0, 2, 8, 3), diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index 44f9d046f..c70d33501 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -271,8 +271,8 @@ public class XFactory12ga { g12_phosphorus = new BulletConfig().setItem(EnumAmmo.G12_PHOSPHORUS).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 6).setProjectiles(8).setDamage(1F/8F).setSpread(magnumSpread).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x910001, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_PHOSPHORUS")) .setOnImpact((bullet, mop) -> { if(mop.entityHit != null && mop.entityHit instanceof EntityLivingBase) { HbmLivingProps data = HbmLivingProps.getData((EntityLivingBase) mop.entityHit); if(data.phosphorus < 300) data.phosphorus = 300; } }); //g12_anthrax = new BulletConfig().setItem(EnumAmmo.G12_ANTHRAX).setProjectiles(8).setDamage(1F/8F).setSpread(0.015F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x749300, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_ANTHRAX")); - g12_equestrian_bj = new BulletConfig().setItem(EnumAmmoSecret.G12_EQUESTRIAN).setDamage(0F).setOnImpact(LAMBDA_BOAT).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(SpentCasing.COLOR_CASE_EQUESTRIAN, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12gaEquestrianBJ")); - g12_equestrian_tkr = new BulletConfig().setItem(EnumAmmoSecret.G12_EQUESTRIAN).setDamage(0F).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(SpentCasing.COLOR_CASE_EQUESTRIAN, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12gaEquestrianTKR")); + g12_equestrian_bj = new BulletConfig().setItem(EnumAmmoSecret.G12_EQUESTRIAN).setDamage(0F).setOnImpact(LAMBDA_BOAT).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xB52B2B, SpentCasing.COLOR_CASE_EQUESTRIAN).setScale(0.75F).register("12gaEquestrianBJ")); + g12_equestrian_tkr = new BulletConfig().setItem(EnumAmmoSecret.G12_EQUESTRIAN).setDamage(0F).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xB52B2B, SpentCasing.COLOR_CASE_EQUESTRIAN).setScale(0.75F).register("12gaEquestrianTKR")); BulletConfig[] all = new BulletConfig[] {g12_bp, g12_bp_magnum, g12_bp_slug, g12, g12_slug, g12_flechette, g12_magnum, g12_explosive, g12_phosphorus}; diff --git a/src/main/resources/assets/hbm/textures/models/trinkets/hundun.png b/src/main/resources/assets/hbm/textures/models/trinkets/hundun.png index 70bf3b41ac40518fd407ed9e49c36f0326b127e1..ab600170cdf0a4dad27b1d005d397327eafa9c19 100644 GIT binary patch delta 3221 zcmV;G3~KYZ3aA;7Gk*+UNkl*Ufh@{ z3>`k;q`BYZ`MPJ!UApSE`ux)SA9?_=ZE!1=D=QfN@%K`Fj;!frg|4sr1x!(QSJ7MO z(OzebZG&4k6+I6K1i=BEq}MvS9jV@`MVz@<_9kZ*yvdmbBkjVOU3XUj0KJ8t;9R98 z(rPZka%BaMlYgDCwo1m;4GXT@;Ba%BbE z2DfI${IvAAM4R?gTht`5J^?sm&aDk1KhlRE-uRo}a08f}S@5dmMf~is5u%vOUks#2jQnFHV}JMgZa`&V4Zfq^e2s0igFsPk#mdCYpd~0Acknue0(CmMbd& z8cy40pyvS|XQ*T@@0VkBxNjz)?yjPU5~fE+fg6qXYIzYyyDPExO2(?LXQ$;g(g(=ed6JM{MA0o_X~#a`<{kWJ z$37I@5`bnWZs_m6UFYF7ES97er_M(9?>+H!90?;x_01VqcUQ4z{C|)$cj>C9v-fe1pw2uL-4f8<7{j4b z?KG|k|GwpGU-)CV7R#ER1}CA9{ecXkfE#a|#qNi40D#_OdDJJXP3Je>IE#J1NIwa< z`sUKlnNMHnp7BEt0Nk3o?D6r$Tpja?KEICA09-vwOczG|lMRzrn_U6`3=HQor56RM z5q~&LqkzZ>u=}ALdXMFif1n=#P>0X-`~&^SztE5BodxWkjD63c7Eq~g zlJ>Y6KY&uTZsa46HlS;u43*} z|4YkFJOTii`*d}q{}GdCw1hq5ha9frRbylb$4!9B9B|)(+P{14n%^nnbDph~d5Y!A z3W_LUxwZn-5ZLUHYR{UUCB$j~`Z85^G>fd8q(QXfR`MkC`Mq?m`z-vvkH^LUY=21Q zKzO_=Wj$RO4Ww8~X?3kJHY<9zVU!0j3Ak_8x6`V%a z^lYN56&tHV+>-5dVHC$6?zdJSz_V|rwE&Yd3!X|cqZkm!oUG~DL`!P{T#a(5a`c2C z%*g;`emH}2xvXc3qAAiN8KY!UL8IT|8!<%ot4FJJWH0dWZ7Lrhs!nD52_kaEyk4tu1dRZZr51?YYlzv;xCsohigB-x2!v`GdC*}jd ztG|6Obd>%7kBFUxt*#bwyMI40oC}UwM*(s&s@4mrU#_>yu^eYEmP64&+V{?yURKDY z9w5pDko40e$OhBIikKOlLAa0{&6Xf zJ1@E=t<)1p%5{rD)TWyR9HfzK*=F1H)1sv)Kv#6Zj~raZtInkvn7ee<+cSR1p^Tq| zjP+#{0O&P<1WBVU$$zv>KP|Kqz$D>A*SZxs?)2##KprI!xCYQI7E#9 zsG#ny;=;g#O;LbqBEqEds@@2ol}iEsZ=ua9&7OGoYGyKy#Xy5F})}!*obP)UV$O(c!z6RVrGV0bBHK zqXW=OzJID+rGh26RC0AlJ^{}Zl0!$yp?5!+O|@HDR}v<_4PaW|C0=SI?@An^Z8u-MLYMq) z9*PRc`!va^>(ns^&-qUe`+fm7A^{#Pm==xbqJI%7`CJ3(95kXKWA&n23T$=AQG+_R zw@u#$nks@?u{|pLFWX46pWHH!X^aMGUvijuyXo_2$(QdSmQetA0*|^S<1dz^_2^*5 z57pKdkuNZ*EQH6~rf&;P6Cg?48Mgs5)K+MOl?Sh1$Ay6hQLnAypxZbvqGXg%BHEn! z0DqKK!Eu_5GmNWf{*x|6lrZ#|uUXDqECuhImy*(D4;8n)5z z%v|u+-D~(uVOOGe;E@K`1W{YVR1A=rIDd|$cGxz38)&&ANR^M5*RoA#-yO%nSO1*D zx_dX#dr;M{N)yN^fYk4DWu+-6uiCfAOUUJT>Cs2gfAg)kLlwcT(zk`oHGq_SI_i>3 z>+W527Ip>4B=5j&J~@QCl|cF(0CKM4_5glN4H{=mO0JH+ZckuR`nJ%r2GF%d)qe}B z&rlkWq;iLf4KCX*SUWefX{H(y^D8d zE_eWxOkY>@KlkwCq35((QKNfbxd$-rH;aSc^AmY`9sQ(x0(JClA#olcX@6&77oMEI z0sxrm7zO|w*|`2IeCZ$mY8IHE#eeyo2OHM_rrZ`jk!7fsgTG1iC6x65j^ki*X2Gk? zF2VCWr0HM7XYc^@53ZxrX-Itk;5q<*f^7HhV4>0(Tzm7gP2+8$T3*D72BH?6V1#v-VA*pB7zYZ+Mu- z8JV^p0AByZ_h^6hovlsR+XvSp`)wmX(r0zgo^ASR(PRSTe*UccHydo%+-w9!Tzt>eE$1o@Xl!49EW00000NkvXX Hu0mjfP02he delta 1302 zcmV+x1?l>z8Mq3NGk*l{NklF>4e-6vyAn6^bAd4nmqhB&IZtLI@T%Vl6`O z6Qt3gL`%sfBG^Pxf);)Pi3G8ox08D_|9NkA=aPVd!_Do~bj~0~XQq=f@6U66-8Bw3w|~>3*T>hT{yWOrqoPrD z10wlI0kRI103^0$o!v@0!26w(tZ_Fd&y^kts*zq+xqL%7QRiq~y~%EE6rgSn$H!?i(PTQF; zhU?&I_Gk|}BU8}%@*QAgDjWT(kx0=tlMSIrwko7jG8t-n0BXm#B+19;lVky%^^Jk` zXXkk4a;^@6DLVa7Pg_OowLqWy0}x~Zvh&9l#^GRXzklzzv%W#z39z$OWq|*kq)g`+ zCI!G?MUcsx1sD}zY+-!h>!Kr2qH?S%n8F>Q2*acR*x4;bMj+yVJQ)B$jt+3Jwy*63 z9L~p3N97ou0+>dmtpb#_w}NCGmszp^A?+uJqI^YJ=D;-i0cckLhDiZ9@HP!J-N~a0 z2yN%yB7bwWOMA9dwi1|!K~5f>nNGxy%Qn@G2KO8*({4_bUh}tUPoB;p-%X9`fY z)BynOE-t0wC(rrMUcBo0T?R^9lsJh2d~kkVbc#?^Da8A*<9$&cb_MXs`68>~TD=@b zyv+ir*j-#og~ONc-R{2l`CS%EbY8E*h3Aj^Vt)lZLd(W3SMNS0wMPZ30{Afc<y=TpuFFURZXG9pgF+DEd?}wE|GvqoVdxfb3k=4W&Vd!0o~PJ0xwPwnu^U=K)O7 zZEMQP4a0R}8-Zly66j1<9`_#lV zFs6aL*nR-MJS!IpPO<=BMuCvrJngYL*MF6L4jMSh&csCGu_wD(*Cs5$s6u<=@iKcrXZ6f=+J%P6NxqpZX z5IB7bfY$*`&kLB|-<{(D0FI%ztOnQ5PhRV}PSGII)Lzqh0^1!=wtE6y#|%ysU@qN) zxpb>=Il@Q6op=6%ubDH~lgj`AR%NUJ)Nnty@B6+0_8<_CY+aqMJkQs(4DLO9KJEz= z#2_$moTPzIzWo6JfJc{37bI&&j^c`ItBb1P;3boWJ-m8v(1R zZWRE2|6EP;o*$v7as?3cJw7gq?mP3-fB!>AR}K~96G51=^;IFhLS6nAZJV!EuPc=+ zfE?*lM*Vpl8@lsriAv_>I@NK=RIUIV2$`4VUhWiCwJQ>dMEv3}8p}e@3lB01b^rhX M07*qoM6N<$f=JkPa{vGU From be03467f659aaf30f13616ac0f49944ce9f68a00 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 17 Aug 2025 23:09:50 +0200 Subject: [PATCH 422/491] slunkus the great, lord of death --- changelog | 7 ++++++- gradle.properties | 2 +- src/main/java/com/hbm/blocks/ModBlocks.java | 5 ++--- .../java/com/hbm/blocks/generic/BlockCrate.java | 12 +++--------- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../assets/hbm/manual/material/tantalium.json | 2 +- .../hbm/textures/blocks/trapdoor_steel.png | Bin 790 -> 446 bytes .../assets/hbm/textures/items/fluid_barrel.png | Bin 305 -> 355 bytes .../hbm/textures/items/fluid_barrel_overlay.png | Bin 208 -> 175 bytes 9 files changed, 14 insertions(+), 16 deletions(-) diff --git a/changelog b/changelog index c910a8ca3..377222992 100644 --- a/changelog +++ b/changelog @@ -8,6 +8,9 @@ * Due to the way the RBMK uncrafting handler works, a single autocrafter now correctly supports RBMK fuel of one type of any depletion level, yielding the correct recycling pellets * Blueprint folders have been added to more loot pools, making them less rare * Replaced the winnie the pooh plushie with hundun +* Retextured the universal fluid tanks and barrels again +* Updated steel trapdoor texture +* Removed the old hexafluoride tanks from the creative tab ## Fixed * Fixed QMAW not working at all @@ -17,4 +20,6 @@ * Fixed shift-click handling on the electric arc furnace not working with upgrades, and putting electrodes in the wrong slot * Fixed issue with the load order where custom fluids wouldn't work properly for fluid loading/unloading and in custom recipes * Fixed balefire bomb not rendering the egg when fully loaded -* Fixed selenium steel 12ga casings having the wrong color \ No newline at end of file +* Fixed selenium steel 12ga casings having the wrong color +* Fixed the buzzsaw sometimes not replanting crops +* Scrungus \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index fcfc33a9b..394982cb6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5418 +mod_build_number=5425 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 87269420e..d30f6b619 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1825,9 +1825,8 @@ public class ModBlocks { machine_rotary_furnace = new MachineRotaryFurnace(Material.iron).setBlockName("machine_rotary_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire"); machine_crystallizer = new MachineCrystallizer(Material.iron).setBlockName("machine_crystallizer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_crystallizer"); - machine_uf6_tank = new MachineUF6Tank(Material.iron).setBlockName("machine_uf6_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); - - machine_puf6_tank = new MachinePuF6Tank(Material.iron).setBlockName("machine_puf6_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + machine_uf6_tank = new MachineUF6Tank(Material.iron).setBlockName("machine_uf6_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); + machine_puf6_tank = new MachinePuF6Tank(Material.iron).setBlockName("machine_puf6_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); machine_reactor_breeding = new MachineReactorBreeding(Material.iron).setBlockName("machine_reactor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_reactor"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockCrate.java b/src/main/java/com/hbm/blocks/generic/BlockCrate.java index e24a62d78..abfebe1d1 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockCrate.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.Spaghetti; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.items.ModItems; @@ -16,6 +17,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +@Spaghetti("this is implemented in the most braindead fucking way imaginable") // TODO: rework this unholy abomination using configurable loot pools public class BlockCrate extends BlockFalling { List crateList; @@ -69,22 +71,16 @@ public class BlockCrate extends BlockFalling { // Lead Crate BlockCrate.addToListWithWeight(leadList, ModItems.ingot_uranium, 10); - // BlockCrate.addToListWithWeight(leadList, ModItems.ingot_u235, 5); BlockCrate.addToListWithWeight(leadList, ModItems.ingot_u238, 8); BlockCrate.addToListWithWeight(leadList, ModItems.ingot_plutonium, 7); - // BlockCrate.addToListWithWeight(leadList, ModItems.ingot_pu238, 5); - // BlockCrate.addToListWithWeight(leadList, ModItems.ingot_pu239, 4); BlockCrate.addToListWithWeight(leadList, ModItems.ingot_pu240, 6); BlockCrate.addToListWithWeight(leadList, ModItems.ingot_neptunium, 7); BlockCrate.addToListWithWeight(leadList, ModItems.ingot_uranium_fuel, 8); BlockCrate.addToListWithWeight(leadList, ModItems.ingot_plutonium_fuel, 7); BlockCrate.addToListWithWeight(leadList, ModItems.ingot_mox_fuel, 6); BlockCrate.addToListWithWeight(leadList, ModItems.nugget_uranium, 10); - // BlockCrate.addToListWithWeight(leadList, ModItems.nugget_u235, 5); BlockCrate.addToListWithWeight(leadList, ModItems.nugget_u238, 8); BlockCrate.addToListWithWeight(leadList, ModItems.nugget_plutonium, 7); - // BlockCrate.addToListWithWeight(leadList, ModItems.nugget_pu238, 5); - // BlockCrate.addToListWithWeight(leadList, ModItems.nugget_pu239, 4); BlockCrate.addToListWithWeight(leadList, ModItems.nugget_pu240, 6); BlockCrate.addToListWithWeight(leadList, ModItems.nugget_neptunium, 7); BlockCrate.addToListWithWeight(leadList, ModItems.nugget_uranium_fuel, 8); @@ -96,7 +92,6 @@ public class BlockCrate extends BlockFalling { BlockCrate.addToListWithWeight(leadList, ModItems.cell_puf6, 8); BlockCrate.addToListWithWeight(leadList, ModItems.pellet_rtg, 6); BlockCrate.addToListWithWeight(leadList, ModItems.pellet_rtg_weak, 7); - BlockCrate.addToListWithWeight(leadList, ModItems.tritium_deuterium_cake, 5); BlockCrate.addToListWithWeight(leadList, ModItems.powder_yellowcake, 10); // Metal Crate @@ -110,14 +105,13 @@ public class BlockCrate extends BlockFalling { BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_battery), 8); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_lithium_battery), 5); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_electric_furnace_off), 8); - BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_assembler), 10); + BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_assembly_machine), 10); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_fluidtank), 7); BlockCrate.addToListWithWeight(metalList, ModItems.centrifuge_element, 6); BlockCrate.addToListWithWeight(metalList, ModItems.motor, 8); BlockCrate.addToListWithWeight(metalList, ModItems.coil_tungsten, 7); BlockCrate.addToListWithWeight(metalList, ModItems.photo_panel, 3); BlockCrate.addToListWithWeight(metalList, ModItems.coil_copper, 10); - BlockCrate.addToListWithWeight(metalList, ModItems.tank_steel, 9); BlockCrate.addToListWithWeight(metalList, ModItems.blade_titanium, 3); BlockCrate.addToListWithWeight(metalList, ModItems.piston_selenium, 6); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 34f6c299c..b182de6f7 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5418)"; + public static final String VERSION = "1.0.27 BETA (5425)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/resources/assets/hbm/manual/material/tantalium.json b/src/main/resources/assets/hbm/manual/material/tantalium.json index 196550330..e3d0ee9c2 100644 --- a/src/main/resources/assets/hbm/manual/material/tantalium.json +++ b/src/main/resources/assets/hbm/manual/material/tantalium.json @@ -7,7 +7,7 @@ "ru_RU": "Тантал" }, "content": { - "en_US": "Tantalium ('Tantalum') can be ectracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.", + "en_US": "Tantalium ('Tantalum') can be extracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.", "ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одном определенном регионе мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб." } } diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_steel.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_steel.png index 23ed483c9f7729883c786aa7848c48f285ba3537..ec80cd8e007f6e10b75f7be63907ae4820da43a4 100644 GIT binary patch delta 421 zcmV;W0b2f+2EGH3BYyw{b3#c}2nYxWdo81+e#uoc%-oTyfK|HoNxB?%148C*?0aayT3S5RqIILfEVUnx^6Lc;LOqCF-x&i~W8NKv5LT^ZYdinCF=oBOwHwh#(@= zbLQ3Dt{tES(dnzm?Wh5llB^2*X7uyPA|){k?=1mNpAW&cpFDVHpz+l8cCk2 z{y1@(CWc{P97nF#Yo_eI|0QQFVHk!VBQ;HfwU)MRGmB)`PZK3HP4k|Ds%AakMwg(f zEX%U#g{tC=F^C9NRdK)HH@B*4eoP?*thIS9A{b-dMjpCcF8SpDebRpb{>arM#%M+= P00000NkvXXu0mjfI5Eh^ delta 767 zcmVH_m#Kqgef526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn z&37O?kvB}Yas*7vbK>JMZDw{(t9hcD2#qw;rW>w3nHWp*?|*u~A*AYcpX&Ahy+2p| zV%jwzR4Y7W*p4SG(=f5@*@`!WTaBE)D7-Hmb!0%{3#F$5epH+d_*Jo!jE_QC_0+Ou zoGN1@=a|C1!d+&*X#C8hz9f>irV~;-WOw2cXPg)sDT*wS$D>cGC7J#0>;LvmQ4o(I zZ<`eyab(GfH-9Q>QM#t3W<*cRlV?Tc{yR@MGdK`*kHnzr!S`Rfp=Jv{H+}!(!1q57 zq2eCStdhSVISs#wzFE?`_MmAEPR>hOY8y`1q5aO*9sOIXkR8rs;Q1IDW})Q@>gI#2 ze$F|%h2*OIqD$D>g&w)zwD1M(mS_QJK}voA000SaNPk�XT000XT0n*)m`~Uy} zPf0{UR5;6>lhKZXFc3uttQf&432%M^|NlWeX$Zy#R0t?wPP5Y#boXIzVp=+L+nIaE zAkXtjelU)sUBfW6dsaX8dcDLL<8pwBqDYR%qYT5~l6_(j1a3b~lRO>|+3j}r`*b>q z>HA*lx_`C-pO_?xODxNBR-sl0*KD_2o6KRBW$uDFj^%tli^dO!gNyC=d%0e(_EDpy zcU>n-K%@mq_kk8X2-mDuE8$1-5+t>4JJScO*K1Lp@e}+qpU%$ zLSXeRRvRssVIZMtnve3(;G4yW3C9f*H~LekPysia%|{H5b%7!I%|^9~)_faPH@F5{ x)bFaQoQSH8R&lvp?6+?tdpk%)QOJM)(r;~L+{vGC7Q_Gm002ovPDHLkV1l$&atHtb diff --git a/src/main/resources/assets/hbm/textures/items/fluid_barrel.png b/src/main/resources/assets/hbm/textures/items/fluid_barrel.png index fdc4318612fa761aed083d119c28fc133ed9d215..d3f440a4b383be28aeb52d7510637dd50f408c95 100644 GIT binary patch delta 339 zcmV-Z0j&P90^$p5$hK`)fTAciPHT-Z25T+P=QGg!#$qqjT7M&@49tZP0PEf)Fz`YE zDJA0Ki%cz~yoQ2uu$Rj4@Q(c1({DY~v>7zXBf-gw`euL(Tnc@9#%Ltx+qaict(bN^4^@#%K> zFoh#NZs1{pcuWdjEQFx0>+cDaQdCt15KO^2$23ieL9$HO>vgr(a=+g(#%%xK^?Cs$ l%XGM+0O#|0-JfHj#~*c8pi1?5T($rJ002ovPDHLkV1flEm6QMg delta 289 zcmaFNw2^6oWIZzj1A~Sxe=v|@EDmyaVpw-h<|UBBlJ4m1$iT3%pZiZDE08Z2;1l8+ z85!x|;80v#tgWrx)6=tH!2%y2pIy6lUA}x7sAS^Z)9Zm0S4ogx@P8O!*mOqcJW!Og zz$3Dlfr0NZ2s0kfUy%Y7%<-&uaSYK2F6|5CJD|Yf+^x{}JHBG=i+|USwCr=x_GWHzV=8wj0;t^|@Kk?rY z3p0N)&18;P_f73ezf*JKIKN1Te7rBxzDnF?D@$bZtp}5V7W1V>c&7RKGH6KwIUGO? S0+)h8QVgE1elF{r5}E)ufoQ(~ diff --git a/src/main/resources/assets/hbm/textures/items/fluid_barrel_overlay.png b/src/main/resources/assets/hbm/textures/items/fluid_barrel_overlay.png index 518122010d2046d12f05a8818cded6184e8ccec2..7a1e2b4245899c7a2f3a6a9e84b35a68e05328e0 100644 GIT binary patch delta 130 zcmV-|0Db?^0j~j&G<#-AL_t(IjqQ-J4S+BV1Rul>nbOl_piB{W?mttQiijYHf{-W> zSNU!I+cNO;J~2k$>v_~j(n-3iHvMh@N#9Ua9L)f*^a4T%NGVmFbG{dFW;C;AHvEGt kx)+pEYAqtu(`8>}1%Ngyh`j|%@c;k-07*qoM6N<$f|f=$`v3p{ delta 164 zcmV;V09*gB0nh=EG=GOlL_t(IjqQ=K4Z|=D1Yd!d)jTS=iwgD{K1QekRb5qdz4cAU2o1gytjGa?x!Wp?9A-@zK6EW233s`RRsWuNX&chOX;>K zkMLD+IbjZ*VP>xjJ|zl>C|zwKB519l)|w72J)4+0K5^V`W*rz~fQT0V4{!(4_(jYF Sy0`!U0000 Date: Mon, 18 Aug 2025 22:07:50 +0800 Subject: [PATCH 423/491] Update zh_CN.lang --- src/main/resources/assets/hbm/lang/zh_CN.lang | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index c220e14b9..eb7c5f99b 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -6138,3 +6138,6 @@ purex.schrab=从 %s 中萃取Sa326 tile.machine_purex.name=钚铀还原提取设备(PUREX) tile.machine_purex.desc=可用于多种核燃料的再处理机器。$大多数配方需要用到硝酸和煤油。 qmaw.tab=[按 %s 键获取帮助] +commands.locate.no_match=没有具有此名称的结构! +commands.locate.none_found=未在附近找到结构! +commands.locate.success.coordinates=在 %d, %d 处找到结构 %s From a0451b46a5720d71cc83db181a558e0bef41d97f Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 18 Aug 2025 16:35:50 +0200 Subject: [PATCH 424/491] the glunch --- changelog | 25 +- gradle.properties | 2 +- .../com/hbm/handler/BobmazonOfferFactory.java | 3 + .../hbm/handler/DispenserBehaviorHandler.java | 313 ++++++++++++++++++ src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 2 + src/main/java/com/hbm/main/MainRegistry.java | 313 +----------------- 7 files changed, 326 insertions(+), 334 deletions(-) create mode 100644 src/main/java/com/hbm/handler/DispenserBehaviorHandler.java diff --git a/changelog b/changelog index 377222992..d3d8a6554 100644 --- a/changelog +++ b/changelog @@ -1,25 +1,6 @@ ## Changed -* QMAW now has buttons for returning to previously viewed pages -* QMAW file detection now includes subfolders to `manual` in folder-based packs (which already worked in zip packs and the mod's jar file) -* OpenComputers integration for the ZIRNOX should now return values in °C and bar instead of unexplained weird internal units -* The sodium and strontium autogen ingots now have their correct hazard tags -* Pattern matchers, like the one used on the automatic crafting table, no longer care about NBT data of an item - * This means that RBMK fuel rods can now be automatically disassembled without the depletion number having to be a 100% match - * Due to the way the RBMK uncrafting handler works, a single autocrafter now correctly supports RBMK fuel of one type of any depletion level, yielding the correct recycling pellets -* Blueprint folders have been added to more loot pools, making them less rare -* Replaced the winnie the pooh plushie with hundun -* Retextured the universal fluid tanks and barrels again -* Updated steel trapdoor texture -* Removed the old hexafluoride tanks from the creative tab +* Blueprint folders can now be bought on bobmazon (64 for blue recipes, 256 for beige ones) ## Fixed -* Fixed QMAW not working at all -* Potentially fixed a bug where proxy tile entities would reference unloaded core tile entities which would cause bizarre item voiding/duping issues in rare cases -* Fixed fusion reactor automation being able to remove items other than the breeding output slot -* Fixed chunkloading transport drones getting stuck due to off-by-one rounding errors -* Fixed shift-click handling on the electric arc furnace not working with upgrades, and putting electrodes in the wrong slot -* Fixed issue with the load order where custom fluids wouldn't work properly for fluid loading/unloading and in custom recipes -* Fixed balefire bomb not rendering the egg when fully loaded -* Fixed selenium steel 12ga casings having the wrong color -* Fixed the buzzsaw sometimes not replanting crops -* Scrungus \ No newline at end of file +* Fixed the QMAW loader crashing servers + * Oops \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 394982cb6..03457ea9b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5425 +mod_build_number=5426 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/handler/BobmazonOfferFactory.java b/src/main/java/com/hbm/handler/BobmazonOfferFactory.java index e0b3c4560..e53b5f603 100644 --- a/src/main/java/com/hbm/handler/BobmazonOfferFactory.java +++ b/src/main/java/com/hbm/handler/BobmazonOfferFactory.java @@ -39,6 +39,9 @@ public class BobmazonOfferFactory { standard.add(new Offer(new ItemStack(ModItems.gun_kit_1, 1), Requirement.ASSEMBLY, 16)); standard.add(new Offer(new ItemStack(ModItems.geiger_counter, 1), Requirement.NONE, 16)); standard.add(new Offer(new ItemStack(ModItems.matchstick, 16), Requirement.STEEL, 2)); + //blueprints + standard.add(new Offer(new ItemStack(ModItems.blueprint_folder, 1, 0), Requirement.ASSEMBLY, 64)); + standard.add(new Offer(new ItemStack(ModItems.blueprint_folder, 1, 1), Requirement.OIL, 256)); //plants standard.add(new Offer(new ItemStack(Blocks.sapling, 1, 3), Requirement.STEEL, 12, 9)); standard.add(new Offer(new ItemStack(ModBlocks.plant_flower, 1, EnumFlowerType.FOXGLOVE.ordinal()), Requirement.STEEL, 16, 5)); diff --git a/src/main/java/com/hbm/handler/DispenserBehaviorHandler.java b/src/main/java/com/hbm/handler/DispenserBehaviorHandler.java new file mode 100644 index 000000000..b6fba216b --- /dev/null +++ b/src/main/java/com/hbm/handler/DispenserBehaviorHandler.java @@ -0,0 +1,313 @@ +package com.hbm.handler; + +import com.hbm.entity.grenade.EntityGrenadeASchrab; +import com.hbm.entity.grenade.EntityGrenadeBlackHole; +import com.hbm.entity.grenade.EntityGrenadeBreach; +import com.hbm.entity.grenade.EntityGrenadeBurst; +import com.hbm.entity.grenade.EntityGrenadeCloud; +import com.hbm.entity.grenade.EntityGrenadeCluster; +import com.hbm.entity.grenade.EntityGrenadeDynamite; +import com.hbm.entity.grenade.EntityGrenadeElectric; +import com.hbm.entity.grenade.EntityGrenadeFire; +import com.hbm.entity.grenade.EntityGrenadeFlare; +import com.hbm.entity.grenade.EntityGrenadeFrag; +import com.hbm.entity.grenade.EntityGrenadeGas; +import com.hbm.entity.grenade.EntityGrenadeGascan; +import com.hbm.entity.grenade.EntityGrenadeGeneric; +import com.hbm.entity.grenade.EntityGrenadeIFBouncy; +import com.hbm.entity.grenade.EntityGrenadeIFBrimstone; +import com.hbm.entity.grenade.EntityGrenadeIFConcussion; +import com.hbm.entity.grenade.EntityGrenadeIFGeneric; +import com.hbm.entity.grenade.EntityGrenadeIFHE; +import com.hbm.entity.grenade.EntityGrenadeIFHopwire; +import com.hbm.entity.grenade.EntityGrenadeIFImpact; +import com.hbm.entity.grenade.EntityGrenadeIFIncendiary; +import com.hbm.entity.grenade.EntityGrenadeIFMystery; +import com.hbm.entity.grenade.EntityGrenadeIFNull; +import com.hbm.entity.grenade.EntityGrenadeIFSpark; +import com.hbm.entity.grenade.EntityGrenadeIFSticky; +import com.hbm.entity.grenade.EntityGrenadeIFToxic; +import com.hbm.entity.grenade.EntityGrenadeImpactGeneric; +import com.hbm.entity.grenade.EntityGrenadeLemon; +import com.hbm.entity.grenade.EntityGrenadeMIRV; +import com.hbm.entity.grenade.EntityGrenadeMk2; +import com.hbm.entity.grenade.EntityGrenadeNuclear; +import com.hbm.entity.grenade.EntityGrenadeNuke; +import com.hbm.entity.grenade.EntityGrenadePC; +import com.hbm.entity.grenade.EntityGrenadePlasma; +import com.hbm.entity.grenade.EntityGrenadePoison; +import com.hbm.entity.grenade.EntityGrenadePulse; +import com.hbm.entity.grenade.EntityGrenadeSchrabidium; +import com.hbm.entity.grenade.EntityGrenadeShrapnel; +import com.hbm.entity.grenade.EntityGrenadeSmart; +import com.hbm.entity.grenade.EntityGrenadeStrong; +import com.hbm.entity.grenade.EntityGrenadeTau; +import com.hbm.entity.grenade.EntityGrenadeZOMG; +import com.hbm.entity.grenade.EntityWastePearl; +import com.hbm.items.ModItems; +import com.hbm.items.tool.ItemFertilizer; +import com.hbm.items.weapon.ItemGenericGrenade; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.BehaviorProjectileDispense; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.dispenser.IPosition; +import net.minecraft.entity.IProjectile; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; + +public class DispenserBehaviorHandler { + + public static void init() { + + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_generic, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeGeneric(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_strong, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeStrong(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_frag, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeFrag(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_fire, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeFire(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_cluster, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeCluster(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_flare, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeFlare(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_electric, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeElectric(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_poison, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadePoison(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_gas, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeGas(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_schrabidium, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeSchrabidium(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_nuke, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeNuke(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_nuclear, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeNuclear(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_pulse, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadePulse(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_plasma, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadePlasma(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_tau, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeTau(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_lemon, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeLemon(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_mk2, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeMk2(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_aschrab, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeASchrab(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_zomg, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeZOMG(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_shrapnel, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeShrapnel(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_black_hole, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeBlackHole(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_gascan, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeGascan(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_cloud, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeCloud(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_pink_cloud, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadePC(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_smart, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeSmart(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_mirv, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeMIRV(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_breach, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeBreach(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_burst, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeBurst(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_generic, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFGeneric(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_he, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFHE(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_bouncy, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFBouncy(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_sticky, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFSticky(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_impact, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFImpact(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_incendiary, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFIncendiary(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_toxic, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFToxic(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_concussion, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFConcussion(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_brimstone, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFBrimstone(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_mystery, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFMystery(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_spark, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFSpark(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_hopwire, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFHopwire(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_null, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeIFNull(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.nuclear_waste_pearl, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityWastePearl(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.stick_dynamite, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeDynamite(world, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_kyiv, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeImpactGeneric(world, position.getX(), position.getY(), position.getZ()).setType((ItemGenericGrenade) ModItems.grenade_kyiv); + } + }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.stick_dynamite_fishing, new BehaviorProjectileDispense() { + protected IProjectile getProjectileEntity(World world, IPosition position) { + return new EntityGrenadeImpactGeneric(world, position.getX(), position.getY(), position.getZ()).setType((ItemGenericGrenade) ModItems.stick_dynamite_fishing); + } + }); + + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.powder_fertilizer, new BehaviorDefaultDispenseItem() { + + private boolean dispenseSound = true; + @Override protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) { + + EnumFacing facing = BlockDispenser.func_149937_b(source.getBlockMetadata()); + World world = source.getWorld(); + int x = source.getXInt() + facing.getFrontOffsetX(); + int y = source.getYInt() + facing.getFrontOffsetY(); + int z = source.getZInt() + facing.getFrontOffsetZ(); + this.dispenseSound = ItemFertilizer.useFertillizer(stack, world, x, y, z); + return stack; + } + @Override protected void playDispenseSound(IBlockSource source) { + if(this.dispenseSound) { + source.getWorld().playAuxSFX(1000, source.getXInt(), source.getYInt(), source.getZInt(), 0); + } else { + source.getWorld().playAuxSFX(1001, source.getXInt(), source.getYInt(), source.getZInt(), 0); + } + } + }); + } +} diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index b182de6f7..b5f8b7af2 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5425)"; + public static final String VERSION = "1.0.27 BETA (5426)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 370772b1d..ef36a2084 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -145,6 +145,8 @@ public class ClientProxy extends ServerProxy { @Override public void registerPreRenderInfo() { AdvancedModelLoader.registerModelHandler(new HmfModelLoader()); + + QMAWLoader.registerModFileURL(FMLCommonHandler.instance().findContainerFor(RefStrings.MODID).getSource()); } /** Runs right after item and block init */ diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index d8e10dac7..0db237afe 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -9,15 +9,11 @@ import com.hbm.config.*; import com.hbm.crafting.RodRecipes; import com.hbm.creativetabs.*; import com.hbm.entity.EntityMappings; -import com.hbm.entity.grenade.*; import com.hbm.entity.logic.IChunkLoader; import com.hbm.entity.mob.siege.SiegeTier; import com.hbm.handler.*; import com.hbm.handler.ae2.AE2CompatHandler; -import com.hbm.handler.imc.IMCBlastFurnace; -import com.hbm.handler.imc.IMCCentrifuge; -import com.hbm.handler.imc.IMCCrystallizer; -import com.hbm.handler.imc.IMCHandler; +import com.hbm.handler.imc.*; import com.hbm.handler.microblocks.MicroBlocksCompatHandler; import com.hbm.handler.neutron.NeutronHandler; import com.hbm.handler.pollution.PollutionHandler; @@ -33,14 +29,11 @@ import com.hbm.inventory.recipes.anvil.AnvilRecipes; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums.EnumAchievementType; import com.hbm.items.ModItems; -import com.hbm.items.tool.ItemFertilizer; -import com.hbm.items.weapon.ItemGenericGrenade; import com.hbm.items.weapon.sedna.mods.WeaponModManager; import com.hbm.lib.HbmWorld; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.potion.HbmPotion; -import com.hbm.qmaw.QMAWLoader; import com.hbm.saveddata.satellites.Satellite; import com.hbm.tileentity.TileMappings; import com.hbm.tileentity.bomb.TileEntityLaunchPadBase; @@ -64,13 +57,7 @@ import cpw.mods.fml.common.event.FMLMissingMappingsEvent.MissingMapping; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; -import net.minecraft.block.BlockDispenser; import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.dispenser.BehaviorDefaultDispenseItem; -import net.minecraft.dispenser.BehaviorProjectileDispense; -import net.minecraft.dispenser.IBlockSource; -import net.minecraft.dispenser.IPosition; -import net.minecraft.entity.IProjectile; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.Item.ToolMaterial; @@ -81,7 +68,6 @@ import net.minecraft.stats.StatBase; import net.minecraft.stats.StatBasic; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumFacing; import net.minecraft.util.WeightedRandomChestContent; import net.minecraft.world.World; import net.minecraftforge.common.AchievementPage; @@ -254,8 +240,6 @@ public class MainRegistry { @EventHandler public void PreLoad(FMLPreInitializationEvent PreEvent) { CrashHelper.init(); - - QMAWLoader.registerModFileURL(FMLCommonHandler.instance().findContainerFor(RefStrings.MODID).getSource()); startupTime = System.currentTimeMillis(); configDir = PreEvent.getModConfigurationDirectory(); @@ -373,299 +357,8 @@ public class MainRegistry { } } }); - - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_generic, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeGeneric(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_strong, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeStrong(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_frag, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeFrag(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_fire, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeFire(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_cluster, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeCluster(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_flare, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeFlare(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_electric, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeElectric(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_poison, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadePoison(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_gas, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeGas(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_schrabidium, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeSchrabidium(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_nuke, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeNuke(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_nuclear, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeNuclear(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_pulse, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadePulse(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_plasma, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadePlasma(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_tau, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeTau(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_lemon, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeLemon(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_mk2, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeMk2(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_aschrab, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeASchrab(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_zomg, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeZOMG(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_shrapnel, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeShrapnel(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_black_hole, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeBlackHole(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_gascan, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeGascan(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_cloud, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeCloud(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_pink_cloud, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadePC(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_smart, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeSmart(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_mirv, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeMIRV(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_breach, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeBreach(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_burst, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeBurst(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_generic, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFGeneric(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_he, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFHE(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_bouncy, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFBouncy(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_sticky, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFSticky(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_impact, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFImpact(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_incendiary, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFIncendiary(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_toxic, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFToxic(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_concussion, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFConcussion(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_brimstone, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFBrimstone(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_mystery, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFMystery(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_spark, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFSpark(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_hopwire, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFHopwire(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_null, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World p_82499_1_, IPosition p_82499_2_) { - return new EntityGrenadeIFNull(p_82499_1_, p_82499_2_.getX(), p_82499_2_.getY(), p_82499_2_.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.nuclear_waste_pearl, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityWastePearl(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.stick_dynamite, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeDynamite(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_kyiv, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeImpactGeneric(world, position.getX(), position.getY(), position.getZ()).setType((ItemGenericGrenade) ModItems.grenade_kyiv); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.stick_dynamite_fishing, new BehaviorProjectileDispense() { - - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeImpactGeneric(world, position.getX(), position.getY(), position.getZ()).setType((ItemGenericGrenade) ModItems.stick_dynamite_fishing); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.powder_fertilizer, new BehaviorDefaultDispenseItem() { - - private boolean dispenseSound = true; - @Override protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) { - - EnumFacing facing = BlockDispenser.func_149937_b(source.getBlockMetadata()); - World world = source.getWorld(); - int x = source.getXInt() + facing.getFrontOffsetX(); - int y = source.getYInt() + facing.getFrontOffsetY(); - int z = source.getZInt() + facing.getFrontOffsetZ(); - this.dispenseSound = ItemFertilizer.useFertillizer(stack, world, x, y, z); - return stack; - } - @Override protected void playDispenseSound(IBlockSource source) { - if(this.dispenseSound) { - source.getWorld().playAuxSFX(1000, source.getXInt(), source.getYInt(), source.getZInt(), 0); - } else { - source.getWorld().playAuxSFX(1001, source.getXInt(), source.getYInt(), source.getZInt(), 0); - } - } - }); - + + DispenserBehaviorHandler.init(); MicroBlocksCompatHandler.preInit(); } From 037af08963a363ee7bb2a29d2a560ec1f1b9ce3b Mon Sep 17 00:00:00 2001 From: CrpBnrz <2032217625@qq.com> Date: Tue, 19 Aug 2025 08:15:49 +0800 Subject: [PATCH 425/491] Fix formatted strings --- src/main/resources/assets/hbm/lang/zh_CN.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index eb7c5f99b..b781ed31c 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -2120,7 +2120,7 @@ item.canned_napalm.name=凝固汽油罐头 item.canned_napalm.desc=我喜欢早上闻着老梗的味道! item.canned_oil.name=机油罐头 item.canned_oil.desc=它既然能让发动机运转的更流畅,那为什么不能用在人类身上? -item.canned_pashtet.name=牛排罐头 +item.canned_pashtet.name=俄式肝酱罐头 item.canned_pashtet.desc=翻译服务不可用блядь! item.canned_pizza.name=意大利香肠比萨罐头 item.canned_pizza.desc=反人类罪 @@ -6140,4 +6140,4 @@ tile.machine_purex.desc=可用于多种核燃料的再处理机器。$大多数 qmaw.tab=[按 %s 键获取帮助] commands.locate.no_match=没有具有此名称的结构! commands.locate.none_found=未在附近找到结构! -commands.locate.success.coordinates=在 %d, %d 处找到结构 %s +commands.locate.success.coordinates=在 %2$d, %3$d 处找到结构 %1$s From e1d66c93a187692f87d363ea265a5c85b3e3d74f Mon Sep 17 00:00:00 2001 From: RealSilverMoon Date: Tue, 19 Aug 2025 16:23:56 +0800 Subject: [PATCH 426/491] i18n for RBMK DODD --- .../machine/rbmk/TileEntityRBMKBase.java | 14 ++++-- .../machine/rbmk/TileEntityRBMKRod.java | 6 ++- src/main/resources/assets/hbm/lang/en_US.lang | 47 +++++++++++++++++++ src/main/resources/assets/hbm/lang/zh_CN.lang | 47 +++++++++++++++++++ 4 files changed, 109 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index 219838228..94e666af3 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -156,7 +156,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase { * Moves heat to neighboring parts, if possible, in a relatively fair manner */ private void moveHeat() { - + boolean reasim = RBMKDials.getReasimBoilers(worldObj); List rec = new ArrayList<>(); @@ -344,6 +344,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase { exceptions.add("id"); exceptions.add("muffled"); + //Keep the title unlocalized is cool. String title = "Dump of Ordered Data Diagnostic (DODD)"; mc.fontRenderer.drawString(title, pX + 1, pZ - 19, 0x006000); mc.fontRenderer.drawString(title, pX, pZ - 20, 0x00FF00); @@ -359,8 +360,15 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase { if(exceptions.contains(key)) continue; - - mc.fontRenderer.drawString(key + ": " + flush.getTag(key), pX, pZ, 0xFFFFFF); + String value = flush.getTag(key).toString(); + //No...’d‘ doesn't refer to "day" and ‘s’ doesn't refer to "second". Meaningless. + if (!value.isEmpty()) { + char lastChar = value.charAt(value.length() - 1); + if (lastChar == 'd' || lastChar == 's' || lastChar == 'b') { + value = value.substring(0, value.length() - 1); + } + } + mc.fontRenderer.drawString(I18nUtil.resolveKey("tile.rbmk.dodd." + key) + ": " + value, pX, pZ, 0xFFFFFF); pZ += 10; } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index 92b5ecfe2..8dc07b42d 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -264,8 +264,10 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM ItemRBMKRod rod = ((ItemRBMKRod)slots[0].getItem()); BufferUtil.writeString(buf, ItemRBMKRod.getYield(slots[0]) + " / " + rod.yield + " (" + (ItemRBMKRod.getEnrichment(slots[0]) * 100) + "%)"); BufferUtil.writeString(buf, ItemRBMKRod.getPoison(slots[0]) + "%"); - BufferUtil.writeString(buf, ItemRBMKRod.getCoreHeat(slots[0]) + " / " + ItemRBMKRod.getHullHeat(slots[0]) + " / " + rod.meltingPoint); - } + //Heat is too long! Reduce it to 6 numbers is enough. + BufferUtil.writeString(buf, String.format("%.6f", ItemRBMKRod.getCoreHeat(slots[0])) + + " / " + String.format("%.6f", ItemRBMKRod.getHullHeat(slots[0])) + + " / " + String.format("%.2f", rod.meltingPoint)); } } @Override diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e772302f4..22f6475e7 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5931,6 +5931,53 @@ tile.rbmk_steam_inlet.desc=Inserts water into RBMK columns if ReaSim boilers are tile.rbmk_steam_outlet.name=RBMK ReaSim Steam Outlet tile.rbmk_steam_outlet.desc=Extracts super dense steam from RBMK columns if ReaSim boilers are enabled$Connects to RBMK columns sideways tile.rbmk_storage.name=RBMK Storage Column +tile.rbmk.dodd.heat=Heat +tile.rbmk.dodd.reasimWater=ReaSim Water +tile.rbmk.dodd.reasimSteam=ReaSim Steam +tile.rbmk.dodd.level=Level +tile.rbmk.dodd.targetLevel=Target Level +tile.rbmk.dodd.startingLevel=Starting Level +tile.rbmk.dodd.mult=Mult +tile.rbmk.dodd.color=Color +tile.rbmk.dodd.levelLower=Level Lower +tile.rbmk.dodd.levelUpper=Level Upper +tile.rbmk.dodd.heatLower=Heat Lower +tile.rbmk.dodd.heatUpper=Heat Upper +tile.rbmk.dodd.function=Function +tile.rbmk.dodd.fluxSlow=Flux Slow +tile.rbmk.dodd.fluxFast=Flux Fast +tile.rbmk.dodd.hasRod=Has Rod +tile.rbmk.dodd.progress=Progress +tile.rbmk.dodd.gas=Gas +tile.rbmk.dodd.cooled=Cooled +tile.rbmk.dodd.burned=Burned +tile.rbmk.dodd.feed=Feed +tile.rbmk.dodd.steam=Steam +tile.rbmk.dodd.cryo=Cryo +tile.rbmk.dodd.fuel=Fuel +tile.rbmk.dodd.f_heat=heat +tile.rbmk.dodd.f_xenon=xenon +tile.rbmk.dodd.f_yield=yield +tile.rbmk.dodd.feed_type=Feed Type(ID) +tile.rbmk.dodd.steam_type=Steam Type(ID) +tile.rbmk.dodd.cryo_type=Cryo Type(ID) +tile.rbmk.dodd.gas_type=Gas Type(ID) +tile.rbmk.dodd.fuel_type=Fuel Type(ID) +tile.rbmk.dodd.feed_p=Feed Pressure +tile.rbmk.dodd.steam_p=Steam Pressure +tile.rbmk.dodd.cryo_p=Cryo Pressure +tile.rbmk.dodd.gas_p=Gas Pressure +tile.rbmk.dodd.fuel_p=Fuel Pressure +tile.rbmk.dodd.feed_max=Feed Max Amount +tile.rbmk.dodd.steam_max=Steam Max Amount +tile.rbmk.dodd.cryo_max=Cryo Max Amount +tile.rbmk.dodd.gas_max=Gas Max Amount +tile.rbmk.dodd.fuel_max=Fuel Max Amount +tile.rbmk.dodd.feed_amt=Feed Amount +tile.rbmk.dodd.steam_amt=Steam Amount +tile.rbmk.dodd.cryo_amt=Cryo Amount +tile.rbmk.dodd.gas_amt=Gas Amount +tile.rbmk.dodd.fuel_amt=Fuel Amount tile.reactor_computer.name=Reactor Control tile.reactor_conductor.name=Reactor Boiler tile.reactor_control.name=Control Rods diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index c220e14b9..377cd73b9 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5566,6 +5566,53 @@ tile.rbmk_steam_inlet.desc=当启用ReaSim锅炉时向反应堆内输入水$从 tile.rbmk_steam_outlet.name=RBMK ReaSim蒸汽出口 tile.rbmk_steam_outlet.desc=当启用ReaSim锅炉时从反应堆内输出超热蒸汽$从侧面连接至反应堆结构 tile.rbmk_storage.name=RBMK燃料棒存储棒 +tile.rbmk.dodd.heat=温度 +tile.rbmk.dodd.reasimWater=ReaSim给水量 +tile.rbmk.dodd.reasimSteam=ReaSim蒸汽量 +tile.rbmk.dodd.level=控制棒深度 +tile.rbmk.dodd.targetLevel=目标深度 +tile.rbmk.dodd.startingLevel=起始深度 +tile.rbmk.dodd.mult=倍数 +tile.rbmk.dodd.color=颜色 +tile.rbmk.dodd.levelLower=深度下限 +tile.rbmk.dodd.levelUpper=深度上限 +tile.rbmk.dodd.heatLower=温度下限 +tile.rbmk.dodd.heatUpper=温度上限 +tile.rbmk.dodd.function=函数类型 +tile.rbmk.dodd.fluxSlow=慢中子计数 +tile.rbmk.dodd.fluxFast=快中子计数 +tile.rbmk.dodd.hasRod=是否有燃料棒 +tile.rbmk.dodd.progress=进度 +tile.rbmk.dodd.cooled=冷却中 +tile.rbmk.dodd.burned=燃烧中 +tile.rbmk.dodd.f_heat=燃料棒温度 +tile.rbmk.dodd.f_xenon=氙中毒指数 +tile.rbmk.dodd.f_yield=耐久 +tile.rbmk.dodd.gas=气体 +tile.rbmk.dodd.feed=工质储量 +tile.rbmk.dodd.steam=蒸汽储量 +tile.rbmk.dodd.cryo=凝胶储量 +tile.rbmk.dodd.fuel=燃料储量 +tile.rbmk.dodd.feed_type=工质种类(ID) +tile.rbmk.dodd.steam_type=蒸汽种类(ID) +tile.rbmk.dodd.cryo_type=凝胶种类(ID) +tile.rbmk.dodd.gas_type=气体种类(ID) +tile.rbmk.dodd.fuel_type=燃料种类(ID) +tile.rbmk.dodd.feed_p=工质压力 +tile.rbmk.dodd.steam_p=蒸汽压力 +tile.rbmk.dodd.cryo_p=凝胶压力 +tile.rbmk.dodd.gas_p=气体压力 +tile.rbmk.dodd.fuel_p=燃料压力 +tile.rbmk.dodd.feed_max=工质最大储量 +tile.rbmk.dodd.steam_max=蒸汽最大储量 +tile.rbmk.dodd.cryo_max=凝胶最大储量 +tile.rbmk.dodd.gas_max=气体最大储量 +tile.rbmk.dodd.fuel_max=燃料最大储量 +tile.rbmk.dodd.feed_amt=工质储量 +tile.rbmk.dodd.steam_amt=蒸汽储量 +tile.rbmk.dodd.cryo_amt=凝胶储量 +tile.rbmk.dodd.gas_amt=气体储量 +tile.rbmk.dodd.fuel_amt=燃料储量 tile.reactor_computer.name=反应堆控制器 tile.reactor_conductor.name=反应堆锅炉 tile.reactor_control.name=控制棒 From 525169743cc27f7f8bb81c537016a66c3fb2cf1d Mon Sep 17 00:00:00 2001 From: CrpBnrz <2032217625@qq.com> Date: Wed, 20 Aug 2025 21:28:56 +0800 Subject: [PATCH 427/491] QMAW localization from Tokiko --- src/main/resources/assets/hbm/manual/material/alloy.json | 6 ++++-- .../resources/assets/hbm/manual/material/aluminium.json | 6 ++++-- src/main/resources/assets/hbm/manual/material/arsenic.json | 6 ++++-- .../assets/hbm/manual/material/arsenic_bronze.json | 6 ++++-- src/main/resources/assets/hbm/manual/material/bakelite.json | 3 ++- src/main/resources/assets/hbm/manual/material/bismuth.json | 3 ++- .../assets/hbm/manual/material/bismuth_bronze.json | 3 ++- src/main/resources/assets/hbm/manual/material/bscco.json | 3 ++- src/main/resources/assets/hbm/manual/material/cadmium.json | 3 ++- .../resources/assets/hbm/manual/material/cadmium_steel.json | 3 ++- src/main/resources/assets/hbm/manual/material/cinnabar.json | 3 ++- src/main/resources/assets/hbm/manual/material/coke.json | 3 ++- src/main/resources/assets/hbm/manual/material/copper.json | 3 ++- src/main/resources/assets/hbm/manual/material/desh.json | 3 ++- .../resources/assets/hbm/manual/material/ferrouranium.json | 3 ++- src/main/resources/assets/hbm/manual/material/graphite.json | 3 ++- src/main/resources/assets/hbm/manual/material/gunmetal.json | 3 ++- src/main/resources/assets/hbm/manual/material/hss.json | 3 ++- src/main/resources/assets/hbm/manual/material/latex.json | 3 ++- src/main/resources/assets/hbm/manual/material/lead.json | 3 ++- src/main/resources/assets/hbm/manual/material/mingrade.json | 3 ++- .../resources/assets/hbm/manual/material/neptunium.json | 3 ++- .../resources/assets/hbm/manual/material/plutonium-238.json | 3 ++- .../resources/assets/hbm/manual/material/plutonium-239.json | 3 ++- .../resources/assets/hbm/manual/material/plutonium-240.json | 3 ++- .../resources/assets/hbm/manual/material/plutonium-241.json | 3 ++- .../resources/assets/hbm/manual/material/plutonium-rg.json | 3 ++- .../resources/assets/hbm/manual/material/plutonium.json | 3 ++- src/main/resources/assets/hbm/manual/material/polonium.json | 3 ++- src/main/resources/assets/hbm/manual/material/polymer.json | 3 ++- src/main/resources/assets/hbm/manual/material/radium.json | 3 ++- src/main/resources/assets/hbm/manual/material/rubber.json | 3 ++- src/main/resources/assets/hbm/manual/material/silicon.json | 3 ++- src/main/resources/assets/hbm/manual/material/sodium.json | 3 ++- src/main/resources/assets/hbm/manual/material/steel.json | 3 ++- src/main/resources/assets/hbm/manual/material/sulfur.json | 3 ++- .../resources/assets/hbm/manual/material/tantalium.json | 3 ++- .../resources/assets/hbm/manual/material/technetium.json | 3 ++- .../assets/hbm/manual/material/technetium_steel.json | 3 ++- src/main/resources/assets/hbm/manual/material/thorium.json | 3 ++- .../resources/assets/hbm/manual/material/uranium-233.json | 3 ++- .../resources/assets/hbm/manual/material/uranium-235.json | 3 ++- .../resources/assets/hbm/manual/material/uranium-238.json | 6 ++++-- src/main/resources/assets/hbm/manual/material/uranium.json | 3 ++- .../resources/assets/hbm/manual/material/weaponsteel.json | 6 ++++-- 45 files changed, 102 insertions(+), 51 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/alloy.json b/src/main/resources/assets/hbm/manual/material/alloy.json index 03ef80a7a..457f465a7 100644 --- a/src/main/resources/assets/hbm/manual/material/alloy.json +++ b/src/main/resources/assets/hbm/manual/material/alloy.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_advanced_alloy"], ["hbm:item.powder_advanced_alloy"], ["hbm:item.plate_advanced_alloy"]], "title": { "en_US": "Advanced Alloy", - "ru_ru": "Продвинутый сплав" + "ru_ru": "Продвинутый сплав", + "zh_CN": "高级合金" }, "content": { "en_US": "Made in a [[blast furnace|Blast Furnace]] from [[steel|Steel]] and [[Minecraft grade copper|Minecraft Grade Copper]]. Makes better-than-diamond gear. Also used in some high-powered magnets for the [[fusion reactor|Fusion Reactor]] and the [[exposure chamber|Exposure Chamber]].", - "ru_RU": "Изготовлено в [[доменной печи|Blast Furnace]] из [[стали|Steel]] и [[красной меди|Minecraft Grade Copper]]. Из него делают инструменты, превосходящие алмазные. Также используется в некоторых мощных магнитах для [[термоядерного реактора|Fusion Reactor]] и [[камеры облучения|Exposure Chamber]]." + "ru_RU": "Изготовлено в [[доменной печи|Blast Furnace]] из [[стали|Steel]] и [[красной меди|Minecraft Grade Copper]]. Из него делают инструменты, превосходящие алмазные. Также используется в некоторых мощных магнитах для [[термоядерного реактора|Fusion Reactor]] и [[камеры облучения|Exposure Chamber]].", + "zh_CN": "在[[高炉|Blast Furnace]]中使用[[钢|Steel]]和[[紫铜|Minecraft Grade Copper]]制成。其制成的工具比钻石更加优质。同时也能用于制作[[聚变反应堆|Fusion Reactor]]和[[辐照舱|Exposure Chamber]]的高能磁铁。" } } diff --git a/src/main/resources/assets/hbm/manual/material/aluminium.json b/src/main/resources/assets/hbm/manual/material/aluminium.json index 8bdf151bc..078893082 100644 --- a/src/main/resources/assets/hbm/manual/material/aluminium.json +++ b/src/main/resources/assets/hbm/manual/material/aluminium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]], "title": { "en_US": "Aluminium", - "ru_RU": "Алюминий" + "ru_RU": "Алюминий", + "zh_CN": "铝" }, "content": { "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.

Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages.", - "ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозёма.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет." + "ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозёма.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет.", + "zh_CN": "常见的轻质金属,在早期可使用[[复式炼焦炉|Combination Oven]]冶炼冰晶石(含铝矿石)来得到铝。后期可通过加工[[铝土矿|Bauxite]],后使用[[电解机|Electrolysis Machine]]处理氧化铝溶液得到。

用于制作管道,一般流体储存,制作[[炮铜|Gunmetal]]和导弹弹体。" } } diff --git a/src/main/resources/assets/hbm/manual/material/arsenic.json b/src/main/resources/assets/hbm/manual/material/arsenic.json index d54f92d25..5d8559a49 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_arsenic"], ["hbm:item.nugget_arsenic"]], "title": { "en_US": "Arsenic", - "ru_RU": "Мышьяк" + "ru_RU": "Мышьяк", + "zh_CN": "砷" }, "content": { "en_US": "Obtainable by treating oily scraps with [[high-performance solvent|High-Performance Solvent]] in an [[acidizer|Ore Acidizer]]. Oily scraps can be created by [[shredding|Shredder]] polluted blocks created by the [[fracking tower|Hydraulic Fracking Tower]]. Primarily used as [[arsenic bronze|Arsenic Bronze]].", - "ru_RU": "Получается путём обработки нефтяных отходов [[высокоэффективным растворителем|High-Performance Solvent]] в [[рудном окислитиле|Ore Acidizer]]. Нефтяные отходы можно создать [[измельчением|Shredder]] загрязненных блоков, созданных [[башней гидроразрыва|Hydraulic Fracking Tower]]. В основном используется как [[мышьяковая бронза|Arsenic Bronze]]." + "ru_RU": "Получается путём обработки нефтяных отходов [[высокоэффективным растворителем|High-Performance Solvent]] в [[рудном окислитиле|Ore Acidizer]]. Нефтяные отходы можно создать [[измельчением|Shredder]] загрязненных блоков, созданных [[башней гидроразрыва|Hydraulic Fracking Tower]]. В основном используется как [[мышьяковая бронза|Arsenic Bronze]].", + "zh_CN": "可通过在[[酸化机|Ore Acidizer]]中使用[[高性能溶剂|High-Performance Solvent]]处理油性废料获得。油性废料可在[[粉碎机|Shredder]]中粉碎[[水力压裂塔|Hydraulic Fracking Tower]]产生的污染方块获得。主要用于制作[[砷青铜|Arsenic Bronze]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json index d53db5d12..a3feacd14 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_arsenic_bronze"]], "title": { "en_US": "Arsenic Bronze", - "ru_RU": "Мышьяковая бронза" + "ru_RU": "Мышьяковая бронза", + "zh_CN": "砷青铜" }, "content": { "en_US": "Derivative of [[arsenic|Arsenic]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]] due to requiring [[high-performance solvent|High-Performance Solvent]].

Fully interchangeable with [[bismuth bronze|Bismuth Bronze]].", - "ru_RU": "Производное от [[мышьяка|Arsenic]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]] из-за требования [[высокоэффективного растворителя|High-Performance Solvent]].

Полностью взаимозаменяемо с [[висмутовой бронзой|Bismuth Bronze]]." + "ru_RU": "Производное от [[мышьяка|Arsenic]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]] из-за требования [[высокоэффективного растворителя|High-Performance Solvent]].

Полностью взаимозаменяемо с [[висмутовой бронзой|Bismuth Bronze]].", + "zh_CN": "使用[[砷|Arsenic]]在[[坩埚|Crucible]]中制作的衍生物,只能在建造了[[RBMK]]之后才能获得,因为提取砷需要用到[[高性能溶剂|High-Performance Solvent]]。

和[[铋青铜|Bismuth Bronze]]完全通用。" } } diff --git a/src/main/resources/assets/hbm/manual/material/bakelite.json b/src/main/resources/assets/hbm/manual/material/bakelite.json index d5d232149..27da9b801 100644 --- a/src/main/resources/assets/hbm/manual/material/bakelite.json +++ b/src/main/resources/assets/hbm/manual/material/bakelite.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_bakelite"], ["hbm:item.powder_bakelite"]], "title": { "en_US": "Bakelite", - "ru_RU": "Бакелит" + "ru_RU": "Бакелит", + "zh_CN": "电木" }, "content": { "en_US": "Alternative to [[polymer|Polymer]] made from [[aromatic hydrocarbons|Aromatic Hydrocarbons]] derived from [[cracked oil products|Catalytic Cracking Tower]]. Completely interchangeable in all recipes.", diff --git a/src/main/resources/assets/hbm/manual/material/bismuth.json b/src/main/resources/assets/hbm/manual/material/bismuth.json index 9b3105586..4ac2846b0 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_bismuth"], ["hbm:item.billet_bismuth"], ["hbm:item.nugget_bismuth"], ["hbm:item.powder_bismuth"]], "title": { "en_US": "Bismuth", - "ru_RU": "Висмут" + "ru_RU": "Висмут", + "zh_CN": "铋" }, "content": { "en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]].", diff --git a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json index 07167ba3d..e583f359b 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_bismuth_bronze"]], "title": { "en_US": "Bismuth Bronze", - "ru_RU": "Висмутовая бронза" + "ru_RU": "Висмутовая бронза", + "zh_CN": "铋青铜" }, "content": { "en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].

Fully interchangeable with [[arsenic bronze|Arsenic Bronze]].", diff --git a/src/main/resources/assets/hbm/manual/material/bscco.json b/src/main/resources/assets/hbm/manual/material/bscco.json index a341b55af..941023847 100644 --- a/src/main/resources/assets/hbm/manual/material/bscco.json +++ b/src/main/resources/assets/hbm/manual/material/bscco.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_bscco"], ["hbm:item.wire_dense", 1, 48]], "title": { "en_US": "BSCCO", - "ru_RU": "BSCCO" + "ru_RU": "BSCCO", + "zh_CN": "BSCCO" }, "content": { "en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]].", diff --git a/src/main/resources/assets/hbm/manual/material/cadmium.json b/src/main/resources/assets/hbm/manual/material/cadmium.json index 0de201080..2cd72905f 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_cadmium"], ["hbm:item.powder_cadmium"]], "title": { "en_US": "Cadmium", - "ru_RU": "Кадмий" + "ru_RU": "Кадмий", + "zh_CN": "镉" }, "content": { "en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute.", diff --git a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json index 48ce8d495..2cdcf5bd6 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_cdalloy"]], "title": { "en_US": "Cadmium Steel", - "ru_RU": "Кадмиевая сталь" + "ru_RU": "Кадмиевая сталь", + "zh_CN": "镉钢" }, "content": { "en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes.", diff --git a/src/main/resources/assets/hbm/manual/material/cinnabar.json b/src/main/resources/assets/hbm/manual/material/cinnabar.json index bb721bf6f..959b7780e 100644 --- a/src/main/resources/assets/hbm/manual/material/cinnabar.json +++ b/src/main/resources/assets/hbm/manual/material/cinnabar.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.cinnebar"]], "title": { "en_US": "Cinnabar", - "ru_RU": "Киноварь" + "ru_RU": "Киноварь", + "zh_CN": "朱砂" }, "content": { "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production.", diff --git a/src/main/resources/assets/hbm/manual/material/coke.json b/src/main/resources/assets/hbm/manual/material/coke.json index 234ab7588..72dfa40b6 100644 --- a/src/main/resources/assets/hbm/manual/material/coke.json +++ b/src/main/resources/assets/hbm/manual/material/coke.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.coke", 1, 32767]], "title": { "en_US": "Coke", - "ru_RU": "Кокс" + "ru_RU": "Кокс", + "zh_CN": "焦炭" }, "content": { "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].

Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.

Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.

Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]].", diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json index e8e155732..c81e68332 100644 --- a/src/main/resources/assets/hbm/manual/material/copper.json +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]], "title": { "en_US": "Copper", - "ru_RU": "Медь" + "ru_RU": "Медь", + "zh_CN": "铜" }, "content": { "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.", diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json index a34e741c7..255772f18 100644 --- a/src/main/resources/assets/hbm/manual/material/desh.json +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]], "title": { "en_US": "Desh", - "ru_RU": "Деш" + "ru_RU": "Деш", + "zh_CN": "Desh" }, "content": { "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.", diff --git a/src/main/resources/assets/hbm/manual/material/ferrouranium.json b/src/main/resources/assets/hbm/manual/material/ferrouranium.json index 687434042..9d6c3efcc 100644 --- a/src/main/resources/assets/hbm/manual/material/ferrouranium.json +++ b/src/main/resources/assets/hbm/manual/material/ferrouranium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_ferrouranium"]], "title": { "en_US": "Ferrouranium", - "ru_RU": "Ферроуран" + "ru_RU": "Ферроуран", + "zh_CN": "铀铁合金" }, "content": { "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition.", diff --git a/src/main/resources/assets/hbm/manual/material/graphite.json b/src/main/resources/assets/hbm/manual/material/graphite.json index 1876c53fa..7ea9d69a8 100644 --- a/src/main/resources/assets/hbm/manual/material/graphite.json +++ b/src/main/resources/assets/hbm/manual/material/graphite.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_graphite"]], "title": { "en_US": "Graphite", - "ru_RU": "Графит" + "ru_RU": "Графит", + "zh_CN": "石墨" }, "content": { "en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes.", diff --git a/src/main/resources/assets/hbm/manual/material/gunmetal.json b/src/main/resources/assets/hbm/manual/material/gunmetal.json index f5d89a0b1..b7c339dcc 100644 --- a/src/main/resources/assets/hbm/manual/material/gunmetal.json +++ b/src/main/resources/assets/hbm/manual/material/gunmetal.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]], "title": { "en_US": "Gunmetal", - "ru_RU": "Оружейный металл" + "ru_RU": "Оружейный металл", + "zh_CN": "炮铜" }, "content": { "en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition.", diff --git a/src/main/resources/assets/hbm/manual/material/hss.json b/src/main/resources/assets/hbm/manual/material/hss.json index 26380d6c5..ebc3d25a2 100644 --- a/src/main/resources/assets/hbm/manual/material/hss.json +++ b/src/main/resources/assets/hbm/manual/material/hss.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]], "title": { "en_US": "High-Speed Steel", - "ru_RU": "Высокоскоростная сталь" + "ru_RU": "Высокоскоростная сталь", + "zh_CN": "高速钢" }, "content": { "en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable.", diff --git a/src/main/resources/assets/hbm/manual/material/latex.json b/src/main/resources/assets/hbm/manual/material/latex.json index b5795bd32..73a7d88ce 100644 --- a/src/main/resources/assets/hbm/manual/material/latex.json +++ b/src/main/resources/assets/hbm/manual/material/latex.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]], "title": { "en_US": "Latex", - "ru_RU": "Латекс" + "ru_RU": "Латекс", + "zh_CN": "乳胶" }, "content": { "en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa.", diff --git a/src/main/resources/assets/hbm/manual/material/lead.json b/src/main/resources/assets/hbm/manual/material/lead.json index b4d919e1a..1232d2f1d 100644 --- a/src/main/resources/assets/hbm/manual/material/lead.json +++ b/src/main/resources/assets/hbm/manual/material/lead.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]], "title": { "en_US": "Lead", - "ru_RU": "Свинец" + "ru_RU": "Свинец", + "zh_CN": "铅" }, "content": { "en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits.", diff --git a/src/main/resources/assets/hbm/manual/material/mingrade.json b/src/main/resources/assets/hbm/manual/material/mingrade.json index fe1732da5..f231f2b4b 100644 --- a/src/main/resources/assets/hbm/manual/material/mingrade.json +++ b/src/main/resources/assets/hbm/manual/material/mingrade.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]], "title": { "en_US": "Minecraft Grade Copper (Red Copper)", - "ru_RU": "Медь Minecraft (Красная медь)" + "ru_RU": "Медь Minecraft (Красная медь)", + "zh_CN": "紫铜" }, "content": { "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form.", diff --git a/src/main/resources/assets/hbm/manual/material/neptunium.json b/src/main/resources/assets/hbm/manual/material/neptunium.json index a68c7adb9..adb08aa9b 100644 --- a/src/main/resources/assets/hbm/manual/material/neptunium.json +++ b/src/main/resources/assets/hbm/manual/material/neptunium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]], "title": { "en_US": "Neptunium", - "ru_RU": "Нептуний" + "ru_RU": "Нептуний", + "zh_CN": "镎" }, "content": { "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]].", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-238.json b/src/main/resources/assets/hbm/manual/material/plutonium-238.json index d770353f4..7e8406d2e 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-238.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-238.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_pu238"], ["hbm:item.billet_pu238"], ["hbm:item.nugget_pu238"]], "title": { "en_US": "Plutonium-238", - "ru_RU": "Плутоний-238" + "ru_RU": "Плутоний-238", + "zh_CN": "钚-238" }, "content": { "en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].

Moderately radioactive, very hot.", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-239.json b/src/main/resources/assets/hbm/manual/material/plutonium-239.json index f64b725f8..6c893050f 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-239.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-239.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_pu239"], ["hbm:item.billet_pu239"], ["hbm:item.nugget_pu239"]], "title": { "en_US": "Plutonium-239", - "ru_RU": "Плутоний-239" + "ru_RU": "Плутоний-239", + "zh_CN": "钚-239" }, "content": { "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-240.json b/src/main/resources/assets/hbm/manual/material/plutonium-240.json index 859bfd7c0..c14ae8f38 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-240.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-240.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_pu240"], ["hbm:item.billet_pu240"], ["hbm:item.nugget_pu240"]], "title": { "en_US": "Plutonium-240", - "ru_RU": "Плутоний-240" + "ru_RU": "Плутоний-240", + "zh_CN": "钚-240" }, "content": { "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or inspecialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json index 096b8864c..79df83f71 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-241.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-241.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_pu241"], ["hbm:item.billet_pu241"], ["hbm:item.nugget_pu241"]], "title": { "en_US": "Plutonium-241", - "ru_RU": "Плутоний-241" + "ru_RU": "Плутоний-241", + "zh_CN": "钚-241" }, "content": { "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json index c5cb2f1a4..664af5785 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_pu_mix"], ["hbm:item.billet_pu_mix"], ["hbm:item.nugget_pu_mix"]], "title": { "en_US": "Reactor-Grade Plutonium", - "ru_RU": "Плутоний реакторного качества" + "ru_RU": "Плутоний реакторного качества", + "zh_CN": "反应堆级钚" }, "content": { "en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium.json b/src/main/resources/assets/hbm/manual/material/plutonium.json index 719c14800..72a9c21ad 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_plutonium"], ["hbm:item.billet_plutonium"], ["hbm:item.nugget_plutonium"], ["hbm:item.powder_plutonium"]], "title": { "en_US": "Plutonium", - "ru_RU": "Плутоний" + "ru_RU": "Плутоний", + "zh_CN": "钚" }, "content": { "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.

Moderately radioactive.

See also:
[[Plutonium-238]]
[[Plutonium-239]]
[[Plutonium-240]]
[[Plutonium-241]]", diff --git a/src/main/resources/assets/hbm/manual/material/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json index c36e74218..07f59e7d9 100644 --- a/src/main/resources/assets/hbm/manual/material/polonium.json +++ b/src/main/resources/assets/hbm/manual/material/polonium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_polonium"], ["hbm:item.billet_polonium"], ["hbm:item.nugget_polonium"]], "title": { "en_US": "Polonium-210", - "ru_RU": "Полоний-210" + "ru_RU": "Полоний-210", + "zh_CN": "钋-210" }, "content": { "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot.", diff --git a/src/main/resources/assets/hbm/manual/material/polymer.json b/src/main/resources/assets/hbm/manual/material/polymer.json index 9c540925b..42f8dda92 100644 --- a/src/main/resources/assets/hbm/manual/material/polymer.json +++ b/src/main/resources/assets/hbm/manual/material/polymer.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_polymer"], ["hbm:item.powder_polymer"]], "title": { "en_US": "Polymer", - "ru_RU": "Полимер" + "ru_RU": "Полимер", + "zh_CN": "聚合物" }, "content": { "en_US": "Polymer ('Teflon') is the first available type of plastic. Requires [[petroleum gas|Petroleum Gas]] and therefore [[oil processing|Crude Oil]].

Fully interchangable with [[Bakelite]], which becomes available after [[oil cracking|Catalytic Cracking Tower]].", diff --git a/src/main/resources/assets/hbm/manual/material/radium.json b/src/main/resources/assets/hbm/manual/material/radium.json index 331d37adc..8e77e9563 100644 --- a/src/main/resources/assets/hbm/manual/material/radium.json +++ b/src/main/resources/assets/hbm/manual/material/radium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_ra226"], ["hbm:item.billet_ra226"], ["hbm:item.nugget_ra226"], ["hbm:item.powder_ra226"]], "title": { "en_US": "Radium-226", - "ru_RU": "Радий-226" + "ru_RU": "Радий-226", + "zh_CN": "镭-226" }, "content": { "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/rubber.json b/src/main/resources/assets/hbm/manual/material/rubber.json index e317d6752..6329a6f39 100644 --- a/src/main/resources/assets/hbm/manual/material/rubber.json +++ b/src/main/resources/assets/hbm/manual/material/rubber.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_rubber"]], "title": { "en_US": "Rubber", - "ru_RU": "Резина" + "ru_RU": "Резина", + "zh_CN": "橡胶" }, "content": { "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe.", diff --git a/src/main/resources/assets/hbm/manual/material/silicon.json b/src/main/resources/assets/hbm/manual/material/silicon.json index 67951240c..57a2298ed 100644 --- a/src/main/resources/assets/hbm/manual/material/silicon.json +++ b/src/main/resources/assets/hbm/manual/material/silicon.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_silicon"], ["hbm:item.billet_silicon"], ["hbm:item.nugget_silicon"]], "title": { "en_US": "Silicon", - "ru_RU": "Кремний" + "ru_RU": "Кремний", + "zh_CN": "硅" }, "content": { "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing.", diff --git a/src/main/resources/assets/hbm/manual/material/sodium.json b/src/main/resources/assets/hbm/manual/material/sodium.json index 6ad6ac6f7..0a42d0063 100644 --- a/src/main/resources/assets/hbm/manual/material/sodium.json +++ b/src/main/resources/assets/hbm/manual/material/sodium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.powder_sodium"]], "title": { "en_US": "Sodium", - "ru_RU": "Натрий" + "ru_RU": "Натрий", + "zh_CN": "钠" }, "content": { "en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant.", diff --git a/src/main/resources/assets/hbm/manual/material/steel.json b/src/main/resources/assets/hbm/manual/material/steel.json index 83c6f8867..1fcaba283 100644 --- a/src/main/resources/assets/hbm/manual/material/steel.json +++ b/src/main/resources/assets/hbm/manual/material/steel.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_steel"], ["hbm:item.plate_steel"], ["hbm:item.powder_steel"]], "title": { "en_US": "Steel", - "ru_RU": "Сталь" + "ru_RU": "Сталь", + "zh_CN": "钢" }, "content": { "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].", diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index 7d9b5915b..6b758020d 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.sulfur"]], "title": { "en_US": "Sulfur", - "ru_RU": "Сера" + "ru_RU": "Сера", + "zh_CN": "硫" }, "content": { "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", diff --git a/src/main/resources/assets/hbm/manual/material/tantalium.json b/src/main/resources/assets/hbm/manual/material/tantalium.json index e3d0ee9c2..248b0414e 100644 --- a/src/main/resources/assets/hbm/manual/material/tantalium.json +++ b/src/main/resources/assets/hbm/manual/material/tantalium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_tantalium"], ["hbm:item.powder_tantalium"], ["hbm:item.nugget_tantalium"]], "title": { "en_US": "Tantalium", - "ru_RU": "Тантал" + "ru_RU": "Тантал", + "zh_CN": "钛" }, "content": { "en_US": "Tantalium ('Tantalum') can be extracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.", diff --git a/src/main/resources/assets/hbm/manual/material/technetium.json b/src/main/resources/assets/hbm/manual/material/technetium.json index 5eaef724f..c1228b425 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium.json +++ b/src/main/resources/assets/hbm/manual/material/technetium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.billet_technetium"], ["hbm:item.ingot_technetium"], ["hbm:item.nugget_technetium"]], "title": { "en_US": "Technetium", - "ru_RU": "Технеций" + "ru_RU": "Технеций", + "zh_CN": "锝" }, "content": { "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.

Primarily used for [[technetium steel|Technetium Steel]].

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/technetium_steel.json b/src/main/resources/assets/hbm/manual/material/technetium_steel.json index ac31ac861..13e14ae80 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/technetium_steel.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_tcalloy"], ["hbm:item.powder_tcalloy"]], "title": { "en_US": "Technetium Steel", - "ru_RU": "Технециевая сталь" + "ru_RU": "Технециевая сталь", + "zh_CN": "锝钢" }, "content": { "en_US": "Alloy made from [[steel|Steel]] and [[technetium|Technetium]]. Corrosion resistant, used in stronger fluid tanks and many advanced machines. Obtainable after either a [[ZIRNOX]] or [[PWR]] due to technetium being synthetic.

Fully interchangeable with [[cadmium steel|Cadmium Steel]].", diff --git a/src/main/resources/assets/hbm/manual/material/thorium.json b/src/main/resources/assets/hbm/manual/material/thorium.json index be512e7cc..da6ff95c0 100644 --- a/src/main/resources/assets/hbm/manual/material/thorium.json +++ b/src/main/resources/assets/hbm/manual/material/thorium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_th232"], ["hbm:item.billet_th232"], ["hbm:item.nugget_th232"], ["hbm:item.powder_thorium"]], "title": { "en_US": "Thorium-232", - "ru_RU": "Торий-232" + "ru_RU": "Торий-232", + "zh_CN": "钍-232" }, "content": { "en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.

Slightly radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/uranium-233.json b/src/main/resources/assets/hbm/manual/material/uranium-233.json index d1802f419..a87552a1d 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-233.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-233.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_u233"], ["hbm:item.billet_u233"], ["hbm:item.nugget_u233"]], "title": { "en_US": "Uranium-233", - "ru_RU": "Уран-233" + "ru_RU": "Уран-233", + "zh_CN": "铀-233" }, "content": { "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json index 56b101d67..3c6e4d4ae 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-235.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-235.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_u235"], ["hbm:item.billet_u235"], ["hbm:item.nugget_u235"]], "title": { "en_US": "Uranium-235", - "ru_RU": "Уран-235" + "ru_RU": "Уран-235", + "zh_CN": "铀-235" }, "content": { "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/uranium-238.json b/src/main/resources/assets/hbm/manual/material/uranium-238.json index ca87770e1..9f6474a37 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-238.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-238.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_u238"], ["hbm:item.billet_u238"], ["hbm:item.nugget_u238"]], "title": { "en_US": "Uranium-238", - "ru_RU": "Уран-238" + "ru_RU": "Уран-238", + "zh_CN": "铀-238" }, "content": { "en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.

Slightly radioactive.", - "ru_RU": "Истощенный уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроурание|Ferrouranium]], для [[боеприпасов с истощенным ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных топлив. Топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].

Слабо радиоактивен." + "ru_RU": "Истощенный уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроурание|Ferrouranium]], для [[боеприпасов с истощенным ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных топлив. Топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].

Слабо радиоактивен.", + "zh_CN": "贫铀,不能作为燃料(即无法直接被反应堆使用)。通常作为[[铀|Uranium]]浓缩过程中的副产品。用于制造[[铀铁合金|Ferrouranium]],[[贫铀弹药|Depleted Uranium Ammo]]和低浓缩度燃料。含有铀-238的燃料在再处理时会产生有用的[[钚-239|Plutonium-239]]。

略有放射性。" } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json index 89ab05f6b..8f18b8df7 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium.json +++ b/src/main/resources/assets/hbm/manual/material/uranium.json @@ -4,7 +4,8 @@ "trigger": [["hbm:item.ingot_uranium"], ["hbm:item.billet_uranium"], ["hbm:item.nugget_uranium"], ["hbm:item.powder_uranium"], ["hbm:tile.ore_uranium"]], "title": { "en_US": "Uranium", - "ru_RU": "Уран" + "ru_RU": "Уран", + "zh_CN": "铀" }, "content": { "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]", diff --git a/src/main/resources/assets/hbm/manual/material/weaponsteel.json b/src/main/resources/assets/hbm/manual/material/weaponsteel.json index 52e5c11ed..06a8f4f55 100644 --- a/src/main/resources/assets/hbm/manual/material/weaponsteel.json +++ b/src/main/resources/assets/hbm/manual/material/weaponsteel.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]], "title": { "en_US": "Weapon Steel", - "ru_RU": "Оружейная сталь" + "ru_RU": "Оружейная сталь", + "zh_CN": "武器级钢" }, "content": { "en_US": "High-purity version of [[steel|Steel]] made in a [[rotary furnace|Rotary Furnace]]. Requires [[coker gas|Coker Gas]], and therefore a [[coker unit|Coker Unit]]. Used in many mid-game weapons, weapon modifications and missile warheads.", - "ru_RU": "Высококачественная версия [[стали|Steel]], изготовленная в [[роторной печи|Rotary Furnace]]. Требует [[коксовый газ|Coker Gas]] и, следовательно, [[коксовую установку|Coker Unit]]. Используется во многих оружиях среднего этапа игры, модификациях оружия и боеголовках ракет." + "ru_RU": "Высококачественная версия [[стали|Steel]], изготовленная в [[роторной печи|Rotary Furnace]]. Требует [[коксовый газ|Coker Gas]] и, следовательно, [[коксовую установку|Coker Unit]]. Используется во многих оружиях среднего этапа игры, модификациях оружия и боеголовках ракет.", + "zh_CN": "在[[回转炉|Rotary Furnace]]中制作的高纯度[[钢|Steel]]。需要[[焦化气|Coker Gas]],焦化气则需要[[焦化装置|Coker Unit]]来制作。用于游戏中期的武器制作和改装以及导弹弹头的制作。" } } From b4b471e5c3f5ccf8b01a3f6a5f97e89976c9d190 Mon Sep 17 00:00:00 2001 From: FOlkvangrField Date: Wed, 20 Aug 2025 21:46:59 +0800 Subject: [PATCH 428/491] Fix --- .../hbm/config/CustomMachineConfigJSON.java | 25 ++-- .../java/com/hbm/inventory/fluid/Fluids.java | 21 ++-- src/main/java/com/hbm/qmaw/GuiQMAW.java | 114 +++++++++--------- src/main/java/com/hbm/qmaw/QMAWLoader.java | 66 +++++----- 4 files changed, 112 insertions(+), 114 deletions(-) diff --git a/src/main/java/com/hbm/config/CustomMachineConfigJSON.java b/src/main/java/com/hbm/config/CustomMachineConfigJSON.java index 87c67dfd3..7d67aba78 100644 --- a/src/main/java/com/hbm/config/CustomMachineConfigJSON.java +++ b/src/main/java/com/hbm/config/CustomMachineConfigJSON.java @@ -1,9 +1,8 @@ package com.hbm.config; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -148,7 +147,7 @@ public class CustomMachineConfigJSON { public static void readConfig(File config) { try { - JsonObject json = gson.fromJson(new FileReader(config), JsonObject.class); + JsonObject json = gson.fromJson(new InputStreamReader(Files.newInputStream(config.toPath()), StandardCharsets.UTF_8), JsonObject.class); JsonArray machines = json.get("machines").getAsJsonArray(); for(int i = 0; i < machines.size(); i++) { @@ -182,32 +181,32 @@ public class CustomMachineConfigJSON { try { JsonArray recipeShape = machineObject.get("recipeShape").getAsJsonArray(); JsonArray recipeParts = machineObject.get("recipeParts").getAsJsonArray(); - + Object[] parts = new Object[recipeShape.size() + recipeParts.size()]; - + for(int j = 0; j < recipeShape.size(); j++) { parts[j] = recipeShape.get(j).getAsString(); } - + for(int j = 0; j < recipeParts.size(); j++) { Object o = null; - + if(j % 2 == 0) { o = recipeParts.get(j).getAsString().charAt(0); //god is dead and we killed him } else { AStack a = SerializableRecipe.readAStack(recipeParts.get(j).getAsJsonArray()); - + if(a instanceof ComparableStack) o = ((ComparableStack) a).toStack(); if(a instanceof OreDictStack) o = ((OreDictStack) a).name; } - + parts[j + recipeShape.size()] = o; } - + ItemStack stack = new ItemStack(ModBlocks.custom_machine, 1, i + 100); stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound.setString("machineType", configuration.unlocalizedName); - + CraftingManager.addRecipeAuto(stack, parts); } catch(Exception ex) { MainRegistry.logger.error("Caught exception trying to parse core recipe for custom machine " + configuration.unlocalizedName); diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index b020867c4..3eb3f8886 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -1,9 +1,8 @@ package com.hbm.inventory.fluid; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -35,7 +34,7 @@ import net.minecraft.potion.PotionEffect; public class Fluids { public static final Gson gson = new Gson(); - + public static List additionalListeners = new ArrayList(); public static FluidType NONE; @@ -797,7 +796,7 @@ public class Fluids { private static void readCustomFluids(File file) { try { - JsonObject json = gson.fromJson(new FileReader(file), JsonObject.class); + JsonObject json = gson.fromJson(new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8), JsonObject.class); for(Entry entry : json.entrySet()) { @@ -879,12 +878,12 @@ public class Fluids { ex.printStackTrace(); } } - + public static void reloadFluids(){ File folder = MainRegistry.configHbmDir; File customTypes = new File(folder.getAbsolutePath() + File.separatorChar + "hbmFluidTypes.json"); if(!customTypes.exists()) initDefaultFluids(customTypes); - + for(FluidType type : customFluids){ idMapping.remove(type.getID()); registerOrder.remove(type); @@ -892,7 +891,7 @@ public class Fluids { metaOrder.remove(type); } customFluids.clear(); - + for(FluidType type : foreignFluids){ idMapping.remove(type.getID()); registerOrder.remove(type); @@ -900,7 +899,7 @@ public class Fluids { metaOrder.remove(type); } foreignFluids.clear(); - + readCustomFluids(customTypes); for(FluidType custom : customFluids) metaOrder.add(custom); File config = new File(MainRegistry.configHbmDir.getAbsolutePath() + File.separatorChar + "hbmFluidTraits.json"); @@ -911,7 +910,7 @@ public class Fluids { } else { readTraits(config); } - + for(IFluidRegisterListener listener : additionalListeners) listener.onFluidsLoad(); } private static void registerCalculatedFuel(FluidType type, double base, double combustMult, FuelGrade grade) { diff --git a/src/main/java/com/hbm/qmaw/GuiQMAW.java b/src/main/java/com/hbm/qmaw/GuiQMAW.java index c59834957..e98d4e476 100644 --- a/src/main/java/com/hbm/qmaw/GuiQMAW.java +++ b/src/main/java/com/hbm/qmaw/GuiQMAW.java @@ -23,7 +23,7 @@ import net.minecraft.util.ResourceLocation; public class GuiQMAW extends GuiScreen { protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_wiki.png"); - + public String title; public String qmawID; public ItemStack icon; @@ -31,51 +31,51 @@ public class GuiQMAW extends GuiScreen { /** History for returning via button */ public List back = new ArrayList(); public List forward = new ArrayList(); - + protected int xSize = 340; protected int ySize = 224; protected int guiLeft; protected int guiTop; - + protected boolean isDragging = false; protected int scrollProgress = 0; protected int lastClickX = 0; protected int lastClickY = 0; - + public static final String EN_US = "en_US"; - + public GuiQMAW(QuickManualAndWiki qmaw) { qmawID = qmaw.name; parseQMAW(qmaw); } - + protected void parseQMAW(QuickManualAndWiki qmaw) { LanguageManager lang = Minecraft.getMinecraft().getLanguageManager(); - - this.title = qmaw.title.get(lang.getCurrentLanguage()); + + this.title = qmaw.title.get(lang.getCurrentLanguage().getLanguageCode()); if(title == null) this.title = qmaw.title.get(EN_US); if(title == null) this.title = "Missing Localization!"; - + this.icon = qmaw.icon; - - String toParse = qmaw.contents.get(lang.getCurrentLanguage()); + + String toParse = qmaw.contents.get(lang.getCurrentLanguage().getLanguageCode()); if(toParse == null) toParse = qmaw.contents.get(EN_US); if(toParse == null) toParse = "Missing Localization!"; toParse = "" + toParse; // strings are reference types, no? - + int maxLineLength = xSize - 29; String prevToParse = "" + toParse; int maxIterations = 1000; int currentLineWidth = 0; - + while(!toParse.isEmpty() && maxIterations > 0) { if(this.lines.isEmpty()) this.lines.add(new ArrayList()); List currentLine = this.lines.get(this.lines.size() - 1); - + toParse = toParse.trim(); - + maxIterations--; - + if(toParse.startsWith("
")) { toParse = toParse.substring(4); currentLine = new ArrayList(); @@ -83,25 +83,25 @@ public class GuiQMAW extends GuiScreen { currentLineWidth = 0; continue; } - + // handle links if(toParse.startsWith("[[")) { int end = toParse.indexOf("]]"); if(end != -1) { String link = toParse.substring(2, end); toParse = toParse.substring(end + 2); - + int pipe = link.indexOf("|"); QComponentLink linkComponent; - + String suffix = toParse.startsWith(" ") ? " " : ""; - + if(pipe == -1) { linkComponent = new QComponentLink(link, link + suffix); } else { linkComponent = new QComponentLink(link.substring(pipe + 1, link.length()), link.substring(0, pipe) + suffix); } - + // append to current line int width = linkComponent.getWidth(); if(width + currentLineWidth <= maxLineLength) { @@ -119,21 +119,21 @@ public class GuiQMAW extends GuiScreen { continue; } } - + // handle standard text int delimit = toParse.length(); - + int spaceIndex = toParse.indexOf(" "); if(spaceIndex != -1) delimit = Math.min(delimit, spaceIndex); int linkIndex = toParse.indexOf("[["); if(linkIndex != -1) delimit = Math.min(delimit, linkIndex); int brIndex = toParse.indexOf("
"); if(brIndex != -1) delimit = Math.min(delimit, brIndex); - + if(delimit > 0) { QComponentText textComponent = new QComponentText(toParse.substring(0, delimit) + (spaceIndex == delimit ? " " : "")); toParse = toParse.substring(delimit); - + // append to current line int width = textComponent.getWidth(); if(width + currentLineWidth <= maxLineLength) { @@ -150,7 +150,7 @@ public class GuiQMAW extends GuiScreen { prevToParse = "" + toParse; continue; } - + if(toParse.equals(prevToParse)) break; prevToParse = "" + toParse; } @@ -166,7 +166,7 @@ public class GuiQMAW extends GuiScreen { @Override protected void mouseClicked(int x, int y, int key) { super.mouseClicked(x, y, key); - + if(key == 0) { this.lastClickX = x; this.lastClickY = y; @@ -175,10 +175,10 @@ public class GuiQMAW extends GuiScreen { if(guiLeft + 3 <= x && guiLeft + 3 + 18 > x && guiTop + 3 < y && guiTop + 3 + 18 >= y) back(); if(guiLeft + 21 <= x && guiLeft + 21 + 18 > x && guiTop + 3 < y && guiTop + 3 + 18 >= y) forward(); } - + public void back() { if(this.back.isEmpty()) return; - + String prev = back.get(back.size() - 1); QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(prev); @@ -192,10 +192,10 @@ public class GuiQMAW extends GuiScreen { FMLCommonHandler.instance().showGuiScreen(screen); } } - + public void forward() { if(this.forward.isEmpty()) return; - + String next = forward.get(forward.size() - 1); QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(next); @@ -209,7 +209,7 @@ public class GuiQMAW extends GuiScreen { FMLCommonHandler.instance().showGuiScreen(screen); } } - + public int getSliderPosition() { double progress = (double) scrollProgress / (double) (lines.size() - 1); return 25 + (int) (progress * 180); @@ -217,38 +217,38 @@ public class GuiQMAW extends GuiScreen { @Override public void drawScreen(int mouseX, int mouseY, float f) { - + if(Mouse.isButtonDown(0) && guiLeft + xSize - 15 <= mouseX && guiLeft + xSize - 15 + 12 > mouseX && guiTop + 25 < mouseY && guiTop + 25 + 191 >= mouseY) { isDragging = true; } - + if(!Mouse.isButtonDown(0)) isDragging = false; - + if(isDragging) { int min = guiTop + 25 + 8; int max = guiTop + 25 + 191 - 8; int span = max - min; - + double progress = MathHelper.clamp_double((double) (mouseY - min) / span, 0D, 1D); this.scrollProgress = MathHelper.clamp_int((int) Math.round((lines.size() - 1) * progress), 0, lines.size() - 1); } - + handleScroll(); //this.drawRect(0, 0, this.width, this.height, 0x80919191); this.drawRect(0, 0, this.width, this.height, 0xe0000000); - + this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); GL11.glDisable(GL11.GL_LIGHTING); this.drawGuiContainerForegroundLayer(mouseX, mouseY); GL11.glEnable(GL11.GL_LIGHTING); - + this.lastClickX = 0; this.lastClickY = 0; } - + protected void handleScroll() { - + if(!Mouse.isButtonDown(0) && !Mouse.isButtonDown(1) && Mouse.next()) { int scroll = Mouse.getEventDWheel(); if(scroll > 0 && this.scrollProgress > 0) this.scrollProgress--; @@ -257,10 +257,10 @@ public class GuiQMAW extends GuiScreen { } private void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - + int x = 43; int y = 4; - + if(this.icon != null) { GL11.glPushMatrix(); GL11.glEnable(GL11.GL_DEPTH_TEST); @@ -273,13 +273,13 @@ public class GuiQMAW extends GuiScreen { RenderHelper.disableStandardItemLighting(); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glPopMatrix(); - + x += 18; y += (16 - this.fontRendererObj.FONT_HEIGHT) / 2; } - + y += 1; - + this.fontRendererObj.drawString(title, guiLeft + x, guiTop + y, 0xFFFFFF); } @@ -292,30 +292,30 @@ public class GuiQMAW extends GuiScreen { if(!back.isEmpty()) drawTexturedModalRect(guiLeft + 3, guiTop + 3, 204, 0, 18, 18); if(!forward.isEmpty()) drawTexturedModalRect(guiLeft + 21, guiTop + 3, 222, 0, 18, 18); - + // scroll bar drawTexturedModalRect(guiLeft + xSize - 15, guiTop + getSliderPosition(), 192, 0, 12, 16); - + int x = guiLeft + 7; int y = guiTop + 30; int lineNum = 0; - + for(List line : lines) { lineNum++; - + if(lineNum <= this.scrollProgress) continue; - + int maxHeight = 0; int inset = 0; - + for(ManualElement element : line) { maxHeight = Math.max(maxHeight, element.getHeight()); } - + if(y + maxHeight > guiTop + 219) break; - + if(line.isEmpty()) y += this.fontRendererObj.FONT_HEIGHT; - + for(ManualElement element : line) { int elementX = x + inset; int elementY = y + (maxHeight - element.getHeight()) / 2; @@ -325,7 +325,7 @@ public class GuiQMAW extends GuiScreen { element.onClick(this); inset += element.getWidth(); } - + y += maxHeight + 2; } } @@ -335,7 +335,7 @@ public class GuiQMAW extends GuiScreen { if(keyCode == Keyboard.KEY_LEFT) back(); if(keyCode == Keyboard.KEY_RIGHT) forward(); - + if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) { this.mc.displayGuiScreen((GuiScreen) null); this.mc.setIngameFocus(); diff --git a/src/main/java/com/hbm/qmaw/QMAWLoader.java b/src/main/java/com/hbm/qmaw/QMAWLoader.java index b84cf594e..6e4aeec31 100644 --- a/src/main/java/com/hbm/qmaw/QMAWLoader.java +++ b/src/main/java/com/hbm/qmaw/QMAWLoader.java @@ -1,9 +1,8 @@ package com.hbm.qmaw; -import java.io.File; -import java.io.FileReader; -import java.io.InputStream; -import java.io.InputStreamReader; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; @@ -47,7 +46,7 @@ public class QMAWLoader implements IResourceManagerReloadListener { init(); MainRegistry.logger.info("[QMAW] Loaded " + qmaw.size() + " manual entries! (" + (System.currentTimeMillis() - timestamp) + "ms)"); } - + /** For the like 2 people who might consider making an NTM addon and want to include manual pages. Requires the mod's actual JAR file as the parameter. */ public static void registerModFileURL(File file) { registeredModFiles.add(file); @@ -62,14 +61,14 @@ public class QMAWLoader implements IResourceManagerReloadListener { // exclude .class in the case of a dev env MainRegistry.logger.info("[QMAW] Current running file: " + path); if(!path.endsWith(".class")) registerModFileURL(new File(path)); // i am going to shit myself*/ // deactivated because it likely doesn't even fucking work - + // registering of the mod file now happens in the MainRegistry during preinit - + qmaw.clear(); triggers.clear(); agonyEngine(); } - + /** "digital equivalent to holywater" yielded few results on google, if only i had the answer i would drown this entire class in it

* This affront to god can load QMAW definition files from four different sources:
* * Any mod's jar that has registered itself to include QMAW files
@@ -78,12 +77,12 @@ public class QMAWLoader implements IResourceManagerReloadListener { * * Folder-based resource packs * */ public static void agonyEngine() { - + for(File modFile : registeredModFiles) { logJarAttempt(modFile.getName()); dissectZip(modFile); } - + File devEnvManualFolder = new File(Minecraft.getMinecraft().mcDataDir.getAbsolutePath().replace("/eclipse/.".replace('/', File.separatorChar), "") + "/src/main/resources/assets/hbm/manual".replace('/', File.separatorChar)); if(devEnvManualFolder.exists() && devEnvManualFolder.isDirectory()) { MainRegistry.logger.info("[QMAW] Exploring " + devEnvManualFolder.getAbsolutePath()); @@ -91,17 +90,17 @@ public class QMAWLoader implements IResourceManagerReloadListener { } ResourcePackRepository repo = Minecraft.getMinecraft().getResourcePackRepository(); - + for(Object o : repo.getRepositoryEntries()) { ResourcePackRepository.Entry entry = (ResourcePackRepository.Entry) o; IResourcePack pack = entry.getResourcePack(); logPackAttempt(pack.getPackName()); - + if(pack instanceof FileResourcePack) { dissectZip(((FileResourcePack) pack).resourcePackFile); } - + if(pack instanceof FolderResourcePack) { dissectFolder(((FolderResourcePack) pack).resourcePackFile); } @@ -111,27 +110,27 @@ public class QMAWLoader implements IResourceManagerReloadListener { public static void logJarAttempt(String name) { MainRegistry.logger.info("[QMAW] Dissecting jar " + name); } public static void logPackAttempt(String name) { MainRegistry.logger.info("[QMAW] Dissecting resource " + name); } public static void logFoundManual(String name) { MainRegistry.logger.info("[QMAW] Found manual " + name); } - + /** You put your white gloves on, you get your hand in there, and then you iterate OVER THE ENTIRE FUCKING ZIP until we find things we deem usable */ public static void dissectZip(File zipFile) { - + if(zipFile == null) { MainRegistry.logger.info("[QMAW] Pack file does not exist!"); return; } - + ZipFile zip = null; - + try { zip = new ZipFile(zipFile); Enumeration enumerator = zip.entries(); - + while(enumerator.hasMoreElements()) { ZipEntry entry = enumerator.nextElement(); String name = entry.getName(); if(name.startsWith("assets/hbm/manual/") && name.endsWith(".json")) { InputStream fileStream = zip.getInputStream(entry); - InputStreamReader reader = new InputStreamReader(fileStream); + InputStreamReader reader = new InputStreamReader(fileStream, StandardCharsets.UTF_8); try { JsonObject obj = (JsonObject) parser.parse(reader); String manName = name.replace("assets/hbm/manual/", ""); @@ -143,7 +142,7 @@ public class QMAWLoader implements IResourceManagerReloadListener { } } } - + } catch(Exception ex) { MainRegistry.logger.info("[QMAW] Error dissecting zip " + zipFile.getName() + ": " + ex); } finally { @@ -152,13 +151,13 @@ public class QMAWLoader implements IResourceManagerReloadListener { } catch(Exception ex) { } } } - + /** Opens a resource pack folder, skips to the manual folder, then tries to dissect that */ public static void dissectFolder(File folder) { File manualFolder = new File(folder, "/assets/hbm/manual"); if(manualFolder.exists() && manualFolder.isDirectory()) dissectManualFolder(manualFolder); } - + /** Anal bleeding */ public static void dissectManualFolder(File folder) { @@ -167,7 +166,8 @@ public class QMAWLoader implements IResourceManagerReloadListener { String name = file.getName(); if(file.isFile() && name.endsWith(".json")) { try { - FileReader reader = new FileReader(file); + //FileReader reader = new FileReader(file); + InputStreamReader reader = new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8); JsonObject obj = (JsonObject) parser.parse(reader); registerJson(name, obj); logFoundManual(name); @@ -179,35 +179,35 @@ public class QMAWLoader implements IResourceManagerReloadListener { } } } - + /** Extracts all the info from a json file's main object to add a QMAW to the system. Very barebones, only handles name, icon and the localized text. */ public static void registerJson(String file, JsonObject json) { - + String name = json.get("name").getAsString(); - + if(QMAWLoader.qmaw.containsKey(name)) { MainRegistry.logger.info("[QMAW] Skipping existing entry " + file); return; } - + QuickManualAndWiki qmaw = new QuickManualAndWiki(name); - + if(json.has("icon")) { qmaw.setIcon(SerializableRecipe.readItemStack(json.get("icon").getAsJsonArray())); } - + JsonObject title = json.get("title").getAsJsonObject(); for(Entry part : title.entrySet()) { qmaw.addTitle(part.getKey(), part.getValue().getAsString()); } - + JsonObject content = json.get("content").getAsJsonObject(); for(Entry part : content.entrySet()) { qmaw.addLang(part.getKey(), part.getValue().getAsString()); } - + JsonArray triggers = json.get("trigger").getAsJsonArray(); - + for(JsonElement element : triggers) { ItemStack trigger = SerializableRecipe.readItemStack(element.getAsJsonArray()); // items get renamed and removed all the time, so we add some more debug goodness for those cases @@ -217,7 +217,7 @@ public class QMAWLoader implements IResourceManagerReloadListener { QMAWLoader.triggers.put(new ComparableStack(trigger).makeSingular(), qmaw); } } - + if(!qmaw.contents.isEmpty()) { QMAWLoader.qmaw.put(name, qmaw); } From ecc81519195d4597499ff7f669c505d186686257 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Wed, 20 Aug 2025 23:39:07 +0300 Subject: [PATCH 429/491] i am alive! --- src/main/resources/assets/hbm/lang/uk_UA.lang | 56 ++++++++++++++++--- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 623aa6faa..0c9a59171 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -184,6 +184,14 @@ armorMod.type.leggings=Наголінники armorMod.type.servo=Сервоприводи armorMod.type.special=Спеціальне +autoswitch=Частина групи автоматичного перемикання "%s"$Рецепт змінюється залежно від першого інгредієнта +autoswitch.plate=Переробка паливних пластин +autoswitch.plates=Металеві пластини +autoswitch.pwr=Переробка палива ВВЕР +autoswitch.schrab=Екстракція шрабідіуму +autoswitch.watz=Переробка Ватцз гранул +autoswitch.zirnox=Переробка ЦИРНОКС палива + battery.mode.buffer=Буферний режим battery.mode.input=Зарядка battery.mode.off=Вимкнено @@ -697,6 +705,10 @@ commands.satellite.satellite_descended=Супутник успішно спус commands.satellite.satellite_orbited=Супутник запущено. commands.satellite.should_be_run_as_player=Цю команду має виконати гравець! +commands.locate.no_match=Немає споруд з такою назвою! +commands.locate.none_found=Поруч не знайдено жодних споруд! +commands.locate.success.coordinates=Структуру %s знайдено на %d, %d + container.ammoBag=Сумка для боєприпасів container.amsBase=AMS Base (Deco) container.amsEmitter=AMS Emitter (Deco) @@ -794,6 +806,7 @@ container.machineLargeTurbine=Промислова парова турбіна container.machineLiquefactor=Скраплювач container.machineMixer=Промисловий змішувач container.machineOreSlopper=Переробник корінної руди +container.machinePUREX=PUREX container.machinePyroOven=Піролізна піч container.machineRefinery=Нафтопереробний завод container.machineRotaryFurnace=Роторна піч @@ -841,6 +854,7 @@ container.radar=Радар container.radiobox=FM-передавач container.radiolysis=РІТЕГ та радіолізна камера container.radiorec=FM радіо +container.rbmkAutoloader=Автозавантажувач РБМК container.rbmkBoiler=Паровий канал РБМК container.rbmkControl=Регулюючий стрижень РБМК container.rbmkControlAuto=Автоматичний регулюючий стрижень РБМК @@ -853,6 +867,7 @@ container.reactorBreeding=Реактор-розмножувач container.reactorControl=Блок дистанційного керування реактором container.reactorLarge=Великий ядерний реактор container.reactorResearch=Дослідницький реактор +container.rebar=Постановщик арматури container.reix=Rei-X Mainframe container.rtg=РІТЕГ container.rtgFurnace=РІТЕГ піч @@ -1461,6 +1476,7 @@ hbmfluid.coalgas=Вугільний бензин hbmfluid.coalgas_leaded=Етильований вугільний бензин hbmfluid.coaloil=Скраплене вугілля hbmfluid.colloid=Колоїд +hbmfluid.concrete=Рідкий бетон hbmfluid.coolant=Охолоджувальна рідина hbmfluid.coolant_hot=Гаряча охолоджувальна рідина hbmfluid.crackoil=Крекінгова нафта @@ -2108,7 +2124,7 @@ item.billet_nuclear_waste.name=Заготовка ядерних відході item.billet_pb209.name=Заготовка свинцю-209 item.billet_po210be.name=Заготовка полоній-210 берилію item.billet_polonium.name=Заготовка полонію-210 -item.billet_pu_mix.name=Заготовка реакторного полонію +item.billet_pu_mix.name=Заготовка реакторного плутонію item.billet_pu238.name=Заготовка плутонію-238 item.billet_pu238be.name=Заготовка плутоній-238 берилію item.billet_pu239.name=Заготовка плутонію-239 @@ -2161,6 +2177,7 @@ item.blades_desh.name=Деш леза подрібнювача item.blades_steel.name=Стальні леза подрібнювача item.blades_titanium.name=Титанові леза подрібнювача item.blowtorch.name=Паяльна лампа +item.blueprint_folder.name=Буклет з кресленнями item.blueprints.name=Креслення item.board_copper.name=Мідна панель item.boat_rubber.name=Гумовий човен @@ -2772,7 +2789,7 @@ item.fleija_igniter.name=Імпульсний запальник item.fleija_kit.name=Комплект F.L.E.I.J.A. item.fleija_propellant.name=Шрабідієвий заряд item.fluid_barrel_empty.name=Порожня бочка для рідини -item.fluid_barrel_full.name=Бочка для рідини: +item.fluid_barrel_full.name=Бочка для рідини: %s item.fluid_barrel_infinite.name=Нескінченна бочка для рідини item.fluid_duct.name=Трубопровід: item.fluid_identifier.name=Ідентифікатор рідини @@ -2783,10 +2800,12 @@ item.fluid_identifier.usage2=трубопроводів в діапазоні 64 item.fluid_identifier_multi.name=Мульти ідентифікатор рідини item.fluid_identifier_multi.info=Універсальний ідентифікатор рідини для: item.fluid_identifier_multi.info2=Другий тип: +item.fluid_pack_empty.name=Великий контейнер для рідини +item.fluid_pack_full.name=Упаковано %s item.fluid_tank_empty.name=Порожній універсальний резервуар для рідини -item.fluid_tank_full.name=Універсальний резервуар для рідини: +item.fluid_tank_full.name=Універсальний резервуар для рідини: %s item.fluid_tank_lead_empty.name=Порожній резервуар для небезпечних матеріалів -item.fluid_tank_lead_full.name=Резервуар для небезпечних матеріалів: +item.fluid_tank_lead_full.name=Резервуар для небезпечних матеріалів: %s item.fluorite.name=Флюорит item.flywheel_beryllium.name=Берилієвий маховик item.fmn.name=Таблетка флунітразепаму @@ -2907,6 +2926,7 @@ item.gun_amat.name=Антиматерієва гвинтівка item.gun_amat_penance.name=Покаяння item.gun_amat_subtlety.name=Витонченість item.gun_autoshotgun.name=Автоматичний дробовик +item.gun_autoshotgun_heretic.name=Єретик item.gun_autoshotgun_sexy.name=Сексі item.gun_autoshotgun_shredder.name=Шредер item.gun_b92.name=§9B92 Енергетичний пістолет§r @@ -3171,6 +3191,13 @@ item.insert_polonium.name=Полонієва вставка item.insert_steel.name=Важка сталева вставка item.insert_xsapi.name=Твердосплавна протикульна броневставка item.insert_yharonite.name=Яронітова вставка +item.item_expensive.bronze_tubes.name=Бронзові структурні елементи +item.item_expensive.circuit.name=Розширена друкована плата +item.item_expensive.computer.name=Мейнфрейм +item.item_expensive.ferro_plating.name=Армовані фероуранові панелі +item.item_expensive.heavy_frame.name=Важкий каркас +item.item_expensive.lead_plating.name=Радіаційно-стійке покриття +item.item_expensive.steel_plating.name=Болтове сталеве покриття item.item_secret.aberrator.name=Частина Абератора item.item_secret.canister.name=Композит SB-26 item.item_secret.controller.name=Пропрієтарний блок керування @@ -4069,6 +4096,7 @@ item.rbmk_tool.set=РБМК підключено! item.reacher.name=Вольфрамовий ухват item.reactor_core.name=Активна зона реактора розмножувача item.reactor_sensor.name=Дистанційний датчик реактора +item.rebar_placer.name=Встановлювач арматури item.record.glass.desc=? ? ? item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core item.record.ss.desc=Valve - Sector Sweep @@ -4753,6 +4781,11 @@ potion.hbm_stability=Стабільність potion.hbm_taint=Отруєння порчею potion.hbm_telekinesis=! ! ! +purex.recycle=Переробка %s +purex.schrab=Екстракція шрабідіуму з %s + +qmaw.tab=[ Натисніть %s для допомоги ] + radar.clearMap=Очистити карту radar.detectMissiles=Виявляти ракети radar.detectPlayers=Виявляти гравців @@ -5143,6 +5176,7 @@ tile.concrete_colored_ext.pink.name=Бетон "Вибір будівельни tile.concrete_colored_ext.purple.name=Бетон "Вибір будівельника" - Таємничий фіолетовий tile.concrete_colored_ext.sand.name=Бетон "Вибір будівельника" - Буря в пустелі tile.concrete_pillar.name=Армована залізобетонна колона +tile.concrete_rebar.name=Залізобетон tile.concrete_slab.asphalt.name=Плита з асфальту tile.concrete_slab.concrete.name=Плита з бетонної плитки tile.concrete_slab.concrete_asbestos.name=Плита з азбестобетону @@ -5315,12 +5349,12 @@ tile.floodlight.name=Потужний прожектор tile.fluid_duct.name=Універсальний рідинний трубопровід (Застаріло) tile.fluid_duct_box.name=Універсальний рідинний трубопровід (Boxduct) tile.fluid_duct_exhaust.name=Вихлопна труба -tile.fluid_duct_paintable_block_exhaust.name=Вихлопна труба з покриттям +tile.fluid_duct_paintable_block_exhaust.name=Вихлопна труба, яку можна пофарбувати tile.fluid_duct_gauge.name=Вимірювальна труба tile.fluid_duct_gauge.desc=Труба, що показує, скільки рідини$переміщується в мережі за один тік.$Розділені мережі, з'єднані бочками$або цистернами, вважаються однією спільною мережею. tile.fluid_duct_neo.name=Універсальний рідинний трубопровід -tile.fluid_duct_paintable.name=Універсальний рідинний трубопровід з покриттям -tile.fluid_duct_solid.name=Універсальний рідинний трубопровід з покриттям (Застаріло) +tile.fluid_duct_paintable.name=Універсальний рідинний трубопровід, який можна пофарбувати +tile.fluid_duct_solid.name=Універсальний рідинний трубопровід, який можна пофарбувати (Застаріло) tile.fluid_pump.name=Насос регулювання потоку tile.fluid_switch.name=Редстоун рідинний клапан tile.fluid_valve.name=Рідинний клапан @@ -5580,6 +5614,8 @@ tile.machine_powerrtg.name=Полоній-теннессинова ізотоп tile.machine_press.name=Твердопаливний прес tile.machine_puf6_tank.name=Цистерна гексафториду плутонію tile.machine_pumpjack.name=Верстат-гойдалка +tile.machine_purex.name=PUREX +tile.machine_purex.desc=Машина для переробки багатьох видів ядерного палива.$Для більшості рецептів потрібен гас та азотна кислота. tile.machine_pyrooven.name=Піролізна піч tile.machine_radar.name=Радар tile.machine_radar_large.name=Великий радар @@ -5870,6 +5906,7 @@ tile.rail_large_switch_flipped.name=Стандартний залізнични tile.rail_narrow.name=Вузькоколійні рейки tile.rail_wood.name=Дерев'яні рейки tile.rbmk_absorber.name=Борний поглинач нейтронів РБМК +tile.rbmk_autoloader.name=Автозавантажувач РБМК tile.rbmk_blank.name=Структурна колона РБМК tile.rbmk_boiler.name=Паровий канал РБМК tile.rbmk_console.name=Консоль РБМК @@ -5901,12 +5938,13 @@ tile.reactor_ejector.name=Reactor Waste Ejector tile.reactor_element.name=Reactor Chamber tile.reactor_hatch.name=Reactor Access Hatch tile.reactor_inserter.name=Reactor Fuel Inserter +tile.rebar.name=Арматура tile.red_barrel.name=Вибухова бочка tile.red_cable.name=Червономідний кабель tile.red_cable_classic.name=Червономідний кабель (Класичний) tile.red_cable_gauge.name=Датчик потужності tile.red_cable_gauge.desc=Кабель, який показує, скільки енергії$переміщується в мережі за один тік.$Розділені мережі, з’єднані блоками$накопичення енергії, вважаються однією спільною мережею. -tile.red_cable_paintable.name=Червономідний кабель, який можна фарбувати +tile.red_cable_paintable.name=Червономідний кабель, який можна пофарбувати tile.red_connector.name=Конектор електропередач tile.red_pylon.name=Опора лінії електропередач tile.red_pylon_large.name=Велика опора лінії електропередач @@ -6232,4 +6270,4 @@ desc.gui.upgrade.overdrive= * §7Перевантаження§r: Складає desc.gui.upgrade.power= * §1Енергозбереження§r: Складається до 3 рівнів desc.gui.upgrade.speed= * §4Швидкість§r: Складається до 3 рівнів -tile.oc_cable_paintable.name=Мережевий кабель, який можна фарбувати \ No newline at end of file +tile.oc_cable_paintable.name=Мережевий кабель, який можна пофарбувати \ No newline at end of file From a4e1cc139ff1d73952266f8a1229dd48a019a41b Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Wed, 20 Aug 2025 23:40:27 +0300 Subject: [PATCH 430/491] fuck yea --- src/main/resources/assets/hbm/manual/material/alloy.json | 2 ++ src/main/resources/assets/hbm/manual/material/aluminium.json | 2 ++ src/main/resources/assets/hbm/manual/material/arsenic.json | 2 ++ .../resources/assets/hbm/manual/material/arsenic_bronze.json | 2 ++ src/main/resources/assets/hbm/manual/material/bakelite.json | 2 ++ src/main/resources/assets/hbm/manual/material/bismuth.json | 2 ++ .../resources/assets/hbm/manual/material/bismuth_bronze.json | 2 ++ src/main/resources/assets/hbm/manual/material/bscco.json | 2 ++ src/main/resources/assets/hbm/manual/material/cadmium.json | 2 ++ .../resources/assets/hbm/manual/material/cadmium_steel.json | 2 ++ src/main/resources/assets/hbm/manual/material/cinnabar.json | 2 ++ src/main/resources/assets/hbm/manual/material/coke.json | 2 ++ src/main/resources/assets/hbm/manual/material/copper.json | 2 ++ src/main/resources/assets/hbm/manual/material/desh.json | 2 ++ .../resources/assets/hbm/manual/material/ferrouranium.json | 2 ++ src/main/resources/assets/hbm/manual/material/graphite.json | 2 ++ src/main/resources/assets/hbm/manual/material/gunmetal.json | 2 ++ src/main/resources/assets/hbm/manual/material/hss.json | 2 ++ src/main/resources/assets/hbm/manual/material/latex.json | 2 ++ src/main/resources/assets/hbm/manual/material/lead.json | 2 ++ src/main/resources/assets/hbm/manual/material/mingrade.json | 2 ++ src/main/resources/assets/hbm/manual/material/neptunium.json | 4 +++- .../resources/assets/hbm/manual/material/plutonium-238.json | 2 ++ .../resources/assets/hbm/manual/material/plutonium-239.json | 2 ++ .../resources/assets/hbm/manual/material/plutonium-240.json | 2 ++ .../resources/assets/hbm/manual/material/plutonium-241.json | 2 ++ .../resources/assets/hbm/manual/material/plutonium-rg.json | 2 ++ src/main/resources/assets/hbm/manual/material/plutonium.json | 2 ++ src/main/resources/assets/hbm/manual/material/polonium.json | 2 ++ src/main/resources/assets/hbm/manual/material/polymer.json | 2 ++ src/main/resources/assets/hbm/manual/material/radium.json | 2 ++ src/main/resources/assets/hbm/manual/material/rubber.json | 2 ++ src/main/resources/assets/hbm/manual/material/silicon.json | 2 ++ src/main/resources/assets/hbm/manual/material/sodium.json | 2 ++ src/main/resources/assets/hbm/manual/material/steel.json | 2 ++ src/main/resources/assets/hbm/manual/material/sulfur.json | 2 ++ src/main/resources/assets/hbm/manual/material/tantalium.json | 2 ++ src/main/resources/assets/hbm/manual/material/technetium.json | 2 ++ .../assets/hbm/manual/material/technetium_steel.json | 2 ++ src/main/resources/assets/hbm/manual/material/thorium.json | 2 ++ .../resources/assets/hbm/manual/material/uranium-233.json | 2 ++ .../resources/assets/hbm/manual/material/uranium-235.json | 2 ++ .../resources/assets/hbm/manual/material/uranium-238.json | 2 ++ src/main/resources/assets/hbm/manual/material/uranium.json | 2 ++ .../resources/assets/hbm/manual/material/weaponsteel.json | 2 ++ 45 files changed, 91 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/alloy.json b/src/main/resources/assets/hbm/manual/material/alloy.json index 03ef80a7a..19967db56 100644 --- a/src/main/resources/assets/hbm/manual/material/alloy.json +++ b/src/main/resources/assets/hbm/manual/material/alloy.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_advanced_alloy"], ["hbm:item.powder_advanced_alloy"], ["hbm:item.plate_advanced_alloy"]], "title": { "en_US": "Advanced Alloy", + "uk_UA": "Удосконалений сплав", "ru_ru": "Продвинутый сплав" }, "content": { "en_US": "Made in a [[blast furnace|Blast Furnace]] from [[steel|Steel]] and [[Minecraft grade copper|Minecraft Grade Copper]]. Makes better-than-diamond gear. Also used in some high-powered magnets for the [[fusion reactor|Fusion Reactor]] and the [[exposure chamber|Exposure Chamber]].", + "uk_UA": "Виготовлено в [[доменній печі|Blast Furnace]] зі [[сталі|Steel]] та [[червоної міді|Minecraft Grade Copper]]. З нього робиться спорядження краще за алмазне. Також використовується в деяких потужних магнітах для [[термоядерного реактору|Fusion Reactor]] та [[камери опромінювання|Exposure Chamber]].", "ru_RU": "Изготовлено в [[доменной печи|Blast Furnace]] из [[стали|Steel]] и [[красной меди|Minecraft Grade Copper]]. Из него делают инструменты, превосходящие алмазные. Также используется в некоторых мощных магнитах для [[термоядерного реактора|Fusion Reactor]] и [[камеры облучения|Exposure Chamber]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/aluminium.json b/src/main/resources/assets/hbm/manual/material/aluminium.json index 8bdf151bc..a94238bf5 100644 --- a/src/main/resources/assets/hbm/manual/material/aluminium.json +++ b/src/main/resources/assets/hbm/manual/material/aluminium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]], "title": { "en_US": "Aluminium", + "uk_UA": "Алюміній", "ru_RU": "Алюминий" }, "content": { "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.

Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages.", + "uk_UA": "Звичайний, легкий метал. Доступний на ранніх стадіях шляхом плавлення кріоліту ('алюмінієвої руди') у [[коксовій печі|Combination Oven]]. Може бути отриманий пізніше шляхом обробки [[бокситів|Bauxite]], та [[електролізу|Electrolysis Machine]] отриманого розчину оксиду алюмінію.

Використовується в трубопроводах, загальній роботі з рідинами, як компонент [[гарматної бронзи|Gunmetal]] та фюзеляжів ракет.", "ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозёма.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет." } } diff --git a/src/main/resources/assets/hbm/manual/material/arsenic.json b/src/main/resources/assets/hbm/manual/material/arsenic.json index d54f92d25..bd59c27e3 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_arsenic"], ["hbm:item.nugget_arsenic"]], "title": { "en_US": "Arsenic", + "uk_UA": "Миш'як", "ru_RU": "Мышьяк" }, "content": { "en_US": "Obtainable by treating oily scraps with [[high-performance solvent|High-Performance Solvent]] in an [[acidizer|Ore Acidizer]]. Oily scraps can be created by [[shredding|Shredder]] polluted blocks created by the [[fracking tower|Hydraulic Fracking Tower]]. Primarily used as [[arsenic bronze|Arsenic Bronze]].", + "uk_UA": "Отримується шляхом обробки нафтових відходів [[високоефективним розчинником|High-Performance Solvent]] в [[рудному окислювачі|Ore Acidizer]]. Нафтові відходи утворюються [[подрібненням|Shredder]] забруднених блоків, утворених [[вежею гідророзриву|Hydraulic Fracking Tower]]. В основному використовується як [[миш'якова бронза|Arsenic Bronze]].", "ru_RU": "Получается путём обработки нефтяных отходов [[высокоэффективным растворителем|High-Performance Solvent]] в [[рудном окислитиле|Ore Acidizer]]. Нефтяные отходы можно создать [[измельчением|Shredder]] загрязненных блоков, созданных [[башней гидроразрыва|Hydraulic Fracking Tower]]. В основном используется как [[мышьяковая бронза|Arsenic Bronze]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json index d53db5d12..ac4c8e6f4 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_arsenic_bronze"]], "title": { "en_US": "Arsenic Bronze", + "uk_UA": "Миш'якова бронза", "ru_RU": "Мышьяковая бронза" }, "content": { "en_US": "Derivative of [[arsenic|Arsenic]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]] due to requiring [[high-performance solvent|High-Performance Solvent]].

Fully interchangeable with [[bismuth bronze|Bismuth Bronze]].", + "uk_UA": "Похідна від [[миш'яку|Arsenic]], виготовлена в [[ливарні|Crucible]], доступна лише після будівництва [[РБМК|RBMK]] через необхідність у [[високоефективному розчиннику|High-Performance Solvent]].

Повністю взаємозамінна з [[вісмутовою бронзою|Bismuth Bronze]].", "ru_RU": "Производное от [[мышьяка|Arsenic]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]] из-за требования [[высокоэффективного растворителя|High-Performance Solvent]].

Полностью взаимозаменяемо с [[висмутовой бронзой|Bismuth Bronze]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/bakelite.json b/src/main/resources/assets/hbm/manual/material/bakelite.json index d5d232149..031844f3c 100644 --- a/src/main/resources/assets/hbm/manual/material/bakelite.json +++ b/src/main/resources/assets/hbm/manual/material/bakelite.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_bakelite"], ["hbm:item.powder_bakelite"]], "title": { "en_US": "Bakelite", + "uk_UA": "Карболіт", "ru_RU": "Бакелит" }, "content": { "en_US": "Alternative to [[polymer|Polymer]] made from [[aromatic hydrocarbons|Aromatic Hydrocarbons]] derived from [[cracked oil products|Catalytic Cracking Tower]]. Completely interchangeable in all recipes.", + "uk_UA": "Карболіт (радянська назва бакеліту) — альтернатива [[полімеру|Polymer]], виготовлений з [[ароматичних вуглеводнів|Aromatic Hydrocarbons]], отриманих з [[продуктів крекінгу нафти|Catalytic Cracking Tower]]. Повністю взаємозамінний у всіх рецептах.", "ru_RU": "Альтернатива [[полимеру|Polymer]], изготовленная из [[ароматических углеводородов|Aromatic Hydrocarbons]], полученных из [[продуктов крекинга нефти|Catalytic Cracking Tower]]. Полностью взаимозаменяема во всех рецептах." } } diff --git a/src/main/resources/assets/hbm/manual/material/bismuth.json b/src/main/resources/assets/hbm/manual/material/bismuth.json index 9b3105586..964c2cdad 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_bismuth"], ["hbm:item.billet_bismuth"], ["hbm:item.nugget_bismuth"], ["hbm:item.powder_bismuth"]], "title": { "en_US": "Bismuth", + "uk_UA": "Вісмут", "ru_RU": "Висмут" }, "content": { "en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]].", + "uk_UA": "Важкий метал, початково який можна отримати у результаті переробки відпрацьованого палива [[РБМК|RBMK]] в [[SILEX]], також може бути отриманий на пізнішій стадії переробки корінної руди з використанням [[високоефективного розчинника|High-Performance Solvent]]. Переважно використовуюється як [[вісмутова бронза|Bismuth Bronze]].", "ru_RU": "Тяжелый металл, первоначально получаемый из переработки отработанного топлива [[РБМК|RBMK]] в [[SILEX]], также может быть получен из поздних стадий обработки бедроковой руды с использованием [[высокоэффективного растворителя|High-Performance Solvent]]. В основном используется в виде [[висмутовай бронзы|Bismuth Bronze]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json index 07167ba3d..176a944c6 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_bismuth_bronze"]], "title": { "en_US": "Bismuth Bronze", + "uk_UA": "Вісмутова бронза", "ru_RU": "Висмутовая бронза" }, "content": { "en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].

Fully interchangeable with [[arsenic bronze|Arsenic Bronze]].", + "uk_UA": "Похідна від [[вісмуту|Bismuth]], виготовлена в [[ливарні|Crucible]], доступна лише після будівництва [[РБМК|RBMK]]br>
Повністю взаємозамінна з [[миш'яковою бронзою|Arsenic Bronze]].", "ru_RU": "Производное от [[висмута|Bismuth]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]].

Полностью взаимозаменяемо с [[мышьяковой бронзой|Arsenic Bronze]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/bscco.json b/src/main/resources/assets/hbm/manual/material/bscco.json index a341b55af..066f4e003 100644 --- a/src/main/resources/assets/hbm/manual/material/bscco.json +++ b/src/main/resources/assets/hbm/manual/material/bscco.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_bscco"], ["hbm:item.wire_dense", 1, 48]], "title": { "en_US": "BSCCO", + "uk_UA": "Вісмут стронцій кальцій мідь оксид (BSCCO)", "ru_RU": "BSCCO" }, "content": { "en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]].", + "uk_UA": "Потужний надпровідник, що використовується у високоякісних платах та котушках для [[прискорювача часток|Particle Accelerator]]. Потребує [[вісмут|Bismuth]], і тому доступний лише після побудови [[РБМК|RBMK]].", "ru_RU": "Мощный сверхпроводник, используемый в высокоуровневых цепях и катушках для [[ускорителя частиц|Particle Accelerator]]. Требует [[висмута|Bismuth]], и поэтому доступен только после постройки [[РБМК|RBMK]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/cadmium.json b/src/main/resources/assets/hbm/manual/material/cadmium.json index 0de201080..05f5181e4 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_cadmium"], ["hbm:item.powder_cadmium"]], "title": { "en_US": "Cadmium", + "uk_UA": "Кадмій", "ru_RU": "Кадмий" }, "content": { "en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute.", + "uk_UA": "Виготовляється шляхом обробки листя гірчичної верби [[високоефективним розчинником|High-Performance Solvent]]. Використовується у [[полівінілхлориді|PVC]], пізньому альтернативному рецепті для [[гуми|Rubber]] та для [[кадмієвої сталі|Cadmium Steel]], яка виступає як замінник [[технецієвої сталі|Technetium Steel]].", "ru_RU": "Изготовлен путём обработки листьев горчичной ивы [[высокоэффективным растворителем|High-Performance Solvent]]. Используется в [[ПВХ|PVC]], позднеигровом альтернативном рецепте для [[резины|Rubber]] и для [[кадмиевой стали|Cadmium Steel]], которая действует как замена [[технециевой стали|Technetium Steel]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json index 48ce8d495..bd9d6339d 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_cdalloy"]], "title": { "en_US": "Cadmium Steel", + "uk_UA": "Кадмієва сталь", "ru_RU": "Кадмиевая сталь" }, "content": { "en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes.", + "uk_UA": "Корозійностійкий сплав, виготовлений зі [[сталі|Steel]] та [[кадмію|Cadmium]]. Альтернатива [[технецієвій сталі|Technetium Steel]] в більшості рецептів.", "ru_RU": "Коррозионно-стойкий сплав, изготовленный из [[стали|Steel]] и [[кадмия|Cadmium]]. Альтернатива [[технециевой стали|Technetium Steel]] в большинстве рецептов." } } diff --git a/src/main/resources/assets/hbm/manual/material/cinnabar.json b/src/main/resources/assets/hbm/manual/material/cinnabar.json index bb721bf6f..459d22a98 100644 --- a/src/main/resources/assets/hbm/manual/material/cinnabar.json +++ b/src/main/resources/assets/hbm/manual/material/cinnabar.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.cinnebar"]], "title": { "en_US": "Cinnabar", + "uk_UA": "Кіновар", "ru_RU": "Киноварь" }, "content": { "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production.", + "uk_UA": "Рідкісна руда. Може бути [[окислена|Ore Acidizer]] в 375mB [[ртуті|Mercury]] (3 краплі ртуті), або виплавлена у [[коксовій печі|Combination Oven]] в 100mB ртуті та трохи сірки. Здебільшого використовується як ранній спосіб отримання ртуті для виробництва [[деш|Desh]].", "ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в коксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деша|Desh]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/coke.json b/src/main/resources/assets/hbm/manual/material/coke.json index 234ab7588..0ad74d780 100644 --- a/src/main/resources/assets/hbm/manual/material/coke.json +++ b/src/main/resources/assets/hbm/manual/material/coke.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.coke", 1, 32767]], "title": { "en_US": "Coke", + "uk_UA": "Кокс", "ru_RU": "Кокс" }, "content": { "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].

Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.

Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.

Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]].", + "uk_UA": "Високочистий вуглець, має вдвічі вищу горючість, ніж вугілля. Може бути зпресований у [[графіт|Graphite]], використовується у різних рецептах [[сталі|Steel]] або як джерело вуглецю для [[ливарні|Crucible]].

Вугільний кокс можна виготовляти шляхом обсмаження вугільних брикетів або коксування вугілля в різних його формах.

Буровугільний кокс виготовляється з набагато дешевшого та менш потужного бурого вугілля майже таким самим способом, незважаючи на це, він має ті ж характеристики.

Нафтовий кокс виготовляється або з невугільних смол у [[коксовій печі|Combination Oven]], або шляхом коксування різних видів нафтопродуктів у [[коксовій установці|Coking Unit]].", "ru_RU": "Высокочистый углерод, имеет вдвое большую энергию сгорания, чем уголь. Может быть спрессован в [[графит|Graphite]], используется в различных рецептах [[стали|Steel]] или как источник углерода для [[плавильни|Crucible]].

Угольный кокс можно получить путём переплавки угольных брикетов или комбинированной переплавки угля в различных формах.

Бурый кокс изготавливается из более дешёвого и менее мощного бурого угля тем же способом, но обладает теми же характеристиками.

Нефтяной кокс производится либо из неугольных смол в [[коксовой печи|Combination Oven]], либо путём коксования различных видов масла в [[коксовой установке|Coking Unit]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json index e8e155732..7feca78cd 100644 --- a/src/main/resources/assets/hbm/manual/material/copper.json +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]], "title": { "en_US": "Copper", + "uk_UA": "Мідь", "ru_RU": "Медь" }, "content": { "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.", + "uk_UA": "Поширений ресурс. У сирому вигляді здебільшого використовується як конструкційний матеріал, а також у речах, що витримують високі температури (такі як теплопропровідники). Активно використовується в різних сплавах.

[[Червона мідь|Minecraft Grade Copper]] — це сплав, виготовлений з редстоуну, який використовується майже у всіх електричних пристроях.

[[Удосконалений сплав|Advanced Alloy]] — це потужний ранній інструментальний матеріал, який перевершує алмаз.

[[Гарматна бронза]] — це важливий компонент багатьох видів зброї, а також гільз для боєприпасів.

[[Вісмутова бронза|Bismuth Bronze]] та [[миш'якова бронза|Arsenic Bronze]] — це пост-[[РБМК|RBMK]] матеріали що використовуються в багатьох машинах пізньої версії гри.

[[BSCCO]] — це надпровідник, похідний від [[вісмуту|Bismuth]] необхідний для високорівневих квантових схем та котушок [[прискорювача часток|Particle Accelerator]].", "ru_RU": "Обычный ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json index a34e741c7..f5b1e1027 100644 --- a/src/main/resources/assets/hbm/manual/material/desh.json +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]], "title": { "en_US": "Desh", + "uk_UA": "Деш", "ru_RU": "Деш" }, "content": { "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.", + "uk_UA": "Високоміцний робочий сплав, виготовлений на [[хімічному заводі|Chemical Plant]]. Потребує [[легку нафту|Light oil]] з базової переробки [[нафти|Crude Oil]], [[ртуть|Mercury]], побічний продукт [[[центрифугування|Centrifuge]] редстоунової руди та деш суміш, яка є просто [[подрібненими|Shredder]] шматками рідкоземельної руди.

Використовується в різних речах, особливо в інструментах та зброї. Деш інструменти повільні та відповідають лише залізному тіру, але є першими доступними незламними інструментами з багатьма режимами роботи.", "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деша, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей." } } diff --git a/src/main/resources/assets/hbm/manual/material/ferrouranium.json b/src/main/resources/assets/hbm/manual/material/ferrouranium.json index 687434042..f2c635d9a 100644 --- a/src/main/resources/assets/hbm/manual/material/ferrouranium.json +++ b/src/main/resources/assets/hbm/manual/material/ferrouranium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_ferrouranium"]], "title": { "en_US": "Ferrouranium", + "uk_UA": "Фероуран", "ru_RU": "Ферроуран" }, "content": { "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition.", + "uk_UA": "Сплав [[сталі|Steel]] та [[урану-238|Uranium-238]], виготовлений у [[ливарні|Crucible]]. В основному використовується в уранобетоні, деталях зброї та вибухових боєприпасах.", "ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[тигле|Crucible]]. В основном используется в дюкрете, деталях оружий и взрывных боеприпасах." } } diff --git a/src/main/resources/assets/hbm/manual/material/graphite.json b/src/main/resources/assets/hbm/manual/material/graphite.json index 1876c53fa..be283d5f2 100644 --- a/src/main/resources/assets/hbm/manual/material/graphite.json +++ b/src/main/resources/assets/hbm/manual/material/graphite.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_graphite"]], "title": { "en_US": "Graphite", + "uk_UA": "Графіт", "ru_RU": "Графит" }, "content": { "en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes.", + "uk_UA": "Виготовляється пресуванням коксу. Використовується в ядерних реакторах, графітових електродах для [[електричної дугової печі|Electric Arc Furnace]] або як джерело вуглецю в різних рецептах [[ливарні|Crucible]].", "ru_RU": "Изготавливается путём прессования кокса. Используется в ядерных реакторах, графитовых электродах для [[электродуговой печи|Electric Arc Furnace]] или как источник углерода в различных рецептах для [[плавильни|Crucible]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/gunmetal.json b/src/main/resources/assets/hbm/manual/material/gunmetal.json index f5d89a0b1..8c1118d61 100644 --- a/src/main/resources/assets/hbm/manual/material/gunmetal.json +++ b/src/main/resources/assets/hbm/manual/material/gunmetal.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]], "title": { "en_US": "Gunmetal", + "uk_UA": "Гарматна бронза", "ru_RU": "Оружейный металл" }, "content": { "en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition.", + "uk_UA": "Сплав [[алюмінію|Aluminium]] та [[міді|Copper]]. Може бути виготовлений на ковадлі або, що ефективніше, у [[роторній печі|Rotary Furnace]]. Використовується переважно для деталей зброї, а також для гільз більшості боєприпасів.", "ru_RU": "Сплав из [[алюминия|Aluminium]] и [[меди|Copper]]. Может быть изготовлен на наковальне или более эффективно в [[роторной печи|Rotary Furnace]]. В основном используется для деталей оружия, а также для гильз большинства боеприпасов." } } diff --git a/src/main/resources/assets/hbm/manual/material/hss.json b/src/main/resources/assets/hbm/manual/material/hss.json index 26380d6c5..364c5dd92 100644 --- a/src/main/resources/assets/hbm/manual/material/hss.json +++ b/src/main/resources/assets/hbm/manual/material/hss.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]], "title": { "en_US": "High-Speed Steel", + "uk_UA": "Швидкорізальна сталь", "ru_RU": "Высокоскоростная сталь" }, "content": { "en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable.", + "uk_UA": "Сплав зі [[сталі|Steel]], [[вольфраму|Tungsten]] та [[кобальту|Cobalt]], виготовлений в [[ливарні|Crucible]]. Створюється у вигляді рідкого металу, перед використанням його необхідно відлити у форму зливка або пластини.

Використовується для виготовлення різального обладнання що працює на великих швидкостях.", "ru_RU": "Сплав из [[стали|Steel]], [[вольфрама|Tungsten]] и [[кобальта|Cobalt]], изготовленный в [[плавильне|Crucible]]. Создается в виде жидкого металла, требует отливки в форму слитка или пластины перед использованием." } } diff --git a/src/main/resources/assets/hbm/manual/material/latex.json b/src/main/resources/assets/hbm/manual/material/latex.json index b5795bd32..133ca076d 100644 --- a/src/main/resources/assets/hbm/manual/material/latex.json +++ b/src/main/resources/assets/hbm/manual/material/latex.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]], "title": { "en_US": "Latex", + "uk_UA": "Латекс", "ru_RU": "Латекс" }, "content": { "en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa.", + "uk_UA": "Натуральна форма гуми, яку можна отримати з кульбаб або пресуванням тропічного дерева. У всіх рецептах може бути замінена на [[гуму|Rubber]], але не навпаки.", "ru_RU": "Натуральная форма резины, добывается из одуванчиков или путём прессования древесины джунглей. Может быть заменена во всех рецептах на [[резину|Rubber]], но не наоборот." } } diff --git a/src/main/resources/assets/hbm/manual/material/lead.json b/src/main/resources/assets/hbm/manual/material/lead.json index b4d919e1a..d8b25c8b0 100644 --- a/src/main/resources/assets/hbm/manual/material/lead.json +++ b/src/main/resources/assets/hbm/manual/material/lead.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]], "title": { "en_US": "Lead", + "uk_UA": "Свинець", "ru_RU": "Свинец" }, "content": { "en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits.", + "uk_UA": "Поширений ресурс. В основному використовується для речей, пов'язаних з радіацією, та для боєприпасів, а також як припій для багатьох схем.", "ru_RU": "Обычный ресурс. В основном используется для вещей, связанных с радиацией, а также для боеприпасов и в качестве припоя для многих схем." } } diff --git a/src/main/resources/assets/hbm/manual/material/mingrade.json b/src/main/resources/assets/hbm/manual/material/mingrade.json index fe1732da5..64ffb5221 100644 --- a/src/main/resources/assets/hbm/manual/material/mingrade.json +++ b/src/main/resources/assets/hbm/manual/material/mingrade.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]], "title": { "en_US": "Minecraft Grade Copper (Red Copper)", + "uk_UA": "Червона мідь (aka Minecraft Grade Copper)", "ru_RU": "Медь Minecraft (Красная медь)" }, "content": { "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form.", + "uk_UA": "Сплав, виготовлений з [[міді|Copper]] та редстоуну в рівному співвідношенні в [[доменній печі|Blast Furnace]]. Використовується майже у всій електриці, зазвичай у вигляді дроту.", "ru_RU": "Сплав, изготовленный из меди и красного камня в равных частях в [[доменной печи|Blast Furnace]]. Используется почти во всех электрических устройствах, обычно в виде проводов." } } diff --git a/src/main/resources/assets/hbm/manual/material/neptunium.json b/src/main/resources/assets/hbm/manual/material/neptunium.json index a68c7adb9..c80bebbc1 100644 --- a/src/main/resources/assets/hbm/manual/material/neptunium.json +++ b/src/main/resources/assets/hbm/manual/material/neptunium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]], "title": { "en_US": "Neptunium", - "ru_RU": "Нептуний" + "uk_UA": "Нептуній-237", + "ru_RU": "Нептуний"" }, "content": { "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]].", + "uk_UA": "Ізотоп здатний до розщеплення, зазвичай міститься у відпрацьованому паливі [[урану-235|Uranium-235]]. Здебільшого використовується для ядерних реакторів у чистому вигляді як високозбагачене нептунієве паливо або в поєднанні з [[ураном-238|Uranium-238]] як середньозбагачене нептунієве паливо. Використовується в [[ВВЕР|PWR]] та [[РБМК|RBMK]].", "ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащённое нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащённое нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-238.json b/src/main/resources/assets/hbm/manual/material/plutonium-238.json index d770353f4..7851b3f27 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-238.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-238.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_pu238"], ["hbm:item.billet_pu238"], ["hbm:item.nugget_pu238"]], "title": { "en_US": "Plutonium-238", + "uk_UA": "Плутоній-238", "ru_RU": "Плутоний-238" }, "content": { "en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].

Moderately radioactive, very hot.", + "uk_UA": "Радіоізотоп, що використовується переважно в [[РІТЕГ|RTG]]. Отримується з гексафториду [[плутонію|Plutonium]], або з різного ядерного палива, переважно того, що використовує [[уран-235|Uranium-235]]. Використовується з [[берилієм|Beryllium]] як Плутоній-238 берилієве джерело нейтронів в [[РБМК|RBMK]].

Помірно радіоактивний, дуже гарячий.", "ru_RU": "Радиоизотоп, в основном используется в [[РТГ|RTG]]. Получается из гексафторида [[плутония|Plutonium]] или из различных ядерных топлив, преимущественно использующих [[уран-235|Uranium-235]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Плутоний-210-Бериллий для [[РБМК|RBMK]].

Умеренно радиоактивен, очень горячий." } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-239.json b/src/main/resources/assets/hbm/manual/material/plutonium-239.json index f64b725f8..ff2fbc3b9 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-239.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-239.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_pu239"], ["hbm:item.billet_pu239"], ["hbm:item.nugget_pu239"]], "title": { "en_US": "Plutonium-239", + "uk_UA": "Плутоній-239", "ru_RU": "Плутоний-239" }, "content": { "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.

Moderately radioactive.", + "uk_UA": "Перший здатний до поділу ізотоп [[плутонію|Plutonium]]. Може бути отриманий з багатьох видів відпрацьованого палива, що використовують [[уран-238|Uranium-238]] бо безпосередньо з [[реакторного плутонію|Reactor-Grade Plutonium]]. Використовується у високозбагаченому паливі для різних реакторів, змішується з іншими ізотопами для низькозбагаченого палива або як заряд у багатьох ядерних бомбах.

Помірно радіоактивний.", "ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащённых топливах для различных реакторов, в смеси с другими изотопами для менее обогащённых топлив или как делящийся материал во многих ядерных бомбах.

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-240.json b/src/main/resources/assets/hbm/manual/material/plutonium-240.json index 859bfd7c0..f729c1710 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-240.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-240.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_pu240"], ["hbm:item.billet_pu240"], ["hbm:item.nugget_pu240"]], "title": { "en_US": "Plutonium-240", + "uk_UA": "Плутоній-240", "ru_RU": "Плутоний-240" }, "content": { "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or inspecialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].", + "uk_UA": "Не здатний до поділу ізотоп, що міститься в [[плутонії|Plutonium]] та [[реакторному плутонії|Reactor-Grade-Plutonium]]. Корисний лише при ручному виготовленні реакторного плутонію з [[плутонію-239|Plutonium-239]] або у спеціалізованих [[цирконієвих|Zirconium]] швидких розмножувачах для виготовлення [[плутонію-241|Plutonium-241]] в [[РБМК|RBMK]]." , "ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[циркониевых|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json index 096b8864c..80f07e24e 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-241.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-241.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_pu241"], ["hbm:item.billet_pu241"], ["hbm:item.nugget_pu241"]], "title": { "en_US": "Plutonium-241", + "uk_UA": "Плутоній-241", "ru_RU": "Плутоний-241" }, "content": { "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive.", + "uk_UA": "Другий здатний до поділу ізотоп [[плутонію|Plutonium]]. Може бути відновлений з відпрацьованого палива [[РБМК|RBMK]], багатого на [[плутоній-240|Plutonium-240]], а також з деяких видів [[цирконієвих|Zirconium]] швидких розмножувачів. Використовується лише в спеціальних паливних розмножувачах та як високозбагачене паливо, яке є потужнішим за свій аналог [[плутонію-239|Plutonium-239]]. Плутоній-241 в РБМК утворює [[америцій-241|Americium-241]] та [[америцій-242|Americium-242]] після переробки.

Високорадіоактивний.", "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанных топлив [[РБМК|RBMK]], богатых [[плутонием-240|Plutonium-240]], а также из определенных типов [[циркониевых|Zirconium]] топлив быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json index c5cb2f1a4..fd0fa1463 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_pu_mix"], ["hbm:item.billet_pu_mix"], ["hbm:item.nugget_pu_mix"]], "title": { "en_US": "Reactor-Grade Plutonium", + "uk_UA": "Реакторний плутоній", "ru_RU": "Плутоний реакторного качества" }, "content": { "en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.

Moderately radioactive.", + "uk_UA": "Суміш [[плутонію-239|Plutonium-239]] та [[плутонію-240|Plutonium-240]]. Поширений результат переробки багатьох видів палива на основі [[урану|Uranium]], а також розмноження урану в [[Чиказькій дровітні|Chicago Pile]]. Використовується в багатьох реакторах як середньозбагачене плутонієве паливо.

Помірно радіоактивний.", "ru_RU": "Смесь [[плутония-239|Plutonium-239]] и [[плутония-240|Plutonium-240]]. Обычный результат переработки многих топлив на основе [[урана|Uranium]], а также при размножении урана в [[Чикагской полленице|Chicago Pile]]. Используется во многих реакторах как среднеобогащённое плутониевое топливо.

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium.json b/src/main/resources/assets/hbm/manual/material/plutonium.json index 719c14800..b6a3f6d59 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_plutonium"], ["hbm:item.billet_plutonium"], ["hbm:item.nugget_plutonium"], ["hbm:item.powder_plutonium"]], "title": { "en_US": "Plutonium", + "uk_UA": "Плутоній", "ru_RU": "Плутоний" }, "content": { "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.

Moderately radioactive.

See also:
[[Plutonium-238]]
[[Plutonium-239]]
[[Plutonium-240]]
[[Plutonium-241]]", + "uk_UA": "Рідкісна форма природнього плутонію, що складається з плутонію-238, 239 та 240. Плутоній у формі руди вимкнено за замовчуванням. Може бути перероблений в [[газовій центріфузі|Gas Centrifuge]] у формі гексафториду, або використовуватися для певних рецептів [[циклотрона|Cyclotron]].

Помірно радіоактивний.

Див. також:
[[Плутоній-238|Plutonium-238]]
[[Плутоній-239|Plutonium-239]]
[[Плутоній-240|Plutonium-240]]
[[Плутоній-241|Plutonium-241]]", "ru_RU": "Редкая форма нечистого плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определенных рецептов [[циклотрона|Cyclotron]].

Умеренно радиоактивен.

См. также:
[[Плутоний-238|Plutonium-238]]
[[Плутоний-239|Plutonium-239]]
[[Плутоний-240|Plutonium-240]]
[[Плутоний-241|Plutonium-241]]" } } diff --git a/src/main/resources/assets/hbm/manual/material/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json index c36e74218..d8fc0a075 100644 --- a/src/main/resources/assets/hbm/manual/material/polonium.json +++ b/src/main/resources/assets/hbm/manual/material/polonium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_polonium"], ["hbm:item.billet_polonium"], ["hbm:item.nugget_polonium"]], "title": { "en_US": "Polonium-210", + "uk_UA": "Полоній-210", "ru_RU": "Полоний-210" }, "content": { "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot.", + "uk_UA": "Радіоізотоп, отриманий в результаті переробки [[радій-226|Radium-226]]берилієвих джерел нейтронів. Використовується для [[РІТЕГ|RTG]] або з [[берилієм|Beryllium]] у полоній-210 берилієвих джерелах нейтронів для [[РБМК|RBMK]].

Високорадіоактивний, дуже гарячий.", "ru_RU": "Радиоизотоп, получаемый из переработки нейтронных источников [[радия-226|Radium-226]]. Используется для [[РТГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках Полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий." } } diff --git a/src/main/resources/assets/hbm/manual/material/polymer.json b/src/main/resources/assets/hbm/manual/material/polymer.json index 9c540925b..a23290a78 100644 --- a/src/main/resources/assets/hbm/manual/material/polymer.json +++ b/src/main/resources/assets/hbm/manual/material/polymer.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_polymer"], ["hbm:item.powder_polymer"]], "title": { "en_US": "Polymer", + "uk_UA": "Полімер", "ru_RU": "Полимер" }, "content": { "en_US": "Polymer ('Teflon') is the first available type of plastic. Requires [[petroleum gas|Petroleum Gas]] and therefore [[oil processing|Crude Oil]].

Fully interchangable with [[Bakelite]], which becomes available after [[oil cracking|Catalytic Cracking Tower]].", + "uk_UA": "Полімер ('Тефлон') – це перший доступний тип пластику. потребує [[нафтовий газ|Petroleum Gas]], а отже, [[переробку нафти|Crude Oil]].

Повністю взаємозамінний з [[карболітом|Bakelite]], який стає доступним після [[крекінгу нафти|Catalytic Cracking Tower]].", "ru_RU": "Полимер ('Тефлон') — первый доступный тип пластика. Требует [[нефтяного газа|Petroleum Gas]] и, следовательно, [[переработки нефти|Crude Oil]].

Полностью взаимозаменяем с [[бакелитом|Bakelite]], который становится доступным после [[крекинга нефти|Catalytic Cracking Tower]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/radium.json b/src/main/resources/assets/hbm/manual/material/radium.json index 331d37adc..840c3234c 100644 --- a/src/main/resources/assets/hbm/manual/material/radium.json +++ b/src/main/resources/assets/hbm/manual/material/radium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_ra226"], ["hbm:item.billet_ra226"], ["hbm:item.nugget_ra226"], ["hbm:item.powder_ra226"]], "title": { "en_US": "Radium-226", + "uk_UA": "Радій-226", "ru_RU": "Радий-226" }, "content": { "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.

Moderately radioactive.", + "uk_UA": "Рідкісний радіоактивний матеріал, що міститься в [[уранових|Uranium]] та [[торієвих|Thorium-232]] рудах, можна отримати за допомогою [[центрифуги|Centrifuge]]. Використовується разом з [[берилієм|Beryllium]] у радій-226 берилієвих джерелах нейтронів, які необхідні для запуску [[Чиказької дровітні|Chicago Pile]], [[ВВЕР|PWR]], [[дослідницького реактора|Research Reactor]] та [[РБМК|RBMK]]. Перше доступне джерело нейтронів і часто найдешевше.

Помірно радіоактивний.", "ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечён с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/rubber.json b/src/main/resources/assets/hbm/manual/material/rubber.json index e317d6752..b14267f2f 100644 --- a/src/main/resources/assets/hbm/manual/material/rubber.json +++ b/src/main/resources/assets/hbm/manual/material/rubber.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_rubber"]], "title": { "en_US": "Rubber", + "uk_UA": "Гума", "ru_RU": "Резина" }, "content": { "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe.", + "uk_UA": "Нафтопродукт, отриманий з [[ненасичених вуглеводнів|Unsaturated Hydrocarbons]] та [[сірки|Sulfur]]. Для виробництва потрібна щонайменше [[вежа каталітичного крекінгу|Catalytic Cracking Tower]]. Може замінити [[латекс|Latex]] у всіх рецептах.", "ru_RU": "Продукт переработки нефти, получаемый из [[ненасыщенных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах." } } diff --git a/src/main/resources/assets/hbm/manual/material/silicon.json b/src/main/resources/assets/hbm/manual/material/silicon.json index 67951240c..cbb4bf966 100644 --- a/src/main/resources/assets/hbm/manual/material/silicon.json +++ b/src/main/resources/assets/hbm/manual/material/silicon.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_silicon"], ["hbm:item.billet_silicon"], ["hbm:item.nugget_silicon"]], "title": { "en_US": "Silicon", + "uk_UA": "Кремній", "ru_RU": "Кремний" }, "content": { "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing.", + "uk_UA": "Важливий матеріал для виробництва інтегральних плат та будь-якої електроніки, складнішої за аналогову плату. Виготовляється в [[електричній дуговій печі|Electric Arc Furnace]] використанням матеріалів, що містять діоксид кремнію, наприклад звичайного піску, пекельного кварцу, скловолокна, кременю або [[азбесту|Asbestos]]. Використовується переважно як пластини (тобто заготовки) які [[пресуються|Burner Press]] за допомогою штампа схеми, а потім перетворюються на різні типи мікрочіпів. Через необхідність у дуговій печі, кремній стає доступний після отримання [[полімеру|Polymer]], що вимагає переробки [[нафти|Crude Oil]].", "ru_RU": "Важный материал для производства интегральных схем и любой электроники, более сложной, чем аналоговые схемы. Производится в [[электродуговой печи|Electric Arc Furnace]] из материалов, содержащих диоксид кремния, таких как обычный песок, незер-кварц, стекловолокно, кремень или [[асбест|Asbestos]]. В основном используется в виде пластин (т.е. заготовок), которые [[прессуются|Burner Press]] с использованием штампа для схем, а затем превращаются в различные типы микросхем. Из-за необходимости в дуговой печи кремний доступен после получения [[полимера|Polymer]], что требует переработки [[нефти|Crude Oil]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/sodium.json b/src/main/resources/assets/hbm/manual/material/sodium.json index 6ad6ac6f7..55fe5a061 100644 --- a/src/main/resources/assets/hbm/manual/material/sodium.json +++ b/src/main/resources/assets/hbm/manual/material/sodium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.powder_sodium"]], "title": { "en_US": "Sodium", + "uk_UA": "Натрій", "ru_RU": "Натрий" }, "content": { "en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant.", + "uk_UA": "В основному отримується з содаліту, дорогоцінного каменю, який зустрічається як побічний продукт [[центрифугування|Centrifuge]] багатьох руд. Використовується в рідкому вигляді як потужний охолоджувач для [[ВВЕР|PWR]].", "ru_RU": "В основном добывается из содалита, драгоценного камня, который является побочным продуктом [[центрифуги|Centrifuge]] при переработке многих руд. Используется в жидкой форме как мощный охладитель для [[ВВЭР|PWR]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/steel.json b/src/main/resources/assets/hbm/manual/material/steel.json index 83c6f8867..e25ef2fe4 100644 --- a/src/main/resources/assets/hbm/manual/material/steel.json +++ b/src/main/resources/assets/hbm/manual/material/steel.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_steel"], ["hbm:item.plate_steel"], ["hbm:item.powder_steel"]], "title": { "en_US": "Steel", + "uk_UA": "Сталь", "ru_RU": "Сталь" }, "content": { "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].", + "uk_UA": "Покращена версія заліза, базовий матеріал. Використовується майже в усьому. Спочатку отримується шляхом поєднання вугілля та заліза в [[доменній печі|Blast Furnace]]. Покращені рецепти доступні пізніше в [[ливарні|Crucible]] та [[роторній печі|Rotary Furnace]].", "ru_RU": "Улучшенная версия железа, базовый материал. Используется почти во всем. Изначально получается путём комбинирования угля и железа в [[доменной печи|Blast Furnace]]. Улучшенные рецепты доступны позже через [[плавильню|Crucible]] и [[роторную печь|Rotary Furnace]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index 7d9b5915b..84236f8d7 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.sulfur"]], "title": { "en_US": "Sulfur", + "uk_UA": "Сірка", "ru_RU": "Сера" }, "content": { "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", + "uk_UA": "Звичайна руда, зустрічається у великих кількостях в пеклі. Використовується в різних речах, таких як [[сірчана кислота|Sulfuric Acid]], [[гума|Rubber]] та єлоукейку для отримання гексафториду [[урану|Uranium]]. Також може використовуватися для виготовлення пороху, сірників або як жовтий барвник.", "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных целей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в йеллоукейке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя." } } diff --git a/src/main/resources/assets/hbm/manual/material/tantalium.json b/src/main/resources/assets/hbm/manual/material/tantalium.json index e3d0ee9c2..4ff81b7d9 100644 --- a/src/main/resources/assets/hbm/manual/material/tantalium.json +++ b/src/main/resources/assets/hbm/manual/material/tantalium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_tantalium"], ["hbm:item.powder_tantalium"], ["hbm:item.nugget_tantalium"]], "title": { "en_US": "Tantalium", + "uk_UA": "Тантал", "ru_RU": "Тантал" }, "content": { "en_US": "Tantalium ('Tantalum') can be extracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.", + "uk_UA": "Тантал ('Танталій') можна отримати з [[колтану|Coltan]] який зустрічається лише в одному конкретному регіоні світу. Використовується переважно для танталових конденсаторів, які є критично важливими для блоків керування, що використовуються в більшості ядерних бомб.", "ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одном определенном регионе мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб." } } diff --git a/src/main/resources/assets/hbm/manual/material/technetium.json b/src/main/resources/assets/hbm/manual/material/technetium.json index 5eaef724f..294467b75 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium.json +++ b/src/main/resources/assets/hbm/manual/material/technetium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.billet_technetium"], ["hbm:item.ingot_technetium"], ["hbm:item.nugget_technetium"]], "title": { "en_US": "Technetium", + "uk_UA": "Технецій-99", "ru_RU": "Технеций" }, "content": { "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.

Primarily used for [[technetium steel|Technetium Steel]].

Moderately radioactive.", + "uk_UA": "Синтетичний метал, перероблений з палива [[ЦИРНОКС|ZIRNOX]] або [[ВВЕР|PWR]] на ранніх етапах. також може бути отриманий з деяких видів палива [[РБМК|RBMK]] або [[корінної руди|Bedrock Ore]] за допомогою високоефективного розчинника.

В основному використовується для [[технецієвої сталі|Technetium Steel]].

Помірно радіоактивний.", "ru_RU": "Синтетический металл, перерабатывается из топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых топлив [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.

В основном используется для [[технециевой стали|Technetium Steel]].

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/technetium_steel.json b/src/main/resources/assets/hbm/manual/material/technetium_steel.json index ac31ac861..cbe61e652 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/technetium_steel.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_tcalloy"], ["hbm:item.powder_tcalloy"]], "title": { "en_US": "Technetium Steel", + "uk_UA": "Технецієва сталь", "ru_RU": "Технециевая сталь" }, "content": { "en_US": "Alloy made from [[steel|Steel]] and [[technetium|Technetium]]. Corrosion resistant, used in stronger fluid tanks and many advanced machines. Obtainable after either a [[ZIRNOX]] or [[PWR]] due to technetium being synthetic.

Fully interchangeable with [[cadmium steel|Cadmium Steel]].", + "uk_UA": "Сплав, виготовлений зі [[сталі|Steel]] та [[технецію|Technetium]]. Стійкий до корозії, використовується в більш міцних резервуарах для рідини та в багатьох передових машинах. Одержується після [[ЦИРНОКС|ZIRNOX]] або [[ВВЕР|PWR]], оскільки технецій є синтетичним.

Повністю взаємозамінний з [[кадмієвою сталлю|Cadmium Steel]].", "ru_RU": "Сплав из [[стали|Steel]] и [[технеция|Technetium]]. Устойчив к коррозии, используется в более прочных резервуарах для жидкостей и во многих продвинутых машинах. Доступен после [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]], так как технеций является синтетическим.

Полностью взаимозаменяем с [[кадмиевой сталью|Cadmium Steel]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/thorium.json b/src/main/resources/assets/hbm/manual/material/thorium.json index be512e7cc..6af1f0d82 100644 --- a/src/main/resources/assets/hbm/manual/material/thorium.json +++ b/src/main/resources/assets/hbm/manual/material/thorium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_th232"], ["hbm:item.billet_th232"], ["hbm:item.nugget_th232"], ["hbm:item.powder_thorium"]], "title": { "en_US": "Thorium-232", + "uk_UA": "Торій-232", "ru_RU": "Торий-232" }, "content": { "en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.

Slightly radioactive.", + "uk_UA": "Фертильний (тобто придатний до розмноження) ізотоп який дає [[уран-233|Uranium-233]]. Може бути опромінений в [[РБМК|RBMK]] для отримання [[торієвого палива|Thorium Fuel]] або поєднаний з ураном-233. Паливо, отримане з торію, зазвичай економічне, але не дуже потужне. Також використовується у вигляді [[рідкої торієвої солі|Liquid Thorium Salt]], потужному теплоносію [[ВВЕР|PWR]] (перетворюючи його у реактор на розплавах солей) який швидко дає тонни урану-233.

Слабко радіоактивний.", "ru_RU": "Фертильный (т.е. пригодный для размножения) изотоп, дающий [[уран-233|Uranium-233]]. Может быть облучен в [[РБМК|RBMK]] для производства [[ториевого топлива|Thorium Fuel]] или комбинирован с ураном-233. Топлива, производные от тория, обычно экономичны, но не очень мощные. Также используется в [[жидкой ториевой соли|Liquid Thorium Salt]], мощном охладителе [[ВВЭР|PWR]], превращающем его в реактор на расплавленных солях, который быстро производит большое количество урана-233.

Слабо радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-233.json b/src/main/resources/assets/hbm/manual/material/uranium-233.json index d1802f419..8fcdd5ad7 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-233.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-233.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_u233"], ["hbm:item.billet_u233"], ["hbm:item.nugget_u233"]], "title": { "en_US": "Uranium-233", + "uk_UA": "Уран-233", "ru_RU": "Уран-233" }, "content": { "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].

Moderately radioactive.", + "uk_UA": "Штучний ізотоп урану здатного до розщеплення (тобто придатного для реакторів), отримується шляхом переробки [[палива на основі торію|Thorium Fuel]]. Високозбагачене паливо з урану-233, як правило, потужніше, ніж паливо, отримане з [[урану-235|Uranium-235]].

Помірно радіоактивний.", "ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путём переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащенное топливо урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json index 56b101d67..772186fa9 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-235.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-235.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_u235"], ["hbm:item.billet_u235"], ["hbm:item.nugget_u235"]], "title": { "en_US": "Uranium-235", + "uk_UA": "Уран-235", "ru_RU": "Уран-235" }, "content": { "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive.", + "uk_UA": "Збагачений уран. Придатний до розщеплення, використовується в деяких реакторах безпосередньо як високозбагачене паливо або змішується з [[ураном-238|Uranium-238]] для отримання середньозбагаченого уранового палива. Збройового класу. Спочатку отримується шялхом переробки [[гексафториду урану|Uranium Hexafluoride]] у каскаді з чотирьох [[газових центрифуг|Gas Centriuge]], пізніше доступний шляхом розділення [[природного урану|Uranium]] за допомогою [[камери лазерного розділення ізотопів|SILEX]].

Помірно радіоактивний.", "ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенных урановых топлив. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-238.json b/src/main/resources/assets/hbm/manual/material/uranium-238.json index ca87770e1..8791492b1 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-238.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-238.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_u238"], ["hbm:item.billet_u238"], ["hbm:item.nugget_u238"]], "title": { "en_US": "Uranium-238", + "uk_UA": "Уран-238", "ru_RU": "Уран-238" }, "content": { "en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.

Slightly radioactive.", + "uk_UA": "Збіднений уран, не ділиться (тобто не придатний для безпосереднього використання в реакторах). В основному побічний продукт збагачення [[урану|Uranium]]. Використовується у виготовленні [[фероурану|Ferrouranium]], [[боєприпасів зі збідненим ураном|Depleted Uranium Ammo]] та для певного низькозбагаченого палива. Паливо, що містить уран-238 зазвичай дає корисний [[плутоній-239|Plutonium-239]] під час переробки.

Слабо радіоактивний.", "ru_RU": "Истощенный уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроурание|Ferrouranium]], для [[боеприпасов с истощенным ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных топлив. Топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].

Слабо радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json index 89ab05f6b..adfd06926 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium.json +++ b/src/main/resources/assets/hbm/manual/material/uranium.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_uranium"], ["hbm:item.billet_uranium"], ["hbm:item.nugget_uranium"], ["hbm:item.powder_uranium"], ["hbm:tile.ore_uranium"]], "title": { "en_US": "Uranium", + "uk_UA": "Уран", "ru_RU": "Уран" }, "content": { "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]", + "uk_UA": "Природний уран, слабо радіоактивний. Сам по собі не дуже ділиться, його можна збагачувати, перетворюючи на [[гексафторид урану|Uranium Hexafluoride]] та оброблюючи в [[газових центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] та [[Чиказька дровітня|Chigago Pile]] можуть використовувати природний уран як паливо без збагачення.

Див. також:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]", "ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащен путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]" } } diff --git a/src/main/resources/assets/hbm/manual/material/weaponsteel.json b/src/main/resources/assets/hbm/manual/material/weaponsteel.json index 52e5c11ed..d2fbdebf4 100644 --- a/src/main/resources/assets/hbm/manual/material/weaponsteel.json +++ b/src/main/resources/assets/hbm/manual/material/weaponsteel.json @@ -4,10 +4,12 @@ "trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]], "title": { "en_US": "Weapon Steel", + "uk_UA": "Збройова сталь", "ru_RU": "Оружейная сталь" }, "content": { "en_US": "High-purity version of [[steel|Steel]] made in a [[rotary furnace|Rotary Furnace]]. Requires [[coker gas|Coker Gas]], and therefore a [[coker unit|Coker Unit]]. Used in many mid-game weapons, weapon modifications and missile warheads.", + "uk_UA": "Високочиста версія [[сталі|Steel]] виготовлена в [[роторній печі|Rotary Furnace]]. Потребує [[коксовий газ|Coker Gas]], тому і [[коксову установку|Coker Unit]]. Використовується в багатьох видах мідгеймової зброї, модифікаціях зброї та ракетних боєголовках.", "ru_RU": "Высококачественная версия [[стали|Steel]], изготовленная в [[роторной печи|Rotary Furnace]]. Требует [[коксовый газ|Coker Gas]] и, следовательно, [[коксовую установку|Coker Unit]]. Используется во многих оружиях среднего этапа игры, модификациях оружия и боеголовках ракет." } } From 763a702ed73346a27815072a2c495afef2d786f1 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Wed, 20 Aug 2025 23:55:03 +0300 Subject: [PATCH 431/491] xd --- src/main/resources/assets/hbm/manual/material/alloy.json | 2 +- src/main/resources/assets/hbm/manual/material/aluminium.json | 2 +- src/main/resources/assets/hbm/manual/material/arsenic.json | 2 +- .../resources/assets/hbm/manual/material/arsenic_bronze.json | 2 +- src/main/resources/assets/hbm/manual/material/bakelite.json | 2 +- src/main/resources/assets/hbm/manual/material/bismuth.json | 2 +- .../resources/assets/hbm/manual/material/bismuth_bronze.json | 2 +- src/main/resources/assets/hbm/manual/material/bscco.json | 2 +- src/main/resources/assets/hbm/manual/material/cadmium.json | 2 +- .../resources/assets/hbm/manual/material/cadmium_steel.json | 2 +- src/main/resources/assets/hbm/manual/material/cinnabar.json | 2 +- src/main/resources/assets/hbm/manual/material/coke.json | 2 +- src/main/resources/assets/hbm/manual/material/copper.json | 2 +- src/main/resources/assets/hbm/manual/material/desh.json | 2 +- src/main/resources/assets/hbm/manual/material/ferrouranium.json | 2 +- src/main/resources/assets/hbm/manual/material/graphite.json | 2 +- src/main/resources/assets/hbm/manual/material/gunmetal.json | 2 +- src/main/resources/assets/hbm/manual/material/hss.json | 2 +- src/main/resources/assets/hbm/manual/material/latex.json | 2 +- src/main/resources/assets/hbm/manual/material/lead.json | 2 +- src/main/resources/assets/hbm/manual/material/mingrade.json | 2 +- src/main/resources/assets/hbm/manual/material/neptunium.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-238.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-239.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-240.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-241.json | 2 +- src/main/resources/assets/hbm/manual/material/plutonium-rg.json | 2 +- src/main/resources/assets/hbm/manual/material/plutonium.json | 2 +- src/main/resources/assets/hbm/manual/material/polonium.json | 2 +- src/main/resources/assets/hbm/manual/material/polymer.json | 2 +- src/main/resources/assets/hbm/manual/material/radium.json | 2 +- src/main/resources/assets/hbm/manual/material/rubber.json | 2 +- src/main/resources/assets/hbm/manual/material/silicon.json | 2 +- src/main/resources/assets/hbm/manual/material/sodium.json | 2 +- src/main/resources/assets/hbm/manual/material/steel.json | 2 +- src/main/resources/assets/hbm/manual/material/sulfur.json | 2 +- src/main/resources/assets/hbm/manual/material/tantalium.json | 2 +- src/main/resources/assets/hbm/manual/material/technetium.json | 2 +- .../resources/assets/hbm/manual/material/technetium_steel.json | 2 +- src/main/resources/assets/hbm/manual/material/thorium.json | 2 +- src/main/resources/assets/hbm/manual/material/uranium-233.json | 2 +- src/main/resources/assets/hbm/manual/material/uranium-235.json | 2 +- src/main/resources/assets/hbm/manual/material/uranium-238.json | 2 +- src/main/resources/assets/hbm/manual/material/uranium.json | 2 +- src/main/resources/assets/hbm/manual/material/weaponsteel.json | 2 +- 45 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/alloy.json b/src/main/resources/assets/hbm/manual/material/alloy.json index 19967db56..69c2dbca0 100644 --- a/src/main/resources/assets/hbm/manual/material/alloy.json +++ b/src/main/resources/assets/hbm/manual/material/alloy.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_advanced_alloy"], ["hbm:item.powder_advanced_alloy"], ["hbm:item.plate_advanced_alloy"]], "title": { "en_US": "Advanced Alloy", - "uk_UA": "Удосконалений сплав", + "uk_UA": "Удосконалений сплав", "ru_ru": "Продвинутый сплав" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/aluminium.json b/src/main/resources/assets/hbm/manual/material/aluminium.json index a94238bf5..0f8c8b459 100644 --- a/src/main/resources/assets/hbm/manual/material/aluminium.json +++ b/src/main/resources/assets/hbm/manual/material/aluminium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]], "title": { "en_US": "Aluminium", - "uk_UA": "Алюміній", + "uk_UA": "Алюміній", "ru_RU": "Алюминий" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/arsenic.json b/src/main/resources/assets/hbm/manual/material/arsenic.json index bd59c27e3..97501ed2d 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_arsenic"], ["hbm:item.nugget_arsenic"]], "title": { "en_US": "Arsenic", - "uk_UA": "Миш'як", + "uk_UA": "Миш'як", "ru_RU": "Мышьяк" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json index ac4c8e6f4..1107f9b38 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_arsenic_bronze"]], "title": { "en_US": "Arsenic Bronze", - "uk_UA": "Миш'якова бронза", + "uk_UA": "Миш'якова бронза", "ru_RU": "Мышьяковая бронза" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/bakelite.json b/src/main/resources/assets/hbm/manual/material/bakelite.json index 031844f3c..1b1abf1c7 100644 --- a/src/main/resources/assets/hbm/manual/material/bakelite.json +++ b/src/main/resources/assets/hbm/manual/material/bakelite.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_bakelite"], ["hbm:item.powder_bakelite"]], "title": { "en_US": "Bakelite", - "uk_UA": "Карболіт", + "uk_UA": "Карболіт", "ru_RU": "Бакелит" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/bismuth.json b/src/main/resources/assets/hbm/manual/material/bismuth.json index 964c2cdad..976224336 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_bismuth"], ["hbm:item.billet_bismuth"], ["hbm:item.nugget_bismuth"], ["hbm:item.powder_bismuth"]], "title": { "en_US": "Bismuth", - "uk_UA": "Вісмут", + "uk_UA": "Вісмут", "ru_RU": "Висмут" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json index 176a944c6..978c45e4a 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_bismuth_bronze"]], "title": { "en_US": "Bismuth Bronze", - "uk_UA": "Вісмутова бронза", + "uk_UA": "Вісмутова бронза", "ru_RU": "Висмутовая бронза" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/bscco.json b/src/main/resources/assets/hbm/manual/material/bscco.json index 066f4e003..a66b18377 100644 --- a/src/main/resources/assets/hbm/manual/material/bscco.json +++ b/src/main/resources/assets/hbm/manual/material/bscco.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_bscco"], ["hbm:item.wire_dense", 1, 48]], "title": { "en_US": "BSCCO", - "uk_UA": "Вісмут стронцій кальцій мідь оксид (BSCCO)", + "uk_UA": "Вісмут стронцій кальцій мідь оксид (BSCCO)", "ru_RU": "BSCCO" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/cadmium.json b/src/main/resources/assets/hbm/manual/material/cadmium.json index 05f5181e4..7c7d98f1e 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_cadmium"], ["hbm:item.powder_cadmium"]], "title": { "en_US": "Cadmium", - "uk_UA": "Кадмій", + "uk_UA": "Кадмій", "ru_RU": "Кадмий" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json index bd9d6339d..089edb914 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_cdalloy"]], "title": { "en_US": "Cadmium Steel", - "uk_UA": "Кадмієва сталь", + "uk_UA": "Кадмієва сталь", "ru_RU": "Кадмиевая сталь" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/cinnabar.json b/src/main/resources/assets/hbm/manual/material/cinnabar.json index 459d22a98..2e6489b3a 100644 --- a/src/main/resources/assets/hbm/manual/material/cinnabar.json +++ b/src/main/resources/assets/hbm/manual/material/cinnabar.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.cinnebar"]], "title": { "en_US": "Cinnabar", - "uk_UA": "Кіновар", + "uk_UA": "Кіновар", "ru_RU": "Киноварь" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/coke.json b/src/main/resources/assets/hbm/manual/material/coke.json index 0ad74d780..0b71dd10e 100644 --- a/src/main/resources/assets/hbm/manual/material/coke.json +++ b/src/main/resources/assets/hbm/manual/material/coke.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.coke", 1, 32767]], "title": { "en_US": "Coke", - "uk_UA": "Кокс", + "uk_UA": "Кокс", "ru_RU": "Кокс" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json index 7feca78cd..5a225d419 100644 --- a/src/main/resources/assets/hbm/manual/material/copper.json +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]], "title": { "en_US": "Copper", - "uk_UA": "Мідь", + "uk_UA": "Мідь", "ru_RU": "Медь" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json index f5b1e1027..24dbb454b 100644 --- a/src/main/resources/assets/hbm/manual/material/desh.json +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]], "title": { "en_US": "Desh", - "uk_UA": "Деш", + "uk_UA": "Деш", "ru_RU": "Деш" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/ferrouranium.json b/src/main/resources/assets/hbm/manual/material/ferrouranium.json index f2c635d9a..3b0d356cc 100644 --- a/src/main/resources/assets/hbm/manual/material/ferrouranium.json +++ b/src/main/resources/assets/hbm/manual/material/ferrouranium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_ferrouranium"]], "title": { "en_US": "Ferrouranium", - "uk_UA": "Фероуран", + "uk_UA": "Фероуран", "ru_RU": "Ферроуран" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/graphite.json b/src/main/resources/assets/hbm/manual/material/graphite.json index be283d5f2..e47763265 100644 --- a/src/main/resources/assets/hbm/manual/material/graphite.json +++ b/src/main/resources/assets/hbm/manual/material/graphite.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_graphite"]], "title": { "en_US": "Graphite", - "uk_UA": "Графіт", + "uk_UA": "Графіт", "ru_RU": "Графит" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/gunmetal.json b/src/main/resources/assets/hbm/manual/material/gunmetal.json index 8c1118d61..722c0c618 100644 --- a/src/main/resources/assets/hbm/manual/material/gunmetal.json +++ b/src/main/resources/assets/hbm/manual/material/gunmetal.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]], "title": { "en_US": "Gunmetal", - "uk_UA": "Гарматна бронза", + "uk_UA": "Гарматна бронза", "ru_RU": "Оружейный металл" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/hss.json b/src/main/resources/assets/hbm/manual/material/hss.json index 364c5dd92..99f2e8420 100644 --- a/src/main/resources/assets/hbm/manual/material/hss.json +++ b/src/main/resources/assets/hbm/manual/material/hss.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]], "title": { "en_US": "High-Speed Steel", - "uk_UA": "Швидкорізальна сталь", + "uk_UA": "Швидкорізальна сталь", "ru_RU": "Высокоскоростная сталь" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/latex.json b/src/main/resources/assets/hbm/manual/material/latex.json index 133ca076d..138523e14 100644 --- a/src/main/resources/assets/hbm/manual/material/latex.json +++ b/src/main/resources/assets/hbm/manual/material/latex.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]], "title": { "en_US": "Latex", - "uk_UA": "Латекс", + "uk_UA": "Латекс", "ru_RU": "Латекс" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/lead.json b/src/main/resources/assets/hbm/manual/material/lead.json index d8b25c8b0..91c5a1f8a 100644 --- a/src/main/resources/assets/hbm/manual/material/lead.json +++ b/src/main/resources/assets/hbm/manual/material/lead.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]], "title": { "en_US": "Lead", - "uk_UA": "Свинець", + "uk_UA": "Свинець", "ru_RU": "Свинец" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/mingrade.json b/src/main/resources/assets/hbm/manual/material/mingrade.json index 64ffb5221..0c9102589 100644 --- a/src/main/resources/assets/hbm/manual/material/mingrade.json +++ b/src/main/resources/assets/hbm/manual/material/mingrade.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]], "title": { "en_US": "Minecraft Grade Copper (Red Copper)", - "uk_UA": "Червона мідь (aka Minecraft Grade Copper)", + "uk_UA": "Червона мідь (aka Minecraft Grade Copper)", "ru_RU": "Медь Minecraft (Красная медь)" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/neptunium.json b/src/main/resources/assets/hbm/manual/material/neptunium.json index c80bebbc1..960af17e0 100644 --- a/src/main/resources/assets/hbm/manual/material/neptunium.json +++ b/src/main/resources/assets/hbm/manual/material/neptunium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]], "title": { "en_US": "Neptunium", - "uk_UA": "Нептуній-237", + "uk_UA": "Нептуній-237", "ru_RU": "Нептуний"" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-238.json b/src/main/resources/assets/hbm/manual/material/plutonium-238.json index 7851b3f27..5224b81f0 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-238.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-238.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_pu238"], ["hbm:item.billet_pu238"], ["hbm:item.nugget_pu238"]], "title": { "en_US": "Plutonium-238", - "uk_UA": "Плутоній-238", + "uk_UA": "Плутоній-238", "ru_RU": "Плутоний-238" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-239.json b/src/main/resources/assets/hbm/manual/material/plutonium-239.json index ff2fbc3b9..b39cc3300 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-239.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-239.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_pu239"], ["hbm:item.billet_pu239"], ["hbm:item.nugget_pu239"]], "title": { "en_US": "Plutonium-239", - "uk_UA": "Плутоній-239", + "uk_UA": "Плутоній-239", "ru_RU": "Плутоний-239" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-240.json b/src/main/resources/assets/hbm/manual/material/plutonium-240.json index f729c1710..3a4268cf6 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-240.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-240.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_pu240"], ["hbm:item.billet_pu240"], ["hbm:item.nugget_pu240"]], "title": { "en_US": "Plutonium-240", - "uk_UA": "Плутоній-240", + "uk_UA": "Плутоній-240", "ru_RU": "Плутоний-240" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json index 80f07e24e..ac9470a32 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-241.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-241.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_pu241"], ["hbm:item.billet_pu241"], ["hbm:item.nugget_pu241"]], "title": { "en_US": "Plutonium-241", - "uk_UA": "Плутоній-241", + "uk_UA": "Плутоній-241", "ru_RU": "Плутоний-241" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json index fd0fa1463..25d4db6aa 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_pu_mix"], ["hbm:item.billet_pu_mix"], ["hbm:item.nugget_pu_mix"]], "title": { "en_US": "Reactor-Grade Plutonium", - "uk_UA": "Реакторний плутоній", + "uk_UA": "Реакторний плутоній", "ru_RU": "Плутоний реакторного качества" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/plutonium.json b/src/main/resources/assets/hbm/manual/material/plutonium.json index b6a3f6d59..6570bde4a 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_plutonium"], ["hbm:item.billet_plutonium"], ["hbm:item.nugget_plutonium"], ["hbm:item.powder_plutonium"]], "title": { "en_US": "Plutonium", - "uk_UA": "Плутоній", + "uk_UA": "Плутоній", "ru_RU": "Плутоний" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json index d8fc0a075..7fc11d66c 100644 --- a/src/main/resources/assets/hbm/manual/material/polonium.json +++ b/src/main/resources/assets/hbm/manual/material/polonium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_polonium"], ["hbm:item.billet_polonium"], ["hbm:item.nugget_polonium"]], "title": { "en_US": "Polonium-210", - "uk_UA": "Полоній-210", + "uk_UA": "Полоній-210", "ru_RU": "Полоний-210" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/polymer.json b/src/main/resources/assets/hbm/manual/material/polymer.json index a23290a78..f612b2057 100644 --- a/src/main/resources/assets/hbm/manual/material/polymer.json +++ b/src/main/resources/assets/hbm/manual/material/polymer.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_polymer"], ["hbm:item.powder_polymer"]], "title": { "en_US": "Polymer", - "uk_UA": "Полімер", + "uk_UA": "Полімер", "ru_RU": "Полимер" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/radium.json b/src/main/resources/assets/hbm/manual/material/radium.json index 840c3234c..5aa58fbc3 100644 --- a/src/main/resources/assets/hbm/manual/material/radium.json +++ b/src/main/resources/assets/hbm/manual/material/radium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_ra226"], ["hbm:item.billet_ra226"], ["hbm:item.nugget_ra226"], ["hbm:item.powder_ra226"]], "title": { "en_US": "Radium-226", - "uk_UA": "Радій-226", + "uk_UA": "Радій-226", "ru_RU": "Радий-226" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/rubber.json b/src/main/resources/assets/hbm/manual/material/rubber.json index b14267f2f..ba1381b17 100644 --- a/src/main/resources/assets/hbm/manual/material/rubber.json +++ b/src/main/resources/assets/hbm/manual/material/rubber.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_rubber"]], "title": { "en_US": "Rubber", - "uk_UA": "Гума", + "uk_UA": "Гума", "ru_RU": "Резина" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/silicon.json b/src/main/resources/assets/hbm/manual/material/silicon.json index cbb4bf966..13f698a48 100644 --- a/src/main/resources/assets/hbm/manual/material/silicon.json +++ b/src/main/resources/assets/hbm/manual/material/silicon.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_silicon"], ["hbm:item.billet_silicon"], ["hbm:item.nugget_silicon"]], "title": { "en_US": "Silicon", - "uk_UA": "Кремній", + "uk_UA": "Кремній", "ru_RU": "Кремний" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/sodium.json b/src/main/resources/assets/hbm/manual/material/sodium.json index 55fe5a061..72291dfac 100644 --- a/src/main/resources/assets/hbm/manual/material/sodium.json +++ b/src/main/resources/assets/hbm/manual/material/sodium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.powder_sodium"]], "title": { "en_US": "Sodium", - "uk_UA": "Натрій", + "uk_UA": "Натрій", "ru_RU": "Натрий" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/steel.json b/src/main/resources/assets/hbm/manual/material/steel.json index e25ef2fe4..7a2e2b105 100644 --- a/src/main/resources/assets/hbm/manual/material/steel.json +++ b/src/main/resources/assets/hbm/manual/material/steel.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_steel"], ["hbm:item.plate_steel"], ["hbm:item.powder_steel"]], "title": { "en_US": "Steel", - "uk_UA": "Сталь", + "uk_UA": "Сталь", "ru_RU": "Сталь" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index 84236f8d7..fb0722ecb 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.sulfur"]], "title": { "en_US": "Sulfur", - "uk_UA": "Сірка", + "uk_UA": "Сірка", "ru_RU": "Сера" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/tantalium.json b/src/main/resources/assets/hbm/manual/material/tantalium.json index 4ff81b7d9..e736d524b 100644 --- a/src/main/resources/assets/hbm/manual/material/tantalium.json +++ b/src/main/resources/assets/hbm/manual/material/tantalium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_tantalium"], ["hbm:item.powder_tantalium"], ["hbm:item.nugget_tantalium"]], "title": { "en_US": "Tantalium", - "uk_UA": "Тантал", + "uk_UA": "Тантал", "ru_RU": "Тантал" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/technetium.json b/src/main/resources/assets/hbm/manual/material/technetium.json index 294467b75..2d0a2dcf1 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium.json +++ b/src/main/resources/assets/hbm/manual/material/technetium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.billet_technetium"], ["hbm:item.ingot_technetium"], ["hbm:item.nugget_technetium"]], "title": { "en_US": "Technetium", - "uk_UA": "Технецій-99", + "uk_UA": "Технецій-99", "ru_RU": "Технеций" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/technetium_steel.json b/src/main/resources/assets/hbm/manual/material/technetium_steel.json index cbe61e652..768283d20 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/technetium_steel.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_tcalloy"], ["hbm:item.powder_tcalloy"]], "title": { "en_US": "Technetium Steel", - "uk_UA": "Технецієва сталь", + "uk_UA": "Технецієва сталь", "ru_RU": "Технециевая сталь" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/thorium.json b/src/main/resources/assets/hbm/manual/material/thorium.json index 6af1f0d82..704e319f6 100644 --- a/src/main/resources/assets/hbm/manual/material/thorium.json +++ b/src/main/resources/assets/hbm/manual/material/thorium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_th232"], ["hbm:item.billet_th232"], ["hbm:item.nugget_th232"], ["hbm:item.powder_thorium"]], "title": { "en_US": "Thorium-232", - "uk_UA": "Торій-232", + "uk_UA": "Торій-232", "ru_RU": "Торий-232" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/uranium-233.json b/src/main/resources/assets/hbm/manual/material/uranium-233.json index 8fcdd5ad7..780953eb3 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-233.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-233.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_u233"], ["hbm:item.billet_u233"], ["hbm:item.nugget_u233"]], "title": { "en_US": "Uranium-233", - "uk_UA": "Уран-233", + "uk_UA": "Уран-233", "ru_RU": "Уран-233" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json index 772186fa9..cd949f50b 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-235.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-235.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_u235"], ["hbm:item.billet_u235"], ["hbm:item.nugget_u235"]], "title": { "en_US": "Uranium-235", - "uk_UA": "Уран-235", + "uk_UA": "Уран-235", "ru_RU": "Уран-235" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/uranium-238.json b/src/main/resources/assets/hbm/manual/material/uranium-238.json index 8791492b1..693c4317a 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-238.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-238.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_u238"], ["hbm:item.billet_u238"], ["hbm:item.nugget_u238"]], "title": { "en_US": "Uranium-238", - "uk_UA": "Уран-238", + "uk_UA": "Уран-238", "ru_RU": "Уран-238" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json index adfd06926..c85bbbde1 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium.json +++ b/src/main/resources/assets/hbm/manual/material/uranium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_uranium"], ["hbm:item.billet_uranium"], ["hbm:item.nugget_uranium"], ["hbm:item.powder_uranium"], ["hbm:tile.ore_uranium"]], "title": { "en_US": "Uranium", - "uk_UA": "Уран", + "uk_UA": "Уран", "ru_RU": "Уран" }, "content": { diff --git a/src/main/resources/assets/hbm/manual/material/weaponsteel.json b/src/main/resources/assets/hbm/manual/material/weaponsteel.json index d2fbdebf4..e53a8b270 100644 --- a/src/main/resources/assets/hbm/manual/material/weaponsteel.json +++ b/src/main/resources/assets/hbm/manual/material/weaponsteel.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]], "title": { "en_US": "Weapon Steel", - "uk_UA": "Збройова сталь", + "uk_UA": "Збройова сталь", "ru_RU": "Оружейная сталь" }, "content": { From 7505b72f7af16eddc83599cc7fe2ee5fdfd1b496 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Thu, 21 Aug 2025 13:07:19 +0300 Subject: [PATCH 432/491] pipirupirupirupipi --- src/main/resources/assets/hbm/manual/material/copper.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json index 5a225d419..9c46250d1 100644 --- a/src/main/resources/assets/hbm/manual/material/copper.json +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -9,7 +9,7 @@ }, "content": { "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.", - "uk_UA": "Поширений ресурс. У сирому вигляді здебільшого використовується як конструкційний матеріал, а також у речах, що витримують високі температури (такі як теплопропровідники). Активно використовується в різних сплавах.

[[Червона мідь|Minecraft Grade Copper]] — це сплав, виготовлений з редстоуну, який використовується майже у всіх електричних пристроях.

[[Удосконалений сплав|Advanced Alloy]] — це потужний ранній інструментальний матеріал, який перевершує алмаз.

[[Гарматна бронза]] — це важливий компонент багатьох видів зброї, а також гільз для боєприпасів.

[[Вісмутова бронза|Bismuth Bronze]] та [[миш'якова бронза|Arsenic Bronze]] — це пост-[[РБМК|RBMK]] матеріали що використовуються в багатьох машинах пізньої версії гри.

[[BSCCO]] — це надпровідник, похідний від [[вісмуту|Bismuth]] необхідний для високорівневих квантових схем та котушок [[прискорювача часток|Particle Accelerator]].", + "uk_UA": "Поширений ресурс. У сирому вигляді здебільшого використовується як конструкційний матеріал, а також у речах, що витримують високі температури (такі як теплопропровідники). Активно використовується в різних сплавах.

[[Червона мідь|Minecraft Grade Copper]] — це сплав, виготовлений з редстоуну, який використовується майже у всіх електричних пристроях.

[[Удосконалений сплав|Advanced Alloy]] — це потужний ранній інструментальний матеріал, який перевершує алмаз.

[[Гарматна бронза|Gunmetal]] — це важливий компонент багатьох видів зброї, а також гільз для боєприпасів.

[[Вісмутова бронза|Bismuth Bronze]] та [[миш'якова бронза|Arsenic Bronze]] — це пост-[[РБМК|RBMK]] матеріали що використовуються в багатьох машинах пізньої версії гри.

[[BSCCO]] — це надпровідник, похідний від [[вісмуту|Bismuth]] необхідний для високорівневих квантових схем та котушок [[прискорювача часток|Particle Accelerator]].", "ru_RU": "Обычный ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]]." } } From 8ea7cf4080faf70a8e5f5dceafb523e7177aa8fb Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 22 Aug 2025 13:06:47 +0200 Subject: [PATCH 433/491] can't wait for people to complain about this one --- changelog | 6 +----- .../java/com/hbm/handler/BulletConfigSyncingUtil.java | 1 + .../java/com/hbm/handler/guncfg/GunEnergyFactory.java | 1 + .../java/com/hbm/handler/guncfg/GunNPCFactory.java | 1 + src/main/java/com/hbm/handler/imc/IMCBlastFurnace.java | 1 + src/main/java/com/hbm/handler/imc/IMCCentrifuge.java | 1 + src/main/java/com/hbm/handler/imc/IMCCrystallizer.java | 1 + src/main/java/com/hbm/handler/imc/IMCHandler.java | 7 +++++++ src/main/java/com/hbm/tileentity/TileMappings.java | 10 +++++++++- src/main/java/com/hbm/util/Compat.java | 6 ++++++ 10 files changed, 29 insertions(+), 6 deletions(-) diff --git a/changelog b/changelog index d3d8a6554..67551c1c8 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,2 @@ ## Changed -* Blueprint folders can now be bought on bobmazon (64 for blue recipes, 256 for beige ones) - -## Fixed -* Fixed the QMAW loader crashing servers - * Oops \ No newline at end of file +* Due to severe issues with ticking order as well as a crash caused by certain tiles that uses threaded packets, Torcherino accelerator torches no longer affect NTM machines \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java index 3deab1d17..bf9cddaa0 100644 --- a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java +++ b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java @@ -5,6 +5,7 @@ import java.util.Map.Entry; import com.hbm.handler.guncfg.*; +@Deprecated public class BulletConfigSyncingUtil { private static HashMap configSet = new HashMap(); diff --git a/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java b/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java index d0e8e6bd7..dab6b35f3 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java @@ -4,6 +4,7 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +@Deprecated public class GunEnergyFactory { public static BulletConfiguration getTurbineConfig() { diff --git a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java index 8b5cb54bb..aa33eba4f 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java @@ -23,6 +23,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; +@Deprecated public class GunNPCFactory { public static BulletConfiguration getMaskmanOrb() { diff --git a/src/main/java/com/hbm/handler/imc/IMCBlastFurnace.java b/src/main/java/com/hbm/handler/imc/IMCBlastFurnace.java index 7a99d4349..d553587bf 100644 --- a/src/main/java/com/hbm/handler/imc/IMCBlastFurnace.java +++ b/src/main/java/com/hbm/handler/imc/IMCBlastFurnace.java @@ -14,6 +14,7 @@ import net.minecraft.nbt.NBTTagList; * @author UFFR */ +@Deprecated public class IMCBlastFurnace extends IMCHandler { public static final ArrayList> buffer = new ArrayList<>(); diff --git a/src/main/java/com/hbm/handler/imc/IMCCentrifuge.java b/src/main/java/com/hbm/handler/imc/IMCCentrifuge.java index 24456f70f..8fc5666cb 100644 --- a/src/main/java/com/hbm/handler/imc/IMCCentrifuge.java +++ b/src/main/java/com/hbm/handler/imc/IMCCentrifuge.java @@ -10,6 +10,7 @@ import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +@Deprecated public class IMCCentrifuge extends IMCHandler { public static HashMap buffer = new HashMap(); diff --git a/src/main/java/com/hbm/handler/imc/IMCCrystallizer.java b/src/main/java/com/hbm/handler/imc/IMCCrystallizer.java index 9230bb11c..8ca219536 100644 --- a/src/main/java/com/hbm/handler/imc/IMCCrystallizer.java +++ b/src/main/java/com/hbm/handler/imc/IMCCrystallizer.java @@ -13,6 +13,7 @@ import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +@Deprecated public class IMCCrystallizer extends IMCHandler { public static HashMap, CrystallizerRecipe> buffer = new HashMap(); diff --git a/src/main/java/com/hbm/handler/imc/IMCHandler.java b/src/main/java/com/hbm/handler/imc/IMCHandler.java index 22cd5a386..4aa650742 100644 --- a/src/main/java/com/hbm/handler/imc/IMCHandler.java +++ b/src/main/java/com/hbm/handler/imc/IMCHandler.java @@ -6,6 +6,13 @@ import com.hbm.main.MainRegistry; import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; +/** + * I'm not aware of anyone even using these, and for proper addon mods it's way easier to use direct calls instead of messages. + * Too cumbersome to implement and maintain, especially since the recipe register listeners exist now. Current implementation will break on recipe reload anyway. + * + * @author hbm + */ +@Deprecated public abstract class IMCHandler { private static final HashMap handlers = new HashMap(); diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 63bc3640e..250305afe 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -54,8 +54,9 @@ import com.hbm.tileentity.machine.rbmk.*; import com.hbm.tileentity.machine.storage.*; import com.hbm.tileentity.network.*; import com.hbm.tileentity.turret.*; -import cpw.mods.fml.common.Loader; +import com.hbm.util.Compat; +import cpw.mods.fml.common.Loader; import net.minecraft.tileentity.TileEntity; public class TileMappings { @@ -480,5 +481,12 @@ public class TileMappings { if(IConfigurableMachine.class.isAssignableFrom(clazz)) { configurables.add((Class) clazz); } + + /** + * Causes problems with most machines where two independently acting tiles work together (TU machines, RBMKs, fluid transfer) + * Also breaks due to some sort of buffer leak in the threaded packets, if a boiler is involved (which uses a ByteBuf instead of the usual serializing) it crashes + * Ticking order of Torcherinos is AAA BBB CCC instead of ABC ABC ABC which can lead to some horrifying behavior + */ + Compat.blacklistAccelerator(clazz); } } diff --git a/src/main/java/com/hbm/util/Compat.java b/src/main/java/com/hbm/util/Compat.java index db59a6026..138b109ed 100644 --- a/src/main/java/com/hbm/util/Compat.java +++ b/src/main/java/com/hbm/util/Compat.java @@ -9,6 +9,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.main.MainRegistry; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.eventhandler.EventBus; import cpw.mods.fml.common.eventhandler.IEventListener; import cpw.mods.fml.relauncher.ReflectionHelper; @@ -37,6 +38,7 @@ public class Compat { public static final String MOD_TC = "tc"; public static final String MOD_EIDS = "endlessids"; public static final String MOD_ANG = "angelica"; + public static final String MOD_TOR = "Torcherino"; public static Item tryLoadItem(String domain, String name) { return (Item) Item.itemRegistry.getObject(getReg(domain, name)); @@ -259,4 +261,8 @@ public class Compat { if(!world.getChunkProvider().chunkExists(x >> 4, z >> 4)) return null; return world.getTileEntity(x, y, z); } + + public static void blacklistAccelerator(Class clazz) { + FMLInterModComms.sendMessage("Torcherino", "blacklist-tile", clazz.getName()); + } } From aa045050a1d1d3c49eff110a5941353fa2cea827 Mon Sep 17 00:00:00 2001 From: CrpBnrz <2032217625@qq.com> Date: Sat, 23 Aug 2025 15:42:04 +0800 Subject: [PATCH 434/491] QMAW localization created by me --- .../resources/assets/hbm/manual/material/arsenic_bronze.json | 2 +- src/main/resources/assets/hbm/manual/material/bakelite.json | 3 ++- src/main/resources/assets/hbm/manual/material/bismuth.json | 3 ++- .../resources/assets/hbm/manual/material/bismuth_bronze.json | 3 ++- src/main/resources/assets/hbm/manual/material/bscco.json | 5 +++-- src/main/resources/assets/hbm/manual/material/cadmium.json | 3 ++- .../resources/assets/hbm/manual/material/cadmium_steel.json | 3 ++- src/main/resources/assets/hbm/manual/material/cinnabar.json | 3 ++- src/main/resources/assets/hbm/manual/material/coke.json | 3 ++- src/main/resources/assets/hbm/manual/material/copper.json | 3 ++- src/main/resources/assets/hbm/manual/material/desh.json | 3 ++- .../resources/assets/hbm/manual/material/ferrouranium.json | 3 ++- src/main/resources/assets/hbm/manual/material/graphite.json | 3 ++- src/main/resources/assets/hbm/manual/material/gunmetal.json | 3 ++- src/main/resources/assets/hbm/manual/material/hss.json | 3 ++- src/main/resources/assets/hbm/manual/material/latex.json | 3 ++- src/main/resources/assets/hbm/manual/material/lead.json | 3 ++- src/main/resources/assets/hbm/manual/material/mingrade.json | 3 ++- src/main/resources/assets/hbm/manual/material/neptunium.json | 3 ++- .../resources/assets/hbm/manual/material/plutonium-238.json | 3 ++- .../resources/assets/hbm/manual/material/plutonium-239.json | 3 ++- .../resources/assets/hbm/manual/material/plutonium-240.json | 5 +++-- .../resources/assets/hbm/manual/material/plutonium-241.json | 3 ++- .../resources/assets/hbm/manual/material/plutonium-rg.json | 3 ++- src/main/resources/assets/hbm/manual/material/plutonium.json | 3 ++- src/main/resources/assets/hbm/manual/material/polonium.json | 3 ++- src/main/resources/assets/hbm/manual/material/polymer.json | 3 ++- src/main/resources/assets/hbm/manual/material/radium.json | 3 ++- src/main/resources/assets/hbm/manual/material/rubber.json | 3 ++- src/main/resources/assets/hbm/manual/material/silicon.json | 3 ++- src/main/resources/assets/hbm/manual/material/sodium.json | 3 ++- src/main/resources/assets/hbm/manual/material/steel.json | 3 ++- src/main/resources/assets/hbm/manual/material/sulfur.json | 3 ++- src/main/resources/assets/hbm/manual/material/tantalium.json | 5 +++-- .../resources/assets/hbm/manual/material/technetium.json | 3 ++- .../assets/hbm/manual/material/technetium_steel.json | 3 ++- src/main/resources/assets/hbm/manual/material/thorium.json | 3 ++- .../resources/assets/hbm/manual/material/uranium-233.json | 3 ++- .../resources/assets/hbm/manual/material/uranium-235.json | 3 ++- src/main/resources/assets/hbm/manual/material/uranium.json | 3 ++- 40 files changed, 82 insertions(+), 43 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json index a3feacd14..2b99f895c 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json @@ -10,6 +10,6 @@ "content": { "en_US": "Derivative of [[arsenic|Arsenic]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]] due to requiring [[high-performance solvent|High-Performance Solvent]].

Fully interchangeable with [[bismuth bronze|Bismuth Bronze]].", "ru_RU": "Производное от [[мышьяка|Arsenic]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]] из-за требования [[высокоэффективного растворителя|High-Performance Solvent]].

Полностью взаимозаменяемо с [[висмутовой бронзой|Bismuth Bronze]].", - "zh_CN": "使用[[砷|Arsenic]]在[[坩埚|Crucible]]中制作的衍生物,只能在建造了[[RBMK]]之后才能获得,因为提取砷需要用到[[高性能溶剂|High-Performance Solvent]]。

和[[铋青铜|Bismuth Bronze]]完全通用。" + "zh_CN": "使用[[砷|Arsenic]]在[[坩埚|Crucible]]中制作的衍生物,只能在建造[[RBMK]]之后获得,因为提取砷需要用到[[高性能溶剂|High-Performance Solvent]]。

和[[铋青铜|Bismuth Bronze]]完全通用。" } } diff --git a/src/main/resources/assets/hbm/manual/material/bakelite.json b/src/main/resources/assets/hbm/manual/material/bakelite.json index 27da9b801..91066d846 100644 --- a/src/main/resources/assets/hbm/manual/material/bakelite.json +++ b/src/main/resources/assets/hbm/manual/material/bakelite.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Alternative to [[polymer|Polymer]] made from [[aromatic hydrocarbons|Aromatic Hydrocarbons]] derived from [[cracked oil products|Catalytic Cracking Tower]]. Completely interchangeable in all recipes.", - "ru_RU": "Альтернатива [[полимеру|Polymer]], изготовленная из [[ароматических углеводородов|Aromatic Hydrocarbons]], полученных из [[продуктов крекинга нефти|Catalytic Cracking Tower]]. Полностью взаимозаменяема во всех рецептах." + "ru_RU": "Альтернатива [[полимеру|Polymer]], изготовленная из [[ароматических углеводородов|Aromatic Hydrocarbons]], полученных из [[продуктов крекинга нефти|Catalytic Cracking Tower]]. Полностью взаимозаменяема во всех рецептах.", + "zh_CN": "[[聚合物|Polymer]]的替代品,使用处理[[裂化油|Catalytic Cracking Tower]]得到的产品之一[[芳香烃|Aromatic Hydrocarbons]]制作。在所有配方中与聚合物完全通用。" } } diff --git a/src/main/resources/assets/hbm/manual/material/bismuth.json b/src/main/resources/assets/hbm/manual/material/bismuth.json index 4ac2846b0..cd9fcd48d 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]].", - "ru_RU": "Тяжелый металл, первоначально получаемый из переработки отработанного топлива [[РБМК|RBMK]] в [[SILEX]], также может быть получен из поздних стадий обработки бедроковой руды с использованием [[высокоэффективного растворителя|High-Performance Solvent]]. В основном используется в виде [[висмутовай бронзы|Bismuth Bronze]]." + "ru_RU": "Тяжелый металл, первоначально получаемый из переработки отработанного топлива [[РБМК|RBMK]] в [[SILEX]], также может быть получен из поздних стадий обработки бедроковой руды с использованием [[высокоэффективного растворителя|High-Performance Solvent]]. В основном используется в виде [[висмутовай бронзы|Bismuth Bronze]].", + "zh_CN": "一种重金属,最初可使用[[SILEX]]回收枯竭的[[RBMK]]燃料获取,之后也可在基岩矿石处理的后期步骤中,使用[[高性能溶剂|Hing-Performance Solvent]]处理矿石获取。主要用于制作[[铋青铜|Bismuth Bronze]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json index e583f359b..dfec1324c 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].

Fully interchangeable with [[arsenic bronze|Arsenic Bronze]].", - "ru_RU": "Производное от [[висмута|Bismuth]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]].

Полностью взаимозаменяемо с [[мышьяковой бронзой|Arsenic Bronze]]." + "ru_RU": "Производное от [[висмута|Bismuth]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]].

Полностью взаимозаменяемо с [[мышьяковой бронзой|Arsenic Bronze]].", + "zh_CN": "使用[[铋|Bismuth]]在[[坩埚|Crucible]]中制作的衍生物,只能在建造[[RBMK]]之后获得。

和[[砷青铜|Arsenic Bronze]]完全通用。" } } diff --git a/src/main/resources/assets/hbm/manual/material/bscco.json b/src/main/resources/assets/hbm/manual/material/bscco.json index 941023847..74947967d 100644 --- a/src/main/resources/assets/hbm/manual/material/bscco.json +++ b/src/main/resources/assets/hbm/manual/material/bscco.json @@ -5,10 +5,11 @@ "title": { "en_US": "BSCCO", "ru_RU": "BSCCO", - "zh_CN": "BSCCO" + "zh_CN": "BSCCO超导体" }, "content": { "en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]].", - "ru_RU": "Мощный сверхпроводник, используемый в высокоуровневых цепях и катушках для [[ускорителя частиц|Particle Accelerator]]. Требует [[висмута|Bismuth]], и поэтому доступен только после постройки [[РБМК|RBMK]]." + "ru_RU": "Мощный сверхпроводник, используемый в высокоуровневых цепях и катушках для [[ускорителя частиц|Particle Accelerator]]. Требует [[висмута|Bismuth]], и поэтому доступен только после постройки [[РБМК|RBMK]].", + "zh_CN": "强力的超导体,用于制作高等级的电路及用于[[粒子加速器|Particle Accelerator]]的线圈。需要[[铋|Bismuth]]制作,因此只能在建造[[RBMK]]后获得。" } } diff --git a/src/main/resources/assets/hbm/manual/material/cadmium.json b/src/main/resources/assets/hbm/manual/material/cadmium.json index 2cd72905f..92c03694e 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute.", - "ru_RU": "Изготовлен путём обработки листьев горчичной ивы [[высокоэффективным растворителем|High-Performance Solvent]]. Используется в [[ПВХ|PVC]], позднеигровом альтернативном рецепте для [[резины|Rubber]] и для [[кадмиевой стали|Cadmium Steel]], которая действует как замена [[технециевой стали|Technetium Steel]]." + "ru_RU": "Изготовлен путём обработки листьев горчичной ивы [[высокоэффективным растворителем|High-Performance Solvent]]. Используется в [[ПВХ|PVC]], позднеигровом альтернативном рецепте для [[резины|Rubber]] и для [[кадмиевой стали|Cadmium Steel]], которая действует как замена [[технециевой стали|Technetium Steel]].", + "zh_CN": "使用[[高性能溶剂|High-Performance Solvent]]处理芥子柳叶获取。用于制作[[PVC]],也可用于游戏后期的[[橡胶|Rubber]]替代配方,以及制作[[锝钢|Technetium Steel]]的替代品[[镉钢|Cadmium Steel]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json index 2cdcf5bd6..2780b16d1 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes.", - "ru_RU": "Коррозионно-стойкий сплав, изготовленный из [[стали|Steel]] и [[кадмия|Cadmium]]. Альтернатива [[технециевой стали|Technetium Steel]] в большинстве рецептов." + "ru_RU": "Коррозионно-стойкий сплав, изготовленный из [[стали|Steel]] и [[кадмия|Cadmium]]. Альтернатива [[технециевой стали|Technetium Steel]] в большинстве рецептов.", + "zh_CN": "由[[钢|Steel]]和[[镉|Cadmium]]制成的耐腐蚀合金,可在大部分配方中替代[[锝钢|Technetium Steel]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/cinnabar.json b/src/main/resources/assets/hbm/manual/material/cinnabar.json index 959b7780e..ff0a50188 100644 --- a/src/main/resources/assets/hbm/manual/material/cinnabar.json +++ b/src/main/resources/assets/hbm/manual/material/cinnabar.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production.", - "ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в коксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деша|Desh]]." + "ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в коксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деша|Desh]].", + "zh_CN": "稀有矿物,可[[酸化|Ore Acidizer]]为相当于375mB流体的[[水银|Mercury]]液滴,也可[[炼焦|Combination Oven]]为100mB水银和一个硫粉。其主要作为获取生产[[Desh]]需要的水银的早期手段。" } } diff --git a/src/main/resources/assets/hbm/manual/material/coke.json b/src/main/resources/assets/hbm/manual/material/coke.json index 72dfa40b6..c48c773dd 100644 --- a/src/main/resources/assets/hbm/manual/material/coke.json +++ b/src/main/resources/assets/hbm/manual/material/coke.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].

Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.

Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.

Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]].", - "ru_RU": "Высокочистый углерод, имеет вдвое большую энергию сгорания, чем уголь. Может быть спрессован в [[графит|Graphite]], используется в различных рецептах [[стали|Steel]] или как источник углерода для [[плавильни|Crucible]].

Угольный кокс можно получить путём переплавки угольных брикетов или комбинированной переплавки угля в различных формах.

Бурый кокс изготавливается из более дешёвого и менее мощного бурого угля тем же способом, но обладает теми же характеристиками.

Нефтяной кокс производится либо из неугольных смол в [[коксовой печи|Combination Oven]], либо путём коксования различных видов масла в [[коксовой установке|Coking Unit]]." + "ru_RU": "Высокочистый углерод, имеет вдвое большую энергию сгорания, чем уголь. Может быть спрессован в [[графит|Graphite]], используется в различных рецептах [[стали|Steel]] или как источник углерода для [[плавильни|Crucible]].

Угольный кокс можно получить путём переплавки угольных брикетов или комбинированной переплавки угля в различных формах.

Бурый кокс изготавливается из более дешёвого и менее мощного бурого угля тем же способом, но обладает теми же характеристиками.

Нефтяной кокс производится либо из неугольных смол в [[коксовой печи|Combination Oven]], либо путём коксования различных видов масла в [[коксовой установке|Coking Unit]].", + "zh_CN": "高纯度的碳,其热值为煤炭的两倍。可被锻压为[[石墨|Graphite]],也可用于多种炼[[钢|Steel]]配方或作为[[坩埚|Crucible]]中碳的来源。

煤焦炭可通过在熔炉中烧炼煤球获取,或在复式炼焦炉中炼焦各种形式的煤炭获取。

褐煤焦炭可以以更廉价且品质更低的褐煤为原料,通过相同的方式获取, 尽管其特性与煤焦炭完全相同。

石油焦炭可通过在[[复式炼焦炉|Combination Oven]]中炼焦焦油(煤焦油除外)获取,也可通过在[[焦化装置|Coking Unit]]中焦化多种油获取。" } } diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json index c81e68332..4ed4dbfae 100644 --- a/src/main/resources/assets/hbm/manual/material/copper.json +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.", - "ru_RU": "Обычный ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]]." + "ru_RU": "Обычный ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]].", + "zh_CN": "常见资源。纯铜主要用作结构材料,或在能够承受高温的设备中使用(作热导体); 铜的多种合金用途极广。

[[紫铜|Minecraft Grade Copper]]是红石和铜的合金,几乎所有电力设备都使用紫铜。

[[高级合金|Advanced Alloy]]是前期强力的装备材料,其性能优于钻石。

[[炮铜|Gunmetal]]是制作多种枪炮必不可少的材料,同时也用于制造弹壳。

[[铋青铜|Bismuth Bronze]]和[[砷青铜|Arsenic Bronze]]是 [[RBMK]] 后的材料,用于制作多种后期机器。

[[BSCCO]]是一种由铋衍生的超导体,高等级的量子电路和[[粒子加速器|Particle Accelerator]]线圈都需要BSCCO超导体制作。" } } diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json index 255772f18..0a68e93e6 100644 --- a/src/main/resources/assets/hbm/manual/material/desh.json +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.", - "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деша, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей." + "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деша, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей.", + "zh_CN": "在[[化工厂|Chemical Plant]]中制成的高强度工作合金,需要基础[[原油|Crude Oil]]精炼的产物[[轻油|Light Oil]]、[[离心|Centrifuge]]红石矿石得到的副产物[[水银|Mercury]]以及[[粉碎|Shredder]]稀土矿石块得到的Desh混合物制作。

用于制作多种物品,特别是工具和武器。Desh制工具挖掘速度较慢且挖掘等级 只相当于铁制工具,但其是最早可获得的无法破坏的工具之一,而且具有多个工具 能力。" } } diff --git a/src/main/resources/assets/hbm/manual/material/ferrouranium.json b/src/main/resources/assets/hbm/manual/material/ferrouranium.json index 9d6c3efcc..231415c43 100644 --- a/src/main/resources/assets/hbm/manual/material/ferrouranium.json +++ b/src/main/resources/assets/hbm/manual/material/ferrouranium.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition.", - "ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[тигле|Crucible]]. В основном используется в дюкрете, деталях оружий и взрывных боеприпасах." + "ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[тигле|Crucible]]. В основном используется в дюкрете, деталях оружий и взрывных боеприпасах.", + "zh_CN": "[[钢|Steel]]与[[铀-238|Uranium-238]]的合金,在坩埚中制成。 主要用于制作贫铀混凝土、武器部件和高爆弹药。" } } diff --git a/src/main/resources/assets/hbm/manual/material/graphite.json b/src/main/resources/assets/hbm/manual/material/graphite.json index 7ea9d69a8..726def52f 100644 --- a/src/main/resources/assets/hbm/manual/material/graphite.json +++ b/src/main/resources/assets/hbm/manual/material/graphite.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes.", - "ru_RU": "Изготавливается путём прессования кокса. Используется в ядерных реакторах, графитовых электродах для [[электродуговой печи|Electric Arc Furnace]] или как источник углерода в различных рецептах для [[плавильни|Crucible]]." + "ru_RU": "Изготавливается путём прессования кокса. Используется в ядерных реакторах, графитовых электродах для [[электродуговой печи|Electric Arc Furnace]] или как источник углерода в различных рецептах для [[плавильни|Crucible]].", + "zh_CN": "通过锻压焦炭获取。用于核反应堆、[[电弧炉|Electric Arc Furnace]]电极,也可作为部分[[坩埚|Crucible]]配方中碳的来源。" } } diff --git a/src/main/resources/assets/hbm/manual/material/gunmetal.json b/src/main/resources/assets/hbm/manual/material/gunmetal.json index b7c339dcc..522c94b84 100644 --- a/src/main/resources/assets/hbm/manual/material/gunmetal.json +++ b/src/main/resources/assets/hbm/manual/material/gunmetal.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition.", - "ru_RU": "Сплав из [[алюминия|Aluminium]] и [[меди|Copper]]. Может быть изготовлен на наковальне или более эффективно в [[роторной печи|Rotary Furnace]]. В основном используется для деталей оружия, а также для гильз большинства боеприпасов." + "ru_RU": "Сплав из [[алюминия|Aluminium]] и [[меди|Copper]]. Может быть изготовлен на наковальне или более эффективно в [[роторной печи|Rotary Furnace]]. В основном используется для деталей оружия, а также для гильз большинства боеприпасов.", + "zh_CN": "[[铝|Aluminium]]和[[铜|Copper]]的合金。可在砧中制作,也可在[[回转炉|Rotary Furnace]]中更高效地制作。主要用于制作武器部件,也用于制作大部分弹壳。" } } diff --git a/src/main/resources/assets/hbm/manual/material/hss.json b/src/main/resources/assets/hbm/manual/material/hss.json index ebc3d25a2..a1f215049 100644 --- a/src/main/resources/assets/hbm/manual/material/hss.json +++ b/src/main/resources/assets/hbm/manual/material/hss.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable.", - "ru_RU": "Сплав из [[стали|Steel]], [[вольфрама|Tungsten]] и [[кобальта|Cobalt]], изготовленный в [[плавильне|Crucible]]. Создается в виде жидкого металла, требует отливки в форму слитка или пластины перед использованием." + "ru_RU": "Сплав из [[стали|Steel]], [[вольфрама|Tungsten]] и [[кобальта|Cobalt]], изготовленный в [[плавильне|Crucible]]. Создается в виде жидкого металла, требует отливки в форму слитка или пластины перед использованием.", + "zh_CN": "[[钢|Steel]、[[钨|Tungsten]]、[[钴|Cobalt]]的合金,在[[坩埚|Crucible]]中制成。制造出的高速钢为熔融状态, 在使用前需要将其铸造成锭或板的形式。" } } diff --git a/src/main/resources/assets/hbm/manual/material/latex.json b/src/main/resources/assets/hbm/manual/material/latex.json index 73a7d88ce..39aff6376 100644 --- a/src/main/resources/assets/hbm/manual/material/latex.json +++ b/src/main/resources/assets/hbm/manual/material/latex.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa.", - "ru_RU": "Натуральная форма резины, добывается из одуванчиков или путём прессования древесины джунглей. Может быть заменена во всех рецептах на [[резину|Rubber]], но не наоборот." + "ru_RU": "Натуральная форма резины, добывается из одуванчиков или путём прессования древесины джунглей. Может быть заменена во всех рецептах на [[резину|Rubber]], но не наоборот.", + "zh_CN": "橡胶的天然形态,可用蒲公英合成获得或锻压丛林木获得。可在所有配方中被[[橡胶|Rubber]]替代,反之则不行。" } } diff --git a/src/main/resources/assets/hbm/manual/material/lead.json b/src/main/resources/assets/hbm/manual/material/lead.json index 1232d2f1d..f782b0e50 100644 --- a/src/main/resources/assets/hbm/manual/material/lead.json +++ b/src/main/resources/assets/hbm/manual/material/lead.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits.", - "ru_RU": "Обычный ресурс. В основном используется для вещей, связанных с радиацией, а также для боеприпасов и в качестве припоя для многих схем." + "ru_RU": "Обычный ресурс. В основном используется для вещей, связанных с радиацией, а также для боеприпасов и в качестве припоя для многих схем.", + "zh_CN": "常见资源,主要用于涉及辐射的设备,也用于制作弹药,以及用作电路板的焊料。" } } diff --git a/src/main/resources/assets/hbm/manual/material/mingrade.json b/src/main/resources/assets/hbm/manual/material/mingrade.json index f231f2b4b..a78cfd1bc 100644 --- a/src/main/resources/assets/hbm/manual/material/mingrade.json +++ b/src/main/resources/assets/hbm/manual/material/mingrade.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form.", - "ru_RU": "Сплав, изготовленный из меди и красного камня в равных частях в [[доменной печи|Blast Furnace]]. Используется почти во всех электрических устройствах, обычно в виде проводов." + "ru_RU": "Сплав, изготовленный из меди и красного камня в равных частях в [[доменной печи|Blast Furnace]]. Используется почти во всех электрических устройствах, обычно в виде проводов.", + "zh_CN": "等量的铜和红石在[[高炉|Blast Furnace]]中制作的合金。 主要以线的形式用于几乎所有电力设备。" } } diff --git a/src/main/resources/assets/hbm/manual/material/neptunium.json b/src/main/resources/assets/hbm/manual/material/neptunium.json index adb08aa9b..a97d4c7af 100644 --- a/src/main/resources/assets/hbm/manual/material/neptunium.json +++ b/src/main/resources/assets/hbm/manual/material/neptunium.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]].", - "ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащённое нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащённое нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]]." + "ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащённое нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащённое нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]].", + "zh_CN": "一种易裂变同位素,主要存在于枯竭的[[铀-235|Uranium-235]]燃料中。 主要用于核反应堆,纯净的镎既可直接用作高浓缩度镎燃料,也可和[[铀-238|Uranium-238]]混合为中浓缩度镎燃料。可用于[[PWR]]和[[RBMK]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-238.json b/src/main/resources/assets/hbm/manual/material/plutonium-238.json index 7e8406d2e..21f9396e4 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-238.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-238.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].

Moderately radioactive, very hot.", - "ru_RU": "Радиоизотоп, в основном используется в [[РТГ|RTG]]. Получается из гексафторида [[плутония|Plutonium]] или из различных ядерных топлив, преимущественно использующих [[уран-235|Uranium-235]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Плутоний-210-Бериллий для [[РБМК|RBMK]].

Умеренно радиоактивен, очень горячий." + "ru_RU": "Радиоизотоп, в основном используется в [[РТГ|RTG]]. Получается из гексафторида [[плутония|Plutonium]] или из различных ядерных топлив, преимущественно использующих [[уран-235|Uranium-235]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Плутоний-210-Бериллий для [[РБМК|RBMK]].

Умеренно радиоактивен, очень горячий.", + "zh_CN": "放射性同位素,主要用于[[RTG]]。可从六氟化[[钚|Plutonium]]中提取,也可从一些核燃料(主要是含[[铀-235|Uranium-235]]的种类)中分离得到。可与[[铍|Beryllium]]混合制成钚-238-铍中子源,用于[[RBMK]]反应堆。

放射性中等,高温。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-239.json b/src/main/resources/assets/hbm/manual/material/plutonium-239.json index 6c893050f..381d0383c 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-239.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-239.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.

Moderately radioactive.", - "ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащённых топливах для различных реакторов, в смеси с другими изотопами для менее обогащённых топлив или как делящийся материал во многих ядерных бомбах.

Умеренно радиоактивен." + "ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащённых топливах для различных реакторов, в смеси с другими изотопами для менее обогащённых топлив или как делящийся материал во многих ядерных бомбах.

Умеренно радиоактивен.", + "zh_CN": "[[钚|Plutonium]]主要的易裂变同位素,可从多种使用[[铀-238|Uranium-238]]的核燃料中提取,或直接从[[反应堆级钚|Reactor-Grade Plutonium]]中分离得到。可在多种反应堆中用作高浓缩度燃料,也可与其他同位素混合制成 浓缩度较低的燃料,还可在多种核弹中用作裂变材料。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-240.json b/src/main/resources/assets/hbm/manual/material/plutonium-240.json index c14ae8f38..9626ebb5e 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-240.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-240.json @@ -8,7 +8,8 @@ "zh_CN": "钚-240" }, "content": { - "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or inspecialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].", - "ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[циркониевых|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]]." + "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or in specialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].", + "ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[циркониевых|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]].", + "zh_CN": "[[钚|Plutonium]]和[[反应堆级钚|Reactor-Grade Plutonium]]中存在的不易裂变同位素。仅有的用途是手动与[[钚-239|Plutonium-239]]混合为反应堆级钚,或与[[锆|Zirconium]]一同制成专用于增殖的ZFB燃料棒,以在[[RBMK]]中生产[[钚-241|Plutonium-241]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json index 79df83f71..1720d6d21 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-241.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-241.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive.", - "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанных топлив [[РБМК|RBMK]], богатых [[плутонием-240|Plutonium-240]], а также из определенных типов [[циркониевых|Zirconium]] топлив быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен." + "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанных топлив [[РБМК|RBMK]], богатых [[плутонием-240|Plutonium-240]], а также из определенных типов [[циркониевых|Zirconium]] топлив быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен.", + "zh_CN": "[[钚|Plutonium]]次要的易裂变同位素,可从枯竭的富含[[钚-240|Plutonium-240]]的[[RBMK]]燃料及特定种类的[[锆|Zirconium]]快速增殖燃料(ZFB)中提取。 仅用于专用的增殖燃料,或用作比相应的[[钚-239|Plutonium-239]]燃料更强力的高浓缩度燃料。再处理用于RBMK的钚-241燃料时 可以得到[[镅-241|Americium-241]]和[[镅-242|Americium-242]]。

放射性较强。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json index 664af5785..4ba98b167 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.

Moderately radioactive.", - "ru_RU": "Смесь [[плутония-239|Plutonium-239]] и [[плутония-240|Plutonium-240]]. Обычный результат переработки многих топлив на основе [[урана|Uranium]], а также при размножении урана в [[Чикагской полленице|Chicago Pile]]. Используется во многих реакторах как среднеобогащённое плутониевое топливо.

Умеренно радиоактивен." + "ru_RU": "Смесь [[плутония-239|Plutonium-239]] и [[плутония-240|Plutonium-240]]. Обычный результат переработки многих топлив на основе [[урана|Uranium]], а также при размножении урана в [[Чикагской полленице|Chicago Pile]]. Используется во многих реакторах как среднеобогащённое плутониевое топливо.

Умеренно радиоактивен.", + "zh_CN": "[[钚-239|Plutonium-239]]和[[钚-240|Plutonium-240]]的混合物。是再处理多种[[铀|Uranium]]基燃料的常见产物,也是在[[芝加哥反应堆|Chicago Pile]]中增殖铀的常见产物。可在多种反应堆中用作中浓缩度燃料。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium.json b/src/main/resources/assets/hbm/manual/material/plutonium.json index 72a9c21ad..9986060ed 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.

Moderately radioactive.

See also:
[[Plutonium-238]]
[[Plutonium-239]]
[[Plutonium-240]]
[[Plutonium-241]]", - "ru_RU": "Редкая форма нечистого плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определенных рецептов [[циклотрона|Cyclotron]].

Умеренно радиоактивен.

См. также:
[[Плутоний-238|Plutonium-238]]
[[Плутоний-239|Plutonium-239]]
[[Плутоний-240|Plutonium-240]]
[[Плутоний-241|Plutonium-241]]" + "ru_RU": "Редкая форма нечистого плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определенных рецептов [[циклотрона|Cyclotron]].

Умеренно радиоактивен.

См. также:
[[Плутоний-238|Plutonium-238]]
[[Плутоний-239|Plutonium-239]]
[[Плутоний-240|Plutonium-240]]
[[Плутоний-241|Plutonium-241]]", + "zh_CN": "不纯钚的稀有形式,由钚-238、钚-239、钚-240组成。 钚的矿石形式默认禁用。钚可以以六氟化钚的形式在[[气体离心机|Gas Centrifuge]]中处理,也用于某些[[回旋加速器|Cyclotron]]配方。

放射性中等。

另见:
[[钚-238|Plutonium-238]]
[[钚-239|Plutonium-239]]
[[钚-240|Plutonium-240]]
[[钚-241|Plutonium-241]]" } } diff --git a/src/main/resources/assets/hbm/manual/material/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json index 07f59e7d9..22d740895 100644 --- a/src/main/resources/assets/hbm/manual/material/polonium.json +++ b/src/main/resources/assets/hbm/manual/material/polonium.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot.", - "ru_RU": "Радиоизотоп, получаемый из переработки нейтронных источников [[радия-226|Radium-226]]. Используется для [[РТГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках Полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий." + "ru_RU": "Радиоизотоп, получаемый из переработки нейтронных источников [[радия-226|Radium-226]]. Используется для [[РТГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках Полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий.", + "zh_CN": "再处理[[镭-226|Radium-226]]中子源时得到的放射性同位素。可用于[[RTG]],也可与[[铍|Beryllium]]混合为钋-210-铍中子源,用于[[RBMK]]。

放射性强,高温。" } } diff --git a/src/main/resources/assets/hbm/manual/material/polymer.json b/src/main/resources/assets/hbm/manual/material/polymer.json index 42f8dda92..ade503072 100644 --- a/src/main/resources/assets/hbm/manual/material/polymer.json +++ b/src/main/resources/assets/hbm/manual/material/polymer.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Polymer ('Teflon') is the first available type of plastic. Requires [[petroleum gas|Petroleum Gas]] and therefore [[oil processing|Crude Oil]].

Fully interchangable with [[Bakelite]], which becomes available after [[oil cracking|Catalytic Cracking Tower]].", - "ru_RU": "Полимер ('Тефлон') — первый доступный тип пластика. Требует [[нефтяного газа|Petroleum Gas]] и, следовательно, [[переработки нефти|Crude Oil]].

Полностью взаимозаменяем с [[бакелитом|Bakelite]], который становится доступным после [[крекинга нефти|Catalytic Cracking Tower]]." + "ru_RU": "Полимер ('Тефлон') — первый доступный тип пластика. Требует [[нефтяного газа|Petroleum Gas]] и, следовательно, [[переработки нефти|Crude Oil]].

Полностью взаимозаменяем с [[бакелитом|Bakelite]], который становится доступным после [[крекинга нефти|Catalytic Cracking Tower]].", + "zh_CN": "聚合物(“特氟龙”)是第一种可获取的塑料。需要[[石油气|Petroleum Gas]]制作,因此需要 [[原油处理|Crude Oil]]。和[[电木|Bakelite]]完全通用,后者在获得[[催化裂化塔|Catalytic Cracking Tower]]后才可制作。" } } diff --git a/src/main/resources/assets/hbm/manual/material/radium.json b/src/main/resources/assets/hbm/manual/material/radium.json index 8e77e9563..06d698267 100644 --- a/src/main/resources/assets/hbm/manual/material/radium.json +++ b/src/main/resources/assets/hbm/manual/material/radium.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.

Moderately radioactive.", - "ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечён с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.

Умеренно радиоактивен." + "ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечён с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.

Умеренно радиоактивен.", + "zh_CN": "稀有的放射性物质,存在于[[铀|Uranium]]矿石和[[钍|Thorium]]矿石中,可通过[[离心机|Centrifuge]]提取。可与[[铍|Beryllium]]混合得到启动[[芝加哥反应堆|Chicago Pile]]、[[RBMK]]、[[PWR]]、[[研究型反应堆|]]必须的镭-226-铍中子源。是最早可获得的中子放射源,而且通常也是最便宜的。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/rubber.json b/src/main/resources/assets/hbm/manual/material/rubber.json index 6329a6f39..671e9980a 100644 --- a/src/main/resources/assets/hbm/manual/material/rubber.json +++ b/src/main/resources/assets/hbm/manual/material/rubber.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe.", - "ru_RU": "Продукт переработки нефти, получаемый из [[ненасыщенных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах." + "ru_RU": "Продукт переработки нефти, получаемый из [[ненасыщенных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах.", + "zh_CN": "一种石化产品,衍生自[[不饱和烃|Unsaturated Hydrocarbons]]和[[硫|Sulfur]]。至少需要一台[[催化裂化塔|Catalytic Cracking Tower]]才能制作。可在所有配方中替代[[乳胶|Latex]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/silicon.json b/src/main/resources/assets/hbm/manual/material/silicon.json index 57a2298ed..ebc5a87b7 100644 --- a/src/main/resources/assets/hbm/manual/material/silicon.json +++ b/src/main/resources/assets/hbm/manual/material/silicon.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing.", - "ru_RU": "Важный материал для производства интегральных схем и любой электроники, более сложной, чем аналоговые схемы. Производится в [[электродуговой печи|Electric Arc Furnace]] из материалов, содержащих диоксид кремния, таких как обычный песок, незер-кварц, стекловолокно, кремень или [[асбест|Asbestos]]. В основном используется в виде пластин (т.е. заготовок), которые [[прессуются|Burner Press]] с использованием штампа для схем, а затем превращаются в различные типы микросхем. Из-за необходимости в дуговой печи кремний доступен после получения [[полимера|Polymer]], что требует переработки [[нефти|Crude Oil]]." + "ru_RU": "Важный материал для производства интегральных схем и любой электроники, более сложной, чем аналоговые схемы. Производится в [[электродуговой печи|Electric Arc Furnace]] из материалов, содержащих диоксид кремния, таких как обычный песок, незер-кварц, стекловолокно, кремень или [[асбест|Asbestos]]. В основном используется в виде пластин (т.е. заготовок), которые [[прессуются|Burner Press]] с использованием штампа для схем, а затем превращаются в различные типы микросхем. Из-за необходимости в дуговой печи кремний доступен после получения [[полимера|Polymer]], что требует переработки [[нефти|Crude Oil]].", + "zh_CN": "生产集成电路以及其他比模拟电路更加复杂的电路的重要材料。可通过使用[[电弧炉|Electric Arc Furnace]]冶炼含二氧化硅的物品(如普通沙子、下界石英、玻璃纤维、燧石和[[石棉|Asbestos]])获取。主要的应用形式为在[[锻压机|Burner Press]]中经电路板锻模锻压的晶圆(即坯料),这些晶圆随后被用来制作多种微处理器。 因为其制作需要电弧炉,硅只能在获得[[聚合物|Polymer]]后制作,因此需要[[原油处理|Crude Oil]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/sodium.json b/src/main/resources/assets/hbm/manual/material/sodium.json index 0a42d0063..353a3e09b 100644 --- a/src/main/resources/assets/hbm/manual/material/sodium.json +++ b/src/main/resources/assets/hbm/manual/material/sodium.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant.", - "ru_RU": "В основном добывается из содалита, драгоценного камня, который является побочным продуктом [[центрифуги|Centrifuge]] при переработке многих руд. Используется в жидкой форме как мощный охладитель для [[ВВЭР|PWR]]." + "ru_RU": "В основном добывается из содалита, драгоценного камня, который является побочным продуктом [[центрифуги|Centrifuge]] при переработке многих руд. Используется в жидкой форме как мощный охладитель для [[ВВЭР|PWR]].", + "zh_CN": "主要通过方钠石获取,方钠石可作为多种矿石的[[离心|Centrifuge]]副产物获得。其液体形式可用作强力的[[PWR]]冷却剂。" } } diff --git a/src/main/resources/assets/hbm/manual/material/steel.json b/src/main/resources/assets/hbm/manual/material/steel.json index 1fcaba283..501adce8d 100644 --- a/src/main/resources/assets/hbm/manual/material/steel.json +++ b/src/main/resources/assets/hbm/manual/material/steel.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].", - "ru_RU": "Улучшенная версия железа, базовый материал. Используется почти во всем. Изначально получается путём комбинирования угля и железа в [[доменной печи|Blast Furnace]]. Улучшенные рецепты доступны позже через [[плавильню|Crucible]] и [[роторную печь|Rotary Furnace]]." + "ru_RU": "Улучшенная версия железа, базовый материал. Используется почти во всем. Изначально получается путём комбинирования угля и железа в [[доменной печи|Blast Furnace]]. Улучшенные рецепты доступны позже через [[плавильню|Crucible]] и [[роторную печь|Rotary Furnace]].", + "zh_CN": "铁的升级版,是一种基础金属,几乎所有东西都要用到钢。最初可通过在[[高炉|Blast Furnace]]中混合煤炭和铁获取,而之后也有通过[[坩埚|Crucible]]和[[回转炉|Rotary Furnace]]制作的高级配方。" } } diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index 6b758020d..e6ed22ab1 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", - "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных целей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в йеллоукейке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя." + "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных целей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в йеллоукейке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя.", + "zh_CN": "常见矿物,在下界的生成量更多。用于多种配方,例如制作[[硫酸|Sulfuric Acid]]和 [[橡胶|Rubber]],也用于制作黄饼,作为合成六氟化[[铀|Uranium]]的原料。 也可用于制作火药、火柴,以及用作黄色染料。" } } diff --git a/src/main/resources/assets/hbm/manual/material/tantalium.json b/src/main/resources/assets/hbm/manual/material/tantalium.json index 248b0414e..d57799c4f 100644 --- a/src/main/resources/assets/hbm/manual/material/tantalium.json +++ b/src/main/resources/assets/hbm/manual/material/tantalium.json @@ -5,10 +5,11 @@ "title": { "en_US": "Tantalium", "ru_RU": "Тантал", - "zh_CN": "钛" + "zh_CN": "钽" }, "content": { "en_US": "Tantalium ('Tantalum') can be extracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.", - "ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одном определенном регионе мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб." + "ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одном определенном регионе мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб.", + "zh_CN": "钽可从仅生成在特定区域的[[钶钽铁矿|Coltan]]中提取。 主要用于制作钽电容器,钽电容器可作为大多数核弹所需的控制单元的重要原料。" } } diff --git a/src/main/resources/assets/hbm/manual/material/technetium.json b/src/main/resources/assets/hbm/manual/material/technetium.json index c1228b425..b41775011 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium.json +++ b/src/main/resources/assets/hbm/manual/material/technetium.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.

Primarily used for [[technetium steel|Technetium Steel]].

Moderately radioactive.", - "ru_RU": "Синтетический металл, перерабатывается из топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых топлив [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.

В основном используется для [[технециевой стали|Technetium Steel]].

Умеренно радиоактивен." + "ru_RU": "Синтетический металл, перерабатывается из топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых топлив [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.

В основном используется для [[технециевой стали|Technetium Steel]].

Умеренно радиоактивен.", + "zh_CN": "人工合成的金属元素,初期可通过再处理[[锆诺克斯|ZIRNOX]]和[[PWR]]的枯竭燃料获取。也可通过回收某些[[RBMK]]燃料或使用高性能溶剂处理[[基岩矿石|Bedrock Ore]]获取。

主要用于制作[[锝钢|Technetium Steel]]。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/technetium_steel.json b/src/main/resources/assets/hbm/manual/material/technetium_steel.json index 13e14ae80..fe47be061 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/technetium_steel.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Alloy made from [[steel|Steel]] and [[technetium|Technetium]]. Corrosion resistant, used in stronger fluid tanks and many advanced machines. Obtainable after either a [[ZIRNOX]] or [[PWR]] due to technetium being synthetic.

Fully interchangeable with [[cadmium steel|Cadmium Steel]].", - "ru_RU": "Сплав из [[стали|Steel]] и [[технеция|Technetium]]. Устойчив к коррозии, используется в более прочных резервуарах для жидкостей и во многих продвинутых машинах. Доступен после [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]], так как технеций является синтетическим.

Полностью взаимозаменяем с [[кадмиевой сталью|Cadmium Steel]]." + "ru_RU": "Сплав из [[стали|Steel]] и [[технеция|Technetium]]. Устойчив к коррозии, используется в более прочных резервуарах для жидкостей и во многих продвинутых машинах. Доступен после [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]], так как технеций является синтетическим.

Полностью взаимозаменяем с [[кадмиевой сталью|Cadmium Steel]].", + "zh_CN": "[[钢|Steel]]和[[锝|Technetium]]的合金,耐腐蚀,用于制作强度更高的液体储罐和多种高级机器。 由于锝需要人工制造,因此只能在建造[[锆诺克斯|ZIRNOX]]或[[PWR]]之后获取。

和[[镉钢|Cadmium Steel]]完全通用。" } } diff --git a/src/main/resources/assets/hbm/manual/material/thorium.json b/src/main/resources/assets/hbm/manual/material/thorium.json index da6ff95c0..5f08db13a 100644 --- a/src/main/resources/assets/hbm/manual/material/thorium.json +++ b/src/main/resources/assets/hbm/manual/material/thorium.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.

Slightly radioactive.", - "ru_RU": "Фертильный (т.е. пригодный для размножения) изотоп, дающий [[уран-233|Uranium-233]]. Может быть облучен в [[РБМК|RBMK]] для производства [[ториевого топлива|Thorium Fuel]] или комбинирован с ураном-233. Топлива, производные от тория, обычно экономичны, но не очень мощные. Также используется в [[жидкой ториевой соли|Liquid Thorium Salt]], мощном охладителе [[ВВЭР|PWR]], превращающем его в реактор на расплавленных солях, который быстро производит большое количество урана-233.

Слабо радиоактивен." + "ru_RU": "Фертильный (т.е. пригодный для размножения) изотоп, дающий [[уран-233|Uranium-233]]. Может быть облучен в [[РБМК|RBMK]] для производства [[ториевого топлива|Thorium Fuel]] или комбинирован с ураном-233. Топлива, производные от тория, обычно экономичны, но не очень мощные. Также используется в [[жидкой ториевой соли|Liquid Thorium Salt]], мощном охладителе [[ВВЭР|PWR]], превращающем его в реактор на расплавленных солях, который быстро производит большое количество урана-233.

Слабо радиоактивен.", + "zh_CN": "可增殖的同位素,增殖后产生[[铀-233|Uranium-233]]。可通过在[[RBMK]]中辐照或与铀-233混合得到[[钍燃料|Thorium Fuel]]。 总体来讲,由钍衍生的燃料成本较低,但能量不高。 也可用于[[液态钍盐|Liquid Thorium Salt]],其可作为一种强力的[[PWR]]冷却剂(同时将反应堆变成熔盐堆),同时快速产生大量铀-233。

略有放射性。" } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-233.json b/src/main/resources/assets/hbm/manual/material/uranium-233.json index a87552a1d..7ad84b1a3 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-233.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-233.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].

Moderately radioactive.", - "ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путём переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащенное топливо урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].

Умеренно радиоактивен." + "ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путём переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащенное топливо урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].

Умеренно радиоактивен.", + "zh_CN": "人工制造的易裂变(即能够用于反应堆)的铀同位素,可通过再处理[[钍基燃料|Thorium Fuel]]获取。总体来讲,高浓缩度的铀-233较基于铀-235的燃料更加强力。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json index 3c6e4d4ae..b14bc19ae 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-235.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-235.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive.", - "ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенных урановых топлив. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен." + "ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенных урановых топлив. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен.", + "zh_CN": "浓缩的铀,容易裂变,可直接作为高浓缩度燃料用于某些反应堆,也可与[[铀-238|Uranium-238]]混合回中浓缩度的铀燃料。 也是一种武器级的同位素。最初可通过在四台串联的[[气体离心机|Gas Centrifuge]]中处理[[六氟化铀|Uranium Hexafluoride]]获取,之后也可直接在[[SILEX]]中 分离[[天然铀|Uranium]]获取。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json index 8f18b8df7..b54a373cf 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium.json +++ b/src/main/resources/assets/hbm/manual/material/uranium.json @@ -9,6 +9,7 @@ }, "content": { "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]", - "ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащен путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]" + "ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащен путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]", + "zh_CN": "天然铀,具有微弱放射性。本身不太容易裂变,但可通过将其变为[[六氟化铀|Uranium Hexafluoride]]并在[[气体离心机|Gas Centrifuge]]中处理以将其浓缩。[[锆诺克斯|ZIRNOX]],[[RBMK]]和[[芝加哥反应堆|Chigago Pile]]可直接将未浓缩铀用作燃料。

另见:
[[铀-233|Uranium-233]]
[[铀-235|Uranium-235]]
[[铀-238|Uranium-238]]" } } From ee1ffc98bae9d55f69daecca97733bf0613bafaf Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 21 Aug 2025 21:35:54 +0300 Subject: [PATCH 435/491] Make murky wings more controllable --- src/main/java/com/hbm/items/armor/WingsMurk.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/items/armor/WingsMurk.java b/src/main/java/com/hbm/items/armor/WingsMurk.java index daec63319..7906daf55 100644 --- a/src/main/java/com/hbm/items/armor/WingsMurk.java +++ b/src/main/java/com/hbm/items/armor/WingsMurk.java @@ -100,7 +100,7 @@ public class WingsMurk extends JetpackBase { Vec3 orig = player.getLookVec(); Vec3 look = Vec3.createVectorHelper(orig.xCoord, 0, orig.zCoord).normalize(); - double mod = player.isSneaking() ? 0.25D : 1D; + double mod = player.isSneaking() ? 0.25D : player.isSprinting() ? 1D : 0.5D; if(player.moveForward != 0) { player.motionX += look.xCoord * 0.35 * player.moveForward * mod; From 16824452b0b7f69635b7d288170b3059cca55f49 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 23 Aug 2025 19:33:08 +0300 Subject: [PATCH 436/491] Better fine control Shift already introduces a slowdown, no need to account for that --- src/main/java/com/hbm/items/armor/WingsMurk.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/items/armor/WingsMurk.java b/src/main/java/com/hbm/items/armor/WingsMurk.java index 7906daf55..f9e573683 100644 --- a/src/main/java/com/hbm/items/armor/WingsMurk.java +++ b/src/main/java/com/hbm/items/armor/WingsMurk.java @@ -100,7 +100,7 @@ public class WingsMurk extends JetpackBase { Vec3 orig = player.getLookVec(); Vec3 look = Vec3.createVectorHelper(orig.xCoord, 0, orig.zCoord).normalize(); - double mod = player.isSneaking() ? 0.25D : player.isSprinting() ? 1D : 0.5D; + double mod = player.isSprinting() ? 1D : 0.25D; if(player.moveForward != 0) { player.motionX += look.xCoord * 0.35 * player.moveForward * mod; From bdd56b6062d73c4f159e011b545ceef4240a7f22 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 19 Aug 2025 23:30:34 +0300 Subject: [PATCH 437/491] Remove murky wings forced slowfall --- src/main/java/com/hbm/items/armor/WingsMurk.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/items/armor/WingsMurk.java b/src/main/java/com/hbm/items/armor/WingsMurk.java index f9e573683..3828052cc 100644 --- a/src/main/java/com/hbm/items/armor/WingsMurk.java +++ b/src/main/java/com/hbm/items/armor/WingsMurk.java @@ -1,6 +1,7 @@ package com.hbm.items.armor; import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.ArmorModHandler; import com.hbm.items.ModItems; import com.hbm.main.ResourceManager; import com.hbm.render.model.ModelArmorWings; @@ -51,13 +52,12 @@ public class WingsMurk extends JetpackBase { if(player.fallDistance > 0) player.fallDistance = 0; - if(player.motionY < -0.4D) - player.motionY = -0.4D; - if(this == ModItems.wings_limp) { + + if(player.motionY < -0.4D) + player.motionY = -0.4D; - if(player.isSneaking()) { - + if(player.isSneaking()) { if(player.motionY < -0.08) { double mo = player.motionY * -0.2; From 0ac72afa97e58c7e4edad3201fcef56f633f33ab Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 19 Aug 2025 23:43:32 +0300 Subject: [PATCH 438/491] Make murky wings support shift+space for hovering --- .../java/com/hbm/items/armor/WingsMurk.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/items/armor/WingsMurk.java b/src/main/java/com/hbm/items/armor/WingsMurk.java index 3828052cc..e9e7a52a5 100644 --- a/src/main/java/com/hbm/items/armor/WingsMurk.java +++ b/src/main/java/com/hbm/items/armor/WingsMurk.java @@ -81,10 +81,26 @@ public class WingsMurk extends JetpackBase { if(props.isJetpackActive()) { - if(player.motionY < 0.6D) - player.motionY += 0.2D; - else - player.motionY = 0.8D; + if(player.isSneaking()) { + if(player.motionY < -1) + player.motionY += 0.4D; + else if(player.motionY < -0.1) + player.motionY += 0.2D; + else if(player.motionY < 0) + player.motionY = 0; + else if(player.motionY > 1) + player.motionY -= 0.4D; + else if(player.motionY > 0.1) + player.motionY -= 0.2D; + else if(player.motionY > 0) + player.motionY = 0; + + } else { + if(player.motionY < 0.6D) + player.motionY += 0.2D; + else + player.motionY = 0.8D; + } } else if(props.enableBackpack && !player.isSneaking()) { From 9e99a219691dad8ed1f766805b446ee75b8ae5ed Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 23 Aug 2025 19:36:45 +0300 Subject: [PATCH 439/491] Remove unused import --- src/main/java/com/hbm/items/armor/WingsMurk.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/hbm/items/armor/WingsMurk.java b/src/main/java/com/hbm/items/armor/WingsMurk.java index e9e7a52a5..c76c42fda 100644 --- a/src/main/java/com/hbm/items/armor/WingsMurk.java +++ b/src/main/java/com/hbm/items/armor/WingsMurk.java @@ -1,7 +1,6 @@ package com.hbm.items.armor; import com.hbm.extprop.HbmPlayerProps; -import com.hbm.handler.ArmorModHandler; import com.hbm.items.ModItems; import com.hbm.main.ResourceManager; import com.hbm.render.model.ModelArmorWings; From fb4bca354480b7544bec53cdd406b19f486e14f8 Mon Sep 17 00:00:00 2001 From: Bufka2011 <85364803+Bufka2011@users.noreply.github.com> Date: Sat, 23 Aug 2025 11:13:02 -0600 Subject: [PATCH 440/491] Add files via upload --- src/main/resources/assets/hbm/lang/ru_RU.lang | 410 +++++++++++------- 1 file changed, 247 insertions(+), 163 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index cf1ef26da..154e215fa 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -14,7 +14,7 @@ achievement.bossCreeper.desc='Здесь есть ядерные криперы? achievement.bossCreeper=Бомба на четырёх ногах achievement.bossMaskman.desc=Врезать большому мальчику. achievement.bossMeltdown.desc=Скорее ужасно, чем отлично, но я приму то, что могу получить. -achievement.bossMaskman=6 месяцев срочной службы, и всё что я получил это паршивая футболка +achievement.bossMaskman=6 месяцев срочной службы, и всё, что я получил, это паршивая футболка achievement.bossMeltdown=3.6 рентген achievement.bossWorm.desc=Просто маленький металический червь. achievement.bossWorm=Разборка Баллс-О-Трон @@ -148,7 +148,7 @@ armor.explosionImmune=Не может получить никакого урон armor.fasterReload=Быстрая перезарядка armor.fastFall=Быстрое падение armor.fireproof=Огнеупорность -armor.fullSetBonus=Бонусы Полного Набора брони: +armor.fullSetBonus=Бонусы полного набора брони: armor.geigerHUD=Встроенный HUD счётчика Гейгера armor.geigerSound=Звуковой Счётчик Гейгера armor.glider=Присесть, чтобы спланировать @@ -274,7 +274,7 @@ book.starter.cover=Руководство промышленника$по вос book.starter.title1=Вступление book.starter.page1=Если вы читаете это, то весьма вероятно, что общество, так или иначе, полностью рухнуло. Правительства, страны и власть - это концепция прошлого, вместе со всеми удобствами цивилизованной жизни. Таким образом, это руководство расскажет вам,как изменить это, воссоздав индустрию и технологии прошлого для улучшения вашей собственной жизни. book.starter.title2=Уголь и горчичный газ -book.starter.page2=Хотя невозможно предсказать фактическое состояние мира в постапокалиптическое время, вполне вероятно, что война и промышленность в её нынешнем виде, возможно, ещё не закончились. Чтобы защитить свои собственные лёгкие, эффективный и дешевый способ - помочиться на какую-нибудь тряпку, чтобы сделать §lтраншейную маску§r, чтобы защитить вас от угольной пыли или горчичного газа, если вы когда-нибудь столкнетесь с ними. +book.starter.page2=Хотя невозможно предсказать фактическое состояние мира в постапокалиптическое время, вполне вероятно, что война и промышленность в её нынешнем виде, возможно, ещё не закончились. Чтобы защитить свои собственные лёгкие, эффективный и дешёвый способ - помочиться на какую-нибудь тряпку, чтобы сделать §lтраншейную маску§r, чтобы защитить вас от угольной пыли или горчичного газа, если вы когда-нибудь столкнетесь с ними. book.starter.title3=Наковальни и прессы book.starter.page3=Квинтэссенцией для начала вашего промышленного возрождения являются §lнаковальня§r и §lпресс§r. Наковальня позволит вам вручную создавать ранние механизмы, такие как сборочная машина, в то время как пресс позволит вам изготавливать пластины, провода и схемы, которые вы не можете сделать с помощью наковальни. book.starter.title4=Шаблоны @@ -299,7 +299,7 @@ book.starter.title12=Радиация book.starter.page12a=§oОстальная часть этой книги будет посвящена вопросам, связанным с §oрадиацией. Для вашей безопасности и безопасности других людей я дам вам §oсоветы о том, как смягчить воздействие и справиться с ней. book.starter.page12b=Достаточное воздействие радиации может привести и приведет к телесным повреждениям. Первый шаг - это внешняя защита; обязательно ограничьте свое воздействие и наденьте защитное снаряжение, например §lЗащитный костюм§r, или прикрепить §lОбшивку§r к вашей одежде или броне; вы также можете принять §lРад-X§r чтобы ограничить получаемую дозу. Спасибо современной медицине, вторым шагом может быть удаление, если это необходимо; например, §l"Обеззараживатель §lигрока"§r будет медленно уменьшать излучение, поглощённое вашим телом. §lАнтирадин§r может быть использован как профилактика при облучении, быстро и эффективно устраняя повреждения, причиненные вашему организму ионизирующим излучением. book.starter.title13=Обогащение урана -book.starter.page13=Существует несколько простых вариантов топлива для ядерного реактора; например, топливо из §lПриродного урана§r или §lТория§r. Однако, если вы ищете что-то более мощное, вы можете настроить каскад обогащения из двух §lГазовых центрифуг§r для производства §lУранового топлива§r с остатками §lУрана-238§r. Для этого вам придется превратить природный уран в §lЙеллоукейк§r, а затем в §lГексафторид §lурана§r. +book.starter.page13=Существует несколько простых вариантов топлива для ядерного реактора; например, топливо из §lПриродного урана§r или §lТория§r. Однако, если вы ищете что-то более мощное, вы можете настроить каскад обогащения из двух §lГазовых центрифуг§r для производства §lУранового топлива§r с остатками §lУрана-238§r. Для этого вам придется превратить природный уран в §lжёлтый кек§r, а затем в §lГексафторид §lурана§r. book.starter.title14=Чикагская поленница book.starter.page14=В качестве альтернативы вы можете получить §lРеакторный плутоний§r, более мощное топливо, из природного урана, используя §lЧикагскую поленницу§r. Укладывая графитовые блоки и сверля их, вы можете вставить топливные стержни для размножения в плутоний и стержни источников нейтронов, такие как §lРадий-Бериллий§r, чтобы начать реакцию. Обязательно протестируйте свои конструкции; для предотвращения перегрева может потребоваться разделение или ограничение количества блоков. book.starter.title15=ЦИРНОКС РГО @@ -355,7 +355,7 @@ book_lore.book_iodine.name=Заметка book_lore.book_iodine.author=Дейв book_lore.book_iodine.page.0=Лады, вы не поверите, но старик Везэрвэйн наконец объявился через две недели после своего ухода и, что ещё более впечатляюще, он раскололся на тему своих занятий в каньоне: book_lore.book_iodine.page.1=Похоже, дебилы из НИОКР обнаружили соединение, в основном неорганическое, очень схожее с токсином, но вникните: умирающие клетки воспроизводят и выделяют его во внешнюю среду, создавая чрезвычайно заразный аэрозоль. -book_lore.book_iodine.page.2=Оно как вирус, но не вирус. Состав странный, его можно замешать в любой бутылке, но лишь в нужном порядке. Док сказал, что первый реактив это просто измельченные кристаллы иода, идущие в ячейку %d. +book_lore.book_iodine.page.2=Оно как вирус, но не вирус. Состав странный, его можно замешать в любой бутылке, но лишь в нужном порядке. Док сказал, что первый реактив это просто измельчённые кристаллы иода, идущие в ячейку %d. book_lore.book_phosphorous.name=Заметка book_lore.book_phosphorous.author=Дейв @@ -447,7 +447,7 @@ book_lore.bf_bomb_5.page.0=Я просто... не могу с этим спра book_lore.bf_bomb_5.page.1=Мы только что получили ещё одну порцию чистого жар-огня, а он нашел необходимое электрооборудование и источник энергии, чтобы проверить свое предположение. Я не знаю, что стало причиной (было ли запущено оборудование? Он начал слишком рано?), но оно свершилось мучительно медленно, book_lore.bf_bomb_5.page.2=когда зелёный свет поглотил стол, батарею и доктора Мелфина, стоящего всего в метре от него. Даже когда стол превратился в лужу кипящего металла на полу, он не загорелся. Я не знаю, что я увидел в его глазах... $$ Ужас или трепет, book_lore.bf_bomb_5.page.3=может из-за того, что он ещё жив? Чем бы ни был наш "чудо" материал, его это не волновало. В следующий момент он исчез в яркой вспышке света. Он испарился? сгорел? аннигилирован? Отошлите меня хоть в грёбаный ад, я больше ничего не знаю! -book_lore.bf_bomb_5.page.4=Меня тошнит от главного исследователя. Он звиздел, что мы могли бы быть более осторожными, продолжать просто кружить вокруг, какую-то ещё подымающую мораль чепуху. Этот тупой урод никогда не поймет, что играя с огнем, можно обжечься. $ Я не стал заморачиваться с +book_lore.bf_bomb_5.page.4=Меня тошнит от главного исследователя. Он звиздел, что мы могли бы быть более осторожными, продолжать просто кружить вокруг, какую-то ещё подымающую мораль чепуху. Этот тупой урод никогда не поймет, что, играя с огнем, можно обжечься. $ Я не стал заморачиваться с book_lore.bf_bomb_5.page.5=увольнением, просто забрал свои шмотки и побежал к холмам. В любом случае, неважно; учитывая отсутствие звонков и грибовидное облако, поднявшееся над моим (теперь уже бывшим) местом работы, они взорвали всё либо перешли в полное распоряжение военных. book_lore.bf_bomb_5.page.6=Есть важное различие между диссекцией и ВИВИСЕКЦИЕЙ, что они явно упустили из виду. Они могут рассекать металлы или атомы сколько угодно, но вторгаться внутрь, вивисекцировать саму реальность – это значит лишь порождать новых докторов Мелфинов. Кто знает! book_lore.bf_bomb_5.page.7=В конце-концов, правительство стремится превратить эту херню в бомбы, может, мы увидим ещё пару войн, ещё пару миллионов людей, встретивших судьбу хуже смерти. Они не могут прятать это вечно. $ $ Меня это не волнует. Теперь не волнует. Боже, пожалуйста, позволь мне вернуться @@ -584,7 +584,7 @@ chem.ethanol=Этанол chem.biogas=Биогаз chem.biofuel=Переэтерификация биотоплива chem.reoil=Регенерированное масло -chem.gasoline=Бензин +chem.gasoline=Газолин chem.tarsand=Битум из битумозного песка chem.meatprocessing=Переработка мяса глифидов chem.birkeland=Азотная кислота из воздуха @@ -630,7 +630,7 @@ chem.FC_DIESEL_KEROSENE=Крекинг дизеля chem.FC_GAS_PETROLEUM=Крекинг попутного газа chem.FC_I_NAPHTHA=Крекинг промышленного масла chem.FC_KEROSENE_PETROLEUM=Крекинг керосина -chem.FP_HEAVYOIL=Переработка тяжелой нефти +chem.FP_HEAVYOIL=Переработка тяжёлой нефти chem.FP_LIGHTOIL=Переработка лёгкой нефти chem.FP_NAPHTHA=Переработка нафты chem.FP_SMEAR=Переработка промышленного масла @@ -696,7 +696,7 @@ chem.VIT_GAS=Остекловывание газообразных ядерны chem.VIT_LIQUID=Остекловывание жидких ядерных отходов chem.XENON=Ксеноновый цикл Линде chem.XENON_OXY=Улучшенный ксеноновый цикл Линде -chem.YELLOWCAKE=Производство йеллоукейка +chem.YELLOWCAKE=Производство жёлтого кека commands.satellite.no_active_satellites=Нет активных спутников! commands.satellite.no_satellite=Спутник не найден! @@ -770,7 +770,7 @@ container.generator=Ядерный реактор container.hadron=Ускоритель частиц container.heaterFirebox=Топка container.heaterHeatex=Теплообменник -container.heaterOilburner=Жидкостный бойлер +container.heaterOilburner=Жидкостный котёл container.heaterOven=Нагревательная печь container.hydrotreater=Гидроочиститель container.iGenerator=Промышленный генератор @@ -849,7 +849,7 @@ container.pumpjack=Станок-качалка container.radGen=Радиационный двигатель container.radar=Радар container.radiobox=FM передатчик -container.radiolysis=РИТЭГ и Камера Радиолиза +container.radiolysis=РИТЭГ и камера радиолиза container.radiorec=FM радио container.rbmkAutoloader=Автозагрузчик стержней РБМК container.rbmkBoiler=Паровой канал РБМК @@ -910,7 +910,7 @@ copytool.invertFilter=Инвертированный фильтр copytool.orientation=Ориентация copytool.pattern0=Красная сторона copytool.pattern1=Оранжевая сторона -copytool.pattern2=Желтая сторона +copytool.pattern2=Жёлтая сторона copytool.pattern3=Зелёная сторона copytool.pattern4=Синяя сторона copytool.pattern5=Фиолетовая сторона @@ -923,7 +923,7 @@ crucible.cdalloy=Производство кадмиевой стали crucible.cmb=Производство стали Альянса crucible.ferro=Производство ферроуранового сплава crucible.hematite=Переплавка гематита в железо -crucible.hss=Производство высокоскоростной стали +crucible.hss=Производство быстрорежущей стали crucible.malachite=Переплавка малахита в медь crucible.magtung=Производство намагниченного вольфрама crucible.redcopper=Производство красной меди @@ -952,7 +952,7 @@ death.attack.amsCore=%1$s испарился в огне сингулярнос death.attack.asbestos=%1$s теперь имеет право на финансовую компенсацию. death.attack.bang=%1$s превратился в рагу. death.attack.blackhole=%1$s превратился в спагетти. -death.attack.blacklung=%1$s умер от болезни черных лёгких. +death.attack.blacklung=%1$s умер от болезни чёрных лёгких. death.attack.blender=%1$s стал фаршем. death.attack.boat=%1$s был пришиблен лодкой. death.attack.boil=%1$s был заживо сварен %2$s. @@ -1473,6 +1473,7 @@ hbmfluid.coalgas=Угольный газ hbmfluid.coalgas_leaded=Этилированный угольный газ hbmfluid.coaloil=Фотоген hbmfluid.colloid=Коллоидный раствор +hbmfluid.concrete=Жидкий бетон hbmfluid.coolant=Хладагент hbmfluid.coolant_hot=Горячий хладагент hbmfluid.crackoil=Крекированная нефть @@ -1497,7 +1498,7 @@ hbmfluid.gasoline=Газолин hbmfluid.gasoline_leaded=Этилированный газолин hbmfluid.heatingoil=Мазут hbmfluid.heatingoil_vacuum=Тяжёлый мазут -hbmfluid.heavyoil=Тяжелая нефть +hbmfluid.heavyoil=Тяжёлая нефть hbmfluid.heavyoil_vacuum=Вакуумная тяжёлая нефть hbmfluid.heavywater=Тяжёлая вода hbmfluid.heavywater_hot=Горячая тяжёлая вода @@ -1540,9 +1541,9 @@ hbmfluid.oil_ds=Десульфуризованная неочищенная не hbmfluid.oxygen=Жидкий кислород hbmfluid.oxyhydrogen=Гремучий газ hbmfluid.pain=Пандемониум(III)Раствор танталита -hbmfluid.perfluoromethyl=Перфторометил -hbmfluid.perfluoromethyl_cold=Холодный перфторометил -hbmfluid.perfluoromethyl_hot=Горячий перфторометил +hbmfluid.perfluoromethyl=Перфторометан +hbmfluid.perfluoromethyl_cold=Холодный перфторометан +hbmfluid.perfluoromethyl_hot=Горячий перфторометан hbmfluid.peroxide=Пероксид водорода hbmfluid.petroil=Бензин hbmfluid.petroil_leaded=Этилированный бензин @@ -1585,7 +1586,7 @@ hbmfluid.sunfloweroil=Подсолнечное масло hbmfluid.superhotsteam=Перегретый пар hbmfluid.syngas=Синтгаз hbmfluid.thorium_salt=Жидкая ториевая соль -hbmfluid.thorium_salt_depleted=Обедненная жидкая ториевая соль +hbmfluid.thorium_salt_depleted=Обеднённая жидкая ториевая соль hbmfluid.thorium_salt_hot=Горячая жидкая ториевая соль hbmfluid.tritium=Тритий hbmfluid.uf6=Гексафторид урана @@ -1645,7 +1646,7 @@ hbmmat.cryolite=Криолит hbmmat.desh=Деш hbmmat.diamond=Алмаз hbmmat.dineutronium=Динейтроний -hbmmat.durasteel=Высокоскоростная сталь +hbmmat.durasteel=Быстрорежущая сталь hbmmat.emerald=Изумруд hbmmat.euphemium=Эвфемий hbmmat.ferrouranium=Ферроуран @@ -1659,7 +1660,7 @@ hbmmat.graphene=Графен hbmmat.graphite=Графит hbmmat.gunmetal=Пушечная бронза hbmmat.hematite=Гематит -hbmmat.iron=Железа +hbmmat.iron=Железо hbmmat.lanthanum=Лантан hbmmat.lapis=Лазурит hbmmat.lead=Свинец @@ -1983,9 +1984,9 @@ item.ammo_standard.bmg50_fmj.name=.50 BMG патрон (Цельнометалл item.ammo_standard.bmg50_sm.name=.50 BMG патрон (Звёздный Металл) item.ammo_standard.bmg50_jhp.name=.50 BMG патрон (Экспансивный+) item.ammo_standard.bmg50_sp.name=.50 BMG патрон (Экспансивный) -item.ammo_standard.capacitor.name=Конденсатор (Стандартный) -item.ammo_standard.capacitor_ir.name=Конденсатор (Низкая длина волны) -item.ammo_standard.capacitor_overcharge.name=Конденсатор (Перезаряженный) +item.ammo_standard.capacitor.name=Оружейный конденсатор (Стандартный) +item.ammo_standard.capacitor_ir.name=Оружейный конденсатор (Коротковолновой) +item.ammo_standard.capacitor_overcharge.name=Оружейный конденсатор (Перегруженный) item.ammo_standard.coil_ferrouranium.name=Ферроураниевый шарик гаусс-пушки item.ammo_standard.coil_tungsten.name=Вольфрамовый шарик гаусс-пушки item.ammo_standard.ct_hook.name=Крюк-кошка @@ -2105,16 +2106,16 @@ item.ams_muzzle.desc=...он испускает штуковину с энерг item.analysis_tool.name=Анализатор item.analyzer.name=Анализатор item.anchor_remote.name=Устройство вызова -item.apple_euphemium.name=Эвфемиевое Яблоко +item.apple_euphemium.name=Эвфемиевое яблоко item.apple_lead.name=Свинцовое яблоко -item.apple_schrabidium.name=Шрабидиевое Яблоко +item.apple_schrabidium.name=Шрабидиевое яблоко item.arc_electrode.name=Графитовый электрод item.arc_electrode.desh.name=Деш-электрод item.arc_electrode.graphite.name=Графитовый электрод item.arc_electrode.lanthanium.name=Лантановый электрод item.arc_electrode.saturnite.name=Сатурнитовый электрод item.arc_electrode_burnt.name=Расплавленный электрод -item.arc_electrode_burnt.desh.name=Расплавленный Деш-электрод +item.arc_electrode_burnt.desh.name=Расплавленный деш-электрод item.arc_electrode_burnt.graphite.name=Расплавленный графитовый электрод item.arc_electrode_burnt.lanthanium.name=Расплавленный лантановый электрод item.arc_electrode_burnt.saturnite.name=Расплавленный сатурнитовый электрод @@ -2198,8 +2199,8 @@ item.battery_spark.name=Спарк-батарея item.battery_spark_cell_100.name=Спарк-Магический массив хранения энергии item.battery_spark_cell_1000.name=Спарк-Магическая масс-энергетическая пустота item.battery_spark_cell_10000.name=Устойчивый пространственно-временной спарк-кристалл -item.battery_spark_cell_25.name=Спарк-Магический аккумулятор -item.battery_spark_cell_2500.name=Спарк-Магическое море Дирака +item.battery_spark_cell_25.name=Спарк-магический аккумулятор +item.battery_spark_cell_2500.name=Спарк-магическое море Дирака item.battery_spark_cell_6.name=Спарк-энергоячейка item.battery_spark_cell_power.name=Абсурдный физический спарк-блок накопления энергии item.battery_steam.name=Паровой бак для хранения энергии @@ -2209,13 +2210,13 @@ item.battery_su_l.name=Большая одноразовая батарейка item.battery_trixite.name=Безымянная спарк-батарея item.bdcl.name=BDCL item.bedrock_ore.grade.base.name=Бедроковая руда (%s) -item.bedrock_ore.grade.base_roasted.name=Обожженная бедроковая руда (%s) +item.bedrock_ore.grade.base_roasted.name=Обожжённая бедроковая руда (%s) item.bedrock_ore.grade.base_washed.name=Промытая бедроковая руда (%s) item.bedrock_ore.grade.primary.name=Бедроковая руда (%s), первичная фракция -item.bedrock_ore.grade.primary_roasted.name=Бедроковая руда (%s), обожженная первичная фракция +item.bedrock_ore.grade.primary_roasted.name=Бедроковая руда (%s), обожжённая первичная фракция item.bedrock_ore.grade.primary_sulfuric.name=Бедроковая руда (%s), серная первичная фракция item.bedrock_ore.grade.primary_nosulfuric.name=Бедроковая руда (%s), отделённая серная первичная фракция -item.bedrock_ore.grade.primary_solvent.name=Бедроковая руда (%s), растворенная первичная фракция +item.bedrock_ore.grade.primary_solvent.name=Бедроковая руда (%s), растворённая первичная фракция item.bedrock_ore.grade.primary_nosolvent.name=Бедроковая руда (%s), отделённая растворенная первичная фракция item.bedrock_ore.grade.primary_rad.name=Бедроковая руда (%s), очищенная первичная фракция item.bedrock_ore.grade.primary_norad.name=Бедроковая руда (%s), отделённая очищенная первичная фракция @@ -2223,15 +2224,15 @@ item.bedrock_ore.grade.primary_first.name=Бедроковая руда (%s), п item.bedrock_ore.grade.primary_second.name=Бедроковая руда (%s), первичная фракция, малый вес item.bedrock_ore.grade.crumbs.name=Куски бедроковой руды (%s) item.bedrock_ore.grade.sulfuric_byproduct.name=Бедроковая руда (%s), серная побочка -item.bedrock_ore.grade.sulfuric_roasted.name=Бедроковая руда (%s), обожженная серная побочка +item.bedrock_ore.grade.sulfuric_roasted.name=Бедроковая руда (%s), обожжённая серная побочка item.bedrock_ore.grade.sulfuric_arc.name=Бедроковая руда (%s), переплавленная серная побочка item.bedrock_ore.grade.sulfuric_washed.name=Бедроковая руда (%s), промытая серная побочка -item.bedrock_ore.grade.solvent_byproduct.name=Бедроковая руда (%s), растворенная побочка -item.bedrock_ore.grade.solvent_roasted.name=Бедроковая руда (%s), обожженная растворенная побочка +item.bedrock_ore.grade.solvent_byproduct.name=Бедроковая руда (%s), растворённая побочка +item.bedrock_ore.grade.solvent_roasted.name=Бедроковая руда (%s), обожжённая растворенная побочка item.bedrock_ore.grade.solvent_arc.name=Бедроковая руда (%s), переплавленная растворенная побочка item.bedrock_ore.grade.solvent_washed.name=Бедроковая руда (%s), промытая растворенная побочка item.bedrock_ore.grade.rad_byproduct.name=Бедроковая руда (%s), очищенная побочка -item.bedrock_ore.grade.rad_roasted.name=Бедроковая руда (%s), обожженная очищенная побочка +item.bedrock_ore.grade.rad_roasted.name=Бедроковая руда (%s), обожжённая очищенная побочка item.bedrock_ore.grade.rad_arc.name=Бедроковая руда (%s), переплавленная очищенная побочка item.bedrock_ore.grade.rad_washed.name=Бедроковая руда (%s), промытая очищенная побочка item.bedrock_ore.trait.arc=§6Дуговая плавка @@ -2243,7 +2244,7 @@ item.bedrock_ore.trait.sulfuric=§6Обработанный серной кис item.bedrock_ore.trait.washed=§bПромытый в окислителе водой item.bedrock_ore.type.actinide.name=Актинидная item.bedrock_ore.type.crystal.name=Кристаллическая -item.bedrock_ore.type.heavy.name=Тяжелая металлическая +item.bedrock_ore.type.heavy.name=Тяжёлая металлическая item.bedrock_ore.type.light.name=Лёгкая металлическая item.bedrock_ore.type.nonmetal.name=Неметаллическая item.bedrock_ore.type.rare.name=Редкоземельная @@ -2266,7 +2267,7 @@ item.billet_bismuth.name=Заготовка висмута item.billet_co60.name=Заготовка кобальта-60 item.billet_cobalt.name=Заготовка кобальта item.billet_flashlead.name=Заготовка флэшлида -item.billet_flashlead.desc=Решетка распадается, вызывая реакции аннигиляции антивещества и материи, вызывая высвобождение$пионов, распадающихся на мюоны, катализирующих слияние$ядер, создавая новый элемент.$Пожалуйста, постарайся не отставать. +item.billet_flashlead.desc=Решётка распадается, вызывая реакции аннигиляции антивещества и материи, вызывая высвобождение$пионов, распадающихся на мюоны, катализирующих слияние$ядер, создавая новый элемент.$Пожалуйста, постарайся не отставать. item.billet_gh336.name=Заготовка гиорсия-336 item.billet_gh336.desc=Коллега Сиборгиума. item.billet_hes.name=Заготовка высокообогащённого шрабидиевого топлива @@ -2277,18 +2278,18 @@ item.billet_neptunium.name=Заготовка нептуния item.billet_neptunium_fuel.name=Заготовка нептуниевого топлива item.billet_nuclear_waste.name=Заготовка ядерных отходов item.billet_pb209.name=Заготовка свинца-209 -item.billet_po210be.name=Заготовка Полоний-210-Бериллия +item.billet_po210be.name=Заготовка полоний-210-бериллия item.billet_polonium.name=Заготовка полония-210 item.billet_pu_mix.name=Заготовка плутония реакторного качества item.billet_pu238.name=Заготовка плутония-238 -item.billet_pu238be.name=Заготовка Плутоний-210-Бериллия +item.billet_pu238be.name=Заготовка плутоний-238-бериллия item.billet_pu239.name=Заготовка плутония-239 item.billet_pu240.name=Заготовка плутония-240 item.billet_pu241.name=Заготовка плутония-241 item.billet_plutonium.name=Заготовка плутония item.billet_plutonium_fuel.name=Заготовка плутониевого топлива item.billet_ra226.name=Заготовка радия-226 -item.billet_ra226be.name=Заготовка Радий-226-Бериллия +item.billet_ra226be.name=Заготовка радий-226-бериллия item.billet_schrabidium.name=Заготовка шрабидия item.billet_schrabidium_fuel.name=Заготовка шрабидиевого топлива item.billet_silicon.name=Кремниевая пластина @@ -2342,7 +2343,7 @@ item.bobmazon_materials.name=Бобмазон: Материалы item.bobmazon_tools.name=Бобмазон: Предметы item.bobmazon_weapons.name=Бобмазон: Оружие и взрывчатка item.boltntm.name=Стержень (%s) -item.bolt_compound.name=Укрепленный вал турбины +item.bolt_compound.name=Укреплённый вал турбины item.bolt_spike.name=Железнодорожный гвоздь item.bolt_spike.desc=Излучает угрожающую ауру, как-то item.boltgun.name=Пневматический заклепочник @@ -2388,7 +2389,7 @@ item.can_breen.name=Личный резерв др.Брина item.can_creature.name=Энергетический напиток "Существо" item.can_empty.name=Пустая банка item.can_key.name=Винтовой ключ -item.can_luna.name=Черная Меза Луна - Темная Кола +item.can_luna.name=Чёрная меза луна - Тёмная кола item.can_mrsugar.name=Безалкогольный напиток 'Доктор Сахар' item.can_mug.name=MUG Root Beer item.can_overcharge.name=Перезарядка Delirium XT @@ -2407,7 +2408,7 @@ item.canister_full.name=Канистра: item.canister_gasoline.name=Канистра с этилированным бензином (LEGACY) item.canister_gasoline.desc=свинец - это друг$впусти друга в свой кровоток$*достаёт пистолет* живо. item.canister_heatingoil.name=Канистра с мазутом (LEGACY) -item.canister_heavyoil.name=Канистра с тяжелой нефтью (LEGACY) +item.canister_heavyoil.name=Канистра с тяжёлой нефтью (LEGACY) item.canister_kerosene.name=Канистра с керосином (LEGACY) item.canister_lightoil.name=Канистра с лёгкой нефтью (LEGACY) item.canister_napalm.name=Напалм Б @@ -2424,7 +2425,7 @@ item.canned_bark.name=Консервы вяленой сосновой коры item.canned_bark.desc=Очень хрустящие! item.canned_beef.name=Консервированная говядина item.canned_beef.desc=Несколько веков назад для этого умерла корова. -item.canned_bhole.name=Консервированная черная дыра +item.canned_bhole.name=Консервированная чёрная дыра item.canned_bhole.desc=Сингулярность это ням ням в моём там там item.canned_cheese.name=Консервированный плавленый сыр item.canned_cheese.desc=Это сыр? Это резиновый цемент? Кто знает. Кого волнует. @@ -2528,7 +2529,7 @@ item.centrifuge_tower.name=Башня центрифуги item.chainsaw.name=Бензопила item.cheese.name=Сыр item.cheese_quesadilla.name=Сырная кесадилья -item.chemical_dye.black.name=Химический краситель (Черный) +item.chemical_dye.black.name=Химический краситель (Чёрный) item.chemical_dye.blue.name=Химический краситель (Синий) item.chemical_dye.brown.name=Химический краситель (Коричневый) item.chemical_dye.cyan.name=Химический краситель (Голубой) @@ -2555,12 +2556,12 @@ item.chocolate.name=Фирменный радиевый шоколад item.chocolate.desc=Радиевый шоколад? Почти уверен, что это просто мет. item.chocolate_milk.name=Шоколадное молоко item.chopper.name=Вертолёт-охотник -item.chopper_blades.name=Лопасти Вертолёта-охотника +item.chopper_blades.name=Лопасти вертолёта-охотника item.chopper_gun.name=Огневая установка -item.chopper_head.name=Кабина Вертолета-охотника -item.chopper_tail.name=Хвост Вертолёта-охотника -item.chopper_torso.name=Корпус Вертолёта-охотника -item.chopper_wing.name=Крыло Вертолета-охотника +item.chopper_head.name=Кабина вертолёта-охотника +item.chopper_tail.name=Хвост вертолёта-охотника +item.chopper_torso.name=Корпус вертолёта-охотника +item.chopper_wing.name=Крыло вертолёта-охотника item.chunk_ore.malachite.name=Кусок малахита item.chunk_ore.rare.name=Кусок редкоземельной руды item.chunk_ore.moonstone.name=Лунный камень @@ -2730,7 +2731,7 @@ item.cordite.name=Кордит item.cotton_candy.name=Радиоактивная сахарная вата item.crackpipe.name=Оздоровительная трубка item.crate_caller.name=Запросчик поставки припасов -item.crayon.black.name=Черный мелок +item.crayon.black.name=Чёрный мелок item.crayon.blue.name=Синий мелок item.crayon.brown.name=Коричневый мелок item.crayon.cyan.name=Голубой мелок @@ -2853,8 +2854,8 @@ item.drillbit_desh.name=Деш-головка бура item.drillbit_desh_diamond.name=Деш-головка бура (с алмазным напылением) item.drillbit_ferro.name=Головка бура из ферроурана item.drillbit_ferro_diamond.name=Головка бура из ферроурана (с алмазным напылением) -item.drillbit_hss.name=Головка бура из высокоскоростной стали -item.drillbit_hss_diamond.name=Головка бура из высокоскоростной стали (с алмазным напылением) +item.drillbit_hss.name=Головка бура из быстрорежущей стали +item.drillbit_hss_diamond.name=Головка бура из быстрорежущей стали (с алмазным напылением) item.drillbit_steel.name=Головка бура из стали item.drillbit_steel_diamond.name=Головка бура из стали (с алмазным напылением) item.drillbit_tcalloy.name=Головка бура из технециевой стали @@ -2922,10 +2923,10 @@ item.fau_helmet.name=Фау-шлем item.fau_legs.name=Фау-поножи item.fau_plate.name=Фау-нагрудник item.filter_coal.name=Фильтр с активированным углём -item.fins_big_steel.name=Большие стальные ребра решетки +item.fins_big_steel.name=Большие стальные ребра решётки item.fins_flat.name=Плоский стальной кожух item.fins_quad_titanium.name=Маленькие титановые ребра -item.fins_small_steel.name=Малые стальные ребра решетки +item.fins_small_steel.name=Малые стальные ребра решётки item.fins_tri_steel.name=Большие стальные ребра item.five_htp.name=Таблетки энтерамина item.five_htp.desc=Убирает все DRX, Стабильность на 10 минут @@ -2936,7 +2937,7 @@ item.flame_opinion.desc=Что ж, мне это нравится... item.flame_politics.name=Политическая тема item.flame_politics.desc=Дональд Дак построит стену! item.flame_pony.name=Картинка цветной лошади -item.flame_pony.desc=Желтая лошадь побеждает синюю лошадь, это доказанный факт! +item.flame_pony.desc=Жёлтая лошадь побеждает синюю лошадь, это доказанный факт! item.flask_infusion.shield.name=Эликсир защиты item.fleija_core.name=Заряд Ф.Л.Е.И из урана 235 item.fleija_igniter.name=Импульсный воспламенитель @@ -3022,7 +3023,7 @@ item.gem_volcanic.name=Вулканический самоцвет item.generator_front.name=Перед генератора item.generator_steel.name=Корпус генератора item.glitch.name=Глюк -item.glowing_stew.name=Тушеные светящиеся грибы +item.glowing_stew.name=Тушёные светящиеся грибы item.glyphid_meat.name=Мясо глифидов item.glyphid_meat_grilled.name=Жареное мясо глифидов item.goggles.name=Защитные очки @@ -3249,7 +3250,7 @@ item.gun_uzi_saturnite.name=Сатурнитовый Узи item.gun_uzi_saturnite_silencer.name=Сатурнитовый Узи с глушителем item.gun_uzi_silencer.name=IMI Узи с глушителем item.gun_xvl1456.name=Прототип Тау-пушки XVL1456 -item.gun_xvl1456_ammo.name=Ящик с Обедненным Ураном-235 +item.gun_xvl1456_ammo.name=Ящик с обеднённым ураном-235 item.gun_zomg.name=ZOMG-пушка item.hand_drill.name=Ручная дрель item.hand_drill_desh.name=Ручная дрель из деша @@ -3295,7 +3296,7 @@ item.hull_small_aluminium.name=Небольшая алюминиевая обо item.hull_small_aluminium.desc=Может быть вставлен в просверленный графит item.hull_small_steel.name=Небольшая стальная оболочка item.icf_pellet.name=Топливная пеллета ICF -item.icf_pellet_depleted.name=Обедненная топливная пеллета ICF +item.icf_pellet_depleted.name=Обеднённая топливная пеллета ICF item.icf_pellet_empty.name=Пустая топливная пеллета ICF item.igniter.name=Зажигатель item.igniter.desc=(Щёлкните правой кнопкой мыши по Прототипу)$Это зелёная металлическая ручка с $ярко-красной кнопкой и маленькой крышкой.$Внизу выгравированы инициалы N.E.$. Кем бы ни был N.E., у него был отличный вкус в оттенках зелёного. @@ -3343,13 +3344,13 @@ item.ingot_copper.name=Слиток промышленной меди item.ingot_daffergon.name=Даффергоновый слиток item.ingot_desh.name=Слиток деш item.ingot_dineutronium.name=Динейтрониевый слиток -item.ingot_dura_steel.name=Слиток высокоскоростной стали +item.ingot_dura_steel.name=Слиток быстрорежущей стали item.ingot_electronium.name=Электрониевый слиток item.ingot_euphemium.name=Эвфемиевый слиток item.ingot_euphemium.desc=Совершенно особый и в то же время странный элемент. item.ingot_ferrouranium.name=Ферроураниевый слиток item.ingot_fiberglass.name=Стекловолокно -item.ingot_fiberglass.desc=С высоким содержанием волокна, с высоким содержанием стекла. Все, что нужно организму. +item.ingot_fiberglass.desc=С высоким содержанием волокна, с высоким содержанием стекла. Всё, что необходимо организму. item.ingot_firebrick.name=Шамотный кирпич item.ingot_gh336.name=Слиток гиорсия-336 item.ingot_gh336.desc=Коллега Сиборгиума. @@ -3452,7 +3453,7 @@ item.item_expensive.bronze_tubes.name=Бронзовые конструкцио item.item_expensive.circuit.name=Обширная печатная плата item.item_expensive.computer.name=Мейнфрейм item.item_expensive.ferro_plating.name=Армированные ферроураниевые панели -item.item_expensive.heavy_frame.name=Тяжелый каркас +item.item_expensive.heavy_frame.name=Тяжёлый каркас item.item_expensive.lead_plating.name=Радиационно-стойкое покрытие item.item_expensive.steel_plating.name=Стальная обшивка с болтовым соединением item.item_secret.aberrator.name=Часть Аберратора @@ -3514,9 +3515,9 @@ item.lithium.name=Куб лития item.lodestone.name=Магнетит item.loop_stew.name=Завтрак IT-шника item.loops.name=Пəтли -item.loot_10.name=Ящик с запчастями от Ракеты 10-го размера -item.loot_15.name=Ящик с запчастями от Ракеты 15-го размера -item.loot_misc.name=Общий ящик с запчастями от Ракеты +item.loot_10.name=Ящик с запчастями от ракеты 10-го размера +item.loot_15.name=Ящик с запчастями от ракеты 15-го размера +item.loot_misc.name=Общий ящик с запчастями от ракеты item.magnet_circular.name=Плоский магнит item.magnet_dee.name=Ди-магниты item.magnetron.name=Магнетрон @@ -3572,7 +3573,7 @@ item.mirror_tool.linked=Позиция выравнивания установл item.mirror_tool.desc=Щелкните правой кнопкой мыши по бойлеру, чтобы запомнить его положение.$Нажмите на зеркала, чтобы повернуть их в сторону бойлера item.missile_anti_ballistic.name=Антибаллистическая ракета item.missile_assembly.name=Сборка малой ракеты -item.missile_bhole.name=Ракета "Черная Дыра" +item.missile_bhole.name=Ракета "Чёрная Дыра" item.missile_burst.name=Запасная ракета item.missile_buster.name=Противобункерная ракета item.missile_buster_strong.name=Улучшенная противобункерная ракета @@ -3912,7 +3913,7 @@ item.paa_boots.name="Старые добрые ботинки" из PaA item.paa_legs.name=Укреплённые поножи из PaA item.paa_plate.name=Защищающая грудная пластина из PaA item.padlock.name=Замок -item.padlock_reinforced.name=Защищенный замок +item.padlock_reinforced.name=Защищённый замок item.padlock_rusty.name=Ржавый замок item.padlock_unbreakable.name=Несокрушимый замок item.pads_rubber.name=Резиновые прокладки @@ -3993,7 +3994,7 @@ item.pellet_rtg_actinium.desc=Сияние голубого света и бет item.pellet_rtg_americium.name=РИТЭГ-пеллета из америция-241 item.pellet_rtg_americium.desc=Редкий и надежный, старый добрый Америций! item.pellet_rtg_berkelium.name=РИТЭГ-пеллета из берклия-248 -item.pellet_rtg_berkelium.desc= +item.pellet_rtg_berkelium.desc=Экзотический источник альфа, служит дольше, чем америций! item.pellet_rtg_cobalt.name=РИТЭГ-пеллета из кобальта-60 item.pellet_rtg_cobalt.desc=Не лучший для РИТЭГ энергии, но хорош для гамма-радиации! item.pellet_rtg_depleted.bismuth.name=Распавшаяся РИТЭГ-пеллета висмута @@ -4013,15 +4014,15 @@ item.pellet_rtg_strontium.desc=Известен штату Калифорния. item.pellet_rtg_radium.name=РИТЭГ-пеллета из радия-226 item.pellet_rtg_radium.desc=Отличная стартовая пеллета, полученная из натурального радия! item.pellet_rtg_weak.name=Слабая урановая РИТЭГ-топливная пеллета -item.pellet_rtg_weak.desc=Более дешевая и слабая пеллета, теперь с большим количеством U238! +item.pellet_rtg_weak.desc=Более дешёвая и слабая пеллета, теперь с большим количеством U238! item.pellet_schrabidium.name=Чистая шрабидиевая Ватцз-пеллета item.photo_panel.name=Фотоэлектрическая панель item.pile_rod_boron.name=Контрольный стержень "Чикагской поленницы" item.pile_rod_boron.desc=§9[Поглотитель нейтронов]$§eПКМ, чтобы переключить item.pile_rod_detector.name=Регулирующий и детектирующий стержень "Чикагской поленницы" -item.pile_rod_detector.desc=§9[Детектор/поглотитель нейтронов]$§eПКМ дефьюзером чтобы увеличить/уменьшить лимит нейтронов$§eПКМ отвёрткой без шифта чтобы проверить поток +item.pile_rod_detector.desc=§9[Детектор/поглотитель нейтронов]$§eПКМ дефьюзером, чтобы увеличить/уменьшить лимит нейтронов$§eПКМ отвёрткой без шифта, чтобы проверить поток item.pile_rod_lithium.name=Литиевая ячейка "Чикагской поленницы" -item.pile_rod_lithium.desc=§a[Топливо-размножитель]$§eПКМ ручной дрелью чтобы проверить ядро ячейки +item.pile_rod_lithium.desc=§a[Топливо-размножитель]$§eПКМ ручной дрелью, чтобы проверить ядро ячейки item.pile_rod_plutonium.name=Плутониевый стержень "Чикагской поленницы" item.pile_rod_plutonium.desc=§d[Источник нейтронов] item.pile_rod_pu239.name=Урановый стержень-размножитель "Чикагской поленницы" @@ -4029,7 +4030,7 @@ item.pile_rod_pu239.desc=§a[Активное топливо]$§eбогатое item.pile_rod_source.name=Радий-226-Бериллевый источник нейтронов "Чикагской поленницы" item.pile_rod_source.desc=§d[Источник нейтронов] item.pile_rod_uranium.name=Урановый стержень "Чикагской поленницы" -item.pile_rod_uranium.desc=§a[Активное топливо]$§eПКМ ручной дрелью чтобы взять образец ядра стержня +item.pile_rod_uranium.desc=§a[Активное топливо]$§eПКМ ручной дрелью, чтобы взять образец ядра стержня item.pill_iodine.name=Таблетка иода item.pill_iodine.desc=Убирает негативные эффекты item.pill_herbal.name=Травяная паста @@ -4042,7 +4043,7 @@ item.pipes_steel.name=Стальные трубы item.pipes_steel.desc=Раскрафт был исключен из-за уклонения от уплаты налогов item.piston_selenium.name=Поршень двигателя внутреннего сгорания item.piston_set_desh.name=Набор деш-поршней -item.piston_set_dura.name=Набор поршней из высокоскоростной стали +item.piston_set_dura.name=Набор поршней из быстрорежущей стали item.piston_set_starmetal.name=Набор поршней из звёздного металла item.piston_set_steel.name=Набор стальных поршней item.plan_c.name=План С @@ -4067,7 +4068,7 @@ item.plate_copper.name=Медная пластина item.plate_dalekanium.name=Злой металл item.plate_desh.name=Составная пластина из деш item.plate_dineutronium.name=Составная пластина из динейтрония -item.plate_dura_steel.name=Пластина высокоскоростной стали +item.plate_dura_steel.name=Пластина быстрорежущей стали item.plate_euphemium.name=Составная пластина из эвфемия item.plate_fuel_mox.name=МОКС-топливная пластина item.plate_fuel_pu238be.name=Плутоний-238-Бериллевая топливная пластина @@ -4131,8 +4132,8 @@ item.powder_coal_tiny.name=Кучка угольного порошка item.powder_cobalt.name=Кобальтовый порошок item.powder_cobalt_tiny.name=Кучка кобальтового порошка item.powder_coltan.name=Очищенный танталит -item.powder_coltan_ore.name=Измельченный Колтан -item.powder_combine_steel.name=Измельченная сталь Альянса +item.powder_coltan_ore.name=Измельчённый Колтан +item.powder_combine_steel.name=Измельчённая сталь Альянса item.powder_copper.name=Медный порошок item.powder_cs137.name=Порошок цезия-137 item.powder_cs137_tiny.name=Кучка порошка цезия-137 @@ -4142,10 +4143,10 @@ item.powder_desh_mix.name=Смесь деш item.powder_desh_ready.name=ГотоваяДеш™ смесь item.powder_diamond.name=Алмазный порошок item.powder_dineutronium.name=Динейтрониевый порошок -item.powder_dura_steel.name=Измельченная высокоскоростная сталь +item.powder_dura_steel.name=Измельчённая быстрорежущая сталь item.powder_emerald.name=Изумрудный порошок item.powder_euphemium.name=Эвфемиевый порошок -item.powder_euphemium.desc=Измельченный розовый.$На вкус как клубника. +item.powder_euphemium.desc=Измельчённая розовизна.$На вкус как клубника. item.powder_fertilizer.name=Промышленное удобрение item.powder_fire.name=Красный фосфор item.powder_fire.desc=Используется в многоцелевых бомбах:$Зажигательные бомбы - это весело! @@ -4165,8 +4166,8 @@ item.powder_lignite.name=Порошок бурого угля item.powder_limestone.name=Известняковый порошок item.powder_lithium.name=Литиевый порошок item.powder_lithium_tiny.name=Кучка литиевого порошка -item.powder_magic.name=Измельченное зачарование -item.powder_magnetized_tungsten.name=Измельченный намагниченный вольфрам +item.powder_magic.name=Измельчённое зачарование +item.powder_magnetized_tungsten.name=Измельчённый намагниченный вольфрам item.powder_meteorite.name=Метеоритный порошок item.powder_meteorite_tiny.name=Кучка метеоритного порошка item.powder_molysite.name=Молизит @@ -4215,7 +4216,7 @@ item.powder_verticium.name=Вертициевый порошок item.powder_weidanium.name=Вейдановый порошок item.powder_xe135.name=Порошок ксенона-135 item.powder_xe135_tiny.name=Кучка порошка ксенона-135 -item.powder_yellowcake.name=Йеллоукейк +item.powder_yellowcake.name=Жёлтый кек item.powder_zirconium.name=Циркониевый порошок item.power_net_tool.name=Анализатор энергосети item.pipette.name=Пипетка @@ -4244,21 +4245,21 @@ item.pwr_fuel.men.name=Топливный стержень ВВЭР со сре item.pwr_fuel.mep.name=Топливный стержень ВВЭР со среднеобогащённым плутонием item.pwr_fuel.meu.name=Топливный стержень ВВЭР со среднеобогащённым ураном item.pwr_fuel.mox.name=Топливный стержень ВВЭР с МОКС-топливом -item.pwr_fuel_depleted.bfb_am_mix.name=Обедненный стержень ВВЭР ЦБР с реакторным америцием -item.pwr_fuel_depleted.bfb_pu241.name=Обедненный стержень ВВЭР ЦБР с плутонием-241 -item.pwr_fuel_depleted.hea242.name=Обедненный топливный стержень ВВЭР с высокообогащённым америцием-242 -item.pwr_fuel_depleted.hen237.name=Обедненный топливный стержень ВВЭР с высокообогащённым нептунием-237 -item.pwr_fuel_depleted.hep239.name=Обедненный топливный стержень ВВЭР с высокообогащённым плутонием-239 -item.pwr_fuel_depleted.hep241.name=Обедненный топливный стержень ВВЭР с высокообогащённым плутонием-241 -item.pwr_fuel_depleted.hes326.name=Обедненный топливный стержень ВВЭР с высокообогащённым шрабидием-326 -item.pwr_fuel_depleted.hes327.name=Обедненный топливный стержень ВВЭР с высокообогащённым шрабидием-327 -item.pwr_fuel_depleted.heu233.name=Обедненный топливный стержень ВВЭР с высокообогащённым ураном-233 -item.pwr_fuel_depleted.heu235.name=Обедненный топливный стержень ВВЭР с высокообогащённым ураном-235 -item.pwr_fuel_depleted.mea.name=Обедненный топливный стержень ВВЭР со среднеобогащённым америцием -item.pwr_fuel_depleted.men.name=Обедненный топливный стержень ВВЭР со среднеобогащённым нептунием -item.pwr_fuel_depleted.mep.name=Обедненный топливный стержень ВВЭР со среднеобогащённым плутонием -item.pwr_fuel_depleted.meu.name=Обедненный топливный стержень ВВЭР со среднеобогащённым ураном -item.pwr_fuel_depleted.mox.name=Обедненный топливный стержень ВВЭР с МОКС-топливом +item.pwr_fuel_depleted.bfb_am_mix.name=Обеднённый стержень ВВЭР ЦБР с реакторным америцием +item.pwr_fuel_depleted.bfb_pu241.name=Обеднённый стержень ВВЭР ЦБР с плутонием-241 +item.pwr_fuel_depleted.hea242.name=Обеднённый топливный стержень ВВЭР с высокообогащённым америцием-242 +item.pwr_fuel_depleted.hen237.name=Обеднённый топливный стержень ВВЭР с высокообогащённым нептунием-237 +item.pwr_fuel_depleted.hep239.name=Обеднённый топливный стержень ВВЭР с высокообогащённым плутонием-239 +item.pwr_fuel_depleted.hep241.name=Обеднённый топливный стержень ВВЭР с высокообогащённым плутонием-241 +item.pwr_fuel_depleted.hes326.name=Обеднённый топливный стержень ВВЭР с высокообогащённым шрабидием-326 +item.pwr_fuel_depleted.hes327.name=Обеднённый топливный стержень ВВЭР с высокообогащённым шрабидием-327 +item.pwr_fuel_depleted.heu233.name=Обеднённый топливный стержень ВВЭР с высокообогащённым ураном-233 +item.pwr_fuel_depleted.heu235.name=Обеднённый топливный стержень ВВЭР с высокообогащённым ураном-235 +item.pwr_fuel_depleted.mea.name=Обеднённый топливный стержень ВВЭР со среднеобогащённым америцием +item.pwr_fuel_depleted.men.name=Обеднённый топливный стержень ВВЭР со среднеобогащённым нептунием +item.pwr_fuel_depleted.mep.name=Обеднённый топливный стержень ВВЭР со среднеобогащённым плутонием +item.pwr_fuel_depleted.meu.name=Обеднённый топливный стержень ВВЭР со среднеобогащённым ураном +item.pwr_fuel_depleted.mox.name=Обеднённый топливный стержень ВВЭР с МОКС-топливом item.pwr_fuel_hot.bfb_am_mix.name=Горячий стержень ВВЭР ЦБР с реакторным америцием item.pwr_fuel_hot.bfb_pu241.name=Горячий стержень ВВЭР ЦБР с плутонием-241 item.pwr_fuel_hot.hea242.name=Горячий стержень ВВЭР с высокообогащённым америцием-242 @@ -4287,7 +4288,7 @@ item.rag_piss.name=Пропитанная мочой тряпка item.rangefinder.name=Дальнометр item.rbmk_fuel_balefire.name=Жар-топливный стержень РБМК item.rbmk_fuel_balefire_gold.name=Флэшголд-топливный стержень РБМК -item.rbmk_fuel_drx.name=§cДигамма топливный стержень РБМК§r +item.rbmk_fuel_drx.name=§cДигамма-топливный стержень РБМК§r item.rbmk_fuel_empty.name=Пустой топливный стержень РБМК item.rbmk_fuel_flashlead.name=Флэшлид-топливный стержень РБМК item.rbmk_fuel_hea241.name=Высокообогащённый америциевый-241 топливный стержень РБМК @@ -4321,7 +4322,7 @@ item.rbmk_lid.name=Покрывающая панель РБМК item.rbmk_lid_glass.name=Стеклянная покрывающая панель РБМК item.rbmk_pellet_balefire.name=Жар-топливная пеллета item.rbmk_pellet_balefire_gold.name=Флэшголд-топливная пеллета -item.rbmk_pellet_drx.name=§cДигамма топливная пеллета§r +item.rbmk_pellet_drx.name=§cДигамма-топливная пеллета§r item.rbmk_pellet_flashlead.name=Флэшлид-топливная пеллета item.rbmk_pellet_hea241.name=Высокообогащённая америциевая-241 топливная пеллета item.rbmk_pellet_hea242.name=Высокообогащённая америциевая-242 топливная пеллета @@ -4581,11 +4582,25 @@ item.sat_head_scanner.name=Сканер M700 item.sat_interface.name=Интерфейс спутникового управления item.sat_laser.name=Орбитальный Луч Смерти item.sat_lunar_miner.name=Модуль для добычи лунного грунта -item.sat_mapper.name=Спутник для Картографирования Поверхности +item.sat_mapper.name=Спутник для картографирования поверхности item.sat_miner.name=Модуль для добычи астероидов -item.sat_radar.name=Спутник с Радиолокационным Зондированием +item.sat_radar.name=Спутник с радиолокационным зондированием item.sat_resonator.name=Спутник с Зен-Резонатором item.sat_scanner.name=Спутник с модулем глубинно-ресурсного сканирования + +item.sat.desc.frequency=Частота спутника +item.sat.desc.foeq=Даёт тебе достижение. Это всё. +item.sat.desc.gerald.single_use=Одноразовое. +item.sat.desc.gerald.orbital_module=Требует орбитальный модуль. +item.sat.desc.gerald.melter=Расплавитель процессоров, проклятие каждого владельца сервера. +item.sat.desc.laser=Позволяет вызывать лазеры с перезарядкой 15 секунд. +item.sat.desc.mapper=Отображает загруженные в данный момент чанки. +item.sat.desc.miner=Доставит рудные порошки на грузовую посадочную площадку. +item.sat.desc.lunar_miner=Добывает лунный грунт, чтобы доставить его на грузовую посадочную площадку. +item.sat.desc.radar=Показывает карту активных объектов. +item.sat.desc.resonator=Позволяет телепортироваться без перезарядки. +item.sat.desc.scanner=Создаёт карту подземных руд сверху вниз. + item.sawblade.name=Лезвие пилорамы item.schnitzel_vegan.name=Вегетарианский шницель item.schrabidium_axe.name=Шрабидиевый топор @@ -4621,9 +4636,9 @@ item.settings_tool.name=Устройство настройки item.shackles.name=Оковы item.shellntm.name=Оболочка (%s) item.shimmer_axe.name=Отлитый топор -item.shimmer_axe_head.name=Тяжелое лезвие топора +item.shimmer_axe_head.name=Тяжёлое лезвие топора item.shimmer_handle.name=Усиленная полимерная ручка -item.shimmer_head.name=Тяжелая головка молота +item.shimmer_head.name=Тяжёлая головка молота item.shimmer_sledge.name=Отлитая кувалда item.singularity.name=Сингулярность item.singularity_counter_resonant.name=Заключённая контр-резонансная сингулярность @@ -4643,7 +4658,7 @@ item.solid_fuel_bf.name=Твердое топливо (Жар-пламя) item.solid_fuel_presto.name=Топливное полено item.solid_fuel_presto_bf.name=Топливное полено (Жар-пламя) item.solid_fuel_presto_triplet.name=Сжатые топливные поленья -item.solid_fuel_presto_triplet_bf.name=Сжатые топливные полена (Жар-пламя) +item.solid_fuel_presto_triplet_bf.name=Сжатые топливные поленья (Жар-пламя) item.solinium_core.name=Полустабильный солиниевый заряд item.solinium_igniter.name=Солиниевый импульсный воспламенитель item.solinium_kit.name=Солиниевый комплект @@ -4801,7 +4816,7 @@ item.tsar_kit.name=Комплект Царь Бомбы item.turbine_titanium.name=Титановая паровая турбина item.turbine_tungsten.name=Усиленные лопасти турбовентилятора item.turret_biometry.name=Карта телелинка -item.turret_cheapo_ammo.name=Дешевые турельные боеприпасы 6x24 +item.turret_cheapo_ammo.name=Дешёвые турельные боеприпасы 6x24 item.turret_chip.name=Турельный чип искусственного интеллекта item.turret_control.name=Турельный контроллер item.turret_cwis_ammo.name=Барабан 20-мм патронов @@ -4874,8 +4889,8 @@ item.warhead_nuclear.name=Ядерная боеголовка item.warhead_thermo_endo.name=Эндотермическая боеголовка item.warhead_thermo_exo.name=Экзотермическая боеголовка item.warhead_volcano.name=Тектоническая боеголовка -item.waste_mox.name=Обедненное МОКС-топливо -item.waste_natural_uranium.name=Обедненное природное урановое топливо +item.waste_mox.name=Обеднённое МОКС-топливо +item.waste_natural_uranium.name=Обеднённое природное урановое топливо item.waste_plate_mox.name=Обеднённая МОКС-топливная пластина item.waste_plate_pu238be.name=Обеднённая плутоний-238-бериллевая топливная пластина item.waste_plate_pu239.name=Обеднённая высокообогащённая плутониевая-239 топливная пластина @@ -4883,17 +4898,17 @@ item.waste_plate_ra226be.name=Обеднённая радий-226-берилле item.waste_plate_sa326.name=Обеднённая высокообогащённая шрабидий-326 топливная пластина item.waste_plate_u233.name=Обеднённая высокообогащённая уран-233 топливная пластина item.waste_plate_u235.name=Обеднённая высокообогащённая уран-235 топливная пластина -item.waste_plutonium.name=Обедненное плутониевое топливо -item.waste_schrabidium.name=Обедненное шрабидиевое топливо -item.waste_thorium.name=Обедненное ториевое топливо -item.waste_u235.name=Обедненное уран-235 топливо -item.waste_u233.name=Обедненное уран-233 топливо -item.waste_uranium.name=Обедненное урановое топливо -item.waste_zfb_mox.name=Обедненное ЦТС МОКС-топливо +item.waste_plutonium.name=Обеднённое плутониевое топливо +item.waste_schrabidium.name=Обеднённое шрабидиевое топливо +item.waste_thorium.name=Обеднённое ториевое топливо +item.waste_u235.name=Обеднённое уран-235 топливо +item.waste_u233.name=Обеднённое уран-233 топливо +item.waste_uranium.name=Обеднённое урановое топливо +item.waste_zfb_mox.name=Обеднённое ЦТС МОКС-топливо item.watch.name=Сломанные карманные часы item.watch.desc=Маленькие синие карманные часы.$На стекле есть несколько трещин,$и несколько осколков отсутствуют.$Перестали тикать в 2:34. item.watz_pellet.boron.name=Поглощающая Ватцз-пеллета из бора -item.watz_pellet.du.name=Поглощающая Ватцз-пеллета из обедненного урана +item.watz_pellet.du.name=Поглощающая Ватцз-пеллета из обеднённого урана item.watz_pellet.hes.name=Ватцз-пеллета из высокообогащённого шрабидия item.watz_pellet.lead.name=Поглощающая Ватцз-пеллета из свинца item.watz_pellet.les.name=Ватцз-пеллета из низкообогащённого шрабидия @@ -4904,18 +4919,18 @@ item.watz_pellet.nqd.name=Ватцз-пеллета из обогащённог item.watz_pellet.nqr.name=Ватцз-пеллета из наквадрии item.watz_pellet.hen.name=Ватцз-пеллета из высокообогащённого нептуния item.watz_pellet.schrabidium.name=Ватцз-пеллета из чистого шрабидия -item.watz_pellet_depleted.boron.name=Поглощающая Ватцз-пеллета из бора (Обедненная) -item.watz_pellet_depleted.du.name=Поглощающая Ватцз-пеллета из обедненного урана (Обедненная) -item.watz_pellet_depleted.hes.name=Ватцз-пеллета из высокообогащённого шрабидия (Обедненная) -item.watz_pellet_depleted.lead.name=Поглощающая Ватцз-пеллета из свинца (Обедненная) -item.watz_pellet_depleted.les.name=Ватцз-пеллета из низкообогащённого шрабидия (Обедненная) -item.watz_pellet_depleted.mes.name=Ватцз-пеллета из среднеобогащённого шрабидия (Обедненная) -item.watz_pellet_depleted.mep.name=Ватцз-пеллета из среднеобогащённого плутония (Обедненная) -item.watz_pellet_depleted.meu.name=Ватцз-пеллета из среднеобогащённого урана (Обедненная) -item.watz_pellet_depleted.nqd.name=Ватцз-пеллета из обогащённого наквадаха (Обедненная) -item.watz_pellet_depleted.nqr.name=Ватцз-пеллета из наквадрии (Обедненная) -item.watz_pellet_depleted.hen.name=Ватцз-пеллета из высокообогащённого нептуния (Обедненная) -item.watz_pellet_depleted.schrabidium.name=Ватцз-пеллета из чистого шрабидия (Обедненная) +item.watz_pellet_depleted.boron.name=Поглощающая Ватцз-пеллета из бора (Обеднённая) +item.watz_pellet_depleted.du.name=Поглощающая Ватцз-пеллета из обеднённого урана (Обеднённая) +item.watz_pellet_depleted.hes.name=Ватцз-пеллета из высокообогащённого шрабидия (Обеднённая) +item.watz_pellet_depleted.lead.name=Поглощающая Ватцз-пеллета из свинца (Обеднённая) +item.watz_pellet_depleted.les.name=Ватцз-пеллета из низкообогащённого шрабидия (Обеднённая) +item.watz_pellet_depleted.mes.name=Ватцз-пеллета из среднеобогащённого шрабидия (Обеднённая) +item.watz_pellet_depleted.mep.name=Ватцз-пеллета из среднеобогащённого плутония (Обеднённая) +item.watz_pellet_depleted.meu.name=Ватцз-пеллета из среднеобогащённого урана (Обеднённая) +item.watz_pellet_depleted.nqd.name=Ватцз-пеллета из обогащённого наквадаха (Обеднённая) +item.watz_pellet_depleted.nqr.name=Ватцз-пеллета из наквадрии (Обеднённая) +item.watz_pellet_depleted.hen.name=Ватцз-пеллета из высокообогащённого нептуния (Обеднённая) +item.watz_pellet_depleted.schrabidium.name=Ватцз-пеллета из чистого шрабидия (Обёдненная) item.weapon_bat.name=Любимица Ричарда item.weapon_bat_nail.name=Клише item.weapon_golf_club.name=Клюшка русского бандита @@ -4933,8 +4948,8 @@ item.weapon_mod_generic.bronze_damage.name=Оптимизированный бр item.weapon_mod_generic.bronze_dura.name=Высокопрочные запчасти из бронзы item.weapon_mod_generic.desh_damage.name=Оптимизированный деш ресивер item.weapon_mod_generic.desh_dura.name=Высокопрочные запчасти из деша -item.weapon_mod_generic.dura_damage.name=Оптимизированный высокоскоростной ресивер -item.weapon_mod_generic.dura_dura.name=Высокопрочные запчасти из высокоскоростной стали +item.weapon_mod_generic.dura_damage.name=Оптимизированный быстрорежущий ресивер +item.weapon_mod_generic.dura_dura.name=Высокопрочные запчасти из быстрорежущей стали item.weapon_mod_generic.ferro_damage.name=Оптимизированный ферроураниевый ресивер item.weapon_mod_generic.ferro_dura.name=Высокопрочные запчасти из ферроурана item.weapon_mod_generic.iron_damage.name=Оптимизированный железный ресивер @@ -4994,10 +5009,53 @@ item.wood_gavel.name=Деревянный молоток item.wrench.name=Газовый ключ item.wrench_archineer.name=Гаечный ключ инженера item.wrench_flipped.name=Лезвие на гаечном ключе -item.xanax.name=Препарат "НАКСА" против дигаммы +item.xanax.name=Препарат "НАКСА" против Дигаммы item.xanax.desc=Снимает 500mDRX item.zirconium_legs.name=Циркониевые штаны +item.custom_missile_part.he.type=HE +item.custom_missile_part.inc.type=Зажигательная +item.custom_missile_part.buster.type=Разрушитель бункеров +item.custom_missile_part.cluster.type=Кластерная +item.custom_missile_part.nuclear.type=Ядерная +item.custom_missile_part.tx.type=Термоядерная (TX) +item.custom_missile_part.n2.type=N² +item.custom_missile_part.balefire.type=Жар +item.custom_missile_part.schrab.type=Шрабидиевая +item.custom_missile_part.taint.type=Порча +item.custom_missile_part.cloud.type=Облако +item.custom_missile_part.turbine.type=Турбина +item.custom_missile_part.custom0.type=Custom0 +item.custom_missile_part.custom1.type=Custom1 +item.custom_missile_part.custom2.type=Custom2 +item.custom_missile_part.custom3.type=Custom3 +item.custom_missile_part.custom4.type=Custom4 +item.custom_missile_part.custom5.type=Custom5 +item.custom_missile_part.custom6.type=Custom6 +item.custom_missile_part.custom7.type=Custom7 +item.custom_missile_part.custom8.type=Custom8 +item.custom_missile_part.custom9.type=Custom9 + +item.custom_missile_part.fuel.any=Любое жидкое топливо +item.custom_missile_part.fuel.kerosene=Керосин / Пероксид +item.custom_missile_part.fuel.solid=Твёрдое топливо +item.custom_missile_part.fuel.hydrogen=Водород / Кислород +item.custom_missile_part.fuel.xenon=Ксеноновый газ +item.custom_missile_part.fuel.balefire=Ракетное жар-топливо / Пероксид + +item.custom_missile_part.rarity.common=§7Обычный +item.custom_missile_part.rarity.uncommon=§eНеобычный +item.custom_missile_part.rarity.rare=§bРедкий +item.custom_missile_part.rarity.epic=§dЭпический +item.custom_missile_part.rarity.legendary=§2Легендарный +item.custom_missile_part.rarity.strange=§3Странный + +item.missile.fuel.solid=Твёрдое топливо (предварительно заправленное) +item.missile.fuel.ethanol_peroxide=Этанол / Пероксид водорода +item.missile.fuel.kerosene_peroxide=Керосин / Пероксид водорода +item.missile.fuel.kerosene_loxy=Керосин / Жидкий кислород +item.missile.fuel.jetfuel_loxy=Авиационное топливо / Жидкий кислород + itemGroup.tabBlocks=Руды и блоки NTM itemGroup.tabConsumable=Расходные материалы и снаряжение NTM itemGroup.tabControl=Топливо и элементы механизмов NTM @@ -5019,7 +5077,7 @@ pa.pause_unloaded=Приостановлен pa.pause_unloaded.desc=Частица вошла$в незагруженный чанк. Операция$была приостановлена$до тех пор пока частица и источник частиц$не будут загружены. #The particle has entered an$unloaded chunk. The operation has$been suspended, until both the$particle and the particle source$are loaded. pa.crash_defocus=Расфокус! -pa.crash_defocus.desc=Частица потеряла фокус.$Убедитесь что ускоритель имеет достаточное количество квадрупольных магнитов. +pa.crash_defocus.desc=Частица потеряла фокус.$Убедитесь, что ускоритель имеет достаточное количество квадрупольных магнитов. pa.crash_derail=Сход с рельсов! pa.crash_derail.desc=Частица вышла за пределы ускорителя.$Убедитесь что никакие части не отсутствуют,$и что диполи настроены правильно. pa.crash_cannot_enter=Отклонено! @@ -5068,7 +5126,7 @@ radar.target.custom1015=Ракета 10/15 размера radar.target.custom15=Ракета 15 размера radar.target.custom1520=Ракета 15/20 размера radar.target.custom20=Ракета 20 размера -radar.target.doomsday=Ракета судного дня +radar.target.doomsday=Ракета Судного Дня radar.target.shuttle=Космический шаттл Reliant Robin radar.target.tier0=Ракета 0-го уровня radar.target.tier1=Ракета 1-го уровня @@ -5104,7 +5162,7 @@ rbmk.screen.rod=Управ: %s rbmk.screen.temp=Темп: %s rbmk.screen.xenon=Ксенон: %s -shape.barrelHeavy=Тяжелый ствол +shape.barrelHeavy=Тяжёлый ствол shape.barrelLight=Лёгкий ствол shape.billet=Заготовка shape.blade=Лопасть @@ -5217,9 +5275,9 @@ tile.block_copper.name=Медный блок tile.block_corium.name=Кориум tile.block_corium_cobble.name=Буриум tile.block_daffergon.name=Даффергоновый блок -tile.block_desh.name=Укрепленный блок деш +tile.block_desh.name=Укреплённый блок деш tile.block_dineutronium.name=Блок динейтрония -tile.block_dura_steel.name=Укрепленный блок высокоскоростной стали +tile.block_dura_steel.name=Укреплённый блок быстрорежущей стали tile.block_electrical_scrap.name=Блок отходов электроники tile.block_euphemium.name=Блок эвфемия tile.block_euphemium_cluster.name=Эвфемиево-вытравленный кластер шрабидия @@ -5249,7 +5307,7 @@ tile.block_meteor_treasure.name=Блок метеоритных сокровищ tile.block_mox_fuel.name=Блок МОКС топлива tile.block_neptunium.name=Нептуниевый блок tile.block_niter.name=Блок селитры -tile.block_niter_reinforced.name=Укрепленный блок селитры +tile.block_niter_reinforced.name=Укреплённый блок селитры tile.block_niobium.name=Блок ниобия tile.block_plutonium.name=Плутониевый блок tile.block_plutonium_fuel.name=Блок плутониевого топлива @@ -5297,7 +5355,7 @@ tile.block_waste_painted.name=Покрашенный блок ядерных о tile.block_waste_vitrified.name=Блок остеклованных ядерных отходов tile.block_weidanium.name=Вейданиевый блок tile.block_white_phosphorus.name=Блок белого фосфора -tile.block_yellowcake.name=Блок йеллоукейка +tile.block_yellowcake.name=Блок жёлтого кека tile.block_zirconium.name=Блок циркония tile.boat.name=Лодка tile.bobblehead.name=Болванчик @@ -5393,8 +5451,8 @@ tile.cm_circuit.schrabidium.name=Блок микросхем 5-го уровня tile.cm_engine.bismuth.name=Моторный блок из висмута tile.cm_engine.desh.name=Моторный блок из деша tile.cm_engine.standard.name=Моторный блок -tile.cm_flux.name=Приемник нейтронного потока -tile.cm_heat.name=Теплоприемник +tile.cm_flux.name=Приёмник нейтронного потока +tile.cm_heat.name=Теплоприёмник tile.cm_port.alloy.name=Люк из продвинутого сплава tile.cm_port.desh.name=Люк из деша tile.cm_port.steel.name=Люк из стали @@ -5418,7 +5476,7 @@ tile.concrete_brick_slab.brick_concrete_broken.name=Плита из разруш tile.concrete_brick_slab.brick_concrete_cracked.name=Плита из потресканных бетонных кирпичей tile.concrete_brick_slab.brick_concrete_mossy.name=Плита из замшелых бетонных кирпичей tile.concrete_brick_slab.brick_ducrete.name=Плита из дюкретовых кирпичей -tile.concrete_colored.black.name=Черный бетон +tile.concrete_colored.black.name=Чёрный бетон tile.concrete_colored.blue.name=Синий бетон tile.concrete_colored.brown.name=Коричневый бетон tile.concrete_colored.cyan.name=Бирюзовый бетон @@ -5471,19 +5529,19 @@ tile.corium_block.name=Кориум tile.crane_boxer.name=Конвейерный упаковщик tile.crane_boxer.desc=Загружает настраиваемое количество стопок в ящики, которые перемещаются по конвейерным лентам$Правый клик отверткой для установки входной стороны$Шифтовый клик отверткой для установки выходной стороны$Кликните дважды для установки противоположной стороны tile.crane_extractor.name=Конвейерный извлекатель -tile.crane_extractor.desc=Забирает предметы из инвентаря и помещает их на конвейерные ленты$Имеет до 9 слотов фильтрации с черным и белым списком$Правый клик отверткой для установки выходной стороны$Shift-клик отверткой для установки входной стороны$Кликните дважды для установки противоположной стороны +tile.crane_extractor.desc=Забирает предметы из инвентаря и помещает их на конвейерные ленты$Имеет до 9 слотов фильтрации с чёрным и белым списком$Правый клик отверткой для установки выходной стороны$Shift-клик отверткой для установки входной стороны$Кликните дважды для установки противоположной стороны tile.crane_grabber.name=Конвейерный сборщик -tile.crane_grabber.desc=Принимает предметы с проходящих конвейеров и помещает их в контейнеры$Принимает предметы только с ближайшей дорожки$Имеет до 9 слотов фильтрации с черным и белым списком$Правый клик отверткой для установки стороны входа$Сменный клик отверткой для установки стороны выхода$Кликните дважды для установки противоположной стороны +tile.crane_grabber.desc=Принимает предметы с проходящих конвейеров и помещает их в контейнеры$Принимает предметы только с ближайшей дорожки$Имеет до 9 слотов фильтрации с чёрным и белым списком$Правый клик отверткой для установки стороны входа$Сменный клик отверткой для установки стороны выхода$Кликните дважды для установки противоположной стороны tile.crane_inserter.name=Конвейерный вставщик tile.crane_inserter.desc=Принимает предметы с конвейеров и помещает их в контейнеры$Правый щелчок отверткой для установки входной стороны$Shift-щелчок отверткой для установки выходной стороны$Кликните дважды для установки противоположной стороны tile.crane_partitioner.name=Вставщик окислителя tile.crane_partitioner.desc=Принимает и сохраняет до девяти входов рудного окислителя$и освобождает их, если они соответствуют требуемому размеру входа.$Неправильные предметы также сохраняются и должны быть извлечены из стороны. tile.crane_router.name=Конвейерный сортировщик -tile.crane_router.desc=Сортирует элемент на основе заданных критериев$Стороны могут быть определены как черный список, белый список или подстановочный знак$Стороны подстановочного знака выбираются только в том случае, если ни один другой фильтр не подходит +tile.crane_router.desc=Сортирует элемент на основе заданных критериев$Стороны могут быть определены как чёрный список, белый список или подстановочный знак$Стороны подстановочного знака выбираются только в том случае, если ни один другой фильтр не подходит tile.crane_splitter.name=Конвейерный разделитель tile.crane_splitter.desc=Разделяет предметы и равномерно укладывает их на две конвейерные ленты$Сама является конвейерной лентой, поэтому может напрямую входить в вставщик или сортировщик$Соотношение можно настроить с помощью отвертки tile.crane_unboxer.name=Конвейерный распаковщик -tile.crane_unboxer.desc=Прием коробок и извлечение их содержимого$Правый щелчок отверткой для установки выходной стороны$Shift-щелчок отверткой для установки входной стороны$Дважды щелкните для установки противоположной стороны +tile.crane_unboxer.desc=Приём коробок и извлечение их содержимого$Правый щелчок отверткой для установки выходной стороны$Shift-щелчок отверткой для установки входной стороны$Дважды щелкните для установки противоположной стороны tile.crashed_bomb.name=Неразорвавшаяся бомба tile.crate.name=Ящик снабжения tile.crate_ammo.name=Ящик из звёздного металла @@ -5499,7 +5557,7 @@ tile.crate_supply.name=Ящик с припасами tile.crate_template.name=Сборочный ящик tile.crate_tungsten.name=Вольфрамовый ящик tile.crate_weapon.name=Ящик с оружием -tile.crystal_hardened.name=Закаленный темный кристалл +tile.crystal_hardened.name=Закаленный тёмный кристалл tile.crystal_pulsar.name=Пульсирующий кристалл tile.crystal_virus.name=Тёмный кристалл tile.deco_aluminium.name=Алюминиевый декоративный блок @@ -5595,14 +5653,14 @@ tile.factory_titanium_furnace.name=Люк доступа базовой фабр tile.factory_titanium_hull.name=Корпус базовой фабрики tile.fallout.name=Радиоактивный осадок tile.fan.name=Вентилятор -tile.fan.desc=Активируется редстоуном$Толкает существ до 10 блоков$ПКМ отвёрткой чтобы повернуть$ПКМ ручным сверлом чтобы переключить режим +tile.fan.desc=Активируется редстоуном$Толкает существ до 10 блоков$ПКМ отвёрткой, чтобы повернуть$ПКМ ручной дрелью, чтобы переключить режим tile.fan.falloffOn=Сила вентилятора уменьшается с расстоянием tile.fan.falloffOff=Постоянная сила вентилорая tile.fence_metal.name=Проволочная сетка tile.fence_metal_post.name=Столб проволочной сетки tile.field_disturber.name=Подавитель высокоэнергитических полей tile.filing_cabinet.green.name=Пыльный картотечный шкафчик -tile.filing_cabinet.steel.name=Стальной карточеный шкафчик +tile.filing_cabinet.steel.name=Стальной картотечный шкафчик tile.fire_digamma.name=Затяжная Дигамма tile.fire_door.name=Пожарная дверь tile.fireworks.name=Батарея фейерверков @@ -5685,8 +5743,8 @@ tile.glyphid_spawner.name=Спавнер улья глифидов tile.gneiss_brick.name=Сланцевые кирпичи tile.gneiss_chiseled.name=Высеченный сланец tile.gneiss_tile.name=Сланцевая плитка -tile.gravel_diamond.name=Измельченные алмазы -tile.gravel_obsidian.name=Измельченный обсидиан +tile.gravel_diamond.name=Измельчённые алмазы +tile.gravel_obsidian.name=Измельчённый обсидиан tile.hadron_access.name=Терминал доступа ускорителя частиц tile.hadron_analysis.name=Стенка камеры ускорителя частиц tile.hadron_analysis_glass.name=Окно камеры ускорителя частиц @@ -5720,7 +5778,7 @@ tile.heater_firebox.name=Топка tile.heater_firebox.desc=Производит тепло, сжигая твёрдое топливо. tile.heater_heatex.name=Теплообменный нагреватель tile.heater_heatex.desc=Выделяет тепло из горячих жидкостей. -tile.heater_oilburner.name=Жидкостный бойлер +tile.heater_oilburner.name=Жидкостный котёл tile.heater_oilburner.desc=Производит тепло, сжигая жидкое топливо.$Может быть настроено с помощью отвертки. tile.heater_oven.name=Нагревательная печь tile.heater_oven.desc=Производит тепло, сжигая твёрдое топливо.$Принимает тепло снизу с 50%% эффективностью. @@ -5787,7 +5845,7 @@ tile.machine_assemfac.name=Сборочный завод tile.machine_assembly_machine.name=Сборочная машина tile.machine_autocrafter.name=Автоматический верстак tile.machine_autosaw.name=Автоматическая пила -tile.machine_autosaw.desc=Срубает ближайшие растения, пересаживает деревья$Принимает:$-Древесное масло$-Этанол$-Рыбное масло$-Тяжелую нефть +tile.machine_autosaw.desc=Срубает ближайшие растения, пересаживает деревья$Принимает:$-Древесное масло$-Этанол$-Рыбное масло$-Тяжёлую нефть tile.machine_autosaw.suspended=Приостановлена tile.machine_bat9000.name=Охереть-большая цистерна 9000 tile.machine_battery.name=Энергохранилище @@ -5821,7 +5879,7 @@ tile.machine_controller.name=Блок удалённого доступа к р tile.machine_converter_he_rf.name=Конвертер энергии HE в RF tile.machine_converter_rf_he.name=Конвертер энергии RF в HE tile.machine_conveyor_press.name=Конвейерный пресс -tile.machine_conveyor_press.desc=Лента двигается слево-направо$ПКМ чтобы установить штамп$ПКМ отвёрткой чтобы снять штамп +tile.machine_conveyor_press.desc=Лента двигается слева направо$ПКМ, чтобы установить штамп$ПКМ отвёрткой, чтобы снять штамп tile.machine_crucible.name=Плавильня tile.machine_crystallizer.name=Рудный окислитель tile.machine_cyclotron.name=Циклотрон @@ -6018,7 +6076,7 @@ tile.ore_gneiss_lithium.name=Сланцевая литиевая руда tile.ore_gneiss_rare.name=Сланцевая редкоземельная руда tile.ore_gneiss_schrabidium.name=Сланцевая шрабидиевая руда tile.ore_gneiss_uranium.name=Сланцевая урановая руда -tile.ore_gneiss_uranium_scorched.name=Обожённая сланцевая урановая руда +tile.ore_gneiss_uranium_scorched.name=Обожжённая сланцевая урановая руда tile.ore_lead.name=Свинцовая руда tile.ore_lignite.name=Бурый уголь tile.ore_meteor.aluminium.name=Метеоритная алюминиевая руда @@ -6045,7 +6103,7 @@ tile.ore_nether_smoldering.name=Тлеющий адский камень tile.ore_nether_sulfur.name=Адская серная руда tile.ore_nether_tungsten.name=Адская вольфрамовая руда tile.ore_nether_uranium.name=Адская урановая руда -tile.ore_nether_uranium_scorched.name=Обожённая адская урановая руда +tile.ore_nether_uranium_scorched.name=Обожжённая адская урановая руда tile.ore_niter.name=Селитровая руда tile.ore_oil.name=Нефтяной карман tile.ore_oil_empty.name=Пустой нефтяной карман @@ -6058,16 +6116,16 @@ tile.ore_sellafield_diamond.name=Селлафитовая алмазная ру tile.ore_sellafield_emerald.name=Селлафитовая изумрудная руда tile.ore_sellafield_radgem.name=Селлафитовый радиоактивный самоцвет tile.ore_sellafield_schrabidium.name=Селлафитовая шрабидиевая руда -tile.ore_sellafield_uranium_scorched.name=Обожженная селлафитовая урановая руда +tile.ore_sellafield_uranium_scorched.name=Обожжённая селлафитовая урановая руда tile.ore_sulfur.name=Серная руда -tile.ore_tektite_osmiridium.name=Перемешанный с осмиридием Тектит +tile.ore_tektite_osmiridium.name=Перемешанный с осмиридием тектит tile.ore_thorium.name=Ториевая руда tile.ore_tikite.name=Трикситовая руда tile.ore_titanium.name=Титановая руда tile.ore_tungsten.name=Вольфрамовая руда tile.ore_unobtainium.name=Брайтбленд tile.ore_uranium.name=Урановая руда -tile.ore_uranium_scorched.name=Обожженная урановая руда +tile.ore_uranium_scorched.name=Обожжённая урановая руда tile.ore_verticium.name=Долларовый Зелёный минерал tile.ore_volcano.name=Геотермальный источник tile.ore_weidanium.name=Вейдитит @@ -6082,7 +6140,7 @@ tile.pa_quadrupole.desc=Требует охлаждения!$Уменьшает tile.pa_rfc.name=Радиочастотный резонатор tile.pa_rfc.desc=Требует охлаждения!$Ускоряет частицы на 100 единиц,$и увеличивает расфокус на 100 единиц.$Частица столкнется при достижении расфокуса в 1000 единиц. tile.pa_source.name=Источник частиц -tile.pa_source.desc=Требует охлаждения!$Использует два предмета чтобы создать частицу. +tile.pa_source.desc=Требует охлаждения!$Использует два предмета, чтобы создать частицу. tile.part_emitter.name=Декоративный источник частиц tile.pedestal.name=Пьедестал tile.pink_barrel.name=Керосиновая бочка @@ -6118,7 +6176,7 @@ tile.pribris_burning.name=Горящие обломки РБМК tile.pribris_digamma.name=Почерневшие обломки РБМК tile.pribris_radiating.name=Тлеющие обломки РБМК tile.pump_electric.name=Электрический насос для грунтовых вод -tile.pump_electric.desc=Использует электричество для выкачивания грунтовых вод$Выкачывает до 10,000мБ/тик$Должно быть размещено ниже Y:70 +tile.pump_electric.desc=Использует электричество для выкачивания грунтовых вод$Выкачивает до 10,000мБ/тик$Должно быть размещено ниже Y:70 tile.pump_steam.name=Паровой насос для грунтовых вод tile.pump_steam.desc=Использует пар для выкачивания грунтовых вод$Выкачывает до 1000мБ/тик$Должно быть размещено ниже Y:70 tile.pwr_block.name=Водо-водяной энергетический реактор (ВВЭР) @@ -6311,7 +6369,7 @@ tile.stones_slab.lightstone.2.name=Плита из светлокаменног tile.struct_icf_core.name=Ядро инерциального термоядерного реактора (ICF) tile.struct_iter_core.name=Ядро термоядерного реактора tile.struct_launcher.name=Блок-компонент пусковой площадки -tile.struct_launcher_core.name=Compact Launch Pad Core Component +tile.struct_launcher_core.name=Ядро компактной пусковой площадки tile.struct_launcher_core_large.name=Ядро большой пусковой площадки tile.struct_plasma_core.name=Ядро нагревателя плазмы tile.struct_scaffold.name=Подмосток пусковой площадки @@ -6340,7 +6398,7 @@ tile.turret_chekhov.name=Крупнокалиберная пулеметная tile.turret_cwis.name=”Фэленкс” Mk-15 CIWS tile.turret_flamer.name=Турель с огнемётом tile.turret_friendly.name=Турель Гатлинга "Мистер Дружелюбный" -tile.turret_fritz.name=Тяжелая огнеметная турель "Фриц" +tile.turret_fritz.name=Тяжёлая огнеметная турель "Фриц" tile.turret_heavy.name=Турель с тяжёлым пулемётом tile.turret_himars.name=Ракетная артиллерийская турель "Генри" tile.turret_howard.name=Двойная турель Гатлинга CIWS "Говард" @@ -6407,7 +6465,7 @@ tile.sliding_seal_door.name=Раздвижная герметичная двер trait.asbestos=Содержит асбест trait.blinding=Ослепление trait.coal=Угольная пыль -trait.digamma=Дигамма радиация +trait.digamma=Дигамма-радиация trait.drop=Опасно выкидывать trait.explosive=Воспламеняющийся / Взрывоопасный trait.furnace=Даёт %s операций в ядерной печи @@ -6466,7 +6524,7 @@ tool.ability.hammer_flat=Плоская зона действия tool.ability.luck=Удача tool.ability.mercury=Ртутное касание tool.ability.midas=Прикосновение Мидаса -tool.ability.recursion=Жилковый Майнер +tool.ability.recursion=Жилковый майнер tool.ability.shredder=Авто-измельчитель tool.ability.silktouch=Шёлковое касание tool.ability.smelter=Авто-плавка @@ -6538,3 +6596,29 @@ desc.gui.upgrade.power= * §1Энергосбережение§r: Стакает desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х уровней tile.oc_cable_paintable.name=Окрашиваемый сетевой кабель + +desc.util.type=Тип +desc.util.size=Размер +desc.util.weight=Вес +desc.util.inaccuracy=Неточность +desc.util.strength=Сила +desc.util.top_size=Верхний размер +desc.util.bottom_size=Нижний размер +desc.util.fuel_type=Тип топлива +desc.util.fuel_amount=Количество топлива +desc.util.health=Здоровье +desc.util.rarity=Редкость +desc.util.not_launchable=Не запускается! +desc.util.fuel_capacity=Ёмкость топливного бака +desc.util.warhead=Боеголовка +desc.util.chip_inaccuracy=Неточность чипа +desc.util.fin_inaccuracy=Неточность стабилизатора + +gui.chemical.duration=Длительность: %s +gui.chemical.consumption=Потребление: %s +gui.chemical.input=Вход: +gui.chemical.output=Выход: +gui.chemical.click_to_set_recipe=Нажмите, чтобы выбрать рецепт + + +// Last updated 23.08.2025 by Bufka2011, MrKimkimora and TactiCOOLHimZa // From fa6b4faeeed484b8bc727c058965fd3724234c17 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sat, 23 Aug 2025 17:09:19 -0600 Subject: [PATCH 441/491] I18n for machines implementation --- .../gui/GUIMachineAssemblyMachine.java | 33 +++++---- .../gui/GUIMachineChemicalPlant.java | 35 ++++----- .../hbm/inventory/gui/GUIMachinePUREX.java | 31 ++++---- .../recipes/loader/GenericRecipe.java | 73 +++++++++++++------ src/main/resources/assets/hbm/lang/en_US.lang | 11 +++ src/main/resources/assets/hbm/lang/ru_RU.lang | 16 ++-- 6 files changed, 123 insertions(+), 76 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java index d69a8f062..5104850ca 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java @@ -8,6 +8,7 @@ import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.machine.ItemBlueprints; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; @@ -21,22 +22,22 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_assembler.png"); private TileEntityMachineAssemblyMachine assembler; - + public GUIMachineAssemblyMachine(InventoryPlayer invPlayer, TileEntityMachineAssemblyMachine tedf) { super(new ContainerMachineAssemblyMachine(invPlayer, tedf)); assembler = tedf; - + this.xSize = 176; this.ySize = 256; } - + @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); assembler.inputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 99, 52, 16); assembler.outputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 99, 52, 16); - + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, assembler.power, assembler.maxPower); if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { @@ -44,32 +45,32 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { GenericRecipe recipe = (GenericRecipe) AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.assembler.assemblerModule.recipe); this.func_146283_a(recipe.print(), mouseX, mouseY); } else { - this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); } } } - + @Override protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule.recipe, 0, ItemBlueprints.grabPool(assembler.slots[1]), this); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.assembler.hasCustomInventoryName() ? this.assembler.getInventoryName() : I18n.format(this.assembler.getInventoryName()); - + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } - + @Override protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - + int p = (int) (assembler.power * 61 / assembler.maxPower); drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); @@ -77,25 +78,25 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { int j = (int) Math.ceil(70 * assembler.assemblerModule.progress); drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); } - + GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule.recipe); - + /// LEFT LED if(assembler.didProcess) { drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6); } else if(recipe != null) { drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6); } - + /// RIGHT LED if(assembler.didProcess) { drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6); } else if(recipe != null && assembler.power >= recipe.power) { drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6); } - + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); - + if(recipe != null && recipe.inputItem != null) { for(int i = 0; i < recipe.inputItem.length; i++) { Slot slot = (Slot) this.inventorySlots.inventorySlots.get(assembler.assemblerModule.inputSlots[i]); @@ -115,7 +116,7 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { GL11.glColor4f(1F, 1F, 1F, 1F); GL11.glDisable(GL11.GL_BLEND); } - + assembler.inputTank.renderTank(guiLeft + 8, guiTop + 115, this.zLevel, 52, 16, 1); assembler.outputTank.renderTank(guiLeft + 80, guiTop + 115, this.zLevel, 52, 16, 1); } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java index 78a2e619b..50838b3a8 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -8,6 +8,7 @@ import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.machine.ItemBlueprints; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; @@ -21,15 +22,15 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_chemplant.png"); private TileEntityMachineChemicalPlant chemplant; - + public GUIMachineChemicalPlant(InventoryPlayer invPlayer, TileEntityMachineChemicalPlant tedf) { super(new ContainerMachineChemicalPlant(invPlayer, tedf)); chemplant = tedf; - + this.xSize = 176; this.ySize = 256; } - + @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); @@ -38,7 +39,7 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { chemplant.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 8 + i * 18, guiTop + 18, 16, 34); chemplant.outputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 80 + i * 18, guiTop + 18, 16, 34); } - + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, chemplant.power, chemplant.maxPower); if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { @@ -46,32 +47,32 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { GenericRecipe recipe = (GenericRecipe) ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.chemplant.chemplantModule.recipe); this.func_146283_a(recipe.print(), mouseX, mouseY); } else { - this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); } } } - + @Override protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule.recipe, 0, ItemBlueprints.grabPool(chemplant.slots[1]), this); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.chemplant.hasCustomInventoryName() ? this.chemplant.getInventoryName() : I18n.format(this.chemplant.getInventoryName()); - + String name = this.chemplant.hasCustomInventoryName() ? this.chemplant.getInventoryName() : I18nUtil.resolveKey(this.chemplant.getInventoryName()); + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); - this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + this.fontRendererObj.drawString(I18nUtil.resolveKey("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } - + @Override protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - + int p = (int) (chemplant.power * 61 / chemplant.maxPower); drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); @@ -79,25 +80,25 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { int j = (int) Math.ceil(70 * chemplant.chemplantModule.progress); drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); } - + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule.recipe); - + /// LEFT LED if(chemplant.didProcess) { drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6); } else if(recipe != null) { drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6); } - + /// RIGHT LED if(chemplant.didProcess) { drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6); } else if(recipe != null && chemplant.power >= recipe.power) { drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6); } - + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); - + if(recipe != null && recipe.inputItem != null) { for(int i = 0; i < recipe.inputItem.length; i++) { Slot slot = (Slot) this.inventorySlots.inventorySlots.get(chemplant.chemplantModule.inputSlots[i]); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java b/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java index 3cb1b0108..8d746cf11 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java @@ -8,6 +8,7 @@ import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.machine.ItemBlueprints; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachinePUREX; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; @@ -21,15 +22,15 @@ public class GUIMachinePUREX extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_purex.png"); private TileEntityMachinePUREX purex; - + public GUIMachinePUREX(InventoryPlayer invPlayer, TileEntityMachinePUREX tedf) { super(new ContainerMachinePUREX(invPlayer, tedf)); purex = tedf; - + this.xSize = 176; this.ySize = 256; } - + @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); @@ -38,7 +39,7 @@ public class GUIMachinePUREX extends GuiInfoContainer { purex.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 8 + i * 18, guiTop + 18, 16, 52); } purex.outputTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 116, guiTop + 36, 16, 52); - + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, purex.power, purex.maxPower); if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { @@ -46,32 +47,32 @@ public class GUIMachinePUREX extends GuiInfoContainer { GenericRecipe recipe = (GenericRecipe) PUREXRecipes.INSTANCE.recipeNameMap.get(this.purex.purexModule.recipe); this.func_146283_a(recipe.print(), mouseX, mouseY); } else { - this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); } } } - + @Override protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(PUREXRecipes.INSTANCE, purex, purex.purexModule.recipe, 0, ItemBlueprints.grabPool(purex.slots[1]), this); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.purex.hasCustomInventoryName() ? this.purex.getInventoryName() : I18n.format(this.purex.getInventoryName()); - + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } - + @Override protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - + int p = (int) (purex.power * 61 / purex.maxPower); drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); @@ -79,25 +80,25 @@ public class GUIMachinePUREX extends GuiInfoContainer { int j = (int) Math.ceil(70 * purex.purexModule.progress); drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); } - + GenericRecipe recipe = PUREXRecipes.INSTANCE.recipeNameMap.get(purex.purexModule.recipe); - + /// LEFT LED if(purex.didProcess) { drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6); } else if(recipe != null) { drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6); } - + /// RIGHT LED if(purex.didProcess) { drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6); } else if(recipe != null && purex.power >= recipe.power) { drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6); } - + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); - + if(recipe != null && recipe.inputItem != null) { for(int i = 0; i < recipe.inputItem.length; i++) { Slot slot = (Slot) this.inventorySlots.inventorySlots.get(purex.purexModule.inputSlots[i]); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 99c37e984..2c53d35dd 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -35,20 +35,20 @@ public class GenericRecipe { public boolean customLocalization = false; protected String[] blueprintPools = null; public String autoSwitchGroup = null; - + public GenericRecipe(String name) { this.name = name; } - + public boolean isPooled() { return blueprintPools != null; } public String[] getPools() { return this.blueprintPools; } - + public boolean isPartOfPool(String lookingFor) { if(!isPooled()) return false; for(String pool : blueprintPools) if (pool.equals(lookingFor)) return true; return false; } - + public GenericRecipe setDuration(int duration) { this.duration = duration; return this; } public GenericRecipe setPower(long power) { this.power = power; return this; } public GenericRecipe setup(int duration, long power) { return this.setDuration(duration).setPower(power); } @@ -68,13 +68,13 @@ public class GenericRecipe { public GenericRecipe inputFluidsEx(FluidStack... input) { if(!GeneralConfig.enableExpensiveMode) return this; this.inputFluid = input; return this; } public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; } public GenericRecipe outputFluids(FluidStack... output) { this.outputFluid = output; return this; } - + public GenericRecipe outputItems(ItemStack... output) { this.outputItem = new IOutput[output.length]; for(int i = 0; i < outputItem.length; i++) this.outputItem[i] = new ChanceOutput(output[i]); return this; } - + public GenericRecipe setIconToFirstIngredient() { if(this.inputItem != null) { List stacks = this.inputItem[0].extractForNEI(); @@ -82,9 +82,9 @@ public class GenericRecipe { } return this; } - + public ItemStack getIcon() { - + if(icon == null) { if(outputItem != null) { if(outputItem[0] instanceof ChanceOutput) icon = ((ChanceOutput) outputItem[0]).stack.copy(); @@ -95,15 +95,15 @@ public class GenericRecipe { icon = ItemFluidIcon.make(outputFluid[0]); } } - + if(icon == null) icon = new ItemStack(ModItems.nothing); return icon; } - + public String getInternalName() { return this.name; } - + public String getLocalizedName() { String name = null; if(customLocalization) name = I18nUtil.resolveKey(this.name); @@ -111,28 +111,57 @@ public class GenericRecipe { if(this.nameWrapper != null) name = I18nUtil.resolveKey(this.nameWrapper, name); return name; } - + public List print() { List list = new ArrayList(); list.add(EnumChatFormatting.YELLOW + this.getLocalizedName()); + + // autoswitch group (two lines: label + "Enabled for") if(this.autoSwitchGroup != null) { - String[] lines = I18nUtil.resolveKeyArray("autoswitch", I18nUtil.resolveKey(this.autoSwitchGroup)); - for(String line : lines) list.add(EnumChatFormatting.GOLD + line); + String groupNameLocalized = I18nUtil.resolveKey(this.autoSwitchGroup); + list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("gui.recipe.autoswitch") + ": " + groupNameLocalized); + list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("gui.recipe.enabledFor") + " " + groupNameLocalized); } - if(duration > 0) list.add(EnumChatFormatting.RED + "Duration: " + this.duration / 20D + "s"); - if(power > 0) list.add(EnumChatFormatting.RED + "Consumption: " + BobMathUtil.getShortNumber(power) + "HE/t"); - list.add(EnumChatFormatting.BOLD + "Input:"); + + // duration (seconds) + if(duration > 0) { + double seconds = this.duration / 20D; + list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.recipe.duration") + ": " + seconds + "s"); + } + + // power / consumption + if(power > 0) { + list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.recipe.consumption") + ": " + BobMathUtil.getShortNumber(power) + "HE/t"); + } + + // input label + items + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.recipe.input") + ":"); if(inputItem != null) for(AStack stack : inputItem) { ItemStack display = stack.extractForCyclingDisplay(20); list.add(" " + EnumChatFormatting.GRAY + display.stackSize + "x " + display.getDisplayName()); } - if(inputFluid != null) for(FluidStack fluid : inputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : " at " + EnumChatFormatting.RED + fluid.pressure + " PU")); - list.add(EnumChatFormatting.BOLD + "Output:"); - if(outputItem != null) for(IOutput output : outputItem) for(String line : output.getLabel()) list.add(" " + line); - if(outputFluid != null) for(FluidStack fluid : outputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : " at " + EnumChatFormatting.RED + fluid.pressure + " PU")); + if(inputFluid != null) for(FluidStack fluid : inputFluid) { + String mB = I18nUtil.resolveKey("gui.recipe.mB"); + String pressurePart = fluid.pressure == 0 ? "" : + " " + I18nUtil.resolveKey("gui.recipe.atPressure") + " " + EnumChatFormatting.RED + fluid.pressure + " PU"; + list.add(" " + EnumChatFormatting.BLUE + fluid.fill + mB + " " + fluid.type.getLocalizedName() + pressurePart); + } + + // output label + items + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.recipe.output") + ":"); + if(outputItem != null) for(IOutput output : outputItem) + for(String line : output.getLabel()) list.add(" " + line); + if(outputFluid != null) for(FluidStack fluid : outputFluid) { + String mB = I18nUtil.resolveKey("gui.recipe.mB"); + String pressurePart = fluid.pressure == 0 ? "" : + " " + I18nUtil.resolveKey("gui.recipe.atPressure") + " " + EnumChatFormatting.RED + fluid.pressure + " PU"; + list.add(" " + EnumChatFormatting.BLUE + fluid.fill + mB + " " + fluid.type.getLocalizedName() + pressurePart); + } + return list; } - + + /** Default impl only matches localized name substring, can be extended to include ingredients as well */ public boolean matchesSearch(String substring) { return getLocalizedName().toLowerCase(Locale.US).contains(substring.toLowerCase(Locale.US)); diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e772302f4..cf7cfd858 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6270,4 +6270,15 @@ desc.gui.upgrade.overdrive= * §7Overdrive§r: Stacks to level 3 desc.gui.upgrade.power= * §1Power-Saving§r: Stacks to level 3 desc.gui.upgrade.speed= * §4Speed§r: Stacks to level 3 +# Shared recipe labels +gui.recipe.duration=Duration +gui.recipe.consumption=Consumption +gui.recipe.input=Input +gui.recipe.output=Output +gui.recipe.mB=mB +gui.recipe.atPressure=at +gui.recipe.autoswitch=Auto-switch group +gui.recipe.enabledFor=Enabled for +gui.recipe.setRecipe=Click to set recipe + tile.oc_cable_paintable.name=Paintable Network Cable diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 154e215fa..09e404bdf 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -6614,11 +6614,15 @@ desc.util.warhead=Боеголовка desc.util.chip_inaccuracy=Неточность чипа desc.util.fin_inaccuracy=Неточность стабилизатора -gui.chemical.duration=Длительность: %s -gui.chemical.consumption=Потребление: %s -gui.chemical.input=Вход: -gui.chemical.output=Выход: -gui.chemical.click_to_set_recipe=Нажмите, чтобы выбрать рецепт - +# Shared recipe labels +gui.recipe.duration=Длительность +gui.recipe.consumption=Потребление +gui.recipe.input=Вход +gui.recipe.output=Выход +gui.recipe.mB=mB +gui.recipe.atPressure=при давлении в +gui.recipe.autoswitch=Группа автоматического переключения +gui.recipe.enabledFor=Включено для +gui.recipe.setRecipe=Нажмите, чтобы выбрать рецепт // Last updated 23.08.2025 by Bufka2011, MrKimkimora and TactiCOOLHimZa // From 60b9e1fb186e3fd1bdb397543a41571571cd40f7 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sat, 23 Aug 2025 17:51:01 -0600 Subject: [PATCH 442/491] I18n implementation for missiles and sattelites --- .../com/hbm/items/machine/ItemSatChip.java | 43 +-- .../hbm/items/weapon/ItemCustomMissile.java | 71 +++-- .../items/weapon/ItemCustomMissilePart.java | 291 +++++++++--------- .../com/hbm/items/weapon/ItemMissile.java | 69 +++-- 4 files changed, 252 insertions(+), 222 deletions(-) diff --git a/src/main/java/com/hbm/items/machine/ItemSatChip.java b/src/main/java/com/hbm/items/machine/ItemSatChip.java index b02dd36fa..5f66e57a1 100644 --- a/src/main/java/com/hbm/items/machine/ItemSatChip.java +++ b/src/main/java/com/hbm/items/machine/ItemSatChip.java @@ -4,6 +4,7 @@ import java.util.List; import com.hbm.items.ISatChip; import com.hbm.items.ModItems; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -14,36 +15,36 @@ public class ItemSatChip extends Item implements ISatChip { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - list.add("Satellite frequency: " + getFreq(itemstack)); - + list.add(I18nUtil.resolveKey("satchip.frequency") + ": " + getFreq(itemstack)); + if(this == ModItems.sat_foeq) - list.add("Gives you an achievement. That's it."); - + list.add(I18nUtil.resolveKey("satchip.foeq")); + if(this == ModItems.sat_gerald) { - list.add("Single use."); - list.add("Requires orbital module."); - list.add("Melter of CPUs, bane of every server owner."); + list.add(I18nUtil.resolveKey("satchip.gerald.line1")); + list.add(I18nUtil.resolveKey("satchip.gerald.line2")); + list.add(I18nUtil.resolveKey("satchip.gerald.line3")); } - + if(this == ModItems.sat_laser) - list.add("Allows to summon lasers with a 15 second cooldown."); - + list.add(I18nUtil.resolveKey("satchip.laser")); + if(this == ModItems.sat_mapper) - list.add("Displays currently loaded chunks."); - + list.add(I18nUtil.resolveKey("satchip.mapper")); + if(this == ModItems.sat_miner) - list.add("Will deliver ore powders to a cargo landing pad."); - + list.add(I18nUtil.resolveKey("satchip.miner")); + if(this == ModItems.sat_lunar_miner) - list.add("Mines moon turf to deliver it to a cargo landing pad."); - + list.add(I18nUtil.resolveKey("satchip.lunar_miner")); + if(this == ModItems.sat_radar) - list.add("Shows a map of active entities."); - + list.add(I18nUtil.resolveKey("satchip.radar")); + if(this == ModItems.sat_resonator) - list.add("Allows for teleportation with no cooldown."); - + list.add(I18nUtil.resolveKey("satchip.resonator")); + if(this == ModItems.sat_scanner) - list.add("Creates a topdown map of underground ores."); + list.add(I18nUtil.resolveKey("satchip.scanner")); } } diff --git a/src/main/java/com/hbm/items/weapon/ItemCustomMissile.java b/src/main/java/com/hbm/items/weapon/ItemCustomMissile.java index a0bd103b3..6d428a401 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCustomMissile.java +++ b/src/main/java/com/hbm/items/weapon/ItemCustomMissile.java @@ -6,6 +6,7 @@ import com.hbm.handler.MissileStruct; import com.hbm.items.ModItems; import com.hbm.items.weapon.ItemCustomMissilePart.FuelType; import com.hbm.items.weapon.ItemCustomMissilePart.WarheadType; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -15,35 +16,35 @@ import net.minecraft.util.EnumChatFormatting; public class ItemCustomMissile extends Item { public static ItemStack buildMissile(Item chip, Item warhead, Item fuselage, Item stability, Item thruster) { - + if(stability == null) { return buildMissile(new ItemStack(chip), new ItemStack(warhead), new ItemStack(fuselage), null, new ItemStack(thruster)); } else { return buildMissile(new ItemStack(chip), new ItemStack(warhead), new ItemStack(fuselage), new ItemStack(stability), new ItemStack(thruster)); } } - + public static ItemStack buildMissile(ItemStack chip, ItemStack warhead, ItemStack fuselage, ItemStack stability, ItemStack thruster) { - + ItemStack missile = new ItemStack(ModItems.missile_custom); writeToNBT(missile, "chip", Item.getIdFromItem(chip.getItem())); writeToNBT(missile, "warhead", Item.getIdFromItem(warhead.getItem())); writeToNBT(missile, "fuselage", Item.getIdFromItem(fuselage.getItem())); writeToNBT(missile, "thruster", Item.getIdFromItem(thruster.getItem())); - + if(stability != null) writeToNBT(missile, "stability", Item.getIdFromItem(stability.getItem())); - + return missile; } - + private static void writeToNBT(ItemStack stack, String key, int value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound.setInteger(key, value); } - + public static int readFromNBT(ItemStack stack, String key) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); @@ -52,53 +53,63 @@ public class ItemCustomMissile extends Item { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { - + if(!stack.hasTagCompound()) return; - + try { ItemCustomMissilePart chip = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "chip")); ItemCustomMissilePart warhead = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "warhead")); ItemCustomMissilePart fuselage = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "fuselage")); ItemCustomMissilePart stability = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "stability")); ItemCustomMissilePart thruster = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "thruster")); - - list.add(EnumChatFormatting.BOLD + "Warhead: " + EnumChatFormatting.GRAY + warhead.getWarhead((WarheadType)warhead.attributes[0])); - list.add(EnumChatFormatting.BOLD + "Strength: " + EnumChatFormatting.GRAY + (Float)warhead.attributes[1]); - list.add(EnumChatFormatting.BOLD + "Fuel Type: " + EnumChatFormatting.GRAY + fuselage.getFuel((FuelType)fuselage.attributes[0])); - list.add(EnumChatFormatting.BOLD + "Fuel amount: " + EnumChatFormatting.GRAY + (Float)fuselage.attributes[1] + "l"); - list.add(EnumChatFormatting.BOLD + "Chip inaccuracy: " + EnumChatFormatting.GRAY + (Float)chip.attributes[0] * 100 + "%"); - + + // warhead name + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.warhead") + ": " + EnumChatFormatting.GRAY + warhead.getWarhead((WarheadType)warhead.attributes[0])); + + // strength + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.strength") + ": " + EnumChatFormatting.GRAY + (Float)warhead.attributes[1]); + + // fuel type & amount + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.fuelType") + ": " + EnumChatFormatting.GRAY + fuselage.getFuel((FuelType)fuselage.attributes[0])); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.fuelAmount") + ": " + EnumChatFormatting.GRAY + (Float)fuselage.attributes[1] + "l"); + + // chip inaccuracy + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.chipInaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)chip.attributes[0] * 100 + "%"); + + // fin inaccuracy if(stability != null) - list.add(EnumChatFormatting.BOLD + "Fin inaccuracy: " + EnumChatFormatting.GRAY + (Float)stability.attributes[0] * 100 + "%"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.finInaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)stability.attributes[0] * 100 + "%"); else - list.add(EnumChatFormatting.BOLD + "Fin inaccuracy: " + EnumChatFormatting.GRAY + "100%"); - - list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + fuselage.getSize(fuselage.top) + "/" + fuselage.getSize(fuselage.bottom)); - + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.finInaccuracy") + ": " + EnumChatFormatting.GRAY + "100%"); + + // size + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.size") + ": " + EnumChatFormatting.GRAY + fuselage.getSize(fuselage.top) + "/" + fuselage.getSize(fuselage.bottom)); + + // health float health = warhead.health + fuselage.health + thruster.health; if(stability != null) health += stability.health; - - list.add(EnumChatFormatting.BOLD + "Health: " + EnumChatFormatting.GRAY + health + "HP"); - + + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.missile.health") + ": " + EnumChatFormatting.GRAY + health + "HP"); + } catch(Exception ex) { - list.add(EnumChatFormatting.RED + "### I AM ERROR ###"); + list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("error.generic")); } } - + public static MissileStruct getStruct(ItemStack stack) { - + if(stack == null || !(stack.getItem() instanceof ItemCustomMissile)) return null; - + ItemCustomMissilePart warhead = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "warhead")); ItemCustomMissilePart fuselage = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "fuselage")); ItemCustomMissilePart stability = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "stability")); ItemCustomMissilePart thruster = (ItemCustomMissilePart) Item.getItemById(readFromNBT(stack, "thruster")); - + MissileStruct missile = new MissileStruct(warhead, fuselage, stability, thruster); - + return missile; } } diff --git a/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java b/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java index 26c459982..0318b3875 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java +++ b/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java @@ -8,6 +8,7 @@ import com.hbm.entity.missile.EntityMissileCustom; import com.hbm.items.special.ItemLootCrate; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -15,7 +16,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; public class ItemCustomMissilePart extends Item { - + public PartType type; public PartSize top; public PartSize bottom; @@ -24,37 +25,37 @@ public class ItemCustomMissilePart extends Item { private String title; private String author; private String witty; - + public ItemCustomMissilePart() { this.setMaxStackSize(1); this.setCreativeTab(MainRegistry.missileTab); } - + public static HashMap parts = new HashMap(); - + /** * == Chips == * [0]: inaccuracy - * + * * == Warheads == * [0]: type * [1]: strength/radius/cluster count * [2]: weight - * + * * == Fuselages == * [0]: type * [1]: tank size - * + * * == Stability == * [0]: inaccuracy mod - * + * * == Thrusters === * [0]: type * [1]: consumption * [2]: lift strength */ public Object[] attributes; - + public enum PartType { CHIP, WARHEAD, @@ -62,9 +63,9 @@ public class ItemCustomMissilePart extends Item { FINS, THRUSTER } - + public enum PartSize { - + //for chips ANY, //for missile tips and thrusters @@ -74,9 +75,9 @@ public class ItemCustomMissilePart extends Item { SIZE_15, SIZE_20 } - + public enum WarheadType { - + HE, INC, BUSTER, @@ -89,8 +90,8 @@ public class ItemCustomMissilePart extends Item { TAINT, CLOUD, TURBINE, - - //shit solution but it works. this allows traits to be attached to these empty dummy types, allowing for custom warheads + + //dummy/custom types CUSTOM0, CUSTOM1, CUSTOM2, CUSTOM3, CUSTOM4, CUSTOM5, CUSTOM6, CUSTOM7, CUSTOM8, CUSTOM9; /** Overrides that type's impact effect. Only runs serverside */ @@ -100,44 +101,50 @@ public class ItemCustomMissilePart extends Item { /** Override for the warhead's name in the missile description */ public String labelCustom = null; } - + public enum FuelType { - + KEROSENE, SOLID, HYDROGEN, XENON, BALEFIRE } - + public enum Rarity { - - COMMON(EnumChatFormatting.GRAY + "Common"), - UNCOMMON(EnumChatFormatting.YELLOW + "Uncommon"), - RARE(EnumChatFormatting.AQUA + "Rare"), - EPIC(EnumChatFormatting.LIGHT_PURPLE + "Epic"), - LEGENDARY(EnumChatFormatting.DARK_GREEN + "Legendary"), - SEWS_CLOTHES_AND_SUCKS_HORSE_COCK(EnumChatFormatting.DARK_AQUA + "Strange"); - - String name; - - Rarity(String name) { - this.name = name; + + COMMON("part.rarity.common", EnumChatFormatting.GRAY), + UNCOMMON("part.rarity.uncommon", EnumChatFormatting.YELLOW), + RARE("part.rarity.rare", EnumChatFormatting.AQUA), + EPIC("part.rarity.epic", EnumChatFormatting.LIGHT_PURPLE), + LEGENDARY("part.rarity.legendary", EnumChatFormatting.DARK_GREEN), + SEWS_CLOTHES_AND_SUCKS_HORSE_COCK("part.rarity.strange", EnumChatFormatting.DARK_AQUA); + + private final String key; + private final EnumChatFormatting color; + + Rarity(String key, EnumChatFormatting color) { + this.key = key; + this.color = color; + } + + public String getDisplay() { + return color + I18nUtil.resolveKey(key); } } - + public ItemCustomMissilePart makeChip(float inaccuracy) { - + this.type = PartType.CHIP; this.top = PartSize.ANY; this.bottom = PartSize.ANY; this.attributes = new Object[] { inaccuracy }; - + parts.put(this.hashCode(), this); - + return this; } - + public ItemCustomMissilePart makeWarhead(WarheadType type, float punch, float weight, PartSize size) { this.type = PartType.WARHEAD; @@ -145,12 +152,12 @@ public class ItemCustomMissilePart extends Item { this.bottom = size; this.attributes = new Object[] { type, punch, weight }; setTextureName(RefStrings.MODID + ":mp_warhead"); - + parts.put(this.hashCode(), this); - + return this; } - + public ItemCustomMissilePart makeFuselage(FuelType type, float fuel, PartSize top, PartSize bottom) { this.type = PartType.FUSELAGE; @@ -158,12 +165,12 @@ public class ItemCustomMissilePart extends Item { this.bottom = bottom; attributes = new Object[] { type, fuel }; setTextureName(RefStrings.MODID + ":mp_fuselage"); - + parts.put(this.hashCode(), this); - + return this; } - + public ItemCustomMissilePart makeStability(float inaccuracy, PartSize size) { this.type = PartType.FINS; @@ -171,12 +178,12 @@ public class ItemCustomMissilePart extends Item { this.bottom = size; this.attributes = new Object[] { inaccuracy }; setTextureName(RefStrings.MODID + ":mp_stability"); - + parts.put(this.hashCode(), this); - + return this; } - + public ItemCustomMissilePart makeThruster(FuelType type, float consumption, float lift, PartSize size) { this.type = PartType.THRUSTER; @@ -184,9 +191,9 @@ public class ItemCustomMissilePart extends Item { this.bottom = PartSize.NONE; this.attributes = new Object[] { type, consumption, lift }; setTextureName(RefStrings.MODID + ":mp_thruster"); - + parts.put(this.hashCode(), this); - + return this; } @@ -196,122 +203,122 @@ public class ItemCustomMissilePart extends Item { if(title != null) list.add(EnumChatFormatting.DARK_PURPLE + "\"" + title + "\""); - + try { switch(type) { - case CHIP: - list.add(EnumChatFormatting.BOLD + "Inaccuracy: " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); - break; - case WARHEAD: - list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + getSize(bottom)); - list.add(EnumChatFormatting.BOLD + "Type: " + EnumChatFormatting.GRAY + getWarhead((WarheadType)attributes[0])); - list.add(EnumChatFormatting.BOLD + "Strength: " + EnumChatFormatting.GRAY + (Float)attributes[1]); - list.add(EnumChatFormatting.BOLD + "Weight: " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); - break; - case FUSELAGE: - list.add(EnumChatFormatting.BOLD + "Top size: " + EnumChatFormatting.GRAY + getSize(top)); - list.add(EnumChatFormatting.BOLD + "Bottom size: " + EnumChatFormatting.GRAY + getSize(bottom)); - list.add(EnumChatFormatting.BOLD + "Fuel type: " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); - list.add(EnumChatFormatting.BOLD + "Fuel amount: " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l"); - break; - case FINS: - list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + getSize(top)); - list.add(EnumChatFormatting.BOLD + "Inaccuracy: " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); - break; - case THRUSTER: - list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + getSize(top)); - list.add(EnumChatFormatting.BOLD + "Fuel type: " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); - list.add(EnumChatFormatting.BOLD + "Fuel consumption: " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l/tick"); - list.add(EnumChatFormatting.BOLD + "Max. payload: " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); - break; + case CHIP: + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.inaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); + break; + case WARHEAD: + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.size") + ": " + EnumChatFormatting.GRAY + getSize(bottom)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.type") + ": " + EnumChatFormatting.GRAY + getWarhead((WarheadType)attributes[0])); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.strength") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1]); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.weight") + ": " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); + break; + case FUSELAGE: + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.topSize") + ": " + EnumChatFormatting.GRAY + getSize(top)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.bottomSize") + ": " + EnumChatFormatting.GRAY + getSize(bottom)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.fuelType") + ": " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.fuelAmount") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l"); + break; + case FINS: + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.size") + ": " + EnumChatFormatting.GRAY + getSize(top)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.inaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); + break; + case THRUSTER: + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.size") + ": " + EnumChatFormatting.GRAY + getSize(top)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.fuelType") + ": " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.fuelConsumption") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l/tick"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.maxPayload") + ": " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); + break; } } catch(Exception ex) { - list.add("### I AM ERROR ###"); + list.add(I18nUtil.resolveKey("error.generic")); } - + if(type != PartType.CHIP) - list.add(EnumChatFormatting.BOLD + "Health: " + EnumChatFormatting.GRAY + health + "HP"); - + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.health") + ": " + EnumChatFormatting.GRAY + health + "HP"); + if(this.rarity != null) - list.add(EnumChatFormatting.BOLD + "Rarity: " + EnumChatFormatting.GRAY + this.rarity.name); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.rarity") + ": " + EnumChatFormatting.GRAY + this.rarity.getDisplay()); if(author != null) - list.add(EnumChatFormatting.WHITE + " by " + author); + list.add(EnumChatFormatting.WHITE + " " + I18nUtil.resolveKey("part.by") + " " + author); if(witty != null) list.add(EnumChatFormatting.GOLD + " " + EnumChatFormatting.ITALIC + "\"" + witty + "\""); } - + public String getSize(PartSize size) { - + switch(size) { - case ANY: - return "Any"; - case SIZE_10: - return "1.0m"; - case SIZE_15: - return "1.5m"; - case SIZE_20: - return "2.0m"; - default: - return "None"; + case ANY: + return I18nUtil.resolveKey("part.size.any"); + case SIZE_10: + return "1.0m"; + case SIZE_15: + return "1.5m"; + case SIZE_20: + return "2.0m"; + default: + return I18nUtil.resolveKey("part.size.none"); } } - + public String getWarhead(WarheadType type) { - + if(type.labelCustom != null) return type.labelCustom; - + switch(type) { - case HE: - return EnumChatFormatting.YELLOW + "HE"; - case INC: - return EnumChatFormatting.GOLD + "Incendiary"; - case CLUSTER: - return EnumChatFormatting.GRAY + "Cluster"; - case BUSTER: - return EnumChatFormatting.WHITE + "Bunker Buster"; - case NUCLEAR: - return EnumChatFormatting.DARK_GREEN + "Nuclear"; - case TX: - return EnumChatFormatting.DARK_PURPLE + "Thermonuclear (TX)"; - case N2: - return EnumChatFormatting.RED + "N²"; - case BALEFIRE: - return EnumChatFormatting.GREEN + "BF"; - case SCHRAB: - return EnumChatFormatting.AQUA + "Schrabidium"; - case TAINT: - return EnumChatFormatting.DARK_PURPLE + "Taint"; - case CLOUD: - return EnumChatFormatting.LIGHT_PURPLE + "Cloud"; - case TURBINE: - return (System.currentTimeMillis() % 1000 < 500 ? EnumChatFormatting.RED : EnumChatFormatting.LIGHT_PURPLE) + "Turbine"; - default: - return EnumChatFormatting.BOLD + "N/A"; + case HE: + return EnumChatFormatting.YELLOW + I18nUtil.resolveKey("warhead.he"); + case INC: + return EnumChatFormatting.GOLD + I18nUtil.resolveKey("warhead.incendiary"); + case CLUSTER: + return EnumChatFormatting.GRAY + I18nUtil.resolveKey("warhead.cluster"); + case BUSTER: + return EnumChatFormatting.WHITE + I18nUtil.resolveKey("warhead.bunker_buster"); + case NUCLEAR: + return EnumChatFormatting.DARK_GREEN + I18nUtil.resolveKey("warhead.nuclear"); + case TX: + return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("warhead.thermonuclear"); + case N2: + return EnumChatFormatting.RED + I18nUtil.resolveKey("warhead.n2"); + case BALEFIRE: + return EnumChatFormatting.GREEN + I18nUtil.resolveKey("warhead.balefire"); + case SCHRAB: + return EnumChatFormatting.AQUA + I18nUtil.resolveKey("warhead.schrabidium"); + case TAINT: + return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("warhead.taint"); + case CLOUD: + return EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("warhead.cloud"); + case TURBINE: + return (System.currentTimeMillis() % 1000 < 500 ? EnumChatFormatting.RED : EnumChatFormatting.LIGHT_PURPLE) + I18nUtil.resolveKey("warhead.turbine"); + default: + return EnumChatFormatting.BOLD + I18nUtil.resolveKey("general.na"); } } - + public String getFuel(FuelType type) { - + switch(type) { - case KEROSENE: - return EnumChatFormatting.LIGHT_PURPLE + "Kerosene / Peroxide"; - case SOLID: - return EnumChatFormatting.GOLD + "Solid Fuel"; - case HYDROGEN: - return EnumChatFormatting.DARK_AQUA + "Hydrogen / Oxygen"; - case XENON: - return EnumChatFormatting.DARK_PURPLE + "Xenon Gas"; - case BALEFIRE: - return EnumChatFormatting.GREEN + "BF Rocket Fuel / Peroxide"; - default: - return EnumChatFormatting.BOLD + "N/A"; + case KEROSENE: + return EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("missile.fuel.kerosene_peroxide"); // reuse missile fuel keys + case SOLID: + return EnumChatFormatting.GOLD + I18nUtil.resolveKey("missile.fuel.solid"); + case HYDROGEN: + return EnumChatFormatting.DARK_AQUA + I18nUtil.resolveKey("missile.fuel.ethanol_peroxide"); // closest match + case XENON: + return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("fuel.xenon"); + case BALEFIRE: + return EnumChatFormatting.GREEN + I18nUtil.resolveKey("fuel.balefire"); + default: + return EnumChatFormatting.BOLD + I18nUtil.resolveKey("general.na"); } } - + //am i retarded? /* yes */ public ItemCustomMissilePart copy() { - + ItemCustomMissilePart part = new ItemCustomMissilePart(); part.type = this.type; part.top = this.top; @@ -320,33 +327,33 @@ public class ItemCustomMissilePart extends Item { part.attributes = this.attributes; part.health = this.health; part.setTextureName(this.iconString); - + return part; } - + public ItemCustomMissilePart setAuthor(String author) { this.author = author; return this; } - + public ItemCustomMissilePart setTitle(String title) { this.title = title; return this; } - + public ItemCustomMissilePart setWittyText(String witty) { this.witty = witty; return this; } - + public ItemCustomMissilePart setHealth(float health) { this.health = health; return this; } - + public ItemCustomMissilePart setRarity(Rarity rarity) { this.rarity = rarity; - + if(this.type == PartType.FUSELAGE) { if(this.top == PartSize.SIZE_10) ItemLootCrate.list10.add(this); diff --git a/src/main/java/com/hbm/items/weapon/ItemMissile.java b/src/main/java/com/hbm/items/weapon/ItemMissile.java index 692750516..f7f181da3 100644 --- a/src/main/java/com/hbm/items/weapon/ItemMissile.java +++ b/src/main/java/com/hbm/items/weapon/ItemMissile.java @@ -3,53 +3,57 @@ package com.hbm.items.weapon; import java.util.List; import com.hbm.items.ItemCustomLore; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; public class ItemMissile extends ItemCustomLore { - + public final MissileFormFactor formFactor; public final MissileTier tier; public final MissileFuel fuel; public int fuelCap; public boolean launchable = true; - + public ItemMissile(MissileFormFactor form, MissileTier tier) { this(form, tier, form.defaultFuel); } - + public ItemMissile(MissileFormFactor form, MissileTier tier, MissileFuel fuel) { this.formFactor = form; this.tier = tier; this.fuel = fuel; this.setFuelCap(this.fuel.defaultCap); } - + public ItemMissile notLaunchable() { this.launchable = false; return this; } - + public ItemMissile setFuelCap(int fuelCap) { this.fuelCap = fuelCap; return this; } - + @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - list.add(EnumChatFormatting.ITALIC + this.tier.display); - + // Tier localized: missile.tier.tier0, missile.tier.tier1, ... + String tierKey = "missile.tier." + this.tier.name().toLowerCase(); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey(tierKey)); + if(!this.launchable) { - list.add(EnumChatFormatting.RED + "Not launchable!"); + list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.missile.notLaunchable")); } else { - list.add("Fuel: " + this.fuel.display); - if(this.fuelCap > 0) list.add("Fuel capacity: " + this.fuelCap + "mB"); + // Fuel localized & colored via enum helper + list.add(I18nUtil.resolveKey("gui.missile.fuel") + ": " + this.fuel.getDisplay()); + if(this.fuelCap > 0) list.add(I18nUtil.resolveKey("gui.missile.fuelCapacity") + ": " + this.fuelCap + "mB"); super.addInformation(itemstack, player, list, bool); } } - + public enum MissileFormFactor { ABM(MissileFuel.SOLID), MICRO(MissileFuel.SOLID), @@ -58,41 +62,48 @@ public class ItemMissile extends ItemCustomLore { HUGE(MissileFuel.KEROSENE_LOXY), ATLAS(MissileFuel.JETFUEL_LOXY), OTHER(MissileFuel.KEROSENE_PEROXIDE); - + protected MissileFuel defaultFuel; - + private MissileFormFactor(MissileFuel defaultFuel) { this.defaultFuel = defaultFuel; } } - + public enum MissileTier { TIER0("Tier 0"), TIER1("Tier 1"), TIER2("Tier 2"), TIER3("Tier 3"), TIER4("Tier 4"); - + public String display; - + private MissileTier(String display) { this.display = display; } } - + public enum MissileFuel { - SOLID(EnumChatFormatting.GOLD + "Solid Fuel (pre-fueled)", 0), - ETHANOL_PEROXIDE(EnumChatFormatting.AQUA + "Ethanol / Hydrogen Peroxide", 4_000), - KEROSENE_PEROXIDE(EnumChatFormatting.BLUE + "Kerosene / Hydrogen Peroxide", 8_000), - KEROSENE_LOXY(EnumChatFormatting.LIGHT_PURPLE + "Kerosene / Liquid Oxygen", 12_000), - JETFUEL_LOXY(EnumChatFormatting.RED + "Jet Fuel / Liquid Oxygen", 16_000); - - public String display; - public int defaultCap; - - private MissileFuel(String display, int defaultCap) { - this.display = display; + SOLID("missile.fuel.solid" + " (pre-fueled)", EnumChatFormatting.GOLD, 0), + ETHANOL_PEROXIDE("missile.fuel.ethanol_peroxide", EnumChatFormatting.AQUA, 4_000), + KEROSENE_PEROXIDE("missile.fuel.kerosene_peroxide", EnumChatFormatting.BLUE, 8_000), + KEROSENE_LOXY("missile.fuel.kerosene_loxy", EnumChatFormatting.LIGHT_PURPLE, 12_000), + JETFUEL_LOXY("missile.fuel.jetfuel_loxy", EnumChatFormatting.RED, 16_000); + + private final String key; + public final EnumChatFormatting color; + public final int defaultCap; + + private MissileFuel(String key, EnumChatFormatting color, int defaultCap) { + this.key = key; + this.color = color; this.defaultCap = defaultCap; } + + /** Returns a color localized string for display */ + public String getDisplay() { + return color + I18nUtil.resolveKey(this.key); + } } } From 3f641a843b29bcf562848fde8f3afe533ef1cb2f Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sat, 23 Aug 2025 17:51:47 -0600 Subject: [PATCH 443/491] I18n implementation for bomb parts --- .../java/com/hbm/items/bomb/ItemFleija.java | 27 ++++++++----------- src/main/java/com/hbm/items/bomb/ItemN2.java | 13 +++++---- .../java/com/hbm/items/bomb/ItemSolinium.java | 8 +++--- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/hbm/items/bomb/ItemFleija.java b/src/main/java/com/hbm/items/bomb/ItemFleija.java index d9424f67e..623b12d9b 100644 --- a/src/main/java/com/hbm/items/bomb/ItemFleija.java +++ b/src/main/java/com/hbm/items/bomb/ItemFleija.java @@ -3,7 +3,7 @@ package com.hbm.items.bomb; import java.util.List; import com.hbm.items.ModItems; - +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -12,22 +12,17 @@ import net.minecraft.item.ItemStack; public class ItemFleija extends Item { @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { - list.add("Used in:"); - list.add("F.L.E.I.J.A."); + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + list.add(I18nUtil.resolveKey("item.bomb_part.used_in")); + list.add(I18nUtil.resolveKey("item.fleija.name")); super.addInformation(itemstack, player, list, bool); } - @Override - public EnumRarity getRarity(ItemStack p_77613_1_) { - - if(this == ModItems.fleija_propellant) - { - return EnumRarity.rare; - } - - return EnumRarity.common; - } - + @Override + public EnumRarity getRarity(ItemStack itemstack) { + if (this == ModItems.fleija_propellant) { + return EnumRarity.rare; + } + return EnumRarity.common; + } } diff --git a/src/main/java/com/hbm/items/bomb/ItemN2.java b/src/main/java/com/hbm/items/bomb/ItemN2.java index c837fee78..feffaf6bf 100644 --- a/src/main/java/com/hbm/items/bomb/ItemN2.java +++ b/src/main/java/com/hbm/items/bomb/ItemN2.java @@ -2,17 +2,16 @@ package com.hbm.items.bomb; import java.util.List; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; public class ItemN2 extends Item { - - @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { - list.add("Used in:"); - list.add("N² Mine"); - } + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + list.add(I18nUtil.resolveKey("item.bomb_part.used_in")); + list.add(I18nUtil.resolveKey("item.n2.mine")); + } } diff --git a/src/main/java/com/hbm/items/bomb/ItemSolinium.java b/src/main/java/com/hbm/items/bomb/ItemSolinium.java index a04321ecb..f921d49e5 100644 --- a/src/main/java/com/hbm/items/bomb/ItemSolinium.java +++ b/src/main/java/com/hbm/items/bomb/ItemSolinium.java @@ -2,6 +2,7 @@ package com.hbm.items.bomb; import java.util.List; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -9,10 +10,9 @@ import net.minecraft.item.ItemStack; public class ItemSolinium extends Item { @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { - list.add("Used in:"); - list.add("Solinium Bomb"); + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + list.add(I18nUtil.resolveKey("item.bomb_part.used_in")); + list.add(I18nUtil.resolveKey("item.solinium.name")); super.addInformation(itemstack, player, list, bool); } } From 9a0cadaf9d91a698ae8814af7e27feb6c37549b6 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sat, 23 Aug 2025 18:10:46 -0600 Subject: [PATCH 444/491] I18n implementation for guns --- .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 145 +++++++++--------- src/main/resources/assets/hbm/lang/en_US.lang | 121 +++++++++++++++ src/main/resources/assets/hbm/lang/ru_RU.lang | 134 ++++++++++++++-- 3 files changed, 315 insertions(+), 85 deletions(-) diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index 704eb09a6..c43550972 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -29,6 +29,7 @@ import com.hbm.render.util.RenderScreenOverlay; import com.hbm.sound.AudioWrapper; import com.hbm.util.BobMathUtil; import com.hbm.util.EnumUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -55,10 +56,10 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I public long[] lastShot; /** [0;1] randomized every shot for various rendering applications */ public double shotRand = 0D; - + public static List secrets = new ArrayList(); public List recognizedMods = new ArrayList(); - + public static final DecimalFormatSymbols SYMBOLS_US = new DecimalFormatSymbols(Locale.US); public static final DecimalFormat FORMAT_DMG = new DecimalFormat("#.##", SYMBOLS_US); @@ -68,20 +69,20 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I public static float recoilRebound = 0.25F; public static float offsetVertical = 0; public static float offsetHorizontal = 0; - + public static void setupRecoil(float vertical, float horizontal, float decay, float rebound) { recoilVertical += vertical; recoilHorizontal += horizontal; recoilDecay = decay; recoilRebound = rebound; } - + public static void setupRecoil(float vertical, float horizontal) { setupRecoil(vertical, horizontal, 0.75F, 0.25F); } public static final String O_GUNCONFIG = "O_GUNCONFIG_"; - + public static final String KEY_DRAWN = "drawn"; public static final String KEY_AIMING = "aiming"; public static final String KEY_MODE = "mode_"; @@ -98,28 +99,28 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I public static final String KEY_LOCKEDON = "lockedon"; public static final String KEY_CANCELRELOAD = "cancel"; public static final String KEY_EQUIPPED = "eqipped"; - + public static ConcurrentHashMap loopedSounds = new ConcurrentHashMap(); public static float prevAimingProgress; public static float aimingProgress; - + /** NEVER ACCESS DIRECTLY - USE GETTER */ protected GunConfig[] configs_DNA; - + public Function LAMBDA_NAME_MUTATOR; public WeaponQuality quality; - + public GunConfig getConfig(ItemStack stack, int index) { GunConfig cfg = configs_DNA[index]; if(stack == null) return cfg; return WeaponModManager.eval(cfg, stack, O_GUNCONFIG + index, this, index); } - + public int getConfigCount() { return configs_DNA.length; } - + public ItemGunBaseNT(WeaponQuality quality, GunConfig... cfg) { this.setMaxStackSize(1); this.configs_DNA = cfg; @@ -130,7 +131,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I if(quality == WeaponQuality.LEGENDARY || quality == WeaponQuality.SECRET) this.secrets.add(this); this.setTextureName(RefStrings.MODID + ":gun_darter"); } - + public static enum WeaponQuality { A_SIDE, B_SIDE, @@ -148,73 +149,73 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I RELOADING, //forced delay after which a reload action happens, may be canceled (TBI) JAMMED, //forced delay due to jamming } - + public ItemGunBaseNT setNameMutator(Function lambda) { this.LAMBDA_NAME_MUTATOR = lambda; return this; } public String getItemStackDisplayName(ItemStack stack) { - + if(this.LAMBDA_NAME_MUTATOR != null) { String unloc = this.LAMBDA_NAME_MUTATOR.apply(stack); if(unloc != null) return (StatCollector.translateToLocal(unloc + ".name")).trim(); } - + return super.getItemStackDisplayName(stack); } - + @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - + int configs = this.configs_DNA.length; for(int i = 0; i < configs; i++) { GunConfig config = getConfig(stack, i); for(Receiver rec : config.getReceivers(stack)) { IMagazine mag = rec.getMagazine(stack); - list.add("Ammo: " + mag.getIconForHUD(stack, player).getDisplayName() + " " + mag.reportAmmoStateForHUD(stack, player)); + list.add(I18nUtil.resolveKey("gui.weapon.ammo") + ": " + mag.getIconForHUD(stack, player).getDisplayName() + " " + mag.reportAmmoStateForHUD(stack, player)); float dmg = rec.getBaseDamage(stack); - list.add("Base Damage: " + FORMAT_DMG.format(dmg)); + list.add(I18nUtil.resolveKey("gui.weapon.baseDamage") + ": " + FORMAT_DMG.format(dmg)); if(mag.getType(stack, player.inventory) instanceof BulletConfig) { BulletConfig bullet = (BulletConfig) mag.getType(stack, player.inventory); int min = (int) (bullet.projectilesMin * rec.getSplitProjectiles(stack)); int max = (int) (bullet.projectilesMax * rec.getSplitProjectiles(stack)); - list.add("Damage with current ammo: " + FORMAT_DMG.format(dmg * bullet.damageMult) + (min > 1 ? (" x" + (min != max ? (min + "-" + max) : min)) : "")); + list.add(I18nUtil.resolveKey("gui.weapon.damageWithAmmo") + ": " + FORMAT_DMG.format(dmg * bullet.damageMult) + (min > 1 ? (" x" + (min != max ? (min + "-" + max) : min)) : "")); } } - + float maxDura = config.getDurability(stack); if(maxDura > 0) { int dura = MathHelper.clamp_int((int)((maxDura - this.getWear(stack, i)) * 100 / maxDura), 0, 100); - list.add("Condition: " + dura + "%"); + list.add(I18nUtil.resolveKey("gui.weapon.condition") + ": " + dura + "%"); } - + for(ItemStack upgrade : WeaponModManager.getUpgradeItems(stack, i)) { list.add(EnumChatFormatting.YELLOW + upgrade.getDisplayName()); } } - + switch(this.quality) { - case A_SIDE: list.add(EnumChatFormatting.YELLOW + "Standard Arsenal"); break; - case B_SIDE: list.add(EnumChatFormatting.GOLD + "B-Side"); break; - case LEGENDARY: list.add(EnumChatFormatting.RED + "Legendary Weapon"); break; - case SPECIAL: list.add(EnumChatFormatting.AQUA + "Special Weapon"); break; - case UTILITY: list.add(EnumChatFormatting.GREEN + "Utility"); break; - case SECRET: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.DARK_RED : EnumChatFormatting.RED) + "SECRET"); break; - case DEBUG: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.YELLOW : EnumChatFormatting.GOLD) + "DEBUG"); break; + case A_SIDE: list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.weapon.quality.aside")); break; + case B_SIDE: list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("gui.weapon.quality.bside")); break; + case LEGENDARY: list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.weapon.quality.legendary")); break; + case SPECIAL: list.add(EnumChatFormatting.AQUA + I18nUtil.resolveKey("gui.weapon.quality.special")); break; + case UTILITY: list.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey("gui.weapon.quality.utility")); break; + case SECRET: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.DARK_RED : EnumChatFormatting.RED) + I18nUtil.resolveKey("gui.weapon.quality.secret")); break; + case DEBUG: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.YELLOW : EnumChatFormatting.GOLD) + I18nUtil.resolveKey("gui.weapon.quality.debug")); break; } - + if(Minecraft.getMinecraft().currentScreen instanceof GUIWeaponTable && !this.recognizedMods.isEmpty()) { - list.add(EnumChatFormatting.RED + "Accepts:"); + list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.weapon.accepts" + ":")); for(ComparableStack comp : this.recognizedMods) list.add(EnumChatFormatting.RED + " " + comp.toStack().getDisplayName()); } } - + @Override public boolean canHandleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind) { return keybind == EnumKeybind.GUN_PRIMARY || keybind == EnumKeybind.GUN_SECONDARY || keybind == EnumKeybind.GUN_TERTIARY || keybind == EnumKeybind.RELOAD; } - + @Override public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean newState) { handleKeybind(player, player.inventory, stack, keybind, newState); @@ -222,13 +223,13 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I public void handleKeybind(EntityLivingBase entity, IInventory inventory, ItemStack stack, EnumKeybind keybind, boolean newState) { if(!GeneralConfig.enableGuns) return; - + int configs = this.configs_DNA.length; - + for(int i = 0; i < configs; i++) { GunConfig config = getConfig(stack, i); LambdaContext ctx = new LambdaContext(config, entity, inventory, i); - + if(keybind == EnumKeybind.GUN_PRIMARY && newState && !getPrimary(stack, i)) { if(config.getPressPrimary(stack) != null) config.getPressPrimary(stack).accept(stack, ctx); this.setPrimary(stack, i, newState); continue; } if(keybind == EnumKeybind.GUN_PRIMARY && !newState && getPrimary(stack, i)) { if(config.getReleasePrimary(stack) != null) config.getReleasePrimary(stack).accept(stack, ctx); this.setPrimary(stack, i, newState); continue; } if(keybind == EnumKeybind.GUN_SECONDARY && newState && !getSecondary(stack, i)) { if(config.getPressSecondary(stack) != null) config.getPressSecondary(stack).accept(stack, ctx); this.setSecondary(stack, i, newState); continue; } @@ -243,7 +244,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I @Override public void onEquip(EntityPlayer player, ItemStack stack) { for(int i = 0; i < this.configs_DNA.length; i++) { - if(this.getLastAnim(stack, i) == AnimType.EQUIP && this.getAnimTimer(stack, i) < 5) continue; + if(this.getLastAnim(stack, i) == AnimType.EQUIP && this.getAnimTimer(stack, i) < 5) continue; playAnimation(player, stack, AnimType.EQUIP, i); this.setPrimary(stack, i, false); this.setSecondary(stack, i, false); @@ -251,7 +252,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I this.setReloadKey(stack, i, false); } } - + public static void playAnimation(EntityPlayer player, ItemStack stack, AnimType type, int index) { if(player instanceof EntityPlayerMP) { PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(type.ordinal(), 0, index), (EntityPlayerMP) player); @@ -262,7 +263,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I @Override public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isHeld) { - + if(!(entity instanceof EntityLivingBase)) return; EntityPlayer player = entity instanceof EntityPlayer ? (EntityPlayer) entity : null; int confNo = this.configs_DNA.length; @@ -272,17 +273,17 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I configs[i] = this.getConfig(stack, i); ctx[i] = new LambdaContext(configs[i], (EntityLivingBase) entity, player != null ? player.inventory : null, i); } - + if(world.isRemote) { - + if(isHeld && player == MainRegistry.proxy.me()) { - + /// DEBUG /// /*Vec3 offset = Vec3.createVectorHelper(-0.2, -0.1, 0.75); offset.rotateAroundX(-entity.rotationPitch / 180F * (float) Math.PI); offset.rotateAroundY(-entity.rotationYaw / 180F * (float) Math.PI); world.spawnParticle("flame", entity.posX + offset.xCoord, entity.posY + entity.getEyeHeight() + offset.yCoord, entity.posZ + offset.zCoord, 0, 0, 0);*/ - + /// AIMING /// prevAimingProgress = aimingProgress; boolean aiming = this.getIsAiming(stack); @@ -290,12 +291,12 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I if(aiming && aimingProgress < 1F) aimingProgress += aimSpeed; if(!aiming && aimingProgress > 0F) aimingProgress -= aimSpeed; aimingProgress = MathHelper.clamp_float(aimingProgress, 0F, 1F); - + /// SMOKE NODES /// for(int i = 0; i < confNo; i++) if(configs[i].getSmokeHandler(stack) != null) { configs[i].getSmokeHandler(stack).accept(stack, ctx[i]); } - + for(int i = 0; i < confNo; i++) { BiConsumer orchestra = configs[i].getOrchestra(stack); if(orchestra != null) orchestra.accept(stack, ctx[i]); @@ -303,18 +304,18 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I } return; } - + /// ON EQUIP /// if(player != null) { boolean wasHeld = this.getIsEquipped(stack); - + if(!wasHeld && isHeld && player != null) { this.onEquip(player, stack); } } - + this.setIsEquipped(stack, isHeld); - + /// RESET WHEN NOT EQUIPPED /// if(!isHeld) { for(int i = 0; i < confNo; i++) { @@ -329,13 +330,13 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I this.setReloadCancel(stack, false); return; } - + for(int i = 0; i < confNo; i++) for(int k = 0; k == 0 || (k < 2 && ArmorTrenchmaster.isTrenchMaster(player) && this.getState(stack, i) == GunState.RELOADING); k++) { BiConsumer orchestra = configs[i].getOrchestra(stack); if(orchestra != null) orchestra.accept(stack, ctx[i]); - + setAnimTimer(stack, i, getAnimTimer(stack, i) + 1); - + /// STTATE MACHINE /// int timer = this.getTimer(stack, i); if(timer > 0) this.setTimer(stack, i, timer - 1); @@ -371,7 +372,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I public static void setLastAnim(ItemStack stack, int index, AnimType value) { setValueInt(stack, KEY_LASTANIM + index, value.ordinal()); } public static int getAnimTimer(ItemStack stack, int index) { return getValueInt(stack, KEY_ANIMTIMER + index); } public static void setAnimTimer(ItemStack stack, int index, int value) { setValueInt(stack, KEY_ANIMTIMER + index, value); } - + // BUTTON STATES // public static boolean getPrimary(ItemStack stack, int index) { return getValueBool(stack, KEY_PRIMARY + index); } public static void setPrimary(ItemStack stack, int index, boolean value) { setValueBool(stack, KEY_PRIMARY + index, value); } @@ -387,28 +388,28 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I // EQUIPPED // public static boolean getIsEquipped(ItemStack stack) { return getValueBool(stack, KEY_EQUIPPED); } public static void setIsEquipped(ItemStack stack, boolean value) { setValueBool(stack, KEY_EQUIPPED, value); } - - + + /// UTIL /// public static int getValueInt(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getInteger(name); return 0; } public static void setValueInt(ItemStack stack, String name, int value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setInteger(name, value); } - + public static float getValueFloat(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getFloat(name); return 0; } public static void setValueFloat(ItemStack stack, String name, float value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setFloat(name, value); } - + public static byte getValueByte(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getByte(name); return 0; } public static void setValueByte(ItemStack stack, String name, byte value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setByte(name, value); } - + public static boolean getValueBool(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getBoolean(name); return false; } public static void setValueBool(ItemStack stack, String name, boolean value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setBoolean(name, value); } - + /** Wrapper for extra context used in most Consumer lambdas which are part of the guncfg */ public static class LambdaContext { public final GunConfig config; public final EntityLivingBase entity; public final IInventory inventory; public final int configIndex; - + public LambdaContext(GunConfig config, EntityLivingBase player, IInventory inventory, int configIndex) { this.config = config; this.entity = player; @@ -425,42 +426,42 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I @Override @SideOnly(Side.CLIENT) public void renderHUD(Pre event, ElementType type, EntityPlayer player, ItemStack stack) { - + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); - + if(type == ElementType.CROSSHAIRS) { event.setCanceled(true); GunConfig config = gun.getConfig(stack, 0); if(config.getHideCrosshair(stack) && aimingProgress >= 1F) return; RenderScreenOverlay.renderCustomCrosshairs(event.resolution, Minecraft.getMinecraft().ingameGUI, config.getCrosshair(stack)); } - + int confNo = this.configs_DNA.length; - + for(int i = 0; i < confNo; i++) { IHUDComponent[] components = gun.getConfig(stack, i).getHUDComponents(stack); - + if(components != null) for(IHUDComponent component : components) { int bottomOffset = 0; component.renderHUDComponent(event, type, player, stack, bottomOffset, i); bottomOffset += component.getComponentHeight(player, stack); } } - + Minecraft.getMinecraft().renderEngine.bindTexture(Gui.icons); } - + /*@Override public boolean getShareTag() { return false; }*/ // nbt sync dupe fix, didn't work - + public static class SmokeNode { - + public double forward = 0D; public double side = 0D; public double lift = 0D; public double alpha; public double width = 1D; - + public SmokeNode(double alpha) { this.alpha = alpha; } } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index cf7cfd858..12707d8ac 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6282,3 +6282,124 @@ gui.recipe.enabledFor=Enabled for gui.recipe.setRecipe=Click to set recipe tile.oc_cable_paintable.name=Paintable Network Cable + +# shared recipe / machine labels +gui.recipe.duration=Duration +gui.recipe.consumption=Consumption +gui.recipe.input=Input +gui.recipe.output=Output +gui.recipe.mB=mB +gui.recipe.atPressure=at +gui.recipe.autoswitch=Auto-switch group +gui.recipe.enabledFor=Enabled for +gui.recipe.setRecipe=Click to set recipe + +# --- Missile / parts (generic) --- +gui.missile.warhead=Warhead +gui.missile.strength=Strength +gui.missile.fuelType=Fuel Type +gui.missile.fuelAmount=Fuel amount +gui.missile.chipInaccuracy=Chip inaccuracy +gui.missile.finInaccuracy=Fin inaccuracy +gui.missile.size=Size +gui.missile.health=Health +gui.missile.fuel=Fuel +gui.missile.fuelCapacity=Fuel capacity +gui.missile.notLaunchable=Not launchable! + +# missile tiers +missile.tier.tier0=Tier 0 +missile.tier.tier1=Tier 1 +missile.tier.tier2=Tier 2 +missile.tier.tier3=Tier 3 +missile.tier.tier4=Tier 4 + +# missile fuel names +missile.fuel.solid=Solid Fuel +missile.fuel.ethanol_peroxide=Ethanol / Hydrogen Peroxide +missile.fuel.kerosene_peroxide=Kerosene / Hydrogen Peroxide +missile.fuel.kerosene_loxy=Kerosene / Liquid Oxygen +missile.fuel.jetfuel_loxy=Jet Fuel / Liquid Oxygen + +# warheads (used by parts) +warhead.he=HE +warhead.incendiary=Incendiary +warhead.cluster=Cluster +warhead.bunker_buster=Bunker Buster +warhead.nuclear=Nuclear +warhead.thermonuclear=Thermonuclear (TX) +warhead.n2=N² +warhead.balefire=BF +warhead.schrabidium=Schrabidium +warhead.taint=Taint +warhead.cloud=Cloud +warhead.turbine=Turbine + +# part keys +part.inaccuracy=Inaccuracy +part.size=Size +part.type=Type +part.strength=Strength +part.weight=Weight +part.topSize=Top size +part.bottomSize=Bottom size +part.fuelType=Fuel type +part.fuelAmount=Fuel amount +part.fuelConsumption=Fuel consumption +part.maxPayload=Max. payload +part.health=Health +part.rarity=Rarity +part.by=by +part.size.any=Any +part.size.none=None + +# fuel extras used by parts +fuel.xenon=Xenon +fuel.balefire=BF Rocket Fuel + +# part rarity keys (enum-based) +part.rarity.common=Common +part.rarity.uncommon=Uncommon +part.rarity.rare=Rare +part.rarity.epic=Epic +part.rarity.legendary=Legendary +part.rarity.strange=Strange + +# generic / fallback +general.na=N/A +error.generic=### I AM ERROR ### + +# --- Satellite chips --- +satchip.frequency=Satellite frequency +satchip.foeq=Gives you an achievement. That's it. +satchip.gerald.line1=Single use. +satchip.gerald.line2=Requires orbital module. +satchip.gerald.line3=Melter of CPUs, bane of every server owner. +satchip.laser=Allows to summon lasers with a 15 second cooldown. +satchip.mapper=Displays currently loaded chunks. +satchip.miner=Will deliver ore powders to a cargo landing pad. +satchip.lunar_miner=Mines moon turf to deliver it to a cargo landing pad. +satchip.radar=Shows a map of active entities. +satchip.resonator=Allows for teleportation with no cooldown. +satchip.scanner=Creates a topdown map of underground ores. + +# --- Items (bomb components) --- +item.bomb_part.used_in=Used in: +item.n2.mine=N² Mine +item.fleija.name=F.L.E.I.J.A. +item.solinium.name=Solinium Bomb + +# --- Weapon / gun tooltips --- +gui.weapon.ammo=Ammo +gui.weapon.baseDamage=Base Damage +gui.weapon.damageWithAmmo=Damage with current ammo +gui.weapon.condition=Condition +gui.weapon.accepts=Accepts + +gui.weapon.quality.aside=Standard Arsenal +gui.weapon.quality.bside=B-Side +gui.weapon.quality.legendary=Legendary Weapon +gui.weapon.quality.special=Special Weapon +gui.weapon.quality.utility=Utility +gui.weapon.quality.secret=SECRET +gui.weapon.quality.debug=DEBUG diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 09e404bdf..4b342ef2d 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -4588,19 +4588,6 @@ item.sat_radar.name=Спутник с радиолокационным зонд item.sat_resonator.name=Спутник с Зен-Резонатором item.sat_scanner.name=Спутник с модулем глубинно-ресурсного сканирования -item.sat.desc.frequency=Частота спутника -item.sat.desc.foeq=Даёт тебе достижение. Это всё. -item.sat.desc.gerald.single_use=Одноразовое. -item.sat.desc.gerald.orbital_module=Требует орбитальный модуль. -item.sat.desc.gerald.melter=Расплавитель процессоров, проклятие каждого владельца сервера. -item.sat.desc.laser=Позволяет вызывать лазеры с перезарядкой 15 секунд. -item.sat.desc.mapper=Отображает загруженные в данный момент чанки. -item.sat.desc.miner=Доставит рудные порошки на грузовую посадочную площадку. -item.sat.desc.lunar_miner=Добывает лунный грунт, чтобы доставить его на грузовую посадочную площадку. -item.sat.desc.radar=Показывает карту активных объектов. -item.sat.desc.resonator=Позволяет телепортироваться без перезарядки. -item.sat.desc.scanner=Создаёт карту подземных руд сверху вниз. - item.sawblade.name=Лезвие пилорамы item.schnitzel_vegan.name=Вегетарианский шницель item.schrabidium_axe.name=Шрабидиевый топор @@ -6625,4 +6612,125 @@ gui.recipe.autoswitch=Группа автоматического переклю gui.recipe.enabledFor=Включено для gui.recipe.setRecipe=Нажмите, чтобы выбрать рецепт +# shared recipe / machine labels +gui.recipe.duration=Время +gui.recipe.consumption=Потребление +gui.recipe.input=Вход +gui.recipe.output=Выход +gui.recipe.mB=mB +gui.recipe.atPressure=при +gui.recipe.autoswitch=Автопереключение группы +gui.recipe.enabledFor=Доступно для +gui.recipe.setRecipe=Нажмите, чтобы установить рецепт + +# --- Missile / parts (generic) --- +gui.missile.warhead=Боеголовка +gui.missile.strength=Мощность +gui.missile.fuelType=Тип топлива +gui.missile.fuelAmount=Количество топлива +gui.missile.chipInaccuracy=Неточность чипа +gui.missile.finInaccuracy=Неточность стабилизаторов +gui.missile.size=Размер +gui.missile.health=Прочность +gui.missile.fuel=Топливо +gui.missile.fuelCapacity=Ёмкость топлива +gui.missile.notLaunchable=Невозможно запустить! + +# missile tiers +missile.tier.tier0=Уровень 0 +missile.tier.tier1=Уровень 1 +missile.tier.tier2=Уровень 2 +missile.tier.tier3=Уровень 3 +missile.tier.tier4=Уровень 4 + +# missile fuel names +missile.fuel.solid=Твердое топливо +missile.fuel.ethanol_peroxide=Этанол / Перекись водорода +missile.fuel.kerosene_peroxide=Керосин / Перекись водорода +missile.fuel.kerosene_loxy=Керосин / Жидкий кислород +missile.fuel.jetfuel_loxy=Авиационное топливо / Жидкий кислород + +# warheads (used by parts) +warhead.he=HE +warhead.incendiary=Зажигательная +warhead.cluster=Кассетная +warhead.bunker_buster=Противобункерная +warhead.nuclear=Ядерная +warhead.thermonuclear=Термоядерная (TX) +warhead.n2=N² +warhead.balefire=Жар-ядерная +warhead.schrabidium=Шрабидевая +warhead.taint=Порча +warhead.cloud=Облако +warhead.turbine=Турбина + +# part keys +part.inaccuracy=Неточность +part.size=Размер +part.type=Тип +part.strength=Прочность +part.weight=Вес +part.topSize=Верхний размер +part.bottomSize=Нижний размер +part.fuelType=Тип топлива +part.fuelAmount=Количество топлива +part.fuelConsumption=Расход топлива +part.maxPayload=Макс. нагрузка +part.health=Прочность +part.rarity=Редкость +part.by=Автор +part.size.any=Любой +part.size.none=Нет + +# fuel extras used by parts +fuel.xenon=Ксенон +fuel.balefire=Жар-ракетное топливо + +# part rarity keys (enum-based, neuter) +part.rarity.common=Обычное +part.rarity.uncommon=Необычное +part.rarity.rare=Редкое +part.rarity.epic=Эпическое +part.rarity.legendary=Легендарное +part.rarity.strange=Странное + +# generic / fallback +general.na=Н/Д +error.generic=### Я ОШИБКА ### + +# --- Satellite chips --- +satchip.frequency=Частота спутника +satchip.foeq=Даёт достижение. И всё. +satchip.gerald.line1=Одноразовый. +satchip.gerald.line2=Требуется орбитальный модуль. +satchip.gerald.line3=Расплавитель процессоров, проклятие каждого владельца сервера. +satchip.laser=Позволяет вызывать лазеры с перезарядкой 15 секунд. +satchip.mapper=Отображает загруженные в данный момент чанки. +satchip.miner=Доставляет рудные порошки на посадочную площадку. +satchip.lunar_miner=Добывает лунный грунт и доставляет на посадочную площадку. +satchip.radar=Показывает карту активных сущностей +satchip.resonator=Позволяет телепортироваться без перезарядки. +satchip.scanner=Создаёт карту подземных руд сверху вниз. + +# --- Items (bomb components) --- +item.bomb_part.used_in=Используется в: +item.n2.mine=Мина N² +item.fleija.name=Ф.Л.Е.Я. +item.solinium.name=Синий Ополаскиватель + +# --- Weapon / gun tooltips --- +gui.weapon.ammo=Боеприпасы +gui.weapon.baseDamage=Базовый урон +gui.weapon.damageWithAmmo=Урон с текущими боеприпасами +gui.weapon.condition=Состояние +gui.weapon.accepts=Принимает + +gui.weapon.quality.aside=Стандартный арсенал +gui.weapon.quality.bside=Би-Сайд +gui.weapon.quality.legendary=Легендарное оружие +gui.weapon.quality.special=Специальное оружие +gui.weapon.quality.utility=Утилитарное +gui.weapon.quality.secret=СЕКРЕТ +gui.weapon.quality.debug=ОТЛАДКА + // Last updated 23.08.2025 by Bufka2011, MrKimkimora and TactiCOOLHimZa // From 9e83f241793e738ced67afbf89b7e2e0d62b9ed1 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sat, 23 Aug 2025 18:49:57 -0600 Subject: [PATCH 445/491] Blueprint Booklet --- src/main/resources/assets/hbm/lang/ru_RU.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 4b342ef2d..aba087791 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2333,6 +2333,7 @@ item.blades_desh.name=Деш-лезвия измельчителя item.blades_steel.name=Стальные лезвия измельчителя item.blades_titanium.name=Титановые лезвия измельчителя item.blowtorch.name=Паяльная лампа +item.blueprint_folder.name=Буклет чертежей item.blueprints.name=Чертежи item.board_copper.name=Медная панель item.boat_rubber.name=Резиновая лодка From 90522b98db3a3191eec5b031e143164c9929258d Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sat, 23 Aug 2025 18:52:10 -0600 Subject: [PATCH 446/491] Destroyed? --- src/main/resources/assets/hbm/lang/ru_RU.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index aba087791..3f1b7af63 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -6501,8 +6501,8 @@ trait.rbmx.xenon=Свинцовое отравление: %s trait.rbmx.xenonBurn=Функция разрушения свинца: %s trait.rbmx.xenonGen=Функция создания свинца: %s -trait.tile.cluster=Выпадает только тогда, когда разрушен игроком -trait.tile.depth=Может быть разрушен только взрывом +trait.tile.cluster=Выпадает только тогда, когда добыт игроком +trait.tile.depth=Может быть добыт только взрывом tool.ability.centrifuge=Авто-центрифуга tool.ability.crystallizer=Авто-кристаллизатор From f9369f5e027f4fc3f2503ffc5962ab36e4e3964d Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sat, 23 Aug 2025 19:14:29 -0600 Subject: [PATCH 447/491] Minor changes --- .../com/hbm/items/weapon/ItemMissile.java | 2 +- src/main/resources/assets/hbm/lang/en_US.lang | 1 + src/main/resources/assets/hbm/lang/ru_RU.lang | 48 ++----------------- 3 files changed, 5 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/hbm/items/weapon/ItemMissile.java b/src/main/java/com/hbm/items/weapon/ItemMissile.java index f7f181da3..e8fcd6964 100644 --- a/src/main/java/com/hbm/items/weapon/ItemMissile.java +++ b/src/main/java/com/hbm/items/weapon/ItemMissile.java @@ -85,7 +85,7 @@ public class ItemMissile extends ItemCustomLore { } public enum MissileFuel { - SOLID("missile.fuel.solid" + " (pre-fueled)", EnumChatFormatting.GOLD, 0), + SOLID("missile.fuel.solid.prefueled", EnumChatFormatting.GOLD, 0), ETHANOL_PEROXIDE("missile.fuel.ethanol_peroxide", EnumChatFormatting.AQUA, 4_000), KEROSENE_PEROXIDE("missile.fuel.kerosene_peroxide", EnumChatFormatting.BLUE, 8_000), KEROSENE_LOXY("missile.fuel.kerosene_loxy", EnumChatFormatting.LIGHT_PURPLE, 12_000), diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 12707d8ac..97fb3954c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6316,6 +6316,7 @@ missile.tier.tier4=Tier 4 # missile fuel names missile.fuel.solid=Solid Fuel +missile.fuel.solid.prefueled=Solid Fuel (pre-fueled) missile.fuel.ethanol_peroxide=Ethanol / Hydrogen Peroxide missile.fuel.kerosene_peroxide=Kerosene / Hydrogen Peroxide missile.fuel.kerosene_loxy=Kerosene / Liquid Oxygen diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 3f1b7af63..6515b44be 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -4649,7 +4649,7 @@ item.solid_fuel_presto_triplet.name=Сжатые топливные полень item.solid_fuel_presto_triplet_bf.name=Сжатые топливные поленья (Жар-пламя) item.solinium_core.name=Полустабильный солиниевый заряд item.solinium_igniter.name=Солиниевый импульсный воспламенитель -item.solinium_kit.name=Солиниевый комплект +item.solinium_kit.name=Комплект Синего Ополаскивателя item.solinium_propellant.name=Солиниевый сжимающий заряд item.sopsign.name=Боевой топор из знака С ОП item.spawn_duck.name=Золотое яйцо @@ -5001,49 +5001,6 @@ item.xanax.name=Препарат "НАКСА" против Дигаммы item.xanax.desc=Снимает 500mDRX item.zirconium_legs.name=Циркониевые штаны -item.custom_missile_part.he.type=HE -item.custom_missile_part.inc.type=Зажигательная -item.custom_missile_part.buster.type=Разрушитель бункеров -item.custom_missile_part.cluster.type=Кластерная -item.custom_missile_part.nuclear.type=Ядерная -item.custom_missile_part.tx.type=Термоядерная (TX) -item.custom_missile_part.n2.type=N² -item.custom_missile_part.balefire.type=Жар -item.custom_missile_part.schrab.type=Шрабидиевая -item.custom_missile_part.taint.type=Порча -item.custom_missile_part.cloud.type=Облако -item.custom_missile_part.turbine.type=Турбина -item.custom_missile_part.custom0.type=Custom0 -item.custom_missile_part.custom1.type=Custom1 -item.custom_missile_part.custom2.type=Custom2 -item.custom_missile_part.custom3.type=Custom3 -item.custom_missile_part.custom4.type=Custom4 -item.custom_missile_part.custom5.type=Custom5 -item.custom_missile_part.custom6.type=Custom6 -item.custom_missile_part.custom7.type=Custom7 -item.custom_missile_part.custom8.type=Custom8 -item.custom_missile_part.custom9.type=Custom9 - -item.custom_missile_part.fuel.any=Любое жидкое топливо -item.custom_missile_part.fuel.kerosene=Керосин / Пероксид -item.custom_missile_part.fuel.solid=Твёрдое топливо -item.custom_missile_part.fuel.hydrogen=Водород / Кислород -item.custom_missile_part.fuel.xenon=Ксеноновый газ -item.custom_missile_part.fuel.balefire=Ракетное жар-топливо / Пероксид - -item.custom_missile_part.rarity.common=§7Обычный -item.custom_missile_part.rarity.uncommon=§eНеобычный -item.custom_missile_part.rarity.rare=§bРедкий -item.custom_missile_part.rarity.epic=§dЭпический -item.custom_missile_part.rarity.legendary=§2Легендарный -item.custom_missile_part.rarity.strange=§3Странный - -item.missile.fuel.solid=Твёрдое топливо (предварительно заправленное) -item.missile.fuel.ethanol_peroxide=Этанол / Пероксид водорода -item.missile.fuel.kerosene_peroxide=Керосин / Пероксид водорода -item.missile.fuel.kerosene_loxy=Керосин / Жидкий кислород -item.missile.fuel.jetfuel_loxy=Авиационное топливо / Жидкий кислород - itemGroup.tabBlocks=Руды и блоки NTM itemGroup.tabConsumable=Расходные материалы и снаряжение NTM itemGroup.tabControl=Топливо и элементы механизмов NTM @@ -6645,7 +6602,8 @@ missile.tier.tier3=Уровень 3 missile.tier.tier4=Уровень 4 # missile fuel names -missile.fuel.solid=Твердое топливо +missile.fuel.solid=Твёрдое топливо +missile.fuel.solid.prefueled=Твёрдое топливо (предзаправлено) missile.fuel.ethanol_peroxide=Этанол / Перекись водорода missile.fuel.kerosene_peroxide=Керосин / Перекись водорода missile.fuel.kerosene_loxy=Керосин / Жидкий кислород From 54a5769deec35238ece3eebbe8cf9a301148b63c Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sat, 23 Aug 2025 20:10:04 -0600 Subject: [PATCH 448/491] Minor changes --- src/main/resources/assets/hbm/lang/ru_RU.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 6515b44be..b78bdcd05 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -3088,7 +3088,7 @@ item.gun_autoshotgun_sexy.name=Секси item.gun_autoshotgun_shredder.name=Шреддер item.gun_avenger.name=CZ57 “Авенджер” item.gun_b92.name=§9Энергетический бластер B92§r -item.gun_b92_ammo.name=§9Энергетический Элемент B92§r +item.gun_b92_ammo.name=§9Энергетический элемент B92§r item.gun_b93.name=§cМодифицированный бластер B93§r item.gun_benelli.name=Benelli Autoshotgun item.gun_bf.name=BEL @@ -4219,7 +4219,7 @@ item.powder_xe135.name=Порошок ксенона-135 item.powder_xe135_tiny.name=Кучка порошка ксенона-135 item.powder_yellowcake.name=Жёлтый кек item.powder_zirconium.name=Циркониевый порошок -item.power_net_tool.name=Анализатор энергосети +item.power_net_tool.name=Анализатор электросети item.pipette.name=Пипетка item.pipette_boron.name=Борная пипетка item.pipette_laboratory.name=Лабораторная пипетка From 4903b2e189ca526e524345ba7a6f8fe731af501a Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:18:37 -0700 Subject: [PATCH 449/491] Update TileEntityMachineArcFurnaceLarge.java --- .../tileentity/machine/TileEntityMachineArcFurnaceLarge.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index 6c9be1f71..7af24b639 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -29,6 +29,7 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CrucibleUtil; +import com.hbm.util.ItemStackUtil; import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.i18n.I18nUtil; @@ -400,6 +401,8 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl liquids.add(matStack.copy()); } + + public static int getStackAmount(List stack) { int amount = 0; for(MaterialStack mat : stack) amount += mat.amount; From 52149b098e05c470decc74d733d8d46dde548cb8 Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:31:37 -0700 Subject: [PATCH 450/491] Update AE2CompatHandler.java --- src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java index b40571179..968899426 100644 --- a/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java +++ b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java @@ -14,5 +14,6 @@ public class AE2CompatHandler { @Optional.Method(modid = "appliedenergistics2") private static void registerHandler() { AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MSUExternalStorageHandler()); + AEApi.instance().registries().externalStorage().addExternalStorageInterface(new AFLExternalStorageHandler()); } } From 0a99397f3067c658b21c423a9734dbe39939dc40 Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:34:07 -0700 Subject: [PATCH 451/491] Add files via upload --- .../ae2/AFLExternalStorageHandler.java | 34 +++++++++++ .../ae2/ArcFurnaceLargeMEInventory.java | 60 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/main/java/com/hbm/handler/ae2/AFLExternalStorageHandler.java create mode 100644 src/main/java/com/hbm/handler/ae2/ArcFurnaceLargeMEInventory.java diff --git a/src/main/java/com/hbm/handler/ae2/AFLExternalStorageHandler.java b/src/main/java/com/hbm/handler/ae2/AFLExternalStorageHandler.java new file mode 100644 index 000000000..37ff769e3 --- /dev/null +++ b/src/main/java/com/hbm/handler/ae2/AFLExternalStorageHandler.java @@ -0,0 +1,34 @@ +package com.hbm.handler.ae2; + +import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge; +import com.hbm.tileentity.TileEntityProxyCombo; +import cpw.mods.fml.common.Optional; + +import appeng.api.networking.security.BaseActionSource; +import appeng.api.storage.IExternalStorageHandler; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.StorageChannel; +import appeng.me.storage.MEMonitorIInventory; +import appeng.util.inv.IMEAdaptor; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +@Optional.InterfaceList({@Optional.Interface(iface = "appeng.api.storage.IExternalStorageHandler", modid = "appliedenergistics2")}) +public class AFLExternalStorageHandler implements IExternalStorageHandler { + + public AFLExternalStorageHandler() {} + + @Override + public boolean canHandle(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource mySrc) { + boolean coreProxy = te instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) te).getTile() instanceof TileEntityMachineArcFurnaceLarge; + return channel == StorageChannel.ITEMS && (te instanceof TileEntityMachineArcFurnaceLarge || coreProxy); + } + + @Override + public IMEInventory getInventory(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource src) { + if (!canHandle(te, d, channel, src)) return null; + if (te instanceof TileEntityProxyCombo) return new MEMonitorIInventory(new IMEAdaptor(new ArcFurnaceLargeMEInventory((TileEntityMachineArcFurnaceLarge) ((TileEntityProxyCombo)te).getTile()), src)) {}; + return new MEMonitorIInventory(new IMEAdaptor(new ArcFurnaceLargeMEInventory((TileEntityMachineArcFurnaceLarge) te), src)) {}; + } + +} diff --git a/src/main/java/com/hbm/handler/ae2/ArcFurnaceLargeMEInventory.java b/src/main/java/com/hbm/handler/ae2/ArcFurnaceLargeMEInventory.java new file mode 100644 index 000000000..5698bebed --- /dev/null +++ b/src/main/java/com/hbm/handler/ae2/ArcFurnaceLargeMEInventory.java @@ -0,0 +1,60 @@ +package com.hbm.handler.ae2; + +import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge; +import com.hbm.tileentity.TileEntityProxyCombo; + +import cpw.mods.fml.common.Optional; + +import appeng.api.AEApi; +import appeng.api.config.Actionable; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; +import net.minecraft.item.ItemStack; + +@Optional.InterfaceList({@Optional.Interface(iface = "appeng.api.storage.IMEInventory", modid = "appliedenergistics2")}) +public class ArcFurnaceLargeMEInventory implements IMEInventory { + + private TileEntityMachineArcFurnaceLarge afl; + + public ArcFurnaceLargeMEInventory(TileEntityMachineArcFurnaceLarge afl) { + this.afl = afl; + } + + @Override + public IAEItemStack injectItems(IAEItemStack input, Actionable type, BaseActionSource src) { + ItemStack is = input.getItemStack(); + is = afl.distributeInput(is, type == Actionable.MODULATE); + + if(is == null) return null; + return AEApi.instance().storage().createItemStack(is); + } + + @Override + public IAEItemStack extractItems(IAEItemStack request, Actionable mode, BaseActionSource src) { + ItemStack is = request.getItemStack(); + is = afl.collectRequested(is, mode == Actionable.MODULATE); + + if(is == null) return null; + return AEApi.instance().storage().createItemStack(is); + } + + @Override + public IItemList getAvailableItems(IItemList out) { + ItemStack is; + for(int i = 0; i < 25; i++) { + is = afl.getAvailableItemFromSlot(i); + if(is != null) out.add(AEApi.instance().storage().createItemStack(is)); + } + + return out; + } + + @Override + public StorageChannel getChannel() { + return StorageChannel.ITEMS; + } + +} From 13b398882988caf079a8e2e0533297f5da0ac6a9 Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:42:15 -0700 Subject: [PATCH 452/491] Update ContainerMachineArcFurnaceLarge.java --- .../inventory/container/ContainerMachineArcFurnaceLarge.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java index 12318fe1d..05109bac9 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java @@ -65,11 +65,12 @@ public class ContainerMachineArcFurnaceLarge extends Container { } else if(rStack.getItem() instanceof ItemMachineUpgrade) { if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 4, 5, false)) return null; } else { - if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 5, 25, false)) return null; + stack = furnace.distributeInput(stack, true); + if(stack != null && stack.stackSize == rStack.stackSize) return null; } } - if(stack.stackSize == 0) { + if(stack == null || stack.stackSize == 0) { slot.putStack((ItemStack) null); } else { slot.onSlotChanged(); From f0bd84fa477ea44afde2fb09b8ce6067c17962f7 Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 21:02:52 -0700 Subject: [PATCH 453/491] Update TileEntityMachineArcFurnaceLarge.java From 14f7668a9a28f0b99bb8c2be240d5628fdc16f1e Mon Sep 17 00:00:00 2001 From: R-Kaenbyou <152870189+R-Kaenbyou@users.noreply.github.com> Date: Sat, 23 Aug 2025 21:09:37 -0700 Subject: [PATCH 454/491] Update TileEntityMachineArcFurnaceLarge.java --- .../TileEntityMachineArcFurnaceLarge.java | 105 +++++++++++++++++- 1 file changed, 104 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index 7af24b639..6968f8b1a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -401,7 +401,110 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl liquids.add(matStack.copy()); } - + //Returns what is unused, or null if used up + public ItemStack distributeInput(ItemStack is, boolean modulate) { + if(is.stackSize == 0) return null; + ItemStack split; + + //Slots 0,1,2 + if(is.getItem() == ModItems.arc_electrode) { + for(int i = 0; i < 3; i++) { + if(slots[i] == null) { + split = is.splitStack(1); + if(modulate) this.setInventorySlotContents(i, split); + } + if (is.stackSize == 0) return null; + } + //Don't tell me you're gonna add an arc furnace recipe smelting electrodes + return is; + } + + //Slots 5-24 + ArcFurnaceRecipe recipe = ArcFurnaceRecipes.getOutput(is, this.liquidMode); + if(recipe != null) { + int maxStackSize = this.liquidMode ? 64 : recipe.solidOutput.getMaxStackSize() / recipe.solidOutput.stackSize; + maxStackSize = Math.min(maxStackSize, Math.min(is.getMaxStackSize(), getMaxInputSize())); + + //Scan + for(int i = 5; i < 25; i++){ + if(slots[i] == null) { + if(is.stackSize > maxStackSize) { + split = is.splitStack(maxStackSize); + if(modulate) slots[i] = split; + } else { + if(modulate) slots[i] = is; + return null; + } + } else if(ItemStackUtil.areStacksCompatible(is, slots[i]) && slots[i].stackSize < maxStackSize) { + if(is.stackSize > maxStackSize - slots[i].stackSize) { + is.splitStack(maxStackSize - slots[i].stackSize); + if(modulate) slots[i].stackSize = maxStackSize; + } else { + if(modulate) slots[i].stackSize += is.stackSize; + return null; + } + } + } + } + return is; + } + + //Returns requested ItemStack + public ItemStack collectRequested(ItemStack is, boolean modulate) { + int req = is.stackSize; + if(req == 0) return null; + + //Slots 0,1,2 + if(is.getItem() != ModItems.arc_electrode) { + for(int i = 0; i < 3; i++) { + if(slots[i] == null) continue; + if(ItemStackUtil.areStacksCompatible(is, slots[i])) { + if(req > slots[i].stackSize) { + req -= slots[i].stackSize; + if(modulate) slots[i] = null; + } else if(req < slots[i].stackSize) { + if(modulate) slots[i].stackSize -= req; + return is; + } else { + if(modulate) slots[i] = null; + return is; + } + } + } + } + + //Slots 5-24 + if(ArcFurnaceRecipes.getOutput(is, this.liquidMode) == null) { + for(int i = 5; i < 25; i++) { + if(slots[i] == null) continue; + if(ItemStackUtil.areStacksCompatible(is, slots[i])) { + if(req > slots[i].stackSize) { + req -= slots[i].stackSize; + if(modulate) slots[i] = null; + } else if(req < slots[i].stackSize) { + if(modulate) slots[i].stackSize -= req; + return is; + } else { + if(modulate) slots[i] = null; + return is; + } + } + } + } + + is.stackSize -= req; + if(is.stackSize == 0) return null; + return is; + } + + //Return ItemStack in slot, null if unavailable + public ItemStack getAvailableItemFromSlot(int slot) { + if(slots[slot] == null) return null; + if(slot < 3 && slots[slot].getItem() == ModItems.arc_electrode) return null; + else if(slot > 4 && ArcFurnaceRecipes.getOutput(slots[slot], this.liquidMode) != null) return null; + else if(slot == 3 || slot == 4) return null; + else return slots[slot]; + } public static int getStackAmount(List stack) { int amount = 0; From 1d18d832e705fddc5ba1fb74a515c24e0327d7ed Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sun, 24 Aug 2025 11:02:13 -0600 Subject: [PATCH 455/491] Sorting --- src/main/resources/assets/hbm/lang/en_US.lang | 240 ++++++++---------- 1 file changed, 107 insertions(+), 133 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 97fb3954c..2fb55b6b7 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1057,6 +1057,16 @@ desc.gui.zirnox.pressure=§6Pressure§r$Pressure can be reduced by venting CO2.$ desc.gui.zirnox.warning1=§cError:§r Water is required for$the reactor to function properly! desc.gui.zirnox.warning2=§cError:§r CO2 is required for$the reactor to function properly! +gui.recipe.duration=Duration +gui.recipe.consumption=Consumption +gui.recipe.input=Input +gui.recipe.output=Output +gui.recipe.mB=mB +gui.recipe.atPressure=at +gui.recipe.autoswitch=Auto-switch group +gui.recipe.enabledFor=Enabled for +gui.recipe.setRecipe=Click to set recipe + desc.item.ammo.con_accuracy2=- Highly decreased accuracy desc.item.ammo.con_damage=- Highly decreased damage desc.item.ammo.con_heavy_wear=- Highly increased wear @@ -1387,6 +1397,8 @@ gun.name.win20Poly=Winchester Model 20 Polymer gun.name.win20Satur=Winchester Model 20 D-25A gun.name.zomg=EMC101 Prismatic Negative Energy Cannon + + hadron.analysis=Analyzing... hadron.buttonOn=Analysis Chamber (if present) is ON hadron.buttonOff=Analysis Chamber is OFF @@ -2994,6 +3006,18 @@ item.gun_tesla_cannon.name=Tesla Cannon item.gun_uzi.name=Uzi item.gun_uzi_richter.name=Richter item.gun_uzi_akimbo.name=Uzis +gui.weapon.ammo=Ammo +gui.weapon.baseDamage=Base Damage +gui.weapon.damageWithAmmo=Damage with current ammo +gui.weapon.condition=Condition +gui.weapon.accepts=Accepts +gui.weapon.quality.aside=Standard Arsenal +gui.weapon.quality.bside=B-Side +gui.weapon.quality.legendary=Legendary Weapon +gui.weapon.quality.special=Special Weapon +gui.weapon.quality.utility=Utility +gui.weapon.quality.secret=SECRET +gui.weapon.quality.debug=DEBUG item.hand_drill.name=Hand Drill item.hand_drill_desh.name=Desh Hand Drill item.hazmat_boots.name=Hazmat Boots @@ -3346,6 +3370,85 @@ item.missile_strong.name=Strong HE Missile item.missile_taint.name=Taint-Tipped Missile item.missile_volcano.name=Tectonic Missile item.missile_volcano.desc=Using the power of nuclear explosives, we can summon a volcano! + +gui.missile.warhead=Warhead +gui.missile.strength=Strength +gui.missile.fuelType=Fuel Type +gui.missile.fuelAmount=Fuel amount +gui.missile.chipInaccuracy=Chip inaccuracy +gui.missile.finInaccuracy=Fin inaccuracy +gui.missile.size=Size +gui.missile.health=Health +gui.missile.fuel=Fuel +gui.missile.fuelCapacity=Fuel capacity +gui.missile.notLaunchable=Not launchable! + +missile.tier.tier0=Tier 0 +missile.tier.tier1=Tier 1 +missile.tier.tier2=Tier 2 +missile.tier.tier3=Tier 3 +missile.tier.tier4=Tier 4 + +missile.fuel.solid=Solid Fuel +missile.fuel.solid.prefueled=Solid Fuel (pre-fueled) +missile.fuel.ethanol_peroxide=Ethanol / Hydrogen Peroxide +missile.fuel.kerosene_peroxide=Kerosene / Hydrogen Peroxide +missile.fuel.kerosene_loxy=Kerosene / Liquid Oxygen +missile.fuel.jetfuel_loxy=Jet Fuel / Liquid Oxygen + +warhead.he=HE +warhead.incendiary=Incendiary +warhead.cluster=Cluster +warhead.bunker_buster=Bunker Buster +warhead.nuclear=Nuclear +warhead.thermonuclear=Thermonuclear (TX) +warhead.n2=N² +warhead.balefire=BF +warhead.schrabidium=Schrabidium +warhead.taint=Taint +warhead.cloud=Cloud +warhead.turbine=Turbine + +part.inaccuracy=Inaccuracy +part.size=Size +part.type=Type +part.strength=Strength +part.weight=Weight +part.topSize=Top size +part.bottomSize=Bottom size +part.fuelType=Fuel type +part.fuelAmount=Fuel amount +part.fuelConsumption=Fuel consumption +part.maxPayload=Max. payload +part.health=Health +part.rarity=Rarity +part.by=by +part.size.any=Any +part.size.none=None + +fuel.xenon=Xenon +fuel.balefire=BF Rocket Fuel + +part.rarity.common=Common +part.rarity.uncommon=Uncommon +part.rarity.rare=Rare +part.rarity.epic=Epic +part.rarity.legendary=Legendary +part.rarity.strange=Strange + +satchip.frequency=Satellite frequency +satchip.foeq=Gives you an achievement. That's it. +satchip.gerald.line1=Single use. +satchip.gerald.line2=Requires orbital module. +satchip.gerald.line3=Melter of CPUs, bane of every server owner. +satchip.laser=Allows to summon lasers with a 15 second cooldown. +satchip.mapper=Displays currently loaded chunks. +satchip.miner=Will deliver ore powders to a cargo landing pad. +satchip.lunar_miner=Mines moon turf to deliver it to a cargo landing pad. +satchip.radar=Shows a map of active entities. +satchip.resonator=Allows for teleportation with no cooldown. +satchip.scanner=Creates a topdown map of underground ores. + item.mold_base.name=Blank Foundry Mold item.mold.name=Foundry Mold item.morning_glory.name=Morning Glory @@ -5713,6 +5816,10 @@ tile.nuke_n45.name=N45 Naval Mine tile.nuke_prototype.name=The Prototype tile.nuke_solinium.name=The Blue Rinse tile.nuke_tsar.name=Tsar Bomba +item.bomb_part.used_in=Used in: +item.n2.mine=N² Mine +item.fleija.name=F.L.E.I.J.A. +item.solinium.name=Solinium Bomb tile.oil_duct.name=Oil Pipe tile.oil_duct_solid.name=Coated Oil Pipe tile.oil_pipe.name=Crude Oil Extraction Pipe @@ -6270,137 +6377,4 @@ desc.gui.upgrade.overdrive= * §7Overdrive§r: Stacks to level 3 desc.gui.upgrade.power= * §1Power-Saving§r: Stacks to level 3 desc.gui.upgrade.speed= * §4Speed§r: Stacks to level 3 -# Shared recipe labels -gui.recipe.duration=Duration -gui.recipe.consumption=Consumption -gui.recipe.input=Input -gui.recipe.output=Output -gui.recipe.mB=mB -gui.recipe.atPressure=at -gui.recipe.autoswitch=Auto-switch group -gui.recipe.enabledFor=Enabled for -gui.recipe.setRecipe=Click to set recipe - tile.oc_cable_paintable.name=Paintable Network Cable - -# shared recipe / machine labels -gui.recipe.duration=Duration -gui.recipe.consumption=Consumption -gui.recipe.input=Input -gui.recipe.output=Output -gui.recipe.mB=mB -gui.recipe.atPressure=at -gui.recipe.autoswitch=Auto-switch group -gui.recipe.enabledFor=Enabled for -gui.recipe.setRecipe=Click to set recipe - -# --- Missile / parts (generic) --- -gui.missile.warhead=Warhead -gui.missile.strength=Strength -gui.missile.fuelType=Fuel Type -gui.missile.fuelAmount=Fuel amount -gui.missile.chipInaccuracy=Chip inaccuracy -gui.missile.finInaccuracy=Fin inaccuracy -gui.missile.size=Size -gui.missile.health=Health -gui.missile.fuel=Fuel -gui.missile.fuelCapacity=Fuel capacity -gui.missile.notLaunchable=Not launchable! - -# missile tiers -missile.tier.tier0=Tier 0 -missile.tier.tier1=Tier 1 -missile.tier.tier2=Tier 2 -missile.tier.tier3=Tier 3 -missile.tier.tier4=Tier 4 - -# missile fuel names -missile.fuel.solid=Solid Fuel -missile.fuel.solid.prefueled=Solid Fuel (pre-fueled) -missile.fuel.ethanol_peroxide=Ethanol / Hydrogen Peroxide -missile.fuel.kerosene_peroxide=Kerosene / Hydrogen Peroxide -missile.fuel.kerosene_loxy=Kerosene / Liquid Oxygen -missile.fuel.jetfuel_loxy=Jet Fuel / Liquid Oxygen - -# warheads (used by parts) -warhead.he=HE -warhead.incendiary=Incendiary -warhead.cluster=Cluster -warhead.bunker_buster=Bunker Buster -warhead.nuclear=Nuclear -warhead.thermonuclear=Thermonuclear (TX) -warhead.n2=N² -warhead.balefire=BF -warhead.schrabidium=Schrabidium -warhead.taint=Taint -warhead.cloud=Cloud -warhead.turbine=Turbine - -# part keys -part.inaccuracy=Inaccuracy -part.size=Size -part.type=Type -part.strength=Strength -part.weight=Weight -part.topSize=Top size -part.bottomSize=Bottom size -part.fuelType=Fuel type -part.fuelAmount=Fuel amount -part.fuelConsumption=Fuel consumption -part.maxPayload=Max. payload -part.health=Health -part.rarity=Rarity -part.by=by -part.size.any=Any -part.size.none=None - -# fuel extras used by parts -fuel.xenon=Xenon -fuel.balefire=BF Rocket Fuel - -# part rarity keys (enum-based) -part.rarity.common=Common -part.rarity.uncommon=Uncommon -part.rarity.rare=Rare -part.rarity.epic=Epic -part.rarity.legendary=Legendary -part.rarity.strange=Strange - -# generic / fallback -general.na=N/A -error.generic=### I AM ERROR ### - -# --- Satellite chips --- -satchip.frequency=Satellite frequency -satchip.foeq=Gives you an achievement. That's it. -satchip.gerald.line1=Single use. -satchip.gerald.line2=Requires orbital module. -satchip.gerald.line3=Melter of CPUs, bane of every server owner. -satchip.laser=Allows to summon lasers with a 15 second cooldown. -satchip.mapper=Displays currently loaded chunks. -satchip.miner=Will deliver ore powders to a cargo landing pad. -satchip.lunar_miner=Mines moon turf to deliver it to a cargo landing pad. -satchip.radar=Shows a map of active entities. -satchip.resonator=Allows for teleportation with no cooldown. -satchip.scanner=Creates a topdown map of underground ores. - -# --- Items (bomb components) --- -item.bomb_part.used_in=Used in: -item.n2.mine=N² Mine -item.fleija.name=F.L.E.I.J.A. -item.solinium.name=Solinium Bomb - -# --- Weapon / gun tooltips --- -gui.weapon.ammo=Ammo -gui.weapon.baseDamage=Base Damage -gui.weapon.damageWithAmmo=Damage with current ammo -gui.weapon.condition=Condition -gui.weapon.accepts=Accepts - -gui.weapon.quality.aside=Standard Arsenal -gui.weapon.quality.bside=B-Side -gui.weapon.quality.legendary=Legendary Weapon -gui.weapon.quality.special=Special Weapon -gui.weapon.quality.utility=Utility -gui.weapon.quality.secret=SECRET -gui.weapon.quality.debug=DEBUG From 7793f9fa24d04f238d7c406ac254937776407f22 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sun, 24 Aug 2025 11:09:03 -0600 Subject: [PATCH 456/491] More sorting --- src/main/resources/assets/hbm/lang/en_US.lang | 5 +- src/main/resources/assets/hbm/lang/ru_RU.lang | 253 ++++++++---------- 2 files changed, 108 insertions(+), 150 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 2fb55b6b7..c536a9fb5 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1397,8 +1397,6 @@ gun.name.win20Poly=Winchester Model 20 Polymer gun.name.win20Satur=Winchester Model 20 D-25A gun.name.zomg=EMC101 Prismatic Negative Energy Cannon - - hadron.analysis=Analyzing... hadron.buttonOn=Analysis Chamber (if present) is ON hadron.buttonOff=Analysis Chamber is OFF @@ -6378,3 +6376,6 @@ desc.gui.upgrade.power= * §1Power-Saving§r: Stacks to level 3 desc.gui.upgrade.speed= * §4Speed§r: Stacks to level 3 tile.oc_cable_paintable.name=Paintable Network Cable + +general.na=N/A +error.generic=### I AM ERROR ### diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index b78bdcd05..54a873aa4 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1054,6 +1054,16 @@ desc.gui.zirnox.pressure=§6Давление§r$Давление можно сн desc.gui.zirnox.warning1=§cВнимание:§r Вода необходима для$правильной работы реактора! desc.gui.zirnox.warning2=§cВнимание:§r CO2 необходим для$правильной работы реактора! +gui.recipe.duration=Длительность +gui.recipe.consumption=Потребление +gui.recipe.input=Вход +gui.recipe.output=Выход +gui.recipe.mB=mB +gui.recipe.atPressure=при давлении в +gui.recipe.autoswitch=Группа автоматического переключения +gui.recipe.enabledFor=Включено для +gui.recipe.setRecipe=Нажмите, чтобы выбрать рецепт + desc.item.ammo.con_accuracy2=- Сильно сниженная точность desc.item.ammo.con_damage=- Сильно сниженный урон desc.item.ammo.con_heavy_wear=- Сильно увеличенный износ @@ -3246,6 +3256,18 @@ item.gun_uboinik_ammo.name=Дробь 12x70 калибра (LEGACY) item.gun_uzi.name=IMI Узи item.gun_uzi_richter.name=Richter item.gun_uzi_akimbo.name=Акимбо Узи +gui.weapon.ammo=Боеприпасы +gui.weapon.baseDamage=Базовый урон +gui.weapon.damageWithAmmo=Урон с текущими боеприпасами +gui.weapon.condition=Состояние +gui.weapon.accepts=Принимает +gui.weapon.quality.aside=Стандартный арсенал +gui.weapon.quality.bside=Би-Сайд +gui.weapon.quality.legendary=Легендарное оружие +gui.weapon.quality.special=Специальное оружие +gui.weapon.quality.utility=Утилитарное +gui.weapon.quality.secret=СЕКРЕТ +gui.weapon.quality.debug=ОТЛАДКА item.gun_uzi_ammo.name=Патроны кал. 22LR (LEGACY) item.gun_uzi_saturnite.name=Сатурнитовый Узи item.gun_uzi_saturnite_silencer.name=Сатурнитовый Узи с глушителем @@ -3609,6 +3631,84 @@ item.missile_strong.name=Мощная фугасная ракета item.missile_taint.name=Зараженная ракета item.missile_volcano.name=Тектоническая ракета item.missile_volcano.desc=Используя силу ядерной взрывчатки, мы можем вызвать вулкан! + +gui.missile.warhead=Боеголовка +gui.missile.strength=Мощность +gui.missile.fuelType=Тип топлива +gui.missile.fuelAmount=Количество топлива +gui.missile.chipInaccuracy=Неточность чипа +gui.missile.finInaccuracy=Неточность стабилизаторов +gui.missile.size=Размер +gui.missile.health=Прочность +gui.missile.fuel=Топливо +gui.missile.fuelCapacity=Ёмкость топлива +gui.missile.notLaunchable=Невозможно запустить! + +missile.tier.tier0=Уровень 0 +missile.tier.tier1=Уровень 1 +missile.tier.tier2=Уровень 2 +missile.tier.tier3=Уровень 3 +missile.tier.tier4=Уровень 4 +missile.fuel.solid=Твёрдое топливо +missile.fuel.solid.prefueled=Твёрдое топливо (предзаправлено) +missile.fuel.ethanol_peroxide=Этанол / Перекись водорода +missile.fuel.kerosene_peroxide=Керосин / Перекись водорода +missile.fuel.kerosene_loxy=Керосин / Жидкий кислород +missile.fuel.jetfuel_loxy=Авиационное топливо / Жидкий кислород + +warhead.he=HE +warhead.incendiary=Зажигательная +warhead.cluster=Кассетная +warhead.bunker_buster=Противобункерная +warhead.nuclear=Ядерная +warhead.thermonuclear=Термоядерная (TX) +warhead.n2=N² +warhead.balefire=Жар-ядерная +warhead.schrabidium=Шрабидевая +warhead.taint=Порча +warhead.cloud=Облако +warhead.turbine=Турбина + +part.inaccuracy=Неточность +part.size=Размер +part.type=Тип +part.strength=Прочность +part.weight=Вес +part.topSize=Верхний размер +part.bottomSize=Нижний размер +part.fuelType=Тип топлива +part.fuelAmount=Количество топлива +part.fuelConsumption=Расход топлива +part.maxPayload=Макс. нагрузка +part.health=Прочность +part.rarity=Редкость +part.by=Автор +part.size.any=Любой +part.size.none=Нет + +fuel.xenon=Ксенон +fuel.balefire=Жар-ракетное топливо + +part.rarity.common=Обычное +part.rarity.uncommon=Необычное +part.rarity.rare=Редкое +part.rarity.epic=Эпическое +part.rarity.legendary=Легендарное +part.rarity.strange=Странное + +satchip.frequency=Частота спутника +satchip.foeq=Даёт достижение. И всё. +satchip.gerald.line1=Одноразовый. +satchip.gerald.line2=Требуется орбитальный модуль. +satchip.gerald.line3=Расплавитель процессоров, проклятие каждого владельца сервера. +satchip.laser=Позволяет вызывать лазеры с перезарядкой 15 секунд. +satchip.mapper=Отображает загруженные в данный момент чанки. +satchip.miner=Доставляет рудные порошки на посадочную площадку. +satchip.lunar_miner=Добывает лунный грунт и доставляет на посадочную площадку. +satchip.radar=Показывает карту активных сущностей +satchip.resonator=Позволяет телепортироваться без перезарядки. +satchip.scanner=Создаёт карту подземных руд сверху вниз. + item.mold_base.name=Пустая литейная форма item.mold.name=Литейная форма item.morning_glory.name=Фиалковый вьюнок @@ -5983,6 +6083,10 @@ tile.nuke_n45.name=Морская мина N45 tile.nuke_prototype.name=Прототип tile.nuke_solinium.name=Синий Ополаскиватель tile.nuke_tsar.name=Царь-бомба +item.bomb_part.used_in=Используется в: +item.n2.mine=Мина N² +item.fleija.name=Ф.Л.Е.Я. +item.solinium.name=Синий Ополаскиватель tile.oil_duct.name=Труба для нефти tile.oil_duct_solid.name=Покрытая труба для нефти tile.oil_pipe.name=Труба для извлечения неочищенной нефти @@ -6542,154 +6646,7 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х tile.oc_cable_paintable.name=Окрашиваемый сетевой кабель -desc.util.type=Тип -desc.util.size=Размер -desc.util.weight=Вес -desc.util.inaccuracy=Неточность -desc.util.strength=Сила -desc.util.top_size=Верхний размер -desc.util.bottom_size=Нижний размер -desc.util.fuel_type=Тип топлива -desc.util.fuel_amount=Количество топлива -desc.util.health=Здоровье -desc.util.rarity=Редкость -desc.util.not_launchable=Не запускается! -desc.util.fuel_capacity=Ёмкость топливного бака -desc.util.warhead=Боеголовка -desc.util.chip_inaccuracy=Неточность чипа -desc.util.fin_inaccuracy=Неточность стабилизатора - -# Shared recipe labels -gui.recipe.duration=Длительность -gui.recipe.consumption=Потребление -gui.recipe.input=Вход -gui.recipe.output=Выход -gui.recipe.mB=mB -gui.recipe.atPressure=при давлении в -gui.recipe.autoswitch=Группа автоматического переключения -gui.recipe.enabledFor=Включено для -gui.recipe.setRecipe=Нажмите, чтобы выбрать рецепт - -# shared recipe / machine labels -gui.recipe.duration=Время -gui.recipe.consumption=Потребление -gui.recipe.input=Вход -gui.recipe.output=Выход -gui.recipe.mB=mB -gui.recipe.atPressure=при -gui.recipe.autoswitch=Автопереключение группы -gui.recipe.enabledFor=Доступно для -gui.recipe.setRecipe=Нажмите, чтобы установить рецепт - -# --- Missile / parts (generic) --- -gui.missile.warhead=Боеголовка -gui.missile.strength=Мощность -gui.missile.fuelType=Тип топлива -gui.missile.fuelAmount=Количество топлива -gui.missile.chipInaccuracy=Неточность чипа -gui.missile.finInaccuracy=Неточность стабилизаторов -gui.missile.size=Размер -gui.missile.health=Прочность -gui.missile.fuel=Топливо -gui.missile.fuelCapacity=Ёмкость топлива -gui.missile.notLaunchable=Невозможно запустить! - -# missile tiers -missile.tier.tier0=Уровень 0 -missile.tier.tier1=Уровень 1 -missile.tier.tier2=Уровень 2 -missile.tier.tier3=Уровень 3 -missile.tier.tier4=Уровень 4 - -# missile fuel names -missile.fuel.solid=Твёрдое топливо -missile.fuel.solid.prefueled=Твёрдое топливо (предзаправлено) -missile.fuel.ethanol_peroxide=Этанол / Перекись водорода -missile.fuel.kerosene_peroxide=Керосин / Перекись водорода -missile.fuel.kerosene_loxy=Керосин / Жидкий кислород -missile.fuel.jetfuel_loxy=Авиационное топливо / Жидкий кислород - -# warheads (used by parts) -warhead.he=HE -warhead.incendiary=Зажигательная -warhead.cluster=Кассетная -warhead.bunker_buster=Противобункерная -warhead.nuclear=Ядерная -warhead.thermonuclear=Термоядерная (TX) -warhead.n2=N² -warhead.balefire=Жар-ядерная -warhead.schrabidium=Шрабидевая -warhead.taint=Порча -warhead.cloud=Облако -warhead.turbine=Турбина - -# part keys -part.inaccuracy=Неточность -part.size=Размер -part.type=Тип -part.strength=Прочность -part.weight=Вес -part.topSize=Верхний размер -part.bottomSize=Нижний размер -part.fuelType=Тип топлива -part.fuelAmount=Количество топлива -part.fuelConsumption=Расход топлива -part.maxPayload=Макс. нагрузка -part.health=Прочность -part.rarity=Редкость -part.by=Автор -part.size.any=Любой -part.size.none=Нет - -# fuel extras used by parts -fuel.xenon=Ксенон -fuel.balefire=Жар-ракетное топливо - -# part rarity keys (enum-based, neuter) -part.rarity.common=Обычное -part.rarity.uncommon=Необычное -part.rarity.rare=Редкое -part.rarity.epic=Эпическое -part.rarity.legendary=Легендарное -part.rarity.strange=Странное - -# generic / fallback general.na=Н/Д error.generic=### Я ОШИБКА ### -# --- Satellite chips --- -satchip.frequency=Частота спутника -satchip.foeq=Даёт достижение. И всё. -satchip.gerald.line1=Одноразовый. -satchip.gerald.line2=Требуется орбитальный модуль. -satchip.gerald.line3=Расплавитель процессоров, проклятие каждого владельца сервера. -satchip.laser=Позволяет вызывать лазеры с перезарядкой 15 секунд. -satchip.mapper=Отображает загруженные в данный момент чанки. -satchip.miner=Доставляет рудные порошки на посадочную площадку. -satchip.lunar_miner=Добывает лунный грунт и доставляет на посадочную площадку. -satchip.radar=Показывает карту активных сущностей -satchip.resonator=Позволяет телепортироваться без перезарядки. -satchip.scanner=Создаёт карту подземных руд сверху вниз. - -# --- Items (bomb components) --- -item.bomb_part.used_in=Используется в: -item.n2.mine=Мина N² -item.fleija.name=Ф.Л.Е.Я. -item.solinium.name=Синий Ополаскиватель - -# --- Weapon / gun tooltips --- -gui.weapon.ammo=Боеприпасы -gui.weapon.baseDamage=Базовый урон -gui.weapon.damageWithAmmo=Урон с текущими боеприпасами -gui.weapon.condition=Состояние -gui.weapon.accepts=Принимает - -gui.weapon.quality.aside=Стандартный арсенал -gui.weapon.quality.bside=Би-Сайд -gui.weapon.quality.legendary=Легендарное оружие -gui.weapon.quality.special=Специальное оружие -gui.weapon.quality.utility=Утилитарное -gui.weapon.quality.secret=СЕКРЕТ -gui.weapon.quality.debug=ОТЛАДКА - -// Last updated 23.08.2025 by Bufka2011, MrKimkimora and TactiCOOLHimZa // +// Last updated 24.08.2025 by Bufka2011, MrKimkimora and TactiCOOLHimZa // From 78ea52cbabafa0554a8b3a8a689ff504568739a7 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sun, 24 Aug 2025 12:37:14 -0600 Subject: [PATCH 457/491] I18n implementation for ItemLemon.java --- .../java/com/hbm/items/food/ItemLemon.java | 52 ++++++++----------- src/main/resources/assets/hbm/lang/en_US.lang | 19 +++++++ src/main/resources/assets/hbm/lang/ru_RU.lang | 19 +++++++ 3 files changed, 61 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/hbm/items/food/ItemLemon.java b/src/main/java/com/hbm/items/food/ItemLemon.java index b331b799e..482cb37bc 100644 --- a/src/main/java/com/hbm/items/food/ItemLemon.java +++ b/src/main/java/com/hbm/items/food/ItemLemon.java @@ -2,6 +2,8 @@ package com.hbm.items.food; import java.util.List; +import com.hbm.util.i18n.I18nUtil; + import com.hbm.handler.threading.PacketThreading; import com.hbm.items.ModItems; import com.hbm.packet.toclient.AuxParticlePacketNT; @@ -29,70 +31,62 @@ public class ItemLemon extends ItemFood { public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { if(this == ModItems.lemon) { - list.add("Eh, good enough."); + list.add(I18nUtil.resolveKey("item.lemon.desc")); } if(this == ModItems.med_ipecac) { - list.add("Bitter juice that will cause your stomach"); - list.add("to forcefully eject its contents."); + list.add(I18nUtil.resolveKey("item.med_ipecac.desc.1")); + list.add(I18nUtil.resolveKey("item.med_ipecac.desc.2")); } if(this == ModItems.med_ptsd) { - list.add("This isn't even PTSD mediaction, it's just"); - list.add("Ipecac in a different bottle!"); + list.add(I18nUtil.resolveKey("item.med_ptsd.desc.1")); + list.add(I18nUtil.resolveKey("item.med_ptsd.desc.2")); } if(this == ModItems.med_schizophrenia) { - list.add("Makes the voices go away. Just for a while."); + list.add(I18nUtil.resolveKey("item.med_schizophrenia.desc.1")); list.add(""); - list.add("..."); - list.add("Better not take it."); - } - - if(this == ModItems.med_schizophrenia) { - list.add("Makes the voices go away. Just for a while."); - list.add(""); - list.add("..."); - list.add("Better not take it."); + list.add(I18nUtil.resolveKey("item.med_schizophrenia.desc.2")); + list.add(I18nUtil.resolveKey("item.med_schizophrenia.desc.3")); } if(this == ModItems.loops) { - list.add("Brøther, may I have some lööps?"); + list.add(I18nUtil.resolveKey("item.loops.desc")); } if(this == ModItems.loop_stew) { - list.add("A very, very healthy breakfast."); + list.add(I18nUtil.resolveKey("item.loop_stew.desc")); } if(this == ModItems.twinkie) { - list.add("Expired 600 years ago!"); + list.add(I18nUtil.resolveKey("item.twinkie.desc")); } if(this == ModItems.pudding) { - list.add("What if he did?"); - list.add("What if he didn't?"); - list.add("What if the world was made of pudding?"); + list.add(I18nUtil.resolveKey("item.pudding.desc.1")); + list.add(I18nUtil.resolveKey("item.pudding.desc.2")); + list.add(I18nUtil.resolveKey("item.pudding.desc.3")); } if(this == ModItems.ingot_semtex) { - list.add("Semtex H Plastic Explosive"); - list.add("Performant explosive for many applications."); - list.add("Edible"); + list.add(I18nUtil.resolveKey("item.ingot_semtex.desc.1")); + list.add(I18nUtil.resolveKey("item.ingot_semtex.desc.2")); + list.add(I18nUtil.resolveKey("item.ingot_semtex.desc.3")); } if(this == ModItems.peas) { - list.add("He accepts your offering."); + list.add(I18nUtil.resolveKey("item.peas.desc")); } if(this == ModItems.quesadilla) { - list.add("That's what a 50 year old yeast infection does to you."); + list.add(I18nUtil.resolveKey("item.cheese_quesadilla.desc")); } } - - @Override + @Override protected void onFoodEaten(ItemStack stack, World world, EntityPlayer player) - { + { if(this == ModItems.med_ipecac || this == ModItems.med_ptsd) { player.addPotionEffect(new PotionEffect(Potion.hunger.id, 50, 49)); diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index c536a9fb5..6d22361d2 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2384,6 +2384,7 @@ item.centrifuge_tower.name=Centrifuge Tower item.chainsaw.name=Chainsaw item.cheese.name=Cheese item.cheese_quesadilla.name=Cheese Quesadilla +item.cheese_quesadilla.desc=That's what a 50 year old yeast infection does to you. item.chemical_dye.black.name=Chemical Dye (Black) item.chemical_dye.blue.name=Chemical Dye (Blue) item.chemical_dye.brown.name=Chemical Dye (Brown) @@ -3172,6 +3173,9 @@ item.ingot_schrabidium_fuel.name=Ingot of Schrabidium Fuel item.ingot_schraranium.name=Schraranium Ingot item.ingot_schraranium.desc=Made from uranium in a schrabidium transmutator item.ingot_semtex.name=Bar of Semtex +item.ingot_semtex.desc.1=Semtex H Plastic Explosive +item.ingot_semtex.desc.2=Performant explosive for many applications. +item.ingot_semtex.desc.3=Edible item.ingot_silicon.name=Silicon Boule item.ingot_smore.name=S'more Ingot item.ingot_solinium.name=Solinium Ingot @@ -3262,6 +3266,7 @@ item.launch_code_piece.name=Silo Launch Code Piece item.launch_key.name=Silo Launch Key item.lead_gavel.name=Leaden Gavel item.lemon.name="Lemon" +item.lemon.desc=Eh, good enough. item.letter.name=Express Mail item.levitation_unit.name=Gravity Manipulator item.lignite.name=Lignite @@ -3274,7 +3279,9 @@ item.liquidator_plate.name=Liquidator Suit Chestplate item.lithium.name=Lithium Cube item.lodestone.name=Lodestone item.loop_stew.name=IT Breakfast +item.loop_stew.desc=A very, very healthy breakfast. item.loops.name=Lööps +item.loops.desc=Brøther, may I have some lööps? item.loot_10.name=Size 10 Missile Loot Crate item.loot_15.name=Size 15 Missile Loot Crate item.loot_misc.name=General Missile Loot Crate @@ -3301,8 +3308,15 @@ item.mechanism_rifle_2.name=Advanced Rifle Mechanism item.mechanism_special.name=High-Tech Weapon Mechanism item.med_bag.name=First Aid Kit item.med_ipecac.name=Ipecac Syrup +item.med_ipecac.desc.1=Bitter juice that will cause your stomach +item.med_ipecac.desc.2=to forcefully eject its contents. item.med_ptsd.name=PTSD Medication +item.med_ptsd.desc.1=This isn't even PTSD mediaction, it's just +item.med_ptsd.desc.2=Ipecac in a different bottle! item.med_schiziphrenia.name=Schizophrenia Medication +item.med_schizophrenia.desc.1=Makes the voices go away. Just for a while. +item.med_schizophrenia.desc.2=... +item.med_schizophrenia.desc.3=Better not take it. item.medal_liquidator.name=Liquidator Medal item.meltdown_tool.name=Dyatlov Instant Meltdown Applicator item.memespoon.name=§eMarket Gardener @@ -3803,6 +3817,7 @@ item.particle_strange.name=Strange Quark Capsule item.particle_tachyon.name=Tachyon Capsule item.parts_legendary.name=Legendary Parts item.peas.name=Peas +item.peas.desc=He accepts your offering. item.pedestal_steel.name=Steel Pedestal item.pellet_advanced.name=Advanced Watz Performance Improver item.pellet_antimatter.name=Antimatter Cluster @@ -4069,6 +4084,9 @@ item.primer_buckshot.name=Buckshot Primer (x12) item.protection_charm.name=Charm of Protection item.prototype_kit.name=Prototype Kit item.pudding.name=Pudding +item.pudding.desc.1=What if he did? +item.pudding.desc.2=What if he didn't? +item.pudding.desc.3=What if the world was made of pudding? item.pwr_fuel.bfb_am_mix.name=Fuel Grade Americium PWR BFB Rod item.pwr_fuel.bfb_pu241.name=Plutonium-241 PWR BFB Rod item.pwr_fuel.hea242.name=HEA-242 PWR Fuel Rod @@ -4645,6 +4663,7 @@ item.turret_rocket_ammo.name=Rocket Turret 2x4 Ammunition item.turret_spitfire_ammo.name=AA-Shell item.turret_tau_ammo.name=Tau Turret Uranium Ammo item.twinkie.name=Twinkie +item.twinkie.desc=Expired 600 years ago! item.ullapool_caber.name=Ullapool Caber item.undefined.name=Undefined item.upgrade_5g.name=5G Radiation Emitter Upgrade diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 54a873aa4..e8f1e035a 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2540,6 +2540,7 @@ item.centrifuge_tower.name=Башня центрифуги item.chainsaw.name=Бензопила item.cheese.name=Сыр item.cheese_quesadilla.name=Сырная кесадилья +item.cheese_quesadilla.desc=Вот что делает с вами 50-летняя дрожжевая инфекция. item.chemical_dye.black.name=Химический краситель (Чёрный) item.chemical_dye.blue.name=Химический краситель (Синий) item.chemical_dye.brown.name=Химический краситель (Коричневый) @@ -3431,6 +3432,9 @@ item.ingot_schrabidium_fuel.name=Слиток шрабидиевого топл item.ingot_schraranium.name=Шрараниевый слиток item.ingot_schraranium.desc=Делается из урана в шрабидиевом трансмутаторе item.ingot_semtex.name=Семтекс +item.ingot_semtex.desc.1=Пластиковая взрывчатка Семтекс H +item.ingot_semtex.desc.2=Эффективное взрывчатое вещество для многих применений. +item.ingot_semtex.desc.3=Съедобно item.ingot_silicon.name=Кремниевый брусок item.ingot_smore.name=Слиток с'мора item.ingot_solinium.name=Солиниевый слиток @@ -3525,6 +3529,7 @@ item.launch_code_piece.name=Кусок кода запуска item.launch_key.name=Ключ запуска item.lead_gavel.name=Свинцовый молоток item.lemon.name="Лимон" +item.lemon.desc=Ну, вроде нормально. item.letter.name=Экспресс-почта item.levitation_unit.name=Гравитационный манипулятор item.lignite.name=Бурый уголь @@ -3537,7 +3542,9 @@ item.liquidator_plate.name=Нагрудник костюма Ликвидато item.lithium.name=Куб лития item.lodestone.name=Магнетит item.loop_stew.name=Завтрак IT-шника +item.loop_stew.desc=Очень, очень полезный завтрак. item.loops.name=Пəтли +item.loops.desc=Брø, можно мне немного пəтлей? item.loot_10.name=Ящик с запчастями от ракеты 10-го размера item.loot_15.name=Ящик с запчастями от ракеты 15-го размера item.loot_misc.name=Общий ящик с запчастями от ракеты @@ -3564,8 +3571,15 @@ item.mechanism_rifle_2.name=Усовершенствованный винтов item.mechanism_special.name=Механизм высокотехнологичного оружия item.med_bag.name=Аптечка первой помощи item.med_ipecac.name=Сироп из рвотного корня +item.med_ipecac.desc.1=Горький сок, который заставит ваш желудок +item.med_ipecac.desc.2=с силой извергнуть свое содержимое. item.med_ptsd.name=Лечение ПТСР +item.med_ptsd.desc.1=Это даже не лекарство от ПТСР, +item.med_ptsd.desc.2=это просто рвотный корень в другой банке! item.med_schiziphrenia.name=Лекарство от шизофрении +item.med_schizophrenia.desc.1=Заставляет голоса исчезнуть. Хоть на время. +item.med_schizophrenia.desc.2=... +item.med_schizophrenia.desc.3=Лучше не принимать. item.medal_liquidator.name=Медаль Ликвидатора item.meltdown_tool.name=Аппликатор мгновенного расплавления Дятлова item.memespoon.name=§eЗемлекоп @@ -4065,6 +4079,7 @@ item.particle_strange.name=Капсула со Странным кварком item.particle_tachyon.name=Капсула с тахионом item.parts_legendary.name=Легендарные запчасти item.peas.name=Горошек +item.peas.desc=Он принимает твое приношение. item.pedestal_steel.name=Стальная стойка item.pellet_advanced.name=Улучшитель производительности Ватцз item.pellet_antimatter.name=Кластер антиматерии @@ -4331,6 +4346,9 @@ item.primer_buckshot.name=Картечные Капсюли (x12) item.protection_charm.name=Талисман защиты item.prototype_kit.name=Комплект Прототипа item.pudding.name=Пудинг +item.pudding.desc.1=Что, если бы он сделал? +item.pudding.desc.2=Что, если бы он не сделал? +item.pudding.desc.3=Что, если бы мир был сделан из пудинга? item.pwr_fuel.bfb_am_mix.name=Стержень ВВЭР ЦБР с реакторным америцием item.pwr_fuel.bfb_pu241.name=Стержень ВВЭР ЦБР с плутонием-241 item.pwr_fuel.hea242.name=Топливный стержень ВВЭР с высокообогащённым америцием-242 @@ -4915,6 +4933,7 @@ item.turret_rocket_ammo.name=Боекомплект ракетной турел item.turret_spitfire_ammo.name=AA-Снаряд item.turret_tau_ammo.name=Урановые боеприпасы Тау-турели item.twinkie.name=Твинки +item.twinkie.desc=Испортилось 600 лет назад! item.ullapool_caber.name=Аллапульское бревно item.undefined.name=Undefined item.upgrade_5g.name=Улучшение "5G излучение" From 4b28ee222775bc36490ed68ea66540e35acfc990 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sun, 24 Aug 2025 12:51:25 -0600 Subject: [PATCH 458/491] I18n implementation for cloth --- src/main/java/com/hbm/items/special/ItemRag.java | 16 +++++++--------- src/main/resources/assets/hbm/lang/en_US.lang | 2 ++ src/main/resources/assets/hbm/lang/ru_RU.lang | 2 ++ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/items/special/ItemRag.java b/src/main/java/com/hbm/items/special/ItemRag.java index bb883f6eb..ad53fd20d 100644 --- a/src/main/java/com/hbm/items/special/ItemRag.java +++ b/src/main/java/com/hbm/items/special/ItemRag.java @@ -2,6 +2,7 @@ package com.hbm.items.special; import java.util.List; +import com.hbm.util.i18n.I18nUtil; import com.hbm.items.ModItems; import net.minecraft.block.material.Material; @@ -15,31 +16,28 @@ public class ItemRag extends Item { @Override public boolean onEntityItemUpdate(EntityItem entityItem) { - + if(entityItem != null && !entityItem.worldObj.isRemote) { - + if(entityItem.worldObj.getBlock((int)Math.floor(entityItem.posX), (int)Math.floor(entityItem.posY), (int)Math.floor(entityItem.posZ)).getMaterial() == Material.water) { ItemStack stack = entityItem.getEntityItem(); entityItem.setEntityItemStack(new ItemStack(ModItems.rag_damp, stack.stackSize)); return true; } } - return false; } - + @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - stack.stackSize--; player.inventory.addItemStackToInventory(new ItemStack(ModItems.rag_piss)); - return stack; } - + @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - list.add("Drop into water to make damp cloth."); - list.add("Right-click to urinate on the cloth."); + list.add(I18nUtil.resolveKey("item.rag.desc.1")); + list.add(I18nUtil.resolveKey("item.rag.desc.2")); } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 6d22361d2..e0a543148 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4140,6 +4140,8 @@ item.radaway_strong.name=Strong RadAway item.radx.name=Rad-X item.radx.desc=Increases radiation resistance by 0.2 (37%%) for 3 minutes item.rag.name=Cloth +item.rag.desc.1=Drop into water to make damp cloth. +item.rag.desc.2=Right-click to urinate on the cloth. item.rag_damp.name=Damp Cloth item.rag_piss.name=Piss-Soaked Rag item.rangefinder.name=Rangefinder diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index e8f1e035a..0b513b9c0 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -4402,6 +4402,8 @@ item.radaway_strong.name=Усиленный антирадин item.radx.name=Рад-X item.radx.desc=Increases radiation resistance by 0.2 (37%) for 3 minutes item.rag.name=Тряпка +item.rag.desc.1=Бросьте в воду, чтобы намочить тряпку. +item.rag.desc.2=ПКМ, чтобы помочиться на тряпку. item.rag_damp.name=Влажная тряпка item.rag_piss.name=Пропитанная мочой тряпка item.rangefinder.name=Дальнометр From 9d67211dddd7cd48a463d2f012ad070f39baac91 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sun, 24 Aug 2025 14:27:48 -0600 Subject: [PATCH 459/491] Fixed a joke that has been a bad joke for centuries. --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 0b513b9c0..6c39deebc 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2465,7 +2465,7 @@ item.canned_napalm.desc=Люблю запах старых мемов по ут item.canned_oil.name=Консервированное моторное масло item.canned_oil.desc=Заставляет мотор работать, почему не может и людей? item.canned_pashtet.name=Паштет -item.canned_pashtet.desc=услуги перевода недоступны! +item.canned_pashtet.desc=Translation services are not available! item.canned_pizza.name=Консервированная пицца item.canned_pizza.desc=Преступление против человечества. item.canned_recursion.name=Консервированная рекурсия From d5e923c263bcf86ea3fef3d20dda57ebf11923ef Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Sun, 24 Aug 2025 14:28:38 -0600 Subject: [PATCH 460/491] Uhuh --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 6c39deebc..037b7c5b4 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2464,7 +2464,7 @@ item.canned_napalm.name=Консервированный напалм item.canned_napalm.desc=Люблю запах старых мемов по утрам. item.canned_oil.name=Консервированное моторное масло item.canned_oil.desc=Заставляет мотор работать, почему не может и людей? -item.canned_pashtet.name=Паштет +item.canned_pashtet.name=Pate item.canned_pashtet.desc=Translation services are not available! item.canned_pizza.name=Консервированная пицца item.canned_pizza.desc=Преступление против человечества. From 951c00d79d423e3d155a56a9624c693ae1fa407b Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 25 Aug 2025 09:12:09 +0200 Subject: [PATCH 461/491] some fixes, RBMK control rod copyable --- changelog | 7 +++++- .../java/com/hbm/blocks/BlockDummyable.java | 1 + .../rbmk/TileEntityRBMKControlAuto.java | 24 ++++++++++++++++++- .../rbmk/TileEntityRBMKControlManual.java | 18 ++++++++++++-- .../network/TileEntityCraneGrabber.java | 6 ++++- 5 files changed, 51 insertions(+), 5 deletions(-) diff --git a/changelog b/changelog index 67551c1c8..0b80e7764 100644 --- a/changelog +++ b/changelog @@ -1,2 +1,7 @@ ## Changed -* Due to severe issues with ticking order as well as a crash caused by certain tiles that uses threaded packets, Torcherino accelerator torches no longer affect NTM machines \ No newline at end of file +* Due to severe issues with ticking order as well as a crash caused by certain tiles that uses threaded packets, Torcherino accelerator torches no longer affect NTM machines +* RBMK control rod colors and auto control rod settings are now copiable + +## Fixed +* Fixed conveyor grabber dropping items off at an offset when placing them on a conveyor belt due to a client desync +* Fixed occasional crash caused by using the settings tool on the autoloader \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index fe9a001ca..5b72660bf 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -565,6 +565,7 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl @Override public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { int[] pos = findCore(world, x, y, z); + if(pos == null) return; TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); if (tile instanceof ICopiable) ((ICopiable) tile).pasteSettings(nbt, index, world, player, pos[0], pos[1], pos[2]); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java index 5c1837c71..c587fc355 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java @@ -1,10 +1,12 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.container.ContainerRBMKControlAuto; import com.hbm.inventory.gui.GUIRBMKControlAuto; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual.RBMKColor; +import com.hbm.util.EnumUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -16,7 +18,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements IControlReceiver { +public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements IControlReceiver, ICopiable { public RBMKFunction function = RBMKFunction.LINEAR; public double levelLower; @@ -164,4 +166,24 @@ public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKControlAuto(player.inventory, this); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound data = new NBTTagCompound(); + data.setDouble("levelLower", levelLower); + data.setDouble("levelUpper", levelUpper); + data.setDouble("heatLower", heatLower); + data.setDouble("heatUpper", heatUpper); + data.setInteger("function", function.ordinal()); + return data; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("levelLower")) levelLower = nbt.getDouble("levelLower"); + if(nbt.hasKey("levelUpper")) levelLower = nbt.getDouble("levelUpper"); + if(nbt.hasKey("heatLower")) levelLower = nbt.getDouble("heatLower"); + if(nbt.hasKey("heatUpper")) levelLower = nbt.getDouble("heatUpper"); + if(nbt.hasKey("function")) function = EnumUtil.grabEnumSafely(RBMKFunction.class, nbt.getInteger("function")); + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java index b34f99a5e..721ef2af6 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java @@ -2,9 +2,11 @@ package com.hbm.tileentity.machine.rbmk; import com.hbm.blocks.machine.rbmk.RBMKControl; import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.container.ContainerRBMKControl; import com.hbm.inventory.gui.GUIRBMKControl; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; +import com.hbm.util.EnumUtil; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; @@ -20,7 +22,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityRBMKControlManual extends TileEntityRBMKControl implements IControlReceiver { +public class TileEntityRBMKControlManual extends TileEntityRBMKControl implements IControlReceiver, ICopiable { public RBMKColor color; public double startingLevel; @@ -177,5 +179,17 @@ public class TileEntityRBMKControlManual extends TileEntityRBMKControl implement @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKControl(player.inventory, this); - } + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound data = new NBTTagCompound(); + data.setInteger("color", color.ordinal()); + return data; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("color")) color = EnumUtil.grabEnumSafely(RBMKColor.class, nbt.getInteger("color")); + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java index 61d9df4de..976201ba5 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java @@ -107,7 +107,11 @@ public class TileEntityCraneGrabber extends TileEntityCraneBase implements IGUIP Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55); Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos); - item.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); + EntityMovingItem newItem = new EntityMovingItem(worldObj); + newItem.setItemStack(item.getItemStack().copy()); + newItem.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); + item.setDead(); + worldObj.spawnEntityInWorld(newItem); break; } From 4e30ac808450faeb7db74f11591295c73196295d Mon Sep 17 00:00:00 2001 From: RealSilverMoon Date: Mon, 25 Aug 2025 21:02:01 +0800 Subject: [PATCH 462/491] A little distinction --- src/main/resources/assets/hbm/lang/en_US.lang | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 22f6475e7..1b0ad2baf 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5931,7 +5931,7 @@ tile.rbmk_steam_inlet.desc=Inserts water into RBMK columns if ReaSim boilers are tile.rbmk_steam_outlet.name=RBMK ReaSim Steam Outlet tile.rbmk_steam_outlet.desc=Extracts super dense steam from RBMK columns if ReaSim boilers are enabled$Connects to RBMK columns sideways tile.rbmk_storage.name=RBMK Storage Column -tile.rbmk.dodd.heat=Heat +tile.rbmk.dodd.heat=Column Heat tile.rbmk.dodd.reasimWater=ReaSim Water tile.rbmk.dodd.reasimSteam=ReaSim Steam tile.rbmk.dodd.level=Level @@ -5955,9 +5955,9 @@ tile.rbmk.dodd.feed=Feed tile.rbmk.dodd.steam=Steam tile.rbmk.dodd.cryo=Cryo tile.rbmk.dodd.fuel=Fuel -tile.rbmk.dodd.f_heat=heat -tile.rbmk.dodd.f_xenon=xenon -tile.rbmk.dodd.f_yield=yield +tile.rbmk.dodd.f_heat=Fuel Heat +tile.rbmk.dodd.f_xenon=Fuel Xenon +tile.rbmk.dodd.f_yield=Fuel Yield tile.rbmk.dodd.feed_type=Feed Type(ID) tile.rbmk.dodd.steam_type=Steam Type(ID) tile.rbmk.dodd.cryo_type=Cryo Type(ID) From bf0aa7d2850704b2dc42a9b9cc452e903c8834f8 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 25 Aug 2025 16:30:35 +0200 Subject: [PATCH 463/491] changelog --- changelog | 8 +++++++- src/main/java/com/hbm/items/ModItems.java | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index 0b80e7764..8be9f46fc 100644 --- a/changelog +++ b/changelog @@ -1,7 +1,13 @@ ## Changed +* Updated ukrainian and chinese localization, including QMAW * Due to severe issues with ticking order as well as a crash caused by certain tiles that uses threaded packets, Torcherino accelerator torches no longer affect NTM machines * RBMK control rod colors and auto control rod settings are now copiable +* Murky wings no longer have slowfall, and using shift+space cancels the momentum +* Murky wings are now slow by default and speed up when sprinting +* The arc furnace can now be used with AE2 buses, which was previously not possible due to the unique stacksize limitations ## Fixed * Fixed conveyor grabber dropping items off at an offset when placing them on a conveyor belt due to a client desync -* Fixed occasional crash caused by using the settings tool on the autoloader \ No newline at end of file +* Fixed occasional crash caused by using the settings tool on the autoloader +* Fixed QMAW not correctly working with other languages +* Fixed QMAW loading breaking entirely due to file encoding \ No newline at end of file diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index f04a7218f..8a8c42675 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1476,6 +1476,7 @@ public class ModItems { public static Item gun_aberrator_eott; public static Item gun_double_barrel; public static Item gun_double_barrel_sacred_dragon; + public static Item gun_n_i_4_n_i; // we GET THERE when we GET THERE public static Item gun_charge_thrower; From f73d81310aebe0d5ed111645db0a11c47163bcb2 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 10:31:57 -0600 Subject: [PATCH 464/491] Minor changes --- src/main/resources/assets/hbm/lang/ru_RU.lang | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 037b7c5b4..bb946d525 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2935,11 +2935,11 @@ item.fau_helmet.name=Фау-шлем item.fau_legs.name=Фау-поножи item.fau_plate.name=Фау-нагрудник item.filter_coal.name=Фильтр с активированным углём -item.fins_big_steel.name=Большие стальные ребра решётки +item.fins_big_steel.name=Большие стальные рёбра решётки item.fins_flat.name=Плоский стальной кожух -item.fins_quad_titanium.name=Маленькие титановые ребра -item.fins_small_steel.name=Малые стальные ребра решётки -item.fins_tri_steel.name=Большие стальные ребра +item.fins_quad_titanium.name=Маленькие титановые рёбра +item.fins_small_steel.name=Малые стальные рёбра решётки +item.fins_tri_steel.name=Большие стальные рёбра item.five_htp.name=Таблетки энтерамина item.five_htp.desc=Убирает все DRX, Стабильность на 10 минут item.flame_conspiracy.name=Конспирологическая теория @@ -4059,7 +4059,7 @@ item.part_lithium.name=Коробка литиевой пыли item.part_mechanism.name=Оружейный механизм (%s) item.part_plutonium.name=Коробка плутониевой пыли item.part_receiver_heavy.name=Тяжёлый ресивер (%s) -item.part_receiver_light.name=Лёгкий ресивер(%s) +item.part_receiver_light.name=Лёгкий ресивер (%s) item.part_stock.name=Приклад (%s) item.particle_aelectron.name=Капсула с Позитроном item.particle_amat.name=Капсула с Антиматерией From b209795f605f1a0460b4fe7daf241d39153b83ca Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 10:49:22 -0600 Subject: [PATCH 465/491] Rangefinder --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index bb946d525..8b88b8612 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -4406,7 +4406,7 @@ item.rag.desc.1=Бросьте в воду, чтобы намочить тряп item.rag.desc.2=ПКМ, чтобы помочиться на тряпку. item.rag_damp.name=Влажная тряпка item.rag_piss.name=Пропитанная мочой тряпка -item.rangefinder.name=Дальнометр +item.rangefinder.name=Дальномер item.rbmk_fuel_balefire.name=Жар-топливный стержень РБМК item.rbmk_fuel_balefire_gold.name=Флэшголд-топливный стержень РБМК item.rbmk_fuel_drx.name=§cДигамма-топливный стержень РБМК§r From 8033fde2b914775c201695b388f26d58fd7c341a Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 10:52:30 -0600 Subject: [PATCH 466/491] Aluminium manual fix --- src/main/resources/assets/hbm/manual/material/aluminium.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/aluminium.json b/src/main/resources/assets/hbm/manual/material/aluminium.json index 8bdf151bc..db7074f22 100644 --- a/src/main/resources/assets/hbm/manual/material/aluminium.json +++ b/src/main/resources/assets/hbm/manual/material/aluminium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.

Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages.", - "ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозёма.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет." + "ru_RU": "Распространённый легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозёма.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет." } } From d71057bbab175af36bef022fcd578eeaff814b34 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 11:08:54 -0600 Subject: [PATCH 467/491] QMAW fixes --- src/main/resources/assets/hbm/manual/material/bismuth.json | 2 +- .../resources/assets/hbm/manual/material/bismuth_bronze.json | 2 +- src/main/resources/assets/hbm/manual/material/bscco.json | 2 +- src/main/resources/assets/hbm/manual/material/uranium-235.json | 2 +- src/main/resources/assets/hbm/manual/material/uranium-238.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/bismuth.json b/src/main/resources/assets/hbm/manual/material/bismuth.json index 9b3105586..b3952837f 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]].", - "ru_RU": "Тяжелый металл, первоначально получаемый из переработки отработанного топлива [[РБМК|RBMK]] в [[SILEX]], также может быть получен из поздних стадий обработки бедроковой руды с использованием [[высокоэффективного растворителя|High-Performance Solvent]]. В основном используется в виде [[висмутовай бронзы|Bismuth Bronze]]." + "ru_RU": "Тяжёлый металл, первоначально получаемый из переработки отработанного топлива [[РБМК|RBMK]] в [[SILEX]], также может быть получен в поздние стадии обработки бедроковой руды с использованием [[высокоэффективного растворителя|High-Performance Solvent]]. В основном используется в виде [[висмутовой бронзы|Bismuth Bronze]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json index 07167ba3d..cdc42f860 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].

Fully interchangeable with [[arsenic bronze|Arsenic Bronze]].", - "ru_RU": "Производное от [[висмута|Bismuth]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]].

Полностью взаимозаменяемо с [[мышьяковой бронзой|Arsenic Bronze]]." + "ru_RU": "Производное от [[висмута|Bismuth]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]].

Полностью взаимозаменяема с [[мышьяковой бронзой|Arsenic Bronze]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/bscco.json b/src/main/resources/assets/hbm/manual/material/bscco.json index a341b55af..3bf13e4d3 100644 --- a/src/main/resources/assets/hbm/manual/material/bscco.json +++ b/src/main/resources/assets/hbm/manual/material/bscco.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]].", - "ru_RU": "Мощный сверхпроводник, используемый в высокоуровневых цепях и катушках для [[ускорителя частиц|Particle Accelerator]]. Требует [[висмута|Bismuth]], и поэтому доступен только после постройки [[РБМК|RBMK]]." + "ru_RU": "Мощный сверхпроводник, используемый в высокоуровневых цепях и катушках для [[ускорителя частиц|Particle Accelerator]]. Требует [[висмут|Bismuth]], и поэтому доступен только после постройки [[РБМК|RBMK]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json index 56b101d67..eed2f9d79 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-235.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-235.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive.", - "ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенных урановых топлив. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен." + "ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенного уранового топлива. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-238.json b/src/main/resources/assets/hbm/manual/material/uranium-238.json index ca87770e1..ad433990b 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-238.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-238.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.

Slightly radioactive.", - "ru_RU": "Истощенный уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроурание|Ferrouranium]], для [[боеприпасов с истощенным ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных топлив. Топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].

Слабо радиоактивен." + "ru_RU": "Истощенный уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроуране|Ferrouranium]], для [[боеприпасов с истощенным ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных топлив. Топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].

Слабо радиоактивен." } } From ad9cb55b985d6cbaf541c342303a3ec58b52340d Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 11:10:35 -0600 Subject: [PATCH 468/491] More QMAW fixes --- src/main/resources/assets/hbm/manual/material/cinnabar.json | 2 +- src/main/resources/assets/hbm/manual/material/desh.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/cinnabar.json b/src/main/resources/assets/hbm/manual/material/cinnabar.json index bb721bf6f..e43790df3 100644 --- a/src/main/resources/assets/hbm/manual/material/cinnabar.json +++ b/src/main/resources/assets/hbm/manual/material/cinnabar.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production.", - "ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в коксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деша|Desh]]." + "ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в коксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деш|Desh]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json index a34e741c7..a3969e06a 100644 --- a/src/main/resources/assets/hbm/manual/material/desh.json +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.", - "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деша, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей." + "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деш, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей." } } From 79074e19c2541f5f2b11416a564fc55efb8c05b7 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 11:12:51 -0600 Subject: [PATCH 469/491] Ferrouranium --- src/main/resources/assets/hbm/lang/ru_RU.lang | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 8b88b8612..6f1de13c1 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1906,7 +1906,7 @@ item.ammo_bag_infinite.name=Бесконечная сумка для боепр item.ammo_arty_phosphorus_multi.name=Фосфорный 16-дюймовый мульти-снаряд item.ammo_cell.name=Энерго-патроны item.ammo_coilgun.name=Вольфрамовый шар для гаусс-пушки -item.ammo_coilgun_du.name=Ферроураниевый шар для гаусс-пушки +item.ammo_coilgun_du.name=Ферроурановый шар для гаусс-пушки item.ammo_coilgun_rubber.name=Резиновый шар для гаусс-пушки item.ammo_container.name=Контейнер с боеприпасами item.ammo_dart.name=Пластиковый дротик (Иссущающий) @@ -1997,7 +1997,7 @@ item.ammo_standard.bmg50_sp.name=.50 BMG патрон (Экспансивный) item.ammo_standard.capacitor.name=Оружейный конденсатор (Стандартный) item.ammo_standard.capacitor_ir.name=Оружейный конденсатор (Коротковолновой) item.ammo_standard.capacitor_overcharge.name=Оружейный конденсатор (Перегруженный) -item.ammo_standard.coil_ferrouranium.name=Ферроураниевый шарик гаусс-пушки +item.ammo_standard.coil_ferrouranium.name=Ферроурановый шарик гаусс-пушки item.ammo_standard.coil_tungsten.name=Вольфрамовый шарик гаусс-пушки item.ammo_standard.ct_hook.name=Крюк-кошка item.ammo_standard.ct_mortar.name=Разрывной снаряд @@ -3372,7 +3372,7 @@ item.ingot_dura_steel.name=Слиток быстрорежущей стали item.ingot_electronium.name=Электрониевый слиток item.ingot_euphemium.name=Эвфемиевый слиток item.ingot_euphemium.desc=Совершенно особый и в то же время странный элемент. -item.ingot_ferrouranium.name=Ферроураниевый слиток +item.ingot_ferrouranium.name=Ферроурановый слиток item.ingot_fiberglass.name=Стекловолокно item.ingot_fiberglass.desc=С высоким содержанием волокна, с высоким содержанием стекла. Всё, что необходимо организму. item.ingot_firebrick.name=Шамотный кирпич @@ -3479,7 +3479,7 @@ item.insert_yharonite.name=Яронитовая пластина item.item_expensive.bronze_tubes.name=Бронзовые конструкционные элементы item.item_expensive.circuit.name=Обширная печатная плата item.item_expensive.computer.name=Мейнфрейм -item.item_expensive.ferro_plating.name=Армированные ферроураниевые панели +item.item_expensive.ferro_plating.name=Армированные ферроурановые панели item.item_expensive.heavy_frame.name=Тяжёлый каркас item.item_expensive.lead_plating.name=Радиационно-стойкое покрытие item.item_expensive.steel_plating.name=Стальная обшивка с болтовым соединением @@ -5059,7 +5059,7 @@ item.weapon_mod_generic.desh_damage.name=Оптимизированный деш item.weapon_mod_generic.desh_dura.name=Высокопрочные запчасти из деша item.weapon_mod_generic.dura_damage.name=Оптимизированный быстрорежущий ресивер item.weapon_mod_generic.dura_dura.name=Высокопрочные запчасти из быстрорежущей стали -item.weapon_mod_generic.ferro_damage.name=Оптимизированный ферроураниевый ресивер +item.weapon_mod_generic.ferro_damage.name=Оптимизированный ферроурановый ресивер item.weapon_mod_generic.ferro_dura.name=Высокопрочные запчасти из ферроурана item.weapon_mod_generic.iron_damage.name=Оптимизированный железный ресивер item.weapon_mod_generic.iron_dura.name=Высокопрочные запчасти из железа @@ -5278,7 +5278,7 @@ tile.anvil_bismuth.name=Висмутовая наковальня tile.anvil_bismuth_bronze.name=Наковальня из висмутовой бронзы tile.anvil_desh.name=Деш-наковальня tile.anvil_dnt.name=Динейтрониевая наковальня -tile.anvil_ferrouranium.name=Ферроураниевая наковальня +tile.anvil_ferrouranium.name=Ферроурановая наковальня tile.anvil_iron.name=Железная наковальня tile.anvil_lead.name=Свинцовая наковальня tile.anvil_meteorite.name=Метеоритовая наковальня From ee41e9a7ed3ae8e915e995e42effa9c398cda46f Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 11:22:43 -0600 Subject: [PATCH 470/491] QMAW fixes --- src/main/resources/assets/hbm/manual/material/alloy.json | 2 +- src/main/resources/assets/hbm/manual/material/aluminium.json | 2 +- src/main/resources/assets/hbm/manual/material/arsenic.json | 2 +- .../resources/assets/hbm/manual/material/arsenic_bronze.json | 2 +- src/main/resources/assets/hbm/manual/material/bakelite.json | 2 +- src/main/resources/assets/hbm/manual/material/bismuth.json | 2 +- .../resources/assets/hbm/manual/material/bismuth_bronze.json | 2 +- src/main/resources/assets/hbm/manual/material/bscco.json | 2 +- src/main/resources/assets/hbm/manual/material/cadmium.json | 2 +- .../resources/assets/hbm/manual/material/cadmium_steel.json | 2 +- src/main/resources/assets/hbm/manual/material/cinnabar.json | 2 +- src/main/resources/assets/hbm/manual/material/coke.json | 2 +- src/main/resources/assets/hbm/manual/material/copper.json | 4 ++-- src/main/resources/assets/hbm/manual/material/desh.json | 2 +- .../resources/assets/hbm/manual/material/ferrouranium.json | 2 +- src/main/resources/assets/hbm/manual/material/graphite.json | 2 +- src/main/resources/assets/hbm/manual/material/gunmetal.json | 2 +- src/main/resources/assets/hbm/manual/material/hss.json | 2 +- src/main/resources/assets/hbm/manual/material/latex.json | 2 +- src/main/resources/assets/hbm/manual/material/lead.json | 2 +- src/main/resources/assets/hbm/manual/material/mingrade.json | 2 +- src/main/resources/assets/hbm/manual/material/neptunium.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-238.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-239.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-240.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-241.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-rg.json | 2 +- src/main/resources/assets/hbm/manual/material/plutonium.json | 2 +- src/main/resources/assets/hbm/manual/material/polonium.json | 2 +- src/main/resources/assets/hbm/manual/material/polymer.json | 2 +- src/main/resources/assets/hbm/manual/material/radium.json | 2 +- src/main/resources/assets/hbm/manual/material/rubber.json | 2 +- src/main/resources/assets/hbm/manual/material/silicon.json | 2 +- src/main/resources/assets/hbm/manual/material/sodium.json | 2 +- src/main/resources/assets/hbm/manual/material/steel.json | 2 +- src/main/resources/assets/hbm/manual/material/sulfur.json | 2 +- src/main/resources/assets/hbm/manual/material/tantalium.json | 2 +- src/main/resources/assets/hbm/manual/material/technetium.json | 2 +- .../assets/hbm/manual/material/technetium_steel.json | 2 +- src/main/resources/assets/hbm/manual/material/thorium.json | 2 +- .../resources/assets/hbm/manual/material/uranium-233.json | 2 +- .../resources/assets/hbm/manual/material/uranium-235.json | 2 +- .../resources/assets/hbm/manual/material/uranium-238.json | 2 +- src/main/resources/assets/hbm/manual/material/uranium.json | 2 +- .../resources/assets/hbm/manual/material/weaponsteel.json | 2 +- 45 files changed, 46 insertions(+), 46 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/alloy.json b/src/main/resources/assets/hbm/manual/material/alloy.json index 03ef80a7a..7d6276d8f 100644 --- a/src/main/resources/assets/hbm/manual/material/alloy.json +++ b/src/main/resources/assets/hbm/manual/material/alloy.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_advanced_alloy"], ["hbm:item.powder_advanced_alloy"], ["hbm:item.plate_advanced_alloy"]], "title": { "en_US": "Advanced Alloy", - "ru_ru": "Продвинутый сплав" + "ru_ru": "Продвинутый сплав" }, "content": { "en_US": "Made in a [[blast furnace|Blast Furnace]] from [[steel|Steel]] and [[Minecraft grade copper|Minecraft Grade Copper]]. Makes better-than-diamond gear. Also used in some high-powered magnets for the [[fusion reactor|Fusion Reactor]] and the [[exposure chamber|Exposure Chamber]].", diff --git a/src/main/resources/assets/hbm/manual/material/aluminium.json b/src/main/resources/assets/hbm/manual/material/aluminium.json index db7074f22..f36edce36 100644 --- a/src/main/resources/assets/hbm/manual/material/aluminium.json +++ b/src/main/resources/assets/hbm/manual/material/aluminium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]], "title": { "en_US": "Aluminium", - "ru_RU": "Алюминий" + "ru_RU": "Алюминий" }, "content": { "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.

Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages.", diff --git a/src/main/resources/assets/hbm/manual/material/arsenic.json b/src/main/resources/assets/hbm/manual/material/arsenic.json index d54f92d25..6e379c6c0 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_arsenic"], ["hbm:item.nugget_arsenic"]], "title": { "en_US": "Arsenic", - "ru_RU": "Мышьяк" + "ru_RU": "Мышьяк" }, "content": { "en_US": "Obtainable by treating oily scraps with [[high-performance solvent|High-Performance Solvent]] in an [[acidizer|Ore Acidizer]]. Oily scraps can be created by [[shredding|Shredder]] polluted blocks created by the [[fracking tower|Hydraulic Fracking Tower]]. Primarily used as [[arsenic bronze|Arsenic Bronze]].", diff --git a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json index d53db5d12..32e00bb1d 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_arsenic_bronze"]], "title": { "en_US": "Arsenic Bronze", - "ru_RU": "Мышьяковая бронза" + "ru_RU": "Мышьяковая бронза" }, "content": { "en_US": "Derivative of [[arsenic|Arsenic]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]] due to requiring [[high-performance solvent|High-Performance Solvent]].

Fully interchangeable with [[bismuth bronze|Bismuth Bronze]].", diff --git a/src/main/resources/assets/hbm/manual/material/bakelite.json b/src/main/resources/assets/hbm/manual/material/bakelite.json index d5d232149..7759a73fe 100644 --- a/src/main/resources/assets/hbm/manual/material/bakelite.json +++ b/src/main/resources/assets/hbm/manual/material/bakelite.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_bakelite"], ["hbm:item.powder_bakelite"]], "title": { "en_US": "Bakelite", - "ru_RU": "Бакелит" + "ru_RU": "Бакелит" }, "content": { "en_US": "Alternative to [[polymer|Polymer]] made from [[aromatic hydrocarbons|Aromatic Hydrocarbons]] derived from [[cracked oil products|Catalytic Cracking Tower]]. Completely interchangeable in all recipes.", diff --git a/src/main/resources/assets/hbm/manual/material/bismuth.json b/src/main/resources/assets/hbm/manual/material/bismuth.json index b3952837f..921eb33a4 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_bismuth"], ["hbm:item.billet_bismuth"], ["hbm:item.nugget_bismuth"], ["hbm:item.powder_bismuth"]], "title": { "en_US": "Bismuth", - "ru_RU": "Висмут" + "ru_RU": "Висмут" }, "content": { "en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]].", diff --git a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json index cdc42f860..3befaffba 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_bismuth_bronze"]], "title": { "en_US": "Bismuth Bronze", - "ru_RU": "Висмутовая бронза" + "ru_RU": "Висмутовая бронза" }, "content": { "en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].

Fully interchangeable with [[arsenic bronze|Arsenic Bronze]].", diff --git a/src/main/resources/assets/hbm/manual/material/bscco.json b/src/main/resources/assets/hbm/manual/material/bscco.json index 3bf13e4d3..65e4ad1b1 100644 --- a/src/main/resources/assets/hbm/manual/material/bscco.json +++ b/src/main/resources/assets/hbm/manual/material/bscco.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_bscco"], ["hbm:item.wire_dense", 1, 48]], "title": { "en_US": "BSCCO", - "ru_RU": "BSCCO" + "ru_RU": "BSCCO" }, "content": { "en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]].", diff --git a/src/main/resources/assets/hbm/manual/material/cadmium.json b/src/main/resources/assets/hbm/manual/material/cadmium.json index 0de201080..83ad670aa 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_cadmium"], ["hbm:item.powder_cadmium"]], "title": { "en_US": "Cadmium", - "ru_RU": "Кадмий" + "ru_RU": "Кадмий" }, "content": { "en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute.", diff --git a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json index 48ce8d495..9f90f1b66 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_cdalloy"]], "title": { "en_US": "Cadmium Steel", - "ru_RU": "Кадмиевая сталь" + "ru_RU": "Кадмиевая сталь" }, "content": { "en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes.", diff --git a/src/main/resources/assets/hbm/manual/material/cinnabar.json b/src/main/resources/assets/hbm/manual/material/cinnabar.json index e43790df3..349fb4386 100644 --- a/src/main/resources/assets/hbm/manual/material/cinnabar.json +++ b/src/main/resources/assets/hbm/manual/material/cinnabar.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.cinnebar"]], "title": { "en_US": "Cinnabar", - "ru_RU": "Киноварь" + "ru_RU": "Киноварь" }, "content": { "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production.", diff --git a/src/main/resources/assets/hbm/manual/material/coke.json b/src/main/resources/assets/hbm/manual/material/coke.json index 234ab7588..7ca4f99c4 100644 --- a/src/main/resources/assets/hbm/manual/material/coke.json +++ b/src/main/resources/assets/hbm/manual/material/coke.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.coke", 1, 32767]], "title": { "en_US": "Coke", - "ru_RU": "Кокс" + "ru_RU": "Кокс" }, "content": { "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].

Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.

Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.

Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]].", diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json index e8e155732..6a893226d 100644 --- a/src/main/resources/assets/hbm/manual/material/copper.json +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -4,10 +4,10 @@ "trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]], "title": { "en_US": "Copper", - "ru_RU": "Медь" + "ru_RU": "Медь" }, "content": { "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.", - "ru_RU": "Обычный ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]]." + "ru_RU": "Распространённый ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json index a3969e06a..ebb91a37a 100644 --- a/src/main/resources/assets/hbm/manual/material/desh.json +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]], "title": { "en_US": "Desh", - "ru_RU": "Деш" + "ru_RU": "Деш" }, "content": { "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.", diff --git a/src/main/resources/assets/hbm/manual/material/ferrouranium.json b/src/main/resources/assets/hbm/manual/material/ferrouranium.json index 687434042..3f9fa4f8d 100644 --- a/src/main/resources/assets/hbm/manual/material/ferrouranium.json +++ b/src/main/resources/assets/hbm/manual/material/ferrouranium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_ferrouranium"]], "title": { "en_US": "Ferrouranium", - "ru_RU": "Ферроуран" + "ru_RU": "Ферроуран" }, "content": { "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition.", diff --git a/src/main/resources/assets/hbm/manual/material/graphite.json b/src/main/resources/assets/hbm/manual/material/graphite.json index 1876c53fa..dd28e61c4 100644 --- a/src/main/resources/assets/hbm/manual/material/graphite.json +++ b/src/main/resources/assets/hbm/manual/material/graphite.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_graphite"]], "title": { "en_US": "Graphite", - "ru_RU": "Графит" + "ru_RU": "Графит" }, "content": { "en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes.", diff --git a/src/main/resources/assets/hbm/manual/material/gunmetal.json b/src/main/resources/assets/hbm/manual/material/gunmetal.json index f5d89a0b1..23abdec47 100644 --- a/src/main/resources/assets/hbm/manual/material/gunmetal.json +++ b/src/main/resources/assets/hbm/manual/material/gunmetal.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]], "title": { "en_US": "Gunmetal", - "ru_RU": "Оружейный металл" + "ru_RU": "Оружейный металл" }, "content": { "en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition.", diff --git a/src/main/resources/assets/hbm/manual/material/hss.json b/src/main/resources/assets/hbm/manual/material/hss.json index 26380d6c5..0c438e98f 100644 --- a/src/main/resources/assets/hbm/manual/material/hss.json +++ b/src/main/resources/assets/hbm/manual/material/hss.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]], "title": { "en_US": "High-Speed Steel", - "ru_RU": "Высокоскоростная сталь" + "ru_RU": "Высокоскоростная сталь" }, "content": { "en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable.", diff --git a/src/main/resources/assets/hbm/manual/material/latex.json b/src/main/resources/assets/hbm/manual/material/latex.json index b5795bd32..b96807fef 100644 --- a/src/main/resources/assets/hbm/manual/material/latex.json +++ b/src/main/resources/assets/hbm/manual/material/latex.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]], "title": { "en_US": "Latex", - "ru_RU": "Латекс" + "ru_RU": "Латекс" }, "content": { "en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa.", diff --git a/src/main/resources/assets/hbm/manual/material/lead.json b/src/main/resources/assets/hbm/manual/material/lead.json index b4d919e1a..9620ac425 100644 --- a/src/main/resources/assets/hbm/manual/material/lead.json +++ b/src/main/resources/assets/hbm/manual/material/lead.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]], "title": { "en_US": "Lead", - "ru_RU": "Свинец" + "ru_RU": "Свинец" }, "content": { "en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits.", diff --git a/src/main/resources/assets/hbm/manual/material/mingrade.json b/src/main/resources/assets/hbm/manual/material/mingrade.json index fe1732da5..c4943c1c3 100644 --- a/src/main/resources/assets/hbm/manual/material/mingrade.json +++ b/src/main/resources/assets/hbm/manual/material/mingrade.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]], "title": { "en_US": "Minecraft Grade Copper (Red Copper)", - "ru_RU": "Медь Minecraft (Красная медь)" + "ru_RU": "Медь Minecraft (Красная медь)" }, "content": { "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form.", diff --git a/src/main/resources/assets/hbm/manual/material/neptunium.json b/src/main/resources/assets/hbm/manual/material/neptunium.json index a68c7adb9..ae4865970 100644 --- a/src/main/resources/assets/hbm/manual/material/neptunium.json +++ b/src/main/resources/assets/hbm/manual/material/neptunium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]], "title": { "en_US": "Neptunium", - "ru_RU": "Нептуний" + "ru_RU": "Нептуний" }, "content": { "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]].", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-238.json b/src/main/resources/assets/hbm/manual/material/plutonium-238.json index d770353f4..3612bd86d 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-238.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-238.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_pu238"], ["hbm:item.billet_pu238"], ["hbm:item.nugget_pu238"]], "title": { "en_US": "Plutonium-238", - "ru_RU": "Плутоний-238" + "ru_RU": "Плутоний-238" }, "content": { "en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].

Moderately radioactive, very hot.", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-239.json b/src/main/resources/assets/hbm/manual/material/plutonium-239.json index f64b725f8..ee3cf2d0b 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-239.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-239.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_pu239"], ["hbm:item.billet_pu239"], ["hbm:item.nugget_pu239"]], "title": { "en_US": "Plutonium-239", - "ru_RU": "Плутоний-239" + "ru_RU": "Плутоний-239" }, "content": { "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-240.json b/src/main/resources/assets/hbm/manual/material/plutonium-240.json index 859bfd7c0..8c5edce45 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-240.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-240.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_pu240"], ["hbm:item.billet_pu240"], ["hbm:item.nugget_pu240"]], "title": { "en_US": "Plutonium-240", - "ru_RU": "Плутоний-240" + "ru_RU": "Плутоний-240" }, "content": { "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or inspecialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json index 096b8864c..67a4de27d 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-241.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-241.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_pu241"], ["hbm:item.billet_pu241"], ["hbm:item.nugget_pu241"]], "title": { "en_US": "Plutonium-241", - "ru_RU": "Плутоний-241" + "ru_RU": "Плутоний-241" }, "content": { "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json index c5cb2f1a4..fe8864f91 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_pu_mix"], ["hbm:item.billet_pu_mix"], ["hbm:item.nugget_pu_mix"]], "title": { "en_US": "Reactor-Grade Plutonium", - "ru_RU": "Плутоний реакторного качества" + "ru_RU": "Плутоний реакторного качества" }, "content": { "en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium.json b/src/main/resources/assets/hbm/manual/material/plutonium.json index 719c14800..7416907b7 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_plutonium"], ["hbm:item.billet_plutonium"], ["hbm:item.nugget_plutonium"], ["hbm:item.powder_plutonium"]], "title": { "en_US": "Plutonium", - "ru_RU": "Плутоний" + "ru_RU": "Плутоний" }, "content": { "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.

Moderately radioactive.

See also:
[[Plutonium-238]]
[[Plutonium-239]]
[[Plutonium-240]]
[[Plutonium-241]]", diff --git a/src/main/resources/assets/hbm/manual/material/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json index c36e74218..3f4e25da7 100644 --- a/src/main/resources/assets/hbm/manual/material/polonium.json +++ b/src/main/resources/assets/hbm/manual/material/polonium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_polonium"], ["hbm:item.billet_polonium"], ["hbm:item.nugget_polonium"]], "title": { "en_US": "Polonium-210", - "ru_RU": "Полоний-210" + "ru_RU": "Полоний-210" }, "content": { "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot.", diff --git a/src/main/resources/assets/hbm/manual/material/polymer.json b/src/main/resources/assets/hbm/manual/material/polymer.json index 9c540925b..3cbe6d6fb 100644 --- a/src/main/resources/assets/hbm/manual/material/polymer.json +++ b/src/main/resources/assets/hbm/manual/material/polymer.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_polymer"], ["hbm:item.powder_polymer"]], "title": { "en_US": "Polymer", - "ru_RU": "Полимер" + "ru_RU": "Полимер" }, "content": { "en_US": "Polymer ('Teflon') is the first available type of plastic. Requires [[petroleum gas|Petroleum Gas]] and therefore [[oil processing|Crude Oil]].

Fully interchangable with [[Bakelite]], which becomes available after [[oil cracking|Catalytic Cracking Tower]].", diff --git a/src/main/resources/assets/hbm/manual/material/radium.json b/src/main/resources/assets/hbm/manual/material/radium.json index 331d37adc..ad6c7ed8f 100644 --- a/src/main/resources/assets/hbm/manual/material/radium.json +++ b/src/main/resources/assets/hbm/manual/material/radium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_ra226"], ["hbm:item.billet_ra226"], ["hbm:item.nugget_ra226"], ["hbm:item.powder_ra226"]], "title": { "en_US": "Radium-226", - "ru_RU": "Радий-226" + "ru_RU": "Радий-226" }, "content": { "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/rubber.json b/src/main/resources/assets/hbm/manual/material/rubber.json index e317d6752..bdc560004 100644 --- a/src/main/resources/assets/hbm/manual/material/rubber.json +++ b/src/main/resources/assets/hbm/manual/material/rubber.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_rubber"]], "title": { "en_US": "Rubber", - "ru_RU": "Резина" + "ru_RU": "Резина" }, "content": { "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe.", diff --git a/src/main/resources/assets/hbm/manual/material/silicon.json b/src/main/resources/assets/hbm/manual/material/silicon.json index 67951240c..2ff2706b0 100644 --- a/src/main/resources/assets/hbm/manual/material/silicon.json +++ b/src/main/resources/assets/hbm/manual/material/silicon.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_silicon"], ["hbm:item.billet_silicon"], ["hbm:item.nugget_silicon"]], "title": { "en_US": "Silicon", - "ru_RU": "Кремний" + "ru_RU": "Кремний" }, "content": { "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing.", diff --git a/src/main/resources/assets/hbm/manual/material/sodium.json b/src/main/resources/assets/hbm/manual/material/sodium.json index 6ad6ac6f7..42a12db2d 100644 --- a/src/main/resources/assets/hbm/manual/material/sodium.json +++ b/src/main/resources/assets/hbm/manual/material/sodium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.powder_sodium"]], "title": { "en_US": "Sodium", - "ru_RU": "Натрий" + "ru_RU": "Натрий" }, "content": { "en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant.", diff --git a/src/main/resources/assets/hbm/manual/material/steel.json b/src/main/resources/assets/hbm/manual/material/steel.json index 83c6f8867..57d3a38e0 100644 --- a/src/main/resources/assets/hbm/manual/material/steel.json +++ b/src/main/resources/assets/hbm/manual/material/steel.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_steel"], ["hbm:item.plate_steel"], ["hbm:item.powder_steel"]], "title": { "en_US": "Steel", - "ru_RU": "Сталь" + "ru_RU": "Сталь" }, "content": { "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].", diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index 7d9b5915b..6de200015 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.sulfur"]], "title": { "en_US": "Sulfur", - "ru_RU": "Сера" + "ru_RU": "Сера" }, "content": { "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", diff --git a/src/main/resources/assets/hbm/manual/material/tantalium.json b/src/main/resources/assets/hbm/manual/material/tantalium.json index e3d0ee9c2..7b68bd468 100644 --- a/src/main/resources/assets/hbm/manual/material/tantalium.json +++ b/src/main/resources/assets/hbm/manual/material/tantalium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_tantalium"], ["hbm:item.powder_tantalium"], ["hbm:item.nugget_tantalium"]], "title": { "en_US": "Tantalium", - "ru_RU": "Тантал" + "ru_RU": "Тантал" }, "content": { "en_US": "Tantalium ('Tantalum') can be extracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.", diff --git a/src/main/resources/assets/hbm/manual/material/technetium.json b/src/main/resources/assets/hbm/manual/material/technetium.json index 5eaef724f..cc9e55a8f 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium.json +++ b/src/main/resources/assets/hbm/manual/material/technetium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.billet_technetium"], ["hbm:item.ingot_technetium"], ["hbm:item.nugget_technetium"]], "title": { "en_US": "Technetium", - "ru_RU": "Технеций" + "ru_RU": "Технеций" }, "content": { "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.

Primarily used for [[technetium steel|Technetium Steel]].

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/technetium_steel.json b/src/main/resources/assets/hbm/manual/material/technetium_steel.json index ac31ac861..a5167b546 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/technetium_steel.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_tcalloy"], ["hbm:item.powder_tcalloy"]], "title": { "en_US": "Technetium Steel", - "ru_RU": "Технециевая сталь" + "ru_RU": "Технециевая сталь" }, "content": { "en_US": "Alloy made from [[steel|Steel]] and [[technetium|Technetium]]. Corrosion resistant, used in stronger fluid tanks and many advanced machines. Obtainable after either a [[ZIRNOX]] or [[PWR]] due to technetium being synthetic.

Fully interchangeable with [[cadmium steel|Cadmium Steel]].", diff --git a/src/main/resources/assets/hbm/manual/material/thorium.json b/src/main/resources/assets/hbm/manual/material/thorium.json index be512e7cc..7032d8f14 100644 --- a/src/main/resources/assets/hbm/manual/material/thorium.json +++ b/src/main/resources/assets/hbm/manual/material/thorium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_th232"], ["hbm:item.billet_th232"], ["hbm:item.nugget_th232"], ["hbm:item.powder_thorium"]], "title": { "en_US": "Thorium-232", - "ru_RU": "Торий-232" + "ru_RU": "Торий-232" }, "content": { "en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.

Slightly radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/uranium-233.json b/src/main/resources/assets/hbm/manual/material/uranium-233.json index d1802f419..93ac7e040 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-233.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-233.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_u233"], ["hbm:item.billet_u233"], ["hbm:item.nugget_u233"]], "title": { "en_US": "Uranium-233", - "ru_RU": "Уран-233" + "ru_RU": "Уран-233" }, "content": { "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json index eed2f9d79..7fd575367 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-235.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-235.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_u235"], ["hbm:item.billet_u235"], ["hbm:item.nugget_u235"]], "title": { "en_US": "Uranium-235", - "ru_RU": "Уран-235" + "ru_RU": "Уран-235" }, "content": { "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/uranium-238.json b/src/main/resources/assets/hbm/manual/material/uranium-238.json index ad433990b..8594a63fa 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-238.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-238.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_u238"], ["hbm:item.billet_u238"], ["hbm:item.nugget_u238"]], "title": { "en_US": "Uranium-238", - "ru_RU": "Уран-238" + "ru_RU": "Уран-238" }, "content": { "en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.

Slightly radioactive.", diff --git a/src/main/resources/assets/hbm/manual/material/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json index 89ab05f6b..db712fba1 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium.json +++ b/src/main/resources/assets/hbm/manual/material/uranium.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_uranium"], ["hbm:item.billet_uranium"], ["hbm:item.nugget_uranium"], ["hbm:item.powder_uranium"], ["hbm:tile.ore_uranium"]], "title": { "en_US": "Uranium", - "ru_RU": "Уран" + "ru_RU": "Уран" }, "content": { "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]", diff --git a/src/main/resources/assets/hbm/manual/material/weaponsteel.json b/src/main/resources/assets/hbm/manual/material/weaponsteel.json index 52e5c11ed..c5c3aad4c 100644 --- a/src/main/resources/assets/hbm/manual/material/weaponsteel.json +++ b/src/main/resources/assets/hbm/manual/material/weaponsteel.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]], "title": { "en_US": "Weapon Steel", - "ru_RU": "Оружейная сталь" + "ru_RU": "Оружейная сталь" }, "content": { "en_US": "High-purity version of [[steel|Steel]] made in a [[rotary furnace|Rotary Furnace]]. Requires [[coker gas|Coker Gas]], and therefore a [[coker unit|Coker Unit]]. Used in many mid-game weapons, weapon modifications and missile warheads.", From 3cbc342af5d73562d9870b040a85f4af5240d895 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 11:23:12 -0600 Subject: [PATCH 471/491] Red copper --- src/main/resources/assets/hbm/manual/material/mingrade.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/mingrade.json b/src/main/resources/assets/hbm/manual/material/mingrade.json index c4943c1c3..4152da2a7 100644 --- a/src/main/resources/assets/hbm/manual/material/mingrade.json +++ b/src/main/resources/assets/hbm/manual/material/mingrade.json @@ -4,7 +4,7 @@ "trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]], "title": { "en_US": "Minecraft Grade Copper (Red Copper)", - "ru_RU": "Медь Minecraft (Красная медь)" + "ru_RU": "Красная медь" }, "content": { "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form.", From f7cf05d944f91ef60e1d9a7498021141c759cff3 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 11:35:20 -0600 Subject: [PATCH 472/491] QMAW desh fix --- src/main/resources/assets/hbm/manual/material/desh.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json index ebb91a37a..b698b0680 100644 --- a/src/main/resources/assets/hbm/manual/material/desh.json +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.", - "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деш, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей." + "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[лёгкую нефть|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртуть|Mercury]], побочный продукт [[центрифугирования|Centrifuge]] красной руды, и смесь деш, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деш медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей." } } From d6b095c568c2a79f7b2c6350d7fdaa2710b57fcd Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 11:36:31 -0600 Subject: [PATCH 473/491] Fix --- src/main/resources/assets/hbm/manual/material/ferrouranium.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/ferrouranium.json b/src/main/resources/assets/hbm/manual/material/ferrouranium.json index 3f9fa4f8d..adaed0dba 100644 --- a/src/main/resources/assets/hbm/manual/material/ferrouranium.json +++ b/src/main/resources/assets/hbm/manual/material/ferrouranium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition.", - "ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[тигле|Crucible]]. В основном используется в дюкрете, деталях оружий и взрывных боеприпасах." + "ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[плавильне|Crucible]]. В основном используется в дюкрете, деталях оружий и взрывных боеприпасах." } } From 37279845be2177e9adf0481d2d9e7e6f7acdeb4b Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 12:02:16 -0600 Subject: [PATCH 474/491] Fixes --- src/main/resources/assets/hbm/manual/material/lead.json | 2 +- src/main/resources/assets/hbm/manual/material/neptunium.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-238.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-239.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-240.json | 2 +- src/main/resources/assets/hbm/manual/material/polonium.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/lead.json b/src/main/resources/assets/hbm/manual/material/lead.json index 9620ac425..d00e85eee 100644 --- a/src/main/resources/assets/hbm/manual/material/lead.json +++ b/src/main/resources/assets/hbm/manual/material/lead.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits.", - "ru_RU": "Обычный ресурс. В основном используется для вещей, связанных с радиацией, а также для боеприпасов и в качестве припоя для многих схем." + "ru_RU": "Распространённый ресурс. В основном используется для вещей, связанных с радиацией, а также для боеприпасов и в качестве припоя для многих схем." } } diff --git a/src/main/resources/assets/hbm/manual/material/neptunium.json b/src/main/resources/assets/hbm/manual/material/neptunium.json index ae4865970..35eb51058 100644 --- a/src/main/resources/assets/hbm/manual/material/neptunium.json +++ b/src/main/resources/assets/hbm/manual/material/neptunium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]].", - "ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащённое нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащённое нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]]." + "ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе из [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащённое нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащённое нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-238.json b/src/main/resources/assets/hbm/manual/material/plutonium-238.json index 3612bd86d..4ff984f27 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-238.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-238.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].

Moderately radioactive, very hot.", - "ru_RU": "Радиоизотоп, в основном используется в [[РТГ|RTG]]. Получается из гексафторида [[плутония|Plutonium]] или из различных ядерных топлив, преимущественно использующих [[уран-235|Uranium-235]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Плутоний-210-Бериллий для [[РБМК|RBMK]].

Умеренно радиоактивен, очень горячий." + "ru_RU": "Радиоизотоп, в основном используется в [[РИТЭГ|RTG]]. Получается из гексафторида [[плутония|Plutonium]] или из различных ядерных топлив, преимущественно использующих [[уран-235|Uranium-235]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках плутоний-210-бериллевых источниках для [[РБМК|RBMK]].

Умеренно радиоактивен, очень горячий." } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-239.json b/src/main/resources/assets/hbm/manual/material/plutonium-239.json index ee3cf2d0b..c06031700 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-239.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-239.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.

Moderately radioactive.", - "ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащённых топливах для различных реакторов, в смеси с другими изотопами для менее обогащённых топлив или как делящийся материал во многих ядерных бомбах.

Умеренно радиоактивен." + "ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащённом топливе для различных реакторов, в смеси с другими изотопами для менее обогащённых топлив или как делящийся материал во многих ядерных бомбах.

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-240.json b/src/main/resources/assets/hbm/manual/material/plutonium-240.json index 8c5edce45..b1ecc726e 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-240.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-240.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or inspecialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].", - "ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[циркониевых|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]]." + "ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[ЦТС|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json index 3f4e25da7..985a382a3 100644 --- a/src/main/resources/assets/hbm/manual/material/polonium.json +++ b/src/main/resources/assets/hbm/manual/material/polonium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot.", - "ru_RU": "Радиоизотоп, получаемый из переработки нейтронных источников [[радия-226|Radium-226]]. Используется для [[РТГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках Полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий." + "ru_RU": "Радиоизотоп, получаемый из переработки нейтронных источников [[радия-226|Radium-226]]. Используется для [[РИТЭГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках Полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий." } } From 12d2d6b8dd1ec1c243150dcd2f7ca7888be2cc51 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 12:10:30 -0600 Subject: [PATCH 475/491] Fixed QMAW again --- .../resources/assets/hbm/manual/material/plutonium-241.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json index 67a4de27d..85c28ab7d 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-241.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-241.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive.", - "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанных топлив [[РБМК|RBMK]], богатых [[плутонием-240|Plutonium-240]], а также из определенных типов [[циркониевых|Zirconium]] топлив быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен." + "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанного топлива [[РБМК|RBMK]], богатого [[плутонием-240|Plutonium-240]], а также из определенных видов [[циркониевого|Zirconium]] топлива быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен." } } From b75e14d9fc73474192c41387188313f92eb1f68d Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 12:11:43 -0600 Subject: [PATCH 476/491] Reader fixed --- src/main/resources/assets/hbm/lang/ru_RU.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 6f1de13c1..da9a913b4 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -869,7 +869,7 @@ container.reix=Мэйнфрейм Rei-X container.rttyController=Контроллер редстоун-радио container.rtg=РИТЭГ-генератор container.rtgFurnace=РИТЭГ-печь -container.rttyReader=Редстоун-радио ридер +container.rttyReader=Редстоун-радио считыватель container.rttyCounter=Редстоун-радио счётчик предметов container.rttyLogic=Редстоун-радио логический приёмник container.rttyReceiver=Редстоун-радио приёмник @@ -6279,7 +6279,7 @@ tile.radio_torch_counter.name=Редстоун-радио счётчик пре tile.radio_torch_counter.desc=Ставится на плоские поверхности или совместимые компараторные блоки$Сигнал зависит от количества нужных предметов tile.radio_torch_logic.name=Редстоун-радио логический приёмник tile.radio_torch_logic.desc=Размещается на плоских поверхностях или совместимых с компаратором блоках$Сопоставляет сигналы красного камня с условиями, оцениваемыми в заданном порядке$Числовые или строковые входы сравниваются с константой -tile.radio_torch_reader.name=Редстоун-радио ридер +tile.radio_torch_reader.name=Редстоун-радио считыватель tile.radio_torch_reader.desc=Считывает значения из подключенных блоков,$а затем отправляет их с указанной частотой tile.radio_torch_receiver.name=Редстоун-радио приёмник tile.radio_torch_receiver.desc=Ставится на плоские поверхности или совместимые компараторные блоки From 518871bf2bc4900ce175f2d9fc2fb2ad7f4cba05 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 12:24:33 -0600 Subject: [PATCH 477/491] Polonium fix --- src/main/resources/assets/hbm/manual/material/polonium.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json index 985a382a3..22c8ddc26 100644 --- a/src/main/resources/assets/hbm/manual/material/polonium.json +++ b/src/main/resources/assets/hbm/manual/material/polonium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot.", - "ru_RU": "Радиоизотоп, получаемый из переработки нейтронных источников [[радия-226|Radium-226]]. Используется для [[РИТЭГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках Полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий." + "ru_RU": "Радиоизотоп, получаемый переработкой нейтронных источников [[радия-226|Radium-226]]. Используется для [[РИТЭГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий." } } From 61e10fe48fe4aaaf9a3d15a9182b16698659722c Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 12:25:05 -0600 Subject: [PATCH 478/491] I'm tired of fixing --- src/main/resources/assets/hbm/manual/material/radium.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/material/radium.json b/src/main/resources/assets/hbm/manual/material/radium.json index ad6c7ed8f..f841ea5aa 100644 --- a/src/main/resources/assets/hbm/manual/material/radium.json +++ b/src/main/resources/assets/hbm/manual/material/radium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.

Moderately radioactive.", - "ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечён с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.

Умеренно радиоактивен." + "ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечён с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.

Умеренно радиоактивен." } } From 7e87efcc489cf5a7ef28526caa51bf2f4163e4dd Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 12:44:22 -0600 Subject: [PATCH 479/491] QMAW --- .../resources/assets/hbm/manual/material/plutonium-241.json | 2 +- src/main/resources/assets/hbm/manual/material/plutonium.json | 2 +- src/main/resources/assets/hbm/manual/material/rubber.json | 2 +- src/main/resources/assets/hbm/manual/material/silicon.json | 2 +- src/main/resources/assets/hbm/manual/material/sodium.json | 2 +- src/main/resources/assets/hbm/manual/material/sulfur.json | 2 +- src/main/resources/assets/hbm/manual/material/tantalium.json | 2 +- src/main/resources/assets/hbm/manual/material/technetium.json | 2 +- src/main/resources/assets/hbm/manual/material/thorium.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json index 85c28ab7d..033808d58 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-241.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-241.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive.", - "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанного топлива [[РБМК|RBMK]], богатого [[плутонием-240|Plutonium-240]], а также из определенных видов [[циркониевого|Zirconium]] топлива быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен." + "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанного топлива [[РБМК|RBMK]], богатого [[плутонием-240|Plutonium-240]], а также из определённых видов [[циркониевого|Zirconium]] топлива быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium.json b/src/main/resources/assets/hbm/manual/material/plutonium.json index 7416907b7..ad7168886 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.

Moderately radioactive.

See also:
[[Plutonium-238]]
[[Plutonium-239]]
[[Plutonium-240]]
[[Plutonium-241]]", - "ru_RU": "Редкая форма нечистого плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определенных рецептов [[циклотрона|Cyclotron]].

Умеренно радиоактивен.

См. также:
[[Плутоний-238|Plutonium-238]]
[[Плутоний-239|Plutonium-239]]
[[Плутоний-240|Plutonium-240]]
[[Плутоний-241|Plutonium-241]]" + "ru_RU": "Редкая форма нечистого плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определённых рецептов [[циклотрона|Cyclotron]].

Умеренно радиоактивен.

См. также:
[[Плутоний-238|Plutonium-238]]
[[Плутоний-239|Plutonium-239]]
[[Плутоний-240|Plutonium-240]]
[[Плутоний-241|Plutonium-241]]" } } diff --git a/src/main/resources/assets/hbm/manual/material/rubber.json b/src/main/resources/assets/hbm/manual/material/rubber.json index bdc560004..66f8849fe 100644 --- a/src/main/resources/assets/hbm/manual/material/rubber.json +++ b/src/main/resources/assets/hbm/manual/material/rubber.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe.", - "ru_RU": "Продукт переработки нефти, получаемый из [[ненасыщенных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах." + "ru_RU": "Продукт переработки нефти, получаемый из [[непредельных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах." } } diff --git a/src/main/resources/assets/hbm/manual/material/silicon.json b/src/main/resources/assets/hbm/manual/material/silicon.json index 2ff2706b0..1484af12f 100644 --- a/src/main/resources/assets/hbm/manual/material/silicon.json +++ b/src/main/resources/assets/hbm/manual/material/silicon.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing.", - "ru_RU": "Важный материал для производства интегральных схем и любой электроники, более сложной, чем аналоговые схемы. Производится в [[электродуговой печи|Electric Arc Furnace]] из материалов, содержащих диоксид кремния, таких как обычный песок, незер-кварц, стекловолокно, кремень или [[асбест|Asbestos]]. В основном используется в виде пластин (т.е. заготовок), которые [[прессуются|Burner Press]] с использованием штампа для схем, а затем превращаются в различные типы микросхем. Из-за необходимости в дуговой печи кремний доступен после получения [[полимера|Polymer]], что требует переработки [[нефти|Crude Oil]]." + "ru_RU": "Важный материал для производства интегральных схем и любой электроники, более сложной, чем аналоговые схемы. Производится в [[электродуговой печи|Electric Arc Furnace]] из материалов, содержащих диоксид кремния, таких как обычный песок, кварц незера, стекловолокно, кремень или [[асбест|Asbestos]]. В основном используется в виде пластин (т.е. заготовок), которые [[прессуются|Burner Press]] с использованием штампа для схем, а затем превращаются в различные типы микросхем. Из-за необходимости в дуговой печи кремний доступен после получения [[полимера|Polymer]], что требует переработки [[нефти|Crude Oil]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/sodium.json b/src/main/resources/assets/hbm/manual/material/sodium.json index 42a12db2d..57b38539f 100644 --- a/src/main/resources/assets/hbm/manual/material/sodium.json +++ b/src/main/resources/assets/hbm/manual/material/sodium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant.", - "ru_RU": "В основном добывается из содалита, драгоценного камня, который является побочным продуктом [[центрифуги|Centrifuge]] при переработке многих руд. Используется в жидкой форме как мощный охладитель для [[ВВЭР|PWR]]." + "ru_RU": "В основном добывается из содалита, драгоценного камня, который является побочным продуктом [[центрифугования|Centrifuge]] при переработке многих руд. Используется в жидкой форме как мощный охладитель для [[ВВЭР|PWR]]." } } diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index 6de200015..01e8864e8 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", - "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных целей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в йеллоукейке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя." + "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных вещей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в жётлом кеке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя." } } diff --git a/src/main/resources/assets/hbm/manual/material/tantalium.json b/src/main/resources/assets/hbm/manual/material/tantalium.json index 7b68bd468..082342961 100644 --- a/src/main/resources/assets/hbm/manual/material/tantalium.json +++ b/src/main/resources/assets/hbm/manual/material/tantalium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Tantalium ('Tantalum') can be extracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.", - "ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одном определенном регионе мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб." + "ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одной определённой области мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб." } } diff --git a/src/main/resources/assets/hbm/manual/material/technetium.json b/src/main/resources/assets/hbm/manual/material/technetium.json index cc9e55a8f..dea678478 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium.json +++ b/src/main/resources/assets/hbm/manual/material/technetium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.

Primarily used for [[technetium steel|Technetium Steel]].

Moderately radioactive.", - "ru_RU": "Синтетический металл, перерабатывается из топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых топлив [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.

В основном используется для [[технециевой стали|Technetium Steel]].

Умеренно радиоактивен." + "ru_RU": "Синтетический металл, перерабатывается из топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых видов топлива [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.

В основном используется для [[технециевой стали|Technetium Steel]].

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/thorium.json b/src/main/resources/assets/hbm/manual/material/thorium.json index 7032d8f14..43ebff79a 100644 --- a/src/main/resources/assets/hbm/manual/material/thorium.json +++ b/src/main/resources/assets/hbm/manual/material/thorium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.

Slightly radioactive.", - "ru_RU": "Фертильный (т.е. пригодный для размножения) изотоп, дающий [[уран-233|Uranium-233]]. Может быть облучен в [[РБМК|RBMK]] для производства [[ториевого топлива|Thorium Fuel]] или комбинирован с ураном-233. Топлива, производные от тория, обычно экономичны, но не очень мощные. Также используется в [[жидкой ториевой соли|Liquid Thorium Salt]], мощном охладителе [[ВВЭР|PWR]], превращающем его в реактор на расплавленных солях, который быстро производит большое количество урана-233.

Слабо радиоактивен." + "ru_RU": "Фертильный (т.е. пригодный для размножения) изотоп, дающий [[уран-233|Uranium-233]]. Может быть облучен в [[РБМК|RBMK]] для производства [[ториевого топлива|Thorium Fuel]] или комбинирован с ураном-233. Топливо, производное от тория, обычно экономично, но не очень мощное. Также используется в [[жидкой ториевой соли|Liquid Thorium Salt]], мощном охладителе [[ВВЭР|PWR]], превращающем его в реактор на расплавленных солях, который быстро производит большое количество урана-233.

Слабо радиоактивен." } } From a2a91d929adad81ceac845c53622f153c8e73ac6 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 12:47:43 -0600 Subject: [PATCH 480/491] QMAW again --- src/main/resources/assets/hbm/manual/material/uranium-233.json | 2 +- src/main/resources/assets/hbm/manual/material/uranium-235.json | 2 +- src/main/resources/assets/hbm/manual/material/uranium.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/uranium-233.json b/src/main/resources/assets/hbm/manual/material/uranium-233.json index 93ac7e040..e659d193b 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-233.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-233.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].

Moderately radioactive.", - "ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путём переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащенное топливо урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].

Умеренно радиоактивен." + "ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путём переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащённое топливо из урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json index 7fd575367..253c53ed5 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-235.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-235.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive.", - "ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенного уранового топлива. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен." + "ru_RU": "Обогащённый уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенного уранового топлива. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json index db712fba1..cbec7f769 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium.json +++ b/src/main/resources/assets/hbm/manual/material/uranium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]", - "ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащен путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]" + "ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащён путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]" } } From e062b4d2c38c2e24166cbf46436c8aa4feea0d4a Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 13:34:06 -0600 Subject: [PATCH 481/491] More manual fixes --- src/main/resources/assets/hbm/manual/material/uranium-238.json | 2 +- src/main/resources/assets/hbm/manual/material/uranium.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/uranium-238.json b/src/main/resources/assets/hbm/manual/material/uranium-238.json index 8594a63fa..196aed97c 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-238.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-238.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.

Slightly radioactive.", - "ru_RU": "Истощенный уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроуране|Ferrouranium]], для [[боеприпасов с истощенным ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных топлив. Топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].

Слабо радиоактивен." + "ru_RU": "Обеднённый уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроуране|Ferrouranium]], для [[боеприпасов с обеднённым ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных видов топлива. Виды топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].

Слабо радиоактивен." } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json index cbec7f769..72f5b29dd 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium.json +++ b/src/main/resources/assets/hbm/manual/material/uranium.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]", - "ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащён путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]" + "ru_RU": "Природный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащён путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать природный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]" } } From 742595c83f47b08772c8453372a6cd439ac8216d Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 13:35:25 -0600 Subject: [PATCH 482/491] I18n implementation for Meteorite Swords and Dusted Steel --- .../com/hbm/items/special/ItemHotDusted.java | 12 ++--- .../hbm/items/tool/ItemSwordMeteorite.java | 49 ++++++++++--------- src/main/resources/assets/hbm/lang/en_US.lang | 26 ++++++++++ 3 files changed, 56 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/hbm/items/special/ItemHotDusted.java b/src/main/java/com/hbm/items/special/ItemHotDusted.java index 64cee05ca..7ddecbbbd 100644 --- a/src/main/java/com/hbm/items/special/ItemHotDusted.java +++ b/src/main/java/com/hbm/items/special/ItemHotDusted.java @@ -1,22 +1,20 @@ package com.hbm.items.special; - +import com.hbm.util.i18n.I18nUtil; import java.util.List; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; - public class ItemHotDusted extends ItemHot { - public ItemHotDusted(int heat) { super(heat); this.setHasSubtypes(true); } - + @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - list.add("Forged " + stack.getItemDamage() + " time(s)"); + list.add(I18nUtil.resolveKey("item.hot_dusted.forged") + " " + stack.getItemDamage() + " " + + I18nUtil.resolveKey("item.hot_dusted.times")); } - + public static int getMaxHeat(ItemStack stack) { return heat - stack.getItemDamage() * 10; } diff --git a/src/main/java/com/hbm/items/tool/ItemSwordMeteorite.java b/src/main/java/com/hbm/items/tool/ItemSwordMeteorite.java index eefbae55d..933db145a 100644 --- a/src/main/java/com/hbm/items/tool/ItemSwordMeteorite.java +++ b/src/main/java/com/hbm/items/tool/ItemSwordMeteorite.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.hbm.items.ModItems; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -26,63 +27,63 @@ public class ItemSwordMeteorite extends ItemSwordAbility { super.addInformation(stack, player, list, ext); if(this == ModItems.meteorite_sword) { - list.add(EnumChatFormatting.ITALIC + "Forged from a fallen star"); - list.add(EnumChatFormatting.ITALIC + "Sharper than most terrestrial blades"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.desc2")); } if(this == ModItems.meteorite_sword_seared) { - list.add(EnumChatFormatting.ITALIC + "Fire strengthens the blade"); - list.add(EnumChatFormatting.ITALIC + "Making it even more powerful"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.seared.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.seared.desc2")); } if(this == ModItems.meteorite_sword_reforged) { - list.add(EnumChatFormatting.ITALIC + "The sword has been reforged"); - list.add(EnumChatFormatting.ITALIC + "To rectify past imperfections"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.reforged.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.reforged.desc2")); } if(this == ModItems.meteorite_sword_hardened) { - list.add(EnumChatFormatting.ITALIC + "Extremely high pressure has been used"); - list.add(EnumChatFormatting.ITALIC + "To harden the blade further"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.hardened.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.hardened.desc2")); } if(this == ModItems.meteorite_sword_alloyed) { - list.add(EnumChatFormatting.ITALIC + "Cobalt fills the fissures"); - list.add(EnumChatFormatting.ITALIC + "Strengthening the sword"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.alloyed.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.alloyed.desc2")); } if(this == ModItems.meteorite_sword_machined) { - list.add(EnumChatFormatting.ITALIC + "Advanced machinery was used"); - list.add(EnumChatFormatting.ITALIC + "To refine the blade even more"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.machined.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.machined.desc2")); } if(this == ModItems.meteorite_sword_treated) { - list.add(EnumChatFormatting.ITALIC + "Chemicals have been applied"); - list.add(EnumChatFormatting.ITALIC + "Making the sword more powerful"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.treated.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.treated.desc2")); } if(this == ModItems.meteorite_sword_etched) { - list.add(EnumChatFormatting.ITALIC + "Acids clean the material"); - list.add(EnumChatFormatting.ITALIC + "To make this the perfect sword"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.etched.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.etched.desc2")); } if(this == ModItems.meteorite_sword_bred) { - list.add(EnumChatFormatting.ITALIC + "Immense heat and radiation"); - list.add(EnumChatFormatting.ITALIC + "Compress the material"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.bred.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.bred.desc2")); } if(this == ModItems.meteorite_sword_irradiated) { - list.add(EnumChatFormatting.ITALIC + "The power of the Atom"); - list.add(EnumChatFormatting.ITALIC + "Gives the sword might"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.irradiated.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.irradiated.desc2")); } if(this == ModItems.meteorite_sword_fused) { - list.add(EnumChatFormatting.ITALIC + "This blade has met"); - list.add(EnumChatFormatting.ITALIC + "With the forces of the stars"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.fused.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.fused.desc2")); } if(this == ModItems.meteorite_sword_baleful) { - list.add(EnumChatFormatting.ITALIC + "This sword has met temperatures"); - list.add(EnumChatFormatting.ITALIC + "Far beyond what normal material can endure"); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.baleful.desc1")); + list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.baleful.desc2")); } /* diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e0a543148..86896916f 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3183,6 +3183,8 @@ item.ingot_sr90.name=Strontium-90 Ingot item.ingot_starmetal.name=§9Starmetal Ingot§r item.ingot_steel.name=Steel Ingot item.ingot_steel_dusted.name=Dusted Steel Ingot +item.hot_dusted.forged=Forged +item.hot_dusted.times=time(s) item.ingot_tantalium.name=Tantalium Ingot item.ingot_tantalium.desc='Tantalum' item.ingot_tantalium.desc.P11=AKA Tantalum. @@ -3327,17 +3329,41 @@ item.mese_pickaxe.name=Mese Pickaxe item.meteor_charm.name=Meteor Charm item.meteor_remote.name=Meteorite Remote item.meteorite_sword.name=Meteorite Sword +item.meteorite_sword.desc1=Forged from a fallen star +item.meteorite_sword.desc2=Sharper than most terrestrial blades item.meteorite_sword_seared.name=Meteorite Sword (Seared) +item.meteorite_sword.seared.desc1=Fire strengthens the blade +item.meteorite_sword.seared.desc2=Making it even more powerful item.meteorite_sword_reforged.name=Meteorite Sword (Reforged) +item.meteorite_sword.reforged.desc1=The sword has been reforged +item.meteorite_sword.reforged.desc2=To rectify past imperfections item.meteorite_sword_hardened.name=Meteorite Sword (Hardened) +item.meteorite_sword.hardened.desc1=Extremely high pressure has been used +item.meteorite_sword.hardened.desc2=To harden the blade further item.meteorite_sword_alloyed.name=Meteorite Sword (Alloyed) +item.meteorite_sword.alloyed.desc1=Cobalt fills the fissures +item.meteorite_sword.alloyed.desc2=Strengthening the sword item.meteorite_sword_machined.name=Meteorite Sword (Machined) +item.meteorite_sword.machined.desc1=Advanced machinery was used +item.meteorite_sword.machined.desc2=To refine the blade even more item.meteorite_sword_treated.name=Meteorite Sword (Treated) +item.meteorite_sword.treated.desc1=Chemicals have been applied +item.meteorite_sword.treated.desc2=Making the sword more powerful item.meteorite_sword_etched.name=Meteorite Sword (Etched) +item.meteorite_sword.etched.desc1=Acids clean the material +item.meteorite_sword.etched.desc2=To make this the perfect sword item.meteorite_sword_bred.name=Meteorite Sword (Bred) +item.meteorite_sword.bred.desc1=Immense heat and radiation +item.meteorite_sword.bred.desc2=Compress the material item.meteorite_sword_irradiated.name=Meteorite Sword (Irradiated) +item.meteorite_sword.irradiated.desc1=The power of the Atom +item.meteorite_sword.irradiated.desc2=Gives the sword might item.meteorite_sword_fused.name=Meteorite Sword (Fused) +item.meteorite_sword.fused.desc1=This blade has met +item.meteorite_sword.fused.desc2=With the forces of the stars item.meteorite_sword_baleful.name=Meteorite Sword (Baleful) +item.meteorite_sword.baleful.desc1=This sword has met temperatures +item.meteorite_sword.baleful.desc2=Far beyond what normal material can endure item.mike_cooling_unit.name=Deuterium Cooling Unit item.mike_core.name=Uranium Coated Deuterium Tank item.mike_deut.name=Deuterium Tank From fcabf659af9d11643ca501bc891bfbc83a19ad6b Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 13:42:17 -0600 Subject: [PATCH 483/491] To be translated --- src/main/resources/assets/hbm/lang/ru_RU.lang | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index da9a913b4..e22069166 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -3589,18 +3589,43 @@ item.mese_axe.name=Месе топор item.mese_pickaxe.name=Месе кирка item.meteor_charm.name=Талисман от метеоритов item.meteor_remote.name=Устройство для вызова метеоритов + item.meteorite_sword.name=Метеоритовый меч +item.meteorite_sword.desc1=Forged from a fallen star +item.meteorite_sword.desc2=Sharper than most terrestrial blades item.meteorite_sword_seared.name=Метеоритовый меч (Опаленный) +item.meteorite_sword.seared.desc1=Fire strengthens the blade +item.meteorite_sword.seared.desc2=Making it even more powerful item.meteorite_sword_reforged.name=Метеоритовый меч (Перекованный) +item.meteorite_sword.reforged.desc1=The sword has been reforged +item.meteorite_sword.reforged.desc2=To rectify past imperfections item.meteorite_sword_hardened.name=Метеоритовый меч (Закалённый) +item.meteorite_sword.hardened.desc1=Extremely high pressure has been used +item.meteorite_sword.hardened.desc2=To harden the blade further item.meteorite_sword_alloyed.name=Метеоритовый меч (Легированный) +item.meteorite_sword.alloyed.desc1=Cobalt fills the fissures +item.meteorite_sword.alloyed.desc2=Strengthening the sword item.meteorite_sword_machined.name=Метеоритовый меч (Механически обработанный) +item.meteorite_sword.machined.desc1=Advanced machinery was used +item.meteorite_sword.machined.desc2=To refine the blade even more item.meteorite_sword_treated.name=Метеоритовый меч (Обработанный) +item.meteorite_sword.treated.desc1=Chemicals have been applied +item.meteorite_sword.treated.desc2=Making the sword more powerful item.meteorite_sword_etched.name=Метеоритовый меч (Гравированный) +item.meteorite_sword.etched.desc1=Acids clean the material +item.meteorite_sword.etched.desc2=To make this the perfect sword item.meteorite_sword_bred.name=Метеоритовый меч (Разведённый) +item.meteorite_sword.bred.desc1=Immense heat and radiation +item.meteorite_sword.bred.desc2=Compress the material item.meteorite_sword_irradiated.name=Метеоритовый меч (Облучённый) +item.meteorite_sword.irradiated.desc1=The power of the Atom +item.meteorite_sword.irradiated.desc2=Gives the sword might item.meteorite_sword_fused.name=Метеоритовый меч (Сплавленный) +item.meteorite_sword.fused.desc1=This blade has met +item.meteorite_sword.fused.desc2=With the forces of the stars item.meteorite_sword_baleful.name=Метеоритовый меч (Зловещий) +item.meteorite_sword.baleful.desc1=This sword has met temperatures +item.meteorite_sword.baleful.desc2=Far beyond what normal material can endure item.mike_cooling_unit.name=Блок охлаждения дейтерия item.mike_core.name=Дейтериевый бак с урановым покрытием item.mike_deut.name=Дейтериевый бак @@ -6671,3 +6696,7 @@ general.na=Н/Д error.generic=### Я ОШИБКА ### // Last updated 24.08.2025 by Bufka2011, MrKimkimora and TactiCOOLHimZa // + +# Hot Dusted Item +item.hot_dusted.forged=Кован +item.hot_dusted.times=раз(а) From 6ed83ab7ec8235e8f9223f128c518f6a53807ad2 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 14:13:45 -0600 Subject: [PATCH 484/491] Updated swords translations --- src/main/resources/assets/hbm/lang/ru_RU.lang | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index e22069166..906974c2e 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -3591,41 +3591,41 @@ item.meteor_charm.name=Талисман от метеоритов item.meteor_remote.name=Устройство для вызова метеоритов item.meteorite_sword.name=Метеоритовый меч -item.meteorite_sword.desc1=Forged from a fallen star -item.meteorite_sword.desc2=Sharper than most terrestrial blades -item.meteorite_sword_seared.name=Метеоритовый меч (Опаленный) -item.meteorite_sword.seared.desc1=Fire strengthens the blade -item.meteorite_sword.seared.desc2=Making it even more powerful +item.meteorite_sword.desc1=Выкован из павшей звезды +item.meteorite_sword.desc2=Острее, чем большинство земных лезвий +item.meteorite_sword_seared.name=Метеоритовый меч (Опалённый) +item.meteorite_sword.seared.desc1=Огонь укрепляет клинок, +item.meteorite_sword.seared.desc2=Делая его даже ещё мощнее item.meteorite_sword_reforged.name=Метеоритовый меч (Перекованный) -item.meteorite_sword.reforged.desc1=The sword has been reforged -item.meteorite_sword.reforged.desc2=To rectify past imperfections +item.meteorite_sword.reforged.desc1=Меч был перекован, +item.meteorite_sword.reforged.desc2=Чтобы искоренить прошлые недостатки item.meteorite_sword_hardened.name=Метеоритовый меч (Закалённый) -item.meteorite_sword.hardened.desc1=Extremely high pressure has been used -item.meteorite_sword.hardened.desc2=To harden the blade further +item.meteorite_sword.hardened.desc1=Экстремально высокое давление использовано, +item.meteorite_sword.hardened.desc2=Чтобы закаливать этот меч дальше item.meteorite_sword_alloyed.name=Метеоритовый меч (Легированный) -item.meteorite_sword.alloyed.desc1=Cobalt fills the fissures -item.meteorite_sword.alloyed.desc2=Strengthening the sword +item.meteorite_sword.alloyed.desc1=Кобальт заполняет трещины, +item.meteorite_sword.alloyed.desc2=Упрочняя меч item.meteorite_sword_machined.name=Метеоритовый меч (Механически обработанный) -item.meteorite_sword.machined.desc1=Advanced machinery was used -item.meteorite_sword.machined.desc2=To refine the blade even more +item.meteorite_sword.machined.desc1=Было использовано передовое оборудование, +item.meteorite_sword.machined.desc2=Чтобы еще больше усовершенствовать лезвие item.meteorite_sword_treated.name=Метеоритовый меч (Обработанный) -item.meteorite_sword.treated.desc1=Chemicals have been applied -item.meteorite_sword.treated.desc2=Making the sword more powerful +item.meteorite_sword.treated.desc1=Были применены химикаты, +item.meteorite_sword.treated.desc2=Делающие меч мощнее item.meteorite_sword_etched.name=Метеоритовый меч (Гравированный) -item.meteorite_sword.etched.desc1=Acids clean the material -item.meteorite_sword.etched.desc2=To make this the perfect sword +item.meteorite_sword.etched.desc1=Кислоты очищают материал, +item.meteorite_sword.etched.desc2=Чтобы получить этот идеальный меч item.meteorite_sword_bred.name=Метеоритовый меч (Разведённый) -item.meteorite_sword.bred.desc1=Immense heat and radiation -item.meteorite_sword.bred.desc2=Compress the material +item.meteorite_sword.bred.desc1=Огромные количества тепла и радиации +item.meteorite_sword.bred.desc2=Сжимают материал item.meteorite_sword_irradiated.name=Метеоритовый меч (Облучённый) -item.meteorite_sword.irradiated.desc1=The power of the Atom -item.meteorite_sword.irradiated.desc2=Gives the sword might +item.meteorite_sword.irradiated.desc1=Сила Атома +item.meteorite_sword.irradiated.desc2=Придает мечу мощи item.meteorite_sword_fused.name=Метеоритовый меч (Сплавленный) -item.meteorite_sword.fused.desc1=This blade has met -item.meteorite_sword.fused.desc2=With the forces of the stars +item.meteorite_sword.fused.desc1=Этот клинок встретился +item.meteorite_sword.fused.desc2=С силами звёзд item.meteorite_sword_baleful.name=Метеоритовый меч (Зловещий) -item.meteorite_sword.baleful.desc1=This sword has met temperatures -item.meteorite_sword.baleful.desc2=Far beyond what normal material can endure +item.meteorite_sword.baleful.desc1=Этот меч встретил температуры +item.meteorite_sword.baleful.desc2=Гораздо большие, чем обычный материал может выдержать item.mike_cooling_unit.name=Блок охлаждения дейтерия item.mike_core.name=Дейтериевый бак с урановым покрытием item.mike_deut.name=Дейтериевый бак From 23669e6337c7bd82a1d8f4eea4123938e6de3d02 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 15:14:30 -0600 Subject: [PATCH 485/491] YES, MY QMAW (used python for this) --- .../resources/assets/hbm/manual/material/alloy.json | 12 ++++++------ .../assets/hbm/manual/material/aluminium.json | 10 +++++----- .../assets/hbm/manual/material/arsenic.json | 8 ++++---- .../assets/hbm/manual/material/arsenic_bronze.json | 8 ++++---- .../assets/hbm/manual/material/bakelite.json | 8 ++++---- .../assets/hbm/manual/material/bismuth.json | 10 +++++----- .../assets/hbm/manual/material/bismuth_bronze.json | 10 +++++----- .../resources/assets/hbm/manual/material/bscco.json | 10 +++++----- .../assets/hbm/manual/material/cadmium.json | 8 ++++---- .../assets/hbm/manual/material/cadmium_steel.json | 8 ++++---- .../assets/hbm/manual/material/cinnabar.json | 10 +++++----- .../resources/assets/hbm/manual/material/coke.json | 8 ++++---- .../resources/assets/hbm/manual/material/copper.json | 10 +++++----- .../resources/assets/hbm/manual/material/desh.json | 10 +++++----- .../assets/hbm/manual/material/ferrouranium.json | 10 +++++----- .../assets/hbm/manual/material/graphite.json | 8 ++++---- .../assets/hbm/manual/material/gunmetal.json | 8 ++++---- .../resources/assets/hbm/manual/material/hss.json | 8 ++++---- .../resources/assets/hbm/manual/material/latex.json | 8 ++++---- .../resources/assets/hbm/manual/material/lead.json | 10 +++++----- .../assets/hbm/manual/material/mingrade.json | 10 +++++----- .../assets/hbm/manual/material/neptunium.json | 10 +++++----- .../assets/hbm/manual/material/plutonium-238.json | 10 +++++----- .../assets/hbm/manual/material/plutonium-239.json | 10 +++++----- .../assets/hbm/manual/material/plutonium-240.json | 12 ++++++------ .../assets/hbm/manual/material/plutonium-241.json | 10 +++++----- .../assets/hbm/manual/material/plutonium-rg.json | 8 ++++---- .../assets/hbm/manual/material/plutonium.json | 10 +++++----- .../assets/hbm/manual/material/polonium.json | 10 +++++----- .../assets/hbm/manual/material/polymer.json | 8 ++++---- .../resources/assets/hbm/manual/material/radium.json | 10 +++++----- .../resources/assets/hbm/manual/material/rubber.json | 10 +++++----- .../assets/hbm/manual/material/silicon.json | 10 +++++----- .../resources/assets/hbm/manual/material/sodium.json | 10 +++++----- .../resources/assets/hbm/manual/material/steel.json | 8 ++++---- .../resources/assets/hbm/manual/material/sulfur.json | 10 +++++----- .../assets/hbm/manual/material/tantalium.json | 10 +++++----- .../assets/hbm/manual/material/technetium.json | 10 +++++----- .../assets/hbm/manual/material/technetium_steel.json | 8 ++++---- .../assets/hbm/manual/material/thorium.json | 10 +++++----- .../assets/hbm/manual/material/uranium-233.json | 10 +++++----- .../assets/hbm/manual/material/uranium-235.json | 10 +++++----- .../assets/hbm/manual/material/uranium-238.json | 10 +++++----- .../assets/hbm/manual/material/uranium.json | 10 +++++----- .../assets/hbm/manual/material/weaponsteel.json | 8 ++++---- 45 files changed, 212 insertions(+), 212 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/alloy.json b/src/main/resources/assets/hbm/manual/material/alloy.json index f82cac205..fc37bc84e 100644 --- a/src/main/resources/assets/hbm/manual/material/alloy.json +++ b/src/main/resources/assets/hbm/manual/material/alloy.json @@ -1,13 +1,13 @@ { "name": "Advanced Alloy", "icon": ["hbm:item.ingot_advanced_alloy", 1, 0], - "trigger": [["hbm:item.ingot_advanced_alloy"], ["hbm:item.powder_advanced_alloy"], ["hbm:item.plate_advanced_alloy"]], - "title": { - "en_US": "Advanced Alloy", + "trigger": [["hbm:item.ingot_advanced_alloy"], ["hbm:item.powder_advanced_alloy"], ["hbm:item.plate_advanced_alloy"]], + "title": { + "en_US": "Advanced Alloy", "uk_UA": "Удосконалений сплав", - "ru_ru": "Продвинутый сплав", - "zh_CN": "高级合金" - }, + "zh_CN": "高级合金", + "ru_RU": "Продвинутый сплав" + }, "content": { "en_US": "Made in a [[blast furnace|Blast Furnace]] from [[steel|Steel]] and [[Minecraft grade copper|Minecraft Grade Copper]]. Makes better-than-diamond gear. Also used in some high-powered magnets for the [[fusion reactor|Fusion Reactor]] and the [[exposure chamber|Exposure Chamber]].", "uk_UA": "Виготовлено в [[доменній печі|Blast Furnace]] зі [[сталі|Steel]] та [[червоної міді|Minecraft Grade Copper]]. З нього робиться спорядження краще за алмазне. Також використовується в деяких потужних магнітах для [[термоядерного реактору|Fusion Reactor]] та [[камери опромінювання|Exposure Chamber]].", diff --git a/src/main/resources/assets/hbm/manual/material/aluminium.json b/src/main/resources/assets/hbm/manual/material/aluminium.json index 482872e9e..8a8af90d9 100644 --- a/src/main/resources/assets/hbm/manual/material/aluminium.json +++ b/src/main/resources/assets/hbm/manual/material/aluminium.json @@ -1,17 +1,17 @@ { "name": "Aluminium", "icon": ["hbm:item.ingot_aluminium", 1, 0], - "trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]], - "title": { - "en_US": "Aluminium", + "trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]], + "title": { + "en_US": "Aluminium", "uk_UA": "Алюміній", "ru_RU": "Алюминий", "zh_CN": "铝" - }, + }, "content": { "en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.

Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages.", "uk_UA": "Звичайний, легкий метал. Доступний на ранніх стадіях шляхом плавлення кріоліту ('алюмінієвої руди') у [[коксовій печі|Combination Oven]]. Може бути отриманий пізніше шляхом обробки [[бокситів|Bauxite]], та [[електролізу|Electrolysis Machine]] отриманого розчину оксиду алюмінію.

Використовується в трубопроводах, загальній роботі з рідинами, як компонент [[гарматної бронзи|Gunmetal]] та фюзеляжів ракет.", - "ru_RU": "Обычный, легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозёма.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет.", + "ru_RU": "Распространённый легкий металл. Доступен на ранних этапах от плавки криолита ('алюминиевая руда') в [[коксовой печи|Combination Oven]]. Позже может быть получен путём обработки [[боксита|Bauxite]] и [[электролиза|Electrolysis Machine]] полученного раствора глинозёма.

Используется в трубах, общем обращении с жидкостями, как часть [[оружейного металла|Gunmetal]] и фюзеляжей ракет.", "zh_CN": "常见的轻质金属,在早期可使用[[复式炼焦炉|Combination Oven]]冶炼冰晶石(含铝矿石)来得到铝。后期可通过加工[[铝土矿|Bauxite]],后使用[[电解机|Electrolysis Machine]]处理氧化铝溶液得到。

用于制作管道,一般流体储存,制作[[炮铜|Gunmetal]]和导弹弹体。" } } diff --git a/src/main/resources/assets/hbm/manual/material/arsenic.json b/src/main/resources/assets/hbm/manual/material/arsenic.json index 0672fe16b..eee027fb1 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic.json @@ -1,13 +1,13 @@ { "name": "Arsenic", "icon": ["hbm:item.ingot_arsenic", 1, 0], - "trigger": [["hbm:item.ingot_arsenic"], ["hbm:item.nugget_arsenic"]], - "title": { - "en_US": "Arsenic", + "trigger": [["hbm:item.ingot_arsenic"], ["hbm:item.nugget_arsenic"]], + "title": { + "en_US": "Arsenic", "uk_UA": "Миш'як", "ru_RU": "Мышьяк", "zh_CN": "砷" - }, + }, "content": { "en_US": "Obtainable by treating oily scraps with [[high-performance solvent|High-Performance Solvent]] in an [[acidizer|Ore Acidizer]]. Oily scraps can be created by [[shredding|Shredder]] polluted blocks created by the [[fracking tower|Hydraulic Fracking Tower]]. Primarily used as [[arsenic bronze|Arsenic Bronze]].", "uk_UA": "Отримується шляхом обробки нафтових відходів [[високоефективним розчинником|High-Performance Solvent]] в [[рудному окислювачі|Ore Acidizer]]. Нафтові відходи утворюються [[подрібненням|Shredder]] забруднених блоків, утворених [[вежею гідророзриву|Hydraulic Fracking Tower]]. В основному використовується як [[миш'якова бронза|Arsenic Bronze]].", diff --git a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json index 276d30ecb..eaec58dcb 100644 --- a/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/arsenic_bronze.json @@ -1,13 +1,13 @@ { "name": "Arsenic Bronze", "icon": ["hbm:item.ingot_arsenic_bronze", 1, 0], - "trigger": [["hbm:item.ingot_arsenic_bronze"]], - "title": { - "en_US": "Arsenic Bronze", + "trigger": [["hbm:item.ingot_arsenic_bronze"]], + "title": { + "en_US": "Arsenic Bronze", "uk_UA": "Миш'якова бронза", "ru_RU": "Мышьяковая бронза", "zh_CN": "砷青铜" - }, + }, "content": { "en_US": "Derivative of [[arsenic|Arsenic]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]] due to requiring [[high-performance solvent|High-Performance Solvent]].

Fully interchangeable with [[bismuth bronze|Bismuth Bronze]].", "uk_UA": "Похідна від [[миш'яку|Arsenic]], виготовлена в [[ливарні|Crucible]], доступна лише після будівництва [[РБМК|RBMK]] через необхідність у [[високоефективному розчиннику|High-Performance Solvent]].

Повністю взаємозамінна з [[вісмутовою бронзою|Bismuth Bronze]].", diff --git a/src/main/resources/assets/hbm/manual/material/bakelite.json b/src/main/resources/assets/hbm/manual/material/bakelite.json index 256c49e4a..2d7a05db9 100644 --- a/src/main/resources/assets/hbm/manual/material/bakelite.json +++ b/src/main/resources/assets/hbm/manual/material/bakelite.json @@ -1,13 +1,13 @@ { "name": "Bakelite", "icon": ["hbm:item.ingot_bakelite", 1, 0], - "trigger": [["hbm:item.ingot_bakelite"], ["hbm:item.powder_bakelite"]], - "title": { - "en_US": "Bakelite", + "trigger": [["hbm:item.ingot_bakelite"], ["hbm:item.powder_bakelite"]], + "title": { + "en_US": "Bakelite", "uk_UA": "Карболіт", "ru_RU": "Бакелит", "zh_CN": "电木" - }, + }, "content": { "en_US": "Alternative to [[polymer|Polymer]] made from [[aromatic hydrocarbons|Aromatic Hydrocarbons]] derived from [[cracked oil products|Catalytic Cracking Tower]]. Completely interchangeable in all recipes.", "uk_UA": "Карболіт (радянська назва бакеліту) — альтернатива [[полімеру|Polymer]], виготовлений з [[ароматичних вуглеводнів|Aromatic Hydrocarbons]], отриманих з [[продуктів крекінгу нафти|Catalytic Cracking Tower]]. Повністю взаємозамінний у всіх рецептах.", diff --git a/src/main/resources/assets/hbm/manual/material/bismuth.json b/src/main/resources/assets/hbm/manual/material/bismuth.json index 83ddb2af5..40d513ca7 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth.json @@ -1,17 +1,17 @@ { "name": "Bismuth", "icon": ["hbm:item.ingot_bismuth", 1, 0], - "trigger": [["hbm:item.ingot_bismuth"], ["hbm:item.billet_bismuth"], ["hbm:item.nugget_bismuth"], ["hbm:item.powder_bismuth"]], - "title": { - "en_US": "Bismuth", + "trigger": [["hbm:item.ingot_bismuth"], ["hbm:item.billet_bismuth"], ["hbm:item.nugget_bismuth"], ["hbm:item.powder_bismuth"]], + "title": { + "en_US": "Bismuth", "uk_UA": "Вісмут", "ru_RU": "Висмут", "zh_CN": "铋" - }, + }, "content": { "en_US": "Heavy metal, intially derived from reprocessing spent [[RBMK]] fuel in the [[SILEX]], can also be made from later stage bedrock ore processing using [[high-performance solvent|High-Performance Solvent]]. Primarily used as [[bismuth bronze|Bismuth Bronze]].", "uk_UA": "Важкий метал, початково який можна отримати у результаті переробки відпрацьованого палива [[РБМК|RBMK]] в [[SILEX]], також може бути отриманий на пізнішій стадії переробки корінної руди з використанням [[високоефективного розчинника|High-Performance Solvent]]. Переважно використовуюється як [[вісмутова бронза|Bismuth Bronze]].", - "ru_RU": "Тяжелый металл, первоначально получаемый из переработки отработанного топлива [[РБМК|RBMK]] в [[SILEX]], также может быть получен из поздних стадий обработки бедроковой руды с использованием [[высокоэффективного растворителя|High-Performance Solvent]]. В основном используется в виде [[висмутовай бронзы|Bismuth Bronze]].", + "ru_RU": "Тяжёлый металл, первоначально получаемый из переработки отработанного топлива [[РБМК|RBMK]] в [[SILEX]], также может быть получен в поздние стадии обработки бедроковой руды с использованием [[высокоэффективного растворителя|High-Performance Solvent]]. В основном используется в виде [[висмутовой бронзы|Bismuth Bronze]].", "zh_CN": "一种重金属,最初可使用[[SILEX]]回收枯竭的[[RBMK]]燃料获取,之后也可在基岩矿石处理的后期步骤中,使用[[高性能溶剂|Hing-Performance Solvent]]处理矿石获取。主要用于制作[[铋青铜|Bismuth Bronze]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json index 087dc41a3..a2d5eb72d 100644 --- a/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json +++ b/src/main/resources/assets/hbm/manual/material/bismuth_bronze.json @@ -1,17 +1,17 @@ { "name": "Bismuth Bronze", "icon": ["hbm:item.ingot_bismuth_bronze", 1, 0], - "trigger": [["hbm:item.ingot_bismuth_bronze"]], - "title": { - "en_US": "Bismuth Bronze", + "trigger": [["hbm:item.ingot_bismuth_bronze"]], + "title": { + "en_US": "Bismuth Bronze", "uk_UA": "Вісмутова бронза", "ru_RU": "Висмутовая бронза", "zh_CN": "铋青铜" - }, + }, "content": { "en_US": "Derivative of [[bismuth|Bismuth]] made in the [[crucible|Crucible]], therefore available only after building an [[RBMK]].

Fully interchangeable with [[arsenic bronze|Arsenic Bronze]].", "uk_UA": "Похідна від [[вісмуту|Bismuth]], виготовлена в [[ливарні|Crucible]], доступна лише після будівництва [[РБМК|RBMK]]br>
Повністю взаємозамінна з [[миш'яковою бронзою|Arsenic Bronze]].", - "ru_RU": "Производное от [[висмута|Bismuth]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]].

Полностью взаимозаменяемо с [[мышьяковой бронзой|Arsenic Bronze]].", + "ru_RU": "Производное от [[висмута|Bismuth]], изготовленное в [[плавильне|Crucible]], поэтому доступно только после постройки [[РБМК|RBMK]].

Полностью взаимозаменяема с [[мышьяковой бронзой|Arsenic Bronze]].", "zh_CN": "使用[[铋|Bismuth]]在[[坩埚|Crucible]]中制作的衍生物,只能在建造[[RBMK]]之后获得。

和[[砷青铜|Arsenic Bronze]]完全通用。" } } diff --git a/src/main/resources/assets/hbm/manual/material/bscco.json b/src/main/resources/assets/hbm/manual/material/bscco.json index dcf3cea68..562b4789d 100644 --- a/src/main/resources/assets/hbm/manual/material/bscco.json +++ b/src/main/resources/assets/hbm/manual/material/bscco.json @@ -1,17 +1,17 @@ { "name": "BSCCO", "icon": ["hbm:item.ingot_bscco", 1, 0], - "trigger": [["hbm:item.ingot_bscco"], ["hbm:item.wire_dense", 1, 48]], - "title": { - "en_US": "BSCCO", + "trigger": [["hbm:item.ingot_bscco"], ["hbm:item.wire_dense", 1, 48]], + "title": { + "en_US": "BSCCO", "uk_UA": "Вісмут стронцій кальцій мідь оксид (BSCCO)", "ru_RU": "BSCCO", "zh_CN": "BSCCO超导体" - }, + }, "content": { "en_US": "Powerful superconductor, used in high tier circuits and coils for the [[particle accelerator|Particle Accelerator]]. Requires [[bismuth|Bismuth]], and is therefore only obtainable after building an [[RBMK]].", "uk_UA": "Потужний надпровідник, що використовується у високоякісних платах та котушках для [[прискорювача часток|Particle Accelerator]]. Потребує [[вісмут|Bismuth]], і тому доступний лише після побудови [[РБМК|RBMK]].", - "ru_RU": "Мощный сверхпроводник, используемый в высокоуровневых цепях и катушках для [[ускорителя частиц|Particle Accelerator]]. Требует [[висмута|Bismuth]], и поэтому доступен только после постройки [[РБМК|RBMK]].", + "ru_RU": "Мощный сверхпроводник, используемый в высокоуровневых цепях и катушках для [[ускорителя частиц|Particle Accelerator]]. Требует [[висмут|Bismuth]], и поэтому доступен только после постройки [[РБМК|RBMK]].", "zh_CN": "强力的超导体,用于制作高等级的电路及用于[[粒子加速器|Particle Accelerator]]的线圈。需要[[铋|Bismuth]]制作,因此只能在建造[[RBMK]]后获得。" } } diff --git a/src/main/resources/assets/hbm/manual/material/cadmium.json b/src/main/resources/assets/hbm/manual/material/cadmium.json index 1984736aa..10b34e06e 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium.json @@ -1,13 +1,13 @@ { "name": "Cadmium", "icon": ["hbm:item.ingot_cadmium", 1, 0], - "trigger": [["hbm:item.ingot_cadmium"], ["hbm:item.powder_cadmium"]], - "title": { - "en_US": "Cadmium", + "trigger": [["hbm:item.ingot_cadmium"], ["hbm:item.powder_cadmium"]], + "title": { + "en_US": "Cadmium", "uk_UA": "Кадмій", "ru_RU": "Кадмий", "zh_CN": "镉" - }, + }, "content": { "en_US": "Made by treating mustard willow leaves with [[high-performance solvent|High-Performance Solvent]]. Used in [[PVC]], a lategame alternate recipe for [[rubber|Rubber]] and for [[cadmium steel|Cadmium Steel]], which acts as a [[technetium steel|Technetium Steel]] substitute.", "uk_UA": "Виготовляється шляхом обробки листя гірчичної верби [[високоефективним розчинником|High-Performance Solvent]]. Використовується у [[полівінілхлориді|PVC]], пізньому альтернативному рецепті для [[гуми|Rubber]] та для [[кадмієвої сталі|Cadmium Steel]], яка виступає як замінник [[технецієвої сталі|Technetium Steel]].", diff --git a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json index d40670596..776a3dc5e 100644 --- a/src/main/resources/assets/hbm/manual/material/cadmium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/cadmium_steel.json @@ -1,13 +1,13 @@ { "name": "Cadmium Steel", "icon": ["hbm:item.ingot_cdalloy", 1, 0], - "trigger": [["hbm:item.ingot_cdalloy"]], - "title": { - "en_US": "Cadmium Steel", + "trigger": [["hbm:item.ingot_cdalloy"]], + "title": { + "en_US": "Cadmium Steel", "uk_UA": "Кадмієва сталь", "ru_RU": "Кадмиевая сталь", "zh_CN": "镉钢" - }, + }, "content": { "en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes.", "uk_UA": "Корозійностійкий сплав, виготовлений зі [[сталі|Steel]] та [[кадмію|Cadmium]]. Альтернатива [[технецієвій сталі|Technetium Steel]] в більшості рецептів.", diff --git a/src/main/resources/assets/hbm/manual/material/cinnabar.json b/src/main/resources/assets/hbm/manual/material/cinnabar.json index f7949487b..75596122a 100644 --- a/src/main/resources/assets/hbm/manual/material/cinnabar.json +++ b/src/main/resources/assets/hbm/manual/material/cinnabar.json @@ -1,17 +1,17 @@ { "name": "Cinnabar", "icon": ["hbm:item.cinnebar", 1, 0], - "trigger": [["hbm:item.cinnebar"]], - "title": { - "en_US": "Cinnabar", + "trigger": [["hbm:item.cinnebar"]], + "title": { + "en_US": "Cinnabar", "uk_UA": "Кіновар", "ru_RU": "Киноварь", "zh_CN": "朱砂" - }, + }, "content": { "en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production.", "uk_UA": "Рідкісна руда. Може бути [[окислена|Ore Acidizer]] в 375mB [[ртуті|Mercury]] (3 краплі ртуті), або виплавлена у [[коксовій печі|Combination Oven]] в 100mB ртуті та трохи сірки. Здебільшого використовується як ранній спосіб отримання ртуті для виробництва [[деш|Desh]].", - "ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в коксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деша|Desh]].", + "ru_RU": "Редкая руда. Может быть [[обработана кислотой|Ore Acidizer]] в 375 мБ капель [[ртути|Mercury]] или [[переплавлена в коксовой печи|Combination Oven]] в 100 мБ ртути и немного серы. В основном используется как ранний способ получения ртути для производства [[деш|Desh]].", "zh_CN": "稀有矿物,可[[酸化|Ore Acidizer]]为相当于375mB流体的[[水银|Mercury]]液滴,也可[[炼焦|Combination Oven]]为100mB水银和一个硫粉。其主要作为获取生产[[Desh]]需要的水银的早期手段。" } } diff --git a/src/main/resources/assets/hbm/manual/material/coke.json b/src/main/resources/assets/hbm/manual/material/coke.json index a388628b0..d5ff23cef 100644 --- a/src/main/resources/assets/hbm/manual/material/coke.json +++ b/src/main/resources/assets/hbm/manual/material/coke.json @@ -1,13 +1,13 @@ { "name": "Coke", "icon": ["hbm:item.coke", 1, 0], - "trigger": [["hbm:item.coke", 1, 32767]], - "title": { - "en_US": "Coke", + "trigger": [["hbm:item.coke", 1, 32767]], + "title": { + "en_US": "Coke", "uk_UA": "Кокс", "ru_RU": "Кокс", "zh_CN": "焦炭" - }, + }, "content": { "en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].

Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.

Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.

Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]].", "uk_UA": "Високочистий вуглець, має вдвічі вищу горючість, ніж вугілля. Може бути зпресований у [[графіт|Graphite]], використовується у різних рецептах [[сталі|Steel]] або як джерело вуглецю для [[ливарні|Crucible]].

Вугільний кокс можна виготовляти шляхом обсмаження вугільних брикетів або коксування вугілля в різних його формах.

Буровугільний кокс виготовляється з набагато дешевшого та менш потужного бурого вугілля майже таким самим способом, незважаючи на це, він має ті ж характеристики.

Нафтовий кокс виготовляється або з невугільних смол у [[коксовій печі|Combination Oven]], або шляхом коксування різних видів нафтопродуктів у [[коксовій установці|Coking Unit]].", diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json index f23c45460..8142651c4 100644 --- a/src/main/resources/assets/hbm/manual/material/copper.json +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -1,17 +1,17 @@ { "name": "Copper", "icon": ["hbm:item.ingot_copper", 1, 0], - "trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]], - "title": { - "en_US": "Copper", + "trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]], + "title": { + "en_US": "Copper", "uk_UA": "Мідь", "ru_RU": "Медь", "zh_CN": "铜" - }, + }, "content": { "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.", "uk_UA": "Поширений ресурс. У сирому вигляді здебільшого використовується як конструкційний матеріал, а також у речах, що витримують високі температури (такі як теплопропровідники). Активно використовується в різних сплавах.

[[Червона мідь|Minecraft Grade Copper]] — це сплав, виготовлений з редстоуну, який використовується майже у всіх електричних пристроях.

[[Удосконалений сплав|Advanced Alloy]] — це потужний ранній інструментальний матеріал, який перевершує алмаз.

[[Гарматна бронза|Gunmetal]] — це важливий компонент багатьох видів зброї, а також гільз для боєприпасів.

[[Вісмутова бронза|Bismuth Bronze]] та [[миш'якова бронза|Arsenic Bronze]] — це пост-[[РБМК|RBMK]] матеріали що використовуються в багатьох машинах пізньої версії гри.

[[BSCCO]] — це надпровідник, похідний від [[вісмуту|Bismuth]] необхідний для високорівневих квантових схем та котушок [[прискорювача часток|Particle Accelerator]].", - "ru_RU": "Обычный ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]].", + "ru_RU": "Распространённый ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]].", "zh_CN": "常见资源。纯铜主要用作结构材料,或在能够承受高温的设备中使用(作热导体); 铜的多种合金用途极广。

[[紫铜|Minecraft Grade Copper]]是红石和铜的合金,几乎所有电力设备都使用紫铜。

[[高级合金|Advanced Alloy]]是前期强力的装备材料,其性能优于钻石。

[[炮铜|Gunmetal]]是制作多种枪炮必不可少的材料,同时也用于制造弹壳。

[[铋青铜|Bismuth Bronze]]和[[砷青铜|Arsenic Bronze]]是 [[RBMK]] 后的材料,用于制作多种后期机器。

[[BSCCO]]是一种由铋衍生的超导体,高等级的量子电路和[[粒子加速器|Particle Accelerator]]线圈都需要BSCCO超导体制作。" } } diff --git a/src/main/resources/assets/hbm/manual/material/desh.json b/src/main/resources/assets/hbm/manual/material/desh.json index 06a1c2e08..1b21e5ce7 100644 --- a/src/main/resources/assets/hbm/manual/material/desh.json +++ b/src/main/resources/assets/hbm/manual/material/desh.json @@ -1,17 +1,17 @@ { "name": "Desh", "icon": ["hbm:item.ingot_desh", 1, 0], - "trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]], - "title": { - "en_US": "Desh", + "trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]], + "title": { + "en_US": "Desh", "uk_UA": "Деш", "ru_RU": "Деш", "zh_CN": "Desh" - }, + }, "content": { "en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.

Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities.", "uk_UA": "Високоміцний робочий сплав, виготовлений на [[хімічному заводі|Chemical Plant]]. Потребує [[легку нафту|Light oil]] з базової переробки [[нафти|Crude Oil]], [[ртуть|Mercury]], побічний продукт [[[центрифугування|Centrifuge]] редстоунової руди та деш суміш, яка є просто [[подрібненими|Shredder]] шматками рідкоземельної руди.

Використовується в різних речах, особливо в інструментах та зброї. Деш інструменти повільні та відповідають лише залізному тіру, але є першими доступними незламними інструментами з багатьма режимами роботи.", - "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[легкой нефти|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртути|Mercury]], побочного продукта [[центрифугирования|Centrifuge]] красной руды, и смеси деша, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деша медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей.", + "ru_RU": "Высокопрочный рабочий сплав, изготовленный на [[химической установке|Chemical Plant]]. Требует [[лёгкую нефть|Light oil]] из базовой переработки [[нефти|Crude Oil]], [[ртуть|Mercury]], побочный продукт [[центрифугирования|Centrifuge]] красной руды, и смесь деш, которая представляет собой просто [[измельчённые|Shredder]] куски редкоземельной руды.

Используется в различных вещах, особенно в инструментах и оружии. Инструменты из деш медленные и соответствуют железному уровню, но являются первыми доступными неломающимися инструментами с множеством способностей.", "zh_CN": "在[[化工厂|Chemical Plant]]中制成的高强度工作合金,需要基础[[原油|Crude Oil]]精炼的产物[[轻油|Light Oil]]、[[离心|Centrifuge]]红石矿石得到的副产物[[水银|Mercury]]以及[[粉碎|Shredder]]稀土矿石块得到的Desh混合物制作。

用于制作多种物品,特别是工具和武器。Desh制工具挖掘速度较慢且挖掘等级 只相当于铁制工具,但其是最早可获得的无法破坏的工具之一,而且具有多个工具 能力。" } } diff --git a/src/main/resources/assets/hbm/manual/material/ferrouranium.json b/src/main/resources/assets/hbm/manual/material/ferrouranium.json index 3baed1083..4d46f1c36 100644 --- a/src/main/resources/assets/hbm/manual/material/ferrouranium.json +++ b/src/main/resources/assets/hbm/manual/material/ferrouranium.json @@ -1,17 +1,17 @@ { "name": "Ferrouranium", "icon": ["hbm:item.ingot_ferrouranium", 1, 0], - "trigger": [["hbm:item.ingot_ferrouranium"]], - "title": { - "en_US": "Ferrouranium", + "trigger": [["hbm:item.ingot_ferrouranium"]], + "title": { + "en_US": "Ferrouranium", "uk_UA": "Фероуран", "ru_RU": "Ферроуран", "zh_CN": "铀铁合金" - }, + }, "content": { "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition.", "uk_UA": "Сплав [[сталі|Steel]] та [[урану-238|Uranium-238]], виготовлений у [[ливарні|Crucible]]. В основному використовується в уранобетоні, деталях зброї та вибухових боєприпасах.", - "ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[тигле|Crucible]]. В основном используется в дюкрете, деталях оружий и взрывных боеприпасах.", + "ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[плавильне|Crucible]]. В основном используется в дюкрете, деталях оружий и взрывных боеприпасах.", "zh_CN": "[[钢|Steel]]与[[铀-238|Uranium-238]]的合金,在坩埚中制成。 主要用于制作贫铀混凝土、武器部件和高爆弹药。" } } diff --git a/src/main/resources/assets/hbm/manual/material/graphite.json b/src/main/resources/assets/hbm/manual/material/graphite.json index 5ac4bc20f..eb0be35b5 100644 --- a/src/main/resources/assets/hbm/manual/material/graphite.json +++ b/src/main/resources/assets/hbm/manual/material/graphite.json @@ -1,13 +1,13 @@ { "name": "Graphite", "icon": ["hbm:item.ingot_graphite", 1, 0], - "trigger": [["hbm:item.ingot_graphite"]], - "title": { - "en_US": "Graphite", + "trigger": [["hbm:item.ingot_graphite"]], + "title": { + "en_US": "Graphite", "uk_UA": "Графіт", "ru_RU": "Графит", "zh_CN": "石墨" - }, + }, "content": { "en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes.", "uk_UA": "Виготовляється пресуванням коксу. Використовується в ядерних реакторах, графітових електродах для [[електричної дугової печі|Electric Arc Furnace]] або як джерело вуглецю в різних рецептах [[ливарні|Crucible]].", diff --git a/src/main/resources/assets/hbm/manual/material/gunmetal.json b/src/main/resources/assets/hbm/manual/material/gunmetal.json index 119797202..78ac96aaa 100644 --- a/src/main/resources/assets/hbm/manual/material/gunmetal.json +++ b/src/main/resources/assets/hbm/manual/material/gunmetal.json @@ -1,13 +1,13 @@ { "name": "Gunmetal", "icon": ["hbm:item.ingot_gunmetal", 1, 0], - "trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]], - "title": { - "en_US": "Gunmetal", + "trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]], + "title": { + "en_US": "Gunmetal", "uk_UA": "Гарматна бронза", "ru_RU": "Оружейный металл", "zh_CN": "炮铜" - }, + }, "content": { "en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition.", "uk_UA": "Сплав [[алюмінію|Aluminium]] та [[міді|Copper]]. Може бути виготовлений на ковадлі або, що ефективніше, у [[роторній печі|Rotary Furnace]]. Використовується переважно для деталей зброї, а також для гільз більшості боєприпасів.", diff --git a/src/main/resources/assets/hbm/manual/material/hss.json b/src/main/resources/assets/hbm/manual/material/hss.json index 956ee73b1..5e31bd555 100644 --- a/src/main/resources/assets/hbm/manual/material/hss.json +++ b/src/main/resources/assets/hbm/manual/material/hss.json @@ -1,13 +1,13 @@ { "name": "High-Speed Steel", "icon": ["hbm:item.ingot_dura_steel", 1, 0], - "trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]], - "title": { - "en_US": "High-Speed Steel", + "trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]], + "title": { + "en_US": "High-Speed Steel", "uk_UA": "Швидкорізальна сталь", "ru_RU": "Высокоскоростная сталь", "zh_CN": "高速钢" - }, + }, "content": { "en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable.", "uk_UA": "Сплав зі [[сталі|Steel]], [[вольфраму|Tungsten]] та [[кобальту|Cobalt]], виготовлений в [[ливарні|Crucible]]. Створюється у вигляді рідкого металу, перед використанням його необхідно відлити у форму зливка або пластини.

Використовується для виготовлення різального обладнання що працює на великих швидкостях.", diff --git a/src/main/resources/assets/hbm/manual/material/latex.json b/src/main/resources/assets/hbm/manual/material/latex.json index ac1ef6212..a00bcfee7 100644 --- a/src/main/resources/assets/hbm/manual/material/latex.json +++ b/src/main/resources/assets/hbm/manual/material/latex.json @@ -1,13 +1,13 @@ { "name": "Latex", "icon": ["hbm:item.ingot_biorubber", 1, 0], - "trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]], - "title": { - "en_US": "Latex", + "trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]], + "title": { + "en_US": "Latex", "uk_UA": "Латекс", "ru_RU": "Латекс", "zh_CN": "乳胶" - }, + }, "content": { "en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa.", "uk_UA": "Натуральна форма гуми, яку можна отримати з кульбаб або пресуванням тропічного дерева. У всіх рецептах може бути замінена на [[гуму|Rubber]], але не навпаки.", diff --git a/src/main/resources/assets/hbm/manual/material/lead.json b/src/main/resources/assets/hbm/manual/material/lead.json index 388735583..629b2d00a 100644 --- a/src/main/resources/assets/hbm/manual/material/lead.json +++ b/src/main/resources/assets/hbm/manual/material/lead.json @@ -1,17 +1,17 @@ { "name": "Lead", "icon": ["hbm:item.ingot_lead", 1, 0], - "trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]], - "title": { - "en_US": "Lead", + "trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]], + "title": { + "en_US": "Lead", "uk_UA": "Свинець", "ru_RU": "Свинец", "zh_CN": "铅" - }, + }, "content": { "en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits.", "uk_UA": "Поширений ресурс. В основному використовується для речей, пов'язаних з радіацією, та для боєприпасів, а також як припій для багатьох схем.", - "ru_RU": "Обычный ресурс. В основном используется для вещей, связанных с радиацией, а также для боеприпасов и в качестве припоя для многих схем.", + "ru_RU": "Распространённый ресурс. В основном используется для вещей, связанных с радиацией, а также для боеприпасов и в качестве припоя для многих схем.", "zh_CN": "常见资源,主要用于涉及辐射的设备,也用于制作弹药,以及用作电路板的焊料。" } } diff --git a/src/main/resources/assets/hbm/manual/material/mingrade.json b/src/main/resources/assets/hbm/manual/material/mingrade.json index f94cd9c2d..92137c7f0 100644 --- a/src/main/resources/assets/hbm/manual/material/mingrade.json +++ b/src/main/resources/assets/hbm/manual/material/mingrade.json @@ -1,13 +1,13 @@ { "name": "Minecraft Grade Copper", "icon": ["hbm:item.ingot_red_copper", 1, 0], - "trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]], - "title": { - "en_US": "Minecraft Grade Copper (Red Copper)", + "trigger": [["hbm:item.ingot_red_copper"], ["hbm:item.powder_red_copper"]], + "title": { + "en_US": "Minecraft Grade Copper (Red Copper)", "uk_UA": "Червона мідь (aka Minecraft Grade Copper)", - "ru_RU": "Медь Minecraft (Красная медь)", + "ru_RU": "Красная медь", "zh_CN": "紫铜" - }, + }, "content": { "en_US": "Alloy made from copper and redstone in equal parts using the [[blast furnace|Blast Furnace]]. Used in almost all things electric, commonly in wire form.", "uk_UA": "Сплав, виготовлений з [[міді|Copper]] та редстоуну в рівному співвідношенні в [[доменній печі|Blast Furnace]]. Використовується майже у всій електриці, зазвичай у вигляді дроту.", diff --git a/src/main/resources/assets/hbm/manual/material/neptunium.json b/src/main/resources/assets/hbm/manual/material/neptunium.json index 464241f76..0e3b80a58 100644 --- a/src/main/resources/assets/hbm/manual/material/neptunium.json +++ b/src/main/resources/assets/hbm/manual/material/neptunium.json @@ -1,17 +1,17 @@ { "name": "Neptunium", "icon": ["hbm:item.ingot_neptunium", 1, 0], - "trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]], - "title": { - "en_US": "Neptunium", + "trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]], + "title": { + "en_US": "Neptunium", "uk_UA": "Нептуній-237", "ru_RU": "Нептуний", "zh_CN": "镎" - }, + }, "content": { "en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]].", "uk_UA": "Ізотоп здатний до розщеплення, зазвичай міститься у відпрацьованому паливі [[урану-235|Uranium-235]]. Здебільшого використовується для ядерних реакторів у чистому вигляді як високозбагачене нептунієве паливо або в поєднанні з [[ураном-238|Uranium-238]] як середньозбагачене нептунієве паливо. Використовується в [[ВВЕР|PWR]] та [[РБМК|RBMK]].", - "ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащённое нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащённое нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]].", + "ru_RU": "Делящийся изотоп, обычно содержится в отработанном топливе из [[урана-235|Uranium-235]]. В основном используется для ядерных реакторов, либо в чистом виде как высокообогащённое нептуниевое топливо, либо в сочетании с [[ураном-238|Uranium-238]] как среднеобогащённое нептуниевое топливо. Применяется в [[ВВЭР|PWR]] и [[РБМК|RBMK]].", "zh_CN": "一种易裂变同位素,主要存在于枯竭的[[铀-235|Uranium-235]]燃料中。 主要用于核反应堆,纯净的镎既可直接用作高浓缩度镎燃料,也可和[[铀-238|Uranium-238]]混合为中浓缩度镎燃料。可用于[[PWR]]和[[RBMK]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-238.json b/src/main/resources/assets/hbm/manual/material/plutonium-238.json index 4fee0f32a..9d2330fdf 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-238.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-238.json @@ -1,17 +1,17 @@ { "name": "Plutonium-238", "icon": ["hbm:item.billet_pu238", 1, 0], - "trigger": [["hbm:item.ingot_pu238"], ["hbm:item.billet_pu238"], ["hbm:item.nugget_pu238"]], - "title": { - "en_US": "Plutonium-238", + "trigger": [["hbm:item.ingot_pu238"], ["hbm:item.billet_pu238"], ["hbm:item.nugget_pu238"]], + "title": { + "en_US": "Plutonium-238", "uk_UA": "Плутоній-238", "ru_RU": "Плутоний-238", "zh_CN": "钚-238" - }, + }, "content": { "en_US": "Radioisotope, used mainly in [[RTGs|RTG]]. Derived from [[plutonium|Plutonium]] hexafluoride, or from various nuclear fuels, mainly ones using [[uranium-235|Uranium-235]]. Usable with [[beryllium|Beryllium]] as Pu238Be neutron sources in [[RBMKs|RBMK]].

Moderately radioactive, very hot.", "uk_UA": "Радіоізотоп, що використовується переважно в [[РІТЕГ|RTG]]. Отримується з гексафториду [[плутонію|Plutonium]], або з різного ядерного палива, переважно того, що використовує [[уран-235|Uranium-235]]. Використовується з [[берилієм|Beryllium]] як Плутоній-238 берилієве джерело нейтронів в [[РБМК|RBMK]].

Помірно радіоактивний, дуже гарячий.", - "ru_RU": "Радиоизотоп, в основном используется в [[РТГ|RTG]]. Получается из гексафторида [[плутония|Plutonium]] или из различных ядерных топлив, преимущественно использующих [[уран-235|Uranium-235]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Плутоний-210-Бериллий для [[РБМК|RBMK]].

Умеренно радиоактивен, очень горячий.", + "ru_RU": "Радиоизотоп, в основном используется в [[РИТЭГ|RTG]]. Получается из гексафторида [[плутония|Plutonium]] или из различных ядерных топлив, преимущественно использующих [[уран-235|Uranium-235]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках плутоний-210-бериллевых источниках для [[РБМК|RBMK]].

Умеренно радиоактивен, очень горячий.", "zh_CN": "放射性同位素,主要用于[[RTG]]。可从六氟化[[钚|Plutonium]]中提取,也可从一些核燃料(主要是含[[铀-235|Uranium-235]]的种类)中分离得到。可与[[铍|Beryllium]]混合制成钚-238-铍中子源,用于[[RBMK]]反应堆。

放射性中等,高温。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-239.json b/src/main/resources/assets/hbm/manual/material/plutonium-239.json index 8237af3ed..1a80f4cbc 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-239.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-239.json @@ -1,17 +1,17 @@ { "name": "Plutonium-239", "icon": ["hbm:item.billet_pu239", 1, 0], - "trigger": [["hbm:item.ingot_pu239"], ["hbm:item.billet_pu239"], ["hbm:item.nugget_pu239"]], - "title": { - "en_US": "Plutonium-239", + "trigger": [["hbm:item.ingot_pu239"], ["hbm:item.billet_pu239"], ["hbm:item.nugget_pu239"]], + "title": { + "en_US": "Plutonium-239", "uk_UA": "Плутоній-239", "ru_RU": "Плутоний-239", "zh_CN": "钚-239" - }, + }, "content": { "en_US": "Primary fissile isotope of [[plutonium|Plutonium]]. Can be extracted from many spent fuels that use [[uranium-238|Uranium-238]] or directly from [[reactor-grade plutonium|Reactor-Grade Plutonium]]. Usable in high enriched fuels for various reactors, mixed with other isotopes for lower enriched fuels, or as fissile material in many nuclear bombs.

Moderately radioactive.", "uk_UA": "Перший здатний до поділу ізотоп [[плутонію|Plutonium]]. Може бути отриманий з багатьох видів відпрацьованого палива, що використовують [[уран-238|Uranium-238]] бо безпосередньо з [[реакторного плутонію|Reactor-Grade Plutonium]]. Використовується у високозбагаченому паливі для різних реакторів, змішується з іншими ізотопами для низькозбагаченого палива або як заряд у багатьох ядерних бомбах.

Помірно радіоактивний.", - "ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащённых топливах для различных реакторов, в смеси с другими изотопами для менее обогащённых топлив или как делящийся материал во многих ядерных бомбах.

Умеренно радиоактивен.", + "ru_RU": "Основной делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из многих отработанных топлив, использующих [[уран-238|Uranium-238]], или непосредственно из [[реакторного плутония|Reactor-Grade Plutonium]]. Используется в высокообогащённом топливе для различных реакторов, в смеси с другими изотопами для менее обогащённых топлив или как делящийся материал во многих ядерных бомбах.

Умеренно радиоактивен.", "zh_CN": "[[钚|Plutonium]]主要的易裂变同位素,可从多种使用[[铀-238|Uranium-238]]的核燃料中提取,或直接从[[反应堆级钚|Reactor-Grade Plutonium]]中分离得到。可在多种反应堆中用作高浓缩度燃料,也可与其他同位素混合制成 浓缩度较低的燃料,还可在多种核弹中用作裂变材料。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-240.json b/src/main/resources/assets/hbm/manual/material/plutonium-240.json index 2ff18cbb8..95294cb75 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-240.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-240.json @@ -1,17 +1,17 @@ { "name": "Plutonium-240", "icon": ["hbm:item.billet_pu240", 1, 0], - "trigger": [["hbm:item.ingot_pu240"], ["hbm:item.billet_pu240"], ["hbm:item.nugget_pu240"]], - "title": { - "en_US": "Plutonium-240", + "trigger": [["hbm:item.ingot_pu240"], ["hbm:item.billet_pu240"], ["hbm:item.nugget_pu240"]], + "title": { + "en_US": "Plutonium-240", "uk_UA": "Плутоній-240", "ru_RU": "Плутоний-240", "zh_CN": "钚-240" - }, + }, "content": { "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or in specialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].", - "uk_UA": "Не здатний до поділу ізотоп, що міститься в [[плутонії|Plutonium]] та [[реакторному плутонії|Reactor-Grade-Plutonium]]. Корисний лише при ручному виготовленні реакторного плутонію з [[плутонію-239|Plutonium-239]] або у спеціалізованих [[цирконієвих|Zirconium]] швидких розмножувачах для виготовлення [[плутонію-241|Plutonium-241]] в [[РБМК|RBMK]]." , - "ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[циркониевых|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]].", + "uk_UA": "Не здатний до поділу ізотоп, що міститься в [[плутонії|Plutonium]] та [[реакторному плутонії|Reactor-Grade-Plutonium]]. Корисний лише при ручному виготовленні реакторного плутонію з [[плутонію-239|Plutonium-239]] або у спеціалізованих [[цирконієвих|Zirconium]] швидких розмножувачах для виготовлення [[плутонію-241|Plutonium-241]] в [[РБМК|RBMK]].", + "ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[ЦТС|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]].", "zh_CN": "[[钚|Plutonium]]和[[反应堆级钚|Reactor-Grade Plutonium]]中存在的不易裂变同位素。仅有的用途是手动与[[钚-239|Plutonium-239]]混合为反应堆级钚,或与[[锆|Zirconium]]一同制成专用于增殖的ZFB燃料棒,以在[[RBMK]]中生产[[钚-241|Plutonium-241]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-241.json b/src/main/resources/assets/hbm/manual/material/plutonium-241.json index 324827ecd..58afa6faa 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-241.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-241.json @@ -1,17 +1,17 @@ { "name": "Plutonium-241", "icon": ["hbm:item.billet_pu241", 1, 0], - "trigger": [["hbm:item.ingot_pu241"], ["hbm:item.billet_pu241"], ["hbm:item.nugget_pu241"]], - "title": { - "en_US": "Plutonium-241", + "trigger": [["hbm:item.ingot_pu241"], ["hbm:item.billet_pu241"], ["hbm:item.nugget_pu241"]], + "title": { + "en_US": "Plutonium-241", "uk_UA": "Плутоній-241", "ru_RU": "Плутоний-241", "zh_CN": "钚-241" - }, + }, "content": { "en_US": "Secondary fissile isotope of [[plutonium|Plutonium]]. Can be recovered from [[plutonium-240|Plutonium-240]]-rich spent [[RBMK]] fuels, as well as certain types of [[zirconium|Zirconium]] fast breefer fuels. Only used in specialized breeding fuels and as high enriched fuel, which is more powerful than its [[plutonium-239|Plutonium-239]] counterpart. Plutonium-241 in RBMKs yields [[americium-241|Americium-241]] and [[americium-242|Americium-242]] when reprocessed.

Highly radioactive.", "uk_UA": "Другий здатний до поділу ізотоп [[плутонію|Plutonium]]. Може бути відновлений з відпрацьованого палива [[РБМК|RBMK]], багатого на [[плутоній-240|Plutonium-240]], а також з деяких видів [[цирконієвих|Zirconium]] швидких розмножувачів. Використовується лише в спеціальних паливних розмножувачах та як високозбагачене паливо, яке є потужнішим за свій аналог [[плутонію-239|Plutonium-239]]. Плутоній-241 в РБМК утворює [[америцій-241|Americium-241]] та [[америцій-242|Americium-242]] після переробки.

Високорадіоактивний.", - "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанных топлив [[РБМК|RBMK]], богатых [[плутонием-240|Plutonium-240]], а также из определенных типов [[циркониевых|Zirconium]] топлив быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен.", + "ru_RU": "Вторичный делящийся изотоп [[плутония|Plutonium]]. Может быть извлечен из отработанного топлива [[РБМК|RBMK]], богатого [[плутонием-240|Plutonium-240]], а также из определённых видов [[циркониевого|Zirconium]] топлива быстрого размножения. Используется только в специализированных топливных стержнях для размножения и как высокообогащённое топливо, которое мощнее, чем его аналог [[плутоний-239|Plutonium-239]]. Плутоний-241 в РБМК при переработке дает [[америций-241|Americium-241]] и [[америций-242|Americium-242]].

Сильно радиоактивен.", "zh_CN": "[[钚|Plutonium]]次要的易裂变同位素,可从枯竭的富含[[钚-240|Plutonium-240]]的[[RBMK]]燃料及特定种类的[[锆|Zirconium]]快速增殖燃料(ZFB)中提取。 仅用于专用的增殖燃料,或用作比相应的[[钚-239|Plutonium-239]]燃料更强力的高浓缩度燃料。再处理用于RBMK的钚-241燃料时 可以得到[[镅-241|Americium-241]]和[[镅-242|Americium-242]]。

放射性较强。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json index 533205523..0876eab04 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-rg.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-rg.json @@ -1,13 +1,13 @@ { "name": "Reactor-Grade Plutonium", "icon": ["hbm:item.billet_pu_mix", 1, 0], - "trigger": [["hbm:item.ingot_pu_mix"], ["hbm:item.billet_pu_mix"], ["hbm:item.nugget_pu_mix"]], - "title": { - "en_US": "Reactor-Grade Plutonium", + "trigger": [["hbm:item.ingot_pu_mix"], ["hbm:item.billet_pu_mix"], ["hbm:item.nugget_pu_mix"]], + "title": { + "en_US": "Reactor-Grade Plutonium", "uk_UA": "Реакторний плутоній", "ru_RU": "Плутоний реакторного качества", "zh_CN": "反应堆级钚" - }, + }, "content": { "en_US": "Mixture of [[plutonium-239|Plutonium-239]] and [[plutonium-240|Plutonium-240]]. Common result of reprocessing many [[uranium|Uranium]]-based fuels, as well as by breeding uranium in the [[Chicago Pile]]. Usable in many reactors as medium enriched plutonium fuel.

Moderately radioactive.", "uk_UA": "Суміш [[плутонію-239|Plutonium-239]] та [[плутонію-240|Plutonium-240]]. Поширений результат переробки багатьох видів палива на основі [[урану|Uranium]], а також розмноження урану в [[Чиказькій дровітні|Chicago Pile]]. Використовується в багатьох реакторах як середньозбагачене плутонієве паливо.

Помірно радіоактивний.", diff --git a/src/main/resources/assets/hbm/manual/material/plutonium.json b/src/main/resources/assets/hbm/manual/material/plutonium.json index d10cdb6f3..73ea1e57f 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium.json @@ -1,17 +1,17 @@ { "name": "Plutonium", "icon": ["hbm:item.ingot_plutonium", 1, 0], - "trigger": [["hbm:item.ingot_plutonium"], ["hbm:item.billet_plutonium"], ["hbm:item.nugget_plutonium"], ["hbm:item.powder_plutonium"]], - "title": { - "en_US": "Plutonium", + "trigger": [["hbm:item.ingot_plutonium"], ["hbm:item.billet_plutonium"], ["hbm:item.nugget_plutonium"], ["hbm:item.powder_plutonium"]], + "title": { + "en_US": "Plutonium", "uk_UA": "Плутоній", "ru_RU": "Плутоний", "zh_CN": "钚" - }, + }, "content": { "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.

Moderately radioactive.

See also:
[[Plutonium-238]]
[[Plutonium-239]]
[[Plutonium-240]]
[[Plutonium-241]]", "uk_UA": "Рідкісна форма природнього плутонію, що складається з плутонію-238, 239 та 240. Плутоній у формі руди вимкнено за замовчуванням. Може бути перероблений в [[газовій центріфузі|Gas Centrifuge]] у формі гексафториду, або використовуватися для певних рецептів [[циклотрона|Cyclotron]].

Помірно радіоактивний.

Див. також:
[[Плутоній-238|Plutonium-238]]
[[Плутоній-239|Plutonium-239]]
[[Плутоній-240|Plutonium-240]]
[[Плутоній-241|Plutonium-241]]", - "ru_RU": "Редкая форма нечистого плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определенных рецептов [[циклотрона|Cyclotron]].

Умеренно радиоактивен.

См. также:
[[Плутоний-238|Plutonium-238]]
[[Плутоний-239|Plutonium-239]]
[[Плутоний-240|Plutonium-240]]
[[Плутоний-241|Plutonium-241]]", + "ru_RU": "Редкая форма нечистого плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определённых рецептов [[циклотрона|Cyclotron]].

Умеренно радиоактивен.

См. также:
[[Плутоний-238|Plutonium-238]]
[[Плутоний-239|Plutonium-239]]
[[Плутоний-240|Plutonium-240]]
[[Плутоний-241|Plutonium-241]]", "zh_CN": "不纯钚的稀有形式,由钚-238、钚-239、钚-240组成。 钚的矿石形式默认禁用。钚可以以六氟化钚的形式在[[气体离心机|Gas Centrifuge]]中处理,也用于某些[[回旋加速器|Cyclotron]]配方。

放射性中等。

另见:
[[钚-238|Plutonium-238]]
[[钚-239|Plutonium-239]]
[[钚-240|Plutonium-240]]
[[钚-241|Plutonium-241]]" } } diff --git a/src/main/resources/assets/hbm/manual/material/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json index e0642cddc..465165588 100644 --- a/src/main/resources/assets/hbm/manual/material/polonium.json +++ b/src/main/resources/assets/hbm/manual/material/polonium.json @@ -1,17 +1,17 @@ { "name": "Polonium-210", "icon": ["hbm:item.billet_polonium", 1, 0], - "trigger": [["hbm:item.ingot_polonium"], ["hbm:item.billet_polonium"], ["hbm:item.nugget_polonium"]], - "title": { - "en_US": "Polonium-210", + "trigger": [["hbm:item.ingot_polonium"], ["hbm:item.billet_polonium"], ["hbm:item.nugget_polonium"]], + "title": { + "en_US": "Polonium-210", "uk_UA": "Полоній-210", "ru_RU": "Полоний-210", "zh_CN": "钋-210" - }, + }, "content": { "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot.", "uk_UA": "Радіоізотоп, отриманий в результаті переробки [[радій-226|Radium-226]]берилієвих джерел нейтронів. Використовується для [[РІТЕГ|RTG]] або з [[берилієм|Beryllium]] у полоній-210 берилієвих джерелах нейтронів для [[РБМК|RBMK]].

Високорадіоактивний, дуже гарячий.", - "ru_RU": "Радиоизотоп, получаемый из переработки нейтронных источников [[радия-226|Radium-226]]. Используется для [[РТГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках Полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий.", + "ru_RU": "Радиоизотоп, получаемый переработкой нейтронных источников [[радия-226|Radium-226]]. Используется для [[РИТЭГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий.", "zh_CN": "再处理[[镭-226|Radium-226]]中子源时得到的放射性同位素。可用于[[RTG]],也可与[[铍|Beryllium]]混合为钋-210-铍中子源,用于[[RBMK]]。

放射性强,高温。" } } diff --git a/src/main/resources/assets/hbm/manual/material/polymer.json b/src/main/resources/assets/hbm/manual/material/polymer.json index 60e8163c0..c0f38ff48 100644 --- a/src/main/resources/assets/hbm/manual/material/polymer.json +++ b/src/main/resources/assets/hbm/manual/material/polymer.json @@ -1,13 +1,13 @@ { "name": "Polymer", "icon": ["hbm:item.ingot_polymer", 1, 0], - "trigger": [["hbm:item.ingot_polymer"], ["hbm:item.powder_polymer"]], - "title": { - "en_US": "Polymer", + "trigger": [["hbm:item.ingot_polymer"], ["hbm:item.powder_polymer"]], + "title": { + "en_US": "Polymer", "uk_UA": "Полімер", "ru_RU": "Полимер", "zh_CN": "聚合物" - }, + }, "content": { "en_US": "Polymer ('Teflon') is the first available type of plastic. Requires [[petroleum gas|Petroleum Gas]] and therefore [[oil processing|Crude Oil]].

Fully interchangable with [[Bakelite]], which becomes available after [[oil cracking|Catalytic Cracking Tower]].", "uk_UA": "Полімер ('Тефлон') – це перший доступний тип пластику. потребує [[нафтовий газ|Petroleum Gas]], а отже, [[переробку нафти|Crude Oil]].

Повністю взаємозамінний з [[карболітом|Bakelite]], який стає доступним після [[крекінгу нафти|Catalytic Cracking Tower]].", diff --git a/src/main/resources/assets/hbm/manual/material/radium.json b/src/main/resources/assets/hbm/manual/material/radium.json index 4c4cb433d..cd3e8a006 100644 --- a/src/main/resources/assets/hbm/manual/material/radium.json +++ b/src/main/resources/assets/hbm/manual/material/radium.json @@ -1,17 +1,17 @@ { "name": "Radium-226", "icon": ["hbm:item.billet_ra226", 1, 0], - "trigger": [["hbm:item.ingot_ra226"], ["hbm:item.billet_ra226"], ["hbm:item.nugget_ra226"], ["hbm:item.powder_ra226"]], - "title": { - "en_US": "Radium-226", + "trigger": [["hbm:item.ingot_ra226"], ["hbm:item.billet_ra226"], ["hbm:item.nugget_ra226"], ["hbm:item.powder_ra226"]], + "title": { + "en_US": "Radium-226", "uk_UA": "Радій-226", "ru_RU": "Радий-226", "zh_CN": "镭-226" - }, + }, "content": { "en_US": "Rare radioactive material found in [[uranium|Uranium]] and [[thorium|Thorium-232]] ores, may be extracted using a [[centrifuge|Centrifuge]]. Used with [[beryllium|Beryllium]] in Ra226Be neutron sources, which are vital for kickstarting the [[Chicago Pile]], [[PWR]], [[research reactor|Research Reactor]] and [[RBMK]]. The first available neutron source, and often times the cheapest.

Moderately radioactive.", "uk_UA": "Рідкісний радіоактивний матеріал, що міститься в [[уранових|Uranium]] та [[торієвих|Thorium-232]] рудах, можна отримати за допомогою [[центрифуги|Centrifuge]]. Використовується разом з [[берилієм|Beryllium]] у радій-226 берилієвих джерелах нейтронів, які необхідні для запуску [[Чиказької дровітні|Chicago Pile]], [[ВВЕР|PWR]], [[дослідницького реактора|Research Reactor]] та [[РБМК|RBMK]]. Перше доступне джерело нейтронів і часто найдешевше.

Помірно радіоактивний.", - "ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечён с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках Радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.

Умеренно радиоактивен.", + "ru_RU": "Редкий радиоактивный материал, содержащийся в рудах [[урана|Uranium]] и [[тория-232|Thorium-232]], может быть извлечён с помощью [[центрифуги|Centrifuge]]. Используется с [[бериллием|Beryllium]] в нейтронных источниках радий-226-бериллий, которые необходимы для запуска [[Чикагской поленницы|Chicago Pile]], [[ВВЭР|PWR]], [[исследовательского реактора|Research Reactor]] и [[РБМК|RBMK]]. Первый доступный нейтронный источник, часто самый дешевый.

Умеренно радиоактивен.", "zh_CN": "稀有的放射性物质,存在于[[铀|Uranium]]矿石和[[钍|Thorium]]矿石中,可通过[[离心机|Centrifuge]]提取。可与[[铍|Beryllium]]混合得到启动[[芝加哥反应堆|Chicago Pile]]、[[RBMK]]、[[PWR]]、[[研究型反应堆|]]必须的镭-226-铍中子源。是最早可获得的中子放射源,而且通常也是最便宜的。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/rubber.json b/src/main/resources/assets/hbm/manual/material/rubber.json index 9b6d7a442..f9718972a 100644 --- a/src/main/resources/assets/hbm/manual/material/rubber.json +++ b/src/main/resources/assets/hbm/manual/material/rubber.json @@ -1,17 +1,17 @@ { "name": "Rubber", "icon": ["hbm:item.ingot_rubber", 1, 0], - "trigger": [["hbm:item.ingot_rubber"]], - "title": { - "en_US": "Rubber", + "trigger": [["hbm:item.ingot_rubber"]], + "title": { + "en_US": "Rubber", "uk_UA": "Гума", "ru_RU": "Резина", "zh_CN": "橡胶" - }, + }, "content": { "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe.", "uk_UA": "Нафтопродукт, отриманий з [[ненасичених вуглеводнів|Unsaturated Hydrocarbons]] та [[сірки|Sulfur]]. Для виробництва потрібна щонайменше [[вежа каталітичного крекінгу|Catalytic Cracking Tower]]. Може замінити [[латекс|Latex]] у всіх рецептах.", - "ru_RU": "Продукт переработки нефти, получаемый из [[ненасыщенных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах.", + "ru_RU": "Продукт переработки нефти, получаемый из [[непредельных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах.", "zh_CN": "一种石化产品,衍生自[[不饱和烃|Unsaturated Hydrocarbons]]和[[硫|Sulfur]]。至少需要一台[[催化裂化塔|Catalytic Cracking Tower]]才能制作。可在所有配方中替代[[乳胶|Latex]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/silicon.json b/src/main/resources/assets/hbm/manual/material/silicon.json index e13ba0485..53f20d37e 100644 --- a/src/main/resources/assets/hbm/manual/material/silicon.json +++ b/src/main/resources/assets/hbm/manual/material/silicon.json @@ -1,17 +1,17 @@ { "name": "Silicon", "icon": ["hbm:item.billet_silicon", 1, 0], - "trigger": [["hbm:item.ingot_silicon"], ["hbm:item.billet_silicon"], ["hbm:item.nugget_silicon"]], - "title": { - "en_US": "Silicon", + "trigger": [["hbm:item.ingot_silicon"], ["hbm:item.billet_silicon"], ["hbm:item.nugget_silicon"]], + "title": { + "en_US": "Silicon", "uk_UA": "Кремній", "ru_RU": "Кремний", "zh_CN": "硅" - }, + }, "content": { "en_US": "Important material for producing integrated circuits, and any electronics more sophisticated than an analog circuit. Created in an [[electric arc furnace|Electric Arc Furnace]] using things that contain silicon dioxide, like regular sand, nether quartz, fiberglass, flint or [[asbestos|Asbestos]]. Used primarily as wafers (i.e. billets) which are [[pressed|Burner Press]] using a circuit stamp, and then crafted into different types of microchips. Due to requiring an arc furnace, silicon is available after obtaining [[polymer|Polymer]], requiring [[oil|Crude Oil]] processing.", "uk_UA": "Важливий матеріал для виробництва інтегральних плат та будь-якої електроніки, складнішої за аналогову плату. Виготовляється в [[електричній дуговій печі|Electric Arc Furnace]] використанням матеріалів, що містять діоксид кремнію, наприклад звичайного піску, пекельного кварцу, скловолокна, кременю або [[азбесту|Asbestos]]. Використовується переважно як пластини (тобто заготовки) які [[пресуються|Burner Press]] за допомогою штампа схеми, а потім перетворюються на різні типи мікрочіпів. Через необхідність у дуговій печі, кремній стає доступний після отримання [[полімеру|Polymer]], що вимагає переробки [[нафти|Crude Oil]].", - "ru_RU": "Важный материал для производства интегральных схем и любой электроники, более сложной, чем аналоговые схемы. Производится в [[электродуговой печи|Electric Arc Furnace]] из материалов, содержащих диоксид кремния, таких как обычный песок, незер-кварц, стекловолокно, кремень или [[асбест|Asbestos]]. В основном используется в виде пластин (т.е. заготовок), которые [[прессуются|Burner Press]] с использованием штампа для схем, а затем превращаются в различные типы микросхем. Из-за необходимости в дуговой печи кремний доступен после получения [[полимера|Polymer]], что требует переработки [[нефти|Crude Oil]].", + "ru_RU": "Важный материал для производства интегральных схем и любой электроники, более сложной, чем аналоговые схемы. Производится в [[электродуговой печи|Electric Arc Furnace]] из материалов, содержащих диоксид кремния, таких как обычный песок, кварц незера, стекловолокно, кремень или [[асбест|Asbestos]]. В основном используется в виде пластин (т.е. заготовок), которые [[прессуются|Burner Press]] с использованием штампа для схем, а затем превращаются в различные типы микросхем. Из-за необходимости в дуговой печи кремний доступен после получения [[полимера|Polymer]], что требует переработки [[нефти|Crude Oil]].", "zh_CN": "生产集成电路以及其他比模拟电路更加复杂的电路的重要材料。可通过使用[[电弧炉|Electric Arc Furnace]]冶炼含二氧化硅的物品(如普通沙子、下界石英、玻璃纤维、燧石和[[石棉|Asbestos]])获取。主要的应用形式为在[[锻压机|Burner Press]]中经电路板锻模锻压的晶圆(即坯料),这些晶圆随后被用来制作多种微处理器。 因为其制作需要电弧炉,硅只能在获得[[聚合物|Polymer]]后制作,因此需要[[原油处理|Crude Oil]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/sodium.json b/src/main/resources/assets/hbm/manual/material/sodium.json index ef804af7c..90c98db3f 100644 --- a/src/main/resources/assets/hbm/manual/material/sodium.json +++ b/src/main/resources/assets/hbm/manual/material/sodium.json @@ -1,17 +1,17 @@ { "name": "Sodium", "icon": ["hbm:item.powder_sodium", 1, 0], - "trigger": [["hbm:item.powder_sodium"]], - "title": { - "en_US": "Sodium", + "trigger": [["hbm:item.powder_sodium"]], + "title": { + "en_US": "Sodium", "uk_UA": "Натрій", "ru_RU": "Натрий", "zh_CN": "钠" - }, + }, "content": { "en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant.", "uk_UA": "В основному отримується з содаліту, дорогоцінного каменю, який зустрічається як побічний продукт [[центрифугування|Centrifuge]] багатьох руд. Використовується в рідкому вигляді як потужний охолоджувач для [[ВВЕР|PWR]].", - "ru_RU": "В основном добывается из содалита, драгоценного камня, который является побочным продуктом [[центрифуги|Centrifuge]] при переработке многих руд. Используется в жидкой форме как мощный охладитель для [[ВВЭР|PWR]].", + "ru_RU": "В основном добывается из содалита, драгоценного камня, который является побочным продуктом [[центрифугования|Centrifuge]] при переработке многих руд. Используется в жидкой форме как мощный охладитель для [[ВВЭР|PWR]].", "zh_CN": "主要通过方钠石获取,方钠石可作为多种矿石的[[离心|Centrifuge]]副产物获得。其液体形式可用作强力的[[PWR]]冷却剂。" } } diff --git a/src/main/resources/assets/hbm/manual/material/steel.json b/src/main/resources/assets/hbm/manual/material/steel.json index d67a8e335..77dad347b 100644 --- a/src/main/resources/assets/hbm/manual/material/steel.json +++ b/src/main/resources/assets/hbm/manual/material/steel.json @@ -1,13 +1,13 @@ { "name": "Steel", "icon": ["hbm:item.ingot_steel", 1, 0], - "trigger": [["hbm:item.ingot_steel"], ["hbm:item.plate_steel"], ["hbm:item.powder_steel"]], - "title": { - "en_US": "Steel", + "trigger": [["hbm:item.ingot_steel"], ["hbm:item.plate_steel"], ["hbm:item.powder_steel"]], + "title": { + "en_US": "Steel", "uk_UA": "Сталь", "ru_RU": "Сталь", "zh_CN": "钢" - }, + }, "content": { "en_US": "Upgraded version of iron, basic material. Used in almost everything. Initially obtained by combining coal and iron in a [[blast furnace|Blast Furnace]]. Upgraded recipes are available later on via [[crucible|Crucible]] and [[rotary furnace|Rotary Furnace]].", "uk_UA": "Покращена версія заліза, базовий матеріал. Використовується майже в усьому. Спочатку отримується шляхом поєднання вугілля та заліза в [[доменній печі|Blast Furnace]]. Покращені рецепти доступні пізніше в [[ливарні|Crucible]] та [[роторній печі|Rotary Furnace]].", diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index 83b15a84d..071ea8633 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -1,17 +1,17 @@ { "name": "Sulfur", "icon": ["hbm:item.sulfur", 1, 0], - "trigger": [["hbm:item.sulfur"]], - "title": { - "en_US": "Sulfur", + "trigger": [["hbm:item.sulfur"]], + "title": { + "en_US": "Sulfur", "uk_UA": "Сірка", "ru_RU": "Сера", "zh_CN": "硫" - }, + }, "content": { "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", "uk_UA": "Звичайна руда, зустрічається у великих кількостях в пеклі. Використовується в різних речах, таких як [[сірчана кислота|Sulfuric Acid]], [[гума|Rubber]] та єлоукейку для отримання гексафториду [[урану|Uranium]]. Також може використовуватися для виготовлення пороху, сірників або як жовтий барвник.", - "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных целей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в йеллоукейке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя.", + "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных вещей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в жётлом кеке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя.", "zh_CN": "常见矿物,在下界的生成量更多。用于多种配方,例如制作[[硫酸|Sulfuric Acid]]和 [[橡胶|Rubber]],也用于制作黄饼,作为合成六氟化[[铀|Uranium]]的原料。 也可用于制作火药、火柴,以及用作黄色染料。" } } diff --git a/src/main/resources/assets/hbm/manual/material/tantalium.json b/src/main/resources/assets/hbm/manual/material/tantalium.json index 3a6375f2b..cf3e30380 100644 --- a/src/main/resources/assets/hbm/manual/material/tantalium.json +++ b/src/main/resources/assets/hbm/manual/material/tantalium.json @@ -1,17 +1,17 @@ { "name": "Tantalium", "icon": ["hbm:item.ingot_tantalium", 1, 0], - "trigger": [["hbm:item.ingot_tantalium"], ["hbm:item.powder_tantalium"], ["hbm:item.nugget_tantalium"]], - "title": { - "en_US": "Tantalium", + "trigger": [["hbm:item.ingot_tantalium"], ["hbm:item.powder_tantalium"], ["hbm:item.nugget_tantalium"]], + "title": { + "en_US": "Tantalium", "uk_UA": "Тантал", "ru_RU": "Тантал", "zh_CN": "钽" - }, + }, "content": { "en_US": "Tantalium ('Tantalum') can be extracted out of [[coltan|Coltan]] which is only found within one specific area in the world. Used mainly for tantalium capacitors, which are crucial for the control units used by most nuclear bombs.", "uk_UA": "Тантал ('Танталій') можна отримати з [[колтану|Coltan]] який зустрічається лише в одному конкретному регіоні світу. Використовується переважно для танталових конденсаторів, які є критично важливими для блоків керування, що використовуються в більшості ядерних бомб.", - "ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одном определенном регионе мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб.", + "ru_RU": "Тантал ('Tantalum') добывается из [[колтана|Coltan]], который встречается только в одной определённой области мира. В основном используется для танталовых конденсаторов, которые критически важны для блоков управления, используемых в большинстве ядерных бомб.", "zh_CN": "钽可从仅生成在特定区域的[[钶钽铁矿|Coltan]]中提取。 主要用于制作钽电容器,钽电容器可作为大多数核弹所需的控制单元的重要原料。" } } diff --git a/src/main/resources/assets/hbm/manual/material/technetium.json b/src/main/resources/assets/hbm/manual/material/technetium.json index 910ac0a21..9c529e2cf 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium.json +++ b/src/main/resources/assets/hbm/manual/material/technetium.json @@ -1,17 +1,17 @@ { "name": "Technetium", "icon": ["hbm:item.ingot_technetium", 1, 0], - "trigger": [["hbm:item.billet_technetium"], ["hbm:item.ingot_technetium"], ["hbm:item.nugget_technetium"]], - "title": { - "en_US": "Technetium", + "trigger": [["hbm:item.billet_technetium"], ["hbm:item.ingot_technetium"], ["hbm:item.nugget_technetium"]], + "title": { + "en_US": "Technetium", "uk_UA": "Технецій-99", "ru_RU": "Технеций", "zh_CN": "锝" - }, + }, "content": { "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.

Primarily used for [[technetium steel|Technetium Steel]].

Moderately radioactive.", "uk_UA": "Синтетичний метал, перероблений з палива [[ЦИРНОКС|ZIRNOX]] або [[ВВЕР|PWR]] на ранніх етапах. також може бути отриманий з деяких видів палива [[РБМК|RBMK]] або [[корінної руди|Bedrock Ore]] за допомогою високоефективного розчинника.

В основному використовується для [[технецієвої сталі|Technetium Steel]].

Помірно радіоактивний.", - "ru_RU": "Синтетический металл, перерабатывается из топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых топлив [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.

В основном используется для [[технециевой стали|Technetium Steel]].

Умеренно радиоактивен.", + "ru_RU": "Синтетический металл, перерабатывается из топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых видов топлива [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.

В основном используется для [[технециевой стали|Technetium Steel]].

Умеренно радиоактивен.", "zh_CN": "人工合成的金属元素,初期可通过再处理[[锆诺克斯|ZIRNOX]]和[[PWR]]的枯竭燃料获取。也可通过回收某些[[RBMK]]燃料或使用高性能溶剂处理[[基岩矿石|Bedrock Ore]]获取。

主要用于制作[[锝钢|Technetium Steel]]。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/technetium_steel.json b/src/main/resources/assets/hbm/manual/material/technetium_steel.json index 6b99056f2..848f139a7 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium_steel.json +++ b/src/main/resources/assets/hbm/manual/material/technetium_steel.json @@ -1,13 +1,13 @@ { "name": "Technetium Steel", "icon": ["hbm:item.ingot_tcalloy", 1, 0], - "trigger": [["hbm:item.ingot_tcalloy"], ["hbm:item.powder_tcalloy"]], - "title": { - "en_US": "Technetium Steel", + "trigger": [["hbm:item.ingot_tcalloy"], ["hbm:item.powder_tcalloy"]], + "title": { + "en_US": "Technetium Steel", "uk_UA": "Технецієва сталь", "ru_RU": "Технециевая сталь", "zh_CN": "锝钢" - }, + }, "content": { "en_US": "Alloy made from [[steel|Steel]] and [[technetium|Technetium]]. Corrosion resistant, used in stronger fluid tanks and many advanced machines. Obtainable after either a [[ZIRNOX]] or [[PWR]] due to technetium being synthetic.

Fully interchangeable with [[cadmium steel|Cadmium Steel]].", "uk_UA": "Сплав, виготовлений зі [[сталі|Steel]] та [[технецію|Technetium]]. Стійкий до корозії, використовується в більш міцних резервуарах для рідини та в багатьох передових машинах. Одержується після [[ЦИРНОКС|ZIRNOX]] або [[ВВЕР|PWR]], оскільки технецій є синтетичним.

Повністю взаємозамінний з [[кадмієвою сталлю|Cadmium Steel]].", diff --git a/src/main/resources/assets/hbm/manual/material/thorium.json b/src/main/resources/assets/hbm/manual/material/thorium.json index bbea607d3..075261d4a 100644 --- a/src/main/resources/assets/hbm/manual/material/thorium.json +++ b/src/main/resources/assets/hbm/manual/material/thorium.json @@ -1,17 +1,17 @@ { "name": "Thorium-232", "icon": ["hbm:item.billet_th232", 1, 0], - "trigger": [["hbm:item.ingot_th232"], ["hbm:item.billet_th232"], ["hbm:item.nugget_th232"], ["hbm:item.powder_thorium"]], - "title": { - "en_US": "Thorium-232", + "trigger": [["hbm:item.ingot_th232"], ["hbm:item.billet_th232"], ["hbm:item.nugget_th232"], ["hbm:item.powder_thorium"]], + "title": { + "en_US": "Thorium-232", "uk_UA": "Торій-232", "ru_RU": "Торий-232", "zh_CN": "钍-232" - }, + }, "content": { "en_US": "Fertile (i.e. can be bred) isotope which yields [[uranium-233|Uranium-233]]. Can either be irradiated in an [[RBMK]] to produce [[thorium fuel|Thorium Fuel]] or combined with uranium-233. Thorium-derived fuels are generally cost-effective but not very powerful. Also usable in [[liquid thorium salt|Liquid Thorium Salt]], a powerful [[PWR]] coolant (turning it into a molten salt reactor) which yields tons of uranium-233 quickly.

Slightly radioactive.", "uk_UA": "Фертильний (тобто придатний до розмноження) ізотоп який дає [[уран-233|Uranium-233]]. Може бути опромінений в [[РБМК|RBMK]] для отримання [[торієвого палива|Thorium Fuel]] або поєднаний з ураном-233. Паливо, отримане з торію, зазвичай економічне, але не дуже потужне. Також використовується у вигляді [[рідкої торієвої солі|Liquid Thorium Salt]], потужному теплоносію [[ВВЕР|PWR]] (перетворюючи його у реактор на розплавах солей) який швидко дає тонни урану-233.

Слабко радіоактивний.", - "ru_RU": "Фертильный (т.е. пригодный для размножения) изотоп, дающий [[уран-233|Uranium-233]]. Может быть облучен в [[РБМК|RBMK]] для производства [[ториевого топлива|Thorium Fuel]] или комбинирован с ураном-233. Топлива, производные от тория, обычно экономичны, но не очень мощные. Также используется в [[жидкой ториевой соли|Liquid Thorium Salt]], мощном охладителе [[ВВЭР|PWR]], превращающем его в реактор на расплавленных солях, который быстро производит большое количество урана-233.

Слабо радиоактивен.", + "ru_RU": "Фертильный (т.е. пригодный для размножения) изотоп, дающий [[уран-233|Uranium-233]]. Может быть облучен в [[РБМК|RBMK]] для производства [[ториевого топлива|Thorium Fuel]] или комбинирован с ураном-233. Топливо, производное от тория, обычно экономично, но не очень мощное. Также используется в [[жидкой ториевой соли|Liquid Thorium Salt]], мощном охладителе [[ВВЭР|PWR]], превращающем его в реактор на расплавленных солях, который быстро производит большое количество урана-233.

Слабо радиоактивен.", "zh_CN": "可增殖的同位素,增殖后产生[[铀-233|Uranium-233]]。可通过在[[RBMK]]中辐照或与铀-233混合得到[[钍燃料|Thorium Fuel]]。 总体来讲,由钍衍生的燃料成本较低,但能量不高。 也可用于[[液态钍盐|Liquid Thorium Salt]],其可作为一种强力的[[PWR]]冷却剂(同时将反应堆变成熔盐堆),同时快速产生大量铀-233。

略有放射性。" } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-233.json b/src/main/resources/assets/hbm/manual/material/uranium-233.json index 721edee4c..ea6e52f83 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-233.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-233.json @@ -1,17 +1,17 @@ { "name": "Uranium-233", "icon": ["hbm:item.billet_u233", 1, 0], - "trigger": [["hbm:item.ingot_u233"], ["hbm:item.billet_u233"], ["hbm:item.nugget_u233"]], - "title": { - "en_US": "Uranium-233", + "trigger": [["hbm:item.ingot_u233"], ["hbm:item.billet_u233"], ["hbm:item.nugget_u233"]], + "title": { + "en_US": "Uranium-233", "uk_UA": "Уран-233", "ru_RU": "Уран-233", "zh_CN": "铀-233" - }, + }, "content": { "en_US": "Artificial type of fissile uranium (i.e. reactor capable), created by reprocessing [[thorium-based fuels|Thorium Fuel]]. High enriched uranium-233 fuel is generally more powerful than fuel derived from [[uranium-235|Uranium-235]].

Moderately radioactive.", "uk_UA": "Штучний ізотоп урану здатного до розщеплення (тобто придатного для реакторів), отримується шляхом переробки [[палива на основі торію|Thorium Fuel]]. Високозбагачене паливо з урану-233, як правило, потужніше, ніж паливо, отримане з [[урану-235|Uranium-235]].

Помірно радіоактивний.", - "ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путём переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащенное топливо урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].

Умеренно радиоактивен.", + "ru_RU": "Искусственный тип делящегося урана (т.е. пригодного для реакторов), получаемый путём переработки [[ториевых топлив|Thorium Fuel]]. Высокообогащённое топливо из урана-233, как правило, мощнее, чем топливо, полученное из [[урана-235|Uranium-235]].

Умеренно радиоактивен.", "zh_CN": "人工制造的易裂变(即能够用于反应堆)的铀同位素,可通过再处理[[钍基燃料|Thorium Fuel]]获取。总体来讲,高浓缩度的铀-233较基于铀-235的燃料更加强力。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-235.json b/src/main/resources/assets/hbm/manual/material/uranium-235.json index 818c9e367..23e2a810c 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-235.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-235.json @@ -1,17 +1,17 @@ { "name": "Uranium-235", "icon": ["hbm:item.billet_u235", 1, 0], - "trigger": [["hbm:item.ingot_u235"], ["hbm:item.billet_u235"], ["hbm:item.nugget_u235"]], - "title": { - "en_US": "Uranium-235", + "trigger": [["hbm:item.ingot_u235"], ["hbm:item.billet_u235"], ["hbm:item.nugget_u235"]], + "title": { + "en_US": "Uranium-235", "uk_UA": "Уран-235", "ru_RU": "Уран-235", "zh_CN": "铀-235" - }, + }, "content": { "en_US": "Enriched uranium. Fissile, usable in some reactors directly as high enriched fuel, or mixed back with [[uranium-238|Uranium-238]] for medium enriched uranium fuels. Weapons grade. Created initially by processing [[uranium hexafluuoride|Uranium Hexafluoride]] in a cascade of four [[gas centrifuges|Gas Centriuge]], available later on by separating [[natural uranium|Uranium]] via [[SILEX]].

Moderately radioactive.", "uk_UA": "Збагачений уран. Придатний до розщеплення, використовується в деяких реакторах безпосередньо як високозбагачене паливо або змішується з [[ураном-238|Uranium-238]] для отримання середньозбагаченого уранового палива. Збройового класу. Спочатку отримується шялхом переробки [[гексафториду урану|Uranium Hexafluoride]] у каскаді з чотирьох [[газових центрифуг|Gas Centriuge]], пізніше доступний шляхом розділення [[природного урану|Uranium]] за допомогою [[камери лазерного розділення ізотопів|SILEX]].

Помірно радіоактивний.", - "ru_RU": "Обогащенный уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенных урановых топлив. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен.", + "ru_RU": "Обогащённый уран. Делящийся, используется в некоторых реакторах непосредственно как высокообогащенное топливо или смешивается с [[ураном-238|Uranium-238]] для среднеобогащенного уранового топлива. Оружейное качество. Изначально создается путём переработки [[гексафторида урана|Uranium Hexafluoride]] в каскаде из четырех [[газовых центрифуг|Gas Centrifuge]], позже доступен через разделение [[натурального урана|Uranium]] с помощью [[SILEX]].

Умеренно радиоактивен.", "zh_CN": "浓缩的铀,容易裂变,可直接作为高浓缩度燃料用于某些反应堆,也可与[[铀-238|Uranium-238]]混合回中浓缩度的铀燃料。 也是一种武器级的同位素。最初可通过在四台串联的[[气体离心机|Gas Centrifuge]]中处理[[六氟化铀|Uranium Hexafluoride]]获取,之后也可直接在[[SILEX]]中 分离[[天然铀|Uranium]]获取。

放射性中等。" } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium-238.json b/src/main/resources/assets/hbm/manual/material/uranium-238.json index d333810a9..6d55e3765 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium-238.json +++ b/src/main/resources/assets/hbm/manual/material/uranium-238.json @@ -1,17 +1,17 @@ { "name": "Uranium-238", "icon": ["hbm:item.billet_u238", 1, 0], - "trigger": [["hbm:item.ingot_u238"], ["hbm:item.billet_u238"], ["hbm:item.nugget_u238"]], - "title": { - "en_US": "Uranium-238", + "trigger": [["hbm:item.ingot_u238"], ["hbm:item.billet_u238"], ["hbm:item.nugget_u238"]], + "title": { + "en_US": "Uranium-238", "uk_UA": "Уран-238", "ru_RU": "Уран-238", "zh_CN": "铀-238" - }, + }, "content": { "en_US": "Depleted uranium, not fissile (i.e. not directly reactor-usable). Primarily a byproduct from enriching [[uranium|Uranium]]. Used in [[ferrouranium|Ferrouranium]], for [[depleted uranium ammo|Depleted Uranium Ammo]] and for certain low-enriched fuels. Fuels that contain uranium-238 typically yield useful [[plutonium-239|Plutonium-239]] when reprocessing.

Slightly radioactive.", "uk_UA": "Збіднений уран, не ділиться (тобто не придатний для безпосереднього використання в реакторах). В основному побічний продукт збагачення [[урану|Uranium]]. Використовується у виготовленні [[фероурану|Ferrouranium]], [[боєприпасів зі збідненим ураном|Depleted Uranium Ammo]] та для певного низькозбагаченого палива. Паливо, що містить уран-238 зазвичай дає корисний [[плутоній-239|Plutonium-239]] під час переробки.

Слабо радіоактивний.", - "ru_RU": "Истощенный уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроурание|Ferrouranium]], для [[боеприпасов с истощенным ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных топлив. Топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].

Слабо радиоактивен.", + "ru_RU": "Обеднённый уран, не делящийся (т.е. не пригоден для прямого использования в реакторах). В основном является побочным продуктом обогащения [[урана|Uranium]]. Используется в [[ферроуране|Ferrouranium]], для [[боеприпасов с обеднённым ураном|Depleted Uranium Ammo]] и для некоторых низкообогащенных видов топлива. Виды топлива, содержащие уран-238, при переработке обычно дают полезный [[плутоний-239|Plutonium-239]].

Слабо радиоактивен.", "zh_CN": "贫铀,不能作为燃料(即无法直接被反应堆使用)。通常作为[[铀|Uranium]]浓缩过程中的副产品。用于制造[[铀铁合金|Ferrouranium]],[[贫铀弹药|Depleted Uranium Ammo]]和低浓缩度燃料。含有铀-238的燃料在再处理时会产生有用的[[钚-239|Plutonium-239]]。

略有放射性。" } } diff --git a/src/main/resources/assets/hbm/manual/material/uranium.json b/src/main/resources/assets/hbm/manual/material/uranium.json index e7507ab62..a85eae076 100644 --- a/src/main/resources/assets/hbm/manual/material/uranium.json +++ b/src/main/resources/assets/hbm/manual/material/uranium.json @@ -1,17 +1,17 @@ { "name": "Uranium", "icon": ["hbm:item.ingot_uranium", 1, 0], - "trigger": [["hbm:item.ingot_uranium"], ["hbm:item.billet_uranium"], ["hbm:item.nugget_uranium"], ["hbm:item.powder_uranium"], ["hbm:tile.ore_uranium"]], - "title": { - "en_US": "Uranium", + "trigger": [["hbm:item.ingot_uranium"], ["hbm:item.billet_uranium"], ["hbm:item.nugget_uranium"], ["hbm:item.powder_uranium"], ["hbm:tile.ore_uranium"]], + "title": { + "en_US": "Uranium", "uk_UA": "Уран", "ru_RU": "Уран", "zh_CN": "铀" - }, + }, "content": { "en_US": "Natural uranium, slightly radioactive. Not very fissile on its own, can be enriched by turning it into [[uranium hexafluoride|Uranium Hexafluoride]] and processing it in [[gas centrifuges|Gas Centrifuge]]. [[ZIRNOX]], [[RBMK]] and [[Chigago Pile]] may use natural uranium as fuel without enrichment.

See also:
[[Uranium-233]]
[[Uranium-235]]
[[Uranium-238]]", "uk_UA": "Природний уран, слабо радіоактивний. Сам по собі не дуже ділиться, його можна збагачувати, перетворюючи на [[гексафторид урану|Uranium Hexafluoride]] та оброблюючи в [[газових центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] та [[Чиказька дровітня|Chigago Pile]] можуть використовувати природний уран як паливо без збагачення.

Див. також:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]", - "ru_RU": "Натуральный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащен путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать натуральный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]", + "ru_RU": "Природный уран, слабо радиоактивен. Сам по себе не очень делящийся, может быть обогащён путём превращения в [[гексафторид урана|Uranium Hexafluoride]] и переработки в [[газовых центрифугах|Gas Centrifuge]]. [[ЦИРНОКС|ZIRNOX]], [[РБМК|RBMK]] и [[Чикагская поленница|Chicago Pile]] могут использовать природный уран как топливо без обогащения.

См. также:
[[Уран-233|Uranium-233]]
[[Уран-235|Uranium-235]]
[[Уран-238|Uranium-238]]", "zh_CN": "天然铀,具有微弱放射性。本身不太容易裂变,但可通过将其变为[[六氟化铀|Uranium Hexafluoride]]并在[[气体离心机|Gas Centrifuge]]中处理以将其浓缩。[[锆诺克斯|ZIRNOX]],[[RBMK]]和[[芝加哥反应堆|Chigago Pile]]可直接将未浓缩铀用作燃料。

另见:
[[铀-233|Uranium-233]]
[[铀-235|Uranium-235]]
[[铀-238|Uranium-238]]" } } diff --git a/src/main/resources/assets/hbm/manual/material/weaponsteel.json b/src/main/resources/assets/hbm/manual/material/weaponsteel.json index d96c3dbd6..9b7d9b2df 100644 --- a/src/main/resources/assets/hbm/manual/material/weaponsteel.json +++ b/src/main/resources/assets/hbm/manual/material/weaponsteel.json @@ -1,13 +1,13 @@ { "name": "Weapon Steel", "icon": ["hbm:item.ingot_weaponsteel", 1, 0], - "trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]], - "title": { - "en_US": "Weapon Steel", + "trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]], + "title": { + "en_US": "Weapon Steel", "uk_UA": "Збройова сталь", "ru_RU": "Оружейная сталь", "zh_CN": "武器级钢" - }, + }, "content": { "en_US": "High-purity version of [[steel|Steel]] made in a [[rotary furnace|Rotary Furnace]]. Requires [[coker gas|Coker Gas]], and therefore a [[coker unit|Coker Unit]]. Used in many mid-game weapons, weapon modifications and missile warheads.", "uk_UA": "Високочиста версія [[сталі|Steel]] виготовлена в [[роторній печі|Rotary Furnace]]. Потребує [[коксовий газ|Coker Gas]], тому і [[коксову установку|Coker Unit]]. Використовується в багатьох видах мідгеймової зброї, модифікаціях зброї та ракетних боєголовках.", From 48b4124c14a9db7c65fcaefdeb28e0572312541e Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 15:52:45 -0600 Subject: [PATCH 486/491] Manual update --- src/main/resources/assets/hbm/manual/material/ferrouranium.json | 2 +- .../resources/assets/hbm/manual/material/plutonium-240.json | 2 +- src/main/resources/assets/hbm/manual/material/polonium.json | 2 +- src/main/resources/assets/hbm/manual/material/sulfur.json | 2 +- src/main/resources/assets/hbm/manual/material/technetium.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/material/ferrouranium.json b/src/main/resources/assets/hbm/manual/material/ferrouranium.json index 4d46f1c36..3efb82964 100644 --- a/src/main/resources/assets/hbm/manual/material/ferrouranium.json +++ b/src/main/resources/assets/hbm/manual/material/ferrouranium.json @@ -11,7 +11,7 @@ "content": { "en_US": "Alloy of [[steel|Steel]] and [[uranium-238|Uranium-238]] made in the [[crucible|Crucible]]. Mainly used in ducrete, weapon parts and high-explosive ammunition.", "uk_UA": "Сплав [[сталі|Steel]] та [[урану-238|Uranium-238]], виготовлений у [[ливарні|Crucible]]. В основному використовується в уранобетоні, деталях зброї та вибухових боєприпасах.", - "ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[плавильне|Crucible]]. В основном используется в дюкрете, деталях оружий и взрывных боеприпасах.", + "ru_RU": "Сплав из [[стали|Steel]] и [[урана-238|Uranium-238]], изготовленный в [[плавильне|Crucible]]. В основном используется в дюкрете, деталях оружия и взрывных боеприпасах.", "zh_CN": "[[钢|Steel]]与[[铀-238|Uranium-238]]的合金,在坩埚中制成。 主要用于制作贫铀混凝土、武器部件和高爆弹药。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium-240.json b/src/main/resources/assets/hbm/manual/material/plutonium-240.json index 95294cb75..1406f170a 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium-240.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium-240.json @@ -11,7 +11,7 @@ "content": { "en_US": "Non-fissile isotope found in [[plutonium|Plutonium]] and [[reactor-grade plutonium|Reactor-Grade-Plutonium]]. Only useful when manually making reactor-grade plutonium from [[plutonium-239|Plutonium-239]] or in specialized [[zirconium|Zirconium]] fast breeder rods for making [[plutonium-241|Plutonium-241]] in the [[RBMK]].", "uk_UA": "Не здатний до поділу ізотоп, що міститься в [[плутонії|Plutonium]] та [[реакторному плутонії|Reactor-Grade-Plutonium]]. Корисний лише при ручному виготовленні реакторного плутонію з [[плутонію-239|Plutonium-239]] або у спеціалізованих [[цирконієвих|Zirconium]] швидких розмножувачах для виготовлення [[плутонію-241|Plutonium-241]] в [[РБМК|RBMK]].", - "ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[ЦТС|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]].", + "ru_RU": "Неделимый изотоп, содержащийся в [[плутонии|Plutonium]] и [[реакторном плутонии|Reactor-Grade-Plutonium]]. Полезен только при ручном создании реакторного плутония из [[плутония-239|Plutonium-239]] или в специализированных [[циркониевых|Zirconium]] стержнях быстрого размножения для производства [[плутония-241|Plutonium-241]] в [[РБМК|RBMK]].", "zh_CN": "[[钚|Plutonium]]和[[反应堆级钚|Reactor-Grade Plutonium]]中存在的不易裂变同位素。仅有的用途是手动与[[钚-239|Plutonium-239]]混合为反应堆级钚,或与[[锆|Zirconium]]一同制成专用于增殖的ZFB燃料棒,以在[[RBMK]]中生产[[钚-241|Plutonium-241]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/polonium.json b/src/main/resources/assets/hbm/manual/material/polonium.json index 465165588..5c3dd0e46 100644 --- a/src/main/resources/assets/hbm/manual/material/polonium.json +++ b/src/main/resources/assets/hbm/manual/material/polonium.json @@ -11,7 +11,7 @@ "content": { "en_US": "Radioisotope derived from reprocessing [[radium-226|Radium-226]] neutron sources. Usable for [[RTGs|RTG]], or with [[beryllium|Beryllium]] in Po210Be neutron sources for [[RBMKs|RBMK]].

Highly radioactive, very hot.", "uk_UA": "Радіоізотоп, отриманий в результаті переробки [[радій-226|Radium-226]]берилієвих джерел нейтронів. Використовується для [[РІТЕГ|RTG]] або з [[берилієм|Beryllium]] у полоній-210 берилієвих джерелах нейтронів для [[РБМК|RBMK]].

Високорадіоактивний, дуже гарячий.", - "ru_RU": "Радиоизотоп, получаемый переработкой нейтронных источников [[радия-226|Radium-226]]. Используется для [[РИТЭГ|RTG]] или с [[бериллием|Beryllium]] в нейтронных источниках полоний-210-бериллий для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий.", + "ru_RU": "Радиоизотоп, получаемый переработкой нейтронных источников [[радия-226|Radium-226]]. Используется для [[РИТЭГ|RTG]] или с [[бериллием|Beryllium]] в полоний-210-бериллиевых источниках нейтронов для [[РБМК|RBMK]].

Сильно радиоактивен, очень горячий.", "zh_CN": "再处理[[镭-226|Radium-226]]中子源时得到的放射性同位素。可用于[[RTG]],也可与[[铍|Beryllium]]混合为钋-210-铍中子源,用于[[RBMK]]。

放射性强,高温。" } } diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index 071ea8633..be277db2c 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -11,7 +11,7 @@ "content": { "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", "uk_UA": "Звичайна руда, зустрічається у великих кількостях в пеклі. Використовується в різних речах, таких як [[сірчана кислота|Sulfuric Acid]], [[гума|Rubber]] та єлоукейку для отримання гексафториду [[урану|Uranium]]. Також може використовуватися для виготовлення пороху, сірників або як жовтий барвник.", - "ru_RU": "Обычная руда, в больших количествах встречается в Незере. Используется для различных вещей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в жётлом кеке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя.", + "ru_RU": "Распространённая руда, в больших количествах встречается в Незере. Используется для различных вещей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в жётлом кеке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя.", "zh_CN": "常见矿物,在下界的生成量更多。用于多种配方,例如制作[[硫酸|Sulfuric Acid]]和 [[橡胶|Rubber]],也用于制作黄饼,作为合成六氟化[[铀|Uranium]]的原料。 也可用于制作火药、火柴,以及用作黄色染料。" } } diff --git a/src/main/resources/assets/hbm/manual/material/technetium.json b/src/main/resources/assets/hbm/manual/material/technetium.json index 9c529e2cf..d640d843e 100644 --- a/src/main/resources/assets/hbm/manual/material/technetium.json +++ b/src/main/resources/assets/hbm/manual/material/technetium.json @@ -11,7 +11,7 @@ "content": { "en_US": "Synthetic metal, reprocessed from [[ZIRNOX]] or [[PWR]] fuel early on. May also be extracted from some [[RBMK]] fuels or [[bedrock ore|Bedrock Ore]] with high-performance solvent.

Primarily used for [[technetium steel|Technetium Steel]].

Moderately radioactive.", "uk_UA": "Синтетичний метал, перероблений з палива [[ЦИРНОКС|ZIRNOX]] або [[ВВЕР|PWR]] на ранніх етапах. також може бути отриманий з деяких видів палива [[РБМК|RBMK]] або [[корінної руди|Bedrock Ore]] за допомогою високоефективного розчинника.

В основному використовується для [[технецієвої сталі|Technetium Steel]].

Помірно радіоактивний.", - "ru_RU": "Синтетический металл, перерабатывается из топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых видов топлива [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.

В основном используется для [[технециевой стали|Technetium Steel]].

Умеренно радиоактивен.", + "ru_RU": "Синтетический металл, получаемый в результате переработки топлива [[ЦИРНОКС|ZIRNOX]] или [[ВВЭР|PWR]] на ранних стадиях. Также может быть извлечен из некоторых видов топлива [[РБМК|RBMK]] или [[бедроковой руды|Bedrock Ore]] с использованием высокоэффективного растворителя.

В основном используется для [[технециевой стали|Technetium Steel]].

Умеренно радиоактивен.", "zh_CN": "人工合成的金属元素,初期可通过再处理[[锆诺克斯|ZIRNOX]]和[[PWR]]的枯竭燃料获取。也可通过回收某些[[RBMK]]燃料或使用高性能溶剂处理[[基岩矿石|Bedrock Ore]]获取。

主要用于制作[[锝钢|Technetium Steel]]。

放射性中等。" } } From 2eecf17100ae63564a68e72d99dab91f47162df4 Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Mon, 25 Aug 2025 15:52:58 -0600 Subject: [PATCH 487/491] DODD --- src/main/resources/assets/hbm/lang/ru_RU.lang | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 906974c2e..c17266768 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -6351,6 +6351,53 @@ tile.rbmk_steam_inlet.desc=Подает воду в колонны RBMK, есл tile.rbmk_steam_outlet.name=Порт вывода пара РБМК РеаСим tile.rbmk_steam_outlet.desc=Извлекает перегретый пар из колонн РБМК, если включены ReaSim бойлеры$Подключается к колоннам RBMK сбоку tile.rbmk_storage.name=Колонна-хранилище РБМК +tile.rbmk.dodd.heat=Температура колонны +tile.rbmk.dodd.reasimWater=Вода РеаСим +tile.rbmk.dodd.reasimSteam=Пар РеаСим +tile.rbmk.dodd.level=Уровень +tile.rbmk.dodd.targetLevel=Целевой уровень +tile.rbmk.dodd.startingLevel=Начальный уровень +tile.rbmk.dodd.mult=Мульт. +tile.rbmk.dodd.color=Цвет +tile.rbmk.dodd.levelLower=Уровень ниже +tile.rbmk.dodd.levelUpper=Уровень выше +tile.rbmk.dodd.heatLower=Температура ниже +tile.rbmk.dodd.heatUpper=Температура выше +tile.rbmk.dodd.function=Функция +tile.rbmk.dodd.fluxSlow=Медленный поток +tile.rbmk.dodd.fluxFast=Быстрый поток +tile.rbmk.dodd.hasRod=Имеет стержень +tile.rbmk.dodd.progress=Прогресс +tile.rbmk.dodd.gas=Газ +tile.rbmk.dodd.cooled=Охлажденный +tile.rbmk.dodd.burned=Сожженный +tile.rbmk.dodd.feed=Питание +tile.rbmk.dodd.steam=Пар +tile.rbmk.dodd.cryo=Крио +tile.rbmk.dodd.fuel=Топливо +tile.rbmk.dodd.f_heat=Температура топлива +tile.rbmk.dodd.f_xenon=Отравление ксеноном +tile.rbmk.dodd.f_yield=Выход топлива +tile.rbmk.dodd.feed_type=Тип питания(ID) +tile.rbmk.dodd.steam_type=Тип пара(ID) +tile.rbmk.dodd.cryo_type=Тип крио(ID) +tile.rbmk.dodd.gas_type=Тип газа(ID) +tile.rbmk.dodd.fuel_type=Тип топлива(ID) +tile.rbmk.dodd.feed_p=Давление +tile.rbmk.dodd.steam_p=Давление пара +tile.rbmk.dodd.cryo_p=Давление крио +tile.rbmk.dodd.gas_p=Давление газа +tile.rbmk.dodd.fuel_p=Давление топлива +tile.rbmk.dodd.feed_max=Максимальное количество питания +tile.rbmk.dodd.steam_max=Максимальное количество пара +tile.rbmk.dodd.cryo_max=Максимальное количество крио +tile.rbmk.dodd.gas_max=Максимальное количество газа +tile.rbmk.dodd.fuel_max=Максимальное количество топлива +tile.rbmk.dodd.feed_amt=Количество питания +tile.rbmk.dodd.steam_amt=Количество пара +tile.rbmk.dodd.cryo_amt=Количество крио +tile.rbmk.dodd.gas_amt=Количество газа +tile.rbmk.dodd.fuel_amt=Количество топлива tile.reactor_computer.name=Контроллер реактора tile.reactor_conductor.name=Бойлер реактора tile.reactor_control.name=Регулирующие стержни From 03d195fd91ad2abcf099cf0fe1d29a17a79c5f6a Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 26 Aug 2025 15:49:27 +0200 Subject: [PATCH 488/491] ough --- changelog | 3 +- .../com/hbm/commands/CommandCustomize.java | 51 ++++++++++++++++++ .../java/com/hbm/items/ICustomizable.java | 9 ++++ src/main/java/com/hbm/main/MainRegistry.java | 1 + .../textures/items/pwr_fuel.bfb_am_mix.png | Bin 449 -> 440 bytes .../hbm/textures/items/pwr_fuel.bfb_pu241.png | Bin 438 -> 434 bytes .../hbm/textures/items/pwr_fuel.hea242.png | Bin 428 -> 428 bytes .../hbm/textures/items/pwr_fuel.hen237.png | Bin 412 -> 414 bytes .../hbm/textures/items/pwr_fuel.hep239.png | Bin 403 -> 404 bytes .../hbm/textures/items/pwr_fuel.hep241.png | Bin 418 -> 421 bytes .../hbm/textures/items/pwr_fuel.hes326.png | Bin 431 -> 423 bytes .../hbm/textures/items/pwr_fuel.hes327.png | Bin 434 -> 440 bytes .../hbm/textures/items/pwr_fuel.heu233.png | Bin 433 -> 434 bytes .../hbm/textures/items/pwr_fuel.heu235.png | Bin 419 -> 422 bytes .../hbm/textures/items/pwr_fuel.mea.png | Bin 431 -> 437 bytes .../hbm/textures/items/pwr_fuel.men.png | Bin 429 -> 426 bytes .../hbm/textures/items/pwr_fuel.mep.png | Bin 414 -> 410 bytes .../hbm/textures/items/pwr_fuel.meu.png | Bin 422 -> 434 bytes .../hbm/textures/items/pwr_fuel.mox.png | Bin 414 -> 414 bytes .../hbm/textures/items/pwr_fuel_base.png | Bin 422 -> 420 bytes .../hbm/textures/items/pwr_fuel_depleted.png | Bin 373 -> 369 bytes .../hbm/textures/items/pwr_fuel_hot.png | Bin 401 -> 398 bytes 22 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hbm/commands/CommandCustomize.java create mode 100644 src/main/java/com/hbm/items/ICustomizable.java diff --git a/changelog b/changelog index 8be9f46fc..1751d00af 100644 --- a/changelog +++ b/changelog @@ -10,4 +10,5 @@ * Fixed conveyor grabber dropping items off at an offset when placing them on a conveyor belt due to a client desync * Fixed occasional crash caused by using the settings tool on the autoloader * Fixed QMAW not correctly working with other languages -* Fixed QMAW loading breaking entirely due to file encoding \ No newline at end of file +* Fixed QMAW loading breaking entirely due to file encoding +* Fixed PWR fuel rod textures being 18x18 instead of 16x16 \ No newline at end of file diff --git a/src/main/java/com/hbm/commands/CommandCustomize.java b/src/main/java/com/hbm/commands/CommandCustomize.java new file mode 100644 index 000000000..a217eb56a --- /dev/null +++ b/src/main/java/com/hbm/commands/CommandCustomize.java @@ -0,0 +1,51 @@ +package com.hbm.commands; + +import com.hbm.items.ICustomizable; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumChatFormatting; + +public class CommandCustomize extends CommandBase { + + @Override + public String getCommandName() { + return "ntmcustomize"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "/ntmcustomize"; + } + + @Override + public int getRequiredPermissionLevel() { + return 0; + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender sender) { + return true; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + if(!(sender instanceof EntityPlayer)) { + sender.addChatMessage(new ChatComponentText("Customization is only available to players!").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + return; + } + + EntityPlayer player = (EntityPlayer) sender; + + if(player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof ICustomizable)) { + sender.addChatMessage(new ChatComponentText("You have to hold a customizable item to use this command!").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + return; + } + + ICustomizable item = (ICustomizable) player.getHeldItem().getItem(); + item.customize(player, player.getHeldItem(), args); + } +} diff --git a/src/main/java/com/hbm/items/ICustomizable.java b/src/main/java/com/hbm/items/ICustomizable.java new file mode 100644 index 000000000..74b82506f --- /dev/null +++ b/src/main/java/com/hbm/items/ICustomizable.java @@ -0,0 +1,9 @@ +package com.hbm.items; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public interface ICustomizable { + + public void customize(EntityPlayer player, ItemStack stack, String... args); +} diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 0db237afe..9f5366d6c 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -665,6 +665,7 @@ public class MainRegistry { event.registerServerCommand(new CommandPacketInfo()); event.registerServerCommand(new CommandReloadServer()); event.registerServerCommand(new CommandLocate()); + event.registerServerCommand(new CommandCustomize()); ArcFurnaceRecipes.registerFurnaceSmeltables(); // because we have to wait for other mods to take their merry ass time to register recipes } diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.bfb_am_mix.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.bfb_am_mix.png index 12f553847930a7c2ec42eea7d826417b17ef87ca..1362ef70b32417a106d97d707d2893f1906a48f9 100644 GIT binary patch delta 433 zcmV;i0Z#tG1GobriBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde{V@d zK~y-6rISle0znXlzws4KNF00&QDfZb0Sr4<>^K8Q;SMZVv+4`5W6ceSYa@vo9}|0e z-ZqXPX%|L<42X$;Qk%c4zp7MM!#`y$I}kz`r4+vJE;goRe=4yBF>4!_1zs&6cI%caU65LTSQNi)g2t{71=Co;~bZe&o9U) ziF}r1v4-JjH2}alJYao$3&s;BZ(~NU8N&}qz3^`UfTN=llWfHJH6x2Pf5RZ(J}h_z z738aYOJ~_?fFFcNPvsI5tx^m@IG$ycn^YME-ae`%%@2B`(I82Z%;eiy z;>GzXe{XLQLh!yvqtS@pJ9`ZCf)4h}*uQKpudfNikT491qKLDfW%NAGU(w-ynVnJ* z`=o-re?Z+~G)$)XK>+sAAwP<{Fq<=foG~4zOr9ZegU^8gj*lzMf72Jqn{r0gZ^CoL%Isbc|f`f=0i$ZUqIGfGnYPEt8BFo`$ zh~;uw`d}8*=~NB|0}0?yYMLfTf1{DS^*`JSuIpklnJD1#cnl$gqE~K(w|5JN!vU01 z zj8Hwr_W=N4nr&!LbzIUbPVpIBeB+#6i>zuBf1}%dg=w~77%eoLjWU}Ge+YuG)SM>C zeLxs;c%H8qE@;}}(`4r10sxrHQs5K1Z0 zbzSzX4m^(`3^~M6AUR#I*=!U-1pr7NBwxjRJ}0`a%lsUy*X!bC%3mb?^6e~(A4G7v VCJ9?bkC}e^e^QmUCt^`o2%CR{LhJR;y^Ot;G{Ibvj1a={ zJkJyhIf6hEMG8IBtmaF4y`Gh{_iN@EvxPOAO~>;*v%5##Zuj_|Z9Ce&zmcyQ{RIN> Z0r{-C{pe9gng9R*07*qo1w^hwV1k0#!I%I5 diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.hea242.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.hea242.png index 02db8994d1197110292759bd1fc8f8795e7fc879..5d37d8a53fd1a68273f8abdea95a9a250aff7131 100644 GIT binary patch delta 413 zcmV;O0b>5F1FQofiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZykf2ET_ zZW=KZhCk1QN=;DEw5YpA${Egn)cFas+VB#!N z5M>4twNHAR-@pI&{QN)o&k*Mhq?A66W0X=Tr5FqbrQA}m-|zeJc#L!Ikj-Y3;c$4i z;32x*u5UCN9{4M()v9l`TK<$Df1Cn~#ez5F1FQofiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtaf6bG@ zZW=KVhClCyN=;GGwy3v8>N9ZT#Eoa*QMmB{JOL-a0OG=H@CK+w2@+DWj_sJ;vI`sc zL`4)YB1#V(X)gbazZs7`@V}Wj7nD-^G)+-Tp_F1WnbhXj2FByDpU>ww=l*)P+hsbP zo-O{uhQp!nbUGe*;mu~#_j)}ae>xL|#LZ^IU@&;4_xpXEbHU(3M3j9)|h>>niP2` zVHYJ)ercNV@6Y4$82%}_wP1|V{eDjn1O!3AY&NU))+Q&Di7plkoO7Si@AsL{=Qj`h z)ObABUazOXx9D^_Iv5P}+JASQf7tDIj7FmhcsLy5oU7#h>x8zI?RJYXhOa$Xuh%4! z{0!(mbP-S3Y&L{pNEn7#YstNwW~=!-K&#Qh^E@OMG*d3gh5PnBd71wV0C;?Qq~SLx z%aWojNV60b<#ay%4gm1{@=S3l$cl_OiHYK<)>nB2cdB;!LwQ!cLM^}^Y;DDu#%V3U z*SA3dKtLoBY-l+I2kg<}PLAjtktQi^ZP!;IAo4!e#u(99IUbJK@C^`0G0n2cYPG72 z@*Tj}DgdU_sg$lnV?`3d&wZB5W&J<6-uzd+0v>$5&LJ9SrT_o{07*qoM6N<$f~>~0 ADF6Tf delta 404 zcmV;F0c-xA1DpdPiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtTe^W_B zK~y-6&67KB0znLhzsd5HASmQ0bX0VlfunE-3Tmpk039_q;06>FNHi?F!?15wP7wux z*hQeEh$T0_J)iBd4FAp4qoCGW_WM1q>*BgDv)QaPzcetJOk}ZGV6DA)zu#v*pFb>q zW8?8ydcB?iH{NQsWH1;=(VMp-e{r|lF&d5T^x<%bwYIQ$rAU;fu-$IaT66tJ>-CyQ zMbCrU?`@Q$*lafVzK`$w7-LAClv=&^8mL~a<2Vi~RY)S7qce?WgEUW{2LW_GI#erF z@;oQYGvXvhlyE#9UjqSjKf7e-j3i44qmUpBN^=XhW{<_20Z5bL(MmzaYBP6w9LBGK zRHQJz;ou%Hp1~e1!6_h)Vw%z{2MNfJ18A+4go1bQF#b0v3_@yojn!&Zcp{gM6ex9d yd(-Ju)7uEWF-uc!(D0000~!=>-7})m917w2ZMp;{Z3xk?RJbtqXKw191@0ML9gY7o1<*E zTZ}Qh&S1S>lSrX~BB0f7lSsy9vmpoqf*`fotEJrg_?mdj=NKgbvVHNF50IJsGq!}zlR0000||I5N?G}75@ zMjXet>~_0Mr_;B?A7VHhYNyjt;2|50hW2_rb)E5C;%2j9Fc>`P{eGV~j-A6RF7e_i z>-8FA4EJ}mTrSDPX~+#~G@E2nuv)E%qKGJpu-1}^e-hMcXuB`*rH%N6l`j;B*O5J0=#CeL#&*DL8cBT3Vjz0R#2UTg*+JDX_Ax!RSRKnExX;0y|of_^7}F-8LQh<<551Em8YiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde_TmK zK~y-6rIRsk>OdHTzkdxTk;sdXI7E6nDmu=?Q}W{+)cCD)LyTre?`415}VD2!C+7_?)UpR=SqC7NL-AvUatv)fZsb< zE|;WI3Q#s^zP*u3&T6$HiXx&Y!dgozir;8FXHc)zI7?0{ITxd(qP)DmlIar(0RFtc z<9QycN|xuOmn-6V98ag`3;WqG(w*fd*Z2E@ub9^o*kdON^ z9h_rtE$w#uPME}TwSj&W1poo5=fd7vcDo&WYdJW_>3AfGV|*Z z!N6Bxu~?KG48ZRc0ORpk8fx&>P|pQlh53A5{SS(l{}q1$N}0k#CFQPD00000NkvXX Hu0mjfQUJAj delta 410 zcmV;L0cHNB1EK>ViBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtTe_2UH zK~y-6&66>1!cYu`KPM1c35vKycQz(A&cIQ)0|PVDy8s(AH(>9;z<|U;L>?(51QK_s zsGxm8LhVpXUTnY5zidDFZzlJW#u(jfHiThF7>10;2yjQ$6wy*beK#g zcbnhXU@*{jyRE>D*XwodcDw3&f8)7=>-Cy`zyBlN>-C7^*x9_|3Z6V=wOV0};d(}k z#ez(ng502bqd_JG%jJ?Niin~JYb}{5L9O-}s9LFTl!8nOPM(s9^7Q;nt`8^zcxg8A zeIHdNFAB2L8S#Dghr?qafL5zTp68s-XVPOvlBT7#&aJ(dYz81Z9?L=caE4y|0@_*o zqc}~HQcwjzUT-hFS_nI9*>1P&tmQq9IqdhONkX9R!~RqRdT{__j0EZteFFt5%;$3_ z>1##;B3FNJG#W`wJp%Qp7DAxHY&N_9&#u+{%KifK0hfNq{ZpJX-~a#s07*qoM6N<$ Ef{bLmGXMYp diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.hes326.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.hes326.png index d659fdd2fd0c54d2e31c22affa403e221d57822d..4ece6a899a945d43ce9c7d255da9c62858c78f62 100644 GIT binary patch delta 415 zcmV;Q0bu^G1E&KaiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde_lyM zK~y-6rIWvE!cY{4zx=V2gG)s48Jx1&K?gzV8~7Go-FyI_!0B$C#6@r`bm(RVadiy_ zuaSg+1e16>Db~bV+5>0#-5=jM+;a~6GqigTLI}0n?eKjc-}f1h$A#WPaWopK*=$A> zMVD+gn@lE?y9F;X7z~tc+Y0!Wf8}ynwcBlV>(_6E&1OTt-_L=&-7ZlS<#h8_n73L~ zmP>>XT>rs(y~b%Yz;S*C7?#Df)1k6h5Cj215D#Uw_cBUyCs&A zSW2|x5lW@U0Dw}hh6$v)jsfUdh91XoIQ$L(@Kmpp0!fx(Bnh}~p)WUubyUiGOemN_ z4vRM&ejolcAI;0*X{d;tJ?w)NKd)`kE8002ov JPDHLkV1ng;x0wI{ delta 423 zcmV;Y0a*U01Fr)iiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtTe`ZNU zK~y-6&6B@s!cY{4zx=V2Lzal(GdN|lLmdiI-@v!%>gEIZ1WtGBBw2)Rg$~`Cp>%Z> zgV#txK!QoU9ZHMhjo8wm2hQ?4=YHpK&pGhl%s3YmLa6n6O%z2$QN(02sm!kojK^a& zo6Shm^xHd~4%6xMZ1E!-4u{I~e>?>odA(j&-ELRu-k3UZxm+?B3{Lc3uSc4u+TylO ze7w2Ad3!?$!Qmgx=W~K~8-n06kmb7gx3@U2uf%ao9LFR{!i(oYmR;VF?Yh{O#Y4YO zwpx)%NhT%6ZU?p6+(u-*O)1aQ@AQ2=>aV&yq3eHN9u+Nl*% zR?{n{rUjK!l851mzK`Rdf$pB4DZ-H5VnH5;6jD+~5h_XW-ruz#8$f+-E&v7?LI~sD zanxg@L9tpeu!ckPlbzw)NRT Rgn|G7002ovPDHLkV1k7Q#18-f diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.hes327.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.hes327.png index 7a1f8df9883e8205beceed32f6f0e5d60b3419ff..15a94978f6548096807531ffcc0377dc1f406548 100644 GIT binary patch delta 433 zcmV;i0Z#t11GobriBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde{V@d zK~y-6rISr+B0(62pHgSSK!>1Cf)@ycklDnYD|ep3qqy?`p1@UIK-_qZ9ta5`5Hko9 z&}qBupK2W2zse#rV(fMdlMlYlTQ5(2RrMBpu*ALvDW!2;7o`+RDcbFJsy9_^wOXdv z>!G#Ybfr?E)9LKpa8r#&!<5Tqe*?T}%d$+hS~a`=%&ssT4yo7c32?1eLu;MTbGyRw z`Ww$bej=r0`wsg3KGEel*!I5xRkgVnOJ<69AAem6!`be~e+eS`s-< zsxR>h+Ex3Q%yo1a5Gh6Aj1$IL5VDApfSh>^3IGB`?)xoazJNCx5sY25tC)HoaS&qN zKc-J0K!`uFmQsq0eS;^rKH(xrsk&x8jXhTbUG-d zKD|^b(Q36;HveL^T1^*=MGbs$f7`Zoxm?z!nv6;8^?FpR)o*&GQb8$YY`$p{XBX$Z zJU%0YVEK-^-7fLzF*we8AiGdtk<0V+@I(*<1VKO;hP<7fur-~mKhf@ffh-mj@+{<# znLi{M4$02vB*}Pv5WwEy0oz(L+t^@|u^8(Gi|Lfe{UHb-cXY(WvPjU3f95k{*Gw{t`3EjareH=ziV>8Hjw9U(FqFf%o-zOY+C{Hr-eUdQ3zP(SMNQ3@x z03n2xajx+DuSD*ESV~5Iz|PGbj^h|t#QFePhP|uT>w5VgwcG90d$v5yuk0@%@0pRu Vs}j4>O8@`>07*qoM6N<$0fMp##&G}u diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.heu233.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.heu233.png index 8961cc6363c24c7cb1b732a113ee6778464de80b..2e20c783894f24570a5e67449e7ad76a370fd380 100644 GIT binary patch delta 427 zcmV;c0aX661F{1liBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde`!fX zK~y-6rIS5w0x=LqpG|(Ggb0?9Ris=XJslMtXW%Gw9Doy0`2vWBYtW~lpdcd2t`{$c z5D=_WBt*c1f|8M@`8<9ek3YjdLmXRBO1Ur$(ORRmrqya4tUV|;n@!j4cCps}WVu|X z-EJQ}@F(i^x+|4R4%o?THtQ;te~R0$m;1tKG@@3krNGr{6>DuuKie1lhg*ijAxbH> zXVCBW@%)?L0r`9m;YkLA0mc}NF~o69;XcP=@o@sc%af5AoClZLGcK+(oL@1VOre0O_7^f13m_V{?qj z{C%G8Ks@f6$(Wc(NBF+KQ#hT@4g=hmQ2-Di-kvp{=Me@Wk&ZB9!(?KaO=pbX(ms%z zjpEzZN-6O=3<-jeC>mo-jEybPOH8lVOFe_wbRhQrMWfMh+dk-YI*0$k_7(mTpOFE; V1*0W_3IG5A07*qoM6N<$0fIr3xLp7M delta 425 zcmV;a0apI91F-`kiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtTe`rZW zK~y-6&6B-O0znXfzdcYB#lRsF6JNldj*5J^SYS_cxty)le`?m1lkC4#j`GB`TmCSc#M>i z-5CvsL;Ujf&q0Mk9^re8MkBP=XswCknBrZY)$08OkY6C9h;eio!`e@#zyYQl1{ zOb6LV>{bD^j)_!s5ImdBQ$bk(@vwj4uTKi!_X&fLNJZ$W=IzZepUs)Ry6@<#Bd}Wq zkWz}5aYzt^M9~zjV@zy_o?`}sfpcwQ3lffh*J`!w?j7}dz2pCEx0_$dUqC(qE854i TDfK}300000NkvXXu0mjf$OXnQ diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.heu235.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.heu235.png index c80a207b0fafb1e1332017dd76ede97d9c56aa55..7b398f44bfb56fd94b4d5c79b0aeb6c46082e921 100644 GIT binary patch delta 414 zcmV;P0b%~51EvEZiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde_csL zK~y-6rIS5w0x=LqpBIuy2@xz16e-7`qoU&s9EFYpZ~`h{0MT#_Za_gnM8d8YFXmrl zogx8|-9-& ziw~Zx)oR&lwQ7MMp3CKIykVm)<)@v5MXV@Av&^Ph}z-@ezHnKkV_mWciRX1wGf7beL?`n=1f1 zBv3&jak*Tj0SI*FnGEPv3*{FZ{(m0ZX2@6<@Bx?*IS*07*qo IM6N<$g0`QqcK`qY delta 411 zcmV;M0c8HB1ET{WiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtTe_BaI zK~y-6&67KB!axu}pKX#z2@x0wij-r}QPFV*jzY%)I04mO0MT#_Za_gnM1s9$&GHv` zQxSn!qoAb7NYl*hyxIA|e-r1LQwU+gFhoj;l#))Tllnf@(Qda*zu!k|{jJq%m2S6t zHTjt|n@v-xR19#Y*=*L-YBghve{pTb$z(#K(YUbJ>vgo&*5nzRvHVtKJRT#2;Iv1> z;Sj(4{Buw~pTqH8Mxzl*DU?#gaZKSg$9B890p#cLTo2>JLpHWUKXTGP0dtlalm@Dz5%3S zA{kxS7mH;o$XeR;UE=#bVGt6@2sKm8=bGhW$!u!hBNxDcIVykv z$C~IPW-u67$L1VCj^*xJt(H06qh7Cf{mxE*^DFra$QQY}zX$mFAJ_l@002ovPDHLk FV1iS-zX$*T diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.mea.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.mea.png index 90305870db415327424c5da962d9fd6be9cbed1f..cb92ca0747ed46de93a37e31179be900261cd1b1 100644 GIT binary patch delta 430 zcmV;f0a5<11GNJoiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde{4xa zK~y-6rIWF48bJ_-zr8b&oFJo%Eq95OXP~2^qjS%r@D3EzRQm!n5jAhX8xR{MNJ#N5 zyUX64;o!Wkf^6;(wldN*|NisMXm%I=GsLL_DW#9&7^M_SDTc#grMFV-_xpZ49^;%l zWUJL;G#Z_3c!*xF=bO!@2i|18e_r?PcH1BOgJWU2T+;1!OW;nYgLAH=UmOcRJ~vn_ z7Dy?1y@T0o#<$uf({q5R(I5&#=JPqm7>qGkYx(}^3%epbKf%|l2BKCY5}@}2oqJ5~ z*^3R^(grF305?&D4+8=Z6a{|2Cl5llY4$zP6c<17ht=F6#6xC@jOMS3QChQFTWsQRS;n7T84&y{yh8{8 zDW$kiG>=N5j7D3FO%i_RDbwk+^ppdD*HZut1_SZSt+-D#51D2Dv}Q7yRR4qH;*Z7) YDQ3f3MD!Yr00000NkvXX1g=70g4IyM#Q*>R delta 423 zcmV;Y0a*UE1Fr)iiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtTe`ZNU zK~y-6&6B}y8Zi)tKktT0O;FIbQE!QqXW+((8@Jwh6mC2KPr%79fRHL)gEv44YLSqV zb!^A%78W+{DHRc3M3f#n(p>(T`DQ$};eRu6EGVV)X_}&xLMg>?IIPUC3=9SXKbcH$ z&i(aPtHo$EI@BxnT3Nka&CE zV6j*rrDT6cv)PR6+GnPxf|5pqB#xQS=NMx!#$c`G=F?$h{BB1P#cZww6@u1Ks5r*(N+y@M!nBB{7-@m7=uf>Dgje4wvWr+J-?9zz@8CbpR=) zxLau+l|mVfwidfu@w3R7PN%^yB3?n?5eEtVe&6rEqw#or{GaVl^C9~ekUz7B%YO_A Rpwa*U002ovPDHLkV1hbX!T|sP diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.men.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.men.png index c21db4157bc81194a7980fa73e2cfd885b0d35c4..c7d9463dbea0feec5d8696002c411ec01ec65ceb 100644 GIT binary patch delta 418 zcmV;T0bTyB1F8cdiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde_=^P zK~y-6rIWvo+CUJ8Kd*g>k`NGgc@sJ+I=bt56yAY?n#wOgbE4)AcmoOwBpR>1>ow~? z`0NySL3b>OL>XzC-~Q&C(P$R_GrU_5VHmbi6d|QVO37lexaz$s&StZAwOV0}Ip=UV zWVu}4Yvi#k&u+IvDTPuBtu4A9R$QMb$^x6)t3GEdsZMV(cq#JYK0xb~ zBu*ToJzC15boAhb_Iw=Ac%F@OR9_(@NfIZdIwdn1xy`AM?h?hH!e=}WAPhqe-4L3>zeUh;(otpJRX10N23v1Yo~eW5`W(RV7J>L zgy8LsHk%FMFQ>N~)a!K#{DAFti&6@u6lt3B?KY$-zF!aO_PX4JH+c9oK~3#fR1{FP zw6xcQ0PgPZ2>bv`%TxQr@mS-BJ_mF7HxR(X?}ryibEK?FOkvLUIxm-{d)e86vM8?y zrD;YICm(ckFjQrAJ;=lbDpANtlEevFnvv_A!W1+I_pyC|KUn)W0fZ1b%L P00000NkvXXu0mjfWE#IA diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.mep.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.mep.png index 1d1334635620d17b9f7a97f35fde08d0709662ab..9feec8b65c71ccd27eef0ae42e45aa509b5eaf5a 100644 GIT binary patch delta 402 zcmV;D0d4-C1DXRNiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde^E(9 zK~y-6rIRsk!axv3-`d6m$pmp0Ix0HOfN~P5h@OI)Y8y&AYHq*{C@7F`)aJ-+Yb`##g@wA5QFj>ltJEEa@e_{?s%%X~h6 zdEqmL!=ZFK9RYr&=XuiW^(61NfAYd^w_`9E6u|v{pD+vyx|0`fmayG!(OUC!2J7{j zL=_q+0=#CEL}hF?8-gGp2m*{TBua4W^=g2c<8W0OiORTHLZXDXMuSu;bO7+)YGK

;Yx84tw-T(^u5+vYvqbXkOR1)SglqCf(7ui w3xLUFqUvJdibX9`xT07tm*xK;U;Nkj0+FG-SrvkBhX4Qo07*qoM6N<$f*d@xM*si- delta 406 zcmV;H0crl41D*pRiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtTe^p6D zK~y-6&62xr!axv3&)PhK#6x@w9TgqlfcOboDwLjrn#xT|I%>Xzf&z&Ki(L%Z80<-r z1c6v1IZBZ$ZF6V#%xLezf0KGu^gK_t+bzED!11i|gJ+ihmE z*~{S%8V-ljYPAG-IMr%ZI-QQ#f9^OobF-C=eZnsMi1lHjNn|X1B^?HrxdECFz za=9c{)`je#YOO}BQdX-KT5Gh{7-NW)P%4-6fr^C!XO$AGl#3(8N_eYONF>Kb0QE)# z*L4vQk~Ag0Tv4ve@pQ@u0%$gyBuT>MdL=r?gi(~)YfbHtkqkh5KIa4NY>j#HqcF?| zDyE9PG3<6b_Qr4s0#3&xQ5aGZ`^Q!Q{Smh)KHk5)!C)YjW*ze#z1D_M?^!GsR+4iM z_<;aSCKFW_hmtrHQ${C!oc=eRm^e7ytkO07*qoM6N<$f(VVW AMgRZ+ diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.meu.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.meu.png index ca1e8e89e9696083d76ebb4883d6b46e35b135ef..eaf2ddeecebc09e63746b2e4db4243d144dc5b3d 100644 GIT binary patch delta 427 zcmV;c0aX5`1F{1liBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde`!fX zK~y-6rIWF4A~6t#KO62MU5LU07e&fr&{5IRrRPz22MTH`zW~jNnm6DLD3ER=64u`J z#t;G`>r{slc2S6Kq-lQ7d^4IE!+)AM^`MmUT5F6k7-JX?hlR0)V!z+_wdS;7Z!Q7QBDvc!*HlHGoX zEahjI0|3sXM?*^IAc+1|{?RP{`zI`aze}YZyDJGkj z%^3ij5}P;|xLU0X0p&mV!*Sdr#PY!q1OYnI#3sfjmgi^3dbK85=I=oMOT0%20Hu_8 z3N=xriQ@!oQ(WqZA5*5&X>JV?;A0m6gTX*N{*8DFHOmKsUL;H=lj47HocvvT2l{=x V?Wq&PIRF3v07*qoM6N<$0fN|yz7YTb delta 414 zcmV;P0b%~K1EvEZiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtTe_csL zK~y-6&67P&0znjjzgRxB&$P24#1aS%&|> zjui&NERks8OJ4JSzBlh@;J=A;$ti>|K@cFNL`q4!-A;^8bhKJ6)9dxnT7PS$QlZo7 zTr7SfjYh+i%Vh(cXeN^})oRt)e{x)#aXcPVuh-A)wOS3WwY7NKW-PrF7>z~<4!CfZJ?L&&2dzbBQi<`2~ z+6n^57xK7{i{pSXF}rxjX0v9sT3!bNC_WX5P0T*tv)yg+eS2Gwur)PRbcqS8dc?5nyC_~g#F`H=?^99q1{f=CKH;g$bfDpp@90mA(Kp0L@ zDndt^@FSw%?_1aA96+x)X93M-(;VMXx7)q^&yHX7EBOn^7r(E>Gu-lRN&o-=07*qo IM6N<$f(sq96aWAK diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel.mox.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel.mox.png index 59d0a64a2fb0be0f2c930c34f446911e60fd6e59..056578a18d1a33fd123a5c44c882b9af0e01faa8 100644 GIT binary patch delta 399 zcmV;A0dW4F1D*pRiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZykf2ET> zZUQk7MxPf#h=K?SN1>ylqoe02+<}6c$`_!CsJQ_*prAma!QlO2*So+vMI=Jji;^fK zP4oHloAHbc{|s^OKuT$MyB$g?lu}Hm(^7A#I3ADfd_E@(!)tcCU1qb{-GbK`jYhW9 z=~&=fHX04v>-B8W?-hmZcFS-$e{{h8exEQ59lcr<>dhxMn+;M*ZfCGst$28@{S0Wn zH1UMTdc8(#jn*39_o+1=xftgK<$!9XiU3TWQqNP8JcZ1|mW~*vQ zgfKyZK4|tzp%0qC4~W8uB#t>9v+@oG2r)ni04b#~LBd|`zW`B07NsngOJ@%rz-<=* tlgUIReu4=;GYbui#iINl6fgfZJ^&$%#vpC75xf8Z002ovPDHLkV1ix~s$Bp8 delta 399 zcmV;A0dW4F1D*pRiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtaf6bFS zZo)tihCdrZh++{EjzUL8M@P?5xB~?>)n0%mqUHwNfPw;vhK2P5du_m*A_@VqMnOrD zk^W{L-^|Wv;lG)4D=368>-8EbB~nU8qfudgVPG&An8{>97=|acS}n%o@y+HJ*6;UC zv)MGjg*?wQ?RMMPYFwLhwOY~ZfAy~Xolb`^46V(}HfOc=#B#Yr2*LS|=JPoZ&y}Bp zYA-ch$7Qitpp-%>h41@Ryho1O`m$nBxm3mhbe>YpQ<6M|%*7O}+6n@wzt$f=-dzR<`3}JO$g=>hy=2?JkP`TeSF`i)9IvUQ_Xg} zo%H*Cq?Ailt5v$)?#718YBrmRf8#g_@I$t3C$(BFSr-_04n==N@w@H49WySKoA6kVaUaq+uCd<)0PK}4ayyV$S#ontPGwL9P%8c%0H9d5i07cca;4@vHD|oS zEKCmqd`j~K24Ff_AX6Y8QOwLUeFN~+JH{U?qCg`<%`DWsN1Di6;9gg@1B4Kn=etuT zV}(CfOeYJ1iRSU<0M~VmQQkP)tyU{por7MlxBVadrM>`-PO(##v)G3K0000f=-dbJ<_GZBO$g=-hy0ylNEAgJUc8Wc))70%^&Ff6 z6pwF+wIP}(D4jqtkKVR&>>z+0&mp%3d7ULUGvsszT>!0<-+=&%C5L1NbmmKXW>)rE zUu_z#9{5o96Inr%@f>A=y~hdDz;0p%J$8?fBTXC{RAiV&hPT)d2Xp+Z-OWKlh|JUN z3FDDQjx>|;oN#P-xZcP2ed~&>-J52!nJ)gLZnwMnp8a`z0(ii&Q%dwWaR2}S07*qo IM6N<$f^EUK3jhEB diff --git a/src/main/resources/assets/hbm/textures/items/pwr_fuel_depleted.png b/src/main/resources/assets/hbm/textures/items/pwr_fuel_depleted.png index cb2b2d545e76b30c2713def15febd44e906d9498..34fd113b5c9a3df8084ddab419e664c7d974c755 100644 GIT binary patch delta 361 zcmV-v0ha#t0`USNiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyde<(>r zK~y-6rIRs^gD@0CC$K<@AklIRL`Q+>I0HvX#{oD2l`jybAs3)WT!7vUNFbWn*m9~x zNdSR%NBYh9&$DcQ1OL=%Yk?4=+O|d4b?CYdd7iKKu9{hvsiG(_j^kWG5a4#ZZEiU0 zdc7*&_Z5JTx?CpFxGt6^Z}6&Pb%Oia_X58#}yLOAEg0G{W8F^1>!KMBSd7-MtT zw(WfYA>;YXNr4%c;2Rn=mYH)lIdQ}sRv_xpYSAN)lxUx~C`@v4_<00000NkvXX Hu0mjfg6o*) delta 365 zcmV-z0h0dl0`&qRiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtTe=JEv zK~y-6&66>XgD?<9e_(+WL88quqI4-xx}1Td(B%M}AeAqG(!d4iQ7(|)O)NR0!NwzR zwJ2y!M5^79e)GrkMw;;e|1DPUl8iC?cswA4fDi(g%VqZcY@#R%TU8aht{ZhY98i|! z+vbzV^W5(DdkbKq&1Ped$D?)Ce|RpFbB-*_e)*@<30>DYn}4~?+wF!VNx&Gx>x}OA z`)8mq4AC?Vk|cqY5>iS$pHFbk5d^_G3GN60Ib(*7-Qi3K8!K55MX9&N~zg`VHlQ!wAN0T*7`HhZnuL{LkfN0Ln#HN z)Ch^=csYnMwo21<0?}GyyWOH~Tjz2f2h_1g2>(lqLWPX@60#ZoqyqTky zf&G=naU53Ppx5j1bUozaWdp!ULpAZr!)F>PB~nT}f6wFb%Ej6@uWSG~KEX-^+$Nsk zJb+*Zv)Q~kcCZBiAeF&7^kE7Fi;NwC?{5hJNS#4^3VS}p{m^Cz*#gRoWHK=!2B0s2 z(a>xjPw1OlGy!*SmkWrPgOmqjMSlc0os0npwPvMK(beob1V39ScTVYcyGDJax9jz~ jUiCq%8`awU5B?J01|5|b_tq&h00000NkvXXu0mjfthSJQ delta 340 zcmV-a0jvIw1CawEiBL{Q4GJ0x0000DNk~Le0000I0000I2nGNE09MY9SCJtT2uMjp zK~y-6&5=Agf38{!h(g#SQ0XMo{Im1TWM>Bco9(O%I*y|Ug8@Pagb*|ujmYryI}R`g=Ah*HW}JZ=*2 zvme-BX&lF4@sE1F9#7XpE?zbSS!t*yUU~RTBc()2e~IULJYKn2`^JXMAdXM45&^e~ zXE+Za2q6q-kl4W%Ab?Z`>(GZO5X?Px1irr|2q1L^@hR;25ceY?5HU5B7Y(17VMb72 z0;Az-U_7C3p1v7$_jWmli5XCNFjn+OaMQ^cL6PfTsZ?||`wqeH)XJSxy4|iZXYJk8 m>vg@j9!ITKYx6t%bNdE>M3one@JB!Z0000 Date: Tue, 26 Aug 2025 14:18:07 -0600 Subject: [PATCH 489/491] https://imgur.com/a/IBLwDde --- .../recipes/loader/GenericRecipe.java | 12 +- .../java/com/hbm/items/bomb/ItemFleija.java | 4 +- src/main/java/com/hbm/items/bomb/ItemN2.java | 4 +- .../java/com/hbm/items/bomb/ItemSolinium.java | 4 +- .../java/com/hbm/items/food/ItemLemon.java | 34 ++- .../com/hbm/items/machine/ItemSatChip.java | 9 +- .../com/hbm/items/special/ItemHotDusted.java | 6 +- .../java/com/hbm/items/special/ItemRag.java | 9 +- .../hbm/items/tool/ItemSwordMeteorite.java | 96 ++++--- .../items/weapon/ItemCustomMissilePart.java | 88 +++--- .../com/hbm/items/weapon/ItemMissile.java | 18 +- src/main/resources/assets/hbm/lang/en_US.lang | 261 ++++++++--------- src/main/resources/assets/hbm/lang/ru_RU.lang | 266 ++++++++---------- 13 files changed, 387 insertions(+), 424 deletions(-) diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 2c53d35dd..53a0bb7a2 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -118,9 +118,8 @@ public class GenericRecipe { // autoswitch group (two lines: label + "Enabled for") if(this.autoSwitchGroup != null) { - String groupNameLocalized = I18nUtil.resolveKey(this.autoSwitchGroup); - list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("gui.recipe.autoswitch") + ": " + groupNameLocalized); - list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("gui.recipe.enabledFor") + " " + groupNameLocalized); + String[] lines = I18nUtil.resolveKeyArray("autoswitch", I18nUtil.resolveKey(this.autoSwitchGroup)); + for(String line : lines) list.add(EnumChatFormatting.GOLD + line); } // duration (seconds) @@ -140,12 +139,7 @@ public class GenericRecipe { ItemStack display = stack.extractForCyclingDisplay(20); list.add(" " + EnumChatFormatting.GRAY + display.stackSize + "x " + display.getDisplayName()); } - if(inputFluid != null) for(FluidStack fluid : inputFluid) { - String mB = I18nUtil.resolveKey("gui.recipe.mB"); - String pressurePart = fluid.pressure == 0 ? "" : - " " + I18nUtil.resolveKey("gui.recipe.atPressure") + " " + EnumChatFormatting.RED + fluid.pressure + " PU"; - list.add(" " + EnumChatFormatting.BLUE + fluid.fill + mB + " " + fluid.type.getLocalizedName() + pressurePart); - } + if (inputFluid != null) for (FluidStack fluid : inputFluid) list.add(" " + EnumChatFormatting.BLUE + fluid.fill + "mB " + fluid.type.getLocalizedName() + (fluid.pressure == 0 ? "" : " " + I18nUtil.resolveKey("gui.recipe.atPressure") + " " + EnumChatFormatting.RED + fluid.pressure + " PU")); // output label + items list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("gui.recipe.output") + ":"); diff --git a/src/main/java/com/hbm/items/bomb/ItemFleija.java b/src/main/java/com/hbm/items/bomb/ItemFleija.java index 623b12d9b..06b8c0d68 100644 --- a/src/main/java/com/hbm/items/bomb/ItemFleija.java +++ b/src/main/java/com/hbm/items/bomb/ItemFleija.java @@ -2,8 +2,10 @@ package com.hbm.items.bomb; import java.util.List; +import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; import com.hbm.util.i18n.I18nUtil; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -14,7 +16,7 @@ public class ItemFleija extends Item { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { list.add(I18nUtil.resolveKey("item.bomb_part.used_in")); - list.add(I18nUtil.resolveKey("item.fleija.name")); + list.add(ModBlocks.nuke_fleija.getLocalizedName()); super.addInformation(itemstack, player, list, bool); } diff --git a/src/main/java/com/hbm/items/bomb/ItemN2.java b/src/main/java/com/hbm/items/bomb/ItemN2.java index feffaf6bf..da909b8d3 100644 --- a/src/main/java/com/hbm/items/bomb/ItemN2.java +++ b/src/main/java/com/hbm/items/bomb/ItemN2.java @@ -2,7 +2,9 @@ package com.hbm.items.bomb; import java.util.List; +import com.hbm.blocks.ModBlocks; import com.hbm.util.i18n.I18nUtil; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -12,6 +14,6 @@ public class ItemN2 extends Item { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { list.add(I18nUtil.resolveKey("item.bomb_part.used_in")); - list.add(I18nUtil.resolveKey("item.n2.mine")); + list.add(ModBlocks.nuke_n2.getLocalizedName()); } } diff --git a/src/main/java/com/hbm/items/bomb/ItemSolinium.java b/src/main/java/com/hbm/items/bomb/ItemSolinium.java index f921d49e5..9951a7111 100644 --- a/src/main/java/com/hbm/items/bomb/ItemSolinium.java +++ b/src/main/java/com/hbm/items/bomb/ItemSolinium.java @@ -2,7 +2,9 @@ package com.hbm.items.bomb; import java.util.List; +import com.hbm.blocks.ModBlocks; import com.hbm.util.i18n.I18nUtil; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -12,7 +14,7 @@ public class ItemSolinium extends Item { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { list.add(I18nUtil.resolveKey("item.bomb_part.used_in")); - list.add(I18nUtil.resolveKey("item.solinium.name")); + list.add(ModBlocks.nuke_solinium.getLocalizedName() + " name"); super.addInformation(itemstack, player, list, bool); } } diff --git a/src/main/java/com/hbm/items/food/ItemLemon.java b/src/main/java/com/hbm/items/food/ItemLemon.java index 482cb37bc..2d211ff2f 100644 --- a/src/main/java/com/hbm/items/food/ItemLemon.java +++ b/src/main/java/com/hbm/items/food/ItemLemon.java @@ -35,20 +35,24 @@ public class ItemLemon extends ItemFood { } if(this == ModItems.med_ipecac) { - list.add(I18nUtil.resolveKey("item.med_ipecac.desc.1")); - list.add(I18nUtil.resolveKey("item.med_ipecac.desc.2")); + String[] lines = I18nUtil.resolveKeyArray("item.med_ipecac.desc"); + for (String line : lines) { + list.add(line); + } } if(this == ModItems.med_ptsd) { - list.add(I18nUtil.resolveKey("item.med_ptsd.desc.1")); - list.add(I18nUtil.resolveKey("item.med_ptsd.desc.2")); + String[] lines = I18nUtil.resolveKeyArray("item.med_ptsd.desc"); + for (String line : lines) { + list.add(line); + } } if(this == ModItems.med_schizophrenia) { - list.add(I18nUtil.resolveKey("item.med_schizophrenia.desc.1")); - list.add(""); - list.add(I18nUtil.resolveKey("item.med_schizophrenia.desc.2")); - list.add(I18nUtil.resolveKey("item.med_schizophrenia.desc.3")); + String[] lines = I18nUtil.resolveKeyArray("item.med_schizophrenia.desc"); + for (String line : lines) { + list.add(line); + } } if(this == ModItems.loops) { @@ -64,15 +68,17 @@ public class ItemLemon extends ItemFood { } if(this == ModItems.pudding) { - list.add(I18nUtil.resolveKey("item.pudding.desc.1")); - list.add(I18nUtil.resolveKey("item.pudding.desc.2")); - list.add(I18nUtil.resolveKey("item.pudding.desc.3")); + String[] lines = I18nUtil.resolveKeyArray("item.pudding.desc"); + for (String line : lines) { + list.add(line); + } } if(this == ModItems.ingot_semtex) { - list.add(I18nUtil.resolveKey("item.ingot_semtex.desc.1")); - list.add(I18nUtil.resolveKey("item.ingot_semtex.desc.2")); - list.add(I18nUtil.resolveKey("item.ingot_semtex.desc.3")); + String[] lines = I18nUtil.resolveKeyArray("item.ingot_semtex.desc"); + for (String line : lines) { + list.add(line); + } } if(this == ModItems.peas) { diff --git a/src/main/java/com/hbm/items/machine/ItemSatChip.java b/src/main/java/com/hbm/items/machine/ItemSatChip.java index 5f66e57a1..164c6540c 100644 --- a/src/main/java/com/hbm/items/machine/ItemSatChip.java +++ b/src/main/java/com/hbm/items/machine/ItemSatChip.java @@ -20,10 +20,11 @@ public class ItemSatChip extends Item implements ISatChip { if(this == ModItems.sat_foeq) list.add(I18nUtil.resolveKey("satchip.foeq")); - if(this == ModItems.sat_gerald) { - list.add(I18nUtil.resolveKey("satchip.gerald.line1")); - list.add(I18nUtil.resolveKey("satchip.gerald.line2")); - list.add(I18nUtil.resolveKey("satchip.gerald.line3")); + if (this == ModItems.sat_gerald) { + String[] lines = I18nUtil.resolveKeyArray("satchip.gerald.desc"); + for (String line : lines) { + list.add(line); + } } if(this == ModItems.sat_laser) diff --git a/src/main/java/com/hbm/items/special/ItemHotDusted.java b/src/main/java/com/hbm/items/special/ItemHotDusted.java index 7ddecbbbd..0c9f3f86d 100644 --- a/src/main/java/com/hbm/items/special/ItemHotDusted.java +++ b/src/main/java/com/hbm/items/special/ItemHotDusted.java @@ -1,8 +1,11 @@ package com.hbm.items.special; import com.hbm.util.i18n.I18nUtil; + import java.util.List; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; + public class ItemHotDusted extends ItemHot { public ItemHotDusted(int heat) { super(heat); @@ -11,8 +14,7 @@ public class ItemHotDusted extends ItemHot { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - list.add(I18nUtil.resolveKey("item.hot_dusted.forged") + " " + stack.getItemDamage() + " " + - I18nUtil.resolveKey("item.hot_dusted.times")); + list.add(String.format(I18nUtil.resolveKey("item.hot_dusted.forged"), stack.getItemDamage())); } public static int getMaxHeat(ItemStack stack) { diff --git a/src/main/java/com/hbm/items/special/ItemRag.java b/src/main/java/com/hbm/items/special/ItemRag.java index ad53fd20d..44e606e57 100644 --- a/src/main/java/com/hbm/items/special/ItemRag.java +++ b/src/main/java/com/hbm/items/special/ItemRag.java @@ -19,7 +19,8 @@ public class ItemRag extends Item { if(entityItem != null && !entityItem.worldObj.isRemote) { - if(entityItem.worldObj.getBlock((int)Math.floor(entityItem.posX), (int)Math.floor(entityItem.posY), (int)Math.floor(entityItem.posZ)).getMaterial() == Material.water) { + if (entityItem.worldObj.getBlock((int) Math.floor(entityItem.posX), (int) Math.floor(entityItem.posY), + (int) Math.floor(entityItem.posZ)).getMaterial() == Material.water) { ItemStack stack = entityItem.getEntityItem(); entityItem.setEntityItemStack(new ItemStack(ModItems.rag_damp, stack.stackSize)); return true; @@ -37,7 +38,9 @@ public class ItemRag extends Item { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - list.add(I18nUtil.resolveKey("item.rag.desc.1")); - list.add(I18nUtil.resolveKey("item.rag.desc.2")); + String[] lines = I18nUtil.resolveKeyArray("item.rag.desc"); + for (String line : lines) { + list.add(line); + } } } diff --git a/src/main/java/com/hbm/items/tool/ItemSwordMeteorite.java b/src/main/java/com/hbm/items/tool/ItemSwordMeteorite.java index 933db145a..eda062796 100644 --- a/src/main/java/com/hbm/items/tool/ItemSwordMeteorite.java +++ b/src/main/java/com/hbm/items/tool/ItemSwordMeteorite.java @@ -26,64 +26,88 @@ public class ItemSwordMeteorite extends ItemSwordAbility { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { super.addInformation(stack, player, list, ext); - if(this == ModItems.meteorite_sword) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.desc2")); + if (this == ModItems.meteorite_sword) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_seared) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.seared.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.seared.desc2")); + if (this == ModItems.meteorite_sword_seared) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.seared.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_reforged) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.reforged.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.reforged.desc2")); + if (this == ModItems.meteorite_sword_reforged) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.reforged.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_hardened) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.hardened.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.hardened.desc2")); + if (this == ModItems.meteorite_sword_hardened) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.hardened.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_alloyed) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.alloyed.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.alloyed.desc2")); + if (this == ModItems.meteorite_sword_alloyed) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.alloyed.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_machined) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.machined.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.machined.desc2")); + if (this == ModItems.meteorite_sword_machined) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.machined.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_treated) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.treated.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.treated.desc2")); + if (this == ModItems.meteorite_sword_treated) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.treated.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_etched) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.etched.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.etched.desc2")); + if (this == ModItems.meteorite_sword_etched) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.etched.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_bred) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.bred.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.bred.desc2")); + if (this == ModItems.meteorite_sword_bred) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.bred.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_irradiated) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.irradiated.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.irradiated.desc2")); + if (this == ModItems.meteorite_sword_irradiated) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.irradiated.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_fused) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.fused.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.fused.desc2")); + if (this == ModItems.meteorite_sword_fused) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.fused.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } - if(this == ModItems.meteorite_sword_baleful) { - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.baleful.desc1")); - list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey("item.meteorite_sword.baleful.desc2")); + if (this == ModItems.meteorite_sword_baleful) { + String[] lines = I18nUtil.resolveKeyArray("item.meteorite_sword.baleful.desc"); + for (String line : lines) { + list.add(EnumChatFormatting.ITALIC + line); + } } /* diff --git a/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java b/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java index 0318b3875..29b391eaf 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java +++ b/src/main/java/com/hbm/items/weapon/ItemCustomMissilePart.java @@ -91,7 +91,7 @@ public class ItemCustomMissilePart extends Item { CLOUD, TURBINE, - //dummy/custom types + //shit solution but it works. this allows traits to be attached to these empty dummy types, allowing for custom warheads CUSTOM0, CUSTOM1, CUSTOM2, CUSTOM3, CUSTOM4, CUSTOM5, CUSTOM6, CUSTOM7, CUSTOM8, CUSTOM9; /** Overrides that type's impact effect. Only runs serverside */ @@ -113,12 +113,12 @@ public class ItemCustomMissilePart extends Item { public enum Rarity { - COMMON("part.rarity.common", EnumChatFormatting.GRAY), - UNCOMMON("part.rarity.uncommon", EnumChatFormatting.YELLOW), - RARE("part.rarity.rare", EnumChatFormatting.AQUA), - EPIC("part.rarity.epic", EnumChatFormatting.LIGHT_PURPLE), - LEGENDARY("part.rarity.legendary", EnumChatFormatting.DARK_GREEN), - SEWS_CLOTHES_AND_SUCKS_HORSE_COCK("part.rarity.strange", EnumChatFormatting.DARK_AQUA); + COMMON("item.missile.part.rarity.common", EnumChatFormatting.GRAY), + UNCOMMON("item.missile.part.rarity.uncommon", EnumChatFormatting.YELLOW), + RARE("item.missile.part.rarity.rare", EnumChatFormatting.AQUA), + EPIC("item.missile.part.rarity.epic", EnumChatFormatting.LIGHT_PURPLE), + LEGENDARY("item.missile.part.rarity.legendary", EnumChatFormatting.DARK_GREEN), + SEWS_CLOTHES_AND_SUCKS_HORSE_COCK("item.missile.part.rarity.strange", EnumChatFormatting.DARK_AQUA); private final String key; private final EnumChatFormatting color; @@ -207,29 +207,29 @@ public class ItemCustomMissilePart extends Item { try { switch(type) { case CHIP: - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.inaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.inaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); break; case WARHEAD: - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.size") + ": " + EnumChatFormatting.GRAY + getSize(bottom)); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.type") + ": " + EnumChatFormatting.GRAY + getWarhead((WarheadType)attributes[0])); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.strength") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1]); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.weight") + ": " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.size") + ": " + EnumChatFormatting.GRAY + getSize(bottom)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.type") + ": " + EnumChatFormatting.GRAY + getWarhead((WarheadType)attributes[0])); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.strength") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1]); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.weight") + ": " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); break; case FUSELAGE: - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.topSize") + ": " + EnumChatFormatting.GRAY + getSize(top)); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.bottomSize") + ": " + EnumChatFormatting.GRAY + getSize(bottom)); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.fuelType") + ": " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.fuelAmount") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.topSize") + ": " + EnumChatFormatting.GRAY + getSize(top)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.bottomSize") + ": " + EnumChatFormatting.GRAY + getSize(bottom)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.fuelType") + ": " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.fuelAmount") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l"); break; case FINS: - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.size") + ": " + EnumChatFormatting.GRAY + getSize(top)); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.inaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.size") + ": " + EnumChatFormatting.GRAY + getSize(top)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.inaccuracy") + ": " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); break; case THRUSTER: - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.size") + ": " + EnumChatFormatting.GRAY + getSize(top)); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.fuelType") + ": " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.fuelConsumption") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l/tick"); - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.maxPayload") + ": " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.size") + ": " + EnumChatFormatting.GRAY + getSize(top)); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.fuelType") + ": " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.fuelConsumption") + ": " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l/tick"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.maxPayload") + ": " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); break; } } catch(Exception ex) { @@ -237,12 +237,12 @@ public class ItemCustomMissilePart extends Item { } if(type != PartType.CHIP) - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.health") + ": " + EnumChatFormatting.GRAY + health + "HP"); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.health") + ": " + EnumChatFormatting.GRAY + health + "HP"); if(this.rarity != null) - list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("part.rarity") + ": " + EnumChatFormatting.GRAY + this.rarity.getDisplay()); + list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("item.missile.part.rarity") + ": " + EnumChatFormatting.GRAY + this.rarity.getDisplay()); if(author != null) - list.add(EnumChatFormatting.WHITE + " " + I18nUtil.resolveKey("part.by") + " " + author); + list.add(EnumChatFormatting.WHITE + " " + I18nUtil.resolveKey("item.missile.part.by") + " " + author); if(witty != null) list.add(EnumChatFormatting.GOLD + " " + EnumChatFormatting.ITALIC + "\"" + witty + "\""); } @@ -251,7 +251,7 @@ public class ItemCustomMissilePart extends Item { switch(size) { case ANY: - return I18nUtil.resolveKey("part.size.any"); + return I18nUtil.resolveKey("item.missile.part.size.any"); case SIZE_10: return "1.0m"; case SIZE_15: @@ -259,7 +259,7 @@ public class ItemCustomMissilePart extends Item { case SIZE_20: return "2.0m"; default: - return I18nUtil.resolveKey("part.size.none"); + return I18nUtil.resolveKey("item.missile.part.size.none"); } } @@ -269,29 +269,29 @@ public class ItemCustomMissilePart extends Item { switch(type) { case HE: - return EnumChatFormatting.YELLOW + I18nUtil.resolveKey("warhead.he"); + return EnumChatFormatting.YELLOW + I18nUtil.resolveKey("item.warhead.desc.he"); case INC: - return EnumChatFormatting.GOLD + I18nUtil.resolveKey("warhead.incendiary"); + return EnumChatFormatting.GOLD + I18nUtil.resolveKey("item.warhead.desc.incendiary"); case CLUSTER: - return EnumChatFormatting.GRAY + I18nUtil.resolveKey("warhead.cluster"); + return EnumChatFormatting.GRAY + I18nUtil.resolveKey("item.warhead.desc.cluster"); case BUSTER: - return EnumChatFormatting.WHITE + I18nUtil.resolveKey("warhead.bunker_buster"); + return EnumChatFormatting.WHITE + I18nUtil.resolveKey("item.warhead.desc.bunker_buster"); case NUCLEAR: - return EnumChatFormatting.DARK_GREEN + I18nUtil.resolveKey("warhead.nuclear"); + return EnumChatFormatting.DARK_GREEN + I18nUtil.resolveKey("item.warhead.desc.nuclear"); case TX: - return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("warhead.thermonuclear"); + return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("item.warhead.desc.thermonuclear"); case N2: - return EnumChatFormatting.RED + I18nUtil.resolveKey("warhead.n2"); + return EnumChatFormatting.RED + I18nUtil.resolveKey("item.warhead.desc.n2"); case BALEFIRE: - return EnumChatFormatting.GREEN + I18nUtil.resolveKey("warhead.balefire"); + return EnumChatFormatting.GREEN + I18nUtil.resolveKey("item.warhead.desc.balefire"); case SCHRAB: - return EnumChatFormatting.AQUA + I18nUtil.resolveKey("warhead.schrabidium"); + return EnumChatFormatting.AQUA + I18nUtil.resolveKey("item.warhead.desc.schrabidium"); case TAINT: - return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("warhead.taint"); + return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("item.warhead.desc.taint"); case CLOUD: - return EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("warhead.cloud"); + return EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("item.warhead.desc.cloud"); case TURBINE: - return (System.currentTimeMillis() % 1000 < 500 ? EnumChatFormatting.RED : EnumChatFormatting.LIGHT_PURPLE) + I18nUtil.resolveKey("warhead.turbine"); + return (System.currentTimeMillis() % 1000 < 500 ? EnumChatFormatting.RED : EnumChatFormatting.LIGHT_PURPLE) + I18nUtil.resolveKey("item.warhead.desc.turbine"); default: return EnumChatFormatting.BOLD + I18nUtil.resolveKey("general.na"); } @@ -301,15 +301,15 @@ public class ItemCustomMissilePart extends Item { switch(type) { case KEROSENE: - return EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("missile.fuel.kerosene_peroxide"); // reuse missile fuel keys + return EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("item.missile.fuel.kerosene_peroxide"); // reuse missile fuel keys case SOLID: - return EnumChatFormatting.GOLD + I18nUtil.resolveKey("missile.fuel.solid"); + return EnumChatFormatting.GOLD + I18nUtil.resolveKey("item.missile.fuel.solid"); case HYDROGEN: - return EnumChatFormatting.DARK_AQUA + I18nUtil.resolveKey("missile.fuel.ethanol_peroxide"); // closest match + return EnumChatFormatting.DARK_AQUA + I18nUtil.resolveKey("item.missile.fuel.ethanol_peroxide"); // closest match case XENON: - return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("fuel.xenon"); + return EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("item.missile.fuel.xenon"); case BALEFIRE: - return EnumChatFormatting.GREEN + I18nUtil.resolveKey("fuel.balefire"); + return EnumChatFormatting.GREEN + I18nUtil.resolveKey("item.missile.fuel.balefire"); default: return EnumChatFormatting.BOLD + I18nUtil.resolveKey("general.na"); } diff --git a/src/main/java/com/hbm/items/weapon/ItemMissile.java b/src/main/java/com/hbm/items/weapon/ItemMissile.java index e8fcd6964..dbd031944 100644 --- a/src/main/java/com/hbm/items/weapon/ItemMissile.java +++ b/src/main/java/com/hbm/items/weapon/ItemMissile.java @@ -41,15 +41,15 @@ public class ItemMissile extends ItemCustomLore { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { // Tier localized: missile.tier.tier0, missile.tier.tier1, ... - String tierKey = "missile.tier." + this.tier.name().toLowerCase(); + String tierKey = "item.missile.tier." + this.tier.name().toLowerCase(); list.add(EnumChatFormatting.ITALIC + I18nUtil.resolveKey(tierKey)); if(!this.launchable) { - list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("gui.missile.notLaunchable")); + list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("item.missile.desc.notLaunchable")); } else { // Fuel localized & colored via enum helper - list.add(I18nUtil.resolveKey("gui.missile.fuel") + ": " + this.fuel.getDisplay()); - if(this.fuelCap > 0) list.add(I18nUtil.resolveKey("gui.missile.fuelCapacity") + ": " + this.fuelCap + "mB"); + list.add(I18nUtil.resolveKey("item.missile.desc.fuel") + ": " + this.fuel.getDisplay()); + if(this.fuelCap > 0) list.add(I18nUtil.resolveKey("item.missile.desc.fuelCapacity") + ": " + this.fuelCap + "mB"); super.addInformation(itemstack, player, list, bool); } } @@ -85,11 +85,11 @@ public class ItemMissile extends ItemCustomLore { } public enum MissileFuel { - SOLID("missile.fuel.solid.prefueled", EnumChatFormatting.GOLD, 0), - ETHANOL_PEROXIDE("missile.fuel.ethanol_peroxide", EnumChatFormatting.AQUA, 4_000), - KEROSENE_PEROXIDE("missile.fuel.kerosene_peroxide", EnumChatFormatting.BLUE, 8_000), - KEROSENE_LOXY("missile.fuel.kerosene_loxy", EnumChatFormatting.LIGHT_PURPLE, 12_000), - JETFUEL_LOXY("missile.fuel.jetfuel_loxy", EnumChatFormatting.RED, 16_000); + SOLID("item.missile.fuel.solid.prefueled", EnumChatFormatting.GOLD, 0), + ETHANOL_PEROXIDE("item.missile.fuel.ethanol_peroxide", EnumChatFormatting.AQUA, 4_000), + KEROSENE_PEROXIDE("item.missile.fuel.kerosene_peroxide", EnumChatFormatting.BLUE, 8_000), + KEROSENE_LOXY("item.missile.fuel.kerosene_loxy", EnumChatFormatting.LIGHT_PURPLE, 12_000), + JETFUEL_LOXY("item.missile.fuel.jetfuel_loxy", EnumChatFormatting.RED, 16_000); private final String key; public final EnumChatFormatting color; diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e07656628..c84185573 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1057,16 +1057,6 @@ desc.gui.zirnox.pressure=§6Pressure§r$Pressure can be reduced by venting CO2.$ desc.gui.zirnox.warning1=§cError:§r Water is required for$the reactor to function properly! desc.gui.zirnox.warning2=§cError:§r CO2 is required for$the reactor to function properly! -gui.recipe.duration=Duration -gui.recipe.consumption=Consumption -gui.recipe.input=Input -gui.recipe.output=Output -gui.recipe.mB=mB -gui.recipe.atPressure=at -gui.recipe.autoswitch=Auto-switch group -gui.recipe.enabledFor=Enabled for -gui.recipe.setRecipe=Click to set recipe - desc.item.ammo.con_accuracy2=- Highly decreased accuracy desc.item.ammo.con_damage=- Highly decreased damage desc.item.ammo.con_heavy_wear=- Highly increased wear @@ -1240,6 +1230,8 @@ entity.hbm.entity_bullet.name=Bullet entity.hbm.entity_rocket.name=Rocket entity.hbm.entity_schrabnel.name=Schrabnel +error.generic=### I AM ERROR ### + excavator.crusher=Toggle Crusher excavator.drill=Toggle Drill excavator.silktouch=Toggle Silk Touch @@ -1269,6 +1261,28 @@ geiger.playerRes=Player resistance: geiger.title=GEIGER COUNTER geiger.title.dosimeter=DOSIMETER +general.na=N/A + +gui.recipe.duration=Duration +gui.recipe.consumption=Consumption +gui.recipe.input=Input +gui.recipe.output=Output +gui.recipe.atPressure=at +gui.recipe.setRecipe=Click to set recipe + +gui.weapon.ammo=Ammo +gui.weapon.baseDamage=Base Damage +gui.weapon.damageWithAmmo=Damage with current ammo +gui.weapon.condition=Condition +gui.weapon.accepts=Accepts +gui.weapon.quality.aside=Standard Arsenal +gui.weapon.quality.bside=B-Side +gui.weapon.quality.legendary=Legendary Weapon +gui.weapon.quality.special=Special Weapon +gui.weapon.quality.utility=Utility +gui.weapon.quality.secret=SECRET +gui.weapon.quality.debug=DEBUG + gun.make.ARMALITE=Armalite gun.make.AUTO_ORDINANCE=Auto-Ordnance Corporation gun.make.BAE=BAE Systems plc @@ -2203,6 +2217,7 @@ item.bolt_spike.name=Railroad Spike item.bolt_spike.desc=Radiates a threatening aura, somehow item.boltgun.name=Pneumatic Rivet Gun item.bomb_caller.name=Airstrike Designator +item.bomb_part.used_in=Used in: item.bomb_waffle.name=Waffle of Mass Destruction item.book_guide.name=Guide Book item.book_of_.name=The Book of Boxcars @@ -3005,18 +3020,6 @@ item.gun_tesla_cannon.name=Tesla Cannon item.gun_uzi.name=Uzi item.gun_uzi_richter.name=Richter item.gun_uzi_akimbo.name=Uzis -gui.weapon.ammo=Ammo -gui.weapon.baseDamage=Base Damage -gui.weapon.damageWithAmmo=Damage with current ammo -gui.weapon.condition=Condition -gui.weapon.accepts=Accepts -gui.weapon.quality.aside=Standard Arsenal -gui.weapon.quality.bside=B-Side -gui.weapon.quality.legendary=Legendary Weapon -gui.weapon.quality.special=Special Weapon -gui.weapon.quality.utility=Utility -gui.weapon.quality.secret=SECRET -gui.weapon.quality.debug=DEBUG item.hand_drill.name=Hand Drill item.hand_drill_desh.name=Desh Hand Drill item.hazmat_boots.name=Hazmat Boots @@ -3054,6 +3057,7 @@ item.hev_legs.name=HEV Mark IV Leggings item.holotape_damaged.name=Damaged Holotape item.holotape_image.name=Holotape item.horseshoe_magnet.name=Horseshoe Magnet +item.hot_dusted.forged=Forged %s time(s) item.hull_big_aluminium.name=Big Aluminium Shell item.hull_big_steel.name=Big Steel Shell item.hull_big_titanium.name=Big Titanium Shell @@ -3173,9 +3177,7 @@ item.ingot_schrabidium_fuel.name=Ingot of Schrabidium Fuel item.ingot_schraranium.name=Schraranium Ingot item.ingot_schraranium.desc=Made from uranium in a schrabidium transmutator item.ingot_semtex.name=Bar of Semtex -item.ingot_semtex.desc.1=Semtex H Plastic Explosive -item.ingot_semtex.desc.2=Performant explosive for many applications. -item.ingot_semtex.desc.3=Edible +item.ingot_semtex.desc=Semtex H Plastic Explosive$Performant explosive for many applications.$Edible item.ingot_silicon.name=Silicon Boule item.ingot_smore.name=S'more Ingot item.ingot_solinium.name=Solinium Ingot @@ -3183,8 +3185,6 @@ item.ingot_sr90.name=Strontium-90 Ingot item.ingot_starmetal.name=§9Starmetal Ingot§r item.ingot_steel.name=Steel Ingot item.ingot_steel_dusted.name=Dusted Steel Ingot -item.hot_dusted.forged=Forged -item.hot_dusted.times=time(s) item.ingot_tantalium.name=Tantalium Ingot item.ingot_tantalium.desc='Tantalum' item.ingot_tantalium.desc.P11=AKA Tantalum. @@ -3310,15 +3310,11 @@ item.mechanism_rifle_2.name=Advanced Rifle Mechanism item.mechanism_special.name=High-Tech Weapon Mechanism item.med_bag.name=First Aid Kit item.med_ipecac.name=Ipecac Syrup -item.med_ipecac.desc.1=Bitter juice that will cause your stomach -item.med_ipecac.desc.2=to forcefully eject its contents. +item.med_ipecac.desс=Bitter juice that will cause your stomach$to forcefully eject its contents. item.med_ptsd.name=PTSD Medication -item.med_ptsd.desc.1=This isn't even PTSD mediaction, it's just -item.med_ptsd.desc.2=Ipecac in a different bottle! +item.med_ptsd.desc=This isn't even PTSD medication, it's just$Ipecac in a different bottle! item.med_schiziphrenia.name=Schizophrenia Medication -item.med_schizophrenia.desc.1=Makes the voices go away. Just for a while. -item.med_schizophrenia.desc.2=... -item.med_schizophrenia.desc.3=Better not take it. +item.med_schizophrenia.desc=Makes the voices go away. Just for a while.$...$Better not take it. item.medal_liquidator.name=Liquidator Medal item.meltdown_tool.name=Dyatlov Instant Meltdown Applicator item.memespoon.name=§eMarket Gardener @@ -3329,41 +3325,29 @@ item.mese_pickaxe.name=Mese Pickaxe item.meteor_charm.name=Meteor Charm item.meteor_remote.name=Meteorite Remote item.meteorite_sword.name=Meteorite Sword -item.meteorite_sword.desc1=Forged from a fallen star -item.meteorite_sword.desc2=Sharper than most terrestrial blades +item.meteorite_sword.desc=Forged from a fallen star$Sharper than most terrestrial blades item.meteorite_sword_seared.name=Meteorite Sword (Seared) -item.meteorite_sword.seared.desc1=Fire strengthens the blade -item.meteorite_sword.seared.desc2=Making it even more powerful +item.meteorite_sword.seared.desc=Fire strengthens the blade$Making it even more powerful item.meteorite_sword_reforged.name=Meteorite Sword (Reforged) -item.meteorite_sword.reforged.desc1=The sword has been reforged -item.meteorite_sword.reforged.desc2=To rectify past imperfections +item.meteorite_sword.reforged.desc=The sword has been reforged$To rectify past imperfections item.meteorite_sword_hardened.name=Meteorite Sword (Hardened) -item.meteorite_sword.hardened.desc1=Extremely high pressure has been used -item.meteorite_sword.hardened.desc2=To harden the blade further +item.meteorite_sword.hardened.desc=Extremely high pressure has been used$To harden the blade further item.meteorite_sword_alloyed.name=Meteorite Sword (Alloyed) -item.meteorite_sword.alloyed.desc1=Cobalt fills the fissures -item.meteorite_sword.alloyed.desc2=Strengthening the sword +item.meteorite_sword.alloyed.desc=Cobalt fills the fissures$Strengthening the sword item.meteorite_sword_machined.name=Meteorite Sword (Machined) -item.meteorite_sword.machined.desc1=Advanced machinery was used -item.meteorite_sword.machined.desc2=To refine the blade even more +item.meteorite_sword.machined.desc=Advanced machinery was used$To refine the blade even more item.meteorite_sword_treated.name=Meteorite Sword (Treated) -item.meteorite_sword.treated.desc1=Chemicals have been applied -item.meteorite_sword.treated.desc2=Making the sword more powerful +item.meteorite_sword.treated.desc=Chemicals have been applied$Making the sword more powerful item.meteorite_sword_etched.name=Meteorite Sword (Etched) -item.meteorite_sword.etched.desc1=Acids clean the material -item.meteorite_sword.etched.desc2=To make this the perfect sword +item.meteorite_sword.etched.desc=Acids clean the material$To make this the perfect sword item.meteorite_sword_bred.name=Meteorite Sword (Bred) -item.meteorite_sword.bred.desc1=Immense heat and radiation -item.meteorite_sword.bred.desc2=Compress the material +item.meteorite_sword.bred.desc=Immense heat and radiation$Compress the material item.meteorite_sword_irradiated.name=Meteorite Sword (Irradiated) -item.meteorite_sword.irradiated.desc1=The power of the Atom -item.meteorite_sword.irradiated.desc2=Gives the sword might +item.meteorite_sword.irradiated.desc=The power of the Atom$Gives the sword might item.meteorite_sword_fused.name=Meteorite Sword (Fused) -item.meteorite_sword.fused.desc1=This blade has met -item.meteorite_sword.fused.desc2=With the forces of the stars +item.meteorite_sword.fused.desc=This blade has met$With the forces of the stars item.meteorite_sword_baleful.name=Meteorite Sword (Baleful) -item.meteorite_sword.baleful.desc1=This sword has met temperatures -item.meteorite_sword.baleful.desc2=Far beyond what normal material can endure +item.meteorite_sword.baleful.desc=This sword has met temperatures$Far beyond what normal material can endure item.mike_cooling_unit.name=Deuterium Cooling Unit item.mike_core.name=Uranium Coated Deuterium Tank item.mike_deut.name=Deuterium Tank @@ -3382,6 +3366,17 @@ item.missile_cluster.name=Cluster Missile item.missile_cluster_strong.name=Strong Cluster Missile item.missile_custom.name=Custom Missile item.missile_decoy.name=Decoy Missile +item.missile.desc.warhead=Warhead +item.missile.desc.strength=Strength +item.missile.desc.fuelType=Fuel Type +item.missile.desc.fuelAmount=Fuel amount +item.missile.desc.chipInaccuracy=Chip inaccuracy +item.missile.desc.finInaccuracy=Fin inaccuracy +item.missile.desc.size=Size +item.missile.desc.health=Health +item.missile.desc.fuel=Fuel +item.missile.desc.fuelCapacity=Fuel capacity +item.missile.desc.notLaunchable=Not launchable! item.missile_doomsday.name=Doomsday Missile item.missile_doomsday_rusted.name=Damaged Doomsday Missile item.missile_drill.name=The Concrete Cracker @@ -3389,6 +3384,14 @@ item.missile_emp.name=EMP Missile item.missile_emp_strong.name=Strong EMP Missile item.missile_endo.name=Endothermic Missile item.missile_exo.name=Exothermic Missile +item.missile.fuel.balefire=BF Rocket Fuel +item.missile.fuel.jetfuel_loxy=Jet Fuel / Liquid Oxygen +item.missile.fuel.ethanol_peroxide=Ethanol / Hydrogen Peroxide +item.missile.fuel.kerosene_loxy=Kerosene / Liquid Oxygen +item.missile.fuel.kerosene_peroxide=Kerosene / Hydrogen Peroxide +item.missile.fuel.solid=Solid Fuel +item.missile.fuel.solid.prefueled=Solid Fuel (pre-fueled) +item.missile.fuel.xenon=Xenon item.missile_generic.name=High Explosive Missile item.missile_incendiary.name=Incendiary Missile item.missile_incendiary_strong.name=Strong Incendiary Missile @@ -3397,6 +3400,28 @@ item.missile_kit.name=Missile Kit item.missile_micro.name=Micro-Nuclear Missile item.missile_nuclear.name=Nuclear Missile item.missile_nuclear_cluster.name=Thermonuclear Missile +item.missile.part.bottomSize=Bottom size +item.missile.part.by=by +item.missile.part.fuelAmount=Fuel amount +item.missile.part.fuelConsumption=Fuel consumption +item.missile.part.fuelType=Fuel type +item.missile.part.health=Health +item.missile.part.inaccuracy=Inaccuracy +item.missile.part.maxPayload=Max. payload +item.missile.part.rarity=Rarity +item.missile.part.rarity.common=Common +item.missile.part.rarity.epic=Epic +item.missile.part.rarity.legendary=Legendary +item.missile.part.rarity.rare=Rare +item.missile.part.rarity.strange=Strange +item.missile.part.rarity.uncommon=Uncommon +item.missile.part.size=Size +item.missile.part.size.any=Any +item.missile.part.size.none=None +item.missile.part.strength=Strength +item.missile.part.topSize=Top size +item.missile.part.type=Type +item.missile.part.weight=Weight item.missile_rain.name=Bomblet Rain item.missile_schrabidium.name=Schrabidium Missile item.missile_shuttle.name=Reliant Robin Space Shuttle @@ -3406,87 +3431,14 @@ item.missile_soyuz_lander.desc=Doubles as a crappy lander! item.missile_stealth.name=Stealth Missile item.missile_strong.name=Strong HE Missile item.missile_taint.name=Taint-Tipped Missile +item.missile.tier.tier0=Tier 0 +item.missile.tier.tier1=Tier 1 +item.missile.tier.tier2=Tier 2 +item.missile.tier.tier3=Tier 3 +item.missile.tier.tier4=Tier 4 item.missile_volcano.name=Tectonic Missile item.missile_volcano.desc=Using the power of nuclear explosives, we can summon a volcano! -gui.missile.warhead=Warhead -gui.missile.strength=Strength -gui.missile.fuelType=Fuel Type -gui.missile.fuelAmount=Fuel amount -gui.missile.chipInaccuracy=Chip inaccuracy -gui.missile.finInaccuracy=Fin inaccuracy -gui.missile.size=Size -gui.missile.health=Health -gui.missile.fuel=Fuel -gui.missile.fuelCapacity=Fuel capacity -gui.missile.notLaunchable=Not launchable! - -missile.tier.tier0=Tier 0 -missile.tier.tier1=Tier 1 -missile.tier.tier2=Tier 2 -missile.tier.tier3=Tier 3 -missile.tier.tier4=Tier 4 - -missile.fuel.solid=Solid Fuel -missile.fuel.solid.prefueled=Solid Fuel (pre-fueled) -missile.fuel.ethanol_peroxide=Ethanol / Hydrogen Peroxide -missile.fuel.kerosene_peroxide=Kerosene / Hydrogen Peroxide -missile.fuel.kerosene_loxy=Kerosene / Liquid Oxygen -missile.fuel.jetfuel_loxy=Jet Fuel / Liquid Oxygen - -warhead.he=HE -warhead.incendiary=Incendiary -warhead.cluster=Cluster -warhead.bunker_buster=Bunker Buster -warhead.nuclear=Nuclear -warhead.thermonuclear=Thermonuclear (TX) -warhead.n2=N² -warhead.balefire=BF -warhead.schrabidium=Schrabidium -warhead.taint=Taint -warhead.cloud=Cloud -warhead.turbine=Turbine - -part.inaccuracy=Inaccuracy -part.size=Size -part.type=Type -part.strength=Strength -part.weight=Weight -part.topSize=Top size -part.bottomSize=Bottom size -part.fuelType=Fuel type -part.fuelAmount=Fuel amount -part.fuelConsumption=Fuel consumption -part.maxPayload=Max. payload -part.health=Health -part.rarity=Rarity -part.by=by -part.size.any=Any -part.size.none=None - -fuel.xenon=Xenon -fuel.balefire=BF Rocket Fuel - -part.rarity.common=Common -part.rarity.uncommon=Uncommon -part.rarity.rare=Rare -part.rarity.epic=Epic -part.rarity.legendary=Legendary -part.rarity.strange=Strange - -satchip.frequency=Satellite frequency -satchip.foeq=Gives you an achievement. That's it. -satchip.gerald.line1=Single use. -satchip.gerald.line2=Requires orbital module. -satchip.gerald.line3=Melter of CPUs, bane of every server owner. -satchip.laser=Allows to summon lasers with a 15 second cooldown. -satchip.mapper=Displays currently loaded chunks. -satchip.miner=Will deliver ore powders to a cargo landing pad. -satchip.lunar_miner=Mines moon turf to deliver it to a cargo landing pad. -satchip.radar=Shows a map of active entities. -satchip.resonator=Allows for teleportation with no cooldown. -satchip.scanner=Creates a topdown map of underground ores. - item.mold_base.name=Blank Foundry Mold item.mold.name=Foundry Mold item.morning_glory.name=Morning Glory @@ -4110,9 +4062,7 @@ item.primer_buckshot.name=Buckshot Primer (x12) item.protection_charm.name=Charm of Protection item.prototype_kit.name=Prototype Kit item.pudding.name=Pudding -item.pudding.desc.1=What if he did? -item.pudding.desc.2=What if he didn't? -item.pudding.desc.3=What if the world was made of pudding? +item.pudding.desc=What if he did?$What if he didn't?$What if the world was made of pudding? item.pwr_fuel.bfb_am_mix.name=Fuel Grade Americium PWR BFB Rod item.pwr_fuel.bfb_pu241.name=Plutonium-241 PWR BFB Rod item.pwr_fuel.hea242.name=HEA-242 PWR Fuel Rod @@ -4166,8 +4116,7 @@ item.radaway_strong.name=Strong RadAway item.radx.name=Rad-X item.radx.desc=Increases radiation resistance by 0.2 (37%%) for 3 minutes item.rag.name=Cloth -item.rag.desc.1=Drop into water to make damp cloth. -item.rag.desc.2=Right-click to urinate on the cloth. +item.rag.desc=Drop into water to make damp cloth.$Right-click to urinate on the cloth. item.rag_damp.name=Damp Cloth item.rag_piss.name=Piss-Soaked Rag item.rangefinder.name=Rangefinder @@ -4736,6 +4685,18 @@ item.wand_d.name=Debug Wand item.wand_k.name=Construction Wand item.wand_s.name=Structure Wand item.structure_custommachine.name=Custom Machine Structure Output Wand +item.warhead.desc.he=HE +item.warhead.desc.incendiary=Incendiary +item.warhead.desc.cluster=Cluster +item.warhead.desc.bunker_buster=Bunker Buster +item.warhead.desc.nuclear=Nuclear +item.warhead.desc.thermonuclear=Thermonuclear (TX) +item.warhead.desc.n2=N² +item.warhead.desc.balefire=BF +item.warhead.desc.schrabidium=Schrabidium +item.warhead.desc.taint=Taint +item.warhead.desc.cloud=Cloud +item.warhead.desc.turbine=Turbine item.warhead_buster_large.name=Large Bunker Buster Warhead item.warhead_buster_medium.name=Medium Bunker Buster Warhead item.warhead_buster_small.name=Small Bunker Buster Warhead @@ -4985,6 +4946,17 @@ rbmk.screen.rod=Control: %s rbmk.screen.temp=Temp: %s rbmk.screen.xenon=Xenon: %s +satchip.frequency=Satellite frequency +satchip.foeq=Gives you an achievement. That's it. +satchip.gerald.desc=Single use.$Requires orbital module.$Melter of CPUs, bane of every server owner. +satchip.laser=Allows to summon lasers with a 15 second cooldown. +satchip.mapper=Displays currently loaded chunks. +satchip.miner=Will deliver ore powders to a cargo landing pad. +satchip.lunar_miner=Mines moon turf to deliver it to a cargo landing pad. +satchip.radar=Shows a map of active entities. +satchip.resonator=Allows for teleportation with no cooldown. +satchip.scanner=Creates a topdown map of underground ores. + shape.barrelHeavy=Heavy Barrel shape.barrelLight=Light Barrel shape.billet=Billet @@ -5861,10 +5833,6 @@ tile.nuke_n45.name=N45 Naval Mine tile.nuke_prototype.name=The Prototype tile.nuke_solinium.name=The Blue Rinse tile.nuke_tsar.name=Tsar Bomba -item.bomb_part.used_in=Used in: -item.n2.mine=N² Mine -item.fleija.name=F.L.E.I.J.A. -item.solinium.name=Solinium Bomb tile.oil_duct.name=Oil Pipe tile.oil_duct_solid.name=Coated Oil Pipe tile.oil_pipe.name=Crude Oil Extraction Pipe @@ -6470,6 +6438,3 @@ desc.gui.upgrade.power= * §1Power-Saving§r: Stacks to level 3 desc.gui.upgrade.speed= * §4Speed§r: Stacks to level 3 tile.oc_cable_paintable.name=Paintable Network Cable - -general.na=N/A -error.generic=### I AM ERROR ### diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index c17266768..bb3c9c63e 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1054,16 +1054,6 @@ desc.gui.zirnox.pressure=§6Давление§r$Давление можно сн desc.gui.zirnox.warning1=§cВнимание:§r Вода необходима для$правильной работы реактора! desc.gui.zirnox.warning2=§cВнимание:§r CO2 необходим для$правильной работы реактора! -gui.recipe.duration=Длительность -gui.recipe.consumption=Потребление -gui.recipe.input=Вход -gui.recipe.output=Выход -gui.recipe.mB=mB -gui.recipe.atPressure=при давлении в -gui.recipe.autoswitch=Группа автоматического переключения -gui.recipe.enabledFor=Включено для -gui.recipe.setRecipe=Нажмите, чтобы выбрать рецепт - desc.item.ammo.con_accuracy2=- Сильно сниженная точность desc.item.ammo.con_damage=- Сильно сниженный урон desc.item.ammo.con_heavy_wear=- Сильно увеличенный износ @@ -1237,6 +1227,8 @@ entity.hbm.entity_bullet.name=Пуля entity.hbm.entity_rocket.name=Ракета entity.hbm.entity_schrabnel.name=Шрапнель +error.generic=### Я ОШИБКА ### + excavator.crusher=Включить измельчитель excavator.drill=Включить бур excavator.silktouch=Включить шёлковое касание @@ -1266,6 +1258,28 @@ geiger.playerRes=Защищённость игрока: geiger.title=СЧЁТЧИК ГЕЙГЕРА geiger.title.dosimeter=ДОЗИМЕТР +general.na=Н/Д + +gui.recipe.duration=Длительность +gui.recipe.consumption=Потребление +gui.recipe.input=Вход +gui.recipe.output=Выход +gui.recipe.atPressure=при давлении в +gui.recipe.setRecipe=Нажмите, чтобы выбрать рецепт + +gui.weapon.ammo=Боеприпасы +gui.weapon.baseDamage=Базовый урон +gui.weapon.damageWithAmmo=Урон с текущими боеприпасами +gui.weapon.condition=Состояние +gui.weapon.accepts=Принимает +gui.weapon.quality.aside=Стандартный арсенал +gui.weapon.quality.bside=Би-Сайд +gui.weapon.quality.legendary=Легендарное оружие +gui.weapon.quality.special=Специальное оружие +gui.weapon.quality.utility=Утилитарное +gui.weapon.quality.secret=СЕКРЕТНОЕ +gui.weapon.quality.debug=ОТЛАДКА + gun.make.ARMALITE=Armalite gun.make.AUTO_ORDINANCE=Корпорация Авто-Орденс gun.make.BAE=БАЕ Системс @@ -2359,6 +2373,7 @@ item.bolt_spike.name=Железнодорожный гвоздь item.bolt_spike.desc=Излучает угрожающую ауру, как-то item.boltgun.name=Пневматический заклепочник item.bomb_caller.name=Устройство для обозначения авиаудара +item.bomb_part.used_in=Используется в: item.bomb_waffle.name=Вафля массового поражения item.book_guide.name=Руководство item.book_of_.name=Книга Вагонов @@ -3257,18 +3272,6 @@ item.gun_uboinik_ammo.name=Дробь 12x70 калибра (LEGACY) item.gun_uzi.name=IMI Узи item.gun_uzi_richter.name=Richter item.gun_uzi_akimbo.name=Акимбо Узи -gui.weapon.ammo=Боеприпасы -gui.weapon.baseDamage=Базовый урон -gui.weapon.damageWithAmmo=Урон с текущими боеприпасами -gui.weapon.condition=Состояние -gui.weapon.accepts=Принимает -gui.weapon.quality.aside=Стандартный арсенал -gui.weapon.quality.bside=Би-Сайд -gui.weapon.quality.legendary=Легендарное оружие -gui.weapon.quality.special=Специальное оружие -gui.weapon.quality.utility=Утилитарное -gui.weapon.quality.secret=СЕКРЕТ -gui.weapon.quality.debug=ОТЛАДКА item.gun_uzi_ammo.name=Патроны кал. 22LR (LEGACY) item.gun_uzi_saturnite.name=Сатурнитовый Узи item.gun_uzi_saturnite_silencer.name=Сатурнитовый Узи с глушителем @@ -3313,6 +3316,7 @@ item.hev_legs.name=Поножи H.E.V Модели IV item.holotape_damaged.name=Повреждённый голодиск item.holotape_image.name=Голодиск item.horseshoe_magnet.name=Магнит-подкова +item.hot_dusted.forged=Выковано %s раз(а) item.hull_big_aluminium.name=Большая алюминиевая оболочка item.hull_big_steel.name=Большая стальная оболочка item.hull_big_titanium.name=Большая титановая оболочка @@ -3432,9 +3436,7 @@ item.ingot_schrabidium_fuel.name=Слиток шрабидиевого топл item.ingot_schraranium.name=Шрараниевый слиток item.ingot_schraranium.desc=Делается из урана в шрабидиевом трансмутаторе item.ingot_semtex.name=Семтекс -item.ingot_semtex.desc.1=Пластиковая взрывчатка Семтекс H -item.ingot_semtex.desc.2=Эффективное взрывчатое вещество для многих применений. -item.ingot_semtex.desc.3=Съедобно +item.ingot_semtex.desc=Пластиковая взрывчатка Семтекс H$Эффективное взрывчатое вещество для многих применений.$Съедобно item.ingot_silicon.name=Кремниевый брусок item.ingot_smore.name=Слиток с'мора item.ingot_solinium.name=Солиниевый слиток @@ -3571,15 +3573,11 @@ item.mechanism_rifle_2.name=Усовершенствованный винтов item.mechanism_special.name=Механизм высокотехнологичного оружия item.med_bag.name=Аптечка первой помощи item.med_ipecac.name=Сироп из рвотного корня -item.med_ipecac.desc.1=Горький сок, который заставит ваш желудок -item.med_ipecac.desc.2=с силой извергнуть свое содержимое. +item.med_ipecac.desс=Горький сок, который заставит ваш желудок$с силой извергнуть свое содержимое. item.med_ptsd.name=Лечение ПТСР -item.med_ptsd.desc.1=Это даже не лекарство от ПТСР, -item.med_ptsd.desc.2=это просто рвотный корень в другой банке! +item.med_ptsd.desc=Это даже не лекарство от ПТСР,$это просто рвотный корень в другой банке! item.med_schiziphrenia.name=Лекарство от шизофрении -item.med_schizophrenia.desc.1=Заставляет голоса исчезнуть. Хоть на время. -item.med_schizophrenia.desc.2=... -item.med_schizophrenia.desc.3=Лучше не принимать. +item.med_schizophrenia.desc=Заставляет голоса исчезнуть. На некоторое время.$...$Лучше не принимать. item.medal_liquidator.name=Медаль Ликвидатора item.meltdown_tool.name=Аппликатор мгновенного расплавления Дятлова item.memespoon.name=§eЗемлекоп @@ -3589,43 +3587,29 @@ item.mese_axe.name=Месе топор item.mese_pickaxe.name=Месе кирка item.meteor_charm.name=Талисман от метеоритов item.meteor_remote.name=Устройство для вызова метеоритов - -item.meteorite_sword.name=Метеоритовый меч -item.meteorite_sword.desc1=Выкован из павшей звезды -item.meteorite_sword.desc2=Острее, чем большинство земных лезвий +item.meteorite_sword.desc=Выкован из павшей звезды$Острее, чем большинство земных лезвий item.meteorite_sword_seared.name=Метеоритовый меч (Опалённый) -item.meteorite_sword.seared.desc1=Огонь укрепляет клинок, -item.meteorite_sword.seared.desc2=Делая его даже ещё мощнее +item.meteorite_sword.seared.desc=Огонь укрепляет клинок,$Делая его даже ещё мощнее item.meteorite_sword_reforged.name=Метеоритовый меч (Перекованный) -item.meteorite_sword.reforged.desc1=Меч был перекован, -item.meteorite_sword.reforged.desc2=Чтобы искоренить прошлые недостатки +item.meteorite_sword.reforged.desc=Меч был перекован,$Чтобы искоренить прошлые недостатки item.meteorite_sword_hardened.name=Метеоритовый меч (Закалённый) -item.meteorite_sword.hardened.desc1=Экстремально высокое давление использовано, -item.meteorite_sword.hardened.desc2=Чтобы закаливать этот меч дальше +item.meteorite_sword.hardened.desc=Экстремально высокое давление использовано,$Чтобы закаливать этот меч дальше item.meteorite_sword_alloyed.name=Метеоритовый меч (Легированный) -item.meteorite_sword.alloyed.desc1=Кобальт заполняет трещины, -item.meteorite_sword.alloyed.desc2=Упрочняя меч +item.meteorite_sword.alloyed.desc=Кобальт заполняет трещины,$Упрочняя меч item.meteorite_sword_machined.name=Метеоритовый меч (Механически обработанный) -item.meteorite_sword.machined.desc1=Было использовано передовое оборудование, -item.meteorite_sword.machined.desc2=Чтобы еще больше усовершенствовать лезвие +item.meteorite_sword.machined.desc=Было использовано передовое оборудование,$Чтобы ещё больше усовершенствовать лезвие item.meteorite_sword_treated.name=Метеоритовый меч (Обработанный) -item.meteorite_sword.treated.desc1=Были применены химикаты, -item.meteorite_sword.treated.desc2=Делающие меч мощнее +item.meteorite_sword.treated.desc=Были применены химикаты,$Делающие меч мощнее item.meteorite_sword_etched.name=Метеоритовый меч (Гравированный) -item.meteorite_sword.etched.desc1=Кислоты очищают материал, -item.meteorite_sword.etched.desc2=Чтобы получить этот идеальный меч +item.meteorite_sword.etched.desc=Кислоты очищают материал,$Чтобы получить этот идеальный меч item.meteorite_sword_bred.name=Метеоритовый меч (Разведённый) -item.meteorite_sword.bred.desc1=Огромные количества тепла и радиации -item.meteorite_sword.bred.desc2=Сжимают материал +item.meteorite_sword.bred.desc=Огромные количества тепла и радиации$Сжимают материал item.meteorite_sword_irradiated.name=Метеоритовый меч (Облучённый) -item.meteorite_sword.irradiated.desc1=Сила Атома -item.meteorite_sword.irradiated.desc2=Придает мечу мощи +item.meteorite_sword.irradiated.desc=Сила Атома$Придает мечу мощи item.meteorite_sword_fused.name=Метеоритовый меч (Сплавленный) -item.meteorite_sword.fused.desc1=Этот клинок встретился -item.meteorite_sword.fused.desc2=С силами звёзд +item.meteorite_sword.fused.desc=Этот клинок встретился$С силами звёзд item.meteorite_sword_baleful.name=Метеоритовый меч (Зловещий) -item.meteorite_sword.baleful.desc1=Этот меч встретил температуры -item.meteorite_sword.baleful.desc2=Гораздо большие, чем обычный материал может выдержать +item.meteorite_sword.baleful.desc=Этот меч встретил температуры$Гораздо большие, чем обычный материал может выдержать item.mike_cooling_unit.name=Блок охлаждения дейтерия item.mike_core.name=Дейтериевый бак с урановым покрытием item.mike_deut.name=Дейтериевый бак @@ -3644,6 +3628,17 @@ item.missile_cluster.name=Кластерная ракета item.missile_cluster_strong.name=Мощная кластерная ракета item.missile_custom.name=Пользовательская Ракета item.missile_decoy.name=Ракета-приманка +item.missile.desc.warhead=Боеголовка +item.missile.desc.strength=Сила +item.missile.desc.fuelType=Тип топлива +item.missile.desc.fuelAmount=Количество топлива +item.missile.desc.chipInaccuracy=Неточность чипа +item.missile.desc.finInaccuracy=Неточность стабилизаторов +item.missile.desc.size=Размер +item.missile.desc.health=Здоровье +item.missile.desc.fuel=Топливо +item.missile.desc.fuelCapacity=Вместимость топлива +item.missile.desc.notLaunchable=Не запускаемо! item.missile_doomsday.name=Ракета Судного Дня item.missile_doomsday_rusted.name=Повреждённая ракета Судного Дня item.missile_drill.name=Крушитель бетона @@ -3651,6 +3646,14 @@ item.missile_emp.name=ЭМИ-ракета item.missile_emp_strong.name=Мощная ЭМИ-ракета item.missile_endo.name=Эндотермическая ракета item.missile_exo.name=Экзотермическая ракета +item.missile.fuel.balefire=Ракетное жар-топливо +item.missile.fuel.jetfuel_loxy=Авиационное топливо / Жидкий кислород +item.missile.fuel.ethanol_peroxide=Этанол / Пероксид водорода +item.missile.fuel.kerosene_loxy=Керосин / Жидкий кислород +item.missile.fuel.kerosene_peroxide=Керосин / Пероксид водорода +item.missile.fuel.solid=Твёрдое топливо +item.missile.fuel.solid.prefueled=Твёрдое топливо (предзаправлено) +item.missile.fuel.xenon=Ксенон item.missile_generic.name=Фугасная ракета item.missile_incendiary.name=Зажигательная ракета item.missile_incendiary_strong.name=Мощная зажигательная ракета @@ -3659,6 +3662,28 @@ item.missile_kit.name=Ракетный набор item.missile_micro.name=Микро-ядерная ракета item.missile_nuclear.name=Ядерная ракета item.missile_nuclear_cluster.name=Термоядерная ракета +item.missile.part.bottomSize=Нижний размер +item.missile.part.by=Автор - +item.missile.part.fuelAmount=Количество топлива +item.missile.part.fuelConsumption=Потребление топлива +item.missile.part.fuelType=Тип топлива +item.missile.part.health=Здоровье +item.missile.part.inaccuracy=Неточность +item.missile.part.maxPayload=Максимальная полезная нагрузка +item.missile.part.rarity=Редкость +item.missile.part.rarity.common=Обычная +item.missile.part.rarity.epic=Эпическая +item.missile.part.rarity.legendary=Легендарная +item.missile.part.rarity.rare=Редкая +item.missile.part.rarity.strange=Странная +item.missile.part.rarity.uncommon=Необычная +item.missile.part.size=Размер +item.missile.part.size.any=Любой +item.missile.part.size.none=Нет +item.missile.part.strength=Сила +item.missile.part.topSize=Верхний размер +item.missile.part.type=Тип +item.missile.part.weight=Вес item.missile_rain.name=Бомбовый дождь item.missile_schrabidium.name=Шрабидиевая ракета item.missile_shuttle.name=Космический шаттл Reliant Robin @@ -3668,86 +3693,14 @@ item.missile_soyuz_lander.desc=А также паршивый посадочны item.missile_stealth.name=Стелс-ракета item.missile_strong.name=Мощная фугасная ракета item.missile_taint.name=Зараженная ракета +item.missile.tier.tier0=Уровень 0 +item.missile.tier.tier1=Уровень 1 +item.missile.tier.tier2=Уровень 2 +item.missile.tier.tier3=Уровень 3 +item.missile.tier.tier4=Уровень 4 item.missile_volcano.name=Тектоническая ракета item.missile_volcano.desc=Используя силу ядерной взрывчатки, мы можем вызвать вулкан! -gui.missile.warhead=Боеголовка -gui.missile.strength=Мощность -gui.missile.fuelType=Тип топлива -gui.missile.fuelAmount=Количество топлива -gui.missile.chipInaccuracy=Неточность чипа -gui.missile.finInaccuracy=Неточность стабилизаторов -gui.missile.size=Размер -gui.missile.health=Прочность -gui.missile.fuel=Топливо -gui.missile.fuelCapacity=Ёмкость топлива -gui.missile.notLaunchable=Невозможно запустить! - -missile.tier.tier0=Уровень 0 -missile.tier.tier1=Уровень 1 -missile.tier.tier2=Уровень 2 -missile.tier.tier3=Уровень 3 -missile.tier.tier4=Уровень 4 -missile.fuel.solid=Твёрдое топливо -missile.fuel.solid.prefueled=Твёрдое топливо (предзаправлено) -missile.fuel.ethanol_peroxide=Этанол / Перекись водорода -missile.fuel.kerosene_peroxide=Керосин / Перекись водорода -missile.fuel.kerosene_loxy=Керосин / Жидкий кислород -missile.fuel.jetfuel_loxy=Авиационное топливо / Жидкий кислород - -warhead.he=HE -warhead.incendiary=Зажигательная -warhead.cluster=Кассетная -warhead.bunker_buster=Противобункерная -warhead.nuclear=Ядерная -warhead.thermonuclear=Термоядерная (TX) -warhead.n2=N² -warhead.balefire=Жар-ядерная -warhead.schrabidium=Шрабидевая -warhead.taint=Порча -warhead.cloud=Облако -warhead.turbine=Турбина - -part.inaccuracy=Неточность -part.size=Размер -part.type=Тип -part.strength=Прочность -part.weight=Вес -part.topSize=Верхний размер -part.bottomSize=Нижний размер -part.fuelType=Тип топлива -part.fuelAmount=Количество топлива -part.fuelConsumption=Расход топлива -part.maxPayload=Макс. нагрузка -part.health=Прочность -part.rarity=Редкость -part.by=Автор -part.size.any=Любой -part.size.none=Нет - -fuel.xenon=Ксенон -fuel.balefire=Жар-ракетное топливо - -part.rarity.common=Обычное -part.rarity.uncommon=Необычное -part.rarity.rare=Редкое -part.rarity.epic=Эпическое -part.rarity.legendary=Легендарное -part.rarity.strange=Странное - -satchip.frequency=Частота спутника -satchip.foeq=Даёт достижение. И всё. -satchip.gerald.line1=Одноразовый. -satchip.gerald.line2=Требуется орбитальный модуль. -satchip.gerald.line3=Расплавитель процессоров, проклятие каждого владельца сервера. -satchip.laser=Позволяет вызывать лазеры с перезарядкой 15 секунд. -satchip.mapper=Отображает загруженные в данный момент чанки. -satchip.miner=Доставляет рудные порошки на посадочную площадку. -satchip.lunar_miner=Добывает лунный грунт и доставляет на посадочную площадку. -satchip.radar=Показывает карту активных сущностей -satchip.resonator=Позволяет телепортироваться без перезарядки. -satchip.scanner=Создаёт карту подземных руд сверху вниз. - item.mold_base.name=Пустая литейная форма item.mold.name=Литейная форма item.morning_glory.name=Фиалковый вьюнок @@ -4371,9 +4324,7 @@ item.primer_buckshot.name=Картечные Капсюли (x12) item.protection_charm.name=Талисман защиты item.prototype_kit.name=Комплект Прототипа item.pudding.name=Пудинг -item.pudding.desc.1=Что, если бы он сделал? -item.pudding.desc.2=Что, если бы он не сделал? -item.pudding.desc.3=Что, если бы мир был сделан из пудинга? +item.pudding.desc=Что, если бы он сделал?$WЧто, если бы он не сделал?$Что, если бы если мир был сделан из пуддинга? item.pwr_fuel.bfb_am_mix.name=Стержень ВВЭР ЦБР с реакторным америцием item.pwr_fuel.bfb_pu241.name=Стержень ВВЭР ЦБР с плутонием-241 item.pwr_fuel.hea242.name=Топливный стержень ВВЭР с высокообогащённым америцием-242 @@ -4427,8 +4378,7 @@ item.radaway_strong.name=Усиленный антирадин item.radx.name=Рад-X item.radx.desc=Increases radiation resistance by 0.2 (37%) for 3 minutes item.rag.name=Тряпка -item.rag.desc.1=Бросьте в воду, чтобы намочить тряпку. -item.rag.desc.2=ПКМ, чтобы помочиться на тряпку. +item.rag.desc=Бросьте в воду, чтобы намочить.$Нажмите правой кнопкой мыши, чтобы помочиться на тряпку. item.rag_damp.name=Влажная тряпка item.rag_piss.name=Пропитанная мочой тряпка item.rangefinder.name=Дальномер @@ -5005,6 +4955,18 @@ item.wand_d.name=Отладочная палочка item.wand_k.name=Строительная палочка item.wand_s.name=Структурная палочка item.structure_custommachine.name=Жезл обозначения кастомных машин +item.warhead.desc.he=HE +item.warhead.desc.incendiary=Зажигательная +item.warhead.desc.cluster=Кассетная +item.warhead.desc.bunker_buster=Разрушитель бункеров +item.warhead.desc.nuclear=Ядерная +item.warhead.desc.thermonuclear=Термоядерная (TX) +item.warhead.desc.n2=N² +item.warhead.desc.balefire=Жар-ядерная +item.warhead.desc.schrabidium=Шрабидиевая +item.warhead.desc.taint=Порча +item.warhead.desc.cloud=Облако +item.warhead.desc.turbine=Турбина item.warhead_buster_large.name=Большая бункерная боеголовка item.warhead_buster_medium.name=Средняя бункерная боеголовка item.warhead_buster_small.name=Малая бункерная боеголовка @@ -5253,6 +5215,17 @@ rbmk.screen.rod=Управ: %s rbmk.screen.temp=Темп: %s rbmk.screen.xenon=Ксенон: %s +satchip.frequency=Частота спутника +satchip.foeq=Даёт тебе достижение. Это всё. +satchip.gerald.desc=Одноразовый.$Требует орбитальный модуль.$Плавитель процессоров, проклятие администраторов серверов. +satchip.laser=Позволяет вызывать лазеры с перезарядкой 15 секунд.. +satchip.mapper=Отображает загруженные в данный момент чанки. +satchip.miner=Доставит рудный порошок на грузовую посадочную площадку. +satchip.lunar_miner=Добывает лунный грунт, чтобы доставить его на грузовую посадочную площадку. +satchip.radar=Показывает карту активных сущностей. +satchip.resonator=Позволяет телепортироваться без перезарядки. +satchip.scanner=Создает карту подземных руд сверху вниз. + shape.barrelHeavy=Тяжёлый ствол shape.barrelLight=Лёгкий ствол shape.billet=Заготовка @@ -6129,10 +6102,6 @@ tile.nuke_n45.name=Морская мина N45 tile.nuke_prototype.name=Прототип tile.nuke_solinium.name=Синий Ополаскиватель tile.nuke_tsar.name=Царь-бомба -item.bomb_part.used_in=Используется в: -item.n2.mine=Мина N² -item.fleija.name=Ф.Л.Е.Я. -item.solinium.name=Синий Ополаскиватель tile.oil_duct.name=Труба для нефти tile.oil_duct_solid.name=Покрытая труба для нефти tile.oil_pipe.name=Труба для извлечения неочищенной нефти @@ -6739,11 +6708,4 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х tile.oc_cable_paintable.name=Окрашиваемый сетевой кабель -general.na=Н/Д -error.generic=### Я ОШИБКА ### - -// Last updated 24.08.2025 by Bufka2011, MrKimkimora and TactiCOOLHimZa // - -# Hot Dusted Item -item.hot_dusted.forged=Кован -item.hot_dusted.times=раз(а) +// Last updated 26.08.2025 by Bufka2011, MrKimkimora and TactiCOOLHimZa // From 708879c276da2bdc69caeaf5670e85636d31ad6b Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Tue, 26 Aug 2025 16:21:33 -0600 Subject: [PATCH 490/491] Minor ru_RU.lang changes --- src/main/resources/assets/hbm/lang/ru_RU.lang | 14 +++++++------- .../assets/hbm/manual/material/copper.json | 2 +- .../assets/hbm/manual/material/plutonium.json | 2 +- .../assets/hbm/manual/material/rubber.json | 2 +- .../assets/hbm/manual/material/sulfur.json | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index bb3c9c63e..a2ad8583c 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2415,9 +2415,9 @@ item.can_breen.name=Личный резерв др.Брина item.can_creature.name=Энергетический напиток "Существо" item.can_empty.name=Пустая банка item.can_key.name=Винтовой ключ -item.can_luna.name=Чёрная меза луна - Тёмная кола +item.can_luna.name=Чёрная Меза луна - Тёмная кола item.can_mrsugar.name=Безалкогольный напиток 'Доктор Сахар' -item.can_mug.name=MUG Root Beer +item.can_mug.name=Квас "Царские Припасы" item.can_overcharge.name=Перезарядка Delirium XT item.can_redbomb.name=Энергетический напиток "Красная Бомба" item.can_smart.name=Энергетический напиток “Смарт” @@ -4088,7 +4088,7 @@ item.pellet_rtg_actinium.desc=Сияние голубого света и бет item.pellet_rtg_americium.name=РИТЭГ-пеллета из америция-241 item.pellet_rtg_americium.desc=Редкий и надежный, старый добрый Америций! item.pellet_rtg_berkelium.name=РИТЭГ-пеллета из берклия-248 -item.pellet_rtg_berkelium.desc=Экзотический источник альфа, служит дольше, чем америций! +item.pellet_rtg_berkelium.desc=Экзотический источник альфа-излучения, служит дольше, чем америций! item.pellet_rtg_cobalt.name=РИТЭГ-пеллета из кобальта-60 item.pellet_rtg_cobalt.desc=Не лучший для РИТЭГ энергии, но хорош для гамма-радиации! item.pellet_rtg_depleted.bismuth.name=Распавшаяся РИТЭГ-пеллета висмута @@ -4226,7 +4226,7 @@ item.powder_coal_tiny.name=Кучка угольного порошка item.powder_cobalt.name=Кобальтовый порошок item.powder_cobalt_tiny.name=Кучка кобальтового порошка item.powder_coltan.name=Очищенный танталит -item.powder_coltan_ore.name=Измельчённый Колтан +item.powder_coltan_ore.name=Измельчённый колтан item.powder_combine_steel.name=Измельчённая сталь Альянса item.powder_copper.name=Медный порошок item.powder_cs137.name=Порошок цезия-137 @@ -4240,7 +4240,7 @@ item.powder_dineutronium.name=Динейтрониевый порошок item.powder_dura_steel.name=Измельчённая быстрорежущая сталь item.powder_emerald.name=Изумрудный порошок item.powder_euphemium.name=Эвфемиевый порошок -item.powder_euphemium.desc=Измельчённая розовизна.$На вкус как клубника. +item.powder_euphemium.desc=Измельчённая розовость.$На вкус как клубника. item.powder_fertilizer.name=Промышленное удобрение item.powder_fire.name=Красный фосфор item.powder_fire.desc=Используется в многоцелевых бомбах:$Зажигательные бомбы - это весело! @@ -4275,7 +4275,7 @@ item.powder_paleogenite.name=Порошок палеогенита item.powder_paleogenite_tiny.name=Кучка палеогенитового порошка item.powder_plutonium.name=Плутониевый порошок item.powder_poison.name=Ядовитый порошок -item.powder_poison.desc=Используется в многоцелевых бомбах:$Внимание: Ядовито! +item.powder_poison.desc=Используется в многоцелевых бомбах:$Внимание: ядовито! item.powder_polonium.name=Порошок полония-210 item.powder_polymer.name=Полимерный порошок item.powder_power.name=Энерго-порошок @@ -5044,7 +5044,7 @@ item.weapon_mod_generic.bronze_damage.name=Оптимизированный бр item.weapon_mod_generic.bronze_dura.name=Высокопрочные запчасти из бронзы item.weapon_mod_generic.desh_damage.name=Оптимизированный деш ресивер item.weapon_mod_generic.desh_dura.name=Высокопрочные запчасти из деша -item.weapon_mod_generic.dura_damage.name=Оптимизированный быстрорежущий ресивер +item.weapon_mod_generic.dura_damage.name=Оптимизированный ресивер из быстрорежущей стали item.weapon_mod_generic.dura_dura.name=Высокопрочные запчасти из быстрорежущей стали item.weapon_mod_generic.ferro_damage.name=Оптимизированный ферроурановый ресивер item.weapon_mod_generic.ferro_dura.name=Высокопрочные запчасти из ферроурана diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json index 8142651c4..bbcc0eabe 100644 --- a/src/main/resources/assets/hbm/manual/material/copper.json +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -11,7 +11,7 @@ "content": { "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.", "uk_UA": "Поширений ресурс. У сирому вигляді здебільшого використовується як конструкційний матеріал, а також у речах, що витримують високі температури (такі як теплопропровідники). Активно використовується в різних сплавах.

[[Червона мідь|Minecraft Grade Copper]] — це сплав, виготовлений з редстоуну, який використовується майже у всіх електричних пристроях.

[[Удосконалений сплав|Advanced Alloy]] — це потужний ранній інструментальний матеріал, який перевершує алмаз.

[[Гарматна бронза|Gunmetal]] — це важливий компонент багатьох видів зброї, а також гільз для боєприпасів.

[[Вісмутова бронза|Bismuth Bronze]] та [[миш'якова бронза|Arsenic Bronze]] — це пост-[[РБМК|RBMK]] матеріали що використовуються в багатьох машинах пізньої версії гри.

[[BSCCO]] — це надпровідник, похідний від [[вісмуту|Bismuth]] необхідний для високорівневих квантових схем та котушок [[прискорювача часток|Particle Accelerator]].", - "ru_RU": "Распространённый ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для квантовых схем высокого уровня и катушек [[ускорителя частиц|Particle Accelerator]].", + "ru_RU": "Распространённый ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Оружейный металл|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для высокоуровневых квантовых схем и катушек [[ускорителя частиц|Particle Accelerator]].", "zh_CN": "常见资源。纯铜主要用作结构材料,或在能够承受高温的设备中使用(作热导体); 铜的多种合金用途极广。

[[紫铜|Minecraft Grade Copper]]是红石和铜的合金,几乎所有电力设备都使用紫铜。

[[高级合金|Advanced Alloy]]是前期强力的装备材料,其性能优于钻石。

[[炮铜|Gunmetal]]是制作多种枪炮必不可少的材料,同时也用于制造弹壳。

[[铋青铜|Bismuth Bronze]]和[[砷青铜|Arsenic Bronze]]是 [[RBMK]] 后的材料,用于制作多种后期机器。

[[BSCCO]]是一种由铋衍生的超导体,高等级的量子电路和[[粒子加速器|Particle Accelerator]]线圈都需要BSCCO超导体制作。" } } diff --git a/src/main/resources/assets/hbm/manual/material/plutonium.json b/src/main/resources/assets/hbm/manual/material/plutonium.json index 73ea1e57f..a3e0bdd3f 100644 --- a/src/main/resources/assets/hbm/manual/material/plutonium.json +++ b/src/main/resources/assets/hbm/manual/material/plutonium.json @@ -11,7 +11,7 @@ "content": { "en_US": "Rare form of impure plutonium, composed of plutonium-238, 239 and 240. Plutonium in ore form is disabled by default. May be processed in a [[gas centrifuge|Gas Centrifuge]] in hexafluoride form, or used for certain [[cyclotron|Cyclotron]] recipes.

Moderately radioactive.

See also:
[[Plutonium-238]]
[[Plutonium-239]]
[[Plutonium-240]]
[[Plutonium-241]]", "uk_UA": "Рідкісна форма природнього плутонію, що складається з плутонію-238, 239 та 240. Плутоній у формі руди вимкнено за замовчуванням. Може бути перероблений в [[газовій центріфузі|Gas Centrifuge]] у формі гексафториду, або використовуватися для певних рецептів [[циклотрона|Cyclotron]].

Помірно радіоактивний.

Див. також:
[[Плутоній-238|Plutonium-238]]
[[Плутоній-239|Plutonium-239]]
[[Плутоній-240|Plutonium-240]]
[[Плутоній-241|Plutonium-241]]", - "ru_RU": "Редкая форма нечистого плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определённых рецептов [[циклотрона|Cyclotron]].

Умеренно радиоактивен.

См. также:
[[Плутоний-238|Plutonium-238]]
[[Плутоний-239|Plutonium-239]]
[[Плутоний-240|Plutonium-240]]
[[Плутоний-241|Plutonium-241]]", + "ru_RU": "Редкая форма природного плутония, состоящая из плутония-238, 239 и 240. Плутоний в рудной форме по умолчанию отключен. Может быть переработан в [[газовой центрифуге|Gas Centrifuge]] в форме гексафторида или использован для определённых рецептов [[циклотрона|Cyclotron]].

Умеренно радиоактивен.

См. также:
[[Плутоний-238|Plutonium-238]]
[[Плутоний-239|Plutonium-239]]
[[Плутоний-240|Plutonium-240]]
[[Плутоний-241|Plutonium-241]]", "zh_CN": "不纯钚的稀有形式,由钚-238、钚-239、钚-240组成。 钚的矿石形式默认禁用。钚可以以六氟化钚的形式在[[气体离心机|Gas Centrifuge]]中处理,也用于某些[[回旋加速器|Cyclotron]]配方。

放射性中等。

另见:
[[钚-238|Plutonium-238]]
[[钚-239|Plutonium-239]]
[[钚-240|Plutonium-240]]
[[钚-241|Plutonium-241]]" } } diff --git a/src/main/resources/assets/hbm/manual/material/rubber.json b/src/main/resources/assets/hbm/manual/material/rubber.json index f9718972a..41be5fcee 100644 --- a/src/main/resources/assets/hbm/manual/material/rubber.json +++ b/src/main/resources/assets/hbm/manual/material/rubber.json @@ -11,7 +11,7 @@ "content": { "en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe.", "uk_UA": "Нафтопродукт, отриманий з [[ненасичених вуглеводнів|Unsaturated Hydrocarbons]] та [[сірки|Sulfur]]. Для виробництва потрібна щонайменше [[вежа каталітичного крекінгу|Catalytic Cracking Tower]]. Може замінити [[латекс|Latex]] у всіх рецептах.", - "ru_RU": "Продукт переработки нефти, получаемый из [[непредельных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах.", + "ru_RU": "Нефтепродукт, получаемый из [[непредельных углеводородов|Unsaturated Hydrocarbons]] и [[серы|Sulfur]]. Требует как минимум [[башню крекинга|Catalytic Cracking Tower]] для производства. Может заменить [[латекс|Latex]] во всех рецептах.", "zh_CN": "一种石化产品,衍生自[[不饱和烃|Unsaturated Hydrocarbons]]和[[硫|Sulfur]]。至少需要一台[[催化裂化塔|Catalytic Cracking Tower]]才能制作。可在所有配方中替代[[乳胶|Latex]]。" } } diff --git a/src/main/resources/assets/hbm/manual/material/sulfur.json b/src/main/resources/assets/hbm/manual/material/sulfur.json index be277db2c..5984bf61d 100644 --- a/src/main/resources/assets/hbm/manual/material/sulfur.json +++ b/src/main/resources/assets/hbm/manual/material/sulfur.json @@ -11,7 +11,7 @@ "content": { "en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye.", "uk_UA": "Звичайна руда, зустрічається у великих кількостях в пеклі. Використовується в різних речах, таких як [[сірчана кислота|Sulfuric Acid]], [[гума|Rubber]] та єлоукейку для отримання гексафториду [[урану|Uranium]]. Також може використовуватися для виготовлення пороху, сірників або як жовтий барвник.", - "ru_RU": "Распространённая руда, в больших количествах встречается в Незере. Используется для различных вещей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в жётлом кеке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя.", + "ru_RU": "Распространённая руда, в больших количествах встречается в Незере. Используется для различных вещей, таких как [[серная кислота|Sulfuric Acid]], [[резина|Rubber]] и в жёлтом кеке для гексафторида [[урана|Uranium]]. Также может использоваться для изготовления пороха, спичек или в качестве жёлтого красителя.", "zh_CN": "常见矿物,在下界的生成量更多。用于多种配方,例如制作[[硫酸|Sulfuric Acid]]和 [[橡胶|Rubber]],也用于制作黄饼,作为合成六氟化[[铀|Uranium]]的原料。 也可用于制作火药、火柴,以及用作黄色染料。" } } From 5605a9c3b81a443b2d30e42c43d6a54796c0f83f Mon Sep 17 00:00:00 2001 From: Bufka2011 Date: Tue, 26 Aug 2025 16:25:11 -0600 Subject: [PATCH 491/491] Minor changes --- src/main/resources/assets/hbm/lang/ru_RU.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index a2ad8583c..68cd5e606 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1548,8 +1548,8 @@ hbmfluid.lpg=Сжиженный попутный газ (СПГ) hbmfluid.lubricant=Машинная смазка hbmfluid.lye=Щёлок hbmfluid.mercury=Ртуть -hbmfluid.mug=Пиво "Mug Root" -hbmfluid.mug_hot=Горячее пиво "Mug Root" +hbmfluid.mug=Квас "Царские Припасы" +hbmfluid.mug_hot=Горячий квас "Царские Припасы" hbmfluid.mustardgas=Иприт hbmfluid.naphtha=Нафта hbmfluid.naphtha_coker=Коксовая нафта

LTF51JWZKWurSQj%E$!I|)XszkMkT|j)Ff-a>C1ta-vPhtvbmE*|@ULU1PKE-^6 zQZ|#dIeE1OBZgGjmj3+%wnv!qK8%pfjm zUAl#2uxhRfeq~p#))ROdcYVory+@p>{S&PcO3hdJ9^va9-}HJ*%^S;)0kuSI{g{Ea z+7h_N)9)c@w?)7f6numL)vjH{iGT1SjPK_dtdJzJnn=I)2l_8Hz_=Hzx8w@}L?*Np zr-AB`+taaL8rJ-A$KD8WQZ>Xb)RO%~FXUy23W7>D+#dSjJ(FI=*S*%tyLc}fEDQ`O zp?LgeTrlN>Z%JRMlN)&Eo7n9;Jj&Zh9GaCWH;Sa}n9O!=Y$<#ArPh(2B9dj+&YW0O z19D1tyvz>I>Gh=&9NR->^v`xbiio(ZvdiD^|XqH)TjL+|~d`!6h zLZ-Rpq-$%{BG?1#gI-S{N-1W-k58}ekjFi^C*bwZG8e9}A!Ej}!Ir4Z@3EJvxdG}D z`5}OayG;QeLt3|35x5nb4D>xpwn(x~nfduFZ{226~~_~Ne+FBXgb6^loM_TkPUpOr+jBp`VObVy7p158mNG( zMa{e-6J;)+Z`ry7g_aP{=RF9HxREiG-7)&JA%Fn-=(e@jLSC{+z*C@pG?x z`trDCC8widMZde=g-@{vCT&^5G6zVpf7Qs6It-Q2?!rzpzby+MO4QbUCQ2avN6IlE z6Ws?kUq5n=7j=Gwm=X@i>*EcoRWwH z0D}53K(PvMq;XXdLI1HjW!Af(#w-P8Y686?By92&aAZD1`Z$QG{QE>X5(zubM(yi4 zE#k^M2QFSVzh9Db%&c@aTXehHe$;-Ro;wnULRvBcRLyblIzVaB29J`7`{<;quRLYfw`aFme5dd>aRVfg z`6oBqyn*c~!^OuzgXBZiJmR%-)=Dbt=T+UHU!Z-kCEq$o8)dCWrRxiy$UOV0NWMGp zl_}FcbsLlAQsB1X=d#2q!HB4na(Q!<$376fk^?(*nU^ti_~4>ebvQe;!6E%rU2t^g zJXl<`#AV8n$W4`(y?&+c=~snD4%V@7YMPg#?mXURrIyvl3B4Y!XPwJI}=Brv0k*$Uooi zuOOVbD+Mp0ZGc}Cy2Yt(;Xm{vJIq}mRtDq0kiMAeH%smxEor8fBJ_8bS)NSGB4W%N z^B=9eD`0)3?&yj?k8x2y5#d!gUwieZGPC73r}Qt^?Ud176v*woaQV$!(KFr@(F!J( z=1j)x>2)h}Xq!w^gz3NIseU_6&s33=jHD{`B2pP$!nS8CaMcJNm78sVC1vS3*f3h= zTdZm)q~|gdBCRv0{{+7WGvFu-ZZUPO(z6y^@bZF`j&qjZ6v|amav?jUgz|UK`JFj~ z_HDC9qcIj|^5l}&vFBonJiI2f*fi5H$Zqkc5u%VT6#(GP17KPMy05|IB9BF&E=eOU3Px>NDA^z{en&c zg!l5API_-I-cyx_FFD~;ciS$bpCx#&qtfjunMWzSbp`wq78FUgdz6nl)+~j#oTZMQ zobr8j`=zGkE+nvzR4k4g^&1aurL%Ymo1N4YZffL+^_ zufM?1Eb@$t@l0FsDWP2U{(!n0oT#UY;5VjR*ORT1?1 zT%^!D|I09f{(pu+49YMJ;Qo4HY;EnGtR5Y2Eg!CLo$dioR(97v=@^Pj@`dFh`N&IMP?I#VX!7|M+77o2R{sgUm?9D0cKFk;V!A*Ao*tFtd53Ew< zH+&aGG6yCUEB?IGt^%`2O!oTgJGh`nvC2Yt@?yNLW7a|U?v(4V0G9g?(90`N7>e!B z1?l_dQZF7>952~a?E0&My|~yrzl6SdF`{}WtOyE!286Cxei#RM;RnwArWry{5@{250}0!X{j(e9d^u{J_?WvK&};Bj9* z)_pB6<-B9DbDt8+4S20We?XEli)C6^8ax}I6^$Yd?q-*$57{)Qo7nSc<17 z6p!_&0y-Bo$$MV>!4&>$iFrmD)6R-UpW1R3GoL`x(koG%y`F^__Z>imi=oGwTjR!q ztzImRad}M0MZ}CRLGTh5zQa2}W7zGMR(lwi+|zs5jm(m|n{T+>H>gPFB#MKWlYk;nezio9+&U$dbm{cl124MS_8;`n~Co{%sDN!@4ES&0>sQznSY2k zt5j3hHC~pViT@xzicUDuxxrrg=$L3peNX1z^y?a|4maNNb${I4AYkx`oUW$4?u<9B zY^to!QiM-x7I>|>OKA6QB`yfkAt!Ovs+mD$Y>j#QG3>8ji*!PVu z@ghm!nfGqcgR2as%hp5!nu#%8-`lDPr?2qbu0_}4{wE@mrPDldnbzP_-1K7F-_-+& zDoZY~QE-271o?RZ05Kv%wb-B`I(ULM#X2yWHn=^vaMJcn>+NM}7kaag4dk}fE=-Xrvi1#oeB$F-wctp=L_KDz<4h~+r(%geb}E|P z$$l4JbT5t0ou>7YKdzIl)}Ad~h&j*6ny5m3(ic3V8* z%?&(QGs~NV*vCCemNT7RgdNX3Mdr_GXWkbp3UF14Wl+B3h?EWYP)DI+M4f;KU)~zU z*+Xn-es1`v=ju{*N3@uv|5er_)PF?f{%6|rh_{$P?_HtBPaw)}-`RZU zXyDkUy*Vj%_ula-Yox;GOo1pyWz%XqY7EY?qDduHXA&-FKrP@(px!L3jm-41!9uoR zS^-N}8R+73#z+2nwtM!kM_Wj>=}n}qkp}V=Aq7s3gemPMzuu*r>uEbI{@-iQ96Z4O zd~pHIL&6gcJEzNF}FXVrE4ATm_YR`*sMM^J`bowrjqxs27Ve^Aa>5CRYH26 zHc1G|pT(D8*%a{ySg);N^-4o}>5&k0hq#UxiJx8Az*RkOOBP|l`kBpr zXx>7OW?Ub#4_+I%>4zza^MSHZ(5PEGOae6Ag)2qdmbqmvpclk3YzM%58i1U&qi~zl zN;j;=AZtuXb5X}FrgWoJ zYtBB+T#20naxL;NPrkTD+KU@3dCX;HdM~;+wJ4K_6ckWb>nbKyn7V8{0iRaYrctv7 z7_#6U%vTXz1Q&AAQ>h_CRuoZS{L_igjwP#Iq%<|s@VlJ9wQ6u0 z)wQnjBtBK^vG1~Nhb2buGgyK+t{=We)wXYZ%?v5)mn=;RtaBm(>RoXP5_cCYX43cF z6xx}#NITB;&8rC~#90&M-Dw$gy0aJBP_XZ0x=wHT)b+6Wyd-j^ALsm6Ey4?sLp)H+ zP&7FCF^l?`fLkhjT_J@136b-Ol%|!KOW(kGq{ZQFdXY`H!Jy*RzE2>_Gex`(bS^n!X| za7Hw$U=<7gR3#gbqq@TA$$>kF}3Hn8Ss?WD)N32}FU; zWN1tNt}=@ycazC_QcZMP*|Ii|7hWF3*FWxt24po4zE7#=!c@DanI53jXo<(^xqWCg z0Tt&BGt|htQ?}z=vaJTn=7#qUdz_6oP=tCK!&rtm@G#g{%XJDR7pqs=qeK>jR8Tm@ z`%~8>6+NahAn$q3MDut|e4MGH<* z{?X7V+C;J-w%D#IXJV6A%Wu1^TNvWkTiFBw!O3R1cZ&;m^VUvH>lNz;;_UTGus2(H z6T{=bE68;w_NRPB7V_{ssnkDnJfsQU`luy?d@7Dd<%bpW&Yf=G6fEY^4~&|o`{=X( zC|dJ#B^5EzrIS>d&o5NYxHyst22-%2812n(pL1PUOMSLjz_(|&RTMz~$b)+ai`Fu~ zh|<9nRi>Gh_6so`_|{&Wx5h5WBBpl~hI29psw=`93}gxc?BV=l1p&l5)wWTdOryV4 zJH!KrsA7Z(g5rN@U4~ackXi&3|Knp^b!TwJgdPJ(^o=M+NR2$if7h0^TR*}s=n4r6 zFjy-wXs?!IYkbjcaaKpL zeanece}{V6CUqWo#d7*UUM4J+c(6&2*!GWAowWZYZl)GiH=4&V*{Dj7ty>uWhSS(9 zUX5?gq5Yi#L=si-j9CD+6ev7FN5e%=(iCM9i;xaPfJP`>)dbYD#>BbUR zO?`-y^_wk3W;_4*Y>s=!@LuL$>+5DNvk#UYExr*yWdd!6XJtw{S{!mUupK&*ZhmXh zR2Z7m&4d7PSRbo-YjYmynU1Z6)$G778QvfTX%`g>k$8thpKGNCypf&4#5kV#v8W(F z|0&{_!~%bkb*{km*4~czzZ62|E#1qOFZ7@8cpno)u2|d*wlRvK_F*h|Sk-LtpC3!8 zn|fiEf?w%woq#j>1C;;iV}OuE6G^$$XH2NrrD;cwU3LLb^dP@pC?6lXeTfM|h%gqV zFnWmvkBBj#$~Bkw8O!WGk4xo?-DkZq&68M7k0GNWL$HR&?Ghu@RdS3o8;DEnW_ERP zY!d%i+wOk)`)WP!E|gz@GCPeuAyti4LP>KrqDjSrfBM|O=y!wN0)b~*6}yiBYy0NY zPXiYc{VdZG6acx>5Q=h3+Lmhi(7XBeDFk?_a4`Td(0a_~^vRpSAXv2r=3m<>Ouc z7E{^D{1IEyN$?-$!!U)PEI(oRaF`OpT*srv?qK}e^Wzxp<$9na7ap7rgBt8_ z(cL5Fb758Kb=rm4R&tRnU^t5*?KbM!N&d5{eMf71QFE+@xflEC*>Y7OKOVMnwr_}d zKMyxMNWK=zdFj)$4bbS4KvyB%hyb*xk)Ku-o2s z|7;%PAn5W9vCN1xSuR}F@+6*w589J@TIA0eUvQ$F>%YjqNi!>%L3s;|FuY}}H-bF) z)h3cMJ{Xc|nVsg4W4Qv?hQ@=>4aHq!Z~{%X7!vY9D+vlr>1 zKp(qC-F)*~)J!$vsYjPv0Jq@mpU6K@VE;=pX8(VZK>|uLP^bpyF*c93R}atE&el#h zSGG?!kEWInv)>*}5gWlhONpv3J+~8H@<+g%&?wpo;Z+Wym=6jOBYab#_Y#rC{hV(u zP>e0B$C*6`y~c9%SH5j?-^!8@uUu+MwBsIq_Qvrqm^v(kOPIcp-*5<(&Az9Uv3EO2DC#CYr+ zEps-&Z=)k{)8u&x;o@dP81(%H**_2z>LIB|DYWuVZ8*n&e%HWPQc=QKT-t%t$}N*i zAVsf3#GhlOnZ@rB4|iDJ!okU2bF#+6OIqEif(~WqYT9smXqkxo@SHoetk>0Rnm%5$ z;bpg>fBkik8hO>gYs_utd^Ow5B`&5s1pagtFjQMJurt=~M6${&dORQiA@}K-b$t1{ zWwI`1IFWIoQ6{<91BC7j1F$wN4baqm6)y0N?7a5C{g6^oA8gqQWF@Q`&Q>B%a6m5JGOKrthp=kvw~x6S;eotYFs@i&q!F(VqMUTXZj zEC_x#o86e>UkJ;E+h;@nj#i7$^(S`D-4MasyE6s~Fzs>>Z*d%0BwBfIhXFvvl}hE) z&igxacmz6lV{e3Vz*UN0hKydaOb(32jDoUEXg?#swD|KqOs$`C)amf6x19A?%B$se z%_ePUa^5A7Ql`qu``Z|GJvx%zQRr0E(rH=!dWxYGtK>z|Wg~S+zqKr7BHQ-H zE*@KpYNz)xy7WAhlAwl|pv{axtHJdrim8|02TQNSWX;QVwoXyRP?R*>BVgrW0mtbe zdWBp%NUg7oEBe+etNJ41_@AJ&QkT}kH$z6t6S)pko{FW$!F`9(GR`XY{OS;LOvqCB?7@b$ zL(GpTp^deT6hF$_2br&7t{?i1u01kKNQ@{Ph;-+%M?IY#*RsCY3N;xM6DE(=Jvnu2 zmg&wG7Bl5p`s*tX)M?l+ab%DQA=z=1g1>#l-^Lnq@GS&1LX&8JkThdnI5yUzvN^jB zDBpj#y*C~1vIXDnNb>b9W@hL-&F{Ik0efV;C#K0QC+Un00$(NH8QVD;)W^n_5p4S+Ahqn@Q(egG>)QA9W&yu zr?0lv_D8W8h?%A4mHYT(R<0| zH(x?ZgW@$cGN`yn4?sJ}!So-_#ucPD7YfI|pngHZS-{wmlPQB;ifI*)#_p$as+ zk^hFEv%MZC($xCPlHW^Q${Z(Fl2LDQ&oh;z z-_%Xh1pUXi5y}-WOF9f!SMj$Ooo?%v4~&LZ%D{NM^jET<(MY}Wjh89v1Y#V(6p@>v zZeM-r33ViUQpFj$hHc(8Gqu48bc-C7kPQ3m0*4&(&PxD>`oTFOMc%my05q3aN!@p}b5J3Uc%9*!!U5f})y4ck=wGe+4j}nSv?n=De=uw%?d88Xl{zN~{|`dDf(+ z;vX_z`kqhM&Rbvql^rnaylC>BHMhG1TiPs>Ka#fkuP{$L|FtGmrH__p*?i|`yQ>Fg zH>)+in*|Os5Of9HLrzRP?Nb7j0sjG?r78coc7Strb%0;>c`mT^GQpmfBRPy4<(&leeYv9uys1F*?7GT1jzOk z0l)R~d5M2MY?3qE@Z0#8_KOV_q(nwE&*x?ss(N+js8KOU_6t)V%b2^{WAfSQ9R+&E ze7i!szNgCSZojHVNg!lu|WFR)dyZo6_;nmn;I+bo-N{P)fx+=*k^PHrDbdODCr&8fA-oVg%l=(3S7*3&sIhss@A7`GO@&tTKe0|cpS|>$ z%4|+ueb&3(`Qc^vbQ7!dj_6;ycC?;ct@EMSaU>mhY&D1O*1~mEMKC-?=*pN_$_q6pBC-}h5Gc?h-*3wimlBnubyYbzSB1_lXhs($l zP#9w7_BgbI4R^Uj^o8?f)3)$V1w1xt_0>uV3+Y2dh)RO3u0d@P#B{^h z85oxmy?hjJ1v0``vCe>qX9zQWl&OJ~L8ull189gFUK+NOErx2hr$c+MP-a$pJ0}fW z|BT&MzxIaSS689FFa=D9JlqqRGiNx!ARKH&2ToV2^A z{H$pPmQds(ED=o3V#RehH_1{F&4%6JCZFG2fFvk#U}5h^G{p!ya)44Ko8@9rQ%ikyQSkb!8U8{iOo!eqUk$x;AgiFkqbImF9dXLjLV{stgv!M~ynyzL@Str-PAqis4E_|1$5j0x7IPi_m=P zK}ZR)sn9$FfziLsx1)!3 z-1(fF-rcNZ_@N``^eY|z6}q45JQfC?1sX;99CH^ak3Hy>G5$=J(~s)38v)rR^U;B9 zdSj3Z*t#al${u8kel^#E3-gl`ADy(?EgGG^kFJqKX|<;5shGSLK*1NevTIw@e(wvf z8fK@R@_Te7gJZY%ylB5Ott%M!TuEDL-9kKo)=NquSf}K#0fu;&0@zq93HZG3WU-@E zCHaSA8d85Kb@2d_fH}~Y9)#(G!H>%`bp*P!yZr*aM#*id{TXu0I}H+B~gi}{!Ka&M|r$D zfqhfQr#$l~&CkMaCzcj*F+^US9bZSHA(?qV%_5p<(Y!7Ao=gLdscs!8i~pzEWxhYx zl7);C|GZxlAl?Wh|lMx_G zYB>Xo2Ma&DZR0QS-_1Bi6{do!z?3W6y5WCiPY36Orv^8j0N{w<6+vDQlsqG3M2LXd zk~AI=0BW}V1OF;{Y5vdgK%Fn03dGBe>y*J#gzlhg-DG{-k*g^hVM7Vjp+QwYGkn?* zoZ4t7VaxX=fmk4+@m{^?&^hlDr0LJpFCAg4e=qI*8F@8Q);n|x+f(wcEnRB$Xq~Jt ztN)(P+o&yTVaN`y6BNIVkgu<9)Pacpt>RQ`RT@jd4cf1(uNMBz(R-h*XimJh;`S*i zP^8U%(iH$VC=X+`Jqzi=h^lkB5f{3GGuC9>{@g zk4VBmKY1$=C=+9|G$cY2`55GMzwQxET+6FFgi$saI{-BC{~`=RI8bo$e*-0?ple)U zUoytp-q!Zo&iTpd+3~^F{Lbm#`OX#{L;Y~m8g5i6|5Zc*K>;Qb%VKsb9spe~8V5ff zmzl|#2d{TuEzC(GJ(b>~lxfF@AD}paB6;UoYN7ac}WTt7cfb*SaM6RPYbhUYrb!GWeZN&{x zD(E^jcbHz8+5(DZ{JOChK*|-~acQm(x5I5gn+269mH2-BKEcV#r;d)FFBld9)l(%; zC+Dp#41^ii(UEop_=LZ}wVl+^gOAdwk3w?%QE)b_DF8DgVHIdbK>eTYk*PLsKcU|u8r4}I`r?hMqiLU#P+2)QWwL5P# zr_OpSTQN zsQ6zyO_tx4D5<{S#0G>tt*4`vh#sw)2fgV8QuT8R7ftKU$M?~HaYo2K?59-A=)Y?oNLolNv_3yvI_f2_9~YKvCB0ys*#m3a zl{S9P$E?djH##LKbvj0QP2JUr6*dCXIb8jhDc>OLYp^2UsuLEG9%Iws7ojH+gxn1h zMm8j?2uM)9SktvxAgz0&7{`5)Dj*g6jny;l$QgsPhBnk zjh1oj*drx3PQmf6eQX65Me(TzKwt>#oC5W0p)|1=om}x4_Z*S#6loaU6YDj8j!17) z*5KlS4adP4)F=ZOLsG1I{!|in-kwTwW%h5@R)uqsrW#I;KYmK|SmpW+%fe73kZ9h` zcGyyTzZJ(+UTE8Q`c-70V~hpiE8MUJ#?7OA*n$gZ@akdp-dyrwsB=Y-PUx3Y@!dgV zh^g&wsB&aezj=(x`K0@)og-+bz-4G_`8F=DFS5_^7gjE#VUQCaKg>N`nwMr)hUeEy z0>ZkU980G8FuQcGdz?BP*)Q4yBhTx`-jD1NJabRl;CM=>>%2IClt;}D?hFE%CN7PQ zyjELBqHxW7a_wYdzQbwQyo5(+*E*&|eU1)Me?XB#3z_Iw;kL?6gP4bwdwKJiL zkc-0QZ);S(F6f-qenT$TgW3@V0vl9C6pycq?KkZ}om7(IG}%6cJBfo|z`y4qDlWIC zA=f#&4BvS4FO}}iO_m6XBdbv&u?U`r6$<51)4xQ%?aLVW zyUW_T!w=c)RUX;`=5T^8S~RDF2}#z6*Y3EgNGT24sOHLu{y&%(f9g!9Yt*9RD1*c% zOO+*!!gL6WF@v^v6=htAT4&O^P5EJLHS$m>2Q@}9lfoUW$# zo0~u&f#QZhi~0h8NmolpSIYH=`PZrb@yJpkcg%pY^a@*@qMPoax64baTjtXP9+eQf zcCi+|xErmB+sQ65!7VSAi-;ckK>F*?vgg9))3048CO=-gR}9G6cz2HPMG{P>?_QHE z-``|pq#w>I;*Um)ydI92BlX3eJF#8WlsHV&U%|aLV`G|yLk-6IGpIby94H7HJ;thP zpcok8rAXcyg!$SN%jxbe1_^F6)fT}(n?*-C4^ZApVAx`KwQ{b7T7f81S{81l$XCn@ zSZ?=SOH2wlhEgOqoyGis1>~dT1UC;)DMey^V=PuvJ+DijORtWou-|;IYK={$3`{gExHV;F8q+0?Ri$i?_y6Z;TTm+k8B^L#Wb%9m$&+*))!-$;Bz ztH(T>=2=&wHXoFnxi@g734aAu#|Snr)sH%P)oni5JDTe?bDt=JGCX53GH-RDbJAsX za+aIAY9ti11w$Z@nT)i(pKCI7{Dpqt=!mPn4)CB{Mx$1|2Dox9Ur*r`AjbqJ@KN@K zBwsY)G7D|n;~jzs7;(=opD&_AXy`d^b@m}E-&FIQdU4XQ!_KkmGQvt3W~=3H7GJe> zW2p8(e8d5p#Q`G)EQG=G!Go6Ru60n1N*oBT9q}7Aid4 zAxd(RfBSn+YHqXg8=ZnXGFxNIfSn&odclw15U!E+1WZM}2v6L7m#ldWKmEB1t!5Bt zPqQdG9nOe32D*df>jOOx`4&Wu7Go%hRhsm;1Iy}y1xEK&$rV@bh&U<-D(LTKOpzyN z(%!gJ%49x)eDhV0FC+htsB;XD>y7sI#I|iVHX7S(Y}>YNqj4JBPTJV!WRfOn)Yy&B z{IB;t*ZDO2`&@fJ&syuZ?%PuO7fv@=P2;avdA|C%3T@rI2u(R&68a(&)ts3k`nL#k z#8IltkYle}sydoIeR~N~83vL@CP+G3mz!g~nPfB=N z&X@;az>>4ak%!6T2aBJYFzj+EWAp{W$mfk0v(FF0Du3F*34BLypLh8ywq{Lx$!#y` z{viID9=nP4;l=h@9j2&AqqH`OtVNKRd}r^oaQeTz4U&>YRlba5s#j38GjX-4uoC~c zk0g!Er(UlHpB^ZVpM{NC-jKgLrykheQ7z1lQ$rohRc6PGB*RCJT%JcE z8L5lBB&eu$fxN|`ZDv03?v#OZ6FPq7))|Bcdw-R~RCBHpJBkMycMwIHwf-WG1O0G$ zije^yJ(hJ5eAsQs+~yA2%Y@ds-~!S^1_f-Q{|0X+=D}b3Lskyrw+YL@+CE<0Y==PZ zs-_`aHLrg<5XIy1ad>!v=rHjr@$L43g4o1zF!1fN*!^zW6EEJNZz2pz7B0PQ>|02R zi*J=zfqA}1A!n8qXgs2SOLMfm2)2^}wu0VPxmR9QMJxnR<0PPHk(4ADbgd$bMqV&jeGY)$sl- zf$8f%_nBk=d1b@a+sUwGSvDLoMH(Fq+&da_5tg^Z@#-exxO#JJ@f)OR$eMi2rOlo{ z^qlLMHteWNLLaLk#r5xYMU>iMhqOvz|BR{_~P!e70-_MGHNjX|JRE z`=tQlpVyi(lq2baft(%~7rd8q&yax$LX+J9s;mQLWvVPZ8S9)PS=q?+KsPxLEoe1@ zBiq7q>E-a7L4X`sCQ1}Qu?C~?m5ZT!lpg(w~ z?9yZ7<o2R~JY?ki25Q1PVBpYS8Q4=e4HaL^zxp@5DO^AQDK&qxaT)x}EqH@7 zyRM7kc6X4IGnR)SS&jSxtU|#VzVTf&qN$mfPSJ@t356vkx9`FXfpBpZKI879vk^t} z!ZL4G&r-#+sI^^J{9b_suW`*7E1Tgumh6JxWyAWKKJD6D01ogAzkjSoL|eHoWQP+e zb*C0tPxguk$84T%-XD$fz1xN^ANapZw>WP*J!|EitPm?CZJ=rPoVrGoFNvoGGG)tg z=eB?S2537*=nQCK5GnTf=~KQ!^+ZumPxgdwgX5M*n^#nN>V9F)12K`K3?_nqyOl{V z24HRLi&8HA<6T^+#s-u=7x5k&BQ3A3QgdP5;w{Jtvu@TSlt+`yI(CFY{2srZehn`{ zvI;Gav@JJ>0~jGGw~g8AHENfP{n0v8LI?_7lR!~B7O8cS%psh|bzm=8N)7?ePVc_X zZ9Pp@`ia?z#8})X>AnC;06h1dv*D7;DNW#Da3Qx_kUHQM(RS zd&tf2`g8!xeR)>UcTC@sI~N?W@c9|lCfkWkveoLdH}MxA7besVY|s5_>!9h;dCc;+ z7APdMwbL{cDrWMU;@h<3F(h_k%+5iy9)^#uaFf3wUYx+)DWFo%xGpT%pqK_sY>>$f zA+?iFoC&Kyq`)}G$Yv+}DSE%?Ix*oePuiw%TJ3cgF7iZD`B6$nlI+@jHPG|Pap<{C z!ZTfBEHmegr;BE|Ga5JkGLGjf+!|7+GXb_BC0^ux{0OzOdSxkm$-8(=yfh_T(G;z#5W!fMd`ORKezgDX zdf5D5*MkDw^)N)K9K_mPJ>I=u+uQ$pzPf&}0p3J8-2wv+yCfID*)jh*5bY6`q8@7! zs-0AF1rtt_lN>iBbox4UtWpF;P4WpBObEK*V6IBzU4Jx|IKs@z+=|!RXVB1u&~l$* zv@@CE=j;JblJ@w8Uq6%oqoJf(vz=9&8yL>xR*;WZUQd$SxZSM%O5IsMEp?H1nfJ)6 zXOd;vsM)D&X&F6lB$bpcEIAvGAky&7fVR5e4-~F)`Y==i}>iH5EFIL=-Hd|xrM0+Uu zw0=5PUPDafK>O@qn#m13W7@9kIae=u>xJZrV3&HH;pT7E7Uud96xcLRKxgj*u5egKoCZ3CqHq zCpP8lAYcBFDkHEVIH&CygE@hO z6~p{0SDaCSM#UhS`2a(eFyH7sw~BaoyC z+9PcbDKNaR7kkrA2F5R>F+#`D-*+Q(gq&teH-1D-!%R5H0DDi7`d&}0KTqdBFZNZ| zmu3#f`#8rN`Mv`iJ)RBboQqg{?znV7Kak=tTIO$Zx`zWYed#=^K zft37x+o_YSrw0f0{q3sA-M{34%jLA z_SF%~xCj7`=lMHSYnx|AyhVROJGtEbD*51CD-F_F2B-A99l!ZgC(!eG`hKlXcK33N z#jV*ickUs~#=po`f3}bT=x~-&hM{5l(_re#^?T0++g|;G(-!4f#g>zo!t0_7A= zA0BnjahQm~U8DNS(;@p9S%9o0M2z+4SB&y!Uh(@!gL`c(vQ<}jm(*ITAVXLQ$oV?B zf5>hKLa8DG&;-9?Fxe(^f6Z6=0<@vPsVVNJ%FYT5OMScKeh{Pj6de}Fiu878RJsg! z?05_lOJDOz01t?A-)>tHwg=*0jgOySy(jJ4aJ>06g_bDoyAZyf1l%{7Cd6Jv+2>Wv zJ93>7#d9OrA*p;WXwn)eVF1DEPCJxX*V=2=)kr*W})*1jO`691!&A2Sq*hwRR| zYtz;bPl!9yER%s~%O342jpw~ch7*t;`;Uu18}u=jx?C}hrGL2$?RVNCtzHc}2ZoPb zGOqIRe|Ck+Yf^FjWJ3;^m{)3}6wNnBQ*?z)l!xY`C~cw(zxV|O9dzc|L>oX*u2x@- zW8IB9lEG3{M!BBQKs8Bp38C~8DN|BBHKFtnqIhezYLM@<{ej|(_2kdPeB;eV5tTBn z(V@MC!^1!9xBeT<0W=u328wH1p00);hf{1DLgO}VSQC9r&lY;LD7_Xek@$B2nxc^`rrLopxN9f0_PMi0;Qh zhkC{}PBpvcV2WjEsL5eJ7dG0m|4@UC2Xa)GVJRx$NY|ev&5-C0;yDW~podH^`0plHrsE=s4>?@@XR#oDX1d42$PHE@B6htBR6LD>2kJRU+K_a$U3?0 z3Z>kNDS_33ox(N=#P`T4Z~#Q`2%rZx4}oMu>HDhm9@Sf#Ry@p}UTiNm`bl{8En#De z8ucduTS`XIdR8>aW6$yMD@v3^MQ&_FwdXJ@RDo$n|5H-*QE%d?ELyUmf#bAr0+8w< zEWv-e$^)XJ0Kd(Ss+V}WL4TH0DeHXNi=RSpz;+_(^1P=XD5LZJRg(0Ht9_yTodOas zyEzR6foXe12SFQ>XjsFzS=&u4CQX1}`L`DLfXF7Z1D0^6EZx@dXh*L;$gUqkBIH#O+`98Qxp@w6?{1tDMDv z1W#~X zwnNdOJOzqhne@331gXPV(P8;`1Ub|Y;yZR>y+s|`Wfglu=qXyyOMI3yP!KTC^3I;B z$)2A?z~A6;STXmYXgOblfGNww&(Y`qi1ky=J-&&_}@a+4i|FnBXW}WO?ew+XhM*Yi;#4yr7N;a7N@A=*mL^jXg870&B z?y5z;k>W43eG=MEo#X6MWXsO7lparqSg6IW@NAFEcwv^vOiV~AN-g50$4-?|sy{!o zawOD5$%%sREDsep3y4*!Up7I0#^EZc@@U-BPnExYNm7|KXlPT}*rh8MO+|U@lVk!_ z1UY90FC%?Kn53U0iDXDW1R^RMwk@c$Sm&R%y83P2hPZT19gXgMEvp-i1?7db?tYxJ zTL7g}1vRE$6x3E>y&rtC*R&My+pGu&&p8%@79$ygDA< zG0(42VwR14BU9ABzk(i+eaubaRXjHlnjzU&X3@B*>eWzKrKzt=>LCOELMvO9oz>1T zq9+WhpW?=R{D5KXux*+$Y}E`_&-e$+XTr_Ew%f%gjswQ-KD0>xSKL>$ZvIk?FqXEK zLt0TxMAR#;$xBHYiD9?=io9L;b~#F{jW>S4;G)v#e;i!cwSBDAkjT9MX*KBdapN_X z9nXpPK0Usc4Z7efvIxkwz#}mx1IBAt|8(lC8!_P15`3v@7|`BkyIRXUd;TuH?Joog zz3C^k-O4q>)7b4puNM22Ge3B{SbXFOP%cB2CpQWe;HnasbFIpvZ+(FeI&vq?C2;=U z=~FHiGfgVrn_>7IgIRsIVPWRq^?4Dj%9BCk`)b4Gf5(UrsTX!TN)RpYBJdTz*<;Zw4J6%N@bOhp?P_^X zP}f)XEdEh4%LShdzP)vvdI`*EQ^o7Ud3GN^dbJjHk{kig@?Vb)o|XEUy!nCB?Hl)2@pD?XvpKh+Ge;b$CX0))tU7|%I{MPov)OV3>{XalaZ zNaCEza&5TKQ5naB2^-S#E0!3qbZ~|>LMh(RX4%G}-0vP?)bNNUpeM%YG=Civly-&L z`2fpHQYhj3=_T7Mhv+`2RIIHv0Dz&k|LbH>f;$;mKTMyoF4iu0_VzBfclWOTT>ah! z?jEiSBV{$wdE`dqDy<}KJCW4qx`r%?&8`6VBv??^*fFW!!zymUpCi0QVxjRANc3?< zZ`9|w`N$2$bRzBffg?K3;OLSk%MIakZ6>ea;9k({$ep`Jmiu%ct5!eTtPPFfRL~s5 z=8`+K3*6{W7C~pP70OE6a;`6Ibm>+DuLyZvWcV|O2fN202Cs6gCe^=goA&Z|FxLy- zbGu3#GvE~SQrj#Y!2JvK(R1hv%20vs%K*UjG&YXoY28m77o1ZZu3goNLuI7h1imbM8pvpNNyL|A zMaSSIngp22pLcNSRj4Em92rQ+`8j`T+s}3V>G_TQu*3r{t%dB^gJMl&ZpSwlL zv-lQ9hM#`!o*$P9^^1jzt8m;qfqeyi{M%#aZJWAvq(XrMdZ)nm9nJu8@&n+n0A7Cz z%Wj23ah8t!MWcmV8#hSp#X#k!hY)(3*L3kVH5o5sdWU;XiK_ex+?L>se$QoS%G7|o zQH)N?L(uf$VNAk$=*T~Zxf91U#LPN_SF&o`N9Ou4{get#nWz*w0gTk__D24~9yrHE zp=X3P?br?rW>t9r00$1tXJ{xLH}5``01LF#U%A^l3oOMW^QxbkdP$fPFFKifLPGKS z(97Gt7T};#sGiAZFrBfD8||!ut$}g*yo|g!!+E?>xx=qOG>%|@D^6gk_TUBZ?Tia( zcj;7kq{~QFz%ruVv4|?A9t^^v?F&-27VM0FHm`6*klz|8Z;5;q08}LxTnx%1A@VsA z^~GIN(7RjzNrnx1uhp*3a!@Sa1+0j%8xApYmFCD3BDG_{`IdCK0g(p&`~X6?2(0a- z^F8ux=B?nd{hGJ74T}*C20)CE|G7aE?VErGYhA#FaWgXb)~$P}zOrmi@Mk3-)Q))- z>wU${o3hqAZ!@&wlSYnl_;)dy039-u_t3#$_*bJ^1{%iaxdP}rd+goqxfhzt0n zq8)uPj%qr>Iu5l4?4(n^Z(Z?X&r{&&1fyu9L{oehk5Psgx+0xoFTp282JbUGwv3l` zE#@@k|C_>T`@s&@*g1{_TEqk3L|38pn>OQe4Ax~V0NPgyhHHMJJHU>=K)v=wU;jm= z(FXN9FAo1(>)@PK$B#OLhB>R9U}uGjdnFf;>jrn@7K?xLz~u<#j~)e!I8q>NJ~V@R z)cW_?s2&|9!Lpeg<4kV}gU6QHJG{H<^{|hboL2L4C^Sgl<)$v(0(Tp91S^vpH+= zey!8`ywsl>p@KbK%(lU7w1#v%zkzpL1JCztMn@c-7_~bHc*|^B97mDC`ux_=%i6NX zk`8aNEsG`Kb?tcfhlpbfD=fcO1`jqgoXZRi7%h7}NDacsqYr`jP$2b;Q=cJ)ILE#8 ztECUM5`}BWSclM5btqwnH-d+FUOh1YAGR5m^Lloiz8TDAtA%=V`i5sdj9bn9oh;tN z?alU9Urh@nF2oYsMhC3kC4XdB3lmiK(lO|l>8t>qibnhOt3hIO%;%)pRQ#T6Dbh9n z+AaM`&6w&oAJKRFqkJ`ruL_my=ZUM3T=#+~`8cL0?C+K5V={f%v%~B+|IP;GhisN{pjZyoENdOEzv7_yF~3I(_uw z&dtZsd`(H}9rV7Kli`z? zt!<|ZlBn|_G9ct>917f7Y?0Ch>oIs~8+9ejGls#pzUT%t7-Z_4ug$;Z%Fjf?VMDm| z2fo4|`vWa|vCx#Cw$Sc|C!TMtsgBtn>*~*Ulg1g`tv3%oat1_5iMNWrEnCrhdMY~i z1uui)BX*q_hNtOFS06qR&-Kjfcbs`La|n>tyP8TBJzn0YJWt-e=%s1TA^?Nq&#bE| zd)CBhG#tK&OBXI^PpLZ?MqeyubqX1#xf@>nB>MUoT6^Feb`j?do~Lj+!Dsm)=L*tJ z)~a7u4eami4#Zw4mfIyg69Dq{EFECTxHWH-;H{A8u}4~xGnI1Ai|EKLy>?g^<{pe) zzVt>~fDEre2(8ADsWf1L3AvcDp8wu3X3b8185jM&!#2r>MzCh*Q}4O%U);!|vK&>} zvv|Hb_2#*IRlYT6=V`d3)Y3D03ppn*+tN#=y%nL?H}bvS>B_;qolTIYd9$3%|6RD% z*S>YW(RVs}@Jq5|&yjm1>KMy!@w{XU)ZbVkKA>Mt@#`zhhf_T3(O2qLASIjIQMu)m z8uVvgrV`}C#``$UdX~AarAqRtK)QMe^u%_Rj56CiEhF3d1FlM_%zBd8#u#yNz`FPr zvcDRRZxH|)I_OIh7mOh+Z57GpgO(v>j^as4#mWPJ2tesuB%|y`oJd$`7brU@sHKIB zl(=2LMh<()PLOKWI8$HW^kKW`QsMsE*5T=uJrUGz$d!9#lmB`oaS}A(E|BF_t4Way z)P2hP)|1X$u-{FahMZk-hpp=+i-l`@&a*z)dG=)yM&W!5)Saqj9bwGcpgGABz&Hi` zgH7PAxoKp%)24$pYg}vt)KLoaR$9XweKb;pFS($zweZ%QNrp@~m1nlaS^ow_>Pf}i z@YVx6!aM7%d-$p@*wi*z*x{CH?!N(WMIaMEECeP}MhQ4%Oc)5ZAT|7FwYN!V${#T& z)qy6OSr?lw#zdl!McleRWmA1H4t(4pz(~@!1uiD(DgY->k2{Jw*6zNP*-zI+kDGDr z$PAL=UpBJzFUZomy6&dUw2~Wwm0cjL?C!ZIf`<$PTDe}S`I?g#T2C=U8msq{P)Cv3 z?d5JqvE3P9Fc1jo?jip$z!v?DMX#XoG%GVN&@*=Cd~uz&hVWEIRt~mwW46G#gh44# zcsZWvii=S5z;;l+%s3Q~7$(}#Xpjr{tn6l8NM|#(Y2tpxG78X3i!E%Q(vzVA4bR5^im^*FKn=R)IwuV+#dHk&@OxHt^3b^j1{%w=tJ z_?Uas`>wzG;Eg#+kT*8my0c-8@#KJd-XGAelN7dk6QDZTq04mVyEdz=Cxm)1zd%ut zFBb+A`$twSgEBWejE@=biug5W_~riJVr8=ZrLU=NbFiVMeQj6wY##gs?zYB7h2n1R z$+TkibuKvpOLKZ3=VrR1`us;Osp6duYZ_2{uoFVv)X`R|BM<21uuL{SL7$~;hintW z{Qmixi&6TL;2MYufQ=G^_3k%R$O+fv;HuO70Ozh(;dI!pyK7tbi!2&} ze;-SyMM*U^9g61;f_@x#(WRix5|B{m*CZ|${`o6j^A(7AJ?WPvX!n6|nO>LHZSMiZ zPZ4j#8GiI^3gsl=;Hj_wI7M0y)#m97q(AjRTs70efcQO~9W#$XDic@gag_Qatygdp zFzW4~#K||>HaB4Vp_)FHdXQ6EFRHpH5rOyiVoG17Rsr_(779KNz%ZKtdZnC(=k9-_ zl-euy|#7S?Y8rjv@xG9p;Wi&A&qA=9C#d= z&)5r#besm{TxHiv9F5aQyI|qn(IgG`U1&?hKpkmSJyHtaO~XVex>F6~qhD0Y-%zVo zB*i)iq2aEBy5t(fkGy(kn#Iv4oc=z4blY{KeDGKpciBMeTv1n{lDDn;?wvLQZn_p- z66{^dMqfp8>eN{3e*F@a4Rsara7AdEHk9R7`F?Bi=+@EopZS@xi=53^OMW=_B8aJ})bF6c=10x>W? zNJgG|GKTq@O{1F#!5aKRQ5<17I$rJj8W z8KA0QjEGRODX%QMvjBLAJEzcb0u%jywQ-=dUMFc5aeWUM&Q8DZjy5Oo?j_`zZOLw% zN3HXMi=Jc_E}};Ivf9n4;*e*l|1CwRnp?V$(f2MD&OCJn^{PqJg>2-lqNzd`y8ds2QQSojTQo=KZ~M#Dgf}3!F|hr31Bc%RTanK zx_tSitc+ednCn6za*jxGI+(lCQuVveL)2|WZA0py0ZrW~|C{6hAcDId|8IYV3jC|d zuXu*F{r7PD@AC1+&F;n4;m-E)&e6WGfscPL$g6Ir4|DNSx?`f7n(=NU~Gv4b) zs{V{&xC^_h(KikJ_SER*x#UJhMEFX7+EK%2FG@sln ziTAP2N)0vlBI1YVaRlG*DH+kPPT4SWrc}wehr$-yq>cvA(J>ZP@a^*Rc)NzqZ$kTE-I~zPbeDtV{Y`Nwxm{WtB&G&7Yr{F}ya*;gsza4C!TS z$bNOxH+4 zCWA7VP)P2qk|%2U6$^e|CQB<7R2b?U4BB6c+AjHg>-gsGWCqR2R8rgb)^aA^ywFG@ z1;qhUZ9XW11l>MPb3R(S84nt}kx4@ucOO%9yq^z~WzO#o^Ip%k zXIIkUnSoBehp$hzrG`bkwV8MwMcJKgpr<64qBV6&aaOr^PbcH%M5QxpwJZt0E#g-^ zlpNQTjooCz5ko!qM@Y!Qm{>MB&7>9{Ov>m!CK|0q&^g-YUEqoO87anchFDL1ymX1yw)TDq*JX6F zGtY83Yhd(8XC8O{oG|CgWW5M@vz5yhSW#C%xa+6GdGUEX+1j2v9AGNod7q&lK-3z( zI#ydc9Q}uj^N1l07@x0?z%0M4eA+qxBH1X03;CR$iZQ*Y>uwhE`;39B_lJ$&X=Zo@ zfVF7I-JdNGgS8rgf#I0%IHd_XzdLAt27ZB(xPEQov%+5vx{}=~GjH z$%Q#q=F@cV99UGSphhD4)_ee~++R+oTLCQnyM?F-BxIH;JTZqg3;e%plNoHJQo?D z!#T5fAM20nDoBz5I?i;6-o43HSVX>hmj}+nG^hm(@o6rWm*>nXF z9|D>1)cANG#?3Rl!FiDrnM0cqz9j4)B-)j1{+Wu?J?}%!-aP@f=?(NKvZ>Fy%4!xa zxzYkr)(Xf2RQ~A8JG?=`@G7K@OWmCTUt;<;f;J_XrMCz)0F@b-p|0$Tj7=T}8qu%M zW}f0O4b@v*g^htSA%tcfX?r_S2OK*ETYGzw+XsG;J3E!o?Y1TmAsV-PF^eN%IetZE zdg>-T8gCELNq11ILcv2{AmX0=)jJkiiBiy69|Ii#^qB3O{D>3eR1Uk&3X zY@#d`8vP^A1&-9A{DbnrWsXv@5xfpkBBswJ7y8=YZyy7hK?h6;^5_D~6Q8tgAHOu<^ z42`fMv4Qaw$Y=)aKNYfmwqUPoHr}171aB;Pb$9zVM3*KmP@mqu%@r=GcC-7%EBMA2 z0<|_k{OJC%)u&l#)%=(iC`NMWD&}zmlg0;C+bf55S5{kL4!b7%>*w0X%sH&-MJArj z1-a>o^D4IGs`fUXlIn5u&Ky}K0_R;n7v6}=e>4_%rt6_zP6BB$I9X^e-S626Ls!Rt z&hu>8S?RT*E}TgkYm;oR2V}=~VNgMn%;5rz3@$AZ^T^???Bt`y-K#OM1@yS26RQuf zee%B6{@&a_6;VYwNcc*{uipnht<=&u?p^qP@2)fI)p)U!EqN6Lx|IfdLfrH`KND8$;fqt3iC z1e1lSp&x>SyD}rdH2Dyvg835Km8y_mb{fsy((w>>0*pDpjdQ3MM)0wJ*^1y;J&cP&tIpWNQA7=DkH)L5_=htFB=1yYxN#4X75`dCC!!0~dqRlr(!LAU8dvE=?#hYr1D`md_X zx{fOihwLv_lrl}O$f%LN+yzE|l*s7gVLFsPn_=1~wTq2G(fY2$Mr!~=9fVT$K z-`&=KKe|!!<`usu!oZ4>0YqVp1e4m@R}=+-IeMWgaCy$8ZWp*3g_cw~Br ziG;522D3U==*3Apw!X8zzE{#8B6GqfuQAx%uC@DH^Bi0Ysc`V38TRpP1iQMt_i1Ob z8&Y`pU5wuH*hRzM)#RJ+Too+`b+<3a8uGiNw!t*7?o+zSbpfwKrPX7_R)d7HdmZ5* z40P~>BWLR7T?)t`$?SCN6g0IC$8E{W$5*td7!*TSzw{ouXjd9$Hj5OhMA-@^`9#C1S;MrI@!)UI zYhrV>4Vyfe%WTvsp8XrkhGeA>e-TOpOFS&Kiy?0=#MDHxU2yjWh3@R)S#8}mx&OWr zEy%npW^}Z+-+TDHR|xNN_Pu-eVi-Suq3ad#^z3irCsS=^8y5gDQ-4SY=ddQkZUs$NG9}{|c?l2co zAe|o$(ETs>9`O#V_=u2-^fS`WnVZAnX{tS0H~1rLn{I7?fbHZ88Bmh;;ba=YA1vb6 z;Qj4`1_yaCZWO7>cs9l;;W*_EU&Qdn#s z7+Mudgu)T27Zn*%N511Bzx!BLWoJP=x>^6Hx0aJx7FIAvkf<_o03+MU+^@Hpn~$sd zENO=s zH~011tj$4R9UUx`kEz@{!CROzW|k>4NA7_GtvtyTx7}aZiREU1Qts>E!lHqNG|IJ` z!1rWNOSkBimE(b7glQ^S-wkH_BufESOY@I;>C>FswN6y6a)V zMvdz3xCKIRqmenH3ldXi9Stfrxl`87epu@Dl-a2!ke6{Py4Av(O$|@Sszv|)5adHF zVk|xJ01mkPoioVRciiBh=eO!~V5a3MNRk4eijI!EDxqkqy^j*GW8ex%M&EZw=>TP8_{0OtsnO zUT52KF@>1h_cGCMnO;eAF+t(4(~8{gPLA~0amshy;<1p$*0IvQt;J%i>Ek$u#?zM+fJJhkt*A)^@IT&JK?Ej}L_N6Zyv2a@AHQy=*Z3xjDwz2>vV* z#1I;eKa{z&nW)Cfg~b$n*ut9**(Q=Av~BfYep3kVq#L|=lz4Ro&TJQNW={7%*K95y z?tip9`qgVhb2h(!ea)A*!UPVtbo%3di3i%{?lLXeq{j~$%p-Nwah%We_K!ArKYe5K zfzIyWHlO#}Zr5$&VSM>Va#?`X?TCMBt`I-iHS6CQwgMeQdss9jVz@SY*);`gO*s3`$oB43Gdz*M%J!xV5kLkYYEu#I&ZD1! zF8t3=v4ngAz5``}5xUot)ET69v<+|&)HaN)vslfQ2^dNm02h)gm06IJXZ77e=Ae3+ z?4a_Kk^VBlg%u9J&+~^-zJWn2VdtlHUp z5!&iEa}Zk^Riz@b7EDtHz{W^1kjl(-hu?Cq7c%Hz7$#EvREC$hJNafBqWfy#Sn-41 z*bUx;0tvdy*D2=G8{S}P7^-lZy8*7KxNR=LUd5?%=^i~@TDD;9-A;vAm!^`PyHJuz z_5{8}1C}6UO*lV~(W;8YjgW&SZ}(rnw@i3`-%8$W>sWNJ-sc z-t~7E+QXX0+CNsVuB%@2vw0-Cj^4dgVgcAyQAes$4;@K!q5bHC9HX;iW@q#op?3ni z^mu9XaRWKfAXk)NmP{W14whx^-RbQ$;tQ#LVUO6B3R0rje;fZcruSY0f~69bc8zSI zmpVgRLy{$85eUCE`04&aFrnsoLKH^5DVLd!gu(*E!(Wwfy}9XC2?GFK!hnydRY?a0 zMJKnjiHfaMy?QKm7F4X(=&cxg*gY{b6FW$%)Cf{PzdXnxK4OupuV9nN&6$80qw^3*Si$iaZv!^b)@6T(A;vGxI(~NEK0o2q4#6nRZF0U_bv_TesX^+%&Ob=h zFJ4@DN-GA%f02CygvcHQ-bamR51QHfTS+>{x__S9vAf71!jQ)ne}}#F&xEDt#uxAM zi!v=Fhq_4kunRkyfEj`V^Q`$`3bsQ@N-C(Ih%6KRTiO3RZQh_%Py!dA8xbkcrB6%t z-~k^so7D<=)_Yz+y{qW@_{{hMLX>fpt)$!X7~W&+W8fUfe&*@L`4ztix@YpMk`{O7=) z)%p_$6(@|69}3`j+x^p|$$;QE&Uuomc(S`5*%r-(u^wV)E3=9^AlCxNwZ5y@aSV>O z-droP3MbJ)Wg5yLyP2av^C*Rqpb-+-SJ%4XrFX<5z(lbJq}7g_4m6a%hWl)si`=K*9~ z{N(K4&1MnQWy`|T?pk!=>WWE%V50E#N9upZerNc4wA^-?E z;H)`)itnEu9oC~GJx=Xk{(6;fPVgW_p6j;r^(hw>NPwr6<+^kj;A6;=eoyJHyG{ut zk9TDmrc^`4u8`yLF>@|GX;^i|beTe!IQ&r~F`!_jzBT@O$(eaEm-hq4fZ>tKz}l0c z{_O4igzOqzVtGlPzZ1@WDs=YpZ_O#@i@2GLSiu^0F3?u-bNVg-xK3DARQpa^;hmw7 zKlHU4Da*4i&=?R?RQ7^grzV7H`|vOTA6qzGkvUv33)DQdmaz%r z5U3LB83-s5P2K;684(%s{kt9Axgj9HpK-28|#FAv4 z{&y5;f%LxgGg>SdFc9Km2Z$E;tZB8G@|$zqTV;bq=cj@w#V&La1@(NEX`A|BnI z>AODMtP^vET{X>@z0a8?F^Lbvh=XTA9;P71K(p}8Mgr*Ms-zd?bQjswn%5s*za{k% zn_snmPETKuoE~=_TsqE)&rd*oEqzYgY=60N$!rigl9qBJCJ=|WNnaL`b+43h3;;Q_ z!wY~Mh7F$l zOcSW8m{|GNMnpiOY!D~XkqRM=Kkf7-ar7&+rSytSgl{KEGBwmmm98G`uQBrWU~Pa@T7f6DXEJgdHKZ*Do>qp{Z)xG1~fTD)K+%6EqkLSbBKFi z$wpyq2IdrD^RGsNwFJHh`9@ZllpnEz_??mIogr#8tyvjfbF~l?)pIurgXw$OLot9} zP<0#;n21sV2yiR<%GyNCl{yKH}Ar#VG6Qg4XIPEcR(@VFDBXd`-{w*eV3hI z7%g?kCa{2ky?bMqKd;QXeV+l3C#w##{Ekx@SppT7KA)w3`lP*lx;SJ(&P^M@u7kd# zHpfXm+{X@(*lVj@Vm>1Z_VLto$eEz-Uh1N{Ojwq-;Sm42eN>OA{)F_o+M?ga2EFJo zP@F2Q0544X;-#i0y4e>T#x=#@s&U=1hu?{GS{v|V6(-+PaT=rn01jUJ-vq?u59iY} zEu?q{AB@?1Ev;V?7*YKjM4v(s0gVgaUKg;8F5GJ+Sk^NIXE;-K9qu@PnGZm6QtezA zorg~rjN#MTZkX8i{FXiUj$crQ@^WNxy66gaKML64Ybzfl7~Bjqbgom|O|noZr=>#?pq-=9hB0=j+we1Rwb{b%<;>qyHEZJ%-*q~<~=;&S^TNxQ4I zX@nAvT2b6NEFdH$C_aLDh@WMPmg5lh#^tSY_hGQH?Yul%mX}Q7Q-vo7Fb%PDao-n~ zIdB;Zc6d0-EBweCxGdswBaFT)D9aN2OM(8aY*7dIr-<+CBafC=#??qJ&~NSiYU}r> zpVw1ZfS&NCbKm-upkJ?t*Ot}M-Km97*QPh9n-Tj&aN0@8F(zJ&aA3t#NQcQmuFL_@ zcz95ZmWOrc4Ac|8l+8e;Y?Dzr724(A{rz2!;ot4#GxxC~CZQJayrls0JC)!$zan~j z%;W}(s+i#rIzlsIo1!=6W-!mjK9>qM8*P|!Luw_ZnH{A{uoyF3{|G7#bg)eaF%}Fw zjoVv)bjTU*sb51ded+A@`LU|KrnRlSnAaoZlEbjUWm!_uEYlI!L1l02&hz8g zf2QDwiGQO0%+-HwLCYrRUaT|64Sopgx5WlFsZsS7<8YX*Hv}(C3rV+8#Nz@dbEGmB zr62zz?d4O&Tb+_K&YLB=RLg>egviLps2efJHuMVHC9v~aDJ@{HzwfE$Hb7J%5hU1w z>VyVo8mz2FBeRSwgv^rRSHmn}ol>nPWDLM!bhKlo69FTGUhlhSDxroW?U1eibVO%H zLp8^?N-YJw7M;h4T1(KOz5Wx$RzVnUiO^ifbH`>sv$_Lbz3#xx>F@_Fj_^oBfRpOoLid>B;ni|0 zOS|?(G?1??ok$<68{5wBSDK)o#1cvQE~`~7X%`1K>%@J4jR;q&{}ZU#9VmJvD?n8o9pQ`s zwQzB9WuDz`ALsr#G?4E=(eamwzRqarK0>LaG@{+|Ye!B&+hbe##>T1p`YKVBPGylb zOH@XAH;)4MiF=Wx7BD+24^H1Z$Hbo+1vEtchz5;wJHbWXVBll4PV`KjqQAXrU24V% zfjrDOE1&f(An8#tqDHQtG2)Wt>H3KbPO2E5kKQ~oszKN3QELaNshUD&Nmj2I8jJ@CIiv6G_U#ms*i*R`4jV<2RW0SYT7`gIzOZU?4 z+-u{Cq6+a!QZJDZL)JWhn5(WHrp3t*^0iNNIYe_@APd;(jb%uhR4O>+p3h98tF@lP zMEbgNHf!b4G*vZ?w@|?x&^IJ#EzTGbG%M@3zb*!E+?R>Q?L>M28^W9SZ861O{LYZh zp%%Mn0p%s?gO(D(#Ouz6Cer+Oj^PX2e|(7YQ0uuWla3@qXSXtS#8P{maYyl0S_Bhx zhB%yHoQweQH`#b%^^2H_}lrcGWV9xB%tS-e*FQkXusRuY_bWjpvvY#f8nj{oYbKK(~WtpT}& zmXq2e#zDj(KS}g|*Kt)o5%%F2Ct(LZYuzL0Q*bYk?#9%faDdl+UgPRhhf@nB4eXR% zx`fJA;0}|Exb|QELR+Jj%PF8s1dA%q+u&OJF|uQmAjV`c3rJc!xYblo{F2Y<3}r-- z!e+jY;$9JsizA8m&c1i?vaoS#Q;^_V%piQo@d6J3-aEM`8+EX*;iu1T%!iMcKliVD4l0#eb764sYz#B6#XOC;4x@Xg9I7Jz zL@#z`W38E%L}z^Iwj)+1u z=vMeaN7Zz)Y5Xdy|MVt;n@L*O$LkV8@wR3rc6(8=>Bs43RWfNm!tU{W~w~F(OuId_f3&ZEj6WLp;LBn4_ zo_hMT(TwS3;k!5*@8&%GjdJ!KdwFJ9bUYewq)N& z`*Oa2BUm-ry|_(Hy{I2B_R~dh{8l{th#c0i!)f=ZJ=*PAEb>i{NdI2=3;FUJ7h~G( z)Lcq%IuTaNH=77jAq@`b)9|a=752L`9=K*yr)ME7Qov(V-zx-^fqW|Lhx~P)ly~we zMP=Nje+y+XOime`&gSMBZ#^ky}CC>{<`)%P?!HH)VjMP2KfrDui6&HC^3^;d&tsu;mU>r z^ToPzmH4xM=Z26?dbxn7;#3XV8muOBR0TzB^c{wy#tU%Ot zJ@6_gBV6p^3*S!K$enb^9{*W7_e}fP=cIqxsw1$l{rz@lWk?}IRH9+Pfqr>p<((0t zuSMpIJ7t_Bm<((nD0^Z^5))r&TCVJIR|4NR9TQ>|S|JuBljFu%8TqIzQMtwb7t0{z zI0wO@Me2+T-pRg+kmKhB)o$~zaIw>*1YBH|<=Q{pkbn+LFqdAj9tL|(w5}9~P#$rf z^w)!A8+CmIrSoO;e?hZYV+HnO%b>_>0GspoA9B|(Jhz~hyS+_fgWhdnL$=|h@Ti#0 zrjCYBspIXr(Pg6{{!yS@)>xCFfxaOx*Ht}d&Z79>w;y@neXs{~P2!jg&@*35-O_Pc znSob*H{B9LR>ftFG0?5R9APc}U)H~FgKMs?%q#$hF99Y_KtZV( zuug0^@L~v4IgC@Gd9JN8@TX>n$U3R`RTMu~W4xl*u!byMLX-6AVk(k}XQNdI_Lx#@ ziDjK@(r&oNqd)tl@b3GfOWE^wQ(DE>e#2M?Vtl>aUi5LfbelSMHM4u4~@a<>bk*QsfE9`ouD}Hf_2r+q>}6v?2K=>=yw5=B9C*J;Y}2S8HV= zfh2qZSFhn0QCPg;qi;nC zZn!LFZF)$kH_RgR`cPQ^vG?O@C8k{>OR^g`|EB9JA~3j$!T~Xeru8!E8gA?#mPusE zpk%^>vVQd9cnqA~_mmNPb~*8VUgUHe#24UY3C~bp>jpUU3j&?~z0*p~Vgo%=aNA42 zuN@88{j#$aaCD$Ofm5HR!|rpzx_tBY7d%uG^y)fbaz!=BQVnAmrqf+!48Un zRrv?!cj)(XjurY6!;?F8yJBf|=k%3zPf)1)u!nvi2^a0vkN z|KK(-h(ePrvFBNji;8d+AvM)<3hV8lszb=vaW46%j?41+UEL{5tjKC>r%JH;yo2wN z`q5#Q*~!Cr+ZE`MtQw#d-j(mTE02S=Zuk151$Eh-Z?8>()g2gH4Oa9mjU);7*y6209nDU#W|!wQ;GM zakh|nnJ3_>A0j}3mLiCD&dVUqnKRw3)^>Pcpo^e;OI8ZH>__ZxHPt*u6&vjW+lJo@Y5a z3OcTBY=k@yS<2bu%7Kn{#H|Lkt#`t&d?h}{T~D6=qm!&nVM*=kl3f8C7zy`n2}9Lm za4Ebj(R@Ms_1k3XClb>-DK0ZR6D4uTUZ$>lnPGMYPNaexv`wVZjYJjy#5$^Z)6IhC zUvU@;>YEgb?9-cvU^>_7LMWoJg~e`edVTbi4lO;b0E5S-kp;fJU=T2{&e}(eqb=GF zM*7=J_|~~z+gCf}(qaUO{8|7jAy~X#Jf^|{X0m~+A+=+&u;z{W!}p}{zyVTphc zXAVR#4TI?6_&Q*I$z}ZL&|>J%GgnmWV@X1buBbwvOnCEUvYUlJC)dsNeaB{=Qbpli z>cf-(C_ zGo*c5DwN4sM_K3RW)3Ra_Vg^X1W@VoFYCgsJyLoh$g}3+5F$N&5TsIZQ2()@n&I$OemV~6H7rt| z2J^6GgQduSXa|h$dGhMPH+Nn|No&@yf~G;RfD2*4>Z`cN!8}!RrhP7_YvT*qTTag2 zrJ)GvUjMbd)4vaCiSc=y>M6DLeYqz`Ng+8%>mG7C?$_zrGuIMn6)JP@Z=U0L6iI_8 z^SXavIS{x>e#S{|^w5Pes6;|1gQ~h3saZswn4l^W3n<;;9h_3{Q(V1_yZX^Xsj2EO zv@xM3Wc&4U_7B830@2FO z6l*zof@2u|L8iKqOOz53QlE?L@FFqrj}Fww9y}ys9U7>W{fZ8GdI3-#O0LAiYsrFh zE(GK;0s1z|I;ZDgn#?7Dh)!)Y8Bsi>@d)6wl?PEHE_3*J3DpBo-12qf`VOtA`nMPn6G%{>&jjT~k$k4N z*MM0#Sb2a4PDf|Q!}K{#%fMsgF8s1Y;Tq(BXQx^)Y`;>4-=!w5c$gPVZKs-ne%jIS z3QFm`DEXcZ0d?uXp&c;u%`U3*s(h6B<|3jOr0(dr<#)|=uw%Wp>DJWkaRLN!2%iTV zSax~t-A-2X_45h~oZscG5pTpb`5#A&{#24pJsUN+>X>3R%nx(>saeCn*u~Xlv*Wu^ zYuW+w4IOC1YloG{Sb!x>^g)2iU1y>sB-t_dI^*DKfr{ovLxZH$$KRh?@6}L9y_`X2 zL%x%*TIBkAI5sQ4n+#E|b?>>RWril~rpctFlf4W0o8R z<N2;)}|(P=Kuw#TK8t&&LV8F8061lxOsc^bL6q)aZ6X z1wv-Hueq%0+z2h>JCwavl&ggU=Vf3=DKQdwY#9`?&d?lFJZV2u7n{Mmt{qycUc07! z?Q8E(vE`cB*_bqPKKLa#bu3Z;u(50U=hd+=z1x0QWRO?ea`Om5D&zBh0o4k6dJIVl zz8jwv6^16%)9)qn%T}bCnVV~4kuhJQf+C^fwgLc(yT6|RW~&$;G1nb!8G#YC6zDi) zQ5XQopNwnOvKWCiL;w#kU9uU~oG^)2OYyk#u$o6O%ELXlRzxOV0uF3E3!n;n%#ESoKYreM zc@bFwR3z^8;YEz(A^v~FA+qy-5eK-T4Iu9b_=|OXym7I)vGS$UZTOfkI4QXDU;Rc56b#3|qYb=MhYt#ojA9!C{%UlxT*RQoehAC8d<Q_EdMRFFCt-8r&{D-ewV{L$P@useiwF>%6J)g~~?*7utfKnh3e5KfH+F(yr z+@O}G{N)@S*i_)UPC#Fn`G`qDIUz{ho7>6+%zP^URn}6({~I_aAp7ci(KnTKpls6- zL;6vhAdI{?^c&zfqd8Xb%I<6j@ZY@e9+?B{cP($DEy_dnL}u%0b<%&s=tr_q=okK; zjD!F{4gnZB>9u1Bt@2mxc7L7U$8aB6`RvAmHmP6z-9DssEu0( z61V;CtMOlP3-GMj^2znRgz{mOYm^l$CN(N9k#Xxr4BtKAEB3N^QXJzItJgMdJUG;> zsgXCuKHo_9I*vjlWh#5_(~tW2~2VTiC&INI=I()LUB z>U#VTIzt=+O%mJtx(%H@bUfd2X$5S@5KJz8U-0tX(?H~kYBprVu{J*_+!VtMJz_LG z;NN_rX*_wCwT|APO$+`iu9#*q`*M_FsWUFvZ7X?iwn?tl1ui1R#})NXLt;VZ zNXfKn(h;2G6E7Up)Q$r7d&lB70dowD;9X|0e-;)6nQkfaBe;ecO~_^mdwMDLoXUbH zFF2?Q9q}hsbRtDD2NKF(qew=sC>rL9-JFjzs*V#aqMg(81Xw3dl9rs+;iK!?vCZ$u z*jl>k*;5TZdn@>^8}XH7gi&A-M?*#$oRzXzM4(3$$Wz-hl|U9_sA^ zt5EELm0z}KuswS83(!{~%kuS0GjJ+aCo%o)V6KJsWV2{@A~#_HXPc-Z62j7@nTCU$ z!OVz{_KS-iImZylh&_(yhH1-mN^b+~B`lZA(+LNd-jG|U{{`vA)TVgWShgarAlZyc zWxX=@xncKo#5p*9^vWJo`=sE*$rfjmy(urZ;h6FK$nCaNpT2@u3^hsZXSh2~_`D$*DBms8N;PI!&vYTgR_YX>zaXuacPM3~Oq6Q;{&Ccyh1~Y6C{B2{f7vm@g&MuDKdzB0$_K9 zjtb&M*JvqDt{h^MNaQ6xn)VXuCJSYAH-SYmwKUQvTNaV2sH+bNF7fl0}Ke4J)~V)+KWQy3m@yQ^5Gp8yoFnQ z9x0-qzH;H<0cd_6kW{avHTcSvwT5KZB`=wX$d5ssZDSZ!R(Mz`1TNb`p}ft00pM9( zK`kYWY50$$^@!r9$x9gHo1ybf+3n>RRN3ISa+4xRkQ?7xc;fs5ZN; z{(w4HII&_s^nM6s(#aX-D|I{3q+GuV+^9tFJ=Zt0rB;ocRAEA_sKAHLE+!4z5nvU+ zE>oju&EPuYH`C@OgsVXA|JK8_MPQr!^i*);Y`nq5mk5-BYO9ok$Qgjv_!H>rqY)p? zJ^po0%pBk=DWlV~SqTHwl$WmQ=oquR9ew^t@U%E_%DH?0VKbBX$U|GUe=WBRkhu8m zb)|XCEBy?kGYm0M06mDjHX1ceCHw z=Cr{wx5@`jSJ!bq1_YL~K>ap_q$d8oZ{P~a#@BNAFMD&*1vI%?@aW|2YFJP-LGptA z&P@T*UMMKgD*u3Zp-Z=~wZ^Zc)4P(r$ULWQg$6H}BfmocR>m$S^R3o_GE@x+Mvcl1 z4@I9|wXhML?hkRBmf5e|?VDMe+_EP& zU-iE)*;RIJ$izdlQFHV->sLBPaj?qMi-S$yi$1dTbTxJh*24OTjoe4mUfl>x{cEN< z)6PG8vm&QvFB9IB`k4%D+?%~#A3t=u3FB^H-u5*039~r6*eIyl2n=jw$6B8XJ2Jd) zXq6wN3fe_F5VMT-QrwBZLlkAGl}$%MW+t>Eb~%Y80!9yZS=Kp?BO`wHA@9gD6{p3e zGAtzFx9wl?OrTdul66=|ZeTd|IU3FX(hOb!Gg(E^OLhEGCm|yNq!vHv{!RDjY zBeZN!0JA;E?pk%`_Zav&s#-<5g)Y{YUmw^Is_%S^$^=2)J#=!+fQ#ShYMW;hCGz9_ zii;YYCV9FZ3Un#>${*y61A!YVl+sJX%-oRR8eOfltdv+{@HR#7LAknEN*5dY8u-|V zQs@jos+NF9PwIKI0tEILjE;};H?1!C%cNC2;B?C3)Txbk>7cM{8NOQvcj;MSmyKF* zht-Ka(ua(-P%+>f%Z!m1+3PD<*|Xy6g!b4@HwZ6{a$P;wAUlX!)o*$Dp*o`4vkOO8 zU8JSR0;&HR(q7-0F=$gSa$r{qt47UDCbba>8UGGbnA}m9R%1o+&WeqE>8C50pNJ{c zb;i@8^qho2@apy@99duNjM1vMJp=?o#B?3iFMM-`;9b@OZ=5sLgVRKqO2IBHYD4ng zQb;n+OR5`ZY-gvDE?FuHbs1=8#<}Q3JJ5k|*nW!l2!FeM1IW&~>a#j0 zn0TpH7B45*@>4_2*=$)dzD&(+Qe}OI6*uyA6Erbt`&8|1<)09$VZY@9gm-K$2)Eo0 zkfQ?T=blgjm4F?3rREWzrmDbg@}CE+%OY$L{{>O>gJy*=uyNE$Yo)Z0t0sk8yuc6l z`6SM7d+|Ou*V~(IN`_Y6oU&o6`33hJ`X3V$EhD4HFDW!gYi|77 z>&6`!v&(Bb18UKY#;(;X(b7L;*aB!DqK-WxhI=|FJL3K>Kg(&SUV`j1kKRjC{hWXm zE_u&z&N671SDo1g4W&;Ff6FGr;9Ikn=Od+>xlWB0FIiPnQDZUHJ{;P`&mLMRd|%mc zBNbL%LRq?bT#fq(F?d#~wE^B*fTbqDT0VhNHypmkI>Tz}N3_085R7>xt^2V`gmh*w z^_QPQFN=YKY4=xo9iQ#|_I5AAAHJ*e*5?6Ue{st4-32&*lB@Up3wq7)F-~y8F@9NP z=znw1FWe;bwiz4t8wS=-s6eK%7^m=DX4~wBCtBXG8M@JNk=N%z=~Bv2*7;liW+1%s zZ)PRS0=yYeD;-~ot`%bX-LDi)!sM=!kMirF$hQ)QeiQ#`^|n38cf87uj;1g zIejKai2FbH|0+i`cjV-VAdJ3LGdJbIIU@YB)NC2e%jYMTHCq??{v%WUkC{4lz0C_b z|0xG3{=ti6t5*Moquj@3-Wzy{!D{Fsxy&DO1~tWK*9wnyW8%0;F$1w&@Du)r20|{v zekEvrW`=~N?6W`tSH8Xc zx>(8CmJPnebJ^vE`uw2AQ`Rq66_)k`Mzx#)jmCZw*}kq$8uNr-n8WG84$3#wp*ACE zbg0THquh9;&-m@PB?4sm;u73UjnjE=QeP)S8&WAF%GcnS0wtpQ|6DYqeo4z?&-(*5UhD872?|v_+qHW#TwNU6yF;* zy$Oa*Mi7)PXQs5e$rPpoXbNeml?i`FmW+g6!mz+b9>_Pxbl?(-6u<(A4eINqzgb%& zUvj-MRM6l`$`0#E z!fhEs1SYe0^y+f63)6iq@>YhX+A$NcJWS}FLC+CuBc(IyOJC`|jyxjAKj~o5f6G)? z*akgNJ?ahybT+)Ql5Vlpm@0op6{n#G!y!R0Jbu{^O#2S(??_8frc)(p4P1g=lPZKq z2BdCtMj`)i#6gD$4mSQj?t&WpncI^bhjH+G>-Wn3(enDt>FMwD!~L`66Cr_mo7h-V zG<^=U4md(s58=@^Yl*xspzS$#Yf%rAfu&GXd-S+Nk}-%v$>Y5t(*}NwN~}8Xwd>Z& ztev;3T6wnES{nZr!R_5lPm@%g9@(Sr9!GN!>DZdp*_>sA;eFd=n_@P!2ocsD)W*29 zL+)79AWWGfN>bEIIzAc45 z_mHZM@p%sr1J;7D#30T>XsW`9jRS_22~3_qEO4P|mmM2Zh?&B)2q9krU7`XFCkF|D zTPFCAs1ykMz<*`~7c+*zePzO8yye^F)5(6x>GS;o#cInnLpio&P5W-eV!Kt=x50Y} zPq9URaF>4i?V6l$vdfUixEV94bDpq|Y1;PBOKJ|6#Z3O~rSkpikmH(xuq-OoEPqLR z@LGp2^=cuPEyClcq8CQT;eGY*e6kQBqsZm`ieWGNmS1!124ixB0>CnyXyiVWDDp75 zPu1>U!P`36*7Bb9iGhbQ)3E^SXbScpo^aqj4lom2xmKq=k0I2Ua@Ee;AUyAa7R^4CvF>u{ zaM4>4y|Q%eYriT(vpqICSwksye~3e3pDYZc__Xx>^_YfB4VvV{!pSz8ax_(q1-`J? zus&=$;GM?InV67|oF z;9KKn6hp>q25!Kfand0#q52^4oF1POB-Rx#(U?`j-(N}Gln77q(*M{9QB4EdE^1r= zUIiC-4%bQ6rbA+r7n8TmQy(LJU!BHD$eqZ%&m?!?_A2tJn%5j>0=^Wo{gtM>a%VIw zV#GU!;~HmX0D}@Y-RnnI)bPC<_07S4gqWDJ#Gzm?EeRVXHE{}p#VenpRC2Uyz6=n7 zJvEab>LCqNvto4gkm%{9@!C_^D%oehYvhMVtS7j4w(QdMW7Q|--Mwo)|4&;{S{7D# zyieE1(fxIM;4;dcTQz$WUR#aP0OaQC;`MxZg-B_Jn-O&-rvAXwaCXcdIrO0k+$3^pPb>eWo>L(pj%H3^xgfsf%_NdQBGrA6U%6I(svjbVG#2iahof^t z>@AfiRLa{#T;iflNUG>txNfs(43-YyG*cenKM6K``ew=GJ+EK}bWN|~8p5hd2d^l^ z%CJ}q$XXz#xHyk-OYZ;tMWXswDV$649 zv?qhRkI+GD*3nPBfT&kSC-!@`tcsK9J}iYF^oCvq+vtvx0RM_+kF)-tuCPs354#l4 z;Zn0Jjmry~;)mZO^#ItR{<|%6gE~k(!4qLk%$$r-kOPPFt>^{-0Pijq!|xKXTIb;h zLLCH_?YAyN96M_a8lt7t&Q&YjM#j+UWOGppso2lJyH|y9zS{aaEkTbYTdvlZN#MI{ z!N<#BdS!s3k8}7|IJeQmbaS%19E+v>jw7SH*Gu|EG#S2mCoDmdMFou&AlA$+UusXO z0{a|C+HS)N?fD-A+lDVkO3|&l*DuEGYGu9r8v3frnjC&QQ03kOKmLt&bFc=~U8lqFq{d}9P^cfHDiDJa*l>(EP>!9j-=qLU z5Ig+Wj?t---)hb)S+Cw-x<|bi{|EG~T__VcaaV1Ep-B7ml_QEE>*`{ir<*Gw?&{ax zKf1((l`K=qp~J-2l=7Bq3F*6?g0Si8#iYbEzY}8Jk~^xj<9tKi#s+(=&fGiJi3?Au z0{}7A*s2hO1W5EY3oGU8K>m8uNvye-0kb-i_p|;ZRi&BZDn!RP^0(I$XkB4ixEQ^W zo$7r~0p#aO8uDN3Crk~pAL`DZ>1mXz0W&zt&C`=%j&=JAd%0wO*KMo>1@Y=ii#RYF zct;j2lbH6mfwVlBU0c{82FQOP5E+;xcWD#Pi==rx0mu#P&tQKrca6-g>~85&}t^xLKc! zyYyimV=;gG)L+`smB5Sm#Ya*YYDvz1kM%W@^iHZ;PVulupO(MYc1Yoq=uj0)wvi~( zu01lLX$F9YG$wyJ$v}ooO%UrtG)O+E+~rQ?d(w zkfEXXiTG)Tu4b}5lSnv6I4iwD`1GEUmD81qC)FmU1wq_^zkvd7Gz{Wz76$7*_QJB{ z(VqZ7)J`?R(-TV=^$}l7*?>mo1$I4T48T_uhZf+E2&^6T!^Y9@&9raWdlm56Bt z4wpPb2RieuNSv1cUJs_2+Y*;48SuGE>CmzhddSDAQOt?nb^NU0lL{&Q)_2Q$7iKYa zJ<&5~ahy55lO7wjQ6BTXD;JNzJrlWCe0p3-8}lwZ6TWS2H0UhI57GV#_(}D)x!2Pm zWB$p(9l`L4%4D?3F;?}pW|q90lFTCD*l68NPO+lEfH^LiQ0^Id%KU6@@b4+c*)}^3 zTnD6D>-+QBQv-;`FnB1}GO~MZm*5q0`-d3{clX9VfDI^e>+?qPq@ve0_On&Gx;q^lW9{RjIk2=PX_vbCLIEHhUR6>Ky--D>gqe zd56lJBp%6P#-%QJ;Gj@3BReU%es&cmY4vDWy^zSa8{?>I~{TKveYiEppn1g|-FH>@cu5Ig#L?VfnY$QZT zwLcq2Y+9P(yb>Qwm@r@mz~;x-<$4$g6OBgwQY?Dw=vVXNS}=^lS^<=I{BNYi4_=`G@h*Jn{oy zYjg2O98k&0%XR4(f2bFixp!Ta(*5EYQc|jJp`)O5)0{74!rW%^uuqSVd)v@J&%Nmg zHHM&@rJcXyTTF=QdJGb;uz7(pe%VCa`Yw?e>GQ&;rfy9wrgho(((N4V_l3C;KdfLk zw3kg=VFO0JBY;Zb)m;}P9VBU_A^_KLWKWa;!F_PyQYFaUBr|`Z22ue5tU4?#HCHFT zL}(jZW5f__R)m%N+E$!_qh}ozD-$w$7c3#ieq0Xc&tiU&wp7* zn?f9)B&aQuF7rHy#Eusc#&(4wg-K@~#`rIgEKO4Yl73lQC+giHOH86@eo_yF_6SS!F65>aq1dwDod|| zApRiEaG5S%ransd2>*O7LCFw55>uBOw4g0Rmz^s+($AYCtxc)bS=iDZbHB0aef#gY zF@TXQq8G_Hr8+4x50s}@-~g~G;5fXp^F4t8?C9s4SA*%7dFXZE+0*EU3+G0*C?OdP zkieV4#IX6!B0=VVKwYJgN@wuYP|o=q)5(4OpAPg`9^Yy)9#T0s%t|6jFCP@zdE$>_ zd=?Lm8{XHhuoFVJ(yt7$sdIjUEMEl}i`TH(EVQ?GxKU*&9;ozxrqFGxH=P--VbRZ> zhfW>#?(jY8yV%a(AE9)B9Sx*6}+3%A4d=Ve-gZ;`0$tV076AAF7UhsYM+n;#G#IYi%E-r zzl4%sD;5N6HdVQ5nPlz1)||b5bftET5!7s7aoIWU{wt)rBC{F?OD$p*#nf2k7u0-k z2%9mx!$$1K@?%_-hQr5DTH2jHF2Cz-L`hJKMR=u^XvED0NWN!y7T+Ow5Kmv%N&uc9 zRT|YuHIixP+4!!oN+c&v9%UXEux8n-5os^on+f6F&PAsn{>|tk0iFmI=)UL!e%~Pg zTp%Ix>6wZt+?v=#rok9sH$-=ljOr+SmB(tV`3ZhRSR*lpHG78gCywHQq3!8}7f+&& z6KyHp1nD9r7hdDXd0{txdd2M)%scT3xfSu4@(KcITd<06K*AIsWK$iZeq1~Oqsvvz zN>WN7R+6PDFtsQ6)3M>}SqYg762Zdk1ITc_I7hZwx*2%(CIFwk%~%1FSpA^!L40BE z@U2tuX?R-=MG;h&>EHOGCC>|i`XW3x#9D?-bjrWkS6HSy5i~NX6GT@D1Hon9d-;fQ zyBa73|3@~ExPnp6Rp@=q4WN^t3J^hr_+N6T2=M=+3>t8haS-aijIqAHc6vL?mXYkeh%j+;4)c6^sKB!Kdk&-q*o$mpcZeX9|AFM{;ZX`^2)Q z{Sefs?wJq$AwNt`7gfUEzC}TkQk|v$A!gkWSvw10bZ&%%V2(7BHzpt2NqFAPQ(NrS zn)1ABHV$G(-a-|jgS9rp0{l-^4j8CaWK+LVf!zt-rHbrE&oI{qcK}iCi`CiYY@ne) z1Oe<$-A3zwr@tSW5;5t45O7xY z7}_(M2Q#OP`QgOfiRXc{_C;Z_mm&$Z>u0JQrOE7!iNVuGKZ}a|2ByGv4R+0m4dI~o&f z(qMRAv~JjJhA(&;*Nn*_l%+EJx9o650eLyfZ&I^G{`b%(EjJyZ+R(Gtyu^m?jPv(+ z&`oBK)uCe!FUhOF1&j3f{b^|X9ll4e&e~{Igx(3&1C`5=qdu^Xa zQ*79GXG7OG+aNO}TgeTq)lU`F1=Aj2)Xs;I(b zUXxsenQ^q(Ohb2@(KL=`WO3$S^-CjU`zGNh{d0QZYHo85{|^s^t$dPkf8AA_!%;-* z9A#M*+m(L0>Y8^*qlKWp{Be1cV2p8g$f)}Us~?>SXif@wNK;Z^0Isnz0C43O08SDS zf#qR(;G4#@W5?clRVFC#u3I;(*&M8*j7%r0)tq-cG3>+s+8sJMWjQX^_pCF?D7VN2 zZfZ&)In**$!TbG|_AY35@@Ru*r2sYLy(l1N;>ZltDQG#>4Q#ZpA(LErX}#j?|8wc+ z)3;%Ng59K1Q*4`S%PA_yjJ@{%hUX^gLTOL6m;31rSyN*q*B;lDFa}&> zK)?Rx|Cg=ABHkbOfsP9r8c&$5Ph<*uN|(}oJ75_{Cwo=XTLYc;>K{QEeIl@sg~}{E z7JjUi>k{<}pB2zyj>npdBkJRwH0^Q zIeh8GYTtsHnN$412W2s3bGj-wb00E$d;K8b(ecZw?7(}^KQrcGVD4vrn)}!Bgebdg zdFHsZKrwZhDaj2!7TQDZl;YmBerPMMTf;Kk7GMH{%H4N!NX=F`<+FN!jx%_a~Oqbsr@t#$Cf#^x5*)JUhwvMu9v z&piZO_*@qxkp_cBOLVwS@*hnIm7C}S&fYQ4+6dh%-SmqPTbRTEeLBwSV!j{q7*eCI zZQB)#+xqfJP;|=-I~Rfe!vf%9IgEgb$$@DFBg3c8%O5L^)_Q4~4_#XgrF zbZMIv>&KMIT5bF*<4m`xG5f)NWvl;}C))%^1S<9oNvI_UJV zpvFK{;DdO27}s-f`hZMbA%nFm{9$q0#j*1*6KW@SY}Izz)IER&4U_ivfT&*pEVA&x zze2QtsRnWOCm4UqKz9DWPhDQt02`FQ(FTpjTdfq9&C&&{X#UT#l|0z?dJZZYX+uy4 zZ0+Cqz@;gPIj}g>zd`+)75OyGG}UlLu1Cr=FG!6)#Zvf~p!Z^n6UjtL0OE9BE6+~k zfn94CL;KcaQueQ{BvJb0GR6boiObCfUQE=Ov$${9&L?=IrY2f*)!zfBN+}MBZwIW! zu(U4l8e7U{-tE46T_Ti49Nw#6eBRJ2Ik9#v*PV%ZoBc*#Mj-6H@T5oQgfEaO`FIW9uXw60wudkx!l{B%0<-=!VO&l%vueX3*VwVLBxpN0k!3T3xi-e9g zWoZpJwk&&065$tO=DZ-m2^io8to~SH{n8(r`sg^7|J>jUmBDGG^?yp#jr)I0vuE`u zgyHAv#-jINLHQdXeM`%n%qYDdPq1r3^(#&eEPs8=`(hSaRfz&@`+P0+xqiOvd)>ae zagY1yG=(gevm5o5<`hTsT+W)NA^MygABD4LyjXSIJsU z_Y6OfEkAC|bN$6jxyE6A4Ig8`xXVoz!xo?0tHfOjC8vKr856ax=e_BBzKf(V_| z+5uNTTdXgp%X385m^Myx0JSuS=&@%Ej=2|_#PaaZ_0{|?K&&qyy*RrOK?)oh`u`aS zku3(7(pT^|XR^j^Vv)nYe}AJ!M|{{v6A%Mbx664xU!~q(Q7TQ10WRQmH(6WZbTHX`e zE&DwGD97J5k32U~->DEQWSW%=Ejut5IrQK*gH4BIk86DT6Aw@fV>k?`zVan72LB7o zQ^OzxrJ}8z$Gru}{3AoK=(gqB;YN=hVzJ;0|7NTrj#M}W@RzOZl4k-lnw~e06|5eH z&Tv0$UCbW*2;`TYGM`z;vMM79kyx#aGdfr%^7Z^M8+dsxm5XN=BF4k(Xn57As4GF$ zEp59FjAvDC&lk<^@-h=?)pA}_LpuHVyea3m^66)0L*zy>@sHx`@7_#q7#~>nsrAHy z7wZfD7B%z)wt{k(`l1rO7X4o9DvgA{Ac=QFwj*@wU8YH?+!Gn%@9^#yl+9 zpXYR{-UF9fbUXYs5S{@49BwtR;z(~>1IrLAE%_T{>%O*7L}|s!O#WZ@C}bdQPY_yU z1&!#)FeHGzqFvVpYe3e$URK+u*|+2L$F1lprzOOv(Z78ggHmX z`66h>%ynkrfv3$`OWLb`g}09N_j@7+J^Bs7$(MN zwvThJRxJ8HPIcYa*^=`9esU-O9>D(?eH5LBj1ClW|I%L?r4OQCxCd)py?Rk8H|-I|FT@|3)*lRNj`~Gtt56 z1y>?#hZgo5O~rFgV^bU?0wzftVHF;j8D>BvQxdQ3pn+)~F!^C^BZ_#`2Us<5Fn25G zGGCM$I@QkS0^9ju35HbE!llQKWzN@T_mb(1 zL2uC{xwwJEUukW0IJ{E4qZSnb##!_26 z0P&k#YtiZ~GsUvp`n`CjGRtrL9@{*0AhVh=#uRnouM0de2t(8OHdeP78~ksY_j!n$ z*Y_`8)|XjOxNi!6TNQJLoqY9t^_y0FpHVFXc|@bXG=40fKW5*tCN7iiPCFeZjHci> zCQcT$_Ot5!t{c;?K_MnQzf0BoIgB2Mg-ZU#jx&azonDhp`kD>*+3~LHgoL``Ri_Xm z*{f)_;xmCEvA-A+!btnk(?<3?Wu#fZ7Deb>8w0@5{x`Xc7q9Pi*USoJvj1sxxri$k zMA(O>Hj;Ub-QoA&B|-Sp#`5{Z^o(Ya5^P}%Y5g2?2KF2bBFW)N$Y2vuaY(s7ibt=i zLp&N^T8|IjZ-1EV(+TT(8#5w3hLb9re6zIW&m)F)8}x={Kldb4V(r2MFSa6+M7;wP z7CWxK_;!bj`*q(q$zNyE+r+EGk7?2&rhXO+Euge%#=Ols~uRM-AJKZ?F( zz?A`NeS^aLRKsWvE_S(#HHG)O#lya^T$3GObTQCz%y>Kg?fD4|%zN++kIX?A({YfK zvTtt1aW0fwW5MSjuM~(D+cN zY}T^nOGE;n_n_0eYBAKzn-xr!K}B=8Q%AQomy^Z}LQBsdW)c*J6D+C6lZ>nixVXoY zxy9DbtP6R6VEB_QK<+CObQeU%#7#a<=-EIA2Z!Uy%kt`qaV$Q-&MRSS5|u~1q>5tJ z^($x7vZvW8f{=utUq8YEyR&f@oY|)w)0#y2bDr6cbt5)0amHXI#))}L4(rkUlh9QS z%x_Pk2iL%w$Aq#K)$m2-Z5i_ zjK)SmAUwY=s(UoVTC1Xm{_Eat->Ac2v@_ioBfMz{XBDBMzl0RjAbd8ZI()D11S;pt~)f&`ki9 z>AA0DpbP!Al{q2ER@t9S0E27a)+<9@sA_~{kd2rK3OP`f zidPTf^UkiOOhc4}pgIea1_c{V$~q(ZMdV>%LoYi$kgb2Z6Gew86u!3;=U*0(`m9eO zgP}8wlv1<+2F4;MBRsqf_xpOzoA2v=YcH=G zSuvGNA(ou0r-amEOKjfl-}EZ`4-oMyIb%Xu6E2!w_Z>HTK5)UQMzQ$n%U=*mR}=f$A`K0iKh+2GA)G z7lY^9W5^4sQE#}AxfMHEi)Yt9zBHShjMZDyZhmef!cr#VxhBzwKuUoSk^j5J+Rp=! z)&kb<|Q zRQ-Erq|p;^`8D5i+Jz9Np-$A|jhgaz1V=80e_@%z0AksTP8dkQ8P4;2qpFEkp>VKv z_|T$1HUUKgCBYP;K<*fN8VbN;b0nw5tubxtkr$l&*YtSQ$U37uXl@j&)6$*1tW8-L z9CvGLo9paTD{C^HJ=PVlaGh~Ev{E`e7v>~8(Eh%vJyC`;&UY}_NmSYjEGm(4%f8v3 zQ7s9meJTbZIZ6wC$~A|etwo>;>kY#SSeBhmscHBl^#7~Bmc|UpjBqY)3zFPc%O^)W z=n@O&cW(tGRueova-}sx3i={J3VB@+Z4CB9b>#{0Ce=&0*RaTfJriBqmDWmGy*aol zhD{0X)?MpfHsXzt_1&}XWYFm{$ENK_fSdGpuTgVZruDY{p!6AjvtpFYqK9jVRv#Q# zJ4RQ&bOD?GH|J@G`ft&2Nh^K@VoAR&>oi?pBx8%dBnk~esiQosD9B)cHA^+fd^~FV zT$S61tS z-vYpJz#tf=xbSu#>s`BBa?wRqY60*=zRzBfT9P7+TG;cjH}_qGlNnxrzOV>>?W0s0Gsy^4DWO}K_H z$Y(F(Fs0}}iG_j81pM4>Dj)ZUj%TY}H)50xwI`-2E~bJ#Ztk%J&9D8UBH%0yWp2~= zE^nbQR`aCyvMcsP-XNAdJU$dgR@sB?^O`9TPyW8Dq*$ zQgzdO$W&H}S%G2C{vg`|jdh>!Ra2%N(du(o3^&2wgs`ev-!N?AioO!ezyVVJaaPq7 zmMcf(ugTA&*i?8QotJkl05#&_eSYl4Dj3+d@jgzRFoL_sEy&U=FMbzVss1cNk0Qb| zr-jLksI(V=Ei)N%+73UAt1>?Nr?MoIEk<2!AX7WrzSNaHSo7Im-jcGHjO(ESS@a~F zaQfl;F_-PlIZ-LdA(`xmVBJZ@&lolZe{?ACpr*ipnD$Ky(Orwl#Kg*5=DU@e3_k@; zv*DHD{m;+fLOGul^*97NL?%x2m2OOkEkS^Q?u7#aH!1j>-VB!fVbi1pNgLO~hPj0cEg)mhCJ1it#5i1Abz8&K zXdk-veL__DJ<&R&5^;v3^7AwI=lrJR=kLsUpU7yRnG%axtC!f&mZ5d~&(H?NyM`2X zsFHn*5w)3%X=t)b&Mm*rvgCdigC2ENV=M9FYe-XoFRy%gzt{{pMF1$IO^3<4T@IFB z(d+KvOe3=0*3*sC zoeSDmGu*X_s5S3@pN%qcq+8s}iPBAOEsf`#VfDu>KblTw6QlkFi=nr_m!B4$I$%9; z^-il(J1)1^8>eLf=YPCgju{XN9dMSCAF`)6L%~gJjU#U~mZW3u&8@#_RuU(cvioU6 zK;C{^RedWH|B#ojT3Cu(j(GTZZc0~jF&ZSfw&+0of%-iXjUW)tCp{hmMnE7(ORW#m zdwc*=fWFcaA&!)5ap%9*W)_Bi2&K>x@%dpvY}u$on7tiK=@>L-1h&}5kKT0Rb?wwG zkL$jvkB<9I(Cf#|9f)w?@?t*$9+S6Yo!93)zUfza(m>BEXHp}j$5yLVLTo4XZZXxX zuxWIy3vbK3`i!dNkIwi|)B-?5inZr;ZQ7+rUwxigKjqM+bAIT*L!u@c7g{a7ZsXmL zSC?0p`v@ElrH8LK+GlY#Qw4N2t0Chlvpr$^eo@*M{;5f<4~OSX;H>R~p|y> zf*`JEy~VEQK@7*9{iNVZNS8|yNd(vSsAuMfrdC+;Y#eNOoI+LXAxpZwT{OBQ42UOK_C zup$;2O`U4%%a!H9C7G?KcY9a2Q#UoB?MAdfL#K0)OKpH!t=zy*-2}rt)Vw@c{o|GJ zRiCV;ASP_xW$MBF&wAZ=qKt?TE{Vrd>xize8cd+&wTQ4wGYWP|FHoG0SPrkx1bj}w zmhg8P%O%UrT_vJPud1WLvSfWJx91L)_4^K(v_CotX-P8Xo|?#M-|ydyKnyA6>{K!K zm;hbm*is1J(}nWF6J{mP5*E;Tk!Ao18oi>)$pL;AOblcTm=$aiz+fhp9fE$P(n&J4 z)>nO)rLRZ*=$83UY@u}{tLjZpyXurX)b8kr+jo_r7&YpvW9z%@%pnY-HUE)|8~3{2 zU)LJP&GG1x07bkkdMu7*Mk5C={)55KU6DE41Q;Ik+J*L08RJ)d#?5T+d0!U9xxp%) zr*9v=wF-q|mo~_RwPL25p@LN#t`EvYx|1UV(bf6|Guh(O$Zs%kMw=DkXe@cq7BkYP z&b3pi)A*NUO6GX9HYfFr1`xdlvx+iOxLa%fUC)Q_m~|xR zD-+3KXwxh1(!%x=uxriLSFd71;}zIw^wyb>v+Zj-XA?{w2t`)&d%*Vfz%sEn^*VaK zH)gTKb;YUaJF;nfaJlP};32%OZj%A$pXkW%O$jjFf|aiL;?BX5U6jQ;usWojKEGPG zp27qAF!~!;u?debWInEpk)P%ZFq9gd5CWeQQAjObv3bLS_-+z5Fp?nI)Bja6D8p8+ z^+f#V=_tn`U_hP?lY(~j>ei`TqS~MiE`@4iao9!aUi%`K7|YI?UKDx6LIk+#IDI_> z+SQjeTyBDkGt4>E9?)9@YjjRs-pUUI$ZF$=3J^m&y57m76&e*ScuhelZt=g zg2o4fIn~w#+-Q4^kaM&v1}!H}GzS#qoY4}}VNTDiYh=O*$1}19H%(Y81mpbTp|5=M{Tu&FQne0oSc*cd*nVrd_cRb;mm~`S z$=~4tQh!7@S)j{C^&dzTpcC=s0jhCW?OzDE^juqK=k+L)ll2wcB1jg#KcW&1HPPL^ zE-~TMTGV#xxBFB!UVOc%5FoCS0v<}i?(HzU;5lo_Q7rI(O8Z&k_&{58rOu||V7u;n zMf<=^_~LW5l$UB3OR#NnN{P0Q>PQIKqyPDpEsjD&C*4C|W1%hD`_5oQPU6^UHfZVTp+so=-(ZntX2h= zh4|oDsz_ckQmvB$_EAg3$_^Vgp}U2Cn}&h{zpl{7tZBw^Sb&u1sTbVG?S$-@*HR=d ziv5DKn4rtH23Yu1^X5N3Axk*vbVeGEabn_fl!wfbq z40xT$p`T788bl3W4jAURc&&Z0^NQ_;V0!9k3V3L^z*hR%OQq>{=#$*A_U+;MhqX+a zz1{9%bPaACY5%zh@EKLjSXN(t=EcbH2v{HHtUoEx z{-tovY;#TqULzmf+E5?JW?|FS8x;497z$sXp`{QTDD*3s6?-tOAg*4_nZ z^N3iM(Kk9oWte;!Sm1UB`uYehEN<8|ohhLRIR8C}iKve@F(U{GcyF_dn`vns%RV=C zu^S3!R<^%5jzEImwP*8XeI47ii;-geYzy6}7$380;O|0C7jYJ==-cV3`ZIj~P zhnD3BJ}hk5k{bMEAwVq_{0}AMi$qB(0(6&=&l`e=^Vu6B}E5! z7Avv;0c?G~J=haidD;N$FlSbrO|o$1myIk}#w-?l(%9yfqvNmPpB0mf3iJCC6l4&ZU|E8rsldz!bLPafXg4O7MYN%^QkQ69+UfS4B}T>^N=N_THZUNWiV(Owy?4F5X5k=uP;1v& zF8qOW+-kxdU*~y&rWGOiYclL)z{5FA(K<+$gpeUDKBFO6@3xc0hjHTH;eN*My4>cr zh+JZu2x+dG`J8?q*_9d$#K-2T^ie7fVSp7z!u4XM1M2PROhmqiBk#Li@7iSYRu?Qh zAZ0PF%}k)~1eP07q?0V91sU-ei0zL70e((J5@KwMv50DffDpbUfJuJx95LM_YLRz*Wr23SF@m+yjZ`C={b&8KMR>8 z6FpkF5g*)o+~T36J8P{KIjnG(;}{MUGuN#;u2h1P%9HA|d%re<7}^l6!N%Y#uji7A zt6C4v=zowMOQ-!|;-p+mXP#{_MvhvaP&6xh8P=p_&jS($Ok=v*V0s)kJNl7xSHT_~$b1RCdCftKOYINZC@F z_XF?5^YGVY%^hy$&S2pOvA=cA)sALDlLP91t;IAw$J$t0(bjo=SJmc;?#0D5p@aR) z4^|j?<$V#L0rMzsLsSbnFvgPWtGTCGLVVvN8SHn%VZxz*=v_M_K)ECY9=BC%`Lz%_ zz}Ad;5v$wWq=MwyCfYgImQ;~$aRz2_vV(iU9Cf<|%4FZ#tga#%pd2HkT^mRrGT+u!d4Hk-XP3oS8BLo2+S-%ms- zJ0tN8YOnP6b(61{E;fA?=93hP5u+$ibSnyXE2r-X6dpDP>WLManQil8-Z?>-@4#Fs;%JR zLaaa&=J7ZP=hI2fR!;U1?>iq+&MfsL&b&LuVmzN8=3PU{RYc9&XM?b?&jTcygOkRe z)T+lI>US`Gc9pzsL4eG1tMa%kZDD8{d+leFmVg~5nf zyrlHG1wz1)O%-%4{sJC@bmbXA!shRSpKsNgRl#?g%mq{>QdwG2x9`h>WPtbOG2LAv zp*j@duC3C5qq#qnG3NfGP6p$?pG>5kGgkkqzWc%Y&-S=$GnGp|27_{TC{4n^)HM3O$oZrlQ zDVJ;};Qi6EID(zvwDFjYH(3T4$2dVumqSOOLW^m2BaXG>BS1W?KszHDG5?61{n*G2%izY%LLR1l|WS=L_|e3AiyN@+VU$M2>s&>KTKB zt7w5nWn{$r+1u(Hx2a8u8ctzTEf-shJI_47CF=0kp)YdQc9AIGa=GI5I+pl5E-=r=OH_>7aqh`0nG! z!L<~!LWn{qvSC8Ae%DV=L%4E5g&NV(53<4IJYbMOfGk&P7KEqvfGiN#Q92KXuRCxw zq_#pDVngS_Hu5?LXa>>7a`7j>EI4)|=R7uP-ZodE%{POfRe*<5xg()_-rd-kZ17&f z9MBz6HT39PH?)SXZ&$x@maxeMQOrObmyM=sNT!j7IQZIAhE24 zsaXi4!^k799?KpV|sU+*q0n@n}#;XTt z1e?WEM9FJZ6tjt=hXF|n3lrR9?v%VP`B3KTZ3h>{0(PTw_)%7qFKaV*!Mj9jf2^~M zHB9jqk4MxKfzOi*SHiH$UQ!QM2JEA~4|An)3qDCkc*+}l?H#;iZ9%5h3O4d%^MQp5 znD0kYxZZ6TOOFZ|mZwhXRjZCn@L#!GPsqP&ddy<0)TE6 z+Mv%+jD>uZ!@2Wolb_P?{O7JmhGv-33py0+PJ4cuY@z{W^~a@-Pp$VFD%W$zp}^bS zUa*d!L02i_p}8HRTat}X;sIwBQM|{`653iUi~%k9vib zDm<*jF_BE)qs(ek8iJZ)riLMnlf@1zpaK#1kM1P7JR0dZ5t!j#p&;z_F1$s0J4Pu0 z4&W2m1&^2|C&<(vglE@+p3FTFgy3qja{^^f|Ad()ExWTK>U0Bcu)o@WBf`$KH$LIT zKe@Lq`shr!(7zAfP)@vfczHXy-?eW}Avt(`lbvE}I{MS`6D9O^!PPDjbbksDqF$@D z2+RNVQ)8e7cx>d*j-*rfP{ACYx}<6}Du5~R9Zn6&=ar|4`3s%PO8Z)6Vf7{S-NzHH zV5sx)g}MORM3=NY_3uA`4}14t%?-PaoONytn3$`i-j~em#SP&SDsZDj#MtHa_wJ0@AfZ^hn9ki zmihdPM0zuQWX@?clWe8GmP+_z;?{jh4l%X#Ieu7i#mu>@kLvW@!Ao5= zPA5Dg@NYb8jA+ssT2iTSyyaP=67GbprKQ*VaP$EuQQUz>W9Mn7mHl%YLYGDgHrtM; z#{$z5f-OdvhU|A#LCZDrS<@|&>%57D zl%O4vBnWeX*Sx>yZ&KT5=1z2;eg;gh6Uvs1hW6SFdu)xR?%&~EuB6E(X&lqkb<*sR zeiu#rtM{;Tl}KAzpx%oi`MIrs$xr1xv~o(VPgjd4Aj-lR&k%H$7FbML>&;P2XbVAp zr3BC)TOb#k&qvn|Cg4$Si5!&dz`8k#H+Mi*LH!vRw4W)}yXf9aNd_&pU!wp~?B^_N z`dD!L;pq!}uWKc^(+iRRIb$@=JZ9yQ{4QWV6zI%2vTRqukb>Vys0AZ_>u}*9G`fZY?3Z&r|}gF~E+9NhReLBec06x+VVnF@9?Q z5%mD5p8Czghk)!WrZhUb7P9QyB@Hr7IG^6enAF!atNf+IGQ|Z&NwYeQ(TqRZAFsO5 zfShwdPYT&0Ts`FM%5~$z(@+RJ&6rg{l^6G4e1IOXIw=5SmEHe_%j9Bb)+HN|aiMm>d z>cg?EuXE`!Yw~MjMv`8IYC#bGrZtcBjognrYfqW(+C!j?eN$Cd^d0%k?YYakyZ3oH zN$g6IwjB5!)6vNByOeTrA7X8wAs1i6bxJWTv>6QmiyZ*V$T4fZQwuf;fXmM-^2C&7 z!3avqMY`>j!8{4n2K3z;`-QU%MqUDB(&&pOu3YdGK}Tr%~!?Tt*hrFFVG{h+4yKeX>oh3a_=h!NVkz;y1VulLU}Uq7U^3MfGbwZ zmvdG?!BS>Z(4g*PK&p0Ut!5y*f{Z7V1mnaqGRq61{R zriLl~9UcKGkd9p*c_Q@Zc*mbMBCftz;Vl-xPdDes&&xyIrZs>C7?ic5=+}=lqTdv zACuU!sNXwgps{&dwDZb`gLDe4YqPJ)6dGF!;ddi`*)b04uKPJ8h;)>*dRSfO_Q!(hkDhA1)Wn|3d^Yz`y z{pH>L)%~O6!;SN$h1D!@VS0Zm(y*dQ?OH{pD67=8aMZuow<}f1Vxe6RVNp@%cfXvv zYo%9DnTvovTD^brGN=L;zxx-62d(_Hcpw{xP8aCA!`guHyPLt+EGA!JRY6~$#2aMu zc1<@T)al!q`r-j0TaCKKa;)g__cv}6Y z5iC9_3iv_Ot5b=Xh@JxKs9nR}mq!H|@kVoo+v1=xZSx=)j4 zj=zNSBM#b-7?j^IK=uuu`!`f=XU0|!Z$a>uyP0G&Ycdf!_rOmpRj2N&mg@TM`Vt7a zEX0z@=Zx_vg23e}n52r+>NJ;vkR8U_T*dZtz;Zdx4o&z!B{{TK_1(~G>w z1hV!$?H+mv5OGk5lj2_g{(Kjc_L~Z|r3?ZEcvSL2vObO>O^_)rYJm_dKjC z2HCei`eHp?xlY=TWowsaR=9Yh{w{RZ){OQG2j;2m(C3gIv1sP$VX{yB^#~bx4^jV+ zXKm-Tkkh?X&{O(d`U4t%ixw@|R8CjGfl@(w!|y0A4OGDCC}){tc(gDWN}ioC`!QxI zX!9wqxf}7y++TX7j@LH3KL%xQ*7Jk4d*U4g@$}~_7+SE<3WJgpNHDWu>p~U(GZ4kf zx!E&(H(xQZ=!PpPiC}CA{lUfFU$B#g=ChJN}j$M8J zlyY3tjuRt>i@pP4w^IG!o=6gf@Lq5_1m2qZ$%UoK)9jKPVl@KfEgYy9?IfcXy zQU9zlcKan_;-*!}C`IgNZs6q64Ux~I2zS&QSUm+(`Q&UGn;!edPhAcy1R1I0GJnpR zaAiM~w?&L49x%7)nlWmRiT&7&Qs?opn(k#LVwM^xRm6HVN?LAoFrc{c-xB-V67$wB z<2f9yj;w6-ECPpKV$(f|=-Bddn-u=#FX%qLMGCNVm}VPZ6z?Yn-z;5IA)_D%pcYD$ z?Yq|syw}WKX>We`1S-K}7vo9oUsD#9i{MyVxj{l{sgbHIg$FGpi$T%>ZfLqwDMVnv zoy0DA63mw1#nPgxsb5`^n)F+Kk!n*AAN)^J?9rL;OdAsu zOkJyZ7aw=wxVD0x9x*fC1Mkt9Ejp63UksSV8dp-ZOa*lX4PH~e8aGV{l&}0)dXa>(FeZK|{a`D|fHX#u z{8&sN?fe!1>5CZ6PTg-5FVPJeI_La@wO^YnBB!{-#l42EZCKjRH-%FS=jEQmb#D;c zxcSlbxO^L=HYW?Xp_< z1Ni0ew(M)vXjZ1vcYN1uxz?P9dfirTheFO!xg4ubaYSt0kLqLkiv5$HE*zUcr!Yv; zqcsRPlC`0sbfAQctC_Cm{#OwvL_!zh?A16KqdBq^nFTdDEdMYB=V}7vbB4Z8&PR>= zAqN5|T43`kkA)v|G8pK2_52-be?u_ahYuS3wI$Y5trnnx$A@_>y2aLLxZg9W%E9Ad z)hA5nFLL`UX{327XQ)tpd(UIrV_lO2C%e+GO&1^opwjb5mI!DY;pfu+%F_D-RoMuz zEqi>5>1J6F#cScjvd7j-GaSCbvAh&rat-bdS-sV8O%r<3-=)*aBs~qOp|9(}g1=N+jul3;9hwG@jM_Hh3YmI%C&|!c&$u z(X}>^?iu1y#3W$&>+Q+CG1ZofSU0lreICAYfxhwBB#fAq&}BAf&Bs)r=-@Av+Cl+a znIx5F_eNOt=BqhFoN;1~d&YJOiCwN;#gDNsu1 zl;EEvNnlx0vE+1GF`T7IQadd83`qx&6!B+JueU!vr%)8jslBs=-suouHD}VZbbtid zLGV4Pfax{mRP~m7adE4_f~GZRc(VX*o<8L^sSJi4_ZMI(UkH48B%Z`~3MBj2gA|^z zvxv2!>D$OULBEToB?%RC+aZbF3G$vQk+Zg*fZM0L}P!SWR z9l`M>wAroqsfAJSnL_?*G;j=AlodT7N9J^!++z&Gz$75K)+oh$ZLCbHk>EM37hB2# z#?zk#;AXipo`rOL5w8dIn=PcjJ{wi>)Jw-)D7(_uIlCNviG}Y z02f+iUkW2W>|`z<4v^-8jJ!DDaVjv-_ZacU3v}R0(c^6Y5F-|-Kks^8_Pp)e7RtD1s3~A4bN<&fX1W|wByI|5tAd$+e>AQ?jj}YwcN?g8 zk6RJuuJkwH<1^;nyy_ssG_65p_bjEBG7_w`B<&%)z=@Cb^!;ZFx&Ke5a> zWi4WF>d1~~)k!U|&@2jT1)J{JG}lRfQb@_HreWCtNab$#Kaepd@_ZI#s(?DNM}k%O zc?ByfVRt7?s1~Sb&#sV&pWe(e5CW%()dLOq77GC&@-~pEG;$3>eHs$jN_?6?jx_@* zw+}BBBvdauN5Kjpeg5>WJ5B6J%%sGg{4}Vu6*aDJHLoeI6K~NyI0bU0FL1A)<2?Gf zb)TGnBI4Lor9U<-n7RD2UK?Cp(QaHWL^+!$Z&4J<;_X;4ZsZxg$lu@90scE$6mT7f zBb-`<9+#x`r$>g+6(BsK2Xz8JXwNk2kvA?Mmz(HuPQ!E6hFJk*_}O;EC5=(e7!2l* z#K*9COmT}H=mgmyvmwjCQ;yaww)F3?sA1!iuXsx^h~Hxn`ZbF2=cfM0r6De+#0;K^ zKD}^|!pwD#D|$Ke!$H0W7u^Ja2_ksYey{-gwz0vswF1e~cQZ9Fv=h;U>H9WNYHi+G zeYQqhA4^}v_E?XGt^)4EA-JG@seKK&Cbs+_GB#t9N2BY?cyQ9KY}9GZYByrbI^Ota zzYcQviF~?m>U`moF1bG3ixYuGj=SavI|>qwo8U~U;){i+IlF2g%@#~0Q$gO5IaXT0 zha3fYB>cl^~wE&S2G zMDYKkrb^_055i$sW`4BV^-+Xibw=R`*?!nQ&r%r(yBhn$22D-S!g==ZvGfNLL zyL1u!T!w&UGni4&{-CjFP&4oeisS}}zR}HCs8YoTWuVZY#Gb_d$`bs1Hm1p&E-w0{3B>~gf1iG98#`s2D>Rqg zXx|Ip&9#hhUE8O5omit!SWI=8j@`0Jxkx>*NJmNJ%$S0jD3?$$@`(d%V^Zr{2g0~g zmF@B$LOl5AkeEJSwqVy%rA`9B_@eguoE(=L0%(=Gz)^&EyK=ZIpXVhy%zd_i@a`_Z zQULH!*<&6r0lpi1|1WB5pCg2TMfYIxftc@tY?_Gh`P2{;*k|JyncI>paz0|SG>l^b z>#WGTqut+Jc8s9fgNOm|$R35pLj`q&-C?p1BGMOST}|jo$sYQb`|ar!w??`g#pd4k z(yOg4@N}mWf7aD=j@Zpb-;DoakpEY_(u0iU#2EF&y7IpztZ6+U2cAMV(?CB#T*%}z zWxMS1laxudyqdtqub-`)JFmE_p@Pd88Pzd5NL_$#?ILH`Cx2{n^ohM!@7%8%ZfK-j z?%1yq-br(6VYcp&eyW)zXe#jvoAnO&s;0KEFadNWM@8s!A5dQ477?(&gj$qMqehHE z_p_yUe=%< ze9i*A{dmgdzU_^Uj(WW$HV-_zojV<9hj4iwXjvddK2%a3Q9P+gd0f?6i;jYETqd~> zobgDca#}-O{3-oy215iy35#xAlpEZQ#2W!g^xkH{law}lK>&+nW ze48(XEFfCMI66YRM6strG7s4T!Gg&=0!uPzZP|2b|5 z9g2A+>%lb5STyw9u-PzTSpUhHufIX(mm13Si^eF(#VUOA1gAkmQcL6sGr?<0rj?G@ z3;$}o1(Ou=h|4k>zi3A95ogpz-Sf%%-KxyvG0b0Esqhv!Q@t#=cQSvQMK<$=mla-` z{%1KlbYS*T>9rJjKhONeow$6Y2VxsdFn5pV8Cl8bzB2cs?zwv@)n(~k!B*%m?488M4R_yMF3y+$kUGWv z;J@DD9O?l$Aq0>vIz>I_nAyN*8^Y+KZ+Vt@_-CBXTo8BNSOJtlcp}f}8PX8S$4;J) z53T48LnBiw5sYr<6c#q!{Ip?z)e7+Y?r}%9$B#%iAGso6ocI4Wm7VIE6+Q*&$#Ql${x!q%-&c|Ud*376Z>e`9v;2l zeJ_C=>K9F55MwA6Z`mc6wVo1PhTmpmt4vsdRo1TKMIG!}>oA}FrT7)CVQS4Qa$X+F zloMa$ohSOF;PA&Tzrw7TcXxf4WWH{(Y29$&`4mRSA3Y1^dad9AK9Yj_x{zxLX-H5=7Y#u4gXxUubt%{I0uDb& z#SYIlPq467hhY}R9sY%{0>dL0istUW#;jxtriA`Gk&g9MqXxafA-mdBpn}GL-^lYn zzks#O<}Pth#B}oqfAQ!;wlH(Cu z4uL$n1P3gmuOJ@i;j=QE`kOP$kdwB;-|LTBktegpEO+$GnwL+FNWG0o>c2%W3#^0C zkoA#OzUb$p{AZW)i8*JBt_s#Ae<1|3#52JiliwHbqo@nwibM}#SVgho=17pCCS1&% z1n&(Z`mj)rzVmvu%G7o&uiZcqOMue z^TIT((S%4QZ{9&F*;+iS`qX{dDShaF9wcwUJ8GD{F_mGtwKA<&={{)&r5!H-Fi zLqkmoT5;$63Gf7_+gsJ}GB}QSOs#nGpQVkB8n|Qy{JVD*<_|bR{aSnM5K*;k)1X=A zZFsCdu+OIE>Od?lbfJ{$Ei)BSkJ5Mfn}Ag4#`p_XF)&Glf0BSRwN3stpFFrr z$um1AUhz?3P z*hx5}fua^e|8KP(&#-%h0wFiE6?^sduKOEdhM~07Y&|Gdr0a=ItcD1gF?Om8rYXhI+ z=B#^TD~}#hu#~(&zFNLi2N~#4@tO3#=dSh*efe2#8rd2INJs|jtAi8%n+GwLh#I-V zdR}Gd25B1L%;>8)@sI-(x-i}Mt&M*Y!S7j{LVSUO^(_^xZ|WRmS&lig{#i!#pFO9R zr2<9Kg!Z6xs#$Bqrz*>K|0d~&?@il-$LKG0w4}(;fr}{Wot%!h$&l6p#3#S8IVzY> z3WOQR(4p?We0_OU!g`Suu?B#b-$Un+S!M~W%@jx5xkrLA?|&C+{G7x?X0s4qu*J|L za^i+~PFP~lp$c}(T9D?+<}aj#wxYXxnHcxpbuPjlkB%dkoXPhM(AFF|FNjzBSR1@f zR*5Xf7?U^uVN<%X`KW!%H8%@_p^I#Gup`2;H(Tqlj15}rT6)KG{x&}Rol8VLT$Fc7 z7RGIi5a#~h!|WlHaw5^UZw*M%5e|T&eQwAXF4@BMRNbKBq+T?DP27rBESe1am6mmf zj8;m1oe*@;RV>^SJRVX(7+ht2crOzY7*tq*1PCDXtS@h|R5!24JOJy&r$U*reC+dC zsw)r$B5240%s=ve3Bdlj!#4-yz8l(~g*EZlu8c}J`2Kx;-~8p(^uWUeQXHe5&ar0g z#4RrIoxWdh5PXmsHTx33$gK~>>2z6^7~vgbJ!4^%FE6bY>1j9Z0-~DFBU+z8EuRs< zx*|!h!Y8bk7H%xZJbo%Z|=@ZNvb(eBPLTT+6 z!OpFt^6~j7QE1;-Konx{cJNJ494hM%E>qaB%50tBNc z`GGZ*-5KtrwV8J@*+5!m0vvK%D&lF#8h?SBwpT@wr6`yN(!I1mwq%Gqg1qN9#k0bA zn(8B?P2G=|fKo()vXn8C<@fW@UA~9wiE7r@>b2VM2{xM!21bT$)fP^za$}U87QMRb z5+?qvhuaEO_xP7b^%?a8X|$(~G&Z=ZW8CYUE_Mm-c_T1s2)~f3?2dKnm%7LFw8YgX z$9W42Z4RP1&X38*N7|%~onk?z5PTKxY%!OY(N;u>ld;TxVon2(_)$NJGK0{hNe-_z+evi_DIU5RPu(-;Fk|mz!7AQop?z4-VFi*lkv_CKjUAZ>V zm6XN+FNPza`-J7@I?Y;nB;_@1gY7lFp^g*;at8^?qr8+h>uwb362 zM|ukC{PAlj+e-W}RW=Q)3-kVJx6@5^JXa2$FFNz@tn^s-E?Pf-e=t3vW7Cvm=JSinNTB)Ip!TE;F~5bPPn}& zPUqEdzt=P!HSHJW3cWf7Z}pgeeg=jhWOOO^wWNAgS(OzbY~;4(em%Icsq4c}aUi+#OK%e< zU7D@zN;tncjp9t$IPL8jO$sX8S)_u@M@xS%9+*A|HIQsrMk-BpjI^JDrqPgU@+~qS zunZ8q6D<0jRZ6u=c)8B0ZaN%mtDs-G+sOXjs&Wvf4VA zEH~$IvQFyoMd|!><&9%B0i?nO8mt>71TkV4($X7o>1T`55Fa9@rN!(Gz4uU-Neul6 zi7+Sxe_z^;^&o=+H2^7MumOZzonc(Ts@ir^hFw|iv_1BF$TcmPD-c0IVONHVDpFb* z`%Z;|fq4@GI6yWSDO1l*k`lPc>abMeebn)T6hCIZk~H-fAXiscA7Zn47J%; z?-jmn$;+WYjtu9}u(h#rhS=X>lZzNZ$edWF&ZB{kMVutsid}CBlJFt;PF79Awb`!? z=q56YLV~>HBEj`DSICb>XpmLqU4AyG1-8KD`!z8@T0RBxf2vS!{!iOr1Zx|}DM3_N zM~B!5vb@`h}v2mecS$HNoS6(5y5TQp_;a(sIyKt8B4d9~ZP zTsrWVC7{23fiAh;fnPDF<#g0J{qTIEZDvE|*oKEUzi*?d{lk5@-Oj6_gAimf?q*oG zI&5Mlq&Lw%vERup3!ADan%v856`S+!5%s=t(7`+sbg+To>gi0*rYdATg|U==i09PK zn{PBxv?ptMNu?TfyEi_3IA1GFQ6!e4l|3{aSYeu51)aOPr1Py`BO)3d9%C$hM56Tj z2kSMr^ORKAM%vl=+rL4`k^HQ=pnG;1=%^-$3}Li>aU#-xS8xC^xGiu86?HSdvn!kIfI21VJ6TmF+$k2gn z*xuIQgP$k-4mz~5I&R&1`hlGOc#SJuHP!CN6ymPb9_nrz*J!lHzm{Sd=_os*X5>9} z=3jn7aq}#_(}m}uU-#%9?1=S;GxKg~N7k}#;<01gg8V6I@1}Yu4!)|?E1I z7*SPO8N2YaMH*{<#3-3ya1Vo^(4)o2Wo91o(eMa!VQ`WILbWR$O3_-1Ff8Wj9322p z4IjcVWf}w?((*t(7ywkwjZM`HbMgxO16R^Gj92#L&{)J-vM9t{L-Cxl&i+(lHpM+NsM4riBlI^_+;=rL} zUM;~8RFIVH-@7OLsta0ZJL%EA=c~zgU=|;c6bo?SO#>PbODR#NTU}V>)X9Y>9!e1H znSV-0I^MR0jawKpf??n6Dbw^ZF8_s-&^N znB#c_xL?@e`Rf;|UxfnhvxZyg&`>FQY%%Wa45gcC#~8nUJJ2OY`Ms8%QP~wOnM!hk zNR8nw1W?D_lUZv8NI5N`OJk|JGw^N8x^^h^7OA0{LcznV*N+f@ z+F>}IwDk)*6%-7g!twpT<{p9AHZ6Xawscp@2e#{SdweFr_schm(+)vFVy6*H7abx$ zmNC)`+_Cy@&xV?bFw0o;5H-xpEi(_<^+}3}g|mONR)j<~rLI&MD9%CF7~G({<`Dkg zBYa<|Qvq!U`v3{|ZJ!UC07|RgO?{v+D`kU?;rm2GZN{&SSJ@igsCm-5b8^ZL;h8?W zsvNzws^Q7)muH5@Pf`f^%;2CD%d+<=n=6rP4GSimDRBH27f(%QAq>-;vFBr*VmD=EyQ2k^W!KX5)Ex(GM5w7X=nwqq{fZ49Bx|Iuj3qTR;&HFR*c==b+1m|j21bkx#Zqg0l1 zRoCro^i`)eM(gmqa#)b6+!ZI9OdQa5v387|&B#P<& zJ~tr3=JB?Y_kx?GSizXu%1Gjva@pkOiJ7&0dvHfLO+fh7uqBn`QrIkCuv*`T-w2Gb z(l_ehmeZu|GWTl5P1wB8+SHUbF@mai>@|jB>nTeKOPkDgHAO5kQM+C=t?-FHEYCcmV{!0t2*K-&eZR^q6Zk^NLY|Tu@DcHq7B{Y4}y32U9SCJ8u;yA-g;m=9A~G5tIh0p zk`B;;Ep#O8*F|*BJ)(>%j_3^d8#ir^si5Fc)M`*UA#u}pvUY#ZqxF`Q?LhoN>dwbM zUxfVj*QK1c^tPe!%|c5>(+qy%f`+bKV!TmA} z2X6W64Y!3wtiTw1A66IpS|DBl;o)BpL?$>JhAx&h1z&n{haI($r?P@9AxJMi1AI>wTc)!?*LxX*1TkYc`u?$(kADPCVQA z?c(6SCQd4q402PUjP-+CkKXXn??gqyG>3LgcR4jz!2ofrVWN~lGwX%TL^ z@^lH(l}6DgJc2OWY}i!*cX4s2f?AAd2mGj2y)?bo- zV5ku;k=TojK2B#!j@#W4nA_A6F>3UiY4RVPc!KTZ7*cz-F!%F#vtO8T9X|d_p^}{*<9f$?*nDCRmU}CIA0fi|W3;80k zRR?hz&qNSn3$^5+2TbDxL`k*pcen)Bf)v|W|RE7M>lFS?n>yjX$uD<(sf zEJv>Gu%Iy2xq)+}$jY!mv|TJdMlv0;6XR{&rPOJvE<;o_D-V*A^4m|BCw#QdZm%MU zxCfbS;SaMy<9>4Zs5XaI@Vyh!6I~|6#%ttXNJzjUNkD-${2c;y?cVco!IWDu|NEfLY-5L0{U>k9Mi^1D@OG zbZYlM2Q^mlWbF8c@g(Edal0$&UCzta{YPoL8xtz1_JpeWIYzPXA9*0nACpr~C%P9! z-mGKgo};CNHV&`(V$%H>UY-}-j{#Lr$`k>0Cn0I=IqE3^1+8*_2PiUvZUUWrJ0)La zvQ<=ROEgLc7coXfZD}u*kjUmeSN!Pz!tF9|F1d-gJ4L}r{UMD&Y+_!wU*fK5Zdv5jfaqc+u7tiOl>4p(I3ICu}hLn`2a4IDyl z*kq_-COae=0RgVZq=xtH52Yl%4|5X3gZpD1c-FN#xsWA*-*SMIzW-M|QclH1*z zN~fcW!?Ro8kkVttQ5Mncim8(NdN}?qrH2N_iGhazxRZR1Y+q7AJhp#PXcH_;U$k%UDxOYi+Yw{d+VUtSjVPS^4?~%); zyhvNci0DFC(@gN~cR@2!V0I7wL$2b$RpTQ zD3+bU4ugdZ_Qs{^Zq!^MaE)on)F32uNO_g5*E(JLH0bR`TDNvGg2ZOgUq>k?Fqoo; ze;F2$4u-HULJO$AZdFr7qRhoHlgsGC@lglZq zFZuRdQqG0+P3L-@xko2znl)GAm!X3}mrri?e0#BO(9mhGXi(llRFMm`Ak3e`xXV-H~cVaNJ(o?J>9=Ds5JN$A2-YoF0(v40l| z-~S2biIDy{tC1@YPI!JjNuO7J;r=cc1?bO5`_BvBESX7kRHIBdcIaaOl|pT%UXj{) z3v0|TTZ#A^3rVy*Fav_eX8&i)v};KTLkAb~A+vqk2y~!grf{KJ3I#Lg9Qi;aKd_pk~o;_m30p zJNoOuha*;jshmWa&W$1Bn;&fu)l0FxoSGKUXE(!ADwc&2dgMv$Z3tIASu^HZLHq#2 zgj@F~vYjz6F*#abrA{#n0C;_I=G(B04BtRVrlPq={p^>he< z!<*nA^NA`x6Zkp%?nr{Qy}x&`bG@~Bu{jS~z1Z8>2kU`IiZv7&lc^YmWzDUGI{0zL zzu@Q=qdI#bc>v&!3IQ2o+IMp3k{2a{%w=0Vb|<$shZKu>i=7U|qt@VcvX^21PZz(Z z_Kd*X=cdcb+t_plya`6wSIKH!gCPE?{T8jE5vs>QpoewdRnLh)+P%S|tAbl|Q)`-9 zS*RS}fVep*>uNz9r}|bewtQ&w5plK;>-HVa`Y*R#%b1!3l1ik~IJdT>&d^~kas+=W za)^G6U&)1!HC8h68~nri`0_2R}<0?l2AZ@}Ab<7i4GsL8k{+LD(^B1K+SX*9qP-pjfJxKeK zY!%95J$f9;w&beh>wS`&dRX0}8Yzs{3;bHB{9)?r)rQjY;EcFhd9<2GA`NTRhGIxQ2>9-f3Zw94vQPeZd<>hT^wl4^ehL`~nwAEx- z+bZLeHP<>&(iSe3bmF)rUTiHQ&b9H}N&pRcVniwXipp?9mQMDDPa^eVgJ>EWRNLSE zE!0xismsF;Km!Qaj)VYwyvCJATBGZ>lyRwo%V1#%W2B)t(ZvSUvY{)kwnS$J)Fu+3O}y&Or|4)`tHy<8;xO0>d=I;1Cah2Kcz zyX!(2nGZCy*6OaYjs68%a<$(W-sn1TZP5+ugZxoTBw46IVyV9isE>u5*ff)G6yWZ!5rk z7*&_Hu?;kf45!ktvtW%&NK~i*)*~uK&>nK(qBbqJpX42>M%&QKVz!gTthigJR`jhw z(gSB6+X>SVG8i3sH6UqN=w>@;2?b>Xl86fn6E_%d9u;D#Xrr51Sa6#yeS=9RFeopWq~GBgh;K2kJ^Qd_!o$oe1KhQ>CW{Ys!-UNb5C{ zLu|Au;p?NdTrnAmDGl>QNp4evQQ8$^@Og<*^VT%@&R^2aS*A$U^Ij(UDCu!PIvRI+_d{|+cpe}2mK^vl?ckHdfEK3aVb)>lR9Bk!uN z6jb98yL8;0oNLQpsbdSIb#`2)|@i+VvOV#hjj?G%xcNRoH`u7$xaZ@+Vg5f zIMadwZ=dhD?$J&zcP0Ejg+N&%>{yB{M{oDWjqK{mjwQ+|(=k?Q#$-VrMiV&&8f~x{9m& zDEuJFzxlrAPo|3W7@kH=Y}X+xhgG11taTige|g-VTJ^0HWrv7iF2dZa1OG%>tkr5# zIv)=N6nq`_HeL}U(=+lcmzjwO0{DAc3oLp5RyzsLSX zm`T}u6pPy9jT|xzqGyRNl81idasx9do4%{LKCE@JQsbT#mc24ZZZPFZ-}mL~cAnegfT{xL|C?PTs(H{W%^f>giD0+>Nk<{ef-WvJ~hD?leLI zy8c|)nEmc>w_Giu)G{WjQ($?<2LN8jCR8EStAC4vo;x`qCvE9%{NR$uY%Ob%sSswo z{qs_{ZOHXgF-_0LiXX&37XIw(q>t|@L3j-OndZ{?70>x(8t(NQDriv$Z}}a1$2@h~ z)YH+wZANF>@>tpJk#A1tBt?$TM4_-buu}tz(cZX&#HFhZ)E!pIRsZd5K~)x>7gf zH=H1ycs~SVKO+EKuU!O#h+g;rzJ+y1VJL{yom*lOVcBNnNX>vJ4|(&E{N;)f2AI0O zjWjuzTNcu5=;}Hgd%k?kX729MEo~9qes=ZBH*1>kNnJ=WPhEnI6WH$dywXRzXmv(@ z?I0t&gIrS+eDT40rO!I<=viY-eYCc=#cC_W&3q7_f8L_z=oh7Vj4eei6br*#hCk1P zv4&-{y~BT$jn9duE)t)8H0|$8)E(!Nf+{GBq3V_n*VIfRc1DyJk#<{iR8$H4L?kmG z(4t_6=uQF)$AAx*t#ig22^-iu<2Dmu>nOGjRa|fFV8_GB{0X9UsOUb75(Sf#FhG7Y zZvih3xK)R$rKuUg#V|mzHK(gX$&;qzb+Wg!mtB|Ovbo{s@(>~GTF1-c@_5sq&M&KJ zvmCo69n%TWwVcXC@hV2>Fsp9plrN-V*pr#vPZ%Q5gi$q$cbSXB?rr&)00 zbm?GU@)#bs*}9Om3nfBi1!c^%ra+dbVqlcPX=!Xn_)4S+x@3+~mP2+cWv=>fq$a;X zg9h8R{4sx2$LtQ|C&)mEO%aO{f~OcH$42N5`DWCW^&~@Q56)x@5x5p|V#U*X=nRzR zf=W!x83c}p)8KVy0npL)iW?icZ}Ie1&hsT*U+Yq1j4OaBY{qY7q@G zAj&7u{3ZWnH$a?3d!BeOLI}$lnlo!>b%{y@`#--}nUpwtG4$7TAf#;#SA6MgYM&WZ7}{y65p4a$`|#M(}br3AyI-$1pJWc3e4fEc5&8TogrWQvkS$T zXPuqJ5qGD~ds7D~(QTW?VySu6Th}4Dx!4z~O<9Y!-7oNB-H4#zPxZILV-3gC$_g&T zgA^*Rk31o7%q8lg!Yx|_bK_Q_p!jptZ%^%1IZ4f?`yn&nz+dvZdn{k>q)BfyLQF(rj8=G>Z(FJD@0fK0WQN!WmtkMNfcS50in2*oG|7Sf|v-7h8v~LltHW#`b>W^|680slv7%jVIG$<02@M% z11o;idug`T{u&l1?qnLBNpB%}l_|CStuc2b-Ndld#2@sw{jxN7sBs0awIFIe>}C;Z zEw%%o81r@DeNq>F0tk_!0!TkmG{FBRuv2pWX8|*jq)Dw{uV=1&lBEhmqfaOJ)1m?i zDW6B3Rxd%2ML5O+092+od2E6nEAE+L`TfbS{-~5YVGixPi?4yMu1~T}H}XK2hX-F; zc{ko>1cogGrG0t?a;tY(>}{{P+6-KStm)YVCy*$MHWpM~G}`^DY9(7vzeC1*W~iSy z_;J`0BJL@}Ood}Sn<#;VjrbN$ez?>8;-(2q0)Rfh6+!9>>q;EA9-)UMKUBb3A1QH8) z$ue_aal4z%47xYB9QK>6uQI3S+s<%eRfb{Jx*Mzwp{iw!sf4?e%ylhVnOSvcClzaK zS{(lpqm3oAjFSrN=Hl6!idE~dZ-VLkeDPO-l$sj06JFy!dHtydp(TnH;rc}!cbAKr zF$(+NQ^E&)0R*zN6|x=?<$NDR3|F$1yL6%0jvrJw7nVu)3Oxv8sOuX63Q0=6uMOBe zh6G-W{%eUCi@z=ciYrxky)i8%fEf4AxW)`BGlM~*=)5GqgLlKNZ?!2MrABj*1E4Q8;Q@hV4Kg0;GTFt>U1cmHH>dH!N^bA9(@ zrFTN1QQQ?jv5@M7ab+QEhvmP7wU#QL$O?plMs$IA7*MJ31+6{wbSmpoe{n0GE%I{R zGnQq>ZuIuf!OEkg(&+Q$OWJMm!0p4sN1tt4b?7V5$2rxdpheGrlGkA4W}@S##4TO@ zPP@Wo7L$H-!3hf!_rN-BUgsl;Py<}URoes@6T71J37tc6`+}GPzniUcKe&H$DD50e;>=b< zsldW!l?g(F-(5u@v{3;?h2T{PQmhN>+86Yt`1TMpm@K3$Qd}OHgR_?}^plVUk%zmA z3@v@HJ}wRwN6@xiGbrY7Y1Cy8#`fFXASWXyFJ7Rq#hg7==a`u9H<<(A+Ff9Vz`&2? zn%k2C?uRq_yj1IKrlwII2)1JTIyr@&^$j&{HQr?_Vz~!zqX+aESDuCPb~uWBhwsdM zN{wos+~9rKNLTISHzBOQ@MMF_N}#KPl;<8ec7O*L{!?F6kPDY=2-^oU~Jj6=s2+H^pDayR58-NZ8oYK zDT9DDy588V@}U7Dh+*LEhE?$PvmrVnMhZNL=I!pU#QT3#&jo`nHA4sP6HUvt+P(%rhUQ^#p^ zvNAdL)GjjsFpKw8z5OvQ$ur%152NSi7?YRdMsHbX)DOQhIlvefUeANA5S3 zEJaU_U~s!S>So0Q?K-EndsscYT4tXWqOCeS8YUgQRAS$&vpLHF6iIyBk0d~Qw#O{@ zev7)FmW&;KT;h}LKVTA~HmO!F735^MfAUL>nPe`*hz#GdiZ=cH=JUtGZ15X^Y%g-; zI&fksO-~}WmU{?`yXB<6oP7XeKrP(VhE57%miDo}9ATPw6giDOS9fPr1kwqrmtN8I zXX21}wX#~)>%C))xlO%DTt%dtQvJ0rn-*%2D7?N|EQS{!A{5uV42@P2kG$U0ax95w zPPz6GZL_MbY4gLcZMV;x4DnXH%GP5V1cz$QA&R~$6$|g=MjI`>v&V>Bk)}d^^Pi5m zf?cux-_-kZH4$!`gN}#7kIN_WViE7>VzFDKDc3&M6-S4U6HpFUG{WEKyO|wuWYwmI zhZ|dnl?F%xF_mxLZMxDP`>J#{gA&HA3ZoO8quttBnxTuF-hsWeqSu8pavfzD2_eXU z?n9d!)*K;C?0{F!PMCcA=9u;fYsZzbw6e(Pxo@?*1E~xupm<|M!^3cqFTA<1Xi#&& zX#oj()l#_{fq$$&kyj$n@cQsJi(OiDtmK<0M|a5PD0EICJ@jpFSRyRduz$W%CH9w*A>Vb0ik>Si&LZlxLw5K;D- z%H6>X>>A+|Z6%i`XYwrLmK|Kv&8!5Azb}CTgveh%QUSBi|8V(wNF$o2I6>U-ADklY zpO5pbvE(vM)DPc7@cP`5oV(E9>-u-Uc}IwvH$B4UO?Whh1z6Ky*itp=52*e@Lm?-x zN^KW{h$7CQOZZ12w0ANyP71Z!d)?iAZ^^g(lh=T_H9P9OY2PRBbS0^}ad=Rhsq^XO zkD%hML{aEvPwDNJLY5kydTQasZ&xbijmiW)as>{i#bvUjWxul`p2WPbG@``)lsap@&y zC`RfKv>m2B%|V|f@^7tex=~(3>|OfvOM(5qttS`3@{#lWJ&L5Xe0=cWKRulkh z)Vl@NRCopS05zC74Tdt6!4W7IdX}V}OVmyyV%f6UMoN|ps;5%qf!QFTd3478Jx1=M zTLxfMxC>8w7}LtD?+hdRNWQ+8a=`m399o=wyNS|I6h-Fz`M6bWWd82wQCqW>Uvsuy zDfgt+hwXOmV>;pxn~rU37aqU6ZE-j8kJ3F&0>$qo3%_U|D`2iU!t_c{1i&9oRnoju z6lBLVzcB;B1+NeN03 zEa31BQks6`8n6`X!dzTLfk zyi94IpZ~2lH`&4N?&oPCgBTa#sj2y7xR=bZ%d7HaiH}Y1FHuH~+TWhj^84ggn+zNj9`j%V*a4uF`Ds{pn^BwCrju?mM2%rT10QoTOiyPu$*Lxh$m zK^FT%W!W@mazPvI6? zhJ3sx^QZYNeqMjvgJe$9SG~z$VjKn9g-Ddf{y?}c*PZp-YL1S~lov^1))>yO4XtUF zA`%FD5**<*KhwyrSMOJrw?@tlme0t4Y12V7xz#3Bx{w+^6FapC*;9v1kzFsOa^)eP zMCaApN_tG8eLgdW8Kl!!g+W8EQr3bb1Ds%o{A=8QN=6Vt(pp^-<4FiZmi1nP0)mL9 z6TmuTMy5ZuTMEuB?GYjnC)72ZJrqJ zuE}&{W&((FzNMLlQa#e{%xJK0|_^xFU+!%&*c+ zY*bD50vUUo$CyQxk!)kMaPkB?w(n_oZH!m2O@rV!mjkz z(V>6D33_~F0X{O{|C11eZ`jW#QRWCAHz!|-J5|}7di%$bLrJ!5Wz=5QG(q~xwav}aMB{VDf}}WqXMlAt6z{FD+}45#U6*&1 zL)+qlvNH&@k*^(N`67L6y@2}r=t|}DB+JbU!iM|Sen6m3?uYWjZBj{y^Rs@iG^wG< zTGHZUUYJ2QCvNDACfuiFn&+r6APD9<6`iq?u}4(z``^Gt16+uVl57ty9g%;^DXj(< zXV1C^>6mN@4}ZM?8w`bXU=xui5Y9nak^@|H+kKxkZ|WgRfM2=!#Q=>SvSjc8W(J9@ zQ$Q@zWM{}QDmJ##(#kAqJv|BZS;S48_8ln~fdRA=%{u>O`_*TJ`_CRHT<4rDRW^ra z+T6N)@kxa^w`O4~Zm?RE&AI)hhpx+X6N&@hS`}H$qqmm%UYAhzND)J0MzdZ4^`#U7 z#MSsiA=%P8_lw$7C602uM$-}Uv5OIo|06;}Zrg^=m&G=jQU%1d3xv8kEGOHc#PWF0 za-rTu*uln97?GVLV|1OR3V5V>>$N&@Mj^zvI!N%e283fIm8b`?tPmXx39v)^aXqxyEk=c9o-^osEWl#?&XDTx4S465~%A3dS5t*3!3>!5Zn5oo81K z)VPZ?&z=a}{*mE?S2vj^ywqqf&v1#VS79*$HJ$O#nwC=&2dC_{_%Ezcyjl|20QAa0 zv(oYLuHJg=1-eTc^`I(%wGSkbKZHU5(M@tZrt%bO3WVx_J2){dPplBPXkGwQPq=TV zy+BMuWnQm0n5}d@ED1b-zZ1dgmYu}iw|2Y|nb(;PI1$KEUQV!aIPuj_w?MM)Y-<|P zxowKw_hcHG@wzSlQN#Ffk!^b$wK7b#P&z|42y4@5suIcZp`ULfeEuK-ED``w z1bF!#7SYnIAut#+B{Kf;h0bi(exP4gF0?0ENwYJL-0n%uuYBoaq~A8>a?G+?x1vk_ z6wPXsv?Ma9fF_FH?eT4OCp(?_LE(T^a1AS4sN=#5Dh&~$4J{j?Tf$Y?nUj()V+l%t z;0M5d=sEVnVIc3(z^*c0;H<2g_GF?%tMTvcit^|tPde~*uxUh-QXwqk4>YkL=WIz3 zZjwhM8=zbX=UwI~#0)J__jMQhFbeZ=c;gOS3C5XfD;Qm|HczzscCHH!R)Uru4pF8n z-I2^h1Z7SOzltYdSbArL5r+9{@<+|sXF-gqjBW_u`o#}j`MC`dwbTDI%4POFgb=y+ zNYY6$r-L}{E3;WHupt=uCNj5FIkMs(9`t*WAIT*+t4o@wF%Q2md%0}kuqcVOijA0F zq#CIAtDN7`!#Y5&}?*#C_o9L*%YXkWbxzkO&dkxDvP=N-F5l!$*-Du^QKhizVq4BDF(|3Fx&Qj;wa1ir(%FLLcl0$ISkgu z`S#-e=GyGi&i3x&`tHT{)+sn92OPpg26(321yolDgL^gCF;)z}Cs zgQQR=X}3z$fgGTzex+t63cjH8&74U_^R9yy z$AmTyCWiA^WgVYO%2LyoJ2Zap5)!v9d%33wQb! z7)GP6M?Wa4+aVNMM5=*VE{X$X)Q9t94sZGD>xqNO`G57+f zrrTe&iPG|Or59AJ4*xl15_wL%n=D;O5jw~l#H7_zE}0owJLTzBb+-{RT^?hfTKknx&_CT(M0k>T+KZ#8h#6_K< zm~$@uQ6Qp9&Xemxht1&u6K!mYgri+wMGTQHWAKL?a0V92nZ)s7QX>IO`m zM2Rztt!*;m5{^8HiCS{1WUtCswM`U(!te2E;5|ES#qQ$LIr)@R2 zktb7%*0g9@<7z5^TGF&-p1hQAZFa6`{~Y7P=qis$=eE2`4B}D{T3Hv`8%;*a823%} z-#^gcz>M_G)|9LKDS{2x@UP0w^R)N>5p_<{m9$a2-Lc)VI<{@wwr$&1#~s`1*mlzC z*tTu!?C(Fis_Pmx>aA64J!{UKYTgE$ng0HKtd<@l_8HD4`R73Bvw|gki%>mC08)A< z5qb+V+v^}701yfb;J3YUitfh-Ts#H#?jL!B_lH8e`v4nl06IpmsGlgr(PvbJWpzIU zt0#qN;aXi*15m%4!k_O+CT)!Kw4RmpNaBt=IbC$^PMXil+&Z7q*@lP^lfw4vBGsG6 zvyWWVQYo3IOFutg)(RHWA`Wv!fI1 zB(z~Pp!%&jmLK6kyn~M^@7_?9DtA4RnTtjCTK)v;$=?kM-n)vouTJST>TvQI(U7 z1Rq^Q+Wj$~3_@x@ShiXs!oGEl+!|hcVc@E+O{-&-CA`tqP1K&2#AedO?33mnd5au; z9YdS%B&szig(XSL31TN&#pO4Fc2kpSf68iL;-Z-))JcZhP5T*YAWvbxiJZ!$;U)ec zm@2Yi(Z&fVA<9@g^{LOVWsOyxH%j9xFFh~-MS7Y1Yv-y428+VnkfF8XcBY4_%_~Nt zJ>Ni{aCemm0(C-6kDj&?DMqIQ0!aERaEgfnfTulKo&{{l(07Del1m3`kJ)o(V#LEl zM%t7TEEDy?PQCpda%NNOKUyuO5sZdF0_&WQ_^x+{UOzB);fwECDU zm=B$|^*JfAm{HEZF?^#0RyfY^ zqyV5b>gilmZa!7l7H9|?THJ(DBrT0By$dB3E!NbVY1d``3sAr6#TkEnk*8s(;o<)N zvg~mDfxW&i)=RTIck0hJHe>tw=H$|&Z`!G&UbHz+ukSnr;7b->XorwCbDmCkjlRa{ zXwOCGhRAJHr^%E7z!biEep$B^vn)4nbh$UZ{xK-aD)iH`yojAf26 z%=$wt->y?!vJ0#&1yq|z)R$;65H%;kXRyry6+jnbE_Y1zA(ce>S|YWFP*+g67`Flj z894es;aaF@5R?n@CwCdzdRibRU0k=eC>cUTj+sq=$5vRRn6pF~86HqSPt_dT zHU#Y8JHeV5C-R5IDAmch+Iq=1r_nmvdWvM4V-CEL=Bdfp+zSj0GBu2xaiJn0WI`|m z`9A?xsf6;6CU|!^pWelkpEwIiu`$*Pcu<1Yyb6q^hRL;@bWngk-?1(|>q+IsXfY3- z_4(Yxk1bU~uAE9al=b1T&t(hzEg;R4wOo|{& zWpf%0rDOz<@F>D%>E=+W{^0TlG5SN2^|%Ojn+Us>yMS>JMqO#041SzI@v5~cYcOw| zA4hA{0uZ_DkFK&a@a4b>z1?yahHQu`HE3tp6@m5vv=1z6iba)eAznK1h!Fq~{rogN zI%fCow)&;b-MtIeu(o;wDO`=Kcz+zeJZijhM7O@^xc=x}hqqkj zHPLH%eD1$ExWVPKjXW$Y=-z3sH;FmWO*FdCwe;6F9m>u#t-FkM55WJP(m@ebswmCczDD8>5WB3))~{TeEw!KmKjGq>Ca`-ARZo2s!rQs1{t=G^YK(X3~Q0mI0D?iSVC#DZgu+xZ<7Ci&(?J=+3m`ngMi^QZ<6;6Hb(gRF-)K3#E-8M0@i zK`~~Is^*|**%T#t%dZrcjEuZFwdgbL3w$@d6?(F>PpdPgB$pj-j7jdU*S#vj>}mG) zoK?Fr=oaATbM@c8Tg~+Louiod7@VB5JglAj2lSG&Z3%(l>`m*22XmT?bbtWfMqo+IuD}R$JL4=ThY{a#XBf z4iAwFqNn5%ANHXOaaMKGtgS>KufqdfJY@QnJ+du4AN4~mRlv%uQ2it1YxFU?*(Lpo zix_%xA~I=Ho-`mMciZ@g`q)N7sX@f())R&LGW%N&#G(!cmp=$4fx^mZ70TBK_p&|@ z`bM_^sD|=3`w2l{7?zn|r3)gx1K=(vIy-Y6k-pU+grM}&zX`UK#s3UMFH=AWP}!e7 zU$=3eD#(f73*TJciqwpou;f_A<}>K#t(qP-LCN%05>FWsny#z85@26b)Xabnz`a-2aFtx}Qx6jf4anZshybi<^p z7M-SyIkecZ1T5H?j;Mvn$D&0o?|qxrwumWFYR2gQcgqE;*b{&n;}qUX$1MVaMP-JjeUdrVg8 zDAv-vzQQO?bQV0x=%xSQj9Yeyxuk)_3@mo{H!;%Bx2s9{J6p2q&mz0bId=@#9w*)J znZ`~+M2{WE@W0M4pKX-bwfn@Vt$qg|zV!iF`bN> zCG~JO7p#L;%;5v4ifs!92F4ap(D%(= z$%qLR%tiqIV@A`8Ei}wh151;ZDmR2?)?kQ5d(=%^DhG7KC?PToQg)cEFEGKCwYie> ztP^K$Gz9^NoPL7|h1)u$c!w1V>kfr*mvcg#SdYiG{Ycn&&*zcCQ_+#lJL3C8BYqqo zVe%_T6;A061gl0vyKtD*va4ygwPQCeb7h>2DTd#ElTKB6F;Hm}X?&&v&fT&TQk+b# zC3j3=Xo6HpU&?abq*Rr$M5S)v;>xcKim?~(C5zm70}yhMT!K@)`zFn_Fv(+Ak#JmA z0+|`yQRrg?d7dZww*9Mc(+-1@S^oU*=yeiJW>AWS>RFELcR4J@2g+dj|n@TgEVbocIK`cSLC8Lgjk26(1kVgJ)Kll1wL zML5S{;uE4iG4+Q+k=@5TG3U27&nzQ8{zJ*K&hXpTVS07Aq^=*263XY~Xrpu8)f5Kx zuKl7xp&*q(rQf$>(2epb8zH?$nJlTL6}73-fa-W05$!Y7KC?#Yxf2HFt~rIQ-*PTA zwQ8pYUi<}wGVsd>S3_V%R>El@L7la)syd-Bm=Bo}FjWbRHl5o|KsX6*qF7CmE@z3# zMv9Q+T1wVXIYCIz45P&!OLZlPo?2o6i^^y{IJJzXYXx!>x!1l4>+$hloq5B3Q@&H( z&Da>%-fLty_|>O9f6LDkxcyH*(_YJ>h!*7et((JIkpqXbP>&6Yk^*``=jh2 zn;*nLoYOJAu-3f#r<0raHfY51-U~I(drA7_d|_n)VD$cd-|8IeWB@KKo7X}YXr9Tk z1MgrM1VQ8d|0J!%h`{E=|K1*90$w5JNF30BhSrV6^VPlc?ft{^{qx1`+c{u<)Je7w z1l^jfeUnr=G~0G!tFF!bOtYLjlQ;f8bOlSAWC*`saPNFmqS=IpXZ`9!X_kAtpi%#^ z`jK9|^>nTTPGWQaX3Zj`e`RaX3Mbac|J9eeVVSAAF(bL@T(40|5&Pmr2K3kb*1cDZ z7bX%9#W_PSLF2lTnk@q+$t`Gh!;G+xxbv~s8-qMVRHU;!&KE^KsaQ5*-&cvJqSQ4SXX-r!ZvnT(4Y&9nGUapADe|9H9Pw?2C3<=b&LN}?#sF$cfQ>?@8 zSN|sbj63NqjS+SLS#jzeC$x-?fr%Q}2k{4D>>+TlV}4jm*tbqKA;W1Fu)AK@GDh)_ z15sM$Xw?#tMGx?Rx?bF^>5f(Rat?*RoVG-NJb6o%0(=6k`GT|$A#EDu>J*sqE~gpj zixk%Nw3CYNOBe$(o7Xchaej5Uf>AsuN`b7i)^Mfa{*$-JKr|2Za+y3y@_}*BGEf%x z!sknqkD=3^3HaPpo$PzBmD!+#Kl9sSA6_^MY9Zv{-v;0yT+cJ=9ZGX4Cx#262fAsH zc*lraeuFN#{``d+d8}&L25n2&-a;;SS!{lHgL$vvf057zNCPO zTvDVK(g6tT-R4Wtm^RATGnpo~A7S>7z#d|C3ougvO-4#^E2GBD$|M!7o=+N6Yz`W zzk35tKJznXLN-Yo_2_&=S;0yo*3giSF$5pxtpKbkm_wq(2>2z8#9)9zi%|jh(%(qG z8WP!&q-cKED{xtFp`~>CF#Bh}KAzuaU48fbwy8~9?JTYAtg=ILJYtoM99kHrQ8Yd@ z38fEocQe(MAj5A!lcqV*W*t%a!MDEdRu(WIJc!YuazQvGZ5b5N4z3$To24E`J%suO z(A*XH-swDJ*gO9Sgs{7Q6IoAXzp)Df=}(lnd^0mb$B3{%!ZHGZhMIa}>otQfSg5}` zAbC200?uA)+Df8~Yl`KWtmB*YBW!fDL@0BJF37o)LMy1k#6^qqQRJ++-~m=V`0*y@ zJ>a{lhr<%jroRrI>jLn`HPO(FT^@WabmNNkbUTk;E`DA5`eaXU6B-%0X&yQ+UJ_4n z2+viyxt()cT!F^8xYss3%3?mB(!FXyWKBt5;yA1CCWMde{!_0!lfa0;SKj>Uc^Pi8 z=9eMETfQu&`9V&{#B56nGE6##Z5Wu)v&tyY5TLNb*!X2-w6t1a9kP>$#h9m!J0;h= z1!Wp>(i`nItI$}dgpD-wF0LEk!&4f#hd1+kG3;L*SPyPo$EYP!g5YJn8;v0XD;jq> z!e(;LE~U(HD3Bw`0M1t(uZac8?ym#fz^9{6{^I`n@P4>}PsJrX{C%SEyrIFyTZ4}) zcg^leQdOFRu?qA?4f$ebOf|;D|D5~uvySG7KGIo}%0yQNEo;^ziUA;^{&w80$=*6r zZgFhwYv&4$4Jr5AM+)?AMTpgPN4KWP!yiy`gyAR1ne+b&r2@7}vmq;yzMGrTBIx%u zBk{D;F&Ew;e#{XnpZxnWn2zJZd*Aw@4Z3n{fPetF;Z3L5#ii|o0uExXddL%Hp$%Ja zG<0p?e#{_SbcWT`;ss$09(eVO(9=)zA%gu$;Lk|A?R2@Sl|k?1p-viR5~}u z)sEH8%kIBI__W6wjerJlig?f%`IjqQD+jSb ztJP4CDylYRG)|zN*Arjm>CW9&9X|T;UOss5 zSeH%T&MLaC-@E|+xJWk!JUhj)(kwPyeJ(4&*M0Gz(q}FkGA2)F1MJ`c<-np;PHf1Nd>3Vtf}k` z;z5z*One#zmNXrw{+~;+O5{md(6RXES81PY3FDBRyE&;=TN;%k#@iY6dG0Kk|` zlUU?f|3yBm>vPt_53`IJ5rlGkncyS0$=ndu@~)p4EAWG}L_e`yNoEm~_Bqt!@6}XawxeFaC1ZDoFIaV&NE~trGLEU-}&tY^SYA#d;}! zzwB^N^40-@W=ZQBfbI{f8Mtx7(ilh5;m;?VG<1T?pZ)Nz$Q4W9Sg-Js8ZbH zUM0Ly2#yu4G0+|ZWB~^F4@uuZ9yKNyqsW2)`K(FoXEmmrUY^2Tj5A^{-=!hoZ{O5(JGPw>I{R?5U|@vU9%n;V-S0n#$ND;KCFpFrk(hMhF;6@&GV(T$|L(*mNe{o1n%O3c}eWR|NSZR*aeYhHN8ot zEDNrsvdnp>{!B$7t&LD0_wv~hB|iT^s$F?q# z25d!NjB46?43?$=(a3ijY4lLz^h;XI@|a@`pBpWhc6Q5lHob$s?d$o`Tfs$+_zFUJVPY%*WN-yVYe`|1+ z_-Nn=^V1wmaEn7;6K;DWFL-;J#}mcl)MuY6&qV7`^dV8oY1KH|u7n`Gr+mdj+!DHx zY)_#8{z71Y@C*PyZ;cte8o-ca>~bmV2Niu7Cr?wR^7s$Z{zkFr2LbUCz$p*!+{*E* z9f!cj?%`nppM~vlJ(v3yPwlba1c}|XfCs~=@g3v+*uWjuHfQLc|D8#@c}2y> z+)0@4fd&r5Kif%A6O!LFg_a7-ebyirrn9pWqrZ(jUiv_W{8DwWsvX^R?~0U>#e?(& zrGl=W23NT$S>xgbYnyGvVUv^qpxhCFFk0!10(WL);>>@|<|~;C|F;cW8&5U_ULjVF z@01gaI~7y`RJM`U#49n6P{NbGHSMzFUFl?ojYMQzT(12^la_oUQ2))D`LdCFIhZz> z9uO7D!u-Ivjc=c)+0L%+b^LQeY0$Z$d@8OOUCjrIHKcM4#!auAKHlI&n`nrA66DBW zT!u`A$PXs>9$`G?XH2SGvw^hkm2C1RM;e?8h5a(z@9h}<6k7lH?as55=Fa+hD|R$9 zn%-56z@HyFqI%)Fzzuk@NmP`I`bR=STBamRj|^dFP*k! zd>ng{_4Ga|5!ZU_9c=U{M0j#LTevzqo_sldT?GVmhc9#I&r`yOTfA5I-;3|Z@ z86qkcBku_nK>vKPt<;w}l1HaJ_QE}eiU>n-ase^+1UmB{T<#D7(-$+mZ@lG|=efQe zU&9q$a>p%2JD+3wu6z6OX#6*hL0+iurh>aKL)Th~&){U*;1%bu zHFqKW^mK3rqZCrLqodCbO>~t@&M7L7_o=G}Ec)LW!b;fUX-~oxD^SduMUiY$l01Z~ zD{!im-f?p!N!!t5etbz@XDo?+iiK9$@1cRi#(zR8l1AANubci%9fyNEVh;X*uw%kg zE<;1Gb4B0(@CSsYU+?ZGsAZ}G(hmRQ)6sW`dos;v)~!3H(uhTsj}`xdZI*~{fHTMP z5#_}NWn{~hGlt_E0lKld;6L(0H=^)Ul~&4YdNZw)PJ4XXWi+XEKaoQwG_(*$Kb%R3 zxks$+(PIiqsmE+idX_(hH-UwJbF^gg98@+h;p_6VmZ5qvoeZtM^yjS9I(V_pQ1oAY<|y&n=YQ4g4qR7^TM}u*66u2bZdofWKk^?fch#?EJLV-t~dYf``ciXTr21pmBK- z9qYnj)xk|-;&XJ%V}XmQj~MIGWN|n2QNTxC5-WijKMvOM^y)WU`pjy7r^_1%z1bX7 z`eZkdG1|b^a>G7Bt)yZ%rs`Ki#+SS-%QoGs%cj~VQl6P1dYc5TI2Jy%eG36BKPAU8Dsn#8YCTlsnArV8tRtLOPK1e<}edvA| z?h!sYM8N5JtV10}C1%mqj%jVs$1pojwF_bFch;-hpzQPByU#Lh{#^CJh3aooS1W-jE(CXrMtcLEjslyO&^oQW4R)dWjMJdcyK1y* zb=I`5R&ubzLXDo}Ro7}3c1t`ng%J?*7jBZRRgS4T&aO6c6h~~)-vJ>3V-z4tbes+Bd_`}FpK6(3u7E^29 zEKyXe2PCkohf_fZULPib#=9+M2bbQdqvw^iHRZWnu+hWQy6(}zG=#Ewdx4`4{X?~y z+=%S+eFVKncV8BI+jk};cNggcRBu^6^6oVK{NRHJGG+hZJZi0tbQ9S}?$uP^vo9|J zf#=`ILLXyON~_*}auaxw-l;u(7#DLPv!oGvgj*uG016?$vfaiPiMqMEp6ipa5{0T% z1~sOp0JUXfwec|eKQFavd^^7fNZrp~?}fUxPLO6_!j#H=y-BQ_n}L9zPV_>kydUD{ zbPLk@t=dblG{IyL%_5uXqC7qfAS!0}sKkXPA_4%>j5~wuhRwj!_S&AW@9)*n_+B56 z{&vphE%vCoGt)$Fu)#%D@h~0lF`JkKZl= z&kA`~TZjOlua`WGyKlmfqrQd47r_sdWzD#?;Cw1A?7HtjEx006(hSFl3eE^1nI*-> zf8V;Yf{g&@VBq+??733o;Ls2x&vF{WY2wkDaftmMhY@q~aXwl*=<6ouGwY=RdhMf| zORyP$qmLOA5|Ym|OE*XB9A)2!*x*_9WTtj4(i+t>uCDc$erMF zAg2^tOgZR7hp?v>PZcmPom9%;AsjdZrfhzr{6CwFW%Gf6=21OIX0np;pH1M+BsB$= zaFUFcSW*cqRL|$#R+{gVdG(GYbkDan|F*?_;oD!XXd!;q{7m=SCG59z}L#u;R(pYD%O)4=i zKHf%J+JLLJdQ-!?UJ4{};ty**5MEN3oJX1X>aPy!mrk zJ-mvH<3%0QNRiyO*Mi&-z-YoGPdp>(=Nk!fgXj&}bIw*1(IW`fyho?eNzfIDUtQ81 z>~n#xSiTx(*l;Hd?Zm~0@H4O|Jm$N@?2^5+wAR|IG?BY`ohw4=O*a8}OfDy6pcG}` z^F*jkwKvU_9qy|nu}8TIrvcV>A%|)@>ekzTn_e%P;)apB<3A-T4jtSU z0q(P?4p2Wn-LsnN_HH-LkFUkRew;wP`j`6-!y6l?>aD9>>6|O$i$I65FWIQ7=g8VL zsKl^eOF**DHQBZpH{>g#esXC`8kn+qa^W+f(fnvAi-e=VA;gQNM_okTbVEn8WFt0_XV>r5 z3I$9&w2>JHDFda1cWWti5E%b;TnU`=Lp6yk=$Rp~LXn3^QPYz5^Wd?{+oyZJfh=W3 z4%r@NJ<2l6m+Q(>X<<5!G%$wV={M=2&sv3}`F|-t#cLd; z&y*vnHA*YHR;gfHFCw5ziZ`!$!mntw~jNJAhNh$FVs1KobS+RTr@V=DLziYKBUqBz-FqF9%U||K~JK(VpAFu$z+(*`{9Js@_B09al5El;fhpVacL!&C$jIRm=d|ATd#9Nel49$TQpclG~TNwCV!($ zwg~punhzW)%#8g=ONyl8cQU?#y=6WFeC08b?0s(lNKvjwfqNRU;@`o#F8Oje2r|>a zD5JotNR4sPl7oz_WM(Fd$wso-o{H?e7#JaA*9Pu zpE?AeF&|&`S?cj@`;5kmGTLcwL-DdBSAut~QTM0t0`tBo37YAjGD>H#4~DSpo=-IJ ztkSGXq?xouG{k)4VvyuFjT?F4spr+_b_ED&e*V3O`xw_rv~I{poo1EH*3LZnnN4L>&2NUOkT^`iEi ze$(ZHAIs8V)szBa+H;Na3(}}RYfj0#?}{Im%i`|G-DDlN@ASL7+0Kn{+NhbH{#B;V z-p6W_w}v|=xx#FQHuV)_x9*hVfpz61@xonbF7kV0-}6;{t4#E?ccSB1xF;LeP6Xro zFvN}Mx&@*`Yiz44GHmyj=jp&dYZ9Ev_wNF1f2LW6s)}b;(3XQ3aFKUg@BMTB%p7`V zR=$Zgj19~^NKHq^o;Oz{v0VsHCcqXAy>~Pz70{Ic2G(S5v-TRg1QY9SwL#UsM=6pK$B6jg*25dc(Z7?lFP3fyh z)9Z#zSB6m99gYJ+K=6Vf7}(ACOm5zV>uY0C%0GxkuH1(fiqB=m-_m%zN8WKd$Q7FN zRolu9LeO?0wPWSv`Gxzh*&ZNmS~o19p6Bt-pg_S1jeJLmTD^}ncxP1auCX?2su0y` zq_j!T|ABx85WYs)hHC`nayY+*$qt#j7q-gKJi{$A^>@#E3k z`pH9Fzu0tRlBwW{`5~UJXI%V+eRVu-taYbh@u7M4$ytqz#p-bB6-%SsKl6?fWi6si zn|MK=Z@TG*^%4K>2dHK-0Lt=BW5CPA0D+v_GZ@6vw>}Q36Kyn}UlAV>OJhQ%!23FY z^m~0a0KIVP`Sb%c?NbXEs}Y{M!B(7m?ktu(=Lhn);M@+oK<5C;P9x{hG!)Pi{RIa^ zd#n7yWL^;W?p*SUWWK_Y!WopSE2M(P+`t8}7REsfjuOfe$RD^Z)Q$Xsoi z?scAG)p61tLIW9oO0j$NorMkOMYPzm%pG6_(vaK^ z27$@f7fUIXgyBYkpTv&!&jBo3@HsoL*ef)WX<2S~#a_u{C?7S@($tOR>c*ZoS1)s< zv4Vk200PSS+3UZUWdoE}zMSMGdo~2m5-3EZVe3pRwkJ67c!ceDxxj<9$nFOO8Xl+( z_wqEs`5Y77yLn4Sgf}H~SBoCR$w5ttF|(7tnX;=FXI+YJ{$6~oI{C0zG+Wbmp4wz1 z`}1!jBNIu{g1<#dCnA}Tk`g8hZdBeyHG!JN&cT38NSpc6a1SiUmcR0%1wZnr?6Pd+ zk|keM@~#r;H2Rv1A3C9oe8{b`m#j8FitLkM5^)-I0XD&5fZvjUarUBvJSvN_jz;j4 z1OS)a>Vwb?;N||3v9E!`1HNb+7YL)A;gkv5Y$hDy9*6*r<33d{b<|P$fCO=X;BKq} z23htssjpA_cG>rM+^22B_C>RbQ+>Vjg)yhUWq>HHp3_Nz9K*c*d0qPTr}6S~Rnf9| z$DD|!54htVW6^zrB1STo7lqG60(;XswST#_C`Mi6$aFJP;+(bxfdXGaI>&rP7U9>K z2UFSQA4v~oFX!Z0%yqIyHK}xbuYEYWWtCIpTjDt7%mY3*5rcUT3(RKwG$X^TE(KHZ z0b$=x*dx}r=fE!3|3Cpf5VQFck@-)al_mM$K;$7%L(rJI!UUm!YKw}QMu@5(9<=%< zPAFgVp}s2Nlsh$2Ci=ika@^}_X|*`lUGLfL!D+xH*K>LCHQ=;jcsf~%;k9XyjyXN< zbIBh!xUnBQb7Cr3|J3W-Jj zfjM*)1*z!!qlDNZ#KmH3XADJV5A_dV&Geh1#BTj8FZFthEjFHo2Hv_<4v8g29lnF& z>E*{u<+7h8QSj5C?{Bc;;x}%n9cA*OqY_0x?kU*+Sr=*f{~Ze8%op(Qq6ZH3&&0V{ZE;SW)tKE`B69x{pk;<6r5O?&Zru|O?~iKvLtWfjyOtJ zHVojI-Hk_t^htiI?w8(h$zYDp#tw;whMKnH_35bZ%jxRrW8?m<{oxjI@4DTn&UPH3 zUgbkJlhXLvX<1dT8~FHZ&HBH*Om=gaJidr8?Jq*RxKTBt4_lLOq*Oa^gU z+c;(#{H#f~_MNVh0o6vs6!{fh$ibHCF#2(mfItc}D|NwuPdj*l>K@${3#*LA3(Dt2Nnk? z`4$nfjQmoc9ttlVUXP=R3p<*Y!|{^q^(JI1nH?{#^FBj^h+t*N zy1*z&zeRn=aR7pE-%#6_g2R-6nbO{`+AaGpRf`m8yox!^IVDO7`RM!OatOegfnFy^ zeL)%#M41&#q7Q%yHkU^JPw^O}8MsN+CUL8gh4l?&0i#`K&Pl;OU_9uW$6R`bHJ5Zn z^bg8&2t2Z;>4X+j)d0^0P7%>#Q(0{`y33iGd(PX3=SCy{%I5P2r>Cy(SiN(nnXb#% zxd~Um8Gpm|R}*1N{3ZX2qLob8N`yZnhk{WCcFJslgsHoB+tE~+cfgNXRw1*o6-?dP zKm{f>4t)dvB0P&~e>!s8b}O_3uDLmq&sg8z8zLVLv%YMe+eZ1p0aiT!@@G54yZ!Wr z8`ykjb*An{-y(0T{a&FfPU&_~%#& zQCKz-SI2fB{)QFAWV9R#rl{xQeYPN~Q*PS(HhI! znOV7ieed5Vi`}aI(a_bs1Ax9MJP!^(jD&tiA<#9_76uv{MeA>2$373vr1`Y+;`T>y}Ja z8Ji!&bkuRC^c5QbKgx&*^k*@LrT=7KifT9KUQa1h{g9^Y)K(!mE0C!VkEoXD6;5$ud!swE8o=* z(cf8_rV#i%F=)GsfHg%=9N8c=y@}V#zzZn7Cfr2Yu+Dd=!K69zshiNN?yl`3=(0$F z>cr4iRQi!Q!C^+8yN{QO$%;30?9YGF$YK#~+hr>mM?ENwDJC_*kdIQ1Ihf)$*1W_E zqe1kH)M!I`WCln249Xdh7#KgPP$iCHy{IOFYZk@cgY=BLH|9;Q9pu-e@ zwtQBaGgPQ0I=&qRbWRiC0GJ21kY)JaKj=LPL&D zaJX!-X~^0{IDD@6F;eX+hwynuBtuB9Fv4rSpb71&R9{9t9BJk|E?Wkwi30~EJ8=|- zOLtbgqzjo-2WA=3AeVr>0{J7E zVZuY3C+ei`V*GaleauWd+@`D5o>zWP~V@8R?%669mGIt%F&`WYCtG~lfWjj$% z47P3Vo2~X}y6TB+TtnD2DS6v+S%m}DD(fKmRK%|aY}|XJ%kZew1(9_YSkOuq$-9*) zmN3D8Bds43Tx)JvBv_hE0A~Of?nyu_ADv<#ygP0O59beG zP#_E(HOrDTAe|YIuS2-G$}w)4)BUY2#kRU=`L#Q(K|{>hqiVezN3e&C?U&N~tNYHs z`m%u=Gj07cNR8pI*xk+RIM->{>6$TdUJ`DR(uZ+-@#^)D03UC@R0WU34uKqpoZnzHL_?QK=PcKb$gs^Q z-J1irMM$Vxs5Y-t?+-EZ^7+y#85^A|IUbkhppSn+>SB9`e;8A{`53WB;nU=#exSYpc2#6Zsiz9AA zwX;f12JL)OXOA)|H*txcTt-pWExr6(IX&i|{MT71UjAqW4u!8|(<&V7d)JTKq%)_* zoXo>*?$3)K!@8VHsL2LlfiFKL-#?z;-dzo(=CNPvcVk4h>t1mdJ{v?dZ8oSyRp_9k zjf#SPA(dK?5R0zcINeT)NadpsJ>l3am11XaTw)LgMjxHbhbo$t*iy4vRk;R2hi*YC z&VL=0@H_l4d@%t7#>kzcB|`oHL)KD@!W&?izuE-}Yv{@7#issKE9ll0xdaF%_YJCi zKW0uow;lypEc0vIiFY^Q&dXK=3$|OBv_qFs5$-oR-Nw4sI!v3nOSN*KtZvz@`{j&Q z#{0f%(@NsN33fUNbo6B3eM!H`X3vm=I>x0g3Q2c`{;R5=ZoD5KKL_&%H zojWWoPuTF(I)@OmmmbBO1%%eHvuur0&V3$(2i=B;qcyWG2Syd-^C< z&+X0-ly|lKY5=VfgaDzWzM0J6`tBk)~ImwHjmma_pWl!ApIpss2q* zr)_9AI9qPGQ2n@W?ByD1zdkhgrLHzIg-g6K!r*~&kDNv8Og4aR->9UcC7MK-)JreK zQG9lcPaxW1xf7zJbnjbL>j(qF0KbPO($8?1r5P7Iy4M?~oAKlj;CgR|9UhczyO+tN z|BXM>lF!9oAIH*7@{j=wobWGp09R8^euY|-v~E!=8&dIc1NTWikuwKiUyu4w2UNWZ zOdG%B0YA?soNR74gXY^QjR{(|!d9M`&UeDwD6rprN47R|(;aN{a_`%$M$(2iCsUVN z@w+?R0`8%grzsM+cG;E@a@1EbFy6TAdS5=5_f%i`gR*+{TxIZ7bsTSvW?3(P3S@5f zW#jXsU%m^y>Z+W{LPQ<6dc4|Ve$n1fnPQWb`J7Th{uw!6jdQA~O1r5SF@37FCqa3f zV|5jb-0l71>eM|p-MDN1GYv{sp9j7|j;zMJ7O?HC5=a38Y$*O29%?{qFa_S?+JN%T zjA2lwvIpu{<$(|*G!eK?F?zgtpWyYpo_q7A!*rtV27rjIKaTEv$nhF@tq(PfY&IheTn5TRF5&O2W7P)$2WYK_%Cm@*! zR=hKsh4*z^PAbUt12}4_DI77I_m+m}L~v^~7_qsX4F9BM;dC-^-`>U*&~Rx#zfbY}q^j`#x;(C0 z6TF~TXzc{Q*~O&Rm%XJH#cyT!YhPD6chXf&_;bRI%7EQ}=?>FqPoWBk+UpB^ITQc(YumeI=C>KwH-h;!kiKJ-Ub+|=U zGQs=RkaEyMw2=q!^x|b;f|CM{7ZYpFT*W3btH$klZ);n0UB`{^$(6nApFMhIei}PQSBsyCwzHiZqISvSAiwne3kAc z-m})D_OnUEmONEAyGoDd;GNMeCB!{!@D!ppAkDS zx&NDK07U}!3I6xy1}pG-v7vg5Hhp|{IJdETbb7FRaWuQMd3e7|fM;I;0Sn9>wT;Ww z0EZeP)kBLaL67)zs$s~%CwE0ypn>JzBZ{`+H>Zf?@!DquJzWkLLn`8Hc3D;th_qJ* z)yDT_-<=eHnNY^X=>OV#j~@24n>kR%d6fl8XE#8Z4z^p{_Oh^1DjC%utHti*i-L0+ z&PJOhWW*Qp8bXHFby&b2!j5F1?#^dMIX5}X_+s!F{>eWi|Lw|}k%~UWvL!CZMYC?F z?&4nmwU8WV$TJEh-(UrWCy7RQJ~)~X@K!kcPfKn`McV=9F_A)lo$U`~PTxtsI%?-4 zHw2<&XGCVyIjzKkm=8vJC2}ww{pbt}pilcAe{}s#ONmt9=GmQpVgTuUo`fN+a)q`u zVkEUJO`o=d=YBP_e`LYrW8%r%uvHioJAl<)j{6 zDP5Op9Tnp0sCielScI07 zxxSBY8roR>cjUHi5d@-RCtR9ZKMV_FqmF8&?GH!*+gOMrFvER*pyFd=$)GP!K)Nj> z_mkAdjkL6EF!Mr6=;l%Z-aBrhM2MtyjAD)5MsB}V#z@noPMpyhMD5Yz_yGuQw`{(I zOjJz>Vj;L_`iO^tm7l50=rH1#%~y=u_TTGr+7h2qUQ+wX<^AXD%&xwhv775$)oSWh ziQz!St49`fDYnn7cJ-_l>6PM6KJ#;N{miiW$(eau%-Xw<~+6)2D~McYFO=$SD9V*y?}_OwK3QLqcx zP23GvT?=TbK}?O>6Axc&V6)fvo|4QAswxCAk(j2@lM$FFgm;d1+-;lp(z@o7rtBfb zz1YpHv%eVnZ({lXxbt~}`msnkn0q89T(c!^WM+Ftirh2pWE$rt@)3bhkLrLm0x;QGdok;06t|mJ8)YU zmXfm=XQsMv3xEi%DrP&@^O3_KPq%-voe<}BX-wU7>%{vIOemNgfq(I_%m2gB0C;(` zq1DF%yq&o~0j~hwniZf14xodY$*NX>5;%YkY9p?@s{rmUV6p|97epiZ&=DB`z!cAZ zzXy|uZ<3bn?AYCy?cy=SAOm4+TIw!wns-f`_VMvhd$aPKbZDX(ljr2to$bz)6{Fk3 z7g$b|2z#b%vAAy;^3xdN(Nnp}v##%RXfB&m_I(1nGtWI>J5O4(55T^I!YzR4-#@L2 zYOHHWnb|u*p!sHhKv+I#MvP;p!k};anP9Rx-h{dJ5h^>6q*$#(pK6N+=C zbT2o(^go<}va4FHMO%}T?arwETZZLHs!5lTE>1)q$g9%RYO`;+N5b;`$w-mf6w@HZc|>1*>kQXY}h*O`tZa%SfTb-**=)IE9iz? zJ_usnTlOO4twgTui3!;RjE=dpTPX!OvQT${Nn}3E^*va@S?onti}0cFJtXuE*GKpU zt<0=z7^Jk~U(V79Fcl0&-kW8BqX)zJ0KOact_NK(W(2!McDvEnpi9E8sZo1$B}j?~ z5~dI;VZmmlDSiC_(9SFCEGT2x?99pb z#kXN@07sRm1Gs`crwEPU1^52?Qn&@3_>qBzpdU1dkO-kqGP7DJu649?DS-2#f}hn} zq6g`Or&TW zT;~v;v%a6_tqYpe6iR2}oQmwK&pn^fOa*Z3#I!f0xI_4c)uEIms`Jc^Qy~eoKjoBG z_O4gn1r;mq`VZ_ECw%_|~&a^5ejP)c5=yZT>t+`%ggvs0r}Z zzLxP(V2mRQEoJ}!e#`ZuM_C3e&?J=$`JT|_W~K#djBaEKg=+W&45~DnXR|SG8J$jn z>+a#<-;C?s=+E`%&Rl1_UF@}ww#h<&;k}XX@WQp54y2s7fuOVYK?*eGZ`xug>5bdt=UTrSt zKzhXgzP}%^qUO{n7-AzCbZi}M0NVh&C3DyYO|Fc|2mr)E0bc8sxJ9(f36f4CYJ%2s zohYFmpof~ImZqvg!X`=)N`5#B`1rrbjVyca?k;{wFLwvxThCnkDEYmq&X>c{L1#`r z951Wo;jqr<>*Mn5r?1V_b>L6wZhOYy^5WnM~I`XK!|UWDJ#3$1yqg6O_(Vfm)EG+YM@+ zMlS)v{ZEi;e-U5XBKo5zIj>Uqnvep?ZwtPHINJiq;~%yk!1uTN{r_75Ycobl~ zVciB213t_3G$qNyppM>H4Al@_^)gxmlL5Rj`#LQBHNC=_#BtJq@(lkM(%3TNz&;-qht3=EO1`3%Pb>Vchyu z%(E-HMLrEw2+mn;>#W&Fuper2yO!*Y@bdgY3fpM5>N{d-K6axD4J0TF=|eTCjducQ z5+8O#C_ZdGtSQO=Hfce+9uVpRByPA%yrm!F`%0xngX8OhfG;af2|UCkfDhdHAco3Z z-6EYlXJ!E)-T{mFaB)zotgaRSPyoK$jlP69K+8~jlB=yc1||)9s2#c%DB98!Qzelk z!tkN`5!J)MVp>Cgf7~3NHq{yIi$CrXDQQKr#O4!V)-ja?2B@wL648+-Kqhi~U z!AHT!eA`0ySIcfDGNL4Ra@S*P~1W!HZeEm@60 zcSm2y5R|5Ox82QNx^-ItN?)im<^xaN%-Jmp^>O*jW8Wb4*#&cp9Hh024-GV3;qIwu z_g@hCn~7{Lw9@w>vq1j4(gqOw*RqAas@GO3Yvavk>|dM4{{~4Fg3NyXH^X4KMbih8 zK!~-1m~Jv+R|ybv1`-84Rf+)se#?!r1QyVP-56W5LX=1jU;(>{y2W0ye(#t7P34IQ z6G47$`eXpWubXW3Y4aAqbJL&xg-39@x9272@$QFV7WZ#^?|s|#+hweOIbC;$>r^vn zAM-=HdyU?nxdTp6m*Lmuu6Be~uY@i-teyICa+~k&=I*EF3mV#(bgy-dnGMI*f z=7T4$a7N`nXj8Nbt23qYE*O+ulF0nko2F?=PSHs8_Af~VAcM;z?i*u)v?G;){tB>- zI+nY8>2s`F`xt2*{g&MX{6J1B0G|7ey2sKqs9?A7H7i(6(!&UhUa~{&P`5Uazf2Hd zPz8x6v8T~#j0^yHUxl;kmehS8{qe1{JW{r2v3&HCXWYAa4846@rZX-chn-!2e^fOu z#!lLai0}F8aN}ns=I5QL$aby>gie;7B*F%1mSX*`|1XWQF#9cA?BBR(I`D=It14zqPhYqoCfFsVs7*6rKI?JbF&DaW`$LA3kx@!52n zT|dq99D^P333S?0#+4_XPI&~LfNJ)+YvCNwvGAxJPX&$#ih?B=WNwAD2LU? z~<+{CcE1$o4>z6f*zf56uxHz%+%@t(y^u1X$j7pMW}oL zQq=3cVmzYh37*^ax<%_Spo1FG-EE9DRy-zS_R!RLbaw%RCIruhTu{pTrvYcSN$2pU zhE8yjB%?|D_4LDYpOiknOs-~E!#B61%i)Uc1M#C#2d^Jp$}y!Uqf=<+7mxe8D#L=^ zu8;F`Tar^aj~R5)j@m8}^R&$&PB@ad-kJNM>Oo6TzM|ZJ+b=Up~2=@06$h z+O#m8v%~%zGer#|Kl(Yj)zq}oJ4sM$TU3$CNFPxsZFr)eI#=Ve%tk?2Nuvl z%_LPzK?_VU^-yEtcJIy&{*GV@RY=(EQ#1;Lhz#I{JU{VX`bV?-SHBEv$I5RgqoP@H-x@VvrnHP0yeCdD33=1x?QL^lqBM&+CGxNnc4CSw3!lZs(G1lc9(0 zzGRY|n@7ytk?C^X2pZb++M>9DZehUVpQ`~XLd1FG7lPhz^zDla&Jmk5JZAIWa&u)GvPe# ztNs!Lk=HK<08eLUQvd`29uEKj0000l=u#Oq00020_A-KGBxHdd8E{2ZdKa8Dn%aS#*Y}4+u+~tkM{Q5E%pZk&sLCkZB?b{X_ zEM|{h^NQqp2`4jS##3FX|bnOSV}*2iVofbvKqAVF3sA@Hrm*Tjw;{v7NN z5bd0Y<&ySFjg0_x#S=$)eiMuADdCZV6)0vex|aPhDx*Qz4B8{6fU z3YOJc3?J{ug3sO;lVw7kid9%-4tW=hCvH zr_SbK*7j4+4}bQvo%?>4XwF4z{B$?@OOl1`zfRZALc#D@ubPH)k=jEDx7tE8Kfm1- z51_)hFH;HpGk(VZfK+`b3qc%VQPkm2U~DaHXTu&y(k2&JLCjPeXe+OS&!d_#CS3m*J!z6DwUIR$o$^lqy!feGlKcIYnm8EbIB z6O$Jt!bF5cB{Sg{hJ42FRk6NcAIh0j2EHrd{_0yL)*P)orXWI2qEe9 znS(ppcAK^u#IB>9J>4u;s^bv7T2(-(3$I8;T&C&KvNbS|;uCg>o<@qZsm78Q4&M#`dx!ln%cXBxVo8Oi>Snevqol=LPk}fenhZz-lq2z+T71$rxd!3>r z6xVr|#liT#T+phMs548h>QYqaQA!JNL+AehlM)Eo<(`UYerDx;%X>d^LlT!AV`f<%J+=s#TS&jtoIHllm$fq}2ic>2Ky zUOm0G9ZsIol(VcH=d<}mI*h}3oSvCJuAkns$@Y17%+rkdzJ88znE}(2#`W_1cb(SM zb{+%6_mbV3^QfsQ_HEzxjr+N;O{eF6Zge}3rfKSe!|n58y}zH|%foX&NT+gfR6|vyM1+8Vpmd~26QmQGz>y}QH>CuSAWhmq!a)=cU5XSb z0fL0yn}l9ez)(cGguA`xyzjlYzrFX`WzEb#|C%+kR=lBs7Bd4E0|*3S*3nis2HJk$ zssPgg_h7!|0-&MsRn;*C14k&>DGmgJu zfj+!Plb>@@0gQcIc|-I0WtLr5CIy-&sP~ZUnC`BlH_s44Z0fFXu39K}ZTnwQ2xS_l zON*DrWT+6h>HF%Hh>+iNuI`23{8a+s^Y&~JHva%{Z z7AxG$Sq?diKb2XF4vq}{(IeX3Ykt#afdf!8TeK8X@cHnB9q;-@N;TAhNgbL@H$1F= zZhOB{`0Xbo*Jy2X_~p}8HY4sr*HB#D>-CeuBir+8R}k}lXZo1i@sDO%;Rt5eGGVY# zX}^W=)2uhUK{HSPvDhcD9zECx-5WIsUXuPpg+Wb1(Cf@XfDJp-rZ4Dm`yaHN5|d_V%)Gl(ixIncmp$*6_gB)y+S_i$48$!)pS~2TK!CrX_=NpAJtlpSwN) zSA8qg2yvDW&aJ1Ev9s&V-_6~U$87zE7qP5dl`QV{m!wp<+`n#$)-XE;M@}oZhgPci zK<3N!;^-0$icCsvS*E6EXUjAkgUnndB_uvqT!7CH!zgD(wu=2G5tJmd7;JYBKVG2d zZ|17Jmqr(U8cq+|DXK?OwUz!H!ciH_Z&HIQ`XQjBOcBb?D_zlZAvcn!;wNJ%SgHjE zo^2-+aY%F~`Tczx&6T$(&jjZ(L`1vZZD)PcKARxbI!({FkbOGqJG7MJ)fz9+c04h7 z{-aN7>TWaqDQr$F;5L5txD!%_cPZZ5k<||$VImCs^MZHj=0kPj=+H1#8T)$a|5Zsv zs}@Jc@vn_G`fhOoefO`(p`VJ$B9ykrC)YXOP^n4xA%yl4zIah~bbq7Dsk?DkW^o`h z+I2XTa{Se2XYn470vasmIjfyZS&HQcfxZsqd4by2$BGIJJyEE9!z*<~a!8~xM14lN z`EWiYa481rz1T(-dhq%2$WJ1F1QVzsXwT&W=q2ABF5aZ$=Al67tl3kaVj9Var3(63PS58PmkW|-Rx8E zqn)MxT8L>C#KPG$2wPZXBhfzl(T}l>J>ZgCp5f+`YDm4;0^QDP$@Nj?{K-aam|;?a zlFi!9Ua_V!@+j&XB70rBSG*}Shcw|2Ya}l>5niiAw4yc;KOT+;#5MwO3&dknk`flb zjTEeu@QM^C8c&8(pCu;%796}?72k~b_G%ibuB zvEimKd1r6!4>J$xd9u>$W6!NASXo9k2>BKJik=sE#*)8G#IvMfZxHkASR5UdIwy}H z*OP#uFvAU`gntbNq^5lUtDrG{$Zl08wlkj~v^s*~>8M&6Za}Z6PUU^SwKidHSH8c; ztDaLfiZWQ-d4@aa z#`o50QU3Uhfqw#PCGmgtq-8Ab8z*xYbLdf{U3d@px?ngion0iXH+2ogR=0tzoAQjDzmsl~Xr(qGC~TKtaf;EUDYZ36BYjWSQFr z(FSbKe}dYDrUZ5jI8X)$4QjD*#IX*hksbQk#`t~G{qrT- z4j+D}hS~eqkxx;16N$`~D7Z?-dz2_szMD;|Py2J3S6IjA8j3!^p)K!z1b#u{kT1UT z++$TgzQ-yAsQS$CAi-Wd>nhm$?8J{LRt-3LltbnJ3@3k>0x1RAz2CB-sO0wH~Ln>2}55S!n_Rm`A#dQ&n2VZAvrWbad zC>C*PY?~dN35=5c9WQCXFeB%dxP{IAE)>jcLAS7vfY!-X{_BgTByz=FmWT#N7!HcV42f=oWO_8;tfq;uf zT4`tX`t!Rg0b4w&xN|DpEW@kx$Lvegii(QyaMKi}n-bw^y|1?E;(0{KZ&|II{3SB# zKYrxW{aTK1ZRP8;vb7zwosTvO1_SnK&BX-Q`b@Ffg@C;*yds zoUiIB-tzs{c6Z<&1q`YI=N<(izx1;Y;{PaR7h%(zH+PvBLY6Y0HSdT0>UfV`r;xh# zPmWcEvYKxg&R<4)oxL${=*yI{;^k5F+c0&gum874q;I6pWd;mL7Tj}kMhOfEkV96^ zc@`{e|8e_@nl$xzCu)X_jCP$NAE-MIqrisj?cFRjO-+g^uGe7H<5z_)^!mUsPBh-b zDCM)CCIw9qUb78Gu8lzYG#kzK;8I|s;^DvsPCqeL?-q`=<>uzDB0VxQGdmE^p{G>? z(W_NUE6c)Zu7*!Q75?`4Qve|(_$-P=ur*D3-RmJ>Z}BhtajUI~N~Ti$#*a!o<>V1_ z&p1>e?wF}3PI55DDe`Snk&A?=a-(SH)k92qS((s5s<1>39ROYa8$u%{wGKB!dUt@) z+54b*vW}qfHbgvZd#-!9`IQln7N{Nd<2p|07UO9^6;d7$Ru0+LOz~V5yhd?!}_C&6q2uhM=$6nbfM?y<5Ut+mg$! zGW7tY5fDP9bW^{byoiBY$Trxj*m+9|nJiF`t)sE?(b>c=UtFGqxGexWG(kYpcb>_M z)cuVYLbJla0gM?_kE!+l46H)#;G;9;;D^zuINM4&PP>(X6EP`Xz#RsWc!9i3J|?;< zbUjJJ)YHhw7(ughRj5z(vW}(grQOwbfDoL#9-D=Oj^(7O3>roqcn!vzFH|m9>2Dd={c2+R9iW#to0~hvt>q*v( zt#jDoBHW<$5Bg(Qu4d^yR#N^w97j?8J$^N=tM0C@fs+=DKApVTS1X!3*UCZhK z2;30@VwSm2q)`?Fze1(tn#!jk~eewdZ&=8xpbxpJpp8 zy|y2nVSQ+X4)J5hO8pFO`F0M)!0Do%8|8>VFiy1D`^kFD1Yic^kl1EDOVMY{fZ}2I z4~1-r>cFn&*@!EL?pGVs-sDhIM|nks%NLR+kX}rF9`y+%(^gkiT}r=1Lj}xPhhv8p zU~A!0|> z+_$^~dBeTVcy`Un;Qft>ab%mTOr+a!McRk+y6aDWr3H7Q-_Ml;3j>aLv(Rm=)#AKc zI`=mj%Cqs>$a}0=oJ+Db@6X>P3Mj@l+x@q=f#g1>uOanHCr0mYI*4bDxJD;Hr5t>G zE+r%+G=!b{%aARt?Pv=|!1bPUFUa*b#(=ueQ;v6SK0H0E5~ukvAaLHh>DOel$x;fe zO2-snjF^79ruo>T?3sDBr(>3d7GW9h5zxY=ml%lXt%nY{If&G;ExfJRMbf3n5=xxk=9la+?*bbPZr2 zC|x>=^o{}%5$WyQN1q?>k8iJQcV^BxbDur;nVGX2eOq6LnUR|j1OhSZUe`1P+HT-3 zgMfkO1OC~3pgHMvP1hI#T!9dWC=iHcPFGXi*#9{#OD~GIjVoemJ>k`egWUrQnJ#XL z?>~r;Yl(+m*;uIr>^nk$QJ}l3XJS}$5#M~56y?L>qNC&c znE%8%wa;%~ZPyV93Tp_24*n|GnGBvqOHL6Tr^ap_r+qn=MJxIa?5wlaP#o+#6zAIhHp`+p)>`yS?1C#%JGnMc))D$amB<*q2Qx5N2WIY zGql3s0jm2HjSh75yA=%bPd)l-)YS1X2-KANRUUNoDq2-}#&AhM)V029(EQmctV~y* z@J8&`+RRx8*?1bBLy|-xtRpH`)ncowu`$?lCk#J^H-%o*I%wp)TceL8T!4tDq-V4bIQflb!N<+B5%`km6NMK!L$Ea znwWg!cZMsQ|r(sdEXWNoM#!x0!aa*R@O+0I3T`Ul$h_ zxjoWyEe$+!{+3As?-j$$;taF8_7!iX=*@ehoMqK53h{xY93_~L)EBO_g<+b#@`z>; zN-V%Qz47e;%NW3lgAaRpPgly{Hzf@h{I0*( zk4=U9dlI`0lBN;K^3{!K^!q_$Kb1=5hnM-;Aps?(X)up@LZCOnejv-G5=H~^nlE`PW$l!A zKz!J{0uX~2?T7(Cr|I~W{Xw9SI(LCB+F06%hvfzXQJo;59CP9K{vj#Qq$X%vB17Ud zG2r{FG>`2c*ubORrPq9J+#7Xub#ty^s@V&UQB49KOOpj}ZcqH9kE#=mAk}qnpG@~1 zomDa4UYly0sP|i+@SDOrJD<6wdgyJ}LihyZ!?nS3L?~E=6JOPi*1z~k^Rm!^)Y+zC zlm|j2sm{Z-oRCcaOxLsG-O0Dm(X8m5^ERd#TL&USZQ>VHcv(1>i(BQI5)pD*utb?^ zy}RUc93`8Fo>w(^obdg}_P+K8M61m`liaHsnJUj-ne{PM-0Uph@_a|KKF<@RR@)l= z1#MEQ5G3@nDkO9$9h{Ebu4ZZlbDX3r!%-5lviMe4SEql@w5oxKo=xq!t%6?@xz__?;CCjX`-`e8td0_)%qNjf7M9+yx# zP6-j9`SQrh%BE*zG#?%AJIlj;`0t?Lah1lRF?lN6Nm-XY^9;;J3UU!kqobB*{>eq% z!{k?1RVAa~0Re_DU+WhR5>hDH&?>p`l2}J!u-C!PdUr!FdLL7d#-Fcc0*^eT{$g6} z&X7%Z8u(xyv|?PmI??$ar@40+OwEtVyL5!>T45kIUy8}w)9LUI*!ZM47t#$Jpejl6 zI?AiH@7@ur6NwD0CyEwlDhP1luDrO)9sb@9a5=aB=-%hyVl$mzY`>s%0zx~!eCxqquMlwIbMouXLg9ufZcntu2-grx(f;>WrJ~u zx^k}h;2_XVOKZW;*Y|!`G2ei~8})De6j$$FidgcGx3yrr9Z_trvt;k9qkNwfVr>o< zaR-w)rBGJa3j;Ld6HqKZwll4fihUpWb$Nc|wNasAWTW1H7SCnjW-prAa_Nv3@QD10 ziHQ$nx4KvqQ%y=7l8cTz4>jQiqdJi%ewh2*#zXqph$N_^pP!#Z{@+Plx8tdO!a|RT zj2j)IIq-?Yhd>=P91F)^HXL{-%?ynIv2e%vkGNQebqUwotgNg=kC{Jx`gF_1>LfFu zBRiM`-n#~Wv}1z%mfI?KC-i~xW6-_$dnwt8Kdki7Yhvw z8{xj4|2!xxM83R~bb0`t{j4r)XFeMR4v=#p5X5{^BwWWNz9q3YsfUX>U$R&j>PPy> zVJyq#2XBQ7J|cpR7@oiNrUbp8etuKLS{(a|M2RY)M&H~XTRPK&z*w|&$eyEvwjOTn zhI)a$z7M=2^`I)rhvVauFvXW#*G*l3g){ZCHWsV_V!&3G%*<6%+7kH0YjPwinIZtj zc#YwnW1Vl)CoPjt{f(XwsTg$Ef>RED;_|no3}1h;!}qt7Xq<;W9&=S0Tj_1>o+EYn zF3P)Oxp{MI_XJkv6xrb->(aT_>Xx*iSwk3tiH=teZj@Gn3HMKi7Kw*17U%(Q(d3mT(R*pW0TCAo#H?%z=M#do^o=+H zNI&~*TWLFa<8K!Tz+hZB^P+bLWIBUt%pM!Jl5K#8Op}_8uPnurh5C&ETYbXf%vhNd{&^^*TDTyHxj+sO`p+hrcsk#-%u)hY9SB+= zXABtH-q0WlJ`zQ8-7d9K&{z4-A6~A(DkFV5wRt2Ah%C`srul7eO*(?(U(6De(hm!0 z1uKvtejcVL$Kz;RDCuR-mX8u2P*Fyg{Z6l0S4u3uRW|~NR5CdCF+{KFO1N}TT_y6) zRHH&)CT)e`1)!R}rXg;Ye;HiH^>D=%V~U&SE9&ddfWG7((cNwJI}(r!1=9g7Hdjn zF(v6*uL$6|GsNceN5@(QVKp`K`RN4^AjcWLX&9dtU{hwpwI@ZK*_yz>ar4bviG%BP zEVDKZ)G~u2A<0zER4Fo5Qc7xRaZG!A$JJ=-piBEaPy62918W_&ljfF|H|AsSr`yAD`!R3nRqiZE5+X zZ}em4Jjcn$1gMQHbDNaiIg2avbBv+q;igaR)AbAUQ$K$kv5jaEMA|e&?d}G2 z_x8>Kb$q?jIXH-qDN?7_uUM7)q#jD_-!wdebEglznLb Date: Fri, 20 Jun 2025 01:26:23 +0300 Subject: [PATCH 186/491] Mass Storage AE2 compat --- build.gradle | 15 +++ .../com/hbm/handler/ae2/AE2CompatHandler.java | 12 ++ .../ae2/MSUExternalStorageHandler.java | 44 ++++++++ .../handler/ae2/MassStorageMEInventory.java | 84 ++++++++++++++ src/main/java/com/hbm/main/MainRegistry.java | 4 + .../storage/TileEntityMassStorage.java | 105 ++++++++++++++++++ 6 files changed, 264 insertions(+) create mode 100644 src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java create mode 100644 src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java create mode 100644 src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java diff --git a/build.gradle b/build.gradle index 07cca4635..7becffe8b 100644 --- a/build.gradle +++ b/build.gradle @@ -79,6 +79,18 @@ repositories { // name = "CurseForge" // url = "https://minecraft.curseforge.com/api/maven/" //} + maven { + name = "Jitpack" + url = "https://jitpack.io" + } + maven { + name = "CurseMaven" + url = "https://cursemaven.com" + } + maven { + name = "OpenComputers" + url = "https://maven.cil.li/" + } } dependencies { @@ -94,6 +106,9 @@ dependencies { compileOnly "inventorytweaks:InventoryTweaks:1.59-dev:deobf" implementation "li.cil.oc:OpenComputers:MC1.7.10-1.5.+:api" + + implementation "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:dev" + compileOnly "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:sources" } processResources { diff --git a/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java new file mode 100644 index 000000000..8efaa3e84 --- /dev/null +++ b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java @@ -0,0 +1,12 @@ +package com.hbm.handler.ae2; + +import appeng.api.AEApi; +import cpw.mods.fml.common.Loader; + +public class AE2CompatHandler { + public static void init() { + if (Loader.isModLoaded("appliedenergistics2")) { + AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MSUExternalStorageHandler()); + } + } +} diff --git a/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java new file mode 100644 index 000000000..ca83534b9 --- /dev/null +++ b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java @@ -0,0 +1,44 @@ +package com.hbm.handler.ae2; + +import com.hbm.tileentity.machine.storage.TileEntityMassStorage; +import com.hbm.util.ItemStackUtil; + +import appeng.api.networking.security.BaseActionSource; +import appeng.api.storage.IExternalStorageHandler; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEItemStack; +import appeng.me.storage.MEMonitorIInventory; +import appeng.util.inv.IMEAdaptor; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +public class MSUExternalStorageHandler implements IExternalStorageHandler { + + public MSUExternalStorageHandler() {} + + @Override + public boolean canHandle(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource mySrc) { + return channel == StorageChannel.ITEMS && te instanceof TileEntityMassStorage; + } + + @Override + public IMEInventory getInventory(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource src) { + if (!canHandle(te, d, channel, src)) + return null; + + // Note: apparently I need this, though I'm not sure why. Storage drawers does it. + // Here's a relevant discussion, if anyone wants to dive into that rabbit hole: + // https://github.com/AppliedEnergistics/Applied-Energistics-2/issues/418 + return new MEMonitorIInventory(new IMEAdaptor(new MassStorageMEInventory((TileEntityMassStorage)te), src)) { + @Override + public boolean isPrioritized(IAEItemStack stack) { + ItemStack type = ((TileEntityMassStorage)te).getType(); + + return type != null && ItemStackUtil.areStacksCompatible(stack.getItemStack(), type); + } + }; + } + +} diff --git a/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java new file mode 100644 index 000000000..a2fe88c77 --- /dev/null +++ b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java @@ -0,0 +1,84 @@ +package com.hbm.handler.ae2; + +import static com.hbm.inventory.OreDictManager.I; + +import com.hbm.tileentity.machine.storage.TileEntityMassStorage; +import com.hbm.util.ItemStackUtil; + +import appeng.api.AEApi; +import appeng.api.config.Actionable; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; +import net.minecraft.item.ItemStack; + +public class MassStorageMEInventory implements IMEInventory { + + private TileEntityMassStorage tile; + + public MassStorageMEInventory(TileEntityMassStorage tile) { + this.tile = tile; + } + + @Override + public IAEItemStack injectItems(IAEItemStack input, Actionable type, BaseActionSource src) { + ItemStack typeStack = tile.getType(); + + if (typeStack == null || !ItemStackUtil.areStacksCompatible(input.getItemStack(), typeStack)) + return input; + + // If you're working with amounts greater than MAX_INT, you shouldn't use MSUs in the first place + int remaining = tile.increaseTotalStockpile((int)input.getStackSize(), type == Actionable.MODULATE); + + if (remaining == 0) { + return null; + } + + return AEApi.instance().storage() + .createItemStack(typeStack) + .setStackSize(remaining); + } + + @Override + public IAEItemStack extractItems(IAEItemStack request, Actionable mode, BaseActionSource src) { + ItemStack typeStack = tile.getType(); + + if (typeStack == null || !ItemStackUtil.areStacksCompatible(request.getItemStack(), typeStack)) + return null; + + // If you're working with amounts greater than MAX_INT, you shouldn't use MSUs in the first place + int missing = tile.decreaseTotalStockpile((int)request.getStackSize(), mode == Actionable.MODULATE); + long fulfilled = request.getStackSize() - missing; + + if (fulfilled == 0) { + return null; + } + + return AEApi.instance().storage() + .createItemStack(typeStack) + .setStackSize(fulfilled); + } + + @Override + public IItemList getAvailableItems(IItemList out) { + ItemStack typeStack = tile.getType(); + + if (typeStack != null) { + out.add( + AEApi.instance().storage() + .createItemStack(typeStack) + .setStackSize(tile.getTotalStockpile()) + ); + } + + return out; + } + + @Override + public StorageChannel getChannel() { + return StorageChannel.ITEMS; + } + +} diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index ab9f2f995..51c71e0ec 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -13,6 +13,7 @@ import com.hbm.entity.grenade.*; import com.hbm.entity.logic.IChunkLoader; import com.hbm.entity.mob.siege.SiegeTier; import com.hbm.handler.*; +import com.hbm.handler.ae2.AE2CompatHandler; import com.hbm.handler.imc.IMCBlastFurnace; import com.hbm.handler.imc.IMCCentrifuge; import com.hbm.handler.imc.IMCCrystallizer; @@ -881,6 +882,9 @@ public class MainRegistry { // Load compatibility for OC. CompatHandler.init(); + // Load compatibility for AE2. + AE2CompatHandler.init(); + //expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck) World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75); diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index 8d939f523..6290254ff 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -7,6 +7,7 @@ import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.util.BufferUtil; +import com.hbm.util.ItemStackUtil; import api.hbm.redstoneoverradio.IRORInteractive; import api.hbm.redstoneoverradio.IRORValueProvider; @@ -15,6 +16,7 @@ import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -133,6 +135,109 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa return result; } + // Note: the following three methods are used for AE2 integration, and aren't meant to be called in any other context by default + + public int getTotalStockpile() { + ItemStack type = getType(); + if (type == null) + return 0; + + int result = getStockpile(); + + ItemStack inStack = slots[0]; + if (inStack != null && ItemStackUtil.areStacksCompatible(type, inStack)) { + result += inStack.stackSize; + } + + ItemStack outStack = slots[2]; + if (outStack != null && ItemStackUtil.areStacksCompatible(type, outStack)) { + result += outStack.stackSize; + } + + return result; + } + + // Returns the remainder that didn't fit. + // If `actually` is false, only predicts the outcome, but doesn't change the state + public int increaseTotalStockpile(int amount, boolean actually) { + return changeTotalStockpile(amount, actually, +1); + } + + // Returns the remainder that couldn't be extracted. + // If `actually` is false, only predicts the outcome, but doesn't change the state + public int decreaseTotalStockpile(int amount, boolean actually) { + return changeTotalStockpile(amount, actually, -1); + } + + private int changeTotalStockpile(int amount, boolean actually, int sign) { + ItemStack type = getType(); + + if (type == null) + return amount; + + int stockpileAvail = sign > 0 ? getCapacity() - getStockpile() : getStockpile(); + + if (amount > 0 && stockpileAvail > 0) { + int depositStockpile = Math.min(amount, stockpileAvail); + if (actually) { + this.stack += sign * depositStockpile; + } + amount -= depositStockpile; + } + + int inputAvail = 0; + ItemStack inStack = slots[0]; + if (inStack != null && ItemStackUtil.areStacksCompatible(type, inStack)) { + inputAvail = sign > 0 ? inStack.getMaxStackSize() - inStack.stackSize : inStack.stackSize; + } else if (inStack == null) { + inputAvail = sign > 0 ? type.getMaxStackSize() : 0; + } + + if (amount > 0 && inputAvail > 0) { + int depositInput = Math.min(amount, inputAvail); + if (actually) { + if (slots[0] == null) { // Only possible with sign == +1 + slots[0] = slots[1].copy(); + slots[0].stackSize = 0; + } + slots[0].stackSize += sign * depositInput; + if (slots[0].stackSize == 0) { + slots[0] = null; + } + } + amount -= depositInput; + } + + int outputAvail = 0; + ItemStack outStack = slots[2]; + if (outStack != null && ItemStackUtil.areStacksCompatible(type, outStack)) { + outputAvail = sign > 0 ? outStack.getMaxStackSize() - outStack.stackSize : outStack.stackSize; + } else if (outStack == null) { + outputAvail = sign > 0 ? type.getMaxStackSize() : 0; + } + + if (amount > 0 && outputAvail > 0) { + int depositOutput = Math.min(amount, outputAvail); + if (actually) { + if (slots[2] == null) { // Only possible with sign == +1 + slots[2] = slots[1].copy(); + slots[2].stackSize = 0; + } + slots[2].stackSize += sign * depositOutput; + if (slots[2].stackSize == 0) { + slots[2] = null; + } + } + amount -= depositOutput; + } + + if (actually) { + this.markDirty(); + } + + return amount; + } + @Override public void serialize(ByteBuf buf) { buf.writeInt(this.stack); From eaa2dfa23d69678c0f50a64a27431fc75201bfb5 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 20 Jun 2025 01:41:47 +0300 Subject: [PATCH 187/491] Add optional interface annotations --- .../java/com/hbm/handler/ae2/MSUExternalStorageHandler.java | 2 ++ .../java/com/hbm/handler/ae2/MassStorageMEInventory.java | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java index ca83534b9..be5dadbfa 100644 --- a/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java +++ b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java @@ -2,6 +2,7 @@ package com.hbm.handler.ae2; import com.hbm.tileentity.machine.storage.TileEntityMassStorage; import com.hbm.util.ItemStackUtil; +import cpw.mods.fml.common.Optional; import appeng.api.networking.security.BaseActionSource; import appeng.api.storage.IExternalStorageHandler; @@ -14,6 +15,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; +@Optional.Interface(iface = "appeng.api.storage.IExternalStorageHandler", modid = "appliedenergistics2") public class MSUExternalStorageHandler implements IExternalStorageHandler { public MSUExternalStorageHandler() {} diff --git a/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java index a2fe88c77..4728043ff 100644 --- a/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java +++ b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java @@ -1,10 +1,10 @@ package com.hbm.handler.ae2; -import static com.hbm.inventory.OreDictManager.I; - import com.hbm.tileentity.machine.storage.TileEntityMassStorage; import com.hbm.util.ItemStackUtil; +import cpw.mods.fml.common.Optional; + import appeng.api.AEApi; import appeng.api.config.Actionable; import appeng.api.networking.security.BaseActionSource; @@ -14,6 +14,7 @@ import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; import net.minecraft.item.ItemStack; +@Optional.Interface(iface = "appeng.api.storage.IMEInventory", modid = "appliedenergistics2") public class MassStorageMEInventory implements IMEInventory { private TileEntityMassStorage tile; From 2744ab322c9c1068b7d785f25bd9956de28fbda2 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 20 Jun 2025 01:53:05 +0300 Subject: [PATCH 188/491] Fix annotations Turns out the InterfaceList is obligatory, even if there's only one interface --- .../java/com/hbm/handler/ae2/MSUExternalStorageHandler.java | 2 +- src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java index be5dadbfa..fe82feb00 100644 --- a/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java +++ b/src/main/java/com/hbm/handler/ae2/MSUExternalStorageHandler.java @@ -15,7 +15,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -@Optional.Interface(iface = "appeng.api.storage.IExternalStorageHandler", modid = "appliedenergistics2") +@Optional.InterfaceList({@Optional.Interface(iface = "appeng.api.storage.IExternalStorageHandler", modid = "appliedenergistics2")}) public class MSUExternalStorageHandler implements IExternalStorageHandler { public MSUExternalStorageHandler() {} diff --git a/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java index 4728043ff..848e2c053 100644 --- a/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java +++ b/src/main/java/com/hbm/handler/ae2/MassStorageMEInventory.java @@ -14,7 +14,7 @@ import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; import net.minecraft.item.ItemStack; -@Optional.Interface(iface = "appeng.api.storage.IMEInventory", modid = "appliedenergistics2") +@Optional.InterfaceList({@Optional.Interface(iface = "appeng.api.storage.IMEInventory", modid = "appliedenergistics2")}) public class MassStorageMEInventory implements IMEInventory { private TileEntityMassStorage tile; From d15ab7079ae087fd7e48c1e443bbb9678f31fa76 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 20 Jun 2025 02:00:14 +0300 Subject: [PATCH 189/491] Reduce dependencies If I understand it correctly, the implementation rule is there to include anything we use in the mod that is not part of the API? If so, I don't use anything like that. Anyway, it compiles, and it runs, so I'm happy with it. Revert this if issues arise, I guess --- build.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 7becffe8b..4e7e8f7f4 100644 --- a/build.gradle +++ b/build.gradle @@ -107,8 +107,7 @@ dependencies { implementation "li.cil.oc:OpenComputers:MC1.7.10-1.5.+:api" - implementation "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:dev" - compileOnly "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:sources" + compileOnly "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:dev" } processResources { From 149e79f5501471ca8866039091b4732af2026203 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 20 Jun 2025 02:25:57 +0300 Subject: [PATCH 190/491] Fix crash without AE2 --- src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java index 8efaa3e84..b40571179 100644 --- a/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java +++ b/src/main/java/com/hbm/handler/ae2/AE2CompatHandler.java @@ -2,11 +2,17 @@ package com.hbm.handler.ae2; import appeng.api.AEApi; import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.Optional; public class AE2CompatHandler { public static void init() { if (Loader.isModLoaded("appliedenergistics2")) { - AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MSUExternalStorageHandler()); + registerHandler(); } } + + @Optional.Method(modid = "appliedenergistics2") + private static void registerHandler() { + AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MSUExternalStorageHandler()); + } } From 014a253e4300c96a56ea981140a40540ce26b9f3 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Fri, 20 Jun 2025 12:09:26 +0300 Subject: [PATCH 191/491] =?UTF-8?q?=D1=85=D1=96=D0=BC=D1=96=D1=87=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B7=D0=B0=D0=B2=D0=BE=D0=B4=20uk=5FUA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/uk_UA.lang | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 9891b1542..991f16dee 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -774,6 +774,7 @@ container.machineAmmoPress=Прес для боєприпасів container.machineArcWelder=Дуговий зварювальник container.machineArcFurnaceLarge=Дугова піч container.machineBoiler=Нагрівач нафти +container.machineChemicalFactory=Хімічна фабрика container.machineChemicalPlant=Хімічний завод container.machineCMB=CMB Steel Furnace container.machineCoal=Твердопаливний генератор @@ -5489,9 +5490,11 @@ tile.machine_boiler_off.name=Старий бойлер tile.machine_catalytic_cracker.name=Вежа каталітичного крекінгу tile.machine_catalytic_reformer.name=Каталітичний риформер tile.machine_centrifuge.name=Центрифуга -tile.machine_chemfac.name=Хімічна фабрика -tile.machine_chemical_plant.name=Хімічний завод 2: Electric Boogaloo -tile.machine_chemplant.name=Хімічний завод +tile.machine_chemfac.name=Хімічна фабрика (Застаріла) +tile.machine_chemical_factory.name=Хімічна фабрика +tile.machine_chemical_factory.desc=Четверний хімічний завод.$Рецепти обробляються вдвічі швидше,$але потребують вдвічі більше енергії.$Потрібно охолоджуватися водою,$виробляє пару низького тиску. +tile.machine_chemical_plant.name=Хімічний завод +tile.machine_chemplant.name=Хімічний завод (Застарілий) tile.machine_chungus.name=Парова турбіна "Левіафан" tile.machine_chungus.desc=Ефективність: 85%% tile.machine_coal_off.name=Combustion Generator @@ -6166,12 +6169,13 @@ upgrade.acid=Необхідна кислота %s upgrade.burn=Burn %smb/t for %sHE upgrade.consumption=Споживання %s upgrade.coolantConsumption=Витрата охолоджувальної рідини %s -upgrade.delay=Швидкість роботи %s +upgrade.delay=Час роботи %s upgrade.efficiency=Ефективність %s upgrade.fortune=Вдача %s upgrade.overheatChance=Ймовірність перегріву %s upgrade.productivity=Продуктивність %s upgrade.range=Радіус %s +upgrade.speed=Швидкість роботи %s upgrade.gui.title=§lДопустимі покращення:§r upgrade.gui.afterburner= * §dФорсаж§r: Складається до %s рівнів From 5a12d14948894b6eb4470ceb6743daf3788608aa Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Fri, 20 Jun 2025 12:47:17 +0300 Subject: [PATCH 192/491] fuck --- src/main/resources/assets/hbm/lang/uk_UA.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 991f16dee..998614bf9 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -5492,7 +5492,7 @@ tile.machine_catalytic_reformer.name=Каталітичний риформер tile.machine_centrifuge.name=Центрифуга tile.machine_chemfac.name=Хімічна фабрика (Застаріла) tile.machine_chemical_factory.name=Хімічна фабрика -tile.machine_chemical_factory.desc=Четверний хімічний завод.$Рецепти обробляються вдвічі швидше,$але потребують вдвічі більше енергії.$Потрібно охолоджуватися водою,$виробляє пару низького тиску. +tile.machine_chemical_factory.desc=Четверний хімічний завод.$Рецепти обробляються вдвічі швидше,$але потребують вдвічі більше енергії.$Потрібно охолодження водою,$виробляє пару низького тиску. tile.machine_chemical_plant.name=Хімічний завод tile.machine_chemplant.name=Хімічний завод (Застарілий) tile.machine_chungus.name=Парова турбіна "Левіафан" From c2354adbc34724920581013ad1440e98a5ba456e Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 20 Jun 2025 14:47:15 +0200 Subject: [PATCH 193/491] IFluidRegisterListener --- changelog | 3 + .../hbm/fluidmk2/IFluidRegisterListener.java | 9 + .../com/hbm/inventory/fluid/FluidType.java | 20 +- .../java/com/hbm/inventory/fluid/Fluids.java | 9 +- .../recipes/loader/SerializableRecipe.java | 6 +- .../com/hbm/items/tool/WeaponSpecial.java | 192 +++++++++--------- .../render/tileentity/RenderFluidTank.java | 2 +- .../java/com/hbm/util/CompatExternal.java | 11 + .../com/hbm/util/CompatFluidRegistry.java | 17 ++ .../com/hbm/util/CompatRecipeRegistry.java | 18 +- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../hbm/textures/items/gem_erisite_test.png | Bin 0 -> 501 bytes 12 files changed, 181 insertions(+), 108 deletions(-) create mode 100644 src/main/java/api/hbm/fluidmk2/IFluidRegisterListener.java create mode 100644 src/main/java/com/hbm/util/CompatFluidRegistry.java create mode 100644 src/main/resources/assets/hbm/textures/items/gem_erisite_test.png diff --git a/changelog b/changelog index b3a1b847f..fac243f1a 100644 --- a/changelog +++ b/changelog @@ -28,6 +28,9 @@ * New chemical plant now has sound * Old chemical plant and factory have been renamed and their recipes removed * The new recipe selector no longer changes recipe instantly on click, rather as soon as the selector GUI is closed. This should prevent issues when misclicking, which would destroy buffered fluids +* The memespoon is now safe(tm) + * Instead of using a bugged instakill implementation, a fall distance of >2 now deals 50 extra melee damage + * Instead of blowing up like a nuke with a fall distance of >20, it now explodes similarly to a non-HE artillery grenade. This deals 150 damage in an AoE, has armor piercing properties and is, like the original functionality, still lethal to the user ## Fixed * Chemical plant ports. For real this time. diff --git a/src/main/java/api/hbm/fluidmk2/IFluidRegisterListener.java b/src/main/java/api/hbm/fluidmk2/IFluidRegisterListener.java new file mode 100644 index 000000000..2fb0a4b66 --- /dev/null +++ b/src/main/java/api/hbm/fluidmk2/IFluidRegisterListener.java @@ -0,0 +1,9 @@ +package api.hbm.fluidmk2; + +public interface IFluidRegisterListener { + + /** + * Called when the fluid registry initializes all fluids. Use CompatFluidRegistry to create new instances of FluidType, which are automatically registered. + */ + public void onFluidsLoad(); +} diff --git a/src/main/java/com/hbm/inventory/fluid/FluidType.java b/src/main/java/com/hbm/inventory/fluid/FluidType.java index 93c9e565a..4cecc13a5 100644 --- a/src/main/java/com/hbm/inventory/fluid/FluidType.java +++ b/src/main/java/com/hbm/inventory/fluid/FluidType.java @@ -43,7 +43,7 @@ public class FluidType { public int flammability; public int reactivity; public EnumSymbol symbol; - public boolean customFluid = false; + public boolean renderWithTint = false; public static final int ROOM_TEMPERATURE = 20; @@ -81,7 +81,7 @@ public class FluidType { this.texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/fluids/" + texName + ".png"); this.guiTint = tint; this.localizedOverride = displayName; - this.customFluid = true; + this.renderWithTint = true; this.id = id; Fluids.register(this, id); @@ -95,6 +95,22 @@ public class FluidType { } } + /** For CompatFluidRegistry */ + public FluidType(String name, int id, int color, int p, int f, int r, EnumSymbol symbol, ResourceLocation texture) { + this.stringId = name; + this.color = color; + this.unlocalized = "hbmfluid." + name.toLowerCase(Locale.US); + this.poison = p; + this.flammability = f; + this.reactivity = r; + this.symbol = symbol; + this.texture = texture; + this.renderWithTint = true; + + this.id = id; + Fluids.register(this, id); + } + public FluidType setTemp(int temperature) { this.temperature = temperature; return this; diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 37c68f121..1a0b5dcd2 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -28,12 +28,15 @@ import com.hbm.inventory.fluid.trait.FT_Toxin.*; import com.hbm.render.util.EnumSymbol; import com.hbm.util.ArmorRegistry.HazardClass; +import api.hbm.fluidmk2.IFluidRegisterListener; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; public class Fluids { public static final Gson gson = new Gson(); + + public static List additionalListeners = new ArrayList(); public static FluidType NONE; public static FluidType AIR; @@ -197,8 +200,10 @@ public class Fluids { private static final HashMap idMapping = new HashMap(); private static final HashMap nameMapping = new HashMap(); + /** Inconsequential, only actually used when listing all fluids with niceOrder disabled */ protected static final List registerOrder = new ArrayList(); - protected static final List metaOrder = new ArrayList(); + /** What's used to list fluids with niceOrder enabled */ + public static final List metaOrder = new ArrayList(); public static final FT_Liquid LIQUID = new FT_Liquid(); public static final FT_Viscous VISCOUS = new FT_Viscous(); @@ -588,6 +593,8 @@ public class Fluids { // LEGACY ACID = PEROXIDE; + + for(IFluidRegisterListener listener : additionalListeners) listener.onFluidsLoad(); for(FluidType custom : customFluids) metaOrder.add(custom); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 46f9aa47c..a89e19b26 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -34,10 +34,10 @@ import net.minecraft.item.ItemStack; public abstract class SerializableRecipe { public static final Gson gson = new Gson(); - public static List recipeHandlers = new ArrayList<>(); - public static List additionalListeners = new ArrayList<>(); + public static List recipeHandlers = new ArrayList(); + public static List additionalListeners = new ArrayList(); - public static Map recipeSyncHandlers = new HashMap<>(); + public static Map recipeSyncHandlers = new HashMap(); public boolean modified = false; diff --git a/src/main/java/com/hbm/items/tool/WeaponSpecial.java b/src/main/java/com/hbm/items/tool/WeaponSpecial.java index 49041e842..faba31497 100644 --- a/src/main/java/com/hbm/items/tool/WeaponSpecial.java +++ b/src/main/java/com/hbm/items/tool/WeaponSpecial.java @@ -4,11 +4,13 @@ import java.util.List; import java.util.Random; import com.google.common.collect.Multimap; -import com.hbm.entity.effect.EntityNukeTorex; -import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.entity.projectile.EntityRubble; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; +import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; +import com.hbm.particle.helper.ExplosionCreator; import com.hbm.potion.HbmPotion; import com.hbm.util.ArmorUtil; @@ -23,21 +25,21 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.Vec3; import net.minecraft.world.World; public class WeaponSpecial extends ItemSword { - + Random rand = new Random(); public WeaponSpecial(ToolMaterial p_i45356_1_) { super(p_i45356_1_); } - - @Override - public EnumRarity getRarity(ItemStack p_77613_1_) - { + + @Override + public EnumRarity getRarity(ItemStack p_77613_1_) { if(this == ModItems.schrabidium_hammer) { return EnumRarity.rare; } @@ -47,26 +49,23 @@ public class WeaponSpecial extends ItemSword { if(this == ModItems.shimmer_sledge || this == ModItems.shimmer_axe) { return EnumRarity.epic; } - + return EnumRarity.common; - } - - @Override - public boolean hitEntity(ItemStack stack, EntityLivingBase entity, EntityLivingBase entityPlayer) - { - World world = entity.worldObj; + } + + @Override + public boolean hitEntity(ItemStack stack, EntityLivingBase entity, EntityLivingBase entityPlayer) { + World world = entity.worldObj; if(this == ModItems.schrabidium_hammer) { - if (!world.isRemote) - { - entity.setHealth(0.0F); - } - world.playSoundAtEntity(entity, "hbm:weapon.bonk", 3.0F, 1.0F); + if(!world.isRemote) { + entity.setHealth(0.0F); + } + world.playSoundAtEntity(entity, "hbm:weapon.bonk", 3.0F, 1.0F); } if(this == ModItems.bottle_opener) { - if (!world.isRemote) - { + if(!world.isRemote) { int i = rand.nextInt(7); if(i == 0) entity.addPotionEffect(new PotionEffect(Potion.blindness.id, 5 * 60 * 20, 0)); @@ -76,19 +75,18 @@ public class WeaponSpecial extends ItemSword { entity.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 5 * 60 * 20, 2)); if(i == 3) entity.addPotionEffect(new PotionEffect(Potion.confusion.id, 1 * 60 * 20, 0)); - } - world.playSoundAtEntity(entity, "random.anvil_land", 3.0F, 1.F); + } + world.playSoundAtEntity(entity, "random.anvil_land", 3.0F, 1.F); } - + if(this == ModItems.ullapool_caber) { - if (!world.isRemote) - { + if(!world.isRemote) { world.createExplosion(null, entity.posX, entity.posY, entity.posZ, 7.5F, true); - } - + } + stack.damageItem(505, entityPlayer); } - + if(this == ModItems.shimmer_sledge) { Vec3 vec = entityPlayer.getLookVec(); double dX = vec.xCoord * 5; @@ -98,37 +96,37 @@ public class WeaponSpecial extends ItemSword { entity.motionX += dX; entity.motionY += dY; entity.motionZ += dZ; - world.playSoundAtEntity(entity, "hbm:weapon.bang", 3.0F, 1.F); + world.playSoundAtEntity(entity, "hbm:weapon.bang", 3.0F, 1.F); } - + if(this == ModItems.shimmer_axe) { entity.setHealth(entity.getHealth() / 2); - - world.playSoundAtEntity(entity, "hbm:weapon.slice", 3.0F, 1.F); + + world.playSoundAtEntity(entity, "hbm:weapon.slice", 3.0F, 1.F); } - + if(this == ModItems.wood_gavel) { - world.playSoundAtEntity(entity, "hbm:weapon.whack", 3.0F, 1.F); + world.playSoundAtEntity(entity, "hbm:weapon.whack", 3.0F, 1.F); } - + if(this == ModItems.lead_gavel) { - world.playSoundAtEntity(entity, "hbm:weapon.whack", 3.0F, 1.F); - + world.playSoundAtEntity(entity, "hbm:weapon.whack", 3.0F, 1.F); + entity.addPotionEffect(new PotionEffect(HbmPotion.lead.id, 15 * 20, 4)); } - + if(this == ModItems.diamond_gavel) { - + float ded = entity.getMaxHealth() / 3; entity.setHealth(entity.getHealth() - ded); - - world.playSoundAtEntity(entity, "hbm:weapon.whack", 3.0F, 1.F); + + world.playSoundAtEntity(entity, "hbm:weapon.whack", 3.0F, 1.F); } - + if(this == ModItems.wrench) { Vec3 vec = entityPlayer.getLookVec(); - + double dX = vec.xCoord * 0.5; double dY = vec.yCoord * 0.5; double dZ = vec.zCoord * 0.5; @@ -136,47 +134,47 @@ public class WeaponSpecial extends ItemSword { entity.motionX += dX; entity.motionY += dY; entity.motionZ += dZ; - world.playSoundAtEntity(entity, "random.anvil_land", 3.0F, 0.75F); + world.playSoundAtEntity(entity, "random.anvil_land", 3.0F, 0.75F); } - - if(this == ModItems.memespoon) { + + if(this == ModItems.memespoon && !world.isRemote) { + + if(!(entityPlayer instanceof EntityPlayer)) + return false; if(entityPlayer.fallDistance >= 2) { world.playSoundAtEntity(entity, "hbm:weapon.bang", 3.0F, 0.75F); - entity.setHealth(0); + entity.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) entityPlayer), 50F); } - - if(!(entityPlayer instanceof EntityPlayer)) - return false; - - if(entityPlayer.fallDistance >= 20 && !((EntityPlayer)entityPlayer).capabilities.isCreativeMode) { - if(!world.isRemote) { - world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, 100, entity.posX, entity.posY, entity.posZ)); - EntityNukeTorex.statFacStandard(world, entity.posX, entity.posY, entity.posZ, 100); - } + + if(entityPlayer.fallDistance >= 20 && !((EntityPlayer) entityPlayer).capabilities.isCreativeMode) { + ExplosionVNT vnt = new ExplosionVNT(world, entity.posX, entity.posY + entity.height / 2D, entity.posZ, 15, entityPlayer); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, 150).setupPiercing(25, 0.5F)); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + ExplosionCreator.composeEffectSmall(world, entity.posX, entity.posY + entity.height / 2D, entity.posZ); + vnt.explode(); } } if(this == ModItems.stopsign || this == ModItems.sopsign) - world.playSoundAtEntity(entity, "hbm:weapon.stop", 1.0F, 1.0F); - + world.playSoundAtEntity(entity, "hbm:weapon.stop", 1.0F, 1.0F); + return false; - } - + } + @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int i, float f1, float f2, float f3) - { + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int i, float f1, float f2, float f3) { if(this == ModItems.shimmer_sledge) { if(world.getBlock(x, y, z) != Blocks.air && world.getBlock(x, y, z).getExplosionResistance(null) < 6000) { - + EntityRubble rubble = new EntityRubble(world); rubble.posX = x + 0.5F; rubble.posY = y; rubble.posZ = z + 0.5F; - + rubble.setMetaBasedOnBlock(world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); - + Vec3 vec = player.getLookVec(); double dX = vec.xCoord * 5; double dY = vec.yCoord * 5; @@ -185,22 +183,22 @@ public class WeaponSpecial extends ItemSword { rubble.motionX += dX; rubble.motionY += dY; rubble.motionZ += dZ; - world.playSoundAtEntity(rubble, "hbm:weapon.bang", 3.0F, 1.0F); - - if(!world.isRemote) { - - world.spawnEntityInWorld(rubble); + world.playSoundAtEntity(rubble, "hbm:weapon.bang", 3.0F, 1.0F); + + if(!world.isRemote) { + + world.spawnEntityInWorld(rubble); world.func_147480_a(x, y, z, false); - } + } } return true; } - + if(this == ModItems.shimmer_axe) { - world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:weapon.kapeng", 3.0F, 1.0F); + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:weapon.kapeng", 3.0F, 1.0F); - if(!world.isRemote) { + if(!world.isRemote) { if(world.getBlock(x, y, z) != Blocks.air && world.getBlock(x, y, z).getExplosionResistance(null) < 6000) { world.func_147480_a(x, y, z, false); } @@ -210,17 +208,16 @@ public class WeaponSpecial extends ItemSword { if(world.getBlock(x, y - 1, z) != Blocks.air && world.getBlock(x, y - 1, z).getExplosionResistance(null) < 6000) { world.func_147480_a(x, y - 1, z, false); } - } + } return true; } - + return false; - } - - @Override - public Multimap getItemAttributeModifiers() - { - Multimap multimap = super.getItemAttributeModifiers(); + } + + @Override + public Multimap getItemAttributeModifiers() { + Multimap multimap = super.getItemAttributeModifiers(); if(this == ModItems.schrabidium_hammer) { multimap.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", -0.5, 1)); } @@ -230,24 +227,23 @@ public class WeaponSpecial extends ItemSword { if(this == ModItems.wrench || this == ModItems.wrench_flipped) { multimap.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", -0.1, 1)); } - return multimap; - } - - @Override + return multimap; + } + + @Override public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean b) { - if(entity instanceof EntityPlayer) { - if(ArmorUtil.checkForFiend((EntityPlayer) entity)) { - ((EntityPlayer) entity).triggerAchievement(MainRegistry.achFiend); - } else if(ArmorUtil.checkForFiend2((EntityPlayer) entity)) { - ((EntityPlayer) entity).triggerAchievement(MainRegistry.achFiend2); - } - } - } - + if(entity instanceof EntityPlayer) { + if(ArmorUtil.checkForFiend((EntityPlayer) entity)) { + ((EntityPlayer) entity).triggerAchievement(MainRegistry.achFiend); + } else if(ArmorUtil.checkForFiend2((EntityPlayer) entity)) { + ((EntityPlayer) entity).triggerAchievement(MainRegistry.achFiend2); + } + } + } + @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { if(this == ModItems.schrabidium_hammer) { list.add("Even though it says \"+1000000000"); list.add("damage\", it's actually \"onehit anything\""); diff --git a/src/main/java/com/hbm/render/tileentity/RenderFluidTank.java b/src/main/java/com/hbm/render/tileentity/RenderFluidTank.java index acb9a0b0c..924bd7998 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderFluidTank.java +++ b/src/main/java/com/hbm/render/tileentity/RenderFluidTank.java @@ -83,7 +83,7 @@ public class RenderFluidTank extends TileEntitySpecialRenderer implements IItemR public String getTextureFromType(FluidType type) { - if(type.customFluid) { + if(type.renderWithTint) { int color = type.getTint(); double r = ((color & 0xff0000) >> 16) / 255D; double g = ((color & 0x00ff00) >> 8) / 255D; diff --git a/src/main/java/com/hbm/util/CompatExternal.java b/src/main/java/com/hbm/util/CompatExternal.java index 064e7f7eb..7157dcb1d 100644 --- a/src/main/java/com/hbm/util/CompatExternal.java +++ b/src/main/java/com/hbm/util/CompatExternal.java @@ -9,6 +9,7 @@ import java.util.function.Consumer; import api.hbm.energymk2.IEnergyHandlerMK2; import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluidmk2.IFluidRegisterListener; import api.hbm.fluidmk2.IFluidUserMK2; import api.hbm.recipe.IRecipeRegisterListener; @@ -16,6 +17,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.entity.missile.EntityMissileCustom; import com.hbm.explosion.ExplosionNukeSmall; import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.weapon.ItemCustomMissilePart.WarheadType; @@ -198,6 +200,15 @@ public class CompatExternal { public static void registerRecipeRegisterListener(IRecipeRegisterListener listener) { SerializableRecipe.additionalListeners.add(listener); } + + /** + * Registers an IFluidRegisterListener which is called every time the fluid list is loaded, either during startup or when the refresh command is used. + * Ensures that fluids are registered when they should, instead of being purged permanently when the system reloads. + * @param listener + */ + public static void registerFluidRegisterListener(IFluidRegisterListener listener) { + Fluids.additionalListeners.add(listener); + } public static void compatExamples() { // Makes all cows be targeted by turrets if player mode is active in addition to the existing rules. Applies to all entities that inherit EntityCow. diff --git a/src/main/java/com/hbm/util/CompatFluidRegistry.java b/src/main/java/com/hbm/util/CompatFluidRegistry.java new file mode 100644 index 000000000..c683734c9 --- /dev/null +++ b/src/main/java/com/hbm/util/CompatFluidRegistry.java @@ -0,0 +1,17 @@ +package com.hbm.util; + +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.render.util.EnumSymbol; + +import net.minecraft.util.ResourceLocation; + +public class CompatFluidRegistry { + + /** Registers a fluid with a custom ID. */ + public static FluidType registerFluid(String name, int id, int color, int p, int f, int r, EnumSymbol symbol, ResourceLocation texture) { + FluidType type = new FluidType(name, id, color, p, f, r, symbol, texture); + Fluids.metaOrder.add(type); + return type; + } +} diff --git a/src/main/java/com/hbm/util/CompatRecipeRegistry.java b/src/main/java/com/hbm/util/CompatRecipeRegistry.java index d6c89ad5d..9c66b9dbf 100644 --- a/src/main/java/com/hbm/util/CompatRecipeRegistry.java +++ b/src/main/java/com/hbm/util/CompatRecipeRegistry.java @@ -29,6 +29,8 @@ import com.hbm.inventory.recipes.anvil.AnvilRecipes; import com.hbm.inventory.recipes.anvil.AnvilRecipes.AnvilConstructionRecipe; import com.hbm.inventory.recipes.anvil.AnvilRecipes.AnvilOutput; import com.hbm.inventory.recipes.anvil.AnvilRecipes.OverlayType; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; import com.hbm.items.machine.ItemStamp.StampType; import com.hbm.util.Tuple.Pair; import com.hbm.util.Tuple.Triplet; @@ -70,8 +72,7 @@ public class CompatRecipeRegistry { SolderingRecipes.recipes.add(new SolderingRecipe(output, time, power, fluid, copyFirst(toppings, 3), copyFirst(pcb, 2), copyFirst(solder, 1))); } - /** Chemplant recipes need unique IDs, game will crash when an ID collision is detected! */ - public static void registerChemplant(int id, String name, int duration, AStack[] inputItems, FluidStack[] inputFluids, ItemStack[] outputItems, FluidStack[] outputFluids) { + @Deprecated public static void registerChemplant(int id, String name, int duration, AStack[] inputItems, FluidStack[] inputFluids, ItemStack[] outputItems, FluidStack[] outputFluids) { ChemRecipe recipe = new ChemRecipe(id, name, duration); if(inputItems != null) recipe.inputItems(copyFirst(inputItems, 4)); if(inputFluids != null) recipe.inputFluids(copyFirst(inputFluids, 2)); @@ -79,6 +80,18 @@ public class CompatRecipeRegistry { if(outputFluids != null) recipe.outputFluids(copyFirst(outputFluids, 2)); ChemplantRecipes.recipes.add(recipe); } + + /** Chemical plant recipe needs a unique name for the registry. Zero length arrays should stay null*/ + public static void registerChemicalPlant(String name, boolean named, ItemStack icon, int duration, long power, AStack[] inputItems, FluidStack[] inputFluids, IOutput[] outputItems, FluidStack[] outputFluids) { + GenericRecipe recipe = new GenericRecipe(name).setDuration(duration).setPower(power); + if(named) recipe.setNamed(); + if(icon != null) recipe.setIcon(icon); + if(inputItems != null && inputItems.length > 0) recipe.inputItems(inputItems); + if(inputFluids != null && inputFluids.length > 0) recipe.inputFluids(inputFluids); + if(outputItems != null && outputItems.length > 0) recipe.outputItems(outputItems); + if(outputFluids != null && outputFluids.length > 0) recipe.outputFluids(outputFluids); + ChemicalPlantRecipes.INSTANCE.register(recipe); + } /** Either solid or liquid output can be null */ public static void registerCombination(AStack input, ItemStack output, FluidStack fluid) { @@ -223,6 +236,7 @@ public class CompatRecipeRegistry { AmmoPressRecipes.recipes.add(new AmmoPressRecipe(output, input)); } + /** Assembler recipes are identified by the output as a ComparableStack, so no two recipes can share output. */ public static void registerAssembler(ItemStack output, AStack[] input, int time) { AssemblerRecipes.makeRecipe(new ComparableStack(output), copyFirst(input, 12), time); } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 6bb6b99ae..8e915f009 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5492,7 +5492,7 @@ tile.machine_catalytic_reformer.name=Catalytic Reformer tile.machine_centrifuge.name=Centrifuge tile.machine_chemfac.name=Chemical Factory (Legacy) tile.machine_chemical_factory.name=Chemical Factory -tile.machine_chemical_factory.desc=Quadruple chemical plant.$Recipes process twice as fast,$but needs twice as much power.$Needs to be cooled with water,$produces low-pressure steam. +tile.machine_chemical_factory.desc=Quadruple chemical plant.$Recipes process twice as fast,$but need twice as much power.$Needs to be cooled with water,$produces low-pressure steam. tile.machine_chemical_plant.name=Chemical Plant tile.machine_chemplant.name=Chemical Plant (Legacy) tile.machine_chungus.name=Leviathan Steam Turbine diff --git a/src/main/resources/assets/hbm/textures/items/gem_erisite_test.png b/src/main/resources/assets/hbm/textures/items/gem_erisite_test.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4a0983a00f702c6496228c312c08da6c208eab GIT binary patch literal 501 zcmV*9G{Z50%KRR5}Qb{G{1tr`IF`R8d{f% zC=Q{~KSKdBsToNplPs@)Cp8#l zt8B1QEpa6g<{%9Wy~0LS$KU0rq!-C9<~%JMXtsh;H0ZFre0cK}M2H1Lyn4Mx2$N2) zMfYJpr7uOYFLNzl*a@aj+>+sFoT}Bpm2K9ybOwX_QN1RG+GkY7;a)zs%MUHY^}aiz r(t(XdLoAw@;4^trc-+=V{{emjvRR`yRame-00000NkvXXu0mjfWE$qU literal 0 HcmV?d00001 From 3e3b651d1169c7f60430251a7a9565f7043d89c4 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 22 Jun 2025 16:11:06 +0200 Subject: [PATCH 194/491] i hereby name thee "sexy" --- README.md | 2 +- .../sedna/factory/GunFactoryClient.java | 2 +- .../weapon/sedna/factory/XFactory12ga.java | 3 +- .../java/com/hbm/main/ResourceManager.java | 3 +- .../item/weapon/sedna/ItemRenderSexy.java | 178 + src/main/java/com/hbm/util/BobMathUtil.java | 5 +- .../assets/hbm/models/weapons/sexy.obj | 4942 +++++++++++++++++ .../models/weapons/sexy_real_no_fake.png | Bin 0 -> 4284 bytes 8 files changed, 5128 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java create mode 100644 src/main/resources/assets/hbm/models/weapons/sexy.obj create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/sexy_real_no_fake.png diff --git a/README.md b/README.md index db2e42f5b..ba1478cf4 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ * NTM Reloaded: https://github.com/TheOriginalGolem/Hbm-s-Nuclear-Tech-GIT/releases * NTM Extended Edition (Alcater): https://github.com/Alcatergit/Hbm-s-Nuclear-Tech-GIT/releases -* NTM Community Edition (WarFactory): https://codeberg.org/MrNorwood/Hbm-s-Nuclear-Tech-CE +* NTM Community Edition (WarFactory): https://github.com/MisterNorwood/Hbm-s-Nuclear-Tech-CE For 1.18, try Martin's remake: https://codeberg.org/MartinTheDragon/Nuclear-Tech-Mod-Remake/releases diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 7a613fbb0..8e9d40aa5 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -76,7 +76,7 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_m2, new ItemRenderM2()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun, new ItemRenderShredder(ResourceManager.shredder_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun_shredder, new ItemRenderShredder(ResourceManager.shredder_orig_tex)); - MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun_sexy, new ItemRenderShredder(ResourceManager.sexy_tex)); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun_sexy, new ItemRenderSexy()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_quadro, new ItemRenderQuadro()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_minigun, new ItemRenderMinigun(ResourceManager.minigun_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_minigun_lacunae, new ItemRenderMinigun(ResourceManager.minigun_lacunae_tex)); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index a13ade26a..378ffcad8 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -373,10 +373,11 @@ public class XFactory12ga { .setupStandardConfiguration() .anim(LAMBDA_SHREDDER_ANIMS).orchestra(Orchestras.ORCHESTRA_SHREDDER) ).setUnlocalizedName("gun_autoshotgun_shredder"); + ModItems.gun_autoshotgun_sexy = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() .dura(5_000).draw(10).inspect(33).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) - .dmg(64F).delay(1).auto(true).dryfireAfterAuto(true).reload(44).jam(19).sound("hbm:weapon.fire.shotgunAuto", 1.0F, 1.0F) + .dmg(64F).delay(4).auto(true).dryfireAfterAuto(true).reload(44).jam(19).sound("hbm:weapon.fire.shotgunAuto", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 100).addConfigs(g12_equestrian_bj, g12_bp, g12_bp_magnum, g12_bp_slug, g12, g12_slug, g12_flechette, g12_magnum, g12_explosive, g12_phosphorus)) .offset(0.75, -0.125, -0.25) .setupStandardFire().recoil(LAMBDA_RECOIL_SEXY)) diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 8cad667ec..889727560 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -884,6 +884,7 @@ public class ResourceManager { public static final IModelCustom amat = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/amat.obj")).asVBO(); public static final IModelCustom m2 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/m2_browning.obj")).asVBO(); public static final IModelCustom shredder = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/shredder.obj")).asVBO(); + public static final IModelCustom sexy = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/sexy.obj")).asVBO(); public static final IModelCustom quadro = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/quadro.obj")).asVBO(); public static final IModelCustom mike_hawk = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/mike_hawk.obj")).asVBO(); public static final IModelCustom minigun = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/minigun.obj")).asVBO(); @@ -1007,7 +1008,7 @@ public class ResourceManager { public static final ResourceLocation amat_penance_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/amat_penance.png"); public static final ResourceLocation shredder_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder.png"); public static final ResourceLocation shredder_orig_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder_orig.png"); - public static final ResourceLocation sexy_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sexy.png"); + public static final ResourceLocation sexy_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sexy_real_no_fake.png"); public static final ResourceLocation quadro_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/quadro.png"); public static final ResourceLocation quadro_rocket_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/quadro_rocket.png"); public static final ResourceLocation minigun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/minigun.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java new file mode 100644 index 000000000..797910362 --- /dev/null +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java @@ -0,0 +1,178 @@ +package com.hbm.render.item.weapon.sedna; + +import org.lwjgl.opengl.GL11; + +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.main.ResourceManager; +import com.hbm.render.anim.HbmAnimations; +import com.hbm.util.BobMathUtil; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; + +public class ItemRenderSexy extends ItemRenderWeaponBase { + + @Override + protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.25F; } + + @Override + public float getViewFOV(ItemStack stack, float fov) { + float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; + return fov * (1 - aimingProgress * 0.66F); + } + + @Override + public void setupFirstPerson(ItemStack stack) { + GL11.glTranslated(0, 0, 0.875); + + float offset = 0.8F; + + /*standardAimingTransform(stack, + -1.25F * offset, -0.75F * offset, 3.25F * offset, + 0, -5.25 / 8D, 1);*/ + + standardAimingTransform(stack, + -1F * offset, -0.75F * offset, 3F * offset, + -0.5F, -0.5F, 2F); + } + + @Override + public void renderFirstPerson(ItemStack stack) { + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.sexy_tex); + double scale = 0.375D; + GL11.glScaled(scale, scale, scale); + + double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); + double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); + + GL11.glTranslated(0, -1, -8); + GL11.glRotated(equip[0], 1, 0, 0); + GL11.glTranslated(0, 1, 8); + + GL11.glTranslated(0, 0, recoil[2]); + + GL11.glShadeModel(GL11.GL_SMOOTH); + + ResourceManager.sexy.renderPart("Gun"); + + GL11.glPushMatrix(); + //GL11.glTranslated(0, 0, -1); + ResourceManager.sexy.renderPart("Barrel"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, 0.375); + //GL11.glScaled(1, 1, 0.75); + GL11.glTranslated(0, 0, -0.375); + ResourceManager.sexy.renderPart("RecoilSpring"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.4375, -2.875); + //GL11.glRotated(60, 1, 0, 0); + GL11.glTranslated(0, -0.4375, 2.875); + ResourceManager.sexy.renderPart("Hood"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.46875, -6.875); + //GL11.glRotated(60, 1, 0, 0); + GL11.glTranslated(0, -0.46875, 6.875); + ResourceManager.sexy.renderPart("Lever"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, -6.75); + //GL11.glScaled(1, 1, 0.75); + GL11.glTranslated(0, 0, 6.75); + ResourceManager.sexy.renderPart("LockSpring"); + GL11.glPopMatrix(); + + ResourceManager.sexy.renderPart("Magazine"); + + /*renderShell(0, -0.375, 90, false); + renderShell(0.3125, -0.0625, 30, false); + renderShell(0.75, -0.125, -30, false); + renderShell(1.0625, -0.4375, -60, false); + renderShell(1.0625, -0.875, -90, false); + renderShell(1.0625, -1.3125, -90, false);*/ + + double p = 0.0625D; + + renderShell(p * 0, p * -6, 90, true); + renderShell(p * 5, p * 1, 30, true); + renderShell(p * 12, p * -1, -30, true); + renderShell(p * 17, p * -6, -60, true); + renderShell(p * 17, p * -13, -90, true); + renderShell(p * 17, p * -20, -90, true); + + GL11.glShadeModel(GL11.GL_FLAT); + } + + @Override + public void setupThirdPerson(ItemStack stack) { + super.setupThirdPerson(stack); + double scale = 1.25D; + GL11.glScaled(scale, scale, scale); + GL11.glTranslated(0, 0, 4); + + } + + @Override + public void setupInv(ItemStack stack) { + super.setupInv(stack); + double scale = 1.375D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glTranslated(0, 0.5, 0.25); + } + + @Override + public void setupModTable(ItemStack stack) { + double scale = -9.5D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(90, 0, 1, 0); + GL11.glTranslated(0, 0, 0); + } + + @Override + public void renderOther(ItemStack stack, ItemRenderType type) { + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.sexy_tex); + ResourceManager.sexy.renderPart("Gun"); + ResourceManager.sexy.renderPart("Barrel"); + ResourceManager.sexy.renderPart("RecoilSpring"); + ResourceManager.sexy.renderPart("Hood"); + ResourceManager.sexy.renderPart("Lever"); + ResourceManager.sexy.renderPart("LockSpring"); + ResourceManager.sexy.renderPart("Magazine"); + + double p = 0.0625D; + renderShell(p * 0, p * -6, 90, true); + renderShell(p * 5, p * 1, 30, true); + renderShell(p * 12, p * -1, -30, true); + renderShell(p * 17, p * -6, -60, true); + renderShell(p * 17, p * -13, -90, true); + renderShell(p * 17, p * -20, -90, true); + + GL11.glShadeModel(GL11.GL_FLAT); + } + + public static void renderShell(double x0, double x1, double y0, double y1, double rot0, double rot1, boolean shell, double interp) { + renderShell(BobMathUtil.interp(x0, x1, interp), BobMathUtil.interp(y0, y1, interp), BobMathUtil.interp(rot0, rot1, interp), shell); + } + + public static void renderShell(double x, double y, double rot, boolean shell) { + GL11.glPushMatrix(); + GL11.glTranslated(x, 0.375 + y, 0); + GL11.glRotated(rot, 0, 0, 1); + GL11.glTranslated(0, -0.375, 0); + ResourceManager.sexy.renderPart("Belt"); + if(shell) ResourceManager.sexy.renderPart("Shell"); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/util/BobMathUtil.java b/src/main/java/com/hbm/util/BobMathUtil.java index bcffce9f1..0c46100be 100644 --- a/src/main/java/com/hbm/util/BobMathUtil.java +++ b/src/main/java/com/hbm/util/BobMathUtil.java @@ -76,9 +76,8 @@ public class BobMathUtil { ); } - public static double interp(double x, double y, float interp) { - return x + (y - x) * interp; - } + public static double interp(double x, double y, float interp) { return x + (y - x) * interp; } + public static double interp(double x, double y, double interp) { return x + (y - x) * interp; } public static double getAngleFrom2DVecs(double x1, double z1, double x2, double z2) { diff --git a/src/main/resources/assets/hbm/models/weapons/sexy.obj b/src/main/resources/assets/hbm/models/weapons/sexy.obj new file mode 100644 index 000000000..114be9b3d --- /dev/null +++ b/src/main/resources/assets/hbm/models/weapons/sexy.obj @@ -0,0 +1,4942 @@ +# Blender v2.79 (sub 0) OBJ File: 'sexy.blend' +# www.blender.org +o Barrel +v 0.000000 0.312500 8.000000 +v -0.156250 0.270633 8.000000 +v -0.270633 0.156250 8.000000 +v -0.312500 0.000000 8.000000 +v -0.270633 -0.156250 8.000000 +v -0.156250 -0.270633 8.000000 +v 0.000000 -0.312500 8.000000 +v 0.156250 -0.270633 8.000000 +v 0.270633 -0.156250 8.000000 +v 0.312500 0.000000 8.000000 +v 0.270633 0.156250 8.000000 +v 0.156250 0.270633 8.000000 +v 0.000000 0.312500 -1.000000 +v -0.156250 0.270633 -1.000000 +v -0.270633 0.156250 -1.000000 +v -0.312500 0.000000 -1.000000 +v -0.270633 -0.156250 -1.000000 +v -0.156250 -0.270633 -1.000000 +v 0.000000 -0.312500 -1.000000 +v 0.156250 -0.270633 -1.000000 +v 0.270633 -0.156250 -1.000000 +v 0.312500 0.000000 -1.000000 +v 0.270633 0.156250 -1.000000 +v 0.156250 0.270633 -1.000000 +v -0.433013 0.250000 2.187500 +v -0.250000 0.433012 2.187500 +v 0.000000 0.500000 2.187500 +v 0.250000 0.433012 1.812500 +v 0.433013 0.250000 1.812500 +v 0.500000 0.000000 1.812500 +v -0.500000 0.000000 1.812500 +v -0.433013 0.250000 1.812500 +v -0.250000 0.433012 1.812500 +v 0.000000 0.500000 1.812500 +v -0.500000 0.000000 2.187500 +v 0.500000 0.000000 2.187500 +v 0.433013 0.250000 2.187500 +v 0.250000 0.433012 2.187500 +v -0.500000 -0.312500 1.812500 +v 0.500000 -0.312500 1.812500 +v -0.500000 -0.312500 2.187500 +v -0.433013 -0.562500 2.187500 +v -0.250000 -0.745513 2.187500 +v 0.000000 -0.812500 2.187500 +v 0.250000 -0.745513 2.187500 +v 0.433012 -0.562500 2.187500 +v 0.500000 -0.312500 2.187500 +v -0.500000 -0.312500 2.000000 +v 0.500000 -0.312500 2.000000 +v 0.000000 -0.812500 2.000000 +v 0.250000 -0.745513 2.000000 +v -0.433013 -0.562500 2.000000 +v 0.433012 -0.562500 2.000000 +v -0.250000 -0.745513 2.000000 +v -0.500000 -1.125000 1.812500 +v -0.433013 -1.375000 1.812500 +v -0.250000 -1.558013 1.812500 +v 0.000000 -1.625000 1.812500 +v 0.250000 -1.558013 1.812500 +v 0.433012 -1.375000 1.812500 +v 0.500000 -1.125000 1.812500 +v -0.500000 -1.125000 2.000000 +v 0.500000 -1.125000 2.000000 +v 0.000000 -1.625000 2.000000 +v 0.250000 -1.558013 2.000000 +v -0.433013 -1.375000 2.000000 +v 0.433012 -1.375000 2.000000 +v -0.250000 -1.558013 2.000000 +v 0.000000 0.218750 8.000000 +v -0.109375 0.189443 8.000000 +v -0.189443 0.109375 8.000000 +v -0.218750 -0.000000 8.000000 +v -0.189443 -0.109375 8.000000 +v -0.109375 -0.189443 8.000000 +v 0.000000 -0.218750 8.000000 +v 0.109375 -0.189443 8.000000 +v 0.189443 -0.109375 8.000000 +v 0.218750 -0.000000 8.000000 +v 0.189443 0.109375 8.000000 +v 0.109375 0.189443 8.000000 +v -0.109375 0.189443 7.000000 +v 0.189443 -0.203125 7.375000 +v -0.189443 -0.390625 7.875000 +v -0.218750 -0.500000 7.875000 +v -0.189443 -0.609375 7.875000 +v -0.109375 -0.689443 7.875000 +v 0.000000 -0.718750 7.875000 +v 0.109375 -0.689443 7.875000 +v 0.189443 -0.609375 7.875000 +v 0.218750 -0.500000 7.875000 +v 0.189443 -0.390625 7.875000 +v -0.189443 -0.203125 7.375000 +v 0.000000 0.218750 7.000000 +v 0.189443 -0.203125 7.875000 +v -0.189443 -0.390625 7.375000 +v -0.218750 -0.500000 7.375000 +v -0.189443 -0.609375 7.375000 +v -0.109375 -0.689443 7.375000 +v 0.000000 -0.718750 7.375000 +v 0.109375 -0.689443 7.375000 +v 0.189443 -0.609375 7.375000 +v 0.218750 -0.500000 7.375000 +v 0.189443 -0.390625 7.375000 +v -0.189443 -0.203125 7.875000 +v -0.189443 0.109375 7.000000 +v -0.218750 -0.000000 7.000000 +v -0.189443 -0.109375 7.000000 +v -0.109375 -0.189443 7.000000 +v 0.000000 -0.218750 7.000000 +v 0.109375 -0.189443 7.000000 +v 0.189443 -0.109375 7.000000 +v 0.218750 -0.000000 7.000000 +v 0.189443 0.109375 7.000000 +v 0.109375 0.189443 7.000000 +v 0.000000 -0.265625 7.875000 +v 0.000000 -0.265625 7.375000 +v -0.312500 0.625000 1.750000 +v -0.400888 0.588388 1.750000 +v -0.437500 0.500000 1.750000 +v -0.400888 0.411612 1.750000 +v -0.312500 0.375000 1.750000 +v -0.224112 0.411612 1.750000 +v -0.187500 0.500000 1.750000 +v -0.224112 0.588388 1.750000 +v -0.400888 0.588388 2.625000 +v -0.312500 0.625000 2.625000 +v -0.437500 0.500000 2.625000 +v -0.400888 0.411612 2.625000 +v -0.312500 0.375000 2.625000 +v -0.224112 0.411612 2.625000 +v -0.187500 0.500000 2.625000 +v -0.224112 0.588388 2.625000 +vt 0.983321 0.177141 +vt 0.999976 0.212107 +vt 0.933357 0.212107 +vt 0.966667 0.000061 +vt 0.995513 0.020249 +vt 0.937820 0.020249 +vt 0.999976 0.040436 +vt 0.983321 0.071080 +vt 0.966667 0.065671 +vt 0.075000 0.136364 +vt 0.066667 0.121212 +vt 0.075000 0.121212 +vt 0.075000 0.106061 +vt 0.066667 0.106061 +vt 0.066667 0.090909 +vt 0.075000 0.090909 +vt 0.066667 0.075758 +vt 0.075000 0.075758 +vt 0.075000 0.060606 +vt 0.066667 0.060606 +vt 0.075000 0.045455 +vt 0.066667 0.045455 +vt 0.075000 0.030303 +vt 0.066667 0.030303 +vt 0.075000 0.015152 +vt 0.066667 0.015152 +vt 0.075000 0.000000 +vt 0.066667 -0.000000 +vt 0.075000 0.181818 +vt 0.066667 0.166667 +vt 0.075000 0.166667 +vt 0.066667 0.151515 +vt 0.075000 0.151515 +vt 0.066667 0.136364 +vt 0.052083 0.121212 +vt 0.064713 0.130050 +vt 0.052083 0.156566 +vt 0.880856 0.717643 +vt 0.868745 0.727322 +vt 0.856639 0.717632 +vt 0.880858 0.758044 +vt 0.856642 0.758044 +vt 0.868750 0.732623 +vt 0.850000 0.671569 +vt 0.841789 0.661616 +vt 0.850000 0.651664 +vt 0.850000 0.671866 +vt 0.858211 0.681818 +vt 0.850000 0.691771 +vt 0.966667 0.277717 +vt 0.950012 0.272307 +vt 0.937820 0.257529 +vt 0.933357 0.237341 +vt 0.999976 0.237341 +vt 0.995514 0.257529 +vt 0.937820 0.191919 +vt 0.950012 0.177141 +vt 0.966667 0.171732 +vt 0.995513 0.191919 +vt 0.983321 0.272307 +vt 0.983321 0.166247 +vt 0.966667 0.171656 +vt 0.950012 0.166247 +vt 0.937820 0.151468 +vt 0.933357 0.131281 +vt 0.933357 0.106046 +vt 0.933357 0.040436 +vt 0.999976 0.106046 +vt 0.999976 0.040436 +vt 0.999976 0.131281 +vt 0.995513 0.151468 +vt 0.983321 0.005470 +vt 0.950012 0.005470 +vt 0.937820 0.085859 +vt 0.933357 0.106046 +vt 0.933357 0.040436 +vt 0.937820 0.020249 +vt 0.950012 0.005470 +vt 0.966667 0.000061 +vt 0.983321 0.005470 +vt 0.995513 0.020249 +vt 0.999976 0.106046 +vt 0.995513 0.085859 +vt 0.950012 0.071080 +vt 0.066667 0.181818 +vt 0.039454 0.130050 +vt 0.044792 0.123580 +vt 0.059375 0.123580 +vt 0.066667 0.138889 +vt 0.064713 0.147727 +vt 0.059375 0.154197 +vt 0.044792 0.154197 +vt 0.039454 0.147727 +vt 0.037500 0.138889 +vt 0.854769 0.709158 +vt 0.856644 0.700685 +vt 0.861763 0.694484 +vt 0.868755 0.692217 +vt 0.875745 0.694490 +vt 0.880861 0.700696 +vt 0.882731 0.709170 +vt 0.880852 0.732169 +vt 0.856635 0.732159 +vt 0.880858 0.772570 +vt 0.868750 0.767728 +vt 0.856642 0.772570 +vt 0.854769 0.749571 +vt 0.856642 0.741097 +vt 0.861759 0.734894 +vt 0.875741 0.734894 +vt 0.880858 0.741097 +vt 0.882731 0.749570 +vt 0.858211 0.661616 +vt 0.855806 0.668654 +vt 0.844194 0.668654 +vt 0.844194 0.654579 +vt 0.855806 0.654579 +vt 0.844194 0.688856 +vt 0.841789 0.681818 +vt 0.844194 0.674781 +vt 0.855806 0.674781 +vt 0.855806 0.688856 +vt 0.675000 0.151515 +vt 0.675000 0.075758 +vt 0.675000 0.106061 +vt 0.675000 0.030303 +vt 0.675000 0.166667 +vt 0.675000 0.121212 +vt 0.675000 0.045455 +vt 0.675000 -0.000000 +vt 0.675000 0.136364 +vt 0.675000 0.060606 +vt 0.675000 0.090909 +vt 0.675000 0.015152 +vt 0.933333 0.171717 +vt 0.908333 0.151515 +vt 0.933333 0.151515 +vt 0.933333 0.272727 +vt 0.908333 0.252525 +vt 0.933333 0.252525 +vt 0.933333 0.191919 +vt 0.908333 0.171717 +vt 0.933333 0.232323 +vt 0.908333 0.212121 +vt 0.933333 0.212121 +vt 0.908333 0.191919 +vt 0.908333 0.232323 +vt 0.908333 0.126263 +vt 0.920833 0.126263 +vt 0.920833 0.085859 +vt 0.908333 0.065657 +vt 0.920833 0.065657 +vt 0.920833 0.318182 +vt 0.908333 0.297980 +vt 0.920833 0.297980 +vt 0.920833 0.106061 +vt 0.908333 0.085859 +vt 0.920833 0.338384 +vt 0.908333 0.318182 +vt 0.908333 0.106061 +vt 0.920833 0.358586 +vt 0.908333 0.338384 +vt 0.933333 0.060606 +vt 0.933333 0.126263 +vt 0.933333 0.297980 +vt 0.920833 0.363636 +vt 0.933333 0.424242 +vt 0.920833 0.404040 +vt 0.933333 0.404040 +vt 0.920833 0.040404 +vt 0.933333 0.040404 +vt 0.920833 0.383838 +vt 0.933333 0.383838 +vt 0.920833 0.020202 +vt 0.933333 0.020202 +vt 0.933333 0.363636 +vt 0.920833 0.000000 +vt 0.933333 0.000000 +vt 0.854167 0.808081 +vt 0.820833 0.818182 +vt 0.820833 0.808081 +vt 0.854167 0.777778 +vt 0.820833 0.787879 +vt 0.820833 0.777778 +vt 0.854167 0.747475 +vt 0.820833 0.757576 +vt 0.820833 0.747475 +vt 0.854167 0.818182 +vt 0.820833 0.828283 +vt 0.854167 0.787879 +vt 0.820833 0.797980 +vt 0.854167 0.757576 +vt 0.820833 0.767677 +vt 0.854167 0.732323 +vt -0.000000 0.030303 +vt 0.066667 0.040404 +vt -0.000000 0.040404 +vt 0.854167 0.797980 +vt 0.854167 0.767677 +vt -0.000000 0.000000 +vt 0.066667 0.010101 +vt -0.000000 0.010101 +vt 0.854167 0.828283 +vt 0.820833 0.843434 +vt -0.000000 0.080808 +vt 0.066667 0.090909 +vt -0.000000 0.090909 +vt -0.000000 0.111111 +vt 0.066667 0.121212 +vt -0.000000 0.121212 +vt -0.000000 0.020202 +vt 0.066667 0.030303 +vt -0.000000 0.070707 +vt 0.066667 0.080808 +vt -0.000000 0.050505 +vt 0.066667 0.060606 +vt -0.000000 0.060606 +vt -0.000000 0.101010 +vt 0.066667 0.111111 +vt 0.066667 0.020202 +vt 0.066667 0.070707 +vt 0.066667 0.050505 +vt 0.066667 0.101010 +vt 0.841667 0.691919 +vt 0.783333 0.681818 +vt 0.841667 0.681818 +vt 0.841667 0.671717 +vt 0.783333 0.661616 +vt 0.841667 0.661616 +vt 0.841667 0.732323 +vt 0.783333 0.722222 +vt 0.841667 0.722222 +vt 0.841667 0.712121 +vt 0.783333 0.702020 +vt 0.841667 0.702020 +vt 0.783333 0.671717 +vt 0.783333 0.651515 +vt 0.841667 0.651515 +vt 0.783333 0.712121 +vt 0.783333 0.691919 +vt 0.675000 0.181818 +vt 0.908333 0.272727 +vt 0.908333 0.358586 +vt 0.920833 0.060606 +vt 0.920833 0.424242 +vt 0.820833 0.732323 +vt 0.066667 0.000000 +vt 0.854167 0.843434 +vt 0.783333 0.732323 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.5000 -0.8660 0.0000 +vn 0.5000 0.8660 0.0000 +vn -0.0000 1.0000 0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.8660 0.5000 0.0000 +vn 0.8660 -0.5000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.5000 -0.8660 0.0000 +vn 0.9914 0.1305 0.0000 +vn -0.9914 0.1305 0.0000 +vn 0.9914 -0.1305 0.0000 +vn 0.9979 -0.0651 0.0000 +vn -0.9914 -0.1305 0.0000 +vn -0.9979 -0.0651 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +s off +f 45/1/1 47/2/1 41/3/1 +f 58/4/2 56/5/2 60/6/2 +f 63/7/1 51/8/1 50/9/1 +f 4/10/1 71/11/1 3/12/1 +f 2/13/1 71/11/1 70/14/1 +f 2/13/1 69/15/1 1/16/1 +f 1/16/1 80/17/1 12/18/1 +f 11/19/1 80/17/1 79/20/1 +f 10/21/1 79/20/1 78/22/1 +f 9/23/1 78/22/1 77/24/1 +f 8/25/1 77/24/1 76/26/1 +f 7/27/1 76/26/1 75/28/1 +f 7/29/1 74/30/1 6/31/1 +f 6/31/1 73/32/1 5/33/1 +f 5/33/1 72/34/1 4/10/1 +f 109/35/1 111/36/1 93/37/1 +f 91/38/1 115/39/1 83/40/1 +f 95/41/2 103/42/2 99/43/2 +f 117/44/2 123/45/2 121/46/2 +f 129/47/1 131/48/1 126/49/1 +f 27/50/1 26/51/1 25/52/1 +f 25/52/1 35/53/1 27/50/1 +f 35/53/1 41/3/1 36/54/1 +f 27/50/1 35/53/1 37/55/1 +f 41/3/1 42/56/1 43/57/1 +f 43/57/1 44/58/1 41/3/1 +f 44/58/1 45/1/1 41/3/1 +f 45/1/1 46/59/1 47/2/1 +f 47/2/1 36/54/1 41/3/1 +f 36/54/1 37/55/1 35/53/1 +f 37/55/1 38/60/1 27/50/1 +f 33/61/2 34/62/2 28/63/2 +f 28/63/2 29/64/2 30/65/2 +f 40/66/2 61/67/2 39/68/2 +f 61/67/2 60/6/2 55/69/2 +f 39/68/2 61/67/2 55/69/2 +f 28/63/2 30/65/2 31/70/2 +f 30/65/2 40/66/2 39/68/2 +f 32/71/2 33/61/2 28/63/2 +f 39/68/2 31/70/2 30/65/2 +f 31/70/2 32/71/2 28/63/2 +f 56/5/2 55/69/2 60/6/2 +f 58/4/2 57/72/2 56/5/2 +f 60/6/2 59/73/2 58/4/2 +f 52/74/1 48/75/1 62/76/1 +f 62/76/1 66/77/1 50/9/1 +f 66/77/1 68/78/1 50/9/1 +f 68/78/1 64/79/1 50/9/1 +f 64/79/1 65/80/1 50/9/1 +f 65/80/1 67/81/1 50/9/1 +f 67/81/1 63/7/1 50/9/1 +f 63/7/1 49/82/1 53/83/1 +f 63/7/1 53/83/1 51/8/1 +f 52/74/1 62/76/1 54/84/1 +f 54/84/1 62/76/1 50/9/1 +f 4/10/1 72/34/1 71/11/1 +f 2/13/1 3/12/1 71/11/1 +f 2/13/1 70/14/1 69/15/1 +f 1/16/1 69/15/1 80/17/1 +f 11/19/1 12/18/1 80/17/1 +f 10/21/1 11/19/1 79/20/1 +f 9/23/1 10/21/1 78/22/1 +f 8/25/1 9/23/1 77/24/1 +f 7/27/1 8/25/1 76/26/1 +f 7/29/1 75/85/1 74/30/1 +f 6/31/1 74/30/1 73/32/1 +f 5/33/1 73/32/1 72/34/1 +f 107/86/1 108/87/1 109/35/1 +f 109/35/1 110/88/1 111/36/1 +f 111/36/1 112/89/1 113/90/1 +f 113/90/1 114/91/1 111/36/1 +f 114/91/1 93/37/1 111/36/1 +f 93/37/1 81/92/1 107/86/1 +f 81/92/1 105/93/1 107/86/1 +f 105/93/1 106/94/1 107/86/1 +f 107/86/1 109/35/1 93/37/1 +f 83/40/1 84/95/1 85/96/1 +f 85/96/1 86/97/1 87/98/1 +f 87/98/1 88/99/1 89/100/1 +f 89/100/1 90/101/1 87/98/1 +f 90/101/1 91/38/1 87/98/1 +f 91/38/1 94/102/1 115/39/1 +f 115/39/1 104/103/1 83/40/1 +f 83/40/1 85/96/1 91/38/1 +f 85/96/1 87/98/1 91/38/1 +f 95/41/2 92/104/2 116/105/2 +f 116/105/2 82/106/2 103/42/2 +f 103/42/2 102/107/2 99/43/2 +f 102/107/2 101/108/2 99/43/2 +f 101/108/2 100/109/2 99/43/2 +f 99/43/2 98/110/2 97/111/2 +f 97/111/2 96/112/2 99/43/2 +f 96/112/2 95/41/2 99/43/2 +f 95/41/2 116/105/2 103/42/2 +f 119/113/2 118/114/2 117/44/2 +f 117/44/2 124/115/2 123/45/2 +f 123/45/2 122/116/2 121/46/2 +f 121/46/2 120/117/2 119/113/2 +f 119/113/2 117/44/2 121/46/2 +f 126/49/1 125/118/1 127/119/1 +f 127/119/1 128/120/1 129/47/1 +f 129/47/1 130/121/1 131/48/1 +f 131/48/1 132/122/1 126/49/1 +f 126/49/1 127/119/1 129/47/1 +s 1 +f 17/123/3 6/31/4 5/33/3 +f 24/124/5 1/16/6 12/18/5 +f 14/125/7 3/12/8 2/13/7 +f 21/126/9 10/21/10 9/23/9 +f 18/127/4 7/29/11 6/31/4 +f 15/128/8 4/10/12 3/12/8 +f 22/129/10 11/19/13 10/21/10 +f 19/130/11 8/25/14 7/27/11 +f 16/131/12 5/33/3 4/10/12 +f 23/132/13 12/18/5 11/19/13 +f 13/133/6 2/13/7 1/16/6 +f 20/134/14 9/23/9 8/25/14 +f 29/135/13 36/136/15 30/137/15 +f 31/138/16 25/139/8 32/140/8 +f 28/141/5 37/142/13 29/135/13 +f 33/143/7 27/144/6 34/145/6 +f 34/145/6 38/146/5 28/141/5 +f 32/140/8 26/147/7 33/143/7 +f 36/136/15 47/148/17 49/149/18 +f 51/150/14 44/151/11 50/152/11 +f 52/153/3 41/154/19 48/155/20 +f 53/156/9 45/157/14 51/150/14 +f 54/158/4 42/159/3 52/153/3 +f 49/149/18 46/160/9 53/156/9 +f 50/161/11 43/162/4 54/158/4 +f 49/149/18 61/163/17 40/164/10 +f 39/165/12 62/166/19 48/155/20 +f 58/167/11 68/168/4 57/169/4 +f 61/163/17 67/170/9 60/171/9 +f 57/169/4 66/172/3 56/173/3 +f 60/171/9 65/174/14 59/175/14 +f 56/173/3 62/166/19 55/176/19 +f 59/175/14 64/177/11 58/178/11 +f 31/138/16 39/165/12 48/155/20 +f 101/179/9 90/180/10 89/181/9 +f 98/182/4 87/183/11 86/184/4 +f 95/185/16 84/186/12 83/187/16 +f 102/188/10 91/189/15 90/180/10 +f 99/190/11 88/191/14 87/183/11 +f 96/192/12 85/193/3 84/186/12 +f 83/187/16 92/194/12 95/185/16 +f 72/195/10 105/196/9 71/197/9 +f 100/198/14 89/181/9 88/191/14 +f 97/199/3 86/184/4 85/193/3 +f 75/200/6 108/201/5 74/202/5 +f 103/203/15 94/204/10 91/189/15 +f 79/205/3 112/206/12 78/207/12 +f 76/208/7 109/209/6 75/210/6 +f 73/211/13 106/212/10 72/195/10 +f 80/213/4 113/214/3 79/205/3 +f 70/215/14 93/216/11 69/217/11 +f 77/218/8 110/219/7 76/208/7 +f 74/202/5 107/220/13 73/211/13 +f 69/217/11 114/221/4 80/213/4 +f 71/197/9 81/222/14 70/215/14 +f 78/207/12 111/223/8 77/218/8 +f 117/224/6 132/225/21 124/226/21 +f 123/227/10 130/228/22 122/229/22 +f 121/230/11 128/231/23 120/232/23 +f 119/233/12 125/234/24 118/235/24 +f 124/226/21 131/236/10 123/227/10 +f 122/229/22 129/237/11 121/238/11 +f 120/232/23 127/239/12 119/233/12 +f 118/235/24 126/240/6 117/224/6 +f 17/123/3 18/127/4 6/31/4 +f 24/124/5 13/133/6 1/16/6 +f 14/125/7 15/128/8 3/12/8 +f 21/126/9 22/129/10 10/21/10 +f 18/127/4 19/241/11 7/29/11 +f 15/128/8 16/131/12 4/10/12 +f 22/129/10 23/132/13 11/19/13 +f 19/130/11 20/134/14 8/25/14 +f 16/131/12 17/123/3 5/33/3 +f 23/132/13 24/124/5 12/18/5 +f 13/133/6 14/125/7 2/13/7 +f 20/134/14 21/126/9 9/23/9 +f 29/135/13 37/142/13 36/136/15 +f 31/138/16 35/242/16 25/139/8 +f 28/141/5 38/146/5 37/142/13 +f 33/143/7 26/147/7 27/144/6 +f 34/145/6 27/144/6 38/146/5 +f 32/140/8 25/139/8 26/147/7 +f 40/164/10 30/137/15 49/149/18 +f 30/137/15 36/136/15 49/149/18 +f 51/150/14 45/157/14 44/151/11 +f 52/153/3 42/159/3 41/154/19 +f 53/156/9 46/160/9 45/157/14 +f 54/158/4 43/162/4 42/159/3 +f 49/149/18 47/148/17 46/160/9 +f 50/161/11 44/243/11 43/162/4 +f 49/149/18 63/244/17 61/163/17 +f 39/165/12 55/176/19 62/166/19 +f 58/167/11 64/245/11 68/168/4 +f 61/163/17 63/244/17 67/170/9 +f 57/169/4 68/168/4 66/172/3 +f 60/171/9 67/170/9 65/174/14 +f 56/173/3 66/172/3 62/166/19 +f 59/175/14 65/174/14 64/177/11 +f 41/154/19 35/242/16 48/155/20 +f 35/242/16 31/138/16 48/155/20 +f 101/179/9 102/188/10 90/180/10 +f 98/182/4 99/190/11 87/183/11 +f 95/185/16 96/192/12 84/186/12 +f 102/188/10 103/203/15 91/189/15 +f 99/190/11 100/198/14 88/191/14 +f 96/192/12 97/199/3 85/193/3 +f 83/187/16 104/246/12 92/194/12 +f 72/195/10 106/212/10 105/196/9 +f 100/198/14 101/179/9 89/181/9 +f 97/199/3 98/182/4 86/184/4 +f 75/200/6 109/247/6 108/201/5 +f 103/203/15 82/248/10 94/204/10 +f 79/205/3 113/214/3 112/206/12 +f 76/208/7 110/219/7 109/209/6 +f 73/211/13 107/220/13 106/212/10 +f 80/213/4 114/221/4 113/214/3 +f 70/215/14 81/222/14 93/216/11 +f 77/218/8 111/223/8 110/219/7 +f 74/202/5 108/201/5 107/220/13 +f 69/217/11 93/216/11 114/221/4 +f 71/197/9 105/196/9 81/222/14 +f 78/207/12 112/206/12 111/223/8 +f 117/224/6 126/240/6 132/225/21 +f 123/227/10 131/236/10 130/228/22 +f 121/230/11 129/249/11 128/231/23 +f 119/233/12 127/239/12 125/234/24 +f 124/226/21 132/225/21 131/236/10 +f 122/229/22 130/228/22 129/237/11 +f 120/232/23 128/231/23 127/239/12 +f 118/235/24 125/234/24 126/240/6 +o Shell +v 0.000000 0.562500 -3.375000 +v -0.132583 0.507582 -3.375000 +v -0.187500 0.375000 -3.375000 +v -0.132583 0.242418 -3.375000 +v 0.000000 0.187500 -3.375000 +v 0.132582 0.242418 -3.375000 +v 0.187500 0.375000 -3.375000 +v 0.132582 0.507582 -3.375000 +v -0.132583 0.507583 -4.437500 +v 0.000000 0.562501 -4.437500 +v -0.187500 0.375001 -4.437500 +v -0.132583 0.242418 -4.437500 +v 0.000000 0.187501 -4.437500 +v 0.132582 0.242418 -4.437500 +v 0.187500 0.375001 -4.437500 +v 0.132582 0.507583 -4.437500 +v 0.000000 0.593751 -4.437500 +v -0.154680 0.529681 -4.437500 +v -0.218750 0.375001 -4.437500 +v -0.154680 0.220321 -4.437500 +v 0.000000 0.156251 -4.437500 +v 0.154680 0.220321 -4.437500 +v 0.218750 0.375001 -4.437500 +v 0.154680 0.529681 -4.437500 +v 0.000000 0.593751 -4.500000 +v -0.154680 0.529681 -4.500000 +v -0.218750 0.375001 -4.500000 +v -0.154680 0.220321 -4.500000 +v 0.000000 0.156251 -4.500000 +v 0.154680 0.220321 -4.500000 +v 0.218750 0.375001 -4.500000 +v 0.154680 0.529681 -4.500000 +v 0.000000 0.500001 -4.500000 +v -0.088388 0.463389 -4.500000 +v -0.125000 0.375001 -4.500000 +v -0.088388 0.286613 -4.500000 +v 0.000000 0.250001 -4.500000 +v 0.088388 0.286613 -4.500000 +v 0.125000 0.375001 -4.500000 +v 0.088388 0.463389 -4.500000 +v 0.000000 0.437501 -4.500000 +v -0.044194 0.419195 -4.500000 +v -0.062500 0.375001 -4.500000 +v -0.044194 0.330807 -4.500000 +v 0.000000 0.312501 -4.500000 +v 0.044194 0.330807 -4.500000 +v 0.062500 0.375001 -4.500000 +v 0.044194 0.419195 -4.500000 +v -0.088388 0.463389 -4.468750 +v 0.000000 0.500001 -4.468750 +v -0.125000 0.375001 -4.468750 +v -0.088388 0.286613 -4.468750 +v 0.000000 0.250001 -4.468750 +v 0.088388 0.286613 -4.468750 +v 0.125000 0.375001 -4.468750 +v 0.088388 0.463389 -4.468750 +v -0.044194 0.419195 -4.468750 +v 0.000000 0.437501 -4.468750 +v -0.062500 0.375001 -4.468750 +v -0.044194 0.330807 -4.468750 +v 0.000000 0.312501 -4.468750 +v 0.044194 0.330807 -4.468750 +v 0.062500 0.375001 -4.468750 +v 0.044194 0.419195 -4.468750 +vt 0.112500 0.414009 +vt 0.100109 0.398990 +vt 0.112500 0.383971 +vt 0.075000 0.414141 +vt 0.070833 0.424242 +vt 0.070833 0.414141 +vt 0.075000 0.404040 +vt 0.070833 0.404040 +vt 0.075000 0.393939 +vt 0.070833 0.393939 +vt 0.075000 0.383838 +vt 0.070833 0.383838 +vt 0.075000 0.454545 +vt 0.070833 0.464646 +vt 0.070833 0.454545 +vt 0.075000 0.444444 +vt 0.070833 0.444444 +vt 0.070833 0.434343 +vt 0.075000 0.434343 +vt 0.087500 0.434343 +vt 0.079167 0.444444 +vt 0.079167 0.434343 +vt 0.087500 0.424242 +vt 0.079167 0.424242 +vt 0.079167 0.414141 +vt 0.079167 0.404040 +vt 0.087500 0.414141 +vt 0.087500 0.393939 +vt 0.079167 0.393939 +vt 0.087500 0.383838 +vt 0.079167 0.383838 +vt 0.079167 0.454545 +vt 0.087500 0.464646 +vt 0.079167 0.464646 +vt 0.087500 0.454545 +vt 0.104167 0.424234 +vt 0.100007 0.419192 +vt 0.104167 0.414150 +vt 0.095833 0.434343 +vt 0.091667 0.444444 +vt 0.091667 0.434343 +vt 0.091667 0.424242 +vt 0.095833 0.429293 +vt 0.095833 0.414141 +vt 0.091667 0.414141 +vt 0.091667 0.404040 +vt 0.095833 0.409091 +vt 0.095833 0.393939 +vt 0.091667 0.393939 +vt 0.091667 0.383838 +vt 0.095833 0.388889 +vt 0.095833 0.454545 +vt 0.091667 0.464646 +vt 0.091667 0.454545 +vt 0.095833 0.449495 +vt 0.103738 0.409610 +vt 0.103738 0.388370 +vt 0.121262 0.388370 +vt 0.124891 0.398990 +vt 0.121262 0.409610 +vt 0.075000 0.424242 +vt 0.075000 0.464646 +vt 0.087500 0.444444 +vt 0.087500 0.404040 +vt 0.108327 0.419192 +vt 0.107108 0.422757 +vt 0.101225 0.422757 +vt 0.101225 0.415626 +vt 0.107108 0.415626 +vt 0.095833 0.439394 +vt 0.095833 0.424242 +vt 0.095833 0.419192 +vt 0.095833 0.404040 +vt 0.095833 0.398990 +vt 0.095833 0.383838 +vt 0.095833 0.459596 +vt 0.095833 0.444444 +vt -0.000000 0.404040 +vt 0.000000 0.464646 +vt 0.000000 0.434343 +vt 0.000000 0.444444 +vt -0.000000 0.414141 +vt 0.000000 0.383838 +vt -0.000000 0.393939 +vt 0.000000 0.454545 +vt 0.000000 0.424242 +vt 0.100000 0.429293 +vt 0.100000 0.424242 +vt 0.100000 0.419192 +vt 0.100000 0.414141 +vt 0.100000 0.409091 +vt 0.100000 0.404040 +vt 0.100000 0.398990 +vt 0.100000 0.393939 +vt 0.100000 0.439394 +vt 0.100000 0.434343 +vt 0.100000 0.449495 +vt 0.100000 0.444444 +vt 0.100000 0.459596 +vt 0.100000 0.454545 +vt 0.100000 0.388889 +vt 0.100000 0.383838 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 -0.0000 -0.0000 +vn 0.7071 -0.7071 -0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.7071 -0.7071 -0.0000 +vn -0.7071 0.7071 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 133/250/25 135/251/25 137/252/25 +f 156/253/25 142/254/25 148/255/25 +f 155/256/25 148/255/25 147/257/25 +f 154/258/25 147/257/25 146/259/25 +f 153/260/25 146/259/25 145/261/25 +f 152/262/25 145/263/25 144/264/25 +f 151/265/25 144/264/25 143/266/25 +f 141/267/25 151/265/25 143/266/25 +f 142/254/25 150/268/25 141/267/25 +f 166/269/26 159/270/26 158/271/26 +f 165/272/26 158/271/26 157/273/26 +f 164/274/26 165/272/26 157/273/26 +f 163/275/26 172/276/26 164/274/26 +f 170/277/26 163/275/26 162/278/26 +f 169/279/26 162/278/26 161/280/26 +f 160/281/26 169/282/26 161/283/26 +f 159/270/26 168/284/26 160/281/26 +f 173/285/26 179/286/26 177/287/26 +f 189/288/26 183/289/26 181/290/26 +f 182/291/26 189/292/26 181/290/26 +f 196/293/26 182/291/26 188/294/26 +f 187/295/26 196/296/26 188/294/26 +f 194/297/26 187/295/26 186/298/26 +f 185/299/26 194/300/26 186/298/26 +f 192/301/26 185/302/26 184/303/26 +f 183/289/26 192/304/26 184/303/26 +f 133/250/25 134/305/25 135/251/25 +f 135/251/25 136/306/25 137/252/25 +f 137/252/25 138/307/25 133/250/25 +f 138/307/25 139/308/25 133/250/25 +f 139/308/25 140/309/25 133/250/25 +f 156/253/25 149/310/25 142/254/25 +f 155/256/25 156/253/25 148/255/25 +f 154/258/25 155/256/25 147/257/25 +f 153/260/25 154/258/25 146/259/25 +f 152/262/25 153/311/25 145/263/25 +f 151/265/25 152/262/25 144/264/25 +f 141/267/25 150/268/25 151/265/25 +f 142/254/25 149/310/25 150/268/25 +f 166/269/26 167/312/26 159/270/26 +f 165/272/26 166/269/26 158/271/26 +f 164/274/26 172/276/26 165/272/26 +f 163/275/26 171/313/26 172/276/26 +f 170/277/26 171/313/26 163/275/26 +f 169/279/26 170/277/26 162/278/26 +f 160/281/26 168/284/26 169/282/26 +f 159/270/26 167/312/26 168/284/26 +f 175/314/26 174/315/26 173/285/26 +f 173/285/26 180/316/26 179/286/26 +f 179/286/26 178/317/26 177/287/26 +f 177/287/26 176/318/26 175/314/26 +f 175/314/26 173/285/26 177/287/26 +f 189/288/26 191/319/26 183/289/26 +f 182/291/26 190/320/26 189/292/26 +f 196/293/26 190/321/26 182/291/26 +f 187/295/26 195/322/26 196/296/26 +f 194/297/26 195/323/26 187/295/26 +f 185/299/26 193/324/26 194/300/26 +f 192/301/26 193/325/26 185/302/26 +f 183/289/26 191/326/26 192/304/26 +s 1 +f 139/327/27 146/259/28 147/257/27 +f 137/328/29 144/264/30 145/263/29 +f 134/329/31 143/266/32 135/330/32 +f 140/331/33 147/257/27 148/255/33 +f 137/332/29 146/259/28 138/333/28 +f 135/330/32 144/264/30 136/334/30 +f 133/335/34 141/267/31 134/329/31 +f 140/331/33 142/254/34 133/335/34 +f 156/253/33 157/273/34 149/310/34 +f 154/258/28 163/275/27 155/256/27 +f 152/262/30 161/283/29 153/311/29 +f 150/268/31 159/270/32 151/265/32 +f 155/256/27 164/274/33 156/253/33 +f 153/260/29 162/278/28 154/258/28 +f 151/265/32 160/281/30 152/262/30 +f 149/310/34 158/271/31 150/268/31 +f 166/269/28 183/289/27 167/312/27 +f 174/336/31 190/320/34 173/337/34 +f 173/338/34 196/293/33 180/339/33 +f 165/272/29 181/290/28 166/269/28 +f 172/276/30 182/291/29 165/272/29 +f 180/340/33 195/322/27 179/341/27 +f 171/313/32 188/294/30 172/276/30 +f 179/342/27 194/297/28 178/343/28 +f 175/344/32 189/288/31 174/345/31 +f 167/312/27 184/303/33 168/284/33 +f 176/346/30 191/326/32 175/347/32 +f 168/284/33 185/302/34 169/282/34 +f 177/348/29 192/301/30 176/349/30 +f 169/279/34 186/298/31 170/277/31 +f 178/350/28 193/324/29 177/351/29 +f 170/277/31 187/295/32 171/313/32 +f 139/327/27 138/333/28 146/259/28 +f 137/328/29 136/334/30 144/264/30 +f 134/329/31 141/267/31 143/266/32 +f 140/331/33 139/327/27 147/257/27 +f 137/332/29 145/261/29 146/259/28 +f 135/330/32 143/266/32 144/264/30 +f 133/335/34 142/254/34 141/267/31 +f 140/331/33 148/255/33 142/254/34 +f 156/253/33 164/274/33 157/273/34 +f 154/258/28 162/278/28 163/275/27 +f 152/262/30 160/281/30 161/283/29 +f 150/268/31 158/271/31 159/270/32 +f 155/256/27 163/275/27 164/274/33 +f 153/260/29 161/280/29 162/278/28 +f 151/265/32 159/270/32 160/281/30 +f 149/310/34 157/273/34 158/271/31 +f 166/269/28 181/290/28 183/289/27 +f 174/336/31 189/292/31 190/320/34 +f 173/338/34 190/321/34 196/293/33 +f 165/272/29 182/291/29 181/290/28 +f 172/276/30 188/294/30 182/291/29 +f 180/340/33 196/296/33 195/322/27 +f 171/313/32 187/295/32 188/294/30 +f 179/342/27 195/323/27 194/297/28 +f 175/344/32 191/319/32 189/288/31 +f 167/312/27 183/289/27 184/303/33 +f 176/346/30 192/304/30 191/326/32 +f 168/284/33 184/303/33 185/302/34 +f 177/348/29 193/325/29 192/301/30 +f 169/279/34 185/299/34 186/298/31 +f 178/350/28 194/300/28 193/324/29 +f 170/277/31 186/298/31 187/295/32 +o Belt +v -0.132583 0.507583 -3.687500 +v 0.000000 0.187501 -4.062500 +v -0.187500 0.375001 -3.687500 +v -0.132583 0.242418 -3.687500 +v 0.000000 0.187501 -3.687500 +v 0.132582 0.242418 -3.687500 +v 0.187500 0.375001 -3.687500 +v 0.132582 0.507583 -3.687500 +v -0.132583 0.242418 -4.062500 +v -0.154680 0.529681 -3.687500 +v -0.218750 0.375001 -3.687500 +v -0.154680 0.220321 -3.687500 +v 0.000000 0.156251 -3.687500 +v 0.154680 0.220321 -3.687500 +v 0.218750 0.375001 -3.687500 +v 0.154680 0.529681 -3.687500 +v -0.132583 0.507583 -3.812500 +v -0.187500 0.375001 -4.062500 +v -0.187500 0.375001 -3.812500 +v -0.132583 0.242418 -3.812500 +v 0.000000 0.187501 -3.812500 +v 0.132582 0.242418 -3.812500 +v 0.187500 0.375001 -3.812500 +v 0.132582 0.507583 -3.812500 +v -0.154680 0.529681 -3.812500 +v -0.132583 0.507583 -4.062500 +v -0.218750 0.375001 -3.812500 +v -0.154680 0.220321 -3.812500 +v 0.000000 0.156251 -3.812500 +v 0.154680 0.220321 -3.812500 +v 0.218750 0.375001 -3.812500 +v 0.154680 0.529681 -3.812500 +v 0.132582 0.242418 -4.062500 +v 0.187500 0.375001 -4.062500 +v 0.132582 0.507583 -4.062500 +v -0.154680 0.529681 -4.062500 +v -0.218750 0.375001 -4.062500 +v -0.154680 0.220321 -4.062500 +v 0.000000 0.156251 -4.062500 +v 0.154680 0.220321 -4.062500 +v 0.218750 0.375001 -4.062500 +v 0.154680 0.529681 -4.062500 +v -0.132583 0.507583 -4.187500 +v -0.187500 0.375001 -4.187500 +v -0.132583 0.242418 -4.187500 +v 0.000000 0.187501 -4.187500 +v 0.132582 0.242418 -4.187500 +v 0.187500 0.375001 -4.187500 +v 0.132582 0.507583 -4.187500 +v -0.154680 0.529681 -4.187500 +v -0.218750 0.375001 -4.187500 +v -0.154680 0.220321 -4.187500 +v 0.000000 0.156251 -4.187500 +v 0.154680 0.220321 -4.187500 +v 0.218750 0.375001 -4.187500 +v 0.154680 0.529681 -4.187500 +vt 0.000000 0.469697 +vt 0.008333 0.474747 +vt 0.008333 0.469697 +vt 0.041667 0.505050 +vt 0.050000 0.500000 +vt 0.041667 0.500000 +vt 0.033333 0.505050 +vt 0.033333 0.500000 +vt 0.025000 0.505050 +vt 0.025000 0.500000 +vt 0.016667 0.500000 +vt 0.008333 0.500000 +vt 0.016667 0.505050 +vt -0.000000 0.500000 +vt 0.008333 0.505050 +vt 0.016667 0.474747 +vt 0.016667 0.469697 +vt 0.050000 0.500000 +vt 0.041667 0.494949 +vt 0.041667 0.500000 +vt 0.033333 0.494949 +vt 0.033333 0.500000 +vt 0.033333 0.474747 +vt 0.029167 0.494949 +vt 0.008333 0.500000 +vt 0.016667 0.494949 +vt 0.008333 0.494949 +vt 0.000000 0.500000 +vt -0.000000 0.494949 +vt 0.020833 0.474747 +vt 0.041667 0.469697 +vt 0.033333 0.469697 +vt 0.041667 0.474747 +vt 0.050000 0.469697 +vt 0.004167 0.505050 +vt 0.000000 0.505050 +vt 0.050000 0.494949 +vt 0.045833 0.505050 +vt 0.050000 0.505050 +vt 0.050000 0.469697 +vt 0.041667 0.464646 +vt 0.041667 0.469697 +vt 0.033333 0.464646 +vt 0.033333 0.469697 +vt 0.025000 0.464646 +vt 0.025000 0.469697 +vt 0.016667 0.469697 +vt 0.016667 0.464646 +vt 0.008333 0.469697 +vt 0.008333 0.464646 +vt 0.000000 0.469697 +vt 0.000000 0.464646 +vt 0.004167 0.474747 +vt -0.000000 0.474747 +vt 0.050000 0.464646 +vt 0.045833 0.474747 +vt 0.050000 0.474747 +vt 0.029167 0.474747 +vt 0.016667 0.500000 +vt 0.020833 0.494949 +vt 0.004167 0.494949 +vt 0.045833 0.494949 +vt 0.004167 0.464646 +vt 0.045833 0.464646 +vt 0.025000 0.494949 +vt 0.033333 0.474747 +vt 0.033333 0.494949 +vt 0.016667 0.494949 +vt 0.025000 0.474747 +vt 0.033333 0.505050 +vt 0.041667 0.494949 +vt 0.041667 0.505050 +vt 0.025000 0.505050 +vt 0.025000 0.494949 +vt 0.016667 0.505050 +vt 0.008333 0.505050 +vt 0.000000 0.505050 +vt 0.008333 0.494949 +vt 0.050000 0.494949 +vt 0.050000 0.505050 +vt 0.041667 0.464646 +vt 0.041667 0.474747 +vt 0.033333 0.464646 +vt 0.025000 0.474747 +vt 0.016667 0.474747 +vt 0.025000 0.464646 +vt 0.008333 0.474747 +vt 0.016667 0.464646 +vt 0.000000 0.474747 +vt 0.008333 0.464646 +vt 0.050000 0.464646 +vt 0.050000 0.474747 +vt 0.000000 0.494949 +vt 0.000000 0.464646 +vn -0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn -0.0000 1.0000 0.0000 +vn 0.6037 0.7972 0.0000 +vn -0.6037 0.7972 0.0000 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn -0.6037 -0.7972 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.6037 -0.7972 0.0000 +vn 0.7071 -0.7071 0.0000 +vn -0.9239 -0.3827 0.0000 +vn 0.9239 0.3827 0.0000 +vn 0.9239 -0.3827 0.0000 +vn -0.9239 0.3827 0.0000 +s off +f 222/352/35 233/353/35 214/354/35 +f 211/355/35 204/356/35 203/357/35 +f 210/358/35 203/357/35 202/359/35 +f 209/360/35 202/359/35 201/361/35 +f 200/362/35 209/360/35 201/361/35 +f 199/363/35 208/364/35 200/362/35 +f 197/365/35 207/366/35 199/363/35 +f 214/354/35 234/367/35 205/368/35 +f 220/369/36 227/370/36 219/371/36 +f 219/371/36 226/372/36 218/373/36 +f 236/374/37 218/375/37 226/372/37 +f 215/376/36 224/377/36 223/378/36 +f 213/379/36 223/378/36 221/380/36 +f 224/377/38 205/381/38 234/367/38 +f 236/374/35 230/382/35 229/383/35 +f 237/384/35 231/385/35 230/382/35 +f 197/386/37 221/380/37 206/387/37 +f 228/388/38 204/389/38 212/390/38 +f 245/391/36 251/392/36 244/393/36 +f 244/393/36 250/394/36 243/395/36 +f 243/395/36 249/396/36 242/397/36 +f 241/398/36 249/396/36 248/399/36 +f 240/400/36 248/399/36 247/401/36 +f 239/402/36 247/401/36 246/403/36 +f 222/404/37 246/403/37 232/405/37 +f 252/406/38 231/407/38 238/408/38 +f 222/352/35 232/405/35 233/353/35 +f 211/355/35 212/390/35 204/356/35 +f 210/358/35 211/355/35 203/357/35 +f 209/360/35 210/358/35 202/359/35 +f 200/362/35 208/364/35 209/360/35 +f 199/363/35 207/366/35 208/364/35 +f 197/365/35 206/387/35 207/366/35 +f 214/354/35 233/353/35 234/367/35 +f 220/369/36 228/388/36 227/370/36 +f 219/371/36 227/370/36 226/372/36 +f 236/374/37 229/409/37 218/375/37 +f 215/376/36 216/410/36 224/377/36 +f 213/379/36 215/376/36 223/378/36 +f 224/377/38 216/411/38 205/381/38 +f 236/374/35 237/384/35 230/382/35 +f 237/384/35 238/408/35 231/385/35 +f 197/386/37 213/412/37 221/380/37 +f 228/388/38 220/413/38 204/389/38 +f 245/391/36 252/406/36 251/392/36 +f 244/393/36 251/392/36 250/394/36 +f 243/395/36 250/394/36 249/396/36 +f 241/398/36 242/397/36 249/396/36 +f 240/400/36 241/398/36 248/399/36 +f 239/402/36 240/400/36 247/401/36 +f 222/404/37 239/414/37 246/403/37 +f 252/406/38 245/415/38 231/407/38 +s 1 +f 217/416/39 205/417/40 216/418/40 +f 218/419/41 198/420/39 217/416/39 +f 200/421/37 215/422/42 199/423/42 +f 207/366/43 224/377/44 208/364/45 +f 201/424/39 216/418/40 200/421/37 +f 208/364/45 225/425/46 209/360/46 +f 202/426/38 217/416/39 201/424/39 +f 209/360/46 226/372/47 210/358/48 +f 203/427/43 218/419/41 202/426/38 +f 210/358/48 227/370/42 211/355/42 +f 204/428/49 219/429/43 203/427/43 +f 211/355/42 228/388/50 212/390/50 +f 199/423/42 213/430/51 197/431/51 +f 206/387/52 223/378/43 207/366/43 +f 205/417/40 240/432/42 214/433/42 +f 233/353/43 248/399/45 234/367/44 +f 198/420/39 241/434/37 205/417/40 +f 234/367/44 249/396/46 235/435/46 +f 229/436/41 242/437/39 198/420/39 +f 235/435/46 250/394/48 236/374/47 +f 230/438/43 243/439/38 229/436/41 +f 236/374/47 251/392/42 237/384/42 +f 231/440/49 244/441/43 230/438/43 +f 237/384/42 252/406/50 238/408/50 +f 214/433/42 239/442/51 222/443/51 +f 232/405/52 247/401/43 233/353/43 +f 236/374/47 225/425/46 235/435/46 +f 235/435/46 224/377/44 234/367/44 +f 217/416/39 198/420/39 205/417/40 +f 218/419/41 229/436/41 198/420/39 +f 200/421/37 216/418/40 215/422/42 +f 207/366/43 223/378/43 224/377/44 +f 201/424/39 217/416/39 216/418/40 +f 208/364/45 224/377/44 225/425/46 +f 202/426/38 218/419/41 217/416/39 +f 209/360/46 225/425/46 226/372/47 +f 203/427/43 219/429/43 218/419/41 +f 210/358/48 226/372/47 227/370/42 +f 204/428/49 220/444/49 219/429/43 +f 211/355/42 227/370/42 228/388/50 +f 199/423/42 215/422/42 213/430/51 +f 206/387/52 221/380/52 223/378/43 +f 205/417/40 241/434/37 240/432/42 +f 233/353/43 247/401/43 248/399/45 +f 198/420/39 242/437/39 241/434/37 +f 234/367/44 248/399/45 249/396/46 +f 229/436/41 243/439/38 242/437/39 +f 235/435/46 249/396/46 250/394/48 +f 230/438/43 244/441/43 243/439/38 +f 236/374/47 250/394/48 251/392/42 +f 231/440/49 245/445/49 244/441/43 +f 237/384/42 251/392/42 252/406/50 +f 214/433/42 240/432/42 239/442/51 +f 232/405/52 246/403/52 247/401/43 +f 236/374/47 226/372/47 225/425/46 +f 235/435/46 225/425/46 224/377/44 +o Magazine +v 0.875000 -0.062500 -3.250000 +v 0.875000 -0.062500 -4.750000 +v -1.375000 -1.812500 -3.250000 +v -1.375000 -1.812500 -4.750000 +v 1.375000 -0.562500 -3.250000 +v 1.375000 -0.562500 -4.750000 +v 1.375000 -1.812500 -3.250000 +v 1.375000 -1.812500 -4.750000 +v -1.000000 -2.062500 -3.250000 +v -1.000000 -2.062500 -4.750000 +v 1.000000 -2.062500 -3.250000 +v 1.000000 -2.062500 -4.750000 +v -0.375000 -0.062500 -3.250000 +v -0.375000 -0.062500 -4.750000 +v -0.375000 -0.562500 -3.250000 +v -0.375000 -0.562500 -4.750000 +v 0.375000 -0.562500 -3.250000 +v 0.375000 -0.562500 -4.750000 +v 0.375000 -0.062500 -3.250000 +v 0.375000 -0.062500 -4.750000 +v -1.000000 -0.062500 -3.250000 +v -1.375000 -0.312500 -3.250000 +v -1.375000 -0.312500 -4.750000 +v -1.000000 -0.062500 -4.750000 +v 0.437500 -0.062500 -3.312500 +v 0.437500 -0.062500 -4.687500 +v 1.312500 -0.500000 -3.312500 +v 1.312500 -0.500000 -4.687500 +v 0.875000 -0.062500 -3.312500 +v 0.875000 -0.062500 -4.687500 +v 0.437500 -1.062500 -3.312500 +v 0.437500 -1.062500 -4.687500 +v 1.312500 -1.062500 -3.312500 +v 1.312500 -1.062500 -4.687500 +vt 0.100000 0.828283 +vt 0.095833 0.712121 +vt 0.100000 0.707071 +vt 0.533333 0.707071 +vt 0.566667 0.828283 +vt 0.533333 0.828283 +vt 0.566667 0.707071 +vt 0.616667 0.828283 +vt 0.000000 0.707071 +vt 0.033333 0.828283 +vt 0.000000 0.828283 +vt 0.033333 0.707071 +vt 0.037500 0.823232 +vt 0.341667 0.989899 +vt 0.300000 0.989899 +vt 0.300000 0.949495 +vt 0.208333 0.707071 +vt 0.250000 0.585859 +vt 0.300000 0.585859 +vt 0.066667 0.828283 +vt 0.095833 0.823232 +vt 0.066667 0.823232 +vt 0.066667 0.707071 +vt 0.066667 0.712121 +vt 0.037500 0.712121 +vt 0.750000 0.489899 +vt 0.841667 0.409091 +vt 0.841667 0.489899 +vt 0.750000 0.409091 +vt 0.841667 0.338384 +vt 0.750000 0.292929 +vt 0.841667 0.292929 +vt 0.683333 0.409091 +vt 0.683333 0.373737 +vt 0.879167 0.338384 +vt 0.616667 0.707071 +vt 0.250000 0.989899 +vt 0.216667 0.989899 +vt 0.250000 0.949495 +vt 0.183333 0.949495 +vt 0.183333 0.848485 +vt 0.208333 0.828283 +vt 0.341667 0.828283 +vt 0.366667 0.848485 +vt 0.366667 0.969697 +vt 0.183333 0.585859 +vt 0.216667 0.545455 +vt 0.250000 0.545455 +vt 0.183333 0.686869 +vt 0.366667 0.686869 +vt 0.341667 0.707071 +vt 0.341667 0.545455 +vt 0.366667 0.565657 +vt 0.300000 0.545455 +vt 0.750000 0.338384 +vt 0.712500 0.338384 +vt 0.908333 0.373737 +vt 0.908333 0.409091 +vt 0.183333 0.828283 +vt 0.183333 0.707071 +vt 0.366667 0.707071 +vt 0.366667 0.828283 +vt 0.466667 0.707071 +vt 0.466667 0.828283 +vt 0.491667 0.828283 +vt 0.491667 0.707071 +vn 0.7071 0.7071 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.8817 -0.4719 0.0000 +vn 0.2898 -0.9571 0.0000 +vn -0.2898 -0.9571 0.0000 +vn -0.8817 -0.4719 0.0000 +vn -0.8817 0.4719 0.0000 +vn -0.2898 0.9571 0.0000 +s off +f 258/446/53 279/447/53 257/448/53 +f 265/449/54 268/450/54 266/451/54 +f 267/452/55 270/453/55 268/450/55 +f 269/454/56 272/455/56 270/456/56 +f 271/457/55 278/458/55 272/455/55 +f 276/459/57 266/460/57 268/461/57 +f 263/462/58 269/463/58 267/464/58 +f 254/465/53 280/466/53 258/446/53 +f 254/465/55 278/458/55 282/467/55 +f 253/468/53 279/447/53 281/469/53 +f 253/468/55 277/470/55 271/457/55 +f 277/471/54 284/472/54 278/473/54 +f 283/474/55 286/475/55 284/472/55 +f 286/475/56 279/476/56 280/477/56 +f 283/474/57 277/478/57 281/479/57 +f 284/472/58 286/475/58 280/480/58 +f 258/446/53 280/466/53 279/447/53 +f 265/449/54 267/452/54 268/450/54 +f 267/452/55 269/481/55 270/453/55 +f 269/454/56 271/457/56 272/455/56 +f 271/457/55 277/470/55 278/458/55 +f 272/482/57 254/483/57 270/484/57 +f 254/483/57 258/485/57 270/484/57 +f 258/485/57 260/486/57 270/484/57 +f 260/486/57 264/487/57 270/484/57 +f 264/487/57 262/488/57 270/484/57 +f 262/488/57 256/489/57 268/461/57 +f 270/484/57 262/488/57 268/461/57 +f 256/489/57 275/490/57 268/461/57 +f 275/490/57 276/459/57 268/461/57 +f 257/491/58 253/492/58 269/463/58 +f 253/492/58 271/493/58 269/463/58 +f 263/462/58 259/494/58 269/463/58 +f 259/494/58 257/491/58 269/463/58 +f 255/495/58 261/496/58 267/464/58 +f 261/496/58 263/462/58 267/464/58 +f 273/497/58 274/498/58 267/464/58 +f 274/498/58 255/495/58 267/464/58 +f 267/464/58 265/499/58 273/497/58 +f 254/465/53 282/467/53 280/466/53 +f 254/465/55 272/455/55 278/458/55 +f 253/468/53 257/448/53 279/447/53 +f 253/468/55 281/469/55 277/470/55 +f 277/471/54 283/474/54 284/472/54 +f 283/474/55 285/500/55 286/475/55 +f 286/475/56 285/500/56 279/476/56 +f 281/479/57 279/501/57 283/474/57 +f 279/501/57 285/500/57 283/474/57 +f 280/480/58 282/502/58 284/472/58 +f 282/502/58 278/503/58 284/472/58 +s 1 +f 257/448/54 260/504/59 258/446/54 +f 264/487/60 261/496/61 262/488/61 +f 259/505/59 264/487/60 260/504/59 +f 262/488/61 255/506/62 256/507/62 +f 256/507/62 274/508/63 275/509/63 +f 276/510/64 274/508/63 273/511/64 +f 273/511/64 266/451/55 276/510/64 +f 257/448/54 259/505/59 260/504/59 +f 264/487/60 263/462/60 261/496/61 +f 259/505/59 263/462/60 264/487/60 +f 262/488/61 261/496/61 255/506/62 +f 256/507/62 255/506/62 274/508/63 +f 276/510/64 275/509/63 274/508/63 +f 273/511/64 265/449/55 266/451/55 +o Hood +v -0.312500 0.437500 -3.000000 +v 0.312500 0.437500 -3.000000 +v -0.312500 0.349112 -2.963388 +v 0.312500 0.349112 -2.963388 +v -0.312500 0.312500 -2.875000 +v 0.312500 0.312500 -2.875000 +v -0.312500 0.349112 -2.786612 +v 0.312500 0.349112 -2.786612 +v -0.312500 0.437500 -2.750000 +v 0.312500 0.437500 -2.750000 +v -0.312500 0.525888 -2.786612 +v 0.312500 0.525888 -2.786612 +v -0.312500 0.562500 -2.875000 +v 0.312500 0.562500 -2.875000 +v -0.312500 0.525888 -2.963388 +v 0.312500 0.525888 -2.963388 +v -0.312500 0.437500 -2.875000 +v 0.312500 0.437500 -2.875000 +v -0.312500 0.812500 -2.875000 +v 0.312500 0.812500 -2.875000 +v -0.312500 1.062500 -3.937500 +v 0.312500 1.062500 -3.937500 +v -0.312500 1.062500 -5.500000 +v 0.312500 1.062500 -5.500000 +v -0.500000 0.875000 -3.250000 +v 0.500000 0.875000 -3.250000 +v -0.500000 0.875000 -4.500000 +v 0.500000 0.875000 -4.500000 +v -0.500000 0.750000 -4.375000 +v -0.500000 0.750000 -3.375000 +v 0.500000 0.750000 -3.375000 +v 0.500000 0.750000 -4.375000 +v -0.500000 0.375000 -3.250000 +v 0.500000 0.375000 -3.250000 +v -0.500000 0.375000 -3.375000 +v 0.500000 0.375000 -3.375000 +v -0.312500 0.562500 -3.000000 +v 0.312500 0.562500 -3.000000 +v -0.312500 0.562500 -3.250000 +v 0.312500 0.562500 -3.250000 +v -0.312500 0.875000 -3.250000 +v 0.312500 0.875000 -3.250000 +v -0.500000 0.625000 -4.375000 +v 0.500000 0.625000 -4.375000 +v -0.500000 0.625000 -4.875000 +v 0.500000 0.625000 -4.875000 +v -0.500000 0.687500 -4.500000 +v 0.500000 0.687500 -4.500000 +v -0.500000 0.687500 -4.937500 +v 0.500000 0.687500 -4.937500 +v -0.500000 0.437500 -4.875000 +v 0.500000 0.437500 -4.875000 +v -0.500000 0.437500 -4.937500 +v 0.500000 0.437500 -4.937500 +v -0.312500 0.312500 -5.500000 +v 0.312500 0.312500 -5.500000 +v 0.312500 0.875000 -4.500000 +v 0.312500 0.687500 -4.500000 +v 0.312500 0.687500 -4.937500 +v 0.312500 0.437500 -4.937500 +v 0.312500 0.312500 -5.000000 +v 0.312500 0.437500 -5.000000 +v -0.312500 0.875000 -4.500000 +v -0.312500 0.687500 -4.500000 +v -0.312500 0.687500 -4.937500 +v -0.312500 0.437500 -4.937500 +v -0.312500 0.312500 -5.000000 +v -0.312500 0.437500 -5.000000 +v 0.125000 0.750000 -3.375000 +v 0.125000 0.750000 -4.375000 +v 0.125000 0.625000 -3.375000 +v 0.125000 0.625000 -4.375000 +v -0.125000 0.625000 -3.375000 +v -0.125000 0.625000 -4.375000 +v -0.125000 0.750000 -3.375000 +v -0.125000 0.750000 -4.375000 +vt 0.658552 0.762626 +vt 0.660928 0.755671 +vt 0.666667 0.752790 +vt 0.666808 0.752259 +vt 0.661030 0.749500 +vt 0.672304 0.735349 +vt 0.391667 0.888889 +vt 0.416667 0.939394 +vt 0.391667 0.939394 +vt 0.500000 0.585859 +vt 0.583333 0.666667 +vt 0.500000 0.666667 +vt 0.366667 0.666667 +vt 0.433333 0.585859 +vt 0.433333 0.666667 +vt 0.575000 0.575758 +vt 0.583333 0.585859 +vt 0.508333 0.676768 +vt 0.700000 0.666667 +vt 0.691667 0.585859 +vt 0.700000 0.585859 +vt 0.500000 0.707071 +vt 0.458333 0.666667 +vt 0.466667 0.585859 +vt 0.508333 0.575758 +vt 0.500000 0.545455 +vt 0.508333 0.545455 +vt 0.466667 0.666667 +vt 0.458333 0.585859 +vt 0.383333 0.888889 +vt 0.383333 0.939394 +vt 0.366667 0.888889 +vt 0.425000 0.848485 +vt 0.441667 0.848485 +vt 0.441667 0.873737 +vt 0.691667 0.666667 +vt 0.658333 0.585859 +vt 0.595833 0.666667 +vt 0.595833 0.585859 +vt 0.625000 0.666667 +vt 0.625000 0.585859 +vt 0.641667 0.666667 +vt 0.658333 0.666667 +vt 0.645833 0.585859 +vt 0.583333 0.681818 +vt 0.575000 0.676768 +vt 0.608333 0.686869 +vt 0.575000 0.686869 +vt 0.612500 0.702020 +vt 0.612500 0.681818 +vt 0.583333 0.570707 +vt 0.608333 0.565657 +vt 0.575000 0.565657 +vt 0.612500 0.550505 +vt 0.612500 0.570707 +vt 0.645833 0.666667 +vt 0.591667 0.888889 +vt 0.641667 0.939394 +vt 0.591667 0.939394 +vt 0.554167 0.858586 +vt 0.554167 0.838384 +vt 0.558333 0.838384 +vt 0.525000 0.873737 +vt 0.487500 0.888889 +vt 0.558333 0.989899 +vt 0.554167 0.969697 +vt 0.591667 1.000000 +vt 0.525000 0.954545 +vt 0.487500 0.939394 +vt 0.441667 0.954545 +vt 0.441667 0.979798 +vt 0.425000 0.979798 +vt 0.366667 0.707071 +vt 0.433333 0.696970 +vt 0.433333 0.707071 +vt 0.366667 0.696970 +vt 0.433333 0.676768 +vt 0.366667 0.676768 +vt 0.433333 0.666667 +vt 0.641667 0.888889 +vt 0.675000 0.939394 +vt 0.683333 0.888889 +vt 0.675000 0.888889 +vt 0.687500 0.888889 +vt 0.683333 0.939394 +vt 0.672405 0.755671 +vt 0.674782 0.762626 +vt 0.672405 0.769582 +vt 0.666667 0.772463 +vt 0.660928 0.769582 +vt 0.658553 0.742596 +vt 0.660829 0.735591 +vt 0.666525 0.732589 +vt 0.674780 0.742253 +vt 0.672504 0.749257 +vt 0.416667 0.888889 +vt 0.366667 0.585859 +vt 0.508333 0.707071 +vt 0.366667 0.939394 +vt 0.416667 0.868687 +vt 0.416667 0.838384 +vt 0.641667 0.585859 +vt 0.608333 0.702020 +vt 0.608333 0.550505 +vt 0.558333 0.828283 +vt 0.591667 0.828283 +vt 0.525000 0.858586 +vt 0.558333 1.000000 +vt 0.554167 0.989899 +vt 0.525000 0.969697 +vt 0.416667 0.959596 +vt 0.416667 0.989899 +vt 0.366667 0.666667 +vt 0.687500 0.939394 +vt 0.658333 0.792929 +vt 0.616667 0.803030 +vt 0.616667 0.792929 +vt 0.658333 0.803030 +vt 0.616667 0.813131 +vt 0.658333 0.732323 +vt 0.616667 0.742424 +vt 0.616667 0.732323 +vt 0.658333 0.742424 +vt 0.616667 0.752525 +vt 0.658333 0.752525 +vt 0.616667 0.762626 +vt 0.658333 0.772727 +vt 0.616667 0.772727 +vt 0.616667 0.782828 +vt 0.658333 0.782828 +vt 0.658333 0.813131 +vt 0.658333 0.762626 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.9734 0.2290 +vn 0.0000 0.9933 0.1153 +s off +f 296/512/65 294/513/65 292/514/65 +f 299/515/66 301/516/66 293/517/66 +f 304/518/67 305/519/67 303/520/67 +f 312/521/68 313/522/68 311/523/68 +f 315/524/69 317/525/69 316/526/69 +f 312/521/65 318/527/65 314/528/65 +f 313/522/66 316/529/66 311/523/66 +f 315/530/67 330/531/67 318/532/67 +f 316/529/66 319/533/66 311/523/66 +f 317/525/70 321/534/70 316/526/70 +f 311/523/67 320/535/67 312/521/67 +f 317/536/65 320/537/65 322/538/65 +f 319/539/69 322/540/69 320/535/69 +f 303/520/71 324/541/71 304/518/71 +f 323/542/69 326/543/69 324/541/69 +f 324/544/65 326/545/65 328/546/65 +f 329/547/69 332/548/69 330/531/69 +f 314/528/70 333/549/70 313/522/70 +f 334/550/68 335/551/68 333/549/68 +f 336/552/70 339/553/70 335/551/70 +f 331/554/67 338/555/67 332/548/67 +f 333/556/66 315/557/66 313/522/66 +f 333/556/66 331/558/66 329/559/66 +f 339/560/66 331/558/66 335/561/66 +f 318/527/65 334/562/65 314/528/65 +f 332/563/65 334/562/65 330/564/65 +f 332/563/65 340/565/65 336/566/65 +f 339/553/69 338/555/69 337/567/69 +f 310/568/70 341/569/70 309/570/70 +f 345/571/65 346/572/65 348/573/65 +f 310/568/65 343/574/65 345/571/65 +f 308/575/65 328/546/65 343/574/65 +f 354/576/66 351/577/66 341/578/66 +f 349/579/66 307/580/66 309/570/66 +f 327/581/66 307/580/66 349/579/66 +f 327/581/66 325/582/66 323/583/66 +f 355/584/65 358/585/65 356/586/65 +f 357/587/69 360/588/69 358/585/69 +f 359/589/66 362/590/66 360/588/66 +f 342/591/69 353/592/69 341/569/69 +f 348/593/67 353/592/67 347/594/67 +f 346/595/69 354/596/69 348/593/69 +f 292/514/65 290/597/65 288/598/65 +f 288/598/65 302/599/65 292/514/65 +f 302/599/65 300/600/65 292/514/65 +f 300/600/65 298/601/65 292/514/65 +f 298/601/65 296/512/65 292/514/65 +f 301/516/66 287/602/66 289/603/66 +f 289/603/66 291/604/66 301/516/66 +f 291/604/66 293/517/66 301/516/66 +f 293/517/66 295/605/66 297/606/66 +f 297/606/66 299/515/66 293/517/66 +f 304/518/67 306/607/67 305/519/67 +f 312/521/68 314/528/68 313/522/68 +f 315/524/69 318/608/69 317/525/69 +f 312/521/65 317/536/65 318/527/65 +f 313/522/66 315/557/66 316/529/66 +f 315/530/67 329/547/67 330/531/67 +f 316/529/66 321/609/66 319/533/66 +f 317/525/70 322/540/70 321/534/70 +f 311/523/67 319/539/67 320/535/67 +f 317/536/65 312/521/65 320/537/65 +f 319/539/69 321/534/69 322/540/69 +f 303/520/71 323/542/71 324/541/71 +f 323/542/69 325/610/69 326/543/69 +f 328/546/65 306/611/65 324/544/65 +f 306/611/65 304/612/65 324/544/65 +f 329/547/69 331/554/69 332/548/69 +f 314/528/70 334/550/70 333/549/70 +f 334/550/68 336/552/68 335/551/68 +f 336/552/70 340/613/70 339/553/70 +f 331/554/67 337/567/67 338/555/67 +f 333/556/66 329/559/66 315/557/66 +f 333/556/66 335/561/66 331/558/66 +f 339/560/66 337/614/66 331/558/66 +f 318/527/65 330/564/65 334/562/65 +f 332/563/65 336/566/65 334/562/65 +f 332/563/65 338/615/65 340/565/65 +f 339/553/69 340/613/69 338/555/69 +f 310/568/70 342/591/70 341/569/70 +f 347/616/65 342/617/65 348/573/65 +f 342/617/65 310/568/65 345/571/65 +f 348/573/65 342/617/65 345/571/65 +f 310/568/65 308/575/65 343/574/65 +f 343/574/65 344/618/65 345/571/65 +f 308/575/65 306/611/65 328/546/65 +f 341/578/66 353/619/66 354/576/66 +f 354/576/66 352/620/66 351/577/66 +f 351/577/66 309/570/66 341/578/66 +f 309/570/66 351/577/66 349/579/66 +f 351/577/66 350/621/66 349/579/66 +f 327/581/66 305/622/66 307/580/66 +f 303/623/66 305/622/66 323/583/66 +f 305/622/66 327/581/66 323/583/66 +f 355/584/65 357/587/65 358/585/65 +f 357/587/69 359/589/69 360/588/69 +f 359/589/66 361/624/66 362/590/66 +f 342/591/69 347/594/69 353/592/69 +f 348/593/67 354/596/67 353/592/67 +f 346/595/69 352/625/69 354/596/69 +s 1 +f 288/626/70 289/627/71 287/628/70 +f 290/629/71 291/630/69 289/627/71 +f 292/631/69 293/632/72 291/633/69 +f 294/634/72 295/635/67 293/632/72 +f 296/636/67 297/637/73 295/635/67 +f 297/637/73 300/638/68 299/639/68 +f 300/638/68 301/640/74 299/639/68 +f 302/641/74 287/628/70 301/640/74 +f 306/607/75 307/580/76 305/519/75 +f 308/575/76 309/570/68 307/580/76 +f 288/626/70 290/629/71 289/627/71 +f 290/629/71 292/642/69 291/630/69 +f 292/631/69 294/634/72 293/632/72 +f 294/634/72 296/636/67 295/635/67 +f 296/636/67 298/643/73 297/637/73 +f 297/637/73 298/643/73 300/638/68 +f 300/638/68 302/641/74 301/640/74 +f 302/641/74 288/626/70 287/628/70 +f 306/607/75 308/575/76 307/580/76 +f 308/575/76 310/568/68 309/570/68 +o RecoilSpring +v 0.000000 -0.875000 1.812500 +v -0.176777 -0.948223 1.812500 +v -0.250000 -1.125000 1.812500 +v -0.176777 -1.301777 1.812500 +v 0.000000 -1.375000 1.812500 +v 0.176777 -1.301777 1.812500 +v 0.250000 -1.125000 1.812500 +v 0.176777 -0.948223 1.812500 +v -0.176777 -0.948223 -0.375000 +v 0.000000 -0.875000 -0.375000 +v -0.250000 -1.125000 -0.375000 +v -0.176777 -1.301777 -0.375000 +v 0.000000 -1.375000 -0.375000 +v 0.176777 -1.301777 -0.375000 +v 0.250000 -1.125000 -0.375000 +v 0.176777 -0.948223 -0.375000 +v 0.000000 -0.875000 1.812500 +v -0.176777 -0.948223 1.812500 +v -0.250000 -1.125000 1.812500 +v -0.176777 -1.301777 1.812500 +v 0.000000 -1.375000 1.812500 +v 0.176777 -1.301777 1.812500 +v 0.250000 -1.125000 1.812500 +v 0.176777 -0.948223 1.812500 +v -0.176777 -0.948223 -0.375000 +v 0.000000 -0.875000 -0.375000 +v -0.250000 -1.125000 -0.375000 +v -0.176777 -1.301777 -0.375000 +v 0.000000 -1.375000 -0.375000 +v 0.176777 -1.301777 -0.375000 +v 0.250000 -1.125000 -0.375000 +v 0.176777 -0.948223 -0.375000 +vt 0.160417 0.368687 +vt 0.016667 0.383838 +vt 0.014583 0.368687 +vt 0.156250 0.338384 +vt 0.012500 0.353535 +vt 0.010417 0.338384 +vt 0.150000 0.292929 +vt 0.006250 0.308081 +vt 0.004167 0.292929 +vt 0.145833 0.262626 +vt 0.002083 0.277778 +vt 0.000000 0.262626 +vt 0.158333 0.353535 +vt 0.154167 0.323232 +vt 0.008333 0.323232 +vt 0.152083 0.308081 +vt 0.147917 0.277778 +vt 0.016667 0.383838 +vt 0.160417 0.368687 +vt 0.014583 0.368687 +vt 0.012500 0.353535 +vt 0.156250 0.338384 +vt 0.010417 0.338384 +vt 0.006250 0.308081 +vt 0.150000 0.292929 +vt 0.004167 0.292929 +vt 0.002083 0.277778 +vt 0.145833 0.262626 +vt 0.000000 0.262626 +vt 0.158333 0.353535 +vt 0.154167 0.323232 +vt 0.008333 0.323232 +vt 0.152083 0.308081 +vt 0.147917 0.277778 +vt 0.162500 0.383838 +vt 0.162500 0.383838 +vn -0.7071 -0.7071 0.0000 +vn -0.0000 -1.0000 0.0000 +vn -0.7071 0.7071 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.0000 1.0000 0.0000 +s 1 +f 374/644/77 367/645/78 366/646/77 +f 371/647/79 365/648/80 364/649/79 +f 377/650/81 370/651/82 369/652/81 +f 375/653/78 368/654/83 367/655/78 +f 373/656/80 366/646/77 365/648/80 +f 372/657/84 364/649/79 363/658/84 +f 378/659/82 363/658/84 370/651/82 +f 376/660/83 369/652/81 368/654/83 +f 383/661/84 390/662/82 382/663/82 +f 381/664/81 387/665/83 380/666/83 +f 386/667/77 393/668/80 385/669/80 +f 384/670/79 391/671/84 383/672/84 +f 382/663/82 389/673/81 381/664/81 +f 380/666/83 388/674/78 379/675/78 +f 379/675/78 394/676/77 386/667/77 +f 385/669/80 392/677/79 384/670/79 +f 374/644/77 375/678/78 367/645/78 +f 371/647/79 373/656/80 365/648/80 +f 377/650/81 378/659/82 370/651/82 +f 375/653/78 376/660/83 368/654/83 +f 373/656/80 374/644/77 366/646/77 +f 372/657/84 371/647/79 364/649/79 +f 378/659/82 372/657/84 363/658/84 +f 376/660/83 377/650/81 369/652/81 +f 383/661/84 391/679/84 390/662/82 +f 381/664/81 389/673/81 387/665/83 +f 386/667/77 394/676/77 393/668/80 +f 384/670/79 392/677/79 391/671/84 +f 382/663/82 390/662/82 389/673/81 +f 380/666/83 387/665/83 388/674/78 +f 379/675/78 388/674/78 394/676/77 +f 385/669/80 393/668/80 392/677/79 +o Lever +v 0.250000 0.406250 -6.983253 +v 0.250000 0.501102 -6.995741 +v 0.250000 0.577003 -6.937500 +v 0.250000 0.589491 -6.842648 +v 0.250000 0.531250 -6.766747 +v 0.250000 0.436398 -6.754259 +v 0.250000 0.360497 -6.812500 +v 0.250000 0.348009 -6.907352 +v 0.750000 0.406250 -6.983253 +v 0.750000 0.501102 -6.995741 +v 0.750000 0.577003 -6.937500 +v 0.750000 0.589491 -6.842648 +v 0.750000 0.531250 -6.766747 +v 0.750000 0.436398 -6.754259 +v 0.750000 0.360497 -6.812500 +v 0.750000 0.348009 -6.907352 +v 0.625000 0.445312 -6.915595 +v 0.625000 1.094831 -7.290595 +v 0.665595 0.457031 -6.895298 +v 0.665595 1.106550 -7.270298 +v 0.665595 0.480469 -6.854702 +v 0.665595 1.129988 -7.229702 +v 0.625000 0.492188 -6.834405 +v 0.625000 1.141706 -7.209405 +v 0.584405 0.480469 -6.854702 +v 0.584405 1.129988 -7.229702 +v 0.584405 0.457031 -6.895298 +v 0.584405 1.106550 -7.270298 +vt 0.033480 0.575758 +vt 0.041667 0.565834 +vt 0.049854 0.575758 +vt 0.057696 0.583278 +vt 0.054167 0.585748 +vt 0.050637 0.583278 +vt 0.933013 0.750000 +vt 0.500000 0.000000 +vt 0.066987 0.750000 +vt 0.047456 0.582775 +vt 0.041667 0.585681 +vt 0.035878 0.582775 +vt 0.035878 0.568740 +vt 0.047456 0.568740 +vt 0.050637 0.578338 +vt 0.054167 0.575868 +vt 0.057696 0.578338 +vt 0.500000 1.000000 +vt 0.933013 0.250000 +vt 0.066987 0.250000 +vt -0.000000 0.606061 +vt 0.033333 0.616162 +vt -0.000000 0.616162 +vt -0.000000 0.636364 +vt 0.033333 0.646465 +vt -0.000000 0.646465 +vt -0.000000 0.575758 +vt 0.033333 0.585859 +vt -0.000000 0.585859 +vt -0.000000 0.595960 +vt 0.033333 0.606061 +vt 0.033333 0.626263 +vt -0.000000 0.626263 +vt 0.033333 0.636364 +vt -0.000000 0.565657 +vt 0.033333 0.575758 +vt 0.033333 0.595960 +vt 0.045833 0.646465 +vt 0.041667 0.585859 +vt 0.045833 0.585859 +vt 0.041667 0.646465 +vt 0.037500 0.585859 +vt 0.033333 0.646465 +vt 0.033333 0.585859 +vt 0.058333 0.585859 +vt 0.054167 0.646465 +vt 0.054167 0.585859 +vt 0.050000 0.646465 +vt 0.050000 0.585859 +vt 0.033333 0.565657 +vt 0.037500 0.646465 +vt 0.058333 0.646465 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.8660 -0.5000 +vn 0.0000 -0.8660 0.5000 +vn 0.0000 0.2588 -0.9659 +vn 0.0000 -0.9659 -0.2588 +vn 0.0000 -0.2588 0.9659 +vn 0.0000 0.5000 0.8660 +vn 0.0000 0.9659 0.2588 +vn 0.0000 -0.5000 -0.8660 +vn 0.8660 -0.2500 -0.4330 +vn 0.8660 0.2500 0.4330 +vn -0.8660 0.2500 0.4330 +vn -0.8660 -0.2500 -0.4330 +s off +f 407/680/85 409/681/85 403/682/85 +f 420/683/86 418/684/86 416/685/86 +f 413/686/87 417/687/87 421/688/87 +f 403/682/85 404/689/85 405/690/85 +f 405/690/85 406/691/85 407/680/85 +f 407/680/85 408/692/85 409/681/85 +f 409/681/85 410/693/85 403/682/85 +f 403/682/85 405/690/85 407/680/85 +f 416/685/86 414/694/86 412/695/86 +f 412/695/86 422/696/86 416/685/86 +f 422/696/86 420/683/86 416/685/86 +f 421/688/87 411/697/87 413/686/87 +f 413/686/87 415/698/87 417/687/87 +f 417/687/87 419/699/87 421/688/87 +s 1 +f 397/700/86 404/701/88 396/702/88 +f 402/703/89 409/704/87 401/705/87 +f 400/706/90 407/707/91 399/708/91 +f 398/709/92 405/710/86 397/700/86 +f 396/702/88 403/711/93 395/712/93 +f 395/712/93 410/713/89 402/703/89 +f 401/714/87 408/715/90 400/706/90 +f 399/708/91 406/716/92 398/709/92 +f 412/717/93 413/718/94 411/719/93 +f 414/720/94 415/721/95 413/718/94 +f 415/721/95 418/722/91 417/723/91 +f 417/724/91 420/725/96 419/726/96 +f 419/726/96 422/727/97 421/728/97 +f 421/728/97 412/717/93 411/719/93 +f 397/700/86 405/710/86 404/701/88 +f 402/703/89 410/713/89 409/704/87 +f 400/706/90 408/715/90 407/707/91 +f 398/709/92 406/716/92 405/710/86 +f 396/702/88 404/701/88 403/711/93 +f 395/712/93 403/711/93 410/713/89 +f 401/714/87 409/729/87 408/715/90 +f 399/708/91 407/707/91 406/716/92 +f 412/717/93 414/720/94 413/718/94 +f 414/720/94 416/730/95 415/721/95 +f 415/721/95 416/730/95 418/722/91 +f 417/724/91 418/731/91 420/725/96 +f 419/726/96 420/725/96 422/727/97 +f 421/728/97 422/727/97 412/717/93 +o LockSpring +v 0.000000 0.500000 -6.750000 +v -0.044194 0.481694 -6.750000 +v -0.062500 0.437500 -6.750000 +v -0.044194 0.393306 -6.750000 +v 0.000000 0.375000 -6.750000 +v 0.044194 0.393306 -6.750000 +v 0.062500 0.437500 -6.750000 +v 0.044194 0.481694 -6.750000 +v 0.000000 0.500000 -5.500000 +v -0.044194 0.481694 -5.500000 +v -0.062500 0.437500 -5.500000 +v -0.044194 0.393306 -5.500000 +v 0.000000 0.375000 -5.500000 +v 0.044194 0.393306 -5.500000 +v 0.062500 0.437500 -5.500000 +v 0.044194 0.481694 -5.500000 +v 0.000000 0.562500 -6.750000 +v -0.088388 0.525888 -6.750000 +v -0.125000 0.437500 -6.750000 +v -0.088388 0.349112 -6.750000 +v 0.000000 0.312500 -6.750000 +v 0.088388 0.349112 -6.750000 +v 0.125000 0.437500 -6.750000 +v 0.088388 0.525888 -6.750000 +v 0.000000 0.562500 -5.500000 +v -0.088388 0.525888 -5.500000 +v -0.125000 0.437500 -5.500000 +v -0.088388 0.349112 -5.500000 +v 0.000000 0.312500 -5.500000 +v 0.088388 0.349112 -5.500000 +v 0.125000 0.437500 -5.500000 +v 0.088388 0.525888 -5.500000 +v 0.088388 0.525888 -5.500000 +v 0.125000 0.437500 -5.500000 +v 0.088388 0.349112 -5.500000 +v 0.000000 0.312500 -5.500000 +v -0.088388 0.349112 -5.500000 +v -0.125000 0.437500 -5.500000 +v -0.088388 0.525888 -5.500000 +v 0.000000 0.562500 -5.500000 +v 0.088388 0.525888 -6.750000 +v 0.125000 0.437500 -6.750000 +v 0.088388 0.349112 -6.750000 +v 0.000000 0.312500 -6.750000 +v -0.088388 0.349112 -6.750000 +v -0.125000 0.437500 -6.750000 +v -0.088388 0.525888 -6.750000 +v 0.000000 0.562500 -6.750000 +vt 0.083333 0.919192 +vt -0.000000 0.914141 +vt 0.083333 0.914141 +vt 0.083333 0.949495 +vt -0.000000 0.944444 +vt 0.083333 0.944444 +vt 0.083333 0.939394 +vt -0.000000 0.934343 +vt 0.083333 0.934343 +vt 0.083333 0.924242 +vt -0.000000 0.919192 +vt -0.000000 0.909091 +vt 0.083333 0.909091 +vt -0.000000 0.939394 +vt -0.000000 0.929293 +vt 0.083333 0.929293 +vt -0.000000 0.924242 +vt 0.087500 0.848485 +vt 0.002083 0.838384 +vt 0.085417 0.838384 +vt 0.100000 0.909091 +vt 0.014583 0.898990 +vt 0.097917 0.898990 +vt 0.095833 0.888889 +vt 0.010417 0.878788 +vt 0.093750 0.878788 +vt 0.089583 0.858586 +vt 0.004167 0.848485 +vt 0.000000 0.828283 +vt 0.083333 0.828283 +vt 0.012500 0.888889 +vt 0.008333 0.868687 +vt 0.091667 0.868687 +vt 0.006250 0.858586 +vt 0.006250 0.858586 +vt 0.091667 0.868687 +vt 0.089583 0.858586 +vt 0.008333 0.868687 +vt 0.093750 0.878788 +vt 0.012500 0.888889 +vt 0.097917 0.898990 +vt 0.095833 0.888889 +vt 0.000000 0.828283 +vt 0.085417 0.838384 +vt 0.083333 0.828283 +vt 0.004167 0.848485 +vt 0.087500 0.848485 +vt 0.010417 0.878788 +vt 0.014583 0.898990 +vt 0.100000 0.909091 +vt 0.002083 0.838384 +vt -0.000000 0.949495 +vt 0.016667 0.909091 +vt 0.016667 0.909091 +vn 1.0000 0.0000 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -1.0000 -0.0000 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 1.0000 0.0000 +s 1 +f 429/732/98 436/733/99 428/734/99 +f 427/735/100 434/736/101 426/737/101 +f 425/738/102 432/739/103 424/740/103 +f 430/741/104 437/742/98 429/732/98 +f 428/734/99 435/743/100 427/744/100 +f 426/737/101 433/745/102 425/738/102 +f 424/740/103 431/746/105 423/747/105 +f 423/747/105 438/748/104 430/741/104 +f 445/749/98 452/750/99 444/751/99 +f 443/752/100 450/753/101 442/754/101 +f 441/755/102 448/756/103 440/757/103 +f 446/758/104 453/759/98 445/749/98 +f 444/751/99 451/760/100 443/761/100 +f 442/754/101 449/762/102 441/755/102 +f 440/757/103 447/763/105 439/764/105 +f 439/764/105 454/765/104 446/758/104 +f 455/766/101 470/767/100 463/768/101 +f 462/769/100 469/770/99 470/767/100 +f 460/771/98 467/772/104 468/773/98 +f 458/774/105 465/775/103 466/776/105 +f 456/777/102 463/768/101 464/778/102 +f 461/779/99 468/773/98 469/770/99 +f 459/780/104 466/781/105 467/772/104 +f 457/782/103 464/778/102 465/775/103 +f 429/732/98 437/742/98 436/733/99 +f 427/735/100 435/783/100 434/736/101 +f 425/738/102 433/745/102 432/739/103 +f 430/741/104 438/748/104 437/742/98 +f 428/734/99 436/733/99 435/743/100 +f 426/737/101 434/736/101 433/745/102 +f 424/740/103 432/739/103 431/746/105 +f 423/747/105 431/746/105 438/748/104 +f 445/749/98 453/759/98 452/750/99 +f 443/752/100 451/784/100 450/753/101 +f 441/755/102 449/762/102 448/756/103 +f 446/758/104 454/765/104 453/759/98 +f 444/751/99 452/750/99 451/760/100 +f 442/754/101 450/753/101 449/762/102 +f 440/757/103 448/756/103 447/763/105 +f 439/764/105 447/763/105 454/765/104 +f 455/766/101 462/769/100 470/767/100 +f 462/769/100 461/779/99 469/770/99 +f 460/771/98 459/780/104 467/772/104 +f 458/774/105 457/782/103 465/775/103 +f 456/777/102 455/766/101 463/768/101 +f 461/779/99 460/771/98 468/773/98 +f 459/780/104 458/785/105 466/781/105 +f 457/782/103 456/777/102 464/778/102 +o Gun +v -0.375000 -0.312500 -1.000000 +v 0.375000 -0.312500 -1.000000 +v -0.375000 0.437500 -1.000000 +v 0.375000 0.437500 -1.000000 +v -0.375000 -0.312500 -1.750000 +v 0.375000 -0.312500 -1.750000 +v -0.375000 -0.562500 -2.000000 +v 0.375000 -0.562500 -2.000000 +v -0.375000 0.437500 -2.875000 +v 0.375000 0.437500 -2.875000 +v -0.375000 0.187500 -2.875000 +v 0.375000 0.187500 -2.875000 +v -0.375000 0.187500 -4.875000 +v 0.375000 0.187500 -4.875000 +v -0.375000 0.312500 -4.875000 +v 0.375000 0.312500 -4.875000 +v -0.375000 0.312500 -7.500000 +v 0.375000 0.312500 -7.500000 +v -0.375000 -0.562500 -3.250000 +v 0.375000 -0.562500 -3.250000 +v -0.375000 -0.562500 -4.750000 +v 0.375000 -0.562500 -4.750000 +v -0.375000 -0.562500 -7.500000 +v 0.375000 -0.562500 -7.500000 +v 0.000000 -0.375000 6.000000 +v -0.132582 -0.429918 6.000000 +v -0.187500 -0.562500 6.000000 +v -0.132582 -0.695083 6.000000 +v 0.000000 -0.750000 6.000000 +v 0.132583 -0.695083 6.000000 +v 0.187500 -0.562500 6.000000 +v 0.132583 -0.429918 6.000000 +v 0.000000 -0.375000 -0.750000 +v -0.132582 -0.429918 -0.750000 +v -0.187500 -0.562500 -0.750000 +v -0.132582 -0.695083 -0.750000 +v 0.000000 -0.750000 -0.750000 +v 0.132583 -0.695083 -0.750000 +v 0.187500 -0.562500 -0.750000 +v 0.132583 -0.429918 -0.750000 +v 0.000000 0.500000 6.000000 +v -0.250000 0.433012 6.000000 +v -0.433013 0.250000 6.000000 +v -0.500000 0.000000 6.000000 +v 0.500000 0.000000 6.000000 +v 0.433013 0.250000 6.000000 +v 0.250000 0.433012 6.000000 +v 0.000000 0.500000 6.375000 +v -0.250000 0.433012 6.375000 +v -0.433013 0.250000 6.375000 +v -0.500000 0.000000 6.375000 +v 0.500000 0.000000 6.375000 +v 0.433013 0.250000 6.375000 +v 0.250000 0.433012 6.375000 +v -0.500000 -0.562500 6.000000 +v -0.433013 -0.812500 6.000000 +v -0.250000 -0.995513 6.000000 +v 0.000000 -1.062500 6.000000 +v 0.250000 -0.995513 6.000000 +v 0.433012 -0.812500 6.000000 +v 0.500000 -0.562500 6.000000 +v -0.500000 -0.562500 6.375000 +v -0.433013 -0.812500 6.375000 +v -0.250000 -0.995513 6.375000 +v 0.000000 -1.062500 6.375000 +v 0.250000 -0.995513 6.375000 +v 0.433012 -0.812500 6.375000 +v 0.500000 -0.562500 6.375000 +v -0.433013 0.250000 -0.375000 +v -0.250000 0.433012 -0.375000 +v 0.000000 0.500000 -0.375000 +v 0.250000 0.433012 -0.750000 +v 0.433013 0.250000 -0.750000 +v 0.500000 0.000000 -0.750000 +v -0.500000 0.000000 -0.750000 +v -0.433013 0.250000 -0.750000 +v -0.250000 0.433012 -0.750000 +v 0.000000 0.500000 -0.750000 +v -0.500000 0.000000 -0.375000 +v 0.500000 0.000000 -0.375000 +v 0.433013 0.250000 -0.375000 +v 0.250000 0.433012 -0.375000 +v -0.500000 -0.312500 -0.750000 +v -0.433013 -0.562500 -0.750000 +v -0.250000 -0.745513 -0.750000 +v 0.000000 -0.812500 -0.750000 +v 0.250000 -0.745513 -0.750000 +v 0.433012 -0.562500 -0.750000 +v 0.500000 -0.312500 -0.750000 +v -0.500000 -0.312500 -0.375000 +v 0.500000 -0.312500 -0.375000 +v -0.500000 -0.312500 -0.562500 +v 0.500000 -0.312500 -0.562500 +v 0.000000 -0.812500 -0.562500 +v 0.250000 -0.745513 -0.562500 +v -0.433013 -0.562500 -0.562500 +v 0.433012 -0.562500 -0.562500 +v -0.250000 -0.745513 -0.562500 +v -0.500000 -1.125000 -0.375000 +v -0.433013 -1.375000 -0.375000 +v -0.250000 -1.558013 -0.375000 +v 0.000000 -1.625000 -0.375000 +v 0.250000 -1.558013 -0.375000 +v 0.433012 -1.375000 -0.375000 +v 0.500000 -1.125000 -0.375000 +v -0.500000 -1.125000 -0.562500 +v 0.500000 -1.125000 -0.562500 +v 0.000000 -1.625000 -0.562500 +v 0.250000 -1.558013 -0.562500 +v -0.433013 -1.375000 -0.562500 +v 0.433012 -1.375000 -0.562500 +v -0.250000 -1.558013 -0.562500 +v 0.000000 -1.000000 2.250000 +v -0.088388 -1.036612 2.250000 +v -0.125000 -1.125000 2.250000 +v -0.088388 -1.213388 2.250000 +v 0.000000 -1.250000 2.250000 +v 0.088388 -1.213388 2.250000 +v 0.125000 -1.125000 2.250000 +v 0.088388 -1.036612 2.250000 +v -0.088388 -1.036612 -0.750000 +v 0.000000 -1.000000 -0.750000 +v -0.125000 -1.125000 -0.750000 +v -0.088388 -1.213388 -0.750000 +v 0.000000 -1.250000 -0.750000 +v 0.088388 -1.213388 -0.750000 +v 0.125000 -1.125000 -0.750000 +v 0.088388 -1.036612 -0.750000 +v -0.044194 -1.080806 -0.750000 +v 0.000000 -1.062500 -0.750000 +v -0.062500 -1.125000 -0.750000 +v -0.044194 -1.169194 -0.750000 +v 0.000000 -1.187500 -0.750000 +v 0.044194 -1.169194 -0.750000 +v 0.062500 -1.125000 -0.750000 +v 0.044194 -1.080806 -0.750000 +v -0.044194 -1.080806 -1.125000 +v 0.000000 -1.062500 -1.125000 +v -0.062500 -1.125000 -1.125000 +v -0.044194 -1.169194 -1.125000 +v 0.000000 -1.187500 -1.125000 +v 0.044194 -1.169194 -1.125000 +v 0.062500 -1.125000 -1.125000 +v 0.044194 -1.080806 -1.125000 +v 0.250000 -0.562500 -2.000000 +v 0.250000 -0.562500 -3.250000 +v -0.250000 -0.562500 -2.000000 +v -0.250000 -0.562500 -3.250000 +v -0.250000 -0.312500 -1.000000 +v -0.250000 -0.312500 -1.750000 +v 0.250000 -0.312500 -1.000000 +v 0.250000 -0.312500 -1.750000 +v 0.250000 -0.750000 -3.250000 +v -0.250000 -0.750000 -3.250000 +v 0.250000 -0.562500 -4.750000 +v -0.250000 -0.562500 -4.750000 +v 0.250000 -0.750000 -4.750000 +v -0.250000 -0.750000 -4.750000 +v 0.250000 -0.562500 -7.500000 +v -0.250000 -0.562500 -7.500000 +v 0.250000 -0.750000 -7.500000 +v -0.250000 -0.750000 -7.500000 +v 0.250000 -0.750000 -0.750000 +v -0.250000 -0.750000 -0.750000 +v -0.250000 -0.312500 -0.750000 +v 0.250000 -0.312500 -0.750000 +v -0.375000 -0.250000 -7.375000 +v -0.375000 -0.073223 -7.301777 +v -0.375000 0.000000 -7.125000 +v -0.375000 -0.073223 -6.948223 +v -0.375000 -0.250000 -6.875000 +v -0.375000 -0.426777 -6.948223 +v -0.375000 -0.500000 -7.125000 +v -0.375000 -0.426777 -7.301777 +v -0.437500 -0.073223 -7.301777 +v -0.437500 -0.250000 -7.375000 +v -0.437500 0.000000 -7.125000 +v -0.437500 -0.073223 -6.948223 +v -0.437500 -0.250000 -6.875000 +v -0.437500 -0.426777 -6.948223 +v -0.437500 -0.500000 -7.125000 +v -0.437500 -0.426777 -7.301777 +v 0.250000 0.187500 -2.875000 +v 0.250000 0.187500 -4.875000 +v -0.250000 0.187500 -2.875000 +v -0.250000 0.187500 -4.875000 +v 0.000000 0.218750 -2.875000 +v -0.109375 0.189443 -2.875000 +v -0.189443 0.109375 -2.875000 +v -0.218750 0.000000 -2.875000 +v -0.189443 -0.109375 -2.875000 +v -0.109375 -0.189443 -2.875000 +v 0.000000 -0.218750 -2.875000 +v 0.109375 -0.189443 -2.875000 +v 0.189443 -0.109375 -2.875000 +v 0.218750 0.000000 -2.875000 +v 0.189443 0.109375 -2.875000 +v 0.109375 0.189443 -2.875000 +v 0.250000 -0.125000 -2.875000 +v 0.250000 -0.125000 -4.875000 +v -0.250000 -0.125000 -2.875000 +v -0.250000 -0.125000 -4.875000 +v 0.125000 -0.250000 -2.875000 +v 0.125000 -0.250000 -4.875000 +v -0.125000 -0.250000 -2.875000 +v -0.125000 -0.250000 -4.875000 +v -0.109375 0.189443 -2.375000 +v 0.000000 0.218750 -2.375000 +v -0.189443 0.109375 -2.375000 +v -0.218750 0.000000 -2.375000 +v -0.189443 -0.109375 -2.375000 +v -0.109375 -0.189443 -2.375000 +v 0.000000 -0.218750 -2.375000 +v 0.109375 -0.189443 -2.375000 +v 0.189443 -0.109375 -2.375000 +v 0.218750 0.000000 -2.375000 +v 0.189443 0.109375 -2.375000 +v 0.109375 0.189443 -2.375000 +v -0.312500 0.437500 -3.000000 +v -0.312500 0.349112 -2.963388 +v -0.312500 0.312500 -2.875000 +v -0.312500 0.349112 -2.786612 +v -0.312500 0.437500 -2.750000 +v -0.312500 0.525888 -2.786612 +v -0.312500 0.562500 -2.875000 +v -0.312500 0.525888 -2.963388 +v -0.437500 0.437500 -3.000000 +v -0.437500 0.349112 -2.963388 +v -0.437500 0.312500 -2.875000 +v -0.437500 0.349112 -2.786612 +v -0.437500 0.437500 -2.750000 +v -0.437500 0.525888 -2.786612 +v -0.437500 0.562500 -2.875000 +v -0.437500 0.525888 -2.963388 +v 0.312500 0.437500 -3.000000 +v 0.312500 0.349112 -2.963388 +v 0.312500 0.312500 -2.875000 +v 0.312500 0.349112 -2.786612 +v 0.312500 0.437500 -2.750000 +v 0.312500 0.525888 -2.786612 +v 0.312500 0.562500 -2.875000 +v 0.312500 0.525888 -2.963388 +v 0.437500 0.349112 -2.963388 +v 0.437500 0.437500 -3.000000 +v 0.437500 0.312500 -2.875000 +v 0.437500 0.349112 -2.786612 +v 0.437500 0.437500 -2.750000 +v 0.437500 0.525888 -2.786612 +v 0.437500 0.562500 -2.875000 +v 0.437500 0.525888 -2.963388 +v 0.375000 0.187500 -2.875000 +v 0.375000 0.187500 -4.875000 +v 0.500000 0.187500 -2.875000 +v 0.500000 0.187500 -4.875000 +v 0.375000 0.125000 -2.875000 +v 0.375000 0.125000 -4.937500 +v 0.500000 0.125000 -2.875000 +v 0.500000 0.125000 -4.937500 +v 0.375000 0.312500 -4.875000 +v 0.375000 0.312500 -4.937500 +v 0.500000 0.312500 -4.937500 +v 0.375000 0.312500 -5.000000 +v 0.500000 0.312500 -5.000000 +v 0.500000 0.437500 -4.875000 +v -0.500000 0.187500 -2.875000 +v 0.500000 0.437500 -5.000000 +v -0.500000 0.187500 -4.875000 +v -0.375000 0.187500 -2.875000 +v -0.375000 0.187500 -4.875000 +v -0.500000 0.125000 -2.875000 +v -0.500000 0.125000 -4.937500 +v -0.375000 0.125000 -2.875000 +v -0.375000 0.125000 -4.937500 +v -0.375000 0.312500 -4.875000 +v -0.500000 0.312500 -4.937500 +v -0.375000 0.312500 -4.937500 +v -0.500000 0.312500 -5.000000 +v -0.375000 0.312500 -5.000000 +v -0.500000 0.437500 -4.875000 +v -0.500000 0.437500 -5.000000 +v 0.437500 0.000000 -3.250000 +v 0.437500 0.000000 -4.750000 +v 0.500000 0.000000 -3.250000 +v 0.500000 0.000000 -4.750000 +v 0.437500 0.125000 -4.750000 +v 0.437500 0.125000 -3.250000 +v 0.500000 0.125000 -4.750000 +v 0.500000 0.125000 -3.250000 +v 0.437500 -0.062500 -3.625000 +v 0.437500 -0.062500 -4.375000 +v 0.500000 -0.062500 -3.625000 +v 0.500000 -0.062500 -4.375000 +v 0.437500 0.000000 -4.375000 +v 0.437500 0.000000 -3.625000 +v 0.500000 0.000000 -4.375000 +v 0.500000 0.000000 -3.625000 +v -0.250000 0.437500 -2.000000 +v 0.250000 0.437500 -2.000000 +v -0.250000 0.687500 -2.500000 +v 0.250000 0.687500 -2.500000 +v -0.250000 0.437500 -2.500000 +v 0.250000 0.437500 -2.500000 +v -0.437500 -0.250000 -7.250000 +v -0.437500 -0.161612 -7.213388 +v -0.437500 -0.125000 -7.125000 +v -0.437500 -0.161612 -7.036612 +v -0.437500 -0.250000 -7.000000 +v -0.437500 -0.338388 -7.036612 +v -0.437500 -0.375000 -7.125000 +v -0.437500 -0.338388 -7.213388 +v -0.687500 -0.250000 -7.250000 +v -0.687500 -0.161612 -7.213388 +v -0.687500 -0.125000 -7.125000 +v -0.687500 -0.161612 -7.036612 +v -0.687500 -0.250000 -7.000000 +v -0.687500 -0.338388 -7.036612 +v -0.687500 -0.375000 -7.125000 +v -0.687500 -0.338388 -7.213388 +v -0.937500 -0.750000 -7.250000 +v -0.864277 -0.323223 -7.250000 +v -0.926777 -0.260723 -7.213388 +v -0.952665 -0.234835 -7.125000 +v -0.926777 -0.260723 -7.036612 +v -0.864277 -0.323223 -7.000000 +v -0.801777 -0.385723 -7.036612 +v -0.775888 -0.411612 -7.125000 +v -0.801777 -0.385723 -7.213388 +v -0.937500 -0.500000 -7.250000 +v -1.025888 -0.500000 -7.213388 +v -1.062500 -0.500000 -7.125000 +v -1.025888 -0.500000 -7.036612 +v -0.937500 -0.500000 -7.000000 +v -0.849112 -0.500000 -7.036612 +v -0.812500 -0.500000 -7.125000 +v -0.849112 -0.500000 -7.213388 +v -1.025888 -0.750000 -7.213388 +v -1.062500 -0.750000 -7.125000 +v -1.025888 -0.750000 -7.036612 +v -0.937500 -0.750000 -7.000000 +v -0.849112 -0.750000 -7.036612 +v -0.812500 -0.750000 -7.125000 +v -0.849112 -0.750000 -7.213388 +v -0.937500 -0.750000 -7.312500 +v -1.070083 -0.750000 -7.257583 +v -1.125000 -0.750000 -7.125000 +v -1.070083 -0.750000 -6.992417 +v -0.937500 -0.750000 -6.937500 +v -0.804917 -0.750000 -6.992417 +v -0.750000 -0.750000 -7.125000 +v -0.804917 -0.750000 -7.257583 +v -1.070083 -0.875000 -7.257583 +v -0.937500 -0.875000 -7.312500 +v -1.125000 -0.875000 -7.125000 +v -1.070083 -0.875000 -6.992417 +v -0.937500 -0.875000 -6.937500 +v -0.804917 -0.875000 -6.992417 +v -0.750000 -0.875000 -7.125000 +v -0.804917 -0.875000 -7.257583 +v -0.937500 -1.250000 -7.375000 +v -1.114277 -1.250000 -7.301777 +v -1.187500 -1.250000 -7.125000 +v -1.114277 -1.250000 -6.948223 +v -0.937500 -1.250000 -6.875000 +v -0.760723 -1.250000 -6.948223 +v -0.687500 -1.250000 -7.125000 +v -0.760723 -1.250000 -7.301777 +v -0.937500 -1.875000 -7.375000 +v -1.114277 -1.875000 -7.301777 +v -1.187500 -1.875000 -7.125000 +v -1.114277 -1.875000 -6.948223 +v -0.937500 -1.875000 -6.875000 +v -0.760723 -1.875000 -6.948223 +v -0.687500 -1.875000 -7.125000 +v -0.760723 -1.875000 -7.301777 +v -1.070083 -2.250000 -7.257583 +v -0.937500 -2.250000 -7.312500 +v -1.125000 -2.250000 -7.125000 +v -1.070083 -2.250000 -6.992417 +v -0.937500 -2.250000 -6.937500 +v -0.804917 -2.250000 -6.992417 +v -0.750000 -2.250000 -7.125000 +v -0.804917 -2.250000 -7.257583 +v -1.070083 -2.375000 -7.257583 +v -0.937500 -2.375000 -7.312500 +v -1.125000 -2.375000 -7.125000 +v -1.070083 -2.375000 -6.992417 +v -0.937500 -2.375000 -6.937500 +v -0.804917 -2.375000 -6.992417 +v -0.750000 -2.375000 -7.125000 +v -0.804917 -2.375000 -7.257583 +v -0.937500 -2.375000 -7.250000 +v -1.025888 -2.375000 -7.213388 +v -1.062500 -2.375000 -7.125000 +v -1.025888 -2.375000 -7.036612 +v -0.937500 -2.375000 -7.000000 +v -0.849112 -2.375000 -7.036612 +v -0.812500 -2.375000 -7.125000 +v -0.849112 -2.375000 -7.213388 +v -0.937500 -2.500000 -7.250000 +v -1.025888 -2.500000 -7.213388 +v -1.062500 -2.500000 -7.125000 +v -1.025888 -2.500000 -7.036612 +v -0.937500 -2.500000 -7.000000 +v -0.849112 -2.500000 -7.036612 +v -0.812500 -2.500000 -7.125000 +v -0.849112 -2.500000 -7.213388 +v 0.437500 0.000000 -1.750000 +v 0.437500 0.176777 -1.676777 +v 0.437500 0.250000 -1.500000 +v 0.437500 0.176777 -1.323223 +v 0.437500 -0.000000 -1.250000 +v 0.437500 -0.176777 -1.323223 +v 0.437500 -0.250000 -1.500000 +v 0.437500 -0.176777 -1.676777 +v 0.375000 0.176777 -1.676777 +v 0.375000 0.000000 -1.750000 +v 0.375000 0.250000 -1.500000 +v 0.375000 0.176777 -1.323223 +v 0.375000 -0.000000 -1.250000 +v 0.375000 -0.176777 -1.323223 +v 0.375000 -0.250000 -1.500000 +v 0.375000 -0.176777 -1.676777 +v 0.437500 0.000000 -1.375000 +v 0.437500 0.088388 -1.411612 +v 0.437500 0.125000 -1.500000 +v 0.437500 0.088388 -1.588388 +v 0.437500 0.000000 -1.625000 +v 0.437500 -0.088388 -1.588388 +v 0.437500 -0.125000 -1.500000 +v 0.437500 -0.088388 -1.411612 +v 0.687500 0.000000 -1.375000 +v 0.687500 0.088388 -1.411612 +v 0.687500 0.125000 -1.500000 +v 0.687500 0.088388 -1.588388 +v 0.687500 0.000000 -1.625000 +v 0.687500 -0.088388 -1.588388 +v 0.687500 -0.125000 -1.500000 +v 0.687500 -0.088388 -1.411612 +v 0.864277 -0.073223 -1.375000 +v 0.926776 -0.010723 -1.411612 +v 0.952665 0.015165 -1.500000 +v 0.926776 -0.010723 -1.588388 +v 0.864277 -0.073223 -1.625000 +v 0.801777 -0.135723 -1.588388 +v 0.775888 -0.161612 -1.500000 +v 0.801777 -0.135723 -1.411612 +v -0.250000 0.312500 -6.750000 +v 0.250000 0.312500 -6.750000 +v -0.250000 0.312500 -7.000000 +v 0.250000 0.312500 -7.000000 +v -0.250000 0.625000 -6.937500 +v -0.250000 0.562500 -7.000000 +v -0.250000 0.562500 -6.750000 +v -0.250000 0.625000 -6.812500 +v 0.250000 0.625000 -6.812500 +v 0.250000 0.562500 -6.750000 +v 0.250000 0.562500 -7.000000 +v 0.250000 0.625000 -6.937500 +v -0.375000 -0.062500 -2.500000 +v -0.375000 0.114277 -2.426777 +v -0.375000 0.187500 -2.250000 +v -0.375000 0.114277 -2.073223 +v -0.375000 -0.062500 -2.000000 +v -0.375000 -0.239277 -2.073223 +v -0.375000 -0.312500 -2.250000 +v -0.375000 -0.239277 -2.426777 +v -0.500000 0.114277 -2.426777 +v -0.500000 -0.062500 -2.500000 +v -0.500000 0.187500 -2.250000 +v -0.500000 0.114277 -2.073223 +v -0.500000 -0.062500 -2.000000 +v -0.500000 -0.239277 -2.073223 +v -0.500000 -0.312500 -2.250000 +v -0.500000 -0.239277 -2.426777 +v -0.375000 0.062500 -7.500000 +v 0.375000 0.062500 -7.500000 +v -0.375000 0.062500 -7.812500 +v 0.375000 0.062500 -7.812500 +v -0.375000 -0.250000 -7.812500 +v 0.375000 -0.250000 -7.812500 +v -0.375000 -0.250000 -7.500000 +v 0.375000 -0.250000 -7.500000 +v -0.375000 -0.750000 -7.500000 +v -0.125000 -0.750000 -7.500000 +v -0.375000 -0.750000 -7.625000 +v -0.125000 -0.750000 -7.625000 +v -0.375000 -0.625000 -7.625000 +v -0.375000 -0.625000 -7.500000 +v -0.125000 -0.625000 -7.500000 +v -0.125000 -0.625000 -7.625000 +v -0.375000 -0.250000 -7.937500 +v -0.375000 -0.250000 -7.812500 +v -0.125000 -0.250000 -7.812500 +v -0.125000 -0.250000 -7.937500 +v -0.375000 0.125000 -7.937500 +v -0.375000 0.250000 -7.812500 +v -0.125000 0.250000 -7.812500 +v -0.125000 0.125000 -7.937500 +v 0.125000 -0.750000 -7.500000 +v 0.375000 -0.750000 -7.500000 +v 0.125000 -0.750000 -7.625000 +v 0.375000 -0.750000 -7.625000 +v 0.125000 -0.625000 -7.625000 +v 0.125000 -0.625000 -7.500000 +v 0.375000 -0.625000 -7.500000 +v 0.375000 -0.625000 -7.625000 +v 0.125000 -0.250000 -7.937500 +v 0.125000 -0.250000 -7.812500 +v 0.375000 -0.250000 -7.812500 +v 0.375000 -0.250000 -7.937500 +v 0.125000 0.125000 -7.937500 +v 0.125000 0.250000 -7.812500 +v 0.375000 0.250000 -7.812500 +v 0.375000 0.125000 -7.937500 +v -0.437500 0.000000 -3.250000 +v -0.437500 0.000000 -4.750000 +v -0.500000 0.000000 -3.250000 +v -0.500000 0.000000 -4.750000 +v -0.437500 0.125000 -4.750000 +v -0.437500 0.125000 -3.250000 +v -0.500000 0.125000 -4.750000 +v -0.500000 0.125000 -3.250000 +v -0.437500 -0.062500 -3.625000 +v -0.437500 -0.062500 -4.375000 +v -0.500000 -0.062500 -3.625000 +v -0.500000 -0.062500 -4.375000 +v -0.437500 0.000000 -4.375000 +v -0.437500 0.000000 -3.625000 +v -0.500000 0.000000 -4.375000 +v -0.500000 0.000000 -3.625000 +v 0.864277 -0.073223 -1.687500 +v 0.770527 -0.166973 -1.632583 +v 0.731694 -0.205806 -1.500000 +v 0.770527 -0.166973 -1.367417 +v 0.864277 -0.073223 -1.312500 +v 0.958027 0.020527 -1.367417 +v 0.996859 0.059359 -1.500000 +v 0.958027 0.020527 -1.632583 +v 0.858915 -0.255362 -1.632583 +v 0.952665 -0.161612 -1.687500 +v 0.820083 -0.294194 -1.500000 +v 0.858915 -0.255362 -1.367417 +v 0.952665 -0.161612 -1.312500 +v 1.046415 -0.067862 -1.367417 +v 1.085248 -0.029029 -1.500000 +v 1.046415 -0.067862 -1.632583 +v 1.217830 -0.426777 -1.750000 +v 1.092830 -0.551777 -1.676777 +v 1.041053 -0.603553 -1.500000 +v 1.092830 -0.551777 -1.323223 +v 1.217830 -0.426777 -1.250000 +v 1.342830 -0.301777 -1.323223 +v 1.394607 -0.250000 -1.500000 +v 1.342830 -0.301777 -1.676777 +v 1.659772 -0.868718 -1.750000 +v 1.534772 -0.993718 -1.676777 +v 1.482995 -1.045495 -1.500000 +v 1.534772 -0.993718 -1.323223 +v 1.659772 -0.868718 -1.250000 +v 1.784772 -0.743718 -1.323223 +v 1.836548 -0.691942 -1.500000 +v 1.784772 -0.743718 -1.676777 +v 1.831187 -1.227633 -1.632583 +v 1.924937 -1.133883 -1.687500 +v 1.792354 -1.266466 -1.500000 +v 1.831187 -1.227633 -1.367417 +v 1.924937 -1.133883 -1.312500 +v 2.018687 -1.040133 -1.367417 +v 2.057519 -1.001301 -1.500000 +v 2.018687 -1.040133 -1.632583 +v 1.919575 -1.316022 -1.632583 +v 2.013325 -1.222272 -1.687500 +v 1.880743 -1.354854 -1.500000 +v 1.919575 -1.316022 -1.367417 +v 2.013325 -1.222272 -1.312500 +v 2.107075 -1.128522 -1.367417 +v 2.145908 -1.089689 -1.500000 +v 2.107075 -1.128522 -1.632583 +v 2.013325 -1.222272 -1.625000 +v 1.950825 -1.284772 -1.588388 +v 1.924937 -1.310660 -1.500000 +v 1.950825 -1.284772 -1.411612 +v 2.013325 -1.222272 -1.375000 +v 2.075825 -1.159772 -1.411612 +v 2.101713 -1.133883 -1.500000 +v 2.075825 -1.159772 -1.588388 +v 2.101714 -1.310660 -1.625000 +v 2.039214 -1.373160 -1.588388 +v 2.013325 -1.399049 -1.500000 +v 2.039214 -1.373160 -1.411612 +v 2.101714 -1.310660 -1.375000 +v 2.164214 -1.248160 -1.411612 +v 2.190102 -1.222272 -1.500000 +v 2.164214 -1.248160 -1.588388 +vt 0.179167 0.404040 +vt 0.304167 0.464646 +vt 0.179167 0.464646 +vt 0.712500 0.292929 +vt 0.845833 0.282828 +vt 0.845833 0.292929 +vt 0.712500 0.282828 +vt 0.845833 0.257576 +vt 0.845833 0.181818 +vt 0.712500 0.191919 +vt 0.712500 0.181818 +vt 0.437500 0.393939 +vt 0.612500 0.454545 +vt 0.437500 0.454545 +vt 0.329167 0.272727 +vt 0.245833 0.262626 +vt 0.329167 0.262626 +vt 0.870833 0.126263 +vt 0.687500 0.166667 +vt 0.687500 0.126263 +vt 0.870833 0.166667 +vt 0.687500 0.181818 +vt 0.612500 0.323232 +vt 0.429167 0.313131 +vt 0.612500 0.313131 +vt 0.983257 0.793649 +vt 0.999848 0.828481 +vt 0.933485 0.828481 +vt 0.933485 0.828481 +vt 0.950076 0.793649 +vt 0.999848 0.828481 +vt 0.933384 0.595929 +vt 0.950025 0.560991 +vt 0.999949 0.595929 +vt 0.999949 0.424312 +vt 0.983308 0.454931 +vt 0.966667 0.449526 +vt 0.966667 0.383970 +vt 0.995490 0.404141 +vt 0.937843 0.404141 +vt 0.658333 0.181938 +vt 0.666568 0.191919 +vt 0.658333 0.201900 +vt 0.658333 0.222102 +vt 0.650099 0.212121 +vt 0.658333 0.202140 +vt 0.204236 0.277777 +vt 0.208333 0.272811 +vt 0.212431 0.277777 +vt 0.229167 0.272727 +vt 0.179167 0.262626 +vt 0.229167 0.262626 +vt 0.179167 0.313131 +vt 0.229167 0.323232 +vt 0.179167 0.323232 +vt 0.245833 0.313131 +vt 0.329167 0.323232 +vt 0.245833 0.323232 +vt 0.720833 0.075758 +vt 0.887500 0.035354 +vt 0.887500 0.075758 +vt 0.804167 0.020202 +vt 0.720833 0.035354 +vt 0.675000 0.035354 +vt 0.691667 0.075758 +vt 0.675000 0.075758 +vt 0.129167 0.414141 +vt 0.229167 0.343434 +vt 0.304167 0.404040 +vt 0.229167 0.525253 +vt 0.179167 0.525253 +vt 0.870833 0.111111 +vt 0.687500 0.111111 +vt 0.612500 0.262626 +vt 0.429167 0.272727 +vt 0.429167 0.262626 +vt 0.612500 0.393939 +vt 0.670833 0.404040 +vt 0.670833 0.444444 +vt 0.329167 0.313131 +vt 0.675000 0.166667 +vt 0.675000 0.126263 +vt 0.900000 0.035354 +vt 0.887500 0.090909 +vt 0.804167 0.090909 +vt 0.108420 0.581346 +vt 0.124767 0.601160 +vt 0.108420 0.620974 +vt 0.304167 0.383838 +vt 0.304167 0.484848 +vt 0.437500 0.383838 +vt 0.612500 0.545455 +vt 0.429167 0.545455 +vt 0.437500 0.484848 +vt 0.329167 0.545455 +vt 0.429167 0.323232 +vt 0.845833 0.191919 +vt 0.712500 0.217172 +vt 0.712500 0.257576 +vt 0.845833 0.247475 +vt 0.845833 0.217172 +vt 0.712500 0.227273 +vt 0.845833 0.227273 +vt 0.712500 0.247475 +vt 0.854167 0.217172 +vt 0.875000 0.217172 +vt 0.875000 0.257576 +vt 0.883333 0.267677 +vt 0.710432 0.237374 +vt 0.703162 0.252639 +vt 0.708484 0.246187 +vt 0.704167 0.217172 +vt 0.708484 0.228561 +vt 0.703162 0.222109 +vt 0.695891 0.255000 +vt 0.704167 0.257576 +vt 0.683333 0.257576 +vt 0.695891 0.219747 +vt 0.683333 0.217172 +vt 0.683297 0.246187 +vt 0.688620 0.252639 +vt 0.688620 0.222109 +vt 0.683297 0.228561 +vt 0.683333 0.267677 +vt 0.666667 0.267677 +vt 0.647814 0.294174 +vt 0.660417 0.267715 +vt 0.673020 0.294174 +vt 0.710853 0.755580 +vt 0.716667 0.752661 +vt 0.722480 0.755580 +vt 0.716667 0.752390 +vt 0.710853 0.749471 +vt 0.722480 0.735378 +vt 0.691667 0.732459 +vt 0.699888 0.742424 +vt 0.691667 0.752390 +vt 0.691667 0.772592 +vt 0.683445 0.762626 +vt 0.691667 0.752661 +vt 0.616667 0.565657 +vt 0.750000 0.555556 +vt 0.750000 0.565657 +vt 0.754167 0.550505 +vt 0.616667 0.540404 +vt 0.754167 0.540404 +vt 0.783333 0.585859 +vt 0.770833 0.575758 +vt 0.783333 0.575758 +vt 0.741667 0.646465 +vt 0.733333 0.656566 +vt 0.733333 0.646465 +vt 0.612500 0.555556 +vt 0.616667 0.555556 +vt 0.616667 0.550505 +vt 0.750000 0.575758 +vt 0.754167 0.565657 +vt 0.758333 0.575758 +vt 0.770833 0.585859 +vt 0.766667 0.575758 +vt 0.783333 0.656566 +vt 0.770833 0.646465 +vt 0.783333 0.646465 +vt 0.750000 0.656566 +vt 0.741667 0.585859 +vt 0.758333 0.656566 +vt 0.766667 0.585859 +vt 0.616667 0.676768 +vt 0.750000 0.666667 +vt 0.750000 0.676768 +vt 0.754167 0.691919 +vt 0.616667 0.681818 +vt 0.754167 0.681818 +vt 0.612500 0.666667 +vt 0.616667 0.666667 +vt 0.770833 0.656566 +vt 0.766667 0.646465 +vt 0.754167 0.666667 +vt 0.733333 0.575758 +vt 0.725000 0.707071 +vt 0.625000 0.702020 +vt 0.725000 0.702020 +vt 0.670833 0.727273 +vt 0.620833 0.722222 +vt 0.670833 0.722222 +vt 0.625000 0.707071 +vt 0.616667 0.702020 +vt 0.733333 0.707071 +vt 0.625000 0.717172 +vt 0.725000 0.691919 +vt 0.620833 0.727273 +vt 0.616667 0.722222 +vt 0.675000 0.727273 +vt 0.620833 0.732323 +vt 0.670833 0.717172 +vt 0.645833 0.515152 +vt 0.679167 0.474747 +vt 0.679167 0.515152 +vt 0.645833 0.474747 +vt 0.679167 0.454545 +vt 0.612500 0.454545 +vt 0.645833 0.454545 +vt 0.712500 0.454545 +vt 0.795833 0.651499 +vt 0.783347 0.636364 +vt 0.795833 0.621228 +vt 0.808347 0.636364 +vt 0.820833 0.621228 +vt 0.833320 0.636364 +vt 0.833330 0.641414 +vt 0.841667 0.631309 +vt 0.850003 0.641414 +vt 0.108420 0.620974 +vt 0.092074 0.601160 +vt 0.108420 0.581346 +vt 0.016667 0.545455 +vt 0.000000 0.545455 +vt 0.016667 0.525253 +vt 0.058333 0.525253 +vt 0.075000 0.525253 +vt 0.058333 0.545455 +vt 0.108333 0.540443 +vt 0.124968 0.560606 +vt 0.108333 0.580769 +vt 0.108333 0.540404 +vt 0.158333 0.515152 +vt 0.158333 0.540404 +vt 0.108333 0.515152 +vt 0.158333 0.489899 +vt 0.108333 0.489899 +vt 0.158333 0.464646 +vt 0.087500 0.489899 +vt 0.087500 0.515152 +vt 0.179167 0.515152 +vt 0.175000 0.550505 +vt 0.158333 0.540404 +vt 0.175000 0.540404 +vt 0.175000 0.560606 +vt 0.183333 0.590909 +vt 0.175000 0.590909 +vt 0.158333 0.550505 +vt 0.150000 0.560606 +vt 0.150000 0.550505 +vt 0.183333 0.550505 +vt 0.158333 0.560606 +vt 0.150000 0.590909 +vt 0.158333 0.631313 +vt 0.175000 0.621212 +vt 0.175000 0.631313 +vt 0.158333 0.621212 +vt 0.150000 0.631313 +vt 0.175000 0.550505 +vt 0.158333 0.540404 +vt 0.175000 0.540404 +vt 0.175000 0.560606 +vt 0.183333 0.590909 +vt 0.175000 0.590909 +vt 0.158333 0.550505 +vt 0.150000 0.560606 +vt 0.150000 0.550505 +vt 0.183333 0.550505 +vt 0.158333 0.560606 +vt 0.150000 0.590909 +vt 0.158333 0.631313 +vt 0.175000 0.621212 +vt 0.175000 0.631313 +vt 0.158333 0.621212 +vt 0.150000 0.631313 +vt 0.625000 0.702020 +vt 0.725000 0.707071 +vt 0.725000 0.702020 +vt 0.620833 0.722222 +vt 0.670833 0.727273 +vt 0.670833 0.722222 +vt 0.616667 0.702020 +vt 0.625000 0.707071 +vt 0.733333 0.707071 +vt 0.625000 0.717172 +vt 0.725000 0.691919 +vt 0.616667 0.722222 +vt 0.620833 0.727273 +vt 0.675000 0.727273 +vt 0.620833 0.732323 +vt 0.670833 0.717172 +vt 0.795833 0.651499 +vt 0.783347 0.636364 +vt 0.795833 0.621228 +vt 0.808347 0.636364 +vt 0.820833 0.621228 +vt 0.833320 0.636364 +vt 0.847561 0.634269 +vt 0.850003 0.641414 +vt 0.833330 0.641414 +vt 0.245833 0.272727 +vt 0.870833 0.181818 +vt 0.966667 0.913948 +vt 0.950076 0.908559 +vt 0.937931 0.893838 +vt 0.933485 0.873728 +vt 0.995403 0.893838 +vt 0.999848 0.873728 +vt 0.937931 0.808371 +vt 0.950076 0.793649 +vt 0.966667 0.788261 +vt 0.995403 0.808371 +vt 0.983257 0.908559 +vt 0.995403 0.893838 +vt 0.983257 0.908559 +vt 0.937931 0.893838 +vt 0.966667 0.913948 +vt 0.950076 0.908559 +vt 0.933485 0.873728 +vt 0.999848 0.873728 +vt 0.937931 0.808371 +vt 0.966667 0.788261 +vt 0.983257 0.793649 +vt 0.995403 0.808371 +vt 0.995490 0.641313 +vt 0.983308 0.656080 +vt 0.937843 0.641313 +vt 0.966667 0.661484 +vt 0.950025 0.656080 +vt 0.933384 0.621142 +vt 0.999949 0.621142 +vt 0.937843 0.575758 +vt 0.966667 0.555587 +vt 0.983308 0.560991 +vt 0.995490 0.575758 +vt 0.995490 0.404141 +vt 0.999949 0.489868 +vt 0.995490 0.469697 +vt 0.966667 0.383970 +vt 0.983308 0.389375 +vt 0.937843 0.404141 +vt 0.950025 0.389375 +vt 0.933384 0.489868 +vt 0.933384 0.424312 +vt 0.937843 0.469697 +vt 0.950025 0.454931 +vt 0.983308 0.550019 +vt 0.966667 0.555424 +vt 0.950025 0.550019 +vt 0.937843 0.535253 +vt 0.933384 0.515082 +vt 0.933384 0.489868 +vt 0.933384 0.424312 +vt 0.999949 0.489868 +vt 0.999949 0.424312 +vt 0.999949 0.515082 +vt 0.995490 0.535253 +vt 0.983308 0.389375 +vt 0.950025 0.389375 +vt 0.652511 0.198977 +vt 0.650099 0.191919 +vt 0.652511 0.184862 +vt 0.664156 0.184862 +vt 0.664156 0.198977 +vt 0.666568 0.212121 +vt 0.664156 0.219179 +vt 0.652511 0.219179 +vt 0.652511 0.205064 +vt 0.664156 0.205064 +vt 0.211231 0.281289 +vt 0.208333 0.282744 +vt 0.205436 0.281289 +vt 0.205436 0.274266 +vt 0.211231 0.274266 +vt 0.179167 0.272727 +vt 0.229167 0.313131 +vt 0.720833 -0.000000 +vt 0.737500 -0.000000 +vt 0.787500 -0.000000 +vt 0.887500 0.020202 +vt 0.691667 0.035354 +vt 0.129167 0.464646 +vt 0.129167 0.454545 +vt 0.129167 0.404040 +vt 0.179167 0.343434 +vt 0.612500 0.272727 +vt 0.670833 0.454545 +vt 0.670833 0.393939 +vt 0.683333 0.404040 +vt 0.683333 0.444444 +vt 0.900000 0.075758 +vt 0.787500 0.111111 +vt 0.737500 0.111111 +vt 0.720833 0.111111 +vt 0.096861 0.615170 +vt 0.092074 0.601160 +vt 0.096861 0.587149 +vt 0.119979 0.587149 +vt 0.119979 0.615170 +vt 0.245833 0.545455 +vt 0.437500 0.474747 +vt 0.612500 0.474747 +vt 0.854167 0.257576 +vt 0.875000 0.207071 +vt 0.883333 0.207071 +vt 0.875000 0.267677 +vt 0.666667 0.207071 +vt 0.681349 0.237374 +vt 0.683333 0.207071 +vt 0.667693 0.300630 +vt 0.660417 0.302993 +vt 0.653141 0.300630 +vt 0.645864 0.285354 +vt 0.647814 0.276534 +vt 0.653141 0.270078 +vt 0.667693 0.270078 +vt 0.673020 0.276534 +vt 0.674969 0.285354 +vt 0.724888 0.762626 +vt 0.722480 0.769673 +vt 0.716667 0.772592 +vt 0.710853 0.769673 +vt 0.708445 0.762626 +vt 0.708445 0.742424 +vt 0.710853 0.735378 +vt 0.716667 0.732459 +vt 0.724888 0.742424 +vt 0.722480 0.749471 +vt 0.683445 0.742424 +vt 0.685853 0.735378 +vt 0.697480 0.735378 +vt 0.697480 0.749471 +vt 0.685853 0.749471 +vt 0.697480 0.755580 +vt 0.699888 0.762626 +vt 0.697480 0.769673 +vt 0.685853 0.769673 +vt 0.685853 0.755580 +vt 0.612500 0.565657 +vt 0.758333 0.565657 +vt 0.766667 0.656566 +vt 0.616667 0.691919 +vt 0.612500 0.676768 +vt 0.758333 0.666667 +vt 0.733333 0.585859 +vt 0.616667 0.707071 +vt 0.733333 0.702020 +vt 0.725000 0.717172 +vt 0.625000 0.691919 +vt 0.616667 0.727273 +vt 0.675000 0.722222 +vt 0.670833 0.732323 +vt 0.620833 0.717172 +vt 0.804663 0.625661 +vt 0.808320 0.636364 +vt 0.804663 0.647066 +vt 0.787004 0.647066 +vt 0.787004 0.625661 +vt 0.829663 0.647066 +vt 0.820833 0.651499 +vt 0.812004 0.647066 +vt 0.812004 0.625661 +vt 0.829663 0.625661 +vt 0.847561 0.648559 +vt 0.841667 0.651519 +vt 0.835772 0.648559 +vt 0.835772 0.634269 +vt 0.847561 0.634269 +vt 0.124767 0.601160 +vt 0.119979 0.615170 +vt 0.096861 0.615170 +vt 0.096861 0.587149 +vt 0.119979 0.587149 +vt 0.000000 0.525253 +vt 0.020833 0.530303 +vt 0.020833 0.540404 +vt 0.075000 0.545455 +vt 0.054167 0.540404 +vt 0.054167 0.530303 +vt 0.096571 0.574863 +vt 0.091699 0.560606 +vt 0.096571 0.546349 +vt 0.120095 0.546349 +vt 0.120095 0.574863 +vt 0.108333 0.464646 +vt 0.179167 0.489899 +vt 0.183333 0.560606 +vt 0.158333 0.590909 +vt 0.183333 0.631313 +vt 0.183333 0.560606 +vt 0.158333 0.590909 +vt 0.183333 0.631313 +vt 0.616667 0.707071 +vt 0.733333 0.702020 +vt 0.725000 0.717172 +vt 0.625000 0.691919 +vt 0.616667 0.727273 +vt 0.675000 0.722222 +vt 0.670833 0.732323 +vt 0.620833 0.717172 +vt 0.804663 0.625661 +vt 0.808320 0.636364 +vt 0.804663 0.647066 +vt 0.787004 0.647066 +vt 0.787004 0.625661 +vt 0.829663 0.647066 +vt 0.820833 0.651499 +vt 0.812004 0.647066 +vt 0.812004 0.625661 +vt 0.829663 0.625661 +vt 0.847561 0.648559 +vt 0.841667 0.651519 +vt 0.835772 0.648559 +vt 0.835772 0.634269 +vt 0.841667 0.631309 +vt 0.450000 0.202020 +vt 0.000000 0.212121 +vt 0.000000 0.202020 +vt 0.450000 0.181818 +vt 0.000000 0.191919 +vt 0.000000 0.181818 +vt 0.450000 0.242424 +vt 0.000000 0.252525 +vt 0.000000 0.242424 +vt 0.450000 0.222222 +vt 0.000000 0.232323 +vt 0.000000 0.222222 +vt 0.450000 0.212121 +vt 0.450000 0.191919 +vt 0.450000 0.252525 +vt 0.000000 0.262626 +vt 0.450000 0.232323 +vt 0.908333 0.858586 +vt 0.883333 0.838384 +vt 0.908333 0.838384 +vt 0.908333 0.757576 +vt 0.883333 0.737374 +vt 0.908333 0.737374 +vt 0.933333 0.656566 +vt 0.933333 0.681818 +vt 0.920833 0.681818 +vt 0.908333 0.777778 +vt 0.883333 0.757576 +vt 0.908333 0.818182 +vt 0.883333 0.797980 +vt 0.908333 0.797980 +vt 0.883333 0.777778 +vt 0.883333 0.818182 +vt 0.908333 0.691919 +vt 0.883333 0.904040 +vt 0.883333 0.858586 +vt 0.908333 0.651515 +vt 0.883333 0.631313 +vt 0.908333 0.631313 +vt 0.908333 0.924242 +vt 0.908333 0.904040 +vt 0.908333 0.671717 +vt 0.883333 0.651515 +vt 0.908333 0.944444 +vt 0.883333 0.924242 +vt 0.883333 0.671717 +vt 0.908333 0.964646 +vt 0.883333 0.944444 +vt 0.204167 0.297980 +vt 0.179167 0.303030 +vt 0.179167 0.297980 +vt 0.933333 0.555556 +vt 0.908333 0.535354 +vt 0.933333 0.535354 +vt 0.908333 0.636364 +vt 0.933333 0.636364 +vt 0.933333 0.575758 +vt 0.908333 0.555556 +vt 0.920833 0.510101 +vt 0.908333 0.444444 +vt 0.920833 0.444444 +vt 0.933333 0.616162 +vt 0.908333 0.595960 +vt 0.933333 0.595960 +vt 0.908333 0.575758 +vt 0.908333 0.616162 +vt 0.908333 0.510101 +vt 0.908333 0.681818 +vt 0.920833 0.747475 +vt 0.908333 0.747475 +vt 0.933333 0.742424 +vt 0.920833 0.722222 +vt 0.933333 0.722222 +vt 0.933333 0.510101 +vt 0.920833 0.489899 +vt 0.933333 0.489899 +vt 0.920833 0.702020 +vt 0.933333 0.702020 +vt 0.920833 0.469697 +vt 0.933333 0.469697 +vt 0.920833 0.449495 +vt 0.933333 0.449495 +vt 0.204167 0.282828 +vt 0.179167 0.287879 +vt 0.179167 0.282828 +vt 0.920833 0.404040 +vt 0.908333 0.383838 +vt 0.920833 0.383838 +vt 0.920833 0.767677 +vt 0.920833 0.424242 +vt 0.908333 0.404040 +vt 0.920833 0.787879 +vt 0.908333 0.767677 +vt 0.908333 0.424242 +vt 0.920833 0.808081 +vt 0.908333 0.787879 +vt 0.450000 0.252525 +vt 0.650000 0.262626 +vt 0.450000 0.262626 +vt 0.450000 0.232323 +vt 0.650000 0.242424 +vt 0.450000 0.242424 +vt 0.450000 0.202020 +vt 0.650000 0.212121 +vt 0.450000 0.212121 +vt 0.450000 0.181818 +vt 0.650000 0.191919 +vt 0.450000 0.191919 +vt 0.650000 0.252525 +vt 0.450000 0.222222 +vt 0.650000 0.232323 +vt 0.650000 0.222222 +vt 0.650000 0.202020 +vt 0.204167 0.272727 +vt 0.179167 0.277778 +vt 0.179167 0.272727 +vt 0.204167 0.303030 +vt 0.179167 0.308081 +vt 0.204167 0.292929 +vt 0.179167 0.292929 +vt 0.204167 0.287879 +vt 0.204167 0.277778 +vt 0.204167 0.308081 +vt 0.179167 0.313131 +vt 0.087500 0.555556 +vt 0.091667 0.570707 +vt 0.087500 0.570707 +vt 0.087500 0.646465 +vt 0.091667 0.661616 +vt 0.087500 0.661616 +vt 0.087500 0.616162 +vt 0.091667 0.631313 +vt 0.087500 0.631313 +vt 0.087500 0.585859 +vt 0.091667 0.601010 +vt 0.087500 0.601010 +vt 0.087500 0.540404 +vt 0.091667 0.555556 +vt 0.091667 0.646465 +vt 0.091667 0.616162 +vt 0.091667 0.585859 +vt 0.645833 0.323232 +vt 0.612500 0.313131 +vt 0.645833 0.313131 +vt 0.645833 0.373737 +vt 0.612500 0.363636 +vt 0.645833 0.363636 +vt 0.645833 0.282828 +vt 0.612500 0.272727 +vt 0.645833 0.272727 +vt 0.645833 0.333333 +vt 0.612500 0.323232 +vt 0.612500 0.303030 +vt 0.645833 0.303030 +vt 0.612500 0.353535 +vt 0.645833 0.353535 +vt 0.612500 0.262626 +vt 0.645833 0.262626 +vt 0.612500 0.292929 +vt 0.645833 0.292929 +vt 0.612500 0.343434 +vt 0.645833 0.343434 +vt 0.645833 0.383838 +vt 0.612500 0.373737 +vt 0.612500 0.282828 +vt 0.612500 0.333333 +vt 0.700000 0.742424 +vt 0.708333 0.752525 +vt 0.700000 0.752525 +vt 0.708333 0.762626 +vt 0.700000 0.762626 +vt 0.700000 0.772727 +vt 0.708333 0.782828 +vt 0.700000 0.782828 +vt 0.700000 0.792929 +vt 0.708333 0.803030 +vt 0.700000 0.803030 +vt 0.700000 0.732323 +vt 0.708333 0.742424 +vt 0.708333 0.772727 +vt 0.708333 0.792929 +vt 0.708333 0.813131 +vt 0.700000 0.813131 +vt 0.683333 0.762626 +vt 0.675000 0.752525 +vt 0.683333 0.752525 +vt 0.683333 0.782828 +vt 0.675000 0.772727 +vt 0.683333 0.772727 +vt 0.683333 0.803030 +vt 0.675000 0.792929 +vt 0.683333 0.792929 +vt 0.683333 0.742424 +vt 0.675000 0.732323 +vt 0.683333 0.732323 +vt 0.675000 0.762626 +vt 0.675000 0.782828 +vt 0.683333 0.813131 +vt 0.675000 0.803030 +vt 0.675000 0.742424 +vt 0.133333 0.888889 +vt 0.141667 0.909091 +vt 0.133333 0.909091 +vt 0.125000 0.888889 +vt 0.125000 0.909091 +vt 0.175000 0.888889 +vt 0.183333 0.909091 +vt 0.175000 0.909091 +vt 0.158333 0.888889 +vt 0.166667 0.909091 +vt 0.158333 0.909091 +vt 0.141667 0.888889 +vt 0.150000 0.909091 +vt 0.116667 0.888889 +vt 0.116667 0.909091 +vt 0.166667 0.888889 +vt 0.150000 0.888889 +vt 0.166667 0.883838 +vt 0.158333 0.868687 +vt 0.166667 0.868687 +vt 0.141667 0.868687 +vt 0.150000 0.868687 +vt 0.125000 0.878788 +vt 0.116667 0.868687 +vt 0.125000 0.868687 +vt 0.175000 0.878788 +vt 0.175000 0.868687 +vt 0.133333 0.883838 +vt 0.133333 0.868687 +vt 0.183333 0.868687 +vt 0.183333 0.873737 +vt 0.116667 0.863636 +vt 0.125000 0.858586 +vt 0.175000 0.858586 +vt 0.150000 0.848485 +vt 0.158333 0.848485 +vt 0.141667 0.848485 +vt 0.133333 0.853535 +vt 0.183333 0.863636 +vt 0.166667 0.853535 +vt 0.166667 0.848485 +vt 0.158333 0.828283 +vt 0.166667 0.828283 +vt 0.141667 0.828283 +vt 0.150000 0.828283 +vt 0.125000 0.848485 +vt 0.116667 0.828283 +vt 0.125000 0.828283 +vt 0.175000 0.828283 +vt 0.175000 0.848485 +vt 0.133333 0.848485 +vt 0.133333 0.828283 +vt 0.183333 0.828283 +vt 0.183333 0.848485 +vt 0.820833 0.621212 +vt 0.829167 0.611111 +vt 0.829167 0.621212 +vt 0.795833 0.621212 +vt 0.804167 0.611111 +vt 0.804167 0.621212 +vt 0.870833 0.621212 +vt 0.879167 0.611111 +vt 0.879167 0.621212 +vt 0.833333 0.621212 +vt 0.841667 0.611111 +vt 0.841667 0.621212 +vt 0.808333 0.621212 +vt 0.816667 0.611111 +vt 0.816667 0.621212 +vt 0.783333 0.621212 +vt 0.791667 0.611111 +vt 0.791667 0.621212 +vt 0.858333 0.621212 +vt 0.866667 0.611111 +vt 0.866667 0.621212 +vt 0.845833 0.621212 +vt 0.854167 0.611111 +vt 0.854167 0.621212 +vt 0.858333 0.580808 +vt 0.858333 0.611111 +vt 0.870833 0.580808 +vt 0.870833 0.611111 +vt 0.783333 0.580808 +vt 0.783333 0.611111 +vt 0.795833 0.580808 +vt 0.795833 0.611111 +vt 0.808333 0.580808 +vt 0.808333 0.611111 +vt 0.820833 0.580808 +vt 0.820833 0.611111 +vt 0.833333 0.580808 +vt 0.833333 0.611111 +vt 0.845833 0.611111 +vt 0.808333 0.530303 +vt 0.883333 0.530303 +vt 0.883333 0.580808 +vt 0.845833 0.530303 +vt 0.845833 0.580808 +vt 0.820833 0.530303 +vt 0.795833 0.530303 +vt 0.870833 0.530303 +vt 0.858333 0.530303 +vt 0.833333 0.530303 +vt 0.833333 0.500000 +vt 0.820833 0.500000 +vt 0.816667 0.500000 +vt 0.795833 0.500000 +vt 0.783333 0.500000 +vt 0.783333 0.530303 +vt 0.870833 0.500000 +vt 0.858333 0.500000 +vt 0.845833 0.500000 +vt 0.808333 0.500000 +vt 0.816667 0.489899 +vt 0.791667 0.489899 +vt 0.791667 0.500000 +vt 0.866667 0.489899 +vt 0.866667 0.500000 +vt 0.854167 0.489899 +vt 0.854167 0.500000 +vt 0.829167 0.489899 +vt 0.829167 0.500000 +vt 0.804167 0.489899 +vt 0.804167 0.500000 +vt 0.879167 0.489899 +vt 0.879167 0.500000 +vt 0.841667 0.489899 +vt 0.841667 0.500000 +vt 0.858333 0.621212 +vt 0.866667 0.631313 +vt 0.858333 0.631313 +vt 0.841667 0.621212 +vt 0.850000 0.631313 +vt 0.841667 0.631313 +vt 0.891667 0.621212 +vt 0.900000 0.631313 +vt 0.891667 0.631313 +vt 0.866667 0.621212 +vt 0.875000 0.631313 +vt 0.850000 0.621212 +vt 0.833333 0.621212 +vt 0.833333 0.631313 +vt 0.883333 0.621212 +vt 0.883333 0.631313 +vt 0.875000 0.621212 +vt 0.087500 0.555556 +vt 0.091667 0.570707 +vt 0.087500 0.570707 +vt 0.087500 0.646465 +vt 0.091667 0.661616 +vt 0.087500 0.661616 +vt 0.087500 0.616162 +vt 0.091667 0.631313 +vt 0.087500 0.631313 +vt 0.087500 0.585859 +vt 0.091667 0.601010 +vt 0.087500 0.601010 +vt 0.087500 0.540404 +vt 0.091667 0.555556 +vt 0.091667 0.646465 +vt 0.091667 0.616162 +vt 0.091667 0.585859 +vt 0.133333 0.888889 +vt 0.141667 0.909091 +vt 0.133333 0.909091 +vt 0.125000 0.888889 +vt 0.125000 0.909091 +vt 0.175000 0.888889 +vt 0.183333 0.909091 +vt 0.175000 0.909091 +vt 0.158333 0.888889 +vt 0.166667 0.909091 +vt 0.158333 0.909091 +vt 0.150000 0.888889 +vt 0.150000 0.909091 +vt 0.116667 0.888889 +vt 0.116667 0.909091 +vt 0.166667 0.888889 +vt 0.166667 0.883838 +vt 0.158333 0.868687 +vt 0.166667 0.868687 +vt 0.141667 0.888889 +vt 0.150000 0.868687 +vt 0.125000 0.878788 +vt 0.116667 0.868687 +vt 0.125000 0.868687 +vt 0.175000 0.868687 +vt 0.175000 0.878788 +vt 0.133333 0.883838 +vt 0.141667 0.868687 +vt 0.133333 0.868687 +vt 0.183333 0.868687 +vt 0.183333 0.873737 +vt 0.054167 0.525253 +vt 0.020833 0.505050 +vt 0.054167 0.505050 +vt 0.020833 0.545455 +vt 0.054167 0.565657 +vt 0.020833 0.565657 +vt 0.054167 0.545455 +vt 0.020833 0.525253 +vt 0.125000 0.555556 +vt 0.133333 0.570707 +vt 0.125000 0.570707 +vt 0.125000 0.646465 +vt 0.133333 0.661616 +vt 0.125000 0.661616 +vt 0.125000 0.616162 +vt 0.133333 0.631313 +vt 0.125000 0.631313 +vt 0.125000 0.585859 +vt 0.133333 0.601010 +vt 0.125000 0.601010 +vt 0.125000 0.540404 +vt 0.133333 0.555556 +vt 0.133333 0.646465 +vt 0.133333 0.616162 +vt 0.133333 0.585859 +vt 0.133333 0.560606 +vt 0.133333 0.550505 +vt 0.133333 0.590909 +vt 0.133333 0.631313 +vt 0.133333 0.560606 +vt 0.133333 0.550505 +vt 0.133333 0.590909 +vt 0.133333 0.631313 +vt 0.829167 0.621212 +vt 0.820833 0.611111 +vt 0.829167 0.611111 +vt 0.804167 0.621212 +vt 0.795833 0.611111 +vt 0.804167 0.611111 +vt 0.879167 0.621212 +vt 0.870833 0.611111 +vt 0.879167 0.611111 +vt 0.833333 0.621212 +vt 0.841667 0.611111 +vt 0.841667 0.621212 +vt 0.816667 0.621212 +vt 0.808333 0.611111 +vt 0.816667 0.611111 +vt 0.783333 0.621212 +vt 0.791667 0.611111 +vt 0.791667 0.621212 +vt 0.858333 0.621212 +vt 0.866667 0.611111 +vt 0.866667 0.621212 +vt 0.854167 0.621212 +vt 0.845833 0.611111 +vt 0.854167 0.611111 +vt 0.858333 0.580808 +vt 0.858333 0.611111 +vt 0.870833 0.580808 +vt 0.783333 0.580808 +vt 0.783333 0.611111 +vt 0.795833 0.580808 +vt 0.820833 0.580808 +vt 0.833333 0.611111 +vt 0.845833 0.580808 +vt 0.808333 0.530303 +vt 0.808333 0.580808 +vt 0.883333 0.530303 +vt 0.883333 0.580808 +vt 0.833333 0.580808 +vt 0.845833 0.530303 +vt 0.820833 0.530303 +vt 0.795833 0.530303 +vt 0.870833 0.530303 +vt 0.858333 0.530303 +vt 0.833333 0.530303 +vt 0.841667 0.500000 +vt 0.820833 0.500000 +vt 0.816667 0.500000 +vt 0.804167 0.500000 +vt 0.783333 0.500000 +vt 0.783333 0.530303 +vt 0.870833 0.500000 +vt 0.858333 0.500000 +vt 0.845833 0.500000 +vt 0.808333 0.489899 +vt 0.816667 0.489899 +vt 0.791667 0.500000 +vt 0.783333 0.489899 +vt 0.791667 0.489899 +vt 0.866667 0.489899 +vt 0.866667 0.500000 +vt 0.854167 0.489899 +vt 0.854167 0.500000 +vt 0.829167 0.489899 +vt 0.829167 0.500000 +vt 0.795833 0.489899 +vt 0.804167 0.489899 +vt 0.879167 0.500000 +vt 0.870833 0.489899 +vt 0.879167 0.489899 +vt 0.833333 0.489899 +vt 0.841667 0.489899 +vt 0.858333 0.631313 +vt 0.866667 0.621212 +vt 0.866667 0.631313 +vt 0.841667 0.621212 +vt 0.850000 0.631313 +vt 0.841667 0.631313 +vt 0.891667 0.621212 +vt 0.900000 0.631313 +vt 0.891667 0.631313 +vt 0.875000 0.621212 +vt 0.875000 0.631313 +vt 0.850000 0.621212 +vt 0.833333 0.631313 +vt 0.883333 0.631313 +vt 0.450000 0.262626 +vt 0.908333 0.656566 +vt 0.883333 0.691919 +vt 0.883333 0.964646 +vt 0.920833 0.742424 +vt 0.908333 0.808081 +vt 0.650000 0.181818 +vt 0.204167 0.313131 +vt 0.091667 0.540404 +vt 0.612500 0.383838 +vt 0.708333 0.732323 +vt 0.675000 0.813131 +vt 0.183333 0.888889 +vt 0.116667 0.873737 +vt 0.116667 0.848485 +vt 0.808333 0.489899 +vt 0.783333 0.489899 +vt 0.858333 0.489899 +vt 0.845833 0.489899 +vt 0.820833 0.489899 +vt 0.795833 0.489899 +vt 0.870833 0.489899 +vt 0.833333 0.489899 +vt 0.900000 0.621212 +vt 0.091667 0.540404 +vt 0.183333 0.888889 +vt 0.116667 0.873737 +vt 0.133333 0.540404 +vt 0.820833 0.621212 +vt 0.795833 0.621212 +vt 0.870833 0.621212 +vt 0.808333 0.621212 +vt 0.845833 0.621212 +vt 0.833333 0.500000 +vt 0.808333 0.500000 +vt 0.795833 0.500000 +vt 0.858333 0.489899 +vt 0.845833 0.489899 +vt 0.820833 0.489899 +vt 0.858333 0.621212 +vt 0.900000 0.621212 +vt 0.833333 0.621212 +vt 0.883333 0.621212 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.7071 0.7071 +vn -1.0000 0.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 0.8944 0.4472 +vn 0.0000 0.7071 -0.7071 +vn 0.7071 -0.7071 -0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.9914 0.1305 0.0000 +vn -0.8660 0.5000 0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.9914 0.1305 0.0000 +vn -0.9914 -0.1305 0.0000 +vn -0.9979 -0.0651 0.0000 +vn 0.5000 0.8660 0.0000 +vn -0.5000 0.8660 0.0000 +vn 0.9914 -0.1305 0.0000 +vn 0.5000 -0.8660 0.0000 +vn -0.8660 -0.5000 0.0000 +vn 0.8660 -0.5000 0.0000 +vn -0.5000 -0.8660 0.0000 +vn 0.9979 -0.0651 0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +vn -0.0196 0.0473 -0.9987 +vn 0.1363 -0.6737 -0.7263 +vn 0.1363 -0.6737 0.7263 +vn -0.1448 0.7194 0.6794 +vn -0.1448 0.7194 -0.6794 +vn 0.2049 -0.9788 0.0000 +vn -0.0196 0.0473 0.9987 +vn -0.1866 0.9824 -0.0000 +vn -0.5294 0.5294 0.6630 +vn -0.0671 0.0671 0.9955 +vn -0.5294 0.5294 -0.6630 +vn 0.4617 -0.4617 -0.7574 +vn 0.4617 -0.4617 0.7574 +vn -0.0671 0.0671 -0.9955 +vn 0.9788 -0.2049 -0.0000 +vn 0.6737 -0.1363 -0.7263 +vn 0.6737 -0.1363 0.7263 +vn -0.9824 0.1866 -0.0000 +vn -0.7194 0.1448 0.6794 +vn -0.7194 0.1448 -0.6794 +vn -0.0473 0.0196 -0.9987 +vn -0.0473 0.0196 0.9987 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.0000 0.0809 -0.9967 +vn -0.6975 0.1644 -0.6975 +vn -0.0000 0.1644 -0.9864 +vn -0.7048 0.0809 -0.7048 +vn -0.9864 0.1644 0.0000 +vn -0.9967 0.0809 -0.0000 +vn -0.6975 0.1644 0.6975 +vn -0.7048 0.0809 0.7048 +vn 0.0000 0.1644 0.9864 +vn -0.0000 0.0809 0.9967 +vn 0.6975 0.1644 0.6975 +vn 0.7048 0.0809 0.7048 +vn 0.9864 0.1644 0.0000 +vn 0.9967 0.0809 0.0000 +vn 0.6975 0.1644 -0.6975 +vn 0.0000 -0.0809 0.9967 +vn -0.9967 -0.0809 0.0000 +vn 0.7048 -0.0809 -0.7048 +vn 0.7048 0.0809 -0.7048 +vn 0.7048 -0.0809 0.7048 +vn -0.7048 -0.0809 0.7048 +vn -0.7048 -0.0809 -0.7048 +vn -0.0000 -0.0809 -0.9967 +vn 0.9967 -0.0809 -0.0000 +vn 0.9864 -0.1644 -0.0000 +vn 0.6975 -0.1644 0.6975 +vn -0.6975 -0.1644 0.6975 +vn -0.9864 -0.1644 -0.0000 +vn -0.6975 -0.1644 -0.6975 +vn 0.0000 -0.1644 -0.9864 +vn 0.6975 -0.1644 -0.6975 +vn 0.0196 0.0473 0.9987 +vn -0.1363 -0.6737 0.7263 +vn -0.1363 -0.6737 -0.7263 +vn 0.1448 0.7194 -0.6794 +vn 0.1866 0.9824 -0.0000 +vn -0.2049 -0.9788 0.0000 +vn 0.0196 0.0473 -0.9987 +vn 0.2962 0.7150 -0.6333 +vn 0.0393 0.0948 -0.9947 +vn 0.1448 0.7194 0.6794 +vn 0.3827 0.9239 -0.0000 +vn -0.3827 -0.9239 0.0000 +vn -0.2611 -0.6303 0.7311 +vn -0.2611 -0.6303 -0.7311 +vn 0.2962 0.7150 0.6333 +vn 0.0393 0.0948 0.9947 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 0.3827 0.9239 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 -0.3404 -0.9403 +vn 0.0000 0.3404 0.9403 +vn 0.5000 0.5000 0.7071 +vn -0.5000 -0.5000 0.7071 +vn -0.5000 -0.5000 -0.7071 +vn 0.5000 0.5000 -0.7071 +vn -0.0572 0.0572 -0.9967 +vn -0.6094 -0.3769 -0.6975 +vn -0.1162 0.1162 -0.9864 +vn -0.5555 -0.4412 -0.7048 +vn -0.8137 -0.5812 -0.0000 +vn -0.7620 -0.6476 0.0000 +vn -0.6094 -0.3769 0.6975 +vn -0.5555 -0.4412 0.7048 +vn -0.1162 0.1162 0.9864 +vn 0.4412 0.5555 0.7048 +vn 0.3769 0.6094 0.6975 +vn 0.5812 0.8137 0.0000 +vn 0.4412 0.5555 -0.7048 +vn 0.3769 0.6094 -0.6975 +vn 0.0572 -0.0572 0.9967 +vn -0.0572 0.0572 0.9967 +vn -0.6476 -0.7620 0.0000 +vn 0.6476 0.7620 0.0000 +vn 0.5555 0.4412 -0.7048 +vn 0.5555 0.4412 0.7048 +vn -0.4412 -0.5555 0.7048 +vn -0.4412 -0.5555 -0.7048 +vn 0.0572 -0.0572 -0.9967 +vn 0.7620 0.6476 -0.0000 +vn 0.6094 0.3769 -0.6975 +vn 0.6094 0.3769 0.6975 +vn 0.1162 -0.1162 0.9864 +vn -0.5812 -0.8137 0.0000 +vn -0.3769 -0.6094 -0.6975 +vn 0.1162 -0.1162 -0.9864 +vn -0.0000 -0.1644 0.9864 +vn 0.8137 0.5812 0.0000 +vn -0.3769 -0.6094 0.6975 +s off +f 474/786/106 479/787/106 473/788/106 +f 481/789/106 656/790/106 483/791/106 +f 655/792/107 672/793/107 656/790/107 +f 484/794/106 653/795/106 482/796/106 +f 486/797/106 487/798/106 485/799/106 +f 618/800/108 477/801/108 489/802/108 +f 632/803/108 627/804/108 628/805/108 +f 631/806/107 625/807/107 627/804/107 +f 494/808/108 625/809/108 629/810/108 +f 536/811/109 538/812/109 532/813/109 +f 531/814/110 529/815/110 525/816/110 +f 559/817/110 557/818/110 553/819/110 +f 576/820/110 568/821/110 564/822/110 +f 572/823/109 574/824/109 570/825/109 +f 587/826/109 589/827/109 583/828/109 +f 592/829/110 597/830/110 595/831/110 +f 613/832/110 611/833/110 609/834/110 +f 620/835/108 471/836/108 475/837/108 +f 477/801/111 620/835/111 475/837/111 +f 621/838/108 476/839/108 472/840/108 +f 615/841/108 490/842/108 478/843/108 +f 476/839/111 615/841/111 478/843/111 +f 633/844/108 624/845/108 623/846/108 +f 617/847/112 624/845/112 634/848/112 +f 619/849/106 636/850/106 621/851/106 +f 621/852/109 474/786/109 473/788/109 +f 474/786/107 476/853/107 480/854/107 +f 473/788/112 475/855/112 471/856/112 +f 630/857/112 628/805/112 626/858/112 +f 493/859/108 626/860/108 491/861/108 +f 488/862/110 629/863/110 630/864/110 +f 616/865/108 618/800/108 626/860/108 +f 628/805/109 625/866/109 626/867/109 +f 618/868/110 623/846/110 624/845/110 +f 636/850/109 634/848/109 633/844/109 +f 623/846/107 616/869/107 615/870/107 +f 651/871/112 649/872/112 647/873/112 +f 482/874/107 480/854/107 476/853/107 +f 475/855/112 479/787/112 481/875/112 +f 488/862/107 486/797/107 484/876/107 +f 493/877/112 491/878/112 483/879/112 +f 483/879/112 489/880/112 481/875/112 +f 484/876/107 490/842/107 492/881/107 +f 654/882/112 669/883/112 653/795/112 +f 671/884/113 676/885/113 672/793/113 +f 670/886/114 673/887/114 669/883/114 +f 674/888/106 675/889/106 673/887/106 +f 670/890/109 654/891/109 656/892/109 +f 485/893/109 656/892/109 654/891/109 +f 663/894/110 673/887/110 675/889/110 +f 675/889/110 661/895/110 662/896/110 +f 669/897/110 664/898/110 665/899/110 +f 660/900/110 671/901/110 655/902/110 +f 666/903/110 653/904/110 669/897/110 +f 658/905/110 659/906/110 655/902/110 +f 667/907/110 668/908/110 653/904/110 +f 655/902/110 481/909/110 479/910/110 +f 687/911/110 683/912/110 679/913/110 +f 692/914/107 691/915/107 690/916/107 +f 703/917/112 704/918/112 700/919/112 +f 707/920/112 709/921/112 711/922/112 +f 719/923/107 717/924/107 715/925/107 +f 721/926/106 724/927/106 722/928/106 +f 728/929/108 725/930/108 726/931/108 +f 726/932/110 731/933/110 728/934/110 +f 744/935/109 737/936/109 739/937/109 +f 721/926/109 727/938/109 723/939/109 +f 724/927/107 727/940/107 728/929/107 +f 734/941/107 731/942/107 736/943/107 +f 730/944/108 733/945/108 731/933/108 +f 741/946/110 746/947/110 743/948/110 +f 749/949/109 729/950/109 734/941/109 +f 750/951/110 736/943/110 732/952/110 +f 735/953/106 739/954/106 737/955/106 +f 750/951/106 734/941/106 736/943/106 +f 743/956/108 740/957/108 741/958/108 +f 735/953/109 742/959/109 738/960/109 +f 745/961/108 748/962/108 746/947/108 +f 737/955/112 740/957/112 735/953/112 +f 745/963/112 737/955/112 749/949/112 +f 729/950/109 724/964/109 734/941/109 +f 754/965/108 751/966/108 752/967/108 +f 762/968/108 759/969/108 760/970/108 +f 753/971/109 756/972/109 751/966/109 +f 752/967/110 757/973/110 754/965/110 +f 754/965/107 758/974/107 753/971/107 +f 751/966/112 755/975/112 752/967/112 +f 761/976/109 764/977/109 759/969/109 +f 760/970/110 765/978/110 762/968/110 +f 762/968/107 766/979/107 761/976/107 +f 759/969/112 763/980/112 760/970/112 +f 768/981/115 769/982/115 767/983/115 +f 770/984/110 771/985/110 769/982/110 +f 770/984/107 768/986/107 772/987/107 +f 769/982/112 771/985/112 767/988/112 +f 817/989/106 819/990/106 813/991/106 +f 859/992/108 857/993/108 855/994/108 +f 875/995/108 873/996/108 871/997/108 +f 879/998/107 881/999/107 883/1000/107 +f 926/1001/107 918/1002/107 927/1003/107 +f 922/1004/112 919/1005/112 923/1006/112 +f 943/1007/112 941/1008/112 939/1009/112 +f 946/1010/106 947/1011/106 945/1012/106 +f 948/1013/110 949/1014/110 947/1011/110 +f 950/1015/108 951/1016/108 949/1014/108 +f 952/1017/107 948/1013/107 946/1018/107 +f 949/1014/112 945/1019/112 947/1011/112 +f 955/1020/108 954/1021/108 953/1022/108 +f 957/1023/112 962/1024/112 961/1025/112 +f 956/1026/107 959/1027/107 954/1028/107 +f 953/1029/112 957/1023/112 955/1020/112 +f 960/1030/107 963/1031/107 959/1027/107 +f 967/1032/116 965/1033/116 966/1034/116 +f 963/1031/107 968/1035/107 967/1036/107 +f 962/1024/112 965/1033/112 961/1025/112 +f 971/1037/108 970/1038/108 969/1039/108 +f 973/1040/112 978/1041/112 977/1042/112 +f 972/1043/107 975/1044/107 970/1045/107 +f 969/1046/112 973/1040/112 971/1037/112 +f 976/1047/107 979/1048/107 975/1044/107 +f 983/1049/116 981/1050/116 982/1051/116 +f 979/1048/107 984/1052/107 983/1053/107 +f 978/1041/112 981/1050/112 977/1042/112 +f 985/1054/108 988/1055/108 986/1056/108 +f 993/1057/108 996/1058/108 994/1059/108 +f 990/1060/109 987/1061/109 985/1054/109 +f 991/1062/110 986/1056/110 988/1055/110 +f 992/1063/112 988/1055/112 987/1061/112 +f 989/1064/107 985/1054/107 986/1056/107 +f 998/1065/109 995/1066/109 993/1057/109 +f 999/1067/110 994/1059/110 996/1058/110 +f 1000/1068/112 996/1058/112 995/1066/112 +f 997/1069/107 993/1057/107 994/1059/107 +f 1005/1070/114 1007/1071/114 1001/1072/114 +f 1047/1073/117 1045/1074/117 1043/1075/117 +f 1060/1076/117 1059/1077/117 1063/1078/117 +f 474/786/106 480/854/106 479/787/106 +f 481/789/106 655/792/106 656/790/106 +f 655/792/107 671/884/107 672/793/107 +f 484/794/106 654/882/106 653/795/106 +f 486/797/106 488/862/106 487/798/106 +f 618/800/108 617/1079/108 477/801/108 +f 632/803/108 631/806/108 627/804/108 +f 631/806/107 629/1080/107 625/807/107 +f 494/808/108 492/881/108 625/809/108 +f 518/1081/109 519/1082/109 520/1083/109 +f 520/1083/109 521/1084/109 523/1085/109 +f 521/1084/109 532/813/109 522/1086/109 +f 523/1085/109 521/1084/109 522/1086/109 +f 532/813/109 533/1087/109 534/1088/109 +f 534/1088/109 535/1089/109 532/813/109 +f 535/1089/109 536/811/109 532/813/109 +f 536/811/109 537/1090/109 538/812/109 +f 538/812/109 522/1086/109 532/813/109 +f 523/1085/109 524/1091/109 518/1081/109 +f 518/1081/109 520/1083/109 523/1085/109 +f 513/1092/110 512/1093/110 516/1094/110 +f 512/1093/110 511/1095/110 516/1094/110 +f 511/1095/110 517/1096/110 516/1094/110 +f 516/1094/110 515/1097/110 514/1098/110 +f 515/1097/110 531/814/110 525/816/110 +f 531/814/110 530/1099/110 529/815/110 +f 529/815/110 528/1100/110 525/816/110 +f 528/1100/110 527/1101/110 525/816/110 +f 527/1101/110 526/1102/110 525/816/110 +f 525/816/110 514/1098/110 515/1097/110 +f 514/1098/110 513/1092/110 516/1094/110 +f 546/1103/110 547/1104/110 543/1105/110 +f 547/1104/110 548/1106/110 543/1105/110 +f 548/1106/110 542/1107/110 543/1105/110 +f 543/1105/110 544/1108/110 545/1109/110 +f 544/1108/110 559/817/110 553/819/110 +f 559/817/110 558/1110/110 557/818/110 +f 557/818/110 556/1111/110 553/819/110 +f 556/1111/110 555/1112/110 553/819/110 +f 555/1112/110 554/1113/110 553/819/110 +f 553/819/110 545/1109/110 544/1108/110 +f 545/1109/110 546/1103/110 543/1105/110 +f 580/1114/110 576/820/110 564/822/110 +f 576/820/110 562/1115/110 566/1116/110 +f 576/820/110 566/1116/110 568/821/110 +f 578/1117/110 582/1118/110 564/822/110 +f 582/1118/110 580/1114/110 564/822/110 +f 581/1119/110 579/1120/110 564/822/110 +f 579/1120/110 578/1117/110 564/822/110 +f 563/1121/110 577/1122/110 567/1123/110 +f 577/1122/110 581/1119/110 564/822/110 +f 567/1123/110 577/1122/110 565/1124/110 +f 565/1124/110 577/1122/110 564/822/110 +f 552/1125/109 541/1126/109 540/1127/109 +f 540/1127/109 539/1128/109 549/1129/109 +f 560/1130/109 569/1131/109 561/1132/109 +f 569/1131/109 570/825/109 575/1133/109 +f 561/1132/109 569/1131/109 575/1133/109 +f 540/1127/109 549/1129/109 550/1134/109 +f 549/1129/109 560/1130/109 561/1132/109 +f 551/1135/109 552/1125/109 540/1127/109 +f 561/1132/109 550/1134/109 549/1129/109 +f 550/1134/109 551/1135/109 540/1127/109 +f 574/824/109 575/1133/109 570/825/109 +f 572/823/109 573/1136/109 574/824/109 +f 570/825/109 571/1137/109 572/823/109 +f 583/828/109 584/1138/109 585/1139/109 +f 585/1139/109 586/1140/109 587/826/109 +f 587/826/109 588/1141/109 589/827/109 +f 589/827/109 590/1142/109 583/828/109 +f 583/828/109 585/1139/109 587/826/109 +f 593/1143/110 591/1144/110 592/829/110 +f 592/829/110 598/1145/110 597/830/110 +f 597/830/110 596/1146/110 595/831/110 +f 595/831/110 594/1147/110 593/1143/110 +f 593/1143/110 592/829/110 595/831/110 +f 609/834/110 607/1148/110 608/1149/110 +f 608/1149/110 614/1150/110 613/832/110 +f 613/832/110 612/1151/110 611/833/110 +f 611/833/110 610/1152/110 609/834/110 +f 609/834/110 608/1149/110 613/832/110 +f 620/835/108 619/1153/108 471/836/108 +f 477/801/111 617/1079/111 620/835/111 +f 621/838/108 622/1154/108 476/839/108 +f 615/841/108 616/865/108 490/842/108 +f 476/839/111 622/1154/111 615/841/111 +f 633/844/108 634/848/108 624/845/108 +f 635/1155/112 619/1156/112 634/848/112 +f 619/1156/112 620/1157/112 634/848/112 +f 634/848/112 620/1157/112 617/847/112 +f 617/847/112 618/1158/112 624/845/112 +f 619/849/106 635/1159/106 636/850/106 +f 473/788/109 471/1160/109 619/1161/109 +f 621/852/109 472/1162/109 474/786/109 +f 473/788/109 619/1161/109 621/852/109 +f 474/786/107 472/1163/107 476/853/107 +f 473/788/112 479/787/112 475/855/112 +f 630/857/112 632/803/112 628/805/112 +f 493/859/108 630/1164/108 626/860/108 +f 493/1165/110 487/798/110 630/864/110 +f 487/798/110 488/862/110 630/864/110 +f 488/862/110 494/1166/110 629/863/110 +f 629/863/110 631/1167/110 632/1168/110 +f 629/863/110 632/1168/110 630/864/110 +f 618/800/108 489/802/108 491/861/108 +f 626/860/108 625/809/108 616/865/108 +f 625/809/108 492/881/108 616/865/108 +f 618/800/108 491/861/108 626/860/108 +f 492/881/108 490/842/108 616/865/108 +f 628/805/109 627/804/109 625/866/109 +f 618/868/110 616/1169/110 623/846/110 +f 636/850/109 635/1159/109 634/848/109 +f 615/870/107 622/1170/107 633/844/107 +f 622/1170/107 621/1171/107 633/844/107 +f 621/1171/107 636/1172/107 633/844/107 +f 633/844/107 623/846/107 615/870/107 +f 647/873/112 645/1173/112 646/1174/112 +f 646/1174/112 652/1175/112 651/871/112 +f 651/871/112 650/1176/112 649/872/112 +f 649/872/112 648/1177/112 647/873/112 +f 647/873/112 646/1174/112 651/871/112 +f 476/853/107 478/843/107 482/874/107 +f 478/843/107 490/842/107 482/874/107 +f 489/880/112 477/1178/112 481/875/112 +f 477/1178/112 475/855/112 481/875/112 +f 484/876/107 492/881/107 494/808/107 +f 494/808/107 488/862/107 484/876/107 +f 483/879/112 485/1179/112 487/1180/112 +f 487/1180/112 493/877/112 483/879/112 +f 483/879/112 491/878/112 489/880/112 +f 484/876/107 482/874/107 490/842/107 +f 654/882/112 670/886/112 669/883/112 +f 671/884/113 675/889/113 676/885/113 +f 670/886/114 674/888/114 673/887/114 +f 674/888/106 676/885/106 675/889/106 +f 656/892/109 672/1181/109 670/890/109 +f 672/1181/109 676/885/109 670/890/109 +f 676/885/109 674/888/109 670/890/109 +f 484/1182/109 486/1183/109 654/891/109 +f 486/1183/109 485/893/109 654/891/109 +f 485/893/109 483/1184/109 656/892/109 +f 675/889/110 662/896/110 663/894/110 +f 663/894/110 664/898/110 673/887/110 +f 675/889/110 671/901/110 661/895/110 +f 669/897/110 673/887/110 664/898/110 +f 660/900/110 661/895/110 671/901/110 +f 655/902/110 659/906/110 660/900/110 +f 666/903/110 667/907/110 653/904/110 +f 669/897/110 665/899/110 666/903/110 +f 479/910/110 480/1185/110 657/1186/110 +f 480/1185/110 482/1187/110 653/904/110 +f 657/1186/110 480/1185/110 668/908/110 +f 653/904/110 668/908/110 480/1185/110 +f 657/1186/110 658/905/110 479/910/110 +f 658/905/110 655/902/110 479/910/110 +f 679/913/110 677/1188/110 678/1189/110 +f 678/1189/110 688/1190/110 679/913/110 +f 688/1190/110 687/911/110 679/913/110 +f 687/911/110 686/1191/110 683/912/110 +f 686/1191/110 685/1192/110 683/912/110 +f 685/1192/110 684/1193/110 683/912/110 +f 683/912/110 682/1194/110 681/1195/110 +f 681/1195/110 680/1196/110 683/912/110 +f 680/1196/110 679/913/110 683/912/110 +f 690/916/107 689/1197/107 696/1198/107 +f 696/1198/107 695/1199/107 690/916/107 +f 695/1199/107 694/1200/107 690/916/107 +f 694/1200/107 693/1201/107 690/916/107 +f 693/1201/107 692/914/107 690/916/107 +f 704/918/112 697/1202/112 700/919/112 +f 697/1202/112 698/1203/112 700/919/112 +f 698/1203/112 699/1204/112 700/919/112 +f 700/919/112 701/1205/112 702/1206/112 +f 702/1206/112 703/917/112 700/919/112 +f 705/1207/112 706/1208/112 707/920/112 +f 707/920/112 708/1209/112 709/921/112 +f 709/921/112 710/1210/112 711/922/112 +f 711/922/112 712/1211/112 705/1207/112 +f 705/1207/112 707/920/112 711/922/112 +f 715/925/107 713/1212/107 714/1213/107 +f 714/1213/107 720/1214/107 719/923/107 +f 719/923/107 718/1215/107 717/924/107 +f 717/924/107 716/1216/107 715/925/107 +f 715/925/107 714/1213/107 719/923/107 +f 721/926/106 723/939/106 724/927/106 +f 728/929/108 727/940/108 725/930/108 +f 726/932/110 730/944/110 731/933/110 +f 744/935/109 749/949/109 737/936/109 +f 721/926/109 725/1217/109 727/938/109 +f 724/927/107 723/939/107 727/940/107 +f 734/941/107 724/927/107 731/942/107 +f 724/927/107 728/929/107 731/942/107 +f 731/942/107 733/1218/107 736/943/107 +f 730/944/108 732/952/108 733/945/108 +f 741/946/110 745/961/110 746/947/110 +f 749/949/109 744/935/109 729/950/109 +f 733/945/110 732/952/110 736/943/110 +f 732/952/110 748/962/110 750/951/110 +f 748/962/110 747/1219/110 750/951/110 +f 735/953/106 738/960/106 739/954/106 +f 750/951/106 749/949/106 734/941/106 +f 743/956/108 742/1220/108 740/957/108 +f 735/953/109 740/1221/109 742/959/109 +f 745/961/108 747/1219/108 748/962/108 +f 737/955/112 741/958/112 740/957/112 +f 745/963/112 741/958/112 737/955/112 +f 749/949/112 750/951/112 745/963/112 +f 750/951/112 747/1222/112 745/963/112 +f 729/950/109 722/1223/109 724/964/109 +f 754/965/108 753/971/108 751/966/108 +f 762/968/108 761/976/108 759/969/108 +f 753/971/109 758/1224/109 756/972/109 +f 752/967/110 755/1225/110 757/973/110 +f 754/965/107 757/1226/107 758/974/107 +f 751/966/112 756/1227/112 755/975/112 +f 761/976/109 766/1228/109 764/977/109 +f 760/970/110 763/1229/110 765/978/110 +f 762/968/107 765/1230/107 766/979/107 +f 759/969/112 764/1231/112 763/980/112 +f 768/981/115 770/984/115 769/982/115 +f 770/984/110 772/987/110 771/985/110 +f 813/991/106 814/1232/106 815/1233/106 +f 815/1233/106 816/1234/106 817/989/106 +f 817/989/106 818/1235/106 819/990/106 +f 819/990/106 820/1236/106 813/991/106 +f 813/991/106 815/1233/106 817/989/106 +f 855/994/108 853/1237/108 854/1238/108 +f 854/1238/108 860/1239/108 859/992/108 +f 859/992/108 858/1240/108 857/993/108 +f 857/993/108 856/1241/108 855/994/108 +f 855/994/108 854/1238/108 859/992/108 +f 871/997/108 870/1242/108 869/1243/108 +f 869/1243/108 876/1244/108 875/995/108 +f 875/995/108 874/1245/108 873/996/108 +f 873/996/108 872/1246/108 871/997/108 +f 871/997/108 869/1243/108 875/995/108 +f 877/1247/107 878/1248/107 879/998/107 +f 879/998/107 880/1249/107 881/999/107 +f 881/999/107 882/1250/107 883/1000/107 +f 883/1000/107 884/1251/107 877/1247/107 +f 877/1247/107 879/998/107 883/1000/107 +f 918/1002/107 920/1252/107 927/1003/107 +f 927/1003/107 928/1253/107 925/1254/107 +f 925/1254/107 926/1001/107 927/1003/107 +f 919/1005/112 917/1255/112 923/1006/112 +f 923/1006/112 924/1256/112 921/1257/112 +f 921/1257/112 922/1004/112 923/1006/112 +f 939/1009/112 937/1258/112 938/1259/112 +f 938/1259/112 944/1260/112 943/1007/112 +f 943/1007/112 942/1261/112 941/1008/112 +f 941/1008/112 940/1262/112 939/1009/112 +f 939/1009/112 938/1259/112 943/1007/112 +f 946/1010/106 948/1013/106 947/1011/106 +f 948/1013/110 950/1015/110 949/1014/110 +f 950/1015/108 952/1263/108 951/1016/108 +f 952/1017/107 950/1015/107 948/1013/107 +f 949/1014/112 951/1264/112 945/1019/112 +f 955/1020/108 956/1026/108 954/1021/108 +f 957/1023/112 958/1265/112 962/1024/112 +f 956/1026/107 960/1030/107 959/1027/107 +f 953/1029/112 958/1265/112 957/1023/112 +f 960/1030/107 964/1266/107 963/1031/107 +f 967/1032/116 968/1035/116 965/1033/116 +f 963/1031/107 964/1266/107 968/1035/107 +f 962/1024/112 966/1267/112 965/1033/112 +f 971/1037/108 972/1043/108 970/1038/108 +f 973/1040/112 974/1268/112 978/1041/112 +f 972/1043/107 976/1047/107 975/1044/107 +f 969/1046/112 974/1268/112 973/1040/112 +f 976/1047/107 980/1269/107 979/1048/107 +f 983/1049/116 984/1052/116 981/1050/116 +f 979/1048/107 980/1269/107 984/1052/107 +f 978/1041/112 982/1270/112 981/1050/112 +f 985/1054/108 987/1061/108 988/1055/108 +f 993/1057/108 995/1066/108 996/1058/108 +f 990/1060/109 992/1271/109 987/1061/109 +f 991/1062/110 989/1272/110 986/1056/110 +f 992/1063/112 991/1273/112 988/1055/112 +f 989/1064/107 990/1274/107 985/1054/107 +f 998/1065/109 1000/1275/109 995/1066/109 +f 999/1067/110 997/1276/110 994/1059/110 +f 1000/1068/112 999/1277/112 996/1058/112 +f 997/1069/107 998/1278/107 993/1057/107 +f 1001/1072/114 1002/1279/114 1003/1280/114 +f 1003/1280/114 1004/1281/114 1005/1070/114 +f 1005/1070/114 1006/1282/114 1007/1071/114 +f 1007/1071/114 1008/1283/114 1001/1072/114 +f 1001/1072/114 1003/1280/114 1005/1070/114 +f 1043/1075/117 1041/1284/117 1042/1285/117 +f 1042/1285/117 1048/1286/117 1047/1073/117 +f 1047/1073/117 1046/1287/117 1045/1074/117 +f 1045/1074/117 1044/1288/117 1043/1075/117 +f 1043/1075/117 1042/1285/117 1047/1073/117 +f 1059/1077/117 1058/1289/117 1063/1078/117 +f 1058/1289/117 1057/1290/117 1063/1078/117 +f 1057/1290/117 1064/1291/117 1063/1078/117 +f 1063/1078/117 1062/1292/117 1061/1293/117 +f 1061/1293/117 1060/1076/117 1063/1078/117 +s 1 +f 509/1294/107 502/1295/113 501/1296/107 +f 507/1297/108 500/1298/117 499/1299/108 +f 505/1300/112 498/1301/118 497/1302/112 +f 503/1303/106 496/1304/114 495/1305/106 +f 510/1306/113 495/1305/106 502/1295/113 +f 508/1307/117 501/1296/107 500/1298/117 +f 506/1308/118 499/1309/108 498/1301/118 +f 504/1310/114 497/1302/112 496/1304/114 +f 514/1311/119 520/1312/120 513/1313/120 +f 516/1314/121 522/1315/122 515/1316/122 +f 545/1317/119 553/1318/123 562/1319/124 +f 517/1320/125 523/1321/121 516/1314/121 +f 512/1322/126 518/1323/106 511/1324/106 +f 511/1324/106 524/1325/125 517/1320/125 +f 513/1313/120 519/1326/126 512/1322/126 +f 522/1315/122 531/1327/127 515/1316/122 +f 514/1311/119 532/1328/123 521/1329/119 +f 529/1330/128 535/1331/108 528/1332/108 +f 526/1333/129 532/1328/123 525/1334/123 +f 530/1335/130 536/1336/128 529/1330/128 +f 527/1337/131 533/1338/129 526/1333/129 +f 531/1327/127 537/1339/130 530/1335/130 +f 528/1340/108 534/1341/131 527/1337/131 +f 607/1342/114 601/1343/112 599/1344/114 +f 543/1345/121 550/1346/122 544/1347/122 +f 545/1317/119 539/1348/120 546/1349/120 +f 542/1350/125 551/1351/121 543/1345/121 +f 563/1352/132 575/1353/127 577/1354/127 +f 547/1355/126 541/1356/106 548/1357/106 +f 548/1357/106 552/1358/125 542/1350/125 +f 546/1349/120 540/1359/126 547/1355/126 +f 550/1346/122 561/1360/107 563/1352/132 +f 560/1361/112 576/1362/123 569/1363/123 +f 556/1364/108 568/1365/131 555/1366/131 +f 559/1367/127 567/1368/130 558/1369/130 +f 555/1366/131 566/1370/129 554/1371/129 +f 558/1369/130 565/1372/128 557/1373/128 +f 554/1371/129 562/1319/124 553/1318/123 +f 557/1373/128 564/1374/108 556/1375/108 +f 613/1376/107 606/1377/113 605/1378/107 +f 579/1379/128 572/1380/108 578/1381/108 +f 580/1382/129 569/1363/123 576/1362/123 +f 581/1383/130 573/1384/128 579/1379/128 +f 582/1385/131 570/1386/129 580/1382/129 +f 577/1354/127 574/1387/130 581/1383/130 +f 578/1388/108 571/1389/131 582/1385/131 +f 586/1390/118 595/1391/108 587/1392/108 +f 584/1393/114 593/1394/112 585/1395/112 +f 589/1396/107 598/1397/113 590/1398/113 +f 587/1399/108 596/1400/117 588/1401/117 +f 585/1395/112 594/1402/118 586/1390/118 +f 583/1403/106 591/1404/114 584/1393/114 +f 590/1398/113 592/1405/106 583/1403/106 +f 588/1401/117 597/1406/107 589/1396/107 +f 611/1407/108 604/1408/117 603/1409/108 +f 609/1410/112 602/1411/118 601/1343/112 +f 608/1412/106 599/1344/114 600/1413/106 +f 614/1414/113 600/1413/106 606/1377/113 +f 612/1415/117 605/1378/107 604/1408/117 +f 610/1416/118 603/1417/108 602/1411/118 +f 644/1418/133 646/1419/110 637/1420/110 +f 642/1421/111 651/1422/108 643/1423/108 +f 640/1424/134 649/1425/109 641/1426/109 +f 638/1427/116 647/1428/106 639/1429/106 +f 643/1430/108 652/1431/133 644/1418/133 +f 641/1426/109 650/1432/111 642/1421/111 +f 639/1429/106 648/1433/134 640/1424/134 +f 637/1420/110 645/1434/116 638/1427/116 +f 657/1435/108 677/1436/128 658/1437/128 +f 664/1438/126 685/1439/120 665/1440/120 +f 661/1441/121 682/1442/125 662/1443/125 +f 668/1444/131 678/1445/108 657/1435/108 +f 658/1437/128 679/1446/130 659/1447/130 +f 665/1440/120 686/1448/112 666/1449/112 +f 662/1443/125 683/1450/106 663/1451/106 +f 659/1447/130 680/1452/107 660/1453/107 +f 666/1449/112 687/1454/129 667/1455/129 +f 663/1456/106 684/1457/126 664/1438/126 +f 660/1453/107 681/1458/121 661/1441/121 +f 667/1455/129 688/1459/131 668/1444/131 +f 690/1460/133 697/1461/110 689/1462/110 +f 689/1462/110 704/1463/116 696/1464/116 +f 695/1465/106 702/1466/134 694/1467/134 +f 693/1468/109 700/1469/111 692/1470/111 +f 691/1471/108 698/1472/133 690/1460/133 +f 696/1464/116 703/1473/106 695/1465/106 +f 694/1467/134 701/1474/109 693/1468/109 +f 692/1470/111 699/1475/108 691/1476/108 +f 712/1477/116 714/1478/110 705/1479/110 +f 710/1480/134 719/1481/106 711/1482/106 +f 708/1483/111 717/1484/109 709/1485/109 +f 706/1486/133 715/1487/108 707/1488/108 +f 711/1482/106 720/1489/116 712/1477/116 +f 709/1485/109 718/1490/134 710/1480/134 +f 707/1491/108 716/1492/111 708/1483/111 +f 705/1479/110 713/1493/133 706/1486/133 +f 781/1494/135 774/1495/116 773/1496/110 +f 788/1497/136 773/1496/110 780/1498/133 +f 786/1499/137 779/1500/108 778/1501/111 +f 784/1502/138 777/1503/109 776/1504/134 +f 782/1505/139 775/1506/106 774/1495/116 +f 787/1507/140 780/1498/133 779/1508/108 +f 785/1509/141 778/1501/111 777/1503/109 +f 783/1510/142 776/1504/134 775/1506/106 +f 785/1511/141 793/1512/143 794/1513/144 +f 783/1510/142 791/1514/145 792/1515/114 +f 788/1516/136 796/1517/117 797/1518/146 +f 786/1519/137 794/1513/144 795/1520/147 +f 783/1510/142 793/1512/143 784/1502/138 +f 781/1521/135 791/1514/145 782/1505/139 +f 788/1516/136 790/1522/148 781/1521/135 +f 786/1519/137 796/1523/117 787/1524/140 +f 797/1518/146 804/1525/149 805/1526/150 +f 794/1513/144 803/1527/151 795/1520/147 +f 793/1512/143 800/1528/152 801/1529/153 +f 790/1522/148 799/1530/154 791/1514/145 +f 797/1518/146 798/1531/155 790/1522/148 +f 796/1523/117 803/1527/151 804/1532/149 +f 794/1513/144 801/1529/153 802/1533/156 +f 792/1515/114 799/1530/154 800/1528/152 +f 802/1534/156 808/1535/157 809/1536/109 +f 800/1528/152 806/1537/158 807/1538/112 +f 805/1539/150 811/1540/107 812/1541/159 +f 802/1534/156 810/1542/160 803/1543/151 +f 800/1528/152 808/1535/157 801/1529/153 +f 798/1544/155 806/1537/158 799/1530/154 +f 805/1539/150 789/1545/110 798/1544/155 +f 803/1543/151 811/1546/107 804/1547/149 +f 818/1548/160 827/1549/107 819/1550/107 +f 816/1551/157 825/1552/109 817/1553/109 +f 814/1554/158 823/1555/112 815/1556/112 +f 819/1557/107 828/1558/159 820/1559/159 +f 817/1560/109 826/1561/160 818/1562/160 +f 815/1563/112 824/1564/157 816/1565/157 +f 813/1566/110 821/1567/158 814/1568/158 +f 820/1569/159 822/1570/110 813/1571/110 +f 829/1572/161 821/1567/162 822/1573/163 +f 830/1574/164 823/1555/165 821/1575/162 +f 831/1576/166 824/1564/167 823/1577/165 +f 832/1578/168 825/1552/169 824/1579/167 +f 833/1580/170 826/1561/171 825/1581/169 +f 834/1582/172 827/1549/173 826/1583/171 +f 835/1584/174 828/1558/175 827/1585/173 +f 828/1586/175 829/1572/161 822/1570/163 +f 832/1578/168 841/1587/176 833/1580/170 +f 830/1574/164 839/1588/177 831/1589/166 +f 835/1584/174 844/1590/178 836/1591/179 +f 833/1580/170 842/1592/180 834/1582/172 +f 831/1576/166 840/1593/181 832/1578/168 +f 829/1572/161 838/1594/182 830/1574/164 +f 836/1591/179 837/1595/183 829/1572/161 +f 834/1582/172 843/1596/184 835/1584/174 +f 851/1597/185 844/1590/178 843/1596/184 +f 850/1598/186 843/1596/184 842/1592/180 +f 841/1587/176 850/1599/186 842/1592/180 +f 848/1600/187 841/1587/176 840/1593/181 +f 847/1601/188 840/1593/181 839/1602/177 +f 845/1603/189 839/1588/177 838/1594/182 +f 846/1604/190 838/1594/182 837/1595/183 +f 852/1605/191 837/1595/183 844/1590/178 +f 849/1606/109 858/1607/160 850/1599/160 +f 847/1601/112 856/1608/157 848/1609/157 +f 846/1604/110 853/1610/158 845/1611/158 +f 852/1605/159 854/1612/110 846/1613/110 +f 850/1598/160 859/1614/107 851/1615/107 +f 848/1600/157 857/1616/109 849/1617/109 +f 845/1603/158 855/1618/112 847/1619/112 +f 851/1597/107 860/1620/159 852/1621/159 +f 874/1622/160 867/1623/107 866/1624/160 +f 872/1625/157 865/1626/109 864/1627/157 +f 870/1628/158 863/1629/112 862/1630/158 +f 875/1631/107 868/1632/159 867/1623/107 +f 873/1633/109 866/1624/160 865/1626/109 +f 871/1634/112 864/1627/157 863/1635/112 +f 869/1636/110 862/1630/158 861/1637/110 +f 876/1638/159 861/1637/110 868/1632/159 +f 884/1639/133 886/1640/110 877/1641/110 +f 882/1642/111 891/1643/108 883/1644/108 +f 880/1645/134 889/1646/109 881/1647/109 +f 878/1648/116 887/1649/106 879/1650/106 +f 883/1651/108 892/1652/133 884/1639/133 +f 881/1647/109 890/1653/111 882/1642/111 +f 879/1650/106 888/1654/134 880/1645/134 +f 877/1641/110 885/1655/116 878/1648/116 +f 901/1656/192 894/1657/134 893/1658/109 +f 908/1659/193 893/1658/109 900/1660/111 +f 906/1661/194 899/1662/108 898/1663/133 +f 904/1664/195 897/1665/110 896/1666/116 +f 894/1657/134 903/1667/196 895/1668/106 +f 907/1669/197 900/1660/111 899/1670/108 +f 905/1671/198 898/1663/133 897/1665/110 +f 903/1667/196 896/1666/116 895/1668/106 +f 905/1672/198 912/1673/199 913/1674/200 +f 902/1675/201 911/1676/202 903/1667/196 +f 908/1677/193 915/1678/203 916/1679/204 +f 905/1672/198 914/1680/205 906/1681/194 +f 903/1667/196 912/1673/199 904/1664/195 +f 901/1682/192 910/1683/206 902/1675/201 +f 908/1677/193 909/1684/207 901/1682/192 +f 906/1681/194 915/1685/203 907/1686/197 +f 922/1687/208 920/1688/110 919/1689/110 +f 926/1690/209 917/1691/109 918/1692/109 +f 925/1254/210 921/1257/211 924/1256/210 +f 926/1690/209 924/1256/210 923/1693/209 +f 922/1687/208 928/1253/211 927/1694/208 +f 936/1695/133 938/1696/110 929/1697/110 +f 934/1698/111 943/1699/108 935/1700/108 +f 932/1701/134 941/1702/109 933/1703/109 +f 930/1704/116 939/1705/106 931/1706/106 +f 935/1707/108 944/1708/133 936/1695/133 +f 933/1703/109 942/1709/111 934/1698/111 +f 931/1706/106 940/1710/134 932/1701/134 +f 929/1697/110 937/1711/116 930/1704/116 +f 955/1020/110 960/1030/212 956/1026/110 +f 954/1028/109 958/1712/213 953/1713/109 +f 961/1025/212 968/1035/110 964/1266/212 +f 957/1023/212 964/1266/212 960/1030/212 +f 959/1027/213 962/1714/213 958/1712/213 +f 963/1031/213 966/1715/109 962/1714/213 +f 971/1037/110 976/1047/212 972/1043/110 +f 970/1045/109 974/1716/213 969/1717/109 +f 977/1042/212 984/1052/110 980/1269/212 +f 973/1040/212 980/1269/212 976/1047/212 +f 975/1044/213 978/1718/213 974/1716/213 +f 979/1048/213 982/1719/109 978/1718/213 +f 1007/1720/113 1014/1721/214 1015/1722/113 +f 1005/1723/109 1012/1724/215 1013/1725/109 +f 1003/1726/118 1009/1727/216 1011/1728/118 +f 1007/1729/113 1016/1730/217 1008/1731/217 +f 1006/1732/214 1013/1733/109 1014/1734/214 +f 1003/1735/118 1012/1736/215 1004/1737/215 +f 1001/1738/110 1009/1739/216 1002/1740/216 +f 1001/1741/110 1016/1742/217 1010/1743/110 +f 1017/1744/218 1009/1739/219 1010/1745/220 +f 1018/1746/221 1011/1728/222 1009/1727/219 +f 1019/1747/223 1012/1736/224 1011/1748/222 +f 1020/1749/225 1013/1725/226 1012/1724/224 +f 1013/1733/226 1022/1750/227 1014/1734/228 +f 1022/1750/227 1015/1722/229 1014/1721/228 +f 1015/1751/229 1024/1752/230 1016/1730/231 +f 1024/1752/230 1010/1743/220 1016/1742/231 +f 1020/1749/225 1029/1753/232 1021/1754/233 +f 1018/1746/221 1027/1755/234 1019/1756/223 +f 1023/1757/235 1032/1758/236 1024/1752/230 +f 1022/1750/227 1029/1753/232 1030/1759/237 +f 1019/1747/223 1028/1760/238 1020/1749/225 +f 1017/1744/218 1026/1761/239 1018/1746/221 +f 1024/1752/230 1025/1762/240 1017/1744/218 +f 1023/1757/235 1030/1759/237 1031/1763/241 +f 1031/1763/241 1040/1764/242 1032/1758/236 +f 1038/1765/243 1031/1763/241 1030/1759/237 +f 1029/1753/232 1038/1766/243 1030/1759/237 +f 1028/1760/238 1037/1767/244 1029/1753/232 +f 1035/1768/245 1028/1760/238 1027/1769/234 +f 1033/1770/246 1027/1755/234 1026/1761/239 +f 1034/1771/247 1026/1761/239 1025/1762/240 +f 1040/1772/242 1025/1762/240 1032/1758/236 +f 1038/1766/214 1045/1773/109 1046/1774/214 +f 1036/1775/215 1043/1776/118 1044/1777/215 +f 1034/1771/110 1041/1778/216 1033/1779/216 +f 1040/1772/217 1042/1780/110 1034/1781/110 +f 1038/1765/214 1047/1782/113 1039/1783/113 +f 1037/1767/109 1044/1784/215 1045/1785/109 +f 1035/1786/118 1041/1787/216 1043/1788/118 +f 1040/1764/217 1047/1789/113 1048/1790/217 +f 1054/1791/214 1063/1792/113 1055/1793/113 +f 1060/1794/215 1053/1795/109 1052/1796/215 +f 1058/1797/216 1051/1798/118 1050/1799/216 +f 1055/1793/113 1064/1800/217 1056/1801/217 +f 1061/1802/109 1054/1791/214 1053/1795/109 +f 1051/1803/118 1060/1794/215 1052/1796/215 +f 1049/1804/110 1058/1797/216 1050/1799/216 +f 1064/1800/217 1049/1804/110 1056/1801/217 +f 509/1294/107 510/1306/113 502/1295/113 +f 507/1297/108 508/1307/117 500/1298/117 +f 505/1300/112 506/1308/118 498/1301/118 +f 503/1303/106 504/1310/114 496/1304/114 +f 510/1306/113 503/1303/106 495/1305/106 +f 508/1307/117 509/1294/107 501/1296/107 +f 506/1308/118 507/1805/108 499/1309/108 +f 504/1310/114 505/1300/112 497/1302/112 +f 514/1311/119 521/1329/119 520/1312/120 +f 516/1314/121 523/1321/121 522/1315/122 +f 560/1361/112 549/1806/119 562/1319/124 +f 549/1806/119 545/1317/119 562/1319/124 +f 517/1320/125 524/1325/125 523/1321/121 +f 512/1322/126 519/1326/126 518/1323/106 +f 511/1324/106 518/1323/106 524/1325/125 +f 513/1313/120 520/1312/120 519/1326/126 +f 522/1315/122 538/1807/127 531/1327/127 +f 514/1311/119 525/1334/123 532/1328/123 +f 529/1330/128 536/1336/128 535/1331/108 +f 526/1333/129 533/1338/129 532/1328/123 +f 530/1335/130 537/1339/130 536/1336/128 +f 527/1337/131 534/1341/131 533/1338/129 +f 531/1327/127 538/1807/127 537/1339/130 +f 528/1340/108 535/1808/108 534/1341/131 +f 607/1342/114 609/1410/112 601/1343/112 +f 543/1345/121 551/1351/121 550/1346/122 +f 545/1317/119 549/1806/119 539/1348/120 +f 542/1350/125 552/1358/125 551/1351/121 +f 563/1352/132 561/1360/107 575/1353/127 +f 547/1355/126 540/1359/126 541/1356/106 +f 548/1357/106 541/1356/106 552/1358/125 +f 546/1349/120 539/1348/120 540/1359/126 +f 559/1367/127 544/1347/122 563/1352/132 +f 544/1347/122 550/1346/122 563/1352/132 +f 560/1361/112 562/1319/124 576/1362/123 +f 556/1364/108 564/1809/108 568/1365/131 +f 559/1367/127 563/1352/132 567/1368/130 +f 555/1366/131 568/1365/131 566/1370/129 +f 558/1369/130 567/1368/130 565/1372/128 +f 554/1371/129 566/1370/129 562/1319/124 +f 557/1373/128 565/1372/128 564/1374/108 +f 613/1376/107 614/1414/113 606/1377/113 +f 579/1379/128 573/1384/128 572/1380/108 +f 580/1382/129 570/1386/129 569/1363/123 +f 581/1383/130 574/1387/130 573/1384/128 +f 582/1385/131 571/1389/131 570/1386/129 +f 577/1354/127 575/1353/127 574/1387/130 +f 578/1388/108 572/1810/108 571/1389/131 +f 586/1390/118 594/1402/118 595/1391/108 +f 584/1393/114 591/1404/114 593/1394/112 +f 589/1396/107 597/1406/107 598/1397/113 +f 587/1399/108 595/1811/108 596/1400/117 +f 585/1395/112 593/1394/112 594/1402/118 +f 583/1403/106 592/1405/106 591/1404/114 +f 590/1398/113 598/1397/113 592/1405/106 +f 588/1401/117 596/1400/117 597/1406/107 +f 611/1407/108 612/1415/117 604/1408/117 +f 609/1410/112 610/1416/118 602/1411/118 +f 608/1412/106 607/1342/114 599/1344/114 +f 614/1414/113 608/1412/106 600/1413/106 +f 612/1415/117 613/1376/107 605/1378/107 +f 610/1416/118 611/1812/108 603/1417/108 +f 644/1418/133 652/1431/133 646/1419/110 +f 642/1421/111 650/1432/111 651/1422/108 +f 640/1424/134 648/1433/134 649/1425/109 +f 638/1427/116 645/1434/116 647/1428/106 +f 643/1430/108 651/1813/108 652/1431/133 +f 641/1426/109 649/1425/109 650/1432/111 +f 639/1429/106 647/1428/106 648/1433/134 +f 637/1420/110 646/1419/110 645/1434/116 +f 657/1435/108 678/1445/108 677/1436/128 +f 664/1438/126 684/1457/126 685/1439/120 +f 661/1441/121 681/1458/121 682/1442/125 +f 668/1444/131 688/1459/131 678/1445/108 +f 658/1437/128 677/1436/128 679/1446/130 +f 665/1440/120 685/1439/120 686/1448/112 +f 662/1443/125 682/1442/125 683/1450/106 +f 659/1447/130 679/1446/130 680/1452/107 +f 666/1449/112 686/1448/112 687/1454/129 +f 663/1456/106 683/1814/106 684/1457/126 +f 660/1453/107 680/1452/107 681/1458/121 +f 667/1455/129 687/1454/129 688/1459/131 +f 690/1460/133 698/1472/133 697/1461/110 +f 689/1462/110 697/1461/110 704/1463/116 +f 695/1465/106 703/1473/106 702/1466/134 +f 693/1468/109 701/1474/109 700/1469/111 +f 691/1471/108 699/1815/108 698/1472/133 +f 696/1464/116 704/1463/116 703/1473/106 +f 694/1467/134 702/1466/134 701/1474/109 +f 692/1470/111 700/1469/111 699/1475/108 +f 712/1477/116 720/1489/116 714/1478/110 +f 710/1480/134 718/1490/134 719/1481/106 +f 708/1483/111 716/1492/111 717/1484/109 +f 706/1486/133 713/1493/133 715/1487/108 +f 711/1482/106 719/1481/106 720/1489/116 +f 709/1485/109 717/1484/109 718/1490/134 +f 707/1491/108 715/1816/108 716/1492/111 +f 705/1479/110 714/1478/110 713/1493/133 +f 781/1494/135 782/1505/139 774/1495/116 +f 788/1497/136 781/1494/135 773/1496/110 +f 786/1499/137 787/1817/140 779/1500/108 +f 784/1502/138 785/1509/141 777/1503/109 +f 782/1505/139 783/1510/142 775/1506/106 +f 787/1507/140 788/1497/136 780/1498/133 +f 785/1509/141 786/1499/137 778/1501/111 +f 783/1510/142 784/1502/138 776/1504/134 +f 785/1511/141 784/1502/138 793/1512/143 +f 783/1510/142 782/1505/139 791/1514/145 +f 788/1516/136 787/1818/140 796/1517/117 +f 786/1519/137 785/1511/141 794/1513/144 +f 783/1510/142 792/1515/114 793/1512/143 +f 781/1521/135 790/1522/148 791/1514/145 +f 788/1516/136 797/1518/146 790/1522/148 +f 786/1519/137 795/1520/147 796/1523/117 +f 797/1518/146 796/1517/117 804/1525/149 +f 794/1513/144 802/1533/156 803/1527/151 +f 793/1512/143 792/1515/114 800/1528/152 +f 790/1522/148 798/1531/155 799/1530/154 +f 797/1518/146 805/1526/150 798/1531/155 +f 796/1523/117 795/1520/147 803/1527/151 +f 794/1513/144 793/1512/143 801/1529/153 +f 792/1515/114 791/1514/145 799/1530/154 +f 802/1534/156 801/1529/153 808/1535/157 +f 800/1528/152 799/1530/154 806/1537/158 +f 805/1539/150 804/1819/149 811/1540/107 +f 802/1534/156 809/1536/109 810/1542/160 +f 800/1528/152 807/1538/112 808/1535/157 +f 798/1544/155 789/1545/110 806/1537/158 +f 805/1539/150 812/1541/159 789/1545/110 +f 803/1543/151 810/1542/160 811/1546/107 +f 818/1548/160 826/1583/160 827/1549/107 +f 816/1551/157 824/1579/157 825/1552/109 +f 814/1554/158 821/1575/158 823/1555/112 +f 819/1557/107 827/1585/107 828/1558/159 +f 817/1560/109 825/1581/109 826/1561/160 +f 815/1563/112 823/1577/112 824/1564/157 +f 813/1566/110 822/1573/110 821/1567/158 +f 820/1569/159 828/1586/159 822/1570/110 +f 829/1572/161 830/1574/164 821/1567/162 +f 830/1574/164 831/1589/166 823/1555/165 +f 831/1576/166 832/1578/168 824/1564/167 +f 832/1578/168 833/1580/170 825/1552/169 +f 833/1580/170 834/1582/172 826/1561/171 +f 834/1582/172 835/1584/174 827/1549/173 +f 835/1584/174 836/1591/179 828/1558/175 +f 828/1586/175 836/1591/179 829/1572/161 +f 832/1578/168 840/1593/181 841/1587/176 +f 830/1574/164 838/1594/182 839/1588/177 +f 835/1584/174 843/1596/184 844/1590/178 +f 833/1580/170 841/1587/176 842/1592/180 +f 831/1576/166 839/1602/177 840/1593/181 +f 829/1572/161 837/1595/183 838/1594/182 +f 836/1591/179 844/1590/178 837/1595/183 +f 834/1582/172 842/1592/180 843/1596/184 +f 851/1597/185 852/1621/191 844/1590/178 +f 850/1598/186 851/1615/185 843/1596/184 +f 841/1587/176 849/1606/248 850/1599/186 +f 848/1600/187 849/1617/248 841/1587/176 +f 847/1601/188 848/1609/187 840/1593/181 +f 845/1603/189 847/1619/188 839/1588/177 +f 846/1604/190 845/1611/189 838/1594/182 +f 852/1605/191 846/1613/190 837/1595/183 +f 849/1606/109 857/1820/109 858/1607/160 +f 847/1601/112 855/1821/112 856/1608/157 +f 846/1604/110 854/1822/110 853/1610/158 +f 852/1605/159 860/1823/159 854/1612/110 +f 850/1598/160 858/1824/160 859/1614/107 +f 848/1600/157 856/1825/157 857/1616/109 +f 845/1603/158 853/1826/158 855/1618/112 +f 851/1597/107 859/1827/107 860/1620/159 +f 874/1622/160 875/1631/107 867/1623/107 +f 872/1625/157 873/1633/109 865/1626/109 +f 870/1628/158 871/1828/112 863/1629/112 +f 875/1631/107 876/1638/159 868/1632/159 +f 873/1633/109 874/1622/160 866/1624/160 +f 871/1634/112 872/1625/157 864/1627/157 +f 869/1636/110 870/1628/158 862/1630/158 +f 876/1638/159 869/1636/110 861/1637/110 +f 884/1639/133 892/1652/133 886/1640/110 +f 882/1642/111 890/1653/111 891/1643/108 +f 880/1645/134 888/1654/134 889/1646/109 +f 878/1648/116 885/1655/116 887/1649/106 +f 883/1651/108 891/1829/108 892/1652/133 +f 881/1647/109 889/1646/109 890/1653/111 +f 879/1650/106 887/1649/106 888/1654/134 +f 877/1641/110 886/1640/110 885/1655/116 +f 901/1656/192 902/1675/201 894/1657/134 +f 908/1659/193 901/1656/192 893/1658/109 +f 906/1661/194 907/1830/197 899/1662/108 +f 904/1664/195 905/1671/198 897/1665/110 +f 894/1657/134 902/1675/201 903/1667/196 +f 907/1669/197 908/1659/193 900/1660/111 +f 905/1671/198 906/1661/194 898/1663/133 +f 903/1667/196 904/1664/195 896/1666/116 +f 905/1672/198 904/1664/195 912/1673/199 +f 902/1675/201 910/1683/206 911/1676/202 +f 908/1677/193 907/1831/197 915/1678/203 +f 905/1672/198 913/1674/200 914/1680/205 +f 903/1667/196 911/1676/202 912/1673/199 +f 901/1682/192 909/1684/207 910/1683/206 +f 908/1677/193 916/1679/204 909/1684/207 +f 906/1681/194 914/1680/205 915/1685/203 +f 922/1687/208 927/1694/208 920/1688/110 +f 926/1690/209 923/1693/209 917/1691/109 +f 925/1254/210 928/1253/211 921/1257/211 +f 926/1690/209 925/1254/210 924/1256/210 +f 922/1687/208 921/1257/211 928/1253/211 +f 936/1695/133 944/1708/133 938/1696/110 +f 934/1698/111 942/1709/111 943/1699/108 +f 932/1701/134 940/1710/134 941/1702/109 +f 930/1704/116 937/1711/116 939/1705/106 +f 935/1707/108 943/1832/108 944/1708/133 +f 933/1703/109 941/1702/109 942/1709/111 +f 931/1706/106 939/1705/106 940/1710/134 +f 929/1697/110 938/1696/110 937/1711/116 +f 955/1020/110 957/1023/212 960/1030/212 +f 954/1028/109 959/1027/213 958/1712/213 +f 961/1025/212 965/1033/110 968/1035/110 +f 957/1023/212 961/1025/212 964/1266/212 +f 959/1027/213 963/1031/213 962/1714/213 +f 963/1031/213 967/1036/109 966/1715/109 +f 971/1037/110 973/1040/212 976/1047/212 +f 970/1045/109 975/1044/213 974/1716/213 +f 977/1042/212 981/1050/110 984/1052/110 +f 973/1040/212 977/1042/212 980/1269/212 +f 975/1044/213 979/1048/213 978/1718/213 +f 979/1048/213 983/1053/109 982/1719/109 +f 1007/1720/113 1006/1833/214 1014/1721/214 +f 1005/1723/109 1004/1834/215 1012/1724/215 +f 1003/1726/118 1002/1835/216 1009/1727/216 +f 1007/1729/113 1015/1751/113 1016/1730/217 +f 1006/1732/214 1005/1836/109 1013/1733/109 +f 1003/1735/118 1011/1748/118 1012/1736/215 +f 1001/1738/110 1010/1745/110 1009/1739/216 +f 1001/1741/110 1008/1837/217 1016/1742/217 +f 1017/1744/218 1018/1746/221 1009/1739/219 +f 1018/1746/221 1019/1756/223 1011/1728/222 +f 1019/1747/223 1020/1749/225 1012/1736/224 +f 1020/1749/225 1021/1754/233 1013/1725/226 +f 1013/1733/226 1021/1754/233 1022/1750/227 +f 1022/1750/227 1023/1757/235 1015/1722/229 +f 1015/1751/229 1023/1757/235 1024/1752/230 +f 1024/1752/230 1017/1744/218 1010/1743/220 +f 1020/1749/225 1028/1760/238 1029/1753/232 +f 1018/1746/221 1026/1761/239 1027/1755/234 +f 1023/1757/235 1031/1763/241 1032/1758/236 +f 1022/1750/227 1021/1754/233 1029/1753/232 +f 1019/1747/223 1027/1769/234 1028/1760/238 +f 1017/1744/218 1025/1762/240 1026/1761/239 +f 1024/1752/230 1032/1758/236 1025/1762/240 +f 1023/1757/235 1022/1750/227 1030/1759/237 +f 1031/1763/241 1039/1838/249 1040/1764/242 +f 1038/1765/243 1039/1783/249 1031/1763/241 +f 1029/1753/232 1037/1839/244 1038/1766/243 +f 1028/1760/238 1036/1840/250 1037/1767/244 +f 1035/1768/245 1036/1775/250 1028/1760/238 +f 1033/1770/246 1035/1786/245 1027/1755/234 +f 1034/1771/247 1033/1779/246 1026/1761/239 +f 1040/1772/242 1034/1781/247 1025/1762/240 +f 1038/1766/214 1037/1839/109 1045/1773/109 +f 1036/1775/215 1035/1768/118 1043/1776/118 +f 1034/1771/110 1042/1841/110 1041/1778/216 +f 1040/1772/217 1048/1842/217 1042/1780/110 +f 1038/1765/214 1046/1843/214 1047/1782/113 +f 1037/1767/109 1036/1840/215 1044/1784/215 +f 1035/1786/118 1033/1770/216 1041/1787/216 +f 1040/1764/217 1039/1838/113 1047/1789/113 +f 1054/1791/214 1062/1844/214 1063/1792/113 +f 1060/1794/215 1061/1802/109 1053/1795/109 +f 1058/1797/216 1059/1845/118 1051/1798/118 +f 1055/1793/113 1063/1792/113 1064/1800/217 +f 1061/1802/109 1062/1844/214 1054/1791/214 +f 1051/1803/118 1059/1846/118 1060/1794/215 +f 1049/1804/110 1057/1847/110 1058/1797/216 +f 1064/1800/217 1057/1847/110 1049/1804/110 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/sexy_real_no_fake.png b/src/main/resources/assets/hbm/textures/models/weapons/sexy_real_no_fake.png new file mode 100644 index 0000000000000000000000000000000000000000..fa565a3a07c3d352e8e82b210c80dbf856376647 GIT binary patch literal 4284 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 elqrapi0J=&@xauT5No9X0000 Date: Mon, 23 Jun 2025 16:58:46 +0200 Subject: [PATCH 195/491] --- changelog | 5 +- .../java/com/hbm/handler/HbmKeybinds.java | 130 +++++++++++++++--- .../container/ContainerCrateBase.java | 25 ++-- .../com/hbm/items/tool/ItemToolAbility.java | 14 +- .../com/hbm/main/ModEventHandlerClient.java | 70 ---------- src/main/java/com/hbm/main/ServerProxy.java | 2 + src/main/java/com/hbm/util/ArmorRegistry.java | 2 +- 7 files changed, 143 insertions(+), 105 deletions(-) diff --git a/changelog b/changelog index fac243f1a..5f91dbddb 100644 --- a/changelog +++ b/changelog @@ -41,4 +41,7 @@ * Fixed blowtorch having a minimum gas requirement of 1,000mB despite only using 250mB * The gas turbine now uses audio with a 20 tick timeout, fixing a rare issue where the loop gets stuck and never ends * Potentially fixed a dupe caused by using InventoryBogoSorter in combination with crates -* Rapidly spinning dyx should no longer have a state leak that would rotate lighting of unrelated TESRs with it \ No newline at end of file +* Rapidly spinning dyx should no longer have a state leak that would rotate lighting of unrelated TESRs with it +* Fixed issue where mining strange stone with silk touch ability would cause a desync. It also now drops cobblestone, as if silk touch wasn't active at all +* Fixed issue where applying a filter to a mask that doesn't support certain protection types would permanently remove those types from the filter until the game is restarted +* Fixed InventoryBogoSorter being able to move held crates \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 5f85ce886..06a9c90a1 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -2,19 +2,27 @@ package com.hbm.handler; import com.hbm.inventory.gui.GUICalculator; import com.hbm.items.IKeybindReceiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT; import cpw.mods.fml.common.FMLCommonHandler; import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import com.hbm.config.GeneralConfig; import com.hbm.extprop.HbmPlayerProps; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.KeybindPacket; import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent; import cpw.mods.fml.common.gameevent.InputEvent.MouseInputEvent; +import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -64,37 +72,121 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(craneLeftKey); ClientRegistry.registerKeyBinding(craneRightKey); ClientRegistry.registerKeyBinding(craneLoadKey); + ClientRegistry.registerKeyBinding(abilityCycle); ClientRegistry.registerKeyBinding(abilityAlt); ClientRegistry.registerKeyBinding(copyToolAlt); ClientRegistry.registerKeyBinding(copyToolCtrl); } - - @SubscribeEvent + + @SideOnly(Side.CLIENT) + @SubscribeEvent(priority = EventPriority.LOW) public void mouseEvent(MouseInputEvent event) { + + /// OVERLAP HANDLING /// + handleOverlap(Mouse.getEventButtonState(), Mouse.getEventButton() - 100); + + /// KEYBIND PROPS /// + handleProps(Mouse.getEventButtonState(), Mouse.getEventButton() - 100); + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent(priority = EventPriority.LOW) + public void keyEvent(KeyInputEvent event) { + + /// OVERLAP HANDLING /// + handleOverlap(Keyboard.getEventKeyState(), Keyboard.getEventKey()); + + /// KEYBIND PROPS /// + handleProps(Keyboard.getEventKeyState(), Keyboard.getEventKey()); + + /// CALCULATOR /// + if(calculatorKey.getIsKeyPressed()) { + MainRegistry.proxy.me().closeScreen(); + FMLCommonHandler.instance().showGuiScreen(new GUICalculator()); + } + } + + /** + * Shitty hack: Keybinds fire before minecraft checks right click on block, which means the tool cycle keybind would fire too. + * If cycle collides with right click and a block is being used, cancel the keybind. + * @param event + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void postClientTick(ClientTickEvent event) { + if(event.phase != event.phase.END) return; EntityPlayer player = MainRegistry.proxy.me(); + if(player == null) return; + if(player.worldObj == null) return; + HbmPlayerProps props = HbmPlayerProps.getData(player); - for(EnumKeybind key : EnumKeybind.values()) { - boolean last = props.getKeyPressed(key); - boolean current = MainRegistry.proxy.getIsKeyPressed(key); + // in theory, this should do the same keybind crap as the main one, but at the end of the client tick, fixing the issue + // of detecting when a block is being interacted with + // in practice, this shit doesn't fucking work. detection fails when the click is sub one tick long + if(Minecraft.getMinecraft().gameSettings.keyBindUseItem.getKeyCode() == abilityCycle.getKeyCode()) { + boolean last = props.getKeyPressed(EnumKeybind.ABILITY_CYCLE); + boolean current = abilityCycle.pressed; if(last != current) { - PacketDispatcher.wrapper.sendToServer(new KeybindPacket(key, current)); - props.setKeyPressed(key, current); - onPressedClient(player, key, current); + PacketDispatcher.wrapper.sendToServer(new KeybindPacket(EnumKeybind.ABILITY_CYCLE, current)); + props.setKeyPressed(EnumKeybind.ABILITY_CYCLE, current); + onPressedClient(player, EnumKeybind.ABILITY_CYCLE, current); } } } - @SubscribeEvent - public void keyEvent(KeyInputEvent event) { - EntityPlayer player = MainRegistry.proxy.me(); - - if(calculatorKey.getIsKeyPressed()) { // handle the calculator client-side only - player.closeScreen(); - FMLCommonHandler.instance().showGuiScreen(new GUICalculator()); + /** Handles keybind overlap. Make sure this runs first before referencing the keybinds set by the extprops */ + public static void handleOverlap(boolean state, int keyCode) { + Minecraft mc = Minecraft.getMinecraft(); + if(GeneralConfig.enableKeybindOverlap && (mc.currentScreen == null || mc.currentScreen.allowUserInput)) { + + //if anything errors here, run ./gradlew clean setupDecompWorkSpace + for(Object o : KeyBinding.keybindArray) { + KeyBinding key = (KeyBinding) o; + + if(keyCode != 0 && key.getKeyCode() == keyCode && KeyBinding.hash.lookup(key.getKeyCode()) != key) { + + key.pressed = state; + if(state && key.pressTime == 0) { + key.pressTime = 1; + } + } + } + + /// GUN HANDLING /// + boolean gunKey = keyCode == HbmKeybinds.gunPrimaryKey.getKeyCode() || keyCode == HbmKeybinds.gunSecondaryKey.getKeyCode() || + keyCode == HbmKeybinds.gunTertiaryKey.getKeyCode() || keyCode == HbmKeybinds.reloadKey.getKeyCode(); + + EntityPlayer player = mc.thePlayer; + + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT) { + + /* Shoot in favor of attacking */ + if(gunKey && keyCode == mc.gameSettings.keyBindAttack.getKeyCode()) { + mc.gameSettings.keyBindAttack.pressed = false; + mc.gameSettings.keyBindAttack.pressTime = 0; + } + + /* Shoot in favor of interacting */ + /*if(gunKey && keyCode == mc.gameSettings.keyBindUseItem.getKeyCode()) { + mc.gameSettings.keyBindUseItem.pressed = false; + mc.gameSettings.keyBindUseItem.pressTime = 0; + }*/ + + /* Scope in favor of picking */ + if(gunKey && keyCode == mc.gameSettings.keyBindPickBlock.getKeyCode()) { + mc.gameSettings.keyBindPickBlock.pressed = false; + mc.gameSettings.keyBindPickBlock.pressTime = 0; + } + } } - + } + + public static void handleProps(boolean state, int keyCode) { + + /// KEYBIND PROPS /// + EntityPlayer player = MainRegistry.proxy.me(); HbmPlayerProps props = HbmPlayerProps.getData(player); for(EnumKeybind key : EnumKeybind.values()) { @@ -102,8 +194,12 @@ public class HbmKeybinds { boolean current = MainRegistry.proxy.getIsKeyPressed(key); if(last != current) { - PacketDispatcher.wrapper.sendToServer(new KeybindPacket(key, current)); + + /// ABILITY HANDLING /// + if(key == EnumKeybind.ABILITY_CYCLE && Minecraft.getMinecraft().gameSettings.keyBindUseItem.getKeyCode() == abilityCycle.getKeyCode()) continue; + props.setKeyPressed(key, current); + PacketDispatcher.wrapper.sendToServer(new KeybindPacket(key, current)); onPressedClient(player, key, current); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java b/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java index 06b255a68..05b818a10 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java @@ -24,7 +24,9 @@ public class ContainerCrateBase extends ContainerBase { } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new SlotPlayerCrate(invPlayer, i, playerInvX + i * 18, playerHotbarY)); + this.addSlotToContainer( + invPlayer.currentItem == i ? new SlotPlayerCrateLocked(invPlayer, i, playerInvX + i * 18, playerHotbarY) : + new SlotNonRetarded(invPlayer, i, playerInvX + i * 18, playerHotbarY)); } } @@ -49,29 +51,22 @@ public class ContainerCrateBase extends ContainerBase { tile.closeInventory(); } - public class SlotPlayerCrate extends SlotNonRetarded { + /** + * No touching anything here. No moving around, no taking, no inserting, fuck off. + */ + public class SlotPlayerCrateLocked extends SlotNonRetarded { - public SlotPlayerCrate(IInventory inventory, int id, int x, int y) { + public SlotPlayerCrateLocked(IInventory inventory, int id, int x, int y) { super(inventory, id, x, y); } - - /** - * This prevents the player from moving containers that are being held *at all*, fixing a decently big dupe. - * I hate that this has to be here but... It is what it is. - */ @Override public boolean canTakeStack(EntityPlayer player) { - if(player.inventory.currentItem == this.getSlotIndex() && // If this slot is the current held slot. - this.getStack() != null && this.getStack().getItem() instanceof ItemBlockStorageCrate && // If the slot contains a storage crate. - player.openContainer instanceof ContainerCrateBase && !(ContainerCrateBase.this.tile instanceof TileEntity)) // If the player is currently inside a crate container. - return false; - return super.canTakeStack(player); + return false; } @Override public boolean isItemValid(ItemStack item) { - if(ItemStack.areItemStacksEqual(getStack(), item)) return false; - return super.isItemValid(item); + return false; } } } diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 06e20e6f7..abe7a137f 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -156,6 +156,18 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro World world = player.worldObj; Block block = world.getBlock(x, y, z); + + /* + * The original implementation of this always returned FALSE which uses the vanilla block break code. + * This one now returns TRUE when an ability applies and instead relies on breakExtraBlock, which has the minor + * issue of only running on the sever, while the client uses the vanilla implementation. breakExtraBlock was only + * meant to be used for AoE or vein miner and not for the block that's being mined, hence break EXTRA block. + * The consequence was that the server would fail to break keyholes since breakExtraBlock is supposed to exclude + * them, while the client happily removes the block, causing a desync. + * + * Since keyholes aren't processable and exempt from silk touch anyway, we just default to the vanilla implementation in every case. + */ + if(block == ModBlocks.stone_keyhole || block == ModBlocks.stone_keyhole_meta) return false; if(!world.isRemote && (canHarvestBlock(block, stack) || canShearBlock(block, stack, world, x, y, z)) && canOperate(stack)) { Configuration config = getConfiguration(stack); @@ -165,7 +177,7 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro boolean skipRef = preset.areaAbility.onDig(preset.areaAbilityLevel, world, x, y, z, player, this); - if (!skipRef) { + if(!skipRef) { breakExtraBlock(world, x, y, z, player, x, y, z); } diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 967f76977..2df3bbfd0 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -13,7 +13,6 @@ import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.ArmorModHandler; import com.hbm.handler.HTTPHandler; import com.hbm.handler.HazmatRegistry; -import com.hbm.handler.HbmKeybinds; import com.hbm.handler.ImpactWorldHandler; import com.hbm.hazard.HazardSystem; import com.hbm.interfaces.IHoldableWeapon; @@ -65,7 +64,6 @@ import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.InputEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; @@ -86,7 +84,6 @@ import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.client.settings.GameSettings; -import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -1121,73 +1118,6 @@ public class ModEventHandlerClient { } } - @SideOnly(Side.CLIENT) - @SubscribeEvent(priority = EventPriority.LOW) - public void onMouseClicked(InputEvent.MouseInputEvent event) { - - Minecraft mc = Minecraft.getMinecraft(); - if(GeneralConfig.enableKeybindOverlap && (mc.currentScreen == null || mc.currentScreen.allowUserInput)) { - boolean state = Mouse.getEventButtonState(); - int keyCode = Mouse.getEventButton() - 100; - - //if anything errors here, run ./gradlew clean setupDecompWorkSpace - for(Object o : KeyBinding.keybindArray) { - KeyBinding key = (KeyBinding) o; - - if(key.getKeyCode() == keyCode && KeyBinding.hash.lookup(key.getKeyCode()) != key) { - - key.pressed = state; - if(state && key.pressTime == 0) { - key.pressTime = 1; - } - } - } - - boolean gunKey = keyCode == HbmKeybinds.gunPrimaryKey.getKeyCode() || keyCode == HbmKeybinds.gunSecondaryKey.getKeyCode() || - keyCode == HbmKeybinds.gunTertiaryKey.getKeyCode() || keyCode == HbmKeybinds.reloadKey.getKeyCode(); - - EntityPlayer player = mc.thePlayer; - - if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT) { - - /* Shoot in favor of attacking */ - if(gunKey && keyCode == mc.gameSettings.keyBindAttack.getKeyCode()) { - mc.gameSettings.keyBindAttack.pressed = false; - mc.gameSettings.keyBindAttack.pressTime = 0; - } - - if(gunKey && keyCode == mc.gameSettings.keyBindPickBlock.getKeyCode()) { - mc.gameSettings.keyBindPickBlock.pressed = false; - mc.gameSettings.keyBindPickBlock.pressTime = 0; - } - } - } - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent(priority = EventPriority.LOW) - public void onKeyTyped(InputEvent.KeyInputEvent event) { - - Minecraft mc = Minecraft.getMinecraft(); - if(GeneralConfig.enableKeybindOverlap && (mc.currentScreen == null || mc.currentScreen.allowUserInput)) { - boolean state = Keyboard.getEventKeyState(); - int keyCode = Keyboard.getEventKey(); - - //if anything errors here, run ./gradlew clean setupDecompWorkSpace - for(Object o : KeyBinding.keybindArray) { - KeyBinding key = (KeyBinding) o; - - if(keyCode != 0 && key.getKeyCode() == keyCode && KeyBinding.hash.lookup(key.getKeyCode()) != key) { - - key.pressed = state; - if(state && key.pressTime == 0) { - key.pressTime = 1; - } - } - } - } - } - @SideOnly(Side.CLIENT) @SubscribeEvent public void onRenderWorldLastEvent(RenderWorldLastEvent event) { diff --git a/src/main/java/com/hbm/main/ServerProxy.java b/src/main/java/com/hbm/main/ServerProxy.java index fdbe22529..7ec6eaa23 100644 --- a/src/main/java/com/hbm/main/ServerProxy.java +++ b/src/main/java/com/hbm/main/ServerProxy.java @@ -61,11 +61,13 @@ public class ServerProxy { public void displayTooltip(String msg, int id) { displayTooltip(msg, 1000, id); } + public void displayTooltip(String msg, int time, int id) { } public boolean getIsKeyPressed(EnumKeybind key) { return false; } + public EntityPlayer me() { return null; } diff --git a/src/main/java/com/hbm/util/ArmorRegistry.java b/src/main/java/com/hbm/util/ArmorRegistry.java index 98b863080..113976bae 100644 --- a/src/main/java/com/hbm/util/ArmorRegistry.java +++ b/src/main/java/com/hbm/util/ArmorRegistry.java @@ -74,7 +74,7 @@ public class ArmorRegistry { if(filter != null) { //add the HazardClasses from the filter, then remove the ones blacklisted by the mask - List filProt = hazardClasses.get(filter.getItem()); + List filProt = (List) hazardClasses.get(filter.getItem()).clone(); for(HazardClass c : mask.getBlacklist(stack, entity)) filProt.remove(c); From 1615096a8439b49beb0c7257ca5a5bcea4700bb4 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Tue, 24 Jun 2025 09:23:32 +0300 Subject: [PATCH 196/491] i just don't know --- src/main/resources/assets/hbm/lang/uk_UA.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 998614bf9..e3a137691 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -3706,7 +3706,7 @@ item.pellet_rtg_cobalt.name=РІТЕГ гранула кобальту-60 item.pellet_rtg_cobalt.desc=Не найкращий як РІТЕГ, але чудовий для гамма-випромінювання! item.pellet_rtg_depleted.bismuth.name=Розкладена вісмутова РІТЕГ гранула item.pellet_rtg_depleted.lead.name=Розкладена свинцева РІТЕГ гранула -item.pellet_rtg_depleted.neptunium.name=Розкладена немтунієва РІТЕГ гранула +item.pellet_rtg_depleted.neptunium.name=Розкладена нептунієва РІТЕГ гранула item.pellet_rtg_depleted.mercury.name=Розкладена ртутна РІТЕГ гранула item.pellet_rtg_depleted.nickel.name=Розкладена нікелева РІТЕГ гранула item.pellet_rtg_depleted.zirconium.name=Розкладена цирконієва РІТЕГ гранула @@ -5809,7 +5809,7 @@ tile.pump_electric.desc=Використовує електроенергію д tile.pump_steam.name=Паровий насос ґрунтових вод tile.pump_steam.desc=Використовує пару для відкачування ґрунтових вод$Генерує до 1,000mB/t$Повинен бути розміщений нижче Y:70 tile.pwr_block.name=ВВЕР -tile.pwr_casing.name=Корпус рекатора ВВЕР +tile.pwr_casing.name=Корпус реактора ВВЕР tile.pwr_casing.desc=Потрібно покрити всі внутрішні частини реактора для формування$Розміщення: Корпус tile.pwr_channel.name=Канал теплоносія ВВЕР tile.pwr_channel.desc=Використовує тепло корпусу для нагрівання охолоджувальної рідини$Розміщення: Будь-яке From f416b9ad447273977087a0f9a5b1e7f42804d378 Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 24 Jun 2025 15:58:05 +0200 Subject: [PATCH 197/491] born to shit (forced to wipe) --- changelog | 3 +- .../com/hbm/items/tool/ItemToolAbility.java | 4 +- .../weapon/sedna/factory/XFactory12ga.java | 14 ++-- .../com/hbm/main/ModEventHandlerClient.java | 10 +-- .../item/weapon/sedna/ItemRenderSexy.java | 71 +++++++++++++------ 5 files changed, 71 insertions(+), 31 deletions(-) diff --git a/changelog b/changelog index 5f91dbddb..6f3ede9f5 100644 --- a/changelog +++ b/changelog @@ -44,4 +44,5 @@ * Rapidly spinning dyx should no longer have a state leak that would rotate lighting of unrelated TESRs with it * Fixed issue where mining strange stone with silk touch ability would cause a desync. It also now drops cobblestone, as if silk touch wasn't active at all * Fixed issue where applying a filter to a mask that doesn't support certain protection types would permanently remove those types from the filter until the game is restarted -* Fixed InventoryBogoSorter being able to move held crates \ No newline at end of file +* Fixed InventoryBogoSorter being able to move held crates +* Fixed tier 2 pickaxes mining depth rock causing a desync with the depth rock not actually being broken \ No newline at end of file diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index abe7a137f..e91283917 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -274,7 +274,7 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro EntityPlayerMP player = (EntityPlayerMP) playerEntity; ItemStack stack = player.getHeldItem(); - if (stack == null) { + if(stack == null) { return; } @@ -288,7 +288,7 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro float refStrength = ForgeHooks.blockStrength(refBlock, player, world, refX, refY, refZ); float strength = ForgeHooks.blockStrength(block, player, world, x, y, z); - if(!ForgeHooks.canHarvestBlock(block, player, meta) || refStrength / strength > 10f || refBlock.getBlockHardness(world, refX, refY, refZ) < 0) + if(!ForgeHooks.canHarvestBlock(block, player, meta) || refStrength / strength > 10f || refBlock.getPlayerRelativeBlockHardness(player, world, refX, refY, refZ) < 0) return; BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(world, player.theItemInWorldManager.getGameType(), player, x, y, z); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index 378ffcad8..24df3eeff 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -323,7 +323,7 @@ public class XFactory12ga { ModItems.gun_maresleg_broken = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() .dura(0).draw(5).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) - .dmg(32F).spreadAmmo(1.15F).delay(20).reload(22, 10, 13, 0).jam(24).sound("hbm:weapon.fire.shotgun", 1.0F, 1.0F) + .dmg(48F).spreadAmmo(1.15F).delay(20).reload(22, 10, 13, 0).jam(24).sound("hbm:weapon.fire.shotgun", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 6).addConfigs(g12_equestrian_tkr, g12_bp, g12_bp_magnum, g12_bp_slug, g12, g12_slug, g12_flechette, g12_magnum, g12_explosive, g12_phosphorus)) .offset(0.75, -0.0625, -0.1875) .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(LAMBDA_RECOIL_MARESLEG)) @@ -654,12 +654,18 @@ public class XFactory12ga { @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_SEXY_ANIMS = (stack, type) -> { switch(type) { case CYCLE: return new BusAnimation() - .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, -1, 50, IType.SIN_DOWN).addPos(0, 0, 0, 150, IType.SIN_FULL)) - .addBus("CYCLE", new BusAnimationSequence().addPos(0, 0, 18, 50)); + .addBus("RECOIL", new BusAnimationSequence().hold(50).addPos(0, 0, -0.25, 50, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL)) + .addBus("BARREL", new BusAnimationSequence().addPos(0, 0, -1, 50, IType.SIN_DOWN).addPos(0, 0, 0, 150)) + .addBus("CYCLE", new BusAnimationSequence().addPos(1, 0, 0, 150)) + .addBus("HOOD", new BusAnimationSequence().hold(50).addPos(3, 0, 0, 50, IType.SIN_DOWN).addPos(0, 0, 0, 50, IType.SIN_UP)); case CYCLE_DRY: return new BusAnimation() .addBus("CYCLE", new BusAnimationSequence().addPos(0, 0, 18, 50)); + case RELOAD: return new BusAnimation() + .addBus("LEVER", new BusAnimationSequence().addPos(0, 0, 1, 150).hold(2750).addPos(0, 0, 0, 150)) + .addBus("HOOD", new BusAnimationSequence().hold(250).addPos(60, 0, 0, 500, IType.SIN_FULL).hold(1500).addPos(0, 0, 0, 500, IType.SIN_FULL)) + .addBus("BELT", new BusAnimationSequence().setPos(1, 0, 0).hold(750).addPos(0, 0, 0, 500, IType.SIN_FULL).hold(500).addPos(1, 0, 0, 500, IType.SIN_FULL)); } - return LAMBDA_SHREDDER_ANIMS.apply(stack, type); + return null; }; } diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 2df3bbfd0..ce23a4e69 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -922,16 +922,18 @@ public class ModEventHandlerClient { ItemFluidDuct.class ); - String prefix = "Gun "; - int scale = 8; + String prefix = "Slot "; + int gunScale = 8; + int slotScale = 1; boolean ignoreNonNTM = true; + boolean onlyGuns = true; List stacks = new ArrayList(); for (Object reg : Item.itemRegistry) { Item item = (Item) reg; if(ignoreNonNTM && !Item.itemRegistry.getNameForObject(item).startsWith("hbm:")) continue; if(ignoredItems.contains(item)) continue; - if(!(item instanceof ItemGunBaseNT) && prefix.toLowerCase(Locale.US).startsWith("gun")) continue; + if(onlyGuns && !(item instanceof ItemGunBaseNT)) continue; if(collapsedClasses.contains(item.getClass())) { stacks.add(new ItemStack(item)); } else { @@ -940,7 +942,7 @@ public class ModEventHandlerClient { } Minecraft.getMinecraft().thePlayer.closeScreen(); - FMLCommonHandler.instance().showGuiScreen(new GUIScreenWikiRender(stacks.toArray(new ItemStack[0]), prefix, "wiki-block-renders-256", scale)); + FMLCommonHandler.instance().showGuiScreen(new GUIScreenWikiRender(stacks.toArray(new ItemStack[0]), prefix, "wiki-block-renders-256", slotScale)); } } else { isRenderingItems = false; diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java index 797910362..901d129fd 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java @@ -2,14 +2,17 @@ package com.hbm.render.item.weapon.sedna; import org.lwjgl.opengl.GL11; +import com.hbm.interfaces.NotableComments; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.main.ResourceManager; import com.hbm.render.anim.HbmAnimations; import com.hbm.util.BobMathUtil; +import com.hbm.util.Vec3NT; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; +@NotableComments public class ItemRenderSexy extends ItemRenderWeaponBase { @Override @@ -43,8 +46,15 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { double scale = 0.375D; GL11.glScaled(scale, scale, scale); + boolean doesCycle = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("CYCLE") != null; + boolean reloading = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("BELT") != null; double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); + double[] cycle = HbmAnimations.getRelevantTransformation("CYCLE"); + double[] barrel = HbmAnimations.getRelevantTransformation("BARREL"); + double[] hood = HbmAnimations.getRelevantTransformation("HOOD"); + double[] lever = HbmAnimations.getRelevantTransformation("LEVER"); + double[] belt = HbmAnimations.getRelevantTransformation("BELT"); GL11.glTranslated(0, -1, -8); GL11.glRotated(equip[0], 1, 0, 0); @@ -57,7 +67,7 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { ResourceManager.sexy.renderPart("Gun"); GL11.glPushMatrix(); - //GL11.glTranslated(0, 0, -1); + GL11.glTranslated(0, 0, barrel[2]); ResourceManager.sexy.renderPart("Barrel"); GL11.glPopMatrix(); @@ -70,42 +80,64 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { GL11.glPushMatrix(); GL11.glTranslated(0, 0.4375, -2.875); - //GL11.glRotated(60, 1, 0, 0); + GL11.glRotated(hood[0], 1, 0, 0); GL11.glTranslated(0, -0.4375, 2.875); ResourceManager.sexy.renderPart("Hood"); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslated(0, 0.46875, -6.875); - //GL11.glRotated(60, 1, 0, 0); + GL11.glRotated(lever[2] * 60, 1, 0, 0); GL11.glTranslated(0, -0.46875, 6.875); ResourceManager.sexy.renderPart("Lever"); GL11.glPopMatrix(); GL11.glPushMatrix(); GL11.glTranslated(0, 0, -6.75); - //GL11.glScaled(1, 1, 0.75); + GL11.glScaled(1, 1, 1 - lever[2] * 0.25); GL11.glTranslated(0, 0, 6.75); ResourceManager.sexy.renderPart("LockSpring"); GL11.glPopMatrix(); ResourceManager.sexy.renderPart("Magazine"); - - /*renderShell(0, -0.375, 90, false); - renderShell(0.3125, -0.0625, 30, false); - renderShell(0.75, -0.125, -30, false); - renderShell(1.0625, -0.4375, -60, false); - renderShell(1.0625, -0.875, -90, false); - renderShell(1.0625, -1.3125, -90, false);*/ double p = 0.0625D; + double x = p * 17; + double y = p * -26; + double angle = 0; + Vec3NT vec = new Vec3NT(0, 0.4375, 0); // reusable, just like how toilet paper was reusable during corona + + // basically what all this does is take an array of angles and just strings together shells with the appropriate + // position and angle calculated out of the next angle, taking all previous transformations into account. + // has a second array which is the "open" position that the animation can smoothly interpolate through + double[] anglesLoaded = new double[] {0, 0, 20, 20, 50, 60, 70}; + double[] anglesUnloaded = new double[] {0, -10, -50, -60, -60, 0, 0}; + double reloadProgress = !reloading ? 1D : belt[0]; + double cycleProgress = !doesCycle ? 1 : cycle[0]; - renderShell(p * 0, p * -6, 90, true); - renderShell(p * 5, p * 1, 30, true); - renderShell(p * 12, p * -1, -30, true); - renderShell(p * 17, p * -6, -60, true); - renderShell(p * 17, p * -13, -90, true); - renderShell(p * 17, p * -20, -90, true); + double[][] shells = new double[anglesLoaded.length][3]; + + // generate belt, interp used for the reload animation + for(int i = 0; i < anglesLoaded.length; i++) { + shells[i][0] = x; + shells[i][1] = y; + shells[i][2] = angle - 90; + double delta = BobMathUtil.interp(anglesUnloaded[i], anglesLoaded[i], reloadProgress); + angle += delta; + vec.rotateAroundZDeg(-delta); + x += vec.xCoord; + y += vec.yCoord; + } + + // draw belt, interp used for cycling (shells will transform towards the position/rotation of the next shell) + for(int i = 0; i < shells.length - 1; i++) { + double[] prevShell = shells[i]; + double[] nextShell = shells[i + 1]; + renderShell( + BobMathUtil.interp(prevShell[0], nextShell[0], cycleProgress), + BobMathUtil.interp(prevShell[1], nextShell[1], cycleProgress), + BobMathUtil.interp(prevShell[2], nextShell[2], cycleProgress), true); + } GL11.glShadeModel(GL11.GL_FLAT); } @@ -113,10 +145,9 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { @Override public void setupThirdPerson(ItemStack stack) { super.setupThirdPerson(stack); - double scale = 1.25D; + double scale = 1.75D; GL11.glScaled(scale, scale, scale); - GL11.glTranslated(0, 0, 4); - + GL11.glTranslated(1, 1, 6); } @Override From 18d8fe292ce4d34aded5c036d0c4874e78ae316d Mon Sep 17 00:00:00 2001 From: MerrittK <65367913+MerrittK@users.noreply.github.com> Date: Tue, 24 Jun 2025 10:40:21 -0400 Subject: [PATCH 198/491] Fixed Advanced rocketry moon turf compat --- src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index efd778696..6b02b0610 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -360,9 +360,9 @@ public class ShredderRecipes extends SerializableRecipe { /* AR COMPAT */ Block arMoonTurf = Compat.tryLoadBlock(Compat.MOD_AR, "turf"); - if(arMoonTurf != null && gcMoonBlock != Blocks.air) ShredderRecipes.setRecipe(arMoonTurf, new ItemStack(ModBlocks.moon_turf)); //i assume it's moon turf + if(arMoonTurf != null && arMoonTurf != Blocks.air) ShredderRecipes.setRecipe(arMoonTurf, new ItemStack(ModBlocks.moon_turf)); //i assume it's moon turf Block arMoonTurfDark = Compat.tryLoadBlock(Compat.MOD_AR, "turfDark"); - if(arMoonTurfDark != null && gcMoonBlock != Blocks.air) ShredderRecipes.setRecipe(arMoonTurfDark, new ItemStack(ModBlocks.moon_turf)); //probably moon dirt? would have helped if i had ever played AR for more than 5 seconds + if(arMoonTurfDark != null && arMoonTurfDark != Blocks.air) ShredderRecipes.setRecipe(arMoonTurfDark, new ItemStack(ModBlocks.moon_turf)); //probably moon dirt? would have helped if i had ever played AR for more than 5 seconds } /** From 7737ac7989881a68aa88df285ebca17b33360247 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Tue, 24 Jun 2025 17:46:18 -0400 Subject: [PATCH 199/491] Rotary Furnace Port Tooltip Says what it does on the tin, hovering over the rotary furnace steam, fluid, and fuel ports, tells you what each one is for Also gets rid of a vanilla obfuscation ID variable on a NTM class for strange reasons --- .../blocks/machine/MachineRotaryFurnace.java | 60 ++++++++++++++++++- .../com/hbm/entity/particle/EntityModFX.java | 5 +- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java b/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java index 1f5e3d119..e252c8445 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java +++ b/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java @@ -1,15 +1,23 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineRotaryFurnace; +import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.util.ForgeDirection; -public class MachineRotaryFurnace extends BlockDummyable { +import java.util.ArrayList; +import java.util.List; + +public class MachineRotaryFurnace extends BlockDummyable implements ILookOverlay { public MachineRotaryFurnace(Material mat) { super(mat); @@ -56,4 +64,54 @@ public class MachineRotaryFurnace extends BlockDummyable { //solid fuel this.makeExtra(world, x + dir.offsetX + rot.offsetX, y, z + dir.offsetZ + rot.offsetZ); } + + @Override + public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) { + + int[] pos = this.findCore(world, x, y, z); + + if(pos == null) return; + + TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); + + if(!(te instanceof TileEntityMachineRotaryFurnace)) return; + + TileEntityMachineRotaryFurnace furnace = (TileEntityMachineRotaryFurnace) te; + + ForgeDirection dir = ForgeDirection.getOrientation(furnace.getBlockMetadata() - offset); + + List text = new ArrayList<>(); + + //steam + if(hitCheck(dir, pos[0], pos[1], pos[2], -1, -1, 0, x, y, z) || hitCheck(dir, pos[0], pos[1], pos[2], -1, -2, 0, x, y, z)) { + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + furnace.tanks[1].getTankType().getLocalizedName()); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + furnace.tanks[2].getTankType().getLocalizedName()); + } + + //fluids + if(hitCheck(dir, pos[0], pos[1], pos[2], 1, 2, 0, x, y, z) || hitCheck(dir, pos[0], pos[1], pos[2], -1, 2, 0, x, y, z)) { + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + furnace.tanks[0].getTankType().getLocalizedName()); + } + + if(hitCheck(dir, pos[0], pos[1], pos[2], 1, 1, 0, x, y, z)) { + text.add(EnumChatFormatting.YELLOW + "-> " + EnumChatFormatting.RESET + "Fuel"); + } + + + if(!text.isEmpty()) { + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + } + + protected boolean hitCheck(ForgeDirection dir, int coreX, int coreY, int coreZ, int exDir, int exRot, int exY, int hitX, int hitY, int hitZ) { + + ForgeDirection turn = dir.getRotation(ForgeDirection.DOWN); + + int iX = coreX + dir.offsetX * exDir + turn.offsetX * exRot; + int iY = coreY + exY; + int iZ = coreZ + dir.offsetZ * exDir + turn.offsetZ * exRot; + + return iX == hitX && iZ == hitZ && iY == hitY; + } + } diff --git a/src/main/java/com/hbm/entity/particle/EntityModFX.java b/src/main/java/com/hbm/entity/particle/EntityModFX.java index e416965d4..16efa997f 100644 --- a/src/main/java/com/hbm/entity/particle/EntityModFX.java +++ b/src/main/java/com/hbm/entity/particle/EntityModFX.java @@ -31,7 +31,6 @@ public class EntityModFX extends Entity public static double interpPosX; public static double interpPosY; public static double interpPosZ; - public static final String __OBFID = "CL_00000914"; float smokeParticleScale; public int particleAge; public int maxAge; @@ -39,7 +38,7 @@ public class EntityModFX extends Entity public EntityModFX(World world) { super(world); } - + protected EntityModFX(World p_i1218_1_, double p_i1218_2_, double p_i1218_4_, double p_i1218_6_) { super(p_i1218_1_); @@ -257,7 +256,7 @@ public class EntityModFX extends Entity { return this.getClass().getSimpleName() + ", Pos (" + this.posX + "," + this.posY + "," + this.posZ + "), RGBA (" + this.particleRed + "," + this.particleGreen + "," + this.particleBlue + "," + this.particleAlpha + "), Age " + this.particleAge; } - + @Override @SideOnly(Side.CLIENT) public boolean isInRangeToRenderDist(double distance) From 2a7033bb76c47e353de01d8046de7728dcd5227f Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 25 Jun 2025 15:59:05 +0200 Subject: [PATCH 200/491] lord of the lockerroom ft. big macintosh and his massive gun --- .../java/api/hbm/fluidmk2/package-info.java | 22 +++++++++++----- .../com/hbm/inventory/fluid/FluidType.java | 1 + .../java/com/hbm/inventory/fluid/Fluids.java | 16 ++++++++++-- .../weapon/sedna/factory/Orchestras.java | 13 +++++----- .../weapon/sedna/factory/XFactory12ga.java | 22 +++++++++++----- src/main/java/com/hbm/main/MainRegistry.java | 6 ++++- .../item/weapon/sedna/ItemRenderSexy.java | 26 ++++++++++++++----- 7 files changed, 77 insertions(+), 29 deletions(-) diff --git a/src/main/java/api/hbm/fluidmk2/package-info.java b/src/main/java/api/hbm/fluidmk2/package-info.java index b948336d8..fae3f6c16 100644 --- a/src/main/java/api/hbm/fluidmk2/package-info.java +++ b/src/main/java/api/hbm/fluidmk2/package-info.java @@ -1,10 +1,3 @@ -/** - * - */ -/** - * @author hbm - * - */ package api.hbm.fluidmk2; /* @@ -13,4 +6,19 @@ It's rather shrimple: the shiny new energy system using universal nodespace, but Has a few extra bits and pieces for handling, but the concept is basically the same. Sounds good? +*/ + +/* + +Quick explanation for implementing new fluids via addon: +Fluids are subject to /ntmreload so they get wiped and rebuilt using the init function in Fluids, which means that if fluids +are simply added externally during startup, they are removed permanently until the game restarts. Same concept as with recipes, really. +To fix this we need to make sure that externally registered fluids are re-registered during reload, for that purpose we have +IFluidRegisterListener, a simple interface with a small method that runs whenever the fluid list is reloaded. IFluidRegisterListeners +need to be registered with CompatExternal.registerFluidRegisterListener to be used, make sure to do this during PreInit. +Inside the IFluidRegisterListener, fluids can be added using CompatFluidRegistry.registerFluid, which will generate a Fluid instance +using the supplied arguments and automatically register it. Do note that like with custom fluids, fluids need numeric IDs assigned manually. +To prevent collisions with stock fluids when NTM updates, make sure to choose a high starting ID (e.g. 10,000). +The fluid created by registerFluid can have traits added to them, just like how NTM does it with its stock fluids. + */ \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/fluid/FluidType.java b/src/main/java/com/hbm/inventory/fluid/FluidType.java index 4cecc13a5..f983c90ed 100644 --- a/src/main/java/com/hbm/inventory/fluid/FluidType.java +++ b/src/main/java/com/hbm/inventory/fluid/FluidType.java @@ -109,6 +109,7 @@ public class FluidType { this.id = id; Fluids.register(this, id); + Fluids.foreignFluids.add(this); } public FluidType setTemp(int temperature) { diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 1a0b5dcd2..cadd39969 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -197,6 +197,7 @@ public class Fluids { public static final HashBiMap renameMapping = HashBiMap.create(); public static List customFluids = new ArrayList(); + public static List foreignFluids = new ArrayList(); private static final HashMap idMapping = new HashMap(); private static final HashMap nameMapping = new HashMap(); @@ -593,8 +594,6 @@ public class Fluids { // LEGACY ACID = PEROXIDE; - - for(IFluidRegisterListener listener : additionalListeners) listener.onFluidsLoad(); for(FluidType custom : customFluids) metaOrder.add(custom); @@ -877,10 +876,12 @@ public class Fluids { ex.printStackTrace(); } } + public static void reloadFluids(){ File folder = MainRegistry.configHbmDir; File customTypes = new File(folder.getAbsolutePath() + File.separatorChar + "hbmFluidTypes.json"); if(!customTypes.exists()) initDefaultFluids(customTypes); + for(FluidType type : customFluids){ idMapping.remove(type.getID()); registerOrder.remove(type); @@ -888,6 +889,15 @@ public class Fluids { metaOrder.remove(type); } customFluids.clear(); + + for(FluidType type : foreignFluids){ + idMapping.remove(type.getID()); + registerOrder.remove(type); + nameMapping.remove(type.getName()); + metaOrder.remove(type); + } + foreignFluids.clear(); + readCustomFluids(customTypes); for(FluidType custom : customFluids) metaOrder.add(custom); File config = new File(MainRegistry.configHbmDir.getAbsolutePath() + File.separatorChar + "hbmFluidTraits.json"); @@ -898,6 +908,8 @@ public class Fluids { } else { readTraits(config); } + + for(IFluidRegisterListener listener : additionalListeners) listener.onFluidsLoad(); } private static void registerCalculatedFuel(FluidType type, double base, double combustMult, FuelGrade grade) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index b8bbe7266..dddfbeda4 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -933,23 +933,24 @@ public class Orchestras { if(entity.worldObj.isRemote) return; AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + boolean aiming = ItemGunBaseNT.getIsAiming(stack); if(type == AnimType.CYCLE) { if(timer == 0 && ctx.config.getReceivers(stack)[0].getMagazine(stack).getType(stack, null) == XFactory12ga.g12_equestrian_bj) { ItemGunBaseNT.setTimer(stack, 0, 20); } + + if(timer == 2) { + SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, -0.125, aiming ? -0.125 : -0.25D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 2.5F, (float)entity.getRNG().nextGaussian() * -20F + 15F, casing.getName(), false, 60, 0.5D, 20); + } } if(type == AnimType.CYCLE_DRY) { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); } if(type == AnimType.RELOAD) { - if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); - if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); - } - if(type == AnimType.INSPECT) { - if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); - if(timer == 28) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); + if(timer == 55) ctx.config.getReceivers(stack)[0].getMagazine(stack).reloadAction(stack, ctx.inventory); } }; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index 24df3eeff..abd376759 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -375,9 +375,9 @@ public class XFactory12ga { ).setUnlocalizedName("gun_autoshotgun_shredder"); ModItems.gun_autoshotgun_sexy = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() - .dura(5_000).draw(10).inspect(33).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) + .dura(5_000).draw(20).inspect(33).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) - .dmg(64F).delay(4).auto(true).dryfireAfterAuto(true).reload(44).jam(19).sound("hbm:weapon.fire.shotgunAuto", 1.0F, 1.0F) + .dmg(64F).delay(4).auto(true).dryfireAfterAuto(true).reload(110).jam(19).sound("hbm:weapon.fire.shotgunAuto", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 100).addConfigs(g12_equestrian_bj, g12_bp, g12_bp_magnum, g12_bp_slug, g12, g12_slug, g12_flechette, g12_magnum, g12_explosive, g12_phosphorus)) .offset(0.75, -0.125, -0.25) .setupStandardFire().recoil(LAMBDA_RECOIL_SEXY)) @@ -653,17 +653,25 @@ public class XFactory12ga { @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_SEXY_ANIMS = (stack, type) -> { switch(type) { - case CYCLE: return new BusAnimation() + case EQUIP: return new BusAnimation() + .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 1000, IType.SIN_DOWN)); + case CYCLE: + int amount = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, null); + return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence().hold(50).addPos(0, 0, -0.25, 50, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL)) .addBus("BARREL", new BusAnimationSequence().addPos(0, 0, -1, 50, IType.SIN_DOWN).addPos(0, 0, 0, 150)) .addBus("CYCLE", new BusAnimationSequence().addPos(1, 0, 0, 150)) - .addBus("HOOD", new BusAnimationSequence().hold(50).addPos(3, 0, 0, 50, IType.SIN_DOWN).addPos(0, 0, 0, 50, IType.SIN_UP)); + .addBus("HOOD", new BusAnimationSequence().hold(50).addPos(3, 0, 0, 50, IType.SIN_DOWN).addPos(0, 0, 0, 50, IType.SIN_UP)) + .addBus("SHELLS", new BusAnimationSequence().setPos(amount - 1, 0, 0)); case CYCLE_DRY: return new BusAnimation() .addBus("CYCLE", new BusAnimationSequence().addPos(0, 0, 18, 50)); case RELOAD: return new BusAnimation() - .addBus("LEVER", new BusAnimationSequence().addPos(0, 0, 1, 150).hold(2750).addPos(0, 0, 0, 150)) - .addBus("HOOD", new BusAnimationSequence().hold(250).addPos(60, 0, 0, 500, IType.SIN_FULL).hold(1500).addPos(0, 0, 0, 500, IType.SIN_FULL)) - .addBus("BELT", new BusAnimationSequence().setPos(1, 0, 0).hold(750).addPos(0, 0, 0, 500, IType.SIN_FULL).hold(500).addPos(1, 0, 0, 500, IType.SIN_FULL)); + .addBus("LOWER", new BusAnimationSequence().addPos(15, 0, 0, 500, IType.SIN_FULL).hold(2750).addPos(12, 0, 0, 100, IType.SIN_DOWN).addPos(15, 0, 0, 100, IType.SIN_FULL).hold(1050).addPos(18, 0, 0, 100, IType.SIN_DOWN).addPos(15, 0, 0, 100, IType.SIN_FULL).hold(300).addPos(0, 0, 0, 500, IType.SIN_FULL)) + .addBus("LEVER", new BusAnimationSequence().addPos(0, 0, 1, 150).hold(4700).addPos(0, 0, 0, 150)) + .addBus("HOOD", new BusAnimationSequence().hold(250).addPos(60, 0, 0, 500, IType.SIN_FULL).hold(3250).addPos(0, 0, 0, 500, IType.SIN_UP)) + .addBus("BELT", new BusAnimationSequence().setPos(1, 0, 0).hold(750).addPos(0, 0, 0, 500, IType.SIN_UP).hold(2000).addPos(1, 0, 0, 500, IType.SIN_UP)) + .addBus("MAG", new BusAnimationSequence().hold(1500).addPos(0, -1, 0, 250, IType.SIN_UP).addPos(2, -1, 0, 500, IType.SIN_UP).addPos(7, 1, 0, 250, IType.SIN_UP).addPos(15, 2, 0, 250).setPos(0, -2, 0).addPos(0, 0, 0, 500, IType.SIN_UP)) + .addBus("MAGROT", new BusAnimationSequence().hold(2250).addPos(0, 0, -180, 500, IType.SIN_FULL).setPos(0, 0, 0)); } return null; diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index ab9f2f995..0826c53bd 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -899,10 +899,14 @@ public class MainRegistry { Compat.handleRailcraftNonsense(); SuicideThreadDump.register(); CommandReloadClient.register(); + + // to make sure that foreign registered fluids are accounted for, + // even when the reload listener is registered too late due to load order + Fluids.reloadFluids(); //ExplosionTests.runTest(); } - + @EventHandler public void preInit(FMLPreInitializationEvent event) { if(logger == null) diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java index 901d129fd..c237a95e4 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java @@ -48,18 +48,27 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { boolean doesCycle = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("CYCLE") != null; boolean reloading = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("BELT") != null; + boolean useShellCount = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("SHELLS") != null; double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); + double[] lower = HbmAnimations.getRelevantTransformation("LOWER"); double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); double[] cycle = HbmAnimations.getRelevantTransformation("CYCLE"); double[] barrel = HbmAnimations.getRelevantTransformation("BARREL"); double[] hood = HbmAnimations.getRelevantTransformation("HOOD"); double[] lever = HbmAnimations.getRelevantTransformation("LEVER"); double[] belt = HbmAnimations.getRelevantTransformation("BELT"); + double[] mag = HbmAnimations.getRelevantTransformation("MAG"); + double[] magRot = HbmAnimations.getRelevantTransformation("MAGROT"); + double[] shellCount = HbmAnimations.getRelevantTransformation("SHELLS"); GL11.glTranslated(0, -1, -8); GL11.glRotated(equip[0], 1, 0, 0); GL11.glTranslated(0, 1, 8); + GL11.glTranslated(0, 0, -6); + GL11.glRotated(lower[0], 1, 0, 0); + GL11.glTranslated(0, 0, 6); + GL11.glTranslated(0, 0, recoil[2]); GL11.glShadeModel(GL11.GL_SMOOTH); @@ -72,9 +81,9 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { GL11.glPopMatrix(); GL11.glPushMatrix(); - GL11.glTranslated(0, 0, 0.375); - //GL11.glScaled(1, 1, 0.75); GL11.glTranslated(0, 0, -0.375); + GL11.glScaled(1, 1, 1 + 0.457247371D * barrel[2]); + GL11.glTranslated(0, 0, 0.375); ResourceManager.sexy.renderPart("RecoilSpring"); GL11.glPopMatrix(); @@ -99,6 +108,11 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { ResourceManager.sexy.renderPart("LockSpring"); GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glTranslated(mag[0], mag[1], mag[2]); + GL11.glTranslated(0, -1, 0); + GL11.glRotated(magRot[2], 0, 0, 1); + GL11.glTranslated(0, 1, 0); ResourceManager.sexy.renderPart("Magazine"); double p = 0.0625D; @@ -129,15 +143,15 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { y += vec.yCoord; } + int shellAmount = useShellCount ? (int) shellCount[0] : gun.getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, null); + // draw belt, interp used for cycling (shells will transform towards the position/rotation of the next shell) for(int i = 0; i < shells.length - 1; i++) { double[] prevShell = shells[i]; double[] nextShell = shells[i + 1]; - renderShell( - BobMathUtil.interp(prevShell[0], nextShell[0], cycleProgress), - BobMathUtil.interp(prevShell[1], nextShell[1], cycleProgress), - BobMathUtil.interp(prevShell[2], nextShell[2], cycleProgress), true); + renderShell(prevShell[0], nextShell[0], prevShell[1], nextShell[1], prevShell[2], nextShell[2], shells.length - i < shellAmount + 2, cycleProgress); } + GL11.glPopMatrix(); GL11.glShadeModel(GL11.GL_FLAT); } From a982616f89aa0ace4571012507a9426dcd2ddfd9 Mon Sep 17 00:00:00 2001 From: MerrittK <65367913+MerrittK@users.noreply.github.com> Date: Wed, 25 Jun 2025 15:12:00 -0400 Subject: [PATCH 201/491] I had to reinvent the wheel because of a different config implementation. --- .../java/com/hbm/config/CommonConfig.java | 4 ++-- .../java/com/hbm/config/GeneralConfig.java | 6 +++-- .../inventory/recipes/ShredderRecipes.java | 5 ++-- src/main/java/com/hbm/util/Compat.java | 24 ++++++++++++++++++- src/main/java/com/hbm/util/ItemStackUtil.java | 16 +++++++++++++ 5 files changed, 48 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/hbm/config/CommonConfig.java b/src/main/java/com/hbm/config/CommonConfig.java index 7fce253e8..d6ead8f95 100644 --- a/src/main/java/com/hbm/config/CommonConfig.java +++ b/src/main/java/com/hbm/config/CommonConfig.java @@ -81,8 +81,8 @@ public class CommonConfig { prop.comment = comment; return prop.getIntList(); } - public static String[] createConfigStringList(Configuration config, String category, String name, String comment) { - Property prop = config.get(category, name, new String[] { "PLACEHOLDER" }); + public static String[] createConfigStringList(Configuration config, String category, String name, String comment, String[] def) { + Property prop = config.get(category, name, def); prop.comment = comment; return prop.getStringList(); } diff --git a/src/main/java/com/hbm/config/GeneralConfig.java b/src/main/java/com/hbm/config/GeneralConfig.java index 09900f007..c843cde57 100644 --- a/src/main/java/com/hbm/config/GeneralConfig.java +++ b/src/main/java/com/hbm/config/GeneralConfig.java @@ -1,7 +1,7 @@ package com.hbm.config; import net.minecraftforge.common.config.Configuration; - +import com.hbm.lib.RefStrings; public class GeneralConfig { public static boolean enableThermosPreventer = true; @@ -70,6 +70,7 @@ public class GeneralConfig { public static boolean enableLBSMSafeMEDrives = true; public static boolean enableLBSMIGen = true; public static int schrabRate = 20; + public static String[] preferredOutputMod = new String[] {RefStrings.MODID}; public static void loadFromConfig(Configuration config) { @@ -117,7 +118,8 @@ public class GeneralConfig { normalSoundChannels = CommonConfig.createConfigInt(config, CATEGORY_GENERAL, "1.41_normalSoundChannels", "The amount of channels to create while 1.39_enableSoundExtension is enabled.\n" + "Note that a value below 28 or above 200 can cause buggy sounds and issues with other mods running out of sound memory.", 100); - + preferredOutputMod = CommonConfig.createConfigStringList(config,CATEGORY_GENERAL,"1.42_preferredOutputMod", + "The mod which is preferred as output when certain machines autogenerate recipes. Currently used for the shredder", new String[] {RefStrings.MODID}); enableExpensiveMode = config.get(CATEGORY_GENERAL, "1.99_enableExpensiveMode", false, "It does what the name implies.").getBoolean(false); final String CATEGORY_528 = CommonConfig.CATEGORY_528; diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index 6b02b0610..908804a5e 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -374,8 +374,9 @@ public class ShredderRecipes extends SerializableRecipe { List matches = OreDictionary.getOres("dust" + name); - if(matches != null && !matches.isEmpty()) - return matches.get(0).copy(); + if(matches != null && !matches.isEmpty()) { + return Compat.getPreferredOreOutput(matches); + } return new ItemStack(ModItems.scrap); } diff --git a/src/main/java/com/hbm/util/Compat.java b/src/main/java/com/hbm/util/Compat.java index cac127f1a..db59a6026 100644 --- a/src/main/java/com/hbm/util/Compat.java +++ b/src/main/java/com/hbm/util/Compat.java @@ -49,7 +49,29 @@ public class Compat { private static String getReg(String domain, String name) { return domain + ":" + name; } - + + public static ItemStack getPreferredOreOutput(List oreList) { + int lowestPref = -1; + ItemStack preferredStack = null; + + for(ItemStack item : oreList) { + String modid = ItemStackUtil.getModIdFromItemStack(item); + for(int i = 0; i < GeneralConfig.preferredOutputMod.length; i++) { + if (modid.equals(GeneralConfig.preferredOutputMod[i])){ + if (lowestPref<0 || i Date: Thu, 26 Jun 2025 00:32:37 +0200 Subject: [PATCH 202/491] girl dinner (a bottle of whiskey) --- .../weapon/sedna/factory/XFactory12ga.java | 3 + .../com/hbm/main/ModEventHandlerClient.java | 2 +- .../java/com/hbm/main/ResourceManager.java | 2 + .../item/weapon/sedna/ItemRenderSexy.java | 24 +- .../assets/hbm/models/weapons/whiskey.obj | 605 ++++++++++++++++++ .../models/weapons/whiskey (Kopie).png | Bin 0 -> 37269 bytes .../hbm/textures/models/weapons/whiskey.png | Bin 0 -> 34357 bytes .../hbm/textures/models/weapons/whiskey.xcf | Bin 0 -> 267625 bytes 8 files changed, 632 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/assets/hbm/models/weapons/whiskey.obj create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/whiskey (Kopie).png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/whiskey.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/whiskey.xcf diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index abd376759..777c2d4c4 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -672,6 +672,9 @@ public class XFactory12ga { .addBus("BELT", new BusAnimationSequence().setPos(1, 0, 0).hold(750).addPos(0, 0, 0, 500, IType.SIN_UP).hold(2000).addPos(1, 0, 0, 500, IType.SIN_UP)) .addBus("MAG", new BusAnimationSequence().hold(1500).addPos(0, -1, 0, 250, IType.SIN_UP).addPos(2, -1, 0, 500, IType.SIN_UP).addPos(7, 1, 0, 250, IType.SIN_UP).addPos(15, 2, 0, 250).setPos(0, -2, 0).addPos(0, 0, 0, 500, IType.SIN_UP)) .addBus("MAGROT", new BusAnimationSequence().hold(2250).addPos(0, 0, -180, 500, IType.SIN_FULL).setPos(0, 0, 0)); + case INSPECT: return new BusAnimation() + .addBus("BOTTLE", new BusAnimationSequence().setPos(8, -8, -2).addPos(6, -4, -2, 500, IType.SIN_DOWN).addPos(3, -3, -5, 500, IType.SIN_FULL).addPos(3, -2, -5, 1000).addPos(4, -6, -2, 750, IType.SIN_FULL).addPos(6, -8, -2, 500, IType.SIN_UP)) + .addBus("SIP", new BusAnimationSequence().setPos(25, 0, 0).hold(500).addPos(-90, 0, 0, 500, IType.SIN_FULL).addPos(-110, 0, 0, 1000).addPos(25, 0, 0, 750, IType.SIN_FULL)); } return null; diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index ce23a4e69..e9e40dfe0 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -923,7 +923,7 @@ public class ModEventHandlerClient { ); String prefix = "Slot "; - int gunScale = 8; + //int gunScale = 8; int slotScale = 1; boolean ignoreNonNTM = true; boolean onlyGuns = true; diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 889727560..5ec3d90fc 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -885,6 +885,7 @@ public class ResourceManager { public static final IModelCustom m2 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/m2_browning.obj")).asVBO(); public static final IModelCustom shredder = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/shredder.obj")).asVBO(); public static final IModelCustom sexy = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/sexy.obj")).asVBO(); + public static final IModelCustom whiskey = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/whiskey.obj")).asVBO(); public static final IModelCustom quadro = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/quadro.obj")).asVBO(); public static final IModelCustom mike_hawk = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/mike_hawk.obj")).asVBO(); public static final IModelCustom minigun = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/minigun.obj")).asVBO(); @@ -1009,6 +1010,7 @@ public class ResourceManager { public static final ResourceLocation shredder_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder.png"); public static final ResourceLocation shredder_orig_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder_orig.png"); public static final ResourceLocation sexy_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sexy_real_no_fake.png"); + public static final ResourceLocation whiskey_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/whiskey.png"); public static final ResourceLocation quadro_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/quadro.png"); public static final ResourceLocation quadro_rocket_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/quadro_rocket.png"); public static final ResourceLocation minigun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/minigun.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java index c237a95e4..acd889ab4 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java @@ -42,13 +42,13 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { @Override public void renderFirstPerson(ItemStack stack) { ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.sexy_tex); double scale = 0.375D; GL11.glScaled(scale, scale, scale); boolean doesCycle = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("CYCLE") != null; boolean reloading = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("BELT") != null; boolean useShellCount = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("SHELLS") != null; + boolean girldinner = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("BOTTLE") != null; double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); double[] lower = HbmAnimations.getRelevantTransformation("LOWER"); double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); @@ -60,6 +60,26 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { double[] mag = HbmAnimations.getRelevantTransformation("MAG"); double[] magRot = HbmAnimations.getRelevantTransformation("MAGROT"); double[] shellCount = HbmAnimations.getRelevantTransformation("SHELLS"); + double[] bottle = HbmAnimations.getRelevantTransformation("BOTTLE"); + double[] sippy = HbmAnimations.getRelevantTransformation("SIP"); + + GL11.glShadeModel(GL11.GL_SMOOTH); + + if(girldinner) { + GL11.glPushMatrix(); + GL11.glTranslated(bottle[0], bottle[1], bottle[2]); + GL11.glTranslated(0, 2, 0); + GL11.glRotated(sippy[0], 1, 0, 0); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(-15, 1, 0, 0); + GL11.glTranslated(0, -2, 0); + GL11.glScaled(1.5, 1.5, 1.5); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.whiskey_tex); + ResourceManager.whiskey.renderAll(); + GL11.glPopMatrix(); + } + + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.sexy_tex); GL11.glTranslated(0, -1, -8); GL11.glRotated(equip[0], 1, 0, 0); @@ -71,8 +91,6 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { GL11.glTranslated(0, 0, recoil[2]); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.sexy.renderPart("Gun"); GL11.glPushMatrix(); diff --git a/src/main/resources/assets/hbm/models/weapons/whiskey.obj b/src/main/resources/assets/hbm/models/weapons/whiskey.obj new file mode 100644 index 000000000..4c64b19d5 --- /dev/null +++ b/src/main/resources/assets/hbm/models/weapons/whiskey.obj @@ -0,0 +1,605 @@ +# Blender v2.79 (sub 0) OBJ File: 'whiskey.blend' +# www.blender.org +o Plane +v -0.437500 1.750000 0.375000 +v -0.375000 1.750000 0.437500 +v -0.375000 1.750000 -0.437500 +v -0.437500 1.750000 -0.375000 +v 0.437500 1.750000 -0.375000 +v 0.375000 1.750000 -0.437500 +v 0.375000 1.750000 0.437500 +v 0.437500 1.750000 0.375000 +v 0.437500 0.250000 0.375000 +v 0.375000 0.250000 0.437500 +v 0.375000 0.250000 -0.437500 +v 0.437500 0.250000 -0.375000 +v -0.437500 0.250000 -0.375000 +v -0.375000 0.250000 -0.437500 +v -0.375000 0.250000 0.437500 +v -0.437500 0.250000 0.375000 +v -0.375000 0.000000 0.500000 +v -0.500000 0.000000 0.375000 +v 0.500000 0.000000 0.375000 +v 0.375000 0.000000 0.500000 +v -0.500000 0.000000 -0.375000 +v -0.375000 0.000000 -0.500000 +v 0.375000 0.000000 -0.500000 +v 0.500000 0.000000 -0.375000 +v -0.500000 2.000000 0.375000 +v -0.375000 2.000000 0.500000 +v 0.375000 2.000000 0.500000 +v 0.500000 2.000000 0.375000 +v -0.375000 2.000000 -0.500000 +v -0.500000 2.000000 -0.375000 +v 0.500000 2.000000 -0.375000 +v 0.375000 2.000000 -0.500000 +v -0.500000 0.187500 0.375000 +v -0.375000 0.187500 0.500000 +v -0.375000 0.187500 -0.500000 +v -0.500000 0.187500 -0.375000 +v 0.500000 0.187500 -0.375000 +v 0.375000 0.187500 -0.500000 +v 0.375000 0.187500 0.500000 +v 0.500000 0.187500 0.375000 +v -0.500000 1.812500 -0.375000 +v -0.375000 1.812500 -0.500000 +v -0.375000 1.812500 0.500000 +v -0.500000 1.812500 0.375000 +v 0.375000 1.812500 -0.500000 +v 0.500000 1.812500 -0.375000 +v 0.500000 1.812500 0.375000 +v 0.375000 1.812500 0.500000 +v 0.000000 2.125000 -0.312500 +v -0.156250 2.125000 -0.270633 +v -0.270633 2.125000 -0.156250 +v -0.312500 2.125000 0.000000 +v -0.270633 2.125000 0.156250 +v -0.156250 2.125000 0.270633 +v -0.000000 2.125000 0.312500 +v 0.156250 2.125000 0.270633 +v 0.270633 2.125000 0.156250 +v 0.312500 2.125000 0.000000 +v 0.270633 2.125000 -0.156250 +v 0.156250 2.125000 -0.270633 +v 0.000000 2.250000 -0.187500 +v -0.093750 2.250000 -0.162380 +v -0.162380 2.250000 -0.093750 +v -0.187500 2.250000 0.000000 +v -0.162380 2.250000 0.093750 +v -0.093750 2.250000 0.162380 +v -0.000000 2.250000 0.187500 +v 0.093750 2.250000 0.162380 +v 0.162380 2.250000 0.093750 +v 0.187500 2.250000 0.000000 +v 0.162380 2.250000 -0.093750 +v 0.093750 2.250000 -0.162380 +v 0.000000 3.000000 -0.187500 +v -0.093750 3.000000 -0.162380 +v -0.162380 3.000000 -0.093750 +v -0.187500 3.000000 0.000000 +v -0.162380 3.000000 0.093750 +v -0.093750 3.000000 0.162380 +v -0.000000 3.000000 0.187500 +v 0.093750 3.000000 0.162380 +v 0.162380 3.000000 0.093750 +v 0.187500 3.000000 0.000000 +v 0.162380 3.000000 -0.093750 +v 0.093750 3.000000 -0.162380 +v 0.000000 3.000000 -0.125000 +v -0.062500 3.000000 -0.108253 +v -0.108253 3.000000 -0.062500 +v -0.125000 3.000000 0.000000 +v -0.108253 3.000000 0.062500 +v -0.062500 3.000000 0.108253 +v -0.000000 3.000000 0.125000 +v 0.062500 3.000000 0.108253 +v 0.108253 3.000000 0.062500 +v 0.125000 3.000000 0.000000 +v 0.108253 3.000000 -0.062500 +v 0.062500 3.000000 -0.108253 +v 0.000000 2.500000 -0.125000 +v -0.062500 2.500000 -0.108253 +v -0.108253 2.500000 -0.062500 +v -0.125000 2.500000 0.000000 +v -0.108253 2.500000 0.062500 +v -0.062500 2.500000 0.108253 +v -0.000000 2.500000 0.125000 +v 0.062500 2.500000 0.108253 +v 0.108253 2.500000 0.062500 +v 0.125000 2.500000 0.000000 +v 0.108253 2.500000 -0.062500 +v 0.062500 2.500000 -0.108253 +vt 0.052937 0.823977 +vt 0.225652 0.867155 +vt 0.052937 0.867155 +vt 0.693212 0.823976 +vt 0.865928 0.867155 +vt 0.693212 0.867155 +vt 0.266362 0.823977 +vt 0.439078 0.867155 +vt 0.266362 0.867155 +vt 0.439078 0.758665 +vt 0.266377 0.715427 +vt 0.439093 0.715486 +vt 0.865928 0.803621 +vt 0.865928 0.823976 +vt 0.225652 0.758591 +vt 0.052952 0.715353 +vt 0.225667 0.715413 +vt 0.865929 0.758812 +vt 0.693228 0.715574 +vt 0.865943 0.715633 +vt 0.479787 0.823977 +vt 0.652503 0.867155 +vt 0.479787 0.867155 +vt 0.652503 0.758739 +vt 0.479802 0.715500 +vt 0.652518 0.715560 +vt 0.439078 0.823977 +vt 0.652503 0.823976 +vt 0.225652 0.823977 +vt 0.012227 0.823977 +vt 0.012227 0.867155 +vt 0.052937 0.758532 +vt 0.012242 0.715339 +vt 0.693213 0.758753 +vt 0.266362 0.758606 +vt 0.479787 0.758679 +vt 0.508551 0.382113 +vt 0.630679 0.544951 +vt 0.467841 0.667080 +vt 0.683035 0.806349 +vt 0.469610 0.806349 +vt 0.439078 0.803622 +vt 0.652503 0.803622 +vt 0.042759 0.806349 +vt 0.256185 0.806349 +vt 0.225652 0.803622 +vt 0.591439 0.012228 +vt 0.571084 0.357659 +vt 0.571084 0.012228 +vt 0.398369 0.357659 +vt 0.398369 0.012228 +vt 0.184943 0.012227 +vt 0.012227 0.357659 +vt 0.012228 0.012227 +vt 0.378014 0.357659 +vt 0.378014 0.012228 +vt 0.784510 0.012227 +vt 0.764155 0.357659 +vt 0.764155 0.012227 +vt 0.205298 0.357659 +vt 0.205298 0.012227 +vt 0.184943 0.357659 +vt 0.591439 0.357659 +vt 0.439071 0.779020 +vt 0.266355 0.778960 +vt 0.469604 0.776303 +vt 0.449249 0.776296 +vt 0.652496 0.779094 +vt 0.479780 0.779034 +vt 0.683029 0.776377 +vt 0.662674 0.776370 +vt 0.865922 0.779167 +vt 0.693206 0.779108 +vt 0.012227 0.758518 +vt 0.042753 0.776156 +vt 0.022398 0.776149 +vt 0.225645 0.778946 +vt 0.052930 0.778887 +vt 0.256178 0.776230 +vt 0.235824 0.776223 +vt 0.827850 0.426816 +vt 0.841753 0.445442 +vt 0.827850 0.449167 +vt 0.827850 0.404465 +vt 0.841753 0.423091 +vt 0.827850 0.382113 +vt 0.841753 0.400739 +vt 0.827849 0.627976 +vt 0.841752 0.646602 +vt 0.827849 0.650328 +vt 0.827849 0.605625 +vt 0.841752 0.624251 +vt 0.827850 0.583274 +vt 0.841752 0.601900 +vt 0.841752 0.564648 +vt 0.841752 0.579549 +vt 0.827850 0.560923 +vt 0.841752 0.542297 +vt 0.841752 0.557198 +vt 0.827850 0.538572 +vt 0.841753 0.519946 +vt 0.841752 0.534846 +vt 0.827850 0.516220 +vt 0.841753 0.497595 +vt 0.841753 0.512495 +vt 0.827850 0.493869 +vt 0.841753 0.475243 +vt 0.841753 0.490144 +vt 0.827850 0.471518 +vt 0.841753 0.452892 +vt 0.841753 0.467793 +vt 0.857124 0.159276 +vt 0.864574 0.187081 +vt 0.844220 0.207436 +vt 0.693212 0.803622 +vt 0.345713 0.544951 +vt 0.345713 0.504242 +vt 0.467841 0.382113 +vt 0.630679 0.504242 +vt 0.508551 0.667080 +vt 0.662680 0.806349 +vt 0.449255 0.806349 +vt 0.266362 0.803622 +vt 0.479787 0.803622 +vt 0.022405 0.806349 +vt 0.235830 0.806349 +vt 0.052937 0.803622 +vt 0.784510 0.357659 +vt 0.841753 0.430541 +vt 0.841753 0.408190 +vt 0.841753 0.385839 +vt 0.841752 0.631702 +vt 0.841752 0.609350 +vt 0.841752 0.586999 +vt 0.829319 0.207436 +vt 0.816415 0.199985 +vt 0.808964 0.187081 +vt 0.808964 0.172180 +vt 0.816415 0.159276 +vt 0.829319 0.151826 +vt 0.844220 0.151826 +vt 0.864574 0.172180 +vt 0.857124 0.199985 +vt 0.321258 0.518454 +vt 0.238315 0.521438 +vt 0.220754 0.488898 +vt 0.237168 0.559627 +vt 0.184896 0.690885 +vt 0.182030 0.607808 +vt 0.214707 0.590337 +vt 0.139480 0.690836 +vt 0.012227 0.554530 +vt 0.095226 0.551540 +vt 0.112801 0.584112 +vt 0.012232 0.509129 +vt 0.148725 0.382113 +vt 0.189887 0.466440 +vt 0.151549 0.465183 +vt 0.118860 0.482620 +vt 0.200962 0.548521 +vt 0.190371 0.563643 +vt 0.143679 0.606579 +vt 0.173577 0.571533 +vt 0.139421 0.559473 +vt 0.154899 0.570068 +vt 0.096376 0.513327 +vt 0.131245 0.542854 +vt 0.132598 0.524424 +vt 0.143165 0.509279 +vt 0.159957 0.501494 +vt 0.178656 0.502956 +vt 0.194151 0.513552 +vt 0.202343 0.530124 +vt 0.655134 0.605624 +vt 0.655134 0.627975 +vt 0.655135 0.449166 +vt 0.655135 0.471518 +vt 0.655135 0.404464 +vt 0.655135 0.426815 +vt 0.655134 0.516220 +vt 0.655134 0.538571 +vt 0.655134 0.583273 +vt 0.655135 0.382113 +vt 0.655135 0.493869 +vt 0.655134 0.560922 +vt 0.655133 0.650326 +vt 0.883468 0.127371 +vt 0.898369 0.012227 +vt 0.898369 0.127371 +vt 0.928170 0.127371 +vt 0.943070 0.012227 +vt 0.943071 0.127371 +vt 0.972872 0.127371 +vt 0.987773 0.012227 +vt 0.987773 0.127371 +vt 0.868567 0.127371 +vt 0.883468 0.012227 +vt 0.838766 0.127371 +vt 0.853666 0.012227 +vt 0.853666 0.127371 +vt 0.913269 0.127371 +vt 0.928170 0.012227 +vt 0.957971 0.127371 +vt 0.972872 0.012227 +vt 0.868567 0.012227 +vt 0.823865 0.127371 +vt 0.838766 0.012227 +vt 0.913269 0.012227 +vt 0.957971 0.012227 +vt 0.808964 0.127371 +vt 0.823865 0.012227 +vt 0.194123 0.382196 +vt 0.321258 0.563814 +vt 0.808964 0.012227 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 -1.0000 0.0000 +vn -0.5774 0.5774 0.5774 +vn 0.5774 0.5774 0.5774 +vn 0.7071 0.7071 0.0000 +vn 0.0000 0.7071 0.7071 +vn -0.5774 0.5774 -0.5774 +vn 0.5774 0.5774 -0.5774 +vn 0.0000 0.7071 -0.7071 +vn 0.7071 -0.7071 0.0000 +vn 0.5774 -0.5774 0.5774 +vn 0.0000 -0.7071 0.7071 +vn -0.5774 -0.5774 0.5774 +vn -0.7071 -0.7071 0.0000 +vn -0.5774 -0.5774 -0.5774 +vn 0.0000 -0.7071 -0.7071 +vn 0.5774 -0.5774 -0.5774 +vn 0.0000 1.0000 -0.0000 +vn 0.3493 0.9190 -0.1829 +vn 0.4649 0.8474 -0.2564 +vn 0.5891 0.8080 0.0000 +vn 0.2564 0.8474 -0.4649 +vn -0.1829 0.9190 -0.3493 +vn -0.2564 0.8474 -0.4649 +vn 0.0000 0.8080 -0.5891 +vn -0.3493 0.9190 -0.1829 +vn -0.3493 0.9190 0.1829 +vn -0.4649 0.8474 0.2564 +vn -0.5891 0.8080 0.0000 +vn -0.1829 0.9190 0.3493 +vn 0.1829 0.9190 0.3493 +vn 0.4649 0.8474 0.2564 +vn 0.2564 0.8474 0.4649 +vn -0.0000 0.8080 0.5891 +vn 0.4567 0.4070 -0.7911 +vn 0.0000 0.4070 -0.9134 +vn -0.4649 0.8474 -0.2564 +vn -0.4567 0.4070 -0.7911 +vn -0.9134 0.4070 -0.0000 +vn -0.7911 0.4070 -0.4567 +vn -0.2564 0.8474 0.4649 +vn -0.7911 0.4070 0.4567 +vn -0.4567 0.4070 0.7911 +vn -0.0000 0.4070 0.9134 +vn 0.4567 0.4070 0.7911 +vn 0.7911 0.4070 0.4567 +vn 0.9134 0.4070 0.0000 +vn 0.7911 0.4070 -0.4567 +vn -0.8660 0.0000 0.5000 +vn 0.5000 0.0000 -0.8660 +vn -0.5000 0.0000 -0.8660 +vn 0.8660 0.0000 0.5000 +vn -0.5000 0.0000 0.8660 +vn -0.8660 0.0000 -0.5000 +vn 0.8660 0.0000 -0.5000 +vn 0.5000 0.0000 0.8660 +vn 0.3493 0.9190 0.1829 +vn 0.1829 0.9190 -0.3493 +s off +f 35/1/1 23/2/1 22/3/1 +f 33/4/2 21/5/2 18/6/2 +f 37/7/3 19/8/3 24/9/3 +f 47/10/3 31/11/3 28/12/3 +f 33/4/4 13/13/4 36/14/4 +f 45/15/1 29/16/1 32/17/1 +f 41/18/2 25/19/2 30/20/2 +f 39/21/5 17/22/5 20/23/5 +f 43/24/5 27/25/5 26/26/5 +f 40/27/6 20/23/6 19/8/6 +f 18/6/7 34/28/7 33/4/7 +f 38/29/8 24/9/8 23/2/8 +f 36/30/9 22/3/9 21/31/9 +f 42/32/9 30/33/9 29/16/9 +f 26/26/7 44/34/7 43/24/7 +f 46/35/8 32/17/8 31/11/8 +f 48/36/6 28/12/6 27/25/6 +f 24/37/10 20/38/10 18/39/10 +f 34/28/11 16/40/11 33/4/11 +f 40/27/12 10/41/12 39/21/12 +f 37/7/13 9/42/13 40/27/13 +f 39/21/14 15/43/14 34/28/14 +f 36/30/15 14/44/15 35/1/15 +f 38/29/16 12/45/16 37/7/16 +f 35/1/17 11/46/17 38/29/17 +f 11/47/8 5/48/8 12/49/8 +f 12/49/3 8/50/3 9/51/3 +f 16/52/2 4/53/2 13/54/2 +f 9/51/6 7/55/6 10/56/6 +f 13/57/9 3/58/9 14/59/9 +f 10/56/5 2/60/5 15/61/5 +f 15/61/7 1/62/7 16/52/7 +f 14/59/1 6/63/1 11/47/1 +f 46/35/18 8/64/18 5/65/18 +f 47/10/19 7/66/19 8/67/19 +f 48/36/20 2/68/20 7/69/20 +f 43/24/21 1/70/21 2/71/21 +f 44/34/22 4/72/22 1/73/22 +f 41/74/23 3/75/23 4/76/23 +f 42/32/24 6/77/24 3/78/24 +f 45/15/25 5/79/25 6/80/25 +f 74/81/26 85/82/26 73/83/26 +f 75/84/26 86/85/26 74/81/26 +f 76/86/26 87/87/26 75/84/26 +f 77/88/26 88/89/26 76/90/26 +f 78/91/26 89/92/26 77/88/26 +f 79/93/26 90/94/26 78/91/26 +f 79/93/26 92/95/26 91/96/26 +f 80/97/26 93/98/26 92/99/26 +f 81/100/26 94/101/26 93/102/26 +f 82/103/26 95/104/26 94/105/26 +f 83/106/26 96/107/26 95/108/26 +f 84/109/26 85/110/26 96/111/26 +f 105/112/26 107/113/26 97/114/26 +f 35/1/1 38/29/1 23/2/1 +f 33/4/2 36/14/2 21/5/2 +f 37/7/3 40/27/3 19/8/3 +f 47/10/3 46/35/3 31/11/3 +f 33/4/4 16/115/4 13/13/4 +f 45/15/1 42/32/1 29/16/1 +f 41/18/2 44/34/2 25/19/2 +f 39/21/5 34/28/5 17/22/5 +f 43/24/5 48/36/5 27/25/5 +f 40/27/6 39/21/6 20/23/6 +f 18/6/7 17/22/7 34/28/7 +f 38/29/8 37/7/8 24/9/8 +f 36/30/9 35/1/9 22/3/9 +f 42/32/9 41/74/9 30/33/9 +f 26/26/7 25/19/7 44/34/7 +f 46/35/8 45/15/8 32/17/8 +f 48/36/6 47/10/6 28/12/6 +f 18/39/10 21/116/10 22/117/10 +f 22/117/10 23/118/10 24/37/10 +f 24/37/10 19/119/10 20/38/10 +f 20/38/10 17/120/10 18/39/10 +f 18/39/10 22/117/10 24/37/10 +f 34/28/11 15/121/11 16/40/11 +f 40/27/12 9/122/12 10/41/12 +f 37/7/13 12/123/13 9/42/13 +f 39/21/14 10/124/14 15/43/14 +f 36/30/15 13/125/15 14/44/15 +f 38/29/16 11/126/16 12/45/16 +f 35/1/17 14/127/17 11/46/17 +f 11/47/8 6/63/8 5/48/8 +f 12/49/3 5/48/3 8/50/3 +f 16/52/2 1/62/2 4/53/2 +f 9/51/6 8/50/6 7/55/6 +f 13/57/9 4/128/9 3/58/9 +f 10/56/5 7/55/5 2/60/5 +f 15/61/7 2/60/7 1/62/7 +f 14/59/1 3/58/1 6/63/1 +f 46/35/18 47/10/18 8/64/18 +f 47/10/19 48/36/19 7/66/19 +f 48/36/20 43/24/20 2/68/20 +f 43/24/21 44/34/21 1/70/21 +f 44/34/22 41/18/22 4/72/22 +f 41/74/23 42/32/23 3/75/23 +f 42/32/24 45/15/24 6/77/24 +f 45/15/25 46/35/25 5/79/25 +f 74/81/26 86/129/26 85/82/26 +f 75/84/26 87/130/26 86/85/26 +f 76/86/26 88/131/26 87/87/26 +f 77/88/26 89/132/26 88/89/26 +f 78/91/26 90/133/26 89/92/26 +f 79/93/26 91/134/26 90/94/26 +f 79/93/26 80/97/26 92/95/26 +f 80/97/26 81/100/26 93/98/26 +f 81/100/26 82/103/26 94/101/26 +f 82/103/26 83/106/26 95/104/26 +f 83/106/26 84/109/26 96/107/26 +f 84/109/26 73/83/26 85/110/26 +f 97/114/26 98/135/26 99/136/26 +f 99/136/26 100/137/26 101/138/26 +f 101/138/26 102/139/26 103/140/26 +f 103/140/26 104/141/26 105/112/26 +f 105/112/26 106/142/26 107/113/26 +f 107/113/26 108/143/26 97/114/26 +f 97/114/26 99/136/26 101/138/26 +f 101/138/26 103/140/26 97/114/26 +f 103/140/26 105/112/26 97/114/26 +s 1 +f 31/144/27 59/145/28 58/146/29 +f 31/144/27 60/147/30 59/145/28 +f 29/148/31 50/149/32 49/150/33 +f 30/151/34 50/149/32 29/148/31 +f 25/152/35 53/153/36 52/154/37 +f 26/155/38 53/153/36 25/152/35 +f 27/156/39 57/157/40 56/158/41 +f 27/156/39 56/158/41 55/159/42 +f 49/150/33 72/160/43 60/147/30 +f 50/149/32 61/161/44 49/150/33 +f 51/162/45 62/163/46 50/149/32 +f 51/162/45 64/164/47 63/165/48 +f 53/153/36 64/164/47 52/154/37 +f 54/166/49 65/167/50 53/153/36 +f 55/159/42 66/168/51 54/166/49 +f 56/158/41 67/169/52 55/159/42 +f 57/157/40 68/170/53 56/158/41 +f 58/146/29 69/171/54 57/157/40 +f 59/145/28 70/172/55 58/146/29 +f 60/147/30 71/173/56 59/145/28 +f 66/174/51 77/88/57 65/175/50 +f 61/176/44 84/109/58 72/177/43 +f 63/178/48 74/81/59 62/179/46 +f 70/180/55 81/100/60 69/181/54 +f 67/182/52 78/91/61 66/174/51 +f 64/183/47 75/84/62 63/178/48 +f 71/184/56 82/103/3 70/180/55 +f 68/185/53 79/93/5 67/182/52 +f 65/175/50 76/90/2 64/186/47 +f 72/177/43 83/106/63 71/184/56 +f 62/179/46 73/83/1 61/176/44 +f 69/181/54 80/97/64 68/185/53 +f 95/187/57 106/188/2 94/189/2 +f 92/190/59 103/191/1 91/192/1 +f 89/193/63 100/194/3 88/195/3 +f 96/196/61 107/197/57 95/187/57 +f 86/198/64 97/199/5 85/200/5 +f 93/201/62 104/202/59 92/190/59 +f 90/203/58 101/204/63 89/193/63 +f 85/200/5 108/205/61 96/196/61 +f 87/206/60 98/207/64 86/198/64 +f 94/189/2 105/208/62 93/201/62 +f 91/192/1 102/209/58 90/203/58 +f 88/210/3 99/211/60 87/206/60 +f 57/157/40 28/212/65 58/146/29 +f 28/212/65 31/144/27 58/146/29 +f 31/144/27 32/213/66 60/147/30 +f 60/147/30 32/213/66 49/150/33 +f 32/213/66 29/148/31 49/150/33 +f 30/151/34 51/162/45 50/149/32 +f 51/162/45 30/151/34 52/154/37 +f 30/151/34 25/152/35 52/154/37 +f 26/155/38 54/166/49 53/153/36 +f 27/156/39 28/212/65 57/157/40 +f 54/166/49 26/155/38 55/159/42 +f 26/155/38 27/156/39 55/159/42 +f 49/150/33 61/161/44 72/160/43 +f 50/149/32 62/163/46 61/161/44 +f 51/162/45 63/165/48 62/163/46 +f 51/162/45 52/154/37 64/164/47 +f 53/153/36 65/167/50 64/164/47 +f 54/166/49 66/168/51 65/167/50 +f 55/159/42 67/169/52 66/168/51 +f 56/158/41 68/170/53 67/169/52 +f 57/157/40 69/171/54 68/170/53 +f 58/146/29 70/172/55 69/171/54 +f 59/145/28 71/173/56 70/172/55 +f 60/147/30 72/160/43 71/173/56 +f 66/174/51 78/91/61 77/88/57 +f 61/176/44 73/83/1 84/109/58 +f 63/178/48 75/84/62 74/81/59 +f 70/180/55 82/103/3 81/100/60 +f 67/182/52 79/93/5 78/91/61 +f 64/183/47 76/86/2 75/84/62 +f 71/184/56 83/106/63 82/103/3 +f 68/185/53 80/97/64 79/93/5 +f 65/175/50 77/88/57 76/90/2 +f 72/177/43 84/109/58 83/106/63 +f 62/179/46 74/81/59 73/83/1 +f 69/181/54 81/100/60 80/97/64 +f 95/187/57 107/197/57 106/188/2 +f 92/190/59 104/202/59 103/191/1 +f 89/193/63 101/204/63 100/194/3 +f 96/196/61 108/205/61 107/197/57 +f 86/198/64 98/207/64 97/199/5 +f 93/201/62 105/208/62 104/202/59 +f 90/203/58 102/209/58 101/204/63 +f 85/200/5 97/199/5 108/205/61 +f 87/206/60 99/211/60 98/207/64 +f 94/189/2 106/188/2 105/208/62 +f 91/192/1 103/191/1 102/209/58 +f 88/210/3 100/214/3 99/211/60 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/whiskey (Kopie).png b/src/main/resources/assets/hbm/textures/models/weapons/whiskey (Kopie).png new file mode 100644 index 0000000000000000000000000000000000000000..959b94011dd9e1bf6a37e1adc7d0ac47df9c2fb9 GIT binary patch literal 37269 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/whiskey.png b/src/main/resources/assets/hbm/textures/models/weapons/whiskey.png new file mode 100644 index 0000000000000000000000000000000000000000..590f3ff302d2a97a5d0ec2f66ec111256fc160e2 GIT binary patch literal 34357 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/whiskey.xcf b/src/main/resources/assets/hbm/textures/models/weapons/whiskey.xcf new file mode 100644 index 0000000000000000000000000000000000000000..2376c64d51e153dc45b6dd1b928d8a9cf8a7d0bf GIT binary patch literal 267625 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 literal 0 HcmV?d00001 From 32fc58821a93ec3beb61a8e98e3e5facdd3e296a Mon Sep 17 00:00:00 2001 From: Lazzzycatwastaken Date: Fri, 27 Jun 2025 21:23:53 +0200 Subject: [PATCH 203/491] sludge --- src/main/java/com/hbm/util/LootGenerator.java | 24 +++++++++++++++++- .../assets/hbm/structures/lighthouse.nbt | Bin 157058 -> 0 bytes 2 files changed, 23 insertions(+), 1 deletion(-) delete mode 100644 src/main/resources/assets/hbm/structures/lighthouse.nbt diff --git a/src/main/java/com/hbm/util/LootGenerator.java b/src/main/java/com/hbm/util/LootGenerator.java index b14306b9e..cee32e713 100644 --- a/src/main/java/com/hbm/util/LootGenerator.java +++ b/src/main/java/com/hbm/util/LootGenerator.java @@ -28,6 +28,7 @@ public class LootGenerator { public static final String LOOT_BONES = "LOOT_BONES"; public static final String LOOT_GLYPHID_HIVE = "LOOT_GLYPHID_HIVE"; public static final String LOOT_METEOR = "LOOT_METEOR"; + public static final String LOOT_FLAREGUN = "LOOT_FLAREGUN"; public static void applyLoot(World world, int x, int y, int z, String name) { switch(name) { @@ -40,6 +41,7 @@ public class LootGenerator { case LOOT_BONES: lootBones(world, x, y, z); case LOOT_GLYPHID_HIVE: lootGlyphidHive(world, x, y, z); case LOOT_METEOR: lootBookMeteor(world, x, y, z); + case LOOT_FLAREGUN: lootFlareGun(world, x, y, z); default: lootBones(world, x, y, z); break; } } @@ -55,6 +57,7 @@ public class LootGenerator { LOOT_BONES, LOOT_GLYPHID_HIVE, LOOT_METEOR, + LOOT_FLAREGUN, }; } @@ -211,4 +214,23 @@ public class LootGenerator { } } -} \ No newline at end of file + public static void lootFlareGun(World world, int x, int y, int z) { + TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(x, y, z); + if (loot != null && loot.items.isEmpty()) { + addItemWithDeviation(loot, world.rand, new ItemStack(ModItems.gun_flaregun), 0, 0, -0.25); + + int count = world.rand.nextInt(3) + 2; + for (int k = 0; k < count; k++) + addItemWithDeviation(loot, world.rand, + new ItemStack(ModItems.ammo_standard, 1, EnumAmmo.G26_FLARE.ordinal()), + -0.25, k * 0.03125, 0.25); + + count = world.rand.nextInt(1) + 1; + for (int k = 0; k < count; k++) + addItemWithDeviation(loot, world.rand, + new ItemStack(ModItems.ammo_standard, 1, + world.rand.nextBoolean() ? EnumAmmo.G26_FLARE_SUPPLY.ordinal() : EnumAmmo.G26_FLARE_WEAPON.ordinal()), + 0.25, k * 0.03125, 0.125); + } + } +} diff --git a/src/main/resources/assets/hbm/structures/lighthouse.nbt b/src/main/resources/assets/hbm/structures/lighthouse.nbt deleted file mode 100644 index 84670465e03326e247369c5577582321eeae53a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157058 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 YlFuazSEXk*S!{o@HH6-%T= Date: Sun, 22 Jun 2025 01:37:13 +0300 Subject: [PATCH 204/491] Fix pathfinding on spotlights --- src/main/java/com/hbm/blocks/machine/Spotlight.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/machine/Spotlight.java b/src/main/java/com/hbm/blocks/machine/Spotlight.java index 8c1c57663..07a9bc9c3 100644 --- a/src/main/java/com/hbm/blocks/machine/Spotlight.java +++ b/src/main/java/com/hbm/blocks/machine/Spotlight.java @@ -44,7 +44,7 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable { this.type = type; this.isOn = isOn; - this.setHardness(1F); + this.setHardness(0.5F); if(isOn) setLightLevel(1.0F); } @@ -81,6 +81,11 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable { return false; } + @Override + public boolean getBlocksMovement(IBlockAccess world, int x, int y, int z) { + return false; + } + @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) { return null; From dec8c9c43ab32b856cc6f0b99856a28025118337 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 27 Jun 2025 18:07:58 +0300 Subject: [PATCH 205/491] Wow mojang is stupid Or at least the mapping author is. How could I not get that `getBlocksMovement` should return if the block DOESN'T block movement, that's so obvious, why would I ever think otherwise --- src/main/java/com/hbm/blocks/machine/Spotlight.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/machine/Spotlight.java b/src/main/java/com/hbm/blocks/machine/Spotlight.java index 07a9bc9c3..3df9a0c52 100644 --- a/src/main/java/com/hbm/blocks/machine/Spotlight.java +++ b/src/main/java/com/hbm/blocks/machine/Spotlight.java @@ -82,8 +82,9 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable { } @Override + // Ah yes, I love methods named the literal opposite of what they do public boolean getBlocksMovement(IBlockAccess world, int x, int y, int z) { - return false; + return true; } @Override From 0b5731266e908f2ad2483622a42f3f040c9c73b6 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 22 Jun 2025 19:53:21 +0300 Subject: [PATCH 206/491] Hide spotlights on maps --- src/main/java/com/hbm/blocks/machine/Spotlight.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/hbm/blocks/machine/Spotlight.java b/src/main/java/com/hbm/blocks/machine/Spotlight.java index 3df9a0c52..4868d3dd0 100644 --- a/src/main/java/com/hbm/blocks/machine/Spotlight.java +++ b/src/main/java/com/hbm/blocks/machine/Spotlight.java @@ -14,6 +14,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockSlab; +import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -87,6 +88,11 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable { return true; } + @Override + public MapColor getMapColor(int meta) { + return MapColor.airColor; + } + @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) { return null; From a40d0b35136c5b01e96577db70f5dfdf18390ddf Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 28 Jun 2025 04:01:00 +0300 Subject: [PATCH 207/491] Make doors click-through when open Currently clicking on anything beyond an open door just makes it close, despite there being no indications for that and the colliders clearly already not being there. --- .../hbm/blocks/generic/BlockDoorGeneric.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java b/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java index 0e496af45..365187ff4 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java @@ -17,6 +17,8 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -116,6 +118,22 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { return aabb; } + // Enables clicking through the open door + @Override + public MovingObjectPosition collisionRayTrace(World world, int x, int y, int z, Vec3 startVec, Vec3 endVec) { + AxisAlignedBB box = getBoundingBox(world, x, y ,z); + box = AxisAlignedBB.getBoundingBox( + Math.min(box.minX, box.maxX), Math.min(box.minY, box.maxY), Math.min(box.minZ, box.maxZ), + Math.max(box.minX, box.maxX), Math.max(box.minY, box.maxY), Math.max(box.minZ, box.maxZ) + ); + + MovingObjectPosition intercept = box.calculateIntercept(startVec, endVec); + if(intercept != null) { + return new MovingObjectPosition(x, y, z, intercept.sideHit, intercept.hitVec); + } + return null; + } + @Override //should fix AI pathfinding public boolean getBlocksMovement(IBlockAccess world, int x, int y, int z) { //btw the method name is the exact opposite of that it's doing, check net.minecraft.pathfinding.PathNavigate#512 return hasExtra(world.getBlockMetadata(x, y, z)); //if it's open From f820ae32e247ceb4e835b0e171cafe820c1aeacb Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 26 Jun 2025 19:23:38 +0300 Subject: [PATCH 208/491] Fix crate locked slot --- .../com/hbm/inventory/container/ContainerCrateBase.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java b/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java index 05b818a10..aaf4ca8a3 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java @@ -25,8 +25,10 @@ public class ContainerCrateBase extends ContainerBase { for(int i = 0; i < 9; i++) { this.addSlotToContainer( - invPlayer.currentItem == i ? new SlotPlayerCrateLocked(invPlayer, i, playerInvX + i * 18, playerHotbarY) : - new SlotNonRetarded(invPlayer, i, playerInvX + i * 18, playerHotbarY)); + (invPlayer.currentItem == i && this.tile instanceof ItemBlockStorageCrate.InventoryCrate) ? + new SlotPlayerCrateLocked(invPlayer, i, playerInvX + i * 18, playerHotbarY) : + new SlotNonRetarded(invPlayer, i, playerInvX + i * 18, playerHotbarY) + ); } } From b400b887014e3def548dc83076cd7b45a5b69e59 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 26 Jun 2025 21:09:34 +0300 Subject: [PATCH 209/491] Add flat AoE ability --- .../hbm/handler/ability/IToolAreaAbility.java | 105 +++++++++++++++++- .../inventory/gui/GUIScreenToolAbility.java | 3 +- src/main/java/com/hbm/items/ModItems.java | 29 ++++- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + src/main/resources/assets/hbm/lang/it_IT.lang | 1 + src/main/resources/assets/hbm/lang/pl_PL.lang | 1 + src/main/resources/assets/hbm/lang/ru_RU.lang | 1 + src/main/resources/assets/hbm/lang/uk_UA.lang | 1 + src/main/resources/assets/hbm/lang/zh_CN.lang | 1 + .../textures/gui/tool/gui_tool_ability.png | Bin 4455 -> 4552 bytes 11 files changed, 140 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index 1d0bcf02b..ca28bca9c 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -14,7 +14,10 @@ import com.hbm.items.tool.ItemToolAbility; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -219,6 +222,104 @@ public interface IToolAreaAbility extends IBaseAbility { } }; + public static final IToolAreaAbility HAMMER_FLAT = new IToolAreaAbility() { + @Override + public String getName() { + return "tool.ability.hammer_flat"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityHammer; + } + + public final int[] rangeAtLevel = { 1, 2, 3, 4 }; + + @Override + public int levels() { + return rangeAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + rangeAtLevel[level] + ")"; + } + + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 3; + } + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + int range = rangeAtLevel[level]; + + MovingObjectPosition hit = raytraceFromEntity(world, player, false, 4.5d); + if(hit == null) return true; + int sideHit = hit.sideHit; + + // we successfully destroyed a block. time to do AOE! + int xRange = range; + int yRange = range; + int zRange = 0; + switch (sideHit) { + case 0: + case 1: + yRange = 0; + zRange = range; + break; + case 2: + case 3: + xRange = range; + zRange = 0; + break; + case 4: + case 5: + xRange = 0; + zRange = range; + break; + } + + for(int a = x - xRange; a <= x + xRange; a++) { + for(int b = y - yRange; b <= y + yRange; b++) { + for(int c = z - zRange; c <= z + zRange; c++) { + if(a == x && b == y && c == z) + continue; + + tool.breakExtraBlock(world, a, b, c, player, x, y, z); + } + } + } + + return false; + } + + // Taken from TConstruct, licensed under CC0 (public domain) + // https://github.com/SlimeKnights/TinkersConstruct/blob/9ea7a0e60fe180aff591701b12c89da21da99289/src/main/java/tconstruct/library/tools/AbilityHelper.java#L707-L731 + private MovingObjectPosition raytraceFromEntity(World world, EntityPlayer player, boolean par3, double range) { + float f = 1.0F; + float f1 = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * f; + float f2 = player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * f; + double d0 = player.prevPosX + (player.posX - player.prevPosX) * (double) f; + double d1 = player.prevPosY + (player.posY - player.prevPosY) * (double) f + 1.62D; + double d2 = player.prevPosZ + (player.posZ - player.prevPosZ) * (double) f; + Vec3 vec3 = Vec3.createVectorHelper(d0, d1, d2); + float f3 = MathHelper.cos(-f2 * 0.017453292F - (float) Math.PI); + float f4 = MathHelper.sin(-f2 * 0.017453292F - (float) Math.PI); + float f5 = -MathHelper.cos(-f1 * 0.017453292F); + float f6 = MathHelper.sin(-f1 * 0.017453292F); + float f7 = f4 * f5; + float f8 = f3 * f5; + double d3 = range; + if (player instanceof EntityPlayerMP) + { + d3 = ((EntityPlayerMP) player).theItemInWorldManager.getBlockReachDistance(); + } + Vec3 vec31 = vec3.addVector((double) f7 * d3, (double) f6 * d3, (double) f8 * d3); + return world.func_147447_a(vec3, vec31, par3, !par3, par3); + } + }; + public static final IToolAreaAbility EXPLOSION = new IToolAreaAbility() { @Override public String getName() { @@ -249,7 +350,7 @@ public interface IToolAreaAbility extends IBaseAbility { @Override public int sortOrder() { - return SORT_ORDER_BASE + 3; + return SORT_ORDER_BASE + 4; } @Override @@ -270,7 +371,7 @@ public interface IToolAreaAbility extends IBaseAbility { }; // endregion handlers - static final IToolAreaAbility[] abilities = { NONE, RECURSION, HAMMER, EXPLOSION }; + static final IToolAreaAbility[] abilities = { NONE, RECURSION, HAMMER, HAMMER_FLAT, EXPLOSION }; static IToolAreaAbility getByName(String name) { for(IToolAreaAbility ability : abilities) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 18db58099..9b31e5675 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -52,7 +52,8 @@ public class GUIScreenToolAbility extends GuiScreen { abilitiesArea.add(new AbilityInfo(IToolAreaAbility.NONE, 0, 91)); abilitiesArea.add(new AbilityInfo(IToolAreaAbility.RECURSION, 32, 91)); abilitiesArea.add(new AbilityInfo(IToolAreaAbility.HAMMER, 64, 91)); - abilitiesArea.add(new AbilityInfo(IToolAreaAbility.EXPLOSION, 96, 91)); + abilitiesArea.add(new AbilityInfo(IToolAreaAbility.HAMMER_FLAT, 96, 91)); + abilitiesArea.add(new AbilityInfo(IToolAreaAbility.EXPLOSION, 128, 91)); abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.NONE, 0, 107)); abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SILK, 32, 107)); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index b27e20e3e..d7b7fb410 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -4466,6 +4466,7 @@ public class ModItems { schrabidium_pickaxe = new ItemToolAbility(20, 0, MainRegistry.tMatSchrab, EnumToolType.PICKAXE) .addAbility(IWeaponAbility.RADIATION, 0) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 6) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 4) @@ -4476,6 +4477,7 @@ public class ModItems { schrabidium_axe = new ItemToolAbility(25, 0, MainRegistry.tMatSchrab, EnumToolType.AXE) .addAbility(IWeaponAbility.RADIATION, 0) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 6) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 4) @@ -4487,6 +4489,7 @@ public class ModItems { schrabidium_shovel = new ItemToolAbility(15, 0, MainRegistry.tMatSchrab, EnumToolType.SHOVEL) .addAbility(IWeaponAbility.RADIATION, 0) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 6) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 4) @@ -4554,12 +4557,14 @@ public class ModItems { elec_pickaxe = new ItemToolAbilityPower(6F, 0, MainRegistry.tMatElec, EnumToolType.PICKAXE, 500000, 1000, 100) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 2) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("elec_pickaxe").setTextureName(RefStrings.MODID + ":elec_drill_anim"); elec_axe = new ItemToolAbilityPower(10F, 0, MainRegistry.tMatElec, EnumToolType.AXE, 500000, 1000, 100) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 2) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 1) @@ -4568,6 +4573,7 @@ public class ModItems { elec_shovel = new ItemToolAbilityPower(5F, 0, MainRegistry.tMatElec, EnumToolType.SHOVEL, 500000, 1000, 100) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 2) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("elec_shovel").setTextureName(RefStrings.MODID + ":elec_shovel_anim"); @@ -4577,12 +4583,14 @@ public class ModItems { desh_pickaxe = new ItemToolAbility(5F, -0.05, MainRegistry.tMatDesh, EnumToolType.PICKAXE) .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 0) .addAbility(IToolAreaAbility.RECURSION, 0) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("desh_pickaxe").setTextureName(RefStrings.MODID + ":desh_pickaxe"); desh_axe = new ItemToolAbility(7.5F, -0.05, MainRegistry.tMatDesh, EnumToolType.AXE) .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 0) .addAbility(IToolAreaAbility.RECURSION, 0) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 1) @@ -4590,6 +4598,7 @@ public class ModItems { desh_shovel = new ItemToolAbility(4F, -0.05, MainRegistry.tMatDesh, EnumToolType.SHOVEL) .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 0) .addAbility(IToolAreaAbility.RECURSION, 0) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 1).setUnlocalizedName("desh_shovel").setTextureName(RefStrings.MODID + ":desh_shovel"); @@ -4618,17 +4627,20 @@ public class ModItems { cobalt_decorated_pickaxe = new ItemToolAbility(6F, 0, matDecCobalt, EnumToolType.PICKAXE) .addAbility(IToolAreaAbility.RECURSION, 1) .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 0) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 2).setUnlocalizedName("cobalt_decorated_pickaxe").setTextureName(RefStrings.MODID + ":cobalt_decorated_pickaxe"); cobalt_decorated_axe = new ItemToolAbility(8F, 0, matDecCobalt, EnumToolType.AXE) .addAbility(IToolAreaAbility.RECURSION, 1) .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 0) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 2) .addAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("cobalt_decorated_axe").setTextureName(RefStrings.MODID + ":cobalt_decorated_axe"); cobalt_decorated_shovel = new ItemToolAbility(5F, 0, matDecCobalt, EnumToolType.SHOVEL) .addAbility(IToolAreaAbility.RECURSION, 1) .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 0) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 2).setUnlocalizedName("cobalt_decorated_shovel").setTextureName(RefStrings.MODID + ":cobalt_decorated_shovel"); cobalt_decorated_hoe = new ModHoe(matDecCobalt).setUnlocalizedName("cobalt_decorated_hoe").setTextureName(RefStrings.MODID + ":cobalt_decorated_hoe"); @@ -4641,12 +4653,14 @@ public class ModItems { starmetal_pickaxe = new ItemToolAbility(8F, 0, matStarmetal, EnumToolType.PICKAXE) .addAbility(IToolAreaAbility.RECURSION, 3) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 4) .addAbility(IWeaponAbility.STUN, 1).setUnlocalizedName("starmetal_pickaxe").setTextureName(RefStrings.MODID + ":starmetal_pickaxe"); starmetal_axe = new ItemToolAbility(12F, 0, matStarmetal, EnumToolType.AXE) .addAbility(IToolAreaAbility.RECURSION, 3) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 4) .addAbility(IWeaponAbility.BEHEADER, 0) @@ -4654,6 +4668,7 @@ public class ModItems { starmetal_shovel = new ItemToolAbility(7F, 0, matStarmetal, EnumToolType.SHOVEL) .addAbility(IToolAreaAbility.RECURSION, 3) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 4) .addAbility(IWeaponAbility.STUN, 1).setUnlocalizedName("starmetal_shovel").setTextureName(RefStrings.MODID + ":starmetal_shovel"); @@ -4668,6 +4683,7 @@ public class ModItems { .addAbility(IToolHarvestAbility.SHREDDER, 0) .addAbility(IToolHarvestAbility.LUCK, 1) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 2).setUnlocalizedName("drax").setTextureName(RefStrings.MODID + ":drax"); drax_mk2 = new ItemToolAbilityPower(15F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 1000000000, 250000, 7500) .addAbility(IToolHarvestAbility.SMELTER, 0) @@ -4675,6 +4691,7 @@ public class ModItems { .addAbility(IToolHarvestAbility.CENTRIFUGE, 0) .addAbility(IToolHarvestAbility.LUCK, 2) .addAbility(IToolAreaAbility.HAMMER, 2) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 2) .addAbility(IToolAreaAbility.RECURSION, 4).setUnlocalizedName("drax_mk2").setTextureName(RefStrings.MODID + ":drax_mk2"); drax_mk3 = new ItemToolAbilityPower(20F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 2500000000L, 500000, 10000) .addAbility(IToolHarvestAbility.SMELTER, 0) @@ -4684,11 +4701,13 @@ public class ModItems { .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 3) .addAbility(IToolAreaAbility.HAMMER, 3) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 3) .addAbility(IToolAreaAbility.RECURSION, 5).setUnlocalizedName("drax_mk3").setTextureName(RefStrings.MODID + ":drax_mk3"); ToolMaterial matBismuth = EnumHelper.addToolMaterial("HBM_BISMUTH", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth)); bismuth_pickaxe = new ItemToolAbility(15F, 0, matBismuth, EnumToolType.MINER) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 1) .addAbility(IToolHarvestAbility.SHREDDER, 0) .addAbility(IToolHarvestAbility.LUCK, 1) @@ -4699,6 +4718,7 @@ public class ModItems { .setDepthRockBreaker().setUnlocalizedName("bismuth_pickaxe").setTextureName(RefStrings.MODID + ":bismuth_pickaxe"); bismuth_axe = new ItemToolAbility(25F, 0, matBismuth, EnumToolType.AXE) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 1) .addAbility(IToolHarvestAbility.SHREDDER, 0) .addAbility(IToolHarvestAbility.LUCK, 1) @@ -4711,6 +4731,7 @@ public class ModItems { ToolMaterial matVolcano = EnumHelper.addToolMaterial("HBM_VOLCANIC", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth)); volcanic_pickaxe = new ItemToolAbility(15F, 0, matVolcano, EnumToolType.MINER) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 1) .addAbility(IToolHarvestAbility.SMELTER, 0) .addAbility(IToolHarvestAbility.LUCK, 2) @@ -4721,6 +4742,7 @@ public class ModItems { .setDepthRockBreaker().setUnlocalizedName("volcanic_pickaxe").setTextureName(RefStrings.MODID + ":volcanic_pickaxe"); volcanic_axe = new ItemToolAbility(25F, 0, matVolcano, EnumToolType.AXE) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 1) .addAbility(IToolHarvestAbility.SMELTER, 0) .addAbility(IToolHarvestAbility.LUCK, 2) @@ -4732,6 +4754,7 @@ public class ModItems { ToolMaterial matChlorophyte = EnumHelper.addToolMaterial("HBM_CHLOROPHYTE", 4, 0, 75F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.powder_chlorophyte)); chlorophyte_pickaxe = new ItemToolAbility(20F, 0, matChlorophyte, EnumToolType.MINER) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 1) .addAbility(IToolHarvestAbility.LUCK, 3) .addAbility(IToolHarvestAbility.CENTRIFUGE, 0) @@ -4742,6 +4765,7 @@ public class ModItems { .setDepthRockBreaker().setUnlocalizedName("chlorophyte_pickaxe").setTextureName(RefStrings.MODID + ":chlorophyte_pickaxe"); chlorophyte_axe = new ItemToolAbility(50F, 0, matChlorophyte, EnumToolType.AXE) .addAbility(IToolAreaAbility.HAMMER, 1) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) .addAbility(IToolAreaAbility.RECURSION, 1) .addAbility(IToolHarvestAbility.LUCK, 3) .addAbility(IWeaponAbility.STUN, 4) @@ -4751,6 +4775,7 @@ public class ModItems { ToolMaterial matMese = EnumHelper.addToolMaterial("HBM_MESE", 4, 0, 100F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); mese_pickaxe = new ItemToolAbility(35F, 0, matMese, EnumToolType.MINER) .addAbility(IToolAreaAbility.HAMMER, 2) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 2) .addAbility(IToolAreaAbility.RECURSION, 2) .addAbility(IToolHarvestAbility.CRYSTALLIZER, 0) .addAbility(IToolHarvestAbility.SILK, 0) @@ -4762,6 +4787,7 @@ public class ModItems { .setDepthRockBreaker().setUnlocalizedName("mese_pickaxe").setTextureName(RefStrings.MODID + ":mese_pickaxe"); mese_axe = new ItemToolAbility(75F, 0, matMese, EnumToolType.AXE) .addAbility(IToolAreaAbility.HAMMER, 2) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 2) .addAbility(IToolAreaAbility.RECURSION, 2) .addAbility(IToolHarvestAbility.SILK, 0) .addAbility(IToolHarvestAbility.LUCK, 5) @@ -4774,7 +4800,8 @@ public class ModItems { ToolMaterial matDwarf = EnumHelper.addToolMaterial("HBM_DWARVEN", 2, 0, 4F, 0.0F, 10).setRepairItem(new ItemStack(ModItems.ingot_copper)); dwarven_pickaxe = new ItemToolAbility(5F, -0.1, matDwarf, EnumToolType.MINER) - .addAbility(IToolAreaAbility.HAMMER, 0).setUnlocalizedName("dwarven_pickaxe").setMaxDamage(250).setTextureName(RefStrings.MODID + ":dwarven_pickaxe"); + .addAbility(IToolAreaAbility.HAMMER, 0) + .addAbility(IToolAreaAbility.HAMMER_FLAT, 0).setUnlocalizedName("dwarven_pickaxe").setMaxDamage(250).setTextureName(RefStrings.MODID + ":dwarven_pickaxe"); ToolMaterial matMeteorite = EnumHelper.addToolMaterial("HBM_METEORITE", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); meteorite_sword = new ItemSwordMeteorite(9F, 0, matMeteorite).setUnlocalizedName("meteorite_sword").setTextureName(RefStrings.MODID + ":meteorite_sword"); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 7b00fdbe6..22073b8b1 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4980,6 +4980,7 @@ tool.ability.cnetrifuge=Auto-Zentrifuge tool.ability.crystallizer=Auto-Kristallisierer tool.ability.explosion=Explosion tool.ability.hammer=AoE +tool.ability.hammer_flat=Flacher AoE tool.ability.luck=Glück tool.ability.mercury=Quecksilber-Berührung tool.ability.midas=Midas' Hand diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 8e915f009..efcf68904 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6146,6 +6146,7 @@ tool.ability.centrifuge=Auto-Centrifuge tool.ability.crystallizer=Auto-Crystallizer tool.ability.explosion=Explosion tool.ability.hammer=AoE +tool.ability.hammer_flat=Flat AoE tool.ability.luck=Fortune tool.ability.mercury=Mercury Touch tool.ability.midas=Midas Touch diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index 691badc0e..d5fc68517 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -6164,6 +6164,7 @@ tool.ability.centrifuge=Auto-Centrifuge tool.ability.crystallizer=Auto-Crystallizer tool.ability.explosion=Explosion tool.ability.hammer=AoE +tool.ability.hammer_flat=AoE piatta tool.ability.luck=Fortune tool.ability.mercury=Mercury Touch tool.ability.midas=Midas Touch diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index f33a8a715..fcf4a3402 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -5399,6 +5399,7 @@ tool.ability.centrifuge=Auto-Centrifuge tool.ability.crystallizer=Auto-Crystallizer tool.ability.explosion=Explosion tool.ability.hammer=AoE +tool.ability.hammer_flat=Flat AoE tool.ability.luck=Fortune tool.ability.mercury=Mercury Touch tool.ability.midas=Midas Touch diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 5c3efa442..20955e04f 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -6377,6 +6377,7 @@ tool.ability.centrifuge=Авто-центрифуга tool.ability.crystallizer=Авто-кристаллизатор tool.ability.explosion=Взрыв tool.ability.hammer=Зона действия +tool.ability.hammer_flat=Плоская зона действия tool.ability.luck=Удача tool.ability.mercury=Ртутное касание tool.ability.midas=Прикосновение Мидаса diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 28776824b..c539f5aa6 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -6125,6 +6125,7 @@ tool.ability.centrifuge=Автоцентрифуга tool.ability.crystallizer=Автокристалізатор tool.ability.explosion=Вибух tool.ability.hammer=Зона дії +tool.ability.hammer_flat=Плоска зона дії tool.ability.luck=Вдача tool.ability.mercury=Ртутний дотик tool.ability.midas=Дотик Мідаса diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 41847c119..0e56b0ba9 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5814,6 +5814,7 @@ tool.ability.centrifuge=自动离心 tool.ability.crystallizer=自动结晶 tool.ability.explosion=爆破 tool.ability.hammer=范围挖掘 +tool.ability.flat_hammer=平坦區域採礦 tool.ability.luck=时运 tool.ability.mercury=水银提取 tool.ability.midas=点石成金 diff --git a/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png b/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png index 6b1a5c68b8894c7926c73afd222f60f424a217b9..077dbd45c5bdb46596646da1524faf7724b0a57c 100644 GIT binary patch literal 4552 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 From 71c1eaf430cbfcd02423b865460df0db38201915 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 26 Jun 2025 22:39:10 +0300 Subject: [PATCH 210/491] Change flat AoE icon --- .../textures/gui/tool/gui_tool_ability.png | Bin 4552 -> 4552 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png b/src/main/resources/assets/hbm/textures/gui/tool/gui_tool_ability.png index 077dbd45c5bdb46596646da1524faf7724b0a57c..fc0a54e7f336512f8e6457d430a75e33e67d89a4 100644 GIT binary patch delta 3708 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 IbC2kM0gloH;s5{u From 5a0dabc5a95017c5d55a6bb40271d327e2e74fa9 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 26 Jun 2025 22:28:03 +0300 Subject: [PATCH 211/491] Bunch all mined blocks in one spot Solves the problem of veinmined stuff being stuck in enclosed pockets, even with a magnet active --- .../handler/ability/IToolHarvestAbility.java | 10 +++--- .../com/hbm/items/tool/ItemToolAbility.java | 32 +++++++++++++++++-- src/main/resources/META-INF/HBM_at.cfg | 6 +++- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index 9f002bfbd..ee3027340 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -175,7 +175,7 @@ public interface IToolHarvestAbility extends IBaseAbility { if(doesSmelt) { for(ItemStack stack : drops) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy())); + world.spawnEntityInWorld(new EntityItem(world, ItemToolAbility.dropX + 0.5, ItemToolAbility.dropY + 0.5, ItemToolAbility.dropZ + 0.5, stack.copy())); } } } @@ -211,7 +211,7 @@ public interface IToolHarvestAbility extends IBaseAbility { harvestBlock(doesShred, world, x, y, z, player); if(doesShred) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy())); + world.spawnEntityInWorld(new EntityItem(world, ItemToolAbility.dropX + 0.5, ItemToolAbility.dropY + 0.5, ItemToolAbility.dropZ + 0.5, result.copy())); } } }; @@ -248,7 +248,7 @@ public interface IToolHarvestAbility extends IBaseAbility { if(doesCentrifuge) { for(ItemStack st : result) { if(st != null) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, st.copy())); + world.spawnEntityInWorld(new EntityItem(world, ItemToolAbility.dropX + 0.5, ItemToolAbility.dropY + 0.5, ItemToolAbility.dropZ + 0.5, st.copy())); } } } @@ -285,7 +285,7 @@ public interface IToolHarvestAbility extends IBaseAbility { harvestBlock(doesCrystallize, world, x, y, z, player); if(doesCrystallize) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy())); + world.spawnEntityInWorld(new EntityItem(world, ItemToolAbility.dropX + 0.5, ItemToolAbility.dropY + 0.5, ItemToolAbility.dropZ + 0.5, result.output.copy())); } } }; @@ -324,7 +324,7 @@ public interface IToolHarvestAbility extends IBaseAbility { harvestBlock(doesConvert, world, x, y, z, player); if(doesConvert) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_mercury, mercury))); + world.spawnEntityInWorld(new EntityItem(world, ItemToolAbility.dropX + 0.5, ItemToolAbility.dropY + 0.5, ItemToolAbility.dropZ + 0.5, new ItemStack(ModItems.ingot_mercury, mercury))); } } }; diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index e91283917..022c9274c 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -1,5 +1,7 @@ package com.hbm.items.tool; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; @@ -27,6 +29,8 @@ import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.tileentity.IGUIProvider; import api.hbm.item.IDepthRockTool; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.relauncher.ReflectionHelper; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -151,6 +155,10 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro return true; } + // Should be safe, considering the AoE ability does a similar trick already. + // If not, wrap this in a ThreadLocal or something... + public static int dropX, dropY, dropZ; + @Override public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPlayer player) { @@ -173,6 +181,10 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro Configuration config = getConfiguration(stack); ToolPreset preset = config.getActivePreset(); + dropX = x; + dropY = y; + dropZ = z; + preset.harvestAbility.preHarvestAll(preset.harvestAbilityLevel, world, player); boolean skipRef = preset.areaAbility.onDig(preset.areaAbilityLevel, world, x, y, z, player, this); @@ -316,7 +328,7 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro double d = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; double d1 = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; double d2 = (double) (rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - EntityItem entityitem = new EntityItem(player.worldObj, (double) x + d, (double) y + d1, (double) z + d2, stack); + EntityItem entityitem = new EntityItem(player.worldObj, (double) dropX + d, (double) dropY + d1, (double) dropZ + d2, stack); entityitem.delayBeforeCanPickup = 10; player.worldObj.spawnEntityInWorld(entityitem); } @@ -326,6 +338,9 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro } } + // Since it's added by forge, access transformers don't affect it (even wildcards), so we do it the old-fashioned way + private static Method blockCaptureDrops = ReflectionHelper.findMethod(Block.class, null, new String[] { "captureDrops" }, new Class[] { boolean.class }); + public static void standardDigPost(World world, int x, int y, int z, EntityPlayerMP player) { Block block = world.getBlock(x, y, z); @@ -351,7 +366,20 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro } if(removedByPlayer && canHarvest) { - block.harvestBlock(world, player, x, y, z, l); + try { + blockCaptureDrops.invoke(block, true); + block.harvestBlock(world, player, x, y, z, l); + List drops = (List)blockCaptureDrops.invoke(block, false); + for (ItemStack stack : drops) { + block.dropBlockAsItem(world, dropX, dropY, dropZ, stack); + } + } catch (IllegalAccessException e) { + // Shouldn't be possible with ReflectionHelper + MainRegistry.logger.error("Failed to capture drops for block " + block, e); + } catch (InvocationTargetException e) { + // Might be possible? Not in practice, though + MainRegistry.logger.error("Failed to capture drops for block " + block, e); + } } } diff --git a/src/main/resources/META-INF/HBM_at.cfg b/src/main/resources/META-INF/HBM_at.cfg index 28454115f..81514dff3 100644 --- a/src/main/resources/META-INF/HBM_at.cfg +++ b/src/main/resources/META-INF/HBM_at.cfg @@ -50,4 +50,8 @@ public net.minecraft.client.resources.AbstractResourcePack field_110597_b # re public net.minecraft.inventory.Container * # fucking everything i hate this class # GuiIngame -public net.minecraft.client.gui.GuiIngame field_92016_l # highlightingItemStack \ No newline at end of file +public net.minecraft.client.gui.GuiIngame field_92016_l # highlightingItemStack + +# Block +public net.minecraft.block.Block func_149642_a(Lnet/minecraft/world/World;IIILnet/minecraft/item/ItemStack;)V # dropBlockAsItem + From 6946a70f18feb98b8297b3a68cd0c031c5dac284 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 26 Jun 2025 23:11:24 +0300 Subject: [PATCH 212/491] Make exhaustion only apply once --- src/main/java/com/hbm/items/tool/ItemToolAbility.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 022c9274c..b8b25b14b 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -195,6 +195,8 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro preset.harvestAbility.postHarvestAll(preset.harvestAbilityLevel, world, player); + player.addExhaustion(0.025F); + return true; } @@ -379,7 +381,9 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro } catch (InvocationTargetException e) { // Might be possible? Not in practice, though MainRegistry.logger.error("Failed to capture drops for block " + block, e); - } + } + + player.addExhaustion(-0.025F); } } From 14377708bebbd27ecb8bbf75f32fabf0c157778b Mon Sep 17 00:00:00 2001 From: Lazzzycatwastaken Date: Sat, 28 Jun 2025 21:00:53 +0200 Subject: [PATCH 213/491] fuck you github --- .../assets/hbm/structures/lighthouse.nbt | Bin 0 -> 157017 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/hbm/structures/lighthouse.nbt diff --git a/src/main/resources/assets/hbm/structures/lighthouse.nbt b/src/main/resources/assets/hbm/structures/lighthouse.nbt new file mode 100644 index 0000000000000000000000000000000000000000..ff421635304c4389af2b1d442a576f61b69a61fd GIT binary patch literal 157017 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 Date: Sat, 28 Jun 2025 22:41:11 +0300 Subject: [PATCH 214/491] Revert "Make exhaustion only apply once" This reverts commit 6946a70f18feb98b8297b3a68cd0c031c5dac284. --- src/main/java/com/hbm/items/tool/ItemToolAbility.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index b8b25b14b..022c9274c 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -195,8 +195,6 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro preset.harvestAbility.postHarvestAll(preset.harvestAbilityLevel, world, player); - player.addExhaustion(0.025F); - return true; } @@ -381,9 +379,7 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro } catch (InvocationTargetException e) { // Might be possible? Not in practice, though MainRegistry.logger.error("Failed to capture drops for block " + block, e); - } - - player.addExhaustion(-0.025F); + } } } From 9a7124c8ff778b5f618659ee087f31911c4a5985 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 28 Jun 2025 22:42:40 +0300 Subject: [PATCH 215/491] Allow stopping conveyor inserters with redstone A stopped inserted will still take items to its own inventory, but won't insert them into the inventory it is facing. Useful for taking out stuff from overflowing outputs, if you want to maintain a particular slot distribution. --- .../com/hbm/blocks/network/CraneInserter.java | 18 +++-- .../network/TileEntityCraneInserter.java | 79 ++++++++++--------- 2 files changed, 50 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/CraneInserter.java b/src/main/java/com/hbm/blocks/network/CraneInserter.java index b83da5278..e4cb74967 100644 --- a/src/main/java/com/hbm/blocks/network/CraneInserter.java +++ b/src/main/java/com/hbm/blocks/network/CraneInserter.java @@ -68,17 +68,19 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock { ItemStack toAdd = entity.getItemStack().copy(); - int[] access = null; + if (!world.isBlockIndirectlyGettingPowered(x, y, z)) { + int[] access = null; - if(te instanceof ISidedInventory) { - ISidedInventory sided = (ISidedInventory) te; - access = InventoryUtil.masquerade(sided, outputDirection.getOpposite().ordinal()); - } + if(te instanceof ISidedInventory) { + ISidedInventory sided = (ISidedInventory) te; + access = InventoryUtil.masquerade(sided, outputDirection.getOpposite().ordinal()); + } - if(te instanceof IInventory) { - IInventory inv = (IInventory) te; + if(te instanceof IInventory) { + IInventory inv = (IInventory) te; - addToInventory(inv, access, toAdd, outputDirection.getOpposite().ordinal()); + addToInventory(inv, access, toAdd, outputDirection.getOpposite().ordinal()); + } } TileEntityCraneInserter inserter = null; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java index afd6012ed..3d55bf30f 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java @@ -40,48 +40,49 @@ public class TileEntityCraneInserter extends TileEntityCraneBase implements IGUI super.updateEntity(); if(!worldObj.isRemote) { - ForgeDirection outputSide = getOutputSide(); - TileEntity te = worldObj.getTileEntity(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ); - - int[] access = null; - - if(te instanceof ISidedInventory) { - ISidedInventory sided = (ISidedInventory) te; - //access = sided.getAccessibleSlotsFromSide(dir.ordinal()); - access = InventoryUtil.masquerade(sided, outputSide.getOpposite().ordinal()); - } - - if(te instanceof IInventory) { - for(int i = 0; i < slots.length; i++) { - - ItemStack stack = slots[i]; - - if(stack != null) { - ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), outputSide.getOpposite().ordinal()); - - if(ret == null || ret.stackSize != stack.stackSize) { - slots[i] = ret; - this.markDirty(); - return; - } - } + if (!this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) {ForgeDirection outputSide = getOutputSide(); + TileEntity te = worldObj.getTileEntity(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ); + + int[] access = null; + + if(te instanceof ISidedInventory) { + ISidedInventory sided = (ISidedInventory) te; + //access = sided.getAccessibleSlotsFromSide(dir.ordinal()); + access = InventoryUtil.masquerade(sided, outputSide.getOpposite().ordinal()); } - //if the previous operation fails, repeat but use single items instead of the whole stack instead - //this should fix cases where the inserter can't insert into something that has a stack size limitation - for(int i = 0; i < slots.length; i++) { - - ItemStack stack = slots[i]; - - if(stack != null) { - stack = stack.copy(); - stack.stackSize = 1; - ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), outputSide.getOpposite().ordinal()); + if(te instanceof IInventory) { + for(int i = 0; i < slots.length; i++) { - if(ret == null || ret.stackSize != stack.stackSize) { - this.decrStackSize(i, 1); - this.markDirty(); - return; + ItemStack stack = slots[i]; + + if(stack != null) { + ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), outputSide.getOpposite().ordinal()); + + if(ret == null || ret.stackSize != stack.stackSize) { + slots[i] = ret; + this.markDirty(); + return; + } + } + } + + //if the previous operation fails, repeat but use single items instead of the whole stack instead + //this should fix cases where the inserter can't insert into something that has a stack size limitation + for(int i = 0; i < slots.length; i++) { + + ItemStack stack = slots[i]; + + if(stack != null) { + stack = stack.copy(); + stack.stackSize = 1; + ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), outputSide.getOpposite().ordinal()); + + if(ret == null || ret.stackSize != stack.stackSize) { + this.decrStackSize(i, 1); + this.markDirty(); + return; + } } } } From db109d8bcf990ac44bc96c3c1fe52faaae2f0004 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 28 Jun 2025 23:14:45 +0300 Subject: [PATCH 216/491] Crane extractors take items to inventory when not facing a conveyor Allows using them as an ad-hoc hopper with a small buffer. Previously their buffer was effectively rudimentary -- it was used for output, but nothing ever inputted into it. --- .../network/TileEntityCraneExtractor.java | 74 +++++++++++-------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 105ceb3fd..e284f0734 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -10,6 +10,8 @@ import com.hbm.items.ModItems; import com.hbm.module.ModulePatternMatcher; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.IGUIProvider; +import com.hbm.util.InventoryUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -94,54 +96,62 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU } boolean hasSent = false; + + IConveyorBelt belt = null; if(b instanceof IConveyorBelt) { + belt = (IConveyorBelt) b; + } - IConveyorBelt belt = (IConveyorBelt) b; + /* try to send items from a connected inv, if present */ + if(te instanceof IInventory) { - /* try to send items from a connected inv, if present */ - if(te instanceof IInventory) { + IInventory inv = (IInventory) te; + int size = access == null ? inv.getSizeInventory() : access.length; + + for(int i = 0; i < size; i++) { + int index = access == null ? i : access[i]; + ItemStack stack = inv.getStackInSlot(index); - IInventory inv = (IInventory) te; - int size = access == null ? inv.getSizeInventory() : access.length; - - for(int i = 0; i < size; i++) { - int index = access == null ? i : access[i]; - ItemStack stack = inv.getStackInSlot(index); + if(stack != null && (sided == null || sided.canExtractItem(index, stack, inputSide.getOpposite().ordinal()))){ - if(stack != null && (sided == null || sided.canExtractItem(index, stack, inputSide.getOpposite().ordinal()))){ + boolean match = this.matchesFilter(stack); + + if((isWhitelist && match) || (!isWhitelist && !match)) { + stack = stack.copy(); + int toSend = Math.min(amount, stack.stackSize); - boolean match = this.matchesFilter(stack); - - if((isWhitelist && match) || (!isWhitelist && !match)) { - stack = stack.copy(); - int toSend = Math.min(amount, stack.stackSize); + if (belt != null) { inv.decrStackSize(index, toSend); stack.stackSize = toSend; - sendItem(stack, belt, outputSide); - hasSent = true; - break; + } else { + stack.stackSize = toSend; + ItemStack remaining = InventoryUtil.tryAddItemToInventory(this.slots, stack); + inv.decrStackSize(index, toSend - (remaining == null ? 0 : remaining.stackSize)); } + hasSent = true; + break; } } } + } + + /* if no item has been sent, send buffered items while ignoring the filter */ + if(!hasSent && belt != null) { - /* if no item has been sent, send buffered items while ignoring the filter */ - if(!hasSent) { + for(int i = 9; i < 18; i++) { + ItemStack stack = slots[i]; - for(int i = 9; i < 18; i++) { - ItemStack stack = slots[i]; - - if(stack != null){ - stack = stack.copy(); - int toSend = Math.min(amount, stack.stackSize); - decrStackSize(i, toSend); - stack.stackSize = toSend; - - sendItem(stack, belt, outputSide); - break; - } + if(stack != null){ + stack = stack.copy(); + int toSend = Math.min(amount, stack.stackSize); + + decrStackSize(i, toSend); + stack.stackSize = toSend; + sendItem(stack, belt, outputSide); + + break; } } } From 997e96f7579b714bf8a2b1d724d96c80797b1706 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 28 Jun 2025 23:23:16 +0300 Subject: [PATCH 217/491] Exclude special slots --- .../com/hbm/tileentity/network/TileEntityCraneExtractor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index e284f0734..804c42321 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -127,7 +127,7 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU sendItem(stack, belt, outputSide); } else { stack.stackSize = toSend; - ItemStack remaining = InventoryUtil.tryAddItemToInventory(this.slots, stack); + ItemStack remaining = InventoryUtil.tryAddItemToInventory(this.slots, 9, 17, stack); inv.decrStackSize(index, toSend - (remaining == null ? 0 : remaining.stackSize)); } hasSent = true; From f6f1c1c380e35c6acefeaf52677631210fb5ae59 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 28 Jun 2025 23:50:45 +0300 Subject: [PATCH 218/491] Turn presses into pseudomultiblocks Affects burner and electrical press. They seem to have been implemented largely based on copy-pasted furnace code, and seemingly predate BlockDummyable. That meant the top two blocks of a press were intangible. Now they're in line with the rest of the machines, including the conveyor press. --- .../com/hbm/blocks/machine/MachineEPress.java | 91 +++++-------------- .../com/hbm/blocks/machine/MachinePress.java | 81 +++-------------- 2 files changed, 38 insertions(+), 134 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineEPress.java b/src/main/java/com/hbm/blocks/machine/MachineEPress.java index 465ea6c69..42cb7713f 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineEPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineEPress.java @@ -2,6 +2,7 @@ package com.hbm.blocks.machine; import java.util.Random; +import com.hbm.blocks.BlockDummyable; import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.TileEntityMachineEPress; import com.hbm.world.gen.INBTTransformable; @@ -20,10 +21,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -public class MachineEPress extends BlockContainer implements INBTTransformable { - - private final Random field_149933_a = new Random(); - private static boolean keepInventory; +public class MachineEPress extends BlockDummyable implements INBTTransformable { public MachineEPress(Material p_i45386_1_) { super(p_i45386_1_); @@ -35,75 +33,27 @@ public class MachineEPress extends BlockContainer implements INBTTransformable { } @Override - public int getRenderType() { - return -1; + public int[] getDimensions() { + return new int[] {2, 0, 0, 0, 0, 0}; } @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) { - if(!keepInventory) { - ISidedInventory tileentityfurnace = (ISidedInventory) p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); - - if(tileentityfurnace != null) { - for(int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) { - ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); - - if(itemstack != null) { - float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - - while(itemstack.stackSize > 0) { - int j1 = this.field_149933_a.nextInt(21) + 10; - - if(j1 > itemstack.stackSize) { - j1 = itemstack.stackSize; - } - - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - - if(itemstack.hasTagCompound()) { - entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); - } - - float f3 = 0.05F; - entityitem.motionX = (float) this.field_149933_a.nextGaussian() * f3; - entityitem.motionY = (float) this.field_149933_a.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float) this.field_149933_a.nextGaussian() * f3; - p_149749_1_.spawnEntityInWorld(entityitem); - } - } - } - - p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); - } - } - - super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); + public int getOffset() { + return 0; } @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { - int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - - if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2); - if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2); - if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2); - if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2); + super.onBlockPlacedBy(world, x, y, z, player, itemStack); if(itemStack.hasDisplayName()) { - ((TileEntityMachineEPress) world.getTileEntity(x, y, z)).setCustomName(itemStack.getDisplayName()); + int[] pos = this.findCore(world, x, y, z); + if(pos != null) { + TileEntityMachineEPress entity = (TileEntityMachineEPress) world.getTileEntity(pos[0], pos[1], pos[2]); + if(entity != null) { + entity.setCustomName(itemStack.getDisplayName()); + } + } } } @@ -112,10 +62,15 @@ public class MachineEPress extends BlockContainer implements INBTTransformable { if(world.isRemote) { return true; } else if(!player.isSneaking()) { - TileEntityMachineEPress entity = (TileEntityMachineEPress) world.getTileEntity(x, y, z); - if(entity != null) { - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); - } + int[] pos = this.findCore(world, x, y, z); + if(pos == null) + return false; + + TileEntityMachineEPress entity = (TileEntityMachineEPress) world.getTileEntity(pos[0], pos[1], pos[2]); + if(entity == null) + return false; + + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); return true; } else { return false; diff --git a/src/main/java/com/hbm/blocks/machine/MachinePress.java b/src/main/java/com/hbm/blocks/machine/MachinePress.java index a28d22172..ddf7782b7 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePress.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePress.java @@ -2,23 +2,16 @@ package com.hbm.blocks.machine; import java.util.Random; +import com.hbm.blocks.BlockDummyable; import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.TileEntityMachinePress; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; -import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -public class MachinePress extends BlockContainer { - - private final Random field_149933_a = new Random(); - private static boolean keepInventory; +public class MachinePress extends BlockDummyable { public MachinePress(Material p_i45386_1_) { super(p_i45386_1_); @@ -30,62 +23,13 @@ public class MachinePress extends BlockContainer { } @Override - public int getRenderType() { - return -1; + public int[] getDimensions() { + return new int[] {2, 0, 0, 0, 0, 0}; } @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) { - if(!keepInventory) { - TileEntityMachinePress tileentityfurnace = (TileEntityMachinePress) p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); - - if(tileentityfurnace != null) { - for(int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) { - ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); - - if(itemstack != null) { - float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - - while(itemstack.stackSize > 0) { - int j1 = this.field_149933_a.nextInt(21) + 10; - - if(j1 > itemstack.stackSize) { - j1 = itemstack.stackSize; - } - - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - - if(itemstack.hasTagCompound()) { - entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); - } - - float f3 = 0.05F; - entityitem.motionX = (float) this.field_149933_a.nextGaussian() * f3; - entityitem.motionY = (float) this.field_149933_a.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float) this.field_149933_a.nextGaussian() * f3; - p_149749_1_.spawnEntityInWorld(entityitem); - } - } - } - - p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); - } - } - - super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); + public int getOffset() { + return 0; } @Override @@ -93,10 +37,15 @@ public class MachinePress extends BlockContainer { if(world.isRemote) { return true; } else if(!player.isSneaking()) { - TileEntityMachinePress entity = (TileEntityMachinePress) world.getTileEntity(x, y, z); - if(entity != null) { - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); - } + int[] pos = this.findCore(world, x, y, z); + if(pos == null) + return false; + + TileEntityMachinePress entity = (TileEntityMachinePress) world.getTileEntity(pos[0], pos[1], pos[2]); + if(entity == null) + return false; + + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); return true; } else { return false; From 1f073d570cece2b650a6fb43676a3d2db805b597 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 28 Jun 2025 23:52:39 +0300 Subject: [PATCH 219/491] Fix createNewTileEntity and clean up a bit --- .../com/hbm/blocks/machine/MachineEPress.java | 15 +++++---------- .../java/com/hbm/blocks/machine/MachinePress.java | 9 +++++---- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineEPress.java b/src/main/java/com/hbm/blocks/machine/MachineEPress.java index 42cb7713f..3f33886f3 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineEPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineEPress.java @@ -8,28 +8,23 @@ import com.hbm.tileentity.machine.TileEntityMachineEPress; import com.hbm.world.gen.INBTTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class MachineEPress extends BlockDummyable implements INBTTransformable { - public MachineEPress(Material p_i45386_1_) { - super(p_i45386_1_); + public MachineEPress(Material mat) { + super(mat); } @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntityMachineEPress(); + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachineEPress(); + return null; } @Override diff --git a/src/main/java/com/hbm/blocks/machine/MachinePress.java b/src/main/java/com/hbm/blocks/machine/MachinePress.java index ddf7782b7..6633c9e76 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePress.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePress.java @@ -13,13 +13,14 @@ import net.minecraft.world.World; public class MachinePress extends BlockDummyable { - public MachinePress(Material p_i45386_1_) { - super(p_i45386_1_); + public MachinePress(Material mat) { + super(mat); } @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntityMachinePress(); + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachinePress(); + return null; } @Override From 1bb88b176a7231932f2b2875e4a9ddf2f6f70de4 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 29 Jun 2025 00:10:25 +0300 Subject: [PATCH 220/491] More fixes Turns out, pseudomultiblocks are pretty complicated --- src/main/java/com/hbm/blocks/machine/MachineEPress.java | 4 +++- src/main/java/com/hbm/blocks/machine/MachinePress.java | 4 +++- src/main/java/com/hbm/render/tileentity/RenderEPress.java | 7 ++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineEPress.java b/src/main/java/com/hbm/blocks/machine/MachineEPress.java index 3f33886f3..d52898b60 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineEPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineEPress.java @@ -4,6 +4,7 @@ import java.util.Random; import com.hbm.blocks.BlockDummyable; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineEPress; import com.hbm.world.gen.INBTTransformable; @@ -24,6 +25,7 @@ public class MachineEPress extends BlockDummyable implements INBTTransformable { @Override public TileEntity createNewTileEntity(World world, int meta) { if(meta >= 12) return new TileEntityMachineEPress(); + if(meta >= 6) return new TileEntityProxyCombo(true, false, false); return null; } @@ -65,7 +67,7 @@ public class MachineEPress extends BlockDummyable implements INBTTransformable { if(entity == null) return false; - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]); return true; } else { return false; diff --git a/src/main/java/com/hbm/blocks/machine/MachinePress.java b/src/main/java/com/hbm/blocks/machine/MachinePress.java index 6633c9e76..22ecffa26 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePress.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePress.java @@ -4,6 +4,7 @@ import java.util.Random; import com.hbm.blocks.BlockDummyable; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachinePress; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.material.Material; @@ -20,6 +21,7 @@ public class MachinePress extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { if(meta >= 12) return new TileEntityMachinePress(); + if(meta >= 6) return new TileEntityProxyCombo(true, false, false); return null; } @@ -46,7 +48,7 @@ public class MachinePress extends BlockDummyable { if(entity == null) return false; - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]); return true; } else { return false; diff --git a/src/main/java/com/hbm/render/tileentity/RenderEPress.java b/src/main/java/com/hbm/render/tileentity/RenderEPress.java index 987ab9a0a..cf8915ef8 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderEPress.java +++ b/src/main/java/com/hbm/render/tileentity/RenderEPress.java @@ -2,6 +2,7 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; +import com.hbm.blocks.BlockDummyable; import com.hbm.main.ResourceManager; import com.hbm.render.util.RenderDecoItem; import com.hbm.tileentity.machine.TileEntityMachineEPress; @@ -28,7 +29,7 @@ public class RenderEPress extends TileEntitySpecialRenderer { GL11.glEnable(GL11.GL_LIGHTING); GL11.glRotatef(180, 0F, 1F, 0F); - switch(tileentity.getBlockMetadata()) { + switch(tileentity.getBlockMetadata() - BlockDummyable.offset) { case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; @@ -50,7 +51,7 @@ public class RenderEPress extends TileEntitySpecialRenderer { GL11.glEnable(GL11.GL_LIGHTING); GL11.glRotatef(180, 0F, 1F, 0F); - switch(tileentity.getBlockMetadata()) { + switch(tileentity.getBlockMetadata() - BlockDummyable.offset) { case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; @@ -78,7 +79,7 @@ public class RenderEPress extends TileEntitySpecialRenderer { GL11.glEnable(GL11.GL_LIGHTING); GL11.glRotatef(180, 0F, 1F, 0F); - switch(tileentity.getBlockMetadata()) { + switch(tileentity.getBlockMetadata() - BlockDummyable.offset) { case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; case 4: From 41d62c49db9e1fa3704c0c10eb59123ef7f2281f Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 29 Jun 2025 00:24:32 +0300 Subject: [PATCH 221/491] Remove broken & redundant transformMeta --- .../java/com/hbm/blocks/machine/MachineEPress.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineEPress.java b/src/main/java/com/hbm/blocks/machine/MachineEPress.java index d52898b60..12a7f91ff 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineEPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineEPress.java @@ -1,12 +1,9 @@ package com.hbm.blocks.machine; -import java.util.Random; - import com.hbm.blocks.BlockDummyable; import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineEPress; -import com.hbm.world.gen.INBTTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.material.Material; @@ -16,7 +13,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -public class MachineEPress extends BlockDummyable implements INBTTransformable { +public class MachineEPress extends BlockDummyable { public MachineEPress(Material mat) { super(mat); @@ -73,9 +70,4 @@ public class MachineEPress extends BlockDummyable implements INBTTransformable { return false; } } - - @Override - public int transformMeta(int meta, int coordBaseMode) { - return INBTTransformable.transformMetaDeco(meta, coordBaseMode); - } } \ No newline at end of file From 4a869ae2ea3a5926508b5f8936aa93e9cff2479d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 29 Jun 2025 01:02:43 +0300 Subject: [PATCH 222/491] Add automatic migration API to BlockDummyable --- .../java/com/hbm/blocks/BlockDummyable.java | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 9508350b5..0d7fa08b4 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -77,27 +77,20 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl super.onNeighborBlockChange(world, x, y, z, block); - if(world.isRemote || safeRem) + if(safeRem) return; - int metadata = world.getBlockMetadata(x, y, z); - - // if it's an extra, remove the extra-ness - if(metadata >= extra) - metadata -= extra; - - ForgeDirection dir = ForgeDirection.getOrientation(metadata).getOpposite(); - Block b = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ); - - if(b != this) { - world.setBlockToAir(x, y, z); - } + destroyIfOrphan(world, x, y, z); } public void updateTick(World world, int x, int y, int z, Random rand) { super.updateTick(world, x, y, z, rand); + destroyIfOrphan(world, x, y, z); + } + + private void destroyIfOrphan(World world, int x, int y, int z) { if(world.isRemote) return; @@ -111,9 +104,26 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl Block b = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ); if(b != this) { - world.setBlockToAir(x, y, z); + if (isLegacyMonoblock(world, x, y, z)) { + fixLegacyMonoblock(world, x, y, z); + } else { + world.setBlockToAir(x, y, z); + } } + } + // Override this when turning a single block into a pseudo-multiblock. + // If this returns true, instead of being deleted as an orphan, the block + // will be promoted to a core of a dummyable, however without any dummies. + // This is only called if the block is presumed an orphan, so you don't + // need to check that here. + protected boolean isLegacyMonoblock(World world, int x, int y, int z) { + return false; + } + + protected void fixLegacyMonoblock(World world, int x, int y, int z) { + // Promote to a lone core block with the same effective rotation as before the change + world.setBlockMetadataWithNotify(x, y, z, offset + world.getBlockMetadata(x, y, z), 3); } public int[] findCore(World world, int x, int y, int z) { From 0eb87524ab832567d48a3a48b901f6df1305d0d0 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 29 Jun 2025 01:03:16 +0300 Subject: [PATCH 223/491] Make new press implementation savegame-compatible --- src/main/java/com/hbm/blocks/machine/MachineEPress.java | 6 ++++++ src/main/java/com/hbm/blocks/machine/MachinePress.java | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/com/hbm/blocks/machine/MachineEPress.java b/src/main/java/com/hbm/blocks/machine/MachineEPress.java index 12a7f91ff..add331ba3 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineEPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineEPress.java @@ -36,6 +36,12 @@ public class MachineEPress extends BlockDummyable { return 0; } + @Override + protected boolean isLegacyMonoblock(World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + return te != null && te instanceof TileEntityMachineEPress; + } + @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { super.onBlockPlacedBy(world, x, y, z, player, itemStack); diff --git a/src/main/java/com/hbm/blocks/machine/MachinePress.java b/src/main/java/com/hbm/blocks/machine/MachinePress.java index 22ecffa26..6f4cf5808 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePress.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePress.java @@ -34,6 +34,12 @@ public class MachinePress extends BlockDummyable { public int getOffset() { return 0; } + + @Override + protected boolean isLegacyMonoblock(World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + return te != null && te instanceof TileEntityMachinePress; + } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { From b89bec56c867879651e48baa72c057e48b7ea053 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 29 Jun 2025 00:06:44 +0200 Subject: [PATCH 224/491] gun --- .../weapon/sedna/factory/Orchestras.java | 18 +++++ .../item/weapon/sedna/ItemRenderSexy.java | 7 ++ .../weapon/sedna/ItemRenderWeaponBase.java | 2 + .../assets/hbm/models/weapons/sexy.obj | 72 +++++++++--------- .../models/weapons/sexy_real_no_fake.png | Bin 4284 -> 5698 bytes 5 files changed, 63 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index dddfbeda4..2d987404c 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -950,8 +950,26 @@ public class Orchestras { if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); } if(type == AnimType.RELOAD) { + if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); + if(timer == 4) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.75F); + if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1F); + if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); + if(timer == 55) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.5F, 1F); + if(timer == 65) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); + if(timer == 74) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1F); + if(timer == 88) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.75F); + if(timer == 100) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); + if(timer == 55) ctx.config.getReceivers(stack)[0].getMagazine(stack).reloadAction(stack, ctx.inventory); } + + if(type == AnimType.INSPECT) { + if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); + if(timer == 25) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); + if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); + if(timer == 35) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); + if(timer == 50) entity.worldObj.playSoundAtEntity(entity, "hbm:player.groan", 1F, 1F); + } }; public static BiConsumer ORCHESTRA_QUADRO = (stack, ctx) -> { diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java index acd889ab4..35e772158 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java @@ -172,6 +172,13 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { GL11.glPopMatrix(); GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, 8); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(90 * gun.shotRand, 1, 0, 0); + this.renderMuzzleFlash(gun.lastShot[0], 150, 7.5); + GL11.glPopMatrix(); } @Override diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java index cc7ba4b30..3abb3a71c 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java @@ -344,6 +344,7 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer { if(System.currentTimeMillis() - lastShot < flash) { GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glDepthMask(false); GL11.glPushMatrix(); double fire = (System.currentTimeMillis() - lastShot) / (double) flash; @@ -379,6 +380,7 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer { tess.draw(); GL11.glPopMatrix(); + GL11.glDepthMask(true); GL11.glDisable(GL11.GL_BLEND); } } diff --git a/src/main/resources/assets/hbm/models/weapons/sexy.obj b/src/main/resources/assets/hbm/models/weapons/sexy.obj index 114be9b3d..53da0cde9 100644 --- a/src/main/resources/assets/hbm/models/weapons/sexy.obj +++ b/src/main/resources/assets/hbm/models/weapons/sexy.obj @@ -139,8 +139,8 @@ vt 0.933357 0.212107 vt 0.966667 0.000061 vt 0.995513 0.020249 vt 0.937820 0.020249 -vt 0.999976 0.040436 -vt 0.983321 0.071080 +vt 0.933357 0.040436 +vt 0.950012 0.071080 vt 0.966667 0.065671 vt 0.075000 0.136364 vt 0.066667 0.121212 @@ -206,17 +206,17 @@ vt 0.999976 0.131281 vt 0.995513 0.151468 vt 0.983321 0.005470 vt 0.950012 0.005470 -vt 0.937820 0.085859 -vt 0.933357 0.106046 -vt 0.933357 0.040436 -vt 0.937820 0.020249 -vt 0.950012 0.005470 -vt 0.966667 0.000061 -vt 0.983321 0.005470 -vt 0.995513 0.020249 -vt 0.999976 0.106046 vt 0.995513 0.085859 -vt 0.950012 0.071080 +vt 0.999976 0.106046 +vt 0.999976 0.040436 +vt 0.995513 0.020249 +vt 0.983321 0.005470 +vt 0.966667 0.000061 +vt 0.950012 0.005470 +vt 0.937820 0.020249 +vt 0.933357 0.106046 +vt 0.937820 0.085859 +vt 0.983321 0.071080 vt 0.066667 0.181818 vt 0.039454 0.130050 vt 0.044792 0.123580 @@ -2777,9 +2777,9 @@ vt 0.612500 0.313131 vt 0.983257 0.793649 vt 0.999848 0.828481 vt 0.933485 0.828481 -vt 0.933485 0.828481 -vt 0.950076 0.793649 -vt 0.999848 0.828481 +vt 0.933485 0.702218 +vt 0.950076 0.667387 +vt 0.999848 0.702218 vt 0.933384 0.595929 vt 0.950025 0.560991 vt 0.999949 0.595929 @@ -2787,8 +2787,8 @@ vt 0.999949 0.424312 vt 0.983308 0.454931 vt 0.966667 0.449526 vt 0.966667 0.383970 -vt 0.995490 0.404141 vt 0.937843 0.404141 +vt 0.995490 0.404141 vt 0.658333 0.181938 vt 0.666568 0.191919 vt 0.658333 0.201900 @@ -3055,17 +3055,17 @@ vt 0.950076 0.793649 vt 0.966667 0.788261 vt 0.995403 0.808371 vt 0.983257 0.908559 -vt 0.995403 0.893838 -vt 0.983257 0.908559 -vt 0.937931 0.893838 -vt 0.966667 0.913948 -vt 0.950076 0.908559 -vt 0.933485 0.873728 -vt 0.999848 0.873728 -vt 0.937931 0.808371 -vt 0.966667 0.788261 -vt 0.983257 0.793649 -vt 0.995403 0.808371 +vt 0.995403 0.767575 +vt 0.983257 0.782297 +vt 0.937931 0.767575 +vt 0.966667 0.787685 +vt 0.950076 0.782297 +vt 0.933485 0.747465 +vt 0.999848 0.747465 +vt 0.937931 0.682108 +vt 0.966667 0.661998 +vt 0.983257 0.667387 +vt 0.995403 0.682108 vt 0.995490 0.641313 vt 0.983308 0.656080 vt 0.937843 0.641313 @@ -3088,19 +3088,19 @@ vt 0.933384 0.489868 vt 0.933384 0.424312 vt 0.937843 0.469697 vt 0.950025 0.454931 -vt 0.983308 0.550019 -vt 0.966667 0.555424 vt 0.950025 0.550019 -vt 0.937843 0.535253 -vt 0.933384 0.515082 -vt 0.933384 0.489868 -vt 0.933384 0.424312 +vt 0.966667 0.555424 +vt 0.983308 0.550019 +vt 0.995490 0.535253 +vt 0.999949 0.515082 vt 0.999949 0.489868 vt 0.999949 0.424312 -vt 0.999949 0.515082 -vt 0.995490 0.535253 -vt 0.983308 0.389375 +vt 0.933384 0.489868 +vt 0.933384 0.424312 +vt 0.933384 0.515082 +vt 0.937843 0.535253 vt 0.950025 0.389375 +vt 0.983308 0.389375 vt 0.652511 0.198977 vt 0.650099 0.191919 vt 0.652511 0.184862 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/sexy_real_no_fake.png b/src/main/resources/assets/hbm/textures/models/weapons/sexy_real_no_fake.png index fa565a3a07c3d352e8e82b210c80dbf856376647..5855c616b09a0f70d5fd80020dd32525d2ae90e1 100644 GIT binary patch literal 5698 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 Tl@M#C00000NkvXXu0mjf^2_x9 From 3b36807242fa24ef3b9673a9b9e3ff86d92f114f Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 29 Jun 2025 01:44:31 +0300 Subject: [PATCH 225/491] Trigger the press fix automatically --- .../tileentity/machine/TileEntityMachineEPress.java | 12 ++++++++++++ .../tileentity/machine/TileEntityMachinePress.java | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java index b2afe4309..90896b626 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine; import java.util.HashMap; import java.util.List; +import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.UpgradeManagerNT; import com.hbm.inventory.container.ContainerMachineEPress; @@ -64,6 +65,17 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE if(!worldObj.isRemote) { + // Triggers the legacy monoblock fix + if (worldObj.getBlockMetadata(xCoord, yCoord, zCoord) < BlockDummyable.offset) { + // Does nothing + // worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + + BlockDummyable block = (BlockDummyable)worldObj.getBlock(xCoord, yCoord, zCoord); + if (block != null) { + block.onNeighborBlockChange(worldObj, xCoord, yCoord, zCoord, null); + } + } + this.updateConnections(); power = Library.chargeTEFromItems(slots, 0, power, maxPower); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java index c927edc0a..0684ef87e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine; +import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.container.ContainerMachinePress; import com.hbm.inventory.gui.GUIMachinePress; @@ -53,6 +54,17 @@ public class TileEntityMachinePress extends TileEntityMachineBase implements IGU if(!worldObj.isRemote) { + // Triggers the legacy monoblock fix + if (worldObj.getBlockMetadata(xCoord, yCoord, zCoord) < BlockDummyable.offset) { + // Does nothing + // worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + + BlockDummyable block = (BlockDummyable)worldObj.getBlock(xCoord, yCoord, zCoord); + if (block != null) { + block.onNeighborBlockChange(worldObj, xCoord, yCoord, zCoord, null); + } + } + boolean preheated = false; for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { From d1f50a8eb4419057c17dbc9faabdf87b225be10a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 29 Jun 2025 15:45:30 +0300 Subject: [PATCH 226/491] Fix press auto-migration --- .../tileentity/machine/TileEntityMachineEPress.java | 11 ++--------- .../tileentity/machine/TileEntityMachinePress.java | 11 ++--------- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java index 90896b626..4dc4df595 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java @@ -3,7 +3,6 @@ package com.hbm.tileentity.machine; import java.util.HashMap; import java.util.List; -import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.UpgradeManagerNT; import com.hbm.inventory.container.ContainerMachineEPress; @@ -66,14 +65,8 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE if(!worldObj.isRemote) { // Triggers the legacy monoblock fix - if (worldObj.getBlockMetadata(xCoord, yCoord, zCoord) < BlockDummyable.offset) { - // Does nothing - // worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - - BlockDummyable block = (BlockDummyable)worldObj.getBlock(xCoord, yCoord, zCoord); - if (block != null) { - block.onNeighborBlockChange(worldObj, xCoord, yCoord, zCoord, null); - } + if (worldObj.getBlockMetadata(xCoord, yCoord, zCoord) < 12) { + worldObj.scheduleBlockUpdate(xCoord, yCoord, zCoord, worldObj.getBlock(xCoord, yCoord, zCoord), 1); } this.updateConnections(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java index 0684ef87e..a0d1e5b8a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java @@ -1,6 +1,5 @@ package com.hbm.tileentity.machine; -import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.container.ContainerMachinePress; import com.hbm.inventory.gui.GUIMachinePress; @@ -55,14 +54,8 @@ public class TileEntityMachinePress extends TileEntityMachineBase implements IGU if(!worldObj.isRemote) { // Triggers the legacy monoblock fix - if (worldObj.getBlockMetadata(xCoord, yCoord, zCoord) < BlockDummyable.offset) { - // Does nothing - // worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - - BlockDummyable block = (BlockDummyable)worldObj.getBlock(xCoord, yCoord, zCoord); - if (block != null) { - block.onNeighborBlockChange(worldObj, xCoord, yCoord, zCoord, null); - } + if (worldObj.getBlockMetadata(xCoord, yCoord, zCoord) < 12) { + worldObj.scheduleBlockUpdate(xCoord, yCoord, zCoord, worldObj.getBlock(xCoord, yCoord, zCoord), 1); } boolean preheated = false; From 3583ad66cd54b02e203630f285838f483c84ea1f Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 29 Jun 2025 22:30:04 +0200 Subject: [PATCH 227/491] ough --- changelog | 18 +++++++++++++++++- .../blocks/machine/MachineRotaryFurnace.java | 1 - .../FluidDuctPaintableBlockExhaust.java | 4 ---- .../com/hbm/items/tool/ItemToolAbility.java | 1 - .../items/weapon/sedna/factory/Orchestras.java | 2 +- .../weapon/sedna/factory/XFactory12ga.java | 2 +- .../weapon/sedna/mods/WeaponModManager.java | 2 +- .../item/weapon/sedna/ItemRenderSexy.java | 7 ++----- .../machine/storage/TileEntityMassStorage.java | 1 - 9 files changed, 22 insertions(+), 16 deletions(-) diff --git a/changelog b/changelog index 6f3ede9f5..1e3e818a7 100644 --- a/changelog +++ b/changelog @@ -12,8 +12,11 @@ * Also has sound, unlike the old chemical factory * Output fluids are now automatically sent to input tanks, at a rate of up to 50mB/t for somewhat fair fluid sharing * This means that a chemical factory can make hydrogen peroxide, sulfuric acid and nitric acid, and the only fluid input needed is water +* Paintable exhaust pipe + * Full block exhaust pipe that behaves like paintable cables and ducts ## Changed +* Updated chinese and ukrainian localizations * The DNT suit now has a damage threshold of 1,000 * Compressed biomass now has a nice cube shape * The new chemical plant's indicator lights are now functional @@ -31,6 +34,16 @@ * The memespoon is now safe(tm) * Instead of using a bugged instakill implementation, a fall distance of >2 now deals 50 extra melee damage * Instead of blowing up like a nuke with a fall distance of >20, it now explodes similarly to a non-HE artillery grenade. This deals 150 damage in an AoE, has armor piercing properties and is, like the original functionality, still lethal to the user +* The fuel port on the rotary furnace now has a tooltip showing that it can be used for automation +* Shredders will now prioritize NTM items when automatically generating recipes + * The priority for what mods' items should be chosen can be configured +* Mass storage units' stockpiles can now be directly accessed by ME systems +* Inserters can now be suspended by applying a redstone signal +* The legendary variant of the auto shotgun is no longer a simple reskin, it now has a completely unique model and animations + * Added alcoholism +* Open doors can now be interacted through +* Area abilities on tools now drop all mined blocks in the center +* Tools with AoE now come with the new "flat AoE" ability, which is the same but the area is only 1 block tall ## Fixed * Chemical plant ports. For real this time. @@ -45,4 +58,7 @@ * Fixed issue where mining strange stone with silk touch ability would cause a desync. It also now drops cobblestone, as if silk touch wasn't active at all * Fixed issue where applying a filter to a mask that doesn't support certain protection types would permanently remove those types from the filter until the game is restarted * Fixed InventoryBogoSorter being able to move held crates -* Fixed tier 2 pickaxes mining depth rock causing a desync with the depth rock not actually being broken \ No newline at end of file +* Fixed tier 2 pickaxes mining depth rock causing a desync with the depth rock not actually being broken +* Replaced paintabble cables in the lighthouse with regular ones, fixing an issue where the paint would ID shift +* Fixed light blocks being considered solid for NPC pathfinding +* Fixed issue regarding locked slots when using crates diff --git a/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java b/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java index e252c8445..8dabf9e77 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java +++ b/src/main/java/com/hbm/blocks/machine/MachineRotaryFurnace.java @@ -4,7 +4,6 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineRotaryFurnace; -import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java index f57b6f9b1..382c79c8b 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctPaintableBlockExhaust.java @@ -6,7 +6,6 @@ import com.hbm.blocks.IBlockMultiPass; import com.hbm.blocks.ILookOverlay; import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; -import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.render.block.RenderBlockMultipass; import com.hbm.tileentity.network.TileEntityPipeExhaust; @@ -17,9 +16,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -31,7 +28,6 @@ import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; -import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 022c9274c..c731da461 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -29,7 +29,6 @@ import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.tileentity.IGUIProvider; import api.hbm.item.IDepthRockTool; -import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.relauncher.ReflectionHelper; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 2d987404c..c13f16a26 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -942,7 +942,7 @@ public class Orchestras { if(timer == 2) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); - if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, -0.125, aiming ? -0.125 : -0.25D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 2.5F, (float)entity.getRNG().nextGaussian() * -20F + 15F, casing.getName(), false, 60, 0.5D, 20); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? -0.0625 : -0.125, aiming ? 0 : -0.25D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 2.5F, (float)entity.getRNG().nextGaussian() * -20F + 15F, casing.getName(), false, 60, 0.5D, 20); } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index 777c2d4c4..490bd64b7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -375,7 +375,7 @@ public class XFactory12ga { ).setUnlocalizedName("gun_autoshotgun_shredder"); ModItems.gun_autoshotgun_sexy = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() - .dura(5_000).draw(20).inspect(33).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) + .dura(5_000).draw(20).inspect(33).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).hideCrosshair(false).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(64F).delay(4).auto(true).dryfireAfterAuto(true).reload(110).jam(19).sound("hbm:weapon.fire.shotgunAuto", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 100).addConfigs(g12_equestrian_bj, g12_bp, g12_bp_magnum, g12_bp_slug, g12, g12_slug, g12_flechette, g12_magnum, g12_explosive, g12_phosphorus)) diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java index d6958bc94..128341947 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java @@ -138,7 +138,7 @@ public class WeaponModManager { new WeaponModDefinition(EnumModSpecial.SPEEDUP) .addMod(new Item[] {ModItems.gun_minigun, ModItems.gun_minigun_dual}, new WeaponModMinigunSpeedup(ID_MINIGUN_SPEED)) .addMod(new Item[] {ModItems.gun_autoshotgun, ModItems.gun_autoshotgun_shredder}, new WeaponModShredderSpeedup(209)); - new WeaponModDefinition(EnumModSpecial.CHOKE).addMod(new Item[] {ModItems.gun_pepperbox, ModItems.gun_maresleg, ModItems.gun_double_barrel, ModItems.gun_liberator, ModItems.gun_spas12}, new WeaponModChoke(210)); + new WeaponModDefinition(EnumModSpecial.CHOKE).addMod(new Item[] {ModItems.gun_pepperbox, ModItems.gun_maresleg, ModItems.gun_double_barrel, ModItems.gun_liberator, ModItems.gun_spas12, ModItems.gun_autoshotgun_sexy}, new WeaponModChoke(210)); new WeaponModDefinition(EnumModSpecial.FURNITURE_GREEN).addMod(ModItems.gun_g3, new WeaponModPolymerFurniture(ID_FURNITURE_GREEN)); new WeaponModDefinition(EnumModSpecial.FURNITURE_BLACK).addMod(ModItems.gun_g3, new WeaponModPolymerFurniture(ID_FURNITURE_BLACK)); new WeaponModDefinition(EnumModSpecial.BAYONET) diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java index 35e772158..895c2357e 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSexy.java @@ -21,7 +21,7 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { @Override public float getViewFOV(ItemStack stack, float fov) { float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; - return fov * (1 - aimingProgress * 0.66F); + return fov * (1 - aimingProgress * 0.33F); } @Override @@ -29,10 +29,6 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { GL11.glTranslated(0, 0, 0.875); float offset = 0.8F; - - /*standardAimingTransform(stack, - -1.25F * offset, -0.75F * offset, 3.25F * offset, - 0, -5.25 / 8D, 1);*/ standardAimingTransform(stack, -1F * offset, -0.75F * offset, 3F * offset, @@ -45,6 +41,7 @@ public class ItemRenderSexy extends ItemRenderWeaponBase { double scale = 0.375D; GL11.glScaled(scale, scale, scale); + // i'm not going overboard with the animation boolean doesCycle = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("CYCLE") != null; boolean reloading = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("BELT") != null; boolean useShellCount = HbmAnimations.getRelevantAnim(0) != null && HbmAnimations.getRelevantAnim(0).animation.getBus("SHELLS") != null; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index 6290254ff..3d3213d2c 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -16,7 +16,6 @@ import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; From d1497abd1e16ada4812c6c077db2aa6f9973cbcf Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 29 Jun 2025 23:40:51 +0300 Subject: [PATCH 228/491] Simplify press click handling Turns out there is already a function for doing just that --- .../com/hbm/blocks/machine/MachineEPress.java | 17 +---------------- .../com/hbm/blocks/machine/MachinePress.java | 17 +---------------- 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineEPress.java b/src/main/java/com/hbm/blocks/machine/MachineEPress.java index add331ba3..c44a8e575 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineEPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineEPress.java @@ -59,21 +59,6 @@ public class MachineEPress extends BlockDummyable { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) { - return true; - } else if(!player.isSneaking()) { - int[] pos = this.findCore(world, x, y, z); - if(pos == null) - return false; - - TileEntityMachineEPress entity = (TileEntityMachineEPress) world.getTileEntity(pos[0], pos[1], pos[2]); - if(entity == null) - return false; - - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]); - return true; - } else { - return false; - } + return this.standardOpenBehavior(world, x, y, z, player, 0); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/MachinePress.java b/src/main/java/com/hbm/blocks/machine/MachinePress.java index 6f4cf5808..1e6c51ca3 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePress.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePress.java @@ -43,21 +43,6 @@ public class MachinePress extends BlockDummyable { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) { - return true; - } else if(!player.isSneaking()) { - int[] pos = this.findCore(world, x, y, z); - if(pos == null) - return false; - - TileEntityMachinePress entity = (TileEntityMachinePress) world.getTileEntity(pos[0], pos[1], pos[2]); - if(entity == null) - return false; - - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]); - return true; - } else { - return false; - } + return this.standardOpenBehavior(world, x, y, z, player, 0); } } From 18a310ba3a0e210d38125ac52a7a74926ef1527b Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 30 Jun 2025 00:24:55 +0300 Subject: [PATCH 229/491] Prevent pseudomultiblocks disappearing on chunk boundaries If this was indeed a problem, it must've been one before my PR... I suspect maybe some of my intermediate implementations allowed this to have an effect. Regardless, this is definitely a useful fix --- src/main/java/com/hbm/blocks/BlockDummyable.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 0d7fa08b4..19c33db65 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -103,7 +103,12 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl ForgeDirection dir = ForgeDirection.getOrientation(metadata).getOpposite(); Block b = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ); - if(b != this) { + // An extra precaution against multiblocks on chunk borders being erroneously deleted. + // Technically, this might be used to persist ghost dummy blocks by manipulating + // loaded chunks and block destruction, but this gives no benefit to the player, + // cannot be done accidentally, and is definitely preferable to multiblocks + // just vanishing when their chunks are unloaded in an unlucky way. + if(b != this && world.checkChunksExist(x - 1, y - 1, z - 1, x + 1, y + 1, z + 1)) { if (isLegacyMonoblock(world, x, y, z)) { fixLegacyMonoblock(world, x, y, z); } else { From 3db1dbd277f28c7d2629e35ce9e7739d1cab0d62 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 29 Jun 2025 19:11:39 -0400 Subject: [PATCH 230/491] the gob block --- src/main/java/com/hbm/blocks/ModBlocks.java | 4 + .../hbm/blocks/generic/BlockWandSpawner.java | 249 ++++++++++++++++++ .../hbm/blocks/generic/DungeonSpawner.java | 106 ++------ src/main/java/com/hbm/main/MainRegistry.java | 2 + .../java/com/hbm/main/ModEventHandler.java | 140 ++-------- .../java/com/hbm/tileentity/TileMappings.java | 4 +- src/main/java/com/hbm/util/MobUtil.java | 197 ++++++++++++++ .../world/gen/util/DungeonSpawnerActions.java | 165 ++++++++++++ .../gen/util/DungeonSpawnerConditions.java | 91 +++++++ src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../hbm/textures/blocks/wand_spawner.png | Bin 0 -> 730 bytes .../hbm/textures/blocks/wand_spawner_top.png | Bin 0 -> 740 bytes 12 files changed, 760 insertions(+), 199 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java create mode 100644 src/main/java/com/hbm/util/MobUtil.java create mode 100644 src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java create mode 100644 src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/wand_spawner.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 7ecdc698a..e60125d93 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1240,6 +1240,7 @@ public class ModBlocks { public static Block wand_air; public static Block wand_loot; public static Block wand_jigsaw; + public static Block wand_spawner; public static Material materialGas = new MaterialGas(); @@ -2390,6 +2391,8 @@ public class ModBlocks { wand_air = new BlockWand(Blocks.air).setBlockName("wand_air").setBlockTextureName(RefStrings.MODID + ":wand_air"); wand_loot = new BlockWandLoot().setBlockName("wand_loot").setBlockTextureName(RefStrings.MODID + ":wand_loot"); wand_jigsaw = new BlockWandJigsaw().setBlockName("wand_jigsaw").setBlockTextureName(RefStrings.MODID + ":wand_jigsaw"); + wand_spawner = new BlockWandSpawner().setBlockName("wand_spawner").setBlockTextureName(RefStrings.MODID + ":wand_spawner"); + } private static void registerBlock() { @@ -3534,6 +3537,7 @@ public class ModBlocks { register(wand_air); register(wand_loot); register(wand_jigsaw); + register(wand_spawner); } private static void register(Block b) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java new file mode 100644 index 000000000..fdfca7689 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java @@ -0,0 +1,249 @@ +package com.hbm.blocks.generic; + +import api.hbm.block.IToolable; +import com.hbm.blocks.IBlockSideRotation; +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.blocks.ModBlocks; +import com.hbm.config.StructureConfig; +import com.hbm.interfaces.IBomb; +import com.hbm.interfaces.ICopiable; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.BufferUtil; +import com.hbm.util.i18n.I18nUtil; +import com.hbm.world.gen.INBTTileEntityTransformable; +import com.hbm.world.gen.util.DungeonSpawnerActions; +import com.hbm.world.gen.util.DungeonSpawnerConditions; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent; + +import java.util.ArrayList; +import java.util.List; + +public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IToolable, ITooltipProvider, IBlockSideRotation, IBomb { + + @SideOnly(Side.CLIENT) protected IIcon iconTop; + + public BlockWandSpawner() { + super(Material.iron); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":wand_spawner"); + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":wand_spawner_top"); + } + + @Override + public IIcon getIcon(int side, int meta) { + return (side <= 1) ? iconTop : blockIcon; + } + + @Override + public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { + if(side == 0) return IBlockSideRotation.topToBottom(world.getBlockMetadata(x, y, z)); + if(side == 1) return world.getBlockMetadata(x, y, z); + return 0; + } + + @Override + public int getRenderType() { + return IBlockSideRotation.getRenderType(); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + + if (i == 0) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if (i == 1) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if (i == 2) world.setBlockMetadataWithNotify(x, y, z, 0, 2); + if (i == 3) world.setBlockMetadataWithNotify(x, y, z, 1, 2); + + TileEntity te = world.getTileEntity(x, y, z); + if(te instanceof TileEntityWandSpawner) + ((TileEntityWandSpawner)te).placedRotation = i; + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityWandSpawner)) return false; + + TileEntityWandSpawner spawner = (TileEntityWandSpawner) te; + + switch(tool) { + case SCREWDRIVER: + List actionNames = DungeonSpawnerActions.getActionNames(); + int indexA = actionNames.indexOf(spawner.actionID); + + indexA += player.isSneaking() ? -1 : 1; + indexA = MathHelper.clamp_int(indexA, 0, actionNames.size() - 1); + + spawner.actionID = actionNames.get(indexA); + return true; + case DEFUSER: + List conditionNames = DungeonSpawnerConditions.getConditionNames(); + int indexC = conditionNames.indexOf(spawner.conditionID); + + indexC += player.isSneaking() ? -1 : 1; + indexC = MathHelper.clamp_int(indexC, 0, conditionNames.size() - 1); + + spawner.conditionID = conditionNames.get(indexC); + + return true; + + default: return false; + } + } + + @Override + public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityWandSpawner)) return; + + TileEntityWandSpawner spawner = (TileEntityWandSpawner) te; + + List text = new ArrayList(); + text.add("Action: " + spawner.actionID); + text.add("Condition: " + spawner.conditionID); + + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.GOLD + "Use screwdriver to cycle forwards through the action list, shift click to go back"); + list.add(EnumChatFormatting.GOLD + "Use defuser to cycle forwards through the condition list, shift click to go back"); + list.add(EnumChatFormatting.BLUE + "Use a detonator to transform"); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + return new TileEntityWandSpawner(); + } + + @Override + public BombReturnCode explode(World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityWandSpawner)) return null; + + ((TileEntityWandSpawner) te).triggerReplace = true; + + return BombReturnCode.TRIGGERED; + } + + public static class TileEntityWandSpawner extends TileEntityLoadedBase implements INBTTileEntityTransformable, ICopiable { + private boolean triggerReplace; + + public int placedRotation; + + public String actionID = "PHASE_ABERRATOR"; + public String conditionID = "ABERRATOR"; + + @Override + public void updateEntity() { + if(!worldObj.isRemote) { + if(triggerReplace) { + // On the first tick of this TE, replace with intended block and fill with loot + replace(); + } else { + networkPackNT(15); + } + } + } + + private void replace() { + if (!(worldObj.getBlock(xCoord, yCoord, zCoord) instanceof BlockWandSpawner)) { + MainRegistry.logger.warn("Somehow the block at: " + xCoord + ", " + yCoord + ", " + zCoord + " isn't a dungeon spawner block but we're doing a TE update as if it is, cancelling!"); + return; + } + worldObj.setBlock(xCoord,yCoord,zCoord, ModBlocks.dungeon_spawner); + + TileEntity te = worldObj.getTileEntity(xCoord, yCoord, zCoord); + + if(te == null || te instanceof BlockWandLoot.TileEntityWandLoot) { + MainRegistry.logger.warn("TE for dungeon spawner set incorrectly at: " + xCoord + ", " + yCoord + ", " + zCoord + ". If you're using some sort of world generation mod, report it to the author!"); + te = ModBlocks.wand_spawner.createTileEntity(worldObj, 0); + worldObj.setTileEntity(xCoord, yCoord, zCoord, te); + } + + if(te instanceof DungeonSpawner.TileEntityDungeonSpawner){ + DungeonSpawner.TileEntityDungeonSpawner spawner = (DungeonSpawner.TileEntityDungeonSpawner) te; + spawner.actionID = actionID; + spawner.conditionID = conditionID; + } + + } + + @Override + public void transformTE(World world, int coordBaseMode) { + triggerReplace = !StructureConfig.debugStructures; + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setString("actionID", actionID); + nbt.setString("conditionID", conditionID); + nbt.setInteger("rotation", placedRotation); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + actionID = nbt.getString("actionID"); + conditionID = nbt.getString("conditionID"); + placedRotation = nbt.getInteger("rotation"); + } + + @Override + public void serialize(ByteBuf buf) { + buf.writeInt(placedRotation); + BufferUtil.writeString(buf, actionID); + BufferUtil.writeString(buf, conditionID); + } + + @Override + public void deserialize(ByteBuf buf) { + placedRotation = buf.readInt(); + actionID = BufferUtil.readString(buf); + conditionID = BufferUtil.readString(buf); + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("actionID", actionID); + nbt.setString("conditionID", conditionID); + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + actionID = nbt.getString("actionID"); + conditionID = nbt.getString("conditionID"); + } + } +} diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index 4a6fc10d8..ffbb14239 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -7,7 +7,8 @@ import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ModItems; -import com.hbm.util.EnumUtil; +import com.hbm.world.gen.util.DungeonSpawnerActions; +import com.hbm.world.gen.util.DungeonSpawnerConditions; import com.hbm.util.Vec3NT; import net.minecraft.block.BlockContainer; @@ -30,19 +31,35 @@ public class DungeonSpawner extends BlockContainer { public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityDungeonSpawner(); } - + public static class TileEntityDungeonSpawner extends TileEntity { - + public int phase = 0; public int timer = 0; - public EnumSpawnerType type = EnumSpawnerType.ABERRATOR; - + + public String conditionID = "ABERRATOR"; + //actions always get called before conditions, use the phase timer in order to control behavior via condition + public String actionID = "ABERRATOR"; + + public Function condition; + public Consumer action; + @Override public void updateEntity() { - + if(!worldObj.isRemote) { - type.phase.accept(this); - if(type.phaseCondition.apply(this)) { + if(action == null){ + action = DungeonSpawnerActions.actions.get(actionID); + } + if(condition == null){ + condition = DungeonSpawnerConditions.conditions.get(conditionID); + } + if(action == null || condition == null){ + worldObj.setBlock(xCoord,yCoord,zCoord, Blocks.air); + return; + } + action.accept(this); + if(condition.apply(this)) { phase++; timer = 0; } else { @@ -55,83 +72,16 @@ public class DungeonSpawner extends BlockContainer { public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setInteger("phase", phase); - nbt.setByte("type", (byte) type.ordinal()); + nbt.setString("conditionID", conditionID); + nbt.setString("actionID", actionID); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.phase = nbt.getInteger("phase"); - this.type = EnumUtil.grabEnumSafely(EnumSpawnerType.class, nbt.getByte("type")); + this.conditionID = nbt.getString("conditionID"); } } - - public static enum EnumSpawnerType { - - ABERRATOR(CON_ABERRATOR, PHASE_ABERRATOR); - public Function phaseCondition; - public Consumer phase; - - private EnumSpawnerType(Function con, Consumer ph) { - this.phaseCondition = con; - this.phase = ph; - } - } - - public static Function CON_ABERRATOR = (tile) -> { - World world = tile.getWorldObj(); - if(world.difficultySetting.ordinal() == 0) return false; - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - if(tile.phase == 0) { - if(world.getTotalWorldTime() % 20 != 0) return false; - return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(20, 10, 20)).isEmpty(); - } - if(tile.phase < 3) { - if(world.getTotalWorldTime() % 20 != 0 || tile.timer < 60) return false; - return world.getEntitiesWithinAABB(EntityUndeadSoldier.class, AxisAlignedBB.getBoundingBox(x, y, z, x - 2, y + 1, z + 1).expand(50, 20, 50)).isEmpty(); - } - return false; - }; - - public static Consumer PHASE_ABERRATOR = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - if(tile.phase == 1 || tile.phase == 2) { - if(tile.timer == 0) { - Vec3NT vec = new Vec3NT(10, 0, 0); - for(int i = 0; i < 10; i++) { - EntityUndeadSoldier mob = new EntityUndeadSoldier(world); - for(int j = 0; j < 7; j++) { - mob.setPositionAndRotation(x + 0.5 + vec.xCoord, y - 5, z + 0.5 + vec.zCoord, i * 36F, 0); - if(mob.getCanSpawnHere()) { - mob.onSpawnWithEgg(null); - world.spawnEntityInWorld(mob); - break; - } - } - - vec.rotateAroundYDeg(36D); - } - } - } - if(tile.phase > 2) { - TileEntity te = world.getTileEntity(x, y + 18, z); - if(te instanceof TileEntitySkeletonHolder) { - TileEntitySkeletonHolder skeleton = (TileEntitySkeletonHolder) te; - if(world.rand.nextInt(5) == 0) { - skeleton.item = new ItemStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR.ordinal()); - } else { - skeleton.item = new ItemStack(ModItems.clay_tablet, 1, 1); - } - skeleton.markDirty(); - world.markBlockForUpdate(x, y + 18, z); - } - world.setBlock(x, y, z, Blocks.obsidian); - } - }; } diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index c4a5a3d4a..9a4cc6040 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -877,6 +877,8 @@ public class MainRegistry { BlockToolConversion.registerRecipes(); AchievementHandler.register(); + MobUtil.intializeMobPools(); + proxy.registerMissileItems(); // Load compatibility for OC. diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index cd368b165..655656174 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -387,74 +387,18 @@ public class ModEventHandler { if(entity instanceof EntityZombie) { if(world.rand.nextFloat() < 0.005F && soot > 2) { // full hazmat zombine - equipFullSet(entity, ModItems.hazmat_helmet, ModItems.hazmat_plate, ModItems.hazmat_legs, ModItems.hazmat_boots); + MobUtil.equipFullSet(entity, ModItems.hazmat_helmet, ModItems.hazmat_plate, ModItems.hazmat_legs, ModItems.hazmat_boots); return; } - - if(world.rand.nextFloat() < 0.005F && soot > 20) { // full security zombine - equipFullSet(entity, ModItems.security_helmet, ModItems.security_plate, ModItems.security_legs, ModItems.security_boots); - return; - } - - slotPools.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth - {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, - {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, - {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, - {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} - })); - slotPools.put(3, createSlotPool(7000, new Object[][]{ - {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.robes_plate, 32}, - {ModItems.jackt, 32}, {ModItems.jackt2, 32}, {ModItems.alloy_plate, 2}, - {ModItems.steel_plate, 2} - })); - slotPools.put(2, createSlotPool(7000, new Object[][]{ - {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, - {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2} - })); - slotPools.put(1, createSlotPool(7000, new Object[][]{ - {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2} - })); - slotPools.put(0, createSlotPool(10000, new Object[][]{ - {ModItems.pipe_lead, 30}, {ModItems.crowbar, 25}, {ModItems.geiger_counter, 20}, - {ModItems.reer_graar, 16}, {ModItems.steel_pickaxe, 12}, {ModItems.stopsign, 10}, - {ModItems.sopsign, 8}, {ModItems.chernobylsign, 6}, {ModItems.steel_sword, 15}, - {ModItems.alloy_axe, 5}, {ModItems.titanium_sword, 8}, {ModItems.lead_gavel, 4}, - {ModItems.wrench, 20}, {ModItems.cobalt_decorated_sword, 2}, {ModItems.detonator_de, 1} - })); + slotPools = MobUtil.slotPoolCommon; } else if(entity instanceof EntitySkeleton) { - - slotPools.put(4, createSlotPool(12000, new Object[][]{ - {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, - {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, - {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, - {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} - })); - slotPools.put(3, createSlotPool(10000, new Object[][]{ - {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.alloy_plate, 2}, //sadly they cant wear jackets bc it breaks it - {ModItems.steel_plate, 8}, {ModItems.titanium_plate, 4} - })); - slotPools.put(2, createSlotPool(10000, new Object[][]{ - {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, - {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2}, - })); - slotPools.put(1, createSlotPool(10000, new Object[][]{ - {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2}, - {ModItems.titanium_boots, 6} - })); - + slotPools = MobUtil.slotPoolRanged; ItemStack bowReplacement = getSkelegun(soot, world.rand); slotPools.put(0, createSlotPool(50, bowReplacement != null ? new Object[][]{{bowReplacement, 1}} : new Object[][]{})); } - assignItemsToEntity(entity, slotPools); - } - - private void equipFullSet(EntityLivingBase entity, Item helmet, Item chest, Item legs, Item boots) { //for brainlets (me) to add more armorsets later when i forget about how this works - entity.setCurrentItemOrArmor(4, new ItemStack(helmet)); //p_70062_1_ is the slot number - entity.setCurrentItemOrArmor(3, new ItemStack(chest)); - entity.setCurrentItemOrArmor(2, new ItemStack(legs)); - entity.setCurrentItemOrArmor(1, new ItemStack(boots)); + MobUtil.assignItemsToEntity(entity, slotPools, rand); } private List createSlotPool(int nullWeight, Object[][] items) { @@ -473,74 +417,30 @@ public class ModEventHandler { return pool; } - - public void assignItemsToEntity(EntityLivingBase entity, Map> slotPools) { - for (Map.Entry> entry : slotPools.entrySet()) { - int slot = entry.getKey(); - List pool = entry.getValue(); - - WeightedRandomObject choice = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); //NullPointerException sludge fix - if (choice == null) { - continue; - } - - ItemStack stack = choice.asStack(); - if (stack == null || stack.getItem() == null) { - continue; - } - - if (stack.getItem() == ModItems.gas_mask_m65 //eyesore - || stack.getItem() == ModItems.gas_mask_olde - || stack.getItem() == ModItems.gas_mask_mono) { - ArmorUtil.installGasMaskFilter(stack, new ItemStack(ModItems.gas_mask_filter)); - } - - entity.setCurrentItemOrArmor(slot, stack); - - //Give skeleton AI if it has a gun - if (slot == 0 && entity instanceof EntitySkeleton && pool == slotPools.get(0)) { - addFireTask((EntityLiving) entity); - } - } - } - private static ItemStack getSkelegun(float soot, Random rand) { - if(!MobConfig.enableMobWeapons) return null; - if(rand.nextDouble() > Math.log(soot) * 0.25) return null; + if (!MobConfig.enableMobWeapons) return null; + if (rand.nextDouble() > Math.log(soot) * 0.25) return null; - ArrayList pool = new ArrayList(); - pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_light_revolver), 12)); - pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_heavy_revolver), 8)); + ArrayList pool = new ArrayList<>(); - if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_pepperbox), 10)); - if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_henry), 8)); - if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_greasegun), 6)); - - if(soot > 4) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_maresleg), 4)); - if(soot > 4) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_uzi), 6)); - - if(soot > 8) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_spas12), 3)); - if(soot > 8) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_am180), 4)); - - if(soot > 12) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_congolake), 1)); + if(soot < 0.3){ + pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_pepperbox), 5)); + pool.add(new WeightedRandomObject(null, 20)); + } else if(soot > 0.3 && soot < 1) { + pool.addAll(MobUtil.slotPoolGuns.get(0.3)); + } else if (soot < 3) { + pool.addAll(MobUtil.slotPoolGuns.get(1D)); + } else if (soot < 5) { + pool.addAll(MobUtil.slotPoolGuns.get(3D)); + } else { + pool.addAll(MobUtil.slotPoolGuns.get(5D)); + } WeightedRandomObject selected = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); return selected.asStack(); } - // these fucking tasks keep stacking on top of themselves - private static void addFireTask(EntityLiving entity) { - entity.setEquipmentDropChance(0, 0); // Prevent dropping guns - - for(Object entry : entity.tasks.taskEntries) { - EntityAITasks.EntityAITaskEntry task = (EntityAITasks.EntityAITaskEntry) entry; - if(task.action instanceof EntityAIFireGun) return; - } - - entity.tasks.addTask(3, new EntityAIFireGun(entity)); - } - @SubscribeEvent public void addAITasks(EntityJoinWorldEvent event) { if(event.world.isRemote || !(event.entity instanceof EntityLiving)) return; @@ -549,7 +449,7 @@ public class ModEventHandler { ItemStack held = living.getHeldItem(); if(held != null && held.getItem() instanceof ItemGunBaseNT) { - addFireTask(living); + MobUtil.addFireTask(living); } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 20e51d5fc..608ea892e 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -19,6 +19,7 @@ import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.BlockSupplyCrate.TileEntitySupplyCrate; import com.hbm.blocks.generic.BlockWandJigsaw.TileEntityWandJigsaw; import com.hbm.blocks.generic.BlockWandLoot.TileEntityWandLoot; +import com.hbm.blocks.generic.BlockWandSpawner.TileEntityWandSpawner; import com.hbm.blocks.generic.DungeonSpawner.TileEntityDungeonSpawner; import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter; import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF; @@ -236,6 +237,7 @@ public class TileMappings { put(TileEntityWandLoot.class, "tileentity_wand_loot"); put(TileEntityWandJigsaw.class, "tileentity_wand_jigsaw"); + put(TileEntityWandSpawner.class, "tileentity_wand_spawner"); putNetwork(); putBombs(); @@ -427,7 +429,7 @@ public class TileMappings { put(TileEntityCranePartitioner.class, "tileentity_partitioner"); put(TileEntityFan.class, "tileentity_fan"); put(TileEntityPistonInserter.class, "tileentity_piston_inserter"); - + put(TileEntityPneumoTube.class, "tileentity_pneumatic_tube"); put(TileEntityRadioTorchSender.class, "tileentity_rtty_sender"); diff --git a/src/main/java/com/hbm/util/MobUtil.java b/src/main/java/com/hbm/util/MobUtil.java new file mode 100644 index 000000000..8779c1ed2 --- /dev/null +++ b/src/main/java/com/hbm/util/MobUtil.java @@ -0,0 +1,197 @@ +package com.hbm.util; + +import com.hbm.entity.mob.ai.EntityAIFireGun; +import com.hbm.items.ModItems; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.ai.EntityAITasks; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.WeightedRandom; + +import java.util.*; + +public class MobUtil { + + + public static Map> slotPoolCommon = new HashMap<>(); + public static Map> slotPoolRanged = new HashMap<>(); + + public static Map> slotPoolAdv = new HashMap<>(); + public static Map> slotPoolAdvRanged; + /**Unlike the above two, the Double is interpreted as minimum soot level, instead of armor slot **/ + public static HashMap> slotPoolGuns = new HashMap<>(); + + + public static void intializeMobPools(){ + slotPoolCommon.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + slotPoolCommon.put(3, createSlotPool(7000, new Object[][]{ + {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.robes_plate, 32}, + {ModItems.jackt, 32}, {ModItems.jackt2, 32}, {ModItems.alloy_plate, 2}, + {ModItems.steel_plate, 2} + })); + slotPoolCommon.put(2, createSlotPool(7000, new Object[][]{ + {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, + {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2} + })); + slotPoolCommon.put(1, createSlotPool(7000, new Object[][]{ + {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2} + })); + slotPoolCommon.put(0, createSlotPool(10000, new Object[][]{ + {ModItems.pipe_lead, 30}, {ModItems.crowbar, 25}, {ModItems.geiger_counter, 20}, + {ModItems.reer_graar, 16}, {ModItems.steel_pickaxe, 12}, {ModItems.stopsign, 10}, + {ModItems.sopsign, 8}, {ModItems.chernobylsign, 6}, {ModItems.steel_sword, 15}, + {ModItems.titanium_sword, 8}, {ModItems.lead_gavel, 4}, {ModItems.wrench_flipped, 2}, + {ModItems.wrench, 20} + })); + + slotPoolRanged.put(4, createSlotPool(12000, new Object[][]{ + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.rag_piss, 1}, {ModItems.goggles, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + slotPoolRanged.put(3, createSlotPool(10000, new Object[][]{ + {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.alloy_plate, 2}, //sadly they cant wear jackets bc it breaks it + {ModItems.steel_plate, 8}, {ModItems.titanium_plate, 4} + })); + slotPoolRanged.put(2, createSlotPool(10000, new Object[][]{ + {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, + {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2}, + })); + slotPoolRanged.put(1, createSlotPool(10000, new Object[][]{ + {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2}, + {ModItems.titanium_boots, 6} + })); + + slotPoolGuns.put(0.3, createSlotPool(new Object[][]{ + {ModItems.gun_light_revolver, 16}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 2} + })); + slotPoolGuns.put(1D, createSlotPool(new Object[][]{ + {ModItems.gun_light_revolver, 6}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 4}, {ModItems.gun_henry, 6} + })); + slotPoolGuns.put(3D, createSlotPool(new Object[][]{ + {ModItems.gun_uzi, 10}, {ModItems.gun_maresleg, 8}, {ModItems.gun_henry, 12}, {ModItems.gun_heavy_revolver, 4}, {ModItems.gun_flaregun, 2} + })); + slotPoolGuns.put(5D, createSlotPool(new Object[][]{ + {ModItems.gun_am180, 6}, {ModItems.gun_uzi, 10}, {ModItems.gun_spas12, 8}, {ModItems.gun_henry_lincoln, 2}, {ModItems.gun_heavy_revolver, 12}, {ModItems.gun_flaregun, 4}, {ModItems.gun_flamer, 2} + })); + + slotPoolAdv.put(4, createSlotPool(new Object[][]{ + {ModItems.security_helmet, 10}, {ModItems.t45_helmet, 4}, {ModItems.asbestos_helmet, 12}, + {ModItems.liquidator_helmet, 4}, {ModItems.no9, 12}, + {ModItems.hazmat_helmet, 6} + })); + slotPoolAdv.put(3, createSlotPool(new Object[][]{ + {ModItems.liquidator_plate, 4}, {ModItems.security_plate, 8}, {ModItems.asbestos_plate, 12}, + {ModItems.t45_plate, 4}, {ModItems.hazmat_plate, 6}, + {ModItems.steel_plate, 8} + })); + slotPoolAdv.put(2, createSlotPool(new Object[][]{ + {ModItems.liquidator_legs, 4}, {ModItems.security_legs, 8}, {ModItems.asbestos_legs, 12}, + {ModItems.t45_legs, 4}, {ModItems.hazmat_legs, 6}, + {ModItems.steel_legs, 8} + })); + slotPoolAdv.put(1, createSlotPool(new Object[][]{ + {ModItems.liquidator_boots, 4}, {ModItems.security_boots, 8}, {ModItems.asbestos_boots, 12}, + {ModItems.t45_boots, 4}, {ModItems.hazmat_boots, 6}, + {ModItems.robes_boots, 8} + })); + slotPoolAdv.put(0, createSlotPool(new Object[][]{ + {ModItems.pipe_lead, 20}, {ModItems.crowbar, 30}, {ModItems.geiger_counter, 20}, + {ModItems.reer_graar, 20}, {ModItems.wrench_flipped, 12}, {ModItems.stopsign, 16}, + {ModItems.sopsign, 4}, {ModItems.chernobylsign, 16}, + {ModItems.titanium_sword, 18}, {ModItems.lead_gavel, 8}, + {ModItems.wrench, 20} + })); + + slotPoolAdvRanged = new HashMap<>(slotPoolAdv); + slotPoolAdvRanged.remove(0); + + } + + public static List createSlotPool(int nullWeight, Object[][] items) { + List pool = new ArrayList<>(); + pool.add(new WeightedRandomObject(null, nullWeight)); + for (Object[] item : items) { + Object obj = item[0]; + int weight = (int) item[1]; + + if (obj instanceof Item) { + pool.add(new WeightedRandomObject(new ItemStack((Item) obj), weight)); + } else if (obj instanceof ItemStack) { //lol just make it pass ItemStack aswell + pool.add(new WeightedRandomObject(obj, weight)); + } + } + return pool; + } + public static List createSlotPool(Object[][] items) { + List pool = new ArrayList<>(); + for (Object[] item : items) { + Object obj = item[0]; + int weight = (int) item[1]; + + if (obj instanceof Item) { + pool.add(new WeightedRandomObject(new ItemStack((Item) obj), weight)); + } else if (obj instanceof ItemStack) { //lol just make it pass ItemStack aswell + pool.add(new WeightedRandomObject(obj, weight)); + } + } + return pool; + } + + public static void equipFullSet(EntityLivingBase entity, Item helmet, Item chest, Item legs, Item boots) { //for brainlets (me) to add more armorsets later when i forget about how this works + entity.setCurrentItemOrArmor(4, new ItemStack(helmet)); //p_70062_1_ is the slot number + entity.setCurrentItemOrArmor(3, new ItemStack(chest)); + entity.setCurrentItemOrArmor(2, new ItemStack(legs)); + entity.setCurrentItemOrArmor(1, new ItemStack(boots)); + } + + public static void assignItemsToEntity(EntityLivingBase entity, Map> slotPools, Random rand) { + for (Map.Entry> entry : slotPools.entrySet()) { + int slot = entry.getKey(); + List pool = entry.getValue(); + + WeightedRandomObject choice = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); //NullPointerException sludge fix + if (choice == null) { + continue; + } + + ItemStack stack = choice.asStack(); + if (stack == null || stack.getItem() == null) { + continue; + } + + if (stack.getItem() == ModItems.gas_mask_m65 //eyesore + || stack.getItem() == ModItems.gas_mask_olde + || stack.getItem() == ModItems.gas_mask_mono) { + ArmorUtil.installGasMaskFilter(stack, new ItemStack(ModItems.gas_mask_filter)); + } + + entity.setCurrentItemOrArmor(slot, stack); + + //Give skeleton AI if it has a gun + if (slot == 0 && entity instanceof EntitySkeleton && pool == slotPools.get(0)) { + addFireTask((EntityLiving) entity); + } + } + } + + // these fucking tasks keep stacking on top of themselves + public static void addFireTask(EntityLiving entity) { + entity.setEquipmentDropChance(0, 0); // Prevent dropping guns + + for(Object entry : entity.tasks.taskEntries) { + EntityAITasks.EntityAITaskEntry task = (EntityAITasks.EntityAITaskEntry) entry; + if(task.action instanceof EntityAIFireGun) return; + } + + entity.tasks.addTask(3, new EntityAIFireGun(entity)); + } +} diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java new file mode 100644 index 000000000..120ea00e8 --- /dev/null +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java @@ -0,0 +1,165 @@ +package com.hbm.world.gen.util; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockPedestal; +import com.hbm.blocks.generic.BlockSkeletonHolder; +import com.hbm.blocks.generic.DungeonSpawner; +import com.hbm.entity.item.EntityFallingBlockNT; +import com.hbm.entity.mob.EntityUndeadSoldier; +import com.hbm.items.ItemEnums; +import com.hbm.items.ModItems; +import com.hbm.main.ModEventHandler; +import com.hbm.tileentity.machine.storage.TileEntityCrateBase; +import com.hbm.util.MobUtil; +import com.hbm.util.Vec3NT; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; +import java.util.function.Consumer; + +public class DungeonSpawnerActions { + + public static HashMap> actions = new HashMap<>(); + + public static Consumer PHASE_ABERRATOR = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1 || tile.phase == 2) { + if (tile.timer == 0) { + Vec3NT vec = new Vec3NT(10, 0, 0); + for (int i = 0; i < 10; i++) { + EntityUndeadSoldier mob = new EntityUndeadSoldier(world); + for (int j = 0; j < 7; j++) { + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, y - 5, z + 0.5 + vec.zCoord, i * 36F, 0); + if (mob.getCanSpawnHere()) { + mob.onSpawnWithEgg(null); + world.spawnEntityInWorld(mob); + break; + } + } + + vec.rotateAroundYDeg(36D); + } + } + } + if (tile.phase > 2) { + TileEntity te = world.getTileEntity(x, y + 18, z); + if (te instanceof BlockSkeletonHolder.TileEntitySkeletonHolder) { + BlockSkeletonHolder.TileEntitySkeletonHolder skeleton = (BlockSkeletonHolder.TileEntitySkeletonHolder) te; + if (world.rand.nextInt(5) == 0) { + skeleton.item = new ItemStack(ModItems.item_secret, 1, ItemEnums.EnumSecretType.ABERRATOR.ordinal()); + } else { + skeleton.item = new ItemStack(ModItems.clay_tablet, 1, 1); + } + skeleton.markDirty(); + world.markBlockForUpdate(x, y + 18, z); + } + world.setBlock(x, y, z, Blocks.obsidian); + } + }; + + public static Consumer COLLAPSE_ROOF_RAD_5 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 0) return; + + //from explosionChaos because i cannot be assed + int r = 4; + int r2 = r * r; + int r22 = r2 / 2; + + for (int xx = -r; xx < r; xx++) { + int X = xx + x; + int XX = xx * xx; + for (int yy = -r; yy < r; yy++) { + int Y = yy + y; + int YY = XX + yy * yy; + for (int zz = -r; zz < r; zz++) { + int Z = zz + z; + int ZZ = YY + zz * zz; + if (ZZ < r22) { + + if (world.getBlock(X, Y, Z).getExplosionResistance(null) <= 70) { + EntityFallingBlockNT entityfallingblock = new EntityFallingBlockNT(world, X + 0.5, Y + 0.5, Z + 0.5, world.getBlock(X, Y, Z), world.getBlockMetadata(X, Y, Z)); + world.spawnEntityInWorld(entityfallingblock); + } + } + } + } + } + world.setBlock(x, y, z, ModBlocks.block_steel); + + }; + + public static Consumer FODDER_WAVE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1) { + Vec3NT vec = new Vec3NT(5, 0, 0); + for (int i = 0; i < 10; i++) { + EntityZombie mob = new EntityZombie(world); + for (int j = 0; j < 7; j++) { + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, world.getHeightValue(x,z), z + 0.5 + vec.zCoord, i * 36F, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdv, new Random()); + if (mob.getCanSpawnHere()) { + world.spawnEntityInWorld(mob); + break; + } + } + vec.rotateAroundYDeg(36D); + } + world.setBlock(x, y, z, ModBlocks.block_steel); + } + }; + + public static Consumer PUZZLE_TEST = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 2){ + world.setBlock(x,y,z, ModBlocks.crate_steel); + + EntityLightningBolt blitz = new EntityLightningBolt(world, x, world.getHeightValue(x, z) + 1, z); + world.spawnEntityInWorld(blitz); + + TileEntityCrateBase crate = (TileEntityCrateBase) world.getTileEntity(x,y,z); + ((IInventory)crate).setInventorySlotContents(15, new ItemStack(ModItems.gun_bolter)); + } + }; + + public static List getActionNames(){ + return new ArrayList<>(actions.keySet()); + } + + //register new actions here + static{ + actions.put("PHASE_ABERRATOR", PHASE_ABERRATOR); + actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); + actions.put("FODDER_WAVE", FODDER_WAVE); + actions.put("PUZZLE_TEST", PUZZLE_TEST); + } + + + +} diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java new file mode 100644 index 000000000..0a634c271 --- /dev/null +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java @@ -0,0 +1,91 @@ +package com.hbm.world.gen.util; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockPedestal; +import com.hbm.blocks.generic.DungeonSpawner; +import com.hbm.entity.mob.EntityUndeadSoldier; +import com.hbm.items.ModItems; +import com.hbm.tileentity.machine.storage.TileEntityCrateBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.function.Function; + +public class DungeonSpawnerConditions { + + public static HashMap> conditions = new HashMap<>(); + + public static Function ABERRATOR = (tile) -> { + World world = tile.getWorldObj(); + if(world.difficultySetting.ordinal() == 0) return false; + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if(tile.phase == 0) { + if(world.getTotalWorldTime() % 20 != 0) return false; + return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(20, 10, 20)).isEmpty(); + } + if(tile.phase < 3) { + if(world.getTotalWorldTime() % 20 != 0 || tile.timer < 60) return false; + return world.getEntitiesWithinAABB(EntityUndeadSoldier.class, AxisAlignedBB.getBoundingBox(x, y, z, x - 2, y + 1, z + 1).expand(50, 20, 50)).isEmpty(); + } + return false; + }; + + public static Function PLAYER_CUBE_5 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(5, 5, 5)).isEmpty(); + }; + + public static Function REDSTONE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + return world.isBlockIndirectlyGettingPowered(x,y,z); + }; + + public static Function PUZZLE_TEST = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 0 && world.isBlockIndirectlyGettingPowered(x,y,z)){ + world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText("Find a " + EnumChatFormatting.GOLD + "great" + EnumChatFormatting.RESET + " ancient weapon, of questionable use in the modern age")); + world.setBlock(x,y + 1,z, ModBlocks.pedestal); + return true; + } + + TileEntity pedestal = world.getTileEntity(x,y + 1,z); + + return tile.phase == 1 + && pedestal instanceof BlockPedestal.TileEntityPedestal + && ((BlockPedestal.TileEntityPedestal) pedestal).item != null + && ((BlockPedestal.TileEntityPedestal) pedestal).item.getItem() == ModItems.big_sword; + }; + + public static List getConditionNames(){ + return new ArrayList<>(conditions.keySet()); + } + + //register new conditions here + static { + conditions.put("ABERRATOR", ABERRATOR); + conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); + conditions.put("REDSTONE", REDSTONE); + conditions.put("PUZZLE_TEST", PUZZLE_TEST); + } + +} diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 72c0ee93b..924ab3652 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6057,6 +6057,7 @@ tile.volcano_rad_core.name=Rad Volcano Core tile.wand_air.name=Structure Wand Block (Air) tile.wand_loot.name=Structure Wand Block (Lootable) tile.wand_jigsaw.name=Structure Wand Block (Jigsaw) +tile.wand_spawner.name=Structure Wand Block (Actions) tile.waste_earth.name=Dead Grass tile.waste_leaves.name=Dead Leaves tile.waste_log.name=Charred Log diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner.png b/src/main/resources/assets/hbm/textures/blocks/wand_spawner.png new file mode 100644 index 0000000000000000000000000000000000000000..4561c8e4ee9f3dd2e6c8eec19ef31a27d2648ff9 GIT binary patch literal 730 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPL>Y{_(X4)An#RtPA{Ps_|nWnj=a zKXsz5$6*JVqw&E@l|a-W%a>xlG`;@R5{R?fFL z;433wnwqFGpJ4YgVkT+9sL~*vB^mLr9?6&f^(@kSqSZVx znK3kDLahA{=|AtTX`S(@_H^WYQCm2tzffTVx5?|i&$VwX&I%v+&lB@9w|*<*nfgg_ z`PmPZ6AGkv?8wVLC0DSMxyMFwljiP8^Opr^FuYIy;$xZcLhMES=c??tkH0XU2nauI ze&C>@LEw@%U-iDfd;R9^`T9Hm6#gldvJwM)?eMhjJ*_rJuVDT&< z8w5Nh85v#x6Az3=vy=g-e*!xL3s9wjk+A{e0*I+#p8&j=q`{-;D&Q<|NI+#KBO8a{j>Z{fj&lwkU|{e$#-X$8k{QTt44$rj JF6*2UngE?A_U`}y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png b/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png new file mode 100644 index 0000000000000000000000000000000000000000..4788b84883581058c6fdf5525b3239d0e888f352 GIT binary patch literal 740 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPL>Y|3BPd`_OrtHz2RrJEzLct)l-`jtSimUq^_o?J^%8- zSW0o$i^bPA?74H~ipQKyj~`Ft+Ip{KrOrR|SHj-&SVebzSTMEt^P%oTe^>vU^GNn# z$JQK`7XMc3*qsYL?7eiBX}^Xa>zb8kI;8t~Io(^nhH%bS&C%VxtzdmY^r149_}Q8T zP9J9_S#M7Idnb7BhP;zA=LPLL6XqtF+~ir}6Xr2l(SQ1yJ`Fj;oBh*1ZfE)DSvd2N zS8`|a3>`DK2kw6lzR%m6;$N<~QjaUtf8YOWd=GVh-1_qOyz~A4R!tX_V=P?jzcH}g zbG@&VmHYd`2EO#^u4nJGedf)mJ0ZDF&_i)%lo988^-sQ=FI4cFer~;2_sw!&^NteJ zI@aCQ7bZ@6(`xj7o!;BG=ZzifUG_6Bo>sK$v&Z|*z)0Z?@CkAKFQfkd|9>D)x_ylg zNU*>ovY3H^TNs2H8D`Cq018T!xJHx&=ckpFCl;kL1SDqWmFW4ohA5co8R}U`XTDki zRMV3h;hE;?sl~tn=U5aI;JVVC4_S{flPBx7sn8Z z%gG4|0xV1lM>ROum?9(`oIC`Va7jCRdIWMFVqh|G_VDx+T*Ri*utcI?R3P2J0O%k? Wj>Vsvd|H4;FnGH9xvX Date: Mon, 30 Jun 2025 09:11:51 +0300 Subject: [PATCH 231/491] Make presses un-multiblockable with a hand drill As per @MellowArpeggiation 's request. Meant for schenanigans with visually squishing things --- .../com/hbm/blocks/machine/MachineEPress.java | 20 +++++++++++++--- .../com/hbm/blocks/machine/MachinePress.java | 24 +++++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineEPress.java b/src/main/java/com/hbm/blocks/machine/MachineEPress.java index c44a8e575..d269c253c 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineEPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineEPress.java @@ -1,11 +1,10 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; -import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineEPress; -import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import api.hbm.block.IToolable; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -13,7 +12,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -public class MachineEPress extends BlockDummyable { +public class MachineEPress extends BlockDummyable implements IToolable { public MachineEPress(Material mat) { super(mat); @@ -61,4 +60,19 @@ public class MachineEPress extends BlockDummyable { public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { return this.standardOpenBehavior(world, x, y, z, player, 0); } + + // Un-multiblickable with a hand drill for schenanigans + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if (tool != ToolType.HAND_DRILL) + return false; + + int meta = world.getBlockMetadata(x, y, z); + if (meta >= 12) + return false; + + world.setBlockToAir(x, y, z); + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/MachinePress.java b/src/main/java/com/hbm/blocks/machine/MachinePress.java index 1e6c51ca3..44415589f 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePress.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePress.java @@ -1,18 +1,16 @@ package com.hbm.blocks.machine; -import java.util.Random; - import com.hbm.blocks.BlockDummyable; -import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachinePress; -import cpw.mods.fml.common.network.internal.FMLNetworkHandler; + +import api.hbm.block.IToolable; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -public class MachinePress extends BlockDummyable { +public class MachinePress extends BlockDummyable implements IToolable { public MachinePress(Material mat) { super(mat); @@ -45,4 +43,20 @@ public class MachinePress extends BlockDummyable { public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { return this.standardOpenBehavior(world, x, y, z, player, 0); } + + // Un-multiblickable with a hand drill for schenanigans + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if (tool != ToolType.HAND_DRILL) + return false; + + int meta = world.getBlockMetadata(x, y, z); + if (meta >= 12) + return false; + + world.setBlockToAir(x, y, z); + return true; + } + } From 2e5882df606b88eea588fd7719132b0dd2051216 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 30 Jun 2025 09:14:49 +0300 Subject: [PATCH 232/491] Don't break the whole thing --- src/main/java/com/hbm/blocks/machine/MachineEPress.java | 2 ++ src/main/java/com/hbm/blocks/machine/MachinePress.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/com/hbm/blocks/machine/MachineEPress.java b/src/main/java/com/hbm/blocks/machine/MachineEPress.java index d269c253c..82eb6d89f 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineEPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineEPress.java @@ -72,7 +72,9 @@ public class MachineEPress extends BlockDummyable implements IToolable { if (meta >= 12) return false; + safeRem = true; world.setBlockToAir(x, y, z); + safeRem = false; return true; } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/MachinePress.java b/src/main/java/com/hbm/blocks/machine/MachinePress.java index 44415589f..b02f3dab8 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePress.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePress.java @@ -55,7 +55,9 @@ public class MachinePress extends BlockDummyable implements IToolable { if (meta >= 12) return false; + safeRem = true; world.setBlockToAir(x, y, z); + safeRem = false; return true; } From 17b0dde444aa0b6ba9604a3d9f48c2f2abd80e3a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 30 Jun 2025 16:02:38 +0300 Subject: [PATCH 233/491] Remove all but the steel trapdoor --- src/main/java/com/hbm/blocks/ModBlocks.java | 29 +----------------- .../java/com/hbm/main/CraftingManager.java | 9 ------ .../world/gen/component/BunkerComponents.java | 1 - src/main/resources/assets/hbm/lang/de_DE.lang | 9 ------ src/main/resources/assets/hbm/lang/en_US.lang | 9 ------ src/main/resources/assets/hbm/lang/it_IT.lang | 9 ------ src/main/resources/assets/hbm/lang/pl_PL.lang | 9 ------ src/main/resources/assets/hbm/lang/ru_RU.lang | 9 ------ src/main/resources/assets/hbm/lang/uk_UA.lang | 9 ------ src/main/resources/assets/hbm/lang/zh_CN.lang | 9 ------ .../textures/blocks/trapdoor_aluminium.png | Bin 833 -> 0 bytes .../hbm/textures/blocks/trapdoor_cobalt.png | Bin 862 -> 0 bytes .../hbm/textures/blocks/trapdoor_copper.png | Bin 871 -> 0 bytes .../hbm/textures/blocks/trapdoor_gold.png | Bin 838 -> 0 bytes .../hbm/textures/blocks/trapdoor_iron.png | Bin 798 -> 0 bytes .../hbm/textures/blocks/trapdoor_lead.png | Bin 846 -> 0 bytes .../hbm/textures/blocks/trapdoor_sturdy.png | Bin 883 -> 0 bytes .../hbm/textures/blocks/trapdoor_titanium.png | Bin 842 -> 0 bytes .../hbm/textures/blocks/trapdoor_tungsten.png | Bin 751 -> 0 bytes 19 files changed, 1 insertion(+), 101 deletions(-) delete mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_aluminium.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_cobalt.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_copper.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_gold.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_iron.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_lead.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_sturdy.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_titanium.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/trapdoor_tungsten.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 5e0b6d7fb..8b04b34a4 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -846,16 +846,7 @@ public class ModBlocks { public static Block ladder_steel; public static Block ladder_tungsten; - public static Block trapdoor_sturdy; - public static Block trapdoor_iron; - public static Block trapdoor_gold; - public static Block trapdoor_aluminium; - public static Block trapdoor_copper; - public static Block trapdoor_titanium; - public static Block trapdoor_lead; - public static Block trapdoor_cobalt; public static Block trapdoor_steel; - public static Block trapdoor_tungsten; public static Block barrel_plastic; public static Block barrel_corroded; @@ -1985,17 +1976,8 @@ public class ModBlocks { ladder_cobalt = new BlockNTMLadder().setBlockName("ladder_cobalt").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_cobalt"); ladder_steel = new BlockNTMLadder().setBlockName("ladder_steel").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_steel"); ladder_tungsten = new BlockNTMLadder().setBlockName("ladder_tungsten").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_tungsten"); - - trapdoor_sturdy = new BlockNTMTrapdoor(Material.wood).setBlockName("trapdoor_sturdy").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeWood).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_sturdy"); - trapdoor_iron = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_iron").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_iron"); - trapdoor_gold = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_gold").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_gold"); - trapdoor_aluminium = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_aluminium").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_aluminium"); - trapdoor_copper = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_copper").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_copper"); - trapdoor_titanium = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_titanium").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_titanium"); - trapdoor_lead = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_lead").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_lead"); - trapdoor_cobalt = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_cobalt").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_cobalt"); + trapdoor_steel = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_steel").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_steel"); - trapdoor_tungsten = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_tungsten").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_tungsten"); barrel_plastic = new BlockFluidBarrel(Material.iron, 12000).setBlockName("barrel_plastic").setStepSound(Block.soundTypeStone).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_plastic"); barrel_corroded = new BlockFluidBarrel(Material.iron, 6000).setBlockName("barrel_corroded").setStepSound(Block.soundTypeMetal).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_corroded"); @@ -3261,16 +3243,7 @@ public class ModBlocks { GameRegistry.registerBlock(ladder_steel, ladder_steel.getUnlocalizedName()); GameRegistry.registerBlock(ladder_lead, ladder_lead.getUnlocalizedName()); GameRegistry.registerBlock(ladder_cobalt, ladder_cobalt.getUnlocalizedName()); - GameRegistry.registerBlock(trapdoor_sturdy, trapdoor_sturdy.getUnlocalizedName()); - GameRegistry.registerBlock(trapdoor_iron, trapdoor_iron.getUnlocalizedName()); - GameRegistry.registerBlock(trapdoor_gold, trapdoor_gold.getUnlocalizedName()); - GameRegistry.registerBlock(trapdoor_titanium, trapdoor_titanium.getUnlocalizedName()); - GameRegistry.registerBlock(trapdoor_copper, trapdoor_copper.getUnlocalizedName()); - GameRegistry.registerBlock(trapdoor_tungsten, trapdoor_tungsten.getUnlocalizedName()); - GameRegistry.registerBlock(trapdoor_aluminium, trapdoor_aluminium.getUnlocalizedName()); GameRegistry.registerBlock(trapdoor_steel, trapdoor_steel.getUnlocalizedName()); - GameRegistry.registerBlock(trapdoor_lead, trapdoor_lead.getUnlocalizedName()); - GameRegistry.registerBlock(trapdoor_cobalt, trapdoor_cobalt.getUnlocalizedName()); register(barrel_plastic); register(barrel_corroded); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 679f8ca96..a64ed3b12 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -883,16 +883,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.ladder_steel, 8), new Object[] { "LLL", "L#L", "LLL", 'L', Blocks.ladder, '#', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.ladder_tungsten, 8), new Object[] { "LLL", "L#L", "LLL", 'L', Blocks.ladder, '#', W.ingot() }); - addShapelessAuto(new ItemStack(ModBlocks.trapdoor_sturdy, 1), new Object[] { Blocks.trapdoor, KEY_PLANKS }); - addShapelessAuto(new ItemStack(ModBlocks.trapdoor_iron, 1), new Object[] { Blocks.trapdoor, IRON.ingot() }); - addShapelessAuto(new ItemStack(ModBlocks.trapdoor_gold, 1), new Object[] { Blocks.trapdoor, GOLD.ingot() }); - addShapelessAuto(new ItemStack(ModBlocks.trapdoor_aluminium, 1), new Object[] { Blocks.trapdoor, AL.ingot() }); - addShapelessAuto(new ItemStack(ModBlocks.trapdoor_copper, 1), new Object[] { Blocks.trapdoor, CU.ingot() }); - addShapelessAuto(new ItemStack(ModBlocks.trapdoor_titanium, 1), new Object[] { Blocks.trapdoor, TI.ingot() }); - addShapelessAuto(new ItemStack(ModBlocks.trapdoor_lead, 1), new Object[] { Blocks.trapdoor, PB.ingot() }); - addShapelessAuto(new ItemStack(ModBlocks.trapdoor_cobalt, 1), new Object[] { Blocks.trapdoor, CO.ingot() }); addShapelessAuto(new ItemStack(ModBlocks.trapdoor_steel, 1), new Object[] { Blocks.trapdoor, STEEL.ingot() }); - addShapelessAuto(new ItemStack(ModBlocks.trapdoor_tungsten, 1), new Object[] { Blocks.trapdoor, W.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.machine_storage_drum), new Object[] { "LLL", "L#L", "LLL", 'L', PB.plate(), '#', ModItems.tank_steel }); diff --git a/src/main/java/com/hbm/world/gen/component/BunkerComponents.java b/src/main/java/com/hbm/world/gen/component/BunkerComponents.java index 033a165f9..d909fc431 100644 --- a/src/main/java/com/hbm/world/gen/component/BunkerComponents.java +++ b/src/main/java/com/hbm/world/gen/component/BunkerComponents.java @@ -127,7 +127,6 @@ public class BunkerComponents { fillWithMetadataBlocks(world, box, 1, hpos, 4, 1, hpos, 6, ModBlocks.concrete_smooth_stairs, getStairMeta(0)); placeBlockAtCurrentPosition(world, ModBlocks.concrete_slab, 1, 2, hpos, 3, box); placeBlockAtCurrentPosition(world, ModBlocks.concrete_smooth_stairs, getStairMeta(2), 2, hpos, 4, box); - placeBlockAtCurrentPosition(world, ModBlocks.trapdoor_sturdy, getDecoModelMeta(8) >> 2, 2, hpos, 5, box); placeBlockAtCurrentPosition(world, ModBlocks.concrete_smooth_stairs, getStairMeta(3), 2, hpos, 6, box); placeBlockAtCurrentPosition(world, ModBlocks.concrete_slab, 1, 2, hpos, 7, box); fillWithMetadataBlocks(world, box, 3, hpos, 4, 3, hpos, 6, ModBlocks.concrete_smooth_stairs, getStairMeta(1)); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 61488367a..37cac623a 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4320,16 +4320,7 @@ tile.ladder_steel.name=Stahlleiter tile.ladder_sturdy.name=Feste Holzleiter tile.ladder_titanium.name=Titanleiter tile.ladder_tungsten.name=Wolframleiter -tile.trapdoor_aluminium.name=Aluminium-Falltür -tile.trapdoor_cobalt.name=Kobalt-Falltür -tile.trapdoor_copper.name=Kupfer-Falltür -tile.trapdoor_gold.name=Goldene -Falltür -tile.trapdoor_iron.name=Eisen-Falltür -tile.trapdoor_lead.name=Bleilieter tile.trapdoor_steel.name=Stahl-Falltür -tile.trapdoor_sturdy.name=Feste Holz-Falltür -tile.trapdoor_titanium.name=Titan-Falltür -tile.trapdoor_tungsten.name=Wolfram-Falltür tile.lamp_demon.name=Dämonenkernlampe tile.lamp_tritium_blue_off.name=Blaue Tritiumlampe tile.lamp_tritium_blue_on.name=Blaue Tritiumlampe diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 8d324c9f1..6ab027529 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5445,16 +5445,7 @@ tile.ladder_steel.name=Steel Ladder tile.ladder_sturdy.name=Sturdy Wooden Ladder tile.ladder_titanium.name=Titanium Ladder tile.ladder_tungsten.name=Tungsten Ladder -tile.trapdoor_aluminium.name=Aluminium Trapdoor -tile.trapdoor_cobalt.name=Cobalt Trapdoor -tile.trapdoor_copper.name=Copper Trapdoor -tile.trapdoor_gold.name=Golden Trapdoor -tile.trapdoor_iron.name=Iron Trapdoor -tile.trapdoor_lead.name=Lead Trapdoor tile.trapdoor_steel.name=Steel Trapdoor -tile.trapdoor_sturdy.name=Sturdy Wooden Trapdoor -tile.trapdoor_titanium.name=Titanium Trapdoor -tile.trapdoor_tungsten.name=Tungsten Trapdoor tile.lamp_demon.name=Demon Core Lamp tile.lamp_tritium_blue_off.name=Blue Tritium Lamp tile.lamp_tritium_blue_on.name=Blue Tritium Lamp diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index 1e84bfbdb..b426cae6d 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -5513,16 +5513,7 @@ tile.ladder_steel.name=Steel Ladder tile.ladder_sturdy.name=Sturdy Wooden Ladder tile.ladder_titanium.name=Titanium Ladder tile.ladder_tungsten.name=Tungsten Ladder -tile.trapdoor_aluminium.name=Aluminium Trapdoor -tile.trapdoor_cobalt.name=Cobalt Trapdoor -tile.trapdoor_copper.name=Copper Trapdoor -tile.trapdoor_gold.name=Golden Trapdoor -tile.trapdoor_iron.name=Iron Trapdoor -tile.trapdoor_lead.name=Lead Trapdoor tile.trapdoor_steel.name=Steel Trapdoor -tile.trapdoor_sturdy.name=Sturdy Wooden Trapdoor -tile.trapdoor_titanium.name=Titanium Trapdoor -tile.trapdoor_tungsten.name=Tungsten Trapdoor tile.lamp_demon.name=Demon Core Lamp tile.lamp_tritium_blue_off.name=Blue Tritium Lamp tile.lamp_tritium_blue_on.name=Blue Tritium Lamp diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index 2509f8ecc..9ff1a89d8 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -4859,16 +4859,7 @@ tile.ladder_steel.name=Steel Ladder tile.ladder_sturdy.name=Sturdy Wooden Ladder tile.ladder_titanium.name=Titanium Ladder tile.ladder_tungsten.name=Tungsten Ladder -tile.trapdoor_aluminium.name=Aluminium Trapdoor -tile.trapdoor_cobalt.name=Cobalt Trapdoor -tile.trapdoor_copper.name=Copper Trapdoor -tile.trapdoor_gold.name=Golden Trapdoor -tile.trapdoor_iron.name=Iron Trapdoor -tile.trapdoor_lead.name=Lead Trapdoor tile.trapdoor_steel.name=Steel Trapdoor -tile.trapdoor_sturdy.name=Sturdy Wooden Trapdoor -tile.trapdoor_titanium.name=Titanium Trapdoor -tile.trapdoor_tungsten.name=Tungsten Trapdoor tile.lamp_demon.name=Demon Core Lamp tile.lamp_tritium_blue_off.name=Blue Tritium Lamp tile.lamp_tritium_blue_on.name=Blue Tritium Lamp diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 7ac18c33a..43df8e497 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5689,16 +5689,7 @@ tile.ladder_steel.name=Стальная лестница tile.ladder_sturdy.name=Прочная деревянная лестница tile.ladder_titanium.name=Титановая лестница tile.ladder_tungsten.name=Вольфрамовая лестница -tile.trapdoor_aluminium.name=Алюминиевый люк -tile.trapdoor_cobalt.name=Кобальтовый люк -tile.trapdoor_copper.name=Медный люк -tile.trapdoor_gold.name=Золотый люк -tile.trapdoor_iron.name=Железный люк -tile.trapdoor_lead.name=Свинцовый люк tile.trapdoor_steel.name=Стальный люк -tile.trapdoor_sturdy.name=Прочный деревянный люк -tile.trapdoor_titanium.name=Титановый люк -tile.trapdoor_tungsten.name=Вольфрамовый люк tile.lamp_demon.name=Лампа из заряда-демона tile.lamp_tritium_blue_off.name=Синяя тритиевая лампа tile.lamp_tritium_blue_on.name=Синяя тритиевая лампа diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 1e304f224..8d019103e 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -5445,16 +5445,7 @@ tile.ladder_steel.name=Сталева драбина tile.ladder_sturdy.name=Міцна дерев'яна драбина tile.ladder_titanium.name=Титанова драбина tile.ladder_tungsten.name=Вольфрамова драбина -tile.trapdoor_aluminium.name=Алюмінієвий люк -tile.trapdoor_cobalt.name=Кобальтовий люк -tile.trapdoor_copper.name=Мідний люк -tile.trapdoor_gold.name=Золотий люк -tile.trapdoor_iron.name=Залізний люк -tile.trapdoor_lead.name=Свинцевий люк tile.trapdoor_steel.name=Сталевий люк -tile.trapdoor_sturdy.name=Міцний дерев'яний люк -tile.trapdoor_titanium.name=Титановий люк -tile.trapdoor_tungsten.name=Вольфрамовий люк tile.lamp_demon.name=Ядро-демон лампа tile.lamp_tritium_blue_off.name=Синя тритієва лампа tile.lamp_tritium_blue_on.name=Синя тритієва лампа diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index a355a4bdb..9f5d39f26 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5155,16 +5155,7 @@ tile.ladder_steel.name=钢制梯子 tile.ladder_sturdy.name=坚固木头制梯子 tile.ladder_titanium.name=钛制梯子 tile.ladder_tungsten.name=钨制梯子 -tile.trapdoor_aluminium.name=铝制活板门 -tile.trapdoor_cobalt.name=钴制活板门 -tile.trapdoor_copper.name=铜制活板门 -tile.trapdoor_gold.name=金制活板门 -tile.trapdoor_iron.name=铁制活板门 -tile.trapdoor_lead.name=铅制活板门 tile.trapdoor_steel.name=钢制活板门 -tile.trapdoor_sturdy.name=硬木活板门 -tile.trapdoor_titanium.name=钛制活板门 -tile.trapdoor_tungsten.name=钨制活板门 tile.lamp_demon.name=恶魔核心灯 tile.lamp_tritium_blue_off.name=蓝色氚灯 tile.lamp_tritium_blue_on.name=蓝色氚灯 diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_aluminium.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_aluminium.png deleted file mode 100644 index 8b1391059f1e5d4251b43ad692c065d332b8b6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmV-H1HSx;P)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1woxRza#d~~u9*D#9i2B}ONkQP-weR~RVT`el?8#e& z3q=oi_YCM=@)YQy@)*M~P^D|ilGJ{`zOPBOr;ZNgk!r0u`5Txfu}fTUHe&(f*x(Xi zRUAc>#t9j&e!E<{0txTGeSA|Q`&zXsERZxW6spu_C%L~!e{~1r-63Q zn)IZ6KVZ=Ud&^}YNw*F4#?1DWQWgWO(oN$8EV9fcbzNtZ&;s6|EqOS@8d&QB5+E4* z5{lR>>&gi!XW|OZf%WN^fChhsk{geFn?%4C;bv$6-_0l@goajVYgPcB0(4UpGaJjQ zwk%M5YO&a8u^5J9Rq`M;SMGj0&VbQP%Pnw!KiO!l z;yGC6#mq)w0j$DrD1L9YJ7H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wM(HI$Z?3b=1^S7`l6oC~`<@6FD>H)vPaw*?_Ijq)rNOWiQV zTGtySBhR;#y{BX_v&4MnnAvowe|E!@8wIWsHCiK4ZlExpQ1If_*rZvh3Fk7yXmVki;+EY2D2ZnrnAXlMt06exvSjsI3Ro26 zc|8S6lC1#Y3HYLI+$?k8fGb=80D=X9F91m5ERMo2#Y4a53i9CU^h-d4zk>C|h($07*qoM6N<$f=`8z4gdfE diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_copper.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_copper.png deleted file mode 100644 index e91bd7744a1a2b55c1e735484e0c0d6a82c0496d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmV-t1DO1YP)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wx`lgeB#L z!Rwr%lSB~3$5g_L8Ow?L_^oqI*NDX%r|t>DDnP&Fd?z<0vftY zdR=%VjPK-5wWtyw#x8%uXs4z@6L3YVVp6A8q%f&|)vc=n{bohQ zYV965wnffjLt>lU3z&Ob$^wOP1&p3X6!<&^xFVm3Qpg$HB?}}ubDzaaLzpGzfGgak z&jRj}CiTv#N(%ioC*cbCVr+DlF>t_T7mxtKCiaLE5X71NzE(ow&S_T=2Un**(D~t7 zSqRzjCFv%C$I`2pSOaUeVTYv9(CVmU?iYZkAe|pq_iUWGZ#)Hxr!AH?0y-XpHCxeS z=^cz`e@&IO7-E8>9#X$mVN0@*0@e!ogBUo|b>c!C)2}w-e7f@KqFvpyQR)V+&~;LN xkB0+gk<>;`VU0(;PumDCKcu@SoBsPte*j`9-!_btKe_+_002ovPDHLkV1f*Cor3@X diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_gold.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_gold.png deleted file mode 100644 index 64fa024451faf37ab239872513f7e5a0ad98f3a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmV-M1G)T(P)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wUaw&BvgimBq6Z3 z-g@sR`i1_kFDU3Gh=PK$mw`|i6{kWHsZp~!%iZzJr3H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wm+n6_wy+59kwn zSp*S86j=mn<~Oj1aX9B(oCSl9d#(L%R8`d=BcdphzVCUJBuVUh9LJ*gd_K~3ofu>6 zU2SGQpUZByleTRg83&5c$>Z^m)oNw$`~67e7Xj%*K0@O8zf5LN!pq%HV#@l1tn0IFTUUJu90ffMq@`C%OCiutPn;c z63u-amu0zJ+LUj%n;RdE#wle@9N1=zqV0A&86!>+@bpLQmmA}iC@fM4%_T-(^Z9J={ut5PMXKvs c{`*UR0p%Lqwo-hyVgLXD07*qoM6N<$fH_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1w?dXJWq}I^f6r z?KnkcPSapIMc``R3m9D1)hFXySHSlJn$BLy^L)+^qp{0{;gD9VPfF`)q$vx&-0ybO zj-V!L)u~6X8u!q`)Kh?~mDCJEmv#V@=P}tPHafb)9Oh&^q#AWhfo zkQEwQ!I?$@EDlJc;Z4KFINmS;#V;+kHu6Sd8Mg77vMjk8&ra307-E9s7AYExd9&JK z1?={ES2=Ln+a diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_sturdy.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_sturdy.png deleted file mode 100644 index bac7d08ef2ff52dc33dba64a535eef5d484159e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 883 zcmV-(1C0EMP)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wXMTizYuC#t6;1KFP0&? z=T1&W#T#M8`ZKNf@Oh#oQrxIlyuM83eOE@p%0(L9jqu-J`V&45;1xOjS*!p6002ov JPDHLkV1o9kncV;Y diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_titanium.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_titanium.png deleted file mode 100644 index e40244736453570d9c6d15737cf320741b277cea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmV-Q1GW5#P)H_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1w{~gs|+)naeqYF&w_61T%<|IN_ruEIwP7Maq&Sp*W67 z2$9DWKGA44=y@=pD2jA&8EBfOKHqLPIvn=od0qZ~8;?m`FIU=Z-ZRH%C0I&V2TrF` zoj`SiBEX7v+acGL?CkfSbb?ODrO9MWj?*UTNecWx`?_79R;wlL_XjfLB%k|yzEIte z*tTs-i^|Ht1#^-;LS(HV2vzEaAj}Lv*=+lPF~ExB@styorsVsf4vL~L4#Eg{qivN4 zK45@l6%YWz*6U>v5b@n^x79>q=CUgA18dSR1`hr*p(>)9zRZ?IN{>0%Za=hqAR1gb zEvK3QngSGty^4%TiZ1XjORQw%k+2M?f<>yE>Z&d=$OJ|&QV@jM{)@W=iojN@dFKO$ zRY)`Wev%RQr_+&oy~m1-iZ@_|VHjHP`Fy4&QrxI67K=H5mt_Q&7ilzlrT_lY-zo^< UrrZGeCIA2c07*qoM6N<$f{rSUMgRZ+ diff --git a/src/main/resources/assets/hbm/textures/blocks/trapdoor_tungsten.png b/src/main/resources/assets/hbm/textures/blocks/trapdoor_tungsten.png deleted file mode 100644 index c85bdc129ee3e3935df71692c271c7ca9ee8a9f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmVH_m#Kqge zf526_Qc97MTwT3gr15)<+D$yuGrv#Y=lTBn&37O?kvB}Yas*7vbK>JMZDw{(t9hcD z2#qw;rW>w3nHWp*?|Q!>r0R8_>h=GkS|MpE$5RV~mn-v^!WXXv)Dr!->rln>?Ps@{MMdkiG zPd76-5Oj~kpz6W*U%H`Y3qCh}|Kq^-KM$ee9?qIR&ek3MTdI&9&Sc>E7#e1wmqD_;N)e!=m?d7gccir@j_G!aH4j%(c-Ko*LMqPU%oVie%tj+kTA!_XB3 z81e)>_%vcF_74f}^Nm~3K$!IeYPM|?#|QCgjEIATtJyKy$K-f_7}NK?H<8{@#V`!I hw`0^jKj(ix=@*{l)mY)q1o!{|002ovPDHLkV1kbCU!DK} From ac7f1865289078e0ba7a534d48d9cba2da0d6b2d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 30 Jun 2025 16:04:01 +0300 Subject: [PATCH 234/491] Oops --- src/main/java/com/hbm/world/gen/component/BunkerComponents.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hbm/world/gen/component/BunkerComponents.java b/src/main/java/com/hbm/world/gen/component/BunkerComponents.java index d909fc431..3ae448a03 100644 --- a/src/main/java/com/hbm/world/gen/component/BunkerComponents.java +++ b/src/main/java/com/hbm/world/gen/component/BunkerComponents.java @@ -127,6 +127,7 @@ public class BunkerComponents { fillWithMetadataBlocks(world, box, 1, hpos, 4, 1, hpos, 6, ModBlocks.concrete_smooth_stairs, getStairMeta(0)); placeBlockAtCurrentPosition(world, ModBlocks.concrete_slab, 1, 2, hpos, 3, box); placeBlockAtCurrentPosition(world, ModBlocks.concrete_smooth_stairs, getStairMeta(2), 2, hpos, 4, box); + placeBlockAtCurrentPosition(world, ModBlocks.trapdoor_steel, getDecoModelMeta(8) >> 2, 2, hpos, 5, box); placeBlockAtCurrentPosition(world, ModBlocks.concrete_smooth_stairs, getStairMeta(3), 2, hpos, 6, box); placeBlockAtCurrentPosition(world, ModBlocks.concrete_slab, 1, 2, hpos, 7, box); fillWithMetadataBlocks(world, box, 3, hpos, 4, 3, hpos, 6, ModBlocks.concrete_smooth_stairs, getStairMeta(1)); From 533dfd6dedfe52059384f48c951c404c94e356c6 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 30 Jun 2025 16:08:38 +0300 Subject: [PATCH 235/491] Fix localization --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 43df8e497..8e468434f 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5689,7 +5689,7 @@ tile.ladder_steel.name=Стальная лестница tile.ladder_sturdy.name=Прочная деревянная лестница tile.ladder_titanium.name=Титановая лестница tile.ladder_tungsten.name=Вольфрамовая лестница -tile.trapdoor_steel.name=Стальный люк +tile.trapdoor_steel.name=Стальной люк tile.lamp_demon.name=Лампа из заряда-демона tile.lamp_tritium_blue_off.name=Синяя тритиевая лампа tile.lamp_tritium_blue_on.name=Синяя тритиевая лампа From c08a90553a8ce91ff6ba0534057ce949d84a67e9 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 30 Jun 2025 16:30:59 +0200 Subject: [PATCH 236/491] FLESH --- changelog | 6 + gradle.properties | 2 +- .../com/hbm/crafting/ConsumableRecipes.java | 10 +- .../java/com/hbm/crafting/ToolRecipes.java | 5 +- .../entity/logic/EntityNukeExplosionMK5.java | 13 +- .../com/hbm/explosion/ExplosionFleija.java | 37 ++-- .../java/com/hbm/handler/HTTPHandler.java | 17 +- .../gui/LoadingScreenRendererNT.java | 189 ++++++++++++++++++ .../inventory/recipes/PedestalRecipes.java | 4 +- src/main/java/com/hbm/items/ItemEnums.java | 2 +- src/main/java/com/hbm/items/ModItems.java | 3 + .../com/hbm/items/tool/ItemRangefinder.java | 47 +++++ src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 3 +- .../com/hbm/main/ModEventHandlerClient.java | 10 +- src/main/java/com/hbm/main/ServerProxy.java | 3 +- src/main/java/com/hbm/util/Vec3NT.java | 14 ++ src/main/resources/META-INF/HBM_at.cfg | 2 + src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../hbm/textures/items/ingot_metal.scrap.png | Bin 0 -> 627 bytes .../hbm/textures/items/ingot_metal_sheet.png | Bin 6720 -> 7567 bytes .../assets/hbm/textures/items/rangefinder.png | Bin 0 -> 280 bytes 23 files changed, 320 insertions(+), 51 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java create mode 100644 src/main/java/com/hbm/items/tool/ItemRangefinder.java create mode 100644 src/main/resources/assets/hbm/textures/items/ingot_metal.scrap.png create mode 100644 src/main/resources/assets/hbm/textures/items/rangefinder.png diff --git a/changelog b/changelog index 1e3e818a7..bb000ef7e 100644 --- a/changelog +++ b/changelog @@ -14,6 +14,9 @@ * This means that a chemical factory can make hydrogen peroxide, sulfuric acid and nitric acid, and the only fluid input needed is water * Paintable exhaust pipe * Full block exhaust pipe that behaves like paintable cables and ducts +* Rangefinder + * A simple tool for checking the distance to a block + * Is now used as the base ingredient for long range target designatory, artillery remotes and airstrike designators ## Changed * Updated chinese and ukrainian localizations @@ -44,6 +47,8 @@ * Open doors can now be interacted through * Area abilities on tools now drop all mined blocks in the center * Tools with AoE now come with the new "flat AoE" ability, which is the same but the area is only 1 block tall +* Atomic airstrike now requires a control unit +* Parallelized explosions have been temporarily disabled, regardless of config option, explosions will use the previous system ## Fixed * Chemical plant ports. For real this time. @@ -62,3 +67,4 @@ * Replaced paintabble cables in the lighthouse with regular ones, fixing an issue where the paint would ID shift * Fixed light blocks being considered solid for NPC pathfinding * Fixed issue regarding locked slots when using crates +* Fixed MK3 explosions crashing when spawned with invalid size or when not being deserialized correctly diff --git a/gradle.properties b/gradle.properties index 17c61bd4b..da72d22ff 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5357 +mod_build_number=5377 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index a64f9759c..8d867f56e 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -27,11 +27,11 @@ public class ConsumableRecipes { public static void register() { //Airstikes - CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_caller, 1, 0), new Object[] { "TTT", "TRT", "TTT", 'T', Blocks.tnt, 'R', ModItems.detonator_laser }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_caller, 1, 1), new Object[] { "TTT", "TRT", "TTT", 'T', ModItems.grenade_gascan, 'R', ModItems.detonator_laser }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_caller, 1, 2), new Object[] { "TTT", "TRT", "TTT", 'T', ModItems.pellet_gas, 'R', ModItems.detonator_laser }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_caller, 1, 3), new Object[] { "TRT", 'T', ModItems.grenade_cloud, 'R', ModItems.detonator_laser }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_caller, 1, 4), new Object[] { "TR", 'T', DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_HIGH), 'R', ModItems.detonator_laser }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_caller, 1, 0), new Object[] { "TTT", "TRT", "TTT", 'T', Blocks.tnt, 'R', ModItems.rangefinder }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_caller, 1, 1), new Object[] { "TTT", "TRT", "TTT", 'T', ModItems.grenade_gascan, 'R', ModItems.rangefinder }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_caller, 1, 2), new Object[] { "TTT", "TRT", "TTT", 'T', ModItems.pellet_gas, 'R', ModItems.rangefinder }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_caller, 1, 3), new Object[] { "TRT", 'T', ModItems.grenade_cloud, 'R', ModItems.rangefinder }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_caller, 1, 4), new Object[] { "TRC", 'T', DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_HIGH), 'R', ModItems.rangefinder, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER) }); //Food CraftingManager.addRecipeAuto(new ItemStack(ModItems.bomb_waffle, 1), new Object[] { "WEW", "MPM", "WEW", 'W', Items.wheat, 'E', Items.egg, 'M', Items.milk_bucket, 'P', ModItems.man_core }); diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 26a04b5fe..39c00cde5 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -112,10 +112,11 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.ullapool_caber, 1), new Object[] { "ITI", " S ", " S ", 'I', IRON.plate(), 'T', Blocks.tnt, 'S', KEY_STICK }); //Utility + CraftingManager.addRecipeAuto(new ItemStack(ModItems.rangefinder, 1), new Object[] { "GRC", " S", 'G', KEY_ANYPANE, 'R', REDSTONE.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'S' ,STEEL.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator, 1), new Object[] { " A", "#B#", "#B#", '#', IRON.plate(), 'A', STEEL.plate(), 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator_range, 1), new Object[] { "RRD", "PIC", " P", 'P', STEEL.plate(), 'R', Items.redstone, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', ModItems.designator, 'I', STEEL.ingot() }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.designator_range, 1), new Object[] { ModItems.rangefinder, ModItems.designator, ANY_PLASTIC.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator_manual, 1), new Object[] { " A", "#C#", "#B#", '#', ANY_PLASTIC.ingot(), 'A', PB.plate(), 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'C', ModItems.designator }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator_arty_range, 1), new Object[] { "M", "C", "P", 'M', ModItems.magnetron, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'P', ANY_PLASTIC.ingot() }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.designator_arty_range, 1), new Object[] { ModItems.rangefinder, DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), ANY_PLASTIC.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.linker, 1), new Object[] { "I I", "ICI", "GGG", 'I', IRON.plate(), 'G', GOLD.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.oil_detector, 1), new Object[] { "W I", "WCI", "PPP", 'W', GOLD.wireFine(), 'I', CU.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG), 'P', STEEL.plate528() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.turret_chip, 1), new Object[] { "WWW", "CPC", "WWW", 'W', GOLD.wireFine(), 'P', ANY_PLASTIC.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), }); diff --git a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java index dac30b1db..06480aa21 100644 --- a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java +++ b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java @@ -10,7 +10,6 @@ import com.hbm.config.GeneralConfig; import com.hbm.entity.effect.EntityFalloutRain; import com.hbm.explosion.ExplosionNukeGeneric; import com.hbm.explosion.ExplosionNukeRayBatched; -import com.hbm.explosion.ExplosionNukeRayParallelized; import com.hbm.main.MainRegistry; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; @@ -70,13 +69,11 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { if(explosion == null) { explosionStart = System.currentTimeMillis(); - if (BombConfig.explosionAlgorithm == 1 || BombConfig.explosionAlgorithm == 2) { - explosion = new ExplosionNukeRayParallelized(worldObj, posX, posY, posZ, - strength, speed, length); - } else { - explosion = new ExplosionNukeRayBatched(worldObj, (int) posX, (int) posY, (int) posZ, - strength, speed, length); - } + //if(BombConfig.explosionAlgorithm == 1 || BombConfig.explosionAlgorithm == 2) { + // explosion = new ExplosionNukeRayParallelized(worldObj, posX, posY, posZ, strength, speed, length); + //} else { + explosion = new ExplosionNukeRayBatched(worldObj, (int) posX, (int) posY, (int) posZ, strength, speed, length); + //} } if(!explosion.isComplete()) { diff --git a/src/main/java/com/hbm/explosion/ExplosionFleija.java b/src/main/java/com/hbm/explosion/ExplosionFleija.java index 5a478fe14..8c06d708a 100644 --- a/src/main/java/com/hbm/explosion/ExplosionFleija.java +++ b/src/main/java/com/hbm/explosion/ExplosionFleija.java @@ -6,8 +6,8 @@ import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class ExplosionFleija -{ +public class ExplosionFleija { + public int posX; public int posY; public int posZ; @@ -23,7 +23,7 @@ public class ExplosionFleija private int element; public float explosionCoefficient = 1.0F; public float explosionCoefficient2 = 1.0F; - + public void saveToNbt(NBTTagCompound nbt, String name) { nbt.setInteger(name + "posX", posX); nbt.setInteger(name + "posY", posY); @@ -40,7 +40,7 @@ public class ExplosionFleija nbt.setFloat(name + "explosionCoefficient", explosionCoefficient); nbt.setFloat(name + "explosionCoefficient2", explosionCoefficient2); } - + public void readFromNbt(NBTTagCompound nbt, String name) { posX = nbt.getInteger(name + "posX"); posY = nbt.getInteger(name + "posY"); @@ -57,29 +57,28 @@ public class ExplosionFleija explosionCoefficient = nbt.getFloat(name + "explosionCoefficient"); explosionCoefficient2 = nbt.getFloat(name + "explosionCoefficient2"); } - - public ExplosionFleija(int x, int y, int z, World world, int rad, float coefficient, float coefficient2) - { + + public ExplosionFleija(int x, int y, int z, World world, int rad, float coefficient, float coefficient2) { this.posX = x; this.posY = y; this.posZ = z; - + this.worldObj = world; - + this.radius = rad; this.radius2 = this.radius * this.radius; this.explosionCoefficient = coefficient; this.explosionCoefficient2 = coefficient2; - + this.nlimit = this.radius2 * 4; } - - public boolean update() - { + + public boolean update() { breakColumn(this.lastposX, this.lastposZ); this.shell = (int) Math.floor((Math.sqrt(n) + 1) / 2); int shell2 = this.shell * 2; + if(shell2 == 0) return true; // end explosion if the shell size is 0 to prevent division by zero crash this.leg = (int) Math.floor((this.n - (shell2 - 1) * (shell2 - 1)) / shell2); this.element = (this.n - (shell2 - 1) * (shell2 - 1)) - shell2 * this.leg - this.shell + 1; this.lastposX = this.leg == 0 ? this.shell : this.leg == 1 ? -this.element : this.leg == 2 ? -this.shell : this.element; @@ -88,15 +87,13 @@ public class ExplosionFleija return this.n > this.nlimit; } - private void breakColumn(int x, int z) - { + private void breakColumn(int x, int z) { int dist = this.radius2 - (x * x + z * z); - if (dist > 0) - { + if(dist > 0) { dist = (int) Math.sqrt(dist); - for (int y = (int)(dist / this.explosionCoefficient2); y > -dist / this.explosionCoefficient; y--) - { - if(this.posY + y > 0 && !(this.worldObj.getBlock(this.posX+x, this.posY+y, this.posZ+z) instanceof DecoBlockAlt))this.worldObj.setBlock(this.posX+x, this.posY+y, this.posZ+z, Blocks.air); + for(int y = (int) (dist / this.explosionCoefficient2); y > -dist / this.explosionCoefficient; y--) { + if(this.posY + y > 0 && !(this.worldObj.getBlock(this.posX + x, this.posY + y, this.posZ + z) instanceof DecoBlockAlt)) + this.worldObj.setBlock(this.posX + x, this.posY + y, this.posZ + z, Blocks.air); } } } diff --git a/src/main/java/com/hbm/handler/HTTPHandler.java b/src/main/java/com/hbm/handler/HTTPHandler.java index 4efc054f4..3af10a74b 100644 --- a/src/main/java/com/hbm/handler/HTTPHandler.java +++ b/src/main/java/com/hbm/handler/HTTPHandler.java @@ -13,6 +13,7 @@ import com.hbm.main.MainRegistry; public class HTTPHandler { public static List capsule = new ArrayList(); + public static List tipOfTheDay = new ArrayList(); public static boolean newVersion = false; public static String versionNumber = ""; @@ -25,6 +26,7 @@ public class HTTPHandler { try { loadVersion(); loadSoyuz(); + loadTips(); } catch(IOException e) { MainRegistry.logger.warn("Version checker failed!"); } @@ -69,12 +71,17 @@ public class HTTPHandler { BufferedReader in = new BufferedReader(new InputStreamReader(github.openStream())); String line; - - while((line = in.readLine()) != null) { - capsule.add(line); - } - + while((line = in.readLine()) != null) capsule.add(line); in.close(); } + private static void loadTips() throws IOException { + + URL github = new URL("https://gist.githubusercontent.com/HbmMods/a03c66ba160184e12f43de826b30c096/raw/tip_of_the_day"); + BufferedReader in = new BufferedReader(new InputStreamReader(github.openStream())); + + String line; + while((line = in.readLine()) != null) tipOfTheDay.add(line); + in.close(); + } } diff --git a/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java b/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java new file mode 100644 index 000000000..d9dc5e676 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java @@ -0,0 +1,189 @@ +package com.hbm.inventory.gui; + +import java.util.Random; + +import org.lwjgl.opengl.GL11; + +import com.hbm.handler.HTTPHandler; + +import cpw.mods.fml.client.FMLClientHandler; +import net.minecraft.client.LoadingScreenRenderer; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.shader.Framebuffer; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MinecraftError; + +public class LoadingScreenRendererNT extends LoadingScreenRenderer { + + private String message = ""; + private Minecraft mc; + private String currentlyDisplayedText = ""; + private long time = Minecraft.getSystemTime(); + private boolean doesProgress; + private ScaledResolution resolution; + private Framebuffer frameBuffer; + public String tipOfTheDay = "Tip of the day: " + chooseTip(); + + public LoadingScreenRendererNT(Minecraft mc) { + super(mc); + this.mc = mc; + this.resolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); + this.frameBuffer = new Framebuffer(mc.displayWidth, mc.displayHeight, false); + this.frameBuffer.setFramebufferFilter(9728); + } + + private String chooseTip() { + if(HTTPHandler.tipOfTheDay.isEmpty()) return "null"; + return HTTPHandler.tipOfTheDay.get(new Random().nextInt(HTTPHandler.tipOfTheDay.size())); + } + + @Override + public void resetProgressAndMessage(String message) { + this.doesProgress = false; + this.func_73722_d(message); + } + + @Override + public void displayProgressMessage(String message) { + this.doesProgress = true; + this.func_73722_d(message); + } + + @Override + public void func_73722_d(String message) { + this.currentlyDisplayedText = message; + + if(!this.mc.running) { + if(!this.doesProgress) { + throw new MinecraftError(); + } + } else { + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + + if(OpenGlHelper.isFramebufferEnabled()) { + int scale = this.resolution.getScaleFactor(); + GL11.glOrtho(0.0D, (this.resolution.getScaledWidth() * scale), (this.resolution.getScaledHeight() * scale), 0.0D, 100.0D, 300.0D); + } else { + ScaledResolution scaledresolution = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight); + GL11.glOrtho(0.0D, scaledresolution.getScaledWidth_double(), scaledresolution.getScaledHeight_double(), 0.0D, 100.0D, 300.0D); + } + + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -200.0F); + } + } + + @Override + public void resetProgresAndWorkingMessage(String message) { + if(!this.mc.running) { + if(!this.doesProgress) { + throw new MinecraftError(); + } + } else { + this.time = 0L; + this.message = message; + this.setLoadingProgress(-1); + this.time = 0L; + } + } + + @Override + public void setLoadingProgress(int p_73718_1_) { + if(!this.mc.running) { + if(!this.doesProgress) { + throw new MinecraftError(); + } + } else { + long time = Minecraft.getSystemTime(); + + if(time - this.time >= 100L) { + this.time = time; + ScaledResolution scaledresolution = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight); + int scaleFactor = scaledresolution.getScaleFactor(); + int width = scaledresolution.getScaledWidth(); + int height = scaledresolution.getScaledHeight(); + + if(OpenGlHelper.isFramebufferEnabled()) { + this.frameBuffer.framebufferClear(); + } else { + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + } + + this.frameBuffer.bindFramebuffer(false); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, scaledresolution.getScaledWidth_double(), scaledresolution.getScaledHeight_double(), 0.0D, 100.0D, 300.0D); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -200.0F); + + if(!OpenGlHelper.isFramebufferEnabled()) { + GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); + } + + if(!FMLClientHandler.instance().handleLoadingScreen(scaledresolution)) { + Tessellator tessellator = Tessellator.instance; + this.mc.getTextureManager().bindTexture(Gui.optionsBackground); + float f = 32.0F; + tessellator.startDrawingQuads(); + tessellator.setColorOpaque_I(4210752); + tessellator.addVertexWithUV(0.0D, height, 0.0D, 0.0D, height / f); + tessellator.addVertexWithUV(width, height, 0.0D, width / f, height / f); + tessellator.addVertexWithUV(width, 0.0D, 0.0D, width / f, 0.0D); + tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + tessellator.draw(); + + if(p_73718_1_ >= 0) { + byte b0 = 100; + byte b1 = 2; + int j1 = width / 2 - b0 / 2; + int k1 = height / 2 + 16; + GL11.glDisable(GL11.GL_TEXTURE_2D); + tessellator.startDrawingQuads(); + tessellator.setColorOpaque_I(8421504); + tessellator.addVertex(j1, k1, 0.0D); + tessellator.addVertex(j1, k1 + b1, 0.0D); + tessellator.addVertex(j1 + b0, k1 + b1, 0.0D); + tessellator.addVertex(j1 + b0, k1, 0.0D); + tessellator.setColorOpaque_I(8454016); + tessellator.addVertex(j1, k1, 0.0D); + tessellator.addVertex(j1, (k1 + b1), 0.0D); + tessellator.addVertex(j1 + p_73718_1_, k1 + b1, 0.0D); + tessellator.addVertex(j1 + p_73718_1_, k1, 0.0D); + tessellator.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + this.mc.fontRenderer.drawStringWithShadow(this.currentlyDisplayedText, (width - this.mc.fontRenderer.getStringWidth(this.currentlyDisplayedText)) / 2, height / 2 - 4 - 16, 16777215); + this.mc.fontRenderer.drawStringWithShadow(this.message, (width - this.mc.fontRenderer.getStringWidth(this.message)) / 2, height / 2 - 4 + 8, 16777215); + + String[] frags = this.tipOfTheDay.split("$"); + for(int i = 0; i < frags.length; i++) { + String frag = frags[i]; + this.mc.fontRenderer.drawStringWithShadow(EnumChatFormatting.YELLOW + frag, (width - this.mc.fontRenderer.getStringWidth(frag)) / 2, height / 2 - 4 - 60 + i * 10, 16777215); + } + } + this.frameBuffer.unbindFramebuffer(); + + if(OpenGlHelper.isFramebufferEnabled()) { + this.frameBuffer.framebufferRender(width * scaleFactor, height * scaleFactor); + } + + this.mc.func_147120_f(); + + try { Thread.yield(); } catch(Exception exception) { } + } + } + } + + @Override public void func_146586_a() { } +} diff --git a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java index 8554afafc..76d22d7c8 100644 --- a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java @@ -62,9 +62,9 @@ public class PedestalRecipes extends SerializableRecipe { .extra(PedestalExtraCondition.SUN)); register(new PedestalRecipe(new ItemStack(ModItems.gun_autoshotgun_sexy), - new ComparableStack(ModItems.bolt_spike, 16), new OreDictStack(STAR.ingot(), 4), new ComparableStack(ModItems.bolt_spike, 16), + new ComparableStack(ModItems.bolt_spike, 16), new ComparableStack(ModItems.wild_p), new ComparableStack(ModItems.bolt_spike, 16), new ComparableStack(ModItems.card_qos), new ComparableStack(ModItems.gun_autoshotgun), new ComparableStack(ModItems.card_aos), - new ComparableStack(ModItems.bolt_spike, 16), new OreDictStack(STAR.ingot(), 4), new ComparableStack(ModItems.bolt_spike, 16))); + new ComparableStack(ModItems.bolt_spike, 16), new OreDictStack(STAR.ingot(), 16), new ComparableStack(ModItems.bolt_spike, 16))); register(new PedestalRecipe(new ItemStack(ModItems.gun_minigun_lacunae), null, new ComparableStack(ModItems.powder_magic, 4), null, diff --git a/src/main/java/com/hbm/items/ItemEnums.java b/src/main/java/com/hbm/items/ItemEnums.java index 18878469c..d92c7840b 100644 --- a/src/main/java/com/hbm/items/ItemEnums.java +++ b/src/main/java/com/hbm/items/ItemEnums.java @@ -87,6 +87,6 @@ public class ItemEnums { } public static enum EnumIngotMetal { - INGOT, COUNTER, KEY, BEACON, CASING, CLOCKWORK, BAR, DETECTOR + SCRAP, INGOT, COUNTER, KEY, BEACON, CASING, CLOCKWORK, BAR, DETECTOR } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index d7b7fb410..7387de265 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1169,6 +1169,7 @@ public class ModItems { public static Item pellet_buckshot; public static Item pellet_charged; + public static Item rangefinder; public static Item designator; public static Item designator_range; public static Item designator_manual; @@ -3553,6 +3554,7 @@ public class ModItems { pellet_buckshot = new Item().setUnlocalizedName("pellet_buckshot").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_lead"); pellet_charged = new Item().setUnlocalizedName("pellet_charged").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_charged"); + rangefinder = new ItemRangefinder().setUnlocalizedName("rangefinder").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":rangefinder"); designator = new ItemDesingator().setUnlocalizedName("designator").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator"); designator_range = new ItemDesingatorRange().setUnlocalizedName("designator_range").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_range_alt"); designator_manual = new ItemDesingatorManual().setUnlocalizedName("designator_manual").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator_manual"); @@ -6136,6 +6138,7 @@ public class ModItems { GameRegistry.registerItem(spawn_duck, spawn_duck.getUnlocalizedName()); //Computer Tools + GameRegistry.registerItem(rangefinder, rangefinder.getUnlocalizedName()); GameRegistry.registerItem(designator, designator.getUnlocalizedName()); GameRegistry.registerItem(designator_range, designator_range.getUnlocalizedName()); GameRegistry.registerItem(designator_manual, designator_manual.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/tool/ItemRangefinder.java b/src/main/java/com/hbm/items/tool/ItemRangefinder.java new file mode 100644 index 000000000..9c1d5179f --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemRangefinder.java @@ -0,0 +1,47 @@ +package com.hbm.items.tool; + +import com.hbm.main.MainRegistry; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.PlayerInformPacket; +import com.hbm.util.ChatBuilder; +import com.hbm.util.Vec3NT; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class ItemRangefinder extends Item { + + public static final int META_POLARIZED = 1; + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(world.isRemote) return stack; + + Vec3NT start = new Vec3NT(player.posX, player.posY + player.eyeHeight, player.posZ); + Vec3NT startOriginal = new Vec3NT(start); // why the fuck + Vec3NT end = new Vec3NT(start).add(new Vec3NT(player.getLookVec()).multiply(300)); + + MovingObjectPosition mop = world.func_147447_a(start, end, false, true, false); + + if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) { + double dist = startOriginal.distanceTo(mop.hitVec); + String msg = ((int)(dist * 10D)) / 10D + "m"; + if(stack.getItemDamage() == META_POLARIZED) msg = EnumChatFormatting.LIGHT_PURPLE + msg + EnumChatFormatting.RESET; + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start(msg).flush(), MainRegistry.proxy.ID_DETONATOR, 5000), (EntityPlayerMP) player); + } + + return stack; + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + String name = super.getItemStackDisplayName(stack); + if(stack.getItemDamage() == META_POLARIZED) name = EnumChatFormatting.LIGHT_PURPLE + name + EnumChatFormatting.RESET; + return name; + } +} diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 27fe4f45d..f56883283 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5357)"; + public static final String VERSION = "1.0.27 BETA (5377)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 86a280f16..846699693 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -313,8 +313,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.detonator, 1), new Object[] { "C", "S", 'S', STEEL.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), }); addShapelessAuto(new ItemStack(ModItems.detonator_multi, 1), new Object[] { ModItems.detonator, DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) }); - addRecipeAuto(new ItemStack(ModItems.detonator_laser, 1), new Object[] { "RRD", "PIC", " P", 'P', STEEL.plate(), 'R', REDSTONE.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', DIAMOND.gem(), 'I', STEEL.ingot() }); - addRecipeAuto(new ItemStack(ModItems.detonator_laser, 1), new Object[] { "RRD", "PIC", " P", 'P', STEEL.plate(), 'R', REDSTONE.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', EMERALD.gem(), 'I', STEEL.ingot() }); + addShapelessAuto(new ItemStack(ModItems.detonator_laser, 1), new Object[] { ModItems.rangefinder, DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), RUBBER.ingot(), GOLD.wireDense() }); addShapelessAuto(new ItemStack(ModItems.detonator_deadman, 1), new Object[] { ModItems.detonator, ModItems.defuser, ModItems.ducttape }); addRecipeAuto(new ItemStack(ModItems.detonator_de, 1), new Object[] { "T", "D", "T", 'T', Blocks.tnt, 'D', ModItems.detonator_deadman }); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index e9e40dfe0..aea94c19b 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -22,6 +22,7 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.gui.GUIArmorTable; import com.hbm.inventory.gui.GUIScreenPreview; import com.hbm.inventory.gui.GUIScreenWikiRender; +import com.hbm.inventory.gui.LoadingScreenRendererNT; import com.hbm.items.ItemCustomLore; import com.hbm.items.ModItems; import com.hbm.items.armor.*; @@ -1032,10 +1033,15 @@ public class ModEventHandlerClient { @SideOnly(Side.CLIENT) @SubscribeEvent(priority = EventPriority.LOWEST) public void onClientTickLast(ClientTickEvent event) { + + Minecraft mc = Minecraft.getMinecraft(); + if(!(mc.loadingScreen instanceof LoadingScreenRendererNT)) { + mc.loadingScreen = new LoadingScreenRendererNT(mc); + } if(event.phase == Phase.START && GeneralConfig.enableSkyboxes) { - World world = Minecraft.getMinecraft().theWorld; + World world = mc.theWorld; if(world == null) return; IRenderHandler sky = world.provider.getSkyRenderer(); @@ -1059,7 +1065,7 @@ public class ModEventHandlerClient { } } - EntityPlayer player = Minecraft.getMinecraft().thePlayer; + EntityPlayer player = mc.thePlayer; long millis = Clock.get_ms(); if(lastStarCheck + 200 < millis) { diff --git a/src/main/java/com/hbm/main/ServerProxy.java b/src/main/java/com/hbm/main/ServerProxy.java index 7ec6eaa23..271a21759 100644 --- a/src/main/java/com/hbm/main/ServerProxy.java +++ b/src/main/java/com/hbm/main/ServerProxy.java @@ -32,8 +32,7 @@ public class ServerProxy { public static final int ID_FLUID_ID = 9; public static final int ID_FAN_MODE = 10; public static final int ID_TOOLABILITY = 11; - public static final int ID_GUN_MODE = 12; - public static final int ID_GAS_HAZARD = 13; + public static final int ID_GAS_HAZARD = 12; public ITranslate getI18n() { return I18N; } diff --git a/src/main/java/com/hbm/util/Vec3NT.java b/src/main/java/com/hbm/util/Vec3NT.java index 0cb8121a7..1e6cb1294 100644 --- a/src/main/java/com/hbm/util/Vec3NT.java +++ b/src/main/java/com/hbm/util/Vec3NT.java @@ -29,6 +29,13 @@ public class Vec3NT extends Vec3 { return this; } + public Vec3NT add(Vec3 vec) { + this.xCoord += vec.xCoord; + this.yCoord += vec.yCoord; + this.zCoord += vec.zCoord; + return this; + } + public Vec3NT multiply(double m) { this.xCoord *= m; this.yCoord *= m; @@ -43,6 +50,13 @@ public class Vec3NT extends Vec3 { return this; } + public double distanceTo(double x, double y, double z) { + double dX = x - this.xCoord; + double dY = y - this.yCoord; + double dZ = z - this.zCoord; + return Math.sqrt(dX * dX + dY * dY + dZ * dZ); + } + @Override public Vec3NT setComponents(double x, double y, double z) { this.xCoord = x; diff --git a/src/main/resources/META-INF/HBM_at.cfg b/src/main/resources/META-INF/HBM_at.cfg index 81514dff3..859de4618 100644 --- a/src/main/resources/META-INF/HBM_at.cfg +++ b/src/main/resources/META-INF/HBM_at.cfg @@ -55,3 +55,5 @@ public net.minecraft.client.gui.GuiIngame field_92016_l # hi # Block public net.minecraft.block.Block func_149642_a(Lnet/minecraft/world/World;IIILnet/minecraft/item/ItemStack;)V # dropBlockAsItem +# Minecraft +public net.minecraft.client.Minecraft field_71425_J # running diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 33050befc..c76f24002 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3039,6 +3039,7 @@ item.radx.name=Rad-X item.rag.name=Stoff item.rag_damp.name=Nasser Stoff item.rag_piss.name=Pisslappen +item.rangefinder.name=Entfernungsmessgerät item.rbmk_fuel_balefire.name=Balefire-RBMK-Kernbrennstoff item.rbmk_fuel_balefire_gold.name=Flammgold-RBMK-Kernbrennstoff item.rbmk_fuel_drx.name=§cDigamma-RBMK-Kernbrennstoff diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 72c0ee93b..d432682b1 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3992,6 +3992,7 @@ item.radx.desc=Increases radiation resistance by 0.2 (37%%) for 3 minutes item.rag.name=Cloth item.rag_damp.name=Damp Cloth item.rag_piss.name=Piss-Soaked Rag +item.rangefinder.name=Rangefinder item.rbmk_fuel_balefire.name=Balefire RBMK Fuel Rod item.rbmk_fuel_balefire_gold.name=Flashgold RBMK Fuel Rod item.rbmk_fuel_drx.name=§cDigamma RBMK Fuel Rod§r diff --git a/src/main/resources/assets/hbm/textures/items/ingot_metal.scrap.png b/src/main/resources/assets/hbm/textures/items/ingot_metal.scrap.png new file mode 100644 index 0000000000000000000000000000000000000000..a0074ffc817769a67e18fe737956febd3af9d3f9 GIT binary patch literal 627 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 literal 6720 zcmWkzWmr^A6ke7tX_s;Dh z{qFP3%(*}A%!zm2bIx;PwKZRm644U@002^zm(O)DD*`j*3GguU>;fE)S#Z1*Rdfk3 zPY{7k3;;lPrSe=s*RSB95U#7MpLGNS5xr6^<|6(oPtr|D84g>9Scy5=OWEC)I8eT? z3NCz~$>beUV`ne_D8Dx0JppEL1C9I8H7+12muA^$sIfVjqGibC&~N z&D6zF62}#t{^@|l1y=JAeE}xI(vFP21Rhn^Psv{W3%*>lKk^bt^Ly0G^+6)_7`uvs zXoBf|yYi`Q@bB{?$c>T+7!MCGVs7_&#oWzm(yALss!+3TTP;33-k_0h1Xwxlmw6t~UxVTw!2nC`qk5;KJ!!z{MV7 zdA-f2>SvqJzD6LD0k?gXU-8*9>{&obNr_HiAZmbTtZ;)&<`@8Y93Od)y3$f{y-|Gi zDi!d3eB5TG$rY>l|BYtm=0rZazil7anF954d|F=E~ccL)^5XWSH%l=LWBxN83MbfEQc(i5;NEeT%9 z;yx!kj&Ka<=9^2Ef%4;2+%HkMwbbIt z+Su6mXVz`C?alXuqn&>^#TB*59fR@OQ#rjDJ#un0CrlEfK=Rj=VVO|6wt!ycY;q!W4wtpzW%iHJ%|8$T7`=2p;aZTCF_p9z+i zm%IG@YB@e}b+9u0&3ah7Y93ravx=jur$-sX!NtQvX=-W;I6puC>Nv+y4$l{N1^(X3 zHs=r%%Z!O3z*s-j(CV|VCnN&R$EXMRUq5|LO<+oH+Lw&rfa0iyy{Tb`(EoJ|MqO(B z)Q9ik#4(g&oJGYT?o!;<6{2qI{xRG+KExwnVtfFsHoflAg0wNV&&yZxNxV7CU z-5j^zsn<|B77Ggt!r5sBG}k+*OIJ6V$t=?S?c1wLV_n@3cV?JLGPP?tYvWMgk2o|? z);*MqkB^;?kJRIa_O!M6aoWuCG7mdDd#s54+`S_Zh|HrS%Pulx9B) zqr@Sl{rN2EvKL3(t&ZXON!%#F)mmUJ3r=osE(VmmkK+}K^{QfHVv4J()Lx+gdR1?L z*`)7k$@sB8)zpB?u-e+%jvGz#2~PLqn^u*Sl=@a-9#>d4L-`YSTgxuuUbp9t!otD` zXEg<1EI>AsMe~Y^$q5ADAO9F=;pA4*zfs(H>xCfH$66QvxQUIiTKSWav2l4s1P<1s zXsAq1UEAfLw>z)F*PcJiPK~!e0HMN6)LtwjA2IG#Pb*ZGKQXVXug}EX$Tu~xo4-`t z+}tWH(uEjcgU6$t_wPW*35Sh(!Fa#S5`2dGU)V#_ zAzWmaQw?g((+U_Q%0R}U!xhH>{A8UbpD%?d~S z1;nY});T%LKSHFn*tLYu1WgyQk%{ks8GJI~fFJM#aU&4e0*+hxss)QJ060 zudr@HoR-9D{_~p_d-}1_Q3J_%?@_s{b9;3yNA%ai+FlgR@A&xIR*rTpT1+j9?fQd$3buL^yQyN z=_8_!%z~Jcdc$zPn6&DQyz%z-*4ESe$g8y_pURk!_eG?g?ZJ}*whca&kWu#8#sBN> zM>}vm1=RRo`t$TKYL0t2Xk~g9VR9kmVP15TMO@H0<7tg)}S!(BO4S2Iu z9BFcI4h3`7{~QV&gZ^9$7T%nAQLc_s$wvH+0j=6}dZdqdkNGlG0xl0%_bD3H)YQtp zd>Jn*Wi-kZ8;BR^;_8s_&dAE*xq-(IZl+3O@cZbKweVTz+)Ul)t7cO3t;g}U;~`Of ziQUw~;SzEWAl*!TA^R*S%LO;pFz%G6V*LCuk?)`y%b_?Oz)ieRiS7$}okY8ycPFc@RQjf7ZY~kxliZ z+^`00xm$x#f0_0VG~_6F3%*QeWTUx@HHy zv?Y8%Pd)ro@YQz!xEH|SU0 ze&e_D<1ZjNs&eQkUk>?eYQ)+0RC-DZpe0Av?9ePqV8z_jR3jurZhn5=Ww{~t_BOz_ zDqEmpI(zvl`=&~-`qbhOeUHjq|J9h%?6pU_gd>Xe#dIU@re{N$0b?k@#KHN=Gha?; zK=(Rv4#8pIgUw1&QBm@s6*CN0gyG2K^`1HI^UF)@!W&GcPk$eLY1rht!f|6%>W0Zj z33{hd9l)09h0(ZI`S6yRkAiTFBQblj!~3lVrdo%?-__Cgtlvsd@gTao+!>JC zy&<%QT3n}uai%tnExtE3!_v(T5#)e)V|1r!!E+xw3SHr7+RUk5vV4kkfhK1mbf67%m}1w~%xt%W|E~uZ zho+RN(!=|a0r>`UM=c(^HB@2Wo}RQwD%J9tcQLA@<;bpx;YJwa%46I5}Tn%2i<)YvRKm5z>%%{-#>tZ-3D10RHq6Yt;$rm-nn0o3pX#6 zX9D4FFhd-L7McE{8$|m=dD_~d=*TH&_8^Se%Qye_sZ=?eI`0-))Nzv(B+UX5@ABgg zR+{6p%>qV_6c#jzOQj7o4m)%Yr-F4G3ijEc!8uK8rZF34A-6xv80Bs+TFy_$vvc8h z$;loM&zOK77~$(?EdA%T$!82Oh8F7YwCf8gkB0|iD<05>N#IWv*4izKAHyG=dr|c~ z?cqJ(ZIK!%@1;QBapHYFN2pr8*sa~|`fa1N#k^aVJc<+1;{h_E3p*wsg^n7ceoi42 zikbGys~{?jpDRo5#~l^Jo?ZXeT3pNFJEw?YkeW zeM@u1h1e!tv;F2>=Q2lKDE?r5e81Zz5F+F~9G%U^&Q3uA*7R2z%n=`JVo3wl*dF#} z(;#1P@?sa?-zk*;Gg*E3P+n6|TJ0N;m-A$3BY2oAK?zi*Ei zjPg3(0Znrj+ausX{!q&j%KgRK?Qk+VfW^qBx94AnvKRUK{Gt7NY9B6A@XxSHsj@sV z@tJj$jp)~_l8pAn)-^e_m28WDIJ?TY3p@C!U=tB{xS`;2 zj!+&P-xb+yo5eSxkpv7Aa8AAdaAO7Krc;5aJfECCX}?NjtN0)YgT^OAc?_C(L7h?w zV~;uO&+~)|g%%c6BRA3jf_jTDp>N+tl))q5KRXQX=AKt!56A5LOy>5ElLIwcve0O| z8a$2dEe$PZw%Dr#wS&F^3)f4Qk=$<@8+Af7lX587z6GP+VaZN! z*%ZGxCUXOB>@bwx^$fGw+duOqv!_28S5Z|2UOtg|X^;}3$%K85C<7r_U(j!YU*clQ-kUrR%?-i7d z$u)YCnkwQbNBN5 z{+X*QIxnN%!o8gFkqeIw zHB>lg9o!t5XV zcc;tHP5$yIa^gYvuhN|$KI}K6x zHqoEZXP$tSX7_FfbY0XW+H!5ZU7|QdHYJrS=7+G~jj+#z{qS@M2wMSs^3NwqhN65X z=F_K7D|;vaY|@xVnKkmZ9Fv_K68G;gMfJ8wOkH(Nci~hE`d4k|E@$A;3NE-6A&YW$ zQyW1yAirj$r?b9&`<9=m_=}bMFP~VB*mkFPs8DGn3UDZdZa=`}#Mq-N?4aQ*>`#CX z60z8RsOskDfn$znWa9yqT*lq>sryXJ>4*KZ>POMoWiu}W1KV-5uRUsLU+sQfb^%yl;#`N5`J^g#e~o1?+og!$d}oRo*0wQPaP>}CXzh;k^cOnUD&+` zB>C-%BJT0vHhi;kcwzP_&a$?_r92)D(_#-Iu_Q#{yLW8;goZA0uSIs@u56*q&EIsZ z#Trv^xPh6OrjZf-99!&0D0Ih8$*X)ZQ$W)1*h2mZl$V#GN znk7(N(xgd2;1L-%-%FWC9{b*MN_?kjV+U+$WI)~-%t}JIv-?%2C8$ymEctH+{=eI_ zBq*{{Rad~QUJEq9mdQox>A*IXnMc0Fx_~?anhO4$k~5wOecXB$`#R)QcDO1oN&jyM zyZh0`UW`0&IbZV|2e+fTH7w9u);?cz_DOlzwE8S%nWRx5QKD21jsMtn&yG1|`EhhB z3-npCGH9a1|BPE8F!|w^F>Z^C-qfHMIPk%HPB&s-afcyyC_%Hi_T9zONZ^iwMUMa3 zVfpEqR0>-dz^iZ@mh92I>l&DFw=>NwrOscSb8@oeranI2AZ;64cExN9Ggaa8Zhw6HibN#RPDe+_;k5DOHT~O8 zq|_}5(XFYghiy*OvNeIl+KzMr5-FAZIr*n_IhkkhSIfyZMJaX8X}dLi`RH97jDu&J zhIcj?*GRRo5+s%7@jrzZw==NC4rSGo5KRvc&n?W1c?_$t$@3`~kC9N$ZSy1sozI|3 zH_nX4AB$)din~mzS&-`CaP7V~$U^Q(`k%6KS2|LI9&|G@?oc@jye65@IvuK+2xp4> zXLsm_knc+Qi64=6v#)g=934+O_w^Yzm#KPoL=sAC;W4cENg@f(?LB05b=MzDuryM7 z+*;9Uwd=SzSdw^A3T0t2f>F_7l5SF3-X=09Cnulm$06!rwD-KF7a|1tcqM==s4DAL zw^t`x!%wg&i^Iyh{^^=W-frqlfr}fmBzhq&GfUZ3gY?o)g!EzplaLN6G@wCTS~gqA zQo_a54{F;EWw~nNi{nK_d13We!r985A@01IA&7Yxn$SPFhUIAEp)}(PyJFmqe!^~2 zLgLk%z?88`V$mX3t2}*%Qyl>pGdv6)97K-F`n?rra4>Sj#Fz&k$S2iTgH0Q^hP3GM zFu7zKVXv({JA`(6r+-&^9p5`_aBF%(eW7RGd2L~j=^+9MotUoXuwzTg*?FGD`vjRb z5ydQ#9T)fZ(AW(Em5y!r>9@?kB-wznjtnu>Oqw3DxA-PW{^}Lu&1c5^31u}e5w$G) zIg`KwciygCvg0v{wG=BKDa(u5N2elp=ehRR&5P#j9D2A}3ILXK3a~4t->|b0w%5Qa z+D7tdTC7rOrK6kS2dz>qYI;}-0LxjiVHF^9D)vPYwaRz`-T8&LJOKn=_Nq3rmpO-~ zbo#EVgE8I~5MLfY))_9EH!=EKqT$C``zg_gi(EuCnnbJ!3=xwKcmI_`^8_h1?;t9g z$I!a$_NVR-W2*dFWjd9xdDOgHwzpK_@c55`h+@3aF<**wa^kw#*%$pi$2sD>G|GL# zI;POjR~nG1Ab%f=Nu*Fw$(gxe9sEUK9RN z?`=}IjJXBOF9}MYg-d$&B0-%&4?8;!Gl%_JIWXAkptD3r^;Y$V2F$ zlTc~r=4?AtgLZqd!SrvJ^LUYyT(D<5GzwN86oUG@TWfo9m)?4zgtjF;!nuQIzOYzN UQxkN@{1O7FC}}>gQM3sA5Bd7_$p8QV diff --git a/src/main/resources/assets/hbm/textures/items/rangefinder.png b/src/main/resources/assets/hbm/textures/items/rangefinder.png new file mode 100644 index 0000000000000000000000000000000000000000..d7539ee67523e75a20db5bffafd9f8fb9002f548 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf=Y>Cgq|0r<(8=*Zh8+IasxnH Date: Mon, 30 Jun 2025 15:32:25 -0400 Subject: [PATCH 237/491] copy tool support and working directional offsets --- .../hbm/blocks/generic/BlockWandSpawner.java | 11 +++++- .../hbm/blocks/generic/DungeonSpawner.java | 4 +++ .../world/gen/util/DungeonSpawnerActions.java | 33 +++++++++++++++++- .../hbm/textures/blocks/wand_spawner_top.png | Bin 740 -> 743 bytes 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java index fdfca7689..0508002d7 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java @@ -33,6 +33,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.List; @@ -78,9 +79,16 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT if (i == 2) world.setBlockMetadataWithNotify(x, y, z, 0, 2); if (i == 3) world.setBlockMetadataWithNotify(x, y, z, 1, 2); + ForgeDirection dir = ForgeDirection.UNKNOWN; + switch(i){ + case 0: dir = ForgeDirection.SOUTH;break; + case 1: dir = ForgeDirection.WEST; break; + case 2: dir = ForgeDirection.NORTH;break; + case 3: dir = ForgeDirection.EAST; break; + } TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityWandSpawner) - ((TileEntityWandSpawner)te).placedRotation = i; + ((TileEntityWandSpawner)te).placedRotation = dir.ordinal(); } @Override @@ -193,6 +201,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT DungeonSpawner.TileEntityDungeonSpawner spawner = (DungeonSpawner.TileEntityDungeonSpawner) te; spawner.actionID = actionID; spawner.conditionID = conditionID; + spawner.direction = ForgeDirection.getOrientation(placedRotation); } } diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index ffbb14239..41fa907b5 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -20,6 +20,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class DungeonSpawner extends BlockContainer { @@ -44,6 +45,7 @@ public class DungeonSpawner extends BlockContainer { public Function condition; public Consumer action; + public ForgeDirection direction = ForgeDirection.UNKNOWN; @Override public void updateEntity() { @@ -74,6 +76,7 @@ public class DungeonSpawner extends BlockContainer { nbt.setInteger("phase", phase); nbt.setString("conditionID", conditionID); nbt.setString("actionID", actionID); + nbt.setInteger("direction", direction.ordinal()); } @Override @@ -81,6 +84,7 @@ public class DungeonSpawner extends BlockContainer { super.readFromNBT(nbt); this.phase = nbt.getInteger("phase"); this.conditionID = nbt.getString("conditionID"); + this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); } } diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java index 120ea00e8..1e32d9dc7 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java @@ -5,6 +5,7 @@ import com.hbm.blocks.generic.BlockPedestal; import com.hbm.blocks.generic.BlockSkeletonHolder; import com.hbm.blocks.generic.DungeonSpawner; import com.hbm.entity.item.EntityFallingBlockNT; +import com.hbm.entity.missile.EntityMissileTier2; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums; import com.hbm.items.ModItems; @@ -12,6 +13,7 @@ import com.hbm.main.ModEventHandler; import com.hbm.tileentity.machine.storage.TileEntityCrateBase; import com.hbm.util.MobUtil; import com.hbm.util.Vec3NT; +import com.hbm.world.WorldUtil; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.player.EntityPlayer; @@ -21,7 +23,10 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.HashMap; @@ -140,7 +145,7 @@ public class DungeonSpawnerActions { if(tile.phase == 2){ world.setBlock(x,y,z, ModBlocks.crate_steel); - EntityLightningBolt blitz = new EntityLightningBolt(world, x, world.getHeightValue(x, z) + 1, z); + EntityLightningBolt blitz = new EntityLightningBolt(world, x, world.getHeightValue(x, z) + 2, z); world.spawnEntityInWorld(blitz); TileEntityCrateBase crate = (TileEntityCrateBase) world.getTileEntity(x,y,z); @@ -148,6 +153,31 @@ public class DungeonSpawnerActions { } }; + public static Consumer MISSILE_STRIKE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase != 1) return; + + world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + "[COMMAND UNIT]"+ EnumChatFormatting.RESET + " Missile Fired")); + + ForgeDirection parallel = tile.direction.getRotation(ForgeDirection.UP); + + EntityMissileTier2.EntityMissileStrong missile = + new EntityMissileTier2.EntityMissileStrong( + world, + x + tile.direction.offsetX * 300, + 200, + z + tile.direction.offsetZ * 300, + x + parallel.offsetX * 30 + tile.direction.offsetX * 30, + z + parallel.offsetZ * 30 + tile.direction.offsetZ * 30); + WorldUtil.loadAndSpawnEntityInWorld(missile); + + world.setBlock(x,y,z, ModBlocks.block_electrical_scrap); + }; + public static List getActionNames(){ return new ArrayList<>(actions.keySet()); } @@ -158,6 +188,7 @@ public class DungeonSpawnerActions { actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); actions.put("FODDER_WAVE", FODDER_WAVE); actions.put("PUZZLE_TEST", PUZZLE_TEST); + actions.put("MISSILE_STRIKE", MISSILE_STRIKE); } diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png b/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png index 4788b84883581058c6fdf5525b3239d0e888f352..65e3106a96f970891be895a960ccfb53a60b3915 100644 GIT binary patch delta 87 zcmaFD`kZyc3?_doPZ!4!iOb0e2?8uk3P&|K*q9Fw delta 84 zcmaFP`h<1E3??6QPZ!4!iOb0e2?8uk3P&|K*q9bP0l+XkK_SqL` From 25a2172c6b76cec5b9a178d86bc2450f722548dc Mon Sep 17 00:00:00 2001 From: George Paton Date: Tue, 1 Jul 2025 17:44:52 +1000 Subject: [PATCH 238/491] switch to LinkedHashMap for 23x performance improvement! --- .../java/com/hbm/uninos/UniNodespace.java | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/hbm/uninos/UniNodespace.java b/src/main/java/com/hbm/uninos/UniNodespace.java index dec2b96dc..e9aaebb71 100644 --- a/src/main/java/com/hbm/uninos/UniNodespace.java +++ b/src/main/java/com/hbm/uninos/UniNodespace.java @@ -2,6 +2,7 @@ package com.hbm.uninos; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.Set; import java.util.Map.Entry; @@ -21,16 +22,16 @@ import net.minecraft.world.World; * @author hbm */ public class UniNodespace { - + public static HashMap worlds = new HashMap(); public static Set activeNodeNets = new HashSet(); - + public static GenNode getNode(World world, int x, int y, int z, INetworkProvider type) { UniNodeWorld nodeWorld = worlds.get(world); if(nodeWorld != null) return nodeWorld.nodes.get(new Pair(new BlockPos(x, y, z), type)); return null; } - + public static void createNode(World world, GenNode node) { UniNodeWorld nodeWorld = worlds.get(world); if(nodeWorld == null) { @@ -39,21 +40,21 @@ public class UniNodespace { } nodeWorld.pushNode(node); } - + public static void destroyNode(World world, int x, int y, int z, INetworkProvider type) { GenNode node = getNode(world, x, y, z, type); if(node != null) { worlds.get(world).popNode(node); } } - + public static void updateNodespace() { - + for(World world : MinecraftServer.getServer().worldServers) { UniNodeWorld nodeWorld = worlds.get(world); if(nodeWorld == null) continue; - + for(Entry, GenNode> entry : nodeWorld.nodes.entrySet()) { GenNode node = entry.getValue(); INetworkProvider provider = entry.getKey().getValue(); @@ -63,19 +64,19 @@ public class UniNodespace { } } } - + updateNetworks(); } - + private static void updateNetworks() { for(NodeNet net : activeNodeNets) net.resetTrackers(); //reset has to be done before everything else for(NodeNet net : activeNodeNets) net.update(); } - + /** Goes over each connection point of the given node, tries to find neighbor nodes and to join networks with them */ private static void checkNodeConnection(World world, GenNode node, INetworkProvider provider) { - + for(DirPos con : node.connections) { GenNode conNode = getNode(world, con.getX(), con.getY(), con.getZ(), provider); // get whatever neighbor node intersects with that connection if(conNode != null) { // if there is a node at that place @@ -85,10 +86,10 @@ public class UniNodespace { } } } - + if(node.net == null || !node.net.isValid()) provider.provideNetwork().joinLink(node); } - + /** Checks if the node can be connected to given the DirPos, skipSideCheck will ignore the DirPos' direction value */ public static boolean checkConnection(GenNode connectsTo, DirPos connectFrom, boolean skipSideCheck) { for(DirPos revCon : connectsTo.connections) { @@ -98,10 +99,10 @@ public class UniNodespace { } return false; } - + /** Links two nodes with different or potentially no networks */ private static void connectToNode(GenNode origin, GenNode connection) { - + if(origin.hasValidNet() && connection.hasValidNet()) { // both nodes have nets, but the nets are different (previous assumption), join networks if(origin.net.links.size() > connection.net.links.size()) { origin.net.joinNetworks(connection.net); @@ -114,18 +115,18 @@ public class UniNodespace { origin.net.joinLink(connection); } } - + public static class UniNodeWorld { - - public HashMap, GenNode> nodes = new HashMap(); - + + public HashMap, GenNode> nodes = new LinkedHashMap<>(); + /** Adds a node at all its positions to the nodespace */ public void pushNode(GenNode node) { for(BlockPos pos : node.positions) { nodes.put(new Pair(pos, node.networkProvider), node); } } - + /** Removes the specified node from all positions from nodespace */ public void popNode(GenNode node) { if(node.net != null) node.net.destroy(); From 58da6f154e8e3c358156fa61f4cd6d2f29cde539 Mon Sep 17 00:00:00 2001 From: George Paton Date: Tue, 1 Jul 2025 17:46:33 +1000 Subject: [PATCH 239/491] move door to faster network serialization, remove now unused door sync packet --- .../com/hbm/interfaces/IAnimatedDoor.java | 6 - src/main/java/com/hbm/interfaces/IDoor.java | 24 --- .../java/com/hbm/packet/PacketDispatcher.java | 2 - .../toclient/TEDoorAnimationPacket.java | 77 ------- .../hbm/tileentity/TileEntityDoorGeneric.java | 197 ++++++++---------- 5 files changed, 87 insertions(+), 219 deletions(-) delete mode 100644 src/main/java/com/hbm/interfaces/IAnimatedDoor.java delete mode 100644 src/main/java/com/hbm/interfaces/IDoor.java delete mode 100644 src/main/java/com/hbm/packet/toclient/TEDoorAnimationPacket.java diff --git a/src/main/java/com/hbm/interfaces/IAnimatedDoor.java b/src/main/java/com/hbm/interfaces/IAnimatedDoor.java deleted file mode 100644 index d097f6fe2..000000000 --- a/src/main/java/com/hbm/interfaces/IAnimatedDoor.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.hbm.interfaces; - -public interface IAnimatedDoor extends IDoor { - - public void handleNewState(byte state); -} diff --git a/src/main/java/com/hbm/interfaces/IDoor.java b/src/main/java/com/hbm/interfaces/IDoor.java deleted file mode 100644 index a0c539a28..000000000 --- a/src/main/java/com/hbm/interfaces/IDoor.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.hbm.interfaces; - -public interface IDoor { - - void open(); - void close(); - DoorState getState(); - void toggle(); - default boolean setTexture(String tex) { - return false; - } - default void setTextureState(byte tex) { } - - default boolean setSkinIndex(byte skinIndex) { - return false; - } - - enum DoorState { - CLOSED, - OPEN, - CLOSING, - OPENING - } -} diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index 21dd1fd2b..165664236 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -53,8 +53,6 @@ public class PacketDispatcher { wrapper.registerMessage(NBTControlPacket.Handler.class, NBTControlPacket.class, i++, Side.SERVER); //Packet to send for anvil recipes to be crafted wrapper.registerMessage(AnvilCraftPacket.Handler.class, AnvilCraftPacket.class, i++, Side.SERVER); - //Sends a funi text to display like a music disc announcement - wrapper.registerMessage(TEDoorAnimationPacket.Handler.class, TEDoorAnimationPacket.class, i++, Side.CLIENT); //Does ExVNT standard player knockback wrapper.registerMessage(ExplosionKnockbackPacket.Handler.class, ExplosionKnockbackPacket.class, i++, Side.CLIENT); //just go fuck yourself already diff --git a/src/main/java/com/hbm/packet/toclient/TEDoorAnimationPacket.java b/src/main/java/com/hbm/packet/toclient/TEDoorAnimationPacket.java deleted file mode 100644 index 3511f0d07..000000000 --- a/src/main/java/com/hbm/packet/toclient/TEDoorAnimationPacket.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.hbm.packet.toclient; - -import com.hbm.interfaces.IAnimatedDoor; - -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; -import net.minecraft.tileentity.TileEntity; - -public class TEDoorAnimationPacket implements IMessage { - - public int x, y, z; - public byte state; - public byte skinIndex; - public byte texture; - - public TEDoorAnimationPacket() { - } - - public TEDoorAnimationPacket(int x, int y, int z, byte state) { - this(x, y, z, state, (byte) 0, (byte) -1); - } - - public TEDoorAnimationPacket(int x, int y, int z, byte state, byte skinIndex, byte tex) { - this.x = x; - this.y = y; - this.z = z; - this.state = state; - this.skinIndex = skinIndex; - this.texture = tex; - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - state = buf.readByte(); - skinIndex = buf.readByte(); - if(buf.readableBytes() == 1){ - texture = buf.readByte(); - } - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - buf.writeByte(state); - buf.writeByte(skinIndex); - if(texture != -1){ - buf.writeByte(texture); - } - } - - public static class Handler implements IMessageHandler { - - @Override - @SideOnly(Side.CLIENT) - public IMessage onMessage(TEDoorAnimationPacket m, MessageContext ctx) { - - TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z); - if(te instanceof IAnimatedDoor){ - ((IAnimatedDoor) te).handleNewState(m.state); - ((IAnimatedDoor) te).setSkinIndex(m.skinIndex); - ((IAnimatedDoor) te).setTextureState(m.texture); - } - - return null; - } - } -} diff --git a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java index d05ac0843..9b8751d05 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java +++ b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java @@ -6,25 +6,22 @@ import java.util.Set; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.generic.BlockDoorGeneric; -import com.hbm.interfaces.IAnimatedDoor; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toclient.TEDoorAnimationPacket; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.machine.TileEntityLockableBase; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.Rotation; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAnimatedDoor { +public class TileEntityDoorGeneric extends TileEntityLockableBase { //0: closed, 1: open, 2: closing, 3: opening public byte state = 0; @@ -39,9 +36,9 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn private AudioWrapper audio; private AudioWrapper audio2; - + @Override - public void updateEntity(){ + public void updateEntity() { if(state == 3) { openTicks++; if(openTicks >= getDoorType().timeToOpen()) { @@ -55,39 +52,39 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } if(!worldObj.isRemote) { - + BlockPos pos = new BlockPos(this); - + int[][] ranges = getDoorType().getDoorOpenRanges(); ForgeDirection dir = ForgeDirection.getOrientation(getBlockMetadata() - BlockDummyable.offset); - + if(state == 3) { - + for(int i = 0; i < ranges.length; i++) { - + int[] range = ranges[i]; BlockPos startPos = new BlockPos(range[0], range[1], range[2]); float time = getDoorType().getDoorRangeOpenTime(openTicks, i); - + for(int j = 0; j < Math.abs(range[3]); j++) { - + if((float)j / (Math.abs(range[3] - 1)) > time) break; - + for(int k = 0; k < range[4]; k++) { BlockPos add = new BlockPos(0, 0, 0); - switch(range[5]){ + switch(range[5]) { case 0: add = new BlockPos(0, k, (int)Math.signum(range[3]) * j); break; case 1: add = new BlockPos(k, (int)Math.signum(range[3]) * j, 0); break; case 2: add = new BlockPos((int)Math.signum(range[3]) * j, k, 0); break; } - + Rotation r = Rotation.getBlockRotation(dir); if(dir == Library.POS_X || dir == Library.NEG_X) r = r.add(Rotation.CLOCKWISE_180); - + BlockPos finalPos = startPos.add(add).rotate(r).add(pos); - + if(finalPos.equals(pos)) { this.shouldUseBB = false; } else { @@ -96,24 +93,24 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } } } - - } else if(state == 2){ - + + } else if(state == 2) { + for(int i = 0; i < ranges.length; i++) { - + int[] range = ranges[i]; BlockPos startPos = new BlockPos(range[0], range[1], range[2]); float time = getDoorType().getDoorRangeOpenTime(openTicks, i); - + for(int j = Math.abs(range[3])-1; j >= 0; j--) { - + if((float)j / (Math.abs(range[3] - 1)) < time) break; - + for(int k = 0; k < range[4]; k++) { BlockPos add = new BlockPos(0, 0, 0); - switch(range[5]){ + switch(range[5]) { case 0: add = new BlockPos(0, k, (int)Math.signum(range[3]) * j); break; case 1: add = new BlockPos(k, (int)Math.signum(range[3]) * j, 0); break; case 2: add = new BlockPos((int)Math.signum(range[3]) * j, k, 0); break; @@ -122,9 +119,9 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn Rotation r = Rotation.getBlockRotation(dir); if(dir == Library.POS_X || dir == Library.NEG_X) r = r.add(Rotation.CLOCKWISE_180); - + BlockPos finalPos = startPos.add(add).rotate(r).add(pos); - + if(finalPos.equals(pos)) { this.shouldUseBB = false; } else { @@ -140,19 +137,34 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn if(state == 2 && openTicks == 0) { state = 0; } - PacketDispatcher.wrapper.sendToAllAround(new TEDoorAnimationPacket(xCoord, yCoord, zCoord, state, skinIndex, (byte)(shouldUseBB ? 1 : 0)), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 100)); - - if(redstonePower == -1 && state == 1){ + + this.networkPackNT(100); + + if(redstonePower == -1 && state == 1) { tryToggle(-1); - } else if(redstonePower > 0 && state == 0){ + } else if(redstonePower > 0 && state == 0) { tryToggle(-1); } - if(redstonePower == -1){ + if(redstonePower == -1) { redstonePower = 0; } } } + @Override + public void serialize(ByteBuf buf) { + buf.writeByte(state); + buf.writeByte(skinIndex); + buf.writeBoolean(shouldUseBB); + } + + @Override + public void deserialize(ByteBuf buf) { + handleNewState(buf.readByte()); + setSkinIndex(buf.readByte()); + shouldUseBB = buf.readBoolean(); + } + @Override public void onChunkUnload() { if(audio != null) { @@ -164,20 +176,20 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn audio2 = null; } } - - public DoorDecl getDoorType(){ - + + public DoorDecl getDoorType() { + if(this.doorType == null && this.getBlockType() instanceof BlockDoorGeneric) this.doorType = ((BlockDoorGeneric)this.getBlockType()).type; - + return this.doorType; } - public boolean tryToggle(EntityPlayer player){ - + public boolean tryToggle(EntityPlayer player) { + if(this.isLocked() && player == null) return false; - - if(state == 0 && redstonePower > 0){ + + if(state == 0 && redstonePower > 0) { //Redstone "power locks" doors, just like minecraft iron doors return false; } @@ -194,8 +206,8 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } return false; } - - public boolean tryToggle(int passcode){ + + public boolean tryToggle(int passcode) { if(this.isLocked() && passcode != this.lock) return false; if(this.state == 0) { @@ -212,55 +224,28 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn return false; } - @Override - public void open(){ - if(state == 0) - toggle(); - } - - @Override - public void close(){ - if(state == 1) - toggle(); - } - - @Override - public DoorState getState(){ - return DoorState.values()[state]; - } - - @Override - public void toggle(){ - if(state == 0) { - state = 3; - } else if(state == 1) { - state = 2; - } - } - - @Override @SideOnly(Side.CLIENT) - public void handleNewState(byte state){ - + public void handleNewState(byte state) { + if(this.state != state) { DoorDecl doorType = getDoorType(); - if(this.state == 0 && state == 3){ // Door transitioning to open + if(this.state == 0 && state == 3) { // Door transitioning to open if(audio != null) { audio.stopSound(); audio.setKeepAlive(0); } - if(doorType.getOpenSoundLoop() != null){ + if(doorType.getOpenSoundLoop() != null) { audio = MainRegistry.proxy.getLoopedSound(doorType.getOpenSoundLoop(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); audio.startSound(); } - if(doorType.getOpenSoundStart() != null){ + if(doorType.getOpenSoundStart() != null) { worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundStart(), doorType.getSoundVolume(), 1F, false); } - if(doorType.getSoundLoop2() != null){ + if(doorType.getSoundLoop2() != null) { if(audio2 != null) audio2.stopSound(); audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); @@ -268,21 +253,21 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } } - if(this.state == 1 && state == 2){ // Door transitioning to closed + if(this.state == 1 && state == 2) { // Door transitioning to closed if(audio != null) { audio.stopSound(); } - if(doorType.getCloseSoundLoop() != null){ + if(doorType.getCloseSoundLoop() != null) { audio = MainRegistry.proxy.getLoopedSound(doorType.getCloseSoundLoop(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); audio.startSound(); } - if(doorType.getCloseSoundStart() != null){ + if(doorType.getCloseSoundStart() != null) { worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundStart(), doorType.getSoundVolume(), 1F, false); } - if(doorType.getSoundLoop2() != null){ + if(doorType.getSoundLoop2() != null) { if(audio2 != null) audio2.stopSound(); audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); @@ -290,47 +275,39 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } } - if(state == 1 || state == 0){ // Door finished any transition - if(audio != null){ + if(state == 1 || state == 0) { // Door finished any transition + if(audio != null) { audio.stopSound(); audio = null; } - if(audio2 != null){ + if(audio2 != null) { audio2.stopSound(); audio2 = null; } } - if(this.state == 3 && state == 1){ // Door finished transitioning to open - if(doorType.getOpenSoundEnd() != null){ + if(this.state == 3 && state == 1) { // Door finished transitioning to open + if(doorType.getOpenSoundEnd() != null) { worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundEnd(), doorType.getSoundVolume(), 1F, false); } } - if(this.state == 2 && state == 0){ // Door finished transitioning to closed - if(doorType.getCloseSoundEnd() != null){ + if(this.state == 2 && state == 0) { // Door finished transitioning to closed + if(doorType.getCloseSoundEnd() != null) { worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundEnd(), doorType.getSoundVolume(), 1F, false); } } - - - this.state = state; - if(state > 1) - animStartTime = System.currentTimeMillis(); - } - } - //Ah yes piggy backing on this packet - @Override - public void setTextureState(byte tex){ - shouldUseBB = tex > 0; + + this.state = state; + if(state > 1) animStartTime = System.currentTimeMillis(); + } } public int getSkinIndex() { return skinIndex; } - @Override public boolean setSkinIndex(byte skinIndex) { if(!getDoorType().hasSkins()) return false; @@ -342,12 +319,12 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } @Override - public AxisAlignedBB getRenderBoundingBox(){ + public AxisAlignedBB getRenderBoundingBox() { return INFINITE_EXTENT_AABB; } @Override - public double getMaxRenderDistanceSquared(){ + public double getMaxRenderDistanceSquared() { return 65536D; } @@ -388,14 +365,14 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } tag.setTag("activatedBlocks", activatedBlocks); } - + @Override - public void validate(){ + public void validate() { super.validate(); } - + @Override - public void invalidate(){ + public void invalidate() { super.invalidate(); if(audio != null) { audio.stopSound(); @@ -412,16 +389,16 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn BlockPos pos = new BlockPos(x, y, z); boolean powered = worldObj.isBlockIndirectlyGettingPowered(x, y, z); boolean contained = activatedBlocks.contains(pos); - if(!contained && powered){ + if(!contained && powered) { activatedBlocks.add(pos); - if(redstonePower == -1){ + if(redstonePower == -1) { redstonePower = 0; } redstonePower++; - } else if(contained && !powered){ + } else if(contained && !powered) { activatedBlocks.remove(pos); redstonePower--; - if(redstonePower == 0){ + if(redstonePower == 0) { redstonePower = -1; } } From 90ab38dc441a1deaece1a6ce8e2f3b10e45e9844 Mon Sep 17 00:00:00 2001 From: Justnightheron Date: Tue, 1 Jul 2025 16:58:23 +0800 Subject: [PATCH 240/491] =?UTF-8?q?=E2=99=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/zh_CN.lang | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 9f5d39f26..2fa299904 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5021,7 +5021,6 @@ tile.floodlight.name=电力泛光灯 tile.fluid_duct.name=通用流体管道 tile.fluid_duct_box.name=通用流体管道(方形) tile.fluid_duct_exhaust.name=排气管 -tile.fluid_duct_paintable_block_exhaust.name=具有涂装性的排气管 tile.fluid_duct_gauge.name=流量计管 tile.fluid_duct_gauge.desc=显示每个游戏刻在管网有多少流体移动的管道$由桶或罐连接的分离网络被视为一个共享网络。 tile.fluid_duct_neo.name=通用流体管道 @@ -5155,7 +5154,6 @@ tile.ladder_steel.name=钢制梯子 tile.ladder_sturdy.name=坚固木头制梯子 tile.ladder_titanium.name=钛制梯子 tile.ladder_tungsten.name=钨制梯子 -tile.trapdoor_steel.name=钢制活板门 tile.lamp_demon.name=恶魔核心灯 tile.lamp_tritium_blue_off.name=蓝色氚灯 tile.lamp_tritium_blue_on.name=蓝色氚灯 @@ -5194,8 +5192,8 @@ tile.machine_boiler_off.name=锅炉 tile.machine_catalytic_cracker.name=催化裂化塔 tile.machine_catalytic_reformer.name=催化重整器 tile.machine_centrifuge.name=离心机 -tile.machine_chemfac.name=大型化工厂 -tile.machine_chemplant.name=化工厂 +tile.machine_chemfac.name=大型化工厂(遗留) +tile.machine_chemplant.name=化工厂(遗留) tile.machine_chungus.name=“利维坦”巨型汽轮机 tile.machine_chungus.desc=效率: 85%% tile.machine_coal_off.name=火力发电机 @@ -5812,7 +5810,6 @@ tool.ability.centrifuge=自动离心 tool.ability.crystallizer=自动结晶 tool.ability.explosion=爆破 tool.ability.hammer=范围挖掘 -tool.ability.flat_hammer=平坦區域採礦 tool.ability.luck=时运 tool.ability.mercury=水银提取 tool.ability.midas=点石成金 @@ -6089,8 +6086,14 @@ tile.fan.falloffOn=风扇功率随距离增加而减小 tile.fan.falloffOff=稳定的风扇功率 tile.glass_polarized.name=偏光玻璃 tile.machine_autosaw.suspended=暂停 -tile.machine_chemical_plant.name=化工厂二代 : 电子布加洛 +tile.machine_chemical_plant.name=化工厂 hbm.key.ability=循环工具能力 hbm.key.abilityAlt=配置工具能力 hbm.key.toggleMagnet=开关磁铁 upgrade.speed=工作速度 %s +container.machineChemicalFactory=大型化工厂 +item.rangefinder.name=测距仪 +tile.fluid_duct_paintable_block_exhaust.name=可涂漆排气管 +tile.machine_chemical_factory.name=大型化工厂 +tile.machine_chemical_factory.desc=可处理四个配方的化工厂。$配方处理速度更快。$但也需要消耗更多电量。$需要水来运行。$会产生低压蒸汽。 +tool.ability.hammer_flat=平整表面 From c55c8c5da1539bd9fd868815aa474febdb666479 Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 1 Jul 2025 15:57:56 +0200 Subject: [PATCH 241/491] the moon is cheese that makes you trip balls --- changelog | 74 +++--------------- gradle.properties | 2 +- .../entity/effect/EntityFireLingering.java | 4 + .../logic/EntityExplosionChunkloading.java | 2 +- .../entity/logic/EntityNukeExplosionMK3.java | 4 + .../entity/logic/EntityNukeExplosionMK5.java | 1 + .../entity/missile/EntityMissileBaseNT.java | 4 +- .../entity/missile/EntityMissileCustom.java | 3 +- .../entity/missile/EntityMissileShuttle.java | 3 +- .../entity/missile/EntityMissileStealth.java | 3 +- .../entity/missile/EntityMissileTier0.java | 26 +++--- .../entity/missile/EntityMissileTier1.java | 13 +-- .../entity/missile/EntityMissileTier2.java | 13 +-- .../entity/missile/EntityMissileTier3.java | 11 +-- .../entity/missile/EntityMissileTier4.java | 20 ++--- .../com/hbm/explosion/ExplosionNukeSmall.java | 3 +- .../java/com/hbm/extprop/HbmLivingProps.java | 3 + .../com/hbm/handler/EntityEffectHandler.java | 8 ++ .../inventory/recipes/AmmoPressRecipes.java | 4 + .../recipes/CrystallizerRecipes.java | 3 + .../inventory/recipes/PedestalRecipes.java | 11 ++- .../recipes/loader/GenericRecipes.java | 2 +- src/main/java/com/hbm/items/ItemEnums.java | 3 +- .../weapon/sedna/factory/GunFactory.java | 2 +- .../sedna/factory/GunFactoryClient.java | 1 + .../weapon/sedna/factory/LegoClient.java | 20 +++++ .../weapon/sedna/factory/XFactory35800.java | 33 +++++++- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../com/hbm/main/ModEventHandlerClient.java | 7 +- .../hbm/particle/ParticleFlamethrower.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../items/ammo_secret.folly_sm_alt.png | Bin 0 -> 296 bytes .../textures/items/chunk_ore.moonstone.png | Bin 0 -> 313 bytes 34 files changed, 165 insertions(+), 126 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_secret.folly_sm_alt.png create mode 100644 src/main/resources/assets/hbm/textures/items/chunk_ore.moonstone.png diff --git a/changelog b/changelog index bb000ef7e..609ce9fcc 100644 --- a/changelog +++ b/changelog @@ -1,70 +1,14 @@ ## Added -* New chemical factory - * New form factor, uses a smaller 5x5 footprint - * Only does four recipes instead of eight - * Double base speed, but also double power draw - * Three upgrade slots, upgrades follow the same rules as on the new chemplant - * Upgrades stack with the double base speed - * Stackable! - * Water consumption rate is fixed at 100mB/t for each active recipe - * Has a dedicated coolant line, so that the coolant water doesn't get used up by recipes - * Coolant line has a tooltip which should make it clear that the machine uses water and produces LPS - * Also has sound, unlike the old chemical factory - * Output fluids are now automatically sent to input tanks, at a rate of up to 50mB/t for somewhat fair fluid sharing - * This means that a chemical factory can make hydrogen peroxide, sulfuric acid and nitric acid, and the only fluid input needed is water -* Paintable exhaust pipe - * Full block exhaust pipe that behaves like paintable cables and ducts -* Rangefinder - * A simple tool for checking the distance to a block - * Is now used as the base ingredient for long range target designatory, artillery remotes and airstrike designators +* Steel trapdoor + * When open with a ladder below it, it too will act like a ladder ## Changed -* Updated chinese and ukrainian localizations -* The DNT suit now has a damage threshold of 1,000 -* Compressed biomass now has a nice cube shape -* The new chemical plant's indicator lights are now functional -* The new chemical plant can now use upgrades -* Reeds now drop sticks when broken -* Switching the recipe in the new chemplant now annihilates residual fluid that is not overwritten by the new recipe - * I don't know why people wanted this, but here you go -* The alternate recipe for oxyhydrogen now uses compressed air instead of nothing -* Improved threaded Mk5, should be a smidge faster now -* Spires no longer progress phases on peaceful difficulty -* Spires now have a 20% chance of coming with instructions -* New chemical plant now has sound -* Old chemical plant and factory have been renamed and their recipes removed -* The new recipe selector no longer changes recipe instantly on click, rather as soon as the selector GUI is closed. This should prevent issues when misclicking, which would destroy buffered fluids -* The memespoon is now safe(tm) - * Instead of using a bugged instakill implementation, a fall distance of >2 now deals 50 extra melee damage - * Instead of blowing up like a nuke with a fall distance of >20, it now explodes similarly to a non-HE artillery grenade. This deals 150 damage in an AoE, has armor piercing properties and is, like the original functionality, still lethal to the user -* The fuel port on the rotary furnace now has a tooltip showing that it can be used for automation -* Shredders will now prioritize NTM items when automatically generating recipes - * The priority for what mods' items should be chosen can be configured -* Mass storage units' stockpiles can now be directly accessed by ME systems -* Inserters can now be suspended by applying a redstone signal -* The legendary variant of the auto shotgun is no longer a simple reskin, it now has a completely unique model and animations - * Added alcoholism -* Open doors can now be interacted through -* Area abilities on tools now drop all mined blocks in the center -* Tools with AoE now come with the new "flat AoE" ability, which is the same but the area is only 1 block tall -* Atomic airstrike now requires a control unit -* Parallelized explosions have been temporarily disabled, regardless of config option, explosions will use the previous system +* Updated chinese localization +* Improved performance for many nodespace operations +* .35 can now use a new ammo type +* Balefire mini nukes are now craftable ## Fixed -* Chemical plant ports. For real this time. -* Fixed cable and pipe gauges returning the incomplete delta second value for OC and ROR readers -* Fixed new chemical plant not saving power values to disk -* Fixed laser rifle scope texture being missing -* Potentially fixed shift clicking issue with the new chemical plant -* Fixed blowtorch having a minimum gas requirement of 1,000mB despite only using 250mB -* The gas turbine now uses audio with a 20 tick timeout, fixing a rare issue where the loop gets stuck and never ends -* Potentially fixed a dupe caused by using InventoryBogoSorter in combination with crates -* Rapidly spinning dyx should no longer have a state leak that would rotate lighting of unrelated TESRs with it -* Fixed issue where mining strange stone with silk touch ability would cause a desync. It also now drops cobblestone, as if silk touch wasn't active at all -* Fixed issue where applying a filter to a mask that doesn't support certain protection types would permanently remove those types from the filter until the game is restarted -* Fixed InventoryBogoSorter being able to move held crates -* Fixed tier 2 pickaxes mining depth rock causing a desync with the depth rock not actually being broken -* Replaced paintabble cables in the lighthouse with regular ones, fixing an issue where the paint would ID shift -* Fixed light blocks being considered solid for NPC pathfinding -* Fixed issue regarding locked slots when using crates -* Fixed MK3 explosions crashing when spawned with invalid size or when not being deserialized correctly +* Fixed chemical plant recipe config defaulting to an output chance of 0% +* Potentially fixed an issue where chunks aren't properly force loaded when a nuclear explosion spawns, causing missiles to not work most of the time +* Fixed taint-tipped missile not correctly spawning taint most of the time \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index da72d22ff..ba4279e7d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5377 +mod_build_number=5378 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/entity/effect/EntityFireLingering.java b/src/main/java/com/hbm/entity/effect/EntityFireLingering.java index 1aef970e4..4eb1eac76 100644 --- a/src/main/java/com/hbm/entity/effect/EntityFireLingering.java +++ b/src/main/java/com/hbm/entity/effect/EntityFireLingering.java @@ -20,6 +20,8 @@ public class EntityFireLingering extends Entity { public static int TYPE_DIESEL = 0; public static int TYPE_BALEFIRE = 1; public static int TYPE_PHOSPHORUS = 2; + public static int TYPE_OXY = 3; + public static int TYPE_BLACK = 4; public int maxAge = 150; public EntityFireLingering(World world) { @@ -75,6 +77,7 @@ public class EntityFireLingering extends Entity { if(this.getType() == this.TYPE_DIESEL) if(props.fire < 60) props.fire = 60; if(this.getType() == this.TYPE_PHOSPHORUS) if(props.fire < 300) props.fire = 300; if(this.getType() == this.TYPE_BALEFIRE) if(props.balefire < 100) props.balefire = 100; + if(this.getType() == this.TYPE_BLACK) if(props.blackFire < 200) props.blackFire = 200; else props.blackFire += 5; } else { e.setFire(4); } @@ -92,6 +95,7 @@ public class EntityFireLingering extends Entity { if(this.getType() == this.TYPE_DIESEL) FlameCreator.composeEffectClient(worldObj, x, down.yCoord, z, FlameCreator.META_FIRE); if(this.getType() == this.TYPE_PHOSPHORUS) FlameCreator.composeEffectClient(worldObj, x, down.yCoord, z, FlameCreator.META_FIRE); if(this.getType() == this.TYPE_BALEFIRE) FlameCreator.composeEffectClient(worldObj, x, down.yCoord, z, FlameCreator.META_BALEFIRE); + if(this.getType() == this.TYPE_BLACK) FlameCreator.composeEffectClient(worldObj, x, down.yCoord, z, FlameCreator.META_BLACK); } } } diff --git a/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java b/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java index 91b4e4eb9..eae135e54 100644 --- a/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java +++ b/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java @@ -44,7 +44,7 @@ public abstract class EntityExplosionChunkloading extends Entity implements IChu } public void clearChunkLoader() { - if(!worldObj.isRemote && loaderTicket != null && loadedChunk != null) { + if(!worldObj.isRemote && loaderTicket != null) { ForgeChunkManager.releaseTicket(loaderTicket); this.loaderTicket = null; } diff --git a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK3.java b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK3.java index df4eae71d..1f2e64316 100644 --- a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK3.java +++ b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK3.java @@ -259,6 +259,10 @@ public class EntityNukeExplosionMK3 extends EntityExplosionChunkloading { break; } } + + if(!entity.isDead) { + entity.loadChunk((int) Math.floor(x / 16D), (int) Math.floor(z / 16D)); + } return entity; } diff --git a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java index 06480aa21..cabe50118 100644 --- a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java +++ b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java @@ -159,6 +159,7 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { mk5.speed = (int)Math.ceil(100000 / mk5.strength); mk5.setPosition(x, y, z); mk5.length = mk5.strength / 2; + mk5.loadChunk((int) Math.floor(x / 16D), (int) Math.floor(z / 16D)); return mk5; } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java b/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java index c35497bce..6da5ec5a8 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java @@ -281,12 +281,12 @@ public abstract class EntityMissileBaseNT extends EntityThrowableInterp implemen @Override protected void onImpact(MovingObjectPosition mop) { if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) { - this.onImpact(); + this.onMissileImpact(mop); this.setDead(); } } - public abstract void onImpact(); + public abstract void onMissileImpact(MovingObjectPosition mop); public abstract List getDebris(); public abstract ItemStack getDebrisRareDrop(); public void cluster() { } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java b/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java index 0bfe4efb6..70546d978 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileCustom.java @@ -25,6 +25,7 @@ import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -161,7 +162,7 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo } @Override - public void onImpact() { //TODO: demolish this steaming pile of shit + public void onMissileImpact(MovingObjectPosition mop) { //TODO: demolish this steaming pile of shit ItemCustomMissilePart part = (ItemCustomMissilePart) Item.getItemById(this.dataWatcher.getWatchableObjectInt(9)); diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java b/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java index 0205a13f2..5cfea36a6 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileShuttle.java @@ -15,6 +15,7 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; public class EntityMissileShuttle extends EntityMissileBaseNT { @@ -28,7 +29,7 @@ public class EntityMissileShuttle extends EntityMissileBaseNT { } @Override - public void onImpact() { + public void onMissileImpact(MovingObjectPosition mop) { ExplosionNT explosion = new ExplosionNT(worldObj, null, this.posX + 0.5F, this.posY + 0.5F, this.posZ + 0.5F, 20.0F).overrideResolution(64); explosion.atttributes.add(ExAttrib.NOSOUND); explosion.atttributes.add(ExAttrib.NOPARTICLE); diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileStealth.java b/src/main/java/com/hbm/entity/missile/EntityMissileStealth.java index 0dc2528aa..7827c3ad9 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileStealth.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileStealth.java @@ -10,6 +10,7 @@ import com.hbm.particle.helper.ExplosionCreator; import com.hbm.items.ModItems; import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; public class EntityMissileStealth extends EntityMissileBaseNT { @@ -27,7 +28,7 @@ public class EntityMissileStealth extends EntityMissileBaseNT { @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_stealth); } @Override public boolean canBeSeenBy(Object radar) { return false; } - @Override public void onImpact() { this.explodeStandard(20F, 24, false); ExplosionCreator.composeEffectStandard(worldObj, posX, posY, posZ); } + @Override public void onMissileImpact(MovingObjectPosition mop) { this.explodeStandard(20F, 24, false); ExplosionCreator.composeEffectStandard(worldObj, posX, posY, posZ); } @Override public ItemStack getDebrisRareDrop() { return DictFrame.fromOne(ModItems.powder_ash, EnumAshType.MISC); } } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier0.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier0.java index 315f7c30b..f1ce3a4bb 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier0.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier0.java @@ -16,11 +16,13 @@ import com.hbm.inventory.material.Mats; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; +import com.hbm.world.WorldUtil; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; public abstract class EntityMissileTier0 extends EntityMissileBaseNT { @@ -49,7 +51,7 @@ public abstract class EntityMissileTier0 extends EntityMissileBaseNT { @Override public ItemStack getDebrisRareDrop() { return null; } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_test); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { int x = (int) Math.floor(posX); int y = (int) Math.floor(posY); int z = (int) Math.floor(posZ); @@ -80,7 +82,7 @@ public abstract class EntityMissileTier0 extends EntityMissileBaseNT { public static class EntityMissileMicro extends EntityMissileTier0 { public EntityMissileMicro(World world) { super(world); } public EntityMissileMicro(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { ExplosionNukeSmall.explode(worldObj, posX, posY + 0.5, posZ, ExplosionNukeSmall.PARAMS_HIGH); } + @Override public void onMissileImpact(MovingObjectPosition mop) { ExplosionNukeSmall.explode(worldObj, posX, posY + 0.5, posZ, ExplosionNukeSmall.PARAMS_HIGH); } @Override public ItemStack getDebrisRareDrop() { return DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_HIGH); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_micro); } } @@ -88,10 +90,10 @@ public abstract class EntityMissileTier0 extends EntityMissileBaseNT { public static class EntityMissileSchrabidium extends EntityMissileTier0 { public EntityMissileSchrabidium(World world) { super(world); } public EntityMissileSchrabidium(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { EntityNukeExplosionMK3 ex = EntityNukeExplosionMK3.statFacFleija(worldObj, posX, posY, posZ, BombConfig.aSchrabRadius); if(!ex.isDead) { - worldObj.spawnEntityInWorld(ex); + WorldUtil.loadAndSpawnEntityInWorld(ex); EntityCloudFleija cloud = new EntityCloudFleija(this.worldObj, BombConfig.aSchrabRadius); cloud.posX = this.posX; cloud.posY = this.posY; @@ -106,7 +108,7 @@ public abstract class EntityMissileTier0 extends EntityMissileBaseNT { public static class EntityMissileBHole extends EntityMissileTier0 { public EntityMissileBHole(World world) { super(world); } public EntityMissileBHole(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 1.5F, true); EntityBlackHole bl = new EntityBlackHole(this.worldObj, 1.5F); bl.posX = this.posX; @@ -121,15 +123,15 @@ public abstract class EntityMissileTier0 extends EntityMissileBaseNT { public static class EntityMissileTaint extends EntityMissileTier0 { public EntityMissileTaint(World world) { super(world); } public EntityMissileTaint(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { - this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 10.0F, true); + @Override public void onMissileImpact(MovingObjectPosition mop) { + this.worldObj.createExplosion(this, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 5.0F, true); for(int i = 0; i < 100; i++) { - int a = rand.nextInt(11) + (int) this.posX - 5; - int b = rand.nextInt(11) + (int) this.posY - 5; - int c = rand.nextInt(11) + (int) this.posZ - 5; + int a = rand.nextInt(11) + (int) mop.blockX - 5; + int b = rand.nextInt(11) + (int) mop.blockY - 5; + int c = rand.nextInt(11) + (int) mop.blockZ - 5; Block block = worldObj.getBlock(a, b, c); if(block.isNormalCube() && !block.isAir(worldObj, a, b, c)) { - worldObj.setBlock(a, b, c, ModBlocks.taint, rand.nextInt(3) + 4, 2); + worldObj.setBlock(a, b, c, ModBlocks.taint, 0, 2); } } } @@ -140,7 +142,7 @@ public abstract class EntityMissileTier0 extends EntityMissileBaseNT { public static class EntityMissileEMP extends EntityMissileTier0 { public EntityMissileEMP(World world) { super(world); } public EntityMissileEMP(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { ExplosionNukeGeneric.empBlast(worldObj, (int)posX, (int)posY, (int)posZ, 50); EntityEMPBlast wave = new EntityEMPBlast(worldObj, 50); wave.posX = posX; diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java index 538eb439e..f140d1f26 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java @@ -10,6 +10,7 @@ import com.hbm.particle.helper.ExplosionCreator; import api.hbm.entity.IRadarDetectableNT; import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; public abstract class EntityMissileTier1 extends EntityMissileBaseNT { @@ -33,7 +34,7 @@ public abstract class EntityMissileTier1 extends EntityMissileBaseNT { public static class EntityMissileGeneric extends EntityMissileTier1 { public EntityMissileGeneric(World world) { super(world); } public EntityMissileGeneric(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { this.explodeStandard(15F, 24, false); ExplosionCreator.composeEffectSmall(worldObj, posX, posY, posZ); } + @Override public void onMissileImpact(MovingObjectPosition mop) { this.explodeStandard(15F, 24, false); ExplosionCreator.composeEffectSmall(worldObj, posX, posY, posZ); } @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_generic_small); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_generic); } } @@ -41,7 +42,7 @@ public abstract class EntityMissileTier1 extends EntityMissileBaseNT { public static class EntityMissileDecoy extends EntityMissileTier1 { public EntityMissileDecoy(World world) { super(world); } public EntityMissileDecoy(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { worldObj.newExplosion(this, posX, posY, posZ, 4F, false, false); } + @Override public void onMissileImpact(MovingObjectPosition mop) { worldObj.newExplosion(this, posX, posY, posZ, 4F, false, false); } @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.ingot_steel); } @Override public String getUnlocalizedName() { return "radar.target.tier4"; } @Override public int getBlipLevel() { return IRadarDetectableNT.TIER4; } @@ -51,7 +52,7 @@ public abstract class EntityMissileTier1 extends EntityMissileBaseNT { public static class EntityMissileIncendiary extends EntityMissileTier1 { public EntityMissileIncendiary(World world) { super(world); } public EntityMissileIncendiary(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { this.explodeStandard(15F, 24, true); ExplosionCreator.composeEffectSmall(worldObj, posX, posY, posZ); } + @Override public void onMissileImpact(MovingObjectPosition mop) { this.explodeStandard(15F, 24, true); ExplosionCreator.composeEffectSmall(worldObj, posX, posY, posZ); } @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_incendiary_small); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_incendiary); } } @@ -59,11 +60,11 @@ public abstract class EntityMissileTier1 extends EntityMissileBaseNT { public static class EntityMissileCluster extends EntityMissileTier1 { public EntityMissileCluster(World world) { super(world); } public EntityMissileCluster(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); this.isCluster = true; } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 5F, true); ExplosionChaos.cluster(this.worldObj, (int)this.posX, (int)this.posY, (int)this.posZ, 25, 100); } - @Override public void cluster() { this.onImpact(); } + @Override public void cluster() { this.onMissileImpact(null); } @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_cluster_small); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_cluster); } } @@ -71,7 +72,7 @@ public abstract class EntityMissileTier1 extends EntityMissileBaseNT { public static class EntityMissileBunkerBuster extends EntityMissileTier1 { public EntityMissileBunkerBuster(World world) { super(world); } public EntityMissileBunkerBuster(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { for(int i = 0; i < 15; i++) this.worldObj.createExplosion(this, this.posX, this.posY - i, this.posZ, 5F, true); ExplosionLarge.spawnParticles(worldObj, this.posX, this.posY, this.posZ, 5); ExplosionLarge.spawnShrapnels(worldObj, this.posX, this.posY, this.posZ, 5); diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier2.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier2.java index c2b752e5d..25b1d2fda 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier2.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier2.java @@ -11,6 +11,7 @@ import com.hbm.particle.helper.ExplosionCreator; import api.hbm.entity.IRadarDetectableNT; import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; public abstract class EntityMissileTier2 extends EntityMissileBaseNT { @@ -42,7 +43,7 @@ public abstract class EntityMissileTier2 extends EntityMissileBaseNT { public static class EntityMissileStrong extends EntityMissileTier2 { public EntityMissileStrong(World world) { super(world); } public EntityMissileStrong(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { this.explodeStandard(30F, 32, false); ExplosionCreator.composeEffectStandard(worldObj, posX, posY, posZ); } + @Override public void onMissileImpact(MovingObjectPosition mop) { this.explodeStandard(30F, 32, false); ExplosionCreator.composeEffectStandard(worldObj, posX, posY, posZ); } @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_generic_medium); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_strong); } } @@ -50,7 +51,7 @@ public abstract class EntityMissileTier2 extends EntityMissileBaseNT { public static class EntityMissileIncendiaryStrong extends EntityMissileTier2 { public EntityMissileIncendiaryStrong(World world) { super(world); } public EntityMissileIncendiaryStrong(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { this.explodeStandard(30F, 32, true); ExplosionCreator.composeEffectStandard(worldObj, posX, posY, posZ); ExplosionChaos.flameDeath(this.worldObj, (int)((float)this.posX + 0.5F), (int)((float)this.posY + 0.5F), (int)((float)this.posZ + 0.5F), 25); @@ -62,11 +63,11 @@ public abstract class EntityMissileTier2 extends EntityMissileBaseNT { public static class EntityMissileClusterStrong extends EntityMissileTier2 { public EntityMissileClusterStrong(World world) { super(world); } public EntityMissileClusterStrong(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); this.isCluster = true; } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 15F, true); ExplosionChaos.cluster(this.worldObj, (int)this.posX, (int)this.posY, (int)this.posZ, 50, 100); } - @Override public void cluster() { this.onImpact(); } + @Override public void cluster() { this.onMissileImpact(null); } @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_cluster_medium); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_cluster_strong); } } @@ -74,7 +75,7 @@ public abstract class EntityMissileTier2 extends EntityMissileBaseNT { public static class EntityMissileBusterStrong extends EntityMissileTier2 { public EntityMissileBusterStrong(World world) { super(world); } public EntityMissileBusterStrong(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { for(int i = 0; i < 20; i++) this.worldObj.createExplosion(this, this.posX, this.posY - i, this.posZ, 7.5F, true); ExplosionLarge.spawnParticles(worldObj, this.posX, this.posY, this.posZ, 8); ExplosionLarge.spawnShrapnels(worldObj, this.posX, this.posY, this.posZ, 8); @@ -87,7 +88,7 @@ public abstract class EntityMissileTier2 extends EntityMissileBaseNT { public static class EntityMissileEMPStrong extends EntityMissileTier2 { public EntityMissileEMPStrong(World world) { super(world); } public EntityMissileEMPStrong(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { EntityEMP emp = new EntityEMP(worldObj); emp.posX = posX; emp.posY = posY; diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier3.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier3.java index de02e1aa2..fcff48108 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier3.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier3.java @@ -12,6 +12,7 @@ import com.hbm.particle.helper.ExplosionCreator; import api.hbm.entity.IRadarDetectableNT; import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -58,7 +59,7 @@ public abstract class EntityMissileTier3 extends EntityMissileBaseNT { public static class EntityMissileBurst extends EntityMissileTier3 { public EntityMissileBurst(World world) { super(world); } public EntityMissileBurst(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { this.explodeStandard(50F, 48, false); ExplosionCreator.composeEffectLarge(worldObj, posX, posY, posZ); } @@ -69,7 +70,7 @@ public abstract class EntityMissileTier3 extends EntityMissileBaseNT { public static class EntityMissileInferno extends EntityMissileTier3 { public EntityMissileInferno(World world) { super(world); } public EntityMissileInferno(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { this.explodeStandard(50F, 48, true); ExplosionCreator.composeEffectLarge(worldObj, posX, posY, posZ); ExplosionChaos.burn(this.worldObj, (int)this.posX, (int)this.posY, (int)this.posZ, 10); @@ -82,11 +83,11 @@ public abstract class EntityMissileTier3 extends EntityMissileBaseNT { public static class EntityMissileRain extends EntityMissileTier3 { public EntityMissileRain(World world) { super(world); } public EntityMissileRain(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); this.isCluster = true; } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 25F, true); ExplosionChaos.cluster(this.worldObj, (int)this.posX, (int)this.posY, (int)this.posZ, 100, 100); } - @Override public void cluster() { this.onImpact(); } + @Override public void cluster() { this.onMissileImpact(null); } @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_cluster_large); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_rain); } } @@ -94,7 +95,7 @@ public abstract class EntityMissileTier3 extends EntityMissileBaseNT { public static class EntityMissileDrill extends EntityMissileTier3 { public EntityMissileDrill(World world) { super(world); } public EntityMissileDrill(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { for(int i = 0; i < 30; i++) { ExplosionNT explosion = new ExplosionNT(worldObj, this, this.posX, this.posY - i, this.posZ, 10F); explosion.addAllAttrib(ExAttrib.ERRODE); diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java index dfdfe9b8e..7d8b1c91b 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java @@ -9,9 +9,11 @@ import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.explosion.ExplosionLarge; import com.hbm.items.ModItems; +import com.hbm.world.WorldUtil; import api.hbm.entity.IRadarDetectableNT; import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -63,8 +65,8 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { public static class EntityMissileNuclear extends EntityMissileTier4 { public EntityMissileNuclear(World world) { super(world); } public EntityMissileNuclear(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { - this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius, posX, posY, posZ)); + @Override public void onMissileImpact(MovingObjectPosition mop) { + WorldUtil.loadAndSpawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius, posX, posY, posZ)); EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, BombConfig.missileRadius); } @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_nuclear); } @@ -74,8 +76,8 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { public static class EntityMissileMirv extends EntityMissileTier4 { public EntityMissileMirv(World world) { super(world); } public EntityMissileMirv(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { - worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ)); + @Override public void onMissileImpact(MovingObjectPosition mop) { + WorldUtil.loadAndSpawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ)); EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2); } @Override public List getDebris() { @@ -93,7 +95,7 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { public static class EntityMissileVolcano extends EntityMissileTier4 { public EntityMissileVolcano(World world) { super(world); } public EntityMissileVolcano(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { + @Override public void onMissileImpact(MovingObjectPosition mop) { ExplosionLarge.explode(worldObj, posX, posY, posZ, 10.0F, true, true, true); for(int x = -1; x <= 1; x++) for(int y = -1; y <= 1; y++) for(int z = -1; z <= 1; z++) worldObj.setBlock((int)Math.floor(posX + x), (int)Math.floor(posY + y), (int)Math.floor(posZ + z), ModBlocks.volcanic_lava_block); worldObj.setBlock((int)Math.floor(posX), (int)Math.floor(posY), (int)Math.floor(posZ), ModBlocks.volcano_core); @@ -105,8 +107,8 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { public static class EntityMissileDoomsday extends EntityMissileTier4 { public EntityMissileDoomsday(World world) { super(world); } public EntityMissileDoomsday(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { - this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ).moreFallout(100)); + @Override public void onMissileImpact(MovingObjectPosition mop) { + WorldUtil.loadAndSpawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ).moreFallout(100)); EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2); } @Override public List getDebris() { return null; } @@ -118,8 +120,8 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { public static class EntityMissileDoomsdayRusted extends EntityMissileDoomsday { public EntityMissileDoomsdayRusted(World world) { super(world); } public EntityMissileDoomsdayRusted(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } - @Override public void onImpact() { - this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius, posX, posY, posZ).moreFallout(100)); + @Override public void onMissileImpact(MovingObjectPosition mop) { + WorldUtil.loadAndSpawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius, posX, posY, posZ).moreFallout(100)); EntityNukeTorex.statFacStandard(worldObj, posX, posY, posZ, BombConfig.missileRadius); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_doomsday_rusted); } diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java b/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java index 0d405dba7..c1c35ceac 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java @@ -7,6 +7,7 @@ import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.handler.threading.PacketThreading; import com.hbm.main.MainRegistry; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.world.WorldUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; @@ -33,7 +34,7 @@ import net.minecraft.world.World; if(params.shrapnelCount > 0) ExplosionLarge.spawnShrapnels(world, posX, posY, posZ, params.shrapnelCount); if(params.miniNuke && !params.safe) new ExplosionNT(world, null, posX, posY, posZ, params.blastRadius).addAllAttrib(params.explosionAttribs).overrideResolution(params.resolution).explode(); if(params.killRadius > 0) ExplosionNukeGeneric.dealDamage(world, posX, posY, posZ, params.killRadius); - if(!params.miniNuke) world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, (int) params.blastRadius, posX, posY, posZ)); + if(!params.miniNuke) WorldUtil.loadAndSpawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, (int) params.blastRadius, posX, posY, posZ)); if(params.miniNuke) { float radMod = params.radiationLevel / 3F; diff --git a/src/main/java/com/hbm/extprop/HbmLivingProps.java b/src/main/java/com/hbm/extprop/HbmLivingProps.java index 9201c7181..aa6356078 100644 --- a/src/main/java/com/hbm/extprop/HbmLivingProps.java +++ b/src/main/java/com/hbm/extprop/HbmLivingProps.java @@ -51,6 +51,7 @@ public class HbmLivingProps implements IExtendedEntityProperties { public int fire; public int phosphorus; public int balefire; + public int blackFire; private List contamination = new ArrayList(); public HbmLivingProps(EntityLivingBase entity) { @@ -320,6 +321,7 @@ public class HbmLivingProps implements IExtendedEntityProperties { props.setInteger("hfr_fire", fire); props.setInteger("hfr_phosphorus", phosphorus); props.setInteger("hfr_balefire", balefire); + props.setInteger("hfr_blackfire", blackFire); props.setInteger("hfr_cont_count", this.contamination.size()); @@ -347,6 +349,7 @@ public class HbmLivingProps implements IExtendedEntityProperties { fire = props.getInteger("hfr_fire"); phosphorus = props.getInteger("hfr_phosphorus"); balefire = props.getInteger("hfr_balefire"); + blackFire = props.getInteger("hfr_blackfire"); int cont = props.getInteger("hfr_cont_count"); diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 7ae2acaab..dcbfcb5b6 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -668,6 +668,14 @@ public class EntityEffectHandler { FlameCreator.composeEffect(entity.worldObj, x - living.width / 2 + living.width * rand.nextDouble(), y + rand.nextDouble() * living.height, z - living.width / 2 + living.width * rand.nextDouble(), FlameCreator.META_BALEFIRE); } + if(props.blackFire > 0) { + props.blackFire--; + if((living.ticksExisted + living.getEntityId()) % 10 == 0) living.worldObj.playSoundEffect(living.posX, living.posY + living.height / 2, living.posZ, "random.fizz", 1F, 1.5F + rand.nextFloat() * 0.5F); + ContaminationUtil.contaminate(living, HazardType.RADIATION, ContaminationType.CREATIVE, 5F); + if((living.ticksExisted + living.getEntityId()) % 10 == 0) living.attackEntityFrom(DamageSource.onFire, 10F); + FlameCreator.composeEffect(entity.worldObj, x - living.width / 2 + living.width * rand.nextDouble(), y + rand.nextDouble() * living.height, z - living.width / 2 + living.width * rand.nextDouble(), FlameCreator.META_BLACK); + } + if(props.fire > 0 || props.phosphorus > 0 || props.balefire > 0) if(!entity.isEntityAlive()) ConfettiUtil.decideConfetti(living, DamageSource.onFire); } diff --git a/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java b/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java index c5a96c458..1327ae459 100644 --- a/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java @@ -431,6 +431,10 @@ public class AmmoPressRecipes extends SerializableRecipe { null, he.copy(8), null, null, sBig.copy(2), null, null, sPlate.copy(4), null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_BALEFIRE, 1), + null, new ComparableStack(ModItems.egg_balefire_shard), null, + null, shell, null, + null, null , null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_HOOK, 16), null, steel, null, diff --git a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java index e4b8907ba..4902d2f06 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java @@ -24,6 +24,7 @@ import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums.EnumAshType; +import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ItemEnums.EnumPlantType; import com.hbm.items.ItemEnums.EnumTarType; import com.hbm.items.ModItems; @@ -240,6 +241,8 @@ public class CrystallizerRecipes extends SerializableRecipe { if(dustCinnabar != null && !dustCinnabar.isEmpty()) { registerRecipe(CINNABAR.dust(), new CrystallizerRecipe(new ItemStack(ModItems.cinnebar), utilityTime), new FluidStack(Fluids.PEROXIDE, 50)); } + + registerRecipe(new ComparableStack(ModBlocks.moon_turf, 16), new CrystallizerRecipe(new ItemStack(ModItems.chunk_ore, 1, EnumChunkType.MOONSTONE.ordinal()), 1200)); if(!IMCCrystallizer.buffer.isEmpty()) { recipes.putAll(IMCCrystallizer.buffer); diff --git a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java index 76d22d7c8..b643ac3b7 100644 --- a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java @@ -15,6 +15,7 @@ import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.recipes.loader.SerializableRecipe; +import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.food.ItemConserve.EnumFoodType; import com.hbm.items.ModItems; @@ -94,9 +95,9 @@ public class PedestalRecipes extends SerializableRecipe { .extra(PedestalExtraCondition.GOOD_KARMA).set(1)); register(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 1, EnumAmmoSecret.FOLLY_SM.ordinal()), - new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1), - new ComparableStack(ModItems.powder_magic), new ComparableStack(ModBlocks.moon_turf), new ComparableStack(ModItems.powder_magic), - new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1)) + new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1), + new ComparableStack(ModItems.powder_magic), new ComparableStack(ModItems.chunk_ore, 1, EnumChunkType.MOONSTONE), new ComparableStack(ModItems.powder_magic), + new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1)) .extra(PedestalExtraCondition.FULL_MOON).set(1)); register(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 1, EnumAmmoSecret.FOLLY_NUKE.ordinal()), new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1), @@ -107,6 +108,10 @@ public class PedestalRecipes extends SerializableRecipe { null, null, null, null, new ComparableStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR), null, null, null, null).set(1)); + register(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 10, EnumAmmoSecret.P35_800_BL.ordinal()), + null, null, null, + null, new ComparableStack(ModItems.item_secret, 3, EnumSecretType.ABERRATOR), null, + null, null, null).set(1)); } public static void register(PedestalRecipe recipe) { diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 027bb8bb3..6cb020bd6 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -175,7 +175,7 @@ public abstract class GenericRecipes extends Serializab // a weight of 0 means this output is not part of a weighted output public ItemStack stack; - public float chance; + public float chance = 1F; public ChanceOutput() { super(0); } // for deserialization public ChanceOutput(ItemStack stack) { this(stack, 1F, 0); } diff --git a/src/main/java/com/hbm/items/ItemEnums.java b/src/main/java/com/hbm/items/ItemEnums.java index d92c7840b..6ca3c76af 100644 --- a/src/main/java/com/hbm/items/ItemEnums.java +++ b/src/main/java/com/hbm/items/ItemEnums.java @@ -53,7 +53,8 @@ public class ItemEnums { public static enum EnumChunkType { RARE, MALACHITE, - CRYOLITE + CRYOLITE, + MOONSTONE } public static enum EnumAchievementType { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index f389b40a1..bbf976df7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -139,7 +139,7 @@ public class GunFactory { public static enum EnumAmmoSecret { FOLLY_SM, FOLLY_NUKE, M44_EQUESTRIAN, G12_EQUESTRIAN, BMG50_EQUESTRIAN, - P35_800, BMG50_BLACK + P35_800, BMG50_BLACK, P35_800_BL } public static enum EnumModTest { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 8e9d40aa5..753de9167 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -224,6 +224,7 @@ public class GunFactoryClient { folly_nuke.setRenderer(LegoClient.RENDER_BIG_NUKE); p35800.setRendererBeam(LegoClient.RENDER_CRACKLE); + p35800_bl.setRendererBeam(LegoClient.RENDER_BLACK_LIGHTNING); ct_hook.setRenderer(LegoClient.RENDER_CT_HOOK); ct_mortar.setRenderer(LegoClient.RENDER_CT_MORTAR); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java index 11d4b4012..b49292c78 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java @@ -378,6 +378,26 @@ public class LegoClient { GL11.glPopMatrix(); RenderArcFurnace.fullbright(false); }; + + public static BiConsumer RENDER_BLACK_LIGHTNING = (bullet, interp) -> { + + RenderArcFurnace.fullbright(true); + double age = MathHelper.clamp_double(1D - ((double) bullet.ticksExisted - 2 + interp) / (double) bullet.getBulletConfig().expires, 0, 1); + double col = MathHelper.clamp_double(1D - ((double) bullet.ticksExisted + interp) / (double) bullet.getBulletConfig().expires, 0, 1); + + GL11.glPushMatrix(); + GL11.glRotatef(180 - bullet.rotationYaw, 0, 1F, 0); + GL11.glRotatef(-bullet.rotationPitch - 90, 1F, 0, 0); + + double scale = 5D; + GL11.glScaled(age * scale, 1, age * scale); + GL11.glTranslated(0, bullet.beamLength, 0); + GL11.glRotatef(-90, 0, 0, 1); + renderBulletStandard(Tessellator.instance, 0x4C3093, 0x000000, bullet.beamLength, true); + + GL11.glPopMatrix(); + RenderArcFurnace.fullbright(false); + }; public static BiConsumer RENDER_LASER_RED = (bullet, interp) -> { renderStandardLaser(bullet, interp, 0x80, 0x15, 0x15); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java index 588f54b0d..ddd435107 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java @@ -3,6 +3,9 @@ package com.hbm.items.weapon.sedna.factory; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import com.hbm.entity.effect.EntityFireLingering; +import com.hbm.entity.projectile.EntityBulletBeamBase; +import com.hbm.extprop.HbmLivingProps; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.Crosshair; @@ -20,22 +23,44 @@ import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; public class XFactory35800 { public static BulletConfig p35800; + public static BulletConfig p35800_bl; + + public static BiConsumer LAMBDA_BLACK_IMPACT = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY) { + Entity hit = mop.entityHit; + if(hit instanceof EntityLivingBase) { + HbmLivingProps.getData((EntityLivingBase) hit).blackFire += 200; + } + } + if(mop.typeOfHit == mop.typeOfHit.BLOCK) { + EntityFireLingering fire = new EntityFireLingering(bullet.worldObj).setArea(7.5F, 2F).setDuration(200).setType(EntityFireLingering.TYPE_BLACK); + fire.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); + bullet.worldObj.spawnEntityInWorld(fire); + } + + BulletConfig.LAMBDA_STANDARD_BEAM_HIT.accept(bullet, mop); + }; public static void init() { - + p35800 = new BulletConfig().setItem(EnumAmmoSecret.P35_800).setArmorPiercing(0.5F).setThresholdNegation(50F).setBeam().setSpread(0.0F).setLife(3).setRenderRotations(false) .setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0xCEB78E).register("35-800")).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); + p35800_bl = new BulletConfig().setItem(EnumAmmoSecret.P35_800_BL).setArmorPiercing(0.5F).setThresholdNegation(50F).setBeam().setSpread(0.0F).setLife(3).setRenderRotations(false) + .setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0xCEB78E).register("35-800")).setOnBeamImpact(LAMBDA_BLACK_IMPACT); ModItems.gun_aberrator = new ItemGunBaseNT(WeaponQuality.SECRET, new GunConfig() .dura(2_000).draw(10).inspect(26).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(100F).delay(13).dry(21).reload(51).sound("hbm:weapon.fire.aberrator", 1.0F, 1.0F) - .mag(new MagazineFullReload(0, 5).addConfigs(p35800)) + .mag(new MagazineFullReload(0, 5).addConfigs(p35800, p35800_bl)) .offset(0.75, -0.0625 * 1.5, -0.1875) .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(LAMBDA_RECOIL_ABERRATOR)) .setupStandardConfiguration() @@ -46,7 +71,7 @@ public class XFactory35800 { new GunConfig().dura(2_000).draw(10).inspect(26).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(100F).spreadHipfire(0F).delay(13).dry(21).reload(51).sound("hbm:weapon.fire.aberrator", 1.0F, 1.0F) - .mag(new MagazineFullReload(0, 5).addConfigs(p35800)) + .mag(new MagazineFullReload(0, 5).addConfigs(p35800, p35800_bl)) .offset(0.75, -0.0625 * 1.5, 0.1875) .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(LAMBDA_RECOIL_ABERRATOR)) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) @@ -55,7 +80,7 @@ public class XFactory35800 { new GunConfig().dura(2_000).draw(10).inspect(26).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(100F).spreadHipfire(0F).delay(13).dry(21).reload(51).sound("hbm:weapon.fire.aberrator", 1.0F, 1.0F) - .mag(new MagazineFullReload(1, 5).addConfigs(p35800)) + .mag(new MagazineFullReload(1, 5).addConfigs(p35800, p35800_bl)) .offset(0.75, -0.0625 * 1.5, -0.1875) .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(LAMBDA_RECOIL_ABERRATOR)) .ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index f56883283..65c4c2319 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5377)"; + public static final String VERSION = "1.0.27 BETA (5378)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index aea94c19b..88a7441c7 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -923,9 +923,10 @@ public class ModEventHandlerClient { ItemFluidDuct.class ); - String prefix = "Slot "; - //int gunScale = 8; - int slotScale = 1; + String prefix = "Gun "; + int gunScale = 16; + int defaultScale = 1; + int slotScale = gunScale; boolean ignoreNonNTM = true; boolean onlyGuns = true; diff --git a/src/main/java/com/hbm/particle/ParticleFlamethrower.java b/src/main/java/com/hbm/particle/ParticleFlamethrower.java index 5477c95b7..2b665ef28 100644 --- a/src/main/java/com/hbm/particle/ParticleFlamethrower.java +++ b/src/main/java/com/hbm/particle/ParticleFlamethrower.java @@ -73,7 +73,7 @@ public class ParticleFlamethrower extends EntityFXRotating { tess.setColorRGBA_F(this.particleRed - add, this.particleGreen - add * 0.75F, this.particleBlue, this.particleAlpha); } else if(type == FlameCreator.META_BLACK) { this.particleAlpha = (float) (1 - ageScaled); - float add = (float) ageScaled * 4F - 1F; + float add = (float) ageScaled * 2F - 0.25F; tess.setColorRGBA_F(this.particleRed - add * 0.75F, this.particleGreen - add, this.particleBlue - add * 0.5F, this.particleAlpha); } else { this.particleAlpha = (float) Math.pow(1 - Math.min(ageScaled, 1), 0.5); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index c8e7ea0f8..a031be603 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1080,6 +1080,7 @@ item.ammo_secret.folly_sm.name=Silberne Kugel item.ammo_secret.g12_equestrian.name=Kaliber 12 Gleisnägel item.ammo_secret.m44_equestrian.name=.44 Magnum Schädelsprenger item.ammo_secret.p35_800.name=.35-800 V9 +item.ammo_secret.p35_800_bl.name=.35-800 V9 (Schwarzer Blitz) item.ammo_standard.b75.name=.75 Bolzen item.ammo_standard.b75_exp.name=.75 Bolzen (Explosiv) item.ammo_standard.b75_inc.name=.75 Bolzen (Brand) @@ -1614,6 +1615,7 @@ item.chopper_torso.name=Jagdschrauber Rumpf item.chopper_wing.name=Jagdschrauber Seitentragfläche item.chunk_ore.cryolite.name=Kryolithbrocken item.chunk_ore.malachite.name=Malachitbrocken +item.chunk_ore.moonstone.name=Mondstein item.chunk_ore.rare.name=Seltenerdenerz-Brocken item.cigarette.name=FFI-Markenzigarette item.cinnebar.name=Zinnober diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 448d48a01..74c5a343b 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1805,6 +1805,7 @@ item.ammo_secret.folly_sm.name=Silver Bullet item.ammo_secret.g12_equestrian.name=12 Gauge Railway Spike Shot item.ammo_secret.m44_equestrian.name=.44 Magnum Head-Exploder item.ammo_secret.p35_800.name=.35-800 V9 +item.ammo_secret.p35_800_bl.name=.35-800 V9 (Black Lightning) item.ammo_standard.b75.name=.75 Bolt item.ammo_standard.b75_exp.name=.75 Bolt (Explosive) item.ammo_standard.b75_inc.name=.75 Bolt (Incendiary) @@ -2389,6 +2390,7 @@ item.chopper_torso.name=Hunter Chopper Body item.chopper_wing.name=Hunter Chopper Wing item.chunk_ore.malachite.name=Malachite Chunk item.chunk_ore.rare.name=Rare Earth Ore Chunk +item.chunk_ore.moonstone.name=Moonstone item.chunk_ore.cryolite.name=Cryolite Chunk item.cigarette.name=FFI-Brand Cigarette item.cinnebar.name=Cinnabar diff --git a/src/main/resources/assets/hbm/textures/items/ammo_secret.folly_sm_alt.png b/src/main/resources/assets/hbm/textures/items/ammo_secret.folly_sm_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..0c15f038aab7932c4ae53fb59612d37555a197b9 GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfx1-}LWT@Rralgd{D(x|X)Y{weXKYkqM>bCo9=`JM*RmO69a#A7Muuu zp8j(6J;9|@jwYVkq;mYtZI;)&nu__3-4N4Sx<+4!fgzcva^8Epnu!by(^4Co8FFUu z3+*_nm{%ic6z~%3X^bE}LA45?;U0I%QruhvJ1& s*)7-Zv2Rz*y&a|b^kr4OQ{PSQ4I=Y-&+JM*1@tO|r>mdKI;Vst0LqJS_5c6? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/chunk_ore.moonstone.png b/src/main/resources/assets/hbm/textures/items/chunk_ore.moonstone.png new file mode 100644 index 0000000000000000000000000000000000000000..8f84820c9e7c86f6e8498c3b758722a07bb4ba02 GIT binary patch literal 313 zcmV-90mlA`P)3k1-v(t?*YKuB2NV=r49E&h}+)VLn);#%MzS(0Km3wSeE56Br$8Pt&`T;YOU=w zP4-Ha5X|#z8Dl7l0_(a)jm8)NfKn_SR z5}EX_~)(;Vb$8zwV1VFYF8A00000 LNkvXXu0mjf{ Date: Tue, 1 Jul 2025 20:11:19 -0400 Subject: [PATCH 242/491] disguises for the logic block --- .../hbm/blocks/generic/BlockWandSpawner.java | 65 ++++++++++++++++++- .../hbm/blocks/generic/DungeonSpawner.java | 51 +++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java index 0508002d7..6d4a6f8a3 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java @@ -16,14 +16,18 @@ import com.hbm.util.i18n.I18nUtil; import com.hbm.world.gen.INBTTileEntityTransformable; import com.hbm.world.gen.util.DungeonSpawnerActions; import com.hbm.world.gen.util.DungeonSpawnerConditions; +import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -91,6 +95,30 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT ((TileEntityWandSpawner)te).placedRotation = dir.ordinal(); } + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { + + ItemStack stack = player.getHeldItem(); + + if (stack != null && stack.getItem() instanceof ItemBlock && !player.isSneaking()) { + ItemBlock ib = (ItemBlock) stack.getItem(); + Block block = ib.field_150939_a; + + if (block.renderAsNormalBlock() && block != this) { + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityWandSpawner){ + TileEntityWandSpawner spawner = (TileEntityWandSpawner) tile; + spawner.disguise = block; + spawner.disguiseMeta = stack.getItemDamage() & 15; + return true; + } + } + } + return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); + } + @Override public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { TileEntity te = world.getTileEntity(x, y, z); @@ -132,10 +160,17 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT TileEntityWandSpawner spawner = (TileEntityWandSpawner) te; - List text = new ArrayList(); + List text = new ArrayList<>(); text.add("Action: " + spawner.actionID); text.add("Condition: " + spawner.conditionID); + String block; + if(spawner.disguise != null && spawner.disguise != Blocks.air) + block = I18nUtil.resolveKey(spawner.disguise.getUnlocalizedName() + ".name"); + else + block = "None"; + + text.add("Disguise Block: " + block); ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } @@ -167,9 +202,14 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT public int placedRotation; + Block disguise; + int disguiseMeta = -1; + public String actionID = "PHASE_ABERRATOR"; public String conditionID = "ABERRATOR"; + public boolean noDisguise; + @Override public void updateEntity() { if(!worldObj.isRemote) { @@ -202,6 +242,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT spawner.actionID = actionID; spawner.conditionID = conditionID; spawner.direction = ForgeDirection.getOrientation(placedRotation); + spawner.disguise = disguise; + spawner.disguiseMeta = disguiseMeta; } } @@ -217,6 +259,10 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT nbt.setString("actionID", actionID); nbt.setString("conditionID", conditionID); nbt.setInteger("rotation", placedRotation); + if(disguise != null){ + nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); + nbt.setInteger("disguiseMeta", disguiseMeta); + } } @Override @@ -225,6 +271,10 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT actionID = nbt.getString("actionID"); conditionID = nbt.getString("conditionID"); placedRotation = nbt.getInteger("rotation"); + if(nbt.hasKey("disguise")){ + disguise = Block.getBlockFromName(nbt.getString("disguise")); + disguiseMeta = nbt.getInteger("disguiseMeta"); + } } @Override @@ -232,6 +282,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT buf.writeInt(placedRotation); BufferUtil.writeString(buf, actionID); BufferUtil.writeString(buf, conditionID); + buf.writeInt(Block.getIdFromBlock(disguise)); + buf.writeInt(disguiseMeta); } @Override @@ -239,6 +291,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT placedRotation = buf.readInt(); actionID = BufferUtil.readString(buf); conditionID = BufferUtil.readString(buf); + disguise = Block.getBlockById(buf.readInt()); + disguiseMeta = buf.readInt(); } @Override @@ -246,6 +300,11 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT NBTTagCompound nbt = new NBTTagCompound(); nbt.setString("actionID", actionID); nbt.setString("conditionID", conditionID); + if(disguise != null){ + nbt.setString("disguise", disguise.getUnlocalizedName()); + nbt.setInteger("disguiseMeta", disguiseMeta); + } + return nbt; } @@ -253,6 +312,10 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { actionID = nbt.getString("actionID"); conditionID = nbt.getString("conditionID"); + if(nbt.hasKey("disguise")){ + disguise = Block.getBlockFromName(nbt.getString("disguise")); + disguiseMeta = nbt.getInteger("disguiseMeta"); + } } } } diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index 41fa907b5..bba6ebfe7 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -7,18 +7,29 @@ import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ModItems; +import com.hbm.util.BufferUtil; import com.hbm.world.gen.util.DungeonSpawnerActions; import com.hbm.world.gen.util.DungeonSpawnerConditions; import com.hbm.util.Vec3NT; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -33,11 +44,31 @@ public class DungeonSpawner extends BlockContainer { return new TileEntityDungeonSpawner(); } + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityDungeonSpawner){ + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) tile; + if(spawner.disguise != null){ + return spawner.disguise.getIcon(side, spawner.disguiseMeta); + } + } + + return super.getIcon(world, x, y, z, side); + } + + + public static class TileEntityDungeonSpawner extends TileEntity { public int phase = 0; public int timer = 0; + public Block disguise; + public int disguiseMeta; + public String conditionID = "ABERRATOR"; //actions always get called before conditions, use the phase timer in order to control behavior via condition public String actionID = "ABERRATOR"; @@ -77,6 +108,10 @@ public class DungeonSpawner extends BlockContainer { nbt.setString("conditionID", conditionID); nbt.setString("actionID", actionID); nbt.setInteger("direction", direction.ordinal()); + if(disguise != null){ + nbt.setInteger("disguiseMeta", disguiseMeta); + nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); + } } @Override @@ -85,6 +120,22 @@ public class DungeonSpawner extends BlockContainer { this.phase = nbt.getInteger("phase"); this.conditionID = nbt.getString("conditionID"); this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); + if(nbt.hasKey("disguise")){ + disguiseMeta = nbt.getInteger("disguiseMeta"); + disguise = Block.getBlockFromName(nbt.getString("disguise")); + } + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); } } From 3da96091da34b5087eb964d3957ee8c135119656 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 2 Jul 2025 16:50:20 +0200 Subject: [PATCH 243/491] flixes --- changelog | 15 ++----- .../java/com/hbm/entity/EntityMappings.java | 2 + .../handler/ability/IToolHarvestAbility.java | 4 +- .../com/hbm/handler/ability/ToolPreset.java | 44 +++++++++---------- src/main/java/com/hbm/main/MainRegistry.java | 2 +- .../TileEntityMachineChemicalPlant.java | 6 +++ .../java/com/hbm/util/AchievementHandler.java | 2 +- 7 files changed, 38 insertions(+), 37 deletions(-) diff --git a/changelog b/changelog index 609ce9fcc..dc8b91d49 100644 --- a/changelog +++ b/changelog @@ -1,14 +1,7 @@ -## Added -* Steel trapdoor - * When open with a ladder below it, it too will act like a ladder - ## Changed -* Updated chinese localization -* Improved performance for many nodespace operations -* .35 can now use a new ammo type -* Balefire mini nukes are now craftable +* The chemistry achievement now requires the new chemical plant +* The new chemical plant can now be used to upgrade the meteorite sword ## Fixed -* Fixed chemical plant recipe config defaulting to an output chance of 0% -* Potentially fixed an issue where chunks aren't properly force loaded when a nuclear explosion spawns, causing missiles to not work most of the time -* Fixed taint-tipped missile not correctly spawning taint most of the time \ No newline at end of file +* Fixed crash caused by breaking a tool while the fortune or silk touch ability is enabled +* Fixed NTM adding mob spawns to the mushroom island \ No newline at end of file diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 18ca656e5..324c67a97 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -31,6 +31,7 @@ import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EnumCreatureType; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.biome.BiomeGenBase.SpawnListEntry; +import net.minecraft.world.biome.BiomeGenMushroomIsland; import net.minecraftforge.common.BiomeDictionary; import net.minecraftforge.common.BiomeDictionary.Type; @@ -279,6 +280,7 @@ public class EntityMappings { for(BiomeGenBase biome : biomes) { if(biome == null) continue; + if(biome instanceof BiomeGenMushroomIsland) continue; List spawns = biome.getSpawnableList(typeOfCreature); diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index ee3027340..d76c30e33 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -88,7 +88,7 @@ public interface IToolHarvestAbility extends IBaseAbility { // Even if can be forced somehow, the player doesn't gain any // benefit from it. ItemStack stack = player.getHeldItem(); - EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); + if(stack != null) EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); } }; @@ -133,7 +133,7 @@ public interface IToolHarvestAbility extends IBaseAbility { // Even if can be forced somehow, the player doesn't gain any // benefit from it. ItemStack stack = player.getHeldItem(); - EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune); + if(stack != null) EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune); } }; diff --git a/src/main/java/com/hbm/handler/ability/ToolPreset.java b/src/main/java/com/hbm/handler/ability/ToolPreset.java index 7cc065478..1875f456c 100644 --- a/src/main/java/com/hbm/handler/ability/ToolPreset.java +++ b/src/main/java/com/hbm/handler/ability/ToolPreset.java @@ -27,32 +27,32 @@ public class ToolPreset { this.harvestAbilityLevel = harvestAbilityLevel; } - public ChatComponentText getMessage() { - if (isNone()) { - return ChatBuilder.start("[Tool ability deactivated]").color(EnumChatFormatting.GOLD).flush(); - } + public ChatComponentText getMessage() { + if(isNone()) { + return ChatBuilder.start("[Tool ability deactivated]").color(EnumChatFormatting.GOLD).flush(); + } - boolean hasArea = areaAbility != IToolAreaAbility.NONE; - boolean hasHarvest = harvestAbility != IToolHarvestAbility.NONE; - - ChatBuilder builder = ChatBuilder.start("[Enabled "); + boolean hasArea = areaAbility != IToolAreaAbility.NONE; + boolean hasHarvest = harvestAbility != IToolHarvestAbility.NONE; - if (hasArea) { - builder.nextTranslation(areaAbility.getName()); - builder.next(areaAbility.getExtension(areaAbilityLevel)); - } + ChatBuilder builder = ChatBuilder.start("[Enabled "); - if (hasArea && hasHarvest) { - builder.next(" + "); - } + if(hasArea) { + builder.nextTranslation(areaAbility.getName()); + builder.next(areaAbility.getExtension(areaAbilityLevel)); + } - if (hasHarvest) { - builder.nextTranslation(harvestAbility.getName()); - builder.next(harvestAbility.getExtension(harvestAbilityLevel)); - } - - return builder.colorAll(EnumChatFormatting.YELLOW).flush(); - } + if(hasArea && hasHarvest) { + builder.next(" + "); + } + + if(hasHarvest) { + builder.nextTranslation(harvestAbility.getName()); + builder.next(harvestAbility.getExtension(harvestAbilityLevel)); + } + + return builder.colorAll(EnumChatFormatting.YELLOW).flush(); + } public boolean isNone() { return areaAbility == IToolAreaAbility.NONE && harvestAbility == IToolHarvestAbility.NONE; diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index c4a5a3d4a..0d64ee670 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -717,7 +717,7 @@ public class MainRegistry { achBlastFurnace = new Achievement("achievement.blastFurnace", "blastFurnace", 1, 3, new ItemStack(ModBlocks.machine_difurnace_off), achBurnerPress).initIndependentStat().registerStat(); achAssembly = new Achievement("achievement.assembly", "assembly", 3, -1, new ItemStack(ModBlocks.machine_assembler), achBurnerPress).initIndependentStat().registerStat(); achSelenium = new Achievement("achievement.selenium", "selenium", 3, 2, ModItems.ingot_starmetal, achBurnerPress).initIndependentStat().setSpecial().registerStat(); - achChemplant = new Achievement("achievement.chemplant", "chemplant", 6, -1, new ItemStack(ModBlocks.machine_chemplant), achAssembly).initIndependentStat().registerStat(); + achChemplant = new Achievement("achievement.chemplant", "chemplant", 6, -1, new ItemStack(ModBlocks.machine_chemical_plant), achAssembly).initIndependentStat().registerStat(); achConcrete = new Achievement("achievement.concrete", "concrete", 6, -4, new ItemStack(ModBlocks.concrete), achChemplant).initIndependentStat().registerStat(); achPolymer = new Achievement("achievement.polymer", "polymer", 9, -1, ModItems.ingot_polymer, achChemplant).initIndependentStat().registerStat(); achDesh = new Achievement("achievement.desh", "desh", 9, 2, ModItems.ingot_desh, achChemplant).initIndependentStat().registerStat(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 838958668..2bb6584f8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -10,6 +10,7 @@ import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalPlant; +import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; @@ -113,6 +114,11 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem this.didProcess = this.chemplantModule.didProcess; if(this.chemplantModule.markDirty) this.markDirty(); + if(didProcess) { + if(slots[0] != null && slots[0].getItem() == ModItems.meteorite_sword_machined) + slots[0] = new ItemStack(ModItems.meteorite_sword_treated); + } + this.networkPackNT(100); } else { diff --git a/src/main/java/com/hbm/util/AchievementHandler.java b/src/main/java/com/hbm/util/AchievementHandler.java index 900509bfe..4ad24e8f4 100644 --- a/src/main/java/com/hbm/util/AchievementHandler.java +++ b/src/main/java/com/hbm/util/AchievementHandler.java @@ -20,7 +20,7 @@ public class AchievementHandler { craftingAchievements.put(new ComparableStack(ModItems.battery_potatos), MainRegistry.achPotato); craftingAchievements.put(new ComparableStack(ModBlocks.machine_press), MainRegistry.achBurnerPress); craftingAchievements.put(new ComparableStack(ModItems.rbmk_fuel_empty), MainRegistry.achRBMK); - craftingAchievements.put(new ComparableStack(ModBlocks.machine_chemplant), MainRegistry.achChemplant); + craftingAchievements.put(new ComparableStack(ModBlocks.machine_chemical_plant), MainRegistry.achChemplant); craftingAchievements.put(new ComparableStack(ModBlocks.concrete_smooth), MainRegistry.achConcrete); craftingAchievements.put(new ComparableStack(ModBlocks.concrete_asbestos), MainRegistry.achConcrete); craftingAchievements.put(new ComparableStack(ModItems.ingot_polymer), MainRegistry.achPolymer); From 49830020138562e63be71f52439d3236366addf7 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 3 Jul 2025 12:21:04 +0300 Subject: [PATCH 244/491] Fix ItemToolAbility bedrock breaking --- .../java/com/hbm/items/tool/ItemToolAbility.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index c731da461..e055c2b6b 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -292,14 +292,23 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro Block block = world.getBlock(x, y, z); int meta = world.getBlockMetadata(x, y, z); - if(!(canHarvestBlock(block, stack) || canShearBlock(block, stack, world, x, y, z)) || block == Blocks.bedrock || block == ModBlocks.stone_keyhole) + if(!( + canHarvestBlock(block, stack) || + canShearBlock(block, stack, world, x, y, z)) || + block.getPlayerRelativeBlockHardness(player, world, x, y, z) < 0 || + block == ModBlocks.stone_keyhole + ) return; Block refBlock = world.getBlock(refX, refY, refZ); float refStrength = ForgeHooks.blockStrength(refBlock, player, world, refX, refY, refZ); float strength = ForgeHooks.blockStrength(block, player, world, x, y, z); - if(!ForgeHooks.canHarvestBlock(block, player, meta) || refStrength / strength > 10f || refBlock.getPlayerRelativeBlockHardness(player, world, refX, refY, refZ) < 0) + if( + !ForgeHooks.canHarvestBlock(block, player, meta) || + refStrength / strength > 10f || + refBlock.getPlayerRelativeBlockHardness(player, world, refX, refY, refZ) < 0 + ) return; BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(world, player.theItemInWorldManager.getGameType(), player, x, y, z); From ac45637bf6f12ca99b143cbdddeb67af67089200 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 3 Jul 2025 12:26:46 +0300 Subject: [PATCH 245/491] Just a bit more null checks --- .../java/com/hbm/handler/ability/IToolHarvestAbility.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index d76c30e33..7fe16423e 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -37,7 +37,8 @@ public interface IToolHarvestAbility extends IBaseAbility { if(skipDefaultDrops) { // Emulate the block breaking without drops world.setBlockToAir(x, y, z); - player.getHeldItem().damageItem(1, player); + ItemStack stack = player.getHeldItem(); + if(stack != null) stack.damageItem(1, player); } else if(player instanceof EntityPlayerMP) { // Break the block conventionally ItemToolAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); @@ -78,7 +79,7 @@ public interface IToolHarvestAbility extends IBaseAbility { @Override public void preHarvestAll(int level, World world, EntityPlayer player) { ItemStack stack = player.getHeldItem(); - EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); + if(stack != null) EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); } @Override @@ -123,7 +124,7 @@ public interface IToolHarvestAbility extends IBaseAbility { @Override public void preHarvestAll(int level, World world, EntityPlayer player) { ItemStack stack = player.getHeldItem(); - EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, powerAtLevel[level]); + if(stack != null) EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, powerAtLevel[level]); } @Override From 6282bd028d477608775302b45228634a71cfab60 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 3 Jul 2025 15:01:24 +0200 Subject: [PATCH 246/491] ough --- changelog | 5 +- .../hbm/commands/CommandReloadRecipes.java | 3 + .../hbm/inventory/FluidContainerRegistry.java | 89 +++++++++---------- .../gui/LoadingScreenRendererNT.java | 2 +- .../recipes/loader/SerializableRecipe.java | 2 +- 5 files changed, 53 insertions(+), 48 deletions(-) diff --git a/changelog b/changelog index dc8b91d49..0b4c4ebc0 100644 --- a/changelog +++ b/changelog @@ -1,7 +1,10 @@ ## Changed * The chemistry achievement now requires the new chemical plant * The new chemical plant can now be used to upgrade the meteorite sword +* Fluid containers are now re-registered when using `/ntmreload` which should correctly generate fluid container items for freshly added custom fluids +* Recipe configs will no longer try to parse null value recipes, meaing that trailing commas in a recipe config will no longer create an error ## Fixed * Fixed crash caused by breaking a tool while the fortune or silk touch ability is enabled -* Fixed NTM adding mob spawns to the mushroom island \ No newline at end of file +* Fixed NTM adding mob spawns to the mushroom island +# Fixed line break not working on the tip of the day \ No newline at end of file diff --git a/src/main/java/com/hbm/commands/CommandReloadRecipes.java b/src/main/java/com/hbm/commands/CommandReloadRecipes.java index 7b1942c2c..a07b43848 100644 --- a/src/main/java/com/hbm/commands/CommandReloadRecipes.java +++ b/src/main/java/com/hbm/commands/CommandReloadRecipes.java @@ -1,6 +1,7 @@ package com.hbm.commands; import com.hbm.config.ItemPoolConfigJSON; +import com.hbm.inventory.FluidContainerRegistry; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.particle.helper.SkeletonCreator; @@ -27,7 +28,9 @@ public class CommandReloadRecipes extends CommandBase { @Override public void processCommand(ICommandSender sender, String[] args) { try { + FluidContainerRegistry.clearRegistry(); // we do this first so IFluidRegisterListener can go wild with the registry Fluids.reloadFluids(); + FluidContainerRegistry.register(); SerializableRecipe.initialize(); ItemPoolConfigJSON.initialize(); DamageResistanceHandler.init(); diff --git a/src/main/java/com/hbm/inventory/FluidContainerRegistry.java b/src/main/java/com/hbm/inventory/FluidContainerRegistry.java index c3f0e4afc..4bc72d64a 100644 --- a/src/main/java/com/hbm/inventory/FluidContainerRegistry.java +++ b/src/main/java/com/hbm/inventory/FluidContainerRegistry.java @@ -18,12 +18,18 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; public class FluidContainerRegistry { - - //TODO: continue incorporating hashmaps into this + + // TODO: continue incorporating hashmaps into this public static List allContainers = new ArrayList(); private static HashMap> containerMap = new HashMap>(); + public static void clearRegistry() { + allContainers.clear(); + containerMap.clear(); + } + public static void register() { + FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(Items.water_bucket), new ItemStack(Items.bucket), Fluids.WATER, 1000)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(Items.potionitem), new ItemStack(Items.glass_bottle), Fluids.WATER, 250)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(Items.lava_bucket), new ItemStack(Items.bucket), Fluids.LAVA, 1000)); @@ -59,34 +65,34 @@ public class FluidContainerRegistry { FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(Items.experience_bottle), new ItemStack(Items.glass_bottle), Fluids.XPJUICE, 100)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.can_mug), new ItemStack(ModItems.can_empty), Fluids.MUG, 100)); - + FluidType[] fluids = Fluids.getAll(); for(int i = 1; i < fluids.length; i++) { - + FluidType type = fluids[i]; int id = type.getID(); - + if(type.getContainer(CD_Canister.class) != null) FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.canister_full, 1, id), new ItemStack(ModItems.canister_empty), type, 1000)); if(type.getContainer(CD_Gastank.class) != null) FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.gas_full, 1, id), new ItemStack(ModItems.gas_empty), type, 1000)); - + if(type.hasNoContainer()) continue; - - if(type.isDispersable()){ - FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.disperser_canister, 1 , i), new ItemStack(ModItems.disperser_canister_empty), Fluids.fromID(i), 2000)); - FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.glyphid_gland, 1 , i), new ItemStack(ModItems.glyphid_gland_empty), Fluids.fromID(i), 4000)); + + if(type.isDispersable()) { + FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.disperser_canister, 1, i), new ItemStack(ModItems.disperser_canister_empty), Fluids.fromID(i), 2000)); + FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.glyphid_gland, 1, i), new ItemStack(ModItems.glyphid_gland_empty), Fluids.fromID(i), 4000)); } FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.fluid_tank_lead_full, 1, id), new ItemStack(ModItems.fluid_tank_lead_empty), type, 1000)); if(type.needsLeadContainer()) continue; - + FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.fluid_tank_full, 1, id), new ItemStack(ModItems.fluid_tank_empty), type, 1000)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.fluid_barrel_full, 1, id), new ItemStack(ModItems.fluid_barrel_empty), type, 16000)); } - + Compat.registerCompatFluidContainers(); } - + public static void registerContainer(FluidContainer con) { allContainers.add(con); OreDictionary.registerOre(con.type.getDict(con.content), con.fullContainer); @@ -103,51 +109,48 @@ public class FluidContainerRegistry { } public static FluidContainer getContainer(FluidType type, ItemStack stack) { - if(stack == null) - return null; - + if(stack == null) return null; + ItemStack sta = stack.copy(); sta.stackSize = 1; - if (!containerMap.containsKey(type)) + if(!containerMap.containsKey(type)) return null; - for (FluidContainer container : getContainers(type)) { - if (ItemStack.areItemStacksEqual(container.emptyContainer, sta) && ItemStack.areItemStackTagsEqual(container.emptyContainer, sta)) { + for(FluidContainer container : getContainers(type)) { + if(ItemStack.areItemStacksEqual(container.emptyContainer, sta) && ItemStack.areItemStackTagsEqual(container.emptyContainer, sta)) { return container; } } return null; } - + public static int getFluidContent(ItemStack stack, FluidType type) { - + if(stack == null) return 0; - + ItemStack sta = stack.copy(); sta.stackSize = 1; - if (!containerMap.containsKey(type)) + if(!containerMap.containsKey(type)) return 0; - + for(FluidContainer container : containerMap.get(type)) { if(ItemStack.areItemStacksEqual(container.fullContainer, sta) && ItemStack.areItemStackTagsEqual(container.fullContainer, sta)) return container.content; } - + return 0; } - + public static FluidType getFluidType(ItemStack stack) { - - if(stack == null) - return Fluids.NONE; - + if(stack == null) return Fluids.NONE; + ItemStack sta = stack.copy(); sta.stackSize = 1; - + for(FluidContainer container : allContainers) { if(ItemStack.areItemStacksEqual(container.fullContainer, sta) && ItemStack.areItemStackTagsEqual(container.fullContainer, sta)) return container.type; @@ -155,29 +158,26 @@ public class FluidContainerRegistry { return Fluids.NONE; } - + public static ItemStack getFullContainer(ItemStack stack, FluidType type) { - if(stack == null) - return null; - + if(stack == null) return null; + ItemStack sta = stack.copy(); sta.stackSize = 1; - if (!containerMap.containsKey(type)) - return null; + if(!containerMap.containsKey(type)) return null; for(FluidContainer container : containerMap.get(type)) { - if(ItemStack.areItemStacksEqual(container.emptyContainer, sta) && ItemStack.areItemStackTagsEqual(container.emptyContainer, sta)) + if(ItemStack.areItemStacksEqual(container.emptyContainer, sta) && ItemStack.areItemStackTagsEqual(container.emptyContainer, sta)) return container.fullContainer.copy(); } - + return null; } - + public static ItemStack getEmptyContainer(ItemStack stack) { - if(stack == null) - return null; - + if(stack == null) return null; + ItemStack sta = stack.copy(); sta.stackSize = 1; @@ -185,8 +185,7 @@ public class FluidContainerRegistry { if(ItemStack.areItemStacksEqual(container.fullContainer, sta) && ItemStack.areItemStackTagsEqual(container.fullContainer, sta)) return container.emptyContainer == null ? null : container.emptyContainer.copy(); } - + return null; } - } diff --git a/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java b/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java index d9dc5e676..8dd24c319 100644 --- a/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java +++ b/src/main/java/com/hbm/inventory/gui/LoadingScreenRendererNT.java @@ -166,7 +166,7 @@ public class LoadingScreenRendererNT extends LoadingScreenRenderer { this.mc.fontRenderer.drawStringWithShadow(this.currentlyDisplayedText, (width - this.mc.fontRenderer.getStringWidth(this.currentlyDisplayedText)) / 2, height / 2 - 4 - 16, 16777215); this.mc.fontRenderer.drawStringWithShadow(this.message, (width - this.mc.fontRenderer.getStringWidth(this.message)) / 2, height / 2 - 4 + 8, 16777215); - String[] frags = this.tipOfTheDay.split("$"); + String[] frags = this.tipOfTheDay.split("\\$"); for(int i = 0; i < frags.length; i++) { String frag = frags[i]; this.mc.fontRenderer.drawStringWithShadow(EnumChatFormatting.YELLOW + frag, (width - this.mc.fontRenderer.getStringWidth(frag)) / 2, height / 2 - 4 - 60 + i * 10, 16777215); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index a89e19b26..ec30b16b3 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -237,7 +237,7 @@ public abstract class SerializableRecipe { JsonObject json = gson.fromJson(reader, JsonObject.class); JsonArray recipes = json.get("recipes").getAsJsonArray(); for(JsonElement recipe : recipes) { - this.readRecipe(recipe); + if(recipe != null) this.readRecipe(recipe); } } From edd952ec6afd60052410b3d791ee1548c90961d9 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:09:09 -0400 Subject: [PATCH 247/491] Interactions for the logic block --- .../hbm/blocks/generic/BlockWandSpawner.java | 32 +++++- .../hbm/blocks/generic/DungeonSpawner.java | 34 +++++- .../world/gen/util/DungeonSpawnerActions.java | 105 ++++++++++++++---- .../gen/util/DungeonSpawnerConditions.java | 7 +- .../gen/util/DungeonSpawnerInteractions.java | 80 +++++++++++++ 5 files changed, 230 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java index 6d4a6f8a3..b6c042838 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java @@ -16,6 +16,7 @@ import com.hbm.util.i18n.I18nUtil; import com.hbm.world.gen.INBTTileEntityTransformable; import com.hbm.world.gen.util.DungeonSpawnerActions; import com.hbm.world.gen.util.DungeonSpawnerConditions; +import com.hbm.world.gen.util.DungeonSpawnerInteractions; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -146,6 +147,16 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT spawner.conditionID = conditionNames.get(indexC); + return true; + case HAND_DRILL: + List interactionNames = DungeonSpawnerInteractions.getInteractionNames(); + int indexI = interactionNames.indexOf(spawner.interactionID); + + indexI += player.isSneaking() ? -1 : 1; + indexI = MathHelper.clamp_int(indexI, 0, interactionNames.size() - 1); + + spawner.interactionID = interactionNames.get(indexI); + return true; default: return false; @@ -163,6 +174,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT List text = new ArrayList<>(); text.add("Action: " + spawner.actionID); text.add("Condition: " + spawner.conditionID); + text.add("Interaction: " + (spawner.interactionID != null ? spawner.interactionID : "None")); + String block; if(spawner.disguise != null && spawner.disguise != Blocks.air) @@ -171,6 +184,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT block = "None"; text.add("Disguise Block: " + block); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } @@ -178,7 +192,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { list.add(EnumChatFormatting.GOLD + "Use screwdriver to cycle forwards through the action list, shift click to go back"); list.add(EnumChatFormatting.GOLD + "Use defuser to cycle forwards through the condition list, shift click to go back"); - list.add(EnumChatFormatting.BLUE + "Use a detonator to transform"); + list.add(EnumChatFormatting.GOLD + "Use hand drill to cycle forwards through the interaction list, shift click to go back"); + list.add(EnumChatFormatting.YELLOW + "Use a detonator to transform"); } @Override @@ -206,9 +221,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT int disguiseMeta = -1; public String actionID = "PHASE_ABERRATOR"; - public String conditionID = "ABERRATOR"; - - public boolean noDisguise; + public String conditionID = "EMPTY"; + public String interactionID; @Override public void updateEntity() { @@ -241,6 +255,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT DungeonSpawner.TileEntityDungeonSpawner spawner = (DungeonSpawner.TileEntityDungeonSpawner) te; spawner.actionID = actionID; spawner.conditionID = conditionID; + spawner.interactionID = interactionID; spawner.direction = ForgeDirection.getOrientation(placedRotation); spawner.disguise = disguise; spawner.disguiseMeta = disguiseMeta; @@ -258,6 +273,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT super.writeToNBT(nbt); nbt.setString("actionID", actionID); nbt.setString("conditionID", conditionID); + nbt.setString("interactionID", interactionID); nbt.setInteger("rotation", placedRotation); if(disguise != null){ nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); @@ -270,6 +286,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT super.readFromNBT(nbt); actionID = nbt.getString("actionID"); conditionID = nbt.getString("conditionID"); + interactionID = nbt.getString("interactionID"); placedRotation = nbt.getInteger("rotation"); if(nbt.hasKey("disguise")){ disguise = Block.getBlockFromName(nbt.getString("disguise")); @@ -282,6 +299,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT buf.writeInt(placedRotation); BufferUtil.writeString(buf, actionID); BufferUtil.writeString(buf, conditionID); + BufferUtil.writeString(buf, interactionID); buf.writeInt(Block.getIdFromBlock(disguise)); buf.writeInt(disguiseMeta); } @@ -291,6 +309,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT placedRotation = buf.readInt(); actionID = BufferUtil.readString(buf); conditionID = BufferUtil.readString(buf); + interactionID = BufferUtil.readString(buf); disguise = Block.getBlockById(buf.readInt()); disguiseMeta = buf.readInt(); } @@ -300,8 +319,10 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT NBTTagCompound nbt = new NBTTagCompound(); nbt.setString("actionID", actionID); nbt.setString("conditionID", conditionID); + if(interactionID != null) + nbt.setString("interactionID", interactionID); if(disguise != null){ - nbt.setString("disguise", disguise.getUnlocalizedName()); + nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); nbt.setInteger("disguiseMeta", disguiseMeta); } @@ -312,6 +333,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { actionID = nbt.getString("actionID"); conditionID = nbt.getString("conditionID"); + interactionID = nbt.getString("interactionID"); if(nbt.hasKey("disguise")){ disguise = Block.getBlockFromName(nbt.getString("disguise")); disguiseMeta = nbt.getInteger("disguiseMeta"); diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index bba6ebfe7..52dbb6099 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -12,6 +12,7 @@ import com.hbm.world.gen.util.DungeonSpawnerActions; import com.hbm.world.gen.util.DungeonSpawnerConditions; import com.hbm.util.Vec3NT; +import com.hbm.world.gen.util.DungeonSpawnerInteractions; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -59,22 +60,38 @@ public class DungeonSpawner extends BlockContainer { return super.getIcon(world, x, y, z, side); } + @Override + public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { + TileEntity te = worldIn.getTileEntity(x, y, z); + if(te instanceof TileEntityDungeonSpawner && ((TileEntityDungeonSpawner) te).interaction != null) { + ((TileEntityDungeonSpawner) te).interaction.accept(new Object[]{worldIn, te, x, y, z, player, side, subX, subY, subZ}); + return true; + } + return super.onBlockActivated(worldIn, x, y, z, player, side, subX, subY, subZ); + } public static class TileEntityDungeonSpawner extends TileEntity { + //phase is incremented per condition check, timer counts since last condition check by default public int phase = 0; public int timer = 0; public Block disguise; public int disguiseMeta; + /**Actions always get called before conditions, use the phase and timer variables in order to control behavior via conditions*/ public String conditionID = "ABERRATOR"; - //actions always get called before conditions, use the phase timer in order to control behavior via condition public String actionID = "ABERRATOR"; + /**Interactions are called on right click, and passes on the parameters of the right click to consumer*/ + public String interactionID; public Function condition; public Consumer action; + /**Consists of world instance, TileEntity instance, three ints for coordinates, one int for block side, and player instance, in that order **/ + public Consumer interaction; + + public EntityPlayer player; public ForgeDirection direction = ForgeDirection.UNKNOWN; @Override @@ -87,6 +104,10 @@ public class DungeonSpawner extends BlockContainer { if(condition == null){ condition = DungeonSpawnerConditions.conditions.get(conditionID); } + if(interaction == null && interactionID != null){ + interaction = DungeonSpawnerInteractions.interactions.get(interactionID); + } + if(action == null || condition == null){ worldObj.setBlock(xCoord,yCoord,zCoord, Blocks.air); return; @@ -105,8 +126,12 @@ public class DungeonSpawner extends BlockContainer { public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setInteger("phase", phase); - nbt.setString("conditionID", conditionID); + nbt.setString("actionID", actionID); + nbt.setString("conditionID", conditionID); + if(interactionID != null) + nbt.setString("interactionID", interactionID); + nbt.setInteger("direction", direction.ordinal()); if(disguise != null){ nbt.setInteger("disguiseMeta", disguiseMeta); @@ -118,8 +143,13 @@ public class DungeonSpawner extends BlockContainer { public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.phase = nbt.getInteger("phase"); + + this.actionID = nbt.getString("actionID"); this.conditionID = nbt.getString("conditionID"); + if(nbt.hasKey("interactionID")) this.interactionID = nbt.getString("interactionID"); + this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); + if(nbt.hasKey("disguise")){ disguiseMeta = nbt.getInteger("disguiseMeta"); disguise = Block.getBlockFromName(nbt.getString("disguise")); diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java index 1e32d9dc7..fee835c2e 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java @@ -1,7 +1,7 @@ package com.hbm.world.gen.util; +import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.generic.BlockPedestal; import com.hbm.blocks.generic.BlockSkeletonHolder; import com.hbm.blocks.generic.DungeonSpawner; import com.hbm.entity.item.EntityFallingBlockNT; @@ -9,34 +9,30 @@ import com.hbm.entity.missile.EntityMissileTier2; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums; import com.hbm.items.ModItems; -import com.hbm.main.ModEventHandler; +import com.hbm.tileentity.TileEntityDoorGeneric; import com.hbm.tileentity.machine.storage.TileEntityCrateBase; +import com.hbm.util.ContaminationUtil; import com.hbm.util.MobUtil; import com.hbm.util.Vec3NT; import com.hbm.world.WorldUtil; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.monster.EntityZombie; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.*; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Random; +import java.util.*; import java.util.function.Consumer; public class DungeonSpawnerActions { - public static HashMap> actions = new HashMap<>(); + public static LinkedHashMap> actions = new LinkedHashMap<>(); public static Consumer PHASE_ABERRATOR = (tile) -> { World world = tile.getWorldObj(); @@ -122,14 +118,10 @@ public class DungeonSpawnerActions { Vec3NT vec = new Vec3NT(5, 0, 0); for (int i = 0; i < 10; i++) { EntityZombie mob = new EntityZombie(world); - for (int j = 0; j < 7; j++) { - mob.setPositionAndRotation(x + 0.5 + vec.xCoord, world.getHeightValue(x,z), z + 0.5 + vec.zCoord, i * 36F, 0); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdv, new Random()); - if (mob.getCanSpawnHere()) { - world.spawnEntityInWorld(mob); - break; - } - } + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, world.getHeightValue(x,z), z + 0.5 + vec.zCoord, i * 36F, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdv, new Random()); + world.spawnEntityInWorld(mob); + vec.rotateAroundYDeg(36D); } world.setBlock(x, y, z, ModBlocks.block_steel); @@ -178,6 +170,78 @@ public class DungeonSpawnerActions { world.setBlock(x,y,z, ModBlocks.block_electrical_scrap); }; + public static Consumer RAD_CONTAINMENT_SYSTEM = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + ForgeDirection direction = tile.direction.getOpposite(); + ForgeDirection rot = direction.getRotation(ForgeDirection.UP); + + AxisAlignedBB bb = AxisAlignedBB.getBoundingBox(x - rot.offsetX, y - 1, z - rot.offsetZ, x + rot.offsetX + direction.offsetX * 15, y + 1, z + rot.offsetZ + direction.offsetZ * 15).expand(2,2,2); + + List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, bb); + + for(EntityLivingBase e : entities) { + + Vec3 vec = Vec3.createVectorHelper(e.posX - (x + 0.5), (e.posY + e.getEyeHeight()) - (y + 0.5), e.posZ - (z + 0.5)); + double len = vec.lengthVector(); + vec = vec.normalize(); + + len = Math.max(len,1D); + + float res = 0; + + for(int i = 1; i < len; i++) { + + int ix = (int)Math.floor(x + 0.5 + vec.xCoord * i); + int iy = (int)Math.floor(y + 0.5 + vec.yCoord * i); + int iz = (int)Math.floor(z + 0.5 + vec.zCoord * i); + + res += world.getBlock(ix, iy, iz).getExplosionResistance(null); + } + + if(res < 1) + res = 1; + + float eRads = 100F; + eRads /= (float)res; + eRads /= (float)(len * len); + + ContaminationUtil.contaminate(e, ContaminationUtil.HazardType.RADIATION, ContaminationUtil.ContaminationType.HAZMAT2, eRads); + } + + if (tile.phase == 2 && tile.timer > 40){ + world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "[RAD CONTAINMENT SYSTEM]" + + EnumChatFormatting.RESET + " Diagnostics found containment failure, commencing lockdown")); + + for(int i = 1; i < 20; i++) { + int checkX, checkY, checkZ; + checkX = x + direction.offsetX * i; + checkY = y + 1; + checkZ = z + direction.offsetZ * i; + Block block = world.getBlock(checkX, checkY,checkZ); + TileEntity te = null; + if(block instanceof BlockDummyable){ + int[] coreCoords = ((BlockDummyable) block).findCore(world,checkX,checkY,checkZ); + te = world.getTileEntity(coreCoords[0], coreCoords[1], coreCoords[2]); + } + + if (te instanceof TileEntityDoorGeneric) { + TileEntityDoorGeneric door = (TileEntityDoorGeneric) te; + door.setPins(456); + door.close(); + door.lock(); + break; + } + } + + tile.phase = 3; + } + }; + public static List getActionNames(){ return new ArrayList<>(actions.keySet()); } @@ -189,6 +253,7 @@ public class DungeonSpawnerActions { actions.put("FODDER_WAVE", FODDER_WAVE); actions.put("PUZZLE_TEST", PUZZLE_TEST); actions.put("MISSILE_STRIKE", MISSILE_STRIKE); + actions.put("IRRADIATE_ENTITIES_AOE", RAD_CONTAINMENT_SYSTEM); } diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java index 0a634c271..83dd773e8 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java @@ -15,12 +15,16 @@ import net.minecraft.world.World; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.function.Function; public class DungeonSpawnerConditions { - public static HashMap> conditions = new HashMap<>(); + public static LinkedHashMap> conditions = new LinkedHashMap<>(); + + /**For use with interactions, for having them handle all conditional tasks*/ + public static Function EMPTY = (tile) -> false; public static Function ABERRATOR = (tile) -> { World world = tile.getWorldObj(); @@ -82,6 +86,7 @@ public class DungeonSpawnerConditions { //register new conditions here static { + conditions.put("EMPTY", EMPTY); conditions.put("ABERRATOR", ABERRATOR); conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); conditions.put("REDSTONE", REDSTONE); diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java new file mode 100644 index 000000000..32c19b81d --- /dev/null +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java @@ -0,0 +1,80 @@ +package com.hbm.world.gen.util; + +import com.hbm.blocks.generic.DungeonSpawner.TileEntityDungeonSpawner; +import com.hbm.entity.missile.EntityMissileTier2; +import com.hbm.items.ModItems; +import com.hbm.potion.HbmPotion; +import com.hbm.tileentity.TileEntityDoorGeneric; +import com.hbm.util.Vec3NT; +import com.hbm.world.WorldUtil; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.potion.PotionEffect; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.function.Consumer; + +/**Interactions are called when the player right-clicks the block**/ +public class DungeonSpawnerInteractions { + + /**Consumer consists of world instance, tile entity instance, three ints for coordinates, one int for block side, and player instance, + * in that order **/ + public static LinkedHashMap> interactions = new LinkedHashMap<>(); + + public static Consumer TEST = (array) -> { + World world = (World) array[0]; + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) array[1]; + int x = (int) array[2]; + int y = (int) array[3]; + int z = (int) array[4]; + EntityPlayer player = (EntityPlayer) array[5]; + int side = (int) array[6]; + + if(spawner.phase > 1) return; + + if(player.getHeldItem() != null) + player.getHeldItem().stackSize--; + + spawner.phase++; + }; + + public static Consumer RAD_CONTAINMENT_SYSTEM = (array) -> { + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) array[1]; + EntityPlayer player = (EntityPlayer) array[5]; + + if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.key){ + player.getHeldItem().stackSize--; + player.addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "[RAD CONTAINMENT SYSTEM]" + + EnumChatFormatting.RESET + " Radiation treatment administered")); + player.addPotionEffect(new PotionEffect(HbmPotion.radaway.getId(), 3 * 60 * 20, 4)); + player.addPotionEffect(new PotionEffect(HbmPotion.radx.getId(), 3 * 60 * 20, 4)); + spawner.phase = 2; + spawner.timer = 0; + } + }; + + + + public static List getInteractionNames(){ + return new ArrayList<>(interactions.keySet()); + } + + //register new interactions here + static{ + interactions.put("TEST", TEST); + interactions.put("RADAWAY_INJECTOR", RAD_CONTAINMENT_SYSTEM); + } + + + +} From 360b0acabe66139772dc80678986d0858127bba0 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:09:09 -0400 Subject: [PATCH 248/491] Interactions for the logic block --- src/main/resources/assets/hbm/lang/en_US.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d60a76787..1676a79b5 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5277,6 +5277,7 @@ tile.ducrete_smooth_stairs.name=Ducrete Stairs tile.dummy_block.name=Dummy Block tile.dummy_port.name=Dummy Block (Electricity Port) tile.dungeon_chain.name=Metal Chain +tile.dungeon_spawner.name=Dungeon Action Block tile.dynamite.name=Dynamite tile.emp_bomb.name=EMP Device tile.factory_advanced_conductor.name=Advanced Factory Electricity Port From 0880287660caf2e2ed4283077c33cdaa2d4e79af Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 4 Jul 2025 15:24:28 +0200 Subject: [PATCH 249/491] assembler module --- .../machine/ModuleMachineAssembler.java | 28 ++++++++++++++ .../ModuleMachineBase.java} | 36 +++++++----------- .../machine/ModuleMachineChemplant.java | 35 +++++++++++++++++ .../TileEntityMachineChemicalFactory.java | 2 +- .../TileEntityMachineChemicalPlant.java | 2 +- .../assets/hbm/textures/gui/gui_slab.png | Bin 0 -> 4295 bytes .../assets/hbm/textures/items/tent_tablet.png | Bin 0 -> 231 bytes 7 files changed, 78 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java rename src/main/java/com/hbm/module/{ModuleMachineChemplant.java => machine/ModuleMachineBase.java} (75%) create mode 100644 src/main/java/com/hbm/module/machine/ModuleMachineChemplant.java create mode 100644 src/main/resources/assets/hbm/textures/gui/gui_slab.png create mode 100644 src/main/resources/assets/hbm/textures/items/tent_tablet.png diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java new file mode 100644 index 000000000..e132a5031 --- /dev/null +++ b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java @@ -0,0 +1,28 @@ +package com.hbm.module.machine; + +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.recipes.loader.GenericRecipe; + +import api.hbm.energymk2.IEnergyHandlerMK2; +import net.minecraft.item.ItemStack; + +public class ModuleMachineAssembler extends ModuleMachineBase { + + public ModuleMachineAssembler(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { + super(index, battery, slots); + this.inputSlots = new int[12]; + this.outputSlots = new int[1]; + this.inputTanks = new FluidTank[1]; + this.outputTanks = new FluidTank[1]; + } + + @Override + public GenericRecipe getRecipe() { + return null; + } + + public ModuleMachineAssembler itemInput(int... a) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = a[i]; return this; } + public ModuleMachineAssembler itemOutput(int a) { outputSlots[0] = a; return this; } + public ModuleMachineAssembler fluidInput(FluidTank a) { inputTanks[0] = a; return this; } + public ModuleMachineAssembler fluidOutput(FluidTank a) { outputTanks[0] = a; return this; } +} diff --git a/src/main/java/com/hbm/module/ModuleMachineChemplant.java b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java similarity index 75% rename from src/main/java/com/hbm/module/ModuleMachineChemplant.java rename to src/main/java/com/hbm/module/machine/ModuleMachineBase.java index 4c6cbdbcd..7787b4fbd 100644 --- a/src/main/java/com/hbm/module/ModuleMachineChemplant.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java @@ -1,7 +1,6 @@ -package com.hbm.module; +package com.hbm.module.machine; import com.hbm.inventory.fluid.tank.FluidTank; -import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; @@ -11,22 +10,16 @@ import io.netty.buffer.ByteBuf; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -/** - * Option 1: Make a base class with weird arbitrary overrides to define shit like slots for multi machines like the chemfac - * Option 2: Make an easy to define module which can be used by whatever needs it, hypothetically allowing a mixed recipe machine. - * In the hudson bay, you know how we do it. - * @author hbm - */ -public class ModuleMachineChemplant { +public abstract class ModuleMachineBase { // setup public int index; public IEnergyHandlerMK2 battery; public ItemStack[] slots; - public int[] inputSlots = new int[3]; - public int[] outputSlots = new int[3]; - public FluidTank[] inputTanks = new FluidTank[3]; - public FluidTank[] outputTanks = new FluidTank[3]; + public int[] inputSlots; + public int[] outputSlots; + public FluidTank[] inputTanks; + public FluidTank[] outputTanks; // running vars public String recipe = "null"; public double progress; @@ -34,7 +27,7 @@ public class ModuleMachineChemplant { public boolean didProcess = false; public boolean markDirty = false; - public ModuleMachineChemplant(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { + public ModuleMachineBase(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { this.index = index; this.battery = battery; this.slots = slots; @@ -43,8 +36,8 @@ public class ModuleMachineChemplant { /** Chances tank type and pressure based on recipe */ public void setupTanks(GenericRecipe recipe) { if(recipe == null) return; - for(int i = 0; i < 3; i++) if(recipe.inputFluid != null && recipe.inputFluid.length > i) inputTanks[i].conform(recipe.inputFluid[i]); else inputTanks[i].resetTank(); - for(int i = 0; i < 3; i++) if(recipe.outputFluid != null && recipe.outputFluid.length > i) outputTanks[i].conform(recipe.outputFluid[i]); else outputTanks[i].resetTank(); + for(int i = 0; i < inputTanks.length; i++) if(recipe.inputFluid != null && recipe.inputFluid.length > i) inputTanks[i].conform(recipe.inputFluid[i]); else inputTanks[i].resetTank(); + for(int i = 0; i < outputTanks.length; i++) if(recipe.outputFluid != null && recipe.outputFluid.length > i) outputTanks[i].conform(recipe.outputFluid[i]); else outputTanks[i].resetTank(); } /** Expects the tanks to be set up correctly beforehand */ @@ -135,8 +128,10 @@ public class ModuleMachineChemplant { } } + public abstract GenericRecipe getRecipe(); + public void update(double speed, double power, boolean extraCondition) { - GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); + GenericRecipe recipe = getRecipe(); this.setupTanks(recipe); this.didProcess = false; @@ -152,7 +147,7 @@ public class ModuleMachineChemplant { /** For item IO, instead of the TE doing all the work it only has to handle non-recipe stuff, the module does the rest */ public boolean isItemValid(int slot, ItemStack stack) { - GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); + GenericRecipe recipe = getRecipe(); if(recipe == null) return false; if(recipe.inputItem == null) return false; @@ -162,11 +157,6 @@ public class ModuleMachineChemplant { return false; } - - public ModuleMachineChemplant itemInput(int a, int b, int c) { inputSlots[0] = a; inputSlots[1] = b; inputSlots[2] = c; return this; } - public ModuleMachineChemplant itemOutput(int a, int b, int c) { outputSlots[0] = a; outputSlots[1] = b; outputSlots[2] = c; return this; } - public ModuleMachineChemplant fluidInput(FluidTank a, FluidTank b, FluidTank c) { inputTanks[0] = a; inputTanks[1] = b; inputTanks[2] = c; return this; } - public ModuleMachineChemplant fluidOutput(FluidTank a, FluidTank b, FluidTank c) { outputTanks[0] = a; outputTanks[1] = b; outputTanks[2] = c; return this; } public void serialize(ByteBuf buf) { buf.writeDouble(progress); diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineChemplant.java b/src/main/java/com/hbm/module/machine/ModuleMachineChemplant.java new file mode 100644 index 000000000..c6268e2cd --- /dev/null +++ b/src/main/java/com/hbm/module/machine/ModuleMachineChemplant.java @@ -0,0 +1,35 @@ +package com.hbm.module.machine; + +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; + +import api.hbm.energymk2.IEnergyHandlerMK2; +import net.minecraft.item.ItemStack; + +/** + * Option 1: Make a base class with weird arbitrary overrides to define shit like slots for multi machines like the chemfac + * Option 2: Make an easy to define module which can be used by whatever needs it, hypothetically allowing a mixed recipe machine. + * In the hudson bay, you know how we do it. + * @author hbm + */ +public class ModuleMachineChemplant extends ModuleMachineBase { + + public ModuleMachineChemplant(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { + super(index, battery, slots); + this.inputSlots = new int[3]; + this.outputSlots = new int[3]; + this.inputTanks = new FluidTank[3]; + this.outputTanks = new FluidTank[3]; + } + + @Override + public GenericRecipe getRecipe() { + return ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); + } + + public ModuleMachineChemplant itemInput(int a, int b, int c) { inputSlots[0] = a; inputSlots[1] = b; inputSlots[2] = c; return this; } + public ModuleMachineChemplant itemOutput(int a, int b, int c) { outputSlots[0] = a; outputSlots[1] = b; outputSlots[2] = c; return this; } + public ModuleMachineChemplant fluidInput(FluidTank a, FluidTank b, FluidTank c) { inputTanks[0] = a; inputTanks[1] = b; inputTanks[2] = c; return this; } + public ModuleMachineChemplant fluidOutput(FluidTank a, FluidTank b, FluidTank c) { outputTanks[0] = a; outputTanks[1] = b; outputTanks[2] = c; return this; } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index 8b31f6f11..e7695b078 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -14,7 +14,7 @@ import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.module.ModuleMachineChemplant; +import com.hbm.module.machine.ModuleMachineChemplant; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 2bb6584f8..47e0a7d62 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -15,7 +15,7 @@ import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.module.ModuleMachineChemplant; +import com.hbm.module.machine.ModuleMachineChemplant; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; diff --git a/src/main/resources/assets/hbm/textures/gui/gui_slab.png b/src/main/resources/assets/hbm/textures/gui/gui_slab.png new file mode 100644 index 0000000000000000000000000000000000000000..02dab2c1cdcfeb790cd31c765e653aea3ef13243 GIT binary patch literal 4295 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/tent_tablet.png b/src/main/resources/assets/hbm/textures/items/tent_tablet.png new file mode 100644 index 0000000000000000000000000000000000000000..8769aeeec7ee11e53c91380f5451510e101ac20a GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf#zY&+tf+irRRcP%u#**S#nniU&hBA`2*<&aW< Date: Sat, 5 Jul 2025 23:43:55 +0200 Subject: [PATCH 250/491] scatman's world --- changelog | 6 +- .../com/hbm/blocks/bomb/BlockVolcano.java | 2 +- .../java/com/hbm/config/GeneralConfig.java | 2 + .../hbm/items/machine/ItemFluidSiphon.java | 113 +++++++++--------- .../com/hbm/items/tool/ItemToolAbility.java | 13 +- .../weapon/sedna/factory/LegoClient.java | 1 - .../com/hbm/main/ModEventHandlerClient.java | 8 +- .../oil/TileEntityMachineRefinery.java | 2 +- .../models/machines/assembly_machine.png | Bin 0 -> 3249 bytes 9 files changed, 78 insertions(+), 69 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/machines/assembly_machine.png diff --git a/changelog b/changelog index 0b4c4ebc0..8226bc9a5 100644 --- a/changelog +++ b/changelog @@ -3,8 +3,12 @@ * The new chemical plant can now be used to upgrade the meteorite sword * Fluid containers are now re-registered when using `/ntmreload` which should correctly generate fluid container items for freshly added custom fluids * Recipe configs will no longer try to parse null value recipes, meaing that trailing commas in a recipe config will no longer create an error +* Refinery solid byproducts now build up substantially faster + * This means fracking solution from standard oil is now a lot more viable + * This also makes the volume of oil spent consistent with the NEI handler ## Fixed * Fixed crash caused by breaking a tool while the fortune or silk touch ability is enabled * Fixed NTM adding mob spawns to the mushroom island -# Fixed line break not working on the tip of the day \ No newline at end of file +* Fixed line break not working on the tip of the day +* Fixed an issue where AoE abilities can break bedrock \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java b/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java index 6eefdf20e..16110461e 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java @@ -151,7 +151,7 @@ public class BlockVolcano extends BlockContainer implements ITooltipProvider, IB @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - nbt.setInteger("tier", this.volcanoTimer); + nbt.setInteger("timer", this.volcanoTimer); } private boolean shouldGrow() { diff --git a/src/main/java/com/hbm/config/GeneralConfig.java b/src/main/java/com/hbm/config/GeneralConfig.java index c843cde57..b52f58073 100644 --- a/src/main/java/com/hbm/config/GeneralConfig.java +++ b/src/main/java/com/hbm/config/GeneralConfig.java @@ -39,6 +39,7 @@ public class GeneralConfig { public static boolean enableSoundExtension = true; public static boolean enableMekanismChanges = true; public static boolean enableServerRecipeSync = false; + public static boolean enableLoadScreenReplacement = true; public static int normalSoundChannels = 200; public static boolean enableExpensiveMode = false; @@ -120,6 +121,7 @@ public class GeneralConfig { "Note that a value below 28 or above 200 can cause buggy sounds and issues with other mods running out of sound memory.", 100); preferredOutputMod = CommonConfig.createConfigStringList(config,CATEGORY_GENERAL,"1.42_preferredOutputMod", "The mod which is preferred as output when certain machines autogenerate recipes. Currently used for the shredder", new String[] {RefStrings.MODID}); + enableLoadScreenReplacement = config.get(CATEGORY_GENERAL, "1.43_enableLoadScreenReplacement", true, "Tries to replace the vanilla load screen with the 'tip of the day' one, may clash with other mods trying to do the same.").getBoolean(true); enableExpensiveMode = config.get(CATEGORY_GENERAL, "1.99_enableExpensiveMode", false, "It does what the name implies.").getBoolean(false); final String CATEGORY_528 = CommonConfig.CATEGORY_528; diff --git a/src/main/java/com/hbm/items/machine/ItemFluidSiphon.java b/src/main/java/com/hbm/items/machine/ItemFluidSiphon.java index 2a7fc95ce..ecf9797e6 100644 --- a/src/main/java/com/hbm/items/machine/ItemFluidSiphon.java +++ b/src/main/java/com/hbm/items/machine/ItemFluidSiphon.java @@ -10,8 +10,7 @@ import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Unsiphonable; import com.hbm.items.ModItems; import com.hbm.items.tool.ItemPipette; -import api.hbm.fluid.IFluidStandardReceiver; -import api.hbm.fluid.IFluidStandardTransceiver; +import api.hbm.fluidmk2.IFluidStandardReceiverMK2; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -19,78 +18,82 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class ItemFluidSiphon extends Item { - + @Override public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int i, float f0, float f1, float f2) { TileEntity te = CompatExternal.getCoreFromPos(world, x, y, z); - if(te != null && (te instanceof IFluidStandardReceiver || te instanceof IFluidStandardTransceiver)) { - FluidTank[] tanks; - if (te instanceof IFluidStandardReceiver) { - tanks = ((IFluidStandardReceiver) te).getReceivingTanks(); - } else { - tanks = ((IFluidStandardTransceiver) te).getReceivingTanks(); - } + if(te != null && te instanceof IFluidStandardReceiverMK2) { + FluidTank[] tanks = ((IFluidStandardReceiverMK2) te).getReceivingTanks(); - boolean hasDrainedTank = false; - - // We need to iterate through the inventory for _each_ siphonable tank, so we can handle fluids that can only go into certain containers - // After we successfully siphon any fluid from a tank, we stop further processing, multiple fluid types require multiple clicks - for (FluidTank tank : tanks) { - if (tank.getFill() <= 0) continue; + boolean hasDrainedTank = false; - ItemStack availablePipette = null; - FluidType tankType = tank.getTankType(); + // We need to iterate through the inventory for _each_ siphonable + // tank, so we can handle fluids that can only go into certain containers + // After we successfully siphon any fluid from a tank, we stop + // further processing, multiple fluid types require multiple clicks + for(FluidTank tank : tanks) { + if(tank.getFill() <= 0) + continue; - if (tankType.hasTrait(FT_Unsiphonable.class)) continue; + ItemStack availablePipette = null; + FluidType tankType = tank.getTankType(); - for (int j = 0; j < player.inventory.mainInventory.length; j++) { - ItemStack inventoryStack = player.inventory.mainInventory[j]; - if (inventoryStack == null) continue; + if(tankType.hasTrait(FT_Unsiphonable.class)) + continue; - FluidContainer container = FluidContainerRegistry.getContainer(tankType, inventoryStack); + for(int j = 0; j < player.inventory.mainInventory.length; j++) { + ItemStack inventoryStack = player.inventory.mainInventory[j]; + if(inventoryStack == null) + continue; - if (availablePipette == null && inventoryStack.getItem() instanceof ItemPipette) { - ItemPipette pipette = (ItemPipette) inventoryStack.getItem(); - if (!pipette.willFizzle(tankType) && pipette != ModItems.pipette_laboratory) { // Ignoring laboratory pipettes for now - availablePipette = inventoryStack; - } - } + FluidContainer container = FluidContainerRegistry.getContainer(tankType, inventoryStack); - if (container == null) continue; + if(availablePipette == null && inventoryStack.getItem() instanceof ItemPipette) { + ItemPipette pipette = (ItemPipette) inventoryStack.getItem(); + if(!pipette.willFizzle(tankType) && pipette != ModItems.pipette_laboratory) { // Ignoring laboratory pipettes for now + availablePipette = inventoryStack; + } + } - ItemStack full = FluidContainerRegistry.getFullContainer(inventoryStack, tankType); + if(container == null) + continue; - while (tank.getFill() >= container.content && inventoryStack.stackSize > 0) { - hasDrainedTank = true; + ItemStack full = FluidContainerRegistry.getFullContainer(inventoryStack, tankType); - inventoryStack.stackSize--; - if (inventoryStack.stackSize <= 0) { - player.inventory.mainInventory[j] = null; - } + while(tank.getFill() >= container.content && inventoryStack.stackSize > 0) { + hasDrainedTank = true; - ItemStack filledContainer = full.copy(); - tank.setFill(tank.getFill() - container.content); - player.inventory.addItemStackToInventory(filledContainer); - } - } + inventoryStack.stackSize--; + if(inventoryStack.stackSize <= 0) { + player.inventory.mainInventory[j] = null; + } - // If the remainder of the tank can only fit into a pipette, fill a pipette with the remainder - // Will not auto-fill fizzlable pipettes, there is no feedback for the fizzle in this case, and that's a touch too unfair - if (availablePipette != null && tank.getFill() < 1000) { - ItemPipette pipette = (ItemPipette) availablePipette.getItem(); - - if (pipette.acceptsFluid(tankType, availablePipette)) { - hasDrainedTank = true; - tank.setFill(pipette.tryFill(tankType, tank.getFill(), availablePipette)); - } - } + ItemStack filledContainer = full.copy(); + tank.setFill(tank.getFill() - container.content); + player.inventory.addItemStackToInventory(filledContainer); + } + } - if (hasDrainedTank) return true; - } + // If the remainder of the tank can only fit into a pipette, + // fill a pipette with the remainder + // Will not auto-fill fizzlable pipettes, there is no feedback + // for the fizzle in this case, and that's a touch too unfair + if(availablePipette != null && tank.getFill() < 1000) { + ItemPipette pipette = (ItemPipette) availablePipette.getItem(); + + if(pipette.acceptsFluid(tankType, availablePipette)) { + hasDrainedTank = true; + tank.setFill(pipette.tryFill(tankType, tank.getFill(), availablePipette)); + } + } + + if(hasDrainedTank) + return true; + } } return false; } - + } diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index e055c2b6b..589938c88 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -291,14 +291,11 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro Block block = world.getBlock(x, y, z); int meta = world.getBlockMetadata(x, y, z); - - if(!( - canHarvestBlock(block, stack) || - canShearBlock(block, stack, world, x, y, z)) || - block.getPlayerRelativeBlockHardness(player, world, x, y, z) < 0 || - block == ModBlocks.stone_keyhole - ) - return; + + if(!(canHarvestBlock(block, stack) || + canShearBlock(block, stack, world, x, y, z)) || + (block.getBlockHardness(world, x, y, z) == -1.0F && block.getPlayerRelativeBlockHardness(player, world, x, y, z) == 0.0F) || + block == ModBlocks.stone_keyhole) return; Block refBlock = world.getBlock(refX, refY, refZ); float refStrength = ForgeHooks.blockStrength(refBlock, player, world, refX, refY, refZ); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java index b49292c78..0b835d173 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java @@ -383,7 +383,6 @@ public class LegoClient { RenderArcFurnace.fullbright(true); double age = MathHelper.clamp_double(1D - ((double) bullet.ticksExisted - 2 + interp) / (double) bullet.getBulletConfig().expires, 0, 1); - double col = MathHelper.clamp_double(1D - ((double) bullet.ticksExisted + interp) / (double) bullet.getBulletConfig().expires, 0, 1); GL11.glPushMatrix(); GL11.glRotatef(180 - bullet.rotationYaw, 0, 1F, 0); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 88a7441c7..b07736bff 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -1030,14 +1030,19 @@ public class ModEventHandlerClient { public static boolean renderLodeStar = false; public static long lastStarCheck = 0L; + public static long lastLoadScreenReplacement = 0L; @SideOnly(Side.CLIENT) @SubscribeEvent(priority = EventPriority.LOWEST) public void onClientTickLast(ClientTickEvent event) { Minecraft mc = Minecraft.getMinecraft(); - if(!(mc.loadingScreen instanceof LoadingScreenRendererNT)) { + long millis = Clock.get_ms(); + if(millis == 0) millis = System.currentTimeMillis(); + + if(GeneralConfig.enableLoadScreenReplacement && !(mc.loadingScreen instanceof LoadingScreenRendererNT) && millis > lastLoadScreenReplacement + 10_000) { mc.loadingScreen = new LoadingScreenRendererNT(mc); + lastLoadScreenReplacement = millis; } if(event.phase == Phase.START && GeneralConfig.enableSkyboxes) { @@ -1067,7 +1072,6 @@ public class ModEventHandlerClient { } EntityPlayer player = mc.thePlayer; - long millis = Clock.get_ms(); if(lastStarCheck + 200 < millis) { renderLodeStar = false; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java index b474ce248..e7ce296c2 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java @@ -49,7 +49,7 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements public long power = 0; public int sulfur = 0; - public static final int maxSulfur = 100; + public static final int maxSulfur = 10; public static final long maxPower = 1000; public FluidTank[] tanks; diff --git a/src/main/resources/assets/hbm/textures/models/machines/assembly_machine.png b/src/main/resources/assets/hbm/textures/models/machines/assembly_machine.png new file mode 100644 index 0000000000000000000000000000000000000000..6fc1a618fbdeb03988bab626b0a89b3c3d323850 GIT binary patch literal 3249 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 XwiWEu161H21mtw$^zo<1&L{sHLB7>N literal 0 HcmV?d00001 From ba220420fed5c441385ec7cc609f9bffe1fb5a61 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 6 Jul 2025 22:35:26 +0200 Subject: [PATCH 251/491] the sludge --- changelog | 7 +- gradle.properties | 2 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../com/hbm/main/ModEventHandlerClient.java | 4 +- .../TileEntityMachineChemicalFactory.java | 6 + .../hbm/models/machines/assembly_machine.obj | 4650 +++++++++++++++++ .../models/machines/assembly_machine.png | Bin 3249 -> 2748 bytes 7 files changed, 4667 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/assets/hbm/models/machines/assembly_machine.obj diff --git a/changelog b/changelog index 8226bc9a5..666ddeaaa 100644 --- a/changelog +++ b/changelog @@ -11,4 +11,9 @@ * Fixed crash caused by breaking a tool while the fortune or silk touch ability is enabled * Fixed NTM adding mob spawns to the mushroom island * Fixed line break not working on the tip of the day -* Fixed an issue where AoE abilities can break bedrock \ No newline at end of file +* Fixed an issue where AoE abilities can break bedrock +* Fixed chemical factory not saving its water and steam tanks +* Fixed siphon not working with some newer machines due to using legacy API +* Potentially fixed an incompatibility with Aether due to the loading screen replacement + * The loading screen replacement will only run up to 25 times per session, with a fixed delay of 5 seconds minimum + * The loading screen replacement can be disabled completely in the config \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ba4279e7d..681ea595b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5378 +mod_build_number=5383 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 65c4c2319..f3db74449 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5378)"; + public static final String VERSION = "1.0.27 BETA (5383)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index b07736bff..ea71876e6 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -1031,6 +1031,7 @@ public class ModEventHandlerClient { public static boolean renderLodeStar = false; public static long lastStarCheck = 0L; public static long lastLoadScreenReplacement = 0L; + public static int loadingScreenReplacementRetry = 0; @SideOnly(Side.CLIENT) @SubscribeEvent(priority = EventPriority.LOWEST) @@ -1040,9 +1041,10 @@ public class ModEventHandlerClient { long millis = Clock.get_ms(); if(millis == 0) millis = System.currentTimeMillis(); - if(GeneralConfig.enableLoadScreenReplacement && !(mc.loadingScreen instanceof LoadingScreenRendererNT) && millis > lastLoadScreenReplacement + 10_000) { + if(GeneralConfig.enableLoadScreenReplacement && loadingScreenReplacementRetry < 25 && !(mc.loadingScreen instanceof LoadingScreenRendererNT) && millis > lastLoadScreenReplacement + 5_000) { mc.loadingScreen = new LoadingScreenRendererNT(mc); lastLoadScreenReplacement = millis; + loadingScreenReplacementRetry++; // this might not do anything, but at least it should prevent a metric fuckton of framebuffers from being created } if(event.phase == Phase.START && GeneralConfig.enableSkyboxes) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index e7695b078..655947212 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -314,6 +314,9 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl for(int i = 0; i < inputTanks.length; i++) this.inputTanks[i].readFromNBT(nbt, "i" + i); for(int i = 0; i < outputTanks.length; i++) this.outputTanks[i].readFromNBT(nbt, "i" + i); + this.water.readFromNBT(nbt, "w"); + this.lps.readFromNBT(nbt, "s"); + this.power = nbt.getLong("power"); this.maxPower = nbt.getLong("maxPower"); for(int i = 0; i < 4; i++) this.chemplantModule[i].readFromNBT(nbt); @@ -326,6 +329,9 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl for(int i = 0; i < inputTanks.length; i++) this.inputTanks[i].writeToNBT(nbt, "i" + i); for(int i = 0; i < outputTanks.length; i++) this.outputTanks[i].writeToNBT(nbt, "i" + i); + this.water.writeToNBT(nbt, "w"); + this.lps.writeToNBT(nbt, "s"); + nbt.setLong("power", power); nbt.setLong("maxPower", maxPower); for(int i = 0; i < 4; i++) this.chemplantModule[i].writeToNBT(nbt); diff --git a/src/main/resources/assets/hbm/models/machines/assembly_machine.obj b/src/main/resources/assets/hbm/models/machines/assembly_machine.obj new file mode 100644 index 000000000..52d865f16 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/assembly_machine.obj @@ -0,0 +1,4650 @@ +# Blender v2.79 (sub 0) OBJ File: 'assembler.blend' +# www.blender.org +o Ring +v -0.000000 1.250000 -1.375000 +v -0.526190 1.250000 -1.270334 +v -0.972272 1.250000 -0.972272 +v -1.270334 1.250000 -0.526190 +v -1.375000 1.250000 0.000000 +v -1.270334 1.250000 0.526190 +v -0.972272 1.250000 0.972272 +v -0.526190 1.250000 1.270334 +v -0.000000 1.250000 1.375000 +v 0.526189 1.250000 1.270334 +v 0.972271 1.250000 0.972272 +v 1.270334 1.250000 0.526190 +v 1.375000 1.250000 0.000000 +v 1.270334 1.250000 -0.526190 +v 0.972271 1.250000 -0.972272 +v 0.526189 1.250000 -1.270335 +v -0.000000 1.500000 -1.375000 +v -0.526190 1.500000 -1.270334 +v -0.972272 1.500000 -0.972272 +v -1.270334 1.500000 -0.526190 +v -1.375000 1.500000 0.000000 +v -1.270334 1.500000 0.526190 +v -0.972272 1.500000 0.972272 +v -0.526190 1.500000 1.270334 +v -0.000000 1.500000 1.375000 +v 0.526189 1.500000 1.270334 +v 0.972271 1.500000 0.972272 +v 1.270334 1.500000 0.526190 +v 1.375000 1.500000 0.000000 +v 1.270334 1.500000 -0.526190 +v 0.972271 1.500000 -0.972272 +v 0.526189 1.500000 -1.270335 +v -0.000000 1.500000 -1.250000 +v -0.478355 1.500000 -1.154850 +v -0.883884 1.500000 -0.883883 +v -1.154850 1.500000 -0.478354 +v -1.250000 1.500000 0.000000 +v -1.154850 1.500000 0.478354 +v -0.883884 1.500000 0.883883 +v -0.478355 1.500000 1.154850 +v -0.000000 1.500000 1.250000 +v 0.478354 1.500000 1.154850 +v 0.883883 1.500000 0.883884 +v 1.154849 1.500000 0.478354 +v 1.250000 1.500000 0.000000 +v 1.154849 1.500000 -0.478354 +v 0.883883 1.500000 -0.883884 +v 0.478354 1.500000 -1.154850 +v -0.000000 1.375000 -1.250000 +v -0.478355 1.375000 -1.154850 +v -0.883884 1.375000 -0.883883 +v -1.154850 1.375000 -0.478354 +v -1.250000 1.375000 0.000000 +v -1.154850 1.375000 0.478354 +v -0.883884 1.375000 0.883883 +v -0.478355 1.375000 1.154850 +v -0.000000 1.375000 1.250000 +v 0.478354 1.375000 1.154850 +v 0.883883 1.375000 0.883884 +v 1.154849 1.375000 0.478354 +v 1.250000 1.375000 0.000000 +v 1.154849 1.375000 -0.478354 +v 0.883883 1.375000 -0.883884 +v 0.478354 1.375000 -1.154850 +v -0.000000 1.375000 -1.125000 +v -0.430519 1.375000 -1.039364 +v -0.795495 1.375000 -0.795495 +v -1.039365 1.375000 -0.430519 +v -1.125000 1.375000 0.000000 +v -1.039365 1.375000 0.430519 +v -0.795495 1.375000 0.795495 +v -0.430519 1.375000 1.039364 +v -0.000000 1.375000 1.125000 +v 0.430518 1.375000 1.039365 +v 0.795495 1.375000 0.795496 +v 1.039364 1.375000 0.430519 +v 1.125000 1.375000 0.000000 +v 1.039364 1.375000 -0.430519 +v 0.795495 1.375000 -0.795496 +v 0.430518 1.375000 -1.039365 +v -0.000000 1.250000 -1.125000 +v -0.430519 1.250000 -1.039364 +v -0.795495 1.250000 -0.795495 +v -1.039365 1.250000 -0.430519 +v -1.125000 1.250000 0.000000 +v -1.039365 1.250000 0.430519 +v -0.795495 1.250000 0.795495 +v -0.430519 1.250000 1.039364 +v -0.000000 1.250000 1.125000 +v 0.430518 1.250000 1.039365 +v 0.795495 1.250000 0.795496 +v 1.039364 1.250000 0.430519 +v 1.125000 1.250000 0.000000 +v 1.039364 1.250000 -0.430519 +v 0.795495 1.250000 -0.795496 +v 0.430518 1.250000 -1.039365 +v -0.093750 1.250000 -0.812500 +v 0.093750 1.250000 -0.812500 +v -0.093750 1.250000 -1.437500 +v 0.093750 1.250000 -1.437500 +v -0.093750 1.625000 -1.437500 +v -0.093750 1.625000 -0.812500 +v 0.093750 1.625000 -0.812500 +v 0.093750 1.625000 -1.437500 +v -0.000000 1.625000 -1.062500 +v 0.125000 1.625000 -1.062500 +v -0.000000 1.536612 -1.025888 +v 0.125000 1.536612 -1.025888 +v -0.000000 1.500000 -0.937500 +v 0.125000 1.500000 -0.937500 +v -0.000000 1.536612 -0.849112 +v 0.125000 1.536612 -0.849112 +v -0.000000 1.625000 -0.812500 +v 0.125000 1.625000 -0.812500 +v -0.000000 1.713388 -0.849112 +v 0.125000 1.713388 -0.849112 +v -0.000000 1.750000 -0.937500 +v 0.125000 1.750000 -0.937500 +v -0.000000 1.713388 -1.025888 +v 0.125000 1.713388 -1.025888 +v 0.062499 1.625000 -1.375000 +v -0.062501 1.625000 -1.375000 +v 0.062499 1.625000 -1.250000 +v -0.062501 1.625000 -1.250000 +v 0.062499 1.750000 -1.250000 +v 0.062499 1.750000 -1.375000 +v -0.062501 1.750000 -1.375000 +v -0.062501 1.750000 -1.250000 +v 0.093750 1.250000 0.812500 +v -0.093750 1.250000 0.812500 +v 0.093750 1.250000 1.437500 +v -0.093750 1.250000 1.437500 +v 0.093750 1.625000 1.437500 +v 0.093750 1.625000 0.812500 +v -0.093750 1.625000 0.812500 +v -0.093750 1.625000 1.437500 +v 0.000000 1.625000 1.062500 +v -0.125000 1.625000 1.062500 +v 0.000000 1.536612 1.025888 +v -0.125000 1.536612 1.025888 +v 0.000000 1.500000 0.937500 +v -0.125000 1.500000 0.937500 +v 0.000000 1.536612 0.849112 +v -0.125000 1.536612 0.849112 +v 0.000000 1.625000 0.812500 +v -0.125000 1.625000 0.812500 +v 0.000000 1.713388 0.849112 +v -0.125000 1.713388 0.849112 +v 0.000000 1.750000 0.937500 +v -0.125000 1.750000 0.937500 +v 0.000000 1.713388 1.025888 +v -0.125000 1.713388 1.025888 +v -0.062499 1.625000 1.375000 +v 0.062501 1.625000 1.375000 +v -0.062499 1.625000 1.250000 +v 0.062501 1.625000 1.250000 +v -0.062499 1.750000 1.250000 +v -0.062499 1.750000 1.375000 +v 0.062501 1.750000 1.375000 +v 0.062501 1.750000 1.250000 +vt 0.315789 0.222222 +vt 0.368421 0.240741 +vt 0.315789 0.240741 +vt 0.368421 0.222222 +vt 0.421053 0.240741 +vt 0.473684 0.222222 +vt 0.421053 0.222222 +vt 0.526316 0.222222 +vt 0.473684 0.240741 +vt 0.578947 0.222222 +vt 0.526316 0.240741 +vt 0.631579 0.222222 +vt 0.578947 0.240741 +vt 0.684211 0.222222 +vt 0.631579 0.240741 +vt 0.736842 0.222222 +vt 0.684211 0.240741 +vt 0.789474 0.222222 +vt 0.736842 0.240741 +vt 0.842105 0.222222 +vt 0.789474 0.240741 +vt 0.052632 0.222222 +vt 0.000000 0.240741 +vt -0.000000 0.222222 +vt 0.105263 0.240741 +vt 0.052632 0.240741 +vt 0.105263 0.222222 +vt 0.157895 0.240741 +vt 0.157895 0.222222 +vt 0.210526 0.240741 +vt 0.210526 0.222222 +vt 0.263158 0.240741 +vt 0.263158 0.222222 +vt 0.210526 0.259259 +vt 0.263158 0.277778 +vt 0.217105 0.277778 +vt 0.157895 0.259259 +vt 0.210526 0.277778 +vt 0.164474 0.277778 +vt 0.105263 0.259259 +vt 0.157895 0.277778 +vt 0.111842 0.277778 +vt 0.052632 0.259259 +vt 0.105263 0.277778 +vt 0.059211 0.277778 +vt -0.000000 0.259259 +vt 0.052632 0.277778 +vt 0.006579 0.277778 +vt 0.842105 0.259259 +vt 0.796053 0.277778 +vt 0.789474 0.259259 +vt 0.736842 0.259259 +vt 0.789474 0.277778 +vt 0.743421 0.277778 +vt 0.690789 0.277778 +vt 0.684211 0.259259 +vt 0.638158 0.277778 +vt 0.631579 0.259259 +vt 0.585526 0.277778 +vt 0.578947 0.259259 +vt 0.532895 0.277778 +vt 0.526316 0.259259 +vt 0.480263 0.277778 +vt 0.473684 0.259259 +vt 0.427632 0.277778 +vt 0.421053 0.259259 +vt 0.375000 0.277778 +vt 0.368421 0.259259 +vt 0.315789 0.259259 +vt 0.368421 0.277778 +vt 0.322368 0.277778 +vt 0.263158 0.259259 +vt 0.315789 0.277778 +vt 0.269737 0.277778 +vt 0.263158 0.185185 +vt 0.315789 0.148148 +vt 0.315789 0.185185 +vt 0.210526 0.185185 +vt 0.263158 0.148148 +vt 0.157895 0.185185 +vt 0.210526 0.148148 +vt 0.105263 0.185185 +vt 0.157895 0.148148 +vt 0.052632 0.185185 +vt 0.105263 0.148148 +vt 0.000000 0.185185 +vt 0.052632 0.148148 +vt 0.796053 0.148148 +vt 0.842105 0.185185 +vt 0.789474 0.185185 +vt 0.743421 0.148148 +vt 0.736842 0.185185 +vt 0.690789 0.148148 +vt 0.684211 0.185185 +vt 0.638158 0.148148 +vt 0.631579 0.185185 +vt 0.585526 0.148148 +vt 0.578947 0.185185 +vt 0.532895 0.148148 +vt 0.526316 0.185185 +vt 0.480263 0.148148 +vt 0.473684 0.185185 +vt 0.427632 0.148148 +vt 0.421053 0.185185 +vt 0.375000 0.148148 +vt 0.368421 0.185185 +vt 0.368421 0.148148 +vt 0.861842 0.490741 +vt 0.796053 0.518519 +vt 0.796053 0.490741 +vt 0.796053 0.574074 +vt 0.861842 0.601852 +vt 0.796053 0.601852 +vt 0.776316 0.574074 +vt 0.776316 0.518519 +vt 0.861842 0.518519 +vt 0.947368 0.518519 +vt 0.881579 0.574074 +vt 0.881579 0.518519 +vt 0.861842 0.574074 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.688096 0.624161 +vt 0.688096 0.598061 +vt 0.706641 0.598061 +vt 0.907895 0.481481 +vt 0.894737 0.462963 +vt 0.907895 0.462963 +vt 0.921053 0.444444 +vt 0.907895 0.444444 +vt 0.934211 0.444444 +vt 0.921053 0.462963 +vt 0.894737 0.444444 +vt 0.947368 0.444444 +vt 0.934211 0.462963 +vt 0.861842 0.490741 +vt 0.796053 0.518519 +vt 0.796053 0.490741 +vt 0.796053 0.574074 +vt 0.861842 0.601852 +vt 0.796053 0.601852 +vt 0.776316 0.574074 +vt 0.776316 0.518519 +vt 0.861842 0.518519 +vt 0.947368 0.518519 +vt 0.881579 0.574074 +vt 0.881579 0.518519 +vt 0.861842 0.574074 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.688096 0.624161 +vt 0.688096 0.598061 +vt 0.706641 0.598061 +vt 0.907895 0.481481 +vt 0.894737 0.462963 +vt 0.907895 0.462963 +vt 0.921053 0.444444 +vt 0.907895 0.444444 +vt 0.934211 0.444444 +vt 0.921053 0.462963 +vt 0.894737 0.444444 +vt 0.947368 0.444444 +vt 0.934211 0.462963 +vt 0.842105 0.240741 +vt 0.842105 0.277778 +vt 0.736842 0.277778 +vt 0.684211 0.277778 +vt 0.631579 0.277778 +vt 0.578947 0.277778 +vt 0.526316 0.277778 +vt 0.473684 0.277778 +vt 0.421053 0.277778 +vt 0.269737 0.148148 +vt 0.217105 0.148148 +vt 0.164474 0.148148 +vt 0.111842 0.148148 +vt 0.059211 0.148148 +vt 0.006579 0.148148 +vt 0.842105 0.148148 +vt 0.789474 0.148148 +vt 0.736842 0.148148 +vt 0.684211 0.148148 +vt 0.631579 0.148148 +vt 0.578947 0.148148 +vt 0.526316 0.148148 +vt 0.473684 0.148148 +vt 0.421053 0.148148 +vt 0.322368 0.148148 +vt 0.947368 0.574074 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.697369 0.592656 +vt 0.710481 0.611111 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.894737 0.481481 +vt 0.947368 0.462963 +vt 0.947368 0.574074 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.697369 0.592656 +vt 0.710481 0.611111 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.894737 0.481481 +vt 0.947368 0.462963 +vt 0.322368 0.296296 +vt 0.796053 0.296296 +vt 0.375000 0.296296 +vt 0.006579 0.296296 +vt 0.427632 0.296296 +vt 0.059211 0.296296 +vt 0.480263 0.296296 +vt 0.111842 0.296296 +vt 0.532895 0.296296 +vt 0.164474 0.296296 +vt 0.638158 0.296296 +vt 0.585526 0.296296 +vt 0.217105 0.296296 +vt 0.690789 0.296296 +vt 0.269737 0.296296 +vt 0.743421 0.296296 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.789474 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.368421 0.296296 +vt 0.842105 0.296296 +vt 0.421053 0.296296 +vt 0.052632 0.296296 +vt 0.473684 0.296296 +vt 0.105263 0.296296 +vt 0.526316 0.296296 +vt 0.157895 0.296296 +vt 0.578947 0.296296 +vt 0.210526 0.296296 +vt 0.684211 0.296296 +vt 0.631579 0.296296 +vt 0.263158 0.296296 +vt 0.736842 0.296296 +vt 0.315789 0.296296 +vt 0.789474 0.296296 +vt 0.789474 0.574074 +vt 0.776316 0.574074 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.9239 0.0000 0.3827 +vn -0.9239 0.0000 0.3827 +vn 0.9239 0.0000 -0.3827 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.3827 0.0000 0.9239 +vn 0.3827 0.0000 -0.9239 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 0.9239 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.9239 0.0000 -0.3827 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +s off +f 27/1/1 44/2/1 43/3/1 +f 28/4/1 45/5/1 44/2/1 +f 30/6/1 45/5/1 29/7/1 +f 31/8/1 46/9/1 30/6/1 +f 32/10/1 47/11/1 31/8/1 +f 17/12/1 48/13/1 32/10/1 +f 18/14/1 33/15/1 17/12/1 +f 19/16/1 34/17/1 18/14/1 +f 20/18/1 35/19/1 19/16/1 +f 21/20/1 36/21/1 20/18/1 +f 22/22/1 37/23/1 21/24/1 +f 22/22/1 39/25/1 38/26/1 +f 23/27/1 40/28/1 39/25/1 +f 24/29/1 41/30/1 40/28/1 +f 25/31/1 42/32/1 41/30/1 +f 26/33/1 43/3/1 42/32/1 +f 57/34/1 74/35/1 73/36/1 +f 56/37/1 73/38/1 72/39/1 +f 55/40/1 72/41/1 71/42/1 +f 54/43/1 71/44/1 70/45/1 +f 53/46/1 70/47/1 69/48/1 +f 53/49/1 68/50/1 52/51/1 +f 51/52/1 68/53/1 67/54/1 +f 51/52/1 66/55/1 50/56/1 +f 50/56/1 65/57/1 49/58/1 +f 49/58/1 80/59/1 64/60/1 +f 64/60/1 79/61/1 63/62/1 +f 63/62/1 78/63/1 62/64/1 +f 62/64/1 77/65/1 61/66/1 +f 61/66/1 76/67/1 60/68/1 +f 59/69/1 76/70/1 75/71/1 +f 58/72/1 75/73/1 74/74/1 +f 10/75/2 91/76/2 11/77/2 +f 9/78/2 90/79/2 10/75/2 +f 8/80/2 89/81/2 9/78/2 +f 7/82/2 88/83/2 8/80/2 +f 6/84/2 87/85/2 7/82/2 +f 5/86/2 86/87/2 6/84/2 +f 84/88/2 5/89/2 4/90/2 +f 83/91/2 4/90/2 3/92/2 +f 82/93/2 3/92/2 2/94/2 +f 81/95/2 2/94/2 1/96/2 +f 96/97/2 1/96/2 16/98/2 +f 95/99/2 16/98/2 15/100/2 +f 94/101/2 15/100/2 14/102/2 +f 93/103/2 14/102/2 13/104/2 +f 92/105/2 13/104/2 12/106/2 +f 11/77/2 92/107/2 12/106/2 +f 99/108/2 98/109/2 97/110/2 +f 103/111/1 101/112/1 102/113/1 +f 98/109/3 102/114/3 97/115/3 +f 100/116/4 103/111/4 98/109/4 +f 97/117/5 101/118/5 99/119/5 +f 99/119/6 104/120/6 100/116/6 +f 118/121/4 114/122/4 110/123/4 +f 119/124/5 107/125/5 111/126/5 +f 127/127/1 125/128/1 126/129/1 +f 122/130/6 126/129/6 121/131/6 +f 124/132/5 127/133/5 122/130/5 +f 121/131/4 125/128/4 123/134/4 +f 123/135/3 128/136/3 124/132/3 +f 131/137/2 130/138/2 129/139/2 +f 135/140/1 133/141/1 134/142/1 +f 130/138/6 134/143/6 129/144/6 +f 132/145/5 135/140/5 130/138/5 +f 129/146/4 133/147/4 131/148/4 +f 131/148/3 136/149/3 132/145/3 +f 150/150/5 146/151/5 142/152/5 +f 151/153/4 139/154/4 143/155/4 +f 159/156/1 157/157/1 158/158/1 +f 154/159/3 158/158/3 153/160/3 +f 156/161/4 159/162/4 154/159/4 +f 153/160/5 157/157/5 155/163/5 +f 155/164/6 160/165/6 156/161/6 +f 27/1/1 28/4/1 44/2/1 +f 28/4/1 29/7/1 45/5/1 +f 30/6/1 46/9/1 45/5/1 +f 31/8/1 47/11/1 46/9/1 +f 32/10/1 48/13/1 47/11/1 +f 17/12/1 33/15/1 48/13/1 +f 18/14/1 34/17/1 33/15/1 +f 19/16/1 35/19/1 34/17/1 +f 20/18/1 36/21/1 35/19/1 +f 21/20/1 37/166/1 36/21/1 +f 22/22/1 38/26/1 37/23/1 +f 22/22/1 23/27/1 39/25/1 +f 23/27/1 24/29/1 40/28/1 +f 24/29/1 25/31/1 41/30/1 +f 25/31/1 26/33/1 42/32/1 +f 26/33/1 27/1/1 43/3/1 +f 57/34/1 58/72/1 74/35/1 +f 56/37/1 57/34/1 73/38/1 +f 55/40/1 56/37/1 72/41/1 +f 54/43/1 55/40/1 71/44/1 +f 53/46/1 54/43/1 70/47/1 +f 53/49/1 69/167/1 68/50/1 +f 51/52/1 52/51/1 68/53/1 +f 51/52/1 67/168/1 66/55/1 +f 50/56/1 66/169/1 65/57/1 +f 49/58/1 65/170/1 80/59/1 +f 64/60/1 80/171/1 79/61/1 +f 63/62/1 79/172/1 78/63/1 +f 62/64/1 78/173/1 77/65/1 +f 61/66/1 77/174/1 76/67/1 +f 59/69/1 60/68/1 76/70/1 +f 58/72/1 59/69/1 75/73/1 +f 10/75/2 90/175/2 91/76/2 +f 9/78/2 89/176/2 90/79/2 +f 8/80/2 88/177/2 89/81/2 +f 7/82/2 87/178/2 88/83/2 +f 6/84/2 86/179/2 87/85/2 +f 5/86/2 85/180/2 86/87/2 +f 84/88/2 85/181/2 5/89/2 +f 83/91/2 84/182/2 4/90/2 +f 82/93/2 83/183/2 3/92/2 +f 81/95/2 82/184/2 2/94/2 +f 96/97/2 81/185/2 1/96/2 +f 95/99/2 96/186/2 16/98/2 +f 94/101/2 95/187/2 15/100/2 +f 93/103/2 94/188/2 14/102/2 +f 92/105/2 93/189/2 13/104/2 +f 11/77/2 91/190/2 92/107/2 +f 99/108/2 100/116/2 98/109/2 +f 103/111/1 104/120/1 101/112/1 +f 98/109/3 103/111/3 102/114/3 +f 100/116/4 104/120/4 103/111/4 +f 97/117/5 102/191/5 101/118/5 +f 99/119/6 101/118/6 104/120/6 +f 110/123/4 108/192/4 106/193/4 +f 106/193/4 120/194/4 110/123/4 +f 120/194/4 118/121/4 110/123/4 +f 118/121/4 116/195/4 114/122/4 +f 114/122/4 112/196/4 110/123/4 +f 119/124/5 105/197/5 107/125/5 +f 107/125/5 109/198/5 111/126/5 +f 111/126/5 113/199/5 119/124/5 +f 113/199/5 115/200/5 119/124/5 +f 115/200/5 117/201/5 119/124/5 +f 127/127/1 128/202/1 125/128/1 +f 122/130/6 127/133/6 126/129/6 +f 124/132/5 128/136/5 127/133/5 +f 121/131/4 126/129/4 125/128/4 +f 123/135/3 125/203/3 128/136/3 +f 131/137/2 132/145/2 130/138/2 +f 135/140/1 136/149/1 133/141/1 +f 130/138/6 135/140/6 134/143/6 +f 132/145/5 136/149/5 135/140/5 +f 129/146/4 134/204/4 133/147/4 +f 131/148/3 133/147/3 136/149/3 +f 142/152/5 140/205/5 138/206/5 +f 138/206/5 152/207/5 142/152/5 +f 152/207/5 150/150/5 142/152/5 +f 150/150/5 148/208/5 146/151/5 +f 146/151/5 144/209/5 142/152/5 +f 151/153/4 137/210/4 139/154/4 +f 139/154/4 141/211/4 143/155/4 +f 143/155/4 145/212/4 151/153/4 +f 145/212/4 147/213/4 151/153/4 +f 147/213/4 149/214/4 151/153/4 +f 159/156/1 160/215/1 157/157/1 +f 154/159/3 159/162/3 158/158/3 +f 156/161/4 160/165/4 159/162/4 +f 153/160/5 158/158/5 157/157/5 +f 155/164/6 157/216/6 160/165/6 +s 1 +f 13/104/4 28/4/7 12/106/7 +f 6/84/8 21/24/5 5/86/5 +f 14/102/9 29/7/4 13/104/4 +f 7/82/10 22/22/8 6/84/8 +f 15/100/11 30/6/9 14/102/9 +f 8/80/12 23/27/10 7/82/10 +f 16/98/13 31/8/11 15/100/11 +f 9/78/3 24/29/12 8/80/12 +f 2/94/14 17/12/6 1/96/6 +f 1/96/6 32/10/13 16/98/13 +f 10/75/15 25/31/3 9/78/3 +f 3/92/16 18/14/14 2/94/14 +f 11/77/17 26/33/15 10/75/15 +f 4/90/18 19/16/16 3/92/16 +f 12/106/7 27/1/17 11/77/17 +f 5/89/5 20/18/18 4/90/18 +f 34/17/15 49/58/3 33/15/3 +f 33/15/3 64/60/12 48/13/12 +f 42/32/14 57/34/6 41/30/6 +f 35/19/17 50/56/15 34/17/15 +f 43/3/16 58/72/14 42/32/14 +f 36/21/7 51/52/17 35/19/17 +f 44/2/18 59/69/16 43/3/16 +f 37/166/4 52/51/7 36/21/7 +f 45/5/5 60/68/18 44/2/18 +f 38/26/9 53/46/4 37/23/4 +f 46/9/8 61/66/5 45/5/5 +f 39/25/11 54/43/9 38/26/9 +f 47/11/10 62/64/8 46/9/8 +f 40/28/13 55/40/11 39/25/11 +f 48/13/12 63/62/10 47/11/10 +f 41/30/6 56/37/13 40/28/13 +f 76/70/18 91/217/16 75/71/16 +f 69/167/4 84/218/7 68/50/7 +f 77/174/5 92/219/18 76/67/18 +f 70/47/9 85/220/4 69/48/4 +f 78/173/8 93/221/5 77/65/5 +f 71/44/11 86/222/9 70/45/9 +f 79/172/10 94/223/8 78/63/8 +f 72/41/13 87/224/11 71/42/11 +f 80/171/12 95/225/10 79/61/10 +f 73/38/6 88/226/13 72/39/13 +f 66/169/15 81/227/3 65/57/3 +f 65/170/3 96/228/12 80/59/12 +f 74/35/14 89/229/6 73/36/6 +f 67/168/17 82/230/15 66/55/15 +f 75/73/16 90/231/14 74/74/14 +f 68/53/7 83/232/17 67/54/17 +f 106/233/6 107/234/19 105/235/6 +f 108/236/19 109/237/2 107/234/19 +f 110/238/2 111/239/20 109/240/2 +f 112/241/20 113/242/3 111/239/20 +f 114/243/3 115/244/21 113/242/3 +f 116/245/21 117/246/1 115/244/21 +f 118/247/1 119/248/22 117/246/1 +f 120/249/22 105/235/6 119/248/22 +f 138/250/3 139/251/20 137/252/3 +f 139/251/20 142/253/2 141/254/2 +f 142/255/2 143/256/19 141/257/2 +f 144/258/19 145/259/6 143/256/19 +f 146/260/6 147/261/22 145/259/6 +f 148/262/22 149/263/1 147/261/22 +f 150/264/1 151/265/21 149/263/1 +f 152/266/21 137/252/3 151/265/21 +f 13/104/4 29/7/4 28/4/7 +f 6/84/8 22/22/8 21/24/5 +f 14/102/9 30/6/9 29/7/4 +f 7/82/10 23/27/10 22/22/8 +f 15/100/11 31/8/11 30/6/9 +f 8/80/12 24/29/12 23/27/10 +f 16/98/13 32/10/13 31/8/11 +f 9/78/3 25/31/3 24/29/12 +f 2/94/14 18/14/14 17/12/6 +f 1/96/6 17/12/6 32/10/13 +f 10/75/15 26/33/15 25/31/3 +f 3/92/16 19/16/16 18/14/14 +f 11/77/17 27/1/17 26/33/15 +f 4/90/18 20/18/18 19/16/16 +f 12/106/7 28/4/7 27/1/17 +f 5/89/5 21/20/5 20/18/18 +f 34/17/15 50/56/15 49/58/3 +f 33/15/3 49/58/3 64/60/12 +f 42/32/14 58/72/14 57/34/6 +f 35/19/17 51/52/17 50/56/15 +f 43/3/16 59/69/16 58/72/14 +f 36/21/7 52/51/7 51/52/17 +f 44/2/18 60/68/18 59/69/16 +f 37/166/4 53/49/4 52/51/7 +f 45/5/5 61/66/5 60/68/18 +f 38/26/9 54/43/9 53/46/4 +f 46/9/8 62/64/8 61/66/5 +f 39/25/11 55/40/11 54/43/9 +f 47/11/10 63/62/10 62/64/8 +f 40/28/13 56/37/13 55/40/11 +f 48/13/12 64/60/12 63/62/10 +f 41/30/6 57/34/6 56/37/13 +f 76/70/18 92/267/18 91/217/16 +f 69/167/4 85/268/4 84/218/7 +f 77/174/5 93/269/5 92/219/18 +f 70/47/9 86/270/9 85/220/4 +f 78/173/8 94/271/8 93/221/5 +f 71/44/11 87/272/11 86/222/9 +f 79/172/10 95/273/10 94/223/8 +f 72/41/13 88/274/13 87/224/11 +f 80/171/12 96/275/12 95/225/10 +f 73/38/6 89/276/6 88/226/13 +f 66/169/15 82/277/15 81/227/3 +f 65/170/3 81/278/3 96/228/12 +f 74/35/14 90/279/14 89/229/6 +f 67/168/17 83/280/17 82/230/15 +f 75/73/16 91/281/16 90/231/14 +f 68/53/7 84/282/7 83/232/17 +f 106/233/6 108/236/19 107/234/19 +f 108/236/19 110/283/2 109/237/2 +f 110/238/2 112/241/20 111/239/20 +f 112/241/20 114/243/3 113/242/3 +f 114/243/3 116/245/21 115/244/21 +f 116/245/21 118/247/1 117/246/1 +f 118/247/1 120/249/22 119/248/22 +f 120/249/22 106/233/6 105/235/6 +f 138/250/3 140/284/20 139/251/20 +f 139/251/20 140/284/20 142/253/2 +f 142/255/2 144/258/19 143/256/19 +f 144/258/19 146/260/6 145/259/6 +f 146/260/6 148/262/22 147/261/22 +f 148/262/22 150/264/1 149/263/1 +f 150/264/1 152/266/21 151/265/21 +f 152/266/21 138/250/3 137/252/3 +o ArmLower1 +v 0.031250 1.625000 0.875000 +v 0.093750 1.625000 0.875000 +v 0.093750 1.625000 1.000000 +v 0.031250 1.625000 1.000000 +v 0.031250 2.375000 1.000000 +v 0.093750 2.375000 1.000000 +v 0.031250 2.375000 0.875000 +v 0.093750 2.375000 0.875000 +v 0.125000 1.625000 1.062500 +v 0.000000 1.625000 1.062500 +v 0.125000 1.536612 1.025888 +v 0.000000 1.536612 1.025888 +v 0.125000 1.500000 0.937500 +v 0.000000 1.500000 0.937500 +v 0.125000 1.536612 0.849112 +v 0.000000 1.536612 0.849112 +v 0.125000 1.625000 0.812500 +v 0.000000 1.625000 0.812500 +v 0.125000 1.713388 0.849112 +v 0.000000 1.713388 0.849112 +v 0.125000 1.750000 0.937500 +v 0.000000 1.750000 0.937500 +v 0.125000 1.713388 1.025888 +v 0.000000 1.713388 1.025888 +v 0.125000 2.375000 1.062500 +v 0.000000 2.375000 1.062500 +v 0.125000 2.286612 1.025888 +v 0.000000 2.286612 1.025888 +v 0.125000 2.250000 0.937500 +v 0.000000 2.250000 0.937500 +v 0.125000 2.286612 0.849112 +v 0.000000 2.286612 0.849112 +v 0.125000 2.375000 0.812500 +v 0.000000 2.375000 0.812500 +v 0.125000 2.463388 0.849112 +v 0.000000 2.463388 0.849112 +v 0.125000 2.500000 0.937500 +v 0.000000 2.500000 0.937500 +v 0.125000 2.463388 1.025888 +v 0.000000 2.463388 1.025888 +vt 0.763158 0.666667 +vt 0.684211 0.657407 +vt 0.763158 0.657407 +vt 0.763158 0.685185 +vt 0.684211 0.666667 +vt 0.763158 0.638889 +vt 0.684211 0.629630 +vt 0.763158 0.629630 +vt 0.684211 0.638889 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.688096 0.624161 +vt 0.688096 0.598061 +vt 0.706641 0.598061 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.688096 0.624161 +vt 0.684211 0.685185 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.697369 0.592656 +vt 0.710481 0.611111 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.688096 0.598061 +vt 0.697369 0.592656 +vt 0.706641 0.598061 +vt 0.710481 0.611111 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.736842 0.574074 +vt 0.736842 0.592593 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.789474 0.574074 +vt 0.789474 0.574074 +vt 0.723684 0.574074 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 0.7071 0.7071 +s off +f 163/285/23 165/286/23 164/287/23 +f 162/288/24 166/289/24 163/285/24 +f 161/290/25 168/291/25 162/292/25 +f 164/287/26 167/293/26 161/290/26 +f 182/294/26 178/295/26 174/296/26 +f 183/297/24 171/298/24 175/299/24 +f 198/300/26 194/301/26 190/302/26 +f 195/303/24 197/304/24 199/305/24 +f 163/285/23 166/289/23 165/286/23 +f 162/288/24 168/306/24 166/289/24 +f 161/290/25 167/293/25 168/291/25 +f 164/287/26 165/286/26 167/293/26 +f 174/296/26 172/307/26 170/308/26 +f 170/308/26 184/309/26 174/296/26 +f 184/309/26 182/294/26 174/296/26 +f 182/294/26 180/310/26 178/295/26 +f 178/295/26 176/311/26 174/296/26 +f 183/297/24 169/312/24 171/298/24 +f 171/298/24 173/313/24 175/299/24 +f 175/299/24 177/314/24 183/297/24 +f 177/314/24 179/315/24 183/297/24 +f 179/315/24 181/316/24 183/297/24 +f 190/302/26 188/317/26 186/318/26 +f 186/318/26 200/319/26 198/300/26 +f 198/300/26 196/320/26 194/301/26 +f 194/301/26 192/321/26 190/302/26 +f 190/302/26 186/318/26 198/300/26 +f 199/305/24 185/322/24 187/323/24 +f 187/323/24 189/324/24 199/305/24 +f 189/324/24 191/325/24 199/305/24 +f 191/325/24 193/326/24 199/305/24 +f 193/326/24 195/303/24 199/305/24 +s 1 +f 170/327/23 171/328/27 169/329/23 +f 172/330/27 173/331/28 171/328/27 +f 174/332/28 175/333/29 173/334/28 +f 176/335/29 177/336/25 175/333/29 +f 178/337/25 179/338/30 177/336/25 +f 180/339/30 181/340/31 179/338/30 +f 182/341/31 183/342/32 181/340/31 +f 184/343/32 169/329/23 183/342/32 +f 186/344/23 187/345/27 185/346/23 +f 188/347/27 189/348/28 187/345/27 +f 190/349/28 191/350/29 189/351/28 +f 192/352/29 193/353/25 191/350/29 +f 194/354/25 195/355/30 193/353/25 +f 195/355/30 198/356/31 197/357/31 +f 198/356/31 199/358/32 197/357/31 +f 200/359/32 185/346/23 199/358/32 +f 170/327/23 172/330/27 171/328/27 +f 172/330/27 174/360/28 173/331/28 +f 174/332/28 176/335/29 175/333/29 +f 176/335/29 178/337/25 177/336/25 +f 178/337/25 180/339/30 179/338/30 +f 180/339/30 182/341/31 181/340/31 +f 182/341/31 184/343/32 183/342/32 +f 184/343/32 170/327/23 169/329/23 +f 186/344/23 188/347/27 187/345/27 +f 188/347/27 190/361/28 189/348/28 +f 190/349/28 192/352/29 191/350/29 +f 192/352/29 194/354/25 193/353/25 +f 194/354/25 196/362/30 195/355/30 +f 195/355/30 196/362/30 198/356/31 +f 198/356/31 200/359/32 199/358/32 +f 200/359/32 186/344/23 185/346/23 +o ArmLower2 +v -0.031250 1.625000 -0.875000 +v -0.093750 1.625000 -0.875000 +v -0.093750 1.625000 -1.000000 +v -0.031250 1.625000 -1.000000 +v -0.031250 2.375000 -1.000000 +v -0.093750 2.375000 -1.000000 +v -0.031250 2.375000 -0.875000 +v -0.093750 2.375000 -0.875000 +v -0.125000 1.625000 -1.062500 +v -0.000000 1.625000 -1.062500 +v -0.125000 1.536612 -1.025888 +v -0.000000 1.536612 -1.025888 +v -0.125000 1.500000 -0.937500 +v -0.000000 1.500000 -0.937500 +v -0.125000 1.536612 -0.849112 +v -0.000000 1.536612 -0.849112 +v -0.125000 1.625000 -0.812500 +v -0.000000 1.625000 -0.812500 +v -0.125000 1.713388 -0.849112 +v -0.000000 1.713388 -0.849112 +v -0.125000 1.750000 -0.937500 +v -0.000000 1.750000 -0.937500 +v -0.125000 1.713388 -1.025888 +v -0.000000 1.713388 -1.025888 +v -0.125000 2.375000 -1.062500 +v -0.000000 2.375000 -1.062500 +v -0.125000 2.286612 -1.025888 +v -0.000000 2.286612 -1.025888 +v -0.125000 2.250000 -0.937500 +v -0.000000 2.250000 -0.937500 +v -0.125000 2.286612 -0.849112 +v -0.000000 2.286612 -0.849112 +v -0.125000 2.375000 -0.812500 +v -0.000000 2.375000 -0.812500 +v -0.125000 2.463388 -0.849112 +v -0.000000 2.463388 -0.849112 +v -0.125000 2.500000 -0.937500 +v -0.000000 2.500000 -0.937500 +v -0.125000 2.463388 -1.025888 +v -0.000000 2.463388 -1.025888 +vt 0.763158 0.666667 +vt 0.684211 0.657407 +vt 0.763158 0.657407 +vt 0.763158 0.685185 +vt 0.684211 0.666667 +vt 0.763158 0.638889 +vt 0.684211 0.629630 +vt 0.763158 0.629630 +vt 0.684211 0.638889 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.688096 0.624161 +vt 0.688096 0.598061 +vt 0.706641 0.598061 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.688096 0.624161 +vt 0.684211 0.685185 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.697369 0.592656 +vt 0.710481 0.611111 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.688096 0.598061 +vt 0.697369 0.592656 +vt 0.706641 0.598061 +vt 0.710481 0.611111 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.789474 0.574074 +vt 0.789474 0.574074 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.7071 -0.7071 +s off +f 203/363/33 205/364/33 204/365/33 +f 202/366/34 206/367/34 203/363/34 +f 201/368/35 208/369/35 202/370/35 +f 204/365/36 207/371/36 201/368/36 +f 222/372/36 218/373/36 214/374/36 +f 223/375/34 211/376/34 215/377/34 +f 238/378/36 234/379/36 230/380/36 +f 235/381/34 237/382/34 239/383/34 +f 203/363/33 206/367/33 205/364/33 +f 202/366/34 208/384/34 206/367/34 +f 201/368/35 207/371/35 208/369/35 +f 204/365/36 205/364/36 207/371/36 +f 214/374/36 212/385/36 210/386/36 +f 210/386/36 224/387/36 214/374/36 +f 224/387/36 222/372/36 214/374/36 +f 222/372/36 220/388/36 218/373/36 +f 218/373/36 216/389/36 214/374/36 +f 223/375/34 209/390/34 211/376/34 +f 211/376/34 213/391/34 215/377/34 +f 215/377/34 217/392/34 223/375/34 +f 217/392/34 219/393/34 223/375/34 +f 219/393/34 221/394/34 223/375/34 +f 230/380/36 228/395/36 226/396/36 +f 226/396/36 240/397/36 238/378/36 +f 238/378/36 236/398/36 234/379/36 +f 234/379/36 232/399/36 230/380/36 +f 230/380/36 226/396/36 238/378/36 +f 239/383/34 225/400/34 227/401/34 +f 227/401/34 229/402/34 239/383/34 +f 229/402/34 231/403/34 239/383/34 +f 231/403/34 233/404/34 239/383/34 +f 233/404/34 235/381/34 239/383/34 +s 1 +f 210/405/33 211/406/37 209/407/33 +f 212/408/37 213/409/38 211/406/37 +f 214/410/38 215/411/39 213/412/38 +f 216/413/39 217/414/35 215/411/39 +f 218/415/35 219/416/40 217/414/35 +f 220/417/40 221/418/41 219/416/40 +f 222/419/41 223/420/42 221/418/41 +f 224/421/42 209/407/33 223/420/42 +f 226/422/33 227/423/37 225/424/33 +f 228/425/37 229/426/38 227/423/37 +f 230/427/38 231/428/39 229/429/38 +f 232/430/39 233/431/35 231/428/39 +f 234/432/35 235/433/40 233/431/35 +f 236/434/40 237/435/41 235/433/40 +f 238/436/41 239/437/42 237/435/41 +f 240/438/42 225/424/33 239/437/42 +f 210/405/33 212/408/37 211/406/37 +f 212/408/37 214/439/38 213/409/38 +f 214/410/38 216/413/39 215/411/39 +f 216/413/39 218/415/35 217/414/35 +f 218/415/35 220/417/40 219/416/40 +f 220/417/40 222/419/41 221/418/41 +f 222/419/41 224/421/42 223/420/42 +f 224/421/42 210/405/33 209/407/33 +f 226/422/33 228/425/37 227/423/37 +f 228/425/37 230/440/38 229/426/38 +f 230/427/38 232/430/39 231/428/39 +f 232/430/39 234/432/35 233/431/35 +f 234/432/35 236/434/40 235/433/40 +f 236/434/40 238/436/41 237/435/41 +f 238/436/41 240/438/42 239/437/42 +f 240/438/42 226/422/33 225/424/33 +o ArmUpper2 +v 0.031250 2.312500 -0.937500 +v 0.093750 2.312500 -0.937500 +v 0.031250 2.437500 -0.937500 +v 0.093750 2.437500 -0.937500 +v 0.031250 2.437500 -0.437500 +v 0.031250 2.312500 -0.437500 +v 0.093750 2.312500 -0.437500 +v 0.093750 2.437500 -0.437500 +v -0.000000 2.375000 -1.062500 +v 0.125000 2.375000 -1.062500 +v -0.000000 2.286612 -1.025888 +v 0.125000 2.286612 -1.025888 +v -0.000000 2.250000 -0.937500 +v 0.125000 2.250000 -0.937500 +v -0.000000 2.286612 -0.849112 +v 0.125000 2.286612 -0.849112 +v -0.000000 2.375000 -0.812500 +v 0.125000 2.375000 -0.812500 +v -0.000000 2.463388 -0.849112 +v 0.125000 2.463388 -0.849112 +v -0.000000 2.500000 -0.937500 +v 0.125000 2.500000 -0.937500 +v -0.000000 2.463388 -1.025888 +v 0.125000 2.463388 -1.025888 +v -0.000000 2.375000 -0.562500 +v 0.125000 2.375000 -0.562500 +v -0.000000 2.286612 -0.525888 +v 0.125000 2.286612 -0.525888 +v -0.000000 2.250000 -0.437500 +v 0.125000 2.250000 -0.437500 +v -0.000000 2.286612 -0.349112 +v 0.125000 2.286612 -0.349112 +v -0.000000 2.375000 -0.312500 +v 0.125000 2.375000 -0.312500 +v -0.000000 2.463388 -0.349112 +v 0.125000 2.463388 -0.349112 +v -0.000000 2.500000 -0.437500 +v 0.125000 2.500000 -0.437500 +v -0.000000 2.463388 -0.525888 +v 0.125000 2.463388 -0.525888 +vt 0.815789 0.666667 +vt 0.763158 0.657407 +vt 0.815789 0.657407 +vt 0.815789 0.638889 +vt 0.763158 0.629630 +vt 0.815789 0.629630 +vt 0.763158 0.638889 +vt 0.815789 0.685185 +vt 0.763158 0.666667 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.688096 0.624161 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.688096 0.624161 +vt 0.763158 0.685185 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.688096 0.598061 +vt 0.697369 0.592656 +vt 0.706641 0.598061 +vt 0.710481 0.611111 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.688096 0.598061 +vt 0.697369 0.592656 +vt 0.706641 0.598061 +vt 0.710481 0.611111 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.789474 0.574074 +vt 0.789474 0.574074 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +s off +f 243/441/43 248/442/43 244/443/43 +f 242/444/44 246/445/44 241/446/44 +f 244/443/45 247/447/45 242/444/45 +f 241/448/46 245/449/46 243/441/46 +f 262/450/45 258/451/45 254/452/45 +f 259/453/46 261/454/46 263/455/46 +f 278/456/45 274/457/45 270/458/45 +f 275/459/46 277/460/46 279/461/46 +f 243/441/43 245/449/43 248/442/43 +f 242/444/44 247/447/44 246/445/44 +f 244/443/45 248/442/45 247/447/45 +f 241/448/46 246/462/46 245/449/46 +f 254/452/45 252/463/45 250/464/45 +f 250/464/45 264/465/45 262/450/45 +f 262/450/45 260/466/45 258/451/45 +f 258/451/45 256/467/45 254/452/45 +f 254/452/45 250/464/45 262/450/45 +f 263/455/46 249/468/46 251/469/46 +f 251/469/46 253/470/46 263/455/46 +f 253/470/46 255/471/46 263/455/46 +f 255/471/46 257/472/46 263/455/46 +f 257/472/46 259/453/46 263/455/46 +f 270/458/45 268/473/45 266/474/45 +f 266/474/45 280/475/45 278/456/45 +f 278/456/45 276/476/45 274/457/45 +f 274/457/45 272/477/45 270/458/45 +f 270/458/45 266/474/45 278/456/45 +f 279/461/46 265/478/46 267/479/46 +f 267/479/46 269/480/46 279/461/46 +f 269/480/46 271/481/46 279/461/46 +f 271/481/46 273/482/46 279/461/46 +f 273/482/46 275/459/46 279/461/46 +s 1 +f 250/483/47 251/484/48 249/485/47 +f 252/486/48 253/487/44 251/484/48 +f 254/488/44 255/489/49 253/490/44 +f 256/491/49 257/492/50 255/489/49 +f 258/493/50 259/494/51 257/492/50 +f 260/495/51 261/496/43 259/494/51 +f 262/497/43 263/498/52 261/496/43 +f 264/499/52 249/485/47 263/498/52 +f 266/500/47 267/501/48 265/502/47 +f 268/503/48 269/504/44 267/501/48 +f 270/505/44 271/506/49 269/507/44 +f 272/508/49 273/509/50 271/506/49 +f 274/510/50 275/511/51 273/509/50 +f 276/512/51 277/513/43 275/511/51 +f 278/514/43 279/515/52 277/513/43 +f 280/516/52 265/502/47 279/515/52 +f 250/483/47 252/486/48 251/484/48 +f 252/486/48 254/517/44 253/487/44 +f 254/488/44 256/491/49 255/489/49 +f 256/491/49 258/493/50 257/492/50 +f 258/493/50 260/495/51 259/494/51 +f 260/495/51 262/497/43 261/496/43 +f 262/497/43 264/499/52 263/498/52 +f 264/499/52 250/483/47 249/485/47 +f 266/500/47 268/503/48 267/501/48 +f 268/503/48 270/518/44 269/504/44 +f 270/505/44 272/508/49 271/506/49 +f 272/508/49 274/510/50 273/509/50 +f 274/510/50 276/512/51 275/511/51 +f 276/512/51 278/514/43 277/513/43 +f 278/514/43 280/516/52 279/515/52 +f 280/516/52 266/500/47 265/502/47 +o ArmUpper1 +v -0.031250 2.312500 0.937500 +v -0.093750 2.312500 0.937500 +v -0.031250 2.437500 0.937500 +v -0.093750 2.437500 0.937500 +v -0.031250 2.437500 0.437500 +v -0.031250 2.312500 0.437500 +v -0.093750 2.312500 0.437500 +v -0.093750 2.437500 0.437500 +v 0.000000 2.375000 1.062500 +v -0.125000 2.375000 1.062500 +v 0.000000 2.286612 1.025888 +v -0.125000 2.286612 1.025888 +v 0.000000 2.250000 0.937500 +v -0.125000 2.250000 0.937500 +v 0.000000 2.286612 0.849112 +v -0.125000 2.286612 0.849112 +v 0.000000 2.375000 0.812500 +v -0.125000 2.375000 0.812500 +v 0.000000 2.463388 0.849112 +v -0.125000 2.463388 0.849112 +v 0.000000 2.500000 0.937500 +v -0.125000 2.500000 0.937500 +v 0.000000 2.463388 1.025888 +v -0.125000 2.463388 1.025888 +v 0.000000 2.375000 0.562500 +v -0.125000 2.375000 0.562500 +v 0.000000 2.286612 0.525888 +v -0.125000 2.286612 0.525888 +v 0.000000 2.250000 0.437500 +v -0.125000 2.250000 0.437500 +v 0.000000 2.286612 0.349112 +v -0.125000 2.286612 0.349112 +v 0.000000 2.375000 0.312500 +v -0.125000 2.375000 0.312500 +v 0.000000 2.463388 0.349112 +v -0.125000 2.463388 0.349112 +v 0.000000 2.500000 0.437500 +v -0.125000 2.500000 0.437500 +v 0.000000 2.463388 0.525888 +v -0.125000 2.463388 0.525888 +vt 0.815789 0.666667 +vt 0.763158 0.657407 +vt 0.815789 0.657407 +vt 0.815789 0.638889 +vt 0.763158 0.629630 +vt 0.815789 0.629630 +vt 0.763158 0.638889 +vt 0.815789 0.685185 +vt 0.763158 0.666667 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.688096 0.624161 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.688096 0.624161 +vt 0.763158 0.685185 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.688096 0.598061 +vt 0.697369 0.592656 +vt 0.706641 0.598061 +vt 0.710481 0.611111 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.688096 0.598061 +vt 0.697369 0.592656 +vt 0.706641 0.598061 +vt 0.710481 0.611111 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.789474 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.710526 0.574074 +vt 0.710526 0.592593 +vt 0.723684 0.592593 +vt 0.736842 0.574074 +vt 0.736842 0.592593 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.776316 0.574074 +vt 0.789474 0.574074 +vt 0.697368 0.574074 +vt 0.723684 0.574074 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +s off +f 283/519/53 288/520/53 284/521/53 +f 282/522/54 286/523/54 281/524/54 +f 284/521/55 287/525/55 282/522/55 +f 281/526/56 285/527/56 283/519/56 +f 302/528/55 298/529/55 294/530/55 +f 299/531/56 301/532/56 303/533/56 +f 318/534/55 314/535/55 310/536/55 +f 315/537/56 317/538/56 319/539/56 +f 283/519/53 285/527/53 288/520/53 +f 282/522/54 287/525/54 286/523/54 +f 284/521/55 288/520/55 287/525/55 +f 281/526/56 286/540/56 285/527/56 +f 294/530/55 292/541/55 290/542/55 +f 290/542/55 304/543/55 302/528/55 +f 302/528/55 300/544/55 298/529/55 +f 298/529/55 296/545/55 294/530/55 +f 294/530/55 290/542/55 302/528/55 +f 303/533/56 289/546/56 291/547/56 +f 291/547/56 293/548/56 303/533/56 +f 293/548/56 295/549/56 303/533/56 +f 295/549/56 297/550/56 303/533/56 +f 297/550/56 299/531/56 303/533/56 +f 310/536/55 308/551/55 306/552/55 +f 306/552/55 320/553/55 318/534/55 +f 318/534/55 316/554/55 314/535/55 +f 314/535/55 312/555/55 310/536/55 +f 310/536/55 306/552/55 318/534/55 +f 319/539/56 305/556/56 307/557/56 +f 307/557/56 309/558/56 319/539/56 +f 309/558/56 311/559/56 319/539/56 +f 311/559/56 313/560/56 319/539/56 +f 313/560/56 315/537/56 319/539/56 +s 1 +f 290/561/57 291/562/58 289/563/57 +f 291/562/58 294/564/54 293/565/54 +f 294/566/54 295/567/59 293/568/54 +f 296/569/59 297/570/60 295/567/59 +f 298/571/60 299/572/61 297/570/60 +f 300/573/61 301/574/53 299/572/61 +f 302/575/53 303/576/62 301/574/53 +f 304/577/62 289/563/57 303/576/62 +f 306/578/57 307/579/58 305/580/57 +f 308/581/58 309/582/54 307/579/58 +f 310/583/54 311/584/59 309/585/54 +f 311/584/59 314/586/60 313/587/60 +f 314/586/60 315/588/61 313/587/60 +f 315/588/61 318/589/53 317/590/53 +f 318/589/53 319/591/62 317/590/53 +f 320/592/62 305/580/57 319/591/62 +f 290/561/57 292/593/58 291/562/58 +f 291/562/58 292/593/58 294/564/54 +f 294/566/54 296/569/59 295/567/59 +f 296/569/59 298/571/60 297/570/60 +f 298/571/60 300/573/61 299/572/61 +f 300/573/61 302/575/53 301/574/53 +f 302/575/53 304/577/62 303/576/62 +f 304/577/62 290/561/57 289/563/57 +f 306/578/57 308/581/58 307/579/58 +f 308/581/58 310/594/54 309/582/54 +f 310/583/54 312/595/59 311/584/59 +f 311/584/59 312/595/59 314/586/60 +f 314/586/60 316/596/61 315/588/61 +f 315/588/61 316/596/61 318/589/53 +f 318/589/53 320/592/62 319/591/62 +f 320/592/62 306/578/57 305/580/57 +o Head2 +v -0.125000 2.750000 0.000000 +v 0.125000 2.750000 0.000000 +v -0.125000 2.750000 -0.250000 +v 0.125000 2.750000 -0.250000 +v -0.125000 1.750000 -0.250000 +v -0.125000 1.750000 0.000000 +v 0.125000 1.750000 0.000000 +v 0.125000 1.750000 -0.250000 +v -0.062500 2.500000 -0.250000 +v 0.062500 2.500000 -0.250000 +v -0.062500 2.500000 -0.437500 +v 0.062500 2.500000 -0.437500 +v -0.062500 2.250000 -0.437500 +v 0.062500 2.250000 -0.437500 +v -0.062500 2.250000 -0.250000 +v 0.062500 2.250000 -0.250000 +v 0.250000 2.625000 -0.093750 +v 0.250000 1.875000 -0.093750 +v 0.250000 2.625000 -0.156250 +v 0.250000 1.875000 -0.156250 +v 0.125000 2.625000 -0.093750 +v 0.125000 1.875000 -0.093750 +v 0.125000 2.625000 -0.156250 +v 0.125000 1.875000 -0.156250 +v 0.187500 2.562500 -0.093750 +v 0.187500 1.937500 -0.093750 +v 0.187500 2.562500 -0.156250 +v 0.187500 1.937500 -0.156250 +v 0.125000 2.562500 -0.093750 +v 0.125000 1.937500 -0.093750 +v 0.125000 2.562500 -0.156250 +v 0.125000 1.937500 -0.156250 +v -0.250001 2.625000 -0.156250 +v -0.250001 1.875000 -0.156250 +v -0.250001 2.625000 -0.093750 +v -0.250001 1.875000 -0.093750 +v -0.125001 2.625000 -0.156250 +v -0.125001 1.875000 -0.156250 +v -0.125001 2.625000 -0.093750 +v -0.125001 1.875000 -0.093750 +v -0.187501 2.562500 -0.156250 +v -0.187501 1.937500 -0.156250 +v -0.187501 2.562500 -0.093750 +v -0.187501 1.937500 -0.093750 +v -0.125001 2.562500 -0.156250 +v -0.125001 1.937500 -0.156250 +v -0.125001 2.562500 -0.093750 +v -0.125001 1.937500 -0.093750 +v -0.125000 2.375000 -0.562500 +v -0.000000 2.375000 -0.562500 +v -0.125000 2.286612 -0.525888 +v -0.000000 2.286612 -0.525888 +v -0.125000 2.250000 -0.437500 +v -0.000000 2.250000 -0.437500 +v -0.125000 2.286612 -0.349112 +v -0.000000 2.286612 -0.349112 +v -0.125000 2.375000 -0.312500 +v -0.000000 2.375000 -0.312500 +v -0.125000 2.463388 -0.349112 +v -0.000000 2.463388 -0.349112 +v -0.125000 2.500000 -0.437500 +v -0.000000 2.500000 -0.437500 +v -0.125000 2.463388 -0.525888 +v -0.000000 2.463388 -0.525888 +vt 0.723684 0.907407 +vt 0.750000 0.870370 +vt 0.750000 0.907407 +vt 0.750000 0.722222 +vt 0.723684 0.685185 +vt 0.750000 0.685185 +vt 0.802632 0.870370 +vt 0.828947 0.722222 +vt 0.828947 0.870370 +vt 0.776316 0.722222 +vt 0.776316 0.870370 +vt 0.723684 0.870370 +vt 0.802632 0.722222 +vt 0.875000 0.574074 +vt 0.861842 0.601852 +vt 0.861842 0.574074 +vt 0.875000 0.601852 +vt 0.901316 0.620370 +vt 0.875000 0.620370 +vt 0.901316 0.601852 +vt 0.914474 0.574074 +vt 0.914474 0.601852 +vt 0.901316 0.574074 +vt 0.940789 0.574074 +vt 0.940789 0.601852 +vt 0.703947 0.703704 +vt 0.710526 0.814815 +vt 0.703947 0.814815 +vt 0.710526 0.685185 +vt 0.710526 0.703704 +vt 0.703947 0.833333 +vt 0.723684 0.805556 +vt 0.717105 0.712963 +vt 0.723684 0.712963 +vt 0.717105 0.685185 +vt 0.723684 0.694444 +vt 0.717105 0.694444 +vt 0.723684 0.833333 +vt 0.717105 0.824074 +vt 0.723684 0.824074 +vt 0.697368 0.824074 +vt 0.710526 0.833333 +vt 0.717105 0.833333 +vt 0.717105 0.805556 +vt 0.697368 0.712963 +vt 0.703947 0.685185 +vt 0.697368 0.694444 +vt 0.697368 0.685185 +vt 0.703947 0.703704 +vt 0.710526 0.814815 +vt 0.703947 0.814815 +vt 0.710526 0.685185 +vt 0.710526 0.703704 +vt 0.703947 0.833333 +vt 0.723684 0.805556 +vt 0.717105 0.712963 +vt 0.723684 0.712963 +vt 0.717105 0.685185 +vt 0.723684 0.694444 +vt 0.717105 0.694444 +vt 0.723684 0.833333 +vt 0.717105 0.824074 +vt 0.723684 0.824074 +vt 0.697368 0.824074 +vt 0.710526 0.833333 +vt 0.717105 0.833333 +vt 0.717105 0.805556 +vt 0.697368 0.712963 +vt 0.703947 0.685185 +vt 0.697368 0.694444 +vt 0.697368 0.685185 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.688096 0.624161 +vt 0.723684 0.722222 +vt 0.723684 0.685185 +vt 0.697368 0.833333 +vt 0.697368 0.805556 +vt 0.723684 0.685185 +vt 0.697368 0.833333 +vt 0.697368 0.805556 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.688096 0.598061 +vt 0.697369 0.592656 +vt 0.706641 0.598061 +vt 0.710481 0.611111 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.789474 0.574074 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +s off +f 322/597/63 323/598/63 321/599/63 +f 325/600/64 327/601/64 326/602/64 +f 322/603/65 328/604/65 324/605/65 +f 323/598/66 326/606/66 321/607/66 +f 324/608/67 325/600/67 323/598/67 +f 321/607/68 327/609/68 322/603/68 +f 330/610/63 331/611/63 329/612/63 +f 332/613/67 333/614/67 331/615/67 +f 334/616/64 335/617/64 333/618/64 +f 336/619/65 332/613/65 330/610/65 +f 333/618/66 329/620/66 331/621/66 +f 338/622/65 339/623/65 337/624/65 +f 338/622/64 344/625/64 340/626/64 +f 339/623/63 341/627/63 337/624/63 +f 345/628/66 348/629/66 346/630/66 +f 352/631/63 346/632/63 348/633/63 +f 349/634/64 347/635/64 345/636/64 +f 341/627/68 345/637/68 337/624/68 +f 343/638/67 347/635/67 351/639/67 +f 340/626/67 347/640/67 339/623/67 +f 344/625/67 348/633/67 340/626/67 +f 337/624/68 346/641/68 338/622/68 +f 342/642/68 346/643/68 350/644/68 +f 354/645/66 355/646/66 353/647/66 +f 354/645/64 360/648/64 356/649/64 +f 355/646/63 357/650/63 353/647/63 +f 361/651/65 364/652/65 362/653/65 +f 368/654/63 362/655/63 364/656/63 +f 365/657/64 363/658/64 361/659/64 +f 357/650/67 361/660/67 353/647/67 +f 359/661/68 363/658/68 367/662/68 +f 356/649/68 363/663/68 355/646/68 +f 360/648/68 364/656/68 356/649/68 +f 353/647/67 362/664/67 354/645/67 +f 358/665/67 362/666/67 366/667/67 +f 382/668/65 378/669/65 374/670/65 +f 379/671/66 381/672/66 383/673/66 +f 322/597/63 324/608/63 323/598/63 +f 325/600/64 328/674/64 327/601/64 +f 322/603/65 327/609/65 328/604/65 +f 323/598/66 325/600/66 326/606/66 +f 324/608/67 328/674/67 325/600/67 +f 321/607/68 326/606/68 327/609/68 +f 330/610/63 332/613/63 331/611/63 +f 332/613/67 334/616/67 333/614/67 +f 334/616/64 336/619/64 335/617/64 +f 336/619/65 334/616/65 332/613/65 +f 333/618/66 335/617/66 329/620/66 +f 338/622/65 340/626/65 339/623/65 +f 338/622/64 342/642/64 344/625/64 +f 339/623/63 343/638/63 341/627/63 +f 345/628/66 347/640/66 348/629/66 +f 352/631/63 350/675/63 346/632/63 +f 349/634/64 351/639/64 347/635/64 +f 341/627/68 349/676/68 345/637/68 +f 343/638/67 339/623/67 347/635/67 +f 340/626/67 348/629/67 347/640/67 +f 344/625/67 352/631/67 348/633/67 +f 337/624/68 345/677/68 346/641/68 +f 342/642/68 338/622/68 346/643/68 +f 354/645/66 356/649/66 355/646/66 +f 354/645/64 358/665/64 360/648/64 +f 355/646/63 359/661/63 357/650/63 +f 361/651/65 363/663/65 364/652/65 +f 368/654/63 366/678/63 362/655/63 +f 365/657/64 367/662/64 363/658/64 +f 357/650/67 365/679/67 361/660/67 +f 359/661/68 355/646/68 363/658/68 +f 356/649/68 364/652/68 363/663/68 +f 360/648/68 368/654/68 364/656/68 +f 353/647/67 361/680/67 362/664/67 +f 358/665/67 354/645/67 362/666/67 +f 374/670/65 372/681/65 370/682/65 +f 370/682/65 384/683/65 382/668/65 +f 382/668/65 380/684/65 378/669/65 +f 378/669/65 376/685/65 374/670/65 +f 374/670/65 370/682/65 382/668/65 +f 383/673/66 369/686/66 371/687/66 +f 371/687/66 373/688/66 383/673/66 +f 373/688/66 375/689/66 383/673/66 +f 375/689/66 377/690/66 383/673/66 +f 377/690/66 379/671/66 383/673/66 +s 1 +f 370/691/67 371/692/69 369/693/67 +f 372/694/69 373/695/64 371/692/69 +f 374/696/64 375/697/70 373/698/64 +f 376/699/70 377/700/68 375/697/70 +f 378/701/68 379/702/71 377/700/68 +f 380/703/71 381/704/63 379/702/71 +f 382/705/63 383/706/72 381/704/63 +f 384/707/72 369/693/67 383/706/72 +f 370/691/67 372/694/69 371/692/69 +f 372/694/69 374/708/64 373/695/64 +f 374/696/64 376/699/70 375/697/70 +f 376/699/70 378/701/68 377/700/68 +f 378/701/68 380/703/71 379/702/71 +f 380/703/71 382/705/63 381/704/63 +f 382/705/63 384/707/72 383/706/72 +f 384/707/72 370/691/67 369/693/67 +o Head1 +v 0.125000 2.750000 -0.000000 +v -0.125000 2.750000 0.000000 +v 0.125000 2.750000 0.250000 +v -0.125000 2.750000 0.250000 +v 0.125000 1.750000 0.250000 +v 0.125000 1.750000 -0.000000 +v -0.125000 1.750000 0.000000 +v -0.125000 1.750000 0.250000 +v 0.062500 2.500000 0.250000 +v -0.062500 2.500000 0.250000 +v 0.062500 2.500000 0.437500 +v -0.062500 2.500000 0.437500 +v 0.062500 2.250000 0.437500 +v -0.062500 2.250000 0.437500 +v 0.062500 2.250000 0.250000 +v -0.062500 2.250000 0.250000 +v -0.250000 2.625000 0.093750 +v -0.250000 1.875000 0.093750 +v -0.250000 2.625000 0.156250 +v -0.250000 1.875000 0.156250 +v -0.125000 2.625000 0.093750 +v -0.125000 1.875000 0.093750 +v -0.125000 2.625000 0.156250 +v -0.125000 1.875000 0.156250 +v -0.187500 2.562500 0.093750 +v -0.187500 1.937500 0.093750 +v -0.187500 2.562500 0.156250 +v -0.187500 1.937500 0.156250 +v -0.125000 2.562500 0.093750 +v -0.125000 1.937500 0.093750 +v -0.125000 2.562500 0.156250 +v -0.125000 1.937500 0.156250 +v 0.250001 2.625000 0.156250 +v 0.250001 1.875000 0.156250 +v 0.250001 2.625000 0.093750 +v 0.250001 1.875000 0.093750 +v 0.125001 2.625000 0.156250 +v 0.125001 1.875000 0.156250 +v 0.125001 2.625000 0.093750 +v 0.125001 1.875000 0.093750 +v 0.187501 2.562500 0.156250 +v 0.187501 1.937500 0.156250 +v 0.187501 2.562500 0.093750 +v 0.187501 1.937500 0.093750 +v 0.125001 2.562500 0.156250 +v 0.125001 1.937500 0.156250 +v 0.125001 2.562500 0.093750 +v 0.125001 1.937500 0.093750 +v 0.125000 2.375000 0.562500 +v 0.000000 2.375000 0.562500 +v 0.125000 2.286612 0.525888 +v 0.000000 2.286612 0.525888 +v 0.125000 2.250000 0.437500 +v 0.000000 2.250000 0.437500 +v 0.125000 2.286612 0.349112 +v 0.000000 2.286612 0.349112 +v 0.125000 2.375000 0.312500 +v 0.000000 2.375000 0.312500 +v 0.125000 2.463388 0.349112 +v 0.000000 2.463388 0.349112 +v 0.125000 2.500000 0.437500 +v 0.000000 2.500000 0.437500 +v 0.125000 2.463388 0.525888 +v 0.000000 2.463388 0.525888 +vt 0.750000 0.907407 +vt 0.723684 0.870370 +vt 0.750000 0.870370 +vt 0.750000 0.685185 +vt 0.723684 0.722222 +vt 0.723684 0.685185 +vt 0.802632 0.870370 +vt 0.828947 0.722222 +vt 0.828947 0.870370 +vt 0.776316 0.722222 +vt 0.776316 0.870370 +vt 0.750000 0.722222 +vt 0.802632 0.722222 +vt 0.875000 0.574074 +vt 0.861842 0.601852 +vt 0.861842 0.574074 +vt 0.875000 0.601852 +vt 0.901316 0.620370 +vt 0.875000 0.620370 +vt 0.901316 0.601852 +vt 0.914474 0.574074 +vt 0.914474 0.601852 +vt 0.901316 0.574074 +vt 0.940789 0.574074 +vt 0.940789 0.601852 +vt 0.703947 0.703704 +vt 0.710526 0.814815 +vt 0.703947 0.814815 +vt 0.710526 0.685185 +vt 0.710526 0.703704 +vt 0.703947 0.833333 +vt 0.723684 0.805556 +vt 0.717105 0.712963 +vt 0.723684 0.712963 +vt 0.717105 0.694444 +vt 0.723684 0.685185 +vt 0.723684 0.694444 +vt 0.723684 0.833333 +vt 0.717105 0.824074 +vt 0.723684 0.824074 +vt 0.697368 0.824074 +vt 0.710526 0.833333 +vt 0.717105 0.833333 +vt 0.717105 0.805556 +vt 0.697368 0.712963 +vt 0.703947 0.685185 +vt 0.697368 0.694444 +vt 0.697368 0.685185 +vt 0.703947 0.703704 +vt 0.710526 0.814815 +vt 0.703947 0.814815 +vt 0.710526 0.685185 +vt 0.710526 0.703704 +vt 0.710526 0.833333 +vt 0.703947 0.833333 +vt 0.723684 0.805556 +vt 0.717105 0.712963 +vt 0.723684 0.712963 +vt 0.717105 0.685185 +vt 0.723684 0.694444 +vt 0.717105 0.694444 +vt 0.723684 0.833333 +vt 0.717105 0.824074 +vt 0.723684 0.824074 +vt 0.697368 0.824074 +vt 0.717105 0.833333 +vt 0.717105 0.805556 +vt 0.697368 0.712963 +vt 0.703947 0.685185 +vt 0.697368 0.694444 +vt 0.697368 0.685185 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.688096 0.624161 +vt 0.723684 0.907407 +vt 0.717105 0.685185 +vt 0.697368 0.833333 +vt 0.697368 0.805556 +vt 0.723684 0.685185 +vt 0.697368 0.833333 +vt 0.697368 0.805556 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.688096 0.598061 +vt 0.697369 0.592656 +vt 0.706641 0.598061 +vt 0.710481 0.611111 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.789474 0.574074 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +s off +f 385/709/73 388/710/73 387/711/73 +f 390/712/74 392/713/74 391/714/74 +f 386/715/75 392/716/75 388/717/75 +f 387/711/76 390/718/76 385/719/76 +f 388/710/77 389/720/77 387/711/77 +f 385/719/78 391/721/78 386/715/78 +f 394/722/73 395/723/73 393/724/73 +f 396/725/77 397/726/77 395/727/77 +f 398/728/74 399/729/74 397/730/74 +f 400/731/75 396/725/75 394/722/75 +f 397/730/76 393/732/76 395/733/76 +f 402/734/75 403/735/75 401/736/75 +f 402/734/74 408/737/74 404/738/74 +f 403/735/73 405/739/73 401/736/73 +f 409/740/76 412/741/76 410/742/76 +f 412/743/73 414/744/73 410/745/73 +f 413/746/74 411/747/74 409/748/74 +f 405/739/78 409/749/78 401/736/78 +f 407/750/77 411/747/77 415/751/77 +f 404/738/77 411/752/77 403/735/77 +f 408/737/77 412/743/77 404/738/77 +f 401/736/78 410/753/78 402/734/78 +f 406/754/78 410/755/78 414/756/78 +f 418/757/76 419/758/76 417/759/76 +f 418/757/74 424/760/74 420/761/74 +f 417/759/73 423/762/73 421/763/73 +f 425/764/75 428/765/75 426/766/75 +f 432/767/73 426/768/73 428/769/73 +f 429/770/74 427/771/74 425/772/74 +f 421/763/77 425/773/77 417/759/77 +f 423/762/78 427/771/78 431/774/78 +f 420/761/78 427/775/78 419/758/78 +f 424/760/78 428/769/78 420/761/78 +f 417/759/77 426/776/77 418/757/77 +f 422/777/77 426/778/77 430/779/77 +f 446/780/75 442/781/75 438/782/75 +f 443/783/76 445/784/76 447/785/76 +f 385/709/73 386/786/73 388/710/73 +f 390/712/74 389/720/74 392/713/74 +f 386/715/75 391/721/75 392/716/75 +f 387/711/76 389/720/76 390/718/76 +f 388/710/77 392/713/77 389/720/77 +f 385/719/78 390/718/78 391/721/78 +f 394/722/73 396/725/73 395/723/73 +f 396/725/77 398/728/77 397/726/77 +f 398/728/74 400/731/74 399/729/74 +f 400/731/75 398/728/75 396/725/75 +f 397/730/76 399/729/76 393/732/76 +f 402/734/75 404/738/75 403/735/75 +f 402/734/74 406/754/74 408/737/74 +f 403/735/73 407/750/73 405/739/73 +f 409/740/76 411/752/76 412/741/76 +f 412/743/73 416/787/73 414/744/73 +f 413/746/74 415/751/74 411/747/74 +f 405/739/78 413/788/78 409/749/78 +f 407/750/77 403/735/77 411/747/77 +f 404/738/77 412/741/77 411/752/77 +f 408/737/77 416/787/77 412/743/77 +f 401/736/78 409/789/78 410/753/78 +f 406/754/78 402/734/78 410/755/78 +f 418/757/76 420/761/76 419/758/76 +f 418/757/74 422/777/74 424/760/74 +f 417/759/73 419/758/73 423/762/73 +f 425/764/75 427/775/75 428/765/75 +f 432/767/73 430/790/73 426/768/73 +f 429/770/74 431/774/74 427/771/74 +f 421/763/77 429/791/77 425/773/77 +f 423/762/78 419/758/78 427/771/78 +f 420/761/78 428/765/78 427/775/78 +f 424/760/78 432/767/78 428/769/78 +f 417/759/77 425/792/77 426/776/77 +f 422/777/77 418/757/77 426/778/77 +f 438/782/75 436/793/75 434/794/75 +f 434/794/75 448/795/75 446/780/75 +f 446/780/75 444/796/75 442/781/75 +f 442/781/75 440/797/75 438/782/75 +f 438/782/75 434/794/75 446/780/75 +f 447/785/76 433/798/76 435/799/76 +f 435/799/76 437/800/76 447/785/76 +f 437/800/76 439/801/76 447/785/76 +f 439/801/76 441/802/76 447/785/76 +f 441/802/76 443/783/76 447/785/76 +s 1 +f 434/803/77 435/804/79 433/805/77 +f 436/806/79 437/807/74 435/804/79 +f 438/808/74 439/809/80 437/810/74 +f 440/811/80 441/812/78 439/809/80 +f 442/813/78 443/814/81 441/812/78 +f 444/815/81 445/816/73 443/814/81 +f 446/817/73 447/818/82 445/816/73 +f 448/819/82 433/805/77 447/818/82 +f 434/803/77 436/806/79 435/804/79 +f 436/806/79 438/820/74 437/807/74 +f 438/808/74 440/811/80 439/809/80 +f 440/811/80 442/813/78 441/812/78 +f 442/813/78 444/815/81 443/814/81 +f 444/815/81 446/817/73 445/816/73 +f 446/817/73 448/819/82 447/818/82 +f 448/819/82 434/803/77 433/805/77 +o Spike2 +v -0.062500 2.875000 -0.062500 +v 0.062500 2.875000 -0.062500 +v -0.062500 2.875000 -0.187500 +v 0.062500 2.875000 -0.187500 +v -0.062500 1.625000 -0.187500 +v -0.062500 1.625000 -0.062500 +v 0.062500 1.625000 -0.062500 +v 0.062500 1.625000 -0.187500 +v 0.000000 1.375000 -0.125000 +vt 0.828947 0.888889 +vt 0.842105 0.870370 +vt 0.842105 0.888889 +vt 0.868421 0.870370 +vt 0.881579 0.685185 +vt 0.881579 0.870370 +vt 0.855263 0.685185 +vt 0.855263 0.870370 +vt 0.828947 0.870370 +vt 0.842105 0.685185 +vt 0.868421 0.685185 +vt 0.848684 0.648148 +vt 0.828947 0.685185 +vt 0.835526 0.648148 +vt 0.875000 0.648148 +vt 0.861842 0.648148 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.9701 -0.2425 0.0000 +vn 0.0000 -0.2425 -0.9701 +vn 0.9701 -0.2425 0.0000 +vn 0.0000 -0.2425 0.9701 +s off +f 450/821/83 451/822/83 449/823/83 +f 450/824/84 456/825/84 452/826/84 +f 451/822/85 454/827/85 449/828/85 +f 452/829/86 453/830/86 451/822/86 +f 449/828/87 455/831/87 450/824/87 +f 454/827/88 453/830/88 457/832/88 +f 453/830/89 456/833/89 457/834/89 +f 456/825/90 455/831/90 457/835/90 +f 455/831/91 454/827/91 457/836/91 +f 450/821/83 452/829/83 451/822/83 +f 450/824/84 455/831/84 456/825/84 +f 451/822/85 453/830/85 454/827/85 +f 452/829/86 456/833/86 453/830/86 +f 449/828/87 454/827/87 455/831/87 +o Spike1 +v 0.062500 2.875000 0.062500 +v -0.062500 2.875000 0.062500 +v 0.062500 2.875000 0.187500 +v -0.062500 2.875000 0.187500 +v 0.062500 1.625000 0.187500 +v 0.062500 1.625000 0.062500 +v -0.062500 1.625000 0.062500 +v -0.062500 1.625000 0.187500 +v 0.000000 1.375000 0.125000 +vt 0.842105 0.888889 +vt 0.828947 0.870370 +vt 0.842105 0.870370 +vt 0.868421 0.870370 +vt 0.881579 0.685185 +vt 0.881579 0.870370 +vt 0.855263 0.685185 +vt 0.855263 0.870370 +vt 0.842105 0.685185 +vt 0.868421 0.685185 +vt 0.848684 0.648148 +vt 0.828947 0.685185 +vt 0.835526 0.648148 +vt 0.875000 0.648148 +vt 0.861842 0.648148 +vt 0.828947 0.888889 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.9701 -0.2425 0.0000 +vn 0.0000 -0.2425 0.9701 +vn -0.9701 -0.2425 0.0000 +vn 0.0000 -0.2425 -0.9701 +s off +f 458/837/92 461/838/92 460/839/92 +f 459/840/93 465/841/93 461/842/93 +f 460/839/94 463/843/94 458/844/94 +f 461/838/95 462/845/95 460/839/95 +f 458/844/96 464/846/96 459/840/96 +f 463/843/97 462/845/97 466/847/97 +f 462/845/98 465/848/98 466/849/98 +f 465/841/99 464/846/99 466/850/99 +f 464/846/100 463/843/100 466/851/100 +f 458/837/92 459/852/92 461/838/92 +f 459/840/93 464/846/93 465/841/93 +f 460/839/94 462/845/94 463/843/94 +f 461/838/95 465/848/95 462/845/95 +f 458/844/96 463/843/96 464/846/96 +o Frame +v 1.250000 2.750000 -1.250000 +v 1.250000 3.000000 -1.250000 +v 1.250000 2.750000 -1.500000 +v 1.250000 3.000000 -1.500000 +v 1.500000 2.750000 -1.250000 +v 1.500000 3.000000 -1.250000 +v 1.500000 2.750000 -1.500000 +v 1.500000 3.000000 -1.500000 +v -1.500000 2.750000 -1.250000 +v -1.500000 3.000000 -1.250000 +v -1.500000 2.750000 -1.500000 +v -1.500000 3.000000 -1.500000 +v -1.250000 2.750000 -1.250000 +v -1.250000 3.000000 -1.250000 +v -1.250000 2.750000 -1.500000 +v -1.250000 3.000000 -1.500000 +v 1.250000 2.750000 1.500000 +v 1.250000 3.000000 1.500000 +v 1.250000 2.750000 1.250000 +v 1.250000 3.000000 1.250000 +v 1.500000 2.750000 1.500000 +v 1.500000 3.000000 1.500000 +v 1.500000 2.750000 1.250000 +v 1.500000 3.000000 1.250000 +v -1.500000 2.750000 1.500000 +v -1.500000 3.000000 1.500000 +v -1.500000 2.750000 1.250000 +v -1.500000 3.000000 1.250000 +v -1.250000 2.750000 1.500000 +v -1.250000 3.000000 1.500000 +v -1.250000 2.750000 1.250000 +v -1.250000 3.000000 1.250000 +v 1.500000 3.000000 -1.250000 +v 1.500000 3.000000 1.250000 +v 1.500000 2.875000 1.250000 +v 1.500000 2.875000 -1.250000 +v 1.375000 3.000000 -1.250000 +v 1.375000 3.000000 1.250000 +v 1.375000 2.875000 1.250000 +v 1.375000 2.875000 -1.250000 +v -1.375000 3.000000 -1.250000 +v -1.375000 3.000000 1.250000 +v -1.375000 2.875000 1.250000 +v -1.375000 2.875000 -1.250000 +v -1.500000 3.000000 -1.250000 +v -1.500000 3.000000 1.250000 +v -1.500000 2.875000 1.250000 +v -1.500000 2.875000 -1.250000 +v -1.250000 3.000000 -1.500000 +v 1.250000 3.000000 -1.500000 +v 1.250000 2.875000 -1.500000 +v -1.250000 2.875000 -1.500000 +v -1.250000 3.000000 -1.375000 +v 1.250000 3.000000 -1.375000 +v 1.250000 2.875000 -1.375000 +v -1.250000 2.875000 -1.375000 +v -1.250000 3.000000 1.375000 +v 1.250000 3.000000 1.375000 +v 1.250000 2.875000 1.375000 +v -1.250000 2.875000 1.375000 +v -1.250000 3.000000 1.500000 +v 1.250000 3.000000 1.500000 +v 1.250000 2.875000 1.500000 +v -1.250000 2.875000 1.500000 +v -1.375000 2.750000 -1.500000 +v -1.375000 0.250000 -1.500000 +v -1.500000 0.250000 -1.500000 +v -1.500000 2.750000 -1.500000 +v -1.375000 2.750000 -1.375000 +v -1.375000 0.250000 -1.375000 +v -1.500000 0.250000 -1.375000 +v -1.500000 2.750000 -1.375000 +v -1.375000 2.750000 1.375000 +v -1.375000 0.250000 1.375000 +v -1.500000 0.250000 1.375000 +v -1.500000 2.750000 1.375000 +v -1.375000 2.750000 1.500000 +v -1.375000 0.250000 1.500000 +v -1.500000 0.250000 1.500000 +v -1.500000 2.750000 1.500000 +v 1.500000 2.750000 -1.500000 +v 1.500000 0.250000 -1.500000 +v 1.375000 0.250000 -1.500000 +v 1.375000 2.750000 -1.500000 +v 1.500000 2.750000 -1.375000 +v 1.500000 0.250000 -1.375000 +v 1.375000 0.250000 -1.375000 +v 1.375000 2.750000 -1.375000 +v 1.500000 2.750000 1.375000 +v 1.500000 0.250000 1.375000 +v 1.375000 0.250000 1.375000 +v 1.375000 2.750000 1.375000 +v 1.500000 2.750000 1.500000 +v 1.500000 0.250000 1.500000 +v 1.375000 0.250000 1.500000 +v 1.375000 2.750000 1.500000 +vt 0.421053 0.962963 +vt 0.394737 0.925926 +vt 0.421053 0.925926 +vt 0.394737 0.962963 +vt 0.368421 0.925926 +vt 0.368421 0.962963 +vt 0.342105 0.925926 +vt 0.447368 0.962963 +vt 0.447368 0.925926 +vt 0.342105 0.888889 +vt 0.368421 0.888889 +vt 0.368421 1.000000 +vt 0.342105 0.962963 +vt 0.421053 0.962963 +vt 0.394737 0.925926 +vt 0.421053 0.925926 +vt 0.394737 0.962963 +vt 0.368421 0.925926 +vt 0.368421 0.962963 +vt 0.342105 0.925926 +vt 0.447368 0.962963 +vt 0.447368 0.925926 +vt 0.342105 0.888889 +vt 0.368421 0.888889 +vt 0.368421 1.000000 +vt 0.342105 0.962963 +vt 0.421053 0.962963 +vt 0.394737 0.925926 +vt 0.421053 0.925926 +vt 0.394737 0.962963 +vt 0.368421 0.925926 +vt 0.368421 0.962963 +vt 0.342105 0.925926 +vt 0.447368 0.962963 +vt 0.447368 0.925926 +vt 0.342105 0.888889 +vt 0.368421 0.888889 +vt 0.368421 1.000000 +vt 0.342105 0.962963 +vt 0.421053 0.962963 +vt 0.394737 0.925926 +vt 0.421053 0.925926 +vt 0.394737 0.962963 +vt 0.368421 0.925926 +vt 0.368421 0.962963 +vt 0.342105 0.925926 +vt 0.447368 0.962963 +vt 0.447368 0.925926 +vt 0.342105 0.888889 +vt 0.368421 0.888889 +vt 0.368421 1.000000 +vt 0.342105 0.962963 +vt 0.473684 0.833333 +vt 0.210526 0.851852 +vt 0.210526 0.833333 +vt 0.473684 0.814815 +vt 0.473684 0.851852 +vt 0.210526 0.870370 +vt 0.473684 0.888889 +vt 0.473684 0.870370 +vt 0.210526 0.888889 +vt 0.473684 0.870370 +vt 0.473684 0.888889 +vt 0.473684 0.814815 +vt 0.210526 0.833333 +vt 0.210526 0.814815 +vt 0.210526 0.870370 +vt 0.473684 0.851852 +vt 0.210526 0.851852 +vt 0.473684 0.833333 +vt 0.210526 0.851852 +vt 0.210526 0.833333 +vt 0.473684 0.814815 +vt 0.473684 0.851852 +vt 0.210526 0.870370 +vt 0.473684 0.888889 +vt 0.473684 0.870370 +vt 0.210526 0.888889 +vt 0.473684 0.870370 +vt 0.473684 0.888889 +vt 0.473684 0.814815 +vt 0.210526 0.833333 +vt 0.210526 0.814815 +vt 0.210526 0.870370 +vt 0.473684 0.851852 +vt 0.210526 0.851852 +vt 0.210526 0.851852 +vt 0.473684 0.833333 +vt 0.473684 0.851852 +vt 0.210526 0.870370 +vt 0.210526 0.833333 +vt 0.473684 0.814815 +vt 0.473684 0.888889 +vt 0.210526 0.888889 +vt 0.210526 0.833333 +vt 0.473684 0.814815 +vt 0.473684 0.833333 +vt 0.210526 0.851852 +vt 0.210526 0.888889 +vt 0.473684 0.870370 +vt 0.473684 0.888889 +vt 0.210526 0.870370 +vt 0.210526 0.870370 +vt 0.473684 0.851852 +vt 0.473684 0.870370 +vt 0.210526 0.888889 +vt 0.210526 0.851852 +vt 0.473684 0.833333 +vt 0.210526 0.814815 +vt 0.210526 0.833333 +vt 0.210526 0.888889 +vt 0.473684 0.870370 +vt 0.473684 0.888889 +vt 0.473684 0.814815 +vt 0.210526 0.833333 +vt 0.210526 0.814815 +vt 0.210526 0.870370 +vt 0.473684 0.851852 +vt 0.210526 0.851852 +vt 0.342105 1.000000 +vt 0.342105 1.000000 +vt 0.342105 1.000000 +vt 0.342105 1.000000 +vt 0.210526 0.814815 +vt 0.210526 0.888889 +vt 0.473684 0.833333 +vt 0.210526 0.814815 +vt 0.210526 0.888889 +vt 0.473684 0.833333 +vt 0.473684 0.870370 +vt 0.210526 0.814815 +vt 0.210526 0.814815 +vt 0.473684 0.851852 +vt 0.473684 0.888889 +vt 0.473684 0.814815 +vt 0.473684 0.833333 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 468/853/101 469/854/101 467/855/101 +f 470/856/102 473/857/102 469/854/102 +f 474/858/103 471/859/103 473/857/103 +f 472/860/104 467/855/104 471/861/104 +f 473/857/105 467/862/105 469/863/105 +f 470/864/106 472/865/106 474/858/106 +f 476/866/101 477/867/101 475/868/101 +f 478/869/102 481/870/102 477/867/102 +f 482/871/103 479/872/103 481/870/103 +f 480/873/104 475/868/104 479/874/104 +f 481/870/105 475/875/105 477/876/105 +f 478/877/106 480/878/106 482/871/106 +f 484/879/101 485/880/101 483/881/101 +f 486/882/102 489/883/102 485/880/102 +f 490/884/103 487/885/103 489/883/103 +f 488/886/104 483/881/104 487/887/104 +f 489/883/105 483/888/105 485/889/105 +f 486/890/106 488/891/106 490/884/106 +f 492/892/101 493/893/101 491/894/101 +f 494/895/102 497/896/102 493/893/102 +f 498/897/103 495/898/103 497/896/103 +f 496/899/104 491/894/104 495/900/104 +f 497/896/105 491/901/105 493/902/105 +f 494/903/106 496/904/106 498/897/106 +f 502/905/103 500/906/103 501/907/103 +f 501/907/105 506/908/105 502/905/105 +f 499/909/106 504/910/106 500/906/106 +f 506/911/101 504/910/101 503/912/101 +f 510/913/103 508/914/103 509/915/103 +f 509/916/105 514/917/105 510/918/105 +f 507/919/106 512/920/106 508/914/106 +f 514/917/101 512/920/101 511/921/101 +f 518/922/102 516/923/102 517/924/102 +f 517/924/105 522/925/105 518/922/105 +f 515/926/106 520/927/106 516/923/106 +f 522/928/104 520/927/104 519/929/104 +f 526/930/102 524/931/102 525/932/102 +f 525/933/105 530/934/105 526/935/105 +f 523/936/106 528/937/106 524/931/106 +f 530/934/104 528/937/104 527/938/104 +f 534/939/102 532/940/102 533/941/102 +f 533/941/101 538/942/101 534/939/101 +f 531/943/103 536/944/103 532/940/103 +f 538/942/104 536/945/104 535/946/104 +f 542/947/102 540/948/102 541/949/102 +f 541/949/101 546/950/101 542/947/101 +f 539/951/103 544/952/103 540/953/103 +f 546/950/104 544/952/104 543/954/104 +f 550/955/102 548/956/102 549/957/102 +f 549/957/101 554/958/101 550/955/101 +f 547/959/103 552/960/103 548/956/103 +f 554/961/104 552/960/104 551/962/104 +f 558/963/102 556/964/102 557/965/102 +f 557/966/101 562/967/101 558/968/101 +f 555/969/103 560/970/103 556/964/103 +f 562/967/104 560/970/104 559/971/104 +f 468/853/101 470/856/101 469/854/101 +f 470/856/102 474/858/102 473/857/102 +f 474/858/103 472/865/103 471/859/103 +f 472/860/104 468/853/104 467/855/104 +f 473/857/105 471/859/105 467/862/105 +f 470/864/106 468/972/106 472/865/106 +f 476/866/101 478/869/101 477/867/101 +f 478/869/102 482/871/102 481/870/102 +f 482/871/103 480/878/103 479/872/103 +f 480/873/104 476/866/104 475/868/104 +f 481/870/105 479/872/105 475/875/105 +f 478/877/106 476/973/106 480/878/106 +f 484/879/101 486/882/101 485/880/101 +f 486/882/102 490/884/102 489/883/102 +f 490/884/103 488/891/103 487/885/103 +f 488/886/104 484/879/104 483/881/104 +f 489/883/105 487/885/105 483/888/105 +f 486/890/106 484/974/106 488/891/106 +f 492/892/101 494/895/101 493/893/101 +f 494/895/102 498/897/102 497/896/102 +f 498/897/103 496/904/103 495/898/103 +f 496/899/104 492/892/104 491/894/104 +f 497/896/105 495/898/105 491/901/105 +f 494/903/106 492/975/106 496/904/106 +f 502/905/103 499/909/103 500/906/103 +f 501/907/105 505/976/105 506/908/105 +f 499/909/106 503/912/106 504/910/106 +f 506/911/101 505/977/101 504/910/101 +f 510/913/103 507/919/103 508/914/103 +f 509/916/105 513/978/105 514/917/105 +f 507/919/106 511/921/106 512/920/106 +f 514/917/101 513/978/101 512/920/101 +f 518/922/102 515/926/102 516/923/102 +f 517/924/105 521/979/105 522/925/105 +f 515/926/106 519/929/106 520/927/106 +f 522/928/104 521/980/104 520/927/104 +f 526/930/102 523/936/102 524/931/102 +f 525/933/105 529/981/105 530/934/105 +f 523/936/106 527/938/106 528/937/106 +f 530/934/104 529/981/104 528/937/104 +f 534/939/102 531/943/102 532/940/102 +f 533/941/101 537/982/101 538/942/101 +f 531/943/103 535/983/103 536/944/103 +f 538/942/104 537/982/104 536/945/104 +f 542/947/102 539/984/102 540/948/102 +f 541/949/101 545/985/101 546/950/101 +f 539/951/103 543/954/103 544/952/103 +f 546/950/104 545/985/104 544/952/104 +f 550/955/102 547/959/102 548/956/102 +f 549/957/101 553/986/101 554/958/101 +f 547/959/103 551/962/103 552/960/103 +f 554/961/104 553/987/104 552/960/104 +f 558/963/102 555/969/102 556/964/102 +f 557/966/101 561/988/101 562/967/101 +f 555/969/103 559/971/103 560/970/103 +f 562/967/104 561/988/104 560/970/104 +o Base +v 1.500000 0.125000 -1.250000 +v 1.500000 0.125000 1.250000 +v 1.500000 0.000000 1.250000 +v 1.500000 0.000000 -1.250000 +v 1.250000 0.000000 -1.250000 +v 1.250000 0.250000 -1.250000 +v 1.250000 0.000000 -1.500000 +v 1.250000 0.250000 -1.500000 +v 1.500000 0.000000 -1.250000 +v 1.500000 0.250000 -1.250000 +v 1.500000 0.000000 -1.500000 +v 1.500000 0.250000 -1.500000 +v -1.500000 0.000000 -1.250000 +v -1.500000 0.250000 -1.250000 +v -1.500000 0.000000 -1.500000 +v -1.500000 0.250000 -1.500000 +v -1.250000 0.000000 -1.250000 +v -1.250000 0.250000 -1.250000 +v -1.250000 0.000000 -1.500000 +v -1.250000 0.250000 -1.500000 +v 1.250000 0.000000 1.500000 +v 1.250000 0.250000 1.500000 +v 1.250000 0.000000 1.250000 +v 1.250000 0.250000 1.250000 +v 1.500000 0.000000 1.500000 +v 1.500000 0.250000 1.500000 +v 1.500000 0.000000 1.250000 +v 1.500000 0.250000 1.250000 +v -1.500000 0.000000 1.500000 +v -1.500000 0.250000 1.500000 +v -1.500000 0.000000 1.250000 +v -1.500000 0.250000 1.250000 +v -1.250000 0.000000 1.500000 +v -1.250000 0.250000 1.500000 +v -1.250000 0.000000 1.250000 +v -1.250000 0.250000 1.250000 +v 1.375000 0.125000 -1.250000 +v 1.375000 0.125000 1.250000 +v 1.375000 0.000000 1.250000 +v 1.375000 0.000000 -1.250000 +v -1.375000 0.125000 -1.250000 +v -1.375000 0.125000 1.250000 +v -1.375000 0.000000 1.250000 +v -1.375000 0.000000 -1.250000 +v -1.500000 0.125000 -1.250000 +v -1.500000 0.125000 1.250000 +v -1.500000 0.000000 1.250000 +v -1.500000 0.000000 -1.250000 +v -1.250000 0.125000 -1.500000 +v 1.250000 0.125000 -1.500000 +v 1.250000 0.000000 -1.500000 +v -1.250000 0.000000 -1.500000 +v -1.250000 0.125000 -1.375000 +v 1.250000 0.125000 -1.375000 +v 1.250000 0.000000 -1.375000 +v -1.250000 0.000000 -1.375000 +v -1.250000 0.125000 1.375000 +v 1.250000 0.125000 1.375000 +v 1.250000 0.000000 1.375000 +v -1.250000 0.000000 1.375000 +v -1.250000 0.125000 1.500000 +v 1.250000 0.125000 1.500000 +v 1.250000 0.000000 1.500000 +v -1.250000 0.000000 1.500000 +v 1.500000 0.687500 0.187500 +v 1.500000 0.312500 0.187500 +v 1.500000 0.687500 -0.187500 +v 1.500000 0.312500 -0.187500 +v 1.375000 0.625000 -0.125000 +v 1.375000 0.625000 0.125000 +v 1.375000 0.375000 0.125000 +v 1.375000 0.375000 -0.125000 +v 1.375000 0.687500 -0.187500 +v 1.375000 0.687500 0.187500 +v 1.375000 0.312500 0.187500 +v 1.375000 0.312500 -0.187500 +v 1.250000 0.625000 -0.125000 +v 1.250000 0.625000 0.125000 +v 1.250000 0.375000 0.125000 +v 1.250000 0.375000 -0.125000 +v 0.125000 0.125000 1.500000 +v 0.125000 0.125000 -1.500000 +v -0.125000 0.125000 1.500000 +v -0.125000 0.125000 -1.500000 +v -0.125000 0.250000 1.500000 +v 0.125000 0.250000 1.500000 +v 0.125000 0.250000 -1.500000 +v -0.125000 0.250000 -1.500000 +v -0.875000 0.125000 1.500000 +v -0.875000 0.125000 -1.500000 +v -1.125000 0.125000 1.500000 +v -1.125000 0.125000 -1.500000 +v -1.125000 0.250000 1.500000 +v -0.875000 0.250000 1.500000 +v -0.875000 0.250000 -1.500000 +v -1.125000 0.250000 -1.500000 +v 1.125000 0.125000 1.500000 +v 1.125000 0.125000 -1.500000 +v 0.875000 0.125000 1.500000 +v 0.875000 0.125000 -1.500000 +v 0.875000 0.250000 1.500000 +v 1.125000 0.250000 1.500000 +v 1.125000 0.250000 -1.500000 +v 0.875000 0.250000 -1.500000 +v -1.250000 0.250000 1.250000 +v 1.250000 0.250000 1.250000 +v -0.250000 0.250000 -1.250000 +v 1.250000 0.250000 -1.250000 +v -0.250000 0.750000 -1.250000 +v -1.250000 0.750000 1.250000 +v 1.250000 0.750000 1.250000 +v 1.250000 0.750000 -1.250000 +v -1.250000 0.250000 0.750000 +v 1.250000 0.250000 0.750000 +v -1.250000 0.750000 0.750000 +v 1.250000 0.750000 0.750000 +v -1.250000 0.250000 -1.250000 +v -1.250000 0.750000 -1.250000 +v -0.750000 0.250000 -1.250000 +v -0.750000 0.750000 -1.250000 +v -1.250000 0.750000 0.250000 +v -1.250000 0.250000 0.250000 +v -0.750000 0.750000 0.250000 +v -0.750000 0.250000 0.250000 +v 1.250000 0.250000 0.250000 +v -0.250000 0.250000 0.250000 +v 1.250000 0.750000 0.250000 +v -0.250000 0.750000 0.250000 +v -0.000000 1.250000 -1.375000 +v -0.526190 1.250000 -1.270334 +v -0.972272 1.250000 -0.972272 +v -1.270334 1.250000 -0.526190 +v -1.375000 1.250000 0.000000 +v -1.270334 1.250000 0.526190 +v -0.972272 1.250000 0.972272 +v -0.526190 1.250000 1.270334 +v -0.000000 1.250000 1.375000 +v 0.526189 1.250000 1.270334 +v 0.972271 1.250000 0.972272 +v 1.270334 1.250000 0.526190 +v 1.375000 1.250000 0.000000 +v 1.270334 1.250000 -0.526190 +v 0.972271 1.250000 -0.972272 +v 0.526189 1.250000 -1.270335 +v -0.000000 1.250000 -1.125000 +v -0.430519 1.250000 -1.039364 +v -0.795495 1.250000 -0.795495 +v -1.039365 1.250000 -0.430519 +v -1.125000 1.250000 0.000000 +v -1.039365 1.250000 0.430519 +v -0.795495 1.250000 0.795495 +v -0.430519 1.250000 1.039364 +v -0.000000 1.250000 1.125000 +v 0.430518 1.250000 1.039365 +v 0.795495 1.250000 0.795496 +v 1.039364 1.250000 0.430519 +v 1.125000 1.250000 0.000000 +v 1.039364 1.250000 -0.430519 +v 0.795495 1.250000 -0.795496 +v 0.430518 1.250000 -1.039365 +v -0.526190 1.000000 -1.270334 +v -0.000000 1.000000 -1.375000 +v -0.972272 1.000000 -0.972272 +v -1.270334 1.000000 -0.526190 +v -1.375000 1.000000 0.000000 +v -1.270334 1.000000 0.526190 +v -0.972272 1.000000 0.972272 +v -0.526190 1.000000 1.270334 +v -0.000000 1.000000 1.375000 +v 0.526189 1.000000 1.270334 +v 0.972271 1.000000 0.972272 +v 1.270334 1.000000 0.526190 +v 1.375000 1.000000 0.000000 +v 1.270334 1.000000 -0.526190 +v 0.972271 1.000000 -0.972272 +v 0.526189 1.000000 -1.270335 +v -0.430519 1.000000 -1.039364 +v -0.000000 1.000000 -1.125000 +v -0.795495 1.000000 -0.795495 +v -1.039365 1.000000 -0.430519 +v -1.125000 1.000000 0.000000 +v -1.039365 1.000000 0.430519 +v -0.795495 1.000000 0.795495 +v -0.430519 1.000000 1.039364 +v -0.000000 1.000000 1.125000 +v 0.430518 1.000000 1.039365 +v 0.795495 1.000000 0.795496 +v 1.039364 1.000000 0.430519 +v 1.125000 1.000000 0.000000 +v 1.039364 1.000000 -0.430519 +v 0.795495 1.000000 -0.795496 +v 0.430518 1.000000 -1.039365 +v -0.375000 1.000000 0.375000 +v 0.375000 1.000000 0.375000 +v -0.375000 1.000000 -0.375000 +v 0.375000 1.000000 -0.375000 +v -0.250000 0.875000 -0.250000 +v -0.250000 0.875000 0.250000 +v 0.250000 0.875000 0.250000 +v 0.250000 0.875000 -0.250000 +v 0.812500 0.750000 -0.812500 +v 1.187500 0.750000 -0.812500 +v 0.812500 0.750000 -1.187500 +v 1.187500 0.750000 -1.187500 +v 1.125000 1.062500 -1.125000 +v 0.875000 1.062500 -1.125000 +v 1.125000 1.062500 -0.875000 +v 0.875000 1.062500 -0.875000 +v 0.875000 1.062500 1.125000 +v 1.125000 1.062500 1.125000 +v 0.875000 1.062500 0.875000 +v 1.125000 1.062500 0.875000 +v 1.187500 0.750000 0.812500 +v 0.812500 0.750000 0.812500 +v 1.187500 0.750000 1.187500 +v 0.812500 0.750000 1.187500 +v -1.187500 0.750000 -0.812500 +v -0.812500 0.750000 -0.812500 +v -1.187500 0.750000 -1.187500 +v -0.812500 0.750000 -1.187500 +v -0.875000 1.062500 -1.125000 +v -1.125000 1.062500 -1.125000 +v -0.875000 1.062500 -0.875000 +v -1.125000 1.062500 -0.875000 +v -1.125000 1.062500 1.125000 +v -0.875000 1.062500 1.125000 +v -1.125000 1.062500 0.875000 +v -0.875000 1.062500 0.875000 +v -0.812500 0.750000 0.812500 +v -1.187500 0.750000 0.812500 +v -0.812500 0.750000 1.187500 +v -1.187500 0.750000 1.187500 +v -0.375000 0.875000 -0.375000 +v -0.375000 0.875000 0.375000 +v 0.375000 0.875000 0.375000 +v 0.375000 0.875000 -0.375000 +v -0.250000 0.750000 -0.250000 +v -0.250000 0.750000 0.250000 +v 0.250000 0.750000 0.250000 +v 0.250000 0.750000 -0.250000 +v -0.839690 0.812500 0.928078 +v 0.928077 0.812500 -0.839689 +v -0.928078 0.812500 0.839689 +v 0.839689 0.812500 -0.928078 +v -0.928078 0.937500 0.839689 +v -0.839690 0.937500 0.928078 +v 0.928077 0.937500 -0.839689 +v 0.839689 0.937500 -0.928078 +v 0.928077 0.812500 0.839689 +v -0.839690 0.812500 -0.928078 +v 0.839689 0.812500 0.928078 +v -0.928078 0.812500 -0.839689 +v 0.839689 0.937500 0.928078 +v 0.928077 0.937500 0.839689 +v -0.839690 0.937500 -0.928078 +v -0.928078 0.937500 -0.839689 +v 1.250000 0.437500 0.875000 +v 1.250000 0.562500 0.875000 +v -1.250000 0.500000 0.250000 +v 1.250000 0.500000 0.250000 +v -1.250000 0.323223 0.323223 +v 1.250000 0.323223 0.323223 +v -1.250000 0.250000 0.500000 +v 1.250000 0.250000 0.500000 +v -1.250000 0.323223 0.676777 +v 1.250000 0.323223 0.676777 +v -1.250000 0.500000 0.750000 +v 1.250000 0.500000 0.750000 +v -1.250000 0.676777 0.676777 +v 1.250000 0.676777 0.676777 +v -1.250000 0.750000 0.500000 +v 1.250000 0.750000 0.500000 +v -1.250000 0.676777 0.323223 +v 1.250000 0.676777 0.323223 +v 1.250000 0.562500 0.125000 +v 1.250000 0.437500 0.125000 +v 1.375000 0.437500 0.125000 +v 1.375000 0.562500 0.125000 +v 1.375000 0.437500 0.875000 +v 1.375000 0.562500 0.875000 +v -1.250001 0.437500 0.125000 +v -1.250001 0.562500 0.125000 +v -1.250001 0.562500 0.875000 +v -1.250001 0.437500 0.875000 +v -1.375001 0.437500 0.875000 +v -1.375001 0.562500 0.875000 +v -1.375001 0.437500 0.125000 +v -1.375001 0.562500 0.125000 +v -1.187500 1.000000 -1.187500 +v -1.187500 1.000000 -0.812500 +v -0.812500 1.000000 -0.812500 +v -0.812500 1.000000 -1.187500 +v 1.187500 1.000000 -1.187500 +v 0.812500 1.000000 -1.187500 +v 1.187500 1.000000 -0.812500 +v 0.812500 1.000000 -0.812500 +v 0.812500 1.000000 0.812500 +v 0.812500 1.000000 1.187500 +v 1.187500 1.000000 1.187500 +v 1.187500 1.000000 0.812500 +v -1.187500 1.000000 0.812500 +v -1.187500 1.000000 1.187500 +v -0.812500 1.000000 1.187500 +v -0.812500 1.000000 0.812500 +v 1.500000 0.687500 -0.812500 +v 1.500000 0.312500 -0.812500 +v 1.500000 0.687500 -1.187500 +v 1.500000 0.312500 -1.187500 +v 1.375000 0.625000 -1.125000 +v 1.375000 0.625000 -0.875000 +v 1.375000 0.375000 -0.875000 +v 1.375000 0.375000 -1.125000 +v 1.375000 0.687500 -1.187500 +v 1.375000 0.687500 -0.812500 +v 1.375000 0.312500 -0.812500 +v 1.375000 0.312500 -1.187500 +v 1.250000 0.625000 -1.125000 +v 1.250000 0.625000 -0.875000 +v 1.250000 0.375000 -0.875000 +v 1.250000 0.375000 -1.125000 +v 1.500000 0.687500 1.187500 +v 1.500000 0.312500 1.187500 +v 1.500000 0.687500 0.812500 +v 1.500000 0.312500 0.812500 +v 1.375000 0.625000 0.875000 +v 1.375000 0.625000 1.125000 +v 1.375000 0.375000 1.125000 +v 1.375000 0.375000 0.875000 +v 1.375000 0.687500 0.812500 +v 1.375000 0.687500 1.187500 +v 1.375000 0.312500 1.187500 +v 1.375000 0.312500 0.812500 +v 1.250000 0.625000 0.875000 +v 1.250000 0.625000 1.125000 +v 1.250000 0.375000 1.125000 +v 1.250000 0.375000 0.875000 +v -1.500000 0.687500 -0.187500 +v -1.500000 0.312500 -0.187500 +v -1.500000 0.687500 0.187500 +v -1.500000 0.312500 0.187500 +v -1.375000 0.625000 0.125000 +v -1.375000 0.625000 -0.125000 +v -1.375000 0.375000 -0.125000 +v -1.375000 0.375000 0.125000 +v -1.375000 0.687500 0.187500 +v -1.375000 0.687500 -0.187500 +v -1.375000 0.312500 -0.187500 +v -1.375000 0.312500 0.187500 +v -1.250000 0.625000 0.125000 +v -1.250000 0.625000 -0.125000 +v -1.250000 0.375000 -0.125000 +v -1.250000 0.375000 0.125000 +v -1.500000 0.687500 0.812500 +v -1.500000 0.312500 0.812500 +v -1.500000 0.687500 1.187500 +v -1.500000 0.312500 1.187500 +v -1.375000 0.625000 1.125000 +v -1.375000 0.625000 0.875000 +v -1.375000 0.375000 0.875000 +v -1.375000 0.375000 1.125000 +v -1.375000 0.687500 1.187500 +v -1.375000 0.687500 0.812500 +v -1.375000 0.312500 0.812500 +v -1.375000 0.312500 1.187500 +v -1.250000 0.625000 1.125000 +v -1.250000 0.625000 0.875000 +v -1.250000 0.375000 0.875000 +v -1.250000 0.375000 1.125000 +v -1.500000 0.687500 -1.187500 +v -1.500000 0.312500 -1.187500 +v -1.500000 0.687500 -0.812500 +v -1.500000 0.312500 -0.812500 +v -1.375000 0.625000 -0.875000 +v -1.375000 0.625000 -1.125000 +v -1.375000 0.375000 -1.125000 +v -1.375000 0.375000 -0.875000 +v -1.375000 0.687500 -0.812500 +v -1.375000 0.687500 -1.187500 +v -1.375000 0.312500 -1.187500 +v -1.375000 0.312500 -0.812500 +v -1.250000 0.625000 -0.875000 +v -1.250000 0.625000 -1.125000 +v -1.250000 0.375000 -1.125000 +v -1.250000 0.375000 -0.875000 +v 0.187500 0.687500 -1.500000 +v 0.187500 0.312500 -1.500000 +v -0.187500 0.687500 -1.500000 +v -0.187500 0.312500 -1.500000 +v -0.125000 0.625000 -1.375000 +v 0.125000 0.625000 -1.375000 +v 0.125000 0.375000 -1.375000 +v -0.125000 0.375000 -1.375000 +v -0.187500 0.687500 -1.375000 +v 0.187500 0.687500 -1.375000 +v 0.187500 0.312500 -1.375000 +v -0.187500 0.312500 -1.375000 +v -0.125000 0.625000 -1.250000 +v 0.125000 0.625000 -1.250000 +v 0.125000 0.375000 -1.250000 +v -0.125000 0.375000 -1.250000 +v -0.812500 0.687500 -1.500000 +v -0.812500 0.312500 -1.500000 +v -1.187500 0.687500 -1.500000 +v -1.187500 0.312500 -1.500000 +v -1.125000 0.625000 -1.375000 +v -0.875000 0.625000 -1.375000 +v -0.875000 0.375000 -1.375000 +v -1.125000 0.375000 -1.375000 +v -1.187500 0.687500 -1.375000 +v -0.812500 0.687500 -1.375000 +v -0.812500 0.312500 -1.375000 +v -1.187500 0.312500 -1.375000 +v -1.125000 0.625000 -1.250000 +v -0.875000 0.625000 -1.250000 +v -0.875000 0.375000 -1.250000 +v -1.125000 0.375000 -1.250000 +v 1.187500 0.687500 -1.500000 +v 1.187500 0.312500 -1.500000 +v 0.812500 0.687500 -1.500000 +v 0.812500 0.312500 -1.500000 +v 0.875000 0.625000 -1.375000 +v 1.125000 0.625000 -1.375000 +v 1.125000 0.375000 -1.375000 +v 0.875000 0.375000 -1.375000 +v 0.812500 0.687500 -1.375000 +v 1.187500 0.687500 -1.375000 +v 1.187500 0.312500 -1.375000 +v 0.812500 0.312500 -1.375000 +v 0.875000 0.625000 -1.250000 +v 1.125000 0.625000 -1.250000 +v 1.125000 0.375000 -1.250000 +v 0.875000 0.375000 -1.250000 +v -0.187500 0.687500 1.500000 +v -0.187500 0.312500 1.500000 +v 0.187500 0.687500 1.500000 +v 0.187500 0.312500 1.500000 +v 0.125000 0.625000 1.375000 +v -0.125000 0.625000 1.375000 +v -0.125000 0.375000 1.375000 +v 0.125000 0.375000 1.375000 +v 0.187500 0.687500 1.375000 +v -0.187500 0.687500 1.375000 +v -0.187500 0.312500 1.375000 +v 0.187500 0.312500 1.375000 +v 0.125000 0.625000 1.250000 +v -0.125000 0.625000 1.250000 +v -0.125000 0.375000 1.250000 +v 0.125000 0.375000 1.250000 +v 0.812500 0.687500 1.500000 +v 0.812500 0.312500 1.500000 +v 1.187500 0.687500 1.500000 +v 1.187500 0.312500 1.500000 +v 1.125000 0.625000 1.375000 +v 0.875000 0.625000 1.375000 +v 0.875000 0.375000 1.375000 +v 1.125000 0.375000 1.375000 +v 1.187500 0.687500 1.375000 +v 0.812500 0.687500 1.375000 +v 0.812500 0.312500 1.375000 +v 1.187500 0.312500 1.375000 +v 1.125000 0.625000 1.250000 +v 0.875000 0.625000 1.250000 +v 0.875000 0.375000 1.250000 +v 1.125000 0.375000 1.250000 +v -1.187500 0.687500 1.500000 +v -1.187500 0.312500 1.500000 +v -0.812500 0.687500 1.500000 +v -0.812500 0.312500 1.500000 +v -0.875000 0.625000 1.375000 +v -1.125000 0.625000 1.375000 +v -1.125000 0.375000 1.375000 +v -0.875000 0.375000 1.375000 +v -0.812500 0.687500 1.375000 +v -1.187500 0.687500 1.375000 +v -1.187500 0.312500 1.375000 +v -0.812500 0.312500 1.375000 +v -0.875000 0.625000 1.250000 +v -1.125000 0.625000 1.250000 +v -1.125000 0.375000 1.250000 +v -0.875000 0.375000 1.250000 +vt 0.473684 0.851852 +vt 0.210526 0.870370 +vt 0.210526 0.851852 +vt 0.421053 0.962963 +vt 0.394737 0.925926 +vt 0.421053 0.925926 +vt 0.394737 0.962963 +vt 0.368421 0.925926 +vt 0.368421 0.962963 +vt 0.342105 0.925926 +vt 0.447368 0.962963 +vt 0.447368 0.925926 +vt 0.342105 0.888889 +vt 0.368421 0.888889 +vt 0.368421 1.000000 +vt 0.342105 0.962963 +vt 0.421053 0.962963 +vt 0.394737 0.925926 +vt 0.421053 0.925926 +vt 0.394737 0.962963 +vt 0.368421 0.925926 +vt 0.368421 0.962963 +vt 0.342105 0.925926 +vt 0.447368 0.962963 +vt 0.447368 0.925926 +vt 0.342105 0.888889 +vt 0.368421 0.888889 +vt 0.368421 1.000000 +vt 0.342105 0.962963 +vt 0.421053 0.962963 +vt 0.394737 0.925926 +vt 0.421053 0.925926 +vt 0.394737 0.962963 +vt 0.368421 0.925926 +vt 0.368421 0.962963 +vt 0.342105 0.925926 +vt 0.447368 0.962963 +vt 0.447368 0.925926 +vt 0.342105 0.888889 +vt 0.368421 0.888889 +vt 0.368421 1.000000 +vt 0.342105 0.962963 +vt 0.421053 0.962963 +vt 0.394737 0.925926 +vt 0.421053 0.925926 +vt 0.394737 0.962963 +vt 0.368421 0.925926 +vt 0.368421 0.962963 +vt 0.342105 0.925926 +vt 0.447368 0.962963 +vt 0.447368 0.925926 +vt 0.342105 0.888889 +vt 0.368421 0.888889 +vt 0.368421 1.000000 +vt 0.342105 0.962963 +vt 0.473684 0.833333 +vt 0.473684 0.870370 +vt 0.210526 0.888889 +vt 0.210526 0.814815 +vt 0.473684 0.814815 +vt 0.210526 0.833333 +vt 0.473684 0.814815 +vt 0.473684 0.833333 +vt 0.210526 0.851852 +vt 0.210526 0.888889 +vt 0.473684 0.870370 +vt 0.473684 0.888889 +vt 0.210526 0.870370 +vt 0.473684 0.851852 +vt 0.210526 0.870370 +vt 0.210526 0.851852 +vt 0.473684 0.833333 +vt 0.473684 0.870370 +vt 0.210526 0.888889 +vt 0.210526 0.814815 +vt 0.473684 0.814815 +vt 0.210526 0.833333 +vt 0.473684 0.814815 +vt 0.473684 0.833333 +vt 0.210526 0.851852 +vt 0.210526 0.888889 +vt 0.473684 0.870370 +vt 0.473684 0.888889 +vt 0.210526 0.870370 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.013158 0.888889 +vt 0.328947 0.925926 +vt 0.013158 0.925926 +vt 0.328947 0.944444 +vt 0.013158 0.981481 +vt 0.013158 0.944444 +vt 0.013158 1.000000 +vt 0.328947 0.981481 +vt 0.328947 1.000000 +vt 0.342105 0.981481 +vt 0.342105 0.944444 +vt -0.000000 0.944444 +vt -0.000000 0.981481 +vt 0.013158 0.888889 +vt 0.328947 0.925926 +vt 0.013158 0.925926 +vt 0.328947 0.944444 +vt 0.013158 0.981481 +vt 0.013158 0.944444 +vt 0.013158 1.000000 +vt 0.328947 0.981481 +vt 0.328947 1.000000 +vt 0.342105 0.981481 +vt 0.342105 0.944444 +vt -0.000000 0.944444 +vt -0.000000 0.981481 +vt 0.013158 0.888889 +vt 0.328947 0.925926 +vt 0.013158 0.925926 +vt 0.328947 0.944444 +vt 0.013158 0.981481 +vt 0.013158 0.944444 +vt 0.013158 1.000000 +vt 0.328947 0.981481 +vt 0.328947 1.000000 +vt 0.342105 0.981481 +vt 0.342105 0.944444 +vt -0.000000 0.944444 +vt -0.000000 0.981481 +vt 0.315789 0.370370 +vt 0.368421 0.740741 +vt 0.315789 0.740741 +vt 0.473684 0.740741 +vt 0.421053 0.370370 +vt 0.473684 0.370370 +vt 0.368421 0.814815 +vt 0.315789 0.814815 +vt 0.263158 0.814815 +vt 0.210526 0.592593 +vt 0.263158 0.592593 +vt 0.263158 0.370370 +vt 0.368421 0.370370 +vt 0.315789 0.296296 +vt 0.684211 0.518519 +vt 0.736842 0.444444 +vt 0.736842 0.518519 +vt 0.473684 0.444444 +vt 0.526316 0.518519 +vt 0.473684 0.518519 +vt 0.684211 0.370370 +vt 0.526316 0.296296 +vt 0.684211 0.296296 +vt 0.684211 0.592593 +vt 0.526316 0.444444 +vt 0.684211 0.444444 +vt 0.526316 0.370370 +vt 0.052632 0.592593 +vt -0.000000 0.814815 +vt -0.000000 0.592593 +vt 0.210526 0.888889 +vt 0.052632 0.814815 +vt 0.210526 0.814815 +vt 0.210526 0.518519 +vt 0.052632 0.296296 +vt 0.210526 0.296296 +vt 0.052632 0.518519 +vt 0.263158 0.074074 +vt 0.315789 0.111111 +vt 0.269737 0.111111 +vt 0.210526 0.074074 +vt 0.263158 0.111111 +vt 0.217105 0.111111 +vt 0.157895 0.074074 +vt 0.210526 0.111111 +vt 0.164474 0.111111 +vt 0.105263 0.074074 +vt 0.157895 0.111111 +vt 0.111842 0.111111 +vt 0.052632 0.074074 +vt 0.105263 0.111111 +vt 0.059211 0.111111 +vt -0.000000 0.074074 +vt 0.052632 0.111111 +vt 0.006579 0.111111 +vt 0.842105 0.074074 +vt 0.796053 0.111111 +vt 0.789474 0.074074 +vt 0.743421 0.111111 +vt 0.736842 0.074074 +vt 0.690789 0.111111 +vt 0.684211 0.074074 +vt 0.638158 0.111111 +vt 0.631579 0.074074 +vt 0.585526 0.111111 +vt 0.578947 0.074074 +vt 0.532895 0.111111 +vt 0.526316 0.074074 +vt 0.480263 0.111111 +vt 0.473684 0.074074 +vt 0.427632 0.111111 +vt 0.421053 0.074074 +vt 0.375000 0.111111 +vt 0.368421 0.074074 +vt 0.315789 0.074074 +vt 0.368421 0.111111 +vt 0.322368 0.111111 +vt 0.263158 0.037037 +vt 0.315789 0.000000 +vt 0.315789 0.037037 +vt 0.210526 0.037037 +vt 0.263158 0.000000 +vt 0.157895 0.037037 +vt 0.210526 0.000000 +vt 0.105263 0.037037 +vt 0.157895 0.000000 +vt 0.052632 0.037037 +vt 0.105263 0.000000 +vt -0.000000 0.037037 +vt 0.052632 0.000000 +vt 0.802632 0.000000 +vt 0.842105 0.037037 +vt 0.789474 0.037037 +vt 0.750000 0.000000 +vt 0.736842 0.037037 +vt 0.697368 0.000000 +vt 0.684211 0.037037 +vt 0.644737 0.000000 +vt 0.631579 0.037037 +vt 0.592105 0.000000 +vt 0.578947 0.037037 +vt 0.539474 0.000000 +vt 0.526316 0.037037 +vt 0.480263 0.000000 +vt 0.473684 0.037037 +vt 0.427632 0.000000 +vt 0.421053 0.037037 +vt 0.375000 0.000000 +vt 0.368421 0.037037 +vt 0.368421 0.000000 +vt 0.578947 0.722222 +vt 0.657895 0.833333 +vt 0.578947 0.833333 +vt 0.592105 0.685185 +vt 0.644737 0.666667 +vt 0.644737 0.685185 +vt 0.578947 0.851852 +vt 0.657895 0.722222 +vt 0.671053 0.833333 +vt 0.565789 0.722222 +vt 0.657895 0.703704 +vt 0.855263 0.444444 +vt 0.815789 0.481481 +vt 0.815789 0.444444 +vt 0.776316 0.444444 +vt 0.736842 0.481481 +vt 0.736842 0.444444 +vt 0.855263 0.444444 +vt 0.815789 0.481481 +vt 0.815789 0.444444 +vt 0.776316 0.481481 +vt 0.776316 0.444444 +vt 0.894737 0.444444 +vt 0.855263 0.481481 +vt 0.743421 0.490741 +vt 0.769737 0.527778 +vt 0.743421 0.527778 +vt 0.743421 0.490741 +vt 0.769737 0.527778 +vt 0.743421 0.527778 +vt 0.894737 0.444444 +vt 0.855263 0.481481 +vt 0.855263 0.444444 +vt 0.815789 0.444444 +vt 0.776316 0.481481 +vt 0.776316 0.444444 +vt 0.815789 0.481481 +vt 0.776316 0.444444 +vt 0.736842 0.481481 +vt 0.736842 0.444444 +vt 0.855263 0.444444 +vt 0.815789 0.481481 +vt 0.815789 0.444444 +vt 0.776316 0.481481 +vt 0.894737 0.444444 +vt 0.855263 0.481481 +vt 0.743421 0.490741 +vt 0.769737 0.527778 +vt 0.743421 0.527778 +vt 0.736842 0.481481 +vt 0.736842 0.444444 +vt 0.776316 0.481481 +vt 0.894737 0.444444 +vt 0.855263 0.481481 +vt 0.743421 0.490741 +vt 0.769737 0.527778 +vt 0.743421 0.527778 +vt 0.736842 0.481481 +vt 0.736842 0.444444 +vt 0.592105 0.870370 +vt 0.657895 0.851852 +vt 0.644737 0.870370 +vt 0.552632 0.740741 +vt 0.565789 0.833333 +vt 0.552632 0.814815 +vt 0.578947 0.703704 +vt 0.684211 0.814815 +vt 0.671053 0.722222 +vt 0.684211 0.740741 +vt 0.644737 0.592593 +vt 0.592105 0.666667 +vt 0.592105 0.592593 +vt 0.592105 0.888889 +vt 0.697368 0.814815 +vt 0.539474 0.740741 +vt 0.736842 0.370370 +vt 1.000000 0.388889 +vt 0.736842 0.388889 +vt 0.736842 0.407407 +vt 1.000000 0.425926 +vt 0.736842 0.425926 +vt 0.736842 0.444444 +vt 1.000000 0.444444 +vt 0.736842 0.370370 +vt 1.000000 0.388889 +vt 0.736842 0.388889 +vt 0.736842 0.407407 +vt 1.000000 0.425926 +vt 0.736842 0.425926 +vt 0.736842 0.444444 +vt 1.000000 0.444444 +vt 0.447368 0.351852 +vt 0.526316 0.333333 +vt 0.526316 0.351852 +vt 0.447368 0.314815 +vt 0.526316 0.333333 +vt 0.447368 0.333333 +vt 0.526316 0.296296 +vt 0.447368 0.314815 +vt 0.447368 0.296296 +vt 0.526316 0.296296 +vt 0.447368 0.296296 +vt 0.447368 0.333333 +vt 0.737094 0.333333 +vt 0.744728 0.307394 +vt 0.763158 0.296650 +vt 0.447368 0.351852 +vt 0.526316 0.351852 +vt 0.834220 0.307394 +vt 0.834220 0.359272 +vt 0.797359 0.359272 +vt 0.822368 0.490741 +vt 0.848684 0.490741 +vt 0.861842 0.490741 +vt 0.894737 0.481481 +vt 0.888158 0.490741 +vt 0.769737 0.490741 +vt 0.782895 0.490741 +vt 0.809211 0.490741 +vt 0.782895 0.490741 +vt 0.809211 0.490741 +vt 0.769737 0.490741 +vt 0.861842 0.490741 +vt 0.894737 0.481481 +vt 0.888158 0.490741 +vt 0.822368 0.490741 +vt 0.848684 0.490741 +vt 0.822368 0.490741 +vt 0.848684 0.490741 +vt 0.861842 0.490741 +vt 0.894737 0.481481 +vt 0.888158 0.490741 +vt 0.769737 0.490741 +vt 0.782895 0.490741 +vt 0.809211 0.490741 +vt 0.822368 0.490741 +vt 0.848684 0.490741 +vt 0.861842 0.490741 +vt 0.894737 0.481481 +vt 0.888158 0.490741 +vt 0.769737 0.490741 +vt 0.782895 0.490741 +vt 0.809211 0.490741 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.539474 0.740741 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.539474 0.740741 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.546053 0.712963 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.506579 0.638889 +vt 0.546053 0.694444 +vt 0.506579 0.694444 +vt 0.513158 0.611111 +vt 0.539474 0.592593 +vt 0.539474 0.611111 +vt 0.546053 0.638889 +vt 0.559211 0.694444 +vt 0.493421 0.638889 +vt 0.546053 0.620370 +vt 0.546053 0.712963 +vt 0.506579 0.712963 +vt 0.513158 0.722222 +vt 0.539474 0.722222 +vt 0.486842 0.648148 +vt 0.493421 0.694444 +vt 0.486842 0.685185 +vt 0.506579 0.620370 +vt 0.565789 0.685185 +vt 0.559211 0.638889 +vt 0.565789 0.648148 +vt 0.539474 0.740741 +vt 0.513158 0.740741 +vt 0.578947 0.685185 +vt 0.473684 0.648148 +vt 0.342105 1.000000 +vt 0.342105 1.000000 +vt 0.342105 1.000000 +vt 0.342105 1.000000 +vt 0.210526 0.833333 +vt 0.473684 0.888889 +vt 0.210526 0.814815 +vt 0.473684 0.851852 +vt 0.210526 0.833333 +vt 0.473684 0.888889 +vt 0.210526 0.814815 +vt 0.473684 0.851852 +vt 0.513158 0.592593 +vt 0.539474 0.740741 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.328947 0.888889 +vt 0.328947 0.888889 +vt 0.328947 0.888889 +vt 0.421053 0.740741 +vt 0.263158 0.740741 +vt 0.368421 0.296296 +vt 0.526316 0.592593 +vt 0.052632 0.888889 +vt 0.842105 0.111111 +vt 0.789474 0.111111 +vt 0.736842 0.111111 +vt 0.684211 0.111111 +vt 0.631579 0.111111 +vt 0.578947 0.111111 +vt 0.526316 0.111111 +vt 0.473684 0.111111 +vt 0.421053 0.111111 +vt 0.269737 0.000000 +vt 0.217105 0.000000 +vt 0.164474 0.000000 +vt 0.111842 0.000000 +vt 0.059211 0.000000 +vt 0.006579 0.000000 +vt 0.842105 0.000000 +vt 0.789474 0.000000 +vt 0.736842 0.000000 +vt 0.684211 0.000000 +vt 0.631579 0.000000 +vt 0.578947 0.000000 +vt 0.526316 0.000000 +vt 0.473684 0.000000 +vt 0.421053 0.000000 +vt 0.322368 0.000000 +vt 0.644737 0.888889 +vt 0.697368 0.740741 +vt 0.539474 0.814815 +vt 1.000000 0.370370 +vt 1.000000 0.407407 +vt 1.000000 0.370370 +vt 1.000000 0.407407 +vt 0.526316 0.314815 +vt 0.526316 0.314815 +vt 0.781588 0.307394 +vt 0.789223 0.333333 +vt 0.781588 0.359272 +vt 0.763158 0.370016 +vt 0.744728 0.359272 +vt 0.789725 0.333333 +vt 0.797359 0.307394 +vt 0.815790 0.296650 +vt 0.841854 0.333333 +vt 0.815790 0.370017 +vt 0.513158 0.592593 +vt 0.539474 0.740741 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.513158 0.592593 +vt 0.539474 0.740741 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.513158 0.592593 +vt 0.539474 0.740741 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.513158 0.592593 +vt 0.539474 0.740741 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.513158 0.592593 +vt 0.539474 0.740741 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.513158 0.592593 +vt 0.539474 0.740741 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.513158 0.592593 +vt 0.539474 0.740741 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.513158 0.592593 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.513158 0.592593 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.513158 0.592593 +vt 0.539474 0.740741 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.513158 0.592593 +vt 0.578947 0.648148 +vt 0.473684 0.685185 +vt 0.059211 0.148148 +vt 0.111842 0.148148 +vt 0.164474 0.148148 +vt 0.217105 0.148148 +vt 0.269737 0.148148 +vt 0.322368 0.148148 +vt 0.375000 0.148148 +vt 0.427632 0.148148 +vt 0.480263 0.148148 +vt 0.638158 0.148148 +vt 0.532895 0.148148 +vt 0.690789 0.148148 +vt 0.585526 0.148148 +vt 0.743421 0.148148 +vt 0.796053 0.148148 +vt 0.006579 0.148148 +vt 0.960526 0.000000 +vt 0.980263 0.370370 +vt 0.960526 0.370370 +vt 0.980263 0.000000 +vt 1.000000 0.370370 +vt 0.842105 0.000000 +vt 0.861842 0.370370 +vt 0.842105 0.370370 +vt 0.861842 0.000000 +vt 0.881579 0.370370 +vt 0.881579 0.000000 +vt 0.901316 0.370370 +vt 0.901316 0.000000 +vt 0.921053 0.370370 +vt 0.921053 0.000000 +vt 0.940789 0.370370 +vt 0.940789 0.000000 +vt 0.105263 0.148148 +vt 0.157895 0.148148 +vt 0.210526 0.148148 +vt 0.263158 0.148148 +vt 0.315789 0.148148 +vt 0.368421 0.148148 +vt 0.421053 0.148148 +vt 0.473684 0.148148 +vt 0.526316 0.148148 +vt 0.684211 0.148148 +vt 0.578947 0.148148 +vt 0.736842 0.148148 +vt 0.631579 0.148148 +vt 0.789474 0.148148 +vt 0.842105 0.148148 +vt 0.052632 0.148148 +vt 1.000000 0.000000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.7071 0.0000 +vn 0.0000 0.7071 0.7071 +vn 0.7071 0.7071 0.0000 +vn 0.0000 0.7071 -0.7071 +vn -0.3827 0.0000 0.9239 +vn 0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 0.3827 +vn -0.3827 0.0000 -0.9239 +vn -0.9239 0.0000 -0.3827 +vn -0.9239 0.0000 0.3827 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 -0.7071 0.7071 +s off +f 566/989/107 564/990/107 565/991/107 +f 568/992/108 569/993/108 567/994/108 +f 570/995/109 573/996/109 569/993/109 +f 574/997/107 571/998/107 573/996/107 +f 572/999/110 567/994/110 571/1000/110 +f 573/996/111 567/1001/111 569/1002/111 +f 570/1003/112 572/1004/112 574/997/112 +f 576/1005/108 577/1006/108 575/1007/108 +f 578/1008/109 581/1009/109 577/1006/109 +f 582/1010/107 579/1011/107 581/1009/107 +f 580/1012/110 575/1007/110 579/1013/110 +f 581/1009/111 575/1014/111 577/1015/111 +f 578/1016/112 580/1017/112 582/1010/112 +f 584/1018/108 585/1019/108 583/1020/108 +f 586/1021/109 589/1022/109 585/1019/109 +f 590/1023/107 587/1024/107 589/1022/107 +f 588/1025/110 583/1020/110 587/1026/110 +f 589/1022/111 583/1027/111 585/1028/111 +f 586/1029/112 588/1030/112 590/1023/112 +f 592/1031/108 593/1032/108 591/1033/108 +f 594/1034/109 597/1035/109 593/1032/109 +f 598/1036/107 595/1037/107 597/1035/107 +f 596/1038/110 591/1033/110 595/1039/110 +f 597/1035/111 591/1040/111 593/1041/111 +f 594/1042/112 596/1043/112 598/1036/112 +f 565/991/111 602/1044/111 566/989/111 +f 563/1045/112 600/1046/112 564/990/112 +f 602/1044/108 600/1047/108 599/1048/108 +f 606/1049/107 604/1050/107 605/1051/107 +f 605/1051/111 610/1052/111 606/1049/111 +f 603/1053/112 608/1054/112 604/1055/112 +f 610/1052/108 608/1054/108 607/1056/108 +f 614/1057/109 612/1058/109 613/1059/109 +f 613/1059/111 618/1060/111 614/1057/111 +f 611/1061/112 616/1062/112 612/1058/112 +f 618/1060/110 616/1063/110 615/1064/110 +f 622/1065/109 620/1066/109 621/1067/109 +f 621/1067/111 626/1068/111 622/1065/111 +f 619/1069/112 624/1070/112 620/1071/112 +f 626/1068/110 624/1070/110 623/1072/110 +f 628/1073/107 629/1074/107 627/1075/107 +f 633/1076/111 642/1077/111 634/1078/111 +f 630/1079/109 635/1080/109 629/1074/109 +f 627/1075/110 637/1081/110 628/1073/110 +f 628/1073/111 638/1082/111 630/1079/111 +f 629/1074/112 636/1083/112 627/1075/112 +f 632/1084/108 635/1085/108 631/1086/108 +f 633/1087/108 636/1088/108 632/1089/108 +f 634/1078/108 637/1090/108 633/1076/108 +f 631/1091/108 638/1092/108 634/1093/108 +f 631/1086/112 640/1094/112 632/1084/112 +f 634/1093/109 639/1095/109 631/1091/109 +f 632/1089/110 641/1096/110 633/1087/110 +f 645/1097/111 644/1098/111 643/1099/111 +f 649/1100/112 647/1101/112 648/1102/112 +f 645/1103/108 650/1104/108 646/1105/108 +f 644/1098/107 648/1102/107 643/1099/107 +f 646/1106/109 649/1100/109 644/1107/109 +f 643/1108/110 647/1101/110 645/1109/110 +f 653/1110/111 652/1111/111 651/1112/111 +f 657/1113/112 655/1114/112 656/1115/112 +f 653/1116/108 658/1117/108 654/1118/108 +f 652/1111/107 656/1115/107 651/1112/107 +f 654/1119/109 657/1113/109 652/1120/109 +f 651/1121/110 655/1114/110 653/1122/110 +f 661/1123/111 660/1124/111 659/1125/111 +f 665/1126/112 663/1127/112 664/1128/112 +f 661/1129/108 666/1130/108 662/1131/108 +f 660/1124/107 664/1128/107 659/1125/107 +f 662/1132/109 665/1126/109 660/1133/109 +f 659/1134/110 663/1127/110 661/1135/110 +f 667/1136/111 676/1137/111 668/1138/111 +f 673/1139/112 677/1140/112 672/1141/112 +f 668/1138/107 678/1142/107 673/1143/107 +f 669/1144/109 674/1145/109 670/1146/109 +f 668/1138/110 672/1147/110 667/1136/110 +f 677/1140/109 676/1137/109 675/1148/109 +f 672/1149/108 675/1148/108 667/1136/108 +f 680/1150/109 681/1151/109 679/1152/109 +f 686/1153/110 683/1154/110 684/1155/110 +f 681/1156/111 684/1157/111 679/1158/111 +f 679/1159/108 683/1154/108 680/1150/108 +f 680/1150/112 685/1160/112 682/1161/112 +f 682/1161/107 686/1162/107 681/1156/107 +f 689/1163/110 688/1164/110 687/1165/110 +f 669/1166/108 690/1167/108 671/1168/108 +f 671/1168/112 689/1163/112 674/1145/112 +f 670/1169/111 688/1170/111 669/1171/111 +f 674/1145/107 687/1172/107 670/1169/107 +f 700/1173/112 717/1174/112 716/1175/112 +f 699/1176/112 716/1177/112 715/1178/112 +f 698/1179/112 715/1180/112 714/1181/112 +f 697/1182/112 714/1183/112 713/1184/112 +f 696/1185/112 713/1186/112 712/1187/112 +f 695/1188/112 712/1189/112 711/1190/112 +f 695/1191/112 710/1192/112 694/1193/112 +f 694/1193/112 709/1194/112 693/1195/112 +f 693/1195/112 708/1196/112 692/1197/112 +f 692/1197/112 707/1198/112 691/1199/112 +f 691/1199/112 722/1200/112 706/1201/112 +f 706/1201/112 721/1202/112 705/1203/112 +f 705/1203/112 720/1204/112 704/1205/112 +f 704/1205/112 719/1206/112 703/1207/112 +f 703/1207/112 718/1208/112 702/1209/112 +f 701/1210/112 718/1211/112 717/1212/112 +f 732/1213/111 749/1214/111 733/1215/111 +f 731/1216/111 748/1217/111 732/1213/111 +f 730/1218/111 747/1219/111 731/1216/111 +f 729/1220/111 746/1221/111 730/1218/111 +f 728/1222/111 745/1223/111 729/1220/111 +f 727/1224/111 744/1225/111 728/1222/111 +f 742/1226/111 727/1227/111 726/1228/111 +f 741/1229/111 726/1228/111 725/1230/111 +f 739/1231/111 725/1230/111 723/1232/111 +f 740/1233/111 723/1232/111 724/1234/111 +f 754/1235/111 724/1234/111 738/1236/111 +f 753/1237/111 738/1236/111 737/1238/111 +f 752/1239/111 737/1238/111 736/1240/111 +f 751/1241/111 736/1240/111 735/1242/111 +f 750/1243/111 735/1242/111 734/1244/111 +f 733/1215/111 750/1245/111 734/1244/111 +f 756/1246/112 757/1247/112 755/1248/112 +f 761/1249/107 802/1250/107 762/1251/107 +f 757/1247/108 796/1252/108 755/1248/108 +f 758/1253/109 795/1254/109 757/1247/109 +f 755/1248/110 797/1255/110 756/1246/110 +f 756/1246/107 798/1256/107 758/1253/107 +f 794/1257/108 863/1258/108 792/1259/108 +f 791/1260/107 865/1261/107 793/1262/107 +f 779/1263/108 851/1264/108 781/1265/108 +f 781/1265/109 854/1266/109 782/1267/109 +f 780/1268/110 852/1269/110 779/1263/110 +f 785/1270/112 784/1271/112 786/1272/112 +f 769/1273/112 768/1274/112 770/1275/112 +f 764/1276/110 858/1277/110 763/1278/110 +f 765/1279/109 855/1280/109 766/1281/109 +f 763/1278/108 856/1282/108 765/1279/108 +f 775/1283/107 861/1284/107 777/1285/107 +f 778/1286/108 859/1287/108 776/1288/108 +f 776/1288/109 862/1289/109 775/1283/109 +f 777/1290/110 860/1291/110 778/1286/110 +f 772/1292/112 773/1293/112 771/1294/112 +f 766/1281/107 857/1295/107 764/1296/107 +f 792/1259/109 866/1297/109 791/1260/109 +f 793/1298/110 864/1299/110 794/1257/110 +f 788/1300/112 789/1301/112 787/1302/112 +f 782/1267/107 853/1303/107 780/1304/107 +f 760/1305/111 795/1306/111 759/1307/111 +f 761/1308/111 796/1309/111 760/1310/111 +f 762/1251/111 797/1311/111 761/1249/111 +f 759/1312/111 798/1313/111 762/1314/111 +f 799/1315/111 801/1316/111 800/1317/111 +f 759/1307/108 800/1318/108 760/1305/108 +f 762/1314/109 799/1319/109 759/1312/109 +f 760/1310/110 801/1320/110 761/1308/110 +f 805/1321/111 804/1322/111 803/1323/111 +f 808/1324/112 810/1325/112 807/1326/112 +f 804/1322/113 808/1324/113 803/1323/113 +f 805/1327/114 810/1325/114 806/1328/114 +f 813/1329/111 812/1330/111 811/1331/111 +f 816/1332/112 818/1333/112 815/1334/112 +f 812/1330/115 816/1332/115 811/1331/115 +f 813/1335/116 818/1333/116 814/1336/116 +f 820/1337/112 840/1338/112 837/1339/112 +f 849/1340/108 848/1341/108 850/1342/108 +f 838/1343/111 841/1344/111 819/1345/111 +f 846/1346/111 849/1340/111 843/1347/111 +f 841/1344/107 840/1338/107 842/1348/107 +f 830/1349/107 828/1350/107 826/1351/107 +f 844/1352/112 848/1341/112 845/1353/112 +f 827/1354/108 831/1355/108 835/1356/108 +f 784/1357/117 852/1269/117 786/1358/117 +f 786/1359/118 853/1360/118 785/1361/118 +f 785/1270/119 854/1266/119 783/1362/119 +f 783/1363/120 851/1264/120 784/1364/120 +f 767/1365/120 856/1282/120 768/1366/120 +f 769/1273/119 855/1280/119 767/1367/119 +f 770/1368/118 857/1369/118 769/1370/118 +f 768/1371/117 858/1277/117 770/1372/117 +f 773/1373/117 860/1291/117 771/1374/117 +f 771/1375/118 861/1376/118 772/1377/118 +f 772/1292/119 862/1289/119 774/1378/119 +f 774/1379/120 859/1287/120 773/1380/120 +f 789/1381/117 864/1299/117 787/1382/117 +f 787/1383/118 865/1384/118 788/1385/118 +f 788/1300/119 866/1297/119 790/1386/119 +f 790/1387/120 863/1258/120 789/1388/120 +f 868/1389/107 869/1390/107 867/1391/107 +f 873/1392/111 882/1393/111 874/1394/111 +f 870/1395/109 875/1396/109 869/1390/109 +f 867/1391/110 877/1397/110 868/1389/110 +f 868/1389/111 878/1398/111 870/1395/111 +f 869/1390/112 876/1399/112 867/1391/112 +f 872/1400/108 875/1401/108 871/1402/108 +f 873/1403/108 876/1404/108 872/1405/108 +f 874/1394/108 877/1406/108 873/1392/108 +f 871/1407/108 878/1408/108 874/1409/108 +f 871/1402/112 880/1410/112 872/1400/112 +f 874/1409/109 879/1411/109 871/1407/109 +f 872/1405/110 881/1412/110 873/1403/110 +f 884/1413/107 885/1414/107 883/1415/107 +f 889/1416/111 898/1417/111 890/1418/111 +f 886/1419/109 891/1420/109 885/1414/109 +f 883/1415/110 893/1421/110 884/1413/110 +f 884/1413/111 894/1422/111 886/1419/111 +f 885/1414/112 892/1423/112 883/1415/112 +f 888/1424/108 891/1425/108 887/1426/108 +f 889/1427/108 892/1428/108 888/1429/108 +f 890/1418/108 893/1430/108 889/1416/108 +f 887/1431/108 894/1432/108 890/1433/108 +f 887/1426/112 896/1434/112 888/1424/112 +f 890/1433/109 895/1435/109 887/1431/109 +f 888/1429/110 897/1436/110 889/1427/110 +f 900/1437/108 901/1438/108 899/1439/108 +f 905/1440/111 914/1441/111 906/1442/111 +f 902/1443/110 907/1444/110 901/1438/110 +f 899/1439/109 909/1445/109 900/1437/109 +f 900/1437/111 910/1446/111 902/1443/111 +f 901/1438/112 908/1447/112 899/1439/112 +f 904/1448/107 907/1449/107 903/1450/107 +f 905/1451/107 908/1452/107 904/1453/107 +f 906/1442/107 909/1454/107 905/1440/107 +f 903/1455/107 910/1456/107 906/1457/107 +f 903/1450/112 912/1458/112 904/1448/112 +f 906/1457/110 911/1459/110 903/1455/110 +f 904/1453/109 913/1460/109 905/1451/109 +f 916/1461/108 917/1462/108 915/1463/108 +f 921/1464/111 930/1465/111 922/1466/111 +f 918/1467/110 923/1468/110 917/1462/110 +f 915/1463/109 925/1469/109 916/1461/109 +f 916/1461/111 926/1470/111 918/1467/111 +f 917/1462/112 924/1471/112 915/1463/112 +f 920/1472/107 923/1473/107 919/1474/107 +f 921/1475/107 924/1476/107 920/1477/107 +f 922/1466/107 925/1478/107 921/1464/107 +f 919/1479/107 926/1480/107 922/1481/107 +f 919/1474/112 928/1482/112 920/1472/112 +f 922/1481/110 927/1483/110 919/1479/110 +f 920/1477/109 929/1484/109 921/1475/109 +f 932/1485/108 933/1486/108 931/1487/108 +f 937/1488/111 946/1489/111 938/1490/111 +f 934/1491/110 939/1492/110 933/1486/110 +f 931/1487/109 941/1493/109 932/1485/109 +f 932/1485/111 942/1494/111 934/1491/111 +f 933/1486/112 940/1495/112 931/1487/112 +f 936/1496/107 939/1497/107 935/1498/107 +f 937/1499/107 940/1500/107 936/1501/107 +f 938/1490/107 941/1502/107 937/1488/107 +f 935/1503/107 942/1504/107 938/1505/107 +f 935/1498/112 944/1506/112 936/1496/112 +f 938/1505/110 943/1507/110 935/1503/110 +f 936/1501/109 945/1508/109 937/1499/109 +f 948/1509/109 949/1510/109 947/1511/109 +f 953/1512/111 962/1513/111 954/1514/111 +f 950/1515/108 955/1516/108 949/1510/108 +f 947/1511/107 957/1517/107 948/1509/107 +f 948/1509/111 958/1518/111 950/1515/111 +f 949/1510/112 956/1519/112 947/1511/112 +f 952/1520/110 955/1521/110 951/1522/110 +f 953/1523/110 956/1524/110 952/1525/110 +f 954/1514/110 957/1526/110 953/1512/110 +f 951/1527/110 958/1528/110 954/1529/110 +f 951/1522/112 960/1530/112 952/1520/112 +f 954/1529/108 959/1531/108 951/1527/108 +f 952/1525/107 961/1532/107 953/1523/107 +f 964/1533/109 965/1534/109 963/1535/109 +f 969/1536/111 978/1537/111 970/1538/111 +f 966/1539/108 971/1540/108 965/1534/108 +f 963/1535/107 973/1541/107 964/1533/107 +f 964/1533/111 974/1542/111 966/1539/111 +f 965/1534/112 972/1543/112 963/1535/112 +f 968/1544/110 971/1545/110 967/1546/110 +f 969/1547/110 972/1548/110 968/1549/110 +f 970/1538/110 973/1550/110 969/1536/110 +f 967/1551/110 974/1552/110 970/1553/110 +f 967/1546/112 976/1554/112 968/1544/112 +f 970/1553/108 975/1555/108 967/1551/108 +f 968/1549/107 977/1556/107 969/1547/107 +f 980/1557/109 981/1558/109 979/1559/109 +f 985/1560/111 994/1561/111 986/1562/111 +f 982/1563/108 987/1564/108 981/1558/108 +f 979/1559/107 989/1565/107 980/1557/107 +f 980/1557/111 990/1566/111 982/1563/111 +f 981/1558/112 988/1567/112 979/1559/112 +f 984/1568/110 987/1569/110 983/1570/110 +f 985/1571/110 988/1572/110 984/1573/110 +f 986/1562/110 989/1574/110 985/1560/110 +f 983/1575/110 990/1576/110 986/1577/110 +f 984/1568/112 991/1578/112 992/1579/112 +f 986/1577/108 991/1580/108 983/1575/108 +f 984/1573/107 993/1581/107 985/1571/107 +f 996/1582/110 997/1583/110 995/1584/110 +f 1001/1585/111 1010/1586/111 1002/1587/111 +f 998/1588/107 1003/1589/107 997/1583/107 +f 995/1584/108 1005/1590/108 996/1582/108 +f 996/1582/111 1006/1591/111 998/1588/111 +f 997/1583/112 1004/1592/112 995/1584/112 +f 1000/1593/109 1003/1594/109 999/1595/109 +f 1001/1596/109 1004/1597/109 1000/1598/109 +f 1002/1587/109 1005/1599/109 1001/1585/109 +f 999/1600/109 1006/1601/109 1002/1602/109 +f 1000/1593/112 1007/1603/112 1008/1604/112 +f 1002/1602/107 1007/1605/107 999/1600/107 +f 1000/1598/108 1009/1606/108 1001/1596/108 +f 1012/1607/110 1013/1608/110 1011/1609/110 +f 1017/1610/111 1026/1611/111 1018/1612/111 +f 1014/1613/107 1019/1614/107 1013/1608/107 +f 1011/1609/108 1021/1615/108 1012/1607/108 +f 1012/1607/111 1022/1616/111 1014/1613/111 +f 1013/1608/112 1020/1617/112 1011/1609/112 +f 1016/1618/109 1019/1619/109 1015/1620/109 +f 1017/1621/109 1020/1622/109 1016/1623/109 +f 1018/1612/109 1021/1624/109 1017/1610/109 +f 1015/1625/109 1022/1626/109 1018/1627/109 +f 1015/1620/112 1024/1628/112 1016/1618/112 +f 1018/1627/107 1023/1629/107 1015/1625/107 +f 1016/1623/108 1025/1630/108 1017/1621/108 +f 1028/1631/110 1029/1632/110 1027/1633/110 +f 1033/1634/111 1042/1635/111 1034/1636/111 +f 1030/1637/107 1035/1638/107 1029/1632/107 +f 1027/1633/108 1037/1639/108 1028/1631/108 +f 1028/1631/111 1038/1640/111 1030/1637/111 +f 1027/1633/112 1035/1641/112 1036/1642/112 +f 1032/1643/109 1035/1641/109 1031/1644/109 +f 1033/1645/109 1036/1646/109 1032/1647/109 +f 1034/1636/109 1037/1648/109 1033/1634/109 +f 1031/1649/109 1038/1650/109 1034/1651/109 +f 1032/1643/112 1039/1652/112 1040/1653/112 +f 1034/1651/107 1039/1654/107 1031/1649/107 +f 1032/1647/108 1041/1655/108 1033/1645/108 +f 566/989/107 563/1045/107 564/990/107 +f 568/992/108 570/995/108 569/993/108 +f 570/995/109 574/997/109 573/996/109 +f 574/997/107 572/1004/107 571/998/107 +f 572/999/110 568/992/110 567/994/110 +f 573/996/111 571/998/111 567/1001/111 +f 570/1003/112 568/1656/112 572/1004/112 +f 576/1005/108 578/1008/108 577/1006/108 +f 578/1008/109 582/1010/109 581/1009/109 +f 582/1010/107 580/1017/107 579/1011/107 +f 580/1012/110 576/1005/110 575/1007/110 +f 581/1009/111 579/1011/111 575/1014/111 +f 578/1016/112 576/1657/112 580/1017/112 +f 584/1018/108 586/1021/108 585/1019/108 +f 586/1021/109 590/1023/109 589/1022/109 +f 590/1023/107 588/1030/107 587/1024/107 +f 588/1025/110 584/1018/110 583/1020/110 +f 589/1022/111 587/1024/111 583/1027/111 +f 586/1029/112 584/1658/112 588/1030/112 +f 592/1031/108 594/1034/108 593/1032/108 +f 594/1034/109 598/1036/109 597/1035/109 +f 598/1036/107 596/1043/107 595/1037/107 +f 596/1038/110 592/1031/110 591/1033/110 +f 597/1035/111 595/1037/111 591/1040/111 +f 594/1042/112 592/1659/112 596/1043/112 +f 565/991/111 601/1660/111 602/1044/111 +f 563/1045/112 599/1661/112 600/1046/112 +f 602/1044/108 601/1660/108 600/1047/108 +f 606/1049/107 603/1662/107 604/1050/107 +f 605/1051/111 609/1663/111 610/1052/111 +f 603/1053/112 607/1056/112 608/1054/112 +f 610/1052/108 609/1663/108 608/1054/108 +f 614/1057/109 611/1061/109 612/1058/109 +f 613/1059/111 617/1664/111 618/1060/111 +f 611/1061/112 615/1665/112 616/1062/112 +f 618/1060/110 617/1664/110 616/1063/110 +f 622/1065/109 619/1666/109 620/1066/109 +f 621/1067/111 625/1667/111 626/1068/111 +f 619/1069/112 623/1072/112 624/1070/112 +f 626/1068/110 625/1667/110 624/1070/110 +f 628/1073/107 630/1079/107 629/1074/107 +f 633/1076/111 641/1668/111 642/1077/111 +f 630/1079/109 638/1092/109 635/1080/109 +f 627/1075/110 636/1088/110 637/1081/110 +f 628/1073/111 637/1090/111 638/1082/111 +f 629/1074/112 635/1085/112 636/1083/112 +f 632/1084/108 636/1083/108 635/1085/108 +f 633/1087/108 637/1081/108 636/1088/108 +f 634/1078/108 638/1082/108 637/1090/108 +f 631/1091/108 635/1080/108 638/1092/108 +f 631/1086/112 639/1669/112 640/1094/112 +f 634/1093/109 642/1670/109 639/1095/109 +f 632/1089/110 640/1671/110 641/1096/110 +f 645/1097/111 646/1672/111 644/1098/111 +f 649/1100/112 650/1104/112 647/1101/112 +f 645/1103/108 647/1101/108 650/1104/108 +f 644/1098/107 649/1100/107 648/1102/107 +f 646/1106/109 650/1104/109 649/1100/109 +f 643/1108/110 648/1102/110 647/1101/110 +f 653/1110/111 654/1673/111 652/1111/111 +f 657/1113/112 658/1117/112 655/1114/112 +f 653/1116/108 655/1114/108 658/1117/108 +f 652/1111/107 657/1113/107 656/1115/107 +f 654/1119/109 658/1117/109 657/1113/109 +f 651/1121/110 656/1115/110 655/1114/110 +f 661/1123/111 662/1674/111 660/1124/111 +f 665/1126/112 666/1130/112 663/1127/112 +f 661/1129/108 663/1127/108 666/1130/108 +f 660/1124/107 665/1126/107 664/1128/107 +f 662/1132/109 666/1130/109 665/1126/109 +f 659/1134/110 664/1128/110 663/1127/110 +f 667/1136/111 675/1148/111 676/1137/111 +f 673/1139/112 678/1675/112 677/1140/112 +f 668/1138/107 676/1137/107 678/1142/107 +f 669/1144/109 671/1168/109 674/1145/109 +f 668/1138/110 673/1676/110 672/1147/110 +f 677/1140/109 678/1675/109 676/1137/109 +f 672/1149/108 677/1677/108 675/1148/108 +f 680/1150/109 682/1161/109 681/1151/109 +f 686/1153/110 685/1160/110 683/1154/110 +f 681/1156/111 686/1162/111 684/1157/111 +f 679/1159/108 684/1678/108 683/1154/108 +f 680/1150/112 683/1154/112 685/1160/112 +f 682/1161/107 685/1160/107 686/1162/107 +f 689/1163/110 690/1167/110 688/1164/110 +f 669/1166/108 688/1679/108 690/1167/108 +f 671/1168/112 690/1167/112 689/1163/112 +f 670/1169/111 687/1172/111 688/1170/111 +f 674/1145/107 689/1163/107 687/1172/107 +f 700/1173/112 701/1210/112 717/1174/112 +f 699/1176/112 700/1173/112 716/1177/112 +f 698/1179/112 699/1176/112 715/1180/112 +f 697/1182/112 698/1179/112 714/1183/112 +f 696/1185/112 697/1182/112 713/1186/112 +f 695/1188/112 696/1185/112 712/1189/112 +f 695/1191/112 711/1680/112 710/1192/112 +f 694/1193/112 710/1681/112 709/1194/112 +f 693/1195/112 709/1682/112 708/1196/112 +f 692/1197/112 708/1683/112 707/1198/112 +f 691/1199/112 707/1684/112 722/1200/112 +f 706/1201/112 722/1685/112 721/1202/112 +f 705/1203/112 721/1686/112 720/1204/112 +f 704/1205/112 720/1687/112 719/1206/112 +f 703/1207/112 719/1688/112 718/1208/112 +f 701/1210/112 702/1209/112 718/1211/112 +f 732/1213/111 748/1689/111 749/1214/111 +f 731/1216/111 747/1690/111 748/1217/111 +f 730/1218/111 746/1691/111 747/1219/111 +f 729/1220/111 745/1692/111 746/1221/111 +f 728/1222/111 744/1693/111 745/1223/111 +f 727/1224/111 743/1694/111 744/1225/111 +f 742/1226/111 743/1695/111 727/1227/111 +f 741/1229/111 742/1696/111 726/1228/111 +f 739/1231/111 741/1697/111 725/1230/111 +f 740/1233/111 739/1698/111 723/1232/111 +f 754/1235/111 740/1699/111 724/1234/111 +f 753/1237/111 754/1700/111 738/1236/111 +f 752/1239/111 753/1701/111 737/1238/111 +f 751/1241/111 752/1702/111 736/1240/111 +f 750/1243/111 751/1703/111 735/1242/111 +f 733/1215/111 749/1704/111 750/1245/111 +f 756/1246/112 758/1253/112 757/1247/112 +f 761/1249/107 801/1316/107 802/1250/107 +f 757/1247/108 795/1306/108 796/1252/108 +f 758/1253/109 798/1313/109 795/1254/109 +f 755/1248/110 796/1309/110 797/1255/110 +f 756/1246/107 797/1311/107 798/1256/107 +f 794/1257/108 864/1299/108 863/1258/108 +f 791/1260/107 866/1297/107 865/1261/107 +f 779/1263/108 852/1269/108 851/1264/108 +f 781/1265/109 851/1264/109 854/1266/109 +f 780/1268/110 853/1360/110 852/1269/110 +f 785/1270/112 783/1362/112 784/1271/112 +f 769/1273/112 767/1367/112 768/1274/112 +f 764/1276/110 857/1369/110 858/1277/110 +f 765/1279/109 856/1282/109 855/1280/109 +f 763/1278/108 858/1277/108 856/1282/108 +f 775/1283/107 862/1289/107 861/1284/107 +f 778/1286/108 860/1291/108 859/1287/108 +f 776/1288/109 859/1287/109 862/1289/109 +f 777/1290/110 861/1376/110 860/1291/110 +f 772/1292/112 774/1378/112 773/1293/112 +f 766/1281/107 855/1280/107 857/1295/107 +f 792/1259/109 863/1258/109 866/1297/109 +f 793/1298/110 865/1384/110 864/1299/110 +f 788/1300/112 790/1386/112 789/1301/112 +f 782/1267/107 854/1266/107 853/1303/107 +f 760/1305/111 796/1252/111 795/1306/111 +f 761/1308/111 797/1255/111 796/1309/111 +f 762/1251/111 798/1256/111 797/1311/111 +f 759/1312/111 795/1254/111 798/1313/111 +f 799/1315/111 802/1250/111 801/1316/111 +f 759/1307/108 799/1705/108 800/1318/108 +f 762/1314/109 802/1706/109 799/1319/109 +f 760/1310/110 800/1707/110 801/1320/110 +f 805/1321/111 806/1708/111 804/1322/111 +f 808/1324/112 809/1709/112 810/1325/112 +f 804/1322/113 809/1709/113 808/1324/113 +f 805/1327/114 807/1326/114 810/1325/114 +f 813/1329/111 814/1710/111 812/1330/111 +f 816/1332/112 817/1711/112 818/1333/112 +f 812/1330/115 817/1711/115 816/1332/115 +f 813/1335/116 815/1334/116 818/1333/116 +f 820/1337/112 842/1348/112 840/1338/112 +f 849/1340/108 847/1712/108 848/1341/108 +f 838/1343/111 839/1713/111 841/1344/111 +f 846/1346/111 847/1712/111 849/1340/111 +f 841/1344/107 839/1713/107 840/1338/107 +f 826/1351/107 824/1714/107 822/1715/107 +f 822/1715/107 836/1716/107 826/1351/107 +f 836/1716/107 834/1717/107 826/1351/107 +f 834/1717/107 832/1718/107 826/1351/107 +f 832/1718/107 830/1349/107 826/1351/107 +f 844/1352/112 850/1342/112 848/1341/112 +f 835/1356/108 821/1719/108 823/1720/108 +f 823/1720/108 825/1721/108 827/1354/108 +f 827/1354/108 829/1722/108 831/1355/108 +f 831/1355/108 833/1723/108 835/1356/108 +f 835/1356/108 823/1720/108 827/1354/108 +f 784/1357/117 851/1264/117 852/1269/117 +f 786/1359/118 852/1269/118 853/1360/118 +f 785/1270/119 853/1303/119 854/1266/119 +f 783/1363/120 854/1266/120 851/1264/120 +f 767/1365/120 855/1280/120 856/1282/120 +f 769/1273/119 857/1295/119 855/1280/119 +f 770/1368/118 858/1277/118 857/1369/118 +f 768/1371/117 856/1282/117 858/1277/117 +f 773/1373/117 859/1287/117 860/1291/117 +f 771/1375/118 860/1291/118 861/1376/118 +f 772/1292/119 861/1284/119 862/1289/119 +f 774/1379/120 862/1289/120 859/1287/120 +f 789/1381/117 863/1258/117 864/1299/117 +f 787/1383/118 864/1299/118 865/1384/118 +f 788/1300/119 865/1261/119 866/1297/119 +f 790/1387/120 866/1297/120 863/1258/120 +f 868/1389/107 870/1395/107 869/1390/107 +f 873/1392/111 881/1724/111 882/1393/111 +f 870/1395/109 878/1408/109 875/1396/109 +f 867/1391/110 876/1404/110 877/1397/110 +f 868/1389/111 877/1406/111 878/1398/111 +f 869/1390/112 875/1401/112 876/1399/112 +f 872/1400/108 876/1399/108 875/1401/108 +f 873/1403/108 877/1397/108 876/1404/108 +f 874/1394/108 878/1398/108 877/1406/108 +f 871/1407/108 875/1396/108 878/1408/108 +f 871/1402/112 879/1725/112 880/1410/112 +f 874/1409/109 882/1726/109 879/1411/109 +f 872/1405/110 880/1727/110 881/1412/110 +f 884/1413/107 886/1419/107 885/1414/107 +f 889/1416/111 897/1728/111 898/1417/111 +f 886/1419/109 894/1432/109 891/1420/109 +f 883/1415/110 892/1428/110 893/1421/110 +f 884/1413/111 893/1430/111 894/1422/111 +f 885/1414/112 891/1425/112 892/1423/112 +f 888/1424/108 892/1423/108 891/1425/108 +f 889/1427/108 893/1421/108 892/1428/108 +f 890/1418/108 894/1422/108 893/1430/108 +f 887/1431/108 891/1420/108 894/1432/108 +f 887/1426/112 895/1729/112 896/1434/112 +f 890/1433/109 898/1730/109 895/1435/109 +f 888/1429/110 896/1731/110 897/1436/110 +f 900/1437/108 902/1443/108 901/1438/108 +f 905/1440/111 913/1732/111 914/1441/111 +f 902/1443/110 910/1456/110 907/1444/110 +f 899/1439/109 908/1452/109 909/1445/109 +f 900/1437/111 909/1454/111 910/1446/111 +f 901/1438/112 907/1449/112 908/1447/112 +f 904/1448/107 908/1447/107 907/1449/107 +f 905/1451/107 909/1445/107 908/1452/107 +f 906/1442/107 910/1446/107 909/1454/107 +f 903/1455/107 907/1444/107 910/1456/107 +f 903/1450/112 911/1733/112 912/1458/112 +f 906/1457/110 914/1734/110 911/1459/110 +f 904/1453/109 912/1735/109 913/1460/109 +f 916/1461/108 918/1467/108 917/1462/108 +f 921/1464/111 929/1736/111 930/1465/111 +f 918/1467/110 926/1480/110 923/1468/110 +f 915/1463/109 924/1476/109 925/1469/109 +f 916/1461/111 925/1478/111 926/1470/111 +f 917/1462/112 923/1473/112 924/1471/112 +f 920/1472/107 924/1471/107 923/1473/107 +f 921/1475/107 925/1469/107 924/1476/107 +f 922/1466/107 926/1470/107 925/1478/107 +f 919/1479/107 923/1468/107 926/1480/107 +f 919/1474/112 927/1737/112 928/1482/112 +f 922/1481/110 930/1738/110 927/1483/110 +f 920/1477/109 928/1739/109 929/1484/109 +f 932/1485/108 934/1491/108 933/1486/108 +f 937/1488/111 945/1740/111 946/1489/111 +f 934/1491/110 942/1504/110 939/1492/110 +f 931/1487/109 940/1500/109 941/1493/109 +f 932/1485/111 941/1502/111 942/1494/111 +f 933/1486/112 939/1497/112 940/1495/112 +f 936/1496/107 940/1495/107 939/1497/107 +f 937/1499/107 941/1493/107 940/1500/107 +f 938/1490/107 942/1494/107 941/1502/107 +f 935/1503/107 939/1492/107 942/1504/107 +f 935/1498/112 943/1741/112 944/1506/112 +f 938/1505/110 946/1742/110 943/1507/110 +f 936/1501/109 944/1743/109 945/1508/109 +f 948/1509/109 950/1515/109 949/1510/109 +f 953/1512/111 961/1744/111 962/1513/111 +f 950/1515/108 958/1528/108 955/1516/108 +f 947/1511/107 956/1524/107 957/1517/107 +f 948/1509/111 957/1526/111 958/1518/111 +f 949/1510/112 955/1521/112 956/1519/112 +f 952/1520/110 956/1519/110 955/1521/110 +f 953/1523/110 957/1517/110 956/1524/110 +f 954/1514/110 958/1518/110 957/1526/110 +f 951/1527/110 955/1516/110 958/1528/110 +f 951/1522/112 959/1745/112 960/1530/112 +f 954/1529/108 962/1746/108 959/1531/108 +f 952/1525/107 960/1747/107 961/1532/107 +f 964/1533/109 966/1539/109 965/1534/109 +f 969/1536/111 977/1748/111 978/1537/111 +f 966/1539/108 974/1552/108 971/1540/108 +f 963/1535/107 972/1548/107 973/1541/107 +f 964/1533/111 973/1550/111 974/1542/111 +f 965/1534/112 971/1545/112 972/1543/112 +f 968/1544/110 972/1543/110 971/1545/110 +f 969/1547/110 973/1541/110 972/1548/110 +f 970/1538/110 974/1542/110 973/1550/110 +f 967/1551/110 971/1540/110 974/1552/110 +f 967/1546/112 975/1749/112 976/1554/112 +f 970/1553/108 978/1750/108 975/1555/108 +f 968/1549/107 976/1751/107 977/1556/107 +f 980/1557/109 982/1563/109 981/1558/109 +f 985/1560/111 993/1752/111 994/1561/111 +f 982/1563/108 990/1576/108 987/1564/108 +f 979/1559/107 988/1572/107 989/1565/107 +f 980/1557/111 989/1574/111 990/1566/111 +f 981/1558/112 987/1569/112 988/1567/112 +f 984/1568/110 988/1567/110 987/1569/110 +f 985/1571/110 989/1565/110 988/1572/110 +f 986/1562/110 990/1566/110 989/1574/110 +f 983/1575/110 987/1564/110 990/1576/110 +f 984/1568/112 983/1570/112 991/1578/112 +f 986/1577/108 994/1753/108 991/1580/108 +f 984/1573/107 992/1754/107 993/1581/107 +f 996/1582/110 998/1588/110 997/1583/110 +f 1001/1585/111 1009/1755/111 1010/1586/111 +f 998/1588/107 1006/1601/107 1003/1589/107 +f 995/1584/108 1004/1597/108 1005/1590/108 +f 996/1582/111 1005/1599/111 1006/1591/111 +f 997/1583/112 1003/1594/112 1004/1592/112 +f 1000/1593/109 1004/1592/109 1003/1594/109 +f 1001/1596/109 1005/1590/109 1004/1597/109 +f 1002/1587/109 1006/1591/109 1005/1599/109 +f 999/1600/109 1003/1589/109 1006/1601/109 +f 1000/1593/112 999/1595/112 1007/1603/112 +f 1002/1602/107 1010/1756/107 1007/1605/107 +f 1000/1598/108 1008/1757/108 1009/1606/108 +f 1012/1607/110 1014/1613/110 1013/1608/110 +f 1017/1610/111 1025/1758/111 1026/1611/111 +f 1014/1613/107 1022/1626/107 1019/1614/107 +f 1011/1609/108 1020/1622/108 1021/1615/108 +f 1012/1607/111 1021/1624/111 1022/1616/111 +f 1013/1608/112 1019/1619/112 1020/1617/112 +f 1016/1618/109 1020/1617/109 1019/1619/109 +f 1017/1621/109 1021/1615/109 1020/1622/109 +f 1018/1612/109 1022/1616/109 1021/1624/109 +f 1015/1625/109 1019/1614/109 1022/1626/109 +f 1015/1620/112 1023/1759/112 1024/1628/112 +f 1018/1627/107 1026/1760/107 1023/1629/107 +f 1016/1623/108 1024/1761/108 1025/1630/108 +f 1028/1631/110 1030/1637/110 1029/1632/110 +f 1033/1634/111 1041/1762/111 1042/1635/111 +f 1030/1637/107 1038/1650/107 1035/1638/107 +f 1027/1633/108 1036/1646/108 1037/1639/108 +f 1028/1631/111 1037/1648/111 1038/1640/111 +f 1027/1633/112 1029/1632/112 1035/1641/112 +f 1032/1643/109 1036/1642/109 1035/1641/109 +f 1033/1645/109 1037/1639/109 1036/1646/109 +f 1034/1636/109 1038/1640/109 1037/1648/109 +f 1031/1649/109 1035/1638/109 1038/1650/109 +f 1032/1643/112 1031/1644/112 1039/1652/112 +f 1034/1651/107 1042/1763/107 1039/1654/107 +f 1032/1647/108 1040/1764/108 1041/1655/108 +s 1 +f 698/1179/121 731/1216/110 699/1176/110 +f 713/1186/115 744/1765/122 712/1187/122 +f 699/1176/110 732/1213/123 700/1173/123 +f 714/1183/124 745/1766/115 713/1184/115 +f 700/1173/123 733/1215/113 701/1210/113 +f 715/1180/109 746/1767/124 714/1181/124 +f 701/1210/113 734/1244/125 702/1209/125 +f 716/1177/126 747/1768/109 715/1178/109 +f 702/1209/125 735/1242/107 703/1207/107 +f 717/1174/114 748/1769/126 716/1175/126 +f 703/1207/107 736/1240/122 704/1205/122 +f 718/1211/127 749/1770/114 717/1212/114 +f 704/1205/122 737/1238/115 705/1203/115 +f 691/1199/109 723/1232/126 692/1197/126 +f 719/1688/108 750/1771/127 718/1208/127 +f 705/1203/115 738/1236/124 706/1201/124 +f 692/1197/126 725/1230/114 693/1195/114 +f 720/1687/128 751/1772/108 719/1206/108 +f 706/1201/124 724/1234/109 691/1199/109 +f 693/1195/114 726/1228/127 694/1193/127 +f 721/1686/116 752/1773/128 720/1204/128 +f 708/1683/123 740/1774/110 707/1198/110 +f 694/1193/127 727/1227/108 695/1191/108 +f 722/1685/121 753/1775/116 721/1202/116 +f 709/1682/113 739/1776/123 708/1196/123 +f 695/1188/108 728/1222/128 696/1185/128 +f 707/1684/110 754/1777/121 722/1200/121 +f 710/1681/125 741/1778/113 709/1194/113 +f 696/1185/128 729/1220/116 697/1182/116 +f 711/1680/107 742/1779/125 710/1192/125 +f 697/1182/116 730/1218/121 698/1179/121 +f 712/1189/122 743/1780/107 711/1190/107 +f 822/1781/109 823/1782/129 821/1783/109 +f 824/1784/129 825/1785/111 823/1782/129 +f 826/1786/111 827/1787/130 825/1788/111 +f 828/1789/130 829/1790/110 827/1787/130 +f 830/1791/110 831/1792/118 829/1790/110 +f 832/1793/118 833/1794/112 831/1792/118 +f 834/1795/112 835/1796/120 833/1794/112 +f 836/1797/120 821/1783/109 835/1796/120 +f 698/1179/121 730/1218/121 731/1216/110 +f 713/1186/115 745/1798/115 744/1765/122 +f 699/1176/110 731/1216/110 732/1213/123 +f 714/1183/124 746/1799/124 745/1766/115 +f 700/1173/123 732/1213/123 733/1215/113 +f 715/1180/109 747/1800/109 746/1767/124 +f 701/1210/113 733/1215/113 734/1244/125 +f 716/1177/126 748/1801/126 747/1768/109 +f 702/1209/125 734/1244/125 735/1242/107 +f 717/1174/114 749/1802/114 748/1769/126 +f 703/1207/107 735/1242/107 736/1240/122 +f 718/1211/127 750/1803/127 749/1770/114 +f 704/1205/122 736/1240/122 737/1238/115 +f 691/1199/109 724/1234/109 723/1232/126 +f 719/1688/108 751/1804/108 750/1771/127 +f 705/1203/115 737/1238/115 738/1236/124 +f 692/1197/126 723/1232/126 725/1230/114 +f 720/1687/128 752/1805/128 751/1772/108 +f 706/1201/124 738/1236/124 724/1234/109 +f 693/1195/114 725/1230/114 726/1228/127 +f 721/1686/116 753/1806/116 752/1773/128 +f 708/1683/123 739/1807/123 740/1774/110 +f 694/1193/127 726/1228/127 727/1227/108 +f 722/1685/121 754/1808/121 753/1775/116 +f 709/1682/113 741/1809/113 739/1776/123 +f 695/1188/108 727/1224/108 728/1222/128 +f 707/1684/110 740/1810/110 754/1777/121 +f 710/1681/125 742/1811/125 741/1778/113 +f 696/1185/128 728/1222/128 729/1220/116 +f 711/1680/107 743/1812/107 742/1779/125 +f 697/1182/116 729/1220/116 730/1218/121 +f 712/1189/122 744/1813/122 743/1780/107 +f 822/1781/109 824/1784/129 823/1782/129 +f 824/1784/129 826/1814/111 825/1785/111 +f 826/1786/111 828/1789/130 827/1787/130 +f 828/1789/130 830/1791/110 829/1790/110 +f 830/1791/110 832/1793/118 831/1792/118 +f 832/1793/118 834/1795/112 833/1794/112 +f 834/1795/112 836/1797/120 835/1796/120 +f 836/1797/120 822/1781/109 821/1783/109 diff --git a/src/main/resources/assets/hbm/textures/models/machines/assembly_machine.png b/src/main/resources/assets/hbm/textures/models/machines/assembly_machine.png index 6fc1a618fbdeb03988bab626b0a89b3c3d323850..df04f0555d19305b40131283786f51b2c5f83333 100644 GIT binary patch literal 2748 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 XwiWEu161H21mtw$^zo<1&L{sHLB7>N From 6b1d61166fff6be28e9451161c48aabcdebc603a Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 7 Jul 2025 16:56:23 +0200 Subject: [PATCH 252/491] rotten grussy --- src/main/java/com/hbm/blocks/ModBlocks.java | 5 +- .../machine/MachineAssemblyMachine.java | 45 + .../machine/ModuleMachineAssembler.java | 2 +- .../TileEntityMachineAssemblyMachine.java | 286 +++++ .../TileEntityMachineChemicalFactory.java | 2 +- .../assets/hbm/models/assembler_main.obj | 1142 ----------------- .../assets/hbm/models/assembler_wheel.obj | 645 ---------- .../textures/gui/processing/gui_assembler.png | Bin 0 -> 3517 bytes 8 files changed, 337 insertions(+), 1790 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachineAssemblyMachine.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java delete mode 100644 src/main/resources/assets/hbm/models/assembler_main.obj delete mode 100644 src/main/resources/assets/hbm/models/assembler_wheel.obj create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 8b04b34a4..f6dcd2065 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1002,7 +1002,8 @@ public class ModBlocks { public static Block machine_mining_laser; public static Block barricade; // a sand bag that drops nothing, for automated walling purposes - public static Block machine_assembler; + @Deprecated public static Block machine_assembler; + public static Block machine_assembly_machine; public static Block machine_assemfac; public static Block machine_arc_welder; public static Block machine_soldering_station; @@ -2228,6 +2229,7 @@ public class ModBlocks { machine_mining_laser = new MachineMiningLaser(Material.iron).setBlockName("machine_mining_laser").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_mining_laser"); barricade = new BlockNoDrop(Material.sand).setBlockName("barricade").setHardness(1.0F).setResistance(2.5F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":barricade"); machine_assembler = new MachineAssembler(Material.iron).setBlockName("machine_assembler").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_assembler"); + machine_assembly_machine = new MachineAssemblyMachine(Material.iron).setBlockName("machine_assembly_machine").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_assemfac = new MachineAssemfac(Material.iron).setBlockName("machine_assemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_arc_welder = new MachineArcWelder(Material.iron).setBlockName("machine_arc_welder").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_soldering_station = new MachineSolderingStation(Material.iron).setBlockName("machine_soldering_station").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3273,6 +3275,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_arc_furnace_on, machine_arc_furnace_on.getUnlocalizedName()); GameRegistry.registerBlock(machine_microwave, machine_microwave.getUnlocalizedName()); GameRegistry.registerBlock(machine_assembler, machine_assembler.getUnlocalizedName()); + register(machine_assembly_machine); GameRegistry.registerBlock(machine_assemfac, machine_assemfac.getUnlocalizedName()); GameRegistry.registerBlock(machine_chemplant, machine_chemplant.getUnlocalizedName()); register(machine_chemical_plant); diff --git a/src/main/java/com/hbm/blocks/machine/MachineAssemblyMachine.java b/src/main/java/com/hbm/blocks/machine/MachineAssemblyMachine.java new file mode 100644 index 000000000..b7cbceafe --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineAssemblyMachine.java @@ -0,0 +1,45 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineAssemblyMachine extends BlockDummyable { + + public MachineAssemblyMachine(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachineAssemblyMachine(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } + + @Override public int[] getDimensions() { return new int[] {2, 0, 1, 1, 1, 1}; } + @Override public int getOffset() { return 1; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x -= dir.offsetX; + z -= dir.offsetZ; + + for(int i = -1; i <= 1; i++) for(int j = -1; j <= 1; j++) { + if(i != 0 || j != 0) this.makeExtra(world, x + i, y, z + j); + } + } +} diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java index e132a5031..2188b306a 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java @@ -21,7 +21,7 @@ public class ModuleMachineAssembler extends ModuleMachineBase { return null; } - public ModuleMachineAssembler itemInput(int... a) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = a[i]; return this; } + public ModuleMachineAssembler itemInput(int from) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = from + i; return this; } public ModuleMachineAssembler itemOutput(int a) { outputSlots[0] = a; return this; } public ModuleMachineAssembler fluidInput(FluidTank a) { inputTanks[0] = a; return this; } public ModuleMachineAssembler fluidOutput(FluidTank a) { outputTanks[0] = a; return this; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java new file mode 100644 index 000000000..3a057c184 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java @@ -0,0 +1,286 @@ +package com.hbm.tileentity.machine; + +import java.util.HashMap; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.UpgradeManagerNT; +import com.hbm.inventory.container.ContainerMachineChemicalPlant; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachineChemicalPlant; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.module.machine.ModuleMachineAssembler; +import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; + +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider { + + public FluidTank inputTank; + public FluidTank outputTank; + + public long power; + public long maxPower = 1_000_000; + public boolean didProcess = false; + + public boolean frame = false; + private AudioWrapper audio; + + public ModuleMachineAssembler assemblerModule; + + public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); + + public TileEntityMachineAssemblyMachine() { + super(17); + this.inputTank = new FluidTank(Fluids.NONE, 32_000); + this.outputTank = new FluidTank(Fluids.NONE, 32_000); + + this.assemblerModule = new ModuleMachineAssembler(0, this, slots) + .itemInput(4).itemOutput(16) + .fluidInput(inputTank).fluidOutput(outputTank); + } + + @Override + public String getName() { + return "container.machineAssemblyMachine"; + } + + @Override + public void updateEntity() { + + if(maxPower <= 0) this.maxPower = 1_000_000; + + if(!worldObj.isRemote) { + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + upgradeManager.checkSlots(slots, 2, 3); + + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos); + if(inputTank.getTankType() != Fluids.NONE) this.trySubscribe(inputTank.getTankType(), worldObj, pos); + if(outputTank.getFill() > 0) this.tryProvide(outputTank, worldObj, pos); + } + + double speed = 1D; + double pow = 1D; + + speed += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) / 3D; + speed += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3); + + pow -= Math.min(upgradeManager.getLevel(UpgradeType.POWER), 3) * 0.25D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.SPEED), 3) * 1D; + pow += Math.min(upgradeManager.getLevel(UpgradeType.OVERDRIVE), 3) * 10D / 3D; + + this.assemblerModule.update(speed, pow, true); + this.didProcess = this.assemblerModule.didProcess; + if(this.assemblerModule.markDirty) this.markDirty(); + + if(didProcess) { + if(slots[0] != null && slots[0].getItem() == ModItems.meteorite_sword_alloyed) + slots[0] = new ItemStack(ModItems.meteorite_sword_machined); + } + + this.networkPackNT(100); + + } else { + + if(worldObj.getTotalWorldTime() % 20 == 0) { + frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); + } + + if(this.didProcess && MainRegistry.proxy.me().getDistance(xCoord , yCoord, zCoord) < 50) { + if(audio == null) { + audio = createAudioLoop(); + audio.startSound(); + } else if(!audio.isPlaying()) { + audio = rebootAudio(audio); + } + audio.keepAlive(); + audio.updateVolume(this.getVolume(1F)); + + } else { + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + } + } + + @Override public AudioWrapper createAudioLoop() { + return MainRegistry.proxy.getLoopedSound("hbm:block.assembler", xCoord, yCoord, zCoord, 1F, 15F, 1.0F, 20); + } + + @Override public void onChunkUnload() { + if(audio != null) { audio.stopSound(); audio = null; } + } + + @Override public void invalidate() { + super.invalidate(); + if(audio != null) { audio.stopSound(); audio = null; } + } + + public DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord + 2, yCoord, zCoord - 1, Library.POS_X), + new DirPos(xCoord + 2, yCoord, zCoord + 0, Library.POS_X), + new DirPos(xCoord + 2, yCoord, zCoord + 1, Library.POS_X), + new DirPos(xCoord - 2, yCoord, zCoord - 1, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 0, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord + 1, Library.NEG_X), + new DirPos(xCoord - 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord + 0, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord + 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord - 1, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord + 0, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord + 1, yCoord, zCoord - 2, Library.NEG_Z), + }; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + this.inputTank.serialize(buf); + this.outputTank.serialize(buf); + buf.writeLong(power); + buf.writeLong(maxPower); + buf.writeBoolean(didProcess); + this.assemblerModule.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.inputTank.deserialize(buf); + this.outputTank.deserialize(buf); + this.power = buf.readLong(); + this.maxPower = buf.readLong(); + this.didProcess = buf.readBoolean(); + this.assemblerModule.deserialize(buf); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.inputTank.readFromNBT(nbt, "i"); + this.outputTank.readFromNBT(nbt, "o"); + this.power = nbt.getLong("power"); + this.maxPower = nbt.getLong("maxPower"); + this.assemblerModule.readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + this.inputTank.writeToNBT(nbt, "i"); + this.outputTank.writeToNBT(nbt, "o"); + nbt.setLong("power", power); + nbt.setLong("maxPower", maxPower); + this.assemblerModule.writeToNBT(nbt); + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + if(slot == 0) return true; // battery + if(slot >= 2 && slot <= 3 && stack.getItem() instanceof ItemMachineUpgrade) return true; // upgrades + if(this.assemblerModule.isItemValid(slot, stack)) return true; // recipe input crap + return false; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i == 16; + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return maxPower; } + + @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {inputTank}; } + @Override public FluidTank[] getSendingTanks() { return new FluidTank[] {outputTank}; } + @Override public FluidTank[] getAllTanks() { return new FluidTank[] {inputTank, outputTank}; } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineAssemblyMachine(player.inventory, this); } + @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineAssemblyMachine(player.inventory, this); } + + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("index") && data.hasKey("selection")) { + int index = data.getInteger("index"); + String selection = data.getString("selection"); + if(index == 0) { + this.assemblerModule.recipe = selection; + this.markChanged(); + } + } + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 1, yCoord, zCoord - 1, xCoord + 2, yCoord + 3, zCoord + 2); + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assembly_machine)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_SPEED, "+" + (level * 100 / 3) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 50) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_CONSUMPTION, "-" + (level * 25) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public HashMap getValidUpgrades() { + HashMap upgrades = new HashMap<>(); + upgrades.put(UpgradeType.SPEED, 3); + upgrades.put(UpgradeType.POWER, 3); + upgrades.put(UpgradeType.OVERDRIVE, 3); + return upgrades; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index 655947212..62b9f0a68 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -383,7 +383,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl @Override public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { - info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_chemical_plant)); + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_chemical_factory)); if(type == UpgradeType.SPEED) { info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_SPEED, "+" + (level * 100 / 3) + "%")); info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 50) + "%")); diff --git a/src/main/resources/assets/hbm/models/assembler_main.obj b/src/main/resources/assets/hbm/models/assembler_main.obj deleted file mode 100644 index 0f371b213..000000000 --- a/src/main/resources/assets/hbm/models/assembler_main.obj +++ /dev/null @@ -1,1142 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'assembler_main.blend' -# www.blender.org -o Cube_Cube.001 -v -1.500000 0.000000 1.500000 -v -1.500000 0.250000 1.500000 -v -1.500000 0.000000 -1.500000 -v -1.500000 0.250000 -1.500000 -v 1.500000 0.000000 1.500000 -v 1.500000 0.250000 1.500000 -v 1.500000 0.000000 -1.500000 -v 1.500000 0.250000 -1.500000 -v -1.250000 0.500000 1.250000 -v -1.250000 0.500000 -1.250000 -v 1.250000 0.500000 -1.250000 -v 1.250000 0.500000 1.250000 -v 1.250000 1.000000 -1.250000 -v -1.250000 1.000000 -1.250000 -v -1.250000 1.000000 1.250000 -v 1.250000 1.000000 1.250000 -v 1.062500 1.500000 -1.062500 -v 1.062500 1.500000 1.062500 -v 1.000000 0.250000 -0.250000 -v 1.000000 0.750000 -0.250000 -v 1.000000 0.250000 -0.750000 -v 1.000000 0.750000 -0.750000 -v 2.000000 0.000000 0.000000 -v 2.000000 1.000000 0.000000 -v 2.000000 0.000000 -1.000000 -v 2.000000 1.000000 -1.000000 -v 1.500000 1.000000 -1.000000 -v 1.500000 0.000000 -1.000000 -v 1.500000 1.000000 0.000000 -v 1.500000 0.000000 0.000000 -v 2.000000 0.875000 -0.875000 -v 2.000000 0.125000 -0.875000 -v 2.000000 0.875000 -0.125000 -v 2.000000 0.125000 -0.125000 -v 1.500000 0.687500 -0.687500 -v 1.500000 0.312500 -0.687500 -v 1.500000 0.687500 -0.312500 -v 1.500000 0.312500 -0.312500 -v -1.000000 0.250000 0.750000 -v -1.000000 0.750000 0.750000 -v -1.000000 0.250000 0.250000 -v -1.000000 0.750000 0.250000 -v -2.000000 0.000000 1.000000 -v -2.000000 1.000000 1.000000 -v -2.000000 0.000000 0.000000 -v -2.000000 1.000000 0.000000 -v -1.500000 1.000000 0.000000 -v -1.500000 0.000000 0.000000 -v -1.500000 1.000000 1.000000 -v -1.500000 0.000000 1.000000 -v -2.000000 0.875000 0.125000 -v -2.000000 0.125000 0.125000 -v -2.000000 0.875000 0.875000 -v -2.000000 0.125000 0.875000 -v -1.500000 0.687500 0.312500 -v -1.500000 0.312500 0.312500 -v -1.500000 0.687500 0.687500 -v -1.500000 0.312500 0.687500 -v 0.656250 0.343750 -2.000000 -v 0.656250 0.656250 -2.000000 -v 0.343750 0.343750 -1.150000 -v 0.343750 0.656250 -1.150000 -v 0.343750 0.343750 -2.000000 -v 0.343750 0.656250 -2.000000 -v 0.656250 0.343750 -1.150000 -v 0.656250 0.656250 -1.150000 -v 0.328125 0.671875 -1.150000 -v 0.328125 0.328125 -1.150000 -v 0.671875 0.671875 -1.150000 -v 0.671875 0.328125 -1.150000 -v 0.328125 0.671875 -1.000000 -v 0.328125 0.328125 -1.000000 -v 0.671875 0.671875 -1.000000 -v 0.671875 0.328125 -1.000000 -v -0.343750 0.343750 -2.000000 -v -0.343750 0.656250 -2.000000 -v -0.656250 0.343750 -1.150000 -v -0.656250 0.656250 -1.150000 -v -0.656250 0.343750 -2.000000 -v -0.656250 0.656250 -2.000000 -v -0.343750 0.343750 -1.150000 -v -0.343750 0.656250 -1.150000 -v -0.671875 0.671875 -1.150000 -v -0.671875 0.328125 -1.150000 -v -0.328125 0.671875 -1.150000 -v -0.328125 0.328125 -1.150000 -v -0.671875 0.671875 -1.000000 -v -0.671875 0.328125 -1.000000 -v -0.328125 0.671875 -1.000000 -v -0.328125 0.328125 -1.000000 -v -0.343750 0.343750 2.000000 -v -0.343750 0.656250 2.000000 -v -0.656250 0.343750 1.150000 -v -0.656250 0.656250 1.150000 -v -0.656250 0.343750 2.000000 -v -0.656250 0.656250 2.000000 -v -0.343750 0.343750 1.150000 -v -0.343750 0.656250 1.150000 -v -0.671875 0.671875 1.150000 -v -0.671875 0.328125 1.150000 -v -0.328125 0.671875 1.150000 -v -0.328125 0.328125 1.150000 -v -0.671875 0.671875 1.000000 -v -0.671875 0.328125 1.000000 -v -0.328125 0.671875 1.000000 -v -0.328125 0.328125 1.000000 -v 0.656250 0.343750 2.000000 -v 0.656250 0.656250 2.000000 -v 0.343750 0.343750 1.150000 -v 0.343750 0.656250 1.150000 -v 0.343750 0.343750 2.000000 -v 0.343750 0.656250 2.000000 -v 0.656250 0.343750 1.150000 -v 0.656250 0.656250 1.150000 -v 0.328125 0.671875 1.150000 -v 0.328125 0.328125 1.150000 -v 0.671875 0.671875 1.150000 -v 0.671875 0.328125 1.150000 -v 0.328125 0.671875 1.000000 -v 0.328125 0.328125 1.000000 -v 0.671875 0.671875 1.000000 -v 0.671875 0.328125 1.000000 -v -1.062500 1.500000 -1.062500 -v -1.062500 1.500000 1.062500 -v 0.903125 1.500000 0.903125 -v 0.903125 1.500000 -0.903125 -v -0.903125 1.500000 -0.903125 -v -0.903125 1.500000 0.903125 -v 0.903125 1.350000 0.903125 -v 0.903125 1.350000 -0.903125 -v -0.903125 1.350000 -0.903125 -v -0.903125 1.350000 0.903125 -v 0.817113 1.500000 0.903125 -v 0.731101 1.500000 0.903125 -v 0.645089 1.500000 0.903125 -v 0.559078 1.500000 0.903125 -v 0.473066 1.500000 0.903125 -v 0.387054 1.500000 0.903125 -v 0.301042 1.500000 0.903125 -v 0.215030 1.500000 0.903125 -v 0.129018 1.500000 0.903125 -v 0.043006 1.500000 0.903125 -v -0.043006 1.500000 0.903125 -v -0.129018 1.500000 0.903125 -v -0.215030 1.500000 0.903125 -v -0.301042 1.500000 0.903125 -v -0.387054 1.500000 0.903125 -v -0.473065 1.500000 0.903125 -v -0.559077 1.500000 0.903125 -v -0.645089 1.500000 0.903125 -v -0.731101 1.500000 0.903125 -v -0.817113 1.500000 0.903125 -v 0.817113 1.750000 0.903125 -v 0.731101 1.750000 0.903125 -v 0.645089 1.750000 0.903125 -v 0.559078 1.750000 0.903125 -v 0.473066 1.750000 0.903125 -v 0.387054 1.750000 0.903125 -v 0.301042 1.750000 0.903125 -v 0.215030 1.750000 0.903125 -v 0.129018 1.750000 0.903125 -v 0.043006 1.750000 0.903125 -v -0.043006 1.750000 0.903125 -v -0.129018 1.750000 0.903125 -v -0.215030 1.750000 0.903125 -v -0.301042 1.750000 0.903125 -v -0.387054 1.750000 0.903125 -v -0.473065 1.750000 0.903125 -v -0.559077 1.750000 0.903125 -v -0.645089 1.750000 0.903125 -v -0.731101 1.750000 0.903125 -v -0.817113 1.750000 0.903125 -v 0.817113 2.000000 0.653125 -v 0.731101 2.000000 0.653125 -v 0.645089 2.000000 0.653125 -v 0.559078 2.000000 0.653125 -v 0.473066 2.000000 0.653125 -v 0.387054 2.000000 0.653125 -v 0.301042 2.000000 0.653125 -v 0.215030 2.000000 0.653125 -v 0.129018 2.000000 0.653125 -v 0.043006 2.000000 0.653125 -v -0.043006 2.000000 0.653125 -v -0.129018 2.000000 0.653125 -v -0.215030 2.000000 0.653125 -v -0.301042 2.000000 0.653125 -v -0.387054 2.000000 0.653125 -v -0.473065 2.000000 0.653125 -v -0.559077 2.000000 0.653125 -v -0.645089 2.000000 0.653125 -v -0.731101 2.000000 0.653125 -v -0.817113 2.000000 0.653125 -v -0.817113 1.500000 -0.903125 -v -0.731101 1.500000 -0.903125 -v -0.645089 1.500000 -0.903125 -v -0.559078 1.500000 -0.903125 -v -0.473066 1.500000 -0.903125 -v -0.387054 1.500000 -0.903125 -v -0.301042 1.500000 -0.903125 -v -0.215030 1.500000 -0.903125 -v -0.129018 1.500000 -0.903125 -v -0.043006 1.500000 -0.903125 -v 0.043006 1.500000 -0.903125 -v 0.129018 1.500000 -0.903125 -v 0.215030 1.500000 -0.903125 -v 0.301042 1.500000 -0.903125 -v 0.387054 1.500000 -0.903125 -v 0.473065 1.500000 -0.903125 -v 0.559077 1.500000 -0.903125 -v 0.645089 1.500000 -0.903125 -v 0.731101 1.500000 -0.903125 -v 0.817113 1.500000 -0.903125 -v -0.817113 1.750000 -0.903125 -v -0.731101 1.750000 -0.903125 -v -0.645089 1.750000 -0.903125 -v -0.559078 1.750000 -0.903125 -v -0.473066 1.750000 -0.903125 -v -0.387054 1.750000 -0.903125 -v -0.301042 1.750000 -0.903125 -v -0.215030 1.750000 -0.903125 -v -0.129018 1.750000 -0.903125 -v -0.043006 1.750000 -0.903125 -v 0.043006 1.750000 -0.903125 -v 0.129018 1.750000 -0.903125 -v 0.215030 1.750000 -0.903125 -v 0.301042 1.750000 -0.903125 -v 0.387054 1.750000 -0.903125 -v 0.473065 1.750000 -0.903125 -v 0.559077 1.750000 -0.903125 -v 0.645089 1.750000 -0.903125 -v 0.731101 1.750000 -0.903125 -v 0.817113 1.750000 -0.903125 -v -0.817113 2.000000 -0.653125 -v -0.731101 2.000000 -0.653125 -v -0.645089 2.000000 -0.653125 -v -0.559078 2.000000 -0.653125 -v -0.473066 2.000000 -0.653125 -v -0.387054 2.000000 -0.653125 -v -0.301042 2.000000 -0.653125 -v -0.215030 2.000000 -0.653125 -v -0.129018 2.000000 -0.653125 -v -0.043006 2.000000 -0.653125 -v 0.043006 2.000000 -0.653125 -v 0.129018 2.000000 -0.653125 -v 0.215030 2.000000 -0.653125 -v 0.301042 2.000000 -0.653125 -v 0.387054 2.000000 -0.653125 -v 0.473065 2.000000 -0.653125 -v 0.559077 2.000000 -0.653125 -v 0.645089 2.000000 -0.653125 -v 0.731101 2.000000 -0.653125 -v 0.817113 2.000000 -0.653125 -v 1.916667 0.250000 -1.100000 -v 1.916667 0.750000 -1.100000 -v 1.666667 0.500000 -1.100000 -v 1.916667 0.250000 0.100000 -v 1.916667 0.750000 0.100000 -v 1.666667 0.500000 0.100000 -v -1.583333 0.250000 -0.100000 -v -1.583333 0.750000 -0.100000 -v -1.833333 0.500000 -0.100000 -v -1.583333 0.250000 1.100000 -v -1.583333 0.750000 1.100000 -v -1.833333 0.500000 1.100000 -vt 0.576309 0.460125 -vt 0.576309 0.482085 -vt 0.312788 0.482085 -vt 0.281091 0.465560 -vt 0.281091 0.487663 -vt 0.015849 0.487663 -vt 0.312788 0.535743 -vt 0.312788 0.513782 -vt 0.576309 0.513783 -vt 0.311067 0.037952 -vt 0.311067 0.015849 -vt 0.576309 0.015849 -vt 0.015849 0.015849 -vt 0.279369 0.015849 -vt 0.279369 0.279369 -vt 0.334748 0.566799 -vt 0.576309 0.535743 -vt 0.312788 0.460125 -vt 0.334748 0.429069 -vt 0.015849 0.465560 -vt 0.037952 0.434301 -vt 0.576309 0.037952 -vt 0.554205 0.069211 -vt 0.333170 0.069211 -vt 0.037952 0.390094 -vt 0.258987 0.390094 -vt 0.806630 0.015849 -vt 0.894470 0.015849 -vt 0.894470 0.059769 -vt 0.134126 0.756933 -vt 0.123146 0.767913 -vt 0.057265 0.767913 -vt 0.806630 0.445525 -vt 0.806630 0.401605 -vt 0.855734 0.379645 -vt 0.847469 0.740928 -vt 0.891389 0.740929 -vt 0.891389 0.828769 -vt 0.855734 0.228410 -vt 0.806630 0.206450 -vt 0.806630 0.162530 -vt 0.899654 0.228410 -vt 0.855734 0.140570 -vt 0.798365 0.762888 -vt 0.847469 0.828769 -vt 0.855734 0.467485 -vt 0.899654 0.379645 -vt 0.806630 0.059769 -vt 0.872510 0.108873 -vt 0.026829 0.798350 -vt 0.073735 0.814820 -vt 0.073735 0.847760 -vt 0.046285 0.905647 -vt 0.057265 0.894667 -vt 0.123145 0.894667 -vt 0.164562 0.875210 -vt 0.153582 0.864230 -vt 0.153582 0.798350 -vt 0.015849 0.787370 -vt 0.026829 0.864230 -vt 0.106675 0.814820 -vt 0.106675 0.847760 -vt 0.850550 0.587022 -vt 0.806630 0.587022 -vt 0.806630 0.499182 -vt 0.354205 0.854232 -vt 0.420085 0.854232 -vt 0.431065 0.865212 -vt 0.850550 0.260107 -vt 0.899654 0.282067 -vt 0.899654 0.325988 -vt 0.608006 0.899590 -vt 0.608006 0.811750 -vt 0.651926 0.811750 -vt 0.891389 0.643351 -vt 0.891389 0.687271 -vt 0.842285 0.709231 -vt 0.842285 0.621391 -vt 0.798365 0.709231 -vt 0.651926 0.899590 -vt 0.701030 0.833710 -vt 0.806630 0.260107 -vt 0.850550 0.347948 -vt 0.899654 0.565062 -vt 0.850550 0.499182 -vt 0.370675 0.774385 -vt 0.370675 0.807325 -vt 0.323768 0.823795 -vt 0.420085 0.727478 -vt 0.354205 0.727478 -vt 0.343225 0.716498 -vt 0.450521 0.823795 -vt 0.450521 0.757915 -vt 0.461501 0.746935 -vt 0.323768 0.757915 -vt 0.312788 0.834775 -vt 0.403615 0.807325 -vt 0.403615 0.774385 -vt 0.619264 0.360402 -vt 0.672059 0.307606 -vt 0.691469 0.327016 -vt 0.619264 0.254810 -vt 0.617323 0.254810 -vt 0.638674 0.233459 -vt 0.763675 0.254810 -vt 0.710880 0.307606 -vt 0.691469 0.288196 -vt 0.744265 0.379812 -vt 0.638674 0.235400 -vt 0.608006 0.245494 -vt 0.629357 0.224142 -vt 0.763675 0.360402 -vt 0.765616 0.360402 -vt 0.744265 0.381753 -vt 0.744265 0.235400 -vt 0.744265 0.233459 -vt 0.765616 0.254810 -vt 0.638674 0.379812 -vt 0.638674 0.381753 -vt 0.617323 0.360402 -vt 0.774933 0.369719 -vt 0.753582 0.391070 -vt 0.629357 0.391070 -vt 0.608006 0.369718 -vt 0.753582 0.224142 -vt 0.774933 0.245494 -vt 0.763675 0.046517 -vt 0.710880 0.099312 -vt 0.691469 0.079902 -vt 0.763675 0.152108 -vt 0.765616 0.152108 -vt 0.744265 0.173459 -vt 0.619264 0.152108 -vt 0.672059 0.099312 -vt 0.691469 0.118722 -vt 0.638674 0.027106 -vt 0.744265 0.171518 -vt 0.774933 0.161425 -vt 0.753582 0.182776 -vt 0.619264 0.046517 -vt 0.617323 0.046517 -vt 0.638674 0.025165 -vt 0.638674 0.171518 -vt 0.638674 0.173459 -vt 0.617323 0.152108 -vt 0.744265 0.027106 -vt 0.744265 0.025165 -vt 0.765616 0.046517 -vt 0.608006 0.037200 -vt 0.629357 0.015849 -vt 0.753582 0.015849 -vt 0.774933 0.037200 -vt 0.629357 0.182776 -vt 0.608006 0.161425 -vt 0.691469 0.525640 -vt 0.710880 0.506230 -vt 0.763675 0.559026 -vt 0.744265 0.432084 -vt 0.765616 0.453435 -vt 0.763675 0.453435 -vt 0.691469 0.486820 -vt 0.672059 0.506230 -vt 0.619264 0.453435 -vt 0.638674 0.578436 -vt 0.744265 0.434025 -vt 0.753582 0.422767 -vt 0.774933 0.444118 -vt 0.638674 0.580377 -vt 0.617323 0.559026 -vt 0.619264 0.559026 -vt 0.617323 0.453435 -vt 0.638674 0.432084 -vt 0.638674 0.434025 -vt 0.765616 0.559026 -vt 0.744265 0.580377 -vt 0.744265 0.578436 -vt 0.629357 0.589694 -vt 0.608006 0.568343 -vt 0.774933 0.568343 -vt 0.753582 0.589694 -vt 0.608006 0.444118 -vt 0.629357 0.422767 -vt 0.105061 0.608573 -vt 0.105061 0.636023 -vt 0.030397 0.636023 -vt 0.133884 0.712060 -vt 0.103689 0.712060 -vt 0.105061 0.710688 -vt 0.132511 0.636023 -vt 0.132511 0.608573 -vt 0.207176 0.608573 -vt 0.105061 0.533909 -vt 0.132511 0.710688 -vt 0.133884 0.725236 -vt 0.103689 0.725236 -vt 0.103689 0.532536 -vt 0.133884 0.532536 -vt 0.132511 0.533909 -vt 0.208548 0.607201 -vt 0.208548 0.637396 -vt 0.207176 0.636023 -vt 0.029025 0.637396 -vt 0.029025 0.607201 -vt 0.030397 0.608573 -vt 0.103689 0.519360 -vt 0.133884 0.519360 -vt 0.015849 0.637396 -vt 0.015849 0.607201 -vt 0.221724 0.607201 -vt 0.221724 0.637396 -vt 0.554205 0.113418 -vt 0.537628 0.160631 -vt 0.349748 0.160631 -vt 0.333170 0.113418 -vt 0.554349 0.566799 -vt 0.554349 0.610719 -vt 0.334748 0.610719 -vt 0.334748 0.385149 -vt 0.554349 0.385149 -vt 0.493263 0.170323 -vt 0.054530 0.342881 -vt 0.242409 0.342880 -vt 0.351218 0.338242 -vt 0.537879 0.338242 -vt 0.537879 0.657626 -vt 0.351218 0.657626 -vt 0.365217 0.324243 -vt 0.365217 0.311067 -vt 0.523879 0.311066 -vt 0.098895 0.333189 -vt 0.523879 0.324243 -vt 0.523879 0.671625 -vt 0.365217 0.671625 -vt 0.766667 0.780053 -vt 0.608006 0.780053 -vt 0.608006 0.621391 -vt 0.523879 0.684801 -vt 0.365217 0.684801 -vt 0.496673 0.170201 -vt 0.531971 0.176003 -vt 0.364530 0.192445 -vt 0.095484 0.333311 -vt 0.060187 0.327509 -vt 0.227627 0.311066 -vt 0.236623 0.984151 -vt 0.214662 0.984151 -vt 0.214662 0.976596 -vt 0.531841 0.231698 -vt 0.509881 0.231698 -vt 0.509881 0.224142 -vt 0.533562 0.943717 -vt 0.511602 0.943717 -vt 0.511602 0.936161 -vt 0.828780 0.938842 -vt 0.806820 0.938842 -vt 0.806820 0.931287 -vt 0.236623 0.944899 -vt 0.214662 0.944899 -vt 0.214662 0.937344 -vt 0.953501 0.899590 -vt 0.931541 0.899590 -vt 0.931541 0.892035 -vt 0.828780 0.978095 -vt 0.806820 0.978095 -vt 0.806820 0.970539 -vt 0.533562 0.982969 -vt 0.511602 0.982969 -vt 0.511602 0.975414 -vt 0.531841 0.270950 -vt 0.509881 0.270950 -vt 0.509881 0.263395 -vt 0.533562 0.904464 -vt 0.511602 0.904464 -vt 0.511602 0.896909 -vt 0.480545 0.904464 -vt 0.480545 0.896909 -vt 0.478824 0.270950 -vt 0.478824 0.263395 -vt 0.480546 0.982969 -vt 0.480546 0.975414 -vt 0.775764 0.978095 -vt 0.775764 0.970539 -vt 0.900485 0.899590 -vt 0.900485 0.892035 -vt 0.183606 0.944899 -vt 0.183606 0.937344 -vt 0.775764 0.938842 -vt 0.775764 0.931287 -vt 0.480546 0.943717 -vt 0.480546 0.936161 -vt 0.478824 0.231698 -vt 0.478824 0.224142 -vt 0.183606 0.984151 -vt 0.183606 0.976596 -vt 0.037809 0.976596 -vt 0.068865 0.976596 -vt 0.068865 0.984151 -vt 0.333027 0.224143 -vt 0.364083 0.224142 -vt 0.364083 0.231698 -vt 0.312788 0.936161 -vt 0.334748 0.936161 -vt 0.334748 0.943717 -vt 0.311067 0.224143 -vt 0.333027 0.231698 -vt 0.015849 0.976596 -vt 0.037809 0.984151 -vt 0.608006 0.931287 -vt 0.629966 0.931287 -vt 0.629966 0.938842 -vt 0.015849 0.937344 -vt 0.037809 0.937344 -vt 0.037809 0.944899 -vt 0.732727 0.892035 -vt 0.754687 0.892035 -vt 0.754687 0.899590 -vt 0.608006 0.970539 -vt 0.629966 0.970539 -vt 0.629966 0.978095 -vt 0.312788 0.975414 -vt 0.334748 0.975414 -vt 0.334748 0.982969 -vt 0.311067 0.263395 -vt 0.333027 0.263395 -vt 0.333027 0.270950 -vt 0.312788 0.896909 -vt 0.334748 0.896909 -vt 0.334748 0.904464 -vt 0.365804 0.896909 -vt 0.365804 0.904464 -vt 0.364083 0.263395 -vt 0.364083 0.270950 -vt 0.365804 0.975414 -vt 0.365804 0.982969 -vt 0.661022 0.970539 -vt 0.661022 0.978095 -vt 0.785744 0.892035 -vt 0.785744 0.899590 -vt 0.068865 0.937344 -vt 0.068865 0.944899 -vt 0.661022 0.931287 -vt 0.661022 0.938842 -vt 0.365804 0.936161 -vt 0.365804 0.943717 -vt 0.253421 0.638898 -vt 0.253421 0.594978 -vt 0.275381 0.616938 -vt 0.515159 0.760418 -vt 0.493199 0.738458 -vt 0.515159 0.716498 -vt 0.253421 0.714515 -vt 0.253421 0.670595 -vt 0.275381 0.692555 -vt 0.275381 0.563281 -vt 0.253421 0.541320 -vt 0.275381 0.519360 -vt 0.015849 0.279369 -vt 0.554349 0.429069 -vt 0.258987 0.434301 -vt 0.046285 0.756933 -vt 0.899654 0.140570 -vt 0.798364 0.806809 -vt 0.899654 0.467485 -vt 0.828590 0.108873 -vt 0.134125 0.905647 -vt 0.164562 0.787370 -vt 0.015849 0.875210 -vt 0.343224 0.865212 -vt 0.798364 0.621391 -vt 0.701030 0.877630 -vt 0.806630 0.347948 -vt 0.899654 0.521142 -vt 0.431065 0.716498 -vt 0.461502 0.834775 -vt 0.312788 0.746935 -vt 0.363839 0.174722 -vt 0.375834 0.174919 -vt 0.531331 0.168272 -vt 0.527282 0.168652 -vt 0.523273 0.168887 -vt 0.519466 0.169118 -vt 0.515811 0.169319 -vt 0.512310 0.169498 -vt 0.508962 0.169663 -vt 0.505764 0.169815 -vt 0.502713 0.169957 -vt 0.499748 0.170088 -vt 0.489313 0.170468 -vt 0.484693 0.170641 -vt 0.479208 0.170849 -vt 0.472561 0.171104 -vt 0.464263 0.171426 -vt 0.453455 0.171849 -vt 0.438489 0.172437 -vt 0.415776 0.173333 -vt 0.228319 0.328790 -vt 0.216323 0.328593 -vt 0.060826 0.335240 -vt 0.064875 0.334860 -vt 0.068884 0.334625 -vt 0.072692 0.334394 -vt 0.076346 0.334193 -vt 0.079847 0.334014 -vt 0.083195 0.333849 -vt 0.086393 0.333697 -vt 0.089444 0.333555 -vt 0.092409 0.333424 -vt 0.102844 0.333044 -vt 0.107464 0.332871 -vt 0.112949 0.332663 -vt 0.119596 0.332407 -vt 0.127894 0.332085 -vt 0.138702 0.331663 -vt 0.153668 0.331075 -vt 0.176381 0.330179 -vt 0.766667 0.621391 -vt 0.236623 0.976596 -vt 0.531841 0.224142 -vt 0.533562 0.936161 -vt 0.828780 0.931287 -vt 0.236623 0.937344 -vt 0.953501 0.892035 -vt 0.828780 0.970539 -vt 0.533562 0.975414 -vt 0.531841 0.263395 -vt 0.533562 0.896909 -vt 0.312788 0.943717 -vt 0.311067 0.231698 -vt 0.015849 0.984151 -vt 0.608006 0.938842 -vt 0.015849 0.944899 -vt 0.732727 0.899590 -vt 0.608006 0.978095 -vt 0.312788 0.982969 -vt 0.311067 0.270950 -vt 0.312788 0.904464 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 0.000000 1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.707100 0.707100 0.000000 -vn -0.707100 0.707100 0.000000 -vn 0.000000 0.707100 -0.707100 -vn 0.000000 0.707100 0.707100 -vn -0.447200 0.000000 0.894400 -vn -0.447200 0.894400 0.000000 -vn 0.000000 1.000000 0.000000 -vn -0.447200 -0.894400 0.000000 -vn -0.447200 0.000000 -0.894400 -vn 0.351100 0.000000 -0.936300 -vn 0.351100 0.000000 0.936300 -vn 0.351100 0.936300 0.000000 -vn 0.351100 -0.936300 0.000000 -vn 0.447200 0.000000 0.894400 -vn 0.447200 0.894400 0.000000 -vn 0.447200 -0.894400 0.000000 -vn 0.447200 0.000000 -0.894400 -vn -0.351100 0.000000 -0.936300 -vn -0.351100 0.000000 0.936300 -vn -0.351100 0.936300 0.000000 -vn -0.351100 -0.936300 0.000000 -vn 0.000000 0.351100 0.936300 -vn 0.000000 0.351100 -0.936300 -vn -0.936300 0.351100 0.000000 -vn 0.936300 0.351100 0.000000 -s off -f 4/1/1 3/2/1 1/3/1 -f 8/4/2 7/5/2 3/6/2 -f 6/7/3 5/8/3 7/9/3 -f 2/10/4 1/11/4 5/12/4 -f 3/13/5 7/14/5 5/15/5 -f 12/16/6 6/7/6 8/17/6 -f 4/1/7 2/18/7 9/19/7 -f 8/4/8 4/20/8 10/21/8 -f 6/22/9 12/23/9 9/24/9 -f 10/21/2 14/25/2 13/26/2 -f 26/27/2 25/28/2 28/29/2 -f 25/30/3 32/31/3 34/32/3 -f 20/33/10 19/34/10 30/35/10 -f 28/36/5 25/37/5 23/38/5 -f 27/39/11 22/40/11 20/41/11 -f 26/42/12 27/39/12 29/43/12 -f 21/44/13 28/36/13 30/45/13 -f 29/46/4 30/35/4 23/47/4 -f 27/48/14 28/29/14 21/49/14 -f 34/50/15 38/51/15 37/52/15 -f 24/53/3 33/54/3 31/55/3 -f 26/56/3 31/57/3 32/58/3 -f 23/59/3 34/50/3 33/60/3 -f 37/52/3 38/51/3 36/61/3 -f 31/57/16 35/62/16 36/61/16 -f 32/31/17 36/61/17 38/51/17 -f 33/54/18 37/52/18 35/62/18 -f 48/63/2 45/64/2 46/65/2 -f 54/66/1 52/67/1 45/68/1 -f 50/69/19 39/70/19 40/71/19 -f 43/72/5 45/73/5 48/74/5 -f 40/75/20 42/76/20 47/77/20 -f 49/78/12 47/77/12 46/79/12 -f 50/80/21 48/74/21 41/81/21 -f 43/82/4 50/69/4 49/83/4 -f 41/84/22 48/63/22 47/85/22 -f 57/86/23 58/87/23 54/88/23 -f 51/89/1 53/90/1 44/91/1 -f 52/92/1 51/93/1 46/94/1 -f 53/95/1 54/88/1 43/96/1 -f 56/97/1 58/87/1 57/86/1 -f 56/97/24 55/98/24 51/93/24 -f 58/87/25 56/97/25 52/67/25 -f 55/98/26 57/86/26 53/90/26 -f 65/99/3 59/100/3 60/101/3 -f 65/102/2 70/103/2 68/104/2 -f 62/105/1 64/106/1 63/107/1 -f 66/108/12 60/101/12 64/106/12 -f 61/109/5 63/107/5 59/100/5 -f 60/101/2 59/100/2 63/107/2 -f 70/103/5 74/110/5 72/111/5 -f 62/112/2 67/113/2 69/114/2 -f 61/115/2 68/116/2 67/117/2 -f 66/118/2 69/119/2 70/120/2 -f 67/113/12 71/121/12 73/122/12 -f 69/119/3 73/123/3 74/124/3 -f 68/116/1 72/125/1 71/126/1 -f 81/127/3 75/128/3 76/129/3 -f 81/130/2 86/131/2 84/132/2 -f 78/133/1 80/134/1 79/135/1 -f 82/136/12 76/129/12 80/134/12 -f 77/137/5 79/135/5 75/128/5 -f 76/129/2 75/128/2 79/135/2 -f 86/131/5 90/138/5 88/139/5 -f 78/140/2 83/141/2 85/142/2 -f 77/143/2 84/144/2 83/145/2 -f 82/146/2 85/147/2 86/148/2 -f 83/141/12 87/149/12 89/150/12 -f 85/147/3 89/151/3 90/152/3 -f 84/144/1 88/153/1 87/154/1 -f 92/155/3 91/156/3 97/157/3 -f 100/158/4 102/159/4 97/160/4 -f 95/161/1 96/162/1 94/163/1 -f 96/162/12 92/155/12 98/164/12 -f 91/156/5 95/161/5 93/165/5 -f 95/161/4 91/156/4 92/155/4 -f 104/166/5 106/167/5 102/159/5 -f 101/168/4 99/169/4 94/170/4 -f 99/171/4 100/172/4 93/173/4 -f 102/174/4 101/175/4 98/176/4 -f 105/177/12 103/178/12 99/169/12 -f 106/179/3 105/180/3 101/175/3 -f 103/181/1 104/182/1 100/172/1 -f 108/183/3 107/184/3 113/185/3 -f 116/186/4 118/187/4 113/188/4 -f 111/189/1 112/190/1 110/191/1 -f 112/190/12 108/183/12 114/192/12 -f 107/184/5 111/189/5 109/193/5 -f 111/189/4 107/184/4 108/183/4 -f 120/194/5 122/195/5 118/187/5 -f 117/196/4 115/197/4 110/198/4 -f 115/199/4 116/200/4 109/201/4 -f 118/202/4 117/203/4 114/204/4 -f 121/205/12 119/206/12 115/197/12 -f 122/207/3 121/208/3 117/203/3 -f 119/209/1 120/210/1 116/200/1 -f 16/211/27 18/212/27 124/213/27 -f 12/23/4 16/211/4 15/214/4 -f 11/215/3 13/216/3 16/217/3 -f 9/19/1 15/218/1 14/219/1 -f 18/212/12 143/220/12 124/213/12 -f 14/25/28 123/221/28 17/222/28 -f 15/218/29 124/223/29 123/224/29 -f 13/216/30 17/225/30 18/226/30 -f 128/227/3 132/228/3 131/229/3 -f 123/221/12 203/230/12 17/222/12 -f 124/223/12 128/227/12 127/231/12 -f 17/225/12 126/232/12 125/233/12 -f 130/234/12 131/235/12 132/236/12 -f 126/232/1 130/237/1 129/238/1 -f 142/239/2 129/240/2 132/241/2 -f 202/242/4 131/243/4 130/244/4 -f 193/245/2 213/246/2 214/247/2 -f 195/248/2 215/249/2 216/250/2 -f 197/251/2 217/252/2 218/253/2 -f 199/254/2 219/255/2 220/256/2 -f 201/257/2 221/258/2 222/259/2 -f 203/260/2 223/261/2 224/262/2 -f 205/263/2 225/264/2 226/265/2 -f 207/266/2 227/267/2 228/268/2 -f 209/269/2 229/270/2 230/271/2 -f 211/272/2 231/273/2 232/274/2 -f 231/273/8 251/275/8 252/276/8 -f 229/270/8 249/277/8 250/278/8 -f 227/267/8 247/279/8 248/280/8 -f 225/264/8 245/281/8 246/282/8 -f 223/261/8 243/283/8 244/284/8 -f 221/258/8 241/285/8 242/286/8 -f 219/255/8 239/287/8 240/288/8 -f 217/252/8 237/289/8 238/290/8 -f 215/249/8 235/291/8 236/292/8 -f 213/246/8 233/293/8 234/294/8 -f 171/295/9 191/296/9 192/297/9 -f 169/298/9 189/299/9 190/300/9 -f 147/301/4 167/302/4 168/303/4 -f 149/304/4 169/298/4 170/305/4 -f 151/306/4 171/295/4 172/307/4 -f 145/308/4 165/309/4 166/310/4 -f 143/311/4 163/312/4 164/313/4 -f 141/314/4 161/315/4 162/316/4 -f 139/317/4 159/318/4 160/319/4 -f 137/320/4 157/321/4 158/322/4 -f 135/323/4 155/324/4 156/325/4 -f 133/326/4 153/327/4 154/328/4 -f 153/327/9 173/329/9 174/330/9 -f 155/324/9 175/331/9 176/332/9 -f 157/321/9 177/333/9 178/334/9 -f 159/318/9 179/335/9 180/336/9 -f 161/315/9 181/337/9 182/338/9 -f 163/312/9 183/339/9 184/340/9 -f 165/309/9 185/341/9 186/342/9 -f 167/302/9 187/343/9 188/344/9 -f 252/276/12 251/275/12 174/330/12 -f 250/278/12 249/277/12 176/332/12 -f 248/280/12 247/279/12 178/334/12 -f 246/282/12 245/281/12 180/336/12 -f 244/284/12 243/283/12 182/338/12 -f 242/286/12 241/285/12 184/340/12 -f 234/294/12 233/293/12 192/297/12 -f 236/292/12 235/291/12 190/300/12 -f 238/290/12 237/289/12 188/344/12 -f 240/288/12 239/287/12 186/342/12 -f 254/345/2 253/346/2 255/347/2 -f 257/348/4 258/349/4 256/350/4 -f 260/351/2 259/352/2 261/353/2 -f 263/354/4 264/355/4 262/356/4 -f 2/18/1 4/1/1 1/3/1 -f 4/20/2 8/4/2 3/6/2 -f 8/17/3 6/7/3 7/9/3 -f 6/22/4 2/10/4 5/12/4 -f 1/357/5 3/13/5 5/15/5 -f 11/215/6 12/16/6 8/17/6 -f 10/358/7 4/1/7 9/19/7 -f 11/359/8 8/4/8 10/21/8 -f 2/10/9 6/22/9 9/24/9 -f 11/359/2 10/21/2 13/26/2 -f 27/48/2 26/27/2 28/29/2 -f 23/360/3 25/30/3 34/32/3 -f 29/46/10 20/33/10 30/35/10 -f 30/45/5 28/36/5 23/38/5 -f 29/43/11 27/39/11 20/41/11 -f 24/361/12 26/42/12 29/43/12 -f 19/362/13 21/44/13 30/45/13 -f 24/363/4 29/46/4 23/47/4 -f 22/364/14 27/48/14 21/49/14 -f 33/60/15 34/50/15 37/52/15 -f 26/365/3 24/53/3 31/55/3 -f 25/366/3 26/56/3 32/58/3 -f 24/367/3 23/59/3 33/60/3 -f 35/62/3 37/52/3 36/61/3 -f 32/58/16 31/57/16 36/61/16 -f 34/32/17 32/31/17 38/51/17 -f 31/55/18 33/54/18 35/62/18 -f 47/85/2 48/63/2 46/65/2 -f 43/368/1 54/66/1 45/68/1 -f 49/83/19 50/69/19 40/71/19 -f 50/80/5 43/72/5 48/74/5 -f 49/78/20 40/75/20 47/77/20 -f 44/369/12 49/78/12 46/79/12 -f 39/370/21 50/80/21 41/81/21 -f 44/371/4 43/82/4 49/83/4 -f 42/372/22 41/84/22 47/85/22 -f 53/95/23 57/86/23 54/88/23 -f 46/373/1 51/89/1 44/91/1 -f 45/374/1 52/92/1 46/94/1 -f 44/375/1 53/95/1 43/96/1 -f 55/98/1 56/97/1 57/86/1 -f 52/92/24 56/97/24 51/93/24 -f 54/66/25 58/87/25 52/67/25 -f 51/89/26 55/98/26 53/90/26 -f 66/118/3 65/99/3 60/101/3 -f 61/109/2 65/102/2 68/104/2 -f 61/115/1 62/105/1 63/107/1 -f 62/112/12 66/108/12 64/106/12 -f 65/102/5 61/109/5 59/100/5 -f 64/106/2 60/101/2 63/107/2 -f 68/104/5 70/103/5 72/111/5 -f 66/108/2 62/112/2 69/114/2 -f 62/105/2 61/115/2 67/117/2 -f 65/99/2 66/118/2 70/120/2 -f 69/114/12 67/113/12 73/122/12 -f 70/120/3 69/119/3 74/124/3 -f 67/117/1 68/116/1 71/126/1 -f 82/146/3 81/127/3 76/129/3 -f 77/137/2 81/130/2 84/132/2 -f 77/143/1 78/133/1 79/135/1 -f 78/140/12 82/136/12 80/134/12 -f 81/130/5 77/137/5 75/128/5 -f 80/134/2 76/129/2 79/135/2 -f 84/132/5 86/131/5 88/139/5 -f 82/136/2 78/140/2 85/142/2 -f 78/133/2 77/143/2 83/145/2 -f 81/127/2 82/146/2 86/148/2 -f 85/142/12 83/141/12 89/150/12 -f 86/148/3 85/147/3 90/152/3 -f 83/145/1 84/144/1 87/154/1 -f 98/176/3 92/155/3 97/157/3 -f 93/165/4 100/158/4 97/160/4 -f 93/173/1 95/161/1 94/163/1 -f 94/170/12 96/162/12 98/164/12 -f 97/160/5 91/156/5 93/165/5 -f 96/162/4 95/161/4 92/155/4 -f 100/158/5 104/166/5 102/159/5 -f 98/164/4 101/168/4 94/170/4 -f 94/163/4 99/171/4 93/173/4 -f 97/157/4 102/174/4 98/176/4 -f 101/168/12 105/177/12 99/169/12 -f 102/174/3 106/179/3 101/175/3 -f 99/171/1 103/181/1 100/172/1 -f 114/204/3 108/183/3 113/185/3 -f 109/193/4 116/186/4 113/188/4 -f 109/201/1 111/189/1 110/191/1 -f 110/198/12 112/190/12 114/192/12 -f 113/188/5 107/184/5 109/193/5 -f 112/190/4 111/189/4 108/183/4 -f 116/186/5 120/194/5 118/187/5 -f 114/192/4 117/196/4 110/198/4 -f 110/191/4 115/199/4 109/201/4 -f 113/185/4 118/202/4 114/204/4 -f 117/196/12 121/205/12 115/197/12 -f 118/202/3 122/207/3 117/203/3 -f 115/199/1 119/209/1 116/200/1 -f 15/214/27 16/211/27 124/213/27 -f 9/24/4 12/23/4 15/214/4 -f 12/16/3 11/215/3 16/217/3 -f 10/358/1 9/19/1 14/219/1 -f 128/376/12 124/213/12 152/377/12 -f 18/212/12 125/378/12 133/379/12 -f 133/379/12 134/380/12 18/212/12 -f 135/381/12 136/382/12 18/212/12 -f 137/383/12 138/384/12 18/212/12 -f 139/385/12 140/386/12 18/212/12 -f 141/387/12 142/239/12 18/212/12 -f 143/220/12 144/388/12 124/213/12 -f 145/389/12 146/390/12 124/213/12 -f 147/391/12 148/392/12 124/213/12 -f 149/393/12 150/394/12 124/213/12 -f 151/395/12 152/377/12 124/213/12 -f 18/212/12 134/380/12 135/381/12 -f 151/395/12 124/213/12 150/394/12 -f 148/392/12 149/393/12 124/213/12 -f 144/388/12 145/389/12 124/213/12 -f 140/386/12 141/387/12 18/212/12 -f 136/382/12 137/383/12 18/212/12 -f 147/391/12 124/213/12 146/390/12 -f 18/212/12 138/384/12 139/385/12 -f 142/239/12 143/220/12 18/212/12 -f 13/26/28 14/25/28 17/222/28 -f 14/219/29 15/218/29 123/224/29 -f 16/217/30 13/216/30 18/226/30 -f 127/231/3 128/227/3 131/229/3 -f 126/396/12 17/222/12 212/397/12 -f 123/221/12 127/398/12 193/399/12 -f 193/399/12 194/400/12 123/221/12 -f 195/401/12 196/402/12 123/221/12 -f 197/403/12 198/404/12 123/221/12 -f 199/405/12 200/406/12 123/221/12 -f 201/407/12 202/242/12 123/221/12 -f 203/230/12 204/408/12 17/222/12 -f 205/409/12 206/410/12 17/222/12 -f 207/411/12 208/412/12 17/222/12 -f 209/413/12 210/414/12 17/222/12 -f 211/415/12 212/397/12 17/222/12 -f 123/221/12 194/400/12 195/401/12 -f 211/415/12 17/222/12 210/414/12 -f 208/412/12 209/413/12 17/222/12 -f 204/408/12 205/409/12 17/222/12 -f 200/406/12 201/407/12 123/221/12 -f 196/402/12 197/403/12 123/221/12 -f 207/411/12 17/222/12 206/410/12 -f 123/221/12 198/404/12 199/405/12 -f 202/242/12 203/230/12 123/221/12 -f 123/224/12 124/223/12 127/231/12 -f 18/226/12 17/225/12 125/233/12 -f 129/416/12 130/234/12 132/236/12 -f 125/233/1 126/232/1 129/238/1 -f 132/241/2 128/376/2 152/377/2 -f 152/377/2 151/395/2 132/241/2 -f 150/394/2 149/393/2 132/241/2 -f 148/392/2 147/391/2 132/241/2 -f 146/390/2 145/389/2 132/241/2 -f 144/388/2 143/220/2 132/241/2 -f 142/239/2 141/387/2 129/240/2 -f 140/386/2 139/385/2 129/240/2 -f 138/384/2 137/383/2 129/240/2 -f 136/382/2 135/381/2 129/240/2 -f 134/380/2 133/379/2 129/240/2 -f 125/378/2 129/240/2 133/379/2 -f 132/241/2 151/395/2 150/394/2 -f 149/393/2 148/392/2 132/241/2 -f 145/389/2 144/388/2 132/241/2 -f 141/387/2 140/386/2 129/240/2 -f 137/383/2 136/382/2 129/240/2 -f 134/380/2 129/240/2 135/381/2 -f 132/241/2 147/391/2 146/390/2 -f 143/220/2 142/239/2 132/241/2 -f 138/384/2 129/240/2 139/385/2 -f 130/244/4 126/396/4 212/397/4 -f 212/397/4 211/415/4 130/244/4 -f 210/414/4 209/413/4 130/244/4 -f 208/412/4 207/411/4 130/244/4 -f 206/410/4 205/409/4 130/244/4 -f 204/408/4 203/230/4 130/244/4 -f 202/242/4 201/407/4 131/243/4 -f 200/406/4 199/405/4 131/243/4 -f 198/404/4 197/403/4 131/243/4 -f 196/402/4 195/401/4 131/243/4 -f 194/400/4 193/399/4 131/243/4 -f 127/398/4 131/243/4 193/399/4 -f 130/244/4 211/415/4 210/414/4 -f 209/413/4 208/412/4 130/244/4 -f 205/409/4 204/408/4 130/244/4 -f 201/407/4 200/406/4 131/243/4 -f 197/403/4 196/402/4 131/243/4 -f 194/400/4 131/243/4 195/401/4 -f 130/244/4 207/411/4 206/410/4 -f 203/230/4 202/242/4 130/244/4 -f 198/404/4 131/243/4 199/405/4 -f 194/417/2 193/245/2 214/247/2 -f 196/418/2 195/248/2 216/250/2 -f 198/419/2 197/251/2 218/253/2 -f 200/420/2 199/254/2 220/256/2 -f 202/421/2 201/257/2 222/259/2 -f 204/422/2 203/260/2 224/262/2 -f 206/423/2 205/263/2 226/265/2 -f 208/424/2 207/266/2 228/268/2 -f 210/425/2 209/269/2 230/271/2 -f 212/426/2 211/272/2 232/274/2 -f 232/274/8 231/273/8 252/276/8 -f 230/271/8 229/270/8 250/278/8 -f 228/268/8 227/267/8 248/280/8 -f 226/265/8 225/264/8 246/282/8 -f 224/262/8 223/261/8 244/284/8 -f 222/259/8 221/258/8 242/286/8 -f 220/256/8 219/255/8 240/288/8 -f 218/253/8 217/252/8 238/290/8 -f 216/250/8 215/249/8 236/292/8 -f 214/247/8 213/246/8 234/294/8 -f 172/307/9 171/295/9 192/297/9 -f 170/305/9 169/298/9 190/300/9 -f 148/427/4 147/301/4 168/303/4 -f 150/428/4 149/304/4 170/305/4 -f 152/429/4 151/306/4 172/307/4 -f 146/430/4 145/308/4 166/310/4 -f 144/431/4 143/311/4 164/313/4 -f 142/432/4 141/314/4 162/316/4 -f 140/433/4 139/317/4 160/319/4 -f 138/434/4 137/320/4 158/322/4 -f 136/435/4 135/323/4 156/325/4 -f 134/436/4 133/326/4 154/328/4 -f 154/328/9 153/327/9 174/330/9 -f 156/325/9 155/324/9 176/332/9 -f 158/322/9 157/321/9 178/334/9 -f 160/319/9 159/318/9 180/336/9 -f 162/316/9 161/315/9 182/338/9 -f 164/313/9 163/312/9 184/340/9 -f 166/310/9 165/309/9 186/342/9 -f 168/303/9 167/302/9 188/344/9 -f 173/329/12 252/276/12 174/330/12 -f 175/331/12 250/278/12 176/332/12 -f 177/333/12 248/280/12 178/334/12 -f 179/335/12 246/282/12 180/336/12 -f 181/337/12 244/284/12 182/338/12 -f 183/339/12 242/286/12 184/340/12 -f 191/296/12 234/294/12 192/297/12 -f 189/299/12 236/292/12 190/300/12 -f 187/343/12 238/290/12 188/344/12 -f 185/341/12 240/288/12 186/342/12 diff --git a/src/main/resources/assets/hbm/models/assembler_wheel.obj b/src/main/resources/assets/hbm/models/assembler_wheel.obj deleted file mode 100644 index 526a71b3c..000000000 --- a/src/main/resources/assets/hbm/models/assembler_wheel.obj +++ /dev/null @@ -1,645 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'assembler_wheel.blend' -# www.blender.org -o Cylinder -v 0.000000 1.162500 -0.750000 -v 0.000000 1.537500 -0.750000 -v 0.194114 1.162500 -0.724444 -v 0.194114 1.537500 -0.724444 -v 0.375000 1.162500 -0.649519 -v 0.375000 1.537500 -0.649519 -v 0.530330 1.162500 -0.530330 -v 0.530330 1.537500 -0.530330 -v 0.649519 1.162500 -0.375000 -v 0.649519 1.537500 -0.375000 -v 0.724444 1.162500 -0.194114 -v 0.724444 1.537500 -0.194114 -v 0.750000 1.162500 -0.000000 -v 0.750000 1.537500 -0.000000 -v 0.724444 1.162500 0.194114 -v 0.724444 1.537500 0.194114 -v 0.649519 1.162500 0.375000 -v 0.649519 1.537500 0.375000 -v 0.530330 1.162500 0.530330 -v 0.530330 1.537500 0.530330 -v 0.375000 1.162500 0.649519 -v 0.375000 1.537500 0.649519 -v 0.194115 1.162500 0.724444 -v 0.194115 1.537500 0.724444 -v 0.000000 1.162500 0.750000 -v 0.000000 1.537500 0.750000 -v -0.194114 1.162500 0.724444 -v -0.194114 1.537500 0.724444 -v -0.375000 1.162500 0.649519 -v -0.375000 1.537500 0.649519 -v -0.530330 1.162500 0.530330 -v -0.530330 1.537500 0.530330 -v -0.649519 1.162500 0.375000 -v -0.649519 1.537500 0.375000 -v -0.724444 1.162500 0.194115 -v -0.724444 1.537500 0.194115 -v -0.750000 1.162500 0.000000 -v -0.750000 1.537500 0.000000 -v -0.724444 1.162500 -0.194114 -v -0.724444 1.537500 -0.194114 -v -0.649519 1.162500 -0.375000 -v -0.649519 1.537500 -0.375000 -v -0.530330 1.162500 -0.530330 -v -0.530330 1.537500 -0.530330 -v -0.375000 1.162500 -0.649519 -v -0.375000 1.537500 -0.649519 -v -0.194115 1.162500 -0.724444 -v -0.194115 1.537500 -0.724444 -v 0.000000 1.162500 -0.562500 -v 0.000000 1.537500 -0.562500 -v 0.145586 1.162500 -0.543333 -v 0.145586 1.537500 -0.543333 -v 0.281250 1.162500 -0.487139 -v 0.281250 1.537500 -0.487139 -v 0.397748 1.162500 -0.397748 -v 0.397748 1.537500 -0.397748 -v 0.487139 1.162500 -0.281250 -v 0.487139 1.537500 -0.281250 -v 0.543333 1.162500 -0.145586 -v 0.543333 1.537500 -0.145586 -v 0.562500 1.162500 -0.000000 -v 0.562500 1.537500 -0.000000 -v 0.543333 1.162500 0.145586 -v 0.543333 1.537500 0.145586 -v 0.487139 1.162500 0.281250 -v 0.487139 1.537500 0.281250 -v 0.397748 1.162500 0.397747 -v 0.397748 1.537500 0.397747 -v 0.281250 1.162500 0.487139 -v 0.281250 1.537500 0.487139 -v 0.145586 1.162500 0.543333 -v 0.145586 1.537500 0.543333 -v 0.000000 1.162500 0.562500 -v 0.000000 1.537500 0.562500 -v -0.145585 1.162500 0.543333 -v -0.145585 1.537500 0.543333 -v -0.281250 1.162500 0.487139 -v -0.281250 1.537500 0.487139 -v -0.397747 1.162500 0.397748 -v -0.397747 1.537500 0.397748 -v -0.487139 1.162500 0.281250 -v -0.487139 1.537500 0.281250 -v -0.543333 1.162500 0.145586 -v -0.543333 1.537500 0.145586 -v -0.562500 1.162500 0.000000 -v -0.562500 1.537500 0.000000 -v -0.543333 1.162500 -0.145585 -v -0.543333 1.537500 -0.145585 -v -0.487139 1.162500 -0.281250 -v -0.487139 1.537500 -0.281250 -v -0.397748 1.162500 -0.397747 -v -0.397748 1.537500 -0.397747 -v -0.281250 1.162500 -0.487139 -v -0.281250 1.537500 -0.487139 -v -0.145586 1.162500 -0.543333 -v -0.145586 1.537500 -0.543333 -v 0.000000 1.537500 -0.281250 -v 0.072793 1.537500 -0.271667 -v 0.140625 1.537500 -0.243570 -v 0.198874 1.537500 -0.198874 -v 0.243570 1.537500 -0.140625 -v 0.271667 1.537500 -0.072793 -v 0.281250 1.537500 0.000000 -v 0.271667 1.537500 0.072793 -v 0.243570 1.537500 0.140625 -v 0.198874 1.537500 0.198874 -v 0.140625 1.537500 0.243570 -v 0.072793 1.537500 0.271667 -v 0.000000 1.537500 0.281250 -v -0.072793 1.537500 0.271667 -v -0.140625 1.537500 0.243570 -v -0.198874 1.537500 0.198874 -v -0.243570 1.537500 0.140625 -v -0.271667 1.537500 0.072793 -v -0.281250 1.537500 0.000000 -v -0.271667 1.537500 -0.072793 -v -0.243570 1.537500 -0.140625 -v -0.198874 1.537500 -0.198874 -v -0.140625 1.537500 -0.243569 -v -0.072793 1.537500 -0.271667 -v 0.000000 1.287500 0.281250 -v 0.072793 1.287500 0.271667 -v 0.140625 1.287500 0.243570 -v 0.198874 1.287500 0.198874 -v 0.243570 1.287500 0.140625 -v 0.271667 1.287500 0.072793 -v 0.281250 1.287500 0.000000 -v 0.271667 1.287500 -0.072793 -v 0.243570 1.287500 -0.140625 -v 0.198874 1.287500 -0.198874 -v 0.140625 1.287500 -0.243570 -v 0.072793 1.287500 -0.271667 -v 0.000000 1.287500 -0.281250 -v -0.072793 1.287500 0.271667 -v -0.140625 1.287500 0.243570 -v -0.198874 1.287500 0.198874 -v -0.243570 1.287500 0.140625 -v -0.271667 1.287500 0.072793 -v -0.281250 1.287500 0.000000 -v -0.271667 1.287500 -0.072793 -v -0.243570 1.287500 -0.140625 -v -0.198874 1.287500 -0.198874 -v -0.140625 1.287500 -0.243569 -v -0.072793 1.287500 -0.271667 -vt 0.190885 0.497428 -vt 0.190885 0.622697 -vt 0.128251 0.622697 -vt 0.607699 0.748393 -vt 0.542295 0.748393 -vt 0.542295 0.623125 -vt 0.062848 0.622697 -vt 0.000214 0.622697 -vt 0.000214 0.497429 -vt 0.367975 0.748393 -vt 0.302572 0.748393 -vt 0.302572 0.623125 -vt 0.670333 0.748821 -vt 0.670333 0.874089 -vt 0.607699 0.874089 -vt 0.128251 0.748393 -vt 0.062848 0.748393 -vt 0.062848 0.623125 -vt 0.542296 0.874090 -vt 0.479662 0.874090 -vt 0.479662 0.748821 -vt 0.607699 0.999786 -vt 0.542296 0.999786 -vt 0.542296 0.874518 -vt 0.430609 0.748821 -vt 0.430609 0.874090 -vt 0.367975 0.874090 -vt 0.367975 0.999786 -vt 0.302572 0.999786 -vt 0.302572 0.874518 -vt 0.302572 0.874090 -vt 0.239938 0.874090 -vt 0.239938 0.748821 -vt 0.128251 0.999786 -vt 0.062848 0.999786 -vt 0.062848 0.874518 -vt 0.190886 0.748821 -vt 0.190886 0.874090 -vt 0.128251 0.874089 -vt 0.607699 0.622697 -vt 0.542295 0.622697 -vt 0.542295 0.497428 -vt 0.000214 0.874089 -vt 0.000214 0.748821 -vt 0.062848 0.748821 -vt 0.367975 0.622697 -vt 0.302572 0.622697 -vt 0.302572 0.497428 -vt 0.670333 0.623125 -vt 0.670333 0.748393 -vt 0.062848 0.497429 -vt 0.479661 0.748393 -vt 0.479661 0.623125 -vt 0.542296 0.748821 -vt 0.430609 0.623125 -vt 0.430609 0.748393 -vt 0.302572 0.748821 -vt 0.176700 0.075008 -vt 0.134220 0.099534 -vt 0.096090 0.049843 -vt 0.062848 0.874089 -vt 0.239938 0.748393 -vt 0.049843 0.096090 -vt 0.099534 0.134219 -vt 0.075008 0.176700 -vt 0.719385 0.748393 -vt 0.190885 0.748393 -vt 0.128251 0.623125 -vt 0.000214 0.748393 -vt 0.190885 0.623125 -vt 0.670333 0.999786 -vt 0.607699 0.874518 -vt 0.719385 0.999786 -vt 0.670333 0.874518 -vt 0.479661 0.999786 -vt 0.479661 0.874518 -vt 0.430609 0.999786 -vt 0.430609 0.874518 -vt 0.239938 0.999786 -vt 0.190885 0.999786 -vt 0.190885 0.874518 -vt 0.239938 0.874518 -vt 0.719385 0.622697 -vt 0.670333 0.622697 -vt 0.670333 0.497428 -vt 0.239938 0.622697 -vt 0.239938 0.497428 -vt 0.479661 0.622697 -vt 0.430609 0.622697 -vt 0.430609 0.497428 -vt 0.000214 0.999786 -vt 0.000214 0.874518 -vt 0.719385 0.874089 -vt 0.479661 0.497428 -vt 0.323144 0.191413 -vt 0.397680 0.134219 -vt 0.422206 0.176700 -vt 0.273133 0.062312 -vt 0.224081 0.062312 -vt 0.215906 0.000214 -vt 0.362995 0.099534 -vt 0.320514 0.075008 -vt 0.344483 0.017142 -vt 0.480073 0.152731 -vt 0.434902 0.224081 -vt 0.497000 0.215905 -vt 0.497000 0.281309 -vt 0.397680 0.362995 -vt 0.422206 0.320514 -vt 0.480073 0.344483 -vt 0.362995 0.397680 -vt 0.401124 0.447371 -vt 0.344484 0.480073 -vt 0.224081 0.434902 -vt 0.273133 0.434902 -vt 0.281309 0.497000 -vt 0.134219 0.397680 -vt 0.176700 0.422206 -vt 0.152731 0.480073 -vt 0.017142 0.344483 -vt 0.075008 0.320514 -vt 0.099534 0.362995 -vt 0.062312 0.224081 -vt 0.062312 0.273133 -vt 0.000214 0.281309 -vt 0.305801 0.174071 -vt 0.521955 0.167717 -vt 0.521955 0.084205 -vt 0.546481 0.084205 -vt 0.546481 0.335598 -vt 0.546481 0.252086 -vt 0.571007 0.252086 -vt 0.497428 0.251658 -vt 0.497428 0.168145 -vt 0.521955 0.168145 -vt 0.571007 0.083752 -vt 0.571036 0.000239 -vt 0.595562 0.000248 -vt 0.546481 0.167717 -vt 0.571007 0.084205 -vt 0.521955 0.251658 -vt 0.546481 0.168145 -vt 0.571007 0.335598 -vt 0.595533 0.252086 -vt 0.571007 0.167717 -vt 0.595533 0.084205 -vt 0.595533 0.083760 -vt 0.620088 0.000256 -vt 0.546481 0.251658 -vt 0.571007 0.168145 -vt 0.595533 0.167717 -vt 0.620059 0.084205 -vt 0.595533 0.335598 -vt 0.620059 0.252086 -vt 0.571007 0.251658 -vt 0.595533 0.168145 -vt 0.620059 0.083769 -vt 0.644614 0.000265 -vt 0.620059 0.167717 -vt 0.644585 0.084205 -vt 0.497428 0.083726 -vt 0.497457 0.000214 -vt 0.521983 0.000223 -vt 0.595533 0.251658 -vt 0.620059 0.168145 -vt 0.620059 0.335598 -vt 0.644585 0.252086 -vt 0.497428 0.335598 -vt 0.497428 0.252086 -vt 0.521955 0.252086 -vt 0.620059 0.251658 -vt 0.644585 0.168145 -vt 0.521955 0.083735 -vt 0.546510 0.000231 -vt 0.497428 0.167717 -vt 0.497428 0.084205 -vt 0.521955 0.335598 -vt 0.546481 0.083743 -vt 0.341755 0.236344 -vt 0.335407 0.212654 -vt 0.434902 0.273133 -vt 0.341755 0.260870 -vt 0.335407 0.284561 -vt 0.323144 0.305801 -vt 0.305801 0.323144 -vt 0.284561 0.335407 -vt 0.260870 0.341754 -vt 0.320514 0.422206 -vt 0.236344 0.341754 -vt 0.212654 0.335407 -vt 0.191413 0.323144 -vt 0.174071 0.305801 -vt 0.161808 0.284561 -vt 0.155460 0.260870 -vt 0.155460 0.236344 -vt 0.161808 0.212653 -vt 0.174071 0.191413 -vt 0.191413 0.174071 -vt 0.212654 0.161807 -vt 0.236344 0.155460 -vt 0.260870 0.155460 -vt 0.284561 0.161808 -vt 0.128251 0.497428 -vt 0.607699 0.623125 -vt 0.367975 0.623125 -vt 0.607699 0.748821 -vt 0.367975 0.748821 -vt 0.367975 0.874518 -vt 0.128251 0.874518 -vt 0.128251 0.748821 -vt 0.607699 0.497428 -vt 0.367975 0.497428 -vt 0.152731 0.017142 -vt 0.239938 0.623125 -vt 0.017142 0.152731 -vt 0.719385 0.623125 -vt 0.000214 0.623125 -vt 0.719385 0.874518 -vt 0.719385 0.497428 -vt 0.719385 0.748821 -vt 0.281309 0.000214 -vt 0.401124 0.049843 -vt 0.447371 0.096090 -vt 0.447371 0.401124 -vt 0.215906 0.497000 -vt 0.096090 0.447371 -vt 0.049843 0.401124 -vt 0.000214 0.215905 -vt 0.644585 0.083777 -vt 0.644585 0.167717 -vt 0.644585 0.335598 -vt 0.644585 0.251658 -vn 0.258800 0.000000 0.965900 -vn 0.382700 0.000000 -0.923900 -vn -0.000000 0.000000 -1.000000 -vn 0.793400 0.000000 -0.608800 -vn -0.258800 0.000000 0.965900 -vn 0.991400 0.000000 -0.130500 -vn 0.500000 0.000000 -0.866000 -vn 0.923900 0.000000 0.382700 -vn -0.707100 0.000000 0.707100 -vn 0.608800 0.000000 0.793400 -vn 0.866000 0.000000 -0.500000 -vn 0.130500 0.000000 0.991400 -vn -0.965900 0.000000 0.258800 -vn -0.382700 0.000000 0.923900 -vn 1.000000 0.000000 -0.000000 -vn -0.793400 0.000000 0.608800 -vn -0.965900 0.000000 -0.258800 -vn -0.991400 0.000000 0.130500 -vn 0.866000 0.000000 0.500000 -vn -0.923900 0.000000 -0.382700 -vn -0.707100 0.000000 -0.707100 -vn -0.608800 0.000000 -0.793400 -vn 0.000000 1.000000 -0.000000 -vn -0.130500 0.000000 -0.991400 -vn 0.500000 0.000000 0.866000 -vn 0.130500 0.000000 -0.991400 -vn -0.258800 0.000000 -0.965900 -vn 0.608800 0.000000 -0.793400 -vn 0.000000 0.000000 1.000000 -vn 0.923900 0.000000 -0.382700 -vn 0.258800 0.000000 -0.965900 -vn 0.991400 0.000000 0.130500 -vn -0.500000 0.000000 0.866000 -vn 0.793400 0.000000 0.608800 -vn 0.707100 0.000000 -0.707100 -vn 0.382700 0.000000 0.923900 -vn -0.866000 0.000000 0.500000 -vn -0.130500 0.000000 0.991400 -vn -0.500000 0.000000 -0.866000 -vn -0.608800 0.000000 0.793400 -vn 0.965900 0.000000 -0.258800 -vn -0.923900 0.000000 0.382700 -vn -1.000000 0.000000 0.000000 -vn -0.991400 0.000000 -0.130500 -vn 0.965900 0.000000 0.258800 -vn -0.793400 0.000000 -0.608800 -vn -0.866000 0.000000 -0.500000 -vn 0.707100 0.000000 0.707100 -vn -0.382700 0.000000 -0.923900 -s off -f 83/1/1 84/2/1 36/3/1 -f 4/4/2 6/5/2 5/6/2 -f 38/7/3 86/8/3 85/9/3 -f 8/10/4 10/11/4 9/12/4 -f 87/13/5 88/14/5 40/15/5 -f 12/16/6 14/17/6 13/18/6 -f 42/19/7 90/20/7 89/21/7 -f 16/22/8 18/23/8 17/24/8 -f 91/25/9 92/26/9 44/27/9 -f 20/28/10 22/29/10 21/30/10 -f 46/31/11 94/32/11 93/33/11 -f 24/34/12 26/35/12 25/36/12 -f 95/37/13 96/38/13 48/39/13 -f 28/40/14 30/41/14 29/42/14 -f 50/43/15 49/44/15 1/45/15 -f 32/46/16 34/47/16 33/48/16 -f 51/49/17 52/50/17 4/4/17 -f 36/3/18 38/7/18 37/51/18 -f 6/5/19 54/52/19 53/53/19 -f 40/15/20 42/19/20 41/54/20 -f 55/55/21 56/56/21 8/10/21 -f 44/27/22 46/31/22 45/57/22 -f 80/58/23 82/59/23 34/60/23 -f 48/39/24 2/61/24 1/45/24 -f 9/12/25 10/11/25 58/62/25 -f 36/63/23 84/64/23 86/65/23 -f 50/66/26 52/50/26 51/49/26 -f 60/67/27 12/16/27 11/68/27 -f 54/52/28 56/56/28 55/55/28 -f 13/18/29 14/17/29 62/69/29 -f 58/62/30 60/67/30 59/70/30 -f 64/71/31 16/22/31 15/72/31 -f 62/73/32 64/71/32 63/74/32 -f 18/23/33 66/75/33 65/76/33 -f 66/75/34 68/77/34 67/78/34 -f 67/78/35 68/77/35 20/28/35 -f 70/79/36 72/80/36 71/81/36 -f 22/29/37 70/79/37 69/82/37 -f 74/83/38 76/84/38 75/85/38 -f 34/47/39 82/86/39 81/87/39 -f 78/88/40 80/89/40 79/90/40 -f 71/81/41 72/80/41 24/34/41 -f 82/86/42 84/2/42 83/1/42 -f 26/35/43 74/91/43 73/92/43 -f 86/93/44 88/14/44 87/13/44 -f 75/85/45 76/84/45 28/40/45 -f 90/20/46 92/26/46 91/25/46 -f 30/41/47 78/88/47 77/94/47 -f 79/90/48 80/89/48 32/46/48 -f 94/32/49 96/38/49 95/37/49 -f 107/95/23 70/96/23 68/97/23 -f 76/98/23 78/99/23 30/100/23 -f 72/101/23 74/102/23 26/103/23 -f 20/104/23 68/97/23 70/96/23 -f 66/105/23 18/106/23 16/107/23 -f 60/108/23 62/109/23 14/110/23 -f 58/111/23 10/112/23 8/113/23 -f 52/114/23 54/115/23 6/116/23 -f 96/117/23 50/118/23 2/119/23 -f 44/120/23 92/121/23 94/122/23 -f 88/123/23 90/124/23 42/125/23 -f 108/126/23 72/101/23 70/96/23 -f 116/127/8 140/128/8 141/129/8 -f 105/130/46 125/131/46 124/132/46 -f 109/133/26 121/134/26 134/135/26 -f 100/136/16 130/137/16 129/138/16 -f 117/139/34 141/129/34 142/140/34 -f 110/141/2 134/135/2 135/142/2 -f 106/143/22 124/132/22 123/144/22 -f 118/145/10 142/140/10 143/146/10 -f 101/147/42 129/138/42 128/148/42 -f 111/149/28 135/142/28 136/150/28 -f 119/151/36 143/146/36 144/152/36 -f 107/153/49 123/144/49 122/154/49 -f 112/155/4 136/150/4 137/156/4 -f 102/157/18 128/148/18 127/158/18 -f 120/159/12 144/152/12 133/160/12 -f 97/161/38 133/162/38 132/163/38 -f 113/164/30 137/156/30 138/165/30 -f 108/166/24 122/154/24 121/167/24 -f 103/168/44 127/169/44 126/170/44 -f 114/171/6 138/165/6 139/172/6 -f 98/173/14 132/163/14 131/174/14 -f 115/175/32 139/176/32 140/128/32 -f 104/177/20 126/170/20 125/131/20 -f 99/178/40 131/174/40 130/137/40 -f 105/179/23 106/180/23 68/97/23 -f 64/181/23 104/182/23 105/179/23 -f 103/183/23 104/182/23 64/181/23 -f 102/184/23 103/183/23 62/109/23 -f 101/185/23 102/184/23 60/108/23 -f 100/186/23 101/185/23 58/111/23 -f 99/187/23 100/186/23 56/188/23 -f 52/114/23 98/189/23 99/187/23 -f 97/190/23 98/189/23 52/114/23 -f 120/191/23 97/190/23 50/118/23 -f 119/192/23 120/191/23 96/117/23 -f 118/193/23 119/192/23 94/122/23 -f 117/194/23 118/193/23 92/121/23 -f 116/195/23 117/194/23 90/124/23 -f 115/196/23 116/195/23 88/123/23 -f 84/64/23 114/197/23 115/196/23 -f 82/59/23 113/198/23 114/197/23 -f 112/199/23 113/198/23 82/59/23 -f 78/99/23 111/200/23 112/199/23 -f 110/201/23 111/200/23 78/99/23 -f 74/102/23 109/202/23 110/201/23 -f 108/126/23 109/202/23 74/102/23 -f 35/203/1 83/1/1 36/3/1 -f 3/204/2 4/4/2 5/6/2 -f 37/51/3 38/7/3 85/9/3 -f 7/205/4 8/10/4 9/12/4 -f 39/206/5 87/13/5 40/15/5 -f 11/68/6 12/16/6 13/18/6 -f 41/54/7 42/19/7 89/21/7 -f 15/72/8 16/22/8 17/24/8 -f 43/207/9 91/25/9 44/27/9 -f 19/208/10 20/28/10 21/30/10 -f 45/57/11 46/31/11 93/33/11 -f 23/209/12 24/34/12 25/36/12 -f 47/210/13 95/37/13 48/39/13 -f 27/211/14 28/40/14 29/42/14 -f 2/61/15 50/43/15 1/45/15 -f 31/212/16 32/46/16 33/48/16 -f 3/204/17 51/49/17 4/4/17 -f 35/203/18 36/3/18 37/51/18 -f 5/6/19 6/5/19 53/53/19 -f 39/206/20 40/15/20 41/54/20 -f 7/205/21 55/55/21 8/10/21 -f 43/207/22 44/27/22 45/57/22 -f 32/213/23 80/58/23 34/60/23 -f 47/210/24 48/39/24 1/45/24 -f 57/214/25 9/12/25 58/62/25 -f 38/215/23 36/63/23 86/65/23 -f 49/216/26 50/66/26 51/49/26 -f 59/70/27 60/67/27 11/68/27 -f 53/53/28 54/52/28 55/55/28 -f 61/217/29 13/18/29 62/69/29 -f 57/214/30 58/62/30 59/70/30 -f 63/74/31 64/71/31 15/72/31 -f 61/218/32 62/73/32 63/74/32 -f 17/24/33 18/23/33 65/76/33 -f 65/76/34 66/75/34 67/78/34 -f 19/208/35 67/78/35 20/28/35 -f 69/82/36 70/79/36 71/81/36 -f 21/30/37 22/29/37 69/82/37 -f 73/219/38 74/83/38 75/85/38 -f 33/48/39 34/47/39 81/87/39 -f 77/94/40 78/88/40 79/90/40 -f 23/209/41 71/81/41 24/34/41 -f 81/87/42 82/86/42 83/1/42 -f 25/36/43 26/35/43 73/92/43 -f 85/220/44 86/93/44 87/13/44 -f 27/211/45 75/85/45 28/40/45 -f 89/21/46 90/20/46 91/25/46 -f 29/42/47 30/41/47 77/94/47 -f 31/212/48 79/90/48 32/46/48 -f 93/33/49 94/32/49 95/37/49 -f 106/180/23 107/95/23 68/97/23 -f 28/221/23 76/98/23 30/100/23 -f 24/222/23 72/101/23 26/103/23 -f 22/223/23 20/104/23 70/96/23 -f 64/181/23 66/105/23 16/107/23 -f 12/224/23 60/108/23 14/110/23 -f 56/188/23 58/111/23 8/113/23 -f 4/225/23 52/114/23 6/116/23 -f 48/226/23 96/117/23 2/119/23 -f 46/227/23 44/120/23 94/122/23 -f 40/228/23 88/123/23 42/125/23 -f 107/95/23 108/126/23 70/96/23 -f 117/139/8 116/127/8 141/129/8 -f 106/143/46 105/130/46 124/132/46 -f 110/141/26 109/133/26 134/135/26 -f 101/147/16 100/136/16 129/138/16 -f 118/145/34 117/139/34 142/140/34 -f 111/149/2 110/141/2 135/142/2 -f 107/153/22 106/143/22 123/144/22 -f 119/151/10 118/145/10 143/146/10 -f 102/157/42 101/147/42 128/148/42 -f 112/155/28 111/149/28 136/150/28 -f 120/159/36 119/151/36 144/152/36 -f 108/166/49 107/153/49 122/154/49 -f 113/164/4 112/155/4 137/156/4 -f 103/229/18 102/157/18 127/158/18 -f 97/230/12 120/159/12 133/160/12 -f 98/173/38 97/161/38 132/163/38 -f 114/171/30 113/164/30 138/165/30 -f 109/231/24 108/166/24 121/167/24 -f 104/177/44 103/168/44 126/170/44 -f 115/232/6 114/171/6 139/172/6 -f 99/178/14 98/173/14 131/174/14 -f 116/127/32 115/175/32 140/128/32 -f 105/130/20 104/177/20 125/131/20 -f 100/136/40 99/178/40 130/137/40 -f 66/105/23 105/179/23 68/97/23 -f 66/105/23 64/181/23 105/179/23 -f 62/109/23 103/183/23 64/181/23 -f 60/108/23 102/184/23 62/109/23 -f 58/111/23 101/185/23 60/108/23 -f 56/188/23 100/186/23 58/111/23 -f 54/115/23 99/187/23 56/188/23 -f 54/115/23 52/114/23 99/187/23 -f 50/118/23 97/190/23 52/114/23 -f 96/117/23 120/191/23 50/118/23 -f 94/122/23 119/192/23 96/117/23 -f 92/121/23 118/193/23 94/122/23 -f 90/124/23 117/194/23 92/121/23 -f 88/123/23 116/195/23 90/124/23 -f 86/65/23 115/196/23 88/123/23 -f 86/65/23 84/64/23 115/196/23 -f 84/64/23 82/59/23 114/197/23 -f 80/58/23 112/199/23 82/59/23 -f 80/58/23 78/99/23 112/199/23 -f 76/98/23 110/201/23 78/99/23 -f 76/98/23 74/102/23 110/201/23 -f 72/101/23 108/126/23 74/102/23 diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png new file mode 100644 index 0000000000000000000000000000000000000000..19221af066c73104c8d5226f6e1e33f50c46a3d1 GIT binary patch literal 3517 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 MPv%C22F}<10u Date: Tue, 8 Jul 2025 16:46:41 +0200 Subject: [PATCH 253/491] needle punch fuck machine --- .../ContainerMachineAssemblyMachine.java | 74 +++++++ .../gui/GUIMachineAssemblyMachine.java | 121 +++++++++++ .../recipes/AssemblyMachineRecipes.java | 56 +++++ .../inventory/recipes/anvil/AnvilRecipes.java | 5 +- .../recipes/loader/SerializableRecipe.java | 1 + src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 + .../machine/ModuleMachineAssembler.java | 3 +- .../tileentity/RenderAssemblyMachine.java | 157 ++++++++++++++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityMachineAssembler.java | 1 + .../TileEntityMachineAssemblerBase.java | 1 + .../TileEntityMachineAssemblyMachine.java | 192 +++++++++++++++++- .../textures/gui/processing/gui_assembler.png | Bin 3517 -> 3445 bytes 14 files changed, 607 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java create mode 100644 src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java b/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java new file mode 100644 index 000000000..f7bc0d499 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineAssemblyMachine.java @@ -0,0 +1,74 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemAssemblyTemplate; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.util.InventoryUtil; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineAssemblyMachine extends ContainerBase { + + public ContainerMachineAssemblyMachine(InventoryPlayer invPlayer, IInventory assembler) { + super(invPlayer, assembler); + + // Battery + this.addSlotToContainer(new SlotNonRetarded(assembler, 0, 152, 81)); + // Schematic + this.addSlotToContainer(new SlotNonRetarded(assembler, 1, 35, 126)); + // Upgrades + this.addSlots(assembler, 2, 152, 108, 2, 1); + // Input + this.addSlots(assembler, 4, 8, 18, 4, 3); + // Output + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, assembler, 16, 98, 45)); + + this.playerInv(invPlayer, 8, 174); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack slotOriginal = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + slotOriginal = slotStack.copy(); + + if(index <= tile.getSizeInventory() - 1) { + SlotCraftingOutput.checkAchievements(player, slotStack); + if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemAssemblyTemplate) { + if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { + if(!this.mergeItemStack(slotStack, 2, 4, false)) return null; + } else { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 4, 7, false)) return null; + } + } + + if(slotStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, slotStack); + } + + return slotOriginal; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java new file mode 100644 index 000000000..8218c4057 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java @@ -0,0 +1,121 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineAssemblyMachine; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineAssemblyMachine extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_assembler.png"); + private TileEntityMachineAssemblyMachine assembler; + + public GUIMachineAssemblyMachine(InventoryPlayer invPlayer, TileEntityMachineAssemblyMachine tedf) { + super(new ContainerMachineAssemblyMachine(invPlayer, tedf)); + assembler = tedf; + + this.xSize = 176; + this.ySize = 256; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + assembler.inputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 115, 34, 16); + assembler.outputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 115, 34, 16); + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, assembler.power, assembler.maxPower); + + if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { + if(this.assembler.assemblerModule.recipe != null && AssemblyMachineRecipes.INSTANCE.recipeNameMap.containsKey(this.assembler.assemblerModule.recipe)) { + GenericRecipe recipe = (GenericRecipe) AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.assembler.assemblerModule.recipe); + this.func_146283_a(recipe.print(), mouseX, mouseY); + } else { + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + "Click to set recipe", mouseX, mouseY); + } + } + } + + @Override + protected void mouseClicked(int x, int y, int button) { + super.mouseClicked(x, y, button); + + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule.recipe, 0, this); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.assembler.hasCustomInventoryName() ? this.assembler.getInventoryName() : I18n.format(this.assembler.getInventoryName()); + + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int p = (int) (assembler.power * 61 / assembler.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); + + if(assembler.assemblerModule.progress > 0) { + int j = (int) Math.ceil(70 * assembler.assemblerModule.progress); + drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); + } + + GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule.recipe); + + /// LEFT LED + if(assembler.didProcess) { + drawTexturedModalRect(guiLeft + 51, guiTop + 121, 195, 0, 3, 6); + } else if(recipe != null) { + drawTexturedModalRect(guiLeft + 51, guiTop + 121, 192, 0, 3, 6); + } + + /// RIGHT LED + if(assembler.didProcess) { + drawTexturedModalRect(guiLeft + 56, guiTop + 121, 195, 0, 3, 6); + } else if(recipe != null && assembler.power >= recipe.power) { + drawTexturedModalRect(guiLeft + 56, guiTop + 121, 192, 0, 3, 6); + } + + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 126); + + if(recipe != null && recipe.inputItem != null) { + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(assembler.assemblerModule.inputSlots[i]); + if(!slot.getHasStack()) this.renderItem(recipe.inputItem[i].extractForCyclingDisplay(20), slot.xDisplayPosition, slot.yDisplayPosition, 10F); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(1F, 1F, 1F, 0.5F); + GL11.glEnable(GL11.GL_BLEND); + this.zLevel = 300F; + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(assembler.assemblerModule.inputSlots[i]); + if(!slot.getHasStack()) drawTexturedModalRect(guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, slot.xDisplayPosition, slot.yDisplayPosition, 16, 16); + } + this.zLevel = 0F; + GL11.glColor4f(1F, 1F, 1F, 1F); + GL11.glDisable(GL11.GL_BLEND); + } + + assembler.inputTank.renderTank(guiLeft + 8, guiTop + 115, this.zLevel, 34, 16, 1); + assembler.outputTank.renderTank(guiLeft + 80, guiTop + 115, this.zLevel, 34, 16, 1); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java new file mode 100644 index 000000000..c018e55c9 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -0,0 +1,56 @@ +package com.hbm.inventory.recipes; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.hbm.inventory.OreDictManager.*; +import static com.hbm.inventory.material.Mats.*; + +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemFluidIcon; + +import net.minecraft.item.ItemStack; + +public class AssemblyMachineRecipes extends GenericRecipes { + + public static final AssemblyMachineRecipes INSTANCE = new AssemblyMachineRecipes(); + + @Override public int inputItemLimit() { return 12; } + @Override public int inputFluidLimit() { return 1; } + @Override public int outputItemLimit() { return 1; } + @Override public int outputFluidLimit() { return 1; } + + @Override public String getFileName() { return "hbmAsemblyMachine.json"; } + @Override public GenericRecipe instantiateRecipe(String name) { return new GenericRecipe(name); } + + @Override + public void registerDefaults() { + + this.register(new GenericRecipe("ass.test").setup(100, 1_000) + .inputItems(new OreDictStack(STEEL.ingot(), 5)) + .outputItems(new ItemStack(ModItems.plate_welded, 1, MAT_STEEL.id))); + } + + public static HashMap getRecipes() { + HashMap recipes = new HashMap(); + + for(GenericRecipe recipe : INSTANCE.recipeOrderedList) { + List input = new ArrayList(); + if(recipe.inputItem != null) for(AStack stack : recipe.inputItem) input.add(stack); + if(recipe.inputFluid != null) for(FluidStack stack : recipe.inputFluid) input.add(ItemFluidIcon.make(stack)); + List output = new ArrayList(); + if(recipe.outputItem != null) for(IOutput stack : recipe.outputItem) output.add(stack.getAllPossibilities()); + if(recipe.outputFluid != null) for(FluidStack stack : recipe.outputFluid) output.add(ItemFluidIcon.make(stack)); + recipes.put(input.toArray(), output.toArray()); + } + + return recipes; + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index fca1efb87..a98931abb 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -229,12 +229,11 @@ public class AnvilRecipes extends SerializableRecipe { int ukModifier = 1; constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] { - new OreDictStack(KEY_CLEARGLASS, 4 * ukModifier), new OreDictStack(STEEL.ingot(), 8 * ukModifier), - new OreDictStack(CU.ingot(), 8 * ukModifier), + new OreDictStack(CU.plate(), 4 * ukModifier), new ComparableStack(ModItems.motor, 2 * ukModifier), new ComparableStack(ModItems.circuit, 4 * ukModifier, EnumCircuitType.VACUUM_TUBE.ordinal()) - }, new AnvilOutput(new ItemStack(ModBlocks.machine_assembler))).setTier(2)); + }, new AnvilOutput(new ItemStack(ModBlocks.machine_assembly_machine))).setTier(2)); constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] { diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index ec30b16b3..f633298f1 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -83,6 +83,7 @@ public abstract class SerializableRecipe { recipeHandlers.add(new PedestalRecipes()); //GENERIC + recipeHandlers.add(AssemblyMachineRecipes.INSTANCE); recipeHandlers.add(ChemicalPlantRecipes.INSTANCE); recipeHandlers.add(new MatDistribution()); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 128a8f8b4..1d934e87d 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -267,6 +267,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityChimneyIndustrial.class, new RenderChimneyIndustrial()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineMiningLaser.class, new RenderLaserMiner()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssembler.class, new RenderAssembler()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssemblyMachine.class, new RenderAssemblyMachine()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssemfac.class, new RenderAssemfac()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemplant.class, new RenderChemplant()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemicalPlant.class, new RenderChemicalPlant()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 5ec3d90fc..a1fee2c2c 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -140,6 +140,7 @@ public class ResourceManager { public static final IModelCustom assembler_cog = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/assembler_new_cog.obj")); public static final IModelCustom assembler_slider = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/assembler_new_slider.obj")); public static final IModelCustom assembler_arm = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/assembler_new_arm.obj")); + public static final IModelCustom assembly_machine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assembly_machine.obj")); public static final IModelCustom assemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assemfac.obj")); //Chemplant @@ -574,6 +575,7 @@ public class ResourceManager { public static final ResourceLocation assembler_cog_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_cog_new.png"); public static final ResourceLocation assembler_slider_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_slider_new.png"); public static final ResourceLocation assembler_arm_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_arm_new.png"); + public static final ResourceLocation assembly_machine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assembly_machine.png"); public static final ResourceLocation assemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assemfac.png"); //Chemplant diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java index 2188b306a..1823b540b 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java @@ -1,6 +1,7 @@ package com.hbm.module.machine; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import api.hbm.energymk2.IEnergyHandlerMK2; @@ -18,7 +19,7 @@ public class ModuleMachineAssembler extends ModuleMachineBase { @Override public GenericRecipe getRecipe() { - return null; + return AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.recipe); } public ModuleMachineAssembler itemInput(int from) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = from + i; return this; } diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java new file mode 100644 index 000000000..6bb9a7f21 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java @@ -0,0 +1,157 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.main.MainRegistry; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine; +import com.hbm.util.BobMathUtil; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderAssemblyMachine extends TileEntitySpecialRenderer implements IItemRendererProvider { + + public static EntityItem dummy; + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glRotated(90, 0, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + } + + TileEntityMachineAssemblyMachine assembler = (TileEntityMachineAssemblyMachine) tileEntity; + + bindTexture(ResourceManager.assembly_machine_tex); + ResourceManager.assembly_machine.renderPart("Base"); + if(assembler.frame) ResourceManager.assembly_machine.renderPart("Frame"); + + GL11.glPushMatrix(); + + double spin = BobMathUtil.interp(assembler.prevRing, assembler.ring, interp); + double[] arm1 = assembler.arms[0].getPositions(interp); + double[] arm2 = assembler.arms[1].getPositions(interp); + + // arm1 = arm2 = new double[] {60, -15, 15, -0.25}; // heart + + GL11.glRotated(spin, 0, 1, 0); + ResourceManager.assembly_machine.renderPart("Ring"); + + GL11.glPushMatrix(); { + GL11.glTranslated(0, 1.625, 0.9375); + GL11.glRotated(arm1[0], 1, 0, 0); + GL11.glTranslated(0, -1.625, -0.9375); + ResourceManager.assembly_machine.renderPart("ArmLower1"); + + GL11.glTranslated(0, 2.375, 0.9375); + GL11.glRotated(arm1[1], 1, 0, 0); + GL11.glTranslated(0, -2.375, -0.9375); + ResourceManager.assembly_machine.renderPart("ArmUpper1"); + + GL11.glTranslated(0, 2.375, 0.4375); + GL11.glRotated(arm1[2], 1, 0, 0); + GL11.glTranslated(0, -2.375, -0.4375); + ResourceManager.assembly_machine.renderPart("Head1"); + GL11.glTranslated(0, arm1[3], 0); + ResourceManager.assembly_machine.renderPart("Spike1"); + } GL11.glPopMatrix(); + + GL11.glPushMatrix(); { + GL11.glTranslated(0, 1.625, -0.9375); + GL11.glRotated(-arm2[0], 1, 0, 0); + GL11.glTranslated(0, -1.625, 0.9375); + ResourceManager.assembly_machine.renderPart("ArmLower2"); + + GL11.glTranslated(0, 2.375, -0.9375); + GL11.glRotated(-arm2[1], 1, 0, 0); + GL11.glTranslated(0, -2.375, 0.9375); + ResourceManager.assembly_machine.renderPart("ArmUpper2"); + + GL11.glTranslated(0, 2.375, -0.4375); + GL11.glRotated(-arm2[2], 1, 0, 0); + GL11.glTranslated(0, -2.375, 0.4375); + ResourceManager.assembly_machine.renderPart("Head2"); + GL11.glTranslated(0, arm2[3], 0); + ResourceManager.assembly_machine.renderPart("Spike2"); + } GL11.glPopMatrix(); + + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + + GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule.recipe); + if(recipe != null && MainRegistry.proxy.me().getDistanceSq(tileEntity.xCoord + 0.5, tileEntity.yCoord + 1, tileEntity.zCoord + 0.5) < 35 * 35) { + + GL11.glRotated(90, 0, 1, 0); + GL11.glTranslated(0, 1.0625, 0); + + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + ItemStack stack = recipe.getIcon(); + + if(!(stack.getItemSpriteNumber() == 0 && stack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(stack.getItem()).getRenderType()))) { + GL11.glRotated(-90, 1, 0, 0); + GL11.glTranslated(0, -0.25, 0); + } + + GL11.glScaled(1.25, 1.25, 1.25); + + if(dummy == null || dummy.worldObj != tileEntity.getWorldObj()) dummy = new EntityItem(tileEntity.getWorldObj(), 0, 0, 0, stack); + dummy.setEntityItemStack(stack); + dummy.hoverStart = 0.0F; + + RenderItem.renderInFrame = true; + RenderManager.instance.renderEntityWithPosYaw(dummy, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F); + RenderItem.renderInFrame = false; + } + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_assembly_machine); + } + + @Override + public IItemRenderer getRenderer() { + + return new ItemRenderBase() { + + public void renderInventory() { + GL11.glTranslated(0, -2.75, 0); + GL11.glScaled(4.5, 4.5, 4.5); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.assembly_machine_tex); + ResourceManager.assembly_machine.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 20e51d5fc..ca3281bd1 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -340,6 +340,7 @@ public class TileMappings { put(TileEntityMachineCombustionEngine.class, "tileentity_combustion_engine"); put(TileEntityMachineAssembler.class, "tileentity_assembly_machine"); + put(TileEntityMachineAssemblyMachine.class, "tileentity_assemblymachine"); put(TileEntityMachineAssemfac.class, "tileentity_assemfac"); put(TileEntityMachineChemplant.class, "tileentity_chemical_plant"); put(TileEntityMachineChemicalPlant.class, "tileentity_chemicalplant"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java index 53b47d04b..1117d6674 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java @@ -31,6 +31,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class TileEntityMachineAssembler extends TileEntityMachineAssemblerBase implements IUpgradeInfoProvider { public int recipe = -1; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblerBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblerBase.java index d0d58dfb4..bcf3172d1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblerBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblerBase.java @@ -22,6 +22,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +@Deprecated public abstract class TileEntityMachineAssemblerBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider { public long power; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java index 3a057c184..7007e54e5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java @@ -2,14 +2,15 @@ package com.hbm.tileentity.machine; import java.util.HashMap; import java.util.List; +import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.UpgradeManagerNT; -import com.hbm.inventory.container.ContainerMachineChemicalPlant; +import com.hbm.inventory.container.ContainerMachineAssemblyMachine; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; -import com.hbm.inventory.gui.GUIMachineChemicalPlant; +import com.hbm.inventory.gui.GUIMachineAssemblyMachine; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; @@ -33,7 +34,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; @@ -51,6 +51,13 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl private AudioWrapper audio; public ModuleMachineAssembler assemblerModule; + + public AssemblerArm[] arms = new AssemblerArm[2]; + public double prevRing; + public double ring; + public double ringSpeed; + public double ringTarget; + public int ringDelay; public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); @@ -59,6 +66,8 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl this.inputTank = new FluidTank(Fluids.NONE, 32_000); this.outputTank = new FluidTank(Fluids.NONE, 32_000); + for(int i = 0; i < this.arms.length; i++) this.arms[i] = new AssemblerArm(); + this.assemblerModule = new ModuleMachineAssembler(0, this, slots) .itemInput(4).itemOutput(16) .fluidInput(inputTank).fluidOutput(outputTank); @@ -128,11 +137,50 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl audio = null; } } + + for(AssemblerArm arm : arms) { + arm.updateInterp(); + if(didProcess) { + arm.updateArm(); + } else{ + arm.returnToNullPos(); + } + } + + this.prevRing = this.ring; + + if(didProcess) { + if(this.ring != this.ringTarget) { + double ringDelta = Math.abs(this.ringTarget - this.ring); + if(ringDelta <= this.ringSpeed) this.ring = this.ringTarget; + if(this.ringTarget > this.ring) this.ring += this.ringSpeed; + if(this.ringTarget < this.ring) this.ring -= this.ringSpeed; + if(this.ringTarget == this.ring) { + if(ringTarget >= 360) { + this.ringTarget -= 360D; + this.ring -= 360D; + this.prevRing -= 360D; + } + if(ringTarget <= -360) { + this.ringTarget += 360D; + this.ring += 360D; + this.prevRing += 360D; + } + this.ringDelay = 20 + worldObj.rand.nextInt(21); + } + } else { + if(this.ringDelay > 0) this.ringDelay--; + if(this.ringDelay <= 0) { + this.ringTarget += (worldObj.rand.nextDouble() * 2 - 1) * 135; + this.ringSpeed = 10D + worldObj.rand.nextDouble() * 5D; + } + } + } } } @Override public AudioWrapper createAudioLoop() { - return MainRegistry.proxy.getLoopedSound("hbm:block.assembler", xCoord, yCoord, zCoord, 1F, 15F, 1.0F, 20); + return MainRegistry.proxy.getLoopedSound("hbm:block.chemicalPlant", xCoord, yCoord, zCoord, 1F, 15F, 1.0F, 20); } @Override public void onChunkUnload() { @@ -216,6 +264,11 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl return i == 16; } + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; + } + @Override public long getPower() { return power; } @Override public void setPower(long power) { this.power = power; } @Override public long getMaxPower() { return maxPower; } @@ -283,4 +336,135 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl upgrades.put(UpgradeType.OVERDRIVE, 3); return upgrades; } + + public static class AssemblerArm { + + public double[] angles = new double[4]; + public double[] prevAngles = new double[4]; + public double[] targetAngles = new double[4]; + public double[] speed = new double[4]; + + Random rand = new Random(); + ArmActionState state = ArmActionState.ASSUME_POSITION; + int actionDelay = 0; + + public static enum ArmActionState { + ASSUME_POSITION, + EXTEND_STRIKER, + RETRACT_STRIKER + } + + public AssemblerArm() { + this.resetSpeed(); + } + + private void updateInterp() { + for(int i = 0; i < angles.length; i++) { + prevAngles[i] = angles[i]; + } + } + + private void returnToNullPos() { + for(int i = 0; i < 4; i++) this.targetAngles[i] = 0; + for(int i = 0; i < 3; i++) this.speed[i] = 3; + this.speed[3] = 0.25; + this.state = ArmActionState.RETRACT_STRIKER; + + this.move(); + } + + private void resetSpeed() { + speed[0] = 15; //Pivot + speed[1] = 15; //Arm + speed[2] = 15; //Piston + speed[3] = 0.5; //Striker + } + + public void updateArm() { + resetSpeed(); + + if(actionDelay > 0) { + actionDelay--; + return; + } + + switch(state) { + // Move. If done moving, set a delay and progress to EXTEND + case ASSUME_POSITION: + if(move()) { + actionDelay = 2; + state = ArmActionState.EXTEND_STRIKER; + targetAngles[3] = -0.75D; + } + break; + case EXTEND_STRIKER: + if(move()) { + state = ArmActionState.RETRACT_STRIKER; + targetAngles[3] = 0D; + } + break; + case RETRACT_STRIKER: + if(move()) { + actionDelay = 2 + rand.nextInt(5); + chooseNewArmPoistion(); + state = ArmActionState.ASSUME_POSITION; + } + break; + + } + } + + private double[][] pos = new double[][] { // possible positions for the arms + {45, -15, -5}, + {15, 15, -15}, + {25, 10, -15}, + {30, 0, -10}, + {70, -10, -25}, + }; // sure it's not truly random like with the old assemfac, but at least now the striker always hits the center and doesn't clip through the board + + public void chooseNewArmPoistion() { + int chosen = rand.nextInt(pos.length); + this.targetAngles[0] = pos[chosen][0]; + this.targetAngles[1] = pos[chosen][1]; + this.targetAngles[2] = pos[chosen][2]; + } + + private boolean move() { + boolean didMove = false; + + for(int i = 0; i < angles.length; i++) { + if(angles[i] == targetAngles[i]) + continue; + + didMove = true; + + double angle = angles[i]; + double target = targetAngles[i]; + double turn = speed[i]; + double delta = Math.abs(angle - target); + + if(delta <= turn) { + angles[i] = targetAngles[i]; + continue; + } + + if(angle < target) { + angles[i] += turn; + } else { + angles[i] -= turn; + } + } + + return !didMove; + } + + public double[] getPositions(float interp) { + return new double[] { + BobMathUtil.interp(this.prevAngles[0], this.angles[0], interp), + BobMathUtil.interp(this.prevAngles[1], this.angles[1], interp), + BobMathUtil.interp(this.prevAngles[2], this.angles[2], interp), + BobMathUtil.interp(this.prevAngles[3], this.angles[3], interp) + }; + } + } } diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_assembler.png index 19221af066c73104c8d5226f6e1e33f50c46a3d1..dc9f7034bfa3723926a9e3a087278070caec4777 100644 GIT binary patch literal 3445 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 LjP>(Q6Yu{E9d9*S literal 3517 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 MPv%C22F}<10u Date: Tue, 8 Jul 2025 22:39:15 +0300 Subject: [PATCH 254/491] Extend RBMK crane reach forward Enables close-to-real-life reactor hall replicas, with the storage columns being located further in the reactor hall than the reactor itself --- .../com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java index 120efd4f5..dca789607 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java @@ -275,7 +275,7 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp this.centerY = y + RBMKDials.getColumnHeight(worldObj) + 1; this.centerZ = z; - this.spanF = 7; + this.spanF = 16; this.spanB = 7; this.spanL = 7; this.spanR = 7; From 097b2bb12c7742ff59d8e453eabc03d9b2f18ae3 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Wed, 9 Jul 2025 00:22:59 +0300 Subject: [PATCH 255/491] Fix RBMK crane girder rendering with unequal spans --- .../render/tileentity/RenderCraneConsole.java | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java b/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java index f25ef7f0e..8ebf386a9 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java @@ -22,12 +22,14 @@ public class RenderCraneConsole extends TileEntitySpecialRenderer { GL11.glDisable(GL11.GL_CULL_FACE); GL11.glEnable(GL11.GL_LIGHTING); + int teFacing = 0; switch(te.getBlockMetadata() - BlockDummyable.offset) { - case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; - case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; - case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; - case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 2: teFacing = 90; break; + case 4: teFacing = 180; break; + case 3: teFacing = 270; break; + case 5: teFacing = 0; break; } + GL11.glRotatef(teFacing, 0F, 1F, 0F); TileEntityCraneConsole console = (TileEntityCraneConsole) te; @@ -99,12 +101,7 @@ public class RenderCraneConsole extends TileEntitySpecialRenderer { double cranePosZ = (-te.zCoord + console.centerZ); GL11.glTranslated(cranePosX, cranePosY, cranePosZ); - switch(te.getBlockMetadata() - BlockDummyable.offset) { - case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; - case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; - case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; - case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glRotatef(teFacing, 0F, 1F, 0F); double posX = (console.lastPosFront + (console.posFront - console.lastPosFront) * interp); double posZ = (console.lastPosLeft + (console.posLeft - console.lastPosLeft) * interp); @@ -116,22 +113,22 @@ public class RenderCraneConsole extends TileEntitySpecialRenderer { GL11.glPushMatrix(); int girderSpan = 0; GL11.glRotatef(-craneRotationOffset, 0F, 1F, 0F); - switch(craneRotationOffset) { + switch((craneRotationOffset + teFacing) % 360) { case 0: - girderSpan = console.spanL + console.spanR + 1; - GL11.glTranslated(posX - console.spanL, 0, 0); + girderSpan = console.spanF + console.spanB + 1; + GL11.glTranslated(posX + console.spanB, 0, 0); break; case 90: - girderSpan = console.spanF + console.spanB + 1; - GL11.glTranslated(0, 0, -posZ + console.spanB); + girderSpan = console.spanL + console.spanR + 1; + GL11.glTranslated(0, 0, -posZ - console.spanR); break; case 180: - girderSpan = console.spanL + console.spanR + 1; - GL11.glTranslated(posX + console.spanR, 0, 0); + girderSpan = console.spanF + console.spanB + 1; + GL11.glTranslated(posX - console.spanF, 0, 0); break; case 270: - girderSpan = console.spanF + console.spanB + 1; - GL11.glTranslated(0, 0, -posZ - console.spanF); + girderSpan = console.spanL + console.spanR + 1; + GL11.glTranslated(0, 0, -posZ + console.spanL); break; } GL11.glRotatef(craneRotationOffset, 0F, 1F, 0F); From d8080835f854d8cbbc204d1449245859e2849ebf Mon Sep 17 00:00:00 2001 From: abel1502 Date: Wed, 9 Jul 2025 00:53:14 +0300 Subject: [PATCH 256/491] Detect room bounds when linking RBMK crane --- .../render/tileentity/RenderCraneConsole.java | 10 ++++---- .../machine/rbmk/TileEntityCraneConsole.java | 24 +++++++++++++++---- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java b/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java index 8ebf386a9..3cb8e1f35 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java @@ -116,26 +116,26 @@ public class RenderCraneConsole extends TileEntitySpecialRenderer { switch((craneRotationOffset + teFacing) % 360) { case 0: girderSpan = console.spanF + console.spanB + 1; - GL11.glTranslated(posX + console.spanB, 0, 0); + GL11.glTranslated(posX - console.spanB, 0, 0); break; case 90: girderSpan = console.spanL + console.spanR + 1; - GL11.glTranslated(0, 0, -posZ - console.spanR); + GL11.glTranslated(0, 0, -posZ + console.spanR); break; case 180: girderSpan = console.spanF + console.spanB + 1; - GL11.glTranslated(posX - console.spanF, 0, 0); + GL11.glTranslated(posX + console.spanF, 0, 0); break; case 270: girderSpan = console.spanL + console.spanR + 1; - GL11.glTranslated(0, 0, -posZ + console.spanL); + GL11.glTranslated(0, 0, -posZ - console.spanL); break; } GL11.glRotatef(craneRotationOffset, 0F, 1F, 0F); for(int i = 0; i < girderSpan; i++) { ResourceManager.rbmk_crane.renderPart("Girder"); - GL11.glTranslated(1, 0, 0); + GL11.glTranslated(-1, 0, 0); } GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java index dca789607..74ce6ec07 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java @@ -275,10 +275,16 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp this.centerY = y + RBMKDials.getColumnHeight(worldObj) + 1; this.centerZ = z; - this.spanF = 16; - this.spanB = 7; - this.spanL = 7; - this.spanR = 7; + int girderY = centerY + 6; + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + this.spanF = this.findRoomExtent(x, girderY, z, dir, 0); + dir = dir.getRotation(ForgeDirection.UP); + this.spanR = this.findRoomExtent(x, girderY, z, dir, 0); + dir = dir.getRotation(ForgeDirection.UP); + this.spanB = this.findRoomExtent(x, girderY, z, dir, 0); + dir = dir.getRotation(ForgeDirection.UP); + this.spanL = this.findRoomExtent(x, girderY, z, dir, 0); this.height = 7; @@ -287,6 +293,16 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp this.markDirty(); } + private int findRoomExtent(int x, int y, int z, ForgeDirection dir, int def) { + for (int i = 1; i < 32; i++) { + if (!worldObj.isAirBlock(x + dir.offsetX * i, y, z + dir.offsetZ * i)) { + return i - 1; + } + } + + return def; + } + public void cycleCraneRotation() { this.craneRotationOffset = (this.craneRotationOffset + 90) % 360; } From 0e5e114b1267a0a7bf63b1eff046597191663fcd Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 8 Jul 2025 19:13:04 +0300 Subject: [PATCH 257/491] Stop QE sliding door model clipping --- src/main/java/com/hbm/tileentity/DoorDecl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index d28ae1e22..ee1c96bc0 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -586,7 +586,7 @@ public abstract class DoorDecl { @Override @SideOnly(Side.CLIENT) public void doOffsetTransform() { - GL11.glTranslated(0.4375, 0, 0.5); + GL11.glTranslated(0.40625, 0, 0.5); }; @Override @@ -598,12 +598,12 @@ public abstract class DoorDecl { public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { if(open) { if(z == 0) { - return AxisAlignedBB.getBoundingBox(1 - 0.125, 0, 1 - 0.125, 1, 1, 1); + return AxisAlignedBB.getBoundingBox(1 - 0.125, 0, 1 - 0.1875, 1, 1, 1); } else { - return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.125, 0.125, 1, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.1875, 0.125, 1, 1); } } else { - return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.125, 1, 1, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.1875, 1, 1, 1); } }; From 19fd4791705c945df04b41b6b8f7fbc9afa9c54d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Wed, 9 Jul 2025 01:48:51 +0300 Subject: [PATCH 258/491] Fix stuff --- .../render/tileentity/RenderCraneConsole.java | 10 +++++----- .../machine/rbmk/TileEntityCraneConsole.java | 16 ++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java b/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java index 3cb8e1f35..87fc5309e 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCraneConsole.java @@ -113,22 +113,22 @@ public class RenderCraneConsole extends TileEntitySpecialRenderer { GL11.glPushMatrix(); int girderSpan = 0; GL11.glRotatef(-craneRotationOffset, 0F, 1F, 0F); - switch((craneRotationOffset + teFacing) % 360) { + switch(craneRotationOffset) { case 0: girderSpan = console.spanF + console.spanB + 1; - GL11.glTranslated(posX - console.spanB, 0, 0); + GL11.glTranslated(posX + console.spanB, 0, 0); break; case 90: girderSpan = console.spanL + console.spanR + 1; - GL11.glTranslated(0, 0, -posZ + console.spanR); + GL11.glTranslated(0, 0, -posZ - console.spanR); break; case 180: girderSpan = console.spanF + console.spanB + 1; - GL11.glTranslated(posX + console.spanF, 0, 0); + GL11.glTranslated(posX - console.spanF, 0, 0); break; case 270: girderSpan = console.spanL + console.spanR + 1; - GL11.glTranslated(0, 0, -posZ - console.spanL); + GL11.glTranslated(0, 0, -posZ + console.spanL); break; } GL11.glRotatef(craneRotationOffset, 0F, 1F, 0F); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java index 74ce6ec07..2c3b4ebb4 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityCraneConsole.java @@ -277,14 +277,14 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp int girderY = centerY + 6; - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); - this.spanF = this.findRoomExtent(x, girderY, z, dir, 0); + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); + this.spanF = this.findRoomExtent(x, girderY, z, dir, 16); dir = dir.getRotation(ForgeDirection.UP); - this.spanR = this.findRoomExtent(x, girderY, z, dir, 0); + this.spanR = this.findRoomExtent(x, girderY, z, dir, 16); dir = dir.getRotation(ForgeDirection.UP); - this.spanB = this.findRoomExtent(x, girderY, z, dir, 0); + this.spanB = this.findRoomExtent(x, girderY, z, dir, 16); dir = dir.getRotation(ForgeDirection.UP); - this.spanL = this.findRoomExtent(x, girderY, z, dir, 0); + this.spanL = this.findRoomExtent(x, girderY, z, dir, 16); this.height = 7; @@ -293,14 +293,14 @@ public class TileEntityCraneConsole extends TileEntityLoadedBase implements Simp this.markDirty(); } - private int findRoomExtent(int x, int y, int z, ForgeDirection dir, int def) { - for (int i = 1; i < 32; i++) { + private int findRoomExtent(int x, int y, int z, ForgeDirection dir, int max) { + for (int i = 1; i < max; i++) { if (!worldObj.isAirBlock(x + dir.offsetX * i, y, z + dir.offsetZ * i)) { return i - 1; } } - return def; + return max; } public void cycleCraneRotation() { From dcdf5c4f27d92f50606d328145e7d7cb650d82e8 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 9 Jul 2025 09:57:49 +0200 Subject: [PATCH 259/491] Revert "Merge pull request #2261 from 70000hp/the-lob-block" This reverts commit f24c244730c0ae9bf83437b5d2f0d062a5482e61, reversing changes made to 0cf9d88e36f0a7209a840419ce1f3cbf277e3a9a. --- src/main/java/com/hbm/blocks/ModBlocks.java | 4 - .../hbm/blocks/generic/BlockWandSpawner.java | 343 ------------------ .../hbm/blocks/generic/DungeonSpawner.java | 191 ++++------ src/main/java/com/hbm/main/MainRegistry.java | 2 - .../java/com/hbm/main/ModEventHandler.java | 140 ++++++- .../java/com/hbm/tileentity/TileMappings.java | 4 +- src/main/java/com/hbm/util/MobUtil.java | 197 ---------- .../world/gen/util/DungeonSpawnerActions.java | 261 ------------- .../gen/util/DungeonSpawnerConditions.java | 96 ----- .../gen/util/DungeonSpawnerInteractions.java | 80 ---- src/main/resources/assets/hbm/lang/en_US.lang | 2 - .../hbm/textures/blocks/wand_spawner.png | Bin 730 -> 0 bytes .../hbm/textures/blocks/wand_spawner_top.png | Bin 743 -> 0 bytes 13 files changed, 199 insertions(+), 1121 deletions(-) delete mode 100644 src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java delete mode 100644 src/main/java/com/hbm/util/MobUtil.java delete mode 100644 src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java delete mode 100644 src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java delete mode 100644 src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java delete mode 100644 src/main/resources/assets/hbm/textures/blocks/wand_spawner.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index f69f85497..f6dcd2065 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1243,7 +1243,6 @@ public class ModBlocks { public static Block wand_air; public static Block wand_loot; public static Block wand_jigsaw; - public static Block wand_spawner; public static Material materialGas = new MaterialGas(); @@ -2397,8 +2396,6 @@ public class ModBlocks { wand_air = new BlockWand(Blocks.air).setBlockName("wand_air").setBlockTextureName(RefStrings.MODID + ":wand_air"); wand_loot = new BlockWandLoot().setBlockName("wand_loot").setBlockTextureName(RefStrings.MODID + ":wand_loot"); wand_jigsaw = new BlockWandJigsaw().setBlockName("wand_jigsaw").setBlockTextureName(RefStrings.MODID + ":wand_jigsaw"); - wand_spawner = new BlockWandSpawner().setBlockName("wand_spawner").setBlockTextureName(RefStrings.MODID + ":wand_spawner"); - } private static void registerBlock() { @@ -3545,7 +3542,6 @@ public class ModBlocks { register(wand_air); register(wand_loot); register(wand_jigsaw); - register(wand_spawner); } private static void register(Block b) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java deleted file mode 100644 index b6c042838..000000000 --- a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java +++ /dev/null @@ -1,343 +0,0 @@ -package com.hbm.blocks.generic; - -import api.hbm.block.IToolable; -import com.hbm.blocks.IBlockSideRotation; -import com.hbm.blocks.ILookOverlay; -import com.hbm.blocks.ITooltipProvider; -import com.hbm.blocks.ModBlocks; -import com.hbm.config.StructureConfig; -import com.hbm.interfaces.IBomb; -import com.hbm.interfaces.ICopiable; -import com.hbm.lib.RefStrings; -import com.hbm.main.MainRegistry; -import com.hbm.tileentity.TileEntityLoadedBase; -import com.hbm.util.BufferUtil; -import com.hbm.util.i18n.I18nUtil; -import com.hbm.world.gen.INBTTileEntityTransformable; -import com.hbm.world.gen.util.DungeonSpawnerActions; -import com.hbm.world.gen.util.DungeonSpawnerConditions; -import com.hbm.world.gen.util.DungeonSpawnerInteractions; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import io.netty.buffer.ByteBuf; -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.common.util.ForgeDirection; - -import java.util.ArrayList; -import java.util.List; - -public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IToolable, ITooltipProvider, IBlockSideRotation, IBomb { - - @SideOnly(Side.CLIENT) protected IIcon iconTop; - - public BlockWandSpawner() { - super(Material.iron); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":wand_spawner"); - this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":wand_spawner_top"); - } - - @Override - public IIcon getIcon(int side, int meta) { - return (side <= 1) ? iconTop : blockIcon; - } - - @Override - public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { - if(side == 0) return IBlockSideRotation.topToBottom(world.getBlockMetadata(x, y, z)); - if(side == 1) return world.getBlockMetadata(x, y, z); - return 0; - } - - @Override - public int getRenderType() { - return IBlockSideRotation.getRenderType(); - } - - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { - int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - - if (i == 0) world.setBlockMetadataWithNotify(x, y, z, 3, 2); - if (i == 1) world.setBlockMetadataWithNotify(x, y, z, 2, 2); - if (i == 2) world.setBlockMetadataWithNotify(x, y, z, 0, 2); - if (i == 3) world.setBlockMetadataWithNotify(x, y, z, 1, 2); - - ForgeDirection dir = ForgeDirection.UNKNOWN; - switch(i){ - case 0: dir = ForgeDirection.SOUTH;break; - case 1: dir = ForgeDirection.WEST; break; - case 2: dir = ForgeDirection.NORTH;break; - case 3: dir = ForgeDirection.EAST; break; - } - TileEntity te = world.getTileEntity(x, y, z); - if(te instanceof TileEntityWandSpawner) - ((TileEntityWandSpawner)te).placedRotation = dir.ordinal(); - } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { - - ItemStack stack = player.getHeldItem(); - - if (stack != null && stack.getItem() instanceof ItemBlock && !player.isSneaking()) { - ItemBlock ib = (ItemBlock) stack.getItem(); - Block block = ib.field_150939_a; - - if (block.renderAsNormalBlock() && block != this) { - - TileEntity tile = world.getTileEntity(x, y, z); - - if(tile instanceof TileEntityWandSpawner){ - TileEntityWandSpawner spawner = (TileEntityWandSpawner) tile; - spawner.disguise = block; - spawner.disguiseMeta = stack.getItemDamage() & 15; - return true; - } - } - } - return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); - } - - @Override - public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { - TileEntity te = world.getTileEntity(x, y, z); - - if(!(te instanceof TileEntityWandSpawner)) return false; - - TileEntityWandSpawner spawner = (TileEntityWandSpawner) te; - - switch(tool) { - case SCREWDRIVER: - List actionNames = DungeonSpawnerActions.getActionNames(); - int indexA = actionNames.indexOf(spawner.actionID); - - indexA += player.isSneaking() ? -1 : 1; - indexA = MathHelper.clamp_int(indexA, 0, actionNames.size() - 1); - - spawner.actionID = actionNames.get(indexA); - return true; - case DEFUSER: - List conditionNames = DungeonSpawnerConditions.getConditionNames(); - int indexC = conditionNames.indexOf(spawner.conditionID); - - indexC += player.isSneaking() ? -1 : 1; - indexC = MathHelper.clamp_int(indexC, 0, conditionNames.size() - 1); - - spawner.conditionID = conditionNames.get(indexC); - - return true; - case HAND_DRILL: - List interactionNames = DungeonSpawnerInteractions.getInteractionNames(); - int indexI = interactionNames.indexOf(spawner.interactionID); - - indexI += player.isSneaking() ? -1 : 1; - indexI = MathHelper.clamp_int(indexI, 0, interactionNames.size() - 1); - - spawner.interactionID = interactionNames.get(indexI); - - return true; - - default: return false; - } - } - - @Override - public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) { - TileEntity te = world.getTileEntity(x, y, z); - - if(!(te instanceof TileEntityWandSpawner)) return; - - TileEntityWandSpawner spawner = (TileEntityWandSpawner) te; - - List text = new ArrayList<>(); - text.add("Action: " + spawner.actionID); - text.add("Condition: " + spawner.conditionID); - text.add("Interaction: " + (spawner.interactionID != null ? spawner.interactionID : "None")); - - String block; - - if(spawner.disguise != null && spawner.disguise != Blocks.air) - block = I18nUtil.resolveKey(spawner.disguise.getUnlocalizedName() + ".name"); - else - block = "None"; - - text.add("Disguise Block: " + block); - - ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - list.add(EnumChatFormatting.GOLD + "Use screwdriver to cycle forwards through the action list, shift click to go back"); - list.add(EnumChatFormatting.GOLD + "Use defuser to cycle forwards through the condition list, shift click to go back"); - list.add(EnumChatFormatting.GOLD + "Use hand drill to cycle forwards through the interaction list, shift click to go back"); - list.add(EnumChatFormatting.YELLOW + "Use a detonator to transform"); - } - - @Override - public TileEntity createNewTileEntity(World worldIn, int meta) { - return new TileEntityWandSpawner(); - } - - @Override - public BombReturnCode explode(World world, int x, int y, int z) { - TileEntity te = world.getTileEntity(x, y, z); - - if(!(te instanceof TileEntityWandSpawner)) return null; - - ((TileEntityWandSpawner) te).triggerReplace = true; - - return BombReturnCode.TRIGGERED; - } - - public static class TileEntityWandSpawner extends TileEntityLoadedBase implements INBTTileEntityTransformable, ICopiable { - private boolean triggerReplace; - - public int placedRotation; - - Block disguise; - int disguiseMeta = -1; - - public String actionID = "PHASE_ABERRATOR"; - public String conditionID = "EMPTY"; - public String interactionID; - - @Override - public void updateEntity() { - if(!worldObj.isRemote) { - if(triggerReplace) { - // On the first tick of this TE, replace with intended block and fill with loot - replace(); - } else { - networkPackNT(15); - } - } - } - - private void replace() { - if (!(worldObj.getBlock(xCoord, yCoord, zCoord) instanceof BlockWandSpawner)) { - MainRegistry.logger.warn("Somehow the block at: " + xCoord + ", " + yCoord + ", " + zCoord + " isn't a dungeon spawner block but we're doing a TE update as if it is, cancelling!"); - return; - } - worldObj.setBlock(xCoord,yCoord,zCoord, ModBlocks.dungeon_spawner); - - TileEntity te = worldObj.getTileEntity(xCoord, yCoord, zCoord); - - if(te == null || te instanceof BlockWandLoot.TileEntityWandLoot) { - MainRegistry.logger.warn("TE for dungeon spawner set incorrectly at: " + xCoord + ", " + yCoord + ", " + zCoord + ". If you're using some sort of world generation mod, report it to the author!"); - te = ModBlocks.wand_spawner.createTileEntity(worldObj, 0); - worldObj.setTileEntity(xCoord, yCoord, zCoord, te); - } - - if(te instanceof DungeonSpawner.TileEntityDungeonSpawner){ - DungeonSpawner.TileEntityDungeonSpawner spawner = (DungeonSpawner.TileEntityDungeonSpawner) te; - spawner.actionID = actionID; - spawner.conditionID = conditionID; - spawner.interactionID = interactionID; - spawner.direction = ForgeDirection.getOrientation(placedRotation); - spawner.disguise = disguise; - spawner.disguiseMeta = disguiseMeta; - } - - } - - @Override - public void transformTE(World world, int coordBaseMode) { - triggerReplace = !StructureConfig.debugStructures; - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - nbt.setString("actionID", actionID); - nbt.setString("conditionID", conditionID); - nbt.setString("interactionID", interactionID); - nbt.setInteger("rotation", placedRotation); - if(disguise != null){ - nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); - nbt.setInteger("disguiseMeta", disguiseMeta); - } - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - actionID = nbt.getString("actionID"); - conditionID = nbt.getString("conditionID"); - interactionID = nbt.getString("interactionID"); - placedRotation = nbt.getInteger("rotation"); - if(nbt.hasKey("disguise")){ - disguise = Block.getBlockFromName(nbt.getString("disguise")); - disguiseMeta = nbt.getInteger("disguiseMeta"); - } - } - - @Override - public void serialize(ByteBuf buf) { - buf.writeInt(placedRotation); - BufferUtil.writeString(buf, actionID); - BufferUtil.writeString(buf, conditionID); - BufferUtil.writeString(buf, interactionID); - buf.writeInt(Block.getIdFromBlock(disguise)); - buf.writeInt(disguiseMeta); - } - - @Override - public void deserialize(ByteBuf buf) { - placedRotation = buf.readInt(); - actionID = BufferUtil.readString(buf); - conditionID = BufferUtil.readString(buf); - interactionID = BufferUtil.readString(buf); - disguise = Block.getBlockById(buf.readInt()); - disguiseMeta = buf.readInt(); - } - - @Override - public NBTTagCompound getSettings(World world, int x, int y, int z) { - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setString("actionID", actionID); - nbt.setString("conditionID", conditionID); - if(interactionID != null) - nbt.setString("interactionID", interactionID); - if(disguise != null){ - nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); - nbt.setInteger("disguiseMeta", disguiseMeta); - } - - return nbt; - } - - @Override - public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { - actionID = nbt.getString("actionID"); - conditionID = nbt.getString("conditionID"); - interactionID = nbt.getString("interactionID"); - if(nbt.hasKey("disguise")){ - disguise = Block.getBlockFromName(nbt.getString("disguise")); - disguiseMeta = nbt.getInteger("disguiseMeta"); - } - } - } -} diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index 52dbb6099..4a6fc10d8 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -7,32 +7,18 @@ import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ModItems; -import com.hbm.util.BufferUtil; -import com.hbm.world.gen.util.DungeonSpawnerActions; -import com.hbm.world.gen.util.DungeonSpawnerConditions; +import com.hbm.util.EnumUtil; import com.hbm.util.Vec3NT; -import com.hbm.world.gen.util.DungeonSpawnerInteractions; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import io.netty.buffer.ByteBuf; -import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; public class DungeonSpawner extends BlockContainer { @@ -44,76 +30,19 @@ public class DungeonSpawner extends BlockContainer { public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityDungeonSpawner(); } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { - TileEntity tile = world.getTileEntity(x, y, z); - - if(tile instanceof TileEntityDungeonSpawner){ - TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) tile; - if(spawner.disguise != null){ - return spawner.disguise.getIcon(side, spawner.disguiseMeta); - } - } - - return super.getIcon(world, x, y, z, side); - } - - @Override - public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { - TileEntity te = worldIn.getTileEntity(x, y, z); - if(te instanceof TileEntityDungeonSpawner && ((TileEntityDungeonSpawner) te).interaction != null) { - ((TileEntityDungeonSpawner) te).interaction.accept(new Object[]{worldIn, te, x, y, z, player, side, subX, subY, subZ}); - return true; - } - - return super.onBlockActivated(worldIn, x, y, z, player, side, subX, subY, subZ); - } - + public static class TileEntityDungeonSpawner extends TileEntity { - - //phase is incremented per condition check, timer counts since last condition check by default + public int phase = 0; public int timer = 0; - - public Block disguise; - public int disguiseMeta; - - /**Actions always get called before conditions, use the phase and timer variables in order to control behavior via conditions*/ - public String conditionID = "ABERRATOR"; - public String actionID = "ABERRATOR"; - /**Interactions are called on right click, and passes on the parameters of the right click to consumer*/ - public String interactionID; - - public Function condition; - public Consumer action; - /**Consists of world instance, TileEntity instance, three ints for coordinates, one int for block side, and player instance, in that order **/ - public Consumer interaction; - - public EntityPlayer player; - - public ForgeDirection direction = ForgeDirection.UNKNOWN; + public EnumSpawnerType type = EnumSpawnerType.ABERRATOR; + @Override public void updateEntity() { - + if(!worldObj.isRemote) { - if(action == null){ - action = DungeonSpawnerActions.actions.get(actionID); - } - if(condition == null){ - condition = DungeonSpawnerConditions.conditions.get(conditionID); - } - if(interaction == null && interactionID != null){ - interaction = DungeonSpawnerInteractions.interactions.get(interactionID); - } - - if(action == null || condition == null){ - worldObj.setBlock(xCoord,yCoord,zCoord, Blocks.air); - return; - } - action.accept(this); - if(condition.apply(this)) { + type.phase.accept(this); + if(type.phaseCondition.apply(this)) { phase++; timer = 0; } else { @@ -126,47 +55,83 @@ public class DungeonSpawner extends BlockContainer { public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setInteger("phase", phase); - - nbt.setString("actionID", actionID); - nbt.setString("conditionID", conditionID); - if(interactionID != null) - nbt.setString("interactionID", interactionID); - - nbt.setInteger("direction", direction.ordinal()); - if(disguise != null){ - nbt.setInteger("disguiseMeta", disguiseMeta); - nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); - } + nbt.setByte("type", (byte) type.ordinal()); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.phase = nbt.getInteger("phase"); - - this.actionID = nbt.getString("actionID"); - this.conditionID = nbt.getString("conditionID"); - if(nbt.hasKey("interactionID")) this.interactionID = nbt.getString("interactionID"); - - this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); - - if(nbt.hasKey("disguise")){ - disguiseMeta = nbt.getInteger("disguiseMeta"); - disguise = Block.getBlockFromName(nbt.getString("disguise")); - } - } - - @Override - public Packet getDescriptionPacket() { - NBTTagCompound nbt = new NBTTagCompound(); - this.writeToNBT(nbt); - return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - this.readFromNBT(pkt.func_148857_g()); + this.type = EnumUtil.grabEnumSafely(EnumSpawnerType.class, nbt.getByte("type")); } } + + public static enum EnumSpawnerType { + + ABERRATOR(CON_ABERRATOR, PHASE_ABERRATOR); + public Function phaseCondition; + public Consumer phase; + + private EnumSpawnerType(Function con, Consumer ph) { + this.phaseCondition = con; + this.phase = ph; + } + } + + public static Function CON_ABERRATOR = (tile) -> { + World world = tile.getWorldObj(); + if(world.difficultySetting.ordinal() == 0) return false; + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if(tile.phase == 0) { + if(world.getTotalWorldTime() % 20 != 0) return false; + return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(20, 10, 20)).isEmpty(); + } + if(tile.phase < 3) { + if(world.getTotalWorldTime() % 20 != 0 || tile.timer < 60) return false; + return world.getEntitiesWithinAABB(EntityUndeadSoldier.class, AxisAlignedBB.getBoundingBox(x, y, z, x - 2, y + 1, z + 1).expand(50, 20, 50)).isEmpty(); + } + return false; + }; + + public static Consumer PHASE_ABERRATOR = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if(tile.phase == 1 || tile.phase == 2) { + if(tile.timer == 0) { + Vec3NT vec = new Vec3NT(10, 0, 0); + for(int i = 0; i < 10; i++) { + EntityUndeadSoldier mob = new EntityUndeadSoldier(world); + for(int j = 0; j < 7; j++) { + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, y - 5, z + 0.5 + vec.zCoord, i * 36F, 0); + if(mob.getCanSpawnHere()) { + mob.onSpawnWithEgg(null); + world.spawnEntityInWorld(mob); + break; + } + } + + vec.rotateAroundYDeg(36D); + } + } + } + if(tile.phase > 2) { + TileEntity te = world.getTileEntity(x, y + 18, z); + if(te instanceof TileEntitySkeletonHolder) { + TileEntitySkeletonHolder skeleton = (TileEntitySkeletonHolder) te; + if(world.rand.nextInt(5) == 0) { + skeleton.item = new ItemStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR.ordinal()); + } else { + skeleton.item = new ItemStack(ModItems.clay_tablet, 1, 1); + } + skeleton.markDirty(); + world.markBlockForUpdate(x, y + 18, z); + } + world.setBlock(x, y, z, Blocks.obsidian); + } + }; } diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 199127431..0d64ee670 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -877,8 +877,6 @@ public class MainRegistry { BlockToolConversion.registerRecipes(); AchievementHandler.register(); - MobUtil.intializeMobPools(); - proxy.registerMissileItems(); // Load compatibility for OC. diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 655656174..cd368b165 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -387,18 +387,74 @@ public class ModEventHandler { if(entity instanceof EntityZombie) { if(world.rand.nextFloat() < 0.005F && soot > 2) { // full hazmat zombine - MobUtil.equipFullSet(entity, ModItems.hazmat_helmet, ModItems.hazmat_plate, ModItems.hazmat_legs, ModItems.hazmat_boots); + equipFullSet(entity, ModItems.hazmat_helmet, ModItems.hazmat_plate, ModItems.hazmat_legs, ModItems.hazmat_boots); return; } - slotPools = MobUtil.slotPoolCommon; + + if(world.rand.nextFloat() < 0.005F && soot > 20) { // full security zombine + equipFullSet(entity, ModItems.security_helmet, ModItems.security_plate, ModItems.security_legs, ModItems.security_boots); + return; + } + + slotPools.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + slotPools.put(3, createSlotPool(7000, new Object[][]{ + {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.robes_plate, 32}, + {ModItems.jackt, 32}, {ModItems.jackt2, 32}, {ModItems.alloy_plate, 2}, + {ModItems.steel_plate, 2} + })); + slotPools.put(2, createSlotPool(7000, new Object[][]{ + {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, + {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2} + })); + slotPools.put(1, createSlotPool(7000, new Object[][]{ + {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2} + })); + slotPools.put(0, createSlotPool(10000, new Object[][]{ + {ModItems.pipe_lead, 30}, {ModItems.crowbar, 25}, {ModItems.geiger_counter, 20}, + {ModItems.reer_graar, 16}, {ModItems.steel_pickaxe, 12}, {ModItems.stopsign, 10}, + {ModItems.sopsign, 8}, {ModItems.chernobylsign, 6}, {ModItems.steel_sword, 15}, + {ModItems.alloy_axe, 5}, {ModItems.titanium_sword, 8}, {ModItems.lead_gavel, 4}, + {ModItems.wrench, 20}, {ModItems.cobalt_decorated_sword, 2}, {ModItems.detonator_de, 1} + })); } else if(entity instanceof EntitySkeleton) { - slotPools = MobUtil.slotPoolRanged; + + slotPools.put(4, createSlotPool(12000, new Object[][]{ + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + slotPools.put(3, createSlotPool(10000, new Object[][]{ + {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.alloy_plate, 2}, //sadly they cant wear jackets bc it breaks it + {ModItems.steel_plate, 8}, {ModItems.titanium_plate, 4} + })); + slotPools.put(2, createSlotPool(10000, new Object[][]{ + {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, + {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2}, + })); + slotPools.put(1, createSlotPool(10000, new Object[][]{ + {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2}, + {ModItems.titanium_boots, 6} + })); + ItemStack bowReplacement = getSkelegun(soot, world.rand); slotPools.put(0, createSlotPool(50, bowReplacement != null ? new Object[][]{{bowReplacement, 1}} : new Object[][]{})); } - MobUtil.assignItemsToEntity(entity, slotPools, rand); + assignItemsToEntity(entity, slotPools); + } + + private void equipFullSet(EntityLivingBase entity, Item helmet, Item chest, Item legs, Item boots) { //for brainlets (me) to add more armorsets later when i forget about how this works + entity.setCurrentItemOrArmor(4, new ItemStack(helmet)); //p_70062_1_ is the slot number + entity.setCurrentItemOrArmor(3, new ItemStack(chest)); + entity.setCurrentItemOrArmor(2, new ItemStack(legs)); + entity.setCurrentItemOrArmor(1, new ItemStack(boots)); } private List createSlotPool(int nullWeight, Object[][] items) { @@ -417,30 +473,74 @@ public class ModEventHandler { return pool; } - private static ItemStack getSkelegun(float soot, Random rand) { - if (!MobConfig.enableMobWeapons) return null; - if (rand.nextDouble() > Math.log(soot) * 0.25) return null; - ArrayList pool = new ArrayList<>(); + public void assignItemsToEntity(EntityLivingBase entity, Map> slotPools) { + for (Map.Entry> entry : slotPools.entrySet()) { + int slot = entry.getKey(); + List pool = entry.getValue(); - if(soot < 0.3){ - pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_pepperbox), 5)); - pool.add(new WeightedRandomObject(null, 20)); - } else if(soot > 0.3 && soot < 1) { - pool.addAll(MobUtil.slotPoolGuns.get(0.3)); - } else if (soot < 3) { - pool.addAll(MobUtil.slotPoolGuns.get(1D)); - } else if (soot < 5) { - pool.addAll(MobUtil.slotPoolGuns.get(3D)); - } else { - pool.addAll(MobUtil.slotPoolGuns.get(5D)); + WeightedRandomObject choice = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); //NullPointerException sludge fix + if (choice == null) { + continue; + } + + ItemStack stack = choice.asStack(); + if (stack == null || stack.getItem() == null) { + continue; + } + + if (stack.getItem() == ModItems.gas_mask_m65 //eyesore + || stack.getItem() == ModItems.gas_mask_olde + || stack.getItem() == ModItems.gas_mask_mono) { + ArmorUtil.installGasMaskFilter(stack, new ItemStack(ModItems.gas_mask_filter)); + } + + entity.setCurrentItemOrArmor(slot, stack); + + //Give skeleton AI if it has a gun + if (slot == 0 && entity instanceof EntitySkeleton && pool == slotPools.get(0)) { + addFireTask((EntityLiving) entity); + } } + } + + private static ItemStack getSkelegun(float soot, Random rand) { + if(!MobConfig.enableMobWeapons) return null; + if(rand.nextDouble() > Math.log(soot) * 0.25) return null; + + ArrayList pool = new ArrayList(); + pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_light_revolver), 12)); + pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_heavy_revolver), 8)); + + if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_pepperbox), 10)); + if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_henry), 8)); + if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_greasegun), 6)); + + if(soot > 4) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_maresleg), 4)); + if(soot > 4) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_uzi), 6)); + + if(soot > 8) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_spas12), 3)); + if(soot > 8) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_am180), 4)); + + if(soot > 12) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_congolake), 1)); WeightedRandomObject selected = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); return selected.asStack(); } + // these fucking tasks keep stacking on top of themselves + private static void addFireTask(EntityLiving entity) { + entity.setEquipmentDropChance(0, 0); // Prevent dropping guns + + for(Object entry : entity.tasks.taskEntries) { + EntityAITasks.EntityAITaskEntry task = (EntityAITasks.EntityAITaskEntry) entry; + if(task.action instanceof EntityAIFireGun) return; + } + + entity.tasks.addTask(3, new EntityAIFireGun(entity)); + } + @SubscribeEvent public void addAITasks(EntityJoinWorldEvent event) { if(event.world.isRemote || !(event.entity instanceof EntityLiving)) return; @@ -449,7 +549,7 @@ public class ModEventHandler { ItemStack held = living.getHeldItem(); if(held != null && held.getItem() instanceof ItemGunBaseNT) { - MobUtil.addFireTask(living); + addFireTask(living); } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index f688059be..ca3281bd1 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -19,7 +19,6 @@ import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.BlockSupplyCrate.TileEntitySupplyCrate; import com.hbm.blocks.generic.BlockWandJigsaw.TileEntityWandJigsaw; import com.hbm.blocks.generic.BlockWandLoot.TileEntityWandLoot; -import com.hbm.blocks.generic.BlockWandSpawner.TileEntityWandSpawner; import com.hbm.blocks.generic.DungeonSpawner.TileEntityDungeonSpawner; import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter; import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF; @@ -237,7 +236,6 @@ public class TileMappings { put(TileEntityWandLoot.class, "tileentity_wand_loot"); put(TileEntityWandJigsaw.class, "tileentity_wand_jigsaw"); - put(TileEntityWandSpawner.class, "tileentity_wand_spawner"); putNetwork(); putBombs(); @@ -430,7 +428,7 @@ public class TileMappings { put(TileEntityCranePartitioner.class, "tileentity_partitioner"); put(TileEntityFan.class, "tileentity_fan"); put(TileEntityPistonInserter.class, "tileentity_piston_inserter"); - + put(TileEntityPneumoTube.class, "tileentity_pneumatic_tube"); put(TileEntityRadioTorchSender.class, "tileentity_rtty_sender"); diff --git a/src/main/java/com/hbm/util/MobUtil.java b/src/main/java/com/hbm/util/MobUtil.java deleted file mode 100644 index 8779c1ed2..000000000 --- a/src/main/java/com/hbm/util/MobUtil.java +++ /dev/null @@ -1,197 +0,0 @@ -package com.hbm.util; - -import com.hbm.entity.mob.ai.EntityAIFireGun; -import com.hbm.items.ModItems; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAITasks; -import net.minecraft.entity.monster.EntitySkeleton; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.WeightedRandom; - -import java.util.*; - -public class MobUtil { - - - public static Map> slotPoolCommon = new HashMap<>(); - public static Map> slotPoolRanged = new HashMap<>(); - - public static Map> slotPoolAdv = new HashMap<>(); - public static Map> slotPoolAdvRanged; - /**Unlike the above two, the Double is interpreted as minimum soot level, instead of armor slot **/ - public static HashMap> slotPoolGuns = new HashMap<>(); - - - public static void intializeMobPools(){ - slotPoolCommon.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth - {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, - {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, - {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, - {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} - })); - slotPoolCommon.put(3, createSlotPool(7000, new Object[][]{ - {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.robes_plate, 32}, - {ModItems.jackt, 32}, {ModItems.jackt2, 32}, {ModItems.alloy_plate, 2}, - {ModItems.steel_plate, 2} - })); - slotPoolCommon.put(2, createSlotPool(7000, new Object[][]{ - {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, - {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2} - })); - slotPoolCommon.put(1, createSlotPool(7000, new Object[][]{ - {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2} - })); - slotPoolCommon.put(0, createSlotPool(10000, new Object[][]{ - {ModItems.pipe_lead, 30}, {ModItems.crowbar, 25}, {ModItems.geiger_counter, 20}, - {ModItems.reer_graar, 16}, {ModItems.steel_pickaxe, 12}, {ModItems.stopsign, 10}, - {ModItems.sopsign, 8}, {ModItems.chernobylsign, 6}, {ModItems.steel_sword, 15}, - {ModItems.titanium_sword, 8}, {ModItems.lead_gavel, 4}, {ModItems.wrench_flipped, 2}, - {ModItems.wrench, 20} - })); - - slotPoolRanged.put(4, createSlotPool(12000, new Object[][]{ - {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, - {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, - {ModItems.rag_piss, 1}, {ModItems.goggles, 1}, {ModItems.alloy_helmet, 2}, - {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} - })); - slotPoolRanged.put(3, createSlotPool(10000, new Object[][]{ - {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.alloy_plate, 2}, //sadly they cant wear jackets bc it breaks it - {ModItems.steel_plate, 8}, {ModItems.titanium_plate, 4} - })); - slotPoolRanged.put(2, createSlotPool(10000, new Object[][]{ - {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, - {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2}, - })); - slotPoolRanged.put(1, createSlotPool(10000, new Object[][]{ - {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2}, - {ModItems.titanium_boots, 6} - })); - - slotPoolGuns.put(0.3, createSlotPool(new Object[][]{ - {ModItems.gun_light_revolver, 16}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 2} - })); - slotPoolGuns.put(1D, createSlotPool(new Object[][]{ - {ModItems.gun_light_revolver, 6}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 4}, {ModItems.gun_henry, 6} - })); - slotPoolGuns.put(3D, createSlotPool(new Object[][]{ - {ModItems.gun_uzi, 10}, {ModItems.gun_maresleg, 8}, {ModItems.gun_henry, 12}, {ModItems.gun_heavy_revolver, 4}, {ModItems.gun_flaregun, 2} - })); - slotPoolGuns.put(5D, createSlotPool(new Object[][]{ - {ModItems.gun_am180, 6}, {ModItems.gun_uzi, 10}, {ModItems.gun_spas12, 8}, {ModItems.gun_henry_lincoln, 2}, {ModItems.gun_heavy_revolver, 12}, {ModItems.gun_flaregun, 4}, {ModItems.gun_flamer, 2} - })); - - slotPoolAdv.put(4, createSlotPool(new Object[][]{ - {ModItems.security_helmet, 10}, {ModItems.t45_helmet, 4}, {ModItems.asbestos_helmet, 12}, - {ModItems.liquidator_helmet, 4}, {ModItems.no9, 12}, - {ModItems.hazmat_helmet, 6} - })); - slotPoolAdv.put(3, createSlotPool(new Object[][]{ - {ModItems.liquidator_plate, 4}, {ModItems.security_plate, 8}, {ModItems.asbestos_plate, 12}, - {ModItems.t45_plate, 4}, {ModItems.hazmat_plate, 6}, - {ModItems.steel_plate, 8} - })); - slotPoolAdv.put(2, createSlotPool(new Object[][]{ - {ModItems.liquidator_legs, 4}, {ModItems.security_legs, 8}, {ModItems.asbestos_legs, 12}, - {ModItems.t45_legs, 4}, {ModItems.hazmat_legs, 6}, - {ModItems.steel_legs, 8} - })); - slotPoolAdv.put(1, createSlotPool(new Object[][]{ - {ModItems.liquidator_boots, 4}, {ModItems.security_boots, 8}, {ModItems.asbestos_boots, 12}, - {ModItems.t45_boots, 4}, {ModItems.hazmat_boots, 6}, - {ModItems.robes_boots, 8} - })); - slotPoolAdv.put(0, createSlotPool(new Object[][]{ - {ModItems.pipe_lead, 20}, {ModItems.crowbar, 30}, {ModItems.geiger_counter, 20}, - {ModItems.reer_graar, 20}, {ModItems.wrench_flipped, 12}, {ModItems.stopsign, 16}, - {ModItems.sopsign, 4}, {ModItems.chernobylsign, 16}, - {ModItems.titanium_sword, 18}, {ModItems.lead_gavel, 8}, - {ModItems.wrench, 20} - })); - - slotPoolAdvRanged = new HashMap<>(slotPoolAdv); - slotPoolAdvRanged.remove(0); - - } - - public static List createSlotPool(int nullWeight, Object[][] items) { - List pool = new ArrayList<>(); - pool.add(new WeightedRandomObject(null, nullWeight)); - for (Object[] item : items) { - Object obj = item[0]; - int weight = (int) item[1]; - - if (obj instanceof Item) { - pool.add(new WeightedRandomObject(new ItemStack((Item) obj), weight)); - } else if (obj instanceof ItemStack) { //lol just make it pass ItemStack aswell - pool.add(new WeightedRandomObject(obj, weight)); - } - } - return pool; - } - public static List createSlotPool(Object[][] items) { - List pool = new ArrayList<>(); - for (Object[] item : items) { - Object obj = item[0]; - int weight = (int) item[1]; - - if (obj instanceof Item) { - pool.add(new WeightedRandomObject(new ItemStack((Item) obj), weight)); - } else if (obj instanceof ItemStack) { //lol just make it pass ItemStack aswell - pool.add(new WeightedRandomObject(obj, weight)); - } - } - return pool; - } - - public static void equipFullSet(EntityLivingBase entity, Item helmet, Item chest, Item legs, Item boots) { //for brainlets (me) to add more armorsets later when i forget about how this works - entity.setCurrentItemOrArmor(4, new ItemStack(helmet)); //p_70062_1_ is the slot number - entity.setCurrentItemOrArmor(3, new ItemStack(chest)); - entity.setCurrentItemOrArmor(2, new ItemStack(legs)); - entity.setCurrentItemOrArmor(1, new ItemStack(boots)); - } - - public static void assignItemsToEntity(EntityLivingBase entity, Map> slotPools, Random rand) { - for (Map.Entry> entry : slotPools.entrySet()) { - int slot = entry.getKey(); - List pool = entry.getValue(); - - WeightedRandomObject choice = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); //NullPointerException sludge fix - if (choice == null) { - continue; - } - - ItemStack stack = choice.asStack(); - if (stack == null || stack.getItem() == null) { - continue; - } - - if (stack.getItem() == ModItems.gas_mask_m65 //eyesore - || stack.getItem() == ModItems.gas_mask_olde - || stack.getItem() == ModItems.gas_mask_mono) { - ArmorUtil.installGasMaskFilter(stack, new ItemStack(ModItems.gas_mask_filter)); - } - - entity.setCurrentItemOrArmor(slot, stack); - - //Give skeleton AI if it has a gun - if (slot == 0 && entity instanceof EntitySkeleton && pool == slotPools.get(0)) { - addFireTask((EntityLiving) entity); - } - } - } - - // these fucking tasks keep stacking on top of themselves - public static void addFireTask(EntityLiving entity) { - entity.setEquipmentDropChance(0, 0); // Prevent dropping guns - - for(Object entry : entity.tasks.taskEntries) { - EntityAITasks.EntityAITaskEntry task = (EntityAITasks.EntityAITaskEntry) entry; - if(task.action instanceof EntityAIFireGun) return; - } - - entity.tasks.addTask(3, new EntityAIFireGun(entity)); - } -} diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java deleted file mode 100644 index fee835c2e..000000000 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java +++ /dev/null @@ -1,261 +0,0 @@ -package com.hbm.world.gen.util; - -import com.hbm.blocks.BlockDummyable; -import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.generic.BlockSkeletonHolder; -import com.hbm.blocks.generic.DungeonSpawner; -import com.hbm.entity.item.EntityFallingBlockNT; -import com.hbm.entity.missile.EntityMissileTier2; -import com.hbm.entity.mob.EntityUndeadSoldier; -import com.hbm.items.ItemEnums; -import com.hbm.items.ModItems; -import com.hbm.tileentity.TileEntityDoorGeneric; -import com.hbm.tileentity.machine.storage.TileEntityCrateBase; -import com.hbm.util.ContaminationUtil; -import com.hbm.util.MobUtil; -import com.hbm.util.Vec3NT; -import com.hbm.world.WorldUtil; -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.monster.EntityZombie; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import java.util.*; -import java.util.function.Consumer; - -public class DungeonSpawnerActions { - - public static LinkedHashMap> actions = new LinkedHashMap<>(); - - public static Consumer PHASE_ABERRATOR = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - if (tile.phase == 1 || tile.phase == 2) { - if (tile.timer == 0) { - Vec3NT vec = new Vec3NT(10, 0, 0); - for (int i = 0; i < 10; i++) { - EntityUndeadSoldier mob = new EntityUndeadSoldier(world); - for (int j = 0; j < 7; j++) { - mob.setPositionAndRotation(x + 0.5 + vec.xCoord, y - 5, z + 0.5 + vec.zCoord, i * 36F, 0); - if (mob.getCanSpawnHere()) { - mob.onSpawnWithEgg(null); - world.spawnEntityInWorld(mob); - break; - } - } - - vec.rotateAroundYDeg(36D); - } - } - } - if (tile.phase > 2) { - TileEntity te = world.getTileEntity(x, y + 18, z); - if (te instanceof BlockSkeletonHolder.TileEntitySkeletonHolder) { - BlockSkeletonHolder.TileEntitySkeletonHolder skeleton = (BlockSkeletonHolder.TileEntitySkeletonHolder) te; - if (world.rand.nextInt(5) == 0) { - skeleton.item = new ItemStack(ModItems.item_secret, 1, ItemEnums.EnumSecretType.ABERRATOR.ordinal()); - } else { - skeleton.item = new ItemStack(ModItems.clay_tablet, 1, 1); - } - skeleton.markDirty(); - world.markBlockForUpdate(x, y + 18, z); - } - world.setBlock(x, y, z, Blocks.obsidian); - } - }; - - public static Consumer COLLAPSE_ROOF_RAD_5 = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - - if(tile.phase == 0) return; - - //from explosionChaos because i cannot be assed - int r = 4; - int r2 = r * r; - int r22 = r2 / 2; - - for (int xx = -r; xx < r; xx++) { - int X = xx + x; - int XX = xx * xx; - for (int yy = -r; yy < r; yy++) { - int Y = yy + y; - int YY = XX + yy * yy; - for (int zz = -r; zz < r; zz++) { - int Z = zz + z; - int ZZ = YY + zz * zz; - if (ZZ < r22) { - - if (world.getBlock(X, Y, Z).getExplosionResistance(null) <= 70) { - EntityFallingBlockNT entityfallingblock = new EntityFallingBlockNT(world, X + 0.5, Y + 0.5, Z + 0.5, world.getBlock(X, Y, Z), world.getBlockMetadata(X, Y, Z)); - world.spawnEntityInWorld(entityfallingblock); - } - } - } - } - } - world.setBlock(x, y, z, ModBlocks.block_steel); - - }; - - public static Consumer FODDER_WAVE = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - if (tile.phase == 1) { - Vec3NT vec = new Vec3NT(5, 0, 0); - for (int i = 0; i < 10; i++) { - EntityZombie mob = new EntityZombie(world); - mob.setPositionAndRotation(x + 0.5 + vec.xCoord, world.getHeightValue(x,z), z + 0.5 + vec.zCoord, i * 36F, 0); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdv, new Random()); - world.spawnEntityInWorld(mob); - - vec.rotateAroundYDeg(36D); - } - world.setBlock(x, y, z, ModBlocks.block_steel); - } - }; - - public static Consumer PUZZLE_TEST = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - - if(tile.phase == 2){ - world.setBlock(x,y,z, ModBlocks.crate_steel); - - EntityLightningBolt blitz = new EntityLightningBolt(world, x, world.getHeightValue(x, z) + 2, z); - world.spawnEntityInWorld(blitz); - - TileEntityCrateBase crate = (TileEntityCrateBase) world.getTileEntity(x,y,z); - ((IInventory)crate).setInventorySlotContents(15, new ItemStack(ModItems.gun_bolter)); - } - }; - - public static Consumer MISSILE_STRIKE = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - - if(tile.phase != 1) return; - - world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + "[COMMAND UNIT]"+ EnumChatFormatting.RESET + " Missile Fired")); - - ForgeDirection parallel = tile.direction.getRotation(ForgeDirection.UP); - - EntityMissileTier2.EntityMissileStrong missile = - new EntityMissileTier2.EntityMissileStrong( - world, - x + tile.direction.offsetX * 300, - 200, - z + tile.direction.offsetZ * 300, - x + parallel.offsetX * 30 + tile.direction.offsetX * 30, - z + parallel.offsetZ * 30 + tile.direction.offsetZ * 30); - WorldUtil.loadAndSpawnEntityInWorld(missile); - - world.setBlock(x,y,z, ModBlocks.block_electrical_scrap); - }; - - public static Consumer RAD_CONTAINMENT_SYSTEM = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - - ForgeDirection direction = tile.direction.getOpposite(); - ForgeDirection rot = direction.getRotation(ForgeDirection.UP); - - AxisAlignedBB bb = AxisAlignedBB.getBoundingBox(x - rot.offsetX, y - 1, z - rot.offsetZ, x + rot.offsetX + direction.offsetX * 15, y + 1, z + rot.offsetZ + direction.offsetZ * 15).expand(2,2,2); - - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, bb); - - for(EntityLivingBase e : entities) { - - Vec3 vec = Vec3.createVectorHelper(e.posX - (x + 0.5), (e.posY + e.getEyeHeight()) - (y + 0.5), e.posZ - (z + 0.5)); - double len = vec.lengthVector(); - vec = vec.normalize(); - - len = Math.max(len,1D); - - float res = 0; - - for(int i = 1; i < len; i++) { - - int ix = (int)Math.floor(x + 0.5 + vec.xCoord * i); - int iy = (int)Math.floor(y + 0.5 + vec.yCoord * i); - int iz = (int)Math.floor(z + 0.5 + vec.zCoord * i); - - res += world.getBlock(ix, iy, iz).getExplosionResistance(null); - } - - if(res < 1) - res = 1; - - float eRads = 100F; - eRads /= (float)res; - eRads /= (float)(len * len); - - ContaminationUtil.contaminate(e, ContaminationUtil.HazardType.RADIATION, ContaminationUtil.ContaminationType.HAZMAT2, eRads); - } - - if (tile.phase == 2 && tile.timer > 40){ - world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText( - EnumChatFormatting.LIGHT_PURPLE + "[RAD CONTAINMENT SYSTEM]" + - EnumChatFormatting.RESET + " Diagnostics found containment failure, commencing lockdown")); - - for(int i = 1; i < 20; i++) { - int checkX, checkY, checkZ; - checkX = x + direction.offsetX * i; - checkY = y + 1; - checkZ = z + direction.offsetZ * i; - Block block = world.getBlock(checkX, checkY,checkZ); - TileEntity te = null; - if(block instanceof BlockDummyable){ - int[] coreCoords = ((BlockDummyable) block).findCore(world,checkX,checkY,checkZ); - te = world.getTileEntity(coreCoords[0], coreCoords[1], coreCoords[2]); - } - - if (te instanceof TileEntityDoorGeneric) { - TileEntityDoorGeneric door = (TileEntityDoorGeneric) te; - door.setPins(456); - door.close(); - door.lock(); - break; - } - } - - tile.phase = 3; - } - }; - - public static List getActionNames(){ - return new ArrayList<>(actions.keySet()); - } - - //register new actions here - static{ - actions.put("PHASE_ABERRATOR", PHASE_ABERRATOR); - actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); - actions.put("FODDER_WAVE", FODDER_WAVE); - actions.put("PUZZLE_TEST", PUZZLE_TEST); - actions.put("MISSILE_STRIKE", MISSILE_STRIKE); - actions.put("IRRADIATE_ENTITIES_AOE", RAD_CONTAINMENT_SYSTEM); - } - - - -} diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java deleted file mode 100644 index 83dd773e8..000000000 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.hbm.world.gen.util; - -import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.generic.BlockPedestal; -import com.hbm.blocks.generic.DungeonSpawner; -import com.hbm.entity.mob.EntityUndeadSoldier; -import com.hbm.items.ModItems; -import com.hbm.tileentity.machine.storage.TileEntityCrateBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.function.Function; - -public class DungeonSpawnerConditions { - - public static LinkedHashMap> conditions = new LinkedHashMap<>(); - - /**For use with interactions, for having them handle all conditional tasks*/ - public static Function EMPTY = (tile) -> false; - - public static Function ABERRATOR = (tile) -> { - World world = tile.getWorldObj(); - if(world.difficultySetting.ordinal() == 0) return false; - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - if(tile.phase == 0) { - if(world.getTotalWorldTime() % 20 != 0) return false; - return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(20, 10, 20)).isEmpty(); - } - if(tile.phase < 3) { - if(world.getTotalWorldTime() % 20 != 0 || tile.timer < 60) return false; - return world.getEntitiesWithinAABB(EntityUndeadSoldier.class, AxisAlignedBB.getBoundingBox(x, y, z, x - 2, y + 1, z + 1).expand(50, 20, 50)).isEmpty(); - } - return false; - }; - - public static Function PLAYER_CUBE_5 = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(5, 5, 5)).isEmpty(); - }; - - public static Function REDSTONE = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - - return world.isBlockIndirectlyGettingPowered(x,y,z); - }; - - public static Function PUZZLE_TEST = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - - if(tile.phase == 0 && world.isBlockIndirectlyGettingPowered(x,y,z)){ - world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText("Find a " + EnumChatFormatting.GOLD + "great" + EnumChatFormatting.RESET + " ancient weapon, of questionable use in the modern age")); - world.setBlock(x,y + 1,z, ModBlocks.pedestal); - return true; - } - - TileEntity pedestal = world.getTileEntity(x,y + 1,z); - - return tile.phase == 1 - && pedestal instanceof BlockPedestal.TileEntityPedestal - && ((BlockPedestal.TileEntityPedestal) pedestal).item != null - && ((BlockPedestal.TileEntityPedestal) pedestal).item.getItem() == ModItems.big_sword; - }; - - public static List getConditionNames(){ - return new ArrayList<>(conditions.keySet()); - } - - //register new conditions here - static { - conditions.put("EMPTY", EMPTY); - conditions.put("ABERRATOR", ABERRATOR); - conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); - conditions.put("REDSTONE", REDSTONE); - conditions.put("PUZZLE_TEST", PUZZLE_TEST); - } - -} diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java deleted file mode 100644 index 32c19b81d..000000000 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.hbm.world.gen.util; - -import com.hbm.blocks.generic.DungeonSpawner.TileEntityDungeonSpawner; -import com.hbm.entity.missile.EntityMissileTier2; -import com.hbm.items.ModItems; -import com.hbm.potion.HbmPotion; -import com.hbm.tileentity.TileEntityDoorGeneric; -import com.hbm.util.Vec3NT; -import com.hbm.world.WorldUtil; -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.function.Consumer; - -/**Interactions are called when the player right-clicks the block**/ -public class DungeonSpawnerInteractions { - - /**Consumer consists of world instance, tile entity instance, three ints for coordinates, one int for block side, and player instance, - * in that order **/ - public static LinkedHashMap> interactions = new LinkedHashMap<>(); - - public static Consumer TEST = (array) -> { - World world = (World) array[0]; - TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) array[1]; - int x = (int) array[2]; - int y = (int) array[3]; - int z = (int) array[4]; - EntityPlayer player = (EntityPlayer) array[5]; - int side = (int) array[6]; - - if(spawner.phase > 1) return; - - if(player.getHeldItem() != null) - player.getHeldItem().stackSize--; - - spawner.phase++; - }; - - public static Consumer RAD_CONTAINMENT_SYSTEM = (array) -> { - TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) array[1]; - EntityPlayer player = (EntityPlayer) array[5]; - - if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.key){ - player.getHeldItem().stackSize--; - player.addChatMessage(new ChatComponentText( - EnumChatFormatting.LIGHT_PURPLE + "[RAD CONTAINMENT SYSTEM]" + - EnumChatFormatting.RESET + " Radiation treatment administered")); - player.addPotionEffect(new PotionEffect(HbmPotion.radaway.getId(), 3 * 60 * 20, 4)); - player.addPotionEffect(new PotionEffect(HbmPotion.radx.getId(), 3 * 60 * 20, 4)); - spawner.phase = 2; - spawner.timer = 0; - } - }; - - - - public static List getInteractionNames(){ - return new ArrayList<>(interactions.keySet()); - } - - //register new interactions here - static{ - interactions.put("TEST", TEST); - interactions.put("RADAWAY_INJECTOR", RAD_CONTAINMENT_SYSTEM); - } - - - -} diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index dcb6d68b3..74c5a343b 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5279,7 +5279,6 @@ tile.ducrete_smooth_stairs.name=Ducrete Stairs tile.dummy_block.name=Dummy Block tile.dummy_port.name=Dummy Block (Electricity Port) tile.dungeon_chain.name=Metal Chain -tile.dungeon_spawner.name=Dungeon Action Block tile.dynamite.name=Dynamite tile.emp_bomb.name=EMP Device tile.factory_advanced_conductor.name=Advanced Factory Electricity Port @@ -6062,7 +6061,6 @@ tile.volcano_rad_core.name=Rad Volcano Core tile.wand_air.name=Structure Wand Block (Air) tile.wand_loot.name=Structure Wand Block (Lootable) tile.wand_jigsaw.name=Structure Wand Block (Jigsaw) -tile.wand_spawner.name=Structure Wand Block (Actions) tile.waste_earth.name=Dead Grass tile.waste_leaves.name=Dead Leaves tile.waste_log.name=Charred Log diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner.png b/src/main/resources/assets/hbm/textures/blocks/wand_spawner.png deleted file mode 100644 index 4561c8e4ee9f3dd2e6c8eec19ef31a27d2648ff9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPL>Y{_(X4)An#RtPA{Ps_|nWnj=a zKXsz5$6*JVqw&E@l|a-W%a>xlG`;@R5{R?fFL z;433wnwqFGpJ4YgVkT+9sL~*vB^mLr9?6&f^(@kSqSZVx znK3kDLahA{=|AtTX`S(@_H^WYQCm2tzffTVx5?|i&$VwX&I%v+&lB@9w|*<*nfgg_ z`PmPZ6AGkv?8wVLC0DSMxyMFwljiP8^Opr^FuYIy;$xZcLhMES=c??tkH0XU2nauI ze&C>@LEw@%U-iDfd;R9^`T9Hm6#gldvJwM)?eMhjJ*_rJuVDT&< z8w5Nh85v#x6Az3=vy=g-e*!xL3s9wjk+A{e0*I+#p8&j=q`{-;D&Q<|NI+#KBO8a{j>Z{fj&lwkU|{e$#-X$8k{QTt44$rj JF6*2UngE?A_U`}y diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png b/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png deleted file mode 100644 index 65e3106a96f970891be895a960ccfb53a60b3915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPL>Y|3BPd`_OrtHz2RrJEzLct)l-`jtSimUq^_o?J^%8- zSW0o$i^bPA?74H~ipQKyj~`Ft+Ip{KrOrR|SHj-&SVebzSTMEt^P%oTe^>vU^GNn# z$JQK`7XMc3*qsYL?7eiBX}^Xa>zb8kI;8t~Io(^nhH%bS&C%VxtzdmY^r149_}Q8T zP9J9_S#M7Idnb7BhP;zA=LPLL6XqtF+~ir}6Xr2l(SQ1yJ`Fj;oBh*1ZfE)DSvd2N zS8`|a3>`DK2kw6lzR%m6;$N<~QjaUtf8YOWd=GVh-1_qOyz~A4R!tX_V=P?jzcH}g zbG@&VmHYd`2EO#^u4nJGedf)mJ0ZDF&_i)%lo988^-sQ=FI4cFer~;2_sw!&^NteJ zI@aCQ7bZ@6(`xj7o!;BG=ZzifUG_6Bo>sK$v&Z|*z)0Z?@CkAKFQfkd|9>D)x_ylg zNU*>ovY3H^TNs2H8D`Cq018T!xJHx&=ckpFCl;kL1SDqWmFW4ohA5co8R}U`XTDki zRMV3h;hE;?sl~tn=U5aI;JVVC4_S{flMn;7sn8Z z%gG4|0xV1lM>ROum?9(`oIC`VaCJ Date: Wed, 9 Jul 2025 16:56:42 +0200 Subject: [PATCH 260/491] scum construction machine --- changelog | 24 +++------ .../java/com/hbm/inventory/material/Mats.java | 2 +- .../inventory/recipes/AssemblerRecipes.java | 3 +- .../recipes/AssemblyMachineRecipes.java | 51 +++++++++++++++++-- src/main/java/com/hbm/items/ModItems.java | 3 -- src/main/java/com/hbm/main/MainRegistry.java | 1 + 6 files changed, 57 insertions(+), 27 deletions(-) diff --git a/changelog b/changelog index 666ddeaaa..d6b838a91 100644 --- a/changelog +++ b/changelog @@ -1,19 +1,7 @@ -## Changed -* The chemistry achievement now requires the new chemical plant -* The new chemical plant can now be used to upgrade the meteorite sword -* Fluid containers are now re-registered when using `/ntmreload` which should correctly generate fluid container items for freshly added custom fluids -* Recipe configs will no longer try to parse null value recipes, meaing that trailing commas in a recipe config will no longer create an error -* Refinery solid byproducts now build up substantially faster - * This means fracking solution from standard oil is now a lot more viable - * This also makes the volume of oil spent consistent with the NEI handler +## Added +* New assembler -## Fixed -* Fixed crash caused by breaking a tool while the fortune or silk touch ability is enabled -* Fixed NTM adding mob spawns to the mushroom island -* Fixed line break not working on the tip of the day -* Fixed an issue where AoE abilities can break bedrock -* Fixed chemical factory not saving its water and steam tanks -* Fixed siphon not working with some newer machines due to using legacy API -* Potentially fixed an incompatibility with Aether due to the loading screen replacement - * The loading screen replacement will only run up to 25 times per session, with a fixed delay of 5 seconds minimum - * The loading screen replacement can be disabled completely in the config \ No newline at end of file +## Changed +* Removed levitation unit + +## Fixed \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 6e810bbcc..5a03bf288 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -136,7 +136,7 @@ public class Mats { //Alloys public static final NTMMaterial MAT_STEEL = makeSmeltable(_AS + 0, STEEL, 0xAFAFAF, 0x0F0F0F, 0x4A4A4A).setAutogen(DUSTTINY, BOLT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, GRIP).m(); - public static final NTMMaterial MAT_MINGRADE = makeSmeltable(_AS + 1, MINGRADE, 0xFFBA7D, 0xAF1700, 0xE44C0F).setAutogen(WIRE, DUST, BLOCK).m(); + public static final NTMMaterial MAT_MINGRADE = makeSmeltable(_AS + 1, MINGRADE, 0xFFBA7D, 0xAF1700, 0xE44C0F).setAutogen(WIRE, DUST, DENSEWIRE, BLOCK).m(); public static final NTMMaterial MAT_ALLOY = makeSmeltable(_AS + 2, ALLOY, 0xFF8330, 0x700000, 0xFF7318).setAutogen(WIRE, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); public static final NTMMaterial MAT_DURA = makeSmeltable(_AS + 3, DURA, 0x82A59C, 0x06281E, 0x42665C).setAutogen(BOLT, DUST, PLATE, CASTPLATE, PIPE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, GRIP).m(); public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setAutogen(DUST, CASTPLATE, BLOCK, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, STOCK, GRIP).m(); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index e1efbf9db..233f67933 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -79,7 +79,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.centrifuge_element, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 4), new OreDictStack(TI.plate528(), 4), new ComparableStack(ModItems.motor, 1), }, 100); makeRecipe(new ComparableStack(ModItems.reactor_core, 1), new AStack[] {new OreDictStack(PB.ingot(), 8), new OreDictStack(BE.ingot(), 6), new OreDictStack(STEEL.plate(), 16), new OreDictStack(OreDictManager.getReflector(), 8), new OreDictStack(FIBER.ingot(), 2) },100); makeRecipe(new ComparableStack(ModItems.rtg_unit, 1), new AStack[] {new ComparableStack(ModItems.thermo_element, 2), new OreDictStack(CU.plateCast(), 1), new OreDictStack(PB.ingot(), 2), new OreDictStack(STEEL.plate(), 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CAPACITOR.ordinal()), },100); - makeRecipe(new ComparableStack(ModItems.levitation_unit, 1), new AStack[] {new ComparableStack(ModItems.coil_copper, 4), new ComparableStack(ModItems.coil_tungsten, 2), new OreDictStack(TI.plate(), 6), new ComparableStack(ModItems.nugget_schrabidium, 2), },100); makeRecipe(new ComparableStack(ModItems.drill_titanium, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new OreDictStack(DURA.ingot(), 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack(TI.plate(), 6), },100); makeRecipe(new ComparableStack(ModItems.entanglement_kit, 1), new AStack[] {new OreDictStack(STEEL.plate(), 8), new OreDictStack(DURA.ingot(), 4), new OreDictStack(CU.plate(), 24), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(Fluids.XENON.getDict(1_000))},200); makeRecipe(new ComparableStack(ModItems.dysfunctional_reactor, 1), new AStack[] {new OreDictStack(STEEL.plate(), 15), new OreDictStack(PB.ingot(), 5), new ComparableStack(ModItems.rod_quad_empty, 10), new OreDictStack("dyeBrown", 3), },200); @@ -168,7 +167,7 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModBlocks.nuke_n2, 1), new AStack[] {new OreDictStack(STEEL.shell(), 6), new OreDictStack(MAGTUNG.wireFine(), 12), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER), new OreDictStack("dyeBlack", 8), },300); makeRecipe(new ComparableStack(ModBlocks.nuke_fstbmb, 1), new AStack[] {new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(TI.shell(), 6), new ComparableStack(ModItems.fins_big_steel, 1), new ComparableStack(ModItems.powder_magic, 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack("dyeGray", 8), },600, ModItems.journal_pip, ModItems.journal_bj); makeRecipe(new ComparableStack(ModBlocks.nuke_custom, 1), new AStack[] {new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_small_steel, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack("dyeGray", 4), },300); - makeRecipe(new ComparableStack(ModBlocks.float_bomb, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.levitation_unit, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireFine(), 6), },250); + makeRecipe(new ComparableStack(ModBlocks.float_bomb, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireDense(), 8), },250); makeRecipe(new ComparableStack(ModBlocks.therm_endo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.powder_ice, 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4), },250); makeRecipe(new ComparableStack(ModBlocks.therm_exo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new OreDictStack(P_RED.dust(), 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4), },250); makeRecipe(new ComparableStack(ModItems.spawn_chopper, 1), new AStack[] {new ComparableStack(ModItems.chopper_blades, 5), new ComparableStack(ModItems.chopper_gun, 1), new ComparableStack(ModItems.chopper_head, 1), new ComparableStack(ModItems.chopper_tail, 1), new ComparableStack(ModItems.chopper_torso, 1), new ComparableStack(ModItems.chopper_wing, 2), },300); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index c018e55c9..1e741f6b7 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -7,7 +7,9 @@ import java.util.List; import static com.hbm.inventory.OreDictManager.*; import static com.hbm.inventory.material.Mats.*; +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.FluidStack; +import com.hbm.inventory.OreDictManager; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; @@ -15,7 +17,9 @@ import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.items.machine.ItemCircuit.EnumCircuitType; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; public class AssemblyMachineRecipes extends GenericRecipes { @@ -33,9 +37,50 @@ public class AssemblyMachineRecipes extends GenericRecipes { @Override public void registerDefaults() { - this.register(new GenericRecipe("ass.test").setup(100, 1_000) - .inputItems(new OreDictStack(STEEL.ingot(), 5)) - .outputItems(new ItemStack(ModItems.plate_welded, 1, MAT_STEEL.id))); + // plates and ingots + this.register(new GenericRecipe("ass.platemixed").setup(50, 100).outputItems(new ItemStack(ModItems.plate_mixed, 4)) + .inputItems(new OreDictStack(ALLOY.plate(), 2), new OreDictStack(OreDictManager.getReflector(), 1), new OreDictStack(BIGMT.plate(), 1))); + this.register(new GenericRecipe("ass.dalekanium").setup(200, 100).outputItems(new ItemStack(ModItems.plate_dalekanium, 1)) + .inputItems(new ComparableStack(ModBlocks.block_meteor, 1))); + + // cloth + this.register(new GenericRecipe("ass.hazcloth").setup(50, 100).outputItems(new ItemStack(ModItems.hazmat_cloth, 4)) + .inputItems(new OreDictStack(PB.dust(), 4), new ComparableStack(Items.string, 8))); + this.register(new GenericRecipe("ass.firecloth").setup(50, 100).outputItems(new ItemStack(ModItems.asbestos_cloth, 4)) + .inputItems(new OreDictStack(ASBESTOS.ingot(), 1), new ComparableStack(Items.string, 8))); + this.register(new GenericRecipe("ass.filtercoal").setup(50, 100).outputItems(new ItemStack(ModItems.filter_coal, 1)) + .inputItems(new OreDictStack(COAL.dust(), 4), new ComparableStack(Items.string, 2), new ComparableStack(Items.paper, 1))); + + // machine parts + this.register(new GenericRecipe("ass.centrifugetower").setup(100, 100).outputItems(new ItemStack(ModItems.centrifuge_element, 1)) + .inputItems(new OreDictStack(DURA.plate528(), 4), new OreDictStack(TI.plate528(), 4), new ComparableStack(ModItems.motor, 1))); + this.register(new GenericRecipe("ass.reactorcore").setup(100, 100).outputItems(new ItemStack(ModItems.reactor_core, 1)) + .inputItems(new OreDictStack(PB.plateCast(), 4), new OreDictStack(BE.ingot(), 8), new OreDictStack(OreDictManager.getReflector(), 8), new OreDictStack(ASBESTOS.ingot(), 4))); + this.register(new GenericRecipe("ass.thermoelement").setup(60, 100).outputItems(new ItemStack(ModItems.thermo_element, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 1), new OreDictStack(MINGRADE.wireFine(), 2), new OreDictStack(NETHERQUARTZ.dust(), 2))); + this.register(new GenericRecipe("ass.thermoelementsilicon").setup(60, 100).outputItems(new ItemStack(ModItems.thermo_element, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 1), new OreDictStack(GOLD.wireFine(), 2), new OreDictStack(SI.billet(), 1))); + this.register(new GenericRecipe("ass.rtgunit").setup(100, 100).outputItems(new ItemStack(ModItems.rtg_unit, 1)) + .inputItems(new OreDictStack(PB.plateCast(), 2), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.thermo_element, 2))); + this.register(new GenericRecipe("ass.titaniumdrill").setup(100, 100).outputItems(new ItemStack(ModItems.drill_titanium, 1)) + .inputItems(new OreDictStack(DURA.plateCast(), 1), new OreDictStack(TI.plate(), 8))); + + // bunker blocks + this.register(new GenericRecipe("ass.cmbtile").setup(100, 100).outputItems(new ItemStack(ModBlocks.cmb_brick, 8)) + .inputItems(new OreDictStack(ANY_CONCRETE.any(), 4), new OreDictStack(CMB.plate(), 4))); + this.register(new GenericRecipe("ass.cmbbrick").setup(100, 100).outputItems(new ItemStack(ModBlocks.cmb_brick_reinforced, 8)) + .inputItems(new OreDictStack(MAGTUNG.ingot(), 8), new ComparableStack(ModBlocks.ducrete, 4), new ComparableStack(ModBlocks.cmb_brick, 8))); + this.register(new GenericRecipe("ass.sealframe").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_frame, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(MINGRADE.wireDense(), 1))); + this.register(new GenericRecipe("ass.sealcontroller").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_frame, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(MINGRADE.wireDense(), 4))); + + // machines + this.register(new GenericRecipe("ass.centrifuge").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_centrifuge, 1)) + .inputItems(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.gascent").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_gascent, 1)) + .inputItems(new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(DESH.ingot(), 2), new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()))); + } public static HashMap getRecipes() { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 7387de265..b66b8f403 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -560,7 +560,6 @@ public class ModItems { public static Item centrifuge_element; public static Item reactor_core; public static Item rtg_unit; - public static Item levitation_unit; public static Item coil_advanced_alloy; public static Item coil_advanced_torus; @@ -2724,7 +2723,6 @@ public class ModItems { centrifuge_element = new Item().setUnlocalizedName("centrifuge_element").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":centrifuge_element"); reactor_core = new Item().setUnlocalizedName("reactor_core").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":reactor_core"); rtg_unit = new Item().setUnlocalizedName("rtg_unit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rtg_unit"); - levitation_unit = new Item().setUnlocalizedName("levitation_unit").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":levitation_unit"); coil_magnetized_tungsten = new Item().setUnlocalizedName("coil_magnetized_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_magnetized_tungsten"); coil_gold = new Item().setUnlocalizedName("coil_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold"); coil_gold_torus = new Item().setUnlocalizedName("coil_gold_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_gold_torus"); @@ -5511,7 +5509,6 @@ public class ModItems { GameRegistry.registerItem(centrifuge_element, centrifuge_element.getUnlocalizedName()); GameRegistry.registerItem(reactor_core, reactor_core.getUnlocalizedName()); GameRegistry.registerItem(rtg_unit, rtg_unit.getUnlocalizedName()); - GameRegistry.registerItem(levitation_unit, levitation_unit.getUnlocalizedName()); GameRegistry.registerItem(pipes_steel, pipes_steel.getUnlocalizedName()); GameRegistry.registerItem(drill_titanium, drill_titanium.getUnlocalizedName()); GameRegistry.registerItem(photo_panel, photo_panel.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 0d64ee670..4c8e7f954 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1701,6 +1701,7 @@ public class MainRegistry { ignoreMappings.add("hbm:tile.hadron_cooler"); ignoreMappings.add("hbm:tile.machine_transformer_20"); ignoreMappings.add("hbm:tile.machine_transformer_dnt_20"); + ignoreMappings.add("hbm:item.levitation_unit"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); From 453c47c6f0037374e4ef25a034326e40178153ea Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 29 Jun 2025 19:11:39 -0400 Subject: [PATCH 261/491] the gob block --- src/main/java/com/hbm/blocks/ModBlocks.java | 4 + .../hbm/blocks/generic/BlockWandSpawner.java | 249 ++++++++++++++++++ .../hbm/blocks/generic/DungeonSpawner.java | 106 ++------ src/main/java/com/hbm/main/MainRegistry.java | 2 + .../java/com/hbm/main/ModEventHandler.java | 140 ++-------- .../java/com/hbm/tileentity/TileMappings.java | 4 +- src/main/java/com/hbm/util/MobUtil.java | 197 ++++++++++++++ .../world/gen/util/DungeonSpawnerActions.java | 165 ++++++++++++ .../gen/util/DungeonSpawnerConditions.java | 91 +++++++ src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../hbm/textures/blocks/wand_spawner.png | Bin 0 -> 730 bytes .../hbm/textures/blocks/wand_spawner_top.png | Bin 0 -> 740 bytes 12 files changed, 760 insertions(+), 199 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java create mode 100644 src/main/java/com/hbm/util/MobUtil.java create mode 100644 src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java create mode 100644 src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/wand_spawner.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index f6dcd2065..f69f85497 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1243,6 +1243,7 @@ public class ModBlocks { public static Block wand_air; public static Block wand_loot; public static Block wand_jigsaw; + public static Block wand_spawner; public static Material materialGas = new MaterialGas(); @@ -2396,6 +2397,8 @@ public class ModBlocks { wand_air = new BlockWand(Blocks.air).setBlockName("wand_air").setBlockTextureName(RefStrings.MODID + ":wand_air"); wand_loot = new BlockWandLoot().setBlockName("wand_loot").setBlockTextureName(RefStrings.MODID + ":wand_loot"); wand_jigsaw = new BlockWandJigsaw().setBlockName("wand_jigsaw").setBlockTextureName(RefStrings.MODID + ":wand_jigsaw"); + wand_spawner = new BlockWandSpawner().setBlockName("wand_spawner").setBlockTextureName(RefStrings.MODID + ":wand_spawner"); + } private static void registerBlock() { @@ -3542,6 +3545,7 @@ public class ModBlocks { register(wand_air); register(wand_loot); register(wand_jigsaw); + register(wand_spawner); } private static void register(Block b) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java new file mode 100644 index 000000000..fdfca7689 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java @@ -0,0 +1,249 @@ +package com.hbm.blocks.generic; + +import api.hbm.block.IToolable; +import com.hbm.blocks.IBlockSideRotation; +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.blocks.ModBlocks; +import com.hbm.config.StructureConfig; +import com.hbm.interfaces.IBomb; +import com.hbm.interfaces.ICopiable; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.BufferUtil; +import com.hbm.util.i18n.I18nUtil; +import com.hbm.world.gen.INBTTileEntityTransformable; +import com.hbm.world.gen.util.DungeonSpawnerActions; +import com.hbm.world.gen.util.DungeonSpawnerConditions; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent; + +import java.util.ArrayList; +import java.util.List; + +public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IToolable, ITooltipProvider, IBlockSideRotation, IBomb { + + @SideOnly(Side.CLIENT) protected IIcon iconTop; + + public BlockWandSpawner() { + super(Material.iron); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":wand_spawner"); + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":wand_spawner_top"); + } + + @Override + public IIcon getIcon(int side, int meta) { + return (side <= 1) ? iconTop : blockIcon; + } + + @Override + public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { + if(side == 0) return IBlockSideRotation.topToBottom(world.getBlockMetadata(x, y, z)); + if(side == 1) return world.getBlockMetadata(x, y, z); + return 0; + } + + @Override + public int getRenderType() { + return IBlockSideRotation.getRenderType(); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + + if (i == 0) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if (i == 1) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if (i == 2) world.setBlockMetadataWithNotify(x, y, z, 0, 2); + if (i == 3) world.setBlockMetadataWithNotify(x, y, z, 1, 2); + + TileEntity te = world.getTileEntity(x, y, z); + if(te instanceof TileEntityWandSpawner) + ((TileEntityWandSpawner)te).placedRotation = i; + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityWandSpawner)) return false; + + TileEntityWandSpawner spawner = (TileEntityWandSpawner) te; + + switch(tool) { + case SCREWDRIVER: + List actionNames = DungeonSpawnerActions.getActionNames(); + int indexA = actionNames.indexOf(spawner.actionID); + + indexA += player.isSneaking() ? -1 : 1; + indexA = MathHelper.clamp_int(indexA, 0, actionNames.size() - 1); + + spawner.actionID = actionNames.get(indexA); + return true; + case DEFUSER: + List conditionNames = DungeonSpawnerConditions.getConditionNames(); + int indexC = conditionNames.indexOf(spawner.conditionID); + + indexC += player.isSneaking() ? -1 : 1; + indexC = MathHelper.clamp_int(indexC, 0, conditionNames.size() - 1); + + spawner.conditionID = conditionNames.get(indexC); + + return true; + + default: return false; + } + } + + @Override + public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityWandSpawner)) return; + + TileEntityWandSpawner spawner = (TileEntityWandSpawner) te; + + List text = new ArrayList(); + text.add("Action: " + spawner.actionID); + text.add("Condition: " + spawner.conditionID); + + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.GOLD + "Use screwdriver to cycle forwards through the action list, shift click to go back"); + list.add(EnumChatFormatting.GOLD + "Use defuser to cycle forwards through the condition list, shift click to go back"); + list.add(EnumChatFormatting.BLUE + "Use a detonator to transform"); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + return new TileEntityWandSpawner(); + } + + @Override + public BombReturnCode explode(World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityWandSpawner)) return null; + + ((TileEntityWandSpawner) te).triggerReplace = true; + + return BombReturnCode.TRIGGERED; + } + + public static class TileEntityWandSpawner extends TileEntityLoadedBase implements INBTTileEntityTransformable, ICopiable { + private boolean triggerReplace; + + public int placedRotation; + + public String actionID = "PHASE_ABERRATOR"; + public String conditionID = "ABERRATOR"; + + @Override + public void updateEntity() { + if(!worldObj.isRemote) { + if(triggerReplace) { + // On the first tick of this TE, replace with intended block and fill with loot + replace(); + } else { + networkPackNT(15); + } + } + } + + private void replace() { + if (!(worldObj.getBlock(xCoord, yCoord, zCoord) instanceof BlockWandSpawner)) { + MainRegistry.logger.warn("Somehow the block at: " + xCoord + ", " + yCoord + ", " + zCoord + " isn't a dungeon spawner block but we're doing a TE update as if it is, cancelling!"); + return; + } + worldObj.setBlock(xCoord,yCoord,zCoord, ModBlocks.dungeon_spawner); + + TileEntity te = worldObj.getTileEntity(xCoord, yCoord, zCoord); + + if(te == null || te instanceof BlockWandLoot.TileEntityWandLoot) { + MainRegistry.logger.warn("TE for dungeon spawner set incorrectly at: " + xCoord + ", " + yCoord + ", " + zCoord + ". If you're using some sort of world generation mod, report it to the author!"); + te = ModBlocks.wand_spawner.createTileEntity(worldObj, 0); + worldObj.setTileEntity(xCoord, yCoord, zCoord, te); + } + + if(te instanceof DungeonSpawner.TileEntityDungeonSpawner){ + DungeonSpawner.TileEntityDungeonSpawner spawner = (DungeonSpawner.TileEntityDungeonSpawner) te; + spawner.actionID = actionID; + spawner.conditionID = conditionID; + } + + } + + @Override + public void transformTE(World world, int coordBaseMode) { + triggerReplace = !StructureConfig.debugStructures; + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setString("actionID", actionID); + nbt.setString("conditionID", conditionID); + nbt.setInteger("rotation", placedRotation); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + actionID = nbt.getString("actionID"); + conditionID = nbt.getString("conditionID"); + placedRotation = nbt.getInteger("rotation"); + } + + @Override + public void serialize(ByteBuf buf) { + buf.writeInt(placedRotation); + BufferUtil.writeString(buf, actionID); + BufferUtil.writeString(buf, conditionID); + } + + @Override + public void deserialize(ByteBuf buf) { + placedRotation = buf.readInt(); + actionID = BufferUtil.readString(buf); + conditionID = BufferUtil.readString(buf); + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("actionID", actionID); + nbt.setString("conditionID", conditionID); + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + actionID = nbt.getString("actionID"); + conditionID = nbt.getString("conditionID"); + } + } +} diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index 4a6fc10d8..ffbb14239 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -7,7 +7,8 @@ import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ModItems; -import com.hbm.util.EnumUtil; +import com.hbm.world.gen.util.DungeonSpawnerActions; +import com.hbm.world.gen.util.DungeonSpawnerConditions; import com.hbm.util.Vec3NT; import net.minecraft.block.BlockContainer; @@ -30,19 +31,35 @@ public class DungeonSpawner extends BlockContainer { public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityDungeonSpawner(); } - + public static class TileEntityDungeonSpawner extends TileEntity { - + public int phase = 0; public int timer = 0; - public EnumSpawnerType type = EnumSpawnerType.ABERRATOR; - + + public String conditionID = "ABERRATOR"; + //actions always get called before conditions, use the phase timer in order to control behavior via condition + public String actionID = "ABERRATOR"; + + public Function condition; + public Consumer action; + @Override public void updateEntity() { - + if(!worldObj.isRemote) { - type.phase.accept(this); - if(type.phaseCondition.apply(this)) { + if(action == null){ + action = DungeonSpawnerActions.actions.get(actionID); + } + if(condition == null){ + condition = DungeonSpawnerConditions.conditions.get(conditionID); + } + if(action == null || condition == null){ + worldObj.setBlock(xCoord,yCoord,zCoord, Blocks.air); + return; + } + action.accept(this); + if(condition.apply(this)) { phase++; timer = 0; } else { @@ -55,83 +72,16 @@ public class DungeonSpawner extends BlockContainer { public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setInteger("phase", phase); - nbt.setByte("type", (byte) type.ordinal()); + nbt.setString("conditionID", conditionID); + nbt.setString("actionID", actionID); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.phase = nbt.getInteger("phase"); - this.type = EnumUtil.grabEnumSafely(EnumSpawnerType.class, nbt.getByte("type")); + this.conditionID = nbt.getString("conditionID"); } } - - public static enum EnumSpawnerType { - - ABERRATOR(CON_ABERRATOR, PHASE_ABERRATOR); - public Function phaseCondition; - public Consumer phase; - - private EnumSpawnerType(Function con, Consumer ph) { - this.phaseCondition = con; - this.phase = ph; - } - } - - public static Function CON_ABERRATOR = (tile) -> { - World world = tile.getWorldObj(); - if(world.difficultySetting.ordinal() == 0) return false; - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - if(tile.phase == 0) { - if(world.getTotalWorldTime() % 20 != 0) return false; - return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(20, 10, 20)).isEmpty(); - } - if(tile.phase < 3) { - if(world.getTotalWorldTime() % 20 != 0 || tile.timer < 60) return false; - return world.getEntitiesWithinAABB(EntityUndeadSoldier.class, AxisAlignedBB.getBoundingBox(x, y, z, x - 2, y + 1, z + 1).expand(50, 20, 50)).isEmpty(); - } - return false; - }; - - public static Consumer PHASE_ABERRATOR = (tile) -> { - World world = tile.getWorldObj(); - int x = tile.xCoord; - int y = tile.yCoord; - int z = tile.zCoord; - if(tile.phase == 1 || tile.phase == 2) { - if(tile.timer == 0) { - Vec3NT vec = new Vec3NT(10, 0, 0); - for(int i = 0; i < 10; i++) { - EntityUndeadSoldier mob = new EntityUndeadSoldier(world); - for(int j = 0; j < 7; j++) { - mob.setPositionAndRotation(x + 0.5 + vec.xCoord, y - 5, z + 0.5 + vec.zCoord, i * 36F, 0); - if(mob.getCanSpawnHere()) { - mob.onSpawnWithEgg(null); - world.spawnEntityInWorld(mob); - break; - } - } - - vec.rotateAroundYDeg(36D); - } - } - } - if(tile.phase > 2) { - TileEntity te = world.getTileEntity(x, y + 18, z); - if(te instanceof TileEntitySkeletonHolder) { - TileEntitySkeletonHolder skeleton = (TileEntitySkeletonHolder) te; - if(world.rand.nextInt(5) == 0) { - skeleton.item = new ItemStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR.ordinal()); - } else { - skeleton.item = new ItemStack(ModItems.clay_tablet, 1, 1); - } - skeleton.markDirty(); - world.markBlockForUpdate(x, y + 18, z); - } - world.setBlock(x, y, z, Blocks.obsidian); - } - }; } diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 4c8e7f954..0891e4012 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -877,6 +877,8 @@ public class MainRegistry { BlockToolConversion.registerRecipes(); AchievementHandler.register(); + MobUtil.intializeMobPools(); + proxy.registerMissileItems(); // Load compatibility for OC. diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index cd368b165..655656174 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -387,74 +387,18 @@ public class ModEventHandler { if(entity instanceof EntityZombie) { if(world.rand.nextFloat() < 0.005F && soot > 2) { // full hazmat zombine - equipFullSet(entity, ModItems.hazmat_helmet, ModItems.hazmat_plate, ModItems.hazmat_legs, ModItems.hazmat_boots); + MobUtil.equipFullSet(entity, ModItems.hazmat_helmet, ModItems.hazmat_plate, ModItems.hazmat_legs, ModItems.hazmat_boots); return; } - - if(world.rand.nextFloat() < 0.005F && soot > 20) { // full security zombine - equipFullSet(entity, ModItems.security_helmet, ModItems.security_plate, ModItems.security_legs, ModItems.security_boots); - return; - } - - slotPools.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth - {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, - {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, - {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, - {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} - })); - slotPools.put(3, createSlotPool(7000, new Object[][]{ - {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.robes_plate, 32}, - {ModItems.jackt, 32}, {ModItems.jackt2, 32}, {ModItems.alloy_plate, 2}, - {ModItems.steel_plate, 2} - })); - slotPools.put(2, createSlotPool(7000, new Object[][]{ - {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, - {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2} - })); - slotPools.put(1, createSlotPool(7000, new Object[][]{ - {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2} - })); - slotPools.put(0, createSlotPool(10000, new Object[][]{ - {ModItems.pipe_lead, 30}, {ModItems.crowbar, 25}, {ModItems.geiger_counter, 20}, - {ModItems.reer_graar, 16}, {ModItems.steel_pickaxe, 12}, {ModItems.stopsign, 10}, - {ModItems.sopsign, 8}, {ModItems.chernobylsign, 6}, {ModItems.steel_sword, 15}, - {ModItems.alloy_axe, 5}, {ModItems.titanium_sword, 8}, {ModItems.lead_gavel, 4}, - {ModItems.wrench, 20}, {ModItems.cobalt_decorated_sword, 2}, {ModItems.detonator_de, 1} - })); + slotPools = MobUtil.slotPoolCommon; } else if(entity instanceof EntitySkeleton) { - - slotPools.put(4, createSlotPool(12000, new Object[][]{ - {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, - {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, - {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, - {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} - })); - slotPools.put(3, createSlotPool(10000, new Object[][]{ - {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.alloy_plate, 2}, //sadly they cant wear jackets bc it breaks it - {ModItems.steel_plate, 8}, {ModItems.titanium_plate, 4} - })); - slotPools.put(2, createSlotPool(10000, new Object[][]{ - {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, - {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2}, - })); - slotPools.put(1, createSlotPool(10000, new Object[][]{ - {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2}, - {ModItems.titanium_boots, 6} - })); - + slotPools = MobUtil.slotPoolRanged; ItemStack bowReplacement = getSkelegun(soot, world.rand); slotPools.put(0, createSlotPool(50, bowReplacement != null ? new Object[][]{{bowReplacement, 1}} : new Object[][]{})); } - assignItemsToEntity(entity, slotPools); - } - - private void equipFullSet(EntityLivingBase entity, Item helmet, Item chest, Item legs, Item boots) { //for brainlets (me) to add more armorsets later when i forget about how this works - entity.setCurrentItemOrArmor(4, new ItemStack(helmet)); //p_70062_1_ is the slot number - entity.setCurrentItemOrArmor(3, new ItemStack(chest)); - entity.setCurrentItemOrArmor(2, new ItemStack(legs)); - entity.setCurrentItemOrArmor(1, new ItemStack(boots)); + MobUtil.assignItemsToEntity(entity, slotPools, rand); } private List createSlotPool(int nullWeight, Object[][] items) { @@ -473,74 +417,30 @@ public class ModEventHandler { return pool; } - - public void assignItemsToEntity(EntityLivingBase entity, Map> slotPools) { - for (Map.Entry> entry : slotPools.entrySet()) { - int slot = entry.getKey(); - List pool = entry.getValue(); - - WeightedRandomObject choice = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); //NullPointerException sludge fix - if (choice == null) { - continue; - } - - ItemStack stack = choice.asStack(); - if (stack == null || stack.getItem() == null) { - continue; - } - - if (stack.getItem() == ModItems.gas_mask_m65 //eyesore - || stack.getItem() == ModItems.gas_mask_olde - || stack.getItem() == ModItems.gas_mask_mono) { - ArmorUtil.installGasMaskFilter(stack, new ItemStack(ModItems.gas_mask_filter)); - } - - entity.setCurrentItemOrArmor(slot, stack); - - //Give skeleton AI if it has a gun - if (slot == 0 && entity instanceof EntitySkeleton && pool == slotPools.get(0)) { - addFireTask((EntityLiving) entity); - } - } - } - private static ItemStack getSkelegun(float soot, Random rand) { - if(!MobConfig.enableMobWeapons) return null; - if(rand.nextDouble() > Math.log(soot) * 0.25) return null; + if (!MobConfig.enableMobWeapons) return null; + if (rand.nextDouble() > Math.log(soot) * 0.25) return null; - ArrayList pool = new ArrayList(); - pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_light_revolver), 12)); - pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_heavy_revolver), 8)); + ArrayList pool = new ArrayList<>(); - if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_pepperbox), 10)); - if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_henry), 8)); - if(soot > 2) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_greasegun), 6)); - - if(soot > 4) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_maresleg), 4)); - if(soot > 4) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_uzi), 6)); - - if(soot > 8) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_spas12), 3)); - if(soot > 8) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_am180), 4)); - - if(soot > 12) pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_congolake), 1)); + if(soot < 0.3){ + pool.add(new WeightedRandomObject(new ItemStack(ModItems.gun_pepperbox), 5)); + pool.add(new WeightedRandomObject(null, 20)); + } else if(soot > 0.3 && soot < 1) { + pool.addAll(MobUtil.slotPoolGuns.get(0.3)); + } else if (soot < 3) { + pool.addAll(MobUtil.slotPoolGuns.get(1D)); + } else if (soot < 5) { + pool.addAll(MobUtil.slotPoolGuns.get(3D)); + } else { + pool.addAll(MobUtil.slotPoolGuns.get(5D)); + } WeightedRandomObject selected = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); return selected.asStack(); } - // these fucking tasks keep stacking on top of themselves - private static void addFireTask(EntityLiving entity) { - entity.setEquipmentDropChance(0, 0); // Prevent dropping guns - - for(Object entry : entity.tasks.taskEntries) { - EntityAITasks.EntityAITaskEntry task = (EntityAITasks.EntityAITaskEntry) entry; - if(task.action instanceof EntityAIFireGun) return; - } - - entity.tasks.addTask(3, new EntityAIFireGun(entity)); - } - @SubscribeEvent public void addAITasks(EntityJoinWorldEvent event) { if(event.world.isRemote || !(event.entity instanceof EntityLiving)) return; @@ -549,7 +449,7 @@ public class ModEventHandler { ItemStack held = living.getHeldItem(); if(held != null && held.getItem() instanceof ItemGunBaseNT) { - addFireTask(living); + MobUtil.addFireTask(living); } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index ca3281bd1..f688059be 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -19,6 +19,7 @@ import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.BlockSupplyCrate.TileEntitySupplyCrate; import com.hbm.blocks.generic.BlockWandJigsaw.TileEntityWandJigsaw; import com.hbm.blocks.generic.BlockWandLoot.TileEntityWandLoot; +import com.hbm.blocks.generic.BlockWandSpawner.TileEntityWandSpawner; import com.hbm.blocks.generic.DungeonSpawner.TileEntityDungeonSpawner; import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter; import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF; @@ -236,6 +237,7 @@ public class TileMappings { put(TileEntityWandLoot.class, "tileentity_wand_loot"); put(TileEntityWandJigsaw.class, "tileentity_wand_jigsaw"); + put(TileEntityWandSpawner.class, "tileentity_wand_spawner"); putNetwork(); putBombs(); @@ -428,7 +430,7 @@ public class TileMappings { put(TileEntityCranePartitioner.class, "tileentity_partitioner"); put(TileEntityFan.class, "tileentity_fan"); put(TileEntityPistonInserter.class, "tileentity_piston_inserter"); - + put(TileEntityPneumoTube.class, "tileentity_pneumatic_tube"); put(TileEntityRadioTorchSender.class, "tileentity_rtty_sender"); diff --git a/src/main/java/com/hbm/util/MobUtil.java b/src/main/java/com/hbm/util/MobUtil.java new file mode 100644 index 000000000..8779c1ed2 --- /dev/null +++ b/src/main/java/com/hbm/util/MobUtil.java @@ -0,0 +1,197 @@ +package com.hbm.util; + +import com.hbm.entity.mob.ai.EntityAIFireGun; +import com.hbm.items.ModItems; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.ai.EntityAITasks; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.WeightedRandom; + +import java.util.*; + +public class MobUtil { + + + public static Map> slotPoolCommon = new HashMap<>(); + public static Map> slotPoolRanged = new HashMap<>(); + + public static Map> slotPoolAdv = new HashMap<>(); + public static Map> slotPoolAdvRanged; + /**Unlike the above two, the Double is interpreted as minimum soot level, instead of armor slot **/ + public static HashMap> slotPoolGuns = new HashMap<>(); + + + public static void intializeMobPools(){ + slotPoolCommon.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.cobalt_helmet, 2}, {ModItems.rag_piss, 1}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + slotPoolCommon.put(3, createSlotPool(7000, new Object[][]{ + {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.robes_plate, 32}, + {ModItems.jackt, 32}, {ModItems.jackt2, 32}, {ModItems.alloy_plate, 2}, + {ModItems.steel_plate, 2} + })); + slotPoolCommon.put(2, createSlotPool(7000, new Object[][]{ + {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, + {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2} + })); + slotPoolCommon.put(1, createSlotPool(7000, new Object[][]{ + {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2} + })); + slotPoolCommon.put(0, createSlotPool(10000, new Object[][]{ + {ModItems.pipe_lead, 30}, {ModItems.crowbar, 25}, {ModItems.geiger_counter, 20}, + {ModItems.reer_graar, 16}, {ModItems.steel_pickaxe, 12}, {ModItems.stopsign, 10}, + {ModItems.sopsign, 8}, {ModItems.chernobylsign, 6}, {ModItems.steel_sword, 15}, + {ModItems.titanium_sword, 8}, {ModItems.lead_gavel, 4}, {ModItems.wrench_flipped, 2}, + {ModItems.wrench, 20} + })); + + slotPoolRanged.put(4, createSlotPool(12000, new Object[][]{ + {ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8}, + {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16}, + {ModItems.rag_piss, 1}, {ModItems.goggles, 1}, {ModItems.alloy_helmet, 2}, + {ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8} + })); + slotPoolRanged.put(3, createSlotPool(10000, new Object[][]{ + {ModItems.starmetal_plate, 1}, {ModItems.cobalt_plate, 2}, {ModItems.alloy_plate, 2}, //sadly they cant wear jackets bc it breaks it + {ModItems.steel_plate, 8}, {ModItems.titanium_plate, 4} + })); + slotPoolRanged.put(2, createSlotPool(10000, new Object[][]{ + {ModItems.zirconium_legs, 1}, {ModItems.cobalt_legs, 2}, {ModItems.steel_legs, 16}, + {ModItems.titanium_legs, 8}, {ModItems.robes_legs, 32}, {ModItems.alloy_legs, 2}, + })); + slotPoolRanged.put(1, createSlotPool(10000, new Object[][]{ + {ModItems.robes_boots, 32}, {ModItems.steel_boots, 16}, {ModItems.cobalt_boots, 2}, {ModItems.alloy_boots, 2}, + {ModItems.titanium_boots, 6} + })); + + slotPoolGuns.put(0.3, createSlotPool(new Object[][]{ + {ModItems.gun_light_revolver, 16}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 2} + })); + slotPoolGuns.put(1D, createSlotPool(new Object[][]{ + {ModItems.gun_light_revolver, 6}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 4}, {ModItems.gun_henry, 6} + })); + slotPoolGuns.put(3D, createSlotPool(new Object[][]{ + {ModItems.gun_uzi, 10}, {ModItems.gun_maresleg, 8}, {ModItems.gun_henry, 12}, {ModItems.gun_heavy_revolver, 4}, {ModItems.gun_flaregun, 2} + })); + slotPoolGuns.put(5D, createSlotPool(new Object[][]{ + {ModItems.gun_am180, 6}, {ModItems.gun_uzi, 10}, {ModItems.gun_spas12, 8}, {ModItems.gun_henry_lincoln, 2}, {ModItems.gun_heavy_revolver, 12}, {ModItems.gun_flaregun, 4}, {ModItems.gun_flamer, 2} + })); + + slotPoolAdv.put(4, createSlotPool(new Object[][]{ + {ModItems.security_helmet, 10}, {ModItems.t45_helmet, 4}, {ModItems.asbestos_helmet, 12}, + {ModItems.liquidator_helmet, 4}, {ModItems.no9, 12}, + {ModItems.hazmat_helmet, 6} + })); + slotPoolAdv.put(3, createSlotPool(new Object[][]{ + {ModItems.liquidator_plate, 4}, {ModItems.security_plate, 8}, {ModItems.asbestos_plate, 12}, + {ModItems.t45_plate, 4}, {ModItems.hazmat_plate, 6}, + {ModItems.steel_plate, 8} + })); + slotPoolAdv.put(2, createSlotPool(new Object[][]{ + {ModItems.liquidator_legs, 4}, {ModItems.security_legs, 8}, {ModItems.asbestos_legs, 12}, + {ModItems.t45_legs, 4}, {ModItems.hazmat_legs, 6}, + {ModItems.steel_legs, 8} + })); + slotPoolAdv.put(1, createSlotPool(new Object[][]{ + {ModItems.liquidator_boots, 4}, {ModItems.security_boots, 8}, {ModItems.asbestos_boots, 12}, + {ModItems.t45_boots, 4}, {ModItems.hazmat_boots, 6}, + {ModItems.robes_boots, 8} + })); + slotPoolAdv.put(0, createSlotPool(new Object[][]{ + {ModItems.pipe_lead, 20}, {ModItems.crowbar, 30}, {ModItems.geiger_counter, 20}, + {ModItems.reer_graar, 20}, {ModItems.wrench_flipped, 12}, {ModItems.stopsign, 16}, + {ModItems.sopsign, 4}, {ModItems.chernobylsign, 16}, + {ModItems.titanium_sword, 18}, {ModItems.lead_gavel, 8}, + {ModItems.wrench, 20} + })); + + slotPoolAdvRanged = new HashMap<>(slotPoolAdv); + slotPoolAdvRanged.remove(0); + + } + + public static List createSlotPool(int nullWeight, Object[][] items) { + List pool = new ArrayList<>(); + pool.add(new WeightedRandomObject(null, nullWeight)); + for (Object[] item : items) { + Object obj = item[0]; + int weight = (int) item[1]; + + if (obj instanceof Item) { + pool.add(new WeightedRandomObject(new ItemStack((Item) obj), weight)); + } else if (obj instanceof ItemStack) { //lol just make it pass ItemStack aswell + pool.add(new WeightedRandomObject(obj, weight)); + } + } + return pool; + } + public static List createSlotPool(Object[][] items) { + List pool = new ArrayList<>(); + for (Object[] item : items) { + Object obj = item[0]; + int weight = (int) item[1]; + + if (obj instanceof Item) { + pool.add(new WeightedRandomObject(new ItemStack((Item) obj), weight)); + } else if (obj instanceof ItemStack) { //lol just make it pass ItemStack aswell + pool.add(new WeightedRandomObject(obj, weight)); + } + } + return pool; + } + + public static void equipFullSet(EntityLivingBase entity, Item helmet, Item chest, Item legs, Item boots) { //for brainlets (me) to add more armorsets later when i forget about how this works + entity.setCurrentItemOrArmor(4, new ItemStack(helmet)); //p_70062_1_ is the slot number + entity.setCurrentItemOrArmor(3, new ItemStack(chest)); + entity.setCurrentItemOrArmor(2, new ItemStack(legs)); + entity.setCurrentItemOrArmor(1, new ItemStack(boots)); + } + + public static void assignItemsToEntity(EntityLivingBase entity, Map> slotPools, Random rand) { + for (Map.Entry> entry : slotPools.entrySet()) { + int slot = entry.getKey(); + List pool = entry.getValue(); + + WeightedRandomObject choice = (WeightedRandomObject) WeightedRandom.getRandomItem(rand, pool); //NullPointerException sludge fix + if (choice == null) { + continue; + } + + ItemStack stack = choice.asStack(); + if (stack == null || stack.getItem() == null) { + continue; + } + + if (stack.getItem() == ModItems.gas_mask_m65 //eyesore + || stack.getItem() == ModItems.gas_mask_olde + || stack.getItem() == ModItems.gas_mask_mono) { + ArmorUtil.installGasMaskFilter(stack, new ItemStack(ModItems.gas_mask_filter)); + } + + entity.setCurrentItemOrArmor(slot, stack); + + //Give skeleton AI if it has a gun + if (slot == 0 && entity instanceof EntitySkeleton && pool == slotPools.get(0)) { + addFireTask((EntityLiving) entity); + } + } + } + + // these fucking tasks keep stacking on top of themselves + public static void addFireTask(EntityLiving entity) { + entity.setEquipmentDropChance(0, 0); // Prevent dropping guns + + for(Object entry : entity.tasks.taskEntries) { + EntityAITasks.EntityAITaskEntry task = (EntityAITasks.EntityAITaskEntry) entry; + if(task.action instanceof EntityAIFireGun) return; + } + + entity.tasks.addTask(3, new EntityAIFireGun(entity)); + } +} diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java new file mode 100644 index 000000000..120ea00e8 --- /dev/null +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java @@ -0,0 +1,165 @@ +package com.hbm.world.gen.util; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockPedestal; +import com.hbm.blocks.generic.BlockSkeletonHolder; +import com.hbm.blocks.generic.DungeonSpawner; +import com.hbm.entity.item.EntityFallingBlockNT; +import com.hbm.entity.mob.EntityUndeadSoldier; +import com.hbm.items.ItemEnums; +import com.hbm.items.ModItems; +import com.hbm.main.ModEventHandler; +import com.hbm.tileentity.machine.storage.TileEntityCrateBase; +import com.hbm.util.MobUtil; +import com.hbm.util.Vec3NT; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; +import java.util.function.Consumer; + +public class DungeonSpawnerActions { + + public static HashMap> actions = new HashMap<>(); + + public static Consumer PHASE_ABERRATOR = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1 || tile.phase == 2) { + if (tile.timer == 0) { + Vec3NT vec = new Vec3NT(10, 0, 0); + for (int i = 0; i < 10; i++) { + EntityUndeadSoldier mob = new EntityUndeadSoldier(world); + for (int j = 0; j < 7; j++) { + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, y - 5, z + 0.5 + vec.zCoord, i * 36F, 0); + if (mob.getCanSpawnHere()) { + mob.onSpawnWithEgg(null); + world.spawnEntityInWorld(mob); + break; + } + } + + vec.rotateAroundYDeg(36D); + } + } + } + if (tile.phase > 2) { + TileEntity te = world.getTileEntity(x, y + 18, z); + if (te instanceof BlockSkeletonHolder.TileEntitySkeletonHolder) { + BlockSkeletonHolder.TileEntitySkeletonHolder skeleton = (BlockSkeletonHolder.TileEntitySkeletonHolder) te; + if (world.rand.nextInt(5) == 0) { + skeleton.item = new ItemStack(ModItems.item_secret, 1, ItemEnums.EnumSecretType.ABERRATOR.ordinal()); + } else { + skeleton.item = new ItemStack(ModItems.clay_tablet, 1, 1); + } + skeleton.markDirty(); + world.markBlockForUpdate(x, y + 18, z); + } + world.setBlock(x, y, z, Blocks.obsidian); + } + }; + + public static Consumer COLLAPSE_ROOF_RAD_5 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 0) return; + + //from explosionChaos because i cannot be assed + int r = 4; + int r2 = r * r; + int r22 = r2 / 2; + + for (int xx = -r; xx < r; xx++) { + int X = xx + x; + int XX = xx * xx; + for (int yy = -r; yy < r; yy++) { + int Y = yy + y; + int YY = XX + yy * yy; + for (int zz = -r; zz < r; zz++) { + int Z = zz + z; + int ZZ = YY + zz * zz; + if (ZZ < r22) { + + if (world.getBlock(X, Y, Z).getExplosionResistance(null) <= 70) { + EntityFallingBlockNT entityfallingblock = new EntityFallingBlockNT(world, X + 0.5, Y + 0.5, Z + 0.5, world.getBlock(X, Y, Z), world.getBlockMetadata(X, Y, Z)); + world.spawnEntityInWorld(entityfallingblock); + } + } + } + } + } + world.setBlock(x, y, z, ModBlocks.block_steel); + + }; + + public static Consumer FODDER_WAVE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if (tile.phase == 1) { + Vec3NT vec = new Vec3NT(5, 0, 0); + for (int i = 0; i < 10; i++) { + EntityZombie mob = new EntityZombie(world); + for (int j = 0; j < 7; j++) { + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, world.getHeightValue(x,z), z + 0.5 + vec.zCoord, i * 36F, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdv, new Random()); + if (mob.getCanSpawnHere()) { + world.spawnEntityInWorld(mob); + break; + } + } + vec.rotateAroundYDeg(36D); + } + world.setBlock(x, y, z, ModBlocks.block_steel); + } + }; + + public static Consumer PUZZLE_TEST = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 2){ + world.setBlock(x,y,z, ModBlocks.crate_steel); + + EntityLightningBolt blitz = new EntityLightningBolt(world, x, world.getHeightValue(x, z) + 1, z); + world.spawnEntityInWorld(blitz); + + TileEntityCrateBase crate = (TileEntityCrateBase) world.getTileEntity(x,y,z); + ((IInventory)crate).setInventorySlotContents(15, new ItemStack(ModItems.gun_bolter)); + } + }; + + public static List getActionNames(){ + return new ArrayList<>(actions.keySet()); + } + + //register new actions here + static{ + actions.put("PHASE_ABERRATOR", PHASE_ABERRATOR); + actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); + actions.put("FODDER_WAVE", FODDER_WAVE); + actions.put("PUZZLE_TEST", PUZZLE_TEST); + } + + + +} diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java new file mode 100644 index 000000000..0a634c271 --- /dev/null +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java @@ -0,0 +1,91 @@ +package com.hbm.world.gen.util; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockPedestal; +import com.hbm.blocks.generic.DungeonSpawner; +import com.hbm.entity.mob.EntityUndeadSoldier; +import com.hbm.items.ModItems; +import com.hbm.tileentity.machine.storage.TileEntityCrateBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.function.Function; + +public class DungeonSpawnerConditions { + + public static HashMap> conditions = new HashMap<>(); + + public static Function ABERRATOR = (tile) -> { + World world = tile.getWorldObj(); + if(world.difficultySetting.ordinal() == 0) return false; + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if(tile.phase == 0) { + if(world.getTotalWorldTime() % 20 != 0) return false; + return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(20, 10, 20)).isEmpty(); + } + if(tile.phase < 3) { + if(world.getTotalWorldTime() % 20 != 0 || tile.timer < 60) return false; + return world.getEntitiesWithinAABB(EntityUndeadSoldier.class, AxisAlignedBB.getBoundingBox(x, y, z, x - 2, y + 1, z + 1).expand(50, 20, 50)).isEmpty(); + } + return false; + }; + + public static Function PLAYER_CUBE_5 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(5, 5, 5)).isEmpty(); + }; + + public static Function REDSTONE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + return world.isBlockIndirectlyGettingPowered(x,y,z); + }; + + public static Function PUZZLE_TEST = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 0 && world.isBlockIndirectlyGettingPowered(x,y,z)){ + world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText("Find a " + EnumChatFormatting.GOLD + "great" + EnumChatFormatting.RESET + " ancient weapon, of questionable use in the modern age")); + world.setBlock(x,y + 1,z, ModBlocks.pedestal); + return true; + } + + TileEntity pedestal = world.getTileEntity(x,y + 1,z); + + return tile.phase == 1 + && pedestal instanceof BlockPedestal.TileEntityPedestal + && ((BlockPedestal.TileEntityPedestal) pedestal).item != null + && ((BlockPedestal.TileEntityPedestal) pedestal).item.getItem() == ModItems.big_sword; + }; + + public static List getConditionNames(){ + return new ArrayList<>(conditions.keySet()); + } + + //register new conditions here + static { + conditions.put("ABERRATOR", ABERRATOR); + conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); + conditions.put("REDSTONE", REDSTONE); + conditions.put("PUZZLE_TEST", PUZZLE_TEST); + } + +} diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 74c5a343b..0a90eddf7 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6061,6 +6061,7 @@ tile.volcano_rad_core.name=Rad Volcano Core tile.wand_air.name=Structure Wand Block (Air) tile.wand_loot.name=Structure Wand Block (Lootable) tile.wand_jigsaw.name=Structure Wand Block (Jigsaw) +tile.wand_spawner.name=Structure Wand Block (Actions) tile.waste_earth.name=Dead Grass tile.waste_leaves.name=Dead Leaves tile.waste_log.name=Charred Log diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner.png b/src/main/resources/assets/hbm/textures/blocks/wand_spawner.png new file mode 100644 index 0000000000000000000000000000000000000000..4561c8e4ee9f3dd2e6c8eec19ef31a27d2648ff9 GIT binary patch literal 730 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPL>Y{_(X4)An#RtPA{Ps_|nWnj=a zKXsz5$6*JVqw&E@l|a-W%a>xlG`;@R5{R?fFL z;433wnwqFGpJ4YgVkT+9sL~*vB^mLr9?6&f^(@kSqSZVx znK3kDLahA{=|AtTX`S(@_H^WYQCm2tzffTVx5?|i&$VwX&I%v+&lB@9w|*<*nfgg_ z`PmPZ6AGkv?8wVLC0DSMxyMFwljiP8^Opr^FuYIy;$xZcLhMES=c??tkH0XU2nauI ze&C>@LEw@%U-iDfd;R9^`T9Hm6#gldvJwM)?eMhjJ*_rJuVDT&< z8w5Nh85v#x6Az3=vy=g-e*!xL3s9wjk+A{e0*I+#p8&j=q`{-;D&Q<|NI+#KBO8a{j>Z{fj&lwkU|{e$#-X$8k{QTt44$rj JF6*2UngE?A_U`}y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png b/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png new file mode 100644 index 0000000000000000000000000000000000000000..4788b84883581058c6fdf5525b3239d0e888f352 GIT binary patch literal 740 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPL>Y|3BPd`_OrtHz2RrJEzLct)l-`jtSimUq^_o?J^%8- zSW0o$i^bPA?74H~ipQKyj~`Ft+Ip{KrOrR|SHj-&SVebzSTMEt^P%oTe^>vU^GNn# z$JQK`7XMc3*qsYL?7eiBX}^Xa>zb8kI;8t~Io(^nhH%bS&C%VxtzdmY^r149_}Q8T zP9J9_S#M7Idnb7BhP;zA=LPLL6XqtF+~ir}6Xr2l(SQ1yJ`Fj;oBh*1ZfE)DSvd2N zS8`|a3>`DK2kw6lzR%m6;$N<~QjaUtf8YOWd=GVh-1_qOyz~A4R!tX_V=P?jzcH}g zbG@&VmHYd`2EO#^u4nJGedf)mJ0ZDF&_i)%lo988^-sQ=FI4cFer~;2_sw!&^NteJ zI@aCQ7bZ@6(`xj7o!;BG=ZzifUG_6Bo>sK$v&Z|*z)0Z?@CkAKFQfkd|9>D)x_ylg zNU*>ovY3H^TNs2H8D`Cq018T!xJHx&=ckpFCl;kL1SDqWmFW4ohA5co8R}U`XTDki zRMV3h;hE;?sl~tn=U5aI;JVVC4_S{flPBx7sn8Z z%gG4|0xV1lM>ROum?9(`oIC`Va7jCRdIWMFVqh|G_VDx+T*Ri*utcI?R3P2J0O%k? Wj>Vsvd|H4;FnGH9xvX Date: Sun, 29 Jun 2025 19:11:39 -0400 Subject: [PATCH 262/491] the gob block From 274995ebd6ec87b23b4e8939baf70013f954cd80 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:32:25 -0400 Subject: [PATCH 263/491] copy tool support and working directional offsets --- .../hbm/blocks/generic/BlockWandSpawner.java | 11 +++++- .../hbm/blocks/generic/DungeonSpawner.java | 4 +++ .../world/gen/util/DungeonSpawnerActions.java | 33 +++++++++++++++++- .../hbm/textures/blocks/wand_spawner_top.png | Bin 740 -> 743 bytes 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java index fdfca7689..0508002d7 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java @@ -33,6 +33,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.List; @@ -78,9 +79,16 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT if (i == 2) world.setBlockMetadataWithNotify(x, y, z, 0, 2); if (i == 3) world.setBlockMetadataWithNotify(x, y, z, 1, 2); + ForgeDirection dir = ForgeDirection.UNKNOWN; + switch(i){ + case 0: dir = ForgeDirection.SOUTH;break; + case 1: dir = ForgeDirection.WEST; break; + case 2: dir = ForgeDirection.NORTH;break; + case 3: dir = ForgeDirection.EAST; break; + } TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityWandSpawner) - ((TileEntityWandSpawner)te).placedRotation = i; + ((TileEntityWandSpawner)te).placedRotation = dir.ordinal(); } @Override @@ -193,6 +201,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT DungeonSpawner.TileEntityDungeonSpawner spawner = (DungeonSpawner.TileEntityDungeonSpawner) te; spawner.actionID = actionID; spawner.conditionID = conditionID; + spawner.direction = ForgeDirection.getOrientation(placedRotation); } } diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index ffbb14239..41fa907b5 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -20,6 +20,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class DungeonSpawner extends BlockContainer { @@ -44,6 +45,7 @@ public class DungeonSpawner extends BlockContainer { public Function condition; public Consumer action; + public ForgeDirection direction = ForgeDirection.UNKNOWN; @Override public void updateEntity() { @@ -74,6 +76,7 @@ public class DungeonSpawner extends BlockContainer { nbt.setInteger("phase", phase); nbt.setString("conditionID", conditionID); nbt.setString("actionID", actionID); + nbt.setInteger("direction", direction.ordinal()); } @Override @@ -81,6 +84,7 @@ public class DungeonSpawner extends BlockContainer { super.readFromNBT(nbt); this.phase = nbt.getInteger("phase"); this.conditionID = nbt.getString("conditionID"); + this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); } } diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java index 120ea00e8..1e32d9dc7 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java @@ -5,6 +5,7 @@ import com.hbm.blocks.generic.BlockPedestal; import com.hbm.blocks.generic.BlockSkeletonHolder; import com.hbm.blocks.generic.DungeonSpawner; import com.hbm.entity.item.EntityFallingBlockNT; +import com.hbm.entity.missile.EntityMissileTier2; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums; import com.hbm.items.ModItems; @@ -12,6 +13,7 @@ import com.hbm.main.ModEventHandler; import com.hbm.tileentity.machine.storage.TileEntityCrateBase; import com.hbm.util.MobUtil; import com.hbm.util.Vec3NT; +import com.hbm.world.WorldUtil; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.player.EntityPlayer; @@ -21,7 +23,10 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.HashMap; @@ -140,7 +145,7 @@ public class DungeonSpawnerActions { if(tile.phase == 2){ world.setBlock(x,y,z, ModBlocks.crate_steel); - EntityLightningBolt blitz = new EntityLightningBolt(world, x, world.getHeightValue(x, z) + 1, z); + EntityLightningBolt blitz = new EntityLightningBolt(world, x, world.getHeightValue(x, z) + 2, z); world.spawnEntityInWorld(blitz); TileEntityCrateBase crate = (TileEntityCrateBase) world.getTileEntity(x,y,z); @@ -148,6 +153,31 @@ public class DungeonSpawnerActions { } }; + public static Consumer MISSILE_STRIKE = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase != 1) return; + + world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + "[COMMAND UNIT]"+ EnumChatFormatting.RESET + " Missile Fired")); + + ForgeDirection parallel = tile.direction.getRotation(ForgeDirection.UP); + + EntityMissileTier2.EntityMissileStrong missile = + new EntityMissileTier2.EntityMissileStrong( + world, + x + tile.direction.offsetX * 300, + 200, + z + tile.direction.offsetZ * 300, + x + parallel.offsetX * 30 + tile.direction.offsetX * 30, + z + parallel.offsetZ * 30 + tile.direction.offsetZ * 30); + WorldUtil.loadAndSpawnEntityInWorld(missile); + + world.setBlock(x,y,z, ModBlocks.block_electrical_scrap); + }; + public static List getActionNames(){ return new ArrayList<>(actions.keySet()); } @@ -158,6 +188,7 @@ public class DungeonSpawnerActions { actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); actions.put("FODDER_WAVE", FODDER_WAVE); actions.put("PUZZLE_TEST", PUZZLE_TEST); + actions.put("MISSILE_STRIKE", MISSILE_STRIKE); } diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png b/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png index 4788b84883581058c6fdf5525b3239d0e888f352..65e3106a96f970891be895a960ccfb53a60b3915 100644 GIT binary patch delta 87 zcmaFD`kZyc3?_doPZ!4!iOb0e2?8uk3P&|K*q9Fw delta 84 zcmaFP`h<1E3??6QPZ!4!iOb0e2?8uk3P&|K*q9bP0l+XkK_SqL` From acb01b13e00b00f83477a118baaf2bbcb95fc0ea Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:32:25 -0400 Subject: [PATCH 264/491] copy tool support and working directional offsets From 714a5298a976fa26ef4708d950c966a6a16c2e04 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Tue, 1 Jul 2025 20:11:19 -0400 Subject: [PATCH 265/491] disguises for the logic block --- .../hbm/blocks/generic/BlockWandSpawner.java | 65 ++++++++++++++++++- .../hbm/blocks/generic/DungeonSpawner.java | 51 +++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java index 0508002d7..6d4a6f8a3 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java @@ -16,14 +16,18 @@ import com.hbm.util.i18n.I18nUtil; import com.hbm.world.gen.INBTTileEntityTransformable; import com.hbm.world.gen.util.DungeonSpawnerActions; import com.hbm.world.gen.util.DungeonSpawnerConditions; +import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -91,6 +95,30 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT ((TileEntityWandSpawner)te).placedRotation = dir.ordinal(); } + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { + + ItemStack stack = player.getHeldItem(); + + if (stack != null && stack.getItem() instanceof ItemBlock && !player.isSneaking()) { + ItemBlock ib = (ItemBlock) stack.getItem(); + Block block = ib.field_150939_a; + + if (block.renderAsNormalBlock() && block != this) { + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityWandSpawner){ + TileEntityWandSpawner spawner = (TileEntityWandSpawner) tile; + spawner.disguise = block; + spawner.disguiseMeta = stack.getItemDamage() & 15; + return true; + } + } + } + return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); + } + @Override public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { TileEntity te = world.getTileEntity(x, y, z); @@ -132,10 +160,17 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT TileEntityWandSpawner spawner = (TileEntityWandSpawner) te; - List text = new ArrayList(); + List text = new ArrayList<>(); text.add("Action: " + spawner.actionID); text.add("Condition: " + spawner.conditionID); + String block; + if(spawner.disguise != null && spawner.disguise != Blocks.air) + block = I18nUtil.resolveKey(spawner.disguise.getUnlocalizedName() + ".name"); + else + block = "None"; + + text.add("Disguise Block: " + block); ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } @@ -167,9 +202,14 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT public int placedRotation; + Block disguise; + int disguiseMeta = -1; + public String actionID = "PHASE_ABERRATOR"; public String conditionID = "ABERRATOR"; + public boolean noDisguise; + @Override public void updateEntity() { if(!worldObj.isRemote) { @@ -202,6 +242,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT spawner.actionID = actionID; spawner.conditionID = conditionID; spawner.direction = ForgeDirection.getOrientation(placedRotation); + spawner.disguise = disguise; + spawner.disguiseMeta = disguiseMeta; } } @@ -217,6 +259,10 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT nbt.setString("actionID", actionID); nbt.setString("conditionID", conditionID); nbt.setInteger("rotation", placedRotation); + if(disguise != null){ + nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); + nbt.setInteger("disguiseMeta", disguiseMeta); + } } @Override @@ -225,6 +271,10 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT actionID = nbt.getString("actionID"); conditionID = nbt.getString("conditionID"); placedRotation = nbt.getInteger("rotation"); + if(nbt.hasKey("disguise")){ + disguise = Block.getBlockFromName(nbt.getString("disguise")); + disguiseMeta = nbt.getInteger("disguiseMeta"); + } } @Override @@ -232,6 +282,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT buf.writeInt(placedRotation); BufferUtil.writeString(buf, actionID); BufferUtil.writeString(buf, conditionID); + buf.writeInt(Block.getIdFromBlock(disguise)); + buf.writeInt(disguiseMeta); } @Override @@ -239,6 +291,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT placedRotation = buf.readInt(); actionID = BufferUtil.readString(buf); conditionID = BufferUtil.readString(buf); + disguise = Block.getBlockById(buf.readInt()); + disguiseMeta = buf.readInt(); } @Override @@ -246,6 +300,11 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT NBTTagCompound nbt = new NBTTagCompound(); nbt.setString("actionID", actionID); nbt.setString("conditionID", conditionID); + if(disguise != null){ + nbt.setString("disguise", disguise.getUnlocalizedName()); + nbt.setInteger("disguiseMeta", disguiseMeta); + } + return nbt; } @@ -253,6 +312,10 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { actionID = nbt.getString("actionID"); conditionID = nbt.getString("conditionID"); + if(nbt.hasKey("disguise")){ + disguise = Block.getBlockFromName(nbt.getString("disguise")); + disguiseMeta = nbt.getInteger("disguiseMeta"); + } } } } diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index 41fa907b5..bba6ebfe7 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -7,18 +7,29 @@ import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ModItems; +import com.hbm.util.BufferUtil; import com.hbm.world.gen.util.DungeonSpawnerActions; import com.hbm.world.gen.util.DungeonSpawnerConditions; import com.hbm.util.Vec3NT; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -33,11 +44,31 @@ public class DungeonSpawner extends BlockContainer { return new TileEntityDungeonSpawner(); } + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityDungeonSpawner){ + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) tile; + if(spawner.disguise != null){ + return spawner.disguise.getIcon(side, spawner.disguiseMeta); + } + } + + return super.getIcon(world, x, y, z, side); + } + + + public static class TileEntityDungeonSpawner extends TileEntity { public int phase = 0; public int timer = 0; + public Block disguise; + public int disguiseMeta; + public String conditionID = "ABERRATOR"; //actions always get called before conditions, use the phase timer in order to control behavior via condition public String actionID = "ABERRATOR"; @@ -77,6 +108,10 @@ public class DungeonSpawner extends BlockContainer { nbt.setString("conditionID", conditionID); nbt.setString("actionID", actionID); nbt.setInteger("direction", direction.ordinal()); + if(disguise != null){ + nbt.setInteger("disguiseMeta", disguiseMeta); + nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); + } } @Override @@ -85,6 +120,22 @@ public class DungeonSpawner extends BlockContainer { this.phase = nbt.getInteger("phase"); this.conditionID = nbt.getString("conditionID"); this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); + if(nbt.hasKey("disguise")){ + disguiseMeta = nbt.getInteger("disguiseMeta"); + disguise = Block.getBlockFromName(nbt.getString("disguise")); + } + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); } } From 3d77afab1f950d64dca34eff12650311a5defc21 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Tue, 1 Jul 2025 20:11:19 -0400 Subject: [PATCH 266/491] disguises for the logic block From 21efc6b61cc1c2f79765020a831bb39553094ff8 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:09:09 -0400 Subject: [PATCH 267/491] Interactions for the logic block --- .../hbm/blocks/generic/BlockWandSpawner.java | 32 +++++- .../hbm/blocks/generic/DungeonSpawner.java | 34 +++++- .../world/gen/util/DungeonSpawnerActions.java | 105 ++++++++++++++---- .../gen/util/DungeonSpawnerConditions.java | 7 +- .../gen/util/DungeonSpawnerInteractions.java | 80 +++++++++++++ 5 files changed, 230 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java index 6d4a6f8a3..b6c042838 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java @@ -16,6 +16,7 @@ import com.hbm.util.i18n.I18nUtil; import com.hbm.world.gen.INBTTileEntityTransformable; import com.hbm.world.gen.util.DungeonSpawnerActions; import com.hbm.world.gen.util.DungeonSpawnerConditions; +import com.hbm.world.gen.util.DungeonSpawnerInteractions; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -146,6 +147,16 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT spawner.conditionID = conditionNames.get(indexC); + return true; + case HAND_DRILL: + List interactionNames = DungeonSpawnerInteractions.getInteractionNames(); + int indexI = interactionNames.indexOf(spawner.interactionID); + + indexI += player.isSneaking() ? -1 : 1; + indexI = MathHelper.clamp_int(indexI, 0, interactionNames.size() - 1); + + spawner.interactionID = interactionNames.get(indexI); + return true; default: return false; @@ -163,6 +174,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT List text = new ArrayList<>(); text.add("Action: " + spawner.actionID); text.add("Condition: " + spawner.conditionID); + text.add("Interaction: " + (spawner.interactionID != null ? spawner.interactionID : "None")); + String block; if(spawner.disguise != null && spawner.disguise != Blocks.air) @@ -171,6 +184,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT block = "None"; text.add("Disguise Block: " + block); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } @@ -178,7 +192,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { list.add(EnumChatFormatting.GOLD + "Use screwdriver to cycle forwards through the action list, shift click to go back"); list.add(EnumChatFormatting.GOLD + "Use defuser to cycle forwards through the condition list, shift click to go back"); - list.add(EnumChatFormatting.BLUE + "Use a detonator to transform"); + list.add(EnumChatFormatting.GOLD + "Use hand drill to cycle forwards through the interaction list, shift click to go back"); + list.add(EnumChatFormatting.YELLOW + "Use a detonator to transform"); } @Override @@ -206,9 +221,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT int disguiseMeta = -1; public String actionID = "PHASE_ABERRATOR"; - public String conditionID = "ABERRATOR"; - - public boolean noDisguise; + public String conditionID = "EMPTY"; + public String interactionID; @Override public void updateEntity() { @@ -241,6 +255,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT DungeonSpawner.TileEntityDungeonSpawner spawner = (DungeonSpawner.TileEntityDungeonSpawner) te; spawner.actionID = actionID; spawner.conditionID = conditionID; + spawner.interactionID = interactionID; spawner.direction = ForgeDirection.getOrientation(placedRotation); spawner.disguise = disguise; spawner.disguiseMeta = disguiseMeta; @@ -258,6 +273,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT super.writeToNBT(nbt); nbt.setString("actionID", actionID); nbt.setString("conditionID", conditionID); + nbt.setString("interactionID", interactionID); nbt.setInteger("rotation", placedRotation); if(disguise != null){ nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); @@ -270,6 +286,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT super.readFromNBT(nbt); actionID = nbt.getString("actionID"); conditionID = nbt.getString("conditionID"); + interactionID = nbt.getString("interactionID"); placedRotation = nbt.getInteger("rotation"); if(nbt.hasKey("disguise")){ disguise = Block.getBlockFromName(nbt.getString("disguise")); @@ -282,6 +299,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT buf.writeInt(placedRotation); BufferUtil.writeString(buf, actionID); BufferUtil.writeString(buf, conditionID); + BufferUtil.writeString(buf, interactionID); buf.writeInt(Block.getIdFromBlock(disguise)); buf.writeInt(disguiseMeta); } @@ -291,6 +309,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT placedRotation = buf.readInt(); actionID = BufferUtil.readString(buf); conditionID = BufferUtil.readString(buf); + interactionID = BufferUtil.readString(buf); disguise = Block.getBlockById(buf.readInt()); disguiseMeta = buf.readInt(); } @@ -300,8 +319,10 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT NBTTagCompound nbt = new NBTTagCompound(); nbt.setString("actionID", actionID); nbt.setString("conditionID", conditionID); + if(interactionID != null) + nbt.setString("interactionID", interactionID); if(disguise != null){ - nbt.setString("disguise", disguise.getUnlocalizedName()); + nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); nbt.setInteger("disguiseMeta", disguiseMeta); } @@ -312,6 +333,7 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { actionID = nbt.getString("actionID"); conditionID = nbt.getString("conditionID"); + interactionID = nbt.getString("interactionID"); if(nbt.hasKey("disguise")){ disguise = Block.getBlockFromName(nbt.getString("disguise")); disguiseMeta = nbt.getInteger("disguiseMeta"); diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index bba6ebfe7..52dbb6099 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -12,6 +12,7 @@ import com.hbm.world.gen.util.DungeonSpawnerActions; import com.hbm.world.gen.util.DungeonSpawnerConditions; import com.hbm.util.Vec3NT; +import com.hbm.world.gen.util.DungeonSpawnerInteractions; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -59,22 +60,38 @@ public class DungeonSpawner extends BlockContainer { return super.getIcon(world, x, y, z, side); } + @Override + public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { + TileEntity te = worldIn.getTileEntity(x, y, z); + if(te instanceof TileEntityDungeonSpawner && ((TileEntityDungeonSpawner) te).interaction != null) { + ((TileEntityDungeonSpawner) te).interaction.accept(new Object[]{worldIn, te, x, y, z, player, side, subX, subY, subZ}); + return true; + } + return super.onBlockActivated(worldIn, x, y, z, player, side, subX, subY, subZ); + } public static class TileEntityDungeonSpawner extends TileEntity { + //phase is incremented per condition check, timer counts since last condition check by default public int phase = 0; public int timer = 0; public Block disguise; public int disguiseMeta; + /**Actions always get called before conditions, use the phase and timer variables in order to control behavior via conditions*/ public String conditionID = "ABERRATOR"; - //actions always get called before conditions, use the phase timer in order to control behavior via condition public String actionID = "ABERRATOR"; + /**Interactions are called on right click, and passes on the parameters of the right click to consumer*/ + public String interactionID; public Function condition; public Consumer action; + /**Consists of world instance, TileEntity instance, three ints for coordinates, one int for block side, and player instance, in that order **/ + public Consumer interaction; + + public EntityPlayer player; public ForgeDirection direction = ForgeDirection.UNKNOWN; @Override @@ -87,6 +104,10 @@ public class DungeonSpawner extends BlockContainer { if(condition == null){ condition = DungeonSpawnerConditions.conditions.get(conditionID); } + if(interaction == null && interactionID != null){ + interaction = DungeonSpawnerInteractions.interactions.get(interactionID); + } + if(action == null || condition == null){ worldObj.setBlock(xCoord,yCoord,zCoord, Blocks.air); return; @@ -105,8 +126,12 @@ public class DungeonSpawner extends BlockContainer { public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setInteger("phase", phase); - nbt.setString("conditionID", conditionID); + nbt.setString("actionID", actionID); + nbt.setString("conditionID", conditionID); + if(interactionID != null) + nbt.setString("interactionID", interactionID); + nbt.setInteger("direction", direction.ordinal()); if(disguise != null){ nbt.setInteger("disguiseMeta", disguiseMeta); @@ -118,8 +143,13 @@ public class DungeonSpawner extends BlockContainer { public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.phase = nbt.getInteger("phase"); + + this.actionID = nbt.getString("actionID"); this.conditionID = nbt.getString("conditionID"); + if(nbt.hasKey("interactionID")) this.interactionID = nbt.getString("interactionID"); + this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); + if(nbt.hasKey("disguise")){ disguiseMeta = nbt.getInteger("disguiseMeta"); disguise = Block.getBlockFromName(nbt.getString("disguise")); diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java index 1e32d9dc7..fee835c2e 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java @@ -1,7 +1,7 @@ package com.hbm.world.gen.util; +import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.generic.BlockPedestal; import com.hbm.blocks.generic.BlockSkeletonHolder; import com.hbm.blocks.generic.DungeonSpawner; import com.hbm.entity.item.EntityFallingBlockNT; @@ -9,34 +9,30 @@ import com.hbm.entity.missile.EntityMissileTier2; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums; import com.hbm.items.ModItems; -import com.hbm.main.ModEventHandler; +import com.hbm.tileentity.TileEntityDoorGeneric; import com.hbm.tileentity.machine.storage.TileEntityCrateBase; +import com.hbm.util.ContaminationUtil; import com.hbm.util.MobUtil; import com.hbm.util.Vec3NT; import com.hbm.world.WorldUtil; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.monster.EntityZombie; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.*; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Random; +import java.util.*; import java.util.function.Consumer; public class DungeonSpawnerActions { - public static HashMap> actions = new HashMap<>(); + public static LinkedHashMap> actions = new LinkedHashMap<>(); public static Consumer PHASE_ABERRATOR = (tile) -> { World world = tile.getWorldObj(); @@ -122,14 +118,10 @@ public class DungeonSpawnerActions { Vec3NT vec = new Vec3NT(5, 0, 0); for (int i = 0; i < 10; i++) { EntityZombie mob = new EntityZombie(world); - for (int j = 0; j < 7; j++) { - mob.setPositionAndRotation(x + 0.5 + vec.xCoord, world.getHeightValue(x,z), z + 0.5 + vec.zCoord, i * 36F, 0); - MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdv, new Random()); - if (mob.getCanSpawnHere()) { - world.spawnEntityInWorld(mob); - break; - } - } + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, world.getHeightValue(x,z), z + 0.5 + vec.zCoord, i * 36F, 0); + MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdv, new Random()); + world.spawnEntityInWorld(mob); + vec.rotateAroundYDeg(36D); } world.setBlock(x, y, z, ModBlocks.block_steel); @@ -178,6 +170,78 @@ public class DungeonSpawnerActions { world.setBlock(x,y,z, ModBlocks.block_electrical_scrap); }; + public static Consumer RAD_CONTAINMENT_SYSTEM = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + ForgeDirection direction = tile.direction.getOpposite(); + ForgeDirection rot = direction.getRotation(ForgeDirection.UP); + + AxisAlignedBB bb = AxisAlignedBB.getBoundingBox(x - rot.offsetX, y - 1, z - rot.offsetZ, x + rot.offsetX + direction.offsetX * 15, y + 1, z + rot.offsetZ + direction.offsetZ * 15).expand(2,2,2); + + List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, bb); + + for(EntityLivingBase e : entities) { + + Vec3 vec = Vec3.createVectorHelper(e.posX - (x + 0.5), (e.posY + e.getEyeHeight()) - (y + 0.5), e.posZ - (z + 0.5)); + double len = vec.lengthVector(); + vec = vec.normalize(); + + len = Math.max(len,1D); + + float res = 0; + + for(int i = 1; i < len; i++) { + + int ix = (int)Math.floor(x + 0.5 + vec.xCoord * i); + int iy = (int)Math.floor(y + 0.5 + vec.yCoord * i); + int iz = (int)Math.floor(z + 0.5 + vec.zCoord * i); + + res += world.getBlock(ix, iy, iz).getExplosionResistance(null); + } + + if(res < 1) + res = 1; + + float eRads = 100F; + eRads /= (float)res; + eRads /= (float)(len * len); + + ContaminationUtil.contaminate(e, ContaminationUtil.HazardType.RADIATION, ContaminationUtil.ContaminationType.HAZMAT2, eRads); + } + + if (tile.phase == 2 && tile.timer > 40){ + world.getClosestPlayer(x,y,z, 25).addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "[RAD CONTAINMENT SYSTEM]" + + EnumChatFormatting.RESET + " Diagnostics found containment failure, commencing lockdown")); + + for(int i = 1; i < 20; i++) { + int checkX, checkY, checkZ; + checkX = x + direction.offsetX * i; + checkY = y + 1; + checkZ = z + direction.offsetZ * i; + Block block = world.getBlock(checkX, checkY,checkZ); + TileEntity te = null; + if(block instanceof BlockDummyable){ + int[] coreCoords = ((BlockDummyable) block).findCore(world,checkX,checkY,checkZ); + te = world.getTileEntity(coreCoords[0], coreCoords[1], coreCoords[2]); + } + + if (te instanceof TileEntityDoorGeneric) { + TileEntityDoorGeneric door = (TileEntityDoorGeneric) te; + door.setPins(456); + door.close(); + door.lock(); + break; + } + } + + tile.phase = 3; + } + }; + public static List getActionNames(){ return new ArrayList<>(actions.keySet()); } @@ -189,6 +253,7 @@ public class DungeonSpawnerActions { actions.put("FODDER_WAVE", FODDER_WAVE); actions.put("PUZZLE_TEST", PUZZLE_TEST); actions.put("MISSILE_STRIKE", MISSILE_STRIKE); + actions.put("IRRADIATE_ENTITIES_AOE", RAD_CONTAINMENT_SYSTEM); } diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java index 0a634c271..83dd773e8 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java @@ -15,12 +15,16 @@ import net.minecraft.world.World; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.function.Function; public class DungeonSpawnerConditions { - public static HashMap> conditions = new HashMap<>(); + public static LinkedHashMap> conditions = new LinkedHashMap<>(); + + /**For use with interactions, for having them handle all conditional tasks*/ + public static Function EMPTY = (tile) -> false; public static Function ABERRATOR = (tile) -> { World world = tile.getWorldObj(); @@ -82,6 +86,7 @@ public class DungeonSpawnerConditions { //register new conditions here static { + conditions.put("EMPTY", EMPTY); conditions.put("ABERRATOR", ABERRATOR); conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); conditions.put("REDSTONE", REDSTONE); diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java new file mode 100644 index 000000000..32c19b81d --- /dev/null +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java @@ -0,0 +1,80 @@ +package com.hbm.world.gen.util; + +import com.hbm.blocks.generic.DungeonSpawner.TileEntityDungeonSpawner; +import com.hbm.entity.missile.EntityMissileTier2; +import com.hbm.items.ModItems; +import com.hbm.potion.HbmPotion; +import com.hbm.tileentity.TileEntityDoorGeneric; +import com.hbm.util.Vec3NT; +import com.hbm.world.WorldUtil; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.potion.PotionEffect; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.function.Consumer; + +/**Interactions are called when the player right-clicks the block**/ +public class DungeonSpawnerInteractions { + + /**Consumer consists of world instance, tile entity instance, three ints for coordinates, one int for block side, and player instance, + * in that order **/ + public static LinkedHashMap> interactions = new LinkedHashMap<>(); + + public static Consumer TEST = (array) -> { + World world = (World) array[0]; + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) array[1]; + int x = (int) array[2]; + int y = (int) array[3]; + int z = (int) array[4]; + EntityPlayer player = (EntityPlayer) array[5]; + int side = (int) array[6]; + + if(spawner.phase > 1) return; + + if(player.getHeldItem() != null) + player.getHeldItem().stackSize--; + + spawner.phase++; + }; + + public static Consumer RAD_CONTAINMENT_SYSTEM = (array) -> { + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) array[1]; + EntityPlayer player = (EntityPlayer) array[5]; + + if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.key){ + player.getHeldItem().stackSize--; + player.addChatMessage(new ChatComponentText( + EnumChatFormatting.LIGHT_PURPLE + "[RAD CONTAINMENT SYSTEM]" + + EnumChatFormatting.RESET + " Radiation treatment administered")); + player.addPotionEffect(new PotionEffect(HbmPotion.radaway.getId(), 3 * 60 * 20, 4)); + player.addPotionEffect(new PotionEffect(HbmPotion.radx.getId(), 3 * 60 * 20, 4)); + spawner.phase = 2; + spawner.timer = 0; + } + }; + + + + public static List getInteractionNames(){ + return new ArrayList<>(interactions.keySet()); + } + + //register new interactions here + static{ + interactions.put("TEST", TEST); + interactions.put("RADAWAY_INJECTOR", RAD_CONTAINMENT_SYSTEM); + } + + + +} From 541c6a1c997d51a9cd5f9f4c94f8b207c1283ce3 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:09:09 -0400 Subject: [PATCH 268/491] Interactions for the logic block --- src/main/resources/assets/hbm/lang/en_US.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 0a90eddf7..dcb6d68b3 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5279,6 +5279,7 @@ tile.ducrete_smooth_stairs.name=Ducrete Stairs tile.dummy_block.name=Dummy Block tile.dummy_port.name=Dummy Block (Electricity Port) tile.dungeon_chain.name=Metal Chain +tile.dungeon_spawner.name=Dungeon Action Block tile.dynamite.name=Dynamite tile.emp_bomb.name=EMP Device tile.factory_advanced_conductor.name=Advanced Factory Electricity Port From 603cc10696deb39faf0c580a850cd400eb34d108 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:09:09 -0400 Subject: [PATCH 269/491] Interactions for the logic block From c33b962043c533925012d20ef69ec6bc806c301b Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Fri, 4 Jul 2025 13:04:32 -0400 Subject: [PATCH 270/491] misc fix --- .../com/hbm/entity/mob/EntityUndeadSoldier.java | 14 ++++++++++---- .../hbm/world/gen/util/DungeonSpawnerActions.java | 12 +++++++++--- .../world/gen/util/DungeonSpawnerConditions.java | 6 ++++-- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java b/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java index 1a18c36c7..f2b042085 100644 --- a/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java +++ b/src/main/java/com/hbm/entity/mob/EntityUndeadSoldier.java @@ -16,10 +16,11 @@ import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; public class EntityUndeadSoldier extends EntityMob { - + public static final int DW_TYPE = 12; public static final byte TYPE_ZOMBIE = 0; public static final byte TYPE_SKELETON = 1; @@ -66,7 +67,7 @@ public class EntityUndeadSoldier extends EntityMob { this.setCurrentItemOrArmor(3, new ItemStack(ModItems.taurun_plate)); this.setCurrentItemOrArmor(2, new ItemStack(ModItems.taurun_legs)); this.setCurrentItemOrArmor(1, new ItemStack(ModItems.taurun_boots)); - + int gun = rand.nextInt(5); if(gun == 0) this.setCurrentItemOrArmor(0, new ItemStack(ModItems.gun_heavy_revolver)); if(gun == 1) this.setCurrentItemOrArmor(0, new ItemStack(ModItems.gun_light_revolver)); @@ -74,7 +75,7 @@ public class EntityUndeadSoldier extends EntityMob { if(gun == 3) this.setCurrentItemOrArmor(0, new ItemStack(ModItems.gun_maresleg)); if(gun == 4) this.setCurrentItemOrArmor(0, new ItemStack(ModItems.gun_greasegun)); } - + @Override protected String getLivingSound() { byte type = this.dataWatcher.getWatchableObjectByte(DW_TYPE); @@ -110,7 +111,12 @@ public class EntityUndeadSoldier extends EntityMob { public EnumCreatureAttribute getCreatureAttribute() { return EnumCreatureAttribute.UNDEAD; } - + + @Override + public boolean getCanSpawnHere() { + return this.worldObj.difficultySetting != EnumDifficulty.PEACEFUL && this.worldObj.checkNoEntityCollision(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox); + } + @Override protected void dropFewItems(boolean player, int loot) { } @Override protected void dropEquipment(boolean player, int loot) { } } diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java index fee835c2e..252bc543b 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java @@ -40,19 +40,25 @@ public class DungeonSpawnerActions { int y = tile.yCoord; int z = tile.zCoord; if (tile.phase == 1 || tile.phase == 2) { + tile.player = world.getClosestPlayer(x,y,z, 25); if (tile.timer == 0) { - Vec3NT vec = new Vec3NT(10, 0, 0); + Vec3NT vec = new Vec3NT(20, 0, 0); for (int i = 0; i < 10; i++) { + + if(vec.xCoord > 8) vec.xCoord += world.rand.nextInt(10) - 5; + EntityUndeadSoldier mob = new EntityUndeadSoldier(world); for (int j = 0; j < 7; j++) { - mob.setPositionAndRotation(x + 0.5 + vec.xCoord, y - 5, z + 0.5 + vec.zCoord, i * 36F, 0); + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, world.getHeightValue((int) (x + 0.5 + vec.xCoord),(int) (z + 0.5 + vec.zCoord)), z + 0.5 + vec.zCoord, i * 36F, 0); if (mob.getCanSpawnHere()) { mob.onSpawnWithEgg(null); + if(tile.player != null){ + mob.setTarget(tile.player); + } world.spawnEntityInWorld(mob); break; } } - vec.rotateAroundYDeg(36D); } } diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java index 83dd773e8..1e0cc9d5a 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java +++ b/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java @@ -32,13 +32,15 @@ public class DungeonSpawnerConditions { int x = tile.xCoord; int y = tile.yCoord; int z = tile.zCoord; + + boolean aoeCheck = !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(10, 10, 10)).isEmpty(); if(tile.phase == 0) { if(world.getTotalWorldTime() % 20 != 0) return false; - return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(20, 10, 20)).isEmpty(); + return aoeCheck; } if(tile.phase < 3) { if(world.getTotalWorldTime() % 20 != 0 || tile.timer < 60) return false; - return world.getEntitiesWithinAABB(EntityUndeadSoldier.class, AxisAlignedBB.getBoundingBox(x, y, z, x - 2, y + 1, z + 1).expand(50, 20, 50)).isEmpty(); + return world.getEntitiesWithinAABB(EntityUndeadSoldier.class, AxisAlignedBB.getBoundingBox(x, y, z, x - 2, y + 1, z + 1).expand(50, 20, 50)).isEmpty() && aoeCheck; } return false; }; From e7ebc7dd07846f847f18d40937218fce9c8d0d67 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Wed, 9 Jul 2025 13:03:48 -0400 Subject: [PATCH 271/491] thunder fire all your generation --- src/main/java/com/hbm/blocks/ModBlocks.java | 14 +- ...ckWandSpawner.java => BlockWandLogic.java} | 100 ++++----- .../hbm/blocks/generic/DungeonSpawner.java | 191 +++++++----------- .../com/hbm/blocks/generic/LogicBlock.java | 162 +++++++++++++++ .../hbm/tileentity/TileEntityDoorGeneric.java | 13 +- .../java/com/hbm/tileentity/TileMappings.java | 6 +- ...nerActions.java => LogicBlockActions.java} | 22 +- ...ditions.java => LogicBlockConditions.java} | 18 +- ...tions.java => LogicBlockInteractions.java} | 26 +-- src/main/resources/assets/hbm/lang/en_US.lang | 4 +- .../hbm/textures/blocks/logic_block.png | Bin 0 -> 910 bytes .../{wand_spawner.png => wand_logic.png} | Bin ...and_spawner_top.png => wand_logic_top.png} | Bin 13 files changed, 347 insertions(+), 209 deletions(-) rename src/main/java/com/hbm/blocks/generic/{BlockWandSpawner.java => BlockWandLogic.java} (74%) create mode 100644 src/main/java/com/hbm/blocks/generic/LogicBlock.java rename src/main/java/com/hbm/world/gen/util/{DungeonSpawnerActions.java => LogicBlockActions.java} (91%) rename src/main/java/com/hbm/world/gen/util/{DungeonSpawnerConditions.java => LogicBlockConditions.java} (79%) rename src/main/java/com/hbm/world/gen/util/{DungeonSpawnerInteractions.java => LogicBlockInteractions.java} (73%) create mode 100644 src/main/resources/assets/hbm/textures/blocks/logic_block.png rename src/main/resources/assets/hbm/textures/blocks/{wand_spawner.png => wand_logic.png} (100%) rename src/main/resources/assets/hbm/textures/blocks/{wand_spawner_top.png => wand_logic_top.png} (100%) diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index f69f85497..5f3de7f83 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1243,7 +1243,9 @@ public class ModBlocks { public static Block wand_air; public static Block wand_loot; public static Block wand_jigsaw; - public static Block wand_spawner; + public static Block wand_logic; + + public static Block logic_block; public static Material materialGas = new MaterialGas(); @@ -1978,7 +1980,7 @@ public class ModBlocks { ladder_cobalt = new BlockNTMLadder().setBlockName("ladder_cobalt").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_cobalt"); ladder_steel = new BlockNTMLadder().setBlockName("ladder_steel").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_steel"); ladder_tungsten = new BlockNTMLadder().setBlockName("ladder_tungsten").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_tungsten"); - + trapdoor_steel = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_steel").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_steel"); barrel_plastic = new BlockFluidBarrel(Material.iron, 12000).setBlockName("barrel_plastic").setStepSound(Block.soundTypeStone).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_plastic"); @@ -2397,7 +2399,9 @@ public class ModBlocks { wand_air = new BlockWand(Blocks.air).setBlockName("wand_air").setBlockTextureName(RefStrings.MODID + ":wand_air"); wand_loot = new BlockWandLoot().setBlockName("wand_loot").setBlockTextureName(RefStrings.MODID + ":wand_loot"); wand_jigsaw = new BlockWandJigsaw().setBlockName("wand_jigsaw").setBlockTextureName(RefStrings.MODID + ":wand_jigsaw"); - wand_spawner = new BlockWandSpawner().setBlockName("wand_spawner").setBlockTextureName(RefStrings.MODID + ":wand_spawner"); + wand_logic = new BlockWandLogic().setBlockName("wand_logic").setBlockTextureName(RefStrings.MODID + ":wand_logic"); + + logic_block = new LogicBlock().setBlockName("logic_block").setBlockTextureName(RefStrings.MODID + ":logic_block"); } @@ -3545,7 +3549,9 @@ public class ModBlocks { register(wand_air); register(wand_loot); register(wand_jigsaw); - register(wand_spawner); + register(wand_logic); + + register(logic_block); } private static void register(Block b) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java similarity index 74% rename from src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java rename to src/main/java/com/hbm/blocks/generic/BlockWandLogic.java index b6c042838..01d8df298 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLogic.java @@ -13,10 +13,10 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BufferUtil; import com.hbm.util.i18n.I18nUtil; +import com.hbm.world.gen.util.LogicBlockActions; import com.hbm.world.gen.INBTTileEntityTransformable; -import com.hbm.world.gen.util.DungeonSpawnerActions; -import com.hbm.world.gen.util.DungeonSpawnerConditions; -import com.hbm.world.gen.util.DungeonSpawnerInteractions; +import com.hbm.world.gen.util.LogicBlockConditions; +import com.hbm.world.gen.util.LogicBlockInteractions; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -43,19 +43,19 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.List; -public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IToolable, ITooltipProvider, IBlockSideRotation, IBomb { +public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToolable, ITooltipProvider, IBlockSideRotation, IBomb { @SideOnly(Side.CLIENT) protected IIcon iconTop; - public BlockWandSpawner() { + public BlockWandLogic() { super(Material.iron); } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { - this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":wand_spawner"); - this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":wand_spawner_top"); + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":wand_logic"); + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":wand_logic_top"); } @Override @@ -92,8 +92,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT case 3: dir = ForgeDirection.EAST; break; } TileEntity te = world.getTileEntity(x, y, z); - if(te instanceof TileEntityWandSpawner) - ((TileEntityWandSpawner)te).placedRotation = dir.ordinal(); + if(te instanceof TileEntityWandLogic) + ((TileEntityWandLogic)te).placedRotation = dir.ordinal(); } @Override @@ -109,10 +109,10 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT TileEntity tile = world.getTileEntity(x, y, z); - if(tile instanceof TileEntityWandSpawner){ - TileEntityWandSpawner spawner = (TileEntityWandSpawner) tile; - spawner.disguise = block; - spawner.disguiseMeta = stack.getItemDamage() & 15; + if(tile instanceof TileEntityWandLogic){ + TileEntityWandLogic logic = (TileEntityWandLogic) tile; + logic.disguise = block; + logic.disguiseMeta = stack.getItemDamage() & 15; return true; } } @@ -124,38 +124,38 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { TileEntity te = world.getTileEntity(x, y, z); - if(!(te instanceof TileEntityWandSpawner)) return false; + if(!(te instanceof TileEntityWandLogic)) return false; - TileEntityWandSpawner spawner = (TileEntityWandSpawner) te; + TileEntityWandLogic logic = (TileEntityWandLogic) te; switch(tool) { case SCREWDRIVER: - List actionNames = DungeonSpawnerActions.getActionNames(); - int indexA = actionNames.indexOf(spawner.actionID); + List actionNames = LogicBlockActions.getActionNames(); + int indexA = actionNames.indexOf(logic.actionID); indexA += player.isSneaking() ? -1 : 1; indexA = MathHelper.clamp_int(indexA, 0, actionNames.size() - 1); - spawner.actionID = actionNames.get(indexA); + logic.actionID = actionNames.get(indexA); return true; case DEFUSER: - List conditionNames = DungeonSpawnerConditions.getConditionNames(); - int indexC = conditionNames.indexOf(spawner.conditionID); + List conditionNames = LogicBlockConditions.getConditionNames(); + int indexC = conditionNames.indexOf(logic.conditionID); indexC += player.isSneaking() ? -1 : 1; indexC = MathHelper.clamp_int(indexC, 0, conditionNames.size() - 1); - spawner.conditionID = conditionNames.get(indexC); + logic.conditionID = conditionNames.get(indexC); return true; case HAND_DRILL: - List interactionNames = DungeonSpawnerInteractions.getInteractionNames(); - int indexI = interactionNames.indexOf(spawner.interactionID); + List interactionNames = LogicBlockInteractions.getInteractionNames(); + int indexI = interactionNames.indexOf(logic.interactionID); indexI += player.isSneaking() ? -1 : 1; indexI = MathHelper.clamp_int(indexI, 0, interactionNames.size() - 1); - spawner.interactionID = interactionNames.get(indexI); + logic.interactionID = interactionNames.get(indexI); return true; @@ -167,19 +167,19 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); - if(!(te instanceof TileEntityWandSpawner)) return; + if(!(te instanceof TileEntityWandLogic)) return; - TileEntityWandSpawner spawner = (TileEntityWandSpawner) te; + TileEntityWandLogic logic = (TileEntityWandLogic) te; List text = new ArrayList<>(); - text.add("Action: " + spawner.actionID); - text.add("Condition: " + spawner.conditionID); - text.add("Interaction: " + (spawner.interactionID != null ? spawner.interactionID : "None")); + text.add("Action: " + logic.actionID); + text.add("Condition: " + logic.conditionID); + text.add("Interaction: " + (logic.interactionID != null ? logic.interactionID : "None")); String block; - if(spawner.disguise != null && spawner.disguise != Blocks.air) - block = I18nUtil.resolveKey(spawner.disguise.getUnlocalizedName() + ".name"); + if(logic.disguise != null && logic.disguise != Blocks.air) + block = I18nUtil.resolveKey(logic.disguise.getUnlocalizedName() + ".name"); else block = "None"; @@ -198,21 +198,21 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT @Override public TileEntity createNewTileEntity(World worldIn, int meta) { - return new TileEntityWandSpawner(); + return new TileEntityWandLogic(); } @Override public BombReturnCode explode(World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); - if(!(te instanceof TileEntityWandSpawner)) return null; + if(!(te instanceof TileEntityWandLogic)) return null; - ((TileEntityWandSpawner) te).triggerReplace = true; + ((TileEntityWandLogic) te).triggerReplace = true; return BombReturnCode.TRIGGERED; } - public static class TileEntityWandSpawner extends TileEntityLoadedBase implements INBTTileEntityTransformable, ICopiable { + public static class TileEntityWandLogic extends TileEntityLoadedBase implements INBTTileEntityTransformable, ICopiable { private boolean triggerReplace; public int placedRotation; @@ -220,8 +220,8 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT Block disguise; int disguiseMeta = -1; - public String actionID = "PHASE_ABERRATOR"; - public String conditionID = "EMPTY"; + public String actionID = "FODDER_WAVE"; + public String conditionID = "PLAYER_CUBE_5"; public String interactionID; @Override @@ -237,28 +237,28 @@ public class BlockWandSpawner extends BlockContainer implements ILookOverlay, IT } private void replace() { - if (!(worldObj.getBlock(xCoord, yCoord, zCoord) instanceof BlockWandSpawner)) { - MainRegistry.logger.warn("Somehow the block at: " + xCoord + ", " + yCoord + ", " + zCoord + " isn't a dungeon spawner block but we're doing a TE update as if it is, cancelling!"); + if (!(worldObj.getBlock(xCoord, yCoord, zCoord) instanceof BlockWandLogic)) { + MainRegistry.logger.warn("Somehow the block at: " + xCoord + ", " + yCoord + ", " + zCoord + " isn't a logic block but we're doing a TE update as if it is, cancelling!"); return; } - worldObj.setBlock(xCoord,yCoord,zCoord, ModBlocks.dungeon_spawner); + worldObj.setBlock(xCoord,yCoord,zCoord, ModBlocks.logic_block); TileEntity te = worldObj.getTileEntity(xCoord, yCoord, zCoord); if(te == null || te instanceof BlockWandLoot.TileEntityWandLoot) { - MainRegistry.logger.warn("TE for dungeon spawner set incorrectly at: " + xCoord + ", " + yCoord + ", " + zCoord + ". If you're using some sort of world generation mod, report it to the author!"); - te = ModBlocks.wand_spawner.createTileEntity(worldObj, 0); + MainRegistry.logger.warn("TE for logic block set incorrectly at: " + xCoord + ", " + yCoord + ", " + zCoord + ". If you're using some sort of world generation mod, report it to the author!"); + te = ModBlocks.wand_logic.createTileEntity(worldObj, 0); worldObj.setTileEntity(xCoord, yCoord, zCoord, te); } - if(te instanceof DungeonSpawner.TileEntityDungeonSpawner){ - DungeonSpawner.TileEntityDungeonSpawner spawner = (DungeonSpawner.TileEntityDungeonSpawner) te; - spawner.actionID = actionID; - spawner.conditionID = conditionID; - spawner.interactionID = interactionID; - spawner.direction = ForgeDirection.getOrientation(placedRotation); - spawner.disguise = disguise; - spawner.disguiseMeta = disguiseMeta; + if(te instanceof LogicBlock.TileEntityLogicBlock){ + LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) te; + logic.actionID = actionID; + logic.conditionID = conditionID; + logic.interactionID = interactionID; + logic.direction = ForgeDirection.getOrientation(placedRotation); + logic.disguise = disguise; + logic.disguiseMeta = disguiseMeta; } } diff --git a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java index 52dbb6099..4a6fc10d8 100644 --- a/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/DungeonSpawner.java @@ -7,32 +7,18 @@ import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ModItems; -import com.hbm.util.BufferUtil; -import com.hbm.world.gen.util.DungeonSpawnerActions; -import com.hbm.world.gen.util.DungeonSpawnerConditions; +import com.hbm.util.EnumUtil; import com.hbm.util.Vec3NT; -import com.hbm.world.gen.util.DungeonSpawnerInteractions; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import io.netty.buffer.ByteBuf; -import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; public class DungeonSpawner extends BlockContainer { @@ -44,76 +30,19 @@ public class DungeonSpawner extends BlockContainer { public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityDungeonSpawner(); } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { - TileEntity tile = world.getTileEntity(x, y, z); - - if(tile instanceof TileEntityDungeonSpawner){ - TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) tile; - if(spawner.disguise != null){ - return spawner.disguise.getIcon(side, spawner.disguiseMeta); - } - } - - return super.getIcon(world, x, y, z, side); - } - - @Override - public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { - TileEntity te = worldIn.getTileEntity(x, y, z); - if(te instanceof TileEntityDungeonSpawner && ((TileEntityDungeonSpawner) te).interaction != null) { - ((TileEntityDungeonSpawner) te).interaction.accept(new Object[]{worldIn, te, x, y, z, player, side, subX, subY, subZ}); - return true; - } - - return super.onBlockActivated(worldIn, x, y, z, player, side, subX, subY, subZ); - } - + public static class TileEntityDungeonSpawner extends TileEntity { - - //phase is incremented per condition check, timer counts since last condition check by default + public int phase = 0; public int timer = 0; - - public Block disguise; - public int disguiseMeta; - - /**Actions always get called before conditions, use the phase and timer variables in order to control behavior via conditions*/ - public String conditionID = "ABERRATOR"; - public String actionID = "ABERRATOR"; - /**Interactions are called on right click, and passes on the parameters of the right click to consumer*/ - public String interactionID; - - public Function condition; - public Consumer action; - /**Consists of world instance, TileEntity instance, three ints for coordinates, one int for block side, and player instance, in that order **/ - public Consumer interaction; - - public EntityPlayer player; - - public ForgeDirection direction = ForgeDirection.UNKNOWN; + public EnumSpawnerType type = EnumSpawnerType.ABERRATOR; + @Override public void updateEntity() { - + if(!worldObj.isRemote) { - if(action == null){ - action = DungeonSpawnerActions.actions.get(actionID); - } - if(condition == null){ - condition = DungeonSpawnerConditions.conditions.get(conditionID); - } - if(interaction == null && interactionID != null){ - interaction = DungeonSpawnerInteractions.interactions.get(interactionID); - } - - if(action == null || condition == null){ - worldObj.setBlock(xCoord,yCoord,zCoord, Blocks.air); - return; - } - action.accept(this); - if(condition.apply(this)) { + type.phase.accept(this); + if(type.phaseCondition.apply(this)) { phase++; timer = 0; } else { @@ -126,47 +55,83 @@ public class DungeonSpawner extends BlockContainer { public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setInteger("phase", phase); - - nbt.setString("actionID", actionID); - nbt.setString("conditionID", conditionID); - if(interactionID != null) - nbt.setString("interactionID", interactionID); - - nbt.setInteger("direction", direction.ordinal()); - if(disguise != null){ - nbt.setInteger("disguiseMeta", disguiseMeta); - nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); - } + nbt.setByte("type", (byte) type.ordinal()); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.phase = nbt.getInteger("phase"); - - this.actionID = nbt.getString("actionID"); - this.conditionID = nbt.getString("conditionID"); - if(nbt.hasKey("interactionID")) this.interactionID = nbt.getString("interactionID"); - - this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); - - if(nbt.hasKey("disguise")){ - disguiseMeta = nbt.getInteger("disguiseMeta"); - disguise = Block.getBlockFromName(nbt.getString("disguise")); - } - } - - @Override - public Packet getDescriptionPacket() { - NBTTagCompound nbt = new NBTTagCompound(); - this.writeToNBT(nbt); - return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - this.readFromNBT(pkt.func_148857_g()); + this.type = EnumUtil.grabEnumSafely(EnumSpawnerType.class, nbt.getByte("type")); } } + + public static enum EnumSpawnerType { + + ABERRATOR(CON_ABERRATOR, PHASE_ABERRATOR); + public Function phaseCondition; + public Consumer phase; + + private EnumSpawnerType(Function con, Consumer ph) { + this.phaseCondition = con; + this.phase = ph; + } + } + + public static Function CON_ABERRATOR = (tile) -> { + World world = tile.getWorldObj(); + if(world.difficultySetting.ordinal() == 0) return false; + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if(tile.phase == 0) { + if(world.getTotalWorldTime() % 20 != 0) return false; + return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(20, 10, 20)).isEmpty(); + } + if(tile.phase < 3) { + if(world.getTotalWorldTime() % 20 != 0 || tile.timer < 60) return false; + return world.getEntitiesWithinAABB(EntityUndeadSoldier.class, AxisAlignedBB.getBoundingBox(x, y, z, x - 2, y + 1, z + 1).expand(50, 20, 50)).isEmpty(); + } + return false; + }; + + public static Consumer PHASE_ABERRATOR = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if(tile.phase == 1 || tile.phase == 2) { + if(tile.timer == 0) { + Vec3NT vec = new Vec3NT(10, 0, 0); + for(int i = 0; i < 10; i++) { + EntityUndeadSoldier mob = new EntityUndeadSoldier(world); + for(int j = 0; j < 7; j++) { + mob.setPositionAndRotation(x + 0.5 + vec.xCoord, y - 5, z + 0.5 + vec.zCoord, i * 36F, 0); + if(mob.getCanSpawnHere()) { + mob.onSpawnWithEgg(null); + world.spawnEntityInWorld(mob); + break; + } + } + + vec.rotateAroundYDeg(36D); + } + } + } + if(tile.phase > 2) { + TileEntity te = world.getTileEntity(x, y + 18, z); + if(te instanceof TileEntitySkeletonHolder) { + TileEntitySkeletonHolder skeleton = (TileEntitySkeletonHolder) te; + if(world.rand.nextInt(5) == 0) { + skeleton.item = new ItemStack(ModItems.item_secret, 1, EnumSecretType.ABERRATOR.ordinal()); + } else { + skeleton.item = new ItemStack(ModItems.clay_tablet, 1, 1); + } + skeleton.markDirty(); + world.markBlockForUpdate(x, y + 18, z); + } + world.setBlock(x, y, z, Blocks.obsidian); + } + }; } diff --git a/src/main/java/com/hbm/blocks/generic/LogicBlock.java b/src/main/java/com/hbm/blocks/generic/LogicBlock.java new file mode 100644 index 000000000..462755811 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/LogicBlock.java @@ -0,0 +1,162 @@ +package com.hbm.blocks.generic; + +import com.hbm.world.gen.util.LogicBlockActions; +import com.hbm.world.gen.util.LogicBlockConditions; +import com.hbm.world.gen.util.LogicBlockInteractions; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.function.Consumer; +import java.util.function.Function; + +public class LogicBlock extends BlockContainer { + + public LogicBlock() { + super(Material.rock); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new LogicBlock.TileEntityLogicBlock(); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof LogicBlock.TileEntityLogicBlock){ + LogicBlock.TileEntityLogicBlock logicBlock = (LogicBlock.TileEntityLogicBlock) tile; + if(logicBlock.disguise != null){ + return logicBlock.disguise.getIcon(side, logicBlock.disguiseMeta); + } + } + + return super.getIcon(world, x, y, z, side); + } + + @Override + public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { + TileEntity te = worldIn.getTileEntity(x, y, z); + if(te instanceof LogicBlock.TileEntityLogicBlock && ((LogicBlock.TileEntityLogicBlock) te).interaction != null) { + ((LogicBlock.TileEntityLogicBlock) te).interaction.accept(new Object[]{worldIn, te, x, y, z, player, side, subX, subY, subZ}); + return true; + } + + return super.onBlockActivated(worldIn, x, y, z, player, side, subX, subY, subZ); + } + + public static class TileEntityLogicBlock extends TileEntity { + + //phase is incremented per condition check, timer counts since last condition check by default + public int phase = 0; + public int timer = 0; + + public Block disguise; + public int disguiseMeta; + + /**Actions always get called before conditions, use the phase and timer variables in order to control behavior via conditions*/ + public String conditionID = "PLAYER_CUBE_5"; + public String actionID = "FODDER_WAVE"; + /**Interactions are called on right click, and passes on the parameters of the right click to consumer*/ + public String interactionID; + + public Function condition; + public Consumer action; + /**Consists of world instance, TileEntity instance, three ints for coordinates, one int for block side, and player instance, in that order **/ + public Consumer interaction; + + public EntityPlayer player; + + public ForgeDirection direction = ForgeDirection.UNKNOWN; + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + if(action == null){ + action = LogicBlockActions.actions.get(actionID); + } + if(condition == null){ + condition = LogicBlockConditions.conditions.get(conditionID); + } + if(interaction == null && interactionID != null){ + interaction = LogicBlockInteractions.interactions.get(interactionID); + } + + if(action == null || condition == null){ + worldObj.setBlock(xCoord,yCoord,zCoord, Blocks.air); + return; + } + action.accept(this); + if(condition.apply(this)) { + phase++; + timer = 0; + } else { + timer++; + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("phase", phase); + + nbt.setString("actionID", actionID); + nbt.setString("conditionID", conditionID); + if(interactionID != null) + nbt.setString("interactionID", interactionID); + + nbt.setInteger("direction", direction.ordinal()); + if(disguise != null){ + nbt.setInteger("disguiseMeta", disguiseMeta); + nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString()); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.phase = nbt.getInteger("phase"); + + this.actionID = nbt.getString("actionID"); + this.conditionID = nbt.getString("conditionID"); + if(nbt.hasKey("interactionID")) this.interactionID = nbt.getString("interactionID"); + + this.direction = ForgeDirection.getOrientation(nbt.getInteger("direction")); + + if(nbt.hasKey("disguise")){ + disguiseMeta = nbt.getInteger("disguiseMeta"); + disguise = Block.getBlockFromName(nbt.getString("disguise")); + } + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } + } + +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java index 9b8751d05..e460bc08b 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java +++ b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java @@ -21,7 +21,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityDoorGeneric extends TileEntityLockableBase { +public class TileEntityDoorGeneric extends TileEntityLockableBase { //0: closed, 1: open, 2: closing, 3: opening public byte state = 0; @@ -318,6 +318,15 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { return true; } + /**Useful for logic block interactions, as a way to close/open doors**/ + public void open(){ + if(state == 0) state = 3; + } + + public void close() { + if(state == 1) state = 2; + } + @Override public AxisAlignedBB getRenderBoundingBox() { return INFINITE_EXTENT_AABB; @@ -404,4 +413,4 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { } } -} \ No newline at end of file +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index f688059be..1c938ab18 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -19,8 +19,9 @@ import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.BlockSupplyCrate.TileEntitySupplyCrate; import com.hbm.blocks.generic.BlockWandJigsaw.TileEntityWandJigsaw; import com.hbm.blocks.generic.BlockWandLoot.TileEntityWandLoot; -import com.hbm.blocks.generic.BlockWandSpawner.TileEntityWandSpawner; +import com.hbm.blocks.generic.BlockWandLogic.TileEntityWandLogic; import com.hbm.blocks.generic.DungeonSpawner.TileEntityDungeonSpawner; +import com.hbm.blocks.generic.LogicBlock; import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter; import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF; import com.hbm.blocks.machine.BlockPWR.TileEntityBlockPWR; @@ -209,6 +210,7 @@ public class TileMappings { put(TileEntityPedestal.class, "tileentity_ntm_pedestal"); put(TileEntitySkeletonHolder.class, "tileentity_ntm_skeleton"); put(TileEntityDungeonSpawner.class, "tileentity_ntm_dungeon_spawner"); + put(LogicBlock.TileEntityLogicBlock.class, "tileentity_ntm_logic_block"); put(TileEntityBobble.class, "tileentity_ntm_bobblehead"); put(TileEntitySnowglobe.class, "tileentity_ntm_snowglobe"); put(TileEntityPlushie.class, "tileentity_ntm_plushie"); @@ -237,7 +239,7 @@ public class TileMappings { put(TileEntityWandLoot.class, "tileentity_wand_loot"); put(TileEntityWandJigsaw.class, "tileentity_wand_jigsaw"); - put(TileEntityWandSpawner.class, "tileentity_wand_spawner"); + put(TileEntityWandLogic.class, "tileentity_wand_spawner"); putNetwork(); putBombs(); diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java similarity index 91% rename from src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java rename to src/main/java/com/hbm/world/gen/util/LogicBlockActions.java index 252bc543b..2b3682c7c 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -4,6 +4,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockSkeletonHolder; import com.hbm.blocks.generic.DungeonSpawner; +import com.hbm.blocks.generic.LogicBlock; import com.hbm.entity.item.EntityFallingBlockNT; import com.hbm.entity.missile.EntityMissileTier2; import com.hbm.entity.mob.EntityUndeadSoldier; @@ -30,11 +31,11 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.*; import java.util.function.Consumer; -public class DungeonSpawnerActions { +public class LogicBlockActions { - public static LinkedHashMap> actions = new LinkedHashMap<>(); + public static LinkedHashMap> actions = new LinkedHashMap<>(); - public static Consumer PHASE_ABERRATOR = (tile) -> { + public static Consumer PHASE_ABERRATOR = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; @@ -79,7 +80,7 @@ public class DungeonSpawnerActions { } }; - public static Consumer COLLAPSE_ROOF_RAD_5 = (tile) -> { + public static Consumer COLLAPSE_ROOF_RAD_5 = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; @@ -115,7 +116,7 @@ public class DungeonSpawnerActions { }; - public static Consumer FODDER_WAVE = (tile) -> { + public static Consumer FODDER_WAVE = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; @@ -134,7 +135,7 @@ public class DungeonSpawnerActions { } }; - public static Consumer PUZZLE_TEST = (tile) -> { + public static Consumer PUZZLE_TEST = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; @@ -151,7 +152,7 @@ public class DungeonSpawnerActions { } }; - public static Consumer MISSILE_STRIKE = (tile) -> { + public static Consumer MISSILE_STRIKE = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; @@ -176,7 +177,7 @@ public class DungeonSpawnerActions { world.setBlock(x,y,z, ModBlocks.block_electrical_scrap); }; - public static Consumer RAD_CONTAINMENT_SYSTEM = (tile) -> { + public static Consumer RAD_CONTAINMENT_SYSTEM = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; @@ -254,9 +255,10 @@ public class DungeonSpawnerActions { //register new actions here static{ - actions.put("PHASE_ABERRATOR", PHASE_ABERRATOR); - actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); + //example actions actions.put("FODDER_WAVE", FODDER_WAVE); + actions.put("ABERRATOR", PHASE_ABERRATOR); + actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); actions.put("PUZZLE_TEST", PUZZLE_TEST); actions.put("MISSILE_STRIKE", MISSILE_STRIKE); actions.put("IRRADIATE_ENTITIES_AOE", RAD_CONTAINMENT_SYSTEM); diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java similarity index 79% rename from src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java rename to src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java index 1e0cc9d5a..5065a38fd 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerConditions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java @@ -3,9 +3,9 @@ package com.hbm.world.gen.util; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockPedestal; import com.hbm.blocks.generic.DungeonSpawner; +import com.hbm.blocks.generic.LogicBlock; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ModItems; -import com.hbm.tileentity.machine.storage.TileEntityCrateBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; @@ -14,19 +14,18 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import java.util.ArrayList; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.function.Function; -public class DungeonSpawnerConditions { +public class LogicBlockConditions { - public static LinkedHashMap> conditions = new LinkedHashMap<>(); + public static LinkedHashMap> conditions = new LinkedHashMap<>(); /**For use with interactions, for having them handle all conditional tasks*/ - public static Function EMPTY = (tile) -> false; + public static Function EMPTY = (tile) -> false; - public static Function ABERRATOR = (tile) -> { + public static Function ABERRATOR = (tile) -> { World world = tile.getWorldObj(); if(world.difficultySetting.ordinal() == 0) return false; int x = tile.xCoord; @@ -45,7 +44,7 @@ public class DungeonSpawnerConditions { return false; }; - public static Function PLAYER_CUBE_5 = (tile) -> { + public static Function PLAYER_CUBE_5 = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; @@ -53,7 +52,7 @@ public class DungeonSpawnerConditions { return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(5, 5, 5)).isEmpty(); }; - public static Function REDSTONE = (tile) -> { + public static Function REDSTONE = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; @@ -62,7 +61,7 @@ public class DungeonSpawnerConditions { return world.isBlockIndirectlyGettingPowered(x,y,z); }; - public static Function PUZZLE_TEST = (tile) -> { + public static Function PUZZLE_TEST = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; int y = tile.yCoord; @@ -88,6 +87,7 @@ public class DungeonSpawnerConditions { //register new conditions here static { + //example conditions conditions.put("EMPTY", EMPTY); conditions.put("ABERRATOR", ABERRATOR); conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); diff --git a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java similarity index 73% rename from src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java rename to src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java index 32c19b81d..decf997a6 100644 --- a/src/main/java/com/hbm/world/gen/util/DungeonSpawnerInteractions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java @@ -1,30 +1,22 @@ package com.hbm.world.gen.util; -import com.hbm.blocks.generic.DungeonSpawner.TileEntityDungeonSpawner; -import com.hbm.entity.missile.EntityMissileTier2; +import com.hbm.blocks.generic.LogicBlock; +import com.hbm.blocks.generic.LogicBlock.TileEntityLogicBlock; import com.hbm.items.ModItems; import com.hbm.potion.HbmPotion; -import com.hbm.tileentity.TileEntityDoorGeneric; -import com.hbm.util.Vec3NT; -import com.hbm.world.WorldUtil; -import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.function.Consumer; /**Interactions are called when the player right-clicks the block**/ -public class DungeonSpawnerInteractions { +public class LogicBlockInteractions { /**Consumer consists of world instance, tile entity instance, three ints for coordinates, one int for block side, and player instance, * in that order **/ @@ -32,23 +24,23 @@ public class DungeonSpawnerInteractions { public static Consumer TEST = (array) -> { World world = (World) array[0]; - TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) array[1]; + LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1]; int x = (int) array[2]; int y = (int) array[3]; int z = (int) array[4]; EntityPlayer player = (EntityPlayer) array[5]; int side = (int) array[6]; - if(spawner.phase > 1) return; + if(logic.phase > 1) return; if(player.getHeldItem() != null) player.getHeldItem().stackSize--; - spawner.phase++; + logic.phase++; }; public static Consumer RAD_CONTAINMENT_SYSTEM = (array) -> { - TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) array[1]; + LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1]; EntityPlayer player = (EntityPlayer) array[5]; if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.key){ @@ -58,8 +50,8 @@ public class DungeonSpawnerInteractions { EnumChatFormatting.RESET + " Radiation treatment administered")); player.addPotionEffect(new PotionEffect(HbmPotion.radaway.getId(), 3 * 60 * 20, 4)); player.addPotionEffect(new PotionEffect(HbmPotion.radx.getId(), 3 * 60 * 20, 4)); - spawner.phase = 2; - spawner.timer = 0; + logic.phase = 2; + logic.timer = 0; } }; diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index dcb6d68b3..c5fd461eb 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5279,7 +5279,7 @@ tile.ducrete_smooth_stairs.name=Ducrete Stairs tile.dummy_block.name=Dummy Block tile.dummy_port.name=Dummy Block (Electricity Port) tile.dungeon_chain.name=Metal Chain -tile.dungeon_spawner.name=Dungeon Action Block +tile.logic_block.name=Dungeon Action Block tile.dynamite.name=Dynamite tile.emp_bomb.name=EMP Device tile.factory_advanced_conductor.name=Advanced Factory Electricity Port @@ -6062,7 +6062,7 @@ tile.volcano_rad_core.name=Rad Volcano Core tile.wand_air.name=Structure Wand Block (Air) tile.wand_loot.name=Structure Wand Block (Lootable) tile.wand_jigsaw.name=Structure Wand Block (Jigsaw) -tile.wand_spawner.name=Structure Wand Block (Actions) +tile.wand_logic.name=Structure Wand Block (Logic) tile.waste_earth.name=Dead Grass tile.waste_leaves.name=Dead Leaves tile.waste_log.name=Charred Log diff --git a/src/main/resources/assets/hbm/textures/blocks/logic_block.png b/src/main/resources/assets/hbm/textures/blocks/logic_block.png new file mode 100644 index 0000000000000000000000000000000000000000..9e0d69e2f3a978d2bf12ddc5b5cbfb1842ba7510 GIT binary patch literal 910 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv=}#LT=BJwMkF1yemk zJqzi~S1W*OwxvdRrg?g5F>nAmtPE0&tPG4mmKP99L)jqLXfQH^#X;^dWMl%nE(*xb zY-a(BX93wDkO0IW{V*EMQU+$Aci0(NfGP}(j13qUKuiVcU|j$)X$p`H0!%=2n7}H7 zEG>X6s4hbT1CZ?M21ViEc@`Q#b+(=^jv*HQzCpSEw*o}=>F?dEtN)5U!RbuG4&KgV zE{oqaci#N3F7Vi4ruQ+EnJOGSncgqo?tMGYY15mUjB}@p=K-O2eqNr%b4LM-zRAlp zmx|QsO&5035$mq8>(82`k|<$x?Ad3_z5DjX>4{yuJ^QTXNoG&U`_ogS;hZ4FDZYqw~rU$lJ8xq{k3lIKhI1bj>8vh zk8jMCo@>20aBI}s+_h16Cl=M$%l|CenG-q9Q>ck;%?S=i9^RutFaQ0kGm!Z5yY_l% zYp$}TRDb*7hwJag`ets7ND;8&W%6j5yDci-jIEYqr@*Cc$@lGnpi8MeHR0Lseac53 zU%veIZSMBlXWNX}cFy%v*Jn|Smg$|z{54Y4G`!<*bMxfM!pS~+4DWpW^y$-=H#{5+ z+e8+8x8a{YO--1D8D1it-Rb>DsQqh|{(-fj4_hd;{s>7^O>l{;j1w;tN< z#rnm7!E32d+%tB?*D4zet`%5MnQ(sVtQFS_x9{F^q(96+N#5J1z z(8F|LpIJ)ta?j+OJ>MKDaD4sx^^;Gs%zj`!*N^dmPV(~b@bK=NXRcYXEWft1rcSmk zq4A~4#mrsLcYVk`9W+Nf*`mZ{hF>Pr#vmp^$-_CbA8lMB67;CuxJT2e>8cmUNAY#m VmCt%+=9_>Lm8Ywp%Q~loCIFqXPX_=1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner.png b/src/main/resources/assets/hbm/textures/blocks/wand_logic.png similarity index 100% rename from src/main/resources/assets/hbm/textures/blocks/wand_spawner.png rename to src/main/resources/assets/hbm/textures/blocks/wand_logic.png diff --git a/src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png b/src/main/resources/assets/hbm/textures/blocks/wand_logic_top.png similarity index 100% rename from src/main/resources/assets/hbm/textures/blocks/wand_spawner_top.png rename to src/main/resources/assets/hbm/textures/blocks/wand_logic_top.png From ef54c6e23b47447666d765bf147738d5c7b86ae4 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Wed, 9 Jul 2025 23:22:51 +0200 Subject: [PATCH 272/491] Added Forge MicroBlocks support --- .../microblocks/MicroBlocksCompatHandler.java | 77 +++++++++++++++++++ src/main/java/com/hbm/main/MainRegistry.java | 7 +- 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/hbm/handler/microblocks/MicroBlocksCompatHandler.java diff --git a/src/main/java/com/hbm/handler/microblocks/MicroBlocksCompatHandler.java b/src/main/java/com/hbm/handler/microblocks/MicroBlocksCompatHandler.java new file mode 100644 index 000000000..3abe4eb0d --- /dev/null +++ b/src/main/java/com/hbm/handler/microblocks/MicroBlocksCompatHandler.java @@ -0,0 +1,77 @@ +package com.hbm.handler.microblocks; + +import com.hbm.blocks.ModBlocks; +import cpw.mods.fml.common.event.FMLInterModComms; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +public class MicroBlocksCompatHandler { + public static void preInit() { + registerMicroBlockCompat(ModBlocks.basalt); + registerMicroBlockCompat(ModBlocks.basalt_smooth); + registerMicroBlockCompat(ModBlocks.basalt_brick); + registerMicroBlockCompat(ModBlocks.basalt_polished); + registerMicroBlockCompat(ModBlocks.basalt_tiles); + + registerMicroBlockCompat(ModBlocks.deco_titanium); + registerMicroBlockCompat(ModBlocks.deco_red_copper); + registerMicroBlockCompat(ModBlocks.deco_tungsten); + registerMicroBlockCompat(ModBlocks.deco_aluminium); + registerMicroBlockCompat(ModBlocks.deco_steel); + registerMicroBlockCompat(ModBlocks.deco_rusty_steel); + registerMicroBlockCompat(ModBlocks.deco_lead); + registerMicroBlockCompat(ModBlocks.deco_beryllium); + registerMicroBlockCompat(ModBlocks.deco_asbestos); + registerMicroBlockCompat(ModBlocks.deco_rbmk); + registerMicroBlockCompat(ModBlocks.deco_rbmk_smooth); + + registerMicroBlockCompat(ModBlocks.asphalt); + registerMicroBlockCompat(ModBlocks.asphalt_light); + + registerMicroBlockCompat(ModBlocks.reinforced_brick); + registerMicroBlockCompat(ModBlocks.reinforced_ducrete); + registerMicroBlockCompat(ModBlocks.reinforced_sand); + + registerMicroBlockCompat(ModBlocks.reinforced_stone); + registerMicroBlockCompat(ModBlocks.concrete_smooth); + registerMicroBlockCompat(ModBlocks.concrete_colored); + registerMicroBlockCompat(ModBlocks.concrete_colored_ext); + registerMicroBlockCompat(ModBlocks.concrete); + registerMicroBlockCompat(ModBlocks.concrete_asbestos); + registerMicroBlockCompat(ModBlocks.concrete_super); + registerMicroBlockCompat(ModBlocks.concrete_super_broken); + registerMicroBlockCompat(ModBlocks.ducrete_smooth); + registerMicroBlockCompat(ModBlocks.ducrete); + registerMicroBlockCompat(ModBlocks.concrete_pillar); + registerMicroBlockCompat(ModBlocks.brick_concrete); + registerMicroBlockCompat(ModBlocks.brick_concrete_mossy); + registerMicroBlockCompat(ModBlocks.brick_concrete_cracked); + registerMicroBlockCompat(ModBlocks.brick_concrete_broken); + registerMicroBlockCompat(ModBlocks.brick_concrete_marked); + registerMicroBlockCompat(ModBlocks.brick_ducrete); + registerMicroBlockCompat(ModBlocks.brick_obsidian); + registerMicroBlockCompat(ModBlocks.brick_light); + registerMicroBlockCompat(ModBlocks.brick_compound); + registerMicroBlockCompat(ModBlocks.brick_asbestos); + registerMicroBlockCompat(ModBlocks.brick_fire); + registerMicroBlockCompat(ModBlocks.lightstone); + + registerMicroBlockCompat(ModBlocks.cmb_brick); + registerMicroBlockCompat(ModBlocks.cmb_brick_reinforced); + registerMicroBlockCompat(ModBlocks.vinyl_tile); + + registerMicroBlockCompat(ModBlocks.tile_lab); + registerMicroBlockCompat(ModBlocks.tile_lab_cracked); + registerMicroBlockCompat(ModBlocks.tile_lab_broken); + } + + private static void registerMicroBlockCompat(Block block) { + for(int meta = 0; meta < 15; meta++) { + registerMicroBlockCompat(block, meta); + } + } + + private static void registerMicroBlockCompat(Block block, int meta) { + FMLInterModComms.sendMessage("ForgeMicroblock", "microMaterial", new ItemStack(block, 1, meta)); + } +} diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 4c8e7f954..87c33fced 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -18,6 +18,7 @@ import com.hbm.handler.imc.IMCBlastFurnace; import com.hbm.handler.imc.IMCCentrifuge; import com.hbm.handler.imc.IMCCrystallizer; import com.hbm.handler.imc.IMCHandler; +import com.hbm.handler.microblocks.MicroBlocksCompatHandler; import com.hbm.handler.neutron.NeutronHandler; import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.radiation.ChunkRadiationManager; @@ -661,6 +662,8 @@ public class MainRegistry { } } }); + + MicroBlocksCompatHandler.preInit(); } @EventHandler @@ -903,14 +906,14 @@ public class MainRegistry { Compat.handleRailcraftNonsense(); SuicideThreadDump.register(); CommandReloadClient.register(); - + // to make sure that foreign registered fluids are accounted for, // even when the reload listener is registered too late due to load order Fluids.reloadFluids(); //ExplosionTests.runTest(); } - + @EventHandler public void preInit(FMLPreInitializationEvent event) { if(logger == null) From 89100738f46bddce02101106497f5e24866113e2 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 10 Jul 2025 16:58:37 +0200 Subject: [PATCH 273/491] holy cungadero do i feel good --- changelog | 7 +- .../hbm/entity/mob/EntityHunterChopper.java | 16 +-- .../gui/GUIMachineAssemblyMachine.java | 8 +- .../inventory/recipes/AssemblerRecipes.java | 7 -- .../recipes/AssemblyMachineRecipes.java | 58 +++++++++- src/main/java/com/hbm/items/ModItems.java | 28 +---- .../com/hbm/items/special/ItemStarterKit.java | 108 ++++++++---------- .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 6 +- src/main/java/com/hbm/main/MainRegistry.java | 7 ++ .../java/com/hbm/main/ModEventHandler.java | 2 - .../tileentity/RenderAssemblyMachine.java | 10 +- .../machine/TileEntityMachineCentrifuge.java | 5 +- .../machine/TileEntityMachineGasCent.java | 47 ++++---- .../hbm/world/gen/util/LogicBlockActions.java | 1 - .../world/gen/util/LogicBlockConditions.java | 1 - .../gen/util/LogicBlockInteractions.java | 1 - 16 files changed, 167 insertions(+), 145 deletions(-) diff --git a/changelog b/changelog index d6b838a91..d0426ccf0 100644 --- a/changelog +++ b/changelog @@ -3,5 +3,10 @@ ## Changed * Removed levitation unit +* Many of NTM's regular building blocks now have forge microblock support +* RBMK crane models now conform to the dimensions of the room they're in -## Fixed \ No newline at end of file +## Fixed +* Fixed gas centrifuge sound persisting when broken or when unloaded +* Fixed all centrifuge sounds trying to play even when the player is far away, using up audio slots +* Fixed guns that don't have durability always displaying a condition of 0% \ No newline at end of file diff --git a/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java b/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java index 91b544fdc..647348883 100644 --- a/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java +++ b/src/main/java/com/hbm/entity/mob/EntityHunterChopper.java @@ -3,6 +3,7 @@ package com.hbm.entity.mob; import com.hbm.entity.projectile.EntityBullet; import com.hbm.entity.projectile.EntityChopperMine; import com.hbm.handler.threading.PacketThreading; +import com.hbm.interfaces.Spaghetti; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; @@ -26,6 +27,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; +@Spaghetti("this sucks complete donkey shit") public class EntityHunterChopper extends EntityFlying implements IMob, IBossDisplayData, IRadiationImmune { public int courseChangeCooldown; @@ -335,20 +337,6 @@ public class EntityHunterChopper extends EntityFlying implements IMob, IBossDisp * kill this mob. */ protected void dropItems() { - - if(rand.nextInt(2) == 0) - this.dropItem(ModItems.chopper_head, 1); - if(rand.nextInt(2) == 0) - this.dropItem(ModItems.chopper_torso, 1); - if(rand.nextInt(2) == 0) - this.dropItem(ModItems.chopper_wing, 1); - if(rand.nextInt(3) == 0) - this.dropItem(ModItems.chopper_tail, 1); - if(rand.nextInt(3) == 0) - this.dropItem(ModItems.chopper_gun, 1); - if(rand.nextInt(3) == 0) - this.dropItem(ModItems.chopper_blades, 1); - this.dropItem(ModItems.combine_scrap, rand.nextInt(8) + 1); this.dropItem(ModItems.plate_combine_steel, rand.nextInt(5) + 1); } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java index 8218c4057..1572ed3be 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java @@ -33,8 +33,8 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - assembler.inputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 115, 34, 16); - assembler.outputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 115, 34, 16); + assembler.inputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 99, 52, 16); + assembler.outputTank.renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 99, 52, 16); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, assembler.power, assembler.maxPower); @@ -115,7 +115,7 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { GL11.glDisable(GL11.GL_BLEND); } - assembler.inputTank.renderTank(guiLeft + 8, guiTop + 115, this.zLevel, 34, 16, 1); - assembler.outputTank.renderTank(guiLeft + 80, guiTop + 115, this.zLevel, 34, 16, 1); + assembler.inputTank.renderTank(guiLeft + 8, guiTop + 115, this.zLevel, 52, 16, 1); + assembler.outputTank.renderTank(guiLeft + 80, guiTop + 115, this.zLevel, 52, 16, 1); } } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 233f67933..f725cd17a 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -100,12 +100,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.warhead_volcano, 1), new AStack[] {new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.CAPACITOR_BOARD.ordinal()) }, 600); makeRecipe(new ComparableStack(ModItems.missile_stealth, 1), new AStack[] { new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(CU.plate(), 10), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32) },1200); makeRecipe(new ComparableStack(ModItems.thruster_nuclear, 1), new AStack[] {new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new ComparableStack(ModItems.pipes_steel) },600); - makeRecipe(new ComparableStack(ModItems.chopper_head, 1), new AStack[] {new ComparableStack(ModBlocks.reinforced_glass, 2), new OreDictStack(CMB.ingot(), 22), new OreDictStack(MAGTUNG.wireFine(), 4), },300); - makeRecipe(new ComparableStack(ModItems.chopper_gun, 1), new AStack[] {new OreDictStack(CMB.plate(), 4), new OreDictStack(CMB.ingot(), 2), new OreDictStack(W.wireFine(), 6), new ComparableStack(ModItems.coil_magnetized_tungsten, 1), new ComparableStack(ModItems.motor, 1), },150); - makeRecipe(new ComparableStack(ModItems.chopper_torso, 1), new AStack[] {new OreDictStack(CMB.ingot(), 26), new OreDictStack(MAGTUNG.wireFine(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.chopper_blades, 2), },350); - makeRecipe(new ComparableStack(ModItems.chopper_tail, 1), new AStack[] {new OreDictStack(CMB.plate(), 8), new OreDictStack(CMB.ingot(), 5), new OreDictStack(MAGTUNG.wireFine(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.chopper_blades, 2), },200); - makeRecipe(new ComparableStack(ModItems.chopper_wing, 1), new AStack[] {new OreDictStack(CMB.plate(), 6), new OreDictStack(CMB.ingot(), 3), new OreDictStack(MAGTUNG.wireFine(), 2), },150); - makeRecipe(new ComparableStack(ModItems.chopper_blades, 1), new AStack[] {new OreDictStack(CMB.plate(), 8), new OreDictStack(STEEL.plate(), 2), new OreDictStack(CMB.ingot(), 2), },200); makeRecipe(new ComparableStack(ModItems.tritium_deuterium_cake, 1), new AStack[] {new ComparableStack(ModItems.cell_deuterium, 6), new ComparableStack(ModItems.cell_tritium, 2), new OreDictStack(LI.ingot(), 4), },150); makeRecipe(new ComparableStack(ModItems.pellet_cluster, 1), new AStack[] {new OreDictStack(STEEL.plate(), 4), new ComparableStack(Blocks.tnt, 1), }, 50); makeRecipe(new ComparableStack(ModItems.pellet_buckshot, 1), new AStack[] {new OreDictStack(PB.nugget(), 6), }, 50); @@ -170,7 +164,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModBlocks.float_bomb, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireDense(), 8), },250); makeRecipe(new ComparableStack(ModBlocks.therm_endo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.powder_ice, 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4), },250); makeRecipe(new ComparableStack(ModBlocks.therm_exo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new OreDictStack(P_RED.dust(), 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4), },250); - makeRecipe(new ComparableStack(ModItems.spawn_chopper, 1), new AStack[] {new ComparableStack(ModItems.chopper_blades, 5), new ComparableStack(ModItems.chopper_gun, 1), new ComparableStack(ModItems.chopper_head, 1), new ComparableStack(ModItems.chopper_tail, 1), new ComparableStack(ModItems.chopper_torso, 1), new ComparableStack(ModItems.chopper_wing, 2), },300); makeRecipe(new ComparableStack(ModItems.grenade_fire, 1), new AStack[] {new ComparableStack(ModItems.grenade_frag, 1), new OreDictStack(P_RED.dust(), 1), new OreDictStack(CU.plate(), 2), },150); makeRecipe(new ComparableStack(ModItems.grenade_shrapnel, 1), new AStack[] {new ComparableStack(ModItems.grenade_frag, 1), new ComparableStack(ModItems.pellet_buckshot, 1), new OreDictStack(STEEL.plate(), 2), },150); makeRecipe(new ComparableStack(ModItems.grenade_cluster, 1), new AStack[] {new ComparableStack(ModItems.grenade_frag, 1), new ComparableStack(ModItems.pellet_cluster, 1), new OreDictStack(STEEL.plate(), 2), },200); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 1e741f6b7..5031cc364 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -13,6 +13,7 @@ import com.hbm.inventory.OreDictManager; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ModItems; @@ -62,9 +63,61 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plate(), 1), new OreDictStack(GOLD.wireFine(), 2), new OreDictStack(SI.billet(), 1))); this.register(new GenericRecipe("ass.rtgunit").setup(100, 100).outputItems(new ItemStack(ModItems.rtg_unit, 1)) .inputItems(new OreDictStack(PB.plateCast(), 2), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.thermo_element, 2))); + this.register(new GenericRecipe("ass.magnetron").setup(40, 100).outputItems(new ItemStack(ModItems.magnetron, 1)) + .inputItems(new OreDictStack(CU.plate(), 3), new OreDictStack(W.wireFine(), 4))); this.register(new GenericRecipe("ass.titaniumdrill").setup(100, 100).outputItems(new ItemStack(ModItems.drill_titanium, 1)) .inputItems(new OreDictStack(DURA.plateCast(), 1), new OreDictStack(TI.plate(), 8))); + this.register(new GenericRecipe("ass.entanglementkit").setup(200, 100).outputItems(new ItemStack(ModItems.entanglement_kit, 1)) + .inputItems(new OreDictStack(DURA.plateCast(), 4), new OreDictStack(CU.plate(), 24), new OreDictStack(GOLD.wireDense(), 16)) + .inputFluids(new FluidStack(Fluids.XENON, 8_000))); + this.register(new GenericRecipe("ass.protoreactor").setup(200, 100).outputItems(new ItemStack(ModItems.dysfunctional_reactor, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(PB.plateCast(), 4), new ComparableStack(ModItems.rod_quad_empty, 10), new OreDictStack(KEY_BROWN, 3))); + // weapon parts + this.register(new GenericRecipe("ass.clusterpellets").setup(50, 100).outputItems(new ItemStack(ModItems.pellet_cluster, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 1))); + this.register(new GenericRecipe("ass.buckshot").setup(50, 100).outputItems(new ItemStack(ModItems.pellet_buckshot, 1)) + .inputItems(new OreDictStack(PB.nugget(), 6))); + + // missile parts + this.register(new GenericRecipe("ass.missileassembly").setup(200, 100).outputItems(new ItemStack(ModItems.missile_assembly, 1)) + .inputItems(new OreDictStack(AL.shell(), 2), new OreDictStack(TI.shell(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.rocket_fuel, 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.warheadhe1").setup(100, 100).outputItems(new ItemStack(ModItems.warhead_generic_small, 1)) + .inputItems(new OreDictStack(TI.plate(), 4), new ComparableStack(ModItems.ball_dynamite, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CHIP))); + this.register(new GenericRecipe("ass.warheadhe2").setup(200, 100).outputItems(new ItemStack(ModItems.warhead_generic_medium, 1)) + .inputItems(new OreDictStack(TI.plate(), 8), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.warheadhe3").setup(400, 100).outputItems(new ItemStack(ModItems.warhead_generic_large, 1)) + .inputItems(new OreDictStack(TI.plate(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED))); + this.register(new GenericRecipe("ass.warheadinc1").setup(100, 100).outputItems(new ItemStack(ModItems.warhead_incendiary_small, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_small, 1), new OreDictStack(P_RED.dust(), 2))); + this.register(new GenericRecipe("ass.warheadinc2").setup(200, 100).outputItems(new ItemStack(ModItems.warhead_incendiary_medium, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_medium, 1), new OreDictStack(P_RED.dust(), 4))); + this.register(new GenericRecipe("ass.warheadinc3").setup(400, 100).outputItems(new ItemStack(ModItems.warhead_incendiary_large, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_large, 1), new OreDictStack(P_RED.dust(), 8))); + this.register(new GenericRecipe("ass.warheadcl1").setup(100, 100).outputItems(new ItemStack(ModItems.warhead_cluster_small, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_small, 1), new ComparableStack(ModItems.pellet_cluster, 2))); + this.register(new GenericRecipe("ass.warheadcl2").setup(200, 100).outputItems(new ItemStack(ModItems.warhead_cluster_medium, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_medium, 1), new ComparableStack(ModItems.pellet_cluster, 4))); + this.register(new GenericRecipe("ass.warheadcl3").setup(400, 100).outputItems(new ItemStack(ModItems.warhead_cluster_large, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_large, 1), new ComparableStack(ModItems.pellet_cluster, 8))); + this.register(new GenericRecipe("ass.warheadbb1").setup(100, 100).outputItems(new ItemStack(ModItems.warhead_buster_small, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_small, 1), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 2))); + this.register(new GenericRecipe("ass.warheadbb2").setup(200, 100).outputItems(new ItemStack(ModItems.warhead_buster_medium, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_medium, 1), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4))); + this.register(new GenericRecipe("ass.warheadbb3").setup(400, 100).outputItems(new ItemStack(ModItems.warhead_buster_large, 1)) + .inputItems(new ComparableStack(ModItems.warhead_generic_large, 1), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8))); + this.register(new GenericRecipe("ass.warheadnuke").setup(400, 100).outputItems(new ItemStack(ModItems.warhead_nuclear, 1)) + .inputItems(new OreDictStack(TI.plateCast(), 12), new OreDictStack(PB.plateCast(), 6), new OreDictStack(U235.billet(), 6), new ComparableStack(ModItems.cordite, 12), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER))); + this.register(new GenericRecipe("ass.warheadthermonuke").setup(600, 100).outputItems(new ItemStack(ModItems.warhead_mirv, 1)) + .inputItems(new OreDictStack(TI.plateCast(), 12), new OreDictStack(PB.plateCast(), 6), new OreDictStack(PU239.billet(), 8), new ComparableStack(ModItems.ball_tatb, 12), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER_ADVANCED)) + .inputFluids(new FluidStack(Fluids.DEUTERIUM, 4_000))); + this.register(new GenericRecipe("ass.warheadvolcano").setup(600, 100).outputItems(new ItemStack(ModItems.warhead_volcano, 1)) + .inputItems(new OreDictStack(TI.plateCast(), 12), new OreDictStack(STEEL.plateCast(), 6), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.CAPACITOR_BOARD.ordinal()))); + this.register(new GenericRecipe("ass.stealthmissile").setup(1_200, 100).outputItems(new ItemStack(ModItems.missile_stealth, 1)) + .inputItems(new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32))); + this.register(new GenericRecipe("ass.thrusternerva").setup(600, 100).outputItems(new ItemStack(ModItems.thruster_nuclear, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new ComparableStack(ModItems.pipes_steel))); + // bunker blocks this.register(new GenericRecipe("ass.cmbtile").setup(100, 100).outputItems(new ItemStack(ModBlocks.cmb_brick, 8)) .inputItems(new OreDictStack(ANY_CONCRETE.any(), 4), new OreDictStack(CMB.plate(), 4))); @@ -72,7 +125,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(MAGTUNG.ingot(), 8), new ComparableStack(ModBlocks.ducrete, 4), new ComparableStack(ModBlocks.cmb_brick, 8))); this.register(new GenericRecipe("ass.sealframe").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_frame, 1)) .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(MINGRADE.wireDense(), 1))); - this.register(new GenericRecipe("ass.sealcontroller").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_frame, 1)) + this.register(new GenericRecipe("ass.sealcontroller").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_controller, 1)) .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(MINGRADE.wireDense(), 4))); // machines @@ -81,6 +134,9 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.gascent").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_gascent, 1)) .inputItems(new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(DESH.ingot(), 2), new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()))); + // rancid shit mob spawners + this.register(new GenericRecipe("ass.chopper").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_chopper, 8)) + .inputItems(new OreDictStack(CMB.plateCast(), 24), new OreDictStack(STEEL.plate(), 32), new OreDictStack(MAGTUNG.wireFine(), 48), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER_ADVANCED))); } public static HashMap getRecipes() { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index b66b8f403..d3a6cef3c 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -642,13 +642,7 @@ public class ModItems { public static Item seg_10; public static Item seg_15; public static Item seg_20; - - public static Item chopper_head; - public static Item chopper_gun; - public static Item chopper_torso; - public static Item chopper_tail; - public static Item chopper_wing; - public static Item chopper_blades; + public static Item combine_scrap; public static Item shimmer_head; @@ -746,15 +740,12 @@ public class ModItems { public static Item pellet_rtg_gold; public static Item pellet_rtg_lead; - public static Item tritium_deuterium_cake; + @Deprecated public static Item tritium_deuterium_cake; public static Item piston_selenium; public static Item piston_set; public static Item drillbit; - //public static Item crystal_energy; - //public static Item pellet_coolant; - public static Item rune_blank; public static Item rune_isa; public static Item rune_dagaz; @@ -2191,7 +2182,6 @@ public class ModItems { public static Item polaroid; public static Item glitch; - public static Item letter; public static Item book_secret; public static Item book_of_; public static Item page_of_; @@ -2791,12 +2781,6 @@ public class ModItems { seg_15 = new Item().setUnlocalizedName("seg_15").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_15"); seg_20 = new Item().setUnlocalizedName("seg_20").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_20"); - chopper_head = new Item().setUnlocalizedName("chopper_head").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_head"); - chopper_gun = new Item().setUnlocalizedName("chopper_gun").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_gun"); - chopper_torso = new Item().setUnlocalizedName("chopper_torso").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_torso"); - chopper_tail = new Item().setUnlocalizedName("chopper_tail").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_tail"); - chopper_wing = new Item().setUnlocalizedName("chopper_wing").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_wing"); - chopper_blades = new Item().setUnlocalizedName("chopper_blades").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chopper_blades"); combine_scrap = new Item().setUnlocalizedName("combine_scrap").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":combine_scrap"); shimmer_head = new Item().setUnlocalizedName("shimmer_head").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":shimmer_head_original"); @@ -4933,7 +4917,6 @@ public class ModItems { polaroid = new ItemPolaroid().setUnlocalizedName("polaroid").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":polaroid_" + MainRegistry.polaroidID); glitch = new ItemGlitch().setUnlocalizedName("glitch").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":glitch_" + MainRegistry.polaroidID); - letter = new ItemStarterKit().setUnlocalizedName("letter").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":letter"); book_secret = new ItemCustomLore().setUnlocalizedName("book_secret").setCreativeTab(MainRegistry.polaroidID == 11 ? MainRegistry.consumableTab : null).setTextureName(RefStrings.MODID + ":book_secret"); book_of_ = new ItemBook().setUnlocalizedName("book_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_of_"); page_of_ = new ItemEnumMulti(ItemEnums.EnumPages.class, true, false).setUnlocalizedName("page_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":page_of_"); @@ -5593,12 +5576,6 @@ public class ModItems { GameRegistry.registerItem(seg_20, seg_20.getUnlocalizedName()); //Chopper parts - GameRegistry.registerItem(chopper_head, chopper_head.getUnlocalizedName()); - GameRegistry.registerItem(chopper_gun, chopper_gun.getUnlocalizedName()); - GameRegistry.registerItem(chopper_torso, chopper_torso.getUnlocalizedName()); - GameRegistry.registerItem(chopper_tail, chopper_tail.getUnlocalizedName()); - GameRegistry.registerItem(chopper_wing, chopper_wing.getUnlocalizedName()); - GameRegistry.registerItem(chopper_blades, chopper_blades.getUnlocalizedName()); GameRegistry.registerItem(combine_scrap, combine_scrap.getUnlocalizedName()); //Hammer Parts @@ -7116,7 +7093,6 @@ public class ModItems { GameRegistry.registerItem(euphemium_kit, euphemium_kit.getUnlocalizedName()); GameRegistry.registerItem(legacy_toolbox, legacy_toolbox.getUnlocalizedName()); GameRegistry.registerItem(toolbox, toolbox.getUnlocalizedName()); - GameRegistry.registerItem(letter, letter.getUnlocalizedName()); //Misile Loot Boxes GameRegistry.registerItem(loot_10, loot_10.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemStarterKit.java b/src/main/java/com/hbm/items/special/ItemStarterKit.java index 4e70ed205..ba8bf97b4 100644 --- a/src/main/java/com/hbm/items/special/ItemStarterKit.java +++ b/src/main/java/com/hbm/items/special/ItemStarterKit.java @@ -10,7 +10,6 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBattery; import com.hbm.items.machine.ItemBreedingRod.BreedingRodType; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; -import com.hbm.util.ShadyUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -22,10 +21,9 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ChatComponentText; import net.minecraft.world.World; -@Deprecated //not deprecated per se but please stop using it wherever possible +@Deprecated @Spaghetti("i do not care how much 'optimization' you want to throw at this dumpster fire but there's no saving grace here") public class ItemStarterKit extends Item { @@ -75,8 +73,8 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_difurnace_off, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_gascent, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_reactor_breeding, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_assembler, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_chemplant, 1)); + player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_assembly_machine, 1)); + player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_chemical_plant, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.reactor_research, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_turbine, 2)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.radaway, 8)); @@ -95,7 +93,6 @@ public class ItemStarterKit extends Item { if(this == ModItems.nuke_advanced_kit) { - player.inventory.addItemStackToInventory(new ItemStack(ModItems.powder_yellowcake, 64)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.powder_plutonium, 64)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.ingot_steel, 64)); @@ -113,8 +110,8 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_turbine, 4)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_radgen, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_rtg_grey, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_assembler, 3)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_chemplant, 2)); + player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_assembly_machine, 3)); + player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_chemical_plant, 2)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_fluidtank, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.pellet_rtg, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.pellet_rtg, 1)); @@ -128,7 +125,6 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModItems.radaway_strong, 4)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.radx, 4)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.pill_iodine, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.tritium_deuterium_cake, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.geiger_counter, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.survey_scanner, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.gas_mask_m65, 1)); @@ -440,29 +436,17 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(Item.getItemFromBlock(ModBlocks.statue_elb_f), 1)); } - if(this == ModItems.hazmat_kit) - { + if(this == ModItems.hazmat_kit) { giveHaz(world, player, 0); } - - if(this == ModItems.hazmat_red_kit) - { + + if(this == ModItems.hazmat_red_kit) { giveHaz(world, player, 1); } - - if(this == ModItems.hazmat_grey_kit) - { + + if(this == ModItems.hazmat_grey_kit) { giveHaz(world, player, 2); } - - if(this == ModItems.letter && world.isRemote) - { - if(player.getUniqueID().toString().equals(ShadyUtil.a20)) { - player.addChatMessage(new ChatComponentText("Error: null reference @ com.hbm.items.ItemStarterKit.class, please report this to the modder!")); - } else { - player.addChatMessage(new ChatComponentText("You rip the letter in half; nothing happens.")); - } - } world.playSoundAtEntity(player, "hbm:item.unpack", 1.0F, 1.0F); stack.stackSize--; @@ -470,42 +454,42 @@ public class ItemStarterKit extends Item { } - @SideOnly(Side.CLIENT) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { - if(this == ModItems.nuke_starter_kit || - this == ModItems.nuke_advanced_kit || - this == ModItems.nuke_commercially_kit || - this == ModItems.nuke_electric_kit || - this == ModItems.gadget_kit || - this == ModItems.boy_kit || - this == ModItems.man_kit || - this == ModItems.mike_kit || - this == ModItems.tsar_kit || - this == ModItems.prototype_kit || - this == ModItems.fleija_kit || - this == ModItems.solinium_kit || - this == ModItems.t45_kit || - this == ModItems.grenade_kit || - this == ModItems.missile_kit || - this == ModItems.multi_kit) { - list.add("Please empty inventory before opening!"); - } - if(this == ModItems.nuke_starter_kit || - this == ModItems.nuke_advanced_kit || - this == ModItems.nuke_commercially_kit || - this == ModItems.gadget_kit || - this == ModItems.boy_kit || - this == ModItems.man_kit || - this == ModItems.mike_kit || - this == ModItems.tsar_kit || - this == ModItems.prototype_kit || - this == ModItems.fleija_kit || - this == ModItems.solinium_kit || - this == ModItems.hazmat_kit) { - list.add("Armor will be displaced by hazmat suit."); - } - } + if(this == ModItems.nuke_starter_kit || + this == ModItems.nuke_advanced_kit || + this == ModItems.nuke_commercially_kit || + this == ModItems.nuke_electric_kit || + this == ModItems.gadget_kit || + this == ModItems.boy_kit || + this == ModItems.man_kit || + this == ModItems.mike_kit || + this == ModItems.tsar_kit || + this == ModItems.prototype_kit || + this == ModItems.fleija_kit || + this == ModItems.solinium_kit || + this == ModItems.t45_kit || + this == ModItems.grenade_kit || + this == ModItems.missile_kit || + this == ModItems.multi_kit) { + list.add("Please empty inventory before opening!"); + } + if(this == ModItems.nuke_starter_kit || + this == ModItems.nuke_advanced_kit || + this == ModItems.nuke_commercially_kit || + this == ModItems.gadget_kit || + this == ModItems.boy_kit || + this == ModItems.man_kit || + this == ModItems.mike_kit || + this == ModItems.tsar_kit || + this == ModItems.prototype_kit || + this == ModItems.fleija_kit || + this == ModItems.solinium_kit || + this == ModItems.hazmat_kit) { + list.add("Armor will be displaced by hazmat suit."); + } + } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index 3539a712b..66cb14695 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -184,8 +184,10 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I } float maxDura = config.getDurability(stack); - int dura = MathHelper.clamp_int((int)((maxDura - this.getWear(stack, i)) * 100 / maxDura), 0, 100); - list.add("Condition: " + dura + "%"); + if(maxDura > 0) { + int dura = MathHelper.clamp_int((int)((maxDura - this.getWear(stack, i)) * 100 / maxDura), 0, 100); + list.add("Condition: " + dura + "%"); + } for(ItemStack upgrade : WeaponModManager.getUpgradeItems(stack, i)) { list.add(EnumChatFormatting.YELLOW + upgrade.getDisplayName()); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 4bd2975ed..5b9d63062 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1707,6 +1707,13 @@ public class MainRegistry { ignoreMappings.add("hbm:tile.machine_transformer_20"); ignoreMappings.add("hbm:tile.machine_transformer_dnt_20"); ignoreMappings.add("hbm:item.levitation_unit"); + ignoreMappings.add("hbm:item.letter"); + ignoreMappings.add("hbm:item.chopper_head"); + ignoreMappings.add("hbm:item.chopper_gun"); + ignoreMappings.add("hbm:item.chopper_torso"); + ignoreMappings.add("hbm:item.chopper_tail"); + ignoreMappings.add("hbm:item.chopper_wing"); + ignoreMappings.add("hbm:item.chopper_blades"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 655656174..1f0be79bf 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -10,7 +10,6 @@ import com.hbm.config.MobConfig; import com.hbm.config.RadiationConfig; import com.hbm.config.ServerConfig; import com.hbm.entity.mob.*; -import com.hbm.entity.mob.ai.EntityAIFireGun; import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.entity.projectile.EntityBurningFOEQ; import com.hbm.entity.train.EntityRailCarBase; @@ -76,7 +75,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAITasks; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.monster.*; diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java index 6bb9a7f21..1111a998a 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java @@ -111,8 +111,16 @@ public class RenderAssemblyMachine extends TileEntitySpecialRenderer implements EntityPlayer player = Minecraft.getMinecraft().thePlayer; ItemStack stack = recipe.getIcon(); + stack.stackSize = 1; - if(!(stack.getItemSpriteNumber() == 0 && stack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(stack.getItem()).getRenderType()))) { + if(stack.getItemSpriteNumber() == 0 && stack.getItem() instanceof ItemBlock) { + if(RenderBlocks.renderItemIn3d(Block.getBlockFromItem(stack.getItem()).getRenderType())) { + GL11.glTranslated(0, -0.0625, 0); + } else { + GL11.glTranslated(0, -0.125, 0); + GL11.glScaled(0.5, 0.5, 0.5); + } + } else { GL11.glRotated(-90, 1, 0, 0); GL11.glTranslated(0, -0.25, 0); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java index 07c5ea852..c5b5e9da6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java @@ -236,7 +236,7 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement audioDuration = MathHelper.clamp_int(audioDuration, 0, 60); - if(audioDuration > 10) { + if(audioDuration > 10 && MainRegistry.proxy.me().getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 25) { if(audio == null) { audio = createAudioLoop(); @@ -247,6 +247,7 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement audio.updateVolume(getVolume(1F)); audio.updatePitch((audioDuration - 10) / 100F + 0.5F); + audio.keepAlive(); } else { @@ -276,7 +277,7 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement @Override public AudioWrapper createAudioLoop() { - return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F); + return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F, 20); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java index 62e76ae0e..7a63ee4d7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java @@ -151,7 +151,7 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I if(te instanceof TileEntityMachineGasCent) { TileEntityMachineGasCent cent = (TileEntityMachineGasCent) te; - if(cent.tank.getFill() == 0 && cent.tank.getTankType() == tank.getTankType()) { + if(cent.tank.getTankType() == tank.getTankType()) { if(cent.inputTank.getTankType() != outputTank.getTankType() && outputTank.getTankType() != PseudoFluidType.NONE) { cent.inputTank.setTankType(outputTank.getTankType()); cent.outputTank.setTankType(outputTank.getTankType().getOutputType()); @@ -237,7 +237,7 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I audioDuration = MathHelper.clamp_int(audioDuration, 0, 60); - if(audioDuration > 10) { + if(audioDuration > 10 && MainRegistry.proxy.me().getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 25) { if(audio == null) { audio = createAudioLoop(); @@ -248,6 +248,7 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I audio.updateVolume(getVolume(1F)); audio.updatePitch((audioDuration - 10) / 100F + 0.5F); + audio.keepAlive(); } else { @@ -261,7 +262,27 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I @Override public AudioWrapper createAudioLoop() { - return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F); + return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F, 20); + } + + @Override + public void onChunkUnload() { + + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + + @Override + public void invalidate() { + + super.invalidate(); + + if(audio != null) { + audio.stopSound(); + audio = null; + } } @Override @@ -314,21 +335,9 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I }; } - @Override - public void setPower(long i) { - power = i; - } - - @Override - public long getPower() { - return power; - - } - - @Override - public long getMaxPower() { - return maxPower; - } + @Override public void setPower(long i) { power = i; } + @Override public long getPower() { return power; } + @Override public long getMaxPower() { return maxPower; } public int getProcessingSpeed() { if(slots[6] != null && slots[6].getItem() == ModItems.upgrade_gc_speed) { @@ -352,7 +361,6 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I tank.setTankType(newType); } } - } } @@ -374,7 +382,6 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I if(bb == null) { bb = AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 5, zCoord + 1); } - return bb; } diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java index 2b3682c7c..af2c41356 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -3,7 +3,6 @@ package com.hbm.world.gen.util; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockSkeletonHolder; -import com.hbm.blocks.generic.DungeonSpawner; import com.hbm.blocks.generic.LogicBlock; import com.hbm.entity.item.EntityFallingBlockNT; import com.hbm.entity.missile.EntityMissileTier2; diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java index 5065a38fd..b51b96c23 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java @@ -2,7 +2,6 @@ package com.hbm.world.gen.util; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockPedestal; -import com.hbm.blocks.generic.DungeonSpawner; import com.hbm.blocks.generic.LogicBlock; import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.items.ModItems; diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java index decf997a6..bf3bc47eb 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java @@ -1,7 +1,6 @@ package com.hbm.world.gen.util; import com.hbm.blocks.generic.LogicBlock; -import com.hbm.blocks.generic.LogicBlock.TileEntityLogicBlock; import com.hbm.items.ModItems; import com.hbm.potion.HbmPotion; import net.minecraft.entity.player.EntityPlayer; From 16fcac0a3c7dac86a86ebe98adfc9e8086cad566 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 11 Jul 2025 14:53:50 +0300 Subject: [PATCH 274/491] Support collision-only/visual-only boxes on doors --- .../hbm/blocks/generic/BlockDoorGeneric.java | 12 +++--- .../java/com/hbm/tileentity/DoorDecl.java | 42 +++++++++---------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java b/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java index 365187ff4..3dfe4814a 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDoorGeneric.java @@ -94,7 +94,7 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { @Override public void addCollisionBoxesToList(World worldIn, int x, int y, int z, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn) { - AxisAlignedBB box = getBoundingBox(worldIn, x, y ,z); + AxisAlignedBB box = getBoundingBox(worldIn, x, y, z, true); box = AxisAlignedBB.getBoundingBox( Math.min(box.minX, box.maxX), Math.min(box.minY, box.maxY), Math.min(box.minZ, box.maxZ), Math.max(box.minX, box.maxX), Math.max(box.minY, box.maxY), Math.max(box.minZ, box.maxZ)); @@ -113,7 +113,7 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { - AxisAlignedBB aabb = this.getBoundingBox(world, x, y, z); + AxisAlignedBB aabb = this.getBoundingBox(world, x, y, z, true); if(aabb.minX == aabb.maxX && aabb.minY == aabb.maxY && aabb.minZ == aabb.maxZ) return null; return aabb; } @@ -121,7 +121,7 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { // Enables clicking through the open door @Override public MovingObjectPosition collisionRayTrace(World world, int x, int y, int z, Vec3 startVec, Vec3 endVec) { - AxisAlignedBB box = getBoundingBox(world, x, y ,z); + AxisAlignedBB box = getBoundingBox(world, x, y, z, false); box = AxisAlignedBB.getBoundingBox( Math.min(box.minX, box.maxX), Math.min(box.minY, box.maxY), Math.min(box.minZ, box.maxZ), Math.max(box.minX, box.maxX), Math.max(box.minY, box.maxY), Math.max(box.minZ, box.maxZ) @@ -158,11 +158,11 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { @Override public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { - return getBoundingBox(world, x, y, z); + return getBoundingBox(world, x, y, z, false); //return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1); } - public AxisAlignedBB getBoundingBox(World world, int x, int y, int z) { + public AxisAlignedBB getBoundingBox(World world, int x, int y, int z, boolean forCollision) { int meta = world.getBlockMetadata(x, y, z); TileEntity te = world.getTileEntity(x, y, z); int[] core = this.findCore(world, x, y, z); @@ -173,7 +173,7 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb { TileEntity te2 = world.getTileEntity(core[0], core[1], core[2]); ForgeDirection dir = ForgeDirection.getOrientation(te2.getBlockMetadata() - BlockDummyable.offset); BlockPos pos = new BlockPos(x - core[0], y - core[1], z - core[2]).rotate(Rotation.getBlockRotation(dir).add(Rotation.COUNTERCLOCKWISE_90)); - AxisAlignedBB box = type.getBlockBound(pos.getX(), pos.getY(), pos.getZ(), open); + AxisAlignedBB box = type.getBlockBound(pos.getX(), pos.getY(), pos.getZ(), open, forCollision); switch(te2.getBlockMetadata() - offset){ case 2: return AxisAlignedBB.getBoundingBox(x + 1 - box.minX, y + box.minY, z + 1 - box.minZ, x + 1 - box.maxX, y + box.maxY, z + 1 - box.maxZ); diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index ee1c96bc0..9c9887c13 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -67,8 +67,8 @@ public abstract class DoorDecl { } @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { - return super.getBlockBound(x, y, z, open); + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { + return super.getBlockBound(x, y, z, open, forCollision); } @Override @@ -156,7 +156,7 @@ public abstract class DoorDecl { } @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); if(z == 1) { @@ -168,7 +168,7 @@ public abstract class DoorDecl { } else if(y == 0) { return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.1, 1); } else { - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); } } @@ -240,7 +240,7 @@ public abstract class DoorDecl { } @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(open) { if(y == 3) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); @@ -248,7 +248,7 @@ public abstract class DoorDecl { return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.08, 1); } } - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); } @Override @@ -327,7 +327,7 @@ public abstract class DoorDecl { }; @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(open) { if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 0, 1); return AxisAlignedBB.getBoundingBox(0, 0.9375, 1 - 0.25, 1, 1, 1); @@ -429,7 +429,7 @@ public abstract class DoorDecl { } @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) { if(y > 0) { return AxisAlignedBB.getBoundingBox(0, 0, 0.375, 1, 1, 0.625); @@ -441,7 +441,7 @@ public abstract class DoorDecl { } else if(y == 4) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0.15, 1, 1, 0.85); } else { - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); } } @@ -504,9 +504,9 @@ public abstract class DoorDecl { }; @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); if(z == 1) { return AxisAlignedBB.getBoundingBox(0.4, 0, 0, 1, 1, 1); } else if(z == -2) { @@ -516,7 +516,7 @@ public abstract class DoorDecl { } else if(y == 0) { return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.0625, 1); } - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); }; @Override @@ -595,7 +595,7 @@ public abstract class DoorDecl { }; @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(open) { if(z == 0) { return AxisAlignedBB.getBoundingBox(1 - 0.125, 0, 1 - 0.1875, 1, 1, 1); @@ -691,14 +691,14 @@ public abstract class DoorDecl { } @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, 1, 1); if(y > 1) return AxisAlignedBB.getBoundingBox(0, 0.5, 0.5, 1, 1, 1); else if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, 0.1, 1); - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); }; @Override @@ -814,7 +814,7 @@ public abstract class DoorDecl { }; @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) { return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, 1, 1); } else if(y > 1) { @@ -822,7 +822,7 @@ public abstract class DoorDecl { } else if(y == 0) { return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, 0.15, 1); } - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); }; @Override @@ -1018,15 +1018,15 @@ public abstract class DoorDecl { }; @Override - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { if(!open) - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); if(z == 3) { return AxisAlignedBB.getBoundingBox(0.4, 0, 0, 1, 1, 1); } else if(z == -3) { return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.6, 1, 1); } - return super.getBlockBound(x, y, z, open); + return super.getBlockBound(x, y, z, open, forCollision); }; @Override @@ -1159,7 +1159,7 @@ public abstract class DoorDecl { public void doOffsetTransform() { } - public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { return open ? AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0) : AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); } From 3c2d49419fe1392a3e1cd0522bb660ff2c02ec7d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 11 Jul 2025 15:07:42 +0300 Subject: [PATCH 275/491] Use separate collision and visual boxes on doors Also improve the user experience with smaller doors, by making the visual hitbox cover the entire door even when open. (In repsonse to Mellow's critique) --- .../java/com/hbm/tileentity/DoorDecl.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index 9c9887c13..d04b030d3 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -166,7 +166,7 @@ public abstract class DoorDecl { } else if(y > 1) { return AxisAlignedBB.getBoundingBox(0, 0.75, 0, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.1, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.1, 1); } else { return super.getBlockBound(x, y, z, open, forCollision); } @@ -245,7 +245,7 @@ public abstract class DoorDecl { if(y == 3) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.08, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.08, 1); } } return super.getBlockBound(x, y, z, open, forCollision); @@ -328,9 +328,8 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { - if(open) { - if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 0, 1); - return AxisAlignedBB.getBoundingBox(0, 0.9375, 1 - 0.25, 1, 1, 1); + if(forCollision && open) { + return AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0); } else { return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 1, 1); } @@ -437,7 +436,7 @@ public abstract class DoorDecl { return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); } if(y == 1) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.0625, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); } else if(y == 4) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0.15, 1, 1, 0.85); } else { @@ -514,7 +513,7 @@ public abstract class DoorDecl { } else if(y == 3) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.0625, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); } return super.getBlockBound(x, y, z, open, forCollision); }; @@ -596,7 +595,7 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { - if(open) { + if(forCollision && open) { if(z == 0) { return AxisAlignedBB.getBoundingBox(1 - 0.125, 0, 1 - 0.1875, 1, 1, 1); } else { @@ -697,7 +696,7 @@ public abstract class DoorDecl { if(y > 1) return AxisAlignedBB.getBoundingBox(0, 0.5, 0.5, 1, 1, 1); else if(y == 0) - return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, 0.1, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, forCollision ? 0 : 0.1, 1); return super.getBlockBound(x, y, z, open, forCollision); }; @@ -820,7 +819,7 @@ public abstract class DoorDecl { } else if(y > 1) { return AxisAlignedBB.getBoundingBox(0, 0.85, 0.75, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, 0.15, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, forCollision ? 0 : 0.15, 1); } return super.getBlockBound(x, y, z, open, forCollision); }; @@ -1025,6 +1024,8 @@ public abstract class DoorDecl { return AxisAlignedBB.getBoundingBox(0.4, 0, 0, 1, 1, 1); } else if(z == -3) { return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.6, 1, 1); + } else if(y == 0) { + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); } return super.getBlockBound(x, y, z, open, forCollision); }; From f2f3e04bb0419b0423d141acac58e9a853bdf97a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 11 Jul 2025 15:19:13 +0300 Subject: [PATCH 276/491] Fix gap in secure access door --- src/main/java/com/hbm/tileentity/DoorDecl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index d04b030d3..e7cf6981f 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -439,7 +439,9 @@ public abstract class DoorDecl { return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); } else if(y == 4) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0.15, 1, 1, 0.85); - } else { + } else if(y == 0) { + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); + }else { return super.getBlockBound(x, y, z, open, forCollision); } } From 10d8551ce36dbb6d786a1482e28b39c3f7ab011d Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 11 Jul 2025 14:56:46 +0200 Subject: [PATCH 277/491] all zinced up --- changelog | 7 ++ .../com/hbm/inventory/UpgradeManagerNT.java | 2 +- .../recipes/AssemblyMachineRecipes.java | 78 ++++++++++++++----- src/main/java/com/hbm/items/ModItems.java | 2 +- .../TileEntityMachineCrystallizer.java | 34 ++++---- .../com/hbm/util/DamageResistanceHandler.java | 46 ++++++----- src/main/resources/assets/hbm/lang/de_DE.lang | 2 +- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- 8 files changed, 114 insertions(+), 59 deletions(-) diff --git a/changelog b/changelog index d0426ccf0..914e54d80 100644 --- a/changelog +++ b/changelog @@ -1,10 +1,17 @@ ## Added * New assembler + * Features a brand new animated model, GUI and the new recipe selection system + * Many recipes have been reworked, with the microcrafting complexity reduced + * The redcoil didn't get a recipe. It's gonna die soon. ## Changed * Removed levitation unit * Many of NTM's regular building blocks now have forge microblock support * RBMK crane models now conform to the dimensions of the room they're in +* Projectile resistance for armor has been renamed to "physical" and now also extends to all direct forms of attack by other entities that don't fall into any other categories (mostly melee attacks) + * This should fix the issue where most armors are quite weak against swords +* Electric attacks (i.e. tesla cannon) are now in the "energy damage" category + * This means that armors that have energy resistance actually properly work against the tesla cannon ## Fixed * Fixed gas centrifuge sound persisting when broken or when unloaded diff --git a/src/main/java/com/hbm/inventory/UpgradeManagerNT.java b/src/main/java/com/hbm/inventory/UpgradeManagerNT.java index 3ae55ae72..fae7ac9ef 100644 --- a/src/main/java/com/hbm/inventory/UpgradeManagerNT.java +++ b/src/main/java/com/hbm/inventory/UpgradeManagerNT.java @@ -31,7 +31,7 @@ public class UpgradeManagerNT { public UpgradeManagerNT(TileEntity te) { this.owner = te; } @Deprecated public UpgradeManagerNT() { } - public void checkSlots(ItemStack[] slots, int start, int end) { checkSlots(owner, slots, start, end); } + public void checkSlots(ItemStack[] slots, int start, int end) { checkSlotsInternal(owner, slots, start, end); } @Deprecated public void checkSlots(TileEntity te, ItemStack[] slots, int start, int end) { checkSlotsInternal(te, slots, start, end); } private void checkSlotsInternal(TileEntity te, ItemStack[] slots, int start, int end) { diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 5031cc364..fa7202ec5 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -73,6 +73,64 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.protoreactor").setup(200, 100).outputItems(new ItemStack(ModItems.dysfunctional_reactor, 1)) .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(PB.plateCast(), 4), new ComparableStack(ModItems.rod_quad_empty, 10), new OreDictStack(KEY_BROWN, 3))); + // powders + this.register(new GenericRecipe("ass.partlith").setup(40, 100).outputItems(new ItemStack(ModItems.part_lithium, 8)) + .inputItems(new OreDictStack(LI.dust(), 1))); + this.register(new GenericRecipe("ass.partberyl").setup(40, 100).outputItems(new ItemStack(ModItems.part_beryllium, 8)) + .inputItems(new OreDictStack(BE.dust(), 1))); + this.register(new GenericRecipe("ass.partcoal").setup(40, 100).outputItems(new ItemStack(ModItems.part_carbon, 8)) + .inputItems(new OreDictStack(COAL.dust(), 1))); + this.register(new GenericRecipe("ass.partcop").setup(40, 100).outputItems(new ItemStack(ModItems.part_copper, 8)) + .inputItems(new OreDictStack(CU.dust(), 1))); + this.register(new GenericRecipe("ass.partplut").setup(40, 100).outputItems(new ItemStack(ModItems.part_plutonium, 8)) + .inputItems(new OreDictStack(PU.dust(), 1))); + + // bunker blocks + this.register(new GenericRecipe("ass.cmbtile").setup(100, 100).outputItems(new ItemStack(ModBlocks.cmb_brick, 8)) + .inputItems(new OreDictStack(ANY_CONCRETE.any(), 4), new OreDictStack(CMB.plate(), 4))); + this.register(new GenericRecipe("ass.cmbbrick").setup(100, 100).outputItems(new ItemStack(ModBlocks.cmb_brick_reinforced, 8)) + .inputItems(new OreDictStack(MAGTUNG.ingot(), 8), new ComparableStack(ModBlocks.ducrete, 4), new ComparableStack(ModBlocks.cmb_brick, 8))); + this.register(new GenericRecipe("ass.sealframe").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_frame, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(MINGRADE.wireDense(), 1))); + this.register(new GenericRecipe("ass.sealcontroller").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_controller, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(MINGRADE.wireDense(), 4))); + + // machines + this.register(new GenericRecipe("ass.shredder").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_shredder, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2))); + this.register(new GenericRecipe("ass.centrifuge").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_centrifuge, 1)) + .inputItems(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.gascent").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_gascent, 1)) + .inputItems(new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(DESH.ingot(), 2), new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()))); + this.register(new GenericRecipe("ass.dieselgen").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_diesel, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4))); + this.register(new GenericRecipe("ass.rtg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_rtg_grey, 1)) + .inputItems(new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(STEEL.plate528(), 4), new OreDictStack(MINGRADE.wireFine(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4))); + this.register(new GenericRecipe("ass.derrick").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_well, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(CU.plateCast(), 2), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.drill_titanium, 1))); + this.register(new GenericRecipe("ass.pumpjack").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_pumpjack, 1)) + .inputItems(new OreDictStack(DURA.plate(), 8), new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.motor_desh), new ComparableStack(ModItems.drill_titanium, 1))); + this.register(new GenericRecipe("ass.flarestack").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_flare, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 12), new OreDictStack(CU.plate528(), 4), new OreDictStack(STEEL.shell(), 4), new ComparableStack(ModItems.thermo_element, 3))); + this.register(new GenericRecipe("ass.refinery").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_refinery, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 3), new OreDictStack(CU.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.coker").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_coker, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 8), new OreDictStack(RUBBER.ingot(), 4), new OreDictStack(NB.ingot(), 4))); + + // batteries + this.register(new GenericRecipe("ass.battery").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 1), new OreDictStack(S.dust(), 12), new OreDictStack(PB.dust(), 12))); + this.register(new GenericRecipe("ass.batterylithium").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) + .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(CO.dust(), 12), new OreDictStack(LI.dust(), 12))); + this.register(new GenericRecipe("ass.batteryschrabidium").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) + .inputItems(new OreDictStack(DESH.ingot(), 16), new OreDictStack(NP237.dust(), 12), new OreDictStack(SA326.dust(), 12))); + this.register(new GenericRecipe("ass.batterydnt").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) + .inputItems(new OreDictStack(DNT.ingot(), 24), new ComparableStack(ModItems.powder_spark_mix, 12), new ComparableStack(ModItems.battery_spark_cell_1000, 1), new OreDictStack(CMB.ingot(), 32))); + + // rancid shit mob spawners + this.register(new GenericRecipe("ass.chopper").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_chopper, 8)) + .inputItems(new OreDictStack(CMB.plateCast(), 24), new OreDictStack(STEEL.plate(), 32), new OreDictStack(MAGTUNG.wireFine(), 48), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER_ADVANCED))); + // weapon parts this.register(new GenericRecipe("ass.clusterpellets").setup(50, 100).outputItems(new ItemStack(ModItems.pellet_cluster, 1)) .inputItems(new OreDictStack(STEEL.plate(), 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 1))); @@ -117,26 +175,6 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32))); this.register(new GenericRecipe("ass.thrusternerva").setup(600, 100).outputItems(new ItemStack(ModItems.thruster_nuclear, 1)) .inputItems(new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new ComparableStack(ModItems.pipes_steel))); - - // bunker blocks - this.register(new GenericRecipe("ass.cmbtile").setup(100, 100).outputItems(new ItemStack(ModBlocks.cmb_brick, 8)) - .inputItems(new OreDictStack(ANY_CONCRETE.any(), 4), new OreDictStack(CMB.plate(), 4))); - this.register(new GenericRecipe("ass.cmbbrick").setup(100, 100).outputItems(new ItemStack(ModBlocks.cmb_brick_reinforced, 8)) - .inputItems(new OreDictStack(MAGTUNG.ingot(), 8), new ComparableStack(ModBlocks.ducrete, 4), new ComparableStack(ModBlocks.cmb_brick, 8))); - this.register(new GenericRecipe("ass.sealframe").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_frame, 1)) - .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(MINGRADE.wireDense(), 1))); - this.register(new GenericRecipe("ass.sealcontroller").setup(100, 100).outputItems(new ItemStack(ModBlocks.seal_controller, 1)) - .inputItems(new OreDictStack(DURA.ingot(), 1), new OreDictStack(STEEL.plateCast(), 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(MINGRADE.wireDense(), 4))); - - // machines - this.register(new GenericRecipe("ass.centrifuge").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_centrifuge, 1)) - .inputItems(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); - this.register(new GenericRecipe("ass.gascent").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_gascent, 1)) - .inputItems(new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(DESH.ingot(), 2), new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()))); - - // rancid shit mob spawners - this.register(new GenericRecipe("ass.chopper").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_chopper, 8)) - .inputItems(new OreDictStack(CMB.plateCast(), 24), new OreDictStack(STEEL.plate(), 32), new OreDictStack(MAGTUNG.wireFine(), 48), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER_ADVANCED))); } public static HashMap getRecipes() { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index d3a6cef3c..251e2d396 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -322,7 +322,7 @@ public class ModItems { public static Item plate_combine_steel; public static Item plate_mixed; public static Item plate_paa; - public static Item pipes_steel; + @Deprecated public static Item pipes_steel; public static Item drill_titanium; public static Item plate_dalekanium; public static Item plate_euphemium; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index a72d1996e..1c1a940e9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -31,7 +31,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; @@ -51,7 +50,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme public FluidTank tank; - public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(); + public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); public TileEntityMachineCrystallizer() { super(8); @@ -76,7 +75,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme tank.setType(7, slots); tank.loadTank(3, 4, slots); - upgradeManager.checkSlots(this, slots, 5, 6); + upgradeManager.checkSlots(slots, 5, 6); for(int i = 0; i < getCycleCount(); i++) { @@ -299,14 +298,8 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme @Override public boolean isItemValidForSlot(int i, ItemStack itemStack) { - - CrystallizerRecipe recipe = CrystallizerRecipes.getOutput(itemStack, tank.getTankType()); - if(i == 0 && recipe != null) { - return true; - } - - if(i == 1 && itemStack.getItem() instanceof IBatteryItem) - return true; + if(i == 0 && CrystallizerRecipes.getOutput(itemStack, tank.getTankType()) != null) return true; + if(i == 1 && itemStack.getItem() instanceof IBatteryItem) return true; return false; } @@ -318,13 +311,26 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme @Override public int[] getAccessibleSlotsFromSide(int side) { - - return side == 0 ? new int[] { 2 } : new int[] { 0, 2 }; + return new int[] { 0, 2 }; } + AxisAlignedBB bb = null; + @Override public AxisAlignedBB getRenderBoundingBox() { - return TileEntity.INFINITE_EXTENT_AABB; + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 1, + yCoord, + zCoord - 1, + xCoord + 2, + yCoord + 10, + zCoord + 2 + ); + } + + return bb; } @Override diff --git a/src/main/java/com/hbm/util/DamageResistanceHandler.java b/src/main/java/com/hbm/util/DamageResistanceHandler.java index d5e475de9..154891677 100644 --- a/src/main/java/com/hbm/util/DamageResistanceHandler.java +++ b/src/main/java/com/hbm/util/DamageResistanceHandler.java @@ -28,6 +28,7 @@ import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; import net.minecraftforge.event.entity.living.LivingAttackEvent; @@ -48,7 +49,7 @@ public class DamageResistanceHandler { public static final String CATEGORY_EXPLOSION = "EXPL"; public static final String CATEGORY_FIRE = "FIRE"; - public static final String CATEGORY_PROJECTILE = "PROJ"; + public static final String CATEGORY_PHYSICAL = "PHYS"; public static final String CATEGORY_ENERGY = "EN"; public static final Gson gson = new Gson(); @@ -121,70 +122,70 @@ public class DamageResistanceHandler { entityStats.put(EntityCreeper.class, new ResistanceStats().addCategory(CATEGORY_EXPLOSION, 2F, 0.25F)); itemStats.put(ModItems.jackt, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F)); + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F)); itemStats.put(ModItems.jackt2, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F)); + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F)); registerSet(ModItems.steel_helmet, ModItems.steel_plate, ModItems.steel_legs, ModItems.steel_boots, new ResistanceStats()); registerSet(ModItems.titanium_helmet, ModItems.titanium_plate, ModItems.titanium_legs, ModItems.titanium_boots, new ResistanceStats()); registerSet(ModItems.alloy_helmet, ModItems.alloy_plate, ModItems.alloy_legs, ModItems.alloy_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.1F)); + .addCategory(CATEGORY_PHYSICAL, 2F, 0.1F)); registerSet(ModItems.cobalt_helmet, ModItems.cobalt_plate, ModItems.cobalt_legs, ModItems.cobalt_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.1F)); + .addCategory(CATEGORY_PHYSICAL, 2F, 0.1F)); registerSet(ModItems.starmetal_helmet, ModItems.starmetal_plate, ModItems.starmetal_legs, ModItems.starmetal_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 3F, 0.25F) + .addCategory(CATEGORY_PHYSICAL, 3F, 0.25F) .setOther(1F, 0.1F)); registerSet(ModItems.zirconium_legs, ModItems.zirconium_legs, ModItems.zirconium_legs, ModItems.zirconium_legs, new ResistanceStats() .setOther(0F, 1F)); registerSet(ModItems.dnt_helmet, ModItems.dnt_plate, ModItems.dnt_legs, ModItems.dnt_boots, new ResistanceStats()); registerSet(ModItems.cmb_helmet, ModItems.cmb_plate, ModItems.cmb_legs, ModItems.cmb_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F) .setOther(5F, 0.25F)); registerSet(ModItems.schrabidium_helmet, ModItems.schrabidium_plate, ModItems.schrabidium_legs, ModItems.schrabidium_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 10F, 0.65F) + .addCategory(CATEGORY_PHYSICAL, 10F, 0.65F) .setOther(5F, 0.5F)); registerSet(ModItems.robes_helmet, ModItems.robes_plate, ModItems.robes_legs, ModItems.robes_boots, new ResistanceStats()); registerSet(ModItems.security_helmet, ModItems.security_plate, ModItems.security_legs, ModItems.security_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 2F, 0.25F)); registerSet(ModItems.steamsuit_helmet, ModItems.steamsuit_plate, ModItems.steamsuit_legs, ModItems.steamsuit_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 2F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.25F) .addExact(DamageSource.fall.damageType, 5F, 0.25F) .setOther(0F, 0.1F)); registerSet(ModItems.dieselsuit_helmet, ModItems.dieselsuit_plate, ModItems.dieselsuit_legs, ModItems.dieselsuit_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 1F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 1F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 2F, 0.15F) .setOther(0F, 0.1F)); registerSet(ModItems.t45_helmet, ModItems.t45_plate, ModItems.t45_legs, ModItems.t45_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 2F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.35F) .addCategory(CATEGORY_EXPLOSION, 5F, 0.25F) .addExact(DamageSource.fall.damageType, 0F, 1F) .setOther(0F, 0.1F)); registerSet(ModItems.ajr_helmet, ModItems.ajr_plate, ModItems.ajr_legs, ModItems.ajr_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 4F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 4F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.35F) .addCategory(CATEGORY_EXPLOSION, 7.5F, 0.25F) .addExact(DamageSource.fall.damageType, 0F, 1F) .setOther(0F, 0.15F)); registerSet(ModItems.ajro_helmet, ModItems.ajro_plate, ModItems.ajro_legs, ModItems.ajro_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 4F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 4F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.35F) .addCategory(CATEGORY_EXPLOSION, 7.5F, 0.25F) .addExact(DamageSource.fall.damageType, 0F, 1F) .setOther(0F, 0.15F)); registerSet(ModItems.rpa_helmet, ModItems.rpa_plate, ModItems.rpa_legs, ModItems.rpa_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 25F, 0.65F) + .addCategory(CATEGORY_PHYSICAL, 25F, 0.65F) .addCategory(CATEGORY_FIRE, 10F, 0.9F) .addCategory(CATEGORY_EXPLOSION, 15F, 0.25F) .addCategory(CATEGORY_ENERGY, 25F, 0.75F) .addExact(DamageSource.fall.damageType, 0F, 1F) .setOther(15F, 0.3F)); ResistanceStats bj = new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F) .addCategory(CATEGORY_FIRE, 2.5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 10F, 0.25F) .addExact(DamageSource.fall.damageType, 0F, 1F) @@ -197,14 +198,14 @@ public class DamageResistanceHandler { .addExact(DamageSource.fall.damageType, 5F, 0.75F) .setOther(0F, 0.1F)); registerSet(ModItems.hev_helmet, ModItems.hev_plate, ModItems.hev_legs, ModItems.hev_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.25F) + .addCategory(CATEGORY_PHYSICAL, 2F, 0.25F) .addCategory(CATEGORY_FIRE, 0.5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 5F, 0.25F) .addExact(DamageSource.onFire.damageType, 0F, 1F) .addExact(DamageSource.fall.damageType, 10F, 0F) .setOther(2F, 0.25F)); registerSet(ModItems.bismuth_helmet, ModItems.bismuth_plate, ModItems.bismuth_legs, ModItems.bismuth_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 2F, 0.15F) .addCategory(CATEGORY_FIRE, 5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 5F, 0.25F) .addExact(DamageSource.fall.damageType, 0F, 1F) @@ -220,13 +221,13 @@ public class DamageResistanceHandler { .addCategory(CATEGORY_FIRE, 0F, 1F) .setOther(1000F, 1F)); registerSet(ModItems.taurun_helmet, ModItems.taurun_plate, ModItems.taurun_legs, ModItems.taurun_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_PHYSICAL, 2F, 0.15F) .addCategory(CATEGORY_FIRE, 0F, 0.25F) .addCategory(CATEGORY_EXPLOSION, 0F, 0.25F) .addExact(DamageSource.fall.damageType, 4F, 0.5F) .setOther(2F, 0.1F)); registerSet(ModItems.trenchmaster_helmet, ModItems.trenchmaster_plate, ModItems.trenchmaster_legs, ModItems.trenchmaster_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) + .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F) .addCategory(CATEGORY_FIRE, 5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 5F, 0.25F) .addExact(DamageClass.LASER.name(), 15F, 0.9F) @@ -443,10 +444,13 @@ public class DamageResistanceHandler { public static String typeToCategory(DamageSource source) { if(source.isExplosion()) return CATEGORY_EXPLOSION; if(source.isFireDamage()) return CATEGORY_FIRE; - if(source.isProjectile()) return CATEGORY_PROJECTILE; + if(source.isProjectile()) return CATEGORY_PHYSICAL; if(source.damageType.equals(DamageClass.LASER.name())) return CATEGORY_ENERGY; if(source.damageType.equals(DamageClass.MICROWAVE.name())) return CATEGORY_ENERGY; if(source.damageType.equals(DamageClass.SUBATOMIC.name())) return CATEGORY_ENERGY; + if(source.damageType.equals(DamageClass.ELECTRIC.name())) return CATEGORY_ENERGY; + if(source == DamageSource.cactus) return CATEGORY_PHYSICAL; + if(source instanceof EntityDamageSource) return CATEGORY_PHYSICAL; return source.damageType; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index a031be603..50aa4a009 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -509,7 +509,7 @@ damage.item=Resistenz wenn getragen: damage.category.EN=Energie damage.category.EXPL=Explosion damage.category.FIRE=Feuer -damage.category.PROJ=Projektil +damage.category.PHYS=Physisch damage.exact.drown=Ertrinken damage.exact.fall=Fallschaden damage.exact.LASER=Laser diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index c5fd461eb..cb32c226e 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -925,7 +925,7 @@ damage.item=Resistances when worn: damage.category.EN=Energy damage.category.EXPL=Explosion damage.category.FIRE=Fire -damage.category.PROJ=Projectile +damage.category.PHYS=Physical damage.exact.drown=Drowning damage.exact.fall=Fall damage damage.exact.LASER=Laser From 4b6cf3473d8aa70312cfb210a888f4d84881f74a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 12 Jul 2025 22:32:32 +0300 Subject: [PATCH 278/491] Save electrolyzer GUI --- .../hbm/blocks/machine/MachineElectrolyser.java | 2 +- .../machine/TileEntityElectrolyser.java | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java b/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java index ab91cbb43..ec787564a 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java +++ b/src/main/java/com/hbm/blocks/machine/MachineElectrolyser.java @@ -35,7 +35,7 @@ public class MachineElectrolyser extends BlockDummyable { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - return this.standardOpenBehavior(world, x, y, z, player, 0); + return this.standardOpenBehavior(world, x, y, z, player, -1); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 084aa7859..403e516f8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -66,6 +66,8 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn public MaterialStack leftStack; public MaterialStack rightStack; public int maxMaterial = MaterialShapes.BLOCK.q(16); + + private int lastSelectedGUI = 0; public FluidTank[] tanks; @@ -248,6 +250,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn buf.writeInt(rightStack.material.id); buf.writeInt(rightStack.amount); } + buf.writeInt(lastSelectedGUI); } @Override @@ -269,6 +272,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn if(right) { this.rightStack = new MaterialStack(Mats.matById.get(buf.readInt()), buf.readInt()); } + this.lastSelectedGUI = buf.readInt(); } public boolean canProcessFluid() { @@ -423,6 +427,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn if(nbt.hasKey("rightType")) this.rightStack = new MaterialStack(Mats.matById.get(nbt.getInteger("rightType")), nbt.getInteger("rightAmount")); else this.rightStack = null; for(int i = 0; i < 4; i++) tanks[i].readFromNBT(nbt, "t" + i); + this.lastSelectedGUI = nbt.getInteger("lastSelectedGUI"); } @Override @@ -443,7 +448,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn nbt.setInteger("rightAmount", rightStack.amount); } for(int i = 0; i < 4; i++) tanks[i].writeToNBT(nbt, "t" + i); - + nbt.setInteger("lastSelectedGUI", this.lastSelectedGUI); } AxisAlignedBB bb = null; @@ -503,6 +508,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + if(ID == -1) ID = lastSelectedGUI; if(ID == 0) return new ContainerElectrolyserFluid(player.inventory, this); return new ContainerElectrolyserMetal(player.inventory, this); } @@ -510,6 +516,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + if(ID == -1) ID = lastSelectedGUI; if(ID == 0) return new GUIElectrolyserFluid(player.inventory, this); return new GUIElectrolyserMetal(player.inventory, this); } @@ -520,8 +527,10 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn @Override public void receiveControl(EntityPlayer player, NBTTagCompound data) { - if(data.hasKey("sgm")) FMLNetworkHandler.openGui(player, MainRegistry.instance, 1, worldObj, xCoord, yCoord, zCoord); - if(data.hasKey("sgf")) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, worldObj, xCoord, yCoord, zCoord); + if(data.hasKey("sgm")) lastSelectedGUI = 1; + if(data.hasKey("sgf")) lastSelectedGUI = 0; + + FMLNetworkHandler.openGui(player, MainRegistry.instance, lastSelectedGUI, worldObj, xCoord, yCoord, zCoord); } @Override From fb32763c88397e3a87226c57fbb61066b438fbd9 Mon Sep 17 00:00:00 2001 From: BallOfEnergy <66693744+BallOfEnergy1@users.noreply.github.com> Date: Sun, 13 Jul 2025 11:45:17 -0500 Subject: [PATCH 279/491] Update PistonInserter.java; Fix server crash due to client-side variable. --- src/main/java/com/hbm/blocks/machine/PistonInserter.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/PistonInserter.java b/src/main/java/com/hbm/blocks/machine/PistonInserter.java index bb33d205d..4683f1ec6 100644 --- a/src/main/java/com/hbm/blocks/machine/PistonInserter.java +++ b/src/main/java/com/hbm/blocks/machine/PistonInserter.java @@ -282,8 +282,6 @@ public class PistonInserter extends BlockContainerBase implements ITooltipProvid if(this.slot != null) { BufferUtil.writeNBT(buf, slot.stackTagCompound); } - - this.turnProgress = 2; } @Override From 2841c8b67b8f459573142bbf33b1727f57159495 Mon Sep 17 00:00:00 2001 From: Pvndols Date: Sun, 13 Jul 2025 21:05:28 +0200 Subject: [PATCH 280/491] the spinniest of the fidgets CCGT changes, automode now lowers throttle when fuel low, displays fuel consumption instead of a generic power setting in the GUI, small change in GUI description, the texture now includes what should be an air filter at the tubine intake. i am NOT good at texturing. --- .../inventory/gui/GUIMachineTurbineGas.java | 15 +++++++++------ .../machine/TileEntityMachineTurbineGas.java | 13 ++++++++++--- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../textures/models/machines/turbinegas.png | Bin 18254 -> 36270 bytes 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index 310bc7db0..6200eefa3 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -115,15 +115,18 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 108, 142, 16, turbinegas.power, turbinegas.getMaxPower()); - if(turbinegas.powerSliderPos == 0) - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Turbine idle"}); - else - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {(turbinegas.powerSliderPos) * 100 / 60 + "% power"}); + if(turbinegas.state == 1) { + double consumption = turbinegas.fuelMaxCons.containsKey(turbinegas.tanks[0].getTankType()) ? turbinegas.fuelMaxCons.get(turbinegas.tanks[0].getTankType()) : 5D; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Fuel consumption: " + 20 * (consumption * 0.05D + consumption * turbinegas.throttle / 100) + " mb/s"}); + } + else { + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Generator offline"}); + } if(turbinegas.temp >= 20) - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "°C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "C"}); else - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20°C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20C"}); turbinegas.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 16, 16, 48); turbinegas.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 70, 16, 32); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index f7e3349f5..bcb00ea06 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -100,10 +100,17 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement } } - if(autoMode) { //power production depending on power requirement + if(autoMode) { //power production depending on power requirement and fuel level - //scales the slider proportionally to the power gauge - int powerSliderTarget = 60 - (int) (60 * power / maxPower); + int powerSliderTarget; + + //when low on fuel, decrease consumption linearly + if(tanks[0].getFill() * 10 > tanks[0].getMaxFill()) { + powerSliderTarget = 60 - (int) (60 * power / maxPower); //scales the slider proportionally to the power gauge + } + else { + powerSliderTarget = (int) ( tanks[0].getFill() * 0.0001 * (60 - (int) (60 * power / maxPower)) ); + } if(powerSliderTarget > powerSliderPos) { //makes the auto slider slide instead of snapping into position powerSliderPos++; diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 336ad59dc..d19afdb54 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -961,7 +961,7 @@ desc.gui.rtg.pellets=Accepted Pellets: desc.gui.rtg.pelletHeat=%s (%s heat) desc.gui.rtg.pelletPower=%s (%s HE/tick) desc.gui.template=§9Templates§r$Templates can be made by$using the Machine Template Folder. -desc.gui.turbinegas.automode=§2Automatic Turbine Throttling Mode§r$By clicking the "AUTO" button, the turbine$will automatically adjust the power production$based on the power required from the network +desc.gui.turbinegas.automode=§2Automatic turbine throttling mode§r$By clicking the "AUTO" button, the turbine$will automatically adjust the throttle position$based on the power required from the network$and the fuel level in the internal tank desc.gui.turbinegas.fuels=§6Accepted fuels:§r desc.gui.turbinegas.warning=§cFuel or lubricant level low!§r desc.gui.zirnox.coolant=§3Coolant§r$CO2 transfers heat from the core to the water.$This will boil it into super dense steam.$The efficiency of cooling and steam production$is based on pressure. diff --git a/src/main/resources/assets/hbm/textures/models/machines/turbinegas.png b/src/main/resources/assets/hbm/textures/models/machines/turbinegas.png index 290e3810bc5904d60a3feda9ccae75c7318be4d0..4e33cca35052cf5e838ca844047ae0e55adf1c76 100644 GIT binary patch literal 36270 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 literal 18254 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 KMNUMnLSTZkam`Ku From da2abe281dc303d4ddf8e76654e6262077429f5c Mon Sep 17 00:00:00 2001 From: PewPewCricket Date: Sun, 13 Jul 2025 14:57:43 -0500 Subject: [PATCH 281/491] add paintable network cable --- src/main/java/com/hbm/blocks/ModBlocks.java | 11 + .../BlockOpenComputersCablePaintable.java | 244 ++++++++++++++++++ .../java/com/hbm/main/CraftingManager.java | 7 +- .../java/com/hbm/tileentity/TileMappings.java | 9 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../hbm/textures/blocks/oc_cable_base.png | Bin 0 -> 624 bytes .../hbm/textures/blocks/oc_cable_overlay.png | Bin 0 -> 340 bytes 7 files changed, 270 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/oc_cable_base.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/oc_cable_overlay.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 5f3de7f83..01b28241f 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -34,6 +34,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; +import cpw.mods.fml.common.Loader; import java.util.ArrayList; @@ -803,6 +804,7 @@ public class ModBlocks { public static Block radio_torch_reader; public static Block radio_torch_controller; public static Block radio_telex; + public static Block oc_cable_paintable; public static Block conveyor; public static Block conveyor_express; @@ -2340,6 +2342,10 @@ public class ModBlocks { absorber_pink = new BlockAbsorber(Material.iron, 10000F).setBlockName("absorber_pink").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":absorber_pink"); decon = new BlockDecon(Material.iron).setBlockName("decon").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":decon_side"); + if (Loader.isModLoaded("OpenComputers")) { + oc_cable_paintable = new BlockOpenComputersCablePaintable().setBlockName("oc_cable_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + } + volcano_core = new BlockVolcano().setBlockName("volcano_core").setBlockUnbreakable().setResistance(10000.0F).setCreativeTab(MainRegistry.nukeTab).setBlockTextureName(RefStrings.MODID + ":volcano_core"); volcano_rad_core = new BlockVolcano().setBlockName("volcano_rad_core").setBlockUnbreakable().setResistance(10000.0F).setCreativeTab(MainRegistry.nukeTab).setBlockTextureName(RefStrings.MODID + ":volcano_rad_core"); @@ -3532,6 +3538,11 @@ public class ModBlocks { GameRegistry.registerBlock(gas_explosive, gas_explosive.getUnlocalizedName()); GameRegistry.registerBlock(vacuum, vacuum.getUnlocalizedName()); + // OC Compat Items + if (Loader.isModLoaded("OpenComputers")) { + register(oc_cable_paintable); + } + //??? GameRegistry.registerBlock(crystal_virus, crystal_virus.getUnlocalizedName()); GameRegistry.registerBlock(crystal_hardened, crystal_hardened.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java b/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java new file mode 100644 index 000000000..b755006d5 --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/BlockOpenComputersCablePaintable.java @@ -0,0 +1,244 @@ +package com.hbm.blocks.network; + +import api.hbm.block.IToolable; +import com.hbm.blocks.IBlockMultiPass; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.RenderBlockMultipass; +import com.hbm.tileentity.TileEntityLoadedBase; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import li.cil.oc.api.network.Environment; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import li.cil.oc.api.network.Message; +import li.cil.oc.api.network.Node; +import li.cil.oc.api.Network; +import li.cil.oc.api.network.Visibility; +import cpw.mods.fml.common.Optional; +import cpw.mods.fml.common.Loader; + +public class BlockOpenComputersCablePaintable extends BlockContainer implements IToolable, IBlockMultiPass { + + @SideOnly(Side.CLIENT) protected IIcon overlay; + + public BlockOpenComputersCablePaintable() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityOpenComputersCablePaintable(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + this.blockIcon = reg.registerIcon(RefStrings.MODID + ":oc_cable_base"); + this.overlay = reg.registerIcon(RefStrings.MODID + ":oc_cable_overlay"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityOpenComputersCablePaintable) { + TileEntityOpenComputersCablePaintable pipe = (TileEntityOpenComputersCablePaintable) tile; + + if(pipe.block != null) { + if(RenderBlockMultipass.currentPass == 1) { + return this.overlay; + } else { + return pipe.block.getIcon(side, pipe.meta); + } + } + } + + return RenderBlockMultipass.currentPass == 1 ? this.overlay : this.blockIcon; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { + + ItemStack stack = player.getHeldItem(); + + if(stack != null && stack.getItem() instanceof ItemBlock) { + ItemBlock ib = (ItemBlock) stack.getItem(); + Block block = ib.field_150939_a; + + if(block.renderAsNormalBlock() && block != this) { + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityOpenComputersCablePaintable) { + TileEntityOpenComputersCablePaintable pipe = (TileEntityOpenComputersCablePaintable) tile; + + if(pipe.block == null) { + pipe.block = block; + pipe.meta = stack.getItemDamage() & 15; + world.markBlockForUpdate(x, y, z); + pipe.markDirty(); + return true; + } + } + } + } + + return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool != ToolType.SCREWDRIVER) return false; + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityOpenComputersCablePaintable) { + TileEntityOpenComputersCablePaintable pipe = (TileEntityOpenComputersCablePaintable) tile; + + if(pipe.block != null) { + pipe.block = null; + world.markBlockForUpdate(x, y, z); + pipe.markDirty(); + return true; + } + } + + return false; + } + + @Override + public int getPasses() { + return 2; + } + + @Override + public int getRenderType(){ + return IBlockMultiPass.getRenderType(); + } + + // WHY the fuck is this not compiling + @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.Environment", modid = "OpenComputers")}) + public static class TileEntityOpenComputersCablePaintable extends TileEntityLoadedBase implements Environment { + + protected Node node; + protected boolean addedToNetwork = false; + + private Block block; + private int meta; + private Block lastBlock; + private int lastMeta; + + public TileEntityOpenComputersCablePaintable() { + node = Network.newNode(this, Visibility.None).create(); + } + + @Override + public void updateEntity() { + super.updateEntity(); + + if(worldObj.isRemote && (lastBlock != block || lastMeta != meta)) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + lastBlock = block; + lastMeta = meta; + } + + if(!this.getWorldObj().isRemote && !addedToNetwork) { + addedToNetwork = true; + Network.joinOrCreateNetwork(this); + } + + } + + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + int id = nbt.getInteger("block"); + this.block = id == 0 ? null : Block.getBlockById(id); + this.meta = nbt.getInteger("meta"); + + if (node != null && node.host() == this) { + node.load(nbt.getCompoundTag("oc:node")); + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + if(block != null) nbt.setInteger("block", Block.getIdFromBlock(block)); + nbt.setInteger("meta", meta); + + if (node != null && node.host() == this) { + final NBTTagCompound nodeNbt = new NBTTagCompound(); + node.save(nodeNbt); + nbt.setTag("oc:node", nodeNbt); + } + } + + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + if(block != null) { + nbt.setInteger("paintblock", Block.getIdFromBlock(block)); + nbt.setInteger("paintmeta", meta); + } + return nbt; + } + + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("paintblock")) { + this.block = Block.getBlockById(nbt.getInteger("paintblock")); + this.meta = nbt.getInteger("paintmeta"); + } + } + + // OC Cable Things + @Override + public Node node() { + return node; + } + + @Override + public void onConnect(Node node) {} + + @Override + public void onDisconnect(Node node) {} + + @Override + public void onMessage(Message message) {} + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + if (node != null) node.remove(); + } + + public void invalidate() { + super.invalidate(); + if (node != null) node.remove(); + } + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 67b872581..3892e6a3a 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -237,6 +237,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_electric_furnace_off), 1), new Object[] { "BBB", "WFW", "RRR", 'B', BE.ingot(), 'R', ModItems.coil_tungsten, 'W', CU.plateCast(), 'F', Item.getItemFromBlock(Blocks.furnace) }); addRecipeAuto(new ItemStack(ModBlocks.red_wire_coated, 16), new Object[] { "WRW", "RIR", "WRW", 'W', ModItems.plate_polymer, 'I', MINGRADE.ingot(), 'R', MINGRADE.wireFine() }); addRecipeAuto(new ItemStack(ModBlocks.red_cable_paintable, 16), new Object[] { "WRW", "RIR", "WRW", 'W', STEEL.plate(), 'I', MINGRADE.ingot(), 'R', MINGRADE.wireFine() }); + addRecipeAuto(new ItemStack(ModBlocks.oc_cable_paintable, 16), new Object[] { "WRW", "RIR", "WRW", 'W', STEEL.plate(), 'I', REDSTONE.dust(), 'R', MINGRADE.wireFine() }); addRecipeAuto(new ItemStack(ModBlocks.cable_switch, 1), new Object[] { "S", "W", 'S', Blocks.lever, 'W', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.cable_detector, 1), new Object[] { "S", "W", 'S', REDSTONE.dust(), 'W', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.cable_diode, 1), new Object[] { " Q ", "CAC", " Q ", 'Q', SI.nugget(), 'C', ModBlocks.red_cable, 'A', AL.ingot() }); @@ -410,7 +411,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.basalt_polished, 4), new Object[] { "CC", "CC", 'C', ModBlocks.basalt_smooth }); addRecipeAuto(new ItemStack(ModBlocks.basalt_brick, 4), new Object[] { "CC", "CC", 'C', ModBlocks.basalt_polished }); addRecipeAuto(new ItemStack(ModBlocks.basalt_tiles, 4), new Object[] { "CC", "CC", 'C', ModBlocks.basalt_brick }); - + addShapelessAuto(new ItemStack(ModBlocks.lightstone, 4), new Object[] { Blocks.stone, Blocks.stone, Blocks.stone, ModItems.powder_limestone }); addRecipeAuto(new ItemStack(ModBlocks.lightstone, 4, LightstoneType.TILE.ordinal()), new Object[] { "CC", "CC", 'C', new ItemStack(ModBlocks.lightstone, 1, 0) }); addRecipeAuto(new ItemStack(ModBlocks.lightstone, 4, LightstoneType.BRICKS.ordinal()), new Object[] { "CC", "CC", 'C', new ItemStack(ModBlocks.lightstone, 1, LightstoneType.TILE.ordinal()) }); @@ -442,7 +443,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.barbed_wire_ultradeath, 4), new Object[] { "BCB", "CIC", "BCB", 'B', ModBlocks.barbed_wire, 'C', ModItems.powder_yellowcake, 'I', ModItems.nuclear_waste }); addShapelessAuto(new ItemStack(ModBlocks.sandbags, 4), new Object[] { ModItems.plate_polymer, KEY_SAND, KEY_SAND, KEY_SAND }); - + addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.tape_recorder), 4), new Object[] { "TST", "SSS", 'T', W.ingot(), 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_poles), 16), new Object[] { "S S", "SSS", "S S", 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.pole_top), 1), new Object[] { "T T", "TRT", "BBB", 'T', W.ingot(), 'B', BE.ingot(), 'R', MINGRADE.ingot() }); @@ -610,7 +611,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.fluid_pump, 1), new Object[] { " S ", "PGP", "IMI", 'S', STEEL.shell(), 'P', STEEL.pipe(), 'G', GRAPHITE.ingot(), 'I', STEEL.ingot(), 'M', ModItems.motor }); addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube, 8), new Object[] { "CRC", 'C', CU.plateCast(), 'R', ANY_RUBBER.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube, 24), new Object[] { "CRC", 'C', CU.plateWelded(), 'R', ANY_RUBBER.ingot() }); - + addRecipeAuto(new ItemStack(ModItems.template_folder, 1), new Object[] { "LPL", "BPB", "LPL", 'P', Items.paper, 'L', "dye", 'B', "dye" }); addRecipeAuto(new ItemStack(ModItems.pellet_antimatter, 1), new Object[] { "###", "###", "###", '#', ModItems.cell_antimatter }); addRecipeAuto(new ItemStack(ModItems.fluid_tank_empty, 8), new Object[] { "121", "1G1", "121", '1', AL.plate(), '2', IRON.plate(), 'G', KEY_ANYPANE }); diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 1c938ab18..438b6c605 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -40,6 +40,7 @@ import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable; import com.hbm.blocks.network.FluidDuctPaintableBlockExhaust.TileEntityPipeExhaustPaintable; import com.hbm.blocks.network.FluidPump.TileEntityFluidPump; import com.hbm.blocks.rail.RailStandardSwitch.TileEntityRailSwitch; +import com.hbm.blocks.network.BlockOpenComputersCablePaintable.TileEntityOpenComputersCablePaintable; import com.hbm.tileentity.bomb.*; import com.hbm.tileentity.deco.*; import com.hbm.tileentity.machine.*; @@ -50,6 +51,7 @@ import com.hbm.tileentity.machine.rbmk.*; import com.hbm.tileentity.machine.storage.*; import com.hbm.tileentity.network.*; import com.hbm.tileentity.turret.*; +import cpw.mods.fml.common.Loader; import net.minecraft.tileentity.TileEntity; @@ -451,6 +453,13 @@ public class TileMappings { put(TileEntityDroneRequester.class, "tileentity_drone_requester"); put(TileEntityRailSwitch.class, "tileentity_rail_switch"); + + // OC Compat items + boolean ocPresent = Loader.isModLoaded("OpenComputers"); + + if (ocPresent) { + put(TileEntityOpenComputersCablePaintable.class, "tileentity_oc_cable_paintable"); + } } private static void put(Class clazz, String... names) { diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index cb32c226e..c7ab3f6fe 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6227,3 +6227,5 @@ desc.gui.upgrade.effectiveness= * §aEffectiveness§r: Stacks to level 3 desc.gui.upgrade.overdrive= * §7Overdrive§r: Stacks to level 3 desc.gui.upgrade.power= * §1Power-Saving§r: Stacks to level 3 desc.gui.upgrade.speed= * §4Speed§r: Stacks to level 3 + +tile.oc_cable_paintable.name=Paintable Network Cable diff --git a/src/main/resources/assets/hbm/textures/blocks/oc_cable_base.png b/src/main/resources/assets/hbm/textures/blocks/oc_cable_base.png new file mode 100644 index 0000000000000000000000000000000000000000..243c2da7f8f52b96ec7dba690200d6902ca3ea4d GIT binary patch literal 624 zcmV-$0+0QPP)nh*GJ9h6YW3HdHDVeE9eYiM2I|nFmv}&*K3B__eWtZ{L5& z9ihduSAnH<9qXH0XxigO#UPZ+WgKX2mEZ=(C+?QMBx2ZTUApGP*Eg%})ovtS9(mcD=%kJ~)klnBb)8}p|4|)RuMCV>&E0wANxOd|#TAUijrUFWy z8LXcfunZ9n4NzZC5HquLH301L0&>P3|zt8 z$@}U>a*|oVD+hy`dvoO(PS6G7^>bP0l+XkK De2Z3~ literal 0 HcmV?d00001 From 119b8a037b222fe8aa6d8fa54c75b22bf0826d01 Mon Sep 17 00:00:00 2001 From: Pvndols Date: Sun, 13 Jul 2025 22:30:34 +0200 Subject: [PATCH 282/491] Revert "the spinniest of the fidgets" This reverts commit 2841c8b67b8f459573142bbf33b1727f57159495. --- .../inventory/gui/GUIMachineTurbineGas.java | 15 ++++++--------- .../machine/TileEntityMachineTurbineGas.java | 13 +++---------- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../textures/models/machines/turbinegas.png | Bin 36270 -> 18254 bytes 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index 21945ed89..eee3c7fad 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -115,18 +115,15 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 108, 142, 16, turbinegas.power, turbinegas.getMaxPower()); - if(turbinegas.state == 1) { - double consumption = turbinegas.fuelMaxCons.containsKey(turbinegas.tanks[0].getTankType()) ? turbinegas.fuelMaxCons.get(turbinegas.tanks[0].getTankType()) : 5D; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Fuel consumption: " + 20 * (consumption * 0.05D + consumption * turbinegas.throttle / 100) + " mb/s"}); - } - else { - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Generator offline"}); - } + if(turbinegas.powerSliderPos == 0) + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Turbine idle"}); + else + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {(turbinegas.powerSliderPos) * 100 / 60 + "% power"}); if(turbinegas.temp >= 20) - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "°C"}); else - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20°C"}); turbinegas.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 16, 16, 48); turbinegas.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 70, 16, 32); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index a198b14c5..0e5d6b9a1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -107,17 +107,10 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement } <<<<<<< HEAD - if(autoMode) { //power production depending on power requirement and fuel level + if(autoMode) { //power production depending on power requirement - int powerSliderTarget; - - //when low on fuel, decrease consumption linearly - if(tanks[0].getFill() * 10 > tanks[0].getMaxFill()) { - powerSliderTarget = 60 - (int) (60 * power / maxPower); //scales the slider proportionally to the power gauge - } - else { - powerSliderTarget = (int) ( tanks[0].getFill() * 0.0001 * (60 - (int) (60 * power / maxPower)) ); - } + //scales the slider proportionally to the power gauge + int powerSliderTarget = 60 - (int) (60 * power / maxPower); ======= diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index ed0747f04..cb32c226e 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1033,7 +1033,7 @@ desc.gui.rtg.pellets=Accepted Pellets: desc.gui.rtg.pelletHeat=%s (%s heat) desc.gui.rtg.pelletPower=%s (%s HE/tick) desc.gui.template=§9Templates§r$Templates can be made by$using the Machine Template Folder. -desc.gui.turbinegas.automode=§2Automatic turbine throttling mode§r$By clicking the "AUTO" button, the turbine$will automatically adjust the throttle position$based on the power required from the network$and the fuel level in the internal tank +desc.gui.turbinegas.automode=§2Automatic Turbine Throttling Mode§r$By clicking the "AUTO" button, the turbine$will automatically adjust the power production$based on the power required from the network desc.gui.turbinegas.fuels=§6Accepted fuels:§r desc.gui.turbinegas.warning=§cFuel or lubricant level low!§r desc.gui.zirnox.coolant=§3Coolant§r$CO2 transfers heat from the core to the water.$This will boil it into super dense steam.$The efficiency of cooling and steam production$is based on pressure. diff --git a/src/main/resources/assets/hbm/textures/models/machines/turbinegas.png b/src/main/resources/assets/hbm/textures/models/machines/turbinegas.png index 4e33cca35052cf5e838ca844047ae0e55adf1c76..290e3810bc5904d60a3feda9ccae75c7318be4d0 100644 GIT binary patch literal 18254 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 KMNUMnLSTZkam`Ku literal 36270 zcmX7OXHXN)*L4zlZwg2asG!n|bdmrnC?ePZ>4-GxHS~mzKdK@i(nUm+-g}48K|p$F zp$9@I34!qXf8Gx}yLV@Hc4zOFd(Sx^44!E-(euy)005@PIuBj|0Kk7uAb^(oUuEX` z)9!zk*9&b;K1!V!xQ~(1>;0YJ=T44~!9vmkz*^gOJGI_$!PpzzOx(^k zx?O!;S}Zpi3gble@U3OZC?g+bQUeY*af>0+;g=q`;e|H2S$uGSx zRabPO3zauJ%G83kv;^OO1rTa1Nq=9M1~xglIeG2z@40$d|B;Z8i1dn$jqR8wDnTL} z8kDCuCc=Dk5}S1)!MiW1H>p-bC7))^ZB&%|1GoE~j)6z)WeOfl-#-ji?S0f=(9Cw7 z-Rx4~_*K(3$T1lfIM5PV-I(1lJNw_cbH<$v4D(Bf0YA*qv}>Q)xBSuA?AFuR*6`o? z|2+tcpcqqD$=^!?JxI<4?EIV(70k+Re4P+uDe?ew=JIk45Wy6 zji$e2BM3?`mE1F3B|yq!^M5P16&+e%D`YHX_^Gx-uX(R5qf&XwKlGxz?DI|+4~X{e zOQEwpW!_Ss#VFp#PF)W-C4Q~P250m}@#@(>_m)g3OL_J)rR;fIx)wkjpu)%M|B#(c z>#IH|2*Ur>+uJUv`uaAV7Wcpli8gOZnXj`V-ytfsSJhUtCQ5`Uj!2L@)I!(KPIB{^fwjg{>c;>i79aI)FH;>DYYB-%oQr zZTV+v8ERcLf2%yn)S#kQ5itilECR0oWLSSY*>`|E9uYnA5-2Qp{TlO&Mq7=``8Fq4 zp<0+gZ6;MW@cm8y^@(gx(KuS+3EiygIr0N#&v*p>V~MWa@Ca+MjA%$Tc!bkz`O(rS zGR|&j4*P0qkp3$_DEQt|n(n+iAH@!KYnS$cv%-THXeqiobK3I{LeO5J-eG-USQPh} z|D7^iIIa!%nDIRSJm%cwVhBLoYoW;tdYKcM@RvqMl!>|V(#PGrR*<1_F=6+z=v8x-SM_d%cQoN;&VmA2VBlyys8t=UT`WV zVGT_wcgF7D4fd0UKq(o0*7krAdoA(%UThA~+zZdbKRyOInPpPd=%v`HDZ}a6KW0Fy z{j7)eWyF>h|DP@^Z@!S|b$A)vU?iabtB_2n8md_U_C+Z>F(x}K+q7Prcnn%AWX?R# zv)UH}x5<}gD;tpf$nSZlwf*@h#^=?LB-reUsk&n3dAyFUidp?gGvkOyB1V>~RHizT zlxAsJuifYYmIq70m?Sjoxh-R0kieTR%Ii<`(tk~}FD$yhVXGagFHy7d;Zt{Zx<`>E zs;(G)bZ}R9eY+RrBd@{#j3p(*wd`-y-L%S1iWA5*pUP7U5lYJLkA~AFvb$ZFFOC0| z#@4=McBCA@WN!n1Tg=`1{UhH-nK1l_TYwn&juZiFTJvMB{^391JItKah)yzadWev`|`W_sEGgX*)(JW$6iC(8v9 z_oC>tIn;*~^rHT=n1Se}5S6)@Pec&$^bb@sF(TsDD&_T=SfCjgr4%XQj5(Dq&Tqb^ zY2Lab42h3*d&M|DVTe{6$DEXlJHL5i8FJvCRaEQI^^kiU8%l4MOdHE_0_YnYew~Hn zW%eFf#2hsoWKcWS3l!9Vb6S{FB*r5GH_GUq>PbYp|XV=n}^RjlJ0j^VYYZbOHX#A-L%3V-KE$0EQLsEZu;7_Qw@;NSF4d@M)_DF09|&8E8vL@g*u4){Jzde6$0N5_V4X5F874pDr{ z(y965tAyop=Kb~h2ANyi{WODF=dA=)4wRYmR{J6w zv!V@DcD^)Z8N)59RW_M+r%3&4(MAncao#{;uwtyQtC(vP)U*%Vn^tC%s3 z_|rd6w*+)K=mYGK*yZL-t4K;bPZH;h6YE`@82JURr;bOT^zjL`k^M7jQmDx?6<8lf z3e(D8fous|cCLtzj?nUHo5A=zug_fBIYP?0OgzE^DHt#4+Wpg_`1er!os&1?#G{nd zv)`k03bjwPQ2b9mI0HRX*S>eLiLz6ETjPqkTOtjPS5dO{dMVKWME!S@$#y;gRD8YN ze_kXn$m_^gjB!^sd9_o$kAIy_aBgcpcH(pe<30R6kK>(V)r!`e7{44WYItNgf~Ht0 zG{9TXu?p8RS1>Yq`TWfaL7laCfI??t@%Ss4mzDR{M;Xpi|k&WJr= ziDL>gj_Euyows_xvr1YYi+6d?&`@0LdD2{m@;NeF5dXrKcIV~ihpM-9UP*$V`e$}= zeSXya3LTa$XuyN~H^R?8$7su`mC@YDA@O;Hn$uAq%{|L8A8aE`EG5Z65v23YqnL(A z<&}jr)m@9Ro|nu9;h~ZbA{Z4XRY$bES4(Ph#g)fbup1c6EphLPUpZdv;P?4+-+2qM zfXVo(O--632(g~)o;GC_3;UK5go}fjDGt-@5Hmg>1VS|)2IPjhh8?-{ z@vII0;BX%rW`E#YqXhx;C#c-%@>O$bEst0adz}_JLNQWAaW_ll+s+S&d0KGaXFWBa zA3An|tlK(TE%z8GL7Nf6kOilG%|f}oT6|i0g3tcLYe7fbp&0Ly;jrw2(w?&$5!IAM z?e{-XTdtVUW}%yMiN^r|e6I?wTd+$ z?ro>_vbx1rjqh#C?zgS}N@3#BGm4lbep5UBUV~Ct7=i=I{m@I%+bUdHJVFV8{P3bG zph^V{mEU!jWm_o~R1ONQ{5q;_X01vkLlqTliB>J+}g+bhLL~3Cr+A zOd}6V@xuKqz{P^{NA4K|WP@9i;ACMeDQ^c@$ddG6yO$q0NWz?mLb zkh%63q$*PoRwD?_bF<|vkQ z?zGJxDr4MSN!f1@DdGASKCg0*fVP?rv;*%7Q{U``FgVcxVzh3+v{-h87@t>&08U>> zf^h*WL`*iXNZ{f?3z|wRB z(XMH3URG`Umz&qw)+tmV{2%4lXpa6qmv{wn1ckOp|B;nL642J9s`>0;&gFT;F zWJOm`>Nj){-RrZP1wINcqf)~Lo`wER& zbdJ{=t$?k3Hvpw-@}y)d!~7ps_xZ9Ez18+7t*?uYPiS0Eb^p+HZ-RYcgo?J3^2?h# zAHZL&hB*$_t{-fN13o0L$%oA)9N-7umOqUsr_4TdA~7@cxz7e*4!SX>29{LBU?t86 zFqhiB;A@lb|1(($2+q*{nNpbg?+?CiKN|Yp(Pbf^3x+!F<|?RIc?B_$D2abb z*hG*KZeIaE;n$0@>tFF0Tx&Bdu92vjt4LLo;knz@J3V0Z>d{~{;_~XQkaCT;u%jIc z*8YUOphH`hQ{xk(;Lqug+T#mP48c{bKSRDZe{Z@kL{+0bCJZxxX~h4COIYU z(}=99j|9@YnuAU-qvaP0UzPGyv&WNZf(P--rmF!^=-~4{H_5fnSp2NX=uV~aUf}4z|)Aya$V4%4!b)b{(-1m zHk($sK$v+rJ^S^I_Df8@>uzU^YVc066k^uLx3*EiO`QpT+N4gQ zF?n6n62HA z8EwRTi|=`L(`jl3x+L1o8*M(ju35ibA%njVD_q#xiU~x`FYcZ(vl!7L8yboZo*Z`e z$hp27Nw#@A*>bUSqpq%SBL1_cs$c#A-c*d=x!0VWtz5|rfqclbDgWb?A7 zn}oWhkidfq;e(~~jp%Uw^FcNV^I6Er$cV*~f91&H^!)W0YVcL3XFn;qbaHWBCCzkU zVd%f8AYxJB!bBo;Jwfg8dxpim28KfY#^g_oU^ zj{;p5Ct3z2Qa8evVFqSus+%JLVk=u>n+r1)`FXqO!00f8H_ZpXGIE9@BAoW!mqJ$l ziaR53gRk{P(07|GX+DK@nQGcl!GZ>_MNnE1ldFZ|pM!rD3d9Vts~ovBcP5!y!?=&c z7@Y$cR>7@(h@!VB&Q}pNdjLfsM&JZq1fPr-#aoX>~Ui4gYNe} zdW80H8@E(L{AnTT;Tt-FNek&l&+54>ARGOv8#U&IqPwn&!7JYcW8g%4ua2yY5wh}+ zc_&iH(x15|74!ljvq?#HeQ=5YsQTG(!+NWvqJm0t!JeyEc*soo)vsXJ+$E>W)DXp5 zC4muhp96z(5aePXf-?zz~^U_+_u_iXYd z`V@z^rCAwiS(&&(enj0y+Kq(&76-7J3dbXlE)2kvqh?yaigm|9FkY=b8eEGMA#UQ( z?GWR2q1e2V_a8>fA_F6)KF2Q@{RoBnT8=WNCO8CKU`v}M3BRyinWO{yOc(^AL7IHycPf=$W%yL;2-g1`;I;F#pSB*B^E}KQE{VD7f zL7xylPfvQe`i6|?`N?tUAzr(cHIct+zzI>m7earxAkY@mO~2>kzO5)^1N6$a+l{z(iI+z0eq#g|{V9YA;OwC;%a?AoJ*mE-#Owv{IcYRXwIEnAKI)+>u1UTwCd${| zhKq*}WUDDeVvq^-fL_6@n!&ZLpJGn)RtVM0J_FNYGWE3QK^X8fYh`0 znTOB^ef=yN6uqKd#a9hp1u$}LD%Et$%tnB^b(2ZcLXuzrbCVFfrHNFxZcqbD0(; zsb710rq&B^c3Xtu4FFsVqEsb2cW!+8+74=$VgMvUNmWt}=IX^aNiTarFl^3ow_BEl zuS-h_?xO!WJixVAPk*FQOVJEN-DuKvU#TRp07Qp(mpXM$5{chC|!ej410`yd{# zp&R(Sj^4y*j{*jm+04T$BCFNQRXHSXl@}bI?t*KhXukJ9`972a7k&^TbZYkU9mfX= z;s=h7-*i+X*!0RUR#N~ggvBuT=THf^NcG|x3Z0bcp$f4H2-=|jpFbYKp9zxQv~gl(l`XGd{yCn$2vw{Ax_oDcY%p0)EzR7 zbv;;vs7doJ1b0n0&@|hgCXjGmOCF=cxKL9!I7=IG7?-N*>P>UT(v;y^-+}hWYQP6u zvFKr~>Bj!?%D~g^FM;ct3UL{3mh`8Ldpz!!q{9KfJuPmQ z-IZ%bJe};+!V1s6r?OO(JVZ(_6Fn_DJ3r+pDe$dFKmMr?_&tmvyhmQF+rJ09JQQj}>`fif70*y(3kEGvuI3h?vYOj2*`Xg!C` zqOkE7_nV8tRv3LmQI8K3zJ77t5bi9_!3Y9@8L67DyRXh19;r|0+9u6^TF`vAnF-k{ zf~)OjWYbcJoSx(sMWmCZGY@RH&>`*0otc<)Q(bV#519rXH&SQ|y8T+jt-w;uuXZORdqN@$x8 zPiF^02gdIK47GI9HlGJ<0KCnZ=Ag`-Gh?bTE+s%@s;I^HXyZyoci3008F$_G*G}eG98fpq+2Mp2Fv_1x$p8h1kQt3G+qq=XG z#?|>l*ihgtEW~OPG)5+zCJEjdg5KU{fG~1VlE8izd|K~mzbR@yF0lqeIKyavD2Ec# z&)Hs6i3^3^cA|esJS@3wHTd|WVD}o=ufJ_<4#6vtTo?833+m*_pC=145JB;2qANO2!rnP-87(BjnsVHz|N37?3 z;5-CPk4fD^N__JSx&WQCeQD-rNeKAMW>9lWTRtQQNCFJBzz15vhWN zP{BJDg_fk#Q%U66#h`uAs49hnW6Zs)QdOM$Qou&K!Iv{~m8|>PcHyAo$s#fVgQxd? zibfpJAd;GazVXuucuE!Rl9m-?)=B`3TmL-a8%-$K(Hr5fPOF8CEXJ1ueWx-=+Swt! zHTdd?6lD5rku=b6cS{C;)W9|^1Kk!8)pea>094Bk`eTmM?=C8jLK#jQouX9HEQ|Qu zd9NBSK-R2D2weYBV_u%d^z77%N^tc1(WRST1n^VcC(Wi`bLdfkWW*f9SNp`4RRQ(W zC&p(KyAtj64yRr8l+WoIsf?++Pe$|afpuZ6@tFH=w282>--|pT2T7#;klebpLvf;h zrUF+#C?;>SXr@G*^!L4oE7% z*c@z)CP^@e9BWD2DzCCeGjQC@bqjDrAx@p!_;T4AJEC(;q4G$5jpm6>32pl@%F#A= z`@klo(Q|8rU)~y$)K)FMFJ;w{aBz_oua*oPNno4b10 z%?=NheMug4x%8(Mvl@{Yk!bjEXsf8Kvbu4E2b!F#EL2~Qco|!2U$mBCNbDF8J~9fI zZv!9YXWeG~zIWQe`O%VxAGS#FKgcWrh_)0nFdY4NK`;#!7S>gwGn97jfrJ^_t))jy zGy&q~4{Pu_uK_{6pj9kCaD(xn<_h}#@GDBHF&4_MOZO!*QwhzHQ_Wo4BPI%!1RrE!C-;oA0ngj%~K zqGbrVit7G(n`hzE^{Q^ltPAR-GG8qUijZ9hHejymh!s>Nmy-JD6PB41rf<~0$HU`G z5g2G@YM&#fC-FIwPAhtyV%8MNuz2LY_~PT4zQ%9hR|eJx-LflQmWN5tH35Zrpb(|A z2Vf><@PWU8nmtkN9TQ%MYuwL15@7vX{FMc>WWY^xD)EMb6`N~4Zk)Bl_u8Su(SXA> ze$>9xnDg`+D}QVp-||Fy$WCEMV_xMB(2ZiF<6koU20wH>8g;OG(VUU}_3T!kO2@bT zK}IS8sHgl8L9lTpKoKg7i;AZ1B$8j48h2v%Tv%+b5+ZL;|4DA^ouA_pXV?I$TsHV| zOZyAWzwYY`T)BudeV^m=(u*JWm!WXMK09cjCCIv4S3oL`8{}P6pMKbX072$n2SnZg zZCPj<*qsT<-MYmttQi0n?$w-HMC1~I;J0^Juw}gYS13x?FetD{$p!cvUW#gMkvP6tv2`>-;6+uTm9TlnK7qVb(38 zxwD83u7jG*oE92_F)hL5etXzYYJoc}7R>TbLUNfqSon3wcGiC~E{g%i)thc~VK>~S z;NCd;F63rHj=P+Tgf%ML6bBEC#z)IfShU%YwaD8A<{kb!#QIN7(i0qpbk7n;8Y(`1 zkfyY{Gd5Q-I4t4aXt+-)9$oG|Gqu?m9KCynITBd3;L9liLt|%C~&rNRM?HV0Z zjLZF?C-ZLCi5lY|u-YWFd;m1o1SmRz&1KyP4wPh0wtM%k+Dvl$wdH*V7zi--p+4Oy zYuWmR%oIJDXgiifCpzwe{2dni`BlXc@LLk zo%ZPi&){j)W`kD0oy>Q=E-j=PeV7`vr#uv^)RyO(s<7KQi`n*@-u{EIgH>ThsxPcT zd#gI!)M`Gv%_KK{sKBCdv&X1=IrT5~F~;4rQVmP197FJiE9;&bUDv)BI7~YokLx1%Q~MGO!qkiyR`Ca37<7dga+; zJHr2=6Vjw1kNo8kr%w8u5q7ETu9O=aspv4Gu}l+SbCz#SNX*L7S9y0G#m6%D#jorV zB`MzI7N6xVCD^i+ki+AVkHNTlyAEYp@_4^2;8fg@0J#Tv&Sf2TQ3o}MTBsQMS_W+w zlQtMo3(2UF$diI8SNQR1QDkbH#zf4KHpa+eN=& zrvxSYdV6PQ_2NLI3Ds)aN7Q@#bj&)ELc<4P{_K7EN=J8@d>o*()*74|%)b_NjIKKb z=tw~m7hhC2lhFH;GF7ARmJczgaDVc+u2f_^Y?rG2#Qq`jvBuQCPx0~7Ep?K!LiYM= zYs2f_33OU#EL&gn9!wT^Gm09s8KgJgI?+a)X!rBlqyhbx^K6LEs;3l5)j?Fm`>s?q zi+3#<$b>6WU4a5rz|zFzAgih?KH*utn;^+|hOrwDn5DV{j+kMUSAeit%=7Q?_-b`! zKTY0qb-t&VuWD~LAC%~X=L|sLlX$mmUU;R=H#xPR`q*i{dml2AmBR;*Z7r?fRDkJ4 z5vFR**H2t%=Fr&YhZS(}%`>CKph5NEm12@E3uG$SwKLf63}!q;lBaJ6OZHPn-W;51v#`w^Omz-V6QeRxaA z#nQUDz3HQJuI#JYj4xkkGpu`maDo1W)^uLe{=k}jTQxJnDbDXF;4|l2)EbR2)Fk_o zvO{)=zkD?LsN}WB#k;%p9QL|6Cxp|_h#b%FE6wAB_ZgC)EYz~Tr!{^z-Fkp@(fNo# zcl7o7qayv4s$?>E{OF9CuE+T;ZWG?Cc(% z!tsXmGsJQu_DG~G3Ky2L>qM0mk-+Jcc>4K`6z7e#zzCQ2kc&1oMeKan3*(K(KoxUS z_-`@)PZFtfW{%}j%{OAGEl=#OA}f+zhmu3yIt$l-B&NGF_6yx#Lo82emF66_OfMt} z(|q-z=T4nnruL)HN+SkyT3t7p8e#eK@$Z7Y>$lNsIddRlKW% z9fKiv#&Xh0h0pvuJgjehxf5R$>h~Va5)ARgM;nh}p*5y&fnk*>%_MvJN* zqHt1~yVwSV!z&ST7QcLKySyC80Jw6p43sB)IU*PX2#M;4eg_rY2OiFpo&RF?-Hw0B z@YSkOD_>9)Bf;aGqpXFK=QZVH|32Mlw%vnV&M`7A+d$=tW?8ts?2r% z?%EHyq!{7l!a3=yW1{cnyEc4oAx{6@E&;kVJRQ}G{$T9{bkL8iE?GTkejBqDz|2m| zJ|KI18dOZBp@t&NJ?yLSS0#{jfQ>K0nqt#UfY){{# zj7U^h-VebyL{@Ti(rC16vAoN9(%R(|@-J{*JfEtgv_u&LkhWS@iu<{LLPsk8&{zQh z#nid7-r0H&VW_*{KP4ZE@&GL9wjz5RKdHy1oA{tFe44*8H(BUlDLM;YoLQaTaBVm8 zzfadEkY!kwl}4bf&+yJ~)s}W;=|V05;(t-(E@hxpoxMv(CjO(`LZw)WepeEzNCLSN$su=#89|-V#pzx&0qF- z*8W;<05jdN&2EZPJi{Y~?1S_+43xmHf`ykC?d&QGfr#wrXpZeeWlEa>iwh*E?P_v6g)3+G1vnWgPI2V3d^1tN zgQaELVp>^-wf7i9yaoQ387`=74WDr8f7-!BKe>rGps<&LrD>{rR`>8DO6P zGRe(ac9&|b)~avB0?EKZ_G`ShC_%`Q3h7W+Rp#6Pv|o&W zXisds^$p!*WU9l$gKQ=b*&d-bbns&yG=fsqgMA04rJm~-!&D5&WnBGWQvjxA5)^6M znYsn;uJ6q_(F9LFsT%CoW@XL3Ar&dl8q;5`NXFLa_0bu|zLb0by%_ENWcw*q9yX;> zLZ@La=%QZkR)Fr_R&h?xWDul^OmeUfQrKLsV!P7~CBP2SJ5WaFP5bq7vG{*@HcH`b zQ11yLZu{`hF5!PSc($4G9p?8N0P-2tY%HSJ+sk(x%9zQnnPO7CE*5ld94T4kxgPSq#BI@R#_-9bB7ZqH42! zUB-dUWx~{j+~4dAMj%*W&28V2B_f*eZ_0kl(98?Od5T-(X5o*{@uiuWYEgTIr?cua zg1zKX0rmC$^-md@LyOR{N8%ywY80oQ>MS_r&D92w#;9DkqM{`>=e0O1 zfXGdMZI6SEZLCtbwOvLNaJ)nxV+R5mPVD-A$*t9Ncf>!+69Pb@D^qtc?$bk)8FmG8}^nWn>@RM4b9@dWS z2Lx-)zG#_CISRP6{Uh|@v}Ao+Vq!hV<~+K4s9sey^{?EKYhEpT&74(amq`RGsP~%#?bv{cTC$4s zQjfM6M($-I;_C8^8VPW)Uyn&xUh=X(`yd^R6Z?M1!*{i!*m{>>%t0`wBP@~7OB_MP zv_Zk_aYUM+VdyIgc7Ar<4C9iws#$xlzSnhzjYKkZc93{4QY++wsC%Q{zrFr!0H@wNI49&Y5T3w9u_=3jcEk`Nx;)#|rW`j8_ zlu=Uv|N;t@Jx=wa6@}JgVtHmxYIqaGfmAadcE_>(r5BcPnqK{G5*LDAr0H} znlMi=MAB7@(X>#6iZ^l~x7CuoXo2sW4;*;rV0)9<)U%Da#?kTr_xFl``M>?m@!v>a zhMu0(g^m6KhUj4KE0NRM&i*dj=q=maUcTxtypksvvk`VF+U*4aWI0HyfEC?XUcH*S zwU0tj&l?HhJT{e-4^pyhilDtc{#Ms2rm_5zLe*v_+FcUhDW&AvKEp{3&IiLWtJS2` zu$-Vj)RbSiu^`4JCou#GNj+#!pXF49Y~OcxvOF-2Zd#ZZY)0vc57mq6XL{(j1}&KL zrT6)=CYXCm>BTixq&|l4oH)XnS7a2i=Rzj-_5_lcAqafcAjf5HS~T5qKCoTRaS*v_ z!F<|Nt~fy-%6)xq0m_nHaDB3ytv5|tG%>d=fyUZzd9;6aGh0&vWD*M4$%^mNO{)D7t+w@Xrm-M)(I%Rv=4P6?yT{_e0pkwMqwKk8v0T=*!sbU& z-s9y2+f6Br6}xY#8(iS#r--BChqSY5hpaG=a53mRc`H0EBxaLI`V5IR4#^bwUkB#@ zsJQ9#I}Y^4%&;ALuQ51}BS-~E*P|`2zfO=F4zPR6%|GIzns;6(aDF5jshkp zAOEA5lU*HsN6`LP>aI)or=#LwSKG-sblb-C@2Fs{wKOy*KJ_i;(^1Qz=6lvs04vDy zNe^A!D<1cf7BQQ5lmIEt;N3(hhX|i8@oI6nu1=}@dENAdO~_By)rubZNs} zFt#UOgO*R(^ZP1frzh8#)il1?o;6yiiBgVsZfVn&?&A|BE~t$vHqospg=cE^HQ)`f z;zumymuo#P_CXhx z!S$0X5{505^7rps2myW^xnU~Ik;(u{fEF?kS1&<}EG>oLyQf>XECN(W-=w|_+|NS_ zbtFI)F4f!#spX6NsiGI<_H%mrfnk0}h?T8a+#*F_7wSPdAa%aw{z}bNVe5sz;tJ|Q zBAal`P+U^x;2s5{1*KBr8F6r8e8mj9m68VGvPJuHhsfnYHoKC1lV53Nk4Zl$rtU_Z8Z?0}04bV3!7 z??FiOSX%mjVSaw6?}p$-4UKBo*@j`?2xIdZ#%aSMkW9RD2h!a;{T?7l#e}lE4%=s& zc@vD4Q$&_k&fbj~y`X>)rL*ADycRU65sb7Ix~j#6E$B7`f;5k@?+tM5TQz%JhooluaIh9&JJ*0;7{NE_W(BN zM|*KSv*kp6s-q`pjg1QW59#^(Nnra&?F6F$5)v*N7`P9f>S*-YXuS;7n>#~gza&Z= z!PaR2o*ox&Tcm0Ci1STj`KL`_p~Yt2h9a3$FWQ-@c8HLO+x$BGTF-!;3KYJ>P!R;Z zF!Xeq^upkefsg>mAxv%vSbihgL#Y*ljhyO55LOiJ4=tQbb6CQbu^ew#%(9ITET#Hk zGWy6e^(*{>m;S*UkAIvEAV)cTknQ~D({@%XS8L@9Ug@h&-lqut5MNr%TyrhTpdI9} z{T^;fSmiQ<8znlWXZzOig=FnBCTk4h_j$a#nyNequW6VGn?7|-I~%GC!*2CUX#CRE zLwv2EUm7V7alnDgf)dcKSDn?Q3V3i@ARfN3@7m~MIY#Da<-fSG<#?%T&?;8Z;}oPZ zhy>Gy5#JcS&pBHwo)nRpF`$|ay)Bg_otrVh12gEO%e*PIU6KnJI&o@9tgJ@mXaCK- zmM)Z^X^@vbElrjTi+QSAeLVU;1ZFlv_oc4Jp~^sF#`kIff7)nCVra3o%~9a7-HOs zkg6_}n86D_KIU+J+t9<$)3}KCBMsvcGOFC@nV;#`7q%WgtZSA>5ryF~`vGyY8+?s8E)o#9*oxL&3vxV?5wP6oRQ32)F9BHx1nwVD_#OiH@O5(dx#Pqi zG{y7)dG&udW!!1#NRP?k%TqPe2bA8mD1omU`StMra9zw*Wp2r;^J9g3KeP(KS(-K930 zuGE)XxZVe?npuq;`;2wU^34joXc$p&)2oi0y#l(~?(S?eCt%3r>}7x#$QX2CG}_#j z>I->bKr_}Stn?10VHRW+2?~^z7f-qk__K}_N5%=K-$tI5MPG1^*9$l6xCUo+aox?J z69@LiyYYMcXBoRu=aS;yQ5h2r(CoUto9l5g1-(jnp+7nht0=`6+#gKVCr|1HR*|Bw zI-3^i5_5c(AfA(YgpmcgG3?!WxAeeaB?sX7r)8TC)nU_kB>lCD)+Nyx5WW;REJ&->v2kxJ|L9kt6y z1y@+3&P^17+X4GYu&z#{`I#Fq+p8t`()xZ(8uDznpZxB#HB5q`J?uJ2wTR|gDtOE^ zh_l;K_IYZkIP%dFIw`99t2$Ly^iyMo@$bXcfT^%Y;(+Q_Ln&I674z~Iof~isr8)ys zBd)!~iH4l-H?druw|R&@Gk3pKZ$h{7y7}xA6862zva&raNgGw67YwmprN3RkNeJ(t zsYDW2*wWO}Yck5xg+!GEMXF;dE^*&PH-BH2;I^|D4HgNjKTSuj7NgsM;TKZziS=DH zXOy~Dp6_L!o`qTxpo^P}_|_aBbk*#Oo_|6fbpN!47YBzNZfLv8)z9yaGdn1$ZR_Tj zhgRDuqjfYBXpS$EMg5vUpfwwf*z)%^nGHK#X-w5aVj~?$nSna#-^ZnW`sk z6R=2H#49Yd&T8BcJRgfTA@@s>-#U7@&Stgw&Bc#CYpSvzZMvMc*bitrM{h!oZ%;$Y zE9-KMe7Q*K{!(_P;i_{@nr8Fk58-;IZhqMP-Jo?pkggRROFpn$hGBD^(0^B%{jJ9q z2gTZEG3F-Oo{24fLwobdCE*f#j;ETKfa%3lJpaIlS_22`kt97@g7o*jIN2XF# zVk=Ygu7_Hm($F=evVIYYVC~haW&fk7JSkO{1WFR`1BllVyX$TZfvzgMoV_AqlqX{ag5wluk>cff6~$bniqiVo}+{Lyk}j z1a4jwogRCPI}g5ebx`5}ZC-o{^n5?ExAU8iWi&g-(+EFO_T`c~xOK6sDY}y@_{`gK zf6k;=Y>}JMl0`s}2@~=ZfuxdN^sJdzo!p;S#Wn^8qIXZKo6dKfS^#}^#B^S8+?6Hd zQWQ5-!GT+^vPTO@QGQ`uNC1IZO6lhH05h+VlS$xR%FlNVnRqf}-e{qsxqUr*6VR-z z!g;g~RNC}1D-vLdbt>77?>5Bf8&<3gfB}HB_Il=AUgclIIh!)ENA(bdg(e`$axd3e z?Aq>`QO$=SS|ox1N7Txr0#u~7p5`#{;4}1Fb|3Zjq9=DhHDS-3ue!GS{9-6*0d%0C zay8`*U!OWpY{8@&2p@@Oo0rTP%KMh=vfM$rk5)a&EC>u^RumM zZ&7`#7e%lPn*~$$iu9Vf;r}c6GmGYey!+4RfH0v?${Vy__?W-_7#5Y%1mE{1otdvk zt8Omz#By~R^kws&xQt(}D8wdhPLN&c?2C! ze^b9w(m^1ac<>Kw-hc3_>a+)k@zoipk3^UVpKE0@92IK|xSDB_u|d^hgn=bY=D>vi8(s1>P=m2Y*cwK(}rG$+0Rh`^@*`)_|F#_Uk>i{9Vf3b`%Z z{4(XZN${Dg#Qdgc%TO?dc{~7zLjoAEAIf)4fqI_Ip)?aRn$86o*#%-Sq~qe1*l)YW zg8%m1FVo&O`~SBe8(Rffh-1z(GfZ8>Zg^zcdVS7K8((4&1|>i|zD1`j=F>y1m()Ob z?Ylzyl=XU!3K8U(3StE!!rFJVmWf~m9Vg38ZtXqNN?bu#$R!C}XJa}p>)zo3~Cm;BEfNCUkGJ#ArA@7~KljXZl3Y^_jAoNYP2@5%w zvcq;lwY~c5A6j%D!2=v+vqetdnrQmtFr5@MmtI<^qF_=D-V@1-U%Z7O z!4d&<24y5@LuGw+!w(eHbxh&jGv9UE2C~h{D8sFS$-r}U+#k%{elj!aCV$1|wO!C- zwkw_BA|YOT`G5~_ z1liLMc(cbPWo@(PJlO@pbhqIh^pCLGPFYK!$zFC zK)cD?MrM(lA(Fd4t8*Wv=CWU^enLH3-|jU!Msr)g{2@?9rGxcf>rVD}r|tfTh-5Ee z57b<_n09bFULNE!!&+KI=#!MI+pzI+`tv1WsP!lVYQlut83n*w3!lH_JQK*;LNY5y zVHzxw(rTJmd$%Su`=i8Y+`5d~v~nw@EBZe^ET>hY>o0sJ8BGnr2sMi~e@mNEayt@l zMJKGCJtuQYo*`E}n1d3sCAkmIXPP_eVP8w}H|NK+sb$1Wtetm*Nt-r1@RbQdtI6`f)lQbhCw z$M~ZL48EREyJH4I^Pr%>`+A`vo}Mb>5n{T*%!R@sPGJz!1~Ce0T5g-{r9eskXI`LL z|NJojuE3}E-U+6ErGn0fQG9y>;Jyd<68N(DN(C#6R3`oU1$y)pa`iAynOzq+*<`P* z*-~nnGLJc^>~&p|^wWs1TXC=ddO82i_|K+OD@>OmWIIHUaCh8U+kswT;LtKfI zwfXxGqvycUKnNm)GB6sjpbrqvsVzcz7NGPp`l8Ds4CxC*(v}1Em;0j0%HUhlGjwx;MOn#@hB)D zL>r-{@jzYri!U*uVzjUfx~9n-Kdy(&V5k&$=~yA5i8Fdp5M@{6A3fb86qnP;1`DZW z<#?kxLI=l3TEKKCqhu?N`v%|BD0`47KR`p0u4@O3z4q`GRta4Wid?&5f$7djd4CBV z%rz7w<=dn;wpCV8E(Wp#ZLvd@YQ$aYdKwgjw?D=gvD-}&C5UtQ5GjWfipePgJK;no`w#V1~7e7<^j-zlty;glsT*E#Jmvt#{Qx>p%i*_zEF!1-lh;%wnsPnL;`d7 zVoqC(wsYzv?O73?KObbVH$ys&Hh>yqvOUrxt36X|Sq;IS%|vsX-gOWp>Zv|yp6O1k z?6JbGkyj5EJQ8X1&+$=wd7vs_!fc@Xa8501jB9vALXBL6%77S6SV3#2EGhSFqaC6^ zBm~NTxq~bi7h{Fgl)gJJjLo49T^kS1HCt-#~mo<1oreENiI+T z$zpnP!~e8PR!eK=o1VvvrLSJawn!9DecP#}QesuRFMv=yWRGCOVEy5M^?ePV- znqF46BP?W0&zy`yb_y;vUYSPmKC%WkvpL3Wsv00L@ZhigZvu(f?#9FButAuYS9*+! zj0fQ7rm2ucuSDhLAnEqJk9Kt=K@?@o0L&EiKhU(RM;M8J)*6AGcmiISus zpZMp@VlUir|E^;;#@F#y|@n03fRwO@Fizxt!v<$ICe2; z-V3^Wk8ciX+W&Wh1A zL}#BHuqZfk2~F6h(TMz07i=ZYa>So!D;K?Gh0g`^oj&bwas;6QG;Z6HO2j5$Zc?dH zDg$|nd6HVs-xkmQ6eA9(4+)kn7b8UQ!N%-bZZ-P&uNHn@9?9=|j5r)>NB&@2jI^2- zgV$}X|7JF096$Q4wlGpOJb<_S^ZcT=-<vKWmVHj&U2G^>@WPh7CL zMmhT(otnL`MEH^J(%Gvl=_jhwZR2R7teVV67b=8j><=3=rUFe{+Kpi9pyxn3n;rp9t{3i zU-QOee9kW1Nj4vp9(F-VM6}8#l0;KgQ6^>xM;jmGeYp$_Y_*J84BFG*ymAiM~IWmxSXuXeD@(-5&lx9}QuyYjY6LuH&HEWvB1n#Rk z;NAk4oj)Yc_GUYYqRj}v)gF)5D;|py!&%ple}UrVV=n=JlVQ^VRBqpfTpxWCoSzLC3U5je4lX*P>EueBhtqPjP0OI{Y-?p@!8IZ7N^a=r~h0ixnM>KxK`f2I+S$ewU1cvf_G-M@?7go2j>j?`5#_e~&-FJsuNF?Zcl?p+@XsmMT5DG!exxa&<~6?A;HyilIT( z5}G&bo8}a$*nRCLig%o3>{$F)ZU6UPu-MjZ{p-lk5<=DoJ+zlj;`k+(R@G+M)R})o zcrehsQ8;j>;c7T7*<|4j)SXRCBSDC(=UdNZJPcWMvM8ThQ zO(_QMgMv!R-gkKQ_)~-)3f7M$S@=Nf&48z9&dow@s&S%kjC&# zKHiUlm`uYjL`>*JpbwX-%zJ}7Qg6AAjgO6l3)P%DeeHt+A_l!uECE>si?gbg)He*T zjdYQ76#ojj!co;5z$93W>y?oXcX^bx@QpGD!ih2YtpMTYhvjVLCCu6d3qtS}F;g)` z018{?+bX+catuf?3?~q4%{n<&zgPI_``hc82d|u|*X+xb#}IF}-IMVVB34&aO5Rt) z9k#=u-=R?3AFsNT8pN55sS>CH5i1F_I;^}<4Z9*~GZNO)CRkyOkBmjLfXmG?Z6|JJ zb>aT`7*-ol*0=jl@*wh}2Ba+C?=Gb=90YE9VFOGHF?2>dO>#4U--#g35F{Bkfyjp{GEC$`uk#DeYnYw zhsjS@@{>+c5s4Jrw_H(i&Z*7L! z8tFS&6kZzcy+0b}(8{lA*>4aH@55}=sbeeQn)DHT%T{^Y-|+JN58B&Lm%_;1E!Si1 z=d6$=iktO`0KAJ4=ppYJa!#$0g3k=*JvK5kG8t3KV4_qzF_zb!JpRrN9gJ^8O;Zph z;`YJ_lJPXzVq$?F2i+3>z6qaqc;omH@B0>Fa)|4xsWlhlT{GMMpHY*cIBv@mc)|RO znKO&Z4x+lTvzeXwBrt&L!IqQ5D4>lR@<;J9Vv7;**T-|mN}eHcAw6C*r&9gjFO{pW z(z|yz4>~*j?igJ8EXIc%oYgFAg~Na68I^wVLcMg6&c8@^@hn3b z{ZX+$?CKX^b?Pip2o)!-rNv;JPo}O)nR{_|Yu16W<#FZ1&HoN$>$T4#oVWm9Pzl8% zQ8a1^0lDsepMmnF>x^d=sL*TVo+Bc_vN7t7P5k%ut)AlAX0;_WdRXZ~Hq*^cks)dI zDu|xIKuy9-pwWHLruf~Z;l9-=fn;ul~04!LPUh_E5C@! zpadJ>QxYg^|EH`}QRt)(7QC@p=^Mjhq)cn{EpoF&J$BHHmJ}Wkyx9|wui@xf~ zt00s&ShEVcq^TlFxhN4Mfp4pOuq%Y~r{XP*oG8F86tJBCsmQ05q?tcr_fEW?*;7x zJa11&SXKl`_kc*jNm_N+jUo*6$YtlyE(0zTiWk>_RO*C8n zw%ql#Sl*`z1>DcQ=JHoTsv-8AGz|{}iRUwmz9(*e3wC|A*T#&!V;1fUMUgFyeyFa> z3QE2lMg*g8i6=E|MQWLx|OBcf@C3VQ3<3>PT zFP94d1;t~(@8|P(F{!vufV1d;OQ_`$gjWZQRN*d%#v65^9@M)LZT?6LN%|i$LA=ZG1%bcQ-R)2G zx%sncJ#a^CC*Ly6ShuwwEuer1;D_jFx9ZXLENf7=sfIs8-szyQWFK6Y%tOT}lP-k5 ztghA?0m-bpwY|7VhdXvPMAV$$@rPtJOw$%8OpG9>J;ivP;#~eC8|O^L1OAx<*ykQV z?HHPPNe9x+;CTCpaZGrvjuHq}WBSBwFo?o#@)EXg|JjvPbyn-b3F}y}1v1}yV&uiK;tH{Kx$g-GO`|Rs@F4@N%ERBhPY_+hrM=iDz z(ho>Nm#}kzC#!INEacV7y~saFyOQP)5amiJJ6;TKot*8{+7Y}WH7D<^Uxjz<<1N+N zI6bRM``m&1y5nnbQ;v3aYr!**kH+CKGMC=wBf8IgSG7bw7ZGT@frT?2>w^_`Y%-~E zQ?z!2uGJPkK)G_Riz?4js;Wv?5T2Ps^k1Z19C)+tD*)dLQ+aG;40*s0mpTYwZG=7x z;DA;=l|u!wakQ{slU*|4O@?sXUZAIK0VGBv<_LdiW3Om$D$L0q1i(Tav{R`%sc{Gx zhc}jS3=}l_++(}S9)QK8e)EbS6*e6g*X#W7x-x(>l)VKoR5sYrXLB=ohUFcqocPCO z>6VYTqIj57d1L#tm?qmx*6uDGAImg+r-J44cha1vN>~-wFc@+BP`#y7(8BJc>B;mc zvm-fluaSqTmg7uh|1~ULj&P>vB|u>`7orQ!p4D3(WST4Pi^l5ad-!TbrpzOhH|QuK z6WW&eZ*m;nDXJWmLoUM`o=P2#W?6jGvnJ0Z7~QlMbD&0rPbygqoD&hoT{}C#rHpKGWpZ}60fpbX42j@l! z7!U*cPrD08%=f{Tb2Ft$rS8go$E)I57Z>Rx?pvE*qpq|wO=nrui>dEAR57_r}d;8-Ic^ zmA5}W6>>v>&C>6$t6UxM@Bz$P6`*80a)Q*p;zN!1Y*rHS>x1CsjK`0B6W#Yr|LgSf z{M#^+(MCku=f=3%Ipy2S6H}(jKXOm;sMwKjq)wjy8JoT*8C9<_r`g%GzshveMay=b z6V^?vG(aqP7cIjOgG<8W&75-+=&xv(qcia6GJ~BG*|jC`_PZPJp$)W|o%(Ee%KwWc zMjKez#~6BX{8lN5Tdz#aVjK~opv^VoDF~49mC|*3Zm7J8$mkIITMkWMO$DY3ud)T; zJB~d@uOQ2^Y2HTRS5&lI=rBF->xM+?Fls6V}|m9#+QKYk}U&Zb2Lu) zW6OGVyHRXdy7~193)E6A->NJAy8Y5K+P{xQjxrYH#dAX&z}VOE{Rd&4$t=8Hf8G9v z#=1RiHi|yKEP3|~BbGNX*RPJU{dYN7@tYg?gu%7MsAY+Arb0(EWTsBlJD7f}L=QxR|mJ2D)T1B?GwpJV$`~^Bf?pr zdjA`2kZQN~Te_`W-0+(Py}`az)5*?`4wM=(7V@mk+W`kb0q0Hp9HWy2$wnBfnFas3e4yrl2cbdT@d*$9xpsj6h7M$P_xOV7u(5UM!GcT*YE zO>@2SDyO_9Ffst{I1S+I4GZ}LL+wucwLRPOF=+a-V+KtYg-h8%j2Iy{ZA-Z}Ed1s?SJUQ~#WbG_Z~> zdINy;aAe{yc1|vRtOG>CoJF~tXAm6LVV{Qv!myM}Pu(=n=u%Dr4`$b)KIu^GVP0MJ zMfev*?M6)13|mJFxEqQ}*Q2z18((D*)lA8UX=__}DRB8`eqW|p(I}9_%rXCri33`$2y#wNl7$=vU*y{ z2Mk^52W;LmpHIXN3fnK%U;fR%-;l=#Xz(I`?as7XT$8%F#V4ps1TdlyOZ|A4Fh>(| z>#jcSmVrqEWdEoTIJ62?97Ch*m4|R#ajyi5_m1lC@KLH2KGc}{t5>g|+BTD$O`op(^2(vAGh6Sj}I5>+YFGgNdWW*kdh$?l{ro_xUQWw@fx*2u*AI}~CpGgmC&h5Eyq$X?~ae3JR2Lq#9-rkgx@c5!iHYQ>Mh zDAb&oo6v4hfPS%wR}8OEqZ{2ZS|Nds~#i$jkZX-&)KV0y&-V58XROJv16=u*^|6Dv62aty{D8J zu|eqRBH40ja=?g6_`#CPOq@kgZH{7a949kJA*NStEpzdQlTIb0IKT!`4W1uZW9%OG zTgMt7D+)7qgL$B(8_D0u?cSTQs0b#+iW?FSJrZ2iG7SIr{v~JvrsSaE-C3uu39sUyZBgcf}_20+X!MPM-q!)sOnMYHbPlSM0=fG#>nCoyPjRtUBjbK`Oj#ZH^WJ)jggj6}b5?Zxzwu zk*@}WkgWbpg;ts_71W^r91M3Vq9494kiC$7#-ESR_dG6M5|te3No;3G3q?N96-PX;CSa6G^gXip}4;5cu%$s zkXW$^^0Y$*Hbr8`vq((e;`#f-^MKmM&{_rCpcW~Y zT(zczHNuIPV+6THYz1nsEl+-!)cZc50_^kmLWWDEFT}$`2kxzi&H5=VIi#92Q>>~h zq`h@b;XMu7&d}DHSq}|AhQL@uJZm=|h|$}fIu!62nVUn*$m_bmC@4yk2O{Qh-Tr)? zsKn1%Iu>0wSn`c10ijG_@q;!4vtVuw)0(=7mW&y zuMZuHnB<)EN(dx*luFLEq&mtQX(?#b1P>cs4GE%G@e#H+5~}wNfb`9VKkJBf>Tj>) z2=W-yWGc72v+|NB-;TkjN5}!=g4qrUi7XL44D<1w<7QNG=TY|L zlaR4~$Ij3pcgGBunt}z+&;G=BJ-MwH^!np7Q!66pywPl>BP?OhH0U{+bP$=hw(p0< zx$lj2mR&wGaQpX$GYwNT^?h0Q`&59huevhCd`^m^FvCAD$JMqJ#d{|%o@80i zk-+`3dpg~rwiXVPa?PYQ{0aw!CuRfB5Sp)T=|Egaff35Ykuoa=nkZe_QkY1QXm3Qy z12>7hwvGI3`-J^l=U)^pGAuMA;w(KdWrMQgAvgoZz?l zQ*F-r4_8Kg%!DYSEI5A4nH$!g1 z7yfcf&5QqBVZSoTz1NQL4-nRA}7Vs?rY3%7NClxe%s4S0Pdk#R$3c;>ICC zot6C=3dOu>gc^`tc(5o!!u;0eOU0iwjDHKzfu0mxUWs_`1p_p_zg&)=R|3!zh-^%N z+2vChkZ4mz00X^u0L$B*KL&y9qu9vJi3W1hqMy7>=}vverBAMNS!&FKNMZjnpb_Iy z_I}iZG45+wwY{$I%1+drSAOoSa2Eb!5{;~dmjKk^?#E+}(v>oENZK>!GE6DJs(5G{ za4-I<@K6Qm>*G*1HTCOf+H)0|A|IDd70b7$B}hK=)0Y;8gnFpo|F~V5O&*ux!&$eL zWb`_`m6nyMDM}K^7C#7wmvQ*zHhjbng8;!KUBvR=B!CeZ30`z0AUt8!Q{ew0=fuvJ zl<>GHwZY^Ec^4dWBnhd0V1@qb9y;z=ihFI9R+W3HBPkoQi(w0kE#c-NpGdy){3W zw;27^Nx|_>pC5#yJ2a(Z)#b!^Dt*-%Qfl6*+ee!`myK|0k)gff*7BmnNm8{N zKo=b0leHj$F(}!Yrd;?w5$a9yQO^Ug3)rce-cB($SZtb2tFp^gdj<|I%nX{n z8F?tXoN@8bYX4hdY(re&wU2@c8`fqC`q)T?Bxz}SWI&10BCd6z>V5Ko&KPCZac>E5 zo|5e2S?WU5v&9uxH&$>lpBS5y95`?V90wB+)Ov%N@1zv-ac*~PKp3twu`>6D(btVD zq(f&};j0E_0`Q$;gVcpyXB7hmMh2eu9zAkKdk!ViBu_m6IIR{wy>|Cr;M06oVGN*@ zhR`+T?2MKgLAHDN31)35=4L9+#WwZ6OYDD1?5K3ykw(f8buE;dDKPX=?Dt>C5`TS3 zTBUPy^GzG!arK$J4G9@((`^Rx)c6AZ$|RnKBs?me#kfpB9-$USi~O8MOaxkaZGQAa zq@9{FZ%W7sSgQ}+e4@%XJVGcB2cJPhsj{j2DrLxDjq@zz7_QMy=5}t<+WuE=8hH70 zBfA*5;E_93+|Tge_x>w$Y5{%xWTD{$%jI%=l{3gfoinO|)qFQBYmY6|>M2z6q4~l7 z>!2WhO3Er$OaPB(xwXYVfq%>9MD#SSK{NBC4)AQgnUZWZc+WKY_|dNl>M)j@WfqeC zhj$x`oKK%>Hk~}wqRtqte#}$?0d}U)ziwiJ|JGa`KTc;zYkVZ$)#Fw^N$>M$fK%a# zZeQLnH$LH{x1i^~<9`t8h0hMcUt}=70RL+L^Jy{tm+wALkV83&b9`TqZd&}kAAYA_ zCAP*OnV|ktL;xMN=CfywBP0Cv^9#@41m$YK(T`5rqDMME8h~?_NMF(>kmuy?S+!HV z7|hL9l*ub(tb@X!Odd(JZMxgUh!0$e1Ed^BP{WYsM_cQF~^uPC$Qz}`0e1M2> z+t=MslW#97+Ww{PoZsZVw(~i@R&XW_TwA<*YaRGmYo`5@<<81<&z|O^BF4e-^sIdG zaqb5{QOB;*dY$t zG>!64#4)U(pPXYub}s3pcawd=j~kYkkyG_0a&{NLeS6n?%M>(kS#B2&xNesIwmPmW zJcg?4*=aZ?ln{Okm@K0e0$Hu}DSc39ltL<_{beIwNa#!EUFwFSHtF~NOPXh`qbA7G zyH?4*Pd{&@Slz}_$G>gPFGlu*dGLX$X!667=ohj($JPu4uy85~WMh?XiG6-7(Y3tJe;B>*)c#upWCWas%RQt}v#sfLxc? zl&&^80zreL8F>HDbP(*P2!*nGkd-;7kBMAb#;7 zXoLeC-TnTi>uhb^^HsuwL%=IA9$tjMcOM%Ha>vm>c988B^>Fj8j?>J+h#-;?`G5qL z7u8e<+zd#^N9I2Pj4Uj~F)cJEq-UD8dfk0N2joUdL6(mqfs*|JRk?pZb)J;$$juiP z7KD-KO&Av@|Cg6m)&M&>u@Al7aM3ffZp96)#Zz09fizC(geuib8VpcS<)p}nfu9Ae zZFDtOAZw!x^3bt3ozzydesGj%BbH)l_#m&JoT3b;fJTk3V(Cf+ zwPz+uNfWIe6YU}JD)4X>Y7ELci9DOn(}YT^?SgUa@KtM4NBKfx?d@JTX(Ioy5*lP+ z;N*-H?%RwOkuqXrEgUG0YzQ(VU8n@AVo(#ZXD`X4d4WqIog=XkBj8`?p~5{gLg#ap zjNw!~gO?WqcgKW|+rlu+$uk4!2JNmfp)Uo|pxTC*-OjrZ2kh(52~**#Xp}aMYvD_*Xy3 z>*a1A1~+9p8TQ8CduT>_H*Yj-IlHW)mF`n9nP3)MGmPoK&z3)dPjNnayCaa8%nBO} zyp3bAzuYYh%I^KhVsOkxA~N|fCOx)HyI~ypt9>>ys}@i&mcx}0E2}3$8wJUDm!MDr z1Y_yotH-o0j5X|o7#w<|S;HUa8Hy`jUHkD#eqbu?wkv{o|5N7mTIz#TUZ4#>E7?mY zPvgs9RxW#_zc^=y&vj#_0RF2@9;mmP#j3o+Jc}`KcYSb^82{(`3-KH0gNeky+_86C z=2u@u|I5^XF$h7TEJa(`eHmFY>uFHTFYg&!Qe1cZZK>`t!#rgH&->rqFmNAb1Y949 znrhcd010LVt?`r)yMNb$Fc^TqQ3>vUtwt~{l2}||*#MlA)y3S!K-4G>0ET~ev3lg% zIM>0aML>u0avOaja(<^pIOpc(e;NXPqpeqkL%szJ_;K!!)a!{Q;Fj0t;sh6T$Ro6b#PjvplcnD#;(+ZqmUB2>cWAC$k_d zSuQ(YlDk+6L!wQ&$@(keD27#TQ>}Azh;@?R(I))<*qVxuHJkRc3!{dd&xJ_!V;2H} zg;%_nBSuYE`^_4U8O0g98XT6Tcbeo4e`_>OnFnW?sB&vI;k_jjE8DNla`NpwJ3D>R zurR69>-Ir!S9lnm`}Hw#0Acy_G{MO~GLm z?f;Jow)>l4xo*yEbK&Cq+j%CR7JdWZY@fJD3}!$&JI{6;ydM`-=@7Vhxhc0qeHqR1 z_LOmu7S3Oz3|82Ts`miy4pkTLOS0L@PJ2wa;*|bd+F(bk`XJ}WS*FP8+ncLyp=M1A z0=EX5&vgmX3NpTi6jE+0;Zp8v{RMJz`#(R$$uSQF28QQBbss&_?0Jg>?j7@?ua|pl zi2+%v0pqZkXJ9c_AapXerpNj)lXDx~&R_=N8P;9he<(M2RF zBcpzWBCG|S5Hb}GxE#EhB{L09Oj6|Z1s79I7$8(ldSI+X-I9%G240X3GCf6=w zW{X*h7vy*~b|J2Hop^BhdX@>!5{W1KlwwPlll2;>T9>W2eUZUa6If9ksDT?G1JWZ` zv$H3p-lHW0()5p%eJ8|fy?Ai!kF^R>Mj*`@q^+83B}kk=>%^G0B$O@6lL-q=d@94W zqRU_OcDK%%C(0Y5d?Mr?^gAXtw(0ivR@&Cazmi=HlNH)eU$~s&@)A0r*aBtQtUb#= zb_iPPYCKtfQ_}IkE*DAz7?5)@L_FAt4l$E^bsXJ*5fs4PXGVT>R4wgKfP5% z*=u3zySGydR8Is`#KX0&#WLG>+dzB@a zIEFu?FfMv5;KX>}(0)@7nQ;+z`pefRGsEmMH5toJgTc}eBZl@BB`Fr~nLf~@5HtWu zEbCf%CQ|c89H)0i+f~`jVrP+g+Y6olgj#$!hp@!LeIY}h6wi-@iq}E+zvye)Qn0iA zGZ}74nX7Rtc?%%KZmh=pP9U9NZJ)&thME(WJ5G@G;1$yF;h`&s4sg6)pQjcq1flc+ z)d{P+j>f998FW^LZFHngj5pETSJ!96+83`sPdV`(8cqA4thQcOIbUaA^qNxp1fnnv zn_d-IF<$hW4ZNxB+vNx$1*K6lui!`cAGqo2>XN!Zi0-;G?~z&}hBeYTZj_z{E)$~6 zq$+8{+|{fCEl%=}`!3afeTYE~)F(`nrNvI02V2~ES+b2C9v*TF<5B1o;X-Atv_h-z zrP#)!QR!7P8MlE}_mw|-|LHEM7fnN{hVJIU+H{s@DVvR|cCWF(bTUr#Ud{*X?Gs*% z4YlimF%tt^#0Y*ocrxrWZ-tu6kBWeJ=I~Qlej2zkLs0aJk2dUl%8^a`0@(YeYtu(2 z9k8-B52x_C#`z=STuwM;p4mGwuXl@nOn%8X+aKMlmy?PQC&v#LBs?78dDvyPG2FG* z>ybTD3v^ZfR~PzbL7g-2`w@+h{L9#Y_{4Xj&r8Fd{5pI96tBf(v;pEzgI++bheALA zm!cx@Z}YuC8(jb+eX@(eVItQGjOX_H@?`xqplr54|6G#on|#-{lt{3T0Yod2M~ zmaeb7L+>jdich#I{tXn)3oO{J*u1YrKd__vUAZ~Cg9}t3Bbs~0O4Ul#TcRZKfznsS+>jx7DPap+^!5IL&-v9+e@w0biP}-XTo~ zETa(C{;D`Rlb4j=+`7(I%E&m6AY_OVxLjl1TBnttL}^~zJ_S#vjpqDpq6Z!Ps20^< zb)Rgn)l|K%?N)UDUZ3uEgab3PsCn)Wzz`Z;bQ`a7*K!_$r4v|@H{<89ry1KJlnX**A0 zLpe5DAr*Y<@^DDU%YdBVNyn@G^y>ssi#9^|F#)KYJXrF=t&&*Q+HmZ6Yh3X3?uWImpYMO*r;8BR}y zgd8u=?KO3@4LHud`0_eJ6ScLQWPv#55zscW7>u&4h&ZhyNqpB`v&rmM;n^-Ykr?U! zzHUn9d;T_`QEzT3>kAT)!Orz@a(g;1mzBOg?3QnmIUQ5n|GlNV^REK8qH(~DYTG4U zFVR;pkvWIP&!zBEyb=nV@h4%%d6L3znho|_F^1=Jz_oy})pYV`4}pe5<>>b2TS zVPV@mEWOzlijhDvHXBJi7@|S^rPt$R_;GVdMVsGC-{WukPFO_%K^(dhaf+-G(=!Bw zj-DTuL;|JY-E;8LoIuN;w$pq8r)c2Kpz*?rbK{wqP^v_tCnvSuT_kiGbAlF2{`gY?D^QO|afAv;LC?3pY%POc}i920C8+)O%~z&yp^X3ul#l*HA*Tq{ie zU0dWNgp}I{d0K734G;P%M~Ee9`)EV_X8ZvzdsSZOc8ICj3j>V=@X<^`!LBp4=|MjD zT-#tc_dt`IpRJeZKCi^1E?bsb>)|w0j5zfB$FIjfbe8D)xI+ghw(!@V8~KlfdeoS1 z@!7xM#>=w`>Z(f?oXXk({VtK_Rvl~o*-H7j-pq~+;9-b5ywGf`=PPYHkI#MXG|$Vs zUU5E2Ou=n@8so33XFmhm{Iu)HVbJv-m@a5MwHR)!BZ=QHe#5uKgy)6E-xov82 z-a7rlzui%MRXSBex9jVn7t=PJeM0*>cpGwGX}VSr-M@cZPuH+o=N0WnC6R=Ru#S`m zYcRaF9v$HF3rwzgk{f_>J2%l=ATs3B8_}OEw1R5-&(s#FOTSM!tm6e`cec`hr6ae5 zFfV09qL?~b$enG4N$^}52U*NbOn+~DyMeqRu6&M)3K`h}hlCqA5{;h&p~g7IJmcJH ztwrr)r|hRO76G@l2$9L1I{IB$eD0@Tl}O%l&82{cX_BqbN_P``>O2Gz@sT@F^FfwJ zjGbFo9q(7XwFx(q%%_EXom^@_LZ-AB3vN2tq+)#5KmDN=_z}zBKdV}a-CVCL^TAop zb@wft`>@tjc|T9OUxsUCr$%U#!=KTll1G^aHQB38gbZrAa4JQm(1nUR^1Va*K{*Yc zI%T`n4L@X6S2WgnS-?|AkCyCA%B`w)wYg+0JjR=Ktmrjk!(MtiDQnN>G);zK$t_B- zlTAM_^mb@*`)}-Ul5(s;PLAXRd^Q5gvnZpK_rP;kV02-cRN|Ih56`)XQPCuNYGSV` zE%TVE3&oTo?LJUF{^NaLYh3`bz1>I&V^-Zn6+M-?*31)PasJezL6M7r+G$5fo#wc( zW|apNkyuD?fREiL{kvGrP4=2X4`k-Im5)7dGR!KUGV>Reb0As&fi>Aty#0)yRoPM_ z*@ja(rZYB8T0H>0KUtUSI-IGseW~(x1`mk|%{O(oT!o@n9us?N+c!<;;n(3AmzmlZ zj}pW{VRYn*&|&2CaY%niT$mtt-^YjNeD>-U7Y;U`p4kxB$<(!0cHo`U;~R5yKOp_$ z*{~1ZA(nVmFVH~P zb(*gLh6#7;BrX@M^#LhyuU9g)+OYr(Rw$XgBE2A@vw~{vjGVHLqqEQ#moX+THFt}w zyLkN)G`2TiZeE8{X5Pq@l9kRvd*XVV7jO2*nawzh@B+B-MLypCpR6L8&u&I!%mpBF zL|mQ#*cVY9It(Ez6hxJib(6{o@kp&F05BH`uY_SkQT}r?_v?4@7oDceX}yno8GIoL zFNUX--D87%q5F-hqKF^LEHfL|cnv}piNlYr)Zm&b%N z^&oxH414hdw!(SbrCl%FG>!7(aB#Ud<6?O6U6kEHc&?9-Io~0%*#{Io2w4M>Hb$J^ z#!<6ZzhsmscNoI-;*;42dm*cC4ul+}qowwqY2rP{86u$19e5CChE0A)vDW z^hEW(+l=A-lNp6#bh-W>6T?>$%ksw~b91lF_YLi7?YX+iK%VVt`h=H*nA3O`yI>IJ z`u_zb4BGQ4tm<6{4qWdR78lEoLKLPO+jH0Zv^f6eJ3c3;c+!xzS%4U24ZOGz{LO^s zA}ms51*x<^f=mwB>r#34KM3@R^AsSz^*0+o|MUNQxKMT8cw-C5NMV=NDwpQ~`5{4H zU;HvrmNp|$dQ1-N*f}m=uf`U&LuFgo*J)E_tG%?97ogN$pnAddR8|hhnmY(EMAbb* zAOPLddLhyy2&@I5eSR8_3k?;%m59x0NCGJ!7n^Z5%j~u70Cp1+?Xg1T!y8!m})@twb69*KpAwWEb!0WXY#PLub zm0M5wAWny-ZM1CVVN#nR0PO|wy9=s6o0wb?G=TEBUcEcP%TM-YqDI~YVB9ZQ@`IMe zUf0t(?aoa_uLJW#M_rGjjLiaH`3YNNbJ7%<*BcFeYf$X~B4!Lotn?Ov;5o@H`E`9F zKTtTN>J~phFjF@FG~E37F9=Ay&?+uV`#Q*b=D-@i|+Mu$HoI9@;oN?}h)WosTPJ zi2NWflY7K)iF>B|Ra9>g+Ll)=VQc=g^&ax`k&qZcOO?i+%nvhYCSMZ@wa_wnZ&}-{ zS0EH=Ey}gp6tY-?NV{&P1wb2O(pyW!rbPg-eb;JiO(bI0+v`y{B{b~20I@{@uqrmo z8cKmrh9LknDQ0K2H8hZUn*wP#A6o#24<9afYNZi$9G8z4w0S@(okhK6$4FT$PYaJ02Tqzl$f^kwKy!zr?3?uHXi7s zm>?BT=TCje6Oe|NUpbD`6_rc4R=X{M5*H_}gy2CEPFC*1)P+g#fU? z0?<4Lb=g&bvH;-kx;}F3UlUh|?{@DDYo5HT%=qRjU-^nVci}?#4%w$a{pnDkC93^W zZ|a2|0TR%ed)gi^mlMO1Nw8&J3Iaga5eoo~_0>i|ysQ~ZbjZ!I)$}^AI0=ZNIfc!- z7b)md)tK&>|NIx^g>&b_i!wlA_RX_#2D6tm7e_9Je*v;-_%yfvY@=Fw!iu-$Gb7KW zTq-@_SmoMtahNn*PpaMgd$H=^9I*AJ%8%R1b)Fp=uee`?!I2|J>V1ag?*Tyal=cU) z1yHGCM*Op@<~&kEfI@i9o1Qv{K3D*(|{KjU>iOV0IJOQ2p* zj=fiaW0j8&@iSqHU|5O26hVi@z542j;QP)N!uU4Kxf92Zm(viA(|q&D(=GhjhKR-Y z_yNcIHb3OiH~R&p=X-<@3Xn$s13(z3bPD6*Z~l`9r2Zoyl;`UZ5EAkA=sI<6_L}W= z#`lXbE-$(vKz@WkJt(so=Dknxp zh^_7XGPAiRX=PbDjezS8Wq2Qg$AUoD3Gr2z?%P`G+m2}W762wS?$(3Xmcx8082_3B z2g9s6VZJ=X=fjkSc;aw`NlQFwl!w`Ng>jTioboG=ty}5ix}~+Z6Usw?8@=|`JIK|5 z$#2tg98UtuM8-s~rWqv=IA6m0x-D;nXO~Ik3W9lY&j0R^2#ga z_#&wD7LgxtuG;w&Qt3sm&4fs4UA0X*wGdxd%F2;dl{$C1LT?j7e&(I{uqaMp_RABl z*V(*#x&~LBkDbyhoT`rra@xq)eX9ZKi^l&clm!5jfXwFOvm$^WzTWHodmem4IS%*m z{h5E=p_}sDt3ikU;UBm zb}(n~t+R1TS8d1uvH9eec7s`S7X%Hu4)T+iGUIYL1CTVc09LFv$XQJ@*V|5;PWPv* z`E!A=-g~#5pslf(-+;|A+8_fd?W?_lHt1+)p9mc1RoJ3do>YBmTQyh{pJ9L<3N*p| z53uHcy$Ct%%>Li_952gK>Wub0AkwhyAV{q4MSRySQZeVkdz-Ax8hHaW^XttKJBoa9!6zbKm%?8@ImLRJ}{`g#c z&r-)s{?)4Ua)E{bu{jGFEos3DVKc2QXSd)&;4H4vtS3%>wLBKe0}uj5s{k>nB`}2b zklw<6hXcTA?wh!cA1~vVdzWtTBkz8D@WF4s`<;2HGHlZnnH`v|@BZ`I=7(y6U_BjK zk)LZI5YTG(vj3&HI7PHnGc zfuzpUcE0QrUqA8oy5b?mVE2J_-Lvfkyc;>p5?c-LZ-h+S&fh}p)H8Vq*of7PRI5h26- z;&rZ>kOg2#pRxw3z6@0QjlUoKmLLC>;0ucXo*#cKSOFn#{uZCz2?*&$eo&sx&IvE# za?Fb@wcZBQhcG1s2(u#(pb_c#o3#_rz6=zs0Ut)_(WYAMpo~1&6kHBF{)%wm(7_Ua zmdOW2*o2cJs0b;fhz=UfD}u*}^XLO8ubw#NUO90zJd2`9J!|fZ{3$fJG#KjAhd_Y@ zK#bXmG55_Q<>5xgOiknkV&^aZ5N`RQe-vC%ypY<%Z{O4dnIOo`X2_D02M~tTwcZ7= zFQt3?%O5DmZ`L($C45IM@uCf2G7zHCx!3x2>1ILSJy4r^d~04jS^O>l zz$!>t0P7(?;2yERA5!x=FnZJ(XCMVTB#2G_b?yOJm3OJ5yTbgp;RvO&1rYzCM=daH zkjb%`p9HH0wBcr;o_5q@0W<@by9IE$KqQZs`y>d~VFiS@0MY9F6<9qSHWonkO5jG3 zwwYLO8#f!Z1VA2a3U&m*rH_pi0J*;gIQRbphp@;frMy7;00000NkvXXu0mjfzWV}L From fa6497146ac55e88e4d18aa6b2dcdf058bcb4fd7 Mon Sep 17 00:00:00 2001 From: Pvndols Date: Sun, 13 Jul 2025 22:43:02 +0200 Subject: [PATCH 283/491] hopefully i didn't fuck up CCGT changes, automode now lowers throttle when fuel low, displays fuel consumption instead of a generic power setting in the GUI, small change in GUI description, the texture now includes what should be an air filter at the tubine intake. i am NOT good at texturing. --- .../inventory/gui/GUIMachineTurbineGas.java | 18 ++++++++------ .../machine/TileEntityMachineTurbineGas.java | 22 ++++++++---------- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../textures/models/machines/turbinegas.png | Bin 18254 -> 36270 bytes 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index eee3c7fad..241b1e6eb 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -109,21 +109,24 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { } @Override - public void drawScreen(int mouseX, int mouseY, float f) { +public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 108, 142, 16, turbinegas.power, turbinegas.getMaxPower()); - if(turbinegas.powerSliderPos == 0) - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Turbine idle"}); - else - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {(turbinegas.powerSliderPos) * 100 / 60 + "% power"}); + if(turbinegas.state == 1) { + double consumption = turbinegas.fuelMaxCons.containsKey(turbinegas.tanks[0].getTankType()) ? turbinegas.fuelMaxCons.get(turbinegas.tanks[0].getTankType()) : 5D; + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Fuel consumption: " + 20 * (consumption * 0.05D + consumption * turbinegas.throttle / 100) + " mb/s"}); + } + else { + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Generator offline"}); + } if(turbinegas.temp >= 20) - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "°C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "C"}); else - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20°C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20C"}); turbinegas.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 16, 16, 48); turbinegas.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 70, 16, 32); @@ -146,6 +149,7 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { if(turbinegas.tanks[0].getFill() < 5000 || turbinegas.tanks[1].getFill() < 1000) this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 34 + 32, 16, 16, guiLeft - 8, guiTop + 44 + 16, warning); } + @Override protected void drawGuiContainerBackgroundLayer(float iinterpolation, int x, int y) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index 0e5d6b9a1..b0705734c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -105,21 +105,19 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement tanks[0].setTankType(fluid); } } -<<<<<<< HEAD - if(autoMode) { //power production depending on power requirement + if(autoMode) { //power production depending on power requirement and fuel level - //scales the slider proportionally to the power gauge - int powerSliderTarget = 60 - (int) (60 * power / maxPower); + int powerSliderTarget; + + //when low on fuel, decrease consumption linearly + if(tanks[0].getFill() * 10 > tanks[0].getMaxFill()) { + powerSliderTarget = 60 - (int) (60 * power / maxPower); //scales the slider proportionally to the power gauge + } + else { + powerSliderTarget = (int) ( tanks[0].getFill() * 0.0001 * (60 - (int) (60 * power / maxPower)) ); + } -======= - - if(autoMode) { //power production depending on power requirement - - //scales the slider proportionally to the power gauge - int powerSliderTarget = 60 - (int) (60 * power / maxPower); - ->>>>>>> origin/master if(powerSliderTarget > powerSliderPos) { //makes the auto slider slide instead of snapping into position powerSliderPos++; } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index cb32c226e..ed0747f04 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1033,7 +1033,7 @@ desc.gui.rtg.pellets=Accepted Pellets: desc.gui.rtg.pelletHeat=%s (%s heat) desc.gui.rtg.pelletPower=%s (%s HE/tick) desc.gui.template=§9Templates§r$Templates can be made by$using the Machine Template Folder. -desc.gui.turbinegas.automode=§2Automatic Turbine Throttling Mode§r$By clicking the "AUTO" button, the turbine$will automatically adjust the power production$based on the power required from the network +desc.gui.turbinegas.automode=§2Automatic turbine throttling mode§r$By clicking the "AUTO" button, the turbine$will automatically adjust the throttle position$based on the power required from the network$and the fuel level in the internal tank desc.gui.turbinegas.fuels=§6Accepted fuels:§r desc.gui.turbinegas.warning=§cFuel or lubricant level low!§r desc.gui.zirnox.coolant=§3Coolant§r$CO2 transfers heat from the core to the water.$This will boil it into super dense steam.$The efficiency of cooling and steam production$is based on pressure. diff --git a/src/main/resources/assets/hbm/textures/models/machines/turbinegas.png b/src/main/resources/assets/hbm/textures/models/machines/turbinegas.png index 290e3810bc5904d60a3feda9ccae75c7318be4d0..4e33cca35052cf5e838ca844047ae0e55adf1c76 100644 GIT binary patch literal 36270 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 literal 18254 zcmd>FgVBunB6JlYPV_*R!0X7tp2Zfa7L$Xnz z*q8*^**K6$Nj?fLeil9>QDJm{5BcUuQDXA2S29yqa?w!q(v?sY zR8y4EbY@r671A&l)Yg^Nx+kNfFKTj66r&|^$6Dczv#4<>ua297PKdmYyW-strF&v% z2Sv3I740Zh-57mM15Hg$LoJQlw{PFo(Ym95+rrdXU&qwa@UES?xrvF1?cFEUP>?rIb4WMi%7fYyuk({_wBaQD39 z7J0|n$Jy1{+1bm>E6l?^+RG^>&@DF5E6gh>HYgw@BqSy#1`7bM0jd#z<_Z8ZZj-l} zv;6X-9&|!nc>)W8h~)^H)fk!~FWCpY8c&3bGZjsr%HPE+*v8*BOf|GDF|toJx5_rR zP4cwK4!)OU;FfaFCC}RJp-o7hZ7|;6HNnT_nX^Z7s82$$cTT8hx?{vMm#~!Z@Z`wA zwCJGRh{%`jUatdut2{$rcm}=k39StZYYB~l3DK>%xP>Gu0xoXl zq4VEdzkfxMSHHs4Ze!DKI9eG+Oy6aR}&%8ZXsN=i&gO-W5ndH68BAT1>) zAu%&6Gb<~zB=d1;c6Lrqc3%F|{DQo~X9f7o2OSB?<=JVK@j2beIj;)y%5!sSpFL?P z&3pN>q^+{_ZFy1Klj>Kms_=OH+w$k_H7`19Uv)Irc6Pq$O->)o&KP)<{W-C0TrQ?fsYh z!-a+Xk{Mj$%=BEI+&N}$nl$e1Nx;vazWf#HQo39i`nPJUpPRjh~Jaur*roiri(Y+}4XF)MvPke{$N&YASx~KOZkI zUtf=7m`b6MtG#emAa^aaO?tkG)aA1Jjb5T4^MWIsjJ`QFxKIJ~|kROsFj-ZkMg z@dEcdgX*4(e2>vPt67?Zdz91VaxD6mxEZ2gl8UAEke{8Y^X&cOumP%!k8BGvneWXM zX693-M@~zJ6%>XPUcg@z=_HuxX;bM+JzMa^=KdHX`IVNRPAT7$czt?-y! zKp`L?B5GW`(ff1WhV{YA9NJWK{)G5^Ylkx1VZ7_6D>LyE?B1OVLx#-|*7{dDIa7?;caW)mTRvl*Vuf zzl6+?TIlU34{&2IpdR6Z#ca)T_KXmYspJod;cbTNh^Rq|G+W>Mk_l2Vi6WE<+FUjk z#SyhRZu>OVbj)f^im|onefk`_*mD!6necDB26PT7RiwUIuKgvZ%x>{CshHeIdyICs z<-ZgIOxOswr*37rtq85=g7!r6x^UK-=Cb)BL=3a zj6wo+2cfzde+}z3?zw21h>Q=m-~l5{;yzOvZ)U=ucNu@8?JC$;2%IzKgT$W9uf__s z(F?m!+VJp6@k`b`QlR73cG}95G@wJhf-aY8|I&~GKKSCNX{hr>OC|mTQHA+{L4yl z3)5QU5!<|Ph9xe-|1=5xNwcmYi%Jl}e@`-k)Cl=}=xZ+!#Fi7-d0t9=3z_vMe_Q0l zniddo$d|6h6c(D^MimdtQPHkqf@$d3d0==ah+q3KQCw{MZT zZan{)(S+Uz`$l>wRu3Z3h);x%R-!Y)g6o?ngFA9l;EbyIVfR*5PA(Du{iA?N9?eclPurx-l{zKXy1BT3*E z3460E!S%`PSXzMC1MTMekNF8JDeWH@0%?_=Pb3+|vo7#&aC0IEXU#LcsD!5bGT3J? zH||QBarxde#Tc*ZRy~`&$zrNqL|FW=6*gr9m_&3)i?Qtm)S229jc8c@_eqcE@aco> zE|BbPQdoD(62TZ;YAW@P_3d+(uf%oo-%OC< z#fK7a#Y4XFT{apEmd;uv@H?(8_RE@Znz*w3y@n0{uuTCbkc1X7+LKWke30s23UA0T zAz2L@%{CP$F3TW9p;iVnrJ%( zu`9ft2D^4n+nhscI_t{%4WF1Og3NMm3{W-*6gs?JctaXlng%7-#crZYrcGsv2D=vN zQ|-HW#P?@e!mceO+3(ret&Xr;dxx5MHiTo%k({Xev^suF25>239R@hp*{n&L4(L1wWQPeCW2 z<(ifN8%~*bS8wKg&FZhFyp=J$^GRAJnM;o0P;={zc=dE{_O2rNqX5B*v0)q>=@QW= zaxKf`qp!&l>-2skCgeU;kvA;aLJZ$Fx7zi=4?chH{{WGs)CM(=U+F`RaZHhfn37 zcLT+hhSC`Z#T_(b2yWD~ zwhG&~JI~(S4XQL!SSecITDA?Db}_eYUjFjeZhxmdswB2{b}^H5eler0TdjV7_R(_|gV2}c zjY9Y`^R<*SrrK&4$F-u0fX@m85=zbWT-!z}wJpZS{c-2>`(KeiTH}6|NVksIp8YNq zsvPbNnOn+9p+<^F{Frk5x;#>-=rZ&+B5W?^s^)Iy-~*Sk~knMu)gb2e(*zRh8`^L_H2%T$0xtPc5hHeInv zoPjIYnTVc&UU!P=E(#Az1%9Z|qaOpN`GNeHvWcbFRva?FZL7RG`02WjTkWHFddfx9 zuqR&kgl&!=M0{N~e5Q0A-HsvR4yGELM2abHwFS*BMvzxN#+q;y1A|n4iBWjZJy)p- zw-x@k=0XM7TmtR$1j|=jJi6Eu#%d){Q0&j&`_7;Bt=a*t|IXDY7e3xRCR&WU8jCqQ z!eWKCJ3QxlGmR7Q-4a_l<^2!Y6kYas@tMYmxa%t(A=r-hz^&ZH_GZ8xT)H@ zPBxoe;fE(^NZG1MtmFgxHJjR|JWqw-2*B%)Wdw&U6{AYuUq;aeO+Nt#vYy9-X6V~% zH%?F>QmLhsxxsTc{*|jCvrO2+T?br@s@n)EbeI^^RS2P{8936UA4<(7)$@{_{?s?|s z_NZ9uchO*;E$*`4Sf1*`#Pog#$<}JYpiH~2mo+PEIML9Cr(ZTCHE|Ut5dGoyU2(FZ zW1}>WXEYi0IvG@ITwLZxogQJbS}RI#EbqVuL^XDXY@&D4OXGGfRS*rK!*zLvh0!CH z2`P{A6(bIxw|6x<9qnHod{I5CjEg)W;M~H53zc1_s>JV94#I|XexrwmGgh|zPg26} zzfvnQcJQZ?ap>haLwdl7Sc!_BC_K5rhuz!Do>JRy9#`l2b5~QX7DA!#^HgKnkd91p zr{{|rVUF=g`INBqmA6>(ytXId3$wV#W|5y#*BN0SdHLz;;wbKFCC@(ma2l#8QY_&y zwWF8g3|ZO%*I_xO#-lxeFPN9q5>S>kG{o}Z#_}D7UTJiMuE?3OyOv3-#qw!IM*q_s zyCLJj)yQDcxqE`5V+C|jt%qpXW?aB8uFPAPA71P=^%Y5aAFtAI-P5>qvp?P`y;}Np zg@lJM5SrQF>o}2u<3(-|Qsaccp#(`|}$`d?H*tT^aUK1XOF3x@Q zf*yUd++NFy_MW&bDb`^}?ky#~^__Q)oN4{l6w$Fy$VR!a*rPZK%5dl5-_@l|;@;z{ z*CJmwH_n71m5$H%RgZTnRnMkVUUve-p}(Ykj(5c0e<6is`QOotK2Du5zhc5CfUhcI zPhH+{u;4fAX_HJ`U6*Q-DCo%K`D^S)3&(lXrD=Z`Lg+ELqhE1X2}gFbR|h|&&4<~< zy??x*c|W2OwYgs09*T^ZSCN4J z@@lgVy~HR-x9HVx!dzta5rI8=2x)AS|6;h_BtX^A-}(?YTV|}3 z*Jq49I@Ex&hdT`acH|N%ZFcB+zLmKhyH3EZl*FmY?CgDti&&jbP;{kaQE~n4kP}C5 zG^q1vc{N;LuDcOP*Azo*5ouz1uQaEi98|h6(jf-eFGSgoJ2D$#Hsg2j99n=Mzs^se z=gS3Bx`cKq(4DYUo3a$q&0a= z;FDf+kcTW@?OId7ChKj3PI4FSh}gGm?zv39o;#`Yi`gjHj^0rGbuyAb7%6V2{%a=| z@vooHfJxQS>?Co>w<|K~tml!xK&oxR8tVOhs_}z|Px<}F#!XxsDd>y$1RueQ+i#UH zQZr+%ajzPJ0p(Df{62Nu-uu#yX20!{W^RWc`8W4nGg)L^W*@%%RDZQT*>yOv@!D1) zN@l!ud$u!bY?1B#CmpJ~niAE{cPy=h)(gam$6SBAgml8}!*4g6+)IA^?DU!W{~b%hw8FVo`tZpKoruRLz(rJK9j+2;s4%&E8)ksaRbgbg^l=B{Dn}Z!jhc z>7&Ml9d5_b!)BvSJ`a*Jh}s4Y6Rnh94U#{#yJ{}Bx0H#RCHflggQbiB+?F%aZ|zC45@L6nRijGxclRprwP%UlAK` zUP`)tW|H;YHek?NH4WCSjR-Nz> z7}bCN^lQ5#Q$xv+E*Ky2o2Bi`-ORZ2xtTL*s`~%-o;LY)#!ipF)OWLwdjDL%71?_n zx4J}4L&mNU?0=N8)$aDhxJYjAGpQuW-Cb(l;E;&>vk4IO4eAi$zZqkV2G|SzU1~qY zhZ!S$z=ZFqB@82t20pyW6L5~E&op9q<46LT0%L8$Ua6)XP1F4vDbIGc21t*0e{IE` zt||XYrf%DF3d*yMdjDt!`Kv2tq-g7PO!&?y`RmSya;Y%yU&?OZj?0#~`pv1>rW!A(=E?l&={#>SAPc6th+vC9k$-ya$fqjSK{|qM>nAc|9b;rtq*8z4ed}@yyeUhiz;V`B=6Q^7PY;G(@O?iO7OJKpVU@aNSJCGe?r7@mju z1B`G+L`S$GzaDsNQ5UO^`TFjdEcrj2^UfD@A6+^=J{;xiq4(|EU1#i4z@DoA_V16s zVq@mwT}s;n{yob3Z1r|yl$^xwILAwM|3i+k%E{-y#W^F)k;{bjA<0j#c%Pcjqf6#S zzH9_}_ATUdLAH=uFXGJ!{HQB!F1exw*w|K*6yQWGBv000U+ohuz#xKInT(Rd7ex1e zjf*#m_w2!?lH7QTgmoN=7|zd7*LH^OKFRFr@?Lvm9C!M4(oSL}+4hUl(QJ^ha>Q1p z>d}Xh;-gKQS3w*Y+J%_!qy(OSQ`pjf74g&^YCK?8G7ziw0HG_Nr147DyCEEkp@PrqOPUXpk#cG|yuv$b!HTYM3BBs}RyXzkVDH;W*vp5?cyW8aUMVnj9X;xal`*5+ozg4v{ z_}>W0cK6Dr1FK=4<-keMRD0*nWVJ_aXtaHimM3IjX!A&1IoYW~ADuNYq2HeEfk)PH@l`1( z`x_H9T2P4oX&ya@fqZ7Gor(br=lxM=@}dssCgrTk;ic&~kK=`Qzs{iGFYKDVVmKk> z$p`(o*e~85c(43$Ti z{KxYfnK6!YKh5nUhovR^GVI7s>@POs&T^o}TQ)J1mTtL}f^@`BO7DsXJV(y{GzggAu%^tUFi<#%pz(Y0o3{v5E zlXV~C1LaLL2AgFO`-9?_5s?^`gaL{~4+&7YLp&g-jB!UJirbs*-pl&bwyiIGKMpg_ zMgOdQwemS%+^df#FM7Q-cBPLm^zV;muYO9!Uvj6*4dQfP3gjFIs`lu?7r?1*bMAqE zIt8M`$U)AJkl0NRY4Klo-hD5??J(TG+;!QSS~< zQ)+$jp&qLEcec@Ko5io|;xILcnDUm;D<&z9BVqAmcUR&A-T$oqi})lH{8An~tY&1? z{6T__ZtEYe+;my{J82(r{7H!2Dy%1)N5B46`%W*<}Qj?nj_lLf(3zwadw6sp!wrYNO_slr_Z6K8ETQVq@11Xs{&o7XE1xcp$(kFm z*qAVb@;krdb!o9CSkDCAtZcZyTs|2J@*bs|&;$-7lF&a0jQ_ydx5}@rkE~;o9o6x; zNPhIA9T^q=GY@GMcp1_9vt{voU#;h4C9_1r=};Q)u=Zv{wKMoIg!=DPJz$R!o9_8mmL=EhB%1=;!@xI=%dL@v|aiLk5eT%n1iwXF*8!uW^%FW$(qVF7TZI&W{SsfBMbq6DcX)h{D1nu<>f2{U7WWTk z4#P%S8rX*aK7WugdSL(}0n+6teue*Q-=kM%g-JSc zzK7A1Z5%EgoZKQ-4;)DnYD(9`)tuyosTmj!J$9vBSz`h%dWh&J!WLE3d1#G&f+TLH z!sl~sR0us!DAl}*WPZvLufhu4T65rt`F?j>tO9}tSZmd_Z6Tr@g~8cwpKv5zD&)jB z5N=@YU#ja_4l}kg6$fSW+Q|i)UcF>LoZ=;^Uin^azz|P8FNJc15Eu;nw6Oo$6rSC8 za$+X@WuT>o7JL+`2D=1rL7e;NdL*2K#Th?x$eVX^P~9a=QcOTX=7|N)vN@unNFVNs ztK8J@(pl6UEE;ky^GGb(pVVpyt?%}Cg@|*(JzY#EKY0>%w@lYK7ZdxjF5-< za|c7F`ik&7`ugZp=={APX+SN@nI3!th~WvTj&B8y2a-pPUNWExO~ zz!+>|;^t-m4bTXlCZ=L{FyGXKNn!XT55k%>n4@4sGvopRv2gcgnBq(D`yUu7IwRtC z@d1doB0{KYF=Kg|i47xEAdp;ySqbSekPc-suYfn`u)(5i3LRkKD!}g(8i2Z2Bp<)F_6pc%#3}YiT;Vsv9U^ZYh%rI7t ztnEBn#DN)|QuVx!mIiH?@{Ab&_ylM^afhci**#02B60YA1MVQl7}hF9VAR~vcy*}6 z4`*SE=NLCaNMT{4Wd8LkN;ltClY}?fv=P)fU%!iXpmpFSY_B80O})0g(TigmkSZj2 z2lOT?s}paj<`MUJB!xPO*W6a4$zxRGAhWUKwEVrM^Z~}I8epS>P5ykDXf=}wyEh(a zMJ@Jnvze#Lxr(v>8kzDMo0g7D2 z2_`C%$_lwH1Ev`Zj9rPSe9$ftaMidWu%iLF%|}S-86e@N`S4O~JVHa16yKjk%|8wE zwVLy%Q<(ku8rMcise^~ykN-hX_VlZ8EIqROAlXh=6Xs68nm{@VRIRM!60mE zcs&S5hI)jZ)`;a#d_>jk0lA&0Dub)9ce=^EV;;B57{^VAKL&2XVHh+uMG@o%T@Oh< zaTXV=87;{4Z*h&%8LNa^gN;%*@M>WP?FB(sNInHys~ie9eCKL4^Kyrp4kort3PW#M zazn86P*+IRl1&>m4gtq+yl+^c#~%$}>R}a$mhUi+GM+dg36=gQ%ov&?yz^3W6fLTt zV4*+T9~N5V1lo<0Vn3$jmz&p*Bfl%T!bSg*5g z))$tSJEI>tWjDAqC3=#|A`82eF{)`+H`oh;p6oEH+T+*=of)uWT+Mafx)y77$ zAPWGu&*$Mx&YxctVL?Z_%1=DBXn7xAZX$~jk;y9b-7F$83}Jau8YO{y$`GZ)Pfi2E zPIF=In8anj)4yRi_p4P_I6x4xS!EgnNEf|%HvM($#5?PzhngzQd=3Xcb~&j4u5t~v zfFXM7?Na-%M-l>*Oc+a|(hoRv;T=wpb@LH~mxk)=?pF%#cggTKqtq&dN$7E;wm9Wz z`F*l?TFmICNp*xU8irx}ZO(%QpFF_xC{C6v65903&c0jvfndoZ4KCnVxq-d|Yf zD@qhL1CVrnltgptL@$OM9h)xM50(S-6d`GNG7-fd)mIg&ZbEYt=&29t16ArlC?0$N zcRH{SMuXB{NxZ+Ck;Dhh>(dalIH;&unZ}`5hjO$SPQ@_!z8=m>IEUwx1H6+HUqvjH z;@Hq6>1T4y-EhAww?Ic}$5ZJU4G++%2F9bXCZ>9E(#u9-JgR}dv}1^Y(z$#fmh8De zq66#?^j7&lBy3(8i6!#Yn$ir^~QZ=txeK4%!3;DLnZR2traJ%%hT3pcHOg z8r?f|VCYT@l%mHbP6W58A)iTtLxb5q9fCNliYLISW`!R7>Nq4sT$BbEd3RMJ1rGZ{ zivRO_K*TMDeNCEoo3PL&{Ghs<1J$P*%ir`~%HC>Jl^NgcKs#EZeDgP#2+JiJdl(~u zGyQ`_N%pHpT;bulMSJZ$2c^`jo1Zga)gULpi=uR>I6{F9#o5p@1Vrp~a#hFT@r#v= zRT9c;J0OBY9)J}f4-G*M?+0t^c!-mx`K_LR8%Fj^lo=5Xzz6IQG~k;HG`gA>P5HxY z+$&HD^aM_CYVK55dEf?p{iWq1D0k3Rsigi|LV9RDW<d-hh_s zF%YLTqG~Br4~|{FMIaueQ@)%WnTJAVKkQvvQ2RrUNn)nUv6tEyQyqlrL z3c)58(DWl5Phq0!AB^$wqB#Q$dYkBk96Hrsm-qIJocm}eDBl)&{c6?QS(0jM-q zA_tf$rGi90$~girGZ5Xy&l`v_JMOmgQV0y>JgbW{QVeqP?;$_6$(I~#&N$HhCzB!; z>7nTr-+<+09u+MIY^=92=hC}Uk-u6{U=N9un<{$>!S~FUEM^i2bA0&sq$;!f^G*o$ z#|S`@KJBi6CJjeUV(~+ti-(0$_g~*>ly}X32Y-EMM=kQe2K&p)1Ow%S7#TsIPRfyV znAh(;%gwztkbFiDHh&)%(C3m6v`9(^o+qL@$`6dypME)nYI%N1GAj@xE|MO#WGmGe4RT{JFE(;CT-U@4^o3K(H zERly4j@$wBDJ#0vI3bZLk(~60c6XW4Xz?lGKNW^hPfwBF?LcpoY^;~eedyZbWSgl} z8a{kqG-<>@;M;rO6R77WC7eCc-8k4WHW%aqW-Oo$ma$`dODH@J_RY8Uqmi>5$npq) z8)1Puj$_gwOgOzi(!UVC6U9JKWj6Ii7z&@+RE_Dd~XK|Zpf@Gr(HJfqB~&r!WnY@ zA7Gz*U;;q)9aED!Tii5jU(kus#os4?yy8TcxI!g;p^4>Ax=J7-P)mgEYNcir0nA`* zkQDG3Qw`Jn#q*t}lZ(42X1R5%ffvn<&2c0%Mqd`Z=xGvY;3c=AzMd1<+jtD6H08sy zGH}(43wUEs0byb$z*dO_M5IxWPq(>Iry`BVpS~3VWbAX~wBR$&ld^NO18);@I*b`~ zb;d_RsO-hnrVqtoZr)(}2atIHCiTS3x&rjI{9S2K1_v2Pedog%Ts^QfY7p8z5{Sf; z&P)}c*if7nMxcBS;1FzB8Y~;#9-L#ZmCF+QO9gQa&{sjihoIxXlsIMvxbA@Q#Bj;?)Bi%T1~>W!x)t;mr&r{4T?~rKJ){oXqpTkOWZ$1KN2ZLOm%rI)sV~ z+kG-1vQ+?dk%OrKsYcI-RB*&-FP%=t`5`x@gV0Sd1Ro6f3@fxQzw1a#c!HsEEW}{3 zpS%8Yfo&13&XYiuJkuC0LaT|gvnlK_|fm;tIKV z1y;<*!?P;;XY(|`BBX175o++Hk+Qi&sX^Gur8)zfT~krRYfl2!JgZ?Dt3iMZ+r%e^ zB_5DPC|N%62kEWPN=$x0g=0B5Ge%%DWvp2LKxoX>SPK~}tVQTX1uT+uV1q9kpX=Z6 zA@OH2cnJA>PIe05v)VVx=^mN^bq|4zi}PFEshr2BaI%iF(^+_`4R&Hof3!4=a81TdcycVb_lsiydc2g6N(~B@;I7DNW zsh<-s(#|ty=>bJ3`cCQqv>FTo&|v>7ZNjeR!E7i_9yf=&is67z>5q#eAMd7d!RZ7y z)Sw63S`t!dNjwGRs125Tk*nPdhK-LOjrsaY9;9S!GPvizt7VpuF4E;LAG<_j@?MRg zLqSC2to9Ub6)gDu?Dfd{(PLt`7?NP_ycdHGq}P?ec#B{Xff`S#dX{gB9a|PL0%p+P zio8!&UQbvROzm-#qLcA#4PWX;_MY}upg>2%2CmEZdSq1pz2~0~Kr7IH7qfUrdO&67 zHT1FM`v@Rkq%0cXv&KW_f&D^sT(>Q7U7=(pf`EF&(ewkXyOoR&p|=4AOE$*E%Ccvb z>1$XJeL44jo9od4$&UWzSJ(iI7Ur#QK$5NID4qB7NVzQVuENcx|CZL(AKR z95>(j2zUV9Eh@Yy8j?gJ8v2h44xx7UxvT0noZhD9*rS+;IDvV)diI9+P=v}_-8{>2V`+aH1af+G)YK@}lJ4{@Kegc@2E~8jDQ8KYuo^|Hj$X7v;B`W+- zpe@I8%$18JGt*dl#XI2R;Hh3@J)E$i(+)4d62vrrg%SJu+AEU>tD4$*m?(xRSVy-m{(j@f7U&h?6>HXwbn zh(Jy*Lqg0^L~p>at&)L6c$>$`gMa`2Z5Z^Jyvu2}#E2uw;F!8H(77MI*Q$2V*^XDjLjIIC< zqhOb+I)BOyCOB!cZpPkr7dOT}5Wa(=IX!qr?7gbMPUoObvi4s&@nTf>EPHpSEUXr3 z&+ZXzhVbrn{Hl1+an7nG3&Cg-iIL%v{3;QU^KIhxcfIDGg~U_+;iEGFCwnXZj#s)j z9~k5=!UQ;yzIzW~IcJ7sYTwx#pkY#BA<2HZ!IakpF$gXGP#{{IbN=w`@7Zt0?&wc- zEl0hqsn|KHglxo{rrX)tc;>bP^wlHC7Mty5M%Hip2R_z+uY;4Qa}~X=`$=1!Vk9qN z>N4azYyK2pKI|QlfMfBx_vv-ru`j>EX59j{mD!`!i~|72-@LHH=-UWBEaY?!cgxe_ zrtT^U!~m*5z|v)n0{Y8^zz3s$;Y^f~X;3(0D<8yQ2o;OxG9o%T>mgwRhquPgz%(c) znfEgvh-CnwPDm+-gbPhf&94!zA_BbqytKo;sWKkD`9xb!wGhooFVmQ#It_FF2)53y z7bvw+uTo~ibd9!hA0IruZ+IP2@&c4QjNEUTu)eZOvcmj$P#!jVQO92os;2q>hFx`c zUt0LQKmF%PgL{nE*G1po2w)*~y0)w96^0JvL!H_?=~2SZATZ|-U?&QAj$FC==7U?! z>a4DA40vg!i6>44(~#;Am)z7*B=fwG`hyjSe>~~Jf6|l#ZYVE;waF~3cE;L@`&1!y zuFVva4%Y@`a;HD`^_f<%0K5qo;w+!f*!41D|Gca{(AxY(H%{u>KGH=XK%a`;?_0fF zrzYv}>zbl{An&`M6)ECG7i!p}sE5&f?wRntn*)Ux|Ip~|d81KoSx7B+36kz}5iP{V zd(43a(IDU_kCNP3>mhmDB4<^ei)WyDjvjDTH;d8w5dCe#2uInlMS{#y0~j?8NZxAQ zgDpyC;l3~)frbat$srGdM}+-l_#v~@*PL^$*0G+otWm!*e_BVqTNt#8F7S1Yr}5UT zsSWfmb|&Z>-*{M+7VI;zVUOWHN0m7iFe387rJ}&N(@Oi(@lwcaWYb)E6?H=$Y=s{& zzx8Ge3O*sa9?&d_0}9Z@nPZ@fB;40EsY?{_7;& zY|9~}ry7NS!){We0t)36Xts3qQV$Xv5J>UF!FkOLJa}P!D4Z%Haz!Xu2|YZ2nd?qC zUe`9bi)e6qe^N*=n1bAv8Wug$cq5J)2M}UtX3WCgG6-|_!hT4h{4j1^oJqw!|3Vu_ zVfIZn@LhJUjI#ynnG|DXjYG;fDlH}{uGHHqPafUvag~A z0xM{a2l=qo2FL$J^$mD(5pMeTDCc~Zx#wnZBRh+j09m(zDm;rc#)gO`qr3JunNhnJ zU*2bZr{#d_W6TXKX4RgfNfZ$jVf*ldNWbbq#N>s;=!lPI&b9EFp$`HBw5nw=@pu{pWkQ{;7OAc$a7}&c$4KDt;J_z3rrxvO z|BS>&v=m?6#-8d6+nLy#tJH|NOTC%+ccTYZE4JExW6i0h5n}yzLcFU^NHlXqy4wzh zi99c)<~KsCLm@<`+qa{6(tew|ns7j9{n9I68Z19AzI%OsxgsJa<|FL$l`<5=uRlbt zy<|9LnbtrtQ)5uS$MGeF%LclRAXNbS(`o!~m4S&S7$&vzE}GH0Mv8Jvrwf=-9MNZ- zjMTln%o-z@x@OS>Qv(O4TdmDdQ5gvh78_@@%g^(7Q!uNH8(j0@RG_w+cz9D6*gA+S zc8ZWs+A-;xjvUkc{SfmgzvufM!R1U3@?MSCR+hGQc0U(ys_cgG!Sku*#>}>^=f?BG zgBLhT-HN2M=yavv{}OI)inhxAW8SQr^k1XvVCXFt%eoZ-1+s>JjtJ|o*gr|6RlW+3 z_ds6=trQ(89l|Uh`dW~9?f@o?&F|PSzn6Kdlv@2E6+OP&*6!uO?z_JA-K7bkyL~5* z>9WJ8HJC9(ZN#kh_W9U<{gOo}ofGdW2?3|%?o~E$f~!9Wguy$>6z|oETwc;8l3n($#IOg~bM{a7|tfD9oQbFsmSY;XYv zUo-5~+;{hocv6Wy_V8`#Fb(fEbXE;sel?^OL*=8zDdirg zL7Cvw39o&ATEA<(-eHfCJ)EU26!YSLNQP2K(e)PhkH^{3ppgW2H(7o7!TpG0gWl`1 zM(_-d+W2u3uY$5XM(AtmxaOZQiqUwByCD+>lh+HCJ3m3nhHlKp@6{FN0M(^XG~ww; zl$stmN)Gw%XYpX(B^CkcHr;sgeejlUhSVl$(aAaNDu zjRNcoV*YQf|JXNTObKr%(m6SJQBb?P@OOS;HU@9vxY}hN*V;JbZKO23tExNTV}13) zwkL@$k{7iGjlP@zyI{u%dlza1v`@bjhO2TSvq@xyD_8!+*s-E56BOExO<}4GJ}wM3 z*~as5+FU{s9UARL%8ZxKltRM@ht;Iktshm;uq@7#xJNfNdueNH#X$OMOHZ%PKAJCv z*gv>5?tGs7wDgc#n6}CXaDR<1w^4`yi>J|rA_V{Ih^VqFh*cWd`Sm^OjiU;B&jXEZ zFlDY|BKpUn|B)2Vi{juf`v{H$i{)eX0)Oi)xaTe2-iWA4H3V+9LrN(uZ+*B@_V7zJ zd+=D0#>x6`%{LXu3mT|00wtgaB$Lyxe#$=pdnXa}JlIZ#Wrzq3Kfb*vmXLqVuiNqCz8@rq zb5IX5kQ>lfZbS4C%W3a)TdI9n|LfX@-1~Ai4ep_uGUKH=_1;D4lXC&@|0T94 znm1y5vwY~gfgnUN0&KBZ1n^xcngAu|G8*jz0Lh;sK=0CM9>kS2X$4)OACZkl zs4;qxi~Yh%i|1|iOAB3m2*7nQYY`U{B5x%Z%d8ReD;xdP08GH%k1!LssS?c|;(-s{ zQThA7_xqI(QIHh;VC&zWd_b%L<^!k#fdCw@vYvcEeSN(aGP&Mw>;ELg7By|_PY32F z9|uIOA+S|jVcp1)b@ho6jRXK;QS_$D#{cN3t7_a(S6L@faog-mpmsS*2*{+u9tkiX zVD>K2xrB;6i4XxjX#f|uEB%!>E%ujJPOS`STkalZXoC~t^nTlyZPXuIPqCE(x zaCu12)QWOF6wu=UJ~rS30#^GW1;7=dvwp80LW%i2YiG(ng>SNWTtl-AO?(pDolW4xCzvD ztk!i_08NJ2 z&D=Vy=N%z~&{r}8>+9=a0)(GLFegYAh%_L9x+)QHq+@;L2U7$Ty?dGfn}`6{fbdra zw5D2L5IG3~)XNDHQdwn0099l?zZz$}rTioU2|(}11jNH2;Tq7{L0u+j(Si{m@d|*N z!=sD<35!_Rj^ds=&{qQZbU0cDu-=ZdaRwSNf20UtJUwX8VC?b=3}@KTQ7#QR1-o1R-->eO>v$LFM%@gM0$S zfIS+!sS-0G4usl8!ytk-4%-Y~Vgk^0s3=B&9G!;29^gmx9w0zMLK+t~k#zz@M8X6{ z@|$o3KZ#%(kn{lzga7)kZR>LZjAo2m5d1@&Fc**m&>&X;I1cS&x7n8mBZZLro*<=7 zWaEt96ExSSVNmds5Ciyl+)Q99|6l@fz+eCBuSOrA4c2G|XRbS*3(%U28L)f+bRZ^x z>dukVz*JuefCezsjouTq>3`O1gERrjoIMQs-wa6$_$M>efYANeU_!+E=JYjkg3)ZS zhHjuJ0Y@l(LIdpKDE)$-5EnbR2UK#Nle12p4>np+JP;xQGo=LfM^m|@fXxO|h&6x` z6eS>95efy%jQ~Io%8S@f55R1n@3{2@tpr#yI}{$^8bBpLasUXhr$h#f1Gq!C)(CcJ zM2nYZz#Ak9$VFcXC>;d}hy^AAB`k`TfFg%@)u~4T0#X<-;Qs?YU6$qw<@gi;0000< KMNUMnLSTZkam`Ku From dc042267139c33f6fbf4066637831838dd148115 Mon Sep 17 00:00:00 2001 From: Pvndols Date: Sun, 13 Jul 2025 22:45:05 +0200 Subject: [PATCH 284/491] fuck --- .../java/com/hbm/inventory/gui/GUIMachineTurbineGas.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index 241b1e6eb..924a893c5 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -109,7 +109,7 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { } @Override -public void drawScreen(int mouseX, int mouseY, float f) { + public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); @@ -124,9 +124,9 @@ public void drawScreen(int mouseX, int mouseY, float f) { } if(turbinegas.temp >= 20) - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "�C"}); else - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20�C"}); turbinegas.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 16, 16, 48); turbinegas.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 70, 16, 32); From 982e50556bd1e078bf40183fb93250109c3ae0e4 Mon Sep 17 00:00:00 2001 From: Pvndols Date: Sun, 13 Jul 2025 22:47:48 +0200 Subject: [PATCH 285/491] mauricio i can't move it move it anymore AAAAAAAAAAAAAAAAAAAAA --- src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index 924a893c5..87895df93 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -124,9 +124,9 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { } if(turbinegas.temp >= 20) - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "�C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "C"}); else - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20�C"}); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20C"}); turbinegas.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 16, 16, 48); turbinegas.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 70, 16, 32); From c83a53b62a90f13695f1690ff6bddeef9991502c Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 13 Jul 2025 23:27:29 +0200 Subject: [PATCH 286/491] ass embluh --- .../recipes/AssemblyMachineRecipes.java | 158 +- .../recipes/loader/GenericRecipes.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 1 - .../TileEntityMachineAssemblyMachine.java | 16 +- .../hbm/models/machines/assembly_machine.obj | 4082 +++++++++-------- src/main/resources/assets/hbm/sounds.json | 3 + .../hbm/sounds/block/assemblerStart.ogg | Bin 0 -> 5915 bytes .../assets/hbm/sounds/block/assemblerStop.ogg | Bin 0 -> 6581 bytes .../hbm/sounds/block/assemblerStrike1.ogg | Bin 0 -> 7855 bytes .../hbm/sounds/block/assemblerStrike2.ogg | Bin 0 -> 8532 bytes .../models/machines/assembly_machine.png | Bin 2748 -> 2825 bytes 11 files changed, 2225 insertions(+), 2037 deletions(-) create mode 100644 src/main/resources/assets/hbm/sounds/block/assemblerStart.ogg create mode 100644 src/main/resources/assets/hbm/sounds/block/assemblerStop.ogg create mode 100644 src/main/resources/assets/hbm/sounds/block/assemblerStrike1.ogg create mode 100644 src/main/resources/assets/hbm/sounds/block/assemblerStrike2.ogg diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index fa7202ec5..629e10584 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -17,8 +17,10 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ModItems; +import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemFluidIcon; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -98,12 +100,14 @@ public class AssemblyMachineRecipes extends GenericRecipes { // machines this.register(new GenericRecipe("ass.shredder").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_shredder, 1)) .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2))); + this.register(new GenericRecipe("ass.chemplant").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_plant, 1)) + .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.centrifuge").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_centrifuge, 1)) .inputItems(new ComparableStack(ModItems.centrifuge_element, 1), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.gascent").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_gascent, 1)) .inputItems(new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(DESH.ingot(), 2), new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()))); - this.register(new GenericRecipe("ass.dieselgen").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_diesel, 1)) - .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4))); + this.register(new GenericRecipe("ass.acidizer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_crystallizer, 1)) + .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(TI.shell(), 3), new OreDictStack(DESH.ingot(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.rtg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_rtg_grey, 1)) .inputItems(new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(STEEL.plate528(), 4), new OreDictStack(MINGRADE.wireFine(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4))); this.register(new GenericRecipe("ass.derrick").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_well, 1)) @@ -116,7 +120,21 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plateWelded(), 3), new OreDictStack(CU.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG))); this.register(new GenericRecipe("ass.coker").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_coker, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(CU.plate528(), 8), new OreDictStack(RUBBER.ingot(), 4), new OreDictStack(NB.ingot(), 4))); + this.register(new GenericRecipe("ass.epress").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_epress, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + this.register(new GenericRecipe("ass.mininglaser").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_mining_laser, 1)) + .inputItems(new ComparableStack(ModItems.tank_steel, 3), new OreDictStack(STEEL.plate528(), 16), new ComparableStack(ModItems.crystal_redstone, 3), new ComparableStack(Items.diamond, 3), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.motor, 3), new OreDictStack(DURA.plate(), 4))); + this.register(new GenericRecipe("ass.teleporter").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_teleporter, 1)) + .inputItems(new OreDictStack(TI.plate(), 12), new OreDictStack(ALLOY.plate528(), 12), new OreDictStack(GOLD.wireFine(), 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1))); + // generators + this.register(new GenericRecipe("ass.dieselgen").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_diesel, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4))); + this.register(new GenericRecipe("ass.turbofan").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_turbofan, 1)) + .inputItems(new OreDictStack(TI.shell(), 8), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()))); + this.register(new GenericRecipe("ass.gasturbine").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_turbinegas, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 10), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4),new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 1), new ComparableStack(ModItems.ingot_rubber, 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()))); + // batteries this.register(new GenericRecipe("ass.battery").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 1), new OreDictStack(S.dust(), 12), new OreDictStack(PB.dust(), 12))); @@ -126,6 +144,37 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(DESH.ingot(), 16), new OreDictStack(NP237.dust(), 12), new OreDictStack(SA326.dust(), 12))); this.register(new GenericRecipe("ass.batterydnt").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) .inputItems(new OreDictStack(DNT.ingot(), 24), new ComparableStack(ModItems.powder_spark_mix, 12), new ComparableStack(ModItems.battery_spark_cell_1000, 1), new OreDictStack(CMB.ingot(), 32))); + + // fluid tanks + this.register(new GenericRecipe("ass.tank").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_fluidtank, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 8), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_TAR.any(), 4))); + this.register(new GenericRecipe("ass.bat9k").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_bat9000, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16))); + this.register(new GenericRecipe("ass.orbus").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_orbus, 1)) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plateCast(), 4), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc_polonium, 1))); + + // fusion reactor + this.register(new GenericRecipe("ass.fusionconductor").setup(100, 100).outputItems(new ItemStack(ModBlocks.fusion_conductor, 1)) + .inputItems(new ComparableStack(ModItems.coil_advanced_alloy, 5))); + this.register(new GenericRecipe("ass.fusioncenter").setup(200, 100).outputItems(new ItemStack(ModBlocks.fusion_center, 1)) + .inputItems(new OreDictStack(ANY_HARDPLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 6), new OreDictStack(ALLOY.wireFine(), 24))); + this.register(new GenericRecipe("ass.fusionmotor").setup(400, 100).outputItems(new ItemStack(ModBlocks.fusion_motor, 1)) + .inputItems(new OreDictStack(TI.ingot(), 4), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.motor, 4))); + this.register(new GenericRecipe("ass.fusionheater").setup(200, 100).outputItems(new ItemStack(ModBlocks.fusion_heater, 4)) + .inputItems(new OreDictStack(W.plateWelded(), 2), new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.magnetron, 2))); + + // watz + this.register(new GenericRecipe("ass.watzrod").setup(200, 100).outputItems(new ItemStack(ModBlocks.watz_element, 3)) + .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4))); + this.register(new GenericRecipe("ass.watzcooler").setup(200, 100).outputItems(new ItemStack(ModBlocks.watz_cooler, 3)) + .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 2))); + this.register(new GenericRecipe("ass.watzcasing").setup(100, 100).outputItems(new ItemStack(ModBlocks.watz_end, 3)) + .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plateWelded(), 2))); + + /* + this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) + .inputItems()); + */ // rancid shit mob spawners this.register(new GenericRecipe("ass.chopper").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_chopper, 8)) @@ -137,6 +186,111 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.buckshot").setup(50, 100).outputItems(new ItemStack(ModItems.pellet_buckshot, 1)) .inputItems(new OreDictStack(PB.nugget(), 6))); + // bombs + this.register(new GenericRecipe("ass.minenaval").setup(300, 100).outputItems(new ItemStack(ModBlocks.mine_naval, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(STEEL.pipe(), 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 24))); + this.register(new GenericRecipe("ass.gadget").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_gadget, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new ComparableStack(ModItems.fins_flat, 2), new ComparableStack(ModItems.pedestal_steel, 1), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_GRAY, 8))); + this.register(new GenericRecipe("ass.littleboy").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_boy, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_small_steel, 1), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_BLUE, 4))); + this.register(new GenericRecipe("ass.fatman").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_man, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_big_steel, 1), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_YELLOW, 6))); + this.register(new GenericRecipe("ass.ivymike").setup(600, 100).outputItems(new ItemStack(ModBlocks.nuke_mike, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(AL.shell(), 4), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack(KEY_LIGHTGRAY, 16))); + this.register(new GenericRecipe("ass.tsarbomba").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.nuke_tsar, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(TI.shell(), 6), new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_tri_steel, 1), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack(KEY_BLACK, 8))); + this.register(new GenericRecipe("ass.ninadidnothingwrong").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_prototype, 1)) + .inputItems(new ComparableStack(ModItems.dysfunctional_reactor, 1), new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.ingot_euphemium, 3), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED))); + this.register(new GenericRecipe("ass.fleija").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_fleija, 1)) + .inputItems(new OreDictStack(AL.shell(), 1), new ComparableStack(ModItems.fins_quad_titanium, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_WHITE, 4))); + this.register(new GenericRecipe("ass.solinium").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_solinium, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_quad_titanium, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_GRAY, 8))); + this.register(new GenericRecipe("ass.n2mine").setup(200, 100).outputItems(new ItemStack(ModBlocks.nuke_n2, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 6), new OreDictStack(MAGTUNG.wireFine(), 12), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER), new OreDictStack(KEY_GREEN, 8))); + this.register(new GenericRecipe("ass.balefirebomb").setup(400, 100).outputItems(new ItemStack(ModBlocks.nuke_fstbmb, 1)) + .inputItems(new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(TI.shell(), 6), new ComparableStack(ModItems.fins_big_steel, 1), new ComparableStack(ModItems.powder_magic, 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack(KEY_GRAY, 8))); + this.register(new GenericRecipe("ass.customnuke").setup(300, 100).outputItems(new ItemStack(ModBlocks.nuke_custom, 1)) + .inputItems(new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_small_steel, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack(KEY_GRAY, 4))); + this.register(new GenericRecipe("ass.levibomb").setup(200, 100).outputItems(new ItemStack(ModBlocks.float_bomb, 1)) + .inputItems(new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireDense(), 8))); + this.register(new GenericRecipe("ass.endobomb").setup(200, 100).outputItems(new ItemStack(ModBlocks.therm_endo, 1)) + .inputItems(new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.powder_ice, 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4))); + this.register(new GenericRecipe("ass.exobomb").setup(200, 100).outputItems(new ItemStack(ModBlocks.therm_exo, 1)) + .inputItems(new OreDictStack(TI.plate(), 12), new OreDictStack(P_RED.dust(), 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4))); + + /* + this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModItems., 1)) + .inputItems()); + */ + + // bomb parts + this.register(new GenericRecipe("ass.explosivelenses1").setup(400, 100).outputItems(new ItemStack(ModItems.early_explosive_lenses, 1)) + .inputItems(new OreDictStack(AL.plate(), 8), new OreDictStack(GOLD.wireFine(), 16), new ComparableStack(ModBlocks.det_cord, 8), new OreDictStack(CU.plate(), 2), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 20), new OreDictStack(ANY_PLASTIC.ingot(), 4))); + this.register(new GenericRecipe("ass.explosivelenses2").setup(400, 100).outputItems(new ItemStack(ModItems.explosive_lenses, 1)) + .inputItems(new OreDictStack(AL.plate(), 8), new OreDictStack(MINGRADE.wireFine(), 16), new OreDictStack(ANY_PLASTICEXPLOSIVE.ingot(), 4), new OreDictStack(CU.plate(), 2), new ComparableStack(ModItems.ball_tatb, 16), new OreDictStack(RUBBER.ingot(), 2))); + this.register(new GenericRecipe("ass.wiring").setup(200, 100).outputItems(new ItemStack(ModItems.gadget_wireing, 1)) + .inputItems(new OreDictStack(IRON.plate(), 1), new OreDictStack(GOLD.wireFine(), 12))); + this.register(new GenericRecipe("ass.core1").setup(1_200, 100).outputItems(new ItemStack(ModItems.gadget_core, 1)) + .inputItems(new OreDictStack(PU239.nugget(), 7), new OreDictStack(U238.nugget(), 3))); + this.register(new GenericRecipe("ass.boyshield").setup(200, 100).outputItems(new ItemStack(ModItems.boy_shielding, 1)) + .inputItems(new OreDictStack(OreDictManager.getReflector(), 12), new OreDictStack(STEEL.plate528(), 4))); + this.register(new GenericRecipe("ass.boytarget").setup(200, 100).outputItems(new ItemStack(ModItems.boy_target, 1)) + .inputItems(new OreDictStack(U235.nugget(), 18))); + this.register(new GenericRecipe("ass.boybullet").setup(200, 100).outputItems(new ItemStack(ModItems.boy_bullet, 1)) + .inputItems(new OreDictStack(U235.nugget(), 9))); + this.register(new GenericRecipe("ass.boypropellant").setup(200, 100).outputItems(new ItemStack(ModItems.boy_propellant, 1)) + .inputItems(new ComparableStack(ModItems.cordite, 8), new OreDictStack(IRON.plate528(), 8), new OreDictStack(AL.plate528(), 4), new OreDictStack(MINGRADE.wireFine(), 4))); + this.register(new GenericRecipe("ass.boyigniter").setup(200, 100).outputItems(new ItemStack(ModItems.boy_igniter, 1)) + .inputItems(new OreDictStack(AL.shell(), 3), new OreDictStack(DURA.plateCast(), 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(MINGRADE.wireFine(), 16))); + this.register(new GenericRecipe("ass.manigniter").setup(200, 100).outputItems(new ItemStack(ModItems.man_igniter, 1)) + .inputItems(new OreDictStack(STEEL.plate528(), 6), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(MINGRADE.wireFine(), 9))); + this.register(new GenericRecipe("ass.mancore").setup(1_200, 100).outputItems(new ItemStack(ModItems.man_core, 1)) + .inputItems(new OreDictStack(PU239.nugget(), 8), new OreDictStack(BE.nugget(), 2))); + this.register(new GenericRecipe("ass.mikecore").setup(1_200, 100).outputItems(new ItemStack(ModItems.mike_core, 1)) + .inputItems(new OreDictStack(U238.nugget(), 24), new OreDictStack(PB.ingot(), 6))); + this.register(new GenericRecipe("ass.mikedeut").setup(600, 100).outputItems(new ItemStack(ModItems.mike_deut, 1)) + .inputItems(new OreDictStack(IRON.plate528(), 12), new OreDictStack(STEEL.plate528(), 16), new ComparableStack(ModItems.cell_deuterium, 10))); + this.register(new GenericRecipe("ass.mikecooler").setup(300, 100).outputItems(new ItemStack(ModItems.mike_cooling_unit, 1)) + .inputItems(new OreDictStack(IRON.plate528(), 8), new ComparableStack(ModItems.coil_copper, 5), new ComparableStack(ModItems.coil_tungsten, 5), new ComparableStack(ModItems.motor, 2))); + this.register(new GenericRecipe("ass.fleijaigniter").setup(200, 100).outputItems(new ItemStack(ModItems.fleija_igniter, 1)) + .inputItems(new OreDictStack(TI.plate528(), 6), new OreDictStack(SA326.wireFine(), 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()))); + this.register(new GenericRecipe("ass.fleijacore").setup(600, 100).outputItems(new ItemStack(ModItems.fleija_core, 1)) + .inputItems(new OreDictStack(U235.nugget(), 8), new OreDictStack(NP237.nugget(), 2), new OreDictStack(BE.nugget(), 4), new ComparableStack(ModItems.coil_copper, 2))); + this.register(new GenericRecipe("ass.fleijacharge").setup(300, 100).outputItems(new ItemStack(ModItems.fleija_propellant, 1)) + .inputItems(new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new OreDictStack(SA326.plate(), 8))); + this.register(new GenericRecipe("ass.soliniumigniter").setup(200, 100).outputItems(new ItemStack(ModItems.solinium_igniter, 1)) + .inputItems(new OreDictStack(TI.plate528(), 4), new OreDictStack(ALLOY.wireFine(), 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()), new ComparableStack(ModItems.coil_gold, 1))); + this.register(new GenericRecipe("ass.soliniumcore").setup(600, 100).outputItems(new ItemStack(ModItems.solinium_core, 1)) + .inputItems(new OreDictStack(SA327.nugget(), 9), new OreDictStack(EUPH.nugget(), 1))); + this.register(new GenericRecipe("ass.soliniumcharge").setup(300, 100).outputItems(new ItemStack(ModItems.solinium_propellant, 1)) + .inputItems(new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.plate_polymer, 6), new OreDictStack(W.wireFine(), 6), new ComparableStack(ModItems.biomass_compressed, 4))); + + // grenades + this.register(new GenericRecipe("ass.incgrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_fire, 1)) + .inputItems(new ComparableStack(ModItems.grenade_frag, 1), new OreDictStack(P_RED.dust(), 1), new OreDictStack(CU.plate(), 2))); + this.register(new GenericRecipe("ass.shrapgrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_shrapnel, 1)) + .inputItems(new ComparableStack(ModItems.grenade_frag, 1), new ComparableStack(ModItems.pellet_buckshot, 1), new OreDictStack(STEEL.plate(), 2))); + this.register(new GenericRecipe("ass.clustergrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_cluster, 1)) + .inputItems(new ComparableStack(ModItems.grenade_frag, 1), new ComparableStack(ModItems.pellet_cluster, 1), new OreDictStack(STEEL.plate(), 2))); + this.register(new GenericRecipe("ass.signalflare").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_flare, 1)) + .inputItems(new ComparableStack(ModItems.grenade_generic, 1), new ComparableStack(Items.glowstone_dust, 1), new OreDictStack(AL.plate(), 2))); + this.register(new GenericRecipe("ass.electricgrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_electric, 1)) + .inputItems(new ComparableStack(ModItems.grenade_generic, 1), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CAPACITOR.ordinal()), new OreDictStack(GOLD.plate(), 2))); + this.register(new GenericRecipe("ass.pulsegrenade").setup(100, 100).outputItems(new ItemStack(ModItems.grenade_pulse, 4)) + .inputItems(new OreDictStack(STEEL.plate(), 1), new OreDictStack(IRON.plate(), 3), new OreDictStack(MINGRADE.wireFine(), 6), new ComparableStack(Items.diamond, 1))); + this.register(new GenericRecipe("ass.plasmagrenade").setup(200, 100).outputItems(new ItemStack(ModItems.grenade_plasma, 2)) + .inputItems(new OreDictStack(STEEL.plate(), 3), new OreDictStack(ALLOY.plate(), 1), new ComparableStack(ModItems.coil_advanced_torus, 1), new ComparableStack(ModItems.cell_deuterium, 1), new ComparableStack(ModItems.cell_tritium, 1))); + this.register(new GenericRecipe("ass.taugrenade").setup(200, 100).outputItems(new ItemStack(ModItems.grenade_tau, 2)) + .inputItems(new OreDictStack(PB.plate(), 3), new OreDictStack(ALLOY.plate(), 1), new ComparableStack(ModItems.coil_advanced_torus, 1), new ComparableStack(ModItems.ammo_standard, 1, EnumAmmo.TAU_URANIUM))); + this.register(new GenericRecipe("ass.schrabgrenade").setup(200, 100).outputItems(new ItemStack(ModItems.grenade_schrabidium, 1)) + .inputItems(new ComparableStack(ModItems.grenade_flare, 1), new OreDictStack(SA326.dust(), 1), new OreDictStack(OreDictManager.getReflector(), 2))); + this.register(new GenericRecipe("ass.nukagrenade").setup(600, 100).outputItems(new ItemStack(ModItems.grenade_nuclear, 1)) + .inputItems(new OreDictStack(IRON.plate(), 1), new OreDictStack(STEEL.plate(), 1), new OreDictStack(PU239.nugget(), 2), new OreDictStack(MINGRADE.wireFine(), 2))); + this.register(new GenericRecipe("ass.zomggrenade").setup(600, 100).outputItems(new ItemStack(ModItems.grenade_zomg, 1)) + .inputItems(new ComparableStack(ModItems.plate_paa, 3), new OreDictStack(OreDictManager.getReflector(), 1), new ComparableStack(ModItems.coil_magnetized_tungsten, 3), new ComparableStack(ModItems.powder_power, 3))); + this.register(new GenericRecipe("ass.bholegrenade").setup(1_200, 100).outputItems(new ItemStack(ModItems.grenade_black_hole, 1)) + .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 6), new OreDictStack(OreDictManager.getReflector(), 3), new ComparableStack(ModItems.coil_magnetized_tungsten, 2), new ComparableStack(ModItems.black_hole, 1))); + // missile parts this.register(new GenericRecipe("ass.missileassembly").setup(200, 100).outputItems(new ItemStack(ModItems.missile_assembly, 1)) .inputItems(new OreDictStack(AL.shell(), 2), new OreDictStack(TI.shell(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.rocket_fuel, 8), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 6cb020bd6..4738b449a 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -55,7 +55,7 @@ public abstract class GenericRecipes extends Serializab public void register(T recipe) { this.recipeOrderedList.add(recipe); - if(recipeNameMap.containsKey(recipe.name)) throw new IllegalStateException("Recipe " + recipe.name + " has been reciped with a duplicate ID!"); + if(recipeNameMap.containsKey(recipe.name)) throw new IllegalStateException("Recipe " + recipe.name + " has been registered with a duplicate ID!"); this.recipeNameMap.put(recipe.name, recipe); } diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 67b872581..3b85c6c60 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -258,7 +258,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.capacitor_niobium, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', RUBBER.ingot(), 'C', NB.block(), 'W', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.capacitor_tantalium, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_RESISTANTALLOY.ingot(), 'C', TA.block(), 'W', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.capacitor_schrabidate, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_RESISTANTALLOY.ingot(), 'C', SBD.block(), 'W', STEEL.ingot() }); - //addRecipeAuto(new ItemStack(ModBlocks.machine_coal_off, 1), new Object[] { "STS", "SCS", "SFS", 'S', STEEL.ingot(), 'T', ModItems.tank_steel, 'C', MINGRADE.ingot(), 'F', Blocks.furnace }); addRecipeAuto(new ItemStack(ModBlocks.machine_wood_burner, 1), new Object[] { "PPP", "CFC", "I I" , 'P', STEEL.plate528(), 'C', ModItems.coil_copper, 'I', IRON.ingot(), 'F', Blocks.furnace}); addRecipeAuto(new ItemStack(ModBlocks.machine_turbine, 1), new Object[] { "SMS", "PTP", "SMS", 'S', STEEL.ingot(), 'T', ModItems.turbine_titanium, 'M', ModItems.coil_copper, 'P', ANY_PLASTIC.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.machine_converter_he_rf, 1), new Object[] { "RRR", "WWW", "III", 'R', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR), 'W', REDSTONE.dust(), 'I', STEEL.ingot() }); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java index 7007e54e5..508259c48 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java @@ -129,7 +129,8 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl audio = rebootAudio(audio); } audio.keepAlive(); - audio.updateVolume(this.getVolume(1F)); + audio.updatePitch(0.75F); + audio.updateVolume(this.getVolume(0.5F)); } else { if(audio != null) { @@ -145,6 +146,10 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl } else{ arm.returnToNullPos(); } + + if(!this.muffled && arm.prevAngles[3] != arm.angles[3] && arm.angles[3] == -0.75) { + MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStrike", this.getVolume(0.5F), 1F); + } } this.prevRing = this.ring; @@ -167,12 +172,14 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl this.prevRing += 360D; } this.ringDelay = 20 + worldObj.rand.nextInt(21); + //MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStop", this.getVolume(0.25F), 1.5F); } } else { if(this.ringDelay > 0) this.ringDelay--; if(this.ringDelay <= 0) { this.ringTarget += (worldObj.rand.nextDouble() * 2 - 1) * 135; this.ringSpeed = 10D + worldObj.rand.nextDouble() * 5D; + if(!this.muffled) MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStart", this.getVolume(0.25F), 1.25F + worldObj.rand.nextFloat() * 0.25F); } } } @@ -180,7 +187,7 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl } @Override public AudioWrapper createAudioLoop() { - return MainRegistry.proxy.getLoopedSound("hbm:block.chemicalPlant", xCoord, yCoord, zCoord, 1F, 15F, 1.0F, 20); + return MainRegistry.proxy.getLoopedSound("hbm:block.motor", xCoord, yCoord, zCoord, 0.5F, 15F, 0.75F, 20); } @Override public void onChunkUnload() { @@ -223,12 +230,17 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl @Override public void deserialize(ByteBuf buf) { super.deserialize(buf); + boolean wasProcessing = this.didProcess; this.inputTank.deserialize(buf); this.outputTank.deserialize(buf); this.power = buf.readLong(); this.maxPower = buf.readLong(); this.didProcess = buf.readBoolean(); this.assemblerModule.deserialize(buf); + + if(wasProcessing && !didProcess) { + MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.assemblerStop", this.getVolume(0.25F), 1.5F); + } } @Override diff --git a/src/main/resources/assets/hbm/models/machines/assembly_machine.obj b/src/main/resources/assets/hbm/models/machines/assembly_machine.obj index 52d865f16..bf0e3b1c4 100644 --- a/src/main/resources/assets/hbm/models/machines/assembly_machine.obj +++ b/src/main/resources/assets/hbm/models/machines/assembly_machine.obj @@ -1,5 +1,302 @@ # Blender v2.79 (sub 0) OBJ File: 'assembler.blend' # www.blender.org +o Head2 +v -0.125000 2.750000 0.000000 +v 0.125000 2.750000 -0.000000 +v -0.125000 2.750000 -0.250000 +v 0.125000 2.750000 -0.250000 +v -0.125000 1.750000 -0.250000 +v -0.125000 1.750000 0.000000 +v 0.125000 1.750000 -0.000000 +v 0.125000 1.750000 -0.250000 +v -0.062500 2.500000 -0.250000 +v 0.062500 2.500000 -0.250000 +v -0.062500 2.500000 -0.437500 +v 0.062500 2.500000 -0.437500 +v -0.062500 2.250000 -0.437500 +v 0.062500 2.250000 -0.437500 +v -0.062500 2.250000 -0.250000 +v 0.062500 2.250000 -0.250000 +v 0.250000 2.625000 -0.093750 +v 0.250000 1.875000 -0.093750 +v 0.250000 2.625000 -0.156250 +v 0.250000 1.875000 -0.156250 +v 0.125000 2.625000 -0.093750 +v 0.125000 1.875000 -0.093750 +v 0.125000 2.625000 -0.156250 +v 0.125000 1.875000 -0.156250 +v 0.187500 2.562500 -0.093750 +v 0.187500 1.937500 -0.093750 +v 0.187500 2.562500 -0.156250 +v 0.187500 1.937500 -0.156250 +v 0.125000 2.562500 -0.093750 +v 0.125000 1.937500 -0.093750 +v 0.125000 2.562500 -0.156250 +v 0.125000 1.937500 -0.156250 +v -0.250001 2.625000 -0.156250 +v -0.250001 1.875000 -0.156250 +v -0.250001 2.625000 -0.093750 +v -0.250001 1.875000 -0.093750 +v -0.125001 2.625000 -0.156250 +v -0.125001 1.875000 -0.156250 +v -0.125001 2.625000 -0.093750 +v -0.125001 1.875000 -0.093750 +v -0.187501 2.562500 -0.156250 +v -0.187501 1.937500 -0.156250 +v -0.187501 2.562500 -0.093750 +v -0.187501 1.937500 -0.093750 +v -0.125001 2.562500 -0.156250 +v -0.125001 1.937500 -0.156250 +v -0.125001 2.562500 -0.093750 +v -0.125001 1.937500 -0.093750 +v -0.125000 2.375000 -0.562500 +v -0.000000 2.375000 -0.562500 +v -0.125000 2.286612 -0.525888 +v -0.000000 2.286612 -0.525888 +v -0.125000 2.250000 -0.437500 +v -0.000000 2.250000 -0.437500 +v -0.125000 2.286612 -0.349112 +v -0.000000 2.286612 -0.349112 +v -0.125000 2.375000 -0.312500 +v -0.000000 2.375000 -0.312500 +v -0.125000 2.463388 -0.349112 +v -0.000000 2.463388 -0.349112 +v -0.125000 2.500000 -0.437500 +v -0.000000 2.500000 -0.437500 +v -0.125000 2.463388 -0.525888 +v -0.000000 2.463388 -0.525888 +v -0.130000 1.875000 -0.234375 +v -0.130000 1.875000 -0.171875 +v -0.130000 2.062500 -0.234375 +v -0.130000 2.062500 -0.171875 +vt 0.750000 0.907407 +vt 0.723684 0.870370 +vt 0.750000 0.870370 +vt 0.750000 0.685185 +vt 0.723684 0.722222 +vt 0.723684 0.685185 +vt 0.802632 0.870370 +vt 0.828947 0.722222 +vt 0.828947 0.870370 +vt 0.776316 0.722222 +vt 0.776316 0.870370 +vt 0.750000 0.722222 +vt 0.802632 0.722222 +vt 0.875000 0.574074 +vt 0.861842 0.601852 +vt 0.861842 0.574074 +vt 0.875000 0.601852 +vt 0.901316 0.620370 +vt 0.875000 0.620370 +vt 0.901316 0.601852 +vt 0.914474 0.574074 +vt 0.914474 0.601852 +vt 0.901316 0.574074 +vt 0.940789 0.574074 +vt 0.940789 0.601852 +vt 0.703947 0.703704 +vt 0.710526 0.814815 +vt 0.703947 0.814815 +vt 0.710526 0.685185 +vt 0.710526 0.703704 +vt 0.703947 0.833333 +vt 0.723684 0.805556 +vt 0.717105 0.712963 +vt 0.723684 0.712963 +vt 0.717105 0.694444 +vt 0.723684 0.685185 +vt 0.723684 0.694444 +vt 0.723684 0.833333 +vt 0.717105 0.824074 +vt 0.723684 0.824074 +vt 0.697368 0.824074 +vt 0.710526 0.833333 +vt 0.717105 0.833333 +vt 0.717105 0.805556 +vt 0.697368 0.712963 +vt 0.703947 0.685185 +vt 0.697368 0.694444 +vt 0.697368 0.685185 +vt 0.703947 0.703704 +vt 0.710526 0.814815 +vt 0.703947 0.814815 +vt 0.710526 0.685185 +vt 0.710526 0.703704 +vt 0.710526 0.833333 +vt 0.703947 0.833333 +vt 0.723684 0.805556 +vt 0.717105 0.712963 +vt 0.723684 0.712963 +vt 0.717105 0.685185 +vt 0.723684 0.694444 +vt 0.717105 0.694444 +vt 0.723684 0.833333 +vt 0.717105 0.824074 +vt 0.723684 0.824074 +vt 0.697368 0.824074 +vt 0.717105 0.833333 +vt 0.717105 0.805556 +vt 0.697368 0.712963 +vt 0.703947 0.685185 +vt 0.697368 0.694444 +vt 0.697368 0.685185 +vt 0.723684 0.629566 +vt 0.710572 0.611111 +vt 0.723684 0.592656 +vt 0.706641 0.624161 +vt 0.697369 0.629566 +vt 0.688096 0.624161 +vt 0.559211 0.944444 +vt 0.460526 0.898148 +vt 0.559211 0.898148 +vt 0.723684 0.907407 +vt 0.717105 0.685185 +vt 0.697368 0.833333 +vt 0.697368 0.805556 +vt 0.723684 0.685185 +vt 0.697368 0.833333 +vt 0.697368 0.805556 +vt 0.732956 0.598061 +vt 0.736797 0.611111 +vt 0.732957 0.624161 +vt 0.714412 0.624161 +vt 0.714412 0.598061 +vt 0.684256 0.611111 +vt 0.688096 0.598061 +vt 0.697369 0.592656 +vt 0.706641 0.598061 +vt 0.710481 0.611111 +vt 0.460526 0.944444 +vt 0.763158 0.574074 +vt 0.776316 0.592593 +vt 0.763158 0.592593 +vt 0.776316 0.574074 +vt 0.789474 0.592593 +vt 0.684211 0.574074 +vt 0.697368 0.592593 +vt 0.684211 0.592593 +vt 0.697368 0.574074 +vt 0.710526 0.592593 +vt 0.710526 0.574074 +vt 0.723684 0.592593 +vt 0.723684 0.574074 +vt 0.736842 0.592593 +vt 0.736842 0.574074 +vt 0.750000 0.592593 +vt 0.750000 0.574074 +vt 0.789474 0.574074 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.0000 -0.7071 -0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn -0.0000 0.7071 -0.7071 +s off +f 1/1/1 4/2/1 3/3/1 +f 6/4/2 8/5/2 7/6/2 +f 2/7/3 8/8/3 4/9/3 +f 3/3/4 6/10/4 1/11/4 +f 4/2/5 5/12/5 3/3/5 +f 1/11/6 7/13/6 2/7/6 +f 10/14/1 11/15/1 9/16/1 +f 12/17/5 13/18/5 11/19/5 +f 14/20/2 15/21/2 13/22/2 +f 16/23/3 12/17/3 10/14/3 +f 13/22/4 9/24/4 11/25/4 +f 18/26/3 19/27/3 17/28/3 +f 18/26/2 24/29/2 20/30/2 +f 19/27/1 21/31/1 17/28/1 +f 25/32/4 28/33/4 26/34/4 +f 28/35/1 30/36/1 26/37/1 +f 29/38/2 27/39/2 25/40/2 +f 21/31/6 25/41/6 17/28/6 +f 23/42/5 27/39/5 31/43/5 +f 20/30/5 27/44/5 19/27/5 +f 24/29/5 28/35/5 20/30/5 +f 17/28/6 26/45/6 18/26/6 +f 22/46/6 26/47/6 30/48/6 +f 34/49/4 35/50/4 33/51/4 +f 34/49/2 40/52/2 36/53/2 +f 33/51/1 39/54/1 37/55/1 +f 41/56/3 44/57/3 42/58/3 +f 48/59/1 42/60/1 44/61/1 +f 45/62/2 43/63/2 41/64/2 +f 37/55/5 41/65/5 33/51/5 +f 39/54/6 43/63/6 47/66/6 +f 36/53/6 43/67/6 35/50/6 +f 40/52/6 44/61/6 36/53/6 +f 33/51/5 42/68/5 34/49/5 +f 38/69/5 42/70/5 46/71/5 +f 62/72/3 58/73/3 54/74/3 +f 59/75/4 61/76/4 63/77/4 +f 66/78/4 67/79/4 65/80/4 +f 1/1/1 2/81/1 4/2/1 +f 6/4/2 5/12/2 8/5/2 +f 2/7/3 7/13/3 8/8/3 +f 3/3/4 5/12/4 6/10/4 +f 4/2/5 8/5/5 5/12/5 +f 1/11/6 6/10/6 7/13/6 +f 10/14/1 12/17/1 11/15/1 +f 12/17/5 14/20/5 13/18/5 +f 14/20/2 16/23/2 15/21/2 +f 16/23/3 14/20/3 12/17/3 +f 13/22/4 15/21/4 9/24/4 +f 18/26/3 20/30/3 19/27/3 +f 18/26/2 22/46/2 24/29/2 +f 19/27/1 23/42/1 21/31/1 +f 25/32/4 27/44/4 28/33/4 +f 28/35/1 32/82/1 30/36/1 +f 29/38/2 31/43/2 27/39/2 +f 21/31/6 29/83/6 25/41/6 +f 23/42/5 19/27/5 27/39/5 +f 20/30/5 28/33/5 27/44/5 +f 24/29/5 32/82/5 28/35/5 +f 17/28/6 25/84/6 26/45/6 +f 22/46/6 18/26/6 26/47/6 +f 34/49/4 36/53/4 35/50/4 +f 34/49/2 38/69/2 40/52/2 +f 33/51/1 35/50/1 39/54/1 +f 41/56/3 43/67/3 44/57/3 +f 48/59/1 46/85/1 42/60/1 +f 45/62/2 47/66/2 43/63/2 +f 37/55/5 45/86/5 41/65/5 +f 39/54/6 35/50/6 43/63/6 +f 36/53/6 44/57/6 43/67/6 +f 40/52/6 48/59/6 44/61/6 +f 33/51/5 41/87/5 42/68/5 +f 38/69/5 34/49/5 42/70/5 +f 54/74/3 52/88/3 50/89/3 +f 50/89/3 64/90/3 62/72/3 +f 62/72/3 60/91/3 58/73/3 +f 58/73/3 56/92/3 54/74/3 +f 54/74/3 50/89/3 62/72/3 +f 63/77/4 49/93/4 51/94/4 +f 51/94/4 53/95/4 63/77/4 +f 53/95/4 55/96/4 63/77/4 +f 55/96/4 57/97/4 63/77/4 +f 57/97/4 59/75/4 63/77/4 +f 66/78/4 68/98/4 67/79/4 +s 1 +f 50/99/5 51/100/7 49/101/5 +f 52/102/7 53/103/2 51/100/7 +f 54/104/2 55/105/8 53/106/2 +f 56/107/8 57/108/6 55/105/8 +f 58/109/6 59/110/9 57/108/6 +f 60/111/9 61/112/1 59/110/9 +f 62/113/1 63/114/10 61/112/1 +f 64/115/10 49/101/5 63/114/10 +f 50/99/5 52/102/7 51/100/7 +f 52/102/7 54/116/2 53/103/2 +f 54/104/2 56/107/8 55/105/8 +f 56/107/8 58/109/6 57/108/6 +f 58/109/6 60/111/9 59/110/9 +f 60/111/9 62/113/1 61/112/1 +f 62/113/1 64/115/10 63/114/10 +f 64/115/10 50/99/5 49/101/5 o Ring v -0.000000 1.250000 -1.375000 v -0.526190 1.250000 -1.270334 @@ -195,79 +492,79 @@ vt 0.210526 0.222222 vt 0.263158 0.240741 vt 0.263158 0.222222 vt 0.210526 0.259259 -vt 0.263158 0.277778 -vt 0.217105 0.277778 +vt 0.259868 0.277778 +vt 0.213816 0.277778 vt 0.157895 0.259259 -vt 0.210526 0.277778 -vt 0.164474 0.277778 +vt 0.207237 0.277778 +vt 0.161184 0.277778 vt 0.105263 0.259259 -vt 0.157895 0.277778 -vt 0.111842 0.277778 +vt 0.154605 0.277778 +vt 0.108553 0.277778 vt 0.052632 0.259259 -vt 0.105263 0.277778 -vt 0.059211 0.277778 +vt 0.101974 0.277778 +vt 0.055921 0.277778 vt -0.000000 0.259259 -vt 0.052632 0.277778 -vt 0.006579 0.277778 +vt 0.049342 0.277778 +vt 0.003289 0.277778 vt 0.842105 0.259259 -vt 0.796053 0.277778 +vt 0.792763 0.277778 vt 0.789474 0.259259 vt 0.736842 0.259259 -vt 0.789474 0.277778 -vt 0.743421 0.277778 -vt 0.690789 0.277778 +vt 0.786184 0.277778 +vt 0.740132 0.277778 +vt 0.687500 0.277778 vt 0.684211 0.259259 -vt 0.638158 0.277778 +vt 0.634869 0.277778 vt 0.631579 0.259259 -vt 0.585526 0.277778 +vt 0.582237 0.277778 vt 0.578947 0.259259 -vt 0.532895 0.277778 +vt 0.529605 0.277778 vt 0.526316 0.259259 -vt 0.480263 0.277778 +vt 0.476974 0.277778 vt 0.473684 0.259259 -vt 0.427632 0.277778 +vt 0.424342 0.277778 vt 0.421053 0.259259 -vt 0.375000 0.277778 +vt 0.371711 0.277778 vt 0.368421 0.259259 vt 0.315789 0.259259 -vt 0.368421 0.277778 -vt 0.322368 0.277778 +vt 0.365132 0.277778 +vt 0.319079 0.277778 vt 0.263158 0.259259 -vt 0.315789 0.277778 -vt 0.269737 0.277778 +vt 0.312500 0.277778 +vt 0.266447 0.277778 vt 0.263158 0.185185 -vt 0.315789 0.148148 +vt 0.312500 0.148148 vt 0.315789 0.185185 vt 0.210526 0.185185 -vt 0.263158 0.148148 +vt 0.259868 0.148148 vt 0.157895 0.185185 -vt 0.210526 0.148148 +vt 0.207237 0.148148 vt 0.105263 0.185185 -vt 0.157895 0.148148 +vt 0.154605 0.148148 vt 0.052632 0.185185 -vt 0.105263 0.148148 +vt 0.101974 0.148148 vt 0.000000 0.185185 -vt 0.052632 0.148148 -vt 0.796053 0.148148 +vt 0.049342 0.148148 +vt 0.792763 0.148148 vt 0.842105 0.185185 vt 0.789474 0.185185 -vt 0.743421 0.148148 +vt 0.740132 0.148148 vt 0.736842 0.185185 -vt 0.690789 0.148148 +vt 0.687500 0.148148 vt 0.684211 0.185185 -vt 0.638158 0.148148 +vt 0.634869 0.148148 vt 0.631579 0.185185 -vt 0.585526 0.148148 +vt 0.582237 0.148148 vt 0.578947 0.185185 -vt 0.532895 0.148148 +vt 0.529605 0.148148 vt 0.526316 0.185185 -vt 0.480263 0.148148 +vt 0.476974 0.148148 vt 0.473684 0.185185 -vt 0.427632 0.148148 +vt 0.424342 0.148148 vt 0.421053 0.185185 -vt 0.375000 0.148148 +vt 0.371711 0.148148 vt 0.368421 0.185185 -vt 0.368421 0.148148 +vt 0.365132 0.148148 vt 0.861842 0.490741 vt 0.796053 0.518519 vt 0.796053 0.490741 @@ -281,12 +578,12 @@ vt 0.947368 0.518519 vt 0.881579 0.574074 vt 0.881579 0.518519 vt 0.861842 0.574074 -vt 0.723684 0.629566 -vt 0.710572 0.611111 -vt 0.723684 0.592656 -vt 0.688096 0.624161 -vt 0.688096 0.598061 -vt 0.706641 0.598061 +vt 0.720395 0.629566 +vt 0.707282 0.611111 +vt 0.720395 0.592656 +vt 0.684807 0.624161 +vt 0.684807 0.598061 +vt 0.703351 0.598061 vt 0.907895 0.481481 vt 0.894737 0.462963 vt 0.907895 0.462963 @@ -310,12 +607,12 @@ vt 0.947368 0.518519 vt 0.881579 0.574074 vt 0.881579 0.518519 vt 0.861842 0.574074 -vt 0.723684 0.629566 -vt 0.710572 0.611111 -vt 0.723684 0.592656 -vt 0.688096 0.624161 -vt 0.688096 0.598061 -vt 0.706641 0.598061 +vt 0.720395 0.629566 +vt 0.707282 0.611111 +vt 0.720395 0.592656 +vt 0.684807 0.624161 +vt 0.684807 0.598061 +vt 0.703351 0.598061 vt 0.907895 0.481481 vt 0.894737 0.462963 vt 0.907895 0.462963 @@ -327,72 +624,72 @@ vt 0.894737 0.444444 vt 0.947368 0.444444 vt 0.934211 0.462963 vt 0.842105 0.240741 -vt 0.842105 0.277778 -vt 0.736842 0.277778 -vt 0.684211 0.277778 -vt 0.631579 0.277778 -vt 0.578947 0.277778 -vt 0.526316 0.277778 -vt 0.473684 0.277778 -vt 0.421053 0.277778 -vt 0.269737 0.148148 -vt 0.217105 0.148148 -vt 0.164474 0.148148 -vt 0.111842 0.148148 -vt 0.059211 0.148148 -vt 0.006579 0.148148 -vt 0.842105 0.148148 -vt 0.789474 0.148148 -vt 0.736842 0.148148 -vt 0.684211 0.148148 -vt 0.631579 0.148148 -vt 0.578947 0.148148 -vt 0.526316 0.148148 -vt 0.473684 0.148148 -vt 0.421053 0.148148 -vt 0.322368 0.148148 +vt 0.838816 0.277778 +vt 0.733553 0.277778 +vt 0.680921 0.277778 +vt 0.628289 0.277778 +vt 0.575658 0.277778 +vt 0.523026 0.277778 +vt 0.470395 0.277778 +vt 0.417763 0.277778 +vt 0.266447 0.148148 +vt 0.213816 0.148148 +vt 0.161184 0.148148 +vt 0.108553 0.148148 +vt 0.055921 0.148148 +vt 0.003289 0.148148 +vt 0.838816 0.148148 +vt 0.786184 0.148148 +vt 0.733553 0.148148 +vt 0.680921 0.148148 +vt 0.628289 0.148148 +vt 0.575658 0.148148 +vt 0.523026 0.148148 +vt 0.470395 0.148148 +vt 0.417763 0.148148 +vt 0.319079 0.148148 vt 0.947368 0.574074 -vt 0.732956 0.598061 -vt 0.736797 0.611111 -vt 0.732957 0.624161 -vt 0.714412 0.624161 -vt 0.714412 0.598061 -vt 0.684256 0.611111 -vt 0.697369 0.592656 -vt 0.710481 0.611111 -vt 0.706641 0.624161 -vt 0.697369 0.629566 +vt 0.729667 0.598061 +vt 0.733508 0.611111 +vt 0.729667 0.624161 +vt 0.711123 0.624161 +vt 0.711123 0.598061 +vt 0.680966 0.611111 +vt 0.694079 0.592656 +vt 0.707192 0.611111 +vt 0.703351 0.624161 +vt 0.694079 0.629566 vt 0.894737 0.481481 vt 0.947368 0.462963 vt 0.947368 0.574074 -vt 0.732956 0.598061 -vt 0.736797 0.611111 -vt 0.732957 0.624161 -vt 0.714412 0.624161 -vt 0.714412 0.598061 -vt 0.684256 0.611111 -vt 0.697369 0.592656 -vt 0.710481 0.611111 -vt 0.706641 0.624161 -vt 0.697369 0.629566 +vt 0.729667 0.598061 +vt 0.733508 0.611111 +vt 0.729667 0.624161 +vt 0.711123 0.624161 +vt 0.711123 0.598061 +vt 0.680966 0.611111 +vt 0.694079 0.592656 +vt 0.707192 0.611111 +vt 0.703351 0.624161 +vt 0.694079 0.629566 vt 0.894737 0.481481 vt 0.947368 0.462963 -vt 0.322368 0.296296 -vt 0.796053 0.296296 -vt 0.375000 0.296296 -vt 0.006579 0.296296 -vt 0.427632 0.296296 -vt 0.059211 0.296296 -vt 0.480263 0.296296 -vt 0.111842 0.296296 -vt 0.532895 0.296296 -vt 0.164474 0.296296 -vt 0.638158 0.296296 -vt 0.585526 0.296296 -vt 0.217105 0.296296 -vt 0.690789 0.296296 -vt 0.269737 0.296296 -vt 0.743421 0.296296 +vt 0.319079 0.296296 +vt 0.792763 0.296296 +vt 0.371711 0.296296 +vt 0.003289 0.296296 +vt 0.424342 0.296296 +vt 0.055921 0.296296 +vt 0.476974 0.296296 +vt 0.108553 0.296296 +vt 0.529605 0.296296 +vt 0.161184 0.296296 +vt 0.634869 0.296296 +vt 0.582237 0.296296 +vt 0.213816 0.296296 +vt 0.687500 0.296296 +vt 0.266447 0.296296 +vt 0.740132 0.296296 vt 0.763158 0.574074 vt 0.776316 0.592593 vt 0.763158 0.592593 @@ -427,22 +724,22 @@ vt 0.736842 0.592593 vt 0.736842 0.574074 vt 0.750000 0.592593 vt 0.750000 0.574074 -vt 0.368421 0.296296 -vt 0.842105 0.296296 -vt 0.421053 0.296296 -vt 0.052632 0.296296 -vt 0.473684 0.296296 -vt 0.105263 0.296296 -vt 0.526316 0.296296 -vt 0.157895 0.296296 -vt 0.578947 0.296296 -vt 0.210526 0.296296 -vt 0.684211 0.296296 -vt 0.631579 0.296296 -vt 0.263158 0.296296 -vt 0.736842 0.296296 -vt 0.315789 0.296296 -vt 0.789474 0.296296 +vt 0.365132 0.296296 +vt 0.838816 0.296296 +vt 0.417763 0.296296 +vt 0.049342 0.296296 +vt 0.470395 0.296296 +vt 0.101974 0.296296 +vt 0.523026 0.296296 +vt 0.154605 0.296296 +vt 0.575658 0.296296 +vt 0.207237 0.296296 +vt 0.680921 0.296296 +vt 0.628289 0.296296 +vt 0.259868 0.296296 +vt 0.733553 0.296296 +vt 0.312500 0.296296 +vt 0.786184 0.296296 vt 0.789474 0.574074 vt 0.776316 0.574074 vn 0.0000 1.0000 0.0000 @@ -468,299 +765,299 @@ vn 0.0000 -0.7071 0.7071 vn 0.0000 0.7071 0.7071 vn 0.0000 0.7071 -0.7071 s off -f 27/1/1 44/2/1 43/3/1 -f 28/4/1 45/5/1 44/2/1 -f 30/6/1 45/5/1 29/7/1 -f 31/8/1 46/9/1 30/6/1 -f 32/10/1 47/11/1 31/8/1 -f 17/12/1 48/13/1 32/10/1 -f 18/14/1 33/15/1 17/12/1 -f 19/16/1 34/17/1 18/14/1 -f 20/18/1 35/19/1 19/16/1 -f 21/20/1 36/21/1 20/18/1 -f 22/22/1 37/23/1 21/24/1 -f 22/22/1 39/25/1 38/26/1 -f 23/27/1 40/28/1 39/25/1 -f 24/29/1 41/30/1 40/28/1 -f 25/31/1 42/32/1 41/30/1 -f 26/33/1 43/3/1 42/32/1 -f 57/34/1 74/35/1 73/36/1 -f 56/37/1 73/38/1 72/39/1 -f 55/40/1 72/41/1 71/42/1 -f 54/43/1 71/44/1 70/45/1 -f 53/46/1 70/47/1 69/48/1 -f 53/49/1 68/50/1 52/51/1 -f 51/52/1 68/53/1 67/54/1 -f 51/52/1 66/55/1 50/56/1 -f 50/56/1 65/57/1 49/58/1 -f 49/58/1 80/59/1 64/60/1 -f 64/60/1 79/61/1 63/62/1 -f 63/62/1 78/63/1 62/64/1 -f 62/64/1 77/65/1 61/66/1 -f 61/66/1 76/67/1 60/68/1 -f 59/69/1 76/70/1 75/71/1 -f 58/72/1 75/73/1 74/74/1 -f 10/75/2 91/76/2 11/77/2 -f 9/78/2 90/79/2 10/75/2 -f 8/80/2 89/81/2 9/78/2 -f 7/82/2 88/83/2 8/80/2 -f 6/84/2 87/85/2 7/82/2 -f 5/86/2 86/87/2 6/84/2 -f 84/88/2 5/89/2 4/90/2 -f 83/91/2 4/90/2 3/92/2 -f 82/93/2 3/92/2 2/94/2 -f 81/95/2 2/94/2 1/96/2 -f 96/97/2 1/96/2 16/98/2 -f 95/99/2 16/98/2 15/100/2 -f 94/101/2 15/100/2 14/102/2 -f 93/103/2 14/102/2 13/104/2 -f 92/105/2 13/104/2 12/106/2 -f 11/77/2 92/107/2 12/106/2 -f 99/108/2 98/109/2 97/110/2 -f 103/111/1 101/112/1 102/113/1 -f 98/109/3 102/114/3 97/115/3 -f 100/116/4 103/111/4 98/109/4 -f 97/117/5 101/118/5 99/119/5 -f 99/119/6 104/120/6 100/116/6 -f 118/121/4 114/122/4 110/123/4 -f 119/124/5 107/125/5 111/126/5 -f 127/127/1 125/128/1 126/129/1 -f 122/130/6 126/129/6 121/131/6 -f 124/132/5 127/133/5 122/130/5 -f 121/131/4 125/128/4 123/134/4 -f 123/135/3 128/136/3 124/132/3 -f 131/137/2 130/138/2 129/139/2 -f 135/140/1 133/141/1 134/142/1 -f 130/138/6 134/143/6 129/144/6 -f 132/145/5 135/140/5 130/138/5 -f 129/146/4 133/147/4 131/148/4 -f 131/148/3 136/149/3 132/145/3 -f 150/150/5 146/151/5 142/152/5 -f 151/153/4 139/154/4 143/155/4 -f 159/156/1 157/157/1 158/158/1 -f 154/159/3 158/158/3 153/160/3 -f 156/161/4 159/162/4 154/159/4 -f 153/160/5 157/157/5 155/163/5 -f 155/164/6 160/165/6 156/161/6 -f 27/1/1 28/4/1 44/2/1 -f 28/4/1 29/7/1 45/5/1 -f 30/6/1 46/9/1 45/5/1 -f 31/8/1 47/11/1 46/9/1 -f 32/10/1 48/13/1 47/11/1 -f 17/12/1 33/15/1 48/13/1 -f 18/14/1 34/17/1 33/15/1 -f 19/16/1 35/19/1 34/17/1 -f 20/18/1 36/21/1 35/19/1 -f 21/20/1 37/166/1 36/21/1 -f 22/22/1 38/26/1 37/23/1 -f 22/22/1 23/27/1 39/25/1 -f 23/27/1 24/29/1 40/28/1 -f 24/29/1 25/31/1 41/30/1 -f 25/31/1 26/33/1 42/32/1 -f 26/33/1 27/1/1 43/3/1 -f 57/34/1 58/72/1 74/35/1 -f 56/37/1 57/34/1 73/38/1 -f 55/40/1 56/37/1 72/41/1 -f 54/43/1 55/40/1 71/44/1 -f 53/46/1 54/43/1 70/47/1 -f 53/49/1 69/167/1 68/50/1 -f 51/52/1 52/51/1 68/53/1 -f 51/52/1 67/168/1 66/55/1 -f 50/56/1 66/169/1 65/57/1 -f 49/58/1 65/170/1 80/59/1 -f 64/60/1 80/171/1 79/61/1 -f 63/62/1 79/172/1 78/63/1 -f 62/64/1 78/173/1 77/65/1 -f 61/66/1 77/174/1 76/67/1 -f 59/69/1 60/68/1 76/70/1 -f 58/72/1 59/69/1 75/73/1 -f 10/75/2 90/175/2 91/76/2 -f 9/78/2 89/176/2 90/79/2 -f 8/80/2 88/177/2 89/81/2 -f 7/82/2 87/178/2 88/83/2 -f 6/84/2 86/179/2 87/85/2 -f 5/86/2 85/180/2 86/87/2 -f 84/88/2 85/181/2 5/89/2 -f 83/91/2 84/182/2 4/90/2 -f 82/93/2 83/183/2 3/92/2 -f 81/95/2 82/184/2 2/94/2 -f 96/97/2 81/185/2 1/96/2 -f 95/99/2 96/186/2 16/98/2 -f 94/101/2 95/187/2 15/100/2 -f 93/103/2 94/188/2 14/102/2 -f 92/105/2 93/189/2 13/104/2 -f 11/77/2 91/190/2 92/107/2 -f 99/108/2 100/116/2 98/109/2 -f 103/111/1 104/120/1 101/112/1 -f 98/109/3 103/111/3 102/114/3 -f 100/116/4 104/120/4 103/111/4 -f 97/117/5 102/191/5 101/118/5 -f 99/119/6 101/118/6 104/120/6 -f 110/123/4 108/192/4 106/193/4 -f 106/193/4 120/194/4 110/123/4 -f 120/194/4 118/121/4 110/123/4 -f 118/121/4 116/195/4 114/122/4 -f 114/122/4 112/196/4 110/123/4 -f 119/124/5 105/197/5 107/125/5 -f 107/125/5 109/198/5 111/126/5 -f 111/126/5 113/199/5 119/124/5 -f 113/199/5 115/200/5 119/124/5 -f 115/200/5 117/201/5 119/124/5 -f 127/127/1 128/202/1 125/128/1 -f 122/130/6 127/133/6 126/129/6 -f 124/132/5 128/136/5 127/133/5 -f 121/131/4 126/129/4 125/128/4 -f 123/135/3 125/203/3 128/136/3 -f 131/137/2 132/145/2 130/138/2 -f 135/140/1 136/149/1 133/141/1 -f 130/138/6 135/140/6 134/143/6 -f 132/145/5 136/149/5 135/140/5 -f 129/146/4 134/204/4 133/147/4 -f 131/148/3 133/147/3 136/149/3 -f 142/152/5 140/205/5 138/206/5 -f 138/206/5 152/207/5 142/152/5 -f 152/207/5 150/150/5 142/152/5 -f 150/150/5 148/208/5 146/151/5 -f 146/151/5 144/209/5 142/152/5 -f 151/153/4 137/210/4 139/154/4 -f 139/154/4 141/211/4 143/155/4 -f 143/155/4 145/212/4 151/153/4 -f 145/212/4 147/213/4 151/153/4 -f 147/213/4 149/214/4 151/153/4 -f 159/156/1 160/215/1 157/157/1 -f 154/159/3 159/162/3 158/158/3 -f 156/161/4 160/165/4 159/162/4 -f 153/160/5 158/158/5 157/157/5 -f 155/164/6 157/216/6 160/165/6 +f 95/117/11 112/118/11 111/119/11 +f 96/120/11 113/121/11 112/118/11 +f 98/122/11 113/121/11 97/123/11 +f 99/124/11 114/125/11 98/122/11 +f 100/126/11 115/127/11 99/124/11 +f 85/128/11 116/129/11 100/126/11 +f 86/130/11 101/131/11 85/128/11 +f 87/132/11 102/133/11 86/130/11 +f 88/134/11 103/135/11 87/132/11 +f 89/136/11 104/137/11 88/134/11 +f 90/138/11 105/139/11 89/140/11 +f 90/138/11 107/141/11 106/142/11 +f 91/143/11 108/144/11 107/141/11 +f 92/145/11 109/146/11 108/144/11 +f 93/147/11 110/148/11 109/146/11 +f 94/149/11 111/119/11 110/148/11 +f 125/150/11 142/151/11 141/152/11 +f 124/153/11 141/154/11 140/155/11 +f 123/156/11 140/157/11 139/158/11 +f 122/159/11 139/160/11 138/161/11 +f 121/162/11 138/163/11 137/164/11 +f 121/165/11 136/166/11 120/167/11 +f 119/168/11 136/169/11 135/170/11 +f 119/168/11 134/171/11 118/172/11 +f 118/172/11 133/173/11 117/174/11 +f 117/174/11 148/175/11 132/176/11 +f 132/176/11 147/177/11 131/178/11 +f 131/178/11 146/179/11 130/180/11 +f 130/180/11 145/181/11 129/182/11 +f 129/182/11 144/183/11 128/184/11 +f 127/185/11 144/186/11 143/187/11 +f 126/188/11 143/189/11 142/190/11 +f 78/191/12 159/192/12 79/193/12 +f 77/194/12 158/195/12 78/191/12 +f 76/196/12 157/197/12 77/194/12 +f 75/198/12 156/199/12 76/196/12 +f 74/200/12 155/201/12 75/198/12 +f 73/202/12 154/203/12 74/200/12 +f 152/204/12 73/205/12 72/206/12 +f 151/207/12 72/206/12 71/208/12 +f 150/209/12 71/208/12 70/210/12 +f 149/211/12 70/210/12 69/212/12 +f 164/213/12 69/212/12 84/214/12 +f 163/215/12 84/214/12 83/216/12 +f 162/217/12 83/216/12 82/218/12 +f 161/219/12 82/218/12 81/220/12 +f 160/221/12 81/220/12 80/222/12 +f 79/193/12 160/223/12 80/222/12 +f 167/224/12 166/225/12 165/226/12 +f 171/227/11 169/228/11 170/229/11 +f 166/225/13 170/230/13 165/231/13 +f 168/232/14 171/227/14 166/225/14 +f 165/233/15 169/234/15 167/235/15 +f 167/235/16 172/236/16 168/232/16 +f 186/237/14 182/238/14 178/239/14 +f 187/240/15 175/241/15 179/242/15 +f 195/243/11 193/244/11 194/245/11 +f 190/246/16 194/245/16 189/247/16 +f 192/248/15 195/249/15 190/246/15 +f 189/247/14 193/244/14 191/250/14 +f 191/251/13 196/252/13 192/248/13 +f 199/253/12 198/254/12 197/255/12 +f 203/256/11 201/257/11 202/258/11 +f 198/254/16 202/259/16 197/260/16 +f 200/261/15 203/256/15 198/254/15 +f 197/262/14 201/263/14 199/264/14 +f 199/264/13 204/265/13 200/261/13 +f 218/266/15 214/267/15 210/268/15 +f 219/269/14 207/270/14 211/271/14 +f 227/272/11 225/273/11 226/274/11 +f 222/275/13 226/274/13 221/276/13 +f 224/277/14 227/278/14 222/275/14 +f 221/276/15 225/273/15 223/279/15 +f 223/280/16 228/281/16 224/277/16 +f 95/117/11 96/120/11 112/118/11 +f 96/120/11 97/123/11 113/121/11 +f 98/122/11 114/125/11 113/121/11 +f 99/124/11 115/127/11 114/125/11 +f 100/126/11 116/129/11 115/127/11 +f 85/128/11 101/131/11 116/129/11 +f 86/130/11 102/133/11 101/131/11 +f 87/132/11 103/135/11 102/133/11 +f 88/134/11 104/137/11 103/135/11 +f 89/136/11 105/282/11 104/137/11 +f 90/138/11 106/142/11 105/139/11 +f 90/138/11 91/143/11 107/141/11 +f 91/143/11 92/145/11 108/144/11 +f 92/145/11 93/147/11 109/146/11 +f 93/147/11 94/149/11 110/148/11 +f 94/149/11 95/117/11 111/119/11 +f 125/150/11 126/188/11 142/151/11 +f 124/153/11 125/150/11 141/154/11 +f 123/156/11 124/153/11 140/157/11 +f 122/159/11 123/156/11 139/160/11 +f 121/162/11 122/159/11 138/163/11 +f 121/165/11 137/283/11 136/166/11 +f 119/168/11 120/167/11 136/169/11 +f 119/168/11 135/284/11 134/171/11 +f 118/172/11 134/285/11 133/173/11 +f 117/174/11 133/286/11 148/175/11 +f 132/176/11 148/287/11 147/177/11 +f 131/178/11 147/288/11 146/179/11 +f 130/180/11 146/289/11 145/181/11 +f 129/182/11 145/290/11 144/183/11 +f 127/185/11 128/184/11 144/186/11 +f 126/188/11 127/185/11 143/189/11 +f 78/191/12 158/291/12 159/192/12 +f 77/194/12 157/292/12 158/195/12 +f 76/196/12 156/293/12 157/197/12 +f 75/198/12 155/294/12 156/199/12 +f 74/200/12 154/295/12 155/201/12 +f 73/202/12 153/296/12 154/203/12 +f 152/204/12 153/297/12 73/205/12 +f 151/207/12 152/298/12 72/206/12 +f 150/209/12 151/299/12 71/208/12 +f 149/211/12 150/300/12 70/210/12 +f 164/213/12 149/301/12 69/212/12 +f 163/215/12 164/302/12 84/214/12 +f 162/217/12 163/303/12 83/216/12 +f 161/219/12 162/304/12 82/218/12 +f 160/221/12 161/305/12 81/220/12 +f 79/193/12 159/306/12 160/223/12 +f 167/224/12 168/232/12 166/225/12 +f 171/227/11 172/236/11 169/228/11 +f 166/225/13 171/227/13 170/230/13 +f 168/232/14 172/236/14 171/227/14 +f 165/233/15 170/307/15 169/234/15 +f 167/235/16 169/234/16 172/236/16 +f 178/239/14 176/308/14 174/309/14 +f 174/309/14 188/310/14 178/239/14 +f 188/310/14 186/237/14 178/239/14 +f 186/237/14 184/311/14 182/238/14 +f 182/238/14 180/312/14 178/239/14 +f 187/240/15 173/313/15 175/241/15 +f 175/241/15 177/314/15 179/242/15 +f 179/242/15 181/315/15 187/240/15 +f 181/315/15 183/316/15 187/240/15 +f 183/316/15 185/317/15 187/240/15 +f 195/243/11 196/318/11 193/244/11 +f 190/246/16 195/249/16 194/245/16 +f 192/248/15 196/252/15 195/249/15 +f 189/247/14 194/245/14 193/244/14 +f 191/251/13 193/319/13 196/252/13 +f 199/253/12 200/261/12 198/254/12 +f 203/256/11 204/265/11 201/257/11 +f 198/254/16 203/256/16 202/259/16 +f 200/261/15 204/265/15 203/256/15 +f 197/262/14 202/320/14 201/263/14 +f 199/264/13 201/263/13 204/265/13 +f 210/268/15 208/321/15 206/322/15 +f 206/322/15 220/323/15 210/268/15 +f 220/323/15 218/266/15 210/268/15 +f 218/266/15 216/324/15 214/267/15 +f 214/267/15 212/325/15 210/268/15 +f 219/269/14 205/326/14 207/270/14 +f 207/270/14 209/327/14 211/271/14 +f 211/271/14 213/328/14 219/269/14 +f 213/328/14 215/329/14 219/269/14 +f 215/329/14 217/330/14 219/269/14 +f 227/272/11 228/331/11 225/273/11 +f 222/275/13 227/278/13 226/274/13 +f 224/277/14 228/281/14 227/278/14 +f 221/276/15 226/274/15 225/273/15 +f 223/280/16 225/332/16 228/281/16 s 1 -f 13/104/4 28/4/7 12/106/7 -f 6/84/8 21/24/5 5/86/5 -f 14/102/9 29/7/4 13/104/4 -f 7/82/10 22/22/8 6/84/8 -f 15/100/11 30/6/9 14/102/9 -f 8/80/12 23/27/10 7/82/10 -f 16/98/13 31/8/11 15/100/11 -f 9/78/3 24/29/12 8/80/12 -f 2/94/14 17/12/6 1/96/6 -f 1/96/6 32/10/13 16/98/13 -f 10/75/15 25/31/3 9/78/3 -f 3/92/16 18/14/14 2/94/14 -f 11/77/17 26/33/15 10/75/15 -f 4/90/18 19/16/16 3/92/16 -f 12/106/7 27/1/17 11/77/17 -f 5/89/5 20/18/18 4/90/18 -f 34/17/15 49/58/3 33/15/3 -f 33/15/3 64/60/12 48/13/12 -f 42/32/14 57/34/6 41/30/6 -f 35/19/17 50/56/15 34/17/15 -f 43/3/16 58/72/14 42/32/14 -f 36/21/7 51/52/17 35/19/17 -f 44/2/18 59/69/16 43/3/16 -f 37/166/4 52/51/7 36/21/7 -f 45/5/5 60/68/18 44/2/18 -f 38/26/9 53/46/4 37/23/4 -f 46/9/8 61/66/5 45/5/5 -f 39/25/11 54/43/9 38/26/9 -f 47/11/10 62/64/8 46/9/8 -f 40/28/13 55/40/11 39/25/11 -f 48/13/12 63/62/10 47/11/10 -f 41/30/6 56/37/13 40/28/13 -f 76/70/18 91/217/16 75/71/16 -f 69/167/4 84/218/7 68/50/7 -f 77/174/5 92/219/18 76/67/18 -f 70/47/9 85/220/4 69/48/4 -f 78/173/8 93/221/5 77/65/5 -f 71/44/11 86/222/9 70/45/9 -f 79/172/10 94/223/8 78/63/8 -f 72/41/13 87/224/11 71/42/11 -f 80/171/12 95/225/10 79/61/10 -f 73/38/6 88/226/13 72/39/13 -f 66/169/15 81/227/3 65/57/3 -f 65/170/3 96/228/12 80/59/12 -f 74/35/14 89/229/6 73/36/6 -f 67/168/17 82/230/15 66/55/15 -f 75/73/16 90/231/14 74/74/14 -f 68/53/7 83/232/17 67/54/17 -f 106/233/6 107/234/19 105/235/6 -f 108/236/19 109/237/2 107/234/19 -f 110/238/2 111/239/20 109/240/2 -f 112/241/20 113/242/3 111/239/20 -f 114/243/3 115/244/21 113/242/3 -f 116/245/21 117/246/1 115/244/21 -f 118/247/1 119/248/22 117/246/1 -f 120/249/22 105/235/6 119/248/22 -f 138/250/3 139/251/20 137/252/3 -f 139/251/20 142/253/2 141/254/2 -f 142/255/2 143/256/19 141/257/2 -f 144/258/19 145/259/6 143/256/19 -f 146/260/6 147/261/22 145/259/6 -f 148/262/22 149/263/1 147/261/22 -f 150/264/1 151/265/21 149/263/1 -f 152/266/21 137/252/3 151/265/21 -f 13/104/4 29/7/4 28/4/7 -f 6/84/8 22/22/8 21/24/5 -f 14/102/9 30/6/9 29/7/4 -f 7/82/10 23/27/10 22/22/8 -f 15/100/11 31/8/11 30/6/9 -f 8/80/12 24/29/12 23/27/10 -f 16/98/13 32/10/13 31/8/11 -f 9/78/3 25/31/3 24/29/12 -f 2/94/14 18/14/14 17/12/6 -f 1/96/6 17/12/6 32/10/13 -f 10/75/15 26/33/15 25/31/3 -f 3/92/16 19/16/16 18/14/14 -f 11/77/17 27/1/17 26/33/15 -f 4/90/18 20/18/18 19/16/16 -f 12/106/7 28/4/7 27/1/17 -f 5/89/5 21/20/5 20/18/18 -f 34/17/15 50/56/15 49/58/3 -f 33/15/3 49/58/3 64/60/12 -f 42/32/14 58/72/14 57/34/6 -f 35/19/17 51/52/17 50/56/15 -f 43/3/16 59/69/16 58/72/14 -f 36/21/7 52/51/7 51/52/17 -f 44/2/18 60/68/18 59/69/16 -f 37/166/4 53/49/4 52/51/7 -f 45/5/5 61/66/5 60/68/18 -f 38/26/9 54/43/9 53/46/4 -f 46/9/8 62/64/8 61/66/5 -f 39/25/11 55/40/11 54/43/9 -f 47/11/10 63/62/10 62/64/8 -f 40/28/13 56/37/13 55/40/11 -f 48/13/12 64/60/12 63/62/10 -f 41/30/6 57/34/6 56/37/13 -f 76/70/18 92/267/18 91/217/16 -f 69/167/4 85/268/4 84/218/7 -f 77/174/5 93/269/5 92/219/18 -f 70/47/9 86/270/9 85/220/4 -f 78/173/8 94/271/8 93/221/5 -f 71/44/11 87/272/11 86/222/9 -f 79/172/10 95/273/10 94/223/8 -f 72/41/13 88/274/13 87/224/11 -f 80/171/12 96/275/12 95/225/10 -f 73/38/6 89/276/6 88/226/13 -f 66/169/15 82/277/15 81/227/3 -f 65/170/3 81/278/3 96/228/12 -f 74/35/14 90/279/14 89/229/6 -f 67/168/17 83/280/17 82/230/15 -f 75/73/16 91/281/16 90/231/14 -f 68/53/7 84/282/7 83/232/17 -f 106/233/6 108/236/19 107/234/19 -f 108/236/19 110/283/2 109/237/2 -f 110/238/2 112/241/20 111/239/20 -f 112/241/20 114/243/3 113/242/3 -f 114/243/3 116/245/21 115/244/21 -f 116/245/21 118/247/1 117/246/1 -f 118/247/1 120/249/22 119/248/22 -f 120/249/22 106/233/6 105/235/6 -f 138/250/3 140/284/20 139/251/20 -f 139/251/20 140/284/20 142/253/2 -f 142/255/2 144/258/19 143/256/19 -f 144/258/19 146/260/6 145/259/6 -f 146/260/6 148/262/22 147/261/22 -f 148/262/22 150/264/1 149/263/1 -f 150/264/1 152/266/21 151/265/21 -f 152/266/21 138/250/3 137/252/3 +f 81/220/14 96/120/17 80/222/17 +f 74/200/18 89/140/15 73/202/15 +f 82/218/19 97/123/14 81/220/14 +f 75/198/20 90/138/18 74/200/18 +f 83/216/21 98/122/19 82/218/19 +f 76/196/22 91/143/20 75/198/20 +f 84/214/23 99/124/21 83/216/21 +f 77/194/13 92/145/22 76/196/22 +f 70/210/24 85/128/16 69/212/16 +f 69/212/16 100/126/23 84/214/23 +f 78/191/25 93/147/13 77/194/13 +f 71/208/26 86/130/24 70/210/24 +f 79/193/27 94/149/25 78/191/25 +f 72/206/28 87/132/26 71/208/26 +f 80/222/17 95/117/27 79/193/27 +f 73/205/15 88/134/28 72/206/28 +f 102/133/25 117/174/13 101/131/13 +f 101/131/13 132/176/22 116/129/22 +f 110/148/24 125/150/16 109/146/16 +f 103/135/27 118/172/25 102/133/25 +f 111/119/26 126/188/24 110/148/24 +f 104/137/17 119/168/27 103/135/27 +f 112/118/28 127/185/26 111/119/26 +f 105/282/14 120/167/17 104/137/17 +f 113/121/15 128/184/28 112/118/28 +f 106/142/19 121/162/14 105/139/14 +f 114/125/18 129/182/15 113/121/15 +f 107/141/21 122/159/19 106/142/19 +f 115/127/20 130/180/18 114/125/18 +f 108/144/23 123/156/21 107/141/21 +f 116/129/22 131/178/20 115/127/20 +f 109/146/16 124/153/23 108/144/23 +f 144/186/28 159/333/26 143/187/26 +f 137/283/14 152/334/17 136/166/17 +f 145/290/15 160/335/28 144/183/28 +f 138/163/19 153/336/14 137/164/14 +f 146/289/18 161/337/15 145/181/15 +f 139/160/21 154/338/19 138/161/19 +f 147/288/20 162/339/18 146/179/18 +f 140/157/23 155/340/21 139/158/21 +f 148/287/22 163/341/20 147/177/20 +f 141/154/16 156/342/23 140/155/23 +f 134/285/25 149/343/13 133/173/13 +f 133/286/13 164/344/22 148/175/22 +f 142/151/24 157/345/16 141/152/16 +f 135/284/27 150/346/25 134/171/25 +f 143/189/26 158/347/24 142/190/24 +f 136/169/17 151/348/27 135/170/27 +f 174/349/16 175/350/29 173/351/16 +f 176/352/29 177/353/12 175/350/29 +f 178/354/12 179/355/30 177/356/12 +f 180/357/30 181/358/13 179/355/30 +f 182/359/13 183/360/31 181/358/13 +f 184/361/31 185/362/11 183/360/31 +f 186/363/11 187/364/32 185/362/11 +f 188/365/32 173/351/16 187/364/32 +f 206/366/13 207/367/30 205/368/13 +f 207/367/30 210/369/12 209/370/12 +f 210/371/12 211/372/29 209/373/12 +f 212/374/29 213/375/16 211/372/29 +f 214/376/16 215/377/32 213/375/16 +f 216/378/32 217/379/11 215/377/32 +f 218/380/11 219/381/31 217/379/11 +f 220/382/31 205/368/13 219/381/31 +f 81/220/14 97/123/14 96/120/17 +f 74/200/18 90/138/18 89/140/15 +f 82/218/19 98/122/19 97/123/14 +f 75/198/20 91/143/20 90/138/18 +f 83/216/21 99/124/21 98/122/19 +f 76/196/22 92/145/22 91/143/20 +f 84/214/23 100/126/23 99/124/21 +f 77/194/13 93/147/13 92/145/22 +f 70/210/24 86/130/24 85/128/16 +f 69/212/16 85/128/16 100/126/23 +f 78/191/25 94/149/25 93/147/13 +f 71/208/26 87/132/26 86/130/24 +f 79/193/27 95/117/27 94/149/25 +f 72/206/28 88/134/28 87/132/26 +f 80/222/17 96/120/17 95/117/27 +f 73/205/15 89/136/15 88/134/28 +f 102/133/25 118/172/25 117/174/13 +f 101/131/13 117/174/13 132/176/22 +f 110/148/24 126/188/24 125/150/16 +f 103/135/27 119/168/27 118/172/25 +f 111/119/26 127/185/26 126/188/24 +f 104/137/17 120/167/17 119/168/27 +f 112/118/28 128/184/28 127/185/26 +f 105/282/14 121/165/14 120/167/17 +f 113/121/15 129/182/15 128/184/28 +f 106/142/19 122/159/19 121/162/14 +f 114/125/18 130/180/18 129/182/15 +f 107/141/21 123/156/21 122/159/19 +f 115/127/20 131/178/20 130/180/18 +f 108/144/23 124/153/23 123/156/21 +f 116/129/22 132/176/22 131/178/20 +f 109/146/16 125/150/16 124/153/23 +f 144/186/28 160/383/28 159/333/26 +f 137/283/14 153/384/14 152/334/17 +f 145/290/15 161/385/15 160/335/28 +f 138/163/19 154/386/19 153/336/14 +f 146/289/18 162/387/18 161/337/15 +f 139/160/21 155/388/21 154/338/19 +f 147/288/20 163/389/20 162/339/18 +f 140/157/23 156/390/23 155/340/21 +f 148/287/22 164/391/22 163/341/20 +f 141/154/16 157/392/16 156/342/23 +f 134/285/25 150/393/25 149/343/13 +f 133/286/13 149/394/13 164/344/22 +f 142/151/24 158/395/24 157/345/16 +f 135/284/27 151/396/27 150/346/25 +f 143/189/26 159/397/26 158/347/24 +f 136/169/17 152/398/17 151/348/27 +f 174/349/16 176/352/29 175/350/29 +f 176/352/29 178/399/12 177/353/12 +f 178/354/12 180/357/30 179/355/30 +f 180/357/30 182/359/13 181/358/13 +f 182/359/13 184/361/31 183/360/31 +f 184/361/31 186/363/11 185/362/11 +f 186/363/11 188/365/32 187/364/32 +f 188/365/32 174/349/16 173/351/16 +f 206/366/13 208/400/30 207/367/30 +f 207/367/30 208/400/30 210/369/12 +f 210/371/12 212/374/29 211/372/29 +f 212/374/29 214/376/16 213/375/16 +f 214/376/16 216/378/32 215/377/32 +f 216/378/32 218/380/11 217/379/11 +f 218/380/11 220/382/31 219/381/31 +f 220/382/31 206/366/13 205/368/13 o ArmLower1 v 0.031250 1.625000 0.875000 v 0.093750 1.625000 0.875000 @@ -891,71 +1188,71 @@ vn 0.0000 0.7071 -0.7071 vn 0.0000 1.0000 -0.0000 vn 0.0000 0.7071 0.7071 s off -f 163/285/23 165/286/23 164/287/23 -f 162/288/24 166/289/24 163/285/24 -f 161/290/25 168/291/25 162/292/25 -f 164/287/26 167/293/26 161/290/26 -f 182/294/26 178/295/26 174/296/26 -f 183/297/24 171/298/24 175/299/24 -f 198/300/26 194/301/26 190/302/26 -f 195/303/24 197/304/24 199/305/24 -f 163/285/23 166/289/23 165/286/23 -f 162/288/24 168/306/24 166/289/24 -f 161/290/25 167/293/25 168/291/25 -f 164/287/26 165/286/26 167/293/26 -f 174/296/26 172/307/26 170/308/26 -f 170/308/26 184/309/26 174/296/26 -f 184/309/26 182/294/26 174/296/26 -f 182/294/26 180/310/26 178/295/26 -f 178/295/26 176/311/26 174/296/26 -f 183/297/24 169/312/24 171/298/24 -f 171/298/24 173/313/24 175/299/24 -f 175/299/24 177/314/24 183/297/24 -f 177/314/24 179/315/24 183/297/24 -f 179/315/24 181/316/24 183/297/24 -f 190/302/26 188/317/26 186/318/26 -f 186/318/26 200/319/26 198/300/26 -f 198/300/26 196/320/26 194/301/26 -f 194/301/26 192/321/26 190/302/26 -f 190/302/26 186/318/26 198/300/26 -f 199/305/24 185/322/24 187/323/24 -f 187/323/24 189/324/24 199/305/24 -f 189/324/24 191/325/24 199/305/24 -f 191/325/24 193/326/24 199/305/24 -f 193/326/24 195/303/24 199/305/24 +f 231/401/33 233/402/33 232/403/33 +f 230/404/34 234/405/34 231/401/34 +f 229/406/35 236/407/35 230/408/35 +f 232/403/36 235/409/36 229/406/36 +f 250/410/36 246/411/36 242/412/36 +f 251/413/34 239/414/34 243/415/34 +f 266/416/36 262/417/36 258/418/36 +f 263/419/34 265/420/34 267/421/34 +f 231/401/33 234/405/33 233/402/33 +f 230/404/34 236/422/34 234/405/34 +f 229/406/35 235/409/35 236/407/35 +f 232/403/36 233/402/36 235/409/36 +f 242/412/36 240/423/36 238/424/36 +f 238/424/36 252/425/36 242/412/36 +f 252/425/36 250/410/36 242/412/36 +f 250/410/36 248/426/36 246/411/36 +f 246/411/36 244/427/36 242/412/36 +f 251/413/34 237/428/34 239/414/34 +f 239/414/34 241/429/34 243/415/34 +f 243/415/34 245/430/34 251/413/34 +f 245/430/34 247/431/34 251/413/34 +f 247/431/34 249/432/34 251/413/34 +f 258/418/36 256/433/36 254/434/36 +f 254/434/36 268/435/36 266/416/36 +f 266/416/36 264/436/36 262/417/36 +f 262/417/36 260/437/36 258/418/36 +f 258/418/36 254/434/36 266/416/36 +f 267/421/34 253/438/34 255/439/34 +f 255/439/34 257/440/34 267/421/34 +f 257/440/34 259/441/34 267/421/34 +f 259/441/34 261/442/34 267/421/34 +f 261/442/34 263/419/34 267/421/34 s 1 -f 170/327/23 171/328/27 169/329/23 -f 172/330/27 173/331/28 171/328/27 -f 174/332/28 175/333/29 173/334/28 -f 176/335/29 177/336/25 175/333/29 -f 178/337/25 179/338/30 177/336/25 -f 180/339/30 181/340/31 179/338/30 -f 182/341/31 183/342/32 181/340/31 -f 184/343/32 169/329/23 183/342/32 -f 186/344/23 187/345/27 185/346/23 -f 188/347/27 189/348/28 187/345/27 -f 190/349/28 191/350/29 189/351/28 -f 192/352/29 193/353/25 191/350/29 -f 194/354/25 195/355/30 193/353/25 -f 195/355/30 198/356/31 197/357/31 -f 198/356/31 199/358/32 197/357/31 -f 200/359/32 185/346/23 199/358/32 -f 170/327/23 172/330/27 171/328/27 -f 172/330/27 174/360/28 173/331/28 -f 174/332/28 176/335/29 175/333/29 -f 176/335/29 178/337/25 177/336/25 -f 178/337/25 180/339/30 179/338/30 -f 180/339/30 182/341/31 181/340/31 -f 182/341/31 184/343/32 183/342/32 -f 184/343/32 170/327/23 169/329/23 -f 186/344/23 188/347/27 187/345/27 -f 188/347/27 190/361/28 189/348/28 -f 190/349/28 192/352/29 191/350/29 -f 192/352/29 194/354/25 193/353/25 -f 194/354/25 196/362/30 195/355/30 -f 195/355/30 196/362/30 198/356/31 -f 198/356/31 200/359/32 199/358/32 -f 200/359/32 186/344/23 185/346/23 +f 238/443/33 239/444/37 237/445/33 +f 240/446/37 241/447/38 239/444/37 +f 242/448/38 243/449/39 241/450/38 +f 244/451/39 245/452/35 243/449/39 +f 246/453/35 247/454/40 245/452/35 +f 248/455/40 249/456/41 247/454/40 +f 250/457/41 251/458/42 249/456/41 +f 252/459/42 237/445/33 251/458/42 +f 254/460/33 255/461/37 253/462/33 +f 256/463/37 257/464/38 255/461/37 +f 258/465/38 259/466/39 257/467/38 +f 260/468/39 261/469/35 259/466/39 +f 262/470/35 263/471/40 261/469/35 +f 263/471/40 266/472/41 265/473/41 +f 266/472/41 267/474/42 265/473/41 +f 268/475/42 253/462/33 267/474/42 +f 238/443/33 240/446/37 239/444/37 +f 240/446/37 242/476/38 241/447/38 +f 242/448/38 244/451/39 243/449/39 +f 244/451/39 246/453/35 245/452/35 +f 246/453/35 248/455/40 247/454/40 +f 248/455/40 250/457/41 249/456/41 +f 250/457/41 252/459/42 251/458/42 +f 252/459/42 238/443/33 237/445/33 +f 254/460/33 256/463/37 255/461/37 +f 256/463/37 258/477/38 257/464/38 +f 258/465/38 260/468/39 259/466/39 +f 260/468/39 262/470/35 261/469/35 +f 262/470/35 264/478/40 263/471/40 +f 263/471/40 264/478/40 266/472/41 +f 266/472/41 268/475/42 267/474/42 +f 268/475/42 254/460/33 253/462/33 o ArmLower2 v -0.031250 1.625000 -0.875000 v -0.093750 1.625000 -0.875000 @@ -1086,71 +1383,71 @@ vn 0.0000 0.7071 0.7071 vn 0.0000 1.0000 0.0000 vn 0.0000 0.7071 -0.7071 s off -f 203/363/33 205/364/33 204/365/33 -f 202/366/34 206/367/34 203/363/34 -f 201/368/35 208/369/35 202/370/35 -f 204/365/36 207/371/36 201/368/36 -f 222/372/36 218/373/36 214/374/36 -f 223/375/34 211/376/34 215/377/34 -f 238/378/36 234/379/36 230/380/36 -f 235/381/34 237/382/34 239/383/34 -f 203/363/33 206/367/33 205/364/33 -f 202/366/34 208/384/34 206/367/34 -f 201/368/35 207/371/35 208/369/35 -f 204/365/36 205/364/36 207/371/36 -f 214/374/36 212/385/36 210/386/36 -f 210/386/36 224/387/36 214/374/36 -f 224/387/36 222/372/36 214/374/36 -f 222/372/36 220/388/36 218/373/36 -f 218/373/36 216/389/36 214/374/36 -f 223/375/34 209/390/34 211/376/34 -f 211/376/34 213/391/34 215/377/34 -f 215/377/34 217/392/34 223/375/34 -f 217/392/34 219/393/34 223/375/34 -f 219/393/34 221/394/34 223/375/34 -f 230/380/36 228/395/36 226/396/36 -f 226/396/36 240/397/36 238/378/36 -f 238/378/36 236/398/36 234/379/36 -f 234/379/36 232/399/36 230/380/36 -f 230/380/36 226/396/36 238/378/36 -f 239/383/34 225/400/34 227/401/34 -f 227/401/34 229/402/34 239/383/34 -f 229/402/34 231/403/34 239/383/34 -f 231/403/34 233/404/34 239/383/34 -f 233/404/34 235/381/34 239/383/34 +f 271/479/43 273/480/43 272/481/43 +f 270/482/44 274/483/44 271/479/44 +f 269/484/45 276/485/45 270/486/45 +f 272/481/46 275/487/46 269/484/46 +f 290/488/46 286/489/46 282/490/46 +f 291/491/44 279/492/44 283/493/44 +f 306/494/46 302/495/46 298/496/46 +f 303/497/44 305/498/44 307/499/44 +f 271/479/43 274/483/43 273/480/43 +f 270/482/44 276/500/44 274/483/44 +f 269/484/45 275/487/45 276/485/45 +f 272/481/46 273/480/46 275/487/46 +f 282/490/46 280/501/46 278/502/46 +f 278/502/46 292/503/46 282/490/46 +f 292/503/46 290/488/46 282/490/46 +f 290/488/46 288/504/46 286/489/46 +f 286/489/46 284/505/46 282/490/46 +f 291/491/44 277/506/44 279/492/44 +f 279/492/44 281/507/44 283/493/44 +f 283/493/44 285/508/44 291/491/44 +f 285/508/44 287/509/44 291/491/44 +f 287/509/44 289/510/44 291/491/44 +f 298/496/46 296/511/46 294/512/46 +f 294/512/46 308/513/46 306/494/46 +f 306/494/46 304/514/46 302/495/46 +f 302/495/46 300/515/46 298/496/46 +f 298/496/46 294/512/46 306/494/46 +f 307/499/44 293/516/44 295/517/44 +f 295/517/44 297/518/44 307/499/44 +f 297/518/44 299/519/44 307/499/44 +f 299/519/44 301/520/44 307/499/44 +f 301/520/44 303/497/44 307/499/44 s 1 -f 210/405/33 211/406/37 209/407/33 -f 212/408/37 213/409/38 211/406/37 -f 214/410/38 215/411/39 213/412/38 -f 216/413/39 217/414/35 215/411/39 -f 218/415/35 219/416/40 217/414/35 -f 220/417/40 221/418/41 219/416/40 -f 222/419/41 223/420/42 221/418/41 -f 224/421/42 209/407/33 223/420/42 -f 226/422/33 227/423/37 225/424/33 -f 228/425/37 229/426/38 227/423/37 -f 230/427/38 231/428/39 229/429/38 -f 232/430/39 233/431/35 231/428/39 -f 234/432/35 235/433/40 233/431/35 -f 236/434/40 237/435/41 235/433/40 -f 238/436/41 239/437/42 237/435/41 -f 240/438/42 225/424/33 239/437/42 -f 210/405/33 212/408/37 211/406/37 -f 212/408/37 214/439/38 213/409/38 -f 214/410/38 216/413/39 215/411/39 -f 216/413/39 218/415/35 217/414/35 -f 218/415/35 220/417/40 219/416/40 -f 220/417/40 222/419/41 221/418/41 -f 222/419/41 224/421/42 223/420/42 -f 224/421/42 210/405/33 209/407/33 -f 226/422/33 228/425/37 227/423/37 -f 228/425/37 230/440/38 229/426/38 -f 230/427/38 232/430/39 231/428/39 -f 232/430/39 234/432/35 233/431/35 -f 234/432/35 236/434/40 235/433/40 -f 236/434/40 238/436/41 237/435/41 -f 238/436/41 240/438/42 239/437/42 -f 240/438/42 226/422/33 225/424/33 +f 278/521/43 279/522/47 277/523/43 +f 280/524/47 281/525/48 279/522/47 +f 282/526/48 283/527/49 281/528/48 +f 284/529/49 285/530/45 283/527/49 +f 286/531/45 287/532/50 285/530/45 +f 288/533/50 289/534/51 287/532/50 +f 290/535/51 291/536/52 289/534/51 +f 292/537/52 277/523/43 291/536/52 +f 294/538/43 295/539/47 293/540/43 +f 296/541/47 297/542/48 295/539/47 +f 298/543/48 299/544/49 297/545/48 +f 300/546/49 301/547/45 299/544/49 +f 302/548/45 303/549/50 301/547/45 +f 304/550/50 305/551/51 303/549/50 +f 306/552/51 307/553/52 305/551/51 +f 308/554/52 293/540/43 307/553/52 +f 278/521/43 280/524/47 279/522/47 +f 280/524/47 282/555/48 281/525/48 +f 282/526/48 284/529/49 283/527/49 +f 284/529/49 286/531/45 285/530/45 +f 286/531/45 288/533/50 287/532/50 +f 288/533/50 290/535/51 289/534/51 +f 290/535/51 292/537/52 291/536/52 +f 292/537/52 278/521/43 277/523/43 +f 294/538/43 296/541/47 295/539/47 +f 296/541/47 298/556/48 297/542/48 +f 298/543/48 300/546/49 299/544/49 +f 300/546/49 302/548/45 301/547/45 +f 302/548/45 304/550/50 303/549/50 +f 304/550/50 306/552/51 305/551/51 +f 306/552/51 308/554/52 307/553/52 +f 308/554/52 294/538/43 293/540/43 o ArmUpper2 v 0.031250 2.312500 -0.937500 v 0.093750 2.312500 -0.937500 @@ -1281,71 +1578,71 @@ vn 0.0000 0.0000 1.0000 vn 0.0000 0.7071 0.7071 vn 0.0000 0.7071 -0.7071 s off -f 243/441/43 248/442/43 244/443/43 -f 242/444/44 246/445/44 241/446/44 -f 244/443/45 247/447/45 242/444/45 -f 241/448/46 245/449/46 243/441/46 -f 262/450/45 258/451/45 254/452/45 -f 259/453/46 261/454/46 263/455/46 -f 278/456/45 274/457/45 270/458/45 -f 275/459/46 277/460/46 279/461/46 -f 243/441/43 245/449/43 248/442/43 -f 242/444/44 247/447/44 246/445/44 -f 244/443/45 248/442/45 247/447/45 -f 241/448/46 246/462/46 245/449/46 -f 254/452/45 252/463/45 250/464/45 -f 250/464/45 264/465/45 262/450/45 -f 262/450/45 260/466/45 258/451/45 -f 258/451/45 256/467/45 254/452/45 -f 254/452/45 250/464/45 262/450/45 -f 263/455/46 249/468/46 251/469/46 -f 251/469/46 253/470/46 263/455/46 -f 253/470/46 255/471/46 263/455/46 -f 255/471/46 257/472/46 263/455/46 -f 257/472/46 259/453/46 263/455/46 -f 270/458/45 268/473/45 266/474/45 -f 266/474/45 280/475/45 278/456/45 -f 278/456/45 276/476/45 274/457/45 -f 274/457/45 272/477/45 270/458/45 -f 270/458/45 266/474/45 278/456/45 -f 279/461/46 265/478/46 267/479/46 -f 267/479/46 269/480/46 279/461/46 -f 269/480/46 271/481/46 279/461/46 -f 271/481/46 273/482/46 279/461/46 -f 273/482/46 275/459/46 279/461/46 +f 311/557/53 316/558/53 312/559/53 +f 310/560/54 314/561/54 309/562/54 +f 312/559/55 315/563/55 310/560/55 +f 309/564/56 313/565/56 311/557/56 +f 330/566/55 326/567/55 322/568/55 +f 327/569/56 329/570/56 331/571/56 +f 346/572/55 342/573/55 338/574/55 +f 343/575/56 345/576/56 347/577/56 +f 311/557/53 313/565/53 316/558/53 +f 310/560/54 315/563/54 314/561/54 +f 312/559/55 316/558/55 315/563/55 +f 309/564/56 314/578/56 313/565/56 +f 322/568/55 320/579/55 318/580/55 +f 318/580/55 332/581/55 330/566/55 +f 330/566/55 328/582/55 326/567/55 +f 326/567/55 324/583/55 322/568/55 +f 322/568/55 318/580/55 330/566/55 +f 331/571/56 317/584/56 319/585/56 +f 319/585/56 321/586/56 331/571/56 +f 321/586/56 323/587/56 331/571/56 +f 323/587/56 325/588/56 331/571/56 +f 325/588/56 327/569/56 331/571/56 +f 338/574/55 336/589/55 334/590/55 +f 334/590/55 348/591/55 346/572/55 +f 346/572/55 344/592/55 342/573/55 +f 342/573/55 340/593/55 338/574/55 +f 338/574/55 334/590/55 346/572/55 +f 347/577/56 333/594/56 335/595/56 +f 335/595/56 337/596/56 347/577/56 +f 337/596/56 339/597/56 347/577/56 +f 339/597/56 341/598/56 347/577/56 +f 341/598/56 343/575/56 347/577/56 s 1 -f 250/483/47 251/484/48 249/485/47 -f 252/486/48 253/487/44 251/484/48 -f 254/488/44 255/489/49 253/490/44 -f 256/491/49 257/492/50 255/489/49 -f 258/493/50 259/494/51 257/492/50 -f 260/495/51 261/496/43 259/494/51 -f 262/497/43 263/498/52 261/496/43 -f 264/499/52 249/485/47 263/498/52 -f 266/500/47 267/501/48 265/502/47 -f 268/503/48 269/504/44 267/501/48 -f 270/505/44 271/506/49 269/507/44 -f 272/508/49 273/509/50 271/506/49 -f 274/510/50 275/511/51 273/509/50 -f 276/512/51 277/513/43 275/511/51 -f 278/514/43 279/515/52 277/513/43 -f 280/516/52 265/502/47 279/515/52 -f 250/483/47 252/486/48 251/484/48 -f 252/486/48 254/517/44 253/487/44 -f 254/488/44 256/491/49 255/489/49 -f 256/491/49 258/493/50 257/492/50 -f 258/493/50 260/495/51 259/494/51 -f 260/495/51 262/497/43 261/496/43 -f 262/497/43 264/499/52 263/498/52 -f 264/499/52 250/483/47 249/485/47 -f 266/500/47 268/503/48 267/501/48 -f 268/503/48 270/518/44 269/504/44 -f 270/505/44 272/508/49 271/506/49 -f 272/508/49 274/510/50 273/509/50 -f 274/510/50 276/512/51 275/511/51 -f 276/512/51 278/514/43 277/513/43 -f 278/514/43 280/516/52 279/515/52 -f 280/516/52 266/500/47 265/502/47 +f 318/599/57 319/600/58 317/601/57 +f 320/602/58 321/603/54 319/600/58 +f 322/604/54 323/605/59 321/606/54 +f 324/607/59 325/608/60 323/605/59 +f 326/609/60 327/610/61 325/608/60 +f 328/611/61 329/612/53 327/610/61 +f 330/613/53 331/614/62 329/612/53 +f 332/615/62 317/601/57 331/614/62 +f 334/616/57 335/617/58 333/618/57 +f 336/619/58 337/620/54 335/617/58 +f 338/621/54 339/622/59 337/623/54 +f 340/624/59 341/625/60 339/622/59 +f 342/626/60 343/627/61 341/625/60 +f 344/628/61 345/629/53 343/627/61 +f 346/630/53 347/631/62 345/629/53 +f 348/632/62 333/618/57 347/631/62 +f 318/599/57 320/602/58 319/600/58 +f 320/602/58 322/633/54 321/603/54 +f 322/604/54 324/607/59 323/605/59 +f 324/607/59 326/609/60 325/608/60 +f 326/609/60 328/611/61 327/610/61 +f 328/611/61 330/613/53 329/612/53 +f 330/613/53 332/615/62 331/614/62 +f 332/615/62 318/599/57 317/601/57 +f 334/616/57 336/619/58 335/617/58 +f 336/619/58 338/634/54 337/620/54 +f 338/621/54 340/624/59 339/622/59 +f 340/624/59 342/626/60 341/625/60 +f 342/626/60 344/628/61 343/627/61 +f 344/628/61 346/630/53 345/629/53 +f 346/630/53 348/632/62 347/631/62 +f 348/632/62 334/616/57 333/618/57 o ArmUpper1 v -0.031250 2.312500 0.937500 v -0.093750 2.312500 0.937500 @@ -1476,358 +1773,71 @@ vn 0.0000 0.0000 -1.0000 vn 0.0000 0.7071 -0.7071 vn 0.0000 0.7071 0.7071 s off -f 283/519/53 288/520/53 284/521/53 -f 282/522/54 286/523/54 281/524/54 -f 284/521/55 287/525/55 282/522/55 -f 281/526/56 285/527/56 283/519/56 -f 302/528/55 298/529/55 294/530/55 -f 299/531/56 301/532/56 303/533/56 -f 318/534/55 314/535/55 310/536/55 -f 315/537/56 317/538/56 319/539/56 -f 283/519/53 285/527/53 288/520/53 -f 282/522/54 287/525/54 286/523/54 -f 284/521/55 288/520/55 287/525/55 -f 281/526/56 286/540/56 285/527/56 -f 294/530/55 292/541/55 290/542/55 -f 290/542/55 304/543/55 302/528/55 -f 302/528/55 300/544/55 298/529/55 -f 298/529/55 296/545/55 294/530/55 -f 294/530/55 290/542/55 302/528/55 -f 303/533/56 289/546/56 291/547/56 -f 291/547/56 293/548/56 303/533/56 -f 293/548/56 295/549/56 303/533/56 -f 295/549/56 297/550/56 303/533/56 -f 297/550/56 299/531/56 303/533/56 -f 310/536/55 308/551/55 306/552/55 -f 306/552/55 320/553/55 318/534/55 -f 318/534/55 316/554/55 314/535/55 -f 314/535/55 312/555/55 310/536/55 -f 310/536/55 306/552/55 318/534/55 -f 319/539/56 305/556/56 307/557/56 -f 307/557/56 309/558/56 319/539/56 -f 309/558/56 311/559/56 319/539/56 -f 311/559/56 313/560/56 319/539/56 -f 313/560/56 315/537/56 319/539/56 +f 351/635/63 356/636/63 352/637/63 +f 350/638/64 354/639/64 349/640/64 +f 352/637/65 355/641/65 350/638/65 +f 349/642/66 353/643/66 351/635/66 +f 370/644/65 366/645/65 362/646/65 +f 367/647/66 369/648/66 371/649/66 +f 386/650/65 382/651/65 378/652/65 +f 383/653/66 385/654/66 387/655/66 +f 351/635/63 353/643/63 356/636/63 +f 350/638/64 355/641/64 354/639/64 +f 352/637/65 356/636/65 355/641/65 +f 349/642/66 354/656/66 353/643/66 +f 362/646/65 360/657/65 358/658/65 +f 358/658/65 372/659/65 370/644/65 +f 370/644/65 368/660/65 366/645/65 +f 366/645/65 364/661/65 362/646/65 +f 362/646/65 358/658/65 370/644/65 +f 371/649/66 357/662/66 359/663/66 +f 359/663/66 361/664/66 371/649/66 +f 361/664/66 363/665/66 371/649/66 +f 363/665/66 365/666/66 371/649/66 +f 365/666/66 367/647/66 371/649/66 +f 378/652/65 376/667/65 374/668/65 +f 374/668/65 388/669/65 386/650/65 +f 386/650/65 384/670/65 382/651/65 +f 382/651/65 380/671/65 378/652/65 +f 378/652/65 374/668/65 386/650/65 +f 387/655/66 373/672/66 375/673/66 +f 375/673/66 377/674/66 387/655/66 +f 377/674/66 379/675/66 387/655/66 +f 379/675/66 381/676/66 387/655/66 +f 381/676/66 383/653/66 387/655/66 s 1 -f 290/561/57 291/562/58 289/563/57 -f 291/562/58 294/564/54 293/565/54 -f 294/566/54 295/567/59 293/568/54 -f 296/569/59 297/570/60 295/567/59 -f 298/571/60 299/572/61 297/570/60 -f 300/573/61 301/574/53 299/572/61 -f 302/575/53 303/576/62 301/574/53 -f 304/577/62 289/563/57 303/576/62 -f 306/578/57 307/579/58 305/580/57 -f 308/581/58 309/582/54 307/579/58 -f 310/583/54 311/584/59 309/585/54 -f 311/584/59 314/586/60 313/587/60 -f 314/586/60 315/588/61 313/587/60 -f 315/588/61 318/589/53 317/590/53 -f 318/589/53 319/591/62 317/590/53 -f 320/592/62 305/580/57 319/591/62 -f 290/561/57 292/593/58 291/562/58 -f 291/562/58 292/593/58 294/564/54 -f 294/566/54 296/569/59 295/567/59 -f 296/569/59 298/571/60 297/570/60 -f 298/571/60 300/573/61 299/572/61 -f 300/573/61 302/575/53 301/574/53 -f 302/575/53 304/577/62 303/576/62 -f 304/577/62 290/561/57 289/563/57 -f 306/578/57 308/581/58 307/579/58 -f 308/581/58 310/594/54 309/582/54 -f 310/583/54 312/595/59 311/584/59 -f 311/584/59 312/595/59 314/586/60 -f 314/586/60 316/596/61 315/588/61 -f 315/588/61 316/596/61 318/589/53 -f 318/589/53 320/592/62 319/591/62 -f 320/592/62 306/578/57 305/580/57 -o Head2 -v -0.125000 2.750000 0.000000 -v 0.125000 2.750000 0.000000 -v -0.125000 2.750000 -0.250000 -v 0.125000 2.750000 -0.250000 -v -0.125000 1.750000 -0.250000 -v -0.125000 1.750000 0.000000 -v 0.125000 1.750000 0.000000 -v 0.125000 1.750000 -0.250000 -v -0.062500 2.500000 -0.250000 -v 0.062500 2.500000 -0.250000 -v -0.062500 2.500000 -0.437500 -v 0.062500 2.500000 -0.437500 -v -0.062500 2.250000 -0.437500 -v 0.062500 2.250000 -0.437500 -v -0.062500 2.250000 -0.250000 -v 0.062500 2.250000 -0.250000 -v 0.250000 2.625000 -0.093750 -v 0.250000 1.875000 -0.093750 -v 0.250000 2.625000 -0.156250 -v 0.250000 1.875000 -0.156250 -v 0.125000 2.625000 -0.093750 -v 0.125000 1.875000 -0.093750 -v 0.125000 2.625000 -0.156250 -v 0.125000 1.875000 -0.156250 -v 0.187500 2.562500 -0.093750 -v 0.187500 1.937500 -0.093750 -v 0.187500 2.562500 -0.156250 -v 0.187500 1.937500 -0.156250 -v 0.125000 2.562500 -0.093750 -v 0.125000 1.937500 -0.093750 -v 0.125000 2.562500 -0.156250 -v 0.125000 1.937500 -0.156250 -v -0.250001 2.625000 -0.156250 -v -0.250001 1.875000 -0.156250 -v -0.250001 2.625000 -0.093750 -v -0.250001 1.875000 -0.093750 -v -0.125001 2.625000 -0.156250 -v -0.125001 1.875000 -0.156250 -v -0.125001 2.625000 -0.093750 -v -0.125001 1.875000 -0.093750 -v -0.187501 2.562500 -0.156250 -v -0.187501 1.937500 -0.156250 -v -0.187501 2.562500 -0.093750 -v -0.187501 1.937500 -0.093750 -v -0.125001 2.562500 -0.156250 -v -0.125001 1.937500 -0.156250 -v -0.125001 2.562500 -0.093750 -v -0.125001 1.937500 -0.093750 -v -0.125000 2.375000 -0.562500 -v -0.000000 2.375000 -0.562500 -v -0.125000 2.286612 -0.525888 -v -0.000000 2.286612 -0.525888 -v -0.125000 2.250000 -0.437500 -v -0.000000 2.250000 -0.437500 -v -0.125000 2.286612 -0.349112 -v -0.000000 2.286612 -0.349112 -v -0.125000 2.375000 -0.312500 -v -0.000000 2.375000 -0.312500 -v -0.125000 2.463388 -0.349112 -v -0.000000 2.463388 -0.349112 -v -0.125000 2.500000 -0.437500 -v -0.000000 2.500000 -0.437500 -v -0.125000 2.463388 -0.525888 -v -0.000000 2.463388 -0.525888 -vt 0.723684 0.907407 -vt 0.750000 0.870370 -vt 0.750000 0.907407 -vt 0.750000 0.722222 -vt 0.723684 0.685185 -vt 0.750000 0.685185 -vt 0.802632 0.870370 -vt 0.828947 0.722222 -vt 0.828947 0.870370 -vt 0.776316 0.722222 -vt 0.776316 0.870370 -vt 0.723684 0.870370 -vt 0.802632 0.722222 -vt 0.875000 0.574074 -vt 0.861842 0.601852 -vt 0.861842 0.574074 -vt 0.875000 0.601852 -vt 0.901316 0.620370 -vt 0.875000 0.620370 -vt 0.901316 0.601852 -vt 0.914474 0.574074 -vt 0.914474 0.601852 -vt 0.901316 0.574074 -vt 0.940789 0.574074 -vt 0.940789 0.601852 -vt 0.703947 0.703704 -vt 0.710526 0.814815 -vt 0.703947 0.814815 -vt 0.710526 0.685185 -vt 0.710526 0.703704 -vt 0.703947 0.833333 -vt 0.723684 0.805556 -vt 0.717105 0.712963 -vt 0.723684 0.712963 -vt 0.717105 0.685185 -vt 0.723684 0.694444 -vt 0.717105 0.694444 -vt 0.723684 0.833333 -vt 0.717105 0.824074 -vt 0.723684 0.824074 -vt 0.697368 0.824074 -vt 0.710526 0.833333 -vt 0.717105 0.833333 -vt 0.717105 0.805556 -vt 0.697368 0.712963 -vt 0.703947 0.685185 -vt 0.697368 0.694444 -vt 0.697368 0.685185 -vt 0.703947 0.703704 -vt 0.710526 0.814815 -vt 0.703947 0.814815 -vt 0.710526 0.685185 -vt 0.710526 0.703704 -vt 0.703947 0.833333 -vt 0.723684 0.805556 -vt 0.717105 0.712963 -vt 0.723684 0.712963 -vt 0.717105 0.685185 -vt 0.723684 0.694444 -vt 0.717105 0.694444 -vt 0.723684 0.833333 -vt 0.717105 0.824074 -vt 0.723684 0.824074 -vt 0.697368 0.824074 -vt 0.710526 0.833333 -vt 0.717105 0.833333 -vt 0.717105 0.805556 -vt 0.697368 0.712963 -vt 0.703947 0.685185 -vt 0.697368 0.694444 -vt 0.697368 0.685185 -vt 0.723684 0.629566 -vt 0.710572 0.611111 -vt 0.723684 0.592656 -vt 0.706641 0.624161 -vt 0.697369 0.629566 -vt 0.688096 0.624161 -vt 0.723684 0.722222 -vt 0.723684 0.685185 -vt 0.697368 0.833333 -vt 0.697368 0.805556 -vt 0.723684 0.685185 -vt 0.697368 0.833333 -vt 0.697368 0.805556 -vt 0.732956 0.598061 -vt 0.736797 0.611111 -vt 0.732957 0.624161 -vt 0.714412 0.624161 -vt 0.714412 0.598061 -vt 0.684256 0.611111 -vt 0.688096 0.598061 -vt 0.697369 0.592656 -vt 0.706641 0.598061 -vt 0.710481 0.611111 -vt 0.763158 0.574074 -vt 0.776316 0.592593 -vt 0.763158 0.592593 -vt 0.776316 0.574074 -vt 0.789474 0.592593 -vt 0.684211 0.574074 -vt 0.697368 0.592593 -vt 0.684211 0.592593 -vt 0.697368 0.574074 -vt 0.710526 0.592593 -vt 0.710526 0.574074 -vt 0.723684 0.592593 -vt 0.723684 0.574074 -vt 0.736842 0.592593 -vt 0.736842 0.574074 -vt 0.750000 0.592593 -vt 0.750000 0.574074 -vt 0.789474 0.574074 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -0.7071 -0.7071 -vn 0.0000 -0.7071 0.7071 -vn 0.0000 0.7071 0.7071 -vn 0.0000 0.7071 -0.7071 -s off -f 322/597/63 323/598/63 321/599/63 -f 325/600/64 327/601/64 326/602/64 -f 322/603/65 328/604/65 324/605/65 -f 323/598/66 326/606/66 321/607/66 -f 324/608/67 325/600/67 323/598/67 -f 321/607/68 327/609/68 322/603/68 -f 330/610/63 331/611/63 329/612/63 -f 332/613/67 333/614/67 331/615/67 -f 334/616/64 335/617/64 333/618/64 -f 336/619/65 332/613/65 330/610/65 -f 333/618/66 329/620/66 331/621/66 -f 338/622/65 339/623/65 337/624/65 -f 338/622/64 344/625/64 340/626/64 -f 339/623/63 341/627/63 337/624/63 -f 345/628/66 348/629/66 346/630/66 -f 352/631/63 346/632/63 348/633/63 -f 349/634/64 347/635/64 345/636/64 -f 341/627/68 345/637/68 337/624/68 -f 343/638/67 347/635/67 351/639/67 -f 340/626/67 347/640/67 339/623/67 -f 344/625/67 348/633/67 340/626/67 -f 337/624/68 346/641/68 338/622/68 -f 342/642/68 346/643/68 350/644/68 -f 354/645/66 355/646/66 353/647/66 -f 354/645/64 360/648/64 356/649/64 -f 355/646/63 357/650/63 353/647/63 -f 361/651/65 364/652/65 362/653/65 -f 368/654/63 362/655/63 364/656/63 -f 365/657/64 363/658/64 361/659/64 -f 357/650/67 361/660/67 353/647/67 -f 359/661/68 363/658/68 367/662/68 -f 356/649/68 363/663/68 355/646/68 -f 360/648/68 364/656/68 356/649/68 -f 353/647/67 362/664/67 354/645/67 -f 358/665/67 362/666/67 366/667/67 -f 382/668/65 378/669/65 374/670/65 -f 379/671/66 381/672/66 383/673/66 -f 322/597/63 324/608/63 323/598/63 -f 325/600/64 328/674/64 327/601/64 -f 322/603/65 327/609/65 328/604/65 -f 323/598/66 325/600/66 326/606/66 -f 324/608/67 328/674/67 325/600/67 -f 321/607/68 326/606/68 327/609/68 -f 330/610/63 332/613/63 331/611/63 -f 332/613/67 334/616/67 333/614/67 -f 334/616/64 336/619/64 335/617/64 -f 336/619/65 334/616/65 332/613/65 -f 333/618/66 335/617/66 329/620/66 -f 338/622/65 340/626/65 339/623/65 -f 338/622/64 342/642/64 344/625/64 -f 339/623/63 343/638/63 341/627/63 -f 345/628/66 347/640/66 348/629/66 -f 352/631/63 350/675/63 346/632/63 -f 349/634/64 351/639/64 347/635/64 -f 341/627/68 349/676/68 345/637/68 -f 343/638/67 339/623/67 347/635/67 -f 340/626/67 348/629/67 347/640/67 -f 344/625/67 352/631/67 348/633/67 -f 337/624/68 345/677/68 346/641/68 -f 342/642/68 338/622/68 346/643/68 -f 354/645/66 356/649/66 355/646/66 -f 354/645/64 358/665/64 360/648/64 -f 355/646/63 359/661/63 357/650/63 -f 361/651/65 363/663/65 364/652/65 -f 368/654/63 366/678/63 362/655/63 -f 365/657/64 367/662/64 363/658/64 -f 357/650/67 365/679/67 361/660/67 -f 359/661/68 355/646/68 363/658/68 -f 356/649/68 364/652/68 363/663/68 -f 360/648/68 368/654/68 364/656/68 -f 353/647/67 361/680/67 362/664/67 -f 358/665/67 354/645/67 362/666/67 -f 374/670/65 372/681/65 370/682/65 -f 370/682/65 384/683/65 382/668/65 -f 382/668/65 380/684/65 378/669/65 -f 378/669/65 376/685/65 374/670/65 -f 374/670/65 370/682/65 382/668/65 -f 383/673/66 369/686/66 371/687/66 -f 371/687/66 373/688/66 383/673/66 -f 373/688/66 375/689/66 383/673/66 -f 375/689/66 377/690/66 383/673/66 -f 377/690/66 379/671/66 383/673/66 -s 1 -f 370/691/67 371/692/69 369/693/67 -f 372/694/69 373/695/64 371/692/69 -f 374/696/64 375/697/70 373/698/64 -f 376/699/70 377/700/68 375/697/70 -f 378/701/68 379/702/71 377/700/68 -f 380/703/71 381/704/63 379/702/71 -f 382/705/63 383/706/72 381/704/63 -f 384/707/72 369/693/67 383/706/72 -f 370/691/67 372/694/69 371/692/69 -f 372/694/69 374/708/64 373/695/64 -f 374/696/64 376/699/70 375/697/70 -f 376/699/70 378/701/68 377/700/68 -f 378/701/68 380/703/71 379/702/71 -f 380/703/71 382/705/63 381/704/63 -f 382/705/63 384/707/72 383/706/72 -f 384/707/72 370/691/67 369/693/67 +f 358/677/67 359/678/68 357/679/67 +f 359/678/68 362/680/64 361/681/64 +f 362/682/64 363/683/69 361/684/64 +f 364/685/69 365/686/70 363/683/69 +f 366/687/70 367/688/71 365/686/70 +f 368/689/71 369/690/63 367/688/71 +f 370/691/63 371/692/72 369/690/63 +f 372/693/72 357/679/67 371/692/72 +f 374/694/67 375/695/68 373/696/67 +f 376/697/68 377/698/64 375/695/68 +f 378/699/64 379/700/69 377/701/64 +f 379/700/69 382/702/70 381/703/70 +f 382/702/70 383/704/71 381/703/70 +f 383/704/71 386/705/63 385/706/63 +f 386/705/63 387/707/72 385/706/63 +f 388/708/72 373/696/67 387/707/72 +f 358/677/67 360/709/68 359/678/68 +f 359/678/68 360/709/68 362/680/64 +f 362/682/64 364/685/69 363/683/69 +f 364/685/69 366/687/70 365/686/70 +f 366/687/70 368/689/71 367/688/71 +f 368/689/71 370/691/63 369/690/63 +f 370/691/63 372/693/72 371/692/72 +f 372/693/72 358/677/67 357/679/67 +f 374/694/67 376/697/68 375/695/68 +f 376/697/68 378/710/64 377/698/64 +f 378/699/64 380/711/69 379/700/69 +f 379/700/69 380/711/69 382/702/70 +f 382/702/70 384/712/71 383/704/71 +f 383/704/71 384/712/71 386/705/63 +f 386/705/63 388/708/72 387/707/72 +f 388/708/72 374/694/67 373/696/67 o Head1 v 0.125000 2.750000 -0.000000 v -0.125000 2.750000 0.000000 @@ -1893,6 +1903,10 @@ v 0.125000 2.500000 0.437500 v 0.000000 2.500000 0.437500 v 0.125000 2.463388 0.525888 v 0.000000 2.463388 0.525888 +v 0.130000 1.875000 0.234375 +v 0.130000 1.875000 0.171875 +v 0.130000 2.062500 0.234375 +v 0.130000 2.062500 0.171875 vt 0.750000 0.907407 vt 0.723684 0.870370 vt 0.750000 0.870370 @@ -1970,6 +1984,9 @@ vt 0.723684 0.592656 vt 0.706641 0.624161 vt 0.697369 0.629566 vt 0.688096 0.624161 +vt 0.559211 1.000000 +vt 0.460526 0.953704 +vt 0.559211 0.953704 vt 0.723684 0.907407 vt 0.717105 0.685185 vt 0.697368 0.833333 @@ -1987,6 +2004,7 @@ vt 0.688096 0.598061 vt 0.697369 0.592656 vt 0.706641 0.598061 vt 0.710481 0.611111 +vt 0.460526 1.000000 vt 0.763158 0.574074 vt 0.776316 0.592593 vt 0.763158 0.592593 @@ -2016,105 +2034,107 @@ vn 0.0000 -0.7071 -0.7071 vn 0.0000 0.7071 -0.7071 vn 0.0000 0.7071 0.7071 s off -f 385/709/73 388/710/73 387/711/73 -f 390/712/74 392/713/74 391/714/74 -f 386/715/75 392/716/75 388/717/75 -f 387/711/76 390/718/76 385/719/76 -f 388/710/77 389/720/77 387/711/77 -f 385/719/78 391/721/78 386/715/78 -f 394/722/73 395/723/73 393/724/73 -f 396/725/77 397/726/77 395/727/77 -f 398/728/74 399/729/74 397/730/74 -f 400/731/75 396/725/75 394/722/75 -f 397/730/76 393/732/76 395/733/76 -f 402/734/75 403/735/75 401/736/75 -f 402/734/74 408/737/74 404/738/74 -f 403/735/73 405/739/73 401/736/73 -f 409/740/76 412/741/76 410/742/76 -f 412/743/73 414/744/73 410/745/73 -f 413/746/74 411/747/74 409/748/74 -f 405/739/78 409/749/78 401/736/78 -f 407/750/77 411/747/77 415/751/77 -f 404/738/77 411/752/77 403/735/77 -f 408/737/77 412/743/77 404/738/77 -f 401/736/78 410/753/78 402/734/78 -f 406/754/78 410/755/78 414/756/78 -f 418/757/76 419/758/76 417/759/76 -f 418/757/74 424/760/74 420/761/74 -f 417/759/73 423/762/73 421/763/73 -f 425/764/75 428/765/75 426/766/75 -f 432/767/73 426/768/73 428/769/73 -f 429/770/74 427/771/74 425/772/74 -f 421/763/77 425/773/77 417/759/77 -f 423/762/78 427/771/78 431/774/78 -f 420/761/78 427/775/78 419/758/78 -f 424/760/78 428/769/78 420/761/78 -f 417/759/77 426/776/77 418/757/77 -f 422/777/77 426/778/77 430/779/77 -f 446/780/75 442/781/75 438/782/75 -f 443/783/76 445/784/76 447/785/76 -f 385/709/73 386/786/73 388/710/73 -f 390/712/74 389/720/74 392/713/74 -f 386/715/75 391/721/75 392/716/75 -f 387/711/76 389/720/76 390/718/76 -f 388/710/77 392/713/77 389/720/77 -f 385/719/78 390/718/78 391/721/78 -f 394/722/73 396/725/73 395/723/73 -f 396/725/77 398/728/77 397/726/77 -f 398/728/74 400/731/74 399/729/74 -f 400/731/75 398/728/75 396/725/75 -f 397/730/76 399/729/76 393/732/76 -f 402/734/75 404/738/75 403/735/75 -f 402/734/74 406/754/74 408/737/74 -f 403/735/73 407/750/73 405/739/73 -f 409/740/76 411/752/76 412/741/76 -f 412/743/73 416/787/73 414/744/73 -f 413/746/74 415/751/74 411/747/74 -f 405/739/78 413/788/78 409/749/78 -f 407/750/77 403/735/77 411/747/77 -f 404/738/77 412/741/77 411/752/77 -f 408/737/77 416/787/77 412/743/77 -f 401/736/78 409/789/78 410/753/78 -f 406/754/78 402/734/78 410/755/78 -f 418/757/76 420/761/76 419/758/76 -f 418/757/74 422/777/74 424/760/74 -f 417/759/73 419/758/73 423/762/73 -f 425/764/75 427/775/75 428/765/75 -f 432/767/73 430/790/73 426/768/73 -f 429/770/74 431/774/74 427/771/74 -f 421/763/77 429/791/77 425/773/77 -f 423/762/78 419/758/78 427/771/78 -f 420/761/78 428/765/78 427/775/78 -f 424/760/78 432/767/78 428/769/78 -f 417/759/77 425/792/77 426/776/77 -f 422/777/77 418/757/77 426/778/77 -f 438/782/75 436/793/75 434/794/75 -f 434/794/75 448/795/75 446/780/75 -f 446/780/75 444/796/75 442/781/75 -f 442/781/75 440/797/75 438/782/75 -f 438/782/75 434/794/75 446/780/75 -f 447/785/76 433/798/76 435/799/76 -f 435/799/76 437/800/76 447/785/76 -f 437/800/76 439/801/76 447/785/76 -f 439/801/76 441/802/76 447/785/76 -f 441/802/76 443/783/76 447/785/76 +f 389/713/73 392/714/73 391/715/73 +f 394/716/74 396/717/74 395/718/74 +f 390/719/75 396/720/75 392/721/75 +f 391/715/76 394/722/76 389/723/76 +f 392/714/77 393/724/77 391/715/77 +f 389/723/78 395/725/78 390/719/78 +f 398/726/73 399/727/73 397/728/73 +f 400/729/77 401/730/77 399/731/77 +f 402/732/74 403/733/74 401/734/74 +f 404/735/75 400/729/75 398/726/75 +f 401/734/76 397/736/76 399/737/76 +f 406/738/75 407/739/75 405/740/75 +f 406/738/74 412/741/74 408/742/74 +f 407/739/73 409/743/73 405/740/73 +f 413/744/76 416/745/76 414/746/76 +f 416/747/73 418/748/73 414/749/73 +f 417/750/74 415/751/74 413/752/74 +f 409/743/78 413/753/78 405/740/78 +f 411/754/77 415/751/77 419/755/77 +f 408/742/77 415/756/77 407/739/77 +f 412/741/77 416/747/77 408/742/77 +f 405/740/78 414/757/78 406/738/78 +f 410/758/78 414/759/78 418/760/78 +f 422/761/76 423/762/76 421/763/76 +f 422/761/74 428/764/74 424/765/74 +f 421/763/73 427/766/73 425/767/73 +f 429/768/75 432/769/75 430/770/75 +f 436/771/73 430/772/73 432/773/73 +f 433/774/74 431/775/74 429/776/74 +f 425/767/77 429/777/77 421/763/77 +f 427/766/78 431/775/78 435/778/78 +f 424/765/78 431/779/78 423/762/78 +f 428/764/78 432/773/78 424/765/78 +f 421/763/77 430/780/77 422/761/77 +f 426/781/77 430/782/77 434/783/77 +f 450/784/75 446/785/75 442/786/75 +f 447/787/76 449/788/76 451/789/76 +f 454/790/76 455/791/76 453/792/76 +f 389/713/73 390/793/73 392/714/73 +f 394/716/74 393/724/74 396/717/74 +f 390/719/75 395/725/75 396/720/75 +f 391/715/76 393/724/76 394/722/76 +f 392/714/77 396/717/77 393/724/77 +f 389/723/78 394/722/78 395/725/78 +f 398/726/73 400/729/73 399/727/73 +f 400/729/77 402/732/77 401/730/77 +f 402/732/74 404/735/74 403/733/74 +f 404/735/75 402/732/75 400/729/75 +f 401/734/76 403/733/76 397/736/76 +f 406/738/75 408/742/75 407/739/75 +f 406/738/74 410/758/74 412/741/74 +f 407/739/73 411/754/73 409/743/73 +f 413/744/76 415/756/76 416/745/76 +f 416/747/73 420/794/73 418/748/73 +f 417/750/74 419/755/74 415/751/74 +f 409/743/78 417/795/78 413/753/78 +f 411/754/77 407/739/77 415/751/77 +f 408/742/77 416/745/77 415/756/77 +f 412/741/77 420/794/77 416/747/77 +f 405/740/78 413/796/78 414/757/78 +f 410/758/78 406/738/78 414/759/78 +f 422/761/76 424/765/76 423/762/76 +f 422/761/74 426/781/74 428/764/74 +f 421/763/73 423/762/73 427/766/73 +f 429/768/75 431/779/75 432/769/75 +f 436/771/73 434/797/73 430/772/73 +f 433/774/74 435/778/74 431/775/74 +f 425/767/77 433/798/77 429/777/77 +f 427/766/78 423/762/78 431/775/78 +f 424/765/78 432/769/78 431/779/78 +f 428/764/78 436/771/78 432/773/78 +f 421/763/77 429/799/77 430/780/77 +f 426/781/77 422/761/77 430/782/77 +f 442/786/75 440/800/75 438/801/75 +f 438/801/75 452/802/75 450/784/75 +f 450/784/75 448/803/75 446/785/75 +f 446/785/75 444/804/75 442/786/75 +f 442/786/75 438/801/75 450/784/75 +f 451/789/76 437/805/76 439/806/76 +f 439/806/76 441/807/76 451/789/76 +f 441/807/76 443/808/76 451/789/76 +f 443/808/76 445/809/76 451/789/76 +f 445/809/76 447/787/76 451/789/76 +f 454/790/76 456/810/76 455/791/76 s 1 -f 434/803/77 435/804/79 433/805/77 -f 436/806/79 437/807/74 435/804/79 -f 438/808/74 439/809/80 437/810/74 -f 440/811/80 441/812/78 439/809/80 -f 442/813/78 443/814/81 441/812/78 -f 444/815/81 445/816/73 443/814/81 -f 446/817/73 447/818/82 445/816/73 -f 448/819/82 433/805/77 447/818/82 -f 434/803/77 436/806/79 435/804/79 -f 436/806/79 438/820/74 437/807/74 -f 438/808/74 440/811/80 439/809/80 -f 440/811/80 442/813/78 441/812/78 -f 442/813/78 444/815/81 443/814/81 -f 444/815/81 446/817/73 445/816/73 -f 446/817/73 448/819/82 447/818/82 -f 448/819/82 434/803/77 433/805/77 +f 438/811/77 439/812/79 437/813/77 +f 440/814/79 441/815/74 439/812/79 +f 442/816/74 443/817/80 441/818/74 +f 444/819/80 445/820/78 443/817/80 +f 446/821/78 447/822/81 445/820/78 +f 448/823/81 449/824/73 447/822/81 +f 450/825/73 451/826/82 449/824/73 +f 452/827/82 437/813/77 451/826/82 +f 438/811/77 440/814/79 439/812/79 +f 440/814/79 442/828/74 441/815/74 +f 442/816/74 444/819/80 443/817/80 +f 444/819/80 446/821/78 445/820/78 +f 446/821/78 448/823/81 447/822/81 +f 448/823/81 450/825/73 449/824/73 +f 450/825/73 452/827/82 451/826/82 +f 452/827/82 438/811/77 437/813/77 o Spike2 v -0.062500 2.875000 -0.062500 v 0.062500 2.875000 -0.062500 @@ -2151,20 +2171,20 @@ vn 0.0000 -0.2425 -0.9701 vn 0.9701 -0.2425 0.0000 vn 0.0000 -0.2425 0.9701 s off -f 450/821/83 451/822/83 449/823/83 -f 450/824/84 456/825/84 452/826/84 -f 451/822/85 454/827/85 449/828/85 -f 452/829/86 453/830/86 451/822/86 -f 449/828/87 455/831/87 450/824/87 -f 454/827/88 453/830/88 457/832/88 -f 453/830/89 456/833/89 457/834/89 -f 456/825/90 455/831/90 457/835/90 -f 455/831/91 454/827/91 457/836/91 -f 450/821/83 452/829/83 451/822/83 -f 450/824/84 455/831/84 456/825/84 -f 451/822/85 453/830/85 454/827/85 -f 452/829/86 456/833/86 453/830/86 -f 449/828/87 454/827/87 455/831/87 +f 458/829/83 459/830/83 457/831/83 +f 458/832/84 464/833/84 460/834/84 +f 459/830/85 462/835/85 457/836/85 +f 460/837/86 461/838/86 459/830/86 +f 457/836/87 463/839/87 458/832/87 +f 462/835/88 461/838/88 465/840/88 +f 461/838/89 464/841/89 465/842/89 +f 464/833/90 463/839/90 465/843/90 +f 463/839/91 462/835/91 465/844/91 +f 458/829/83 460/837/83 459/830/83 +f 458/832/84 463/839/84 464/833/84 +f 459/830/85 461/838/85 462/835/85 +f 460/837/86 464/841/86 461/838/86 +f 457/836/87 462/835/87 463/839/87 o Spike1 v 0.062500 2.875000 0.062500 v -0.062500 2.875000 0.062500 @@ -2201,20 +2221,20 @@ vn 0.0000 -0.2425 0.9701 vn -0.9701 -0.2425 0.0000 vn 0.0000 -0.2425 -0.9701 s off -f 458/837/92 461/838/92 460/839/92 -f 459/840/93 465/841/93 461/842/93 -f 460/839/94 463/843/94 458/844/94 -f 461/838/95 462/845/95 460/839/95 -f 458/844/96 464/846/96 459/840/96 -f 463/843/97 462/845/97 466/847/97 -f 462/845/98 465/848/98 466/849/98 -f 465/841/99 464/846/99 466/850/99 -f 464/846/100 463/843/100 466/851/100 -f 458/837/92 459/852/92 461/838/92 -f 459/840/93 464/846/93 465/841/93 -f 460/839/94 462/845/94 463/843/94 -f 461/838/95 465/848/95 462/845/95 -f 458/844/96 463/843/96 464/846/96 +f 466/845/92 469/846/92 468/847/92 +f 467/848/93 473/849/93 469/850/93 +f 468/847/94 471/851/94 466/852/94 +f 469/846/95 470/853/95 468/847/95 +f 466/852/96 472/854/96 467/848/96 +f 471/851/97 470/853/97 474/855/97 +f 470/853/98 473/856/98 474/857/98 +f 473/849/99 472/854/99 474/858/99 +f 472/854/100 471/851/100 474/859/100 +f 466/845/92 467/860/92 469/846/92 +f 467/848/93 472/854/93 473/849/93 +f 468/847/94 470/853/94 471/851/94 +f 469/846/95 473/856/95 470/853/95 +f 466/852/96 471/851/96 472/854/96 o Frame v 1.250000 2.750000 -1.250000 v 1.250000 3.000000 -1.250000 @@ -2455,118 +2475,118 @@ vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn 0.0000 1.0000 0.0000 s off -f 468/853/101 469/854/101 467/855/101 -f 470/856/102 473/857/102 469/854/102 -f 474/858/103 471/859/103 473/857/103 -f 472/860/104 467/855/104 471/861/104 -f 473/857/105 467/862/105 469/863/105 -f 470/864/106 472/865/106 474/858/106 -f 476/866/101 477/867/101 475/868/101 -f 478/869/102 481/870/102 477/867/102 -f 482/871/103 479/872/103 481/870/103 -f 480/873/104 475/868/104 479/874/104 -f 481/870/105 475/875/105 477/876/105 -f 478/877/106 480/878/106 482/871/106 -f 484/879/101 485/880/101 483/881/101 -f 486/882/102 489/883/102 485/880/102 -f 490/884/103 487/885/103 489/883/103 -f 488/886/104 483/881/104 487/887/104 -f 489/883/105 483/888/105 485/889/105 -f 486/890/106 488/891/106 490/884/106 -f 492/892/101 493/893/101 491/894/101 -f 494/895/102 497/896/102 493/893/102 -f 498/897/103 495/898/103 497/896/103 -f 496/899/104 491/894/104 495/900/104 -f 497/896/105 491/901/105 493/902/105 -f 494/903/106 496/904/106 498/897/106 -f 502/905/103 500/906/103 501/907/103 -f 501/907/105 506/908/105 502/905/105 -f 499/909/106 504/910/106 500/906/106 -f 506/911/101 504/910/101 503/912/101 +f 476/861/101 477/862/101 475/863/101 +f 478/864/102 481/865/102 477/862/102 +f 482/866/103 479/867/103 481/865/103 +f 480/868/104 475/863/104 479/869/104 +f 481/865/105 475/870/105 477/871/105 +f 478/872/106 480/873/106 482/866/106 +f 484/874/101 485/875/101 483/876/101 +f 486/877/102 489/878/102 485/875/102 +f 490/879/103 487/880/103 489/878/103 +f 488/881/104 483/876/104 487/882/104 +f 489/878/105 483/883/105 485/884/105 +f 486/885/106 488/886/106 490/879/106 +f 492/887/101 493/888/101 491/889/101 +f 494/890/102 497/891/102 493/888/102 +f 498/892/103 495/893/103 497/891/103 +f 496/894/104 491/889/104 495/895/104 +f 497/891/105 491/896/105 493/897/105 +f 494/898/106 496/899/106 498/892/106 +f 500/900/101 501/901/101 499/902/101 +f 502/903/102 505/904/102 501/901/102 +f 506/905/103 503/906/103 505/904/103 +f 504/907/104 499/902/104 503/908/104 +f 505/904/105 499/909/105 501/910/105 +f 502/911/106 504/912/106 506/905/106 f 510/913/103 508/914/103 509/915/103 -f 509/916/105 514/917/105 510/918/105 -f 507/919/106 512/920/106 508/914/106 -f 514/917/101 512/920/101 511/921/101 -f 518/922/102 516/923/102 517/924/102 -f 517/924/105 522/925/105 518/922/105 -f 515/926/106 520/927/106 516/923/106 -f 522/928/104 520/927/104 519/929/104 +f 509/915/105 514/916/105 510/913/105 +f 507/917/106 512/918/106 508/914/106 +f 514/919/101 512/918/101 511/920/101 +f 518/921/103 516/922/103 517/923/103 +f 517/924/105 522/925/105 518/926/105 +f 515/927/106 520/928/106 516/922/106 +f 522/925/101 520/928/101 519/929/101 f 526/930/102 524/931/102 525/932/102 -f 525/933/105 530/934/105 526/935/105 -f 523/936/106 528/937/106 524/931/106 -f 530/934/104 528/937/104 527/938/104 -f 534/939/102 532/940/102 533/941/102 -f 533/941/101 538/942/101 534/939/101 -f 531/943/103 536/944/103 532/940/103 +f 525/932/105 530/933/105 526/930/105 +f 523/934/106 528/935/106 524/931/106 +f 530/936/104 528/935/104 527/937/104 +f 534/938/102 532/939/102 533/940/102 +f 533/941/105 538/942/105 534/943/105 +f 531/944/106 536/945/106 532/939/106 f 538/942/104 536/945/104 535/946/104 f 542/947/102 540/948/102 541/949/102 f 541/949/101 546/950/101 542/947/101 -f 539/951/103 544/952/103 540/953/103 -f 546/950/104 544/952/104 543/954/104 +f 539/951/103 544/952/103 540/948/103 +f 546/950/104 544/953/104 543/954/104 f 550/955/102 548/956/102 549/957/102 f 549/957/101 554/958/101 550/955/101 -f 547/959/103 552/960/103 548/956/103 -f 554/961/104 552/960/104 551/962/104 +f 547/959/103 552/960/103 548/961/103 +f 554/958/104 552/960/104 551/962/104 f 558/963/102 556/964/102 557/965/102 -f 557/966/101 562/967/101 558/968/101 -f 555/969/103 560/970/103 556/964/103 -f 562/967/104 560/970/104 559/971/104 -f 468/853/101 470/856/101 469/854/101 -f 470/856/102 474/858/102 473/857/102 -f 474/858/103 472/865/103 471/859/103 -f 472/860/104 468/853/104 467/855/104 -f 473/857/105 471/859/105 467/862/105 -f 470/864/106 468/972/106 472/865/106 -f 476/866/101 478/869/101 477/867/101 -f 478/869/102 482/871/102 481/870/102 -f 482/871/103 480/878/103 479/872/103 -f 480/873/104 476/866/104 475/868/104 -f 481/870/105 479/872/105 475/875/105 -f 478/877/106 476/973/106 480/878/106 -f 484/879/101 486/882/101 485/880/101 -f 486/882/102 490/884/102 489/883/102 -f 490/884/103 488/891/103 487/885/103 -f 488/886/104 484/879/104 483/881/104 -f 489/883/105 487/885/105 483/888/105 -f 486/890/106 484/974/106 488/891/106 -f 492/892/101 494/895/101 493/893/101 -f 494/895/102 498/897/102 497/896/102 -f 498/897/103 496/904/103 495/898/103 -f 496/899/104 492/892/104 491/894/104 -f 497/896/105 495/898/105 491/901/105 -f 494/903/106 492/975/106 496/904/106 -f 502/905/103 499/909/103 500/906/103 -f 501/907/105 505/976/105 506/908/105 -f 499/909/106 503/912/106 504/910/106 -f 506/911/101 505/977/101 504/910/101 -f 510/913/103 507/919/103 508/914/103 -f 509/916/105 513/978/105 514/917/105 -f 507/919/106 511/921/106 512/920/106 -f 514/917/101 513/978/101 512/920/101 -f 518/922/102 515/926/102 516/923/102 -f 517/924/105 521/979/105 522/925/105 -f 515/926/106 519/929/106 520/927/106 -f 522/928/104 521/980/104 520/927/104 -f 526/930/102 523/936/102 524/931/102 -f 525/933/105 529/981/105 530/934/105 -f 523/936/106 527/938/106 528/937/106 -f 530/934/104 529/981/104 528/937/104 -f 534/939/102 531/943/102 532/940/102 -f 533/941/101 537/982/101 538/942/101 -f 531/943/103 535/983/103 536/944/103 -f 538/942/104 537/982/104 536/945/104 -f 542/947/102 539/984/102 540/948/102 -f 541/949/101 545/985/101 546/950/101 -f 539/951/103 543/954/103 544/952/103 -f 546/950/104 545/985/104 544/952/104 -f 550/955/102 547/959/102 548/956/102 -f 549/957/101 553/986/101 554/958/101 +f 557/965/101 562/966/101 558/963/101 +f 555/967/103 560/968/103 556/964/103 +f 562/969/104 560/968/104 559/970/104 +f 566/971/102 564/972/102 565/973/102 +f 565/974/101 570/975/101 566/976/101 +f 563/977/103 568/978/103 564/972/103 +f 570/975/104 568/978/104 567/979/104 +f 476/861/101 478/864/101 477/862/101 +f 478/864/102 482/866/102 481/865/102 +f 482/866/103 480/873/103 479/867/103 +f 480/868/104 476/861/104 475/863/104 +f 481/865/105 479/867/105 475/870/105 +f 478/872/106 476/980/106 480/873/106 +f 484/874/101 486/877/101 485/875/101 +f 486/877/102 490/879/102 489/878/102 +f 490/879/103 488/886/103 487/880/103 +f 488/881/104 484/874/104 483/876/104 +f 489/878/105 487/880/105 483/883/105 +f 486/885/106 484/981/106 488/886/106 +f 492/887/101 494/890/101 493/888/101 +f 494/890/102 498/892/102 497/891/102 +f 498/892/103 496/899/103 495/893/103 +f 496/894/104 492/887/104 491/889/104 +f 497/891/105 495/893/105 491/896/105 +f 494/898/106 492/982/106 496/899/106 +f 500/900/101 502/903/101 501/901/101 +f 502/903/102 506/905/102 505/904/102 +f 506/905/103 504/912/103 503/906/103 +f 504/907/104 500/900/104 499/902/104 +f 505/904/105 503/906/105 499/909/105 +f 502/911/106 500/983/106 504/912/106 +f 510/913/103 507/917/103 508/914/103 +f 509/915/105 513/984/105 514/916/105 +f 507/917/106 511/920/106 512/918/106 +f 514/919/101 513/985/101 512/918/101 +f 518/921/103 515/927/103 516/922/103 +f 517/924/105 521/986/105 522/925/105 +f 515/927/106 519/929/106 520/928/106 +f 522/925/101 521/986/101 520/928/101 +f 526/930/102 523/934/102 524/931/102 +f 525/932/105 529/987/105 530/933/105 +f 523/934/106 527/937/106 528/935/106 +f 530/936/104 529/988/104 528/935/104 +f 534/938/102 531/944/102 532/939/102 +f 533/941/105 537/989/105 538/942/105 +f 531/944/106 535/946/106 536/945/106 +f 538/942/104 537/989/104 536/945/104 +f 542/947/102 539/951/102 540/948/102 +f 541/949/101 545/990/101 546/950/101 +f 539/951/103 543/991/103 544/952/103 +f 546/950/104 545/990/104 544/953/104 +f 550/955/102 547/992/102 548/956/102 +f 549/957/101 553/993/101 554/958/101 f 547/959/103 551/962/103 552/960/103 -f 554/961/104 553/987/104 552/960/104 -f 558/963/102 555/969/102 556/964/102 -f 557/966/101 561/988/101 562/967/101 -f 555/969/103 559/971/103 560/970/103 -f 562/967/104 561/988/104 560/970/104 +f 554/958/104 553/993/104 552/960/104 +f 558/963/102 555/967/102 556/964/102 +f 557/965/101 561/994/101 562/966/101 +f 555/967/103 559/970/103 560/968/103 +f 562/969/104 561/995/104 560/968/104 +f 566/971/102 563/977/102 564/972/102 +f 565/974/101 569/996/101 570/975/101 +f 563/977/103 567/979/103 568/978/103 +f 570/975/104 569/996/104 568/978/104 o Base v 1.500000 0.125000 -1.250000 v 1.500000 0.125000 1.250000 @@ -3233,78 +3253,78 @@ vt 0.052632 0.296296 vt 0.210526 0.296296 vt 0.052632 0.518519 vt 0.263158 0.074074 -vt 0.315789 0.111111 -vt 0.269737 0.111111 +vt 0.312500 0.111111 +vt 0.266447 0.111111 vt 0.210526 0.074074 -vt 0.263158 0.111111 -vt 0.217105 0.111111 +vt 0.259868 0.111111 +vt 0.213816 0.111111 vt 0.157895 0.074074 -vt 0.210526 0.111111 -vt 0.164474 0.111111 +vt 0.207237 0.111111 +vt 0.161184 0.111111 vt 0.105263 0.074074 -vt 0.157895 0.111111 -vt 0.111842 0.111111 +vt 0.154605 0.111111 +vt 0.108553 0.111111 vt 0.052632 0.074074 -vt 0.105263 0.111111 -vt 0.059211 0.111111 +vt 0.101974 0.111111 +vt 0.055921 0.111111 vt -0.000000 0.074074 -vt 0.052632 0.111111 -vt 0.006579 0.111111 +vt 0.049342 0.111111 +vt 0.003289 0.111111 vt 0.842105 0.074074 -vt 0.796053 0.111111 +vt 0.792763 0.111111 vt 0.789474 0.074074 -vt 0.743421 0.111111 +vt 0.740132 0.111111 vt 0.736842 0.074074 -vt 0.690789 0.111111 +vt 0.687500 0.111111 vt 0.684211 0.074074 -vt 0.638158 0.111111 +vt 0.634869 0.111111 vt 0.631579 0.074074 -vt 0.585526 0.111111 +vt 0.582237 0.111111 vt 0.578947 0.074074 -vt 0.532895 0.111111 +vt 0.529605 0.111111 vt 0.526316 0.074074 -vt 0.480263 0.111111 +vt 0.476974 0.111111 vt 0.473684 0.074074 -vt 0.427632 0.111111 +vt 0.424342 0.111111 vt 0.421053 0.074074 -vt 0.375000 0.111111 +vt 0.371711 0.111111 vt 0.368421 0.074074 vt 0.315789 0.074074 -vt 0.368421 0.111111 -vt 0.322368 0.111111 +vt 0.365132 0.111111 +vt 0.319079 0.111111 vt 0.263158 0.037037 -vt 0.315789 0.000000 +vt 0.312500 0.000000 vt 0.315789 0.037037 vt 0.210526 0.037037 -vt 0.263158 0.000000 +vt 0.259868 0.000000 vt 0.157895 0.037037 -vt 0.210526 0.000000 +vt 0.207237 0.000000 vt 0.105263 0.037037 -vt 0.157895 0.000000 +vt 0.154605 0.000000 vt 0.052632 0.037037 -vt 0.105263 0.000000 +vt 0.101974 0.000000 vt -0.000000 0.037037 -vt 0.052632 0.000000 -vt 0.802632 0.000000 +vt 0.049342 0.000000 +vt 0.799342 0.000000 vt 0.842105 0.037037 vt 0.789474 0.037037 -vt 0.750000 0.000000 +vt 0.746711 0.000000 vt 0.736842 0.037037 -vt 0.697368 0.000000 +vt 0.694079 0.000000 vt 0.684211 0.037037 -vt 0.644737 0.000000 +vt 0.641447 0.000000 vt 0.631579 0.037037 -vt 0.592105 0.000000 +vt 0.588816 0.000000 vt 0.578947 0.037037 -vt 0.539474 0.000000 +vt 0.536184 0.000000 vt 0.526316 0.037037 -vt 0.480263 0.000000 +vt 0.476974 0.000000 vt 0.473684 0.037037 -vt 0.427632 0.000000 +vt 0.424342 0.000000 vt 0.421053 0.037037 -vt 0.375000 0.000000 +vt 0.371711 0.000000 vt 0.368421 0.037037 -vt 0.368421 0.000000 +vt 0.365132 0.000000 vt 0.578947 0.722222 vt 0.657895 0.833333 vt 0.578947 0.833333 @@ -3739,31 +3759,31 @@ vt 0.263158 0.740741 vt 0.368421 0.296296 vt 0.526316 0.592593 vt 0.052632 0.888889 -vt 0.842105 0.111111 -vt 0.789474 0.111111 -vt 0.736842 0.111111 -vt 0.684211 0.111111 -vt 0.631579 0.111111 -vt 0.578947 0.111111 -vt 0.526316 0.111111 -vt 0.473684 0.111111 -vt 0.421053 0.111111 -vt 0.269737 0.000000 -vt 0.217105 0.000000 -vt 0.164474 0.000000 -vt 0.111842 0.000000 -vt 0.059211 0.000000 -vt 0.006579 0.000000 -vt 0.842105 0.000000 -vt 0.789474 0.000000 -vt 0.736842 0.000000 -vt 0.684211 0.000000 -vt 0.631579 0.000000 -vt 0.578947 0.000000 -vt 0.526316 0.000000 -vt 0.473684 0.000000 -vt 0.421053 0.000000 -vt 0.322368 0.000000 +vt 0.838816 0.111111 +vt 0.786184 0.111111 +vt 0.733553 0.111111 +vt 0.680921 0.111111 +vt 0.628289 0.111111 +vt 0.575658 0.111111 +vt 0.523026 0.111111 +vt 0.470395 0.111111 +vt 0.417763 0.111111 +vt 0.266447 0.000000 +vt 0.213816 0.000000 +vt 0.161184 0.000000 +vt 0.108553 0.000000 +vt 0.055921 0.000000 +vt 0.003289 0.000000 +vt 0.838816 0.000000 +vt 0.786184 0.000000 +vt 0.733553 0.000000 +vt 0.680921 0.000000 +vt 0.628289 0.000000 +vt 0.575658 0.000000 +vt 0.523026 0.000000 +vt 0.470395 0.000000 +vt 0.417763 0.000000 +vt 0.319079 0.000000 vt 0.644737 0.888889 vt 0.697368 0.740741 vt 0.539474 0.814815 @@ -3824,22 +3844,22 @@ vt 0.473684 0.685185 vt 0.513158 0.592593 vt 0.578947 0.648148 vt 0.473684 0.685185 -vt 0.059211 0.148148 -vt 0.111842 0.148148 -vt 0.164474 0.148148 -vt 0.217105 0.148148 -vt 0.269737 0.148148 -vt 0.322368 0.148148 -vt 0.375000 0.148148 -vt 0.427632 0.148148 -vt 0.480263 0.148148 -vt 0.638158 0.148148 -vt 0.532895 0.148148 -vt 0.690789 0.148148 -vt 0.585526 0.148148 -vt 0.743421 0.148148 -vt 0.796053 0.148148 -vt 0.006579 0.148148 +vt 0.055921 0.148148 +vt 0.108553 0.148148 +vt 0.161184 0.148148 +vt 0.213816 0.148148 +vt 0.266447 0.148148 +vt 0.319079 0.148148 +vt 0.371711 0.148148 +vt 0.424342 0.148148 +vt 0.476974 0.148148 +vt 0.634869 0.148148 +vt 0.529605 0.148148 +vt 0.687500 0.148148 +vt 0.582237 0.148148 +vt 0.740132 0.148148 +vt 0.792763 0.148148 +vt 0.003289 0.148148 vt 0.960526 0.000000 vt 0.980263 0.370370 vt 0.960526 0.370370 @@ -3857,22 +3877,22 @@ vt 0.921053 0.370370 vt 0.921053 0.000000 vt 0.940789 0.370370 vt 0.940789 0.000000 -vt 0.105263 0.148148 -vt 0.157895 0.148148 -vt 0.210526 0.148148 -vt 0.263158 0.148148 -vt 0.315789 0.148148 -vt 0.368421 0.148148 -vt 0.421053 0.148148 -vt 0.473684 0.148148 -vt 0.526316 0.148148 -vt 0.684211 0.148148 -vt 0.578947 0.148148 -vt 0.736842 0.148148 -vt 0.631579 0.148148 -vt 0.789474 0.148148 -vt 0.842105 0.148148 -vt 0.052632 0.148148 +vt 0.101974 0.148148 +vt 0.154605 0.148148 +vt 0.207237 0.148148 +vt 0.259868 0.148148 +vt 0.312500 0.148148 +vt 0.365132 0.148148 +vt 0.417763 0.148148 +vt 0.470395 0.148148 +vt 0.523026 0.148148 +vt 0.680921 0.148148 +vt 0.575658 0.148148 +vt 0.733553 0.148148 +vt 0.628289 0.148148 +vt 0.786184 0.148148 +vt 0.838816 0.148148 +vt 0.049342 0.148148 vt 1.000000 0.000000 vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 @@ -3899,752 +3919,752 @@ vn -0.9239 0.0000 0.3827 vn -0.0000 -0.7071 -0.7071 vn -0.0000 -0.7071 0.7071 s off -f 566/989/107 564/990/107 565/991/107 -f 568/992/108 569/993/108 567/994/108 -f 570/995/109 573/996/109 569/993/109 -f 574/997/107 571/998/107 573/996/107 -f 572/999/110 567/994/110 571/1000/110 -f 573/996/111 567/1001/111 569/1002/111 -f 570/1003/112 572/1004/112 574/997/112 -f 576/1005/108 577/1006/108 575/1007/108 -f 578/1008/109 581/1009/109 577/1006/109 -f 582/1010/107 579/1011/107 581/1009/107 -f 580/1012/110 575/1007/110 579/1013/110 -f 581/1009/111 575/1014/111 577/1015/111 -f 578/1016/112 580/1017/112 582/1010/112 -f 584/1018/108 585/1019/108 583/1020/108 -f 586/1021/109 589/1022/109 585/1019/109 -f 590/1023/107 587/1024/107 589/1022/107 -f 588/1025/110 583/1020/110 587/1026/110 -f 589/1022/111 583/1027/111 585/1028/111 -f 586/1029/112 588/1030/112 590/1023/112 -f 592/1031/108 593/1032/108 591/1033/108 -f 594/1034/109 597/1035/109 593/1032/109 -f 598/1036/107 595/1037/107 597/1035/107 -f 596/1038/110 591/1033/110 595/1039/110 -f 597/1035/111 591/1040/111 593/1041/111 -f 594/1042/112 596/1043/112 598/1036/112 -f 565/991/111 602/1044/111 566/989/111 -f 563/1045/112 600/1046/112 564/990/112 -f 602/1044/108 600/1047/108 599/1048/108 -f 606/1049/107 604/1050/107 605/1051/107 -f 605/1051/111 610/1052/111 606/1049/111 -f 603/1053/112 608/1054/112 604/1055/112 -f 610/1052/108 608/1054/108 607/1056/108 -f 614/1057/109 612/1058/109 613/1059/109 +f 574/997/107 572/998/107 573/999/107 +f 576/1000/108 577/1001/108 575/1002/108 +f 578/1003/109 581/1004/109 577/1001/109 +f 582/1005/107 579/1006/107 581/1004/107 +f 580/1007/110 575/1002/110 579/1008/110 +f 581/1004/111 575/1009/111 577/1010/111 +f 578/1011/112 580/1012/112 582/1005/112 +f 584/1013/108 585/1014/108 583/1015/108 +f 586/1016/109 589/1017/109 585/1014/109 +f 590/1018/107 587/1019/107 589/1017/107 +f 588/1020/110 583/1015/110 587/1021/110 +f 589/1017/111 583/1022/111 585/1023/111 +f 586/1024/112 588/1025/112 590/1018/112 +f 592/1026/108 593/1027/108 591/1028/108 +f 594/1029/109 597/1030/109 593/1027/109 +f 598/1031/107 595/1032/107 597/1030/107 +f 596/1033/110 591/1028/110 595/1034/110 +f 597/1030/111 591/1035/111 593/1036/111 +f 594/1037/112 596/1038/112 598/1031/112 +f 600/1039/108 601/1040/108 599/1041/108 +f 602/1042/109 605/1043/109 601/1040/109 +f 606/1044/107 603/1045/107 605/1043/107 +f 604/1046/110 599/1041/110 603/1047/110 +f 605/1043/111 599/1048/111 601/1049/111 +f 602/1050/112 604/1051/112 606/1044/112 +f 573/999/111 610/1052/111 574/997/111 +f 571/1053/112 608/1054/112 572/998/112 +f 610/1052/108 608/1055/108 607/1056/108 +f 614/1057/107 612/1058/107 613/1059/107 f 613/1059/111 618/1060/111 614/1057/111 -f 611/1061/112 616/1062/112 612/1058/112 -f 618/1060/110 616/1063/110 615/1064/110 +f 611/1061/112 616/1062/112 612/1063/112 +f 618/1060/108 616/1062/108 615/1064/108 f 622/1065/109 620/1066/109 621/1067/109 f 621/1067/111 626/1068/111 622/1065/111 -f 619/1069/112 624/1070/112 620/1071/112 -f 626/1068/110 624/1070/110 623/1072/110 -f 628/1073/107 629/1074/107 627/1075/107 -f 633/1076/111 642/1077/111 634/1078/111 -f 630/1079/109 635/1080/109 629/1074/109 -f 627/1075/110 637/1081/110 628/1073/110 -f 628/1073/111 638/1082/111 630/1079/111 -f 629/1074/112 636/1083/112 627/1075/112 -f 632/1084/108 635/1085/108 631/1086/108 -f 633/1087/108 636/1088/108 632/1089/108 -f 634/1078/108 637/1090/108 633/1076/108 -f 631/1091/108 638/1092/108 634/1093/108 -f 631/1086/112 640/1094/112 632/1084/112 -f 634/1093/109 639/1095/109 631/1091/109 -f 632/1089/110 641/1096/110 633/1087/110 -f 645/1097/111 644/1098/111 643/1099/111 -f 649/1100/112 647/1101/112 648/1102/112 -f 645/1103/108 650/1104/108 646/1105/108 -f 644/1098/107 648/1102/107 643/1099/107 -f 646/1106/109 649/1100/109 644/1107/109 -f 643/1108/110 647/1101/110 645/1109/110 -f 653/1110/111 652/1111/111 651/1112/111 -f 657/1113/112 655/1114/112 656/1115/112 -f 653/1116/108 658/1117/108 654/1118/108 -f 652/1111/107 656/1115/107 651/1112/107 -f 654/1119/109 657/1113/109 652/1120/109 -f 651/1121/110 655/1114/110 653/1122/110 -f 661/1123/111 660/1124/111 659/1125/111 -f 665/1126/112 663/1127/112 664/1128/112 -f 661/1129/108 666/1130/108 662/1131/108 -f 660/1124/107 664/1128/107 659/1125/107 -f 662/1132/109 665/1126/109 660/1133/109 -f 659/1134/110 663/1127/110 661/1135/110 -f 667/1136/111 676/1137/111 668/1138/111 -f 673/1139/112 677/1140/112 672/1141/112 -f 668/1138/107 678/1142/107 673/1143/107 -f 669/1144/109 674/1145/109 670/1146/109 -f 668/1138/110 672/1147/110 667/1136/110 -f 677/1140/109 676/1137/109 675/1148/109 -f 672/1149/108 675/1148/108 667/1136/108 -f 680/1150/109 681/1151/109 679/1152/109 -f 686/1153/110 683/1154/110 684/1155/110 -f 681/1156/111 684/1157/111 679/1158/111 -f 679/1159/108 683/1154/108 680/1150/108 -f 680/1150/112 685/1160/112 682/1161/112 -f 682/1161/107 686/1162/107 681/1156/107 -f 689/1163/110 688/1164/110 687/1165/110 -f 669/1166/108 690/1167/108 671/1168/108 -f 671/1168/112 689/1163/112 674/1145/112 -f 670/1169/111 688/1170/111 669/1171/111 -f 674/1145/107 687/1172/107 670/1169/107 -f 700/1173/112 717/1174/112 716/1175/112 -f 699/1176/112 716/1177/112 715/1178/112 -f 698/1179/112 715/1180/112 714/1181/112 -f 697/1182/112 714/1183/112 713/1184/112 -f 696/1185/112 713/1186/112 712/1187/112 -f 695/1188/112 712/1189/112 711/1190/112 -f 695/1191/112 710/1192/112 694/1193/112 -f 694/1193/112 709/1194/112 693/1195/112 -f 693/1195/112 708/1196/112 692/1197/112 -f 692/1197/112 707/1198/112 691/1199/112 -f 691/1199/112 722/1200/112 706/1201/112 -f 706/1201/112 721/1202/112 705/1203/112 -f 705/1203/112 720/1204/112 704/1205/112 -f 704/1205/112 719/1206/112 703/1207/112 -f 703/1207/112 718/1208/112 702/1209/112 -f 701/1210/112 718/1211/112 717/1212/112 -f 732/1213/111 749/1214/111 733/1215/111 -f 731/1216/111 748/1217/111 732/1213/111 -f 730/1218/111 747/1219/111 731/1216/111 -f 729/1220/111 746/1221/111 730/1218/111 -f 728/1222/111 745/1223/111 729/1220/111 -f 727/1224/111 744/1225/111 728/1222/111 -f 742/1226/111 727/1227/111 726/1228/111 -f 741/1229/111 726/1228/111 725/1230/111 -f 739/1231/111 725/1230/111 723/1232/111 -f 740/1233/111 723/1232/111 724/1234/111 -f 754/1235/111 724/1234/111 738/1236/111 -f 753/1237/111 738/1236/111 737/1238/111 -f 752/1239/111 737/1238/111 736/1240/111 -f 751/1241/111 736/1240/111 735/1242/111 -f 750/1243/111 735/1242/111 734/1244/111 -f 733/1215/111 750/1245/111 734/1244/111 -f 756/1246/112 757/1247/112 755/1248/112 -f 761/1249/107 802/1250/107 762/1251/107 -f 757/1247/108 796/1252/108 755/1248/108 -f 758/1253/109 795/1254/109 757/1247/109 -f 755/1248/110 797/1255/110 756/1246/110 -f 756/1246/107 798/1256/107 758/1253/107 -f 794/1257/108 863/1258/108 792/1259/108 -f 791/1260/107 865/1261/107 793/1262/107 -f 779/1263/108 851/1264/108 781/1265/108 -f 781/1265/109 854/1266/109 782/1267/109 -f 780/1268/110 852/1269/110 779/1263/110 -f 785/1270/112 784/1271/112 786/1272/112 -f 769/1273/112 768/1274/112 770/1275/112 -f 764/1276/110 858/1277/110 763/1278/110 -f 765/1279/109 855/1280/109 766/1281/109 -f 763/1278/108 856/1282/108 765/1279/108 -f 775/1283/107 861/1284/107 777/1285/107 -f 778/1286/108 859/1287/108 776/1288/108 -f 776/1288/109 862/1289/109 775/1283/109 -f 777/1290/110 860/1291/110 778/1286/110 -f 772/1292/112 773/1293/112 771/1294/112 -f 766/1281/107 857/1295/107 764/1296/107 -f 792/1259/109 866/1297/109 791/1260/109 -f 793/1298/110 864/1299/110 794/1257/110 -f 788/1300/112 789/1301/112 787/1302/112 -f 782/1267/107 853/1303/107 780/1304/107 -f 760/1305/111 795/1306/111 759/1307/111 -f 761/1308/111 796/1309/111 760/1310/111 -f 762/1251/111 797/1311/111 761/1249/111 -f 759/1312/111 798/1313/111 762/1314/111 -f 799/1315/111 801/1316/111 800/1317/111 -f 759/1307/108 800/1318/108 760/1305/108 -f 762/1314/109 799/1319/109 759/1312/109 -f 760/1310/110 801/1320/110 761/1308/110 -f 805/1321/111 804/1322/111 803/1323/111 -f 808/1324/112 810/1325/112 807/1326/112 -f 804/1322/113 808/1324/113 803/1323/113 -f 805/1327/114 810/1325/114 806/1328/114 +f 619/1069/112 624/1070/112 620/1066/112 +f 626/1068/110 624/1071/110 623/1072/110 +f 630/1073/109 628/1074/109 629/1075/109 +f 629/1075/111 634/1076/111 630/1073/111 +f 627/1077/112 632/1078/112 628/1079/112 +f 634/1076/110 632/1078/110 631/1080/110 +f 636/1081/107 637/1082/107 635/1083/107 +f 641/1084/111 650/1085/111 642/1086/111 +f 638/1087/109 643/1088/109 637/1082/109 +f 635/1083/110 645/1089/110 636/1081/110 +f 636/1081/111 646/1090/111 638/1087/111 +f 637/1082/112 644/1091/112 635/1083/112 +f 640/1092/108 643/1093/108 639/1094/108 +f 641/1095/108 644/1096/108 640/1097/108 +f 642/1086/108 645/1098/108 641/1084/108 +f 639/1099/108 646/1100/108 642/1101/108 +f 639/1094/112 648/1102/112 640/1092/112 +f 642/1101/109 647/1103/109 639/1099/109 +f 640/1097/110 649/1104/110 641/1095/110 +f 653/1105/111 652/1106/111 651/1107/111 +f 657/1108/112 655/1109/112 656/1110/112 +f 653/1111/108 658/1112/108 654/1113/108 +f 652/1106/107 656/1110/107 651/1107/107 +f 654/1114/109 657/1108/109 652/1115/109 +f 651/1116/110 655/1109/110 653/1117/110 +f 661/1118/111 660/1119/111 659/1120/111 +f 665/1121/112 663/1122/112 664/1123/112 +f 661/1124/108 666/1125/108 662/1126/108 +f 660/1119/107 664/1123/107 659/1120/107 +f 662/1127/109 665/1121/109 660/1128/109 +f 659/1129/110 663/1122/110 661/1130/110 +f 669/1131/111 668/1132/111 667/1133/111 +f 673/1134/112 671/1135/112 672/1136/112 +f 669/1137/108 674/1138/108 670/1139/108 +f 668/1132/107 672/1136/107 667/1133/107 +f 670/1140/109 673/1134/109 668/1141/109 +f 667/1142/110 671/1135/110 669/1143/110 +f 675/1144/111 684/1145/111 676/1146/111 +f 681/1147/112 685/1148/112 680/1149/112 +f 676/1146/107 686/1150/107 681/1151/107 +f 677/1152/109 682/1153/109 678/1154/109 +f 676/1146/110 680/1155/110 675/1144/110 +f 685/1148/109 684/1145/109 683/1156/109 +f 680/1157/108 683/1156/108 675/1144/108 +f 688/1158/109 689/1159/109 687/1160/109 +f 694/1161/110 691/1162/110 692/1163/110 +f 689/1164/111 692/1165/111 687/1166/111 +f 687/1167/108 691/1162/108 688/1158/108 +f 688/1158/112 693/1168/112 690/1169/112 +f 690/1169/107 694/1170/107 689/1164/107 +f 697/1171/110 696/1172/110 695/1173/110 +f 677/1174/108 698/1175/108 679/1176/108 +f 679/1176/112 697/1171/112 682/1153/112 +f 678/1177/111 696/1178/111 677/1179/111 +f 682/1153/107 695/1180/107 678/1177/107 +f 708/1181/112 725/1182/112 724/1183/112 +f 707/1184/112 724/1185/112 723/1186/112 +f 706/1187/112 723/1188/112 722/1189/112 +f 705/1190/112 722/1191/112 721/1192/112 +f 704/1193/112 721/1194/112 720/1195/112 +f 703/1196/112 720/1197/112 719/1198/112 +f 703/1199/112 718/1200/112 702/1201/112 +f 702/1201/112 717/1202/112 701/1203/112 +f 701/1203/112 716/1204/112 700/1205/112 +f 700/1205/112 715/1206/112 699/1207/112 +f 699/1207/112 730/1208/112 714/1209/112 +f 714/1209/112 729/1210/112 713/1211/112 +f 713/1211/112 728/1212/112 712/1213/112 +f 712/1213/112 727/1214/112 711/1215/112 +f 711/1215/112 726/1216/112 710/1217/112 +f 709/1218/112 726/1219/112 725/1220/112 +f 740/1221/111 757/1222/111 741/1223/111 +f 739/1224/111 756/1225/111 740/1221/111 +f 738/1226/111 755/1227/111 739/1224/111 +f 737/1228/111 754/1229/111 738/1226/111 +f 736/1230/111 753/1231/111 737/1228/111 +f 735/1232/111 752/1233/111 736/1230/111 +f 750/1234/111 735/1235/111 734/1236/111 +f 749/1237/111 734/1236/111 733/1238/111 +f 747/1239/111 733/1238/111 731/1240/111 +f 748/1241/111 731/1240/111 732/1242/111 +f 762/1243/111 732/1242/111 746/1244/111 +f 761/1245/111 746/1244/111 745/1246/111 +f 760/1247/111 745/1246/111 744/1248/111 +f 759/1249/111 744/1248/111 743/1250/111 +f 758/1251/111 743/1250/111 742/1252/111 +f 741/1223/111 758/1253/111 742/1252/111 +f 764/1254/112 765/1255/112 763/1256/112 +f 769/1257/107 810/1258/107 770/1259/107 +f 765/1255/108 804/1260/108 763/1256/108 +f 766/1261/109 803/1262/109 765/1255/109 +f 763/1256/110 805/1263/110 764/1254/110 +f 764/1254/107 806/1264/107 766/1261/107 +f 802/1265/108 871/1266/108 800/1267/108 +f 799/1268/107 873/1269/107 801/1270/107 +f 787/1271/108 859/1272/108 789/1273/108 +f 789/1273/109 862/1274/109 790/1275/109 +f 788/1276/110 860/1277/110 787/1271/110 +f 793/1278/112 792/1279/112 794/1280/112 +f 777/1281/112 776/1282/112 778/1283/112 +f 772/1284/110 866/1285/110 771/1286/110 +f 773/1287/109 863/1288/109 774/1289/109 +f 771/1286/108 864/1290/108 773/1287/108 +f 783/1291/107 869/1292/107 785/1293/107 +f 786/1294/108 867/1295/108 784/1296/108 +f 784/1296/109 870/1297/109 783/1291/109 +f 785/1298/110 868/1299/110 786/1294/110 +f 780/1300/112 781/1301/112 779/1302/112 +f 774/1289/107 865/1303/107 772/1304/107 +f 800/1267/109 874/1305/109 799/1268/109 +f 801/1306/110 872/1307/110 802/1265/110 +f 796/1308/112 797/1309/112 795/1310/112 +f 790/1275/107 861/1311/107 788/1312/107 +f 768/1313/111 803/1314/111 767/1315/111 +f 769/1316/111 804/1317/111 768/1318/111 +f 770/1259/111 805/1319/111 769/1257/111 +f 767/1320/111 806/1321/111 770/1322/111 +f 807/1323/111 809/1324/111 808/1325/111 +f 767/1315/108 808/1326/108 768/1313/108 +f 770/1322/109 807/1327/109 767/1320/109 +f 768/1318/110 809/1328/110 769/1316/110 f 813/1329/111 812/1330/111 811/1331/111 f 816/1332/112 818/1333/112 815/1334/112 -f 812/1330/115 816/1332/115 811/1331/115 -f 813/1335/116 818/1333/116 814/1336/116 -f 820/1337/112 840/1338/112 837/1339/112 -f 849/1340/108 848/1341/108 850/1342/108 -f 838/1343/111 841/1344/111 819/1345/111 -f 846/1346/111 849/1340/111 843/1347/111 -f 841/1344/107 840/1338/107 842/1348/107 -f 830/1349/107 828/1350/107 826/1351/107 -f 844/1352/112 848/1341/112 845/1353/112 -f 827/1354/108 831/1355/108 835/1356/108 -f 784/1357/117 852/1269/117 786/1358/117 -f 786/1359/118 853/1360/118 785/1361/118 -f 785/1270/119 854/1266/119 783/1362/119 -f 783/1363/120 851/1264/120 784/1364/120 -f 767/1365/120 856/1282/120 768/1366/120 -f 769/1273/119 855/1280/119 767/1367/119 -f 770/1368/118 857/1369/118 769/1370/118 -f 768/1371/117 858/1277/117 770/1372/117 -f 773/1373/117 860/1291/117 771/1374/117 -f 771/1375/118 861/1376/118 772/1377/118 -f 772/1292/119 862/1289/119 774/1378/119 -f 774/1379/120 859/1287/120 773/1380/120 -f 789/1381/117 864/1299/117 787/1382/117 -f 787/1383/118 865/1384/118 788/1385/118 -f 788/1300/119 866/1297/119 790/1386/119 -f 790/1387/120 863/1258/120 789/1388/120 -f 868/1389/107 869/1390/107 867/1391/107 -f 873/1392/111 882/1393/111 874/1394/111 -f 870/1395/109 875/1396/109 869/1390/109 -f 867/1391/110 877/1397/110 868/1389/110 -f 868/1389/111 878/1398/111 870/1395/111 -f 869/1390/112 876/1399/112 867/1391/112 -f 872/1400/108 875/1401/108 871/1402/108 -f 873/1403/108 876/1404/108 872/1405/108 -f 874/1394/108 877/1406/108 873/1392/108 -f 871/1407/108 878/1408/108 874/1409/108 -f 871/1402/112 880/1410/112 872/1400/112 -f 874/1409/109 879/1411/109 871/1407/109 -f 872/1405/110 881/1412/110 873/1403/110 -f 884/1413/107 885/1414/107 883/1415/107 -f 889/1416/111 898/1417/111 890/1418/111 -f 886/1419/109 891/1420/109 885/1414/109 -f 883/1415/110 893/1421/110 884/1413/110 -f 884/1413/111 894/1422/111 886/1419/111 -f 885/1414/112 892/1423/112 883/1415/112 -f 888/1424/108 891/1425/108 887/1426/108 -f 889/1427/108 892/1428/108 888/1429/108 -f 890/1418/108 893/1430/108 889/1416/108 -f 887/1431/108 894/1432/108 890/1433/108 -f 887/1426/112 896/1434/112 888/1424/112 -f 890/1433/109 895/1435/109 887/1431/109 -f 888/1429/110 897/1436/110 889/1427/110 -f 900/1437/108 901/1438/108 899/1439/108 -f 905/1440/111 914/1441/111 906/1442/111 -f 902/1443/110 907/1444/110 901/1438/110 -f 899/1439/109 909/1445/109 900/1437/109 -f 900/1437/111 910/1446/111 902/1443/111 -f 901/1438/112 908/1447/112 899/1439/112 -f 904/1448/107 907/1449/107 903/1450/107 -f 905/1451/107 908/1452/107 904/1453/107 -f 906/1442/107 909/1454/107 905/1440/107 -f 903/1455/107 910/1456/107 906/1457/107 -f 903/1450/112 912/1458/112 904/1448/112 -f 906/1457/110 911/1459/110 903/1455/110 -f 904/1453/109 913/1460/109 905/1451/109 -f 916/1461/108 917/1462/108 915/1463/108 -f 921/1464/111 930/1465/111 922/1466/111 -f 918/1467/110 923/1468/110 917/1462/110 -f 915/1463/109 925/1469/109 916/1461/109 -f 916/1461/111 926/1470/111 918/1467/111 -f 917/1462/112 924/1471/112 915/1463/112 -f 920/1472/107 923/1473/107 919/1474/107 -f 921/1475/107 924/1476/107 920/1477/107 -f 922/1466/107 925/1478/107 921/1464/107 -f 919/1479/107 926/1480/107 922/1481/107 -f 919/1474/112 928/1482/112 920/1472/112 -f 922/1481/110 927/1483/110 919/1479/110 -f 920/1477/109 929/1484/109 921/1475/109 -f 932/1485/108 933/1486/108 931/1487/108 -f 937/1488/111 946/1489/111 938/1490/111 -f 934/1491/110 939/1492/110 933/1486/110 -f 931/1487/109 941/1493/109 932/1485/109 -f 932/1485/111 942/1494/111 934/1491/111 -f 933/1486/112 940/1495/112 931/1487/112 -f 936/1496/107 939/1497/107 935/1498/107 -f 937/1499/107 940/1500/107 936/1501/107 -f 938/1490/107 941/1502/107 937/1488/107 -f 935/1503/107 942/1504/107 938/1505/107 -f 935/1498/112 944/1506/112 936/1496/112 -f 938/1505/110 943/1507/110 935/1503/110 -f 936/1501/109 945/1508/109 937/1499/109 -f 948/1509/109 949/1510/109 947/1511/109 -f 953/1512/111 962/1513/111 954/1514/111 -f 950/1515/108 955/1516/108 949/1510/108 -f 947/1511/107 957/1517/107 948/1509/107 -f 948/1509/111 958/1518/111 950/1515/111 -f 949/1510/112 956/1519/112 947/1511/112 -f 952/1520/110 955/1521/110 951/1522/110 -f 953/1523/110 956/1524/110 952/1525/110 -f 954/1514/110 957/1526/110 953/1512/110 -f 951/1527/110 958/1528/110 954/1529/110 -f 951/1522/112 960/1530/112 952/1520/112 -f 954/1529/108 959/1531/108 951/1527/108 -f 952/1525/107 961/1532/107 953/1523/107 -f 964/1533/109 965/1534/109 963/1535/109 -f 969/1536/111 978/1537/111 970/1538/111 -f 966/1539/108 971/1540/108 965/1534/108 -f 963/1535/107 973/1541/107 964/1533/107 -f 964/1533/111 974/1542/111 966/1539/111 -f 965/1534/112 972/1543/112 963/1535/112 -f 968/1544/110 971/1545/110 967/1546/110 -f 969/1547/110 972/1548/110 968/1549/110 -f 970/1538/110 973/1550/110 969/1536/110 -f 967/1551/110 974/1552/110 970/1553/110 -f 967/1546/112 976/1554/112 968/1544/112 -f 970/1553/108 975/1555/108 967/1551/108 -f 968/1549/107 977/1556/107 969/1547/107 -f 980/1557/109 981/1558/109 979/1559/109 -f 985/1560/111 994/1561/111 986/1562/111 -f 982/1563/108 987/1564/108 981/1558/108 -f 979/1559/107 989/1565/107 980/1557/107 -f 980/1557/111 990/1566/111 982/1563/111 -f 981/1558/112 988/1567/112 979/1559/112 -f 984/1568/110 987/1569/110 983/1570/110 -f 985/1571/110 988/1572/110 984/1573/110 -f 986/1562/110 989/1574/110 985/1560/110 -f 983/1575/110 990/1576/110 986/1577/110 -f 984/1568/112 991/1578/112 992/1579/112 -f 986/1577/108 991/1580/108 983/1575/108 -f 984/1573/107 993/1581/107 985/1571/107 -f 996/1582/110 997/1583/110 995/1584/110 -f 1001/1585/111 1010/1586/111 1002/1587/111 -f 998/1588/107 1003/1589/107 997/1583/107 -f 995/1584/108 1005/1590/108 996/1582/108 -f 996/1582/111 1006/1591/111 998/1588/111 -f 997/1583/112 1004/1592/112 995/1584/112 -f 1000/1593/109 1003/1594/109 999/1595/109 -f 1001/1596/109 1004/1597/109 1000/1598/109 -f 1002/1587/109 1005/1599/109 1001/1585/109 -f 999/1600/109 1006/1601/109 1002/1602/109 -f 1000/1593/112 1007/1603/112 1008/1604/112 -f 1002/1602/107 1007/1605/107 999/1600/107 -f 1000/1598/108 1009/1606/108 1001/1596/108 -f 1012/1607/110 1013/1608/110 1011/1609/110 -f 1017/1610/111 1026/1611/111 1018/1612/111 -f 1014/1613/107 1019/1614/107 1013/1608/107 -f 1011/1609/108 1021/1615/108 1012/1607/108 -f 1012/1607/111 1022/1616/111 1014/1613/111 -f 1013/1608/112 1020/1617/112 1011/1609/112 -f 1016/1618/109 1019/1619/109 1015/1620/109 -f 1017/1621/109 1020/1622/109 1016/1623/109 -f 1018/1612/109 1021/1624/109 1017/1610/109 -f 1015/1625/109 1022/1626/109 1018/1627/109 -f 1015/1620/112 1024/1628/112 1016/1618/112 -f 1018/1627/107 1023/1629/107 1015/1625/107 -f 1016/1623/108 1025/1630/108 1017/1621/108 -f 1028/1631/110 1029/1632/110 1027/1633/110 -f 1033/1634/111 1042/1635/111 1034/1636/111 -f 1030/1637/107 1035/1638/107 1029/1632/107 -f 1027/1633/108 1037/1639/108 1028/1631/108 -f 1028/1631/111 1038/1640/111 1030/1637/111 -f 1027/1633/112 1035/1641/112 1036/1642/112 -f 1032/1643/109 1035/1641/109 1031/1644/109 -f 1033/1645/109 1036/1646/109 1032/1647/109 -f 1034/1636/109 1037/1648/109 1033/1634/109 -f 1031/1649/109 1038/1650/109 1034/1651/109 -f 1032/1643/112 1039/1652/112 1040/1653/112 -f 1034/1651/107 1039/1654/107 1031/1649/107 -f 1032/1647/108 1041/1655/108 1033/1645/108 -f 566/989/107 563/1045/107 564/990/107 -f 568/992/108 570/995/108 569/993/108 -f 570/995/109 574/997/109 573/996/109 -f 574/997/107 572/1004/107 571/998/107 -f 572/999/110 568/992/110 567/994/110 -f 573/996/111 571/998/111 567/1001/111 -f 570/1003/112 568/1656/112 572/1004/112 -f 576/1005/108 578/1008/108 577/1006/108 -f 578/1008/109 582/1010/109 581/1009/109 -f 582/1010/107 580/1017/107 579/1011/107 -f 580/1012/110 576/1005/110 575/1007/110 -f 581/1009/111 579/1011/111 575/1014/111 -f 578/1016/112 576/1657/112 580/1017/112 -f 584/1018/108 586/1021/108 585/1019/108 -f 586/1021/109 590/1023/109 589/1022/109 -f 590/1023/107 588/1030/107 587/1024/107 -f 588/1025/110 584/1018/110 583/1020/110 -f 589/1022/111 587/1024/111 583/1027/111 -f 586/1029/112 584/1658/112 588/1030/112 -f 592/1031/108 594/1034/108 593/1032/108 -f 594/1034/109 598/1036/109 597/1035/109 -f 598/1036/107 596/1043/107 595/1037/107 -f 596/1038/110 592/1031/110 591/1033/110 -f 597/1035/111 595/1037/111 591/1040/111 -f 594/1042/112 592/1659/112 596/1043/112 -f 565/991/111 601/1660/111 602/1044/111 -f 563/1045/112 599/1661/112 600/1046/112 -f 602/1044/108 601/1660/108 600/1047/108 -f 606/1049/107 603/1662/107 604/1050/107 -f 605/1051/111 609/1663/111 610/1052/111 -f 603/1053/112 607/1056/112 608/1054/112 -f 610/1052/108 609/1663/108 608/1054/108 -f 614/1057/109 611/1061/109 612/1058/109 -f 613/1059/111 617/1664/111 618/1060/111 -f 611/1061/112 615/1665/112 616/1062/112 -f 618/1060/110 617/1664/110 616/1063/110 -f 622/1065/109 619/1666/109 620/1066/109 -f 621/1067/111 625/1667/111 626/1068/111 -f 619/1069/112 623/1072/112 624/1070/112 -f 626/1068/110 625/1667/110 624/1070/110 -f 628/1073/107 630/1079/107 629/1074/107 -f 633/1076/111 641/1668/111 642/1077/111 -f 630/1079/109 638/1092/109 635/1080/109 -f 627/1075/110 636/1088/110 637/1081/110 -f 628/1073/111 637/1090/111 638/1082/111 -f 629/1074/112 635/1085/112 636/1083/112 -f 632/1084/108 636/1083/108 635/1085/108 -f 633/1087/108 637/1081/108 636/1088/108 -f 634/1078/108 638/1082/108 637/1090/108 -f 631/1091/108 635/1080/108 638/1092/108 -f 631/1086/112 639/1669/112 640/1094/112 -f 634/1093/109 642/1670/109 639/1095/109 -f 632/1089/110 640/1671/110 641/1096/110 -f 645/1097/111 646/1672/111 644/1098/111 -f 649/1100/112 650/1104/112 647/1101/112 -f 645/1103/108 647/1101/108 650/1104/108 -f 644/1098/107 649/1100/107 648/1102/107 -f 646/1106/109 650/1104/109 649/1100/109 -f 643/1108/110 648/1102/110 647/1101/110 -f 653/1110/111 654/1673/111 652/1111/111 -f 657/1113/112 658/1117/112 655/1114/112 -f 653/1116/108 655/1114/108 658/1117/108 -f 652/1111/107 657/1113/107 656/1115/107 -f 654/1119/109 658/1117/109 657/1113/109 -f 651/1121/110 656/1115/110 655/1114/110 -f 661/1123/111 662/1674/111 660/1124/111 -f 665/1126/112 666/1130/112 663/1127/112 -f 661/1129/108 663/1127/108 666/1130/108 -f 660/1124/107 665/1126/107 664/1128/107 -f 662/1132/109 666/1130/109 665/1126/109 -f 659/1134/110 664/1128/110 663/1127/110 -f 667/1136/111 675/1148/111 676/1137/111 -f 673/1139/112 678/1675/112 677/1140/112 -f 668/1138/107 676/1137/107 678/1142/107 -f 669/1144/109 671/1168/109 674/1145/109 -f 668/1138/110 673/1676/110 672/1147/110 -f 677/1140/109 678/1675/109 676/1137/109 -f 672/1149/108 677/1677/108 675/1148/108 -f 680/1150/109 682/1161/109 681/1151/109 -f 686/1153/110 685/1160/110 683/1154/110 -f 681/1156/111 686/1162/111 684/1157/111 -f 679/1159/108 684/1678/108 683/1154/108 -f 680/1150/112 683/1154/112 685/1160/112 -f 682/1161/107 685/1160/107 686/1162/107 -f 689/1163/110 690/1167/110 688/1164/110 -f 669/1166/108 688/1679/108 690/1167/108 -f 671/1168/112 690/1167/112 689/1163/112 -f 670/1169/111 687/1172/111 688/1170/111 -f 674/1145/107 689/1163/107 687/1172/107 -f 700/1173/112 701/1210/112 717/1174/112 -f 699/1176/112 700/1173/112 716/1177/112 -f 698/1179/112 699/1176/112 715/1180/112 -f 697/1182/112 698/1179/112 714/1183/112 -f 696/1185/112 697/1182/112 713/1186/112 -f 695/1188/112 696/1185/112 712/1189/112 -f 695/1191/112 711/1680/112 710/1192/112 -f 694/1193/112 710/1681/112 709/1194/112 -f 693/1195/112 709/1682/112 708/1196/112 -f 692/1197/112 708/1683/112 707/1198/112 -f 691/1199/112 707/1684/112 722/1200/112 -f 706/1201/112 722/1685/112 721/1202/112 -f 705/1203/112 721/1686/112 720/1204/112 -f 704/1205/112 720/1687/112 719/1206/112 -f 703/1207/112 719/1688/112 718/1208/112 -f 701/1210/112 702/1209/112 718/1211/112 -f 732/1213/111 748/1689/111 749/1214/111 -f 731/1216/111 747/1690/111 748/1217/111 -f 730/1218/111 746/1691/111 747/1219/111 -f 729/1220/111 745/1692/111 746/1221/111 -f 728/1222/111 744/1693/111 745/1223/111 -f 727/1224/111 743/1694/111 744/1225/111 -f 742/1226/111 743/1695/111 727/1227/111 -f 741/1229/111 742/1696/111 726/1228/111 -f 739/1231/111 741/1697/111 725/1230/111 -f 740/1233/111 739/1698/111 723/1232/111 -f 754/1235/111 740/1699/111 724/1234/111 -f 753/1237/111 754/1700/111 738/1236/111 -f 752/1239/111 753/1701/111 737/1238/111 -f 751/1241/111 752/1702/111 736/1240/111 -f 750/1243/111 751/1703/111 735/1242/111 -f 733/1215/111 749/1704/111 750/1245/111 -f 756/1246/112 758/1253/112 757/1247/112 -f 761/1249/107 801/1316/107 802/1250/107 -f 757/1247/108 795/1306/108 796/1252/108 -f 758/1253/109 798/1313/109 795/1254/109 -f 755/1248/110 796/1309/110 797/1255/110 -f 756/1246/107 797/1311/107 798/1256/107 -f 794/1257/108 864/1299/108 863/1258/108 -f 791/1260/107 866/1297/107 865/1261/107 -f 779/1263/108 852/1269/108 851/1264/108 -f 781/1265/109 851/1264/109 854/1266/109 -f 780/1268/110 853/1360/110 852/1269/110 -f 785/1270/112 783/1362/112 784/1271/112 -f 769/1273/112 767/1367/112 768/1274/112 -f 764/1276/110 857/1369/110 858/1277/110 -f 765/1279/109 856/1282/109 855/1280/109 -f 763/1278/108 858/1277/108 856/1282/108 -f 775/1283/107 862/1289/107 861/1284/107 -f 778/1286/108 860/1291/108 859/1287/108 -f 776/1288/109 859/1287/109 862/1289/109 -f 777/1290/110 861/1376/110 860/1291/110 -f 772/1292/112 774/1378/112 773/1293/112 -f 766/1281/107 855/1280/107 857/1295/107 -f 792/1259/109 863/1258/109 866/1297/109 -f 793/1298/110 865/1384/110 864/1299/110 -f 788/1300/112 790/1386/112 789/1301/112 -f 782/1267/107 854/1266/107 853/1303/107 -f 760/1305/111 796/1252/111 795/1306/111 -f 761/1308/111 797/1255/111 796/1309/111 -f 762/1251/111 798/1256/111 797/1311/111 -f 759/1312/111 795/1254/111 798/1313/111 -f 799/1315/111 802/1250/111 801/1316/111 -f 759/1307/108 799/1705/108 800/1318/108 -f 762/1314/109 802/1706/109 799/1319/109 -f 760/1310/110 800/1707/110 801/1320/110 -f 805/1321/111 806/1708/111 804/1322/111 -f 808/1324/112 809/1709/112 810/1325/112 -f 804/1322/113 809/1709/113 808/1324/113 -f 805/1327/114 807/1326/114 810/1325/114 -f 813/1329/111 814/1710/111 812/1330/111 -f 816/1332/112 817/1711/112 818/1333/112 -f 812/1330/115 817/1711/115 816/1332/115 -f 813/1335/116 815/1334/116 818/1333/116 -f 820/1337/112 842/1348/112 840/1338/112 -f 849/1340/108 847/1712/108 848/1341/108 -f 838/1343/111 839/1713/111 841/1344/111 -f 846/1346/111 847/1712/111 849/1340/111 -f 841/1344/107 839/1713/107 840/1338/107 -f 826/1351/107 824/1714/107 822/1715/107 -f 822/1715/107 836/1716/107 826/1351/107 -f 836/1716/107 834/1717/107 826/1351/107 -f 834/1717/107 832/1718/107 826/1351/107 -f 832/1718/107 830/1349/107 826/1351/107 -f 844/1352/112 850/1342/112 848/1341/112 -f 835/1356/108 821/1719/108 823/1720/108 -f 823/1720/108 825/1721/108 827/1354/108 -f 827/1354/108 829/1722/108 831/1355/108 -f 831/1355/108 833/1723/108 835/1356/108 -f 835/1356/108 823/1720/108 827/1354/108 -f 784/1357/117 851/1264/117 852/1269/117 -f 786/1359/118 852/1269/118 853/1360/118 -f 785/1270/119 853/1303/119 854/1266/119 -f 783/1363/120 854/1266/120 851/1264/120 -f 767/1365/120 855/1280/120 856/1282/120 -f 769/1273/119 857/1295/119 855/1280/119 -f 770/1368/118 858/1277/118 857/1369/118 -f 768/1371/117 856/1282/117 858/1277/117 -f 773/1373/117 859/1287/117 860/1291/117 -f 771/1375/118 860/1291/118 861/1376/118 -f 772/1292/119 861/1284/119 862/1289/119 -f 774/1379/120 862/1289/120 859/1287/120 -f 789/1381/117 863/1258/117 864/1299/117 -f 787/1383/118 864/1299/118 865/1384/118 -f 788/1300/119 865/1261/119 866/1297/119 -f 790/1387/120 866/1297/120 863/1258/120 -f 868/1389/107 870/1395/107 869/1390/107 -f 873/1392/111 881/1724/111 882/1393/111 -f 870/1395/109 878/1408/109 875/1396/109 -f 867/1391/110 876/1404/110 877/1397/110 -f 868/1389/111 877/1406/111 878/1398/111 -f 869/1390/112 875/1401/112 876/1399/112 -f 872/1400/108 876/1399/108 875/1401/108 -f 873/1403/108 877/1397/108 876/1404/108 -f 874/1394/108 878/1398/108 877/1406/108 -f 871/1407/108 875/1396/108 878/1408/108 -f 871/1402/112 879/1725/112 880/1410/112 -f 874/1409/109 882/1726/109 879/1411/109 -f 872/1405/110 880/1727/110 881/1412/110 -f 884/1413/107 886/1419/107 885/1414/107 -f 889/1416/111 897/1728/111 898/1417/111 -f 886/1419/109 894/1432/109 891/1420/109 -f 883/1415/110 892/1428/110 893/1421/110 -f 884/1413/111 893/1430/111 894/1422/111 -f 885/1414/112 891/1425/112 892/1423/112 -f 888/1424/108 892/1423/108 891/1425/108 -f 889/1427/108 893/1421/108 892/1428/108 -f 890/1418/108 894/1422/108 893/1430/108 -f 887/1431/108 891/1420/108 894/1432/108 -f 887/1426/112 895/1729/112 896/1434/112 -f 890/1433/109 898/1730/109 895/1435/109 -f 888/1429/110 896/1731/110 897/1436/110 -f 900/1437/108 902/1443/108 901/1438/108 -f 905/1440/111 913/1732/111 914/1441/111 -f 902/1443/110 910/1456/110 907/1444/110 -f 899/1439/109 908/1452/109 909/1445/109 -f 900/1437/111 909/1454/111 910/1446/111 -f 901/1438/112 907/1449/112 908/1447/112 -f 904/1448/107 908/1447/107 907/1449/107 -f 905/1451/107 909/1445/107 908/1452/107 -f 906/1442/107 910/1446/107 909/1454/107 -f 903/1455/107 907/1444/107 910/1456/107 -f 903/1450/112 911/1733/112 912/1458/112 -f 906/1457/110 914/1734/110 911/1459/110 -f 904/1453/109 912/1735/109 913/1460/109 -f 916/1461/108 918/1467/108 917/1462/108 -f 921/1464/111 929/1736/111 930/1465/111 -f 918/1467/110 926/1480/110 923/1468/110 -f 915/1463/109 924/1476/109 925/1469/109 -f 916/1461/111 925/1478/111 926/1470/111 -f 917/1462/112 923/1473/112 924/1471/112 -f 920/1472/107 924/1471/107 923/1473/107 -f 921/1475/107 925/1469/107 924/1476/107 -f 922/1466/107 926/1470/107 925/1478/107 -f 919/1479/107 923/1468/107 926/1480/107 -f 919/1474/112 927/1737/112 928/1482/112 -f 922/1481/110 930/1738/110 927/1483/110 -f 920/1477/109 928/1739/109 929/1484/109 -f 932/1485/108 934/1491/108 933/1486/108 -f 937/1488/111 945/1740/111 946/1489/111 -f 934/1491/110 942/1504/110 939/1492/110 -f 931/1487/109 940/1500/109 941/1493/109 -f 932/1485/111 941/1502/111 942/1494/111 -f 933/1486/112 939/1497/112 940/1495/112 -f 936/1496/107 940/1495/107 939/1497/107 -f 937/1499/107 941/1493/107 940/1500/107 -f 938/1490/107 942/1494/107 941/1502/107 -f 935/1503/107 939/1492/107 942/1504/107 -f 935/1498/112 943/1741/112 944/1506/112 -f 938/1505/110 946/1742/110 943/1507/110 -f 936/1501/109 944/1743/109 945/1508/109 -f 948/1509/109 950/1515/109 949/1510/109 -f 953/1512/111 961/1744/111 962/1513/111 -f 950/1515/108 958/1528/108 955/1516/108 -f 947/1511/107 956/1524/107 957/1517/107 -f 948/1509/111 957/1526/111 958/1518/111 -f 949/1510/112 955/1521/112 956/1519/112 -f 952/1520/110 956/1519/110 955/1521/110 -f 953/1523/110 957/1517/110 956/1524/110 -f 954/1514/110 958/1518/110 957/1526/110 -f 951/1527/110 955/1516/110 958/1528/110 -f 951/1522/112 959/1745/112 960/1530/112 -f 954/1529/108 962/1746/108 959/1531/108 -f 952/1525/107 960/1747/107 961/1532/107 -f 964/1533/109 966/1539/109 965/1534/109 -f 969/1536/111 977/1748/111 978/1537/111 -f 966/1539/108 974/1552/108 971/1540/108 -f 963/1535/107 972/1548/107 973/1541/107 -f 964/1533/111 973/1550/111 974/1542/111 -f 965/1534/112 971/1545/112 972/1543/112 -f 968/1544/110 972/1543/110 971/1545/110 -f 969/1547/110 973/1541/110 972/1548/110 -f 970/1538/110 974/1542/110 973/1550/110 -f 967/1551/110 971/1540/110 974/1552/110 -f 967/1546/112 975/1749/112 976/1554/112 -f 970/1553/108 978/1750/108 975/1555/108 -f 968/1549/107 976/1751/107 977/1556/107 -f 980/1557/109 982/1563/109 981/1558/109 -f 985/1560/111 993/1752/111 994/1561/111 -f 982/1563/108 990/1576/108 987/1564/108 -f 979/1559/107 988/1572/107 989/1565/107 -f 980/1557/111 989/1574/111 990/1566/111 -f 981/1558/112 987/1569/112 988/1567/112 -f 984/1568/110 988/1567/110 987/1569/110 -f 985/1571/110 989/1565/110 988/1572/110 -f 986/1562/110 990/1566/110 989/1574/110 -f 983/1575/110 987/1564/110 990/1576/110 -f 984/1568/112 983/1570/112 991/1578/112 -f 986/1577/108 994/1753/108 991/1580/108 -f 984/1573/107 992/1754/107 993/1581/107 -f 996/1582/110 998/1588/110 997/1583/110 -f 1001/1585/111 1009/1755/111 1010/1586/111 -f 998/1588/107 1006/1601/107 1003/1589/107 -f 995/1584/108 1004/1597/108 1005/1590/108 -f 996/1582/111 1005/1599/111 1006/1591/111 -f 997/1583/112 1003/1594/112 1004/1592/112 -f 1000/1593/109 1004/1592/109 1003/1594/109 -f 1001/1596/109 1005/1590/109 1004/1597/109 -f 1002/1587/109 1006/1591/109 1005/1599/109 -f 999/1600/109 1003/1589/109 1006/1601/109 -f 1000/1593/112 999/1595/112 1007/1603/112 -f 1002/1602/107 1010/1756/107 1007/1605/107 -f 1000/1598/108 1008/1757/108 1009/1606/108 -f 1012/1607/110 1014/1613/110 1013/1608/110 -f 1017/1610/111 1025/1758/111 1026/1611/111 -f 1014/1613/107 1022/1626/107 1019/1614/107 -f 1011/1609/108 1020/1622/108 1021/1615/108 -f 1012/1607/111 1021/1624/111 1022/1616/111 -f 1013/1608/112 1019/1619/112 1020/1617/112 -f 1016/1618/109 1020/1617/109 1019/1619/109 -f 1017/1621/109 1021/1615/109 1020/1622/109 -f 1018/1612/109 1022/1616/109 1021/1624/109 -f 1015/1625/109 1019/1614/109 1022/1626/109 -f 1015/1620/112 1023/1759/112 1024/1628/112 -f 1018/1627/107 1026/1760/107 1023/1629/107 -f 1016/1623/108 1024/1761/108 1025/1630/108 -f 1028/1631/110 1030/1637/110 1029/1632/110 -f 1033/1634/111 1041/1762/111 1042/1635/111 -f 1030/1637/107 1038/1650/107 1035/1638/107 -f 1027/1633/108 1036/1646/108 1037/1639/108 -f 1028/1631/111 1037/1648/111 1038/1640/111 -f 1027/1633/112 1029/1632/112 1035/1641/112 -f 1032/1643/109 1036/1642/109 1035/1641/109 -f 1033/1645/109 1037/1639/109 1036/1646/109 -f 1034/1636/109 1038/1640/109 1037/1648/109 -f 1031/1649/109 1035/1638/109 1038/1650/109 -f 1032/1643/112 1031/1644/112 1039/1652/112 -f 1034/1651/107 1042/1763/107 1039/1654/107 -f 1032/1647/108 1040/1764/108 1041/1655/108 +f 812/1330/113 816/1332/113 811/1331/113 +f 813/1335/114 818/1333/114 814/1336/114 +f 821/1337/111 820/1338/111 819/1339/111 +f 824/1340/112 826/1341/112 823/1342/112 +f 820/1338/115 824/1340/115 819/1339/115 +f 821/1343/116 826/1341/116 822/1344/116 +f 828/1345/112 848/1346/112 845/1347/112 +f 857/1348/108 856/1349/108 858/1350/108 +f 846/1351/111 849/1352/111 827/1353/111 +f 854/1354/111 857/1348/111 851/1355/111 +f 849/1352/107 848/1346/107 850/1356/107 +f 838/1357/107 836/1358/107 834/1359/107 +f 852/1360/112 856/1349/112 853/1361/112 +f 835/1362/108 839/1363/108 843/1364/108 +f 792/1365/117 860/1277/117 794/1366/117 +f 794/1367/118 861/1368/118 793/1369/118 +f 793/1278/119 862/1274/119 791/1370/119 +f 791/1371/120 859/1272/120 792/1372/120 +f 775/1373/120 864/1290/120 776/1374/120 +f 777/1281/119 863/1288/119 775/1375/119 +f 778/1376/118 865/1377/118 777/1378/118 +f 776/1379/117 866/1285/117 778/1380/117 +f 781/1381/117 868/1299/117 779/1382/117 +f 779/1383/118 869/1384/118 780/1385/118 +f 780/1300/119 870/1297/119 782/1386/119 +f 782/1387/120 867/1295/120 781/1388/120 +f 797/1389/117 872/1307/117 795/1390/117 +f 795/1391/118 873/1392/118 796/1393/118 +f 796/1308/119 874/1305/119 798/1394/119 +f 798/1395/120 871/1266/120 797/1396/120 +f 876/1397/107 877/1398/107 875/1399/107 +f 881/1400/111 890/1401/111 882/1402/111 +f 878/1403/109 883/1404/109 877/1398/109 +f 875/1399/110 885/1405/110 876/1397/110 +f 876/1397/111 886/1406/111 878/1403/111 +f 877/1398/112 884/1407/112 875/1399/112 +f 880/1408/108 883/1409/108 879/1410/108 +f 881/1411/108 884/1412/108 880/1413/108 +f 882/1402/108 885/1414/108 881/1400/108 +f 879/1415/108 886/1416/108 882/1417/108 +f 879/1410/112 888/1418/112 880/1408/112 +f 882/1417/109 887/1419/109 879/1415/109 +f 880/1413/110 889/1420/110 881/1411/110 +f 892/1421/107 893/1422/107 891/1423/107 +f 897/1424/111 906/1425/111 898/1426/111 +f 894/1427/109 899/1428/109 893/1422/109 +f 891/1423/110 901/1429/110 892/1421/110 +f 892/1421/111 902/1430/111 894/1427/111 +f 893/1422/112 900/1431/112 891/1423/112 +f 896/1432/108 899/1433/108 895/1434/108 +f 897/1435/108 900/1436/108 896/1437/108 +f 898/1426/108 901/1438/108 897/1424/108 +f 895/1439/108 902/1440/108 898/1441/108 +f 895/1434/112 904/1442/112 896/1432/112 +f 898/1441/109 903/1443/109 895/1439/109 +f 896/1437/110 905/1444/110 897/1435/110 +f 908/1445/108 909/1446/108 907/1447/108 +f 913/1448/111 922/1449/111 914/1450/111 +f 910/1451/110 915/1452/110 909/1446/110 +f 907/1447/109 917/1453/109 908/1445/109 +f 908/1445/111 918/1454/111 910/1451/111 +f 909/1446/112 916/1455/112 907/1447/112 +f 912/1456/107 915/1457/107 911/1458/107 +f 913/1459/107 916/1460/107 912/1461/107 +f 914/1450/107 917/1462/107 913/1448/107 +f 911/1463/107 918/1464/107 914/1465/107 +f 911/1458/112 920/1466/112 912/1456/112 +f 914/1465/110 919/1467/110 911/1463/110 +f 912/1461/109 921/1468/109 913/1459/109 +f 924/1469/108 925/1470/108 923/1471/108 +f 929/1472/111 938/1473/111 930/1474/111 +f 926/1475/110 931/1476/110 925/1470/110 +f 923/1471/109 933/1477/109 924/1469/109 +f 924/1469/111 934/1478/111 926/1475/111 +f 925/1470/112 932/1479/112 923/1471/112 +f 928/1480/107 931/1481/107 927/1482/107 +f 929/1483/107 932/1484/107 928/1485/107 +f 930/1474/107 933/1486/107 929/1472/107 +f 927/1487/107 934/1488/107 930/1489/107 +f 927/1482/112 936/1490/112 928/1480/112 +f 930/1489/110 935/1491/110 927/1487/110 +f 928/1485/109 937/1492/109 929/1483/109 +f 940/1493/108 941/1494/108 939/1495/108 +f 945/1496/111 954/1497/111 946/1498/111 +f 942/1499/110 947/1500/110 941/1494/110 +f 939/1495/109 949/1501/109 940/1493/109 +f 940/1493/111 950/1502/111 942/1499/111 +f 941/1494/112 948/1503/112 939/1495/112 +f 944/1504/107 947/1505/107 943/1506/107 +f 945/1507/107 948/1508/107 944/1509/107 +f 946/1498/107 949/1510/107 945/1496/107 +f 943/1511/107 950/1512/107 946/1513/107 +f 943/1506/112 952/1514/112 944/1504/112 +f 946/1513/110 951/1515/110 943/1511/110 +f 944/1509/109 953/1516/109 945/1507/109 +f 956/1517/109 957/1518/109 955/1519/109 +f 961/1520/111 970/1521/111 962/1522/111 +f 958/1523/108 963/1524/108 957/1518/108 +f 955/1519/107 965/1525/107 956/1517/107 +f 956/1517/111 966/1526/111 958/1523/111 +f 957/1518/112 964/1527/112 955/1519/112 +f 960/1528/110 963/1529/110 959/1530/110 +f 961/1531/110 964/1532/110 960/1533/110 +f 962/1522/110 965/1534/110 961/1520/110 +f 959/1535/110 966/1536/110 962/1537/110 +f 959/1530/112 968/1538/112 960/1528/112 +f 962/1537/108 967/1539/108 959/1535/108 +f 960/1533/107 969/1540/107 961/1531/107 +f 972/1541/109 973/1542/109 971/1543/109 +f 977/1544/111 986/1545/111 978/1546/111 +f 974/1547/108 979/1548/108 973/1542/108 +f 971/1543/107 981/1549/107 972/1541/107 +f 972/1541/111 982/1550/111 974/1547/111 +f 973/1542/112 980/1551/112 971/1543/112 +f 976/1552/110 979/1553/110 975/1554/110 +f 977/1555/110 980/1556/110 976/1557/110 +f 978/1546/110 981/1558/110 977/1544/110 +f 975/1559/110 982/1560/110 978/1561/110 +f 975/1554/112 984/1562/112 976/1552/112 +f 978/1561/108 983/1563/108 975/1559/108 +f 976/1557/107 985/1564/107 977/1555/107 +f 988/1565/109 989/1566/109 987/1567/109 +f 993/1568/111 1002/1569/111 994/1570/111 +f 990/1571/108 995/1572/108 989/1566/108 +f 987/1567/107 997/1573/107 988/1565/107 +f 988/1565/111 998/1574/111 990/1571/111 +f 989/1566/112 996/1575/112 987/1567/112 +f 992/1576/110 995/1577/110 991/1578/110 +f 993/1579/110 996/1580/110 992/1581/110 +f 994/1570/110 997/1582/110 993/1568/110 +f 991/1583/110 998/1584/110 994/1585/110 +f 992/1576/112 999/1586/112 1000/1587/112 +f 994/1585/108 999/1588/108 991/1583/108 +f 992/1581/107 1001/1589/107 993/1579/107 +f 1004/1590/110 1005/1591/110 1003/1592/110 +f 1009/1593/111 1018/1594/111 1010/1595/111 +f 1006/1596/107 1011/1597/107 1005/1591/107 +f 1003/1592/108 1013/1598/108 1004/1590/108 +f 1004/1590/111 1014/1599/111 1006/1596/111 +f 1005/1591/112 1012/1600/112 1003/1592/112 +f 1008/1601/109 1011/1602/109 1007/1603/109 +f 1009/1604/109 1012/1605/109 1008/1606/109 +f 1010/1595/109 1013/1607/109 1009/1593/109 +f 1007/1608/109 1014/1609/109 1010/1610/109 +f 1008/1601/112 1015/1611/112 1016/1612/112 +f 1010/1610/107 1015/1613/107 1007/1608/107 +f 1008/1606/108 1017/1614/108 1009/1604/108 +f 1020/1615/110 1021/1616/110 1019/1617/110 +f 1025/1618/111 1034/1619/111 1026/1620/111 +f 1022/1621/107 1027/1622/107 1021/1616/107 +f 1019/1617/108 1029/1623/108 1020/1615/108 +f 1020/1615/111 1030/1624/111 1022/1621/111 +f 1021/1616/112 1028/1625/112 1019/1617/112 +f 1024/1626/109 1027/1627/109 1023/1628/109 +f 1025/1629/109 1028/1630/109 1024/1631/109 +f 1026/1620/109 1029/1632/109 1025/1618/109 +f 1023/1633/109 1030/1634/109 1026/1635/109 +f 1023/1628/112 1032/1636/112 1024/1626/112 +f 1026/1635/107 1031/1637/107 1023/1633/107 +f 1024/1631/108 1033/1638/108 1025/1629/108 +f 1036/1639/110 1037/1640/110 1035/1641/110 +f 1041/1642/111 1050/1643/111 1042/1644/111 +f 1038/1645/107 1043/1646/107 1037/1640/107 +f 1035/1641/108 1045/1647/108 1036/1639/108 +f 1036/1639/111 1046/1648/111 1038/1645/111 +f 1035/1641/112 1043/1649/112 1044/1650/112 +f 1040/1651/109 1043/1649/109 1039/1652/109 +f 1041/1653/109 1044/1654/109 1040/1655/109 +f 1042/1644/109 1045/1656/109 1041/1642/109 +f 1039/1657/109 1046/1658/109 1042/1659/109 +f 1040/1651/112 1047/1660/112 1048/1661/112 +f 1042/1659/107 1047/1662/107 1039/1657/107 +f 1040/1655/108 1049/1663/108 1041/1653/108 +f 574/997/107 571/1053/107 572/998/107 +f 576/1000/108 578/1003/108 577/1001/108 +f 578/1003/109 582/1005/109 581/1004/109 +f 582/1005/107 580/1012/107 579/1006/107 +f 580/1007/110 576/1000/110 575/1002/110 +f 581/1004/111 579/1006/111 575/1009/111 +f 578/1011/112 576/1664/112 580/1012/112 +f 584/1013/108 586/1016/108 585/1014/108 +f 586/1016/109 590/1018/109 589/1017/109 +f 590/1018/107 588/1025/107 587/1019/107 +f 588/1020/110 584/1013/110 583/1015/110 +f 589/1017/111 587/1019/111 583/1022/111 +f 586/1024/112 584/1665/112 588/1025/112 +f 592/1026/108 594/1029/108 593/1027/108 +f 594/1029/109 598/1031/109 597/1030/109 +f 598/1031/107 596/1038/107 595/1032/107 +f 596/1033/110 592/1026/110 591/1028/110 +f 597/1030/111 595/1032/111 591/1035/111 +f 594/1037/112 592/1666/112 596/1038/112 +f 600/1039/108 602/1042/108 601/1040/108 +f 602/1042/109 606/1044/109 605/1043/109 +f 606/1044/107 604/1051/107 603/1045/107 +f 604/1046/110 600/1039/110 599/1041/110 +f 605/1043/111 603/1045/111 599/1048/111 +f 602/1050/112 600/1667/112 604/1051/112 +f 573/999/111 609/1668/111 610/1052/111 +f 571/1053/112 607/1669/112 608/1054/112 +f 610/1052/108 609/1668/108 608/1055/108 +f 614/1057/107 611/1670/107 612/1058/107 +f 613/1059/111 617/1671/111 618/1060/111 +f 611/1061/112 615/1064/112 616/1062/112 +f 618/1060/108 617/1671/108 616/1062/108 +f 622/1065/109 619/1069/109 620/1066/109 +f 621/1067/111 625/1672/111 626/1068/111 +f 619/1069/112 623/1673/112 624/1070/112 +f 626/1068/110 625/1672/110 624/1071/110 +f 630/1073/109 627/1674/109 628/1074/109 +f 629/1075/111 633/1675/111 634/1076/111 +f 627/1077/112 631/1080/112 632/1078/112 +f 634/1076/110 633/1675/110 632/1078/110 +f 636/1081/107 638/1087/107 637/1082/107 +f 641/1084/111 649/1676/111 650/1085/111 +f 638/1087/109 646/1100/109 643/1088/109 +f 635/1083/110 644/1096/110 645/1089/110 +f 636/1081/111 645/1098/111 646/1090/111 +f 637/1082/112 643/1093/112 644/1091/112 +f 640/1092/108 644/1091/108 643/1093/108 +f 641/1095/108 645/1089/108 644/1096/108 +f 642/1086/108 646/1090/108 645/1098/108 +f 639/1099/108 643/1088/108 646/1100/108 +f 639/1094/112 647/1677/112 648/1102/112 +f 642/1101/109 650/1678/109 647/1103/109 +f 640/1097/110 648/1679/110 649/1104/110 +f 653/1105/111 654/1680/111 652/1106/111 +f 657/1108/112 658/1112/112 655/1109/112 +f 653/1111/108 655/1109/108 658/1112/108 +f 652/1106/107 657/1108/107 656/1110/107 +f 654/1114/109 658/1112/109 657/1108/109 +f 651/1116/110 656/1110/110 655/1109/110 +f 661/1118/111 662/1681/111 660/1119/111 +f 665/1121/112 666/1125/112 663/1122/112 +f 661/1124/108 663/1122/108 666/1125/108 +f 660/1119/107 665/1121/107 664/1123/107 +f 662/1127/109 666/1125/109 665/1121/109 +f 659/1129/110 664/1123/110 663/1122/110 +f 669/1131/111 670/1682/111 668/1132/111 +f 673/1134/112 674/1138/112 671/1135/112 +f 669/1137/108 671/1135/108 674/1138/108 +f 668/1132/107 673/1134/107 672/1136/107 +f 670/1140/109 674/1138/109 673/1134/109 +f 667/1142/110 672/1136/110 671/1135/110 +f 675/1144/111 683/1156/111 684/1145/111 +f 681/1147/112 686/1683/112 685/1148/112 +f 676/1146/107 684/1145/107 686/1150/107 +f 677/1152/109 679/1176/109 682/1153/109 +f 676/1146/110 681/1684/110 680/1155/110 +f 685/1148/109 686/1683/109 684/1145/109 +f 680/1157/108 685/1685/108 683/1156/108 +f 688/1158/109 690/1169/109 689/1159/109 +f 694/1161/110 693/1168/110 691/1162/110 +f 689/1164/111 694/1170/111 692/1165/111 +f 687/1167/108 692/1686/108 691/1162/108 +f 688/1158/112 691/1162/112 693/1168/112 +f 690/1169/107 693/1168/107 694/1170/107 +f 697/1171/110 698/1175/110 696/1172/110 +f 677/1174/108 696/1687/108 698/1175/108 +f 679/1176/112 698/1175/112 697/1171/112 +f 678/1177/111 695/1180/111 696/1178/111 +f 682/1153/107 697/1171/107 695/1180/107 +f 708/1181/112 709/1218/112 725/1182/112 +f 707/1184/112 708/1181/112 724/1185/112 +f 706/1187/112 707/1184/112 723/1188/112 +f 705/1190/112 706/1187/112 722/1191/112 +f 704/1193/112 705/1190/112 721/1194/112 +f 703/1196/112 704/1193/112 720/1197/112 +f 703/1199/112 719/1688/112 718/1200/112 +f 702/1201/112 718/1689/112 717/1202/112 +f 701/1203/112 717/1690/112 716/1204/112 +f 700/1205/112 716/1691/112 715/1206/112 +f 699/1207/112 715/1692/112 730/1208/112 +f 714/1209/112 730/1693/112 729/1210/112 +f 713/1211/112 729/1694/112 728/1212/112 +f 712/1213/112 728/1695/112 727/1214/112 +f 711/1215/112 727/1696/112 726/1216/112 +f 709/1218/112 710/1217/112 726/1219/112 +f 740/1221/111 756/1697/111 757/1222/111 +f 739/1224/111 755/1698/111 756/1225/111 +f 738/1226/111 754/1699/111 755/1227/111 +f 737/1228/111 753/1700/111 754/1229/111 +f 736/1230/111 752/1701/111 753/1231/111 +f 735/1232/111 751/1702/111 752/1233/111 +f 750/1234/111 751/1703/111 735/1235/111 +f 749/1237/111 750/1704/111 734/1236/111 +f 747/1239/111 749/1705/111 733/1238/111 +f 748/1241/111 747/1706/111 731/1240/111 +f 762/1243/111 748/1707/111 732/1242/111 +f 761/1245/111 762/1708/111 746/1244/111 +f 760/1247/111 761/1709/111 745/1246/111 +f 759/1249/111 760/1710/111 744/1248/111 +f 758/1251/111 759/1711/111 743/1250/111 +f 741/1223/111 757/1712/111 758/1253/111 +f 764/1254/112 766/1261/112 765/1255/112 +f 769/1257/107 809/1324/107 810/1258/107 +f 765/1255/108 803/1314/108 804/1260/108 +f 766/1261/109 806/1321/109 803/1262/109 +f 763/1256/110 804/1317/110 805/1263/110 +f 764/1254/107 805/1319/107 806/1264/107 +f 802/1265/108 872/1307/108 871/1266/108 +f 799/1268/107 874/1305/107 873/1269/107 +f 787/1271/108 860/1277/108 859/1272/108 +f 789/1273/109 859/1272/109 862/1274/109 +f 788/1276/110 861/1368/110 860/1277/110 +f 793/1278/112 791/1370/112 792/1279/112 +f 777/1281/112 775/1375/112 776/1282/112 +f 772/1284/110 865/1377/110 866/1285/110 +f 773/1287/109 864/1290/109 863/1288/109 +f 771/1286/108 866/1285/108 864/1290/108 +f 783/1291/107 870/1297/107 869/1292/107 +f 786/1294/108 868/1299/108 867/1295/108 +f 784/1296/109 867/1295/109 870/1297/109 +f 785/1298/110 869/1384/110 868/1299/110 +f 780/1300/112 782/1386/112 781/1301/112 +f 774/1289/107 863/1288/107 865/1303/107 +f 800/1267/109 871/1266/109 874/1305/109 +f 801/1306/110 873/1392/110 872/1307/110 +f 796/1308/112 798/1394/112 797/1309/112 +f 790/1275/107 862/1274/107 861/1311/107 +f 768/1313/111 804/1260/111 803/1314/111 +f 769/1316/111 805/1263/111 804/1317/111 +f 770/1259/111 806/1264/111 805/1319/111 +f 767/1320/111 803/1262/111 806/1321/111 +f 807/1323/111 810/1258/111 809/1324/111 +f 767/1315/108 807/1713/108 808/1326/108 +f 770/1322/109 810/1714/109 807/1327/109 +f 768/1318/110 808/1715/110 809/1328/110 +f 813/1329/111 814/1716/111 812/1330/111 +f 816/1332/112 817/1717/112 818/1333/112 +f 812/1330/113 817/1717/113 816/1332/113 +f 813/1335/114 815/1334/114 818/1333/114 +f 821/1337/111 822/1718/111 820/1338/111 +f 824/1340/112 825/1719/112 826/1341/112 +f 820/1338/115 825/1719/115 824/1340/115 +f 821/1343/116 823/1342/116 826/1341/116 +f 828/1345/112 850/1356/112 848/1346/112 +f 857/1348/108 855/1720/108 856/1349/108 +f 846/1351/111 847/1721/111 849/1352/111 +f 854/1354/111 855/1720/111 857/1348/111 +f 849/1352/107 847/1721/107 848/1346/107 +f 834/1359/107 832/1722/107 830/1723/107 +f 830/1723/107 844/1724/107 834/1359/107 +f 844/1724/107 842/1725/107 834/1359/107 +f 842/1725/107 840/1726/107 834/1359/107 +f 840/1726/107 838/1357/107 834/1359/107 +f 852/1360/112 858/1350/112 856/1349/112 +f 843/1364/108 829/1727/108 831/1728/108 +f 831/1728/108 833/1729/108 835/1362/108 +f 835/1362/108 837/1730/108 839/1363/108 +f 839/1363/108 841/1731/108 843/1364/108 +f 843/1364/108 831/1728/108 835/1362/108 +f 792/1365/117 859/1272/117 860/1277/117 +f 794/1367/118 860/1277/118 861/1368/118 +f 793/1278/119 861/1311/119 862/1274/119 +f 791/1371/120 862/1274/120 859/1272/120 +f 775/1373/120 863/1288/120 864/1290/120 +f 777/1281/119 865/1303/119 863/1288/119 +f 778/1376/118 866/1285/118 865/1377/118 +f 776/1379/117 864/1290/117 866/1285/117 +f 781/1381/117 867/1295/117 868/1299/117 +f 779/1383/118 868/1299/118 869/1384/118 +f 780/1300/119 869/1292/119 870/1297/119 +f 782/1387/120 870/1297/120 867/1295/120 +f 797/1389/117 871/1266/117 872/1307/117 +f 795/1391/118 872/1307/118 873/1392/118 +f 796/1308/119 873/1269/119 874/1305/119 +f 798/1395/120 874/1305/120 871/1266/120 +f 876/1397/107 878/1403/107 877/1398/107 +f 881/1400/111 889/1732/111 890/1401/111 +f 878/1403/109 886/1416/109 883/1404/109 +f 875/1399/110 884/1412/110 885/1405/110 +f 876/1397/111 885/1414/111 886/1406/111 +f 877/1398/112 883/1409/112 884/1407/112 +f 880/1408/108 884/1407/108 883/1409/108 +f 881/1411/108 885/1405/108 884/1412/108 +f 882/1402/108 886/1406/108 885/1414/108 +f 879/1415/108 883/1404/108 886/1416/108 +f 879/1410/112 887/1733/112 888/1418/112 +f 882/1417/109 890/1734/109 887/1419/109 +f 880/1413/110 888/1735/110 889/1420/110 +f 892/1421/107 894/1427/107 893/1422/107 +f 897/1424/111 905/1736/111 906/1425/111 +f 894/1427/109 902/1440/109 899/1428/109 +f 891/1423/110 900/1436/110 901/1429/110 +f 892/1421/111 901/1438/111 902/1430/111 +f 893/1422/112 899/1433/112 900/1431/112 +f 896/1432/108 900/1431/108 899/1433/108 +f 897/1435/108 901/1429/108 900/1436/108 +f 898/1426/108 902/1430/108 901/1438/108 +f 895/1439/108 899/1428/108 902/1440/108 +f 895/1434/112 903/1737/112 904/1442/112 +f 898/1441/109 906/1738/109 903/1443/109 +f 896/1437/110 904/1739/110 905/1444/110 +f 908/1445/108 910/1451/108 909/1446/108 +f 913/1448/111 921/1740/111 922/1449/111 +f 910/1451/110 918/1464/110 915/1452/110 +f 907/1447/109 916/1460/109 917/1453/109 +f 908/1445/111 917/1462/111 918/1454/111 +f 909/1446/112 915/1457/112 916/1455/112 +f 912/1456/107 916/1455/107 915/1457/107 +f 913/1459/107 917/1453/107 916/1460/107 +f 914/1450/107 918/1454/107 917/1462/107 +f 911/1463/107 915/1452/107 918/1464/107 +f 911/1458/112 919/1741/112 920/1466/112 +f 914/1465/110 922/1742/110 919/1467/110 +f 912/1461/109 920/1743/109 921/1468/109 +f 924/1469/108 926/1475/108 925/1470/108 +f 929/1472/111 937/1744/111 938/1473/111 +f 926/1475/110 934/1488/110 931/1476/110 +f 923/1471/109 932/1484/109 933/1477/109 +f 924/1469/111 933/1486/111 934/1478/111 +f 925/1470/112 931/1481/112 932/1479/112 +f 928/1480/107 932/1479/107 931/1481/107 +f 929/1483/107 933/1477/107 932/1484/107 +f 930/1474/107 934/1478/107 933/1486/107 +f 927/1487/107 931/1476/107 934/1488/107 +f 927/1482/112 935/1745/112 936/1490/112 +f 930/1489/110 938/1746/110 935/1491/110 +f 928/1485/109 936/1747/109 937/1492/109 +f 940/1493/108 942/1499/108 941/1494/108 +f 945/1496/111 953/1748/111 954/1497/111 +f 942/1499/110 950/1512/110 947/1500/110 +f 939/1495/109 948/1508/109 949/1501/109 +f 940/1493/111 949/1510/111 950/1502/111 +f 941/1494/112 947/1505/112 948/1503/112 +f 944/1504/107 948/1503/107 947/1505/107 +f 945/1507/107 949/1501/107 948/1508/107 +f 946/1498/107 950/1502/107 949/1510/107 +f 943/1511/107 947/1500/107 950/1512/107 +f 943/1506/112 951/1749/112 952/1514/112 +f 946/1513/110 954/1750/110 951/1515/110 +f 944/1509/109 952/1751/109 953/1516/109 +f 956/1517/109 958/1523/109 957/1518/109 +f 961/1520/111 969/1752/111 970/1521/111 +f 958/1523/108 966/1536/108 963/1524/108 +f 955/1519/107 964/1532/107 965/1525/107 +f 956/1517/111 965/1534/111 966/1526/111 +f 957/1518/112 963/1529/112 964/1527/112 +f 960/1528/110 964/1527/110 963/1529/110 +f 961/1531/110 965/1525/110 964/1532/110 +f 962/1522/110 966/1526/110 965/1534/110 +f 959/1535/110 963/1524/110 966/1536/110 +f 959/1530/112 967/1753/112 968/1538/112 +f 962/1537/108 970/1754/108 967/1539/108 +f 960/1533/107 968/1755/107 969/1540/107 +f 972/1541/109 974/1547/109 973/1542/109 +f 977/1544/111 985/1756/111 986/1545/111 +f 974/1547/108 982/1560/108 979/1548/108 +f 971/1543/107 980/1556/107 981/1549/107 +f 972/1541/111 981/1558/111 982/1550/111 +f 973/1542/112 979/1553/112 980/1551/112 +f 976/1552/110 980/1551/110 979/1553/110 +f 977/1555/110 981/1549/110 980/1556/110 +f 978/1546/110 982/1550/110 981/1558/110 +f 975/1559/110 979/1548/110 982/1560/110 +f 975/1554/112 983/1757/112 984/1562/112 +f 978/1561/108 986/1758/108 983/1563/108 +f 976/1557/107 984/1759/107 985/1564/107 +f 988/1565/109 990/1571/109 989/1566/109 +f 993/1568/111 1001/1760/111 1002/1569/111 +f 990/1571/108 998/1584/108 995/1572/108 +f 987/1567/107 996/1580/107 997/1573/107 +f 988/1565/111 997/1582/111 998/1574/111 +f 989/1566/112 995/1577/112 996/1575/112 +f 992/1576/110 996/1575/110 995/1577/110 +f 993/1579/110 997/1573/110 996/1580/110 +f 994/1570/110 998/1574/110 997/1582/110 +f 991/1583/110 995/1572/110 998/1584/110 +f 992/1576/112 991/1578/112 999/1586/112 +f 994/1585/108 1002/1761/108 999/1588/108 +f 992/1581/107 1000/1762/107 1001/1589/107 +f 1004/1590/110 1006/1596/110 1005/1591/110 +f 1009/1593/111 1017/1763/111 1018/1594/111 +f 1006/1596/107 1014/1609/107 1011/1597/107 +f 1003/1592/108 1012/1605/108 1013/1598/108 +f 1004/1590/111 1013/1607/111 1014/1599/111 +f 1005/1591/112 1011/1602/112 1012/1600/112 +f 1008/1601/109 1012/1600/109 1011/1602/109 +f 1009/1604/109 1013/1598/109 1012/1605/109 +f 1010/1595/109 1014/1599/109 1013/1607/109 +f 1007/1608/109 1011/1597/109 1014/1609/109 +f 1008/1601/112 1007/1603/112 1015/1611/112 +f 1010/1610/107 1018/1764/107 1015/1613/107 +f 1008/1606/108 1016/1765/108 1017/1614/108 +f 1020/1615/110 1022/1621/110 1021/1616/110 +f 1025/1618/111 1033/1766/111 1034/1619/111 +f 1022/1621/107 1030/1634/107 1027/1622/107 +f 1019/1617/108 1028/1630/108 1029/1623/108 +f 1020/1615/111 1029/1632/111 1030/1624/111 +f 1021/1616/112 1027/1627/112 1028/1625/112 +f 1024/1626/109 1028/1625/109 1027/1627/109 +f 1025/1629/109 1029/1623/109 1028/1630/109 +f 1026/1620/109 1030/1624/109 1029/1632/109 +f 1023/1633/109 1027/1622/109 1030/1634/109 +f 1023/1628/112 1031/1767/112 1032/1636/112 +f 1026/1635/107 1034/1768/107 1031/1637/107 +f 1024/1631/108 1032/1769/108 1033/1638/108 +f 1036/1639/110 1038/1645/110 1037/1640/110 +f 1041/1642/111 1049/1770/111 1050/1643/111 +f 1038/1645/107 1046/1658/107 1043/1646/107 +f 1035/1641/108 1044/1654/108 1045/1647/108 +f 1036/1639/111 1045/1656/111 1046/1648/111 +f 1035/1641/112 1037/1640/112 1043/1649/112 +f 1040/1651/109 1044/1650/109 1043/1649/109 +f 1041/1653/109 1045/1647/109 1044/1654/109 +f 1042/1644/109 1046/1648/109 1045/1656/109 +f 1039/1657/109 1043/1646/109 1046/1658/109 +f 1040/1651/112 1039/1652/112 1047/1660/112 +f 1042/1659/107 1050/1771/107 1047/1662/107 +f 1040/1655/108 1048/1772/108 1049/1663/108 s 1 -f 698/1179/121 731/1216/110 699/1176/110 -f 713/1186/115 744/1765/122 712/1187/122 -f 699/1176/110 732/1213/123 700/1173/123 -f 714/1183/124 745/1766/115 713/1184/115 -f 700/1173/123 733/1215/113 701/1210/113 -f 715/1180/109 746/1767/124 714/1181/124 -f 701/1210/113 734/1244/125 702/1209/125 -f 716/1177/126 747/1768/109 715/1178/109 -f 702/1209/125 735/1242/107 703/1207/107 -f 717/1174/114 748/1769/126 716/1175/126 -f 703/1207/107 736/1240/122 704/1205/122 -f 718/1211/127 749/1770/114 717/1212/114 -f 704/1205/122 737/1238/115 705/1203/115 -f 691/1199/109 723/1232/126 692/1197/126 -f 719/1688/108 750/1771/127 718/1208/127 -f 705/1203/115 738/1236/124 706/1201/124 -f 692/1197/126 725/1230/114 693/1195/114 -f 720/1687/128 751/1772/108 719/1206/108 -f 706/1201/124 724/1234/109 691/1199/109 -f 693/1195/114 726/1228/127 694/1193/127 -f 721/1686/116 752/1773/128 720/1204/128 -f 708/1683/123 740/1774/110 707/1198/110 -f 694/1193/127 727/1227/108 695/1191/108 -f 722/1685/121 753/1775/116 721/1202/116 -f 709/1682/113 739/1776/123 708/1196/123 -f 695/1188/108 728/1222/128 696/1185/128 -f 707/1684/110 754/1777/121 722/1200/121 -f 710/1681/125 741/1778/113 709/1194/113 -f 696/1185/128 729/1220/116 697/1182/116 -f 711/1680/107 742/1779/125 710/1192/125 -f 697/1182/116 730/1218/121 698/1179/121 -f 712/1189/122 743/1780/107 711/1190/107 -f 822/1781/109 823/1782/129 821/1783/109 -f 824/1784/129 825/1785/111 823/1782/129 -f 826/1786/111 827/1787/130 825/1788/111 -f 828/1789/130 829/1790/110 827/1787/130 -f 830/1791/110 831/1792/118 829/1790/110 -f 832/1793/118 833/1794/112 831/1792/118 -f 834/1795/112 835/1796/120 833/1794/112 -f 836/1797/120 821/1783/109 835/1796/120 -f 698/1179/121 730/1218/121 731/1216/110 -f 713/1186/115 745/1798/115 744/1765/122 -f 699/1176/110 731/1216/110 732/1213/123 -f 714/1183/124 746/1799/124 745/1766/115 -f 700/1173/123 732/1213/123 733/1215/113 -f 715/1180/109 747/1800/109 746/1767/124 -f 701/1210/113 733/1215/113 734/1244/125 -f 716/1177/126 748/1801/126 747/1768/109 -f 702/1209/125 734/1244/125 735/1242/107 -f 717/1174/114 749/1802/114 748/1769/126 -f 703/1207/107 735/1242/107 736/1240/122 -f 718/1211/127 750/1803/127 749/1770/114 -f 704/1205/122 736/1240/122 737/1238/115 -f 691/1199/109 724/1234/109 723/1232/126 -f 719/1688/108 751/1804/108 750/1771/127 -f 705/1203/115 737/1238/115 738/1236/124 -f 692/1197/126 723/1232/126 725/1230/114 -f 720/1687/128 752/1805/128 751/1772/108 -f 706/1201/124 738/1236/124 724/1234/109 -f 693/1195/114 725/1230/114 726/1228/127 -f 721/1686/116 753/1806/116 752/1773/128 -f 708/1683/123 739/1807/123 740/1774/110 -f 694/1193/127 726/1228/127 727/1227/108 -f 722/1685/121 754/1808/121 753/1775/116 -f 709/1682/113 741/1809/113 739/1776/123 -f 695/1188/108 727/1224/108 728/1222/128 -f 707/1684/110 740/1810/110 754/1777/121 -f 710/1681/125 742/1811/125 741/1778/113 -f 696/1185/128 728/1222/128 729/1220/116 -f 711/1680/107 743/1812/107 742/1779/125 -f 697/1182/116 729/1220/116 730/1218/121 -f 712/1189/122 744/1813/122 743/1780/107 -f 822/1781/109 824/1784/129 823/1782/129 -f 824/1784/129 826/1814/111 825/1785/111 -f 826/1786/111 828/1789/130 827/1787/130 -f 828/1789/130 830/1791/110 829/1790/110 -f 830/1791/110 832/1793/118 831/1792/118 -f 832/1793/118 834/1795/112 833/1794/112 -f 834/1795/112 836/1797/120 835/1796/120 -f 836/1797/120 822/1781/109 821/1783/109 +f 706/1187/121 739/1224/110 707/1184/110 +f 721/1194/115 752/1773/122 720/1195/122 +f 707/1184/110 740/1221/123 708/1181/123 +f 722/1191/124 753/1774/115 721/1192/115 +f 708/1181/123 741/1223/113 709/1218/113 +f 723/1188/109 754/1775/124 722/1189/124 +f 709/1218/113 742/1252/125 710/1217/125 +f 724/1185/126 755/1776/109 723/1186/109 +f 710/1217/125 743/1250/107 711/1215/107 +f 725/1182/114 756/1777/126 724/1183/126 +f 711/1215/107 744/1248/122 712/1213/122 +f 726/1219/127 757/1778/114 725/1220/114 +f 712/1213/122 745/1246/115 713/1211/115 +f 699/1207/109 731/1240/126 700/1205/126 +f 727/1696/108 758/1779/127 726/1216/127 +f 713/1211/115 746/1244/124 714/1209/124 +f 700/1205/126 733/1238/114 701/1203/114 +f 728/1695/128 759/1780/108 727/1214/108 +f 714/1209/124 732/1242/109 699/1207/109 +f 701/1203/114 734/1236/127 702/1201/127 +f 729/1694/116 760/1781/128 728/1212/128 +f 716/1691/123 748/1782/110 715/1206/110 +f 702/1201/127 735/1235/108 703/1199/108 +f 730/1693/121 761/1783/116 729/1210/116 +f 717/1690/113 747/1784/123 716/1204/123 +f 703/1196/108 736/1230/128 704/1193/128 +f 715/1692/110 762/1785/121 730/1208/121 +f 718/1689/125 749/1786/113 717/1202/113 +f 704/1193/128 737/1228/116 705/1190/116 +f 719/1688/107 750/1787/125 718/1200/125 +f 705/1190/116 738/1226/121 706/1187/121 +f 720/1197/122 751/1788/107 719/1198/107 +f 830/1789/109 831/1790/129 829/1791/109 +f 832/1792/129 833/1793/111 831/1790/129 +f 834/1794/111 835/1795/130 833/1796/111 +f 836/1797/130 837/1798/110 835/1795/130 +f 838/1799/110 839/1800/118 837/1798/110 +f 840/1801/118 841/1802/112 839/1800/118 +f 842/1803/112 843/1804/120 841/1802/112 +f 844/1805/120 829/1791/109 843/1804/120 +f 706/1187/121 738/1226/121 739/1224/110 +f 721/1194/115 753/1806/115 752/1773/122 +f 707/1184/110 739/1224/110 740/1221/123 +f 722/1191/124 754/1807/124 753/1774/115 +f 708/1181/123 740/1221/123 741/1223/113 +f 723/1188/109 755/1808/109 754/1775/124 +f 709/1218/113 741/1223/113 742/1252/125 +f 724/1185/126 756/1809/126 755/1776/109 +f 710/1217/125 742/1252/125 743/1250/107 +f 725/1182/114 757/1810/114 756/1777/126 +f 711/1215/107 743/1250/107 744/1248/122 +f 726/1219/127 758/1811/127 757/1778/114 +f 712/1213/122 744/1248/122 745/1246/115 +f 699/1207/109 732/1242/109 731/1240/126 +f 727/1696/108 759/1812/108 758/1779/127 +f 713/1211/115 745/1246/115 746/1244/124 +f 700/1205/126 731/1240/126 733/1238/114 +f 728/1695/128 760/1813/128 759/1780/108 +f 714/1209/124 746/1244/124 732/1242/109 +f 701/1203/114 733/1238/114 734/1236/127 +f 729/1694/116 761/1814/116 760/1781/128 +f 716/1691/123 747/1815/123 748/1782/110 +f 702/1201/127 734/1236/127 735/1235/108 +f 730/1693/121 762/1816/121 761/1783/116 +f 717/1690/113 749/1817/113 747/1784/123 +f 703/1196/108 735/1232/108 736/1230/128 +f 715/1692/110 748/1818/110 762/1785/121 +f 718/1689/125 750/1819/125 749/1786/113 +f 704/1193/128 736/1230/128 737/1228/116 +f 719/1688/107 751/1820/107 750/1787/125 +f 705/1190/116 737/1228/116 738/1226/121 +f 720/1197/122 752/1821/122 751/1788/107 +f 830/1789/109 832/1792/129 831/1790/129 +f 832/1792/129 834/1822/111 833/1793/111 +f 834/1794/111 836/1797/130 835/1795/130 +f 836/1797/130 838/1799/110 837/1798/110 +f 838/1799/110 840/1801/118 839/1800/118 +f 840/1801/118 842/1803/112 841/1802/112 +f 842/1803/112 844/1805/120 843/1804/120 +f 844/1805/120 830/1789/109 829/1791/109 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index d7c59ae2c..2d472a53a 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -68,6 +68,9 @@ "block.motor": {"category": "block", "sounds": [{"name": "block/motor", "stream": false}]}, "block.engine": {"category": "block", "sounds": [{"name": "block/engine", "stream": false}]}, "block.chemicalPlant": {"category": "block", "sounds": [{"name": "block/chemicalPlant", "stream": false}]}, + "block.assemblerStrike": {"category": "block", "sounds": ["block/assemblerStrike1", "block/assemblerStrike2"]}, + "block.assemblerStart": {"category": "block", "sounds": [{"name": "block/assemblerStart", "stream": false}]}, + "block.assemblerStop": {"category": "block", "sounds": [{"name": "block/assemblerStop", "stream": false}]}, "door.TransitionSealOpen": {"category": "block", "sounds": [{"name": "block/door/transition_seal_open", "stream": true}]}, "door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/assemblerStart.ogg b/src/main/resources/assets/hbm/sounds/block/assemblerStart.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5761f14fe77c5c6b7e598febb16dbf24a226a59d GIT binary patch literal 5915 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 F{RhyDxEBBb literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/sounds/block/assemblerStop.ogg b/src/main/resources/assets/hbm/sounds/block/assemblerStop.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a6e656e9134fcc8bfcd3b5ffb4208a93f842b0d9 GIT binary patch literal 6581 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/sounds/block/assemblerStrike1.ogg b/src/main/resources/assets/hbm/sounds/block/assemblerStrike1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6ef5dcf3885957e0163b91e9c94e2c27ab2349cc GIT binary patch literal 7855 zcmahuXIPWXvKx9gR1pFMBvJ$=^nge}DG5Cgs-YJVQKSjh2%#$?(!{_AQlyB2LMVz- z0|L@}SCpzE7C`aS`v%WZBV3e4T~x zhDpN0&jx$?hcG%|;4-6v(vLq?9n6YB`R~M_gh4GTR~CjZ==Xmle&#=Hl%P>Z|DcnH ztb+ZJr~N(ccbOw`NL3ZIh6-9m11bOJF6G}@fgzLx^x2;E4L$D>?4xIU_Dm$w_H5W0 zZ=~_rU_T$E_92x$5W;Z-J0m?+6%{RIw2HE-28{L3d@_c|>|p>4fNY4UqH$4(2n8-? zXuWR%Vb~k+exIQ^e-uL1+@%{8k|JH0XBh7yf2}`-2p9x$1`$G(L<0_K3QEs0HCj#& zg5ohypFg7yZun1OggFU~8gNKZ7F4u(qTgw6BPd1~M>y2CjHK)_tjmsmfPs)@HB7Ce z*)YopN{f}Z_Ewiw0FAVTEN9I^(cDbZ{OouU+D z14sfkOq~#=+n_{@qKM&;q9E11g+U4cdH3WK@5yt)#U68kP5|Io8=;PKh?lnzFRKvT z9K24fjD6#P@Jtg6O_Sf6rph{{qIUCQLYY$cceA)Oaj0DxRCNlMIVm)Sw8q)i6k&5nx zpnFs&o@@wjiQ1Ou#PtV~tBUN;R%G;@>s@iD^3x&cKt*Iq_Kg|{Vy*B`&Ni!pAk+Ft z!d){)UkHQMZn4_Ff}jdAnk9|(8F%~JA;^lpGE0U38)X-7SIN+NvGCX%9@7dOgG(oo z#{8aQsw)Ot%PO2=(Nx3Lf#s8hX*wLJ^m7Ef+#iKA0W61fj1a-}pTaXr; zH6n)jjAev5)n0ZPk0EVco`Ldqn1^GAkJJCjf0hoNKO|)Ae-@%Z7Y*sbEX$_B|5+xq zp&&@eWY^wsk7dmUWnT>{S$$Er64bL1G8$4R4hWNMv;u83eTFnhwwffOeV{`|pbIT* zD${3b>+;-xWD@)C5(NOzN!_oIDx;9Ppq(s>!=CI^1Xwo4iA;PWpS+-*DvL`+`KS6t zW|Z8?Ub&O2ShkA-;0zQ-N-T~@ER9GkiAY|KPd#}jqog$ZU{~?`hKFnaEpzW0xGVsn zvL?Z@CInd{0tD=8m(0V^E}|7JYZR>1J*fU?jRS&ukU||o|6CgX+5iA}URDZq4!Dz&m_}`Mnkh+B+q*zYIfo(!idX-C3aGc6niSli-%LD^

qU_ms2`=6_#fQ*xnhDHY%vZuOk4eWM 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 Date: Sun, 18 May 2025 21:37:41 +0200 Subject: [PATCH 056/491] i have a headache --- changelog | 3 +- .../hbm/render/item/ItemRenderLibrary.java | 3 +- .../hbm/render/tileentity/RenderBreeder.java | 2 - .../machine/albion/TileEntityPASource.java | 37 ++++++++++--------- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/changelog b/changelog index 76500e081..947d5839a 100644 --- a/changelog +++ b/changelog @@ -43,4 +43,5 @@ * Fixed artillery shells not playing the explosion animation when directly impacting entities * Fixed bauxite and malachite vein toggles being on backwards * Fixed pneumatic tube order settings not saving -* Fixed crash caused by launching ABMs with blank target designators \ No newline at end of file +* Fixed crash caused by launching ABMs with blank target designators +* Fixed particle source throwing errors when trying to save nonexistant particles diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index 2feabfbe3..b61f4ddcd 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -97,11 +97,10 @@ public class ItemRenderLibrary { renderers.put(Item.getItemFromBlock(ModBlocks.machine_reactor_breeding), new ItemRenderBase() { public void renderInventory() { - GL11.glTranslated(0, -4, 0); + GL11.glTranslated(0, -4.5, 0); GL11.glScaled(4.5, 4.5, 4.5); } public void renderCommon() { - GL11.glScaled(0.5, 0.5, 0.5); GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glDisable(GL11.GL_CULL_FACE); bindTexture(ResourceManager.breeder_tex); ResourceManager.breeder.renderAll(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderBreeder.java b/src/main/java/com/hbm/render/tileentity/RenderBreeder.java index 25c8659b7..1e48fcc2f 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBreeder.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBreeder.java @@ -40,8 +40,6 @@ public class RenderBreeder extends TileEntitySpecialRenderer { GL11.glPopMatrix(); } - GL11.glScaled(0.5, 0.5, 0.5); - bindTexture(ResourceManager.breeder_tex); GL11.glShadeModel(GL11.GL_SMOOTH); diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java index 151817494..1128ff67f 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java @@ -236,23 +236,26 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - NBTTagCompound particleTag = new NBTTagCompound(); - particleTag.setInteger("x", particle.x); - particleTag.setInteger("y", particle.y); - particleTag.setInteger("z", particle.z); - particleTag.setByte("dir", (byte) particle.dir.ordinal()); - particleTag.setInteger("momentum", particle.momentum); - particleTag.setInteger("defocus", particle.defocus); - particleTag.setInteger("dist", particle.distanceTraveled); - - NBTTagCompound inputTag1 = new NBTTagCompound(); - NBTTagCompound inputTag2 = new NBTTagCompound(); - particle.input1.writeToNBT(inputTag1); - particle.input2.writeToNBT(inputTag2); - - particleTag.setTag("input1", inputTag1); - particleTag.setTag("input2", inputTag2); - nbt.setTag("particle", particleTag); + + if(particle != null) { + NBTTagCompound particleTag = new NBTTagCompound(); + particleTag.setInteger("x", particle.x); + particleTag.setInteger("y", particle.y); + particleTag.setInteger("z", particle.z); + particleTag.setByte("dir", (byte) particle.dir.ordinal()); + particleTag.setInteger("momentum", particle.momentum); + particleTag.setInteger("defocus", particle.defocus); + particleTag.setInteger("dist", particle.distanceTraveled); + + NBTTagCompound inputTag1 = new NBTTagCompound(); + NBTTagCompound inputTag2 = new NBTTagCompound(); + particle.input1.writeToNBT(inputTag1); + particle.input2.writeToNBT(inputTag2); + + particleTag.setTag("input1", inputTag1); + particleTag.setTag("input2", inputTag2); + nbt.setTag("particle", particleTag); + } } @Override From fa25d17a457426826b0ac6f53835e92207731f6d Mon Sep 17 00:00:00 2001 From: pheo Date: Sun, 18 May 2025 22:16:59 +0100 Subject: [PATCH 057/491] fixed shading and green lightning in the breeder my tummy hurt --- .../hbm/render/tileentity/RenderBreeder.java | 2 +- .../assets/hbm/models/reactors/breeder.obj | 626 ++++++++---------- 2 files changed, 277 insertions(+), 351 deletions(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderBreeder.java b/src/main/java/com/hbm/render/tileentity/RenderBreeder.java index 1e48fcc2f..7c09e60fe 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBreeder.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBreeder.java @@ -36,7 +36,7 @@ public class RenderBreeder extends TileEntitySpecialRenderer { for(int i = 0; i < 3; i++) { GL11.glPushMatrix(); GL11.glRotatef((float) (Math.PI * i), 0F, 1F, 0F); - RenderSparks.renderSpark((int) ((System.currentTimeMillis() % 10000) / 100 + i), 0, 1.875, 0, 0.15F, 3, 4, 0x00ff00, 0xffffff); + RenderSparks.renderSpark((int) ((System.currentTimeMillis() % 10000) / 100 + i), 0, 1.5625, 0, 0.15F, 3, 4, 0x00ff00, 0xffffff); GL11.glPopMatrix(); } diff --git a/src/main/resources/assets/hbm/models/reactors/breeder.obj b/src/main/resources/assets/hbm/models/reactors/breeder.obj index c96c81eb6..44261e883 100644 --- a/src/main/resources/assets/hbm/models/reactors/breeder.obj +++ b/src/main/resources/assets/hbm/models/reactors/breeder.obj @@ -1,6 +1,6 @@ # Blender v2.79 (sub 7) OBJ File: 'breeding_reactor.blend' # www.blender.org -mtllib breeding_reactor.mtl +mtllib breeding_reactor_fixed.mtl o Cube_Cube.001 v -0.437500 0.437500 -0.437500 v -0.437500 0.437500 -0.500000 @@ -82,30 +82,6 @@ v -0.500000 2.687499 -0.500000 v -0.437500 2.687499 -0.437500 v -0.500000 2.749999 -0.500000 v -0.437500 0.500000 0.437500 -v -0.000000 1.250000 -0.482963 -v 0.241481 1.250000 -0.418258 -v 0.418258 1.250000 -0.241481 -v 0.482963 1.250000 0.000000 -v 0.418258 1.250000 0.241482 -v 0.241482 1.250000 0.418258 -v 0.000000 1.250000 0.482963 -v -0.241481 1.250000 0.418258 -v -0.418258 1.250000 0.241482 -v -0.482963 1.250000 0.000000 -v -0.418258 1.250000 -0.241481 -v -0.241482 1.250000 -0.418258 -v -0.000000 1.875000 -0.482963 -v 0.241481 1.875000 -0.418258 -v 0.418258 1.875000 -0.241481 -v 0.482963 1.875000 0.000000 -v 0.418258 1.875000 0.241482 -v 0.241482 1.875000 0.418258 -v 0.000000 1.875000 0.482963 -v -0.241481 1.875000 0.418258 -v -0.418258 1.875000 0.241482 -v -0.482963 1.875000 0.000000 -v -0.418258 1.875000 -0.241481 -v -0.241482 1.875000 -0.418258 v -0.187500 0.625000 0.250000 v -0.187500 3.250000 0.250000 v -0.250000 0.625000 0.250000 @@ -198,22 +174,15 @@ v -0.000000 1.250000 -0.482963 v 0.241481 1.250000 -0.418258 v 0.418258 1.250000 -0.241481 v 0.482963 1.250000 0.000000 -v 0.418258 1.250000 0.241482 v 0.241482 1.250000 0.418258 v 0.000000 1.250000 0.482963 -v -0.241481 1.250000 0.418258 v -0.418258 1.250000 0.241482 v -0.482963 1.250000 0.000000 -v -0.418258 1.250000 -0.241481 v -0.241482 1.250000 -0.418258 v -0.000000 1.875000 -0.482963 v 0.241481 1.875000 -0.418258 v 0.418258 1.875000 -0.241481 v 0.482963 1.875000 0.000000 -v 0.418258 1.875000 0.241482 -v 0.241482 1.875000 0.418258 -v 0.000000 1.875000 0.482963 -v -0.241481 1.875000 0.418258 v -0.418258 1.875000 0.241482 v -0.482963 1.875000 0.000000 v -0.418258 1.875000 -0.241481 @@ -242,6 +211,13 @@ v -0.418258 0.375000 -0.241481 v -0.418258 0.625000 -0.241481 v -0.241482 0.375000 -0.418258 v -0.241482 0.625000 -0.418258 +v 0.418258 1.250000 0.241482 +v -0.241481 1.250000 0.418258 +v -0.418258 1.250000 -0.241481 +v 0.418258 1.875000 0.241482 +v 0.241482 1.875000 0.418258 +v 0.000000 1.875000 0.482963 +v -0.241481 1.875000 0.418258 vt 0.196262 0.875000 vt 0.327103 0.854167 vt 0.327103 0.875000 @@ -596,31 +572,6 @@ vt 0.905029 0.947544 vt 0.869675 0.968591 vt 0.808440 0.890042 vt 0.808440 0.732944 -vt 0.598131 0.604167 -vt 0.560748 0.395833 -vt 0.598131 0.395833 -vt 0.635514 0.604167 -vt 0.635514 0.395833 -vt 0.672897 0.604167 -vt 0.672897 0.395833 -vt 0.710280 0.604167 -vt 0.710280 0.395833 -vt 0.747664 0.604167 -vt 0.747664 0.395833 -vt 0.785047 0.604167 -vt 0.785047 0.395833 -vt 0.373832 0.604167 -vt 0.336449 0.395833 -vt 0.373832 0.395833 -vt 0.411215 0.604167 -vt 0.411215 0.395833 -vt 0.448598 0.604167 -vt 0.448598 0.395833 -vt 0.485981 0.604167 -vt 0.485981 0.395833 -vt 0.523364 0.604167 -vt 0.523364 0.395833 -vt 0.560748 0.604167 vt 0.560748 0.979167 vt 0.523364 0.895833 vt 0.560748 0.895833 @@ -721,10 +672,9 @@ vt 0.635514 0.104167 vt 0.635514 0.187500 vt 0.598131 0.104167 vt 0.598131 0.187500 -vt 0.336449 0.604167 +vt 0.336449 0.395833 vt 0.336449 0.979167 vt 0.336449 0.812500 -vt 0.336449 0.395833 vt 0.336449 0.187500 vn 0.0000 -1.0000 -0.0000 vn 0.0000 -0.0000 1.0000 @@ -736,38 +686,14 @@ vn -0.7071 0.0000 0.7071 vn -0.7071 0.0000 -0.7071 vn 0.7071 0.0000 -0.7071 vn 0.7071 0.0000 0.7071 -vn -0.5000 0.0000 -0.8660 -vn -0.8660 0.0000 -0.5000 -vn -0.8660 0.0000 0.5000 -vn -0.5000 0.0000 0.8660 -vn 0.5000 0.0000 0.8660 -vn 0.8660 0.0000 0.5000 -vn 0.8660 0.0000 -0.5000 vn 0.5000 0.0000 -0.8660 -vn 0.0000 0.6532 -0.7571 -vn 0.3786 -0.6532 -0.6557 -vn 0.0000 -0.6532 -0.7571 -vn 0.3786 0.6532 -0.6557 -vn 0.6557 -0.6532 -0.3786 -vn 0.6557 0.6532 -0.3786 -vn 0.7571 -0.6532 0.0000 -vn 0.7571 0.6532 0.0000 -vn 0.6557 -0.6532 0.3786 -vn 0.6557 0.6532 0.3786 -vn 0.3786 -0.6532 0.6557 -vn 0.3786 0.6532 0.6557 -vn 0.0000 -0.6532 0.7571 -vn 0.0000 0.6532 0.7571 -vn -0.3786 -0.6532 0.6557 -vn -0.3786 0.6532 0.6557 -vn -0.6557 -0.6532 0.3786 -vn -0.6557 0.6532 0.3786 -vn -0.7571 -0.6532 0.0000 -vn -0.7571 0.6532 0.0000 -vn -0.6557 -0.6532 -0.3786 -vn -0.6557 0.6532 -0.3786 -vn -0.3786 -0.6532 -0.6557 -vn -0.3786 0.6532 -0.6557 +vn 0.8660 0.0000 -0.5000 +vn 0.8660 0.0000 0.5000 +vn 0.5000 0.0000 0.8660 +vn -0.5000 0.0000 0.8660 +vn -0.8660 0.0000 0.5000 +vn -0.8660 0.0000 -0.5000 +vn -0.5000 0.0000 -0.8660 usemtl None s off f 78/1/1 7/2/1 39/3/1 @@ -858,44 +784,44 @@ f 73/153/2 78/154/2 66/155/2 f 4/156/3 67/157/3 5/158/3 f 66/155/6 79/159/6 77/149/6 f 3/150/4 79/159/4 4/156/4 -f 106/160/2 107/161/2 105/162/2 -f 108/163/6 111/164/6 107/161/6 -f 112/165/4 109/166/4 111/164/4 -f 110/167/5 105/162/5 109/168/5 -f 111/164/1 105/169/1 107/161/1 -f 108/163/3 110/170/3 112/165/3 -f 114/171/6 115/172/6 113/173/6 -f 116/174/4 119/175/4 115/172/4 -f 120/176/5 117/177/5 119/175/5 -f 118/178/2 113/173/2 117/179/2 -f 119/175/1 113/180/1 115/172/1 -f 116/174/3 118/181/3 120/176/3 -f 122/182/4 123/183/4 121/184/4 -f 124/185/5 127/186/5 123/183/5 -f 128/187/2 125/188/2 127/186/2 -f 126/189/6 121/184/6 125/190/6 -f 127/186/1 121/191/1 123/183/1 -f 124/185/3 126/192/3 128/187/3 -f 130/193/5 131/194/5 129/195/5 -f 132/196/2 135/197/2 131/194/2 -f 136/198/6 133/199/6 135/197/6 -f 134/200/4 129/195/4 133/201/4 -f 135/197/1 129/202/1 131/194/1 -f 132/196/3 134/203/3 136/198/3 -f 138/204/7 139/205/7 137/206/7 -f 140/207/8 143/208/8 139/205/8 -f 144/209/9 141/210/9 143/208/9 -f 142/211/10 137/206/10 141/212/10 -f 139/205/1 141/213/1 137/214/1 -f 140/207/3 142/215/3 144/209/3 -f 154/216/3 150/217/3 166/218/3 -f 159/219/1 163/220/1 167/221/1 -f 178/222/3 174/223/3 190/224/3 -f 183/225/1 187/226/1 191/227/1 -f 194/228/3 204/229/3 200/230/3 -f 215/231/3 213/232/3 209/233/3 -f 226/234/3 222/235/3 238/236/3 -f 231/237/1 235/238/1 239/239/1 +f 82/160/2 83/161/2 81/162/2 +f 84/163/6 87/164/6 83/161/6 +f 88/165/4 85/166/4 87/164/4 +f 86/167/5 81/162/5 85/168/5 +f 87/164/1 81/169/1 83/161/1 +f 84/163/3 86/170/3 88/165/3 +f 90/171/6 91/172/6 89/173/6 +f 92/174/4 95/175/4 91/172/4 +f 96/176/5 93/177/5 95/175/5 +f 94/178/2 89/173/2 93/179/2 +f 95/175/1 89/180/1 91/172/1 +f 92/174/3 94/181/3 96/176/3 +f 98/182/4 99/183/4 97/184/4 +f 100/185/5 103/186/5 99/183/5 +f 104/187/2 101/188/2 103/186/2 +f 102/189/6 97/184/6 101/190/6 +f 103/186/1 97/191/1 99/183/1 +f 100/185/3 102/192/3 104/187/3 +f 106/193/5 107/194/5 105/195/5 +f 108/196/2 111/197/2 107/194/2 +f 112/198/6 109/199/6 111/197/6 +f 110/200/4 105/195/4 109/201/4 +f 111/197/1 105/202/1 107/194/1 +f 108/196/3 110/203/3 112/198/3 +f 114/204/7 115/205/7 113/206/7 +f 116/207/8 119/208/8 115/205/8 +f 120/209/9 117/210/9 119/208/9 +f 118/211/10 113/206/10 117/212/10 +f 115/205/1 117/213/1 113/214/1 +f 116/207/3 118/215/3 120/209/3 +f 130/216/3 126/217/3 142/218/3 +f 135/219/1 139/220/1 143/221/1 +f 154/222/3 150/223/3 166/224/3 +f 159/225/1 163/226/1 167/227/1 +f 170/228/3 177/229/3 211/230/3 +f 184/231/3 182/232/3 213/233/3 +f 195/234/3 191/235/3 207/236/3 +f 200/237/1 204/238/1 208/239/1 f 78/1/1 3/13/1 7/2/1 f 78/4/2 39/240/2 24/5/2 f 1/7/2 13/241/2 19/8/2 @@ -984,226 +910,226 @@ f 73/153/2 76/267/2 78/154/2 f 4/156/3 79/159/3 67/157/3 f 66/155/6 67/268/6 79/159/6 f 3/150/4 77/149/4 79/159/4 -f 106/160/2 108/163/2 107/161/2 -f 108/163/6 112/165/6 111/164/6 -f 112/165/4 110/269/4 109/166/4 -f 110/167/5 106/160/5 105/162/5 -f 111/164/1 109/270/1 105/169/1 -f 108/163/3 106/271/3 110/170/3 -f 114/171/6 116/174/6 115/172/6 -f 116/174/4 120/176/4 119/175/4 -f 120/176/5 118/272/5 117/177/5 -f 118/178/2 114/171/2 113/173/2 -f 119/175/1 117/273/1 113/180/1 -f 116/174/3 114/274/3 118/181/3 -f 122/182/4 124/185/4 123/183/4 -f 124/185/5 128/187/5 127/186/5 -f 128/187/2 126/275/2 125/188/2 -f 126/189/6 122/182/6 121/184/6 -f 127/186/1 125/276/1 121/191/1 -f 124/185/3 122/277/3 126/192/3 -f 130/193/5 132/196/5 131/194/5 -f 132/196/2 136/198/2 135/197/2 -f 136/198/6 134/278/6 133/199/6 -f 134/200/4 130/193/4 129/195/4 -f 135/197/1 133/279/1 129/202/1 -f 132/196/3 130/280/3 134/203/3 -f 138/204/7 140/207/7 139/205/7 -f 140/207/8 144/209/8 143/208/8 -f 144/209/9 142/281/9 141/210/9 -f 142/211/10 138/204/10 137/206/10 -f 139/205/1 143/208/1 141/213/1 -f 140/207/3 138/282/3 142/215/3 -f 150/217/3 148/283/3 146/284/3 -f 146/284/3 168/285/3 166/218/3 -f 166/218/3 164/286/3 162/287/3 -f 162/287/3 160/288/3 166/218/3 -f 160/288/3 158/289/3 166/218/3 -f 158/289/3 156/290/3 154/216/3 -f 154/216/3 152/291/3 150/217/3 -f 150/217/3 146/284/3 166/218/3 -f 158/289/3 154/216/3 166/218/3 -f 167/221/1 145/292/1 147/293/1 -f 147/293/1 149/294/1 151/295/1 -f 151/295/1 153/296/1 155/297/1 -f 155/297/1 157/298/1 151/295/1 -f 157/298/1 159/219/1 151/295/1 -f 159/219/1 161/299/1 163/220/1 -f 163/220/1 165/300/1 167/221/1 -f 167/221/1 147/293/1 159/219/1 -f 147/293/1 151/295/1 159/219/1 -f 174/223/3 172/301/3 170/302/3 -f 170/302/3 192/303/3 190/224/3 -f 190/224/3 188/304/3 186/305/3 -f 186/305/3 184/306/3 190/224/3 -f 184/306/3 182/307/3 190/224/3 -f 182/307/3 180/308/3 178/222/3 -f 178/222/3 176/309/3 174/223/3 -f 174/223/3 170/302/3 190/224/3 -f 182/307/3 178/222/3 190/224/3 -f 191/227/1 169/310/1 171/311/1 -f 171/311/1 173/312/1 175/313/1 -f 175/313/1 177/314/1 179/315/1 -f 179/315/1 181/316/1 175/313/1 -f 181/316/1 183/225/1 175/313/1 -f 183/225/1 185/317/1 187/226/1 -f 187/226/1 189/318/1 191/227/1 -f 191/227/1 171/311/1 183/225/1 -f 171/311/1 175/313/1 183/225/1 -f 204/229/3 203/319/3 202/320/3 -f 202/320/3 201/321/3 200/230/3 -f 200/230/3 199/322/3 196/323/3 -f 199/322/3 198/324/3 196/323/3 -f 198/324/3 197/325/3 196/323/3 -f 196/323/3 195/326/3 194/228/3 -f 194/228/3 193/327/3 204/229/3 -f 204/229/3 202/320/3 200/230/3 -f 196/323/3 194/228/3 200/230/3 -f 205/328/3 216/329/3 215/231/3 -f 215/231/3 214/330/3 213/232/3 -f 213/232/3 212/331/3 209/233/3 -f 212/331/3 211/332/3 209/233/3 -f 211/332/3 210/333/3 209/233/3 -f 209/233/3 208/334/3 207/335/3 -f 207/335/3 206/336/3 209/233/3 -f 206/336/3 205/328/3 209/233/3 -f 205/328/3 215/231/3 209/233/3 -f 222/235/3 220/337/3 218/338/3 -f 218/338/3 240/339/3 238/236/3 -f 238/236/3 236/340/3 234/341/3 -f 234/341/3 232/342/3 238/236/3 -f 232/342/3 230/343/3 238/236/3 -f 230/343/3 228/344/3 226/234/3 -f 226/234/3 224/345/3 222/235/3 -f 222/235/3 218/338/3 238/236/3 -f 230/343/3 226/234/3 238/236/3 -f 239/239/1 217/346/1 219/347/1 -f 219/347/1 221/348/1 223/349/1 -f 223/349/1 225/350/1 227/351/1 -f 227/351/1 229/352/1 223/349/1 -f 229/352/1 231/237/1 223/349/1 -f 231/237/1 233/353/1 235/238/1 -f 235/238/1 237/354/1 239/239/1 -f 239/239/1 219/347/1 231/237/1 -f 219/347/1 223/349/1 231/237/1 +f 82/160/2 84/163/2 83/161/2 +f 84/163/6 88/165/6 87/164/6 +f 88/165/4 86/269/4 85/166/4 +f 86/167/5 82/160/5 81/162/5 +f 87/164/1 85/270/1 81/169/1 +f 84/163/3 82/271/3 86/170/3 +f 90/171/6 92/174/6 91/172/6 +f 92/174/4 96/176/4 95/175/4 +f 96/176/5 94/272/5 93/177/5 +f 94/178/2 90/171/2 89/173/2 +f 95/175/1 93/273/1 89/180/1 +f 92/174/3 90/274/3 94/181/3 +f 98/182/4 100/185/4 99/183/4 +f 100/185/5 104/187/5 103/186/5 +f 104/187/2 102/275/2 101/188/2 +f 102/189/6 98/182/6 97/184/6 +f 103/186/1 101/276/1 97/191/1 +f 100/185/3 98/277/3 102/192/3 +f 106/193/5 108/196/5 107/194/5 +f 108/196/2 112/198/2 111/197/2 +f 112/198/6 110/278/6 109/199/6 +f 110/200/4 106/193/4 105/195/4 +f 111/197/1 109/279/1 105/202/1 +f 108/196/3 106/280/3 110/203/3 +f 114/204/7 116/207/7 115/205/7 +f 116/207/8 120/209/8 119/208/8 +f 120/209/9 118/281/9 117/210/9 +f 118/211/10 114/204/10 113/206/10 +f 115/205/1 119/208/1 117/213/1 +f 116/207/3 114/282/3 118/215/3 +f 126/217/3 124/283/3 122/284/3 +f 122/284/3 144/285/3 142/218/3 +f 142/218/3 140/286/3 138/287/3 +f 138/287/3 136/288/3 142/218/3 +f 136/288/3 134/289/3 142/218/3 +f 134/289/3 132/290/3 130/216/3 +f 130/216/3 128/291/3 126/217/3 +f 126/217/3 122/284/3 142/218/3 +f 134/289/3 130/216/3 142/218/3 +f 143/221/1 121/292/1 123/293/1 +f 123/293/1 125/294/1 127/295/1 +f 127/295/1 129/296/1 131/297/1 +f 131/297/1 133/298/1 127/295/1 +f 133/298/1 135/219/1 127/295/1 +f 135/219/1 137/299/1 139/220/1 +f 139/220/1 141/300/1 143/221/1 +f 143/221/1 123/293/1 135/219/1 +f 123/293/1 127/295/1 135/219/1 +f 150/223/3 148/301/3 146/302/3 +f 146/302/3 168/303/3 166/224/3 +f 166/224/3 164/304/3 162/305/3 +f 162/305/3 160/306/3 166/224/3 +f 160/306/3 158/307/3 166/224/3 +f 158/307/3 156/308/3 154/222/3 +f 154/222/3 152/309/3 150/223/3 +f 150/223/3 146/302/3 166/224/3 +f 158/307/3 154/222/3 166/224/3 +f 167/227/1 145/310/1 147/311/1 +f 147/311/1 149/312/1 151/313/1 +f 151/313/1 153/314/1 155/315/1 +f 155/315/1 157/316/1 151/313/1 +f 157/316/1 159/225/1 151/313/1 +f 159/225/1 161/317/1 163/226/1 +f 163/226/1 165/318/1 167/227/1 +f 167/227/1 147/311/1 159/225/1 +f 147/311/1 151/313/1 159/225/1 +f 177/229/3 212/319/3 176/320/3 +f 176/320/3 175/321/3 211/230/3 +f 211/230/3 174/322/3 172/323/3 +f 174/322/3 173/324/3 172/323/3 +f 173/324/3 210/325/3 172/323/3 +f 172/323/3 171/326/3 170/228/3 +f 170/228/3 169/327/3 177/229/3 +f 177/229/3 176/320/3 211/230/3 +f 172/323/3 170/228/3 211/230/3 +f 178/328/3 185/329/3 184/231/3 +f 184/231/3 183/330/3 182/232/3 +f 182/232/3 216/331/3 213/233/3 +f 216/331/3 215/332/3 213/233/3 +f 215/332/3 214/333/3 213/233/3 +f 213/233/3 181/334/3 180/335/3 +f 180/335/3 179/336/3 213/233/3 +f 179/336/3 178/328/3 213/233/3 +f 178/328/3 184/231/3 213/233/3 +f 191/235/3 189/337/3 187/338/3 +f 187/338/3 209/339/3 207/236/3 +f 207/236/3 205/340/3 203/341/3 +f 203/341/3 201/342/3 207/236/3 +f 201/342/3 199/343/3 207/236/3 +f 199/343/3 197/344/3 195/234/3 +f 195/234/3 193/345/3 191/235/3 +f 191/235/3 187/338/3 207/236/3 +f 199/343/3 195/234/3 207/236/3 +f 208/239/1 186/346/1 188/347/1 +f 188/347/1 190/348/1 192/349/1 +f 192/349/1 194/350/1 196/351/1 +f 196/351/1 198/352/1 192/349/1 +f 198/352/1 200/237/1 192/349/1 +f 200/237/1 202/353/1 204/238/1 +f 204/238/1 206/354/1 208/239/1 +f 208/239/1 188/347/1 200/237/1 +f 188/347/1 192/349/1 200/237/1 s 1 -f 104/355/11 81/356/4 92/357/11 -f 103/358/12 92/357/11 91/359/12 -f 102/360/6 91/359/12 90/361/6 -f 101/362/13 90/361/6 89/363/13 -f 100/364/14 89/363/13 88/365/14 -f 99/366/2 88/365/14 87/367/2 -f 98/368/15 87/369/2 86/370/15 -f 97/371/16 86/370/15 85/372/16 -f 96/373/5 85/372/16 84/374/5 -f 95/375/17 84/374/5 83/376/17 -f 94/377/18 83/376/17 82/378/18 -f 93/379/4 82/378/18 81/356/4 -f 146/380/19 147/381/20 145/382/21 -f 148/383/22 149/384/23 147/381/20 -f 150/385/24 151/386/25 149/384/23 -f 152/387/26 153/388/27 151/386/25 -f 154/389/28 155/390/29 153/388/27 -f 156/391/30 157/392/31 155/390/29 -f 158/393/32 159/394/33 157/395/31 -f 160/396/34 161/397/35 159/394/33 -f 162/398/36 163/399/37 161/397/35 -f 164/400/38 165/401/39 163/399/37 -f 166/402/40 167/403/41 165/401/39 -f 168/404/42 145/382/21 167/403/41 -f 170/405/19 206/406/22 205/407/19 -f 172/408/22 207/409/24 206/406/22 -f 174/410/24 208/411/26 207/409/24 -f 176/412/26 209/413/28 208/411/26 -f 178/414/28 210/415/30 209/413/28 -f 180/416/30 211/417/32 210/415/30 -f 182/418/32 212/419/34 211/420/32 -f 184/421/34 213/422/36 212/419/34 -f 186/423/36 214/424/38 213/422/36 -f 188/425/38 215/426/40 214/424/38 -f 190/427/40 216/428/42 215/426/40 -f 192/429/42 205/407/19 216/428/42 -f 204/430/42 169/431/21 191/432/41 -f 203/433/40 191/432/41 189/434/39 -f 202/435/38 189/434/39 187/436/37 -f 201/437/36 187/436/37 185/438/35 -f 200/439/34 185/438/35 183/440/33 -f 199/441/32 183/440/33 181/442/31 -f 198/443/30 181/444/31 179/445/29 -f 197/446/28 179/445/29 177/447/27 -f 196/448/26 177/447/27 175/449/25 -f 195/450/24 175/449/25 173/451/23 -f 194/452/22 173/451/23 171/453/20 -f 193/454/19 171/453/20 169/431/21 -f 218/455/19 219/456/20 217/457/21 -f 220/458/22 221/459/23 219/456/20 -f 222/460/24 223/461/25 221/459/23 -f 224/462/26 225/463/27 223/461/25 -f 226/464/28 227/465/29 225/463/27 -f 228/466/30 229/467/31 227/465/29 -f 230/468/32 231/469/33 229/470/31 -f 232/471/34 233/472/35 231/469/33 -f 234/473/36 235/474/37 233/472/35 -f 236/475/38 237/476/39 235/474/37 -f 238/477/40 239/478/41 237/476/39 -f 240/479/42 217/457/21 239/478/41 -f 104/355/11 93/379/4 81/356/4 -f 103/358/12 104/355/11 92/357/11 -f 102/360/6 103/358/12 91/359/12 -f 101/362/13 102/360/6 90/361/6 -f 100/364/14 101/362/13 89/363/13 -f 99/366/2 100/364/14 88/365/14 -f 98/368/15 99/480/2 87/369/2 -f 97/371/16 98/368/15 86/370/15 -f 96/373/5 97/371/16 85/372/16 -f 95/375/17 96/373/5 84/374/5 -f 94/377/18 95/375/17 83/376/17 -f 93/379/4 94/377/18 82/378/18 -f 146/380/19 148/383/22 147/381/20 -f 148/383/22 150/385/24 149/384/23 -f 150/385/24 152/387/26 151/386/25 -f 152/387/26 154/389/28 153/388/27 -f 154/389/28 156/391/30 155/390/29 -f 156/391/30 158/481/32 157/392/31 -f 158/393/32 160/396/34 159/394/33 -f 160/396/34 162/398/36 161/397/35 -f 162/398/36 164/400/38 163/399/37 -f 164/400/38 166/402/40 165/401/39 -f 166/402/40 168/404/42 167/403/41 -f 168/404/42 146/380/19 145/382/21 -f 170/405/19 172/408/22 206/406/22 -f 172/408/22 174/410/24 207/409/24 -f 174/410/24 176/412/26 208/411/26 -f 176/412/26 178/414/28 209/413/28 -f 178/414/28 180/416/30 210/415/30 -f 180/416/30 182/482/32 211/417/32 -f 182/418/32 184/421/34 212/419/34 -f 184/421/34 186/423/36 213/422/36 -f 186/423/36 188/425/38 214/424/38 -f 188/425/38 190/427/40 215/426/40 -f 190/427/40 192/429/42 216/428/42 -f 192/429/42 170/405/19 205/407/19 -f 204/430/42 193/454/19 169/431/21 -f 203/433/40 204/430/42 191/432/41 -f 202/435/38 203/433/40 189/434/39 -f 201/437/36 202/435/38 187/436/37 -f 200/439/34 201/437/36 185/438/35 -f 199/441/32 200/439/34 183/440/33 -f 198/443/30 199/483/32 181/444/31 -f 197/446/28 198/443/30 179/445/29 -f 196/448/26 197/446/28 177/447/27 -f 195/450/24 196/448/26 175/449/25 -f 194/452/22 195/450/24 173/451/23 -f 193/454/19 194/452/22 171/453/20 -f 218/455/19 220/458/22 219/456/20 -f 220/458/22 222/460/24 221/459/23 -f 222/460/24 224/462/26 223/461/25 -f 224/462/26 226/464/28 225/463/27 -f 226/464/28 228/466/30 227/465/29 -f 228/466/30 230/484/32 229/467/31 -f 230/468/32 232/471/34 231/469/33 -f 232/471/34 234/473/36 233/472/35 -f 234/473/36 236/475/38 235/474/37 -f 236/475/38 238/477/40 237/476/39 -f 238/477/40 240/479/42 239/478/41 -f 240/479/42 218/455/19 217/457/21 +f 122/355/4 123/356/11 121/357/4 +f 124/358/11 125/359/12 123/356/11 +f 126/360/12 127/361/5 125/359/12 +f 128/362/5 129/363/13 127/361/5 +f 130/364/13 131/365/14 129/363/13 +f 132/366/14 133/367/2 131/365/14 +f 134/368/2 135/369/15 133/370/2 +f 136/371/15 137/372/16 135/369/15 +f 138/373/16 139/374/6 137/372/16 +f 140/375/6 141/376/17 139/374/6 +f 142/377/17 143/378/18 141/376/17 +f 144/379/18 121/357/4 143/378/18 +f 146/380/4 179/381/11 178/382/4 +f 148/383/11 180/384/12 179/381/11 +f 150/385/12 181/386/5 180/384/12 +f 152/387/5 213/388/13 181/386/5 +f 154/389/13 214/390/14 213/388/13 +f 156/391/14 215/392/2 214/390/14 +f 158/393/2 216/394/15 215/395/2 +f 160/396/15 182/397/16 216/394/15 +f 162/398/16 183/399/6 182/397/16 +f 164/400/6 184/401/17 183/399/6 +f 166/402/17 185/403/18 184/401/17 +f 168/404/18 178/382/4 185/403/18 +f 177/405/18 145/406/4 167/407/18 +f 212/408/17 167/407/18 165/409/17 +f 176/410/6 165/409/17 163/411/6 +f 175/412/16 163/411/6 161/413/16 +f 211/414/15 161/413/16 159/415/15 +f 174/416/2 159/415/15 157/417/2 +f 173/418/14 157/419/2 155/420/14 +f 210/421/13 155/420/14 153/422/13 +f 172/423/5 153/422/13 151/424/5 +f 171/425/12 151/424/5 149/426/12 +f 170/427/11 149/426/12 147/428/11 +f 169/429/4 147/428/11 145/406/4 +f 187/430/4 188/431/11 186/432/4 +f 189/433/11 190/434/12 188/431/11 +f 191/435/12 192/436/5 190/434/12 +f 193/437/5 194/438/13 192/436/5 +f 195/439/13 196/440/14 194/438/13 +f 197/441/14 198/442/2 196/440/14 +f 199/443/2 200/444/15 198/445/2 +f 201/446/15 202/447/16 200/444/15 +f 203/448/16 204/449/6 202/447/16 +f 205/450/6 206/451/17 204/449/6 +f 207/452/17 208/453/18 206/451/17 +f 209/454/18 186/432/4 208/453/18 +f 185/403/18 169/429/4 177/405/18 +f 184/401/17 177/405/18 212/408/17 +f 183/399/6 212/408/17 176/410/6 +f 182/397/16 176/410/6 175/412/16 +f 216/394/15 175/412/16 211/414/15 +f 215/395/2 211/414/15 174/416/2 +f 214/390/14 174/455/2 173/418/14 +f 213/388/13 173/418/14 210/421/13 +f 181/386/5 210/421/13 172/423/5 +f 180/384/12 172/423/5 171/425/12 +f 179/381/11 171/425/12 170/427/11 +f 178/382/4 170/427/11 169/429/4 +f 122/355/4 124/358/11 123/356/11 +f 124/358/11 126/360/12 125/359/12 +f 126/360/12 128/362/5 127/361/5 +f 128/362/5 130/364/13 129/363/13 +f 130/364/13 132/366/14 131/365/14 +f 132/366/14 134/456/2 133/367/2 +f 134/368/2 136/371/15 135/369/15 +f 136/371/15 138/373/16 137/372/16 +f 138/373/16 140/375/6 139/374/6 +f 140/375/6 142/377/17 141/376/17 +f 142/377/17 144/379/18 143/378/18 +f 144/379/18 122/355/4 121/357/4 +f 146/380/4 148/383/11 179/381/11 +f 148/383/11 150/385/12 180/384/12 +f 150/385/12 152/387/5 181/386/5 +f 152/387/5 154/389/13 213/388/13 +f 154/389/13 156/391/14 214/390/14 +f 156/391/14 158/457/2 215/392/2 +f 158/393/2 160/396/15 216/394/15 +f 160/396/15 162/398/16 182/397/16 +f 162/398/16 164/400/6 183/399/6 +f 164/400/6 166/402/17 184/401/17 +f 166/402/17 168/404/18 185/403/18 +f 168/404/18 146/380/4 178/382/4 +f 177/405/18 169/429/4 145/406/4 +f 212/408/17 177/405/18 167/407/18 +f 176/410/6 212/408/17 165/409/17 +f 175/412/16 176/410/6 163/411/6 +f 211/414/15 175/412/16 161/413/16 +f 174/416/2 211/414/15 159/415/15 +f 173/418/14 174/455/2 157/419/2 +f 210/421/13 173/418/14 155/420/14 +f 172/423/5 210/421/13 153/422/13 +f 171/425/12 172/423/5 151/424/5 +f 170/427/11 171/425/12 149/426/12 +f 169/429/4 170/427/11 147/428/11 +f 187/430/4 189/433/11 188/431/11 +f 189/433/11 191/435/12 190/434/12 +f 191/435/12 193/437/5 192/436/5 +f 193/437/5 195/439/13 194/438/13 +f 195/439/13 197/441/14 196/440/14 +f 197/441/14 199/458/2 198/442/2 +f 199/443/2 201/446/15 200/444/15 +f 201/446/15 203/448/16 202/447/16 +f 203/448/16 205/450/6 204/449/6 +f 205/450/6 207/452/17 206/451/17 +f 207/452/17 209/454/18 208/453/18 +f 209/454/18 187/430/4 186/432/4 +f 185/403/18 178/382/4 169/429/4 +f 184/401/17 185/403/18 177/405/18 +f 183/399/6 184/401/17 212/408/17 +f 182/397/16 183/399/6 176/410/6 +f 216/394/15 182/397/16 175/412/16 +f 215/395/2 216/394/15 211/414/15 +f 214/390/14 215/392/2 174/455/2 +f 213/388/13 214/390/14 173/418/14 +f 181/386/5 213/388/13 210/421/13 +f 180/384/12 181/386/5 172/423/5 +f 179/381/11 180/384/12 171/425/12 +f 178/382/4 179/381/11 170/427/11 From 9085dc5f0c666ef65da42cf29bb4a8ae92ffecce Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 19 May 2025 16:12:10 +0200 Subject: [PATCH 058/491] :b:alls --- CONTRIBUTING.md | 1 + changelog | 48 ++----------------- .../com/hbm/blocks/bomb/BlockCrashedBomb.java | 2 +- .../inventory/recipes/AssemblerRecipes.java | 26 ++++++++++ .../weapon/sedna/factory/XFactoryTool.java | 2 + .../machine/TileEntityCondenser.java | 13 +---- 6 files changed, 36 insertions(+), 56 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c900bddfa..8e1acbedf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,6 +13,7 @@ Things you should also avoid include: * duplicate util functions (just use what we have, man) * unused or half finished util functions (for obvious reasons) * half finished or obviously broken features (à la "bob will fix it, i'm sure of it", please don't do that) +* updating the changelog (you're guaranteed to cause a merge conflict with that) ## Test your code diff --git a/changelog b/changelog index 947d5839a..87762a2d6 100644 --- a/changelog +++ b/changelog @@ -1,47 +1,7 @@ -## Added -* Sandbags - * Connect to other sandbags or solid blocks - * Pretty -* Wooden barrier - * Pretty - * Automatically walls off connected solid blocks in addition to the direction it was placed in -* Some other wooden blocks like a roof, ceiling and scaffold -* Flow control pump - * The fluid equivalent to a diode - * Supports up to 10,000mB/t - * Unlike the diode, it is configured via GUI - * Can be shut off with redstone like a fluid valve -* Charge thrower - * A new weapon/tool - * Can fire two tiers of demolition charges or a grappling hook - * The grappling hook's line can be controlled via left and right mouse buttons -* Anti-materiel rifle - * Fires 12.7mm of fun - * x5 magnification scope - ## Changed -* Increased bayonet damage from 5 to 7.5 hearts -* Two numeric redstone over radio signals sent over the same channel will now be added together instead of one signal replacing the other - * This means that reading the fill state of multiple batteries over the same channel should result the combined fill state of all batteries -* Halved base spread of the .22 SMG -* Certain secret guns now have a proper way of being obtained -* Demolition mini nukes now create fire again -* New server configs - * `CRATE_OPEN_HELD` can toggle whether crates can be opened when held - * `CRATE_KEEP_CONTENTS` can toggle whether crates keep their contents when broken - * `ITEM_HAZARD_DROP_TICKRATE` can change the time between ticks for dropped item hazard checks (gunpowder, lithium), default is 2, lowest is 1 -* Duds now have multiple variants - * Dismantling different variants yields different drops - * Magnetic extraction can no longer be performed -* `isItemBlacklisted` on the item hazard checks now employs caching instead of doing a full ore dictionary lookup for every single check, this should make it marginally more performant -* The unfinished trains stuff is no longer listed in the creative tabs +* All compound plates can now also be made in the assembler ## Fixed -* Fixed RoR controller having the wrong recipe -* Either fixed the crate dupe/voiding issues or made them even worse -* Fixed skeletons and pedestals allowing blocks to be placed inside the player -* Fixed artillery shells not playing the explosion animation when directly impacting entities -* Fixed bauxite and malachite vein toggles being on backwards -* Fixed pneumatic tube order settings not saving -* Fixed crash caused by launching ABMs with blank target designators -* Fixed particle source throwing errors when trying to save nonexistant particles +* Fixed all dud variants having the balefire explosion effect +* Fixed demolition charges being able to explode multiple times when hitting entities +* Condensers are no longer affected by post-impact effects, fixing an issue where HP condenser tanks would go into the negatives \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java b/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java index 811d2a128..5a2e037b4 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockCrashedBomb.java @@ -83,8 +83,8 @@ public class BlockCrashedBomb extends BlockEnumMulti implements ITileEntityProvi if(!world.isRemote) { - world.setBlockToAir(x, y, z); EnumDudType type = EnumUtil.grabEnumSafely(EnumDudType.class, world.getBlockMetadata(x, y, z)); + world.setBlockToAir(x, y, z); if(type == type.BALEFIRE) { EntityBalefire bf = new EntityBalefire(world); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 935f371ed..b416a49a9 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -1075,6 +1075,31 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID) }, 100); + + + /// PLATES /// + makeRecipe(new ComparableStack(ModItems.plate_desh, 4), new AStack[] { + new OreDictStack(DESH.ingot(), 4), + new OreDictStack(ANY_PLASTIC.dust(), 2), + new OreDictStack(DURA.ingot(), 1), + }, 200); + makeRecipe(new ComparableStack(ModItems.plate_bismuth, 1), new AStack[] { + new ComparableStack(ModItems.nugget_bismuth, 2), + new OreDictStack(U238.billet(), 2), + new OreDictStack(NB.dust(), 1), + }, 200); + makeRecipe(new ComparableStack(ModItems.plate_euphemium, 1), new AStack[] { + new OreDictStack(EUPH.ingot(), 4), + new OreDictStack(AT.dust(), 3), + new OreDictStack(BI.dust(), 1), + new OreDictStack(VOLCANIC.gem(), 1), + new ComparableStack(ModItems.ingot_osmiridium), + }, 600); + makeRecipe(new ComparableStack(ModItems.plate_dineutronium, 4), new AStack[] { + new OreDictStack(DNT.ingot(), 4), + new ComparableStack(ModItems.powder_spark_mix, 2), + new OreDictStack(DESH.ingot(), 1), + }, 600); makeRecipe(new ComparableStack(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.NUKA)), new AStack[] { new ComparableStack(ModItems.cap_nuka, 128) }, 10); makeRecipe(new ComparableStack(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.QUANTUM)), new AStack[] { new ComparableStack(ModItems.cap_quantum, 128) }, 10); @@ -1239,6 +1264,7 @@ public class AssemblerRecipes extends SerializableRecipe { new OreDictStack(DURA.bolt(), 16), new ComparableStack(ModItems.motor, 2) }, 200); + makeRecipe(new ComparableStack(ModBlocks.large_vehicle_door, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 16), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack("dyeGreen", 4)}, 400); makeRecipe(new ComparableStack(ModBlocks.water_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 16), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeRed", 1)}, 200); makeRecipe(new ComparableStack(ModBlocks.qe_containment, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(ALLOY.plate(), 4), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 32), new OreDictStack("dyeBlack", 4)}, 400); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java index 8fc728847..f010af5a2 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java @@ -71,6 +71,7 @@ public class XFactoryTool { vnt.setPlayerProcessor(new PlayerProcessorStandard()); vnt.setSFX(new ExplosionEffectWeapon(10, 2.5F, 1F)); vnt.explode(); + bullet.setDead(); }; public static BiConsumer LAMBDA_MORTAR_CHARGE = (bullet, mop) -> { @@ -82,6 +83,7 @@ public class XFactoryTool { vnt.setPlayerProcessor(new PlayerProcessorStandard()); ExplosionCreator.composeEffectSmall(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord + 0.5, mop.hitVec.zCoord); vnt.explode(); + bullet.setDead(); }; public static void init() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java index f29d0c0c1..31eaee685 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java @@ -6,7 +6,6 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; -import com.hbm.saveddata.TomSaveData; import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IConfigurableMachine; @@ -17,7 +16,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IInfoProviderEC; import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.EnumSkyBlock; public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidStandardTransceiver, IInfoProviderEC, IConfigurableMachine, IBufPacketReceiver, IFluidCopiable { @@ -75,15 +73,8 @@ public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidS if(convert > 0) this.waterTimer = 20; - - int light = this.worldObj.getSavedLightValue(EnumSkyBlock.Sky, this.xCoord, this.yCoord, this.zCoord); - - if(TomSaveData.forWorld(worldObj).fire > 1e-5 && light > 7) { // Make both steam and water evaporate during firestorms... - tanks[1].setFill(tanks[1].getFill() - convert); - } else { - tanks[1].setFill(tanks[1].getFill() + convert); - } - + + tanks[1].setFill(tanks[1].getFill() + convert); postConvert(convert); } From 5cf209e2c18e133c6e90b662bd0474bb7af38845 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 19 May 2025 21:30:25 +0200 Subject: [PATCH 059/491] guh --- changelog | 5 ++++- gradle.properties | 2 +- src/main/java/com/hbm/config/ServerConfig.java | 4 ++-- src/main/java/com/hbm/handler/HbmKeybinds.java | 2 ++ .../hbm/inventory/recipes/ParticleAcceleratorRecipes.java | 4 ++-- src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java | 2 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/ModEventHandlerClient.java | 3 +++ src/main/java/com/hbm/wiaj/GuiWorldInAJar.java | 1 + 9 files changed, 17 insertions(+), 8 deletions(-) diff --git a/changelog b/changelog index 87762a2d6..03770a9c0 100644 --- a/changelog +++ b/changelog @@ -1,7 +1,10 @@ ## Changed * All compound plates can now also be made in the assembler +* Opening crates when held is now disabled by default ## Fixed * Fixed all dud variants having the balefire explosion effect * Fixed demolition charges being able to explode multiple times when hitting entities -* Condensers are no longer affected by post-impact effects, fixing an issue where HP condenser tanks would go into the negatives \ No newline at end of file +* Condensers are no longer affected by post-impact effects, fixing an issue where HP condenser tanks would go into the negatives +* Probably fixed particle accelerator recipe config not working +* Fixed potential dupe bug involving many held inventories \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index a556e9942..66c0a2486 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5334 +mod_build_number=5335 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/config/ServerConfig.java b/src/main/java/com/hbm/config/ServerConfig.java index 0ca1ccdcf..ef358cedf 100644 --- a/src/main/java/com/hbm/config/ServerConfig.java +++ b/src/main/java/com/hbm/config/ServerConfig.java @@ -17,7 +17,7 @@ public class ServerConfig extends RunningConfig { public static ConfigWrapper MINE_NUKE_DAMAGE = new ConfigWrapper(100F); public static ConfigWrapper MINE_NAVAL_DAMAGE = new ConfigWrapper(60F); public static ConfigWrapper TAINT_TRAILS = new ConfigWrapper(false); - public static ConfigWrapper CRATE_OPEN_HELD = new ConfigWrapper(true); + public static ConfigWrapper CRATE_ALLOW_OPEN_HELD = new ConfigWrapper(false); public static ConfigWrapper CRATE_KEEP_CONTENTS = new ConfigWrapper(true); public static ConfigWrapper ITEM_HAZARD_DROP_TICKRATE = new ConfigWrapper(2); @@ -29,7 +29,7 @@ public class ServerConfig extends RunningConfig { configMap.put("MINE_NUKE_DAMAGE", MINE_NUKE_DAMAGE); configMap.put("MINE_NAVAL_DAMAGE", MINE_NAVAL_DAMAGE); configMap.put("TAINT_TRAILS", TAINT_TRAILS); - configMap.put("CRATE_OPEN_HELD", CRATE_OPEN_HELD); + configMap.put("CRATE_ALLOW_OPEN_HELD", CRATE_ALLOW_OPEN_HELD); configMap.put("CRATE_KEEP_CONTENTS", CRATE_KEEP_CONTENTS); configMap.put("ITEM_HAZARD_DROP_TICKRATE", ITEM_HAZARD_DROP_TICKRATE); } diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 890ef4474..d924a7e34 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -14,6 +14,7 @@ import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent; import cpw.mods.fml.common.gameevent.InputEvent.MouseInputEvent; +import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; public class HbmKeybinds { @@ -81,6 +82,7 @@ public class HbmKeybinds { @SubscribeEvent public void keyEvent(KeyInputEvent event) { if (calculatorKey.getIsKeyPressed()) { // handle the calculator client-side only + Minecraft.getMinecraft().thePlayer.closeScreen(); FMLCommonHandler.instance().showGuiScreen(new GUICalculator()); } diff --git a/src/main/java/com/hbm/inventory/recipes/ParticleAcceleratorRecipes.java b/src/main/java/com/hbm/inventory/recipes/ParticleAcceleratorRecipes.java index 36a7b17cc..0d0121fde 100644 --- a/src/main/java/com/hbm/inventory/recipes/ParticleAcceleratorRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ParticleAcceleratorRecipes.java @@ -168,10 +168,10 @@ public class ParticleAcceleratorRecipes extends SerializableRecipe { this.recipes.add(new ParticleAcceleratorRecipe( in[0], - in[1], + in.length > 1 ? in[1] : null, momentum, out[0], - out[1] + out.length > 1 ? out[1] : null )); } diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index 3608619fa..bed6685d1 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -30,7 +30,7 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - if(!ServerConfig.CRATE_OPEN_HELD.get()) return stack; + if(!ServerConfig.CRATE_ALLOW_OPEN_HELD.get()) return stack; Block block = Block.getBlockFromItem(player.getHeldItem().getItem()); if(block == ModBlocks.mass_storage) return stack; // Genuinely can't figure out how to make this part work, so I'm just not gonna mess with it. diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 20c2f72f6..8946c809d 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5334)"; + public static final String VERSION = "1.0.27 BETA (5335)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 4b14ef3e6..354043ab4 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -948,6 +948,7 @@ public class ModEventHandlerClient { if(comp != null) { CanneryBase cannery = Jars.canneries.get(comp); if(cannery != null) { + Minecraft.getMinecraft().thePlayer.closeScreen(); FMLCommonHandler.instance().showGuiScreen(new GuiWorldInAJar(cannery.createScript(), cannery.getName(), cannery.getIcon(), cannery.seeAlso())); } } @@ -959,6 +960,7 @@ public class ModEventHandlerClient { if(stack != null) { stack = stack.copy(); stack.stackSize = 1; + Minecraft.getMinecraft().thePlayer.closeScreen(); FMLCommonHandler.instance().showGuiScreen(new GUIScreenPreview(stack)); } } @@ -1002,6 +1004,7 @@ public class ModEventHandlerClient { } } + Minecraft.getMinecraft().thePlayer.closeScreen(); FMLCommonHandler.instance().showGuiScreen(new GUIScreenWikiRender(stacks.toArray(new ItemStack[0]), prefix, "wiki-block-renders-256", scale)); } } else { diff --git a/src/main/java/com/hbm/wiaj/GuiWorldInAJar.java b/src/main/java/com/hbm/wiaj/GuiWorldInAJar.java index 4236c83ee..ac8fea198 100644 --- a/src/main/java/com/hbm/wiaj/GuiWorldInAJar.java +++ b/src/main/java/com/hbm/wiaj/GuiWorldInAJar.java @@ -216,6 +216,7 @@ public class GuiWorldInAJar extends GuiScreen { if(15 <= mouseX && 39 > mouseX && 15 + 36 * (i + 1) < mouseY && 39 + 36 * (i + 1) >= mouseY) { CanneryBase cannery = seeAlso[i]; mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + Minecraft.getMinecraft().thePlayer.closeScreen(); FMLCommonHandler.instance().showGuiScreen(new GuiWorldInAJar(cannery.createScript(), cannery.getName(), cannery.getIcon(), cannery.seeAlso())); return; } From 4f8c102b68b3e92def0124c0076a51e3c94d4a10 Mon Sep 17 00:00:00 2001 From: George Paton Date: Tue, 20 May 2025 14:21:56 +1000 Subject: [PATCH 060/491] All dupes fixed and _verified_ --- .../java/com/hbm/config/ServerConfig.java | 2 +- .../container/ContainerCrateBase.java | 11 ++-- .../container/ContainerDroneRequester.java | 20 +++--- .../items/block/ItemBlockStorageCrate.java | 63 +++++++++---------- .../java/com/hbm/items/tool/ItemToolBox.java | 12 +++- 5 files changed, 54 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/hbm/config/ServerConfig.java b/src/main/java/com/hbm/config/ServerConfig.java index ef358cedf..43dfc36ae 100644 --- a/src/main/java/com/hbm/config/ServerConfig.java +++ b/src/main/java/com/hbm/config/ServerConfig.java @@ -17,7 +17,7 @@ public class ServerConfig extends RunningConfig { public static ConfigWrapper MINE_NUKE_DAMAGE = new ConfigWrapper(100F); public static ConfigWrapper MINE_NAVAL_DAMAGE = new ConfigWrapper(60F); public static ConfigWrapper TAINT_TRAILS = new ConfigWrapper(false); - public static ConfigWrapper CRATE_ALLOW_OPEN_HELD = new ConfigWrapper(false); + public static ConfigWrapper CRATE_ALLOW_OPEN_HELD = new ConfigWrapper(true); public static ConfigWrapper CRATE_KEEP_CONTENTS = new ConfigWrapper(true); public static ConfigWrapper ITEM_HAZARD_DROP_TICKRATE = new ConfigWrapper(2); diff --git a/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java b/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java index 134032bae..ec6309430 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCrateBase.java @@ -10,14 +10,11 @@ import net.minecraft.tileentity.TileEntity; public class ContainerCrateBase extends ContainerBase { - //just there so prev stuff doesnt break - protected IInventory crate = tile; - public ContainerCrateBase(InventoryPlayer invPlayer, IInventory tedf) { super(invPlayer, tedf); tile.openInventory(); } - + @Override public void playerInv(InventoryPlayer invPlayer, int playerInvX, int playerInvY, int playerHotbarY) { for(int i = 0; i < 3; i++) { @@ -35,7 +32,7 @@ public class ContainerCrateBase extends ContainerBase { public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { // prevents the player from moving around the currently open box if(player.inventory.getStackInSlot(player.inventory.currentItem) != null && - player.inventory.getStackInSlot(player.inventory.currentItem).getItem() instanceof ItemBlockStorageCrate && !(this.crate instanceof TileEntity)) { + player.inventory.getStackInSlot(player.inventory.currentItem).getItem() instanceof ItemBlockStorageCrate && !(this.tile instanceof TileEntity)) { if (mode == 2 && button == player.inventory.currentItem) { return null; } @@ -51,7 +48,7 @@ public class ContainerCrateBase extends ContainerBase { super.onContainerClosed(p_75134_1_); tile.closeInventory(); } - + public class SlotPlayerCrate extends SlotNonRetarded { public SlotPlayerCrate(IInventory inventory, int id, int x, int y) { @@ -66,7 +63,7 @@ public class ContainerCrateBase extends ContainerBase { public boolean canTakeStack(EntityPlayer player) { if(player.inventory.currentItem == this.getSlotIndex() && // If this slot is the current held slot. this.getStack() != null && this.getStack().getItem() instanceof ItemBlockStorageCrate && // If the slot contains a storage crate. - player.openContainer instanceof ContainerCrateBase && !(ContainerCrateBase.this.crate instanceof TileEntity)) // If the player is currently inside a crate container. + player.openContainer instanceof ContainerCrateBase && !(ContainerCrateBase.this.tile instanceof TileEntity)) // If the player is currently inside a crate container. return false; return super.canTakeStack(player); } diff --git a/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java b/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java index 7d1a6775d..bdc788c44 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java +++ b/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java @@ -39,11 +39,11 @@ public class ContainerDroneRequester extends ContainerCrateBase { if(par2 < 9) return null; //ignore filters - if(par2 <= crate.getSizeInventory() - 1) { - if(!this.mergeItemStack(var5, crate.getSizeInventory(), this.inventorySlots.size(), true)) { + if(par2 <= tile.getSizeInventory() - 1) { + if(!this.mergeItemStack(var5, tile.getSizeInventory(), this.inventorySlots.size(), true)) { return null; } - } else if(!this.mergeItemStack(var5, 9, crate.getSizeInventory(), false)) { + } else if(!this.mergeItemStack(var5, 9, tile.getSizeInventory(), false)) { return null; } @@ -75,25 +75,25 @@ public class ContainerDroneRequester extends ContainerCrateBase { ItemStack ret = null; ItemStack held = player.inventory.getItemStack(); - TileEntityDroneRequester requester = (TileEntityDroneRequester) crate; - + TileEntityDroneRequester requester = (TileEntityDroneRequester) tile; + if(slot.getHasStack()) ret = slot.getStack().copy(); - + if(button == 1 && mode == 0 && slot.getHasStack()) { requester.nextMode(index); return ret; - + } else { slot.putStack(held != null ? held.copy() : null); - + if(slot.getHasStack()) { slot.getStack().stackSize = 1; } - + slot.onSlotChanged(); requester.matcher.initPatternStandard(requester.getWorldObj(), slot.getStack(), index); - + return ret; } } diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index bed6685d1..94d61c10f 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -28,21 +28,27 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider super(block); } + // IF WE PUT ROCKS IN THE SHAPE OF A RUNWAY GOD WILL GIVE US HIGH-FRUCTOSE CORN SYRUP + @Override + public int getMaxItemUseDuration(ItemStack stack) { + return 1; + } + @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { if(!ServerConfig.CRATE_ALLOW_OPEN_HELD.get()) return stack; - + Block block = Block.getBlockFromItem(player.getHeldItem().getItem()); if(block == ModBlocks.mass_storage) return stack; // Genuinely can't figure out how to make this part work, so I'm just not gonna mess with it. if(!world.isRemote && stack.stackSize == 1) { - if (stack.stackTagCompound != null && stack.stackTagCompound.hasKey("lock")) { - for (ItemStack item : player.inventory.mainInventory) { - + if(stack.stackTagCompound != null && stack.stackTagCompound.hasKey("lock")) { + for(ItemStack item : player.inventory.mainInventory) { + if(item == null) continue; // Skip if no item. if(!(item.getItem() instanceof ItemKey)) continue; // Skip if item isn't a key. if(item.stackTagCompound == null) continue; // Skip if there is no NBT (wouldn't open it anyway). - if (item.stackTagCompound.getInteger("pins") == stack.stackTagCompound.getInteger("lock")) { // Check if pins are equal (if it can open it) + if(item.stackTagCompound.getInteger("pins") == stack.stackTagCompound.getInteger("lock")) { // Check if pins are equal (if it can open it) TileEntityCrateBase.spawnSpiders(player, world, stack); player.openGui(MainRegistry.instance, 0, world, 0, 0, 0); break; @@ -83,20 +89,16 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider } public static class InventoryCrate extends ItemInventory { - - public int heldIndex; - - public InventoryCrate(EntityPlayer player, ItemStack crate) { + public InventoryCrate(EntityPlayer player, ItemStack crate) { this.player = player; this.target = crate; - this.heldIndex = player.inventory.currentItem; - + this.slots = new ItemStack[this.getSizeInventory()]; if(target.stackTagCompound == null) { target.stackTagCompound = new NBTTagCompound(); } - + for(int i = 0; i < slots.length; i++) this.slots[i] = ItemStack.loadItemStackFromNBT(target.stackTagCompound.getCompoundTag("slot" + i)); } @@ -129,42 +131,35 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider } @Override - public void markDirty() { // I HATE THIS SO MUCH - NBTTagCompound nbt = new NBTTagCompound(); + public void markDirty() { // You have been blessed by the unfuck + + // Preserve existing NBT so we keep lock data and piders + NBTTagCompound nbt = target.stackTagCompound != null ? target.stackTagCompound : new NBTTagCompound(); int invSize = this.getSizeInventory(); for(int i = 0; i < invSize; i++) { ItemStack stack = this.getStackInSlot(i); - if(stack == null) continue; + if(stack == null) { + nbt.removeTag("slot" + i); + continue; + } NBTTagCompound slot = new NBTTagCompound(); stack.writeToNBT(slot); nbt.setTag("slot" + i, slot); } - /*if(target.stackTagCompound != null) { // yes it's a bit jank, but it wants to clear otherwise so... - if(target.stackTagCompound.hasKey("lock")) nbt.setInteger("lock", target.stackTagCompound.getInteger("lock")); - if(target.stackTagCompound.hasKey("lockMod")) nbt.setDouble("lockMod", target.stackTagCompound.getDouble("lockMod")); - if(target.stackTagCompound.hasKey("spiders")) nbt.setBoolean("spiders", target.stackTagCompound.getBoolean("spiders")); // fuck you!! - }*/ - - // i have completely given up - if(player.getHeldItem() != null && player.getHeldItem().getItem() == this.target.getItem() && player.inventory.currentItem == this.heldIndex) { - player.getHeldItem().setTagCompound(nbt); - } + target.setTagCompound(nbt); } - + @Override public void closeInventory() { - player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:block.crateClose", 1.0F, 0.8F); - - /* - * realistically, we only need one NBT size check (and we only *want* one because CompressedStreamTools is expensive) so we do that part only when closing - */ - if(player.getHeldItem() != null && player.getHeldItem().getItem() == this.target.getItem() && player.inventory.currentItem == this.heldIndex) { - player.getHeldItem().setTagCompound(checkNBT(player.getHeldItem().getTagCompound())); - } + super.closeInventory(); + + // Check for 6kb item vomit + target.setTagCompound(checkNBT(target.getTagCompound())); + player.inventoryContainer.detectAndSendChanges(); } } } diff --git a/src/main/java/com/hbm/items/tool/ItemToolBox.java b/src/main/java/com/hbm/items/tool/ItemToolBox.java index 9739a6d26..9707e09d7 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolBox.java +++ b/src/main/java/com/hbm/items/tool/ItemToolBox.java @@ -10,6 +10,7 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.util.ItemStackUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -35,6 +36,11 @@ public class ItemToolBox extends Item implements IGUIProvider { this.setMaxStackSize(1); } + @Override + public int getMaxItemUseDuration(ItemStack stack) { + return 1; + } + @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister iconRegister) { @@ -285,9 +291,11 @@ public class ItemToolBox extends Item implements IGUIProvider { @Override public void closeInventory() { - this.target.getTagCompound().removeTag("isOpen"); - this.player.inventory.setInventorySlotContents(this.player.inventory.currentItem, this.target); super.closeInventory(); + + this.target.getTagCompound().removeTag("isOpen"); + this.target.getTagCompound().setInteger("rand", player.worldObj.rand.nextInt()); // a boolean changing isn't sufficient to detect the change + player.inventoryContainer.detectAndSendChanges(); } @Override From 4baf5e7c676cce5b19a4fd38aea38ddae0423ac3 Mon Sep 17 00:00:00 2001 From: George Paton Date: Tue, 20 May 2025 14:26:14 +1000 Subject: [PATCH 061/491] don't open conveyor sorter GUI when placing conveyors --- src/main/java/com/hbm/blocks/network/CraneRouter.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/network/CraneRouter.java b/src/main/java/com/hbm/blocks/network/CraneRouter.java index d6f663817..af4db88bb 100644 --- a/src/main/java/com/hbm/blocks/network/CraneRouter.java +++ b/src/main/java/com/hbm/blocks/network/CraneRouter.java @@ -7,6 +7,7 @@ import api.hbm.conveyor.IEnterableBlock; import com.hbm.blocks.IBlockMultiPass; import com.hbm.blocks.ITooltipProvider; import com.hbm.entity.item.EntityMovingItem; +import com.hbm.items.tool.ItemConveyorWand; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.module.ModulePatternMatcher; @@ -61,7 +62,9 @@ public class CraneRouter extends BlockContainer implements IBlockMultiPass, IEnt @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) { + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemConveyorWand) { + return false; + } else if(world.isRemote) { return true; } else if(!player.isSneaking()) { FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); From a8829245f4b39934a020f65569213defe3cfbb91 Mon Sep 17 00:00:00 2001 From: Justnightheron Date: Tue, 20 May 2025 14:08:40 +0800 Subject: [PATCH 062/491] juice --- src/main/resources/assets/hbm/lang/zh_CN.lang | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 3232fb3c9..64eea3277 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -6060,8 +6060,11 @@ item.ammo_standard.ct_mortar_charge.name=重型炸药包 item.gun_charge_thrower.name=炸药投掷器 tile.sandbags.name=沙袋 tile.wood_barrier.name=木制围栏 -item.ammo_standard.nuke_balefire.name=Mini Nuke, Balefire Egg +item.ammo_standard.nuke_balefire.name=迷你野火炸弹 item.gun_minigun_dual.name=双联转管机枪 tile.wood_structure.ceiling.name=木质顶棚 -tile.wood_structure.roof.name=木质顶板 +tile.wood_structure.roof.name=木质地板 tile.wood_structure.scaffold.name=木质脚手架 +item.gun_amat.name=反器材步枪 +tile.fluid_pump.name=流量控制泵 +tile.vine_phosphor.large.name=磷藤蔓 From ce8099d4aa3d5f1b7f27a8f5995c981f853b1f9d Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 20 May 2025 15:55:27 +0200 Subject: [PATCH 063/491] the sloplands --- changelog | 15 +++---- .../java/com/hbm/config/ServerConfig.java | 4 +- .../java/com/hbm/inventory/fluid/Fluids.java | 2 +- .../items/block/ItemBlockStorageCrate.java | 2 +- .../java/com/hbm/items/tool/ItemToolBox.java | 1 - .../bomb/TileEntityCrashedBomb.java | 39 ++++++++++++++++-- .../machine/TileEntityMachineArcWelder.java | 11 ++++- .../TileEntityMachineSolderingStation.java | 11 ++++- .../textures/gui/processing/gui_chemplant.png | Bin 0 -> 3769 bytes 9 files changed, 65 insertions(+), 20 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png diff --git a/changelog b/changelog index 03770a9c0..878ed0d32 100644 --- a/changelog +++ b/changelog @@ -1,10 +1,11 @@ ## Changed -* All compound plates can now also be made in the assembler -* Opening crates when held is now disabled by default +* Updated chinese localiation +* Duds now have a radioactive AoE effect around them based on type +* HPS is no longer tagged as radioactive and no longer requires hazardous materials tanks to store + * Somehow, these meaningless tags triggered people exceptionally hard. Go annoy someone else. +* Solderers and arc welders can now use overdrive upgrades + * Do note that processing speed rises linearly, but power draw rises exponentially ## Fixed -* Fixed all dud variants having the balefire explosion effect -* Fixed demolition charges being able to explode multiple times when hitting entities -* Condensers are no longer affected by post-impact effects, fixing an issue where HP condenser tanks would go into the negatives -* Probably fixed particle accelerator recipe config not working -* Fixed potential dupe bug involving many held inventories \ No newline at end of file +* Crates? Maybe? +* Fixed conveyor placer not being usable on the conveyor sorter \ No newline at end of file diff --git a/src/main/java/com/hbm/config/ServerConfig.java b/src/main/java/com/hbm/config/ServerConfig.java index 43dfc36ae..0ca1ccdcf 100644 --- a/src/main/java/com/hbm/config/ServerConfig.java +++ b/src/main/java/com/hbm/config/ServerConfig.java @@ -17,7 +17,7 @@ public class ServerConfig extends RunningConfig { public static ConfigWrapper MINE_NUKE_DAMAGE = new ConfigWrapper(100F); public static ConfigWrapper MINE_NAVAL_DAMAGE = new ConfigWrapper(60F); public static ConfigWrapper TAINT_TRAILS = new ConfigWrapper(false); - public static ConfigWrapper CRATE_ALLOW_OPEN_HELD = new ConfigWrapper(true); + public static ConfigWrapper CRATE_OPEN_HELD = new ConfigWrapper(true); public static ConfigWrapper CRATE_KEEP_CONTENTS = new ConfigWrapper(true); public static ConfigWrapper ITEM_HAZARD_DROP_TICKRATE = new ConfigWrapper(2); @@ -29,7 +29,7 @@ public class ServerConfig extends RunningConfig { configMap.put("MINE_NUKE_DAMAGE", MINE_NUKE_DAMAGE); configMap.put("MINE_NAVAL_DAMAGE", MINE_NAVAL_DAMAGE); configMap.put("TAINT_TRAILS", TAINT_TRAILS); - configMap.put("CRATE_ALLOW_OPEN_HELD", CRATE_ALLOW_OPEN_HELD); + configMap.put("CRATE_OPEN_HELD", CRATE_OPEN_HELD); configMap.put("CRATE_KEEP_CONTENTS", CRATE_KEEP_CONTENTS); configMap.put("ITEM_HAZARD_DROP_TICKRATE", ITEM_HAZARD_DROP_TICKRATE); } diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index d4c52f1cb..64a23a86b 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -336,7 +336,7 @@ public class Fluids { BLOOD_HOT = new FluidType("BLOOD_HOT", 0xF22419, 3, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS).setTemp(666); //it's funny because it's the satan number SYNGAS = new FluidType("SYNGAS", 0x131313, 1, 4, 2, EnumSymbol.NONE).addContainers(new CD_Gastank(0xFFFFFF, 0x131313)).addTraits(GASEOUS); OXYHYDROGEN = new FluidType("OXYHYDROGEN", 0x483FC1, 0, 4, 2, EnumSymbol.NONE).addTraits(GASEOUS); - RADIOSOLVENT = new FluidType("RADIOSOLVENT", 0xA4D7DD, 3, 3, 0, EnumSymbol.NONE).addTraits(LIQUID, LEADCON, new FT_Corrosive(50), new FT_VentRadiation(0.01F)); + RADIOSOLVENT = new FluidType("RADIOSOLVENT", 0xA4D7DD, 3, 3, 0, EnumSymbol.NONE).addTraits(LIQUID, new FT_Corrosive(50)); CHLORINE = new FluidType("CHLORINE", 0xBAB572, 3, 0, 0, EnumSymbol.OXIDIZER).addContainers(new CD_Gastank(0xBAB572, 0x887B34)).addTraits(GASEOUS, new FT_Corrosive(25)); HEAVYOIL_VACUUM = new FluidType("HEAVYOIL_VACUUM", 0x131214, 2, 1, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, P_OIL).addContainers(new CD_Canister(0x513F39)); REFORMATE = new FluidType("REFORMATE", 0x835472, 2, 2, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, P_FUEL).addContainers(new CD_Canister(0xD180D6)); diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index 94d61c10f..cf24e36c3 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -36,7 +36,7 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - if(!ServerConfig.CRATE_ALLOW_OPEN_HELD.get()) return stack; + if(!ServerConfig.CRATE_OPEN_HELD.get()) return stack; Block block = Block.getBlockFromItem(player.getHeldItem().getItem()); if(block == ModBlocks.mass_storage) return stack; // Genuinely can't figure out how to make this part work, so I'm just not gonna mess with it. diff --git a/src/main/java/com/hbm/items/tool/ItemToolBox.java b/src/main/java/com/hbm/items/tool/ItemToolBox.java index 9707e09d7..8be7104ea 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolBox.java +++ b/src/main/java/com/hbm/items/tool/ItemToolBox.java @@ -10,7 +10,6 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.util.ItemStackUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCrashedBomb.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCrashedBomb.java index cf70bb5f8..8e70048c8 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCrashedBomb.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCrashedBomb.java @@ -1,16 +1,47 @@ package com.hbm.tileentity.bomb; +import java.util.List; +import java.util.function.BiConsumer; + +import com.hbm.blocks.bomb.BlockCrashedBomb.EnumDudType; +import com.hbm.util.ContaminationUtil; +import com.hbm.util.EnumUtil; +import com.hbm.util.ContaminationUtil.ContaminationType; +import com.hbm.util.ContaminationUtil.HazardType; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; public class TileEntityCrashedBomb extends TileEntity { @Override - public AxisAlignedBB getRenderBoundingBox() { return TileEntity.INFINITE_EXTENT_AABB; } + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(worldObj.getTotalWorldTime() % 2 == 0) { + EnumDudType type = EnumUtil.grabEnumSafely(EnumDudType.class, this.getBlockMetadata()); + + if(type == type.BALEFIRE) affectEntities((entity, intensity) -> { ContaminationUtil.contaminate(entity, HazardType.RADIATION, ContaminationType.CREATIVE, 1F * intensity); }, 15D); + if(type == type.NUKE) affectEntities((entity, intensity) -> { ContaminationUtil.contaminate(entity, HazardType.RADIATION, ContaminationType.CREATIVE, 0.25F * intensity); }, 10D); + if(type == type.SALTED) affectEntities((entity, intensity) -> { ContaminationUtil.contaminate(entity, HazardType.RADIATION, ContaminationType.CREATIVE, 0.5F * intensity); }, 10D); + } + } + } - @Override - @SideOnly(Side.CLIENT) - public double getMaxRenderDistanceSquared() { return 65536.0D; } + public void affectEntities(BiConsumer effect, double range) { + List list = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5).expand(range, range, range)); + for(EntityLivingBase entity : list) { + double dist = Math.sqrt(getDistanceFrom(entity.posX, entity.posY + entity.height / 2, entity.posZ)); + if(dist > range) continue; + float intensity = (float) (1D - dist / range); + effect.accept(entity, intensity); + } + } + + @Override public AxisAlignedBB getRenderBoundingBox() { return TileEntity.INFINITE_EXTENT_AABB; } + @Override @SideOnly(Side.CLIENT) public double getMaxRenderDistanceSquared() { return 65536.0D; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java index 605cd06db..aa9f9736f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java @@ -18,6 +18,7 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.*; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -92,14 +93,16 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements upgradeManager.checkSlots(this, slots, 6, 7); int redLevel = upgradeManager.getLevel(UpgradeType.SPEED); int blueLevel = upgradeManager.getLevel(UpgradeType.POWER); + int blackLevel = upgradeManager.getLevel(UpgradeType.OVERDRIVE); if(recipe != null) { this.processTime = recipe.duration - (recipe.duration * redLevel / 6) + (recipe.duration * blueLevel / 3); this.consumption = recipe.consumption + (recipe.consumption * redLevel) - (recipe.consumption * blueLevel / 6); + this.consumption *= Math.pow(2, blackLevel); intendedMaxPower = recipe.consumption * 20; if(canProcess(recipe)) { - this.progress++; + this.progress += (1 + blackLevel); this.power -= this.consumption; if(progress >= processTime) { @@ -369,7 +372,7 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements @Override public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { - return type == UpgradeType.SPEED || type == UpgradeType.POWER; + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; } @Override @@ -383,6 +386,9 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 100 / 6) + "%")); info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 100 / 3) + "%")); } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } } @Override @@ -390,6 +396,7 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements HashMap upgrades = new HashMap<>(); upgrades.put(UpgradeType.SPEED, 3); upgrades.put(UpgradeType.POWER, 3); + upgrades.put(UpgradeType.OVERDRIVE, 3); return upgrades; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index 995b449e9..5515a816d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -22,6 +22,7 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; @@ -98,14 +99,16 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp upgradeManager.checkSlots(this, slots, 9, 10); int redLevel = upgradeManager.getLevel(UpgradeType.SPEED); int blueLevel = upgradeManager.getLevel(UpgradeType.POWER); + int blackLevel = upgradeManager.getLevel(UpgradeType.OVERDRIVE); if(recipe != null) { this.processTime = recipe.duration - (recipe.duration * redLevel / 6) + (recipe.duration * blueLevel / 3); this.consumption = recipe.consumption + (recipe.consumption * redLevel) - (recipe.consumption * blueLevel / 6); + this.consumption *= Math.pow(2, blackLevel); intendedMaxPower = recipe.consumption * 20; if(canProcess(recipe)) { - this.progress++; + this.progress += (1 + blackLevel); this.power -= this.consumption; if(progress >= processTime) { @@ -360,7 +363,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp @Override public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { - return type == UpgradeType.SPEED || type == UpgradeType.POWER; + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; } @Override @@ -374,6 +377,9 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 100 / 6) + "%")); info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 100 / 3) + "%")); } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } } @Override @@ -381,6 +387,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp HashMap upgrades = new HashMap<>(); upgrades.put(UpgradeType.SPEED, 3); upgrades.put(UpgradeType.POWER, 3); + upgrades.put(UpgradeType.OVERDRIVE, 3); return upgrades; } diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png new file mode 100644 index 0000000000000000000000000000000000000000..8d24bb62fe9c7af4076f2a0b2cf7518dd3d57d97 GIT binary patch literal 3769 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 e_ Date: Tue, 20 May 2025 20:01:36 +0200 Subject: [PATCH 064/491] thank you doctor, no more nose blood --- changelog | 3 ++- gradle.properties | 2 +- .../inventory/material/MatDistribution.java | 2 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../textures/gui/processing/gui_chemplant.png | Bin 3769 -> 4015 bytes 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/changelog b/changelog index 878ed0d32..4182f0d03 100644 --- a/changelog +++ b/changelog @@ -8,4 +8,5 @@ ## Fixed * Crates? Maybe? -* Fixed conveyor placer not being usable on the conveyor sorter \ No newline at end of file +* Fixed conveyor placer not being usable on the conveyor sorter +* Fixed crucible trying to autogen recipes for nonexistant nether thorium ore \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 66c0a2486..51b6e2cca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5335 +mod_build_number=5336 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/inventory/material/MatDistribution.java b/src/main/java/com/hbm/inventory/material/MatDistribution.java index 1fd69c00c..6daea2e40 100644 --- a/src/main/java/com/hbm/inventory/material/MatDistribution.java +++ b/src/main/java/com/hbm/inventory/material/MatDistribution.java @@ -76,7 +76,7 @@ public class MatDistribution extends SerializableRecipe { registerOre(OreDictManager.COAL.ore(), MAT_CARBON, GEM.q(3), MAT_STONE, QUART.q(1)); registerOre(OreDictManager.GOLD.ore(), MAT_GOLD, INGOT.q(2), MAT_LEAD, NUGGET.q(3), MAT_STONE, QUART.q(1)); registerOre(OreDictManager.U.ore(), MAT_URANIUM, INGOT.q(2), MAT_LEAD, NUGGET.q(3), MAT_STONE, QUART.q(1)); - for(String ore : OreDictManager.TH232.all(MaterialShapes.ORE)) registerOre(ore, MAT_THORIUM, INGOT.q(2), MAT_URANIUM, NUGGET.q(3), MAT_STONE, QUART.q(1)); + for(String ore : OreDictManager.TH232.all(MaterialShapes.ONLY_ORE)) registerOre(ore, MAT_THORIUM, INGOT.q(2), MAT_URANIUM, NUGGET.q(3), MAT_STONE, QUART.q(1)); registerOre(OreDictManager.CU.ore(), MAT_COPPER, INGOT.q(2), MAT_STONE, QUART.q(1)); registerOre(OreDictManager.PB.ore(), MAT_LEAD, INGOT.q(2), MAT_GOLD, NUGGET.q(1), MAT_STONE, QUART.q(1)); registerOre(OreDictManager.BE.ore(), MAT_BERYLLIUM, INGOT.q(2), MAT_STONE, QUART.q(1)); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 8946c809d..b7169b68e 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5335)"; + public static final String VERSION = "1.0.27 BETA (5336)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png index 8d24bb62fe9c7af4076f2a0b2cf7518dd3d57d97..824dd1ce99ffdf47214b6494f3055d833c8bcd01 100644 GIT binary patch literal 4015 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 e_ Date: Wed, 21 May 2025 00:56:30 +0300 Subject: [PATCH 065/491] Add some null safety In my survival playthrough, I got a crash when a tool with AOE broke mid-operation. This should fix it --- .../java/com/hbm/items/tool/ItemToolAbility.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index d12fe3cfb..6fd951e9e 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -297,6 +297,10 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro EntityPlayerMP player = (EntityPlayerMP) playerEntity; ItemStack stack = player.getHeldItem(); + if (stack == null) { + return; + } + Block block = world.getBlock(x, y, z); int meta = world.getBlockMetadata(x, y, z); @@ -485,7 +489,7 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro public Configuration getConfiguration(ItemStack stack) { Configuration config = new Configuration(); - if(!stack.hasTagCompound() || !stack.stackTagCompound.hasKey("ability") || !stack.stackTagCompound.hasKey("abilityPresets")) { + if(stack == null || !stack.hasTagCompound() || !stack.stackTagCompound.hasKey("ability") || !stack.stackTagCompound.hasKey("abilityPresets")) { config.reset(availableAbilities); return config; } @@ -496,8 +500,13 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro } public void setConfiguration(ItemStack stack, Configuration config) { - if(!stack.hasTagCompound()) + if (stack == null) { + return; + } + + if (!stack.hasTagCompound()) { stack.stackTagCompound = new NBTTagCompound(); + } config.writeToNBT(stack.stackTagCompound); } From 716e4297725cd8b22efa89242dd577571433bd62 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 21 May 2025 16:29:18 +0200 Subject: [PATCH 066/491] the rim flappe on a bongfish --- changelog | 18 +- .../inventory/gui/GUIScreenToolAbility.java | 634 +- .../com/hbm/items/tool/ItemGuideBook.java | 2 +- .../com/hbm/items/tool/ItemToolAbility.java | 2 - .../java/com/hbm/main/CraftingManager.java | 1 - .../hbm/models/weapons/launch_pad_erector.obj | 33969 ++++++---------- .../textures/blocks/armor_table_bottom.png | Bin 307 -> 238 bytes .../hbm/textures/blocks/armor_table_side.png | Bin 334 -> 308 bytes .../hbm/textures/blocks/armor_table_top.png | Bin 324 -> 307 bytes .../hbm/textures/blocks/gun_table_bottom.png | Bin 203 -> 264 bytes .../hbm/textures/blocks/gun_table_side.png | Bin 261 -> 353 bytes .../hbm/textures/blocks/gun_table_top.png | Bin 289 -> 417 bytes 12 files changed, 13419 insertions(+), 21207 deletions(-) diff --git a/changelog b/changelog index 4182f0d03..3520d9bca 100644 --- a/changelog +++ b/changelog @@ -1,12 +1,10 @@ ## Changed -* Updated chinese localiation -* Duds now have a radioactive AoE effect around them based on type -* HPS is no longer tagged as radioactive and no longer requires hazardous materials tanks to store - * Somehow, these meaningless tags triggered people exceptionally hard. Go annoy someone else. -* Solderers and arc welders can now use overdrive upgrades - * Do note that processing speed rises linearly, but power draw rises exponentially +* The RBMK console's grid can now be rotated using a screwdriver +* Tool abilities have changed + * Righ-clicking while holding ALT now opens a configuration window + * The configuration window allows creation of tool presets + * Area and block abilities can now be toggled independently from each other. For example, the vein miner ability can be combined with silk touch + * Clicking on the same ability allows switching between levels +* Updated textures for the armor and gun modification tables -## Fixed -* Crates? Maybe? -* Fixed conveyor placer not being usable on the conveyor sorter -* Fixed crucible trying to autogen recipes for nonexistant nether thorium ore \ No newline at end of file +## Fixed \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java index 0815d6aec..18db58099 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenToolAbility.java @@ -16,403 +16,387 @@ import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTItemControlPacket; -import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; public class GUIScreenToolAbility extends GuiScreen { - public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/tool/gui_tool_ability.png"); - - protected int guiLeft; - protected int guiTop; - protected int xSize; - protected int ySize; - protected int insetWidth; + public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/tool/gui_tool_ability.png"); - public static class AbilityInfo { - public IBaseAbility ability; - public int textureU, textureV; + protected int guiLeft; + protected int guiTop; + protected int xSize; + protected int ySize; + protected int insetWidth; - public AbilityInfo(IBaseAbility ability, int textureU, int textureV) { - this.ability = ability; - this.textureU = textureU; - this.textureV = textureV; - } - } + public static class AbilityInfo { + public IBaseAbility ability; + public int textureU, textureV; - public static final List abilitiesArea = new ArrayList<>(); - public static final List abilitiesHarvest = new ArrayList<>(); + public AbilityInfo(IBaseAbility ability, int textureU, int textureV) { + this.ability = ability; + this.textureU = textureU; + this.textureV = textureV; + } + } - static { - abilitiesArea.add(new AbilityInfo(IToolAreaAbility.NONE, 0, 91)); - abilitiesArea.add(new AbilityInfo(IToolAreaAbility.RECURSION, 32, 91)); - abilitiesArea.add(new AbilityInfo(IToolAreaAbility.HAMMER, 64, 91)); - abilitiesArea.add(new AbilityInfo(IToolAreaAbility.EXPLOSION, 96, 91)); - - abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.NONE, 0, 107)); - abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SILK, 32, 107)); - abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.LUCK, 64, 107)); - abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SMELTER, 96, 107)); - abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SHREDDER, 128, 107)); - abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.CENTRIFUGE, 160, 107)); - abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.CRYSTALLIZER, 192, 107)); - abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.MERCURY, 224, 107)); - } + public static final List abilitiesArea = new ArrayList<>(); + public static final List abilitiesHarvest = new ArrayList<>(); - protected ItemStack toolStack; - protected AvailableAbilities availableAbilities; - protected ItemToolAbility.Configuration config; - - protected int hoverIdxHarvest = -1; - protected int hoverIdxArea = -1; - protected int hoverIdxExtraBtn = -1; - - public GUIScreenToolAbility(AvailableAbilities availableAbilities) { - super(); - - this.availableAbilities = availableAbilities; - - this.xSize = 186; // Note: increased dynamically - this.ySize = 76; + static { + abilitiesArea.add(new AbilityInfo(IToolAreaAbility.NONE, 0, 91)); + abilitiesArea.add(new AbilityInfo(IToolAreaAbility.RECURSION, 32, 91)); + abilitiesArea.add(new AbilityInfo(IToolAreaAbility.HAMMER, 64, 91)); + abilitiesArea.add(new AbilityInfo(IToolAreaAbility.EXPLOSION, 96, 91)); - this.insetWidth = 20 * Math.max(abilitiesArea.size() - 4, abilitiesHarvest.size() - 8); - this.xSize += insetWidth; - } + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.NONE, 0, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SILK, 32, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.LUCK, 64, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SMELTER, 96, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SHREDDER, 128, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.CENTRIFUGE, 160, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.CRYSTALLIZER, 192, 107)); + abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.MERCURY, 224, 107)); + } - @Override - public void initGui() { - this.toolStack = this.mc.thePlayer.getHeldItem(); + protected ItemStack toolStack; + protected AvailableAbilities availableAbilities; + protected ItemToolAbility.Configuration config; - if(this.toolStack == null) { - doClose(); - } + protected int hoverIdxHarvest = -1; + protected int hoverIdxArea = -1; + protected int hoverIdxExtraBtn = -1; - this.config = ((ItemToolAbility) this.toolStack.getItem()).getConfiguration(this.toolStack); - - guiLeft = (width - xSize) / 2; - guiTop = (height - ySize) / 2; - } + public GUIScreenToolAbility(AvailableAbilities availableAbilities) { + super(); - @Override - public void drawScreen(int mouseX, int mouseY, float f) { - this.drawDefaultBackground(); + this.availableAbilities = availableAbilities; - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + this.xSize = 186; // Note: increased dynamically + this.ySize = 76; - // Draw window background - drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 87); - - // Draw the switches - ToolPreset activePreset = config.getActivePreset(); - hoverIdxArea = drawSwitches(abilitiesArea, activePreset.areaAbility, activePreset.areaAbilityLevel, guiLeft + 15, guiTop + 25, mouseX, mouseY); - hoverIdxHarvest = drawSwitches(abilitiesHarvest, activePreset.harvestAbility, activePreset.harvestAbilityLevel, guiLeft + 15, guiTop + 45, mouseX, mouseY); + this.insetWidth = 20 * Math.max(abilitiesArea.size() - 4, abilitiesHarvest.size() - 8); + this.xSize += insetWidth; + } - // Draw preset indicator - drawNumber(config.currentPreset + 1, guiLeft + insetWidth + 115, guiTop + 25); - drawNumber(config.presets.size(), guiLeft + insetWidth + 149, guiTop + 25); + @Override + public void initGui() { + this.toolStack = this.mc.thePlayer.getHeldItem(); - // Draw extra buttons hover highlights - int extraBtnsX = guiLeft + xSize - 86; - - hoverIdxExtraBtn = -1; - for (int i = 0; i < 7; ++i) { - if (isInAABB(mouseX, mouseY, extraBtnsX + i * 11, guiTop + 11, 9, 9)) { - hoverIdxExtraBtn = i; - drawTexturedModalRect(extraBtnsX + i * 11, guiTop + 11, 193 + i * 9, 0, 9, 9); - } - } + if(this.toolStack == null) { + doClose(); + } - // Draw tooltip - String tooltipValue = ""; + this.config = ((ItemToolAbility) this.toolStack.getItem()).getConfiguration(this.toolStack); - if (hoverIdxArea != -1) { - int level = 0; - if (abilitiesArea.get(hoverIdxArea).ability == activePreset.areaAbility) { - level = activePreset.areaAbilityLevel; - } - tooltipValue = abilitiesArea.get(hoverIdxArea).ability.getFullName(level); - } else if (hoverIdxHarvest != -1) { - int level = 0; - if (abilitiesHarvest.get(hoverIdxHarvest).ability == activePreset.harvestAbility) { - level = activePreset.harvestAbilityLevel; - } - tooltipValue = abilitiesHarvest.get(hoverIdxHarvest).ability.getFullName(level); - } else if (hoverIdxExtraBtn != -1) { - switch (hoverIdxExtraBtn) { - case 0: tooltipValue = "Reset all presets"; break; - case 1: tooltipValue = "Delete current preset"; break; - case 2: tooltipValue = "Add new preset"; break; - case 3: tooltipValue = "Select first preset"; break; - case 4: tooltipValue = "Next preset"; break; - case 5: tooltipValue = "Previous preset"; break; - case 6: tooltipValue = "Close window"; break; - } - } + guiLeft = (width - xSize) / 2; + guiTop = (height - ySize) / 2; + } - if (!tooltipValue.isEmpty()) { - int tooltipWidth = Math.max(6, fontRendererObj.getStringWidth(tooltipValue)); - int tooltipX = guiLeft + xSize / 2 - tooltipWidth / 2; - int tooltipY = guiTop + ySize + 1 + 4; - drawStretchedRect(tooltipX - 5, tooltipY - 4, 0, 76, tooltipWidth + 10, 186, 15, 3, 3); - fontRendererObj.drawString(tooltipValue, tooltipX, tooltipY, 0xffffffff); - } - } + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + this.drawDefaultBackground(); - protected void drawStretchedRect(int x, int y, int u, int v, int realWidth, int width, int height, int keepLeft, int keepRight) { - int midWidth = width - keepLeft - keepRight; - int realMidWidth = realWidth - keepLeft - keepRight; - drawTexturedModalRect(x, y, u, v, keepLeft, height); - for (int i = 0; i < realMidWidth; i += midWidth) { - drawTexturedModalRect(x + keepLeft + i, y, u + keepLeft, v, Math.min(midWidth, realMidWidth - i), height); - } - drawTexturedModalRect(x + keepLeft + realMidWidth, y, u + keepLeft + midWidth, v, keepRight, height); - } + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - protected int drawSwitches(List abilities, IBaseAbility selectedAbility, int selectedLevel, int x, int y, int mouseX, int mouseY) { - int hoverIdx = -1; + // Draw window background + drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 87); - for (int i = 0; i < abilities.size(); ++i) { - AbilityInfo abilityInfo = abilities.get(i); - boolean available = abilityAvailable(abilityInfo.ability); - boolean selected = abilityInfo.ability == selectedAbility; + // Draw the switches + ToolPreset activePreset = config.getActivePreset(); + hoverIdxArea = drawSwitches(abilitiesArea, activePreset.areaAbility, activePreset.areaAbilityLevel, guiLeft + 15, guiTop + 25, mouseX, mouseY); + hoverIdxHarvest = drawSwitches(abilitiesHarvest, activePreset.harvestAbility, activePreset.harvestAbilityLevel, guiLeft + 15, guiTop + 45, mouseX, mouseY); - // Draw switch - drawTexturedModalRect(x + 20 * i, y, abilityInfo.textureU + (available ? 16 : 0), abilityInfo.textureV, 16, 16); - - // Draw level LEDs - if (abilityInfo.ability.levels() > 1) { - int level = 0; + // Draw preset indicator + drawNumber(config.currentPreset + 1, guiLeft + insetWidth + 115, guiTop + 25); + drawNumber(config.presets.size(), guiLeft + insetWidth + 149, guiTop + 25); - if (selected) { - level = selectedLevel + 1; - } + // Draw extra buttons hover highlights + int extraBtnsX = guiLeft + xSize - 86; - // Note: only visual effect for the LEDs - // int maxLevel = Math.min(abilityInfo.ability.levels(), 5); - int maxLevel = 5; - - if (level > 10 || level < 0) { - // All-red LEDs for invalid levels - level = -1; - } + hoverIdxExtraBtn = -1; + for(int i = 0; i < 7; ++i) { + if(isInAABB(mouseX, mouseY, extraBtnsX + i * 11, guiTop + 11, 9, 9)) { + hoverIdxExtraBtn = i; + drawTexturedModalRect(extraBtnsX + i * 11, guiTop + 11, 193 + i * 9, 0, 9, 9); + } + } - drawTexturedModalRect(x + 20 * i + 17, y + 1, 188 + level * 2, maxLevel * 14, 2, 14); - } + // Draw tooltip + String tooltipValue = ""; - boolean isHovered = isInAABB(mouseX, mouseY, x + 20 * i, y, 16, 16); + if(hoverIdxArea != -1) { + int level = 0; + if(abilitiesArea.get(hoverIdxArea).ability == activePreset.areaAbility) { + level = activePreset.areaAbilityLevel; + } + tooltipValue = abilitiesArea.get(hoverIdxArea).ability.getFullName(level); + } else if(hoverIdxHarvest != -1) { + int level = 0; + if(abilitiesHarvest.get(hoverIdxHarvest).ability == activePreset.harvestAbility) { + level = activePreset.harvestAbilityLevel; + } + tooltipValue = abilitiesHarvest.get(hoverIdxHarvest).ability.getFullName(level); + } else if(hoverIdxExtraBtn != -1) { + switch(hoverIdxExtraBtn) { + case 0: tooltipValue = "Reset all presets"; break; + case 1: tooltipValue = "Delete current preset"; break; + case 2: tooltipValue = "Add new preset"; break; + case 3: tooltipValue = "Select first preset"; break; + case 4: tooltipValue = "Next preset"; break; + case 5: tooltipValue = "Previous preset"; break; + case 6: tooltipValue = "Close window"; break; + } + } - if (isHovered) { - hoverIdx = i; - } + if(!tooltipValue.isEmpty()) { + int tooltipWidth = Math.max(6, fontRendererObj.getStringWidth(tooltipValue)); + int tooltipX = guiLeft + xSize / 2 - tooltipWidth / 2; + int tooltipY = guiTop + ySize + 1 + 4; + drawStretchedRect(tooltipX - 5, tooltipY - 4, 0, 76, tooltipWidth + 10, 186, 15, 3, 3); + fontRendererObj.drawString(tooltipValue, tooltipX, tooltipY, 0xffffffff); + } + } - if (selected) { - // Draw selection highlight - drawTexturedModalRect(x + 20 * i - 1, y - 1, 220, 9, 18, 18); - } else if (available && isHovered) { - // Draw hover highlight - drawTexturedModalRect(x + 20 * i - 1, y - 1, 238, 9, 18, 18); - } - } + protected void drawStretchedRect(int x, int y, int u, int v, int realWidth, int width, int height, int keepLeft, int keepRight) { + int midWidth = width - keepLeft - keepRight; + int realMidWidth = realWidth - keepLeft - keepRight; + drawTexturedModalRect(x, y, u, v, keepLeft, height); + for(int i = 0; i < realMidWidth; i += midWidth) { + drawTexturedModalRect(x + keepLeft + i, y, u + keepLeft, v, Math.min(midWidth, realMidWidth - i), height); + } + drawTexturedModalRect(x + keepLeft + realMidWidth, y, u + keepLeft + midWidth, v, keepRight, height); + } - return hoverIdx; - } + protected int drawSwitches(List abilities, IBaseAbility selectedAbility, int selectedLevel, int x, int y, int mouseX, int mouseY) { + int hoverIdx = -1; - protected void drawNumber(int number, int x, int y) { - number += 100; // Against accidental negatives - drawDigit((number / 10) % 10, x, y); - drawDigit(number % 10, x + 12, y); - } + for(int i = 0; i < abilities.size(); ++i) { + AbilityInfo abilityInfo = abilities.get(i); + boolean available = abilityAvailable(abilityInfo.ability); + boolean selected = abilityInfo.ability == selectedAbility; - protected void drawDigit(int digit, int x, int y) { - drawTexturedModalRect(x, y, digit * 10, 123, 10, 15); - } + // Draw switch + drawTexturedModalRect(x + 20 * i, y, abilityInfo.textureU + (available ? 16 : 0), abilityInfo.textureV, 16, 16); - private boolean isInAABB(int mouseX, int mouseY, int x, int y, int width, int height) { - return x <= mouseX && x + width > mouseX && y <= mouseY && y + height > mouseY; - } + // Draw level LEDs + if(abilityInfo.ability.levels() > 1) { + int level = 0; - private boolean abilityAvailable(IBaseAbility ability) { - if (!availableAbilities.supportsAbility(ability)) { - return false; - } + if(selected) { + level = selectedLevel + 1; + } - ToolPreset activePreset = config.getActivePreset(); - if (ability instanceof IToolHarvestAbility && ability != IToolHarvestAbility.NONE && !activePreset.areaAbility.allowsHarvest(activePreset.areaAbilityLevel)) { - return false; - } + // Note: only visual effect for the LEDs + // int maxLevel = Math.min(abilityInfo.ability.levels(), 5); + int maxLevel = 5; - return true; - } + if(level > 10 || level < 0) { + // All-red LEDs for invalid levels + level = -1; + } - // Note: This spuriously trigger way too often, and I can't see why. I'll disable it altogether, I guess - // @Override - // public void updateScreen() { - // EntityPlayer player = this.mc.thePlayer; - // - // if(player.getHeldItem() == null || player.getHeldItem().getItem() != toolStack.getItem()) { - // // TODO: Remove - // MainRegistry.logger.warn("GUIScreenToolAbility.updateScreen: toolStack changed!"); - // player.closeScreen(); - // } - // } + drawTexturedModalRect(x + 20 * i + 17, y + 1, 188 + level * 2, maxLevel * 14, 2, 14); + } - @Override - public void handleMouseInput() { - super.handleMouseInput(); + boolean isHovered = isInAABB(mouseX, mouseY, x + 20 * i, y, 16, 16); - if(Mouse.getEventButton() == -1) { - int scroll = Mouse.getEventDWheel(); + if(isHovered) { + hoverIdx = i; + } - if(scroll < 0) doPrevPreset(true); - if(scroll > 0) doNextPreset(true); - } - } + if(selected) { + // Draw selection highlight + drawTexturedModalRect(x + 20 * i - 1, y - 1, 220, 9, 18, 18); + } else if(available && isHovered) { + // Draw hover highlight + drawTexturedModalRect(x + 20 * i - 1, y - 1, 238, 9, 18, 18); + } + } - @Override - protected void mouseClicked(int mouseX, int mouseY, int button) { - ToolPreset activePreset = config.getActivePreset(); - - // Process switches - Pair clickResult; + return hoverIdx; + } - clickResult = handleSwitchesClicked(abilitiesArea, activePreset.areaAbility, activePreset.areaAbilityLevel, hoverIdxArea, mouseX, mouseY); - activePreset.areaAbility = (IToolAreaAbility)clickResult.key; - activePreset.areaAbilityLevel = clickResult.value; + protected void drawNumber(int number, int x, int y) { + number += 100; // Against accidental negatives + drawDigit((number / 10) % 10, x, y); + drawDigit(number % 10, x + 12, y); + } - clickResult = handleSwitchesClicked(abilitiesHarvest, activePreset.harvestAbility, activePreset.harvestAbilityLevel, hoverIdxHarvest, mouseX, mouseY); - activePreset.harvestAbility = (IToolHarvestAbility)clickResult.key; - activePreset.harvestAbilityLevel = clickResult.value; + protected void drawDigit(int digit, int x, int y) { + drawTexturedModalRect(x, y, digit * 10, 123, 10, 15); + } - if (!activePreset.areaAbility.allowsHarvest(activePreset.areaAbilityLevel)) { - activePreset.harvestAbility = IToolHarvestAbility.NONE; - activePreset.harvestAbilityLevel = 0; - } + private boolean isInAABB(int mouseX, int mouseY, int x, int y, int width, int height) { + return x <= mouseX && x + width > mouseX && y <= mouseY && y + height > mouseY; + } - // Process extra buttons - if (hoverIdxExtraBtn != -1) { - switch (hoverIdxExtraBtn) { - case 0: doResetPresets(); break; - case 1: doDelPreset(); break; - case 2: doAddPreset(); break; - case 3: doZeroPreset(); break; - case 4: doNextPreset(false); break; - case 5: doPrevPreset(false); break; - case 6: doClose(); break; - } + private boolean abilityAvailable(IBaseAbility ability) { + if(!availableAbilities.supportsAbility(ability)) { + return false; + } - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F)); - } + ToolPreset activePreset = config.getActivePreset(); + if(ability instanceof IToolHarvestAbility && ability != IToolHarvestAbility.NONE && !activePreset.areaAbility.allowsHarvest(activePreset.areaAbilityLevel)) { + return false; + } - // Allow quick-closing - if (!isInAABB(mouseX, mouseY, guiLeft, guiTop, xSize, ySize)) { - MainRegistry.logger.info("GUIScreenToolAbility.mouseClicked: Clicked outside GUI, closing..."); - doClose(); - } - } + return true; + } - protected Pair handleSwitchesClicked(List abilities, IBaseAbility selectedAbility, int selectedLevel, int hoverIdx, int mouseX, int mouseY) { - if (hoverIdx != -1) { - IBaseAbility hoveredAbility = abilities.get(hoverIdx).ability; - boolean available = abilityAvailable(hoveredAbility); + @Override + public void handleMouseInput() { + super.handleMouseInput(); - if (available) { - int availableLevels = availableAbilities.maxLevel(hoveredAbility) + 1; + if(Mouse.getEventButton() == -1) { + int scroll = Mouse.getEventDWheel(); - if (hoveredAbility != selectedAbility || availableLevels > 1) { - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F)); - } + if(scroll < 0) doPrevPreset(true); + if(scroll > 0) doNextPreset(true); + } + } - if (hoveredAbility == selectedAbility) { - selectedLevel = (selectedLevel + 1) % availableLevels; - } else { - selectedLevel = 0; - } + @Override + protected void mouseClicked(int mouseX, int mouseY, int button) { + ToolPreset activePreset = config.getActivePreset(); - selectedAbility = hoveredAbility; - } - } + // Process switches + Pair clickResult; - return new Pair<>(selectedAbility, selectedLevel); - } + clickResult = handleSwitchesClicked(abilitiesArea, activePreset.areaAbility, activePreset.areaAbilityLevel, hoverIdxArea, mouseX, mouseY); + activePreset.areaAbility = (IToolAreaAbility) clickResult.key; + activePreset.areaAbilityLevel = clickResult.value; - @Override - protected void keyTyped(char c, int key) { - if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) { - doClose(); - return; - } - - super.keyTyped(c, key); - } - - @Override - public boolean doesGuiPauseGame() { - return false; - } + clickResult = handleSwitchesClicked(abilitiesHarvest, activePreset.harvestAbility, activePreset.harvestAbilityLevel, hoverIdxHarvest, mouseX, mouseY); + activePreset.harvestAbility = (IToolHarvestAbility) clickResult.key; + activePreset.harvestAbilityLevel = clickResult.value; - protected void doResetPresets() { - config.reset(availableAbilities); - } + if(!activePreset.areaAbility.allowsHarvest(activePreset.areaAbilityLevel)) { + activePreset.harvestAbility = IToolHarvestAbility.NONE; + activePreset.harvestAbilityLevel = 0; + } - protected void doDelPreset() { - if (config.presets.size() <= 1) { - return; - } - config.presets.remove(config.currentPreset); - config.currentPreset = Math.min(config.currentPreset, config.presets.size() - 1); - } + // Process extra buttons + if(hoverIdxExtraBtn != -1) { + switch(hoverIdxExtraBtn) { + case 0: doResetPresets(); break; + case 1: doDelPreset(); break; + case 2: doAddPreset(); break; + case 3: doZeroPreset(); break; + case 4: doNextPreset(false); break; + case 5: doPrevPreset(false); break; + case 6: doClose(); break; + } - protected void doAddPreset() { - if (config.presets.size() >= 99) { - return; - } + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F)); + } - config.presets.add(config.currentPreset + 1, new ToolPreset()); - config.currentPreset += 1; - } + // Allow quick-closing + if(!isInAABB(mouseX, mouseY, guiLeft, guiTop, xSize, ySize)) { + doClose(); + } + } - protected void doZeroPreset() { - config.currentPreset = 0; - } + protected Pair handleSwitchesClicked(List abilities, IBaseAbility selectedAbility, int selectedLevel, int hoverIdx, int mouseX, int mouseY) { + if(hoverIdx != -1) { + IBaseAbility hoveredAbility = abilities.get(hoverIdx).ability; + boolean available = abilityAvailable(hoveredAbility); - protected void doNextPreset(boolean bound) { - if (bound) { - if (config.currentPreset < config.presets.size() - 1) { - config.currentPreset += 1; - } - } else { - config.currentPreset = (config.currentPreset + 1) % config.presets.size(); - } - } + if(available) { + int availableLevels = availableAbilities.maxLevel(hoveredAbility) + 1; - protected void doPrevPreset(boolean bound) { - if (bound) { - if (config.currentPreset > 0) { - config.currentPreset -= 1; - } - } else { - config.currentPreset = (config.currentPreset + config.presets.size() - 1) % config.presets.size(); - } - } + if(hoveredAbility != selectedAbility || availableLevels > 1) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F)); + } - protected void doClose() { - // A bit messy, but I suppose it works - ((ItemToolAbility) this.toolStack.getItem()).setConfiguration(toolStack, config); - PacketDispatcher.wrapper.sendToServer(new NBTItemControlPacket(this.toolStack.getTagCompound())); + if(hoveredAbility == selectedAbility) { + selectedLevel = (selectedLevel + 1) % availableLevels; + } else { + selectedLevel = 0; + } - this.mc.thePlayer.closeScreen(); + selectedAbility = hoveredAbility; + } + } - MainRegistry.proxy.displayTooltip(config.getActivePreset().getMessage().getFormattedText(), MainRegistry.proxy.ID_TOOLABILITY); + return new Pair<>(selectedAbility, selectedLevel); + } + + @Override + protected void keyTyped(char c, int key) { + if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) { + doClose(); + return; + } + + super.keyTyped(c, key); + } + + @Override + public boolean doesGuiPauseGame() { + return false; + } + + protected void doResetPresets() { + config.reset(availableAbilities); + } + + protected void doDelPreset() { + if(config.presets.size() <= 1) { + return; + } + config.presets.remove(config.currentPreset); + config.currentPreset = Math.min(config.currentPreset, config.presets.size() - 1); + } + + protected void doAddPreset() { + if(config.presets.size() >= 99) { + return; + } + + config.presets.add(config.currentPreset + 1, new ToolPreset()); + config.currentPreset += 1; + } + + protected void doZeroPreset() { + config.currentPreset = 0; + } + + protected void doNextPreset(boolean bound) { + if(bound) { + if(config.currentPreset < config.presets.size() - 1) { + config.currentPreset += 1; + } + } else { + config.currentPreset = (config.currentPreset + 1) % config.presets.size(); + } + } + + protected void doPrevPreset(boolean bound) { + if(bound) { + if(config.currentPreset > 0) { + config.currentPreset -= 1; + } + } else { + config.currentPreset = (config.currentPreset + config.presets.size() - 1) % config.presets.size(); + } + } + + protected void doClose() { + // A bit messy, but I suppose it works + ((ItemToolAbility) this.toolStack.getItem()).setConfiguration(toolStack, config); + PacketDispatcher.wrapper.sendToServer(new NBTItemControlPacket(this.toolStack.getTagCompound())); + + this.mc.thePlayer.closeScreen(); + + MainRegistry.proxy.displayTooltip(config.getActivePreset().getMessage().getFormattedText(), MainRegistry.proxy.ID_TOOLABILITY); this.mc.theWorld.playSoundAtEntity(this.mc.thePlayer, "random.orb", 0.25F, config.getActivePreset().isNone() ? 0.75F : 1.25F); - } + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/items/tool/ItemGuideBook.java b/src/main/java/com/hbm/items/tool/ItemGuideBook.java index 948638f0f..920344cab 100644 --- a/src/main/java/com/hbm/items/tool/ItemGuideBook.java +++ b/src/main/java/com/hbm/items/tool/ItemGuideBook.java @@ -39,7 +39,7 @@ public class ItemGuideBook extends Item implements IGUIProvider { public void getSubItems(Item item, CreativeTabs tab, List list) { for(int i = 1; i < BookType.values().length; i++) - list.add(new ItemStack(item, 1, i)); + if(i != 2) list.add(new ItemStack(item, 1, i)); } @Override diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 6fd951e9e..b23fe62d8 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -24,11 +24,9 @@ import com.hbm.handler.ability.ToolPreset; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; -import com.hbm.packet.toserver.NBTItemControlPacket; import com.hbm.tileentity.IGUIProvider; import api.hbm.item.IDepthRockTool; -import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index c1b471e74..76646f307 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -929,7 +929,6 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.TEST.ordinal()), new Object[] { Items.book, ModItems.canned_conserve.stackFromEnum(EnumFoodType.JIZZ) }); addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.RBMK.ordinal()), new Object[] { Items.book, Items.potato }); - addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.HADRON.ordinal()), new Object[] { Items.book, ModItems.fuse }); addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.STARTER.ordinal()), new Object[] { Items.book, Items.iron_ingot }); addRecipeAuto(new ItemStack(ModBlocks.charger), new Object[] { "G", "S", "C", 'G', Items.glowstone_dust, 'S', STEEL.ingot(), 'C', ModItems.coil_copper }); diff --git a/src/main/resources/assets/hbm/models/weapons/launch_pad_erector.obj b/src/main/resources/assets/hbm/models/weapons/launch_pad_erector.obj index 6e1c08cdd..9ac4f0251 100644 --- a/src/main/resources/assets/hbm/models/weapons/launch_pad_erector.obj +++ b/src/main/resources/assets/hbm/models/weapons/launch_pad_erector.obj @@ -1,4493 +1,8702 @@ -# Blender v2.79 (sub 0) OBJ File: 'launch_pad_erector.blend' +# Blender v2.79 (sub 0) OBJ File: '' # www.blender.org -o ABM_Pivot -v 0.125000 1.250000 -1.375000 -v 0.375000 1.250000 -1.375000 -v 0.125000 1.250000 -1.625000 -v 0.375000 1.250000 -1.625000 -v -0.375000 1.250000 -1.375000 -v -0.125000 1.250000 -1.375000 -v -0.375000 1.250000 -1.625000 -v -0.125000 1.250000 -1.625000 -v 0.125000 2.750000 -1.625000 -v 0.125000 2.750000 -1.375000 -v 0.375000 2.750000 -1.375000 -v 0.375000 2.750000 -1.625000 -v -0.375000 2.750000 -1.625000 -v -0.375000 2.750000 -1.375000 -v -0.125000 2.750000 -1.375000 -v -0.125000 2.750000 -1.625000 -v 0.187500 2.750000 -1.437500 -v 0.312500 2.750000 -1.437500 -v 0.187500 2.750000 -1.562500 -v 0.312500 2.750000 -1.562500 -v 0.187500 3.750000 -1.437500 -v 0.312500 3.750000 -1.437500 -v 0.187500 3.750000 -1.562500 -v 0.312500 3.750000 -1.562500 -v -0.312500 2.750000 -1.437500 -v -0.187500 2.750000 -1.437500 -v -0.312500 2.750000 -1.562500 -v -0.187500 2.750000 -1.562500 -v -0.312500 3.750000 -1.437500 -v -0.187500 3.750000 -1.437500 -v -0.312500 3.750000 -1.562500 -v -0.187500 3.750000 -1.562500 -v 0.125000 2.312500 -1.437500 -v 0.125000 2.187500 -1.437500 -v 0.125000 2.312500 -1.562500 -v 0.125000 2.187500 -1.562500 -v -0.125000 2.312500 -1.562500 -v -0.125000 2.312500 -1.437500 -v -0.125000 2.187500 -1.437500 -v -0.125000 2.187500 -1.562500 -vt 0.750000 0.227273 -vt 0.729167 0.136364 -vt 0.750000 0.136364 -vt 0.791667 0.227273 -vt 0.770833 0.136364 -vt 0.791667 0.136364 -vt 0.666667 0.159091 -vt 0.708333 0.136364 -vt 0.708333 0.159091 -vt 0.666667 0.159091 -vt 0.708333 0.136364 -vt 0.708333 0.159091 -vt 0.833333 -0.000000 -vt 0.791667 0.136364 -vt 0.791667 -0.000000 -vt 0.750000 -0.000000 -vt 0.708333 -0.000000 -vt 0.833333 -0.000000 -vt 0.791667 0.136364 -vt 0.791667 -0.000000 -vt 0.750000 -0.000000 -vt 0.708333 -0.000000 -vt 0.666667 0.136364 -vt 0.666667 -0.000000 -vt 0.750000 0.136364 -vt 0.666667 0.136364 -vt 0.666667 -0.000000 -vt 0.750000 0.136364 -vt 0.729167 0.227273 -vt 0.708333 0.136364 -vt 0.770833 0.227273 -vt 0.750000 0.227273 -vt 0.729167 0.136364 -vt 0.750000 0.136364 -vt 0.791667 0.227273 -vt 0.770833 0.136364 -vt 0.791667 0.136364 -vt 0.729167 0.227273 -vt 0.708333 0.136364 -vt 0.770833 0.227273 -vt 0.708333 0.170455 -vt 0.666667 0.181818 -vt 0.666667 0.170455 -vt 0.708333 0.193182 -vt 0.666667 0.204545 -vt 0.666667 0.193182 -vt 0.708333 0.159091 -vt 0.666667 0.159091 -vt 0.708333 0.181818 -vt 0.833333 0.136364 -vt 0.833333 0.136364 -vt 0.708333 0.227273 -vt 0.708333 0.227273 -vt 0.708333 0.204545 -vn -1.0000 0.0000 0.0000 +o Pad +v 4.500000 -0.000000 4.500000 +v 4.500000 1.000000 0.500000 +v 4.500000 1.000000 4.500000 +v -4.500000 1.000000 0.500000 +v 4.500000 -0.000000 0.500000 +v -4.500000 -0.000000 0.500000 +v -4.500000 1.000000 4.500000 +v -4.500000 0.000000 -4.500000 +v 4.500000 1.000000 -4.500000 +v 4.500000 0.000000 -4.500000 +v -4.500000 -0.000000 4.500000 +v 4.500000 1.000000 -0.500000 +v -4.500000 0.000000 -0.500000 +v 4.500000 0.000000 -0.500000 +v -4.500000 1.000000 -0.500000 +v -4.500000 1.000000 -4.500000 +v 0.500000 1.000000 -0.500000 +v 4.500000 1.000000 0.500000 +v 4.500000 1.000000 -0.500000 +v -4.500000 1.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v -4.500000 1.000000 -0.500000 +v 0.500000 1.000000 0.250000 +v 4.500000 0.750000 0.500000 +v 0.500000 0.750000 0.500000 +v 0.500000 1.000000 -0.250000 +v 4.500000 1.000000 0.250000 +v 0.500000 0.750000 -0.500000 +v 4.500000 1.000000 -0.250000 +v -4.500000 0.750000 0.500000 +v -4.500000 1.000000 0.500000 +v -4.500000 1.000000 0.250000 +v -4.500000 0.750000 -0.500000 +v -4.500000 1.000000 -0.250000 +v -4.500000 1.000000 -0.500000 +v 4.500000 1.000000 0.500000 +v 4.500000 0.750000 -0.500000 +v 4.500000 1.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v 0.500000 1.000000 0.500000 +v -0.500000 0.750000 -0.500000 +v -0.500000 1.000000 -0.500000 +v -0.500000 1.000000 -0.250000 +v -0.500000 0.750000 0.500000 +v -0.500000 1.000000 0.250000 +v -0.500000 1.000000 0.500000 +v 0.500000 -0.000000 0.500000 +v 0.000000 0.500000 -0.500000 +v 0.000000 0.500000 0.500000 +v -0.500000 0.000000 -0.500000 +v -0.500000 -0.000000 0.500000 +v 0.500000 0.000000 -0.500000 +v 0.500000 1.000000 0.500000 +v -0.500000 1.000000 0.500000 +vt 0.000000 0.473684 +vt 0.400000 0.526316 +vt 0.000000 0.526316 +vt 0.900000 0.526316 +vt 0.000000 0.473684 +vt 0.900000 0.473684 +vt 0.400000 1.000000 +vt 0.000000 1.000000 +vt 0.900000 0.473684 +vt -0.000000 0.526316 +vt -0.000000 0.473684 +vt 0.900000 0.473684 +vt -0.000000 0.526316 +vt -0.000000 0.473684 +vt 0.900000 0.526316 +vt 0.500000 0.473684 +vt 0.900000 0.473684 +vt 0.000000 0.000000 +vt 0.400000 0.473684 +vt 0.900000 0.526316 +vt -0.000000 0.473684 +vt 0.900000 0.473684 +vt 0.900000 0.526316 +vt 0.500000 0.473684 +vt 0.900000 0.473684 +vt 0.000000 0.473684 +vt 0.400000 0.526316 +vt 0.000000 0.526316 +vt 0.900000 1.000000 +vt 0.500000 0.526316 +vt 0.500000 0.000000 +vt 0.900000 0.000000 +vt 0.500000 0.736842 +vt 0.400000 0.526316 +vt 0.500000 0.526316 +vt 0.400000 1.000000 +vt 0.500000 0.789474 +vt 0.500000 1.000000 +vt 0.925000 0.539474 +vt 0.900000 0.750000 +vt 0.900000 0.539474 +vt 0.975000 0.539474 +vt 0.925000 0.750000 +vt 1.000000 0.539474 +vt 0.975000 0.750000 +vt 1.000000 0.763158 +vt 1.000000 0.776316 +vt 0.975000 0.776316 +vt 0.900000 0.763158 +vt 0.925000 0.776316 +vt 0.900000 0.776316 +vt 1.000000 0.763158 +vt 0.975000 0.750000 +vt 1.000000 0.750000 +vt 0.900000 0.763158 +vt 0.900000 0.750000 +vt 0.925000 0.750000 +vt 0.900000 0.526316 +vt 0.925000 0.539474 +vt 0.900000 0.539474 +vt 1.000000 0.526316 +vt 1.000000 0.539474 +vt 0.975000 0.539474 +vt 0.900000 1.000000 +vt 0.900000 0.986842 +vt 0.925000 0.986842 +vt 1.000000 1.000000 +vt 0.975000 0.986842 +vt 1.000000 0.986842 +vt 1.000000 0.776316 +vt 0.975000 0.986842 +vt 0.975000 0.776316 +vt 0.925000 0.986842 +vt 0.925000 0.776316 +vt 0.900000 0.986842 +vt 0.900000 0.776316 +vt 0.900000 0.473684 +vt 1.000000 0.500000 +vt 0.900000 0.500000 +vt 1.000000 0.526316 +vt 0.900000 0.526316 +vt 1.000000 0.473684 +vt 0.900000 0.421053 +vt 1.000000 0.421053 +vt 0.000000 0.526316 +vt 0.900000 0.526316 +vt 0.900000 0.526316 +vt 0.500000 0.526316 +vt 0.400000 0.000000 +vt -0.000000 0.526316 +vt 0.400000 0.473684 +vt 0.500000 1.000000 +vt 0.400000 0.736842 +vt 0.400000 0.789474 +vt 1.000000 0.750000 +vt 1.000000 0.986842 vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.7071 0.7071 0.0000 +vn -0.7071 0.7071 0.0000 s off -f 21/1/1 19/2/1 17/3/1 -f 24/4/2 18/5/2 20/6/2 -f 11/7/3 9/8/3 10/9/3 -f 15/10/3 13/11/3 14/12/3 -f 8/13/2 15/14/2 6/15/2 -f 5/16/1 13/11/1 7/17/1 -f 4/18/2 11/19/2 2/20/2 -f 1/21/1 9/8/1 3/22/1 -f 7/17/4 16/23/4 8/24/4 -f 6/15/5 14/25/5 5/16/5 -f 3/22/4 12/26/4 4/27/4 -f 2/20/5 10/28/5 1/21/5 -f 23/29/4 20/30/4 19/2/4 -f 22/31/5 17/3/5 18/5/5 -f 29/32/1 27/33/1 25/34/1 -f 32/35/2 26/36/2 28/37/2 -f 31/38/4 28/39/4 27/33/4 -f 30/40/5 25/34/5 26/36/5 -f 40/41/4 35/42/4 36/43/4 -f 38/44/5 34/45/5 33/46/5 -f 39/47/6 36/43/6 34/48/6 -f 37/49/3 33/46/3 35/42/3 -f 21/1/1 23/29/1 19/2/1 -f 24/4/2 22/31/2 18/5/2 -f 11/7/3 12/26/3 9/8/3 -f 15/10/3 16/23/3 13/11/3 -f 8/13/2 16/50/2 15/14/2 -f 5/16/1 14/25/1 13/11/1 -f 4/18/2 12/51/2 11/19/2 -f 1/21/1 10/28/1 9/8/1 -f 7/17/4 13/11/4 16/23/4 -f 6/15/5 15/14/5 14/25/5 -f 3/22/4 9/8/4 12/26/4 -f 2/20/5 11/19/5 10/28/5 -f 23/29/4 24/52/4 20/30/4 -f 22/31/5 21/1/5 17/3/5 -f 29/32/1 31/38/1 27/33/1 -f 32/35/2 30/40/2 26/36/2 -f 31/38/4 32/53/4 28/39/4 -f 30/40/5 29/32/5 25/34/5 -f 40/41/4 37/49/4 35/42/4 -f 38/44/5 39/54/5 34/45/5 -f 39/47/6 40/41/6 36/43/6 -f 37/49/3 38/44/3 33/46/3 -o ABM_Rope -v 0.000000 10.500000 1.437500 -v 0.000000 10.375000 1.437500 -v 0.000000 10.500000 0.000000 -v 0.000000 10.375000 0.000000 -v 0.000000 10.375000 1.062500 -v 0.000000 10.250000 1.062500 -v 0.000000 10.375000 0.375000 -v 0.000000 10.250000 0.375000 -v 0.000000 10.500000 1.437500 -v 0.000000 10.375000 1.437500 -v 0.000000 10.500000 0.000000 -v 0.000000 10.375000 0.000000 -v 0.000000 10.375000 1.062500 -v 0.000000 10.250000 1.062500 -v 0.000000 10.375000 0.375000 -v 0.000000 10.250000 0.375000 -vt 0.593750 0.920455 -vt 0.656250 0.909091 -vt 0.656250 0.920455 -vt 0.593750 0.909091 -vt 0.479167 0.920455 -vt 0.479167 0.909091 -vt 0.416667 0.909091 -vt 0.416667 0.920455 -vt 0.656250 0.909091 -vt 0.593750 0.920455 -vt 0.656250 0.920455 -vt 0.479167 0.920455 -vt 0.593750 0.909091 -vt 0.479167 0.909091 -vt 0.416667 0.909091 -vt 0.416667 0.920455 +f 1/1/1 2/2/1 3/3/1 +f 4/4/2 5/5/2 6/6/2 +f 3/3/3 4/7/3 7/8/3 +f 8/9/2 9/10/2 10/11/2 +f 1/12/4 7/13/4 11/14/4 +f 7/15/5 6/16/5 11/17/5 +f 11/18/6 5/19/6 1/1/6 +f 12/20/4 13/21/4 14/22/4 +f 9/23/1 14/24/1 10/25/1 +f 8/26/5 15/27/5 16/28/5 +f 16/29/3 12/30/3 9/23/3 +f 10/25/6 13/31/6 8/32/6 +f 17/33/3 18/34/3 19/35/3 +f 20/36/3 21/37/3 22/38/3 +f 23/39/7 24/40/7 25/41/7 +f 26/42/6 27/43/6 23/39/6 +f 28/44/8 29/45/8 26/42/8 +f 30/46/5 31/47/5 32/48/5 +f 33/49/5 34/50/5 35/51/5 +f 24/52/1 27/53/1 36/54/1 +f 37/55/1 38/56/1 29/57/1 +f 28/58/5 26/59/5 39/60/5 +f 25/61/5 40/62/5 23/63/5 +f 41/64/1 42/65/1 43/66/1 +f 44/67/1 45/68/1 46/69/1 +f 33/70/8 43/71/8 34/72/8 +f 34/72/6 45/73/6 32/74/6 +f 32/74/7 44/75/7 30/76/7 +f 47/77/9 48/78/9 49/79/9 +f 49/79/10 50/80/10 51/81/10 +f 52/82/6 51/83/6 50/84/6 +f 1/1/1 5/19/1 2/2/1 +f 4/4/2 2/85/2 5/5/2 +f 3/3/3 2/2/3 4/7/3 +f 8/9/2 16/86/2 9/10/2 +f 1/12/4 3/87/4 7/13/4 +f 7/15/5 4/88/5 6/16/5 +f 11/18/6 6/89/6 5/19/6 +f 12/20/4 15/90/4 13/21/4 +f 9/23/1 12/30/1 14/24/1 +f 8/26/5 13/91/5 15/27/5 +f 16/29/3 15/92/3 12/30/3 +f 10/25/6 14/24/6 13/31/6 +f 17/33/3 53/93/3 18/34/3 +f 20/36/3 54/94/3 21/37/3 +f 23/39/7 27/43/7 24/40/7 +f 26/42/6 29/45/6 27/43/6 +f 28/44/8 37/95/8 29/45/8 +f 33/70/8 41/96/8 43/71/8 +f 34/72/6 43/71/6 45/73/6 +f 32/74/7 45/73/7 44/75/7 +f 47/77/9 52/82/9 48/78/9 +f 49/79/10 48/78/10 50/80/10 +f 52/82/6 47/77/6 51/83/6 +o V2_Erector +v -0.500000 7.750000 0.125000 +v -0.750000 7.750000 -0.125000 +v -0.750000 7.750000 0.125000 +v 0.750000 7.750000 0.125000 +v 0.500000 7.750000 -0.125000 +v 0.500000 7.750000 0.125000 +v -0.750000 4.250000 -0.125000 +v -0.500000 4.250000 0.125000 +v -0.750000 4.250000 0.125000 +v 0.500000 4.250000 -0.125000 +v 0.750000 4.250000 0.125000 +v 0.500000 4.250000 0.125000 +v 0.500000 2.750000 -1.875000 +v 0.750000 2.750000 -1.625000 +v 0.500000 2.750000 -1.625000 +v -0.750000 2.750000 -1.875000 +v -0.500000 2.750000 -1.625000 +v -0.750000 2.750000 -1.625000 +v 0.750000 7.750000 -1.625000 +v 0.500000 7.750000 -1.875000 +v 0.500000 7.750000 -1.625000 +v -0.500000 7.750000 -1.625000 +v -0.750000 7.750000 -1.875000 +v -0.750000 7.750000 -1.625000 +v -0.500000 2.750000 -1.875000 +v 0.750000 2.750000 -1.875000 +v -0.500000 7.750000 -1.875000 +v 0.750000 7.750000 -1.875000 +v -0.500000 4.250000 -0.125000 +v 0.750000 4.250000 -0.125000 +v -0.500000 7.750000 -0.125000 +v 0.750000 7.750000 -0.125000 +v -0.500000 7.250000 -0.125000 +v -0.250000 7.250000 -0.625000 +v -0.750000 7.250000 -0.125000 +v 0.750000 7.250000 -0.125000 +v 0.250000 7.250000 -0.375000 +v 0.500000 7.250000 -0.125000 +v 0.250000 7.250000 -0.625000 +v -0.250000 5.000000 -0.625000 +v 0.250000 5.000000 -0.375000 +v 0.250000 5.000000 -0.625000 +v 0.750000 5.000000 -0.125000 +v 0.500000 5.000000 -0.125000 +v -0.500000 5.000000 -0.125000 +v -0.750000 5.000000 -0.125000 +v -0.250000 5.000000 -0.375000 +v 0.250000 4.750000 -0.375000 +v -0.750000 4.750000 -0.125000 +v 0.500000 4.750000 -0.125000 +v -0.250000 4.750000 -0.625000 +v -0.250000 4.750000 -0.375000 +v 0.250000 4.750000 -0.625000 +v 0.750000 4.750000 -0.125000 +v -0.500000 4.750000 -0.125000 +v 0.750000 7.375000 -1.625000 +v 0.750000 7.625000 -0.125000 +v 0.750000 7.375000 -0.125000 +v 0.500000 7.375000 -1.625000 +v 0.500000 7.375000 -0.125000 +v 0.500000 7.625000 -1.625000 +v 0.500000 7.625000 -0.125000 +v -0.500000 7.375000 -1.625000 +v -0.500000 7.625000 -0.125000 +v -0.500000 7.375000 -0.125000 +v -0.750000 7.375000 -1.625000 +v -0.750000 7.375000 -0.125000 +v -0.750000 7.625000 -1.625000 +v -0.750000 7.625000 -0.125000 +v 0.750000 4.375000 -1.625000 +v 0.750000 4.625000 -0.125000 +v 0.750000 4.375000 -0.125000 +v 0.500000 4.375000 -1.625000 +v 0.500000 4.375000 -0.125000 +v 0.500000 4.625000 -1.625000 +v 0.500000 4.625000 -0.125000 +v -0.500000 4.375000 -1.625000 +v -0.500000 4.625000 -0.125000 +v -0.500000 4.375000 -0.125000 +v -0.750000 4.375000 -1.625000 +v -0.750000 4.375000 -0.125000 +v -0.750000 4.625000 -1.625000 +v -0.750000 4.625000 -0.125000 +v 0.750000 5.875000 -1.625000 +v 0.750000 6.125000 -0.125000 +v 0.750000 5.875000 -0.125000 +v 0.500000 5.875000 -1.625000 +v 0.500000 5.875000 -0.125000 +v 0.500000 6.125000 -1.625000 +v 0.500000 6.125000 -0.125000 +v -0.500000 5.875000 -1.625000 +v -0.500000 6.125000 -0.125000 +v -0.500000 5.875000 -0.125000 +v -0.750000 5.875000 -1.625000 +v -0.750000 5.875000 -0.125000 +v -0.750000 6.125000 -1.625000 +v -0.750000 6.125000 -0.125000 +v 0.500000 7.125000 -1.812500 +v -0.500000 6.375000 -1.812500 +v 0.500000 7.375000 -1.812500 +v -0.500000 7.125000 -1.687500 +v 0.500000 6.375000 -1.687500 +v 0.500000 6.125000 -1.687500 +v 0.500000 5.625000 -1.812500 +v -0.500000 4.875000 -1.812500 +v 0.500000 5.875000 -1.812500 +v -0.500000 5.625000 -1.687500 +v 0.500000 4.875000 -1.687500 +v 0.500000 4.625000 -1.687500 +v 0.500000 4.125000 -1.812500 +v -0.500000 3.375000 -1.812500 +v 0.500000 4.375000 -1.812500 +v -0.500000 4.125000 -1.687500 +v 0.500000 3.375000 -1.687500 +v 0.500000 3.125000 -1.687500 +v -0.250000 7.250000 -0.375000 +v 0.250000 7.000000 -0.375000 +v -0.750000 7.000000 -0.125000 +v 0.500000 7.000000 -0.125000 +v -0.250000 7.000000 -0.625000 +v -0.250000 7.000000 -0.375000 +v 0.250000 7.000000 -0.625000 +v 0.750000 7.000000 -0.125000 +v -0.500000 7.000000 -0.125000 +v -0.500000 6.375000 -1.812500 +v 0.500000 7.125000 -1.812500 +v 0.500000 7.375000 -1.812500 +v -0.500000 7.125000 -1.687500 +v 0.500000 6.375000 -1.687500 +v -0.500000 7.375000 -1.687500 +v -0.500000 4.875000 -1.812500 +v 0.500000 5.625000 -1.812500 +v 0.500000 5.875000 -1.812500 +v -0.500000 5.625000 -1.687500 +v 0.500000 4.875000 -1.687500 +v -0.500000 5.875000 -1.687500 +v -0.500000 3.375000 -1.812500 +v 0.500000 4.125000 -1.812500 +v 0.500000 4.375000 -1.812500 +v -0.500000 4.125000 -1.687500 +v 0.500000 3.375000 -1.687500 +v -0.500000 4.375000 -1.687500 +v 0.750000 7.625000 -1.625000 +v -0.500000 7.625000 -1.625000 +v 0.750000 4.625000 -1.625000 +v -0.500000 4.625000 -1.625000 +v 0.750000 6.125000 -1.625000 +v -0.500000 6.125000 -1.625000 +v -0.500000 6.125000 -1.812500 +v -0.500000 7.375000 -1.687500 +v -0.500000 4.625000 -1.812500 +v -0.500000 5.875000 -1.687500 +v -0.500000 3.125000 -1.812500 +v -0.500000 4.375000 -1.687500 +v -0.500000 6.125000 -1.812500 +v 0.500000 6.125000 -1.687500 +v -0.500000 4.625000 -1.812500 +v 0.500000 4.625000 -1.687500 +v -0.500000 3.125000 -1.812500 +v 0.500000 3.125000 -1.687500 +vt 0.918367 0.421053 +vt 0.938776 0.394737 +vt 0.938776 0.421053 +vt 0.918367 0.421053 +vt 0.938776 0.394737 +vt 0.938776 0.421053 +vt 0.938776 0.026316 +vt 0.918367 -0.000000 +vt 0.938776 -0.000000 +vt 0.938776 0.026316 +vt 0.918367 -0.000000 +vt 0.938776 -0.000000 +vt 0.857143 0.263158 +vt 0.836735 0.236842 +vt 0.857143 0.236842 +vt 0.857143 0.263158 +vt 0.836735 0.236842 +vt 0.857143 0.236842 +vt 0.836735 0.815789 +vt 0.857143 0.789474 +vt 0.857143 0.815789 +vt 0.836735 0.815789 +vt 0.857143 0.789474 +vt 0.857143 0.815789 +vt 0.918367 0.263158 +vt 0.897959 0.789474 +vt 0.897959 0.263158 +vt 0.877551 0.263158 +vt 0.918367 0.263158 +vt 0.897959 0.789474 +vt 0.897959 0.263158 +vt 0.877551 0.263158 +vt 0.836735 0.789474 +vt 0.836735 0.263158 +vt 0.877551 0.789474 +vt 0.836735 0.789474 +vt 0.836735 0.263158 +vt 0.877551 0.789474 +vt 1.000000 0.026316 +vt 0.979592 0.394737 +vt 0.979592 0.026316 +vt 0.959184 0.026316 +vt 1.000000 0.026316 +vt 0.979592 0.394737 +vt 0.979592 0.026316 +vt 0.959184 0.026316 +vt 0.918367 0.394737 +vt 0.918367 0.026316 +vt 0.959184 0.394737 +vt 0.918367 0.394737 +vt 0.918367 0.026316 +vt 0.959184 0.394737 +vt 0.653061 0.763158 +vt 0.632653 0.710526 +vt 0.673469 0.763158 +vt 0.551020 0.763158 +vt 0.591837 0.736842 +vt 0.571429 0.763158 +vt 0.591837 0.710526 +vt 0.632653 0.710526 +vt 0.591837 0.736842 +vt 0.591837 0.710526 +vt 0.551020 0.763158 +vt 0.571429 0.763158 +vt 0.653061 0.763158 +vt 0.673469 0.763158 +vt 0.632653 0.763158 +vt 0.591837 0.789474 +vt 0.591837 0.763158 +vt 0.673469 0.684211 +vt 0.673469 0.710526 +vt 0.571429 0.789474 +vt 0.632653 0.684211 +vt 0.632653 0.789474 +vt 0.551020 0.710526 +vt 0.591149 0.684899 +vt 0.551020 0.631579 +vt 0.591837 0.657895 +vt 0.632653 0.657895 +vt 0.653061 0.631579 +vt 0.918367 0.421053 +vt 0.938776 0.578947 +vt 0.918367 0.578947 +vt 0.979592 0.421053 +vt 1.000000 0.578947 +vt 0.979592 0.578947 +vt 0.959184 0.421053 +vt 0.959184 0.578947 +vt 0.918367 0.421053 +vt 0.938776 0.578947 +vt 0.918367 0.578947 +vt 0.979592 0.421053 +vt 1.000000 0.578947 +vt 0.979592 0.578947 +vt 0.959184 0.421053 +vt 0.959184 0.578947 +vt 0.918367 0.421053 +vt 0.938776 0.578947 +vt 0.918367 0.578947 +vt 0.979592 0.421053 +vt 1.000000 0.578947 +vt 0.979592 0.578947 +vt 0.959184 0.421053 +vt 0.959184 0.578947 +vt 0.918367 0.421053 +vt 0.938776 0.578947 +vt 0.918367 0.578947 +vt 0.979592 0.421053 +vt 1.000000 0.578947 +vt 0.979592 0.578947 +vt 0.959184 0.421053 +vt 0.959184 0.578947 +vt 0.918367 0.421053 +vt 0.938776 0.578947 +vt 0.918367 0.578947 +vt 0.979592 0.421053 +vt 1.000000 0.578947 +vt 0.979592 0.578947 +vt 0.959184 0.421053 +vt 0.959184 0.578947 +vt 0.918367 0.421053 +vt 0.938776 0.578947 +vt 0.918367 0.578947 +vt 0.979592 0.421053 +vt 1.000000 0.578947 +vt 0.979592 0.578947 +vt 0.959184 0.421053 +vt 0.959184 0.578947 +vt 0.918367 0.578947 +vt 1.000000 0.605263 +vt 0.918367 0.605263 +vt 1.000000 0.578947 +vt 0.918367 0.605263 +vt 0.918367 0.578947 +vt 0.918367 0.578947 +vt 1.000000 0.605263 +vt 0.918367 0.605263 +vt 1.000000 0.578947 +vt 0.918367 0.605263 +vt 0.918367 0.578947 +vt 0.918367 0.578947 +vt 1.000000 0.605263 +vt 0.918367 0.605263 +vt 1.000000 0.578947 +vt 0.918367 0.605263 +vt 0.918367 0.578947 +vt 0.632653 0.763158 +vt 0.591837 0.789474 +vt 0.591837 0.763158 +vt 0.673469 0.684211 +vt 0.673469 0.710526 +vt 0.571429 0.789474 +vt 0.632653 0.684211 +vt 0.632653 0.789474 +vt 0.551020 0.710526 +vt 0.591149 0.684899 +vt 0.551020 0.631579 +vt 0.591837 0.657895 +vt 0.632653 0.657895 +vt 0.653061 0.631579 +vt 1.000000 0.605263 +vt 0.918367 0.578947 +vt 0.918367 0.605263 +vt 1.000000 0.578947 +vt 0.918367 0.605263 +vt 1.000000 0.605263 +vt 1.000000 0.605263 +vt 0.918367 0.578947 +vt 0.918367 0.605263 +vt 1.000000 0.578947 +vt 0.918367 0.605263 +vt 1.000000 0.605263 +vt 1.000000 0.605263 +vt 0.918367 0.578947 +vt 0.918367 0.605263 +vt 1.000000 0.578947 +vt 0.918367 0.605263 +vt 1.000000 0.605263 +vt 0.918367 0.789474 +vt 0.918367 0.789474 +vt 1.000000 0.394737 +vt 1.000000 0.394737 +vt 0.632653 0.736842 +vt 0.632653 0.736842 +vt 0.653061 0.789474 +vt 0.551020 0.684211 +vt 0.571429 0.631579 +vt 0.673469 0.631579 +vt 0.938776 0.421053 +vt 1.000000 0.421053 +vt 0.938776 0.421053 +vt 1.000000 0.421053 +vt 0.938776 0.421053 +vt 1.000000 0.421053 +vt 0.938776 0.421053 +vt 1.000000 0.421053 +vt 0.938776 0.421053 +vt 1.000000 0.421053 +vt 0.938776 0.421053 +vt 1.000000 0.421053 +vt 1.000000 0.578947 +vt 1.000000 0.605263 +vt 1.000000 0.578947 +vt 1.000000 0.605263 +vt 1.000000 0.578947 +vt 1.000000 0.605263 +vt 0.653061 0.789474 +vt 0.551020 0.684211 +vt 0.571429 0.631579 +vt 0.673469 0.631579 +vt 1.000000 0.578947 +vt 0.918367 0.578947 +vt 1.000000 0.578947 +vt 0.918367 0.578947 +vt 1.000000 0.578947 +vt 0.918367 0.578947 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 s off -f 47/55/7 44/56/7 43/57/7 -f 48/58/7 45/59/7 46/60/7 -f 42/61/7 45/59/7 41/62/7 -f 52/63/8 55/64/8 51/65/8 -f 53/66/8 56/67/8 54/68/8 -f 50/69/8 53/66/8 54/68/8 -f 47/55/7 48/58/7 44/56/7 -f 48/58/7 47/55/7 45/59/7 -f 42/61/7 46/60/7 45/59/7 -f 52/63/8 56/67/8 55/64/8 -f 53/66/8 55/64/8 56/67/8 -f 50/69/8 49/70/8 53/66/8 -o ABM_Erector -v 0.125000 2.750000 -1.625000 -v 0.125000 2.750000 -1.375000 -v 0.375000 2.750000 -1.375000 -v 0.375000 2.750000 -1.625000 -v -0.375000 2.750000 -1.625000 -v -0.375000 2.750000 -1.375000 -v -0.125000 2.750000 -1.375000 -v -0.125000 2.750000 -1.625000 -v 0.125000 9.750000 -1.625000 -v 0.125000 9.750000 -1.375000 -v 0.375000 9.750000 -1.375000 -v 0.375000 9.750000 -1.625000 -v -0.375000 9.750000 -1.625000 -v -0.375000 9.750000 -1.375000 -v -0.125000 9.750000 -1.375000 -v -0.125000 9.750000 -1.625000 -v 0.250000 4.625000 -1.500000 -v 0.500000 4.625000 -1.500000 -v 0.250000 4.875000 -1.500000 -v 0.500000 4.875000 -1.500000 -v 0.250000 4.625000 0.250000 -v 0.500000 4.625000 0.250000 -v 0.250000 4.875000 0.250000 -v 0.500000 4.875000 0.250000 -v -0.500000 4.625000 -1.500000 -v -0.250000 4.625000 -1.500000 -v -0.500000 4.875000 -1.500000 -v -0.250000 4.875000 -1.500000 -v -0.500000 4.625000 0.250000 -v -0.250000 4.625000 0.250000 -v -0.500000 4.875000 0.250000 -v -0.250000 4.875000 0.250000 -v 0.250000 4.625000 -0.250000 -v 0.250000 4.875000 -0.250000 -v -0.250000 4.625000 -0.250000 -v -0.250000 4.875000 -0.250000 -v 0.250000 4.875000 -0.500000 -v 0.250000 4.625000 -0.500000 -v -0.250000 4.625000 -0.500000 -v -0.250000 4.875000 -0.500000 -v 0.250000 9.125000 -1.500000 -v 0.500000 9.125000 -1.500000 -v 0.250000 9.375000 -1.500000 -v 0.500000 9.375000 -1.500000 -v 0.250000 9.125000 0.250000 -v 0.500000 9.125000 0.250000 -v 0.250000 9.375000 0.250000 -v 0.500000 9.375000 0.250000 -v -0.500000 9.125000 -1.500000 -v -0.250000 9.125000 -1.500000 -v -0.500000 9.375000 -1.500000 -v -0.250000 9.375000 -1.500000 -v -0.500000 9.125000 0.250000 -v -0.250000 9.125000 0.250000 -v -0.500000 9.375000 0.250000 -v -0.250000 9.375000 0.250000 -v 0.250000 9.125000 -0.250000 -v 0.250000 9.375000 -0.250000 -v -0.250000 9.125000 -0.250000 -v -0.250000 9.375000 -0.250000 -v 0.250000 9.375000 -0.500000 -v 0.250000 9.125000 -0.500000 -v -0.250000 9.125000 -0.500000 -v -0.250000 9.375000 -0.500000 -v 0.125000 9.312500 -1.437500 -v 0.125000 9.187500 -1.437500 -v 0.125000 9.312500 -1.562500 -v 0.125000 9.187500 -1.562500 -v -0.125000 9.312500 -1.562500 -v -0.125000 9.312500 -1.437500 -v -0.125000 9.187500 -1.437500 -v -0.125000 9.187500 -1.562500 -v -0.125000 8.187500 -1.562500 -v -0.125000 8.187500 -1.437500 -v -0.125000 8.312500 -1.437500 -v -0.125000 8.312500 -1.562500 -v 0.125000 8.187500 -1.562500 -v 0.125000 8.312500 -1.562500 -v 0.125000 8.187500 -1.437500 -v 0.125000 8.312500 -1.437500 -v 0.125000 7.312500 -1.437500 -v 0.125000 7.187500 -1.437500 -v 0.125000 7.312500 -1.562500 -v 0.125000 7.187500 -1.562500 -v -0.125000 7.312500 -1.562500 -v -0.125000 7.312500 -1.437500 -v -0.125000 7.187500 -1.437500 -v -0.125000 7.187500 -1.562500 -v -0.125000 6.187500 -1.562500 -v -0.125000 6.187500 -1.437500 -v -0.125000 6.312500 -1.437500 -v -0.125000 6.312500 -1.562500 -v 0.125000 6.187500 -1.562500 -v 0.125000 6.312500 -1.562500 -v 0.125000 6.187500 -1.437500 -v 0.125000 6.312500 -1.437500 -v 0.125000 3.312500 -1.437500 -v 0.125000 3.187500 -1.437500 -v 0.125000 3.312500 -1.562500 -v 0.125000 3.187500 -1.562500 -v -0.125000 3.312500 -1.562500 -v -0.125000 3.312500 -1.437500 -v -0.125000 3.187500 -1.437500 -v -0.125000 3.187500 -1.562500 -v 0.125000 5.312500 -1.437500 -v 0.125000 5.187500 -1.437500 -v 0.125000 5.312500 -1.562500 -v 0.125000 5.187500 -1.562500 -v -0.125000 5.312500 -1.562500 -v -0.125000 5.312500 -1.437500 -v -0.125000 5.187500 -1.437500 -v -0.125000 5.187500 -1.562500 -v -0.125000 4.187500 -1.562500 -v -0.125000 4.187500 -1.437500 -v -0.125000 4.312500 -1.437500 -v -0.125000 4.312500 -1.562500 -v 0.125000 4.187500 -1.562500 -v 0.125000 4.312500 -1.562500 -v 0.125000 4.187500 -1.437500 -v 0.125000 4.312500 -1.437500 -v 0.250000 4.875000 -0.625000 -v 0.250000 4.875000 -0.875000 -v 0.250000 5.625000 -1.375000 -v 0.250000 5.375000 -1.375000 -v -0.250000 4.875000 -0.625000 -v -0.250000 4.875000 -0.875000 -v -0.250000 5.625000 -1.375000 -v -0.250000 5.375000 -1.375000 -v 0.250000 9.125000 -0.625000 -v 0.250000 9.125000 -0.875000 -v -0.250000 9.125000 -0.625000 -v -0.250000 9.125000 -0.875000 -v 0.250000 8.625000 -1.375000 -v 0.250000 8.375000 -1.375000 -v -0.250000 8.625000 -1.375000 -v -0.250000 8.375000 -1.375000 -v 0.250000 4.625000 -0.625000 -v 0.250000 4.625000 -0.875000 -v -0.250000 4.625000 -0.625000 -v -0.250000 4.625000 -0.875000 -v 0.250000 4.125000 -1.375000 -v 0.250000 3.875000 -1.375000 -v -0.250000 4.125000 -1.375000 -v -0.250000 3.875000 -1.375000 -v 0.250000 4.875000 -0.625000 -v 0.250000 4.875000 -0.875000 -v 0.250000 5.625000 -1.375000 -v 0.250000 5.375000 -1.375000 -v -0.250000 4.875000 -0.625000 -v -0.250000 4.875000 -0.875000 -v -0.250000 5.625000 -1.375000 -v -0.250000 5.375000 -1.375000 -v 0.250000 9.125000 -0.625000 -v 0.250000 9.125000 -0.875000 -v -0.250000 9.125000 -0.625000 -v -0.250000 9.125000 -0.875000 -v 0.250000 8.625000 -1.375000 -v 0.250000 8.375000 -1.375000 -v -0.250000 8.625000 -1.375000 -v -0.250000 8.375000 -1.375000 -v 0.250000 4.625000 -0.625000 -v 0.250000 4.625000 -0.875000 -v -0.250000 4.625000 -0.625000 -v -0.250000 4.625000 -0.875000 -v 0.250000 4.125000 -1.375000 -v 0.250000 3.875000 -1.375000 -v -0.250000 4.125000 -1.375000 -v -0.250000 3.875000 -1.375000 -vt 0.708333 0.227273 -vt 0.666667 0.204545 -vt 0.708333 0.204545 -vt 0.708333 0.227273 -vt 0.666667 0.204545 -vt 0.708333 0.204545 -vt 0.666667 0.886364 -vt 0.708333 0.863636 -vt 0.708333 0.886364 -vt 0.666667 0.886364 -vt 0.708333 0.863636 -vt 0.708333 0.886364 -vt 0.833333 0.227273 -vt 0.791667 0.863636 -vt 0.791667 0.227273 -vt 0.750000 0.227273 -vt 0.666667 0.863636 -vt 0.666667 0.227273 -vt 0.791667 0.227273 -vt 0.750000 0.863636 -vt 0.750000 0.227273 -vt 0.666667 0.863636 -vt 0.666667 0.227273 -vt 0.750000 0.863636 -vt 0.833333 0.227273 -vt 0.791667 0.863636 -vt 0.875000 0.022727 -vt 0.833333 -0.000000 -vt 0.875000 -0.000000 -vt 0.833333 0.204545 -vt 0.875000 0.181818 -vt 0.875000 0.204545 -vt 0.916667 0.022727 -vt 0.833333 0.181818 -vt 0.833333 0.022727 -vt 0.958333 0.022727 -vt 0.916667 0.181818 -vt 1.000000 0.022727 -vt 0.958333 0.181818 -vt 0.875000 0.022727 -vt 0.833333 -0.000000 -vt 0.875000 -0.000000 -vt 0.833333 0.204545 -vt 0.875000 0.181818 -vt 0.875000 0.204545 -vt 0.916667 0.022727 -vt 0.833333 0.181818 -vt 0.833333 0.022727 -vt 0.958333 0.022727 -vt 0.916667 0.181818 -vt 1.000000 0.022727 -vt 0.958333 0.181818 -vt 0.875000 0.250000 -vt 0.958333 0.272727 -vt 0.875000 0.272727 -vt 0.958333 0.204545 -vt 0.875000 0.227273 -vt 0.875000 0.204545 -vt 0.958333 0.181818 -vt 0.875000 0.181818 -vt 0.833333 0.204545 -vt 0.875000 0.181818 -vt 0.875000 0.204545 -vt 0.958333 0.227273 -vt 0.958333 0.250000 -vt 0.875000 0.022727 -vt 0.833333 -0.000000 -vt 0.875000 -0.000000 -vt 0.916667 0.022727 -vt 0.833333 0.181818 -vt 0.833333 0.022727 -vt 0.958333 0.022727 -vt 0.916667 0.181818 -vt 1.000000 0.022727 -vt 0.958333 0.181818 -vt 0.875000 0.022727 -vt 0.833333 -0.000000 -vt 0.875000 -0.000000 -vt 0.833333 0.204545 -vt 0.875000 0.181818 -vt 0.875000 0.204545 -vt 0.916667 0.022727 -vt 0.833333 0.181818 -vt 0.833333 0.022727 -vt 0.958333 0.022727 -vt 0.916667 0.181818 -vt 1.000000 0.022727 -vt 0.958333 0.181818 -vt 0.875000 0.250000 -vt 0.958333 0.272727 -vt 0.875000 0.272727 -vt 0.958333 0.204545 -vt 0.875000 0.227273 -vt 0.875000 0.204545 -vt 0.958333 0.181818 -vt 0.875000 0.181818 -vt 0.958333 0.227273 -vt 0.958333 0.250000 -vt 0.708333 0.159091 -vt 0.666667 0.170455 -vt 0.666667 0.159091 -vt 0.708333 0.181818 -vt 0.666667 0.193182 -vt 0.666667 0.181818 -vt 0.708333 0.170455 -vt 0.708333 0.193182 -vt 0.666667 0.204545 -vt 0.708333 0.193182 -vt 0.666667 0.204545 -vt 0.666667 0.193182 -vt 0.708333 0.170455 -vt 0.666667 0.181818 -vt 0.666667 0.170455 -vt 0.708333 0.181818 -vt 0.708333 0.159091 -vt 0.666667 0.159091 -vt 0.708333 0.159091 -vt 0.666667 0.170455 -vt 0.666667 0.159091 -vt 0.708333 0.181818 -vt 0.666667 0.193182 -vt 0.666667 0.181818 -vt 0.708333 0.193182 -vt 0.666667 0.204545 -vt 0.666667 0.193182 -vt 0.708333 0.170455 -vt 0.666667 0.181818 -vt 0.666667 0.170455 -vt 0.708333 0.170455 -vt 0.666667 0.181818 -vt 0.666667 0.170455 -vt 0.708333 0.193182 -vt 0.666667 0.204545 -vt 0.666667 0.193182 -vt 0.708333 0.159091 -vt 0.666667 0.159091 -vt 0.708333 0.181818 -vt 0.708333 0.170455 -vt 0.708333 0.193182 -vt 0.666667 0.204545 -vt 0.708333 0.193182 -vt 0.666667 0.204545 -vt 0.666667 0.193182 -vt 0.708333 0.170455 -vt 0.666667 0.181818 -vt 0.666667 0.170455 -vt 0.708333 0.181818 -vt 0.708333 0.159091 -vt 0.666667 0.159091 -vt 0.708333 0.159091 -vt 0.666667 0.170455 -vt 0.666667 0.159091 -vt 0.708333 0.181818 -vt 0.666667 0.193182 -vt 0.666667 0.181818 -vt 0.708333 0.170455 -vt 0.708333 0.193182 -vt 0.666667 0.204545 -vt 0.708333 0.181818 -vt 0.708333 0.159091 -vt 0.666667 0.159091 -vt 0.875000 0.272727 -vt 0.958333 0.340909 -vt 0.833333 0.272727 -vt 0.833333 0.272727 -vt 0.958333 0.318182 -vt 0.958333 0.340909 -vt 0.958333 0.318182 -vt 0.833333 0.272727 -vt 0.875000 0.272727 -vt 0.958333 0.340909 -vt 0.875000 0.272727 -vt 0.958333 0.318182 -vt 0.958333 0.318182 -vt 0.833333 0.272727 -vt 0.875000 0.272727 -vt 0.958333 0.340909 -vt 0.875000 0.272727 -vt 0.958333 0.318182 -vt 0.958333 0.340909 -vt 0.875000 0.272727 -vt 0.833333 0.272727 -vt 0.958333 0.318182 -vt 0.833333 0.272727 -vt 0.958333 0.340909 -vt 0.833333 0.272727 -vt 0.958333 0.318182 -vt 0.875000 0.272727 -vt 0.875000 0.272727 -vt 0.958333 0.340909 -vt 0.958333 0.318182 -vt 0.833333 0.272727 -vt 0.958333 0.318182 -vt 0.875000 0.272727 -vt 0.875000 0.272727 -vt 0.958333 0.340909 -vt 0.958333 0.318182 -vt 0.833333 0.863636 -vt 0.833333 0.863636 -vt 1.000000 0.181818 -vt 1.000000 0.181818 -vt 1.000000 0.181818 -vt 1.000000 0.181818 -vt 0.708333 0.204545 -vt 0.708333 0.204545 -vt 0.708333 0.204545 -vt 0.708333 0.204545 -vt 0.708333 0.204545 -vt 0.708333 0.204545 -vt 0.708333 0.204545 -vt 0.958333 0.318182 -vt 0.875000 0.272727 -vt 0.958333 0.340909 -vt 0.833333 0.272727 -vt 0.958333 0.340909 -vt 0.833333 0.272727 -vt 0.958333 0.318182 -vt 0.875000 0.272727 -vt 0.958333 0.340909 -vt 0.833333 0.272727 -vt 0.958333 0.340909 -vt 0.833333 0.272727 -vn 0.0000 -1.0000 0.0000 +f 55/97/11 56/98/11 57/99/11 +f 58/100/11 59/101/11 60/102/11 +f 61/103/12 62/104/12 63/105/12 +f 64/106/12 65/107/12 66/108/12 +f 67/109/12 68/110/12 69/111/12 +f 70/112/12 71/113/12 72/114/12 +f 73/115/11 74/116/11 75/117/11 +f 76/118/11 77/119/11 78/120/11 +f 79/121/13 76/122/13 71/123/13 +f 72/124/14 77/119/14 70/112/14 +f 80/125/13 73/126/13 68/127/13 +f 69/128/14 74/116/14 67/109/14 +f 70/112/15 81/129/15 79/130/15 +f 71/123/16 78/131/16 72/124/16 +f 67/109/15 82/132/15 80/133/15 +f 68/127/16 75/134/16 69/128/16 +f 83/135/13 55/136/13 62/137/13 +f 63/138/14 56/98/14 61/103/14 +f 84/139/13 58/140/13 65/141/13 +f 66/142/14 59/101/14 64/106/14 +f 61/103/15 85/143/15 83/144/15 +f 62/137/16 57/145/16 63/138/16 +f 64/106/15 86/146/15 84/147/15 +f 65/141/16 60/148/16 66/142/16 +f 87/149/11 88/150/11 89/151/11 +f 90/152/11 91/153/11 92/154/11 +f 88/150/11 91/153/11 93/155/11 +f 94/156/11 95/157/11 96/158/11 +f 97/159/11 95/157/11 98/160/11 +f 99/161/11 94/156/11 100/162/11 +f 101/163/16 102/164/16 95/165/16 +f 94/156/17 103/166/17 100/167/17 +f 95/165/18 104/168/18 98/160/18 +f 96/158/15 105/169/15 94/156/15 +f 99/161/19 106/170/19 101/163/19 +f 97/171/20 107/172/20 96/158/20 +f 108/173/12 102/174/12 107/172/12 +f 105/169/12 102/174/12 106/175/12 +f 109/176/12 105/169/12 106/175/12 +f 110/177/13 111/178/13 112/179/13 +f 113/180/12 112/181/12 114/182/12 +f 115/183/14 114/182/14 116/184/14 +f 111/178/11 115/183/11 116/184/11 +f 117/185/13 118/186/13 119/187/13 +f 120/188/12 119/189/12 121/190/12 +f 122/191/14 121/190/14 123/192/14 +f 118/186/11 122/191/11 123/192/11 +f 124/193/13 125/194/13 126/195/13 +f 127/196/12 126/197/12 128/198/12 +f 129/199/14 128/198/14 130/200/14 +f 125/194/11 129/199/11 130/200/11 +f 131/201/13 132/202/13 133/203/13 +f 134/204/12 133/205/12 135/206/12 +f 136/207/14 135/206/14 137/208/14 +f 132/202/11 136/207/11 137/208/11 +f 138/209/13 139/210/13 140/211/13 +f 141/212/12 140/213/12 142/214/12 +f 143/215/14 142/214/14 144/216/14 +f 139/210/11 143/215/11 144/216/11 +f 145/217/13 146/218/13 147/219/13 +f 148/220/12 147/221/12 149/222/12 +f 150/223/14 149/222/14 151/224/14 +f 146/218/11 150/223/11 151/224/11 +f 152/225/15 153/226/15 154/227/15 +f 155/228/15 156/229/15 157/230/15 +f 158/231/15 159/232/15 160/233/15 +f 161/234/15 162/235/15 163/236/15 +f 164/237/15 165/238/15 166/239/15 +f 167/240/15 168/241/15 169/242/15 +f 170/243/16 171/244/16 91/245/16 +f 88/150/17 172/246/17 89/247/17 +f 91/245/18 173/248/18 92/154/18 +f 93/155/15 174/249/15 88/150/15 +f 87/149/19 175/250/19 170/243/19 +f 90/251/20 176/252/20 93/155/20 +f 177/253/12 171/254/12 176/252/12 +f 174/249/12 171/254/12 175/255/12 +f 178/256/12 174/249/12 175/255/12 +f 179/257/16 180/258/16 181/259/16 +f 182/260/16 183/261/16 184/262/16 +f 185/263/16 186/264/16 187/265/16 +f 188/266/16 189/267/16 190/268/16 +f 191/269/16 192/270/16 193/271/16 +f 194/272/16 195/273/16 196/274/16 +f 55/97/11 85/143/11 56/98/11 +f 58/100/11 86/146/11 59/101/11 +f 61/103/12 83/144/12 62/104/12 +f 64/106/12 84/147/12 65/107/12 +f 67/109/12 80/133/12 68/110/12 +f 70/112/12 79/130/12 71/113/12 +f 73/115/11 82/132/11 74/116/11 +f 76/118/11 81/129/11 77/119/11 +f 79/121/13 81/275/13 76/122/13 +f 72/124/14 78/131/14 77/119/14 +f 80/125/13 82/276/13 73/126/13 +f 69/128/14 75/134/14 74/116/14 +f 70/112/15 77/119/15 81/129/15 +f 71/123/16 76/122/16 78/131/16 +f 67/109/15 74/116/15 82/132/15 +f 68/127/16 73/126/16 75/134/16 +f 83/135/13 85/277/13 55/136/13 +f 63/138/14 57/145/14 56/98/14 +f 84/139/13 86/278/13 58/140/13 +f 66/142/14 60/148/14 59/101/14 +f 61/103/15 56/98/15 85/143/15 +f 62/137/16 55/136/16 57/145/16 +f 64/106/15 59/101/15 86/146/15 +f 65/141/16 58/140/16 60/148/16 +f 87/149/11 170/279/11 88/150/11 +f 90/152/11 93/155/11 91/153/11 +f 88/150/11 170/279/11 91/153/11 +f 94/156/11 101/280/11 95/157/11 +f 97/159/11 96/158/11 95/157/11 +f 99/161/11 101/280/11 94/156/11 +f 101/163/16 106/170/16 102/164/16 +f 94/156/17 105/169/17 103/166/17 +f 95/165/18 102/164/18 104/168/18 +f 96/158/15 107/172/15 105/169/15 +f 99/161/19 109/281/19 106/170/19 +f 97/171/20 108/282/20 107/172/20 +f 108/173/12 104/283/12 102/174/12 +f 105/169/12 107/172/12 102/174/12 +f 109/176/12 103/284/12 105/169/12 +f 110/177/13 197/285/13 111/178/13 +f 113/180/12 110/286/12 112/181/12 +f 115/183/14 113/180/14 114/182/14 +f 111/178/11 197/285/11 115/183/11 +f 117/185/13 198/287/13 118/186/13 +f 120/188/12 117/288/12 119/189/12 +f 122/191/14 120/188/14 121/190/14 +f 118/186/11 198/287/11 122/191/11 +f 124/193/13 199/289/13 125/194/13 +f 127/196/12 124/290/12 126/197/12 +f 129/199/14 127/196/14 128/198/14 +f 125/194/11 199/289/11 129/199/11 +f 131/201/13 200/291/13 132/202/13 +f 134/204/12 131/292/12 133/205/12 +f 136/207/14 134/204/14 135/206/14 +f 132/202/11 200/291/11 136/207/11 +f 138/209/13 201/293/13 139/210/13 +f 141/212/12 138/294/12 140/213/12 +f 143/215/14 141/212/14 142/214/14 +f 139/210/11 201/293/11 143/215/11 +f 145/217/13 202/295/13 146/218/13 +f 148/220/12 145/296/12 147/221/12 +f 150/223/14 148/220/14 149/222/14 +f 146/218/11 202/295/11 150/223/11 +f 152/225/15 203/297/15 153/226/15 +f 155/228/15 204/298/15 156/229/15 +f 158/231/15 205/299/15 159/232/15 +f 161/234/15 206/300/15 162/235/15 +f 164/237/15 207/301/15 165/238/15 +f 167/240/15 208/302/15 168/241/15 +f 170/243/16 175/250/16 171/244/16 +f 88/150/17 174/249/17 172/246/17 +f 91/245/18 171/244/18 173/248/18 +f 93/155/15 176/252/15 174/249/15 +f 87/149/19 178/303/19 175/250/19 +f 90/251/20 177/304/20 176/252/20 +f 177/253/12 173/305/12 171/254/12 +f 174/249/12 176/252/12 171/254/12 +f 178/256/12 172/306/12 174/249/12 +f 179/257/16 209/307/16 180/258/16 +f 182/260/16 210/308/16 183/261/16 +f 185/263/16 211/309/16 186/264/16 +f 188/266/16 212/310/16 189/267/16 +f 191/269/16 213/311/16 192/270/16 +f 194/272/16 214/312/16 195/273/16 +o V2_Pivot +v 0.750000 2.750000 -1.625000 +v 0.500000 2.750000 -1.875000 +v 0.500000 2.750000 -1.625000 +v 0.750000 1.250000 -1.875000 +v 0.750000 1.250000 -1.625000 +v 0.500000 1.250000 -1.625000 +v 0.500000 1.250000 -1.875000 +v 0.750000 2.750000 -1.875000 +v -0.500000 2.750000 -1.625000 +v -0.750000 2.750000 -1.875000 +v -0.750000 2.750000 -1.625000 +v -0.500000 1.250000 -1.875000 +v -0.500000 1.250000 -1.625000 +v -0.750000 1.250000 -1.625000 +v -0.750000 1.250000 -1.875000 +v -0.500000 2.750000 -1.875000 +v 0.687500 2.750000 -1.812500 +v 0.687500 3.750000 -1.687500 +v 0.687500 2.750000 -1.687500 +v 0.562500 2.750000 -1.687500 +v 0.562500 3.750000 -1.812500 +v 0.562500 2.750000 -1.812500 +v 0.687500 3.750000 -1.812500 +v 0.562500 3.750000 -1.687500 +v -0.562500 2.750000 -1.812500 +v -0.562500 3.750000 -1.687500 +v -0.562500 2.750000 -1.687500 +v -0.687500 2.750000 -1.687500 +v -0.687500 3.750000 -1.812500 +v -0.687500 2.750000 -1.812500 +v -0.562500 3.750000 -1.812500 +v -0.687500 3.750000 -1.687500 +vt 0.836735 0.184211 +vt 0.857143 0.157895 +vt 0.857143 0.184211 +vt 0.918367 -0.000000 +vt 0.897959 0.157895 +vt 0.897959 -0.000000 +vt 0.877551 -0.000000 +vt 0.857143 -0.000000 +vt 0.836735 0.157895 +vt 0.836735 -0.000000 +vt 0.877551 0.157895 +vt 0.836735 0.184211 +vt 0.857143 0.157895 +vt 0.857143 0.184211 +vt 0.918367 -0.000000 +vt 0.897959 0.157895 +vt 0.897959 -0.000000 +vt 0.877551 -0.000000 +vt 0.857143 -0.000000 +vt 0.836735 0.157895 +vt 0.836735 -0.000000 +vt 0.877551 0.157895 +vt 0.897959 0.157895 +vt 0.887755 0.263158 +vt 0.887755 0.157895 +vt 0.877551 0.157895 +vt 0.867347 0.263158 +vt 0.867347 0.157895 +vt 0.857143 0.263158 +vt 0.857143 0.157895 +vt 0.877551 0.263158 +vt 0.897959 0.157895 +vt 0.887755 0.263158 +vt 0.887755 0.157895 +vt 0.877551 0.157895 +vt 0.867347 0.263158 +vt 0.867347 0.157895 +vt 0.857143 0.263158 +vt 0.857143 0.157895 +vt 0.877551 0.263158 +vt 0.918367 0.157895 +vt 0.918367 0.157895 +vt 0.897959 0.263158 +vt 0.897959 0.263158 vn 0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.0000 1.0000 s off -f 57/71/9 59/72/9 58/73/9 -f 61/74/9 63/75/9 62/76/9 -f 67/77/10 65/78/10 66/79/10 -f 71/80/10 69/81/10 70/82/10 -f 60/83/11 67/84/11 59/85/11 -f 58/86/12 65/78/12 57/71/12 -f 61/74/13 72/87/13 64/88/13 -f 63/89/14 70/90/14 62/91/14 -f 57/71/13 68/92/13 60/93/13 -f 59/85/14 66/94/14 58/86/14 -f 64/95/11 71/96/11 63/89/11 -f 62/91/12 69/81/12 61/74/12 -f 75/97/13 74/98/13 73/99/13 -f 78/100/14 79/101/14 77/102/14 -f 73/103/12 79/101/12 75/97/12 -f 75/97/10 80/104/10 76/105/10 -f 74/106/9 77/107/9 73/103/9 -f 76/108/11 78/109/11 74/106/11 -f 83/110/13 82/111/13 81/112/13 -f 86/113/14 87/114/14 85/115/14 -f 81/116/12 87/114/12 83/110/12 -f 83/110/10 88/117/10 84/118/10 -f 82/119/9 85/120/9 81/116/9 -f 84/121/11 86/122/11 82/119/11 -f 90/123/14 91/124/14 89/125/14 -f 95/126/13 93/127/13 94/128/13 -f 91/129/9 94/128/9 89/130/9 -f 102/131/14 103/132/14 101/133/14 -f 90/123/10 96/134/10 92/135/10 -f 99/136/13 98/137/13 97/138/13 -f 97/139/12 103/132/12 99/136/12 -f 99/136/10 104/140/10 100/141/10 -f 98/142/9 101/143/9 97/139/9 -f 100/144/11 102/145/11 98/142/11 -f 107/146/13 106/147/13 105/148/13 -f 110/149/14 111/150/14 109/151/14 -f 105/152/12 111/150/12 107/146/12 -f 107/146/10 112/153/10 108/154/10 -f 106/155/9 109/156/9 105/152/9 -f 108/157/11 110/158/11 106/155/11 -f 114/159/14 115/160/14 113/161/14 -f 119/162/13 117/163/13 118/164/13 -f 115/165/9 118/164/9 113/166/9 -f 114/159/10 120/167/10 116/168/10 -f 127/169/9 124/170/9 122/171/9 -f 125/172/10 121/173/10 123/174/10 -f 128/175/13 123/174/13 124/170/13 -f 126/176/14 122/177/14 121/173/14 -f 131/178/14 135/179/14 136/180/14 -f 129/181/13 134/182/13 133/183/13 -f 132/184/10 136/180/10 134/182/10 -f 130/185/9 133/183/9 135/186/9 -f 143/187/9 140/188/9 138/189/9 -f 141/190/10 137/191/10 139/192/10 -f 171/193/14 175/194/14 176/195/14 -f 169/196/13 174/197/13 173/198/13 -f 160/199/13 155/200/13 156/201/13 -f 158/202/14 154/203/14 153/204/14 -f 159/205/9 156/201/9 154/206/9 -f 157/207/10 153/204/10 155/200/10 -f 144/208/13 139/192/13 140/188/13 -f 142/209/14 138/210/14 137/191/14 -f 147/211/14 151/212/14 152/213/14 -f 145/214/13 150/215/13 149/216/13 -f 148/217/10 152/213/10 150/215/10 -f 146/218/9 149/216/9 151/219/9 -f 167/220/9 164/221/9 162/222/9 -f 165/223/10 161/224/10 163/225/10 -f 168/226/13 163/225/13 164/221/13 -f 166/227/14 162/228/14 161/224/14 -f 172/229/10 176/195/10 174/197/10 -f 170/230/9 173/198/9 175/231/9 -f 178/232/11 179/233/11 177/234/11 -f 183/235/12 182/236/12 181/237/12 -f 191/238/12 187/239/12 188/240/12 -f 185/241/11 189/242/11 186/243/11 -f 199/244/12 195/245/12 196/246/12 -f 193/247/11 197/248/11 194/249/11 -f 203/250/12 202/251/12 201/252/12 -f 206/253/11 207/254/11 205/255/11 -f 211/256/11 215/257/11 212/258/11 -f 213/259/12 209/260/12 210/261/12 -f 219/262/11 223/263/11 220/264/11 -f 221/265/12 217/266/12 218/267/12 -f 57/71/9 60/93/9 59/72/9 -f 61/74/9 64/88/9 63/75/9 -f 67/77/10 68/92/10 65/78/10 -f 71/80/10 72/87/10 69/81/10 -f 60/83/11 68/268/11 67/84/11 -f 58/86/12 66/94/12 65/78/12 -f 61/74/13 69/81/13 72/87/13 -f 63/89/14 71/96/14 70/90/14 -f 57/71/13 65/78/13 68/92/13 -f 59/85/14 67/84/14 66/94/14 -f 64/95/11 72/269/11 71/96/11 -f 62/91/12 70/90/12 69/81/12 -f 75/97/13 76/105/13 74/98/13 -f 78/100/14 80/104/14 79/101/14 -f 73/103/12 77/107/12 79/101/12 -f 75/97/10 79/101/10 80/104/10 -f 74/106/9 78/109/9 77/107/9 -f 76/108/11 80/270/11 78/109/11 -f 83/110/13 84/118/13 82/111/13 -f 86/113/14 88/117/14 87/114/14 -f 81/116/12 85/120/12 87/114/12 -f 83/110/10 87/114/10 88/117/10 -f 82/119/9 86/122/9 85/120/9 -f 84/121/11 88/271/11 86/122/11 -f 90/123/14 92/135/14 91/124/14 -f 95/126/13 96/134/13 93/127/13 -f 91/129/9 95/126/9 94/128/9 -f 102/131/14 104/140/14 103/132/14 -f 90/123/10 93/127/10 96/134/10 -f 99/136/13 100/141/13 98/137/13 -f 97/139/12 101/143/12 103/132/12 -f 99/136/10 103/132/10 104/140/10 -f 98/142/9 102/145/9 101/143/9 -f 100/144/11 104/272/11 102/145/11 -f 107/146/13 108/154/13 106/147/13 -f 110/149/14 112/153/14 111/150/14 -f 105/152/12 109/156/12 111/150/12 -f 107/146/10 111/150/10 112/153/10 -f 106/155/9 110/158/9 109/156/9 -f 108/157/11 112/273/11 110/158/11 -f 114/159/14 116/168/14 115/160/14 -f 119/162/13 120/167/13 117/163/13 -f 115/165/9 119/162/9 118/164/9 -f 114/159/10 117/163/10 120/167/10 -f 127/169/9 128/175/9 124/170/9 -f 125/172/10 126/176/10 121/173/10 -f 128/175/13 125/172/13 123/174/13 -f 126/176/14 127/274/14 122/177/14 -f 131/178/14 130/275/14 135/179/14 -f 129/181/13 132/184/13 134/182/13 -f 132/184/10 131/178/10 136/180/10 -f 130/185/9 129/181/9 133/183/9 -f 143/187/9 144/208/9 140/188/9 -f 141/190/10 142/209/10 137/191/10 -f 171/193/14 170/276/14 175/194/14 -f 169/196/13 172/229/13 174/197/13 -f 160/199/13 157/207/13 155/200/13 -f 158/202/14 159/277/14 154/203/14 -f 159/205/9 160/199/9 156/201/9 -f 157/207/10 158/202/10 153/204/10 -f 144/208/13 141/190/13 139/192/13 -f 142/209/14 143/278/14 138/210/14 -f 147/211/14 146/279/14 151/212/14 -f 145/214/13 148/217/13 150/215/13 -f 148/217/10 147/211/10 152/213/10 -f 146/218/9 145/214/9 149/216/9 -f 167/220/9 168/226/9 164/221/9 -f 165/223/10 166/227/10 161/224/10 -f 168/226/13 165/223/13 163/225/13 -f 166/227/14 167/280/14 162/228/14 -f 172/229/10 171/193/10 176/195/10 -f 170/230/9 169/196/9 173/198/9 -f 178/232/11 180/281/11 179/233/11 -f 183/235/12 184/282/12 182/236/12 -f 191/238/12 192/283/12 187/239/12 -f 185/241/11 190/284/11 189/242/11 -f 199/244/12 200/285/12 195/245/12 -f 193/247/11 198/286/11 197/248/11 -f 203/250/12 204/287/12 202/251/12 -f 206/253/11 208/288/11 207/254/11 -f 211/256/11 216/289/11 215/257/11 -f 213/259/12 214/290/12 209/260/12 -f 219/262/11 224/291/11 223/263/11 -f 221/265/12 222/292/12 217/266/12 -o ABM_Pad -v -1.000000 2.000000 1.000000 -v 1.000000 2.000000 1.000000 -v -1.000000 2.000000 -1.000000 -v 1.000000 2.000000 -1.000000 +f 215/313/21 216/314/21 217/315/21 +f 218/316/22 215/317/22 219/318/22 +f 220/319/23 216/314/23 221/320/23 +f 221/320/24 222/321/24 218/322/24 +f 219/318/25 217/323/25 220/319/25 +f 223/324/21 224/325/21 225/326/21 +f 226/327/22 223/328/22 227/329/22 +f 228/330/23 224/325/23 229/331/23 +f 229/331/24 230/332/24 226/333/24 +f 227/329/25 225/334/25 228/330/25 +f 231/335/22 232/336/22 233/337/22 +f 234/338/23 235/339/23 236/340/23 +f 236/340/24 237/341/24 231/342/24 +f 233/337/25 238/343/25 234/338/25 +f 239/344/22 240/345/22 241/346/22 +f 242/347/23 243/348/23 244/349/23 +f 244/349/24 245/350/24 239/351/24 +f 241/346/25 246/352/25 242/347/25 +f 215/313/21 222/321/21 216/314/21 +f 218/316/22 222/353/22 215/317/22 +f 220/319/23 217/323/23 216/314/23 +f 221/320/24 216/314/24 222/321/24 +f 219/318/25 215/317/25 217/323/25 +f 223/324/21 230/332/21 224/325/21 +f 226/327/22 230/354/22 223/328/22 +f 228/330/23 225/334/23 224/325/23 +f 229/331/24 224/325/24 230/332/24 +f 227/329/25 223/328/25 225/334/25 +f 231/335/22 237/355/22 232/336/22 +f 234/338/23 238/343/23 235/339/23 +f 236/340/24 235/339/24 237/341/24 +f 233/337/25 232/336/25 238/343/25 +f 239/344/22 245/356/22 240/345/22 +f 242/347/23 246/352/23 243/348/23 +f 244/349/24 243/348/24 245/350/24 +f 241/346/25 240/345/25 246/352/25 +o V2_Rope +v 0.000000 8.875000 1.750000 +v 0.000000 8.875000 1.375000 +v 0.000000 9.000000 1.750000 +v 0.000000 8.875000 0.375000 +v 0.000000 8.875000 0.000000 +v 0.000000 9.000000 0.000000 +v 0.000000 8.750000 1.375000 +v 0.000000 8.875000 1.750000 +v 0.000000 8.875000 1.375000 +v 0.000000 8.750000 1.375000 +v 0.000000 8.875000 0.000000 +v 0.000000 8.875000 0.375000 +v 0.000000 9.000000 0.000000 +v 0.000000 8.750000 0.375000 +v 0.000000 9.000000 1.750000 +v 0.000000 8.750000 0.375000 +v 0.312500 2.062500 2.062500 +v 0.362056 2.049556 2.044194 +v 0.356694 2.062500 2.044194 +v 0.250000 2.062500 2.000000 +v 0.299556 1.987056 2.044194 +v 0.268306 2.062500 2.044194 +v 0.312500 2.062500 1.937500 +v 0.299556 1.987056 1.955806 +v 0.268306 2.062500 1.955806 +v 0.362056 2.049556 1.955806 +v 0.330806 2.018306 1.937500 +v 0.330806 2.018306 2.062500 +v 0.286612 1.974112 2.000000 +v 0.375000 2.000000 1.937500 +v 0.375000 2.000000 2.062500 +v 0.375000 1.955806 1.955806 +v 0.375000 1.937500 2.000000 +v 0.375000 2.044194 2.044194 +v 0.375000 1.955806 2.044194 +v 0.375000 2.062500 2.000000 +v 0.356694 2.062500 1.955806 +v 0.375000 2.044194 1.955806 +v 0.500000 2.062500 2.000000 +v 0.500000 2.044194 1.955806 +v 0.500000 2.000000 1.937500 +v 0.500000 2.000000 2.062500 +v 0.500000 1.955806 1.955806 +v 0.500000 1.937500 2.000000 +v 0.500000 2.044194 2.044194 +v 0.500000 1.955806 2.044194 +v 0.375000 5.312500 2.000000 +v 0.312500 5.312500 2.062500 +v 0.250000 5.312500 2.000000 +v 0.312500 5.312500 1.937500 +v 0.356694 5.312500 1.955806 +v 0.356694 5.312500 2.044194 +v 0.268306 5.312500 2.044194 +v 0.268306 5.312500 1.955806 +v 0.250000 4.562500 0.250000 +v 0.268306 4.518306 2.000000 +v 0.250000 4.562500 2.000000 +v 0.312500 4.625000 0.250000 +v 0.268306 4.606694 2.000000 +v 0.312500 4.625000 2.000000 +v 0.356694 4.606694 0.250000 +v 0.356694 4.606694 2.000000 +v 0.356694 4.518306 0.250000 +v 0.375000 4.562500 2.000000 +v 0.356694 4.518306 2.000000 +v 0.268306 4.518306 0.250000 +v 0.312500 4.500000 2.000000 +v 0.268306 4.606694 0.250000 +v 0.375000 4.562500 0.250000 +v 0.312500 4.500000 0.250000 +v 0.356694 5.387944 2.012944 +v 0.268306 5.387944 2.012944 +v 0.268306 5.325444 1.950444 +v 0.356694 5.325444 1.950444 +v 0.375000 5.356694 1.981694 +v 0.312500 5.400888 2.025888 +v 0.250000 5.356694 1.981694 +v 0.250000 5.375000 1.937500 +v 0.268306 5.330806 1.937500 +v 0.375000 5.375000 1.937500 +v 0.312500 5.437500 1.937500 +v 0.268306 5.419194 1.937500 +v 0.356694 5.419194 1.937500 +v 0.356694 5.330806 1.937500 +v 0.312500 5.312500 0.187500 +v 0.356694 5.330806 0.187500 +v 0.375000 5.375000 0.187500 +v 0.312500 5.437500 0.187500 +v 0.250000 5.375000 0.187500 +v 0.356694 5.419194 0.187500 +v 0.268306 5.419194 0.187500 +v 0.268306 5.330806 0.187500 +vt 0.408163 0.631579 +vt 0.438776 0.644737 +vt 0.408163 0.644737 +vt 0.520408 0.644737 +vt 0.551020 0.631579 +vt 0.551020 0.644737 +vt 0.438776 0.631579 +vt 0.408163 0.631579 +vt 0.438776 0.644737 +vt 0.438776 0.631579 +vt 0.551020 0.631579 +vt 0.520408 0.644737 +vt 0.551020 0.644737 +vt 0.520408 0.631579 +vt 0.408163 0.644737 +vt 0.520408 0.631579 +vt 0.816327 0.342105 +vt 0.821429 0.335526 +vt 0.821429 0.342105 +vt 0.806122 0.342105 +vt 0.811224 0.335526 +vt 0.811224 0.342105 +vt 0.795918 0.342105 +vt 0.801020 0.335526 +vt 0.801020 0.342105 +vt 0.836735 0.342105 +vt 0.831633 0.335526 +vt 0.836735 0.335526 +vt 0.816327 0.335526 +vt 0.806122 0.335526 +vt 0.836735 0.328947 +vt 0.816327 0.328947 +vt 0.801020 0.328947 +vt 0.806122 0.328947 +vt 0.821429 0.328947 +vt 0.811224 0.328947 +vt 0.795918 0.328947 +vt 0.826531 0.335526 +vt 0.831633 0.342105 +vt 0.831633 0.328947 +vt 0.826531 0.315789 +vt 0.831633 0.315789 +vt 0.836735 0.315789 +vt 0.826531 0.328947 +vt 0.816327 0.315789 +vt 0.801020 0.315789 +vt 0.806122 0.315789 +vt 0.821429 0.315789 +vt 0.811224 0.315789 +vt 0.826531 0.684211 +vt 0.826531 0.342105 +vt 0.816327 0.684211 +vt 0.806122 0.684211 +vt 0.795918 0.684211 +vt 0.831633 0.684211 +vt 0.821429 0.684211 +vt 0.811224 0.684211 +vt 0.801020 0.684211 +vt 0.806122 0.828947 +vt 0.801020 0.697368 +vt 0.806122 0.697368 +vt 0.816327 0.828947 +vt 0.811224 0.697368 +vt 0.816327 0.697368 +vt 0.821429 0.828947 +vt 0.821429 0.697368 +vt 0.831633 0.828947 +vt 0.826531 0.697368 +vt 0.831633 0.697368 +vt 0.801020 0.828947 +vt 0.795918 0.697368 +vt 0.811224 0.828947 +vt 0.826531 0.828947 +vt 0.836735 0.828947 +vt 0.836735 0.697368 +vt 0.821429 0.690789 +vt 0.811224 0.690789 +vt 0.801020 0.690789 +vt 0.831633 0.690789 +vt 0.826531 0.690789 +vt 0.816327 0.690789 +vt 0.806122 0.690789 +vt 0.806122 0.697368 +vt 0.801020 0.697368 +vt 0.826531 0.697368 +vt 0.816327 0.697368 +vt 0.811224 0.697368 +vt 0.821429 0.697368 +vt 0.795918 0.690789 +vt 0.836735 0.690789 +vt 0.831633 0.697368 +vt 0.836735 0.828947 +vt 0.831633 0.828947 +vt 0.826531 0.828947 +vt 0.795918 0.828947 +vt 0.795918 0.697368 +vt 0.816327 0.828947 +vt 0.806122 0.828947 +vt 0.821429 0.828947 +vt 0.811224 0.828947 +vt 0.801020 0.828947 +vt 0.795918 0.335526 +vt 0.795918 0.315789 +vt 0.836735 0.684211 +vt 0.795918 0.828947 +vt 0.836735 0.697368 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0473 -0.0196 0.9987 +vn 0.4617 0.4617 0.7574 +vn 0.6737 0.1363 0.7263 +vn -0.9824 -0.1866 -0.0000 +vn -0.5294 -0.5294 0.6630 +vn -0.7194 -0.1448 0.6794 +vn -0.0473 -0.0196 -0.9987 +vn -0.5294 -0.5294 -0.6630 +vn -0.7194 -0.1448 -0.6794 +vn 0.4617 0.4617 -0.7574 +vn -0.0671 -0.0671 -0.9955 +vn -0.0671 -0.0671 0.9955 +vn -0.7071 -0.7071 -0.0000 +vn -0.0196 -0.0473 -0.9987 +vn -0.0196 -0.0473 0.9987 +vn -0.1448 -0.7194 -0.6794 +vn -0.1866 -0.9824 -0.0000 +vn 0.1363 0.6737 0.7263 +vn -0.1448 -0.7194 0.6794 +vn 0.7071 0.7071 -0.0000 +vn 0.6737 0.1363 -0.7263 +vn 0.1363 0.6737 -0.7263 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.9987 0.0196 0.0473 +vn -0.0000 0.1866 0.9824 +vn -0.9987 0.0196 0.0473 +vn 0.7263 -0.1363 -0.6737 +vn 0.6794 0.1448 0.7194 +vn -0.6794 0.1448 0.7194 +vn -0.7263 -0.1363 -0.6737 +vn -0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.6630 0.5294 0.5294 +vn -0.6630 0.5294 0.5294 +vn -0.7574 -0.4617 -0.4617 +vn 0.7574 -0.4617 -0.4617 +vn 0.9955 0.0671 0.0671 +vn -0.9955 0.0671 0.0671 +vn -0.9987 0.0473 0.0196 +vn -0.7263 -0.6737 -0.1363 +vn 0.9987 0.0473 0.0196 +vn 0.0000 0.9824 0.1866 +vn -0.6794 0.7194 0.1448 +vn 0.6794 0.7194 0.1448 +vn 0.7263 -0.6737 -0.1363 +s off +f 247/357/26 248/358/26 249/359/26 +f 250/360/26 251/361/26 252/362/26 +f 253/363/26 250/360/26 248/358/26 +f 254/364/27 255/365/27 256/366/27 +f 257/367/27 258/368/27 259/369/27 +f 258/368/27 256/366/27 255/365/27 +f 247/357/26 253/363/26 248/358/26 +f 250/360/26 260/370/26 251/361/26 +f 253/363/26 260/370/26 250/360/26 +f 254/364/27 261/371/27 255/365/27 +f 257/367/27 262/372/27 258/368/27 +f 258/368/27 262/372/27 256/366/27 +s 1 +f 263/373/28 264/374/29 265/375/30 +f 266/376/31 267/377/32 268/378/33 +f 269/379/34 270/380/35 271/381/36 +f 269/382/34 272/383/37 273/384/38 +f 263/373/28 267/377/32 274/385/39 +f 271/381/36 275/386/40 266/376/31 +f 272/383/37 276/387/41 273/384/38 +f 267/377/32 277/388/42 274/385/39 +f 275/386/40 278/389/43 279/390/44 +f 264/374/29 277/388/42 280/391/45 +f 275/386/40 281/392/46 267/377/32 +f 270/380/35 276/393/41 278/389/43 +f 265/375/30 264/374/29 282/394/47 +f 264/374/29 280/391/45 282/394/47 +f 282/394/47 272/383/37 283/395/48 +f 272/383/37 282/394/47 284/396/49 +f 284/396/49 285/397/50 286/398/51 +f 284/396/49 287/399/52 276/387/41 +f 280/391/45 285/397/50 282/400/47 +f 281/392/46 288/401/53 277/388/42 +f 279/390/44 289/402/54 290/403/55 +f 277/388/42 291/404/56 280/391/45 +f 279/390/44 292/405/57 281/392/46 +f 276/393/41 289/402/54 278/389/43 +f 283/395/48 293/406/58 282/407/47 +f 265/375/30 294/408/59 263/373/28 +f 268/378/33 295/409/60 266/376/31 +f 271/381/36 296/410/54 269/379/34 +f 269/382/34 297/411/61 283/395/48 +f 282/407/47 298/412/62 265/375/30 +f 263/373/28 299/413/63 268/378/33 +f 266/376/31 300/414/64 271/381/36 +f 301/415/27 302/416/40 303/417/27 +f 304/418/50 305/419/65 306/420/50 +f 307/421/47 306/420/50 308/422/47 +f 309/423/66 310/424/26 311/425/66 +f 312/426/40 313/427/55 302/416/40 +f 314/428/65 303/417/27 305/419/65 +f 315/429/26 308/422/47 310/424/26 +f 316/430/55 311/425/66 313/431/55 +f 293/406/58 317/432/67 298/412/62 +f 294/408/59 318/433/68 299/413/63 +f 295/409/60 319/434/69 300/414/64 +f 293/406/58 320/435/70 321/436/71 +f 298/412/62 322/437/56 294/408/59 +f 295/409/60 318/433/68 323/438/72 +f 319/434/69 324/439/73 325/440/74 +f 320/435/70 326/441/75 321/436/71 +f 317/432/67 327/442/76 322/437/56 +f 323/438/72 328/443/77 324/439/73 +f 317/432/67 326/441/75 329/444/78 +f 318/433/68 327/442/76 328/443/77 +f 300/414/64 319/434/69 296/445/54 +f 319/434/69 325/440/74 296/445/54 +f 297/411/61 296/446/54 320/435/70 +f 320/435/70 296/446/54 330/447/79 +f 330/447/79 331/448/55 332/449/66 +f 330/447/79 333/450/26 326/441/75 +f 325/440/74 331/451/55 296/452/54 +f 329/444/78 334/453/50 327/442/76 +f 328/443/77 335/454/27 324/439/73 +f 326/441/75 336/455/47 329/444/78 +f 327/442/76 337/456/65 328/443/77 +f 325/440/74 335/454/27 338/457/40 +f 263/373/28 274/385/39 264/374/29 +f 266/376/31 275/386/40 267/377/32 +f 269/379/34 273/458/38 270/380/35 +f 269/382/34 283/395/48 272/383/37 +f 263/373/28 268/378/33 267/377/32 +f 271/381/36 270/380/35 275/386/40 +f 272/383/37 284/396/49 276/387/41 +f 267/377/32 281/392/46 277/388/42 +f 275/386/40 270/380/35 278/389/43 +f 264/374/29 274/385/39 277/388/42 +f 275/386/40 279/390/44 281/392/46 +f 270/380/35 273/458/38 276/393/41 +f 284/396/49 282/400/47 285/397/50 +f 284/396/49 286/398/51 287/399/52 +f 280/391/45 291/404/56 285/397/50 +f 281/392/46 292/405/57 288/401/53 +f 279/390/44 278/389/43 289/402/54 +f 277/388/42 288/401/53 291/404/56 +f 279/390/44 290/403/55 292/405/57 +f 276/393/41 287/459/52 289/402/54 +f 283/395/48 297/411/61 293/406/58 +f 265/375/30 298/412/62 294/408/59 +f 268/378/33 299/413/63 295/409/60 +f 271/381/36 300/414/64 296/410/54 +f 269/382/34 296/460/54 297/411/61 +f 282/407/47 293/406/58 298/412/62 +f 263/373/28 294/408/59 299/413/63 +f 266/376/31 295/409/60 300/414/64 +f 301/415/27 312/426/40 302/416/40 +f 304/418/50 314/428/65 305/419/65 +f 307/421/47 304/418/50 306/420/50 +f 309/423/66 315/429/26 310/424/26 +f 312/426/40 316/461/55 313/427/55 +f 314/428/65 301/415/27 303/417/27 +f 315/429/26 307/421/47 308/422/47 +f 316/430/55 309/423/66 311/425/66 +f 293/406/58 321/436/71 317/432/67 +f 294/408/59 322/437/56 318/433/68 +f 295/409/60 323/438/72 319/434/69 +f 293/406/58 297/411/61 320/435/70 +f 298/412/62 317/432/67 322/437/56 +f 295/409/60 299/413/63 318/433/68 +f 319/434/69 323/438/72 324/439/73 +f 320/435/70 330/447/79 326/441/75 +f 317/432/67 329/444/78 327/442/76 +f 323/438/72 318/433/68 328/443/77 +f 317/432/67 321/436/71 326/441/75 +f 318/433/68 322/437/56 327/442/76 +f 330/447/79 296/462/54 331/448/55 +f 330/447/79 332/449/66 333/450/26 +f 325/440/74 338/457/40 331/451/55 +f 329/444/78 336/455/47 334/453/50 +f 328/443/77 337/456/65 335/454/27 +f 326/441/75 333/450/26 336/455/47 +f 327/442/76 334/453/50 337/456/65 +f 325/440/74 324/439/73 335/454/27 +o V2_Pad +v 1.500000 1.500000 -1.500000 +v -1.500000 1.500000 -2.000000 +v -1.500000 1.500000 -1.500000 +v 1.500000 1.000000 -1.500000 +v -1.500000 1.000000 -1.500000 +v 1.500000 1.500000 -2.000000 +v -1.500000 1.000000 -2.000000 +v 1.500000 1.000000 -2.000000 +v -0.500000 2.000000 0.500000 +v 1.500000 2.000000 1.500000 +v 0.500000 2.000000 0.500000 +v 1.500000 2.000000 -1.500000 +v 0.500000 2.000000 -0.500000 +v -1.500000 2.000000 -1.500000 +v -0.500000 2.000000 -0.500000 +v -1.500000 2.000000 1.500000 +v 0.500000 2.000000 -0.500000 v -0.500000 2.000000 0.500000 v 0.500000 2.000000 0.500000 -v -0.500000 2.000000 -0.500000 -v 0.500000 2.000000 -0.500000 -v -1.000000 1.750000 -1.000000 -v -1.000000 1.750000 1.000000 -v 1.000000 1.750000 1.000000 -v 1.000000 1.750000 -1.000000 -v -0.500000 1.750000 -0.500000 +v 1.500000 1.750000 1.500000 v -0.500000 1.750000 0.500000 v 0.500000 1.750000 0.500000 +v 1.500000 1.750000 -1.500000 v 0.500000 1.750000 -0.500000 +v -1.500000 1.750000 -1.500000 +v -0.500000 1.750000 -0.500000 +v -1.500000 1.750000 1.500000 +v 0.750000 1.125000 0.750000 +v 1.250000 1.625000 0.750000 +v 1.250000 1.125000 0.750000 +v 1.250000 1.125000 1.250000 +v 0.750000 1.625000 1.250000 +v 0.750000 1.125000 1.250000 +v 1.250000 1.625000 1.250000 +v 0.750000 1.625000 0.750000 +v 1.375000 1.625000 0.625000 +v 1.375000 1.750000 1.375000 +v 1.375000 1.625000 1.375000 +v 1.375000 1.125000 1.375000 +v 0.625000 1.125000 0.625000 +v 0.625000 1.125000 1.375000 +v 1.375000 1.000000 0.625000 +v 1.375000 1.000000 1.375000 +v 0.625000 1.000000 1.375000 +v 0.625000 1.000000 0.625000 +v 1.375000 1.125000 0.625000 +v 0.625000 1.625000 1.375000 +v 0.625000 1.750000 0.625000 +v 0.625000 1.625000 0.625000 +v 1.375000 1.750000 0.625000 +v 0.625000 1.750000 1.375000 +v 0.250000 10.000000 2.250000 +v -0.250000 10.000000 1.750000 +v -0.250000 10.000000 2.250000 +v 0.250000 1.000000 1.750000 +v 0.250000 1.000000 2.250000 +v -0.250000 1.000000 2.250000 +v -0.250000 1.000000 1.750000 +v 0.250000 10.000000 1.750000 +v 3.750000 2.750000 1.750000 +v 4.000000 2.750000 1.500000 +v 4.000000 2.750000 1.750000 +v 3.750000 1.000000 1.750000 +v 4.000000 1.000000 1.500000 +v 4.000000 1.000000 1.750000 +v 4.000000 1.250000 1.500000 +v 3.750000 1.250000 1.750000 +v 4.000000 1.250000 1.750000 +v 3.750000 1.000000 1.500000 +v 3.750000 1.250000 1.500000 +v 4.000000 1.250000 3.250000 +v 4.000000 1.000000 3.500000 +v 4.000000 1.000000 3.250000 +v 3.750000 1.250000 3.250000 +v 3.750000 1.000000 3.250000 +v 3.750000 1.250000 3.500000 +v 3.750000 1.000000 3.500000 +v 4.000000 1.250000 3.500000 +v 0.500000 1.000000 1.750000 +v 0.750000 1.000000 1.500000 +v 0.750000 1.000000 1.750000 +v 0.750000 1.250000 1.500000 +v 0.500000 1.250000 1.750000 +v 0.750000 1.250000 1.750000 +v 0.500000 1.000000 1.500000 +v 0.500000 1.250000 1.500000 +v 0.750000 1.250000 3.250000 +v 0.750000 1.000000 3.500000 +v 0.750000 1.000000 3.250000 +v 0.500000 1.250000 3.250000 +v 0.500000 1.000000 3.250000 +v 0.500000 1.250000 3.500000 +v 0.500000 1.000000 3.500000 +v 0.750000 1.250000 3.500000 +v 4.000000 3.000000 1.500000 +v 3.750000 3.000000 1.750000 +v 4.000000 3.000000 1.750000 +v 3.750000 2.750000 1.500000 +v 3.750000 3.000000 1.500000 +v 4.000000 3.000000 3.250000 +v 4.000000 2.750000 3.500000 +v 4.000000 2.750000 3.250000 +v 3.750000 3.000000 3.250000 +v 3.750000 2.750000 3.250000 +v 3.750000 3.000000 3.500000 +v 3.750000 2.750000 3.500000 +v 4.000000 3.000000 3.500000 +v 0.500000 2.750000 1.750000 +v 0.750000 2.750000 1.500000 +v 0.750000 2.750000 1.750000 +v 0.750000 3.000000 1.500000 +v 0.500000 3.000000 1.750000 +v 0.750000 3.000000 1.750000 +v 0.500000 2.750000 1.500000 +v 0.500000 3.000000 1.500000 +v 0.750000 3.000000 3.250000 +v 0.750000 2.750000 3.500000 +v 0.750000 2.750000 3.250000 +v 0.500000 3.000000 3.250000 +v 0.500000 2.750000 3.250000 +v 0.500000 3.000000 3.500000 +v 0.500000 2.750000 3.500000 +v 0.750000 3.000000 3.500000 +v 4.000000 1.000000 3.250000 +v 3.875000 1.000000 1.750000 +v 4.000000 1.000000 1.750000 +v 3.875000 1.000000 3.250000 +v 3.875000 1.125000 1.750000 +v 4.000000 1.125000 3.250000 +v 4.000000 1.125000 1.750000 +v 3.875000 1.125000 3.250000 +v 0.625000 1.000000 3.250000 +v 0.500000 1.000000 1.750000 +v 0.625000 1.000000 1.750000 +v 0.500000 1.000000 3.250000 +v 0.500000 1.125000 1.750000 +v 0.625000 1.125000 3.250000 +v 0.625000 1.125000 1.750000 +v 0.500000 1.125000 3.250000 +v 4.000000 2.875000 3.250000 +v 3.875000 2.875000 1.750000 +v 4.000000 2.875000 1.750000 +v 3.875000 2.875000 3.250000 +v 3.875000 3.000000 1.750000 +v 4.000000 3.000000 3.250000 +v 4.000000 3.000000 1.750000 +v 3.875000 3.000000 3.250000 +v 0.625000 2.875000 3.250000 +v 0.500000 2.875000 1.750000 +v 0.625000 2.875000 1.750000 +v 0.500000 2.875000 3.250000 +v 0.500000 3.000000 1.750000 +v 0.625000 3.000000 3.250000 +v 0.625000 3.000000 1.750000 +v 0.500000 3.000000 3.250000 +v 4.000000 1.250000 1.500000 +v 3.875000 2.750000 1.500000 +v 4.000000 2.750000 1.500000 +v 3.875000 1.250000 1.500000 +v 3.875000 2.750000 1.625000 +v 4.000000 1.250000 1.625000 +v 4.000000 2.750000 1.625000 +v 3.875000 1.250000 1.625000 +v 0.625000 1.250000 1.500000 +v 0.500000 2.750000 1.500000 +v 0.625000 2.750000 1.500000 +v 0.500000 1.250000 1.500000 +v 0.500000 2.750000 1.625000 +v 0.625000 1.250000 1.625000 +v 0.625000 2.750000 1.625000 +v 0.500000 1.250000 1.625000 +v 4.000000 1.250000 3.375000 +v 3.875000 2.750000 3.375000 +v 4.000000 2.750000 3.375000 +v 3.875000 1.250000 3.375000 +v 3.875000 2.750000 3.500000 +v 4.000000 1.250000 3.500000 +v 4.000000 2.750000 3.500000 +v 3.875000 1.250000 3.500000 +v 0.625000 1.250000 3.375000 +v 0.500000 2.750000 3.375000 +v 0.625000 2.750000 3.375000 +v 0.500000 1.250000 3.375000 +v 0.500000 2.750000 3.500000 +v 0.625000 1.250000 3.500000 +v 0.625000 2.750000 3.500000 +v 0.500000 1.250000 3.500000 +v 0.750000 1.000000 3.375000 +v 3.750000 1.000000 3.500000 +v 0.750000 1.000000 3.500000 +v 0.750000 1.125000 3.375000 +v 3.750000 1.000000 3.375000 +v 3.750000 1.125000 3.500000 +v 0.750000 1.125000 3.500000 +v 0.750000 2.875000 3.375000 +v 3.750000 2.875000 3.500000 +v 0.750000 2.875000 3.500000 +v 0.750000 3.000000 3.375000 +v 3.750000 2.875000 3.375000 +v 3.750000 3.000000 3.500000 +v 0.750000 3.000000 3.500000 +v 0.750000 1.000000 1.500000 +v 3.750000 1.000000 1.625000 +v 0.750000 1.000000 1.625000 +v 0.750000 1.125000 1.500000 +v 3.750000 1.000000 1.500000 +v 3.750000 1.125000 1.625000 +v 0.750000 1.125000 1.625000 +v 0.750000 2.875000 1.500000 +v 3.750000 2.875000 1.625000 +v 0.750000 2.875000 1.625000 +v 0.750000 3.000000 1.500000 +v 3.750000 2.875000 1.500000 +v 3.750000 3.000000 1.625000 +v 0.750000 3.000000 1.625000 +v 0.750000 1.125000 -1.250000 +v 1.250000 1.625000 -1.250000 +v 1.250000 1.125000 -1.250000 +v 1.250000 1.125000 -0.750000 +v 0.750000 1.625000 -0.750000 +v 0.750000 1.125000 -0.750000 +v 1.250000 1.625000 -0.750000 +v 0.750000 1.625000 -1.250000 +v 1.375000 1.625000 -1.375000 +v 1.375000 1.750000 -0.625000 +v 1.375000 1.625000 -0.625000 +v 1.375000 1.125000 -0.625000 +v 0.625000 1.125000 -1.375000 +v 0.625000 1.125000 -0.625000 +v 1.375000 1.000000 -1.375000 +v 1.375000 1.000000 -0.625000 +v 0.625000 1.000000 -0.625000 +v 0.625000 1.000000 -1.375000 +v 1.375000 1.125000 -1.375000 +v 0.625000 1.625000 -0.625000 +v 0.625000 1.750000 -1.375000 +v 0.625000 1.625000 -1.375000 +v 1.375000 1.750000 -1.375000 +v 0.625000 1.750000 -0.625000 +v -1.250000 1.125000 0.750000 +v -0.750000 1.625000 0.750000 +v -0.750000 1.125000 0.750000 +v -0.750000 1.125000 1.250000 +v -1.250000 1.625000 1.250000 +v -1.250000 1.125000 1.250000 +v -0.750000 1.625000 1.250000 +v -1.250000 1.625000 0.750000 +v -0.625000 1.625000 0.625000 +v -0.625000 1.750000 1.375000 +v -0.625000 1.625000 1.375000 +v -0.625000 1.125000 1.375000 +v -1.375000 1.125000 0.625000 +v -1.375000 1.125000 1.375000 +v -0.625000 1.000000 0.625000 +v -0.625000 1.000000 1.375000 +v -1.375000 1.000000 1.375000 +v -1.375000 1.000000 0.625000 +v -0.625000 1.125000 0.625000 +v -1.375000 1.625000 1.375000 +v -1.375000 1.750000 0.625000 +v -1.375000 1.625000 0.625000 +v -0.625000 1.750000 0.625000 +v -1.375000 1.750000 1.375000 +v -1.250000 1.125000 -1.250000 +v -0.750000 1.625000 -1.250000 +v -0.750000 1.125000 -1.250000 +v -0.750000 1.125000 -0.750000 +v -1.250000 1.625000 -0.750000 +v -1.250000 1.125000 -0.750000 +v -0.750000 1.625000 -0.750000 +v -1.250000 1.625000 -1.250000 +v -0.625000 1.625000 -1.375000 +v -0.625000 1.750000 -0.625000 +v -0.625000 1.625000 -0.625000 +v -0.625000 1.125000 -0.625000 +v -1.375000 1.125000 -1.375000 +v -1.375000 1.125000 -0.625000 +v -0.625000 1.000000 -1.375000 +v -0.625000 1.000000 -0.625000 +v -1.375000 1.000000 -0.625000 +v -1.375000 1.000000 -1.375000 +v -0.625000 1.125000 -1.375000 +v -1.375000 1.625000 -0.625000 +v -1.375000 1.750000 -1.375000 +v -1.375000 1.625000 -1.375000 +v -0.625000 1.750000 -1.375000 +v -1.375000 1.750000 -0.625000 +v -0.500000 2.000000 -0.500000 +v 3.750000 1.125000 3.375000 +v 3.750000 3.000000 3.375000 +v 3.750000 1.125000 1.500000 +v 3.750000 3.000000 1.500000 +v 3.750000 2.000000 1.500000 +v 0.750001 1.500000 1.633975 +v 0.750001 2.000000 1.500000 +v 3.750000 1.500000 1.633975 +v 0.750001 1.133975 2.000000 +v 3.750000 1.133975 2.000000 +v 0.750001 1.000000 2.500000 +v 3.750000 1.000000 2.500000 +v 0.750001 1.133975 3.000000 +v 3.750000 1.133975 3.000000 +v 0.750001 1.500000 3.366025 +v 3.750000 1.500000 3.366025 +v 0.750001 2.000000 3.500000 +v 3.750000 2.000000 3.500000 +v 0.750001 2.500000 3.366025 +v 3.750000 2.500000 3.366025 +v 0.750001 2.866026 3.000000 +v 3.750000 2.866026 3.000000 +v 0.750001 3.000000 2.500000 +v 3.750000 3.000000 2.500000 +v 0.750001 2.866026 2.000000 +v 4.000000 2.649519 2.875000 +v 3.750000 2.866026 2.000000 +v 0.750001 2.500001 1.633975 +v 3.750000 2.500001 1.633975 +v 0.500001 2.000000 3.250000 +v 0.500001 1.625000 3.149519 +v 4.000000 1.350481 2.875000 +v 4.000000 1.350481 2.125000 +v 4.000000 2.649520 2.125000 +v 4.000000 2.000000 3.250000 +v 4.000000 2.375000 3.149519 +v 4.000000 1.625000 3.149519 +v 4.000000 2.375001 1.850481 +v 4.000000 2.000000 1.750000 +v 4.000000 1.625000 1.850481 +v 4.000000 1.250000 2.500000 +v 4.000000 2.750000 2.500000 +v 0.500001 1.250000 2.500000 +v 0.500001 2.375000 3.149519 +v 0.500001 2.375001 1.850481 +v 0.500001 1.350481 2.875000 +v 0.500001 2.000000 1.750000 +v 0.500001 1.625000 1.850481 +v 0.500001 1.350481 2.125000 +v 0.500001 2.649520 2.125000 +v 0.500001 2.750000 2.500000 +v 0.500001 2.649519 2.875000 +vt 0.265306 0.763158 +vt 0.510204 0.710526 +vt 0.510204 0.763158 +vt 0.265306 0.815789 +vt 0.510204 0.815789 +vt 0.265306 0.710526 +vt 0.510204 0.657895 +vt 0.224490 0.710526 +vt 0.224490 0.763158 +vt 0.551020 0.710526 +vt 0.551020 0.763158 +vt 0.244898 0.552632 +vt 0.163265 0.342105 +vt 0.244898 0.447368 +vt 0.408163 0.342105 +vt 0.326531 0.447368 +vt 0.408163 0.657895 +vt 0.326531 0.552632 +vt 0.163265 0.657895 +vt 0.326531 0.447368 +vt 0.244898 0.552632 +vt 0.244898 0.447368 +vt 0.163265 0.315789 +vt 0.244898 0.105263 +vt 0.244898 0.210526 +vt 0.408163 0.315789 +vt 0.326531 0.210526 +vt 0.408163 -0.000000 +vt 0.326531 0.105263 +vt 0.163265 -0.000000 +vt 0.244898 0.210526 +vt 0.326531 0.184211 +vt 0.326531 0.210526 +vt 0.163265 0.342105 +vt 0.408163 0.315789 +vt 0.408163 0.342105 +vt 0.244898 0.210526 +vt 0.326531 0.184211 +vt 0.326531 0.210526 +vt 0.244898 0.210526 +vt 0.326531 0.184211 +vt 0.326531 0.210526 +vt 0.163265 0.342105 +vt 0.408163 0.315789 +vt 0.408163 0.342105 +vt 0.163265 0.342105 +vt 0.408163 0.315789 +vt 0.408163 0.342105 +vt 0.244898 0.210526 +vt 0.326531 0.184211 +vt 0.326531 0.210526 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.163265 0.671053 +vt 0.224490 0.750000 +vt 0.163265 0.750000 +vt 0.224490 0.657895 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.163265 0.802632 +vt 0.224490 0.802632 +vt 0.040816 0.947368 +vt 0.081633 1.000000 +vt 0.040816 1.000000 +vt 0.081633 0.000000 +vt 0.040816 0.000000 +vt 0.163265 0.000000 +vt 0.122449 0.947368 +vt 0.122449 0.000000 +vt 0.081633 0.947368 +vt 0.000000 0.947368 +vt 0.000000 0.000000 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.500000 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.500000 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.500000 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.765306 0.315789 +vt 0.775510 0.315789 +vt 0.765306 0.473684 +vt 0.755102 0.315789 +vt 0.785714 0.473684 +vt 0.785714 0.315789 +vt 0.795918 0.473684 +vt 0.785714 0.473684 +vt 0.775510 0.315789 +vt 0.785714 0.315789 +vt 0.775510 0.473684 +vt 0.765306 0.315789 +vt 0.795918 0.473684 +vt 0.755102 0.315789 +vt 0.765306 0.473684 +vt 0.755102 0.473684 +vt 0.765306 0.473684 +vt 0.755102 0.315789 +vt 0.765306 0.315789 +vt 0.795918 0.473684 +vt 0.785714 0.315789 +vt 0.795918 0.315789 +vt 0.775510 0.473684 +vt 0.775510 0.315789 +vt 0.785714 0.473684 +vt 0.795918 0.473684 +vt 0.785714 0.315789 +vt 0.795918 0.315789 +vt 0.785714 0.473684 +vt 0.775510 0.315789 +vt 0.755102 0.315789 +vt 0.765306 0.473684 +vt 0.755102 0.473684 +vt 0.765306 0.315789 +vt 0.775510 0.473684 +vt 0.775510 0.315789 +vt 0.785714 0.473684 +vt 0.775510 0.473684 +vt 0.785714 0.315789 +vt 0.795918 0.473684 +vt 0.765306 0.315789 +vt 0.765306 0.473684 +vt 0.755102 0.315789 +vt 0.765306 0.315789 +vt 0.775510 0.473684 +vt 0.765306 0.473684 +vt 0.775510 0.315789 +vt 0.785714 0.473684 +vt 0.755102 0.315789 +vt 0.795918 0.473684 +vt 0.785714 0.315789 +vt 0.795918 0.315789 +vt 0.785714 0.315789 +vt 0.795918 0.473684 +vt 0.785714 0.473684 +vt 0.755102 0.315789 +vt 0.765306 0.473684 +vt 0.755102 0.473684 +vt 0.775510 0.315789 +vt 0.775510 0.473684 +vt 0.765306 0.315789 +vt 0.755102 0.315789 +vt 0.765306 0.473684 +vt 0.755102 0.473684 +vt 0.765306 0.315789 +vt 0.775510 0.473684 +vt 0.795918 0.473684 +vt 0.785714 0.315789 +vt 0.795918 0.315789 +vt 0.785714 0.473684 +vt 0.775510 0.315789 +vt 0.724490 0.631579 +vt 0.734694 0.315789 +vt 0.734694 0.631579 +vt 0.714286 0.631579 +vt 0.724490 0.315789 +vt 0.744898 0.315789 +vt 0.755102 0.631579 +vt 0.744898 0.631579 +vt 0.714286 0.631579 +vt 0.724490 0.315789 +vt 0.724490 0.631579 +vt 0.744898 0.631579 +vt 0.755102 0.315789 +vt 0.755102 0.631579 +vt 0.734694 0.315789 +vt 0.734694 0.631579 +vt 0.734694 0.631579 +vt 0.744898 0.315789 +vt 0.744898 0.631579 +vt 0.724490 0.631579 +vt 0.734694 0.315789 +vt 0.755102 0.315789 +vt 0.714286 0.315789 +vt 0.714286 0.631579 +vt 0.744898 0.631579 +vt 0.755102 0.315789 +vt 0.755102 0.631579 +vt 0.734694 0.631579 +vt 0.744898 0.315789 +vt 0.724490 0.315789 +vt 0.714286 0.631579 +vt 0.714286 0.315789 +vt 0.724490 0.631579 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.163265 0.671053 +vt 0.224490 0.750000 +vt 0.163265 0.750000 +vt 0.224490 0.657895 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.163265 0.802632 +vt 0.224490 0.802632 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.163265 0.671053 +vt 0.224490 0.750000 +vt 0.163265 0.750000 +vt 0.224490 0.657895 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.163265 0.802632 +vt 0.224490 0.802632 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.214286 0.750000 +vt 0.173469 0.802632 +vt 0.173469 0.750000 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.163265 0.671053 +vt 0.224490 0.750000 +vt 0.163265 0.750000 +vt 0.224490 0.657895 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.657895 +vt 0.163265 0.671053 +vt 0.163265 0.657895 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.224490 0.881579 +vt 0.163265 0.894737 +vt 0.163265 0.881579 +vt 0.163265 0.802632 +vt 0.224490 0.802632 +vt 0.265306 0.657895 +vt 0.326531 0.552632 +vt 0.244898 0.184211 +vt 0.163265 0.315789 +vt 0.244898 0.184211 +vt 0.244898 0.184211 +vt 0.163265 0.315789 +vt 0.163265 0.315789 +vt 0.244898 0.184211 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.224490 0.894737 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.894737 +vt 0.224490 0.894737 +vt 0.224490 0.894737 +vt 0.163265 0.947368 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.473684 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.500000 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.755102 0.473684 +vt 0.755102 0.473684 +vt 0.755102 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.500000 +vt 0.775510 0.473684 +vt 0.775510 0.473684 +vt 0.755102 0.473684 +vt 0.795918 0.315789 +vt 0.795918 0.315789 +vt 0.755102 0.473684 +vt 0.795918 0.315789 +vt 0.755102 0.473684 +vt 0.755102 0.473684 +vt 0.795918 0.315789 +vt 0.714286 0.315789 +vt 0.755102 0.315789 +vt 0.714286 0.315789 +vt 0.744898 0.315789 +vt 0.724490 0.315789 +vt 0.755102 0.631579 +vt 0.734694 0.315789 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.224490 0.894737 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.894737 +vt 0.224490 0.894737 +vt 0.224490 0.894737 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.224490 0.894737 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.894737 +vt 0.224490 0.894737 +vt 0.224490 0.894737 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.214286 0.802632 +vt 0.224490 0.894737 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.671053 +vt 0.224490 0.894737 +vt 0.224490 0.894737 +vt 0.224490 0.894737 +vt 0.683673 0.473684 +vt 0.438776 0.526316 +vt 0.438776 0.473684 +vt 0.683673 0.526316 +vt 0.438776 0.578947 +vt 0.683673 0.578947 +vt 0.438776 0.631579 +vt 0.683673 -0.000000 +vt 0.438776 0.052632 +vt 0.438776 -0.000000 +vt 0.683673 0.052632 +vt 0.438776 0.105263 +vt 0.683673 0.105263 +vt 0.438776 0.157895 +vt 0.683673 0.157895 +vt 0.438776 0.210526 +vt 0.683673 0.210526 +vt 0.438776 0.263158 +vt 0.683673 0.263158 +vt 0.438776 0.315789 +vt 0.683673 0.315789 +vt 0.438776 0.368421 +vt 0.714286 0.256579 +vt 0.683673 0.368421 +vt 0.438776 0.421053 +vt 0.683673 0.421053 +vt 0.408163 0.151316 +vt 0.408163 0.111842 +vt 0.745408 0.011716 +vt 0.805612 0.011716 +vt 0.805612 0.146179 +vt 0.714286 0.164474 +vt 0.714286 0.203947 +vt 0.714286 0.151316 +vt 0.714286 0.098684 +vt 0.714286 0.046053 +vt 0.714286 0.427632 +vt 0.714286 0.467105 +vt 0.714286 0.519737 +vt 0.683673 0.631579 +vt 0.714286 0.585526 +vt 0.714286 0.625000 +vt 0.714286 0.375000 +vt 0.714286 0.414474 +vt 0.714286 0.532895 +vt 0.714286 0.572368 +vt 0.714286 0.322368 +vt 0.714286 0.361842 +vt 0.714286 0.309211 +vt 0.775510 0.159210 +vt 0.827649 0.275658 +vt 0.723372 0.275658 +vt 0.408163 0.059211 +vt 0.408163 0.046053 +vt 0.408163 0.006579 +vt 0.408163 0.467105 +vt 0.408163 0.427632 +vt 0.408163 0.519737 +vt 0.408163 0.480263 +vt 0.408163 0.585526 +vt 0.408163 0.375000 +vt 0.408163 0.532895 +vt 0.408163 0.322368 +vt 0.408163 0.309211 +vt 0.408163 0.269737 +vt 0.408163 0.217105 +vt 0.408163 0.164474 +vt 0.714286 0.217105 +vt 0.827649 0.040131 +vt 0.835715 0.078947 +vt 0.827649 0.117763 +vt 0.775510 0.156579 +vt 0.745408 0.146179 +vt 0.723372 0.117763 +vt 0.715306 0.078947 +vt 0.723372 0.040131 +vt 0.775510 0.001315 +vt 0.714286 0.111842 +vt 0.714286 0.059211 +vt 0.714286 0.006579 +vt 0.714286 0.480263 +vt 0.714286 0.269737 +vt 0.715306 0.236842 +vt 0.723372 0.198026 +vt 0.745408 0.169611 +vt 0.805612 0.169611 +vt 0.827649 0.198026 +vt 0.835715 0.236842 +vt 0.805612 0.304073 +vt 0.775510 0.314474 +vt 0.745408 0.304073 +vt 0.408163 0.098684 +vt 0.408163 0.625000 +vt 0.408163 0.414474 +vt 0.408163 0.572368 +vt 0.408163 0.361842 +vt 0.408163 0.256579 +vt 0.408163 0.203947 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.3620 -0.0000 -0.9322 +vn -0.3620 -0.4661 -0.8073 +vn -0.3620 -0.0000 -0.9322 +vn 0.3620 -0.4661 -0.8073 +vn -0.3620 -0.8073 -0.4661 +vn 0.3620 -0.8073 -0.4661 +vn -0.3620 -0.9322 -0.0000 +vn 0.3620 -0.9322 0.0000 +vn -0.3620 -0.8073 0.4661 +vn 0.3620 -0.8073 0.4661 +vn -0.3620 -0.4661 0.8073 +vn 0.3620 -0.4661 0.8073 +vn -0.3620 0.0000 0.9322 +vn 0.3620 -0.0000 0.9322 +vn -0.3620 0.4661 0.8073 +vn 0.3620 0.4661 0.8073 +vn -0.3620 0.8073 0.4661 +vn 0.3620 0.8073 0.4661 +vn -0.3620 0.9322 0.0000 +vn 0.3620 0.9322 -0.0000 +vn -0.3620 0.8073 -0.4661 +vn 0.9007 0.3762 0.2172 +vn 0.3620 0.8073 -0.4661 +vn -0.3620 0.4661 -0.8073 +vn 0.3620 0.4661 -0.8073 +vn -0.9007 -0.0000 0.4344 +vn -0.9007 -0.2172 0.3762 +vn 0.9007 -0.3762 0.2172 +vn 0.9007 -0.3762 -0.2172 +vn 0.9007 0.3762 -0.2172 +vn 0.9007 -0.0000 0.4344 +vn 0.9007 0.2172 0.3762 +vn 0.9007 -0.2172 0.3762 +vn 0.9007 0.2172 -0.3762 +vn 0.9007 -0.0000 -0.4344 +vn 0.9007 -0.2172 -0.3762 +vn 0.9007 -0.4344 0.0000 +vn 0.9007 0.4344 0.0000 +vn -0.9007 -0.4344 0.0000 +vn -0.9007 0.2172 0.3762 +vn -0.9007 0.2172 -0.3762 +vn -0.9007 -0.3762 0.2172 +vn -0.9007 -0.0000 -0.4344 +vn -0.9007 -0.2172 -0.3762 +vn -0.9007 -0.3762 -0.2172 +vn -0.9007 0.3762 -0.2172 +vn -0.9007 0.4344 0.0000 +vn -0.9007 0.3762 0.2172 +s off +f 339/463/80 340/464/80 341/465/80 +f 342/466/81 341/465/81 343/467/81 +f 344/468/82 345/469/82 340/464/82 +f 346/470/83 339/463/83 342/471/83 +f 341/465/84 345/472/84 343/473/84 +f 347/474/80 348/475/80 349/476/80 +f 349/476/80 350/477/80 351/478/80 +f 351/478/80 352/479/80 353/480/80 +f 353/480/80 354/481/80 347/474/80 +f 355/482/80 356/483/80 357/484/80 +f 358/485/85 359/486/85 360/487/85 +f 361/488/85 360/487/85 362/489/85 +f 363/490/85 362/489/85 364/491/85 +f 365/492/85 364/491/85 359/486/85 +f 351/493/84 360/494/84 349/495/84 +f 348/475/83 361/488/83 350/477/83 +f 352/496/84 365/497/84 354/498/84 +f 349/499/82 359/500/82 347/501/82 +f 347/502/83 364/503/83 353/504/83 +f 350/505/82 363/506/82 352/507/82 +f 354/508/81 358/509/81 348/510/81 +f 353/511/81 362/512/81 351/513/81 +f 366/514/82 367/515/82 368/516/82 +f 369/517/81 370/518/81 371/519/81 +f 368/520/83 372/521/83 369/522/83 +f 371/523/84 373/524/84 366/525/84 +f 374/526/83 375/527/83 376/528/83 +f 377/529/80 378/530/80 379/531/80 +f 380/532/83 377/529/83 381/533/83 +f 382/534/84 378/535/84 383/536/84 +f 383/537/82 384/538/82 380/539/82 +f 381/540/81 379/541/81 382/542/81 +f 385/543/84 386/544/84 387/545/84 +f 387/546/82 388/547/82 374/548/82 +f 376/549/81 389/550/81 385/551/81 +f 374/526/85 385/552/85 387/553/85 +f 390/554/80 391/555/80 392/556/80 +f 393/557/83 390/554/83 394/558/83 +f 395/559/84 391/560/84 396/561/84 +f 396/561/82 397/562/82 393/557/82 +f 394/558/81 392/563/81 395/564/81 +f 398/565/85 399/566/85 400/567/85 +f 401/568/85 402/569/85 403/570/85 +f 404/571/80 405/572/80 406/573/80 +f 406/574/81 401/575/81 403/576/81 +f 405/572/84 407/577/84 401/578/84 +f 408/579/82 402/569/82 407/580/82 +f 404/581/83 403/582/83 402/569/83 +f 409/583/83 410/584/83 411/585/83 +f 412/586/82 411/587/82 413/588/82 +f 414/589/84 413/590/84 415/591/84 +f 416/592/81 415/593/81 410/584/81 +f 409/594/80 414/595/80 416/596/80 +f 415/597/85 411/598/85 410/584/85 +f 417/599/85 418/600/85 419/601/85 +f 420/602/80 421/603/80 422/604/80 +f 422/604/81 417/605/81 419/606/81 +f 421/607/84 423/608/84 417/609/84 +f 424/610/82 418/611/82 423/608/82 +f 420/612/83 419/613/83 418/614/83 +f 425/615/83 426/616/83 427/617/83 +f 428/618/82 427/619/82 429/620/82 +f 430/621/84 429/622/84 431/623/84 +f 432/624/81 431/623/81 426/625/81 +f 425/615/80 430/626/80 432/627/80 +f 431/623/85 427/628/85 426/629/85 +f 433/630/80 434/631/80 435/632/80 +f 435/633/81 398/565/81 400/634/81 +f 434/635/84 436/636/84 398/565/84 +f 437/637/82 399/638/82 436/639/82 +f 433/630/83 400/640/83 399/641/83 +f 438/642/83 439/643/83 440/644/83 +f 441/645/82 440/646/82 442/647/82 +f 443/648/84 442/647/84 444/649/84 +f 445/650/81 444/651/81 439/652/81 +f 438/653/80 443/654/80 445/650/80 +f 444/655/85 440/656/85 439/657/85 +f 446/658/85 447/659/85 448/660/85 +f 449/661/80 450/662/80 451/663/80 +f 451/664/81 446/665/81 448/660/81 +f 450/666/84 452/667/84 446/668/84 +f 453/669/82 447/670/82 452/671/82 +f 449/672/83 448/660/83 447/673/83 +f 454/674/83 455/675/83 456/676/83 +f 457/677/82 456/676/82 458/678/82 +f 459/679/84 458/680/84 460/681/84 +f 461/682/81 460/683/81 455/684/81 +f 454/685/80 459/679/80 461/686/80 +f 460/687/85 456/676/85 455/688/85 +f 462/689/85 463/690/85 464/691/85 +f 465/692/84 466/693/84 463/690/84 +f 464/691/83 467/694/83 462/689/83 +f 468/695/80 469/696/80 467/694/80 +f 470/697/85 471/698/85 472/699/85 +f 473/700/84 474/701/84 471/698/84 +f 472/699/83 475/702/83 470/697/83 +f 476/703/80 477/704/80 475/705/80 +f 478/706/85 479/707/85 480/708/85 +f 481/709/84 482/710/84 479/711/84 +f 480/708/83 483/712/83 478/706/83 +f 484/713/80 485/714/80 483/712/80 +f 486/715/85 487/716/85 488/717/85 +f 489/718/84 490/719/84 487/716/84 +f 488/720/83 491/721/83 486/722/83 +f 492/723/80 493/724/80 491/721/80 +f 494/725/82 495/726/82 496/727/82 +f 497/728/84 498/729/84 495/726/84 +f 496/727/83 499/730/83 494/725/83 +f 500/731/81 501/732/81 499/730/81 +f 502/733/82 503/734/82 504/735/82 +f 505/736/84 506/737/84 503/734/84 +f 504/735/83 507/738/83 502/733/83 +f 508/739/81 509/740/81 507/741/81 +f 510/742/82 511/743/82 512/744/82 +f 513/745/84 514/746/84 511/747/84 +f 512/744/83 515/748/83 510/742/83 +f 516/749/81 517/750/81 515/748/81 +f 518/751/82 519/752/82 520/753/82 +f 521/754/84 522/755/84 519/752/84 +f 520/756/83 523/757/83 518/758/83 +f 524/759/81 525/760/81 523/757/81 +f 526/761/85 527/762/85 528/763/85 +f 529/764/82 530/765/82 526/761/82 +f 531/766/81 528/763/81 527/762/81 +f 531/766/80 529/767/80 532/768/80 +f 533/769/85 534/770/85 535/771/85 +f 536/772/82 537/773/82 533/774/82 +f 538/775/81 535/771/81 534/770/81 +f 538/775/80 536/772/80 539/776/80 +f 540/777/85 541/778/85 542/779/85 +f 543/780/82 544/781/82 540/777/82 +f 545/782/81 542/779/81 541/778/81 +f 545/783/80 543/780/80 546/784/80 +f 547/785/85 548/786/85 549/787/85 +f 550/788/82 551/789/82 547/785/82 +f 552/790/81 549/791/81 548/792/81 +f 552/790/80 550/788/80 553/793/80 +f 554/794/82 555/795/82 556/796/82 +f 557/797/81 558/798/81 559/799/81 +f 556/800/83 560/801/83 557/802/83 +f 559/803/84 561/804/84 554/805/84 +f 562/806/83 563/807/83 564/808/83 +f 565/809/80 566/810/80 567/811/80 +f 568/812/83 565/809/83 569/813/83 +f 570/814/84 566/815/84 571/816/84 +f 571/817/82 572/818/82 568/819/82 +f 569/820/81 567/821/81 570/822/81 +f 573/823/84 574/824/84 575/825/84 +f 575/826/82 576/827/82 562/828/82 +f 564/829/81 577/830/81 573/831/81 +f 562/806/85 573/832/85 575/833/85 +f 578/834/82 579/835/82 580/836/82 +f 581/837/81 582/838/81 583/839/81 +f 580/840/83 584/841/83 581/842/83 +f 583/843/84 585/844/84 578/845/84 +f 586/846/83 587/847/83 588/848/83 +f 589/849/80 590/850/80 591/851/80 +f 592/852/83 589/849/83 593/853/83 +f 594/854/84 590/855/84 595/856/84 +f 595/857/82 596/858/82 592/859/82 +f 593/860/81 591/861/81 594/862/81 +f 597/863/84 598/864/84 599/865/84 +f 599/866/82 600/867/82 586/868/82 +f 588/869/81 601/870/81 597/871/81 +f 586/846/85 597/872/85 599/873/85 +f 602/874/82 603/875/82 604/876/82 +f 605/877/81 606/878/81 607/879/81 +f 604/880/83 608/881/83 605/882/83 +f 607/883/84 609/884/84 602/885/84 +f 610/886/83 611/887/83 612/888/83 +f 613/889/80 614/890/80 615/891/80 +f 616/892/83 613/889/83 617/893/83 +f 618/894/84 614/895/84 619/896/84 +f 619/897/82 620/898/82 616/899/82 +f 617/900/81 615/901/81 618/902/81 +f 621/903/84 622/904/84 623/905/84 +f 623/906/82 624/907/82 610/908/82 +f 612/909/81 625/910/81 621/911/81 +f 610/886/85 621/912/85 623/913/85 +f 339/463/80 344/468/80 340/464/80 +f 342/466/81 339/463/81 341/465/81 +f 344/468/82 346/914/82 345/469/82 +f 346/470/83 344/468/83 339/463/83 +f 341/465/84 340/464/84 345/472/84 +f 347/474/80 354/481/80 348/475/80 +f 349/476/80 348/475/80 350/477/80 +f 351/478/80 350/477/80 352/479/80 +f 353/480/80 352/479/80 354/481/80 +f 355/482/80 626/915/80 356/483/80 +f 358/485/85 365/492/85 359/486/85 +f 361/488/85 358/485/85 360/487/85 +f 363/490/85 361/488/85 362/489/85 +f 365/492/85 363/490/85 364/491/85 +f 351/493/84 362/916/84 360/494/84 +f 348/475/83 358/485/83 361/488/83 +f 352/496/84 363/917/84 365/497/84 +f 349/499/82 360/918/82 359/500/82 +f 347/502/83 359/919/83 364/503/83 +f 350/505/82 361/920/82 363/506/82 +f 354/508/81 365/921/81 358/509/81 +f 353/511/81 364/922/81 362/512/81 +f 366/514/82 373/923/82 367/515/82 +f 369/517/81 372/924/81 370/518/81 +f 368/520/83 367/925/83 372/521/83 +f 371/523/84 370/926/84 373/524/84 +f 374/526/83 388/927/83 375/527/83 +f 377/529/80 384/928/80 378/530/80 +f 380/532/83 384/928/83 377/529/83 +f 382/534/84 379/929/84 378/535/84 +f 383/537/82 378/930/82 384/538/82 +f 381/540/81 377/931/81 379/541/81 +f 385/543/84 389/932/84 386/544/84 +f 387/546/82 386/933/82 388/547/82 +f 376/549/81 375/934/81 389/550/81 +f 374/526/85 376/528/85 385/552/85 +f 390/554/80 397/562/80 391/555/80 +f 393/557/83 397/562/83 390/554/83 +f 395/559/84 392/935/84 391/560/84 +f 396/561/82 391/560/82 397/562/82 +f 394/558/81 390/554/81 392/563/81 +f 398/565/85 436/936/85 399/566/85 +f 401/568/85 407/937/85 402/569/85 +f 404/571/80 408/938/80 405/572/80 +f 406/574/81 405/572/81 401/575/81 +f 405/572/84 408/939/84 407/577/84 +f 408/579/82 404/940/82 402/569/82 +f 404/581/83 406/941/83 403/582/83 +f 409/583/83 416/942/83 410/584/83 +f 412/586/82 409/943/82 411/587/82 +f 414/589/84 412/586/84 413/590/84 +f 416/592/81 414/944/81 415/593/81 +f 409/594/80 412/586/80 414/595/80 +f 415/597/85 413/945/85 411/598/85 +f 417/599/85 423/608/85 418/600/85 +f 420/602/80 424/946/80 421/603/80 +f 422/604/81 421/947/81 417/605/81 +f 421/607/84 424/948/84 423/608/84 +f 424/610/82 420/949/82 418/611/82 +f 420/612/83 422/604/83 419/613/83 +f 425/615/83 432/950/83 426/616/83 +f 428/618/82 425/615/82 427/619/82 +f 430/621/84 428/951/84 429/622/84 +f 432/624/81 430/952/81 431/623/81 +f 425/615/80 428/953/80 430/626/80 +f 431/623/85 429/954/85 427/628/85 +f 433/630/80 437/955/80 434/631/80 +f 435/633/81 434/956/81 398/565/81 +f 434/635/84 437/957/84 436/636/84 +f 437/637/82 433/630/82 399/638/82 +f 433/630/83 435/958/83 400/640/83 +f 438/642/83 445/650/83 439/643/83 +f 441/645/82 438/959/82 440/646/82 +f 443/648/84 441/960/84 442/647/84 +f 445/650/81 443/961/81 444/651/81 +f 438/653/80 441/962/80 443/654/80 +f 444/655/85 442/647/85 440/656/85 +f 446/658/85 452/963/85 447/659/85 +f 449/661/80 453/669/80 450/662/80 +f 451/664/81 450/964/81 446/665/81 +f 450/666/84 453/669/84 452/667/84 +f 453/669/82 449/965/82 447/670/82 +f 449/672/83 451/966/83 448/660/83 +f 454/674/83 461/967/83 455/675/83 +f 457/677/82 454/968/82 456/676/82 +f 459/679/84 457/969/84 458/680/84 +f 461/682/81 459/679/81 460/683/81 +f 454/685/80 457/970/80 459/679/80 +f 460/687/85 458/971/85 456/676/85 +f 462/689/85 465/692/85 463/690/85 +f 465/692/84 469/972/84 466/693/84 +f 464/691/83 468/695/83 467/694/83 +f 468/695/80 466/973/80 469/696/80 +f 470/697/85 473/700/85 471/698/85 +f 473/700/84 477/704/84 474/701/84 +f 472/699/83 476/974/83 475/702/83 +f 476/703/80 474/701/80 477/704/80 +f 478/706/85 481/975/85 479/707/85 +f 481/709/84 485/714/84 482/710/84 +f 480/708/83 484/713/83 483/712/83 +f 484/713/80 482/710/80 485/714/80 +f 486/715/85 489/718/85 487/716/85 +f 489/718/84 493/724/84 490/719/84 +f 488/720/83 492/723/83 491/721/83 +f 492/723/80 490/719/80 493/724/80 +f 494/725/82 497/728/82 495/726/82 +f 497/728/84 501/976/84 498/729/84 +f 496/727/83 500/731/83 499/730/83 +f 500/731/81 498/977/81 501/732/81 +f 502/733/82 505/736/82 503/734/82 +f 505/736/84 509/740/84 506/737/84 +f 504/735/83 508/978/83 507/738/83 +f 508/739/81 506/737/81 509/740/81 +f 510/742/82 513/979/82 511/743/82 +f 513/745/84 517/750/84 514/746/84 +f 512/744/83 516/749/83 515/748/83 +f 516/749/81 514/746/81 517/750/81 +f 518/751/82 521/754/82 519/752/82 +f 521/754/84 525/760/84 522/755/84 +f 520/756/83 524/759/83 523/757/83 +f 524/759/81 522/755/81 525/760/81 +f 526/761/85 530/765/85 527/762/85 +f 529/764/82 627/980/82 530/765/82 +f 531/766/81 532/768/81 528/763/81 +f 531/766/80 627/981/80 529/767/80 +f 533/769/85 537/982/85 534/770/85 +f 536/772/82 628/983/82 537/773/82 +f 538/775/81 539/776/81 535/771/81 +f 538/775/80 628/983/80 536/772/80 +f 540/777/85 544/781/85 541/778/85 +f 543/780/82 629/984/82 544/781/82 +f 545/782/81 546/985/81 542/779/81 +f 545/783/80 629/984/80 543/780/80 +f 547/785/85 551/789/85 548/786/85 +f 550/788/82 630/986/82 551/789/82 +f 552/790/81 553/793/81 549/791/81 +f 552/790/80 630/986/80 550/788/80 +f 554/794/82 561/987/82 555/795/82 +f 557/797/81 560/988/81 558/798/81 +f 556/800/83 555/989/83 560/801/83 +f 559/803/84 558/990/84 561/804/84 +f 562/806/83 576/991/83 563/807/83 +f 565/809/80 572/992/80 566/810/80 +f 568/812/83 572/992/83 565/809/83 +f 570/814/84 567/993/84 566/815/84 +f 571/817/82 566/994/82 572/818/82 +f 569/820/81 565/995/81 567/821/81 +f 573/823/84 577/996/84 574/824/84 +f 575/826/82 574/997/82 576/827/82 +f 564/829/81 563/998/81 577/830/81 +f 562/806/85 564/808/85 573/832/85 +f 578/834/82 585/999/82 579/835/82 +f 581/837/81 584/1000/81 582/838/81 +f 580/840/83 579/1001/83 584/841/83 +f 583/843/84 582/1002/84 585/844/84 +f 586/846/83 600/1003/83 587/847/83 +f 589/849/80 596/1004/80 590/850/80 +f 592/852/83 596/1004/83 589/849/83 +f 594/854/84 591/1005/84 590/855/84 +f 595/857/82 590/1006/82 596/858/82 +f 593/860/81 589/1007/81 591/861/81 +f 597/863/84 601/1008/84 598/864/84 +f 599/866/82 598/1009/82 600/867/82 +f 588/869/81 587/1010/81 601/870/81 +f 586/846/85 588/848/85 597/872/85 +f 602/874/82 609/1011/82 603/875/82 +f 605/877/81 608/1012/81 606/878/81 +f 604/880/83 603/1013/83 608/881/83 +f 607/883/84 606/1014/84 609/884/84 +f 610/886/83 624/1015/83 611/887/83 +f 613/889/80 620/1016/80 614/890/80 +f 616/892/83 620/1016/83 613/889/83 +f 618/894/84 615/1017/84 614/895/84 +f 619/897/82 614/1018/82 620/898/82 +f 617/900/81 613/1019/81 615/901/81 +f 621/903/84 625/1020/84 622/904/84 +f 623/906/82 622/1021/82 624/907/82 +f 612/909/81 611/1022/81 625/910/81 +f 610/886/85 612/888/85 621/912/85 +s 1 +f 631/1023/86 632/1024/87 633/1025/88 +f 634/1026/89 635/1027/90 632/1024/87 +f 636/1028/91 637/1029/92 635/1027/90 +f 638/1030/93 639/1031/94 637/1032/92 +f 640/1033/95 641/1034/96 639/1031/94 +f 642/1035/97 643/1036/98 641/1034/96 +f 644/1037/99 645/1038/100 643/1036/98 +f 646/1039/101 647/1040/102 645/1038/100 +f 648/1041/103 649/1042/104 647/1040/102 +f 650/1043/105 651/1044/106 649/1042/104 +f 646/1039/101 652/1045/107 648/1041/103 +f 653/1046/108 654/1047/109 651/1044/106 +f 655/1048/110 633/1025/88 654/1047/109 +f 641/1034/96 656/1049/111 657/1050/112 +f 658/1051/113 659/1052/114 660/1053/115 +f 646/1039/101 661/1054/116 662/1055/117 +f 642/1035/97 661/1056/116 644/1037/99 +f 640/1033/95 663/1057/118 642/1035/97 +f 638/1030/93 658/1058/113 640/1033/95 +f 631/1023/86 664/1059/119 665/1060/120 +f 631/1023/86 666/1061/121 634/1026/89 +f 638/1062/93 659/1063/114 667/1064/122 +f 655/1048/110 660/1065/115 664/1066/119 +f 636/1028/91 666/1067/121 659/1068/114 +f 653/1046/108 668/1069/123 660/1070/115 +f 648/1041/103 668/1071/123 650/1043/105 +f 669/1072/124 670/1073/125 671/1074/126 +f 641/1034/96 672/1075/127 639/1031/94 +f 637/1032/92 672/1076/127 669/1077/124 +f 654/1047/109 673/1078/128 671/1079/126 +f 633/1025/88 674/1080/129 673/1081/128 +f 637/1029/92 675/1082/130 635/1027/90 +f 654/1047/109 676/1083/131 651/1044/106 +f 635/1027/90 674/1084/129 632/1024/87 +f 651/1044/106 677/1085/132 649/1042/104 +f 647/1040/102 677/1086/132 678/1087/133 +f 647/1040/102 670/1088/125 645/1038/100 +f 645/1038/100 656/1089/111 643/1036/98 +f 631/1023/86 634/1026/89 632/1024/87 +f 634/1026/89 636/1028/91 635/1027/90 +f 636/1028/91 638/1062/93 637/1029/92 +f 638/1030/93 640/1033/95 639/1031/94 +f 640/1033/95 642/1035/97 641/1034/96 +f 642/1035/97 644/1037/99 643/1036/98 +f 644/1037/99 646/1039/101 645/1038/100 +f 646/1039/101 648/1041/103 647/1040/102 +f 648/1041/103 650/1043/105 649/1042/104 +f 650/1043/105 653/1046/108 651/1044/106 +f 646/1039/101 662/1090/117 652/1045/107 +f 653/1046/108 655/1048/110 654/1047/109 +f 655/1048/110 631/1023/86 633/1025/88 +f 641/1034/96 643/1036/98 656/1049/111 +f 659/1052/114 666/1091/121 665/1092/120 +f 665/1092/120 664/1093/119 659/1052/114 +f 664/1093/119 660/1053/115 659/1052/114 +f 660/1053/115 668/1094/123 652/1095/107 +f 652/1095/107 662/1096/117 660/1053/115 +f 662/1096/117 661/1097/116 660/1053/115 +f 661/1097/116 663/1098/118 658/1051/113 +f 658/1051/113 667/1099/122 659/1052/114 +f 661/1097/116 658/1051/113 660/1053/115 +f 646/1039/101 644/1037/99 661/1054/116 +f 642/1035/97 663/1100/118 661/1056/116 +f 640/1033/95 658/1101/113 663/1057/118 +f 638/1030/93 667/1102/122 658/1058/113 +f 631/1023/86 655/1048/110 664/1059/119 +f 631/1023/86 665/1103/120 666/1061/121 +f 638/1062/93 636/1028/91 659/1063/114 +f 655/1048/110 653/1046/108 660/1065/115 +f 636/1028/91 634/1026/89 666/1067/121 +f 653/1046/108 650/1043/105 668/1069/123 +f 648/1041/103 652/1104/107 668/1071/123 +f 671/1074/126 673/1105/128 674/1106/129 +f 674/1106/129 675/1107/130 671/1074/126 +f 675/1107/130 669/1072/124 671/1074/126 +f 669/1072/124 672/1108/127 657/1109/112 +f 657/1109/112 656/1110/111 670/1073/125 +f 670/1073/125 678/1111/133 677/1112/132 +f 677/1112/132 676/1113/131 670/1073/125 +f 676/1113/131 671/1074/126 670/1073/125 +f 669/1072/124 657/1109/112 670/1073/125 +f 641/1034/96 657/1114/112 672/1075/127 +f 637/1032/92 639/1031/94 672/1076/127 +f 654/1047/109 633/1025/88 673/1078/128 +f 633/1025/88 632/1024/87 674/1080/129 +f 637/1029/92 669/1115/124 675/1082/130 +f 654/1047/109 671/1116/126 676/1083/131 +f 635/1027/90 675/1117/130 674/1084/129 +f 651/1044/106 676/1118/131 677/1085/132 +f 647/1040/102 649/1042/104 677/1086/132 +f 647/1040/102 678/1119/133 670/1088/125 +f 645/1038/100 670/1120/125 656/1089/111 +o Micro_Pad v -0.500000 2.000000 0.500000 +v -1.250000 2.000000 -1.250000 +v -1.250000 2.000000 1.250000 v 0.500000 2.000000 0.500000 +v 1.250000 2.000000 1.250000 +v 1.250000 1.500000 -1.250000 +v 1.250000 2.000000 -1.250000 +v -1.250000 1.500000 1.250000 +v -1.250000 1.500000 -1.250000 +v 1.250000 1.500000 1.250000 +v -0.500000 1.500000 0.500000 v -0.500000 2.000000 -0.500000 v 0.500000 2.000000 -0.500000 -v 0.562500 1.750000 0.937500 -v 0.937500 1.750000 0.937500 -v 0.562500 1.750000 0.562500 -v 0.937500 1.750000 0.562500 -v 0.562500 1.000000 0.937500 -v 0.937500 1.000000 0.937500 -v 0.562500 1.000000 0.562500 -v 0.937500 1.000000 0.562500 -v -0.500000 1.000000 -1.250000 +v 0.500000 1.500000 0.500000 +v 0.500000 1.500000 -0.500000 +v -0.500000 1.500000 -0.500000 +v 0.500000 2.000000 0.500000 +v -0.500000 2.000000 -0.500000 +v -0.500000 2.000000 0.500000 +v 1.250000 1.000000 -1.250000 v 0.500000 1.000000 -1.250000 +v 0.500000 1.250000 -1.250000 +v 0.500000 1.250000 -0.500000 +v 1.250000 1.500000 -1.250000 +v 1.250000 1.500000 -0.250000 +v 1.250000 1.250000 -0.500000 +v 0.250000 1.500000 -0.500000 +v 0.500000 1.000000 -0.500000 +v 1.250000 1.000000 -0.500000 +v 0.500000 1.500000 -0.500000 +v 0.500000 1.500000 -0.250000 +v 0.500000 1.500000 -1.250000 +v -0.500000 1.500000 -1.750000 +v -0.500000 1.500000 -1.250000 +v -0.500000 1.000000 -1.250000 v -0.500000 1.000000 -1.750000 +v 0.500000 1.500000 -1.750000 v 0.500000 1.000000 -1.750000 -v -0.500000 1.500000 -1.625000 -v -0.500000 1.375000 -1.750000 -v -0.500000 1.375000 -1.250000 -v -0.500000 1.500000 -1.375000 -v 0.500000 1.500000 -1.375000 -v 0.500000 1.375000 -1.250000 -v 0.500000 1.375000 -1.750000 -v 0.500000 1.500000 -1.625000 -v 0.750000 1.750000 0.562500 -v 0.750000 1.000000 0.562500 -v 0.750000 1.750000 -0.562500 -v 0.750000 1.000000 -0.562500 -v 0.500000 1.000000 1.750000 -v 1.000000 1.000000 1.750000 -v 0.500000 1.000000 1.250000 -v 1.000000 1.000000 1.250000 -v -1.000000 1.000000 1.750000 -v -0.500000 1.000000 1.750000 -v -1.000000 1.000000 1.250000 +v 0.500000 1.000000 -1.250000 +v -0.625000 8.000000 2.000000 +v -0.875000 8.000000 1.750000 +v -0.875000 8.000000 2.000000 +v 0.875000 8.000000 2.000000 +v 0.625000 8.000000 1.750000 +v 0.625000 8.000000 2.000000 +v -0.625000 8.000000 1.000000 +v -0.875000 8.000000 0.750000 +v -0.875000 8.000000 1.000000 +v 0.875000 8.000000 1.000000 +v 0.625000 8.000000 0.750000 +v 0.625000 8.000000 1.000000 +v -0.625000 2.000000 0.750000 +v -0.625000 2.000000 1.000000 +v -0.875000 1.000000 1.750000 +v -0.625000 8.000000 1.750000 +v -0.625000 1.000000 1.750000 +v -0.875000 2.000000 0.750000 +v -0.625000 8.000000 0.750000 +v 0.625000 1.000000 2.000000 +v 0.625000 1.000000 1.750000 +v 0.625000 2.000000 1.000000 +v 0.625000 2.000000 0.750000 +v 0.875000 1.000000 2.000000 +v 0.875000 2.000000 1.000000 +v 0.875000 1.000000 1.750000 +v 0.875000 2.000000 0.750000 +v 0.875000 8.000000 1.750000 +v -0.875000 1.000000 2.000000 +v 0.875000 8.000000 0.750000 +v -0.875000 2.000000 1.000000 +v -0.625000 1.000000 2.000000 +v -0.625000 8.000000 1.875000 +v 0.625000 1.000000 1.875000 +v 0.625000 8.000000 1.875000 +v -0.625000 8.000000 0.875000 +v 0.625000 2.000000 0.875000 +v -0.625000 2.000000 0.875000 +v 0.750000 1.000000 1.750000 +v 0.750000 8.000000 1.000000 +v 0.750000 8.000000 1.750000 +v -0.750000 8.000000 1.000000 +v -0.750000 1.000000 1.750000 +v -0.750000 8.000000 1.750000 +v -0.062500 6.000000 1.625000 +v -0.312500 6.000000 1.375000 +v -0.312500 6.000000 1.625000 +v 0.312500 6.000000 1.625000 +v 0.062500 6.000000 1.375000 +v 0.062500 6.000000 1.625000 +v -0.062500 1.000000 1.375000 +v -0.062500 1.000000 1.625000 +v -0.312500 1.000000 1.625000 +v -0.312500 1.000000 1.375000 +v 0.062500 1.000000 1.375000 +v 0.312500 6.000000 1.375000 +v 0.312500 1.000000 1.375000 +v 0.312500 1.000000 1.625000 +v 0.062500 1.000000 1.625000 +v -0.062500 6.000000 1.375000 +v -1.250000 1.000000 1.250000 v -0.500000 1.000000 1.250000 -v 0.500000 11.000000 1.250000 -v 0.500000 11.000000 1.750000 -v 1.000000 11.000000 1.750000 -v 1.000000 11.000000 1.250000 -v -1.000000 11.000000 1.250000 -v -1.000000 11.000000 1.750000 -v -0.500000 11.000000 1.750000 -v -0.500000 11.000000 1.250000 -v -0.500000 10.750000 1.562500 -v 0.500000 10.000000 1.562500 -v -0.500000 11.000000 1.562500 -v 0.500000 10.250000 1.562500 -v -0.500000 1.250000 1.437500 -v 0.500000 2.000000 1.437500 -v -0.500000 1.000000 1.437500 -v 0.500000 1.750000 1.437500 -v 0.500000 1.250000 1.562500 -v -0.500000 2.000000 1.562500 -v 0.500000 1.000000 1.562500 -v -0.500000 1.750000 1.562500 -v -0.500000 4.750000 1.562500 -v 0.500000 4.000000 1.562500 -v -0.500000 5.000000 1.562500 -v 0.500000 4.250000 1.562500 -v 0.500000 4.750000 1.437500 -v -0.500000 4.000000 1.437500 -v 0.500000 5.000000 1.437500 -v -0.500000 4.250000 1.437500 -v -0.500000 2.500000 1.562500 -v 0.500000 1.750000 1.562500 -v -0.500000 2.750000 1.562500 -v 0.500000 2.000000 1.562500 -v 0.500000 2.500000 1.437500 -v -0.500000 1.750000 1.437500 -v 0.500000 2.750000 1.437500 -v -0.500000 2.000000 1.437500 -v -0.500000 2.750000 1.437500 -v 0.500000 3.500000 1.437500 -v -0.500000 2.500000 1.437500 -v 0.500000 3.250000 1.437500 -v 0.500000 2.750000 1.562500 -v -0.500000 3.500000 1.562500 -v 0.500000 2.500000 1.562500 -v -0.500000 3.250000 1.562500 -v -0.500000 3.500000 1.437500 -v 0.500000 4.250000 1.437500 -v -0.500000 3.250000 1.437500 -v 0.500000 4.000000 1.437500 -v 0.500000 3.500000 1.562500 -v -0.500000 4.250000 1.562500 -v 0.500000 3.250000 1.562500 -v -0.500000 4.000000 1.562500 -v -0.500000 7.000000 1.562500 -v 0.500000 6.250000 1.562500 -v -0.500000 7.250000 1.562500 -v 0.500000 6.500000 1.562500 -v 0.500000 7.000000 1.437500 -v -0.500000 6.250000 1.437500 -v 0.500000 7.250000 1.437500 -v -0.500000 6.500000 1.437500 -v 0.500000 10.750000 1.437500 -v -0.500000 10.000000 1.437500 -v 0.500000 11.000000 1.437500 -v -0.500000 10.250000 1.437500 -v -0.500000 6.250000 1.562500 -v 0.500000 5.500000 1.562500 -v -0.500000 6.500000 1.562500 -v 0.500000 5.750000 1.562500 -v 0.500000 6.250000 1.437500 -v -0.500000 5.500000 1.437500 -v 0.500000 6.500000 1.437500 -v -0.500000 5.750000 1.437500 -v -0.500000 5.000000 1.437500 -v 0.500000 5.750000 1.437500 -v -0.500000 4.750000 1.437500 -v 0.500000 5.500000 1.437500 -v 0.500000 5.000000 1.562500 -v -0.500000 5.750000 1.562500 -v 0.500000 4.750000 1.562500 -v -0.500000 5.500000 1.562500 -v -0.500000 7.250000 1.437500 -v 0.500000 8.000000 1.437500 -v -0.500000 7.000000 1.437500 -v 0.500000 7.750000 1.437500 -v 0.500000 7.250000 1.562500 -v -0.500000 8.000000 1.562500 -v 0.500000 7.000000 1.562500 -v -0.500000 7.750000 1.562500 -v -0.500000 8.500000 1.562500 -v 0.500000 7.750000 1.562500 -v -0.500000 8.750000 1.562500 -v 0.500000 8.000000 1.562500 -v 0.500000 8.500000 1.437500 -v -0.500000 7.750000 1.437500 -v 0.500000 8.750000 1.437500 -v -0.500000 8.000000 1.437500 -v -0.500000 8.750000 1.437500 -v 0.500000 9.500000 1.437500 -v -0.500000 8.500000 1.437500 -v 0.500000 9.250000 1.437500 -v 0.500000 8.750000 1.562500 -v -0.500000 9.500000 1.562500 -v 0.500000 8.500000 1.562500 -v -0.500000 9.250000 1.562500 -v -0.500000 9.500000 1.437500 -v 0.500000 10.250000 1.437500 -v -0.500000 9.250000 1.437500 -v 0.500000 10.000000 1.437500 -v 0.500000 9.500000 1.562500 -v -0.500000 10.250000 1.562500 -v 0.500000 9.250000 1.562500 -v -0.500000 10.000000 1.562500 -v -0.937500 1.000000 3.937500 -v -0.562500 1.000000 3.937500 -v -0.937500 1.000000 3.562500 -v -0.562500 1.000000 3.562500 -v -0.937500 2.812500 1.750000 -v -0.562500 2.812500 1.750000 -v -0.937500 3.187500 1.750000 -v -0.562500 3.187500 1.750000 -v 0.562500 1.000000 3.937500 -v 0.937500 1.000000 3.937500 -v 0.562500 1.000000 3.562500 -v 0.937500 1.000000 3.562500 -v 0.562500 2.812500 1.750000 -v 0.937500 2.812500 1.750000 -v 0.562500 3.187500 1.750000 -v 0.937500 3.187500 1.750000 -v -0.500000 10.750000 1.562500 -v 0.500000 10.000000 1.562500 -v -0.500000 11.000000 1.562500 -v 0.500000 10.250000 1.562500 -v -0.500000 1.250000 1.437500 -v 0.500000 2.000000 1.437500 -v -0.500000 1.000000 1.437500 -v 0.500000 1.750000 1.437500 -v 0.500000 1.250000 1.562500 -v -0.500000 2.000000 1.562500 -v 0.500000 1.000000 1.562500 -v -0.500000 1.750000 1.562500 -v -0.500000 4.750000 1.562500 -v 0.500000 4.000000 1.562500 -v -0.500000 5.000000 1.562500 -v 0.500000 4.250000 1.562500 -v 0.500000 4.750000 1.437500 -v -0.500000 4.000000 1.437500 -v 0.500000 5.000000 1.437500 -v -0.500000 4.250000 1.437500 -v -0.500000 2.500000 1.562500 -v 0.500000 1.750000 1.562500 -v -0.500000 2.750000 1.562500 -v 0.500000 2.000000 1.562500 -v 0.500000 2.500000 1.437500 -v -0.500000 1.750000 1.437500 -v 0.500000 2.750000 1.437500 -v -0.500000 2.000000 1.437500 -v -0.500000 2.750000 1.437500 -v 0.500000 3.500000 1.437500 -v -0.500000 2.500000 1.437500 -v 0.500000 3.250000 1.437500 -v 0.500000 2.750000 1.562500 -v -0.500000 3.500000 1.562500 -v 0.500000 2.500000 1.562500 -v -0.500000 3.250000 1.562500 -v -0.500000 3.500000 1.437500 -v 0.500000 4.250000 1.437500 -v -0.500000 3.250000 1.437500 -v 0.500000 4.000000 1.437500 -v 0.500000 3.500000 1.562500 -v -0.500000 4.250000 1.562500 -v 0.500000 3.250000 1.562500 -v -0.500000 4.000000 1.562500 -v -0.500000 7.000000 1.562500 -v 0.500000 6.250000 1.562500 -v -0.500000 7.250000 1.562500 -v 0.500000 6.500000 1.562500 -v 0.500000 7.000000 1.437500 -v -0.500000 6.250000 1.437500 -v 0.500000 7.250000 1.437500 -v -0.500000 6.500000 1.437500 -v 0.500000 10.750000 1.437500 -v -0.500000 10.000000 1.437500 -v 0.500000 11.000000 1.437500 -v -0.500000 10.250000 1.437500 -v -0.500000 6.250000 1.562500 -v 0.500000 5.500000 1.562500 -v -0.500000 6.500000 1.562500 -v 0.500000 5.750000 1.562500 -v 0.500000 6.250000 1.437500 -v -0.500000 5.500000 1.437500 -v 0.500000 6.500000 1.437500 -v -0.500000 5.750000 1.437500 -v -0.500000 5.000000 1.437500 -v 0.500000 5.750000 1.437500 -v -0.500000 4.750000 1.437500 -v 0.500000 5.500000 1.437500 -v 0.500000 5.000000 1.562500 -v -0.500000 5.750000 1.562500 -v 0.500000 4.750000 1.562500 -v -0.500000 5.500000 1.562500 -v -0.500000 7.250000 1.437500 -v 0.500000 8.000000 1.437500 -v -0.500000 7.000000 1.437500 -v 0.500000 7.750000 1.437500 -v 0.500000 7.250000 1.562500 -v -0.500000 8.000000 1.562500 -v 0.500000 7.000000 1.562500 -v -0.500000 7.750000 1.562500 -v -0.500000 8.500000 1.562500 -v 0.500000 7.750000 1.562500 -v -0.500000 8.750000 1.562500 -v 0.500000 8.000000 1.562500 -v 0.500000 8.500000 1.437500 -v -0.500000 7.750000 1.437500 -v 0.500000 8.750000 1.437500 -v -0.500000 8.000000 1.437500 -v -0.500000 8.750000 1.437500 -v 0.500000 9.500000 1.437500 -v -0.500000 8.500000 1.437500 -v 0.500000 9.250000 1.437500 -v 0.500000 8.750000 1.562500 -v -0.500000 9.500000 1.562500 -v 0.500000 8.500000 1.562500 -v -0.500000 9.250000 1.562500 -v -0.500000 9.500000 1.437500 -v 0.500000 10.250000 1.437500 -v -0.500000 9.250000 1.437500 -v 0.500000 10.000000 1.437500 -v 0.500000 9.500000 1.562500 -v -0.500000 10.250000 1.562500 -v 0.500000 9.250000 1.562500 -v -0.500000 10.000000 1.562500 -v 0.562500 1.750000 -0.562500 -v 0.937500 1.750000 -0.562500 -v 0.562500 1.750000 -0.937500 -v 0.937500 1.750000 -0.937500 -v 0.562500 1.000000 -0.562500 -v 0.937500 1.000000 -0.562500 -v 0.562500 1.000000 -0.937500 -v 0.937500 1.000000 -0.937500 -v -0.937500 1.750000 0.937500 -v -0.562500 1.750000 0.937500 -v -0.937500 1.750000 0.562500 -v -0.562500 1.750000 0.562500 -v -0.937500 1.000000 0.937500 -v -0.562500 1.000000 0.937500 -v -0.937500 1.000000 0.562500 -v -0.562500 1.000000 0.562500 -v -0.937500 1.750000 -0.562500 -v -0.562500 1.750000 -0.562500 -v -0.937500 1.750000 -0.937500 -v -0.562500 1.750000 -0.937500 -v -0.937500 1.000000 -0.562500 -v -0.562500 1.000000 -0.562500 -v -0.937500 1.000000 -0.937500 -v -0.562500 1.000000 -0.937500 -v -0.750000 1.750000 -0.562500 -v -0.750000 1.000000 -0.562500 -v -0.750000 1.750000 0.562500 -v -0.750000 1.000000 0.562500 -v 0.562500 1.750000 -0.750000 -v 0.562500 1.000000 -0.750000 -v -0.562500 1.750000 -0.750000 -v -0.562500 1.000000 -0.750000 -v -0.562500 1.750000 0.750000 -v -0.562500 1.000000 0.750000 -v 0.562500 1.750000 0.750000 -v 0.562500 1.000000 0.750000 -vt 0.083333 0.250000 -vt 0.000000 0.386364 -vt 0.000000 0.204545 -vt 0.000000 0.000000 -vt 0.083333 0.136364 -vt 0.000000 0.181818 -vt 0.083333 0.340909 -vt 0.333333 0.386364 -vt 0.250000 0.340909 -vt 0.333333 0.204545 -vt 0.250000 0.250000 -vt 0.333333 -0.000000 -vt 0.083333 0.045455 -vt 0.333333 0.181818 -vt 0.250000 0.045455 -vt 0.250000 0.136364 -vt 0.083333 0.136364 -vt 0.250000 0.113636 -vt 0.250000 0.136364 -vt 0.083333 0.136364 -vt 0.250000 0.113636 -vt 0.250000 0.136364 -vt -0.000000 0.204545 -vt 0.333333 0.181818 -vt 0.333333 0.204545 -vt -0.000000 0.204545 -vt 0.333333 0.181818 -vt 0.333333 0.204545 -vt 0.083333 0.136364 -vt 0.250000 0.113636 -vt 0.250000 0.136364 -vt 0.083333 0.136364 -vt 0.250000 0.113636 -vt 0.250000 0.136364 -vt -0.000000 0.204545 -vt 0.333333 0.181818 -vt 0.333333 0.204545 -vt 0.083333 0.340909 -vt 0.250000 0.250000 -vt 0.250000 0.340909 -vt 0.125000 0.454545 -vt 0.187500 0.386364 -vt 0.187500 0.454545 -vt -0.000000 0.454545 -vt 0.062500 0.386364 -vt 0.062500 0.454545 -vt 0.250000 0.386364 -vt 0.250000 0.454545 -vt 0.125000 0.386364 -vt 0.208333 0.954545 -vt 0.145833 0.863636 -vt 0.208333 0.863636 -vt 0.083333 0.863636 -vt 0.125000 0.954545 -vt 0.083333 0.954545 -vt 0.000000 0.863636 -vt 0.062500 0.954545 -vt 0.000000 0.954545 -vt 0.125000 0.863636 -vt 0.062500 0.852273 -vt 0.062500 0.863636 -vt 0.145833 0.954545 -vt 0.145833 0.965909 -vt 0.187500 0.454545 -vt 0.000000 0.522727 -vt 0.000000 0.454545 -vt 0.333333 0.909091 -vt 0.416667 0.954545 -vt 0.333333 0.954545 -vt 0.333333 0.909091 -vt 0.416667 0.954545 -vt 0.333333 0.954545 +v -0.500000 1.250000 1.250000 +v -0.500000 1.250000 0.500000 +v -1.250000 1.500000 1.250000 +v -1.250000 1.500000 0.250000 +v -1.250000 1.250000 0.500000 +v -0.250000 1.500000 1.250000 +v -0.250000 1.500000 0.500000 +v -0.500000 1.000000 0.500000 +v -1.250000 1.000000 0.500000 +v -0.500000 1.500000 0.500000 +v -0.500000 1.500000 0.250000 +v -1.250000 1.000000 -1.250000 +v -1.250000 1.000000 -0.500000 +v -1.250000 1.250000 -0.500000 +v -0.500000 1.250000 -0.500000 +v -1.250000 1.500000 -1.250000 +v -0.250000 1.500000 -1.250000 +v -0.500000 1.250000 -1.250000 +v -1.250000 1.500000 -0.250000 +v -0.500000 1.500000 -0.250000 +v -0.500000 1.000000 -0.500000 +v -0.500000 1.000000 -1.250000 +v -0.500000 1.500000 -0.500000 +v -0.250000 1.500000 -0.500000 +v 1.250000 1.000000 1.250000 +v 1.250000 1.000000 0.500000 +v 1.250000 1.250000 0.500000 +v 0.500000 1.250000 0.500000 +v 1.250000 1.500000 1.250000 +v 0.250000 1.500000 1.250000 +v 0.500000 1.250000 1.250000 +v 0.500000 1.500000 0.250000 +v 0.500000 1.000000 0.500000 +v 0.500000 1.000000 1.250000 +v 0.500000 1.500000 0.500000 +v 0.250000 1.500000 0.500000 +v 0.625000 1.000000 1.875000 +v -0.625000 8.000000 1.875000 +v 0.625000 8.000000 1.875000 +v 0.625000 2.000000 0.875000 +v -0.625000 8.000000 0.875000 +v -0.625000 2.000000 0.875000 +v 0.750000 8.000000 1.000000 +v 0.750000 1.000000 1.750000 +v 0.750000 8.000000 1.750000 +v -0.750000 1.000000 1.750000 +v -0.750000 8.000000 1.000000 +v -0.750000 8.000000 1.750000 +v 0.500000 2.000000 -0.500000 +v 0.250000 1.500000 -1.250000 +v -0.625000 1.000000 1.875000 +v 0.625000 8.000000 0.875000 +v 0.750000 1.000000 1.000000 +v -0.750000 1.000000 1.000000 +v 1.250000 1.500000 0.250000 +v -0.625000 1.000000 1.875000 +v 0.625000 8.000000 0.875000 +v 0.750000 1.000000 1.000000 +v -0.750000 1.000000 1.000000 +vt 0.066667 0.655172 +vt 0.222222 0.758621 +vt 0.000000 0.758621 +vt 0.066667 0.517241 +vt 0.000000 0.413793 +vt 0.222222 0.344828 +vt 0.222222 0.413793 +vt 0.000000 0.413793 +vt 0.222222 0.344828 +vt 0.222222 0.413793 +vt 0.000000 0.413793 +vt 0.222222 0.344828 +vt 0.222222 0.413793 +vt -0.000000 0.413793 +vt 0.222222 0.344828 +vt 0.222222 0.413793 +vt 0.066667 0.172414 +vt 0.155556 0.241379 +vt 0.066667 0.241379 +vt 0.155556 0.655172 +vt 0.155556 0.517241 +vt 0.000000 -0.000000 +vt 0.066667 0.241379 +vt 0.000000 0.344828 +vt 0.155556 0.241379 +vt 0.155556 0.103448 +vt 0.222222 -0.000000 +vt 0.066667 0.103448 +vt 0.066667 0.517241 +vt 0.155556 0.655172 +vt 0.066667 0.655172 +vt 0.066667 0.172414 +vt 0.155556 0.241379 +vt 0.066667 0.241379 +vt 0.066667 0.172414 +vt 0.155556 0.241379 +vt 0.066667 0.241379 +vt 0.066667 0.172414 +vt 0.155556 0.241379 +vt 0.066667 0.241379 +vt 0.088889 0.758621 +vt 0.155556 0.758621 +vt 0.155556 0.793103 +vt 0.022222 0.827586 +vt 0.088889 0.862069 +vt 0.022222 0.862069 +vt 0.088889 0.827586 +vt 0.000000 0.827586 +vt 0.022222 0.793103 +vt 0.088889 0.896552 +vt 0.155556 0.862069 +vt 0.088889 0.827586 +vt 0.155556 0.827586 +vt 0.155556 0.793103 +vt 0.177778 0.758621 +vt 0.177778 0.793103 +vt 0.200000 0.793103 +vt 0.088889 0.896552 +vt 0.155556 0.896552 +vt 0.888889 0.655172 +vt 0.933333 0.793103 +vt 0.888889 0.793103 +vt 0.888889 0.862069 +vt 0.933333 0.862069 +vt 0.977778 0.793103 +vt 0.933333 0.655172 +vt 0.977778 0.655172 +vt 0.844444 0.655172 +vt 0.844444 0.793103 +vt 0.933333 0.586207 +vt 0.888889 0.586207 +vt 0.577778 0.965517 +vt 0.600000 1.000000 +vt 0.577778 1.000000 +vt 0.577778 0.965517 +vt 0.600000 1.000000 +vt 0.577778 1.000000 +vt 0.577778 0.965517 +vt 0.600000 1.000000 +vt 0.577778 1.000000 +vt 0.577778 0.965517 +vt 0.600000 1.000000 +vt 0.577778 1.000000 +vt 0.600000 0.137931 +vt 0.577778 0.137931 +vt 0.622222 0.000000 +vt 0.600000 0.965517 +vt 0.600000 0.000000 +vt 0.622222 0.137931 +vt 0.600000 0.965517 +vt 0.644444 0.000000 +vt 0.622222 0.965517 +vt 0.622222 0.000000 +vt 0.644444 0.137931 +vt 0.622222 0.965517 +vt 0.622222 0.137931 vt 0.666667 0.000000 -vt 0.583333 0.909091 -vt 0.583333 0.000000 -vt 0.416667 -0.000000 -vt 0.333333 -0.000000 -vt 0.583333 0.000000 -vt 0.500000 0.909091 -vt 0.500000 0.000000 -vt 0.416667 -0.000000 -vt 0.333333 -0.000000 -vt 0.500000 0.909091 -vt 0.500000 0.000000 -vt 0.416667 0.909091 +vt 0.644444 0.965517 +vt 0.666667 0.137931 +vt 0.644444 0.965517 +vt 0.600000 0.000000 +vt 0.577778 0.000000 +vt 0.600000 0.137931 +vt 0.577778 0.137931 +vt 0.600000 0.965517 +vt 0.644444 0.000000 +vt 0.622222 0.965517 +vt 0.600000 0.965517 +vt 0.644444 0.137931 +vt 0.622222 0.965517 vt 0.666667 0.000000 -vt 0.583333 0.909091 -vt 0.416667 0.909091 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt -0.000000 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt -0.000000 0.522727 -vt 0.062500 0.545455 -vt 0.000000 0.784091 -vt -0.000000 0.579545 -vt 0.125000 0.545455 -vt 0.062500 0.818182 -vt 0.250000 0.579545 -vt 0.187500 0.784091 -vt 0.187500 0.579545 -vt 0.125000 0.818182 -vt 0.062500 0.545455 -vt 0.000000 0.784091 -vt -0.000000 0.579545 -vt 0.125000 0.545455 -vt 0.062500 0.818182 -vt 0.250000 0.579545 -vt 0.187500 0.784091 -vt 0.187500 0.579545 -vt 0.125000 0.818182 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt -0.000000 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.000000 0.545455 -vt 0.166667 0.545455 -vt 0.125000 0.454545 -vt 0.187500 0.386364 -vt 0.187500 0.454545 -vt -0.000000 0.454545 -vt 0.062500 0.386364 -vt 0.062500 0.454545 -vt 0.250000 0.386364 -vt 0.250000 0.454545 -vt 0.125000 0.386364 -vt 0.125000 0.454545 -vt 0.187500 0.386364 -vt 0.187500 0.454545 -vt -0.000000 0.454545 -vt 0.062500 0.386364 -vt 0.062500 0.454545 -vt 0.250000 0.386364 -vt 0.250000 0.454545 -vt 0.125000 0.386364 -vt 0.125000 0.454545 -vt 0.187500 0.386364 -vt 0.187500 0.454545 -vt -0.000000 0.454545 -vt 0.062500 0.386364 -vt 0.062500 0.454545 -vt 0.250000 0.386364 -vt 0.250000 0.454545 -vt 0.125000 0.386364 -vt 0.187500 0.454545 -vt 0.000000 0.522727 -vt 0.000000 0.454545 -vt 0.187500 0.454545 -vt 0.000000 0.522727 -vt 0.000000 0.454545 -vt 0.187500 0.454545 -vt 0.000000 0.522727 -vt 0.000000 0.454545 -vt 0.083333 0.113636 -vt 0.083333 0.113636 -vt -0.000000 0.181818 -vt -0.000000 0.181818 -vt 0.083333 0.113636 -vt 0.083333 0.113636 -vt -0.000000 0.181818 -vt 0.083333 0.250000 -vt -0.000000 0.386364 -vt 0.062500 0.818182 -vt 0.145833 0.818182 -vt 0.145833 0.852273 -vt 0.145833 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.965909 -vt 0.187500 0.522727 -vt 0.666667 0.909091 -vt 0.666667 0.909091 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.522727 -vt 0.166667 0.545455 -vt 0.166667 0.522727 -vt 0.166667 0.545455 -vt 0.250000 0.784091 -vt 0.250000 0.784091 -vt -0.000000 0.522727 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.545455 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt -0.000000 0.545455 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.545455 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.522727 -vt -0.000000 0.545455 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.545455 -vt -0.000000 0.522727 -vt -0.000000 0.386364 -vt -0.000000 0.386364 -vt -0.000000 0.386364 -vt 0.187500 0.522727 -vt 0.187500 0.522727 -vt 0.187500 0.522727 +vt 0.644444 0.965517 +vt 0.666667 0.137931 +vt 0.644444 0.965517 +vt 0.577778 0.000000 +vt 0.222222 0.965517 +vt 0.333333 -0.000000 +vt 0.333333 0.965517 +vt 0.511111 0.965517 +vt 0.400000 0.137931 +vt 0.511111 0.137931 +vt 0.333333 0.000000 +vt 0.400000 0.965517 +vt 0.333333 0.965517 +vt 0.511111 0.965517 +vt 0.577778 0.000000 +vt 0.577778 0.965517 +vt 0.666667 0.689655 +vt 0.688889 0.724138 +vt 0.666667 0.724138 +vt 0.666667 0.689655 +vt 0.688889 0.724138 +vt 0.666667 0.724138 +vt 0.688889 0.000000 +vt 0.666667 0.000000 +vt 0.733333 0.000000 +vt 0.711111 0.689655 +vt 0.711111 0.000000 +vt 0.711111 0.000000 +vt 0.688889 0.689655 +vt 0.688889 0.000000 +vt 0.755556 0.000000 +vt 0.733333 0.689655 +vt 0.733333 0.000000 +vt 0.688889 0.689655 +vt 0.755556 0.000000 +vt 0.733333 0.689655 +vt 0.666667 0.000000 +vt 0.711111 0.689655 +vt 0.088889 0.758621 +vt 0.155556 0.758621 +vt 0.155556 0.793103 +vt 0.022222 0.827586 +vt 0.088889 0.862069 +vt 0.022222 0.862069 +vt 0.088889 0.827586 +vt 0.000000 0.827586 +vt 0.022222 0.793103 +vt 0.022222 0.896552 +vt 0.088889 0.896552 +vt 0.155556 0.862069 +vt 0.088889 0.827586 +vt 0.155556 0.827586 +vt 0.155556 0.793103 +vt 0.177778 0.758621 +vt 0.177778 0.793103 +vt 0.200000 0.793103 +vt 0.088889 0.896552 +vt 0.155556 0.896552 +vt 0.088889 0.758621 +vt 0.155556 0.758621 +vt 0.155556 0.793103 +vt 0.022222 0.827586 +vt 0.088889 0.862069 +vt 0.022222 0.862069 +vt 0.088889 0.827586 +vt 0.000000 0.827586 +vt 0.022222 0.793103 +vt 0.022222 0.896552 +vt 0.088889 0.896552 +vt 0.155556 0.862069 +vt 0.088889 0.827586 +vt 0.155556 0.827586 +vt 0.155556 0.793103 +vt 0.177778 0.758621 +vt 0.177778 0.793103 +vt 0.200000 0.793103 +vt 0.088889 0.896552 +vt 0.155556 0.896552 +vt 0.088889 0.758621 +vt 0.155556 0.758621 +vt 0.155556 0.793103 +vt 0.022222 0.827586 +vt 0.088889 0.862069 +vt 0.022222 0.862069 +vt 0.088889 0.827586 +vt 0.000000 0.827586 +vt 0.022222 0.793103 +vt 0.088889 0.896552 +vt 0.155556 0.862069 +vt 0.088889 0.827586 +vt 0.155556 0.827586 +vt 0.155556 0.793103 +vt 0.177778 0.758621 +vt 0.177778 0.793103 +vt 0.200000 0.793103 +vt 0.088889 0.896552 +vt 0.155556 0.896552 +vt 0.333333 -0.000000 +vt 0.222222 0.965517 +vt 0.333333 0.965517 +vt 0.400000 0.137931 +vt 0.511111 0.965517 +vt 0.511111 0.137931 +vt 0.400000 0.965517 +vt 0.333333 0.000000 +vt 0.333333 0.965517 +vt 0.577778 0.000000 +vt 0.511111 0.965517 +vt 0.577778 0.965517 +vt 0.000000 0.344828 +vt 0.000000 0.344828 +vt -0.000000 0.344828 +vt 0.155556 0.172414 +vt 0.155556 0.517241 +vt 0.155556 0.172414 +vt 0.155556 0.172414 +vt 0.155556 0.172414 +vt 0.177778 0.827586 +vt 0.022222 0.758621 +vt 0.022222 0.896552 +vt 0.666667 0.965517 +vt 0.666667 0.965517 +vt 0.666667 0.965517 +vt 0.666667 0.965517 +vt 0.222222 0.000000 +vt 0.400000 0.965517 +vt 0.400000 0.000000 +vt 0.511111 0.000000 +vt 0.755556 0.689655 +vt 0.755556 0.689655 +vt 0.177778 0.827586 +vt 0.022222 0.758621 +vt 0.177778 0.827586 +vt 0.022222 0.758621 +vt 0.177778 0.827586 +vt 0.022222 0.758621 +vt 0.022222 0.896552 +vt 0.222222 0.000000 +vt 0.400000 0.965517 +vt 0.400000 0.000000 +vt 0.511111 0.000000 vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 0.0000 vn 1.0000 0.0000 0.0000 -vn 0.0000 0.7071 0.7071 -vn 0.0000 0.7071 -0.7071 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.7071 -0.7071 0.0000 vn 0.0000 -0.7071 -0.7071 s off -f 230/293/15 225/294/15 226/295/15 -f 234/296/16 239/297/16 235/298/16 -f 229/299/15 227/300/15 225/294/15 -f 231/301/15 228/302/15 227/300/15 -f 232/303/15 226/295/15 228/302/15 -f 233/304/16 238/305/16 234/296/16 -f 236/306/16 237/307/16 233/304/16 -f 235/298/16 240/308/16 236/306/16 -f 231/309/17 240/310/17 232/311/17 -f 230/312/18 238/313/18 229/314/18 -f 228/315/18 233/316/18 227/317/18 -f 225/318/17 235/319/17 226/320/17 -f 232/321/19 239/322/19 230/323/19 -f 229/324/20 237/325/20 231/326/20 -f 226/295/20 236/306/20 228/302/20 -f 227/327/19 234/328/19 225/329/19 -f 241/330/15 244/331/15 243/332/15 -f 246/333/20 252/334/20 248/335/20 -f 247/336/19 249/337/19 245/338/19 -f 248/335/18 251/339/18 247/340/18 -f 245/338/17 250/341/17 246/333/17 -f 255/342/18 263/343/18 256/344/18 -f 261/345/15 257/346/15 260/347/15 -f 254/348/17 259/349/17 253/350/17 -f 264/351/20 261/345/20 262/352/20 -f 262/353/21 260/347/21 259/349/21 -f 258/354/22 264/351/22 263/343/22 -f 260/347/19 257/346/19 258/355/19 -f 268/356/20 265/357/20 266/358/20 -f 279/359/15 277/360/15 278/361/15 -f 283/362/15 281/363/15 282/364/15 -f 270/365/17 278/366/17 269/367/17 -f 276/368/20 283/362/20 274/369/20 -f 273/370/19 281/371/19 275/372/19 -f 272/373/20 279/359/20 270/374/20 -f 269/367/19 277/375/19 271/376/19 -f 275/372/18 284/377/18 276/368/18 -f 274/378/17 282/379/17 273/370/17 -f 271/376/18 280/380/18 272/373/18 -f 285/381/18 288/382/18 286/383/18 -f 292/384/18 289/385/18 290/386/18 -f 296/387/18 293/388/18 295/389/18 -f 297/390/18 300/391/18 298/392/18 -f 301/393/18 304/394/18 303/395/18 -f 305/396/18 308/397/18 306/398/18 -f 309/399/18 312/400/18 311/401/18 -f 316/402/18 313/403/18 314/404/18 -f 320/405/18 317/406/18 319/407/18 -f 324/408/18 321/409/18 322/410/18 -f 328/411/18 325/412/18 327/413/18 -f 329/414/18 332/415/18 330/416/18 -f 333/417/18 336/418/18 335/419/18 -f 337/420/18 340/421/18 339/422/18 -f 341/423/18 344/424/18 342/425/18 -f 345/426/18 348/427/18 347/428/18 -f 352/429/18 349/430/18 350/431/18 -f 356/432/18 353/433/18 355/434/18 -f 360/435/18 357/436/18 358/437/18 -f 364/438/18 361/439/18 363/440/18 -f 365/441/18 368/442/18 366/443/18 -f 369/444/18 372/445/18 371/446/18 -f 376/447/18 373/448/18 374/449/18 -f 380/450/18 377/451/18 379/452/18 -f 384/453/18 381/454/18 382/455/18 -f 388/456/18 385/457/18 387/458/18 -f 389/459/19 393/460/19 391/461/19 -f 390/462/21 395/463/21 389/459/21 -f 391/464/23 394/465/23 392/466/23 -f 392/466/20 396/467/20 390/462/20 -f 397/468/19 401/469/19 399/470/19 -f 398/471/21 403/472/21 397/468/21 -f 399/473/23 402/474/23 400/475/23 -f 400/475/20 404/476/20 398/471/20 -f 405/477/17 408/478/17 407/479/17 -f 412/480/17 409/481/17 411/482/17 -f 416/483/17 413/484/17 414/485/17 -f 417/486/17 420/487/17 419/488/17 -f 421/489/17 424/490/17 422/491/17 -f 425/492/17 428/493/17 427/494/17 -f 429/495/17 432/496/17 430/497/17 -f 436/498/17 433/499/17 435/500/17 -f 440/501/17 437/502/17 438/503/17 -f 444/504/17 441/505/17 443/506/17 -f 448/507/17 445/508/17 446/509/17 -f 449/510/17 452/511/17 451/512/17 -f 453/513/17 456/514/17 454/515/17 -f 457/516/17 460/517/17 458/518/17 -f 461/519/17 464/520/17 463/521/17 -f 465/522/17 468/523/17 466/524/17 -f 472/525/17 469/526/17 471/527/17 -f 476/528/17 473/529/17 474/530/17 -f 480/531/17 477/532/17 479/533/17 -f 484/534/17 481/535/17 482/536/17 -f 485/537/17 488/538/17 487/539/17 -f 489/540/17 492/541/17 490/542/17 -f 496/543/17 493/544/17 495/545/17 -f 500/546/17 497/547/17 498/548/17 -f 504/549/17 501/550/17 503/551/17 -f 508/552/17 505/553/17 506/554/17 -f 510/555/20 516/556/20 512/557/20 -f 511/558/19 513/559/19 509/560/19 -f 512/557/18 515/561/18 511/562/18 -f 509/560/17 514/563/17 510/555/17 -f 518/564/20 524/565/20 520/566/20 -f 519/567/19 521/568/19 517/569/19 -f 520/566/18 523/570/18 519/571/18 -f 517/569/17 522/572/17 518/564/17 -f 526/573/20 532/574/20 528/575/20 -f 527/576/19 529/577/19 525/578/19 -f 528/575/18 531/579/18 527/580/18 -f 525/578/17 530/581/17 526/573/17 -f 536/582/19 533/583/19 534/584/19 -f 540/585/18 537/586/18 538/587/18 -f 544/588/17 541/589/17 542/590/17 -f 230/293/15 229/299/15 225/294/15 -f 234/296/16 238/305/16 239/297/16 -f 229/299/15 231/301/15 227/300/15 -f 231/301/15 232/303/15 228/302/15 -f 232/303/15 230/293/15 226/295/15 -f 233/304/16 237/307/16 238/305/16 -f 236/306/16 240/308/16 237/307/16 -f 235/298/16 239/297/16 240/308/16 -f 231/309/17 237/591/17 240/310/17 -f 230/312/18 239/592/18 238/313/18 -f 228/315/18 236/593/18 233/316/18 -f 225/318/17 234/594/17 235/319/17 -f 232/321/19 240/595/19 239/322/19 -f 229/324/20 238/596/20 237/325/20 -f 226/295/20 235/298/20 236/306/20 -f 227/327/19 233/597/19 234/328/19 -f 241/330/15 242/598/15 244/331/15 -f 246/333/20 250/341/20 252/334/20 -f 247/336/19 251/599/19 249/337/19 -f 248/335/18 252/334/18 251/339/18 -f 245/338/17 249/337/17 250/341/17 -f 255/342/18 258/354/18 263/343/18 -f 261/345/15 264/351/15 257/346/15 -f 254/348/17 262/353/17 259/349/17 -f 262/352/20 254/600/20 256/601/20 -f 256/601/20 263/602/20 262/352/20 -f 263/602/20 264/351/20 262/352/20 -f 262/353/21 261/345/21 260/347/21 -f 258/354/22 257/346/22 264/351/22 -f 258/355/19 255/603/19 253/604/19 -f 253/604/19 259/605/19 258/355/19 -f 259/605/19 260/347/19 258/355/19 -f 268/356/20 267/606/20 265/357/20 -f 279/359/15 280/380/15 277/360/15 -f 283/362/15 284/377/15 281/363/15 -f 270/365/17 279/607/17 278/366/17 -f 276/368/20 284/377/20 283/362/20 -f 273/370/19 282/379/19 281/371/19 -f 272/373/20 280/380/20 279/359/20 -f 269/367/19 278/366/19 277/375/19 -f 275/372/18 281/371/18 284/377/18 -f 274/378/17 283/608/17 282/379/17 -f 271/376/18 277/375/18 280/380/18 -f 285/381/18 287/609/18 288/382/18 -f 292/384/18 291/610/18 289/385/18 -f 296/387/18 294/611/18 293/388/18 -f 297/390/18 299/612/18 300/391/18 -f 301/393/18 302/613/18 304/394/18 -f 305/396/18 307/614/18 308/397/18 -f 309/399/18 310/615/18 312/400/18 -f 316/402/18 315/616/18 313/403/18 -f 320/405/18 318/617/18 317/406/18 -f 324/408/18 323/618/18 321/409/18 -f 328/411/18 326/619/18 325/412/18 -f 329/414/18 331/620/18 332/415/18 -f 333/417/18 334/621/18 336/418/18 -f 337/420/18 338/622/18 340/421/18 -f 341/423/18 343/623/18 344/424/18 -f 345/426/18 346/624/18 348/427/18 -f 352/429/18 351/625/18 349/430/18 -f 356/432/18 354/626/18 353/433/18 -f 360/435/18 359/627/18 357/436/18 -f 364/438/18 362/628/18 361/439/18 -f 365/441/18 367/629/18 368/442/18 -f 369/444/18 370/630/18 372/445/18 -f 376/447/18 375/631/18 373/448/18 -f 380/450/18 378/632/18 377/451/18 -f 384/453/18 383/633/18 381/454/18 -f 388/456/18 386/634/18 385/457/18 -f 389/459/19 395/463/19 393/460/19 -f 390/462/21 396/467/21 395/463/21 -f 391/464/23 393/635/23 394/465/23 -f 392/466/20 394/465/20 396/467/20 -f 397/468/19 403/472/19 401/469/19 -f 398/471/21 404/476/21 403/472/21 -f 399/473/23 401/636/23 402/474/23 -f 400/475/20 402/474/20 404/476/20 -f 405/477/17 406/637/17 408/478/17 -f 412/480/17 410/638/17 409/481/17 -f 416/483/17 415/639/17 413/484/17 -f 417/486/17 418/640/17 420/487/17 -f 421/489/17 423/641/17 424/490/17 -f 425/492/17 426/642/17 428/493/17 -f 429/495/17 431/643/17 432/496/17 -f 436/498/17 434/644/17 433/499/17 -f 440/501/17 439/645/17 437/502/17 -f 444/504/17 442/646/17 441/505/17 -f 448/507/17 447/647/17 445/508/17 -f 449/510/17 450/648/17 452/511/17 -f 453/513/17 455/649/17 456/514/17 -f 457/516/17 459/650/17 460/517/17 -f 461/519/17 462/651/17 464/520/17 -f 465/522/17 467/652/17 468/523/17 -f 472/525/17 470/653/17 469/526/17 -f 476/528/17 475/654/17 473/529/17 -f 480/531/17 478/655/17 477/532/17 -f 484/534/17 483/656/17 481/535/17 -f 485/537/17 486/657/17 488/538/17 -f 489/540/17 491/658/17 492/541/17 -f 496/543/17 494/659/17 493/544/17 -f 500/546/17 499/660/17 497/547/17 -f 504/549/17 502/661/17 501/550/17 -f 508/552/17 507/662/17 505/553/17 -f 510/555/20 514/563/20 516/556/20 -f 511/558/19 515/663/19 513/559/19 -f 512/557/18 516/556/18 515/561/18 -f 509/560/17 513/559/17 514/563/17 -f 518/564/20 522/572/20 524/565/20 -f 519/567/19 523/664/19 521/568/19 -f 520/566/18 524/565/18 523/570/18 -f 517/569/17 521/568/17 522/572/17 -f 526/573/20 530/581/20 532/574/20 -f 527/576/19 531/665/19 529/577/19 -f 528/575/18 532/574/18 531/579/18 -f 525/578/17 529/577/17 530/581/17 -f 536/582/19 535/666/19 533/583/19 -f 540/585/18 539/667/18 537/586/18 -f 544/588/17 543/668/17 541/589/17 -o Atlas_Rope -v -2.116117 11.000000 2.292893 -v -2.292893 11.000000 2.116117 -v -2.292893 11.000000 2.469670 -v -2.469670 11.000000 2.292893 -v -1.762563 16.250000 1.939340 -v -1.939340 16.250000 1.762563 -v -1.939340 16.250000 2.116117 -v -2.116117 16.250000 1.939340 -v -1.409010 16.750000 1.585786 -v -1.585786 16.750000 1.409010 -v -1.409010 17.000000 1.585786 -v -1.585786 17.000000 1.409010 -v -1.055456 17.000000 0.878680 -v -0.878680 17.000000 1.055456 -v -0.701903 16.750000 0.878680 -v -0.878680 16.750000 0.701903 -v -0.878680 16.750000 1.055456 -v -1.055456 16.750000 0.878680 -v -0.701903 15.250000 0.878680 -v -0.878680 15.250000 0.701903 -v -0.878680 15.250000 1.055456 -v -1.055456 15.250000 0.878680 -v 0.005204 14.250000 0.171573 -v -0.171573 14.250000 -0.005204 -v -0.171573 14.250000 0.348350 -v -0.348350 14.250000 0.171573 -vt 0.897436 0.395161 -vt 0.884615 0.346774 -vt 0.897436 0.346774 -vt 0.846154 -0.000000 -vt 0.858974 0.338710 -vt 0.846154 0.338710 -vt 0.884615 -0.000000 -vt 0.871795 0.338710 -vt 0.871795 -0.000000 -vt 0.858974 -0.000000 -vt 0.897436 -0.000000 -vt 0.884615 0.338710 -vt 0.858974 0.451613 -vt 0.846154 0.467742 -vt 0.846154 0.451613 -vt 0.858974 0.403226 -vt 0.846154 0.346774 -vt 0.884615 0.395161 -vt 0.871795 0.451613 -vt 0.897436 0.403226 -vt 0.884615 0.451613 -vt 0.884615 0.403226 -vt 0.871795 0.403226 -vt 0.871795 0.467742 -vt 0.884615 0.532258 -vt 0.897436 0.467742 -vt 0.897436 0.532258 -vt 0.884615 0.629032 -vt 0.897436 0.629032 -vt 0.871795 0.629032 -vt 0.858974 0.629032 -vt 0.871795 0.532258 -vt 0.846154 0.629032 -vt 0.858974 0.532258 -vt 0.884615 0.467742 -vt 0.858974 0.467742 -vt 0.871795 0.467742 -vt 0.846154 0.532258 -vt 0.897436 0.338710 -vt 0.846154 0.403226 -vt 0.846154 0.395161 -vt 0.897436 0.451613 -vt 0.884615 0.467742 -vt 0.858974 0.467742 -vt 0.846154 0.467742 -vn 0.5000 -0.7071 -0.5000 -vn -0.7071 -0.0000 -0.7071 -vn 0.7071 -0.0000 0.7071 -vn -0.7039 0.0948 0.7039 -vn 0.7039 -0.0948 -0.7039 -vn -0.5000 0.7071 0.5000 -vn 0.0000 1.0000 0.0000 +f 679/1121/134 680/1122/134 681/1123/134 +f 682/1124/134 681/1123/134 683/1125/134 +f 683/1125/135 684/1126/135 685/1127/135 +f 680/1128/136 686/1129/136 681/1130/136 +f 685/1131/137 687/1132/137 680/1133/137 +f 681/1134/138 688/1135/138 683/1136/138 +f 689/1137/135 690/1138/135 679/1139/135 +f 690/1140/134 685/1127/134 680/1122/134 +f 691/1141/134 683/1125/134 685/1127/134 +f 686/1142/139 692/1143/139 688/1144/139 +f 688/1144/139 693/1145/139 684/1126/139 +f 684/1126/139 694/1146/139 687/1147/139 +f 687/1147/139 689/1148/139 686/1142/139 +f 695/1149/134 696/1150/134 697/1151/134 +f 694/1152/138 691/1153/138 690/1154/138 +f 693/1155/136 682/1156/136 691/1157/136 +f 692/1158/137 679/1159/137 682/1160/137 +f 698/1161/137 699/1162/137 700/1163/137 +f 699/1164/136 701/1165/136 700/1166/136 +f 702/1167/135 703/1168/135 704/1169/135 +f 705/1170/140 700/1166/140 701/1165/140 +f 704/1171/138 706/1172/138 707/1173/138 +f 705/1174/138 701/1175/138 708/1176/138 +f 701/1175/136 709/1177/136 708/1176/136 +f 709/1178/141 704/1171/141 703/1179/141 +f 710/1180/134 711/1181/134 712/1182/134 +f 713/1183/136 711/1181/136 714/1184/136 +f 714/1185/137 715/1186/137 716/1187/137 +f 717/1188/138 712/1182/138 713/1189/138 +f 716/1190/135 710/1180/135 717/1191/135 +f 718/1192/134 719/1193/134 720/1194/134 +f 721/1195/134 722/1196/134 723/1197/134 +f 724/1198/134 725/1199/134 726/1200/134 +f 727/1201/134 728/1202/134 729/1203/134 +f 730/1204/135 724/1198/135 731/1205/135 +f 732/1206/137 733/1207/137 734/1208/137 +f 735/1209/137 736/1210/137 730/1204/137 +f 737/1211/136 722/1212/136 738/1213/136 +f 739/1214/136 728/1215/136 740/1216/136 +f 741/1217/138 723/1218/138 737/1211/138 +f 742/1219/138 729/1220/138 739/1214/138 +f 743/1221/135 721/1195/135 741/1222/135 +f 744/1223/135 727/1201/135 742/1224/135 +f 738/1213/137 745/1225/137 743/1221/137 +f 746/1226/136 719/1227/136 732/1206/136 +f 740/1216/137 747/1228/137 744/1223/137 +f 748/1229/136 725/1230/136 735/1209/136 +f 749/1231/138 720/1232/138 746/1226/138 +f 731/1233/138 726/1234/138 748/1229/138 +f 734/1208/135 718/1192/135 749/1235/135 +f 750/1236/138 751/1237/138 752/1238/138 +f 753/1239/137 754/1240/137 755/1241/137 +f 756/1242/135 757/1243/135 758/1244/135 +f 759/1245/136 760/1246/136 761/1247/136 +f 762/1248/134 763/1249/134 764/1250/134 +f 765/1251/134 766/1252/134 767/1253/134 +f 768/1254/135 762/1248/135 769/1255/135 +f 770/1256/136 763/1257/136 771/1258/136 +f 772/1259/137 773/1260/137 774/1261/137 +f 775/1262/138 767/1263/138 776/1264/138 +f 771/1258/137 777/1265/137 768/1254/137 +f 769/1266/138 764/1267/138 770/1256/138 +f 774/1261/135 765/1251/135 775/1268/135 +f 776/1264/136 766/1269/136 772/1259/136 +f 778/1270/138 779/1271/138 780/1272/138 +f 779/1273/135 781/1274/135 780/1275/135 +f 782/1276/136 783/1277/136 784/1278/136 +f 785/1279/142 781/1274/142 786/1280/142 +f 784/1281/137 787/1282/137 788/1283/137 +f 786/1284/137 781/1285/137 789/1286/137 +f 781/1285/135 790/1287/135 789/1286/135 +f 790/1288/143 784/1281/143 783/1289/143 +f 791/1290/136 792/1291/136 793/1292/136 +f 792/1293/138 794/1294/138 793/1295/138 +f 795/1296/137 796/1297/137 797/1298/137 +f 798/1299/141 794/1294/141 799/1300/141 +f 797/1301/135 800/1302/135 801/1303/135 +f 799/1304/135 794/1305/135 802/1306/135 +f 794/1305/138 803/1307/138 802/1306/138 +f 803/1308/142 797/1301/142 796/1309/142 +f 804/1310/135 805/1311/135 806/1312/135 +f 805/1313/137 807/1314/137 806/1315/137 +f 808/1316/138 809/1317/138 810/1318/138 +f 811/1319/143 806/1315/143 807/1314/143 +f 810/1320/136 812/1321/136 813/1322/136 +f 811/1323/136 807/1324/136 814/1325/136 +f 807/1324/137 815/1326/137 814/1325/137 +f 815/1327/140 810/1320/140 809/1328/140 +f 816/1329/137 817/1330/137 818/1331/137 +f 819/1332/138 820/1333/138 821/1334/138 +f 822/1335/136 823/1336/136 824/1337/136 +f 825/1338/135 826/1339/135 827/1340/135 +f 679/1121/134 690/1140/134 680/1122/134 +f 682/1124/134 679/1121/134 681/1123/134 +f 683/1125/135 688/1144/135 684/1126/135 +f 680/1128/136 687/1341/136 686/1129/136 +f 685/1131/137 684/1342/137 687/1132/137 +f 681/1134/138 686/1343/138 688/1135/138 +f 689/1137/135 694/1344/135 690/1138/135 +f 690/1140/134 691/1141/134 685/1127/134 +f 691/1141/134 682/1124/134 683/1125/134 +f 686/1142/139 689/1148/139 692/1143/139 +f 688/1144/139 692/1143/139 693/1145/139 +f 684/1126/139 693/1145/139 694/1146/139 +f 687/1147/139 694/1146/139 689/1148/139 +f 695/1149/134 828/1345/134 696/1150/134 +f 694/1152/138 693/1346/138 691/1153/138 +f 693/1155/136 692/1347/136 682/1156/136 +f 692/1158/137 689/1348/137 679/1159/137 +f 829/1349/137 702/1167/137 700/1163/137 +f 702/1167/137 698/1161/137 700/1163/137 +f 699/1164/136 706/1172/136 701/1165/136 +f 707/1350/135 698/1161/135 704/1169/135 +f 698/1161/135 702/1167/135 704/1169/135 +f 705/1170/140 829/1351/140 700/1166/140 +f 704/1171/138 701/1165/138 706/1172/138 +f 709/1178/141 701/1165/141 704/1171/141 +f 710/1180/134 715/1186/134 711/1181/134 +f 713/1183/136 712/1182/136 711/1181/136 +f 714/1185/137 711/1181/137 715/1186/137 +f 717/1188/138 710/1180/138 712/1182/138 +f 716/1190/135 715/1186/135 710/1180/135 +f 718/1192/134 733/1207/134 719/1193/134 +f 721/1195/134 745/1225/134 722/1196/134 +f 724/1198/134 736/1210/134 725/1199/134 +f 727/1201/134 747/1228/134 728/1202/134 +f 730/1204/135 736/1210/135 724/1198/135 +f 732/1206/137 719/1227/137 733/1207/137 +f 735/1209/137 725/1230/137 736/1210/137 +f 737/1211/136 723/1218/136 722/1212/136 +f 739/1214/136 729/1220/136 728/1215/136 +f 741/1217/138 721/1352/138 723/1218/138 +f 742/1219/138 727/1353/138 729/1220/138 +f 743/1221/135 745/1225/135 721/1195/135 +f 744/1223/135 747/1228/135 727/1201/135 +f 738/1213/137 722/1212/137 745/1225/137 +f 746/1226/136 720/1232/136 719/1227/136 +f 740/1216/137 728/1215/137 747/1228/137 +f 748/1229/136 726/1234/136 725/1230/136 +f 749/1231/138 718/1354/138 720/1232/138 +f 731/1233/138 724/1355/138 726/1234/138 +f 734/1208/135 733/1207/135 718/1192/135 +f 750/1236/138 830/1356/138 751/1237/138 +f 753/1239/137 831/1357/137 754/1240/137 +f 756/1242/135 832/1358/135 757/1243/135 +f 759/1245/136 833/1359/136 760/1246/136 +f 762/1248/134 777/1265/134 763/1249/134 +f 765/1251/134 773/1260/134 766/1252/134 +f 768/1254/135 777/1265/135 762/1248/135 +f 770/1256/136 764/1267/136 763/1257/136 +f 772/1259/137 766/1269/137 773/1260/137 +f 775/1262/138 765/1360/138 767/1263/138 +f 771/1258/137 763/1257/137 777/1265/137 +f 769/1266/138 762/1361/138 764/1267/138 +f 774/1261/135 773/1260/135 765/1251/135 +f 776/1264/136 767/1263/136 766/1269/136 +f 785/1362/138 782/1276/138 780/1272/138 +f 782/1276/138 778/1270/138 780/1272/138 +f 779/1273/135 787/1282/135 781/1274/135 +f 788/1363/136 778/1270/136 784/1278/136 +f 778/1270/136 782/1276/136 784/1278/136 +f 785/1279/142 780/1275/142 781/1274/142 +f 784/1281/137 781/1274/137 787/1282/137 +f 790/1288/143 781/1274/143 784/1281/143 +f 798/1364/136 795/1296/136 793/1292/136 +f 795/1296/136 791/1290/136 793/1292/136 +f 792/1293/138 800/1302/138 794/1294/138 +f 801/1365/137 791/1290/137 797/1298/137 +f 791/1290/137 795/1296/137 797/1298/137 +f 798/1299/141 793/1295/141 794/1294/141 +f 797/1301/135 794/1294/135 800/1302/135 +f 803/1308/142 794/1294/142 797/1301/142 +f 834/1366/135 808/1316/135 806/1312/135 +f 808/1316/135 804/1310/135 806/1312/135 +f 805/1313/137 812/1321/137 807/1314/137 +f 813/1367/138 804/1310/138 810/1318/138 +f 804/1310/138 808/1316/138 810/1318/138 +f 811/1319/143 834/1368/143 806/1315/143 +f 810/1320/136 807/1314/136 812/1321/136 +f 815/1327/140 807/1314/140 810/1320/140 +f 816/1329/137 835/1369/137 817/1330/137 +f 819/1332/138 836/1370/138 820/1333/138 +f 822/1335/136 837/1371/136 823/1336/136 +f 825/1338/135 838/1372/135 826/1339/135 +o Micro_Erector +v -0.125000 3.250000 -1.625000 +v 0.125000 3.250000 -1.375000 +v -0.125000 3.250000 -1.375000 +v 0.125000 6.250000 -1.375000 +v -0.125000 6.000000 -1.625000 +v -0.125000 6.250000 -1.375000 +v 0.125000 6.000000 -1.625000 +v 0.125000 3.250000 -1.625000 +v -0.625000 6.000000 -0.125000 +v -0.125000 6.000000 -0.375000 +v -0.375000 6.000000 -0.125000 +v -0.125000 6.250000 -0.625000 +v -0.125000 6.000000 -0.625000 +v 0.125000 6.250000 -1.375000 +v 0.125000 6.000000 -0.625000 +v 0.125000 6.000000 -1.375000 +v -0.125000 6.250000 -1.375000 +v 0.125000 6.250000 -0.625000 +v -0.125000 6.000000 -1.375000 +v 0.375000 6.250000 0.375000 +v 0.625000 6.000000 0.125000 +v 0.625000 6.250000 0.125000 +v 0.375000 6.000000 -0.125000 +v 0.375000 6.000000 0.375000 +v 0.625000 6.250000 -0.125000 +v 0.625000 6.000000 -0.125000 +v 0.375000 6.250000 -0.125000 +v -0.375000 6.250000 -0.125000 +v -0.625000 6.250000 -0.125000 +v -0.625000 6.250000 0.125000 +v -0.375000 6.000000 0.375000 +v -0.375000 6.250000 0.375000 +v -0.625000 6.000000 0.125000 +v -0.125000 6.250000 -0.375000 +v 0.125000 6.000000 -0.375000 +v 0.125000 6.250000 -0.375000 +v 0.000000 6.000000 -0.625000 +v 0.000000 5.500000 -1.375000 +v 0.000000 6.250000 -0.625000 +v 0.000000 4.250000 -0.625000 +v 0.000000 4.750000 -1.375000 +v 0.000000 5.000000 -1.375000 +v 0.125000 4.000000 -0.625000 +v -0.125000 4.000000 -0.375000 +v -0.125000 4.000000 -0.625000 +v -0.125000 4.250000 -0.375000 +v 0.125000 4.000000 -0.375000 +v 0.125000 4.250000 -0.375000 +v -0.625000 4.000000 -0.125000 +v -0.625000 4.250000 0.125000 +v -0.625000 4.250000 -0.125000 +v -0.375000 4.250000 -0.125000 +v -0.375000 4.250000 0.375000 +v -0.375000 4.000000 0.375000 +v -0.375000 4.000000 -0.125000 +v -0.625000 4.000000 0.125000 +v -0.125000 4.250000 -0.625000 +v 0.375000 4.000000 -0.125000 +v 0.375000 4.250000 0.375000 +v 0.375000 4.250000 -0.125000 +v 0.625000 4.250000 0.125000 +v 0.625000 4.250000 -0.125000 +v 0.625000 4.000000 0.125000 +v 0.625000 4.000000 -0.125000 +v 0.375000 4.000000 0.375000 +v 0.125000 4.000000 -1.375000 +v -0.125000 4.000000 -1.375000 +v -0.125000 4.250000 -1.375000 +v 0.125000 4.250000 -0.625000 +v 0.125000 4.250000 -1.375000 +v 0.000000 5.500000 -1.375000 +v 0.000000 6.000000 -0.625000 +v 0.000000 6.250000 -0.625000 +v 0.000000 4.750000 -1.375000 +v 0.000000 4.250000 -0.625000 +v 0.000000 5.000000 -1.375000 +v 0.000000 5.250000 -1.375000 +v 0.000000 4.000000 -0.625000 +v 0.000000 5.250000 -1.375000 +v 0.000000 4.000000 -0.625000 +vt 0.800000 0.448276 +vt 0.777778 0.413793 +vt 0.800000 0.413793 +vt 0.777778 0.862069 +vt 0.800000 0.827586 +vt 0.800000 0.862069 +vt 0.777778 0.827586 +vt 0.777778 0.448276 +vt 0.844444 0.448276 +vt 0.822222 0.862069 +vt 0.822222 0.448276 +vt 0.755556 0.448276 +vt 0.755556 0.862069 +vt 0.866667 0.172414 +vt 0.911111 0.137931 +vt 0.888889 0.172414 +vt 1.000000 0.172414 +vt 0.977778 0.103448 +vt 1.000000 0.103448 +vt 0.866667 -0.000000 +vt 0.844444 0.103448 +vt 0.844444 -0.000000 +vt 0.933333 0.000000 +vt 0.911111 0.103448 +vt 0.911111 0.000000 +vt 1.000000 -0.000000 +vt 0.977778 -0.000000 +vt 0.933333 -0.000000 +vt 0.911111 0.103448 +vt 0.911111 -0.000000 +vt 0.866667 0.241379 +vt 0.844444 0.206897 +vt 0.866667 0.206897 +vt 0.955556 0.172414 +vt 0.977778 0.206897 +vt 0.955556 0.241379 +vt 0.866667 0.172414 +vt 0.844444 0.172414 +vt 0.888889 0.172414 +vt 0.844444 0.310345 +vt 0.866667 0.310345 +vt 0.955556 0.172414 +vt 0.933333 0.103448 +vt 0.977778 0.172414 +vt 0.977778 0.206897 +vt 1.000000 0.241379 +vt 0.977778 0.241379 +vt 0.866667 0.206897 +vt 0.977778 0.310345 +vt 1.000000 0.310345 +vt 0.955556 0.241379 +vt 0.933333 0.137931 +vt 0.911111 0.172414 +vt 0.911111 0.137931 +vt 0.933333 0.103448 +vt 1.000000 0.344828 +vt 0.866667 0.344828 +vt 0.866667 0.103448 +vt 0.933333 0.137931 +vt 0.977778 0.172414 +vt 0.444444 0.000000 +vt 0.511111 0.034483 +vt 0.444444 0.034483 +vt 0.444444 0.034483 +vt 0.511111 0.000000 +vt 0.511111 0.034483 +vt 0.933333 0.103448 +vt 0.911111 0.137931 +vt 0.911111 0.103448 +vt 0.933333 0.137931 +vt 0.911111 0.172414 +vt 0.911111 0.137931 +vt 1.000000 0.172414 +vt 0.977778 0.206897 +vt 0.977778 0.172414 +vt 0.955556 0.172414 +vt 0.955556 0.241379 +vt 0.977778 0.310345 +vt 1.000000 0.241379 +vt 1.000000 0.310345 +vt 0.888889 0.172414 +vt 0.866667 0.206897 +vt 0.866667 0.172414 +vt 0.977778 0.241379 +vt 0.933333 0.103448 +vt 0.844444 0.310345 +vt 0.866667 0.241379 +vt 0.866667 0.310345 +vt 0.888889 0.172414 +vt 0.866667 0.206897 +vt 0.866667 0.172414 +vt 0.844444 0.206897 +vt 0.844444 0.172414 +vt 0.955556 0.172414 +vt 0.977778 0.206897 +vt 0.955556 0.241379 +vt 0.933333 -0.000000 +vt 0.911111 -0.000000 +vt 1.000000 -0.000000 +vt 0.977778 0.103448 +vt 0.977778 -0.000000 +vt 0.933333 0.000000 +vt 0.911111 0.103448 +vt 0.911111 0.000000 +vt 0.866667 -0.000000 +vt 0.844444 0.103448 +vt 0.844444 -0.000000 +vt 1.000000 0.103448 +vt 0.511111 0.034483 +vt 0.444444 0.000000 +vt 0.444444 0.034483 +vt 0.511111 0.000000 +vt 0.444444 0.034483 +vt 0.511111 0.034483 +vt 1.000000 0.344828 +vt 0.866667 0.344828 +vt 0.866667 0.103448 +vt 0.933333 0.137931 +vt 0.977778 0.172414 +vt 0.844444 0.862069 +vt 0.844444 0.241379 +vt 0.888889 0.241379 +vt 1.000000 0.206897 +vt 0.888889 0.241379 +vt 0.933333 0.172414 +vt 0.977778 0.344828 +vt 0.844444 0.344828 +vt 0.511111 0.000000 +vt 0.444444 -0.000000 +vt 0.933333 0.172414 +vt 1.000000 0.206897 +vt 0.888889 0.241379 +vt 0.844444 0.241379 +vt 0.888889 0.241379 +vt 0.511111 0.000000 +vt 0.444444 -0.000000 +vt 0.977778 0.344828 +vt 0.844444 0.344828 vn 0.0000 -1.0000 0.0000 -vn 0.5000 0.7071 -0.5000 -vn 0.7071 0.0000 -0.7071 -vn -0.7071 0.0000 0.7071 -vn -0.5000 -0.7071 0.5000 -s off -f 554/669/24 549/670/24 550/671/24 -f 546/672/25 552/673/25 550/674/25 -f 545/675/26 551/676/26 547/677/26 -f 547/677/27 552/673/27 548/678/27 -f 546/679/28 549/680/28 545/675/28 -f 557/681/25 560/682/25 562/683/25 -f 556/684/25 550/685/25 552/673/25 -f 551/676/29 556/684/29 552/673/29 -f 553/686/26 551/676/26 549/670/26 -f 556/684/30 558/687/30 557/681/30 -f 554/688/31 561/689/31 553/690/31 -f 561/689/26 558/687/26 555/691/26 -f 559/692/32 557/681/32 558/687/32 -f 564/693/25 570/694/25 566/695/25 -f 560/696/25 566/695/25 562/697/25 -f 559/698/33 564/693/33 560/696/33 -f 561/699/26 563/700/26 559/698/26 -f 562/701/34 565/702/34 561/699/34 -f 563/700/32 568/703/32 564/693/32 -f 563/700/26 569/704/26 567/705/26 -f 566/706/35 569/704/35 565/702/35 -f 554/669/24 553/686/24 549/670/24 -f 546/672/25 548/678/25 552/673/25 -f 545/675/26 549/680/26 551/676/26 -f 547/677/27 551/676/27 552/673/27 -f 546/679/28 550/707/28 549/680/28 -f 562/683/25 554/708/25 556/684/25 -f 556/684/25 557/681/25 562/683/25 -f 556/684/25 554/709/25 550/685/25 -f 551/676/29 555/691/29 556/684/29 -f 553/686/26 555/691/26 551/676/26 -f 556/684/30 555/691/30 558/687/30 -f 554/688/31 562/710/31 561/689/31 -f 555/691/26 553/690/26 561/689/26 -f 561/689/26 559/711/26 558/687/26 -f 559/692/32 560/712/32 557/681/32 -f 564/693/25 568/703/25 570/694/25 -f 560/696/25 564/693/25 566/695/25 -f 559/698/33 563/700/33 564/693/33 -f 561/699/26 565/702/26 563/700/26 -f 562/701/34 566/706/34 565/702/34 -f 563/700/32 567/705/32 568/703/32 -f 563/700/26 565/702/26 569/704/26 -f 566/706/35 570/713/35 569/704/35 -o Atlas_Pivot -v 0.750000 1.500000 -3.750000 -v 1.250000 1.500000 -3.750000 -v 0.750000 1.500000 -4.250000 -v 1.250000 1.500000 -4.250000 -v -1.250000 1.500000 -3.750000 -v -0.750000 1.500000 -3.750000 -v -1.250000 1.500000 -4.250000 -v -0.750000 1.500000 -4.250000 -v 0.750000 2.000000 -2.250000 -v 1.250000 2.000000 -2.250000 -v 0.750000 2.000000 -2.750000 -v 1.250000 2.000000 -2.750000 -v -1.250000 2.000000 -2.250000 -v -0.750000 2.000000 -2.250000 -v -1.250000 2.000000 -2.750000 -v -0.750000 2.000000 -2.750000 -v 0.750000 3.500000 -4.250000 -v 0.750000 3.500000 -3.750000 -v 1.250000 3.500000 -3.750000 -v 1.250000 3.500000 -4.250000 -v -1.250000 3.500000 -4.250000 -v -1.250000 3.500000 -3.750000 -v -0.750000 3.500000 -3.750000 -v -0.750000 3.500000 -4.250000 -v 0.750000 3.500000 -2.750000 -v 0.750000 3.500000 -2.250000 -v 1.250000 3.500000 -2.250000 -v 1.250000 3.500000 -2.750000 -v -1.250000 3.500000 -2.750000 -v -1.250000 3.500000 -2.250000 -v -0.750000 3.500000 -2.250000 -v -0.750000 3.500000 -2.750000 -v 0.812500 3.500000 -3.812500 -v 1.187500 3.500000 -3.812500 -v 0.812500 3.500000 -4.187500 -v 1.187500 3.500000 -4.187500 -v 0.812500 4.500000 -3.812500 -v 1.187500 4.500000 -3.812500 -v 0.812500 4.500000 -4.187500 -v 1.187500 4.500000 -4.187500 -v 0.812500 3.500000 -2.312500 -v 1.187500 3.500000 -2.312500 -v 0.812500 3.500000 -2.687500 -v 1.187500 3.500000 -2.687500 -v 0.812500 4.500000 -2.312500 -v 1.187500 4.500000 -2.312500 -v 0.812500 4.500000 -2.687500 -v 1.187500 4.500000 -2.687500 -v -1.187500 3.500000 -3.812500 -v -0.812500 3.500000 -3.812500 -v -1.187500 3.500000 -4.187500 -v -0.812500 3.500000 -4.187500 -v -1.187500 4.500000 -3.812500 -v -0.812500 4.500000 -3.812500 -v -1.187500 4.500000 -4.187500 -v -0.812500 4.500000 -4.187500 -v -1.187500 3.500000 -2.312500 -v -0.812500 3.500000 -2.312500 -v -1.187500 3.500000 -2.687500 -v -0.812500 3.500000 -2.687500 -v -1.187500 4.500000 -2.312500 -v -0.812500 4.500000 -2.312500 -v -1.187500 4.500000 -2.687500 -v -0.812500 4.500000 -2.687500 -v 1.000000 3.000000 -2.750000 -v 1.000000 2.500000 -2.750000 -v 1.000000 3.000000 -3.750000 -v 1.000000 2.500000 -3.750000 -v -1.000000 3.000000 -2.750000 -v -1.000000 2.500000 -2.750000 -v -1.000000 3.000000 -3.750000 -v -1.000000 2.500000 -3.750000 -v 0.750000 3.000000 -4.000000 -v 0.750000 2.500000 -4.000000 -v -0.750000 3.000000 -4.000000 -v -0.750000 2.500000 -4.000000 -v 0.750000 3.000000 -2.500000 -v 0.750000 2.500000 -2.500000 -v -0.750000 3.000000 -2.500000 -v -0.750000 2.500000 -2.500000 -v 1.000000 3.000000 -2.750000 -v 1.000000 2.500000 -2.750000 -v 1.000000 3.000000 -3.750000 -v 1.000000 2.500000 -3.750000 -v -1.000000 3.000000 -2.750000 -v -1.000000 2.500000 -2.750000 -v -1.000000 3.000000 -3.750000 -v -1.000000 2.500000 -3.750000 -v 0.750000 3.000000 -4.000000 -v 0.750000 2.500000 -4.000000 -v -0.750000 3.000000 -4.000000 -v -0.750000 2.500000 -4.000000 -v 0.750000 3.000000 -2.500000 -v 0.750000 2.500000 -2.500000 -v -0.750000 3.000000 -2.500000 -v -0.750000 2.500000 -2.500000 -vt 0.769231 0.967742 -vt 0.750000 0.903226 -vt 0.769231 0.903226 -vt 0.750000 0.967742 -vt 0.730769 0.903226 -vt 0.692308 0.870968 -vt 0.717949 0.903226 -vt 0.692308 0.903226 -vt 0.692308 0.870968 -vt 0.717949 0.903226 -vt 0.692308 0.903226 -vt 0.692308 0.870968 -vt 0.717949 0.838710 -vt 0.717949 0.870968 -vt 0.692308 0.870968 -vt 0.717949 0.838710 -vt 0.717949 0.870968 -vt 0.769231 0.709677 -vt 0.743590 0.838710 -vt 0.743590 0.709677 -vt 0.717949 0.709677 -vt 0.692308 0.838710 -vt 0.692308 0.709677 -vt 0.769231 0.709677 -vt 0.743590 0.838710 -vt 0.743590 0.709677 -vt 0.794872 0.709677 -vt 0.769231 0.838710 -vt 0.717949 0.709677 -vt 0.794872 0.709677 -vt 0.769231 0.838710 -vt 0.692308 0.838710 -vt 0.692308 0.709677 -vt 0.692308 0.870968 -vt 0.717949 0.838710 -vt 0.717949 0.870968 -vt 0.692308 0.870968 -vt 0.717949 0.838710 -vt 0.717949 0.870968 -vt 0.794872 0.741935 -vt 0.769231 0.838710 -vt 0.769231 0.741935 -vt 0.743590 0.741935 -vt 0.717949 0.741935 -vt 0.794872 0.741935 -vt 0.769231 0.838710 -vt 0.769231 0.741935 -vt 0.743590 0.741935 -vt 0.717949 0.741935 -vt 0.692308 0.838710 -vt 0.692308 0.741935 -vt 0.743590 0.838710 -vt 0.692308 0.838710 -vt 0.692308 0.741935 -vt 0.743590 0.838710 -vt 0.730769 0.967742 -vt 0.711538 0.903226 -vt 0.711538 0.967742 -vt 0.692308 0.903226 -vt 0.769231 0.967742 -vt 0.750000 0.903226 -vt 0.769231 0.903226 -vt 0.750000 0.967742 -vt 0.730769 0.903226 -vt 0.730769 0.967742 -vt 0.711538 0.903226 -vt 0.711538 0.967742 -vt 0.692308 0.903226 -vt 0.769231 0.967742 -vt 0.750000 0.903226 -vt 0.769231 0.903226 -vt 0.750000 0.967742 -vt 0.730769 0.903226 -vt 0.730769 0.967742 -vt 0.711538 0.903226 -vt 0.711538 0.967742 -vt 0.692308 0.903226 -vt 0.769231 0.967742 -vt 0.750000 0.903226 -vt 0.769231 0.903226 -vt 0.750000 0.967742 -vt 0.730769 0.903226 -vt 0.730769 0.967742 -vt 0.711538 0.903226 -vt 0.711538 0.967742 -vt 0.692308 0.903226 -vt 0.743590 0.870968 -vt 0.794872 0.903226 -vt 0.743590 0.903226 -vt 0.743590 0.903226 -vt 0.794872 0.870968 -vt 0.794872 0.903226 -vt 0.717949 0.838710 -vt 0.794872 0.870968 -vt 0.717949 0.870968 -vt 0.717949 0.870968 -vt 0.794872 0.838710 -vt 0.794872 0.870968 -vt 0.794872 0.903226 -vt 0.743590 0.870968 -vt 0.743590 0.903226 -vt 0.794872 0.870968 -vt 0.743590 0.903226 -vt 0.794872 0.903226 -vt 0.794872 0.870968 -vt 0.717949 0.838710 -vt 0.717949 0.870968 -vt 0.794872 0.838710 -vt 0.717949 0.870968 -vt 0.794872 0.870968 -vt 0.717949 0.870968 -vt 0.717949 0.870968 -vt 0.794872 0.838710 -vt 0.794872 0.838710 -vt 0.794872 0.838710 -vt 0.794872 0.838710 -vt 0.692308 0.967742 -vt 0.692308 0.967742 -vt 0.692308 0.967742 -vt 0.692308 0.967742 -vt 0.794872 0.870968 -vt 0.743590 0.870968 -vt 0.794872 0.838710 -vt 0.717949 0.838710 -vt 0.794872 0.870968 -vt 0.743590 0.870968 -vt 0.794872 0.838710 -vt 0.717949 0.838710 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 +vn 0.0000 0.7071 -0.7071 vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 0.0000 -s off -f 610/714/36 604/715/36 606/716/36 -f 608/717/37 603/718/37 604/715/37 -f 581/719/38 580/720/38 579/721/38 -f 585/722/38 584/723/38 583/724/38 -f 589/725/39 587/726/39 588/727/39 -f 593/728/39 591/729/39 592/730/39 -f 576/731/37 592/732/37 575/733/37 -f 573/734/40 590/735/40 574/736/40 -f 572/737/37 588/738/37 571/739/37 -f 578/740/36 593/741/36 576/731/36 -f 575/733/41 591/729/41 577/742/41 -f 574/743/36 589/744/36 572/737/36 -f 571/739/41 587/726/41 573/734/41 -f 577/742/40 594/745/40 578/746/40 -f 597/747/39 595/748/39 596/749/39 -f 601/750/39 599/751/39 600/752/39 -f 586/753/36 601/754/36 584/755/36 -f 583/756/41 599/751/41 585/757/41 -f 582/758/36 597/759/36 580/760/36 -f 579/761/41 595/748/41 581/762/41 -f 585/757/40 602/763/40 586/764/40 -f 584/755/37 600/765/37 583/756/37 -f 581/762/40 598/766/40 582/767/40 -f 580/760/37 596/768/37 579/761/37 -f 607/769/41 605/770/41 603/718/41 -f 609/771/40 606/772/40 605/770/40 -f 618/773/36 612/774/36 614/775/36 -f 616/776/37 611/777/37 612/774/37 -f 615/778/41 613/779/41 611/777/41 -f 617/780/40 614/781/40 613/779/40 -f 626/782/36 620/783/36 622/784/36 -f 624/785/37 619/786/37 620/783/37 -f 623/787/41 621/788/41 619/786/41 -f 625/789/40 622/790/40 621/788/40 -f 634/791/36 628/792/36 630/793/36 -f 632/794/37 627/795/37 628/792/37 -f 631/796/41 629/797/41 627/795/41 -f 633/798/40 630/799/40 629/797/40 -f 636/800/36 637/801/36 635/802/36 -f 641/803/41 640/804/41 639/805/41 -f 644/806/40 645/807/40 643/808/40 -f 649/809/37 648/810/37 647/811/37 -f 653/812/41 652/813/41 651/814/41 -f 656/815/36 657/816/36 655/817/36 -f 661/818/37 660/819/37 659/820/37 -f 664/821/40 665/822/40 663/823/40 -f 610/714/36 608/717/36 604/715/36 -f 608/717/37 607/769/37 603/718/37 -f 581/719/38 582/824/38 580/720/38 -f 585/722/38 586/825/38 584/723/38 -f 589/725/39 590/735/39 587/726/39 -f 593/728/39 594/745/39 591/729/39 -f 576/731/37 593/741/37 592/732/37 -f 573/734/40 587/726/40 590/735/40 -f 572/737/37 589/744/37 588/738/37 -f 578/740/36 594/826/36 593/741/36 -f 575/733/41 592/732/41 591/729/41 -f 574/743/36 590/827/36 589/744/36 -f 571/739/41 588/738/41 587/726/41 -f 577/742/40 591/729/40 594/745/40 -f 597/747/39 598/766/39 595/748/39 -f 601/750/39 602/763/39 599/751/39 -f 586/753/36 602/828/36 601/754/36 -f 583/756/41 600/765/41 599/751/41 -f 582/758/36 598/829/36 597/759/36 -f 579/761/41 596/768/41 595/748/41 -f 585/757/40 599/751/40 602/763/40 -f 584/755/37 601/754/37 600/765/37 -f 581/762/40 595/748/40 598/766/40 -f 580/760/37 597/759/37 596/768/37 -f 607/769/41 609/771/41 605/770/41 -f 609/771/40 610/830/40 606/772/40 -f 618/773/36 616/776/36 612/774/36 -f 616/776/37 615/778/37 611/777/37 -f 615/778/41 617/780/41 613/779/41 -f 617/780/40 618/831/40 614/781/40 -f 626/782/36 624/785/36 620/783/36 -f 624/785/37 623/787/37 619/786/37 -f 623/787/41 625/789/41 621/788/41 -f 625/789/40 626/832/40 622/790/40 -f 634/791/36 632/794/36 628/792/36 -f 632/794/37 631/796/37 627/795/37 -f 631/796/41 633/798/41 629/797/41 -f 633/798/40 634/833/40 630/799/40 -f 636/800/36 638/834/36 637/801/36 -f 641/803/41 642/835/41 640/804/41 -f 644/806/40 646/836/40 645/807/40 -f 649/809/37 650/837/37 648/810/37 -f 653/812/41 654/838/41 652/813/41 -f 656/815/36 658/839/36 657/816/36 -f 661/818/37 662/840/37 660/819/37 -f 664/821/40 666/841/40 665/822/40 -o Atlas_Erector -v 0.750000 3.500000 -4.250000 -v 0.750000 3.500000 -3.750000 -v 1.250000 3.500000 -3.750000 -v 1.250000 3.500000 -4.250000 -v -1.250000 3.500000 -4.250000 -v -1.250000 3.500000 -3.750000 -v -0.750000 3.500000 -3.750000 -v -0.750000 3.500000 -4.250000 -v 0.750000 3.500000 -2.750000 -v 0.750000 3.500000 -2.250000 -v 1.250000 3.500000 -2.250000 -v 1.250000 3.500000 -2.750000 -v -1.250000 3.500000 -2.750000 -v -1.250000 3.500000 -2.250000 -v -0.750000 3.500000 -2.250000 -v -0.750000 3.500000 -2.750000 -v 0.750000 14.750000 -4.250000 -v 0.750000 14.750000 -3.750000 -v 1.250000 14.750000 -3.750000 -v 1.250000 14.750000 -4.250000 -v -1.250000 14.750000 -4.250000 -v -1.250000 14.750000 -3.750000 -v -0.750000 14.750000 -3.750000 -v -0.750000 14.750000 -4.250000 -v 0.750000 14.750000 -2.750000 -v 0.750000 14.750000 -2.250000 -v 1.250000 14.750000 -2.250000 -v 1.250000 14.750000 -2.750000 -v -1.250000 14.750000 -2.750000 -v -1.250000 14.750000 -2.250000 -v -0.750000 14.750000 -2.250000 -v -0.750000 14.750000 -2.750000 -v 0.750000 12.750000 -2.750000 -v 0.750000 12.750000 -2.250000 -v -0.750000 12.750000 -2.250000 -v -0.750000 12.750000 -2.750000 -v 0.750000 12.250000 -2.750000 -v 0.750000 12.250000 -2.250000 -v -0.750000 12.250000 -2.250000 -v -0.750000 12.250000 -2.750000 -v 0.625000 12.750000 -1.375000 -v -0.625000 12.750000 -1.375000 -v 0.625000 12.250000 -1.375000 -v -0.625000 12.250000 -1.375000 -v 0.625000 12.750000 -1.125000 -v -0.625000 12.750000 -1.125000 -v 0.625000 12.250000 -1.125000 -v -0.625000 12.250000 -1.125000 -v -1.375000 12.749999 -0.625000 -v -1.375000 12.749999 0.250000 -v -1.375000 12.249999 -0.625000 -v -1.375000 12.249999 0.250000 -v -1.125000 12.749999 -0.625000 -v -1.125000 12.749999 0.250000 -v -1.125000 12.249999 -0.625000 -v -1.125000 12.249999 0.250000 -v 1.375000 12.749999 0.250000 -v 1.375000 12.749999 -0.625000 -v 1.375000 12.249999 0.250000 -v 1.375000 12.249999 -0.625000 -v 1.125000 12.749999 0.250000 -v 1.125000 12.749999 -0.625000 -v 1.125000 12.249999 0.250000 -v 1.125000 12.249999 -0.625000 -v 0.750000 12.750000 -4.250000 -v 0.750000 12.750000 -3.750000 -v -0.750000 12.750000 -3.750000 -v -0.750000 12.750000 -4.250000 -v 0.750000 12.250000 -4.250000 -v 0.750000 12.250000 -3.750000 -v -0.750000 12.250000 -3.750000 -v -0.750000 12.250000 -4.250000 -v 0.187500 12.312500 -1.375000 -v 0.562500 12.312500 -1.375000 -v 0.187500 12.687500 -1.375000 -v 0.562500 12.687500 -1.375000 -v 0.187500 12.312500 -3.750000 -v 0.562500 12.312500 -3.750000 -v 0.187500 12.687500 -3.750000 -v 0.562500 12.687500 -3.750000 -v -0.562500 12.312500 -1.375000 -v -0.187500 12.312500 -1.375000 -v -0.562500 12.687500 -1.375000 -v -0.187500 12.687500 -1.375000 -v -0.562500 12.312500 -3.750000 -v -0.187500 12.312500 -3.750000 -v -0.562500 12.687500 -3.750000 -v -0.187500 12.687500 -3.750000 -v 0.750000 8.750000 -2.750000 -v 0.750000 8.750000 -2.250000 -v -0.750000 8.750000 -2.250000 -v -0.750000 8.750000 -2.750000 -v 0.750000 8.250000 -2.750000 -v 0.750000 8.250000 -2.250000 -v -0.750000 8.250000 -2.250000 -v -0.750000 8.250000 -2.750000 -v 0.625000 8.750000 -1.625000 -v -0.625000 8.750000 -1.625000 -v 0.625000 8.250000 -1.625000 -v -0.625000 8.250000 -1.625000 -v 0.625000 8.750000 -1.375000 -v -0.625000 8.750000 -1.375000 -v 0.625000 8.250000 -1.375000 -v -0.625000 8.250000 -1.375000 -v -1.375000 8.749999 -0.875000 -v -1.375000 8.749999 0.250000 -v -1.375000 8.249999 -0.875000 -v -1.375000 8.249999 0.250000 -v -1.125000 8.749999 -0.875000 -v -1.125000 8.749999 0.250000 -v -1.125000 8.249999 -0.875000 -v -1.125000 8.249999 0.250000 -v 1.375000 8.749999 0.250000 -v 1.375000 8.749999 -0.875000 -v 1.375000 8.249999 0.250000 -v 1.375000 8.249999 -0.875000 -v 1.125000 8.749999 0.250000 -v 1.125000 8.749999 -0.875000 -v 1.125000 8.249999 0.250000 -v 1.125000 8.249999 -0.875000 -v 0.750000 8.750000 -4.250000 -v 0.750000 8.750000 -3.750000 -v -0.750000 8.750000 -3.750000 -v -0.750000 8.750000 -4.250000 -v 0.750000 8.250000 -4.250000 -v 0.750000 8.250000 -3.750000 -v -0.750000 8.250000 -3.750000 -v -0.750000 8.250000 -4.250000 -v 0.187500 8.312500 -1.625000 -v 0.562500 8.312500 -1.625000 -v 0.187500 8.687500 -1.625000 -v 0.562500 8.687500 -1.625000 -v 0.187500 8.312500 -3.750000 -v 0.562500 8.312500 -3.750000 -v 0.187500 8.687500 -3.750000 -v 0.562500 8.687500 -3.750000 -v -0.562500 8.312500 -1.625000 -v -0.187500 8.312500 -1.625000 -v -0.562500 8.687500 -1.625000 -v -0.187500 8.687500 -1.625000 -v -0.562500 8.312500 -3.750000 -v -0.187500 8.312500 -3.750000 -v -0.562500 8.687500 -3.750000 -v -0.187500 8.687500 -3.750000 -v 0.750000 4.750000 -2.750000 -v 0.750000 4.750000 -2.250000 -v -0.750000 4.750000 -2.250000 -v -0.750000 4.750000 -2.750000 -v 0.750000 4.250000 -2.750000 -v 0.750000 4.250000 -2.250000 -v -0.750000 4.250000 -2.250000 -v -0.750000 4.250000 -2.750000 -v 0.625000 4.750000 -1.875000 -v -0.625000 4.750000 -1.875000 -v 0.625000 4.250000 -1.875000 -v -0.625000 4.250000 -1.875000 -v 0.625000 4.750000 -1.625000 -v -0.625000 4.750000 -1.625000 -v 0.625000 4.250000 -1.625000 -v -0.625000 4.250000 -1.625000 -v -1.375000 4.749999 -1.125000 -v -1.375000 4.749999 0.250000 -v -1.375000 4.249999 -1.125000 -v -1.375000 4.249999 0.250000 -v -1.125000 4.749999 -1.125000 -v -1.125000 4.749999 0.250000 -v -1.125000 4.249999 -1.125000 -v -1.125000 4.249999 0.250000 -v 1.375000 4.749999 0.250000 -v 1.375000 4.749999 -1.125000 -v 1.375000 4.249999 0.250000 -v 1.375000 4.249999 -1.125000 -v 1.125000 4.749999 0.250000 -v 1.125000 4.749999 -1.125000 -v 1.125000 4.249999 0.250000 -v 1.125000 4.249999 -1.125000 -v 0.750000 4.750000 -4.250000 -v 0.750000 4.750000 -3.750000 -v -0.750000 4.750000 -3.750000 -v -0.750000 4.750000 -4.250000 -v 0.750000 4.250000 -4.250000 -v 0.750000 4.250000 -3.750000 -v -0.750000 4.250000 -3.750000 -v -0.750000 4.250000 -4.250000 -v 0.187500 4.312500 -1.875000 -v 0.562500 4.312500 -1.875000 -v 0.187500 4.687500 -1.875000 -v 0.562500 4.687500 -1.875000 -v 0.187500 4.312500 -3.750000 -v 0.562500 4.312500 -3.750000 -v 0.187500 4.687500 -3.750000 -v 0.562500 4.687500 -3.750000 -v -0.562500 4.312500 -1.875000 -v -0.187500 4.312500 -1.875000 -v -0.562500 4.687500 -1.875000 -v -0.187500 4.687500 -1.875000 -v -0.562500 4.312500 -3.750000 -v -0.187500 4.312500 -3.750000 -v -0.562500 4.687500 -3.750000 -v -0.187500 4.687500 -3.750000 -v 0.750000 12.250000 -4.062500 -v 0.750000 11.750000 -4.062500 -v -0.750000 10.750000 -4.062500 -v -0.750000 10.250000 -4.062500 -v 0.750000 10.750000 -4.062500 -v 0.750000 10.250000 -4.062500 -v -0.750000 9.250000 -4.062500 -v -0.750000 8.750000 -4.062500 -v 0.750000 10.750000 -3.937500 -v 0.750000 10.250000 -3.937500 -v -0.750000 12.250000 -3.937500 -v -0.750000 11.750000 -3.937500 -v 0.750000 9.250000 -3.937500 -v 0.750000 8.750000 -3.937500 -v -0.750000 10.750000 -3.937500 -v -0.750000 10.250000 -3.937500 -v 0.750000 8.250000 -4.062500 -v 0.750000 7.750000 -4.062500 -v -0.750000 6.750000 -4.062500 -v -0.750000 6.250000 -4.062500 -v 0.750000 6.750000 -4.062500 -v 0.750000 6.250000 -4.062500 -v -0.750000 5.250000 -4.062500 -v -0.750000 4.750000 -4.062500 -v 0.750000 6.750000 -3.937500 -v 0.750000 6.250000 -3.937500 -v -0.750000 8.250000 -3.937500 -v -0.750000 7.750000 -3.937500 -v 0.750000 5.250000 -3.937500 -v 0.750000 4.750000 -3.937500 -v -0.750000 6.750000 -3.937500 -v -0.750000 6.250000 -3.937500 -v 0.750000 12.250000 -2.562500 -v 0.750000 11.750000 -2.562500 -v -0.750000 10.750000 -2.562500 -v -0.750000 10.250000 -2.562500 -v 0.750000 10.750000 -2.562500 -v 0.750000 10.250000 -2.562500 -v -0.750000 9.250000 -2.562500 -v -0.750000 8.750000 -2.562500 -v 0.750000 10.750000 -2.437500 -v 0.750000 10.250000 -2.437500 -v -0.750000 12.250000 -2.437500 -v -0.750000 11.750000 -2.437500 -v 0.750000 9.250000 -2.437500 -v 0.750000 8.750000 -2.437500 -v -0.750000 10.750000 -2.437500 -v -0.750000 10.250000 -2.437500 -v 0.750000 8.250000 -2.562500 -v 0.750000 7.750000 -2.562500 -v -0.750000 6.750000 -2.562500 -v -0.750000 6.250000 -2.562500 -v 0.750000 6.750000 -2.562500 -v 0.750000 6.250000 -2.562500 -v -0.750000 5.250000 -2.562500 -v -0.750000 4.750000 -2.562500 -v 0.750000 6.750000 -2.437500 -v 0.750000 6.250000 -2.437500 -v -0.750000 8.250000 -2.437500 -v -0.750000 7.750000 -2.437500 -v 0.750000 5.250000 -2.437500 -v 0.750000 4.750000 -2.437500 -v -0.750000 6.750000 -2.437500 -v -0.750000 6.250000 -2.437500 -v 0.750000 14.750000 -4.062500 -v 0.750000 14.250000 -4.062500 -v -0.750000 13.250000 -4.062500 -v -0.750000 12.750000 -4.062500 -v 0.750000 13.250000 -3.937500 -v 0.750000 12.750000 -3.937500 -v -0.750000 14.750000 -3.937500 -v -0.750000 14.250000 -3.937500 -v 0.750000 14.750000 -2.562500 -v 0.750000 14.250000 -2.562500 -v -0.750000 13.250000 -2.562500 -v -0.750000 12.750000 -2.562500 -v 0.750000 13.250000 -2.437500 -v 0.750000 12.750000 -2.437500 -v -0.750000 14.750000 -2.437500 -v -0.750000 14.250000 -2.437500 -v 1.062500 14.750000 -2.750000 -v 1.062500 14.250000 -2.750000 -v 1.062500 13.250000 -3.750000 -v 1.062500 12.750000 -3.750000 -v 0.937500 13.250000 -2.750000 -v 0.937500 12.750000 -2.750000 -v 0.937500 14.750000 -3.750000 -v 0.937500 14.250000 -3.750000 -v 1.062500 12.250000 -2.750000 -v 1.062500 11.750000 -2.750000 -v 1.062500 10.750000 -3.750000 -v 1.062500 10.250000 -3.750000 -v 0.937500 10.750000 -2.750000 -v 0.937500 10.250000 -2.750000 -v 0.937500 12.250000 -3.750000 -v 0.937500 11.750000 -3.750000 -v 1.062500 10.750000 -2.750000 -v 1.062500 10.250000 -2.750000 -v 1.062500 9.250000 -3.750000 -v 1.062500 8.750000 -3.750000 -v 0.937500 9.250000 -2.750000 -v 0.937500 8.750000 -2.750000 -v 0.937500 10.750000 -3.750000 -v 0.937500 10.250000 -3.750000 -v 1.062500 8.250000 -2.750000 -v 1.062500 7.750000 -2.750000 -v 1.062500 6.750000 -3.750000 -v 1.062500 6.250000 -3.750000 -v 0.937500 6.750000 -2.750000 -v 0.937500 6.250000 -2.750000 -v 0.937500 8.250000 -3.750000 -v 0.937500 7.750000 -3.750000 -v 1.062500 6.750000 -2.750000 -v 1.062500 6.250000 -2.750000 -v 1.062500 5.250000 -3.750000 -v 1.062500 4.750000 -3.750000 -v 0.937500 5.250000 -2.750000 -v 0.937500 4.750000 -2.750000 -v 0.937500 6.750000 -3.750000 -v 0.937500 6.250000 -3.750000 -v -0.937500 14.750000 -2.750000 -v -0.937500 14.250000 -2.750000 -v -0.937500 13.250000 -3.750000 -v -0.937500 12.750000 -3.750000 -v -1.062500 13.250000 -2.750000 -v -1.062500 12.750000 -2.750000 -v -1.062500 14.750000 -3.750000 -v -1.062500 14.250000 -3.750000 -v -0.937500 12.250000 -2.750000 -v -0.937500 11.750000 -2.750000 -v -0.937500 10.750000 -3.750000 -v -0.937500 10.250000 -3.750000 -v -1.062500 10.750000 -2.750000 -v -1.062500 10.250000 -2.750000 -v -1.062500 12.250000 -3.750000 -v -1.062500 11.750000 -3.750000 -v -0.937500 10.750000 -2.750000 -v -0.937500 10.250000 -2.750000 -v -0.937500 9.250000 -3.750000 -v -0.937500 8.750000 -3.750000 -v -1.062500 9.250000 -2.750000 -v -1.062500 8.750000 -2.750000 -v -1.062500 10.750000 -3.750000 -v -1.062500 10.250000 -3.750000 -v -0.937500 8.250000 -2.750000 -v -0.937500 7.750000 -2.750000 -v -0.937500 6.750000 -3.750000 -v -0.937500 6.250000 -3.750000 -v -1.062500 6.750000 -2.750000 -v -1.062500 6.250000 -2.750000 -v -1.062500 8.250000 -3.750000 -v -1.062500 7.750000 -3.750000 -v -0.937500 6.750000 -2.750000 -v -0.937500 6.250000 -2.750000 -v -0.937500 5.250000 -3.750000 -v -0.937500 4.750000 -3.750000 -v -1.062500 5.250000 -2.750000 -v -1.062500 4.750000 -2.750000 -v -1.062500 6.750000 -3.750000 -v -1.062500 6.250000 -3.750000 -v 0.750000 12.250000 -4.062500 -v 0.750000 11.750000 -4.062500 -v -0.750000 10.750000 -4.062500 -v -0.750000 10.250000 -4.062500 -v 0.750000 10.750000 -4.062500 -v 0.750000 10.250000 -4.062500 -v -0.750000 9.250000 -4.062500 -v -0.750000 8.750000 -4.062500 -v 0.750000 10.750000 -3.937500 -v 0.750000 10.250000 -3.937500 -v -0.750000 12.250000 -3.937500 -v -0.750000 11.750000 -3.937500 -v 0.750000 9.250000 -3.937500 -v 0.750000 8.750000 -3.937500 -v -0.750000 10.750000 -3.937500 -v -0.750000 10.250000 -3.937500 -v 0.750000 8.250000 -4.062500 -v 0.750000 7.750000 -4.062500 -v -0.750000 6.750000 -4.062500 -v -0.750000 6.250000 -4.062500 -v 0.750000 6.750000 -4.062500 -v 0.750000 6.250000 -4.062500 -v -0.750000 5.250000 -4.062500 -v -0.750000 4.750000 -4.062500 -v 0.750000 6.750000 -3.937500 -v 0.750000 6.250000 -3.937500 -v -0.750000 8.250000 -3.937500 -v -0.750000 7.750000 -3.937500 -v 0.750000 5.250000 -3.937500 -v 0.750000 4.750000 -3.937500 -v -0.750000 6.750000 -3.937500 -v -0.750000 6.250000 -3.937500 -v 0.750000 12.250000 -2.562500 -v 0.750000 11.750000 -2.562500 -v -0.750000 10.750000 -2.562500 -v -0.750000 10.250000 -2.562500 -v 0.750000 10.750000 -2.562500 -v 0.750000 10.250000 -2.562500 -v -0.750000 9.250000 -2.562500 -v -0.750000 8.750000 -2.562500 -v 0.750000 10.750000 -2.437500 -v 0.750000 10.250000 -2.437500 -v -0.750000 12.250000 -2.437500 -v -0.750000 11.750000 -2.437500 -v 0.750000 9.250000 -2.437500 -v 0.750000 8.750000 -2.437500 -v -0.750000 10.750000 -2.437500 -v -0.750000 10.250000 -2.437500 -v 0.750000 8.250000 -2.562500 -v 0.750000 7.750000 -2.562500 -v -0.750000 6.750000 -2.562500 -v -0.750000 6.250000 -2.562500 -v 0.750000 6.750000 -2.562500 -v 0.750000 6.250000 -2.562500 -v -0.750000 5.250000 -2.562500 -v -0.750000 4.750000 -2.562500 -v 0.750000 6.750000 -2.437500 -v 0.750000 6.250000 -2.437500 -v -0.750000 8.250000 -2.437500 -v -0.750000 7.750000 -2.437500 -v 0.750000 5.250000 -2.437500 -v 0.750000 4.750000 -2.437500 -v -0.750000 6.750000 -2.437500 -v -0.750000 6.250000 -2.437500 -v 0.750000 14.750000 -4.062500 -v 0.750000 14.250000 -4.062500 -v -0.750000 13.250000 -4.062500 -v -0.750000 12.750000 -4.062500 -v 0.750000 13.250000 -3.937500 -v 0.750000 12.750000 -3.937500 -v -0.750000 14.750000 -3.937500 -v -0.750000 14.250000 -3.937500 -v 0.750000 14.750000 -2.562500 -v 0.750000 14.250000 -2.562500 -v -0.750000 13.250000 -2.562500 -v -0.750000 12.750000 -2.562500 -v 0.750000 13.250000 -2.437500 -v 0.750000 12.750000 -2.437500 -v -0.750000 14.750000 -2.437500 -v -0.750000 14.250000 -2.437500 -v 1.062500 14.750000 -2.750000 -v 1.062500 14.250000 -2.750000 -v 1.062500 13.250000 -3.750000 -v 1.062500 12.750000 -3.750000 -v 0.937500 13.250000 -2.750000 -v 0.937500 12.750000 -2.750000 -v 0.937500 14.750000 -3.750000 -v 0.937500 14.250000 -3.750000 -v 1.062500 12.250000 -2.750000 -v 1.062500 11.750000 -2.750000 -v 1.062500 10.750000 -3.750000 -v 1.062500 10.250000 -3.750000 -v 0.937500 10.750000 -2.750000 -v 0.937500 10.250000 -2.750000 -v 0.937500 12.250000 -3.750000 -v 0.937500 11.750000 -3.750000 -v 1.062500 10.750000 -2.750000 -v 1.062500 10.250000 -2.750000 -v 1.062500 9.250000 -3.750000 -v 1.062500 8.750000 -3.750000 -v 0.937500 9.250000 -2.750000 -v 0.937500 8.750000 -2.750000 -v 0.937500 10.750000 -3.750000 -v 0.937500 10.250000 -3.750000 -v 1.062500 8.250000 -2.750000 -v 1.062500 7.750000 -2.750000 -v 1.062500 6.750000 -3.750000 -v 1.062500 6.250000 -3.750000 -v 0.937500 6.750000 -2.750000 -v 0.937500 6.250000 -2.750000 -v 0.937500 8.250000 -3.750000 -v 0.937500 7.750000 -3.750000 -v 1.062500 6.750000 -2.750000 -v 1.062500 6.250000 -2.750000 -v 1.062500 5.250000 -3.750000 -v 1.062500 4.750000 -3.750000 -v 0.937500 5.250000 -2.750000 -v 0.937500 4.750000 -2.750000 -v 0.937500 6.750000 -3.750000 -v 0.937500 6.250000 -3.750000 -v -0.937500 14.750000 -2.750000 -v -0.937500 14.250000 -2.750000 -v -0.937500 13.250000 -3.750000 -v -0.937500 12.750000 -3.750000 -v -1.062500 13.250000 -2.750000 -v -1.062500 12.750000 -2.750000 -v -1.062500 14.750000 -3.750000 -v -1.062500 14.250000 -3.750000 -v -0.937500 12.250000 -2.750000 -v -0.937500 11.750000 -2.750000 -v -0.937500 10.750000 -3.750000 -v -0.937500 10.250000 -3.750000 -v -1.062500 10.750000 -2.750000 -v -1.062500 10.250000 -2.750000 -v -1.062500 12.250000 -3.750000 -v -1.062500 11.750000 -3.750000 -v -0.937500 10.750000 -2.750000 -v -0.937500 10.250000 -2.750000 -v -0.937500 9.250000 -3.750000 -v -0.937500 8.750000 -3.750000 -v -1.062500 9.250000 -2.750000 -v -1.062500 8.750000 -2.750000 -v -1.062500 10.750000 -3.750000 -v -1.062500 10.250000 -3.750000 -v -0.937500 8.250000 -2.750000 -v -0.937500 7.750000 -2.750000 -v -0.937500 6.750000 -3.750000 -v -0.937500 6.250000 -3.750000 -v -1.062500 6.750000 -2.750000 -v -1.062500 6.250000 -2.750000 -v -1.062500 8.250000 -3.750000 -v -1.062500 7.750000 -3.750000 -v -0.937500 6.750000 -2.750000 -v -0.937500 6.250000 -2.750000 -v -0.937500 5.250000 -3.750000 -v -0.937500 4.750000 -3.750000 -v -1.062500 5.250000 -2.750000 -v -1.062500 4.750000 -2.750000 -v -1.062500 6.750000 -3.750000 -v -1.062500 6.250000 -3.750000 -vt 0.923077 0.032258 -vt 0.897436 -0.000000 -vt 0.923077 -0.000000 -vt 0.923077 0.032258 -vt 0.897436 -0.000000 -vt 0.923077 -0.000000 -vt 0.923077 0.032258 -vt 0.897436 -0.000000 -vt 0.923077 -0.000000 -vt 0.923077 0.032258 -vt 0.897436 -0.000000 -vt 0.923077 -0.000000 -vt 0.897436 0.790323 -vt 0.923077 0.758065 -vt 0.923077 0.790323 -vt 0.897436 0.790323 -vt 0.923077 0.758065 -vt 0.923077 0.790323 -vt 0.897436 0.790323 -vt 0.923077 0.758065 -vt 0.923077 0.790323 -vt 0.897436 0.790323 -vt 0.923077 0.758065 -vt 0.923077 0.790323 -vt 0.974359 0.032258 -vt 0.948718 0.758065 -vt 0.948718 0.032258 -vt 1.000000 0.032258 -vt 0.974359 0.758065 -vt 0.974359 0.032258 -vt 1.000000 0.032258 -vt 0.974359 0.758065 -vt 0.897436 0.758065 -vt 0.897436 0.032258 -vt 0.897436 0.758065 -vt 0.897436 0.032258 -vt 0.948718 0.032258 -vt 0.948718 0.032258 -vt 0.974359 0.032258 -vt 0.948718 0.758065 -vt 0.974359 0.032258 -vt 0.948718 0.758065 -vt 1.000000 0.032258 -vt 0.974359 0.758065 -vt 1.000000 0.032258 -vt 0.974359 0.758065 -vt 0.897436 0.758065 -vt 0.897436 0.032258 -vt 0.948718 0.032258 -vt 0.897436 0.758065 -vt 0.897436 0.032258 -vt 0.948718 0.758065 -vt 0.897436 0.854839 -vt 0.974359 0.887097 -vt 0.897436 0.887097 -vt 0.974359 0.790323 -vt 0.897436 0.822581 -vt 0.897436 0.790323 -vt 0.974359 0.822581 -vt 0.974359 0.854839 -vt 0.897436 0.919355 -vt 0.448718 0.822581 -vt 0.512821 0.854839 -vt 0.448718 0.854839 -vt 0.275641 0.919355 -vt 0.211538 0.951613 -vt 0.211538 0.919355 -vt 0.512821 0.854839 -vt 0.538462 0.903226 -vt 0.512821 0.870968 -vt 0.448718 0.870968 -vt 0.448718 0.854839 -vt 0.384615 0.854839 -vt 0.410256 0.903226 -vt 0.384615 0.903226 -vt 0.448718 0.870968 -vt 0.576923 0.903226 -vt 0.551282 0.959677 -vt 0.551282 0.903226 -vt 0.346154 0.919355 -vt 0.301282 0.951613 -vt 0.301282 0.919355 -vt 0.384615 0.951613 -vt 0.371795 0.919355 -vt 0.384615 0.919355 -vt 0.410256 0.903226 -vt 0.423077 0.959677 -vt 0.410256 0.959677 -vt 0.538462 0.903226 -vt 0.384615 0.959677 -vt 0.410256 0.959677 -vt 0.185897 0.919355 -vt 0.141026 0.951613 -vt 0.141026 0.919355 -vt 0.551282 0.959677 -vt 0.551282 0.903226 -vt 0.102564 0.919355 -vt 0.115385 0.951613 -vt 0.102564 0.951613 -vt 0.423077 0.959677 -vt 0.275641 0.951613 -vt 0.512821 0.870968 -vt 0.576923 0.854839 -vt 0.551282 0.854839 -vt 0.423077 0.903226 -vt 0.897436 0.854839 -vt 0.974359 0.887097 -vt 0.897436 0.887097 -vt 0.974359 0.790323 -vt 0.897436 0.822581 -vt 0.897436 0.790323 -vt 0.974359 0.822581 -vt 0.974359 0.854839 -vt 0.897436 0.919355 -vt 0.794872 0.846774 -vt 0.814103 0.693548 -vt 0.814103 0.846774 -vt 0.833333 0.846774 -vt 0.852564 0.693548 -vt 0.852564 0.846774 -vt 0.833333 0.693548 -vt 0.871795 0.693548 -vt 0.871795 0.846774 -vt 0.794872 0.846774 -vt 0.814103 0.693548 -vt 0.814103 0.846774 -vt 0.833333 0.846774 -vt 0.852564 0.693548 -vt 0.852564 0.846774 -vt 0.833333 0.693548 -vt 0.871795 0.693548 -vt 0.871795 0.846774 -vt 0.897436 0.854839 -vt 0.974359 0.887097 -vt 0.897436 0.887097 -vt 0.974359 0.790323 -vt 0.897436 0.822581 -vt 0.897436 0.790323 -vt 0.974359 0.822581 -vt 0.974359 0.854839 -vt 0.897436 0.919355 -vt 0.448718 0.822581 -vt 0.512821 0.854839 -vt 0.448718 0.854839 -vt 0.275641 0.919355 -vt 0.211538 0.951613 -vt 0.211538 0.919355 -vt 0.512821 0.854839 -vt 0.538462 0.903226 -vt 0.512821 0.870968 -vt 0.448718 0.870968 -vt 0.448718 0.854839 -vt 0.384615 0.854839 -vt 0.410256 0.903226 -vt 0.384615 0.903226 -vt 0.448718 0.870968 -vt 0.576923 0.903226 -vt 0.551282 0.975806 -vt 0.551282 0.903226 -vt 0.358974 0.919355 -vt 0.301282 0.951613 -vt 0.301282 0.919355 -vt 0.384615 0.951613 -vt 0.371795 0.919355 -vt 0.384615 0.919355 -vt 0.410256 0.903226 -vt 0.423077 0.975806 -vt 0.410256 0.975806 -vt 0.538462 0.903226 -vt 0.384615 0.975806 -vt 0.410256 0.975806 -vt 0.185897 0.919355 -vt 0.128205 0.951613 -vt 0.128205 0.919355 -vt 0.551282 0.975806 -vt 0.551282 0.903226 -vt 0.102564 0.919355 -vt 0.115385 0.951613 -vt 0.102564 0.951613 -vt 0.423077 0.975806 -vt 0.275641 0.951613 -vt 0.512821 0.870968 -vt 0.576923 0.854839 -vt 0.551282 0.854839 -vt 0.423077 0.903226 -vt 0.897436 0.854839 -vt 0.974359 0.887097 -vt 0.897436 0.887097 -vt 0.974359 0.790323 -vt 0.897436 0.822581 -vt 0.897436 0.790323 -vt 0.974359 0.822581 -vt 0.974359 0.854839 -vt 0.897436 0.919355 -vt 0.794872 0.830645 -vt 0.814103 0.693548 -vt 0.814103 0.830645 -vt 0.833333 0.830645 -vt 0.852564 0.693548 -vt 0.852564 0.830645 -vt 0.833333 0.693548 -vt 0.871795 0.693548 -vt 0.871795 0.830645 -vt 0.794872 0.830645 -vt 0.814103 0.693548 -vt 0.814103 0.830645 -vt 0.833333 0.830645 -vt 0.852564 0.693548 -vt 0.852564 0.830645 -vt 0.833333 0.693548 -vt 0.871795 0.693548 -vt 0.871795 0.830645 -vt 0.897436 0.854839 -vt 0.974359 0.887097 -vt 0.897436 0.887097 -vt 0.974359 0.790323 -vt 0.897436 0.822581 -vt 0.897436 0.790323 -vt 0.974359 0.822581 -vt 0.974359 0.854839 -vt 0.897436 0.919355 -vt 0.448718 0.822581 -vt 0.512821 0.854839 -vt 0.448718 0.854839 -vt 0.275641 0.919355 -vt 0.211538 0.951613 -vt 0.211538 0.919355 -vt 0.512821 0.854839 -vt 0.538462 0.903226 -vt 0.512821 0.870968 -vt 0.448718 0.870968 -vt 0.448718 0.854839 -vt 0.384615 0.854839 -vt 0.410256 0.903226 -vt 0.384615 0.903226 -vt 0.448718 0.870968 -vt 0.576923 0.903226 -vt 0.551282 0.991935 -vt 0.551282 0.903226 -vt 0.371795 0.919355 -vt 0.301282 0.951613 -vt 0.301282 0.919355 -vt 0.384615 0.951613 -vt 0.384615 0.919355 -vt 0.410256 0.903226 -vt 0.423077 0.991935 -vt 0.410256 0.991935 -vt 0.538462 0.903226 -vt 0.384615 0.991935 -vt 0.410256 0.991935 -vt 0.185897 0.919355 -vt 0.115385 0.951613 -vt 0.115385 0.919355 -vt 0.551282 0.991935 -vt 0.551282 0.903226 -vt 0.102564 0.919355 -vt 0.102564 0.951613 -vt 0.423077 0.991935 -vt 0.275641 0.951613 -vt 0.512821 0.870968 -vt 0.576923 0.854839 -vt 0.551282 0.854839 -vt 0.423077 0.903226 -vt 0.897436 0.854839 -vt 0.974359 0.887097 -vt 0.897436 0.887097 -vt 0.974359 0.790323 -vt 0.897436 0.822581 -vt 0.897436 0.790323 -vt 0.974359 0.822581 -vt 0.974359 0.854839 -vt 0.897436 0.919355 -vt 0.794872 0.814516 -vt 0.814103 0.693548 -vt 0.814103 0.814516 -vt 0.833333 0.814516 -vt 0.852564 0.693548 -vt 0.852564 0.814516 -vt 0.833333 0.693548 -vt 0.871795 0.693548 -vt 0.871795 0.814516 -vt 0.794872 0.814516 -vt 0.814103 0.693548 -vt 0.814103 0.814516 -vt 0.833333 0.814516 -vt 0.852564 0.693548 -vt 0.852564 0.814516 -vt 0.833333 0.693548 -vt 0.871795 0.693548 -vt 0.871795 0.814516 -vt 0.948718 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.790323 -vt 1.000000 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.790323 -vt 1.000000 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.790323 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.758065 -vt 0.974359 0.919355 -vt 0.512821 0.822581 -vt 0.410256 0.854839 -vt 0.576923 0.959677 -vt 0.346154 0.951613 -vt 0.371795 0.951613 -vt 0.423077 0.903226 -vt 0.538462 0.959677 -vt 0.185897 0.951613 -vt 0.538462 0.959677 -vt 0.115385 0.919355 -vt 0.974359 0.919355 -vt 0.794872 0.693548 -vt 0.794872 0.693548 -vt 0.974359 0.919355 -vt 0.512821 0.822581 -vt 0.410256 0.854839 -vt 0.576923 0.975806 -vt 0.358974 0.951613 -vt 0.371795 0.951613 -vt 0.423077 0.903226 -vt 0.538462 0.975806 -vt 0.185897 0.951613 -vt 0.538462 0.975806 -vt 0.115385 0.919355 -vt 0.974359 0.919355 -vt 0.794872 0.693548 -vt 0.794872 0.693548 -vt 0.974359 0.919355 -vt 0.512821 0.822581 -vt 0.410256 0.854839 -vt 0.576923 0.991935 -vt 0.371795 0.951613 -vt 0.423077 0.903226 -vt 0.538462 0.991935 -vt 0.185897 0.951613 -vt 0.538462 0.991935 -vt 0.974359 0.919355 -vt 0.794872 0.693548 -vt 0.794872 0.693548 -vt 1.000000 0.758065 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 1.000000 0.790323 -vt 1.000000 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.758065 -vt 0.948718 0.758065 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.758065 -vt 1.000000 0.790323 -vt 0.948718 0.758065 -vt 1.000000 0.758065 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.987179 0.758065 -vt 0.987179 0.790323 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vt 0.948718 0.758065 -vt 0.987179 0.758065 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.0000 1.0000 vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 vn -1.0000 0.0000 0.0000 -vn 0.7071 0.0000 -0.7071 -vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 1.0000 0.0000 vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +s off +f 839/1373/144 840/1374/144 841/1375/144 +f 842/1376/145 843/1377/145 844/1378/145 +f 839/1373/146 845/1379/146 846/1380/146 +f 840/1381/147 844/1382/147 841/1383/147 +f 840/1384/148 845/1379/148 842/1385/148 +f 841/1383/149 843/1377/149 839/1373/149 +f 847/1386/144 848/1387/144 849/1388/144 +f 847/1389/150 850/1390/150 851/1391/150 +f 852/1392/148 853/1393/148 854/1394/148 +f 855/1395/151 856/1396/151 852/1397/151 +f 857/1398/149 850/1390/149 855/1399/149 +f 854/1400/144 851/1401/144 857/1402/144 +f 858/1403/152 859/1404/152 860/1405/152 +f 861/1406/144 859/1407/144 862/1408/144 +f 863/1409/148 859/1404/148 864/1410/148 +f 865/1411/151 860/1405/151 863/1409/151 +f 861/1412/149 858/1403/149 865/1413/149 +f 866/1414/151 850/1415/151 867/1416/151 +f 868/1417/153 869/1418/153 870/1419/153 +f 849/1388/144 871/1420/144 847/1386/144 +f 866/1421/148 869/1418/148 849/1422/148 +f 866/1414/151 868/1417/151 870/1423/151 +f 847/1389/149 868/1417/149 867/1416/149 +f 872/1424/147 873/1425/147 874/1426/147 +f 853/1427/144 848/1387/144 851/1401/144 +f 848/1428/152 866/1421/152 849/1422/152 +f 850/1415/151 874/1426/151 856/1396/151 +f 874/1429/153 861/1412/153 865/1413/153 +f 863/1409/151 874/1426/151 865/1411/151 +f 863/1409/154 853/1393/154 856/1430/154 +f 873/1431/144 864/1432/144 861/1406/144 +f 875/1433/148 876/1434/148 877/1435/148 +f 878/1436/148 879/1437/148 880/1438/148 +f 881/1439/144 882/1440/144 883/1441/144 +f 884/1442/147 885/1443/147 886/1444/147 +f 887/1445/149 888/1446/149 889/1447/149 +f 890/1448/151 888/1446/151 891/1449/151 +f 890/1450/148 892/1451/148 893/1452/148 +f 893/1453/144 894/1454/144 887/1455/144 +f 888/1446/153 892/1451/153 891/1456/153 +f 890/1448/151 895/1457/151 889/1447/151 +f 896/1458/149 897/1459/149 898/1460/149 +f 898/1461/151 899/1462/151 900/1463/151 +f 900/1463/148 901/1464/148 902/1465/148 +f 896/1466/144 901/1467/144 903/1468/144 +f 897/1459/152 901/1464/152 899/1462/152 +f 904/1469/144 883/1441/144 905/1470/144 +f 905/1471/149 895/1472/149 906/1473/149 +f 906/1474/151 907/1475/151 908/1476/151 +f 908/1477/148 881/1478/148 904/1479/148 +f 887/1445/150 895/1472/150 883/1480/150 +f 887/1455/144 882/1440/144 893/1453/144 +f 909/1481/149 910/1482/149 911/1483/149 +f 912/1484/149 913/1485/149 914/1486/149 +f 882/1487/152 890/1450/152 893/1452/152 +f 895/1457/151 886/1444/151 907/1475/151 +f 886/1488/153 896/1458/153 898/1460/153 +f 900/1463/151 886/1444/151 898/1461/151 +f 900/1463/154 881/1478/154 907/1489/154 +f 885/1490/144 902/1491/144 896/1466/144 +f 839/1373/144 846/1380/144 840/1374/144 +f 842/1376/145 845/1379/145 843/1377/145 +f 839/1373/146 843/1377/146 845/1379/146 +f 840/1381/147 842/1492/147 844/1382/147 +f 840/1384/148 846/1380/148 845/1379/148 +f 841/1383/149 844/1382/149 843/1377/149 +f 847/1386/144 851/1401/144 848/1387/144 +f 847/1389/150 867/1416/150 850/1390/150 +f 852/1392/148 856/1430/148 853/1393/148 +f 855/1395/151 850/1415/151 856/1396/151 +f 857/1398/149 851/1391/149 850/1390/149 +f 854/1400/144 853/1427/144 851/1401/144 +f 858/1403/152 862/1493/152 859/1404/152 +f 861/1406/144 864/1432/144 859/1407/144 +f 863/1409/148 860/1405/148 859/1404/148 +f 865/1411/151 858/1494/151 860/1405/151 +f 861/1412/149 862/1493/149 858/1403/149 +f 866/1414/151 872/1424/151 850/1415/151 +f 868/1417/153 871/1495/153 869/1418/153 +f 849/1388/144 869/1496/144 871/1420/144 +f 866/1421/148 870/1419/148 869/1418/148 +f 866/1414/151 867/1416/151 868/1417/151 +f 847/1389/149 871/1495/149 868/1417/149 +f 872/1424/147 848/1497/147 873/1425/147 +f 853/1427/144 873/1431/144 848/1387/144 +f 848/1428/152 872/1498/152 866/1421/152 +f 850/1415/151 872/1424/151 874/1426/151 +f 874/1429/153 873/1499/153 861/1412/153 +f 863/1409/151 856/1396/151 874/1426/151 +f 863/1409/154 864/1410/154 853/1393/154 +f 873/1431/144 853/1427/144 864/1432/144 +f 875/1433/148 915/1500/148 876/1434/148 +f 878/1436/148 916/1501/148 879/1437/148 +f 881/1439/144 885/1490/144 882/1440/144 +f 884/1442/147 882/1502/147 885/1443/147 +f 887/1445/149 894/1503/149 888/1446/149 +f 890/1448/151 889/1447/151 888/1446/151 +f 890/1450/148 891/1456/148 892/1451/148 +f 893/1453/144 892/1504/144 894/1454/144 +f 888/1446/153 894/1503/153 892/1451/153 +f 890/1448/151 884/1442/151 895/1457/151 +f 896/1458/149 903/1505/149 897/1459/149 +f 898/1461/151 897/1506/151 899/1462/151 +f 900/1463/148 899/1462/148 901/1464/148 +f 896/1466/144 902/1491/144 901/1467/144 +f 897/1459/152 903/1505/152 901/1464/152 +f 904/1469/144 881/1439/144 883/1441/144 +f 905/1471/149 883/1480/149 895/1472/149 +f 906/1474/151 895/1457/151 907/1475/151 +f 908/1477/148 907/1489/148 881/1478/148 +f 887/1445/150 889/1447/150 895/1472/150 +f 887/1455/144 883/1441/144 882/1440/144 +f 909/1481/149 917/1507/149 910/1482/149 +f 912/1484/149 918/1508/149 913/1485/149 +f 882/1487/152 884/1509/152 890/1450/152 +f 895/1457/151 884/1442/151 886/1444/151 +f 886/1488/153 885/1510/153 896/1458/153 +f 900/1463/151 907/1475/151 886/1444/151 +f 900/1463/154 902/1465/154 881/1478/154 +f 885/1490/144 881/1439/144 902/1491/144 +o Micro_Pivot +v 0.125000 3.250000 -1.375000 +v -0.125000 3.250000 -1.625000 +v -0.125000 3.250000 -1.375000 +v 0.125000 1.250000 -1.625000 +v 0.125000 1.250000 -1.375000 +v -0.125000 1.250000 -1.375000 +v -0.125000 1.250000 -1.625000 +v 0.125000 3.250000 -1.625000 +v -0.062500 3.250000 -1.562500 +v 0.062500 4.250000 -1.562500 +v 0.062500 3.250000 -1.562500 +v 0.062500 3.250000 -1.437500 +v -0.062500 4.250000 -1.437500 +v -0.062500 3.250000 -1.437500 +v 0.062500 4.250000 -1.437500 +v -0.062500 4.250000 -1.562500 +vt 0.755556 0.310345 +vt 0.777778 0.275862 +vt 0.777778 0.310345 +vt 0.844444 -0.000000 +vt 0.822222 0.275862 +vt 0.822222 -0.000000 +vt 0.800000 -0.000000 +vt 0.777778 -0.000000 +vt 0.755556 0.275862 +vt 0.755556 -0.000000 +vt 0.800000 0.275862 +vt 0.788889 0.275862 +vt 0.777778 0.413793 +vt 0.777778 0.275862 +vt 0.811111 0.275862 +vt 0.800000 0.413793 +vt 0.800000 0.275862 +vt 0.822222 0.275862 +vt 0.811111 0.413793 +vt 0.788889 0.413793 +vt 0.844444 0.275862 +vt 0.822222 0.413793 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +s off +f 919/1511/155 920/1512/155 921/1513/155 +f 922/1514/156 919/1515/156 923/1516/156 +f 924/1517/157 920/1512/157 925/1518/157 +f 925/1518/158 926/1519/158 922/1520/158 +f 923/1516/159 921/1521/159 924/1517/159 +f 927/1522/158 928/1523/158 929/1524/158 +f 930/1525/159 931/1526/159 932/1527/159 +f 929/1528/156 933/1529/156 930/1525/156 +f 932/1527/157 934/1530/157 927/1522/157 +f 919/1511/155 926/1519/155 920/1512/155 +f 922/1514/156 926/1531/156 919/1515/156 +f 924/1517/157 921/1521/157 920/1512/157 +f 925/1518/158 920/1512/158 926/1519/158 +f 923/1516/159 919/1515/159 921/1521/159 +f 927/1522/158 934/1530/158 928/1523/158 +f 930/1525/159 933/1529/159 931/1526/159 +f 929/1528/156 928/1532/156 933/1529/156 +f 932/1527/157 931/1526/157 934/1530/157 +o Micro_Rope +v -0.187500 5.250000 0.125000 +v -0.275888 5.213388 1.375000 +v -0.187500 5.250000 1.375000 +v -0.099112 5.213388 0.125000 +v -0.099112 5.213388 1.375000 +v -0.099112 5.036612 0.125000 +v -0.062500 5.125000 1.375000 +v -0.099112 5.036612 1.375000 +v -0.275888 5.036612 0.125000 +v -0.187500 5.000000 1.375000 +v -0.275888 5.036612 1.375000 +v -0.275888 5.213388 0.125000 +v -0.312500 5.125000 1.375000 +v -0.062500 5.125000 0.125000 +v -0.187500 5.000000 0.125000 +v -0.312500 5.125000 0.125000 +v 0.187500 4.250000 0.125000 +v 0.099112 4.213388 1.375000 +v 0.187500 4.250000 1.375000 +v 0.275888 4.213388 0.125000 +v 0.275888 4.213388 1.375000 +v 0.275888 4.036612 0.125000 +v 0.312500 4.125000 1.375000 +v 0.275888 4.036612 1.375000 +v 0.099112 4.036612 0.125000 +v 0.187500 4.000000 1.375000 +v 0.099112 4.036612 1.375000 +v 0.099112 4.213388 0.125000 +v 0.062500 4.125000 1.375000 +v 0.312500 4.125000 0.125000 +v 0.187500 4.000000 0.125000 +v 0.062500 4.125000 0.125000 +vt 0.711111 0.896552 +vt 0.700000 0.724138 +vt 0.711111 0.724138 +vt 0.722222 0.896552 +vt 0.722222 0.724138 +vt 0.744444 0.896552 +vt 0.733333 0.724138 +vt 0.744444 0.724138 +vt 0.677778 0.896552 +vt 0.666667 0.724138 +vt 0.677778 0.724138 +vt 0.700000 0.896552 +vt 0.688889 0.724138 +vt 0.733333 0.896552 +vt 0.755556 0.896552 +vt 0.755556 0.724138 +vt 0.688889 0.896552 +vt 0.711111 0.896552 +vt 0.700000 0.724138 +vt 0.711111 0.724138 +vt 0.722222 0.896552 +vt 0.722222 0.724138 +vt 0.744444 0.896552 +vt 0.733333 0.724138 +vt 0.744444 0.724138 +vt 0.677778 0.896552 +vt 0.666667 0.724138 +vt 0.677778 0.724138 +vt 0.700000 0.896552 +vt 0.688889 0.724138 +vt 0.733333 0.896552 +vt 0.755556 0.896552 +vt 0.755556 0.724138 +vt 0.688889 0.896552 +vt 0.666667 0.896552 +vt 0.666667 0.896552 +vn -0.0000 1.0000 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 1.0000 0.0000 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +s 1 +f 935/1533/160 936/1534/161 937/1535/160 +f 938/1536/162 937/1535/160 939/1537/162 +f 940/1538/163 941/1539/164 942/1540/163 +f 943/1541/165 944/1542/166 945/1543/165 +f 946/1544/161 947/1545/167 936/1534/161 +f 948/1546/164 939/1537/162 941/1539/164 +f 949/1547/166 942/1540/163 944/1548/166 +f 950/1549/167 945/1543/165 947/1545/167 +f 951/1550/160 952/1551/161 953/1552/160 +f 954/1553/162 953/1552/160 955/1554/162 +f 956/1555/163 957/1556/164 958/1557/163 +f 959/1558/165 960/1559/166 961/1560/165 +f 962/1561/161 963/1562/167 952/1551/161 +f 964/1563/164 955/1554/162 957/1556/164 +f 965/1564/166 958/1557/163 960/1565/166 +f 966/1566/167 961/1560/165 963/1562/167 +f 935/1533/160 946/1544/161 936/1534/161 +f 938/1536/162 935/1533/160 937/1535/160 +f 940/1538/163 948/1546/164 941/1539/164 +f 943/1541/165 949/1567/166 944/1542/166 +f 946/1544/161 950/1549/167 947/1545/167 +f 948/1546/164 938/1536/162 939/1537/162 +f 949/1547/166 940/1538/163 942/1540/163 +f 950/1549/167 943/1541/165 945/1543/165 +f 951/1550/160 962/1561/161 952/1551/161 +f 954/1553/162 951/1550/160 953/1552/160 +f 956/1555/163 964/1563/164 957/1556/164 +f 959/1558/165 965/1568/166 960/1559/166 +f 962/1561/161 966/1566/167 963/1562/167 +f 964/1563/164 954/1553/162 955/1554/162 +f 965/1564/166 956/1555/163 958/1557/163 +f 966/1566/167 959/1558/165 961/1560/165 +o Strong_Erector +v 0.250000 3.500000 -3.250000 +v 0.750000 3.500000 -2.750000 +v 0.250000 3.500000 -2.750000 +v -0.750000 3.500000 -3.250000 +v -0.250000 3.500000 -2.750000 +v -0.750000 3.500000 -2.750000 +v 0.750000 10.000000 -2.750000 +v 0.250000 10.000000 -3.250000 +v 0.250000 10.000000 -2.750000 +v -0.250000 10.000000 -2.750000 +v -0.750000 10.000000 -3.250000 +v -0.750000 10.000000 -2.750000 +v -0.250000 3.500000 -3.250000 +v -0.250000 10.000000 -3.250000 +v 0.750000 3.500000 -3.250000 +v 0.750000 10.000000 -3.250000 +v 0.250000 9.000000 -3.500000 +v -0.250000 9.000000 -1.000000 +v 0.250000 9.000000 -1.000000 +v -0.250000 8.500000 -1.000000 +v 0.250000 8.500000 -3.500000 +v 0.250000 8.500000 -1.000000 +v 0.375000 9.125000 -1.000000 +v -0.250000 9.000000 -3.500000 +v -0.250000 8.500000 -3.500000 +v -0.375000 8.375000 -1.000000 +v -0.375000 9.125000 -0.750000 +v -0.375000 9.125000 -1.000000 +v 0.375000 8.375000 -1.000000 +v 0.375000 8.375000 -0.750000 +v 0.375000 9.125000 -0.750000 +v -0.375000 8.375000 -0.750000 +v 0.375000 3.875000 -1.000000 +v -0.375000 3.875000 -0.750000 +v -0.375000 3.875000 -1.000000 +v 0.375000 4.625000 -1.000000 +v 0.375000 3.875000 -0.750000 +v -0.375000 4.625000 -1.000000 +v 0.375000 4.625000 -0.750000 +v -0.375000 4.625000 -0.750000 +v 0.250000 4.000000 -1.000000 +v -0.250000 4.000000 -1.000000 +v 0.250000 4.500000 -1.000000 +v -0.250000 4.500000 -1.000000 +v 0.250000 4.000000 -3.500000 +v 0.250000 4.500000 -3.500000 +v -0.250000 4.000000 -3.500000 +v -0.250000 4.500000 -3.500000 +v 0.750000 6.500000 -1.250000 +v 0.250000 6.500000 -2.750000 +v 0.750000 6.500000 -2.750000 +v -0.250000 7.000000 -1.250000 +v -0.250000 6.500000 -2.750000 +v -0.250000 7.000000 -2.750000 +v 0.250000 7.000000 -2.750000 +v 0.750000 7.000000 -1.250000 +v 0.750000 7.000000 -2.750000 +v 0.250000 6.500000 -1.250000 +v -0.750000 6.500000 -1.250000 +v -0.750000 7.000000 -2.750000 +v -0.750000 6.500000 -2.750000 +v -0.250000 6.500000 -1.250000 +v -0.750000 7.000000 -1.250000 +v 0.750000 6.500000 -1.250000 +v -0.750000 6.500000 -1.250000 +v 0.750000 6.500000 -0.750000 +v -0.750000 7.000000 -0.750000 +v -0.750000 6.500000 -0.750000 +v 0.750000 7.000000 -0.750000 +v 0.750000 7.000000 -1.250000 +v 1.250000 7.000000 0.750000 +v 1.250000 7.000000 -0.750000 +v -1.250000 6.500000 0.750000 +v -1.250000 6.500000 -0.750000 +v 1.250000 6.500000 -0.750000 +v -1.250000 7.000000 -0.750000 +v 0.750000 6.500000 0.750000 +v 0.750000 7.000000 0.750000 +v -0.750000 7.000000 0.750000 +v -0.750000 6.500000 0.750000 +v -1.250000 7.000000 0.750000 +v 1.250000 6.500000 0.750000 +v 0.250000 7.000000 -1.250000 +v -0.750000 7.000000 -1.250000 +vt 0.820513 0.269663 +vt 0.794872 0.224719 +vt 0.820513 0.224719 +vt 0.820513 0.269663 +vt 0.794872 0.224719 +vt 0.820513 0.224719 +vt 0.794872 0.898876 +vt 0.820513 0.853933 +vt 0.820513 0.898876 +vt 0.794872 0.898876 +vt 0.820513 0.853933 +vt 0.820513 0.898876 +vt 0.897436 0.269663 +vt 0.871795 0.853933 +vt 0.871795 0.269663 +vt 0.794872 0.853933 +vt 0.794872 0.269663 +vt 0.897436 0.269663 +vt 0.871795 0.853933 +vt 0.871795 0.269663 +vt 0.794872 0.853933 +vt 0.794872 0.269663 +vt 0.846154 0.269663 +vt 0.846154 0.853933 +vt 0.846154 0.269663 +vt 0.846154 0.853933 +vt 0.544872 0.921348 +vt 0.416667 0.966292 +vt 0.416667 0.921348 +vt 0.416667 0.921348 +vt 0.544872 0.966292 +vt 0.416667 0.966292 +vt 0.410256 0.910112 +vt 0.544872 0.921348 +vt 0.416667 0.966292 +vt 0.416667 0.921348 +vt 0.570513 0.966292 +vt 0.544872 0.966292 +vt 0.416667 0.966292 +vt 0.544872 0.921348 +vt 0.544872 0.966292 +vt 0.410256 0.977528 +vt 0.397436 0.910112 +vt 0.410256 0.910112 +vt 0.410256 0.910112 +vt 0.416667 0.921348 +vt 0.410256 0.910112 +vt 0.397436 0.977528 +vt 0.358974 0.910112 +vt 0.397436 0.910112 +vt 0.410256 0.977528 +vt 0.410256 0.977528 +vt 0.397436 0.910112 +vt 0.410256 0.977528 +vt 0.397436 0.910112 +vt 0.410256 0.977528 +vt 0.397436 0.910112 +vt 0.410256 0.910112 +vt 0.410256 0.977528 +vt 0.397436 0.910112 +vt 0.410256 0.910112 +vt 0.410256 0.977528 +vt 0.397436 0.910112 +vt 0.410256 0.910112 +vt 0.397436 0.977528 +vt 0.358974 0.910112 +vt 0.416667 0.966292 +vt 0.416667 0.921348 +vt 0.416667 0.966292 +vt 0.416667 0.921348 +vt 0.416667 0.966292 +vt 0.410256 0.910112 +vt 0.416667 0.921348 +vt 0.410256 0.977528 +vt 0.397436 0.910112 +vt 0.544872 0.921348 +vt 0.544872 0.966292 +vt 0.544872 0.921348 +vt 0.570513 0.966292 +vt 0.544872 0.966292 +vt 0.544872 0.921348 +vt 0.416667 0.966292 +vt 0.416667 0.921348 +vt 0.544872 0.966292 +vt 1.000000 0.134831 +vt 0.974359 -0.000000 +vt 1.000000 -0.000000 +vt 0.923077 0.134831 +vt 0.897436 -0.000000 +vt 0.923077 0.000000 +vt 0.948718 -0.000000 +vt 0.923077 0.134831 +vt 0.923077 0.000000 +vt 0.974359 0.134831 +vt 0.974359 0.134831 +vt 0.948718 -0.000000 +vt 0.974359 -0.000000 +vt 1.000000 0.134831 +vt 1.000000 -0.000000 +vt 0.897436 -0.000000 +vt 0.948718 0.494382 +vt 0.974359 0.359551 +vt 0.974359 0.494382 +vt 0.897436 0.359551 +vt 0.923077 0.494382 +vt 0.897436 0.494382 +vt 0.923077 0.359551 +vt 0.948718 0.359551 +vt 0.923077 0.314607 +vt 0.948718 0.179775 +vt 0.948718 0.314607 +vt 1.000000 0.494382 +vt 1.000000 0.539326 +vt 0.974359 0.674157 +vt 0.974359 0.539326 +vt 1.000000 0.359551 +vt 1.000000 0.314607 +vt 0.923077 0.314607 +vt 1.000000 0.539326 +vt 0.923077 0.539326 +vt 0.974359 0.134831 +vt 0.948718 0.134831 +vt 0.948718 0.719101 +vt 0.974359 0.719101 +vt 0.897436 0.314607 +vt 0.923077 0.179775 +vt 0.948718 0.539326 +vt 0.923077 0.674157 +vt 0.923077 0.539326 +vt 0.948718 0.674157 +vt 0.974359 0.314607 +vt 1.000000 0.179775 +vt 1.000000 0.314607 +vt 0.974359 0.179775 +vt 0.897436 0.674157 +vt 0.897436 0.539326 +vt 0.897436 0.853933 +vt 0.897436 0.853933 +vt 0.544872 0.921348 +vt 0.544872 0.966292 +vt 0.570513 0.921348 +vt 0.397436 0.977528 +vt 0.358974 0.977528 +vt 0.397436 0.977528 +vt 0.397436 0.977528 +vt 0.397436 0.977528 +vt 0.397436 0.977528 +vt 0.358974 0.977528 +vt 0.397436 0.977528 +vt 0.570513 0.921348 +vt 0.544872 0.966292 +vt 0.544872 0.921348 +vt 0.897436 0.134831 +vt 0.948718 0.134831 +vt 0.948718 0.134831 +vt 0.897436 0.134831 +vt 1.000000 0.674157 +vt 0.897436 0.179775 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.7071 0.0000 -0.7071 vn -0.7071 0.0000 -0.7071 s off -f 667/842/42 669/843/42 668/844/42 -f 671/845/42 673/846/42 672/847/42 -f 675/848/42 677/849/42 676/850/42 -f 679/851/42 681/852/42 680/853/42 -f 685/854/43 683/855/43 684/856/43 -f 689/857/43 687/858/43 688/859/43 -f 693/860/43 691/861/43 692/862/43 -f 697/863/43 695/864/43 696/865/43 -f 677/866/44 692/867/44 676/868/44 -f 670/869/45 685/870/45 669/871/45 -f 678/872/45 693/873/45 677/866/45 -f 667/842/46 686/874/46 670/875/46 -f 675/848/46 694/876/46 678/877/46 -f 672/878/47 687/858/47 671/845/47 -f 680/879/47 695/864/47 679/851/47 -f 673/880/44 688/881/44 672/878/44 -f 681/882/44 696/883/44 680/879/44 -f 674/884/45 689/885/45 673/880/45 -f 682/886/45 697/887/45 681/882/45 -f 671/845/46 690/888/46 674/889/46 -f 668/890/47 683/855/47 667/842/47 -f 679/851/46 698/891/46 682/892/46 -f 676/868/47 691/861/47 675/848/47 -f 669/871/44 684/893/44 668/890/44 -f 699/894/43 701/895/43 700/896/43 -f 705/897/42 703/898/42 704/899/42 -f 699/894/46 706/900/46 702/901/46 -f 701/895/44 704/902/44 700/896/44 -f 709/903/46 708/904/46 707/905/46 -f 712/906/44 713/907/44 711/908/44 -f 709/909/42 730/910/42 713/911/42 -f 709/909/42 714/912/42 710/913/42 -f 709/914/48 724/915/48 726/916/48 -f 708/904/43 711/917/43 707/905/43 -f 717/918/47 716/919/47 715/920/47 -f 720/921/45 721/922/45 719/923/45 -f 718/924/44 720/925/44 716/926/44 -f 717/927/42 722/928/42 718/929/42 -f 711/917/43 724/915/43 707/905/43 -f 716/919/43 719/930/43 715/920/43 -f 725/931/45 724/915/45 723/932/45 -f 728/933/47 729/934/47 727/935/47 -f 713/907/49 728/933/49 711/908/49 -f 725/936/42 730/910/42 726/937/42 -f 723/938/44 729/939/44 725/940/44 -f 724/915/43 727/941/43 723/932/43 -f 714/942/50 719/923/50 721/922/50 -f 708/904/43 719/930/43 712/943/43 -f 710/944/51 715/920/51 708/945/51 -f 721/946/42 710/913/42 714/912/42 -f 731/947/43 733/948/43 732/949/43 -f 737/950/42 735/951/42 736/952/42 -f 731/947/46 738/953/46 734/954/46 -f 733/948/44 736/955/44 732/949/44 -f 740/956/45 746/957/45 742/958/45 -f 741/959/47 743/960/47 739/961/47 -f 742/958/43 745/962/43 741/959/43 -f 739/961/42 744/963/42 740/964/42 -f 748/965/45 754/966/45 750/967/45 -f 749/968/47 751/969/47 747/970/47 -f 750/967/43 753/971/43 749/968/43 -f 747/970/42 752/972/42 748/973/42 -f 755/974/43 757/975/43 756/976/43 -f 761/977/42 759/978/42 760/979/42 -f 755/974/46 762/980/46 758/981/46 -f 757/975/44 760/982/44 756/976/44 -f 765/983/46 764/984/46 763/985/46 -f 768/986/44 769/987/44 767/988/44 -f 765/989/42 786/990/42 769/991/42 -f 765/989/42 770/992/42 766/993/42 -f 765/994/48 780/995/48 782/996/48 -f 764/984/43 767/997/43 763/985/43 -f 773/998/47 772/999/47 771/1000/47 -f 776/1001/45 777/1002/45 775/1003/45 -f 774/1004/44 776/1005/44 772/1006/44 -f 773/1007/42 778/1008/42 774/1009/42 -f 767/997/43 780/995/43 763/985/43 -f 772/999/43 775/1010/43 771/1000/43 -f 781/1011/45 780/995/45 779/1012/45 -f 784/1013/47 785/1014/47 783/1015/47 -f 769/987/49 784/1013/49 767/988/49 -f 781/1016/42 786/990/42 782/1017/42 -f 779/1018/44 785/1019/44 781/1020/44 -f 780/995/43 783/1021/43 779/1012/43 -f 770/1022/50 775/1003/50 777/1002/50 -f 764/984/43 775/1010/43 768/1023/43 -f 766/1024/51 771/1000/51 764/1025/51 -f 777/1026/42 766/993/42 770/992/42 -f 787/1027/43 789/1028/43 788/1029/43 -f 793/1030/42 791/1031/42 792/1032/42 -f 787/1027/46 794/1033/46 790/1034/46 -f 789/1028/44 792/1035/44 788/1029/44 -f 796/1036/45 802/1037/45 798/1038/45 -f 797/1039/47 799/1040/47 795/1041/47 -f 798/1038/43 801/1042/43 797/1039/43 -f 795/1041/42 800/1043/42 796/1044/42 -f 804/1045/45 810/1046/45 806/1047/45 -f 805/1048/47 807/1049/47 803/1050/47 -f 806/1047/43 809/1051/43 805/1048/43 -f 803/1050/42 808/1052/42 804/1053/42 -f 811/1054/43 813/1055/43 812/1056/43 -f 817/1057/42 815/1058/42 816/1059/42 -f 811/1054/46 818/1060/46 814/1061/46 -f 813/1055/44 816/1062/44 812/1056/44 -f 821/1063/46 820/1064/46 819/1065/46 -f 824/1066/44 825/1067/44 823/1068/44 -f 821/1069/42 842/1070/42 825/1071/42 -f 821/1069/42 826/1072/42 822/1073/42 -f 821/1074/48 836/1075/48 838/1076/48 -f 820/1064/43 823/1077/43 819/1065/43 -f 829/1078/47 828/1079/47 827/1080/47 -f 832/1081/45 833/1082/45 831/1083/45 -f 830/1084/44 832/1081/44 828/1085/44 -f 829/1086/42 834/1087/42 830/1088/42 -f 823/1077/43 836/1075/43 819/1065/43 -f 828/1079/43 831/1089/43 827/1080/43 -f 837/1090/45 836/1075/45 835/1091/45 -f 840/1092/47 841/1093/47 839/1094/47 -f 825/1067/49 840/1092/49 823/1068/49 -f 837/1095/42 842/1070/42 838/1096/42 -f 835/1097/44 841/1093/44 837/1098/44 -f 836/1075/43 839/1099/43 835/1091/43 -f 826/1100/50 831/1083/50 833/1082/50 -f 820/1064/43 831/1089/43 824/1101/43 -f 822/1102/51 827/1080/51 820/1103/51 -f 833/1104/42 822/1073/42 826/1072/42 -f 843/1105/43 845/1106/43 844/1107/43 -f 849/1108/42 847/1109/42 848/1110/42 -f 843/1105/46 850/1111/46 846/1112/46 -f 845/1106/44 848/1113/44 844/1107/44 -f 852/1114/45 858/1115/45 854/1116/45 -f 853/1117/47 855/1118/47 851/1119/47 -f 854/1116/43 857/1120/43 853/1117/43 -f 851/1119/42 856/1121/42 852/1122/42 -f 860/1123/45 866/1124/45 862/1125/45 -f 861/1126/47 863/1127/47 859/1128/47 -f 862/1125/43 865/1129/43 861/1126/43 -f 859/1128/42 864/1130/42 860/1131/42 -f 868/1132/46 869/1133/46 867/1134/46 -f 872/1135/46 873/1136/46 871/1137/46 -f 875/1138/46 878/1139/46 877/1140/46 -f 879/1141/46 882/1142/46 881/1143/46 -f 884/1144/46 885/1145/46 883/1146/46 -f 888/1147/46 889/1148/46 887/1149/46 -f 891/1150/46 894/1151/46 893/1152/46 -f 895/1153/46 898/1154/46 897/1155/46 -f 901/1156/44 900/1157/44 899/1158/44 -f 905/1159/44 904/1160/44 903/1161/44 -f 907/1162/44 910/1163/44 908/1164/44 -f 911/1165/44 914/1166/44 912/1167/44 -f 917/1168/44 916/1169/44 915/1170/44 -f 921/1171/44 920/1172/44 919/1173/44 -f 923/1174/44 926/1175/44 924/1176/44 -f 927/1177/44 930/1178/44 928/1179/44 -f 932/1180/46 933/1181/46 931/1182/46 -f 935/1183/46 938/1184/46 937/1185/46 -f 941/1186/44 940/1187/44 939/1188/44 -f 943/1189/44 946/1190/44 944/1191/44 -f 948/1192/45 949/1193/45 947/1194/45 -f 951/1195/45 954/1196/45 953/1197/45 -f 956/1198/45 957/1199/45 955/1200/45 -f 959/1201/45 962/1202/45 961/1203/45 -f 964/1204/45 965/1205/45 963/1206/45 -f 967/1207/45 970/1208/45 969/1209/45 -f 972/1210/45 973/1211/45 971/1212/45 -f 975/1213/45 978/1214/45 977/1215/45 -f 980/1216/45 981/1217/45 979/1218/45 -f 983/1219/45 986/1220/45 985/1221/45 -f 989/1222/47 988/1223/47 987/1224/47 -f 991/1225/47 994/1226/47 992/1227/47 -f 997/1228/47 996/1229/47 995/1230/47 -f 999/1231/47 1002/1232/47 1000/1233/47 -f 1005/1234/47 1004/1235/47 1003/1236/47 -f 1007/1237/47 1010/1238/47 1008/1239/47 -f 1013/1240/47 1012/1241/47 1011/1242/47 -f 1015/1243/47 1018/1244/47 1016/1245/47 -f 1021/1246/47 1020/1247/47 1019/1248/47 -f 1023/1249/47 1026/1250/47 1024/1251/47 -f 1029/1252/44 1028/1253/44 1027/1254/44 -f 1033/1255/44 1032/1256/44 1031/1257/44 -f 1035/1258/44 1038/1259/44 1036/1260/44 -f 1039/1261/44 1042/1262/44 1040/1263/44 -f 1045/1264/44 1044/1265/44 1043/1266/44 -f 1049/1267/44 1048/1268/44 1047/1269/44 -f 1051/1270/44 1054/1271/44 1052/1272/44 -f 1055/1273/44 1058/1274/44 1056/1275/44 -f 1060/1276/46 1061/1277/46 1059/1278/46 -f 1064/1279/46 1065/1280/46 1063/1281/46 -f 1067/1282/46 1070/1283/46 1069/1284/46 -f 1071/1285/46 1074/1286/46 1073/1287/46 -f 1076/1288/46 1077/1289/46 1075/1290/46 -f 1080/1291/46 1081/1292/46 1079/1293/46 -f 1083/1294/46 1086/1295/46 1085/1296/46 -f 1087/1297/46 1090/1298/46 1089/1299/46 -f 1093/1300/44 1092/1301/44 1091/1302/44 -f 1095/1303/44 1098/1304/44 1096/1305/44 -f 1100/1306/46 1101/1307/46 1099/1308/46 -f 1103/1309/46 1106/1310/46 1105/1311/46 -f 1109/1312/47 1108/1313/47 1107/1314/47 -f 1111/1315/47 1114/1316/47 1112/1317/47 -f 1117/1318/47 1116/1319/47 1115/1320/47 -f 1119/1321/47 1122/1322/47 1120/1323/47 -f 1125/1324/47 1124/1325/47 1123/1326/47 -f 1127/1327/47 1130/1328/47 1128/1329/47 -f 1133/1330/47 1132/1331/47 1131/1332/47 -f 1135/1333/47 1138/1334/47 1136/1335/47 -f 1141/1336/47 1140/1337/47 1139/1338/47 -f 1143/1339/47 1146/1340/47 1144/1341/47 -f 1148/1342/45 1149/1343/45 1147/1344/45 -f 1151/1345/45 1154/1346/45 1153/1347/45 -f 1156/1348/45 1157/1349/45 1155/1350/45 -f 1159/1351/45 1162/1352/45 1161/1353/45 -f 1164/1354/45 1165/1355/45 1163/1356/45 -f 1167/1357/45 1170/1358/45 1169/1359/45 -f 1172/1360/45 1173/1361/45 1171/1362/45 -f 1175/1363/45 1178/1364/45 1177/1365/45 -f 1180/1366/45 1181/1367/45 1179/1368/45 -f 1183/1369/45 1186/1370/45 1185/1371/45 -f 667/842/42 670/875/42 669/843/42 -f 671/845/42 674/889/42 673/846/42 -f 675/848/42 678/877/42 677/849/42 -f 679/851/42 682/892/42 681/852/42 -f 685/854/43 686/874/43 683/855/43 -f 689/857/43 690/888/43 687/858/43 -f 693/860/43 694/876/43 691/861/43 -f 697/863/43 698/891/43 695/864/43 -f 677/866/44 693/873/44 692/867/44 -f 670/869/45 686/1372/45 685/870/45 -f 678/872/45 694/1373/45 693/873/45 -f 667/842/46 683/855/46 686/874/46 -f 675/848/46 691/861/46 694/876/46 -f 672/878/47 688/881/47 687/858/47 -f 680/879/47 696/883/47 695/864/47 -f 673/880/44 689/885/44 688/881/44 -f 681/882/44 697/887/44 696/883/44 -f 674/884/45 690/1374/45 689/885/45 -f 682/886/45 698/1375/45 697/887/45 -f 671/845/46 687/858/46 690/888/46 -f 668/890/47 684/893/47 683/855/47 -f 679/851/46 695/864/46 698/891/46 -f 676/868/47 692/867/47 691/861/47 -f 669/871/44 685/870/44 684/893/44 -f 699/894/43 702/901/43 701/895/43 -f 705/897/42 706/900/42 703/898/42 -f 699/894/46 703/898/46 706/900/46 -f 701/895/44 705/1376/44 704/902/44 -f 709/903/46 710/1377/46 708/904/46 -f 712/906/44 714/942/44 713/907/44 -f 709/909/42 726/937/42 730/910/42 -f 709/909/42 713/911/42 714/912/42 -f 709/914/48 707/1378/48 724/915/48 -f 708/904/43 712/943/43 711/917/43 -f 717/918/47 718/1379/47 716/919/47 -f 720/921/45 722/1380/45 721/922/45 -f 718/924/44 722/1381/44 720/925/44 -f 717/927/42 721/946/42 722/928/42 -f 711/917/43 728/1382/43 724/915/43 -f 716/919/43 720/1383/43 719/930/43 -f 725/931/45 726/916/45 724/915/45 -f 728/933/47 730/1384/47 729/934/47 -f 713/907/49 730/1384/49 728/933/49 -f 725/936/42 729/1385/42 730/910/42 -f 723/938/44 727/1386/44 729/939/44 -f 724/915/43 728/1382/43 727/941/43 -f 714/942/50 712/906/50 719/923/50 -f 708/904/43 715/920/43 719/930/43 -f 710/944/51 717/918/51 715/920/51 -f 721/946/42 717/927/42 710/913/42 -f 731/947/43 734/954/43 733/948/43 -f 737/950/42 738/953/42 735/951/42 -f 731/947/46 735/951/46 738/953/46 -f 733/948/44 737/1387/44 736/955/44 -f 740/956/45 744/1388/45 746/957/45 -f 741/959/47 745/962/47 743/960/47 -f 742/958/43 746/957/43 745/962/43 -f 739/961/42 743/960/42 744/963/42 -f 748/965/45 752/1389/45 754/966/45 -f 749/968/47 753/971/47 751/969/47 -f 750/967/43 754/966/43 753/971/43 -f 747/970/42 751/969/42 752/972/42 -f 755/974/43 758/981/43 757/975/43 -f 761/977/42 762/980/42 759/978/42 -f 755/974/46 759/978/46 762/980/46 -f 757/975/44 761/1390/44 760/982/44 -f 765/983/46 766/1391/46 764/984/46 -f 768/986/44 770/1022/44 769/987/44 -f 765/989/42 782/1017/42 786/990/42 -f 765/989/42 769/991/42 770/992/42 -f 765/994/48 763/1392/48 780/995/48 -f 764/984/43 768/1023/43 767/997/43 -f 773/998/47 774/1393/47 772/999/47 -f 776/1001/45 778/1394/45 777/1002/45 -f 774/1004/44 778/1395/44 776/1005/44 -f 773/1007/42 777/1026/42 778/1008/42 -f 767/997/43 784/1396/43 780/995/43 -f 772/999/43 776/1397/43 775/1010/43 -f 781/1011/45 782/996/45 780/995/45 -f 784/1013/47 786/1398/47 785/1014/47 -f 769/987/49 786/1398/49 784/1013/49 -f 781/1016/42 785/1399/42 786/990/42 -f 779/1018/44 783/1400/44 785/1019/44 -f 780/995/43 784/1396/43 783/1021/43 -f 770/1022/50 768/986/50 775/1003/50 -f 764/984/43 771/1000/43 775/1010/43 -f 766/1024/51 773/998/51 771/1000/51 -f 777/1026/42 773/1007/42 766/993/42 -f 787/1027/43 790/1034/43 789/1028/43 -f 793/1030/42 794/1033/42 791/1031/42 -f 787/1027/46 791/1031/46 794/1033/46 -f 789/1028/44 793/1401/44 792/1035/44 -f 796/1036/45 800/1402/45 802/1037/45 -f 797/1039/47 801/1042/47 799/1040/47 -f 798/1038/43 802/1037/43 801/1042/43 -f 795/1041/42 799/1040/42 800/1043/42 -f 804/1045/45 808/1403/45 810/1046/45 -f 805/1048/47 809/1051/47 807/1049/47 -f 806/1047/43 810/1046/43 809/1051/43 -f 803/1050/42 807/1049/42 808/1052/42 -f 811/1054/43 814/1061/43 813/1055/43 -f 817/1057/42 818/1060/42 815/1058/42 -f 811/1054/46 815/1058/46 818/1060/46 -f 813/1055/44 817/1404/44 816/1062/44 -f 821/1063/46 822/1405/46 820/1064/46 -f 824/1066/44 826/1100/44 825/1067/44 -f 821/1069/42 838/1096/42 842/1070/42 -f 821/1069/42 825/1071/42 826/1072/42 -f 821/1074/48 819/1406/48 836/1075/48 -f 820/1064/43 824/1101/43 823/1077/43 -f 829/1078/47 830/1407/47 828/1079/47 -f 832/1081/45 834/1408/45 833/1082/45 -f 830/1084/44 834/1408/44 832/1081/44 -f 829/1086/42 833/1104/42 834/1087/42 -f 823/1077/43 840/1409/43 836/1075/43 -f 828/1079/43 832/1410/43 831/1089/43 -f 837/1090/45 838/1076/45 836/1075/45 -f 840/1092/47 842/1411/47 841/1093/47 -f 825/1067/49 842/1411/49 840/1092/49 -f 837/1095/42 841/1412/42 842/1070/42 -f 835/1097/44 839/1094/44 841/1093/44 -f 836/1075/43 840/1409/43 839/1099/43 -f 826/1100/50 824/1066/50 831/1083/50 -f 820/1064/43 827/1080/43 831/1089/43 -f 822/1102/51 829/1078/51 827/1080/51 -f 833/1104/42 829/1086/42 822/1073/42 -f 843/1105/43 846/1112/43 845/1106/43 -f 849/1108/42 850/1111/42 847/1109/42 -f 843/1105/46 847/1109/46 850/1111/46 -f 845/1106/44 849/1413/44 848/1113/44 -f 852/1114/45 856/1414/45 858/1115/45 -f 853/1117/47 857/1120/47 855/1118/47 -f 854/1116/43 858/1115/43 857/1120/43 -f 851/1119/42 855/1118/42 856/1121/42 -f 860/1123/45 864/1415/45 866/1124/45 -f 861/1126/47 865/1129/47 863/1127/47 -f 862/1125/43 866/1124/43 865/1129/43 -f 859/1128/42 863/1127/42 864/1130/42 -f 868/1132/46 870/1416/46 869/1133/46 -f 872/1135/46 874/1417/46 873/1136/46 -f 875/1138/46 876/1418/46 878/1139/46 -f 879/1141/46 880/1419/46 882/1142/46 -f 884/1144/46 886/1420/46 885/1145/46 -f 888/1147/46 890/1421/46 889/1148/46 -f 891/1150/46 892/1422/46 894/1151/46 -f 895/1153/46 896/1423/46 898/1154/46 -f 901/1156/44 902/1424/44 900/1157/44 -f 905/1159/44 906/1425/44 904/1160/44 -f 907/1162/44 909/1426/44 910/1163/44 -f 911/1165/44 913/1427/44 914/1166/44 -f 917/1168/44 918/1428/44 916/1169/44 -f 921/1171/44 922/1429/44 920/1172/44 -f 923/1174/44 925/1430/44 926/1175/44 -f 927/1177/44 929/1431/44 930/1178/44 -f 932/1180/46 934/1432/46 933/1181/46 -f 935/1183/46 936/1433/46 938/1184/46 -f 941/1186/44 942/1434/44 940/1187/44 -f 943/1189/44 945/1435/44 946/1190/44 -f 948/1192/45 950/1436/45 949/1193/45 -f 951/1195/45 952/1437/45 954/1196/45 -f 956/1198/45 958/1438/45 957/1199/45 -f 959/1201/45 960/1439/45 962/1202/45 -f 964/1204/45 966/1440/45 965/1205/45 -f 967/1207/45 968/1441/45 970/1208/45 -f 972/1210/45 974/1442/45 973/1211/45 -f 975/1213/45 976/1443/45 978/1214/45 -f 980/1216/45 982/1444/45 981/1217/45 -f 983/1219/45 984/1445/45 986/1220/45 -f 989/1222/47 990/1446/47 988/1223/47 -f 991/1225/47 993/1447/47 994/1226/47 -f 997/1228/47 998/1448/47 996/1229/47 -f 999/1231/47 1001/1449/47 1002/1232/47 -f 1005/1234/47 1006/1450/47 1004/1235/47 -f 1007/1237/47 1009/1451/47 1010/1238/47 -f 1013/1240/47 1014/1452/47 1012/1241/47 -f 1015/1243/47 1017/1453/47 1018/1244/47 -f 1021/1246/47 1022/1454/47 1020/1247/47 -f 1023/1249/47 1025/1455/47 1026/1250/47 -f 1029/1252/44 1030/1456/44 1028/1253/44 -f 1033/1255/44 1034/1457/44 1032/1256/44 -f 1035/1258/44 1037/1458/44 1038/1259/44 -f 1039/1261/44 1041/1459/44 1042/1262/44 -f 1045/1264/44 1046/1460/44 1044/1265/44 -f 1049/1267/44 1050/1461/44 1048/1268/44 -f 1051/1270/44 1053/1462/44 1054/1271/44 -f 1055/1273/44 1057/1463/44 1058/1274/44 -f 1060/1276/46 1062/1464/46 1061/1277/46 -f 1064/1279/46 1066/1465/46 1065/1280/46 -f 1067/1282/46 1068/1466/46 1070/1283/46 -f 1071/1285/46 1072/1467/46 1074/1286/46 -f 1076/1288/46 1078/1468/46 1077/1289/46 -f 1080/1291/46 1082/1469/46 1081/1292/46 -f 1083/1294/46 1084/1470/46 1086/1295/46 -f 1087/1297/46 1088/1471/46 1090/1298/46 -f 1093/1300/44 1094/1472/44 1092/1301/44 -f 1095/1303/44 1097/1473/44 1098/1304/44 -f 1100/1306/46 1102/1474/46 1101/1307/46 -f 1103/1309/46 1104/1475/46 1106/1310/46 -f 1109/1312/47 1110/1476/47 1108/1313/47 -f 1111/1315/47 1113/1477/47 1114/1316/47 -f 1117/1318/47 1118/1478/47 1116/1319/47 -f 1119/1321/47 1121/1479/47 1122/1322/47 -f 1125/1324/47 1126/1480/47 1124/1325/47 -f 1127/1327/47 1129/1481/47 1130/1328/47 -f 1133/1330/47 1134/1482/47 1132/1331/47 -f 1135/1333/47 1137/1483/47 1138/1334/47 -f 1141/1336/47 1142/1484/47 1140/1337/47 -f 1143/1339/47 1145/1485/47 1146/1340/47 -f 1148/1342/45 1150/1486/45 1149/1343/45 -f 1151/1345/45 1152/1487/45 1154/1346/45 -f 1156/1348/45 1158/1488/45 1157/1349/45 -f 1159/1351/45 1160/1489/45 1162/1352/45 -f 1164/1354/45 1166/1490/45 1165/1355/45 -f 1167/1357/45 1168/1491/45 1170/1358/45 -f 1172/1360/45 1174/1492/45 1173/1361/45 -f 1175/1363/45 1176/1493/45 1178/1364/45 -f 1180/1366/45 1182/1494/45 1181/1367/45 -f 1183/1369/45 1184/1495/45 1186/1370/45 -o Atlas_Pad -v -1.500000 2.000000 1.500000 -v 1.500000 2.000000 1.500000 -v -1.500000 2.000000 -1.500000 -v 1.500000 2.000000 -1.500000 -v -3.500000 2.000000 3.500000 -v 3.500000 2.000000 3.500000 -v -3.500000 2.000000 -3.500000 -v 3.500000 2.000000 -3.500000 -v -3.500000 1.750000 -3.500000 -v -3.500000 1.750000 3.500000 -v 3.500000 1.750000 3.500000 -v 3.500000 1.750000 -3.500000 -v -3.250000 1.750000 3.250000 -v 3.250000 1.750000 3.250000 -v -3.250000 1.750000 -3.250000 -v 3.250000 1.750000 -3.250000 -v -3.250000 1.000000 -3.250000 -v -3.250000 1.000000 3.250000 -v 3.250000 1.000000 3.250000 -v 3.250000 1.000000 -3.250000 -v -0.500000 1.000000 0.500000 +f 967/1569/168 968/1570/168 969/1571/168 +f 970/1572/168 971/1573/168 972/1574/168 +f 973/1575/169 974/1576/169 975/1577/169 +f 976/1578/169 977/1579/169 978/1580/169 +f 979/1581/170 976/1582/170 971/1583/170 +f 970/1572/171 980/1584/171 979/1585/171 +f 981/1586/170 973/1587/170 968/1588/170 +f 967/1569/171 982/1589/171 981/1590/171 +f 972/1591/172 977/1579/172 970/1572/172 +f 971/1583/173 978/1592/173 972/1591/173 +f 969/1593/172 974/1576/172 967/1569/172 +f 968/1588/173 975/1594/173 969/1593/173 +f 983/1595/169 984/1596/169 985/1597/169 +f 986/1598/168 987/1599/168 988/1600/168 +f 984/1596/171 989/1601/171 985/1597/171 +f 990/1602/172 986/1603/172 984/1604/172 +f 983/1595/171 991/1605/171 990/1606/171 +f 985/1607/170 987/1608/170 983/1609/170 +f 992/1610/172 993/1611/172 994/1612/172 +f 986/1603/171 994/1612/171 984/1604/171 +f 985/1607/171 995/1613/171 988/1614/171 +f 988/1600/171 992/1615/171 986/1598/171 +f 993/1616/173 996/1617/173 997/1618/173 +f 994/1619/169 997/1618/169 989/1601/169 +f 989/1620/170 996/1621/170 995/1613/170 +f 995/1622/168 998/1623/168 992/1615/168 +f 999/1624/168 1000/1625/168 1001/1626/168 +f 1002/1627/170 1003/1628/170 999/1629/170 +f 1004/1630/169 1005/1631/169 1002/1632/169 +f 1006/1633/173 1003/1634/173 1005/1631/173 +f 1007/1635/171 1001/1626/171 1008/1636/171 +f 1009/1637/171 999/1629/171 1007/1638/171 +f 1008/1639/171 1004/1640/171 1010/1641/171 +f 1001/1642/172 1006/1643/172 1004/1640/172 +f 1009/1637/170 1011/1644/170 1012/1645/170 +f 1012/1646/171 1013/1647/171 1014/1648/171 +f 1014/1649/172 1008/1639/172 1010/1641/172 +f 1010/1650/171 1002/1632/171 1009/1651/171 +f 1008/1636/168 1011/1652/168 1007/1635/168 +f 1012/1646/169 1010/1650/169 1009/1651/169 +f 1015/1653/168 1016/1654/168 1017/1655/168 +f 1018/1656/170 1019/1657/170 1020/1658/170 +f 1021/1659/169 1022/1660/169 1023/1661/169 +f 1024/1662/172 1021/1659/172 1016/1654/172 +f 1025/1663/172 1026/1664/172 1027/1665/172 +f 1028/1666/168 1027/1665/168 1019/1667/168 +f 1026/1664/169 1018/1656/169 1020/1658/169 +f 1022/1660/170 1017/1668/170 1023/1661/170 +f 1029/1669/171 1030/1670/171 1031/1671/171 +f 1032/1672/173 1033/1673/173 1034/1674/173 +f 1029/1669/169 1035/1675/169 1036/1676/169 +f 1035/1677/169 1037/1678/169 1038/1679/169 +f 1030/1670/168 1034/1680/168 1031/1671/168 +f 1034/1681/168 1039/1682/168 1040/1683/168 +f 1032/1684/168 1030/1670/168 1041/1685/168 +f 1035/1675/169 1038/1686/169 1036/1676/169 +f 1038/1679/174 1030/1670/174 1036/1676/174 +f 1034/1680/168 1040/1687/168 1031/1671/168 +f 1033/1673/169 1029/1669/169 1042/1688/169 +f 1040/1683/175 1029/1669/175 1031/1671/175 +f 1043/1689/173 1037/1678/173 1044/1690/173 +f 1045/1691/173 1039/1682/173 1046/1692/173 +f 1032/1693/172 1044/1694/172 1035/1677/172 +f 1042/1695/169 1045/1696/169 1033/1697/169 +f 1040/1683/172 1047/1698/172 1042/1695/172 +f 1041/1699/168 1043/1700/168 1032/1701/168 +f 1038/1679/170 1048/1702/170 1041/1699/170 +f 1033/1697/170 1046/1703/170 1034/1704/170 +f 967/1569/168 981/1590/168 968/1570/168 +f 970/1572/168 979/1585/168 971/1573/168 +f 973/1575/169 982/1589/169 974/1576/169 +f 976/1578/169 980/1584/169 977/1579/169 +f 979/1581/170 980/1705/170 976/1582/170 +f 970/1572/171 977/1579/171 980/1584/171 +f 981/1586/170 982/1706/170 973/1587/170 +f 967/1569/171 974/1576/171 982/1589/171 +f 972/1591/172 978/1592/172 977/1579/172 +f 971/1583/173 976/1582/173 978/1592/173 +f 969/1593/172 975/1594/172 974/1576/172 +f 968/1588/173 973/1587/173 975/1594/173 +f 983/1595/169 990/1606/169 984/1596/169 +f 986/1598/168 991/1707/168 987/1599/168 +f 984/1596/171 994/1619/171 989/1601/171 +f 990/1602/172 991/1708/172 986/1603/172 +f 983/1595/171 987/1709/171 991/1605/171 +f 985/1607/170 988/1614/170 987/1608/170 +f 992/1610/172 998/1710/172 993/1611/172 +f 986/1603/171 992/1610/171 994/1612/171 +f 985/1607/171 989/1620/171 995/1613/171 +f 988/1600/171 995/1622/171 992/1615/171 +f 993/1616/173 998/1711/173 996/1617/173 +f 994/1619/169 993/1616/169 997/1618/169 +f 989/1620/170 997/1712/170 996/1621/170 +f 995/1622/168 996/1713/168 998/1623/168 +f 999/1624/168 1003/1714/168 1000/1625/168 +f 1002/1627/170 1005/1715/170 1003/1628/170 +f 1004/1630/169 1006/1633/169 1005/1631/169 +f 1006/1633/173 1000/1716/173 1003/1634/173 +f 1007/1635/171 999/1624/171 1001/1626/171 +f 1009/1637/171 1002/1627/171 999/1629/171 +f 1008/1639/171 1001/1642/171 1004/1640/171 +f 1001/1642/172 1000/1717/172 1006/1643/172 +f 1009/1637/170 1007/1638/170 1011/1644/170 +f 1012/1646/171 1011/1718/171 1013/1647/171 +f 1014/1649/172 1013/1719/172 1008/1639/172 +f 1010/1650/171 1004/1630/171 1002/1632/171 +f 1008/1636/168 1013/1720/168 1011/1652/168 +f 1012/1646/169 1014/1648/169 1010/1650/169 +f 1015/1653/168 1024/1662/168 1016/1654/168 +f 1018/1656/170 1028/1721/170 1019/1657/170 +f 1021/1659/169 1049/1722/169 1022/1660/169 +f 1024/1662/172 1049/1722/172 1021/1659/172 +f 1025/1663/172 1050/1723/172 1026/1664/172 +f 1028/1666/168 1025/1663/168 1027/1665/168 +f 1026/1664/169 1050/1723/169 1018/1656/169 +f 1022/1660/170 1015/1724/170 1017/1668/170 +f 1029/1669/171 1036/1676/171 1030/1670/171 +f 1032/1672/173 1035/1675/173 1033/1673/173 +f 1029/1669/169 1033/1673/169 1035/1675/169 +f 1035/1677/169 1044/1694/169 1037/1678/169 +f 1030/1670/168 1032/1684/168 1034/1680/168 +f 1034/1681/168 1046/1725/168 1039/1682/168 +f 1038/1679/174 1041/1699/174 1030/1670/174 +f 1040/1683/175 1042/1695/175 1029/1669/175 +f 1043/1689/173 1048/1702/173 1037/1678/173 +f 1045/1691/173 1047/1698/173 1039/1682/173 +f 1032/1693/172 1043/1726/172 1044/1694/172 +f 1042/1695/169 1047/1698/169 1045/1696/169 +f 1040/1683/172 1039/1682/172 1047/1698/172 +f 1041/1699/168 1048/1702/168 1043/1700/168 +f 1038/1679/170 1037/1678/170 1048/1702/170 +f 1033/1697/170 1045/1696/170 1046/1703/170 +o Strong_Pivot +v 0.750000 3.500000 -2.750000 +v 0.250000 3.500000 -3.250000 +v 0.250000 3.500000 -2.750000 +v 0.750000 1.500000 -3.250000 +v 0.750000 1.500000 -2.750000 +v 0.250000 1.500000 -3.250000 +v 0.750000 3.500000 -3.250000 +v 0.250000 1.500000 -2.750000 +v -0.250000 3.500000 -2.750000 +v -0.750000 3.500000 -3.250000 +v -0.750000 3.500000 -2.750000 +v -0.250000 1.500000 -3.250000 +v -0.250000 1.500000 -2.750000 +v -0.750000 1.500000 -3.250000 +v -0.250000 3.500000 -3.250000 +v -0.750000 1.500000 -2.750000 +v 0.312500 4.500000 -3.187500 +v 0.687500 3.500000 -3.187500 +v 0.312500 3.500000 -3.187500 +v 0.687500 4.500000 -2.812500 +v 0.312500 3.500000 -2.812500 +v 0.687500 3.500000 -2.812500 +v 0.687500 4.500000 -3.187500 +v 0.312500 4.500000 -2.812500 +v -0.687500 4.500000 -3.187500 +v -0.312500 3.500000 -3.187500 +v -0.687500 3.500000 -3.187500 +v -0.312500 4.500000 -2.812500 +v -0.687500 3.500000 -2.812500 +v -0.312500 3.500000 -2.812500 +v -0.312500 4.500000 -3.187500 +v -0.687500 4.500000 -2.812500 +vt 0.794872 0.224719 +vt 0.820513 0.179775 +vt 0.820513 0.224719 +vt 0.897436 0.000000 +vt 0.871795 0.179775 +vt 0.871795 0.000000 +vt 0.820513 0.000000 +vt 0.794872 0.179775 +vt 0.794872 0.000000 +vt 0.846154 0.000000 +vt 0.846154 0.179775 +vt 0.794872 0.224719 +vt 0.820513 0.179775 +vt 0.820513 0.224719 +vt 0.897436 0.000000 +vt 0.871795 0.179775 +vt 0.871795 0.000000 +vt 0.820513 0.000000 +vt 0.794872 0.179775 +vt 0.794872 0.000000 +vt 0.846154 0.000000 +vt 0.846154 0.179775 +vt 0.839744 0.269663 +vt 0.820513 0.179775 +vt 0.839744 0.179775 +vt 0.878205 0.269663 +vt 0.858974 0.179775 +vt 0.878205 0.179775 +vt 0.897436 0.269663 +vt 0.897436 0.179775 +vt 0.858974 0.269663 +vt 0.839744 0.269663 +vt 0.820513 0.179775 +vt 0.839744 0.179775 +vt 0.878205 0.269663 +vt 0.858974 0.179775 +vt 0.878205 0.179775 +vt 0.897436 0.269663 +vt 0.897436 0.179775 +vt 0.858974 0.269663 +vt 0.897436 0.179775 +vt 0.897436 0.179775 +vt 0.820513 0.269663 +vt 0.820513 0.269663 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +s off +f 1051/1727/176 1052/1728/176 1053/1729/176 +f 1054/1730/177 1051/1731/177 1055/1732/177 +f 1056/1733/178 1057/1734/178 1054/1735/178 +f 1058/1736/179 1052/1728/179 1056/1733/179 +f 1055/1732/180 1053/1737/180 1058/1736/180 +f 1059/1738/176 1060/1739/176 1061/1740/176 +f 1062/1741/177 1059/1742/177 1063/1743/177 +f 1064/1744/178 1065/1745/178 1062/1746/178 +f 1066/1747/179 1060/1739/179 1064/1744/179 +f 1063/1743/180 1061/1748/180 1066/1747/180 +f 1067/1749/178 1068/1750/178 1069/1751/178 +f 1070/1752/180 1071/1753/180 1072/1754/180 +f 1073/1755/177 1072/1754/177 1068/1756/177 +f 1074/1757/179 1069/1751/179 1071/1753/179 +f 1075/1758/178 1076/1759/178 1077/1760/178 +f 1078/1761/180 1079/1762/180 1080/1763/180 +f 1081/1764/177 1080/1763/177 1076/1765/177 +f 1082/1766/179 1077/1760/179 1079/1762/179 +f 1051/1727/176 1057/1734/176 1052/1728/176 +f 1054/1730/177 1057/1767/177 1051/1731/177 +f 1056/1733/178 1052/1728/178 1057/1734/178 +f 1058/1736/179 1053/1737/179 1052/1728/179 +f 1055/1732/180 1051/1731/180 1053/1737/180 +f 1059/1738/176 1065/1745/176 1060/1739/176 +f 1062/1741/177 1065/1768/177 1059/1742/177 +f 1064/1744/178 1060/1739/178 1065/1745/178 +f 1066/1747/179 1061/1748/179 1060/1739/179 +f 1063/1743/180 1059/1742/180 1061/1748/180 +f 1067/1749/178 1073/1769/178 1068/1750/178 +f 1070/1752/180 1074/1757/180 1071/1753/180 +f 1073/1755/177 1070/1752/177 1072/1754/177 +f 1074/1757/179 1067/1749/179 1069/1751/179 +f 1075/1758/178 1081/1770/178 1076/1759/178 +f 1078/1761/180 1082/1766/180 1079/1762/180 +f 1081/1764/177 1078/1761/177 1080/1763/177 +f 1082/1766/179 1075/1758/179 1077/1760/179 +o Strong_Rope +v -0.250000 8.500000 2.500000 +v 0.250000 8.500000 0.250000 +v 0.250000 8.500000 2.500000 +v 0.250000 9.000000 0.250000 +v 0.250000 9.000000 2.500000 +v -0.250000 9.000000 2.500000 +v -0.250000 8.500000 0.250000 +v -0.250000 9.000000 0.250000 +v 0.000000 10.812500 0.500000 +v 0.000000 10.875000 0.000000 +v 0.000000 11.000000 0.000000 +v 0.000000 10.875000 2.500000 +v 0.000000 10.812500 2.000000 +v 0.000000 11.000000 2.500000 +v 0.000000 10.687500 2.000000 +v 0.000000 10.750000 1.500000 +v 0.000000 10.625000 1.500000 +v 0.000000 10.750000 1.000000 +v 0.000000 10.687500 0.500000 +v 0.000000 10.812500 0.500000 +v 0.000000 10.875000 0.000000 +v 0.000000 10.687500 0.500000 +v 0.000000 10.812500 2.000000 +v 0.000000 10.875000 2.500000 +v 0.000000 11.000000 2.500000 +v 0.000000 10.750000 1.500000 +v 0.000000 10.687500 2.000000 +v 0.000000 10.750000 1.000000 +v 0.000000 10.625000 1.500000 +v 0.000000 10.625000 1.000000 +v 0.000000 10.625000 1.000000 +v 0.000000 11.000000 0.000000 +v 1.000000 7.625000 0.000000 +v 0.625000 7.661612 -0.088388 +v 1.000000 7.661612 -0.088388 +v 1.000000 7.838388 -0.088388 +v 0.625000 7.875000 0.000000 +v 1.000000 7.875000 0.000000 +v 0.625000 7.750000 -0.125000 +v 1.000000 7.750000 -0.125000 +v 1.000000 7.838388 0.088388 +v 0.625000 7.750000 0.125000 +v 1.000000 7.750000 0.125000 +v 1.000000 7.661612 0.088388 +v 0.625000 7.625000 0.000000 +v 0.625000 7.661612 0.088388 +v 0.625000 7.838388 0.088388 +v 0.625000 7.838388 -0.088388 +v 1.025888 7.661612 0.099112 +v 1.036612 7.661612 0.125000 +v 1.025888 7.838388 0.099112 +v 1.036612 7.838388 0.125000 +v 1.150888 7.838388 -0.025888 +v 1.088388 7.875000 0.036612 +v 1.150888 7.661612 -0.025888 +v 1.176777 7.750000 -0.051777 +v 1.088388 7.625000 0.036612 +v 1.213388 7.838388 0.125000 +v 1.213388 7.661612 0.125000 +v 1.125000 7.875000 0.125000 +v 1.250000 7.750000 0.125000 +v 1.125000 7.625000 0.125000 +v 1.213388 7.838388 2.875000 +v 1.125000 7.875000 2.875000 +v 1.213388 7.661612 2.875000 +v 1.250000 7.750000 2.875000 +v 1.036612 7.838388 2.875000 +v 1.000000 7.750000 2.875000 +v 1.036612 7.661612 2.875000 +v 1.125000 7.625000 2.875000 +v 1.025888 7.661612 2.900888 +v 1.000000 7.661612 2.911612 +v 1.025888 7.838388 2.900888 +v 1.000000 7.838388 2.911612 +v 1.088388 7.875000 2.963388 +v 1.150888 7.838388 3.025888 +v 1.176777 7.750000 3.051777 +v 1.150888 7.661612 3.025888 +v 1.088388 7.625000 2.963388 +v 1.000000 7.661612 3.088388 +v 1.000000 7.625000 3.000000 +v 1.000000 7.838388 3.088388 +v 1.000000 7.875000 3.000000 +v 1.000000 7.750000 3.125000 +v 1.176777 5.500000 3.051777 +v 1.000000 5.588388 3.088388 +v 1.000000 5.500000 3.125000 +v 1.000000 5.625000 3.000000 +v 1.025888 5.588388 2.900888 +v 1.000000 5.588388 2.911612 +v 1.000000 5.411612 2.911612 +v 1.088388 5.375000 2.963388 +v 1.000000 5.375000 3.000000 +v 1.000000 5.411612 3.088388 +v 1.088388 5.625000 2.963388 +v 1.213388 5.411612 2.875000 +v 1.150888 5.411612 3.025888 +v 1.213388 5.588388 2.875000 +v 1.150888 5.588388 3.025888 +v 1.125000 5.625000 2.875000 +v 1.025888 5.411612 2.900888 +v 1.125000 5.375000 2.875000 +v 1.000000 5.500000 2.875000 +v 1.036612 5.588388 2.875000 +v 1.036612 5.411612 2.875000 +v 1.213388 5.411612 0.125000 +v 1.250000 5.500000 2.875000 +v 1.213388 5.588388 0.125000 +v 1.036612 5.588388 0.125000 +v 1.036612 5.411612 0.125000 +v 1.125000 5.375000 0.125000 +v 1.000000 5.500000 0.125000 +v 1.250000 5.500000 0.125000 +v 1.125000 5.625000 0.125000 +v 1.088388 5.375000 0.036612 +v 1.176777 5.500000 -0.051777 +v 1.088388 5.625000 0.036612 +v 1.150888 5.411612 -0.025888 +v 1.150888 5.588388 -0.025888 +v 1.025888 5.588388 0.099112 +v 1.000000 5.375000 0.000000 +v 1.000000 5.411612 -0.088388 +v 1.000000 5.500000 -0.125000 +v 1.000000 5.588388 -0.088388 +v 1.000000 5.588388 0.088388 +v 1.025888 5.411612 0.099112 +v 1.000000 5.625000 0.000000 +v 1.000000 5.411612 0.088388 +v 0.625000 5.588388 -0.088388 +v 0.625000 5.588388 0.088388 +v 0.625000 5.411612 0.088388 +v 0.625000 5.375000 0.000000 +v 0.625000 5.500000 0.125000 +v 0.625000 5.500000 -0.125000 +v 0.625000 5.625000 0.000000 +v 0.625000 5.411612 -0.088388 +vt 0.692308 0.449438 +vt 0.666667 0.651685 +vt 0.666667 0.449438 +vt 0.769231 0.449438 +vt 0.743590 0.651685 +vt 0.743590 0.449438 +vt 0.717949 0.449438 +vt 0.692308 0.651685 +vt 0.717949 0.651685 +vt 0.461538 0.910112 +vt 0.487179 0.898876 +vt 0.487179 0.910112 +vt 0.358974 0.898876 +vt 0.384615 0.910112 +vt 0.358974 0.910112 +vt 0.384615 0.898876 +vt 0.410256 0.910112 +vt 0.410256 0.898876 +vt 0.435897 0.910112 +vt 0.461538 0.898876 +vt 0.461538 0.910112 +vt 0.487179 0.898876 +vt 0.461538 0.898876 +vt 0.384615 0.910112 +vt 0.358974 0.898876 +vt 0.358974 0.910112 +vt 0.410256 0.910112 +vt 0.384615 0.898876 +vt 0.435897 0.910112 +vt 0.410256 0.898876 +vt 0.435897 0.898876 +vt 0.769231 0.651685 +vt 0.435897 0.898876 +vt 0.487179 0.910112 +vt 0.705128 0.966292 +vt 0.698718 1.000000 +vt 0.698718 0.966292 +vt 0.685897 0.966292 +vt 0.679487 1.000000 +vt 0.679487 0.966292 +vt 0.692308 1.000000 +vt 0.692308 0.966292 +vt 0.673077 0.966292 +vt 0.666667 1.000000 +vt 0.666667 0.966292 +vt 0.711538 0.966292 +vt 0.705128 1.000000 +vt 0.717949 0.966292 +vt 0.711538 1.000000 +vt 0.673077 1.000000 +vt 0.685897 1.000000 +vt 0.711538 0.949438 +vt 0.717949 0.949438 +vt 0.711538 0.955056 +vt 0.711538 0.943820 +vt 0.673077 0.949438 +vt 0.673077 0.955056 +vt 0.666667 0.949438 +vt 0.673077 0.943820 +vt 0.685897 0.949438 +vt 0.679487 0.960674 +vt 0.679487 0.949438 +vt 0.698718 0.949438 +vt 0.692308 0.949438 +vt 0.705128 0.960674 +vt 0.705128 0.949438 +vt 0.685897 0.932584 +vt 0.698718 0.932584 +vt 0.679487 0.938202 +vt 0.692308 0.932584 +vt 0.705128 0.938202 +vt 0.685897 0.685393 +vt 0.679487 0.932584 +vt 0.679487 0.685393 +vt 0.698718 0.685393 +vt 0.692308 0.685393 +vt 0.673077 0.685393 +vt 0.666667 0.932584 +vt 0.666667 0.685393 +vt 0.711538 0.685393 +vt 0.705128 0.932584 +vt 0.705128 0.685393 +vt 0.717949 0.685393 +vt 0.711538 0.932584 +vt 0.673077 0.932584 +vt 0.711538 0.668539 +vt 0.717949 0.668539 +vt 0.711538 0.674157 +vt 0.711538 0.662921 +vt 0.673077 0.668539 +vt 0.673077 0.674157 +vt 0.666667 0.668539 +vt 0.673077 0.662921 +vt 0.679487 0.668539 +vt 0.685897 0.668539 +vt 0.692308 0.668539 +vt 0.698718 0.668539 +vt 0.705128 0.679775 +vt 0.705128 0.668539 +vt 0.679487 0.679775 +vt 0.698718 0.651685 +vt 0.705128 0.657303 +vt 0.685897 0.651685 +vt 0.679487 0.657303 +vt 0.692308 0.651685 +vt 0.692308 0.668539 +vt 0.685897 0.651685 +vt 0.692308 0.651685 +vt 0.679487 0.657303 +vt 0.673077 0.668539 +vt 0.673077 0.662921 +vt 0.711538 0.662921 +vt 0.705128 0.668539 +vt 0.705128 0.657303 +vt 0.698718 0.651685 +vt 0.679487 0.668539 +vt 0.698718 0.685393 +vt 0.698718 0.668539 +vt 0.685897 0.685393 +vt 0.685897 0.668539 +vt 0.679487 0.679775 +vt 0.711538 0.668539 +vt 0.705128 0.679775 +vt 0.666667 0.668539 +vt 0.673077 0.674157 +vt 0.717949 0.668539 +vt 0.711538 0.674157 +vt 0.705128 0.685393 +vt 0.698718 0.932584 +vt 0.692308 0.685393 +vt 0.685897 0.932584 +vt 0.679487 0.685393 +vt 0.673077 0.932584 +vt 0.673077 0.685393 +vt 0.717949 0.685393 +vt 0.711538 0.932584 +vt 0.711538 0.685393 +vt 0.705128 0.932584 +vt 0.666667 0.932584 +vt 0.666667 0.685393 +vt 0.692308 0.932584 +vt 0.679487 0.932584 +vt 0.711538 0.943820 +vt 0.705128 0.949438 +vt 0.705128 0.938202 +vt 0.692308 0.949438 +vt 0.679487 0.949438 +vt 0.679487 0.938202 +vt 0.698718 0.949438 +vt 0.685897 0.949438 +vt 0.673077 0.943820 +vt 0.673077 0.949438 +vt 0.705128 0.960674 +vt 0.698718 0.966292 +vt 0.692308 0.966292 +vt 0.685897 0.966292 +vt 0.673077 0.955056 +vt 0.711538 0.949438 +vt 0.679487 0.960674 +vt 0.666667 0.949438 +vt 0.717949 0.949438 +vt 0.711538 0.955056 +vt 0.685897 1.000000 +vt 0.679487 0.966292 +vt 0.673077 1.000000 +vt 0.673077 0.966292 +vt 0.717949 0.966292 +vt 0.711538 1.000000 +vt 0.711538 0.966292 +vt 0.705128 1.000000 +vt 0.705128 0.966292 +vt 0.666667 1.000000 +vt 0.666667 0.966292 +vt 0.692308 1.000000 +vt 0.679487 1.000000 +vt 0.698718 1.000000 +vt 0.717949 1.000000 +vt 0.717949 0.932584 +vt 0.717949 0.932584 +vt 0.717949 1.000000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0196 -0.9987 -0.0473 +vn 0.0000 -0.7071 -0.7071 +vn 0.1448 -0.6794 -0.7194 +vn 0.1448 0.6794 -0.7194 +vn 0.0196 0.9987 -0.0473 +vn 0.0000 -0.0000 -1.0000 +vn 0.1866 0.0000 -0.9824 +vn -0.1363 0.7263 0.6737 +vn 0.0000 0.0000 1.0000 +vn -0.7071 -0.0000 0.7071 +vn -0.1363 -0.7263 0.6737 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn -0.4617 -0.7574 0.4617 +vn -0.6737 -0.7263 0.1363 +vn -0.4617 0.7574 0.4617 +vn -0.6737 0.7263 0.1363 +vn 0.5293 0.6630 -0.5294 +vn 0.0671 0.9955 -0.0671 +vn 0.5293 -0.6630 -0.5294 +vn 0.7071 0.0000 -0.7071 +vn 0.0671 -0.9955 -0.0671 +vn 0.7194 0.6794 -0.1448 +vn 0.7194 -0.6794 -0.1448 +vn 0.0473 0.9987 -0.0196 +vn 0.9824 -0.0000 -0.1866 +vn 0.0473 -0.9987 -0.0196 +vn 0.7194 0.6794 0.1448 +vn 0.0473 0.9987 0.0196 +vn 0.7194 -0.6794 0.1448 +vn 0.9824 -0.0000 0.1866 +vn -0.6737 0.7263 -0.1363 +vn -0.9809 -0.0000 -0.1944 +vn -0.6737 -0.7263 -0.1363 +vn 0.0473 -0.9987 0.0196 +vn -0.4617 -0.7574 -0.4617 +vn -0.2611 -0.7311 -0.6303 +vn -0.4617 0.7574 -0.4617 +vn -0.2611 0.7311 -0.6303 +vn 0.0671 0.9955 0.0671 +vn 0.5294 0.6630 0.5293 +vn 0.7071 0.0000 0.7071 +vn 0.5293 -0.6630 0.5294 +vn 0.0671 -0.9955 0.0671 +vn 0.2962 -0.6333 0.7150 +vn 0.0393 -0.9947 0.0948 +vn 0.2962 0.6333 0.7150 +vn 0.0393 0.9947 0.0948 +vn 0.3827 0.0000 0.9239 +vn 0.5293 -0.6630 0.5293 +vn 0.5293 0.6630 0.5294 +s off +f 1083/1771/181 1084/1772/181 1085/1773/181 +f 1085/1774/182 1086/1775/182 1087/1776/182 +f 1088/1777/183 1089/1778/183 1083/1771/183 +f 1087/1776/184 1090/1779/184 1088/1777/184 +f 1091/1780/182 1092/1781/182 1093/1782/182 +f 1094/1783/182 1095/1784/182 1096/1785/182 +f 1097/1786/182 1098/1787/182 1095/1784/182 +f 1099/1788/182 1100/1789/182 1098/1787/182 +f 1100/1789/182 1101/1790/182 1091/1780/182 +f 1102/1791/183 1103/1792/183 1104/1793/183 +f 1105/1794/183 1106/1795/183 1107/1796/183 +f 1108/1797/183 1109/1798/183 1105/1794/183 +f 1110/1799/183 1111/1800/183 1108/1797/183 +f 1110/1799/183 1104/1793/183 1112/1801/183 +f 1083/1771/181 1089/1778/181 1084/1772/181 +f 1085/1774/182 1084/1802/182 1086/1775/182 +f 1088/1777/183 1090/1779/183 1089/1778/183 +f 1087/1776/184 1086/1775/184 1090/1779/184 +f 1091/1780/182 1101/1790/182 1092/1781/182 +f 1094/1783/182 1097/1786/182 1095/1784/182 +f 1097/1786/182 1099/1788/182 1098/1787/182 +f 1099/1788/182 1113/1803/182 1100/1789/182 +f 1100/1789/182 1113/1803/182 1101/1790/182 +f 1102/1791/183 1114/1804/183 1103/1792/183 +f 1105/1794/183 1109/1798/183 1106/1795/183 +f 1108/1797/183 1111/1800/183 1109/1798/183 +f 1110/1799/183 1112/1801/183 1111/1800/183 +f 1110/1799/183 1102/1791/183 1104/1793/183 +s 1 +f 1115/1805/185 1116/1806/186 1117/1807/187 +f 1118/1808/188 1119/1809/184 1120/1810/189 +f 1117/1807/187 1121/1811/190 1122/1812/191 +f 1123/1813/192 1124/1814/193 1125/1815/194 +f 1126/1816/195 1127/1817/181 1115/1805/185 +f 1125/1818/194 1128/1819/196 1126/1816/195 +f 1120/1810/189 1129/1820/197 1123/1813/192 +f 1122/1812/191 1130/1821/198 1118/1808/188 +f 1131/1822/199 1125/1823/194 1126/1824/195 +f 1125/1823/194 1131/1822/199 1132/1825/200 +f 1133/1826/201 1123/1827/192 1125/1828/194 +f 1134/1829/202 1133/1826/201 1125/1828/194 +f 1135/1830/203 1120/1831/189 1136/1832/204 +f 1137/1833/205 1122/1812/191 1138/1834/206 +f 1131/1822/199 1115/1835/185 1139/1836/207 +f 1136/1832/204 1123/1827/192 1133/1826/201 +f 1135/1830/203 1122/1812/191 1118/1808/188 +f 1139/1836/207 1117/1807/187 1137/1833/205 +f 1134/1829/202 1136/1832/204 1133/1826/201 +f 1140/1837/208 1138/1834/206 1135/1830/203 +f 1141/1838/209 1139/1836/207 1137/1833/205 +f 1140/1837/208 1136/1832/204 1142/1839/210 +f 1141/1838/209 1138/1834/206 1143/1840/211 +f 1144/1841/212 1131/1822/199 1139/1836/207 +f 1145/1842/213 1142/1843/210 1146/1844/214 +f 1147/1845/215 1143/1840/211 1148/1846/216 +f 1149/1847/217 1125/1848/194 1150/1849/218 +f 1151/1850/219 1144/1851/212 1152/1852/220 +f 1150/1853/218 1132/1854/200 1151/1850/219 +f 1146/1844/214 1134/1855/202 1149/1847/217 +f 1148/1846/216 1140/1837/208 1145/1842/213 +f 1152/1852/220 1141/1838/209 1147/1845/215 +f 1153/1856/221 1150/1857/218 1151/1858/219 +f 1154/1859/222 1150/1857/218 1153/1856/221 +f 1155/1860/223 1149/1861/217 1150/1862/218 +f 1150/1862/218 1156/1863/224 1155/1860/223 +f 1145/1842/213 1157/1864/225 1158/1865/226 +f 1147/1845/215 1159/1866/227 1160/1867/228 +f 1153/1856/221 1152/1868/220 1161/1869/229 +f 1146/1870/214 1155/1860/223 1157/1864/225 +f 1159/1866/227 1145/1842/213 1158/1865/226 +f 1161/1869/229 1147/1845/215 1160/1867/228 +f 1161/1869/229 1162/1871/230 1163/1872/231 +f 1164/1873/232 1157/1864/225 1165/1874/233 +f 1162/1871/230 1159/1866/227 1166/1875/234 +f 1154/1859/222 1161/1869/229 1163/1872/231 +f 1165/1874/233 1155/1860/223 1156/1863/224 +f 1159/1866/227 1164/1873/232 1166/1875/234 +f 1167/1876/227 1168/1877/232 1169/1878/234 +f 1170/1879/233 1171/1880/223 1172/1881/224 +f 1173/1882/222 1174/1883/229 1175/1884/231 +f 1176/1885/230 1167/1876/227 1169/1878/234 +f 1168/1877/232 1177/1886/225 1170/1879/233 +f 1174/1883/229 1176/1885/230 1175/1884/231 +f 1174/1883/229 1178/1887/215 1179/1888/235 +f 1167/1876/227 1180/1889/213 1181/1890/236 +f 1182/1891/214 1171/1880/223 1177/1886/225 +f 1183/1892/221 1184/1893/220 1174/1883/229 +f 1178/1887/215 1167/1876/227 1179/1888/235 +f 1180/1889/213 1177/1886/225 1181/1890/236 +f 1185/1894/218 1172/1881/224 1171/1880/223 +f 1171/1880/223 1186/1895/217 1185/1894/218 +f 1173/1882/222 1185/1896/218 1183/1892/221 +f 1183/1892/221 1185/1896/218 1187/1897/219 +f 1184/1898/220 1188/1899/209 1178/1887/215 +f 1189/1900/216 1190/1901/208 1180/1889/213 +f 1182/1902/214 1191/1903/202 1186/1904/217 +f 1185/1905/218 1192/1906/200 1187/1907/219 +f 1187/1907/219 1193/1908/212 1184/1898/220 +f 1186/1904/217 1194/1909/194 1185/1910/218 +f 1178/1887/215 1195/1911/211 1189/1900/216 +f 1180/1889/213 1196/1912/210 1182/1902/214 +f 1192/1913/200 1197/1914/207 1193/1915/212 +f 1188/1899/209 1198/1916/206 1195/1911/211 +f 1190/1901/208 1199/1917/204 1196/1918/210 +f 1193/1915/212 1200/1919/205 1188/1899/209 +f 1190/1901/208 1198/1916/206 1201/1920/203 +f 1191/1921/202 1199/1917/204 1202/1922/201 +f 1200/1919/205 1203/1923/185 1204/1924/187 +f 1201/1920/203 1205/1925/191 1206/1926/188 +f 1199/1917/204 1207/1927/192 1202/1922/201 +f 1208/1928/199 1203/1923/185 1197/1914/207 +f 1200/1919/205 1205/1925/191 1198/1916/206 +f 1201/1920/203 1209/1929/189 1199/1917/204 +f 1191/1921/202 1202/1922/201 1194/1930/194 +f 1202/1922/201 1207/1927/192 1194/1930/194 +f 1194/1931/194 1208/1928/199 1192/1913/200 +f 1208/1928/199 1194/1931/194 1210/1932/195 +f 1205/1925/191 1211/1933/198 1206/1926/188 +f 1209/1934/189 1212/1935/197 1207/1936/192 +f 1194/1937/194 1213/1938/196 1210/1939/195 +f 1210/1939/195 1214/1940/181 1203/1941/185 +f 1207/1936/192 1215/1942/193 1194/1943/194 +f 1204/1924/187 1216/1944/190 1205/1925/191 +f 1206/1926/188 1217/1945/184 1209/1934/189 +f 1203/1941/185 1218/1946/186 1204/1924/187 +f 1115/1805/185 1127/1817/181 1116/1806/186 +f 1118/1808/188 1130/1821/198 1119/1809/184 +f 1117/1807/187 1116/1806/186 1121/1811/190 +f 1123/1813/192 1129/1820/197 1124/1814/193 +f 1126/1816/195 1128/1819/196 1127/1817/181 +f 1125/1818/194 1124/1947/193 1128/1819/196 +f 1120/1810/189 1119/1809/184 1129/1820/197 +f 1122/1812/191 1121/1811/190 1130/1821/198 +f 1135/1830/203 1118/1808/188 1120/1831/189 +f 1137/1833/205 1117/1807/187 1122/1812/191 +f 1131/1822/199 1126/1824/195 1115/1835/185 +f 1136/1832/204 1120/1831/189 1123/1827/192 +f 1135/1830/203 1138/1834/206 1122/1812/191 +f 1139/1836/207 1115/1835/185 1117/1807/187 +f 1134/1829/202 1142/1839/210 1136/1832/204 +f 1140/1837/208 1143/1840/211 1138/1834/206 +f 1141/1838/209 1144/1841/212 1139/1836/207 +f 1140/1837/208 1135/1830/203 1136/1832/204 +f 1141/1838/209 1137/1833/205 1138/1834/206 +f 1144/1841/212 1132/1825/200 1131/1822/199 +f 1145/1842/213 1140/1837/208 1142/1843/210 +f 1147/1845/215 1141/1838/209 1143/1840/211 +f 1149/1847/217 1134/1855/202 1125/1848/194 +f 1151/1850/219 1132/1854/200 1144/1851/212 +f 1150/1853/218 1125/1948/194 1132/1854/200 +f 1146/1844/214 1142/1843/210 1134/1855/202 +f 1148/1846/216 1143/1840/211 1140/1837/208 +f 1152/1852/220 1144/1851/212 1141/1838/209 +f 1145/1842/213 1146/1870/214 1157/1864/225 +f 1147/1845/215 1148/1846/216 1159/1866/227 +f 1153/1856/221 1151/1858/219 1152/1868/220 +f 1146/1870/214 1149/1861/217 1155/1860/223 +f 1159/1866/227 1148/1846/216 1145/1842/213 +f 1161/1869/229 1152/1868/220 1147/1845/215 +f 1161/1869/229 1160/1867/228 1162/1871/230 +f 1164/1873/232 1158/1865/226 1157/1864/225 +f 1162/1871/230 1160/1867/228 1159/1866/227 +f 1154/1859/222 1153/1856/221 1161/1869/229 +f 1165/1874/233 1157/1864/225 1155/1860/223 +f 1159/1866/227 1158/1865/226 1164/1873/232 +f 1167/1876/227 1181/1890/236 1168/1877/232 +f 1170/1879/233 1177/1886/225 1171/1880/223 +f 1173/1882/222 1183/1892/221 1174/1883/229 +f 1176/1885/230 1179/1888/235 1167/1876/227 +f 1168/1877/232 1181/1890/236 1177/1886/225 +f 1174/1883/229 1179/1888/235 1176/1885/230 +f 1174/1883/229 1184/1893/220 1178/1887/215 +f 1167/1876/227 1189/1900/216 1180/1889/213 +f 1182/1891/214 1186/1895/217 1171/1880/223 +f 1183/1892/221 1187/1897/219 1184/1893/220 +f 1178/1887/215 1189/1900/216 1167/1876/227 +f 1180/1889/213 1182/1891/214 1177/1886/225 +f 1184/1898/220 1193/1908/212 1188/1899/209 +f 1189/1900/216 1195/1911/211 1190/1901/208 +f 1182/1902/214 1196/1912/210 1191/1903/202 +f 1185/1905/218 1194/1949/194 1192/1906/200 +f 1187/1907/219 1192/1906/200 1193/1908/212 +f 1186/1904/217 1191/1903/202 1194/1909/194 +f 1178/1887/215 1188/1899/209 1195/1911/211 +f 1180/1889/213 1190/1901/208 1196/1912/210 +f 1192/1913/200 1208/1928/199 1197/1914/207 +f 1188/1899/209 1200/1919/205 1198/1916/206 +f 1190/1901/208 1201/1920/203 1199/1917/204 +f 1193/1915/212 1197/1914/207 1200/1919/205 +f 1190/1901/208 1195/1911/211 1198/1916/206 +f 1191/1921/202 1196/1918/210 1199/1917/204 +f 1200/1919/205 1197/1914/207 1203/1923/185 +f 1201/1920/203 1198/1916/206 1205/1925/191 +f 1199/1917/204 1209/1929/189 1207/1927/192 +f 1208/1928/199 1210/1932/195 1203/1923/185 +f 1200/1919/205 1204/1924/187 1205/1925/191 +f 1201/1920/203 1206/1926/188 1209/1929/189 +f 1205/1925/191 1216/1944/190 1211/1933/198 +f 1209/1934/189 1217/1945/184 1212/1935/197 +f 1194/1937/194 1215/1950/193 1213/1938/196 +f 1210/1939/195 1213/1938/196 1214/1940/181 +f 1207/1936/192 1212/1935/197 1215/1942/193 +f 1204/1924/187 1218/1946/186 1216/1944/190 +f 1206/1926/188 1211/1933/198 1217/1945/184 +f 1203/1941/185 1214/1940/181 1218/1946/186 +o Strong_Pad +v 0.500000 2.000000 0.500000 +v -2.500000 2.000000 2.500000 +v 2.500000 2.000000 2.500000 +v 0.500000 2.000000 -0.500000 +v 0.500000 1.500000 0.500000 +v -0.500000 2.000000 0.500000 +v -2.500000 2.000000 -2.500000 +v -0.500000 2.000000 -0.500000 +v 2.500000 2.000000 -2.500000 +v 0.500000 1.500000 2.500000 +v -2.500000 1.500000 0.500000 +v -0.500000 1.500000 -2.500000 +v 2.500000 1.500000 -0.500000 +v -0.500000 1.500000 -0.500000 +v 0.500000 1.500000 -0.500000 +v -0.500000 1.500000 0.500000 +v 2.500000 1.500000 0.500000 +v -0.500000 1.500000 2.500000 +v -2.500000 1.500000 -0.500000 +v 0.500000 1.500000 -2.500000 +v 1.500000 1.000000 1.500000 +v 2.500000 1.000000 1.500000 +v 1.500000 1.000000 -1.500000 +v 2.500000 1.000000 -1.500000 +v -1.500000 1.000000 -1.500000 +v -2.500000 1.000000 -1.500000 +v -1.500000 1.000000 1.500000 +v -2.500000 1.000000 1.500000 +v -1.500000 1.000000 -3.500000 +v 1.500000 1.500000 -3.500000 +v 1.500000 1.000000 -3.500000 +v 1.500000 2.000000 -2.500000 +v -1.500000 2.000000 -3.000000 +v -1.500000 2.000000 -2.500000 +v 1.500000 2.000000 -3.000000 +v 1.500000 1.000000 -2.500000 +v -1.500000 1.000000 -2.500000 +v -1.500000 1.500000 -3.500000 +v 2.500000 1.250000 4.500000 +v 2.250000 2.000000 4.500000 +v 1.500000 1.750000 4.500000 +v 1.000000 11.000000 3.500000 +v -1.000000 11.000000 2.500000 +v -1.000000 11.000000 3.500000 +v 1.000000 1.000000 2.500000 +v 1.000000 1.000000 3.500000 +v -1.000000 1.000000 3.500000 +v -1.000000 1.000000 2.500000 +v 1.000000 11.000000 2.500000 +v 3.500000 1.250000 4.500000 +v 3.250000 2.000000 4.500000 +v 2.500000 1.750000 4.500000 +v 1.750000 2.000000 2.500000 +v 1.750000 2.000000 4.500000 +v 2.500000 1.250000 2.500000 +v 2.500000 1.750000 4.500000 +v 1.500000 1.250000 2.500000 +v 2.500000 1.750000 2.500000 +v 1.750000 1.000000 2.500000 +v 2.250000 1.000000 4.500000 +v 1.750000 1.000000 4.500000 +v 2.250000 1.000000 2.500000 +v 1.500000 1.750000 2.500000 +v 1.500000 1.250000 4.500000 +v 2.750000 2.000000 2.500000 +v 2.750000 2.000000 4.500000 +v 3.500000 1.250000 2.500000 +v 3.500000 1.750000 4.500000 +v 2.500000 1.250000 2.500000 +v 3.500000 1.750000 2.500000 +v 2.750000 1.000000 2.500000 +v 3.250000 1.000000 4.500000 +v 2.750000 1.000000 4.500000 +v 3.250000 1.000000 2.500000 +v 2.500000 1.750000 2.500000 +v 2.500000 1.250000 4.500000 +v -0.500000 2.000000 0.500000 +v 0.500000 2.000000 -0.500000 +v -0.500000 2.000000 -0.500000 +v -2.500000 1.250000 4.500000 +v -2.750000 2.000000 4.500000 +v -3.500000 1.750000 4.500000 +v -1.500000 1.250000 4.500000 +v -1.750000 2.000000 4.500000 +v -2.500000 1.750000 4.500000 +v -3.250000 2.000000 2.500000 +v -3.250000 2.000000 4.500000 +v -2.500000 1.250000 2.500000 +v -2.500000 1.750000 4.500000 +v -3.500000 1.250000 2.500000 +v -2.500000 1.750000 2.500000 +v -3.250000 1.000000 2.500000 +v -2.750000 1.000000 4.500000 +v -3.250000 1.000000 4.500000 +v -2.750000 1.000000 2.500000 +v -3.500000 1.750000 2.500000 +v -3.500000 1.250000 4.500000 +v -2.250000 2.000000 2.500000 +v -2.250000 2.000000 4.500000 +v -1.500000 1.250000 2.500000 +v -1.500000 1.750000 4.500000 +v -2.500000 1.250000 2.500000 +v -1.500000 1.750000 2.500000 +v -2.250000 1.000000 2.500000 +v -1.750000 1.000000 4.500000 +v -2.250000 1.000000 4.500000 +v -1.750000 1.000000 2.500000 +v -2.500000 1.750000 2.500000 +v -2.500000 1.250000 4.500000 +v 1.500000 1.000000 2.500000 +v 2.500000 1.000000 2.500000 +v -2.500000 1.000000 2.500000 +v -1.500000 1.000000 2.500000 +v -2.500000 1.000000 -2.500000 +v -1.500000 1.000000 -2.500000 +v 2.500000 1.000000 -2.500000 +v 1.500000 1.000000 -2.500000 +v 2.250000 2.000000 2.500000 +v 3.250000 2.000000 2.500000 +v 0.500000 2.000000 0.500000 +v -2.750000 2.000000 2.500000 +v -1.750000 2.000000 2.500000 +v 3.025888 2.150888 2.661612 +v 3.125000 2.000000 2.750000 +v 3.088388 2.000000 2.661612 +v 3.088388 2.000000 2.838388 +v 2.963388 2.088388 2.875000 +v 3.000000 2.000000 2.875000 +v 2.900888 2.025888 2.661612 +v 3.000000 2.000000 2.625000 +v 2.911612 2.000000 2.661612 +v 2.963388 2.088388 2.625000 +v 3.051777 2.176777 2.750000 +v 2.900888 2.025888 2.838388 +v 2.911612 2.000000 2.838388 +v 2.875000 2.213388 2.838388 +v 3.025888 2.150888 2.838388 +v 2.875000 2.036612 2.661612 +v 2.875000 2.125000 2.625000 +v 2.875000 2.250000 2.750000 +v 2.875000 2.036612 2.838388 +v 2.875000 2.000000 2.750000 +v 1.000000 2.125000 2.625000 +v 1.000000 2.036612 2.661612 +v 1.000000 2.213388 2.661612 +v 2.875000 2.213388 2.661612 +v 1.000000 2.000000 2.750000 +v 1.000000 2.213388 2.838388 +v 2.875000 2.125000 2.875000 +v 1.000000 2.036612 2.838388 +v 1.000000 2.250000 2.750000 +v 1.000000 2.125000 2.875000 +v 2.088388 2.000000 3.161612 +v 2.051777 2.176777 3.250000 +v 2.125000 2.000000 3.250000 +v 2.025888 2.150888 3.338388 +v 2.000000 2.000000 3.375000 +v 2.088388 2.000000 3.338388 +v 1.900888 2.025888 3.161612 +v 2.000000 2.000000 3.125000 +v 1.911612 2.000000 3.161612 +v 1.963388 2.088388 3.125000 +v 1.963388 2.088388 3.375000 +v 1.911612 2.000000 3.338388 +v 1.875000 2.125000 3.375000 +v 1.875000 2.036612 3.161612 +v 1.875000 2.213388 3.161612 +v 2.025888 2.150888 3.161612 +v 1.875000 2.250000 3.250000 +v 1.875000 2.036612 3.338388 +v 1.900888 2.025888 3.338388 +v 1.875000 2.000000 3.250000 +v 1.000000 2.125000 3.125000 +v 1.875000 2.125000 3.125000 +v 1.000000 2.036612 3.161612 +v 1.000000 2.213388 3.161612 +v 1.000000 2.000000 3.250000 +v 1.000000 2.213388 3.338388 +v 1.875000 2.213388 3.338388 +v 1.000000 2.036612 3.338388 +v 1.000000 2.250000 3.250000 +v 1.000000 2.125000 3.375000 +v -3.088388 2.000000 3.338389 +v -3.051777 2.176777 3.250000 +v -3.125000 2.000000 3.250000 +v -3.088388 2.000000 3.161612 +v -2.963388 2.088388 3.125000 +v -3.000000 2.000000 3.125000 +v -2.900888 2.025888 3.338389 +v -3.000000 2.000000 3.375000 +v -2.911612 2.000000 3.338389 +v -2.963388 2.088388 3.375000 +v -3.025888 2.150888 3.161612 +v -2.900888 2.025888 3.161612 +v -2.911612 2.000000 3.161612 +v -2.875000 2.125000 3.125000 +v -2.875000 2.036612 3.338389 +v -2.875000 2.125000 3.375000 +v -3.025888 2.150888 3.338389 +v -2.875000 2.250000 3.250000 +v -2.875000 2.036612 3.161612 +v -2.875000 2.000000 3.250000 +v -1.000000 2.125000 3.375000 +v -1.000000 2.036612 3.338388 +v -1.000000 2.213388 3.338388 +v -2.875000 2.213388 3.338389 +v -1.000000 2.000000 3.250000 +v -1.000000 2.213388 3.161612 +v -2.875000 2.213388 3.161612 +v -1.000000 2.036612 3.161612 +v -1.000000 2.250000 3.250000 +v -1.000000 2.125000 3.125000 +v -2.088388 2.000000 2.838389 +v -2.051777 2.176777 2.750000 +v -2.125000 2.000000 2.750000 +v -2.025888 2.150888 2.661612 +v -2.000000 2.000000 2.625000 +v -2.088388 2.000000 2.661612 +v -1.900888 2.025888 2.838389 +v -2.000000 2.000000 2.875000 +v -1.911612 2.000000 2.838389 +v -1.963388 2.088388 2.875000 +v -1.900888 2.025888 2.661612 +v -1.911612 2.000000 2.661612 +v -1.875000 2.213388 2.661612 +v -1.963388 2.088388 2.625000 +v -1.875000 2.125000 2.875000 +v -2.025888 2.150888 2.838389 +v -1.875000 2.250000 2.750000 +v -1.875000 2.036612 2.661612 +v -1.875000 2.213388 2.838389 +v -1.875000 2.000000 2.750000 +v -1.875000 2.036612 2.838389 +v -1.000000 2.125000 2.875000 +v -1.000000 2.036612 2.838388 +v -1.000000 2.213388 2.838388 +v -1.000000 2.000000 2.750000 +v -1.000000 2.213388 2.661612 +v -1.875000 2.125000 2.625000 +v -1.000000 2.036612 2.661612 +v -1.000000 2.250000 2.750000 +v -1.000000 2.125000 2.625000 +vt 0.102564 0.719101 +vt -0.000000 0.988764 +vt -0.000000 0.539326 +vt 0.102564 0.269663 +vt 0.153846 0.224719 +vt 0.153846 0.269663 +vt 0.102564 0.808989 +vt 0.256410 0.988764 +vt 0.153846 0.808989 +vt 0.256410 0.539326 +vt 0.153846 0.719101 +vt 0.256410 0.539326 +vt -0.000000 0.539326 +vt 0.153846 0.494382 +vt 0.256410 0.539326 +vt -0.000000 0.539326 +vt 0.153846 0.494382 +vt 0.256410 0.539326 +vt -0.000000 0.539326 +vt 0.153846 0.494382 +vt 0.153846 0.494382 +vt 0.102564 0.269663 +vt 0.153846 0.224719 +vt 0.153846 0.269663 +vt 0.102564 0.269663 +vt 0.153846 0.224719 +vt 0.153846 0.269663 +vt 0.102564 0.269663 +vt 0.153846 0.224719 +vt 0.153846 0.269663 +vt 0.102564 0.449438 +vt 0.153846 0.269663 +vt 0.153846 0.449438 +vt -0.000000 0.179775 +vt 0.102564 0.269663 +vt -0.000000 0.269663 +vt 0.153846 0.000000 +vt 0.102564 0.179775 +vt 0.102564 -0.000000 +vt 0.256410 0.269663 +vt 0.153846 0.179775 +vt 0.256410 0.179775 +vt 0.051282 0.359551 +vt 0.051282 0.449438 +vt 0.205128 0.359551 +vt 0.205128 0.449438 +vt 0.205128 0.089888 +vt 0.205128 0.000000 +vt 0.051282 0.089888 +vt 0.051282 -0.000000 +vt 0.794872 0.359551 +vt 0.769231 0.089888 +vt 0.794872 0.089888 +vt 0.717949 0.089888 +vt 0.743590 0.359551 +vt 0.717949 0.359551 +vt 0.743590 0.089888 +vt 0.717949 -0.000000 +vt 0.769231 0.044944 +vt 0.666667 0.089888 +vt 0.666667 0.359551 +vt 0.769231 0.359551 +vt 0.717949 0.449438 +vt 0.769231 0.404494 +vt 0.615385 0.651685 +vt 0.602564 0.719101 +vt 0.564103 0.696629 +vt 0.358974 0.898876 +vt 0.256410 0.988764 +vt 0.256410 0.898876 +vt 0.410256 -0.000000 +vt 0.358974 -0.000000 +vt 0.564103 -0.000000 +vt 0.512821 0.898876 +vt 0.512821 -0.000000 +vt 0.410256 0.898876 +vt 0.256410 -0.000000 +vt 0.615385 0.292135 +vt 0.602564 0.359551 +vt 0.564103 0.337079 +vt 0.564103 0.449438 +vt 0.666667 0.494382 +vt 0.564103 0.494382 +vt 0.666667 0.382022 +vt 0.564103 0.426966 +vt 0.564103 0.382022 +vt 0.666667 0.651685 +vt 0.653846 0.719101 +vt 0.615385 0.696629 +vt 0.666667 0.584270 +vt 0.564103 0.629214 +vt 0.564103 0.584270 +vt 0.666667 0.561798 +vt 0.666667 0.359551 +vt 0.564103 0.359551 +vt 0.564103 0.516854 +vt 0.666667 0.516854 +vt 0.666667 0.426966 +vt 0.564103 0.561798 +vt 0.564103 0.089888 +vt 0.666667 0.134831 +vt 0.564103 0.134831 +vt 0.666667 0.022472 +vt 0.564103 0.067416 +vt 0.564103 0.022472 +vt 0.666667 0.292135 +vt 0.653846 0.359551 +vt 0.615385 0.337079 +vt 0.666667 0.224719 +vt 0.564103 0.269663 +vt 0.564103 0.224719 +vt 0.666667 0.202247 +vt 0.666667 0.000000 +vt 0.564103 -0.000000 +vt 0.564103 0.157303 +vt 0.666667 0.157303 +vt 0.666667 0.067416 +vt 0.564103 0.202247 +vt 0.102564 0.808989 +vt 0.153846 0.719101 +vt 0.153846 0.808989 +vt 0.615385 0.651685 +vt 0.602564 0.719101 +vt 0.564103 0.696629 +vt 0.615385 0.292135 +vt 0.602564 0.359551 +vt 0.564103 0.337079 +vt 0.564103 0.449438 +vt 0.666667 0.494382 +vt 0.564103 0.494382 +vt 0.666667 0.382022 +vt 0.564103 0.426966 +vt 0.564103 0.382022 +vt 0.666667 0.651685 +vt 0.653846 0.719101 +vt 0.615385 0.696629 +vt 0.666667 0.584270 +vt 0.564103 0.629214 +vt 0.564103 0.584270 +vt 0.666667 0.561798 +vt 0.666667 0.359551 +vt 0.564103 0.359551 +vt 0.564103 0.516854 +vt 0.666667 0.516854 +vt 0.666667 0.426966 +vt 0.564103 0.561798 +vt 0.564103 0.089888 +vt 0.666667 0.134831 +vt 0.564103 0.134831 +vt 0.666667 0.022472 +vt 0.564103 0.067416 +vt 0.564103 0.022472 +vt 0.666667 0.292135 +vt 0.653846 0.359551 +vt 0.615385 0.337079 +vt 0.666667 0.224719 +vt 0.564103 0.269663 +vt 0.564103 0.224719 +vt 0.666667 0.202247 +vt 0.666667 0.000000 +vt 0.564103 -0.000000 +vt 0.564103 0.157303 +vt 0.666667 0.157303 +vt 0.666667 0.067416 +vt 0.564103 0.202247 +vt 0.102564 0.224719 +vt 0.205128 0.449438 +vt 0.256410 0.449438 +vt 0.000000 0.449438 +vt 0.051282 0.449438 +vt 0.102564 0.494382 +vt 0.205128 0.449438 +vt 0.256410 0.449438 +vt -0.000000 0.449438 +vt 0.051282 0.449438 +vt 0.102564 0.494382 +vt 0.205128 0.449438 +vt 0.256410 0.449438 +vt 0.000000 0.449438 +vt 0.051282 0.449438 +vt 0.102564 0.494382 +vt 0.256410 0.449438 +vt -0.000000 0.449438 +vt 0.102564 0.494382 +vt 0.102564 0.224719 +vt 0.102564 0.224719 +vt 0.102564 0.224719 +vt -0.000000 0.359551 +vt 0.256410 0.359551 +vt 0.256410 0.089888 +vt -0.000000 0.089888 +vt 0.769231 -0.000000 +vt 0.769231 0.449438 +vt 0.564103 0.651685 +vt 0.576923 0.629214 +vt 0.602564 0.629214 +vt 0.615385 0.696629 +vt 0.576923 0.719101 +vt 0.358974 0.988764 +vt 0.564103 0.898876 +vt 0.564103 0.292135 +vt 0.576923 0.269663 +vt 0.602564 0.269663 +vt 0.615385 0.337079 +vt 0.576923 0.359551 +vt 0.666667 0.449438 +vt 0.615385 0.651685 +vt 0.628205 0.629214 +vt 0.653846 0.629214 +vt 0.666667 0.696629 +vt 0.628205 0.719101 +vt 0.666667 0.629214 +vt 0.666667 0.089888 +vt 0.615385 0.292135 +vt 0.628205 0.269663 +vt 0.653846 0.269663 +vt 0.666667 0.337079 +vt 0.628205 0.359551 +vt 0.666667 0.269663 +vt 0.102564 0.719101 +vt 0.564103 0.651685 +vt 0.576923 0.629214 +vt 0.602564 0.629214 +vt 0.615385 0.696629 +vt 0.576923 0.719101 +vt 0.564103 0.292135 +vt 0.576923 0.269663 +vt 0.602564 0.269663 +vt 0.615385 0.337079 +vt 0.576923 0.359551 +vt 0.666667 0.449438 +vt 0.615385 0.651685 +vt 0.628205 0.629214 +vt 0.653846 0.629214 +vt 0.666667 0.696629 +vt 0.628205 0.719101 +vt 0.666667 0.629214 +vt 0.666667 0.089888 +vt 0.615385 0.292135 +vt 0.628205 0.269663 +vt 0.653846 0.269663 +vt 0.666667 0.337079 +vt 0.628205 0.359551 +vt 0.666667 0.269663 +vt 0.634615 0.904494 +vt 0.641026 0.921348 +vt 0.634615 0.921348 +vt 0.647436 0.921348 +vt 0.653846 0.904494 +vt 0.653846 0.915730 +vt 0.621795 0.904494 +vt 0.628205 0.915730 +vt 0.621795 0.910112 +vt 0.628205 0.904494 +vt 0.641026 0.904494 +vt 0.660256 0.904494 +vt 0.660256 0.910112 +vt 0.647436 0.887640 +vt 0.647436 0.904494 +vt 0.621795 0.898876 +vt 0.628205 0.893258 +vt 0.641026 0.887640 +vt 0.660256 0.898876 +vt 0.666667 0.904494 +vt 0.615385 0.904494 +vt 0.621795 0.887640 +vt 0.628205 0.719101 +vt 0.628205 0.887640 +vt 0.615385 0.887640 +vt 0.621795 0.719101 +vt 0.634615 0.719101 +vt 0.634615 0.887640 +vt 0.660256 0.887640 +vt 0.666667 0.719101 +vt 0.666667 0.887640 +vt 0.647436 0.719101 +vt 0.653846 0.887640 +vt 0.660256 0.719101 +vt 0.641026 0.719101 +vt 0.653846 0.719101 +vt 0.583333 0.831461 +vt 0.589744 0.814607 +vt 0.589744 0.831461 +vt 0.596154 0.814607 +vt 0.602564 0.825843 +vt 0.596154 0.831461 +vt 0.570513 0.814607 +vt 0.576923 0.825843 +vt 0.570513 0.820225 +vt 0.576923 0.814607 +vt 0.602564 0.814607 +vt 0.608974 0.820225 +vt 0.602564 0.803371 +vt 0.570513 0.808989 +vt 0.583333 0.797753 +vt 0.583333 0.814607 +vt 0.589744 0.797753 +vt 0.608974 0.808989 +vt 0.608974 0.814607 +vt 0.615385 0.814607 +vt 0.564103 0.814607 +vt 0.570513 0.797753 +vt 0.576923 0.719101 +vt 0.576923 0.797753 +vt 0.564103 0.797753 +vt 0.570513 0.719101 +vt 0.583333 0.719101 +vt 0.608974 0.797753 +vt 0.615385 0.719101 +vt 0.615385 0.797753 +vt 0.596154 0.719101 +vt 0.596154 0.797753 +vt 0.602564 0.797753 +vt 0.608974 0.719101 +vt 0.589744 0.719101 +vt 0.602564 0.719101 +vt 0.634615 0.921348 +vt 0.641026 0.904494 +vt 0.641026 0.921348 +vt 0.647436 0.921348 +vt 0.653846 0.904494 +vt 0.653846 0.915730 +vt 0.621795 0.904494 +vt 0.628205 0.915730 +vt 0.621795 0.910112 +vt 0.628205 0.904494 +vt 0.647436 0.904494 +vt 0.660256 0.904494 +vt 0.660256 0.910112 +vt 0.653846 0.893258 +vt 0.621795 0.898876 +vt 0.628205 0.893258 +vt 0.634615 0.904494 +vt 0.641026 0.887640 +vt 0.660256 0.898876 +vt 0.666667 0.904494 +vt 0.615385 0.904494 +vt 0.621795 0.887640 +vt 0.628205 0.719101 +vt 0.628205 0.887640 +vt 0.615385 0.887640 +vt 0.621795 0.719101 +vt 0.634615 0.719101 +vt 0.634615 0.887640 +vt 0.660256 0.887640 +vt 0.666667 0.719101 +vt 0.666667 0.887640 +vt 0.647436 0.719101 +vt 0.647436 0.887640 +vt 0.653846 0.887640 +vt 0.660256 0.719101 +vt 0.641026 0.719101 +vt 0.653846 0.719101 +vt 0.583333 0.831461 +vt 0.589744 0.814607 +vt 0.589744 0.831461 +vt 0.596154 0.814607 +vt 0.602564 0.825843 +vt 0.596154 0.831461 +vt 0.570513 0.814607 +vt 0.576923 0.825843 +vt 0.570513 0.820225 +vt 0.576923 0.814607 +vt 0.608974 0.814607 +vt 0.608974 0.820225 +vt 0.596154 0.797753 +vt 0.602564 0.814607 +vt 0.576923 0.803371 +vt 0.583333 0.814607 +vt 0.589744 0.797753 +vt 0.608974 0.808989 +vt 0.583333 0.797753 +vt 0.615385 0.814607 +vt 0.564103 0.814607 +vt 0.570513 0.808989 +vt 0.570513 0.797753 +vt 0.576923 0.719101 +vt 0.576923 0.797753 +vt 0.564103 0.797753 +vt 0.570513 0.719101 +vt 0.583333 0.719101 +vt 0.608974 0.797753 +vt 0.615385 0.719101 +vt 0.615385 0.797753 +vt 0.596154 0.719101 +vt 0.602564 0.797753 +vt 0.608974 0.719101 +vt 0.589744 0.719101 +vt 0.602564 0.719101 +vt 0.653846 0.893258 +vt 0.615385 0.719101 +vt 0.576923 0.803371 +vt 0.564103 0.719101 +vt 0.615385 0.719101 +vt 0.602564 0.803371 +vt 0.564103 0.719101 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.4472 -0.8944 -0.0000 +vn 0.0000 -0.8944 -0.4472 +vn 0.0000 -0.8944 0.4472 +vn 0.4472 -0.8944 -0.0000 +vn 0.0000 0.7071 -0.7071 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.5294 0.5294 -0.6630 +vn 0.9239 0.3827 -0.0000 +vn 0.7150 0.2962 -0.6333 +vn 0.7150 0.2962 0.6333 +vn 0.0671 0.0671 0.9955 +vn 0.0948 0.0393 0.9947 +vn -0.4617 -0.4617 -0.7574 +vn 0.0948 0.0393 -0.9947 +vn -0.6303 -0.2611 -0.7311 +vn 0.0671 0.0671 -0.9955 +vn -0.4617 -0.4617 0.7574 +vn -0.6303 -0.2611 0.7311 +vn 0.1448 0.7194 0.6794 +vn 0.5293 0.5293 0.6630 +vn -0.1363 -0.6737 -0.7263 +vn 0.0196 0.0473 -0.9987 +vn 0.1866 0.9824 0.0000 +vn -0.1363 -0.6737 0.7263 +vn -0.1944 -0.9809 -0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.1448 0.7194 -0.6794 +vn 0.0000 0.7071 0.7071 +vn 0.0196 0.0473 0.9987 +vn 0.0000 -0.7071 0.7071 +vn 0.5293 0.5293 -0.6630 +vn -0.7150 0.2962 0.6333 +vn -0.9239 0.3827 -0.0000 +vn -0.7150 0.2962 -0.6333 +vn -0.0671 0.0671 -0.9955 +vn -0.0948 0.0393 -0.9947 +vn 0.4617 -0.4617 0.7574 +vn -0.0948 0.0393 0.9947 +vn 0.6303 -0.2611 0.7311 +vn -0.0671 0.0671 0.9955 +vn -0.5294 0.5293 -0.6630 +vn 0.4617 -0.4617 -0.7574 +vn 0.6303 -0.2611 -0.7311 +vn -0.0196 0.0473 -0.9987 +vn 0.1363 -0.6737 0.7263 +vn -0.0196 0.0473 0.9987 +vn -0.5293 0.5293 0.6630 +vn -0.1866 0.9824 -0.0000 +vn 0.1363 -0.6737 -0.7263 +vn 0.1944 -0.9809 -0.0000 +vn -0.1448 0.7194 0.6794 +vn -0.1448 0.7194 -0.6794 +vn -0.5293 0.5294 -0.6630 +s off +f 1219/1951/237 1220/1952/237 1221/1953/237 +f 1222/1954/238 1223/1955/238 1219/1956/238 +f 1224/1957/237 1225/1958/237 1220/1952/237 +f 1226/1959/237 1227/1960/237 1225/1958/237 +f 1222/1961/237 1221/1953/237 1227/1960/237 +f 1221/1962/239 1220/1963/239 1228/1964/239 +f 1220/1965/238 1225/1966/238 1229/1967/238 +f 1225/1968/240 1227/1969/240 1230/1970/240 +f 1227/1960/241 1221/1953/241 1231/1971/241 +f 1224/1972/241 1232/1973/241 1226/1974/241 +f 1226/1975/239 1233/1976/239 1222/1977/239 +f 1219/1978/240 1234/1979/240 1224/1980/240 +f 1235/1981/242 1233/1982/242 1231/1983/242 +f 1236/1984/242 1223/1985/242 1228/1986/242 +f 1237/1987/242 1234/1988/242 1229/1989/242 +f 1238/1990/242 1232/1991/242 1230/1992/242 +f 1239/1993/243 1228/1986/243 1223/1985/243 +f 1239/1993/244 1235/1981/244 1240/1994/244 +f 1231/1983/245 1241/1995/245 1242/1996/245 +f 1238/1990/243 1241/1995/243 1233/1982/243 +f 1243/1997/246 1230/1992/246 1232/1991/246 +f 1243/1997/245 1237/1987/245 1244/1998/245 +f 1229/1989/244 1245/1999/244 1246/2000/244 +f 1236/1984/246 1245/1999/246 1234/1988/246 +f 1247/2001/240 1248/2002/240 1249/2003/240 +f 1250/2004/237 1251/2005/237 1252/2006/237 +f 1253/2007/241 1254/2008/241 1248/2009/241 +f 1254/2010/239 1252/2006/239 1255/2011/239 +f 1256/2012/247 1253/2007/247 1248/2002/247 +f 1255/2013/238 1251/2005/238 1256/2014/238 +f 1257/2015/239 1258/2016/239 1259/2017/239 +f 1260/2018/237 1261/2019/237 1262/2020/237 +f 1263/2021/241 1260/2018/241 1264/2022/241 +f 1265/2023/238 1261/2024/238 1266/2025/238 +f 1266/2025/240 1267/2026/240 1263/2021/240 +f 1264/2022/239 1262/2020/239 1265/2027/239 +f 1268/2028/239 1269/2029/239 1270/2030/239 +f 1258/2031/237 1271/2032/237 1272/2033/237 +f 1273/2034/241 1274/2035/241 1257/2036/241 +f 1275/2037/240 1271/2038/240 1276/2039/240 +f 1277/2040/242 1278/2041/242 1279/2042/242 +f 1279/2042/248 1275/2043/248 1277/2040/248 +f 1280/2044/249 1257/2036/249 1278/2045/249 +f 1259/2046/250 1271/2032/250 1281/2047/250 +f 1276/2048/251 1258/2031/251 1274/2035/251 +f 1282/2049/238 1281/2047/238 1275/2043/238 +f 1269/2050/237 1283/2051/237 1284/2052/237 +f 1285/2053/241 1286/2054/241 1268/2055/241 +f 1287/2056/240 1283/2057/240 1288/2058/240 +f 1289/2059/242 1290/2060/242 1291/2061/242 +f 1291/2061/248 1287/2062/248 1289/2059/248 +f 1292/2063/249 1268/2055/249 1290/2064/249 +f 1270/2065/250 1283/2051/250 1293/2066/250 +f 1288/2067/251 1269/2050/251 1286/2054/251 +f 1294/2068/238 1293/2066/238 1287/2062/238 +f 1295/2069/237 1296/2070/237 1297/2071/237 +f 1298/2072/239 1299/2073/239 1300/2074/239 +f 1301/2075/239 1302/2076/239 1303/2077/239 +f 1299/2078/237 1304/2079/237 1305/2080/237 +f 1306/2081/241 1307/2082/241 1298/2083/241 +f 1308/2084/240 1304/2085/240 1309/2086/240 +f 1310/2087/242 1311/2088/242 1312/2089/242 +f 1312/2089/248 1308/2090/248 1310/2087/248 +f 1313/2091/249 1298/2083/249 1311/2092/249 +f 1300/2093/250 1304/2079/250 1314/2094/250 +f 1309/2095/251 1299/2078/251 1307/2082/251 +f 1315/2096/238 1314/2094/238 1308/2090/238 +f 1302/2097/237 1316/2098/237 1317/2099/237 +f 1318/2100/241 1319/2101/241 1301/2102/241 +f 1320/2103/240 1316/2104/240 1321/2105/240 +f 1322/2106/242 1323/2107/242 1324/2108/242 +f 1324/2108/248 1320/2109/248 1322/2106/248 +f 1325/2110/249 1301/2102/249 1323/2111/249 +f 1303/2112/250 1316/2098/250 1326/2113/250 +f 1321/2114/251 1302/2097/251 1319/2101/251 +f 1327/2115/238 1326/2113/238 1320/2109/238 +f 1219/1951/237 1224/1957/237 1220/1952/237 +f 1222/1954/238 1233/2116/238 1223/1955/238 +f 1224/1957/237 1226/1959/237 1225/1958/237 +f 1226/1959/237 1222/1961/237 1227/1960/237 +f 1222/1961/237 1219/1951/237 1221/1953/237 +f 1328/2117/239 1329/2118/239 1221/1962/239 +f 1220/1963/239 1330/2119/239 1331/2120/239 +f 1220/1963/239 1331/2120/239 1236/2121/239 +f 1228/1964/239 1328/2117/239 1221/1962/239 +f 1220/1963/239 1236/2121/239 1228/1964/239 +f 1246/2122/238 1330/2123/238 1220/1965/238 +f 1225/1966/238 1332/2124/238 1244/2125/238 +f 1225/1966/238 1244/2125/238 1237/2126/238 +f 1229/1967/238 1246/2122/238 1220/1965/238 +f 1225/1966/238 1237/2126/238 1229/1967/238 +f 1333/2127/240 1332/2128/240 1225/1968/240 +f 1227/1969/240 1334/2129/240 1335/2130/240 +f 1227/1969/240 1335/2130/240 1238/2131/240 +f 1230/1970/240 1333/2127/240 1225/1968/240 +f 1227/1969/240 1238/2131/240 1230/1970/240 +f 1242/1996/241 1334/2132/241 1227/1960/241 +f 1221/1953/241 1329/2133/241 1240/1994/241 +f 1221/1953/241 1240/1994/241 1235/2134/241 +f 1231/1971/241 1242/1996/241 1227/1960/241 +f 1221/1953/241 1235/2134/241 1231/1971/241 +f 1224/1972/241 1234/2135/241 1232/1973/241 +f 1226/1975/239 1232/2136/239 1233/1976/239 +f 1219/1978/240 1223/2137/240 1234/1979/240 +f 1235/1981/242 1223/1985/242 1233/1982/242 +f 1236/1984/242 1234/1988/242 1223/1985/242 +f 1237/1987/242 1232/1991/242 1234/1988/242 +f 1238/1990/242 1233/1982/242 1232/1991/242 +f 1239/1993/243 1328/2138/243 1228/1986/243 +f 1239/1993/244 1223/1985/244 1235/1981/244 +f 1231/1983/245 1233/1982/245 1241/1995/245 +f 1238/1990/243 1335/2139/243 1241/1995/243 +f 1243/1997/246 1333/2140/246 1230/1992/246 +f 1243/1997/245 1232/1991/245 1237/1987/245 +f 1229/1989/244 1234/1988/244 1245/1999/244 +f 1236/1984/246 1331/2141/246 1245/1999/246 +f 1247/2001/240 1256/2012/240 1248/2002/240 +f 1250/2004/237 1253/2007/237 1251/2005/237 +f 1250/2004/241 1254/2008/241 1253/2007/241 +f 1254/2008/241 1249/2142/241 1248/2009/241 +f 1254/2010/239 1250/2004/239 1252/2006/239 +f 1256/2012/247 1251/2005/247 1253/2007/247 +f 1256/2014/238 1247/2143/238 1255/2013/238 +f 1255/2013/238 1252/2006/238 1251/2005/238 +f 1259/2017/239 1282/2144/239 1279/2145/239 +f 1279/2145/239 1278/2146/239 1257/2015/239 +f 1257/2015/239 1274/2147/239 1258/2016/239 +f 1258/2016/239 1272/2148/239 1259/2017/239 +f 1259/2017/239 1279/2145/239 1257/2015/239 +f 1260/2018/237 1267/2149/237 1261/2019/237 +f 1263/2021/241 1267/2026/241 1260/2018/241 +f 1265/2023/238 1262/2150/238 1261/2024/238 +f 1266/2025/240 1261/2024/240 1267/2026/240 +f 1264/2022/239 1260/2018/239 1262/2020/239 +f 1270/2030/239 1294/2151/239 1291/2152/239 +f 1291/2152/239 1290/2153/239 1268/2028/239 +f 1268/2028/239 1286/2154/239 1269/2029/239 +f 1269/2029/239 1284/2155/239 1270/2030/239 +f 1270/2030/239 1291/2152/239 1268/2028/239 +f 1258/2031/237 1336/2156/237 1271/2032/237 +f 1273/2034/241 1276/2048/241 1274/2035/241 +f 1276/2039/240 1273/2157/240 1280/2158/240 +f 1280/2158/240 1277/2159/240 1275/2037/240 +f 1275/2037/240 1281/2160/240 1271/2038/240 +f 1271/2038/240 1336/2161/240 1276/2039/240 +f 1276/2039/240 1280/2158/240 1275/2037/240 +f 1277/2040/242 1280/2162/242 1278/2041/242 +f 1279/2042/248 1282/2049/248 1275/2043/248 +f 1280/2044/249 1273/2034/249 1257/2036/249 +f 1259/2046/250 1272/2033/250 1271/2032/250 +f 1276/2048/251 1336/2156/251 1258/2031/251 +f 1282/2049/238 1259/2046/238 1281/2047/238 +f 1269/2050/237 1337/2163/237 1283/2051/237 +f 1285/2053/241 1288/2067/241 1286/2054/241 +f 1288/2058/240 1285/2164/240 1292/2165/240 +f 1292/2165/240 1289/2166/240 1287/2056/240 +f 1287/2056/240 1293/2167/240 1283/2057/240 +f 1283/2057/240 1337/2168/240 1288/2058/240 +f 1288/2058/240 1292/2165/240 1287/2056/240 +f 1289/2059/242 1292/2169/242 1290/2060/242 +f 1291/2061/248 1294/2068/248 1287/2062/248 +f 1292/2063/249 1285/2053/249 1268/2055/249 +f 1270/2065/250 1284/2052/250 1283/2051/250 +f 1288/2067/251 1337/2163/251 1269/2050/251 +f 1294/2068/238 1270/2065/238 1293/2066/238 +f 1295/2069/237 1338/2170/237 1296/2070/237 +f 1300/2074/239 1315/2171/239 1312/2172/239 +f 1312/2172/239 1311/2173/239 1298/2072/239 +f 1298/2072/239 1307/2174/239 1299/2073/239 +f 1299/2073/239 1305/2175/239 1300/2074/239 +f 1300/2074/239 1312/2172/239 1298/2072/239 +f 1303/2077/239 1327/2176/239 1324/2177/239 +f 1324/2177/239 1323/2178/239 1301/2075/239 +f 1301/2075/239 1319/2179/239 1302/2076/239 +f 1302/2076/239 1317/2180/239 1303/2077/239 +f 1303/2077/239 1324/2177/239 1301/2075/239 +f 1299/2078/237 1339/2181/237 1304/2079/237 +f 1306/2081/241 1309/2095/241 1307/2082/241 +f 1309/2086/240 1306/2182/240 1313/2183/240 +f 1313/2183/240 1310/2184/240 1308/2084/240 +f 1308/2084/240 1314/2185/240 1304/2085/240 +f 1304/2085/240 1339/2186/240 1309/2086/240 +f 1309/2086/240 1313/2183/240 1308/2084/240 +f 1310/2087/242 1313/2187/242 1311/2088/242 +f 1312/2089/248 1315/2096/248 1308/2090/248 +f 1313/2091/249 1306/2081/249 1298/2083/249 +f 1300/2093/250 1305/2080/250 1304/2079/250 +f 1309/2095/251 1339/2181/251 1299/2078/251 +f 1315/2096/238 1300/2093/238 1314/2094/238 +f 1302/2097/237 1340/2188/237 1316/2098/237 +f 1318/2100/241 1321/2114/241 1319/2101/241 +f 1321/2105/240 1318/2189/240 1325/2190/240 +f 1325/2190/240 1322/2191/240 1320/2103/240 +f 1320/2103/240 1326/2192/240 1316/2104/240 +f 1316/2104/240 1340/2193/240 1321/2105/240 +f 1321/2105/240 1325/2190/240 1320/2103/240 +f 1322/2106/242 1325/2194/242 1323/2107/242 +f 1324/2108/248 1327/2115/248 1320/2109/248 +f 1325/2110/249 1318/2100/249 1301/2102/249 +f 1303/2112/250 1317/2099/250 1316/2098/250 +f 1321/2114/251 1340/2188/251 1302/2097/251 +f 1327/2115/238 1303/2112/238 1326/2113/238 +s 1 +f 1341/2195/252 1342/2196/253 1343/2197/254 +f 1344/2198/255 1345/2199/256 1346/2200/257 +f 1347/2201/258 1348/2202/259 1349/2203/260 +f 1350/2204/261 1343/2197/254 1348/2202/259 +f 1351/2205/251 1344/2198/255 1342/2196/253 +f 1346/2200/257 1352/2206/262 1353/2207/263 +f 1354/2208/264 1345/2199/256 1355/2209/265 +f 1356/2210/266 1350/2204/261 1347/2201/258 +f 1357/2211/267 1341/2195/252 1350/2204/261 +f 1358/2212/268 1355/2209/265 1351/2205/251 +f 1345/2199/256 1359/2213/269 1352/2206/262 +f 1341/2195/252 1358/2212/268 1351/2205/251 +f 1360/2214/270 1353/2207/263 1352/2206/262 +f 1352/2206/262 1359/2213/269 1360/2214/270 +f 1349/2203/260 1360/2215/270 1347/2201/258 +f 1347/2201/258 1360/2215/270 1356/2210/266 +f 1356/2216/266 1361/2217/240 1357/2218/267 +f 1360/2219/270 1362/2220/271 1356/2216/266 +f 1357/2218/267 1363/2221/247 1364/2222/272 +f 1359/2223/269 1365/2224/242 1360/2225/270 +f 1358/2212/268 1366/2226/273 1354/2208/264 +f 1367/2227/274 1368/2228/275 1359/2223/269 +f 1364/2222/272 1369/2229/237 1358/2212/268 +f 1354/2208/264 1370/2230/239 1367/2227/274 +f 1371/2231/254 1372/2232/251 1373/2233/253 +f 1374/2234/265 1375/2235/257 1376/2236/255 +f 1377/2237/258 1378/2238/259 1379/2239/260 +f 1380/2240/261 1371/2231/254 1378/2238/259 +f 1372/2232/251 1376/2236/255 1373/2233/253 +f 1381/2241/256 1382/2242/263 1375/2235/257 +f 1374/2234/265 1383/2243/274 1381/2241/256 +f 1384/2244/266 1380/2240/261 1377/2237/258 +f 1380/2240/261 1385/2245/272 1386/2246/276 +f 1387/2247/268 1374/2234/265 1372/2232/251 +f 1381/2241/256 1388/2248/269 1389/2249/262 +f 1386/2246/276 1387/2247/268 1372/2232/251 +f 1390/2250/270 1382/2242/263 1389/2249/262 +f 1389/2249/262 1388/2248/269 1390/2250/270 +f 1379/2239/260 1390/2251/270 1377/2237/258 +f 1377/2237/258 1390/2251/270 1384/2244/266 +f 1384/2252/266 1391/2253/240 1392/2254/267 +f 1390/2255/270 1393/2256/271 1384/2252/266 +f 1392/2254/267 1394/2257/247 1385/2245/272 +f 1388/2258/269 1395/2259/242 1390/2260/270 +f 1387/2247/268 1396/2261/273 1397/2262/264 +f 1383/2263/274 1398/2264/275 1388/2258/269 +f 1385/2245/272 1399/2265/237 1387/2247/268 +f 1397/2262/264 1400/2266/239 1383/2263/274 +f 1401/2267/277 1402/2268/250 1403/2269/278 +f 1404/2270/279 1405/2271/280 1406/2272/281 +f 1407/2273/282 1408/2274/283 1409/2275/284 +f 1410/2276/285 1401/2267/277 1408/2274/283 +f 1403/2269/278 1411/2277/286 1404/2270/279 +f 1406/2272/281 1412/2278/287 1413/2279/288 +f 1411/2277/286 1414/2280/289 1405/2271/280 +f 1415/2281/290 1410/2276/285 1407/2273/282 +f 1416/2282/291 1417/2283/292 1410/2276/285 +f 1418/2284/293 1411/2277/286 1402/2268/250 +f 1405/2271/280 1419/2285/294 1412/2278/287 +f 1417/2283/292 1418/2284/293 1402/2268/250 +f 1420/2286/295 1413/2279/288 1412/2278/287 +f 1412/2278/287 1419/2285/294 1420/2286/295 +f 1409/2275/284 1420/2287/295 1407/2273/282 +f 1407/2273/282 1420/2287/295 1415/2281/290 +f 1415/2288/290 1421/2289/239 1416/2290/291 +f 1420/2291/295 1422/2292/275 1415/2288/290 +f 1416/2290/291 1423/2293/273 1424/2294/296 +f 1419/2295/294 1425/2296/242 1420/2297/295 +f 1418/2284/293 1426/2298/247 1427/2299/297 +f 1414/2300/289 1428/2301/271 1419/2295/294 +f 1424/2294/296 1429/2302/237 1418/2284/293 +f 1427/2299/297 1430/2303/240 1414/2300/289 +f 1431/2304/277 1432/2305/250 1433/2306/278 +f 1434/2307/298 1435/2308/281 1436/2309/279 +f 1437/2310/282 1438/2311/283 1439/2312/284 +f 1440/2313/285 1431/2304/277 1438/2311/283 +f 1432/2305/250 1436/2309/279 1433/2306/278 +f 1435/2308/281 1441/2314/287 1442/2315/288 +f 1443/2316/297 1444/2317/280 1434/2307/298 +f 1437/2310/282 1445/2318/291 1440/2313/285 +f 1445/2318/291 1446/2319/292 1440/2313/285 +f 1447/2320/293 1434/2307/298 1432/2305/250 +f 1444/2317/280 1448/2321/294 1441/2314/287 +f 1449/2322/296 1432/2305/250 1446/2319/292 +f 1450/2323/295 1442/2315/288 1441/2314/287 +f 1441/2314/287 1448/2321/294 1450/2323/295 +f 1439/2312/284 1450/2324/295 1437/2310/282 +f 1437/2310/282 1450/2324/295 1451/2325/290 +f 1451/2326/290 1452/2327/239 1445/2328/291 +f 1450/2329/295 1453/2330/275 1451/2326/290 +f 1445/2328/291 1454/2331/273 1449/2322/296 +f 1448/2332/294 1455/2333/242 1450/2334/295 +f 1447/2320/293 1456/2335/247 1443/2316/297 +f 1457/2336/289 1458/2337/271 1448/2332/294 +f 1447/2320/293 1454/2331/273 1459/2338/237 +f 1457/2336/289 1456/2335/247 1460/2339/240 +f 1341/2195/252 1351/2205/251 1342/2196/253 +f 1344/2198/255 1355/2209/265 1345/2199/256 +f 1347/2201/258 1350/2204/261 1348/2202/259 +f 1350/2204/261 1341/2195/252 1343/2197/254 +f 1351/2205/251 1355/2209/265 1344/2198/255 +f 1346/2200/257 1345/2199/256 1352/2206/262 +f 1354/2208/264 1367/2340/274 1345/2199/256 +f 1356/2210/266 1357/2211/267 1350/2204/261 +f 1357/2211/267 1364/2222/272 1341/2195/252 +f 1358/2212/268 1354/2208/264 1355/2209/265 +f 1345/2199/256 1367/2340/274 1359/2213/269 +f 1341/2195/252 1364/2222/272 1358/2212/268 +f 1356/2216/266 1362/2220/271 1361/2217/240 +f 1360/2219/270 1365/2341/242 1362/2220/271 +f 1357/2218/267 1361/2217/240 1363/2221/247 +f 1359/2223/269 1368/2228/275 1365/2224/242 +f 1358/2212/268 1369/2229/237 1366/2226/273 +f 1367/2227/274 1370/2230/239 1368/2228/275 +f 1364/2222/272 1363/2221/247 1369/2229/237 +f 1354/2208/264 1366/2226/273 1370/2230/239 +f 1371/2231/254 1386/2246/276 1372/2232/251 +f 1374/2234/265 1381/2241/256 1375/2235/257 +f 1377/2237/258 1380/2240/261 1378/2238/259 +f 1380/2240/261 1386/2246/276 1371/2231/254 +f 1372/2232/251 1374/2234/265 1376/2236/255 +f 1381/2241/256 1389/2249/262 1382/2242/263 +f 1374/2234/265 1397/2262/264 1383/2243/274 +f 1384/2244/266 1392/2342/267 1380/2240/261 +f 1380/2240/261 1392/2342/267 1385/2245/272 +f 1387/2247/268 1397/2262/264 1374/2234/265 +f 1381/2241/256 1383/2243/274 1388/2248/269 +f 1386/2246/276 1385/2245/272 1387/2247/268 +f 1384/2252/266 1393/2256/271 1391/2253/240 +f 1390/2255/270 1395/2343/242 1393/2256/271 +f 1392/2254/267 1391/2253/240 1394/2257/247 +f 1388/2258/269 1398/2264/275 1395/2259/242 +f 1387/2247/268 1399/2265/237 1396/2261/273 +f 1383/2263/274 1400/2266/239 1398/2264/275 +f 1385/2245/272 1394/2257/247 1399/2265/237 +f 1397/2262/264 1396/2261/273 1400/2266/239 +f 1401/2267/277 1417/2283/292 1402/2268/250 +f 1404/2270/279 1411/2277/286 1405/2271/280 +f 1407/2273/282 1410/2276/285 1408/2274/283 +f 1410/2276/285 1417/2283/292 1401/2267/277 +f 1403/2269/278 1402/2268/250 1411/2277/286 +f 1406/2272/281 1405/2271/280 1412/2278/287 +f 1411/2277/286 1427/2299/297 1414/2280/289 +f 1415/2281/290 1416/2282/291 1410/2276/285 +f 1416/2282/291 1424/2294/296 1417/2283/292 +f 1418/2284/293 1427/2299/297 1411/2277/286 +f 1405/2271/280 1414/2280/289 1419/2285/294 +f 1417/2283/292 1424/2294/296 1418/2284/293 +f 1415/2288/290 1422/2292/275 1421/2289/239 +f 1420/2291/295 1425/2344/242 1422/2292/275 +f 1416/2290/291 1421/2289/239 1423/2293/273 +f 1419/2295/294 1428/2301/271 1425/2296/242 +f 1418/2284/293 1429/2302/237 1426/2298/247 +f 1414/2300/289 1430/2303/240 1428/2301/271 +f 1424/2294/296 1423/2293/273 1429/2302/237 +f 1427/2299/297 1426/2298/247 1430/2303/240 +f 1431/2304/277 1446/2319/292 1432/2305/250 +f 1434/2307/298 1444/2317/280 1435/2308/281 +f 1437/2310/282 1440/2313/285 1438/2311/283 +f 1440/2313/285 1446/2319/292 1431/2304/277 +f 1432/2305/250 1434/2307/298 1436/2309/279 +f 1435/2308/281 1444/2317/280 1441/2314/287 +f 1443/2316/297 1457/2345/289 1444/2317/280 +f 1437/2310/282 1451/2325/290 1445/2318/291 +f 1445/2318/291 1449/2322/296 1446/2319/292 +f 1447/2320/293 1443/2316/297 1434/2307/298 +f 1444/2317/280 1457/2345/289 1448/2321/294 +f 1449/2322/296 1447/2320/293 1432/2305/250 +f 1451/2326/290 1453/2330/275 1452/2327/239 +f 1450/2329/295 1455/2346/242 1453/2330/275 +f 1445/2328/291 1452/2327/239 1454/2331/273 +f 1448/2332/294 1458/2337/271 1455/2333/242 +f 1447/2320/293 1459/2338/237 1456/2335/247 +f 1457/2336/289 1460/2339/240 1458/2337/271 +f 1447/2320/293 1449/2322/296 1454/2331/273 +f 1457/2336/289 1443/2316/297 1456/2335/247 +o Huge_Pad +v -1.250000 2.000000 1.250000 +v 1.250000 2.000000 -1.250000 +v -1.250000 2.000000 -1.250000 +v -1.250000 2.000000 1.250000 +v 2.500000 2.000000 2.500000 +v 1.250000 2.000000 1.250000 +v -1.250000 2.000000 -1.250000 +v -2.500000 2.000000 2.500000 +v 1.250000 2.000000 -1.250000 +v -2.500000 2.000000 -2.500000 +v 2.500000 2.000000 -2.500000 +v -2.500000 1.500000 -2.500000 +v 2.500000 1.500000 2.500000 +v 2.500000 1.500000 -2.500000 +v -2.500000 1.500000 2.500000 +v 3.000000 1.500000 -3.000000 +v 3.000000 1.500000 3.000000 +v -3.000000 1.500000 3.000000 +v -3.000000 1.500000 -3.000000 +v 3.000000 1.000000 -3.000000 +v -3.000000 1.000000 3.000000 +v -3.000000 1.000000 -3.000000 +v 3.000000 1.000000 3.000000 v 0.500000 1.000000 0.500000 +v -0.500000 1.000000 0.500000 v -0.500000 1.000000 -0.500000 v 0.500000 1.000000 -0.500000 +v 1.500000 2.000000 -2.500000 +v -1.500000 2.000000 -3.500000 +v -1.500000 2.000000 -2.500000 +v -1.500000 1.000000 -3.500000 +v 1.500000 2.000000 -3.500000 +v 1.500000 1.000000 -3.500000 +v 1.500000 1.000000 -2.500000 +v -1.500000 1.000000 -2.500000 +v 2.000000 2.000000 4.000000 +v -2.000000 2.000000 2.500000 +v -2.000000 2.000000 4.000000 +v 2.000000 1.000000 2.500000 +v 2.000000 1.000000 4.000000 +v -2.000000 1.000000 4.000000 +v -2.000000 1.000000 2.500000 +v 1.187500 2.000000 1.812500 +v 1.187500 8.000000 2.187500 +v 1.187500 2.000000 2.187500 +v 0.812500 2.000000 3.312500 +v 1.187500 8.000000 3.312500 +v 1.187500 2.000000 3.312500 +v 0.812500 2.000000 1.812500 +v 1.187500 8.000000 1.812500 +v -1.187500 2.000000 3.687500 +v -1.187500 8.000000 3.312500 +v -1.187500 2.000000 3.312500 +v -1.187500 2.000000 2.187500 +v -1.187500 8.000000 1.812500 +v -1.187500 2.000000 1.812500 +v -0.812500 2.000000 3.687500 +v -1.187500 8.000000 3.687500 +v -0.812500 2.000000 2.187500 +v -1.187500 8.000000 2.187500 +v -0.812500 2.000000 3.312500 +v -0.812500 8.000000 3.687500 +v -0.812500 2.000000 1.812500 +v -0.812500 8.000000 2.187500 +v -0.812500 8.000000 3.312500 +v 0.812500 2.000000 3.687500 +v 0.812500 8.000000 3.312500 +v -0.812500 8.000000 1.812500 +v 0.812500 2.000000 2.187500 +v 0.812500 8.000000 1.812500 +v 1.187500 2.000000 3.687500 +v 0.812500 8.000000 3.687500 +v 0.812500 8.000000 2.187500 +v 1.187500 8.000000 3.687500 +v -1.500000 8.000000 1.500000 +v 1.500000 8.000000 4.000000 +v -1.500000 8.000000 4.000000 +v 1.500000 8.250000 4.000000 +v -1.500000 8.250000 1.500000 +v -1.500000 8.250000 4.000000 +v 1.500000 8.250000 1.500000 +v 1.500000 8.000000 1.500000 +v 1.187500 8.250000 1.812500 +v 1.187500 14.250000 2.187501 +v 1.187500 8.250000 2.187500 +v 0.812500 8.250000 1.812500 +v 1.187500 14.250000 1.812501 +v -1.187500 8.250000 2.187500 +v -1.187500 14.250000 1.812501 +v -1.187500 8.250000 1.812500 +v -0.812500 8.250000 2.187500 +v -1.187500 14.250000 2.187501 +v -0.812500 8.250000 1.812500 +v -0.812500 14.250000 2.187501 +v -0.812500 14.250000 1.812501 +v 0.812500 8.250000 2.187500 +v 0.812500 14.250000 1.812501 +v 0.812500 14.250000 2.187501 +v 1.187500 8.250000 2.812500 +v 1.187500 14.250000 3.187501 +v 1.187500 8.250000 3.187500 +v 0.812500 8.250000 2.812500 +v 1.187500 14.250000 2.812501 +v -1.187500 8.250000 3.187500 +v -1.187500 14.250000 2.812501 +v -1.187500 8.250000 2.812500 +v -0.812500 8.250000 3.187500 +v -1.187500 14.250000 3.187501 +v -0.812500 8.250000 2.812500 +v -0.812500 14.250000 3.187501 +v -0.812500 14.250000 2.812501 +v 0.812500 8.250000 3.187500 +v 0.812500 14.250000 2.812501 +v 0.812500 14.250000 3.187501 +v -1.500000 14.250000 1.500001 +v 1.500000 14.250000 3.500001 +v -1.500000 14.250000 3.500001 +v 0.812500 8.000000 2.000000 +v -0.812500 2.000000 2.000000 +v -0.812500 8.000000 2.000000 +v -0.812500 2.000000 3.500000 +v 0.812500 8.000000 3.500000 +v -0.812500 8.000000 3.500000 +v -1.000000 2.000000 2.187500 +v -1.000000 8.000000 3.312500 +v -1.000000 8.000000 2.187500 +v 1.000000 8.000000 3.312500 +v 1.000000 2.000000 2.187500 +v 1.000000 8.000000 2.187500 +v 0.812500 14.250000 2.000001 +v -0.812500 8.250000 2.000000 +v -0.812500 14.250000 2.000001 +v -0.812500 8.250000 3.000000 +v 0.812500 14.250000 3.000001 +v -0.812500 14.250000 3.000001 +v -1.000000 8.250000 2.187500 +v -1.000000 14.250000 2.812501 +v -1.000000 14.250000 2.187501 +v 1.000000 14.250000 2.812501 +v 1.000000 8.250000 2.187500 +v 1.000000 14.250000 2.187501 +v 1.500000 14.500000 3.500001 +v -1.500000 14.500000 1.500001 +v -1.500000 14.500000 3.500001 +v 1.500000 14.500000 1.500001 +v 1.500000 14.250000 1.500001 +v 0.375000 10.000000 2.250000 +v 0.198223 10.073223 2.250000 +v 0.551777 10.426777 2.250000 +v -0.375000 10.000000 2.250000 +v -0.551777 10.073223 2.250000 +v -0.198223 10.426777 2.250000 +v -0.812500 2.000000 2.000000 +v 0.812500 8.000000 2.000000 +v -0.812500 8.000000 2.000000 +v 0.812500 8.000000 3.500000 +v -0.812500 2.000000 3.500000 +v -0.812500 8.000000 3.500000 +v -1.000000 8.000000 3.312500 +v -1.000000 2.000000 2.187500 +v -1.000000 8.000000 2.187500 +v 1.000000 2.000000 2.187500 +v 1.000000 8.000000 3.312500 +v 1.000000 8.000000 2.187500 +v -0.812500 8.250000 2.000000 +v 0.812500 14.250000 2.000001 +v -0.812500 14.250000 2.000001 +v 0.812500 14.250000 3.000001 +v -0.812500 8.250000 3.000000 +v -0.812500 14.250000 3.000001 +v -1.000000 14.250000 2.812501 +v -1.000000 8.250000 2.187500 +v -1.000000 14.250000 2.187501 +v 1.000000 8.250000 2.187500 +v 1.000000 14.250000 2.812501 +v 1.000000 14.250000 2.187501 +v 1.250000 2.000000 1.250000 +v 2.000000 2.000000 2.500000 +v 0.812500 2.000000 2.000000 +v 0.812500 2.000000 3.500000 +v -1.000000 2.000000 3.312500 +v 1.000000 2.000000 3.312500 +v 0.812500 8.250000 2.000000 +v 0.812500 8.250000 3.000000 +v -1.000000 8.250000 2.812500 +v 1.000000 8.250000 2.812500 +v 0.125000 10.250000 2.250000 +v 0.198223 10.426777 2.250000 +v 0.375000 10.500000 2.250000 +v 0.625000 10.250000 2.250000 +v 0.551777 10.073223 2.250000 +v -0.625000 10.250000 2.250000 +v -0.551777 10.426777 2.250000 +v -0.375000 10.500000 2.250000 +v -0.125000 10.250000 2.250000 +v -0.198223 10.073223 2.250000 +v 0.812500 2.000000 2.000000 +v 0.812500 2.000000 3.500000 +v -1.000000 2.000000 3.312500 +v 1.000000 2.000000 3.312500 +v 0.812500 8.250000 2.000000 +v 0.812500 8.250000 3.000000 +v -1.000000 8.250000 2.812500 +v 1.000000 8.250000 2.812500 +v 0.551777 2.000000 2.676777 +v 0.375000 10.000000 2.750000 +v 0.375000 2.000000 2.750000 +v 0.198223 2.000000 2.676777 +v 0.125000 10.000000 2.500000 +v 0.125000 2.000000 2.500000 +v 0.198223 2.000000 2.323223 +v 0.375000 2.000000 2.250000 +v 0.551777 10.000000 2.323224 +v 0.551777 2.000000 2.323223 +v 0.625000 2.000000 2.500000 +v 0.551777 10.000000 2.676777 +v 0.198223 10.000000 2.676777 +v 0.198223 10.000000 2.323224 +v 0.625000 10.000000 2.500000 +v 0.625000 10.176777 2.426777 +v 0.551777 10.301777 2.551777 +v 0.375000 10.353554 2.603554 +v 0.198223 10.301777 2.551777 +v 0.125000 10.176777 2.426777 +v 0.198223 10.051777 2.301777 +v 0.551777 10.051777 2.301777 +v -0.198223 2.000000 2.676777 +v -0.375000 10.000000 2.750000 +v -0.375000 2.000000 2.750000 +v -0.551777 2.000000 2.676777 +v -0.625000 10.000000 2.500000 +v -0.625000 2.000000 2.500000 +v -0.551777 2.000000 2.323223 +v -0.375000 2.000000 2.250000 +v -0.198223 10.000000 2.323224 +v -0.198223 2.000000 2.323223 +v -0.125000 2.000000 2.500000 +v -0.198223 10.000000 2.676777 +v -0.551777 10.000000 2.676777 +v -0.551777 10.000000 2.323224 +v -0.125000 10.000000 2.500000 +v -0.125000 10.176777 2.426777 +v -0.198223 10.301777 2.551777 +v -0.551777 10.301777 2.551777 +v -0.551777 10.051777 2.301777 +v -0.375000 10.353554 2.603554 +v -0.625000 10.176777 2.426777 +v -0.198223 10.051777 2.301777 +vt 0.155844 0.875000 +vt 0.285714 0.666667 +vt 0.285714 0.875000 +vt 0.090909 0.437500 +vt 0.025974 0.125000 +vt 0.090909 0.229167 +vt 0.220779 0.437500 +vt 0.025974 0.541667 +vt 0.220779 0.229167 +vt 0.285714 0.541667 +vt 0.285714 0.125000 +vt 0.025974 0.125000 +vt 0.285714 0.083333 +vt 0.285714 0.125000 +vt 0.025974 0.125000 +vt 0.285714 0.083333 +vt 0.285714 0.125000 +vt 0.285714 0.083333 +vt 0.025974 0.125000 +vt 0.285714 0.083333 +vt 0.285714 0.125000 +vt 0.025974 0.083333 +vt 0.311688 0.041667 +vt 0.025974 0.083333 +vt 0.311688 0.041667 +vt 0.025974 0.083333 +vt 0.311688 0.041667 +vt 0.025974 0.083333 +vt 0.311688 0.041667 +vt -0.000000 0.041667 +vt 0.311688 -0.000000 +vt 0.000000 0.041667 +vt 0.311688 0.000000 +vt 0.000000 0.041667 +vt 0.311688 0.000000 +vt 0.000000 0.041667 +vt 0.311688 0.000000 +vt 0.129870 0.291667 +vt 0.129870 0.375000 +vt 0.181818 0.375000 +vt 0.181818 0.291667 +vt 0.441558 0.625000 +vt 0.493506 0.875000 +vt 0.441558 0.875000 +vt 0.545455 0.875000 +vt 0.493506 0.625000 +vt 0.545455 0.625000 +vt 0.493506 0.541667 +vt 0.441558 0.541667 +vt 0.441558 0.958333 +vt 0.493506 0.958333 +vt 0.337662 0.083333 +vt 0.415584 0.416667 +vt 0.337662 0.416667 +vt 0.415584 -0.000000 +vt 0.337662 -0.000000 +vt 0.337662 0.500000 +vt 0.415584 0.500000 +vt 0.285714 0.083333 +vt 0.285714 0.416667 +vt 0.324675 0.500000 +vt 0.305195 1.000000 +vt 0.305195 0.500000 +vt 0.344156 0.500000 +vt 0.324675 1.000000 +vt 0.324675 0.500000 +vt 0.344156 0.500000 +vt 0.324675 1.000000 +vt 0.363636 0.500000 +vt 0.344156 1.000000 +vt 0.344156 0.500000 +vt 0.363636 0.500000 +vt 0.344156 1.000000 +vt 0.344156 0.500000 +vt 0.305195 0.500000 +vt 0.285714 1.000000 +vt 0.285714 0.500000 +vt 0.305195 0.500000 +vt 0.285714 1.000000 +vt 0.285714 0.500000 +vt 0.324675 0.500000 +vt 0.305195 1.000000 +vt 0.324675 0.500000 +vt 0.305195 1.000000 +vt 0.324675 1.000000 +vt 0.363636 0.500000 +vt 0.344156 1.000000 +vt 0.324675 1.000000 +vt 0.363636 0.500000 +vt 0.344156 1.000000 +vt 0.305195 0.500000 +vt 0.285714 1.000000 +vt 0.285714 0.500000 +vt 0.285714 1.000000 +vt 0.285714 0.500000 +vt 0.305195 1.000000 +vt 0.675325 0.750000 +vt 0.545455 1.000000 +vt 0.545455 0.750000 +vt 0.545455 0.750000 +vt 0.675325 1.000000 +vt 0.545455 1.000000 +vt 0.688312 1.000000 +vt 0.675325 0.750000 +vt 0.688312 0.750000 +vt 0.688312 1.000000 +vt 0.675325 0.750000 +vt 0.688312 0.750000 +vt 0.675325 0.729167 +vt 0.545455 0.729167 +vt 0.675325 0.729167 +vt 0.545455 0.750000 +vt 0.545455 0.729167 +vt 0.402597 0.500000 +vt 0.383117 1.000000 +vt 0.383117 0.500000 +vt 0.422078 0.500000 +vt 0.402597 1.000000 +vt 0.441558 0.500000 +vt 0.422078 1.000000 +vt 0.422078 0.500000 +vt 0.383117 0.500000 +vt 0.363636 1.000000 +vt 0.363636 0.500000 +vt 0.402597 0.500000 +vt 0.383117 1.000000 +vt 0.402597 1.000000 +vt 0.441558 0.500000 +vt 0.422078 1.000000 +vt 0.363636 1.000000 +vt 0.363636 0.500000 +vt 0.402597 0.500000 +vt 0.383117 1.000000 +vt 0.383117 0.500000 +vt 0.422078 0.500000 +vt 0.402597 1.000000 +vt 0.441558 0.500000 +vt 0.422078 1.000000 +vt 0.422078 0.500000 +vt 0.383117 0.500000 +vt 0.363636 1.000000 +vt 0.363636 0.500000 +vt 0.402597 0.500000 +vt 0.383117 1.000000 +vt 0.402597 1.000000 +vt 0.441558 0.500000 +vt 0.422078 1.000000 +vt 0.363636 1.000000 +vt 0.363636 0.500000 +vt 0.792208 0.750000 +vt 0.688312 1.000000 +vt 0.688312 0.750000 +vt 0.415584 0.500000 +vt 0.500000 0.000000 +vt 0.500000 0.500000 +vt 0.415584 0.000000 +vt 0.500000 0.500000 +vt 0.415584 0.500000 +vt 0.500000 0.000000 +vt 0.558442 0.500000 +vt 0.500000 0.500000 +vt 0.500000 0.500000 +vt 0.558442 0.000000 +vt 0.558442 0.500000 +vt 0.558442 0.500000 +vt 0.642857 0.000000 +vt 0.642857 0.500000 +vt 0.558442 0.000000 +vt 0.642857 0.500000 +vt 0.558442 0.500000 +vt 0.642857 0.000000 +vt 0.675325 0.500000 +vt 0.642857 0.500000 +vt 0.642857 0.500000 +vt 0.675325 0.000000 +vt 0.675325 0.500000 +vt 0.688312 0.750000 +vt 0.792208 1.000000 +vt 0.688312 1.000000 +vt 0.805195 1.000000 +vt 0.792208 0.750000 +vt 0.805195 0.750000 +vt 0.805195 1.000000 +vt 0.792208 0.750000 +vt 0.805195 0.750000 +vt 0.792208 0.729167 +vt 0.688312 0.729167 +vt 0.792208 0.729167 +vt 0.688312 0.750000 +vt 0.688312 0.729167 +vt 0.636364 0.625272 +vt 0.645427 0.631294 +vt 0.627300 0.660373 +vt 0.662338 0.624730 +vt 0.671640 0.630911 +vt 0.653036 0.660756 +vt 0.500000 0.000000 +vt 0.415584 0.500000 +vt 0.500000 0.500000 +vt 0.500000 0.500000 +vt 0.415584 0.000000 +vt 0.415584 0.500000 +vt 0.558442 0.500000 +vt 0.500000 0.000000 +vt 0.500000 0.500000 +vt 0.558442 0.000000 +vt 0.500000 0.500000 +vt 0.558442 0.500000 +vt 0.642857 0.000000 +vt 0.558442 0.500000 +vt 0.642857 0.500000 +vt 0.642857 0.500000 +vt 0.558442 0.000000 +vt 0.558442 0.500000 +vt 0.675325 0.500000 +vt 0.642857 0.000000 +vt 0.642857 0.500000 +vt 0.675325 0.000000 +vt 0.642857 0.500000 +vt 0.675325 0.500000 +vt 0.155844 0.666667 +vt -0.000000 -0.000000 +vt -0.000000 -0.000000 +vt -0.000000 -0.000000 +vt -0.000000 -0.000000 +vt 0.415584 0.083333 +vt 0.363636 1.000000 +vt 0.363636 1.000000 +vt 0.363636 1.000000 +vt 0.363636 1.000000 +vt 0.675325 1.000000 +vt 0.675325 1.000000 +vt 0.441558 1.000000 +vt 0.441558 1.000000 +vt 0.441558 1.000000 +vt 0.441558 1.000000 +vt 0.792208 1.000000 +vt 0.415584 0.000000 +vt 0.500000 0.000000 +vt 0.558442 0.000000 +vt 0.500000 0.000000 +vt 0.558442 0.000000 +vt 0.642857 0.000000 +vt 0.675325 0.000000 +vt 0.642857 0.000000 +vt 0.792208 1.000000 +vt 0.649182 0.645834 +vt 0.645427 0.660374 +vt 0.636364 0.666396 +vt 0.623546 0.645834 +vt 0.627300 0.631294 +vt 0.675493 0.645833 +vt 0.671640 0.660756 +vt 0.662338 0.666937 +vt 0.649182 0.645833 +vt 0.653035 0.630911 +vt 0.415584 0.000000 +vt 0.500000 0.000000 +vt 0.558442 0.000000 +vt 0.500000 0.000000 +vt 0.558442 0.000000 +vt 0.642857 0.000000 +vt 0.675325 0.000000 +vt 0.642857 0.000000 +vt 0.724026 -0.000000 +vt 0.714286 0.666667 +vt 0.714286 0.000000 +vt 0.704545 -0.000000 +vt 0.694805 0.666667 +vt 0.694805 0.000000 +vt 0.685065 0.000000 +vt 0.675325 0.666667 +vt 0.675325 -0.000000 +vt 0.753247 0.000000 +vt 0.743506 0.666667 +vt 0.743506 -0.000000 +vt 0.733766 -0.000000 +vt 0.724026 0.666667 +vt 0.704545 0.666667 +vt 0.685065 0.666667 +vt 0.733766 0.666667 +vt 0.724026 0.671875 +vt 0.733766 0.697917 +vt 0.724026 0.697917 +vt 0.704545 0.671875 +vt 0.714286 0.697917 +vt 0.704545 0.697917 +vt 0.685065 0.692708 +vt 0.694805 0.697917 +vt 0.685065 0.697917 +vt 0.733766 0.682292 +vt 0.743506 0.697917 +vt 0.694805 0.682292 +vt 0.704545 0.723958 +vt 0.694805 0.713542 +vt 0.685065 0.703125 +vt 0.733766 0.713542 +vt 0.724026 0.723958 +vt 0.714286 0.729167 +vt 0.743506 0.692708 +vt 0.753247 0.697917 +vt 0.743506 0.703125 +vt 0.675325 0.697917 +vt 0.801948 0.000000 +vt 0.792208 0.666667 +vt 0.792208 0.000000 +vt 0.782468 0.000000 +vt 0.772727 0.666667 +vt 0.772727 0.000000 +vt 0.762987 -0.000000 +vt 0.753247 0.666667 +vt 0.753247 0.000000 +vt 0.831169 0.000000 +vt 0.821429 0.666667 +vt 0.821429 -0.000000 +vt 0.811688 -0.000000 +vt 0.801948 0.666667 +vt 0.782468 0.666667 +vt 0.762987 0.666667 +vt 0.811688 0.666667 +vt 0.801948 0.671875 +vt 0.811688 0.697917 +vt 0.801948 0.697917 +vt 0.782468 0.697917 +vt 0.782468 0.671875 +vt 0.772727 0.682292 +vt 0.762987 0.697917 +vt 0.762987 0.692708 +vt 0.821429 0.692708 +vt 0.811688 0.682292 +vt 0.792208 0.697917 +vt 0.772727 0.697917 +vt 0.782468 0.723958 +vt 0.772727 0.713542 +vt 0.762987 0.703125 +vt 0.821429 0.697917 +vt 0.811688 0.713542 +vt 0.801948 0.723958 +vt 0.792208 0.729167 +vt 0.831169 0.697917 +vt 0.821429 0.703125 +vt 0.753247 0.697917 +vt 0.753247 0.666667 +vt 0.831169 0.666667 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.6000 -0.8000 +vn 0.8000 0.6000 0.0000 +vn 0.0000 0.6000 0.8000 +vn -0.8000 0.6000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 -0.0000 0.7071 +vn -0.0000 0.1866 0.9824 +vn -0.7071 -0.0000 0.7071 +vn -0.9987 0.0196 0.0473 +vn -0.7071 0.0000 -0.7071 +vn -0.0000 -0.1944 -0.9809 +vn 0.7263 -0.1363 -0.6737 +vn 0.7071 0.0000 -0.7071 +vn 0.6794 0.1448 0.7194 +vn -0.6794 0.1448 0.7194 +vn -0.7263 -0.1363 -0.6737 +vn 0.9987 0.0196 0.0473 +vn 0.9955 0.0671 0.0671 +vn 0.6630 0.5294 0.5294 +vn -0.0000 0.7071 0.7071 +vn -0.6630 0.5294 0.5294 +vn -0.9955 0.0671 0.0671 +vn -0.7574 -0.4617 -0.4617 +vn 0.7574 -0.4617 -0.4617 +vn -0.6333 0.7150 0.2962 +vn -0.9947 0.0948 0.0393 +vn -0.7311 -0.6303 -0.2611 +vn 0.9947 0.0948 0.0393 +vn 0.6333 0.7150 0.2962 +vn -0.0000 0.9239 0.3827 +vn 0.7311 -0.6303 -0.2611 +s off +f 1461/2347/299 1462/2348/299 1463/2349/299 +f 1464/2350/299 1465/2351/299 1466/2352/299 +f 1467/2353/299 1468/2354/299 1464/2350/299 +f 1469/2355/299 1470/2356/299 1467/2353/299 +f 1466/2352/299 1471/2357/299 1469/2355/299 +f 1471/2358/300 1472/2359/300 1470/2360/300 +f 1468/2361/301 1473/2362/301 1465/2363/301 +f 1465/2351/302 1474/2364/302 1471/2357/302 +f 1470/2365/303 1475/2366/303 1468/2367/303 +f 1473/2368/299 1476/2369/299 1474/2364/299 +f 1475/2370/299 1477/2371/299 1473/2362/299 +f 1472/2372/299 1478/2373/299 1475/2366/299 +f 1474/2374/299 1479/2375/299 1472/2359/299 +f 1477/2376/302 1480/2377/302 1476/2369/302 +f 1479/2378/303 1481/2379/303 1478/2373/303 +f 1476/2380/300 1482/2381/300 1479/2375/300 +f 1478/2382/301 1483/2383/301 1477/2371/301 +f 1484/2384/304 1464/2350/304 1466/2352/304 +f 1485/2385/305 1467/2353/305 1464/2350/305 +f 1486/2386/306 1469/2355/306 1467/2353/306 +f 1487/2387/307 1466/2352/307 1469/2355/307 +f 1488/2388/299 1489/2389/299 1490/2390/299 +f 1491/2391/300 1492/2392/300 1493/2393/300 +f 1493/2394/302 1488/2388/302 1494/2395/302 +f 1495/2396/303 1489/2389/303 1491/2397/303 +f 1496/2398/299 1497/2399/299 1498/2400/299 +f 1499/2401/302 1496/2398/302 1500/2402/302 +f 1501/2403/303 1497/2399/303 1502/2404/303 +f 1500/2405/301 1498/2400/301 1501/2406/301 +f 1503/2407/302 1504/2408/302 1505/2409/302 +f 1506/2410/300 1507/2411/300 1508/2412/300 +f 1509/2413/300 1510/2414/300 1503/2407/300 +f 1511/2415/303 1512/2416/303 1513/2417/303 +f 1514/2418/303 1515/2419/303 1516/2420/303 +f 1517/2421/301 1518/2422/301 1511/2423/301 +f 1519/2424/301 1520/2425/301 1514/2426/301 +f 1521/2427/302 1522/2428/302 1517/2421/302 +f 1523/2429/302 1524/2430/302 1519/2424/302 +f 1513/2417/300 1525/2431/300 1521/2427/300 +f 1526/2432/303 1527/2433/303 1506/2410/303 +f 1516/2420/300 1528/2434/300 1523/2429/300 +f 1529/2435/303 1530/2436/303 1509/2413/303 +f 1531/2437/301 1532/2438/301 1526/2439/301 +f 1505/2409/301 1533/2440/301 1529/2441/301 +f 1508/2412/302 1534/2442/302 1531/2437/302 +f 1535/2443/308 1536/2444/308 1537/2445/308 +f 1538/2446/299 1539/2447/299 1540/2448/299 +f 1535/2449/300 1541/2450/300 1542/2451/300 +f 1536/2452/301 1540/2453/301 1537/2454/301 +f 1542/2455/302 1538/2446/302 1536/2456/302 +f 1537/2457/303 1539/2458/303 1535/2459/303 +f 1543/2460/302 1544/2461/302 1545/2462/302 +f 1546/2463/300 1547/2464/300 1543/2460/300 +f 1548/2465/303 1549/2466/303 1550/2467/303 +f 1551/2468/301 1552/2469/301 1548/2470/301 +f 1553/2471/302 1554/2472/302 1551/2468/302 +f 1550/2467/300 1555/2473/300 1553/2471/300 +f 1556/2474/303 1557/2475/303 1546/2463/303 +f 1545/2462/301 1558/2476/301 1556/2477/301 +f 1559/2478/302 1560/2479/302 1561/2480/302 +f 1562/2481/300 1563/2482/300 1559/2478/300 +f 1564/2483/303 1565/2484/303 1566/2485/303 +f 1567/2486/301 1568/2487/301 1564/2488/301 +f 1569/2489/302 1570/2490/302 1567/2486/302 +f 1566/2485/300 1571/2491/300 1569/2489/300 +f 1572/2492/303 1573/2493/303 1562/2481/303 +f 1561/2480/301 1574/2494/301 1572/2495/301 +f 1575/2496/308 1576/2497/308 1577/2498/308 +f 1578/2499/300 1579/2500/300 1580/2501/300 +f 1581/2502/301 1582/2503/301 1583/2504/301 +f 1584/2505/303 1585/2506/303 1586/2507/303 +f 1587/2508/302 1588/2509/302 1589/2510/302 +f 1590/2511/300 1591/2512/300 1592/2513/300 +f 1593/2514/301 1594/2515/301 1595/2516/301 +f 1596/2517/303 1597/2518/303 1598/2519/303 +f 1599/2520/302 1600/2521/302 1601/2522/302 +f 1602/2523/299 1603/2524/299 1604/2525/299 +f 1575/2526/300 1605/2527/300 1606/2528/300 +f 1576/2529/301 1604/2530/301 1577/2531/301 +f 1606/2532/302 1602/2523/302 1576/2533/302 +f 1577/2534/303 1603/2535/303 1575/2536/303 +f 1607/2537/300 1608/2538/300 1609/2539/300 +f 1610/2540/300 1611/2541/300 1612/2542/300 +f 1613/2543/301 1614/2544/301 1615/2545/301 +f 1616/2546/300 1617/2547/300 1618/2548/300 +f 1619/2549/302 1620/2550/302 1621/2551/302 +f 1622/2552/303 1623/2553/303 1624/2554/303 +f 1625/2555/301 1626/2556/301 1627/2557/301 +f 1628/2558/300 1629/2559/300 1630/2560/300 +f 1631/2561/302 1632/2562/302 1633/2563/302 +f 1634/2564/303 1635/2565/303 1636/2566/303 +f 1461/2347/299 1637/2567/299 1462/2348/299 +f 1464/2350/299 1468/2354/299 1465/2351/299 +f 1467/2353/299 1470/2356/299 1468/2354/299 +f 1469/2355/299 1471/2357/299 1470/2356/299 +f 1466/2352/299 1465/2351/299 1471/2357/299 +f 1471/2358/300 1474/2374/300 1472/2359/300 +f 1468/2361/301 1475/2370/301 1473/2362/301 +f 1465/2351/302 1473/2368/302 1474/2364/302 +f 1470/2365/303 1472/2372/303 1475/2366/303 +f 1473/2368/299 1477/2376/299 1476/2369/299 +f 1475/2370/299 1478/2382/299 1477/2371/299 +f 1472/2372/299 1479/2378/299 1478/2373/299 +f 1474/2374/299 1476/2380/299 1479/2375/299 +f 1477/2376/302 1483/2568/302 1480/2377/302 +f 1479/2378/303 1482/2569/303 1481/2379/303 +f 1476/2380/300 1480/2570/300 1482/2381/300 +f 1478/2382/301 1481/2571/301 1483/2383/301 +f 1484/2384/304 1485/2385/304 1464/2350/304 +f 1485/2385/305 1486/2386/305 1467/2353/305 +f 1486/2386/306 1487/2387/306 1469/2355/306 +f 1487/2387/307 1484/2384/307 1466/2352/307 +f 1488/2388/299 1492/2392/299 1489/2389/299 +f 1491/2391/300 1489/2389/300 1492/2392/300 +f 1493/2394/302 1492/2392/302 1488/2388/302 +f 1495/2396/303 1490/2390/303 1489/2389/303 +f 1496/2398/299 1638/2572/299 1497/2399/299 +f 1499/2401/302 1638/2572/302 1496/2398/302 +f 1501/2403/303 1498/2400/303 1497/2399/303 +f 1500/2405/301 1496/2398/301 1498/2400/301 +f 1503/2407/302 1510/2414/302 1504/2408/302 +f 1506/2410/300 1527/2433/300 1507/2411/300 +f 1509/2413/300 1530/2436/300 1510/2414/300 +f 1511/2415/303 1518/2573/303 1512/2416/303 +f 1514/2418/303 1520/2574/303 1515/2419/303 +f 1517/2421/301 1522/2428/301 1518/2422/301 +f 1519/2424/301 1524/2430/301 1520/2425/301 +f 1521/2427/302 1525/2431/302 1522/2428/302 +f 1523/2429/302 1528/2434/302 1524/2430/302 +f 1513/2417/300 1512/2416/300 1525/2431/300 +f 1526/2432/303 1532/2575/303 1527/2433/303 +f 1516/2420/300 1515/2419/300 1528/2434/300 +f 1529/2435/303 1533/2576/303 1530/2436/303 +f 1531/2437/301 1534/2442/301 1532/2438/301 +f 1505/2409/301 1504/2408/301 1533/2440/301 +f 1508/2412/302 1507/2411/302 1534/2442/302 +f 1535/2443/308 1542/2577/308 1536/2444/308 +f 1538/2446/299 1541/2450/299 1539/2447/299 +f 1535/2449/300 1539/2447/300 1541/2450/300 +f 1536/2452/301 1538/2578/301 1540/2453/301 +f 1542/2455/302 1541/2450/302 1538/2446/302 +f 1537/2457/303 1540/2453/303 1539/2458/303 +f 1543/2460/302 1547/2464/302 1544/2461/302 +f 1546/2463/300 1557/2475/300 1547/2464/300 +f 1548/2465/303 1552/2579/303 1549/2466/303 +f 1551/2468/301 1554/2472/301 1552/2469/301 +f 1553/2471/302 1555/2473/302 1554/2472/302 +f 1550/2467/300 1549/2466/300 1555/2473/300 +f 1556/2474/303 1558/2580/303 1557/2475/303 +f 1545/2462/301 1544/2461/301 1558/2476/301 +f 1559/2478/302 1563/2482/302 1560/2479/302 +f 1562/2481/300 1573/2493/300 1563/2482/300 +f 1564/2483/303 1568/2581/303 1565/2484/303 +f 1567/2486/301 1570/2490/301 1568/2487/301 +f 1569/2489/302 1571/2491/302 1570/2490/302 +f 1566/2485/300 1565/2484/300 1571/2491/300 +f 1572/2492/303 1574/2582/303 1573/2493/303 +f 1561/2480/301 1560/2479/301 1574/2494/301 +f 1575/2496/308 1606/2583/308 1576/2497/308 +f 1578/2499/300 1639/2584/300 1579/2500/300 +f 1581/2502/301 1640/2585/301 1582/2503/301 +f 1584/2505/303 1641/2586/303 1585/2506/303 +f 1587/2508/302 1642/2587/302 1588/2509/302 +f 1590/2511/300 1643/2588/300 1591/2512/300 +f 1593/2514/301 1644/2589/301 1594/2515/301 +f 1596/2517/303 1645/2590/303 1597/2518/303 +f 1599/2520/302 1646/2591/302 1600/2521/302 +f 1602/2523/299 1605/2527/299 1603/2524/299 +f 1575/2526/300 1603/2524/300 1605/2527/300 +f 1576/2529/301 1602/2592/301 1604/2530/301 +f 1606/2532/302 1605/2527/302 1602/2523/302 +f 1577/2534/303 1604/2530/303 1603/2535/303 +f 1608/2538/300 1647/2593/300 1648/2594/300 +f 1648/2594/300 1649/2595/300 1608/2538/300 +f 1649/2595/300 1609/2539/300 1608/2538/300 +f 1609/2539/300 1650/2596/300 1651/2597/300 +f 1651/2597/300 1607/2537/300 1609/2539/300 +f 1611/2541/300 1652/2598/300 1653/2599/300 +f 1653/2599/300 1654/2600/300 1611/2541/300 +f 1654/2600/300 1612/2542/300 1611/2541/300 +f 1612/2542/300 1655/2601/300 1656/2602/300 +f 1656/2602/300 1610/2540/300 1612/2542/300 +f 1613/2543/301 1657/2603/301 1614/2544/301 +f 1616/2546/300 1658/2604/300 1617/2547/300 +f 1619/2549/302 1659/2605/302 1620/2550/302 +f 1622/2552/303 1660/2606/303 1623/2553/303 +f 1625/2555/301 1661/2607/301 1626/2556/301 +f 1628/2558/300 1662/2608/300 1629/2559/300 +f 1631/2561/302 1663/2609/302 1632/2562/302 +f 1634/2564/303 1664/2610/303 1635/2565/303 +s 1 +f 1665/2611/309 1666/2612/310 1667/2613/301 +f 1668/2614/311 1669/2615/312 1670/2616/303 +f 1671/2617/313 1607/2618/314 1672/2619/300 +f 1672/2620/300 1673/2621/315 1674/2622/316 +f 1675/2623/302 1676/2624/317 1665/2611/309 +f 1667/2613/301 1677/2625/318 1668/2614/311 +f 1670/2616/303 1678/2626/319 1671/2617/313 +f 1674/2622/316 1679/2627/320 1675/2623/302 +f 1676/2628/317 1680/2629/321 1681/2630/322 +f 1677/2631/318 1682/2632/323 1683/2633/324 +f 1678/2634/319 1684/2635/325 1685/2636/326 +f 1679/2637/320 1686/2638/327 1680/2629/321 +f 1666/2612/310 1681/2630/322 1682/2632/323 +f 1677/2631/318 1684/2635/325 1669/2639/312 +f 1682/2632/323 1648/2640/328 1683/2633/324 +f 1685/2636/326 1647/2641/329 1608/2642/330 +f 1686/2638/327 1650/2643/331 1680/2629/321 +f 1682/2632/323 1609/2644/332 1649/2645/333 +f 1684/2635/325 1648/2640/328 1647/2641/329 +f 1680/2629/321 1609/2644/332 1681/2630/322 +f 1673/2646/315 1607/2647/314 1686/2638/327 +f 1686/2638/327 1607/2647/314 1651/2648/334 +f 1678/2634/319 1685/2636/326 1607/2649/314 +f 1685/2636/326 1608/2642/330 1607/2649/314 +f 1687/2650/309 1688/2651/310 1689/2652/301 +f 1690/2653/311 1691/2654/312 1692/2655/303 +f 1693/2656/313 1610/2657/314 1694/2658/300 +f 1694/2659/300 1695/2660/315 1696/2661/316 +f 1697/2662/302 1698/2663/317 1687/2650/309 +f 1689/2652/301 1699/2664/318 1690/2653/311 +f 1692/2655/303 1700/2665/319 1693/2656/313 +f 1696/2661/316 1701/2666/320 1697/2662/302 +f 1698/2667/317 1702/2668/321 1703/2669/322 +f 1688/2651/310 1704/2670/324 1699/2671/318 +f 1691/2672/312 1705/2673/326 1700/2674/319 +f 1695/2675/315 1702/2668/321 1701/2676/320 +f 1688/2651/310 1703/2669/322 1706/2677/323 +f 1699/2671/318 1707/2678/325 1691/2672/312 +f 1706/2677/323 1653/2679/328 1704/2670/324 +f 1705/2673/326 1652/2680/329 1611/2681/330 +f 1708/2682/327 1655/2683/331 1702/2668/321 +f 1706/2677/323 1612/2684/332 1654/2685/333 +f 1707/2678/325 1653/2679/328 1652/2680/329 +f 1702/2668/321 1612/2684/332 1703/2669/322 +f 1695/2675/315 1610/2686/314 1708/2682/327 +f 1708/2682/327 1610/2686/314 1656/2687/334 +f 1700/2674/319 1705/2673/326 1610/2688/314 +f 1705/2673/326 1611/2681/330 1610/2688/314 +f 1665/2611/309 1676/2624/317 1666/2612/310 +f 1668/2614/311 1677/2625/318 1669/2615/312 +f 1671/2617/313 1678/2626/319 1607/2618/314 +f 1672/2620/300 1607/2689/314 1673/2621/315 +f 1675/2623/302 1679/2627/320 1676/2624/317 +f 1667/2613/301 1666/2612/310 1677/2625/318 +f 1670/2616/303 1669/2615/312 1678/2626/319 +f 1674/2622/316 1673/2621/315 1679/2627/320 +f 1676/2628/317 1679/2637/320 1680/2629/321 +f 1677/2631/318 1666/2612/310 1682/2632/323 +f 1678/2634/319 1669/2639/312 1684/2635/325 +f 1679/2637/320 1673/2646/315 1686/2638/327 +f 1666/2612/310 1676/2628/317 1681/2630/322 +f 1677/2631/318 1683/2633/324 1684/2635/325 +f 1682/2632/323 1649/2645/333 1648/2640/328 +f 1685/2636/326 1684/2635/325 1647/2641/329 +f 1686/2638/327 1651/2648/334 1650/2643/331 +f 1682/2632/323 1681/2630/322 1609/2644/332 +f 1684/2635/325 1683/2633/324 1648/2640/328 +f 1680/2629/321 1650/2643/331 1609/2644/332 +f 1687/2650/309 1698/2663/317 1688/2651/310 +f 1690/2653/311 1699/2664/318 1691/2654/312 +f 1693/2656/313 1700/2665/319 1610/2657/314 +f 1694/2659/300 1610/2690/314 1695/2660/315 +f 1697/2662/302 1701/2666/320 1698/2663/317 +f 1689/2652/301 1688/2651/310 1699/2664/318 +f 1692/2655/303 1691/2654/312 1700/2665/319 +f 1696/2661/316 1695/2660/315 1701/2666/320 +f 1698/2667/317 1701/2676/320 1702/2668/321 +f 1688/2651/310 1706/2677/323 1704/2670/324 +f 1691/2672/312 1707/2678/325 1705/2673/326 +f 1695/2675/315 1708/2682/327 1702/2668/321 +f 1688/2651/310 1698/2667/317 1703/2669/322 +f 1699/2671/318 1704/2670/324 1707/2678/325 +f 1706/2677/323 1654/2685/333 1653/2679/328 +f 1705/2673/326 1707/2678/325 1652/2680/329 +f 1708/2682/327 1656/2687/334 1655/2683/331 +f 1706/2677/323 1703/2669/322 1612/2684/332 +f 1707/2678/325 1704/2670/324 1653/2679/328 +f 1702/2668/321 1655/2683/331 1612/2684/332 +o Huge_Erector +v 0.562500 3.500000 -3.187500 +v 0.937500 3.500000 -2.812500 +v 0.562500 3.500000 -2.812500 +v 0.937500 14.500000 -2.812499 +v 0.562500 14.500000 -3.187499 +v 0.562500 14.500000 -2.812499 +v 0.937500 3.500000 -3.187500 +v 0.937500 14.500000 -3.187499 +v -0.937500 5.750000 -1.812500 +v 0.937500 6.125000 -1.812500 +v 0.937500 5.750000 -1.812500 +v -0.562500 6.125000 -1.187500 +v -0.937500 5.750000 -0.812500 +v -0.562500 5.750000 -1.187500 +v -0.937500 6.125000 -0.812500 +v -0.937500 6.125000 -1.812500 +v 0.937500 5.750000 -0.812500 +v 0.562500 6.125000 -1.187500 +v 0.937500 6.125000 -0.812500 +v 0.562500 5.750000 -1.187500 +v -0.937500 8.750000 -1.812500 +v 0.937500 9.125000 -1.812500 +v 0.937500 8.750000 -1.812500 +v -0.562500 9.125000 -0.937500 +v -0.937500 8.750000 -0.562500 +v -0.562500 8.750000 -0.937500 +v -0.937500 9.125000 -0.562500 +v -0.937500 9.125000 -1.812500 +v 0.937500 8.750000 -0.562500 +v 0.562500 9.125000 -0.937500 +v 0.937500 9.125000 -0.562500 +v 0.562500 8.750000 -0.937500 +v -0.937500 10.750000 -1.812500 +v 0.937500 11.125000 -1.812500 +v 0.937500 10.750000 -1.812500 +v -0.562500 11.125000 -0.937500 +v -0.937500 10.750000 -0.562500 +v -0.562500 10.750000 -0.937500 +v -0.937500 11.125000 -0.562500 +v -0.937500 11.125000 -1.812500 +v 0.937500 10.750000 -0.562500 +v 0.562500 11.125000 -0.937500 +v 0.937500 11.125000 -0.562500 +v 0.562500 10.750000 -0.937500 +v -0.562500 8.812500 -1.812500 +v 0.562500 8.812500 -2.062500 +v 0.562500 8.812500 -1.812500 +v -0.562500 11.062500 -2.062500 +v 0.562500 10.812500 -2.062500 +v -0.562500 10.812500 -2.062500 +v 0.562500 11.062500 -1.812500 +v -0.562500 11.062500 -1.812500 +v -0.562500 10.812500 -1.812500 +v 0.562500 10.812500 -1.812500 +v 0.562500 9.062500 -1.812500 +v -0.562500 9.062500 -2.062500 +v -0.562500 9.062500 -1.812500 +v -0.562500 8.812500 -2.062500 +v -0.562500 5.812500 -1.812500 +v 0.562500 5.812500 -2.062500 +v 0.562500 5.812500 -1.812500 +v 0.562500 6.062500 -1.812500 +v -0.562500 6.062500 -2.062500 +v -0.562500 6.062500 -1.812500 +v -0.562500 5.812500 -2.062500 +v -0.562500 3.500000 -3.000000 +v 0.562500 14.500000 -2.999999 +v 0.562500 3.500000 -3.000000 +v -0.750000 14.500000 -2.187499 +v -0.750000 3.500000 -2.812500 +v -0.750000 3.500000 -2.187500 +v 0.562500 14.500000 -1.999999 +v -0.562500 3.500000 -2.000000 +v 0.562500 3.500000 -2.000000 +v 0.750000 3.500000 -2.812500 +v 0.750000 14.500000 -2.187499 +v 0.750000 3.500000 -2.187500 +v 0.562500 3.500000 -2.187500 +v 0.937500 3.500000 -1.812500 +v 0.562500 3.500000 -1.812500 +v 0.937500 14.500000 -1.812499 +v 0.562500 14.500000 -2.187499 +v 0.562500 14.500000 -1.812499 +v 0.937500 3.500000 -2.187500 +v 0.937500 14.500000 -2.187499 +v -0.937500 3.500000 -3.187500 +v -0.562500 3.500000 -2.812500 +v -0.937500 3.500000 -2.812500 +v -0.562500 14.500000 -2.812499 +v -0.937500 14.500000 -3.187499 +v -0.937500 14.500000 -2.812499 +v -0.562500 3.500000 -3.187500 +v -0.562500 14.500000 -3.187499 +v -0.937500 3.500000 -2.187500 +v -0.562500 3.500000 -1.812500 +v -0.937500 3.500000 -1.812500 +v -0.562500 14.500000 -1.812499 +v -0.937500 14.500000 -2.187499 +v -0.937500 14.500000 -1.812499 +v -0.562500 3.500000 -2.187500 +v -0.562500 14.500000 -2.187499 +v 0.562500 14.500000 -2.999999 +v -0.562500 3.500000 -3.000000 +v 0.562500 3.500000 -3.000000 +v -0.750000 3.500000 -2.812500 +v -0.750000 14.500000 -2.187499 +v -0.750000 3.500000 -2.187500 +v -0.562500 3.500000 -2.000000 +v 0.562500 14.500000 -1.999999 +v 0.562500 3.500000 -2.000000 +v 0.750000 14.500000 -2.187499 +v 0.750000 3.500000 -2.812500 +v 0.750000 3.500000 -2.187500 +v 0.562500 11.062500 -2.062500 +v 0.562500 9.062500 -2.062500 +v 0.562500 6.062500 -2.062500 +v -0.562500 14.500000 -2.999999 +v -0.750000 14.500000 -2.812499 +v -0.562500 14.500000 -1.999999 +v 0.750000 14.500000 -2.812499 +v -0.562500 14.500000 -2.999999 +v -0.750000 14.500000 -2.812499 +v -0.562500 14.500000 -1.999999 +v 0.750000 14.500000 -2.812499 +vt 0.850649 0.031250 +vt 0.831169 -0.000000 +vt 0.850649 -0.000000 +vt 0.831169 0.979167 +vt 0.850649 0.947917 +vt 0.850649 0.979167 +vt 0.870130 0.031250 +vt 0.889610 0.031250 +vt 0.870130 0.947917 +vt 0.909091 0.031250 +vt 0.889610 0.947917 +vt 0.831169 0.947917 +vt 0.831169 0.031250 +vt 0.136364 0.739583 +vt 0.038961 0.770833 +vt 0.038961 0.739583 +vt 0.116883 0.875000 +vt 0.136364 0.906250 +vt 0.116883 0.906250 +vt 0.155844 0.791667 +vt 0.136364 0.875000 +vt 0.136364 0.791667 +vt 0.038961 0.791667 +vt 0.136364 0.791667 +vt 0.058442 0.843750 +vt 0.038961 0.791667 +vt 0.019481 0.875000 +vt 0.019481 0.791667 +vt 0.058442 0.843750 +vt 0.038961 0.875000 +vt 0.058442 0.906250 +vt 0.038961 0.906250 +vt 0.058442 0.875000 +vt 0.136364 0.739583 +vt 0.038961 0.770833 +vt 0.038961 0.739583 +vt 0.116883 0.875000 +vt 0.136364 0.906250 +vt 0.116883 0.906250 +vt 0.155844 0.770833 +vt 0.136364 0.875000 +vt 0.136364 0.770833 +vt 0.038961 0.770833 +vt 0.136364 0.770833 +vt 0.058442 0.843750 +vt 0.019481 0.875000 +vt 0.019481 0.770833 +vt 0.058442 0.843750 +vt 0.038961 0.875000 +vt 0.058442 0.906250 +vt 0.038961 0.906250 +vt 0.058442 0.875000 +vt 0.136364 0.739583 +vt 0.038961 0.770833 +vt 0.038961 0.739583 +vt 0.116883 0.875000 +vt 0.136364 0.906250 +vt 0.116883 0.906250 +vt 0.155844 0.770833 +vt 0.136364 0.875000 +vt 0.136364 0.770833 +vt 0.038961 0.770833 +vt 0.136364 0.770833 +vt 0.058442 0.843750 +vt 0.019481 0.875000 +vt 0.019481 0.770833 +vt 0.058442 0.843750 +vt 0.038961 0.875000 +vt 0.058442 0.906250 +vt 0.038961 0.906250 +vt 0.058442 0.875000 +vt 0.967532 0.916667 +vt 0.909091 0.937500 +vt 0.909091 0.916667 +vt 0.967532 0.958333 +vt 0.909091 0.937500 +vt 0.967532 0.937500 +vt 0.909091 0.979167 +vt 0.967532 0.979167 +vt 0.967532 0.916667 +vt 0.909091 0.916667 +vt 0.909091 0.979167 +vt 0.967532 0.958333 +vt 0.967532 0.979167 +vt 0.967532 0.937500 +vt 0.967532 0.916667 +vt 0.909091 0.937500 +vt 0.909091 0.916667 +vt 0.909091 0.979167 +vt 0.967532 0.958333 +vt 0.967532 0.979167 +vt 0.967532 0.937500 +vt 0.967532 0.000000 +vt 0.909091 0.916667 +vt 0.909091 -0.000000 +vt 1.000000 0.916667 +vt 0.967532 -0.000000 +vt 1.000000 -0.000000 +vt 0.967532 0.916667 +vt 0.909091 -0.000000 +vt 0.967532 0.000000 +vt 1.000000 -0.000000 +vt 0.967532 0.916667 +vt 0.967532 -0.000000 +vt 0.850649 0.031250 +vt 0.831169 -0.000000 +vt 0.850649 -0.000000 +vt 0.831169 0.979167 +vt 0.850649 0.947917 +vt 0.850649 0.979167 +vt 0.870130 0.031250 +vt 0.889610 0.031250 +vt 0.870130 0.947917 +vt 0.909091 0.031250 +vt 0.889610 0.947917 +vt 0.831169 0.947917 +vt 0.831169 0.031250 +vt 0.850649 0.031250 +vt 0.831169 -0.000000 +vt 0.850649 -0.000000 +vt 0.831169 0.979167 +vt 0.850649 0.947917 +vt 0.850649 0.979167 +vt 0.870130 0.031250 +vt 0.889610 0.031250 +vt 0.870130 0.947917 +vt 0.909091 0.031250 +vt 0.889610 0.947917 +vt 0.831169 0.947917 +vt 0.831169 0.031250 +vt 0.850649 0.031250 +vt 0.831169 -0.000000 +vt 0.850649 -0.000000 +vt 0.831169 0.979167 +vt 0.850649 0.947917 +vt 0.850649 0.979167 +vt 0.870130 0.031250 +vt 0.889610 0.031250 +vt 0.870130 0.947917 +vt 0.909091 0.031250 +vt 0.889610 0.947917 +vt 0.831169 0.947917 +vt 0.831169 0.031250 +vt 0.909091 0.916667 +vt 0.967532 0.000000 +vt 0.909091 -0.000000 +vt 0.967532 -0.000000 +vt 1.000000 0.916667 +vt 1.000000 -0.000000 +vt 0.909091 -0.000000 +vt 0.967532 0.916667 +vt 0.967532 0.000000 +vt 0.967532 0.916667 +vt 1.000000 -0.000000 +vt 0.967532 -0.000000 +vt 0.909091 0.947917 +vt 0.136364 0.770833 +vt 0.155844 0.875000 +vt 0.136364 0.875000 +vt 0.116883 0.843750 +vt 0.038961 0.875000 +vt 0.116883 0.843750 +vt 0.155844 0.875000 +vt 0.136364 0.875000 +vt 0.116883 0.843750 +vt 0.038961 0.875000 +vt 0.116883 0.843750 +vt 0.155844 0.875000 +vt 0.136364 0.875000 +vt 0.116883 0.843750 +vt 0.038961 0.875000 +vt 0.116883 0.843750 +vt 0.909091 0.958333 +vt 0.909091 0.958333 +vt 0.909091 0.958333 +vt 0.967532 0.916667 +vt 0.967532 0.916667 +vt 0.909091 0.916667 +vt 1.000000 0.916667 +vt 0.909091 0.947917 +vt 0.909091 0.947917 +vt 0.909091 0.947917 +vt 0.967532 0.916667 +vt 0.967532 0.916667 +vt 0.909091 0.916667 +vt 1.000000 0.916667 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +s off +f 1709/2691/335 1710/2692/335 1711/2693/335 +f 1712/2694/336 1713/2695/336 1714/2696/336 +f 1711/2697/337 1713/2695/337 1709/2691/337 +f 1710/2698/338 1714/2699/338 1711/2697/338 +f 1715/2700/339 1712/2701/339 1710/2698/339 +f 1709/2691/340 1716/2702/340 1715/2703/340 +f 1717/2704/340 1718/2705/340 1719/2706/340 +f 1720/2707/341 1721/2708/341 1722/2709/341 +f 1717/2710/337 1723/2711/337 1724/2712/337 +f 1717/2713/335 1719/2714/335 1722/2715/335 +f 1718/2716/339 1725/2717/339 1719/2718/339 +f 1718/2716/336 1724/2712/336 1726/2719/336 +f 1727/2720/342 1728/2721/342 1725/2722/342 +f 1726/2723/338 1722/2709/338 1728/2721/338 +f 1729/2724/340 1730/2725/340 1731/2726/340 +f 1732/2727/341 1733/2728/341 1734/2729/341 +f 1729/2730/337 1735/2731/337 1736/2732/337 +f 1729/2733/335 1731/2734/335 1734/2735/335 +f 1730/2725/339 1737/2736/339 1731/2737/339 +f 1730/2725/336 1736/2732/336 1738/2738/336 +f 1739/2739/342 1740/2740/342 1737/2741/342 +f 1738/2742/338 1734/2729/338 1740/2740/338 +f 1741/2743/340 1742/2744/340 1743/2745/340 +f 1744/2746/341 1745/2747/341 1746/2748/341 +f 1741/2749/337 1747/2750/337 1748/2751/337 +f 1741/2752/335 1743/2753/335 1746/2754/335 +f 1742/2744/339 1749/2755/339 1743/2756/339 +f 1742/2744/336 1748/2751/336 1750/2757/336 +f 1751/2758/342 1752/2759/342 1749/2760/342 +f 1750/2761/338 1746/2748/338 1752/2759/338 +f 1753/2762/335 1754/2763/335 1755/2764/335 +f 1756/2765/340 1757/2766/340 1758/2767/340 +f 1759/2768/336 1756/2765/336 1760/2769/336 +f 1761/2770/335 1757/2766/335 1762/2771/335 +f 1763/2772/336 1764/2773/336 1765/2774/336 +f 1764/2773/340 1754/2763/340 1766/2775/340 +f 1767/2776/335 1768/2777/335 1769/2778/335 +f 1770/2779/336 1771/2780/336 1772/2781/336 +f 1771/2780/340 1768/2777/340 1773/2782/340 +f 1774/2783/340 1775/2784/340 1776/2785/340 +f 1777/2786/337 1778/2787/337 1779/2788/337 +f 1780/2789/338 1781/2790/338 1782/2791/338 +f 1783/2792/339 1784/2793/339 1785/2794/339 +f 1786/2795/335 1787/2796/335 1788/2797/335 +f 1789/2798/336 1790/2799/336 1791/2800/336 +f 1788/2801/337 1790/2799/337 1786/2795/337 +f 1787/2802/338 1791/2803/338 1788/2801/338 +f 1792/2804/339 1789/2805/339 1787/2802/339 +f 1786/2795/340 1793/2806/340 1792/2807/340 +f 1794/2808/335 1795/2809/335 1796/2810/335 +f 1797/2811/336 1798/2812/336 1799/2813/336 +f 1796/2814/337 1798/2812/337 1794/2808/337 +f 1795/2815/338 1799/2816/338 1796/2814/338 +f 1800/2817/339 1797/2818/339 1795/2815/339 +f 1794/2808/340 1801/2819/340 1800/2820/340 +f 1802/2821/335 1803/2822/335 1804/2823/335 +f 1805/2824/336 1806/2825/336 1807/2826/336 +f 1804/2827/337 1806/2825/337 1802/2821/337 +f 1803/2828/338 1807/2829/338 1804/2827/338 +f 1808/2830/339 1805/2831/339 1803/2828/339 +f 1802/2821/340 1809/2832/340 1808/2833/340 +f 1810/2834/338 1811/2835/338 1812/2836/338 +f 1813/2837/339 1814/2838/339 1815/2839/339 +f 1816/2840/340 1817/2841/340 1818/2842/340 +f 1819/2843/337 1820/2844/337 1821/2845/337 +f 1709/2691/335 1715/2703/335 1710/2692/335 +f 1712/2694/336 1716/2702/336 1713/2695/336 +f 1711/2697/337 1714/2699/337 1713/2695/337 +f 1710/2698/338 1712/2701/338 1714/2699/338 +f 1715/2700/339 1716/2846/339 1712/2701/339 +f 1709/2691/340 1713/2695/340 1716/2702/340 +f 1717/2704/340 1724/2847/340 1718/2705/340 +f 1720/2707/341 1723/2711/341 1721/2708/341 +f 1717/2710/337 1721/2848/337 1723/2711/337 +f 1719/2714/335 1725/2849/335 1728/2850/335 +f 1722/2715/335 1721/2851/335 1717/2713/335 +f 1719/2714/335 1728/2850/335 1722/2715/335 +f 1718/2716/339 1727/2720/339 1725/2717/339 +f 1724/2712/336 1723/2711/336 1720/2852/336 +f 1726/2719/336 1727/2720/336 1718/2716/336 +f 1724/2712/336 1720/2852/336 1726/2719/336 +f 1727/2720/342 1726/2723/342 1728/2721/342 +f 1726/2723/338 1720/2707/338 1722/2709/338 +f 1729/2724/340 1736/2732/340 1730/2725/340 +f 1732/2727/341 1735/2731/341 1733/2728/341 +f 1729/2730/337 1733/2853/337 1735/2731/337 +f 1731/2734/335 1737/2854/335 1740/2855/335 +f 1734/2735/335 1733/2856/335 1729/2733/335 +f 1731/2734/335 1740/2855/335 1734/2735/335 +f 1730/2725/339 1739/2739/339 1737/2736/339 +f 1736/2732/336 1735/2731/336 1732/2857/336 +f 1738/2738/336 1739/2739/336 1730/2725/336 +f 1736/2732/336 1732/2857/336 1738/2738/336 +f 1739/2739/342 1738/2742/342 1740/2740/342 +f 1738/2742/338 1732/2727/338 1734/2729/338 +f 1741/2743/340 1748/2751/340 1742/2744/340 +f 1744/2746/341 1747/2750/341 1745/2747/341 +f 1741/2749/337 1745/2858/337 1747/2750/337 +f 1743/2753/335 1749/2859/335 1752/2860/335 +f 1746/2754/335 1745/2861/335 1741/2752/335 +f 1743/2753/335 1752/2860/335 1746/2754/335 +f 1742/2744/339 1751/2758/339 1749/2755/339 +f 1748/2751/336 1747/2750/336 1744/2862/336 +f 1750/2757/336 1751/2758/336 1742/2744/336 +f 1748/2751/336 1744/2862/336 1750/2757/336 +f 1751/2758/342 1750/2761/342 1752/2759/342 +f 1750/2761/338 1744/2746/338 1746/2748/338 +f 1753/2762/335 1766/2775/335 1754/2763/335 +f 1756/2765/340 1822/2863/340 1757/2766/340 +f 1759/2768/336 1822/2863/336 1756/2765/336 +f 1761/2770/335 1758/2767/335 1757/2766/335 +f 1763/2772/336 1823/2864/336 1764/2773/336 +f 1764/2773/340 1823/2864/340 1754/2763/340 +f 1767/2776/335 1773/2782/335 1768/2777/335 +f 1770/2779/336 1824/2865/336 1771/2780/336 +f 1771/2780/340 1824/2865/340 1768/2777/340 +f 1774/2783/340 1825/2866/340 1775/2784/340 +f 1777/2786/337 1826/2867/337 1778/2787/337 +f 1780/2789/338 1827/2868/338 1781/2790/338 +f 1783/2792/339 1828/2869/339 1784/2793/339 +f 1786/2795/335 1792/2807/335 1787/2796/335 +f 1789/2798/336 1793/2806/336 1790/2799/336 +f 1788/2801/337 1791/2803/337 1790/2799/337 +f 1787/2802/338 1789/2805/338 1791/2803/338 +f 1792/2804/339 1793/2870/339 1789/2805/339 +f 1786/2795/340 1790/2799/340 1793/2806/340 +f 1794/2808/335 1800/2820/335 1795/2809/335 +f 1797/2811/336 1801/2819/336 1798/2812/336 +f 1796/2814/337 1799/2816/337 1798/2812/337 +f 1795/2815/338 1797/2818/338 1799/2816/338 +f 1800/2817/339 1801/2871/339 1797/2818/339 +f 1794/2808/340 1798/2812/340 1801/2819/340 +f 1802/2821/335 1808/2833/335 1803/2822/335 +f 1805/2824/336 1809/2832/336 1806/2825/336 +f 1804/2827/337 1807/2829/337 1806/2825/337 +f 1803/2828/338 1805/2831/338 1807/2829/338 +f 1808/2830/339 1809/2872/339 1805/2831/339 +f 1802/2821/340 1806/2825/340 1809/2832/340 +f 1810/2834/338 1829/2873/338 1811/2835/338 +f 1813/2837/339 1830/2874/339 1814/2838/339 +f 1816/2840/340 1831/2875/340 1817/2841/340 +f 1819/2843/337 1832/2876/337 1820/2844/337 +o Huge_Pivot +v 0.875000 3.500000 -1.875000 +v 0.625000 4.500000 -1.875000 +v 0.625000 3.500000 -1.875000 +v 0.625000 3.500000 -2.125000 +v 0.875000 4.500000 -2.125000 +v 0.875000 3.500000 -2.125000 +v 0.562500 2.000000 -2.187500 +v 0.937500 2.000000 -1.812500 +v 0.562500 2.000000 -1.812500 +v -0.937500 2.000000 -2.187500 +v -0.562500 2.000000 -1.812500 +v -0.937500 2.000000 -1.812500 +v 0.937500 3.500000 -2.812500 +v 0.562500 3.500000 -3.187500 +v 0.562500 3.500000 -2.812500 +v -0.562500 3.500000 -2.812500 +v -0.937500 3.500000 -3.187500 +v -0.937500 3.500000 -2.812500 +v -0.937500 1.500000 -3.187500 +v -0.562500 3.500000 -3.187500 +v -0.562500 1.500000 -3.187500 +v -0.562500 1.500000 -2.812500 +v -0.937500 1.500000 -2.812500 +v 0.562500 1.500000 -3.187500 +v 0.937500 3.500000 -3.187500 +v 0.937500 1.500000 -3.187500 +v 0.937500 1.500000 -2.812500 +v 0.562500 1.500000 -2.812500 +v 0.937500 3.500000 -1.812500 +v 0.562500 3.500000 -2.187500 +v 0.562500 3.500000 -1.812500 +v -0.562500 3.500000 -1.812500 +v -0.937500 3.500000 -2.187500 +v -0.937500 3.500000 -1.812500 +v -0.562500 2.000000 -2.187500 +v 0.937500 2.000000 -2.187500 +v -0.562500 3.500000 -2.187500 +v 0.937500 3.500000 -2.187500 +v 0.625000 3.500000 -3.125000 +v 0.875000 4.500000 -3.125000 +v 0.875000 3.500000 -3.125000 +v 0.875000 3.500000 -2.875000 +v 0.625000 4.500000 -2.875000 +v 0.625000 3.500000 -2.875000 +v 0.875000 4.500000 -2.875000 +v 0.625000 4.500000 -3.125000 +v 0.875000 4.500000 -1.875000 +v 0.625000 4.500000 -2.125000 +v -0.625000 3.500000 -1.875000 +v -0.875000 4.500000 -1.875000 +v -0.875000 3.500000 -1.875000 +v -0.875000 3.500000 -2.125000 +v -0.625000 4.500000 -2.125000 +v -0.625000 3.500000 -2.125000 +v -0.875000 3.500000 -3.125000 +v -0.625000 4.500000 -3.125000 +v -0.625000 3.500000 -3.125000 +v -0.625000 3.500000 -2.875000 +v -0.875000 4.500000 -2.875000 +v -0.875000 3.500000 -2.875000 +v -0.625000 4.500000 -2.875000 +v -0.875000 4.500000 -3.125000 +v -0.625000 4.500000 -1.875000 +v -0.875000 4.500000 -2.125000 +v 0.750000 2.000000 -2.187500 +v 0.750000 3.500000 -2.812500 +v 0.750000 3.500000 -2.187500 +v -0.750000 3.500000 -2.812500 +v -0.750000 2.000000 -2.187500 +v -0.750000 3.500000 -2.187500 +v -0.562500 2.000000 -2.000000 +v 0.562500 3.500000 -2.000000 +v -0.562500 3.500000 -2.000000 +v 0.562500 3.500000 -3.000000 +v -0.562500 2.000000 -3.000000 +v -0.562500 3.500000 -3.000000 +v 0.750000 3.500000 -2.812500 +v 0.750000 2.000000 -2.187500 +v 0.750000 3.500000 -2.187500 +v -0.750000 2.000000 -2.187500 +v -0.750000 3.500000 -2.812500 +v -0.750000 3.500000 -2.187500 +v 0.562500 3.500000 -2.000000 +v -0.562500 2.000000 -2.000000 +v -0.562500 3.500000 -2.000000 +v -0.562500 2.000000 -3.000000 +v 0.562500 3.500000 -3.000000 +v -0.562500 3.500000 -3.000000 +v 0.750000 2.000000 -2.812500 +v -0.750000 2.000000 -2.812500 +v 0.562500 2.000000 -2.000000 +v 0.562500 2.000000 -3.000000 +v 0.750000 2.000000 -2.812500 +v -0.750000 2.000000 -2.812500 +v 0.562500 2.000000 -2.000000 +v 0.562500 2.000000 -3.000000 +vt 0.168831 0.541667 +vt 0.155844 0.625000 +vt 0.155844 0.541667 +vt 0.142857 0.541667 +vt 0.129870 0.625000 +vt 0.129870 0.541667 +vt 0.051948 0.708333 +vt 0.071429 0.739583 +vt 0.051948 0.739583 +vt 0.051948 0.708333 +vt 0.071429 0.739583 +vt 0.051948 0.739583 +vt 0.051948 0.739583 +vt 0.071429 0.708333 +vt 0.071429 0.739583 +vt 0.051948 0.739583 +vt 0.071429 0.708333 +vt 0.071429 0.739583 +vt 0.071429 0.541667 +vt 0.051948 0.708333 +vt 0.051948 0.541667 +vt 0.110390 0.541667 +vt 0.090909 0.708333 +vt 0.090909 0.541667 +vt 0.071429 0.541667 +vt 0.051948 0.708333 +vt 0.051948 0.541667 +vt 0.110390 0.541667 +vt 0.090909 0.708333 +vt 0.090909 0.541667 +vt 0.129870 0.541667 +vt 0.110390 0.708333 +vt 0.129870 0.541667 +vt 0.110390 0.708333 +vt 0.051948 0.739583 +vt 0.071429 0.708333 +vt 0.071429 0.739583 +vt 0.051948 0.739583 +vt 0.071429 0.708333 +vt 0.071429 0.739583 +vt 0.110390 0.583333 +vt 0.090909 0.708333 +vt 0.090909 0.583333 +vt 0.129870 0.583333 +vt 0.110390 0.708333 +vt 0.110390 0.583333 +vt 0.090909 0.583333 +vt 0.071429 0.583333 +vt 0.129870 0.583333 +vt 0.110390 0.708333 +vt 0.071429 0.583333 +vt 0.051948 0.708333 +vt 0.051948 0.583333 +vt 0.090909 0.708333 +vt 0.051948 0.708333 +vt 0.051948 0.583333 +vt 0.142857 0.541667 +vt 0.129870 0.625000 +vt 0.129870 0.541667 +vt 0.168831 0.541667 +vt 0.155844 0.625000 +vt 0.155844 0.541667 +vt 0.181818 0.541667 +vt 0.168831 0.625000 +vt 0.142857 0.625000 +vt 0.181818 0.541667 +vt 0.168831 0.625000 +vt 0.142857 0.625000 +vt 0.168831 0.541667 +vt 0.155844 0.625000 +vt 0.155844 0.541667 +vt 0.142857 0.541667 +vt 0.129870 0.625000 +vt 0.129870 0.541667 +vt 0.142857 0.541667 +vt 0.129870 0.625000 +vt 0.129870 0.541667 +vt 0.168831 0.541667 +vt 0.155844 0.625000 +vt 0.155844 0.541667 +vt 0.181818 0.541667 +vt 0.168831 0.625000 +vt 0.142857 0.625000 +vt 0.181818 0.541667 +vt 0.168831 0.625000 +vt 0.142857 0.625000 +vt 0.240260 0.541667 +vt 0.272727 0.666667 +vt 0.240260 0.666667 +vt 0.240260 0.666667 +vt 0.272727 0.541667 +vt 0.272727 0.666667 +vt 0.181818 0.541667 +vt 0.240260 0.666667 +vt 0.181818 0.666667 +vt 0.181818 0.666667 +vt 0.240260 0.541667 +vt 0.240260 0.666667 +vt 0.272727 0.666667 +vt 0.240260 0.541667 +vt 0.240260 0.666667 +vt 0.272727 0.541667 +vt 0.240260 0.666667 +vt 0.272727 0.666667 +vt 0.240260 0.666667 +vt 0.181818 0.541667 +vt 0.181818 0.666667 +vt 0.240260 0.541667 +vt 0.181818 0.666667 +vt 0.240260 0.666667 +vt 0.071429 0.708333 +vt 0.071429 0.708333 +vt 0.129870 0.708333 +vt 0.129870 0.708333 +vt 0.129870 0.708333 +vt 0.129870 0.708333 +vt 0.181818 0.625000 +vt 0.181818 0.625000 +vt 0.181818 0.625000 +vt 0.181818 0.625000 +vt 0.272727 0.541667 +vt 0.240260 0.541667 +vt 0.240260 0.541667 +vt 0.181818 0.541667 +vt 0.272727 0.541667 +vt 0.240260 0.541667 +vt 0.240260 0.541667 +vt 0.181818 0.541667 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +s off +f 1833/2877/343 1834/2878/343 1835/2879/343 +f 1836/2880/344 1837/2881/344 1838/2882/344 +f 1839/2883/345 1840/2884/345 1841/2885/345 +f 1842/2886/345 1843/2887/345 1844/2888/345 +f 1845/2889/346 1846/2890/346 1847/2891/346 +f 1848/2892/346 1849/2893/346 1850/2894/346 +f 1851/2895/344 1852/2896/344 1853/2897/344 +f 1854/2898/343 1850/2899/343 1855/2900/343 +f 1856/2901/344 1857/2902/344 1858/2903/344 +f 1859/2904/343 1847/2905/343 1860/2906/343 +f 1853/2907/347 1848/2908/347 1854/2898/347 +f 1855/2900/348 1849/2893/348 1851/2895/348 +f 1858/2909/347 1845/2910/347 1859/2904/347 +f 1860/2906/348 1846/2890/348 1856/2901/348 +f 1861/2911/346 1862/2912/346 1863/2913/346 +f 1864/2914/346 1865/2915/346 1866/2916/346 +f 1840/2917/343 1863/2918/343 1841/2919/343 +f 1867/2920/347 1864/2921/347 1843/2922/347 +f 1844/2923/348 1865/2915/348 1842/2924/348 +f 1868/2925/347 1861/2926/347 1840/2917/347 +f 1841/2919/348 1862/2912/348 1839/2927/348 +f 1842/2924/344 1869/2928/344 1867/2929/344 +f 1843/2922/343 1866/2930/343 1844/2923/343 +f 1839/2927/344 1870/2931/344 1868/2932/344 +f 1871/2933/344 1872/2934/344 1873/2935/344 +f 1874/2936/343 1875/2937/343 1876/2938/343 +f 1873/2939/347 1877/2940/347 1874/2936/347 +f 1876/2938/348 1878/2941/348 1871/2933/348 +f 1838/2942/347 1879/2943/347 1833/2877/347 +f 1835/2879/348 1880/2944/348 1836/2880/348 +f 1881/2945/343 1882/2946/343 1883/2947/343 +f 1884/2948/344 1885/2949/344 1886/2950/344 +f 1887/2951/344 1888/2952/344 1889/2953/344 +f 1890/2954/343 1891/2955/343 1892/2956/343 +f 1889/2957/347 1893/2958/347 1890/2954/347 +f 1892/2956/348 1894/2959/348 1887/2951/348 +f 1886/2960/347 1895/2961/347 1881/2945/347 +f 1883/2947/348 1896/2962/348 1884/2948/348 +f 1897/2963/347 1898/2964/347 1899/2965/347 +f 1900/2966/348 1901/2967/348 1902/2968/348 +f 1903/2969/343 1904/2970/343 1905/2971/343 +f 1906/2972/344 1907/2973/344 1908/2974/344 +f 1909/2975/348 1910/2976/348 1911/2977/348 +f 1912/2978/347 1913/2979/347 1914/2980/347 +f 1915/2981/344 1916/2982/344 1917/2983/344 +f 1918/2984/343 1919/2985/343 1920/2986/343 +f 1833/2877/343 1879/2943/343 1834/2878/343 +f 1836/2880/344 1880/2944/344 1837/2881/344 +f 1839/2883/345 1868/2987/345 1840/2884/345 +f 1842/2886/345 1867/2988/345 1843/2887/345 +f 1845/2889/346 1857/2902/346 1846/2890/346 +f 1848/2892/346 1852/2896/346 1849/2893/346 +f 1851/2895/344 1849/2893/344 1852/2896/344 +f 1854/2898/343 1848/2908/343 1850/2899/343 +f 1856/2901/344 1846/2890/344 1857/2902/344 +f 1859/2904/343 1845/2910/343 1847/2905/343 +f 1853/2907/347 1852/2989/347 1848/2908/347 +f 1855/2900/348 1850/2899/348 1849/2893/348 +f 1858/2909/347 1857/2990/347 1845/2910/347 +f 1860/2906/348 1847/2905/348 1846/2890/348 +f 1861/2911/346 1870/2931/346 1862/2912/346 +f 1864/2914/346 1869/2928/346 1865/2915/346 +f 1840/2917/343 1861/2926/343 1863/2918/343 +f 1867/2920/347 1869/2991/347 1864/2921/347 +f 1844/2923/348 1866/2930/348 1865/2915/348 +f 1868/2925/347 1870/2992/347 1861/2926/347 +f 1841/2919/348 1863/2918/348 1862/2912/348 +f 1842/2924/344 1865/2915/344 1869/2928/344 +f 1843/2922/343 1864/2921/343 1866/2930/343 +f 1839/2927/344 1862/2912/344 1870/2931/344 +f 1871/2933/344 1878/2941/344 1872/2934/344 +f 1874/2936/343 1877/2940/343 1875/2937/343 +f 1873/2939/347 1872/2993/347 1877/2940/347 +f 1876/2938/348 1875/2937/348 1878/2941/348 +f 1838/2942/347 1837/2994/347 1879/2943/347 +f 1835/2879/348 1834/2878/348 1880/2944/348 +f 1881/2945/343 1895/2961/343 1882/2946/343 +f 1884/2948/344 1896/2962/344 1885/2949/344 +f 1887/2951/344 1894/2959/344 1888/2952/344 +f 1890/2954/343 1893/2958/343 1891/2955/343 +f 1889/2957/347 1888/2995/347 1893/2958/347 +f 1892/2956/348 1891/2955/348 1894/2959/348 +f 1886/2960/347 1885/2996/347 1895/2961/347 +f 1883/2947/348 1882/2946/348 1896/2962/348 +f 1897/2963/347 1921/2997/347 1898/2964/347 +f 1900/2966/348 1922/2998/348 1901/2967/348 +f 1903/2969/343 1923/2999/343 1904/2970/343 +f 1906/2972/344 1924/3000/344 1907/2973/344 +f 1909/2975/348 1925/3001/348 1910/2976/348 +f 1912/2978/347 1926/3002/347 1913/2979/347 +f 1915/2981/344 1927/3003/344 1916/2982/344 +f 1918/2984/343 1928/3004/343 1919/2985/343 +o Huge_Rope +v 0.125000 5.750000 2.500000 +v 0.198223 5.573223 1.000000 +v 0.198223 5.573223 2.500000 +v 0.375000 5.500000 1.000000 +v 0.375000 5.500000 2.500000 +v 0.551777 5.573223 2.500000 +v 0.625000 5.750000 1.000000 +v 0.625000 5.750000 2.500000 +v 0.551777 5.573223 1.000000 +v 0.551777 5.926777 2.500000 +v 0.375000 6.000000 1.000000 +v 0.375000 6.000000 2.500000 +v 0.198223 5.926777 2.500000 +v 0.125000 5.750000 1.000000 +v 0.551777 5.926777 1.000000 +v 0.198223 5.926777 1.000000 +v -0.625000 5.750000 2.500000 +v -0.551777 5.573223 1.000000 +v -0.551777 5.573223 2.500000 +v -0.375000 5.500000 1.000000 +v -0.375000 5.500000 2.500000 +v -0.198223 5.573223 2.500000 +v -0.125000 5.750000 1.000000 +v -0.125000 5.750000 2.500000 +v -0.198223 5.573223 1.000000 +v -0.198223 5.926777 2.500000 +v -0.375000 6.000000 1.000000 +v -0.375000 6.000000 2.500000 +v -0.551777 5.926777 2.500000 +v -0.625000 5.750000 1.000000 +v -0.198223 5.926777 1.000000 +v -0.551777 5.926777 1.000000 +v 0.125000 10.250000 2.250000 +v 0.198223 10.073223 0.750000 +v 0.198223 10.073223 2.250000 +v 0.375000 10.000000 0.750000 +v 0.375000 10.000000 2.250000 +v 0.551777 10.073223 2.250000 +v 0.625000 10.250000 0.750000 +v 0.625000 10.250000 2.250000 +v 0.551777 10.073223 0.750000 +v 0.551777 10.426777 2.250000 +v 0.375000 10.500000 0.750000 +v 0.375000 10.500000 2.250000 +v 0.198223 10.426777 2.250000 +v 0.125000 10.250000 0.750000 +v 0.551777 10.426777 0.750000 +v 0.198223 10.426777 0.750000 +v -0.625000 10.250000 2.250000 +v -0.551777 10.073223 0.750000 +v -0.551777 10.073223 2.250000 +v -0.375000 10.000000 0.750000 +v -0.375000 10.000000 2.250000 +v -0.198223 10.073223 2.250000 +v -0.125000 10.250000 0.750000 +v -0.125000 10.250000 2.250000 +v -0.198223 10.073223 0.750000 +v -0.198223 10.426777 2.250000 +v -0.375000 10.500000 0.750000 +v -0.375000 10.500000 2.250000 +v -0.551777 10.426777 2.250000 +v -0.625000 10.250000 0.750000 +v -0.198223 10.426777 0.750000 +v -0.551777 10.426777 0.750000 +vt 0.538961 0.500000 +vt 0.529221 0.625000 +vt 0.529221 0.500000 +vt 0.519481 0.625000 +vt 0.519481 0.500000 +vt 0.587662 0.500000 +vt 0.577922 0.625000 +vt 0.577922 0.500000 +vt 0.597403 0.625000 +vt 0.587662 0.625000 +vt 0.568182 0.500000 +vt 0.558442 0.625000 +vt 0.558442 0.500000 +vt 0.548701 0.500000 +vt 0.538961 0.625000 +vt 0.568182 0.625000 +vt 0.548701 0.625000 +vt 0.616883 0.500000 +vt 0.607143 0.625000 +vt 0.607143 0.500000 +vt 0.597403 0.625000 +vt 0.597403 0.500000 +vt 0.665585 0.500000 +vt 0.655844 0.625000 +vt 0.655844 0.500000 +vt 0.675325 0.625000 +vt 0.665585 0.625000 +vt 0.646104 0.500000 +vt 0.636364 0.625000 +vt 0.636364 0.500000 +vt 0.626623 0.500000 +vt 0.616883 0.625000 +vt 0.646104 0.625000 +vt 0.626623 0.625000 +vt 0.538961 0.500000 +vt 0.529221 0.625000 +vt 0.529221 0.500000 +vt 0.519481 0.625000 +vt 0.519481 0.500000 +vt 0.587662 0.500000 +vt 0.577922 0.625000 +vt 0.577922 0.500000 +vt 0.597403 0.625000 +vt 0.587662 0.625000 +vt 0.568182 0.500000 +vt 0.558442 0.625000 +vt 0.558442 0.500000 +vt 0.548701 0.500000 +vt 0.538961 0.625000 +vt 0.568182 0.625000 +vt 0.548701 0.625000 +vt 0.616883 0.500000 +vt 0.607143 0.625000 +vt 0.607143 0.500000 +vt 0.597403 0.625000 +vt 0.597403 0.500000 +vt 0.665585 0.500000 +vt 0.655844 0.625000 +vt 0.655844 0.500000 +vt 0.675325 0.625000 +vt 0.665585 0.625000 +vt 0.646104 0.500000 +vt 0.636364 0.625000 +vt 0.636364 0.500000 +vt 0.626623 0.500000 +vt 0.616883 0.625000 +vt 0.646104 0.625000 +vt 0.626623 0.625000 +vt 0.597403 0.500000 +vt 0.675325 0.500000 +vt 0.597403 0.500000 +vt 0.675325 0.500000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.7071 0.7071 0.0000 +s 1 +f 1929/3005/349 1930/3006/350 1931/3007/350 +f 1931/3007/350 1932/3008/351 1933/3009/351 +f 1934/3010/352 1935/3011/353 1936/3012/353 +f 1934/3010/352 1932/3013/351 1937/3014/352 +f 1938/3015/354 1939/3016/355 1940/3017/355 +f 1941/3018/356 1942/3019/349 1929/3005/349 +f 1936/3012/353 1943/3020/354 1938/3015/354 +f 1940/3017/355 1944/3021/356 1941/3018/356 +f 1945/3022/349 1946/3023/350 1947/3024/350 +f 1947/3024/350 1948/3025/351 1949/3026/351 +f 1950/3027/352 1951/3028/353 1952/3029/353 +f 1950/3027/352 1948/3030/351 1953/3031/352 +f 1954/3032/354 1955/3033/355 1956/3034/355 +f 1957/3035/356 1958/3036/349 1945/3022/349 +f 1952/3029/353 1959/3037/354 1954/3032/354 +f 1956/3034/355 1960/3038/356 1957/3035/356 +f 1961/3039/349 1962/3040/350 1963/3041/350 +f 1963/3041/350 1964/3042/351 1965/3043/351 +f 1966/3044/352 1967/3045/353 1968/3046/353 +f 1966/3044/352 1964/3047/351 1969/3048/352 +f 1970/3049/354 1971/3050/355 1972/3051/355 +f 1973/3052/356 1974/3053/349 1961/3039/349 +f 1968/3046/353 1975/3054/354 1970/3049/354 +f 1972/3051/355 1976/3055/356 1973/3052/356 +f 1977/3056/349 1978/3057/350 1979/3058/350 +f 1979/3058/350 1980/3059/351 1981/3060/351 +f 1982/3061/352 1983/3062/353 1984/3063/353 +f 1982/3061/352 1980/3064/351 1985/3065/352 +f 1986/3066/354 1987/3067/355 1988/3068/355 +f 1989/3069/356 1990/3070/349 1977/3056/349 +f 1984/3063/353 1991/3071/354 1986/3066/354 +f 1988/3068/355 1992/3072/356 1989/3069/356 +f 1929/3005/349 1942/3019/349 1930/3006/350 +f 1931/3007/350 1930/3006/350 1932/3008/351 +f 1934/3010/352 1937/3014/352 1935/3011/353 +f 1934/3010/352 1933/3073/351 1932/3013/351 +f 1938/3015/354 1943/3020/354 1939/3016/355 +f 1941/3018/356 1944/3021/356 1942/3019/349 +f 1936/3012/353 1935/3011/353 1943/3020/354 +f 1940/3017/355 1939/3016/355 1944/3021/356 +f 1945/3022/349 1958/3036/349 1946/3023/350 +f 1947/3024/350 1946/3023/350 1948/3025/351 +f 1950/3027/352 1953/3031/352 1951/3028/353 +f 1950/3027/352 1949/3074/351 1948/3030/351 +f 1954/3032/354 1959/3037/354 1955/3033/355 +f 1957/3035/356 1960/3038/356 1958/3036/349 +f 1952/3029/353 1951/3028/353 1959/3037/354 +f 1956/3034/355 1955/3033/355 1960/3038/356 +f 1961/3039/349 1974/3053/349 1962/3040/350 +f 1963/3041/350 1962/3040/350 1964/3042/351 +f 1966/3044/352 1969/3048/352 1967/3045/353 +f 1966/3044/352 1965/3075/351 1964/3047/351 +f 1970/3049/354 1975/3054/354 1971/3050/355 +f 1973/3052/356 1976/3055/356 1974/3053/349 +f 1968/3046/353 1967/3045/353 1975/3054/354 +f 1972/3051/355 1971/3050/355 1976/3055/356 +f 1977/3056/349 1990/3070/349 1978/3057/350 +f 1979/3058/350 1978/3057/350 1980/3059/351 +f 1982/3061/352 1985/3065/352 1983/3062/353 +f 1982/3061/352 1981/3076/351 1980/3064/351 +f 1986/3066/354 1991/3071/354 1987/3067/355 +f 1989/3069/356 1992/3072/356 1990/3070/349 +f 1984/3063/353 1983/3062/353 1991/3071/354 +f 1988/3068/355 1987/3067/355 1992/3072/356 +o Atlas_Pad +v 1.500000 2.000000 -1.500000 v -1.500000 2.000000 1.500000 v 1.500000 2.000000 1.500000 +v -1.500000 2.000000 1.500000 +v 3.500000 2.000000 3.500000 +v 1.500000 2.000000 1.500000 +v 3.500000 1.750000 3.500000 +v 3.250000 1.750000 -3.250000 +v 3.500000 1.750000 -3.500000 +v 3.500000 2.000000 -3.500000 +v -3.500000 2.000000 -3.500000 +v -3.500000 1.750000 3.500000 +v -3.500000 2.000000 3.500000 +v -3.500000 1.750000 -3.500000 +v -3.250000 1.000000 -3.250000 +v -3.250000 1.750000 -3.250000 +v -3.250000 1.750000 3.250000 +v 3.250000 1.750000 3.250000 v -1.500000 2.000000 -1.500000 +v 3.250000 1.000000 3.250000 +v 3.250000 1.000000 -3.250000 +v -3.250000 1.000000 3.250000 v 1.500000 2.000000 -1.500000 -v -2.000000 2.000000 -3.500000 -v 2.000000 2.000000 -3.500000 -v -2.000000 1.000000 -4.500000 -v -2.000000 1.000000 -3.500000 -v 2.000000 1.000000 -3.500000 -v 2.000000 1.000000 -4.500000 -v -2.000000 2.000000 -4.000000 -v -2.000000 1.500000 -4.500000 +v 0.500000 1.000000 0.500000 +v -0.500000 1.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 1.000000 -0.500000 v 2.000000 1.500000 -4.500000 +v -2.000000 1.000000 -4.500000 +v -2.000000 1.500000 -4.500000 +v 2.000000 2.000000 -3.500000 +v -2.000000 2.000000 -4.000000 +v -2.000000 2.000000 -3.500000 v 2.000000 2.000000 -4.000000 +v 2.000000 1.000000 -3.500000 +v -2.000000 1.000000 -3.500000 +v -4.500000 2.000000 1.500000 +v -3.500000 2.000000 1.500000 +v -3.500000 1.750000 1.500000 +v -4.500000 2.000000 4.500000 +v -4.500000 1.000000 1.500000 +v -4.500000 1.000000 4.500000 +v -1.500000 1.000000 4.500000 v -1.500000 1.750000 3.500000 +v -1.500000 2.000000 4.500000 +v -3.500000 2.000000 3.500000 +v -4.500000 4.000000 1.500000 +v -1.500000 4.000000 4.500000 +v -4.500000 4.000000 4.500000 +v -4.500000 4.250000 4.500000 +v -1.500000 4.250000 4.500000 +v -4.500000 4.250000 1.500000 +v -1.500000 4.250000 1.500000 +v -1.500000 4.000000 1.500000 +v -4.000000 2.000000 4.250000 +v -2.000000 4.000000 4.250000 +v -4.000000 4.000000 4.250000 +v -1.500000 2.000000 2.000000 +v -2.000000 4.000000 2.000000 +v -2.000000 2.000000 2.000000 +v -4.000000 2.000000 1.500000 +v -4.000000 4.000000 2.000000 +v -4.000000 2.000000 2.000000 +v -1.500000 2.000000 1.500000 +v -1.500000 4.000000 2.000000 +v -4.500000 2.000000 1.500000 +v -4.000000 4.000000 1.500000 +v -2.000000 2.000000 1.500000 +v -1.500000 4.000000 1.500000 +v -4.500000 2.000000 4.500000 +v -4.500000 4.000000 4.000000 +v -4.500000 2.000000 4.000000 +v -2.000000 2.000000 4.500000 +v -2.000000 4.000000 4.000000 +v -2.000000 2.000000 4.000000 +v -4.000000 2.000000 4.500000 +v -4.500000 4.000000 4.500000 +v -1.500000 2.000000 4.500000 +v -2.000000 4.000000 4.500000 +v -4.000000 2.000000 4.000000 +v -4.000000 4.000000 4.500000 +v -1.500000 2.000000 4.000000 +v -1.500000 4.000000 4.500000 +v -4.000000 4.000000 4.000000 +v -4.500000 2.000000 2.000000 +v -4.500000 4.000000 1.500000 +v -1.500000 4.000000 4.000000 +v -2.000000 4.000000 1.500000 +v -4.500000 4.000000 2.000000 +v -2.000000 4.000000 1.750000 +v -4.000000 2.000000 1.750000 +v -4.000000 4.000000 1.750000 +v -1.750000 4.000000 4.000000 +v -1.750000 2.000000 2.000000 +v -1.750000 4.000000 2.000000 +v -4.250000 2.000000 2.000000 +v -4.250000 4.000000 4.000000 +v -4.250000 4.000000 2.000000 +v -4.500000 6.250000 1.500000 +v -1.500000 6.250000 4.500000 +v -4.500000 6.250000 4.500000 +v -4.500000 6.500000 4.500000 +v -1.500000 6.500000 4.500000 +v -4.500000 6.500000 1.500000 +v -1.500000 6.500000 1.500000 +v -1.500000 6.250000 1.500000 +v -4.000000 4.250000 4.250000 +v -2.000000 6.250000 4.250000 +v -4.000000 6.250000 4.250000 +v -1.500000 4.250000 2.000000 +v -2.000000 6.250000 2.000000 +v -2.000000 4.250000 2.000000 +v -4.000000 4.250000 1.500000 +v -4.000000 6.250000 2.000000 +v -4.000000 4.250000 2.000000 +v -1.500000 4.250000 1.500000 +v -1.500000 6.250000 2.000000 +v -4.500000 4.250000 1.500000 +v -4.000000 6.250000 1.500000 +v -2.000000 4.250000 1.500000 +v -1.500000 6.250000 1.500000 +v -4.500000 4.250000 4.500000 +v -4.500000 6.250000 4.000000 +v -4.500000 4.250000 4.000000 +v -2.000000 4.250000 4.500000 +v -2.000000 6.250000 4.000000 +v -2.000000 4.250000 4.000000 +v -4.000000 4.250000 4.500000 +v -4.500000 6.250000 4.500000 +v -1.500000 4.250000 4.500000 +v -2.000000 6.250000 4.500000 +v -4.000000 4.250000 4.000000 +v -4.000000 6.250000 4.500000 +v -1.500000 4.250000 4.000000 +v -1.500000 6.250000 4.500000 +v -4.000000 6.250000 4.000000 +v -4.500000 4.250000 2.000000 +v -4.500000 6.250000 1.500000 +v -1.500000 6.250000 4.000000 +v -2.000000 6.250000 1.500000 +v -4.500000 6.250000 2.000000 +v -2.000000 6.250000 1.750000 +v -4.000000 4.250000 1.750000 +v -4.000000 6.250000 1.750000 +v -1.750000 6.250000 4.000000 +v -1.750000 4.250000 2.000000 +v -1.750000 6.250000 2.000000 +v -4.250000 4.250000 2.000000 +v -4.250000 6.250000 4.000000 +v -4.250000 6.250000 2.000000 +v -4.500000 8.500000 1.500000 +v -1.500000 8.500000 4.500000 +v -4.500000 8.500000 4.500000 +v -4.500000 8.750000 4.500000 +v -1.500000 8.750000 4.500000 +v -4.500000 8.750000 1.500000 +v -1.500000 8.750000 1.500000 +v -1.500000 8.500000 1.500000 +v -4.000000 6.500000 4.250000 +v -2.000000 8.500000 4.250000 +v -4.000000 8.500000 4.250000 +v -1.500000 6.500000 2.000000 +v -2.000000 8.500000 2.000000 +v -2.000000 6.500000 2.000000 +v -4.000000 6.500000 1.500000 +v -4.000000 8.500000 2.000000 +v -4.000000 6.500000 2.000000 +v -1.500000 6.500000 1.500000 +v -1.500000 8.500000 2.000000 +v -4.500000 6.500000 1.500000 +v -4.000000 8.500000 1.500000 +v -2.000000 6.500000 1.500000 +v -1.500000 8.500000 1.500000 +v -4.500000 6.500000 4.500000 +v -4.500000 8.500000 4.000000 +v -4.500000 6.500000 4.000000 +v -2.000000 6.500000 4.500000 +v -2.000000 8.500000 4.000000 +v -2.000000 6.500000 4.000000 +v -4.000000 6.500000 4.500000 +v -4.500000 8.500000 4.500000 +v -1.500000 6.500000 4.500000 +v -2.000000 8.500000 4.500000 +v -4.000000 6.500000 4.000000 +v -4.000000 8.500000 4.500000 +v -1.500000 6.500000 4.000000 +v -1.500000 8.500000 4.500000 +v -4.000000 8.500000 4.000000 +v -4.500000 6.500000 2.000000 +v -4.500000 8.500000 1.500000 +v -1.500000 8.500000 4.000000 +v -2.000000 8.500000 1.500000 +v -4.500000 8.500000 2.000000 +v -2.000000 8.500000 1.750000 +v -4.000000 6.500000 1.750000 +v -4.000000 8.500000 1.750000 +v -1.750000 8.500000 4.000000 +v -1.750000 6.500000 2.000000 +v -1.750000 8.500000 2.000000 +v -4.250000 6.500000 2.000000 +v -4.250000 8.500000 4.000000 +v -4.250000 8.500000 2.000000 +v -4.500000 10.750000 1.500000 +v -1.500000 10.750000 4.500000 +v -4.500000 10.750000 4.500000 +v -4.500000 11.000000 4.500000 +v -1.500000 11.000000 4.500000 +v -4.500000 11.000000 1.500000 +v -1.500000 11.000000 1.500000 +v -1.500000 10.750000 1.500000 +v -4.000000 8.750000 4.250000 +v -2.000000 10.750000 4.250000 +v -4.000000 10.750000 4.250000 +v -1.500000 8.750000 2.000000 +v -2.000000 10.750000 2.000000 +v -2.000000 8.750000 2.000000 +v -4.000000 8.750000 1.500000 +v -4.000000 10.750000 2.000000 +v -4.000000 8.750000 2.000000 +v -1.500000 8.750000 1.500000 +v -1.500000 10.750000 2.000000 +v -4.500000 8.750000 1.500000 +v -4.000000 10.750000 1.500000 +v -2.000000 8.750000 1.500000 +v -1.500000 10.750000 1.500000 +v -4.500000 8.750000 4.500000 +v -4.500000 10.750000 4.000000 +v -4.500000 8.750000 4.000000 +v -2.000000 8.750000 4.500000 +v -2.000000 10.750000 4.000000 +v -2.000000 8.750000 4.000000 +v -4.000000 8.750000 4.500000 +v -4.500000 10.750000 4.500000 +v -1.500000 8.750000 4.500000 +v -2.000000 10.750000 4.500000 +v -4.000000 8.750000 4.000000 +v -4.000000 10.750000 4.500000 +v -1.500000 8.750000 4.000000 +v -1.500000 10.750000 4.500000 +v -4.000000 10.750000 4.000000 +v -4.500000 8.750000 2.000000 +v -4.500000 10.750000 1.500000 +v -1.500000 10.750000 4.000000 +v -2.000000 10.750000 1.500000 +v -4.500000 10.750000 2.000000 +v -2.000000 10.750000 1.750000 +v -4.000000 8.750000 1.750000 +v -4.000000 10.750000 1.750000 +v -1.750000 10.750000 4.000000 +v -1.750000 8.750000 2.000000 +v -1.750000 10.750000 2.000000 +v -4.250000 8.750000 2.000000 +v -4.250000 10.750000 4.000000 +v -4.250000 10.750000 2.000000 +v -3.187500 15.250000 3.750001 +v -3.750000 15.250000 4.625000 +v -3.187500 13.250000 3.750000 +v -3.750000 15.250000 3.187501 +v -3.750000 13.250000 3.187500 +v -4.625000 15.250000 3.750001 +v -3.375000 15.250000 4.250000 +v -4.625000 15.250000 3.750001 +v -4.250000 15.250000 3.375001 +v -3.750000 15.500000 4.625000 +v -3.750000 15.250000 4.625000 +v -4.250000 15.500000 3.375001 +v -3.375000 15.500000 4.250000 +v -2.250000 15.250000 1.375001 +v -1.750000 15.250000 2.625001 +v -2.625000 15.250000 1.750001 +v -1.750000 15.500000 2.625001 +v -2.250000 15.500000 1.375001 +v -2.625000 15.500000 1.750001 +v -1.375000 15.500000 2.250001 +v -1.375000 15.250000 2.250001 +v -4.250000 15.500000 2.625001 +v -4.250000 15.250000 2.625001 +v -1.750000 15.500000 3.375001 +v -1.750000 15.250000 3.375001 +v -4.625000 15.500000 3.750001 +v -2.625000 15.250000 4.250000 +v -3.375000 15.250000 1.750001 +v -2.625000 15.500000 4.250000 +v -3.375000 15.500000 1.750001 +v -4.250000 13.000000 2.625000 +v -3.375000 13.250000 1.750001 +v -3.375000 13.000000 1.750001 +v -3.937500 2.000000 2.812500 +v -3.562500 17.500000 2.812501 +v -3.562500 2.000000 2.812500 +v -1.750000 13.000000 3.375000 +v -2.625000 13.250000 4.250000 +v -2.625000 13.000000 4.250000 +v -1.750000 13.250000 2.625000 +v -1.750000 13.000000 2.625000 +v -4.250000 13.000000 3.375000 +v -3.187500 2.000000 3.562500 +v -2.812500 17.500000 3.562501 +v -2.812500 2.000000 3.562500 +v -2.062500 2.000000 3.187500 +v -2.437500 17.500000 3.187501 +v -2.437500 2.000000 3.187500 +v -2.437500 17.500000 2.812501 +v -2.437500 2.000000 2.812500 +v -2.062500 17.500000 2.812501 +v -2.062500 2.000000 2.812500 +v -2.812500 2.000000 2.437500 +v -3.187500 17.500000 2.437501 +v -3.187500 2.000000 2.437500 +v -3.187500 17.500000 2.062501 +v -3.187500 2.000000 2.062500 +v -3.562500 17.500000 3.187501 +v -3.562500 2.000000 3.187500 +v -2.812500 2.000000 2.062500 +v -2.812500 17.500000 2.437501 +v -2.812500 17.500000 2.062501 +v -3.187500 2.000000 3.937500 +v -3.187500 17.500000 3.562501 +v -3.937500 2.000000 3.187500 +v -3.937500 17.500000 2.812501 +v -2.812500 17.500000 3.937501 +v -2.812500 2.000000 3.937500 +v -3.187500 17.500000 3.937501 +v -3.937500 17.500000 3.187501 +v -2.062500 17.500000 3.187501 +v -3.750000 17.500000 2.812501 +v -3.187500 2.000000 2.250000 +v -3.750000 2.000000 2.812500 +v -2.250000 17.500000 3.187501 +v -2.812500 2.000000 3.750000 +v -2.250000 2.000000 3.187500 +v -3.187500 2.000000 3.750000 +v -3.750000 17.500000 3.187501 +v -3.750000 2.000000 3.187500 +v -2.812500 2.000000 2.250000 +v -2.250000 17.500000 2.812501 +v -2.250000 2.000000 2.812500 +v -2.625000 13.250000 1.750001 +v -2.625000 13.000000 1.750001 +v -3.375000 13.250000 4.250000 +v -3.375000 13.000000 4.250000 +v -1.375000 13.250000 2.250000 +v -4.625000 13.250000 3.750000 +v -4.250000 13.250000 3.375000 +v -1.750000 13.250000 3.375000 +v -4.250000 13.250000 2.625000 +v -1.750000 17.500000 2.625001 +v -2.625000 17.500000 4.250001 +v -4.250000 17.500000 3.375001 +v -2.625000 17.750000 4.250001 +v -1.750000 17.750000 2.625001 +v -3.375000 17.750000 1.750001 +v -1.750000 17.500000 3.375001 +v -4.250000 17.500000 2.625001 +v -3.375000 17.500000 1.750001 +v -2.625000 17.750000 1.750001 +v -2.625000 17.500000 1.750001 +v -3.375000 17.750000 4.250001 +v -3.375000 17.500000 4.250001 +v -4.250000 17.750000 3.375001 +v -1.750000 17.750000 3.375001 +v -4.250000 17.750000 2.625001 +v -2.250000 13.000000 1.375001 +v -1.375000 13.000000 2.250000 +v -2.250000 13.250000 1.375001 +v -3.750000 13.000000 4.625000 +v -3.750000 13.250000 4.625000 +v -4.625000 13.000000 3.750000 +v 1.375000 3.000000 0.250000 +v 1.375000 4.000000 -0.250000 +v 1.375000 4.000000 0.250000 +v 1.125000 4.000000 -0.250000 +v 1.125000 3.000000 0.250000 +v 1.125000 4.000000 0.250000 +v 1.375000 3.000000 -0.250000 +v 1.125000 3.000000 -0.250000 +v 3.500000 2.250000 0.250000 +v 2.500000 2.250000 -0.250000 +v 2.500000 2.250000 0.250000 +v 3.500000 2.000000 -0.250000 +v 3.500000 2.000000 0.250000 +v 2.500000 2.000000 0.250000 +v 2.500000 2.000000 -0.250000 +v 3.500000 2.250000 -0.250000 +v 1.196051 3.475517 -0.125000 +v 3.080348 2.220756 -0.125000 +v 2.919652 2.029244 -0.125000 +v 1.356748 3.667028 0.125000 +v 3.080348 2.220756 0.125000 +v 1.875000 2.000000 0.375000 +v 1.875000 3.000000 0.125000 +v 1.875000 3.000000 -0.125000 +v 2.919652 2.029244 0.125000 +v 2.125000 3.000000 -0.125000 +v 2.125000 2.000000 0.375000 +v 2.125000 2.000000 0.625000 +v 1.875000 2.000000 0.625000 +v 1.196051 3.475517 0.125000 +v 2.125000 3.000000 0.125000 +v 2.125000 2.000000 -0.375000 +v 2.125000 3.000000 -0.125000 +v 2.125000 3.000000 0.125000 +v 1.875000 2.000000 -0.375000 +v 1.875000 3.000000 -0.125000 +v 1.875000 2.000000 -0.625000 +v 2.125000 2.000000 -0.625000 +v 1.875000 3.000000 0.125000 +v -1.502151 2.591684 1.678928 +v -0.934124 3.475517 0.757348 +v -0.757348 3.475517 0.934124 +v -1.615781 2.783195 1.792558 +v -0.870978 3.667028 1.047755 +v -1.792558 2.783195 1.615781 +v -1.047754 3.667028 0.870978 +v -1.678928 2.591684 1.502151 +v 1.149048 3.000000 -0.795495 +v 0.795495 4.000000 -1.149048 +v 1.149048 4.000000 -0.795495 +v -3.187500 15.250000 3.750001 +v -3.187500 13.250000 3.750000 +v -3.750000 15.250000 4.625000 +v -3.750000 15.250000 3.187501 +v -4.625000 15.250000 3.750001 +v -3.750000 13.250000 3.187500 +v -3.187500 2.000000 2.250000 +v -3.750000 17.500000 2.812501 +v -3.750000 2.000000 2.812500 +v -2.812500 2.000000 3.750000 +v -2.250000 17.500000 3.187501 +v -2.250000 2.000000 3.187500 +v -3.750000 17.500000 3.187501 +v -3.187500 2.000000 3.750000 +v -3.750000 2.000000 3.187500 +v -2.250000 17.500000 2.812501 +v -2.812500 2.000000 2.250000 +v -2.250000 2.000000 2.812500 +v -2.000000 4.000000 4.250000 +v -4.000000 2.000000 4.250000 +v -4.000000 4.000000 4.250000 +v -4.000000 2.000000 1.750000 +v -2.000000 4.000000 1.750000 +v -4.000000 4.000000 1.750000 +v -1.750000 2.000000 2.000000 +v -1.750000 4.000000 4.000000 +v -1.750000 4.000000 2.000000 +v -4.250000 4.000000 4.000000 +v -4.250000 2.000000 2.000000 +v -4.250000 4.000000 2.000000 +v -2.000000 6.250000 4.250000 +v -4.000000 4.250000 4.250000 +v -4.000000 6.250000 4.250000 +v -4.000000 4.250000 1.750000 +v -2.000000 6.250000 1.750000 +v -4.000000 6.250000 1.750000 +v -1.750000 4.250000 2.000000 +v -1.750000 6.250000 4.000000 +v -1.750000 6.250000 2.000000 +v -4.250000 6.250000 4.000000 +v -4.250000 4.250000 2.000000 +v -4.250000 6.250000 2.000000 +v -2.000000 8.500000 4.250000 +v -4.000000 6.500000 4.250000 +v -4.000000 8.500000 4.250000 +v -4.000000 6.500000 1.750000 +v -2.000000 8.500000 1.750000 +v -4.000000 8.500000 1.750000 +v -1.750000 6.500000 2.000000 +v -1.750000 8.500000 4.000000 +v -1.750000 8.500000 2.000000 +v -4.250000 8.500000 4.000000 +v -4.250000 6.500000 2.000000 +v -4.250000 8.500000 2.000000 +v -2.000000 10.750000 4.250000 +v -4.000000 8.750000 4.250000 +v -4.000000 10.750000 4.250000 +v -4.000000 8.750000 1.750000 +v -2.000000 10.750000 1.750000 +v -4.000000 10.750000 1.750000 +v -1.750000 8.750000 2.000000 +v -1.750000 10.750000 4.000000 +v -1.750000 10.750000 2.000000 +v -4.250000 10.750000 4.000000 +v -4.250000 8.750000 2.000000 +v -4.250000 10.750000 2.000000 +v 0.618718 4.000000 -0.972272 +v 0.972272 3.000000 -0.618718 +v 0.972272 4.000000 -0.618718 +v 0.795495 3.000000 -1.149048 +v 0.618718 3.000000 -0.972272 +v 2.651650 2.250000 -2.298097 +v 1.590990 2.250000 -1.944544 +v 1.944544 2.250000 -1.590990 +v 2.298097 2.000000 -2.651650 +v 2.651650 2.000000 -2.298097 +v 1.944544 2.000000 -1.590990 +v 1.590990 2.000000 -1.944544 +v 2.298097 2.250000 -2.651650 +v 0.757348 3.475517 -0.934124 +v 2.089747 2.220756 -2.266524 +v 1.976117 2.029244 -2.152894 +v 1.047754 3.667028 -0.870978 +v 2.266524 2.220756 -2.089747 +v 1.590990 2.000000 -1.060660 +v 1.414214 3.000000 -1.237437 +v 1.237437 3.000000 -1.414214 +v 2.152894 2.029244 -1.976117 +v 1.414214 3.000000 -1.590990 +v 1.767767 2.000000 -1.237437 +v 1.944544 2.000000 -1.060660 +v 1.767767 2.000000 -0.883883 +v 0.934124 3.475517 -0.757348 +v 1.590990 3.000000 -1.414214 +v 1.237437 2.000000 -1.767767 +v 1.414214 3.000000 -1.590990 +v 1.590990 3.000000 -1.414214 +v 1.060660 2.000000 -1.590990 +v 1.237437 3.000000 -1.414214 +v 0.883883 2.000000 -1.767767 +v 1.060660 2.000000 -1.944544 +v 1.414214 3.000000 -1.237437 +v 0.795495 3.000000 1.149048 +v 1.149048 4.000000 0.795495 +v 0.795495 4.000000 1.149048 +v 0.972272 4.000000 0.618719 +v 0.618718 3.000000 0.972272 +v 0.618718 4.000000 0.972272 +v 1.149048 3.000000 0.795495 +v 0.972272 3.000000 0.618719 +v 2.298097 2.250000 2.651650 +v 1.944543 2.250000 1.590990 +v 1.590990 2.250000 1.944544 +v 2.651650 2.000000 2.298097 +v 2.298097 2.000000 2.651650 +v 1.590990 2.000000 1.944544 +v 1.944543 2.000000 1.590990 +v 2.651650 2.250000 2.298097 +v 0.934124 3.475517 0.757348 +v 2.266524 2.220755 2.089747 +v 2.152894 2.029244 1.976117 +v 0.870978 3.667028 1.047755 +v 2.089747 2.220755 2.266524 +v 1.060660 2.000000 1.590990 +v 1.237437 3.000000 1.414214 +v 1.414214 3.000000 1.237437 +v 1.976117 2.029244 2.152894 +v 1.590990 3.000000 1.414214 +v 1.237437 2.000000 1.767767 +v 1.060660 2.000000 1.944544 +v 0.883883 2.000000 1.767767 +v 0.757348 3.475517 0.934125 +v 1.414213 3.000000 1.590990 +v 1.767767 2.000000 1.237437 +v 1.590990 3.000000 1.414214 +v 1.414213 3.000000 1.590990 +v 1.590990 2.000000 1.060660 +v 1.414214 3.000000 1.237437 +v 1.767767 2.000000 0.883883 +v 1.944544 2.000000 1.060660 +v 1.237437 3.000000 1.414214 +v -1.375000 3.000000 -0.250000 +v -1.375000 4.000000 0.250000 +v -1.375000 4.000000 -0.250000 +v -1.125000 4.000000 0.250000 +v -1.125000 3.000000 -0.250000 +v -1.125000 4.000000 -0.250000 +v -1.375000 3.000000 0.250000 +v -1.125000 3.000000 0.250000 +v -3.500000 2.250000 -0.250000 +v -2.500000 2.250000 0.250000 +v -2.500000 2.250000 -0.250000 +v -3.500000 2.000000 0.250000 +v -3.500000 2.000000 -0.250000 +v -2.500000 2.000000 -0.250000 +v -2.500000 2.000000 0.250000 +v -3.500000 2.250000 0.250000 +v -1.196051 3.475517 0.125000 +v -3.080348 2.220756 0.125000 +v -2.919652 2.029244 0.125000 +v -1.356748 3.667028 -0.125000 +v -3.080348 2.220756 -0.125000 +v -1.875000 2.000000 -0.375000 +v -1.875000 3.000000 -0.125000 +v -1.875000 3.000000 0.125000 +v -2.919652 2.029244 -0.125000 +v -2.125000 3.000000 0.125000 +v -2.125000 2.000000 -0.375000 +v -2.125000 2.000000 -0.625000 +v -1.875000 2.000000 -0.625000 +v -2.125000 3.000000 -0.125000 +v -2.125000 2.000000 0.375000 +v -2.125000 3.000000 0.125000 +v -2.125000 3.000000 -0.125000 +v -1.875000 2.000000 0.375000 +v -1.875000 3.000000 0.125000 +v -1.875000 2.000000 0.625000 +v -2.125000 2.000000 0.625000 +v -1.875000 3.000000 -0.125000 +v -0.795495 3.000000 -1.149048 +v -1.149049 4.000000 -0.795495 +v -0.795495 4.000000 -1.149048 +v -0.972272 4.000000 -0.618719 +v -0.618718 3.000000 -0.972272 +v -0.618718 4.000000 -0.972272 +v -1.149049 3.000000 -0.795495 +v -0.972272 3.000000 -0.618719 +v -2.298097 2.250000 -2.651650 +v -1.944544 2.250000 -1.590990 +v -1.590990 2.250000 -1.944544 +v -2.651650 2.000000 -2.298097 +v -2.298097 2.000000 -2.651650 +v -1.590990 2.000000 -1.944544 +v -1.944544 2.000000 -1.590990 +v -2.651650 2.250000 -2.298097 +v -0.934124 3.475517 -0.757348 +v -2.266524 2.220755 -2.089746 +v -2.152894 2.029244 -1.976117 +v -0.870978 3.667028 -1.047755 +v -2.089747 2.220755 -2.266523 +v -1.060660 2.000000 -1.590990 +v -1.237437 3.000000 -1.414213 +v -1.414214 3.000000 -1.237437 +v -1.976117 2.029244 -2.152894 +v -1.590990 3.000000 -1.414213 +v -1.237437 2.000000 -1.767767 +v -1.060660 2.000000 -1.944544 +v -0.883884 2.000000 -1.767767 +v -1.414213 3.000000 -1.590990 +v -1.767767 2.000000 -1.237437 +v -1.590990 3.000000 -1.414213 +v -1.414213 3.000000 -1.590990 +v -1.590990 2.000000 -1.060660 +v -1.414214 3.000000 -1.237437 +v -1.767767 2.000000 -0.883883 +v -1.944544 2.000000 -1.060660 +v -1.237437 3.000000 -1.414213 +v -1.149048 3.000000 0.795495 +v -0.795495 4.000000 1.149049 +v -1.149048 4.000000 0.795495 +v -0.618718 4.000000 0.972272 +v -0.972272 3.000000 0.618719 +v -0.972272 4.000000 0.618719 +v -0.795495 3.000000 1.149049 +v -0.618718 3.000000 0.972272 +v -1.590990 2.000000 1.060660 +v -1.414213 3.000000 1.237437 +v -1.237437 3.000000 1.414214 +v -1.414213 3.000000 1.590990 +v -1.767767 2.000000 1.237437 +v -1.944543 2.000000 1.060660 +v -1.767767 2.000000 0.883884 +v -1.590990 3.000000 1.414214 +v -1.237437 2.000000 1.767767 +v -1.414213 3.000000 1.590990 +v -1.590990 3.000000 1.414214 +v -1.060660 2.000000 1.590990 +v -1.237437 3.000000 1.414214 +v -0.883883 2.000000 1.767767 +v -1.060660 2.000000 1.944544 +v -1.414213 3.000000 1.237437 +v -1.500000 2.000000 -1.500000 +v 2.000000 1.000000 -4.500000 v -3.250000 1.750000 1.500000 +v -3.250000 1.000000 1.500000 v -1.500000 1.000000 3.250000 v -1.500000 1.750000 3.250000 v -1.500000 2.000000 3.500000 -v -1.500000 2.000000 4.500000 -v -1.500000 1.000000 4.500000 -v -4.500000 1.000000 4.500000 -v -4.500000 2.000000 4.500000 -v -3.250000 1.000000 1.500000 -v -3.500000 1.750000 1.500000 -v -3.500000 2.000000 1.500000 -v -4.500000 2.000000 1.500000 -v -4.500000 1.000000 1.500000 -v -3.500000 2.000000 3.500000 -v -4.500000 2.000000 2.000000 -v -4.000000 2.000000 2.000000 -v -4.500000 2.000000 1.500000 -v -4.000000 2.000000 1.500000 -v -4.500000 2.000000 4.500000 -v -4.000000 2.000000 4.500000 -v -4.500000 2.000000 4.000000 -v -4.000000 2.000000 4.000000 -v -2.000000 2.000000 2.000000 -v -1.500000 2.000000 2.000000 -v -2.000000 2.000000 1.500000 -v -1.500000 2.000000 1.500000 -v -2.000000 2.000000 4.500000 -v -1.500000 2.000000 4.500000 -v -2.000000 2.000000 4.000000 -v -1.500000 2.000000 4.000000 -v -4.500000 4.000000 1.500000 -v -4.500000 4.000000 2.000000 -v -4.000000 4.000000 2.000000 -v -4.000000 4.000000 1.500000 -v -4.500000 4.000000 4.000000 -v -4.500000 4.000000 4.500000 -v -4.000000 4.000000 4.500000 -v -4.000000 4.000000 4.000000 -v -2.000000 4.000000 1.500000 -v -2.000000 4.000000 2.000000 -v -1.500000 4.000000 2.000000 -v -1.500000 4.000000 1.500000 -v -2.000000 4.000000 4.000000 -v -2.000000 4.000000 4.500000 -v -1.500000 4.000000 4.500000 -v -1.500000 4.000000 4.000000 -v -4.500000 4.000000 4.500000 -v -1.500000 4.000000 4.500000 -v -4.500000 4.000000 1.500000 -v -1.500000 4.000000 1.500000 -v -4.500000 4.250000 1.500000 -v -4.500000 4.250000 4.500000 -v -1.500000 4.250000 4.500000 -v -1.500000 4.250000 1.500000 -v -4.000000 2.000000 4.250000 v -2.000000 2.000000 4.250000 -v -4.000000 4.000000 4.250000 -v -2.000000 4.000000 4.250000 -v -2.000000 4.000000 1.750000 -v -4.000000 4.000000 1.750000 v -2.000000 2.000000 1.750000 -v -4.000000 2.000000 1.750000 -v -1.750000 2.000000 2.000000 v -1.750000 2.000000 4.000000 -v -1.750000 4.000000 2.000000 -v -1.750000 4.000000 4.000000 -v -4.250000 4.000000 4.000000 -v -4.250000 4.000000 2.000000 v -4.250000 2.000000 4.000000 -v -4.250000 2.000000 2.000000 -v -4.500000 4.250000 2.000000 -v -4.000000 4.250000 2.000000 -v -4.500000 4.250000 1.500000 -v -4.000000 4.250000 1.500000 -v -4.500000 4.250000 4.500000 -v -4.000000 4.250000 4.500000 -v -4.500000 4.250000 4.000000 -v -4.000000 4.250000 4.000000 -v -2.000000 4.250000 2.000000 -v -1.500000 4.250000 2.000000 -v -2.000000 4.250000 1.500000 -v -1.500000 4.250000 1.500000 -v -2.000000 4.250000 4.500000 -v -1.500000 4.250000 4.500000 -v -2.000000 4.250000 4.000000 -v -1.500000 4.250000 4.000000 -v -4.500000 6.250000 1.500000 -v -4.500000 6.250000 2.000000 -v -4.000000 6.250000 2.000000 -v -4.000000 6.250000 1.500000 -v -4.500000 6.250000 4.000000 -v -4.500000 6.250000 4.500000 -v -4.000000 6.250000 4.500000 -v -4.000000 6.250000 4.000000 -v -2.000000 6.250000 1.500000 -v -2.000000 6.250000 2.000000 -v -1.500000 6.250000 2.000000 -v -1.500000 6.250000 1.500000 -v -2.000000 6.250000 4.000000 -v -2.000000 6.250000 4.500000 -v -1.500000 6.250000 4.500000 -v -1.500000 6.250000 4.000000 -v -4.500000 6.250000 4.500000 -v -1.500000 6.250000 4.500000 -v -4.500000 6.250000 1.500000 -v -1.500000 6.250000 1.500000 -v -4.500000 6.500000 1.500000 -v -4.500000 6.500000 4.500000 -v -1.500000 6.500000 4.500000 -v -1.500000 6.500000 1.500000 -v -4.000000 4.250000 4.250000 v -2.000000 4.250000 4.250000 -v -4.000000 6.250000 4.250000 -v -2.000000 6.250000 4.250000 -v -2.000000 6.250000 1.750000 -v -4.000000 6.250000 1.750000 v -2.000000 4.250000 1.750000 -v -4.000000 4.250000 1.750000 -v -1.750000 4.250000 2.000000 v -1.750000 4.250000 4.000000 -v -1.750000 6.250000 2.000000 -v -1.750000 6.250000 4.000000 -v -4.250000 6.250000 4.000000 -v -4.250000 6.250000 2.000000 v -4.250000 4.250000 4.000000 -v -4.250000 4.250000 2.000000 -v -4.500000 6.500000 2.000000 -v -4.000000 6.500000 2.000000 -v -4.500000 6.500000 1.500000 -v -4.000000 6.500000 1.500000 -v -4.500000 6.500000 4.500000 -v -4.000000 6.500000 4.500000 -v -4.500000 6.500000 4.000000 -v -4.000000 6.500000 4.000000 -v -2.000000 6.500000 2.000000 -v -1.500000 6.500000 2.000000 -v -2.000000 6.500000 1.500000 -v -1.500000 6.500000 1.500000 -v -2.000000 6.500000 4.500000 -v -1.500000 6.500000 4.500000 -v -2.000000 6.500000 4.000000 -v -1.500000 6.500000 4.000000 -v -4.500000 8.500000 1.500000 -v -4.500000 8.500000 2.000000 -v -4.000000 8.500000 2.000000 -v -4.000000 8.500000 1.500000 -v -4.500000 8.500000 4.000000 -v -4.500000 8.500000 4.500000 -v -4.000000 8.500000 4.500000 -v -4.000000 8.500000 4.000000 -v -2.000000 8.500000 1.500000 -v -2.000000 8.500000 2.000000 -v -1.500000 8.500000 2.000000 -v -1.500000 8.500000 1.500000 -v -2.000000 8.500000 4.000000 -v -2.000000 8.500000 4.500000 -v -1.500000 8.500000 4.500000 -v -1.500000 8.500000 4.000000 -v -4.500000 8.500000 4.500000 -v -1.500000 8.500000 4.500000 -v -4.500000 8.500000 1.500000 -v -1.500000 8.500000 1.500000 -v -4.500000 8.750000 1.500000 -v -4.500000 8.750000 4.500000 -v -1.500000 8.750000 4.500000 -v -1.500000 8.750000 1.500000 -v -4.000000 6.500000 4.250000 v -2.000000 6.500000 4.250000 -v -4.000000 8.500000 4.250000 -v -2.000000 8.500000 4.250000 -v -2.000000 8.500000 1.750000 -v -4.000000 8.500000 1.750000 v -2.000000 6.500000 1.750000 -v -4.000000 6.500000 1.750000 -v -1.750000 6.500000 2.000000 v -1.750000 6.500000 4.000000 -v -1.750000 8.500000 2.000000 -v -1.750000 8.500000 4.000000 -v -4.250000 8.500000 4.000000 -v -4.250000 8.500000 2.000000 v -4.250000 6.500000 4.000000 -v -4.250000 6.500000 2.000000 -v -4.500000 8.750000 2.000000 -v -4.000000 8.750000 2.000000 -v -4.500000 8.750000 1.500000 -v -4.000000 8.750000 1.500000 -v -4.500000 8.750000 4.500000 -v -4.000000 8.750000 4.500000 -v -4.500000 8.750000 4.000000 -v -4.000000 8.750000 4.000000 -v -2.000000 8.750000 2.000000 -v -1.500000 8.750000 2.000000 -v -2.000000 8.750000 1.500000 -v -1.500000 8.750000 1.500000 -v -2.000000 8.750000 4.500000 -v -1.500000 8.750000 4.500000 -v -2.000000 8.750000 4.000000 -v -1.500000 8.750000 4.000000 -v -4.500000 10.750000 1.500000 -v -4.500000 10.750000 2.000000 -v -4.000000 10.750000 2.000000 -v -4.000000 10.750000 1.500000 -v -4.500000 10.750000 4.000000 -v -4.500000 10.750000 4.500000 -v -4.000000 10.750000 4.500000 -v -4.000000 10.750000 4.000000 -v -2.000000 10.750000 1.500000 -v -2.000000 10.750000 2.000000 -v -1.500000 10.750000 2.000000 -v -1.500000 10.750000 1.500000 -v -2.000000 10.750000 4.000000 -v -2.000000 10.750000 4.500000 -v -1.500000 10.750000 4.500000 -v -1.500000 10.750000 4.000000 -v -4.500000 10.750000 4.500000 -v -1.500000 10.750000 4.500000 -v -4.500000 10.750000 1.500000 -v -1.500000 10.750000 1.500000 -v -4.500000 11.000000 1.500000 -v -4.500000 11.000000 4.500000 -v -1.500000 11.000000 4.500000 -v -1.500000 11.000000 1.500000 -v -4.000000 8.750000 4.250000 v -2.000000 8.750000 4.250000 -v -4.000000 10.750000 4.250000 -v -2.000000 10.750000 4.250000 -v -2.000000 10.750000 1.750000 -v -4.000000 10.750000 1.750000 v -2.000000 8.750000 1.750000 -v -4.000000 8.750000 1.750000 -v -1.750000 8.750000 2.000000 v -1.750000 8.750000 4.000000 -v -1.750000 10.750000 2.000000 -v -1.750000 10.750000 4.000000 -v -4.250000 10.750000 4.000000 -v -4.250000 10.750000 2.000000 v -4.250000 8.750000 4.000000 -v -4.250000 8.750000 2.000000 -v -3.750000 15.250000 4.625000 -v -4.625000 15.250000 3.750000 -v -3.187500 13.250000 3.750000 -v -3.750000 13.250000 3.187500 -v -3.750000 15.250000 3.187500 -v -3.187500 15.250000 3.750000 -v -3.750000 15.500000 4.625000 -v -4.625000 15.500000 3.750000 -v -4.625000 15.250000 3.750000 -v -3.750000 15.250000 4.625000 -v -2.250000 15.500000 1.375000 -v -2.250000 15.250000 1.375000 -v -1.375000 15.500000 2.250000 -v -1.375000 15.250000 2.250000 -v -3.375000 15.500000 1.750000 -v -2.625000 15.500000 1.750000 -v -1.750000 15.500000 2.625000 -v -1.750000 15.500000 3.375000 -v -2.625000 15.500000 4.250000 -v -3.375000 15.500000 4.250000 -v -4.250000 15.500000 3.375000 -v -4.250000 15.500000 2.625000 -v -4.250000 15.250000 2.625000 -v -4.250000 15.250000 3.375000 -v -1.750000 15.250000 2.625000 -v -1.750000 15.250000 3.375000 -v -2.625000 15.250000 1.750000 -v -3.375000 15.250000 1.750000 -v -2.625000 15.250000 4.250000 -v -3.375000 15.250000 4.250000 -v -3.187500 2.000000 2.437500 -v -2.812500 2.000000 2.437500 -v -3.187500 2.000000 2.062500 -v -2.812500 2.000000 2.062500 -v -3.187500 2.000000 3.937500 -v -2.812500 2.000000 3.937500 -v -3.187500 2.000000 3.562500 -v -2.812500 2.000000 3.562500 -v -3.562500 2.000000 3.187500 -v -3.562500 2.000000 2.812500 -v -3.937500 2.000000 3.187500 -v -3.937500 2.000000 2.812500 -v -2.062500 2.000000 3.187500 -v -2.062500 2.000000 2.812500 -v -2.437500 2.000000 3.187500 -v -2.437500 2.000000 2.812500 -v -3.187500 17.500000 3.562500 -v -2.812500 17.500000 3.562500 -v -2.812500 17.500000 3.937500 -v -3.187500 17.500000 3.937500 -v -3.187500 17.500000 2.062500 -v -2.812500 17.500000 2.062500 -v -2.812500 17.500000 2.437500 -v -3.187500 17.500000 2.437500 -v -3.187500 2.000000 2.250000 -v -2.812500 2.000000 2.250000 -v -3.187500 2.000000 3.750000 -v -2.812500 2.000000 3.750000 -v -3.750000 2.000000 3.187500 -v -3.750000 2.000000 2.812500 -v -2.250000 2.000000 3.187500 -v -2.250000 2.000000 2.812500 -v -3.562500 17.500000 3.187500 -v -3.562500 17.500000 2.812500 -v -3.937500 17.500000 2.812500 -v -3.937500 17.500000 3.187500 -v -2.062500 17.500000 3.187500 -v -2.062500 17.500000 2.812500 -v -2.437500 17.500000 2.812500 -v -2.437500 17.500000 3.187500 -v -3.187500 17.500000 2.250000 -v -2.812500 17.500000 2.250000 -v -3.187500 17.500000 3.750000 -v -2.812500 17.500000 3.750000 -v -3.750000 17.500000 3.187500 -v -3.750000 17.500000 2.812500 -v -2.250000 17.500000 3.187500 -v -2.250000 17.500000 2.812500 -v -3.375000 13.000000 4.250000 -v -2.625000 13.000000 4.250000 -v -3.375000 13.000000 1.750000 -v -2.625000 13.000000 1.750000 -v -1.750000 13.000000 3.375000 -v -1.750000 13.000000 2.625000 -v -4.250000 13.000000 3.375000 -v -4.250000 13.000000 2.625000 -v -4.250000 13.250000 2.625000 -v -4.250000 13.250000 3.375000 -v -3.375000 13.250000 4.250000 -v -2.625000 13.250000 4.250000 -v -1.750000 13.250000 3.375000 -v -1.750000 13.250000 2.625000 -v -2.625000 13.250000 1.750000 -v -3.375000 13.250000 1.750000 -v -4.250000 17.500000 2.625000 -v -4.250000 17.500000 3.375000 -v -3.375000 17.500000 4.250000 -v -2.625000 17.500000 4.250000 -v -1.750000 17.500000 3.375000 -v -1.750000 17.500000 2.625000 -v -2.625000 17.500000 1.750000 -v -3.375000 17.500000 1.750000 -v -4.250000 17.750000 2.625000 -v -4.250000 17.750000 3.375000 -v -3.375000 17.750000 4.250000 -v -2.625000 17.750000 4.250000 -v -1.750000 17.750000 3.375000 -v -1.750000 17.750000 2.625000 -v -2.625000 17.750000 1.750000 -v -3.375000 17.750000 1.750000 -v -1.375000 13.000000 2.250000 -v -1.375000 13.250000 2.250000 -v -2.250000 13.000000 1.375000 -v -2.250000 13.250000 1.375000 -v -3.750000 13.000000 4.625000 -v -4.625000 13.000000 3.750000 -v -4.625000 13.250000 3.750000 -v -3.750000 13.250000 4.625000 -v 1.375000 4.000000 0.250000 -v 1.375000 3.000000 0.250000 -v 1.375000 4.000000 -0.250000 -v 1.375000 3.000000 -0.250000 -v 1.125000 4.000000 -0.250000 -v 1.125000 4.000000 0.250000 -v 1.125000 3.000000 0.250000 -v 1.125000 3.000000 -0.250000 -v 2.500000 2.000000 0.250000 -v 3.500000 2.000000 0.250000 -v 2.500000 2.000000 -0.250000 -v 3.500000 2.000000 -0.250000 -v 2.500000 2.250000 -0.250000 -v 2.500000 2.250000 0.250000 -v 3.500000 2.250000 0.250000 -v 3.500000 2.250000 -0.250000 -v 2.919652 2.029244 0.125000 -v 3.080348 2.220756 0.125000 -v 2.919652 2.029244 -0.125000 -v 3.080348 2.220756 -0.125000 -v 2.125000 2.000000 0.375000 -v 1.875000 2.000000 0.375000 -v 2.125000 2.000000 0.625000 -v 1.875000 2.000000 0.625000 -v 1.196051 3.475517 -0.125000 -v 1.196051 3.475517 0.125000 -v 1.356748 3.667028 0.125000 +v -3.187500 17.500000 2.250001 +v -2.812500 17.500000 3.750001 +v -3.187500 17.500000 3.750001 +v -2.812500 17.500000 2.250001 v 1.356748 3.667028 -0.125000 -v 1.875000 3.000000 0.125000 -v 2.125000 3.000000 0.125000 -v 2.125000 3.000000 -0.125000 -v 1.875000 3.000000 -0.125000 -v 1.875000 2.000000 -0.375000 -v 2.125000 2.000000 -0.375000 -v 1.875000 2.000000 -0.625000 -v 2.125000 2.000000 -0.625000 -v 1.875000 3.000000 -0.125000 -v 1.875000 3.000000 0.125000 -v 2.125000 3.000000 0.125000 -v 2.125000 3.000000 -0.125000 -v -1.615781 2.783195 1.792558 -v -1.792558 2.783195 1.615781 -v -1.502151 2.591684 1.678928 -v -1.678928 2.591684 1.502151 -v -0.757348 3.475517 0.934124 -v -0.934124 3.475517 0.757348 -v -1.047754 3.667028 0.870978 -v -0.870978 3.667028 1.047755 -v -3.750000 15.250000 4.625000 -v -4.625000 15.250000 3.750000 -v -3.187500 13.250000 3.750000 -v -3.750000 13.250000 3.187500 -v -3.750000 15.250000 3.187500 -v -3.187500 15.250000 3.750000 -v -3.187500 2.000000 2.250000 -v -2.812500 2.000000 2.250000 -v -3.187500 2.000000 3.750000 -v -2.812500 2.000000 3.750000 -v -3.750000 2.000000 3.187500 -v -3.750000 2.000000 2.812500 -v -2.250000 2.000000 3.187500 -v -2.250000 2.000000 2.812500 -v -3.187500 17.500000 2.250000 -v -2.812500 17.500000 2.250000 -v -3.187500 17.500000 3.750000 -v -2.812500 17.500000 3.750000 -v -3.750000 17.500000 3.187500 -v -3.750000 17.500000 2.812500 -v -2.250000 17.500000 3.187500 -v -2.250000 17.500000 2.812500 -v -4.000000 2.000000 4.250000 +v -3.187500 17.500000 2.250001 +v -2.812500 17.500000 3.750001 +v -3.187500 17.500000 3.750001 +v -2.812500 17.500000 2.250001 v -2.000000 2.000000 4.250000 -v -4.000000 4.000000 4.250000 -v -2.000000 4.000000 4.250000 -v -2.000000 4.000000 1.750000 -v -4.000000 4.000000 1.750000 v -2.000000 2.000000 1.750000 -v -4.000000 2.000000 1.750000 -v -1.750000 2.000000 2.000000 v -1.750000 2.000000 4.000000 -v -1.750000 4.000000 2.000000 -v -1.750000 4.000000 4.000000 -v -4.250000 4.000000 4.000000 -v -4.250000 4.000000 2.000000 v -4.250000 2.000000 4.000000 -v -4.250000 2.000000 2.000000 -v -4.000000 4.250000 4.250000 v -2.000000 4.250000 4.250000 -v -4.000000 6.250000 4.250000 -v -2.000000 6.250000 4.250000 -v -2.000000 6.250000 1.750000 -v -4.000000 6.250000 1.750000 v -2.000000 4.250000 1.750000 -v -4.000000 4.250000 1.750000 -v -1.750000 4.250000 2.000000 v -1.750000 4.250000 4.000000 -v -1.750000 6.250000 2.000000 -v -1.750000 6.250000 4.000000 -v -4.250000 6.250000 4.000000 -v -4.250000 6.250000 2.000000 v -4.250000 4.250000 4.000000 -v -4.250000 4.250000 2.000000 -v -4.000000 6.500000 4.250000 v -2.000000 6.500000 4.250000 -v -4.000000 8.500000 4.250000 -v -2.000000 8.500000 4.250000 -v -2.000000 8.500000 1.750000 -v -4.000000 8.500000 1.750000 v -2.000000 6.500000 1.750000 -v -4.000000 6.500000 1.750000 -v -1.750000 6.500000 2.000000 v -1.750000 6.500000 4.000000 -v -1.750000 8.500000 2.000000 -v -1.750000 8.500000 4.000000 -v -4.250000 8.500000 4.000000 -v -4.250000 8.500000 2.000000 v -4.250000 6.500000 4.000000 -v -4.250000 6.500000 2.000000 -v -4.000000 8.750000 4.250000 v -2.000000 8.750000 4.250000 -v -4.000000 10.750000 4.250000 -v -2.000000 10.750000 4.250000 -v -2.000000 10.750000 1.750000 -v -4.000000 10.750000 1.750000 v -2.000000 8.750000 1.750000 -v -4.000000 8.750000 1.750000 -v -1.750000 8.750000 2.000000 v -1.750000 8.750000 4.000000 -v -1.750000 10.750000 2.000000 -v -1.750000 10.750000 4.000000 -v -4.250000 10.750000 4.000000 -v -4.250000 10.750000 2.000000 v -4.250000 8.750000 4.000000 -v -4.250000 8.750000 2.000000 -v 1.149048 4.000000 -0.795495 -v 1.149048 3.000000 -0.795495 -v 0.795495 4.000000 -1.149048 -v 0.795495 3.000000 -1.149048 -v 0.618718 4.000000 -0.972272 -v 0.972272 4.000000 -0.618718 -v 0.972272 3.000000 -0.618718 -v 0.618718 3.000000 -0.972272 -v 1.944544 2.000000 -1.590990 -v 2.651650 2.000000 -2.298097 -v 1.590990 2.000000 -1.944544 -v 2.298097 2.000000 -2.651650 -v 1.590990 2.250000 -1.944544 -v 1.944544 2.250000 -1.590990 -v 2.651650 2.250000 -2.298097 -v 2.298097 2.250000 -2.651650 -v 2.152894 2.029244 -1.976117 -v 2.266524 2.220756 -2.089747 -v 1.976117 2.029244 -2.152894 -v 2.089747 2.220756 -2.266524 -v 1.767767 2.000000 -1.237437 -v 1.590990 2.000000 -1.060660 -v 1.944544 2.000000 -1.060660 -v 1.767767 2.000000 -0.883883 -v 0.757348 3.475517 -0.934124 -v 0.934124 3.475517 -0.757348 -v 1.047754 3.667028 -0.870978 v 0.870978 3.667028 -1.047754 -v 1.414214 3.000000 -1.237437 -v 1.590990 3.000000 -1.414214 -v 1.414214 3.000000 -1.590990 -v 1.237437 3.000000 -1.414214 -v 1.060660 2.000000 -1.590990 -v 1.237437 2.000000 -1.767767 -v 0.883883 2.000000 -1.767767 -v 1.060660 2.000000 -1.944544 -v 1.237437 3.000000 -1.414214 -v 1.414214 3.000000 -1.237437 -v 1.590990 3.000000 -1.414214 -v 1.414214 3.000000 -1.590990 -v 0.795495 4.000000 1.149048 -v 0.795495 3.000000 1.149048 -v 1.149048 4.000000 0.795495 -v 1.149048 3.000000 0.795495 -v 0.972272 4.000000 0.618719 -v 0.618718 4.000000 0.972272 -v 0.618718 3.000000 0.972272 -v 0.972272 3.000000 0.618719 -v 1.590990 2.000000 1.944544 -v 2.298097 2.000000 2.651650 -v 1.944543 2.000000 1.590990 -v 2.651650 2.000000 2.298097 -v 1.944543 2.250000 1.590990 -v 1.590990 2.250000 1.944544 -v 2.298097 2.250000 2.651650 -v 2.651650 2.250000 2.298097 -v 1.976117 2.029244 2.152894 -v 2.089747 2.220755 2.266524 -v 2.152894 2.029244 1.976117 -v 2.266524 2.220755 2.089747 -v 1.237437 2.000000 1.767767 -v 1.060660 2.000000 1.590990 -v 1.060660 2.000000 1.944544 -v 0.883883 2.000000 1.767767 -v 0.934124 3.475517 0.757348 -v 0.757348 3.475517 0.934125 -v 0.870978 3.667028 1.047755 v 1.047754 3.667028 0.870978 -v 1.237437 3.000000 1.414214 -v 1.414213 3.000000 1.590990 -v 1.590990 3.000000 1.414214 -v 1.414214 3.000000 1.237437 -v 1.590990 2.000000 1.060660 -v 1.767767 2.000000 1.237437 -v 1.767767 2.000000 0.883883 -v 1.944544 2.000000 1.060660 -v 1.414214 3.000000 1.237437 -v 1.237437 3.000000 1.414214 -v 1.414213 3.000000 1.590990 -v 1.590990 3.000000 1.414214 -v -1.375000 4.000000 -0.250000 -v -1.375000 3.000000 -0.250000 -v -1.375000 4.000000 0.250000 -v -1.375000 3.000000 0.250000 -v -1.125000 4.000000 0.250000 -v -1.125000 4.000000 -0.250000 -v -1.125000 3.000000 -0.250000 -v -1.125000 3.000000 0.250000 -v -2.500000 2.000000 -0.250000 -v -3.500000 2.000000 -0.250000 -v -2.500000 2.000000 0.250000 -v -3.500000 2.000000 0.250000 -v -2.500000 2.250000 0.250000 -v -2.500000 2.250000 -0.250000 -v -3.500000 2.250000 -0.250000 -v -3.500000 2.250000 0.250000 -v -2.919652 2.029244 -0.125000 -v -3.080348 2.220756 -0.125000 -v -2.919652 2.029244 0.125000 -v -3.080348 2.220756 0.125000 -v -2.125000 2.000000 -0.375000 -v -1.875000 2.000000 -0.375000 -v -2.125000 2.000000 -0.625000 -v -1.875000 2.000000 -0.625000 -v -1.196051 3.475517 0.125000 -v -1.196051 3.475517 -0.125000 -v -1.356748 3.667028 -0.125000 v -1.356748 3.667028 0.125000 -v -1.875000 3.000000 -0.125000 -v -2.125000 3.000000 -0.125000 -v -2.125000 3.000000 0.125000 -v -1.875000 3.000000 0.125000 -v -1.875000 2.000000 0.375000 -v -2.125000 2.000000 0.375000 -v -1.875000 2.000000 0.625000 -v -2.125000 2.000000 0.625000 -v -1.875000 3.000000 0.125000 -v -1.875000 3.000000 -0.125000 -v -2.125000 3.000000 -0.125000 -v -2.125000 3.000000 0.125000 -v -0.795495 4.000000 -1.149048 -v -0.795495 3.000000 -1.149048 -v -1.149049 4.000000 -0.795495 -v -1.149049 3.000000 -0.795495 -v -0.972272 4.000000 -0.618719 -v -0.618718 4.000000 -0.972272 -v -0.618718 3.000000 -0.972272 -v -0.972272 3.000000 -0.618719 -v -1.590990 2.000000 -1.944544 -v -2.298097 2.000000 -2.651650 -v -1.944544 2.000000 -1.590990 -v -2.651650 2.000000 -2.298097 -v -1.944544 2.250000 -1.590990 -v -1.590990 2.250000 -1.944544 -v -2.298097 2.250000 -2.651650 -v -2.651650 2.250000 -2.298097 -v -1.976117 2.029244 -2.152894 -v -2.089747 2.220755 -2.266523 -v -2.152894 2.029244 -1.976117 -v -2.266524 2.220755 -2.089746 -v -1.237437 2.000000 -1.767767 -v -1.060660 2.000000 -1.590990 -v -1.060660 2.000000 -1.944544 -v -0.883884 2.000000 -1.767767 -v -0.934124 3.475517 -0.757348 -v -0.757348 3.475517 -0.934124 -v -0.870978 3.667028 -1.047755 +v -1.196051 3.475517 -0.125000 v -1.047755 3.667028 -0.870978 -v -1.237437 3.000000 -1.414213 -v -1.414213 3.000000 -1.590990 -v -1.590990 3.000000 -1.414213 -v -1.414214 3.000000 -1.237437 -v -1.590990 2.000000 -1.060660 -v -1.767767 2.000000 -1.237437 -v -1.767767 2.000000 -0.883883 -v -1.944544 2.000000 -1.060660 -v -1.414214 3.000000 -1.237437 -v -1.237437 3.000000 -1.414213 -v -1.414213 3.000000 -1.590990 -v -1.590990 3.000000 -1.414213 -v -1.149048 4.000000 0.795495 -v -1.149048 3.000000 0.795495 -v -0.795495 4.000000 1.149049 -v -0.795495 3.000000 1.149049 -v -0.618718 4.000000 0.972272 -v -0.972272 4.000000 0.618719 -v -0.972272 3.000000 0.618719 -v -0.618718 3.000000 0.972272 -v -1.767767 2.000000 1.237437 -v -1.590990 2.000000 1.060660 -v -1.944543 2.000000 1.060660 -v -1.767767 2.000000 0.883884 -v -1.414213 3.000000 1.237437 -v -1.590990 3.000000 1.414214 -v -1.414213 3.000000 1.590990 -v -1.237437 3.000000 1.414214 -v -1.060660 2.000000 1.590990 -v -1.237437 2.000000 1.767767 -v -0.883883 2.000000 1.767767 -v -1.060660 2.000000 1.944544 -v -1.237437 3.000000 1.414214 -v -1.414213 3.000000 1.237437 -v -1.590990 3.000000 1.414214 -v -1.414213 3.000000 1.590990 +v -0.757348 3.475517 -0.934124 vt 0.269231 0.532258 vt 0.115385 0.725806 vt 0.115385 0.532258 @@ -5473,7 +9682,7 @@ vt 0.730769 0.709677 vt 0.846154 0.629032 vt 0.846154 0.693548 vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 -0.0000 vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 @@ -5515,16499 +9724,4523 @@ vn 0.6428 -0.7660 0.0000 vn -0.4545 0.7660 -0.4545 vn 0.4545 -0.7660 0.4545 s off -f 1214/1496/52 1211/1497/52 1212/1498/52 -f 1187/1499/52 1192/1500/52 1188/1501/52 -f 1197/1502/53 1202/1503/53 1198/1504/53 -f 1192/1500/54 1198/1504/54 1194/1505/54 -f 1193/1506/55 1196/1507/55 1191/1508/55 -f 1194/1509/56 1195/1510/56 1193/1511/56 -f 1191/1512/57 1197/1513/57 1192/1514/57 -f 1202/1515/56 1203/1516/56 1201/1517/56 -f 1198/1518/53 1201/1517/53 1195/1510/53 -f 1195/1519/53 1199/1520/53 1196/1507/53 -f 1196/1521/53 1200/1522/53 1197/1513/53 -f 1189/1523/52 1191/1524/52 1187/1499/52 -f 1199/1525/57 1205/1526/57 1200/1522/57 -f 1200/1527/54 1206/1528/54 1202/1503/54 -f 1201/1529/55 1204/1530/55 1199/1520/55 -f 1190/1531/52 1193/1532/52 1189/1523/52 -f 1188/1501/52 1194/1505/52 1190/1531/52 -f 1208/1533/58 1187/1499/58 1188/1501/58 -f 1207/1534/59 1189/1523/59 1187/1499/59 -f 1209/1535/60 1190/1531/60 1189/1523/60 -f 1210/1536/61 1188/1501/61 1190/1531/61 -f 1223/1537/56 1217/1538/56 1222/1539/56 -f 1216/1540/52 1221/1541/52 1215/1542/52 -f 1224/1543/54 1216/1540/54 1219/1544/54 -f 1215/1542/57 1219/1545/57 1216/1540/57 -f 1222/1539/58 1224/1543/58 1223/1537/58 -f 1222/1546/55 1217/1547/55 1218/1548/55 -f 1237/1549/56 1236/1550/56 1235/1551/56 -f 1233/1552/55 1238/1553/55 1232/1554/55 -f 1231/1555/57 1233/1552/57 1232/1556/57 -f 1225/1557/54 1230/1558/54 1231/1559/54 -f 1239/1560/52 1237/1549/52 1233/1552/52 -f 1274/1561/53 1273/1562/53 1272/1563/53 -f 1273/1564/57 1277/1565/57 1272/1566/57 -f 1278/1567/52 1276/1568/52 1277/1565/52 -f 1274/1569/56 1279/1570/56 1275/1571/56 -f 1280/1572/57 1283/1573/57 1282/1574/57 -f 1272/1575/55 1276/1568/55 1274/1576/55 -f 1275/1577/54 1278/1567/54 1273/1578/54 -f 1249/1579/57 1265/1580/57 1248/1581/57 -f 1243/1582/54 1258/1583/54 1241/1584/54 -f 1251/1585/54 1266/1586/54 1249/1579/54 -f 1242/1587/56 1259/1588/56 1243/1582/56 -f 1250/1589/56 1267/1590/56 1251/1585/56 -f 1244/1591/55 1260/1592/55 1246/1593/55 -f 1252/1594/55 1268/1595/55 1254/1596/55 -f 1245/1597/57 1261/1598/57 1244/1591/57 -f 1253/1599/57 1269/1600/57 1252/1594/57 -f 1247/1601/54 1262/1602/54 1245/1597/54 -f 1255/1603/54 1270/1604/54 1253/1599/54 -f 1246/1593/56 1263/1605/56 1247/1606/56 -f 1240/1607/55 1256/1608/55 1242/1587/55 -f 1254/1609/56 1271/1610/56 1255/1603/56 -f 1248/1611/55 1264/1612/55 1250/1589/55 -f 1241/1613/57 1257/1614/57 1240/1607/57 -f 1284/1615/56 1287/1616/56 1285/1617/56 -f 1291/1618/54 1288/1619/54 1290/1620/54 -f 1295/1621/55 1292/1622/55 1293/1623/55 -f 1330/1624/53 1329/1625/53 1328/1626/53 -f 1329/1627/57 1333/1628/57 1328/1629/57 -f 1334/1630/52 1332/1631/52 1333/1628/52 -f 1330/1632/56 1335/1633/56 1331/1634/56 -f 1336/1635/57 1339/1636/57 1338/1637/57 -f 1328/1638/55 1332/1631/55 1330/1639/55 -f 1331/1640/54 1334/1630/54 1329/1641/54 -f 1305/1642/57 1321/1643/57 1304/1644/57 -f 1299/1645/54 1314/1646/54 1297/1647/54 -f 1307/1648/54 1322/1649/54 1305/1642/54 -f 1298/1650/56 1315/1651/56 1299/1645/56 -f 1306/1652/56 1323/1653/56 1307/1648/56 -f 1300/1654/55 1316/1655/55 1302/1656/55 -f 1308/1657/55 1324/1658/55 1310/1659/55 -f 1301/1660/57 1317/1661/57 1300/1654/57 -f 1309/1662/57 1325/1663/57 1308/1657/57 -f 1303/1664/54 1318/1665/54 1301/1660/54 -f 1311/1666/54 1326/1667/54 1309/1662/54 -f 1302/1656/56 1319/1668/56 1303/1669/56 -f 1296/1670/55 1312/1671/55 1298/1650/55 -f 1310/1672/56 1327/1673/56 1311/1666/56 -f 1304/1674/55 1320/1675/55 1306/1652/55 -f 1297/1676/57 1313/1677/57 1296/1670/57 -f 1340/1678/56 1343/1679/56 1341/1680/56 -f 1347/1681/54 1344/1682/54 1346/1683/54 -f 1351/1684/55 1348/1685/55 1349/1686/55 -f 1386/1687/53 1385/1688/53 1384/1689/53 -f 1385/1690/57 1389/1691/57 1384/1692/57 -f 1390/1693/52 1388/1694/52 1389/1691/52 -f 1386/1695/56 1391/1696/56 1387/1697/56 -f 1392/1698/57 1395/1699/57 1394/1700/57 -f 1384/1701/55 1388/1694/55 1386/1702/55 -f 1387/1703/54 1390/1693/54 1385/1704/54 -f 1361/1705/57 1377/1706/57 1360/1707/57 -f 1355/1708/54 1370/1709/54 1353/1710/54 -f 1363/1711/54 1378/1712/54 1361/1705/54 -f 1354/1713/56 1371/1714/56 1355/1708/56 -f 1362/1715/56 1379/1716/56 1363/1711/56 -f 1356/1717/55 1372/1718/55 1358/1719/55 -f 1364/1720/55 1380/1721/55 1366/1722/55 -f 1357/1723/57 1373/1724/57 1356/1717/57 -f 1365/1725/57 1381/1726/57 1364/1720/57 -f 1359/1727/54 1374/1728/54 1357/1723/54 -f 1367/1729/54 1382/1730/54 1365/1725/54 -f 1358/1719/56 1375/1731/56 1359/1732/56 -f 1352/1733/55 1368/1734/55 1354/1713/55 -f 1366/1735/56 1383/1736/56 1367/1729/56 -f 1360/1737/55 1376/1738/55 1362/1715/55 -f 1353/1739/57 1369/1740/57 1352/1733/57 -f 1396/1741/56 1399/1742/56 1397/1743/56 -f 1403/1744/54 1400/1745/54 1402/1746/54 -f 1407/1747/55 1404/1748/55 1405/1749/55 -f 1442/1750/53 1441/1751/53 1440/1752/53 -f 1441/1753/57 1445/1754/57 1440/1755/57 -f 1446/1756/52 1444/1757/52 1445/1754/52 -f 1442/1758/56 1447/1759/56 1443/1760/56 -f 1448/1761/57 1451/1762/57 1450/1763/57 -f 1440/1764/55 1444/1757/55 1442/1765/55 -f 1443/1766/54 1446/1756/54 1441/1767/54 -f 1417/1768/57 1433/1769/57 1416/1770/57 -f 1411/1771/54 1426/1772/54 1409/1773/54 -f 1419/1774/54 1434/1775/54 1417/1768/54 -f 1410/1776/56 1427/1777/56 1411/1771/56 -f 1418/1778/56 1435/1779/56 1419/1774/56 -f 1412/1780/55 1428/1781/55 1414/1782/55 -f 1420/1783/55 1436/1784/55 1422/1785/55 -f 1413/1786/57 1429/1787/57 1412/1780/57 -f 1421/1788/57 1437/1789/57 1420/1783/57 -f 1415/1790/54 1430/1791/54 1413/1786/54 -f 1423/1792/54 1438/1793/54 1421/1788/54 -f 1414/1782/56 1431/1794/56 1415/1795/56 -f 1408/1796/55 1424/1797/55 1410/1776/55 -f 1422/1798/56 1439/1799/56 1423/1792/56 -f 1416/1800/55 1432/1801/55 1418/1778/55 -f 1409/1802/57 1425/1803/57 1408/1796/57 -f 1452/1804/56 1455/1805/56 1453/1806/56 -f 1459/1807/54 1456/1808/54 1458/1809/54 -f 1463/1810/55 1460/1811/55 1461/1812/55 -f 1469/1813/62 1464/1814/62 1466/1815/62 -f 1468/1816/63 1467/1817/63 1465/1818/63 -f 1493/1819/53 1472/1820/53 1487/1821/53 -f 1470/1822/64 1472/1823/64 1473/1824/64 -f 1484/1825/52 1470/1822/52 1483/1826/52 -f 1483/1826/65 1473/1827/65 1493/1828/65 -f 1475/1829/53 1488/1830/53 1490/1831/53 -f 1480/1832/52 1474/1833/52 1479/1834/52 -f 1475/1835/66 1476/1836/66 1477/1837/66 -f 1479/1834/67 1475/1838/67 1490/1839/67 -f 1487/1840/55 1485/1841/55 1486/1842/55 -f 1488/1843/54 1481/1844/54 1489/1845/54 -f 1487/1846/67 1471/1847/67 1484/1825/67 -f 1488/1848/65 1476/1836/65 1480/1832/65 -f 1492/1849/57 1483/1850/57 1493/1851/57 -f 1491/1852/56 1479/1853/56 1490/1854/56 -f 1488/1855/53 1492/1856/53 1487/1857/53 -f 1482/1858/52 1480/1859/52 1478/1860/52 -f 1489/1845/65 1482/1861/65 1492/1862/65 -f 1486/1842/67 1478/1863/67 1491/1864/67 -f 1549/1865/67 1557/1866/67 1544/1867/67 -f 1505/1868/56 1527/1869/56 1503/1870/56 -f 1546/1871/65 1553/1872/65 1543/1873/65 -f 1553/1874/52 1555/1875/52 1557/1876/52 -f 1547/1877/53 1543/1878/53 1548/1879/53 -f 1500/1880/56 1511/1881/56 1501/1882/56 -f 1506/1883/57 1533/1884/57 1508/1885/57 -f 1508/1885/55 1532/1886/55 1509/1887/55 -f 1509/1888/56 1531/1889/56 1507/1890/56 -f 1495/1891/57 1517/1892/57 1494/1893/57 -f 1494/1893/55 1514/1894/55 1496/1895/55 -f 1503/1870/54 1526/1896/54 1502/1897/54 -f 1497/1898/54 1516/1899/54 1495/1891/54 -f 1496/1900/56 1515/1901/56 1497/1898/56 -f 1498/1902/55 1510/1903/55 1500/1904/55 -f 1504/1905/55 1528/1906/55 1505/1907/55 -f 1501/1882/54 1512/1908/54 1499/1909/54 -f 1499/1909/57 1513/1910/57 1498/1902/57 -f 1502/1897/57 1529/1911/57 1504/1905/57 -f 1507/1890/54 1530/1912/54 1506/1883/54 -f 1539/1913/67 1518/1914/67 1523/1915/67 -f 1540/1916/65 1521/1917/65 1524/1918/65 -f 1520/1919/64 1538/1920/64 1522/1921/64 -f 1519/1922/66 1541/1923/66 1525/1924/66 -f 1544/1925/56 1556/1926/56 1545/1927/56 -f 1543/1928/57 1552/1929/57 1542/1930/57 -f 1547/1931/65 1575/1932/65 1555/1933/65 -f 1548/1934/67 1580/1935/67 1551/1936/67 -f 1547/1937/54 1554/1938/54 1546/1871/54 -f 1548/1939/55 1550/1940/55 1549/1865/55 -f 1563/1941/53 1561/1942/53 1559/1943/53 -f 1569/1944/52 1571/1945/52 1573/1946/52 -f 1562/1947/65 1569/1948/65 1561/1949/65 -f 1558/1950/67 1573/1951/67 1565/1952/67 -f 1565/1953/56 1572/1954/56 1564/1955/56 -f 1561/1956/57 1568/1957/57 1560/1958/57 -f 1564/1959/66 1571/1945/66 1563/1960/66 -f 1560/1961/64 1567/1962/64 1559/1963/64 -f 1563/1960/54 1570/1964/54 1562/1947/54 -f 1559/1963/55 1566/1965/55 1558/1950/55 -f 1556/1966/67 1576/1967/67 1545/1968/67 -f 1576/1969/66 1575/1932/66 1574/1970/66 -f 1555/1933/52 1577/1971/52 1556/1966/52 -f 1576/1972/53 1547/1973/53 1545/1974/53 -f 1552/1975/65 1578/1976/65 1542/1977/65 -f 1551/1936/52 1581/1978/52 1552/1975/52 -f 1581/1978/64 1579/1979/64 1578/1980/64 -f 1542/1981/53 1579/1982/53 1548/1983/53 -f 1583/1984/54 1584/1985/54 1582/1986/54 -f 1586/1987/55 1588/1988/55 1587/1989/55 -f 1585/1990/56 1586/1987/56 1584/1985/56 -f 1582/1986/57 1588/1991/57 1583/1984/57 -f 1583/1984/53 1589/1992/53 1585/1990/53 -f 1584/1985/52 1587/1993/52 1582/1986/52 -f 1596/1994/52 1594/1995/52 1595/1996/52 -f 1593/1997/54 1596/1994/54 1591/1998/54 -f 1590/1999/55 1594/1995/55 1592/2000/55 -f 1592/2001/56 1597/2002/56 1593/2003/56 -f 1591/2004/57 1595/1996/57 1590/2005/57 -f 1606/2006/56 1601/2007/56 1600/2008/56 -f 1601/2007/68 1608/2009/68 1599/2010/68 -f 1603/2011/55 1610/2012/55 1613/2013/55 -f 1608/2009/57 1598/2014/57 1599/2010/57 -f 1603/2011/69 1612/2015/69 1602/2016/69 -f 1604/2017/70 1610/2018/70 1605/2019/70 -f 1607/2020/71 1600/2008/71 1598/2021/71 -f 1602/2016/54 1611/2022/54 1604/2017/54 -f 1615/2023/54 1621/2024/54 1620/2025/54 -f 1614/2026/55 1618/2027/55 1616/2028/55 -f 1616/2028/72 1621/2024/72 1617/2029/72 -f 1615/2023/73 1619/2030/73 1614/2031/73 -f 1624/2032/74 1627/2033/74 1626/2034/74 -f 1622/2035/65 1626/2034/65 1629/2036/65 -f 1623/2037/75 1629/2036/75 1628/2038/75 -f 1625/2039/67 1628/2038/67 1627/2040/67 -f 1717/2041/66 1718/2042/66 1716/2043/66 -f 1635/2044/76 1632/2045/76 1630/2046/76 -f 1634/2047/77 1631/2048/77 1633/2049/77 -f 1636/2050/65 1649/2051/65 1641/2052/65 -f 1639/2053/67 1650/2054/67 1642/2055/67 -f 1648/2056/66 1638/2057/66 1640/2058/66 -f 1651/2059/64 1637/2060/64 1643/2061/64 -f 1655/2062/56 1652/2063/56 1654/2064/56 -f 1659/2065/57 1656/2066/57 1657/2067/57 -f 1660/2068/55 1663/2069/55 1662/2070/55 -f 1664/2071/54 1667/2072/54 1665/2073/54 -f 1671/2074/56 1668/2075/56 1670/2076/56 -f 1675/2077/57 1672/2078/57 1673/2079/57 -f 1676/2080/55 1679/2081/55 1678/2082/55 -f 1680/2083/54 1683/2084/54 1681/2085/54 -f 1687/2086/56 1684/2087/56 1686/2088/56 -f 1691/2089/57 1688/2090/57 1689/2091/57 -f 1692/2092/55 1695/2093/55 1694/2094/55 -f 1696/2095/54 1699/2096/54 1697/2097/54 -f 1703/2098/56 1700/2099/56 1702/2100/56 -f 1707/2101/57 1704/2102/57 1705/2103/57 -f 1708/2104/55 1711/2105/55 1710/2106/55 -f 1712/2107/54 1715/2108/54 1713/2109/54 -f 1720/2110/64 1722/2111/64 1721/2112/64 -f 1719/2113/67 1720/2110/67 1718/2042/67 -f 1716/2043/65 1722/2114/65 1717/2041/65 -f 1717/2041/53 1723/2115/53 1719/2113/53 -f 1718/2042/52 1721/2116/52 1716/2043/52 -f 1730/2117/52 1728/2118/52 1729/2119/52 -f 1727/2120/66 1730/2117/66 1725/2121/66 -f 1724/2122/64 1728/2118/64 1726/2123/64 -f 1726/2124/67 1731/2125/67 1727/2126/67 -f 1725/2127/65 1729/2119/65 1724/2128/65 -f 1740/2129/67 1735/2130/67 1734/2131/67 -f 1735/2130/78 1742/2132/78 1733/2133/78 -f 1737/2134/64 1744/2135/64 1747/2136/64 -f 1742/2132/65 1732/2137/65 1733/2133/65 -f 1737/2134/79 1746/2138/79 1736/2139/79 -f 1738/2140/80 1744/2141/80 1739/2142/80 -f 1741/2143/81 1734/2131/81 1732/2144/81 -f 1736/2139/66 1745/2145/66 1738/2140/66 -f 1749/2146/66 1755/2147/66 1754/2148/66 -f 1748/2149/64 1752/2150/64 1750/2151/64 -f 1750/2151/82 1755/2147/82 1751/2152/82 -f 1749/2146/83 1753/2153/83 1748/2154/83 -f 1757/2155/65 1758/2156/65 1756/2157/65 -f 1760/2158/67 1762/2159/67 1761/2160/67 -f 1759/2161/66 1760/2158/66 1758/2156/66 -f 1756/2157/64 1762/2162/64 1757/2155/64 -f 1757/2155/53 1763/2163/53 1759/2161/53 -f 1756/2157/52 1760/2164/52 1761/2165/52 -f 1770/2166/52 1768/2167/52 1769/2168/52 -f 1767/2169/65 1770/2166/65 1765/2170/65 -f 1764/2171/67 1768/2167/67 1766/2172/67 -f 1766/2173/66 1771/2174/66 1767/2175/66 -f 1765/2176/64 1769/2168/64 1764/2177/64 -f 1780/2178/66 1775/2179/66 1774/2180/66 -f 1775/2179/84 1782/2181/84 1773/2182/84 -f 1777/2183/67 1784/2184/67 1787/2185/67 -f 1782/2181/64 1772/2186/64 1773/2182/64 -f 1777/2183/85 1786/2187/85 1776/2188/85 -f 1778/2189/86 1784/2190/86 1779/2191/86 -f 1781/2192/87 1774/2180/87 1772/2193/87 -f 1776/2188/65 1785/2194/65 1778/2189/65 -f 1789/2195/65 1795/2196/65 1794/2197/65 -f 1788/2198/67 1792/2199/67 1790/2200/67 -f 1791/2201/88 1792/2199/88 1795/2196/88 -f 1789/2195/89 1793/2202/89 1788/2203/89 -f 1797/2204/55 1798/2205/55 1796/2206/55 -f 1800/2207/54 1802/2208/54 1801/2209/54 -f 1799/2210/57 1800/2207/57 1798/2205/57 -f 1796/2206/56 1802/2211/56 1797/2204/56 -f 1797/2204/53 1803/2212/53 1799/2210/53 -f 1798/2205/52 1801/2213/52 1796/2206/52 -f 1810/2214/52 1808/2215/52 1809/2216/52 -f 1807/2217/55 1810/2214/55 1805/2218/55 -f 1804/2219/54 1808/2215/54 1806/2220/54 -f 1806/2221/57 1811/2222/57 1807/2223/57 -f 1805/2224/56 1809/2216/56 1804/2225/56 -f 1820/2226/57 1815/2227/57 1814/2228/57 -f 1815/2227/90 1822/2229/90 1813/2230/90 -f 1817/2231/54 1824/2232/54 1827/2233/54 -f 1822/2229/56 1812/2234/56 1813/2230/56 -f 1817/2231/73 1826/2235/73 1816/2236/73 -f 1818/2237/72 1824/2238/72 1819/2239/72 -f 1812/2240/91 1820/2226/91 1814/2228/91 -f 1816/2236/55 1825/2241/55 1818/2237/55 -f 1829/2242/55 1835/2243/55 1834/2244/55 -f 1828/2245/54 1832/2246/54 1830/2247/54 -f 1830/2247/70 1835/2243/70 1831/2248/70 -f 1829/2242/69 1833/2249/69 1828/2250/69 -f 1837/2251/67 1838/2252/67 1836/2253/67 -f 1840/2254/65 1842/2255/65 1841/2256/65 -f 1839/2257/64 1840/2254/64 1838/2252/64 -f 1836/2253/66 1842/2258/66 1837/2251/66 -f 1837/2251/53 1843/2259/53 1839/2257/53 -f 1836/2253/52 1840/2260/52 1841/2261/52 -f 1850/2262/52 1848/2263/52 1849/2264/52 -f 1847/2265/67 1850/2262/67 1845/2266/67 -f 1844/2267/65 1848/2263/65 1846/2268/65 -f 1846/2269/64 1851/2270/64 1847/2271/64 -f 1845/2272/66 1849/2264/66 1844/2273/66 -f 1860/2274/64 1855/2275/64 1854/2276/64 -f 1855/2275/92 1862/2277/92 1853/2278/92 -f 1857/2279/65 1864/2280/65 1867/2281/65 -f 1862/2277/66 1852/2282/66 1853/2278/66 -f 1857/2279/89 1866/2283/89 1856/2284/89 -f 1858/2285/88 1864/2286/88 1859/2287/88 -f 1852/2288/93 1860/2274/93 1854/2276/93 -f 1856/2284/67 1865/2289/67 1858/2285/67 -f 1869/2290/67 1875/2291/67 1874/2292/67 -f 1868/2293/65 1872/2294/65 1870/2295/65 -f 1871/2296/86 1872/2294/86 1875/2291/86 -f 1869/2290/85 1873/2297/85 1868/2298/85 -f 1877/2299/64 1878/2300/64 1876/2301/64 -f 1880/2302/66 1882/2303/66 1881/2304/66 -f 1879/2305/65 1880/2302/65 1878/2300/65 -f 1876/2301/67 1882/2306/67 1877/2299/67 -f 1877/2299/53 1883/2307/53 1879/2305/53 -f 1878/2300/52 1881/2308/52 1876/2301/52 -f 1885/2309/66 1888/2310/66 1891/2311/66 -f 1885/2309/83 1890/2312/83 1884/2313/83 -f 1886/2314/82 1888/2315/82 1887/2316/82 -f 1884/2313/64 1889/2317/64 1886/2314/64 -f 1893/2318/64 1899/2319/64 1898/2320/64 -f 1892/2321/66 1896/2322/66 1894/2323/66 -f 1894/2323/80 1899/2319/80 1895/2324/80 -f 1893/2318/79 1897/2325/79 1892/2326/79 -f 1214/1496/52 1213/2327/52 1211/1497/52 -f 1187/1499/52 1191/1524/52 1192/1500/52 -f 1197/1502/53 1200/1527/53 1202/1503/53 -f 1192/1500/54 1197/1502/54 1198/1504/54 -f 1193/1506/55 1195/1519/55 1196/1507/55 -f 1194/1509/56 1198/1518/56 1195/1510/56 -f 1191/1512/57 1196/1521/57 1197/1513/57 -f 1202/1515/56 1206/2328/56 1203/1516/56 -f 1198/1518/53 1202/1515/53 1201/1517/53 -f 1195/1519/53 1201/1529/53 1199/1520/53 -f 1196/1521/53 1199/1525/53 1200/1522/53 -f 1189/1523/52 1193/1532/52 1191/1524/52 -f 1199/1525/57 1204/2329/57 1205/1526/57 -f 1200/1527/54 1205/2330/54 1206/1528/54 -f 1201/1529/55 1203/2331/55 1204/1530/55 -f 1190/1531/52 1194/1505/52 1193/1532/52 -f 1188/1501/52 1192/1500/52 1194/1505/52 -f 1208/1533/58 1207/1534/58 1187/1499/58 -f 1207/1534/59 1209/1535/59 1189/1523/59 -f 1209/1535/60 1210/1536/60 1190/1531/60 -f 1210/1536/61 1208/1533/61 1188/1501/61 -f 1223/1537/56 1220/2332/56 1217/1538/56 -f 1216/1540/52 1224/1543/52 1221/1541/52 -f 1220/2333/54 1223/2334/54 1219/1544/54 -f 1223/2334/54 1224/1543/54 1219/1544/54 -f 1215/1542/57 1218/2335/57 1219/1545/57 -f 1222/1539/58 1221/1541/58 1224/1543/58 -f 1218/1548/55 1215/1542/55 1221/1541/55 -f 1221/1541/55 1222/1546/55 1218/1548/55 -f 1235/1551/56 1226/2336/56 1234/2337/56 -f 1234/2337/56 1238/2338/56 1235/1551/56 -f 1238/2338/56 1237/1549/56 1235/1551/56 -f 1233/1552/55 1237/1549/55 1238/1553/55 -f 1231/1555/57 1230/1558/57 1233/1552/57 -f 1231/1559/54 1227/2339/54 1225/1557/54 -f 1227/2339/54 1228/2340/54 1225/1557/54 -f 1225/1557/54 1229/2341/54 1230/1558/54 -f 1230/1558/52 1229/2341/52 1239/1560/52 -f 1239/1560/52 1236/1550/52 1237/1549/52 -f 1233/1552/52 1230/1558/52 1239/1560/52 -f 1274/1561/53 1275/2342/53 1273/1562/53 -f 1273/1564/57 1278/1567/57 1277/1565/57 -f 1278/1567/52 1279/1570/52 1276/1568/52 -f 1274/1569/56 1276/1568/56 1279/1570/56 -f 1280/1572/57 1281/2343/57 1283/1573/57 -f 1272/1575/55 1277/1565/55 1276/1568/55 -f 1275/1577/54 1279/1570/54 1278/1567/54 -f 1249/1579/57 1266/1586/57 1265/1580/57 -f 1243/1582/54 1259/1588/54 1258/1583/54 -f 1251/1585/54 1267/1590/54 1266/1586/54 -f 1242/1587/56 1256/1608/56 1259/1588/56 -f 1250/1589/56 1264/1612/56 1267/1590/56 -f 1244/1591/55 1261/1598/55 1260/1592/55 -f 1252/1594/55 1269/1600/55 1268/1595/55 -f 1245/1597/57 1262/1602/57 1261/1598/57 -f 1253/1599/57 1270/1604/57 1269/1600/57 -f 1247/1601/54 1263/2344/54 1262/1602/54 -f 1255/1603/54 1271/1610/54 1270/1604/54 -f 1246/1593/56 1260/1592/56 1263/1605/56 -f 1240/1607/55 1257/1614/55 1256/1608/55 -f 1254/1609/56 1268/2345/56 1271/1610/56 -f 1248/1611/55 1265/2346/55 1264/1612/55 -f 1241/1613/57 1258/2347/57 1257/1614/57 -f 1284/1615/56 1286/2348/56 1287/1616/56 -f 1291/1618/54 1289/2349/54 1288/1619/54 -f 1295/1621/55 1294/2350/55 1292/1622/55 -f 1330/1624/53 1331/2351/53 1329/1625/53 -f 1329/1627/57 1334/1630/57 1333/1628/57 -f 1334/1630/52 1335/1633/52 1332/1631/52 -f 1330/1632/56 1332/1631/56 1335/1633/56 -f 1336/1635/57 1337/2352/57 1339/1636/57 -f 1328/1638/55 1333/1628/55 1332/1631/55 -f 1331/1640/54 1335/1633/54 1334/1630/54 -f 1305/1642/57 1322/1649/57 1321/1643/57 -f 1299/1645/54 1315/1651/54 1314/1646/54 -f 1307/1648/54 1323/1653/54 1322/1649/54 -f 1298/1650/56 1312/1671/56 1315/1651/56 -f 1306/1652/56 1320/1675/56 1323/1653/56 -f 1300/1654/55 1317/1661/55 1316/1655/55 -f 1308/1657/55 1325/1663/55 1324/1658/55 -f 1301/1660/57 1318/1665/57 1317/1661/57 -f 1309/1662/57 1326/1667/57 1325/1663/57 -f 1303/1664/54 1319/2353/54 1318/1665/54 -f 1311/1666/54 1327/1673/54 1326/1667/54 -f 1302/1656/56 1316/1655/56 1319/1668/56 -f 1296/1670/55 1313/1677/55 1312/1671/55 -f 1310/1672/56 1324/2354/56 1327/1673/56 -f 1304/1674/55 1321/2355/55 1320/1675/55 -f 1297/1676/57 1314/2356/57 1313/1677/57 -f 1340/1678/56 1342/2357/56 1343/1679/56 -f 1347/1681/54 1345/2358/54 1344/1682/54 -f 1351/1684/55 1350/2359/55 1348/1685/55 -f 1386/1687/53 1387/2360/53 1385/1688/53 -f 1385/1690/57 1390/1693/57 1389/1691/57 -f 1390/1693/52 1391/1696/52 1388/1694/52 -f 1386/1695/56 1388/1694/56 1391/1696/56 -f 1392/1698/57 1393/2361/57 1395/1699/57 -f 1384/1701/55 1389/1691/55 1388/1694/55 -f 1387/1703/54 1391/1696/54 1390/1693/54 -f 1361/1705/57 1378/1712/57 1377/1706/57 -f 1355/1708/54 1371/1714/54 1370/1709/54 -f 1363/1711/54 1379/1716/54 1378/1712/54 -f 1354/1713/56 1368/1734/56 1371/1714/56 -f 1362/1715/56 1376/1738/56 1379/1716/56 -f 1356/1717/55 1373/1724/55 1372/1718/55 -f 1364/1720/55 1381/1726/55 1380/1721/55 -f 1357/1723/57 1374/1728/57 1373/1724/57 -f 1365/1725/57 1382/1730/57 1381/1726/57 -f 1359/1727/54 1375/2362/54 1374/1728/54 -f 1367/1729/54 1383/1736/54 1382/1730/54 -f 1358/1719/56 1372/1718/56 1375/1731/56 -f 1352/1733/55 1369/1740/55 1368/1734/55 -f 1366/1735/56 1380/2363/56 1383/1736/56 -f 1360/1737/55 1377/2364/55 1376/1738/55 -f 1353/1739/57 1370/2365/57 1369/1740/57 -f 1396/1741/56 1398/2366/56 1399/1742/56 -f 1403/1744/54 1401/2367/54 1400/1745/54 -f 1407/1747/55 1406/2368/55 1404/1748/55 -f 1442/1750/53 1443/2369/53 1441/1751/53 -f 1441/1753/57 1446/1756/57 1445/1754/57 -f 1446/1756/52 1447/1759/52 1444/1757/52 -f 1442/1758/56 1444/1757/56 1447/1759/56 -f 1448/1761/57 1449/2370/57 1451/1762/57 -f 1440/1764/55 1445/1754/55 1444/1757/55 -f 1443/1766/54 1447/1759/54 1446/1756/54 -f 1417/1768/57 1434/1775/57 1433/1769/57 -f 1411/1771/54 1427/1777/54 1426/1772/54 -f 1419/1774/54 1435/1779/54 1434/1775/54 -f 1410/1776/56 1424/1797/56 1427/1777/56 -f 1418/1778/56 1432/1801/56 1435/1779/56 -f 1412/1780/55 1429/1787/55 1428/1781/55 -f 1420/1783/55 1437/1789/55 1436/1784/55 -f 1413/1786/57 1430/1791/57 1429/1787/57 -f 1421/1788/57 1438/1793/57 1437/1789/57 -f 1415/1790/54 1431/2371/54 1430/1791/54 -f 1423/1792/54 1439/1799/54 1438/1793/54 -f 1414/1782/56 1428/1781/56 1431/1794/56 -f 1408/1796/55 1425/1803/55 1424/1797/55 -f 1422/1798/56 1436/2372/56 1439/1799/56 -f 1416/1800/55 1433/2373/55 1432/1801/55 -f 1409/1802/57 1426/2374/57 1425/1803/57 -f 1452/1804/56 1454/2375/56 1455/1805/56 -f 1459/1807/54 1457/2376/54 1456/1808/54 -f 1463/1810/55 1462/2377/55 1460/1811/55 -f 1493/1819/53 1473/2378/53 1472/1820/53 -f 1470/1822/64 1471/1847/64 1472/1823/64 -f 1484/1825/52 1471/1847/52 1470/1822/52 -f 1483/1826/65 1470/1822/65 1473/1827/65 -f 1475/1829/53 1477/2379/53 1488/1830/53 -f 1480/1832/52 1476/1836/52 1474/1833/52 -f 1475/1835/66 1474/1833/66 1476/1836/66 -f 1479/1834/67 1474/1833/67 1475/1838/67 -f 1487/1840/55 1484/2380/55 1485/1841/55 -f 1488/1843/54 1480/1859/54 1481/1844/54 -f 1487/1846/67 1472/2381/67 1471/1847/67 -f 1488/1848/65 1477/2382/65 1476/1836/65 -f 1492/1849/57 1482/1858/57 1483/1850/57 -f 1491/1852/56 1478/1860/56 1479/1853/56 -f 1487/1857/53 1486/2383/53 1491/2384/53 -f 1491/2384/53 1490/2385/53 1488/1855/53 -f 1488/1855/53 1489/2386/53 1492/1856/53 -f 1492/1856/53 1493/2387/53 1487/1857/53 -f 1487/1857/53 1491/2384/53 1488/1855/53 -f 1478/1860/52 1485/1841/52 1484/2380/52 -f 1484/2380/52 1483/1850/52 1482/1858/52 -f 1482/1858/52 1481/1844/52 1480/1859/52 -f 1480/1859/52 1479/1853/52 1478/1860/52 -f 1478/1860/52 1484/2380/52 1482/1858/52 -f 1489/1845/65 1481/1844/65 1482/1861/65 -f 1486/1842/67 1485/1841/67 1478/1863/67 -f 1549/1865/67 1550/1940/67 1557/1866/67 -f 1505/1868/56 1528/2388/56 1527/1869/56 -f 1546/1871/65 1554/1938/65 1553/1872/65 -f 1557/1876/52 1550/1940/52 1551/2389/52 -f 1551/2389/52 1552/1929/52 1553/1874/52 -f 1553/1874/52 1554/1938/52 1555/1875/52 -f 1555/1875/52 1556/1926/52 1557/1876/52 -f 1557/1876/52 1551/2389/52 1553/1874/52 -f 1548/1879/53 1549/2390/53 1544/2391/53 -f 1544/2391/53 1545/2392/53 1547/1877/53 -f 1547/1877/53 1546/2393/53 1543/1878/53 -f 1543/1878/53 1542/2394/53 1548/1879/53 -f 1548/1879/53 1544/2391/53 1547/1877/53 -f 1500/1880/56 1510/2395/56 1511/1881/56 -f 1506/1883/57 1530/1912/57 1533/1884/57 -f 1508/1885/55 1533/1884/55 1532/1886/55 -f 1509/1888/56 1532/2396/56 1531/1889/56 -f 1495/1891/57 1516/1899/57 1517/1892/57 -f 1494/1893/55 1517/1892/55 1514/1894/55 -f 1503/1870/54 1527/1869/54 1526/1896/54 -f 1497/1898/54 1515/1901/54 1516/1899/54 -f 1496/1900/56 1514/2397/56 1515/1901/56 -f 1498/1902/55 1513/1910/55 1510/1903/55 -f 1504/1905/55 1529/1911/55 1528/1906/55 -f 1501/1882/54 1511/1881/54 1512/1908/54 -f 1499/1909/57 1512/1908/57 1513/1910/57 -f 1502/1897/57 1526/1896/57 1529/1911/57 -f 1507/1890/54 1531/1889/54 1530/1912/54 -f 1539/1913/67 1534/2398/67 1518/1914/67 -f 1540/1916/65 1537/2399/65 1521/1917/65 -f 1520/1919/64 1536/2400/64 1538/1920/64 -f 1519/1922/66 1535/2401/66 1541/1923/66 -f 1544/1925/56 1557/1876/56 1556/1926/56 -f 1543/1928/57 1553/1874/57 1552/1929/57 -f 1547/1931/65 1574/2402/65 1575/1932/65 -f 1548/1934/67 1579/2403/67 1580/1935/67 -f 1547/1937/54 1555/1875/54 1554/1938/54 -f 1548/1939/55 1551/2389/55 1550/1940/55 -f 1559/1943/53 1558/2404/53 1565/2405/53 -f 1565/2405/53 1564/2406/53 1563/1941/53 -f 1563/1941/53 1562/2407/53 1561/1942/53 -f 1561/1942/53 1560/2408/53 1559/1943/53 -f 1559/1943/53 1565/2405/53 1563/1941/53 -f 1573/1946/52 1566/1965/52 1567/1962/52 -f 1567/1962/52 1568/1957/52 1569/1944/52 -f 1569/1944/52 1570/1964/52 1571/1945/52 -f 1571/1945/52 1572/1954/52 1573/1946/52 -f 1573/1946/52 1567/1962/52 1569/1944/52 -f 1562/1947/65 1570/1964/65 1569/1948/65 -f 1558/1950/67 1566/1965/67 1573/1951/67 -f 1565/1953/56 1573/1946/56 1572/1954/56 -f 1561/1956/57 1569/1944/57 1568/1957/57 -f 1564/1959/66 1572/2409/66 1571/1945/66 -f 1560/1961/64 1568/2410/64 1567/1962/64 -f 1563/1960/54 1571/1945/54 1570/1964/54 -f 1559/1963/55 1567/1962/55 1566/1965/55 -f 1556/1966/67 1577/1971/67 1576/1967/67 -f 1576/1969/66 1577/1971/66 1575/1932/66 -f 1555/1933/52 1575/1932/52 1577/1971/52 -f 1576/1972/53 1574/2411/53 1547/1973/53 -f 1552/1975/65 1581/1978/65 1578/1976/65 -f 1551/1936/52 1580/1935/52 1581/1978/52 -f 1581/1978/64 1580/1935/64 1579/1979/64 -f 1542/1981/53 1578/2412/53 1579/1982/53 -f 1583/1984/54 1585/1990/54 1584/1985/54 -f 1586/1987/55 1589/2413/55 1588/1988/55 -f 1585/1990/56 1589/2413/56 1586/1987/56 -f 1582/1986/57 1587/2414/57 1588/1991/57 -f 1583/1984/53 1588/2415/53 1589/1992/53 -f 1584/1985/52 1586/2416/52 1587/1993/52 -f 1596/1994/52 1597/2002/52 1594/1995/52 -f 1593/1997/54 1597/2002/54 1596/1994/54 -f 1590/1999/55 1595/1996/55 1594/1995/55 -f 1592/2001/56 1594/1995/56 1597/2002/56 -f 1591/2004/57 1596/1994/57 1595/1996/57 -f 1606/2006/56 1609/2417/56 1601/2007/56 -f 1601/2007/68 1609/2417/68 1608/2009/68 -f 1603/2011/55 1605/2418/55 1610/2012/55 -f 1608/2009/57 1607/2419/57 1598/2014/57 -f 1603/2011/69 1613/2013/69 1612/2015/69 -f 1604/2017/70 1611/2022/70 1610/2018/70 -f 1607/2020/71 1606/2006/71 1600/2008/71 -f 1602/2016/54 1612/2015/54 1611/2022/54 -f 1615/2023/54 1617/2029/54 1621/2024/54 -f 1614/2026/55 1619/2420/55 1618/2027/55 -f 1616/2028/72 1618/2027/72 1621/2024/72 -f 1615/2023/73 1620/2025/73 1619/2030/73 -f 1624/2032/74 1625/2421/74 1627/2033/74 -f 1622/2035/65 1624/2032/65 1626/2034/65 -f 1623/2037/75 1622/2035/75 1629/2036/75 -f 1625/2039/67 1623/2037/67 1628/2038/67 -f 1717/2041/66 1719/2113/66 1718/2042/66 -f 1636/2050/65 1644/2422/65 1649/2051/65 -f 1639/2053/67 1647/2423/67 1650/2054/67 -f 1648/2056/66 1646/2424/66 1638/2057/66 -f 1651/2059/64 1645/2425/64 1637/2060/64 -f 1655/2062/56 1653/2426/56 1652/2063/56 -f 1659/2065/57 1658/2427/57 1656/2066/57 -f 1660/2068/55 1661/2428/55 1663/2069/55 -f 1664/2071/54 1666/2429/54 1667/2072/54 -f 1671/2074/56 1669/2430/56 1668/2075/56 -f 1675/2077/57 1674/2431/57 1672/2078/57 -f 1676/2080/55 1677/2432/55 1679/2081/55 -f 1680/2083/54 1682/2433/54 1683/2084/54 -f 1687/2086/56 1685/2434/56 1684/2087/56 -f 1691/2089/57 1690/2435/57 1688/2090/57 -f 1692/2092/55 1693/2436/55 1695/2093/55 -f 1696/2095/54 1698/2437/54 1699/2096/54 -f 1703/2098/56 1701/2438/56 1700/2099/56 -f 1707/2101/57 1706/2439/57 1704/2102/57 -f 1708/2104/55 1709/2440/55 1711/2105/55 -f 1712/2107/54 1714/2441/54 1715/2108/54 -f 1720/2110/64 1723/2442/64 1722/2111/64 -f 1719/2113/67 1723/2442/67 1720/2110/67 -f 1716/2043/65 1721/2443/65 1722/2114/65 -f 1717/2041/53 1722/2444/53 1723/2115/53 -f 1718/2042/52 1720/2445/52 1721/2116/52 -f 1730/2117/52 1731/2125/52 1728/2118/52 -f 1727/2120/66 1731/2125/66 1730/2117/66 -f 1724/2122/64 1729/2119/64 1728/2118/64 -f 1726/2124/67 1728/2118/67 1731/2125/67 -f 1725/2127/65 1730/2117/65 1729/2119/65 -f 1740/2129/67 1743/2446/67 1735/2130/67 -f 1735/2130/78 1743/2446/78 1742/2132/78 -f 1737/2134/64 1739/2447/64 1744/2135/64 -f 1742/2132/65 1741/2448/65 1732/2137/65 -f 1737/2134/79 1747/2136/79 1746/2138/79 -f 1738/2140/80 1745/2145/80 1744/2141/80 -f 1741/2143/81 1740/2129/81 1734/2131/81 -f 1736/2139/66 1746/2138/66 1745/2145/66 -f 1749/2146/66 1751/2152/66 1755/2147/66 -f 1748/2149/64 1753/2449/64 1752/2150/64 -f 1750/2151/82 1752/2150/82 1755/2147/82 -f 1749/2146/83 1754/2148/83 1753/2153/83 -f 1757/2155/65 1759/2161/65 1758/2156/65 -f 1760/2158/67 1763/2450/67 1762/2159/67 -f 1759/2161/66 1763/2450/66 1760/2158/66 -f 1756/2157/64 1761/2451/64 1762/2162/64 -f 1757/2155/53 1762/2452/53 1763/2163/53 -f 1756/2157/52 1758/2156/52 1760/2164/52 -f 1770/2166/52 1771/2174/52 1768/2167/52 -f 1767/2169/65 1771/2174/65 1770/2166/65 -f 1764/2171/67 1769/2168/67 1768/2167/67 -f 1766/2173/66 1768/2167/66 1771/2174/66 -f 1765/2176/64 1770/2166/64 1769/2168/64 -f 1780/2178/66 1783/2453/66 1775/2179/66 -f 1775/2179/84 1783/2453/84 1782/2181/84 -f 1777/2183/67 1779/2454/67 1784/2184/67 -f 1782/2181/64 1781/2455/64 1772/2186/64 -f 1777/2183/85 1787/2185/85 1786/2187/85 -f 1778/2189/86 1785/2194/86 1784/2190/86 -f 1781/2192/87 1780/2178/87 1774/2180/87 -f 1776/2188/65 1786/2187/65 1785/2194/65 -f 1789/2195/65 1791/2201/65 1795/2196/65 -f 1788/2198/67 1793/2456/67 1792/2199/67 -f 1791/2201/88 1790/2200/88 1792/2199/88 -f 1789/2195/89 1794/2197/89 1793/2202/89 -f 1797/2204/55 1799/2210/55 1798/2205/55 -f 1800/2207/54 1803/2457/54 1802/2208/54 -f 1799/2210/57 1803/2457/57 1800/2207/57 -f 1796/2206/56 1801/2458/56 1802/2211/56 -f 1797/2204/53 1802/2459/53 1803/2212/53 -f 1798/2205/52 1800/2460/52 1801/2213/52 -f 1810/2214/52 1811/2222/52 1808/2215/52 -f 1807/2217/55 1811/2222/55 1810/2214/55 -f 1804/2219/54 1809/2216/54 1808/2215/54 -f 1806/2221/57 1808/2215/57 1811/2222/57 -f 1805/2224/56 1810/2214/56 1809/2216/56 -f 1820/2226/57 1823/2461/57 1815/2227/57 -f 1815/2227/90 1823/2461/90 1822/2229/90 -f 1817/2231/54 1819/2462/54 1824/2232/54 -f 1822/2229/56 1821/2463/56 1812/2234/56 -f 1817/2231/73 1827/2233/73 1826/2235/73 -f 1818/2237/72 1825/2241/72 1824/2238/72 -f 1812/2240/91 1821/2464/91 1820/2226/91 -f 1816/2236/55 1826/2235/55 1825/2241/55 -f 1829/2242/55 1831/2248/55 1835/2243/55 -f 1828/2245/54 1833/2465/54 1832/2246/54 -f 1830/2247/70 1832/2246/70 1835/2243/70 -f 1829/2242/69 1834/2244/69 1833/2249/69 -f 1837/2251/67 1839/2257/67 1838/2252/67 -f 1840/2254/65 1843/2466/65 1842/2255/65 -f 1839/2257/64 1843/2466/64 1840/2254/64 -f 1836/2253/66 1841/2467/66 1842/2258/66 -f 1837/2251/53 1842/2468/53 1843/2259/53 -f 1836/2253/52 1838/2252/52 1840/2260/52 -f 1850/2262/52 1851/2270/52 1848/2263/52 -f 1847/2265/67 1851/2270/67 1850/2262/67 -f 1844/2267/65 1849/2264/65 1848/2263/65 -f 1846/2269/64 1848/2263/64 1851/2270/64 -f 1845/2272/66 1850/2262/66 1849/2264/66 -f 1860/2274/64 1863/2469/64 1855/2275/64 -f 1855/2275/92 1863/2469/92 1862/2277/92 -f 1857/2279/65 1859/2470/65 1864/2280/65 -f 1862/2277/66 1861/2471/66 1852/2282/66 -f 1857/2279/89 1867/2281/89 1866/2283/89 -f 1858/2285/88 1865/2289/88 1864/2286/88 -f 1852/2288/93 1861/2472/93 1860/2274/93 -f 1856/2284/67 1866/2283/67 1865/2289/67 -f 1869/2290/67 1871/2296/67 1875/2291/67 -f 1868/2293/65 1873/2473/65 1872/2294/65 -f 1871/2296/86 1870/2295/86 1872/2294/86 -f 1869/2290/85 1874/2292/85 1873/2297/85 -f 1877/2299/64 1879/2305/64 1878/2300/64 -f 1880/2302/66 1883/2474/66 1882/2303/66 -f 1879/2305/65 1883/2474/65 1880/2302/65 -f 1876/2301/67 1881/2475/67 1882/2306/67 -f 1877/2299/53 1882/2476/53 1883/2307/53 -f 1878/2300/52 1880/2477/52 1881/2308/52 -f 1885/2309/66 1887/2478/66 1888/2310/66 -f 1885/2309/83 1891/2311/83 1890/2312/83 -f 1886/2314/82 1889/2317/82 1888/2315/82 -f 1884/2313/64 1890/2312/64 1889/2317/64 -f 1893/2318/64 1895/2324/64 1899/2319/64 -f 1892/2321/66 1897/2479/66 1896/2322/66 -f 1894/2323/80 1896/2322/80 1899/2319/80 -f 1893/2318/79 1898/2320/79 1897/2325/79 -o Huge_Rope -v 0.375000 5.500000 2.500000 -v 0.198223 5.573223 2.500000 -v 0.125000 5.750000 2.500000 -v 0.198223 5.926777 2.500000 -v 0.375000 6.000000 2.500000 -v 0.551777 5.926777 2.500000 -v 0.625000 5.750000 2.500000 -v 0.551777 5.573223 2.500000 -v 0.375000 5.500000 1.000000 -v 0.198223 5.573223 1.000000 -v 0.125000 5.750000 1.000000 -v 0.198223 5.926777 1.000000 -v 0.375000 6.000000 1.000000 -v 0.551777 5.926777 1.000000 -v 0.625000 5.750000 1.000000 -v 0.551777 5.573223 1.000000 -v -0.375000 5.500000 2.500000 -v -0.551777 5.573223 2.500000 -v -0.625000 5.750000 2.500000 -v -0.551777 5.926777 2.500000 -v -0.375000 6.000000 2.500000 -v -0.198223 5.926777 2.500000 -v -0.125000 5.750000 2.500000 -v -0.198223 5.573223 2.500000 -v -0.375000 5.500000 1.000000 -v -0.551777 5.573223 1.000000 -v -0.625000 5.750000 1.000000 -v -0.551777 5.926777 1.000000 -v -0.375000 6.000000 1.000000 -v -0.198223 5.926777 1.000000 -v -0.125000 5.750000 1.000000 -v -0.198223 5.573223 1.000000 -v 0.375000 10.000000 2.250000 -v 0.198223 10.073223 2.250000 -v 0.125000 10.250000 2.250000 -v 0.198223 10.426777 2.250000 -v 0.375000 10.500000 2.250000 -v 0.551777 10.426777 2.250000 -v 0.625000 10.250000 2.250000 -v 0.551777 10.073223 2.250000 -v 0.375000 10.000000 0.750000 -v 0.198223 10.073223 0.750000 -v 0.125000 10.250000 0.750000 -v 0.198223 10.426777 0.750000 -v 0.375000 10.500000 0.750000 -v 0.551777 10.426777 0.750000 -v 0.625000 10.250000 0.750000 -v 0.551777 10.073223 0.750000 -v -0.375000 10.000000 2.250000 -v -0.551777 10.073223 2.250000 -v -0.625000 10.250000 2.250000 -v -0.551777 10.426777 2.250000 -v -0.375000 10.500000 2.250000 -v -0.198223 10.426777 2.250000 -v -0.125000 10.250000 2.250000 -v -0.198223 10.073223 2.250000 -v -0.375000 10.000000 0.750000 -v -0.551777 10.073223 0.750000 -v -0.625000 10.250000 0.750000 -v -0.551777 10.426777 0.750000 -v -0.375000 10.500000 0.750000 -v -0.198223 10.426777 0.750000 -v -0.125000 10.250000 0.750000 -v -0.198223 10.073223 0.750000 -vt 0.538961 0.500000 -vt 0.529221 0.625000 -vt 0.529221 0.500000 -vt 0.519481 0.625000 -vt 0.519481 0.500000 -vt 0.587662 0.500000 -vt 0.577922 0.625000 -vt 0.577922 0.500000 -vt 0.597403 0.625000 -vt 0.587662 0.625000 -vt 0.568182 0.500000 -vt 0.558442 0.625000 -vt 0.558442 0.500000 -vt 0.548701 0.500000 -vt 0.538961 0.625000 -vt 0.568182 0.625000 -vt 0.548701 0.625000 -vt 0.616883 0.500000 -vt 0.607143 0.625000 -vt 0.607143 0.500000 -vt 0.597403 0.625000 -vt 0.597403 0.500000 -vt 0.665585 0.500000 -vt 0.655844 0.625000 -vt 0.655844 0.500000 -vt 0.675325 0.625000 -vt 0.665585 0.625000 -vt 0.646104 0.500000 -vt 0.636364 0.625000 -vt 0.636364 0.500000 -vt 0.626623 0.500000 -vt 0.616883 0.625000 -vt 0.646104 0.625000 -vt 0.626623 0.625000 -vt 0.538961 0.500000 -vt 0.529221 0.625000 -vt 0.529221 0.500000 -vt 0.519481 0.625000 -vt 0.519481 0.500000 -vt 0.587662 0.500000 -vt 0.577922 0.625000 -vt 0.577922 0.500000 -vt 0.597403 0.625000 -vt 0.587662 0.625000 -vt 0.568182 0.500000 -vt 0.558442 0.625000 -vt 0.558442 0.500000 -vt 0.548701 0.500000 -vt 0.538961 0.625000 -vt 0.568182 0.625000 -vt 0.548701 0.625000 -vt 0.616883 0.500000 -vt 0.607143 0.625000 -vt 0.607143 0.500000 -vt 0.597403 0.625000 -vt 0.597403 0.500000 -vt 0.665585 0.500000 -vt 0.655844 0.625000 -vt 0.655844 0.500000 -vt 0.675325 0.625000 -vt 0.665585 0.625000 -vt 0.646104 0.500000 -vt 0.636364 0.625000 -vt 0.636364 0.500000 -vt 0.626623 0.500000 -vt 0.616883 0.625000 -vt 0.646104 0.625000 -vt 0.626623 0.625000 -vt 0.597403 0.500000 -vt 0.675325 0.500000 -vt 0.597403 0.500000 -vt 0.675325 0.500000 -vn -1.0000 -0.0000 0.0000 -vn -0.7071 -0.7071 0.0000 -vn -0.0000 -1.0000 0.0000 -vn 0.7071 -0.7071 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.7071 0.7071 0.0000 -vn -0.0000 1.0000 0.0000 -vn -0.7071 0.7071 0.0000 -s 1 -f 1902/2480/94 1909/2481/95 1901/2482/95 -f 1901/2482/95 1908/2483/96 1900/2484/96 -f 1907/2485/97 1914/2486/98 1906/2487/98 -f 1907/2485/97 1908/2488/96 1915/2489/97 -f 1905/2490/99 1912/2491/100 1904/2492/100 -f 1903/2493/101 1910/2494/94 1902/2480/94 -f 1906/2487/98 1913/2495/99 1905/2490/99 -f 1904/2492/100 1911/2496/101 1903/2493/101 -f 1918/2497/94 1925/2498/95 1917/2499/95 -f 1917/2499/95 1924/2500/96 1916/2501/96 -f 1923/2502/97 1930/2503/98 1922/2504/98 -f 1923/2502/97 1924/2505/96 1931/2506/97 -f 1921/2507/99 1928/2508/100 1920/2509/100 -f 1919/2510/101 1926/2511/94 1918/2497/94 -f 1922/2504/98 1929/2512/99 1921/2507/99 -f 1920/2509/100 1927/2513/101 1919/2510/101 -f 1934/2514/94 1941/2515/95 1933/2516/95 -f 1933/2516/95 1940/2517/96 1932/2518/96 -f 1939/2519/97 1946/2520/98 1938/2521/98 -f 1939/2519/97 1940/2522/96 1947/2523/97 -f 1937/2524/99 1944/2525/100 1936/2526/100 -f 1935/2527/101 1942/2528/94 1934/2514/94 -f 1938/2521/98 1945/2529/99 1937/2524/99 -f 1936/2526/100 1943/2530/101 1935/2527/101 -f 1950/2531/94 1957/2532/95 1949/2533/95 -f 1949/2533/95 1956/2534/96 1948/2535/96 -f 1955/2536/97 1962/2537/98 1954/2538/98 -f 1955/2536/97 1956/2539/96 1963/2540/97 -f 1953/2541/99 1960/2542/100 1952/2543/100 -f 1951/2544/101 1958/2545/94 1950/2531/94 -f 1954/2538/98 1961/2546/99 1953/2541/99 -f 1952/2543/100 1959/2547/101 1951/2544/101 -f 1902/2480/94 1910/2494/94 1909/2481/95 -f 1901/2482/95 1909/2481/95 1908/2483/96 -f 1907/2485/97 1915/2489/97 1914/2486/98 -f 1907/2485/97 1900/2548/96 1908/2488/96 -f 1905/2490/99 1913/2495/99 1912/2491/100 -f 1903/2493/101 1911/2496/101 1910/2494/94 -f 1906/2487/98 1914/2486/98 1913/2495/99 -f 1904/2492/100 1912/2491/100 1911/2496/101 -f 1918/2497/94 1926/2511/94 1925/2498/95 -f 1917/2499/95 1925/2498/95 1924/2500/96 -f 1923/2502/97 1931/2506/97 1930/2503/98 -f 1923/2502/97 1916/2549/96 1924/2505/96 -f 1921/2507/99 1929/2512/99 1928/2508/100 -f 1919/2510/101 1927/2513/101 1926/2511/94 -f 1922/2504/98 1930/2503/98 1929/2512/99 -f 1920/2509/100 1928/2508/100 1927/2513/101 -f 1934/2514/94 1942/2528/94 1941/2515/95 -f 1933/2516/95 1941/2515/95 1940/2517/96 -f 1939/2519/97 1947/2523/97 1946/2520/98 -f 1939/2519/97 1932/2550/96 1940/2522/96 -f 1937/2524/99 1945/2529/99 1944/2525/100 -f 1935/2527/101 1943/2530/101 1942/2528/94 -f 1938/2521/98 1946/2520/98 1945/2529/99 -f 1936/2526/100 1944/2525/100 1943/2530/101 -f 1950/2531/94 1958/2545/94 1957/2532/95 -f 1949/2533/95 1957/2532/95 1956/2534/96 -f 1955/2536/97 1963/2540/97 1962/2537/98 -f 1955/2536/97 1948/2551/96 1956/2539/96 -f 1953/2541/99 1961/2546/99 1960/2542/100 -f 1951/2544/101 1959/2547/101 1958/2545/94 -f 1954/2538/98 1962/2537/98 1961/2546/99 -f 1952/2543/100 1960/2542/100 1959/2547/101 -o Huge_Pivot -v 0.562500 1.500000 -2.812500 -v 0.937500 1.500000 -2.812500 -v 0.562500 1.500000 -3.187500 -v 0.937500 1.500000 -3.187500 -v -0.937500 1.500000 -2.812500 -v -0.562500 1.500000 -2.812500 -v -0.937500 1.500000 -3.187500 -v -0.562500 1.500000 -3.187500 -v 0.562500 2.000000 -1.812500 -v 0.937500 2.000000 -1.812500 -v 0.562500 2.000000 -2.187500 -v 0.937500 2.000000 -2.187500 -v -0.937500 2.000000 -1.812500 -v -0.562500 2.000000 -1.812500 -v -0.937500 2.000000 -2.187500 -v -0.562500 2.000000 -2.187500 -v 0.562500 3.500000 -3.187500 -v 0.562500 3.500000 -2.812500 -v 0.937500 3.500000 -2.812500 -v 0.937500 3.500000 -3.187500 -v -0.937500 3.500000 -3.187500 -v -0.937500 3.500000 -2.812500 -v -0.562500 3.500000 -2.812500 -v -0.562500 3.500000 -3.187500 -v 0.562500 3.500000 -2.187500 -v 0.562500 3.500000 -1.812500 -v 0.937500 3.500000 -1.812500 -v 0.937500 3.500000 -2.187500 -v -0.937500 3.500000 -2.187500 -v -0.937500 3.500000 -1.812500 -v -0.562500 3.500000 -1.812500 -v -0.562500 3.500000 -2.187500 -v 0.625000 3.500000 -2.875000 -v 0.875000 3.500000 -2.875000 -v 0.625000 3.500000 -3.125000 -v 0.875000 3.500000 -3.125000 -v 0.625000 4.500000 -3.125000 -v 0.625000 4.500000 -2.875000 -v 0.875000 4.500000 -2.875000 -v 0.875000 4.500000 -3.125000 -v 0.625000 3.500000 -1.875000 -v 0.875000 3.500000 -1.875000 -v 0.625000 3.500000 -2.125000 -v 0.875000 3.500000 -2.125000 -v 0.625000 4.500000 -2.125000 -v 0.625000 4.500000 -1.875000 -v 0.875000 4.500000 -1.875000 -v 0.875000 4.500000 -2.125000 -v -0.875000 3.500000 -2.875000 -v -0.625000 3.500000 -2.875000 -v -0.875000 3.500000 -3.125000 -v -0.625000 3.500000 -3.125000 -v -0.875000 4.500000 -3.125000 -v -0.875000 4.500000 -2.875000 -v -0.625000 4.500000 -2.875000 -v -0.625000 4.500000 -3.125000 -v -0.875000 3.500000 -1.875000 -v -0.625000 3.500000 -1.875000 -v -0.875000 3.500000 -2.125000 -v -0.625000 3.500000 -2.125000 -v -0.875000 4.500000 -2.125000 -v -0.875000 4.500000 -1.875000 -v -0.625000 4.500000 -1.875000 -v -0.625000 4.500000 -2.125000 -v 0.750000 2.000000 -2.187500 -v 0.750000 3.500000 -2.187500 -v 0.750000 2.000000 -2.812500 -v 0.750000 3.500000 -2.812500 -v -0.750000 2.000000 -2.187500 -v -0.750000 3.500000 -2.187500 -v -0.750000 2.000000 -2.812500 -v -0.750000 3.500000 -2.812500 -v 0.562500 2.000000 -2.000000 -v -0.562500 2.000000 -2.000000 -v 0.562500 3.500000 -2.000000 -v -0.562500 3.500000 -2.000000 -v 0.562500 2.000000 -3.000000 -v -0.562500 2.000000 -3.000000 -v 0.562500 3.500000 -3.000000 -v -0.562500 3.500000 -3.000000 -v 0.750000 2.000000 -2.187500 -v 0.750000 3.500000 -2.187500 -v 0.750000 2.000000 -2.812500 -v 0.750000 3.500000 -2.812500 -v -0.750000 2.000000 -2.187500 -v -0.750000 3.500000 -2.187500 -v -0.750000 2.000000 -2.812500 -v -0.750000 3.500000 -2.812500 -v 0.562500 2.000000 -2.000000 -v -0.562500 2.000000 -2.000000 -v 0.562500 3.500000 -2.000000 -v -0.562500 3.500000 -2.000000 -v 0.562500 2.000000 -3.000000 -v -0.562500 2.000000 -3.000000 -v 0.562500 3.500000 -3.000000 -v -0.562500 3.500000 -3.000000 -vt 0.168831 0.541667 -vt 0.155844 0.625000 -vt 0.155844 0.541667 -vt 0.142857 0.541667 -vt 0.129870 0.625000 -vt 0.129870 0.541667 -vt 0.051948 0.708333 -vt 0.071429 0.739583 -vt 0.051948 0.739583 -vt 0.051948 0.708333 -vt 0.071429 0.739583 -vt 0.051948 0.739583 -vt 0.051948 0.739583 -vt 0.071429 0.708333 -vt 0.071429 0.739583 -vt 0.051948 0.739583 -vt 0.071429 0.708333 -vt 0.071429 0.739583 -vt 0.071429 0.541667 -vt 0.051948 0.708333 -vt 0.051948 0.541667 -vt 0.110390 0.541667 -vt 0.090909 0.708333 -vt 0.090909 0.541667 -vt 0.071429 0.541667 -vt 0.051948 0.708333 -vt 0.051948 0.541667 -vt 0.110390 0.541667 -vt 0.090909 0.708333 -vt 0.090909 0.541667 -vt 0.129870 0.541667 -vt 0.110390 0.708333 -vt 0.129870 0.541667 -vt 0.110390 0.708333 -vt 0.051948 0.739583 -vt 0.071429 0.708333 -vt 0.071429 0.739583 -vt 0.051948 0.739583 -vt 0.071429 0.708333 -vt 0.071429 0.739583 -vt 0.110390 0.583333 -vt 0.090909 0.708333 -vt 0.090909 0.583333 -vt 0.129870 0.583333 -vt 0.110390 0.708333 -vt 0.110390 0.583333 -vt 0.090909 0.583333 -vt 0.071429 0.583333 -vt 0.129870 0.583333 -vt 0.110390 0.708333 -vt 0.071429 0.583333 -vt 0.051948 0.708333 -vt 0.051948 0.583333 -vt 0.090909 0.708333 -vt 0.051948 0.708333 -vt 0.051948 0.583333 -vt 0.142857 0.541667 -vt 0.129870 0.625000 -vt 0.129870 0.541667 -vt 0.168831 0.541667 -vt 0.155844 0.625000 -vt 0.155844 0.541667 -vt 0.181818 0.541667 -vt 0.168831 0.625000 -vt 0.142857 0.625000 -vt 0.181818 0.541667 -vt 0.168831 0.625000 -vt 0.142857 0.625000 -vt 0.168831 0.541667 -vt 0.155844 0.625000 -vt 0.155844 0.541667 -vt 0.142857 0.541667 -vt 0.129870 0.625000 -vt 0.129870 0.541667 -vt 0.142857 0.541667 -vt 0.129870 0.625000 -vt 0.129870 0.541667 -vt 0.168831 0.541667 -vt 0.155844 0.625000 -vt 0.155844 0.541667 -vt 0.181818 0.541667 -vt 0.168831 0.625000 -vt 0.142857 0.625000 -vt 0.181818 0.541667 -vt 0.168831 0.625000 -vt 0.142857 0.625000 -vt 0.240260 0.541667 -vt 0.272727 0.666667 -vt 0.240260 0.666667 -vt 0.240260 0.666667 -vt 0.272727 0.541667 -vt 0.272727 0.666667 -vt 0.181818 0.541667 -vt 0.240260 0.666667 -vt 0.181818 0.666667 -vt 0.181818 0.666667 -vt 0.240260 0.541667 -vt 0.240260 0.666667 -vt 0.272727 0.666667 -vt 0.240260 0.541667 -vt 0.240260 0.666667 -vt 0.272727 0.541667 -vt 0.240260 0.666667 -vt 0.272727 0.666667 -vt 0.240260 0.666667 -vt 0.181818 0.541667 -vt 0.181818 0.666667 -vt 0.240260 0.541667 -vt 0.181818 0.666667 -vt 0.240260 0.666667 -vt 0.071429 0.708333 -vt 0.071429 0.708333 -vt 0.129870 0.708333 -vt 0.129870 0.708333 -vt 0.129870 0.708333 -vt 0.129870 0.708333 -vt 0.181818 0.625000 -vt 0.181818 0.625000 -vt 0.181818 0.625000 -vt 0.181818 0.625000 -vt 0.272727 0.541667 -vt 0.240260 0.541667 -vt 0.240260 0.541667 -vt 0.181818 0.541667 -vt 0.272727 0.541667 -vt 0.240260 0.541667 -vt 0.240260 0.541667 -vt 0.181818 0.541667 -vn 0.0000 0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -s off -f 2005/2552/102 2009/2553/102 2004/2554/102 -f 2006/2555/103 2011/2556/103 2007/2557/103 -f 1974/2558/104 1973/2559/104 1972/2560/104 -f 1978/2561/104 1977/2562/104 1976/2563/104 -f 1982/2564/105 1980/2565/105 1981/2566/105 -f 1986/2567/105 1984/2568/105 1985/2569/105 -f 1970/2570/103 1987/2571/103 1971/2572/103 -f 1969/2573/102 1985/2574/102 1968/2575/102 -f 1966/2576/103 1983/2577/103 1967/2578/103 -f 1965/2579/102 1981/2580/102 1964/2581/102 -f 1971/2582/106 1986/2583/106 1969/2573/106 -f 1968/2575/107 1984/2568/107 1970/2570/107 -f 1967/2584/106 1982/2585/106 1965/2579/106 -f 1964/2581/107 1980/2565/107 1966/2576/107 -f 1990/2586/105 1988/2587/105 1989/2588/105 -f 1994/2589/105 1992/2590/105 1993/2591/105 -f 1973/2592/102 1989/2593/102 1972/2594/102 -f 1979/2595/106 1994/2596/106 1977/2597/106 -f 1976/2598/107 1992/2590/107 1978/2599/107 -f 1975/2600/106 1990/2601/106 1973/2592/106 -f 1972/2594/107 1988/2587/107 1974/2602/107 -f 1978/2599/103 1995/2603/103 1979/2604/103 -f 1977/2597/102 1993/2605/102 1976/2598/102 -f 1974/2602/103 1991/2606/103 1975/2607/103 -f 1998/2608/103 2003/2609/103 1999/2610/103 -f 1997/2611/102 2001/2612/102 1996/2613/102 -f 1999/2614/106 2002/2615/106 1997/2611/106 -f 1996/2613/107 2000/2616/107 1998/2608/107 -f 2007/2617/106 2010/2618/106 2005/2552/106 -f 2004/2554/107 2008/2619/107 2006/2555/107 -f 2021/2620/102 2025/2621/102 2020/2622/102 -f 2022/2623/103 2027/2624/103 2023/2625/103 -f 2014/2626/103 2019/2627/103 2015/2628/103 -f 2013/2629/102 2017/2630/102 2012/2631/102 -f 2015/2632/106 2018/2633/106 2013/2629/106 -f 2012/2631/107 2016/2634/107 2014/2626/107 -f 2023/2635/106 2026/2636/106 2021/2620/106 -f 2020/2622/107 2024/2637/107 2022/2623/107 -f 2028/2638/106 2031/2639/106 2029/2640/106 -f 2035/2641/107 2032/2642/107 2033/2643/107 -f 2037/2644/102 2038/2645/102 2039/2646/102 -f 2042/2647/103 2041/2648/103 2043/2649/103 -f 2047/2650/107 2044/2651/107 2045/2652/107 -f 2048/2653/106 2051/2654/106 2049/2655/106 -f 2054/2656/103 2053/2657/103 2055/2658/103 -f 2057/2659/102 2058/2660/102 2059/2661/102 -f 2005/2552/102 2010/2618/102 2009/2553/102 -f 2006/2555/103 2008/2619/103 2011/2556/103 -f 1974/2558/104 1975/2662/104 1973/2559/104 -f 1978/2561/104 1979/2663/104 1977/2562/104 -f 1982/2564/105 1983/2577/105 1980/2565/105 -f 1986/2567/105 1987/2571/105 1984/2568/105 -f 1970/2570/103 1984/2568/103 1987/2571/103 -f 1969/2573/102 1986/2583/102 1985/2574/102 -f 1966/2576/103 1980/2565/103 1983/2577/103 -f 1965/2579/102 1982/2585/102 1981/2580/102 -f 1971/2582/106 1987/2664/106 1986/2583/106 -f 1968/2575/107 1985/2574/107 1984/2568/107 -f 1967/2584/106 1983/2665/106 1982/2585/106 -f 1964/2581/107 1981/2580/107 1980/2565/107 -f 1990/2586/105 1991/2606/105 1988/2587/105 -f 1994/2589/105 1995/2603/105 1992/2590/105 -f 1973/2592/102 1990/2601/102 1989/2593/102 -f 1979/2595/106 1995/2666/106 1994/2596/106 -f 1976/2598/107 1993/2605/107 1992/2590/107 -f 1975/2600/106 1991/2667/106 1990/2601/106 -f 1972/2594/107 1989/2593/107 1988/2587/107 -f 1978/2599/103 1992/2590/103 1995/2603/103 -f 1977/2597/102 1994/2596/102 1993/2605/102 -f 1974/2602/103 1988/2587/103 1991/2606/103 -f 1998/2608/103 2000/2616/103 2003/2609/103 -f 1997/2611/102 2002/2615/102 2001/2612/102 -f 1999/2614/106 2003/2668/106 2002/2615/106 -f 1996/2613/107 2001/2612/107 2000/2616/107 -f 2007/2617/106 2011/2669/106 2010/2618/106 -f 2004/2554/107 2009/2553/107 2008/2619/107 -f 2021/2620/102 2026/2636/102 2025/2621/102 -f 2022/2623/103 2024/2637/103 2027/2624/103 -f 2014/2626/103 2016/2634/103 2019/2627/103 -f 2013/2629/102 2018/2633/102 2017/2630/102 -f 2015/2632/106 2019/2670/106 2018/2633/106 -f 2012/2631/107 2017/2630/107 2016/2634/107 -f 2023/2635/106 2027/2671/106 2026/2636/106 -f 2020/2622/107 2025/2621/107 2024/2637/107 -f 2028/2638/106 2030/2672/106 2031/2639/106 -f 2035/2641/107 2034/2673/107 2032/2642/107 -f 2037/2644/102 2036/2674/102 2038/2645/102 -f 2042/2647/103 2040/2675/103 2041/2648/103 -f 2047/2650/107 2046/2676/107 2044/2651/107 -f 2048/2653/106 2050/2677/106 2051/2654/106 -f 2054/2656/103 2052/2678/103 2053/2657/103 -f 2057/2659/102 2056/2679/102 2058/2660/102 -o Huge_Erector -v 0.562500 3.500000 -3.187500 -v 0.562500 3.500000 -2.812500 -v 0.937500 3.500000 -2.812500 -v 0.937500 3.500000 -3.187500 -v 0.562500 14.500000 -3.187500 -v 0.562500 14.500000 -2.812500 -v 0.937500 14.500000 -2.812500 -v 0.937500 14.500000 -3.187500 -v 0.937500 5.750000 -1.812500 -v -0.937500 5.750000 -1.812500 -v 0.937500 6.125000 -1.812500 -v -0.937500 6.125000 -1.812500 -v 0.937500 5.750000 -0.812500 -v -0.937500 5.750000 -0.812500 -v 0.937500 6.125000 -0.812500 -v -0.937500 6.125000 -0.812500 -v 0.562500 5.750000 -1.187500 -v -0.562500 5.750000 -1.187500 -v 0.562500 6.125000 -1.187500 -v -0.562500 6.125000 -1.187500 -v 0.937500 8.750000 -1.812500 -v -0.937500 8.750000 -1.812500 -v 0.937500 9.125000 -1.812500 -v -0.937500 9.125000 -1.812500 -v 0.937500 8.750000 -0.562500 -v -0.937500 8.750000 -0.562500 -v 0.937500 9.125000 -0.562500 -v -0.937500 9.125000 -0.562500 -v 0.562500 8.750000 -0.937500 -v -0.562500 8.750000 -0.937500 -v 0.562500 9.125000 -0.937500 -v -0.562500 9.125000 -0.937500 -v 0.937500 10.750000 -1.812500 -v -0.937500 10.750000 -1.812500 -v 0.937500 11.125000 -1.812500 -v -0.937500 11.125000 -1.812500 -v 0.937500 10.750000 -0.562500 -v -0.937500 10.750000 -0.562500 -v 0.937500 11.125000 -0.562500 -v -0.937500 11.125000 -0.562500 -v 0.562500 10.750000 -0.937500 -v -0.562500 10.750000 -0.937500 -v 0.562500 11.125000 -0.937500 -v -0.562500 11.125000 -0.937500 -v -0.562500 10.812500 -1.812500 -v 0.562500 10.812500 -1.812500 -v -0.562500 11.062500 -1.812500 -v 0.562500 11.062500 -1.812500 -v -0.562500 11.062500 -2.062500 -v -0.562500 10.812500 -2.062500 -v 0.562500 10.812500 -2.062500 -v 0.562500 11.062500 -2.062500 -v -0.562500 8.812500 -1.812500 -v 0.562500 8.812500 -1.812500 -v -0.562500 9.062500 -1.812500 -v 0.562500 9.062500 -1.812500 -v -0.562500 9.062500 -2.062500 -v -0.562500 8.812500 -2.062500 -v 0.562500 8.812500 -2.062500 -v 0.562500 9.062500 -2.062500 -v -0.562500 5.812500 -1.812500 -v 0.562500 5.812500 -1.812500 -v -0.562500 6.062500 -1.812500 -v 0.562500 6.062500 -1.812500 -v -0.562500 6.062500 -2.062500 -v -0.562500 5.812500 -2.062500 -v 0.562500 5.812500 -2.062500 -v 0.562500 6.062500 -2.062500 -v 0.750000 3.500000 -2.187500 -v 0.750000 3.500000 -2.812500 -v -0.750000 3.500000 -2.187500 -v -0.750000 3.500000 -2.812500 -v 0.562500 3.500000 -2.000000 -v -0.562500 3.500000 -2.000000 -v 0.562500 3.500000 -3.000000 -v -0.562500 3.500000 -3.000000 -v 0.750000 14.500000 -2.187500 -v 0.750000 14.500000 -2.812500 -v -0.750000 14.500000 -2.187500 -v -0.750000 14.500000 -2.812500 -v 0.562500 14.500000 -2.000000 -v -0.562500 14.500000 -2.000000 -v 0.562500 14.500000 -3.000000 -v -0.562500 14.500000 -3.000000 -v 0.562500 3.500000 -2.187500 -v 0.562500 3.500000 -1.812500 -v 0.937500 3.500000 -1.812500 -v 0.937500 3.500000 -2.187500 -v 0.562500 14.500000 -2.187500 -v 0.562500 14.500000 -1.812500 -v 0.937500 14.500000 -1.812500 -v 0.937500 14.500000 -2.187500 -v -0.937500 3.500000 -3.187500 -v -0.937500 3.500000 -2.812500 -v -0.562500 3.500000 -2.812500 -v -0.562500 3.500000 -3.187500 -v -0.937500 14.500000 -3.187500 -v -0.937500 14.500000 -2.812500 -v -0.562500 14.500000 -2.812500 -v -0.562500 14.500000 -3.187500 -v -0.937500 3.500000 -2.187500 -v -0.937500 3.500000 -1.812500 -v -0.562500 3.500000 -1.812500 -v -0.562500 3.500000 -2.187500 -v -0.937500 14.500000 -2.187500 -v -0.937500 14.500000 -1.812500 -v -0.562500 14.500000 -1.812500 -v -0.562500 14.500000 -2.187500 -v 0.750000 3.500000 -2.187500 -v 0.750000 3.500000 -2.812500 -v -0.750000 3.500000 -2.187500 -v -0.750000 3.500000 -2.812500 -v 0.562500 3.500000 -2.000000 -v -0.562500 3.500000 -2.000000 -v 0.562500 3.500000 -3.000000 -v -0.562500 3.500000 -3.000000 -v 0.750000 14.500000 -2.187500 -v 0.750000 14.500000 -2.812500 -v -0.750000 14.500000 -2.187500 -v -0.750000 14.500000 -2.812500 -v 0.562500 14.500000 -2.000000 -v -0.562500 14.500000 -2.000000 -v 0.562500 14.500000 -3.000000 -v -0.562500 14.500000 -3.000000 -vt 0.850649 0.031250 -vt 0.831169 -0.000000 -vt 0.850649 -0.000000 -vt 0.831169 0.979167 -vt 0.850649 0.947917 -vt 0.850649 0.979167 -vt 0.870130 0.031250 -vt 0.889610 0.031250 -vt 0.870130 0.947917 -vt 0.909091 0.031250 -vt 0.889610 0.947917 -vt 0.831169 0.947917 -vt 0.831169 0.031250 -vt 0.136364 0.739583 -vt 0.038961 0.770833 -vt 0.038961 0.739583 -vt 0.116883 0.875000 -vt 0.136364 0.906250 -vt 0.116883 0.906250 -vt 0.155844 0.791667 -vt 0.136364 0.875000 -vt 0.136364 0.791667 -vt 0.038961 0.791667 -vt 0.136364 0.791667 -vt 0.058442 0.843750 -vt 0.038961 0.791667 -vt 0.019481 0.875000 -vt 0.019481 0.791667 -vt 0.058442 0.843750 -vt 0.038961 0.875000 -vt 0.058442 0.906250 -vt 0.038961 0.906250 -vt 0.058442 0.875000 -vt 0.136364 0.739583 -vt 0.038961 0.770833 -vt 0.038961 0.739583 -vt 0.116883 0.875000 -vt 0.136364 0.906250 -vt 0.116883 0.906250 -vt 0.155844 0.770833 -vt 0.136364 0.875000 -vt 0.136364 0.770833 -vt 0.038961 0.770833 -vt 0.136364 0.770833 -vt 0.058442 0.843750 -vt 0.019481 0.875000 -vt 0.019481 0.770833 -vt 0.058442 0.843750 -vt 0.038961 0.875000 -vt 0.058442 0.906250 -vt 0.038961 0.906250 -vt 0.058442 0.875000 -vt 0.136364 0.739583 -vt 0.038961 0.770833 -vt 0.038961 0.739583 -vt 0.116883 0.875000 -vt 0.136364 0.906250 -vt 0.116883 0.906250 -vt 0.155844 0.770833 -vt 0.136364 0.875000 -vt 0.136364 0.770833 -vt 0.038961 0.770833 -vt 0.136364 0.770833 -vt 0.058442 0.843750 -vt 0.019481 0.875000 -vt 0.019481 0.770833 -vt 0.058442 0.843750 -vt 0.038961 0.875000 -vt 0.058442 0.906250 -vt 0.038961 0.906250 -vt 0.058442 0.875000 -vt 0.967532 0.916667 -vt 0.909091 0.937500 -vt 0.909091 0.916667 -vt 0.967532 0.958333 -vt 0.909091 0.937500 -vt 0.967532 0.937500 -vt 0.909091 0.979167 -vt 0.967532 0.979167 -vt 0.967532 0.916667 -vt 0.909091 0.916667 -vt 0.909091 0.979167 -vt 0.967532 0.958333 -vt 0.967532 0.979167 -vt 0.967532 0.937500 -vt 0.967532 0.916667 -vt 0.909091 0.937500 -vt 0.909091 0.916667 -vt 0.909091 0.979167 -vt 0.967532 0.958333 -vt 0.967532 0.979167 -vt 0.967532 0.937500 -vt 0.967532 0.000000 -vt 0.909091 0.916667 -vt 0.909091 -0.000000 -vt 1.000000 0.916667 -vt 0.967532 -0.000000 -vt 1.000000 -0.000000 -vt 0.967532 0.916667 -vt 0.909091 -0.000000 -vt 0.967532 0.000000 -vt 1.000000 -0.000000 -vt 0.967532 0.916667 -vt 0.967532 -0.000000 -vt 0.850649 0.031250 -vt 0.831169 -0.000000 -vt 0.850649 -0.000000 -vt 0.831169 0.979167 -vt 0.850649 0.947917 -vt 0.850649 0.979167 -vt 0.870130 0.031250 -vt 0.889610 0.031250 -vt 0.870130 0.947917 -vt 0.909091 0.031250 -vt 0.889610 0.947917 -vt 0.831169 0.947917 -vt 0.831169 0.031250 -vt 0.850649 0.031250 -vt 0.831169 -0.000000 -vt 0.850649 -0.000000 -vt 0.831169 0.979167 -vt 0.850649 0.947917 -vt 0.850649 0.979167 -vt 0.870130 0.031250 -vt 0.889610 0.031250 -vt 0.870130 0.947917 -vt 0.909091 0.031250 -vt 0.889610 0.947917 -vt 0.831169 0.947917 -vt 0.831169 0.031250 -vt 0.850649 0.031250 -vt 0.831169 -0.000000 -vt 0.850649 -0.000000 -vt 0.831169 0.979167 -vt 0.850649 0.947917 -vt 0.850649 0.979167 -vt 0.870130 0.031250 -vt 0.889610 0.031250 -vt 0.870130 0.947917 -vt 0.909091 0.031250 -vt 0.889610 0.947917 -vt 0.831169 0.947917 -vt 0.831169 0.031250 -vt 0.909091 0.916667 -vt 0.967532 0.000000 -vt 0.909091 -0.000000 -vt 0.967532 -0.000000 -vt 1.000000 0.916667 -vt 1.000000 -0.000000 -vt 0.909091 -0.000000 -vt 0.967532 0.916667 -vt 0.967532 0.000000 -vt 0.967532 0.916667 -vt 1.000000 -0.000000 -vt 0.967532 -0.000000 -vt 0.909091 0.947917 -vt 0.136364 0.770833 -vt 0.155844 0.875000 -vt 0.136364 0.875000 -vt 0.116883 0.843750 -vt 0.038961 0.875000 -vt 0.116883 0.843750 -vt 0.155844 0.875000 -vt 0.136364 0.875000 -vt 0.116883 0.843750 -vt 0.038961 0.875000 -vt 0.116883 0.843750 -vt 0.155844 0.875000 -vt 0.136364 0.875000 -vt 0.116883 0.843750 -vt 0.038961 0.875000 -vt 0.116883 0.843750 -vt 0.909091 0.958333 -vt 0.909091 0.958333 -vt 0.909091 0.958333 -vt 0.967532 0.916667 -vt 0.967532 0.916667 -vt 0.909091 0.916667 -vt 1.000000 0.916667 -vt 0.909091 0.947917 -vt 0.909091 0.947917 -vt 0.909091 0.947917 -vt 0.967532 0.916667 -vt 0.967532 0.916667 -vt 0.909091 0.916667 -vt 1.000000 0.916667 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.7071 0.0000 0.7071 -vn -0.7071 0.0000 0.7071 -s off -f 2060/2680/108 2062/2681/108 2061/2682/108 -f 2066/2683/109 2064/2684/109 2065/2685/109 -f 2061/2686/110 2064/2684/110 2060/2680/110 -f 2062/2687/111 2065/2688/111 2061/2686/111 -f 2063/2689/112 2066/2690/112 2062/2687/112 -f 2060/2680/113 2067/2691/113 2063/2692/113 -f 2069/2693/113 2070/2694/113 2068/2695/113 -f 2079/2696/114 2073/2697/114 2077/2698/114 -f 2069/2699/110 2075/2700/110 2071/2701/110 -f 2069/2702/108 2068/2703/108 2077/2704/108 -f 2070/2705/112 2072/2706/112 2068/2707/112 -f 2070/2705/109 2071/2701/109 2078/2708/109 -f 2074/2709/115 2076/2710/115 2072/2711/115 -f 2078/2712/111 2077/2698/111 2076/2710/111 -f 2081/2713/113 2082/2714/113 2080/2715/113 -f 2091/2716/114 2085/2717/114 2089/2718/114 -f 2081/2719/110 2087/2720/110 2083/2721/110 -f 2081/2722/108 2080/2723/108 2089/2724/108 -f 2082/2714/112 2084/2725/112 2080/2726/112 -f 2082/2714/109 2083/2721/109 2090/2727/109 -f 2086/2728/115 2088/2729/115 2084/2730/115 -f 2090/2731/111 2089/2718/111 2088/2729/111 -f 2093/2732/113 2094/2733/113 2092/2734/113 -f 2103/2735/114 2097/2736/114 2101/2737/114 -f 2093/2738/110 2099/2739/110 2095/2740/110 -f 2093/2741/108 2092/2742/108 2101/2743/108 -f 2094/2733/112 2096/2744/112 2092/2745/112 -f 2094/2733/109 2095/2740/109 2102/2746/109 -f 2098/2747/115 2100/2748/115 2096/2749/115 -f 2102/2750/111 2101/2737/111 2100/2748/111 -f 2112/2751/108 2118/2752/108 2113/2753/108 -f 2108/2754/113 2110/2755/113 2109/2756/113 -f 2107/2757/109 2108/2754/109 2106/2758/109 -f 2104/2759/108 2110/2755/108 2105/2760/108 -f 2115/2761/109 2116/2762/109 2114/2763/109 -f 2116/2762/113 2118/2752/113 2117/2764/113 -f 2120/2765/108 2126/2766/108 2121/2767/108 -f 2123/2768/109 2124/2769/109 2122/2770/109 -f 2124/2769/113 2126/2766/113 2125/2771/113 -f 2135/2772/113 2142/2773/113 2134/2774/113 -f 2138/2775/110 2131/2776/110 2130/2777/110 -f 2140/2778/111 2133/2779/111 2132/2780/111 -f 2129/2781/112 2136/2782/112 2128/2783/112 -f 2144/2784/108 2146/2785/108 2145/2786/108 -f 2150/2787/109 2148/2788/109 2149/2789/109 -f 2145/2790/110 2148/2788/110 2144/2784/110 -f 2146/2791/111 2149/2792/111 2145/2790/111 -f 2147/2793/112 2150/2794/112 2146/2791/112 -f 2144/2784/113 2151/2795/113 2147/2796/113 -f 2152/2797/108 2154/2798/108 2153/2799/108 -f 2158/2800/109 2156/2801/109 2157/2802/109 -f 2153/2803/110 2156/2801/110 2152/2797/110 -f 2154/2804/111 2157/2805/111 2153/2803/111 -f 2155/2806/112 2158/2807/112 2154/2804/112 -f 2152/2797/113 2159/2808/113 2155/2809/113 -f 2160/2810/108 2162/2811/108 2161/2812/108 -f 2166/2813/109 2164/2814/109 2165/2815/109 -f 2161/2816/110 2164/2814/110 2160/2810/110 -f 2162/2817/111 2165/2818/111 2161/2816/111 -f 2163/2819/112 2166/2820/112 2162/2817/112 -f 2160/2810/113 2167/2821/113 2163/2822/113 -f 2182/2823/111 2175/2824/111 2174/2825/111 -f 2171/2826/112 2178/2827/112 2170/2828/112 -f 2173/2829/113 2180/2830/113 2172/2831/113 -f 2176/2832/110 2169/2833/110 2168/2834/110 -f 2060/2680/108 2063/2692/108 2062/2681/108 -f 2066/2683/109 2067/2691/109 2064/2684/109 -f 2061/2686/110 2065/2688/110 2064/2684/110 -f 2062/2687/111 2066/2690/111 2065/2688/111 -f 2063/2689/112 2067/2835/112 2066/2690/112 -f 2060/2680/113 2064/2684/113 2067/2691/113 -f 2069/2693/113 2071/2836/113 2070/2694/113 -f 2079/2696/114 2075/2700/114 2073/2697/114 -f 2069/2699/110 2073/2837/110 2075/2700/110 -f 2068/2703/108 2072/2838/108 2076/2839/108 -f 2077/2704/108 2073/2840/108 2069/2702/108 -f 2068/2703/108 2076/2839/108 2077/2704/108 -f 2070/2705/112 2074/2709/112 2072/2706/112 -f 2071/2701/109 2075/2700/109 2079/2841/109 -f 2078/2708/109 2074/2709/109 2070/2705/109 -f 2071/2701/109 2079/2841/109 2078/2708/109 -f 2074/2709/115 2078/2712/115 2076/2710/115 -f 2078/2712/111 2079/2696/111 2077/2698/111 -f 2081/2713/113 2083/2721/113 2082/2714/113 -f 2091/2716/114 2087/2720/114 2085/2717/114 -f 2081/2719/110 2085/2842/110 2087/2720/110 -f 2080/2723/108 2084/2843/108 2088/2844/108 -f 2089/2724/108 2085/2845/108 2081/2722/108 -f 2080/2723/108 2088/2844/108 2089/2724/108 -f 2082/2714/112 2086/2728/112 2084/2725/112 -f 2083/2721/109 2087/2720/109 2091/2846/109 -f 2090/2727/109 2086/2728/109 2082/2714/109 -f 2083/2721/109 2091/2846/109 2090/2727/109 -f 2086/2728/115 2090/2731/115 2088/2729/115 -f 2090/2731/111 2091/2716/111 2089/2718/111 -f 2093/2732/113 2095/2740/113 2094/2733/113 -f 2103/2735/114 2099/2739/114 2097/2736/114 -f 2093/2738/110 2097/2847/110 2099/2739/110 -f 2092/2742/108 2096/2848/108 2100/2849/108 -f 2101/2743/108 2097/2850/108 2093/2741/108 -f 2092/2742/108 2100/2849/108 2101/2743/108 -f 2094/2733/112 2098/2747/112 2096/2744/112 -f 2095/2740/109 2099/2739/109 2103/2851/109 -f 2102/2746/109 2098/2747/109 2094/2733/109 -f 2095/2740/109 2103/2851/109 2102/2746/109 -f 2098/2747/115 2102/2750/115 2100/2748/115 -f 2102/2750/111 2103/2735/111 2101/2737/111 -f 2112/2751/108 2117/2764/108 2118/2752/108 -f 2108/2754/113 2111/2852/113 2110/2755/113 -f 2107/2757/109 2111/2852/109 2108/2754/109 -f 2104/2759/108 2109/2756/108 2110/2755/108 -f 2115/2761/109 2119/2853/109 2116/2762/109 -f 2116/2762/113 2119/2853/113 2118/2752/113 -f 2120/2765/108 2125/2771/108 2126/2766/108 -f 2123/2768/109 2127/2854/109 2124/2769/109 -f 2124/2769/113 2127/2854/113 2126/2766/113 -f 2135/2772/113 2143/2855/113 2142/2773/113 -f 2138/2775/110 2139/2856/110 2131/2776/110 -f 2140/2778/111 2141/2857/111 2133/2779/111 -f 2129/2781/112 2137/2858/112 2136/2782/112 -f 2144/2784/108 2147/2796/108 2146/2785/108 -f 2150/2787/109 2151/2795/109 2148/2788/109 -f 2145/2790/110 2149/2792/110 2148/2788/110 -f 2146/2791/111 2150/2794/111 2149/2792/111 -f 2147/2793/112 2151/2859/112 2150/2794/112 -f 2144/2784/113 2148/2788/113 2151/2795/113 -f 2152/2797/108 2155/2809/108 2154/2798/108 -f 2158/2800/109 2159/2808/109 2156/2801/109 -f 2153/2803/110 2157/2805/110 2156/2801/110 -f 2154/2804/111 2158/2807/111 2157/2805/111 -f 2155/2806/112 2159/2860/112 2158/2807/112 -f 2152/2797/113 2156/2801/113 2159/2808/113 -f 2160/2810/108 2163/2822/108 2162/2811/108 -f 2166/2813/109 2167/2821/109 2164/2814/109 -f 2161/2816/110 2165/2818/110 2164/2814/110 -f 2162/2817/111 2166/2820/111 2165/2818/111 -f 2163/2819/112 2167/2861/112 2166/2820/112 -f 2160/2810/113 2164/2814/113 2167/2821/113 -f 2182/2823/111 2183/2862/111 2175/2824/111 -f 2171/2826/112 2179/2863/112 2178/2827/112 -f 2173/2829/113 2181/2864/113 2180/2830/113 -f 2176/2832/110 2177/2865/110 2169/2833/110 -o Huge_Pad -v -1.250000 2.000000 1.250000 -v 1.250000 2.000000 1.250000 -v -1.250000 2.000000 -1.250000 -v 1.250000 2.000000 -1.250000 -v -2.500000 2.000000 2.500000 -v 2.500000 2.000000 2.500000 -v -2.500000 2.000000 -2.500000 -v 2.500000 2.000000 -2.500000 -v -2.500000 1.500000 2.500000 -v 2.500000 1.500000 2.500000 -v -2.500000 1.500000 -2.500000 -v 2.500000 1.500000 -2.500000 -v -3.000000 1.500000 3.000000 -v 3.000000 1.500000 3.000000 -v -3.000000 1.500000 -3.000000 -v 3.000000 1.500000 -3.000000 -v -3.000000 1.000000 3.000000 -v 3.000000 1.000000 3.000000 -v -3.000000 1.000000 -3.000000 -v 3.000000 1.000000 -3.000000 -v -0.500000 1.000000 0.500000 -v 0.500000 1.000000 0.500000 -v -0.500000 1.000000 -0.500000 -v 0.500000 1.000000 -0.500000 -v -1.250000 2.000000 1.250000 -v 1.250000 2.000000 1.250000 -v -1.250000 2.000000 -1.250000 -v 1.250000 2.000000 -1.250000 -v -1.500000 1.000000 -2.500000 -v 1.500000 1.000000 -2.500000 -v -1.500000 1.000000 -3.500000 -v 1.500000 1.000000 -3.500000 -v -1.500000 2.000000 -3.500000 -v -1.500000 2.000000 -2.500000 -v 1.500000 2.000000 -2.500000 -v 1.500000 2.000000 -3.500000 -v -2.000000 1.000000 4.000000 -v 2.000000 1.000000 4.000000 -v -2.000000 1.000000 2.500000 -v 2.000000 1.000000 2.500000 -v -2.000000 2.000000 2.500000 -v -2.000000 2.000000 4.000000 -v 2.000000 2.000000 4.000000 -v 2.000000 2.000000 2.500000 -v 0.812500 2.000000 3.687500 -v 1.187500 2.000000 3.687500 -v 0.812500 2.000000 3.312500 -v 1.187500 2.000000 3.312500 -v -1.187500 2.000000 3.687500 -v -0.812500 2.000000 3.687500 -v -1.187500 2.000000 3.312500 -v -0.812500 2.000000 3.312500 -v 0.812500 2.000000 2.187500 -v 1.187500 2.000000 2.187500 -v 0.812500 2.000000 1.812500 -v 1.187500 2.000000 1.812500 -v -1.187500 2.000000 2.187500 -v -0.812500 2.000000 2.187500 -v -1.187500 2.000000 1.812500 -v -0.812500 2.000000 1.812500 -v 0.812500 8.000000 3.312500 -v 0.812500 8.000000 3.687500 -v 1.187500 8.000000 3.687500 -v 1.187500 8.000000 3.312500 -v -1.187500 8.000000 3.312500 -v -1.187500 8.000000 3.687500 -v -0.812500 8.000000 3.687500 -v -0.812500 8.000000 3.312500 -v 0.812500 8.000000 1.812500 -v 0.812500 8.000000 2.187500 -v 1.187500 8.000000 2.187500 -v 1.187500 8.000000 1.812500 -v -1.187500 8.000000 1.812500 -v -1.187500 8.000000 2.187500 -v -0.812500 8.000000 2.187500 -v -0.812500 8.000000 1.812500 -v -1.500000 8.000000 4.000000 -v 1.500000 8.000000 4.000000 -v -1.500000 8.000000 1.500000 -v 1.500000 8.000000 1.500000 -v -1.500000 8.250000 1.500000 -v -1.500000 8.250000 4.000000 -v 1.500000 8.250000 4.000000 -v 1.500000 8.250000 1.500000 -v 0.812500 8.250000 2.187500 -v 1.187500 8.250000 2.187500 -v 0.812500 8.250000 1.812500 -v 1.187500 8.250000 1.812500 -v -1.187500 8.250000 2.187500 -v -0.812500 8.250000 2.187500 -v -1.187500 8.250000 1.812500 -v -0.812500 8.250000 1.812500 -v 0.812500 14.250000 1.812500 -v 0.812500 14.250000 2.187500 -v 1.187500 14.250000 2.187500 -v 1.187500 14.250000 1.812500 -v -1.187500 14.250000 1.812500 -v -1.187500 14.250000 2.187500 -v -0.812500 14.250000 2.187500 -v -0.812500 14.250000 1.812500 -v 0.812500 8.250000 3.187500 -v 1.187500 8.250000 3.187500 -v 0.812500 8.250000 2.812500 -v 1.187500 8.250000 2.812500 -v -1.187500 8.250000 3.187500 -v -0.812500 8.250000 3.187500 -v -1.187500 8.250000 2.812500 -v -0.812500 8.250000 2.812500 -v 0.812500 14.250000 2.812500 -v 0.812500 14.250000 3.187500 -v 1.187500 14.250000 3.187500 -v 1.187500 14.250000 2.812500 -v -1.187500 14.250000 2.812500 -v -1.187500 14.250000 3.187500 -v -0.812500 14.250000 3.187500 -v -0.812500 14.250000 2.812500 -v 0.812500 2.000000 2.000000 -v -0.812500 2.000000 2.000000 -v 0.812500 8.000000 2.000000 -v -0.812500 8.000000 2.000000 -v 0.812500 2.000000 3.500000 -v -0.812500 2.000000 3.500000 -v 0.812500 8.000000 3.500000 -v -0.812500 8.000000 3.500000 -v -1.000000 2.000000 3.312500 -v -1.000000 2.000000 2.187500 -v -1.000000 8.000000 3.312500 -v -1.000000 8.000000 2.187500 -v 1.000000 2.000000 3.312500 -v 1.000000 2.000000 2.187500 -v 1.000000 8.000000 3.312500 -v 1.000000 8.000000 2.187500 -v 0.812500 8.250000 2.000000 -v -0.812500 8.250000 2.000000 -v 0.812500 14.250000 2.000000 -v -0.812500 14.250000 2.000000 -v 0.812500 8.250000 3.000000 -v -0.812500 8.250000 3.000000 -v 0.812500 14.250000 3.000000 -v -0.812500 14.250000 3.000000 -v -1.000000 8.250000 2.187500 -v -1.000000 14.250000 2.187500 -v -1.000000 8.250000 2.812500 -v -1.000000 14.250000 2.812500 -v 1.000000 8.250000 2.187500 -v 1.000000 14.250000 2.187500 -v 1.000000 8.250000 2.812500 -v 1.000000 14.250000 2.812500 -v -1.500000 14.250000 3.500000 -v 1.500000 14.250000 3.500000 -v -1.500000 14.250000 1.500000 -v 1.500000 14.250000 1.500000 -v -1.500000 14.500000 1.500000 -v -1.500000 14.500000 3.500000 -v 1.500000 14.500000 3.500000 -v 1.500000 14.500000 1.500000 -v 0.375000 2.000000 2.250000 -v 0.198223 2.000000 2.323223 -v 0.125000 2.000000 2.500000 -v 0.198223 2.000000 2.676777 -v 0.375000 2.000000 2.750000 -v 0.551777 2.000000 2.676777 -v 0.625000 2.000000 2.500000 -v 0.551777 2.000000 2.323223 -v 0.375000 10.000000 2.250000 -v 0.198223 10.000000 2.323223 -v 0.125000 10.000000 2.500000 -v 0.198223 10.000000 2.676777 -v 0.375000 10.000000 2.750000 -v 0.551777 10.000000 2.676777 -v 0.625000 10.000000 2.500000 -v 0.551777 10.000000 2.323223 -v 0.198223 10.051777 2.301777 -v 0.125000 10.176777 2.426777 -v 0.198223 10.301777 2.551777 -v 0.375000 10.353554 2.603553 -v 0.551777 10.301777 2.551777 -v 0.625000 10.176777 2.426777 -v 0.551777 10.051777 2.301777 -v 0.198223 10.073223 2.250000 -v 0.125000 10.250000 2.250000 -v 0.198223 10.426777 2.250000 -v 0.375000 10.500000 2.250000 -v 0.551777 10.426777 2.250000 -v 0.625000 10.250000 2.250000 -v 0.551777 10.073223 2.250000 -v -0.375000 2.000000 2.250000 -v -0.551777 2.000000 2.323223 -v -0.625000 2.000000 2.500000 -v -0.551777 2.000000 2.676777 -v -0.375000 2.000000 2.750000 -v -0.198223 2.000000 2.676777 -v -0.125000 2.000000 2.500000 -v -0.198223 2.000000 2.323223 -v -0.375000 10.000000 2.250000 -v -0.551777 10.000000 2.323223 -v -0.625000 10.000000 2.500000 -v -0.551777 10.000000 2.676777 -v -0.375000 10.000000 2.750000 -v -0.198223 10.000000 2.676777 -v -0.125000 10.000000 2.500000 -v -0.198223 10.000000 2.323223 -v -0.551777 10.051777 2.301777 -v -0.625000 10.176777 2.426777 -v -0.551777 10.301777 2.551777 -v -0.375000 10.353554 2.603553 -v -0.198223 10.301777 2.551777 -v -0.125000 10.176777 2.426777 -v -0.198223 10.051777 2.301777 -v -0.551777 10.073223 2.250000 -v -0.625000 10.250000 2.250000 -v -0.551777 10.426777 2.250000 -v -0.375000 10.500000 2.250000 -v -0.198223 10.426777 2.250000 -v -0.125000 10.250000 2.250000 -v -0.198223 10.073223 2.250000 -v 0.812500 2.000000 2.000000 -v -0.812500 2.000000 2.000000 -v 0.812500 8.000000 2.000000 -v -0.812500 8.000000 2.000000 -v 0.812500 2.000000 3.500000 -v -0.812500 2.000000 3.500000 -v 0.812500 8.000000 3.500000 -v -0.812500 8.000000 3.500000 -v -1.000000 2.000000 3.312500 -v -1.000000 2.000000 2.187500 -v -1.000000 8.000000 3.312500 -v -1.000000 8.000000 2.187500 -v 1.000000 2.000000 3.312500 -v 1.000000 2.000000 2.187500 -v 1.000000 8.000000 3.312500 -v 1.000000 8.000000 2.187500 -v 0.812500 8.250000 2.000000 -v -0.812500 8.250000 2.000000 -v 0.812500 14.250000 2.000000 -v -0.812500 14.250000 2.000000 -v 0.812500 8.250000 3.000000 -v -0.812500 8.250000 3.000000 -v 0.812500 14.250000 3.000000 -v -0.812500 14.250000 3.000000 -v -1.000000 8.250000 2.187500 -v -1.000000 14.250000 2.187500 -v -1.000000 8.250000 2.812500 -v -1.000000 14.250000 2.812500 -v 1.000000 8.250000 2.187500 -v 1.000000 14.250000 2.187500 -v 1.000000 8.250000 2.812500 -v 1.000000 14.250000 2.812500 -vt 0.155844 0.875000 -vt 0.285714 0.666667 -vt 0.285714 0.875000 -vt 0.090909 0.437500 -vt 0.025974 0.125000 -vt 0.090909 0.229167 -vt 0.220779 0.437500 -vt 0.025974 0.541667 -vt 0.220779 0.229167 -vt 0.285714 0.541667 -vt 0.285714 0.125000 -vt 0.025974 0.125000 -vt 0.285714 0.083333 -vt 0.285714 0.125000 -vt 0.025974 0.125000 -vt 0.285714 0.083333 -vt 0.285714 0.125000 -vt 0.285714 0.083333 -vt 0.025974 0.125000 -vt 0.285714 0.083333 -vt 0.285714 0.125000 -vt 0.025974 0.083333 -vt 0.311688 0.041667 -vt 0.025974 0.083333 -vt 0.311688 0.041667 -vt 0.025974 0.083333 -vt 0.311688 0.041667 -vt 0.025974 0.083333 -vt 0.311688 0.041667 -vt -0.000000 0.041667 -vt 0.311688 -0.000000 -vt 0.000000 0.041667 -vt 0.311688 0.000000 -vt 0.000000 0.041667 -vt 0.311688 0.000000 -vt 0.000000 0.041667 -vt 0.311688 0.000000 -vt 0.129870 0.291667 -vt 0.129870 0.375000 -vt 0.181818 0.375000 -vt 0.181818 0.291667 -vt 0.441558 0.625000 -vt 0.493506 0.875000 -vt 0.441558 0.875000 -vt 0.545455 0.875000 -vt 0.493506 0.625000 -vt 0.545455 0.625000 -vt 0.493506 0.541667 -vt 0.441558 0.541667 -vt 0.441558 0.958333 -vt 0.493506 0.958333 -vt 0.337662 0.083333 -vt 0.415584 0.416667 -vt 0.337662 0.416667 -vt 0.415584 -0.000000 -vt 0.337662 -0.000000 -vt 0.337662 0.500000 -vt 0.415584 0.500000 -vt 0.285714 0.083333 -vt 0.285714 0.416667 -vt 0.324675 0.500000 -vt 0.305195 1.000000 -vt 0.305195 0.500000 -vt 0.344156 0.500000 -vt 0.324675 1.000000 -vt 0.324675 0.500000 -vt 0.344156 0.500000 -vt 0.324675 1.000000 -vt 0.363636 0.500000 -vt 0.344156 1.000000 -vt 0.344156 0.500000 -vt 0.363636 0.500000 -vt 0.344156 1.000000 -vt 0.344156 0.500000 -vt 0.305195 0.500000 -vt 0.285714 1.000000 -vt 0.285714 0.500000 -vt 0.305195 0.500000 -vt 0.285714 1.000000 -vt 0.285714 0.500000 -vt 0.324675 0.500000 -vt 0.305195 1.000000 -vt 0.324675 0.500000 -vt 0.305195 1.000000 -vt 0.324675 1.000000 -vt 0.363636 0.500000 -vt 0.344156 1.000000 -vt 0.324675 1.000000 -vt 0.363636 0.500000 -vt 0.344156 1.000000 -vt 0.305195 0.500000 -vt 0.285714 1.000000 -vt 0.285714 0.500000 -vt 0.285714 1.000000 -vt 0.285714 0.500000 -vt 0.305195 1.000000 -vt 0.675325 0.750000 -vt 0.545455 1.000000 -vt 0.545455 0.750000 -vt 0.545455 0.750000 -vt 0.675325 1.000000 -vt 0.545455 1.000000 -vt 0.688312 1.000000 -vt 0.675325 0.750000 -vt 0.688312 0.750000 -vt 0.688312 1.000000 -vt 0.675325 0.750000 -vt 0.688312 0.750000 -vt 0.675325 0.729167 -vt 0.545455 0.729167 -vt 0.675325 0.729167 -vt 0.545455 0.750000 -vt 0.545455 0.729167 -vt 0.402597 0.500000 -vt 0.383117 1.000000 -vt 0.383117 0.500000 -vt 0.422078 0.500000 -vt 0.402597 1.000000 -vt 0.441558 0.500000 -vt 0.422078 1.000000 -vt 0.422078 0.500000 -vt 0.383117 0.500000 -vt 0.363636 1.000000 -vt 0.363636 0.500000 -vt 0.402597 0.500000 -vt 0.383117 1.000000 -vt 0.402597 1.000000 -vt 0.441558 0.500000 -vt 0.422078 1.000000 -vt 0.363636 1.000000 -vt 0.363636 0.500000 -vt 0.402597 0.500000 -vt 0.383117 1.000000 -vt 0.383117 0.500000 -vt 0.422078 0.500000 -vt 0.402597 1.000000 -vt 0.441558 0.500000 -vt 0.422078 1.000000 -vt 0.422078 0.500000 -vt 0.383117 0.500000 -vt 0.363636 1.000000 -vt 0.363636 0.500000 -vt 0.402597 0.500000 -vt 0.383117 1.000000 -vt 0.402597 1.000000 -vt 0.441558 0.500000 -vt 0.422078 1.000000 -vt 0.363636 1.000000 -vt 0.363636 0.500000 -vt 0.792208 0.750000 -vt 0.688312 1.000000 -vt 0.688312 0.750000 -vt 0.415584 0.500000 -vt 0.500000 0.000000 -vt 0.500000 0.500000 -vt 0.415584 0.000000 -vt 0.500000 0.500000 -vt 0.415584 0.500000 -vt 0.500000 0.000000 -vt 0.558442 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.558442 0.000000 -vt 0.558442 0.500000 -vt 0.558442 0.500000 -vt 0.642857 0.000000 -vt 0.642857 0.500000 -vt 0.558442 0.000000 -vt 0.642857 0.500000 -vt 0.558442 0.500000 -vt 0.642857 0.000000 -vt 0.675325 0.500000 -vt 0.642857 0.500000 -vt 0.642857 0.500000 -vt 0.675325 0.000000 -vt 0.675325 0.500000 -vt 0.688312 0.750000 -vt 0.792208 1.000000 -vt 0.688312 1.000000 -vt 0.805195 1.000000 -vt 0.792208 0.750000 -vt 0.805195 0.750000 -vt 0.805195 1.000000 -vt 0.792208 0.750000 -vt 0.805195 0.750000 -vt 0.792208 0.729167 -vt 0.688312 0.729167 -vt 0.792208 0.729167 -vt 0.688312 0.750000 -vt 0.688312 0.729167 -vt 0.636364 0.625272 -vt 0.645427 0.631294 -vt 0.627300 0.660373 -vt 0.662338 0.624730 -vt 0.671640 0.630911 -vt 0.653036 0.660756 -vt 0.500000 0.000000 -vt 0.415584 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.415584 0.000000 -vt 0.415584 0.500000 -vt 0.558442 0.500000 -vt 0.500000 0.000000 -vt 0.500000 0.500000 -vt 0.558442 0.000000 -vt 0.500000 0.500000 -vt 0.558442 0.500000 -vt 0.642857 0.000000 -vt 0.558442 0.500000 -vt 0.642857 0.500000 -vt 0.642857 0.500000 -vt 0.558442 0.000000 -vt 0.558442 0.500000 -vt 0.675325 0.500000 -vt 0.642857 0.000000 -vt 0.642857 0.500000 -vt 0.675325 0.000000 -vt 0.642857 0.500000 -vt 0.675325 0.500000 -vt 0.155844 0.666667 -vt -0.000000 -0.000000 -vt -0.000000 -0.000000 -vt -0.000000 -0.000000 -vt -0.000000 -0.000000 -vt 0.415584 0.083333 -vt 0.363636 1.000000 -vt 0.363636 1.000000 -vt 0.363636 1.000000 -vt 0.363636 1.000000 -vt 0.675325 1.000000 -vt 0.675325 1.000000 -vt 0.441558 1.000000 -vt 0.441558 1.000000 -vt 0.441558 1.000000 -vt 0.441558 1.000000 -vt 0.792208 1.000000 -vt 0.415584 0.000000 -vt 0.500000 0.000000 -vt 0.558442 0.000000 -vt 0.500000 0.000000 -vt 0.558442 0.000000 -vt 0.642857 0.000000 -vt 0.675325 0.000000 -vt 0.642857 0.000000 -vt 0.792208 1.000000 -vt 0.649182 0.645834 -vt 0.645427 0.660374 -vt 0.636364 0.666396 -vt 0.623546 0.645834 -vt 0.627300 0.631294 -vt 0.675493 0.645833 -vt 0.671640 0.660756 -vt 0.662338 0.666937 -vt 0.649182 0.645833 -vt 0.653035 0.630911 -vt 0.415584 0.000000 -vt 0.500000 0.000000 -vt 0.558442 0.000000 -vt 0.500000 0.000000 -vt 0.558442 0.000000 -vt 0.642857 0.000000 -vt 0.675325 0.000000 -vt 0.642857 0.000000 -vt 0.724026 -0.000000 -vt 0.714286 0.666667 -vt 0.714286 0.000000 -vt 0.704545 -0.000000 -vt 0.694805 0.666667 -vt 0.694805 0.000000 -vt 0.685065 0.000000 -vt 0.675325 0.666667 -vt 0.675325 -0.000000 -vt 0.753247 0.000000 -vt 0.743506 0.666667 -vt 0.743506 -0.000000 -vt 0.733766 -0.000000 -vt 0.724026 0.666667 -vt 0.704545 0.666667 -vt 0.685065 0.666667 -vt 0.733766 0.666667 -vt 0.724026 0.671875 -vt 0.733766 0.697917 -vt 0.724026 0.697917 -vt 0.704545 0.671875 -vt 0.714286 0.697917 -vt 0.704545 0.697917 -vt 0.685065 0.692708 -vt 0.694805 0.697917 -vt 0.685065 0.697917 -vt 0.733766 0.682292 -vt 0.743506 0.697917 -vt 0.694805 0.682292 -vt 0.704545 0.723958 -vt 0.694805 0.713542 -vt 0.685065 0.703125 -vt 0.733766 0.713542 -vt 0.724026 0.723958 -vt 0.714286 0.729167 -vt 0.743506 0.692708 -vt 0.753247 0.697917 -vt 0.743506 0.703125 -vt 0.675325 0.697917 -vt 0.801948 0.000000 -vt 0.792208 0.666667 -vt 0.792208 0.000000 -vt 0.782468 0.000000 -vt 0.772727 0.666667 -vt 0.772727 0.000000 -vt 0.762987 -0.000000 -vt 0.753247 0.666667 -vt 0.753247 0.000000 -vt 0.831169 0.000000 -vt 0.821429 0.666667 -vt 0.821429 -0.000000 -vt 0.811688 -0.000000 -vt 0.801948 0.666667 -vt 0.782468 0.666667 -vt 0.762987 0.666667 -vt 0.811688 0.666667 -vt 0.801948 0.671875 -vt 0.811688 0.697917 -vt 0.801948 0.697917 -vt 0.782468 0.697917 -vt 0.782468 0.671875 -vt 0.772727 0.682292 -vt 0.762987 0.697917 -vt 0.762987 0.692708 -vt 0.821429 0.692708 -vt 0.811688 0.682292 -vt 0.792208 0.697917 -vt 0.772727 0.697917 -vt 0.782468 0.723958 -vt 0.772727 0.713542 -vt 0.762987 0.703125 -vt 0.821429 0.697917 -vt 0.811688 0.713542 -vt 0.801948 0.723958 -vt 0.792208 0.729167 -vt 0.831169 0.697917 -vt 0.821429 0.703125 -vt 0.753247 0.697917 -vt 0.753247 0.666667 -vt 0.831169 0.666667 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.6000 -0.8000 -vn 0.8000 0.6000 0.0000 -vn 0.0000 0.6000 0.8000 -vn -0.8000 0.6000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.7071 0.0000 0.7071 -vn 0.0000 0.1866 0.9824 -vn -0.7071 0.0000 0.7071 -vn -0.9987 0.0196 0.0473 -vn -0.7071 0.0000 -0.7071 -vn -0.0000 -0.1944 -0.9809 -vn 0.7263 -0.1363 -0.6737 -vn 0.7071 0.0000 -0.7071 -vn 0.6794 0.1448 0.7194 -vn -0.6794 0.1448 0.7194 -vn -0.7263 -0.1363 -0.6737 -vn 0.9987 0.0196 0.0473 -vn 0.9955 0.0671 0.0671 -vn 0.6630 0.5294 0.5294 -vn -0.0000 0.7071 0.7071 -vn -0.6630 0.5294 0.5294 -vn -0.9955 0.0671 0.0671 -vn -0.7574 -0.4617 -0.4617 -vn 0.7574 -0.4617 -0.4617 -vn -0.6333 0.7150 0.2962 -vn -0.9947 0.0948 0.0393 -vn -0.7311 -0.6303 -0.2611 -vn 0.9947 0.0948 0.0393 -vn 0.6333 0.7150 0.2962 -vn 0.0000 0.9239 0.3827 -vn 0.7311 -0.6303 -0.2611 -s off -f 2208/2866/116 2211/2867/116 2210/2868/116 -f 2184/2869/116 2189/2870/116 2185/2871/116 -f 2186/2872/116 2188/2873/116 2184/2869/116 -f 2187/2874/116 2190/2875/116 2186/2872/116 -f 2185/2871/116 2191/2876/116 2187/2874/116 -f 2191/2877/117 2194/2878/117 2190/2879/117 -f 2188/2880/118 2193/2881/118 2189/2882/118 -f 2189/2870/119 2195/2883/119 2191/2876/119 -f 2190/2884/120 2192/2885/120 2188/2886/120 -f 2193/2887/116 2199/2888/116 2195/2883/116 -f 2192/2889/116 2197/2890/116 2193/2881/116 -f 2194/2891/116 2196/2892/116 2192/2885/116 -f 2195/2893/116 2198/2894/116 2194/2878/116 -f 2197/2895/119 2203/2896/119 2199/2888/119 -f 2198/2897/120 2200/2898/120 2196/2892/120 -f 2199/2899/117 2202/2900/117 2198/2894/117 -f 2196/2901/118 2201/2902/118 2197/2890/118 -f 2205/2903/121 2184/2869/121 2185/2871/121 -f 2204/2904/122 2186/2872/122 2184/2869/122 -f 2206/2905/123 2187/2874/123 2186/2872/123 -f 2207/2906/124 2185/2871/124 2187/2874/124 -f 2218/2907/116 2216/2908/116 2217/2909/116 -f 2214/2910/117 2219/2911/117 2215/2912/117 -f 2215/2913/119 2218/2907/119 2213/2914/119 -f 2212/2915/120 2216/2908/120 2214/2916/120 -f 2226/2917/116 2224/2918/116 2225/2919/116 -f 2223/2920/119 2226/2917/119 2221/2921/119 -f 2220/2922/120 2224/2918/120 2222/2923/120 -f 2221/2924/118 2225/2919/118 2220/2925/118 -f 2239/2926/119 2254/2927/119 2237/2928/119 -f 2230/2929/117 2247/2930/117 2231/2931/117 -f 2238/2932/117 2255/2933/117 2239/2926/117 -f 2232/2934/120 2248/2935/120 2234/2936/120 -f 2240/2937/120 2256/2938/120 2242/2939/120 -f 2233/2940/118 2249/2941/118 2232/2942/118 -f 2241/2943/118 2257/2944/118 2240/2945/118 -f 2235/2946/119 2250/2947/119 2233/2940/119 -f 2243/2948/119 2258/2949/119 2241/2943/119 -f 2234/2936/117 2251/2950/117 2235/2946/117 -f 2228/2951/120 2244/2952/120 2230/2929/120 -f 2242/2939/117 2259/2953/117 2243/2948/117 -f 2236/2954/120 2252/2955/120 2238/2932/120 -f 2229/2956/118 2245/2957/118 2228/2958/118 -f 2237/2928/118 2253/2959/118 2236/2960/118 -f 2231/2931/119 2246/2961/119 2229/2956/119 -f 2262/2962/125 2261/2963/125 2260/2964/125 -f 2266/2965/116 2264/2966/116 2265/2967/116 -f 2262/2968/117 2267/2969/117 2263/2970/117 -f 2261/2971/118 2265/2972/118 2260/2973/118 -f 2263/2974/119 2266/2965/119 2261/2975/119 -f 2260/2976/120 2264/2977/120 2262/2978/120 -f 2271/2979/119 2278/2980/119 2269/2981/119 -f 2270/2982/117 2279/2983/117 2271/2979/117 -f 2272/2984/120 2280/2985/120 2274/2986/120 -f 2273/2987/118 2281/2988/118 2272/2989/118 -f 2275/2990/119 2282/2991/119 2273/2987/119 -f 2274/2986/117 2283/2992/117 2275/2990/117 -f 2268/2993/120 2276/2994/120 2270/2982/120 -f 2269/2981/118 2277/2995/118 2268/2996/118 -f 2287/2997/119 2294/2998/119 2285/2999/119 -f 2286/3000/117 2295/3001/117 2287/2997/117 -f 2288/3002/120 2296/3003/120 2290/3004/120 -f 2289/3005/118 2297/3006/118 2288/3007/118 -f 2291/3008/119 2298/3009/119 2289/3005/119 -f 2290/3004/117 2299/3010/117 2291/3008/117 -f 2284/3011/120 2292/3012/120 2286/3000/120 -f 2285/2999/118 2293/3013/118 2284/3014/118 -f 2334/3015/125 2333/3016/125 2332/3017/125 -f 2302/3018/117 2301/3019/117 2303/3020/117 -f 2305/3021/118 2306/3022/118 2307/3023/118 -f 2309/3024/120 2310/3025/120 2311/3026/120 -f 2314/3027/119 2313/3028/119 2315/3029/119 -f 2318/3030/117 2317/3031/117 2319/3032/117 -f 2321/3033/118 2322/3034/118 2323/3035/118 -f 2324/3036/120 2327/3037/120 2325/3038/120 -f 2331/3039/119 2328/3040/119 2329/3041/119 -f 2338/3042/116 2336/3043/116 2337/3044/116 -f 2334/3045/117 2339/3046/117 2335/3047/117 -f 2333/3048/118 2337/3049/118 2332/3050/118 -f 2335/3051/119 2338/3042/119 2333/3052/119 -f 2332/3053/120 2336/3054/120 2334/3055/120 -f 2348/3056/117 2363/3057/117 2367/3058/117 -f 2378/3059/117 2393/3060/117 2397/3061/117 -f 2401/3062/118 2402/3063/118 2403/3064/118 -f 2406/3065/117 2405/3066/117 2407/3067/117 -f 2410/3068/119 2409/3069/119 2411/3070/119 -f 2413/3071/120 2414/3072/120 2415/3073/120 -f 2417/3074/118 2418/3075/118 2419/3076/118 -f 2422/3077/117 2421/3078/117 2423/3079/117 -f 2427/3080/119 2424/3081/119 2425/3082/119 -f 2428/3083/120 2431/3084/120 2429/3085/120 -f 2208/2866/116 2209/3086/116 2211/2867/116 -f 2184/2869/116 2188/2873/116 2189/2870/116 -f 2186/2872/116 2190/2875/116 2188/2873/116 -f 2187/2874/116 2191/2876/116 2190/2875/116 -f 2185/2871/116 2189/2870/116 2191/2876/116 -f 2191/2877/117 2195/2893/117 2194/2878/117 -f 2188/2880/118 2192/2889/118 2193/2881/118 -f 2189/2870/119 2193/2887/119 2195/2883/119 -f 2190/2884/120 2194/2891/120 2192/2885/120 -f 2193/2887/116 2197/2895/116 2199/2888/116 -f 2192/2889/116 2196/2901/116 2197/2890/116 -f 2194/2891/116 2198/2897/116 2196/2892/116 -f 2195/2893/116 2199/2899/116 2198/2894/116 -f 2197/2895/119 2201/3087/119 2203/2896/119 -f 2198/2897/120 2202/3088/120 2200/2898/120 -f 2199/2899/117 2203/3089/117 2202/2900/117 -f 2196/2901/118 2200/3090/118 2201/2902/118 -f 2205/2903/121 2204/2904/121 2184/2869/121 -f 2204/2904/122 2206/2905/122 2186/2872/122 -f 2206/2905/123 2207/2906/123 2187/2874/123 -f 2207/2906/124 2205/2903/124 2185/2871/124 -f 2218/2907/116 2219/2911/116 2216/2908/116 -f 2214/2910/117 2216/2908/117 2219/2911/117 -f 2215/2913/119 2219/2911/119 2218/2907/119 -f 2212/2915/120 2217/2909/120 2216/2908/120 -f 2226/2917/116 2227/3091/116 2224/2918/116 -f 2223/2920/119 2227/3091/119 2226/2917/119 -f 2220/2922/120 2225/2919/120 2224/2918/120 -f 2221/2924/118 2226/2917/118 2225/2919/118 -f 2239/2926/119 2255/2933/119 2254/2927/119 -f 2230/2929/117 2244/2952/117 2247/2930/117 -f 2238/2932/117 2252/2955/117 2255/2933/117 -f 2232/2934/120 2249/3092/120 2248/2935/120 -f 2240/2937/120 2257/3093/120 2256/2938/120 -f 2233/2940/118 2250/2947/118 2249/2941/118 -f 2241/2943/118 2258/2949/118 2257/2944/118 -f 2235/2946/119 2251/2950/119 2250/2947/119 -f 2243/2948/119 2259/2953/119 2258/2949/119 -f 2234/2936/117 2248/2935/117 2251/2950/117 -f 2228/2951/120 2245/3094/120 2244/2952/120 -f 2242/2939/117 2256/2938/117 2259/2953/117 -f 2236/2954/120 2253/3095/120 2252/2955/120 -f 2229/2956/118 2246/2961/118 2245/2957/118 -f 2237/2928/118 2254/2927/118 2253/2959/118 -f 2231/2931/119 2247/2930/119 2246/2961/119 -f 2262/2962/125 2263/3096/125 2261/2963/125 -f 2266/2965/116 2267/2969/116 2264/2966/116 -f 2262/2968/117 2264/2966/117 2267/2969/117 -f 2261/2971/118 2266/3097/118 2265/2972/118 -f 2263/2974/119 2267/2969/119 2266/2965/119 -f 2260/2976/120 2265/2972/120 2264/2977/120 -f 2271/2979/119 2279/2983/119 2278/2980/119 -f 2270/2982/117 2276/2994/117 2279/2983/117 -f 2272/2984/120 2281/3098/120 2280/2985/120 -f 2273/2987/118 2282/2991/118 2281/2988/118 -f 2275/2990/119 2283/2992/119 2282/2991/119 -f 2274/2986/117 2280/2985/117 2283/2992/117 -f 2268/2993/120 2277/3099/120 2276/2994/120 -f 2269/2981/118 2278/2980/118 2277/2995/118 -f 2287/2997/119 2295/3001/119 2294/2998/119 -f 2286/3000/117 2292/3012/117 2295/3001/117 -f 2288/3002/120 2297/3100/120 2296/3003/120 -f 2289/3005/118 2298/3009/118 2297/3006/118 -f 2291/3008/119 2299/3010/119 2298/3009/119 -f 2290/3004/117 2296/3003/117 2299/3010/117 -f 2284/3011/120 2293/3101/120 2292/3012/120 -f 2285/2999/118 2294/2998/118 2293/3013/118 -f 2334/3015/125 2335/3102/125 2333/3016/125 -f 2302/3018/117 2300/3103/117 2301/3019/117 -f 2305/3021/118 2304/3104/118 2306/3022/118 -f 2309/3024/120 2308/3105/120 2310/3025/120 -f 2314/3027/119 2312/3106/119 2313/3028/119 -f 2318/3030/117 2316/3107/117 2317/3031/117 -f 2321/3033/118 2320/3108/118 2322/3034/118 -f 2324/3036/120 2326/3109/120 2327/3037/120 -f 2331/3039/119 2330/3110/119 2328/3040/119 -f 2338/3042/116 2339/3046/116 2336/3043/116 -f 2334/3045/117 2336/3043/117 2339/3046/117 -f 2333/3048/118 2338/3111/118 2337/3049/118 -f 2335/3051/119 2339/3046/119 2338/3042/119 -f 2332/3053/120 2337/3049/120 2336/3054/120 -f 2363/3057/117 2364/3112/117 2365/3113/117 -f 2365/3113/117 2366/3114/117 2363/3057/117 -f 2366/3114/117 2367/3058/117 2363/3057/117 -f 2367/3058/117 2368/3115/117 2369/3116/117 -f 2369/3116/117 2348/3056/117 2367/3058/117 -f 2393/3060/117 2394/3117/117 2395/3118/117 -f 2395/3118/117 2396/3119/117 2393/3060/117 -f 2396/3119/117 2397/3061/117 2393/3060/117 -f 2397/3061/117 2398/3120/117 2399/3121/117 -f 2399/3121/117 2378/3059/117 2397/3061/117 -f 2401/3062/118 2400/3122/118 2402/3063/118 -f 2406/3065/117 2404/3123/117 2405/3066/117 -f 2410/3068/119 2408/3124/119 2409/3069/119 -f 2413/3071/120 2412/3125/120 2414/3072/120 -f 2417/3074/118 2416/3126/118 2418/3075/118 -f 2422/3077/117 2420/3127/117 2421/3078/117 -f 2427/3080/119 2426/3128/119 2424/3081/119 -f 2428/3083/120 2430/3129/120 2431/3084/120 -s 1 -f 2345/3130/126 2352/3131/127 2344/3132/118 -f 2343/3133/128 2350/3134/129 2342/3135/120 -f 2341/3136/130 2348/3137/131 2340/3138/117 -f 2340/3139/117 2355/3140/132 2347/3141/133 -f 2346/3142/119 2353/3143/134 2345/3130/126 -f 2344/3132/118 2351/3144/135 2343/3133/128 -f 2342/3135/120 2349/3145/136 2341/3136/130 -f 2347/3141/133 2354/3146/137 2346/3142/119 -f 2353/3147/134 2361/3148/138 2360/3149/139 -f 2351/3150/135 2359/3151/140 2358/3152/141 -f 2349/3153/136 2357/3154/142 2356/3155/143 -f 2354/3156/137 2362/3157/144 2361/3148/138 -f 2352/3131/127 2360/3149/139 2359/3151/140 -f 2351/3150/135 2357/3154/142 2350/3158/129 -f 2359/3151/140 2365/3159/145 2358/3152/141 -f 2356/3155/143 2364/3160/146 2363/3161/147 -f 2362/3157/144 2368/3162/148 2361/3148/138 -f 2359/3151/140 2367/3163/149 2366/3164/150 -f 2357/3154/142 2365/3159/145 2364/3160/146 -f 2361/3148/138 2367/3163/149 2360/3149/139 -f 2355/3165/132 2348/3166/131 2362/3157/144 -f 2362/3157/144 2348/3166/131 2369/3167/151 -f 2349/3153/136 2356/3155/143 2348/3168/131 -f 2356/3155/143 2363/3161/147 2348/3168/131 -f 2375/3169/126 2382/3170/127 2374/3171/118 -f 2373/3172/128 2380/3173/129 2372/3174/120 -f 2371/3175/130 2378/3176/131 2370/3177/117 -f 2370/3178/117 2385/3179/132 2377/3180/133 -f 2376/3181/119 2383/3182/134 2375/3169/126 -f 2374/3171/118 2381/3183/135 2373/3172/128 -f 2372/3174/120 2379/3184/136 2371/3175/130 -f 2377/3180/133 2384/3185/137 2376/3181/119 -f 2383/3186/134 2391/3187/138 2390/3188/139 -f 2382/3170/127 2388/3189/141 2381/3190/135 -f 2380/3191/129 2386/3192/143 2379/3193/136 -f 2385/3194/132 2391/3187/138 2384/3195/137 -f 2382/3170/127 2390/3188/139 2389/3196/140 -f 2381/3190/135 2387/3197/142 2380/3191/129 -f 2389/3196/140 2395/3198/145 2388/3189/141 -f 2386/3192/143 2394/3199/146 2393/3200/147 -f 2392/3201/144 2398/3202/148 2391/3187/138 -f 2389/3196/140 2397/3203/149 2396/3204/150 -f 2387/3197/142 2395/3198/145 2394/3199/146 -f 2391/3187/138 2397/3203/149 2390/3188/139 -f 2385/3194/132 2378/3205/131 2392/3201/144 -f 2392/3201/144 2378/3205/131 2399/3206/151 -f 2379/3193/136 2386/3192/143 2378/3207/131 -f 2386/3192/143 2393/3200/147 2378/3207/131 -f 2345/3130/126 2353/3143/134 2352/3131/127 -f 2343/3133/128 2351/3144/135 2350/3134/129 -f 2341/3136/130 2349/3145/136 2348/3137/131 -f 2340/3139/117 2348/3208/131 2355/3140/132 -f 2346/3142/119 2354/3146/137 2353/3143/134 -f 2344/3132/118 2352/3131/127 2351/3144/135 -f 2342/3135/120 2350/3134/129 2349/3145/136 -f 2347/3141/133 2355/3140/132 2354/3146/137 -f 2353/3147/134 2354/3156/137 2361/3148/138 -f 2351/3150/135 2352/3131/127 2359/3151/140 -f 2349/3153/136 2350/3158/129 2357/3154/142 -f 2354/3156/137 2355/3165/132 2362/3157/144 -f 2352/3131/127 2353/3147/134 2360/3149/139 -f 2351/3150/135 2358/3152/141 2357/3154/142 -f 2359/3151/140 2366/3164/150 2365/3159/145 -f 2356/3155/143 2357/3154/142 2364/3160/146 -f 2362/3157/144 2369/3167/151 2368/3162/148 -f 2359/3151/140 2360/3149/139 2367/3163/149 -f 2357/3154/142 2358/3152/141 2365/3159/145 -f 2361/3148/138 2368/3162/148 2367/3163/149 -f 2375/3169/126 2383/3182/134 2382/3170/127 -f 2373/3172/128 2381/3183/135 2380/3173/129 -f 2371/3175/130 2379/3184/136 2378/3176/131 -f 2370/3178/117 2378/3209/131 2385/3179/132 -f 2376/3181/119 2384/3185/137 2383/3182/134 -f 2374/3171/118 2382/3170/127 2381/3183/135 -f 2372/3174/120 2380/3173/129 2379/3184/136 -f 2377/3180/133 2385/3179/132 2384/3185/137 -f 2383/3186/134 2384/3195/137 2391/3187/138 -f 2382/3170/127 2389/3196/140 2388/3189/141 -f 2380/3191/129 2387/3197/142 2386/3192/143 -f 2385/3194/132 2392/3201/144 2391/3187/138 -f 2382/3170/127 2383/3186/134 2390/3188/139 -f 2381/3190/135 2388/3189/141 2387/3197/142 -f 2389/3196/140 2396/3204/150 2395/3198/145 -f 2386/3192/143 2387/3197/142 2394/3199/146 -f 2392/3201/144 2399/3206/151 2398/3202/148 -f 2389/3196/140 2390/3188/139 2397/3203/149 -f 2387/3197/142 2388/3189/141 2395/3198/145 -f 2391/3187/138 2398/3202/148 2397/3203/149 -o Strong_Pad -v -2.500000 2.000000 2.500000 -v 2.500000 2.000000 2.500000 -v -2.500000 2.000000 -2.500000 -v 2.500000 2.000000 -2.500000 -v -0.500000 2.000000 0.500000 -v 0.500000 2.000000 0.500000 -v -0.500000 2.000000 -0.500000 -v 0.500000 2.000000 -0.500000 -v 2.500000 1.000000 2.500000 -v -2.500000 1.000000 -2.500000 -v -2.500000 1.000000 2.500000 -v 2.500000 1.000000 -2.500000 -v 2.500000 1.000000 1.500000 -v -2.500000 1.000000 1.500000 -v -2.500000 1.000000 -1.500000 -v 2.500000 1.000000 -1.500000 -v -1.500000 1.000000 -2.500000 -v -1.500000 1.000000 2.500000 -v 1.500000 1.000000 2.500000 -v 1.500000 1.000000 -2.500000 -v 2.500000 1.500000 0.500000 -v -2.500000 1.500000 0.500000 -v -2.500000 1.500000 -0.500000 -v 2.500000 1.500000 -0.500000 -v -0.500000 1.500000 -2.500000 -v -0.500000 1.500000 2.500000 -v 0.500000 1.500000 2.500000 -v 0.500000 1.500000 -2.500000 -v -0.500000 1.500000 0.500000 -v 0.500000 1.500000 0.500000 -v -0.500000 1.500000 -0.500000 -v 0.500000 1.500000 -0.500000 -v -1.500000 1.000000 -1.500000 -v 1.500000 1.000000 -1.500000 -v -1.500000 1.000000 1.500000 -v 1.500000 1.000000 1.500000 -v -1.500000 1.000000 -2.500000 -v 1.500000 1.000000 -2.500000 -v -1.500000 1.000000 -3.500000 -v 1.500000 1.000000 -3.500000 -v -1.500000 2.000000 -2.500000 -v 1.500000 2.000000 -2.500000 -v -1.500000 2.000000 -3.000000 -v -1.500000 1.500000 -3.500000 -v 1.500000 1.500000 -3.500000 -v 1.500000 2.000000 -3.000000 -v -1.000000 1.000000 3.500000 -v 1.000000 1.000000 3.500000 -v -1.000000 1.000000 2.500000 -v 1.000000 1.000000 2.500000 -v -1.000000 11.000000 2.500000 -v -1.000000 11.000000 3.500000 -v 1.000000 11.000000 3.500000 -v 1.000000 11.000000 2.500000 -v 3.250000 1.000000 2.500000 -v 3.500000 1.250000 2.500000 -v 2.500000 1.250000 2.500000 -v 2.750000 1.000000 2.500000 -v 3.500000 1.250000 4.500000 -v 3.250000 1.000000 4.500000 -v 2.750000 1.000000 4.500000 -v 2.500000 1.250000 4.500000 -v 1.500000 1.250000 4.500000 -v 1.750000 1.000000 4.500000 -v 2.250000 1.000000 4.500000 -v 2.500000 1.250000 4.500000 -v 1.750000 1.000000 2.500000 -v 1.500000 1.250000 2.500000 -v 2.500000 1.250000 2.500000 -v 2.250000 1.000000 2.500000 -v 1.500000 1.750000 2.500000 -v 1.750000 2.000000 2.500000 -v 1.750000 2.000000 4.500000 -v 1.500000 1.750000 4.500000 -v 2.500000 1.750000 4.500000 -v 2.250000 2.000000 4.500000 -v 2.250000 2.000000 2.500000 -v 2.500000 1.750000 2.500000 -v 2.500000 1.750000 2.500000 -v 2.750000 2.000000 2.500000 -v 2.750000 2.000000 4.500000 -v 2.500000 1.750000 4.500000 -v 3.500000 1.750000 4.500000 -v 3.250000 2.000000 4.500000 -v 3.250000 2.000000 2.500000 -v 3.500000 1.750000 2.500000 -v 3.000000 2.000000 2.625000 -v 2.911612 2.000000 2.661612 -v 2.875000 2.000000 2.750000 -v 2.911612 2.000000 2.838388 -v 3.000000 2.000000 2.875000 -v 3.088388 2.000000 2.838388 -v 3.125000 2.000000 2.750000 -v 3.088388 2.000000 2.661612 -v 2.963388 2.088388 2.625000 -v 2.900888 2.025888 2.661612 -v 2.900888 2.025888 2.838388 -v 2.963388 2.088388 2.875000 -v 3.025888 2.150888 2.838388 -v 3.051777 2.176777 2.750000 -v 3.025888 2.150888 2.661612 -v 2.875000 2.125000 2.625000 -v 2.875000 2.036612 2.661612 -v 2.875000 2.036612 2.838388 -v 2.875000 2.125000 2.875000 -v 2.875000 2.213388 2.838388 -v 2.875000 2.250000 2.750000 -v 2.875000 2.213388 2.661612 -v 1.000000 2.000000 2.750000 -v 1.000000 2.125000 2.625000 -v 1.000000 2.036612 2.661612 -v 1.000000 2.036612 2.838388 -v 1.000000 2.125000 2.875000 -v 1.000000 2.213388 2.838388 -v 1.000000 2.250000 2.750000 -v 1.000000 2.213388 2.661612 -v 2.000000 2.000000 3.125000 -v 1.911612 2.000000 3.161612 -v 1.875000 2.000000 3.250000 -v 1.911612 2.000000 3.338388 -v 2.000000 2.000000 3.375000 -v 2.088388 2.000000 3.338388 -v 2.125000 2.000000 3.250000 -v 2.088388 2.000000 3.161612 -v 1.963388 2.088388 3.125000 -v 1.900888 2.025888 3.161612 -v 1.900888 2.025888 3.338388 -v 1.963388 2.088388 3.375000 -v 2.025888 2.150888 3.338388 -v 2.051777 2.176777 3.250000 -v 2.025888 2.150888 3.161612 -v 1.875000 2.125000 3.125000 -v 1.875000 2.036612 3.161612 -v 1.875000 2.036612 3.338388 -v 1.875000 2.125000 3.375000 -v 1.875000 2.213388 3.338388 -v 1.875000 2.250000 3.250000 -v 1.875000 2.213388 3.161612 -v 1.000000 2.000000 3.250000 -v 1.000000 2.125000 3.125000 -v 1.000000 2.036612 3.161612 -v 1.000000 2.036612 3.338388 -v 1.000000 2.125000 3.375000 -v 1.000000 2.213388 3.338388 -v 1.000000 2.250000 3.250000 -v 1.000000 2.213388 3.161612 -v -0.500000 2.000000 0.500000 -v 0.500000 2.000000 0.500000 -v -0.500000 2.000000 -0.500000 -v 0.500000 2.000000 -0.500000 -v -1.750000 1.000000 2.500000 -v -1.500000 1.250000 2.500000 -v -2.500000 1.250000 2.500000 -v -2.250000 1.000000 2.500000 -v -1.500000 1.250000 4.500000 -v -1.750000 1.000000 4.500000 -v -2.250000 1.000000 4.500000 -v -2.500000 1.250000 4.500000 -v -3.500000 1.250000 4.500000 -v -3.250000 1.000000 4.500000 -v -2.750000 1.000000 4.500000 -v -2.500000 1.250000 4.500000 -v -3.250000 1.000000 2.500000 -v -3.500000 1.250000 2.500000 -v -2.500000 1.250000 2.500000 -v -2.750000 1.000000 2.500000 -v -3.500000 1.750000 2.500000 -v -3.250000 2.000000 2.500000 -v -3.250000 2.000000 4.500000 -v -3.500000 1.750000 4.500000 -v -2.500000 1.750000 4.500000 -v -2.750000 2.000000 4.500000 -v -2.750000 2.000000 2.500000 -v -2.500000 1.750000 2.500000 -v -2.500000 1.750000 2.500000 -v -2.250000 2.000000 2.500000 -v -2.250000 2.000000 4.500000 -v -2.500000 1.750000 4.500000 -v -1.500000 1.750000 4.500000 -v -1.750000 2.000000 4.500000 -v -1.750000 2.000000 2.500000 -v -1.500000 1.750000 2.500000 -v -3.000000 2.000000 3.375000 -v -2.911612 2.000000 3.338389 -v -2.875000 2.000000 3.250000 -v -2.911612 2.000000 3.161612 -v -3.000000 2.000000 3.125000 -v -3.088388 2.000000 3.161612 -v -3.125000 2.000000 3.250000 -v -3.088388 2.000000 3.338389 -v -2.963388 2.088388 3.375000 -v -2.900888 2.025888 3.338389 -v -2.900888 2.025888 3.161612 -v -2.963388 2.088388 3.125000 -v -3.025888 2.150888 3.161612 -v -3.051777 2.176777 3.250000 -v -3.025888 2.150888 3.338389 -v -2.875000 2.125000 3.375000 -v -2.875000 2.036612 3.338389 -v -2.875000 2.036612 3.161612 -v -2.875000 2.125000 3.125000 -v -2.875000 2.213388 3.161612 -v -2.875000 2.250000 3.250000 -v -2.875000 2.213388 3.338389 -v -1.000000 2.000000 3.250000 -v -1.000000 2.125000 3.375000 -v -1.000000 2.036612 3.338388 -v -1.000000 2.036612 3.161612 -v -1.000000 2.125000 3.125000 -v -1.000000 2.213388 3.161612 -v -1.000000 2.250000 3.250000 -v -1.000000 2.213388 3.338388 -v -2.000000 2.000000 2.875000 -v -1.911612 2.000000 2.838389 -v -1.875000 2.000000 2.750000 -v -1.911612 2.000000 2.661612 -v -2.000000 2.000000 2.625000 -v -2.088388 2.000000 2.661612 -v -2.125000 2.000000 2.750000 -v -2.088388 2.000000 2.838389 -v -1.963388 2.088388 2.875000 -v -1.900888 2.025888 2.838389 -v -1.900888 2.025888 2.661612 -v -1.963388 2.088388 2.625000 -v -2.025888 2.150888 2.661612 -v -2.051777 2.176777 2.750000 -v -2.025888 2.150888 2.838389 -v -1.875000 2.125000 2.875000 -v -1.875000 2.036612 2.838389 -v -1.875000 2.036612 2.661612 -v -1.875000 2.125000 2.625000 -v -1.875000 2.213388 2.661612 -v -1.875000 2.250000 2.750000 -v -1.875000 2.213388 2.838389 -v -1.000000 2.000000 2.750000 -v -1.000000 2.125000 2.875000 -v -1.000000 2.036612 2.838388 -v -1.000000 2.036612 2.661612 -v -1.000000 2.125000 2.625000 -v -1.000000 2.213388 2.661612 -v -1.000000 2.250000 2.750000 -v -1.000000 2.213388 2.838388 -vt 0.102564 0.719101 -vt -0.000000 0.988764 -vt -0.000000 0.539326 -vt 0.102564 0.269663 -vt 0.153846 0.224719 -vt 0.153846 0.269663 -vt 0.102564 0.808989 -vt 0.256410 0.988764 -vt 0.153846 0.808989 -vt 0.256410 0.539326 -vt 0.153846 0.719101 -vt 0.256410 0.539326 -vt -0.000000 0.539326 -vt 0.153846 0.494382 -vt 0.256410 0.539326 -vt -0.000000 0.539326 -vt 0.153846 0.494382 -vt 0.256410 0.539326 -vt -0.000000 0.539326 -vt 0.153846 0.494382 -vt 0.153846 0.494382 -vt 0.102564 0.269663 -vt 0.153846 0.224719 -vt 0.153846 0.269663 -vt 0.102564 0.269663 -vt 0.153846 0.224719 -vt 0.153846 0.269663 -vt 0.102564 0.269663 -vt 0.153846 0.224719 -vt 0.153846 0.269663 -vt 0.102564 0.449438 -vt 0.153846 0.269663 -vt 0.153846 0.449438 -vt -0.000000 0.179775 -vt 0.102564 0.269663 -vt -0.000000 0.269663 -vt 0.153846 0.000000 -vt 0.102564 0.179775 -vt 0.102564 -0.000000 -vt 0.256410 0.269663 -vt 0.153846 0.179775 -vt 0.256410 0.179775 -vt 0.051282 0.359551 -vt 0.051282 0.449438 -vt 0.205128 0.359551 -vt 0.205128 0.449438 -vt 0.205128 0.089888 -vt 0.205128 0.000000 -vt 0.051282 0.089888 -vt 0.051282 -0.000000 -vt 0.794872 0.359551 -vt 0.769231 0.089888 -vt 0.794872 0.089888 -vt 0.717949 0.089888 -vt 0.743590 0.359551 -vt 0.717949 0.359551 -vt 0.743590 0.089888 -vt 0.717949 -0.000000 -vt 0.769231 0.044944 -vt 0.666667 0.089888 -vt 0.666667 0.359551 -vt 0.769231 0.359551 -vt 0.717949 0.449438 -vt 0.769231 0.404494 -vt 0.615385 0.651685 -vt 0.602564 0.719101 -vt 0.564103 0.696629 -vt 0.358974 0.898876 -vt 0.256410 0.988764 -vt 0.256410 0.898876 -vt 0.410256 -0.000000 -vt 0.358974 -0.000000 -vt 0.564103 -0.000000 -vt 0.512821 0.898876 -vt 0.512821 -0.000000 -vt 0.410256 0.898876 -vt 0.256410 -0.000000 -vt 0.615385 0.292135 -vt 0.602564 0.359551 -vt 0.564103 0.337079 -vt 0.564103 0.449438 -vt 0.666667 0.494382 -vt 0.564103 0.494382 -vt 0.666667 0.382022 -vt 0.564103 0.426966 -vt 0.564103 0.382022 -vt 0.666667 0.651685 -vt 0.653846 0.719101 -vt 0.615385 0.696629 -vt 0.666667 0.584270 -vt 0.564103 0.629214 -vt 0.564103 0.584270 -vt 0.666667 0.561798 -vt 0.666667 0.359551 -vt 0.564103 0.359551 -vt 0.564103 0.516854 -vt 0.666667 0.516854 -vt 0.666667 0.426966 -vt 0.564103 0.561798 -vt 0.564103 0.089888 -vt 0.666667 0.134831 -vt 0.564103 0.134831 -vt 0.666667 0.022472 -vt 0.564103 0.067416 -vt 0.564103 0.022472 -vt 0.666667 0.292135 -vt 0.653846 0.359551 -vt 0.615385 0.337079 -vt 0.666667 0.224719 -vt 0.564103 0.269663 -vt 0.564103 0.224719 -vt 0.666667 0.202247 -vt 0.666667 0.000000 -vt 0.564103 -0.000000 -vt 0.564103 0.157303 -vt 0.666667 0.157303 -vt 0.666667 0.067416 -vt 0.564103 0.202247 -vt 0.102564 0.808989 -vt 0.153846 0.719101 -vt 0.153846 0.808989 -vt 0.615385 0.651685 -vt 0.602564 0.719101 -vt 0.564103 0.696629 -vt 0.615385 0.292135 -vt 0.602564 0.359551 -vt 0.564103 0.337079 -vt 0.564103 0.449438 -vt 0.666667 0.494382 -vt 0.564103 0.494382 -vt 0.666667 0.382022 -vt 0.564103 0.426966 -vt 0.564103 0.382022 -vt 0.666667 0.651685 -vt 0.653846 0.719101 -vt 0.615385 0.696629 -vt 0.666667 0.584270 -vt 0.564103 0.629214 -vt 0.564103 0.584270 -vt 0.666667 0.561798 -vt 0.666667 0.359551 -vt 0.564103 0.359551 -vt 0.564103 0.516854 -vt 0.666667 0.516854 -vt 0.666667 0.426966 -vt 0.564103 0.561798 -vt 0.564103 0.089888 -vt 0.666667 0.134831 -vt 0.564103 0.134831 -vt 0.666667 0.022472 -vt 0.564103 0.067416 -vt 0.564103 0.022472 -vt 0.666667 0.292135 -vt 0.653846 0.359551 -vt 0.615385 0.337079 -vt 0.666667 0.224719 -vt 0.564103 0.269663 -vt 0.564103 0.224719 -vt 0.666667 0.202247 -vt 0.666667 0.000000 -vt 0.564103 -0.000000 -vt 0.564103 0.157303 -vt 0.666667 0.157303 -vt 0.666667 0.067416 -vt 0.564103 0.202247 -vt 0.102564 0.224719 -vt 0.205128 0.449438 -vt 0.256410 0.449438 -vt 0.000000 0.449438 -vt 0.051282 0.449438 -vt 0.102564 0.494382 -vt 0.205128 0.449438 -vt 0.256410 0.449438 -vt -0.000000 0.449438 -vt 0.051282 0.449438 -vt 0.102564 0.494382 -vt 0.205128 0.449438 -vt 0.256410 0.449438 -vt 0.000000 0.449438 -vt 0.051282 0.449438 -vt 0.102564 0.494382 -vt 0.256410 0.449438 -vt -0.000000 0.449438 -vt 0.102564 0.494382 -vt 0.102564 0.224719 -vt 0.102564 0.224719 -vt 0.102564 0.224719 -vt -0.000000 0.359551 -vt 0.256410 0.359551 -vt 0.256410 0.089888 -vt -0.000000 0.089888 -vt 0.769231 -0.000000 -vt 0.769231 0.449438 -vt 0.564103 0.651685 -vt 0.576923 0.629214 -vt 0.602564 0.629214 -vt 0.615385 0.696629 -vt 0.576923 0.719101 -vt 0.358974 0.988764 -vt 0.564103 0.898876 -vt 0.564103 0.292135 -vt 0.576923 0.269663 -vt 0.602564 0.269663 -vt 0.615385 0.337079 -vt 0.576923 0.359551 -vt 0.666667 0.449438 -vt 0.615385 0.651685 -vt 0.628205 0.629214 -vt 0.653846 0.629214 -vt 0.666667 0.696629 -vt 0.628205 0.719101 -vt 0.666667 0.629214 -vt 0.666667 0.089888 -vt 0.615385 0.292135 -vt 0.628205 0.269663 -vt 0.653846 0.269663 -vt 0.666667 0.337079 -vt 0.628205 0.359551 -vt 0.666667 0.269663 -vt 0.102564 0.719101 -vt 0.564103 0.651685 -vt 0.576923 0.629214 -vt 0.602564 0.629214 -vt 0.615385 0.696629 -vt 0.576923 0.719101 -vt 0.564103 0.292135 -vt 0.576923 0.269663 -vt 0.602564 0.269663 -vt 0.615385 0.337079 -vt 0.576923 0.359551 -vt 0.666667 0.449438 -vt 0.615385 0.651685 -vt 0.628205 0.629214 -vt 0.653846 0.629214 -vt 0.666667 0.696629 -vt 0.628205 0.719101 -vt 0.666667 0.629214 -vt 0.666667 0.089888 -vt 0.615385 0.292135 -vt 0.628205 0.269663 -vt 0.653846 0.269663 -vt 0.666667 0.337079 -vt 0.628205 0.359551 -vt 0.666667 0.269663 -vt 0.634615 0.904494 -vt 0.641026 0.921348 -vt 0.634615 0.921348 -vt 0.647436 0.921348 -vt 0.653846 0.904494 -vt 0.653846 0.915730 -vt 0.621795 0.904494 -vt 0.628205 0.915730 -vt 0.621795 0.910112 -vt 0.628205 0.904494 -vt 0.641026 0.904494 -vt 0.660256 0.904494 -vt 0.660256 0.910112 -vt 0.647436 0.887640 -vt 0.647436 0.904494 -vt 0.621795 0.898876 -vt 0.628205 0.893258 -vt 0.641026 0.887640 -vt 0.660256 0.898876 -vt 0.666667 0.904494 -vt 0.615385 0.904494 -vt 0.621795 0.887640 -vt 0.628205 0.719101 -vt 0.628205 0.887640 -vt 0.615385 0.887640 -vt 0.621795 0.719101 -vt 0.634615 0.719101 -vt 0.634615 0.887640 -vt 0.660256 0.887640 -vt 0.666667 0.719101 -vt 0.666667 0.887640 -vt 0.647436 0.719101 -vt 0.653846 0.887640 -vt 0.660256 0.719101 -vt 0.641026 0.719101 -vt 0.653846 0.719101 -vt 0.583333 0.831461 -vt 0.589744 0.814607 -vt 0.589744 0.831461 -vt 0.596154 0.814607 -vt 0.602564 0.825843 -vt 0.596154 0.831461 -vt 0.570513 0.814607 -vt 0.576923 0.825843 -vt 0.570513 0.820225 -vt 0.576923 0.814607 -vt 0.602564 0.814607 -vt 0.608974 0.820225 -vt 0.602564 0.803371 -vt 0.570513 0.808989 -vt 0.583333 0.797753 -vt 0.583333 0.814607 -vt 0.589744 0.797753 -vt 0.608974 0.808989 -vt 0.608974 0.814607 -vt 0.615385 0.814607 -vt 0.564103 0.814607 -vt 0.570513 0.797753 -vt 0.576923 0.719101 -vt 0.576923 0.797753 -vt 0.564103 0.797753 -vt 0.570513 0.719101 -vt 0.583333 0.719101 -vt 0.608974 0.797753 -vt 0.615385 0.719101 -vt 0.615385 0.797753 -vt 0.596154 0.719101 -vt 0.596154 0.797753 -vt 0.602564 0.797753 -vt 0.608974 0.719101 -vt 0.589744 0.719101 -vt 0.602564 0.719101 -vt 0.634615 0.921348 -vt 0.641026 0.904494 -vt 0.641026 0.921348 -vt 0.647436 0.921348 -vt 0.653846 0.904494 -vt 0.653846 0.915730 -vt 0.621795 0.904494 -vt 0.628205 0.915730 -vt 0.621795 0.910112 -vt 0.628205 0.904494 -vt 0.647436 0.904494 -vt 0.660256 0.904494 -vt 0.660256 0.910112 -vt 0.653846 0.893258 -vt 0.621795 0.898876 -vt 0.628205 0.893258 -vt 0.634615 0.904494 -vt 0.641026 0.887640 -vt 0.660256 0.898876 -vt 0.666667 0.904494 -vt 0.615385 0.904494 -vt 0.621795 0.887640 -vt 0.628205 0.719101 -vt 0.628205 0.887640 -vt 0.615385 0.887640 -vt 0.621795 0.719101 -vt 0.634615 0.719101 -vt 0.634615 0.887640 -vt 0.660256 0.887640 -vt 0.666667 0.719101 -vt 0.666667 0.887640 -vt 0.647436 0.719101 -vt 0.647436 0.887640 -vt 0.653846 0.887640 -vt 0.660256 0.719101 -vt 0.641026 0.719101 -vt 0.653846 0.719101 -vt 0.583333 0.831461 -vt 0.589744 0.814607 -vt 0.589744 0.831461 -vt 0.596154 0.814607 -vt 0.602564 0.825843 -vt 0.596154 0.831461 -vt 0.570513 0.814607 -vt 0.576923 0.825843 -vt 0.570513 0.820225 -vt 0.576923 0.814607 -vt 0.608974 0.814607 -vt 0.608974 0.820225 -vt 0.596154 0.797753 -vt 0.602564 0.814607 -vt 0.576923 0.803371 -vt 0.583333 0.814607 -vt 0.589744 0.797753 -vt 0.608974 0.808989 -vt 0.583333 0.797753 -vt 0.615385 0.814607 -vt 0.564103 0.814607 -vt 0.570513 0.808989 -vt 0.570513 0.797753 -vt 0.576923 0.719101 -vt 0.576923 0.797753 -vt 0.564103 0.797753 -vt 0.570513 0.719101 -vt 0.583333 0.719101 -vt 0.608974 0.797753 -vt 0.615385 0.719101 -vt 0.615385 0.797753 -vt 0.596154 0.719101 -vt 0.602564 0.797753 -vt 0.608974 0.719101 -vt 0.589744 0.719101 -vt 0.602564 0.719101 -vt 0.653846 0.893258 -vt 0.615385 0.719101 -vt 0.576923 0.803371 -vt 0.564103 0.719101 -vt 0.615385 0.719101 -vt 0.602564 0.803371 -vt 0.564103 0.719101 -vn 0.0000 1.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn -0.4472 -0.8944 0.0000 -vn 0.0000 -0.8944 -0.4472 -vn 0.0000 -0.8944 0.4472 -vn 0.4472 -0.8944 0.0000 -vn 0.0000 0.7071 -0.7071 -vn -0.7071 -0.7071 0.0000 -vn 0.7071 -0.7071 0.0000 -vn -0.7071 0.7071 0.0000 -vn 0.7071 0.7071 0.0000 -vn 0.5293 0.5293 -0.6630 -vn 0.9239 0.3827 0.0000 -vn 0.7150 0.2962 -0.6332 -vn 0.7150 0.2962 0.6332 -vn 0.0670 0.0670 0.9955 -vn 0.0948 0.0392 0.9947 -vn -0.4617 -0.4617 -0.7573 -vn 0.0948 0.0392 -0.9947 -vn -0.6303 -0.2611 -0.7311 -vn 0.0670 0.0670 -0.9955 -vn -0.4617 -0.4617 0.7573 -vn -0.6303 -0.2611 0.7311 -vn 0.1447 0.7194 0.6794 -vn 0.5293 0.5293 0.6630 -vn -0.1363 -0.6737 -0.7263 -vn 0.0196 0.0473 -0.9987 -vn 0.1866 0.9824 0.0000 -vn -0.1363 -0.6737 0.7263 -vn -0.1944 -0.9809 0.0000 -vn 0.0000 -0.7071 -0.7071 -vn 0.1447 0.7194 -0.6794 -vn 0.0000 0.7071 0.7071 -vn 0.0196 0.0473 0.9987 -vn 0.0000 -0.7071 0.7071 -vn -0.7150 0.2962 0.6332 -vn -0.9239 0.3827 0.0000 -vn -0.7150 0.2962 -0.6332 -vn -0.0670 0.0670 -0.9955 -vn -0.0948 0.0392 -0.9947 -vn 0.4617 -0.4617 0.7573 -vn -0.0948 0.0392 0.9947 -vn 0.6303 -0.2611 0.7311 -vn -0.0670 0.0670 0.9955 -vn -0.5293 0.5293 -0.6630 -vn 0.4617 -0.4617 -0.7573 -vn 0.6303 -0.2611 -0.7311 -vn -0.0196 0.0473 -0.9987 -vn 0.1363 -0.6737 0.7263 -vn -0.0196 0.0473 0.9987 -vn -0.5293 0.5293 0.6630 -vn -0.1866 0.9824 0.0000 -vn 0.1363 -0.6737 -0.7263 -vn 0.1944 -0.9809 0.0000 -vn -0.1447 0.7194 0.6794 -vn -0.1447 0.7194 -0.6794 -s off -f 2437/3210/152 2432/3211/152 2433/3212/152 -f 2439/3213/153 2461/3214/153 2437/3215/153 -f 2436/3216/152 2434/3217/152 2432/3211/152 -f 2438/3218/152 2435/3219/152 2434/3217/152 -f 2439/3220/152 2433/3212/152 2435/3219/152 -f 2433/3221/154 2432/3222/154 2458/3223/154 -f 2432/3224/153 2434/3225/153 2453/3226/153 -f 2434/3227/155 2435/3228/155 2456/3229/155 -f 2435/3219/156 2433/3212/156 2455/3230/156 -f 2436/3231/156 2462/3232/156 2438/3233/156 -f 2438/3234/154 2463/3235/154 2439/3236/154 -f 2437/3237/155 2460/3238/155 2436/3239/155 -f 2452/3240/157 2463/3241/157 2455/3242/157 -f 2457/3243/157 2461/3244/157 2458/3245/157 -f 2454/3246/157 2460/3247/157 2453/3248/157 -f 2459/3249/157 2462/3250/157 2456/3251/157 -f 2467/3252/158 2458/3245/158 2461/3244/158 -f 2467/3252/159 2452/3240/159 2444/3253/159 -f 2455/3242/160 2465/3254/160 2447/3255/160 -f 2459/3249/158 2465/3254/158 2463/3241/158 -f 2464/3256/161 2456/3251/161 2462/3250/161 -f 2464/3256/160 2454/3246/160 2446/3257/160 -f 2453/3248/159 2466/3258/159 2445/3259/159 -f 2457/3243/161 2466/3258/161 2460/3247/161 -f 2470/3260/155 2476/3261/155 2471/3262/155 -f 2473/3263/152 2474/3264/152 2472/3265/152 -f 2477/3266/156 2469/3267/156 2476/3268/156 -f 2469/3269/154 2472/3265/154 2468/3270/154 -f 2475/3271/162 2477/3266/162 2476/3261/162 -f 2468/3272/153 2474/3264/153 2475/3273/153 -f 2497/3274/154 2507/3275/154 2505/3276/154 -f 2484/3277/152 2482/3278/152 2483/3279/152 -f 2481/3280/156 2484/3277/156 2479/3281/156 -f 2478/3282/153 2482/3283/153 2480/3284/153 -f 2480/3284/155 2485/3285/155 2481/3280/155 -f 2479/3281/154 2483/3279/154 2478/3286/154 -f 2490/3287/154 2515/3288/154 2513/3289/154 -f 2507/3290/152 2503/3291/152 2504/3292/152 -f 2500/3293/156 2506/3294/156 2497/3295/156 -f 2499/3296/155 2503/3297/155 2509/3298/155 -f 2498/3299/157 2496/3300/157 2495/3301/157 -f 2495/3301/163 2499/3302/163 2498/3299/163 -f 2501/3303/164 2497/3295/164 2496/3304/164 -f 2505/3305/165 2503/3291/165 2502/3306/165 -f 2509/3307/166 2507/3290/166 2506/3294/166 -f 2494/3308/153 2502/3306/153 2499/3302/153 -f 2515/3309/152 2511/3310/152 2512/3311/152 -f 2487/3312/156 2514/3313/156 2490/3314/156 -f 2488/3315/155 2511/3316/155 2517/3317/155 -f 2489/3318/157 2491/3319/157 2492/3320/157 -f 2492/3320/163 2488/3321/163 2489/3318/163 -f 2486/3322/164 2490/3314/164 2491/3323/164 -f 2513/3324/165 2511/3310/165 2510/3325/165 -f 2517/3326/166 2515/3309/166 2514/3313/166 -f 2493/3327/153 2510/3325/153 2488/3321/153 -f 2578/3328/152 2581/3329/152 2580/3330/152 -f 2593/3331/154 2603/3332/154 2601/3333/154 -f 2586/3334/154 2611/3335/154 2609/3336/154 -f 2603/3337/152 2599/3338/152 2600/3339/152 -f 2596/3340/156 2602/3341/156 2593/3342/156 -f 2595/3343/155 2599/3344/155 2605/3345/155 -f 2594/3346/157 2592/3347/157 2591/3348/157 -f 2591/3348/163 2595/3349/163 2594/3346/163 -f 2597/3350/164 2593/3342/164 2592/3351/164 -f 2601/3352/165 2599/3338/165 2598/3353/165 -f 2605/3354/166 2603/3337/166 2602/3341/166 -f 2590/3355/153 2598/3353/153 2595/3349/153 -f 2611/3356/152 2607/3357/152 2608/3358/152 -f 2583/3359/156 2610/3360/156 2586/3361/156 -f 2584/3362/155 2607/3363/155 2613/3364/155 -f 2585/3365/157 2587/3366/157 2588/3367/157 -f 2588/3367/163 2584/3368/163 2585/3365/163 -f 2582/3369/164 2586/3361/164 2587/3370/164 -f 2609/3371/165 2607/3357/165 2606/3372/165 -f 2613/3373/166 2611/3356/166 2610/3360/166 -f 2589/3374/153 2606/3372/153 2584/3368/153 -f 2437/3210/152 2436/3216/152 2432/3211/152 -f 2439/3213/153 2463/3375/153 2461/3214/153 -f 2436/3216/152 2438/3218/152 2434/3217/152 -f 2438/3218/152 2439/3220/152 2435/3219/152 -f 2439/3220/152 2437/3210/152 2433/3212/152 -f 2450/3376/154 2440/3377/154 2433/3221/154 -f 2432/3222/154 2442/3378/154 2449/3379/154 -f 2432/3222/154 2449/3379/154 2457/3380/154 -f 2458/3223/154 2450/3376/154 2433/3221/154 -f 2432/3222/154 2457/3380/154 2458/3223/154 -f 2445/3381/153 2442/3382/153 2432/3224/153 -f 2434/3225/153 2441/3383/153 2446/3384/153 -f 2434/3225/153 2446/3384/153 2454/3385/153 -f 2453/3226/153 2445/3381/153 2432/3224/153 -f 2434/3225/153 2454/3385/153 2453/3226/153 -f 2448/3386/155 2441/3387/155 2434/3227/155 -f 2435/3228/155 2443/3388/155 2451/3389/155 -f 2435/3228/155 2451/3389/155 2459/3390/155 -f 2456/3229/155 2448/3386/155 2434/3227/155 -f 2435/3228/155 2459/3390/155 2456/3229/155 -f 2447/3255/156 2443/3391/156 2435/3219/156 -f 2433/3212/156 2440/3392/156 2444/3253/156 -f 2433/3212/156 2444/3253/156 2452/3393/156 -f 2455/3230/156 2447/3255/156 2435/3219/156 -f 2433/3212/156 2452/3393/156 2455/3230/156 -f 2436/3231/156 2460/3394/156 2462/3232/156 -f 2438/3234/154 2462/3395/154 2463/3235/154 -f 2437/3237/155 2461/3396/155 2460/3238/155 -f 2452/3240/157 2461/3244/157 2463/3241/157 -f 2457/3243/157 2460/3247/157 2461/3244/157 -f 2454/3246/157 2462/3250/157 2460/3247/157 -f 2459/3249/157 2463/3241/157 2462/3250/157 -f 2467/3252/158 2450/3397/158 2458/3245/158 -f 2467/3252/159 2461/3244/159 2452/3240/159 -f 2455/3242/160 2463/3241/160 2465/3254/160 -f 2459/3249/158 2451/3398/158 2465/3254/158 -f 2464/3256/161 2448/3399/161 2456/3251/161 -f 2464/3256/160 2462/3250/160 2454/3246/160 -f 2453/3248/159 2460/3247/159 2466/3258/159 -f 2457/3243/161 2449/3400/161 2466/3258/161 -f 2470/3260/155 2475/3271/155 2476/3261/155 -f 2473/3263/152 2477/3266/152 2474/3264/152 -f 2473/3263/156 2469/3267/156 2477/3266/156 -f 2469/3267/156 2471/3401/156 2476/3268/156 -f 2469/3269/154 2473/3263/154 2472/3265/154 -f 2475/3271/162 2474/3264/162 2477/3266/162 -f 2475/3273/153 2470/3402/153 2468/3272/153 -f 2468/3272/153 2472/3265/153 2474/3264/153 -f 2505/3276/154 2494/3403/154 2495/3404/154 -f 2495/3404/154 2496/3405/154 2497/3274/154 -f 2497/3274/154 2506/3406/154 2507/3275/154 -f 2507/3275/154 2504/3407/154 2505/3276/154 -f 2505/3276/154 2495/3404/154 2497/3274/154 -f 2484/3277/152 2485/3408/152 2482/3278/152 -f 2481/3280/156 2485/3285/156 2484/3277/156 -f 2478/3282/153 2483/3409/153 2482/3283/153 -f 2480/3284/155 2482/3283/155 2485/3285/155 -f 2479/3281/154 2484/3277/154 2483/3279/154 -f 2513/3289/154 2493/3410/154 2492/3411/154 -f 2492/3411/154 2491/3412/154 2490/3287/154 -f 2490/3287/154 2514/3413/154 2515/3288/154 -f 2515/3288/154 2512/3414/154 2513/3289/154 -f 2513/3289/154 2492/3411/154 2490/3287/154 -f 2507/3290/152 2508/3415/152 2503/3291/152 -f 2500/3293/156 2509/3307/156 2506/3294/156 -f 2509/3298/155 2500/3416/155 2501/3417/155 -f 2501/3417/155 2498/3418/155 2499/3296/155 -f 2499/3296/155 2502/3419/155 2503/3297/155 -f 2503/3297/155 2508/3420/155 2509/3298/155 -f 2509/3298/155 2501/3417/155 2499/3296/155 -f 2498/3299/157 2501/3421/157 2496/3300/157 -f 2495/3301/163 2494/3308/163 2499/3302/163 -f 2501/3303/164 2500/3293/164 2497/3295/164 -f 2505/3305/165 2504/3292/165 2503/3291/165 -f 2509/3307/166 2508/3415/166 2507/3290/166 -f 2494/3308/153 2505/3305/153 2502/3306/153 -f 2515/3309/152 2516/3422/152 2511/3310/152 -f 2487/3312/156 2517/3326/156 2514/3313/156 -f 2517/3317/155 2487/3423/155 2486/3424/155 -f 2486/3424/155 2489/3425/155 2488/3315/155 -f 2488/3315/155 2510/3426/155 2511/3316/155 -f 2511/3316/155 2516/3427/155 2517/3317/155 -f 2517/3317/155 2486/3424/155 2488/3315/155 -f 2489/3318/157 2486/3428/157 2491/3319/157 -f 2492/3320/163 2493/3327/163 2488/3321/163 -f 2486/3322/164 2487/3312/164 2490/3314/164 -f 2513/3324/165 2512/3311/165 2511/3310/165 -f 2517/3326/166 2516/3422/166 2515/3309/166 -f 2493/3327/153 2513/3324/153 2510/3325/153 -f 2578/3328/152 2579/3429/152 2581/3329/152 -f 2601/3333/154 2590/3430/154 2591/3431/154 -f 2591/3431/154 2592/3432/154 2593/3331/154 -f 2593/3331/154 2602/3433/154 2603/3332/154 -f 2603/3332/154 2600/3434/154 2601/3333/154 -f 2601/3333/154 2591/3431/154 2593/3331/154 -f 2609/3336/154 2589/3435/154 2588/3436/154 -f 2588/3436/154 2587/3437/154 2586/3334/154 -f 2586/3334/154 2610/3438/154 2611/3335/154 -f 2611/3335/154 2608/3439/154 2609/3336/154 -f 2609/3336/154 2588/3436/154 2586/3334/154 -f 2603/3337/152 2604/3440/152 2599/3338/152 -f 2596/3340/156 2605/3354/156 2602/3341/156 -f 2605/3345/155 2596/3441/155 2597/3442/155 -f 2597/3442/155 2594/3443/155 2595/3343/155 -f 2595/3343/155 2598/3444/155 2599/3344/155 -f 2599/3344/155 2604/3445/155 2605/3345/155 -f 2605/3345/155 2597/3442/155 2595/3343/155 -f 2594/3346/157 2597/3446/157 2592/3347/157 -f 2591/3348/163 2590/3355/163 2595/3349/163 -f 2597/3350/164 2596/3340/164 2593/3342/164 -f 2601/3352/165 2600/3339/165 2599/3338/165 -f 2605/3354/166 2604/3440/166 2603/3337/166 -f 2590/3355/153 2601/3352/153 2598/3353/153 -f 2611/3356/152 2612/3447/152 2607/3357/152 -f 2583/3359/156 2613/3373/156 2610/3360/156 -f 2613/3364/155 2583/3448/155 2582/3449/155 -f 2582/3449/155 2585/3450/155 2584/3362/155 -f 2584/3362/155 2606/3451/155 2607/3363/155 -f 2607/3363/155 2612/3452/155 2613/3364/155 -f 2613/3364/155 2582/3449/155 2584/3362/155 -f 2585/3365/157 2582/3453/157 2587/3366/157 -f 2588/3367/163 2589/3374/163 2584/3368/163 -f 2582/3369/164 2583/3359/164 2586/3361/164 -f 2609/3371/165 2608/3358/165 2607/3357/165 -f 2613/3373/166 2612/3447/166 2611/3356/166 -f 2589/3374/153 2609/3371/153 2606/3372/153 -s 1 -f 2532/3454/167 2524/3455/168 2525/3456/169 -f 2523/3457/170 2529/3458/171 2522/3459/172 -f 2527/3460/173 2518/3461/174 2519/3462/175 -f 2526/3463/176 2525/3456/169 2518/3461/174 -f 2531/3464/166 2523/3457/170 2524/3455/168 -f 2522/3459/172 2528/3465/177 2521/3466/178 -f 2537/3467/179 2529/3458/171 2530/3468/180 -f 2534/3469/181 2526/3463/176 2527/3460/173 -f 2533/3470/182 2532/3454/167 2526/3463/176 -f 2538/3471/183 2530/3468/180 2531/3464/166 -f 2529/3458/171 2535/3472/184 2528/3465/177 -f 2532/3454/167 2538/3471/183 2531/3464/166 -f 2520/3473/185 2521/3466/178 2528/3465/177 -f 2528/3465/177 2535/3472/184 2520/3473/185 -f 2519/3462/175 2520/3474/185 2527/3460/173 -f 2527/3460/173 2520/3474/185 2534/3469/181 -f 2534/3475/181 2541/3476/155 2533/3477/182 -f 2520/3478/185 2542/3479/186 2534/3475/181 -f 2533/3477/182 2547/3480/162 2539/3481/187 -f 2535/3482/184 2540/3483/157 2520/3484/185 -f 2538/3471/183 2545/3485/188 2537/3467/179 -f 2536/3486/189 2543/3487/190 2535/3482/184 -f 2539/3481/187 2546/3488/152 2538/3471/183 -f 2537/3467/179 2544/3489/154 2536/3486/189 -f 2555/3490/169 2561/3491/166 2554/3492/168 -f 2560/3493/180 2552/3494/172 2553/3495/170 -f 2557/3496/173 2548/3497/174 2549/3498/175 -f 2556/3499/176 2555/3490/169 2548/3497/174 -f 2561/3491/166 2553/3495/170 2554/3492/168 -f 2559/3500/171 2551/3501/178 2552/3494/172 -f 2560/3493/180 2566/3502/189 2559/3500/171 -f 2564/3503/181 2556/3499/176 2557/3496/173 -f 2556/3499/176 2569/3504/187 2562/3505/167 -f 2568/3506/183 2560/3493/180 2561/3491/166 -f 2559/3500/171 2565/3507/184 2558/3508/177 -f 2562/3505/167 2568/3506/183 2561/3491/166 -f 2550/3509/185 2551/3501/178 2558/3508/177 -f 2558/3508/177 2565/3507/184 2550/3509/185 -f 2549/3498/175 2550/3510/185 2557/3496/173 -f 2557/3496/173 2550/3510/185 2564/3503/181 -f 2564/3511/181 2571/3512/155 2563/3513/182 -f 2550/3514/185 2572/3515/186 2564/3511/181 -f 2563/3513/182 2577/3516/162 2569/3504/187 -f 2565/3517/184 2570/3518/157 2550/3519/185 -f 2568/3506/183 2575/3520/188 2567/3521/179 -f 2566/3522/189 2573/3523/190 2565/3517/184 -f 2569/3504/187 2576/3524/152 2568/3506/183 -f 2567/3521/179 2574/3525/154 2566/3522/189 -f 2621/3526/191 2627/3527/165 2620/3528/192 -f 2619/3529/193 2625/3530/194 2618/3531/195 -f 2623/3532/196 2614/3533/197 2615/3534/198 -f 2622/3535/199 2621/3526/191 2614/3533/197 -f 2620/3528/192 2626/3536/200 2619/3529/193 -f 2618/3531/195 2624/3537/201 2617/3538/202 -f 2626/3536/200 2632/3539/203 2625/3530/194 -f 2630/3540/204 2622/3535/199 2623/3532/196 -f 2629/3541/205 2628/3542/206 2622/3535/199 -f 2634/3543/207 2626/3536/200 2627/3527/165 -f 2625/3530/194 2631/3544/208 2624/3537/201 -f 2628/3542/206 2634/3543/207 2627/3527/165 -f 2616/3545/209 2617/3538/202 2624/3537/201 -f 2624/3537/201 2631/3544/208 2616/3545/209 -f 2615/3534/198 2616/3546/209 2623/3532/196 -f 2623/3532/196 2616/3546/209 2630/3540/204 -f 2630/3547/204 2637/3548/154 2629/3549/205 -f 2616/3550/209 2638/3551/190 2630/3547/204 -f 2629/3549/205 2643/3552/188 2635/3553/210 -f 2631/3554/208 2636/3555/157 2616/3556/209 -f 2634/3543/207 2641/3557/162 2633/3558/211 -f 2632/3559/203 2639/3560/186 2631/3554/208 -f 2635/3553/210 2642/3561/152 2634/3543/207 -f 2633/3558/211 2640/3562/155 2632/3559/203 -f 2651/3563/191 2657/3564/165 2650/3565/192 -f 2656/3566/200 2648/3567/195 2649/3568/193 -f 2653/3569/196 2644/3570/197 2645/3571/198 -f 2652/3572/199 2651/3563/191 2644/3570/197 -f 2657/3564/165 2649/3568/193 2650/3565/192 -f 2648/3567/195 2654/3573/201 2647/3574/202 -f 2663/3575/211 2655/3576/194 2656/3566/200 -f 2653/3569/196 2659/3577/205 2652/3572/199 -f 2659/3577/205 2658/3578/206 2652/3572/199 -f 2664/3579/207 2656/3566/200 2657/3564/165 -f 2655/3576/194 2661/3580/208 2654/3573/201 -f 2665/3581/210 2657/3564/165 2658/3578/206 -f 2646/3582/209 2647/3574/202 2654/3573/201 -f 2654/3573/201 2661/3580/208 2646/3582/209 -f 2645/3571/198 2646/3583/209 2653/3569/196 -f 2653/3569/196 2646/3583/209 2660/3584/204 -f 2660/3585/204 2667/3586/154 2659/3587/205 -f 2646/3588/209 2668/3589/190 2660/3585/204 -f 2659/3587/205 2673/3590/188 2665/3581/210 -f 2661/3591/208 2666/3592/157 2646/3593/209 -f 2664/3579/207 2671/3594/162 2663/3575/211 -f 2662/3595/203 2669/3596/186 2661/3591/208 -f 2664/3579/207 2673/3590/188 2672/3597/152 -f 2662/3595/203 2671/3594/162 2670/3598/155 -f 2532/3454/167 2531/3464/166 2524/3455/168 -f 2523/3457/170 2530/3468/180 2529/3458/171 -f 2527/3460/173 2526/3463/176 2518/3461/174 -f 2526/3463/176 2532/3454/167 2525/3456/169 -f 2531/3464/166 2530/3468/180 2523/3457/170 -f 2522/3459/172 2529/3458/171 2528/3465/177 -f 2537/3467/179 2536/3599/189 2529/3458/171 -f 2534/3469/181 2533/3470/182 2526/3463/176 -f 2533/3470/182 2539/3481/187 2532/3454/167 -f 2538/3471/183 2537/3467/179 2530/3468/180 -f 2529/3458/171 2536/3599/189 2535/3472/184 -f 2532/3454/167 2539/3481/187 2538/3471/183 -f 2534/3475/181 2542/3479/186 2541/3476/155 -f 2520/3478/185 2540/3600/157 2542/3479/186 -f 2533/3477/182 2541/3476/155 2547/3480/162 -f 2535/3482/184 2543/3487/190 2540/3483/157 -f 2538/3471/183 2546/3488/152 2545/3485/188 -f 2536/3486/189 2544/3489/154 2543/3487/190 -f 2539/3481/187 2547/3480/162 2546/3488/152 -f 2537/3467/179 2545/3485/188 2544/3489/154 -f 2555/3490/169 2562/3505/167 2561/3491/166 -f 2560/3493/180 2559/3500/171 2552/3494/172 -f 2557/3496/173 2556/3499/176 2548/3497/174 -f 2556/3499/176 2562/3505/167 2555/3490/169 -f 2561/3491/166 2560/3493/180 2553/3495/170 -f 2559/3500/171 2558/3508/177 2551/3501/178 -f 2560/3493/180 2567/3521/179 2566/3502/189 -f 2564/3503/181 2563/3601/182 2556/3499/176 -f 2556/3499/176 2563/3601/182 2569/3504/187 -f 2568/3506/183 2567/3521/179 2560/3493/180 -f 2559/3500/171 2566/3502/189 2565/3507/184 -f 2562/3505/167 2569/3504/187 2568/3506/183 -f 2564/3511/181 2572/3515/186 2571/3512/155 -f 2550/3514/185 2570/3602/157 2572/3515/186 -f 2563/3513/182 2571/3512/155 2577/3516/162 -f 2565/3517/184 2573/3523/190 2570/3518/157 -f 2568/3506/183 2576/3524/152 2575/3520/188 -f 2566/3522/189 2574/3525/154 2573/3523/190 -f 2569/3504/187 2577/3516/162 2576/3524/152 -f 2567/3521/179 2575/3520/188 2574/3525/154 -f 2621/3526/191 2628/3542/206 2627/3527/165 -f 2619/3529/193 2626/3536/200 2625/3530/194 -f 2623/3532/196 2622/3535/199 2614/3533/197 -f 2622/3535/199 2628/3542/206 2621/3526/191 -f 2620/3528/192 2627/3527/165 2626/3536/200 -f 2618/3531/195 2625/3530/194 2624/3537/201 -f 2626/3536/200 2633/3558/211 2632/3539/203 -f 2630/3540/204 2629/3541/205 2622/3535/199 -f 2629/3541/205 2635/3553/210 2628/3542/206 -f 2634/3543/207 2633/3558/211 2626/3536/200 -f 2625/3530/194 2632/3539/203 2631/3544/208 -f 2628/3542/206 2635/3553/210 2634/3543/207 -f 2630/3547/204 2638/3551/190 2637/3548/154 -f 2616/3550/209 2636/3603/157 2638/3551/190 -f 2629/3549/205 2637/3548/154 2643/3552/188 -f 2631/3554/208 2639/3560/186 2636/3555/157 -f 2634/3543/207 2642/3561/152 2641/3557/162 -f 2632/3559/203 2640/3562/155 2639/3560/186 -f 2635/3553/210 2643/3552/188 2642/3561/152 -f 2633/3558/211 2641/3557/162 2640/3562/155 -f 2651/3563/191 2658/3578/206 2657/3564/165 -f 2656/3566/200 2655/3576/194 2648/3567/195 -f 2653/3569/196 2652/3572/199 2644/3570/197 -f 2652/3572/199 2658/3578/206 2651/3563/191 -f 2657/3564/165 2656/3566/200 2649/3568/193 -f 2648/3567/195 2655/3576/194 2654/3573/201 -f 2663/3575/211 2662/3604/203 2655/3576/194 -f 2653/3569/196 2660/3584/204 2659/3577/205 -f 2659/3577/205 2665/3581/210 2658/3578/206 -f 2664/3579/207 2663/3575/211 2656/3566/200 -f 2655/3576/194 2662/3604/203 2661/3580/208 -f 2665/3581/210 2664/3579/207 2657/3564/165 -f 2660/3585/204 2668/3589/190 2667/3586/154 -f 2646/3588/209 2666/3605/157 2668/3589/190 -f 2659/3587/205 2667/3586/154 2673/3590/188 -f 2661/3591/208 2669/3596/186 2666/3592/157 -f 2664/3579/207 2672/3597/152 2671/3594/162 -f 2662/3595/203 2670/3598/155 2669/3596/186 -f 2664/3579/207 2665/3581/210 2673/3590/188 -f 2662/3595/203 2663/3575/211 2671/3594/162 -o Strong_Rope -v 0.625000 7.661612 0.088388 -v 0.625000 7.625000 0.000000 -v 0.625000 7.661612 -0.088388 -v 0.625000 7.750000 -0.125000 -v 0.625000 7.838388 -0.088388 -v 0.625000 7.875000 0.000000 -v 0.625000 7.838388 0.088388 -v 0.625000 7.750000 0.125000 -v 1.000000 7.661612 0.088388 -v 1.000000 7.625000 0.000000 -v 1.000000 7.661612 -0.088388 -v 1.000000 7.750000 -0.125000 -v 1.000000 7.838388 -0.088388 -v 1.000000 7.875000 0.000000 -v 1.000000 7.838388 0.088388 -v 1.025888 7.661612 0.099112 -v 1.088388 7.625000 0.036612 -v 1.150888 7.661612 -0.025888 -v 1.176777 7.750000 -0.051777 -v 1.150888 7.838388 -0.025888 -v 1.088388 7.875000 0.036612 -v 1.025888 7.838388 0.099112 -v 1.036612 7.661612 0.125000 -v 1.125000 7.625000 0.125000 -v 1.213388 7.661612 0.125000 -v 1.250000 7.750000 0.125000 -v 1.213388 7.838388 0.125000 -v 1.125000 7.875000 0.125000 -v 1.036612 7.838388 0.125000 -v 1.000000 7.750000 0.125000 -v 1.036612 7.661612 2.875000 -v 1.125000 7.625000 2.875000 -v 1.213388 7.661612 2.875000 -v 1.250000 7.750000 2.875000 -v 1.213388 7.838388 2.875000 -v 1.125000 7.875000 2.875000 -v 1.036612 7.838388 2.875000 -v 1.025888 7.661612 2.900888 -v 1.088388 7.625000 2.963388 -v 1.150888 7.661612 3.025888 -v 1.176777 7.750000 3.051777 -v 1.150888 7.838388 3.025888 -v 1.088388 7.875000 2.963388 -v 1.025888 7.838388 2.900888 -v 1.000000 7.661612 2.911612 -v 1.000000 7.625000 3.000000 -v 1.000000 7.661612 3.088388 -v 1.000000 7.750000 3.125000 -v 1.000000 7.838388 3.088388 -v 1.000000 7.875000 3.000000 -v 1.000000 7.838388 2.911612 -v 1.000000 7.750000 2.875000 -v 1.000000 5.500000 2.875000 -v 1.000000 5.588388 2.911612 -v 1.000000 5.625000 3.000000 -v 1.000000 5.588388 3.088388 -v 1.000000 5.500000 3.125000 -v 1.000000 5.411612 3.088388 -v 1.000000 5.375000 3.000000 -v 1.000000 5.411612 2.911612 -v 1.025888 5.588388 2.900888 -v 1.088388 5.625000 2.963388 -v 1.150888 5.588388 3.025888 -v 1.176777 5.500000 3.051777 -v 1.150888 5.411612 3.025888 -v 1.088388 5.375000 2.963388 -v 1.025888 5.411612 2.900888 -v 1.036612 5.588388 2.875000 -v 1.125000 5.625000 2.875000 -v 1.213388 5.588388 2.875000 -v 1.250000 5.500000 2.875000 -v 1.213388 5.411612 2.875000 -v 1.125000 5.375000 2.875000 -v 1.036612 5.411612 2.875000 -v 1.000000 5.500000 0.125000 -v 1.036612 5.588388 0.125000 -v 1.125000 5.625000 0.125000 -v 1.213388 5.588388 0.125000 -v 1.250000 5.500000 0.125000 -v 1.213388 5.411612 0.125000 -v 1.125000 5.375000 0.125000 -v 1.036612 5.411612 0.125000 -v 1.025888 5.588388 0.099112 -v 1.088388 5.625000 0.036612 -v 1.150888 5.588388 -0.025888 -v 1.176777 5.500000 -0.051777 -v 1.150888 5.411612 -0.025888 -v 1.088388 5.375000 0.036612 -v 1.025888 5.411612 0.099112 -v 1.000000 5.588388 0.088388 -v 1.000000 5.625000 0.000000 -v 1.000000 5.588388 -0.088388 -v 1.000000 5.500000 -0.125000 -v 1.000000 5.411612 -0.088388 -v 1.000000 5.375000 0.000000 -v 1.000000 5.411612 0.088388 -v 0.625000 5.500000 0.125000 -v 0.625000 5.588388 0.088388 -v 0.625000 5.625000 0.000000 -v 0.625000 5.588388 -0.088388 -v 0.625000 5.500000 -0.125000 -v 0.625000 5.411612 -0.088388 -v 0.625000 5.375000 0.000000 -v 0.625000 5.411612 0.088388 -v -0.250000 8.500000 2.500000 -v 0.250000 8.500000 2.500000 -v -0.250000 9.000000 2.500000 -v 0.250000 9.000000 2.500000 -v -0.250000 8.500000 0.250000 -v 0.250000 8.500000 0.250000 -v -0.250000 9.000000 0.250000 -v 0.250000 9.000000 0.250000 -v 0.000000 11.000000 2.500000 -v 0.000000 10.875000 2.500000 -v 0.000000 11.000000 0.000000 -v 0.000000 10.875000 0.000000 -v 0.000000 10.812500 0.500000 -v 0.000000 10.750000 1.000000 -v 0.000000 10.750000 1.500000 -v 0.000000 10.812500 2.000000 -v 0.000000 10.687500 2.000000 -v 0.000000 10.625000 1.500000 -v 0.000000 10.625000 1.000000 -v 0.000000 10.687500 0.500000 -v 0.000000 11.000000 2.500000 -v 0.000000 10.875000 2.500000 -v 0.000000 11.000000 0.000000 -v 0.000000 10.875000 0.000000 -v 0.000000 10.812500 0.500000 -v 0.000000 10.750000 1.000000 -v 0.000000 10.750000 1.500000 -v 0.000000 10.812500 2.000000 -v 0.000000 10.687500 2.000000 -v 0.000000 10.625000 1.500000 -v 0.000000 10.625000 1.000000 -v 0.000000 10.687500 0.500000 -vt 0.692308 0.449438 -vt 0.666667 0.651685 -vt 0.666667 0.449438 -vt 0.769231 0.449438 -vt 0.743590 0.651685 -vt 0.743590 0.449438 -vt 0.717949 0.449438 -vt 0.692308 0.651685 -vt 0.717949 0.651685 -vt 0.461538 0.910112 -vt 0.487179 0.898876 -vt 0.487179 0.910112 -vt 0.358974 0.898876 -vt 0.384615 0.910112 -vt 0.358974 0.910112 -vt 0.384615 0.898876 -vt 0.410256 0.910112 -vt 0.410256 0.898876 -vt 0.435897 0.910112 -vt 0.461538 0.898876 -vt 0.461538 0.910112 -vt 0.487179 0.898876 -vt 0.461538 0.898876 -vt 0.384615 0.910112 -vt 0.358974 0.898876 -vt 0.358974 0.910112 -vt 0.410256 0.910112 -vt 0.384615 0.898876 -vt 0.435897 0.910112 -vt 0.410256 0.898876 -vt 0.435897 0.898876 -vt 0.769231 0.651685 -vt 0.435897 0.898876 -vt 0.487179 0.910112 -vt 0.705128 0.966292 -vt 0.698718 1.000000 -vt 0.698718 0.966292 -vt 0.685897 0.966292 -vt 0.679487 1.000000 -vt 0.679487 0.966292 -vt 0.692308 1.000000 -vt 0.692308 0.966292 -vt 0.673077 0.966292 -vt 0.666667 1.000000 -vt 0.666667 0.966292 -vt 0.711538 0.966292 -vt 0.705128 1.000000 -vt 0.717949 0.966292 -vt 0.711538 1.000000 -vt 0.673077 1.000000 -vt 0.685897 1.000000 -vt 0.711538 0.949438 -vt 0.717949 0.949438 -vt 0.711538 0.955056 -vt 0.711538 0.943820 -vt 0.673077 0.949438 -vt 0.673077 0.955056 -vt 0.666667 0.949438 -vt 0.673077 0.943820 -vt 0.685897 0.949438 -vt 0.679487 0.960674 -vt 0.679487 0.949438 -vt 0.698718 0.949438 -vt 0.692308 0.949438 -vt 0.705128 0.960674 -vt 0.705128 0.949438 -vt 0.685897 0.932584 -vt 0.698718 0.932584 -vt 0.679487 0.938202 -vt 0.692308 0.932584 -vt 0.705128 0.938202 -vt 0.685897 0.685393 -vt 0.679487 0.932584 -vt 0.679487 0.685393 -vt 0.698718 0.685393 -vt 0.692308 0.685393 -vt 0.673077 0.685393 -vt 0.666667 0.932584 -vt 0.666667 0.685393 -vt 0.711538 0.685393 -vt 0.705128 0.932584 -vt 0.705128 0.685393 -vt 0.717949 0.685393 -vt 0.711538 0.932584 -vt 0.673077 0.932584 -vt 0.711538 0.668539 -vt 0.717949 0.668539 -vt 0.711538 0.674157 -vt 0.711538 0.662921 -vt 0.673077 0.668539 -vt 0.673077 0.674157 -vt 0.666667 0.668539 -vt 0.673077 0.662921 -vt 0.679487 0.668539 -vt 0.685897 0.668539 -vt 0.692308 0.668539 -vt 0.698718 0.668539 -vt 0.705128 0.679775 -vt 0.705128 0.668539 -vt 0.679487 0.679775 -vt 0.698718 0.651685 -vt 0.705128 0.657303 -vt 0.685897 0.651685 -vt 0.679487 0.657303 -vt 0.692308 0.651685 -vt 0.692308 0.668539 -vt 0.685897 0.651685 -vt 0.692308 0.651685 -vt 0.679487 0.657303 -vt 0.673077 0.668539 -vt 0.673077 0.662921 -vt 0.711538 0.662921 -vt 0.705128 0.668539 -vt 0.705128 0.657303 -vt 0.698718 0.651685 -vt 0.679487 0.668539 -vt 0.698718 0.685393 -vt 0.698718 0.668539 -vt 0.685897 0.685393 -vt 0.685897 0.668539 -vt 0.679487 0.679775 -vt 0.711538 0.668539 -vt 0.705128 0.679775 -vt 0.666667 0.668539 -vt 0.673077 0.674157 -vt 0.717949 0.668539 -vt 0.711538 0.674157 -vt 0.705128 0.685393 -vt 0.698718 0.932584 -vt 0.692308 0.685393 -vt 0.685897 0.932584 -vt 0.679487 0.685393 -vt 0.673077 0.932584 -vt 0.673077 0.685393 -vt 0.717949 0.685393 -vt 0.711538 0.932584 -vt 0.711538 0.685393 -vt 0.705128 0.932584 -vt 0.666667 0.932584 -vt 0.666667 0.685393 -vt 0.692308 0.932584 -vt 0.679487 0.932584 -vt 0.711538 0.943820 -vt 0.705128 0.949438 -vt 0.705128 0.938202 -vt 0.692308 0.949438 -vt 0.679487 0.949438 -vt 0.679487 0.938202 -vt 0.698718 0.949438 -vt 0.685897 0.949438 -vt 0.673077 0.943820 -vt 0.673077 0.949438 -vt 0.705128 0.960674 -vt 0.698718 0.966292 -vt 0.692308 0.966292 -vt 0.685897 0.966292 -vt 0.673077 0.955056 -vt 0.711538 0.949438 -vt 0.679487 0.960674 -vt 0.666667 0.949438 -vt 0.717949 0.949438 -vt 0.711538 0.955056 -vt 0.685897 1.000000 -vt 0.679487 0.966292 -vt 0.673077 1.000000 -vt 0.673077 0.966292 -vt 0.717949 0.966292 -vt 0.711538 1.000000 -vt 0.711538 0.966292 -vt 0.705128 1.000000 -vt 0.705128 0.966292 -vt 0.666667 1.000000 -vt 0.666667 0.966292 -vt 0.692308 1.000000 -vt 0.679487 1.000000 -vt 0.698718 1.000000 -vt 0.717949 1.000000 -vt 0.717949 0.932584 -vt 0.717949 0.932584 -vt 0.717949 1.000000 -vn 0.0000 -1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0196 -0.9987 -0.0473 -vn 0.0000 -0.7071 -0.7071 -vn 0.1447 -0.6794 -0.7194 -vn 0.1447 0.6794 -0.7194 -vn 0.0196 0.9987 -0.0473 -vn 0.0000 0.0000 -1.0000 -vn 0.1866 0.0000 -0.9824 -vn -0.1363 0.7263 0.6737 -vn 0.0000 0.0000 1.0000 -vn -0.7071 0.0000 0.7071 -vn -0.1363 -0.7263 0.6737 -vn 0.0000 -0.7071 0.7071 -vn 0.0000 0.7071 0.7071 -vn 0.0000 0.7071 -0.7071 -vn -0.4617 -0.7573 0.4617 -vn -0.6737 -0.7263 0.1363 -vn -0.4617 0.7573 0.4617 -vn -0.6737 0.7263 0.1363 -vn 0.5293 0.6630 -0.5293 -vn 0.0670 0.9955 -0.0670 -vn 0.5293 -0.6630 -0.5293 -vn 0.7071 0.0000 -0.7071 -vn 0.0670 -0.9955 -0.0670 -vn 0.7194 0.6794 -0.1447 -vn 0.7194 -0.6794 -0.1447 -vn 0.0473 0.9987 -0.0196 -vn 0.9824 0.0000 -0.1866 -vn 0.0473 -0.9987 -0.0196 -vn 0.7194 0.6794 0.1447 -vn 0.0473 0.9987 0.0196 -vn 0.7194 -0.6794 0.1447 -vn 0.9824 0.0000 0.1866 -vn -0.6737 0.7263 -0.1363 -vn -0.9809 0.0000 -0.1944 -vn -0.6737 -0.7263 -0.1363 -vn 0.0473 -0.9987 0.0196 -vn -0.4617 -0.7573 -0.4617 -vn -0.2611 -0.7311 -0.6303 -vn -0.4617 0.7573 -0.4617 -vn -0.2611 0.7311 -0.6303 -vn 0.0670 0.9955 0.0670 -vn 0.5293 0.6630 0.5293 -vn 0.7071 0.0000 0.7071 -vn 0.5293 -0.6630 0.5293 -vn 0.0670 -0.9955 0.0670 -vn 0.2962 -0.6332 0.7150 -vn 0.0392 -0.9947 0.0948 -vn 0.2962 0.6332 0.7150 -vn 0.0392 0.9947 0.0948 -vn 0.3827 0.0000 0.9239 -s off -f 2778/3606/212 2783/3607/212 2779/3608/212 -f 2779/3609/213 2785/3610/213 2781/3611/213 -f 2780/3612/214 2782/3613/214 2778/3606/214 -f 2781/3611/215 2784/3614/215 2780/3612/215 -f 2790/3615/213 2789/3616/213 2788/3617/213 -f 2787/3618/213 2793/3619/213 2786/3620/213 -f 2794/3621/213 2792/3622/213 2793/3619/213 -f 2795/3623/213 2791/3624/213 2792/3622/213 -f 2791/3624/213 2797/3625/213 2790/3615/213 -f 2802/3626/214 2801/3627/214 2809/3628/214 -f 2805/3629/214 2799/3630/214 2798/3631/214 -f 2804/3632/214 2806/3633/214 2805/3629/214 -f 2803/3634/214 2807/3635/214 2804/3632/214 -f 2803/3634/214 2809/3628/214 2808/3636/214 -f 2778/3606/212 2782/3613/212 2783/3607/212 -f 2779/3609/213 2783/3637/213 2785/3610/213 -f 2780/3612/214 2784/3614/214 2782/3613/214 -f 2781/3611/215 2785/3610/215 2784/3614/215 -f 2790/3615/213 2797/3625/213 2789/3616/213 -f 2787/3618/213 2794/3621/213 2793/3619/213 -f 2794/3621/213 2795/3623/213 2792/3622/213 -f 2795/3623/213 2796/3638/213 2791/3624/213 -f 2791/3624/213 2796/3638/213 2797/3625/213 -f 2802/3626/214 2800/3639/214 2801/3627/214 -f 2805/3629/214 2806/3633/214 2799/3630/214 -f 2804/3632/214 2807/3635/214 2806/3633/214 -f 2803/3634/214 2808/3636/214 2807/3635/214 -f 2803/3634/214 2802/3626/214 2809/3628/214 -s 1 -f 2683/3640/216 2676/3641/217 2684/3642/218 -f 2686/3643/219 2679/3644/215 2687/3645/220 -f 2684/3642/218 2677/3646/221 2685/3647/222 -f 2688/3648/223 2681/3649/224 2703/3650/225 -f 2682/3651/226 2675/3652/212 2683/3640/216 -f 2703/3653/225 2674/3654/227 2682/3651/226 -f 2687/3645/220 2680/3655/228 2688/3648/223 -f 2685/3647/222 2678/3656/229 2686/3643/219 -f 2689/3657/230 2703/3658/225 2682/3659/226 -f 2703/3658/225 2689/3657/230 2696/3660/231 -f 2695/3661/232 2688/3662/223 2703/3663/225 -f 2702/3664/233 2695/3661/232 2703/3663/225 -f 2693/3665/234 2687/3666/220 2694/3667/235 -f 2691/3668/236 2685/3647/222 2692/3669/237 -f 2689/3657/230 2683/3670/216 2690/3671/238 -f 2694/3667/235 2688/3662/223 2695/3661/232 -f 2693/3665/234 2685/3647/222 2686/3643/219 -f 2690/3671/238 2684/3642/218 2691/3668/236 -f 2702/3664/233 2694/3667/235 2695/3661/232 -f 2700/3672/239 2692/3669/237 2693/3665/234 -f 2698/3673/240 2690/3671/238 2691/3668/236 -f 2700/3672/239 2694/3667/235 2701/3674/241 -f 2698/3673/240 2692/3669/237 2699/3675/242 -f 2697/3676/243 2689/3657/230 2690/3671/238 -f 2708/3677/244 2701/3678/241 2709/3679/245 -f 2706/3680/246 2699/3675/242 2707/3681/247 -f 2710/3682/248 2703/3683/225 2725/3684/249 -f 2704/3685/250 2697/3686/243 2705/3687/251 -f 2725/3688/249 2696/3689/231 2704/3685/250 -f 2709/3679/245 2702/3690/233 2710/3682/248 -f 2707/3681/247 2700/3672/239 2708/3677/244 -f 2705/3687/251 2698/3673/240 2706/3680/246 -f 2711/3691/252 2725/3692/249 2704/3693/250 -f 2718/3694/253 2725/3692/249 2711/3691/252 -f 2717/3695/254 2710/3696/248 2725/3697/249 -f 2725/3697/249 2724/3698/255 2717/3695/254 -f 2708/3677/244 2716/3699/256 2715/3700/257 -f 2706/3680/246 2714/3701/258 2713/3702/259 -f 2711/3691/252 2705/3703/251 2712/3704/260 -f 2709/3705/245 2717/3695/254 2716/3699/256 -f 2714/3701/258 2708/3677/244 2715/3700/257 -f 2712/3704/260 2706/3680/246 2713/3702/259 -f 2712/3704/260 2720/3706/261 2719/3707/262 -f 2722/3708/263 2716/3699/256 2723/3709/264 -f 2720/3706/261 2714/3701/258 2721/3710/265 -f 2718/3694/253 2712/3704/260 2719/3707/262 -f 2723/3709/264 2717/3695/254 2724/3698/255 -f 2714/3701/258 2722/3708/263 2721/3710/265 -f 2737/3711/258 2729/3712/263 2730/3713/265 -f 2728/3714/264 2734/3715/254 2727/3716/255 -f 2733/3717/253 2739/3718/260 2732/3719/262 -f 2731/3720/261 2737/3711/258 2730/3713/265 -f 2729/3712/263 2735/3721/256 2728/3714/264 -f 2739/3718/260 2731/3720/261 2732/3719/262 -f 2739/3718/260 2745/3722/246 2738/3723/259 -f 2737/3711/258 2743/3724/244 2736/3725/257 -f 2742/3726/245 2734/3715/254 2735/3721/256 -f 2740/3727/252 2746/3728/251 2739/3718/260 -f 2745/3722/246 2737/3711/258 2738/3723/259 -f 2743/3724/244 2735/3721/256 2736/3725/257 -f 2726/3729/249 2727/3716/255 2734/3715/254 -f 2734/3715/254 2741/3730/248 2726/3729/249 -f 2733/3717/253 2726/3731/249 2740/3727/252 -f 2740/3727/252 2726/3731/249 2747/3732/250 -f 2746/3733/251 2753/3734/240 2745/3722/246 -f 2744/3735/247 2751/3736/239 2743/3724/244 -f 2742/3737/245 2749/3738/233 2741/3739/248 -f 2726/3740/249 2755/3741/231 2747/3742/250 -f 2747/3742/250 2754/3743/243 2746/3733/251 -f 2741/3739/248 2748/3744/225 2726/3745/249 -f 2745/3722/246 2752/3746/242 2744/3735/247 -f 2743/3724/244 2750/3747/241 2742/3737/245 -f 2755/3748/231 2761/3749/238 2754/3750/243 -f 2753/3734/240 2759/3751/237 2752/3746/242 -f 2751/3736/239 2757/3752/235 2750/3753/241 -f 2754/3750/243 2760/3754/236 2753/3734/240 -f 2751/3736/239 2759/3751/237 2758/3755/234 -f 2749/3756/233 2757/3752/235 2756/3757/232 -f 2760/3754/236 2768/3758/216 2767/3759/218 -f 2758/3755/234 2766/3760/222 2765/3761/219 -f 2757/3752/235 2763/3762/223 2756/3757/232 -f 2762/3763/230 2768/3758/216 2761/3749/238 -f 2760/3754/236 2766/3760/222 2759/3751/237 -f 2758/3755/234 2764/3764/220 2757/3752/235 -f 2749/3756/233 2756/3757/232 2748/3765/225 -f 2756/3757/232 2763/3762/223 2748/3765/225 -f 2748/3766/225 2762/3763/230 2755/3748/231 -f 2762/3763/230 2748/3766/225 2769/3767/226 -f 2766/3760/222 2773/3768/229 2765/3761/219 -f 2764/3769/220 2771/3770/228 2763/3771/223 -f 2748/3772/225 2777/3773/227 2769/3774/226 -f 2769/3774/226 2776/3775/212 2768/3776/216 -f 2763/3771/223 2770/3777/224 2748/3778/225 -f 2767/3759/218 2774/3779/221 2766/3760/222 -f 2765/3761/219 2772/3780/215 2764/3769/220 -f 2768/3776/216 2775/3781/217 2767/3759/218 -f 2683/3640/216 2675/3652/212 2676/3641/217 -f 2686/3643/219 2678/3656/229 2679/3644/215 -f 2684/3642/218 2676/3641/217 2677/3646/221 -f 2688/3648/223 2680/3655/228 2681/3649/224 -f 2682/3651/226 2674/3654/227 2675/3652/212 -f 2703/3653/225 2681/3782/224 2674/3654/227 -f 2687/3645/220 2679/3644/215 2680/3655/228 -f 2685/3647/222 2677/3646/221 2678/3656/229 -f 2693/3665/234 2686/3643/219 2687/3666/220 -f 2691/3668/236 2684/3642/218 2685/3647/222 -f 2689/3657/230 2682/3659/226 2683/3670/216 -f 2694/3667/235 2687/3666/220 2688/3662/223 -f 2693/3665/234 2692/3669/237 2685/3647/222 -f 2690/3671/238 2683/3670/216 2684/3642/218 -f 2702/3664/233 2701/3674/241 2694/3667/235 -f 2700/3672/239 2699/3675/242 2692/3669/237 -f 2698/3673/240 2697/3676/243 2690/3671/238 -f 2700/3672/239 2693/3665/234 2694/3667/235 -f 2698/3673/240 2691/3668/236 2692/3669/237 -f 2697/3676/243 2696/3660/231 2689/3657/230 -f 2708/3677/244 2700/3672/239 2701/3678/241 -f 2706/3680/246 2698/3673/240 2699/3675/242 -f 2710/3682/248 2702/3690/233 2703/3683/225 -f 2704/3685/250 2696/3689/231 2697/3686/243 -f 2725/3688/249 2703/3783/225 2696/3689/231 -f 2709/3679/245 2701/3678/241 2702/3690/233 -f 2707/3681/247 2699/3675/242 2700/3672/239 -f 2705/3687/251 2697/3686/243 2698/3673/240 -f 2708/3677/244 2709/3705/245 2716/3699/256 -f 2706/3680/246 2707/3681/247 2714/3701/258 -f 2711/3691/252 2704/3693/250 2705/3703/251 -f 2709/3705/245 2710/3696/248 2717/3695/254 -f 2714/3701/258 2707/3681/247 2708/3677/244 -f 2712/3704/260 2705/3703/251 2706/3680/246 -f 2712/3704/260 2713/3702/259 2720/3706/261 -f 2722/3708/263 2715/3700/257 2716/3699/256 -f 2720/3706/261 2713/3702/259 2714/3701/258 -f 2718/3694/253 2711/3691/252 2712/3704/260 -f 2723/3709/264 2716/3699/256 2717/3695/254 -f 2714/3701/258 2715/3700/257 2722/3708/263 -f 2737/3711/258 2736/3725/257 2729/3712/263 -f 2728/3714/264 2735/3721/256 2734/3715/254 -f 2733/3717/253 2740/3727/252 2739/3718/260 -f 2731/3720/261 2738/3723/259 2737/3711/258 -f 2729/3712/263 2736/3725/257 2735/3721/256 -f 2739/3718/260 2738/3723/259 2731/3720/261 -f 2739/3718/260 2746/3728/251 2745/3722/246 -f 2737/3711/258 2744/3735/247 2743/3724/244 -f 2742/3726/245 2741/3730/248 2734/3715/254 -f 2740/3727/252 2747/3732/250 2746/3728/251 -f 2745/3722/246 2744/3735/247 2737/3711/258 -f 2743/3724/244 2742/3726/245 2735/3721/256 -f 2746/3733/251 2754/3743/243 2753/3734/240 -f 2744/3735/247 2752/3746/242 2751/3736/239 -f 2742/3737/245 2750/3747/241 2749/3738/233 -f 2726/3740/249 2748/3784/225 2755/3741/231 -f 2747/3742/250 2755/3741/231 2754/3743/243 -f 2741/3739/248 2749/3738/233 2748/3744/225 -f 2745/3722/246 2753/3734/240 2752/3746/242 -f 2743/3724/244 2751/3736/239 2750/3747/241 -f 2755/3748/231 2762/3763/230 2761/3749/238 -f 2753/3734/240 2760/3754/236 2759/3751/237 -f 2751/3736/239 2758/3755/234 2757/3752/235 -f 2754/3750/243 2761/3749/238 2760/3754/236 -f 2751/3736/239 2752/3746/242 2759/3751/237 -f 2749/3756/233 2750/3753/241 2757/3752/235 -f 2760/3754/236 2761/3749/238 2768/3758/216 -f 2758/3755/234 2759/3751/237 2766/3760/222 -f 2757/3752/235 2764/3764/220 2763/3762/223 -f 2762/3763/230 2769/3767/226 2768/3758/216 -f 2760/3754/236 2767/3759/218 2766/3760/222 -f 2758/3755/234 2765/3761/219 2764/3764/220 -f 2766/3760/222 2774/3779/221 2773/3768/229 -f 2764/3769/220 2772/3780/215 2771/3770/228 -f 2748/3772/225 2770/3785/224 2777/3773/227 -f 2769/3774/226 2777/3773/227 2776/3775/212 -f 2763/3771/223 2771/3770/228 2770/3777/224 -f 2767/3759/218 2775/3781/217 2774/3779/221 -f 2765/3761/219 2773/3768/229 2772/3780/215 -f 2768/3776/216 2776/3775/212 2775/3781/217 -o Strong_Pivot -v 0.750000 1.500000 -2.750000 -v 0.250000 1.500000 -2.750000 -v 0.250000 1.500000 -3.250000 -v 0.750000 1.500000 -3.250000 -v 0.250000 3.500000 -2.750000 +f 1993/3077/357 1994/3078/357 1995/3079/357 +f 1996/3080/357 1997/3081/357 1998/3082/357 +f 1999/3083/358 2000/3084/358 2001/3085/358 +f 1997/3081/359 2001/3085/359 2002/3086/359 +f 2003/3087/360 2004/3088/360 2005/3089/360 +f 2002/3090/361 2006/3091/361 2003/3092/361 +f 2005/3093/362 1999/3094/362 1997/3095/362 +f 2000/3096/361 2007/3097/361 2008/3098/361 +f 2001/3099/358 2008/3098/358 2006/3091/358 +f 2006/3100/358 2009/3101/358 2004/3088/358 +f 2004/3102/358 2010/3103/358 1999/3094/358 +f 2011/3104/357 2005/3105/357 1996/3080/357 +f 2009/3106/362 2012/3107/362 2010/3103/362 +f 2010/3108/359 2013/3109/359 2000/3084/359 +f 2008/3110/360 2014/3111/360 2009/3101/360 +f 2015/3112/357 2003/3113/357 2011/3104/357 +f 1998/3082/357 2002/3086/357 2015/3112/357 +f 2016/3114/363 1996/3080/363 1998/3082/363 +f 2017/3115/364 2011/3104/364 1996/3080/364 +f 2018/3116/365 2015/3112/365 2011/3104/365 +f 2019/3117/366 1998/3082/366 2015/3112/366 +f 2020/3118/361 2021/3119/361 2022/3120/361 +f 2023/3121/357 2024/3122/357 2025/3123/357 +f 2026/3124/359 2023/3121/359 2027/3125/359 +f 2025/3123/362 2027/3126/362 2023/3121/362 +f 2022/3120/363 2026/3124/363 2020/3118/363 +f 2022/3127/360 2021/3128/360 2028/3129/360 +f 2029/3130/361 2030/3131/361 2031/3132/361 +f 2032/3133/360 2033/3134/360 2034/3135/360 +f 2035/3136/362 2032/3133/362 2034/3137/362 +f 2036/3138/359 2037/3139/359 2035/3140/359 +f 2038/3141/357 2029/3130/357 2032/3133/357 +f 2039/3142/358 2040/3143/358 2041/3144/358 +f 2040/3145/362 2042/3146/362 2041/3147/362 +f 2043/3148/357 2044/3149/357 2042/3146/357 +f 2039/3150/361 2045/3151/361 2046/3152/361 +f 2047/3153/362 2048/3154/362 2049/3155/362 +f 2041/3156/360 2044/3149/360 2039/3157/360 +f 2046/3158/359 2043/3148/359 2040/3159/359 +f 2050/3160/362 2051/3161/362 2052/3162/362 +f 2053/3163/359 2054/3164/359 2055/3165/359 +f 2056/3166/359 2057/3167/359 2050/3160/359 +f 2058/3168/361 2059/3169/361 2053/3163/361 +f 2060/3170/361 2061/3171/361 2056/3166/361 +f 2062/3172/360 2063/3173/360 2064/3174/360 +f 2065/3175/360 2066/3176/360 2067/3177/360 +f 2068/3178/362 2069/3179/362 2062/3172/362 +f 2070/3180/362 2071/3181/362 2065/3175/362 +f 2072/3182/359 2073/3183/359 2068/3178/359 +f 2074/3184/359 2075/3185/359 2070/3180/359 +f 2064/3174/361 2076/3186/361 2072/3187/361 +f 2077/3188/360 2078/3189/360 2058/3168/360 +f 2067/3190/361 2079/3191/361 2074/3184/361 +f 2052/3192/360 2080/3193/360 2060/3170/360 +f 2055/3194/362 2081/3195/362 2077/3188/362 +f 2082/3196/361 2083/3197/361 2084/3198/361 +f 2085/3199/359 2086/3200/359 2087/3201/359 +f 2088/3202/360 2089/3203/360 2090/3204/360 +f 2091/3205/358 2092/3206/358 2093/3207/358 +f 2092/3208/362 2094/3209/362 2093/3210/362 +f 2095/3211/357 2096/3212/357 2094/3209/357 +f 2091/3213/361 2097/3214/361 2098/3215/361 +f 2099/3216/362 2100/3217/362 2101/3218/362 +f 2093/3219/360 2096/3212/360 2091/3220/360 +f 2098/3221/359 2095/3211/359 2092/3222/359 +f 2102/3223/362 2103/3224/362 2104/3225/362 +f 2105/3226/359 2106/3227/359 2107/3228/359 +f 2108/3229/359 2109/3230/359 2102/3223/359 +f 2110/3231/361 2111/3232/361 2105/3226/361 +f 2112/3233/361 2113/3234/361 2108/3229/361 +f 2114/3235/360 2115/3236/360 2116/3237/360 +f 2117/3238/360 2118/3239/360 2119/3240/360 +f 2120/3241/362 2121/3242/362 2114/3235/362 +f 2122/3243/362 2123/3244/362 2117/3238/362 +f 2124/3245/359 2125/3246/359 2120/3241/359 +f 2126/3247/359 2127/3248/359 2122/3243/359 +f 2116/3237/361 2128/3249/361 2124/3250/361 +f 2129/3251/360 2130/3252/360 2110/3231/360 +f 2119/3253/361 2131/3254/361 2126/3247/361 +f 2104/3255/360 2132/3256/360 2112/3233/360 +f 2107/3257/362 2133/3258/362 2129/3251/362 +f 2134/3259/361 2135/3260/361 2136/3261/361 +f 2137/3262/359 2138/3263/359 2139/3264/359 +f 2140/3265/360 2141/3266/360 2142/3267/360 +f 2143/3268/358 2144/3269/358 2145/3270/358 +f 2144/3271/362 2146/3272/362 2145/3273/362 +f 2147/3274/357 2148/3275/357 2146/3272/357 +f 2143/3276/361 2149/3277/361 2150/3278/361 +f 2151/3279/362 2152/3280/362 2153/3281/362 +f 2145/3282/360 2148/3275/360 2143/3283/360 +f 2150/3284/359 2147/3274/359 2144/3285/359 +f 2154/3286/362 2155/3287/362 2156/3288/362 +f 2157/3289/359 2158/3290/359 2159/3291/359 +f 2160/3292/359 2161/3293/359 2154/3286/359 +f 2162/3294/361 2163/3295/361 2157/3289/361 +f 2164/3296/361 2165/3297/361 2160/3292/361 +f 2166/3298/360 2167/3299/360 2168/3300/360 +f 2169/3301/360 2170/3302/360 2171/3303/360 +f 2172/3304/362 2173/3305/362 2166/3298/362 +f 2174/3306/362 2175/3307/362 2169/3301/362 +f 2176/3308/359 2177/3309/359 2172/3304/359 +f 2178/3310/359 2179/3311/359 2174/3306/359 +f 2168/3300/361 2180/3312/361 2176/3313/361 +f 2181/3314/360 2182/3315/360 2162/3294/360 +f 2171/3316/361 2183/3317/361 2178/3310/361 +f 2156/3318/360 2184/3319/360 2164/3296/360 +f 2159/3320/362 2185/3321/362 2181/3314/362 +f 2186/3322/361 2187/3323/361 2188/3324/361 +f 2189/3325/359 2190/3326/359 2191/3327/359 +f 2192/3328/360 2193/3329/360 2194/3330/360 +f 2195/3331/358 2196/3332/358 2197/3333/358 +f 2196/3334/362 2198/3335/362 2197/3336/362 +f 2199/3337/357 2200/3338/357 2198/3335/357 +f 2195/3339/361 2201/3340/361 2202/3341/361 +f 2203/3342/362 2204/3343/362 2205/3344/362 +f 2197/3345/360 2200/3338/360 2195/3346/360 +f 2202/3347/359 2199/3337/359 2196/3348/359 +f 2206/3349/362 2207/3350/362 2208/3351/362 +f 2209/3352/359 2210/3353/359 2211/3354/359 +f 2212/3355/359 2213/3356/359 2206/3349/359 +f 2214/3357/361 2215/3358/361 2209/3352/361 +f 2216/3359/361 2217/3360/361 2212/3355/361 +f 2218/3361/360 2219/3362/360 2220/3363/360 +f 2221/3364/360 2222/3365/360 2223/3366/360 +f 2224/3367/362 2225/3368/362 2218/3361/362 +f 2226/3369/362 2227/3370/362 2221/3364/362 +f 2228/3371/359 2229/3372/359 2224/3367/359 +f 2230/3373/359 2231/3374/359 2226/3369/359 +f 2220/3363/361 2232/3375/361 2228/3376/361 +f 2233/3377/360 2234/3378/360 2214/3357/360 +f 2223/3379/361 2235/3380/361 2230/3373/361 +f 2208/3381/360 2236/3382/360 2216/3359/360 +f 2211/3383/362 2237/3384/362 2233/3377/362 +f 2238/3385/361 2239/3386/361 2240/3387/361 +f 2241/3388/359 2242/3389/359 2243/3390/359 +f 2244/3391/360 2245/3392/360 2246/3393/360 +f 2247/3394/367 2248/3395/367 2249/3396/367 +f 2250/3397/368 2251/3398/368 2252/3399/368 +f 2253/3400/358 2254/3401/358 2255/3402/358 +f 2256/3403/369 2254/3404/369 2257/3405/369 +f 2258/3406/357 2256/3403/357 2259/3407/357 +f 2259/3407/370 2257/3408/370 2253/3409/370 +f 2260/3410/358 2261/3411/358 2262/3412/358 +f 2263/3413/357 2264/3414/357 2265/3415/357 +f 2260/3416/371 2266/3417/371 2267/3418/371 +f 2265/3415/372 2260/3419/372 2262/3420/372 +f 2255/3421/360 2268/3422/360 2269/3423/360 +f 2261/3424/359 2270/3425/359 2271/3426/359 +f 2255/3427/372 2272/3428/372 2258/3406/372 +f 2261/3429/370 2266/3417/370 2263/3413/370 +f 2273/3430/362 2259/3431/362 2253/3432/362 +f 2274/3433/361 2265/3434/361 2262/3435/361 +f 2261/3436/358 2273/3437/358 2255/3438/358 +f 2275/3439/357 2263/3440/357 2276/3441/357 +f 2271/3426/370 2275/3442/370 2273/3443/370 +f 2269/3423/372 2276/3444/372 2274/3445/372 +f 2277/3446/372 2278/3447/372 2279/3448/372 +f 2280/3449/361 2281/3450/361 2282/3451/361 +f 2283/3452/370 2284/3453/370 2285/3454/370 +f 2284/3455/357 2286/3456/357 2278/3457/357 +f 2287/3458/358 2285/3459/358 2288/3460/358 +f 2289/3461/361 2290/3462/361 2291/3463/361 +f 2292/3464/362 2293/3465/362 2294/3466/362 +f 2294/3466/360 2295/3467/360 2296/3468/360 +f 2296/3469/361 2297/3470/361 2298/3471/361 +f 2299/3472/362 2300/3473/362 2301/3474/362 +f 2301/3474/360 2302/3475/360 2303/3476/360 +f 2282/3451/359 2304/3477/359 2305/3478/359 +f 2306/3479/359 2307/3480/359 2299/3472/359 +f 2303/3481/361 2308/3482/361 2306/3479/361 +f 2309/3483/360 2310/3484/360 2289/3485/360 +f 2311/3486/360 2312/3487/360 2280/3488/360 +f 2291/3463/359 2313/3489/359 2314/3490/359 +f 2314/3490/362 2315/3491/362 2309/3483/362 +f 2305/3478/362 2316/3492/362 2311/3486/362 +f 2298/3471/359 2317/3493/359 2292/3464/359 +f 2318/3494/372 2319/3495/372 2320/3496/372 +f 2321/3497/370 2322/3498/370 2323/3499/370 +f 2324/3500/369 2325/3501/369 2326/3502/369 +f 2327/3503/371 2328/3504/371 2329/3505/371 +f 2279/3506/361 2330/3507/361 2331/3508/361 +f 2285/3509/362 2332/3510/362 2333/3511/362 +f 2287/3512/370 2334/3513/370 2286/3514/370 +f 2288/3515/372 2335/3516/372 2336/3517/372 +f 2287/3518/359 2337/3519/359 2283/3452/359 +f 2288/3520/360 2338/3521/360 2277/3446/360 +f 2339/3522/358 2340/3523/358 2341/3524/358 +f 2342/3525/357 2343/3526/357 2344/3527/357 +f 2345/3528/370 2342/3529/370 2340/3530/370 +f 2346/3531/372 2344/3532/372 2347/3533/372 +f 2347/3534/361 2348/3535/361 2349/3536/361 +f 2340/3537/362 2350/3538/362 2351/3539/362 +f 2349/3540/371 2343/3526/371 2339/3541/371 +f 2351/3542/369 2352/3543/369 2341/3544/369 +f 2339/3541/359 2353/3545/359 2345/3528/359 +f 2341/3544/360 2354/3546/360 2346/3531/360 +f 2330/3547/372 2355/3548/372 2331/3549/372 +f 2355/3550/371 2334/3513/371 2356/3551/371 +f 2286/3514/357 2357/3552/357 2330/3547/357 +f 2355/3553/358 2287/3554/358 2331/3555/358 +f 2332/3556/370 2358/3557/370 2333/3558/370 +f 2336/3517/357 2359/3559/357 2332/3556/357 +f 2359/3559/369 2360/3560/369 2358/3561/369 +f 2333/3562/358 2360/3563/358 2288/3564/358 +f 2361/3565/359 2362/3566/359 2363/3567/359 +f 2364/3568/360 2365/3569/360 2366/3570/360 +f 2367/3571/361 2364/3568/361 2362/3566/361 +f 2363/3567/362 2365/3572/362 2361/3565/362 +f 2361/3565/358 2368/3573/358 2367/3571/358 +f 2362/3566/357 2366/3574/357 2363/3567/357 +f 2369/3575/357 2370/3576/357 2371/3577/357 +f 2372/3578/359 2369/3575/359 2373/3579/359 +f 2374/3580/360 2370/3576/360 2375/3581/360 +f 2375/3582/361 2376/3583/361 2372/3584/361 +f 2373/3585/362 2371/3577/362 2374/3586/362 +f 2377/3587/361 2378/3588/361 2379/3589/361 +f 2378/3588/373 2380/3590/373 2381/3591/373 +f 2382/3592/360 2383/3593/360 2384/3594/360 +f 2380/3590/362 2385/3595/362 2381/3591/362 +f 2382/3592/374 2386/3596/374 2387/3597/374 +f 2388/3598/375 2383/3599/375 2389/3600/375 +f 2390/3601/376 2379/3589/376 2385/3602/376 +f 2387/3597/359 2391/3603/359 2388/3598/359 +f 2392/3604/359 2393/3605/359 2394/3606/359 +f 2395/3607/360 2396/3608/360 2397/3609/360 +f 2397/3609/377 2393/3605/377 2398/3610/377 +f 2392/3604/378 2399/3611/378 2395/3612/378 +f 2400/3613/379 2401/3614/379 2402/3615/379 +f 2403/3616/370 2402/3615/370 2404/3617/370 +f 2405/3618/380 2404/3617/380 2406/3619/380 +f 2407/3620/372 2406/3619/372 2401/3621/372 +f 2408/3622/371 2409/3623/371 2410/3624/371 +f 2411/3625/381 2412/3626/381 2413/3627/381 +f 2414/3628/382 2415/3629/382 2416/3630/382 +f 2417/3631/370 2418/3632/370 2419/3633/370 +f 2420/3634/372 2421/3635/372 2422/3636/372 +f 2423/3637/371 2424/3638/371 2425/3639/371 +f 2426/3640/369 2427/3641/369 2428/3642/369 +f 2429/3643/361 2430/3644/361 2431/3645/361 +f 2432/3646/362 2433/3647/362 2434/3648/362 +f 2435/3649/360 2436/3650/360 2437/3651/360 +f 2438/3652/359 2439/3653/359 2440/3654/359 +f 2441/3655/361 2442/3656/361 2443/3657/361 +f 2444/3658/362 2445/3659/362 2446/3660/362 +f 2447/3661/360 2448/3662/360 2449/3663/360 +f 2450/3664/359 2451/3665/359 2452/3666/359 +f 2453/3667/361 2454/3668/361 2455/3669/361 +f 2456/3670/362 2457/3671/362 2458/3672/362 +f 2459/3673/360 2460/3674/360 2461/3675/360 +f 2462/3676/359 2463/3677/359 2464/3678/359 +f 2465/3679/361 2466/3680/361 2467/3681/361 +f 2468/3682/362 2469/3683/362 2470/3684/362 +f 2471/3685/360 2472/3686/360 2473/3687/360 +f 2474/3688/359 2475/3689/359 2476/3690/359 +f 2477/3691/369 2478/3692/369 2479/3693/369 +f 2480/3694/372 2477/3691/372 2409/3623/372 +f 2410/3624/370 2478/3695/370 2408/3622/370 +f 2408/3622/358 2481/3696/358 2480/3694/358 +f 2409/3623/357 2479/3697/357 2410/3624/357 +f 2482/3698/357 2483/3699/357 2484/3700/357 +f 2485/3701/371 2482/3698/371 2486/3702/371 +f 2487/3703/369 2483/3699/369 2488/3704/369 +f 2488/3705/372 2489/3706/372 2485/3707/372 +f 2486/3708/370 2484/3700/370 2487/3709/370 +f 2490/3710/372 2491/3711/372 2492/3712/372 +f 2491/3711/383 2493/3713/383 2494/3714/383 +f 2495/3715/369 2496/3716/369 2497/3717/369 +f 2493/3713/370 2498/3718/370 2494/3714/370 +f 2495/3715/384 2499/3719/384 2500/3720/384 +f 2501/3721/385 2496/3722/385 2502/3723/385 +f 2503/3724/386 2492/3712/386 2498/3725/386 +f 2500/3720/371 2504/3726/371 2501/3721/371 +f 2505/3727/371 2506/3728/371 2507/3729/371 +f 2508/3730/369 2509/3731/369 2510/3732/369 +f 2510/3732/387 2506/3728/387 2511/3733/387 +f 2505/3727/388 2512/3734/388 2508/3735/388 +f 2513/3736/370 2514/3737/370 2515/3738/370 +f 2516/3739/372 2517/3740/372 2518/3741/372 +f 2519/3742/371 2516/3739/371 2514/3737/371 +f 2515/3738/369 2517/3743/369 2513/3736/369 +f 2513/3736/358 2520/3744/358 2519/3742/358 +f 2515/3738/357 2516/3745/357 2518/3746/357 +f 2521/3747/357 2522/3748/357 2523/3749/357 +f 2524/3750/370 2521/3747/370 2525/3751/370 +f 2526/3752/372 2522/3748/372 2527/3753/372 +f 2527/3754/371 2528/3755/371 2524/3756/371 +f 2525/3757/369 2523/3749/369 2526/3758/369 +f 2529/3759/371 2530/3760/371 2531/3761/371 +f 2530/3760/389 2532/3762/389 2533/3763/389 +f 2534/3764/372 2535/3765/372 2536/3766/372 +f 2532/3762/369 2537/3767/369 2533/3763/369 +f 2534/3764/390 2538/3768/390 2539/3769/390 +f 2540/3770/391 2535/3771/391 2541/3772/391 +f 2542/3773/392 2531/3761/392 2537/3774/392 +f 2539/3769/370 2543/3775/370 2540/3770/370 +f 2544/3776/370 2545/3777/370 2546/3778/370 +f 2547/3779/372 2548/3780/372 2549/3781/372 +f 2550/3782/393 2548/3780/393 2545/3777/393 +f 2544/3776/394 2551/3783/394 2547/3784/394 +f 2552/3785/360 2553/3786/360 2554/3787/360 +f 2555/3788/359 2556/3789/359 2557/3790/359 +f 2558/3791/362 2555/3788/362 2553/3786/362 +f 2554/3787/361 2556/3792/361 2552/3785/361 +f 2552/3785/358 2559/3793/358 2558/3791/358 +f 2553/3786/357 2557/3794/357 2554/3787/357 +f 2560/3795/357 2561/3796/357 2562/3797/357 +f 2563/3798/360 2560/3795/360 2564/3799/360 +f 2565/3800/359 2561/3796/359 2566/3801/359 +f 2566/3802/362 2567/3803/362 2563/3804/362 +f 2564/3805/361 2562/3797/361 2565/3806/361 +f 2568/3807/362 2569/3808/362 2570/3809/362 +f 2569/3808/395 2571/3810/395 2572/3811/395 +f 2573/3812/359 2574/3813/359 2575/3814/359 +f 2571/3810/361 2576/3815/361 2572/3811/361 +f 2573/3812/378 2577/3816/378 2578/3817/378 +f 2579/3818/377 2574/3819/377 2580/3820/377 +f 2576/3821/396 2568/3807/396 2570/3809/396 +f 2578/3817/360 2581/3822/360 2579/3818/360 +f 2582/3823/360 2583/3824/360 2584/3825/360 +f 2585/3826/359 2586/3827/359 2587/3828/359 +f 2587/3828/375 2583/3824/375 2588/3829/375 +f 2582/3823/374 2589/3830/374 2585/3831/374 +f 2590/3832/372 2591/3833/372 2592/3834/372 +f 2593/3835/370 2594/3836/370 2595/3837/370 +f 2596/3838/369 2593/3835/369 2591/3833/369 +f 2592/3834/371 2594/3839/371 2590/3832/371 +f 2590/3832/358 2597/3840/358 2596/3838/358 +f 2592/3834/357 2593/3841/357 2595/3842/357 +f 2598/3843/357 2599/3844/357 2600/3845/357 +f 2601/3846/372 2598/3843/372 2602/3847/372 +f 2603/3848/370 2599/3844/370 2604/3849/370 +f 2604/3850/369 2605/3851/369 2601/3852/369 +f 2602/3853/371 2600/3845/371 2603/3854/371 +f 2606/3855/369 2607/3856/369 2608/3857/369 +f 2607/3856/397 2609/3858/397 2610/3859/397 +f 2611/3860/370 2612/3861/370 2613/3862/370 +f 2609/3858/371 2614/3863/371 2610/3859/371 +f 2611/3860/394 2615/3864/394 2616/3865/394 +f 2617/3866/393 2612/3867/393 2618/3868/393 +f 2614/3869/398 2606/3855/398 2608/3857/398 +f 2616/3865/372 2619/3870/372 2617/3866/372 +f 2620/3871/372 2621/3872/372 2622/3873/372 +f 2623/3874/370 2624/3875/370 2625/3876/370 +f 2626/3877/391 2624/3875/391 2621/3872/391 +f 2620/3871/390 2627/3878/390 2623/3879/390 +f 2628/3880/369 2629/3881/369 2630/3882/369 +f 2631/3883/371 2632/3884/371 2633/3885/371 +f 2634/3886/370 2631/3883/370 2629/3881/370 +f 2630/3882/372 2632/3887/372 2628/3880/372 +f 2628/3880/358 2635/3888/358 2634/3886/358 +f 2629/3881/357 2633/3889/357 2630/3882/357 +f 2636/3890/371 2637/3891/371 2638/3892/371 +f 2636/3890/388 2639/3893/388 2640/3894/388 +f 2641/3895/387 2637/3896/387 2642/3897/387 +f 2640/3894/369 2643/3898/369 2641/3895/369 +f 2644/3899/369 2645/3900/369 2646/3901/369 +f 2647/3902/371 2648/3903/371 2649/3904/371 +f 2649/3904/385 2645/3900/385 2650/3905/385 +f 2644/3899/384 2651/3906/384 2647/3907/384 +f 1993/3077/357 2652/3908/357 1994/3078/357 +f 1996/3080/357 2005/3105/357 1997/3081/357 +f 1999/3083/358 2010/3108/358 2000/3084/358 +f 1997/3081/359 1999/3083/359 2001/3085/359 +f 2003/3087/360 2006/3100/360 2004/3088/360 +f 2002/3090/361 2001/3099/361 2006/3091/361 +f 2005/3093/362 2004/3102/362 1999/3094/362 +f 2000/3096/361 2013/3909/361 2007/3097/361 +f 2001/3099/358 2000/3096/358 2008/3098/358 +f 2006/3100/358 2008/3110/358 2009/3101/358 +f 2004/3102/358 2009/3106/358 2010/3103/358 +f 2011/3104/357 2003/3113/357 2005/3105/357 +f 2009/3106/362 2014/3910/362 2012/3107/362 +f 2010/3108/359 2012/3911/359 2013/3109/359 +f 2008/3110/360 2007/3912/360 2014/3111/360 +f 2015/3112/357 2002/3086/357 2003/3113/357 +f 1998/3082/357 1997/3081/357 2002/3086/357 +f 2016/3114/363 2017/3115/363 1996/3080/363 +f 2017/3115/364 2018/3116/364 2011/3104/364 +f 2018/3116/365 2019/3117/365 2015/3112/365 +f 2019/3117/366 2016/3114/366 1998/3082/366 +f 2020/3118/361 2653/3913/361 2021/3119/361 +f 2023/3121/357 2026/3124/357 2024/3122/357 +f 2653/3914/359 2020/3915/359 2027/3125/359 +f 2020/3915/359 2026/3124/359 2027/3125/359 +f 2025/3123/362 2028/3916/362 2027/3126/362 +f 2022/3120/363 2024/3122/363 2026/3124/363 +f 2028/3129/360 2025/3123/360 2024/3122/360 +f 2024/3122/360 2022/3127/360 2028/3129/360 +f 2031/3132/361 2654/3917/361 2655/3918/361 +f 2655/3918/361 2033/3919/361 2031/3132/361 +f 2033/3919/361 2029/3130/361 2031/3132/361 +f 2032/3133/360 2029/3130/360 2033/3134/360 +f 2035/3136/362 2037/3139/362 2032/3133/362 +f 2035/3140/359 2656/3920/359 2036/3138/359 +f 2656/3920/359 2657/3921/359 2036/3138/359 +f 2036/3138/359 2658/3922/359 2037/3139/359 +f 2037/3139/357 2658/3922/357 2038/3141/357 +f 2038/3141/357 2030/3131/357 2029/3130/357 +f 2032/3133/357 2037/3139/357 2038/3141/357 +f 2039/3142/358 2046/3923/358 2040/3143/358 +f 2040/3145/362 2043/3148/362 2042/3146/362 +f 2043/3148/357 2045/3151/357 2044/3149/357 +f 2039/3150/361 2044/3149/361 2045/3151/361 +f 2047/3153/362 2659/3924/362 2048/3154/362 +f 2041/3156/360 2042/3146/360 2044/3149/360 +f 2046/3158/359 2045/3151/359 2043/3148/359 +f 2050/3160/362 2057/3167/362 2051/3161/362 +f 2053/3163/359 2059/3169/359 2054/3164/359 +f 2056/3166/359 2061/3171/359 2057/3167/359 +f 2058/3168/361 2078/3189/361 2059/3169/361 +f 2060/3170/361 2080/3193/361 2061/3171/361 +f 2062/3172/360 2069/3179/360 2063/3173/360 +f 2065/3175/360 2071/3181/360 2066/3176/360 +f 2068/3178/362 2073/3183/362 2069/3179/362 +f 2070/3180/362 2075/3185/362 2071/3181/362 +f 2072/3182/359 2076/3925/359 2073/3183/359 +f 2074/3184/359 2079/3191/359 2075/3185/359 +f 2064/3174/361 2063/3173/361 2076/3186/361 +f 2077/3188/360 2081/3195/360 2078/3189/360 +f 2067/3190/361 2066/3926/361 2079/3191/361 +f 2052/3192/360 2051/3927/360 2080/3193/360 +f 2055/3194/362 2054/3928/362 2081/3195/362 +f 2082/3196/361 2660/3929/361 2083/3197/361 +f 2085/3199/359 2661/3930/359 2086/3200/359 +f 2088/3202/360 2662/3931/360 2089/3203/360 +f 2091/3205/358 2098/3932/358 2092/3206/358 +f 2092/3208/362 2095/3211/362 2094/3209/362 +f 2095/3211/357 2097/3214/357 2096/3212/357 +f 2091/3213/361 2096/3212/361 2097/3214/361 +f 2099/3216/362 2663/3933/362 2100/3217/362 +f 2093/3219/360 2094/3209/360 2096/3212/360 +f 2098/3221/359 2097/3214/359 2095/3211/359 +f 2102/3223/362 2109/3230/362 2103/3224/362 +f 2105/3226/359 2111/3232/359 2106/3227/359 +f 2108/3229/359 2113/3234/359 2109/3230/359 +f 2110/3231/361 2130/3252/361 2111/3232/361 +f 2112/3233/361 2132/3256/361 2113/3234/361 +f 2114/3235/360 2121/3242/360 2115/3236/360 +f 2117/3238/360 2123/3244/360 2118/3239/360 +f 2120/3241/362 2125/3246/362 2121/3242/362 +f 2122/3243/362 2127/3248/362 2123/3244/362 +f 2124/3245/359 2128/3934/359 2125/3246/359 +f 2126/3247/359 2131/3254/359 2127/3248/359 +f 2116/3237/361 2115/3236/361 2128/3249/361 +f 2129/3251/360 2133/3258/360 2130/3252/360 +f 2119/3253/361 2118/3935/361 2131/3254/361 +f 2104/3255/360 2103/3936/360 2132/3256/360 +f 2107/3257/362 2106/3937/362 2133/3258/362 +f 2134/3259/361 2664/3938/361 2135/3260/361 +f 2137/3262/359 2665/3939/359 2138/3263/359 +f 2140/3265/360 2666/3940/360 2141/3266/360 +f 2143/3268/358 2150/3941/358 2144/3269/358 +f 2144/3271/362 2147/3274/362 2146/3272/362 +f 2147/3274/357 2149/3277/357 2148/3275/357 +f 2143/3276/361 2148/3275/361 2149/3277/361 +f 2151/3279/362 2667/3942/362 2152/3280/362 +f 2145/3282/360 2146/3272/360 2148/3275/360 +f 2150/3284/359 2149/3277/359 2147/3274/359 +f 2154/3286/362 2161/3293/362 2155/3287/362 +f 2157/3289/359 2163/3295/359 2158/3290/359 +f 2160/3292/359 2165/3297/359 2161/3293/359 +f 2162/3294/361 2182/3315/361 2163/3295/361 +f 2164/3296/361 2184/3319/361 2165/3297/361 +f 2166/3298/360 2173/3305/360 2167/3299/360 +f 2169/3301/360 2175/3307/360 2170/3302/360 +f 2172/3304/362 2177/3309/362 2173/3305/362 +f 2174/3306/362 2179/3311/362 2175/3307/362 +f 2176/3308/359 2180/3943/359 2177/3309/359 +f 2178/3310/359 2183/3317/359 2179/3311/359 +f 2168/3300/361 2167/3299/361 2180/3312/361 +f 2181/3314/360 2185/3321/360 2182/3315/360 +f 2171/3316/361 2170/3944/361 2183/3317/361 +f 2156/3318/360 2155/3945/360 2184/3319/360 +f 2159/3320/362 2158/3946/362 2185/3321/362 +f 2186/3322/361 2668/3947/361 2187/3323/361 +f 2189/3325/359 2669/3948/359 2190/3326/359 +f 2192/3328/360 2670/3949/360 2193/3329/360 +f 2195/3331/358 2202/3950/358 2196/3332/358 +f 2196/3334/362 2199/3337/362 2198/3335/362 +f 2199/3337/357 2201/3340/357 2200/3338/357 +f 2195/3339/361 2200/3338/361 2201/3340/361 +f 2203/3342/362 2671/3951/362 2204/3343/362 +f 2197/3345/360 2198/3335/360 2200/3338/360 +f 2202/3347/359 2201/3340/359 2199/3337/359 +f 2206/3349/362 2213/3356/362 2207/3350/362 +f 2209/3352/359 2215/3358/359 2210/3353/359 +f 2212/3355/359 2217/3360/359 2213/3356/359 +f 2214/3357/361 2234/3378/361 2215/3358/361 +f 2216/3359/361 2236/3382/361 2217/3360/361 +f 2218/3361/360 2225/3368/360 2219/3362/360 +f 2221/3364/360 2227/3370/360 2222/3365/360 +f 2224/3367/362 2229/3372/362 2225/3368/362 +f 2226/3369/362 2231/3374/362 2227/3370/362 +f 2228/3371/359 2232/3952/359 2229/3372/359 +f 2230/3373/359 2235/3380/359 2231/3374/359 +f 2220/3363/361 2219/3362/361 2232/3375/361 +f 2233/3377/360 2237/3384/360 2234/3378/360 +f 2223/3379/361 2222/3953/361 2235/3380/361 +f 2208/3381/360 2207/3954/360 2236/3382/360 +f 2211/3383/362 2210/3955/362 2237/3384/362 +f 2238/3385/361 2672/3956/361 2239/3386/361 +f 2241/3388/359 2673/3957/359 2242/3389/359 +f 2244/3391/360 2674/3958/360 2245/3392/360 +f 2253/3400/358 2257/3959/358 2254/3401/358 +f 2256/3403/369 2272/3428/369 2254/3404/369 +f 2258/3406/357 2272/3428/357 2256/3403/357 +f 2259/3407/370 2256/3403/370 2257/3408/370 +f 2260/3410/358 2267/3960/358 2261/3411/358 +f 2263/3413/357 2266/3417/357 2264/3414/357 +f 2260/3416/371 2264/3414/371 2266/3417/371 +f 2265/3415/372 2264/3414/372 2260/3419/372 +f 2255/3421/360 2258/3961/360 2268/3422/360 +f 2261/3424/359 2263/3440/359 2270/3425/359 +f 2255/3427/372 2254/3962/372 2272/3428/372 +f 2261/3429/370 2267/3963/370 2266/3417/370 +f 2273/3430/362 2275/3439/362 2259/3431/362 +f 2274/3433/361 2276/3441/361 2265/3434/361 +f 2255/3438/358 2269/3964/358 2274/3965/358 +f 2274/3965/358 2262/3966/358 2261/3436/358 +f 2261/3436/358 2271/3967/358 2273/3437/358 +f 2273/3437/358 2253/3968/358 2255/3438/358 +f 2255/3438/358 2274/3965/358 2261/3436/358 +f 2276/3441/357 2268/3422/357 2258/3961/357 +f 2258/3961/357 2259/3431/357 2275/3439/357 +f 2275/3439/357 2270/3425/357 2263/3440/357 +f 2263/3440/357 2265/3434/357 2276/3441/357 +f 2276/3441/357 2258/3961/357 2275/3439/357 +f 2271/3426/370 2270/3425/370 2275/3442/370 +f 2269/3423/372 2268/3422/372 2276/3444/372 +f 2277/3446/372 2338/3521/372 2278/3447/372 +f 2280/3449/361 2312/3969/361 2281/3450/361 +f 2283/3452/370 2337/3519/370 2284/3453/370 +f 2278/3457/357 2338/3521/357 2336/3970/357 +f 2336/3970/357 2332/3510/357 2284/3455/357 +f 2284/3455/357 2337/3519/357 2286/3456/357 +f 2286/3456/357 2330/3507/357 2278/3457/357 +f 2278/3457/357 2336/3970/357 2284/3455/357 +f 2288/3460/358 2277/3971/358 2279/3972/358 +f 2279/3972/358 2331/3973/358 2287/3458/358 +f 2287/3458/358 2283/3974/358 2285/3459/358 +f 2285/3459/358 2333/3975/358 2288/3460/358 +f 2288/3460/358 2279/3972/358 2287/3458/358 +f 2289/3461/361 2310/3976/361 2290/3462/361 +f 2292/3464/362 2317/3493/362 2293/3465/362 +f 2294/3466/360 2293/3465/360 2295/3467/360 +f 2296/3469/361 2295/3977/361 2297/3470/361 +f 2299/3472/362 2307/3480/362 2300/3473/362 +f 2301/3474/360 2300/3473/360 2302/3475/360 +f 2282/3451/359 2281/3450/359 2304/3477/359 +f 2306/3479/359 2308/3482/359 2307/3480/359 +f 2303/3481/361 2302/3978/361 2308/3482/361 +f 2309/3483/360 2315/3491/360 2310/3484/360 +f 2311/3486/360 2316/3492/360 2312/3487/360 +f 2291/3463/359 2290/3462/359 2313/3489/359 +f 2314/3490/362 2313/3489/362 2315/3491/362 +f 2305/3478/362 2304/3477/362 2316/3492/362 +f 2298/3471/359 2297/3470/359 2317/3493/359 +f 2318/3494/372 2675/3979/372 2319/3495/372 +f 2321/3497/370 2676/3980/370 2322/3498/370 +f 2324/3500/369 2677/3981/369 2325/3501/369 +f 2327/3503/371 2678/3982/371 2328/3504/371 +f 2279/3506/361 2278/3457/361 2330/3507/361 +f 2285/3509/362 2284/3455/362 2332/3510/362 +f 2287/3512/370 2356/3983/370 2334/3513/370 +f 2288/3515/372 2360/3984/372 2335/3516/372 +f 2287/3518/359 2286/3456/359 2337/3519/359 +f 2288/3520/360 2336/3970/360 2338/3521/360 +f 2341/3524/358 2346/3985/358 2347/3986/358 +f 2347/3986/358 2349/3987/358 2339/3522/358 +f 2339/3522/358 2345/3988/358 2340/3523/358 +f 2340/3523/358 2351/3989/358 2341/3524/358 +f 2341/3524/358 2347/3986/358 2339/3522/358 +f 2344/3527/357 2354/3546/357 2352/3543/357 +f 2352/3543/357 2350/3538/357 2342/3525/357 +f 2342/3525/357 2353/3545/357 2343/3526/357 +f 2343/3526/357 2348/3535/357 2344/3527/357 +f 2344/3527/357 2352/3543/357 2342/3525/357 +f 2345/3528/370 2353/3545/370 2342/3529/370 +f 2346/3531/372 2354/3546/372 2344/3532/372 +f 2347/3534/361 2344/3527/361 2348/3535/361 +f 2340/3537/362 2342/3525/362 2350/3538/362 +f 2349/3540/371 2348/3990/371 2343/3526/371 +f 2351/3542/369 2350/3991/369 2352/3543/369 +f 2339/3541/359 2343/3526/359 2353/3545/359 +f 2341/3544/360 2352/3543/360 2354/3546/360 +f 2330/3547/372 2357/3552/372 2355/3548/372 +f 2355/3550/371 2357/3552/371 2334/3513/371 +f 2286/3514/357 2334/3513/357 2357/3552/357 +f 2355/3553/358 2356/3992/358 2287/3554/358 +f 2332/3556/370 2359/3559/370 2358/3557/370 +f 2336/3517/357 2335/3516/357 2359/3559/357 +f 2359/3559/369 2335/3516/369 2360/3560/369 +f 2333/3562/358 2358/3993/358 2360/3563/358 +f 2361/3565/359 2367/3571/359 2362/3566/359 +f 2364/3568/360 2368/3994/360 2365/3569/360 +f 2367/3571/361 2368/3994/361 2364/3568/361 +f 2363/3567/362 2366/3995/362 2365/3572/362 +f 2361/3565/358 2365/3996/358 2368/3573/358 +f 2362/3566/357 2364/3997/357 2366/3574/357 +f 2369/3575/357 2376/3583/357 2370/3576/357 +f 2372/3578/359 2376/3583/359 2369/3575/359 +f 2374/3580/360 2371/3577/360 2370/3576/360 +f 2375/3582/361 2370/3576/361 2376/3583/361 +f 2373/3585/362 2369/3575/362 2371/3577/362 +f 2377/3587/361 2679/3998/361 2378/3588/361 +f 2378/3588/373 2679/3998/373 2380/3590/373 +f 2382/3592/360 2389/3999/360 2383/3593/360 +f 2380/3590/362 2390/4000/362 2385/3595/362 +f 2382/3592/374 2384/3594/374 2386/3596/374 +f 2388/3598/375 2391/3603/375 2383/3599/375 +f 2390/3601/376 2377/3587/376 2379/3589/376 +f 2387/3597/359 2386/3596/359 2391/3603/359 +f 2392/3604/359 2398/3610/359 2393/3605/359 +f 2395/3607/360 2399/4001/360 2396/3608/360 +f 2397/3609/377 2396/3608/377 2393/3605/377 +f 2392/3604/378 2394/3606/378 2399/3611/378 +f 2400/3613/379 2407/4002/379 2401/3614/379 +f 2403/3616/370 2400/3613/370 2402/3615/370 +f 2405/3618/380 2403/3616/380 2404/3617/380 +f 2407/3620/372 2405/3618/372 2406/3619/372 +f 2408/3622/371 2480/3694/371 2409/3623/371 +f 2417/3631/370 2680/4003/370 2418/3632/370 +f 2420/3634/372 2681/4004/372 2421/3635/372 +f 2423/3637/371 2682/4005/371 2424/3638/371 +f 2426/3640/369 2683/4006/369 2427/3641/369 +f 2429/3643/361 2684/4007/361 2430/3644/361 +f 2432/3646/362 2685/4008/362 2433/3647/362 +f 2435/3649/360 2686/4009/360 2436/3650/360 +f 2438/3652/359 2687/4010/359 2439/3653/359 +f 2441/3655/361 2688/4011/361 2442/3656/361 +f 2444/3658/362 2689/4012/362 2445/3659/362 +f 2447/3661/360 2690/4013/360 2448/3662/360 +f 2450/3664/359 2691/4014/359 2451/3665/359 +f 2453/3667/361 2692/4015/361 2454/3668/361 +f 2456/3670/362 2693/4016/362 2457/3671/362 +f 2459/3673/360 2694/4017/360 2460/3674/360 +f 2462/3676/359 2695/4018/359 2463/3677/359 +f 2465/3679/361 2696/4019/361 2466/3680/361 +f 2468/3682/362 2697/4020/362 2469/3683/362 +f 2471/3685/360 2698/4021/360 2472/3686/360 +f 2474/3688/359 2699/4022/359 2475/3689/359 +f 2477/3691/369 2481/4023/369 2478/3692/369 +f 2480/3694/372 2481/4023/372 2477/3691/372 +f 2410/3624/370 2479/4024/370 2478/3695/370 +f 2408/3622/358 2478/4025/358 2481/3696/358 +f 2409/3623/357 2477/4026/357 2479/3697/357 +f 2482/3698/357 2489/3706/357 2483/3699/357 +f 2485/3701/371 2489/3706/371 2482/3698/371 +f 2487/3703/369 2484/3700/369 2483/3699/369 +f 2488/3705/372 2483/3699/372 2489/3706/372 +f 2486/3708/370 2482/3698/370 2484/3700/370 +f 2490/3710/372 2700/4027/372 2491/3711/372 +f 2491/3711/383 2700/4027/383 2493/3713/383 +f 2495/3715/369 2502/4028/369 2496/3716/369 +f 2493/3713/370 2503/4029/370 2498/3718/370 +f 2495/3715/384 2497/3717/384 2499/3719/384 +f 2501/3721/385 2504/3726/385 2496/3722/385 +f 2503/3724/386 2490/3710/386 2492/3712/386 +f 2500/3720/371 2499/3719/371 2504/3726/371 +f 2505/3727/371 2511/3733/371 2506/3728/371 +f 2508/3730/369 2512/4030/369 2509/3731/369 +f 2510/3732/387 2509/3731/387 2506/3728/387 +f 2505/3727/388 2507/3729/388 2512/3734/388 +f 2513/3736/370 2519/3742/370 2514/3737/370 +f 2516/3739/372 2520/4031/372 2517/3740/372 +f 2519/3742/371 2520/4031/371 2516/3739/371 +f 2515/3738/369 2518/4032/369 2517/3743/369 +f 2513/3736/358 2517/4033/358 2520/3744/358 +f 2515/3738/357 2514/3737/357 2516/3745/357 +f 2521/3747/357 2528/3755/357 2522/3748/357 +f 2524/3750/370 2528/3755/370 2521/3747/370 +f 2526/3752/372 2523/3749/372 2522/3748/372 +f 2527/3754/371 2522/3748/371 2528/3755/371 +f 2525/3757/369 2521/3747/369 2523/3749/369 +f 2529/3759/371 2701/4034/371 2530/3760/371 +f 2530/3760/389 2701/4034/389 2532/3762/389 +f 2534/3764/372 2541/4035/372 2535/3765/372 +f 2532/3762/369 2542/4036/369 2537/3767/369 +f 2534/3764/390 2536/3766/390 2538/3768/390 +f 2540/3770/391 2543/3775/391 2535/3771/391 +f 2542/3773/392 2529/3759/392 2531/3761/392 +f 2539/3769/370 2538/3768/370 2543/3775/370 +f 2544/3776/370 2550/3782/370 2545/3777/370 +f 2547/3779/372 2551/4037/372 2548/3780/372 +f 2550/3782/393 2549/3781/393 2548/3780/393 +f 2544/3776/394 2546/3778/394 2551/3783/394 +f 2552/3785/360 2558/3791/360 2553/3786/360 +f 2555/3788/359 2559/4038/359 2556/3789/359 +f 2558/3791/362 2559/4038/362 2555/3788/362 +f 2554/3787/361 2557/4039/361 2556/3792/361 +f 2552/3785/358 2556/4040/358 2559/3793/358 +f 2553/3786/357 2555/4041/357 2557/3794/357 +f 2560/3795/357 2567/3803/357 2561/3796/357 +f 2563/3798/360 2567/3803/360 2560/3795/360 +f 2565/3800/359 2562/3797/359 2561/3796/359 +f 2566/3802/362 2561/3796/362 2567/3803/362 +f 2564/3805/361 2560/3795/361 2562/3797/361 +f 2568/3807/362 2702/4042/362 2569/3808/362 +f 2569/3808/395 2702/4042/395 2571/3810/395 +f 2573/3812/359 2580/4043/359 2574/3813/359 +f 2571/3810/361 2703/4044/361 2576/3815/361 +f 2573/3812/378 2575/3814/378 2577/3816/378 +f 2579/3818/377 2581/3822/377 2574/3819/377 +f 2576/3821/396 2703/4045/396 2568/3807/396 +f 2578/3817/360 2577/3816/360 2581/3822/360 +f 2582/3823/360 2588/3829/360 2583/3824/360 +f 2585/3826/359 2589/4046/359 2586/3827/359 +f 2587/3828/375 2586/3827/375 2583/3824/375 +f 2582/3823/374 2584/3825/374 2589/3830/374 +f 2590/3832/372 2596/3838/372 2591/3833/372 +f 2593/3835/370 2597/4047/370 2594/3836/370 +f 2596/3838/369 2597/4047/369 2593/3835/369 +f 2592/3834/371 2595/4048/371 2594/3839/371 +f 2590/3832/358 2594/4049/358 2597/3840/358 +f 2592/3834/357 2591/3833/357 2593/3841/357 +f 2598/3843/357 2605/3851/357 2599/3844/357 +f 2601/3846/372 2605/3851/372 2598/3843/372 +f 2603/3848/370 2600/3845/370 2599/3844/370 +f 2604/3850/369 2599/3844/369 2605/3851/369 +f 2602/3853/371 2598/3843/371 2600/3845/371 +f 2606/3855/369 2704/4050/369 2607/3856/369 +f 2607/3856/397 2704/4050/397 2609/3858/397 +f 2611/3860/370 2618/4051/370 2612/3861/370 +f 2609/3858/371 2705/4052/371 2614/3863/371 +f 2611/3860/394 2613/3862/394 2615/3864/394 +f 2617/3866/393 2619/3870/393 2612/3867/393 +f 2614/3869/398 2705/4053/398 2606/3855/398 +f 2616/3865/372 2615/3864/372 2619/3870/372 +f 2620/3871/372 2626/3877/372 2621/3872/372 +f 2623/3874/370 2627/4054/370 2624/3875/370 +f 2626/3877/391 2625/3876/391 2624/3875/391 +f 2620/3871/390 2622/3873/390 2627/3878/390 +f 2628/3880/369 2634/3886/369 2629/3881/369 +f 2631/3883/371 2635/4055/371 2632/3884/371 +f 2634/3886/370 2635/4055/370 2631/3883/370 +f 2630/3882/372 2633/4056/372 2632/3887/372 +f 2628/3880/358 2632/4057/358 2635/3888/358 +f 2629/3881/357 2631/4058/357 2633/3889/357 +f 2636/3890/371 2642/4059/371 2637/3891/371 +f 2636/3890/388 2638/3892/388 2639/3893/388 +f 2641/3895/387 2643/3898/387 2637/3896/387 +f 2640/3894/369 2639/3893/369 2643/3898/369 +f 2644/3899/369 2650/3905/369 2645/3900/369 +f 2647/3902/371 2651/4060/371 2648/3903/371 +f 2649/3904/385 2648/3903/385 2645/3900/385 +f 2644/3899/384 2646/3901/384 2651/3906/384 +o Atlas_Erector +v 0.750000 3.500000 -4.250000 +v 1.250000 3.500000 -3.750000 +v 0.750000 3.500000 -3.750000 +v -1.250000 3.500000 -4.250000 +v -0.750000 3.500000 -3.750000 +v -1.250000 3.500000 -3.750000 v 0.750000 3.500000 -2.750000 -v 0.750000 3.500000 -3.250000 -v 0.250000 3.500000 -3.250000 -v -0.250000 1.500000 -2.750000 -v -0.750000 1.500000 -2.750000 -v -0.750000 1.500000 -3.250000 -v -0.250000 1.500000 -3.250000 +v 1.250000 3.500000 -2.250000 +v 0.750000 3.500000 -2.250000 +v -1.250000 3.500000 -2.750000 +v -0.750000 3.500000 -2.250000 +v -1.250000 3.500000 -2.250000 +v 1.250000 14.750000 -3.749999 +v 0.750000 14.750000 -4.250000 +v 0.750000 14.750000 -3.749999 +v -0.750000 14.750000 -3.749999 +v -1.250000 14.750000 -4.250000 +v -1.250000 14.750000 -3.749999 +v 1.250000 14.750000 -2.249999 +v 0.750000 14.750000 -2.749999 +v 0.750000 14.750000 -2.249999 +v -0.750000 14.750000 -2.249999 +v -1.250000 14.750000 -2.749999 +v -1.250000 14.750000 -2.249999 +v 1.250000 3.500000 -4.250000 +v 1.250000 3.500000 -2.750000 +v 1.250000 14.750000 -4.250000 +v 1.250000 14.750000 -2.749999 +v -0.750000 3.500000 -4.250000 v -0.750000 3.500000 -2.750000 -v -0.250000 3.500000 -2.750000 -v -0.250000 3.500000 -3.250000 -v -0.750000 3.500000 -3.250000 -v 0.312500 3.500000 -2.812500 -v 0.687500 3.500000 -2.812500 -v 0.312500 3.500000 -3.187500 -v 0.687500 3.500000 -3.187500 -v 0.312500 4.500000 -2.812500 -v 0.687500 4.500000 -2.812500 -v 0.312500 4.500000 -3.187500 -v 0.687500 4.500000 -3.187500 -v -0.687500 3.500000 -2.812500 -v -0.312500 3.500000 -2.812500 -v -0.687500 3.500000 -3.187500 -v -0.312500 3.500000 -3.187500 -v -0.687500 4.500000 -2.812500 -v -0.312500 4.500000 -2.812500 -v -0.687500 4.500000 -3.187500 -v -0.312500 4.500000 -3.187500 -vt 0.794872 0.224719 -vt 0.820513 0.179775 -vt 0.820513 0.224719 -vt 0.897436 0.000000 -vt 0.871795 0.179775 -vt 0.871795 0.000000 -vt 0.820513 0.000000 -vt 0.794872 0.179775 -vt 0.794872 0.000000 -vt 0.846154 0.000000 -vt 0.846154 0.179775 -vt 0.794872 0.224719 -vt 0.820513 0.179775 -vt 0.820513 0.224719 -vt 0.897436 0.000000 -vt 0.871795 0.179775 -vt 0.871795 0.000000 -vt 0.820513 0.000000 -vt 0.794872 0.179775 -vt 0.794872 0.000000 -vt 0.846154 0.000000 -vt 0.846154 0.179775 -vt 0.839744 0.269663 -vt 0.820513 0.179775 -vt 0.839744 0.179775 -vt 0.878205 0.269663 -vt 0.858974 0.179775 -vt 0.878205 0.179775 -vt 0.897436 0.269663 -vt 0.897436 0.179775 -vt 0.858974 0.269663 -vt 0.839744 0.269663 -vt 0.820513 0.179775 -vt 0.839744 0.179775 -vt 0.878205 0.269663 -vt 0.858974 0.179775 -vt 0.878205 0.179775 -vt 0.897436 0.269663 -vt 0.897436 0.179775 -vt 0.858974 0.269663 -vt 0.897436 0.179775 -vt 0.897436 0.179775 -vt 0.820513 0.269663 -vt 0.820513 0.269663 -vn 0.0000 1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -s off -f 2815/3786/266 2817/3787/266 2814/3788/266 -f 2813/3789/267 2815/3790/267 2810/3791/267 -f 2812/3792/268 2816/3793/268 2813/3794/268 -f 2811/3795/269 2817/3787/269 2812/3792/269 -f 2810/3791/270 2814/3796/270 2811/3795/270 -f 2823/3797/266 2825/3798/266 2822/3799/266 -f 2821/3800/267 2823/3801/267 2818/3802/267 -f 2820/3803/268 2824/3804/268 2821/3805/268 -f 2819/3806/269 2825/3798/269 2820/3803/269 -f 2818/3802/270 2822/3807/270 2819/3806/270 -f 2832/3808/268 2829/3809/268 2828/3810/268 -f 2831/3811/270 2826/3812/270 2827/3813/270 -f 2833/3814/267 2827/3813/267 2829/3815/267 -f 2830/3816/269 2828/3810/269 2826/3812/269 -f 2840/3817/268 2837/3818/268 2836/3819/268 -f 2839/3820/270 2834/3821/270 2835/3822/270 -f 2841/3823/267 2835/3822/267 2837/3824/267 -f 2838/3825/269 2836/3819/269 2834/3821/269 -f 2815/3786/266 2816/3793/266 2817/3787/266 -f 2813/3789/267 2816/3826/267 2815/3790/267 -f 2812/3792/268 2817/3787/268 2816/3793/268 -f 2811/3795/269 2814/3796/269 2817/3787/269 -f 2810/3791/270 2815/3790/270 2814/3796/270 -f 2823/3797/266 2824/3804/266 2825/3798/266 -f 2821/3800/267 2824/3827/267 2823/3801/267 -f 2820/3803/268 2825/3798/268 2824/3804/268 -f 2819/3806/269 2822/3807/269 2825/3798/269 -f 2818/3802/270 2823/3801/270 2822/3807/270 -f 2832/3808/268 2833/3828/268 2829/3809/268 -f 2831/3811/270 2830/3816/270 2826/3812/270 -f 2833/3814/267 2831/3811/267 2827/3813/267 -f 2830/3816/269 2832/3808/269 2828/3810/269 -f 2840/3817/268 2841/3829/268 2837/3818/268 -f 2839/3820/270 2838/3825/270 2834/3821/270 -f 2841/3823/267 2839/3820/267 2835/3822/267 -f 2838/3825/269 2840/3817/269 2836/3819/269 -o Strong_Erector -v 0.250000 3.500000 -2.750000 -v 0.750000 3.500000 -2.750000 -v 0.750000 3.500000 -3.250000 -v 0.250000 3.500000 -3.250000 -v -0.750000 3.500000 -2.750000 -v -0.250000 3.500000 -2.750000 -v -0.250000 3.500000 -3.250000 -v -0.750000 3.500000 -3.250000 -v 0.250000 10.000000 -2.750000 -v 0.750000 10.000000 -2.750000 -v 0.750000 10.000000 -3.250000 -v 0.250000 10.000000 -3.250000 -v -0.750000 10.000000 -2.750000 -v -0.250000 10.000000 -2.750000 -v -0.250000 10.000000 -3.250000 -v -0.750000 10.000000 -3.250000 -v 0.250000 9.000000 -1.000000 -v 0.250000 9.000000 -3.500000 -v -0.250000 9.000000 -1.000000 -v -0.250000 9.000000 -3.500000 -v 0.250000 8.500000 -3.500000 -v 0.250000 8.500000 -1.000000 -v -0.250000 8.500000 -1.000000 -v -0.250000 8.500000 -3.500000 -v 0.375000 9.125000 -1.000000 -v -0.375000 9.125000 -1.000000 -v 0.375000 8.375000 -1.000000 -v -0.375000 8.375000 -1.000000 -v 0.375000 9.125000 -0.750000 -v -0.375000 9.125000 -0.750000 -v 0.375000 8.375000 -0.750000 -v -0.375000 8.375000 -0.750000 -v -0.375000 3.875000 -0.750000 -v 0.375000 3.875000 -0.750000 -v -0.375000 4.625000 -0.750000 -v 0.375000 4.625000 -0.750000 -v -0.375000 3.875000 -1.000000 -v 0.375000 3.875000 -1.000000 -v -0.375000 4.625000 -1.000000 -v 0.375000 4.625000 -1.000000 -v -0.250000 4.000000 -3.500000 -v -0.250000 4.000000 -1.000000 -v 0.250000 4.000000 -1.000000 -v 0.250000 4.000000 -3.500000 -v -0.250000 4.500000 -3.500000 -v -0.250000 4.500000 -1.000000 -v 0.250000 4.500000 -3.500000 -v 0.250000 4.500000 -1.000000 -v 0.250000 7.000000 -2.750000 -v 0.750000 7.000000 -2.750000 -v -0.750000 7.000000 -2.750000 -v -0.250000 7.000000 -2.750000 -v 0.250000 6.500000 -2.750000 -v 0.750000 6.500000 -2.750000 -v -0.750000 6.500000 -2.750000 -v -0.250000 6.500000 -2.750000 -v 0.250000 7.000000 -1.250000 -v 0.750000 7.000000 -1.250000 -v -0.750000 7.000000 -1.250000 -v -0.250000 7.000000 -1.250000 -v 0.250000 6.500000 -1.250000 -v 0.750000 6.500000 -1.250000 -v -0.750000 6.500000 -1.250000 -v -0.250000 6.500000 -1.250000 -v 0.750000 7.000000 -1.250000 -v -0.750000 7.000000 -1.250000 -v 0.750000 6.500000 -1.250000 -v -0.750000 6.500000 -1.250000 -v -0.750000 7.000000 -0.750000 -v -0.750000 6.500000 -0.750000 -v 0.750000 6.500000 -0.750000 -v 0.750000 7.000000 -0.750000 -v -1.250000 7.000000 -0.750000 -v -1.250000 6.500000 -0.750000 -v 1.250000 6.500000 -0.750000 -v 1.250000 7.000000 -0.750000 -v -0.750000 7.000000 0.750000 -v -0.750000 6.500000 0.750000 -v 0.750000 6.500000 0.750000 -v 0.750000 7.000000 0.750000 -v -1.250000 7.000000 0.750000 -v -1.250000 6.500000 0.750000 -v 1.250000 6.500000 0.750000 -v 1.250000 7.000000 0.750000 -vt 0.820513 0.269663 -vt 0.794872 0.224719 -vt 0.820513 0.224719 -vt 0.820513 0.269663 -vt 0.794872 0.224719 -vt 0.820513 0.224719 -vt 0.794872 0.898876 -vt 0.820513 0.853933 -vt 0.820513 0.898876 -vt 0.794872 0.898876 -vt 0.820513 0.853933 -vt 0.820513 0.898876 -vt 0.897436 0.269663 -vt 0.871795 0.853933 -vt 0.871795 0.269663 -vt 0.794872 0.853933 -vt 0.794872 0.269663 -vt 0.897436 0.269663 -vt 0.871795 0.853933 -vt 0.871795 0.269663 -vt 0.794872 0.853933 -vt 0.794872 0.269663 -vt 0.846154 0.269663 -vt 0.846154 0.853933 -vt 0.846154 0.269663 -vt 0.846154 0.853933 -vt 0.544872 0.921348 -vt 0.416667 0.966292 -vt 0.416667 0.921348 -vt 0.416667 0.921348 -vt 0.544872 0.966292 -vt 0.416667 0.966292 -vt 0.410256 0.910112 -vt 0.544872 0.921348 -vt 0.416667 0.966292 -vt 0.416667 0.921348 -vt 0.570513 0.966292 -vt 0.544872 0.966292 -vt 0.416667 0.966292 -vt 0.544872 0.921348 -vt 0.544872 0.966292 -vt 0.410256 0.977528 -vt 0.397436 0.910112 -vt 0.410256 0.910112 -vt 0.410256 0.910112 -vt 0.416667 0.921348 -vt 0.410256 0.910112 -vt 0.397436 0.977528 -vt 0.358974 0.910112 -vt 0.397436 0.910112 -vt 0.410256 0.977528 -vt 0.410256 0.977528 -vt 0.397436 0.910112 -vt 0.410256 0.977528 -vt 0.397436 0.910112 -vt 0.410256 0.977528 -vt 0.397436 0.910112 -vt 0.410256 0.910112 -vt 0.410256 0.977528 -vt 0.397436 0.910112 -vt 0.410256 0.910112 -vt 0.410256 0.977528 -vt 0.397436 0.910112 -vt 0.410256 0.910112 -vt 0.397436 0.977528 -vt 0.358974 0.910112 -vt 0.416667 0.966292 -vt 0.416667 0.921348 -vt 0.416667 0.966292 -vt 0.416667 0.921348 -vt 0.416667 0.966292 -vt 0.410256 0.910112 -vt 0.416667 0.921348 -vt 0.410256 0.977528 -vt 0.397436 0.910112 -vt 0.544872 0.921348 -vt 0.544872 0.966292 -vt 0.544872 0.921348 -vt 0.570513 0.966292 -vt 0.544872 0.966292 -vt 0.544872 0.921348 -vt 0.416667 0.966292 -vt 0.416667 0.921348 -vt 0.544872 0.966292 -vt 1.000000 0.134831 -vt 0.974359 -0.000000 -vt 1.000000 -0.000000 -vt 0.923077 0.134831 +v -0.750000 14.750000 -4.250000 +v -0.750000 14.750000 -2.749999 +v 0.750000 12.750000 -2.750000 +v -0.750000 12.750000 -2.250000 +v 0.750000 12.750000 -2.250000 +v -0.750000 12.250000 -2.250000 +v 0.750000 12.250000 -2.750000 +v 0.750000 12.250000 -2.250000 +v -0.750000 12.250000 -2.750000 +v -0.750000 12.750000 -2.750000 +v 0.625000 12.250000 -1.375000 +v -0.625000 12.750000 -1.374999 +v 0.625000 12.750000 -1.374999 +v -0.625000 12.750000 -1.124999 +v 0.625000 12.250000 -1.125000 +v 0.625000 12.750000 -1.124999 +v 1.125000 12.249999 -0.624999 +v -0.625000 12.250000 -1.125000 +v -0.625000 12.250000 -1.375000 +v 1.375000 12.749999 -0.624999 +v 1.375000 12.249999 -0.624999 +v -1.375000 12.249999 -0.624999 +v -1.375000 12.749999 0.250001 +v -1.375000 12.749999 -0.624999 +v -1.125000 12.749999 0.250001 +v -1.125000 12.249999 -0.624999 +v -1.125000 12.749999 -0.624999 +v -1.375000 12.249999 0.250001 +v -1.125000 12.249999 0.250001 +v 1.375000 12.249999 0.250001 +v 1.375000 12.749999 0.250001 +v 1.125000 12.749999 -0.624999 +v 1.125000 12.249999 0.250001 +v 1.125000 12.749999 0.250001 +v 0.750000 12.750000 -4.250000 +v -0.750000 12.750000 -3.750000 +v 0.750000 12.750000 -3.750000 +v -0.750000 12.250000 -3.750000 +v 0.750000 12.250000 -4.250000 +v 0.750000 12.250000 -3.750000 +v -0.750000 12.250000 -4.250000 +v -0.750000 12.750000 -4.250000 +v 0.562500 12.312500 -1.374999 +v 0.562500 12.687500 -3.750000 +v 0.562500 12.687500 -1.374999 +v 0.187500 12.687500 -1.374999 +v 0.187500 12.312500 -3.750000 +v 0.187500 12.312500 -1.374999 +v 0.187500 12.687500 -3.750000 +v 0.562500 12.312500 -3.750000 +v -0.187500 12.312500 -1.374999 +v -0.187500 12.687500 -3.750000 +v -0.187500 12.687500 -1.374999 +v -0.562500 12.687500 -1.374999 +v -0.562500 12.312500 -3.750000 +v -0.562500 12.312500 -1.374999 +v -0.562500 12.687500 -3.750000 +v -0.187500 12.312500 -3.750000 +v 0.750000 8.750000 -2.750000 +v -0.750000 8.750000 -2.250000 +v 0.750000 8.750000 -2.250000 +v -0.750000 8.250000 -2.250000 +v 0.750000 8.250000 -2.750000 +v 0.750000 8.250000 -2.250000 +v -0.750000 8.250000 -2.750000 +v -0.750000 8.750000 -2.750000 +v 0.625000 8.250000 -1.625000 +v -0.625000 8.750000 -1.625000 +v 0.625000 8.750000 -1.625000 +v -0.625000 8.750000 -1.375000 +v 0.625000 8.250000 -1.375000 +v 0.625000 8.750000 -1.375000 +v 1.125000 8.249999 -0.875000 +v -0.625000 8.250000 -1.375000 +v -0.625000 8.250000 -1.625000 +v 1.375000 8.749999 -0.875000 +v 1.375000 8.249999 -0.875000 +v -1.375000 8.249999 -0.875000 +v -1.375000 8.749999 0.250000 +v -1.375000 8.749999 -0.875000 +v -1.125000 8.749999 0.250000 +v -1.125000 8.249999 -0.875000 +v -1.125000 8.749999 -0.875000 +v -1.375000 8.249999 0.250000 +v -1.125000 8.249999 0.250000 +v 1.375000 8.249999 0.250000 +v 1.375000 8.749999 0.250000 +v 1.125000 8.749999 -0.875000 +v 1.125000 8.249999 0.250000 +v 1.125000 8.749999 0.250000 +v 0.750000 8.750000 -4.250000 +v -0.750000 8.750000 -3.750000 +v 0.750000 8.750000 -3.750000 +v -0.750000 8.250000 -3.750000 +v 0.750000 8.250000 -4.250000 +v 0.750000 8.250000 -3.750000 +v -0.750000 8.250000 -4.250000 +v -0.750000 8.750000 -4.250000 +v 0.562500 8.312500 -1.625000 +v 0.562500 8.687500 -3.750000 +v 0.562500 8.687500 -1.625000 +v 0.187500 8.687500 -1.625000 +v 0.187500 8.312500 -3.750000 +v 0.187500 8.312500 -1.625000 +v 0.187500 8.687500 -3.750000 +v 0.562500 8.312500 -3.750000 +v -0.187500 8.312500 -1.625000 +v -0.187500 8.687500 -3.750000 +v -0.187500 8.687500 -1.625000 +v -0.562500 8.687500 -1.625000 +v -0.562500 8.312500 -3.750000 +v -0.562500 8.312500 -1.625000 +v -0.562500 8.687500 -3.750000 +v -0.187500 8.312500 -3.750000 +v 0.750000 4.750000 -2.750000 +v -0.750000 4.750000 -2.250000 +v 0.750000 4.750000 -2.250000 +v -0.750000 4.250000 -2.250000 +v 0.750000 4.250000 -2.750000 +v 0.750000 4.250000 -2.250000 +v -0.750000 4.250000 -2.750000 +v -0.750000 4.750000 -2.750000 +v 0.625000 4.250000 -1.875000 +v -0.625000 4.750000 -1.875000 +v 0.625000 4.750000 -1.875000 +v -0.625000 4.750000 -1.625000 +v 0.625000 4.250000 -1.625000 +v 0.625000 4.750000 -1.625000 +v 1.125000 4.249999 -1.125000 +v -0.625000 4.250000 -1.625000 +v -0.625000 4.250000 -1.875000 +v 1.375000 4.749999 -1.125000 +v 1.375000 4.249999 -1.125000 +v -1.375000 4.249999 -1.125000 +v -1.375000 4.749999 0.250000 +v -1.375000 4.749999 -1.125000 +v -1.125000 4.749999 0.250000 +v -1.125000 4.249999 -1.125000 +v -1.125000 4.749999 -1.125000 +v -1.375000 4.249999 0.250000 +v -1.125000 4.249999 0.250000 +v 1.375000 4.249999 0.250000 +v 1.375000 4.749999 0.250000 +v 1.125000 4.749999 -1.125000 +v 1.125000 4.249999 0.250000 +v 1.125000 4.749999 0.250000 +v 0.750000 4.750000 -4.250000 +v -0.750000 4.750000 -3.750000 +v 0.750000 4.750000 -3.750000 +v -0.750000 4.250000 -3.750000 +v 0.750000 4.250000 -4.250000 +v 0.750000 4.250000 -3.750000 +v -0.750000 4.250000 -4.250000 +v -0.750000 4.750000 -4.250000 +v 0.562500 4.312500 -1.875000 +v 0.562500 4.687500 -3.750000 +v 0.562500 4.687500 -1.875000 +v 0.187500 4.687500 -1.875000 +v 0.187500 4.312500 -3.750000 +v 0.187500 4.312500 -1.875000 +v 0.187500 4.687500 -3.750000 +v 0.562500 4.312500 -3.750000 +v -0.187500 4.312500 -1.875000 +v -0.187500 4.687500 -3.750000 +v -0.187500 4.687500 -1.875000 +v -0.562500 4.687500 -1.875000 +v -0.562500 4.312500 -3.750000 +v -0.562500 4.312500 -1.875000 +v -0.562500 4.687500 -3.750000 +v -0.187500 4.312500 -3.750000 +v 0.750000 11.750000 -4.062500 +v -0.750000 10.750000 -4.062500 +v 0.750000 12.250000 -4.062500 +v 0.750000 10.250000 -4.062500 +v -0.750000 9.250000 -4.062500 +v 0.750000 10.750000 -4.062500 +v 0.750000 10.750000 -3.937500 +v -0.750000 11.750000 -3.937500 +v -0.750000 12.250000 -3.937500 +v 0.750000 9.250000 -3.937500 +v -0.750000 10.250000 -3.937500 +v -0.750000 10.750000 -3.937500 +v 0.750000 7.750000 -4.062500 +v -0.750000 6.750000 -4.062500 +v 0.750000 8.250000 -4.062500 +v 0.750000 6.250000 -4.062500 +v -0.750000 5.250000 -4.062500 +v 0.750000 6.750000 -4.062500 +v 0.750000 6.750000 -3.937500 +v -0.750000 7.750000 -3.937500 +v -0.750000 8.250000 -3.937500 +v 0.750000 5.250000 -3.937500 +v -0.750000 6.250000 -3.937500 +v -0.750000 6.750000 -3.937500 +v -0.750000 10.750000 -2.562500 +v 0.750000 11.750000 -2.562500 +v 0.750000 12.250000 -2.562500 +v -0.750000 9.250000 -2.562500 +v 0.750000 10.250000 -2.562500 +v 0.750000 10.750000 -2.562500 +v 0.750000 10.750000 -2.437500 +v -0.750000 11.750000 -2.437500 +v 0.750000 10.250000 -2.437500 +v 0.750000 9.250000 -2.437500 +v -0.750000 10.250000 -2.437500 +v 0.750000 8.750000 -2.437500 +v -0.750000 6.750000 -2.562500 +v 0.750000 7.750000 -2.562500 +v 0.750000 8.250000 -2.562500 +v -0.750000 5.250000 -2.562500 +v 0.750000 6.250000 -2.562500 +v 0.750000 6.750000 -2.562500 +v 0.750000 6.750000 -2.437500 +v -0.750000 7.750000 -2.437500 +v 0.750000 6.250000 -2.437500 +v 0.750000 5.250000 -2.437500 +v -0.750000 6.250000 -2.437500 +v 0.750000 4.750000 -2.437500 +v 0.750000 14.250000 -4.062500 +v -0.750000 13.250000 -4.062500 +v 0.750000 14.750000 -4.062500 +v 0.750000 13.250000 -3.937500 +v -0.750000 14.250000 -3.937499 +v -0.750000 14.750000 -3.937499 +v -0.750000 13.250000 -2.562500 +v 0.750000 14.250000 -2.562499 +v 0.750000 14.750000 -2.562499 +v 0.750000 13.250000 -2.437500 +v -0.750000 14.250000 -2.437499 +v 0.750000 12.750000 -2.437500 +v 1.062500 14.250000 -2.749999 +v 1.062500 13.250000 -3.750000 +v 1.062500 14.750000 -2.749999 +v 0.937500 13.250000 -2.750000 +v 0.937500 14.250000 -3.749999 +v 0.937500 14.750000 -3.749999 +v 1.062500 11.750000 -2.750000 +v 1.062500 10.750000 -3.750000 +v 1.062500 12.250000 -2.750000 +v 0.937500 10.750000 -2.750000 +v 0.937500 11.750000 -3.750000 +v 0.937500 12.250000 -3.750000 +v 1.062500 10.250000 -2.750000 +v 1.062500 9.250000 -3.750000 +v 1.062500 10.750000 -2.750000 +v 0.937500 9.250000 -2.750000 +v 0.937500 10.250000 -3.750000 +v 0.937500 10.750000 -3.750000 +v 1.062500 7.750000 -2.750000 +v 1.062500 6.750000 -3.750000 +v 1.062500 8.250000 -2.750000 +v 0.937500 6.750000 -2.750000 +v 0.937500 7.750000 -3.750000 +v 0.937500 8.250000 -3.750000 +v 1.062500 6.250000 -2.750000 +v 1.062500 5.250000 -3.750000 +v 1.062500 6.750000 -2.750000 +v 0.937500 5.250000 -2.750000 +v 0.937500 6.250000 -3.750000 +v 0.937500 6.750000 -3.750000 +v -0.937500 13.250000 -3.750000 +v -0.937500 14.250000 -2.749999 +v -0.937500 14.750000 -2.749999 +v -1.062500 13.250000 -2.750000 +v -1.062500 14.250000 -3.749999 +v -1.062500 12.750000 -2.750000 +v -0.937500 10.750000 -3.750000 +v -0.937500 11.750000 -2.750000 +v -0.937500 12.250000 -2.750000 +v -1.062500 10.750000 -2.750000 +v -1.062500 11.750000 -3.750000 +v -1.062500 10.250000 -2.750000 +v -0.937500 9.250000 -3.750000 +v -0.937500 10.250000 -2.750000 +v -0.937500 10.750000 -2.750000 +v -1.062500 9.250000 -2.750000 +v -1.062500 10.250000 -3.750000 +v -1.062500 8.750000 -2.750000 +v -0.937500 6.750000 -3.750000 +v -0.937500 7.750000 -2.750000 +v -0.937500 8.250000 -2.750000 +v -1.062500 6.750000 -2.750000 +v -1.062500 7.750000 -3.750000 +v -1.062500 6.250000 -2.750000 +v -0.937500 5.250000 -3.750000 +v -0.937500 6.250000 -2.750000 +v -0.937500 6.750000 -2.750000 +v -1.062500 5.250000 -2.750000 +v -1.062500 6.250000 -3.750000 +v -1.062500 4.750000 -2.750000 +v -0.750000 10.750000 -4.062500 +v 0.750000 11.750000 -4.062500 +v 0.750000 12.250000 -4.062500 +v -0.750000 9.250000 -4.062500 +v 0.750000 10.250000 -4.062500 +v 0.750000 10.750000 -4.062500 +v 0.750000 10.750000 -3.937500 +v -0.750000 11.750000 -3.937500 +v 0.750000 10.250000 -3.937500 +v 0.750000 9.250000 -3.937500 +v -0.750000 10.250000 -3.937500 +v 0.750000 8.750000 -3.937500 +v -0.750000 6.750000 -4.062500 +v 0.750000 7.750000 -4.062500 +v 0.750000 8.250000 -4.062500 +v -0.750000 5.250000 -4.062500 +v 0.750000 6.250000 -4.062500 +v 0.750000 6.750000 -4.062500 +v 0.750000 6.750000 -3.937500 +v -0.750000 7.750000 -3.937500 +v 0.750000 6.250000 -3.937500 +v 0.750000 5.250000 -3.937500 +v -0.750000 6.250000 -3.937500 +v 0.750000 4.750000 -3.937500 +v 0.750000 11.750000 -2.562500 +v -0.750000 10.750000 -2.562500 +v 0.750000 12.250000 -2.562500 +v 0.750000 10.250000 -2.562500 +v -0.750000 9.250000 -2.562500 +v 0.750000 10.750000 -2.562500 +v 0.750000 10.750000 -2.437500 +v -0.750000 11.750000 -2.437500 +v -0.750000 12.250000 -2.437500 +v 0.750000 9.250000 -2.437500 +v -0.750000 10.250000 -2.437500 +v -0.750000 10.750000 -2.437500 +v 0.750000 7.750000 -2.562500 +v -0.750000 6.750000 -2.562500 +v 0.750000 8.250000 -2.562500 +v 0.750000 6.250000 -2.562500 +v -0.750000 5.250000 -2.562500 +v 0.750000 6.750000 -2.562500 +v 0.750000 6.750000 -2.437500 +v -0.750000 7.750000 -2.437500 +v -0.750000 8.250000 -2.437500 +v 0.750000 5.250000 -2.437500 +v -0.750000 6.250000 -2.437500 +v -0.750000 6.750000 -2.437500 +v -0.750000 13.250000 -4.062500 +v 0.750000 14.250000 -4.062500 +v 0.750000 14.750000 -4.062500 +v 0.750000 13.250000 -3.937500 +v -0.750000 14.250000 -3.937499 +v 0.750000 12.750000 -3.937500 +v 0.750000 14.250000 -2.562499 +v -0.750000 13.250000 -2.562500 +v 0.750000 14.750000 -2.562499 +v 0.750000 13.250000 -2.437500 +v -0.750000 14.250000 -2.437499 +v -0.750000 14.750000 -2.437499 +v 1.062500 13.250000 -3.750000 +v 1.062500 14.250000 -2.749999 +v 1.062500 14.750000 -2.749999 +v 0.937500 13.250000 -2.750000 +v 0.937500 14.250000 -3.749999 +v 0.937500 12.750000 -2.750000 +v 1.062500 10.750000 -3.750000 +v 1.062500 11.750000 -2.750000 +v 1.062500 12.250000 -2.750000 +v 0.937500 10.750000 -2.750000 +v 0.937500 11.750000 -3.750000 +v 0.937500 10.250000 -2.750000 +v 1.062500 9.250000 -3.750000 +v 1.062500 10.250000 -2.750000 +v 1.062500 10.750000 -2.750000 +v 0.937500 9.250000 -2.750000 +v 0.937500 10.250000 -3.750000 +v 0.937500 8.750000 -2.750000 +v 1.062500 6.750000 -3.750000 +v 1.062500 7.750000 -2.750000 +v 1.062500 8.250000 -2.750000 +v 0.937500 6.750000 -2.750000 +v 0.937500 7.750000 -3.750000 +v 0.937500 6.250000 -2.750000 +v 1.062500 5.250000 -3.750000 +v 1.062500 6.250000 -2.750000 +v 1.062500 6.750000 -2.750000 +v 0.937500 5.250000 -2.750000 +v 0.937500 6.250000 -3.750000 +v 0.937500 4.750000 -2.750000 +v -0.937500 14.250000 -2.749999 +v -0.937500 13.250000 -3.750000 +v -0.937500 14.750000 -2.749999 +v -1.062500 13.250000 -2.750000 +v -1.062500 14.250000 -3.749999 +v -1.062500 14.750000 -3.749999 +v -0.937500 11.750000 -2.750000 +v -0.937500 10.750000 -3.750000 +v -0.937500 12.250000 -2.750000 +v -1.062500 10.750000 -2.750000 +v -1.062500 11.750000 -3.750000 +v -1.062500 12.250000 -3.750000 +v -0.937500 10.250000 -2.750000 +v -0.937500 9.250000 -3.750000 +v -0.937500 10.750000 -2.750000 +v -1.062500 9.250000 -2.750000 +v -1.062500 10.250000 -3.750000 +v -1.062500 10.750000 -3.750000 +v -0.937500 7.750000 -2.750000 +v -0.937500 6.750000 -3.750000 +v -0.937500 8.250000 -2.750000 +v -1.062500 6.750000 -2.750000 +v -1.062500 7.750000 -3.750000 +v -1.062500 8.250000 -3.750000 +v -0.937500 6.250000 -2.750000 +v -0.937500 5.250000 -3.750000 +v -0.937500 6.750000 -2.750000 +v -1.062500 5.250000 -2.750000 +v -1.062500 6.250000 -3.750000 +v -1.062500 6.750000 -3.750000 +v -0.750000 10.250000 -4.062500 +v -0.750000 8.750000 -4.062500 +v 0.750000 10.250000 -3.937500 +v 0.750000 8.750000 -3.937500 +v -0.750000 6.250000 -4.062500 +v -0.750000 4.750000 -4.062500 +v 0.750000 6.250000 -3.937500 +v 0.750000 4.750000 -3.937500 +v -0.750000 10.250000 -2.562500 +v -0.750000 8.750000 -2.562500 +v -0.750000 12.250000 -2.437500 +v -0.750000 10.750000 -2.437500 +v -0.750000 6.250000 -2.562500 +v -0.750000 4.750000 -2.562500 +v -0.750000 8.250000 -2.437500 +v -0.750000 6.750000 -2.437500 +v -0.750000 12.750000 -4.062500 +v 0.750000 12.750000 -3.937500 +v -0.750000 12.750000 -2.562500 +v -0.750000 14.750000 -2.437499 +v 1.062500 12.750000 -3.750000 +v 0.937500 12.750000 -2.750000 +v 1.062500 10.250000 -3.750000 +v 0.937500 10.250000 -2.750000 +v 1.062500 8.750000 -3.750000 +v 0.937500 8.750000 -2.750000 +v 1.062500 6.250000 -3.750000 +v 0.937500 6.250000 -2.750000 +v 1.062500 4.750000 -3.750000 +v 0.937500 4.750000 -2.750000 +v -0.937500 12.750000 -3.750000 +v -1.062500 14.750000 -3.749999 +v -0.937500 10.250000 -3.750000 +v -1.062500 12.250000 -3.750000 +v -0.937500 8.750000 -3.750000 +v -1.062500 10.750000 -3.750000 +v -0.937500 6.250000 -3.750000 +v -1.062500 8.250000 -3.750000 +v -0.937500 4.750000 -3.750000 +v -1.062500 6.750000 -3.750000 +v -0.750000 10.250000 -4.062500 +v -0.750000 8.750000 -4.062500 +v -0.750000 12.250000 -3.937500 +v -0.750000 10.750000 -3.937500 +v -0.750000 6.250000 -4.062500 +v -0.750000 4.750000 -4.062500 +v -0.750000 8.250000 -3.937500 +v -0.750000 6.750000 -3.937500 +v -0.750000 10.250000 -2.562500 +v -0.750000 8.750000 -2.562500 +v 0.750000 10.250000 -2.437500 +v 0.750000 8.750000 -2.437500 +v -0.750000 6.250000 -2.562500 +v -0.750000 4.750000 -2.562500 +v 0.750000 6.250000 -2.437500 +v 0.750000 4.750000 -2.437500 +v -0.750000 12.750000 -4.062500 +v -0.750000 14.750000 -3.937499 +v -0.750000 12.750000 -2.562500 +v 0.750000 12.750000 -2.437500 +v 1.062500 12.750000 -3.750000 +v 0.937500 14.750000 -3.749999 +v 1.062500 10.250000 -3.750000 +v 0.937500 12.250000 -3.750000 +v 1.062500 8.750000 -3.750000 +v 0.937500 10.750000 -3.750000 +v 1.062500 6.250000 -3.750000 +v 0.937500 8.250000 -3.750000 +v 1.062500 4.750000 -3.750000 +v 0.937500 6.750000 -3.750000 +v -0.937500 12.750000 -3.750000 +v -1.062500 12.750000 -2.750000 +v -0.937500 10.250000 -3.750000 +v -1.062500 10.250000 -2.750000 +v -0.937500 8.750000 -3.750000 +v -1.062500 8.750000 -2.750000 +v -0.937500 6.250000 -3.750000 +v -1.062500 6.250000 -2.750000 +v -0.937500 4.750000 -3.750000 +v -1.062500 4.750000 -2.750000 +vt 0.923077 0.032258 vt 0.897436 -0.000000 -vt 0.923077 0.000000 -vt 0.948718 -0.000000 -vt 0.923077 0.134831 -vt 0.923077 0.000000 -vt 0.974359 0.134831 -vt 0.974359 0.134831 -vt 0.948718 -0.000000 -vt 0.974359 -0.000000 -vt 1.000000 0.134831 -vt 1.000000 -0.000000 +vt 0.923077 -0.000000 +vt 0.923077 0.032258 vt 0.897436 -0.000000 -vt 0.948718 0.494382 -vt 0.974359 0.359551 -vt 0.974359 0.494382 -vt 0.897436 0.359551 -vt 0.923077 0.494382 -vt 0.897436 0.494382 -vt 0.923077 0.359551 -vt 0.948718 0.359551 -vt 0.923077 0.314607 -vt 0.948718 0.179775 -vt 0.948718 0.314607 -vt 1.000000 0.494382 -vt 1.000000 0.539326 -vt 0.974359 0.674157 -vt 0.974359 0.539326 -vt 1.000000 0.359551 -vt 1.000000 0.314607 -vt 0.923077 0.314607 -vt 1.000000 0.539326 -vt 0.923077 0.539326 -vt 0.974359 0.134831 -vt 0.948718 0.134831 -vt 0.948718 0.719101 -vt 0.974359 0.719101 -vt 0.897436 0.314607 -vt 0.923077 0.179775 -vt 0.948718 0.539326 -vt 0.923077 0.674157 -vt 0.923077 0.539326 -vt 0.948718 0.674157 -vt 0.974359 0.314607 -vt 1.000000 0.179775 -vt 1.000000 0.314607 -vt 0.974359 0.179775 -vt 0.897436 0.674157 -vt 0.897436 0.539326 -vt 0.897436 0.853933 -vt 0.897436 0.853933 -vt 0.544872 0.921348 -vt 0.544872 0.966292 -vt 0.570513 0.921348 -vt 0.397436 0.977528 -vt 0.358974 0.977528 -vt 0.397436 0.977528 -vt 0.397436 0.977528 -vt 0.397436 0.977528 -vt 0.397436 0.977528 -vt 0.358974 0.977528 -vt 0.397436 0.977528 -vt 0.570513 0.921348 -vt 0.544872 0.966292 -vt 0.544872 0.921348 -vt 0.897436 0.134831 -vt 0.948718 0.134831 -vt 0.948718 0.134831 -vt 0.897436 0.134831 -vt 1.000000 0.674157 -vt 0.897436 0.179775 +vt 0.923077 -0.000000 +vt 0.923077 0.032258 +vt 0.897436 -0.000000 +vt 0.923077 -0.000000 +vt 0.923077 0.032258 +vt 0.897436 -0.000000 +vt 0.923077 -0.000000 +vt 0.897436 0.790323 +vt 0.923077 0.758065 +vt 0.923077 0.790323 +vt 0.897436 0.790323 +vt 0.923077 0.758065 +vt 0.923077 0.790323 +vt 0.897436 0.790323 +vt 0.923077 0.758065 +vt 0.923077 0.790323 +vt 0.897436 0.790323 +vt 0.923077 0.758065 +vt 0.923077 0.790323 +vt 0.974359 0.032258 +vt 0.948718 0.758065 +vt 0.948718 0.032258 +vt 1.000000 0.032258 +vt 0.974359 0.758065 +vt 0.974359 0.032258 +vt 1.000000 0.032258 +vt 0.974359 0.758065 +vt 0.897436 0.758065 +vt 0.897436 0.032258 +vt 0.897436 0.758065 +vt 0.897436 0.032258 +vt 0.948718 0.032258 +vt 0.948718 0.032258 +vt 0.974359 0.032258 +vt 0.948718 0.758065 +vt 0.974359 0.032258 +vt 0.948718 0.758065 +vt 1.000000 0.032258 +vt 0.974359 0.758065 +vt 1.000000 0.032258 +vt 0.974359 0.758065 +vt 0.897436 0.758065 +vt 0.897436 0.032258 +vt 0.948718 0.032258 +vt 0.897436 0.758065 +vt 0.897436 0.032258 +vt 0.948718 0.758065 +vt 0.897436 0.854839 +vt 0.974359 0.887097 +vt 0.897436 0.887097 +vt 0.974359 0.790323 +vt 0.897436 0.822581 +vt 0.897436 0.790323 +vt 0.974359 0.822581 +vt 0.974359 0.854839 +vt 0.897436 0.919355 +vt 0.448718 0.822581 +vt 0.512821 0.854839 +vt 0.448718 0.854839 +vt 0.275641 0.919355 +vt 0.211538 0.951613 +vt 0.211538 0.919355 +vt 0.512821 0.854839 +vt 0.538462 0.903226 +vt 0.512821 0.870968 +vt 0.448718 0.870968 +vt 0.448718 0.854839 +vt 0.384615 0.854839 +vt 0.410256 0.903226 +vt 0.384615 0.903226 +vt 0.448718 0.870968 +vt 0.576923 0.903226 +vt 0.551282 0.959677 +vt 0.551282 0.903226 +vt 0.346154 0.919355 +vt 0.301282 0.951613 +vt 0.301282 0.919355 +vt 0.384615 0.951613 +vt 0.371795 0.919355 +vt 0.384615 0.919355 +vt 0.410256 0.903226 +vt 0.423077 0.959677 +vt 0.410256 0.959677 +vt 0.538462 0.903226 +vt 0.384615 0.959677 +vt 0.410256 0.959677 +vt 0.185897 0.919355 +vt 0.141026 0.951613 +vt 0.141026 0.919355 +vt 0.551282 0.959677 +vt 0.551282 0.903226 +vt 0.102564 0.919355 +vt 0.115385 0.951613 +vt 0.102564 0.951613 +vt 0.423077 0.959677 +vt 0.275641 0.951613 +vt 0.512821 0.870968 +vt 0.576923 0.854839 +vt 0.551282 0.854839 +vt 0.423077 0.903226 +vt 0.897436 0.854839 +vt 0.974359 0.887097 +vt 0.897436 0.887097 +vt 0.974359 0.790323 +vt 0.897436 0.822581 +vt 0.897436 0.790323 +vt 0.974359 0.822581 +vt 0.974359 0.854839 +vt 0.897436 0.919355 +vt 0.794872 0.846774 +vt 0.814103 0.693548 +vt 0.814103 0.846774 +vt 0.833333 0.846774 +vt 0.852564 0.693548 +vt 0.852564 0.846774 +vt 0.833333 0.693548 +vt 0.871795 0.693548 +vt 0.871795 0.846774 +vt 0.794872 0.846774 +vt 0.814103 0.693548 +vt 0.814103 0.846774 +vt 0.833333 0.846774 +vt 0.852564 0.693548 +vt 0.852564 0.846774 +vt 0.833333 0.693548 +vt 0.871795 0.693548 +vt 0.871795 0.846774 +vt 0.897436 0.854839 +vt 0.974359 0.887097 +vt 0.897436 0.887097 +vt 0.974359 0.790323 +vt 0.897436 0.822581 +vt 0.897436 0.790323 +vt 0.974359 0.822581 +vt 0.974359 0.854839 +vt 0.897436 0.919355 +vt 0.448718 0.822581 +vt 0.512821 0.854839 +vt 0.448718 0.854839 +vt 0.275641 0.919355 +vt 0.211538 0.951613 +vt 0.211538 0.919355 +vt 0.512821 0.854839 +vt 0.538462 0.903226 +vt 0.512821 0.870968 +vt 0.448718 0.870968 +vt 0.448718 0.854839 +vt 0.384615 0.854839 +vt 0.410256 0.903226 +vt 0.384615 0.903226 +vt 0.448718 0.870968 +vt 0.576923 0.903226 +vt 0.551282 0.975806 +vt 0.551282 0.903226 +vt 0.358974 0.919355 +vt 0.301282 0.951613 +vt 0.301282 0.919355 +vt 0.384615 0.951613 +vt 0.371795 0.919355 +vt 0.384615 0.919355 +vt 0.410256 0.903226 +vt 0.423077 0.975806 +vt 0.410256 0.975806 +vt 0.538462 0.903226 +vt 0.384615 0.975806 +vt 0.410256 0.975806 +vt 0.185897 0.919355 +vt 0.128205 0.951613 +vt 0.128205 0.919355 +vt 0.551282 0.975806 +vt 0.551282 0.903226 +vt 0.102564 0.919355 +vt 0.115385 0.951613 +vt 0.102564 0.951613 +vt 0.423077 0.975806 +vt 0.275641 0.951613 +vt 0.512821 0.870968 +vt 0.576923 0.854839 +vt 0.551282 0.854839 +vt 0.423077 0.903226 +vt 0.897436 0.854839 +vt 0.974359 0.887097 +vt 0.897436 0.887097 +vt 0.974359 0.790323 +vt 0.897436 0.822581 +vt 0.897436 0.790323 +vt 0.974359 0.822581 +vt 0.974359 0.854839 +vt 0.897436 0.919355 +vt 0.794872 0.830645 +vt 0.814103 0.693548 +vt 0.814103 0.830645 +vt 0.833333 0.830645 +vt 0.852564 0.693548 +vt 0.852564 0.830645 +vt 0.833333 0.693548 +vt 0.871795 0.693548 +vt 0.871795 0.830645 +vt 0.794872 0.830645 +vt 0.814103 0.693548 +vt 0.814103 0.830645 +vt 0.833333 0.830645 +vt 0.852564 0.693548 +vt 0.852564 0.830645 +vt 0.833333 0.693548 +vt 0.871795 0.693548 +vt 0.871795 0.830645 +vt 0.897436 0.854839 +vt 0.974359 0.887097 +vt 0.897436 0.887097 +vt 0.974359 0.790323 +vt 0.897436 0.822581 +vt 0.897436 0.790323 +vt 0.974359 0.822581 +vt 0.974359 0.854839 +vt 0.897436 0.919355 +vt 0.448718 0.822581 +vt 0.512821 0.854839 +vt 0.448718 0.854839 +vt 0.275641 0.919355 +vt 0.211538 0.951613 +vt 0.211538 0.919355 +vt 0.512821 0.854839 +vt 0.538462 0.903226 +vt 0.512821 0.870968 +vt 0.448718 0.870968 +vt 0.448718 0.854839 +vt 0.384615 0.854839 +vt 0.410256 0.903226 +vt 0.384615 0.903226 +vt 0.448718 0.870968 +vt 0.576923 0.903226 +vt 0.551282 0.991935 +vt 0.551282 0.903226 +vt 0.371795 0.919355 +vt 0.301282 0.951613 +vt 0.301282 0.919355 +vt 0.384615 0.951613 +vt 0.384615 0.919355 +vt 0.410256 0.903226 +vt 0.423077 0.991935 +vt 0.410256 0.991935 +vt 0.538462 0.903226 +vt 0.384615 0.991935 +vt 0.410256 0.991935 +vt 0.185897 0.919355 +vt 0.115385 0.951613 +vt 0.115385 0.919355 +vt 0.551282 0.991935 +vt 0.551282 0.903226 +vt 0.102564 0.919355 +vt 0.102564 0.951613 +vt 0.423077 0.991935 +vt 0.275641 0.951613 +vt 0.512821 0.870968 +vt 0.576923 0.854839 +vt 0.551282 0.854839 +vt 0.423077 0.903226 +vt 0.897436 0.854839 +vt 0.974359 0.887097 +vt 0.897436 0.887097 +vt 0.974359 0.790323 +vt 0.897436 0.822581 +vt 0.897436 0.790323 +vt 0.974359 0.822581 +vt 0.974359 0.854839 +vt 0.897436 0.919355 +vt 0.794872 0.814516 +vt 0.814103 0.693548 +vt 0.814103 0.814516 +vt 0.833333 0.814516 +vt 0.852564 0.693548 +vt 0.852564 0.814516 +vt 0.833333 0.693548 +vt 0.871795 0.693548 +vt 0.871795 0.814516 +vt 0.794872 0.814516 +vt 0.814103 0.693548 +vt 0.814103 0.814516 +vt 0.833333 0.814516 +vt 0.852564 0.693548 +vt 0.852564 0.814516 +vt 0.833333 0.693548 +vt 0.871795 0.693548 +vt 0.871795 0.814516 +vt 0.948718 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.790323 +vt 1.000000 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.790323 +vt 1.000000 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.790323 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.758065 +vt 0.974359 0.919355 +vt 0.512821 0.822581 +vt 0.410256 0.854839 +vt 0.576923 0.959677 +vt 0.346154 0.951613 +vt 0.371795 0.951613 +vt 0.423077 0.903226 +vt 0.538462 0.959677 +vt 0.185897 0.951613 +vt 0.538462 0.959677 +vt 0.115385 0.919355 +vt 0.974359 0.919355 +vt 0.794872 0.693548 +vt 0.794872 0.693548 +vt 0.974359 0.919355 +vt 0.512821 0.822581 +vt 0.410256 0.854839 +vt 0.576923 0.975806 +vt 0.358974 0.951613 +vt 0.371795 0.951613 +vt 0.423077 0.903226 +vt 0.538462 0.975806 +vt 0.185897 0.951613 +vt 0.538462 0.975806 +vt 0.115385 0.919355 +vt 0.974359 0.919355 +vt 0.794872 0.693548 +vt 0.794872 0.693548 +vt 0.974359 0.919355 +vt 0.512821 0.822581 +vt 0.410256 0.854839 +vt 0.576923 0.991935 +vt 0.371795 0.951613 +vt 0.423077 0.903226 +vt 0.538462 0.991935 +vt 0.185897 0.951613 +vt 0.538462 0.991935 +vt 0.974359 0.919355 +vt 0.794872 0.693548 +vt 0.794872 0.693548 +vt 1.000000 0.758065 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 1.000000 0.790323 +vt 1.000000 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.758065 +vt 0.948718 0.758065 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.758065 +vt 1.000000 0.790323 +vt 0.948718 0.758065 +vt 1.000000 0.758065 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.987179 0.758065 +vt 0.987179 0.790323 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.758065 +vt 0.948718 0.758065 +vt 0.987179 0.758065 vn 0.0000 -1.0000 0.0000 vn 0.0000 1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 vn 0.7071 0.0000 -0.7071 -vn -0.7071 0.0000 -0.7071 -s off -f 2845/3830/271 2843/3831/271 2842/3832/271 -f 2849/3833/271 2847/3834/271 2846/3835/271 -f 2851/3836/272 2853/3837/272 2850/3838/272 -f 2855/3839/272 2857/3840/272 2854/3841/272 -f 2848/3842/273 2855/3843/273 2847/3844/273 -f 2849/3833/274 2856/3845/274 2848/3846/274 -f 2844/3847/273 2851/3848/273 2843/3849/273 -f 2845/3830/274 2852/3850/274 2844/3851/274 -f 2846/3852/275 2857/3840/275 2849/3833/275 -f 2847/3844/276 2854/3853/276 2846/3852/276 -f 2842/3854/275 2853/3837/275 2845/3830/275 -f 2843/3849/276 2850/3855/276 2842/3854/276 -f 2859/3856/272 2860/3857/272 2858/3858/272 -f 2864/3859/271 2862/3860/271 2863/3861/271 -f 2860/3857/274 2866/3862/274 2858/3858/274 -f 2861/3863/275 2864/3864/275 2860/3865/275 -f 2859/3856/274 2865/3866/274 2861/3867/274 -f 2858/3868/273 2862/3869/273 2859/3870/273 -f 2869/3871/275 2871/3872/275 2867/3873/275 -f 2864/3864/274 2867/3873/274 2860/3865/274 -f 2858/3868/274 2868/3874/274 2863/3875/274 -f 2863/3861/274 2869/3876/274 2864/3859/274 -f 2871/3877/276 2872/3878/276 2870/3879/276 -f 2867/3880/272 2870/3879/272 2866/3862/272 -f 2866/3881/273 2872/3882/273 2868/3874/273 -f 2868/3883/271 2873/3884/271 2869/3876/271 -f 2879/3885/271 2874/3886/271 2878/3887/271 -f 2881/3888/273 2875/3889/273 2879/3890/273 -f 2880/3891/272 2877/3892/272 2881/3893/272 -f 2876/3894/276 2875/3895/276 2877/3892/276 -f 2884/3896/274 2878/3887/274 2883/3897/274 -f 2889/3898/274 2879/3890/274 2884/3899/274 -f 2883/3900/274 2880/3901/274 2887/3902/274 -f 2878/3903/275 2876/3904/275 2880/3901/275 -f 2889/3898/273 2885/3905/273 2888/3906/273 -f 2888/3907/274 2882/3908/274 2886/3909/274 -f 2886/3910/275 2883/3900/275 2887/3902/275 -f 2887/3911/274 2881/3893/274 2889/3912/274 -f 2883/3897/271 2885/3913/271 2884/3896/271 -f 2888/3907/272 2887/3911/272 2889/3912/272 -f 2903/3914/271 2894/3915/271 2895/3916/271 -f 2901/3917/273 2897/3918/273 2893/3919/273 -f 2890/3920/272 2899/3921/272 2891/3922/272 -f 2902/3923/275 2890/3920/275 2894/3915/275 -f 2904/3924/275 2892/3925/275 2896/3926/275 -f 2905/3927/271 2896/3926/271 2897/3928/271 -f 2892/3925/272 2901/3917/272 2893/3919/272 -f 2899/3921/273 2895/3929/273 2891/3922/273 -f 2907/3930/274 2908/3931/274 2909/3932/274 -f 2912/3933/276 2910/3934/276 2911/3935/276 -f 2907/3930/272 2913/3936/272 2906/3937/272 -f 2913/3938/272 2925/3939/272 2917/3940/272 -f 2908/3931/271 2911/3941/271 2909/3932/271 -f 2911/3942/271 2923/3943/271 2915/3944/271 -f 2912/3945/271 2908/3931/271 2916/3946/271 -f 2913/3936/272 2917/3947/272 2906/3937/272 -f 2917/3940/277 2908/3931/277 2906/3937/277 -f 2911/3941/271 2915/3948/271 2909/3932/271 -f 2910/3934/272 2907/3930/272 2914/3949/272 -f 2915/3944/278 2907/3930/278 2909/3932/278 -f 2920/3950/276 2925/3939/276 2921/3951/276 -f 2918/3952/276 2923/3943/276 2919/3953/276 -f 2912/3954/275 2921/3955/275 2913/3938/275 -f 2914/3956/272 2918/3957/272 2910/3958/272 -f 2915/3944/275 2922/3959/275 2914/3956/275 -f 2916/3960/271 2920/3961/271 2912/3962/271 -f 2917/3940/273 2924/3963/273 2916/3960/273 -f 2910/3958/273 2919/3964/273 2911/3965/273 -f 2845/3830/271 2844/3851/271 2843/3831/271 -f 2849/3833/271 2848/3846/271 2847/3834/271 -f 2851/3836/272 2852/3850/272 2853/3837/272 -f 2855/3839/272 2856/3845/272 2857/3840/272 -f 2848/3842/273 2856/3966/273 2855/3843/273 -f 2849/3833/274 2857/3840/274 2856/3845/274 -f 2844/3847/273 2852/3967/273 2851/3848/273 -f 2845/3830/274 2853/3837/274 2852/3850/274 -f 2846/3852/275 2854/3853/275 2857/3840/275 -f 2847/3844/276 2855/3843/276 2854/3853/276 -f 2842/3854/275 2850/3855/275 2853/3837/275 -f 2843/3849/276 2851/3848/276 2850/3855/276 -f 2859/3856/272 2861/3867/272 2860/3857/272 -f 2864/3859/271 2865/3968/271 2862/3860/271 -f 2860/3857/274 2867/3880/274 2866/3862/274 -f 2861/3863/275 2865/3969/275 2864/3864/275 -f 2859/3856/274 2862/3970/274 2865/3866/274 -f 2858/3868/273 2863/3875/273 2862/3869/273 -f 2869/3871/275 2873/3971/275 2871/3872/275 -f 2864/3864/274 2869/3871/274 2867/3873/274 -f 2858/3868/274 2866/3881/274 2868/3874/274 -f 2863/3861/274 2868/3883/274 2869/3876/274 -f 2871/3877/276 2873/3972/276 2872/3878/276 -f 2867/3880/272 2871/3877/272 2870/3879/272 -f 2866/3881/273 2870/3973/273 2872/3882/273 -f 2868/3883/271 2872/3974/271 2873/3884/271 -f 2879/3885/271 2875/3975/271 2874/3886/271 -f 2881/3888/273 2877/3976/273 2875/3889/273 -f 2880/3891/272 2876/3894/272 2877/3892/272 -f 2876/3894/276 2874/3977/276 2875/3895/276 -f 2884/3896/274 2879/3885/274 2878/3887/274 -f 2889/3898/274 2881/3888/274 2879/3890/274 -f 2883/3900/274 2878/3903/274 2880/3901/274 -f 2878/3903/275 2874/3978/275 2876/3904/275 -f 2889/3898/273 2884/3899/273 2885/3905/273 -f 2888/3907/274 2885/3979/274 2882/3908/274 -f 2886/3910/275 2882/3980/275 2883/3900/275 -f 2887/3911/274 2880/3891/274 2881/3893/274 -f 2883/3897/271 2882/3981/271 2885/3913/271 -f 2888/3907/272 2886/3909/272 2887/3911/272 -f 2903/3914/271 2902/3923/271 2894/3915/271 -f 2901/3917/273 2905/3982/273 2897/3918/273 -f 2890/3920/272 2898/3983/272 2899/3921/272 -f 2902/3923/275 2898/3983/275 2890/3920/275 -f 2904/3924/275 2900/3984/275 2892/3925/275 -f 2905/3927/271 2904/3924/271 2896/3926/271 -f 2892/3925/272 2900/3984/272 2901/3917/272 -f 2899/3921/273 2903/3985/273 2895/3929/273 -f 2907/3930/274 2906/3937/274 2908/3931/274 -f 2912/3933/276 2913/3936/276 2910/3934/276 -f 2907/3930/272 2910/3934/272 2913/3936/272 -f 2913/3938/272 2921/3955/272 2925/3939/272 -f 2908/3931/271 2912/3945/271 2911/3941/271 -f 2911/3942/271 2919/3986/271 2923/3943/271 -f 2917/3940/277 2916/3960/277 2908/3931/277 -f 2915/3944/278 2914/3956/278 2907/3930/278 -f 2920/3950/276 2924/3963/276 2925/3939/276 -f 2918/3952/276 2922/3959/276 2923/3943/276 -f 2912/3954/275 2920/3987/275 2921/3955/275 -f 2914/3956/272 2922/3959/272 2918/3957/272 -f 2915/3944/275 2923/3943/275 2922/3959/275 -f 2916/3960/271 2924/3963/271 2920/3961/271 -f 2917/3940/273 2925/3939/273 2924/3963/273 -f 2910/3958/273 2918/3957/273 2919/3964/273 -o Micro_Rope -v -0.187500 5.250000 1.375000 -v -0.275888 5.213388 1.375000 -v -0.312500 5.125000 1.375000 -v -0.275888 5.036612 1.375000 -v -0.187500 5.000000 1.375000 -v -0.099112 5.036612 1.375000 -v -0.062500 5.125000 1.375000 -v -0.099112 5.213388 1.375000 -v -0.187500 5.250000 0.125000 -v -0.275888 5.213388 0.125000 -v -0.312500 5.125000 0.125000 -v -0.275888 5.036612 0.125000 -v -0.187500 5.000000 0.125000 -v -0.099112 5.036612 0.125000 -v -0.062500 5.125000 0.125000 -v -0.099112 5.213388 0.125000 -v 0.187500 4.250000 1.375000 -v 0.099112 4.213388 1.375000 -v 0.062500 4.125000 1.375000 -v 0.099112 4.036612 1.375000 -v 0.187500 4.000000 1.375000 -v 0.275888 4.036612 1.375000 -v 0.312500 4.125000 1.375000 -v 0.275888 4.213388 1.375000 -v 0.187500 4.250000 0.125000 -v 0.099112 4.213388 0.125000 -v 0.062500 4.125000 0.125000 -v 0.099112 4.036612 0.125000 -v 0.187500 4.000000 0.125000 -v 0.275888 4.036612 0.125000 -v 0.312500 4.125000 0.125000 -v 0.275888 4.213388 0.125000 -vt 0.711111 0.896552 -vt 0.700000 0.724138 -vt 0.711111 0.724138 -vt 0.722222 0.896552 -vt 0.722222 0.724138 -vt 0.744444 0.896552 -vt 0.733333 0.724138 -vt 0.744444 0.724138 -vt 0.677778 0.896552 -vt 0.666667 0.724138 -vt 0.677778 0.724138 -vt 0.700000 0.896552 -vt 0.688889 0.724138 -vt 0.733333 0.896552 -vt 0.755556 0.896552 -vt 0.755556 0.724138 -vt 0.688889 0.896552 -vt 0.711111 0.896552 -vt 0.700000 0.724138 -vt 0.711111 0.724138 -vt 0.722222 0.896552 -vt 0.722222 0.724138 -vt 0.744444 0.896552 -vt 0.733333 0.724138 -vt 0.744444 0.724138 -vt 0.677778 0.896552 -vt 0.666667 0.724138 -vt 0.677778 0.724138 -vt 0.700000 0.896552 -vt 0.688889 0.724138 -vt 0.733333 0.896552 -vt 0.755556 0.896552 -vt 0.755556 0.724138 -vt 0.688889 0.896552 -vt 0.666667 0.896552 -vt 0.666667 0.896552 -vn 0.0000 1.0000 0.0000 -vn -0.7071 0.7071 0.0000 -vn 0.7071 0.7071 0.0000 -vn 0.7071 -0.7071 0.0000 -vn 1.0000 0.0000 0.0000 -vn -0.7071 -0.7071 0.0000 -vn 0.0000 -1.0000 0.0000 -vn -1.0000 0.0000 0.0000 -s 1 -f 2934/3988/279 2927/3989/280 2926/3990/279 -f 2941/3991/281 2926/3990/279 2933/3992/281 -f 2939/3993/282 2932/3994/283 2931/3995/282 -f 2937/3996/284 2930/3997/285 2929/3998/284 -f 2935/3999/280 2928/4000/286 2927/3989/280 -f 2940/4001/283 2933/3992/281 2932/3994/283 -f 2938/4002/285 2931/3995/282 2930/4003/285 -f 2936/4004/286 2929/3998/284 2928/4000/286 -f 2950/4005/279 2943/4006/280 2942/4007/279 -f 2957/4008/281 2942/4007/279 2949/4009/281 -f 2955/4010/282 2948/4011/283 2947/4012/282 -f 2953/4013/284 2946/4014/285 2945/4015/284 -f 2951/4016/280 2944/4017/286 2943/4006/280 -f 2956/4018/283 2949/4009/281 2948/4011/283 -f 2954/4019/285 2947/4012/282 2946/4020/285 -f 2952/4021/286 2945/4015/284 2944/4017/286 -f 2934/3988/279 2935/3999/280 2927/3989/280 -f 2941/3991/281 2934/3988/279 2926/3990/279 -f 2939/3993/282 2940/4001/283 2932/3994/283 -f 2937/3996/284 2938/4022/285 2930/3997/285 -f 2935/3999/280 2936/4004/286 2928/4000/286 -f 2940/4001/283 2941/3991/281 2933/3992/281 -f 2938/4002/285 2939/3993/282 2931/3995/282 -f 2936/4004/286 2937/3996/284 2929/3998/284 -f 2950/4005/279 2951/4016/280 2943/4006/280 -f 2957/4008/281 2950/4005/279 2942/4007/279 -f 2955/4010/282 2956/4018/283 2948/4011/283 -f 2953/4013/284 2954/4023/285 2946/4014/285 -f 2951/4016/280 2952/4021/286 2944/4017/286 -f 2956/4018/283 2957/4008/281 2949/4009/281 -f 2954/4019/285 2955/4010/282 2947/4012/282 -f 2952/4021/286 2953/4013/284 2945/4015/284 -o Micro_Pivot -v -0.125000 1.250000 -1.375000 -v 0.125000 1.250000 -1.375000 -v -0.125000 1.250000 -1.625000 -v 0.125000 1.250000 -1.625000 -v -0.125000 3.250000 -1.625000 -v -0.125000 3.250000 -1.375000 -v 0.125000 3.250000 -1.375000 -v 0.125000 3.250000 -1.625000 -v -0.062500 3.250000 -1.437500 -v 0.062500 3.250000 -1.437500 -v -0.062500 3.250000 -1.562500 -v 0.062500 3.250000 -1.562500 -v -0.062500 4.250000 -1.562500 -v -0.062500 4.250000 -1.437500 -v 0.062500 4.250000 -1.437500 -v 0.062500 4.250000 -1.562500 -vt 0.755556 0.310345 -vt 0.777778 0.275862 -vt 0.777778 0.310345 -vt 0.844444 -0.000000 -vt 0.822222 0.275862 -vt 0.822222 -0.000000 -vt 0.800000 -0.000000 -vt 0.777778 -0.000000 -vt 0.755556 0.275862 -vt 0.755556 -0.000000 -vt 0.800000 0.275862 -vt 0.788889 0.275862 -vt 0.777778 0.413793 -vt 0.777778 0.275862 -vt 0.811111 0.275862 -vt 0.800000 0.413793 -vt 0.800000 0.275862 -vt 0.822222 0.275862 -vt 0.811111 0.413793 -vt 0.788889 0.413793 -vt 0.844444 0.275862 -vt 0.822222 0.413793 -vn 0.0000 1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -s off -f 2964/4024/287 2962/4025/287 2963/4026/287 -f 2961/4027/288 2964/4028/288 2959/4029/288 -f 2958/4030/289 2962/4025/289 2960/4031/289 -f 2960/4031/290 2965/4032/290 2961/4033/290 -f 2959/4029/291 2963/4034/291 2958/4030/291 -f 2968/4035/290 2973/4036/290 2969/4037/290 -f 2967/4038/291 2971/4039/291 2966/4040/291 -f 2969/4041/288 2972/4042/288 2967/4038/288 -f 2966/4040/289 2970/4043/289 2968/4035/289 -f 2964/4024/287 2965/4032/287 2962/4025/287 -f 2961/4027/288 2965/4044/288 2964/4028/288 -f 2958/4030/289 2963/4034/289 2962/4025/289 -f 2960/4031/290 2962/4025/290 2965/4032/290 -f 2959/4029/291 2964/4028/291 2963/4034/291 -f 2968/4035/290 2970/4043/290 2973/4036/290 -f 2967/4038/291 2972/4042/291 2971/4039/291 -f 2969/4041/288 2973/4045/288 2972/4042/288 -f 2966/4040/289 2971/4039/289 2970/4043/289 -o Micro_Erector -v -0.125000 3.250000 -1.625000 -v -0.125000 3.250000 -1.375000 -v 0.125000 3.250000 -1.375000 -v 0.125000 3.250000 -1.625000 -v -0.125000 6.000000 -1.625000 -v -0.125000 6.250000 -1.375000 -v 0.125000 6.250000 -1.375000 -v 0.125000 6.000000 -1.625000 -v -0.125000 6.250000 -1.375000 -v 0.125000 6.250000 -1.375000 -v -0.125000 6.000000 -1.375000 -v 0.125000 6.000000 -1.375000 -v -0.125000 6.250000 -0.625000 -v 0.125000 6.250000 -0.625000 -v -0.125000 6.000000 -0.625000 -v 0.125000 6.000000 -0.625000 -v 0.375000 6.250000 -0.125000 -v 0.625000 6.250000 -0.125000 -v 0.375000 6.000000 -0.125000 -v 0.625000 6.000000 -0.125000 -v 0.375000 6.250000 0.375000 -v 0.625000 6.250000 0.125000 -v 0.375000 6.000000 0.375000 -v 0.625000 6.000000 0.125000 -v -0.625000 6.250000 -0.125000 -v -0.375000 6.250000 -0.125000 -v -0.625000 6.000000 -0.125000 -v -0.375000 6.000000 -0.125000 -v -0.625000 6.250000 0.125000 -v -0.375000 6.250000 0.375000 -v -0.625000 6.000000 0.125000 -v -0.375000 6.000000 0.375000 -v -0.125000 6.250000 -0.375000 -v 0.125000 6.250000 -0.375000 -v -0.125000 6.000000 -0.375000 -v 0.125000 6.000000 -0.375000 -v 0.000000 6.250000 -0.625000 -v 0.000000 6.000000 -0.625000 -v 0.000000 5.500000 -1.375000 -v 0.000000 5.250000 -1.375000 -v 0.000000 5.000000 -1.375000 -v 0.000000 4.750000 -1.375000 -v 0.000000 4.250000 -0.625000 -v 0.000000 4.000000 -0.625000 -v 0.125000 4.000000 -0.375000 -v -0.125000 4.000000 -0.375000 -v 0.125000 4.250000 -0.375000 -v -0.125000 4.250000 -0.375000 -v -0.375000 4.000000 0.375000 -v -0.625000 4.000000 0.125000 -v -0.375000 4.250000 0.375000 -v -0.625000 4.250000 0.125000 -v -0.375000 4.000000 -0.125000 -v -0.625000 4.000000 -0.125000 -v -0.375000 4.250000 -0.125000 -v -0.625000 4.250000 -0.125000 -v 0.625000 4.000000 0.125000 -v 0.375000 4.000000 0.375000 -v 0.625000 4.250000 0.125000 -v 0.375000 4.250000 0.375000 -v 0.625000 4.000000 -0.125000 -v 0.375000 4.000000 -0.125000 -v 0.625000 4.250000 -0.125000 -v 0.375000 4.250000 -0.125000 -v 0.125000 4.000000 -0.625000 -v -0.125000 4.000000 -0.625000 -v 0.125000 4.250000 -0.625000 -v -0.125000 4.250000 -0.625000 -v 0.125000 4.000000 -1.375000 -v -0.125000 4.000000 -1.375000 -v 0.125000 4.250000 -1.375000 -v -0.125000 4.250000 -1.375000 -v 0.000000 6.250000 -0.625000 -v 0.000000 6.000000 -0.625000 -v 0.000000 5.500000 -1.375000 -v 0.000000 5.250000 -1.375000 -v 0.000000 5.000000 -1.375000 -v 0.000000 4.750000 -1.375000 -v 0.000000 4.250000 -0.625000 -v 0.000000 4.000000 -0.625000 -vt 0.800000 0.448276 -vt 0.777778 0.413793 -vt 0.800000 0.413793 -vt 0.777778 0.862069 -vt 0.800000 0.827586 -vt 0.800000 0.862069 -vt 0.777778 0.827586 -vt 0.777778 0.448276 -vt 0.844444 0.448276 -vt 0.822222 0.862069 -vt 0.822222 0.448276 -vt 0.755556 0.448276 -vt 0.755556 0.862069 -vt 0.866667 0.172414 -vt 0.911111 0.137931 -vt 0.888889 0.172414 -vt 1.000000 0.172414 -vt 0.977778 0.103448 -vt 1.000000 0.103448 -vt 0.866667 -0.000000 -vt 0.844444 0.103448 -vt 0.844444 -0.000000 -vt 0.933333 0.000000 -vt 0.911111 0.103448 -vt 0.911111 0.000000 -vt 1.000000 -0.000000 -vt 0.977778 -0.000000 -vt 0.933333 -0.000000 -vt 0.911111 0.103448 -vt 0.911111 -0.000000 -vt 0.866667 0.241379 -vt 0.844444 0.206897 -vt 0.866667 0.206897 -vt 0.955556 0.172414 -vt 0.977778 0.206897 -vt 0.955556 0.241379 -vt 0.866667 0.172414 -vt 0.844444 0.172414 -vt 0.888889 0.172414 -vt 0.844444 0.310345 -vt 0.866667 0.310345 -vt 0.955556 0.172414 -vt 0.933333 0.103448 -vt 0.977778 0.172414 -vt 0.977778 0.206897 -vt 1.000000 0.241379 -vt 0.977778 0.241379 -vt 0.866667 0.206897 -vt 0.977778 0.310345 -vt 1.000000 0.310345 -vt 0.955556 0.241379 -vt 0.933333 0.137931 -vt 0.911111 0.172414 -vt 0.911111 0.137931 -vt 0.933333 0.103448 -vt 1.000000 0.344828 -vt 0.866667 0.344828 -vt 0.866667 0.103448 -vt 0.933333 0.137931 -vt 0.977778 0.172414 -vt 0.444444 0.000000 -vt 0.511111 0.034483 -vt 0.444444 0.034483 -vt 0.444444 0.034483 -vt 0.511111 0.000000 -vt 0.511111 0.034483 -vt 0.933333 0.103448 -vt 0.911111 0.137931 -vt 0.911111 0.103448 -vt 0.933333 0.137931 -vt 0.911111 0.172414 -vt 0.911111 0.137931 -vt 1.000000 0.172414 -vt 0.977778 0.206897 -vt 0.977778 0.172414 -vt 0.955556 0.172414 -vt 0.955556 0.241379 -vt 0.977778 0.310345 -vt 1.000000 0.241379 -vt 1.000000 0.310345 -vt 0.888889 0.172414 -vt 0.866667 0.206897 -vt 0.866667 0.172414 -vt 0.977778 0.241379 -vt 0.933333 0.103448 -vt 0.844444 0.310345 -vt 0.866667 0.241379 -vt 0.866667 0.310345 -vt 0.888889 0.172414 -vt 0.866667 0.206897 -vt 0.866667 0.172414 -vt 0.844444 0.206897 -vt 0.844444 0.172414 -vt 0.955556 0.172414 -vt 0.977778 0.206897 -vt 0.955556 0.241379 -vt 0.933333 -0.000000 -vt 0.911111 -0.000000 -vt 1.000000 -0.000000 -vt 0.977778 0.103448 -vt 0.977778 -0.000000 -vt 0.933333 0.000000 -vt 0.911111 0.103448 -vt 0.911111 0.000000 -vt 0.866667 -0.000000 -vt 0.844444 0.103448 -vt 0.844444 -0.000000 -vt 1.000000 0.103448 -vt 0.511111 0.034483 -vt 0.444444 0.000000 -vt 0.444444 0.034483 -vt 0.511111 0.000000 -vt 0.444444 0.034483 -vt 0.511111 0.034483 -vt 1.000000 0.344828 -vt 0.866667 0.344828 -vt 0.866667 0.103448 -vt 0.933333 0.137931 -vt 0.977778 0.172414 -vt 0.844444 0.862069 -vt 0.844444 0.241379 -vt 0.888889 0.241379 -vt 1.000000 0.206897 -vt 0.888889 0.241379 -vt 0.933333 0.172414 -vt 0.977778 0.344828 -vt 0.844444 0.344828 -vt 0.511111 0.000000 -vt 0.444444 -0.000000 -vt 0.933333 0.172414 -vt 1.000000 0.206897 -vt 0.888889 0.241379 -vt 0.844444 0.241379 -vt 0.888889 0.241379 -vt 0.511111 0.000000 -vt 0.444444 -0.000000 -vt 0.977778 0.344828 -vt 0.844444 0.344828 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.7071 -0.7071 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn -0.7071 0.0000 -0.7071 -vn 0.0000 1.0000 0.0000 +vn -0.7071 -0.0000 0.7071 vn 0.7071 0.0000 0.7071 -vn -0.7071 0.0000 0.7071 -vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 -0.7071 s off -f 2974/4046/292 2976/4047/292 2975/4048/292 -f 2980/4049/293 2978/4050/293 2979/4051/293 -f 2974/4046/294 2981/4052/294 2977/4053/294 -f 2976/4054/295 2979/4055/295 2975/4056/295 -f 2976/4057/296 2981/4052/296 2980/4058/296 -f 2975/4056/297 2978/4050/297 2974/4046/297 -f 3000/4059/292 3008/4060/292 3001/4061/292 -f 3000/4062/298 2986/4063/298 2988/4064/298 -f 2983/4065/296 2989/4066/296 2985/4067/296 -f 2982/4068/299 2987/4069/299 2983/4070/299 -f 2984/4071/297 2986/4063/297 2982/4072/297 -f 2985/4073/292 2988/4074/292 2984/4075/292 -f 2994/4076/300 2997/4077/300 2995/4078/300 -f 2992/4079/292 2997/4080/292 2996/4081/292 -f 2991/4082/296 2997/4077/296 2993/4083/296 -f 2990/4084/299 2995/4078/299 2991/4082/299 -f 2992/4085/297 2994/4076/297 2990/4086/297 -f 2999/4087/299 2986/4088/299 2998/4089/299 -f 3002/4090/301 3005/4091/301 3003/4092/301 -f 3001/4061/292 3004/4093/292 3000/4059/292 -f 2999/4094/296 3005/4091/296 3001/4095/296 -f 2999/4087/299 3002/4090/299 3003/4096/299 -f 3000/4062/297 3002/4090/297 2998/4089/297 -f 3006/4097/295 3009/4098/295 3007/4099/295 -f 2989/4100/292 3008/4060/292 2988/4074/292 -f 3008/4101/300 2999/4094/300 3001/4095/300 -f 2986/4088/299 3007/4099/299 2987/4069/299 -f 3007/4102/301 2992/4085/301 2990/4086/301 -f 2991/4082/299 3007/4099/299 2990/4084/299 -f 2991/4082/302 2989/4066/302 2987/4103/302 -f 3009/4104/292 2993/4105/292 2992/4079/292 -f 3011/4106/296 3012/4107/296 3010/4108/296 -f 3016/4109/296 3015/4110/296 3014/4111/296 -f 3038/4112/292 3019/4113/292 3039/4114/292 -f 3021/4115/295 3018/4116/295 3020/4117/295 -f 3027/4118/297 3025/4119/297 3029/4120/297 -f 3028/4121/299 3025/4119/299 3024/4122/299 -f 3028/4123/296 3022/4124/296 3026/4125/296 -f 3026/4126/292 3023/4127/292 3027/4128/292 -f 3025/4119/301 3022/4124/301 3024/4129/301 -f 3028/4121/299 3041/4130/299 3029/4120/299 -f 3035/4131/297 3033/4132/297 3037/4133/297 -f 3037/4134/299 3032/4135/299 3036/4136/299 -f 3036/4136/296 3030/4137/296 3034/4138/296 -f 3035/4139/292 3030/4140/292 3031/4141/292 -f 3033/4132/300 3030/4137/300 3032/4135/300 -f 3042/4142/292 3039/4114/292 3043/4143/292 -f 3043/4144/297 3041/4145/297 3045/4146/297 -f 3045/4147/299 3040/4148/299 3044/4149/299 -f 3044/4150/296 3038/4151/296 3042/4152/296 -f 3027/4118/298 3041/4145/298 3039/4153/298 -f 3027/4128/292 3019/4113/292 3026/4126/292 -f 3048/4154/297 3047/4155/297 3046/4156/297 -f 3051/4157/297 3052/4158/297 3050/4159/297 -f 3019/4160/300 3028/4123/300 3026/4125/300 -f 3041/4130/299 3020/4117/299 3040/4148/299 -f 3020/4161/301 3035/4131/301 3037/4133/301 -f 3036/4136/299 3020/4117/299 3037/4134/299 -f 3036/4136/302 3038/4151/302 3040/4162/302 -f 3018/4163/292 3034/4164/292 3035/4139/292 -f 2974/4046/292 2977/4053/292 2976/4047/292 -f 2980/4049/293 2981/4052/293 2978/4050/293 -f 2974/4046/294 2978/4050/294 2981/4052/294 -f 2976/4054/295 2980/4165/295 2979/4055/295 -f 2976/4057/296 2977/4053/296 2981/4052/296 -f 2975/4056/297 2979/4055/297 2978/4050/297 -f 3000/4059/292 2988/4074/292 3008/4060/292 -f 3000/4062/298 2998/4089/298 2986/4063/298 -f 2983/4065/296 2987/4103/296 2989/4066/296 -f 2982/4068/299 2986/4088/299 2987/4069/299 -f 2984/4071/297 2988/4064/297 2986/4063/297 -f 2985/4073/292 2989/4100/292 2988/4074/292 -f 2994/4076/300 2996/4166/300 2997/4077/300 -f 2992/4079/292 2993/4105/292 2997/4080/292 -f 2991/4082/296 2995/4078/296 2997/4077/296 -f 2990/4084/299 2994/4167/299 2995/4078/299 -f 2992/4085/297 2996/4166/297 2994/4076/297 -f 2999/4087/299 3006/4097/299 2986/4088/299 -f 3002/4090/301 3004/4168/301 3005/4091/301 -f 3001/4061/292 3005/4169/292 3004/4093/292 -f 2999/4094/296 3003/4092/296 3005/4091/296 -f 2999/4087/299 2998/4089/299 3002/4090/299 -f 3000/4062/297 3004/4168/297 3002/4090/297 -f 3006/4097/295 3008/4170/295 3009/4098/295 -f 2989/4100/292 3009/4104/292 3008/4060/292 -f 3008/4101/300 3006/4171/300 2999/4094/300 -f 2986/4088/299 3006/4097/299 3007/4099/299 -f 3007/4102/301 3009/4172/301 2992/4085/301 -f 2991/4082/299 2987/4069/299 3007/4099/299 -f 2991/4082/302 2993/4083/302 2989/4066/302 -f 3009/4104/292 2989/4100/292 2993/4105/292 -f 3011/4106/296 3013/4173/296 3012/4107/296 -f 3016/4109/296 3017/4174/296 3015/4110/296 -f 3038/4112/292 3018/4163/292 3019/4113/292 -f 3021/4115/295 3019/4175/295 3018/4116/295 -f 3027/4118/297 3023/4176/297 3025/4119/297 -f 3028/4121/299 3029/4120/299 3025/4119/299 -f 3028/4123/296 3024/4129/296 3022/4124/296 -f 3026/4126/292 3022/4177/292 3023/4127/292 -f 3025/4119/301 3023/4176/301 3022/4124/301 -f 3028/4121/299 3021/4115/299 3041/4130/299 -f 3035/4131/297 3031/4178/297 3033/4132/297 -f 3037/4134/299 3033/4179/299 3032/4135/299 -f 3036/4136/296 3032/4135/296 3030/4137/296 -f 3035/4139/292 3034/4164/292 3030/4140/292 -f 3033/4132/300 3031/4178/300 3030/4137/300 -f 3042/4142/292 3038/4112/292 3039/4114/292 -f 3043/4144/297 3039/4153/297 3041/4145/297 -f 3045/4147/299 3041/4130/299 3040/4148/299 -f 3044/4150/296 3040/4162/296 3038/4151/296 -f 3027/4118/298 3029/4120/298 3041/4145/298 -f 3027/4128/292 3039/4114/292 3019/4113/292 -f 3048/4154/297 3049/4180/297 3047/4155/297 -f 3051/4157/297 3053/4181/297 3052/4158/297 -f 3019/4160/300 3021/4182/300 3028/4123/300 -f 3041/4130/299 3021/4115/299 3020/4117/299 -f 3020/4161/301 3018/4183/301 3035/4131/301 -f 3036/4136/299 3040/4148/299 3020/4117/299 -f 3036/4136/302 3034/4138/302 3038/4151/302 -f 3018/4163/292 3038/4112/292 3034/4164/292 -o Micro_Pad -v -1.250000 2.000000 1.250000 -v 1.250000 2.000000 1.250000 -v -1.250000 2.000000 -1.250000 -v 1.250000 2.000000 -1.250000 -v -1.250000 1.500000 -1.250000 -v -1.250000 1.500000 1.250000 -v 1.250000 1.500000 1.250000 -v 1.250000 1.500000 -1.250000 -v -0.500000 2.000000 0.500000 -v 0.500000 2.000000 0.500000 -v -0.500000 2.000000 -0.500000 -v 0.500000 2.000000 -0.500000 -v -0.500000 1.500000 0.500000 -v 0.500000 1.500000 0.500000 -v -0.500000 1.500000 -0.500000 -v 0.500000 1.500000 -0.500000 -v -0.500000 2.000000 0.500000 -v 0.500000 2.000000 0.500000 -v -0.500000 2.000000 -0.500000 -v 0.500000 2.000000 -0.500000 -v 1.250000 1.500000 -1.250000 -v 1.250000 1.000000 -1.250000 -v 0.250000 1.500000 -1.250000 -v 0.500000 1.000000 -1.250000 -v 1.250000 1.500000 -0.250000 -v 1.250000 1.000000 -0.500000 -v 0.500000 1.500000 -0.500000 -v 0.500000 1.000000 -0.500000 -v 0.500000 1.250000 -1.250000 -v 1.250000 1.250000 -0.500000 -v 0.500000 1.250000 -0.500000 -v 0.250000 1.500000 -0.500000 -v 0.500000 1.500000 -0.250000 -v -0.500000 1.000000 -1.250000 -v 0.500000 1.000000 -1.250000 -v -0.500000 1.000000 -1.750000 -v 0.500000 1.000000 -1.750000 -v -0.500000 1.500000 -1.750000 -v -0.500000 1.500000 -1.250000 -v 0.500000 1.500000 -1.250000 -v 0.500000 1.500000 -1.750000 -v -0.875000 1.000000 2.000000 -v -0.625000 1.000000 2.000000 -v -0.875000 1.000000 1.750000 -v -0.625000 1.000000 1.750000 -v 0.625000 1.000000 2.000000 -v 0.875000 1.000000 2.000000 -v 0.625000 1.000000 1.750000 -v 0.875000 1.000000 1.750000 -v -0.875000 2.000000 1.000000 -v -0.625000 2.000000 1.000000 -v -0.875000 2.000000 0.750000 -v -0.625000 2.000000 0.750000 -v 0.625000 2.000000 1.000000 -v 0.875000 2.000000 1.000000 -v 0.625000 2.000000 0.750000 -v 0.875000 2.000000 0.750000 -v -0.875000 8.000000 1.750000 -v -0.875000 8.000000 2.000000 -v -0.625000 8.000000 2.000000 -v -0.625000 8.000000 1.750000 -v 0.625000 8.000000 1.750000 -v 0.625000 8.000000 2.000000 -v 0.875000 8.000000 2.000000 -v 0.875000 8.000000 1.750000 -v -0.875000 8.000000 0.750000 -v -0.875000 8.000000 1.000000 -v -0.625000 8.000000 1.000000 -v -0.625000 8.000000 0.750000 -v 0.625000 8.000000 0.750000 -v 0.625000 8.000000 1.000000 -v 0.875000 8.000000 1.000000 -v 0.875000 8.000000 0.750000 -v -0.625000 1.000000 1.875000 -v 0.625000 1.000000 1.875000 -v -0.625000 8.000000 1.875000 -v 0.625000 8.000000 1.875000 -v -0.625000 2.000000 0.875000 -v 0.625000 2.000000 0.875000 -v -0.625000 8.000000 0.875000 -v 0.625000 8.000000 0.875000 -v 0.750000 1.000000 1.750000 -v 0.750000 8.000000 1.750000 -v 0.750000 1.000000 1.000000 -v 0.750000 8.000000 1.000000 -v -0.750000 1.000000 1.750000 -v -0.750000 8.000000 1.750000 -v -0.750000 1.000000 1.000000 -v -0.750000 8.000000 1.000000 -v -0.312500 1.000000 1.625000 -v -0.062500 1.000000 1.625000 -v -0.312500 1.000000 1.375000 -v -0.062500 1.000000 1.375000 -v 0.062500 1.000000 1.625000 -v 0.312500 1.000000 1.625000 -v 0.062500 1.000000 1.375000 -v 0.312500 1.000000 1.375000 -v -0.312500 6.000000 1.375000 -v -0.312500 6.000000 1.625000 -v -0.062500 6.000000 1.625000 -v -0.062500 6.000000 1.375000 -v 0.062500 6.000000 1.375000 -v 0.062500 6.000000 1.625000 -v 0.312500 6.000000 1.625000 -v 0.312500 6.000000 1.375000 -v -1.250000 1.500000 1.250000 -v -1.250000 1.000000 1.250000 -v -0.250000 1.500000 1.250000 -v -0.500000 1.000000 1.250000 -v -1.250000 1.500000 0.250000 -v -1.250000 1.000000 0.500000 -v -0.500000 1.500000 0.500000 -v -0.500000 1.000000 0.500000 -v -0.500000 1.250000 1.250000 -v -1.250000 1.250000 0.500000 -v -0.500000 1.250000 0.500000 -v -0.250000 1.500000 0.500000 -v -0.500000 1.500000 0.250000 -v -1.250000 1.500000 -1.250000 -v -1.250000 1.000000 -1.250000 -v -1.250000 1.500000 -0.250000 -v -1.250000 1.000000 -0.500000 -v -0.250000 1.500000 -1.250000 -v -0.500000 1.000000 -1.250000 -v -0.500000 1.500000 -0.500000 -v -0.500000 1.000000 -0.500000 -v -1.250000 1.250000 -0.500000 -v -0.500000 1.250000 -1.250000 -v -0.500000 1.250000 -0.500000 -v -0.500000 1.500000 -0.250000 -v -0.250000 1.500000 -0.500000 -v 1.250000 1.500000 1.250000 -v 1.250000 1.000000 1.250000 -v 1.250000 1.500000 0.250000 -v 1.250000 1.000000 0.500000 -v 0.250000 1.500000 1.250000 -v 0.500000 1.000000 1.250000 -v 0.500000 1.500000 0.500000 -v 0.500000 1.000000 0.500000 -v 1.250000 1.250000 0.500000 -v 0.500000 1.250000 1.250000 -v 0.500000 1.250000 0.500000 -v 0.500000 1.500000 0.250000 -v 0.250000 1.500000 0.500000 -v -0.625000 1.000000 1.875000 -v 0.625000 1.000000 1.875000 -v -0.625000 8.000000 1.875000 -v 0.625000 8.000000 1.875000 -v -0.625000 2.000000 0.875000 -v 0.625000 2.000000 0.875000 -v -0.625000 8.000000 0.875000 -v 0.625000 8.000000 0.875000 -v 0.750000 1.000000 1.750000 -v 0.750000 8.000000 1.750000 -v 0.750000 1.000000 1.000000 -v 0.750000 8.000000 1.000000 -v -0.750000 1.000000 1.750000 -v -0.750000 8.000000 1.750000 -v -0.750000 1.000000 1.000000 -v -0.750000 8.000000 1.000000 -vt 0.066667 0.655172 -vt 0.222222 0.758621 -vt 0.000000 0.758621 -vt 0.066667 0.517241 -vt 0.000000 0.413793 -vt 0.222222 0.344828 -vt 0.222222 0.413793 -vt 0.000000 0.413793 -vt 0.222222 0.344828 -vt 0.222222 0.413793 -vt 0.000000 0.413793 -vt 0.222222 0.344828 -vt 0.222222 0.413793 -vt -0.000000 0.413793 -vt 0.222222 0.344828 -vt 0.222222 0.413793 -vt 0.066667 0.172414 -vt 0.155556 0.241379 -vt 0.066667 0.241379 -vt 0.155556 0.655172 -vt 0.155556 0.517241 -vt 0.000000 -0.000000 -vt 0.066667 0.241379 -vt 0.000000 0.344828 -vt 0.155556 0.241379 -vt 0.155556 0.103448 -vt 0.222222 -0.000000 -vt 0.066667 0.103448 -vt 0.066667 0.517241 -vt 0.155556 0.655172 -vt 0.066667 0.655172 -vt 0.066667 0.172414 -vt 0.155556 0.241379 -vt 0.066667 0.241379 -vt 0.066667 0.172414 -vt 0.155556 0.241379 -vt 0.066667 0.241379 -vt 0.066667 0.172414 -vt 0.155556 0.241379 -vt 0.066667 0.241379 -vt 0.088889 0.758621 -vt 0.155556 0.758621 -vt 0.155556 0.793103 -vt 0.022222 0.827586 -vt 0.088889 0.862069 -vt 0.022222 0.862069 -vt 0.088889 0.827586 -vt 0.000000 0.827586 -vt 0.022222 0.793103 -vt 0.088889 0.896552 -vt 0.155556 0.862069 -vt 0.088889 0.827586 -vt 0.155556 0.827586 -vt 0.155556 0.793103 -vt 0.177778 0.758621 -vt 0.177778 0.793103 -vt 0.200000 0.793103 -vt 0.088889 0.896552 -vt 0.155556 0.896552 -vt 0.888889 0.655172 -vt 0.933333 0.793103 -vt 0.888889 0.793103 -vt 0.888889 0.862069 -vt 0.933333 0.862069 -vt 0.977778 0.793103 -vt 0.933333 0.655172 -vt 0.977778 0.655172 -vt 0.844444 0.655172 -vt 0.844444 0.793103 -vt 0.933333 0.586207 -vt 0.888889 0.586207 -vt 0.577778 0.965517 -vt 0.600000 1.000000 -vt 0.577778 1.000000 -vt 0.577778 0.965517 -vt 0.600000 1.000000 -vt 0.577778 1.000000 -vt 0.577778 0.965517 -vt 0.600000 1.000000 -vt 0.577778 1.000000 -vt 0.577778 0.965517 -vt 0.600000 1.000000 -vt 0.577778 1.000000 -vt 0.600000 0.137931 -vt 0.577778 0.137931 -vt 0.622222 0.000000 -vt 0.600000 0.965517 -vt 0.600000 0.000000 -vt 0.622222 0.137931 -vt 0.600000 0.965517 -vt 0.644444 0.000000 -vt 0.622222 0.965517 -vt 0.622222 0.000000 -vt 0.644444 0.137931 -vt 0.622222 0.965517 -vt 0.622222 0.137931 -vt 0.666667 0.000000 -vt 0.644444 0.965517 -vt 0.666667 0.137931 -vt 0.644444 0.965517 -vt 0.600000 0.000000 -vt 0.577778 0.000000 -vt 0.600000 0.137931 -vt 0.577778 0.137931 -vt 0.600000 0.965517 -vt 0.644444 0.000000 -vt 0.622222 0.965517 -vt 0.600000 0.965517 -vt 0.644444 0.137931 -vt 0.622222 0.965517 -vt 0.666667 0.000000 -vt 0.644444 0.965517 -vt 0.666667 0.137931 -vt 0.644444 0.965517 -vt 0.577778 0.000000 -vt 0.222222 0.965517 -vt 0.333333 -0.000000 -vt 0.333333 0.965517 -vt 0.511111 0.965517 -vt 0.400000 0.137931 -vt 0.511111 0.137931 -vt 0.333333 0.000000 -vt 0.400000 0.965517 -vt 0.333333 0.965517 -vt 0.511111 0.965517 -vt 0.577778 0.000000 -vt 0.577778 0.965517 -vt 0.666667 0.689655 -vt 0.688889 0.724138 -vt 0.666667 0.724138 -vt 0.666667 0.689655 -vt 0.688889 0.724138 -vt 0.666667 0.724138 -vt 0.688889 0.000000 -vt 0.666667 0.000000 -vt 0.733333 0.000000 -vt 0.711111 0.689655 -vt 0.711111 0.000000 -vt 0.711111 0.000000 -vt 0.688889 0.689655 -vt 0.688889 0.000000 -vt 0.755556 0.000000 -vt 0.733333 0.689655 -vt 0.733333 0.000000 -vt 0.688889 0.689655 -vt 0.755556 0.000000 -vt 0.733333 0.689655 -vt 0.666667 0.000000 -vt 0.711111 0.689655 -vt 0.088889 0.758621 -vt 0.155556 0.758621 -vt 0.155556 0.793103 -vt 0.022222 0.827586 -vt 0.088889 0.862069 -vt 0.022222 0.862069 -vt 0.088889 0.827586 -vt 0.000000 0.827586 -vt 0.022222 0.793103 -vt 0.022222 0.896552 -vt 0.088889 0.896552 -vt 0.155556 0.862069 -vt 0.088889 0.827586 -vt 0.155556 0.827586 -vt 0.155556 0.793103 -vt 0.177778 0.758621 -vt 0.177778 0.793103 -vt 0.200000 0.793103 -vt 0.088889 0.896552 -vt 0.155556 0.896552 -vt 0.088889 0.758621 -vt 0.155556 0.758621 -vt 0.155556 0.793103 -vt 0.022222 0.827586 -vt 0.088889 0.862069 -vt 0.022222 0.862069 -vt 0.088889 0.827586 -vt 0.000000 0.827586 -vt 0.022222 0.793103 -vt 0.022222 0.896552 -vt 0.088889 0.896552 -vt 0.155556 0.862069 -vt 0.088889 0.827586 -vt 0.155556 0.827586 -vt 0.155556 0.793103 -vt 0.177778 0.758621 -vt 0.177778 0.793103 -vt 0.200000 0.793103 -vt 0.088889 0.896552 -vt 0.155556 0.896552 -vt 0.088889 0.758621 -vt 0.155556 0.758621 -vt 0.155556 0.793103 -vt 0.022222 0.827586 -vt 0.088889 0.862069 -vt 0.022222 0.862069 -vt 0.088889 0.827586 -vt 0.000000 0.827586 -vt 0.022222 0.793103 -vt 0.088889 0.896552 -vt 0.155556 0.862069 -vt 0.088889 0.827586 -vt 0.155556 0.827586 -vt 0.155556 0.793103 -vt 0.177778 0.758621 -vt 0.177778 0.793103 -vt 0.200000 0.793103 -vt 0.088889 0.896552 -vt 0.155556 0.896552 -vt 0.333333 -0.000000 -vt 0.222222 0.965517 -vt 0.333333 0.965517 -vt 0.400000 0.137931 -vt 0.511111 0.965517 -vt 0.511111 0.137931 -vt 0.400000 0.965517 -vt 0.333333 0.000000 -vt 0.333333 0.965517 -vt 0.577778 0.000000 -vt 0.511111 0.965517 -vt 0.577778 0.965517 -vt 0.000000 0.344828 -vt 0.000000 0.344828 -vt -0.000000 0.344828 -vt 0.155556 0.172414 -vt 0.155556 0.517241 -vt 0.155556 0.172414 -vt 0.155556 0.172414 -vt 0.155556 0.172414 -vt 0.177778 0.827586 -vt 0.022222 0.758621 -vt 0.022222 0.896552 -vt 0.666667 0.965517 -vt 0.666667 0.965517 -vt 0.666667 0.965517 -vt 0.666667 0.965517 -vt 0.222222 0.000000 -vt 0.400000 0.965517 -vt 0.400000 0.000000 -vt 0.511111 0.000000 -vt 0.755556 0.689655 -vt 0.755556 0.689655 -vt 0.177778 0.827586 -vt 0.022222 0.758621 -vt 0.177778 0.827586 -vt 0.022222 0.758621 -vt 0.177778 0.827586 -vt 0.022222 0.758621 -vt 0.022222 0.896552 -vt 0.222222 0.000000 -vt 0.400000 0.965517 -vt 0.400000 0.000000 -vt 0.511111 0.000000 -vn 0.0000 1.0000 0.0000 +f 2706/4061/399 2707/4062/399 2708/4063/399 +f 2709/4064/399 2710/4065/399 2711/4066/399 +f 2712/4067/399 2713/4068/399 2714/4069/399 +f 2715/4070/399 2716/4071/399 2717/4072/399 +f 2718/4073/400 2719/4074/400 2720/4075/400 +f 2721/4076/400 2722/4077/400 2723/4078/400 +f 2724/4079/400 2725/4080/400 2726/4081/400 +f 2727/4082/400 2728/4083/400 2729/4084/400 +f 2713/4085/401 2726/4086/401 2714/4087/401 +f 2730/4088/402 2718/4089/402 2707/4090/402 +f 2731/4091/402 2724/4092/402 2713/4085/402 +f 2706/4061/403 2732/4093/403 2730/4094/403 +f 2712/4067/403 2733/4095/403 2731/4096/403 +f 2711/4097/404 2722/4077/404 2709/4064/404 +f 2717/4098/404 2728/4083/404 2715/4070/404 +f 2710/4099/401 2723/4100/401 2711/4097/401 +f 2716/4101/401 2729/4102/401 2717/4098/401 +f 2734/4103/402 2721/4104/402 2710/4099/402 +f 2735/4105/402 2727/4106/402 2716/4101/402 +f 2709/4064/403 2736/4107/403 2734/4108/403 +f 2708/4109/404 2719/4074/404 2706/4061/404 +f 2715/4070/403 2737/4110/403 2735/4111/403 +f 2714/4087/404 2725/4080/404 2712/4067/404 +f 2707/4090/401 2720/4112/401 2708/4109/401 +f 2738/4113/400 2739/4114/400 2740/4115/400 +f 2741/4116/399 2742/4117/399 2743/4118/399 +f 2738/4113/403 2744/4119/403 2745/4120/403 +f 2739/4114/401 2743/4121/401 2740/4115/401 +f 2746/4122/403 2747/4123/403 2748/4124/403 +f 2749/4125/401 2750/4126/401 2751/4127/401 +f 2746/4128/399 2752/4129/399 2750/4130/399 +f 2746/4128/399 2753/4131/399 2754/4132/399 +f 2746/4133/405 2755/4134/405 2756/4135/405 +f 2747/4123/400 2751/4136/400 2748/4124/400 +f 2757/4137/404 2758/4138/404 2759/4139/404 +f 2760/4140/402 2761/4141/402 2762/4142/402 +f 2763/4143/401 2760/4144/401 2758/4145/401 +f 2757/4146/399 2764/4147/399 2763/4148/399 +f 2751/4136/400 2755/4134/400 2748/4124/400 +f 2758/4138/400 2762/4149/400 2759/4139/400 +f 2765/4150/402 2755/4134/402 2766/4151/402 +f 2767/4152/404 2768/4153/404 2769/4154/404 +f 2750/4126/406 2767/4152/406 2751/4127/406 +f 2765/4155/399 2752/4129/399 2756/4156/399 +f 2766/4157/401 2768/4158/401 2765/4159/401 +f 2755/4134/400 2769/4160/400 2766/4151/400 +f 2753/4161/407 2762/4142/407 2761/4141/407 +f 2747/4123/400 2762/4149/400 2749/4162/400 +f 2754/4163/408 2759/4139/408 2747/4164/408 +f 2761/4165/399 2754/4132/399 2753/4131/399 +f 2770/4166/400 2771/4167/400 2772/4168/400 +f 2773/4169/399 2774/4170/399 2775/4171/399 +f 2770/4166/403 2776/4172/403 2777/4173/403 +f 2771/4167/401 2775/4174/401 2772/4168/401 +f 2778/4175/402 2779/4176/402 2780/4177/402 +f 2781/4178/404 2782/4179/404 2783/4180/404 +f 2780/4177/400 2784/4181/400 2781/4178/400 +f 2783/4180/399 2785/4182/399 2778/4183/399 +f 2786/4184/402 2787/4185/402 2788/4186/402 +f 2789/4187/404 2790/4188/404 2791/4189/404 +f 2788/4186/400 2792/4190/400 2789/4187/400 +f 2791/4189/399 2793/4191/399 2786/4192/399 +f 2794/4193/400 2795/4194/400 2796/4195/400 +f 2797/4196/399 2798/4197/399 2799/4198/399 +f 2794/4193/403 2800/4199/403 2801/4200/403 +f 2795/4194/401 2799/4201/401 2796/4195/401 +f 2802/4202/403 2803/4203/403 2804/4204/403 +f 2805/4205/401 2806/4206/401 2807/4207/401 +f 2802/4208/399 2808/4209/399 2806/4210/399 +f 2802/4208/399 2809/4211/399 2810/4212/399 +f 2802/4213/405 2811/4214/405 2812/4215/405 +f 2803/4203/400 2807/4216/400 2804/4204/400 +f 2813/4217/404 2814/4218/404 2815/4219/404 +f 2816/4220/402 2817/4221/402 2818/4222/402 +f 2819/4223/401 2816/4224/401 2814/4225/401 +f 2813/4226/399 2820/4227/399 2819/4228/399 +f 2807/4216/400 2811/4214/400 2804/4204/400 +f 2814/4218/400 2818/4229/400 2815/4219/400 +f 2821/4230/402 2811/4214/402 2822/4231/402 +f 2823/4232/404 2824/4233/404 2825/4234/404 +f 2806/4206/406 2823/4232/406 2807/4207/406 +f 2821/4235/399 2808/4209/399 2812/4236/399 +f 2822/4237/401 2824/4238/401 2821/4239/401 +f 2811/4214/400 2825/4240/400 2822/4231/400 +f 2809/4241/407 2818/4222/407 2817/4221/407 +f 2803/4203/400 2818/4229/400 2805/4242/400 +f 2810/4243/408 2815/4219/408 2803/4244/408 +f 2817/4245/399 2810/4212/399 2809/4211/399 +f 2826/4246/400 2827/4247/400 2828/4248/400 +f 2829/4249/399 2830/4250/399 2831/4251/399 +f 2826/4246/403 2832/4252/403 2833/4253/403 +f 2827/4247/401 2831/4254/401 2828/4248/401 +f 2834/4255/402 2835/4256/402 2836/4257/402 +f 2837/4258/404 2838/4259/404 2839/4260/404 +f 2836/4257/400 2840/4261/400 2837/4258/400 +f 2839/4260/399 2841/4262/399 2834/4263/399 +f 2842/4264/402 2843/4265/402 2844/4266/402 +f 2845/4267/404 2846/4268/404 2847/4269/404 +f 2844/4266/400 2848/4270/400 2845/4267/400 +f 2847/4269/399 2849/4271/399 2842/4272/399 +f 2850/4273/400 2851/4274/400 2852/4275/400 +f 2853/4276/399 2854/4277/399 2855/4278/399 +f 2850/4273/403 2856/4279/403 2857/4280/403 +f 2851/4274/401 2855/4281/401 2852/4275/401 +f 2858/4282/403 2859/4283/403 2860/4284/403 +f 2861/4285/401 2862/4286/401 2863/4287/401 +f 2858/4288/399 2864/4289/399 2862/4290/399 +f 2858/4288/399 2865/4291/399 2866/4292/399 +f 2858/4293/405 2867/4294/405 2868/4295/405 +f 2859/4283/400 2863/4296/400 2860/4284/400 +f 2869/4297/404 2870/4298/404 2871/4299/404 +f 2872/4300/402 2873/4301/402 2874/4302/402 +f 2875/4303/401 2872/4300/401 2870/4304/401 +f 2869/4305/399 2876/4306/399 2875/4307/399 +f 2863/4296/400 2867/4294/400 2860/4284/400 +f 2870/4298/400 2874/4308/400 2871/4299/400 +f 2877/4309/402 2867/4294/402 2878/4310/402 +f 2879/4311/404 2880/4312/404 2881/4313/404 +f 2862/4286/406 2879/4311/406 2863/4287/406 +f 2877/4314/399 2864/4289/399 2868/4315/399 +f 2878/4316/401 2880/4312/401 2877/4317/401 +f 2867/4294/400 2881/4318/400 2878/4310/400 +f 2865/4319/407 2874/4302/407 2873/4301/407 +f 2859/4283/400 2874/4308/400 2861/4320/400 +f 2866/4321/408 2871/4299/408 2859/4322/408 +f 2873/4323/399 2866/4292/399 2865/4291/399 +f 2882/4324/400 2883/4325/400 2884/4326/400 +f 2885/4327/399 2886/4328/399 2887/4329/399 +f 2882/4324/403 2888/4330/403 2889/4331/403 +f 2883/4325/401 2887/4332/401 2884/4326/401 +f 2890/4333/402 2891/4334/402 2892/4335/402 +f 2893/4336/404 2894/4337/404 2895/4338/404 +f 2892/4335/400 2896/4339/400 2893/4336/400 +f 2895/4338/399 2897/4340/399 2890/4341/399 +f 2898/4342/402 2899/4343/402 2900/4344/402 +f 2901/4345/404 2902/4346/404 2903/4347/404 +f 2900/4344/400 2904/4348/400 2901/4345/400 +f 2903/4347/399 2905/4349/399 2898/4350/399 +f 2906/4351/403 2907/4352/403 2908/4353/403 +f 2909/4354/403 2910/4355/403 2911/4356/403 +f 2912/4357/403 2913/4358/403 2914/4359/403 +f 2915/4360/403 2916/4361/403 2917/4362/403 +f 2918/4363/403 2919/4364/403 2920/4365/403 +f 2921/4366/403 2922/4367/403 2923/4368/403 +f 2924/4369/403 2925/4370/403 2926/4371/403 +f 2927/4372/403 2928/4373/403 2929/4374/403 +f 2930/4375/401 2931/4376/401 2932/4377/401 +f 2933/4378/401 2934/4379/401 2935/4380/401 +f 2936/4381/401 2937/4382/401 2938/4383/401 +f 2939/4384/401 2940/4385/401 2941/4386/401 +f 2942/4387/401 2943/4388/401 2944/4389/401 +f 2945/4390/401 2946/4391/401 2947/4392/401 +f 2948/4393/401 2949/4394/401 2950/4395/401 +f 2951/4396/401 2952/4397/401 2953/4398/401 +f 2954/4399/403 2955/4400/403 2956/4401/403 +f 2957/4402/403 2958/4403/403 2959/4404/403 +f 2960/4405/401 2961/4406/401 2962/4407/401 +f 2963/4408/401 2964/4409/401 2965/4410/401 +f 2966/4411/402 2967/4412/402 2968/4413/402 +f 2969/4414/402 2970/4415/402 2971/4416/402 +f 2972/4417/402 2973/4418/402 2974/4419/402 +f 2975/4420/402 2976/4421/402 2977/4422/402 +f 2978/4423/402 2979/4424/402 2980/4425/402 +f 2981/4426/402 2982/4427/402 2983/4428/402 +f 2984/4429/402 2985/4430/402 2986/4431/402 +f 2987/4432/402 2988/4433/402 2989/4434/402 +f 2990/4435/402 2991/4436/402 2992/4437/402 +f 2993/4438/402 2994/4439/402 2995/4440/402 +f 2996/4441/404 2997/4442/404 2998/4443/404 +f 2999/4444/404 3000/4445/404 3001/4446/404 +f 3002/4447/404 3003/4448/404 3004/4449/404 +f 3005/4450/404 3006/4451/404 3007/4452/404 +f 3008/4453/404 3009/4454/404 3010/4455/404 +f 3011/4456/404 3012/4457/404 3013/4458/404 +f 3014/4459/404 3015/4460/404 3016/4461/404 +f 3017/4462/404 3018/4463/404 3019/4464/404 +f 3020/4465/404 3021/4466/404 3022/4467/404 +f 3023/4468/404 3024/4469/404 3025/4470/404 +f 3026/4471/401 3027/4472/401 3028/4473/401 +f 3029/4474/401 3030/4475/401 3031/4476/401 +f 3032/4477/401 3033/4478/401 3034/4479/401 +f 3035/4480/401 3036/4481/401 3037/4482/401 +f 3038/4483/401 3039/4484/401 3040/4485/401 +f 3041/4486/401 3042/4487/401 3043/4488/401 +f 3044/4489/401 3045/4490/401 3046/4491/401 +f 3047/4492/401 3048/4493/401 3049/4494/401 +f 3050/4495/403 3051/4496/403 3052/4497/403 +f 3053/4498/403 3054/4499/403 3055/4500/403 +f 3056/4501/403 3057/4502/403 3058/4503/403 +f 3059/4504/403 3060/4505/403 3061/4506/403 +f 3062/4507/403 3063/4508/403 3064/4509/403 +f 3065/4510/403 3066/4511/403 3067/4512/403 +f 3068/4513/403 3069/4514/403 3070/4515/403 +f 3071/4516/403 3072/4517/403 3073/4518/403 +f 3074/4519/401 3075/4520/401 3076/4521/401 +f 3077/4522/401 3078/4523/401 3079/4524/401 +f 3080/4525/403 3081/4526/403 3082/4527/403 +f 3083/4528/403 3084/4529/403 3085/4530/403 +f 3086/4531/404 3087/4532/404 3088/4533/404 +f 3089/4534/404 3090/4535/404 3091/4536/404 +f 3092/4537/404 3093/4538/404 3094/4539/404 +f 3095/4540/404 3096/4541/404 3097/4542/404 +f 3098/4543/404 3099/4544/404 3100/4545/404 +f 3101/4546/404 3102/4547/404 3103/4548/404 +f 3104/4549/404 3105/4550/404 3106/4551/404 +f 3107/4552/404 3108/4553/404 3109/4554/404 +f 3110/4555/404 3111/4556/404 3112/4557/404 +f 3113/4558/404 3114/4559/404 3115/4560/404 +f 3116/4561/402 3117/4562/402 3118/4563/402 +f 3119/4564/402 3120/4565/402 3121/4566/402 +f 3122/4567/402 3123/4568/402 3124/4569/402 +f 3125/4570/402 3126/4571/402 3127/4572/402 +f 3128/4573/402 3129/4574/402 3130/4575/402 +f 3131/4576/402 3132/4577/402 3133/4578/402 +f 3134/4579/402 3135/4580/402 3136/4581/402 +f 3137/4582/402 3138/4583/402 3139/4584/402 +f 3140/4585/402 3141/4586/402 3142/4587/402 +f 3143/4588/402 3144/4589/402 3145/4590/402 +f 2706/4061/399 2730/4094/399 2707/4062/399 +f 2709/4064/399 2734/4108/399 2710/4065/399 +f 2712/4067/399 2731/4096/399 2713/4068/399 +f 2715/4070/399 2735/4111/399 2716/4071/399 +f 2718/4073/400 2732/4093/400 2719/4074/400 +f 2721/4076/400 2736/4107/400 2722/4077/400 +f 2724/4079/400 2733/4095/400 2725/4080/400 +f 2727/4082/400 2737/4110/400 2728/4083/400 +f 2713/4085/401 2724/4092/401 2726/4086/401 +f 2730/4088/402 2732/4591/402 2718/4089/402 +f 2731/4091/402 2733/4592/402 2724/4092/402 +f 2706/4061/403 2719/4074/403 2732/4093/403 +f 2712/4067/403 2725/4080/403 2733/4095/403 +f 2711/4097/404 2723/4100/404 2722/4077/404 +f 2717/4098/404 2729/4102/404 2728/4083/404 +f 2710/4099/401 2721/4104/401 2723/4100/401 +f 2716/4101/401 2727/4106/401 2729/4102/401 +f 2734/4103/402 2736/4593/402 2721/4104/402 +f 2735/4105/402 2737/4594/402 2727/4106/402 +f 2709/4064/403 2722/4077/403 2736/4107/403 +f 2708/4109/404 2720/4112/404 2719/4074/404 +f 2715/4070/403 2728/4083/403 2737/4110/403 +f 2714/4087/404 2726/4086/404 2725/4080/404 +f 2707/4090/401 2718/4089/401 2720/4112/401 +f 2738/4113/400 2745/4120/400 2739/4114/400 +f 2741/4116/399 2744/4119/399 2742/4117/399 +f 2738/4113/403 2742/4117/403 2744/4119/403 +f 2739/4114/401 2741/4595/401 2743/4121/401 +f 2746/4122/403 2754/4596/403 2747/4123/403 +f 2749/4125/401 2753/4161/401 2750/4126/401 +f 2746/4128/399 2756/4156/399 2752/4129/399 +f 2746/4128/399 2750/4130/399 2753/4131/399 +f 2746/4133/405 2748/4597/405 2755/4134/405 +f 2747/4123/400 2749/4162/400 2751/4136/400 +f 2757/4137/404 2763/4598/404 2758/4138/404 +f 2760/4140/402 2764/4599/402 2761/4141/402 +f 2763/4143/401 2764/4600/401 2760/4144/401 +f 2757/4146/399 2761/4165/399 2764/4147/399 +f 2751/4136/400 2767/4601/400 2755/4134/400 +f 2758/4138/400 2760/4602/400 2762/4149/400 +f 2765/4150/402 2756/4135/402 2755/4134/402 +f 2767/4152/404 2752/4603/404 2768/4153/404 +f 2750/4126/406 2752/4603/406 2767/4152/406 +f 2765/4155/399 2768/4604/399 2752/4129/399 +f 2766/4157/401 2769/4605/401 2768/4158/401 +f 2755/4134/400 2767/4601/400 2769/4160/400 +f 2753/4161/407 2749/4125/407 2762/4142/407 +f 2747/4123/400 2759/4139/400 2762/4149/400 +f 2754/4163/408 2757/4137/408 2759/4139/408 +f 2761/4165/399 2757/4146/399 2754/4132/399 +f 2770/4166/400 2777/4173/400 2771/4167/400 +f 2773/4169/399 2776/4172/399 2774/4170/399 +f 2770/4166/403 2774/4170/403 2776/4172/403 +f 2771/4167/401 2773/4606/401 2775/4174/401 +f 2778/4175/402 2785/4607/402 2779/4176/402 +f 2781/4178/404 2784/4181/404 2782/4179/404 +f 2780/4177/400 2779/4176/400 2784/4181/400 +f 2783/4180/399 2782/4179/399 2785/4182/399 +f 2786/4184/402 2793/4608/402 2787/4185/402 +f 2789/4187/404 2792/4190/404 2790/4188/404 +f 2788/4186/400 2787/4185/400 2792/4190/400 +f 2791/4189/399 2790/4188/399 2793/4191/399 +f 2794/4193/400 2801/4200/400 2795/4194/400 +f 2797/4196/399 2800/4199/399 2798/4197/399 +f 2794/4193/403 2798/4197/403 2800/4199/403 +f 2795/4194/401 2797/4609/401 2799/4201/401 +f 2802/4202/403 2810/4610/403 2803/4203/403 +f 2805/4205/401 2809/4241/401 2806/4206/401 +f 2802/4208/399 2812/4236/399 2808/4209/399 +f 2802/4208/399 2806/4210/399 2809/4211/399 +f 2802/4213/405 2804/4611/405 2811/4214/405 +f 2803/4203/400 2805/4242/400 2807/4216/400 +f 2813/4217/404 2819/4612/404 2814/4218/404 +f 2816/4220/402 2820/4613/402 2817/4221/402 +f 2819/4223/401 2820/4614/401 2816/4224/401 +f 2813/4226/399 2817/4245/399 2820/4227/399 +f 2807/4216/400 2823/4615/400 2811/4214/400 +f 2814/4218/400 2816/4616/400 2818/4229/400 +f 2821/4230/402 2812/4215/402 2811/4214/402 +f 2823/4232/404 2808/4617/404 2824/4233/404 +f 2806/4206/406 2808/4617/406 2823/4232/406 +f 2821/4235/399 2824/4618/399 2808/4209/399 +f 2822/4237/401 2825/4619/401 2824/4238/401 +f 2811/4214/400 2823/4615/400 2825/4240/400 +f 2809/4241/407 2805/4205/407 2818/4222/407 +f 2803/4203/400 2815/4219/400 2818/4229/400 +f 2810/4243/408 2813/4217/408 2815/4219/408 +f 2817/4245/399 2813/4226/399 2810/4212/399 +f 2826/4246/400 2833/4253/400 2827/4247/400 +f 2829/4249/399 2832/4252/399 2830/4250/399 +f 2826/4246/403 2830/4250/403 2832/4252/403 +f 2827/4247/401 2829/4620/401 2831/4254/401 +f 2834/4255/402 2841/4621/402 2835/4256/402 +f 2837/4258/404 2840/4261/404 2838/4259/404 +f 2836/4257/400 2835/4256/400 2840/4261/400 +f 2839/4260/399 2838/4259/399 2841/4262/399 +f 2842/4264/402 2849/4622/402 2843/4265/402 +f 2845/4267/404 2848/4270/404 2846/4268/404 +f 2844/4266/400 2843/4265/400 2848/4270/400 +f 2847/4269/399 2846/4268/399 2849/4271/399 +f 2850/4273/400 2857/4280/400 2851/4274/400 +f 2853/4276/399 2856/4279/399 2854/4277/399 +f 2850/4273/403 2854/4277/403 2856/4279/403 +f 2851/4274/401 2853/4623/401 2855/4281/401 +f 2858/4282/403 2866/4624/403 2859/4283/403 +f 2861/4285/401 2865/4319/401 2862/4286/401 +f 2858/4288/399 2868/4315/399 2864/4289/399 +f 2858/4288/399 2862/4290/399 2865/4291/399 +f 2858/4293/405 2860/4625/405 2867/4294/405 +f 2859/4283/400 2861/4320/400 2863/4296/400 +f 2869/4297/404 2875/4626/404 2870/4298/404 +f 2872/4300/402 2876/4627/402 2873/4301/402 +f 2875/4303/401 2876/4627/401 2872/4300/401 +f 2869/4305/399 2873/4323/399 2876/4306/399 +f 2863/4296/400 2879/4628/400 2867/4294/400 +f 2870/4298/400 2872/4629/400 2874/4308/400 +f 2877/4309/402 2868/4295/402 2867/4294/402 +f 2879/4311/404 2864/4630/404 2880/4312/404 +f 2862/4286/406 2864/4630/406 2879/4311/406 +f 2877/4314/399 2880/4631/399 2864/4289/399 +f 2878/4316/401 2881/4313/401 2880/4312/401 +f 2867/4294/400 2879/4628/400 2881/4318/400 +f 2865/4319/407 2861/4285/407 2874/4302/407 +f 2859/4283/400 2871/4299/400 2874/4308/400 +f 2866/4321/408 2869/4297/408 2871/4299/408 +f 2873/4323/399 2869/4305/399 2866/4292/399 +f 2882/4324/400 2889/4331/400 2883/4325/400 +f 2885/4327/399 2888/4330/399 2886/4328/399 +f 2882/4324/403 2886/4328/403 2888/4330/403 +f 2883/4325/401 2885/4632/401 2887/4332/401 +f 2890/4333/402 2897/4633/402 2891/4334/402 +f 2893/4336/404 2896/4339/404 2894/4337/404 +f 2892/4335/400 2891/4334/400 2896/4339/400 +f 2895/4338/399 2894/4337/399 2897/4340/399 +f 2898/4342/402 2905/4634/402 2899/4343/402 +f 2901/4345/404 2904/4348/404 2902/4346/404 +f 2900/4344/400 2899/4343/400 2904/4348/400 +f 2903/4347/399 2902/4346/399 2905/4349/399 +f 2906/4351/403 3146/4635/403 2907/4352/403 +f 2909/4354/403 3147/4636/403 2910/4355/403 +f 2912/4357/403 3148/4637/403 2913/4358/403 +f 2915/4360/403 3149/4638/403 2916/4361/403 +f 2918/4363/403 3150/4639/403 2919/4364/403 +f 2921/4366/403 3151/4640/403 2922/4367/403 +f 2924/4369/403 3152/4641/403 2925/4370/403 +f 2927/4372/403 3153/4642/403 2928/4373/403 +f 2930/4375/401 3154/4643/401 2931/4376/401 +f 2933/4378/401 3155/4644/401 2934/4379/401 +f 2936/4381/401 3156/4645/401 2937/4382/401 +f 2939/4384/401 3157/4646/401 2940/4385/401 +f 2942/4387/401 3158/4647/401 2943/4388/401 +f 2945/4390/401 3159/4648/401 2946/4391/401 +f 2948/4393/401 3160/4649/401 2949/4394/401 +f 2951/4396/401 3161/4650/401 2952/4397/401 +f 2954/4399/403 3162/4651/403 2955/4400/403 +f 2957/4402/403 3163/4652/403 2958/4403/403 +f 2960/4405/401 3164/4653/401 2961/4406/401 +f 2963/4408/401 3165/4654/401 2964/4409/401 +f 2966/4411/402 3166/4655/402 2967/4412/402 +f 2969/4414/402 3167/4656/402 2970/4415/402 +f 2972/4417/402 3168/4657/402 2973/4418/402 +f 2975/4420/402 3169/4658/402 2976/4421/402 +f 2978/4423/402 3170/4659/402 2979/4424/402 +f 2981/4426/402 3171/4660/402 2982/4427/402 +f 2984/4429/402 3172/4661/402 2985/4430/402 +f 2987/4432/402 3173/4662/402 2988/4433/402 +f 2990/4435/402 3174/4663/402 2991/4436/402 +f 2993/4438/402 3175/4664/402 2994/4439/402 +f 2996/4441/404 3176/4665/404 2997/4442/404 +f 2999/4444/404 3177/4666/404 3000/4445/404 +f 3002/4447/404 3178/4667/404 3003/4448/404 +f 3005/4450/404 3179/4668/404 3006/4451/404 +f 3008/4453/404 3180/4669/404 3009/4454/404 +f 3011/4456/404 3181/4670/404 3012/4457/404 +f 3014/4459/404 3182/4671/404 3015/4460/404 +f 3017/4462/404 3183/4672/404 3018/4463/404 +f 3020/4465/404 3184/4673/404 3021/4466/404 +f 3023/4468/404 3185/4674/404 3024/4469/404 +f 3026/4471/401 3186/4675/401 3027/4472/401 +f 3029/4474/401 3187/4676/401 3030/4475/401 +f 3032/4477/401 3188/4677/401 3033/4478/401 +f 3035/4480/401 3189/4678/401 3036/4481/401 +f 3038/4483/401 3190/4679/401 3039/4484/401 +f 3041/4486/401 3191/4680/401 3042/4487/401 +f 3044/4489/401 3192/4681/401 3045/4490/401 +f 3047/4492/401 3193/4682/401 3048/4493/401 +f 3050/4495/403 3194/4683/403 3051/4496/403 +f 3053/4498/403 3195/4684/403 3054/4499/403 +f 3056/4501/403 3196/4685/403 3057/4502/403 +f 3059/4504/403 3197/4686/403 3060/4505/403 +f 3062/4507/403 3198/4687/403 3063/4508/403 +f 3065/4510/403 3199/4688/403 3066/4511/403 +f 3068/4513/403 3200/4689/403 3069/4514/403 +f 3071/4516/403 3201/4690/403 3072/4517/403 +f 3074/4519/401 3202/4691/401 3075/4520/401 +f 3077/4522/401 3203/4692/401 3078/4523/401 +f 3080/4525/403 3204/4693/403 3081/4526/403 +f 3083/4528/403 3205/4694/403 3084/4529/403 +f 3086/4531/404 3206/4695/404 3087/4532/404 +f 3089/4534/404 3207/4696/404 3090/4535/404 +f 3092/4537/404 3208/4697/404 3093/4538/404 +f 3095/4540/404 3209/4698/404 3096/4541/404 +f 3098/4543/404 3210/4699/404 3099/4544/404 +f 3101/4546/404 3211/4700/404 3102/4547/404 +f 3104/4549/404 3212/4701/404 3105/4550/404 +f 3107/4552/404 3213/4702/404 3108/4553/404 +f 3110/4555/404 3214/4703/404 3111/4556/404 +f 3113/4558/404 3215/4704/404 3114/4559/404 +f 3116/4561/402 3216/4705/402 3117/4562/402 +f 3119/4564/402 3217/4706/402 3120/4565/402 +f 3122/4567/402 3218/4707/402 3123/4568/402 +f 3125/4570/402 3219/4708/402 3126/4571/402 +f 3128/4573/402 3220/4709/402 3129/4574/402 +f 3131/4576/402 3221/4710/402 3132/4577/402 +f 3134/4579/402 3222/4711/402 3135/4580/402 +f 3137/4582/402 3223/4712/402 3138/4583/402 +f 3140/4585/402 3224/4713/402 3141/4586/402 +f 3143/4588/402 3225/4714/402 3144/4589/402 +o Atlas_Pivot +v 1.187500 4.500000 -4.187500 +v 1.187500 3.500000 -3.812500 +v 1.187500 3.500000 -4.187500 +v 1.187500 4.500000 -3.812500 +v 0.812500 3.500000 -3.812500 +v 0.750000 2.000000 -2.750000 +v 1.250000 2.000000 -2.250000 +v 0.750000 2.000000 -2.250000 +v -1.250000 2.000000 -2.750000 +v -0.750000 2.000000 -2.250000 +v -1.250000 2.000000 -2.250000 +v 1.250000 3.500000 -3.750000 +v 0.750000 3.500000 -4.250000 +v 0.750000 3.500000 -3.750000 +v -0.750000 3.500000 -3.750000 +v -1.250000 3.500000 -4.250000 +v -1.250000 3.500000 -3.750000 +v -0.750000 1.500000 -3.750000 +v -1.250000 1.500000 -3.750000 +v 0.750000 1.500000 -4.250000 +v 1.250000 3.500000 -4.250000 +v 1.250000 1.500000 -4.250000 +v 1.250000 1.500000 -3.750000 +v 0.750000 1.500000 -3.750000 +v -0.750000 1.500000 -4.250000 +v -1.250000 1.500000 -4.250000 +v -0.750000 3.500000 -4.250000 +v 1.250000 3.500000 -2.250000 +v 0.750000 3.500000 -2.750000 +v 0.750000 3.500000 -2.250000 +v -0.750000 3.500000 -2.250000 +v -1.250000 3.500000 -2.750000 +v -1.250000 3.500000 -2.250000 +v -0.750000 2.000000 -2.750000 +v 1.250000 2.000000 -2.750000 +v -0.750000 3.500000 -2.750000 +v 1.250000 3.500000 -2.750000 +v 0.812500 4.500000 -3.812500 +v 0.812500 3.500000 -4.187500 +v 0.812500 4.500000 -4.187500 +v 1.187500 4.500000 -2.687500 +v 1.187500 3.500000 -2.312500 +v 1.187500 3.500000 -2.687500 +v 1.187500 4.500000 -2.312500 +v 0.812500 3.500000 -2.312500 +v 0.812500 4.500000 -2.312500 +v 0.812500 3.500000 -2.687500 +v 0.812500 4.500000 -2.687500 +v -0.812500 4.500000 -4.187500 +v -0.812500 3.500000 -3.812500 +v -0.812500 3.500000 -4.187500 +v -0.812500 4.500000 -3.812500 +v -1.187500 3.500000 -3.812500 +v -1.187500 4.500000 -3.812500 +v -1.187500 3.500000 -4.187500 +v -1.187500 4.500000 -4.187500 +v -0.812500 4.500000 -2.687500 +v -0.812500 3.500000 -2.312500 +v -0.812500 3.500000 -2.687500 +v -0.812500 4.500000 -2.312500 +v -1.187500 3.500000 -2.312500 +v -1.187500 4.500000 -2.312500 +v -1.187500 3.500000 -2.687500 +v -1.187500 4.500000 -2.687500 +v 1.000000 2.500000 -2.750000 +v 1.000000 3.000000 -3.750000 +v 1.000000 3.000000 -2.750000 +v -1.000000 3.000000 -3.750000 +v -1.000000 2.500000 -2.750000 +v -1.000000 3.000000 -2.750000 +v 0.750000 2.500000 -4.000000 +v -0.750000 3.000000 -4.000000 +v 0.750000 3.000000 -4.000000 +v -0.750000 3.000000 -2.500000 +v 0.750000 2.500000 -2.500000 +v 0.750000 3.000000 -2.500000 +v 1.000000 3.000000 -3.750000 +v 1.000000 2.500000 -2.750000 +v 1.000000 3.000000 -2.750000 +v -1.000000 2.500000 -2.750000 +v -1.000000 3.000000 -3.750000 +v -1.000000 3.000000 -2.750000 +v -0.750000 3.000000 -4.000000 +v 0.750000 2.500000 -4.000000 +v 0.750000 3.000000 -4.000000 +v 0.750000 2.500000 -2.500000 +v -0.750000 3.000000 -2.500000 +v 0.750000 3.000000 -2.500000 +v 1.000000 2.500000 -3.750000 +v -1.000000 2.500000 -3.750000 +v -0.750000 2.500000 -4.000000 +v -0.750000 2.500000 -2.500000 +v 1.000000 2.500000 -3.750000 +v -1.000000 2.500000 -3.750000 +v -0.750000 2.500000 -4.000000 +v -0.750000 2.500000 -2.500000 +vt 0.769231 0.967742 +vt 0.750000 0.903226 +vt 0.769231 0.903226 +vt 0.750000 0.967742 +vt 0.730769 0.903226 +vt 0.692308 0.870968 +vt 0.717949 0.903226 +vt 0.692308 0.903226 +vt 0.692308 0.870968 +vt 0.717949 0.903226 +vt 0.692308 0.903226 +vt 0.692308 0.870968 +vt 0.717949 0.838710 +vt 0.717949 0.870968 +vt 0.692308 0.870968 +vt 0.717949 0.838710 +vt 0.717949 0.870968 +vt 0.769231 0.709677 +vt 0.743590 0.838710 +vt 0.743590 0.709677 +vt 0.717949 0.709677 +vt 0.692308 0.838710 +vt 0.692308 0.709677 +vt 0.769231 0.709677 +vt 0.743590 0.838710 +vt 0.743590 0.709677 +vt 0.794872 0.709677 +vt 0.769231 0.838710 +vt 0.717949 0.709677 +vt 0.794872 0.709677 +vt 0.769231 0.838710 +vt 0.692308 0.838710 +vt 0.692308 0.709677 +vt 0.692308 0.870968 +vt 0.717949 0.838710 +vt 0.717949 0.870968 +vt 0.692308 0.870968 +vt 0.717949 0.838710 +vt 0.717949 0.870968 +vt 0.794872 0.741935 +vt 0.769231 0.838710 +vt 0.769231 0.741935 +vt 0.743590 0.741935 +vt 0.717949 0.741935 +vt 0.794872 0.741935 +vt 0.769231 0.838710 +vt 0.769231 0.741935 +vt 0.743590 0.741935 +vt 0.717949 0.741935 +vt 0.692308 0.838710 +vt 0.692308 0.741935 +vt 0.743590 0.838710 +vt 0.692308 0.838710 +vt 0.692308 0.741935 +vt 0.743590 0.838710 +vt 0.730769 0.967742 +vt 0.711538 0.903226 +vt 0.711538 0.967742 +vt 0.692308 0.903226 +vt 0.769231 0.967742 +vt 0.750000 0.903226 +vt 0.769231 0.903226 +vt 0.750000 0.967742 +vt 0.730769 0.903226 +vt 0.730769 0.967742 +vt 0.711538 0.903226 +vt 0.711538 0.967742 +vt 0.692308 0.903226 +vt 0.769231 0.967742 +vt 0.750000 0.903226 +vt 0.769231 0.903226 +vt 0.750000 0.967742 +vt 0.730769 0.903226 +vt 0.730769 0.967742 +vt 0.711538 0.903226 +vt 0.711538 0.967742 +vt 0.692308 0.903226 +vt 0.769231 0.967742 +vt 0.750000 0.903226 +vt 0.769231 0.903226 +vt 0.750000 0.967742 +vt 0.730769 0.903226 +vt 0.730769 0.967742 +vt 0.711538 0.903226 +vt 0.711538 0.967742 +vt 0.692308 0.903226 +vt 0.743590 0.870968 +vt 0.794872 0.903226 +vt 0.743590 0.903226 +vt 0.743590 0.903226 +vt 0.794872 0.870968 +vt 0.794872 0.903226 +vt 0.717949 0.838710 +vt 0.794872 0.870968 +vt 0.717949 0.870968 +vt 0.717949 0.870968 +vt 0.794872 0.838710 +vt 0.794872 0.870968 +vt 0.794872 0.903226 +vt 0.743590 0.870968 +vt 0.743590 0.903226 +vt 0.794872 0.870968 +vt 0.743590 0.903226 +vt 0.794872 0.903226 +vt 0.794872 0.870968 +vt 0.717949 0.838710 +vt 0.717949 0.870968 +vt 0.794872 0.838710 +vt 0.717949 0.870968 +vt 0.794872 0.870968 +vt 0.717949 0.870968 +vt 0.717949 0.870968 +vt 0.794872 0.838710 +vt 0.794872 0.838710 +vt 0.794872 0.838710 +vt 0.794872 0.838710 +vt 0.692308 0.967742 +vt 0.692308 0.967742 +vt 0.692308 0.967742 +vt 0.692308 0.967742 +vt 0.794872 0.870968 +vt 0.743590 0.870968 +vt 0.794872 0.838710 +vt 0.717949 0.838710 +vt 0.794872 0.870968 +vt 0.743590 0.870968 +vt 0.794872 0.838710 +vt 0.717949 0.838710 vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 -vn -0.7071 -0.7071 0.0000 -vn 0.0000 -0.7071 0.7071 -vn 0.7071 -0.7071 -0.0000 -vn -0.0000 -0.7071 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 s off -f 3062/4184/303 3056/4185/303 3054/4186/303 -f 3063/4187/303 3054/4186/303 3055/4188/303 -f 3055/4188/304 3061/4189/304 3057/4190/304 -f 3056/4191/305 3059/4192/305 3054/4193/305 -f 3057/4194/306 3058/4195/306 3056/4196/306 -f 3054/4197/307 3060/4198/307 3055/4199/307 -f 3066/4200/304 3064/4201/304 3062/4202/304 -f 3064/4203/303 3057/4190/303 3056/4185/303 -f 3065/4204/303 3055/4188/303 3057/4190/303 -f 3059/4205/308 3067/4206/308 3060/4207/308 -f 3060/4207/308 3069/4208/308 3061/4189/308 -f 3061/4189/308 3068/4209/308 3058/4210/308 -f 3058/4210/308 3066/4211/308 3059/4205/308 -f 3071/4212/303 3072/4213/303 3070/4214/303 -f 3068/4215/307 3065/4216/307 3064/4217/307 -f 3069/4218/305 3063/4219/305 3065/4220/305 -f 3067/4221/306 3062/4222/306 3063/4223/306 -f 3075/4224/306 3077/4225/306 3082/4226/306 -f 3077/4227/305 3084/4228/305 3082/4229/305 -f 3074/4230/304 3078/4231/304 3083/4232/304 -f 3085/4233/309 3082/4229/309 3084/4228/309 -f 3083/4234/307 3081/4235/307 3079/4236/307 -f 3085/4237/307 3084/4238/307 3080/4239/307 -f 3084/4238/305 3086/4240/305 3080/4239/305 -f 3086/4241/310 3083/4234/310 3078/4242/310 -f 3093/4243/303 3091/4244/303 3092/4245/303 -f 3087/4246/305 3091/4244/305 3089/4247/305 -f 3089/4248/306 3094/4249/306 3090/4250/306 -f 3088/4251/307 3092/4245/307 3087/4252/307 -f 3090/4253/304 3093/4243/304 3088/4254/304 -f 3113/4255/303 3111/4256/303 3112/4257/303 -f 3117/4258/303 3115/4259/303 3116/4260/303 -f 3121/4261/303 3119/4262/303 3120/4263/303 -f 3125/4264/303 3123/4265/303 3124/4266/303 -f 3106/4267/304 3121/4261/304 3104/4268/304 -f 3097/4269/306 3114/4270/306 3098/4271/306 -f 3105/4272/306 3122/4273/306 3106/4267/306 -f 3099/4274/305 3115/4275/305 3101/4276/305 -f 3107/4277/305 3123/4278/305 3109/4279/305 -f 3100/4280/307 3116/4281/307 3099/4274/307 -f 3108/4282/307 3124/4283/307 3107/4277/307 -f 3102/4284/304 3117/4258/304 3100/4285/304 -f 3110/4286/304 3125/4264/304 3108/4287/304 -f 3101/4276/306 3118/4288/306 3102/4284/306 -f 3095/4289/305 3111/4290/305 3097/4269/305 -f 3109/4279/306 3126/4291/306 3110/4286/306 -f 3103/4292/305 3119/4293/305 3105/4272/305 -f 3096/4294/307 3112/4295/307 3095/4289/307 -f 3104/4296/307 3120/4297/307 3103/4292/307 -f 3098/4271/304 3113/4255/304 3096/4298/304 -f 3129/4299/307 3128/4300/307 3130/4301/307 -f 3133/4302/306 3132/4303/306 3131/4304/306 -f 3135/4305/304 3138/4306/304 3136/4307/304 -f 3142/4308/305 3139/4309/305 3140/4310/305 -f 3153/4311/303 3151/4312/303 3152/4313/303 -f 3157/4314/303 3155/4315/303 3156/4316/303 -f 3146/4317/304 3153/4311/304 3144/4318/304 -f 3143/4319/305 3151/4320/305 3145/4321/305 -f 3149/4322/306 3158/4323/306 3150/4324/306 -f 3148/4325/307 3156/4326/307 3147/4327/307 -f 3145/4321/306 3154/4328/306 3146/4317/306 -f 3144/4329/307 3152/4330/307 3143/4319/307 -f 3150/4324/304 3157/4314/304 3148/4331/304 -f 3147/4327/305 3155/4332/305 3149/4322/305 -f 3160/4333/307 3162/4334/307 3167/4335/307 -f 3162/4336/304 3169/4337/304 3167/4338/304 -f 3159/4339/305 3163/4340/305 3168/4341/305 -f 3161/4342/311 3169/4337/311 3170/4343/311 -f 3168/4344/306 3166/4345/306 3164/4346/306 -f 3170/4347/306 3169/4348/306 3165/4349/306 -f 3169/4348/304 3171/4350/304 3165/4349/304 -f 3171/4351/312 3168/4344/312 3163/4352/312 -f 3173/4353/305 3175/4354/305 3180/4355/305 -f 3175/4356/307 3182/4357/307 3180/4358/307 -f 3172/4359/306 3176/4360/306 3181/4361/306 -f 3174/4362/310 3182/4357/310 3183/4363/310 -f 3181/4364/304 3179/4365/304 3177/4366/304 -f 3183/4367/304 3182/4368/304 3178/4369/304 -f 3182/4368/307 3184/4370/307 3178/4369/307 -f 3184/4371/311 3181/4364/311 3176/4372/311 -f 3186/4373/304 3188/4374/304 3193/4375/304 -f 3188/4376/306 3195/4377/306 3193/4378/306 -f 3185/4379/307 3189/4380/307 3194/4381/307 -f 3196/4382/312 3193/4378/312 3195/4377/312 -f 3194/4383/305 3192/4384/305 3190/4385/305 -f 3196/4386/305 3195/4387/305 3191/4388/305 -f 3195/4387/306 3197/4389/306 3191/4388/306 -f 3197/4390/309 3194/4383/309 3189/4391/309 -f 3199/4392/306 3200/4393/306 3201/4394/306 -f 3203/4395/307 3204/4396/307 3202/4397/307 -f 3209/4398/305 3206/4399/305 3207/4400/305 -f 3210/4401/304 3213/4402/304 3211/4403/304 -f 3062/4184/303 3064/4203/303 3056/4185/303 -f 3063/4187/303 3062/4184/303 3054/4186/303 -f 3055/4188/304 3060/4207/304 3061/4189/304 -f 3056/4191/305 3058/4404/305 3059/4192/305 -f 3057/4194/306 3061/4405/306 3058/4195/306 -f 3054/4197/307 3059/4406/307 3060/4198/307 -f 3066/4200/304 3068/4407/304 3064/4201/304 -f 3064/4203/303 3065/4204/303 3057/4190/303 -f 3065/4204/303 3063/4187/303 3055/4188/303 -f 3059/4205/308 3066/4211/308 3067/4206/308 -f 3060/4207/308 3067/4206/308 3069/4208/308 -f 3061/4189/308 3069/4208/308 3068/4209/308 -f 3058/4210/308 3068/4209/308 3066/4211/308 -f 3071/4212/303 3073/4408/303 3072/4213/303 -f 3068/4215/307 3069/4409/307 3065/4216/307 -f 3069/4218/305 3067/4410/305 3063/4219/305 -f 3067/4221/306 3066/4411/306 3062/4222/306 -f 3076/4412/306 3074/4230/306 3082/4226/306 -f 3074/4230/306 3075/4224/306 3082/4226/306 -f 3077/4227/305 3081/4235/305 3084/4228/305 -f 3079/4413/304 3075/4224/304 3083/4232/304 -f 3075/4224/304 3074/4230/304 3083/4232/304 -f 3085/4233/309 3076/4414/309 3082/4229/309 -f 3083/4234/307 3084/4228/307 3081/4235/307 -f 3086/4241/310 3084/4228/310 3083/4234/310 -f 3093/4243/303 3094/4249/303 3091/4244/303 -f 3087/4246/305 3092/4245/305 3091/4244/305 -f 3089/4248/306 3091/4244/306 3094/4249/306 -f 3088/4251/307 3093/4243/307 3092/4245/307 -f 3090/4253/304 3094/4249/304 3093/4243/304 -f 3113/4255/303 3114/4270/303 3111/4256/303 -f 3117/4258/303 3118/4288/303 3115/4259/303 -f 3121/4261/303 3122/4273/303 3119/4262/303 -f 3125/4264/303 3126/4291/303 3123/4265/303 -f 3106/4267/304 3122/4273/304 3121/4261/304 -f 3097/4269/306 3111/4290/306 3114/4270/306 -f 3105/4272/306 3119/4293/306 3122/4273/306 -f 3099/4274/305 3116/4281/305 3115/4275/305 -f 3107/4277/305 3124/4283/305 3123/4278/305 -f 3100/4280/307 3117/4415/307 3116/4281/307 -f 3108/4282/307 3125/4416/307 3124/4283/307 -f 3102/4284/304 3118/4288/304 3117/4258/304 -f 3110/4286/304 3126/4291/304 3125/4264/304 -f 3101/4276/306 3115/4275/306 3118/4288/306 -f 3095/4289/305 3112/4295/305 3111/4290/305 -f 3109/4279/306 3123/4278/306 3126/4291/306 -f 3103/4292/305 3120/4297/305 3119/4293/305 -f 3096/4294/307 3113/4417/307 3112/4295/307 -f 3104/4296/307 3121/4418/307 3120/4297/307 -f 3098/4271/304 3114/4270/304 3113/4255/304 -f 3129/4299/307 3127/4419/307 3128/4300/307 -f 3133/4302/306 3134/4420/306 3132/4303/306 -f 3135/4305/304 3137/4421/304 3138/4306/304 -f 3142/4308/305 3141/4422/305 3139/4309/305 -f 3153/4311/303 3154/4328/303 3151/4312/303 -f 3157/4314/303 3158/4323/303 3155/4315/303 -f 3146/4317/304 3154/4328/304 3153/4311/304 -f 3143/4319/305 3152/4330/305 3151/4320/305 -f 3149/4322/306 3155/4332/306 3158/4323/306 -f 3148/4325/307 3157/4423/307 3156/4326/307 -f 3145/4321/306 3151/4320/306 3154/4328/306 -f 3144/4329/307 3153/4424/307 3152/4330/307 -f 3150/4324/304 3158/4323/304 3157/4314/304 -f 3147/4327/305 3156/4326/305 3155/4332/305 -f 3161/4425/307 3159/4339/307 3167/4335/307 -f 3159/4339/307 3160/4333/307 3167/4335/307 -f 3162/4336/304 3166/4345/304 3169/4337/304 -f 3164/4426/305 3160/4333/305 3168/4341/305 -f 3160/4333/305 3159/4339/305 3168/4341/305 -f 3161/4342/311 3167/4338/311 3169/4337/311 -f 3168/4344/306 3169/4337/306 3166/4345/306 -f 3171/4351/312 3169/4337/312 3168/4344/312 -f 3174/4427/305 3172/4359/305 3180/4355/305 -f 3172/4359/305 3173/4353/305 3180/4355/305 -f 3175/4356/307 3179/4365/307 3182/4357/307 -f 3177/4428/306 3173/4353/306 3181/4361/306 -f 3173/4353/306 3172/4359/306 3181/4361/306 -f 3174/4362/310 3180/4358/310 3182/4357/310 -f 3181/4364/304 3182/4357/304 3179/4365/304 -f 3184/4371/311 3182/4357/311 3181/4364/311 -f 3187/4429/304 3185/4379/304 3193/4375/304 -f 3185/4379/304 3186/4373/304 3193/4375/304 -f 3188/4376/306 3192/4384/306 3195/4377/306 -f 3190/4430/307 3186/4373/307 3194/4381/307 -f 3186/4373/307 3185/4379/307 3194/4381/307 -f 3196/4382/312 3187/4431/312 3193/4378/312 -f 3194/4383/305 3195/4377/305 3192/4384/305 -f 3197/4390/309 3195/4377/309 3194/4383/309 -f 3199/4392/306 3198/4432/306 3200/4393/306 -f 3203/4395/307 3205/4433/307 3204/4396/307 -f 3209/4398/305 3208/4434/305 3206/4399/305 -f 3210/4401/304 3212/4435/304 3213/4402/304 -o V2_Pad -v -0.500000 2.000000 0.500000 +f 3226/4715/409 3227/4716/409 3228/4717/409 +f 3229/4718/410 3230/4719/410 3227/4716/410 +f 3231/4720/411 3232/4721/411 3233/4722/411 +f 3234/4723/411 3235/4724/411 3236/4725/411 +f 3237/4726/412 3238/4727/412 3239/4728/412 +f 3240/4729/412 3241/4730/412 3242/4731/412 +f 3243/4732/410 3242/4733/410 3244/4734/410 +f 3245/4735/413 3246/4736/413 3247/4737/413 +f 3248/4738/410 3239/4739/410 3249/4740/410 +f 3250/4741/409 3240/4742/409 3243/4732/409 +f 3244/4734/414 3241/4730/414 3251/4743/414 +f 3247/4744/409 3237/4745/409 3248/4738/409 +f 3249/4740/414 3238/4727/414 3245/4735/414 +f 3251/4743/413 3252/4746/413 3250/4747/413 +f 3253/4748/412 3254/4749/412 3255/4750/412 +f 3256/4751/412 3257/4752/412 3258/4753/412 +f 3259/4754/409 3256/4755/409 3235/4756/409 +f 3236/4757/414 3257/4752/414 3234/4758/414 +f 3260/4759/409 3253/4760/409 3232/4761/409 +f 3233/4762/414 3254/4749/414 3231/4763/414 +f 3234/4758/413 3261/4764/413 3259/4765/413 +f 3235/4756/410 3258/4766/410 3236/4757/410 +f 3231/4763/413 3262/4767/413 3260/4768/413 +f 3232/4761/410 3255/4769/410 3233/4762/410 +f 3263/4770/414 3264/4771/414 3230/4719/414 +f 3265/4772/413 3228/4773/413 3264/4771/413 +f 3266/4774/409 3267/4775/409 3268/4776/409 +f 3269/4777/410 3270/4778/410 3267/4775/410 +f 3271/4779/414 3272/4780/414 3270/4778/414 +f 3273/4781/413 3268/4782/413 3272/4780/413 +f 3274/4783/409 3275/4784/409 3276/4785/409 +f 3277/4786/410 3278/4787/410 3275/4784/410 +f 3279/4788/414 3280/4789/414 3278/4787/414 +f 3281/4790/413 3276/4791/413 3280/4789/413 +f 3282/4792/409 3283/4793/409 3284/4794/409 +f 3285/4795/410 3286/4796/410 3283/4793/410 +f 3287/4797/414 3288/4798/414 3286/4796/414 +f 3289/4799/413 3284/4800/413 3288/4798/413 +f 3290/4801/409 3291/4802/409 3292/4803/409 +f 3293/4804/414 3294/4805/414 3295/4806/414 +f 3296/4807/413 3297/4808/413 3298/4809/413 +f 3299/4810/410 3300/4811/410 3301/4812/410 +f 3302/4813/414 3303/4814/414 3304/4815/414 +f 3305/4816/409 3306/4817/409 3307/4818/409 +f 3308/4819/410 3309/4820/410 3310/4821/410 +f 3311/4822/413 3312/4823/413 3313/4824/413 +f 3226/4715/409 3229/4718/409 3227/4716/409 +f 3229/4718/410 3263/4770/410 3230/4719/410 +f 3231/4720/411 3260/4825/411 3232/4721/411 +f 3234/4723/411 3259/4826/411 3235/4724/411 +f 3237/4726/412 3246/4736/412 3238/4727/412 +f 3240/4729/412 3252/4746/412 3241/4730/412 +f 3243/4732/410 3240/4742/410 3242/4733/410 +f 3245/4735/413 3238/4727/413 3246/4736/413 +f 3248/4738/410 3237/4745/410 3239/4739/410 +f 3250/4741/409 3252/4827/409 3240/4742/409 +f 3244/4734/414 3242/4733/414 3241/4730/414 +f 3247/4744/409 3246/4828/409 3237/4745/409 +f 3249/4740/414 3239/4739/414 3238/4727/414 +f 3251/4743/413 3241/4730/413 3252/4746/413 +f 3253/4748/412 3262/4767/412 3254/4749/412 +f 3256/4751/412 3261/4764/412 3257/4752/412 +f 3259/4754/409 3261/4829/409 3256/4755/409 +f 3236/4757/414 3258/4766/414 3257/4752/414 +f 3260/4759/409 3262/4830/409 3253/4760/409 +f 3233/4762/414 3255/4769/414 3254/4749/414 +f 3234/4758/413 3257/4752/413 3261/4764/413 +f 3235/4756/410 3256/4755/410 3258/4766/410 +f 3231/4763/413 3254/4749/413 3262/4767/413 +f 3232/4761/410 3253/4760/410 3255/4769/410 +f 3263/4770/414 3265/4772/414 3264/4771/414 +f 3265/4772/413 3226/4831/413 3228/4773/413 +f 3266/4774/409 3269/4777/409 3267/4775/409 +f 3269/4777/410 3271/4779/410 3270/4778/410 +f 3271/4779/414 3273/4781/414 3272/4780/414 +f 3273/4781/413 3266/4832/413 3268/4782/413 +f 3274/4783/409 3277/4786/409 3275/4784/409 +f 3277/4786/410 3279/4788/410 3278/4787/410 +f 3279/4788/414 3281/4790/414 3280/4789/414 +f 3281/4790/413 3274/4833/413 3276/4791/413 +f 3282/4792/409 3285/4795/409 3283/4793/409 +f 3285/4795/410 3287/4797/410 3286/4796/410 +f 3287/4797/414 3289/4799/414 3288/4798/414 +f 3289/4799/413 3282/4834/413 3284/4800/413 +f 3290/4801/409 3314/4835/409 3291/4802/409 +f 3293/4804/414 3315/4836/414 3294/4805/414 +f 3296/4807/413 3316/4837/413 3297/4808/413 +f 3299/4810/410 3317/4838/410 3300/4811/410 +f 3302/4813/414 3318/4839/414 3303/4814/414 +f 3305/4816/409 3319/4840/409 3306/4817/409 +f 3308/4819/410 3320/4841/410 3309/4820/410 +f 3311/4822/413 3321/4842/413 3312/4823/413 +o Atlas_Rope +v -1.585786 16.750000 1.409011 +v -1.762563 16.250000 1.939341 +v -1.939340 16.250000 1.762564 +v -2.292893 11.000000 2.116117 +v -2.116117 16.250000 1.939341 +v -2.116117 11.000000 2.292893 +v -1.939340 16.250000 2.116118 +v -2.292893 11.000000 2.469671 +v -2.469670 11.000000 2.292893 +v -1.055456 17.000000 0.878681 +v -0.878680 16.750000 0.701904 +v -1.055456 16.750000 0.878681 +v -1.585786 17.000000 1.409011 +v -1.409010 16.750000 1.585787 +v -0.878680 17.000000 1.055457 +v -0.878680 16.750000 1.055457 +v -1.409010 17.000000 1.585787 +v -0.701903 16.750000 0.878681 +v -0.878680 15.250000 0.701904 +v -0.348350 14.250000 0.171574 +v -1.055456 15.250000 0.878681 +v -0.701903 15.250000 0.878681 +v -0.878680 15.250000 1.055457 +v -0.171573 14.250000 -0.005203 +v -0.171573 14.250000 0.348351 +v 0.005204 14.250000 0.171574 +vt 0.897436 0.395161 +vt 0.884615 0.346774 +vt 0.897436 0.346774 +vt 0.846154 -0.000000 +vt 0.858974 0.338710 +vt 0.846154 0.338710 +vt 0.884615 -0.000000 +vt 0.871795 0.338710 +vt 0.871795 -0.000000 +vt 0.858974 -0.000000 +vt 0.897436 -0.000000 +vt 0.884615 0.338710 +vt 0.858974 0.451613 +vt 0.846154 0.467742 +vt 0.846154 0.451613 +vt 0.858974 0.403226 +vt 0.846154 0.346774 +vt 0.884615 0.395161 +vt 0.871795 0.451613 +vt 0.897436 0.403226 +vt 0.884615 0.451613 +vt 0.884615 0.403226 +vt 0.871795 0.403226 +vt 0.871795 0.467742 +vt 0.884615 0.532258 +vt 0.897436 0.467742 +vt 0.897436 0.532258 +vt 0.884615 0.629032 +vt 0.897436 0.629032 +vt 0.871795 0.629032 +vt 0.858974 0.629032 +vt 0.871795 0.532258 +vt 0.846154 0.629032 +vt 0.858974 0.532258 +vt 0.884615 0.467742 +vt 0.858974 0.467742 +vt 0.871795 0.467742 +vt 0.846154 0.532258 +vt 0.897436 0.338710 +vt 0.846154 0.403226 +vt 0.846154 0.395161 +vt 0.897436 0.451613 +vt 0.884615 0.467742 +vt 0.858974 0.467742 +vt 0.846154 0.467742 +vn 0.5000 -0.7071 -0.5000 +vn -0.7071 -0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn -0.7039 0.0948 0.7039 +vn 0.7039 -0.0948 -0.7039 +vn -0.5000 0.7071 0.5000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.5000 0.7071 -0.5000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.5000 -0.7071 0.5000 +s off +f 3322/4843/415 3323/4844/415 3324/4845/415 +f 3325/4846/416 3326/4847/416 3324/4848/416 +f 3327/4849/417 3328/4850/417 3329/4851/417 +f 3329/4851/418 3326/4847/418 3330/4852/418 +f 3325/4853/419 3323/4854/419 3327/4849/419 +f 3331/4855/416 3332/4856/416 3333/4857/416 +f 3334/4858/416 3324/4859/416 3326/4847/416 +f 3328/4850/420 3334/4858/420 3326/4847/420 +f 3335/4860/417 3328/4850/417 3323/4844/417 +f 3334/4858/421 3336/4861/421 3331/4855/421 +f 3322/4862/422 3337/4863/422 3335/4864/422 +f 3337/4863/417 3336/4861/417 3338/4865/417 +f 3339/4866/423 3331/4855/423 3336/4861/423 +f 3340/4867/416 3341/4868/416 3342/4869/416 +f 3332/4870/416 3342/4869/416 3333/4871/416 +f 3339/4872/424 3340/4867/424 3332/4870/424 +f 3337/4873/417 3343/4874/417 3339/4872/417 +f 3333/4875/425 3344/4876/425 3337/4873/425 +f 3343/4874/423 3345/4877/423 3340/4867/423 +f 3343/4874/417 3346/4878/417 3347/4879/417 +f 3342/4880/426 3346/4878/426 3344/4876/426 +f 3322/4843/415 3335/4860/415 3323/4844/415 +f 3325/4846/416 3330/4852/416 3326/4847/416 +f 3327/4849/417 3323/4854/417 3328/4850/417 +f 3329/4851/418 3328/4850/418 3326/4847/418 +f 3325/4853/419 3324/4881/419 3323/4854/419 +f 3333/4857/416 3322/4882/416 3334/4858/416 +f 3334/4858/416 3331/4855/416 3333/4857/416 +f 3334/4858/416 3322/4883/416 3324/4859/416 +f 3328/4850/420 3338/4865/420 3334/4858/420 +f 3335/4860/417 3338/4865/417 3328/4850/417 +f 3334/4858/421 3338/4865/421 3336/4861/421 +f 3322/4862/422 3333/4884/422 3337/4863/422 +f 3338/4865/417 3335/4864/417 3337/4863/417 +f 3337/4863/417 3339/4885/417 3336/4861/417 +f 3339/4866/423 3332/4886/423 3331/4855/423 +f 3340/4867/416 3345/4877/416 3341/4868/416 +f 3332/4870/416 3340/4867/416 3342/4869/416 +f 3339/4872/424 3343/4874/424 3340/4867/424 +f 3337/4873/417 3344/4876/417 3343/4874/417 +f 3333/4875/425 3342/4880/425 3344/4876/425 +f 3343/4874/423 3347/4879/423 3345/4877/423 +f 3343/4874/417 3344/4876/417 3346/4878/417 +f 3342/4880/426 3341/4887/426 3346/4878/426 +o ABM_Pad v 0.500000 2.000000 0.500000 -v 0.500000 2.000000 -0.500000 -v -0.500000 2.000000 -0.500000 -v -1.500000 1.500000 -1.500000 -v 1.500000 1.500000 -1.500000 -v -1.500000 1.500000 -2.000000 -v 1.500000 1.500000 -2.000000 -v -1.500000 1.000000 -2.000000 -v 1.500000 1.000000 -2.000000 -v -1.500000 1.000000 -1.500000 -v 1.500000 1.000000 -1.500000 -v -1.500000 2.000000 1.500000 -v 1.500000 2.000000 1.500000 -v -1.500000 2.000000 -1.500000 -v 1.500000 2.000000 -1.500000 -v -0.500000 2.000000 0.500000 -v 0.500000 2.000000 0.500000 -v 0.500000 2.000000 -0.500000 -v -0.500000 2.000000 -0.500000 -v 0.500000 1.750000 -0.500000 +v -1.000000 2.000000 1.000000 +v 1.000000 2.000000 1.000000 +v -1.000000 1.750000 1.000000 v 0.500000 1.750000 0.500000 -v -0.500000 1.750000 -0.500000 +v 1.000000 1.750000 1.000000 +v -0.500000 2.000000 0.500000 +v -1.000000 2.000000 -1.000000 +v -0.500000 2.000000 -0.500000 +v 1.000000 2.000000 -1.000000 +v 0.500000 2.000000 -0.500000 +v -1.000000 1.750000 -1.000000 v -0.500000 1.750000 0.500000 -v -1.500000 1.750000 -1.500000 -v -1.500000 1.750000 1.500000 -v 1.500000 1.750000 1.500000 -v 1.500000 1.750000 -1.500000 -v 0.750000 1.125000 1.250000 -v 1.250000 1.125000 1.250000 -v 0.750000 1.125000 0.750000 -v 1.250000 1.125000 0.750000 -v 0.750000 1.625000 1.250000 -v 1.250000 1.625000 1.250000 -v 0.750000 1.625000 0.750000 -v 1.250000 1.625000 0.750000 -v 0.625000 1.000000 1.375000 -v 1.375000 1.000000 1.375000 -v 0.625000 1.000000 0.625000 -v 1.375000 1.000000 0.625000 -v 0.625000 1.125000 1.375000 -v 1.375000 1.125000 1.375000 -v 0.625000 1.125000 0.625000 -v 1.375000 1.125000 0.625000 -v 0.625000 1.625000 1.375000 -v 1.375000 1.625000 1.375000 -v 0.625000 1.625000 0.625000 -v 1.375000 1.625000 0.625000 -v 0.625000 1.750000 1.375000 -v 1.375000 1.750000 1.375000 -v 0.625000 1.750000 0.625000 -v 1.375000 1.750000 0.625000 -v -0.250000 1.000000 2.250000 -v 0.250000 1.000000 2.250000 -v -0.250000 1.000000 1.750000 -v 0.250000 1.000000 1.750000 -v -0.250000 10.000000 1.750000 -v -0.250000 10.000000 2.250000 -v 0.250000 10.000000 2.250000 -v 0.250000 10.000000 1.750000 -v 4.000000 2.750000 1.500000 -v 3.750000 2.750000 1.500000 -v 3.750000 2.750000 1.750000 -v 4.000000 2.750000 1.750000 -v 0.750001 2.000000 1.500000 -v 3.750000 2.000000 1.500000 -v 0.750001 1.500000 1.633975 -v 3.750000 1.500000 1.633975 -v 0.750001 1.133975 2.000000 -v 3.750000 1.133975 2.000000 -v 0.750001 1.000000 2.500000 -v 3.750000 1.000000 2.500000 -v 0.750001 1.133975 3.000000 -v 3.750000 1.133975 3.000000 -v 0.750001 1.500000 3.366025 -v 3.750000 1.500000 3.366025 -v 0.750001 2.000000 3.500000 -v 3.750000 2.000000 3.500000 -v 0.750001 2.500000 3.366025 -v 3.750000 2.500000 3.366025 -v 0.750001 2.866026 3.000000 -v 3.750000 2.866026 3.000000 -v 0.750001 3.000000 2.500000 -v 3.750000 3.000000 2.500000 -v 0.750001 2.866026 2.000000 -v 3.750000 2.866026 2.000000 -v 0.750001 2.500001 1.633975 -v 3.750000 2.500001 1.633975 -v 4.000000 1.000000 1.750000 -v 3.750000 1.000000 1.750000 -v 3.750000 1.000000 1.500000 -v 4.000000 1.000000 1.500000 -v 4.000000 1.250000 1.500000 -v 3.750000 1.250000 1.500000 -v 3.750000 1.250000 1.750000 -v 4.000000 1.250000 1.750000 -v 4.000000 1.250000 3.500000 -v 3.750000 1.250000 3.500000 -v 3.750000 1.250000 3.250000 -v 4.000000 1.250000 3.250000 -v 4.000000 1.000000 3.250000 -v 3.750000 1.000000 3.250000 -v 3.750000 1.000000 3.500000 -v 4.000000 1.000000 3.500000 -v 0.750000 1.000000 1.750000 +v 1.000000 1.750000 -1.000000 +v -0.500000 1.750000 -0.500000 +v 0.500000 1.750000 -0.500000 +v -0.500000 2.000000 0.500000 +v 0.500000 2.000000 -0.500000 +v -0.500000 2.000000 -0.500000 +v 0.937500 1.750000 0.937500 +v 0.937500 1.000000 0.562500 +v 0.937500 1.750000 0.562500 +v 0.562500 1.750000 0.562500 +v 0.562500 1.000000 0.937500 +v 0.562500 1.750000 0.937500 +v 0.562500 1.000000 0.562500 +v 0.937500 1.000000 0.937500 +v -0.500000 1.000000 -1.750000 +v 0.500000 1.375000 -1.750000 +v 0.500000 1.000000 -1.750000 +v 0.500000 1.500000 -1.375000 +v -0.500000 1.500000 -1.625000 +v -0.500000 1.500000 -1.375000 +v 0.500000 1.000000 -1.250000 +v -0.500000 1.375000 -1.250000 +v -0.500000 1.000000 -1.250000 +v 0.500000 1.500000 -1.625000 +v 0.500000 1.375000 -1.250000 +v -0.500000 1.375000 -1.750000 +v 0.750000 1.000000 -0.562500 +v 0.750000 1.750000 0.562500 +v 0.750000 1.000000 0.562500 +v 1.000000 11.000000 1.750000 +v 0.500000 11.000000 1.250000 +v 0.500000 11.000000 1.750000 +v -0.500000 11.000000 1.750000 +v -1.000000 11.000000 1.250000 +v -1.000000 11.000000 1.750000 +v 1.000000 1.000000 1.750000 v 0.500000 1.000000 1.750000 -v 0.500000 1.000000 1.500000 -v 0.750000 1.000000 1.500000 -v 0.750000 1.250000 1.500000 -v 0.500000 1.250000 1.500000 -v 0.500000 1.250000 1.750000 -v 0.750000 1.250000 1.750000 -v 0.750000 1.250000 3.500000 -v 0.500000 1.250000 3.500000 -v 0.500000 1.250000 3.250000 -v 0.750000 1.250000 3.250000 -v 0.750000 1.000000 3.250000 -v 0.500000 1.000000 3.250000 -v 0.500000 1.000000 3.500000 -v 0.750000 1.000000 3.500000 -v 4.000000 3.000000 1.500000 -v 3.750000 3.000000 1.500000 -v 3.750000 3.000000 1.750000 -v 4.000000 3.000000 1.750000 -v 4.000000 3.000000 3.500000 -v 3.750000 3.000000 3.500000 -v 3.750000 3.000000 3.250000 -v 4.000000 3.000000 3.250000 -v 4.000000 2.750000 3.250000 -v 3.750000 2.750000 3.250000 -v 3.750000 2.750000 3.500000 -v 4.000000 2.750000 3.500000 -v 0.750000 2.750000 1.750000 -v 0.500000 2.750000 1.750000 -v 0.500000 2.750000 1.500000 -v 0.750000 2.750000 1.500000 -v 0.750000 3.000000 1.500000 -v 0.500000 3.000000 1.500000 -v 0.500000 3.000000 1.750000 -v 0.750000 3.000000 1.750000 -v 0.750000 3.000000 3.500000 -v 0.500000 3.000000 3.500000 -v 0.500000 3.000000 3.250000 -v 0.750000 3.000000 3.250000 -v 0.750000 2.750000 3.250000 -v 0.500000 2.750000 3.250000 -v 0.500000 2.750000 3.500000 -v 0.750000 2.750000 3.500000 -v 4.000000 1.000000 1.750000 -v 4.000000 1.000000 3.250000 -v 3.875000 1.000000 1.750000 -v 3.875000 1.000000 3.250000 -v 4.000000 1.125000 1.750000 -v 4.000000 1.125000 3.250000 -v 3.875000 1.125000 1.750000 -v 3.875000 1.125000 3.250000 -v 0.625000 1.000000 1.750000 -v 0.625000 1.000000 3.250000 -v 0.500000 1.000000 1.750000 -v 0.500000 1.000000 3.250000 -v 0.625000 1.125000 1.750000 -v 0.625000 1.125000 3.250000 -v 0.500000 1.125000 1.750000 -v 0.500000 1.125000 3.250000 -v 4.000000 2.875000 1.750000 -v 4.000000 2.875000 3.250000 -v 3.875000 2.875000 1.750000 -v 3.875000 2.875000 3.250000 -v 4.000000 3.000000 1.750000 -v 4.000000 3.000000 3.250000 -v 3.875000 3.000000 1.750000 -v 3.875000 3.000000 3.250000 -v 0.625000 2.875000 1.750000 -v 0.625000 2.875000 3.250000 -v 0.500000 2.875000 1.750000 -v 0.500000 2.875000 3.250000 -v 0.625000 3.000000 1.750000 -v 0.625000 3.000000 3.250000 -v 0.500000 3.000000 1.750000 -v 0.500000 3.000000 3.250000 -v 4.000000 2.750000 1.500000 -v 4.000000 1.250000 1.500000 -v 3.875000 2.750000 1.500000 -v 3.875000 1.250000 1.500000 -v 4.000000 2.750000 1.625000 -v 4.000000 1.250000 1.625000 -v 3.875000 2.750000 1.625000 -v 3.875000 1.250000 1.625000 -v 0.625000 2.750000 1.500000 -v 0.625000 1.250000 1.500000 -v 0.500000 2.750000 1.500000 -v 0.500000 1.250000 1.500000 -v 0.625000 2.750000 1.625000 -v 0.625000 1.250000 1.625000 -v 0.500000 2.750000 1.625000 -v 0.500000 1.250000 1.625000 -v 4.000000 2.750000 3.375000 -v 4.000000 1.250000 3.375000 -v 3.875000 2.750000 3.375000 -v 3.875000 1.250000 3.375000 -v 4.000000 2.750000 3.500000 -v 4.000000 1.250000 3.500000 -v 3.875000 2.750000 3.500000 -v 3.875000 1.250000 3.500000 -v 0.625000 2.750000 3.375000 -v 0.625000 1.250000 3.375000 -v 0.500000 2.750000 3.375000 -v 0.500000 1.250000 3.375000 -v 0.625000 2.750000 3.500000 -v 0.625000 1.250000 3.500000 -v 0.500000 2.750000 3.500000 -v 0.500000 1.250000 3.500000 -v 3.750000 1.000000 3.500000 -v 0.750000 1.000000 3.500000 -v 3.750000 1.000000 3.375000 -v 0.750000 1.000000 3.375000 -v 3.750000 1.125000 3.500000 -v 0.750000 1.125000 3.500000 -v 3.750000 1.125000 3.375000 -v 0.750000 1.125000 3.375000 -v 3.750000 2.875000 3.500000 -v 0.750000 2.875000 3.500000 -v 3.750000 2.875000 3.375000 -v 0.750000 2.875000 3.375000 -v 3.750000 3.000000 3.500000 -v 0.750000 3.000000 3.500000 -v 3.750000 3.000000 3.375000 -v 0.750000 3.000000 3.375000 -v 3.750000 1.000000 1.625000 -v 0.750000 1.000000 1.625000 -v 3.750000 1.000000 1.500000 -v 0.750000 1.000000 1.500000 -v 3.750000 1.125000 1.625000 -v 0.750000 1.125000 1.625000 -v 3.750000 1.125000 1.500000 -v 0.750000 1.125000 1.500000 -v 3.750000 2.875000 1.625000 -v 0.750000 2.875000 1.625000 -v 3.750000 2.875000 1.500000 -v 0.750000 2.875000 1.500000 -v 3.750000 3.000000 1.625000 -v 0.750000 3.000000 1.625000 -v 3.750000 3.000000 1.500000 -v 0.750000 3.000000 1.500000 -v 4.000000 1.625000 1.850481 -v 4.000000 2.000000 1.750000 -v 4.000000 1.350481 2.125000 -v 4.000000 1.250000 2.500000 -v 4.000000 1.350481 2.875000 -v 4.000000 1.625000 3.149519 -v 4.000000 2.000000 3.250000 -v 4.000000 2.375000 3.149519 -v 4.000000 2.649519 2.875000 -v 4.000000 2.750000 2.500000 -v 4.000000 2.649520 2.125000 -v 4.000000 2.375001 1.850481 -v 0.500001 2.000000 1.750000 -v 0.500001 1.625000 1.850481 -v 0.500001 1.350481 2.125000 -v 0.500001 1.250000 2.500000 -v 0.500001 1.350481 2.875000 -v 0.500001 1.625000 3.149519 -v 0.500001 2.000000 3.250000 -v 0.500001 2.375000 3.149519 -v 0.500001 2.649519 2.875000 -v 0.500001 2.750000 2.500000 -v 0.500001 2.649520 2.125000 -v 0.500001 2.375001 1.850481 -v 0.750000 1.125000 -0.750000 -v 1.250000 1.125000 -0.750000 -v 0.750000 1.125000 -1.250000 -v 1.250000 1.125000 -1.250000 -v 0.750000 1.625000 -0.750000 -v 1.250000 1.625000 -0.750000 -v 0.750000 1.625000 -1.250000 -v 1.250000 1.625000 -1.250000 -v 0.625000 1.000000 -0.625000 -v 1.375000 1.000000 -0.625000 -v 0.625000 1.000000 -1.375000 -v 1.375000 1.000000 -1.375000 -v 0.625000 1.125000 -0.625000 -v 1.375000 1.125000 -0.625000 -v 0.625000 1.125000 -1.375000 -v 1.375000 1.125000 -1.375000 -v 0.625000 1.625000 -0.625000 -v 1.375000 1.625000 -0.625000 -v 0.625000 1.625000 -1.375000 -v 1.375000 1.625000 -1.375000 -v 0.625000 1.750000 -0.625000 -v 1.375000 1.750000 -0.625000 -v 0.625000 1.750000 -1.375000 -v 1.375000 1.750000 -1.375000 -v -1.250000 1.125000 1.250000 -v -0.750000 1.125000 1.250000 -v -1.250000 1.125000 0.750000 -v -0.750000 1.125000 0.750000 -v -1.250000 1.625000 1.250000 -v -0.750000 1.625000 1.250000 -v -1.250000 1.625000 0.750000 -v -0.750000 1.625000 0.750000 -v -1.375000 1.000000 1.375000 -v -0.625000 1.000000 1.375000 -v -1.375000 1.000000 0.625000 -v -0.625000 1.000000 0.625000 -v -1.375000 1.125000 1.375000 -v -0.625000 1.125000 1.375000 -v -1.375000 1.125000 0.625000 -v -0.625000 1.125000 0.625000 -v -1.375000 1.625000 1.375000 -v -0.625000 1.625000 1.375000 -v -1.375000 1.625000 0.625000 -v -0.625000 1.625000 0.625000 -v -1.375000 1.750000 1.375000 -v -0.625000 1.750000 1.375000 -v -1.375000 1.750000 0.625000 -v -0.625000 1.750000 0.625000 -v -1.250000 1.125000 -0.750000 -v -0.750000 1.125000 -0.750000 -v -1.250000 1.125000 -1.250000 -v -0.750000 1.125000 -1.250000 -v -1.250000 1.625000 -0.750000 -v -0.750000 1.625000 -0.750000 -v -1.250000 1.625000 -1.250000 -v -0.750000 1.625000 -1.250000 -v -1.375000 1.000000 -0.625000 -v -0.625000 1.000000 -0.625000 -v -1.375000 1.000000 -1.375000 -v -0.625000 1.000000 -1.375000 -v -1.375000 1.125000 -0.625000 -v -0.625000 1.125000 -0.625000 -v -1.375000 1.125000 -1.375000 -v -0.625000 1.125000 -1.375000 -v -1.375000 1.625000 -0.625000 -v -0.625000 1.625000 -0.625000 -v -1.375000 1.625000 -1.375000 -v -0.625000 1.625000 -1.375000 -v -1.375000 1.750000 -0.625000 -v -0.625000 1.750000 -0.625000 -v -1.375000 1.750000 -1.375000 -v -0.625000 1.750000 -1.375000 -vt 0.265306 0.763158 -vt 0.510204 0.710526 -vt 0.510204 0.763158 -vt 0.265306 0.815789 -vt 0.510204 0.815789 -vt 0.265306 0.710526 -vt 0.510204 0.657895 -vt 0.224490 0.710526 -vt 0.224490 0.763158 -vt 0.551020 0.710526 -vt 0.551020 0.763158 -vt 0.244898 0.552632 -vt 0.163265 0.342105 -vt 0.244898 0.447368 -vt 0.408163 0.342105 -vt 0.326531 0.447368 -vt 0.408163 0.657895 -vt 0.326531 0.552632 -vt 0.163265 0.657895 -vt 0.326531 0.447368 -vt 0.244898 0.552632 -vt 0.244898 0.447368 -vt 0.163265 0.315789 -vt 0.244898 0.105263 -vt 0.244898 0.210526 -vt 0.408163 0.315789 -vt 0.326531 0.210526 -vt 0.408163 -0.000000 -vt 0.326531 0.105263 -vt 0.163265 -0.000000 -vt 0.244898 0.210526 -vt 0.326531 0.184211 -vt 0.326531 0.210526 -vt 0.163265 0.342105 -vt 0.408163 0.315789 -vt 0.408163 0.342105 -vt 0.244898 0.210526 -vt 0.326531 0.184211 -vt 0.326531 0.210526 -vt 0.244898 0.210526 -vt 0.326531 0.184211 -vt 0.326531 0.210526 -vt 0.163265 0.342105 -vt 0.408163 0.315789 -vt 0.408163 0.342105 -vt 0.163265 0.342105 -vt 0.408163 0.315789 -vt 0.408163 0.342105 -vt 0.244898 0.210526 -vt 0.326531 0.184211 -vt 0.326531 0.210526 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.163265 0.671053 -vt 0.224490 0.750000 -vt 0.163265 0.750000 -vt 0.224490 0.657895 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.163265 0.802632 -vt 0.224490 0.802632 -vt 0.040816 0.947368 -vt 0.081633 1.000000 -vt 0.040816 1.000000 -vt 0.081633 0.000000 -vt 0.040816 0.000000 -vt 0.163265 0.000000 -vt 0.122449 0.947368 -vt 0.122449 0.000000 -vt 0.081633 0.947368 -vt 0.000000 0.947368 +v -0.500000 1.000000 1.250000 +v -0.500000 1.000000 1.750000 +v -1.000000 1.000000 1.750000 +v -1.000000 1.000000 1.250000 +v 1.000000 1.000000 1.250000 +v 0.500000 1.000000 1.250000 +v -0.500000 11.000000 1.250000 +v 1.000000 11.000000 1.250000 +v -0.500000 10.750000 1.562500 +v 0.500000 10.250000 1.562500 +v 0.500000 10.000000 1.562500 +v 0.500000 1.750000 1.437500 +v -0.500000 1.250000 1.437500 +v 0.500000 2.000000 1.437500 +v -0.500000 1.750000 1.562500 +v 0.500000 1.250000 1.562500 +v 0.500000 1.000000 1.562500 +v -0.500000 4.750000 1.562500 +v 0.500000 4.250000 1.562500 +v 0.500000 4.000000 1.562500 +v 0.500000 4.750000 1.437500 +v -0.500000 4.250000 1.437500 +v 0.500000 5.000000 1.437500 +v -0.500000 2.500000 1.562500 +v 0.500000 2.000000 1.562500 +v 0.500000 1.750000 1.562500 +v 0.500000 2.500000 1.437500 +v -0.500000 2.000000 1.437500 +v 0.500000 2.750000 1.437500 +v 0.500000 3.250000 1.437500 +v -0.500000 2.750000 1.437500 +v 0.500000 3.500000 1.437500 +v -0.500000 3.250000 1.562500 +v 0.500000 2.750000 1.562500 +v 0.500000 2.500000 1.562500 +v 0.500000 4.000000 1.437500 +v -0.500000 3.500000 1.437500 +v 0.500000 4.250000 1.437500 +v -0.500000 4.000000 1.562500 +v 0.500000 3.500000 1.562500 +v 0.500000 3.250000 1.562500 +v -0.500000 7.000000 1.562500 +v 0.500000 6.500000 1.562500 +v 0.500000 6.250000 1.562500 +v 0.500000 7.000000 1.437500 +v -0.500000 6.500000 1.437500 +v 0.500000 7.250000 1.437500 +v 0.500000 10.750000 1.437500 +v -0.500000 10.250000 1.437500 +v 0.500000 11.000000 1.437500 +v -0.500000 6.250000 1.562500 +v 0.500000 5.750000 1.562500 +v 0.500000 5.500000 1.562500 +v 0.500000 6.250000 1.437500 +v -0.500000 5.750000 1.437500 +v 0.500000 6.500000 1.437500 +v 0.500000 5.500000 1.437500 +v -0.500000 5.000000 1.437500 +v 0.500000 5.750000 1.437500 +v -0.500000 5.500000 1.562500 +v 0.500000 5.000000 1.562500 +v 0.500000 4.750000 1.562500 +v 0.500000 7.750000 1.437500 +v -0.500000 7.250000 1.437500 +v 0.500000 8.000000 1.437500 +v -0.500000 7.750000 1.562500 +v 0.500000 7.250000 1.562500 +v 0.500000 7.000000 1.562500 +v -0.500000 8.500000 1.562500 +v 0.500000 8.000000 1.562500 +v 0.500000 7.750000 1.562500 +v 0.500000 8.500000 1.437500 +v -0.500000 8.000000 1.437500 +v 0.500000 8.750000 1.437500 +v 0.500000 9.250000 1.437500 +v -0.500000 8.750000 1.437500 +v 0.500000 9.500000 1.437500 +v -0.500000 9.250000 1.562500 +v 0.500000 8.750000 1.562500 +v 0.500000 8.500000 1.562500 +v 0.500000 10.000000 1.437500 +v -0.500000 9.500000 1.437500 +v 0.500000 10.250000 1.437500 +v -0.500000 10.000000 1.562500 +v 0.500000 9.500000 1.562500 +v 0.500000 9.250000 1.562500 +v -0.937500 1.000000 3.937500 +v -0.937500 2.812500 1.750000 +v -0.937500 1.000000 3.562500 +v -0.562500 1.000000 3.937500 +v -0.937500 3.187500 1.750000 +v -0.562500 2.812500 1.750000 +v -0.562500 1.000000 3.562500 +v -0.562500 3.187500 1.750000 +v 0.562500 1.000000 3.937500 +v 0.562500 2.812500 1.750000 +v 0.562500 1.000000 3.562500 +v 0.937500 1.000000 3.937500 +v 0.562500 3.187500 1.750000 +v 0.937500 2.812500 1.750000 +v 0.937500 1.000000 3.562500 +v 0.937500 3.187500 1.750000 +v -0.500000 10.750000 1.562500 +v 0.500000 10.250000 1.562500 +v -0.500000 11.000000 1.562500 +v 0.500000 1.750000 1.437500 +v -0.500000 1.250000 1.437500 +v -0.500000 1.000000 1.437500 +v -0.500000 1.750000 1.562500 +v 0.500000 1.250000 1.562500 +v -0.500000 2.000000 1.562500 +v -0.500000 4.750000 1.562500 +v 0.500000 4.250000 1.562500 +v -0.500000 5.000000 1.562500 +v 0.500000 4.750000 1.437500 +v -0.500000 4.250000 1.437500 +v -0.500000 4.000000 1.437500 +v -0.500000 2.500000 1.562500 +v 0.500000 2.000000 1.562500 +v -0.500000 2.750000 1.562500 +v 0.500000 2.500000 1.437500 +v -0.500000 2.000000 1.437500 +v -0.500000 1.750000 1.437500 +v 0.500000 3.250000 1.437500 +v -0.500000 2.750000 1.437500 +v -0.500000 2.500000 1.437500 +v -0.500000 3.250000 1.562500 +v 0.500000 2.750000 1.562500 +v -0.500000 3.500000 1.562500 +v 0.500000 4.000000 1.437500 +v -0.500000 3.500000 1.437500 +v -0.500000 3.250000 1.437500 +v -0.500000 4.000000 1.562500 +v 0.500000 3.500000 1.562500 +v -0.500000 4.250000 1.562500 +v -0.500000 7.000000 1.562500 +v 0.500000 6.500000 1.562500 +v -0.500000 7.250000 1.562500 +v 0.500000 7.000000 1.437500 +v -0.500000 6.500000 1.437500 +v -0.500000 6.250000 1.437500 +v 0.500000 10.750000 1.437500 +v -0.500000 10.250000 1.437500 +v -0.500000 10.000000 1.437500 +v -0.500000 6.250000 1.562500 +v 0.500000 5.750000 1.562500 +v -0.500000 6.500000 1.562500 +v 0.500000 6.250000 1.437500 +v -0.500000 5.750000 1.437500 +v -0.500000 5.500000 1.437500 +v 0.500000 5.500000 1.437500 +v -0.500000 5.000000 1.437500 +v -0.500000 4.750000 1.437500 +v -0.500000 5.500000 1.562500 +v 0.500000 5.000000 1.562500 +v -0.500000 5.750000 1.562500 +v 0.500000 7.750000 1.437500 +v -0.500000 7.250000 1.437500 +v -0.500000 7.000000 1.437500 +v -0.500000 7.750000 1.562500 +v 0.500000 7.250000 1.562500 +v -0.500000 8.000000 1.562500 +v -0.500000 8.500000 1.562500 +v 0.500000 8.000000 1.562500 +v -0.500000 8.750000 1.562500 +v 0.500000 8.500000 1.437500 +v -0.500000 8.000000 1.437500 +v -0.500000 7.750000 1.437500 +v 0.500000 9.250000 1.437500 +v -0.500000 8.750000 1.437500 +v -0.500000 8.500000 1.437500 +v -0.500000 9.250000 1.562500 +v 0.500000 8.750000 1.562500 +v -0.500000 9.500000 1.562500 +v 0.500000 10.000000 1.437500 +v -0.500000 9.500000 1.437500 +v -0.500000 9.250000 1.437500 +v -0.500000 10.000000 1.562500 +v 0.500000 9.500000 1.562500 +v -0.500000 10.250000 1.562500 +v 0.937500 1.750000 -0.562500 +v 0.937500 1.000000 -0.937500 +v 0.937500 1.750000 -0.937500 +v 0.562500 1.750000 -0.937500 +v 0.562500 1.000000 -0.562500 +v 0.562500 1.750000 -0.562500 +v 0.562500 1.000000 -0.937500 +v 0.937500 1.000000 -0.562500 +v -0.562500 1.750000 0.937500 +v -0.562500 1.000000 0.562500 +v -0.562500 1.750000 0.562500 +v -0.937500 1.750000 0.562500 +v -0.937500 1.000000 0.937500 +v -0.937500 1.750000 0.937500 +v -0.937500 1.000000 0.562500 +v -0.562500 1.000000 0.937500 +v -0.562500 1.750000 -0.562500 +v -0.562500 1.000000 -0.937500 +v -0.562500 1.750000 -0.937500 +v -0.937500 1.750000 -0.937500 +v -0.937500 1.000000 -0.562500 +v -0.937500 1.750000 -0.562500 +v -0.937500 1.000000 -0.937500 +v -0.562500 1.000000 -0.562500 +v -0.750000 1.000000 0.562500 +v -0.750000 1.750000 -0.562500 +v -0.750000 1.000000 -0.562500 +v -0.562500 1.000000 -0.750000 +v 0.562500 1.750000 -0.750000 +v 0.562500 1.000000 -0.750000 +v 0.562500 1.000000 0.750000 +v -0.562500 1.750000 0.750000 +v -0.562500 1.000000 0.750000 +v 0.500000 2.000000 0.500000 +v 0.750000 1.750000 -0.562500 +v -0.500000 11.000000 1.562500 +v -0.500000 1.000000 1.437500 +v -0.500000 2.000000 1.562500 +v -0.500000 5.000000 1.562500 +v -0.500000 4.000000 1.437500 +v -0.500000 2.750000 1.562500 +v -0.500000 1.750000 1.437500 +v -0.500000 2.500000 1.437500 +v -0.500000 3.500000 1.562500 +v -0.500000 3.250000 1.437500 +v -0.500000 4.250000 1.562500 +v -0.500000 7.250000 1.562500 +v -0.500000 6.250000 1.437500 +v -0.500000 10.000000 1.437500 +v -0.500000 6.500000 1.562500 +v -0.500000 5.500000 1.437500 +v -0.500000 4.750000 1.437500 +v -0.500000 5.750000 1.562500 +v -0.500000 7.000000 1.437500 +v -0.500000 8.000000 1.562500 +v -0.500000 8.750000 1.562500 +v -0.500000 7.750000 1.437500 +v -0.500000 8.500000 1.437500 +v -0.500000 9.500000 1.562500 +v -0.500000 9.250000 1.437500 +v -0.500000 10.250000 1.562500 +v 0.500000 10.000000 1.562500 +v 0.500000 2.000000 1.437500 +v 0.500000 1.000000 1.562500 +v 0.500000 4.000000 1.562500 +v 0.500000 5.000000 1.437500 +v 0.500000 1.750000 1.562500 +v 0.500000 2.750000 1.437500 +v 0.500000 3.500000 1.437500 +v 0.500000 2.500000 1.562500 +v 0.500000 4.250000 1.437500 +v 0.500000 3.250000 1.562500 +v 0.500000 6.250000 1.562500 +v 0.500000 7.250000 1.437500 +v 0.500000 11.000000 1.437500 +v 0.500000 5.500000 1.562500 +v 0.500000 6.500000 1.437500 +v 0.500000 5.750000 1.437500 +v 0.500000 4.750000 1.562500 +v 0.500000 8.000000 1.437500 +v 0.500000 7.000000 1.562500 +v 0.500000 7.750000 1.562500 +v 0.500000 8.750000 1.437500 +v 0.500000 9.500000 1.437500 +v 0.500000 8.500000 1.562500 +v 0.500000 10.250000 1.437500 +v 0.500000 9.250000 1.562500 +v -0.750000 1.750000 0.562500 +v -0.562500 1.750000 -0.750000 +v 0.562500 1.750000 0.750000 +vt 0.083333 0.250000 +vt 0.000000 0.386364 +vt 0.000000 0.204545 vt 0.000000 0.000000 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.500000 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.500000 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.500000 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.765306 0.315789 -vt 0.775510 0.315789 -vt 0.765306 0.473684 -vt 0.755102 0.315789 -vt 0.785714 0.473684 -vt 0.785714 0.315789 -vt 0.795918 0.473684 -vt 0.785714 0.473684 -vt 0.775510 0.315789 -vt 0.785714 0.315789 -vt 0.775510 0.473684 -vt 0.765306 0.315789 -vt 0.795918 0.473684 -vt 0.755102 0.315789 -vt 0.765306 0.473684 -vt 0.755102 0.473684 -vt 0.765306 0.473684 -vt 0.755102 0.315789 -vt 0.765306 0.315789 -vt 0.795918 0.473684 -vt 0.785714 0.315789 -vt 0.795918 0.315789 -vt 0.775510 0.473684 -vt 0.775510 0.315789 -vt 0.785714 0.473684 -vt 0.795918 0.473684 -vt 0.785714 0.315789 -vt 0.795918 0.315789 -vt 0.785714 0.473684 -vt 0.775510 0.315789 -vt 0.755102 0.315789 -vt 0.765306 0.473684 -vt 0.755102 0.473684 -vt 0.765306 0.315789 -vt 0.775510 0.473684 -vt 0.775510 0.315789 -vt 0.785714 0.473684 -vt 0.775510 0.473684 -vt 0.785714 0.315789 -vt 0.795918 0.473684 -vt 0.765306 0.315789 -vt 0.765306 0.473684 -vt 0.755102 0.315789 -vt 0.765306 0.315789 -vt 0.775510 0.473684 -vt 0.765306 0.473684 -vt 0.775510 0.315789 -vt 0.785714 0.473684 -vt 0.755102 0.315789 -vt 0.795918 0.473684 -vt 0.785714 0.315789 -vt 0.795918 0.315789 -vt 0.785714 0.315789 -vt 0.795918 0.473684 -vt 0.785714 0.473684 -vt 0.755102 0.315789 -vt 0.765306 0.473684 -vt 0.755102 0.473684 -vt 0.775510 0.315789 -vt 0.775510 0.473684 -vt 0.765306 0.315789 -vt 0.755102 0.315789 -vt 0.765306 0.473684 -vt 0.755102 0.473684 -vt 0.765306 0.315789 -vt 0.775510 0.473684 -vt 0.795918 0.473684 -vt 0.785714 0.315789 -vt 0.795918 0.315789 -vt 0.785714 0.473684 -vt 0.775510 0.315789 -vt 0.724490 0.631579 -vt 0.734694 0.315789 -vt 0.734694 0.631579 -vt 0.714286 0.631579 -vt 0.724490 0.315789 -vt 0.744898 0.315789 -vt 0.755102 0.631579 -vt 0.744898 0.631579 -vt 0.714286 0.631579 -vt 0.724490 0.315789 -vt 0.724490 0.631579 -vt 0.744898 0.631579 -vt 0.755102 0.315789 -vt 0.755102 0.631579 -vt 0.734694 0.315789 -vt 0.734694 0.631579 -vt 0.734694 0.631579 -vt 0.744898 0.315789 -vt 0.744898 0.631579 -vt 0.724490 0.631579 -vt 0.734694 0.315789 -vt 0.755102 0.315789 -vt 0.714286 0.315789 -vt 0.714286 0.631579 -vt 0.744898 0.631579 -vt 0.755102 0.315789 -vt 0.755102 0.631579 -vt 0.734694 0.631579 -vt 0.744898 0.315789 -vt 0.724490 0.315789 -vt 0.714286 0.631579 -vt 0.714286 0.315789 -vt 0.724490 0.631579 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.163265 0.671053 -vt 0.224490 0.750000 -vt 0.163265 0.750000 -vt 0.224490 0.657895 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.163265 0.802632 -vt 0.224490 0.802632 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.163265 0.671053 -vt 0.224490 0.750000 -vt 0.163265 0.750000 -vt 0.224490 0.657895 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.163265 0.802632 -vt 0.224490 0.802632 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.214286 0.750000 -vt 0.173469 0.802632 -vt 0.173469 0.750000 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.163265 0.671053 -vt 0.224490 0.750000 -vt 0.163265 0.750000 -vt 0.224490 0.657895 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.657895 -vt 0.163265 0.671053 -vt 0.163265 0.657895 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.224490 0.881579 -vt 0.163265 0.894737 -vt 0.163265 0.881579 -vt 0.163265 0.802632 -vt 0.224490 0.802632 -vt 0.265306 0.657895 -vt 0.326531 0.552632 -vt 0.244898 0.184211 -vt 0.163265 0.315789 -vt 0.244898 0.184211 -vt 0.244898 0.184211 -vt 0.163265 0.315789 -vt 0.163265 0.315789 -vt 0.244898 0.184211 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.224490 0.894737 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.894737 -vt 0.224490 0.894737 -vt 0.224490 0.894737 -vt 0.163265 0.947368 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.473684 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.500000 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.755102 0.473684 -vt 0.755102 0.473684 -vt 0.755102 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.500000 -vt 0.775510 0.473684 -vt 0.775510 0.473684 -vt 0.755102 0.473684 -vt 0.795918 0.315789 -vt 0.795918 0.315789 -vt 0.755102 0.473684 -vt 0.795918 0.315789 -vt 0.755102 0.473684 -vt 0.755102 0.473684 -vt 0.795918 0.315789 -vt 0.714286 0.315789 -vt 0.755102 0.315789 -vt 0.714286 0.315789 -vt 0.744898 0.315789 -vt 0.724490 0.315789 -vt 0.755102 0.631579 -vt 0.734694 0.315789 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.224490 0.894737 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.894737 -vt 0.224490 0.894737 -vt 0.224490 0.894737 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.224490 0.894737 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.894737 -vt 0.224490 0.894737 -vt 0.224490 0.894737 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.214286 0.802632 -vt 0.224490 0.894737 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.671053 -vt 0.224490 0.894737 -vt 0.224490 0.894737 -vt 0.224490 0.894737 -vt 0.683673 0.473684 -vt 0.438776 0.526316 -vt 0.438776 0.473684 -vt 0.683673 0.526316 -vt 0.438776 0.578947 -vt 0.683673 0.578947 -vt 0.438776 0.631579 -vt 0.683673 -0.000000 -vt 0.438776 0.052632 -vt 0.438776 -0.000000 -vt 0.683673 0.052632 -vt 0.438776 0.105263 -vt 0.683673 0.105263 -vt 0.438776 0.157895 -vt 0.683673 0.157895 -vt 0.438776 0.210526 -vt 0.683673 0.210526 -vt 0.438776 0.263158 -vt 0.683673 0.263158 -vt 0.438776 0.315789 -vt 0.683673 0.315789 -vt 0.438776 0.368421 -vt 0.714286 0.256579 -vt 0.683673 0.368421 -vt 0.438776 0.421053 -vt 0.683673 0.421053 -vt 0.408163 0.151316 -vt 0.408163 0.111842 -vt 0.745408 0.011716 -vt 0.805612 0.011716 -vt 0.805612 0.146179 -vt 0.714286 0.164474 -vt 0.714286 0.203947 -vt 0.714286 0.151316 -vt 0.714286 0.098684 -vt 0.714286 0.046053 -vt 0.714286 0.427632 -vt 0.714286 0.467105 -vt 0.714286 0.519737 -vt 0.683673 0.631579 -vt 0.714286 0.585526 -vt 0.714286 0.625000 -vt 0.714286 0.375000 -vt 0.714286 0.414474 -vt 0.714286 0.532895 -vt 0.714286 0.572368 -vt 0.714286 0.322368 -vt 0.714286 0.361842 -vt 0.714286 0.309211 -vt 0.775510 0.159210 -vt 0.827649 0.275658 -vt 0.723372 0.275658 -vt 0.408163 0.059211 -vt 0.408163 0.046053 -vt 0.408163 0.006579 -vt 0.408163 0.467105 -vt 0.408163 0.427632 -vt 0.408163 0.519737 -vt 0.408163 0.480263 -vt 0.408163 0.585526 -vt 0.408163 0.375000 -vt 0.408163 0.532895 -vt 0.408163 0.322368 -vt 0.408163 0.309211 -vt 0.408163 0.269737 -vt 0.408163 0.217105 -vt 0.408163 0.164474 -vt 0.714286 0.217105 -vt 0.827649 0.040131 -vt 0.835715 0.078947 -vt 0.827649 0.117763 -vt 0.775510 0.156579 -vt 0.745408 0.146179 -vt 0.723372 0.117763 -vt 0.715306 0.078947 -vt 0.723372 0.040131 -vt 0.775510 0.001315 -vt 0.714286 0.111842 -vt 0.714286 0.059211 -vt 0.714286 0.006579 -vt 0.714286 0.480263 -vt 0.714286 0.269737 -vt 0.715306 0.236842 -vt 0.723372 0.198026 -vt 0.745408 0.169611 -vt 0.805612 0.169611 -vt 0.827649 0.198026 -vt 0.835715 0.236842 -vt 0.805612 0.304073 -vt 0.775510 0.314474 -vt 0.745408 0.304073 -vt 0.408163 0.098684 -vt 0.408163 0.625000 -vt 0.408163 0.414474 -vt 0.408163 0.572368 -vt 0.408163 0.361842 -vt 0.408163 0.256579 -vt 0.408163 0.203947 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.3620 0.0000 -0.9322 -vn -0.3620 -0.4661 -0.8073 -vn -0.3620 0.0000 -0.9322 -vn 0.3620 -0.4661 -0.8073 -vn -0.3620 -0.8073 -0.4661 -vn 0.3620 -0.8073 -0.4661 -vn -0.3620 -0.9322 0.0000 -vn 0.3620 -0.9322 0.0000 -vn -0.3620 -0.8073 0.4661 -vn 0.3620 -0.8073 0.4661 -vn -0.3620 -0.4661 0.8073 -vn 0.3620 -0.4661 0.8073 -vn -0.3620 0.0000 0.9322 -vn 0.3620 0.0000 0.9322 -vn -0.3620 0.4661 0.8073 -vn 0.3620 0.4661 0.8073 -vn -0.3620 0.8073 0.4661 -vn 0.3620 0.8073 0.4661 -vn -0.3620 0.9322 0.0000 -vn 0.3620 0.9322 0.0000 -vn -0.3620 0.8073 -0.4661 -vn 0.9007 0.3762 0.2172 -vn 0.3620 0.8073 -0.4661 -vn -0.3620 0.4661 -0.8073 -vn 0.3620 0.4661 -0.8073 -vn -0.9007 0.0000 0.4343 -vn -0.9007 -0.2172 0.3762 -vn 0.9007 -0.3762 0.2172 -vn 0.9007 -0.3762 -0.2172 -vn 0.9007 0.3762 -0.2172 -vn 0.9007 0.0000 0.4343 -vn 0.9007 0.2172 0.3762 -vn 0.9007 -0.2172 0.3762 -vn 0.9007 0.2172 -0.3762 -vn 0.9007 0.0000 -0.4343 -vn 0.9007 -0.2172 -0.3762 -vn 0.9007 -0.4343 0.0000 -vn 0.9007 0.4343 0.0000 -vn -0.9007 -0.4343 0.0000 -vn -0.9007 0.2172 0.3762 -vn -0.9007 0.2172 -0.3762 -vn -0.9007 -0.3762 0.2172 -vn -0.9007 0.0000 -0.4343 -vn -0.9007 -0.2172 -0.3762 -vn -0.9007 -0.3762 -0.2172 -vn -0.9007 0.3762 -0.2172 -vn -0.9007 0.4343 0.0000 -vn -0.9007 0.3762 0.2172 -s off -f 3219/4436/313 3220/4437/313 3218/4438/313 -f 3225/4439/314 3218/4438/314 3224/4440/314 -f 3221/4441/315 3222/4442/315 3220/4437/315 -f 3223/4443/316 3219/4436/316 3225/4444/316 -f 3218/4438/317 3222/4445/317 3224/4446/317 -f 3214/4447/313 3227/4448/313 3215/4449/313 -f 3215/4449/313 3229/4450/313 3216/4451/313 -f 3216/4451/313 3228/4452/313 3217/4453/313 -f 3217/4453/313 3226/4454/313 3214/4447/313 -f 3232/4455/313 3230/4456/313 3231/4457/313 -f 3240/4458/318 3237/4459/318 3235/4460/318 -f 3241/4461/318 3235/4460/318 3234/4462/318 -f 3238/4463/318 3234/4462/318 3236/4464/318 -f 3239/4465/318 3236/4464/318 3237/4459/318 -f 3216/4466/317 3235/4467/317 3215/4468/317 -f 3227/4448/316 3241/4461/316 3229/4450/316 -f 3228/4469/317 3239/4470/317 3226/4471/317 -f 3215/4472/315 3237/4473/315 3214/4474/315 -f 3214/4475/316 3236/4476/316 3217/4477/316 -f 3229/4478/315 3238/4479/315 3228/4480/315 -f 3226/4481/314 3240/4482/314 3227/4483/314 -f 3217/4484/314 3234/4485/314 3216/4486/314 -f 3244/4487/315 3249/4488/315 3245/4489/315 -f 3243/4490/314 3246/4491/314 3242/4492/314 -f 3245/4493/316 3247/4494/316 3243/4495/316 -f 3242/4496/317 3248/4497/317 3244/4498/317 -f 3261/4499/316 3263/4500/316 3259/4501/316 -f 3255/4502/313 3256/4503/313 3254/4504/313 -f 3253/4505/316 3255/4502/316 3251/4506/316 -f 3250/4507/317 3256/4508/317 3252/4509/317 -f 3252/4510/315 3257/4511/315 3253/4512/315 -f 3251/4513/314 3254/4514/314 3250/4515/314 -f 3258/4516/317 3264/4517/317 3260/4518/317 -f 3260/4519/315 3265/4520/315 3261/4521/315 -f 3259/4522/314 3262/4523/314 3258/4524/314 -f 3261/4499/318 3258/4525/318 3260/4526/318 -f 3272/4527/313 3270/4528/313 3271/4529/313 -f 3269/4530/316 3272/4527/316 3267/4531/316 -f 3266/4532/317 3270/4533/317 3268/4534/317 -f 3268/4534/315 3273/4535/315 3269/4530/315 -f 3267/4531/314 3271/4536/314 3266/4537/314 -f 3276/4538/318 3274/4539/318 3277/4540/318 -f 3303/4541/318 3305/4542/318 3302/4543/318 -f 3306/4544/313 3308/4545/313 3309/4546/313 -f 3309/4547/314 3303/4548/314 3302/4549/314 -f 3308/4545/317 3304/4550/317 3303/4551/317 -f 3307/4552/315 3305/4542/315 3304/4553/315 -f 3306/4554/316 3302/4555/316 3305/4542/316 -f 3313/4556/316 3317/4557/316 3314/4558/316 -f 3312/4559/315 3314/4560/315 3315/4561/315 -f 3311/4562/317 3315/4563/317 3316/4564/317 -f 3310/4565/314 3316/4566/314 3317/4557/314 -f 3313/4567/313 3311/4568/313 3310/4569/313 -f 3316/4570/318 3314/4571/318 3317/4557/318 -f 3319/4572/318 3321/4573/318 3318/4574/318 -f 3322/4575/313 3324/4576/313 3325/4577/313 -f 3325/4577/314 3319/4578/314 3318/4579/314 -f 3324/4580/317 3320/4581/317 3319/4582/317 -f 3323/4583/315 3321/4584/315 3320/4581/315 -f 3322/4585/316 3318/4586/316 3321/4587/316 -f 3329/4588/316 3333/4589/316 3330/4590/316 -f 3328/4591/315 3330/4592/315 3331/4593/315 -f 3327/4594/317 3331/4595/317 3332/4596/317 -f 3326/4597/314 3332/4596/314 3333/4598/314 -f 3329/4588/313 3327/4599/313 3326/4600/313 -f 3332/4596/318 3330/4601/318 3333/4602/318 -f 3334/4603/313 3336/4604/313 3337/4605/313 -f 3337/4606/314 3276/4538/314 3277/4607/314 -f 3336/4608/317 3275/4609/317 3276/4538/317 -f 3335/4610/315 3274/4611/315 3275/4612/315 -f 3334/4603/316 3277/4613/316 3274/4614/316 -f 3341/4615/316 3345/4616/316 3342/4617/316 -f 3340/4618/315 3342/4619/315 3343/4620/315 -f 3339/4621/317 3343/4620/317 3344/4622/317 -f 3338/4623/314 3344/4624/314 3345/4625/314 -f 3341/4626/313 3339/4627/313 3338/4623/313 -f 3344/4628/318 3342/4629/318 3345/4630/318 -f 3347/4631/318 3349/4632/318 3346/4633/318 -f 3350/4634/313 3352/4635/313 3353/4636/313 -f 3353/4637/314 3347/4638/314 3346/4633/314 -f 3352/4639/317 3348/4640/317 3347/4641/317 -f 3351/4642/315 3349/4643/315 3348/4644/315 -f 3350/4645/316 3346/4633/316 3349/4646/316 -f 3357/4647/316 3361/4648/316 3358/4649/316 -f 3356/4650/315 3358/4649/315 3359/4651/315 -f 3355/4652/317 3359/4653/317 3360/4654/317 -f 3354/4655/314 3360/4656/314 3361/4657/314 -f 3357/4658/313 3355/4652/313 3354/4659/313 -f 3360/4660/318 3358/4649/318 3361/4661/318 -f 3363/4662/318 3364/4663/318 3362/4664/318 -f 3365/4665/317 3368/4666/317 3364/4663/317 -f 3362/4664/316 3367/4667/316 3363/4662/316 -f 3366/4668/313 3369/4669/313 3367/4667/313 -f 3371/4670/318 3372/4671/318 3370/4672/318 -f 3373/4673/317 3376/4674/317 3372/4671/317 -f 3370/4672/316 3375/4675/316 3371/4670/316 -f 3374/4676/313 3377/4677/313 3375/4678/313 -f 3379/4679/318 3380/4680/318 3378/4681/318 -f 3381/4682/317 3384/4683/317 3380/4684/317 -f 3378/4681/316 3383/4685/316 3379/4679/316 -f 3382/4686/313 3385/4687/313 3383/4685/313 -f 3387/4688/318 3388/4689/318 3386/4690/318 -f 3389/4691/317 3392/4692/317 3388/4689/317 -f 3386/4693/316 3391/4694/316 3387/4695/316 -f 3390/4696/313 3393/4697/313 3391/4694/313 -f 3395/4698/315 3396/4699/315 3394/4700/315 -f 3397/4701/317 3400/4702/317 3396/4699/317 -f 3394/4700/316 3399/4703/316 3395/4698/316 -f 3398/4704/314 3401/4705/314 3399/4703/314 -f 3403/4706/315 3404/4707/315 3402/4708/315 -f 3405/4709/317 3408/4710/317 3404/4707/317 -f 3402/4708/316 3407/4711/316 3403/4706/316 -f 3406/4712/314 3409/4713/314 3407/4714/314 -f 3411/4715/315 3412/4716/315 3410/4717/315 -f 3413/4718/317 3416/4719/317 3412/4720/317 -f 3410/4717/316 3415/4721/316 3411/4715/316 -f 3414/4722/314 3417/4723/314 3415/4721/314 -f 3419/4724/315 3420/4725/315 3418/4726/315 -f 3421/4727/317 3424/4728/317 3420/4725/317 -f 3418/4729/316 3423/4730/316 3419/4731/316 -f 3422/4732/314 3425/4733/314 3423/4730/314 -f 3429/4734/318 3426/4735/318 3427/4736/318 -f 3433/4737/315 3428/4738/315 3429/4734/315 -f 3430/4739/314 3427/4736/314 3426/4735/314 -f 3430/4739/313 3433/4740/313 3431/4741/313 -f 3437/4742/318 3434/4743/318 3435/4744/318 -f 3441/4745/315 3436/4746/315 3437/4747/315 -f 3438/4748/314 3435/4744/314 3434/4743/314 -f 3438/4748/313 3441/4745/313 3439/4749/313 -f 3445/4750/318 3442/4751/318 3443/4752/318 -f 3449/4753/315 3444/4754/315 3445/4750/315 -f 3446/4755/314 3443/4752/314 3442/4751/314 -f 3446/4756/313 3449/4753/313 3447/4757/313 -f 3453/4758/318 3450/4759/318 3451/4760/318 -f 3457/4761/315 3452/4762/315 3453/4758/315 -f 3454/4763/314 3451/4764/314 3450/4765/314 -f 3454/4763/313 3457/4761/313 3455/4766/313 -f 3484/4767/315 3489/4768/315 3485/4769/315 -f 3483/4770/314 3486/4771/314 3482/4772/314 -f 3485/4773/316 3487/4774/316 3483/4775/316 -f 3482/4776/317 3488/4777/317 3484/4778/317 -f 3501/4779/316 3503/4780/316 3499/4781/316 -f 3495/4782/313 3496/4783/313 3494/4784/313 -f 3493/4785/316 3495/4782/316 3491/4786/316 -f 3490/4787/317 3496/4788/317 3492/4789/317 -f 3492/4790/315 3497/4791/315 3493/4792/315 -f 3491/4793/314 3494/4794/314 3490/4795/314 -f 3498/4796/317 3504/4797/317 3500/4798/317 -f 3500/4799/315 3505/4800/315 3501/4801/315 -f 3499/4802/314 3502/4803/314 3498/4804/314 -f 3501/4779/318 3498/4805/318 3500/4806/318 -f 3508/4807/315 3513/4808/315 3509/4809/315 -f 3507/4810/314 3510/4811/314 3506/4812/314 -f 3509/4813/316 3511/4814/316 3507/4815/316 -f 3506/4816/317 3512/4817/317 3508/4818/317 -f 3525/4819/316 3527/4820/316 3523/4821/316 -f 3519/4822/313 3520/4823/313 3518/4824/313 -f 3517/4825/316 3519/4822/316 3515/4826/316 -f 3514/4827/317 3520/4828/317 3516/4829/317 -f 3516/4830/315 3521/4831/315 3517/4832/315 -f 3515/4833/314 3518/4834/314 3514/4835/314 -f 3522/4836/317 3528/4837/317 3524/4838/317 -f 3524/4839/315 3529/4840/315 3525/4841/315 -f 3523/4842/314 3526/4843/314 3522/4844/314 -f 3525/4819/318 3522/4845/318 3524/4846/318 -f 3532/4847/315 3537/4848/315 3533/4849/315 -f 3531/4850/314 3534/4851/314 3530/4852/314 -f 3533/4853/316 3535/4854/316 3531/4855/316 -f 3530/4856/317 3536/4857/317 3532/4858/317 -f 3549/4859/316 3551/4860/316 3547/4861/316 -f 3543/4862/313 3544/4863/313 3542/4864/313 -f 3541/4865/316 3543/4862/316 3539/4866/316 -f 3538/4867/317 3544/4868/317 3540/4869/317 -f 3540/4870/315 3545/4871/315 3541/4872/315 -f 3539/4873/314 3542/4874/314 3538/4875/314 -f 3546/4876/317 3552/4877/317 3548/4878/317 -f 3548/4879/315 3553/4880/315 3549/4881/315 -f 3547/4882/314 3550/4883/314 3546/4884/314 -f 3549/4859/318 3546/4885/318 3548/4886/318 -f 3219/4436/313 3221/4441/313 3220/4437/313 -f 3225/4439/314 3219/4436/314 3218/4438/314 -f 3221/4441/315 3223/4887/315 3222/4442/315 -f 3223/4443/316 3221/4441/316 3219/4436/316 -f 3218/4438/317 3220/4437/317 3222/4445/317 -f 3214/4447/313 3226/4454/313 3227/4448/313 -f 3215/4449/313 3227/4448/313 3229/4450/313 -f 3216/4451/313 3229/4450/313 3228/4452/313 -f 3217/4453/313 3228/4452/313 3226/4454/313 -f 3232/4455/313 3233/4888/313 3230/4456/313 -f 3240/4458/318 3239/4465/318 3237/4459/318 -f 3241/4461/318 3240/4458/318 3235/4460/318 -f 3238/4463/318 3241/4461/318 3234/4462/318 -f 3239/4465/318 3238/4463/318 3236/4464/318 -f 3216/4466/317 3234/4889/317 3235/4467/317 -f 3227/4448/316 3240/4458/316 3241/4461/316 -f 3228/4469/317 3238/4890/317 3239/4470/317 -f 3215/4472/315 3235/4891/315 3237/4473/315 -f 3214/4475/316 3237/4892/316 3236/4476/316 -f 3229/4478/315 3241/4893/315 3238/4479/315 -f 3226/4481/314 3239/4894/314 3240/4482/314 -f 3217/4484/314 3236/4895/314 3234/4485/314 -f 3244/4487/315 3248/4896/315 3249/4488/315 -f 3243/4490/314 3247/4897/314 3246/4491/314 -f 3245/4493/316 3249/4898/316 3247/4494/316 -f 3242/4496/317 3246/4899/317 3248/4497/317 -f 3261/4499/316 3265/4900/316 3263/4500/316 -f 3255/4502/313 3257/4901/313 3256/4503/313 -f 3253/4505/316 3257/4901/316 3255/4502/316 -f 3250/4507/317 3254/4902/317 3256/4508/317 -f 3252/4510/315 3256/4903/315 3257/4511/315 -f 3251/4513/314 3255/4904/314 3254/4514/314 -f 3258/4516/317 3262/4905/317 3264/4517/317 -f 3260/4519/315 3264/4906/315 3265/4520/315 -f 3259/4522/314 3263/4907/314 3262/4523/314 -f 3261/4499/318 3259/4501/318 3258/4525/318 -f 3272/4527/313 3273/4535/313 3270/4528/313 -f 3269/4530/316 3273/4535/316 3272/4527/316 -f 3266/4532/317 3271/4908/317 3270/4533/317 -f 3268/4534/315 3270/4533/315 3273/4535/315 -f 3267/4531/314 3272/4527/314 3271/4536/314 -f 3276/4538/318 3275/4909/318 3274/4539/318 -f 3303/4541/318 3304/4910/318 3305/4542/318 -f 3306/4544/313 3307/4911/313 3308/4545/313 -f 3309/4547/314 3308/4545/314 3303/4548/314 -f 3308/4545/317 3307/4912/317 3304/4550/317 -f 3307/4552/315 3306/4913/315 3305/4542/315 -f 3306/4554/316 3309/4914/316 3302/4555/316 -f 3313/4556/316 3310/4915/316 3317/4557/316 -f 3312/4559/315 3313/4916/315 3314/4560/315 -f 3311/4562/317 3312/4559/317 3315/4563/317 -f 3310/4565/314 3311/4917/314 3316/4566/314 -f 3313/4567/313 3312/4559/313 3311/4568/313 -f 3316/4570/318 3315/4918/318 3314/4571/318 -f 3319/4572/318 3320/4581/318 3321/4573/318 -f 3322/4575/313 3323/4919/313 3324/4576/313 -f 3325/4577/314 3324/4920/314 3319/4578/314 -f 3324/4580/317 3323/4921/317 3320/4581/317 -f 3323/4583/315 3322/4922/315 3321/4584/315 -f 3322/4585/316 3325/4577/316 3318/4586/316 -f 3329/4588/316 3326/4923/316 3333/4589/316 -f 3328/4591/315 3329/4588/315 3330/4592/315 -f 3327/4594/317 3328/4924/317 3331/4595/317 -f 3326/4597/314 3327/4925/314 3332/4596/314 -f 3329/4588/313 3328/4926/313 3327/4599/313 -f 3332/4596/318 3331/4927/318 3330/4601/318 -f 3334/4603/313 3335/4928/313 3336/4604/313 -f 3337/4606/314 3336/4929/314 3276/4538/314 -f 3336/4608/317 3335/4930/317 3275/4609/317 -f 3335/4610/315 3334/4603/315 3274/4611/315 -f 3334/4603/316 3337/4931/316 3277/4613/316 -f 3341/4615/316 3338/4623/316 3345/4616/316 -f 3340/4618/315 3341/4932/315 3342/4619/315 -f 3339/4621/317 3340/4933/317 3343/4620/317 -f 3338/4623/314 3339/4934/314 3344/4624/314 -f 3341/4626/313 3340/4935/313 3339/4627/313 -f 3344/4628/318 3343/4620/318 3342/4629/318 -f 3347/4631/318 3348/4936/318 3349/4632/318 -f 3350/4634/313 3351/4642/313 3352/4635/313 -f 3353/4637/314 3352/4937/314 3347/4638/314 -f 3352/4639/317 3351/4642/317 3348/4640/317 -f 3351/4642/315 3350/4938/315 3349/4643/315 -f 3350/4645/316 3353/4939/316 3346/4633/316 -f 3357/4647/316 3354/4940/316 3361/4648/316 -f 3356/4650/315 3357/4941/315 3358/4649/315 -f 3355/4652/317 3356/4942/317 3359/4653/317 -f 3354/4655/314 3355/4652/314 3360/4656/314 -f 3357/4658/313 3356/4943/313 3355/4652/313 -f 3360/4660/318 3359/4944/318 3358/4649/318 -f 3363/4662/318 3365/4665/318 3364/4663/318 -f 3365/4665/317 3369/4945/317 3368/4666/317 -f 3362/4664/316 3366/4668/316 3367/4667/316 -f 3366/4668/313 3368/4946/313 3369/4669/313 -f 3371/4670/318 3373/4673/318 3372/4671/318 -f 3373/4673/317 3377/4677/317 3376/4674/317 -f 3370/4672/316 3374/4947/316 3375/4675/316 -f 3374/4676/313 3376/4674/313 3377/4677/313 -f 3379/4679/318 3381/4948/318 3380/4680/318 -f 3381/4682/317 3385/4687/317 3384/4683/317 -f 3378/4681/316 3382/4686/316 3383/4685/316 -f 3382/4686/313 3384/4683/313 3385/4687/313 -f 3387/4688/318 3389/4691/318 3388/4689/318 -f 3389/4691/317 3393/4697/317 3392/4692/317 -f 3386/4693/316 3390/4696/316 3391/4694/316 -f 3390/4696/313 3392/4692/313 3393/4697/313 -f 3395/4698/315 3397/4701/315 3396/4699/315 -f 3397/4701/317 3401/4949/317 3400/4702/317 -f 3394/4700/316 3398/4704/316 3399/4703/316 -f 3398/4704/314 3400/4950/314 3401/4705/314 -f 3403/4706/315 3405/4709/315 3404/4707/315 -f 3405/4709/317 3409/4713/317 3408/4710/317 -f 3402/4708/316 3406/4951/316 3407/4711/316 -f 3406/4712/314 3408/4710/314 3409/4713/314 -f 3411/4715/315 3413/4952/315 3412/4716/315 -f 3413/4718/317 3417/4723/317 3416/4719/317 -f 3410/4717/316 3414/4722/316 3415/4721/316 -f 3414/4722/314 3416/4719/314 3417/4723/314 -f 3419/4724/315 3421/4727/315 3420/4725/315 -f 3421/4727/317 3425/4733/317 3424/4728/317 -f 3418/4729/316 3422/4732/316 3423/4730/316 -f 3422/4732/314 3424/4728/314 3425/4733/314 -f 3429/4734/318 3428/4738/318 3426/4735/318 -f 3433/4737/315 3432/4953/315 3428/4738/315 -f 3430/4739/314 3431/4741/314 3427/4736/314 -f 3430/4739/313 3432/4954/313 3433/4740/313 -f 3437/4742/318 3436/4955/318 3434/4743/318 -f 3441/4745/315 3440/4956/315 3436/4746/315 -f 3438/4748/314 3439/4749/314 3435/4744/314 -f 3438/4748/313 3440/4956/313 3441/4745/313 -f 3445/4750/318 3444/4754/318 3442/4751/318 -f 3449/4753/315 3448/4957/315 3444/4754/315 -f 3446/4755/314 3447/4958/314 3443/4752/314 -f 3446/4756/313 3448/4957/313 3449/4753/313 -f 3453/4758/318 3452/4762/318 3450/4759/318 -f 3457/4761/315 3456/4959/315 3452/4762/315 -f 3454/4763/314 3455/4766/314 3451/4764/314 -f 3454/4763/313 3456/4959/313 3457/4761/313 -f 3484/4767/315 3488/4960/315 3489/4768/315 -f 3483/4770/314 3487/4961/314 3486/4771/314 -f 3485/4773/316 3489/4962/316 3487/4774/316 -f 3482/4776/317 3486/4963/317 3488/4777/317 -f 3501/4779/316 3505/4964/316 3503/4780/316 -f 3495/4782/313 3497/4965/313 3496/4783/313 -f 3493/4785/316 3497/4965/316 3495/4782/316 -f 3490/4787/317 3494/4966/317 3496/4788/317 -f 3492/4790/315 3496/4967/315 3497/4791/315 -f 3491/4793/314 3495/4968/314 3494/4794/314 -f 3498/4796/317 3502/4969/317 3504/4797/317 -f 3500/4799/315 3504/4970/315 3505/4800/315 -f 3499/4802/314 3503/4971/314 3502/4803/314 -f 3501/4779/318 3499/4781/318 3498/4805/318 -f 3508/4807/315 3512/4972/315 3513/4808/315 -f 3507/4810/314 3511/4973/314 3510/4811/314 -f 3509/4813/316 3513/4974/316 3511/4814/316 -f 3506/4816/317 3510/4975/317 3512/4817/317 -f 3525/4819/316 3529/4976/316 3527/4820/316 -f 3519/4822/313 3521/4977/313 3520/4823/313 -f 3517/4825/316 3521/4977/316 3519/4822/316 -f 3514/4827/317 3518/4978/317 3520/4828/317 -f 3516/4830/315 3520/4979/315 3521/4831/315 -f 3515/4833/314 3519/4980/314 3518/4834/314 -f 3522/4836/317 3526/4981/317 3528/4837/317 -f 3524/4839/315 3528/4982/315 3529/4840/315 -f 3523/4842/314 3527/4983/314 3526/4843/314 -f 3525/4819/318 3523/4821/318 3522/4845/318 -f 3532/4847/315 3536/4984/315 3537/4848/315 -f 3531/4850/314 3535/4985/314 3534/4851/314 -f 3533/4853/316 3537/4986/316 3535/4854/316 -f 3530/4856/317 3534/4987/317 3536/4857/317 -f 3549/4859/316 3553/4988/316 3551/4860/316 -f 3543/4862/313 3545/4989/313 3544/4863/313 -f 3541/4865/316 3545/4989/316 3543/4862/316 -f 3538/4867/317 3542/4990/317 3544/4868/317 -f 3540/4870/315 3544/4991/315 3545/4871/315 -f 3539/4873/314 3543/4992/314 3542/4874/314 -f 3546/4876/317 3550/4993/317 3552/4877/317 -f 3548/4879/315 3552/4994/315 3553/4880/315 -f 3547/4882/314 3551/4995/314 3550/4883/314 -f 3549/4859/318 3547/4861/318 3546/4885/318 -s 1 -f 3279/4996/319 3280/4997/320 3278/4998/321 -f 3281/4999/322 3282/5000/323 3280/4997/320 -f 3283/5001/324 3284/5002/325 3282/5000/323 -f 3285/5003/326 3286/5004/327 3284/5005/325 -f 3287/5006/328 3288/5007/329 3286/5004/327 -f 3289/5008/330 3290/5009/331 3288/5007/329 -f 3291/5010/332 3292/5011/333 3290/5009/331 -f 3293/5012/334 3294/5013/335 3292/5011/333 -f 3295/5014/336 3296/5015/337 3294/5013/335 -f 3297/5016/338 3298/5017/339 3296/5015/337 -f 3293/5012/334 3466/5018/340 3295/5014/336 -f 3299/5019/341 3300/5020/342 3298/5017/339 -f 3301/5021/343 3278/4998/321 3300/5020/342 -f 3288/5007/329 3476/5022/344 3475/5023/345 -f 3462/5024/346 3460/5025/347 3468/5026/348 -f 3293/5012/334 3464/5027/349 3465/5028/350 -f 3289/5008/330 3464/5029/349 3291/5010/332 -f 3287/5006/328 3463/5030/351 3289/5008/330 -f 3285/5003/326 3462/5031/346 3287/5006/328 -f 3279/4996/319 3469/5032/352 3459/5033/353 -f 3279/4996/319 3458/5034/354 3281/4999/322 -f 3285/5035/326 3460/5036/347 3461/5037/355 -f 3301/5021/343 3468/5038/348 3469/5039/352 -f 3283/5001/324 3458/5040/354 3460/5041/347 -f 3299/5019/341 3467/5042/356 3468/5043/348 -f 3295/5014/336 3467/5044/356 3297/5016/338 -f 3473/5045/357 3477/5046/358 3481/5047/359 -f 3288/5007/329 3474/5048/360 3286/5004/327 -f 3284/5005/325 3474/5049/360 3473/5050/357 -f 3300/5020/342 3470/5051/361 3481/5052/359 -f 3278/4998/321 3471/5053/362 3470/5054/361 -f 3284/5002/325 3472/5055/363 3282/5000/323 -f 3300/5020/342 3480/5056/364 3298/5017/339 -f 3282/5000/323 3471/5057/362 3280/4997/320 -f 3298/5017/339 3479/5058/365 3296/5015/337 -f 3294/5013/335 3479/5059/365 3478/5060/366 -f 3294/5013/335 3477/5061/358 3292/5011/333 -f 3292/5011/333 3476/5062/344 3290/5009/331 -f 3279/4996/319 3281/4999/322 3280/4997/320 -f 3281/4999/322 3283/5001/324 3282/5000/323 -f 3283/5001/324 3285/5035/326 3284/5002/325 -f 3285/5003/326 3287/5006/328 3286/5004/327 -f 3287/5006/328 3289/5008/330 3288/5007/329 -f 3289/5008/330 3291/5010/332 3290/5009/331 -f 3291/5010/332 3293/5012/334 3292/5011/333 -f 3293/5012/334 3295/5014/336 3294/5013/335 -f 3295/5014/336 3297/5016/338 3296/5015/337 -f 3297/5016/338 3299/5019/341 3298/5017/339 -f 3293/5012/334 3465/5063/350 3466/5018/340 -f 3299/5019/341 3301/5021/343 3300/5020/342 -f 3301/5021/343 3279/4996/319 3278/4998/321 -f 3288/5007/329 3290/5009/331 3476/5022/344 -f 3460/5025/347 3458/5064/354 3459/5065/353 -f 3459/5065/353 3469/5066/352 3460/5025/347 -f 3469/5066/352 3468/5026/348 3460/5025/347 -f 3468/5026/348 3467/5067/356 3466/5068/340 -f 3466/5068/340 3465/5069/350 3468/5026/348 -f 3465/5069/350 3464/5070/349 3468/5026/348 -f 3464/5070/349 3463/5071/351 3462/5024/346 -f 3462/5024/346 3461/5072/355 3460/5025/347 -f 3464/5070/349 3462/5024/346 3468/5026/348 -f 3293/5012/334 3291/5010/332 3464/5027/349 -f 3289/5008/330 3463/5073/351 3464/5029/349 -f 3287/5006/328 3462/5074/346 3463/5030/351 -f 3285/5003/326 3461/5075/355 3462/5031/346 -f 3279/4996/319 3301/5021/343 3469/5032/352 -f 3279/4996/319 3459/5076/353 3458/5034/354 -f 3285/5035/326 3283/5001/324 3460/5036/347 -f 3301/5021/343 3299/5019/341 3468/5038/348 -f 3283/5001/324 3281/4999/322 3458/5040/354 -f 3299/5019/341 3297/5016/338 3467/5042/356 -f 3295/5014/336 3466/5077/340 3467/5044/356 -f 3481/5047/359 3470/5078/361 3471/5079/362 -f 3471/5079/362 3472/5080/363 3481/5047/359 -f 3472/5080/363 3473/5045/357 3481/5047/359 -f 3473/5045/357 3474/5081/360 3475/5082/345 -f 3475/5082/345 3476/5083/344 3477/5046/358 -f 3477/5046/358 3478/5084/366 3479/5085/365 -f 3479/5085/365 3480/5086/364 3477/5046/358 -f 3480/5086/364 3481/5047/359 3477/5046/358 -f 3473/5045/357 3475/5082/345 3477/5046/358 -f 3288/5007/329 3475/5087/345 3474/5048/360 -f 3284/5005/325 3286/5004/327 3474/5049/360 -f 3300/5020/342 3278/4998/321 3470/5051/361 -f 3278/4998/321 3280/4997/320 3471/5053/362 -f 3284/5002/325 3473/5088/357 3472/5055/363 -f 3300/5020/342 3481/5089/359 3480/5056/364 -f 3282/5000/323 3472/5090/363 3471/5057/362 -f 3298/5017/339 3480/5091/364 3479/5058/365 -f 3294/5013/335 3296/5015/337 3479/5059/365 -f 3294/5013/335 3478/5092/366 3477/5061/358 -f 3292/5011/333 3477/5093/358 3476/5062/344 -o V2_Rope -v 0.000000 9.000000 1.750000 -v 0.000000 8.875000 1.750000 -v 0.000000 9.000000 0.000000 -v 0.000000 8.875000 0.000000 -v 0.000000 8.875000 1.375000 -v 0.000000 8.750000 1.375000 -v 0.000000 8.875000 0.375000 -v 0.000000 8.750000 0.375000 -v 0.312500 2.062500 1.937500 -v 0.268306 2.062500 1.955806 -v 0.250000 2.062500 2.000000 -v 0.268306 2.062500 2.044194 -v 0.312500 2.062500 2.062500 -v 0.356694 2.062500 2.044194 -v 0.375000 2.062500 2.000000 -v 0.356694 2.062500 1.955806 -v 0.330806 2.018306 1.937500 -v 0.299556 1.987056 1.955806 -v 0.286612 1.974112 2.000000 -v 0.299556 1.987056 2.044194 -v 0.330806 2.018306 2.062500 -v 0.362056 2.049556 2.044194 -v 0.362056 2.049556 1.955806 -v 0.375000 2.000000 1.937500 -v 0.375000 1.955806 1.955806 -v 0.375000 1.937500 2.000000 -v 0.375000 1.955806 2.044194 -v 0.375000 2.000000 2.062500 -v 0.375000 2.044194 2.044194 -v 0.375000 2.044194 1.955806 -v 0.500000 2.062500 2.000000 -v 0.500000 2.000000 1.937500 -v 0.500000 1.955806 1.955806 -v 0.500000 1.937500 2.000000 -v 0.500000 1.955806 2.044194 -v 0.500000 2.000000 2.062500 -v 0.500000 2.044194 2.044194 -v 0.500000 2.044194 1.955806 -v 0.312500 5.312500 1.937500 -v 0.268306 5.312500 1.955806 -v 0.250000 5.312500 2.000000 -v 0.268306 5.312500 2.044194 -v 0.312500 5.312500 2.062500 -v 0.356694 5.312500 2.044194 -v 0.375000 5.312500 2.000000 -v 0.356694 5.312500 1.955806 -v 0.312500 4.625000 2.000000 -v 0.268306 4.606694 2.000000 -v 0.250000 4.562500 2.000000 -v 0.268306 4.518306 2.000000 -v 0.312500 4.500000 2.000000 -v 0.356694 4.518306 2.000000 -v 0.375000 4.562500 2.000000 -v 0.356694 4.606694 2.000000 -v 0.312500 4.625000 0.250000 -v 0.268306 4.606694 0.250000 -v 0.250000 4.562500 0.250000 -v 0.268306 4.518306 0.250000 -v 0.312500 4.500000 0.250000 -v 0.356694 4.518306 0.250000 -v 0.375000 4.562500 0.250000 -v 0.356694 4.606694 0.250000 -v 0.268306 5.325444 1.950444 -v 0.250000 5.356694 1.981694 -v 0.268306 5.387944 2.012944 -v 0.312500 5.400888 2.025888 -v 0.356694 5.387944 2.012944 -v 0.375000 5.356694 1.981694 -v 0.356694 5.325444 1.950444 -v 0.268306 5.330806 1.937500 -v 0.250000 5.375000 1.937500 -v 0.268306 5.419194 1.937500 -v 0.312500 5.437500 1.937500 -v 0.356694 5.419194 1.937500 -v 0.375000 5.375000 1.937500 -v 0.356694 5.330806 1.937500 -v 0.312500 5.312500 0.187500 -v 0.268306 5.330806 0.187500 -v 0.250000 5.375000 0.187500 -v 0.268306 5.419194 0.187500 -v 0.312500 5.437500 0.187500 -v 0.356694 5.419194 0.187500 -v 0.375000 5.375000 0.187500 -v 0.356694 5.330806 0.187500 -v 0.000000 9.000000 1.750000 -v 0.000000 8.875000 1.750000 -v 0.000000 9.000000 0.000000 -v 0.000000 8.875000 0.000000 -v 0.000000 8.875000 1.375000 -v 0.000000 8.750000 1.375000 -v 0.000000 8.875000 0.375000 -v 0.000000 8.750000 0.375000 -vt 0.408163 0.631579 -vt 0.438776 0.644737 -vt 0.408163 0.644737 -vt 0.520408 0.644737 -vt 0.551020 0.631579 -vt 0.551020 0.644737 -vt 0.438776 0.631579 -vt 0.408163 0.631579 -vt 0.438776 0.644737 -vt 0.438776 0.631579 -vt 0.551020 0.631579 -vt 0.520408 0.644737 -vt 0.551020 0.644737 -vt 0.520408 0.631579 -vt 0.408163 0.644737 -vt 0.520408 0.631579 -vt 0.816327 0.342105 -vt 0.821429 0.335526 -vt 0.821429 0.342105 -vt 0.806122 0.342105 -vt 0.811224 0.335526 -vt 0.811224 0.342105 -vt 0.795918 0.342105 -vt 0.801020 0.335526 -vt 0.801020 0.342105 -vt 0.836735 0.342105 -vt 0.831633 0.335526 -vt 0.836735 0.335526 -vt 0.816327 0.335526 -vt 0.806122 0.335526 -vt 0.836735 0.328947 -vt 0.816327 0.328947 -vt 0.801020 0.328947 -vt 0.806122 0.328947 -vt 0.821429 0.328947 -vt 0.811224 0.328947 -vt 0.795918 0.328947 -vt 0.826531 0.335526 -vt 0.831633 0.342105 -vt 0.831633 0.328947 -vt 0.826531 0.315789 -vt 0.831633 0.315789 -vt 0.836735 0.315789 -vt 0.826531 0.328947 -vt 0.816327 0.315789 -vt 0.801020 0.315789 -vt 0.806122 0.315789 -vt 0.821429 0.315789 -vt 0.811224 0.315789 -vt 0.826531 0.684211 -vt 0.826531 0.342105 -vt 0.816327 0.684211 -vt 0.806122 0.684211 -vt 0.795918 0.684211 -vt 0.831633 0.684211 -vt 0.821429 0.684211 -vt 0.811224 0.684211 -vt 0.801020 0.684211 -vt 0.806122 0.828947 -vt 0.801020 0.697368 -vt 0.806122 0.697368 -vt 0.816327 0.828947 -vt 0.811224 0.697368 -vt 0.816327 0.697368 -vt 0.821429 0.828947 -vt 0.821429 0.697368 -vt 0.831633 0.828947 -vt 0.826531 0.697368 -vt 0.831633 0.697368 -vt 0.801020 0.828947 -vt 0.795918 0.697368 -vt 0.811224 0.828947 -vt 0.826531 0.828947 -vt 0.836735 0.828947 -vt 0.836735 0.697368 -vt 0.821429 0.690789 -vt 0.811224 0.690789 -vt 0.801020 0.690789 -vt 0.831633 0.690789 -vt 0.826531 0.690789 -vt 0.816327 0.690789 -vt 0.806122 0.690789 -vt 0.806122 0.697368 -vt 0.801020 0.697368 -vt 0.826531 0.697368 -vt 0.816327 0.697368 -vt 0.811224 0.697368 -vt 0.821429 0.697368 -vt 0.795918 0.690789 -vt 0.836735 0.690789 -vt 0.831633 0.697368 -vt 0.836735 0.828947 -vt 0.831633 0.828947 -vt 0.826531 0.828947 -vt 0.795918 0.828947 -vt 0.795918 0.697368 -vt 0.816327 0.828947 -vt 0.806122 0.828947 -vt 0.821429 0.828947 -vt 0.811224 0.828947 -vt 0.801020 0.828947 -vt 0.795918 0.335526 -vt 0.795918 0.315789 -vt 0.836735 0.684211 -vt 0.795918 0.828947 -vt 0.836735 0.697368 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn -0.0473 -0.0196 0.9987 -vn 0.4617 0.4617 0.7573 -vn 0.6737 0.1363 0.7263 -vn -0.9824 -0.1866 0.0000 -vn -0.5293 -0.5293 0.6630 -vn -0.7194 -0.1447 0.6794 -vn -0.0473 -0.0196 -0.9987 -vn -0.5293 -0.5293 -0.6630 -vn -0.7194 -0.1447 -0.6794 -vn 0.4617 0.4617 -0.7573 -vn -0.0670 -0.0670 -0.9955 -vn -0.0670 -0.0670 0.9955 -vn -0.7071 -0.7071 0.0000 -vn -0.0196 -0.0473 -0.9987 -vn -0.0196 -0.0473 0.9987 -vn -0.1447 -0.7194 -0.6794 -vn -0.1866 -0.9824 0.0000 -vn 0.1363 0.6737 0.7263 -vn -0.1447 -0.7194 0.6794 -vn 0.7071 0.7071 0.0000 -vn 0.6737 0.1363 -0.7263 -vn 0.1363 0.6737 -0.7263 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.7071 -0.7071 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -0.7071 -0.7071 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.7071 0.7071 -vn 0.0000 -0.7071 0.7071 -vn 0.9987 0.0196 0.0473 -vn 0.0000 0.1866 0.9824 -vn -0.9987 0.0196 0.0473 -vn 0.7263 -0.1363 -0.6737 -vn 0.6794 0.1447 0.7194 -vn -0.6794 0.1447 0.7194 -vn -0.7263 -0.1363 -0.6737 -vn -0.7071 0.7071 0.0000 -vn 0.7071 -0.7071 0.0000 -vn 0.6630 0.5293 0.5293 -vn -0.6630 0.5293 0.5293 -vn -0.7573 -0.4617 -0.4617 -vn 0.7573 -0.4617 -0.4617 -vn 0.9955 0.0670 0.0670 -vn -0.9955 0.0670 0.0670 -vn -0.9987 0.0473 0.0196 -vn -0.7263 -0.6737 -0.1363 -vn 0.9987 0.0473 0.0196 -vn 0.0000 0.9824 0.1866 -vn -0.6794 0.7194 0.1447 -vn 0.6794 0.7194 0.1447 -vn 0.7263 -0.6737 -0.1363 -s off -f 3555/5094/367 3558/5095/367 3554/5096/367 -f 3560/5097/367 3557/5098/367 3556/5099/367 -f 3559/5100/367 3560/5097/367 3558/5095/367 -f 3639/5101/368 3642/5102/368 3643/5103/368 -f 3641/5104/368 3644/5105/368 3640/5106/368 -f 3644/5105/368 3643/5103/368 3642/5102/368 -f 3555/5094/367 3559/5100/367 3558/5095/367 -f 3560/5097/367 3561/5107/367 3557/5098/367 -f 3559/5100/367 3561/5107/367 3560/5097/367 -f 3639/5101/368 3638/5108/368 3642/5102/368 -f 3641/5104/368 3645/5109/368 3644/5105/368 -f 3644/5105/368 3645/5109/368 3643/5103/368 -s 1 -f 3566/5110/369 3575/5111/370 3567/5112/371 -f 3564/5113/372 3573/5114/373 3565/5115/374 -f 3562/5116/375 3571/5117/376 3563/5118/377 -f 3562/5119/375 3576/5120/378 3570/5121/379 -f 3566/5110/369 3573/5114/373 3574/5122/380 -f 3563/5118/377 3572/5123/381 3564/5113/372 -f 3576/5120/378 3577/5124/382 3570/5121/379 -f 3573/5114/373 3581/5125/383 3574/5122/380 -f 3572/5123/381 3578/5126/384 3579/5127/385 -f 3575/5111/370 3581/5125/383 3582/5128/386 -f 3572/5123/381 3580/5129/387 3573/5114/373 -f 3571/5117/376 3577/5130/382 3578/5126/384 -f 3567/5112/371 3575/5111/370 3568/5131/388 -f 3575/5111/370 3582/5128/386 3568/5131/388 -f 3568/5131/388 3576/5120/378 3569/5132/389 -f 3576/5120/378 3568/5131/388 3583/5133/390 -f 3583/5133/390 3584/5134/391 3591/5135/392 -f 3583/5133/390 3585/5136/393 3577/5124/382 -f 3582/5128/386 3584/5134/391 3568/5137/388 -f 3580/5129/387 3589/5138/394 3581/5125/383 -f 3579/5127/385 3586/5139/395 3587/5140/396 -f 3581/5125/383 3590/5141/397 3582/5128/386 -f 3579/5127/385 3588/5142/398 3580/5129/387 -f 3577/5130/382 3586/5139/395 3578/5126/384 -f 3569/5132/389 3598/5143/399 3568/5144/388 -f 3567/5112/371 3596/5145/400 3566/5110/369 -f 3565/5115/374 3594/5146/401 3564/5113/372 -f 3563/5118/377 3592/5147/395 3562/5116/375 -f 3562/5119/375 3599/5148/402 3569/5132/389 -f 3568/5144/388 3597/5149/403 3567/5112/371 -f 3566/5110/369 3595/5150/404 3565/5115/374 -f 3564/5113/372 3593/5151/405 3563/5118/377 -f 3610/5152/368 3603/5153/381 3602/5154/368 -f 3608/5155/391 3601/5156/406 3600/5157/391 -f 3615/5158/388 3600/5157/391 3607/5159/388 -f 3613/5160/407 3606/5161/367 3605/5162/407 -f 3611/5163/381 3604/5164/396 3603/5153/381 -f 3609/5165/406 3602/5154/368 3601/5156/406 -f 3614/5166/367 3607/5159/388 3606/5161/367 -f 3612/5167/396 3605/5162/407 3604/5168/396 -f 3598/5143/399 3620/5169/408 3597/5149/403 -f 3596/5145/400 3618/5170/409 3595/5150/404 -f 3594/5146/401 3616/5171/410 3593/5151/405 -f 3598/5143/399 3622/5172/411 3621/5173/412 -f 3597/5149/403 3619/5174/397 3596/5145/400 -f 3594/5146/401 3618/5170/409 3617/5175/413 -f 3616/5171/410 3624/5176/414 3623/5177/415 -f 3622/5172/411 3628/5178/416 3621/5173/412 -f 3620/5169/408 3626/5179/417 3619/5174/397 -f 3617/5175/413 3625/5180/418 3624/5176/414 -f 3620/5169/408 3628/5178/416 3627/5181/419 -f 3618/5170/409 3626/5179/417 3625/5180/418 -f 3593/5151/405 3616/5171/410 3592/5182/395 -f 3616/5171/410 3623/5177/415 3592/5182/395 -f 3599/5148/402 3592/5183/395 3622/5172/411 -f 3622/5172/411 3592/5183/395 3629/5184/420 -f 3629/5184/420 3630/5185/396 3637/5186/407 -f 3629/5184/420 3636/5187/367 3628/5178/416 -f 3623/5177/415 3630/5188/396 3592/5189/395 -f 3627/5181/419 3634/5190/391 3626/5179/417 -f 3625/5180/418 3632/5191/368 3624/5176/414 -f 3628/5178/416 3635/5192/388 3627/5181/419 -f 3626/5179/417 3633/5193/406 3625/5180/418 -f 3623/5177/415 3632/5191/368 3631/5194/381 -f 3566/5110/369 3574/5122/380 3575/5111/370 -f 3564/5113/372 3572/5123/381 3573/5114/373 -f 3562/5116/375 3570/5195/379 3571/5117/376 -f 3562/5119/375 3569/5132/389 3576/5120/378 -f 3566/5110/369 3565/5115/374 3573/5114/373 -f 3563/5118/377 3571/5117/376 3572/5123/381 -f 3576/5120/378 3583/5133/390 3577/5124/382 -f 3573/5114/373 3580/5129/387 3581/5125/383 -f 3572/5123/381 3571/5117/376 3578/5126/384 -f 3575/5111/370 3574/5122/380 3581/5125/383 -f 3572/5123/381 3579/5127/385 3580/5129/387 -f 3571/5117/376 3570/5195/379 3577/5130/382 -f 3583/5133/390 3568/5137/388 3584/5134/391 -f 3583/5133/390 3591/5135/392 3585/5136/393 -f 3582/5128/386 3590/5141/397 3584/5134/391 -f 3580/5129/387 3588/5142/398 3589/5138/394 -f 3579/5127/385 3578/5126/384 3586/5139/395 -f 3581/5125/383 3589/5138/394 3590/5141/397 -f 3579/5127/385 3587/5140/396 3588/5142/398 -f 3577/5130/382 3585/5196/393 3586/5139/395 -f 3569/5132/389 3599/5148/402 3598/5143/399 -f 3567/5112/371 3597/5149/403 3596/5145/400 -f 3565/5115/374 3595/5150/404 3594/5146/401 -f 3563/5118/377 3593/5151/405 3592/5147/395 -f 3562/5119/375 3592/5197/395 3599/5148/402 -f 3568/5144/388 3598/5143/399 3597/5149/403 -f 3566/5110/369 3596/5145/400 3595/5150/404 -f 3564/5113/372 3594/5146/401 3593/5151/405 -f 3610/5152/368 3611/5163/381 3603/5153/381 -f 3608/5155/391 3609/5165/406 3601/5156/406 -f 3615/5158/388 3608/5155/391 3600/5157/391 -f 3613/5160/407 3614/5166/367 3606/5161/367 -f 3611/5163/381 3612/5198/396 3604/5164/396 -f 3609/5165/406 3610/5152/368 3602/5154/368 -f 3614/5166/367 3615/5158/388 3607/5159/388 -f 3612/5167/396 3613/5160/407 3605/5162/407 -f 3598/5143/399 3621/5173/412 3620/5169/408 -f 3596/5145/400 3619/5174/397 3618/5170/409 -f 3594/5146/401 3617/5175/413 3616/5171/410 -f 3598/5143/399 3599/5148/402 3622/5172/411 -f 3597/5149/403 3620/5169/408 3619/5174/397 -f 3594/5146/401 3595/5150/404 3618/5170/409 -f 3616/5171/410 3617/5175/413 3624/5176/414 -f 3622/5172/411 3629/5184/420 3628/5178/416 -f 3620/5169/408 3627/5181/419 3626/5179/417 -f 3617/5175/413 3618/5170/409 3625/5180/418 -f 3620/5169/408 3621/5173/412 3628/5178/416 -f 3618/5170/409 3619/5174/397 3626/5179/417 -f 3629/5184/420 3592/5199/395 3630/5185/396 -f 3629/5184/420 3637/5186/407 3636/5187/367 -f 3623/5177/415 3631/5194/381 3630/5188/396 -f 3627/5181/419 3635/5192/388 3634/5190/391 -f 3625/5180/418 3633/5193/406 3632/5191/368 -f 3628/5178/416 3636/5187/367 3635/5192/388 -f 3626/5179/417 3634/5190/391 3633/5193/406 -f 3623/5177/415 3624/5176/414 3632/5191/368 -o V2_Pivot -v 0.500000 1.250000 -1.625000 -v 0.750000 1.250000 -1.625000 -v 0.500000 1.250000 -1.875000 -v 0.750000 1.250000 -1.875000 -v 0.500000 2.750000 -1.875000 -v 0.500000 2.750000 -1.625000 -v 0.750000 2.750000 -1.625000 -v 0.750000 2.750000 -1.875000 -v -0.750000 1.250000 -1.625000 -v -0.500000 1.250000 -1.625000 -v -0.750000 1.250000 -1.875000 -v -0.500000 1.250000 -1.875000 -v -0.750000 2.750000 -1.875000 -v -0.750000 2.750000 -1.625000 -v -0.500000 2.750000 -1.625000 -v -0.500000 2.750000 -1.875000 -v 0.562500 2.750000 -1.687500 -v 0.687500 2.750000 -1.687500 -v 0.562500 2.750000 -1.812500 -v 0.687500 2.750000 -1.812500 -v 0.562500 3.750000 -1.812500 -v 0.562500 3.750000 -1.687500 -v 0.687500 3.750000 -1.687500 -v 0.687500 3.750000 -1.812500 -v -0.687500 2.750000 -1.687500 -v -0.562500 2.750000 -1.687500 -v -0.687500 2.750000 -1.812500 -v -0.562500 2.750000 -1.812500 -v -0.687500 3.750000 -1.812500 -v -0.687500 3.750000 -1.687500 -v -0.562500 3.750000 -1.687500 -v -0.562500 3.750000 -1.812500 -vt 0.836735 0.184211 -vt 0.857143 0.157895 -vt 0.857143 0.184211 -vt 0.918367 -0.000000 -vt 0.897959 0.157895 -vt 0.897959 -0.000000 -vt 0.877551 -0.000000 -vt 0.857143 -0.000000 -vt 0.836735 0.157895 -vt 0.836735 -0.000000 -vt 0.877551 0.157895 -vt 0.836735 0.184211 -vt 0.857143 0.157895 -vt 0.857143 0.184211 -vt 0.918367 -0.000000 -vt 0.897959 0.157895 -vt 0.897959 -0.000000 -vt 0.877551 -0.000000 -vt 0.857143 -0.000000 -vt 0.836735 0.157895 -vt 0.836735 -0.000000 -vt 0.877551 0.157895 -vt 0.897959 0.157895 -vt 0.887755 0.263158 -vt 0.887755 0.157895 -vt 0.877551 0.157895 -vt 0.867347 0.263158 -vt 0.867347 0.157895 -vt 0.857143 0.263158 -vt 0.857143 0.157895 -vt 0.877551 0.263158 -vt 0.897959 0.157895 -vt 0.887755 0.263158 -vt 0.887755 0.157895 -vt 0.877551 0.157895 -vt 0.867347 0.263158 -vt 0.867347 0.157895 -vt 0.857143 0.263158 -vt 0.857143 0.157895 -vt 0.877551 0.263158 -vt 0.918367 0.157895 -vt 0.918367 0.157895 -vt 0.897959 0.263158 -vt 0.897959 0.263158 -vn 0.0000 1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -s off -f 3652/5200/421 3650/5201/421 3651/5202/421 -f 3649/5203/422 3652/5204/422 3647/5205/422 -f 3646/5206/423 3650/5201/423 3648/5207/423 -f 3648/5207/424 3653/5208/424 3649/5209/424 -f 3647/5205/425 3651/5210/425 3646/5206/425 -f 3660/5211/421 3658/5212/421 3659/5213/421 -f 3657/5214/422 3660/5215/422 3655/5216/422 -f 3654/5217/423 3658/5212/423 3656/5218/423 -f 3656/5218/424 3661/5219/424 3657/5220/424 -f 3655/5216/425 3659/5221/425 3654/5217/425 -f 3665/5222/422 3668/5223/422 3663/5224/422 -f 3662/5225/423 3666/5226/423 3664/5227/423 -f 3664/5227/424 3669/5228/424 3665/5229/424 -f 3663/5224/425 3667/5230/425 3662/5225/425 -f 3673/5231/422 3676/5232/422 3671/5233/422 -f 3670/5234/423 3674/5235/423 3672/5236/423 -f 3672/5236/424 3677/5237/424 3673/5238/424 -f 3671/5233/425 3675/5239/425 3670/5234/425 -f 3652/5200/421 3653/5208/421 3650/5201/421 -f 3649/5203/422 3653/5240/422 3652/5204/422 -f 3646/5206/423 3651/5210/423 3650/5201/423 -f 3648/5207/424 3650/5201/424 3653/5208/424 -f 3647/5205/425 3652/5204/425 3651/5210/425 -f 3660/5211/421 3661/5219/421 3658/5212/421 -f 3657/5214/422 3661/5241/422 3660/5215/422 -f 3654/5217/423 3659/5221/423 3658/5212/423 -f 3656/5218/424 3658/5212/424 3661/5219/424 -f 3655/5216/425 3660/5215/425 3659/5221/425 -f 3665/5222/422 3669/5242/422 3668/5223/422 -f 3662/5225/423 3667/5230/423 3666/5226/423 -f 3664/5227/424 3666/5226/424 3669/5228/424 -f 3663/5224/425 3668/5223/425 3667/5230/425 -f 3673/5231/422 3677/5243/422 3676/5232/422 -f 3670/5234/423 3675/5239/423 3674/5235/423 -f 3672/5236/424 3674/5235/424 3677/5237/424 -f 3671/5233/425 3676/5232/425 3675/5239/425 -o V2_Erector -v 0.500000 2.750000 -1.875000 -v 0.500000 2.750000 -1.625000 -v 0.750000 2.750000 -1.625000 -v 0.750000 2.750000 -1.875000 -v -0.750000 2.750000 -1.875000 -v -0.750000 2.750000 -1.625000 -v -0.500000 2.750000 -1.625000 -v -0.500000 2.750000 -1.875000 -v 0.500000 7.750000 -1.875000 -v 0.500000 7.750000 -1.625000 -v 0.750000 7.750000 -1.625000 -v 0.750000 7.750000 -1.875000 -v -0.750000 7.750000 -1.875000 -v -0.750000 7.750000 -1.625000 -v -0.500000 7.750000 -1.625000 -v -0.500000 7.750000 -1.875000 -v 0.500000 4.250000 -0.125000 -v 0.500000 4.250000 0.125000 -v 0.750000 4.250000 0.125000 -v 0.750000 4.250000 -0.125000 -v -0.750000 4.250000 -0.125000 -v -0.750000 4.250000 0.125000 -v -0.500000 4.250000 0.125000 -v -0.500000 4.250000 -0.125000 -v 0.500000 7.750000 -0.125000 -v 0.500000 7.750000 0.125000 -v 0.750000 7.750000 0.125000 -v 0.750000 7.750000 -0.125000 -v -0.750000 7.750000 -0.125000 -v -0.750000 7.750000 0.125000 -v -0.500000 7.750000 0.125000 -v -0.500000 7.750000 -0.125000 -v -0.250000 7.250000 -0.625000 -v 0.250000 7.250000 -0.625000 -v -0.250000 7.250000 -0.375000 -v 0.250000 7.250000 -0.375000 -v -0.500000 7.250000 -0.125000 -v -0.750000 7.250000 -0.125000 -v 0.750000 7.250000 -0.125000 -v 0.500000 7.250000 -0.125000 -v 0.500000 5.000000 -0.125000 -v 0.750000 5.000000 -0.125000 -v -0.750000 5.000000 -0.125000 -v -0.500000 5.000000 -0.125000 -v 0.250000 5.000000 -0.375000 -v -0.250000 5.000000 -0.375000 -v 0.250000 5.000000 -0.625000 -v -0.250000 5.000000 -0.625000 -v 0.500000 4.750000 -0.125000 -v 0.750000 4.750000 -0.125000 -v -0.750000 4.750000 -0.125000 -v -0.500000 4.750000 -0.125000 -v 0.250000 4.750000 -0.375000 -v -0.250000 4.750000 -0.375000 -v 0.250000 4.750000 -0.625000 -v -0.250000 4.750000 -0.625000 -v 0.500000 7.625000 -0.125000 -v 0.750000 7.625000 -0.125000 -v 0.500000 7.375000 -0.125000 -v 0.750000 7.375000 -0.125000 -v 0.500000 7.625000 -1.625000 -v 0.750000 7.625000 -1.625000 -v 0.500000 7.375000 -1.625000 -v 0.750000 7.375000 -1.625000 -v -0.750000 7.625000 -0.125000 -v -0.500000 7.625000 -0.125000 -v -0.750000 7.375000 -0.125000 -v -0.500000 7.375000 -0.125000 -v -0.750000 7.625000 -1.625000 -v -0.500000 7.625000 -1.625000 -v -0.750000 7.375000 -1.625000 -v -0.500000 7.375000 -1.625000 -v 0.500000 4.625000 -0.125000 -v 0.750000 4.625000 -0.125000 -v 0.500000 4.375000 -0.125000 -v 0.750000 4.375000 -0.125000 -v 0.500000 4.625000 -1.625000 -v 0.750000 4.625000 -1.625000 -v 0.500000 4.375000 -1.625000 -v 0.750000 4.375000 -1.625000 -v -0.750000 4.625000 -0.125000 -v -0.500000 4.625000 -0.125000 -v -0.750000 4.375000 -0.125000 -v -0.500000 4.375000 -0.125000 -v -0.750000 4.625000 -1.625000 -v -0.500000 4.625000 -1.625000 -v -0.750000 4.375000 -1.625000 -v -0.500000 4.375000 -1.625000 -v 0.500000 6.125000 -0.125000 -v 0.750000 6.125000 -0.125000 -v 0.500000 5.875000 -0.125000 -v 0.750000 5.875000 -0.125000 -v 0.500000 6.125000 -1.625000 -v 0.750000 6.125000 -1.625000 -v 0.500000 5.875000 -1.625000 -v 0.750000 5.875000 -1.625000 -v -0.750000 6.125000 -0.125000 -v -0.500000 6.125000 -0.125000 -v -0.750000 5.875000 -0.125000 -v -0.500000 5.875000 -0.125000 -v -0.750000 6.125000 -1.625000 -v -0.500000 6.125000 -1.625000 -v -0.750000 5.875000 -1.625000 -v -0.500000 5.875000 -1.625000 -v 0.500000 7.375000 -1.812500 -v 0.500000 7.125000 -1.812500 -v -0.500000 7.375000 -1.687500 -v -0.500000 7.125000 -1.687500 -v -0.500000 6.375000 -1.812500 -v -0.500000 6.125000 -1.812500 -v 0.500000 6.375000 -1.687500 -v 0.500000 6.125000 -1.687500 -v 0.500000 5.875000 -1.812500 -v 0.500000 5.625000 -1.812500 -v -0.500000 5.875000 -1.687500 -v -0.500000 5.625000 -1.687500 -v -0.500000 4.875000 -1.812500 -v -0.500000 4.625000 -1.812500 -v 0.500000 4.875000 -1.687500 -v 0.500000 4.625000 -1.687500 -v 0.500000 4.375000 -1.812500 -v 0.500000 4.125000 -1.812500 -v -0.500000 4.375000 -1.687500 -v -0.500000 4.125000 -1.687500 -v -0.500000 3.375000 -1.812500 -v -0.500000 3.125000 -1.812500 -v 0.500000 3.375000 -1.687500 -v 0.500000 3.125000 -1.687500 -v 0.500000 7.000000 -0.125000 -v 0.750000 7.000000 -0.125000 -v -0.750000 7.000000 -0.125000 -v -0.500000 7.000000 -0.125000 -v 0.250000 7.000000 -0.375000 -v -0.250000 7.000000 -0.375000 -v 0.250000 7.000000 -0.625000 -v -0.250000 7.000000 -0.625000 -v 0.500000 7.375000 -1.812500 -v 0.500000 7.125000 -1.812500 -v -0.500000 7.375000 -1.687500 -v -0.500000 7.125000 -1.687500 -v -0.500000 6.375000 -1.812500 -v -0.500000 6.125000 -1.812500 -v 0.500000 6.375000 -1.687500 -v 0.500000 6.125000 -1.687500 -v 0.500000 5.875000 -1.812500 -v 0.500000 5.625000 -1.812500 -v -0.500000 5.875000 -1.687500 -v -0.500000 5.625000 -1.687500 -v -0.500000 4.875000 -1.812500 -v -0.500000 4.625000 -1.812500 -v 0.500000 4.875000 -1.687500 -v 0.500000 4.625000 -1.687500 -v 0.500000 4.375000 -1.812500 -v 0.500000 4.125000 -1.812500 -v -0.500000 4.375000 -1.687500 -v -0.500000 4.125000 -1.687500 -v -0.500000 3.375000 -1.812500 -v -0.500000 3.125000 -1.812500 -v 0.500000 3.375000 -1.687500 -v 0.500000 3.125000 -1.687500 -vt 0.918367 0.421053 -vt 0.938776 0.394737 -vt 0.938776 0.421053 -vt 0.918367 0.421053 -vt 0.938776 0.394737 -vt 0.938776 0.421053 -vt 0.938776 0.026316 -vt 0.918367 -0.000000 -vt 0.938776 -0.000000 -vt 0.938776 0.026316 -vt 0.918367 -0.000000 -vt 0.938776 -0.000000 -vt 0.857143 0.263158 -vt 0.836735 0.236842 -vt 0.857143 0.236842 -vt 0.857143 0.263158 -vt 0.836735 0.236842 -vt 0.857143 0.236842 -vt 0.836735 0.815789 -vt 0.857143 0.789474 -vt 0.857143 0.815789 -vt 0.836735 0.815789 -vt 0.857143 0.789474 -vt 0.857143 0.815789 -vt 0.918367 0.263158 -vt 0.897959 0.789474 -vt 0.897959 0.263158 -vt 0.877551 0.263158 -vt 0.918367 0.263158 -vt 0.897959 0.789474 -vt 0.897959 0.263158 -vt 0.877551 0.263158 -vt 0.836735 0.789474 -vt 0.836735 0.263158 -vt 0.877551 0.789474 -vt 0.836735 0.789474 -vt 0.836735 0.263158 -vt 0.877551 0.789474 -vt 1.000000 0.026316 -vt 0.979592 0.394737 -vt 0.979592 0.026316 -vt 0.959184 0.026316 -vt 1.000000 0.026316 -vt 0.979592 0.394737 -vt 0.979592 0.026316 -vt 0.959184 0.026316 -vt 0.918367 0.394737 -vt 0.918367 0.026316 -vt 0.959184 0.394737 -vt 0.918367 0.394737 -vt 0.918367 0.026316 -vt 0.959184 0.394737 -vt 0.653061 0.763158 -vt 0.632653 0.710526 -vt 0.673469 0.763158 -vt 0.551020 0.763158 -vt 0.591837 0.736842 -vt 0.571429 0.763158 -vt 0.591837 0.710526 -vt 0.632653 0.710526 -vt 0.591837 0.736842 -vt 0.591837 0.710526 -vt 0.551020 0.763158 -vt 0.571429 0.763158 -vt 0.653061 0.763158 -vt 0.673469 0.763158 -vt 0.632653 0.763158 -vt 0.591837 0.789474 -vt 0.591837 0.763158 -vt 0.673469 0.684211 -vt 0.673469 0.710526 -vt 0.571429 0.789474 -vt 0.632653 0.684211 -vt 0.632653 0.789474 -vt 0.551020 0.710526 -vt 0.591149 0.684899 -vt 0.551020 0.631579 -vt 0.591837 0.657895 -vt 0.632653 0.657895 -vt 0.653061 0.631579 -vt 0.918367 0.421053 -vt 0.938776 0.578947 -vt 0.918367 0.578947 -vt 0.979592 0.421053 -vt 1.000000 0.578947 -vt 0.979592 0.578947 -vt 0.959184 0.421053 -vt 0.959184 0.578947 -vt 0.918367 0.421053 -vt 0.938776 0.578947 -vt 0.918367 0.578947 -vt 0.979592 0.421053 -vt 1.000000 0.578947 -vt 0.979592 0.578947 -vt 0.959184 0.421053 -vt 0.959184 0.578947 -vt 0.918367 0.421053 -vt 0.938776 0.578947 -vt 0.918367 0.578947 -vt 0.979592 0.421053 -vt 1.000000 0.578947 -vt 0.979592 0.578947 -vt 0.959184 0.421053 -vt 0.959184 0.578947 -vt 0.918367 0.421053 -vt 0.938776 0.578947 -vt 0.918367 0.578947 -vt 0.979592 0.421053 -vt 1.000000 0.578947 -vt 0.979592 0.578947 -vt 0.959184 0.421053 -vt 0.959184 0.578947 -vt 0.918367 0.421053 -vt 0.938776 0.578947 -vt 0.918367 0.578947 -vt 0.979592 0.421053 -vt 1.000000 0.578947 -vt 0.979592 0.578947 -vt 0.959184 0.421053 -vt 0.959184 0.578947 -vt 0.918367 0.421053 -vt 0.938776 0.578947 -vt 0.918367 0.578947 -vt 0.979592 0.421053 -vt 1.000000 0.578947 -vt 0.979592 0.578947 -vt 0.959184 0.421053 -vt 0.959184 0.578947 -vt 0.918367 0.578947 -vt 1.000000 0.605263 -vt 0.918367 0.605263 -vt 1.000000 0.578947 -vt 0.918367 0.605263 -vt 0.918367 0.578947 -vt 0.918367 0.578947 -vt 1.000000 0.605263 -vt 0.918367 0.605263 -vt 1.000000 0.578947 -vt 0.918367 0.605263 -vt 0.918367 0.578947 -vt 0.918367 0.578947 -vt 1.000000 0.605263 -vt 0.918367 0.605263 -vt 1.000000 0.578947 -vt 0.918367 0.605263 -vt 0.918367 0.578947 -vt 0.632653 0.763158 -vt 0.591837 0.789474 -vt 0.591837 0.763158 -vt 0.673469 0.684211 -vt 0.673469 0.710526 -vt 0.571429 0.789474 -vt 0.632653 0.684211 -vt 0.632653 0.789474 -vt 0.551020 0.710526 -vt 0.591149 0.684899 -vt 0.551020 0.631579 -vt 0.591837 0.657895 -vt 0.632653 0.657895 -vt 0.653061 0.631579 -vt 1.000000 0.605263 -vt 0.918367 0.578947 -vt 0.918367 0.605263 -vt 1.000000 0.578947 -vt 0.918367 0.605263 -vt 1.000000 0.605263 -vt 1.000000 0.605263 -vt 0.918367 0.578947 -vt 0.918367 0.605263 -vt 1.000000 0.578947 -vt 0.918367 0.605263 -vt 1.000000 0.605263 -vt 1.000000 0.605263 -vt 0.918367 0.578947 -vt 0.918367 0.605263 -vt 1.000000 0.578947 -vt 0.918367 0.605263 -vt 1.000000 0.605263 -vt 0.918367 0.789474 -vt 0.918367 0.789474 -vt 1.000000 0.394737 -vt 1.000000 0.394737 -vt 0.632653 0.736842 -vt 0.632653 0.736842 -vt 0.653061 0.789474 -vt 0.551020 0.684211 -vt 0.571429 0.631579 -vt 0.673469 0.631579 -vt 0.938776 0.421053 -vt 1.000000 0.421053 -vt 0.938776 0.421053 -vt 1.000000 0.421053 -vt 0.938776 0.421053 -vt 1.000000 0.421053 -vt 0.938776 0.421053 -vt 1.000000 0.421053 -vt 0.938776 0.421053 -vt 1.000000 0.421053 -vt 0.938776 0.421053 -vt 1.000000 0.421053 -vt 1.000000 0.578947 -vt 1.000000 0.605263 -vt 1.000000 0.578947 -vt 1.000000 0.605263 -vt 1.000000 0.578947 -vt 1.000000 0.605263 -vt 0.653061 0.789474 -vt 0.551020 0.684211 -vt 0.571429 0.631579 -vt 0.673469 0.631579 -vt 1.000000 0.578947 -vt 0.918367 0.578947 -vt 1.000000 0.578947 -vt 0.918367 0.578947 -vt 1.000000 0.578947 -vt 0.918367 0.578947 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn -0.7071 0.0000 -0.7071 -vn -0.7071 0.0000 0.7071 -vn 0.7071 0.0000 0.7071 -vn 0.7071 0.0000 -0.7071 -s off -f 3708/5244/426 3706/5245/426 3707/5246/426 -f 3704/5247/426 3702/5248/426 3703/5249/426 -f 3698/5250/427 3700/5251/427 3699/5252/427 -f 3694/5253/427 3696/5254/427 3695/5255/427 -f 3678/5256/427 3680/5257/427 3679/5258/427 -f 3682/5259/427 3684/5260/427 3683/5261/427 -f 3688/5262/426 3686/5263/426 3687/5264/426 -f 3692/5265/426 3690/5266/426 3691/5267/426 -f 3685/5268/428 3692/5269/428 3684/5270/428 -f 3683/5271/429 3690/5266/429 3682/5259/429 -f 3681/5272/428 3688/5273/428 3680/5274/428 -f 3679/5275/429 3686/5263/429 3678/5256/429 -f 3682/5259/430 3693/5276/430 3685/5277/430 -f 3684/5270/431 3691/5278/431 3683/5271/431 -f 3678/5256/430 3689/5279/430 3681/5280/430 -f 3680/5274/431 3687/5281/431 3679/5275/431 -f 3701/5282/428 3708/5283/428 3700/5284/428 -f 3699/5285/429 3706/5245/429 3698/5250/429 -f 3697/5286/428 3704/5287/428 3696/5288/428 -f 3695/5289/429 3702/5248/429 3694/5253/429 -f 3698/5250/430 3709/5290/430 3701/5291/430 -f 3700/5284/431 3707/5292/431 3699/5285/431 -f 3694/5253/430 3705/5293/430 3697/5294/430 -f 3696/5288/431 3703/5295/431 3695/5289/431 -f 3714/5296/426 3710/5297/426 3715/5298/426 -f 3716/5299/426 3713/5300/426 3717/5301/426 -f 3710/5297/426 3713/5300/426 3711/5302/426 -f 3725/5303/426 3722/5304/426 3724/5305/426 -f 3719/5306/426 3722/5304/426 3718/5307/426 -f 3721/5308/426 3725/5303/426 3720/5309/426 -f 3723/5310/431 3730/5311/431 3722/5312/431 -f 3725/5303/432 3728/5313/432 3720/5314/432 -f 3722/5312/433 3726/5315/433 3718/5307/433 -f 3724/5305/430 3733/5316/430 3725/5303/430 -f 3721/5308/434 3731/5317/434 3723/5310/434 -f 3719/5318/435 3732/5319/435 3724/5305/435 -f 3727/5320/427 3730/5321/427 3732/5319/427 -f 3733/5316/427 3730/5321/427 3731/5322/427 -f 3729/5323/427 3733/5316/427 3731/5322/427 -f 3741/5324/428 3735/5325/428 3737/5326/428 -f 3740/5327/427 3737/5328/427 3736/5329/427 -f 3738/5330/429 3736/5329/429 3734/5331/429 -f 3735/5325/426 3738/5330/426 3734/5331/426 -f 3749/5332/428 3743/5333/428 3745/5334/428 -f 3748/5335/427 3745/5336/427 3744/5337/427 -f 3746/5338/429 3744/5337/429 3742/5339/429 -f 3743/5333/426 3746/5338/426 3742/5339/426 -f 3757/5340/428 3751/5341/428 3753/5342/428 -f 3756/5343/427 3753/5344/427 3752/5345/427 -f 3754/5346/429 3752/5345/429 3750/5347/429 -f 3751/5341/426 3754/5346/426 3750/5347/426 -f 3765/5348/428 3759/5349/428 3761/5350/428 -f 3764/5351/427 3761/5352/427 3760/5353/427 -f 3762/5354/429 3760/5353/429 3758/5355/429 -f 3759/5349/426 3762/5354/426 3758/5355/426 -f 3773/5356/428 3767/5357/428 3769/5358/428 -f 3772/5359/427 3769/5360/427 3768/5361/427 -f 3770/5362/429 3768/5361/429 3766/5363/429 -f 3767/5357/426 3770/5362/426 3766/5363/426 -f 3781/5364/428 3775/5365/428 3777/5366/428 -f 3780/5367/427 3777/5368/427 3776/5369/427 -f 3778/5370/429 3776/5369/429 3774/5371/429 -f 3775/5365/426 3778/5370/426 3774/5371/426 -f 3783/5372/430 3786/5373/430 3782/5374/430 -f 3785/5375/430 3788/5376/430 3789/5377/430 -f 3791/5378/430 3794/5379/430 3790/5380/430 -f 3793/5381/430 3796/5382/430 3797/5383/430 -f 3799/5384/430 3802/5385/430 3798/5386/430 -f 3801/5387/430 3804/5388/430 3805/5389/430 -f 3712/5390/431 3810/5391/431 3713/5392/431 -f 3710/5297/432 3808/5393/432 3715/5394/432 -f 3713/5392/433 3806/5395/433 3717/5301/433 -f 3711/5302/430 3813/5396/430 3710/5297/430 -f 3714/5296/434 3811/5397/434 3712/5390/434 -f 3716/5398/435 3812/5399/435 3711/5302/435 -f 3807/5400/427 3810/5401/427 3812/5399/427 -f 3813/5396/427 3810/5401/427 3811/5402/427 -f 3809/5403/427 3813/5396/427 3811/5402/427 -f 3818/5404/431 3815/5405/431 3814/5406/431 -f 3817/5407/431 3820/5408/431 3816/5409/431 -f 3826/5410/431 3823/5411/431 3822/5412/431 -f 3825/5413/431 3828/5414/431 3824/5415/431 -f 3834/5416/431 3831/5417/431 3830/5418/431 -f 3833/5419/431 3836/5420/431 3832/5421/431 -f 3708/5244/426 3709/5290/426 3706/5245/426 -f 3704/5247/426 3705/5293/426 3702/5248/426 -f 3698/5250/427 3701/5291/427 3700/5251/427 -f 3694/5253/427 3697/5294/427 3696/5254/427 -f 3678/5256/427 3681/5280/427 3680/5257/427 -f 3682/5259/427 3685/5277/427 3684/5260/427 -f 3688/5262/426 3689/5279/426 3686/5263/426 -f 3692/5265/426 3693/5276/426 3690/5266/426 -f 3685/5268/428 3693/5422/428 3692/5269/428 -f 3683/5271/429 3691/5278/429 3690/5266/429 -f 3681/5272/428 3689/5423/428 3688/5273/428 -f 3679/5275/429 3687/5281/429 3686/5263/429 -f 3682/5259/430 3690/5266/430 3693/5276/430 -f 3684/5270/431 3692/5269/431 3691/5278/431 -f 3678/5256/430 3686/5263/430 3689/5279/430 -f 3680/5274/431 3688/5273/431 3687/5281/431 -f 3701/5282/428 3709/5424/428 3708/5283/428 -f 3699/5285/429 3707/5292/429 3706/5245/429 -f 3697/5286/428 3705/5425/428 3704/5287/428 -f 3695/5289/429 3703/5295/429 3702/5248/429 -f 3698/5250/430 3706/5245/430 3709/5290/430 -f 3700/5284/431 3708/5283/431 3707/5292/431 -f 3694/5253/430 3702/5248/430 3705/5293/430 -f 3696/5288/431 3704/5287/431 3703/5295/431 -f 3714/5296/426 3712/5426/426 3710/5297/426 -f 3716/5299/426 3711/5302/426 3713/5300/426 -f 3710/5297/426 3712/5426/426 3713/5300/426 -f 3725/5303/426 3723/5427/426 3722/5304/426 -f 3719/5306/426 3724/5305/426 3722/5304/426 -f 3721/5308/426 3723/5427/426 3725/5303/426 -f 3723/5310/431 3731/5317/431 3730/5311/431 -f 3725/5303/432 3733/5316/432 3728/5313/432 -f 3722/5312/433 3730/5311/433 3726/5315/433 -f 3724/5305/430 3732/5319/430 3733/5316/430 -f 3721/5308/434 3729/5428/434 3731/5317/434 -f 3719/5318/435 3727/5429/435 3732/5319/435 -f 3727/5320/427 3726/5430/427 3730/5321/427 -f 3733/5316/427 3732/5319/427 3730/5321/427 -f 3729/5323/427 3728/5431/427 3733/5316/427 -f 3741/5324/428 3739/5432/428 3735/5325/428 -f 3740/5327/427 3741/5433/427 3737/5328/427 -f 3738/5330/429 3740/5327/429 3736/5329/429 -f 3735/5325/426 3739/5432/426 3738/5330/426 -f 3749/5332/428 3747/5434/428 3743/5333/428 -f 3748/5335/427 3749/5435/427 3745/5336/427 -f 3746/5338/429 3748/5335/429 3744/5337/429 -f 3743/5333/426 3747/5434/426 3746/5338/426 -f 3757/5340/428 3755/5436/428 3751/5341/428 -f 3756/5343/427 3757/5437/427 3753/5344/427 -f 3754/5346/429 3756/5343/429 3752/5345/429 -f 3751/5341/426 3755/5436/426 3754/5346/426 -f 3765/5348/428 3763/5438/428 3759/5349/428 -f 3764/5351/427 3765/5439/427 3761/5352/427 -f 3762/5354/429 3764/5351/429 3760/5353/429 -f 3759/5349/426 3763/5438/426 3762/5354/426 -f 3773/5356/428 3771/5440/428 3767/5357/428 -f 3772/5359/427 3773/5441/427 3769/5360/427 -f 3770/5362/429 3772/5359/429 3768/5361/429 -f 3767/5357/426 3771/5440/426 3770/5362/426 -f 3781/5364/428 3779/5442/428 3775/5365/428 -f 3780/5367/427 3781/5443/427 3777/5368/427 -f 3778/5370/429 3780/5367/429 3776/5369/429 -f 3775/5365/426 3779/5442/426 3778/5370/426 -f 3783/5372/430 3787/5444/430 3786/5373/430 -f 3785/5375/430 3784/5445/430 3788/5376/430 -f 3791/5378/430 3795/5446/430 3794/5379/430 -f 3793/5381/430 3792/5447/430 3796/5382/430 -f 3799/5384/430 3803/5448/430 3802/5385/430 -f 3801/5387/430 3800/5449/430 3804/5388/430 -f 3712/5390/431 3811/5397/431 3810/5391/431 -f 3710/5297/432 3813/5396/432 3808/5393/432 -f 3713/5392/433 3810/5391/433 3806/5395/433 -f 3711/5302/430 3812/5399/430 3813/5396/430 -f 3714/5296/434 3809/5450/434 3811/5397/434 -f 3716/5398/435 3807/5451/435 3812/5399/435 -f 3807/5400/427 3806/5452/427 3810/5401/427 -f 3813/5396/427 3812/5399/427 3810/5401/427 -f 3809/5403/427 3808/5453/427 3813/5396/427 -f 3818/5404/431 3819/5454/431 3815/5405/431 -f 3817/5407/431 3821/5455/431 3820/5408/431 -f 3826/5410/431 3827/5456/431 3823/5411/431 -f 3825/5413/431 3829/5457/431 3828/5414/431 -f 3834/5416/431 3835/5458/431 3831/5417/431 -f 3833/5419/431 3837/5459/431 3836/5420/431 -o Pad -v -4.500000 0.000000 4.500000 -v 4.500000 0.000000 4.500000 -v -4.500000 0.000000 -4.500000 -v 4.500000 0.000000 -4.500000 -v -4.500000 1.000000 4.500000 -v 4.500000 1.000000 4.500000 -v -4.500000 1.000000 -4.500000 -v 4.500000 1.000000 -4.500000 -v -4.500000 0.000000 0.500000 -v 4.500000 0.000000 0.500000 -v -4.500000 1.000000 0.500000 -v 4.500000 1.000000 0.500000 -v 4.500000 0.000000 -0.500000 -v -4.500000 0.000000 -0.500000 -v 4.500000 1.000000 -0.500000 -v -4.500000 1.000000 -0.500000 -v -4.500000 1.000000 0.500000 -v 4.500000 1.000000 0.500000 -v 4.500000 1.000000 -0.500000 -v -4.500000 1.000000 -0.500000 -v 0.500000 1.000000 0.500000 -v 0.500000 1.000000 -0.500000 -v -0.500000 1.000000 0.500000 -v -0.500000 1.000000 -0.500000 -v 4.500000 0.750000 0.500000 -v 0.500000 0.750000 0.500000 -v 4.500000 1.000000 0.250000 -v 0.500000 1.000000 0.250000 -v 4.500000 1.000000 -0.250000 -v 0.500000 1.000000 -0.250000 -v 4.500000 0.750000 -0.500000 -v 0.500000 0.750000 -0.500000 -v 4.500000 1.000000 0.500000 -v 0.500000 1.000000 0.500000 -v 4.500000 1.000000 -0.500000 -v 0.500000 1.000000 -0.500000 -v -4.500000 1.000000 -0.500000 -v -0.500000 1.000000 -0.500000 -v -4.500000 1.000000 0.500000 -v -0.500000 1.000000 0.500000 -v -4.500000 0.750000 -0.500000 -v -0.500000 0.750000 -0.500000 -v -4.500000 1.000000 -0.250000 -v -0.500000 1.000000 -0.250000 -v -4.500000 1.000000 0.250000 -v -0.500000 1.000000 0.250000 -v -4.500000 0.750000 0.500000 -v -0.500000 0.750000 0.500000 -v -0.500000 0.000000 0.500000 -v 0.500000 0.000000 0.500000 -v -0.500000 0.000000 -0.500000 -v 0.500000 0.000000 -0.500000 -v 0.000000 0.500000 0.500000 -v 0.000000 0.500000 -0.500000 -vt 0.000000 0.473684 -vt 0.400000 0.526316 -vt 0.000000 0.526316 -vt 0.900000 0.526316 -vt 0.000000 0.473684 -vt 0.900000 0.473684 -vt 0.400000 1.000000 -vt 0.000000 1.000000 -vt 0.900000 0.473684 -vt -0.000000 0.526316 -vt -0.000000 0.473684 -vt 0.900000 0.473684 -vt -0.000000 0.526316 -vt -0.000000 0.473684 -vt 0.900000 0.526316 -vt 0.500000 0.473684 -vt 0.900000 0.473684 -vt 0.000000 0.000000 -vt 0.400000 0.473684 -vt 0.900000 0.526316 -vt -0.000000 0.473684 -vt 0.900000 0.473684 -vt 0.900000 0.526316 -vt 0.500000 0.473684 -vt 0.900000 0.473684 -vt 0.000000 0.473684 -vt 0.400000 0.526316 -vt 0.000000 0.526316 -vt 0.900000 1.000000 -vt 0.500000 0.526316 -vt 0.500000 0.000000 -vt 0.900000 0.000000 -vt 0.500000 0.736842 -vt 0.400000 0.526316 -vt 0.500000 0.526316 -vt 0.400000 1.000000 -vt 0.500000 0.789474 -vt 0.500000 1.000000 -vt 0.925000 0.539474 -vt 0.900000 0.750000 -vt 0.900000 0.539474 -vt 0.975000 0.539474 -vt 0.925000 0.750000 -vt 1.000000 0.539474 -vt 0.975000 0.750000 -vt 1.000000 0.763158 -vt 1.000000 0.776316 -vt 0.975000 0.776316 -vt 0.900000 0.763158 -vt 0.925000 0.776316 -vt 0.900000 0.776316 -vt 1.000000 0.763158 -vt 0.975000 0.750000 -vt 1.000000 0.750000 -vt 0.900000 0.763158 -vt 0.900000 0.750000 -vt 0.925000 0.750000 -vt 0.900000 0.526316 -vt 0.925000 0.539474 -vt 0.900000 0.539474 -vt 1.000000 0.526316 -vt 1.000000 0.539474 -vt 0.975000 0.539474 -vt 0.900000 1.000000 -vt 0.900000 0.986842 -vt 0.925000 0.986842 -vt 1.000000 1.000000 -vt 0.975000 0.986842 -vt 1.000000 0.986842 -vt 1.000000 0.776316 -vt 0.975000 0.986842 -vt 0.975000 0.776316 -vt 0.925000 0.986842 -vt 0.925000 0.776316 -vt 0.900000 0.986842 -vt 0.900000 0.776316 -vt 0.900000 0.473684 -vt 1.000000 0.500000 -vt 0.900000 0.500000 -vt 1.000000 0.526316 -vt 0.900000 0.526316 -vt 1.000000 0.473684 -vt 0.900000 0.421053 -vt 1.000000 0.421053 -vt 0.000000 0.526316 -vt 0.900000 0.526316 -vt 0.900000 0.526316 -vt 0.500000 0.526316 -vt 0.400000 0.000000 -vt -0.000000 0.526316 -vt 0.400000 0.473684 -vt 0.500000 1.000000 -vt 0.400000 0.736842 -vt 0.400000 0.789474 -vt 1.000000 0.750000 -vt 1.000000 0.986842 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 -0.7071 -0.7071 -vn 0.0000 -0.7071 0.7071 -vn 0.7071 0.7071 0.0000 -vn -0.7071 0.7071 0.0000 -s off -f 3839/5460/436 3849/5461/436 3843/5462/436 -f 3848/5463/437 3847/5464/437 3846/5465/437 -f 3843/5462/438 3848/5466/438 3842/5467/438 -f 3840/5468/437 3845/5469/437 3841/5470/437 -f 3839/5471/439 3842/5472/439 3838/5473/439 -f 3842/5474/440 3846/5475/440 3838/5476/440 -f 3838/5477/441 3847/5478/441 3839/5460/441 -f 3852/5479/439 3851/5480/439 3850/5481/439 -f 3845/5482/436 3850/5483/436 3841/5484/436 -f 3840/5485/440 3853/5486/440 3844/5487/440 -f 3844/5488/438 3852/5489/438 3845/5482/438 -f 3841/5484/441 3851/5490/441 3840/5491/441 -f 3859/5492/438 3855/5493/438 3856/5494/438 -f 3854/5495/438 3861/5496/438 3857/5497/438 -f 3865/5498/442 3862/5499/442 3863/5500/442 -f 3867/5501/441 3864/5502/441 3865/5498/441 -f 3869/5503/443 3866/5504/443 3867/5501/443 -f 3884/5505/440 3876/5506/440 3882/5507/440 -f 3878/5508/440 3880/5509/440 3874/5510/440 -f 3862/5511/436 3864/5512/436 3870/5513/436 -f 3868/5514/436 3872/5515/436 3866/5516/436 -f 3869/5517/440 3867/5518/440 3873/5519/440 -f 3863/5520/440 3871/5521/440 3865/5522/440 -f 3879/5523/436 3875/5524/436 3881/5525/436 -f 3885/5526/436 3883/5527/436 3877/5528/436 -f 3878/5529/443 3881/5530/443 3880/5531/443 -f 3880/5531/441 3883/5532/441 3882/5533/441 -f 3882/5533/442 3885/5534/442 3884/5535/442 -f 3887/5536/444 3891/5537/444 3890/5538/444 -f 3890/5538/445 3888/5539/445 3886/5540/445 -f 3889/5541/441 3886/5542/441 3888/5543/441 -f 3839/5460/436 3847/5478/436 3849/5461/436 -f 3848/5463/437 3849/5544/437 3847/5464/437 -f 3843/5462/438 3849/5461/438 3848/5466/438 -f 3840/5468/437 3844/5545/437 3845/5469/437 -f 3839/5471/439 3843/5546/439 3842/5472/439 -f 3842/5474/440 3848/5547/440 3846/5475/440 -f 3838/5477/441 3846/5548/441 3847/5478/441 -f 3852/5479/439 3853/5549/439 3851/5480/439 -f 3845/5482/436 3852/5489/436 3850/5483/436 -f 3840/5485/440 3851/5550/440 3853/5486/440 -f 3844/5488/438 3853/5551/438 3852/5489/438 -f 3841/5484/441 3850/5483/441 3851/5490/441 -f 3859/5492/438 3858/5552/438 3855/5493/438 -f 3854/5495/438 3860/5553/438 3861/5496/438 -f 3865/5498/442 3864/5502/442 3862/5499/442 -f 3867/5501/441 3866/5504/441 3864/5502/441 -f 3869/5503/443 3868/5554/443 3866/5504/443 -f 3878/5529/443 3879/5555/443 3881/5530/443 -f 3880/5531/441 3881/5530/441 3883/5532/441 -f 3882/5533/442 3883/5532/442 3885/5534/442 -f 3887/5536/444 3889/5541/444 3891/5537/444 -f 3890/5538/445 3891/5537/445 3888/5539/445 -f 3889/5541/441 3887/5536/441 3886/5542/441 -o Micro_Missile -v 0.324760 3.500000 -0.187500 -v 0.156250 3.500000 -0.270633 -v 0.270633 3.500000 -0.156250 -v 0.187500 3.500000 -0.324759 -v 0.000000 3.500000 -0.312500 -v -0.187500 3.500000 -0.324760 -v 0.000000 3.500000 -0.375000 -v -0.324760 3.500000 -0.187500 -v -0.156250 3.500000 -0.270633 -v -0.375000 3.500000 0.000000 -v -0.270633 3.500000 -0.156250 -v -0.324760 3.500000 0.187500 -v -0.312500 3.500000 0.000000 -v -0.187500 3.500000 0.324760 -v -0.270633 3.500000 0.156250 -v 0.000000 3.500000 0.375000 -v -0.156250 3.500000 0.270633 -v 0.156250 3.500000 0.270633 -v 0.000000 3.500000 0.312500 -v 0.187500 3.500000 0.324760 -v 0.270633 3.500000 0.156250 -v 0.375000 3.500000 0.000000 -v 0.324759 3.500000 0.187500 -v 0.312500 3.500000 0.000000 -v 0.312500 3.750000 0.000000 -v 0.324759 3.750000 0.187500 -v 0.270633 3.750000 0.156250 -v 0.270633 3.750000 -0.156250 -v 0.375000 3.750000 0.000000 -v 0.156250 3.750000 -0.270633 -v 0.324760 3.750000 -0.187500 -v 0.000000 3.750000 -0.312500 -v 0.187500 3.750000 -0.324759 -v -0.156250 3.750000 -0.270633 -v 0.000000 3.750000 -0.375000 -v -0.324760 3.750000 -0.187500 -v -0.187500 3.750000 -0.324760 -v -0.270633 3.750000 -0.156250 -v -0.375000 3.750000 0.000000 -v -0.270633 3.750000 0.156250 -v -0.312500 3.750000 0.000000 -v -0.156250 3.750000 0.270633 -v -0.324760 3.750000 0.187500 -v 0.000000 3.750000 0.375000 -v -0.187500 3.750000 0.324760 -v 0.156250 3.750000 0.270633 -v 0.000000 3.750000 0.312500 -v 0.187500 3.750000 0.324760 -v 0.312500 4.750000 0.000000 -v 0.324759 4.750000 0.187500 -v 0.270633 4.750000 0.156250 -v 0.270633 4.750000 -0.156250 -v 0.375000 4.750000 0.000000 -v 0.156250 4.750000 -0.270633 -v 0.324760 4.750000 -0.187500 -v 0.000000 4.750000 -0.312500 -v 0.187500 4.750000 -0.324759 -v -0.156250 4.750000 -0.270633 -v 0.000000 4.750000 -0.375000 -v -0.324760 4.750000 -0.187500 -v -0.187500 4.750000 -0.324760 -v -0.270633 4.750000 -0.156250 -v -0.375000 4.750000 0.000000 -v -0.270633 4.750000 0.156250 -v -0.312500 4.750000 0.000000 -v -0.156250 4.750000 0.270633 -v -0.324760 4.750000 0.187500 -v 0.000000 4.750000 0.375000 -v -0.187500 4.750000 0.324760 -v 0.156250 4.750000 0.270633 -v 0.000000 4.750000 0.312500 -v 0.187500 4.750000 0.324760 -v 0.312500 5.750000 0.000000 -v 0.324759 5.750000 0.187500 -v 0.270633 5.750000 0.156250 -v 0.270633 5.750000 -0.156250 -v 0.375000 5.750000 0.000000 -v 0.156250 5.750000 -0.270633 -v 0.324760 5.750000 -0.187500 -v 0.000000 5.750000 -0.312500 -v 0.187500 5.750000 -0.324759 -v -0.156250 5.750000 -0.270633 -v 0.000000 5.750000 -0.375000 -v -0.324760 5.750000 -0.187500 -v -0.187500 5.750000 -0.324760 -v -0.270633 5.750000 -0.156250 -v -0.375000 5.750000 0.000000 -v -0.270633 5.750000 0.156250 -v -0.312500 5.750000 0.000000 -v -0.156250 5.750000 0.270633 -v -0.324760 5.750000 0.187500 -v 0.000000 5.750000 0.375000 -v -0.187500 5.750000 0.324760 -v 0.156250 5.750000 0.270633 -v 0.000000 5.750000 0.312500 -v 0.187500 5.750000 0.324760 -v 0.375000 4.500000 0.000000 -v 0.270633 4.500000 0.156250 -v 0.324759 4.500000 0.187500 -v 0.324760 4.500000 -0.187500 -v 0.312500 4.500000 0.000000 -v 0.156250 4.500000 -0.270633 -v 0.270633 4.500000 -0.156250 -v 0.187500 4.500000 -0.324759 -v 0.000000 4.500000 -0.312500 -v -0.187500 4.500000 -0.324760 -v 0.000000 4.500000 -0.375000 -v -0.324760 4.500000 -0.187500 -v -0.156250 4.500000 -0.270633 -v -0.375000 4.500000 0.000000 -v -0.270633 4.500000 -0.156250 -v -0.324760 4.500000 0.187500 -v -0.312500 4.500000 0.000000 -v -0.187500 4.500000 0.324760 -v -0.270633 4.500000 0.156250 -v 0.000000 4.500000 0.375000 -v -0.156250 4.500000 0.270633 -v 0.156250 4.500000 0.270633 -v 0.000000 4.500000 0.312500 -v 0.187500 4.500000 0.324760 -v 0.375000 5.500000 0.000000 -v 0.270633 5.500000 0.156250 -v 0.324759 5.500000 0.187500 -v 0.324760 5.500000 -0.187500 -v 0.312500 5.500000 0.000000 -v 0.156250 5.500000 -0.270633 -v 0.270633 5.500000 -0.156250 -v 0.187500 5.500000 -0.324759 -v 0.000000 5.500000 -0.312500 -v -0.187500 5.500000 -0.324760 -v 0.000000 5.500000 -0.375000 -v -0.324760 5.500000 -0.187500 -v -0.156250 5.500000 -0.270633 -v -0.375000 5.500000 0.000000 -v -0.270633 5.500000 -0.156250 -v -0.324760 5.500000 0.187500 -v -0.312500 5.500000 0.000000 -v -0.187500 5.500000 0.324760 -v -0.270633 5.500000 0.156250 -v 0.000000 5.500000 0.375000 -v -0.156250 5.500000 0.270633 -v 0.156250 5.500000 0.270633 -v 0.000000 5.500000 0.312500 -v 0.187500 5.500000 0.324760 -v -0.530330 2.031250 -0.530330 -v -0.154680 2.031250 -0.198874 -v -0.198874 2.031250 -0.154680 -v -0.154680 3.531250 -0.198874 -v -0.530330 3.031250 -0.530330 -v -0.198874 3.531250 -0.154680 -v 0.530330 3.031250 0.530330 -v 0.154680 2.031250 0.198874 -v 0.530330 2.031250 0.530330 -v 0.198874 2.031250 0.154680 -v 0.154680 3.531250 0.198874 -v 0.198874 3.531250 0.154680 -v -0.530330 2.031250 0.530330 -v -0.198874 2.031250 0.154680 -v -0.154680 2.031250 0.198874 -v -0.198874 3.531250 0.154680 -v -0.530330 3.031250 0.530330 -v -0.154680 3.531250 0.198874 -v 0.530330 3.031250 -0.530330 -v 0.198874 2.031250 -0.154680 -v 0.530330 2.031250 -0.530330 -v 0.154680 2.031250 -0.198874 -v 0.198874 3.531250 -0.154680 -v 0.154680 3.531250 -0.198874 -v 0.000000 2.000000 0.250000 -v 0.187500 2.000000 0.324760 -v 0.000000 2.000000 0.375000 -v 0.125000 2.000000 0.216506 -v 0.324759 2.000000 0.187500 -v 0.216506 2.000000 0.125000 -v 0.375000 2.000000 0.000000 -v 0.250000 2.000000 0.000000 -v 0.324760 2.000000 -0.187500 -v 0.125000 2.000000 -0.216506 -v 0.187500 2.000000 -0.324759 -v 0.000000 2.000000 -0.375000 -v 0.000000 2.000000 -0.250000 -v -0.187500 2.000000 -0.324760 -v -0.125000 2.000000 -0.216506 -v -0.324760 2.000000 -0.187500 -v -0.216506 2.000000 -0.125000 -v -0.375000 2.000000 0.000000 -v -0.250000 2.000000 0.000000 -v -0.324760 2.000000 0.187500 -v -0.216506 2.000000 0.125000 -v -0.187500 2.000000 0.324760 -v -0.125000 2.000000 0.216506 -v 0.216506 2.000000 -0.125000 -v 0.324760 6.500000 -0.187500 -v 0.000000 6.500000 -0.375000 -v 0.187500 6.500000 0.324760 -v -0.324760 6.500000 0.187500 -v 0.187500 6.500000 -0.324759 -v -0.187500 6.500000 -0.324760 -v 0.324759 6.500000 0.187500 -v -0.187500 6.500000 0.324760 -v -0.324760 6.500000 -0.187500 -v 0.375000 6.500000 0.000000 -v 0.000000 6.500000 0.375000 -v -0.375000 6.500000 0.000000 -v -0.164063 6.750000 0.284165 -v -0.284165 6.750000 -0.164062 -v 0.284165 6.750000 -0.164062 -v 0.328125 6.750000 0.000000 -v 0.000000 6.750000 0.328125 -v -0.284165 6.750000 0.164063 -v -0.328125 6.750000 0.000000 -v 0.000000 6.750000 -0.328125 -v 0.284165 6.750000 0.164063 -v 0.164062 6.750000 0.284165 -v 0.164063 6.750000 -0.284164 -v -0.164062 6.750000 -0.284165 -v 0.000000 7.000000 0.000000 -v 0.000000 2.500000 0.000000 -v 0.385000 4.937500 0.000000 -v 0.334759 5.312500 0.187500 -v 0.334759 4.937500 0.187500 -v 0.334760 4.937500 -0.187500 -v 0.385000 5.312500 0.000000 -v -0.385000 4.937500 0.000000 -v -0.334760 5.312500 -0.187500 -v -0.334760 4.937500 -0.187500 -v -0.334760 4.937500 0.187500 -v -0.385000 5.312500 0.000000 -v 0.334760 5.312500 -0.187500 -v -0.334760 5.312500 0.187500 -vt 0.576923 0.354167 -vt 0.634615 0.364583 -vt 0.576923 0.364583 -vt 0.634615 0.354167 -vt 0.692308 0.364583 -vt 0.057692 0.354167 -vt 0.000000 0.364583 -vt 0.000000 0.354167 -vt 0.115385 0.354167 -vt 0.057692 0.364583 -vt 0.173077 0.354167 -vt 0.115385 0.364583 -vt 0.230769 0.354167 -vt 0.173077 0.364583 -vt 0.288462 0.354167 -vt 0.230769 0.364583 -vt 0.346154 0.354167 -vt 0.288462 0.364583 -vt 0.403846 0.364583 -vt 0.346154 0.364583 -vt 0.403846 0.354167 -vt 0.461538 0.364583 -vt 0.519231 0.354167 -vt 0.461538 0.354167 -vt 0.519231 0.364583 -vt 0.519231 0.406250 -vt 0.461538 0.416667 -vt 0.461538 0.406250 -vt 0.576923 0.406250 -vt 0.519231 0.416667 -vt 0.634615 0.406250 -vt 0.576923 0.416667 -vt 0.692308 0.406250 -vt 0.634615 0.416667 -vt 0.057692 0.406250 -vt 0.000000 0.416667 -vt 0.000000 0.406250 -vt 0.115385 0.416667 -vt 0.057692 0.416667 -vt 0.115385 0.406250 -vt 0.173077 0.416667 -vt 0.230769 0.406250 -vt 0.173077 0.406250 -vt 0.288462 0.406250 -vt 0.230769 0.416667 -vt 0.346154 0.416667 -vt 0.288462 0.416667 -vt 0.403846 0.406250 -vt 0.346154 0.406250 -vt 0.403846 0.416667 -vt 0.519231 0.593750 -vt 0.461538 0.604167 -vt 0.461538 0.593750 -vt 0.576923 0.593750 -vt 0.519231 0.604167 -vt 0.634615 0.593750 -vt 0.576923 0.604167 -vt 0.692308 0.593750 -vt 0.634615 0.604167 -vt 0.057692 0.593750 -vt 0.000000 0.604167 -vt 0.000000 0.593750 -vt 0.115385 0.604167 -vt 0.057692 0.604167 -vt 0.115385 0.593750 -vt 0.173077 0.604167 -vt 0.230769 0.593750 -vt 0.173077 0.593750 -vt 0.288462 0.593750 -vt 0.230769 0.604167 -vt 0.346154 0.604167 -vt 0.288462 0.604167 -vt 0.403846 0.593750 -vt 0.346154 0.593750 -vt 0.403846 0.604167 -vt 0.519231 0.781250 -vt 0.461538 0.791667 -vt 0.461538 0.781250 -vt 0.576923 0.781250 -vt 0.519231 0.791667 -vt 0.634615 0.781250 -vt 0.576923 0.791667 -vt 0.692308 0.781250 -vt 0.634615 0.791667 -vt 0.057692 0.781250 -vt 0.000000 0.791667 -vt 0.000000 0.781250 -vt 0.115385 0.791667 -vt 0.057692 0.791667 -vt 0.115385 0.781250 -vt 0.173077 0.791667 -vt 0.230769 0.781250 -vt 0.173077 0.781250 -vt 0.288462 0.781250 -vt 0.230769 0.791667 -vt 0.346154 0.791667 -vt 0.288462 0.791667 -vt 0.403846 0.781250 -vt 0.346154 0.781250 -vt 0.403846 0.791667 -vt 0.519231 0.541667 -vt 0.461538 0.552083 -vt 0.461538 0.541667 -vt 0.576923 0.541667 -vt 0.519231 0.552083 -vt 0.634615 0.552083 -vt 0.576923 0.552083 -vt 0.634615 0.541667 -vt 0.692308 0.552083 -vt 0.057692 0.541667 -vt 0.000000 0.552083 -vt 0.000000 0.541667 -vt 0.115385 0.541667 -vt 0.057692 0.552083 -vt 0.173077 0.541667 -vt 0.115385 0.552083 -vt 0.230769 0.541667 -vt 0.173077 0.552083 -vt 0.288462 0.541667 -vt 0.230769 0.552083 -vt 0.346154 0.541667 -vt 0.288462 0.552083 -vt 0.403846 0.552083 -vt 0.346154 0.552083 -vt 0.403846 0.541667 -vt 0.519231 0.729167 -vt 0.461538 0.739583 -vt 0.461538 0.729167 -vt 0.576923 0.729167 -vt 0.519231 0.739583 -vt 0.634615 0.739583 -vt 0.576923 0.739583 -vt 0.634615 0.729167 -vt 0.692308 0.739583 -vt 0.057692 0.729167 -vt 0.000000 0.739583 -vt 0.000000 0.729167 -vt 0.115385 0.729167 -vt 0.057692 0.739583 -vt 0.173077 0.729167 -vt 0.115385 0.739583 -vt 0.230769 0.729167 -vt 0.173077 0.739583 -vt 0.288462 0.729167 -vt 0.230769 0.739583 -vt 0.346154 0.729167 -vt 0.288462 0.739583 -vt 0.403846 0.739583 -vt 0.346154 0.739583 -vt 0.403846 0.729167 -vt 0.846154 0.000000 -vt 0.692308 0.010417 -vt 0.692308 0.000000 -vt 0.692308 0.260417 -vt 0.846154 0.270833 -vt 0.692308 0.270833 -vt 0.692308 0.010417 -vt 0.846154 0.177083 -vt 0.846154 0.010417 -vt 0.846154 0.177083 -vt 0.692308 0.010417 -vt 0.846154 0.010417 -vt 0.692308 0.010417 -vt 0.692308 0.260417 -vt 0.846154 0.270833 -vt 0.692308 0.270833 -vt 0.846154 0.000000 -vt 0.692308 0.000000 -vt 0.846154 0.000000 -vt 0.692308 0.010417 -vt 0.692308 0.000000 -vt 0.692308 0.260417 -vt 0.846154 0.270833 -vt 0.692308 0.270833 -vt 0.692308 0.010417 -vt 0.846154 0.177083 -vt 0.846154 0.010417 -vt 0.846154 0.177083 -vt 0.692308 0.010417 -vt 0.846154 0.010417 -vt 0.692308 0.010417 -vt 0.692308 0.260417 -vt 0.846154 0.270833 -vt 0.692308 0.270833 -vt 0.846154 0.000000 -vt 0.692308 0.000000 -vt 0.346154 0.083333 -vt 0.403846 0.104167 -vt 0.346154 0.104167 -vt 0.403846 0.083333 -vt 0.461538 0.104167 -vt 0.461538 0.083333 -vt 0.519231 0.104167 -vt 0.519231 0.083333 -vt 0.576923 0.104167 -vt 0.615385 0.083333 -vt 0.634615 0.104167 -vt 0.634615 0.083333 -vt 0.692308 0.104167 -vt 0.000000 0.083333 -vt 0.057692 0.104167 -vt 0.000000 0.104167 -vt 0.057692 0.083333 -vt 0.115385 0.104167 -vt 0.115385 0.083333 -vt 0.173077 0.104167 -vt 0.173077 0.083333 -vt 0.230769 0.104167 -vt 0.230769 0.083333 -vt 0.288462 0.104167 -vt 0.288462 0.083333 -vt 0.692308 0.354167 -vt 0.692308 0.416667 -vt 0.692308 0.604167 -vt 0.692308 0.791667 -vt 0.692308 0.541667 -vt 0.692308 0.729167 -vt 0.692308 0.260417 -vt 0.692308 0.260417 -vt 0.692308 0.260417 -vt 0.692308 0.260417 -vt 0.384615 0.083333 -vt 0.442308 0.083333 -vt 0.500000 0.083333 -vt 0.557692 0.083333 -vt 0.576923 0.083333 -vt 0.673077 0.083333 -vt 0.038462 0.083333 -vt 0.096154 0.083333 -vt 0.153846 0.083333 -vt 0.211538 0.083333 -vt 0.269231 0.083333 -vt 0.326923 0.083333 -vt 0.576923 0.916667 -vt 0.000000 0.916667 -vt 0.403846 0.916667 -vt 0.230769 0.916667 -vt 0.634615 0.916667 -vt 0.057692 0.916667 -vt 0.461538 0.916667 -vt 0.288462 0.916667 -vt 0.115385 0.916667 -vt 0.519231 0.916667 -vt 0.346154 0.916667 -vt 0.173077 0.916667 -vt 0.288462 0.958333 -vt 0.115385 0.958333 -vt 0.557692 0.958333 -vt 0.519231 0.958333 -vt 0.346154 0.958333 -vt 0.211538 0.958333 -vt 0.173077 0.958333 -vt 0.576923 0.958333 -vt 0.000000 0.958333 -vt 0.442308 0.958333 -vt 0.403846 0.958333 -vt 0.230769 0.958333 -vt 0.692308 0.916667 -vt 0.634615 0.958333 -vt 0.057692 0.958333 -vt 0.461538 0.958333 -vt 0.038462 0.958333 -vt 0.019231 1.000000 -vt 0.096154 0.958333 -vt 0.076923 1.000000 -vt 0.153846 0.958333 -vt 0.134615 1.000000 -vt 0.192308 1.000000 -vt 0.269231 0.958333 -vt 0.250000 1.000000 -vt 0.326923 0.958333 -vt 0.307692 1.000000 -vt 0.384615 0.958333 -vt 0.365385 1.000000 -vt 0.423077 1.000000 -vt 0.500000 0.958333 -vt 0.480769 1.000000 -vt 0.538462 1.000000 -vt 0.615385 0.958333 -vt 0.596154 1.000000 -vt 0.673077 0.958333 -vt 0.653846 1.000000 -vt 0.019231 0.000000 -vt 0.653846 0.000000 -vt 0.596154 0.000000 -vt 0.538462 0.000000 -vt 0.480769 0.000000 -vt 0.423077 0.000000 -vt 0.365385 0.000000 -vt 0.307692 0.000000 -vt 0.250000 0.000000 -vt 0.192308 0.000000 -vt 0.134615 0.000000 -vt 0.076923 0.000000 -vt 0.846154 0.270833 -vt 0.692308 0.437500 -vt 0.692308 0.270833 -vt 1.000000 0.270833 -vt 0.846154 0.437500 -vt 0.846154 0.270833 -vt 0.692308 0.437500 -vt 0.692308 0.270833 -vt 1.000000 0.270833 -vt 0.846154 0.437500 -vt 1.000000 0.437500 -vt 1.000000 0.437500 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn -0.5000 0.7071 -0.5000 -vn -0.7498 -0.0000 0.6616 -vn 0.6616 0.0000 -0.7498 -vn -0.6616 -0.0000 0.7498 -vn 0.7498 0.0000 -0.6616 -vn 0.5000 0.7071 0.5000 -vn -0.5000 0.7071 0.5000 -vn 0.6616 -0.0000 0.7498 -vn -0.7498 0.0000 -0.6616 -vn 0.7498 0.0000 0.6616 -vn -0.6616 0.0000 -0.7498 -vn 0.5000 0.7071 -0.5000 -vn 0.8660 0.0000 -0.5000 -vn 1.0000 0.0000 0.0000 -vn 0.5000 -0.0000 0.8660 -vn 0.0000 -0.0000 1.0000 -vn -0.8660 -0.0000 0.5000 -vn -1.0000 -0.0000 0.0000 -vn 0.5000 0.0000 -0.8660 -vn -0.5000 0.0000 -0.8660 -vn 0.0000 0.0000 -1.0000 -vn 0.8660 -0.0000 0.5000 -vn -0.5000 -0.0000 0.8660 -vn -0.8660 0.0000 -0.5000 -vn 0.8624 0.0912 -0.4979 -vn 0.0000 0.0912 -0.9958 -vn 0.4979 0.0912 0.8624 -vn -0.8624 0.0912 0.4979 -vn 0.4979 0.0912 -0.8624 -vn -0.4979 0.0912 -0.8624 -vn 0.8624 0.0912 0.4979 -vn -0.4979 0.0912 0.8624 -vn -0.8624 0.0912 -0.4979 -vn 0.9958 0.0912 0.0000 -vn 0.0000 0.0912 0.9958 -vn -0.9958 0.0912 -0.0000 -vn -0.4330 0.5000 0.7500 -vn -0.7500 0.5000 -0.4330 -vn 0.7500 0.5000 -0.4330 -vn 0.8660 0.5000 0.0000 -vn 0.0000 0.5000 0.8660 -vn -0.7500 0.5000 0.4330 -vn -0.8660 0.5000 -0.0000 -vn 0.0000 0.5000 -0.8660 -vn 0.7500 0.5000 0.4330 -vn 0.4330 0.5000 0.7500 -vn 0.4330 0.5000 -0.7500 -vn -0.4330 0.5000 -0.7500 -vn 0.4472 -0.4472 0.7746 -vn 0.0000 -0.4472 0.8944 -vn -0.4472 -0.4472 0.7746 -vn -0.7746 -0.4472 0.4472 -vn -0.8944 -0.4472 0.0000 -vn -0.7746 -0.4472 -0.4472 -vn -0.4472 -0.4472 -0.7746 -vn 0.0000 -0.4472 -0.8944 -vn 0.4472 -0.4472 -0.7746 -vn 0.7746 -0.4472 -0.4472 -vn 0.8944 -0.4472 0.0000 -vn 0.7746 -0.4472 0.4472 -vn 0.9659 -0.0000 0.2588 -vn 0.9659 0.0000 -0.2588 -vn -0.9659 0.0000 -0.2588 -vn -0.9659 0.0000 0.2588 -s off -f 3892/5556/446 3893/5557/446 3894/5558/446 -f 3895/5559/446 3896/5560/446 3893/5557/446 -f 3897/5561/446 3896/5562/446 3898/5563/446 -f 3899/5564/446 3900/5565/446 3897/5561/446 -f 3901/5566/446 3902/5567/446 3899/5564/446 -f 3903/5568/446 3904/5569/446 3901/5566/446 -f 3905/5570/446 3906/5571/446 3903/5568/446 -f 3907/5572/446 3908/5573/446 3905/5570/446 -f 3907/5572/446 3909/5574/446 3910/5575/446 -f 3911/5576/446 3912/5577/446 3909/5574/446 -f 3913/5578/446 3912/5577/446 3914/5579/446 -f 3892/5556/446 3915/5580/446 3913/5578/446 -f 3916/5581/447 3917/5582/447 3918/5583/447 -f 3919/5584/447 3920/5585/447 3916/5581/447 -f 3921/5586/447 3922/5587/447 3919/5584/447 -f 3923/5588/447 3924/5589/447 3921/5586/447 -f 3925/5590/447 3926/5591/447 3923/5592/447 -f 3925/5590/447 3927/5593/447 3928/5594/447 -f 3929/5595/447 3930/5596/447 3927/5593/447 -f 3931/5597/447 3930/5596/447 3932/5598/447 -f 3933/5599/447 3934/5600/447 3931/5597/447 -f 3933/5599/447 3935/5601/447 3936/5602/447 -f 3937/5603/447 3935/5601/447 3938/5604/447 -f 3918/5583/447 3939/5605/447 3937/5603/447 -f 3940/5606/447 3941/5607/447 3942/5608/447 -f 3943/5609/447 3944/5610/447 3940/5606/447 -f 3945/5611/447 3946/5612/447 3943/5609/447 -f 3947/5613/447 3948/5614/447 3945/5611/447 -f 3949/5615/447 3950/5616/447 3947/5617/447 -f 3949/5615/447 3951/5618/447 3952/5619/447 -f 3953/5620/447 3954/5621/447 3951/5618/447 -f 3955/5622/447 3954/5621/447 3956/5623/447 -f 3957/5624/447 3958/5625/447 3955/5622/447 -f 3957/5624/447 3959/5626/447 3960/5627/447 -f 3961/5628/447 3959/5626/447 3962/5629/447 -f 3942/5608/447 3963/5630/447 3961/5628/447 -f 3964/5631/447 3965/5632/447 3966/5633/447 -f 3967/5634/447 3968/5635/447 3964/5631/447 -f 3969/5636/447 3970/5637/447 3967/5634/447 -f 3971/5638/447 3972/5639/447 3969/5636/447 -f 3973/5640/447 3974/5641/447 3971/5642/447 -f 3973/5640/447 3975/5643/447 3976/5644/447 -f 3977/5645/447 3978/5646/447 3975/5643/447 -f 3979/5647/447 3978/5646/447 3980/5648/447 -f 3981/5649/447 3982/5650/447 3979/5647/447 -f 3981/5649/447 3983/5651/447 3984/5652/447 -f 3985/5653/447 3983/5651/447 3986/5654/447 -f 3966/5633/447 3987/5655/447 3985/5653/447 -f 3988/5656/446 3989/5657/446 3990/5658/446 -f 3991/5659/446 3992/5660/446 3988/5656/446 -f 3991/5659/446 3993/5661/446 3994/5662/446 -f 3995/5663/446 3996/5664/446 3993/5661/446 -f 3997/5665/446 3996/5666/446 3998/5667/446 -f 3999/5668/446 4000/5669/446 3997/5665/446 -f 4001/5670/446 4002/5671/446 3999/5668/446 -f 4003/5672/446 4004/5673/446 4001/5670/446 -f 4005/5674/446 4006/5675/446 4003/5672/446 -f 4007/5676/446 4008/5677/446 4005/5674/446 -f 4007/5676/446 4009/5678/446 4010/5679/446 -f 4011/5680/446 3989/5657/446 4009/5678/446 -f 4012/5681/446 4013/5682/446 4014/5683/446 -f 4015/5684/446 4016/5685/446 4012/5681/446 -f 4015/5684/446 4017/5686/446 4018/5687/446 -f 4019/5688/446 4020/5689/446 4017/5686/446 -f 4021/5690/446 4020/5691/446 4022/5692/446 -f 4023/5693/446 4024/5694/446 4021/5690/446 -f 4025/5695/446 4026/5696/446 4023/5693/446 -f 4027/5697/446 4028/5698/446 4025/5695/446 -f 4029/5699/446 4030/5700/446 4027/5697/446 -f 4031/5701/446 4032/5702/446 4029/5699/446 -f 4031/5701/446 4033/5703/446 4034/5704/446 -f 4035/5705/446 4013/5682/446 4033/5703/446 -f 4036/5706/447 4037/5707/447 4038/5708/447 -f 4039/5709/448 4040/5710/448 4041/5711/448 -f 4038/5712/449 4040/5713/449 4036/5714/449 -f 4040/5713/450 4037/5707/450 4036/5714/450 -f 4042/5715/451 4043/5716/451 4044/5717/451 -f 4045/5718/452 4042/5715/452 4044/5717/452 -f 4046/5719/453 4042/5720/453 4047/5721/453 -f 4044/5722/447 4043/5716/447 4045/5723/447 -f 4048/5724/447 4049/5725/447 4050/5726/447 -f 4051/5727/454 4052/5728/454 4053/5729/454 -f 4050/5730/455 4052/5731/455 4048/5732/455 -f 4052/5731/456 4049/5725/456 4048/5732/456 -f 4054/5733/457 4055/5734/457 4056/5735/457 -f 4057/5736/458 4054/5733/458 4056/5735/458 -f 4058/5737/459 4054/5738/459 4059/5739/459 -f 4056/5740/447 4055/5734/447 4057/5741/447 -f 4060/5742/447 4061/5743/447 4062/5744/447 -f 4063/5745/447 4064/5746/447 4061/5743/447 -f 4065/5747/447 4066/5748/447 4064/5746/447 -f 4067/5749/447 4068/5750/447 4066/5748/447 -f 4068/5750/447 4069/5751/447 4070/5752/447 -f 4069/5753/447 4071/5754/447 4070/5752/447 -f 4072/5755/447 4073/5756/447 4071/5757/447 -f 4074/5758/447 4075/5759/447 4073/5756/447 -f 4076/5760/447 4077/5761/447 4075/5759/447 -f 4078/5762/447 4079/5763/447 4077/5761/447 -f 4080/5764/447 4081/5765/447 4079/5763/447 -f 4082/5766/447 4062/5744/447 4081/5765/447 -f 3892/5556/446 3895/5559/446 3893/5557/446 -f 3895/5559/446 3898/5767/446 3896/5560/446 -f 3897/5561/446 3900/5565/446 3896/5562/446 -f 3899/5564/446 3902/5567/446 3900/5565/446 -f 3901/5566/446 3904/5569/446 3902/5567/446 -f 3903/5568/446 3906/5571/446 3904/5569/446 -f 3905/5570/446 3908/5573/446 3906/5571/446 -f 3907/5572/446 3910/5575/446 3908/5573/446 -f 3907/5572/446 3911/5576/446 3909/5574/446 -f 3911/5576/446 3914/5579/446 3912/5577/446 -f 3913/5578/446 3915/5580/446 3912/5577/446 -f 3892/5556/446 3894/5558/446 3915/5580/446 -f 3916/5581/447 3920/5585/447 3917/5582/447 -f 3919/5584/447 3922/5587/447 3920/5585/447 -f 3921/5586/447 3924/5589/447 3922/5587/447 -f 3923/5588/447 3926/5768/447 3924/5589/447 -f 3925/5590/447 3928/5594/447 3926/5591/447 -f 3925/5590/447 3929/5595/447 3927/5593/447 -f 3929/5595/447 3932/5598/447 3930/5596/447 -f 3931/5597/447 3934/5600/447 3930/5596/447 -f 3933/5599/447 3936/5602/447 3934/5600/447 -f 3933/5599/447 3938/5604/447 3935/5601/447 -f 3937/5603/447 3939/5605/447 3935/5601/447 -f 3918/5583/447 3917/5582/447 3939/5605/447 -f 3940/5606/447 3944/5610/447 3941/5607/447 -f 3943/5609/447 3946/5612/447 3944/5610/447 -f 3945/5611/447 3948/5614/447 3946/5612/447 -f 3947/5613/447 3950/5769/447 3948/5614/447 -f 3949/5615/447 3952/5619/447 3950/5616/447 -f 3949/5615/447 3953/5620/447 3951/5618/447 -f 3953/5620/447 3956/5623/447 3954/5621/447 -f 3955/5622/447 3958/5625/447 3954/5621/447 -f 3957/5624/447 3960/5627/447 3958/5625/447 -f 3957/5624/447 3962/5629/447 3959/5626/447 -f 3961/5628/447 3963/5630/447 3959/5626/447 -f 3942/5608/447 3941/5607/447 3963/5630/447 -f 3964/5631/447 3968/5635/447 3965/5632/447 -f 3967/5634/447 3970/5637/447 3968/5635/447 -f 3969/5636/447 3972/5639/447 3970/5637/447 -f 3971/5638/447 3974/5770/447 3972/5639/447 -f 3973/5640/447 3976/5644/447 3974/5641/447 -f 3973/5640/447 3977/5645/447 3975/5643/447 -f 3977/5645/447 3980/5648/447 3978/5646/447 -f 3979/5647/447 3982/5650/447 3978/5646/447 -f 3981/5649/447 3984/5652/447 3982/5650/447 -f 3981/5649/447 3986/5654/447 3983/5651/447 -f 3985/5653/447 3987/5655/447 3983/5651/447 -f 3966/5633/447 3965/5632/447 3987/5655/447 -f 3988/5656/446 3992/5660/446 3989/5657/446 -f 3991/5659/446 3994/5662/446 3992/5660/446 -f 3991/5659/446 3995/5663/446 3993/5661/446 -f 3995/5663/446 3998/5771/446 3996/5664/446 -f 3997/5665/446 4000/5669/446 3996/5666/446 -f 3999/5668/446 4002/5671/446 4000/5669/446 -f 4001/5670/446 4004/5673/446 4002/5671/446 -f 4003/5672/446 4006/5675/446 4004/5673/446 -f 4005/5674/446 4008/5677/446 4006/5675/446 -f 4007/5676/446 4010/5679/446 4008/5677/446 -f 4007/5676/446 4011/5680/446 4009/5678/446 -f 4011/5680/446 3990/5658/446 3989/5657/446 -f 4012/5681/446 4016/5685/446 4013/5682/446 -f 4015/5684/446 4018/5687/446 4016/5685/446 -f 4015/5684/446 4019/5688/446 4017/5686/446 -f 4019/5688/446 4022/5772/446 4020/5689/446 -f 4021/5690/446 4024/5694/446 4020/5691/446 -f 4023/5693/446 4026/5696/446 4024/5694/446 -f 4025/5695/446 4028/5698/446 4026/5696/446 -f 4027/5697/446 4030/5700/446 4028/5698/446 -f 4029/5699/446 4032/5702/446 4030/5700/446 -f 4031/5701/446 4034/5704/446 4032/5702/446 -f 4031/5701/446 4035/5705/446 4033/5703/446 -f 4035/5705/446 4014/5683/446 4013/5682/446 -f 4038/5712/449 4041/5773/449 4040/5713/449 -f 4040/5713/450 4039/5709/450 4037/5707/450 -f 4042/5715/451 4046/5719/451 4043/5716/451 -f 4045/5718/452 4047/5774/452 4042/5715/452 -f 4050/5730/455 4053/5775/455 4052/5731/455 -f 4052/5731/456 4051/5727/456 4049/5725/456 -f 4054/5733/457 4058/5737/457 4055/5734/457 -f 4057/5736/458 4059/5776/458 4054/5733/458 -f 4060/5742/447 4063/5777/447 4061/5743/447 -f 4063/5745/447 4065/5778/447 4064/5746/447 -f 4065/5747/447 4067/5779/447 4066/5748/447 -f 4067/5749/447 4083/5780/447 4068/5750/447 -f 4068/5750/447 4083/5781/447 4069/5751/447 -f 4069/5753/447 4072/5782/447 4071/5754/447 -f 4072/5755/447 4074/5783/447 4073/5756/447 -f 4074/5758/447 4076/5784/447 4075/5759/447 -f 4076/5760/447 4078/5785/447 4077/5761/447 -f 4078/5762/447 4080/5786/447 4079/5763/447 -f 4080/5764/447 4082/5787/447 4081/5765/447 -f 4082/5766/447 4060/5788/447 4062/5744/447 -s 1 -f 4068/5750/460 3913/5578/461 4066/5748/461 -f 4061/5743/462 3907/5572/463 4062/5744/463 -f 4079/5763/464 3901/5566/465 4077/5761/465 -f 4070/5752/466 3892/5556/460 4068/5750/460 -f 4073/5756/467 3898/5563/468 4071/5757/468 -f 4064/5746/469 3911/5576/462 4061/5743/462 -f 4081/5765/470 3903/5568/464 4079/5763/464 -f 4071/5754/468 3895/5559/466 4070/5752/466 -f 4075/5759/471 3897/5561/467 4073/5756/467 -f 4066/5748/461 3914/5579/469 4064/5746/469 -f 4062/5744/463 3905/5570/470 4081/5765/470 -f 4077/5761/465 3899/5564/471 4075/5759/471 -f 3912/5577/469 3937/5603/462 3909/5574/462 -f 3908/5573/470 3931/5597/464 3906/5571/464 -f 3896/5560/468 3921/5586/466 3893/5557/466 -f 3902/5567/471 3925/5590/467 3900/5565/467 -f 3915/5580/461 3918/5583/469 3912/5577/469 -f 3910/5575/463 3933/5599/470 3908/5573/470 -f 3904/5569/465 3929/5595/471 3902/5567/471 -f 3894/5558/460 3916/5581/461 3915/5580/461 -f 3909/5574/462 3938/5604/463 3910/5575/463 -f 3906/5571/464 3932/5598/465 3904/5569/465 -f 3893/5557/466 3919/5584/460 3894/5558/460 -f 3900/5565/467 3923/5592/468 3896/5562/468 -f 3924/5589/466 3991/5659/460 3922/5587/460 -f 3928/5594/467 3998/5667/468 3926/5591/468 -f 3917/5582/469 4011/5680/462 3939/5605/462 -f 3936/5602/470 4003/5672/464 3934/5600/464 -f 3926/5768/468 3995/5663/466 3924/5589/466 -f 3927/5593/471 3997/5665/467 3928/5594/467 -f 3920/5585/461 3990/5658/469 3917/5582/469 -f 3935/5601/463 4005/5674/470 3936/5602/470 -f 3930/5596/465 3999/5668/471 3927/5593/471 -f 3922/5587/460 3988/5656/461 3920/5585/461 -f 3939/5605/462 4007/5676/463 3935/5601/463 -f 3934/5600/464 4001/5670/465 3930/5596/465 -f 3989/5657/469 3961/5628/462 4009/5678/462 -f 4008/5677/470 3955/5622/464 4006/5675/464 -f 3996/5664/468 3945/5611/466 3993/5661/466 -f 4002/5671/471 3949/5615/467 4000/5669/467 -f 3992/5660/461 3942/5608/469 3989/5657/469 -f 4010/5679/463 3957/5624/470 4008/5677/470 -f 4004/5673/465 3953/5620/471 4002/5671/471 -f 3994/5662/460 3940/5606/461 3992/5660/461 -f 4009/5678/462 3962/5629/463 4010/5679/463 -f 4006/5675/464 3956/5623/465 4004/5673/465 -f 3993/5661/466 3943/5609/460 3994/5662/460 -f 4000/5669/467 3947/5617/468 3996/5666/468 -f 3948/5614/466 4015/5684/460 3946/5612/460 -f 3952/5619/467 4022/5692/468 3950/5616/468 -f 3941/5607/469 4035/5705/462 3963/5630/462 -f 3960/5627/470 4027/5697/464 3958/5625/464 -f 3950/5769/468 4019/5688/466 3948/5614/466 -f 3951/5618/471 4021/5690/467 3952/5619/467 -f 3944/5610/461 4014/5683/469 3941/5607/469 -f 3959/5626/463 4029/5699/470 3960/5627/470 -f 3954/5621/465 4023/5693/471 3951/5618/471 -f 3946/5612/460 4012/5681/461 3944/5610/461 -f 3963/5630/462 4031/5701/463 3959/5626/463 -f 3958/5625/464 4025/5695/465 3954/5621/465 -f 4013/5682/469 3985/5653/462 4033/5703/462 -f 4032/5702/470 3979/5647/464 4030/5700/464 -f 4020/5689/468 3969/5636/466 4017/5686/466 -f 4026/5696/471 3973/5640/467 4024/5694/467 -f 4016/5685/461 3966/5633/469 4013/5682/469 -f 4034/5704/463 3981/5649/470 4032/5702/470 -f 4028/5698/465 3977/5645/471 4026/5696/471 -f 4018/5687/460 3964/5631/461 4016/5685/461 -f 4033/5703/462 3986/5654/463 4034/5704/463 -f 4030/5700/464 3980/5648/465 4028/5698/465 -f 4017/5686/466 3967/5634/460 4018/5687/460 -f 4024/5694/467 3971/5642/468 4020/5691/468 -f 3972/5639/466 4084/5789/472 3970/5637/460 -f 3976/5644/467 4085/5790/473 3974/5641/468 -f 3965/5632/469 4086/5791/474 3987/5655/462 -f 3984/5652/470 4087/5792/475 3982/5650/464 -f 3974/5770/468 4088/5793/476 3972/5639/466 -f 3975/5643/471 4089/5794/477 3976/5644/467 -f 3968/5635/461 4090/5795/478 3965/5632/469 -f 3983/5651/463 4091/5796/479 3984/5652/470 -f 3978/5646/465 4092/5797/480 3975/5643/471 -f 3970/5637/460 4093/5798/481 3968/5635/461 -f 3987/5655/462 4094/5799/482 3983/5651/463 -f 3982/5650/464 4095/5800/483 3978/5646/465 -f 4094/5799/482 4096/5801/484 4091/5796/479 -f 4095/5800/483 4097/5802/485 4092/5797/480 -f 4093/5798/481 4098/5803/486 4099/5804/487 -f 4086/5791/474 4100/5805/488 4094/5799/482 -f 4095/5800/483 4101/5806/489 4102/5807/490 -f 4088/5793/476 4098/5808/486 4084/5789/472 -f 4089/5794/477 4103/5809/491 4085/5790/473 -f 4086/5791/474 4104/5810/492 4105/5811/493 -f 4091/5796/479 4101/5812/489 4087/5792/475 -f 4085/5813/473 4106/5814/494 4088/5793/476 -f 4092/5797/480 4107/5815/495 4089/5794/477 -f 4093/5798/481 4104/5816/492 4090/5795/478 -f 4103/5809/491 4107/5817/495 4108/5818/446 -f 4107/5815/495 4097/5819/485 4108/5820/446 -f 4097/5802/485 4102/5821/490 4108/5822/446 -f 4102/5807/490 4101/5806/489 4108/5823/446 -f 4101/5812/489 4096/5824/484 4108/5825/446 -f 4096/5801/484 4100/5826/488 4108/5827/446 -f 4100/5805/488 4105/5828/493 4108/5829/446 -f 4105/5811/493 4104/5810/492 4108/5830/446 -f 4104/5816/492 4099/5831/487 4108/5832/446 -f 4099/5804/487 4098/5803/486 4108/5833/446 -f 4098/5808/486 4106/5834/494 4108/5835/446 -f 4106/5814/494 4103/5836/491 4108/5837/446 -f 4074/5783/496 4072/5755/497 4109/5838/447 -f 4072/5782/497 4069/5753/498 4109/5839/447 -f 4069/5751/498 4083/5781/499 4109/5840/447 -f 4083/5780/499 4067/5749/500 4109/5841/447 -f 4067/5779/500 4065/5747/501 4109/5842/447 -f 4065/5778/501 4063/5745/502 4109/5843/447 -f 4063/5777/502 4060/5742/503 4109/5844/447 -f 4060/5788/503 4082/5766/504 4109/5845/447 -f 4082/5787/504 4080/5764/505 4109/5846/447 -f 4080/5786/505 4078/5762/506 4109/5847/447 -f 4078/5785/506 4076/5760/507 4109/5848/447 -f 4076/5784/507 4074/5758/496 4109/5849/447 -f 4110/5850/461 4111/5851/508 4112/5852/508 -f 4113/5853/509 4114/5854/461 4110/5850/461 -f 4115/5855/465 4116/5856/510 4117/5857/510 -f 4118/5858/511 4119/5859/465 4115/5855/465 -f 4068/5750/460 3892/5556/460 3913/5578/461 -f 4061/5743/462 3911/5576/462 3907/5572/463 -f 4079/5763/464 3903/5568/464 3901/5566/465 -f 4070/5752/466 3895/5559/466 3892/5556/460 -f 4073/5756/467 3897/5561/467 3898/5563/468 -f 4064/5746/469 3914/5579/469 3911/5576/462 -f 4081/5765/470 3905/5570/470 3903/5568/464 -f 4071/5754/468 3898/5767/468 3895/5559/466 -f 4075/5759/471 3899/5564/471 3897/5561/467 -f 4066/5748/461 3913/5578/461 3914/5579/469 -f 4062/5744/463 3907/5572/463 3905/5570/470 -f 4077/5761/465 3901/5566/465 3899/5564/471 -f 3912/5577/469 3918/5583/469 3937/5603/462 -f 3908/5573/470 3933/5599/470 3931/5597/464 -f 3896/5560/468 3923/5588/468 3921/5586/466 -f 3902/5567/471 3929/5595/471 3925/5590/467 -f 3915/5580/461 3916/5581/461 3918/5583/469 -f 3910/5575/463 3938/5604/463 3933/5599/470 -f 3904/5569/465 3932/5598/465 3929/5595/471 -f 3894/5558/460 3919/5584/460 3916/5581/461 -f 3909/5574/462 3937/5603/462 3938/5604/463 -f 3906/5571/464 3931/5597/464 3932/5598/465 -f 3893/5557/466 3921/5586/466 3919/5584/460 -f 3900/5565/467 3925/5590/467 3923/5592/468 -f 3924/5589/466 3995/5663/466 3991/5659/460 -f 3928/5594/467 3997/5665/467 3998/5667/468 -f 3917/5582/469 3990/5658/469 4011/5680/462 -f 3936/5602/470 4005/5674/470 4003/5672/464 -f 3926/5768/468 3998/5771/468 3995/5663/466 -f 3927/5593/471 3999/5668/471 3997/5665/467 -f 3920/5585/461 3988/5656/461 3990/5658/469 -f 3935/5601/463 4007/5676/463 4005/5674/470 -f 3930/5596/465 4001/5670/465 3999/5668/471 -f 3922/5587/460 3991/5659/460 3988/5656/461 -f 3939/5605/462 4011/5680/462 4007/5676/463 -f 3934/5600/464 4003/5672/464 4001/5670/465 -f 3989/5657/469 3942/5608/469 3961/5628/462 -f 4008/5677/470 3957/5624/470 3955/5622/464 -f 3996/5664/468 3947/5613/468 3945/5611/466 -f 4002/5671/471 3953/5620/471 3949/5615/467 -f 3992/5660/461 3940/5606/461 3942/5608/469 -f 4010/5679/463 3962/5629/463 3957/5624/470 -f 4004/5673/465 3956/5623/465 3953/5620/471 -f 3994/5662/460 3943/5609/460 3940/5606/461 -f 4009/5678/462 3961/5628/462 3962/5629/463 -f 4006/5675/464 3955/5622/464 3956/5623/465 -f 3993/5661/466 3945/5611/466 3943/5609/460 -f 4000/5669/467 3949/5615/467 3947/5617/468 -f 3948/5614/466 4019/5688/466 4015/5684/460 -f 3952/5619/467 4021/5690/467 4022/5692/468 -f 3941/5607/469 4014/5683/469 4035/5705/462 -f 3960/5627/470 4029/5699/470 4027/5697/464 -f 3950/5769/468 4022/5772/468 4019/5688/466 -f 3951/5618/471 4023/5693/471 4021/5690/467 -f 3944/5610/461 4012/5681/461 4014/5683/469 -f 3959/5626/463 4031/5701/463 4029/5699/470 -f 3954/5621/465 4025/5695/465 4023/5693/471 -f 3946/5612/460 4015/5684/460 4012/5681/461 -f 3963/5630/462 4035/5705/462 4031/5701/463 -f 3958/5625/464 4027/5697/464 4025/5695/465 -f 4013/5682/469 3966/5633/469 3985/5653/462 -f 4032/5702/470 3981/5649/470 3979/5647/464 -f 4020/5689/468 3971/5638/468 3969/5636/466 -f 4026/5696/471 3977/5645/471 3973/5640/467 -f 4016/5685/461 3964/5631/461 3966/5633/469 -f 4034/5704/463 3986/5654/463 3981/5649/470 -f 4028/5698/465 3980/5648/465 3977/5645/471 -f 4018/5687/460 3967/5634/460 3964/5631/461 -f 4033/5703/462 3985/5653/462 3986/5654/463 -f 4030/5700/464 3979/5647/464 3980/5648/465 -f 4017/5686/466 3969/5636/466 3967/5634/460 -f 4024/5694/467 3973/5640/467 3971/5642/468 -f 3972/5639/466 4088/5793/476 4084/5789/472 -f 3976/5644/467 4089/5794/477 4085/5790/473 -f 3965/5632/469 4090/5795/478 4086/5791/474 -f 3984/5652/470 4091/5796/479 4087/5792/475 -f 3974/5770/468 4085/5813/473 4088/5793/476 -f 3975/5643/471 4092/5797/480 4089/5794/477 -f 3968/5635/461 4093/5798/481 4090/5795/478 -f 3983/5651/463 4094/5799/482 4091/5796/479 -f 3978/5646/465 4095/5800/483 4092/5797/480 -f 3970/5637/460 4084/5789/472 4093/5798/481 -f 3987/5655/462 4086/5791/474 4094/5799/482 -f 3982/5650/464 4087/5792/475 4095/5800/483 -f 4094/5799/482 4100/5826/488 4096/5801/484 -f 4095/5800/483 4102/5821/490 4097/5802/485 -f 4093/5798/481 4084/5789/472 4098/5803/486 -f 4086/5791/474 4105/5828/493 4100/5805/488 -f 4095/5800/483 4087/5792/475 4101/5806/489 -f 4088/5793/476 4106/5834/494 4098/5808/486 -f 4089/5794/477 4107/5817/495 4103/5809/491 -f 4086/5791/474 4090/5795/478 4104/5810/492 -f 4091/5796/479 4096/5824/484 4101/5812/489 -f 4085/5813/473 4103/5836/491 4106/5814/494 -f 4092/5797/480 4097/5819/485 4107/5815/495 -f 4093/5798/481 4099/5831/487 4104/5816/492 -f 4110/5850/461 4114/5854/461 4111/5851/508 -f 4113/5853/509 4120/5860/509 4114/5854/461 -f 4115/5855/465 4119/5859/465 4116/5856/510 -f 4118/5858/511 4121/5861/511 4119/5859/465 -o ABM_Missile -v -0.176777 3.500000 -0.176777 -v 0.176777 3.500000 -0.176777 -v 0.176777 3.500000 0.176777 -v 0.154329 2.250000 -0.019030 -v 0.161612 2.250000 -0.161612 -v 0.202165 2.250000 -0.134515 -v 0.250000 2.250000 0.000000 -v 0.250000 2.250000 -0.125000 -v 0.297835 2.250000 -0.134515 -v 0.345671 2.250000 -0.019030 -v 0.338388 2.250000 -0.161612 -v 0.426777 2.250000 -0.073223 -v 0.480970 2.250000 -0.154329 -v 0.365485 2.250000 -0.202165 -v 0.500000 2.250000 -0.250000 -v 0.375000 2.250000 -0.250000 -v 0.480970 2.250000 -0.345671 -v 0.365485 2.250000 -0.297835 -v 0.338388 2.250000 -0.338388 -v 0.426777 2.250000 -0.426777 -v 0.345671 2.250000 -0.480970 -v 0.297835 2.250000 -0.365485 -v 0.250000 2.250000 -0.500000 -v 0.250000 2.250000 -0.375000 -v 0.202165 2.250000 -0.365485 -v 0.154329 2.250000 -0.480970 -v 0.161612 2.250000 -0.338388 -v 0.073223 2.250000 -0.426777 -v 0.000000 2.250000 -0.250000 -v 0.134515 2.250000 -0.202165 -v 0.019030 2.250000 -0.154329 -v 0.019030 2.250000 -0.345671 -v 0.134515 2.250000 -0.297835 -v 0.073223 2.250000 -0.073223 -v 0.125000 2.250000 -0.250000 -v 0.426777 2.000000 -0.426777 -v 0.426777 2.000000 -0.073223 -v 0.073223 2.000000 -0.073223 -v -0.031250 8.000000 -0.125000 -v 0.000000 6.500000 -0.875000 -v -0.031250 6.000000 -0.125000 -v 0.000000 7.500000 -0.875000 -v 0.031250 6.000000 -0.125000 -v 0.031250 8.000000 -0.125000 -v 0.031250 2.500000 -0.125000 -v -0.031250 2.500000 -0.125000 -v 0.000000 2.500000 -1.125000 -v 0.031250 4.500000 -0.125000 -v 0.000000 4.000000 -1.125000 -v -0.031250 4.500000 -0.125000 -v -0.062500 7.750000 -0.875000 -v 0.031250 7.750000 -0.820873 -v 0.031250 7.750000 -0.929127 -v 0.062500 6.250000 -0.875000 -v 0.031250 6.250000 -0.820873 -v -0.031250 6.250000 -0.820873 -v -0.154329 2.250000 0.019030 -v -0.161612 2.250000 0.161612 -v -0.202165 2.250000 0.134515 -v -0.250000 2.250000 0.000000 -v -0.250000 2.250000 0.125000 -v -0.297835 2.250000 0.134515 -v -0.345671 2.250000 0.019030 -v -0.338388 2.250000 0.161612 -v -0.426777 2.250000 0.073223 -v -0.480970 2.250000 0.154329 -v -0.365485 2.250000 0.202165 -v -0.500000 2.250000 0.250000 -v -0.375000 2.250000 0.250000 -v -0.480970 2.250000 0.345671 -v -0.365485 2.250000 0.297835 -v -0.338388 2.250000 0.338388 -v -0.426777 2.250000 0.426777 -v -0.345671 2.250000 0.480970 -v -0.297835 2.250000 0.365485 -v -0.250000 2.250000 0.500000 -v -0.250000 2.250000 0.375000 -v -0.202164 2.250000 0.365485 -v -0.154329 2.250000 0.480970 -v -0.161612 2.250000 0.338388 -v -0.073223 2.250000 0.426777 -v 0.000000 2.250000 0.250000 -v -0.134515 2.250000 0.202165 -v -0.019030 2.250000 0.154329 -v -0.019030 2.250000 0.345671 -v -0.134515 2.250000 0.297835 -v -0.073223 2.250000 0.073223 -v -0.125000 2.250000 0.250000 -v -0.426777 2.000000 0.073223 -v -0.250000 2.000000 0.000000 -v -0.073223 2.000000 0.073223 -v -0.031250 2.500000 0.125000 -v 0.031250 2.500000 0.125000 -v 0.000000 2.500000 1.125000 -v -0.031250 4.500000 0.125000 -v 0.000000 4.000000 1.125000 -v 0.031250 4.500000 0.125000 -v -0.019030 2.250000 -0.154329 -v -0.161612 2.250000 -0.161612 -v -0.134515 2.250000 -0.202165 -v 0.000000 2.250000 -0.250000 -v -0.125000 2.250000 -0.250000 -v -0.134515 2.250000 -0.297835 -v -0.019030 2.250000 -0.345671 -v -0.161612 2.250000 -0.338388 -v -0.073223 2.250000 -0.426777 -v -0.154329 2.250000 -0.480970 -v -0.202165 2.250000 -0.365485 -v -0.250000 2.250000 -0.500000 -v -0.250000 2.250000 -0.375000 -v -0.345671 2.250000 -0.480970 -v -0.297835 2.250000 -0.365485 -v -0.338388 2.250000 -0.338388 -v -0.426777 2.250000 -0.426777 -v -0.480970 2.250000 -0.345671 -v -0.365485 2.250000 -0.297835 -v -0.375000 2.250000 -0.250000 -v -0.500000 2.250000 -0.250000 -v -0.365485 2.250000 -0.202164 -v -0.480970 2.250000 -0.154329 -v -0.338388 2.250000 -0.161612 -v -0.426777 2.250000 -0.073223 -v -0.250000 2.250000 0.000000 -v -0.202165 2.250000 -0.134515 -v -0.154329 2.250000 -0.019030 -v -0.345671 2.250000 -0.019030 -v -0.297835 2.250000 -0.134515 -v -0.073223 2.250000 -0.073223 -v -0.250000 2.250000 -0.125000 -v -0.426777 2.000000 -0.426777 -v -0.073223 2.000000 -0.426777 -v -0.073223 2.000000 -0.073223 -v -0.125000 2.500000 -0.031250 -v -0.125000 2.500000 0.031250 -v -1.125000 2.500000 0.000000 -v -0.125000 4.500000 -0.031250 -v -1.125000 4.000000 0.000000 -v -0.125000 4.500000 0.031250 -v 0.019030 2.250000 0.154329 -v 0.161612 2.250000 0.161612 -v 0.134515 2.250000 0.202165 -v 0.000000 2.250000 0.250000 -v 0.125000 2.250000 0.250000 -v 0.134515 2.250000 0.297835 -v 0.019030 2.250000 0.345671 -v 0.161612 2.250000 0.338388 -v 0.073223 2.250000 0.426777 -v 0.154329 2.250000 0.480970 -v 0.202165 2.250000 0.365485 -v 0.250000 2.250000 0.500000 -v 0.250000 2.250000 0.375000 -v 0.345671 2.250000 0.480970 -v 0.297835 2.250000 0.365485 -v 0.338388 2.250000 0.338388 -v 0.426777 2.250000 0.426777 -v 0.480970 2.250000 0.345671 -v 0.365485 2.250000 0.297835 -v 0.500000 2.250000 0.250000 -v 0.375000 2.250000 0.250000 -v 0.365485 2.250000 0.202164 -v 0.480970 2.250000 0.154329 -v 0.338388 2.250000 0.161612 -v 0.426777 2.250000 0.073223 -v 0.250000 2.250000 0.000000 -v 0.202165 2.250000 0.134515 -v 0.154329 2.250000 0.019030 -v 0.345671 2.250000 0.019030 -v 0.297835 2.250000 0.134515 -v 0.073223 2.250000 0.073223 -v 0.250000 2.250000 0.125000 -v 0.426777 2.000000 0.426777 -v 0.073223 2.000000 0.426777 -v 0.073223 2.000000 0.073223 -v 0.125000 2.500000 0.031250 -v 0.125000 2.500000 -0.031250 -v 1.125000 2.500000 0.000000 -v 0.125000 4.500000 0.031250 -v 1.125000 4.000000 0.000000 -v 0.125000 4.500000 -0.031250 -v 0.031250 8.000000 0.125000 -v 0.000000 6.500000 0.875000 -v 0.031250 6.000000 0.125000 -v 0.000000 7.500000 0.875000 -v -0.031250 6.000000 0.125000 -v -0.031250 8.000000 0.125000 -v -0.062500 7.750000 0.875000 -v -0.031250 7.750000 0.929127 -v 0.062500 7.750000 0.875000 -v -0.062500 6.250000 0.875000 -v -0.031250 6.250000 0.820873 -v 0.031250 6.250000 0.820873 -v -0.125000 8.000000 0.031250 -v -0.875000 6.500000 0.000000 -v -0.125000 6.000000 0.031250 -v -0.875000 7.500000 0.000000 -v -0.125000 6.000000 -0.031250 -v -0.125000 8.000000 -0.031250 -v -0.875000 7.750000 0.062500 -v -0.820873 7.750000 -0.031250 -v -0.929127 7.750000 -0.031250 -v -0.875000 6.250000 -0.062500 -v -0.820873 6.250000 -0.031250 -v -0.820873 6.250000 0.031250 -v 0.125000 6.000000 -0.031250 -v 0.875000 7.500000 0.000000 -v 0.875000 6.500000 0.000000 -v 0.125000 6.000000 0.031250 -v 0.125000 8.000000 0.031250 -v 0.125000 8.000000 -0.031250 -v 0.875000 7.750000 -0.062500 -v 0.820873 7.750000 0.031250 -v 0.929127 7.750000 0.031250 -v 0.875000 6.250000 0.062500 -v 0.820873 6.250000 0.031250 -v 0.820873 6.250000 -0.031250 -v -0.095671 3.500000 -0.230970 -v 0.000000 3.500000 -0.250000 -v 0.095671 3.500000 -0.230970 -v 0.230970 3.500000 -0.095671 -v 0.250000 3.500000 0.000000 -v 0.230970 3.500000 0.095671 -v 0.095671 3.500000 0.230970 -v 0.000000 3.500000 0.250000 -v -0.095671 3.500000 0.230970 -v -0.176777 3.500000 0.176777 -v -0.230970 3.500000 0.095671 -v -0.250000 3.500000 0.000000 -v -0.230970 3.500000 -0.095671 -v 0.019030 2.000000 -0.154329 -v 0.000000 2.000000 -0.250000 -v 0.019030 2.000000 -0.345671 -v 0.073223 2.000000 -0.426777 -v 0.154329 2.000000 -0.480970 -v 0.250000 2.000000 -0.500000 -v 0.345671 2.000000 -0.480970 -v 0.480970 2.000000 -0.345671 -v 0.500000 2.000000 -0.250000 -v 0.480970 2.000000 -0.154329 -v 0.345671 2.000000 -0.019030 -v 0.250000 2.000000 0.000000 -v 0.154329 2.000000 -0.019030 -v -0.031250 7.750000 -0.929127 -v -0.031250 7.750000 -0.820873 -v 0.062500 7.750000 -0.875000 -v -0.062500 6.250000 -0.875000 -v -0.031250 6.250000 -0.929127 -v 0.031250 6.250000 -0.929127 -v -0.019030 2.000000 0.154329 -v 0.000000 2.000000 0.250000 -v -0.019030 2.000000 0.345671 -v -0.073223 2.000000 0.426777 -v -0.154329 2.000000 0.480970 -v -0.250000 2.000000 0.500000 -v -0.345671 2.000000 0.480970 -v -0.426777 2.000000 0.426777 -v -0.480970 2.000000 0.345671 -v -0.500000 2.000000 0.250000 -v -0.480970 2.000000 0.154329 -v -0.345671 2.000000 0.019030 -v -0.154329 2.000000 0.019030 -v -0.154329 2.000000 -0.019030 -v -0.250000 2.000000 0.000000 -v -0.345671 2.000000 -0.019030 -v -0.426777 2.000000 -0.073223 -v -0.480970 2.000000 -0.154329 -v -0.500000 2.000000 -0.250000 -v -0.480970 2.000000 -0.345671 -v -0.345671 2.000000 -0.480970 -v -0.250000 2.000000 -0.500000 -v -0.154329 2.000000 -0.480970 -v -0.019030 2.000000 -0.345671 -v 0.000000 2.000000 -0.250000 -v -0.019030 2.000000 -0.154329 -v 0.154329 2.000000 0.019030 -v 0.250000 2.000000 0.000000 -v 0.345671 2.000000 0.019030 -v 0.426777 2.000000 0.073223 -v 0.480970 2.000000 0.154329 -v 0.500000 2.000000 0.250000 -v 0.480970 2.000000 0.345671 -v 0.345671 2.000000 0.480970 -v 0.250000 2.000000 0.500000 -v 0.154329 2.000000 0.480970 -v 0.019030 2.000000 0.345671 -v 0.000000 2.000000 0.250000 -v 0.019030 2.000000 0.154329 -v 0.031250 7.750000 0.929127 -v 0.031250 7.750000 0.820873 -v -0.031250 7.750000 0.820873 -v 0.062500 6.250000 0.875000 -v 0.031250 6.250000 0.929127 -v -0.031250 6.250000 0.929127 -v -0.929127 7.750000 0.031250 -v -0.820873 7.750000 0.031250 -v -0.875000 7.750000 -0.062500 -v -0.875000 6.250000 0.062500 -v -0.929127 6.250000 0.031250 -v -0.929127 6.250000 -0.031250 -v 0.929127 7.750000 -0.031250 -v 0.820873 7.750000 -0.031250 -v 0.875000 7.750000 0.062500 -v 0.875000 6.250000 -0.062500 -v 0.929127 6.250000 -0.031250 -v 0.929127 6.250000 0.031250 -v 0.143506 9.000000 -0.346455 -v 0.000000 9.000000 -0.375000 -v 0.000000 10.500000 0.000000 -v 0.265165 9.000000 -0.265165 -v 0.346455 9.000000 -0.143506 -v 0.375000 9.000000 0.000000 -v 0.346455 9.000000 0.143506 -v 0.265165 9.000000 0.265165 -v 0.143506 9.000000 0.346455 -v 0.000000 9.000000 0.375000 -v -0.143506 9.000000 0.346455 -v -0.265165 9.000000 0.265165 -v -0.346455 9.000000 0.143506 -v -0.375000 9.000000 0.000000 -v -0.346455 9.000000 -0.143506 -v -0.265165 9.000000 -0.265165 -v -0.143506 9.000000 -0.346455 -v -0.375000 7.500000 0.000000 -v 0.375000 7.500000 0.000000 -v -0.346455 7.500000 0.143506 -v 0.346455 7.500000 -0.143506 -v -0.265165 7.500000 0.265165 -v 0.265165 7.500000 -0.265165 -v -0.143506 7.500000 0.346455 -v 0.143506 7.500000 -0.346455 -v 0.000000 7.500000 0.375000 -v -0.143506 7.500000 -0.346455 -v 0.000000 7.500000 -0.375000 -v 0.143506 7.500000 0.346455 -v -0.265165 7.500000 -0.265165 -v 0.265165 7.500000 0.265165 -v -0.346455 7.500000 -0.143506 -v 0.346455 7.500000 0.143506 -v 0.095671 6.500000 0.230970 -v -0.176777 6.500000 -0.176777 -v 0.176777 6.500000 0.176777 -v -0.230970 6.500000 -0.095671 -v 0.230970 6.500000 0.095671 -v -0.250000 6.500000 0.000000 -v 0.250000 6.500000 0.000000 -v -0.230970 6.500000 0.095671 -v 0.230970 6.500000 -0.095671 -v -0.176777 6.500000 0.176777 -v 0.176777 6.500000 -0.176777 -v -0.095671 6.500000 0.230970 -v 0.095671 6.500000 -0.230970 -v 0.000000 6.500000 0.250000 -v -0.095671 6.500000 -0.230970 -v 0.000000 6.500000 -0.250000 -v 0.019030 3.500000 -0.154329 -v 0.480970 3.500000 -0.345671 -v 0.073223 3.500000 -0.073223 -v 0.426777 3.500000 -0.426777 -v 0.154329 3.500000 -0.019030 -v 0.345671 3.500000 -0.480970 -v 0.250000 3.500000 0.000000 -v 0.250000 3.500000 -0.500000 -v 0.345671 3.500000 -0.019030 -v 0.154329 3.500000 -0.480970 -v 0.426777 3.500000 -0.073223 -v 0.073223 3.500000 -0.426777 -v 0.480970 3.500000 -0.154329 -v 0.000000 3.500000 -0.250000 -v 0.019030 3.500000 -0.345671 -v 0.500000 3.500000 -0.250000 -v 0.125000 4.500000 -0.125000 -v -0.019030 3.500000 0.154329 -v -0.480970 3.500000 0.345671 -v -0.073223 3.500000 0.073223 -v -0.426777 3.500000 0.426777 -v -0.154329 3.500000 0.019030 -v -0.345671 3.500000 0.480970 -v -0.250000 3.500000 0.000000 -v -0.250000 3.500000 0.500000 -v -0.345671 3.500000 0.019030 -v -0.154329 3.500000 0.480970 -v -0.426777 3.500000 0.073223 -v -0.073223 3.500000 0.426777 -v -0.480970 3.500000 0.154329 -v 0.000000 3.500000 0.250000 -v -0.019030 3.500000 0.345671 -v -0.500000 3.500000 0.250000 -v -0.125000 4.500000 0.125000 -v -0.154329 3.500000 -0.019030 -v -0.345671 3.500000 -0.480970 -v -0.073223 3.500000 -0.073223 -v -0.426777 3.500000 -0.426777 -v -0.019030 3.500000 -0.154329 -v -0.480970 3.500000 -0.345671 -v 0.000000 3.500000 -0.250000 -v -0.500000 3.500000 -0.250000 -v -0.019030 3.500000 -0.345671 -v -0.480970 3.500000 -0.154329 -v -0.073223 3.500000 -0.426777 -v -0.426777 3.500000 -0.073223 -v -0.154329 3.500000 -0.480970 -v -0.250000 3.500000 0.000000 -v -0.345671 3.500000 -0.019030 -v -0.250000 3.500000 -0.500000 -v -0.125000 4.500000 -0.125000 -v 0.154329 3.500000 0.019030 -v 0.345671 3.500000 0.480970 -v 0.073223 3.500000 0.073223 -v 0.426777 3.500000 0.426777 -v 0.019030 3.500000 0.154329 -v 0.480970 3.500000 0.345671 -v 0.000000 3.500000 0.250000 -v 0.500000 3.500000 0.250000 -v 0.019030 3.500000 0.345671 -v 0.480970 3.500000 0.154329 -v 0.073223 3.500000 0.426777 -v 0.426777 3.500000 0.073223 -v 0.154329 3.500000 0.480970 -v 0.250000 3.500000 0.000000 -v 0.345671 3.500000 0.019030 -v 0.250000 3.500000 0.500000 -v 0.125000 4.500000 0.125000 -vt 0.720253 0.439829 -vt 0.720253 0.488743 -vt 0.648168 0.488743 -vt 0.447368 0.053571 -vt 0.421053 0.035714 -vt 0.434211 0.035714 -vt 0.473684 0.053571 -vt 0.447368 0.035714 -vt 0.460526 0.035714 -vt 0.486842 0.035714 -vt 0.500000 0.053571 -vt 0.513158 0.035714 -vt 0.526316 0.053571 -vt 0.552632 0.053571 -vt 0.526316 0.035714 -vt 0.539474 0.035714 -vt 0.578947 0.053571 -vt 0.552632 0.035714 -vt 0.565789 0.035714 -vt 0.605263 0.053571 -vt 0.578947 0.035714 -vt 0.592105 0.035714 -vt 0.618421 0.035714 -vt 0.631579 0.053571 -vt 0.657895 0.053571 -vt 0.631579 0.035714 -vt 0.644737 0.035714 -vt 0.684211 0.053571 -vt 0.657895 0.035714 -vt 0.671053 0.035714 -vt 0.697368 0.035714 -vt 0.710526 0.053571 -vt 0.723684 0.035714 -vt 0.736842 0.053571 -vt 0.789474 0.053571 -vt 0.802632 0.035714 -vt 0.815789 0.053571 -vt 0.763158 0.053571 -vt 0.736842 0.035714 -vt 0.750000 0.035714 -vt 0.828947 0.035714 -vt 0.842105 0.053571 -vt 0.776316 0.035714 -vt 0.684211 0.570302 -vt 0.633240 0.535715 -vt 0.684211 0.501127 -vt 0.842105 0.294643 -vt 1.000000 0.080357 -vt 0.842105 0.008929 -vt 1.000000 0.223214 -vt 0.842105 0.008929 -vt 0.842105 0.294643 -vt 1.000000 0.294643 -vt 0.842105 0.303571 -vt 0.842105 -0.000000 -vt 1.000000 0.008929 -vt 0.631579 0.580357 -vt 0.631579 0.571429 -vt 0.842105 0.580357 -vt 0.631579 0.875000 -vt 0.842105 0.875000 -vt 0.631579 0.883929 -vt 0.842105 0.803571 -vt 0.631579 0.580357 -vt 0.921712 0.330357 -vt 0.940460 0.323013 -vt 0.940460 0.337702 -vt 0.946709 0.312500 -vt 0.940460 0.319845 -vt 0.927961 0.319845 -vt 0.447368 0.053571 -vt 0.421053 0.035714 -vt 0.434211 0.035714 -vt 0.473684 0.053571 -vt 0.447368 0.035714 -vt 0.460526 0.035714 -vt 0.486842 0.035714 -vt 0.500000 0.053571 -vt 0.513158 0.035714 -vt 0.526316 0.053571 -vt 0.552632 0.053571 -vt 0.526316 0.035714 -vt 0.539474 0.035714 -vt 0.578947 0.053571 -vt 0.552632 0.035714 -vt 0.565789 0.035714 -vt 0.605263 0.053571 -vt 0.578947 0.035714 -vt 0.592105 0.035714 -vt 0.618421 0.035714 -vt 0.631579 0.053571 -vt 0.657895 0.053571 -vt 0.631579 0.035714 -vt 0.644737 0.035714 -vt 0.684211 0.053571 -vt 0.657895 0.035714 -vt 0.671053 0.035714 -vt 0.697368 0.035714 -vt 0.710526 0.053571 -vt 0.723684 0.035714 -vt 0.736842 0.053571 -vt 0.789474 0.053571 -vt 0.802632 0.035714 -vt 0.815789 0.053571 -vt 0.763158 0.053571 -vt 0.736842 0.035714 -vt 0.750000 0.035714 -vt 0.828947 0.035714 -vt 0.842105 0.053571 -vt 0.776316 0.035714 -vt 0.633240 0.535715 -vt 0.648169 0.511257 -vt 0.684211 0.501127 -vt 0.631579 0.580357 -vt 0.631579 0.571429 -vt 0.842105 0.580357 -vt 0.631579 0.875000 -vt 0.842105 0.875000 -vt 0.631579 0.883929 -vt 0.842105 0.803571 -vt 0.631579 0.580357 -vt 0.447368 0.053571 -vt 0.421053 0.035714 -vt 0.434211 0.035714 -vt 0.473684 0.053571 -vt 0.447368 0.035714 -vt 0.460526 0.035714 -vt 0.486842 0.035714 -vt 0.500000 0.053571 -vt 0.513158 0.035714 -vt 0.526316 0.053571 -vt 0.552632 0.053571 -vt 0.526316 0.035714 -vt 0.539474 0.035714 -vt 0.578947 0.053571 -vt 0.552632 0.035714 -vt 0.565789 0.035714 -vt 0.605263 0.053571 -vt 0.578947 0.035714 -vt 0.592105 0.035714 -vt 0.618421 0.035714 -vt 0.631579 0.053571 -vt 0.657895 0.053571 -vt 0.631579 0.035714 -vt 0.644737 0.035714 -vt 0.671053 0.035714 -vt 0.684211 0.053571 -vt 0.697368 0.035714 -vt 0.710526 0.053571 -vt 0.723684 0.035714 -vt 0.736842 0.053571 -vt 0.789474 0.053571 -vt 0.802632 0.035714 -vt 0.815789 0.053571 -vt 0.763158 0.053571 -vt 0.736842 0.035714 -vt 0.750000 0.035714 -vt 0.828947 0.035714 -vt 0.842105 0.053571 -vt 0.776316 0.035714 -vt 0.684211 0.570302 -vt 0.633240 0.535715 -vt 0.684211 0.501127 -vt 0.631579 0.580357 -vt 0.631579 0.571429 -vt 0.842105 0.580357 -vt 0.631579 0.875000 -vt 0.842105 0.875000 -vt 0.631579 0.883929 -vt 0.842105 0.803571 -vt 0.631579 0.580357 -vt 0.447368 0.053571 -vt 0.421053 0.035714 -vt 0.434211 0.035714 -vt 0.473684 0.053571 -vt 0.447368 0.035714 -vt 0.460526 0.035714 -vt 0.486842 0.035714 -vt 0.500000 0.053571 -vt 0.513158 0.035714 -vt 0.526316 0.053571 -vt 0.552632 0.053571 -vt 0.526316 0.035714 -vt 0.539474 0.035714 -vt 0.578947 0.053571 -vt 0.552632 0.035714 -vt 0.565789 0.035714 -vt 0.605263 0.053571 -vt 0.578947 0.035714 -vt 0.592105 0.035714 -vt 0.618421 0.035714 -vt 0.631579 0.053571 -vt 0.657895 0.053571 -vt 0.631579 0.035714 -vt 0.644737 0.035714 -vt 0.684211 0.053571 -vt 0.657895 0.035714 -vt 0.671053 0.035714 -vt 0.697368 0.035714 -vt 0.710526 0.053571 -vt 0.723684 0.035714 -vt 0.736842 0.053571 -vt 0.789474 0.053571 -vt 0.802632 0.035714 -vt 0.815789 0.053571 -vt 0.763158 0.053571 -vt 0.736842 0.035714 -vt 0.750000 0.035714 -vt 0.828947 0.035714 -vt 0.842105 0.053571 -vt 0.763158 0.035714 -vt 0.776316 0.035714 -vt 0.684211 0.570302 -vt 0.633240 0.535715 -vt 0.684211 0.501127 -vt 0.631579 0.580357 -vt 0.631579 0.571429 -vt 0.842105 0.580357 -vt 0.631579 0.875000 -vt 0.842105 0.875000 -vt 0.631579 0.883929 -vt 0.842105 0.803571 -vt 0.631579 0.580357 -vt 0.842105 0.294643 -vt 1.000000 0.080357 -vt 0.842105 0.008929 -vt 1.000000 0.223214 -vt 0.842105 0.008929 -vt 0.842105 0.294643 -vt 1.000000 0.294643 -vt 0.842105 0.303571 -vt 0.842105 -0.000000 -vt 1.000000 0.008929 -vt 0.946709 0.330357 -vt 0.940460 0.337702 -vt 0.921712 0.330357 -vt 0.946709 0.312500 -vt 0.940460 0.319845 -vt 0.927961 0.319845 -vt 0.842105 0.294643 -vt 1.000000 0.080357 -vt 0.842105 0.008929 -vt 1.000000 0.223214 -vt 0.842105 0.008929 -vt 0.842105 0.294643 -vt 1.000000 0.294643 -vt 0.842105 0.303571 -vt 0.842105 -0.000000 -vt 1.000000 0.008929 -vt 0.921712 0.330357 -vt 0.940460 0.323013 -vt 0.940460 0.337702 -vt 0.946709 0.312500 -vt 0.940460 0.319845 -vt 0.927961 0.319845 -vt 0.842105 0.008929 -vt 1.000000 0.223214 -vt 1.000000 0.080357 -vt 0.842105 0.008929 -vt 0.842105 0.294643 -vt 1.000000 0.294643 -vt 0.842105 0.303571 -vt 0.842105 -0.000000 -vt 1.000000 0.008929 -vt 0.921712 0.330357 -vt 0.940460 0.323013 -vt 0.940460 0.337702 -vt 0.946709 0.312500 -vt 0.940460 0.319845 -vt 0.927961 0.319845 -vt 0.731302 0.451050 -vt 0.735182 0.464286 -vt 0.731302 0.477522 -vt 0.703716 0.496241 -vt 0.684211 0.498873 -vt 0.664705 0.496241 -vt 0.637119 0.477522 -vt 0.633239 0.464286 -vt 0.637119 0.451050 -vt 0.648169 0.439829 -vt 0.664705 0.432331 -vt 0.684211 0.429698 -vt 0.703716 0.432331 -vt 0.421053 0.053571 -vt 0.473684 0.035714 -vt 0.500000 0.035714 -vt 0.605263 0.035714 -vt 0.684211 0.035714 -vt 0.710526 0.035714 -vt 0.789474 0.035714 -vt 0.815789 0.035714 -vt 0.763158 0.035714 -vt 0.703717 0.503760 -vt 0.720253 0.511257 -vt 0.731302 0.522478 -vt 0.735182 0.535715 -vt 0.731302 0.548951 -vt 0.720253 0.560172 -vt 0.703717 0.567669 -vt 0.664705 0.567669 -vt 0.648169 0.560172 -vt 0.637119 0.548951 -vt 0.637119 0.522478 -vt 0.648169 0.511257 -vt 0.664705 0.503760 -vt 0.631579 0.875000 -vt 0.927961 0.337702 -vt 0.927961 0.323013 -vt 0.946709 0.330357 -vt 0.921712 0.312500 -vt 0.927962 0.305155 -vt 0.940460 0.305155 -vt 0.421053 0.053571 -vt 0.473684 0.035714 -vt 0.500000 0.035714 -vt 0.605263 0.035714 -vt 0.684211 0.035714 -vt 0.710526 0.035714 -vt 0.789474 0.035714 -vt 0.815789 0.035714 -vt 0.763158 0.035714 -vt 0.703717 0.503760 -vt 0.720253 0.511257 -vt 0.731302 0.522478 -vt 0.735182 0.535715 -vt 0.731302 0.548951 -vt 0.720253 0.560172 -vt 0.703717 0.567669 -vt 0.684211 0.570302 -vt 0.664705 0.567669 -vt 0.648169 0.560172 -vt 0.637119 0.548951 -vt 0.637119 0.522478 -vt 0.664705 0.503760 -vt 0.631579 0.875000 -vt 0.421053 0.053571 -vt 0.473684 0.035714 -vt 0.500000 0.035714 -vt 0.605263 0.035714 -vt 0.657895 0.035714 -vt 0.684211 0.035714 -vt 0.710526 0.035714 -vt 0.789474 0.035714 -vt 0.815789 0.035714 -vt 0.763158 0.035714 -vt 0.703717 0.503760 -vt 0.720253 0.511257 -vt 0.731302 0.522478 -vt 0.735182 0.535715 -vt 0.731302 0.548951 -vt 0.720253 0.560172 -vt 0.703717 0.567669 -vt 0.664705 0.567669 -vt 0.648169 0.560172 -vt 0.637119 0.548951 -vt 0.637119 0.522478 -vt 0.648169 0.511257 -vt 0.664705 0.503760 -vt 0.631579 0.875000 -vt 0.421053 0.053571 -vt 0.473684 0.035714 -vt 0.500000 0.035714 -vt 0.605263 0.035714 -vt 0.684211 0.035714 -vt 0.710526 0.035714 -vt 0.789474 0.035714 -vt 0.815789 0.035714 -vt 0.703717 0.503760 -vt 0.720253 0.511257 -vt 0.731302 0.522478 -vt 0.735182 0.535715 -vt 0.731302 0.548951 -vt 0.720253 0.560172 -vt 0.703717 0.567669 -vt 0.664705 0.567669 -vt 0.648169 0.560172 -vt 0.637119 0.548951 -vt 0.637119 0.522478 -vt 0.648169 0.511257 -vt 0.664705 0.503760 -vt 0.631579 0.875000 -vt 0.927961 0.337702 -vt 0.927961 0.323013 -vt 0.940460 0.323013 -vt 0.921712 0.312500 -vt 0.927962 0.305155 -vt 0.940460 0.305155 -vt 0.927961 0.337702 -vt 0.927961 0.323013 -vt 0.946709 0.330357 -vt 0.921712 0.312500 -vt 0.927962 0.305155 -vt 0.940460 0.305155 -vt 0.842105 0.294643 -vt 0.927961 0.337702 -vt 0.927961 0.323013 -vt 0.946709 0.330357 -vt 0.921712 0.312500 -vt 0.927962 0.305155 -vt 0.940460 0.305155 -vt 0.434211 0.785714 -vt 0.473684 0.785714 -vt 0.447368 1.000000 -vt 0.394737 0.785714 -vt 0.407895 1.000000 -vt 0.355263 0.785714 -vt 0.368421 1.000000 -vt 0.315789 0.785714 -vt 0.328947 1.000000 -vt 0.276316 0.785714 -vt 0.289474 1.000000 -vt 0.236842 0.785714 -vt 0.250000 1.000000 -vt 0.197368 0.785714 -vt 0.210526 1.000000 -vt 0.157895 0.785714 -vt 0.171053 1.000000 -vt 0.131579 1.000000 -vt 0.118421 0.785714 -vt 0.078947 0.785714 -vt 0.092105 1.000000 -vt 0.039474 0.785714 -vt 0.052632 1.000000 -vt 0.000000 0.785714 -vt 0.013158 1.000000 -vt 0.592105 0.785714 -vt 0.631579 0.785714 -vt 0.605263 1.000000 -vt 0.552632 0.785714 -vt 0.565789 1.000000 -vt 0.513158 0.785714 -vt 0.526316 1.000000 -vt 0.486842 1.000000 -vt 0.631579 0.571429 -vt 0.315789 0.571429 -vt 0.039474 0.571429 -vt 0.355263 0.571429 -vt 0.078947 0.571429 -vt 0.394737 0.571429 -vt 0.118421 0.571429 -vt 0.434211 0.571429 -vt 0.157895 0.571429 -vt 0.513158 0.571429 -vt 0.473684 0.571429 -vt 0.197368 0.571429 -vt 0.552632 0.571429 -vt 0.236842 0.571429 -vt 0.592105 0.571429 -vt 0.276316 0.571429 -vt 0.184211 0.428571 -vt 0.539474 0.428571 -vt 0.223684 0.428571 -vt 0.578947 0.428571 -vt 0.263158 0.428571 -vt 0.618421 0.428571 -vt 0.302632 0.428571 -vt 0.000000 0.571429 -vt 0.026316 0.428571 -vt 0.342105 0.428571 -vt 0.065789 0.428571 -vt 0.381579 0.428571 -vt 0.105263 0.428571 -vt 0.421053 0.428571 -vt 0.144737 0.428571 -vt 0.500000 0.428571 -vt 0.460526 0.428571 -vt 0.236842 0.428571 -vt 0.263158 -0.000000 -vt 0.263158 0.428571 -vt 0.052632 0.428571 -vt 0.078947 -0.000000 -vt 0.078947 0.428571 -vt 0.289474 -0.000000 -vt 0.289474 0.428571 -vt 0.105263 -0.000000 -vt 0.105263 0.428571 -vt 0.315789 0.428571 -vt 0.342105 -0.000000 -vt 0.342105 0.428571 -vt 0.315789 -0.000000 -vt 0.131579 -0.000000 -vt 0.131579 0.428571 -vt 0.368421 -0.000000 -vt 0.368421 0.428571 -vt 0.157895 -0.000000 -vt 0.157895 0.428571 -vt 0.394737 -0.000000 -vt 0.394737 0.428571 -vt 0.184211 -0.000000 -vt 0.184211 0.428571 -vt 0.421053 -0.000000 -vt 0.421053 0.428571 -vt 0.210526 -0.000000 -vt 0.210526 0.428571 -vt 0.000000 0.428571 -vt 0.026316 -0.000000 -vt 0.236842 -0.000000 -vt 0.052632 -0.000000 -vt 0.815789 0.232143 -vt 0.605263 0.232143 -vt 0.421053 0.232143 -vt 0.631579 0.232143 -vt 0.447368 0.232143 -vt 0.657895 0.232143 -vt 0.473684 0.232143 -vt 0.684211 0.232143 -vt 0.500000 0.232143 -vt 0.710526 0.232143 -vt 0.526316 0.232143 -vt 0.736842 0.232143 -vt 0.552632 0.232143 -vt 0.789474 0.232143 -vt 0.763158 0.232143 -vt 0.578947 0.232143 -vt 0.671053 0.375000 -vt 0.644737 0.375000 -vt 0.618421 0.375000 -vt 0.592105 0.375000 -vt 0.565789 0.375000 -vt 0.539474 0.375000 -vt 0.513158 0.375000 -vt 0.486842 0.375000 -vt 0.460526 0.375000 -vt 0.434211 0.375000 -vt 0.842105 0.232143 -vt 0.828947 0.375000 -vt 0.802632 0.375000 -vt 0.776316 0.375000 -vt 0.750000 0.375000 -vt 0.723684 0.375000 -vt 0.697368 0.375000 -vt 0.605263 -0.000000 -vt 0.631579 -0.000000 -vt 0.657895 -0.000000 -vt 0.684211 -0.000000 -vt 0.710526 -0.000000 -vt 0.736842 -0.000000 -vt 0.789474 -0.000000 -vt 0.815789 -0.000000 -vt 0.763158 -0.000000 -vt 0.842105 -0.000000 -vt 0.421053 -0.000000 -vt 0.447368 -0.000000 -vt 0.473684 -0.000000 -vt 0.500000 -0.000000 -vt 0.526316 -0.000000 -vt 0.552632 -0.000000 -vt 0.578947 -0.000000 -vt 0.907895 0.517857 -vt 0.894737 0.303571 -vt 0.907895 0.303571 -vt 0.894737 0.517857 -vt 0.881579 0.303571 -vt 0.881579 0.517857 -vt 0.868421 0.303571 -vt 0.868421 0.517857 -vt 0.855263 0.303571 -vt 0.855263 0.517857 -vt 0.842105 0.303571 -vt 0.921053 0.517857 -vt 0.921053 0.303571 -vt 0.815789 0.232143 -vt 0.605263 0.232143 -vt 0.421053 0.232143 -vt 0.631579 0.232143 -vt 0.447368 0.232143 -vt 0.657895 0.232143 -vt 0.473684 0.232143 -vt 0.684211 0.232143 -vt 0.500000 0.232143 -vt 0.710526 0.232143 -vt 0.526316 0.232143 -vt 0.736842 0.232143 -vt 0.552632 0.232143 -vt 0.789474 0.232143 -vt 0.763158 0.232143 -vt 0.578947 0.232143 -vt 0.671053 0.375000 -vt 0.644737 0.375000 -vt 0.618421 0.375000 -vt 0.592105 0.375000 -vt 0.565789 0.375000 -vt 0.539474 0.375000 -vt 0.513158 0.375000 -vt 0.486842 0.375000 -vt 0.460526 0.375000 -vt 0.434211 0.375000 -vt 0.842105 0.232143 -vt 0.828947 0.375000 -vt 0.802632 0.375000 -vt 0.776316 0.375000 -vt 0.750000 0.375000 -vt 0.723684 0.375000 -vt 0.697368 0.375000 -vt 0.605263 -0.000000 -vt 0.631579 -0.000000 -vt 0.657895 -0.000000 -vt 0.684211 -0.000000 -vt 0.710526 -0.000000 -vt 0.736842 -0.000000 -vt 0.815789 -0.000000 -vt 0.763158 -0.000000 -vt 0.842105 -0.000000 -vt 0.789474 -0.000000 -vt 0.447368 -0.000000 -vt 0.473684 -0.000000 -vt 0.500000 -0.000000 -vt 0.526316 -0.000000 -vt 0.552632 -0.000000 -vt 0.578947 -0.000000 -vt 0.815789 0.232143 -vt 0.605263 0.232143 -vt 0.421053 0.232143 -vt 0.631579 0.232143 -vt 0.447368 0.232143 -vt 0.657895 0.232143 -vt 0.473684 0.232143 -vt 0.684211 0.232143 -vt 0.500000 0.232143 -vt 0.710526 0.232143 -vt 0.526316 0.232143 -vt 0.736842 0.232143 -vt 0.552632 0.232143 -vt 0.789474 0.232143 -vt 0.763158 0.232143 -vt 0.578947 0.232143 -vt 0.671053 0.375000 -vt 0.644737 0.375000 -vt 0.618421 0.375000 -vt 0.592105 0.375000 -vt 0.565789 0.375000 -vt 0.539474 0.375000 -vt 0.513158 0.375000 -vt 0.486842 0.375000 -vt 0.460526 0.375000 -vt 0.434211 0.375000 -vt 0.842105 0.232143 -vt 0.828947 0.375000 -vt 0.802632 0.375000 -vt 0.776316 0.375000 -vt 0.750000 0.375000 -vt 0.723684 0.375000 -vt 0.697368 0.375000 -vt 0.631579 -0.000000 -vt 0.657895 -0.000000 -vt 0.684211 -0.000000 -vt 0.710526 -0.000000 -vt 0.736842 -0.000000 -vt 0.815789 -0.000000 -vt 0.763158 -0.000000 -vt 0.842105 -0.000000 -vt 0.789474 -0.000000 -vt 0.421053 -0.000000 -vt 0.447368 -0.000000 -vt 0.473684 -0.000000 -vt 0.500000 -0.000000 -vt 0.526316 -0.000000 -vt 0.552632 -0.000000 -vt 0.578947 -0.000000 -vt 0.605263 -0.000000 -vt 0.815789 0.232143 -vt 0.605263 0.232143 -vt 0.421053 0.232143 -vt 0.631579 0.232143 -vt 0.447368 0.232143 -vt 0.657895 0.232143 -vt 0.473684 0.232143 -vt 0.684211 0.232143 -vt 0.500000 0.232143 -vt 0.710526 0.232143 -vt 0.526316 0.232143 -vt 0.736842 0.232143 -vt 0.552632 0.232143 -vt 0.789474 0.232143 -vt 0.763158 0.232143 -vt 0.578947 0.232143 -vt 0.671053 0.375000 -vt 0.644737 0.375000 -vt 0.618421 0.375000 -vt 0.592105 0.375000 -vt 0.565789 0.375000 -vt 0.539474 0.375000 -vt 0.513158 0.375000 -vt 0.486842 0.375000 -vt 0.460526 0.375000 -vt 0.434211 0.375000 -vt 0.842105 0.232143 -vt 0.828947 0.375000 -vt 0.802632 0.375000 -vt 0.776316 0.375000 -vt 0.750000 0.375000 -vt 0.723684 0.375000 -vt 0.697368 0.375000 -vt 0.605263 -0.000000 -vt 0.631579 -0.000000 -vt 0.657895 -0.000000 -vt 0.684211 -0.000000 -vt 0.710526 -0.000000 -vt 0.736842 -0.000000 -vt 0.815789 -0.000000 -vt 0.763158 -0.000000 -vt 0.842105 -0.000000 -vt 0.789474 -0.000000 -vt 0.421053 -0.000000 -vt 0.447368 -0.000000 -vt 0.473684 -0.000000 -vt 0.500000 -0.000000 -vt 0.526316 -0.000000 -vt 0.552632 -0.000000 -vt 0.578947 -0.000000 -vt 0.907895 0.517857 -vt 0.894737 0.303571 -vt 0.907895 0.303571 -vt 0.894737 0.517857 -vt 0.881579 0.303571 -vt 0.881579 0.517857 -vt 0.868421 0.303571 -vt 0.868421 0.517857 -vt 0.855263 0.303571 -vt 0.855263 0.517857 -vt 0.842105 0.303571 -vt 0.921053 0.517857 -vt 0.921053 0.303571 -vt 0.907895 0.517857 -vt 0.894737 0.303571 -vt 0.907895 0.303571 -vt 0.894737 0.517857 -vt 0.881579 0.303571 -vt 0.881579 0.517857 -vt 0.868421 0.303571 -vt 0.868421 0.517857 -vt 0.855263 0.303571 -vt 0.855263 0.517857 -vt 0.842105 0.303571 -vt 0.921053 0.517857 -vt 0.921053 0.303571 -vt 0.907895 0.517857 -vt 0.894737 0.303571 -vt 0.907895 0.303571 -vt 0.894737 0.517857 -vt 0.881579 0.303571 -vt 0.881579 0.517857 -vt 0.868421 0.303571 -vt 0.868421 0.517857 -vt 0.855263 0.303571 -vt 0.855263 0.517857 -vt 0.842105 0.303571 -vt 0.921053 0.517857 -vt 0.921053 0.303571 -vt 0.157895 0.428571 -vt 0.513158 0.428571 -vt 0.197368 0.428571 -vt 0.552632 0.428571 -vt 0.236842 0.428571 -vt 0.592105 0.428571 -vt 0.276316 0.428571 -vt 0.315789 0.428571 -vt 0.039474 0.428571 -vt 0.355263 0.428571 -vt 0.078947 0.428571 -vt 0.394737 0.428571 -vt 0.118421 0.428571 -vt 0.473684 0.428571 -vt 0.434211 0.428571 -vt 0.000000 -0.000000 -vt 0.842105 0.517857 -vt 0.421053 -0.000000 -vt 0.842105 0.517857 -vt 0.842105 0.517857 -vt 0.842105 0.517857 -vn 0.0000 -1.0000 0.0000 -vn -0.9991 0.0000 -0.0416 -vn 0.9991 0.0000 -0.0416 -vn 0.0000 0.8321 -0.5547 -vn 0.0000 -0.8321 -0.5547 -vn 0.0000 0.8944 -0.4472 -vn 0.9995 0.0000 -0.0312 -vn -0.9995 0.0000 -0.0312 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.8944 0.4472 -vn -0.9995 -0.0000 0.0312 -vn 0.9995 -0.0000 0.0312 -vn -0.4472 0.8944 0.0000 -vn -0.0312 0.0000 -0.9995 -vn -0.0312 -0.0000 0.9995 -vn 0.4472 0.8944 0.0000 -vn 0.0312 -0.0000 0.9995 -vn 0.0312 0.0000 -0.9995 -vn 0.9991 -0.0000 0.0416 -vn -0.9991 -0.0000 0.0416 -vn 0.0000 0.8321 0.5547 -vn 0.0000 -0.8321 0.5547 -vn -0.0416 -0.0000 0.9991 -vn -0.0416 0.0000 -0.9991 -vn -0.5547 0.8321 0.0000 -vn -0.5547 -0.8321 0.0000 -vn 0.0416 0.0000 -0.9991 -vn 0.0416 -0.0000 0.9991 -vn 0.5547 0.8321 0.0000 -vn 0.5547 -0.8321 0.0000 -vn 0.3713 0.2425 -0.8963 -vn 0.0000 0.2425 -0.9701 -vn 0.6860 0.2425 -0.6860 -vn 0.8963 0.2425 -0.3713 -vn 0.9701 0.2425 -0.0000 -vn 0.8963 0.2425 0.3713 -vn 0.6860 0.2425 0.6860 -vn 0.3713 0.2425 0.8963 -vn 0.0000 0.2425 0.9701 -vn -0.3713 0.2425 0.8963 -vn -0.6860 0.2425 0.6860 -vn -0.8963 0.2425 0.3713 -vn -0.9701 0.2425 -0.0000 -vn -0.8963 0.2425 -0.3713 -vn -0.6860 0.2425 -0.6860 -vn -0.3713 0.2425 -0.8963 -vn -0.9239 0.0000 -0.3827 -vn -1.0000 -0.0000 -0.0000 -vn 0.9239 0.0000 0.3827 -vn 1.0000 -0.0000 0.0000 -vn -0.9239 -0.0000 0.3827 -vn 0.9239 0.0000 -0.3827 -vn -0.7071 -0.0000 0.7071 -vn 0.7071 0.0000 -0.7071 -vn -0.3827 -0.0000 0.9239 -vn 0.3827 0.0000 -0.9239 -vn -0.0000 -0.0000 1.0000 -vn -0.0000 0.0000 -1.0000 -vn -0.3827 0.0000 -0.9239 -vn 0.3827 -0.0000 0.9239 -vn -0.7071 0.0000 -0.7071 -vn 0.7071 -0.0000 0.7071 -vn 0.0000 -0.1240 0.9923 -vn 0.3797 -0.1240 0.9167 -vn -0.3797 -0.1240 -0.9167 -vn -0.7016 -0.1240 -0.7016 -vn 0.7016 -0.1240 0.7016 -vn -0.9167 -0.1240 -0.3797 -vn 0.9167 -0.1240 0.3797 -vn -0.9923 -0.1240 0.0000 -vn 0.9923 -0.1240 -0.0000 -vn -0.9167 -0.1240 0.3797 -vn 0.9167 -0.1240 -0.3797 -vn -0.7016 -0.1240 0.7016 -vn 0.7016 -0.1240 -0.7016 -vn -0.3797 -0.1240 0.9167 -vn 0.3797 -0.1240 -0.9167 -vn 0.0000 -0.1240 -0.9923 -vn 0.0127 0.3525 -0.9357 -vn -0.1164 0.9864 0.1164 -vn 0.3598 0.3824 -0.8511 -vn 0.6504 0.3925 -0.6504 -vn 0.8511 0.3824 -0.3598 -vn 0.9357 0.3525 -0.0127 -vn 0.8863 0.3053 0.3484 -vn 0.6991 0.2457 0.6714 -vn 0.3936 0.1823 0.9010 -vn 0.0149 0.1259 0.9919 -vn -0.3736 0.0869 0.9235 -vn -0.7052 0.0730 0.7052 -vn -0.9235 0.0869 0.3736 -vn -0.9919 0.1259 -0.0149 -vn -0.9010 0.1823 -0.3936 -vn -0.6714 0.2457 -0.6991 -vn -0.3484 0.3053 -0.8863 -vn 0.6325 0.4472 -0.6325 -vn 0.8263 0.4472 -0.3423 -vn 0.3423 0.4472 -0.8263 -vn 0.0000 0.4472 -0.8944 -vn -0.3423 0.4472 -0.8263 -vn -0.6325 0.4472 -0.6325 -vn -0.8263 0.4472 0.3423 -vn -0.8944 0.4472 0.0000 -vn -0.8263 0.4472 -0.3423 -vn -0.6325 0.4472 0.6325 -vn -0.3423 0.4472 0.8263 -vn -0.0000 0.4472 0.8944 -vn 0.3423 0.4472 0.8263 -vn 0.6325 0.4472 0.6325 -vn 0.8263 0.4472 0.3423 -vn 0.8944 0.4472 0.0000 -vn -0.5000 0.0000 -0.8660 -vn 0.5000 0.0000 -0.8660 -vn 0.5000 -0.0000 0.8660 -vn -0.5000 -0.0000 0.8660 -vn -0.0127 0.3525 0.9357 -vn 0.1164 0.9864 -0.1164 -vn -0.3598 0.3824 0.8511 -vn -0.6504 0.3925 0.6504 -vn -0.8511 0.3824 0.3598 -vn -0.9357 0.3525 0.0127 -vn -0.8863 0.3053 -0.3484 -vn -0.6991 0.2457 -0.6714 -vn -0.3936 0.1823 -0.9010 -vn -0.0149 0.1259 -0.9919 -vn 0.3736 0.0869 -0.9235 -vn 0.7052 0.0730 -0.7052 -vn 0.9235 0.0869 -0.3736 -vn 0.9919 0.1259 0.0149 -vn 0.9010 0.1823 0.3936 -vn 0.6714 0.2457 0.6991 -vn 0.3484 0.3053 0.8863 -vn -0.9357 0.3525 -0.0127 -vn 0.1164 0.9864 0.1164 -vn -0.8511 0.3824 -0.3598 -vn -0.6504 0.3925 -0.6504 -vn -0.3598 0.3824 -0.8511 -vn -0.0127 0.3525 -0.9357 -vn 0.3484 0.3053 -0.8863 -vn 0.6714 0.2457 -0.6991 -vn 0.9010 0.1823 -0.3936 -vn 0.9919 0.1259 -0.0149 -vn 0.9235 0.0869 0.3736 -vn 0.7052 0.0730 0.7052 -vn 0.3736 0.0869 0.9235 -vn -0.0149 0.1259 0.9919 -vn -0.3936 0.1823 0.9010 -vn -0.6991 0.2457 0.6714 -vn -0.8863 0.3053 0.3484 -vn 0.9357 0.3525 0.0127 -vn -0.1164 0.9864 -0.1164 -vn 0.8511 0.3824 0.3598 -vn 0.6504 0.3925 0.6504 -vn 0.3598 0.3824 0.8511 -vn 0.0127 0.3525 0.9357 -vn -0.3484 0.3053 0.8863 -vn -0.6714 0.2457 0.6991 -vn -0.9010 0.1823 0.3936 -vn -0.9919 0.1259 0.0149 -vn -0.9235 0.0869 -0.3736 -vn -0.7052 0.0730 -0.7052 -vn -0.3736 0.0869 -0.9235 -vn 0.0149 0.1259 -0.9919 -vn 0.3936 0.1823 -0.9010 -vn 0.6991 0.2457 -0.6714 -vn 0.8863 0.3053 -0.3484 -vn -0.8660 0.0000 0.5000 -vn -0.8660 0.0000 -0.5000 -vn 0.8660 -0.0000 -0.5000 -vn 0.8660 -0.0000 0.5000 -s off -f 4122/5862/512 4123/5863/512 4124/5864/512 -f 4125/5865/512 4126/5866/512 4127/5867/512 -f 4128/5868/512 4127/5869/512 4129/5870/512 -f 4128/5868/512 4130/5871/512 4131/5872/512 -f 4131/5872/512 4132/5873/512 4133/5874/512 -f 4134/5875/512 4132/5876/512 4135/5877/512 -f 4136/5878/512 4135/5879/512 4137/5880/512 -f 4138/5881/512 4137/5882/512 4139/5883/512 -f 4138/5881/512 4140/5884/512 4141/5885/512 -f 4142/5886/512 4140/5887/512 4143/5888/512 -f 4144/5889/512 4143/5890/512 4145/5891/512 -f 4144/5889/512 4146/5892/512 4147/5893/512 -f 4147/5893/512 4148/5894/512 4149/5895/512 -f 4150/5896/512 4151/5897/512 4152/5898/512 -f 4153/5899/512 4148/5900/512 4154/5901/512 -f 4152/5898/512 4126/5902/512 4155/5903/512 -f 4153/5899/512 4156/5904/512 4150/5896/512 -f 4157/5905/512 4158/5906/512 4159/5907/512 -f 4160/5908/513 4161/5909/513 4162/5910/513 -f 4163/5911/514 4164/5912/514 4161/5909/514 -f 4165/5913/515 4163/5914/515 4160/5915/515 -f 4164/5912/516 4162/5916/516 4161/5917/516 -f 4166/5918/512 4167/5919/512 4168/5920/512 -f 4169/5921/517 4170/5922/517 4171/5923/517 -f 4170/5924/518 4166/5918/518 4168/5920/518 -f 4167/5925/519 4170/5924/519 4168/5920/519 -f 4172/5926/520 4173/5927/520 4174/5928/520 -f 4175/5929/512 4176/5930/512 4177/5931/512 -f 4178/5932/512 4179/5933/512 4180/5934/512 -f 4181/5935/512 4180/5936/512 4182/5937/512 -f 4181/5935/512 4183/5938/512 4184/5939/512 -f 4184/5939/512 4185/5940/512 4186/5941/512 -f 4187/5942/512 4185/5943/512 4188/5944/512 -f 4189/5945/512 4188/5946/512 4190/5947/512 -f 4191/5948/512 4190/5949/512 4192/5950/512 -f 4191/5948/512 4193/5951/512 4194/5952/512 -f 4195/5953/512 4193/5954/512 4196/5955/512 -f 4197/5956/512 4196/5957/512 4198/5958/512 -f 4197/5956/512 4199/5959/512 4200/5960/512 -f 4200/5960/512 4201/5961/512 4202/5962/512 -f 4203/5963/512 4204/5964/512 4205/5965/512 -f 4206/5966/512 4201/5967/512 4207/5968/512 -f 4205/5965/512 4179/5969/512 4208/5970/512 -f 4206/5966/512 4209/5971/512 4203/5963/512 -f 4210/5972/512 4211/5973/512 4212/5974/512 -f 4213/5975/512 4214/5976/512 4215/5977/512 -f 4216/5978/521 4217/5979/521 4218/5980/521 -f 4217/5981/522 4213/5975/522 4215/5977/522 -f 4214/5982/523 4217/5981/523 4215/5977/523 -f 4219/5983/512 4220/5984/512 4221/5985/512 -f 4222/5986/512 4221/5987/512 4223/5988/512 -f 4222/5986/512 4224/5989/512 4225/5990/512 -f 4225/5990/512 4226/5991/512 4227/5992/512 -f 4228/5993/512 4226/5994/512 4229/5995/512 -f 4230/5996/512 4229/5997/512 4231/5998/512 -f 4232/5999/512 4231/6000/512 4233/6001/512 -f 4232/5999/512 4234/6002/512 4235/6003/512 -f 4236/6004/512 4234/6005/512 4237/6006/512 -f 4236/6004/512 4238/6007/512 4239/6008/512 -f 4239/6008/512 4240/6009/512 4241/6010/512 -f 4241/6010/512 4242/6011/512 4243/6012/512 -f 4244/6013/512 4245/6014/512 4246/6015/512 -f 4247/6016/512 4242/6017/512 4248/6018/512 -f 4246/6015/512 4220/6019/512 4249/6020/512 -f 4247/6016/512 4250/6021/512 4244/6013/512 -f 4251/6022/512 4252/6023/512 4253/6024/512 -f 4254/6025/512 4255/6026/512 4256/6027/512 -f 4257/6028/524 4258/6029/524 4259/6030/524 -f 4258/6031/525 4254/6025/525 4256/6027/525 -f 4255/6032/526 4258/6031/526 4256/6027/526 -f 4260/6033/512 4261/6034/512 4262/6035/512 -f 4263/6036/512 4262/6037/512 4264/6038/512 -f 4263/6036/512 4265/6039/512 4266/6040/512 -f 4266/6040/512 4267/6041/512 4268/6042/512 -f 4269/6043/512 4267/6044/512 4270/6045/512 -f 4271/6046/512 4270/6047/512 4272/6048/512 -f 4273/6049/512 4272/6050/512 4274/6051/512 -f 4273/6049/512 4275/6052/512 4276/6053/512 -f 4277/6054/512 4275/6055/512 4278/6056/512 -f 4279/6057/512 4278/6058/512 4280/6059/512 -f 4279/6057/512 4281/6060/512 4282/6061/512 -f 4282/6061/512 4283/6062/512 4284/6063/512 -f 4285/6064/512 4286/6065/512 4287/6066/512 -f 4288/6067/512 4283/6068/512 4289/6069/512 -f 4287/6066/512 4261/6070/512 4290/6071/512 -f 4285/6064/512 4289/6072/512 4291/6073/512 -f 4292/6074/512 4293/6075/512 4294/6076/512 -f 4295/6077/512 4296/6078/512 4297/6079/512 -f 4298/6080/527 4299/6081/527 4300/6082/527 -f 4299/6083/528 4295/6077/528 4297/6079/528 -f 4296/6084/529 4299/6083/529 4297/6079/529 -f 4301/6085/530 4302/6086/530 4303/6087/530 -f 4304/6088/531 4305/6089/531 4302/6086/531 -f 4306/6090/532 4304/6091/532 4301/6092/532 -f 4305/6089/533 4303/6093/533 4302/6094/533 -f 4307/6095/520 4308/6096/520 4309/6097/520 -f 4310/6098/512 4311/6099/512 4312/6100/512 -f 4313/6101/534 4314/6102/534 4315/6103/534 -f 4316/6104/535 4317/6105/535 4314/6102/535 -f 4318/6106/536 4316/6107/536 4313/6108/536 -f 4317/6105/537 4315/6109/537 4314/6110/537 -f 4319/6111/520 4320/6112/520 4321/6113/520 -f 4322/6114/512 4323/6115/512 4324/6116/512 -f 4325/6117/538 4326/6118/538 4327/6119/538 -f 4326/6118/539 4328/6120/539 4327/6119/539 -f 4329/6121/540 4326/6122/540 4330/6123/540 -f 4328/6120/541 4325/6124/541 4327/6125/541 -f 4331/6126/520 4332/6127/520 4333/6128/520 -f 4334/6129/512 4335/6130/512 4336/6131/512 -f 4122/5862/512 4337/6132/512 4338/6133/512 -f 4338/6133/512 4339/6134/512 4122/5862/512 -f 4339/6134/512 4123/5863/512 4122/5862/512 -f 4123/5863/512 4340/6135/512 4341/6136/512 -f 4341/6136/512 4342/6137/512 4124/5864/512 -f 4124/5864/512 4343/6138/512 4344/6139/512 -f 4344/6139/512 4345/6140/512 4346/6141/512 -f 4346/6141/512 4347/6142/512 4122/5862/512 -f 4347/6142/512 4348/6143/512 4122/5862/512 -f 4348/6143/512 4349/6144/512 4122/5862/512 -f 4123/5863/512 4341/6136/512 4124/5864/512 -f 4124/5864/512 4344/6139/512 4122/5862/512 -f 4344/6139/512 4346/6141/512 4122/5862/512 -f 4125/5865/512 4155/6145/512 4126/5866/512 -f 4128/5868/512 4125/5865/512 4127/5869/512 -f 4128/5868/512 4129/6146/512 4130/5871/512 -f 4131/5872/512 4130/6147/512 4132/5873/512 -f 4134/5875/512 4133/5874/512 4132/5876/512 -f 4136/5878/512 4134/5875/512 4135/5879/512 -f 4138/5881/512 4136/5878/512 4137/5882/512 -f 4138/5881/512 4139/6148/512 4140/5884/512 -f 4142/5886/512 4141/5885/512 4140/5887/512 -f 4144/5889/512 4142/5886/512 4143/5890/512 -f 4144/5889/512 4145/6149/512 4146/5892/512 -f 4147/5893/512 4146/6150/512 4148/5894/512 -f 4150/5896/512 4156/6151/512 4151/5897/512 -f 4153/5899/512 4149/5895/512 4148/5900/512 -f 4152/5898/512 4151/6152/512 4126/5902/512 -f 4153/5899/512 4154/6153/512 4156/5904/512 -f 4159/5907/512 4350/6154/512 4351/6155/512 -f 4351/6155/512 4352/6156/512 4159/5907/512 -f 4352/6156/512 4353/6157/512 4159/5907/512 -f 4353/6157/512 4354/6158/512 4355/6159/512 -f 4355/6159/512 4356/6160/512 4157/5905/512 -f 4157/5905/512 4357/6161/512 4158/5906/512 -f 4357/6161/512 4358/6162/512 4158/5906/512 -f 4358/6162/512 4359/6163/512 4158/5906/512 -f 4158/5906/512 4360/6164/512 4361/6165/512 -f 4361/6165/512 4362/6166/512 4159/5907/512 -f 4353/6157/512 4355/6159/512 4159/5907/512 -f 4355/6159/512 4157/5905/512 4159/5907/512 -f 4158/5906/512 4361/6165/512 4159/5907/512 -f 4160/5908/513 4163/5911/513 4161/5909/513 -f 4163/5911/514 4165/5913/514 4164/5912/514 -f 4170/5924/518 4169/5921/518 4166/5918/518 -f 4167/5925/519 4171/6167/519 4170/5924/519 -f 4174/5928/520 4363/6168/520 4172/5926/520 -f 4172/5926/520 4364/6169/520 4173/5927/520 -f 4173/5927/520 4365/6170/520 4174/5928/520 -f 4177/5931/512 4366/6171/512 4367/6172/512 -f 4367/6172/512 4368/6173/512 4177/5931/512 -f 4368/6173/512 4175/5929/512 4177/5931/512 -f 4178/5932/512 4208/6174/512 4179/5933/512 -f 4181/5935/512 4178/5932/512 4180/5936/512 -f 4181/5935/512 4182/6175/512 4183/5938/512 -f 4184/5939/512 4183/6176/512 4185/5940/512 -f 4187/5942/512 4186/5941/512 4185/5943/512 -f 4189/5945/512 4187/5942/512 4188/5946/512 -f 4191/5948/512 4189/5945/512 4190/5949/512 -f 4191/5948/512 4192/6177/512 4193/5951/512 -f 4195/5953/512 4194/5952/512 4193/5954/512 -f 4197/5956/512 4195/5953/512 4196/5957/512 -f 4197/5956/512 4198/6178/512 4199/5959/512 -f 4200/5960/512 4199/6179/512 4201/5961/512 -f 4203/5963/512 4209/6180/512 4204/5964/512 -f 4206/5966/512 4202/5962/512 4201/5967/512 -f 4205/5965/512 4204/6181/512 4179/5969/512 -f 4206/5966/512 4207/6182/512 4209/5971/512 -f 4212/5974/512 4369/6183/512 4370/6184/512 -f 4370/6184/512 4371/6185/512 4372/6186/512 -f 4372/6186/512 4373/6187/512 4374/6188/512 -f 4374/6188/512 4375/6189/512 4376/6190/512 -f 4376/6190/512 4377/6191/512 4378/6192/512 -f 4378/6192/512 4379/6193/512 4210/5972/512 -f 4210/5972/512 4380/6194/512 4211/5973/512 -f 4211/5973/512 4381/6195/512 4212/5974/512 -f 4212/5974/512 4370/6184/512 4376/6190/512 -f 4370/6184/512 4372/6186/512 4376/6190/512 -f 4372/6186/512 4374/6188/512 4376/6190/512 -f 4376/6190/512 4378/6192/512 4212/5974/512 -f 4378/6192/512 4210/5972/512 4212/5974/512 -f 4217/5981/522 4216/5978/522 4213/5975/522 -f 4214/5982/523 4218/6196/523 4217/5981/523 -f 4219/5983/512 4249/6197/512 4220/5984/512 -f 4222/5986/512 4219/5983/512 4221/5987/512 -f 4222/5986/512 4223/6198/512 4224/5989/512 -f 4225/5990/512 4224/6199/512 4226/5991/512 -f 4228/5993/512 4227/5992/512 4226/5994/512 -f 4230/5996/512 4228/5993/512 4229/5997/512 -f 4232/5999/512 4230/5996/512 4231/6000/512 -f 4232/5999/512 4233/6200/512 4234/6002/512 -f 4236/6004/512 4235/6003/512 4234/6005/512 -f 4236/6004/512 4237/6201/512 4238/6007/512 -f 4239/6008/512 4238/6202/512 4240/6009/512 -f 4241/6010/512 4240/6203/512 4242/6011/512 -f 4244/6013/512 4250/6204/512 4245/6014/512 -f 4247/6016/512 4243/6012/512 4242/6017/512 -f 4246/6015/512 4245/6205/512 4220/6019/512 -f 4247/6016/512 4248/6206/512 4250/6021/512 -f 4253/6024/512 4382/6207/512 4383/6208/512 -f 4383/6208/512 4384/6209/512 4385/6210/512 -f 4385/6210/512 4386/6211/512 4387/6212/512 -f 4387/6212/512 4388/6213/512 4251/6022/512 -f 4251/6022/512 4389/6214/512 4252/6023/512 -f 4389/6214/512 4390/6215/512 4252/6023/512 -f 4390/6215/512 4391/6216/512 4252/6023/512 -f 4252/6023/512 4392/6217/512 4393/6218/512 -f 4393/6218/512 4394/6219/512 4253/6024/512 -f 4253/6024/512 4383/6208/512 4385/6210/512 -f 4385/6210/512 4387/6212/512 4253/6024/512 -f 4387/6212/512 4251/6022/512 4253/6024/512 -f 4252/6023/512 4393/6218/512 4253/6024/512 -f 4258/6031/525 4257/6028/525 4254/6025/525 -f 4255/6032/526 4259/6220/526 4258/6031/526 -f 4260/6033/512 4290/6221/512 4261/6034/512 -f 4263/6036/512 4260/6033/512 4262/6037/512 -f 4263/6036/512 4264/6222/512 4265/6039/512 -f 4266/6040/512 4265/6223/512 4267/6041/512 -f 4269/6043/512 4268/6042/512 4267/6044/512 -f 4271/6046/512 4269/6043/512 4270/6047/512 -f 4273/6049/512 4271/6046/512 4272/6050/512 -f 4273/6049/512 4274/6224/512 4275/6052/512 -f 4277/6054/512 4276/6053/512 4275/6055/512 -f 4279/6057/512 4277/6054/512 4278/6058/512 -f 4279/6057/512 4280/6225/512 4281/6060/512 -f 4282/6061/512 4281/6226/512 4283/6062/512 -f 4285/6064/512 4291/6227/512 4286/6065/512 -f 4288/6067/512 4284/6063/512 4283/6068/512 -f 4287/6066/512 4286/6228/512 4261/6070/512 -f 4285/6064/512 4288/6067/512 4289/6072/512 -f 4294/6076/512 4395/6229/512 4396/6230/512 -f 4396/6230/512 4397/6231/512 4294/6076/512 -f 4397/6231/512 4398/6232/512 4294/6076/512 -f 4398/6232/512 4399/6233/512 4400/6234/512 -f 4400/6234/512 4401/6235/512 4292/6074/512 -f 4292/6074/512 4402/6236/512 4293/6075/512 -f 4402/6236/512 4403/6237/512 4293/6075/512 -f 4403/6237/512 4404/6238/512 4293/6075/512 -f 4293/6075/512 4405/6239/512 4406/6240/512 -f 4406/6240/512 4407/6241/512 4294/6076/512 -f 4398/6232/512 4400/6234/512 4294/6076/512 -f 4400/6234/512 4292/6074/512 4294/6076/512 -f 4293/6075/512 4406/6240/512 4294/6076/512 -f 4299/6083/528 4298/6080/528 4295/6077/528 -f 4296/6084/529 4300/6242/529 4299/6083/529 -f 4301/6085/530 4304/6088/530 4302/6086/530 -f 4304/6088/531 4306/6090/531 4305/6089/531 -f 4308/6096/520 4408/6243/520 4309/6097/520 -f 4309/6097/520 4409/6244/520 4410/6245/520 -f 4410/6245/520 4307/6095/520 4309/6097/520 -f 4312/6100/512 4411/6246/512 4412/6247/512 -f 4412/6247/512 4413/6248/512 4312/6100/512 -f 4413/6248/512 4310/6098/512 4312/6100/512 -f 4313/6101/534 4316/6104/534 4314/6102/534 -f 4316/6104/535 4318/6106/535 4317/6105/535 -f 4321/6113/520 4414/6249/520 4319/6111/520 -f 4319/6111/520 4415/6250/520 4320/6112/520 -f 4320/6112/520 4416/6251/520 4321/6113/520 -f 4324/6116/512 4417/6252/512 4418/6253/512 -f 4418/6253/512 4419/6254/512 4324/6116/512 -f 4419/6254/512 4322/6114/512 4324/6116/512 -f 4325/6117/538 4330/6255/538 4326/6118/538 -f 4326/6118/539 4329/6121/539 4328/6120/539 -f 4333/6128/520 4420/6256/520 4331/6126/520 -f 4331/6126/520 4421/6257/520 4332/6127/520 -f 4332/6127/520 4422/6258/520 4333/6128/520 -f 4336/6131/512 4423/6259/512 4424/6260/512 -f 4424/6260/512 4425/6261/512 4336/6131/512 -f 4425/6261/512 4334/6129/512 4336/6131/512 -s 1 -f 4426/6262/542 4427/6263/543 4428/6264/520 -f 4429/6265/544 4426/6262/542 4428/6266/520 -f 4430/6267/545 4429/6265/544 4428/6268/520 -f 4431/6269/546 4430/6267/545 4428/6270/520 -f 4432/6271/547 4431/6269/546 4428/6272/520 -f 4433/6273/548 4432/6271/547 4428/6274/520 -f 4434/6275/549 4433/6273/548 4428/6276/520 -f 4435/6277/550 4434/6275/549 4428/6278/520 -f 4435/6277/550 4428/6279/520 4436/6280/551 -f 4437/6281/552 4436/6280/551 4428/6282/520 -f 4438/6283/553 4437/6281/552 4428/6284/520 -f 4439/6285/554 4438/6283/553 4428/6286/520 -f 4440/6287/555 4439/6288/554 4428/6289/520 -f 4441/6290/556 4440/6287/555 4428/6291/520 -f 4442/6292/557 4441/6290/556 4428/6293/520 -f 4427/6263/543 4442/6292/557 4428/6294/520 -f 4440/6287/558 4443/6295/559 4439/6288/559 -f 4432/6271/560 4444/6296/561 4431/6269/561 -f 4439/6285/559 4445/6297/562 4438/6283/562 -f 4431/6269/561 4446/6298/563 4430/6267/563 -f 4438/6283/562 4447/6299/564 4437/6281/564 -f 4430/6267/563 4448/6300/565 4429/6265/565 -f 4437/6281/564 4449/6301/566 4436/6280/566 -f 4429/6265/565 4450/6302/567 4426/6262/567 -f 4436/6280/566 4451/6303/568 4435/6277/568 -f 4427/6263/569 4452/6304/570 4442/6292/570 -f 4426/6262/567 4453/6305/569 4427/6263/569 -f 4435/6277/568 4454/6306/571 4434/6275/571 -f 4442/6292/570 4455/6307/572 4441/6290/572 -f 4434/6275/571 4456/6308/573 4433/6273/573 -f 4441/6290/572 4457/6309/558 4440/6287/558 -f 4433/6273/573 4458/6310/560 4432/6271/560 -f 4451/6303/574 4459/6311/575 4454/6306/575 -f 4452/6304/576 4460/6312/577 4455/6307/577 -f 4454/6306/575 4461/6313/578 4456/6308/578 -f 4455/6307/577 4462/6314/579 4457/6309/579 -f 4456/6308/578 4463/6315/580 4458/6310/580 -f 4457/6309/579 4464/6316/581 4443/6295/581 -f 4458/6310/580 4465/6317/582 4444/6296/582 -f 4443/6318/581 4466/6319/583 4445/6297/583 -f 4444/6296/582 4467/6320/584 4446/6298/584 -f 4445/6297/583 4468/6321/585 4447/6299/585 -f 4446/6298/584 4469/6322/586 4448/6300/586 -f 4447/6299/585 4470/6323/587 4449/6301/587 -f 4448/6300/586 4471/6324/588 4450/6302/588 -f 4449/6301/587 4472/6325/574 4451/6303/574 -f 4453/6305/589 4473/6326/576 4452/6304/576 -f 4450/6302/588 4474/6327/589 4453/6305/589 -f 4467/6328/563 4123/6329/565 4469/6330/565 -f 4468/6331/564 4345/6332/566 4470/6333/566 -f 4469/6330/565 4339/6334/567 4471/6335/567 -f 4470/6333/566 4344/6336/568 4472/6337/568 -f 4474/6338/569 4337/6339/570 4473/6340/570 -f 4471/6335/567 4338/6341/569 4474/6338/569 -f 4472/6337/568 4343/6342/571 4459/6343/571 -f 4473/6340/570 4122/6344/572 4460/6345/572 -f 4459/6343/571 4124/6346/573 4461/6347/573 -f 4460/6345/572 4349/6348/558 4462/6349/558 -f 4461/6347/573 4342/6350/560 4463/6351/560 -f 4462/6349/558 4348/6352/559 4464/6353/559 -f 4463/6351/560 4341/6354/561 4465/6355/561 -f 4464/6356/559 4347/6357/562 4466/6319/562 -f 4465/6355/561 4340/6358/563 4467/6328/563 -f 4466/6319/562 4346/6359/564 4468/6331/564 -f 4155/5903/564 4475/6360/562 4152/5898/562 -f 4141/5885/565 4476/6361/563 4138/5881/563 -f 4125/5865/566 4477/6362/564 4155/6145/564 -f 4142/5886/567 4478/6363/565 4141/5885/565 -f 4128/5868/568 4479/6364/566 4125/5865/566 -f 4144/5889/569 4480/6365/567 4142/5886/567 -f 4131/5872/571 4481/6366/568 4128/5868/568 -f 4147/5893/570 4482/6367/569 4144/5889/569 -f 4133/5874/573 4483/6368/571 4131/5872/571 -f 4149/5895/572 4484/6369/570 4147/5893/570 -f 4134/5875/560 4485/6370/573 4133/5874/573 -f 4153/5899/558 4486/6371/572 4149/5895/572 -f 4136/5878/561 4487/6372/560 4134/5875/560 -f 4152/5898/562 4488/6373/559 4150/5896/559 -f 4150/5896/559 4489/6374/558 4153/5899/558 -f 4138/5881/563 4490/6375/561 4136/5878/561 -f 4482/6367/590 4491/6376/591 4480/6365/592 -f 4478/6363/593 4480/6365/592 4491/6377/591 -f 4476/6361/594 4478/6363/593 4491/6378/591 -f 4490/6375/595 4476/6361/594 4491/6379/591 -f 4487/6372/596 4490/6375/595 4491/6380/591 -f 4485/6370/597 4487/6372/596 4491/6381/591 -f 4483/6368/598 4485/6370/597 4491/6382/591 -f 4481/6366/599 4483/6368/598 4491/6383/591 -f 4479/6364/600 4481/6366/599 4491/6384/591 -f 4477/6362/601 4479/6364/600 4491/6385/591 -f 4475/6360/602 4477/6386/601 4491/6387/591 -f 4488/6373/603 4475/6360/602 4491/6388/591 -f 4489/6374/604 4488/6373/603 4491/6389/591 -f 4486/6371/605 4489/6374/604 4491/6390/591 -f 4484/6369/606 4486/6371/605 4491/6391/591 -f 4482/6367/590 4484/6369/606 4491/6392/591 -f 4140/5884/607 4357/6393/608 4157/6394/607 -f 4140/5887/607 4356/6395/609 4143/5888/609 -f 4143/5890/609 4355/6396/610 4145/5891/610 -f 4145/6149/610 4354/6397/611 4146/5892/611 -f 4148/5894/612 4354/6397/611 4353/6398/612 -f 4151/5897/613 4351/6399/614 4350/6400/613 -f 4148/5900/612 4352/6401/615 4154/5901/615 -f 4151/6152/613 4159/6402/616 4126/5902/616 -f 4154/6153/615 4351/6399/614 4156/5904/614 -f 4127/5867/617 4159/6403/616 4362/6404/617 -f 4127/5869/617 4361/6405/618 4129/5870/618 -f 4129/6146/618 4360/6406/619 4130/5871/619 -f 4130/6147/619 4158/6407/620 4132/5873/620 -f 4132/5876/620 4359/6408/621 4135/5877/621 -f 4135/5879/621 4358/6409/622 4137/5880/622 -f 4137/5882/622 4357/6393/608 4139/5883/608 -f 4172/6410/559 4367/6411/623 4366/6412/559 -f 4363/6413/623 4368/6414/624 4367/6411/623 -f 4174/6415/624 4175/6416/561 4368/6414/624 -f 4365/6417/561 4176/6418/625 4175/6416/561 -f 4173/6419/625 4177/6420/626 4176/6418/625 -f 4364/6421/626 4366/6412/559 4177/6422/626 -f 4208/5970/565 4492/6423/563 4205/5965/563 -f 4194/5952/564 4493/6424/562 4191/5948/562 -f 4178/5932/567 4494/6425/565 4208/6174/565 -f 4195/5953/566 4495/6426/564 4194/5952/564 -f 4181/5935/569 4496/6427/567 4178/5932/567 -f 4197/5956/568 4497/6428/566 4195/5953/566 -f 4184/5939/570 4498/6429/569 4181/5935/569 -f 4200/5960/571 4499/6430/568 4197/5956/568 -f 4186/5941/572 4500/6431/570 4184/5939/570 -f 4202/5962/573 4501/6432/571 4200/5960/571 -f 4187/5942/558 4502/6433/572 4186/5941/572 -f 4206/5966/560 4503/6434/573 4202/5962/573 -f 4189/5945/559 4504/6435/558 4187/5942/558 -f 4205/5965/563 4505/6436/561 4203/5963/561 -f 4203/5963/561 4506/6437/560 4206/5966/560 -f 4191/5948/562 4507/6438/559 4189/5945/559 -f 4499/6430/627 4508/6439/628 4497/6428/629 -f 4495/6426/630 4497/6428/629 4508/6440/628 -f 4493/6424/631 4495/6426/630 4508/6441/628 -f 4507/6438/632 4493/6424/631 4508/6442/628 -f 4504/6435/633 4507/6438/632 4508/6443/628 -f 4502/6433/634 4504/6435/633 4508/6444/628 -f 4500/6431/635 4502/6433/634 4508/6445/628 -f 4498/6429/636 4500/6431/635 4508/6446/628 -f 4496/6427/637 4498/6429/636 4508/6447/628 -f 4494/6425/638 4496/6427/637 4508/6448/628 -f 4492/6423/639 4494/6449/638 4508/6450/628 -f 4505/6436/640 4492/6423/639 4508/6451/628 -f 4506/6437/641 4505/6436/640 4508/6452/628 -f 4503/6434/642 4506/6437/641 4508/6453/628 -f 4501/6432/643 4503/6434/642 4508/6454/628 -f 4499/6430/627 4501/6432/643 4508/6455/628 -f 4193/5951/616 4377/6456/613 4376/6457/616 -f 4193/5954/616 4375/6458/617 4196/5955/617 -f 4196/5957/617 4374/6459/618 4198/5958/618 -f 4199/5959/619 4374/6459/618 4373/6460/619 -f 4201/5961/620 4373/6460/619 4372/6461/620 -f 4209/6180/622 4369/6462/608 4204/5964/608 -f 4201/5967/620 4371/6463/621 4207/5968/621 -f 4179/5969/607 4369/6462/608 4212/6464/607 -f 4207/6182/621 4370/6465/622 4209/5971/622 -f 4179/5933/607 4381/6466/609 4180/5934/609 -f 4180/5936/609 4211/6467/610 4182/5937/610 -f 4182/6175/610 4380/6468/611 4183/5938/611 -f 4183/6176/611 4210/6469/612 4185/5940/612 -f 4185/5943/612 4379/6470/615 4188/5944/615 -f 4188/5946/615 4378/6471/614 4190/5947/614 -f 4190/5949/614 4377/6456/613 4192/5950/613 -f 4249/6020/573 4509/6472/571 4246/6015/571 -f 4235/6003/572 4510/6473/570 4232/5999/570 -f 4219/5983/560 4511/6474/573 4249/6197/573 -f 4236/6004/558 4512/6475/572 4235/6003/572 -f 4222/5986/561 4513/6476/560 4219/5983/560 -f 4239/6008/559 4514/6477/558 4236/6004/558 -f 4225/5990/563 4515/6478/561 4222/5986/561 -f 4241/6010/562 4516/6479/559 4239/6008/559 -f 4227/5992/565 4517/6480/563 4225/5990/563 -f 4243/6012/564 4518/6481/562 4241/6010/562 -f 4228/5993/567 4519/6482/565 4227/5992/565 -f 4247/6016/566 4520/6483/564 4243/6012/564 -f 4230/5996/569 4521/6484/567 4228/5993/567 -f 4246/6015/571 4522/6485/568 4244/6013/568 -f 4244/6013/568 4523/6486/566 4247/6016/566 -f 4232/5999/570 4524/6487/569 4230/5996/569 -f 4516/6479/644 4525/6488/645 4514/6477/646 -f 4512/6475/647 4514/6477/646 4525/6489/645 -f 4510/6473/648 4512/6475/647 4525/6490/645 -f 4524/6487/649 4510/6473/648 4525/6491/645 -f 4521/6484/650 4524/6487/649 4525/6492/645 -f 4519/6482/651 4521/6484/650 4525/6493/645 -f 4517/6480/652 4519/6482/651 4525/6494/645 -f 4515/6478/653 4517/6480/652 4525/6495/645 -f 4513/6476/654 4515/6478/653 4525/6496/645 -f 4511/6474/655 4513/6476/654 4525/6497/645 -f 4509/6472/656 4511/6498/655 4525/6499/645 -f 4522/6485/657 4509/6472/656 4525/6500/645 -f 4523/6486/658 4522/6485/657 4525/6501/645 -f 4520/6483/659 4523/6486/658 4525/6502/645 -f 4518/6481/660 4520/6483/659 4525/6503/645 -f 4516/6479/644 4518/6481/660 4525/6504/645 -f 4233/6200/611 4251/6505/612 4234/6002/612 -f 4234/6005/612 4388/6506/615 4237/6006/615 -f 4237/6201/615 4387/6507/614 4238/6007/614 -f 4238/6202/614 4386/6508/613 4240/6009/613 -f 4242/6011/616 4386/6508/613 4385/6509/616 -f 4250/6204/618 4382/6510/619 4245/6014/619 -f 4242/6017/616 4384/6511/617 4248/6018/617 -f 4245/6205/619 4253/6512/620 4220/6019/620 -f 4248/6206/617 4383/6513/618 4250/6021/618 -f 4221/5985/621 4253/6514/620 4394/6515/621 -f 4221/5987/621 4393/6516/622 4223/5988/622 -f 4223/6198/622 4392/6517/608 4224/5989/608 -f 4224/6199/608 4252/6518/607 4226/5991/607 -f 4226/5994/607 4391/6519/609 4229/5995/609 -f 4229/5997/609 4390/6520/610 4231/5998/610 -f 4231/6000/610 4389/6521/611 4233/6001/611 -f 4290/6071/572 4526/6522/570 4287/6066/570 -f 4276/6053/573 4527/6523/571 4273/6049/571 -f 4260/6033/558 4528/6524/572 4290/6221/572 -f 4277/6054/560 4529/6525/573 4276/6053/573 -f 4263/6036/559 4530/6526/558 4260/6033/558 -f 4279/6057/561 4531/6527/560 4277/6054/560 -f 4266/6040/562 4532/6528/559 4263/6036/559 -f 4282/6061/563 4533/6529/561 4279/6057/561 -f 4268/6042/564 4534/6530/562 4266/6040/562 -f 4284/6063/565 4535/6531/563 4282/6061/563 -f 4269/6043/566 4536/6532/564 4268/6042/564 -f 4288/6067/567 4537/6533/565 4284/6063/565 -f 4271/6046/568 4538/6534/566 4269/6043/566 -f 4287/6066/570 4539/6535/569 4285/6064/569 -f 4285/6064/569 4540/6536/567 4288/6067/567 -f 4273/6049/571 4541/6537/568 4271/6046/568 -f 4533/6529/661 4542/6538/662 4531/6527/663 -f 4529/6525/664 4531/6527/663 4542/6539/662 -f 4527/6523/665 4529/6525/664 4542/6540/662 -f 4541/6537/666 4527/6523/665 4542/6541/662 -f 4538/6534/667 4541/6537/666 4542/6542/662 -f 4536/6532/668 4538/6534/667 4542/6543/662 -f 4534/6530/669 4536/6532/668 4542/6544/662 -f 4532/6528/670 4534/6530/669 4542/6545/662 -f 4530/6526/671 4532/6528/670 4542/6546/662 -f 4528/6524/672 4530/6526/671 4542/6547/662 -f 4526/6522/673 4528/6548/672 4542/6549/662 -f 4539/6535/674 4526/6522/673 4542/6550/662 -f 4540/6536/675 4539/6535/674 4542/6551/662 -f 4537/6533/676 4540/6536/675 4542/6552/662 -f 4535/6531/677 4537/6533/676 4542/6553/662 -f 4533/6529/661 4535/6531/677 4542/6554/662 -f 4275/6052/620 4402/6555/619 4292/6556/620 -f 4275/6055/620 4401/6557/621 4278/6056/621 -f 4278/6058/621 4400/6558/622 4280/6059/622 -f 4281/6060/608 4400/6558/622 4399/6559/608 -f 4281/6226/608 4398/6560/607 4283/6062/607 -f 4291/6227/610 4395/6561/611 4286/6065/611 -f 4289/6069/609 4398/6560/607 4397/6562/609 -f 4261/6070/612 4395/6561/611 4294/6563/612 -f 4289/6072/609 4396/6564/610 4291/6073/610 -f 4262/6035/615 4294/6565/612 4407/6566/615 -f 4262/6037/615 4406/6567/614 4264/6038/614 -f 4265/6039/613 4406/6567/614 4405/6568/613 -f 4265/6223/613 4293/6569/616 4267/6041/616 -f 4267/6044/616 4404/6570/617 4270/6045/617 -f 4270/6047/617 4403/6571/618 4272/6048/618 -f 4272/6050/618 4402/6555/619 4274/6051/619 -f 4309/6572/561 4412/6573/625 4411/6574/561 -f 4408/6575/625 4413/6576/626 4412/6573/625 -f 4308/6577/626 4310/6578/559 4413/6576/626 -f 4307/6579/559 4311/6580/623 4310/6578/559 -f 4410/6581/623 4312/6582/624 4311/6580/623 -f 4409/6583/624 4411/6574/561 4312/6584/624 -f 4319/6585/568 4418/6586/678 4417/6587/568 -f 4414/6588/678 4419/6589/679 4418/6586/678 -f 4321/6590/679 4322/6591/569 4419/6589/679 -f 4416/6592/569 4323/6593/680 4322/6591/569 -f 4320/6594/680 4324/6595/681 4323/6593/680 -f 4415/6596/681 4417/6587/568 4324/6597/681 -f 4331/6598/569 4424/6599/680 4423/6600/569 -f 4420/6601/680 4425/6602/681 4424/6599/680 -f 4333/6603/681 4334/6604/568 4425/6602/681 -f 4422/6605/568 4335/6606/678 4334/6604/568 -f 4332/6607/678 4336/6608/679 4335/6606/678 -f 4421/6609/679 4423/6600/569 4336/6610/679 -f 4440/6287/558 4457/6309/558 4443/6295/559 -f 4432/6271/560 4458/6310/560 4444/6296/561 -f 4439/6285/559 4443/6318/559 4445/6297/562 -f 4431/6269/561 4444/6296/561 4446/6298/563 -f 4438/6283/562 4445/6297/562 4447/6299/564 -f 4430/6267/563 4446/6298/563 4448/6300/565 -f 4437/6281/564 4447/6299/564 4449/6301/566 -f 4429/6265/565 4448/6300/565 4450/6302/567 -f 4436/6280/566 4449/6301/566 4451/6303/568 -f 4427/6263/569 4453/6305/569 4452/6304/570 -f 4426/6262/567 4450/6302/567 4453/6305/569 -f 4435/6277/568 4451/6303/568 4454/6306/571 -f 4442/6292/570 4452/6304/570 4455/6307/572 -f 4434/6275/571 4454/6306/571 4456/6308/573 -f 4441/6290/572 4455/6307/572 4457/6309/558 -f 4433/6273/573 4456/6308/573 4458/6310/560 -f 4451/6303/574 4472/6611/574 4459/6311/575 -f 4452/6304/576 4473/6612/576 4460/6312/577 -f 4454/6306/575 4459/6613/575 4461/6313/578 -f 4455/6307/577 4460/6614/577 4462/6314/579 -f 4456/6308/578 4461/6615/578 4463/6315/580 -f 4457/6309/579 4462/6616/579 4464/6316/581 -f 4458/6310/580 4463/6617/580 4465/6317/582 -f 4443/6318/581 4464/6356/581 4466/6319/583 -f 4444/6296/582 4465/6618/582 4467/6320/584 -f 4445/6297/583 4466/6619/583 4468/6321/585 -f 4446/6298/584 4467/6620/584 4469/6322/586 -f 4447/6299/585 4468/6621/585 4470/6323/587 -f 4448/6300/586 4469/6622/586 4471/6324/588 -f 4449/6301/587 4470/6623/587 4472/6325/574 -f 4453/6305/589 4474/6624/589 4473/6326/576 -f 4450/6302/588 4471/6625/588 4474/6327/589 -f 4467/6328/563 4340/6358/563 4123/6329/565 -f 4468/6331/564 4346/6359/564 4345/6332/566 -f 4469/6330/565 4123/6329/565 4339/6334/567 -f 4470/6333/566 4345/6332/566 4344/6336/568 -f 4474/6338/569 4338/6341/569 4337/6339/570 -f 4471/6335/567 4339/6334/567 4338/6341/569 -f 4472/6337/568 4344/6336/568 4343/6342/571 -f 4473/6340/570 4337/6339/570 4122/6344/572 -f 4459/6343/571 4343/6342/571 4124/6346/573 -f 4460/6345/572 4122/6344/572 4349/6348/558 -f 4461/6347/573 4124/6346/573 4342/6350/560 -f 4462/6349/558 4349/6348/558 4348/6352/559 -f 4463/6351/560 4342/6350/560 4341/6354/561 -f 4464/6356/559 4348/6626/559 4347/6357/562 -f 4465/6355/561 4341/6354/561 4340/6358/563 -f 4466/6319/562 4347/6357/562 4346/6359/564 -f 4155/5903/564 4477/6386/564 4475/6360/562 -f 4141/5885/565 4478/6363/565 4476/6361/563 -f 4125/5865/566 4479/6364/566 4477/6362/564 -f 4142/5886/567 4480/6365/567 4478/6363/565 -f 4128/5868/568 4481/6366/568 4479/6364/566 -f 4144/5889/569 4482/6367/569 4480/6365/567 -f 4131/5872/571 4483/6368/571 4481/6366/568 -f 4147/5893/570 4484/6369/570 4482/6367/569 -f 4133/5874/573 4485/6370/573 4483/6368/571 -f 4149/5895/572 4486/6371/572 4484/6369/570 -f 4134/5875/560 4487/6372/560 4485/6370/573 -f 4153/5899/558 4489/6374/558 4486/6371/572 -f 4136/5878/561 4490/6375/561 4487/6372/560 -f 4152/5898/562 4475/6360/562 4488/6373/559 -f 4150/5896/559 4488/6373/559 4489/6374/558 -f 4138/5881/563 4476/6361/563 4490/6375/561 -f 4140/5884/607 4139/6148/608 4357/6393/608 -f 4140/5887/607 4157/6394/607 4356/6395/609 -f 4143/5890/609 4356/6395/609 4355/6396/610 -f 4145/6149/610 4355/6396/610 4354/6397/611 -f 4148/5894/612 4146/6150/611 4354/6397/611 -f 4151/5897/613 4156/6151/614 4351/6399/614 -f 4148/5900/612 4353/6398/612 4352/6401/615 -f 4151/6152/613 4350/6400/613 4159/6402/616 -f 4154/6153/615 4352/6401/615 4351/6399/614 -f 4127/5867/617 4126/5866/616 4159/6403/616 -f 4127/5869/617 4362/6404/617 4361/6405/618 -f 4129/6146/618 4361/6405/618 4360/6406/619 -f 4130/6147/619 4360/6406/619 4158/6407/620 -f 4132/5876/620 4158/6407/620 4359/6408/621 -f 4135/5879/621 4359/6408/621 4358/6409/622 -f 4137/5882/622 4358/6409/622 4357/6393/608 -f 4172/6410/559 4363/6413/623 4367/6411/623 -f 4363/6413/623 4174/6415/624 4368/6414/624 -f 4174/6415/624 4365/6417/561 4175/6416/561 -f 4365/6417/561 4173/6419/625 4176/6418/625 -f 4173/6419/625 4364/6627/626 4177/6420/626 -f 4364/6421/626 4172/6410/559 4366/6412/559 -f 4208/5970/565 4494/6449/565 4492/6423/563 -f 4194/5952/564 4495/6426/564 4493/6424/562 -f 4178/5932/567 4496/6427/567 4494/6425/565 -f 4195/5953/566 4497/6428/566 4495/6426/564 -f 4181/5935/569 4498/6429/569 4496/6427/567 -f 4197/5956/568 4499/6430/568 4497/6428/566 -f 4184/5939/570 4500/6431/570 4498/6429/569 -f 4200/5960/571 4501/6432/571 4499/6430/568 -f 4186/5941/572 4502/6433/572 4500/6431/570 -f 4202/5962/573 4503/6434/573 4501/6432/571 -f 4187/5942/558 4504/6435/558 4502/6433/572 -f 4206/5966/560 4506/6437/560 4503/6434/573 -f 4189/5945/559 4507/6438/559 4504/6435/558 -f 4205/5965/563 4492/6423/563 4505/6436/561 -f 4203/5963/561 4505/6436/561 4506/6437/560 -f 4191/5948/562 4493/6424/562 4507/6438/559 -f 4193/5951/616 4192/6177/613 4377/6456/613 -f 4193/5954/616 4376/6457/616 4375/6458/617 -f 4196/5957/617 4375/6458/617 4374/6459/618 -f 4199/5959/619 4198/6178/618 4374/6459/618 -f 4201/5961/620 4199/6179/619 4373/6460/619 -f 4209/6180/622 4370/6465/622 4369/6462/608 -f 4201/5967/620 4372/6461/620 4371/6463/621 -f 4179/5969/607 4204/6181/608 4369/6462/608 -f 4207/6182/621 4371/6463/621 4370/6465/622 -f 4179/5933/607 4212/6628/607 4381/6466/609 -f 4180/5936/609 4381/6466/609 4211/6467/610 -f 4182/6175/610 4211/6467/610 4380/6468/611 -f 4183/6176/611 4380/6468/611 4210/6469/612 -f 4185/5943/612 4210/6469/612 4379/6470/615 -f 4188/5946/615 4379/6470/615 4378/6471/614 -f 4190/5949/614 4378/6471/614 4377/6456/613 -f 4249/6020/573 4511/6498/573 4509/6472/571 -f 4235/6003/572 4512/6475/572 4510/6473/570 -f 4219/5983/560 4513/6476/560 4511/6474/573 -f 4236/6004/558 4514/6477/558 4512/6475/572 -f 4222/5986/561 4515/6478/561 4513/6476/560 -f 4239/6008/559 4516/6479/559 4514/6477/558 -f 4225/5990/563 4517/6480/563 4515/6478/561 -f 4241/6010/562 4518/6481/562 4516/6479/559 -f 4227/5992/565 4519/6482/565 4517/6480/563 -f 4243/6012/564 4520/6483/564 4518/6481/562 -f 4228/5993/567 4521/6484/567 4519/6482/565 -f 4247/6016/566 4523/6486/566 4520/6483/564 -f 4230/5996/569 4524/6487/569 4521/6484/567 -f 4246/6015/571 4509/6472/571 4522/6485/568 -f 4244/6013/568 4522/6485/568 4523/6486/566 -f 4232/5999/570 4510/6473/570 4524/6487/569 -f 4233/6200/611 4389/6521/611 4251/6505/612 -f 4234/6005/612 4251/6505/612 4388/6506/615 -f 4237/6201/615 4388/6506/615 4387/6507/614 -f 4238/6202/614 4387/6507/614 4386/6508/613 -f 4242/6011/616 4240/6203/613 4386/6508/613 -f 4250/6204/618 4383/6513/618 4382/6510/619 -f 4242/6017/616 4385/6509/616 4384/6511/617 -f 4245/6205/619 4382/6510/619 4253/6512/620 -f 4248/6206/617 4384/6511/617 4383/6513/618 -f 4221/5985/621 4220/5984/620 4253/6514/620 -f 4221/5987/621 4394/6515/621 4393/6516/622 -f 4223/6198/622 4393/6516/622 4392/6517/608 -f 4224/6199/608 4392/6517/608 4252/6518/607 -f 4226/5994/607 4252/6518/607 4391/6519/609 -f 4229/5997/609 4391/6519/609 4390/6520/610 -f 4231/6000/610 4390/6520/610 4389/6521/611 -f 4290/6071/572 4528/6548/572 4526/6522/570 -f 4276/6053/573 4529/6525/573 4527/6523/571 -f 4260/6033/558 4530/6526/558 4528/6524/572 -f 4277/6054/560 4531/6527/560 4529/6525/573 -f 4263/6036/559 4532/6528/559 4530/6526/558 -f 4279/6057/561 4533/6529/561 4531/6527/560 -f 4266/6040/562 4534/6530/562 4532/6528/559 -f 4282/6061/563 4535/6531/563 4533/6529/561 -f 4268/6042/564 4536/6532/564 4534/6530/562 -f 4284/6063/565 4537/6533/565 4535/6531/563 -f 4269/6043/566 4538/6534/566 4536/6532/564 -f 4288/6067/567 4540/6536/567 4537/6533/565 -f 4271/6046/568 4541/6537/568 4538/6534/566 -f 4287/6066/570 4526/6522/570 4539/6535/569 -f 4285/6064/569 4539/6535/569 4540/6536/567 -f 4273/6049/571 4527/6523/571 4541/6537/568 -f 4275/6052/620 4274/6224/619 4402/6555/619 -f 4275/6055/620 4292/6556/620 4401/6557/621 -f 4278/6058/621 4401/6557/621 4400/6558/622 -f 4281/6060/608 4280/6225/622 4400/6558/622 -f 4281/6226/608 4399/6559/608 4398/6560/607 -f 4291/6227/610 4396/6564/610 4395/6561/611 -f 4289/6069/609 4283/6068/607 4398/6560/607 -f 4261/6070/612 4286/6228/611 4395/6561/611 -f 4289/6072/609 4397/6562/609 4396/6564/610 -f 4262/6035/615 4261/6034/612 4294/6565/612 -f 4262/6037/615 4407/6566/615 4406/6567/614 -f 4265/6039/613 4264/6222/614 4406/6567/614 -f 4265/6223/613 4405/6568/613 4293/6569/616 -f 4267/6044/616 4293/6569/616 4404/6570/617 -f 4270/6047/617 4404/6570/617 4403/6571/618 -f 4272/6050/618 4403/6571/618 4402/6555/619 -f 4309/6572/561 4408/6575/625 4412/6573/625 -f 4408/6575/625 4308/6577/626 4413/6576/626 -f 4308/6577/626 4307/6579/559 4310/6578/559 -f 4307/6579/559 4410/6581/623 4311/6580/623 -f 4410/6581/623 4409/6629/624 4312/6582/624 -f 4409/6583/624 4309/6572/561 4411/6574/561 -f 4319/6585/568 4414/6588/678 4418/6586/678 -f 4414/6588/678 4321/6590/679 4419/6589/679 -f 4321/6590/679 4416/6592/569 4322/6591/569 -f 4416/6592/569 4320/6594/680 4323/6593/680 -f 4320/6594/680 4415/6630/681 4324/6595/681 -f 4415/6596/681 4319/6585/568 4417/6587/568 -f 4331/6598/569 4420/6601/680 4424/6599/680 -f 4420/6601/680 4333/6603/681 4425/6602/681 -f 4333/6603/681 4422/6605/568 4334/6604/568 -f 4422/6605/568 4332/6607/678 4335/6606/678 -f 4332/6607/678 4421/6631/679 4336/6608/679 -f 4421/6609/679 4331/6598/569 4423/6600/569 -o Huge_Missile -v 0.923880 8.500000 0.382684 -v 0.618718 8.500000 0.618719 -v 0.808395 8.500000 0.334848 -v -0.707107 8.500000 -0.707107 -v -0.808395 8.500000 -0.334848 -v -0.923880 8.500000 -0.382683 -v 0.382683 8.500000 0.923880 -v 0.707107 8.500000 0.707107 -v -0.382683 8.500000 -0.923880 -v -0.618718 8.500000 -0.618719 -v 0.000000 8.500000 0.875000 -v 0.334848 8.500000 0.808394 -v 0.000000 8.500000 -1.000000 -v 0.334848 8.500000 -0.808395 -v 0.000000 8.500000 -0.875000 -v -0.334848 8.500000 -0.808394 -v -0.382683 8.500000 0.923880 -v 0.000000 8.500000 1.000000 -v 0.707107 8.500000 -0.707107 -v 0.382683 8.500000 -0.923880 -v -0.707107 8.500000 0.707107 -v -0.334848 8.500000 0.808394 -v 0.808394 8.500000 -0.334848 -v 0.618718 8.500000 -0.618719 -v -0.923880 8.500000 0.382684 -v -0.618718 8.500000 0.618719 -v 0.923879 8.500000 -0.382684 -v 0.875000 8.500000 0.000000 -v -1.000000 8.500000 0.000000 -v -0.808395 8.500000 0.334848 -v 1.000000 8.500000 0.000000 -v 0.265165 2.000000 -0.359835 -v -0.265165 2.000000 -0.359835 -v -0.265165 2.000000 -0.890165 -v -0.875000 8.500000 0.000000 -v 1.000000 8.250000 0.000000 -v 0.808395 8.250000 0.334848 -v 0.923880 8.250000 0.382684 -v 0.923879 8.250000 -0.382684 -v 0.875000 8.250000 0.000000 -v 0.707107 8.250000 -0.707107 -v 0.808394 8.250000 -0.334848 -v 0.382683 8.250000 -0.923880 -v 0.618718 8.250000 -0.618719 -v 0.000000 8.250000 -1.000000 -v 0.334848 8.250000 -0.808395 -v -0.382683 8.250000 -0.923880 -v 0.000000 8.250000 -0.875000 -v -0.618718 8.250000 -0.618719 -v -0.334848 8.250000 -0.808394 -v -0.707107 8.250000 -0.707107 -v -0.808395 8.250000 -0.334848 -v -0.923880 8.250000 -0.382683 -v -0.875000 8.250000 0.000000 -v -1.000000 8.250000 0.000000 -v -0.808395 8.250000 0.334848 -v -0.923880 8.250000 0.382684 -v -0.618718 8.250000 0.618719 -v -0.382683 8.250000 0.923880 -v -0.707107 8.250000 0.707107 -v 0.000000 8.250000 0.875000 -v -0.334848 8.250000 0.808394 -v 0.382683 8.250000 0.923880 -v 0.000000 8.250000 1.000000 -v 0.707107 8.250000 0.707107 -v 0.334848 8.250000 0.808394 -v 0.618718 8.250000 0.618719 -v -0.883883 2.500000 -0.883883 -v 0.883883 2.500000 -0.883884 -v 0.883883 2.500000 0.883884 -v 1.502602 2.375000 -1.502602 -v 0.839689 2.375000 -0.751301 -v 0.751301 2.375000 -0.839689 -v 0.839689 5.375000 -0.751301 -v 1.502602 3.375000 -1.502602 -v 0.751301 5.375000 -0.839689 -v 0.265165 2.000000 0.890165 -v -0.265165 2.000000 0.890165 -v -0.265165 2.000000 0.359835 -v 0.890165 2.000000 0.265165 -v 0.359835 2.000000 0.265165 -v 0.359835 2.000000 -0.265165 -v -0.359835 2.000000 0.265165 -v -0.890165 2.000000 0.265165 -v -0.890165 2.000000 -0.265165 -v -1.502602 2.375000 1.502602 -v -0.839689 2.375000 0.751301 -v -0.751301 2.375000 0.839689 -v -0.839689 5.375000 0.751301 -v -1.502602 3.375000 1.502602 -v -0.751301 5.375000 0.839689 -v -1.502602 2.375000 -1.502602 -v -0.751301 2.375000 -0.839689 -v -0.839689 2.375000 -0.751301 -v -0.751301 5.375000 -0.839689 -v -1.502602 3.375000 -1.502602 -v -0.839689 5.375000 -0.751301 -v 1.502602 2.375000 1.502601 -v 0.751301 2.375000 0.839689 -v 0.839689 2.375000 0.751301 -v 0.751301 5.375000 0.839689 -v 1.502602 3.375000 1.502601 -v 0.839689 5.375000 0.751301 -v -0.143506 2.000000 -0.971455 -v 0.265165 2.000000 -0.890165 -v 0.000000 2.000000 -1.000000 -v 0.143506 2.000000 -0.971455 -v 0.346455 2.000000 -0.768507 -v 0.375000 2.000000 -0.625000 -v 0.346455 2.000000 -0.481493 -v 0.143506 2.000000 -0.278545 -v 0.000000 2.000000 -0.250000 -v -0.143506 2.000000 -0.278545 -v -0.346455 2.000000 -0.481494 -v -0.375000 2.000000 -0.625000 -v -0.346455 2.000000 -0.768506 -v -0.478354 2.500000 -1.154850 -v 0.000000 2.500000 -1.250000 -v 0.478354 2.500000 -1.154850 -v 1.154849 2.500000 -0.478354 -v 1.250000 2.500000 0.000000 -v 1.154849 2.500000 0.478354 -v 0.478354 2.500000 1.154850 -v 0.000000 2.500000 1.250000 -v -0.478354 2.500000 1.154850 -v -0.883883 2.500000 0.883883 -v -1.154849 2.500000 0.478354 -v -1.250000 2.500000 0.000000 -v -1.154849 2.500000 -0.478354 -v -0.143506 2.000000 0.278545 -v 0.265165 2.000000 0.359835 -v 0.000000 2.000000 0.250000 -v 0.143506 2.000000 0.278545 -v 0.346455 2.000000 0.481493 -v 0.375000 2.000000 0.625000 -v 0.346455 2.000000 0.768507 -v 0.143506 2.000000 0.971455 -v 0.000000 2.000000 1.000000 -v -0.143506 2.000000 0.971455 -v -0.346455 2.000000 0.768506 -v -0.375000 2.000000 0.625000 -v -0.346455 2.000000 0.481494 -v 0.481494 2.000000 -0.346455 -v 0.890165 2.000000 -0.265165 -v 0.625000 2.000000 -0.375000 -v 0.768506 2.000000 -0.346455 -v 0.971455 2.000000 -0.143507 -v 1.000000 2.000000 0.000000 -v 0.971455 2.000000 0.143507 -v 0.768506 2.000000 0.346455 -v 0.625000 2.000000 0.375000 -v 0.481494 2.000000 0.346455 -v 0.278545 2.000000 0.143506 -v 0.250000 2.000000 0.000000 -v 0.278545 2.000000 -0.143506 -v -0.768506 2.000000 -0.346455 -v -0.359835 2.000000 -0.265165 -v -0.625000 2.000000 -0.375000 -v -0.481494 2.000000 -0.346455 -v -0.278545 2.000000 -0.143507 -v -0.250000 2.000000 0.000000 -v -0.278545 2.000000 0.143507 -v -0.481494 2.000000 0.346455 -v -0.625000 2.000000 0.375000 -v -0.768506 2.000000 0.346455 -v -0.971455 2.000000 0.143506 -v -1.000000 2.000000 0.000000 -v -0.971455 2.000000 -0.143506 -v -1.250000 7.250000 0.000000 -v -1.154849 7.250000 0.478354 -v -0.707107 11.500000 -0.707107 -v -0.334848 13.000000 -0.808394 -v -0.382683 11.500000 -0.923880 -v 0.707107 11.500000 0.707107 -v 0.334848 13.000000 0.808394 -v 0.382683 11.500000 0.923880 -v -0.923880 11.500000 -0.382683 -v -0.618718 13.000000 -0.618719 -v 0.923880 11.500000 0.382684 -v 0.618718 13.000000 0.618719 -v -1.000000 11.500000 0.000000 -v -0.808395 13.000000 -0.334848 -v 0.875000 13.000000 0.000000 -v 0.808395 13.000000 0.334848 -v -0.923880 11.500000 0.382684 -v -0.875000 13.000000 0.000000 -v 0.923879 11.500000 -0.382684 -v 1.000000 11.500000 0.000000 -v -0.707107 11.500000 0.707107 -v -0.808395 13.000000 0.334848 -v 0.707107 11.500000 -0.707107 -v 0.808394 13.000000 -0.334848 -v -0.382683 11.500000 0.923880 -v -0.618718 13.000000 0.618719 -v 0.382683 11.500000 -0.923880 -v 0.618718 13.000000 -0.618719 -v 0.000000 11.500000 1.000000 -v -0.334848 13.000000 0.808394 -v 0.000000 13.000000 -0.875000 -v 0.000000 11.500000 -1.000000 -v 0.334848 13.000000 -0.808395 -v 0.000000 13.000000 0.875000 -v 1.154849 7.250000 0.478354 -v 1.250000 7.250000 0.000000 -v 0.000000 15.499999 0.000001 -v -1.154849 7.250000 -0.478354 -v 0.883883 7.250000 0.883884 -v -0.883883 7.250000 -0.883883 -v 0.478354 7.250000 1.154850 -v -0.478354 7.250000 -1.154850 -v 0.000000 7.250000 1.250000 -v 0.478354 7.250000 -1.154850 -v 0.000000 7.250000 -1.250000 -v -0.478354 7.250000 1.154850 -v 0.883883 7.250000 -0.883884 -v 0.346455 2.250000 -0.481493 -v 0.176777 2.500000 -0.448223 -v 0.265165 2.250000 -0.359835 -v 0.143506 2.250000 -0.278545 -v 0.095671 2.500000 -0.394030 -v 0.000000 2.500000 -0.375000 -v 0.000000 2.250000 -0.250000 -v -0.143506 2.250000 -0.278545 -v -0.095671 2.500000 -0.394030 -v -0.176777 2.500000 -0.448223 -v -0.265165 2.250000 -0.359835 -v -0.230970 2.500000 -0.529329 -v -0.346455 2.250000 -0.481494 -v -0.250000 2.500000 -0.625000 -v -0.375000 2.250000 -0.625000 -v -0.230970 2.500000 -0.720671 -v -0.346455 2.250000 -0.768506 -v -0.176777 2.500000 -0.801777 -v -0.265165 2.250000 -0.890165 -v -0.143506 2.250000 -0.971455 -v -0.095671 2.500000 -0.855970 -v 0.000000 2.500000 -0.875000 -v 0.000000 2.250000 -1.000000 -v 0.095671 2.500000 -0.855970 -v 0.143506 2.250000 -0.971455 -v 0.176777 2.500000 -0.801777 -v 0.265165 2.250000 -0.890165 -v 0.346455 2.250000 -0.768507 -v 0.230970 2.500000 -0.720671 -v 0.375000 2.250000 -0.625000 -v 0.250000 2.500000 -0.625000 -v 0.230970 2.500000 -0.529329 -v 1.154849 7.250000 -0.478354 -v -0.883883 7.250000 0.883883 -v 0.717107 9.313000 -0.717107 -v 0.392683 10.500000 -0.933880 -v 0.717107 10.500000 -0.717107 -v 0.933879 9.313000 -0.392684 -v 0.933879 10.500000 -0.392684 -v 1.010000 9.313000 -0.010000 -v 1.010000 10.500000 -0.010000 -v 0.346455 2.250000 0.768507 -v 0.176777 2.500000 0.801777 -v 0.265165 2.250000 0.890165 -v 0.143506 2.250000 0.971455 -v 0.095671 2.500000 0.855970 -v 0.000000 2.500000 0.875000 -v 0.000000 2.250000 1.000000 -v -0.143506 2.250000 0.971455 -v -0.095671 2.500000 0.855970 -v -0.176777 2.500000 0.801777 -v -0.265165 2.250000 0.890165 -v -0.230970 2.500000 0.720671 -v -0.346455 2.250000 0.768506 -v -0.250000 2.500000 0.625000 -v -0.375000 2.250000 0.625000 -v -0.346455 2.250000 0.481494 -v -0.230970 2.500000 0.529329 -v -0.176777 2.500000 0.448223 -v -0.265165 2.250000 0.359835 -v -0.143506 2.250000 0.278545 -v -0.095671 2.500000 0.394030 -v 0.000000 2.250000 0.250000 -v 0.000000 2.500000 0.375000 -v 0.095671 2.500000 0.394030 -v 0.143506 2.250000 0.278545 -v 0.265165 2.250000 0.359835 -v 0.176777 2.500000 0.448223 -v 0.346455 2.250000 0.481493 -v 0.230970 2.500000 0.529329 -v 0.375000 2.250000 0.625000 -v 0.250000 2.500000 0.625000 -v 0.230970 2.500000 0.720671 -v 0.971455 2.250000 0.143507 -v 0.801777 2.500000 0.176777 -v 0.890165 2.250000 0.265165 -v 0.768506 2.250000 0.346455 -v 0.720671 2.500000 0.230970 -v 0.625000 2.500000 0.250000 -v 0.625000 2.250000 0.375000 -v 0.481494 2.250000 0.346455 -v 0.529329 2.500000 0.230970 -v 0.448223 2.500000 0.176777 -v 0.359835 2.250000 0.265165 -v 0.394030 2.500000 0.095671 -v 0.278545 2.250000 0.143506 -v 0.375000 2.500000 0.000000 -v 0.250000 2.250000 0.000000 -v 0.278545 2.250000 -0.143506 -v 0.394030 2.500000 -0.095671 -v 0.448223 2.500000 -0.176777 -v 0.359835 2.250000 -0.265165 -v 0.481494 2.250000 -0.346455 -v 0.529329 2.500000 -0.230970 -v 0.625000 2.500000 -0.250000 -v 0.625000 2.250000 -0.375000 -v 0.720671 2.500000 -0.230970 -v 0.768506 2.250000 -0.346455 -v 0.801777 2.500000 -0.176777 -v 0.890165 2.250000 -0.265165 -v 0.971455 2.250000 -0.143507 -v 0.855970 2.500000 -0.095671 -v 1.000000 2.250000 0.000000 -v 0.875000 2.500000 0.000000 -v 0.855970 2.500000 0.095671 -v -0.278545 2.250000 0.143507 -v -0.448223 2.500000 0.176777 -v -0.359835 2.250000 0.265165 -v -0.481494 2.250000 0.346455 -v -0.529329 2.500000 0.230970 -v -0.625000 2.500000 0.250000 -v -0.625000 2.250000 0.375000 -v -0.768506 2.250000 0.346455 -v -0.720671 2.500000 0.230970 -v -0.801777 2.500000 0.176777 -v -0.890165 2.250000 0.265165 -v -0.855970 2.500000 0.095671 -v -0.971455 2.250000 0.143506 -v -0.875000 2.500000 0.000000 -v -1.000000 2.250000 0.000000 -v -0.971455 2.250000 -0.143506 -v -0.855970 2.500000 -0.095671 -v -0.801777 2.500000 -0.176777 -v -0.890165 2.250000 -0.265165 -v -0.768506 2.250000 -0.346455 -v -0.720671 2.500000 -0.230970 -v -0.625000 2.500000 -0.250000 -v -0.625000 2.250000 -0.375000 -v -0.529329 2.500000 -0.230970 -v -0.481494 2.250000 -0.346455 -v -0.448223 2.500000 -0.176777 -v -0.359835 2.250000 -0.265165 -v -0.278545 2.250000 -0.143507 -v -0.394030 2.500000 -0.095671 -v -0.250000 2.250000 0.000000 -v -0.375000 2.500000 0.000000 -v -0.394030 2.500000 0.095671 -v -0.717106 9.313000 0.717107 -v -0.392683 10.500000 0.933880 -v -0.717106 10.500000 0.717107 -v -0.933879 9.313000 0.392684 -v -0.933879 10.500000 0.392684 -v -1.010000 9.313000 0.010000 -v -1.010000 10.500000 0.010000 -v 0.392683 9.313000 -0.933880 -v -0.392683 9.313000 0.933880 -vt 0.291667 0.471698 -vt 0.250000 0.462264 -vt 0.291667 0.462264 -vt 0.583333 0.471698 -vt 0.625000 0.462264 -vt 0.625000 0.471698 -vt 0.208333 0.471698 -vt 0.250000 0.471698 -vt 0.541667 0.471698 -vt 0.583333 0.462264 -vt 0.166667 0.462264 -vt 0.208333 0.462264 -vt 0.500000 0.471698 -vt 0.458333 0.462264 -vt 0.500000 0.462264 -vt 0.541667 0.462264 -vt 0.125000 0.471698 -vt 0.166667 0.471698 -vt 0.416667 0.471698 -vt 0.458333 0.471698 -vt 0.083333 0.471698 -vt 0.125000 0.462264 -vt 0.375000 0.462264 -vt 0.416667 0.462264 -vt 0.041667 0.471698 -vt 0.083333 0.462264 -vt 0.375000 0.471698 -vt 0.333333 0.462264 -vt -0.000000 0.471698 -vt 0.041667 0.462264 -vt 0.333333 0.471698 -vt 0.678877 0.708687 -vt 0.678877 0.668671 -vt 0.737790 0.668671 -vt 0.666667 0.462264 -vt 0.666667 0.471698 -vt 0.333333 0.433962 -vt 0.291667 0.443396 -vt 0.291667 0.433962 -vt 0.375000 0.433962 -vt 0.333333 0.443396 -vt 0.416667 0.433962 -vt 0.375000 0.443396 -vt 0.458333 0.433962 -vt 0.416667 0.443396 -vt 0.500000 0.433962 -vt 0.458333 0.443396 -vt 0.541667 0.433962 -vt 0.500000 0.443396 -vt 0.583333 0.443396 -vt 0.541667 0.443396 -vt 0.583333 0.433962 -vt 0.625000 0.443396 -vt 0.625000 0.433962 -vt 0.666667 0.443396 -vt 0.000000 0.433962 -vt 0.041667 0.443396 -vt 0.000000 0.443396 -vt 0.041667 0.433962 -vt 0.083333 0.443396 -vt 0.125000 0.433962 -vt 0.083333 0.433962 -vt 0.166667 0.443396 -vt 0.125000 0.443396 -vt 0.208333 0.433962 -vt 0.166667 0.433962 -vt 0.250000 0.433962 -vt 0.208333 0.443396 -vt 0.250000 0.443396 -vt 0.903652 0.461671 -vt 0.903652 0.594933 -vt 0.707459 0.594933 -vt 1.000000 0.004717 -vt 0.888889 0.004717 -vt 0.888889 -0.000000 -vt 0.888889 0.231132 -vt 1.000000 0.231132 -vt 0.888889 0.235849 -vt 1.000000 0.080189 -vt 0.888889 0.004717 -vt 0.678877 0.708687 -vt 0.678877 0.668671 -vt 0.737790 0.668671 -vt 0.678877 0.708687 -vt 0.678877 0.668671 -vt 0.737790 0.668671 -vt 0.678877 0.708687 -vt 0.678877 0.668671 -vt 0.737790 0.668671 -vt 1.000000 0.004717 -vt 0.888889 0.004717 -vt 0.888889 -0.000000 -vt 0.888889 0.231132 -vt 1.000000 0.231132 -vt 0.888889 0.235849 -vt 1.000000 0.080189 -vt 0.888889 0.004717 -vt 1.000000 0.004717 -vt 0.888889 0.004717 -vt 0.888889 -0.000000 -vt 0.888889 0.231132 -vt 1.000000 0.231132 -vt 0.888889 0.235849 -vt 1.000000 0.080189 -vt 0.888889 0.004717 -vt 1.000000 0.004717 -vt 0.888889 0.004717 -vt 0.888889 -0.000000 -vt 0.888889 0.231132 -vt 1.000000 0.231132 -vt 0.888889 0.235849 -vt 1.000000 0.080189 -vt 0.888889 0.004717 -vt 0.000000 0.462264 -vt 0.746820 0.677851 -vt 0.737790 0.708687 -vt 0.749991 0.688679 -vt 0.746820 0.699508 -vt 0.724275 0.714821 -vt 0.708333 0.716975 -vt 0.692392 0.714821 -vt 0.669847 0.699508 -vt 0.666676 0.688679 -vt 0.669847 0.677851 -vt 0.692392 0.662537 -vt 0.708333 0.660383 -vt 0.724275 0.662537 -vt 0.666667 0.433962 -vt 0.933724 0.492241 -vt 0.944284 0.528302 -vt 0.933724 0.564363 -vt 0.858645 0.615360 -vt 0.805556 0.622533 -vt 0.752466 0.615360 -vt 0.677387 0.564362 -vt 0.666827 0.528302 -vt 0.677387 0.492241 -vt 0.707459 0.461671 -vt 0.752466 0.441244 -vt 0.805556 0.434071 -vt 0.858645 0.441244 -vt 0.888889 0.231132 -vt 0.746820 0.677851 -vt 0.737790 0.708687 -vt 0.749991 0.688679 -vt 0.746820 0.699508 -vt 0.724275 0.714821 -vt 0.708333 0.716975 -vt 0.692392 0.714821 -vt 0.669847 0.699508 -vt 0.666676 0.688679 -vt 0.669847 0.677851 -vt 0.692392 0.662537 -vt 0.708333 0.660383 -vt 0.724275 0.662537 -vt 0.746820 0.677851 -vt 0.737790 0.708687 -vt 0.749991 0.688679 -vt 0.746820 0.699508 -vt 0.724275 0.714821 -vt 0.708333 0.716975 -vt 0.692392 0.714821 -vt 0.669847 0.699508 -vt 0.666676 0.688679 -vt 0.669847 0.677851 -vt 0.692392 0.662537 -vt 0.708333 0.660383 -vt 0.724275 0.662537 -vt 0.746820 0.677851 -vt 0.737790 0.708687 -vt 0.749991 0.688679 -vt 0.746820 0.699508 -vt 0.724275 0.714821 -vt 0.708333 0.716975 -vt 0.692392 0.714821 -vt 0.669847 0.699508 -vt 0.666676 0.688679 -vt 0.669847 0.677851 -vt 0.692392 0.662537 -vt 0.708333 0.660383 -vt 0.724275 0.662537 -vt 0.888889 0.231132 -vt 0.888889 0.231132 -vt 0.888889 0.231132 -vt -0.000000 0.358491 -vt 0.055556 0.000000 -vt 0.055556 0.358491 -vt 0.583333 0.698113 -vt 0.541667 0.811321 -vt 0.541667 0.698113 -vt 0.250000 0.698113 -vt 0.208333 0.811321 -vt 0.208333 0.698113 -vt 0.625000 0.698113 -vt 0.583333 0.811321 -vt 0.291667 0.698113 -vt 0.250000 0.811321 -vt 0.666667 0.698113 -vt 0.625000 0.811321 -vt 0.326389 0.811321 -vt 0.291667 0.811321 -vt 0.041667 0.698113 -vt 0.000000 0.811321 -vt -0.000000 0.698113 -vt 0.375000 0.698113 -vt 0.333333 0.811321 -vt 0.333333 0.698113 -vt 0.083333 0.698113 -vt 0.041667 0.811321 -vt 0.416667 0.698113 -vt 0.375000 0.811321 -vt 0.125000 0.698113 -vt 0.083333 0.811321 -vt 0.458333 0.698113 -vt 0.416667 0.811321 -vt 0.166667 0.698113 -vt 0.125000 0.811321 -vt 0.500000 0.811321 -vt 0.500000 0.698113 -vt 0.458333 0.811321 -vt 0.166667 0.811321 -vt 0.388889 0.358491 -vt 0.444444 0.000000 -vt 0.444444 0.358491 -vt 0.576389 0.811321 -vt 0.562500 1.000000 -vt 0.618056 0.811321 -vt 0.604167 1.000000 -vt 0.659722 0.811321 -vt 0.645833 1.000000 -vt 0.034722 0.811321 -vt 0.020833 1.000000 -vt 0.076389 0.811321 -vt 0.062500 1.000000 -vt 0.118056 0.811321 -vt 0.104167 1.000000 -vt 0.159722 0.811321 -vt 0.145833 1.000000 -vt 0.194444 0.811321 -vt 0.187500 1.000000 -vt 0.243056 0.811321 -vt 0.229167 1.000000 -vt 0.284722 0.811321 -vt 0.270833 1.000000 -vt 0.312500 1.000000 -vt 0.368056 0.811321 -vt 0.354167 1.000000 -vt 0.409722 0.811321 -vt 0.395833 1.000000 -vt 0.451389 0.811321 -vt 0.437500 1.000000 -vt 0.493056 0.811321 -vt 0.479167 1.000000 -vt 0.534722 0.811321 -vt 0.520833 1.000000 -vt 0.833333 0.358491 -vt 0.888889 0.000000 -vt 0.888889 0.358491 -vt 0.333333 0.358491 -vt 0.388889 -0.000000 -vt 0.777778 0.358491 -vt 0.833333 0.000000 -vt 0.277778 0.358491 +vt 0.083333 0.136364 +vt 0.000000 0.181818 +vt 0.083333 0.340909 +vt 0.333333 0.386364 +vt 0.250000 0.340909 +vt 0.333333 0.204545 +vt 0.250000 0.250000 vt 0.333333 -0.000000 -vt 0.722222 0.358491 -vt 0.777778 0.000000 -vt 0.222222 0.358491 -vt 0.277778 0.000000 -vt 0.611111 0.358491 +vt 0.083333 0.045455 +vt 0.333333 0.181818 +vt 0.250000 0.045455 +vt 0.250000 0.136364 +vt 0.083333 0.136364 +vt 0.250000 0.113636 +vt 0.250000 0.136364 +vt 0.083333 0.136364 +vt 0.250000 0.113636 +vt 0.250000 0.136364 +vt -0.000000 0.204545 +vt 0.333333 0.181818 +vt 0.333333 0.204545 +vt -0.000000 0.204545 +vt 0.333333 0.181818 +vt 0.333333 0.204545 +vt 0.083333 0.136364 +vt 0.250000 0.113636 +vt 0.250000 0.136364 +vt 0.083333 0.136364 +vt 0.250000 0.113636 +vt 0.250000 0.136364 +vt -0.000000 0.204545 +vt 0.333333 0.181818 +vt 0.333333 0.204545 +vt 0.083333 0.340909 +vt 0.250000 0.250000 +vt 0.250000 0.340909 +vt 0.125000 0.454545 +vt 0.187500 0.386364 +vt 0.187500 0.454545 +vt -0.000000 0.454545 +vt 0.062500 0.386364 +vt 0.062500 0.454545 +vt 0.250000 0.386364 +vt 0.250000 0.454545 +vt 0.125000 0.386364 +vt 0.208333 0.954545 +vt 0.145833 0.863636 +vt 0.208333 0.863636 +vt 0.083333 0.863636 +vt 0.125000 0.954545 +vt 0.083333 0.954545 +vt 0.000000 0.863636 +vt 0.062500 0.954545 +vt 0.000000 0.954545 +vt 0.125000 0.863636 +vt 0.062500 0.852273 +vt 0.062500 0.863636 +vt 0.145833 0.954545 +vt 0.145833 0.965909 +vt 0.187500 0.454545 +vt 0.000000 0.522727 +vt 0.000000 0.454545 +vt 0.333333 0.909091 +vt 0.416667 0.954545 +vt 0.333333 0.954545 +vt 0.333333 0.909091 +vt 0.416667 0.954545 +vt 0.333333 0.954545 vt 0.666667 0.000000 -vt 0.666667 0.358491 -vt 0.729167 0.000000 -vt 0.166667 0.358491 -vt 0.222222 -0.000000 -vt 0.555556 0.358491 -vt 0.611111 0.000000 -vt 0.708333 0.641509 -vt 0.694444 0.660377 -vt 0.694444 0.641509 -vt 0.680556 0.641509 -vt 0.680556 0.660377 -vt 0.666667 0.660377 -vt 0.666667 0.641509 -vt 0.875000 0.641509 -vt 0.888889 0.660377 -vt 0.875000 0.660377 -vt 0.861111 0.660377 -vt 0.861111 0.641509 -vt 0.847222 0.660377 -vt 0.847222 0.641509 -vt 0.833333 0.660377 -vt 0.833333 0.641509 -vt 0.819444 0.660377 -vt 0.819444 0.641509 -vt 0.805556 0.660377 -vt 0.805556 0.641509 -vt 0.791667 0.641509 -vt 0.791667 0.660377 -vt 0.777778 0.660377 -vt 0.777778 0.641509 -vt 0.763889 0.660377 -vt 0.763889 0.641509 -vt 0.750000 0.660377 -vt 0.750000 0.641509 -vt 0.736111 0.641509 -vt 0.736111 0.660377 -vt 0.722222 0.641509 -vt 0.722222 0.660377 -vt 0.819444 0.622642 -vt 0.805556 0.622642 -vt 0.694444 0.622642 -vt 0.680556 0.622642 -vt 0.791667 0.622642 -vt 0.666667 0.622642 -vt 0.777778 0.622642 -vt 0.763889 0.622642 -vt 0.888889 0.622642 -vt 0.875000 0.622642 -vt 0.750000 0.622642 -vt 0.861111 0.622642 -vt 0.736111 0.622642 -vt 0.847222 0.622642 -vt 0.722222 0.622642 -vt 0.833333 0.622642 -vt 0.708333 0.622642 -vt 0.708333 0.660377 -vt 0.555556 0.433962 -vt 0.611111 0.433962 +vt 0.583333 0.909091 +vt 0.583333 0.000000 +vt 0.416667 -0.000000 +vt 0.333333 -0.000000 +vt 0.583333 0.000000 +vt 0.500000 0.909091 vt 0.500000 0.000000 -vt 0.500000 0.358491 -vt 0.166667 0.433962 -vt 0.111111 0.358491 -vt 0.500000 0.433962 -vt 0.055556 0.433962 -vt 0.111111 0.433962 -vt 0.444444 0.433962 -vt 0.833333 0.433962 -vt 0.888889 0.433962 -vt 0.333333 0.433962 -vt 0.388889 0.433962 -vt 0.777778 0.433962 -vt 0.722222 0.433962 -vt 0.222222 0.433962 -vt 0.277778 0.433962 -vt 0.666667 0.433962 -vt 0.166667 -0.000000 -vt 0.555556 -0.000000 -vt 0.111111 -0.000000 -vt 0.847222 0.716981 -vt 0.937500 0.900943 -vt 0.847222 0.900943 -vt 0.756944 0.716981 -vt 0.756944 0.900943 -vt 0.666667 0.716981 -vt 0.666667 0.900943 -vt 0.708333 0.641509 -vt 0.694444 0.660377 -vt 0.694444 0.641509 -vt 0.680556 0.641509 -vt 0.680556 0.660377 -vt 0.666667 0.660377 -vt 0.666667 0.641509 -vt 0.875000 0.641509 -vt 0.888889 0.660377 -vt 0.875000 0.660377 -vt 0.861111 0.660377 -vt 0.861111 0.641509 -vt 0.847222 0.660377 -vt 0.847222 0.641509 -vt 0.833333 0.660377 -vt 0.833333 0.641509 -vt 0.819444 0.641509 -vt 0.819444 0.660377 -vt 0.805556 0.660377 -vt 0.805556 0.641509 -vt 0.791667 0.641509 -vt 0.791667 0.660377 -vt 0.777778 0.641509 -vt 0.777778 0.660377 -vt 0.763889 0.660377 -vt 0.763889 0.641509 -vt 0.750000 0.641509 -vt 0.750000 0.660377 -vt 0.736111 0.641509 -vt 0.736111 0.660377 -vt 0.722222 0.641509 -vt 0.722222 0.660377 -vt 0.819444 0.622642 -vt 0.805556 0.622642 -vt 0.694444 0.622642 -vt 0.680556 0.622642 -vt 0.791667 0.622642 -vt 0.666667 0.622642 -vt 0.777778 0.622642 -vt 0.763889 0.622642 -vt 0.888889 0.622642 -vt 0.875000 0.622642 -vt 0.750000 0.622642 -vt 0.861111 0.622642 -vt 0.736111 0.622642 -vt 0.847222 0.622642 -vt 0.722222 0.622642 -vt 0.833333 0.622642 -vt 0.708333 0.622642 -vt 0.708333 0.660377 -vt 0.708333 0.641509 -vt 0.694444 0.660377 -vt 0.694444 0.641509 -vt 0.680556 0.641509 -vt 0.680556 0.660377 -vt 0.666667 0.660377 -vt 0.666667 0.641509 -vt 0.875000 0.641509 -vt 0.888889 0.660377 -vt 0.875000 0.660377 -vt 0.861111 0.660377 -vt 0.861111 0.641509 -vt 0.847222 0.660377 -vt 0.847222 0.641509 -vt 0.833333 0.660377 -vt 0.833333 0.641509 -vt 0.819444 0.641509 -vt 0.819444 0.660377 -vt 0.805556 0.660377 -vt 0.805556 0.641509 -vt 0.791667 0.641509 -vt 0.791667 0.660377 -vt 0.777778 0.660377 -vt 0.777778 0.641509 -vt 0.763889 0.660377 -vt 0.763889 0.641509 -vt 0.750000 0.660377 -vt 0.750000 0.641509 -vt 0.736111 0.641509 -vt 0.736111 0.660377 -vt 0.722222 0.641509 -vt 0.722222 0.660377 -vt 0.819444 0.622642 -vt 0.805556 0.622642 -vt 0.694444 0.622642 -vt 0.680556 0.622642 -vt 0.791667 0.622642 -vt 0.666667 0.622642 -vt 0.777778 0.622642 -vt 0.763889 0.622642 -vt 0.888889 0.622642 -vt 0.875000 0.622642 -vt 0.750000 0.622642 -vt 0.861111 0.622642 -vt 0.736111 0.622642 -vt 0.847222 0.622642 -vt 0.722222 0.622642 -vt 0.833333 0.622642 -vt 0.708333 0.622642 -vt 0.708333 0.660377 -vt 0.708333 0.641509 -vt 0.694444 0.660377 -vt 0.694444 0.641509 -vt 0.680556 0.641509 -vt 0.680556 0.660377 -vt 0.666667 0.660377 -vt 0.666667 0.641509 -vt 0.875000 0.641509 -vt 0.888889 0.660377 -vt 0.875000 0.660377 -vt 0.861111 0.660377 -vt 0.861111 0.641509 -vt 0.847222 0.660377 -vt 0.847222 0.641509 -vt 0.833333 0.660377 -vt 0.833333 0.641509 -vt 0.819444 0.641509 -vt 0.819444 0.660377 -vt 0.805556 0.660377 -vt 0.805556 0.641509 -vt 0.791667 0.641509 -vt 0.791667 0.660377 -vt 0.777778 0.660377 -vt 0.777778 0.641509 -vt 0.763889 0.660377 -vt 0.763889 0.641509 -vt 0.750000 0.660377 -vt 0.750000 0.641509 -vt 0.736111 0.641509 -vt 0.736111 0.660377 -vt 0.722222 0.641509 -vt 0.722222 0.660377 -vt 0.819444 0.622642 -vt 0.805556 0.622642 -vt 0.694444 0.622642 -vt 0.680556 0.622642 -vt 0.791667 0.622642 -vt 0.666667 0.622642 -vt 0.777778 0.622642 -vt 0.763889 0.622642 -vt 0.888889 0.622642 -vt 0.875000 0.622642 -vt 0.750000 0.622642 -vt 0.861111 0.622642 -vt 0.736111 0.622642 -vt 0.847222 0.622642 -vt 0.722222 0.622642 -vt 0.833333 0.622642 -vt 0.708333 0.622642 -vt 0.708333 0.660377 -vt 0.847222 0.716981 -vt 0.937500 0.900943 -vt 0.847222 0.900943 -vt 0.756944 0.716981 -vt 0.756944 0.900943 -vt 0.666667 0.716981 -vt 0.666667 0.900943 -vt 0.000000 0.000000 -vt 0.888889 0.641509 -vt 0.937500 0.716981 -vt 0.888889 0.641509 -vt 0.888889 0.641509 -vt 0.888889 0.641509 -vt 0.937500 0.716981 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.6325 0.4472 -0.6325 -vn 0.7498 -0.0000 0.6616 -vn -0.6616 0.0000 -0.7498 -vn -0.6325 0.4472 0.6325 -vn -0.7498 0.0000 -0.6616 -vn 0.6616 -0.0000 0.7498 -vn -0.6325 0.4472 -0.6325 -vn 0.6616 0.0000 -0.7498 -vn -0.7498 -0.0000 0.6616 -vn 0.6325 0.4472 0.6325 -vn -0.6616 0.0000 0.7498 -vn 0.7498 0.0000 -0.6616 -vn -1.0000 0.0000 0.0000 -vn -0.9239 -0.0000 0.3827 -vn -0.7047 0.0830 -0.7047 -vn -0.3814 0.0830 -0.9207 -vn 0.7047 0.0830 0.7047 -vn 0.3814 0.0830 0.9207 -vn -0.9207 0.0830 -0.3814 -vn 0.9207 0.0830 0.3814 -vn -0.9965 0.0830 0.0000 -vn 0.9965 0.0830 -0.0000 -vn -0.9207 0.0830 0.3814 -vn 0.9207 0.0830 -0.3814 -vn -0.7047 0.0830 0.7047 -vn 0.7047 0.0830 -0.7047 -vn -0.3814 0.0830 0.9207 -vn 0.3814 0.0830 -0.9207 -vn -0.0000 0.0830 0.9965 -vn -0.0000 0.0830 -0.9965 -vn 0.9239 -0.0000 0.3827 -vn 1.0000 -0.0000 -0.0000 -vn -0.3612 0.3304 -0.8720 -vn -0.6674 0.3304 -0.6674 -vn -0.8720 0.3304 -0.3612 -vn -0.9439 0.3304 -0.0000 -vn -0.8720 0.3304 0.3612 -vn -0.6674 0.3304 0.6674 -vn -0.3612 0.3304 0.8720 -vn 0.0000 0.3304 0.9439 -vn 0.3612 0.3304 0.8720 -vn 0.6674 0.3304 0.6674 -vn 0.8720 0.3304 0.3612 -vn 0.9439 0.3304 -0.0000 -vn 0.8720 0.3304 -0.3612 -vn 0.6674 0.3304 -0.6674 -vn 0.3612 0.3304 -0.8720 -vn -0.0000 0.3304 -0.9439 -vn -0.9239 0.0000 -0.3827 -vn 0.7071 -0.0000 0.7071 -vn -0.7071 0.0000 -0.7071 -vn 0.3827 -0.0000 0.9239 -vn -0.3827 0.0000 -0.9239 -vn 0.0000 -0.0000 1.0000 -vn 0.3827 0.0000 -0.9239 -vn 0.0000 0.0000 -1.0000 -vn -0.3827 -0.0000 0.9239 -vn 0.7071 0.0000 -0.7071 -vn 0.8263 0.4472 0.3423 -vn 0.3423 0.4472 0.8263 -vn 0.0000 0.4472 0.8944 -vn -0.3423 0.4472 0.8263 -vn -0.8263 0.4472 0.3423 -vn -0.8944 0.4472 0.0000 -vn -0.8263 0.4472 -0.3423 -vn -0.3423 0.4472 -0.8263 -vn -0.0000 0.4472 -0.8944 -vn 0.3423 0.4472 -0.8263 -vn 0.8263 0.4472 -0.3423 -vn 0.8944 0.4472 0.0000 -vn -0.7071 0.0000 0.7071 -vn 0.9239 0.0000 -0.3827 -vn 0.6860 0.2425 -0.6860 -vn 0.3713 0.2425 -0.8963 -vn -0.3713 0.2425 0.8963 -vn -0.6860 0.2425 0.6860 -vn 0.8963 0.2425 -0.3713 -vn -0.8963 0.2425 0.3713 -vn 0.9701 0.2425 -0.0000 -vn -0.9701 0.2425 -0.0000 -vn 0.8963 0.2425 0.3713 -vn -0.8963 0.2425 -0.3713 -vn 0.6860 0.2425 0.6860 -vn -0.6860 0.2425 -0.6860 -vn 0.3713 0.2425 0.8963 -vn -0.3713 0.2425 -0.8963 -vn -0.0000 0.2425 0.9701 -vn 0.0000 0.2425 -0.9701 -vn 0.5556 0.0000 -0.8315 -vn 0.9808 0.0000 -0.1951 -vn -0.5556 -0.0000 0.8315 -vn -0.9808 -0.0000 0.1951 -s off -f 4543/6632/682 4544/6633/682 4545/6634/682 -f 4546/6635/682 4547/6636/682 4548/6637/682 -f 4549/6638/682 4544/6633/682 4550/6639/682 -f 4551/6640/682 4552/6641/682 4546/6635/682 -f 4549/6638/682 4553/6642/682 4554/6643/682 -f 4555/6644/682 4556/6645/682 4557/6646/682 -f 4551/6640/682 4557/6646/682 4558/6647/682 -f 4559/6648/682 4553/6642/682 4560/6649/682 -f 4561/6650/682 4556/6645/682 4562/6651/682 -f 4563/6652/682 4564/6653/682 4559/6648/682 -f 4561/6650/682 4565/6654/682 4566/6655/682 -f 4567/6656/682 4568/6657/682 4563/6652/682 -f 4569/6658/682 4570/6659/682 4565/6654/682 -f 4571/6660/682 4572/6661/682 4567/6656/682 -f 4573/6662/682 4545/6634/682 4570/6659/682 -f 4574/6663/682 4575/6664/682 4576/6665/682 -f 4548/6637/682 4577/6666/682 4571/6667/682 -f 4578/6668/683 4579/6669/683 4580/6670/683 -f 4581/6671/683 4582/6672/683 4578/6668/683 -f 4583/6673/683 4584/6674/683 4581/6671/683 -f 4585/6675/683 4586/6676/683 4583/6673/683 -f 4587/6677/683 4588/6678/683 4585/6675/683 -f 4589/6679/683 4590/6680/683 4587/6677/683 -f 4589/6679/683 4591/6681/683 4592/6682/683 -f 4593/6683/683 4594/6684/683 4591/6681/683 -f 4595/6685/683 4596/6686/683 4594/6684/683 -f 4597/6687/683 4598/6688/683 4596/6689/683 -f 4599/6690/683 4600/6691/683 4598/6688/683 -f 4601/6692/683 4600/6691/683 4602/6693/683 -f 4601/6692/683 4603/6694/683 4604/6695/683 -f 4605/6696/683 4603/6694/683 4606/6697/683 -f 4607/6698/683 4608/6699/683 4605/6696/683 -f 4580/6670/683 4609/6700/683 4607/6698/683 -f 4610/6701/682 4611/6702/682 4612/6703/682 -f 4613/6704/682 4614/6705/682 4615/6706/682 -f 4616/6707/684 4617/6708/684 4618/6709/684 -f 4614/6705/685 4617/6710/685 4616/6707/685 -f 4615/6711/686 4617/6710/686 4613/6704/686 -f 4619/6712/682 4620/6713/682 4621/6714/682 -f 4622/6715/682 4623/6716/682 4624/6717/682 -f 4625/6718/682 4626/6719/682 4627/6720/682 -f 4628/6721/682 4629/6722/682 4630/6723/682 -f 4631/6724/687 4632/6725/687 4633/6726/687 -f 4629/6722/688 4632/6727/688 4631/6724/688 -f 4630/6728/689 4632/6727/689 4628/6721/689 -f 4634/6729/682 4635/6730/682 4636/6731/682 -f 4637/6732/690 4638/6733/690 4639/6734/690 -f 4635/6730/691 4638/6735/691 4637/6732/691 -f 4636/6736/692 4638/6735/692 4634/6729/692 -f 4640/6737/682 4641/6738/682 4642/6739/682 -f 4643/6740/693 4644/6741/693 4645/6742/693 -f 4641/6738/694 4644/6743/694 4643/6740/694 -f 4642/6744/695 4644/6743/695 4640/6737/695 -f 4543/6632/682 4550/6639/682 4544/6633/682 -f 4546/6635/682 4552/6641/682 4547/6636/682 -f 4549/6638/682 4554/6643/682 4544/6633/682 -f 4551/6640/682 4558/6647/682 4552/6641/682 -f 4549/6638/682 4560/6649/682 4553/6642/682 -f 4555/6644/682 4562/6651/682 4556/6645/682 -f 4551/6640/682 4555/6644/682 4557/6646/682 -f 4559/6648/682 4564/6653/682 4553/6642/682 -f 4561/6650/682 4566/6655/682 4556/6645/682 -f 4563/6652/682 4568/6657/682 4564/6653/682 -f 4561/6650/682 4569/6658/682 4565/6654/682 -f 4567/6656/682 4572/6661/682 4568/6657/682 -f 4569/6658/682 4573/6662/682 4570/6659/682 -f 4571/6660/682 4577/6745/682 4572/6661/682 -f 4573/6662/682 4543/6632/682 4545/6634/682 -f 4576/6665/682 4646/6746/682 4647/6747/682 -f 4646/6746/682 4648/6748/682 4647/6747/682 -f 4648/6748/682 4649/6749/682 4647/6747/682 -f 4647/6747/682 4650/6750/682 4651/6751/682 -f 4651/6751/682 4652/6752/682 4574/6663/682 -f 4574/6663/682 4653/6753/682 4575/6664/682 -f 4653/6753/682 4654/6754/682 4575/6664/682 -f 4654/6754/682 4655/6755/682 4575/6664/682 -f 4575/6664/682 4656/6756/682 4657/6757/682 -f 4657/6757/682 4658/6758/682 4575/6664/682 -f 4658/6758/682 4576/6665/682 4575/6664/682 -f 4647/6747/682 4651/6751/682 4576/6665/682 -f 4651/6751/682 4574/6663/682 4576/6665/682 -f 4548/6637/682 4547/6636/682 4577/6666/682 -f 4578/6668/683 4582/6672/683 4579/6669/683 -f 4581/6671/683 4584/6674/683 4582/6672/683 -f 4583/6673/683 4586/6676/683 4584/6674/683 -f 4585/6675/683 4588/6678/683 4586/6676/683 -f 4587/6677/683 4590/6680/683 4588/6678/683 -f 4589/6679/683 4592/6682/683 4590/6680/683 -f 4589/6679/683 4593/6683/683 4591/6681/683 -f 4593/6683/683 4595/6685/683 4594/6684/683 -f 4595/6685/683 4597/6759/683 4596/6686/683 -f 4597/6687/683 4599/6690/683 4598/6688/683 -f 4599/6690/683 4602/6693/683 4600/6691/683 -f 4601/6692/683 4604/6695/683 4600/6691/683 -f 4601/6692/683 4606/6697/683 4603/6694/683 -f 4605/6696/683 4608/6699/683 4603/6694/683 -f 4607/6698/683 4609/6700/683 4608/6699/683 -f 4580/6670/683 4579/6669/683 4609/6700/683 -f 4610/6701/682 4659/6760/682 4660/6761/682 -f 4660/6761/682 4661/6762/682 4610/6701/682 -f 4661/6762/682 4611/6702/682 4610/6701/682 -f 4611/6702/682 4662/6763/682 4663/6764/682 -f 4663/6764/682 4664/6765/682 4612/6703/682 -f 4612/6703/682 4665/6766/682 4666/6767/682 -f 4666/6767/682 4667/6768/682 4668/6769/682 -f 4668/6769/682 4669/6770/682 4670/6771/682 -f 4670/6771/682 4671/6772/682 4610/6701/682 -f 4611/6702/682 4663/6764/682 4612/6703/682 -f 4612/6703/682 4666/6767/682 4610/6701/682 -f 4666/6767/682 4668/6769/682 4610/6701/682 -f 4668/6769/682 4670/6771/682 4610/6701/682 -f 4614/6705/685 4613/6704/685 4617/6710/685 -f 4615/6711/686 4618/6773/686 4617/6710/686 -f 4621/6714/682 4672/6774/682 4673/6775/682 -f 4672/6774/682 4674/6776/682 4673/6775/682 -f 4674/6776/682 4675/6777/682 4673/6775/682 -f 4673/6775/682 4676/6778/682 4677/6779/682 -f 4677/6779/682 4678/6780/682 4619/6712/682 -f 4619/6712/682 4679/6781/682 4620/6713/682 -f 4679/6781/682 4680/6782/682 4620/6713/682 -f 4680/6782/682 4681/6783/682 4620/6713/682 -f 4620/6713/682 4682/6784/682 4683/6785/682 -f 4683/6785/682 4684/6786/682 4620/6713/682 -f 4684/6786/682 4621/6714/682 4620/6713/682 -f 4673/6775/682 4677/6779/682 4621/6714/682 -f 4677/6779/682 4619/6712/682 4621/6714/682 -f 4624/6717/682 4685/6787/682 4686/6788/682 -f 4685/6787/682 4687/6789/682 4686/6788/682 -f 4687/6789/682 4688/6790/682 4686/6788/682 -f 4686/6788/682 4689/6791/682 4690/6792/682 -f 4690/6792/682 4691/6793/682 4622/6715/682 -f 4622/6715/682 4692/6794/682 4623/6716/682 -f 4692/6794/682 4693/6795/682 4623/6716/682 -f 4693/6795/682 4694/6796/682 4623/6716/682 -f 4623/6716/682 4695/6797/682 4696/6798/682 -f 4696/6798/682 4697/6799/682 4623/6716/682 -f 4697/6799/682 4624/6717/682 4623/6716/682 -f 4686/6788/682 4690/6792/682 4624/6717/682 -f 4690/6792/682 4622/6715/682 4624/6717/682 -f 4627/6720/682 4698/6800/682 4699/6801/682 -f 4698/6800/682 4700/6802/682 4699/6801/682 -f 4700/6802/682 4701/6803/682 4699/6801/682 -f 4699/6801/682 4702/6804/682 4703/6805/682 -f 4703/6805/682 4704/6806/682 4625/6718/682 -f 4625/6718/682 4705/6807/682 4626/6719/682 -f 4705/6807/682 4706/6808/682 4626/6719/682 -f 4706/6808/682 4707/6809/682 4626/6719/682 -f 4626/6719/682 4708/6810/682 4709/6811/682 -f 4709/6811/682 4710/6812/682 4626/6719/682 -f 4710/6812/682 4627/6720/682 4626/6719/682 -f 4699/6801/682 4703/6805/682 4627/6720/682 -f 4703/6805/682 4625/6718/682 4627/6720/682 -f 4629/6722/688 4628/6721/688 4632/6727/688 -f 4630/6728/689 4633/6813/689 4632/6727/689 -f 4635/6730/691 4634/6729/691 4638/6735/691 -f 4636/6736/692 4639/6814/692 4638/6735/692 -f 4641/6738/694 4640/6737/694 4644/6743/694 -f 4642/6744/695 4645/6815/695 4644/6743/695 -s 1 -f 4711/6816/696 4669/6817/697 4712/6818/697 -f 4713/6819/698 4714/6820/699 4715/6821/699 -f 4716/6822/700 4717/6823/701 4718/6824/701 -f 4719/6825/702 4720/6826/698 4713/6819/698 -f 4721/6827/703 4722/6828/700 4716/6822/700 -f 4723/6829/704 4724/6830/702 4719/6825/702 -f 4721/6827/703 4725/6831/705 4726/6832/703 -f 4727/6833/706 4728/6834/704 4723/6835/704 -f 4729/6836/707 4725/6837/705 4730/6838/705 -f 4731/6839/708 4732/6840/706 4727/6833/706 -f 4733/6841/709 4734/6842/707 4729/6836/707 -f 4735/6843/710 4736/6844/708 4731/6839/708 -f 4737/6845/711 4738/6846/709 4733/6841/709 -f 4739/6847/712 4740/6848/710 4735/6843/710 -f 4715/6821/699 4741/6849/713 4742/6850/713 -f 4742/6850/713 4743/6851/711 4737/6845/711 -f 4718/6824/701 4744/6852/712 4739/6847/712 -f 4745/6853/714 4663/6854/715 4746/6855/715 -f 4714/6820/716 4720/6856/717 4747/6857/683 -f 4720/6826/717 4724/6858/718 4747/6859/683 -f 4724/6830/718 4728/6860/719 4747/6861/683 -f 4728/6834/719 4732/6862/720 4747/6863/683 -f 4732/6840/720 4736/6864/721 4747/6865/683 -f 4736/6844/721 4740/6866/722 4747/6867/683 -f 4740/6848/722 4744/6868/723 4747/6869/683 -f 4744/6852/723 4717/6870/724 4747/6871/683 -f 4717/6823/724 4722/6872/725 4747/6873/683 -f 4722/6828/725 4726/6874/726 4747/6875/683 -f 4726/6832/726 4725/6831/727 4747/6876/683 -f 4725/6837/727 4734/6877/728 4747/6878/683 -f 4734/6842/728 4738/6879/729 4747/6880/683 -f 4738/6846/729 4743/6881/730 4747/6882/683 -f 4743/6851/730 4741/6883/731 4747/6884/683 -f 4741/6849/731 4714/6885/716 4747/6886/683 -f 4748/6887/732 4670/6888/696 4711/6889/696 -f 4749/6890/733 4664/6891/714 4745/6853/714 -f 4750/6892/734 4671/6893/732 4748/6887/732 -f 4751/6894/735 4612/6895/733 4749/6890/733 -f 4752/6896/736 4610/6897/734 4750/6892/734 -f 4753/6898/737 4665/6899/735 4751/6894/735 -f 4754/6900/738 4660/6901/739 4755/6902/739 -f 4755/6902/739 4659/6903/736 4752/6896/736 -f 4756/6904/740 4666/6905/737 4753/6898/737 -f 4757/6906/741 4661/6907/738 4754/6900/738 -f 4758/6908/742 4759/6909/693 4760/6910/693 -f 4761/6911/743 4759/6909/693 4762/6912/743 -f 4761/6911/743 4763/6913/744 4764/6914/744 -f 4765/6915/745 4763/6916/744 4766/6917/745 -f 4765/6915/745 4767/6918/687 4768/6919/687 -f 4768/6919/687 4769/6920/746 4770/6921/746 -f 4770/6921/746 4771/6922/747 4772/6923/747 -f 4772/6923/747 4773/6924/748 4774/6925/748 -f 4774/6925/748 4775/6926/690 4776/6927/690 -f 4777/6928/749 4775/6926/690 4778/6929/749 -f 4777/6928/749 4779/6930/750 4780/6931/750 -f 4780/6931/750 4781/6932/751 4782/6933/751 -f 4782/6933/751 4783/6934/684 4784/6935/684 -f 4785/6936/752 4783/6934/684 4786/6937/752 -f 4787/6938/753 4786/6937/752 4788/6939/753 -f 4658/6940/732 4776/6927/734 4576/6941/734 -f 4574/6942/733 4761/6911/735 4653/6943/735 -f 4576/6941/734 4777/6928/736 4646/6944/736 -f 4653/6943/735 4764/6914/737 4654/6945/737 -f 4648/6946/739 4782/6933/738 4649/6947/738 -f 4646/6944/736 4780/6931/739 4648/6946/739 -f 4654/6948/737 4765/6915/740 4655/6949/740 -f 4649/6947/738 4784/6935/741 4647/6950/741 -f 4655/6949/740 4768/6919/754 4575/6951/754 -f 4647/6950/741 4785/6936/755 4650/6952/755 -f 4575/6951/754 4770/6921/697 4656/6953/697 -f 4650/6952/755 4787/6938/715 4651/6954/715 -f 4656/6953/697 4772/6923/696 4657/6955/696 -f 4651/6954/715 4758/6908/714 4652/6956/714 -f 4657/6955/696 4774/6925/732 4658/6940/732 -f 4652/6956/714 4760/6910/733 4574/6942/733 -f 4787/6938/753 4789/6957/742 4758/6908/742 -f 4583/6958/756 4754/6900/757 4585/6959/757 -f 4746/6855/715 4662/6960/755 4790/6961/755 -f 4558/6647/736 4591/6681/734 4552/6641/734 -f 4554/6643/735 4609/6700/733 4544/6633/733 -f 4552/6641/734 4594/6684/732 4547/6636/732 -f 4544/6633/733 4579/6669/714 4545/6634/714 -f 4547/6636/732 4596/6686/696 4577/6666/696 -f 4545/6634/714 4582/6672/715 4570/6659/715 -f 4577/6745/696 4598/6688/697 4572/6661/697 -f 4570/6659/715 4584/6674/755 4565/6654/755 -f 4572/6661/697 4600/6691/754 4568/6657/754 -f 4565/6654/755 4586/6676/741 4566/6655/741 -f 4568/6657/754 4604/6695/740 4564/6653/740 -f 4566/6655/741 4588/6678/738 4556/6645/738 -f 4564/6653/740 4603/6694/737 4553/6642/737 -f 4557/6646/739 4592/6682/736 4558/6647/736 -f 4556/6645/738 4590/6680/739 4557/6646/739 -f 4553/6642/737 4608/6699/735 4554/6643/735 -f 4601/6962/758 4791/6963/759 4756/6904/758 -f 4581/6964/760 4757/6906/756 4583/6958/756 -f 4599/6965/761 4791/6963/759 4602/6966/759 -f 4578/6967/762 4790/6961/760 4581/6964/760 -f 4599/6965/761 4711/6816/763 4712/6818/761 -f 4578/6967/762 4745/6853/764 4746/6855/762 -f 4595/6968/765 4711/6889/763 4597/6969/763 -f 4607/6970/766 4745/6853/764 4580/6971/764 -f 4593/6972/767 4748/6887/765 4595/6968/765 -f 4607/6970/766 4751/6894/768 4749/6890/766 -f 4589/6973/769 4750/6892/767 4593/6972/767 -f 4606/6974/770 4751/6894/768 4605/6975/768 -f 4587/6976/771 4754/6900/757 4755/6902/771 -f 4587/6976/771 4752/6896/769 4589/6973/769 -f 4601/6962/758 4753/6898/770 4606/6974/770 -f 4791/6963/754 4667/6977/740 4756/6904/740 -f 4790/6961/755 4611/6978/741 4757/6906/741 -f 4712/6818/697 4668/6979/754 4791/6963/754 -f 4543/6632/714 4730/6838/715 4721/6827/714 -f 4573/6662/715 4729/6836/755 4730/6838/715 -f 4569/6658/755 4733/6841/741 4729/6836/755 -f 4561/6650/741 4737/6845/738 4733/6841/741 -f 4562/6651/738 4742/6850/739 4737/6845/738 -f 4555/6644/739 4715/6821/736 4742/6850/739 -f 4551/6640/736 4713/6819/734 4715/6821/736 -f 4546/6635/734 4719/6825/732 4713/6819/734 -f 4548/6637/732 4723/6829/696 4719/6825/732 -f 4571/6660/696 4727/6833/697 4723/6835/696 -f 4567/6656/697 4731/6839/754 4727/6833/697 -f 4563/6652/754 4735/6843/740 4731/6839/754 -f 4559/6648/740 4739/6847/737 4735/6843/740 -f 4560/6649/737 4718/6824/735 4739/6847/737 -f 4549/6638/735 4716/6822/733 4718/6824/735 -f 4550/6639/733 4721/6827/714 4716/6822/733 -f 4792/6980/741 4793/6981/772 4794/6982/741 -f 4795/6983/755 4794/6982/741 4796/6984/755 -f 4797/6985/773 4796/6984/755 4798/6986/773 -f 4799/6987/742 4800/6988/693 4801/6989/693 -f 4802/6990/743 4800/6988/693 4803/6991/743 -f 4802/6990/743 4804/6992/744 4805/6993/744 -f 4806/6994/745 4804/6995/744 4807/6996/745 -f 4806/6994/745 4808/6997/687 4809/6998/687 -f 4809/6998/687 4810/6999/746 4811/7000/746 -f 4811/7000/746 4812/7001/747 4813/7002/747 -f 4814/7003/748 4812/7001/747 4815/7004/748 -f 4814/7003/748 4816/7005/690 4817/7006/690 -f 4818/7007/749 4816/7005/690 4819/7008/749 -f 4820/7009/750 4819/7008/749 4821/7010/750 -f 4820/7009/750 4822/7011/751 4823/7012/751 -f 4824/7013/684 4822/7011/751 4825/7014/684 -f 4826/7015/752 4825/7014/684 4827/7016/752 -f 4828/7017/753 4827/7016/752 4829/7018/753 -f 4684/7019/732 4817/7006/734 4621/7020/734 -f 4619/7021/733 4802/6990/735 4679/7022/735 -f 4621/7020/734 4818/7007/736 4672/7023/736 -f 4679/7022/735 4805/6993/737 4680/7024/737 -f 4674/7025/739 4823/7012/738 4675/7026/738 -f 4672/7023/736 4820/7009/739 4674/7025/739 -f 4680/7027/737 4806/6994/740 4681/7028/740 -f 4675/7026/738 4824/7013/741 4673/7029/741 -f 4681/7028/740 4809/6998/754 4620/7030/754 -f 4673/7029/741 4826/7015/755 4676/7031/755 -f 4620/7030/754 4811/7000/697 4682/7032/697 -f 4676/7031/755 4828/7017/715 4677/7033/715 -f 4682/7032/697 4813/7002/696 4683/7034/696 -f 4677/7033/715 4799/6987/714 4678/7035/714 -f 4683/7034/696 4814/7003/732 4684/7019/732 -f 4678/7035/714 4801/6989/733 4619/7021/733 -f 4828/7017/753 4830/7036/742 4799/6987/742 -f 4831/7037/742 4832/7038/693 4833/7039/693 -f 4834/7040/743 4832/7038/693 4835/7041/743 -f 4834/7040/743 4836/7042/744 4837/7043/744 -f 4838/7044/745 4836/7045/744 4839/7046/745 -f 4838/7044/745 4840/7047/687 4841/7048/687 -f 4841/7048/687 4842/7049/746 4843/7050/746 -f 4843/7050/746 4844/7051/747 4845/7052/747 -f 4846/7053/748 4844/7051/747 4847/7054/748 -f 4846/7053/748 4848/7055/690 4849/7056/690 -f 4850/7057/749 4848/7055/690 4851/7058/749 -f 4850/7057/749 4852/7059/750 4853/7060/750 -f 4853/7060/750 4854/7061/751 4855/7062/751 -f 4855/7062/751 4856/7063/684 4857/7064/684 -f 4858/7065/752 4856/7063/684 4859/7066/752 -f 4860/7067/753 4859/7066/752 4861/7068/753 -f 4697/7069/732 4849/7056/734 4624/7070/734 -f 4622/7071/733 4834/7040/735 4692/7072/735 -f 4624/7070/734 4850/7057/736 4685/7073/736 -f 4692/7072/735 4837/7043/737 4693/7074/737 -f 4687/7075/739 4855/7062/738 4688/7076/738 -f 4685/7073/736 4853/7060/739 4687/7075/739 -f 4693/7077/737 4838/7044/740 4694/7078/740 -f 4688/7076/738 4857/7064/741 4686/7079/741 -f 4694/7078/740 4841/7048/754 4623/7080/754 -f 4686/7079/741 4858/7065/755 4689/7081/755 -f 4623/7080/754 4843/7050/697 4695/7082/697 -f 4689/7081/755 4860/7067/715 4690/7083/715 -f 4695/7082/697 4845/7052/696 4696/7084/696 -f 4690/7083/715 4831/7037/714 4691/7085/714 -f 4696/7084/696 4846/7053/732 4697/7069/732 -f 4691/7085/714 4833/7039/733 4622/7071/733 -f 4860/7067/753 4862/7086/742 4831/7037/742 -f 4863/7087/742 4864/7088/693 4865/7089/693 -f 4866/7090/743 4864/7088/693 4867/7091/743 -f 4866/7090/743 4868/7092/744 4869/7093/744 -f 4870/7094/745 4868/7095/744 4871/7096/745 -f 4870/7094/745 4872/7097/687 4873/7098/687 -f 4873/7098/687 4874/7099/746 4875/7100/746 -f 4875/7100/746 4876/7101/747 4877/7102/747 -f 4878/7103/748 4876/7101/747 4879/7104/748 -f 4878/7103/748 4880/7105/690 4881/7106/690 -f 4882/7107/749 4880/7105/690 4883/7108/749 -f 4882/7107/749 4884/7109/750 4885/7110/750 -f 4885/7110/750 4886/7111/751 4887/7112/751 -f 4887/7112/751 4888/7113/684 4889/7114/684 -f 4890/7115/752 4888/7113/684 4891/7116/752 -f 4892/7117/753 4891/7116/752 4893/7118/753 -f 4710/7119/732 4881/7106/734 4627/7120/734 -f 4625/7121/733 4866/7090/735 4705/7122/735 -f 4627/7120/734 4882/7107/736 4698/7123/736 -f 4705/7122/735 4869/7093/737 4706/7124/737 -f 4700/7125/739 4887/7112/738 4701/7126/738 -f 4698/7123/736 4885/7110/739 4700/7125/739 -f 4706/7127/737 4870/7094/740 4707/7128/740 -f 4701/7126/738 4889/7114/741 4699/7129/741 -f 4707/7128/740 4873/7098/754 4626/7130/754 -f 4699/7129/741 4890/7115/755 4702/7131/755 -f 4626/7130/754 4875/7100/697 4708/7132/697 -f 4702/7131/755 4892/7117/715 4703/7133/715 -f 4708/7132/697 4877/7102/696 4709/7134/696 -f 4703/7133/715 4863/7087/714 4704/7135/714 -f 4709/7134/696 4878/7103/732 4710/7119/732 -f 4704/7135/714 4865/7089/733 4625/7121/733 -f 4892/7117/753 4894/7136/742 4863/7087/742 -f 4895/7137/754 4896/7138/774 4897/7139/754 -f 4898/7140/697 4897/7139/754 4899/7141/697 -f 4900/7142/775 4899/7141/697 4901/7143/775 -f 4711/6816/696 4670/7144/696 4669/6817/697 -f 4713/6819/698 4720/6856/698 4714/6820/699 -f 4716/6822/700 4722/6872/700 4717/6823/701 -f 4719/6825/702 4724/6858/702 4720/6826/698 -f 4721/6827/703 4726/6874/703 4722/6828/700 -f 4723/6829/704 4728/6860/704 4724/6830/702 -f 4721/6827/703 4730/6838/705 4725/6831/705 -f 4727/6833/706 4732/6862/706 4728/6834/704 -f 4729/6836/707 4734/6877/707 4725/6837/705 -f 4731/6839/708 4736/6864/708 4732/6840/706 -f 4733/6841/709 4738/6879/709 4734/6842/707 -f 4735/6843/710 4740/6866/710 4736/6844/708 -f 4737/6845/711 4743/6881/711 4738/6846/709 -f 4739/6847/712 4744/6868/712 4740/6848/710 -f 4715/6821/699 4714/6885/699 4741/6849/713 -f 4742/6850/713 4741/6883/713 4743/6851/711 -f 4718/6824/701 4717/6870/701 4744/6852/712 -f 4745/6853/714 4664/6891/714 4663/6854/715 -f 4748/6887/732 4671/6893/732 4670/6888/696 -f 4749/6890/733 4612/6895/733 4664/6891/714 -f 4750/6892/734 4610/6897/734 4671/6893/732 -f 4751/6894/735 4665/6899/735 4612/6895/733 -f 4752/6896/736 4659/6903/736 4610/6897/734 -f 4753/6898/737 4666/6905/737 4665/6899/735 -f 4754/6900/738 4661/6907/738 4660/6901/739 -f 4755/6902/739 4660/6901/739 4659/6903/736 -f 4756/6904/740 4667/6977/740 4666/6905/737 -f 4757/6906/741 4611/6978/741 4661/6907/738 -f 4758/6908/742 4789/6957/742 4759/6909/693 -f 4761/6911/743 4760/6910/693 4759/6909/693 -f 4761/6911/743 4762/6912/743 4763/6913/744 -f 4765/6915/745 4764/7145/744 4763/6916/744 -f 4765/6915/745 4766/6917/745 4767/6918/687 -f 4768/6919/687 4767/6918/687 4769/6920/746 -f 4770/6921/746 4769/6920/746 4771/6922/747 -f 4772/6923/747 4771/6922/747 4773/6924/748 -f 4774/6925/748 4773/6924/748 4775/6926/690 -f 4777/6928/749 4776/6927/690 4775/6926/690 -f 4777/6928/749 4778/6929/749 4779/6930/750 -f 4780/6931/750 4779/6930/750 4781/6932/751 -f 4782/6933/751 4781/6932/751 4783/6934/684 -f 4785/6936/752 4784/6935/684 4783/6934/684 -f 4787/6938/753 4785/6936/752 4786/6937/752 -f 4658/6940/732 4774/6925/732 4776/6927/734 -f 4574/6942/733 4760/6910/733 4761/6911/735 -f 4576/6941/734 4776/6927/734 4777/6928/736 -f 4653/6943/735 4761/6911/735 4764/6914/737 -f 4648/6946/739 4780/6931/739 4782/6933/738 -f 4646/6944/736 4777/6928/736 4780/6931/739 -f 4654/6948/737 4764/7145/737 4765/6915/740 -f 4649/6947/738 4782/6933/738 4784/6935/741 -f 4655/6949/740 4765/6915/740 4768/6919/754 -f 4647/6950/741 4784/6935/741 4785/6936/755 -f 4575/6951/754 4768/6919/754 4770/6921/697 -f 4650/6952/755 4785/6936/755 4787/6938/715 -f 4656/6953/697 4770/6921/697 4772/6923/696 -f 4651/6954/715 4787/6938/715 4758/6908/714 -f 4657/6955/696 4772/6923/696 4774/6925/732 -f 4652/6956/714 4758/6908/714 4760/6910/733 -f 4787/6938/753 4788/6939/753 4789/6957/742 -f 4583/6958/756 4757/6906/756 4754/6900/757 -f 4746/6855/715 4663/6854/715 4662/6960/755 -f 4558/6647/736 4592/6682/736 4591/6681/734 -f 4554/6643/735 4608/6699/735 4609/6700/733 -f 4552/6641/734 4591/6681/734 4594/6684/732 -f 4544/6633/733 4609/6700/733 4579/6669/714 -f 4547/6636/732 4594/6684/732 4596/6686/696 -f 4545/6634/714 4579/6669/714 4582/6672/715 -f 4577/6745/696 4596/6689/696 4598/6688/697 -f 4570/6659/715 4582/6672/715 4584/6674/755 -f 4572/6661/697 4598/6688/697 4600/6691/754 -f 4565/6654/755 4584/6674/755 4586/6676/741 -f 4568/6657/754 4600/6691/754 4604/6695/740 -f 4566/6655/741 4586/6676/741 4588/6678/738 -f 4564/6653/740 4604/6695/740 4603/6694/737 -f 4557/6646/739 4590/6680/739 4592/6682/736 -f 4556/6645/738 4588/6678/738 4590/6680/739 -f 4553/6642/737 4603/6694/737 4608/6699/735 -f 4601/6962/758 4602/6966/759 4791/6963/759 -f 4581/6964/760 4790/6961/760 4757/6906/756 -f 4599/6965/761 4712/6818/761 4791/6963/759 -f 4578/6967/762 4746/6855/762 4790/6961/760 -f 4599/6965/761 4597/6687/763 4711/6816/763 -f 4578/6967/762 4580/6971/764 4745/6853/764 -f 4595/6968/765 4748/6887/765 4711/6889/763 -f 4607/6970/766 4749/6890/766 4745/6853/764 -f 4593/6972/767 4750/6892/767 4748/6887/765 -f 4607/6970/766 4605/6975/768 4751/6894/768 -f 4589/6973/769 4752/6896/769 4750/6892/767 -f 4606/6974/770 4753/6898/770 4751/6894/768 -f 4587/6976/771 4585/6959/757 4754/6900/757 -f 4587/6976/771 4755/6902/771 4752/6896/769 -f 4601/6962/758 4756/6904/758 4753/6898/770 -f 4791/6963/754 4668/6979/754 4667/6977/740 -f 4790/6961/755 4662/6960/755 4611/6978/741 -f 4712/6818/697 4669/6817/697 4668/6979/754 -f 4543/6632/714 4573/6662/715 4730/6838/715 -f 4573/6662/715 4569/6658/755 4729/6836/755 -f 4569/6658/755 4561/6650/741 4733/6841/741 -f 4561/6650/741 4562/6651/738 4737/6845/738 -f 4562/6651/738 4555/6644/739 4742/6850/739 -f 4555/6644/739 4551/6640/736 4715/6821/736 -f 4551/6640/736 4546/6635/734 4713/6819/734 -f 4546/6635/734 4548/6637/732 4719/6825/732 -f 4548/6637/732 4571/6667/696 4723/6829/696 -f 4571/6660/696 4567/6656/697 4727/6833/697 -f 4567/6656/697 4563/6652/754 4731/6839/754 -f 4563/6652/754 4559/6648/740 4735/6843/740 -f 4559/6648/740 4560/6649/737 4739/6847/737 -f 4560/6649/737 4549/6638/735 4718/6824/735 -f 4549/6638/735 4550/6639/733 4716/6822/733 -f 4550/6639/733 4543/6632/714 4721/6827/714 -f 4792/6980/741 4902/7146/772 4793/6981/772 -f 4795/6983/755 4792/6980/741 4794/6982/741 -f 4797/6985/773 4795/6983/755 4796/6984/755 -f 4799/6987/742 4830/7036/742 4800/6988/693 -f 4802/6990/743 4801/6989/693 4800/6988/693 -f 4802/6990/743 4803/6991/743 4804/6992/744 -f 4806/6994/745 4805/7147/744 4804/6995/744 -f 4806/6994/745 4807/6996/745 4808/6997/687 -f 4809/6998/687 4808/6997/687 4810/6999/746 -f 4811/7000/746 4810/6999/746 4812/7001/747 -f 4814/7003/748 4813/7002/747 4812/7001/747 -f 4814/7003/748 4815/7004/748 4816/7005/690 -f 4818/7007/749 4817/7006/690 4816/7005/690 -f 4820/7009/750 4818/7007/749 4819/7008/749 -f 4820/7009/750 4821/7010/750 4822/7011/751 -f 4824/7013/684 4823/7012/751 4822/7011/751 -f 4826/7015/752 4824/7013/684 4825/7014/684 -f 4828/7017/753 4826/7015/752 4827/7016/752 -f 4684/7019/732 4814/7003/732 4817/7006/734 -f 4619/7021/733 4801/6989/733 4802/6990/735 -f 4621/7020/734 4817/7006/734 4818/7007/736 -f 4679/7022/735 4802/6990/735 4805/6993/737 -f 4674/7025/739 4820/7009/739 4823/7012/738 -f 4672/7023/736 4818/7007/736 4820/7009/739 -f 4680/7027/737 4805/7147/737 4806/6994/740 -f 4675/7026/738 4823/7012/738 4824/7013/741 -f 4681/7028/740 4806/6994/740 4809/6998/754 -f 4673/7029/741 4824/7013/741 4826/7015/755 -f 4620/7030/754 4809/6998/754 4811/7000/697 -f 4676/7031/755 4826/7015/755 4828/7017/715 -f 4682/7032/697 4811/7000/697 4813/7002/696 -f 4677/7033/715 4828/7017/715 4799/6987/714 -f 4683/7034/696 4813/7002/696 4814/7003/732 -f 4678/7035/714 4799/6987/714 4801/6989/733 -f 4828/7017/753 4829/7018/753 4830/7036/742 -f 4831/7037/742 4862/7086/742 4832/7038/693 -f 4834/7040/743 4833/7039/693 4832/7038/693 -f 4834/7040/743 4835/7041/743 4836/7042/744 -f 4838/7044/745 4837/7148/744 4836/7045/744 -f 4838/7044/745 4839/7046/745 4840/7047/687 -f 4841/7048/687 4840/7047/687 4842/7049/746 -f 4843/7050/746 4842/7049/746 4844/7051/747 -f 4846/7053/748 4845/7052/747 4844/7051/747 -f 4846/7053/748 4847/7054/748 4848/7055/690 -f 4850/7057/749 4849/7056/690 4848/7055/690 -f 4850/7057/749 4851/7058/749 4852/7059/750 -f 4853/7060/750 4852/7059/750 4854/7061/751 -f 4855/7062/751 4854/7061/751 4856/7063/684 -f 4858/7065/752 4857/7064/684 4856/7063/684 -f 4860/7067/753 4858/7065/752 4859/7066/752 -f 4697/7069/732 4846/7053/732 4849/7056/734 -f 4622/7071/733 4833/7039/733 4834/7040/735 -f 4624/7070/734 4849/7056/734 4850/7057/736 -f 4692/7072/735 4834/7040/735 4837/7043/737 -f 4687/7075/739 4853/7060/739 4855/7062/738 -f 4685/7073/736 4850/7057/736 4853/7060/739 -f 4693/7077/737 4837/7148/737 4838/7044/740 -f 4688/7076/738 4855/7062/738 4857/7064/741 -f 4694/7078/740 4838/7044/740 4841/7048/754 -f 4686/7079/741 4857/7064/741 4858/7065/755 -f 4623/7080/754 4841/7048/754 4843/7050/697 -f 4689/7081/755 4858/7065/755 4860/7067/715 -f 4695/7082/697 4843/7050/697 4845/7052/696 -f 4690/7083/715 4860/7067/715 4831/7037/714 -f 4696/7084/696 4845/7052/696 4846/7053/732 -f 4691/7085/714 4831/7037/714 4833/7039/733 -f 4860/7067/753 4861/7068/753 4862/7086/742 -f 4863/7087/742 4894/7136/742 4864/7088/693 -f 4866/7090/743 4865/7089/693 4864/7088/693 -f 4866/7090/743 4867/7091/743 4868/7092/744 -f 4870/7094/745 4869/7149/744 4868/7095/744 -f 4870/7094/745 4871/7096/745 4872/7097/687 -f 4873/7098/687 4872/7097/687 4874/7099/746 -f 4875/7100/746 4874/7099/746 4876/7101/747 -f 4878/7103/748 4877/7102/747 4876/7101/747 -f 4878/7103/748 4879/7104/748 4880/7105/690 -f 4882/7107/749 4881/7106/690 4880/7105/690 -f 4882/7107/749 4883/7108/749 4884/7109/750 -f 4885/7110/750 4884/7109/750 4886/7111/751 -f 4887/7112/751 4886/7111/751 4888/7113/684 -f 4890/7115/752 4889/7114/684 4888/7113/684 -f 4892/7117/753 4890/7115/752 4891/7116/752 -f 4710/7119/732 4878/7103/732 4881/7106/734 -f 4625/7121/733 4865/7089/733 4866/7090/735 -f 4627/7120/734 4881/7106/734 4882/7107/736 -f 4705/7122/735 4866/7090/735 4869/7093/737 -f 4700/7125/739 4885/7110/739 4887/7112/738 -f 4698/7123/736 4882/7107/736 4885/7110/739 -f 4706/7127/737 4869/7149/737 4870/7094/740 -f 4701/7126/738 4887/7112/738 4889/7114/741 -f 4707/7128/740 4870/7094/740 4873/7098/754 -f 4699/7129/741 4889/7114/741 4890/7115/755 -f 4626/7130/754 4873/7098/754 4875/7100/697 -f 4702/7131/755 4890/7115/755 4892/7117/715 -f 4708/7132/697 4875/7100/697 4877/7102/696 -f 4703/7133/715 4892/7117/715 4863/7087/714 -f 4709/7134/696 4877/7102/696 4878/7103/732 -f 4704/7135/714 4863/7087/714 4865/7089/733 -f 4892/7117/753 4893/7118/753 4894/7136/742 -f 4895/7137/754 4903/7150/774 4896/7138/774 -f 4898/7140/697 4895/7137/754 4897/7139/754 -f 4900/7142/775 4898/7140/697 4899/7141/697 -o Strong_Missile -v 0.866138 2.750000 0.358766 -v 0.750000 2.750000 0.000000 -v 0.937500 2.750000 0.000000 -v 0.692910 2.750000 -0.287013 -v 0.866138 2.750000 -0.358765 -v 0.662913 2.750000 -0.662913 -v 0.530329 2.750000 -0.530331 -v 0.358766 2.750000 -0.866137 -v 0.287012 2.750000 -0.692910 -v 0.000000 2.750000 -0.937500 -v 0.000000 2.750000 -0.750000 -v -0.358766 2.750000 -0.866137 -v -0.287013 2.750000 -0.692910 -v -0.662913 2.750000 -0.662913 -v -0.692910 2.750000 -0.287013 -v -0.866138 2.750000 -0.358765 -v -0.937500 2.750000 0.000000 -v -0.692910 2.750000 0.287013 -v -0.866138 2.750000 0.358766 -v -0.530329 2.750000 0.530330 -v -0.662913 2.750000 0.662913 -v -0.358766 2.750000 0.866138 -v -0.287013 2.750000 0.692910 -v 0.000000 2.750000 0.937500 -v 0.287013 2.750000 0.692910 -v 0.358766 2.750000 0.866138 -v 0.662913 2.750000 0.662913 -v 0.530329 2.750000 0.530331 -v -0.530329 2.000000 -0.530329 -v 0.530329 2.000000 -0.530331 -v 0.530329 2.000000 0.530331 -v 1.328476 8.750000 -1.328476 -v 0.499836 8.375000 -0.566127 -v 0.499836 9.125000 -0.566127 -v 0.566127 8.375000 -0.499836 -v 0.566127 9.125000 -0.499836 -v 1.328476 8.375000 -1.328476 -v 1.328478 8.750000 1.328477 -v 0.566127 8.375000 0.499836 -v 0.566127 9.125000 0.499836 -v 0.499836 8.375000 0.566127 -v 0.499836 9.125000 0.566127 -v 1.328478 8.375000 1.328477 -v 1.325826 4.250000 1.325825 -v 0.563477 2.375000 0.497184 -v 0.563477 5.375000 0.497184 -v 0.497184 2.375000 0.563475 -v 0.497184 5.375000 0.563475 -v 1.325826 2.375000 1.325824 -v -0.563477 2.375000 -0.497184 -v -1.325826 2.375000 -1.325824 -v -0.497184 2.375000 -0.563475 -v -1.325826 4.250000 -1.325824 -v -0.563477 5.375000 -0.497184 -v -0.497184 5.375000 -0.563475 -v 1.325824 4.250000 -1.325824 -v 0.497184 2.375000 -0.563475 -v 0.497184 5.375000 -0.563475 -v 0.563475 2.375000 -0.497184 -v 0.563475 5.375000 -0.497184 -v 1.325824 2.375000 -1.325824 -v -0.566127 8.375000 -0.499836 -v -1.328476 8.375000 -1.328476 -v -0.499836 8.375000 -0.566127 -v -1.328476 8.750000 -1.328476 -v -0.566127 9.125000 -0.499836 -v -0.499836 9.125000 -0.566127 -v -0.497184 2.375000 0.563477 -v -1.325824 2.375000 1.325824 -v -0.563475 2.375000 0.497184 -v -1.325824 4.250000 1.325825 -v -0.497184 5.375000 0.563477 -v -0.563475 5.375000 0.497184 -v -0.499836 8.375000 0.566127 -v -1.328476 8.375000 1.328477 -v -0.566127 8.375000 0.499836 -v -1.328476 8.750000 1.328477 -v -0.499836 9.125000 0.566127 -v -0.566127 9.125000 0.499836 -v 0.692910 2.750000 0.287013 -v -0.530329 2.750000 -0.530329 -v -0.750000 2.750000 0.000000 -v 0.000000 2.750000 0.750000 -v -0.287013 2.000000 -0.692910 -v 0.000000 2.000000 -0.750000 -v 0.287012 2.000000 -0.692910 -v 0.692910 2.000000 -0.287013 -v 0.750000 2.000000 0.000000 -v 0.692910 2.000000 0.287013 -v 0.287013 2.000000 0.692910 -v 0.000000 2.000000 0.750000 -v -0.287013 2.000000 0.692910 -v -0.530329 2.000000 0.530329 -v -0.692910 2.000000 0.287013 -v -0.750000 2.000000 0.000000 -v -0.692910 2.000000 -0.287013 -v -0.662913 8.187500 -0.662913 -v -0.361636 9.312500 -0.873066 -v -0.358766 8.187500 -0.866137 -v 0.662913 8.187500 0.662913 -v 0.361635 9.312500 0.873066 -v 0.358766 8.187500 0.866138 -v -0.866138 8.187500 -0.358765 -v -0.668216 9.312500 -0.668215 -v 0.866138 8.187500 0.358766 -v 0.668216 9.312500 0.668216 -v -0.937500 8.187500 0.000000 -v -0.873066 9.312500 -0.361636 -v 0.937500 8.187500 0.000000 -v 0.873066 9.312500 0.361637 -v -0.866138 8.187500 0.358766 -v -0.945000 9.312500 0.000000 -v 0.866138 8.187500 -0.358765 -v 0.945000 9.312500 0.000000 -v -0.662913 8.187500 0.662913 -v -0.873066 9.312500 0.361637 -v 0.662913 8.187500 -0.662913 -v 0.873066 9.312500 -0.361636 -v -0.358766 8.187500 0.866138 -v -0.668216 9.312500 0.668216 -v 0.358766 8.187500 -0.866137 -v 0.668216 9.312500 -0.668215 -v 0.000000 8.187500 0.937500 -v -0.361636 9.312500 0.873066 -v 0.000000 9.312500 -0.945000 -v 0.000000 8.187500 -0.937500 -v 0.361635 9.312500 -0.873066 -v 0.000000 9.312500 0.945000 -v -0.287013 9.500000 0.692910 -v 0.000000 9.500000 -0.750000 -v 0.287012 9.500000 -0.692910 -v 0.000000 9.500000 0.750000 -v -0.287013 9.500000 -0.692910 -v 0.287013 9.500000 0.692910 -v -0.530329 9.500000 -0.530329 -v 0.692910 9.500000 0.287013 -v 0.530329 9.500000 0.530331 -v -0.692910 9.500000 -0.287013 -v -0.750000 9.500000 0.000000 -v 0.692910 9.500000 -0.287013 -v 0.750000 9.500000 0.000000 -v -0.692910 9.500000 0.287013 -v -0.530329 9.500000 0.530330 -v 0.530329 9.500000 -0.530331 -v 0.530329 8.000000 0.530331 -v 0.000000 11.000000 0.000000 -v 0.692910 8.000000 0.287013 -v 0.750000 8.000000 0.000000 -v 0.692910 8.000000 -0.287013 -v 0.530329 8.000000 -0.530331 -v 0.000000 8.000000 -0.750000 -v -0.287013 8.000000 -0.692910 -v -0.530329 8.000000 -0.530329 -v -0.692910 8.000000 -0.287013 -v -0.750000 8.000000 0.000000 -v -0.692910 8.000000 0.287013 -v -0.530329 8.000000 0.530330 -v -0.287013 8.000000 0.692910 -v 0.000000 8.000000 0.750000 -v 0.287013 8.000000 0.692910 -v -0.530329 7.250000 -0.530329 -v 0.530329 7.250000 0.530331 -v -0.692910 7.250000 -0.287013 -v 0.692910 7.250000 0.287013 -v -0.750000 7.250000 0.000000 -v 0.750000 7.250000 0.000000 -v -0.692910 7.250000 0.287013 -v 0.692910 7.250000 -0.287013 -v -0.530329 7.250000 0.530330 -v 0.530329 7.250000 -0.530331 -v -0.287013 7.250000 0.692910 -v 0.287012 7.250000 -0.692910 -v 0.287012 8.000000 -0.692910 -v 0.000000 7.250000 0.750000 -v -0.287013 7.250000 -0.692910 -v 0.000000 7.250000 -0.750000 -v 0.287013 7.250000 0.692910 -v -0.358766 5.750000 0.866138 -v 0.358766 5.750000 -0.866137 -v 0.000000 5.750000 0.937500 -v -0.358766 5.750000 -0.866137 -v 0.000000 5.750000 -0.937500 -v 0.358766 5.750000 0.866138 -v -0.662913 5.750000 -0.662913 -v 0.662913 5.750000 0.662913 -v -0.866138 5.750000 -0.358765 -v 0.866138 5.750000 0.358766 -v -0.937500 5.750000 0.000000 -v 0.937500 5.750000 0.000000 -v -0.866138 5.750000 0.358766 -v 0.866138 5.750000 -0.358765 -v -0.662913 5.750000 0.662913 -v 0.662913 5.750000 -0.662913 -vt 0.350000 0.102041 -vt 0.387500 0.081633 -vt 0.400000 0.102041 -vt 0.437500 0.081633 -vt 0.450000 0.102041 -vt 0.450000 0.081633 -vt 0.500000 0.102041 -vt 0.500000 0.081633 -vt 0.550000 0.102041 -vt 0.550000 0.081633 -vt 0.600000 0.102041 -vt 0.600000 0.081633 -vt 0.650000 0.102041 -vt 0.650000 0.081633 -vt 0.700000 0.102041 -vt 0.737500 0.081633 -vt 0.750000 0.102041 -vt 0.750000 0.081633 -vt 0.800000 0.102041 -vt 0.000000 0.102041 -vt 0.037500 0.081633 -vt 0.050000 0.102041 -vt 0.087500 0.081633 -vt 0.100000 0.102041 -vt 0.100000 0.081633 -vt 0.150000 0.102041 -vt 0.150000 0.081633 -vt 0.200000 0.102041 -vt 0.237500 0.081633 -vt 0.250000 0.102041 -vt 0.250000 0.081633 -vt 0.300000 0.102041 -vt 0.300000 0.081633 -vt 0.970508 0.024075 -vt 0.970508 0.139190 -vt 0.829492 0.139190 -vt 0.950000 0.561224 -vt 0.800000 0.520408 -vt 0.800000 0.602041 -vt 0.800000 0.520408 -vt 0.800000 0.602041 -vt 0.950000 0.602041 -vt 0.800000 0.612245 -vt 0.800000 0.510204 -vt 0.950000 0.520408 -vt 0.950000 0.561224 -vt 0.800000 0.520408 -vt 0.800000 0.602041 -vt 0.800000 0.520408 -vt 0.800000 0.602041 -vt 0.950000 0.602041 -vt 0.800000 0.612245 -vt 0.800000 0.510204 -vt 0.950000 0.520408 -vt 0.950000 0.377551 -vt 0.800000 0.173469 -vt 0.800000 0.500000 -vt 0.800000 0.173469 -vt 0.800000 0.500000 -vt 0.950000 0.500000 -vt 0.800000 0.510204 -vt 0.800000 0.163265 -vt 0.950000 0.173469 -vt 0.800000 0.163265 -vt 0.950000 0.173469 -vt 0.800000 0.173469 -vt 0.950000 0.500000 -vt 0.800000 0.510204 -vt 0.800000 0.500000 -vt 0.950000 0.377551 -vt 0.800000 0.173469 -vt 0.800000 0.500000 -vt 0.950000 0.377551 -vt 0.800000 0.173469 -vt 0.800000 0.500000 -vt 0.800000 0.173469 -vt 0.800000 0.500000 -vt 0.950000 0.500000 -vt 0.800000 0.510204 -vt 0.800000 0.163265 -vt 0.950000 0.173469 -vt 0.800000 0.510204 -vt 0.950000 0.520408 -vt 0.800000 0.520408 -vt 0.950000 0.602041 -vt 0.800000 0.612245 -vt 0.800000 0.602041 -vt 0.950000 0.561224 -vt 0.800000 0.520408 -vt 0.800000 0.602041 -vt 0.800000 0.163265 -vt 0.950000 0.173469 -vt 0.800000 0.173469 -vt 0.950000 0.500000 -vt 0.800000 0.510204 -vt 0.800000 0.500000 -vt 0.950000 0.377551 -vt 0.800000 0.173469 -vt 0.800000 0.500000 -vt 0.800000 0.510204 -vt 0.950000 0.520408 -vt 0.800000 0.520408 -vt 0.950000 0.602041 -vt 0.800000 0.612245 -vt 0.800000 0.602041 -vt 0.950000 0.561224 -vt 0.800000 0.520408 -vt 0.800000 0.602041 -vt 0.350000 0.081633 -vt 0.400000 0.081633 -vt 0.487500 0.081633 -vt 0.537500 0.081633 -vt 0.587500 0.081633 -vt 0.637500 0.081633 -vt 0.687500 0.081633 -vt 0.700000 0.081633 -vt 0.787500 0.081633 -vt 0.000000 0.081633 -vt 0.050000 0.081633 -vt 0.137500 0.081633 -vt 0.187500 0.081633 -vt 0.200000 0.081633 -vt 0.287500 0.081633 -vt 0.337500 0.081633 -vt 0.992123 0.050483 -vt 0.999714 0.081633 -vt 0.992123 0.112783 -vt 0.938159 0.156836 -vt 0.900000 0.163032 -vt 0.861841 0.156836 -vt 0.807876 0.112783 -vt 0.800286 0.081633 -vt 0.807877 0.050483 -vt 0.829492 0.024075 -vt 0.861841 0.006430 -vt 0.900000 0.000234 -vt 0.938159 0.006430 -vt 0.700000 0.693878 -vt 0.650000 0.816327 -vt 0.650000 0.693878 -vt 0.300000 0.693878 -vt 0.250000 0.816327 -vt 0.250000 0.693878 -vt 0.750000 0.693878 -vt 0.700000 0.816327 -vt 0.350000 0.693878 -vt 0.300000 0.816327 -vt 0.800000 0.693878 -vt 0.750000 0.816327 -vt 0.400000 0.693878 -vt 0.350000 0.816327 -vt 0.050000 0.693878 -vt 0.000000 0.816327 -vt -0.000000 0.693878 -vt 0.450000 0.693878 -vt 0.400000 0.816327 -vt 0.100000 0.693878 -vt 0.050000 0.816327 -vt 0.500000 0.693878 -vt 0.450000 0.816327 -vt 0.150000 0.693878 -vt 0.100000 0.816327 -vt 0.550000 0.693878 -vt 0.500000 0.816327 -vt 0.200000 0.693878 -vt 0.150000 0.816327 -vt 0.600000 0.816327 -vt 0.600000 0.693878 -vt 0.550000 0.816327 -vt 0.200000 0.816327 -vt 0.150000 0.836735 -vt 0.600000 0.836735 -vt 0.550000 0.836735 -vt 0.200000 0.836735 -vt 0.650000 0.836735 -vt 0.250000 0.836735 -vt 0.700000 0.836735 -vt 0.337500 0.836735 -vt 0.300000 0.836735 -vt 0.800000 0.816327 -vt 0.750000 0.836735 -vt 0.350000 0.836735 -vt -0.000000 0.836735 -vt 0.437500 0.836735 -vt 0.400000 0.836735 -vt 0.050000 0.836735 -vt 0.450000 0.836735 -vt 0.100000 0.836735 -vt 0.500000 0.836735 -vt 0.300000 0.673469 -vt 0.687500 0.836735 -vt 0.662500 1.000000 -vt 0.737500 0.836735 -vt 0.712500 1.000000 -vt 0.787500 0.836735 -vt 0.762500 1.000000 -vt 0.037500 0.836735 -vt 0.012500 1.000000 -vt 0.087500 0.836735 +vt 0.416667 -0.000000 +vt 0.333333 -0.000000 +vt 0.500000 0.909091 +vt 0.500000 0.000000 +vt 0.416667 0.909091 +vt 0.666667 0.000000 +vt 0.583333 0.909091 +vt 0.416667 0.909091 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt -0.000000 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt -0.000000 0.522727 +vt 0.062500 0.545455 +vt 0.000000 0.784091 +vt -0.000000 0.579545 +vt 0.125000 0.545455 +vt 0.062500 0.818182 +vt 0.250000 0.579545 +vt 0.187500 0.784091 +vt 0.187500 0.579545 +vt 0.125000 0.818182 +vt 0.062500 0.545455 +vt 0.000000 0.784091 +vt -0.000000 0.579545 +vt 0.125000 0.545455 +vt 0.062500 0.818182 +vt 0.250000 0.579545 +vt 0.187500 0.784091 +vt 0.187500 0.579545 +vt 0.125000 0.818182 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt -0.000000 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.000000 0.545455 +vt 0.166667 0.545455 +vt 0.125000 0.454545 +vt 0.187500 0.386364 +vt 0.187500 0.454545 +vt -0.000000 0.454545 +vt 0.062500 0.386364 +vt 0.062500 0.454545 +vt 0.250000 0.386364 +vt 0.250000 0.454545 +vt 0.125000 0.386364 +vt 0.125000 0.454545 +vt 0.187500 0.386364 +vt 0.187500 0.454545 +vt -0.000000 0.454545 +vt 0.062500 0.386364 +vt 0.062500 0.454545 +vt 0.250000 0.386364 +vt 0.250000 0.454545 +vt 0.125000 0.386364 +vt 0.125000 0.454545 +vt 0.187500 0.386364 +vt 0.187500 0.454545 +vt -0.000000 0.454545 +vt 0.062500 0.386364 +vt 0.062500 0.454545 +vt 0.250000 0.386364 +vt 0.250000 0.454545 +vt 0.125000 0.386364 +vt 0.187500 0.454545 +vt 0.000000 0.522727 +vt 0.000000 0.454545 +vt 0.187500 0.454545 +vt 0.000000 0.522727 +vt 0.000000 0.454545 +vt 0.187500 0.454545 +vt 0.000000 0.522727 +vt 0.000000 0.454545 +vt 0.083333 0.113636 +vt 0.083333 0.113636 +vt -0.000000 0.181818 +vt -0.000000 0.181818 +vt 0.083333 0.113636 +vt 0.083333 0.113636 +vt -0.000000 0.181818 +vt 0.083333 0.250000 +vt -0.000000 0.386364 +vt 0.062500 0.818182 +vt 0.145833 0.818182 +vt 0.145833 0.852273 +vt 0.145833 1.000000 vt 0.062500 1.000000 -vt 0.137500 0.836735 -vt 0.112500 1.000000 -vt 0.187500 0.836735 -vt 0.162500 1.000000 -vt 0.237500 0.836735 -vt 0.212500 1.000000 -vt 0.287500 0.836735 -vt 0.262500 1.000000 -vt 0.312500 1.000000 -vt 0.387500 0.836735 -vt 0.362500 1.000000 -vt 0.412500 1.000000 -vt 0.487500 0.836735 -vt 0.462500 1.000000 -vt 0.537500 0.836735 -vt 0.512500 1.000000 -vt 0.587500 0.836735 -vt 0.562500 1.000000 -vt 0.637500 0.836735 -vt 0.612500 1.000000 -vt 0.350000 0.673469 -vt 0.400000 0.673469 -vt 0.450000 0.673469 -vt 0.500000 0.673469 -vt 0.587500 0.673469 -vt 0.600000 0.673469 -vt 0.650000 0.673469 -vt 0.700000 0.673469 -vt 0.750000 0.673469 -vt 0.000000 0.673469 -vt 0.050000 0.673469 -vt 0.100000 0.673469 -vt 0.150000 0.673469 -vt 0.200000 0.673469 -vt 0.250000 0.673469 -vt 0.687500 0.591837 -vt 0.687500 0.673469 -vt 0.287500 0.591837 -vt 0.287500 0.673469 -vt 0.737500 0.591837 -vt 0.737500 0.673469 -vt 0.337500 0.591837 -vt 0.337500 0.673469 -vt 0.787500 0.591837 -vt 0.787500 0.673469 -vt 0.387500 0.591837 -vt 0.387500 0.673469 -vt 0.037500 0.591837 -vt 0.037500 0.673469 -vt 0.437500 0.591837 -vt 0.437500 0.673469 -vt 0.087500 0.591837 -vt 0.087500 0.673469 -vt 0.487500 0.591837 -vt 0.487500 0.673469 -vt 0.137500 0.591837 -vt 0.137500 0.673469 -vt 0.537500 0.591837 -vt 0.537500 0.673469 -vt 0.187500 0.591837 -vt 0.187500 0.673469 -vt 0.637500 0.591837 -vt 0.637500 0.673469 -vt 0.550000 0.673469 -vt 0.587500 0.591837 -vt 0.237500 0.591837 -vt 0.237500 0.673469 -vt 0.100000 0.591837 -vt 0.150000 0.428571 -vt 0.500000 0.591837 -vt 0.550000 0.428571 -vt 0.150000 0.591837 -vt 0.200000 0.428571 -vt 0.600000 0.591837 -vt 0.650000 0.428571 -vt 0.550000 0.591837 -vt 0.600000 0.428571 -vt 0.250000 0.428571 -vt 0.650000 0.591837 -vt 0.700000 0.428571 -vt 0.250000 0.591837 -vt 0.300000 0.428571 -vt 0.700000 0.591837 -vt 0.750000 0.428571 -vt 0.300000 0.591837 -vt 0.350000 0.428571 -vt 0.750000 0.591837 -vt 0.800000 0.428571 -vt 0.350000 0.591837 -vt 0.400000 0.428571 -vt -0.000000 0.591837 -vt 0.050000 0.428571 -vt 0.400000 0.591837 -vt 0.450000 0.428571 -vt 0.050000 0.591837 -vt 0.100000 0.428571 -vt 0.450000 0.591837 -vt 0.500000 0.428571 -vt 0.000000 0.428571 -vt 0.537500 -0.000000 -vt 0.187500 0.000000 -vt 0.637500 0.000000 -vt 0.587500 0.000000 -vt 0.237500 0.000000 -vt 0.687500 0.000000 -vt 0.287500 0.000000 -vt 0.737500 -0.000000 -vt 0.337500 0.000000 -vt 0.787500 -0.000000 -vt 0.387500 0.000000 -vt 0.037500 -0.000000 -vt 0.437500 0.000000 -vt 0.087500 -0.000000 -vt 0.487500 0.000000 -vt 0.137500 0.000000 -vt 0.200000 0.591837 -vt 0.500000 -0.000000 -vt 0.150000 0.000000 -vt 0.600000 0.000000 -vt 0.550000 0.000000 -vt 0.200000 -0.000000 -vt 0.650000 0.000000 -vt 0.250000 -0.000000 -vt 0.700000 0.000000 -vt 0.300000 -0.000000 -vt 0.750000 0.000000 -vt 0.350000 -0.000000 -vt -0.000000 0.000000 -vt 0.400000 -0.000000 -vt 0.050000 -0.000000 -vt 0.450000 0.000000 -vt 0.100000 0.000000 -vn 0.0000 -1.0000 0.0000 -vn -0.6771 0.0000 -0.7359 -vn 0.7359 0.0000 0.6771 -vn 0.2236 0.9487 -0.2236 -vn 0.7359 0.0000 -0.6771 -vn -0.6771 0.0000 0.7359 -vn 0.2236 0.9487 0.2236 -vn 0.5000 0.7071 0.5000 -vn -0.5000 0.7071 -0.5000 -vn 0.6771 0.0000 -0.7359 -vn -0.7359 -0.0000 0.6771 -vn 0.5000 0.7071 -0.5000 -vn -0.2236 0.9487 -0.2236 -vn -0.5000 0.7071 0.5000 -vn -0.7359 0.0000 -0.6771 -vn 0.6771 -0.0000 0.7359 -vn -0.2236 0.9487 0.2236 -vn -0.7071 -0.0067 -0.7071 -vn -0.3827 -0.0067 -0.9239 -vn 0.7071 -0.0067 0.7071 -vn 0.3827 -0.0067 0.9239 -vn -0.9239 -0.0067 -0.3827 -vn 0.9239 -0.0067 0.3827 -vn -1.0000 -0.0067 -0.0000 -vn 1.0000 -0.0067 0.0000 -vn -0.9239 -0.0067 0.3827 -vn 0.9239 -0.0067 -0.3827 -vn -0.7071 -0.0067 0.7071 -vn 0.7071 -0.0067 -0.7071 -vn -0.3827 -0.0067 0.9239 -vn 0.3827 -0.0067 -0.9239 -vn -0.0000 -0.0067 1.0000 -vn 0.0000 -0.0067 -1.0000 -vn 0.0000 0.7208 0.6931 -vn -0.2652 0.7208 0.6403 -vn -0.2652 0.7208 -0.6403 -vn 0.0000 0.7208 -0.6931 -vn 0.2652 0.7208 -0.6403 -vn 0.2652 0.7208 -0.6404 -vn 0.2652 0.7208 0.6404 -vn -0.4901 0.7208 -0.4901 -vn 0.4901 0.7208 0.4901 -vn -0.6403 0.7208 -0.2652 -vn 0.6403 0.7208 0.2652 -vn -0.6931 0.7208 0.0000 -vn 0.6931 0.7208 0.0000 -vn -0.6403 0.7208 0.2652 -vn 0.6403 0.7208 -0.2652 -vn -0.4901 0.7208 0.4901 -vn 0.4901 0.7208 -0.4901 -vn 0.5000 -0.7071 0.5000 -vn 0.6533 -0.7071 0.2706 -vn -0.3423 0.4472 -0.8263 -vn -0.6325 0.4472 -0.6325 -vn 0.0000 1.0000 -0.0000 -vn -0.8263 0.4472 -0.3423 -vn -0.8944 0.4472 0.0000 -vn -0.8263 0.4472 0.3423 -vn -0.6325 0.4472 0.6325 -vn -0.3423 0.4472 0.8263 -vn 0.0000 0.4472 0.8944 -vn 0.3423 0.4472 0.8263 -vn 0.6325 0.4472 0.6325 -vn 0.8263 0.4472 0.3423 -vn 0.8944 0.4472 0.0000 -vn 0.8263 0.4472 -0.3423 -vn 0.6325 0.4472 -0.6325 -vn 0.3423 0.4472 -0.8263 -vn 0.0000 0.4472 -0.8944 -vn 0.7071 -0.7071 0.0000 -vn 0.6533 -0.7071 -0.2706 -vn 0.5000 -0.7071 -0.5000 -vn 0.2706 -0.7071 -0.6533 -vn 0.0000 -0.7071 -0.7071 -vn -0.2706 -0.7071 -0.6533 -vn -0.5000 -0.7071 -0.5000 -vn -0.6533 -0.7071 -0.2706 -vn -0.7071 -0.7071 -0.0000 -vn -0.6533 -0.7071 0.2706 -vn -0.5000 -0.7071 0.5000 -vn -0.2706 -0.7071 0.6533 -vn -0.0000 -0.7071 0.7071 -vn 0.2706 -0.7071 0.6533 -vn -0.3827 0.0000 -0.9239 -vn -0.7071 0.0000 -0.7071 -vn 0.3827 0.0000 0.9239 -vn 0.7071 0.0000 0.7071 -vn -0.9239 0.0000 -0.3827 -vn 0.9239 -0.0000 0.3827 -vn -1.0000 -0.0000 0.0000 -vn 1.0000 0.0000 -0.0000 -vn -0.9239 -0.0000 0.3827 -vn 0.9239 -0.0000 -0.3827 -vn -0.7071 0.0000 0.7071 -vn 0.7071 -0.0000 -0.7071 -vn -0.3827 0.0000 0.9239 -vn 0.3827 0.0000 -0.9239 -vn -0.0000 0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn -0.7016 0.1240 0.7016 -vn -0.3797 0.1240 0.9167 -vn 0.7016 0.1240 -0.7016 -vn 0.3797 0.1240 -0.9167 -vn 0.0000 0.1240 0.9923 -vn 0.0000 0.1240 -0.9923 -vn -0.3797 0.1240 -0.9167 -vn 0.3797 0.1240 0.9167 -vn -0.7016 0.1240 -0.7016 -vn 0.7016 0.1240 0.7016 -vn -0.9167 0.1240 -0.3797 -vn 0.9167 0.1240 0.3797 -vn -0.9923 0.1240 -0.0000 -vn 0.9923 0.1240 -0.0000 -vn -0.9167 0.1240 0.3797 -vn 0.9167 0.1240 -0.3797 -s off -f 4904/7151/776 4905/7152/776 4906/7153/776 -f 4906/7153/776 4907/7154/776 4908/7155/776 -f 4907/7156/776 4909/7157/776 4908/7155/776 -f 4910/7158/776 4911/7159/776 4909/7157/776 -f 4912/7160/776 4913/7161/776 4911/7159/776 -f 4914/7162/776 4915/7163/776 4913/7161/776 -f 4916/7164/776 4917/7165/776 4915/7163/776 -f 4917/7165/776 4918/7166/776 4919/7167/776 -f 4918/7168/776 4920/7169/776 4919/7167/776 -f 4920/7170/776 4921/7171/776 4922/7172/776 -f 4922/7172/776 4923/7173/776 4924/7174/776 -f 4923/7175/776 4925/7176/776 4924/7174/776 -f 4926/7177/776 4927/7178/776 4925/7176/776 -f 4927/7178/776 4928/7179/776 4929/7180/776 -f 4928/7181/776 4930/7182/776 4929/7180/776 -f 4931/7183/776 4904/7151/776 4930/7182/776 -f 4932/7184/776 4933/7185/776 4934/7186/776 -f 4935/7187/777 4936/7188/777 4937/7189/777 -f 4938/7190/778 4935/7187/778 4939/7191/778 -f 4935/7192/779 4937/7193/779 4939/7191/779 -f 4936/7194/776 4940/7195/776 4938/7190/776 -f 4941/7196/780 4942/7197/780 4943/7198/780 -f 4944/7199/781 4941/7196/781 4945/7200/781 -f 4941/7201/782 4943/7202/782 4945/7200/782 -f 4942/7203/776 4946/7204/776 4944/7199/776 -f 4947/7205/780 4948/7206/780 4949/7207/780 -f 4950/7208/781 4947/7205/781 4951/7209/781 -f 4947/7210/783 4949/7211/783 4951/7209/783 -f 4948/7212/776 4952/7213/776 4950/7208/776 -f 4953/7214/776 4954/7215/776 4955/7216/776 -f 4956/7217/784 4957/7218/784 4958/7219/784 -f 4955/7216/785 4956/7220/785 4958/7219/785 -f 4956/7220/786 4953/7221/786 4957/7222/786 -f 4959/7223/777 4960/7224/777 4961/7225/777 -f 4962/7226/778 4959/7223/778 4963/7227/778 -f 4959/7228/787 4961/7229/787 4963/7227/787 -f 4960/7230/776 4964/7231/776 4962/7226/776 -f 4965/7232/776 4966/7233/776 4967/7234/776 -f 4968/7235/788 4969/7236/788 4970/7237/788 -f 4967/7234/785 4968/7238/785 4970/7237/785 -f 4968/7238/786 4965/7239/786 4969/7240/786 -f 4971/7241/776 4972/7242/776 4973/7243/776 -f 4974/7244/789 4975/7245/789 4976/7246/789 -f 4973/7243/790 4974/7247/790 4976/7246/790 -f 4974/7247/791 4971/7248/791 4975/7249/791 -f 4977/7250/776 4978/7251/776 4979/7252/776 -f 4980/7253/792 4981/7254/792 4982/7255/792 -f 4979/7252/790 4980/7256/790 4982/7255/790 -f 4980/7256/791 4977/7257/791 4981/7258/791 -f 4904/7151/776 4983/7259/776 4905/7152/776 -f 4906/7153/776 4905/7260/776 4907/7154/776 -f 4907/7156/776 4910/7261/776 4909/7157/776 -f 4910/7158/776 4912/7262/776 4911/7159/776 -f 4912/7160/776 4914/7263/776 4913/7161/776 -f 4914/7162/776 4916/7264/776 4915/7163/776 -f 4916/7164/776 4984/7265/776 4917/7165/776 -f 4917/7165/776 4984/7266/776 4918/7166/776 -f 4918/7168/776 4985/7267/776 4920/7169/776 -f 4920/7170/776 4985/7268/776 4921/7171/776 -f 4922/7172/776 4921/7269/776 4923/7173/776 -f 4923/7175/776 4926/7270/776 4925/7176/776 -f 4926/7177/776 4986/7271/776 4927/7178/776 -f 4927/7178/776 4986/7272/776 4928/7179/776 -f 4928/7181/776 4931/7273/776 4930/7182/776 -f 4931/7183/776 4983/7274/776 4904/7151/776 -f 4932/7184/776 4987/7275/776 4988/7276/776 -f 4988/7276/776 4989/7277/776 4933/7185/776 -f 4933/7185/776 4990/7278/776 4991/7279/776 -f 4991/7279/776 4992/7280/776 4934/7186/776 -f 4934/7186/776 4993/7281/776 4994/7282/776 -f 4994/7282/776 4995/7283/776 4996/7284/776 -f 4996/7284/776 4997/7285/776 4998/7286/776 -f 4998/7286/776 4999/7287/776 4996/7284/776 -f 4999/7287/776 4932/7184/776 4996/7284/776 -f 4932/7184/776 4988/7276/776 4933/7185/776 -f 4933/7185/776 4991/7279/776 4934/7186/776 -f 4934/7186/776 4994/7282/776 4932/7184/776 -f 4994/7282/776 4996/7284/776 4932/7184/776 -f 4935/7187/777 4940/7195/777 4936/7188/777 -f 4938/7190/778 4940/7195/778 4935/7187/778 -f 4941/7196/780 4946/7204/780 4942/7197/780 -f 4944/7199/781 4946/7204/781 4941/7196/781 -f 4947/7205/780 4952/7213/780 4948/7206/780 -f 4950/7208/781 4952/7213/781 4947/7205/781 -f 4955/7216/785 4954/7215/785 4956/7220/785 -f 4956/7220/786 4954/7215/786 4953/7221/786 -f 4959/7223/777 4964/7231/777 4960/7224/777 -f 4962/7226/778 4964/7231/778 4959/7223/778 -f 4967/7234/785 4966/7233/785 4968/7238/785 -f 4968/7238/786 4966/7233/786 4965/7239/786 -f 4973/7243/790 4972/7242/790 4974/7247/790 -f 4974/7247/791 4972/7242/791 4971/7248/791 -f 4979/7252/790 4978/7251/790 4980/7256/790 -f 4980/7256/791 4978/7251/791 4977/7257/791 -s 1 -f 5000/7288/793 5001/7289/794 5002/7290/794 -f 5003/7291/795 5004/7292/796 5005/7293/796 -f 5006/7294/797 5007/7295/793 5000/7288/793 -f 5008/7296/798 5009/7297/795 5003/7291/795 -f 5010/7298/799 5011/7299/797 5006/7294/797 -f 5012/7300/800 5013/7301/798 5008/7296/798 -f 5014/7302/801 5015/7303/799 5010/7304/799 -f 5016/7305/802 5017/7306/800 5012/7300/800 -f 5018/7307/803 5019/7308/801 5014/7302/801 -f 5020/7309/804 5021/7310/802 5016/7305/802 -f 5022/7311/805 5023/7312/803 5018/7307/803 -f 5024/7313/806 5025/7314/804 5020/7309/804 -f 5026/7315/807 5027/7316/805 5022/7311/805 -f 5002/7290/794 5028/7317/808 5029/7318/808 -f 5029/7318/808 5030/7319/806 5024/7313/806 -f 5005/7293/796 5031/7320/807 5026/7315/807 -f 5031/7320/809 5032/7321/810 5027/7316/810 -f 5001/7289/811 5033/7322/812 5028/7317/812 -f 5028/7317/812 5034/7323/813 5030/7319/814 -f 5004/7292/815 5035/7324/809 5031/7320/809 -f 5007/7295/816 5036/7325/811 5001/7289/811 -f 5009/7297/817 5037/7326/815 5004/7292/815 -f 5011/7299/818 5038/7327/816 5007/7295/816 -f 5009/7297/817 5039/7328/819 5040/7329/817 -f 5015/7330/820 5041/7331/818 5011/7299/818 -f 5017/7306/821 5039/7332/819 5013/7301/819 -f 5019/7308/822 5042/7333/820 5015/7303/820 -f 5017/7306/821 5043/7334/823 5044/7335/821 -f 5023/7312/824 5045/7336/822 5019/7308/822 -f 5025/7314/825 5043/7337/823 5021/7310/823 -f 5027/7316/810 5046/7338/824 5023/7312/824 -f 5030/7319/814 5047/7339/825 5025/7314/825 -f 5048/7340/826 5008/7296/827 5003/7291/826 -f 5036/7325/828 5038/7341/829 5049/7342/830 -f 5038/7327/829 5041/7343/831 5049/7344/830 -f 5041/7331/831 5042/7345/832 5049/7346/830 -f 5042/7333/832 5045/7347/833 5049/7348/830 -f 5045/7336/833 5046/7349/834 5049/7350/830 -f 5046/7338/834 5032/7351/835 5049/7352/830 -f 5032/7321/835 5035/7353/836 5049/7354/830 -f 5035/7324/836 5037/7355/837 5049/7356/830 -f 5037/7326/837 5040/7357/838 5049/7358/830 -f 5040/7329/838 5039/7328/839 5049/7359/830 -f 5039/7332/839 5044/7360/840 5049/7361/830 -f 5044/7335/840 5043/7334/841 5049/7362/830 -f 5043/7337/841 5047/7363/842 5049/7364/830 -f 5047/7339/842 5034/7365/843 5049/7366/830 -f 5034/7323/843 5033/7367/844 5049/7368/830 -f 5033/7322/844 5036/7369/828 5049/7370/830 -f 5050/7371/827 5012/7300/845 5008/7296/827 -f 5051/7372/845 5016/7305/846 5012/7300/845 -f 5052/7373/846 5020/7309/847 5016/7305/846 -f 5053/7374/847 5024/7313/848 5020/7309/847 -f 5024/7313/848 5054/7375/849 5029/7318/849 -f 5054/7376/849 5002/7290/850 5029/7318/849 -f 5055/7377/850 5000/7288/851 5002/7290/850 -f 5056/7378/851 5006/7294/852 5000/7288/851 -f 5057/7379/852 5010/7298/853 5006/7294/852 -f 5058/7380/853 5014/7302/854 5010/7304/853 -f 5059/7381/854 5018/7307/855 5014/7302/854 -f 5060/7382/855 5022/7311/856 5018/7307/855 -f 5061/7383/856 5026/7315/857 5022/7311/856 -f 5062/7384/857 5005/7293/858 5026/7315/857 -f 5063/7385/858 5003/7291/826 5005/7293/858 -f 5055/7377/859 5064/7386/860 5056/7387/860 -f 5063/7385/861 5065/7388/862 5048/7389/862 -f 5056/7378/860 5066/7390/863 5057/7391/863 -f 5048/7340/862 5067/7392/864 5050/7393/864 -f 5057/7379/863 5068/7394/865 5058/7395/865 -f 5050/7371/864 5069/7396/866 5051/7397/866 -f 5058/7380/865 5070/7398/867 5059/7399/867 -f 5051/7372/866 5071/7400/868 5052/7401/868 -f 5059/7381/867 5072/7402/869 5060/7403/869 -f 5052/7373/868 5073/7404/870 5053/7405/870 -f 5060/7382/869 5074/7406/871 5061/7407/871 -f 5053/7374/870 5075/7408/872 5076/7409/872 -f 5061/7383/871 5077/7410/873 5062/7411/873 -f 5054/7376/874 5078/7412/859 5055/7413/859 -f 5076/7414/872 5079/7415/874 5054/7375/874 -f 5062/7384/873 5080/7416/861 5063/7417/861 -f 5072/7418/875 5081/7419/876 5074/7406/876 -f 5073/7420/877 5082/7421/878 5075/7408/878 -f 5074/7422/876 5083/7423/879 5077/7410/879 -f 5079/7424/880 5084/7425/881 5078/7412/881 -f 5075/7426/878 5085/7427/880 5079/7415/880 -f 5080/7416/882 5083/7423/879 5086/7428/882 -f 5078/7429/881 5087/7430/883 5064/7386/883 -f 5080/7431/882 5088/7432/884 5065/7388/884 -f 5064/7433/883 5089/7434/885 5066/7390/885 -f 5065/7435/884 5090/7436/886 5067/7392/886 -f 5066/7437/885 5091/7438/887 5068/7394/887 -f 5067/7439/886 5092/7440/888 5069/7396/888 -f 5068/7441/887 5093/7442/889 5070/7398/889 -f 5069/7443/888 5094/7444/890 5071/7400/890 -f 5070/7445/889 5095/7446/875 5072/7402/875 -f 5071/7447/890 5096/7448/877 5073/7404/877 -f 5090/7436/864 4906/7153/866 5092/7440/866 -f 5091/7449/865 4922/7172/867 5093/7442/867 -f 5092/7440/866 4908/7155/868 5094/7444/868 -f 5093/7442/867 4924/7174/869 5095/7446/869 -f 5094/7444/868 4909/7157/870 5096/7448/870 -f 5095/7446/869 4925/7176/871 5081/7419/871 -f 5096/7448/870 4911/7159/872 5082/7421/872 -f 5081/7419/871 4927/7178/873 5083/7423/873 -f 5085/7427/874 4915/7163/859 5084/7425/859 -f 5082/7421/872 4913/7161/874 5085/7427/874 -f 5083/7423/873 4929/7180/861 5086/7428/861 -f 5084/7425/859 4917/7165/860 5087/7430/860 -f 5086/7428/861 4930/7182/862 5088/7432/862 -f 5087/7430/860 4919/7167/863 5089/7434/863 -f 5088/7432/862 4904/7151/864 5090/7436/864 -f 5089/7434/863 4920/7169/865 5091/7438/865 -f 4910/7158/870 4989/7450/872 4912/7262/872 -f 4926/7177/871 4994/7451/873 4986/7271/873 -f 4914/7162/874 4987/7452/859 4916/7264/859 -f 4912/7160/872 4988/7453/874 4914/7263/874 -f 4986/7272/873 4993/7454/861 4928/7179/861 -f 4916/7164/859 4932/7455/860 4984/7265/860 -f 4928/7181/861 4934/7456/862 4931/7273/862 -f 4984/7266/860 4999/7457/863 4918/7166/863 -f 4931/7183/862 4992/7458/864 4983/7274/864 -f 4918/7168/863 4998/7459/865 4985/7267/865 -f 4983/7259/864 4991/7460/866 4905/7152/866 -f 4985/7268/865 4997/7461/867 4921/7171/867 -f 4905/7260/866 4990/7462/868 4907/7154/868 -f 4921/7269/867 4996/7463/869 4923/7173/869 -f 4907/7156/868 4933/7464/870 4910/7261/870 -f 4923/7175/869 4995/7465/871 4926/7270/871 -f 5000/7288/793 5007/7295/793 5001/7289/794 -f 5003/7291/795 5009/7297/795 5004/7292/796 -f 5006/7294/797 5011/7299/797 5007/7295/793 -f 5008/7296/798 5013/7301/798 5009/7297/795 -f 5010/7298/799 5015/7330/799 5011/7299/797 -f 5012/7300/800 5017/7306/800 5013/7301/798 -f 5014/7302/801 5019/7308/801 5015/7303/799 -f 5016/7305/802 5021/7310/802 5017/7306/800 -f 5018/7307/803 5023/7312/803 5019/7308/801 -f 5020/7309/804 5025/7314/804 5021/7310/802 -f 5022/7311/805 5027/7316/805 5023/7312/803 -f 5024/7313/806 5030/7319/806 5025/7314/804 -f 5026/7315/807 5031/7320/807 5027/7316/805 -f 5002/7290/794 5001/7289/794 5028/7317/808 -f 5029/7318/808 5028/7317/808 5030/7319/806 -f 5005/7293/796 5004/7292/796 5031/7320/807 -f 5031/7320/809 5035/7353/809 5032/7321/810 -f 5001/7289/811 5036/7369/811 5033/7322/812 -f 5028/7317/812 5033/7367/812 5034/7323/813 -f 5004/7292/815 5037/7355/815 5035/7324/809 -f 5007/7295/816 5038/7341/816 5036/7325/811 -f 5009/7297/817 5040/7357/817 5037/7326/815 -f 5011/7299/818 5041/7343/818 5038/7327/816 -f 5009/7297/817 5013/7301/819 5039/7328/819 -f 5015/7330/820 5042/7345/820 5041/7331/818 -f 5017/7306/821 5044/7360/821 5039/7332/819 -f 5019/7308/822 5045/7347/822 5042/7333/820 -f 5017/7306/821 5021/7310/823 5043/7334/823 -f 5023/7312/824 5046/7349/824 5045/7336/822 -f 5025/7314/825 5047/7363/825 5043/7337/823 -f 5027/7316/810 5032/7351/810 5046/7338/824 -f 5030/7319/814 5034/7365/813 5047/7339/825 -f 5048/7340/826 5050/7393/827 5008/7296/827 -f 5050/7371/827 5051/7397/845 5012/7300/845 -f 5051/7372/845 5052/7401/846 5016/7305/846 -f 5052/7373/846 5053/7405/847 5020/7309/847 -f 5053/7374/847 5076/7409/848 5024/7313/848 -f 5024/7313/848 5076/7414/848 5054/7375/849 -f 5054/7376/849 5055/7413/850 5002/7290/850 -f 5055/7377/850 5056/7387/851 5000/7288/851 -f 5056/7378/851 5057/7391/852 5006/7294/852 -f 5057/7379/852 5058/7395/853 5010/7298/853 -f 5058/7380/853 5059/7399/854 5014/7302/854 -f 5059/7381/854 5060/7403/855 5018/7307/855 -f 5060/7382/855 5061/7407/856 5022/7311/856 -f 5061/7383/856 5062/7411/857 5026/7315/857 -f 5062/7384/857 5063/7417/858 5005/7293/858 -f 5063/7385/858 5048/7389/826 5003/7291/826 -f 5055/7377/859 5078/7429/859 5064/7386/860 -f 5063/7385/861 5080/7431/861 5065/7388/862 -f 5056/7378/860 5064/7433/860 5066/7390/863 -f 5048/7340/862 5065/7435/862 5067/7392/864 -f 5057/7379/863 5066/7437/863 5068/7394/865 -f 5050/7371/864 5067/7439/864 5069/7396/866 -f 5058/7380/865 5068/7441/865 5070/7398/867 -f 5051/7372/866 5069/7443/866 5071/7400/868 -f 5059/7381/867 5070/7445/867 5072/7402/869 -f 5052/7373/868 5071/7447/868 5073/7404/870 -f 5060/7382/869 5072/7418/869 5074/7406/871 -f 5053/7374/870 5073/7420/870 5075/7408/872 -f 5061/7383/871 5074/7422/871 5077/7410/873 -f 5054/7376/874 5079/7424/874 5078/7412/859 -f 5076/7414/872 5075/7426/872 5079/7415/874 -f 5062/7384/873 5077/7466/873 5080/7416/861 -f 5072/7418/875 5095/7446/875 5081/7419/876 -f 5073/7420/877 5096/7448/877 5082/7421/878 -f 5074/7422/876 5081/7419/876 5083/7423/879 -f 5079/7424/880 5085/7427/880 5084/7425/881 -f 5075/7426/878 5082/7421/878 5085/7427/880 -f 5080/7416/882 5077/7466/879 5083/7423/879 -f 5078/7429/881 5084/7425/881 5087/7430/883 -f 5080/7431/882 5086/7428/882 5088/7432/884 -f 5064/7433/883 5087/7430/883 5089/7434/885 -f 5065/7435/884 5088/7432/884 5090/7436/886 -f 5066/7437/885 5089/7434/885 5091/7438/887 -f 5067/7439/886 5090/7436/886 5092/7440/888 -f 5068/7441/887 5091/7449/887 5093/7442/889 -f 5069/7443/888 5092/7440/888 5094/7444/890 -f 5070/7445/889 5093/7442/889 5095/7446/875 -f 5071/7447/890 5094/7444/890 5096/7448/877 -f 5090/7436/864 4904/7151/864 4906/7153/866 -f 5091/7449/865 4920/7170/865 4922/7172/867 -f 5092/7440/866 4906/7153/866 4908/7155/868 -f 5093/7442/867 4922/7172/867 4924/7174/869 -f 5094/7444/868 4908/7155/868 4909/7157/870 -f 5095/7446/869 4924/7174/869 4925/7176/871 -f 5096/7448/870 4909/7157/870 4911/7159/872 -f 5081/7419/871 4925/7176/871 4927/7178/873 -f 5085/7427/874 4913/7161/874 4915/7163/859 -f 5082/7421/872 4911/7159/872 4913/7161/874 -f 5083/7423/873 4927/7178/873 4929/7180/861 -f 5084/7425/859 4915/7163/859 4917/7165/860 -f 5086/7428/861 4929/7180/861 4930/7182/862 -f 5087/7430/860 4917/7165/860 4919/7167/863 -f 5088/7432/862 4930/7182/862 4904/7151/864 -f 5089/7434/863 4919/7167/863 4920/7169/865 -f 4910/7158/870 4933/7467/870 4989/7450/872 -f 4926/7177/871 4995/7468/871 4994/7451/873 -f 4914/7162/874 4988/7469/874 4987/7452/859 -f 4912/7160/872 4989/7470/872 4988/7453/874 -f 4986/7272/873 4994/7471/873 4993/7454/861 -f 4916/7164/859 4987/7472/859 4932/7455/860 -f 4928/7181/861 4993/7473/861 4934/7456/862 -f 4984/7266/860 4932/7474/860 4999/7457/863 -f 4931/7183/862 4934/7475/862 4992/7458/864 -f 4918/7168/863 4999/7476/863 4998/7459/865 -f 4983/7259/864 4992/7477/864 4991/7460/866 -f 4985/7268/865 4998/7478/865 4997/7461/867 -f 4905/7260/866 4991/7479/866 4990/7462/868 -f 4921/7269/867 4997/7480/867 4996/7463/869 -f 4907/7156/868 4990/7481/868 4933/7464/870 -f 4923/7175/869 4996/7482/869 4995/7465/871 -o V2_Missile -v 0.265165 2.500000 -0.265165 -v 0.265165 2.500000 0.265165 -v -0.265165 2.500000 0.265165 -v 0.729204 3.500000 -0.773398 -v 0.773398 2.000000 -0.729204 -v 0.729204 2.000000 -0.773398 -v -0.773398 3.500000 -0.729204 -v -0.729204 2.000000 -0.773398 -v -0.773398 2.000000 -0.729204 -v -0.198874 2.500000 -0.243068 -v -0.596621 2.000000 -0.552427 -v -0.552427 2.000000 -0.596621 -v 0.243068 2.500000 -0.198874 -v 0.552427 2.000000 -0.596621 -v 0.596621 2.000000 -0.552427 -v -0.729204 3.500000 -0.773398 -v 0.773398 3.500000 -0.729204 -v -0.243068 2.500000 -0.198874 -v 0.198874 2.500000 -0.243068 -v -0.243068 4.500000 -0.198874 -v -0.198874 4.500000 -0.243068 -v 0.198874 4.500000 -0.243068 -v 0.243068 4.500000 -0.198874 -v -0.243068 4.500000 0.198874 -v -0.729204 3.500000 0.773398 -v -0.198874 4.500000 0.243068 -v -0.552427 2.000000 0.596621 -v -0.773398 2.000000 0.729204 -v -0.596621 2.000000 0.552427 -v -0.729204 2.000000 0.773398 -v -0.198874 2.500000 0.243068 -v -0.773398 3.500000 0.729204 -v -0.243068 2.500000 0.198874 -v 0.729204 3.500000 0.773398 -v 0.243068 4.500000 0.198874 -v 0.198874 4.500000 0.243068 -v 0.552427 2.000000 0.596621 -v 0.773398 2.000000 0.729204 -v 0.729204 2.000000 0.773398 -v 0.773398 3.500000 0.729204 -v 0.243068 2.500000 0.198874 -v 0.198874 2.500000 0.243068 -v -0.265165 2.500000 -0.265165 -v -0.143506 2.500000 -0.346455 -v 0.000000 2.500000 -0.375000 -v 0.143506 2.500000 -0.346455 -v 0.346455 2.500000 -0.143506 -v 0.375000 2.500000 0.000000 -v 0.346455 2.500000 0.143506 -v 0.143506 2.500000 0.346455 -v 0.000000 2.500000 0.375000 -v -0.143506 2.500000 0.346455 -v -0.346455 2.500000 0.143506 -v -0.375000 2.500000 0.000000 -v -0.346455 2.500000 -0.143506 -v 0.596621 2.000000 0.552427 -v 0.353553 3.500000 0.353553 -v 0.191342 6.000000 0.461940 -v 0.191342 3.500000 0.461940 -v -0.461940 3.500000 -0.191342 -v -0.353553 6.000000 -0.353553 -v -0.353553 3.500000 -0.353553 -v 0.461940 3.500000 0.191342 -v 0.353553 6.000000 0.353554 -v -0.500000 3.500000 0.000000 -v -0.461940 6.000000 -0.191342 -v 0.500000 3.500000 0.000000 -v 0.461940 6.000000 0.191342 -v -0.461940 3.500000 0.191342 -v -0.500000 6.000000 0.000000 -v 0.461940 3.500000 -0.191342 -v 0.500000 6.000000 0.000000 -v -0.353553 3.500000 0.353553 -v -0.461940 6.000000 0.191342 -v 0.353553 3.500000 -0.353554 -v 0.461940 6.000000 -0.191342 -v -0.191342 3.500000 0.461940 -v -0.353553 6.000000 0.353553 -v 0.191341 3.500000 -0.461940 -v 0.353553 6.000000 -0.353554 -v 0.000000 6.000000 0.500000 -v -0.191342 6.000000 0.461940 -v -0.191342 3.500000 -0.461940 -v 0.000000 6.000000 -0.500000 -v 0.000000 3.500000 -0.500000 -v 0.191341 6.000000 -0.461940 -v 0.000000 3.500000 0.500000 -v -0.191342 6.000000 -0.461940 -v 0.000000 7.500000 -0.375000 -v 0.143506 7.500000 -0.346455 -v 0.000000 7.500000 0.375000 -v -0.265165 7.500000 -0.265165 -v -0.143506 7.500000 -0.346455 -v 0.265165 7.500000 0.265165 -v 0.143506 7.500000 0.346455 -v -0.375000 7.500000 0.000000 -v -0.346455 7.500000 -0.143506 -v 0.375000 7.500000 0.000000 -v 0.346455 7.500000 0.143506 -v -0.265165 7.500000 0.265165 -v -0.346455 7.500000 0.143506 -v 0.346455 7.500000 -0.143506 -v 0.265165 7.500000 -0.265165 -v -0.143506 7.500000 0.346455 -v 0.000000 9.000000 0.000000 -vt 0.954652 0.411214 -vt 0.954652 0.492632 -vt 0.815840 0.492632 -vt 0.803279 0.240385 -vt 0.786885 0.009615 -vt 0.803279 0.009615 -vt 0.803279 0.750000 -vt 0.786885 0.519231 -vt 0.803279 0.519231 -vt 1.000000 0.509615 -vt 0.868852 0.519231 -vt 0.868852 0.509615 -vt 1.000000 -0.000000 -vt 0.868852 0.009615 -vt 0.868852 -0.000000 -vt 0.803279 0.750000 -vt 1.000000 0.596154 -vt 0.803279 0.519231 -vt 0.803279 0.240385 -vt 1.000000 0.086538 -vt 0.803279 0.009615 -vt 1.000000 0.596154 -vt 1.000000 0.086538 -vt 0.803279 0.509615 -vt 0.786885 0.750000 -vt 0.803279 0.903846 -vt 0.786885 0.903846 -vt 0.803279 0.000000 -vt 0.786885 0.240385 -vt 0.803279 0.394231 -vt 0.786885 0.394231 -vt 0.786885 0.394231 -vt 0.803279 0.240385 -vt 0.803279 0.394231 -vt 0.868852 0.009615 -vt 0.803279 0.000000 -vt 0.868852 -0.000000 -vt 0.803279 0.009615 -vt 1.000000 0.086538 -vt 0.803279 0.240385 -vt 1.000000 0.086538 -vt 0.803279 0.009615 -vt 1.000000 -0.000000 -vt 0.786885 0.009615 -vt 0.786885 0.750000 -vt 0.803279 0.903846 -vt 0.786885 0.903846 -vt 0.868852 0.509615 -vt 0.803279 0.519231 -vt 0.803279 0.509615 -vt 0.803279 0.750000 -vt 1.000000 0.596154 -vt 0.803279 0.750000 -vt 1.000000 0.596154 -vt 0.803279 0.519231 -vt 1.000000 0.519231 -vt 1.000000 0.509615 -vt 0.786885 0.519231 -vt 0.815840 0.411214 -vt 0.847684 0.398734 -vt 0.885246 0.394352 -vt 0.922808 0.398734 -vt 0.975929 0.429891 -vt 0.983401 0.451923 -vt 0.975929 0.473955 -vt 0.922808 0.505112 -vt 0.885246 0.509494 -vt 0.847684 0.505112 -vt 0.794563 0.473955 -vt 0.787091 0.451923 -vt 0.794563 0.429891 -vt 1.000000 0.519231 -vt 1.000000 0.009615 -vt 1.000000 0.903846 -vt 0.868852 0.519231 -vt 1.000000 0.394231 -vt 0.868852 0.009615 -vt 1.000000 0.903846 -vt 1.000000 0.394231 -vt 0.786885 0.240385 -vt 1.000000 0.394231 -vt 1.000000 0.394231 -vt 0.868852 0.009615 -vt 1.000000 0.009615 -vt 0.868852 0.519231 -vt 1.000000 0.903846 -vt 1.000000 0.903846 -vt 0.868852 0.519231 -vt 0.295082 0.153846 -vt 0.245902 0.538462 -vt 0.245902 0.153846 -vt 0.737705 0.153846 -vt 0.688525 0.538462 -vt 0.688525 0.153846 -vt 0.344262 0.153846 -vt 0.295082 0.538462 -vt 0.786885 0.153846 -vt 0.737705 0.538462 -vt 0.393443 0.153846 -vt 0.344262 0.538462 -vt 0.049180 0.153846 -vt -0.000000 0.538462 -vt -0.000000 0.153846 -vt 0.442623 0.153846 -vt 0.393443 0.538462 -vt 0.098361 0.153846 -vt 0.049180 0.538462 -vt 0.491803 0.153846 -vt 0.442623 0.538462 -vt 0.147541 0.153846 -vt 0.098361 0.538462 -vt 0.540984 0.153846 -vt 0.491803 0.538462 -vt 0.196721 0.538462 -vt 0.147541 0.538462 -vt 0.639344 0.153846 -vt 0.590164 0.538462 -vt 0.590164 0.153846 -vt 0.540984 0.538462 -vt 0.196721 0.153846 -vt 0.639344 0.538462 -vt 0.573770 0.769231 -vt 0.540984 0.769231 -vt 0.196721 0.769231 -vt 0.672131 0.769231 -vt 0.639344 0.769231 -vt 0.278689 0.769231 -vt 0.245902 0.769231 -vt 0.688525 0.769231 -vt 0.295082 0.769231 -vt 0.770492 0.769231 -vt 0.737705 0.769231 -vt 0.377049 0.769231 -vt 0.344262 0.769231 -vt -0.000000 0.769231 -vt 0.393443 0.769231 -vt 0.081967 0.769231 -vt 0.049180 0.769231 -vt 0.442623 0.769231 -vt 0.098361 0.769231 -vt 0.491803 0.769231 -vt 0.147541 0.769231 -vt 0.590164 0.769231 -vt 0.655738 1.000000 -vt 0.721311 0.769231 -vt 0.704918 1.000000 -vt 0.754098 1.000000 -vt 0.032787 0.769231 -vt 0.016393 1.000000 -vt 0.065574 1.000000 -vt 0.131148 0.769231 -vt 0.114754 1.000000 -vt 0.180328 0.769231 -vt 0.163934 1.000000 -vt 0.229508 0.769231 -vt 0.213115 1.000000 -vt 0.262295 1.000000 -vt 0.327869 0.769231 -vt 0.311475 1.000000 -vt 0.360656 1.000000 -vt 0.426230 0.769231 -vt 0.409836 1.000000 -vt 0.475410 0.769231 -vt 0.459016 1.000000 -vt 0.524590 0.769231 -vt 0.508197 1.000000 -vt 0.557377 1.000000 -vt 0.622951 0.769231 -vt 0.606557 1.000000 -vt 0.278689 0.000000 -vt 0.688525 0.000000 -vt 0.721311 0.000000 -vt 0.295082 0.000000 -vt 0.327869 0.000000 -vt 0.737705 0.000000 -vt 0.770492 0.000000 -vt 0.344262 0.000000 -vt 0.377049 0.000000 -vt -0.000000 0.000000 -vt 0.032787 0.000000 -vt 0.426230 0.000000 -vt 0.081967 0.000000 -vt 0.475410 0.000000 -vt 0.131148 0.000000 -vt 0.491803 0.000000 -vt 0.524590 0.000000 -vt 0.180328 0.000000 -vt 0.622951 0.000000 -vt 0.573770 0.000000 -vt 0.196721 0.000000 -vt 0.229508 0.000000 -vt 0.639344 0.000000 -vt 0.672131 0.000000 -vt 0.786885 0.538462 -vt 0.245902 0.000000 -vt 0.393443 0.000000 -vt 0.049180 0.000000 -vt 0.442623 0.000000 -vt 0.098361 0.000000 -vt 0.147541 0.000000 -vt 0.590164 0.000000 -vt 0.540984 0.000000 -vn 0.0000 -1.0000 0.0000 -vn 0.7071 0.0000 -0.7071 -vn -0.7071 0.0000 -0.7071 -vn 0.5000 -0.7071 0.5000 -vn -0.5000 -0.7071 0.5000 -vn 0.7071 -0.0000 0.7071 -vn -0.7071 -0.0000 0.7071 -vn -0.5657 0.6000 -0.5657 -vn 0.5657 0.6000 -0.5657 -vn -0.5657 0.6000 0.5657 -vn 0.5000 -0.7071 -0.5000 -vn 0.5657 0.6000 0.5657 -vn -0.5000 -0.7071 -0.5000 -vn 0.7058 -0.0617 0.7058 -vn 0.3824 0.0413 0.9231 -vn 0.3820 -0.0617 0.9221 -vn -0.9221 -0.0617 -0.3820 -vn -0.7065 0.0413 -0.7065 -vn -0.7058 -0.0617 -0.7058 -vn 0.9221 -0.0617 0.3820 -vn 0.7065 0.0413 0.7065 -vn -0.9981 -0.0617 -0.0000 -vn -0.9231 0.0413 -0.3824 -vn 0.9981 -0.0617 0.0000 -vn 0.9231 0.0413 0.3824 -vn -0.9221 -0.0617 0.3820 -vn -0.9991 0.0413 0.0000 -vn 0.9221 -0.0617 -0.3820 -vn 0.9991 0.0413 -0.0000 -vn -0.7058 -0.0617 0.7058 -vn -0.9231 0.0413 0.3824 -vn 0.7058 -0.0617 -0.7058 -vn 0.9231 0.0413 -0.3824 -vn -0.3820 -0.0617 0.9221 -vn -0.7065 0.0413 0.7065 -vn 0.3820 -0.0617 -0.9221 -vn 0.7065 0.0413 -0.7065 -vn -0.0000 0.0413 0.9991 -vn -0.3824 0.0413 0.9231 -vn -0.3820 -0.0617 -0.9221 -vn 0.0000 0.0413 -0.9991 -vn 0.0000 -0.0617 -0.9981 -vn 0.3824 0.0413 -0.9231 -vn 0.0000 -0.0617 0.9981 -vn -0.3824 0.0413 -0.9231 -vn -0.0000 0.1617 -0.9868 -vn 0.3776 0.1617 -0.9117 -vn 0.0000 0.1617 0.9868 -vn -0.6978 0.1617 -0.6978 -vn -0.3776 0.1617 -0.9117 -vn 0.6978 0.1617 0.6978 -vn 0.3776 0.1617 0.9117 -vn -0.9868 0.1617 -0.0000 -vn -0.9117 0.1617 -0.3776 -vn 0.9868 0.1617 -0.0000 -vn 0.9117 0.1617 0.3776 -vn -0.6978 0.1617 0.6978 -vn -0.9117 0.1617 0.3776 -vn 0.9117 0.1617 -0.3776 -vn 0.6978 0.1617 -0.6978 -vn -0.3776 0.1617 0.9117 +vt 0.062500 0.965909 +vt 0.187500 0.522727 +vt 0.666667 0.909091 +vt 0.666667 0.909091 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.522727 +vt 0.166667 0.545455 +vt 0.166667 0.522727 +vt 0.166667 0.545455 +vt 0.250000 0.784091 +vt 0.250000 0.784091 +vt -0.000000 0.522727 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.545455 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt -0.000000 0.545455 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.545455 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.522727 +vt -0.000000 0.545455 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.545455 +vt -0.000000 0.522727 +vt -0.000000 0.386364 +vt -0.000000 0.386364 +vt -0.000000 0.386364 +vt 0.187500 0.522727 +vt 0.187500 0.522727 +vt 0.187500 0.522727 vn 0.0000 1.0000 0.0000 -vn 0.7016 -0.1240 0.7016 -vn -0.7016 -0.1240 -0.7016 -vn -0.9167 -0.1240 -0.3797 -vn 0.9167 -0.1240 0.3797 -vn -0.9923 -0.1240 -0.0000 -vn 0.9923 -0.1240 0.0000 -vn -0.9167 -0.1240 0.3797 -vn 0.9167 -0.1240 -0.3797 -vn -0.7016 -0.1240 0.7016 -vn 0.7016 -0.1240 -0.7016 -vn -0.3797 -0.1240 0.9167 -vn 0.3797 -0.1240 -0.9167 -vn 0.0000 -0.1240 0.9923 -vn -0.3797 -0.1240 -0.9167 -vn 0.0000 -0.1240 -0.9923 -vn 0.3797 -0.1240 0.9167 -s off -f 5097/7483/891 5098/7484/891 5099/7485/891 -f 5100/7486/892 5101/7487/892 5102/7488/892 -f 5103/7489/893 5104/7490/893 5105/7491/893 -f 5106/7492/894 5107/7493/894 5108/7494/894 -f 5109/7495/895 5110/7496/895 5111/7497/895 -f 5112/7498/892 5106/7499/892 5104/7500/892 -f 5113/7501/896 5109/7502/896 5101/7503/896 -f 5103/7489/897 5105/7491/897 5114/7504/897 -f 5100/7486/893 5102/7488/893 5115/7505/893 -f 5107/7493/891 5104/7506/891 5108/7494/891 -f 5112/7507/898 5116/7508/898 5117/7509/898 -f 5111/7497/891 5102/7488/891 5101/7510/891 -f 5113/7511/899 5118/7512/899 5119/7513/899 -f 5120/7514/900 5121/7515/900 5122/7516/900 -f 5123/7517/891 5124/7518/891 5125/7519/891 -f 5121/7515/896 5126/7520/896 5127/7521/896 -f 5128/7522/893 5129/7523/893 5124/7524/893 -f 5129/7525/901 5123/7517/901 5125/7519/901 -f 5121/7515/897 5124/7526/897 5126/7520/897 -f 5130/7527/902 5131/7528/902 5132/7529/902 -f 5133/7530/891 5134/7531/891 5135/7532/891 -f 5136/7533/892 5134/7531/892 5137/7534/892 -f 5130/7535/897 5138/7536/897 5135/7537/897 -f 5137/7538/903 5133/7530/903 5138/7539/903 -f 5136/7533/896 5135/7540/896 5134/7531/896 -f 5139/7541/891 5140/7542/891 5141/7543/891 -f 5141/7543/891 5142/7544/891 5097/7483/891 -f 5097/7483/891 5143/7545/891 5098/7484/891 -f 5143/7545/891 5144/7546/891 5098/7484/891 -f 5144/7546/891 5145/7547/891 5098/7484/891 -f 5098/7484/891 5146/7548/891 5099/7485/891 -f 5146/7548/891 5147/7549/891 5099/7485/891 -f 5147/7549/891 5148/7550/891 5099/7485/891 -f 5099/7485/891 5149/7551/891 5150/7552/891 -f 5150/7552/891 5151/7553/891 5139/7541/891 -f 5139/7541/891 5141/7543/891 5097/7483/891 -f 5099/7485/891 5150/7552/891 5139/7541/891 -f 5139/7541/891 5097/7483/891 5099/7485/891 -f 5100/7486/892 5113/7511/892 5101/7487/892 -f 5103/7489/893 5112/7507/893 5104/7490/893 -f 5106/7492/894 5114/7554/894 5107/7493/894 -f 5109/7495/895 5115/7555/895 5110/7496/895 -f 5117/7556/892 5106/7499/892 5112/7498/892 -f 5106/7499/892 5108/7557/892 5104/7500/892 -f 5119/7558/896 5109/7502/896 5113/7501/896 -f 5109/7502/896 5111/7559/896 5101/7503/896 -f 5107/7493/897 5114/7504/897 5105/7491/897 -f 5114/7504/897 5116/7560/897 5103/7489/897 -f 5110/7496/893 5115/7505/893 5102/7488/893 -f 5115/7505/893 5118/7561/893 5100/7486/893 -f 5107/7493/891 5105/7491/891 5104/7506/891 -f 5112/7507/898 5103/7489/898 5116/7508/898 -f 5111/7497/891 5110/7496/891 5102/7488/891 -f 5113/7511/899 5100/7486/899 5118/7512/899 -f 5120/7514/900 5128/7562/900 5121/7515/900 -f 5123/7517/891 5126/7520/891 5124/7518/891 -f 5123/7517/896 5127/7521/896 5126/7520/896 -f 5127/7521/896 5122/7563/896 5121/7515/896 -f 5120/7564/893 5129/7523/893 5128/7522/893 -f 5129/7523/893 5125/7565/893 5124/7524/893 -f 5129/7525/901 5127/7566/901 5123/7517/901 -f 5121/7515/897 5128/7562/897 5124/7526/897 -f 5130/7527/902 5136/7533/902 5131/7528/902 -f 5133/7530/891 5152/7567/891 5134/7531/891 -f 5152/7567/892 5137/7534/892 5134/7531/892 -f 5137/7534/892 5131/7568/892 5136/7533/892 -f 5132/7569/897 5138/7536/897 5130/7535/897 -f 5138/7536/897 5133/7570/897 5135/7537/897 -f 5137/7538/903 5152/7567/903 5133/7530/903 -f 5136/7533/896 5130/7527/896 5135/7540/896 -s 1 -f 5153/7571/904 5154/7572/905 5155/7573/906 -f 5156/7574/907 5157/7575/908 5158/7576/909 -f 5159/7577/910 5160/7578/911 5153/7571/904 -f 5161/7579/912 5162/7580/913 5156/7574/907 -f 5163/7581/914 5164/7582/915 5159/7577/910 -f 5165/7583/916 5166/7584/917 5161/7585/912 -f 5167/7586/918 5168/7587/919 5163/7581/914 -f 5169/7588/920 5170/7589/921 5165/7583/916 -f 5171/7590/922 5172/7591/923 5167/7586/918 -f 5173/7592/924 5174/7593/925 5169/7588/920 -f 5175/7594/926 5176/7595/927 5171/7590/922 -f 5173/7592/924 5177/7596/928 5178/7597/929 -f 5179/7598/930 5180/7599/931 5181/7600/932 -f 5181/7600/932 5182/7601/933 5175/7594/926 -f 5155/7573/906 5177/7596/928 5183/7602/934 -f 5158/7576/909 5184/7603/935 5179/7598/930 -f 5182/7601/933 5185/7604/936 5186/7605/937 -f 5154/7572/905 5187/7606/938 5177/7596/928 -f 5184/7603/935 5188/7607/939 5189/7608/940 -f 5154/7572/905 5190/7609/941 5191/7610/942 -f 5162/7580/913 5188/7611/939 5157/7575/908 -f 5164/7582/915 5190/7612/941 5160/7578/911 -f 5162/7580/913 5192/7613/943 5193/7614/944 -f 5164/7582/915 5194/7615/945 5195/7616/946 -f 5170/7589/921 5192/7617/943 5166/7584/917 -f 5172/7591/923 5194/7618/945 5168/7587/919 -f 5170/7589/921 5196/7619/947 5197/7620/948 -f 5176/7595/927 5198/7621/949 5172/7591/923 -f 5178/7597/929 5196/7622/947 5174/7593/925 -f 5182/7601/933 5199/7623/950 5176/7595/927 -f 5177/7596/928 5200/7624/951 5178/7597/929 -f 5184/7603/935 5185/7625/936 5180/7599/931 -f 5189/7608/940 5188/7607/939 5201/7626/952 -f 5188/7611/939 5193/7627/944 5201/7628/952 -f 5193/7614/944 5192/7613/943 5201/7629/952 -f 5192/7617/943 5197/7630/948 5201/7631/952 -f 5197/7620/948 5196/7619/947 5201/7632/952 -f 5196/7622/947 5200/7633/951 5201/7634/952 -f 5200/7624/951 5187/7635/938 5201/7636/952 -f 5187/7606/938 5191/7637/942 5201/7638/952 -f 5191/7610/942 5190/7609/941 5201/7639/952 -f 5190/7612/941 5195/7640/946 5201/7641/952 -f 5195/7616/946 5194/7615/945 5201/7642/952 -f 5194/7618/945 5198/7643/949 5201/7644/952 -f 5198/7621/949 5199/7645/950 5201/7646/952 -f 5199/7623/950 5186/7647/937 5201/7648/952 -f 5186/7605/937 5185/7604/936 5201/7649/952 -f 5185/7625/936 5189/7650/940 5201/7651/952 -f 5155/7573/906 5098/7652/953 5153/7571/904 -f 5156/7574/907 5139/7653/954 5151/7654/955 -f 5159/7577/910 5098/7655/953 5145/7656/956 -f 5161/7579/912 5151/7657/955 5150/7658/957 -f 5163/7581/914 5145/7659/956 5144/7660/958 -f 5165/7583/916 5150/7661/957 5149/7662/959 -f 5163/7581/914 5143/7663/960 5167/7586/918 -f 5165/7583/916 5099/7664/961 5169/7588/920 -f 5167/7586/918 5097/7665/962 5171/7590/922 -f 5169/7588/920 5148/7666/963 5173/7592/924 -f 5175/7594/926 5097/7667/962 5142/7668/964 -f 5173/7592/924 5147/7669/965 5183/7602/934 -f 5181/7600/932 5140/7670/966 5179/7598/930 -f 5175/7594/926 5141/7671/967 5181/7600/932 -f 5155/7573/906 5147/7672/965 5146/7673/968 -f 5158/7576/909 5140/7674/966 5139/7675/954 -f 5153/7571/904 5160/7578/911 5154/7572/905 -f 5156/7574/907 5162/7580/913 5157/7575/908 -f 5159/7577/910 5164/7582/915 5160/7578/911 -f 5161/7579/912 5166/7676/917 5162/7580/913 -f 5163/7581/914 5168/7587/919 5164/7582/915 -f 5165/7583/916 5170/7589/921 5166/7584/917 -f 5167/7586/918 5172/7591/923 5168/7587/919 -f 5169/7588/920 5174/7593/925 5170/7589/921 -f 5171/7590/922 5176/7595/927 5172/7591/923 -f 5173/7592/924 5178/7597/929 5174/7593/925 -f 5175/7594/926 5182/7601/933 5176/7595/927 -f 5173/7592/924 5183/7602/934 5177/7596/928 -f 5179/7598/930 5184/7603/935 5180/7599/931 -f 5181/7600/932 5180/7599/931 5182/7601/933 -f 5155/7573/906 5154/7572/905 5177/7596/928 -f 5158/7576/909 5157/7575/908 5184/7603/935 -f 5182/7601/933 5180/7599/931 5185/7604/936 -f 5154/7572/905 5191/7637/942 5187/7606/938 -f 5184/7603/935 5157/7575/908 5188/7607/939 -f 5154/7572/905 5160/7578/911 5190/7609/941 -f 5162/7580/913 5193/7627/944 5188/7611/939 -f 5164/7582/915 5195/7640/946 5190/7612/941 -f 5162/7580/913 5166/7676/917 5192/7613/943 -f 5164/7582/915 5168/7587/919 5194/7615/945 -f 5170/7589/921 5197/7630/948 5192/7617/943 -f 5172/7591/923 5198/7643/949 5194/7618/945 -f 5170/7589/921 5174/7593/925 5196/7619/947 -f 5176/7595/927 5199/7645/950 5198/7621/949 -f 5178/7597/929 5200/7633/951 5196/7622/947 -f 5182/7601/933 5186/7647/937 5199/7623/950 -f 5177/7596/928 5187/7635/938 5200/7624/951 -f 5184/7603/935 5189/7650/940 5185/7625/936 -f 5155/7573/906 5146/7677/968 5098/7652/953 -f 5156/7574/907 5158/7576/909 5139/7653/954 -f 5159/7577/910 5153/7571/904 5098/7655/953 -f 5161/7579/912 5156/7574/907 5151/7657/955 -f 5163/7581/914 5159/7577/910 5145/7659/956 -f 5165/7583/916 5161/7585/912 5150/7661/957 -f 5163/7581/914 5144/7678/958 5143/7663/960 -f 5165/7583/916 5149/7679/959 5099/7664/961 -f 5167/7586/918 5143/7680/960 5097/7665/962 -f 5169/7588/920 5099/7681/961 5148/7666/963 -f 5175/7594/926 5171/7590/922 5097/7667/962 -f 5173/7592/924 5148/7682/963 5147/7669/965 -f 5181/7600/932 5141/7683/967 5140/7670/966 -f 5175/7594/926 5142/7684/964 5141/7671/967 -f 5155/7573/906 5183/7602/934 5147/7672/965 -f 5158/7576/909 5179/7598/930 5140/7674/966 -o Atlas_Missile -v -1.154849 5.312499 -0.478354 -v -0.795495 5.312499 -0.795495 -v -0.883883 5.312499 -0.883883 -v -1.125000 5.312499 0.000000 -v -1.154849 5.312499 0.478354 -v -1.039364 5.312499 0.430519 -v -1.250000 5.312499 0.000000 -v -1.039364 5.312499 -0.430519 -v 0.216506 8.812498 -1.125000 -v 0.000000 9.687498 -1.125000 -v 0.180586 8.812498 -1.089079 -v -0.125000 5.312499 -1.466506 -v 0.125000 5.312499 -1.466506 -v 0.000000 5.312499 -1.500000 -v -0.795495 5.312499 0.795495 -v -0.883883 5.312499 0.883883 -v -0.430519 5.312499 1.039364 -v 0.000000 5.312499 1.250000 -v -0.478354 5.312499 1.154849 -v 0.478354 5.312499 1.154849 -v 0.000000 5.312499 1.125000 -v 0.795495 5.312499 0.795495 -v 0.430519 5.312499 1.039364 -v 1.154849 5.312499 0.478354 -v 0.883883 5.312499 0.883884 -v 1.039364 5.312499 0.430519 -v 1.250000 5.312499 0.000000 -v 1.125000 5.312499 0.000000 -v 1.154849 5.312499 -0.478355 -v 0.795495 5.312499 -0.795495 -v 1.039364 5.312499 -0.430519 -v 0.478354 5.312499 -1.154849 -v 0.883884 5.312499 -0.883883 -v -0.478354 5.312499 -1.154849 -v -0.430519 5.312499 -1.039364 -v 0.000000 5.312499 -1.250000 -v 0.000000 5.312499 -1.125000 -v 0.430519 5.312499 -1.039364 -v 0.883883 2.687500 0.883884 -v 0.687126 2.687500 1.015353 -v 1.154849 2.687500 0.478354 -v 0.750000 2.687500 -1.250000 -v 0.687126 2.687500 -1.015352 -v 0.649519 2.687500 -1.625000 -v -0.649519 2.687500 -1.625000 -v 0.000000 2.687500 -2.000000 -v 0.375000 2.687500 -1.899519 -v -0.375000 2.687500 -1.899519 -v -0.750000 2.687500 -1.250000 -v -0.687126 2.687500 -1.015352 -v 0.000000 2.000000 -1.750000 -v 0.250000 2.000000 -1.683013 -v -0.250000 2.000000 -1.683013 -v 0.000000 2.000000 -0.750000 -v -0.250000 2.000000 -0.816987 -v 0.250000 2.000000 -0.816987 -v 0.500000 2.000000 -1.250000 -v 0.433013 2.000000 -1.000000 -v 0.433013 2.000000 -1.500000 -v -0.500000 2.000000 -1.250000 -v -0.433013 2.000000 -1.500000 -v -0.433013 2.000000 -1.000000 -v 0.000000 2.000000 -0.500000 -v 0.250000 2.000000 -0.433013 -v -0.250000 2.000000 -0.433013 -v 0.000000 2.000000 0.500000 -v -0.250000 2.000000 0.433013 -v 0.250000 2.000000 0.433013 -v 0.500000 2.000000 0.000000 -v 0.433013 2.000000 0.250000 -v 0.433013 2.000000 -0.250000 -v -0.500000 2.000000 -0.000000 -v -0.433013 2.000000 -0.250000 -v -0.433013 2.000000 0.250000 -v 1.250000 2.687500 0.000000 -v 1.154849 2.687500 -0.478355 -v -1.250000 2.687500 0.000000 -v -1.154849 2.687500 -0.478354 -v -1.154849 2.687500 0.478354 -v -0.883883 2.687500 -0.883883 -v 0.883884 2.687500 -0.883883 -v -0.125000 5.376628 -1.642699 -v 0.125000 5.376628 -1.642699 -v -0.216506 8.812498 1.125000 -v 0.000000 9.687498 1.125000 -v -0.180586 8.812498 1.089079 -v -0.750000 2.687500 1.250000 -v -0.687126 2.687500 1.015352 -v -0.649519 2.687500 1.625000 -v 0.649519 2.687500 1.625000 -v 0.000000 2.687500 2.000000 -v -0.375000 2.687500 1.899519 -v 0.375000 2.687500 1.899519 -v 0.750000 2.687500 1.250000 -v 0.000000 2.000000 1.750000 -v -0.250000 2.000000 1.683013 -v 0.250000 2.000000 1.683013 -v 0.000000 2.000000 0.750000 -v 0.250000 2.000000 0.816987 -v -0.250000 2.000000 0.816987 -v -0.500000 2.000000 1.250000 -v -0.433013 2.000000 1.000000 -v -0.433013 2.000000 1.500000 -v 0.500000 2.000000 1.250000 -v 0.433013 2.000000 1.500000 -v 0.433013 2.000000 1.000000 -v -0.883883 2.687500 0.883883 -v -0.478354 4.249999 -1.154849 -v 0.000000 12.812498 -1.125000 -v -0.430519 12.812498 -1.039364 -v 1.039364 12.812498 0.430519 -v -1.125000 12.812498 0.000000 -v 1.125000 12.812498 0.000000 -v -1.039364 12.812498 0.430519 -v 1.039364 12.812498 -0.430519 -v -0.795495 12.812498 0.795496 -v 0.795495 12.812498 -0.795494 -v -0.430519 12.812498 1.039364 -v 0.430519 12.812498 -1.039364 -v 0.000000 12.812498 1.125000 -v 0.430519 12.812498 1.039364 -v -0.795495 12.812498 -0.795494 -v 0.795495 12.812498 0.795495 -v -1.039364 12.812498 -0.430519 -v 0.562500 15.312498 0.000001 -v 0.519682 15.312498 -0.215259 -v 0.397748 15.312498 -0.397747 -v 0.215259 15.312498 -0.519681 -v 0.000000 15.312498 -0.562499 -v -0.215259 15.312498 -0.519681 -v -0.397748 15.312498 -0.397747 -v -0.519682 15.312498 -0.215258 -v -0.519682 15.312498 0.215260 -v -0.562500 15.312498 0.000001 -v -0.215259 15.312498 0.519683 -v -0.397748 15.312498 0.397749 -v 0.000000 15.312498 0.562501 -v 0.215259 15.312498 0.519683 -v 0.397747 15.312498 0.397749 -v 0.519682 15.312498 0.215261 -v 0.000000 16.437496 0.000001 -v 0.000000 4.249999 -1.750000 -v 0.250000 4.249999 -1.683013 -v -0.250000 4.249999 -1.683013 -v -0.433013 4.249999 -1.500000 -v -0.500000 4.249999 -1.250000 -v 0.433013 4.249999 -1.500000 -v 0.500000 4.249999 -1.250000 -v 0.478354 4.249999 -1.154849 -v 0.250000 5.312499 -1.250000 -v 0.216506 5.312499 -1.125000 -v 0.216506 5.312499 -1.375000 -v -0.216506 5.312499 -1.375000 -v -0.250000 5.312499 -1.250000 -v -0.216506 5.312499 -1.125000 -v -0.180586 5.312499 -1.089079 -v -0.216506 8.812498 -1.125000 -v -0.250000 8.812498 -1.250000 -v 0.180586 5.312499 -1.089079 -v 0.216506 8.812498 -1.375000 -v 0.250000 8.812498 -1.250000 -v -0.216506 8.812498 -1.375000 -v -0.125000 8.812498 -1.466506 -v 0.125000 8.812498 -1.466506 -v -0.180586 8.812498 -1.089079 -v 0.478354 4.249999 1.154849 -v 0.324760 2.687500 -1.437500 -v 0.187500 2.687500 -1.574759 -v 0.375000 2.687500 -1.250000 -v 0.324760 2.687500 -1.062500 -v 0.187500 2.687500 -0.925241 -v 0.000000 2.687500 -0.875000 -v 0.500000 2.375000 0.000000 -v 0.433013 2.375000 -0.250000 -v 0.000000 2.375000 0.500000 -v 0.250000 2.375000 0.433013 -v -0.500000 2.375000 0.000000 -v -0.433013 2.375000 0.250000 -v 0.250000 2.375000 -0.433013 -v 0.000000 2.375000 -0.500000 -v -0.250000 2.375000 -0.433013 -v 0.433013 2.375000 0.250000 -v -0.250000 2.375000 0.433013 -v -0.433013 2.375000 -0.250000 -v 0.324760 2.687500 -0.187500 -v 0.375000 2.687500 0.000000 -v 0.187500 2.687500 -0.324759 -v 0.000000 2.687500 -0.375000 -v -0.187500 2.687500 -0.324759 -v -0.324760 2.687500 -0.187500 -v -0.375000 2.687500 0.000000 -v -0.324760 2.687500 0.187500 -v -0.187500 2.687500 0.324759 -v 0.000000 2.687500 0.375000 -v 0.187500 2.687500 0.324759 -v 0.324760 2.687500 0.187500 -v 0.000000 2.687500 -1.625000 -v -0.187500 2.687500 -1.574759 -v -0.324760 2.687500 -1.437500 -v -0.375000 2.687500 -1.250000 -v -0.324760 2.687500 -1.062500 -v -0.187500 2.687500 -0.925241 -v 0.062500 5.687499 -1.466506 -v -0.062500 5.687499 -1.466506 -v 0.000000 4.249999 1.750000 -v -0.250000 4.249999 1.683013 -v 0.250000 4.249999 1.683013 -v 0.433013 4.249999 1.500000 -v 0.500000 4.249999 1.250000 -v -0.433013 4.249999 1.500000 -v -0.500000 4.249999 1.250000 -v -0.478354 4.249999 1.154849 -v -0.250000 5.312499 1.250000 -v -0.216506 5.312499 1.125000 -v -0.216506 5.312499 1.375000 -v 0.000000 5.312499 1.500000 -v 0.125000 5.312499 1.466506 -v 0.216506 5.312499 1.375000 -v 0.250000 5.312499 1.250000 -v 0.216506 5.312499 1.125000 -v 0.218750 5.437499 1.722636 -v -0.218750 6.562499 1.722636 -v -0.218750 5.437499 1.722636 -v 0.125000 7.437499 1.466506 -v -0.125000 7.437499 1.466506 -v 0.250000 7.437499 1.250000 -v 0.216506 7.437499 1.375000 -v 0.378886 6.562499 1.500000 -v -0.378886 5.312499 1.500000 -v 0.378886 6.562499 1.049635 -v 0.216506 7.437499 1.125000 -v 0.180586 7.437499 1.089079 -v 0.218750 6.562499 1.722636 -v -0.250000 8.812498 1.250000 -v -0.216506 8.812498 1.375000 -v -0.125000 8.812498 1.466506 -v 0.125000 8.812498 1.466506 -v 0.216506 8.812498 1.375000 -v 0.250000 8.812498 1.250000 -v 0.216506 8.812498 1.125000 -v 0.180586 8.812498 1.089079 -v -0.324760 2.687500 1.437500 -v -0.187500 2.687500 1.574759 -v -0.324760 2.687500 1.062500 -v -0.375000 2.687500 1.250000 -v -0.187500 2.687500 0.925241 -v 0.000000 2.687500 0.875000 -v 0.000000 2.687500 1.625000 -v 0.187500 2.687500 1.574759 -v 0.324759 2.687500 1.437500 -v 0.375000 2.687500 1.250000 -v 0.324759 2.687500 1.062500 -v 0.187500 2.687500 0.925241 -v -0.378886 6.562499 1.500000 -v -0.216506 7.437499 1.375000 -v -0.378886 5.312499 1.049635 -v 0.378886 5.312499 1.049635 -v 0.378886 5.312499 1.500000 -v -0.250000 7.437499 1.250000 -v -0.378886 6.562499 1.049635 -v -0.216506 7.437499 1.125000 -v -0.180586 7.437499 1.089079 -v 1.140000 12.093748 0.000000 -v 1.053223 10.124998 -0.436259 -v 1.053223 12.093748 -0.436259 -v 0.806102 12.093748 0.806102 -v 1.053223 10.124998 0.436259 -v 1.053223 12.093748 0.436259 -v -1.140000 12.093748 0.000000 -v -1.053223 10.124998 0.436259 -v -1.053223 12.093748 0.436259 -v -0.806102 12.093748 -0.806102 -v -1.053223 10.124998 -0.436259 -v -1.053223 12.093748 -0.436259 -v 0.806102 10.124998 -0.806102 -v 0.806102 12.093748 -0.806102 -v 1.140000 10.124998 0.000000 -v -0.806102 10.124998 0.806102 -v -0.806102 12.093748 0.806102 -v -1.140000 10.124998 0.000000 -v 0.145625 8.406248 1.475167 -v 0.225166 7.874999 1.380000 -v 0.225166 8.406248 1.380000 -v -0.145625 7.874999 1.475167 -v -0.145625 8.406248 1.475167 -v -0.225167 8.406248 1.380000 -v -0.145625 8.406248 -1.475167 -v -0.225167 7.874999 -1.380000 -v -0.225167 8.406248 -1.380000 -v 0.145625 7.874999 -1.475167 -v 0.145625 8.406248 -1.475167 -v 0.225166 8.406248 -1.380000 -v -0.125000 5.312499 1.466506 -v 0.806102 10.124998 0.806102 -v -0.806102 10.124998 -0.806102 -v 0.145625 7.874999 1.475167 -v -0.225167 7.874999 1.380000 -v -0.145625 7.874999 -1.475167 -v 0.225166 7.874999 -1.380000 -v -0.180586 5.312499 1.089079 -v 0.180586 5.312499 1.089079 -vt 0.107143 0.186667 -vt 0.071429 0.195556 -vt 0.071429 0.186667 -vt 0.142857 0.195556 -vt 0.178571 0.186667 -vt 0.178571 0.195556 -vt 0.142857 0.186667 -vt 0.107143 0.195556 -vt 0.576531 0.622222 -vt 0.576531 0.684444 -vt 0.571429 0.622222 -vt 0.790816 0.577778 -vt 0.770408 0.577778 -vt 0.780612 0.573333 -vt 0.214286 0.195556 -vt 0.214286 0.186667 -vt 0.250000 0.195556 -vt 0.285714 0.186667 -vt 0.250000 0.186667 -vt 0.321429 0.186667 -vt 0.285714 0.195556 -vt 0.357143 0.195556 -vt 0.321429 0.195556 -vt 0.392857 0.186667 -vt 0.357143 0.186667 -vt 0.392857 0.195556 -vt 0.428571 0.186667 -vt 0.428571 0.195556 -vt 0.464286 0.186667 -vt 0.500000 0.195556 -vt 0.464286 0.195556 -vt 0.535714 0.186667 -vt 0.500000 0.186667 -vt 0.035714 0.186667 -vt 0.035714 0.195556 -vt 0.000000 0.186667 -vt 0.571429 0.195556 -vt 0.535714 0.195556 -vt 0.744173 0.160632 -vt 0.733441 0.146640 -vt 0.777277 0.179900 -vt 0.918367 0.151111 -vt 0.899213 0.146640 -vt 0.948980 0.143966 -vt 0.948980 0.051590 -vt 0.979592 0.097778 -vt 0.971389 0.124444 -vt 0.971389 0.071111 -vt 0.918367 0.044444 -vt 0.899213 0.048915 -vt 0.795918 0.320000 -vt 0.801387 0.337778 -vt 0.801387 0.302222 -vt 0.877551 0.320000 -vt 0.872083 0.302222 -vt 0.872083 0.337778 -vt 0.836735 0.355556 -vt 0.857143 0.350792 -vt 0.816327 0.350792 -vt 0.836735 0.284444 -vt 0.816327 0.289208 -vt 0.857143 0.289208 -vt 0.795918 0.320000 -vt 0.801387 0.337778 -vt 0.801387 0.302222 -vt 0.877551 0.320000 -vt 0.872083 0.302222 -vt 0.872083 0.337778 -vt 0.836735 0.355556 -vt 0.857143 0.350792 -vt 0.816327 0.350792 -vt 0.836735 0.284444 -vt 0.816327 0.289208 -vt 0.857143 0.289208 -vt 0.816327 0.186667 -vt 0.855376 0.179900 -vt 0.816327 0.008889 -vt 0.855376 0.015655 -vt 0.777277 0.015655 -vt 0.888480 0.034924 -vt 0.888480 0.160632 -vt 0.790816 0.591111 -vt 0.770408 0.591111 -vt 0.668367 0.622222 -vt 0.668367 0.684444 -vt 0.663265 0.622222 -vt 0.714286 0.044444 -vt 0.733441 0.048915 -vt 0.683674 0.051590 -vt 0.683674 0.143966 -vt 0.653061 0.097778 -vt 0.661264 0.071111 -vt 0.661264 0.124444 -vt 0.714286 0.151111 -vt 0.877551 0.320000 -vt 0.872083 0.302222 -vt 0.872083 0.337778 -vt 0.795918 0.320000 -vt 0.801387 0.337778 -vt 0.801387 0.302222 -vt 0.836735 0.284444 -vt 0.816327 0.289208 -vt 0.857143 0.289208 -vt 0.836735 0.355556 -vt 0.857143 0.350792 -vt 0.816327 0.350792 -vt 0.744173 0.034924 -vt 0.000000 0.195556 -vt 0.571429 0.186667 -vt 0.040816 0.111111 -vt 0.061224 -0.000000 -vt 0.081633 -0.000000 -vt -0.000000 0.728889 -vt 0.035714 0.728889 -vt 0.392857 0.728889 -vt 0.142857 0.728889 -vt 0.428571 0.728889 -vt 0.178571 0.728889 -vt 0.464286 0.728889 -vt 0.214286 0.728889 -vt 0.500000 0.728889 -vt 0.250000 0.728889 -vt 0.535714 0.728889 -vt 0.571429 0.728889 -vt 0.285714 0.728889 -vt 0.321429 0.728889 -vt 0.071429 0.728889 -vt 0.357143 0.728889 -vt 0.107143 0.728889 -vt 0.438776 0.911111 -vt 0.474490 0.911111 -vt 0.510204 0.911111 -vt 0.545918 0.911111 -vt 0.010204 0.911111 -vt 0.045918 0.911111 -vt 0.081633 0.911111 -vt 0.117347 0.911111 -vt 0.168367 0.911111 -vt 0.153061 0.911111 -vt 0.188776 0.911111 -vt 0.239796 0.911111 -vt 0.224490 0.911111 -vt 0.260204 0.911111 -vt 0.295918 0.911111 -vt 0.331633 0.911111 -vt 0.367347 0.911111 -vt 0.403061 0.911111 -vt 0.489796 0.911111 -vt 0.482143 1.000000 -vt 0.232143 1.000000 -vt 0.525510 0.911111 -vt 0.517857 1.000000 -vt 0.275510 0.911111 -vt 0.267857 1.000000 -vt 0.025510 0.911111 -vt 0.017857 1.000000 -vt 0.561224 0.911111 -vt 0.553571 1.000000 -vt 0.311224 0.911111 -vt 0.303571 1.000000 -vt 0.061224 0.911111 -vt 0.053571 1.000000 -vt 0.346939 0.911111 -vt 0.339286 1.000000 -vt 0.096939 0.911111 -vt 0.089286 1.000000 -vt 0.382653 0.911111 -vt 0.375000 1.000000 -vt 0.132653 0.911111 -vt 0.125000 1.000000 -vt 0.418367 0.911111 -vt 0.410714 1.000000 -vt 0.160714 1.000000 -vt 0.454082 0.911111 -vt 0.446429 1.000000 -vt 0.204082 0.911111 -vt 0.196429 1.000000 -vt 0.653061 0.186667 -vt 0.678571 0.297778 -vt 0.658163 0.297778 -vt 0.683673 0.186667 -vt 0.709184 0.297778 -vt 0.688776 0.297778 -vt 0.714286 0.186667 -vt 0.739796 0.297778 -vt 0.719388 0.297778 -vt 0.744898 0.186667 -vt 0.770408 0.297778 -vt 0.750000 0.297778 -vt 0.785714 0.297778 -vt 0.775510 0.186667 -vt 0.795918 0.186667 -vt 0.622449 0.186667 -vt 0.647959 0.297778 -vt 0.627551 0.297778 -vt 0.591837 0.186667 -vt 0.617347 0.297778 -vt 0.596939 0.297778 -vt 0.581633 0.297778 -vt 0.591837 0.297778 -vt 0.591837 0.373333 -vt 0.581633 0.373333 -vt 0.602041 0.373333 -vt 0.632653 0.373333 -vt 0.693878 0.373333 -vt 0.673469 0.373333 -vt 0.724490 0.373333 -vt 0.755102 0.373333 -vt 0.775510 0.373333 -vt 0.785714 0.373333 -vt 0.663265 0.373333 -vt 0.658163 0.622222 -vt 0.658163 0.373333 -vt 0.647959 0.622222 -vt 0.647959 0.373333 -vt 0.576531 0.373333 -vt 0.571429 0.373333 -vt 0.607143 0.373333 -vt 0.596939 0.622222 -vt 0.596939 0.373333 -vt 0.586735 0.622222 -vt 0.586735 0.373333 -vt 0.637755 0.622222 -vt 0.637755 0.373333 -vt 0.627551 0.622222 -vt 0.627551 0.373333 -vt 0.581633 0.688889 -vt 0.591837 0.688889 -vt 0.607143 0.622222 -vt 0.602041 0.688889 -vt 0.632653 0.688889 -vt 0.642857 0.688889 -vt 0.653061 0.688889 -vt 0.663265 0.622222 -vt 0.658163 0.684444 -vt 0.612245 0.111111 -vt 0.571429 0.000000 -vt 0.591837 0.000000 -vt 0.571429 0.186667 -vt 0.612245 0.186667 -vt 0.653061 0.186667 -vt 0.040816 0.186667 -vt 0.081633 0.186667 -vt 0.122449 -0.000000 -vt 0.163265 0.000000 -vt 0.122449 0.186667 -vt 0.204082 0.000000 -vt 0.163265 0.186667 -vt 0.244898 -0.000000 -vt 0.204082 0.186667 -vt 0.367347 0.186667 -vt 0.326531 0.186667 -vt 0.367347 0.111111 -vt 0.408163 0.186667 -vt 0.387755 -0.000000 -vt 0.408163 -0.000000 -vt 0.448980 0.000000 -vt 0.489796 -0.000000 -vt 0.448980 0.186667 -vt 0.530612 -0.000000 -vt 0.489796 0.186667 -vt 0.530612 0.186667 -vt 0.948980 0.235556 -vt 0.964286 0.186667 -vt 0.964286 0.235556 -vt 0.918367 0.186667 -vt 0.933673 0.235556 -vt 0.918367 0.235556 -vt 0.887755 0.186667 -vt 0.903061 0.235556 -vt 0.887755 0.235556 -vt 0.903061 0.186667 -vt 0.933673 0.186667 -vt 0.933673 0.262222 -vt 0.948980 0.235556 -vt 0.948980 0.262222 -vt 0.887755 0.262222 -vt 0.903061 0.235556 -vt 0.903061 0.262222 -vt 0.841837 0.262222 -vt 0.857143 0.235556 -vt 0.857143 0.262222 -vt 0.964286 0.235556 -vt 0.964286 0.262222 -vt 0.795918 0.262222 -vt 0.811224 0.235556 -vt 0.811224 0.262222 -vt 0.918367 0.235556 -vt 0.918367 0.262222 -vt 0.872449 0.235556 -vt 0.872449 0.262222 -vt 0.979592 0.235556 -vt 0.979592 0.262222 -vt 0.826531 0.235556 -vt 0.826531 0.262222 -vt 0.933673 0.235556 -vt 0.887755 0.235556 -vt 0.841837 0.235556 -vt 0.948980 0.284444 -vt 0.933673 0.284444 -vt 0.964286 0.284444 -vt 0.979592 0.284444 -vt 0.811224 0.284444 -vt 0.795918 0.284444 -vt 0.826531 0.284444 -vt 0.841837 0.284444 -vt 0.857143 0.284444 -vt 0.872449 0.284444 -vt 0.887755 0.284444 -vt 0.903061 0.284444 -vt 0.918367 0.284444 -vt 0.979592 0.235556 -vt 0.795918 0.186667 -vt 0.811224 0.235556 -vt 0.795918 0.235556 -vt 0.811224 0.186667 -vt 0.826531 0.235556 -vt 0.826531 0.186667 -vt 0.841837 0.235556 -vt 0.841837 0.186667 -vt 0.857143 0.235556 -vt 0.857143 0.186667 -vt 0.872449 0.235556 -vt 0.872449 0.186667 -vt 0.770408 0.617778 -vt 0.755102 0.591111 -vt 0.806122 0.591111 -vt 0.790816 0.617778 -vt 0.775510 0.617778 -vt 0.785714 0.617778 -vt 0.617347 0.688889 -vt 0.653061 0.186667 -vt 0.678571 0.297778 -vt 0.658163 0.297778 -vt 0.683673 0.186667 -vt 0.709184 0.297778 -vt 0.688776 0.297778 -vt 0.714286 0.186667 -vt 0.739796 0.297778 -vt 0.719388 0.297778 -vt 0.744898 0.186667 -vt 0.770408 0.297778 -vt 0.750000 0.297778 -vt 0.785714 0.297778 -vt 0.775510 0.186667 -vt 0.795918 0.186667 -vt 0.622449 0.186667 -vt 0.647959 0.297778 -vt 0.627551 0.297778 -vt 0.591837 0.186667 -vt 0.617347 0.297778 -vt 0.596939 0.297778 -vt 0.581633 0.297778 -vt 0.591837 0.297778 -vt 0.591837 0.373333 -vt 0.581633 0.373333 -vt 0.602041 0.373333 -vt 0.632653 0.373333 -vt 0.693878 0.373333 -vt 0.673469 0.373333 -vt 0.724490 0.373333 -vt 0.755102 0.373333 -vt 0.775510 0.373333 -vt 0.785714 0.373333 -vt 0.760204 0.382222 -vt 0.724490 0.462222 -vt 0.724490 0.382222 -vt 0.760204 0.524444 -vt 0.724490 0.524444 -vt 0.798469 0.524444 -vt 0.785714 0.524444 -vt 0.780612 0.462222 -vt 0.755102 0.555556 -vt 0.806122 0.573333 -vt 0.765306 0.573333 -vt 0.816327 0.462222 -vt 0.811224 0.524444 -vt 0.816327 0.524444 -vt 0.765306 0.524444 -vt 0.760204 0.462222 -vt 0.678571 0.622222 -vt 0.673469 0.688889 -vt 0.688776 0.622222 -vt 0.683673 0.688889 -vt 0.698980 0.622222 -vt 0.693878 0.688889 -vt 0.719388 0.622222 -vt 0.729592 0.622222 -vt 0.724490 0.688889 -vt 0.739796 0.622222 -vt 0.734694 0.688889 -vt 0.750000 0.622222 -vt 0.744898 0.688889 -vt 0.755102 0.622222 -vt 0.750000 0.684444 -vt 0.857143 0.235556 -vt 0.872449 0.186667 -vt 0.872449 0.235556 -vt 0.826531 0.235556 -vt 0.841837 0.186667 -vt 0.841837 0.235556 -vt 0.795918 0.186667 -vt 0.811224 0.235556 -vt 0.795918 0.235556 -vt 0.811224 0.186667 -vt 0.887755 0.235556 -vt 0.887755 0.186667 -vt 0.903061 0.235556 -vt 0.903061 0.186667 -vt 0.918367 0.235556 -vt 0.933673 0.186667 -vt 0.933673 0.235556 -vt 0.948980 0.235556 -vt 0.948980 0.186667 -vt 0.964286 0.235556 -vt 0.964286 0.186667 -vt 0.979592 0.235556 -vt 0.709184 0.688889 -vt 0.704082 0.462222 -vt 0.719388 0.524444 -vt 0.704082 0.524444 -vt 0.285714 0.111111 -vt 0.285714 0.186667 -vt 0.244898 0.186667 -vt 0.265306 0.000000 -vt 0.668367 0.373333 -vt 0.704082 0.373333 -vt 0.816327 0.373333 -vt 0.780612 0.373333 -vt 0.686224 0.524444 -vt 0.698980 0.524444 -vt 0.668367 0.462222 -vt 0.673469 0.524444 -vt 0.668367 0.524444 -vt 0.750000 0.524444 -vt 0.739796 0.524444 -vt 0.729592 0.524444 -vt 0.719388 0.524444 -vt 0.678571 0.524444 -vt 0.668367 0.524444 -vt 0.663265 0.524444 -vt 0.816327 0.524444 -vt 0.755102 0.524444 -vt 0.688776 0.524444 -vt 0.714286 0.968889 -vt 0.785714 0.688889 -vt 0.785714 0.968889 -vt 0.571429 0.968889 -vt 0.642857 0.688889 -vt 0.642857 0.968889 -vt 0.714286 0.968889 -vt 0.785714 0.688889 -vt 0.785714 0.968889 -vt 0.571429 0.968889 -vt 0.642857 0.688889 -vt 0.642857 0.968889 -vt 0.857143 0.688889 -vt 0.857143 0.968889 -vt 0.714286 0.688889 -vt 0.857143 0.688889 -vt 0.857143 0.968889 -vt 0.714286 0.688889 -vt 0.923469 0.764444 -vt 0.943878 0.688889 -vt 0.943878 0.764444 -vt 0.877551 0.688889 -vt 0.877551 0.764444 -vt 0.857143 0.764444 -vt 0.923469 0.764444 -vt 0.943878 0.688889 -vt 0.943878 0.764444 -vt 0.877551 0.688889 -vt 0.877551 0.764444 -vt 0.857143 0.764444 -vt 0.775510 0.297778 -vt 0.571429 0.186667 -vt 0.612245 0.373333 -vt 0.642857 0.373333 -vt 0.704082 0.373333 -vt 0.663265 0.373333 -vt 0.734694 0.373333 -vt 0.765306 0.373333 -vt 0.948980 0.186667 -vt 0.795918 0.235556 -vt 0.979592 0.186667 -vt 0.775510 0.297778 -vt 0.571429 0.186667 -vt 0.612245 0.373333 -vt 0.642857 0.373333 -vt 0.704082 0.373333 -vt 0.663265 0.373333 -vt 0.734694 0.373333 -vt 0.765306 0.373333 -vt 0.816327 0.555556 -vt 0.780612 0.524444 -vt 0.857143 0.186667 -vt 0.826531 0.186667 -vt 0.918367 0.186667 -vt 0.979592 0.186667 -vt 0.755102 0.524444 -vt 0.698980 0.524444 -vt 0.571429 0.688889 -vt 0.571429 0.688889 -vt 0.923469 0.688889 -vt 0.857143 0.688889 -vt 0.923469 0.688889 -vt 0.857143 0.688889 -vn 0.0000 1.0000 -0.0000 -vn 0.6965 0.1723 0.6965 vn 0.0000 -1.0000 0.0000 -vn 0.0000 -0.9397 -0.3420 -vn -0.6965 0.1723 -0.6965 -vn -0.5144 -0.0000 -0.8575 -vn -0.5556 0.0000 -0.8315 -vn -0.7071 0.0000 -0.7071 +vn 0.0000 0.0000 1.0000 vn 0.0000 0.0000 -1.0000 -vn -0.3827 0.0000 -0.9239 -vn 1.0000 -0.0000 0.0000 -vn 0.9239 -0.0000 0.3827 -vn -0.9239 -0.0000 0.3827 -vn -1.0000 -0.0000 0.0000 -vn 0.9239 0.0000 -0.3827 -vn -0.7071 -0.0000 0.7071 -vn 0.7071 0.0000 -0.7071 -vn -0.3827 -0.0000 0.9239 -vn 0.3827 0.0000 -0.9239 -vn -0.0000 -0.0000 1.0000 -vn 0.3827 -0.0000 0.9239 -vn 0.7071 -0.0000 0.7071 -vn -0.9239 0.0000 -0.3827 -vn 0.9013 0.2195 -0.3734 -vn 0.9436 0.3312 -0.0000 -vn 0.9756 0.2195 -0.0000 -vn 0.6899 0.2195 -0.6899 -vn 0.8717 0.3312 -0.3611 -vn 0.3734 0.2195 -0.9013 -vn 0.6672 0.3312 -0.6672 -vn 0.0000 0.2195 -0.9756 -vn 0.3611 0.3312 -0.8717 -vn -0.3733 0.2195 -0.9013 -vn -0.0000 0.3312 -0.9436 -vn -0.6899 0.2195 -0.6899 -vn -0.3611 0.3312 -0.8717 -vn -0.9013 0.2195 -0.3733 -vn -0.6672 0.3312 -0.6672 -vn -0.9756 0.2195 0.0000 -vn -0.8717 0.3312 -0.3611 -vn -0.8717 0.3312 0.3611 -vn -0.9436 0.3312 -0.0000 -vn -0.6899 0.2195 0.6899 -vn -0.9013 0.2195 0.3733 -vn -0.3611 0.3312 0.8717 -vn -0.6672 0.3312 0.6672 -vn -0.0000 0.2195 0.9756 -vn -0.3734 0.2195 0.9013 -vn 0.3734 0.2195 0.9013 -vn -0.0000 0.3312 0.9436 -vn 0.6899 0.2195 0.6899 -vn 0.3611 0.3312 0.8717 -vn 0.9013 0.2195 0.3733 -vn 0.6672 0.3312 0.6672 -vn 0.8717 0.3312 0.3611 -vn 0.4937 0.1580 -0.8551 -vn -0.0000 0.1925 -0.9813 -vn 0.4906 0.1925 -0.8498 -vn -0.0000 0.1580 -0.9874 -vn -0.4906 0.1925 -0.8498 -vn -0.4937 0.1580 -0.8551 -vn -0.8498 0.1925 -0.4906 -vn -0.8551 0.1580 -0.4937 -vn -0.9811 0.1926 -0.0186 -vn -0.9568 0.1891 0.2208 -vn -0.9876 0.1569 -0.0007 -vn -0.9549 0.1504 0.2559 -vn 0.8551 0.1580 -0.4937 -vn 0.8498 0.1925 -0.4906 -vn 0.9876 0.1569 -0.0007 -vn 0.9811 0.1926 -0.0186 -vn 0.9568 0.1891 0.2208 -vn 0.9730 0.2306 -0.0011 -vn 0.9412 0.2249 0.2522 -vn 0.8430 0.2290 -0.4867 -vn -0.0000 0.2290 -0.9734 -vn -0.4867 0.2290 -0.8430 -vn -0.8430 0.2290 -0.4867 -vn -0.9730 0.2306 -0.0011 -vn -0.9412 0.2249 0.2522 -vn -0.8658 0.1046 0.4893 -vn -0.8660 -0.0000 0.5000 -vn -0.9905 0.1370 -0.0100 -vn 0.8660 0.0000 0.5000 -vn 0.8497 0.1670 -0.5001 -vn 0.8660 0.0000 -0.5000 -vn 0.9905 0.1370 -0.0100 -vn 0.9043 0.0825 0.4189 -vn 0.8660 0.0001 0.5000 -vn -0.8497 0.1670 -0.5001 -vn -0.8660 0.0000 -0.5000 -vn -0.3745 0.1870 -0.9082 -vn -0.0746 0.6706 -0.7381 -vn 0.3745 0.1870 -0.9082 -vn -0.7043 0.0895 0.7043 -vn 0.5144 -0.0000 -0.8575 -vn 0.5556 -0.0000 -0.8315 -vn 0.1951 0.0000 -0.9808 -vn -0.1951 -0.0000 -0.9808 -vn 0.1951 -0.0000 0.9808 -vn 0.5144 0.0000 0.8575 -vn 0.5556 0.0000 0.8315 -vn 0.8521 0.1789 -0.4919 -vn 0.4919 0.1789 -0.8521 -vn 0.8521 0.1789 0.4919 -vn 0.9839 0.1789 0.0000 -vn 0.0000 0.1789 0.9839 -vn 0.4919 0.1789 0.8521 -vn 0.5000 -0.0000 0.8660 -vn 0.5000 0.0000 -0.8660 -vn -0.5000 0.0000 -0.8660 -vn -0.5000 -0.0000 0.8660 -vn 0.9285 0.3714 0.0000 -vn 0.8041 0.3714 -0.4642 -vn 0.4642 0.3714 -0.8041 -vn -0.0000 0.3714 -0.9285 -vn -0.4642 0.3714 -0.8041 -vn -0.8041 0.3714 -0.4642 -vn -0.9285 0.3714 -0.0000 -vn -0.8041 0.3714 0.4642 -vn -0.4642 0.3714 0.8041 -vn -0.0000 0.3714 0.9285 -vn 0.4642 0.3714 0.8041 -vn 0.8041 0.3714 0.4642 -vn -0.0000 0.1789 -0.9839 -vn -0.4919 0.1789 -0.8521 -vn -0.8521 0.1789 -0.4919 -vn -0.9839 0.1789 -0.0000 -vn -0.8521 0.1789 0.4919 -vn -0.4919 0.1789 0.8521 -vn 0.6886 0.4574 -0.5627 -vn 0.2733 0.5153 -0.8122 -vn 0.9846 0.1641 0.0597 -vn -0.6886 0.4574 -0.5627 -vn -0.9846 0.1641 0.0597 -vn -0.2733 0.5153 -0.8122 -vn -0.4937 0.1580 0.8551 -vn 0.0000 0.1925 0.9813 -vn -0.4906 0.1925 0.8498 -vn 0.0000 0.1580 0.9874 -vn 0.4906 0.1925 0.8498 -vn 0.4937 0.1580 0.8551 -vn 0.8498 0.1925 0.4906 -vn 0.8551 0.1580 0.4937 -vn 0.9811 0.1926 0.0186 -vn 0.9568 0.1891 -0.2208 -vn 0.9876 0.1569 0.0007 -vn 0.9549 0.1504 -0.2559 -vn -0.8551 0.1580 0.4937 -vn -0.8498 0.1925 0.4906 -vn -0.9876 0.1569 0.0007 -vn -0.9811 0.1926 0.0186 -vn -0.9568 0.1891 -0.2208 -vn -0.9730 0.2306 0.0011 -vn -0.9412 0.2249 -0.2522 -vn -0.8430 0.2290 0.4867 -vn 0.0000 0.2290 0.9734 -vn 0.4867 0.2290 0.8430 -vn 0.8430 0.2290 0.4867 -vn 0.9730 0.2306 0.0011 -vn 0.9412 0.2249 -0.2522 -vn 0.5098 -0.0000 0.8603 -vn -0.4475 0.1436 0.8827 -vn -0.5098 -0.0000 0.8603 -vn 0.3856 0.2768 0.8802 -vn -0.3856 0.2768 0.8802 -vn 0.9796 0.2009 -0.0044 -vn 0.8462 0.2260 0.4826 -vn 0.9417 0.1046 0.3198 -vn 0.0000 -0.9802 0.1978 -vn 0.0000 -0.8720 0.4896 -vn 0.9968 0.0762 -0.0244 -vn 0.8471 0.1996 -0.4925 -vn 0.6944 0.1887 -0.6944 -vn 0.4475 0.1436 0.8827 -vn -0.9043 0.0825 -0.4189 -vn -0.9905 0.1370 0.0100 -vn 0.0746 0.6706 0.7381 -vn -0.8497 0.1670 0.5001 -vn -0.3745 0.1870 0.9082 -vn 0.3745 0.1870 0.9082 -vn 0.8497 0.1670 0.5001 -vn 0.9905 0.1370 0.0100 -vn 0.8658 0.1046 -0.4893 -vn 0.7043 0.0895 -0.7043 -vn -0.9417 0.1046 0.3198 -vn -0.8462 0.2260 0.4826 -vn -0.5144 -0.0000 0.8575 -vn -0.1951 0.0000 0.9808 -vn -0.5556 -0.0000 0.8315 -vn -0.9661 -0.0000 0.2581 -vn 0.9661 -0.0000 0.2581 -vn -0.9796 0.2009 -0.0044 -vn -0.9968 0.0762 -0.0244 -vn -0.8471 0.1996 -0.4926 -vn -0.6944 0.1887 -0.6944 -vn 0.8315 0.0000 0.5556 -vn -0.8315 -0.0000 -0.5556 -vn 0.8315 -0.0000 -0.5556 -vn -0.8315 -0.0000 0.5556 -vn 0.4235 0.0000 0.9059 -vn 0.7673 0.0000 0.6413 -vn -0.4235 0.0000 0.9059 -vn -0.7673 0.0000 0.6413 -vn -0.4235 0.0000 -0.9059 -vn -0.7673 0.0000 -0.6413 -vn 0.4235 0.0000 -0.9059 -vn 0.7673 0.0000 -0.6413 -vn 0.9549 0.1504 0.2559 -vn 0.4867 0.2290 -0.8430 -vn -0.9549 0.1504 -0.2559 -vn -0.4867 0.2290 0.8430 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.7071 -0.7071 s off -f 5202/7685/969 5203/7686/969 5204/7687/969 -f 5205/7688/969 5206/7689/969 5207/7690/969 -f 5208/7691/969 5209/7692/969 5202/7685/969 -f 5210/7693/970 5211/7694/970 5212/7695/970 -f 5213/7696/969 5214/7697/969 5215/7698/969 -f 5216/7699/969 5206/7689/969 5217/7700/969 -f 5217/7700/969 5218/7701/969 5216/7699/969 -f 5219/7702/969 5218/7701/969 5220/7703/969 -f 5221/7704/969 5222/7705/969 5219/7702/969 -f 5221/7704/969 5223/7706/969 5224/7707/969 -f 5225/7708/969 5223/7706/969 5226/7709/969 -f 5227/7710/969 5228/7711/969 5229/7712/969 -f 5230/7713/969 5229/7712/969 5228/7711/969 -f 5230/7713/969 5231/7714/969 5232/7715/969 -f 5233/7716/969 5231/7714/969 5234/7717/969 -f 5235/7718/969 5203/7686/969 5236/7719/969 -f 5236/7719/969 5237/7720/969 5235/7718/969 -f 5233/7716/969 5238/7721/969 5239/7722/969 -f 5240/7723/971 5241/7724/971 5242/7725/971 -f 5243/7726/971 5244/7727/971 5245/7728/971 -f 5244/7727/971 5246/7729/971 5245/7728/971 -f 5245/7728/971 5247/7730/971 5248/7731/971 -f 5249/7732/971 5247/7730/971 5246/7729/971 -f 5250/7733/971 5246/7729/971 5251/7734/971 -f 5245/7728/971 5246/7729/971 5247/7730/971 -f 5252/7735/971 5253/7736/971 5254/7737/971 -f 5255/7738/971 5256/7739/971 5257/7740/971 -f 5258/7741/971 5259/7742/971 5260/7743/971 -f 5261/7744/971 5262/7745/971 5263/7746/971 -f 5263/7746/971 5257/7740/971 5256/7739/971 -f 5254/7737/971 5260/7743/971 5262/7745/971 -f 5263/7746/971 5260/7743/971 5259/7742/971 -f 5264/7747/971 5265/7748/971 5266/7749/971 -f 5267/7750/971 5268/7751/971 5269/7752/971 -f 5270/7753/971 5271/7754/971 5272/7755/971 -f 5273/7756/971 5274/7757/971 5275/7758/971 -f 5275/7758/971 5269/7752/971 5268/7751/971 -f 5266/7749/971 5272/7755/971 5274/7757/971 -f 5275/7758/971 5272/7755/971 5271/7754/971 -f 5276/7759/971 5242/7725/971 5277/7760/971 -f 5278/7761/971 5279/7762/971 5280/7763/971 -f 5281/7764/971 5251/7734/971 5279/7762/971 -f 5282/7765/971 5277/7760/971 5244/7727/971 -f 5277/7760/971 5251/7734/971 5244/7727/971 -f 5280/7763/971 5277/7760/971 5242/7725/971 -f 5214/7697/972 5283/7766/972 5284/7767/972 -f 5285/7768/973 5286/7769/973 5287/7770/973 -f 5288/7771/971 5289/7772/971 5290/7773/971 -f 5289/7772/971 5291/7774/971 5290/7773/971 -f 5290/7773/971 5292/7775/971 5293/7776/971 -f 5294/7777/971 5292/7775/971 5291/7774/971 -f 5295/7778/971 5291/7774/971 5241/7724/971 -f 5290/7773/971 5291/7774/971 5292/7775/971 -f 5296/7779/971 5297/7780/971 5298/7781/971 -f 5299/7782/971 5300/7783/971 5301/7784/971 -f 5302/7785/971 5303/7786/971 5304/7787/971 -f 5305/7788/971 5306/7789/971 5307/7790/971 -f 5300/7783/971 5303/7786/971 5301/7784/971 -f 5298/7781/971 5304/7787/971 5306/7789/971 -f 5307/7790/971 5304/7787/971 5303/7786/971 -f 5308/7791/971 5280/7763/971 5289/7772/971 -f 5289/7772/971 5242/7725/971 5241/7724/971 -f 5202/7685/969 5209/7692/969 5203/7686/969 -f 5205/7688/969 5208/7691/969 5206/7689/969 -f 5208/7691/969 5205/7688/969 5209/7692/969 -f 5216/7699/969 5207/7690/969 5206/7689/969 -f 5217/7700/969 5220/7703/969 5218/7701/969 -f 5219/7702/969 5222/7705/969 5218/7701/969 -f 5221/7704/969 5224/7707/969 5222/7705/969 -f 5221/7704/969 5226/7709/969 5223/7706/969 -f 5225/7708/969 5227/7710/969 5223/7706/969 -f 5227/7710/969 5225/7708/969 5228/7711/969 -f 5230/7713/969 5232/7715/969 5229/7712/969 -f 5230/7713/969 5234/7717/969 5231/7714/969 -f 5233/7716/969 5239/7722/969 5231/7714/969 -f 5235/7718/969 5204/7687/969 5203/7686/969 -f 5236/7719/969 5238/7792/969 5237/7720/969 -f 5233/7716/969 5237/7793/969 5238/7721/969 -f 5244/7727/971 5251/7734/971 5246/7729/971 -f 5263/7746/971 5259/7742/971 5257/7740/971 -f 5254/7737/971 5253/7736/971 5260/7743/971 -f 5263/7746/971 5262/7745/971 5260/7743/971 -f 5275/7758/971 5271/7754/971 5269/7752/971 -f 5266/7749/971 5265/7748/971 5272/7755/971 -f 5275/7758/971 5274/7757/971 5272/7755/971 -f 5277/7760/971 5279/7762/971 5251/7734/971 -f 5280/7763/971 5279/7762/971 5277/7760/971 -f 5214/7697/972 5213/7696/972 5283/7766/972 -f 5289/7772/971 5241/7724/971 5291/7774/971 -f 5300/7783/971 5307/7790/971 5303/7786/971 -f 5298/7781/971 5297/7780/971 5304/7787/971 -f 5307/7790/971 5306/7789/971 5304/7787/971 -f 5289/7772/971 5280/7763/971 5242/7725/971 -s 1 -f 5309/7794/974 5251/7795/975 5281/7796/976 -f 5310/7797/977 5236/7719/978 5311/7798/978 -f 5229/7712/979 5312/7799/980 5227/7710/980 -f 5207/7690/981 5313/7800/982 5205/7688/982 -f 5232/7715/983 5314/7801/979 5229/7712/979 -f 5216/7699/984 5315/7802/981 5207/7690/981 -f 5231/7714/985 5316/7803/983 5232/7715/983 -f 5218/7701/986 5317/7804/984 5216/7699/984 -f 5239/7722/987 5318/7805/985 5231/7714/985 -f 5222/7705/988 5319/7806/986 5218/7701/986 -f 5320/7807/987 5238/7721/977 5310/7808/977 -f 5224/7707/989 5321/7809/988 5222/7705/988 -f 5203/7686/976 5311/7798/978 5236/7719/978 -f 5223/7706/990 5322/7810/989 5224/7707/989 -f 5209/7692/991 5323/7811/976 5203/7686/976 -f 5227/7710/980 5324/7812/990 5223/7706/990 -f 5205/7688/982 5325/7813/991 5209/7692/991 -f 5316/7803/992 5326/7814/993 5314/7801/994 -f 5318/7805/995 5327/7815/996 5316/7803/992 -f 5320/7807/997 5328/7816/998 5318/7805/995 -f 5310/7808/999 5329/7817/1000 5320/7807/997 -f 5311/7798/1001 5330/7818/1002 5310/7797/999 -f 5323/7811/1003 5331/7819/1004 5311/7798/1001 -f 5325/7813/1005 5332/7820/1006 5323/7811/1003 -f 5313/7800/1007 5333/7821/1008 5325/7813/1005 -f 5313/7800/1007 5334/7822/1009 5335/7823/1010 -f 5317/7804/1011 5334/7824/1009 5315/7802/1012 -f 5317/7804/1011 5336/7825/1013 5337/7826/1014 -f 5321/7809/1015 5336/7827/1013 5319/7806/1016 -f 5322/7810/1017 5338/7828/1018 5321/7809/1015 -f 5324/7812/1019 5339/7829/1020 5322/7810/1017 -f 5312/7799/1021 5340/7830/1022 5324/7812/1019 -f 5314/7801/994 5341/7831/1023 5312/7799/1021 -f 5327/7815/996 5328/7832/998 5342/7833/969 -f 5337/7826/1014 5336/7825/1013 5342/7834/969 -f 5328/7816/998 5329/7835/1000 5342/7836/969 -f 5336/7827/1013 5338/7837/1018 5342/7838/969 -f 5330/7818/1002 5331/7839/1004 5342/7840/969 -f 5329/7817/1000 5330/7841/1002 5342/7842/969 -f 5338/7828/1018 5339/7843/1020 5342/7844/969 -f 5331/7819/1004 5332/7845/1006 5342/7846/969 -f 5339/7829/1020 5340/7847/1022 5342/7848/969 -f 5332/7820/1006 5333/7849/1008 5342/7850/969 -f 5340/7830/1022 5341/7851/1023 5342/7852/969 -f 5333/7821/1008 5335/7853/1010 5342/7854/969 -f 5341/7831/1023 5326/7855/993 5342/7856/969 -f 5335/7823/1010 5334/7822/1009 5342/7857/969 -f 5326/7814/993 5327/7858/996 5342/7859/969 -f 5334/7824/1009 5337/7860/1014 5342/7861/969 -f 5248/7862/1024 5343/7863/1025 5344/7864/1026 -f 5247/7865/1027 5345/7866/1028 5343/7867/1025 -f 5249/7868/1029 5346/7869/1030 5345/7870/1028 -f 5246/7871/1031 5347/7872/1032 5346/7873/1030 -f 5309/7874/1033 5250/7875/1034 5251/7876/1035 -f 5245/7877/1036 5344/7878/1026 5348/7879/1037 -f 5243/7880/1038 5348/7881/1037 5349/7882/1039 -f 5350/7883/1040 5243/7880/1038 5349/7884/1039 -f 5350/7883/1040 5351/7885/1041 5352/7886/1042 -f 5348/7881/1037 5351/7887/1041 5349/7882/1039 -f 5344/7878/1026 5353/7888/1043 5348/7879/1037 -f 5345/7866/1028 5215/7889/1044 5343/7867/1025 -f 5215/7890/1044 5344/7864/1026 5343/7863/1025 -f 5346/7869/1030 5213/7891/1045 5345/7870/1028 -f 5347/7872/1032 5354/7892/1046 5346/7873/1030 -f 5355/7893/1047 5309/7874/1033 5356/7894/1048 -f 5357/7895/984 5358/7896/1049 5356/7897/1050 -f 5356/7897/1050 5359/7898/1051 5355/7899/982 -f 5352/7900/1052 5212/7695/990 5360/7901/990 -f 5214/7902/987 5361/7903/1053 5353/7904/1054 -f 5353/7904/1054 5362/7905/1055 5351/7906/979 -f 5351/7906/979 5210/7693/1056 5352/7900/1057 -f 5355/7899/982 5363/7907/1058 5354/7908/1059 -f 5354/7908/1059 5364/7909/1060 5213/7910/978 -f 5210/7693/1056 5362/7905/1055 5211/7911/1061 -f 5362/7905/1055 5361/7903/1053 5211/7912/1061 -f 5361/7903/1053 5365/7913/1062 5211/7914/1061 -f 5364/7909/1060 5363/7907/1058 5211/7915/1061 -f 5363/7907/1058 5359/7898/1051 5211/7916/1061 -f 5359/7898/1051 5358/7896/1049 5211/7917/1061 -f 5358/7896/1049 5366/7918/1063 5211/7919/1061 -f 5350/7920/1064 5282/7921/985 5244/7922/1065 -f 5234/7923/985 5350/7920/1064 5233/7924/987 -f 5233/7924/987 5350/7920/1064 5237/7925/1066 -f 5237/7720/1067 5309/7794/974 5235/7926/978 -f 5204/7927/976 5309/7794/974 5281/7796/976 -f 5279/7928/991 5204/7927/976 5281/7796/976 -f 5278/7929/982 5202/7930/991 5279/7928/991 -f 5280/7931/981 5208/7932/982 5278/7929/982 -f 5308/7933/984 5206/7934/981 5280/7931/981 -f 5221/7935/989 5219/7936/1068 5367/7937/1069 -f 5367/7937/1069 5226/7938/990 5221/7935/989 -f 5367/7937/1069 5241/7939/1070 5240/7940/990 -f 5242/7941/980 5226/7938/990 5240/7940/990 -f 5276/7942/979 5225/7943/980 5242/7941/980 -f 5277/7944/983 5228/7945/979 5276/7942/979 -f 5282/7921/985 5230/7946/983 5277/7944/983 -f 5368/7947/1071 5253/7948/1072 5369/7949/1072 -f 5259/7950/1073 5370/7951/1074 5371/7952/1073 -f 5255/7953/1075 5372/7954/1076 5373/7955/1075 -f 5257/7956/1076 5371/7952/1073 5372/7954/1076 -f 5258/7957/1074 5368/7947/1071 5370/7951/1074 -f 5374/7958/979 5272/7959/1054 5375/7960/1054 -f 5376/7961/988 5269/7962/1077 5377/7963/1077 -f 5378/7964/982 5275/7965/1050 5379/7966/1050 -f 5375/7960/1054 5265/7967/1078 5380/7968/1078 -f 5381/7969/977 5266/7970/1079 5382/7971/1079 -f 5377/7963/1077 5271/7972/1052 5383/7973/1052 -f 5379/7966/1050 5268/7974/1080 5384/7975/1080 -f 5380/7968/1078 5264/7976/977 5381/7977/977 -f 5382/7971/1079 5274/7978/1059 5385/7979/1059 -f 5383/7973/1052 5270/7980/979 5374/7958/979 -f 5384/7975/1080 5267/7981/988 5376/7961/988 -f 5385/7979/1059 5273/7982/982 5378/7964/982 -f 5374/7958/1081 5386/7983/1082 5387/7984/1081 -f 5375/7960/1082 5388/7985/1083 5386/7983/1082 -f 5380/7968/1083 5389/7986/1084 5388/7985/1083 -f 5381/7969/1084 5390/7987/1085 5389/7988/1084 -f 5382/7971/1085 5391/7989/1086 5390/7987/1085 -f 5385/7979/1086 5392/7990/1087 5391/7989/1086 -f 5378/7964/1087 5393/7991/1088 5392/7990/1087 -f 5379/7966/1088 5394/7992/1089 5393/7991/1088 -f 5384/7975/1089 5395/7993/1090 5394/7992/1089 -f 5395/7993/1090 5377/7963/1091 5396/7994/1091 -f 5377/7963/1091 5397/7995/1092 5396/7994/1091 -f 5383/7973/1092 5387/7984/1081 5397/7995/1092 -f 5253/7948/1072 5398/7996/1093 5369/7949/1072 -f 5252/7997/1093 5399/7998/1094 5398/7999/1093 -f 5254/8000/1094 5400/8001/1095 5399/7998/1094 -f 5262/8002/1095 5401/8003/1096 5400/8001/1095 -f 5261/8004/1096 5402/8005/1097 5401/8003/1096 -f 5263/8006/1097 5403/8007/1098 5402/8005/1097 -f 5256/8008/1098 5373/7955/1075 5403/8007/1098 -f 5284/7767/1099 5404/8009/1100 5214/8010/1101 -f 5283/7766/1102 5213/8011/1103 5405/8012/1104 -f 5404/8013/1100 5283/7766/1102 5405/8014/1104 -f 5211/8015/1061 5365/7913/1062 5364/7909/1060 -f 5365/7913/1062 5213/7910/978 5364/7909/1060 -f 5293/8016/1105 5406/8017/1106 5407/8018/1107 -f 5292/8019/1108 5408/8020/1109 5406/8021/1106 -f 5294/8022/1110 5409/8023/1111 5408/8024/1109 -f 5291/8025/1112 5410/8026/1113 5409/8027/1111 -f 5367/8028/1114 5295/8029/1115 5241/8030/1116 -f 5290/8031/1117 5407/8032/1107 5411/8033/1118 -f 5288/8034/1119 5411/8035/1118 5412/8036/1120 -f 5413/8037/1121 5288/8034/1119 5412/8038/1120 -f 5413/8037/1121 5414/8039/1122 5415/8040/1123 -f 5411/8035/1118 5414/8041/1122 5412/8036/1120 -f 5407/8032/1107 5416/8042/1124 5411/8033/1118 -f 5408/8020/1109 5417/8043/1125 5406/8021/1106 -f 5417/8044/1125 5407/8018/1107 5406/8017/1106 -f 5409/8023/1111 5418/8045/1126 5408/8024/1109 -f 5410/8026/1113 5419/8046/1127 5409/8027/1111 -f 5420/8047/1128 5367/8028/1114 5421/8048/1129 -f 5422/8049/1130 5423/8050/1131 5424/8051/1132 -f 5423/8050/1131 5425/8052/1133 5426/8053/1134 -f 5427/8054/1135 5428/8055/1136 5429/8056/1137 -f 5430/8057/1138 5422/8058/1139 5424/8059/1139 -f 5427/8054/1135 5431/8060/1140 5432/8061/1141 -f 5433/8062/1142 5432/8061/1141 5431/8060/1140 -f 5429/8056/1137 5425/8063/1133 5434/8064/1143 -f 5431/8060/1140 5427/8054/1135 5429/8056/1137 -f 5285/7768/1144 5435/8065/1145 5286/8066/1146 -f 5435/8065/1145 5436/8067/1147 5286/8068/1146 -f 5436/8067/1147 5437/8069/1148 5286/8070/1146 -f 5438/8071/1149 5439/8072/1150 5286/8073/1146 -f 5439/8072/1150 5440/8074/1151 5286/8075/1146 -f 5440/8074/1151 5441/8076/1152 5286/8077/1146 -f 5441/8076/1152 5442/8078/1153 5286/8079/1146 -f 5443/8080/1097 5297/8081/1098 5444/8082/1098 -f 5445/8083/1095 5302/8084/1096 5446/8085/1096 -f 5299/8086/1093 5447/8087/1094 5448/8088/1093 -f 5301/8089/1094 5445/8083/1095 5447/8087/1094 -f 5302/8084/1096 5443/8080/1097 5446/8085/1096 -f 5297/8081/1098 5449/8090/1075 5444/8082/1098 -f 5296/8091/1075 5450/8092/1076 5449/8090/1075 -f 5298/8093/1076 5451/8094/1073 5450/8092/1076 -f 5451/8094/1073 5305/8095/1074 5452/8096/1074 -f 5305/8095/1074 5453/8097/1071 5452/8096/1074 -f 5307/8098/1071 5454/8099/1072 5453/8097/1071 -f 5300/8100/1072 5448/8101/1093 5454/8099/1072 -f 5286/8102/1146 5437/8069/1148 5438/8071/1149 -f 5455/8103/1154 5426/8104/1134 5456/8105/1155 -f 5413/8106/1156 5219/7936/1157 5220/8107/986 -f 5217/8108/984 5413/8106/1156 5220/8107/986 -f 5413/8106/1156 5308/7933/984 5289/8109/1158 -f 5455/8103/1154 5457/8110/982 5430/8111/1159 -f 5424/8051/1132 5455/8103/1154 5430/8111/1159 -f 5458/8112/979 5429/8056/1137 5459/8113/1160 -f 5429/8056/1137 5422/8049/1130 5459/8113/1160 -f 5460/8114/1161 5455/8103/1154 5456/8115/1155 -f 5460/8114/1161 5461/8116/1162 5455/8103/1154 -f 5460/8114/1161 5462/8117/1163 5461/8116/1162 -f 5463/8118/1164 5461/8116/1162 5462/8117/1163 -f 5432/8119/1054 5442/8078/1153 5441/8076/1152 -f 5427/8120/979 5441/8076/1152 5440/8074/1151 -f 5428/8121/1052 5440/8074/1151 5439/8072/1150 -f 5437/8069/1148 5425/8122/989 5438/8071/1149 -f 5460/8123/982 5436/8067/1147 5435/8065/1145 -f 5462/8124/1059 5435/8065/1145 5285/7768/1144 -f 5463/8125/976 5285/7768/1144 5287/7770/976 -f 5458/8126/971 5430/8057/1138 5457/8127/971 -f 5425/8122/989 5439/8072/1150 5438/8071/1149 -f 5456/8128/1050 5437/8069/1148 5436/8067/1147 -f 5464/8129/979 5465/8130/983 5466/8131/983 -f 5467/8132/1165 5468/8133/980 5469/8134/980 -f 5470/8135/982 5471/8136/981 5472/8137/981 -f 5473/8138/1166 5474/8139/991 5475/8140/991 -f 5466/8131/983 5476/8141/1167 5477/8142/1167 -f 5469/8134/980 5478/8143/979 5464/8129/979 -f 5472/8137/981 5479/8144/1168 5480/8145/1168 -f 5475/8140/991 5481/8146/982 5470/8135/982 -f 5482/8147/1169 5483/8148/1170 5484/8149/1170 -f 5485/8150/1171 5482/8147/1169 5486/8151/1171 -f 5487/8152/1172 5485/8150/1171 5486/8151/1171 -f 5488/8153/1173 5489/8154/1174 5490/8155/1174 -f 5491/8156/1175 5488/8153/1173 5492/8157/1175 -f 5493/8158/1176 5491/8156/1175 5492/8157/1175 -f 5310/7797/977 5238/7792/977 5236/7719/978 -f 5229/7712/979 5314/7801/979 5312/7799/980 -f 5207/7690/981 5315/7802/981 5313/7800/982 -f 5232/7715/983 5316/7803/983 5314/7801/979 -f 5216/7699/984 5317/7804/984 5315/7802/981 -f 5231/7714/985 5318/7805/985 5316/7803/983 -f 5218/7701/986 5319/7806/986 5317/7804/984 -f 5239/7722/987 5320/7807/987 5318/7805/985 -f 5222/7705/988 5321/7809/988 5319/7806/986 -f 5320/7807/987 5239/7722/987 5238/7721/977 -f 5224/7707/989 5322/7810/989 5321/7809/988 -f 5203/7686/976 5323/7811/976 5311/7798/978 -f 5223/7706/990 5324/7812/990 5322/7810/989 -f 5209/7692/991 5325/7813/991 5323/7811/976 -f 5227/7710/980 5312/7799/980 5324/7812/990 -f 5205/7688/982 5313/7800/982 5325/7813/991 -f 5316/7803/992 5327/7858/996 5326/7814/993 -f 5318/7805/995 5328/7832/998 5327/7815/996 -f 5320/7807/997 5329/7835/1000 5328/7816/998 -f 5310/7808/999 5330/7841/1002 5329/7817/1000 -f 5311/7798/1001 5331/7839/1004 5330/7818/1002 -f 5323/7811/1003 5332/7845/1006 5331/7819/1004 -f 5325/7813/1005 5333/7849/1008 5332/7820/1006 -f 5313/7800/1007 5335/7853/1010 5333/7821/1008 -f 5313/7800/1007 5315/7802/1012 5334/7822/1009 -f 5317/7804/1011 5337/7860/1014 5334/7824/1009 -f 5317/7804/1011 5319/7806/1016 5336/7825/1013 -f 5321/7809/1015 5338/7837/1018 5336/7827/1013 -f 5322/7810/1017 5339/7843/1020 5338/7828/1018 -f 5324/7812/1019 5340/7847/1022 5339/7829/1020 -f 5312/7799/1021 5341/7851/1023 5340/7830/1022 -f 5314/7801/994 5326/7855/993 5341/7831/1023 -f 5248/7862/1024 5247/7865/1027 5343/7863/1025 -f 5247/7865/1027 5249/7868/1029 5345/7866/1028 -f 5249/7868/1029 5246/7871/1031 5346/7869/1030 -f 5246/7871/1031 5250/7875/1034 5347/7872/1032 -f 5309/7874/1033 5347/8159/1032 5250/7875/1034 -f 5245/7877/1036 5248/7862/1024 5344/7878/1026 -f 5243/7880/1038 5245/7877/1036 5348/7881/1037 -f 5350/7883/1040 5244/8160/1177 5243/7880/1038 -f 5350/7883/1040 5349/7884/1039 5351/7885/1041 -f 5348/7881/1037 5353/8161/1043 5351/7887/1041 -f 5344/7878/1026 5214/8162/1178 5353/7888/1043 -f 5345/7866/1028 5213/8163/1045 5215/7889/1044 -f 5215/7890/1044 5214/8164/1178 5344/7864/1026 -f 5346/7869/1030 5354/8165/1046 5213/7891/1045 -f 5347/7872/1032 5355/8166/1047 5354/7892/1046 -f 5355/7893/1047 5347/8159/1032 5309/7874/1033 -f 5357/7895/984 5366/7918/1063 5358/7896/1049 -f 5356/7897/1050 5358/7896/1049 5359/7898/1051 -f 5352/7900/1057 5210/7693/1056 5212/7695/990 -f 5214/7902/987 5365/7913/1062 5361/7903/1053 -f 5353/7904/1054 5361/7903/1053 5362/7905/1055 -f 5351/7906/979 5362/7905/1055 5210/7693/1056 -f 5355/7899/982 5359/7898/1051 5363/7907/1058 -f 5354/7908/1059 5363/7907/1058 5364/7909/1060 -f 5234/7923/985 5282/7921/985 5350/7920/1064 -f 5204/7927/976 5235/7926/978 5309/7794/974 -f 5279/7928/991 5202/7930/991 5204/7927/976 -f 5278/7929/982 5208/7932/982 5202/7930/991 -f 5280/7931/981 5206/7934/981 5208/7932/982 -f 5308/7933/984 5217/8108/984 5206/7934/981 -f 5367/7937/1069 5240/7940/990 5226/7938/990 -f 5242/7941/980 5225/7943/980 5226/7938/990 -f 5276/7942/979 5228/7945/979 5225/7943/980 -f 5277/7944/983 5230/7946/983 5228/7945/979 -f 5282/7921/985 5234/7923/985 5230/7946/983 -f 5368/7947/1071 5260/8167/1071 5253/7948/1072 -f 5259/7950/1073 5258/7957/1074 5370/7951/1074 -f 5255/7953/1075 5257/7956/1076 5372/7954/1076 -f 5257/7956/1076 5259/7950/1073 5371/7952/1073 -f 5258/7957/1074 5260/8167/1071 5368/7947/1071 -f 5374/7958/979 5270/7980/979 5272/7959/1054 -f 5376/7961/988 5267/7981/988 5269/7962/1077 -f 5378/7964/982 5273/7982/982 5275/7965/1050 -f 5375/7960/1054 5272/7959/1054 5265/7967/1078 -f 5381/7969/977 5264/8168/977 5266/7970/1079 -f 5377/7963/1077 5269/7962/1077 5271/7972/1052 -f 5379/7966/1050 5275/7965/1050 5268/7974/1080 -f 5380/7968/1078 5265/7967/1078 5264/7976/977 -f 5382/7971/1079 5266/7970/1079 5274/7978/1059 -f 5383/7973/1052 5271/7972/1052 5270/7980/979 -f 5384/7975/1080 5268/7974/1080 5267/7981/988 -f 5385/7979/1059 5274/7978/1059 5273/7982/982 -f 5374/7958/1081 5375/7960/1082 5386/7983/1082 -f 5375/7960/1082 5380/7968/1083 5388/7985/1083 -f 5380/7968/1083 5381/7977/1084 5389/7986/1084 -f 5381/7969/1084 5382/7971/1085 5390/7987/1085 -f 5382/7971/1085 5385/7979/1086 5391/7989/1086 -f 5385/7979/1086 5378/7964/1087 5392/7990/1087 -f 5378/7964/1087 5379/7966/1088 5393/7991/1088 -f 5379/7966/1088 5384/7975/1089 5394/7992/1089 -f 5384/7975/1089 5376/7961/1090 5395/7993/1090 -f 5395/7993/1090 5376/7961/1090 5377/7963/1091 -f 5377/7963/1091 5383/7973/1092 5397/7995/1092 -f 5383/7973/1092 5374/7958/1081 5387/7984/1081 -f 5253/7948/1072 5252/8169/1093 5398/7996/1093 -f 5252/7997/1093 5254/8000/1094 5399/7998/1094 -f 5254/8000/1094 5262/8002/1095 5400/8001/1095 -f 5262/8002/1095 5261/8004/1096 5401/8003/1096 -f 5261/8004/1096 5263/8006/1097 5402/8005/1097 -f 5263/8006/1097 5256/8008/1098 5403/8007/1098 -f 5256/8008/1098 5255/7953/1075 5373/7955/1075 -f 5404/8013/1100 5284/7767/1099 5283/7766/1102 -f 5365/7913/1062 5214/7902/987 5213/7910/978 -f 5293/8016/1105 5292/8019/1108 5406/8017/1106 -f 5292/8019/1108 5294/8022/1110 5408/8020/1109 -f 5294/8022/1110 5291/8025/1112 5409/8023/1111 -f 5291/8025/1112 5295/8029/1115 5410/8026/1113 -f 5367/8028/1114 5410/8170/1113 5295/8029/1115 -f 5290/8031/1117 5293/8016/1105 5407/8032/1107 -f 5288/8034/1119 5290/8031/1117 5411/8035/1118 -f 5413/8037/1121 5289/8171/1179 5288/8034/1119 -f 5413/8037/1121 5412/8038/1120 5414/8039/1122 -f 5411/8035/1118 5416/8172/1124 5414/8041/1122 -f 5407/8032/1107 5494/8173/1180 5416/8042/1124 -f 5408/8020/1109 5418/8174/1126 5417/8043/1125 -f 5417/8044/1125 5494/8175/1180 5407/8018/1107 -f 5409/8023/1111 5419/8176/1127 5418/8045/1126 -f 5410/8026/1113 5420/8177/1128 5419/8046/1127 -f 5420/8047/1128 5410/8170/1113 5367/8028/1114 -f 5422/8049/1130 5434/8064/1143 5423/8050/1131 -f 5423/8050/1131 5434/8064/1143 5425/8052/1133 -f 5430/8057/1138 5459/8178/1138 5422/8058/1139 -f 5429/8056/1137 5428/8179/1136 5425/8063/1133 -f 5443/8080/1097 5304/8180/1097 5297/8081/1098 -f 5445/8083/1095 5303/8181/1095 5302/8084/1096 -f 5299/8086/1093 5301/8089/1094 5447/8087/1094 -f 5301/8089/1094 5303/8181/1095 5445/8083/1095 -f 5302/8084/1096 5304/8180/1097 5443/8080/1097 -f 5297/8081/1098 5296/8091/1075 5449/8090/1075 -f 5296/8091/1075 5298/8093/1076 5450/8092/1076 -f 5298/8093/1076 5306/8182/1073 5451/8094/1073 -f 5451/8094/1073 5306/8182/1073 5305/8095/1074 -f 5305/8095/1074 5307/8098/1071 5453/8097/1071 -f 5307/8098/1071 5300/8100/1072 5454/8099/1072 -f 5300/8100/1072 5299/8183/1093 5448/8101/1093 -f 5455/8103/1154 5423/8050/1131 5426/8104/1134 -f 5217/8108/984 5308/7933/984 5413/8106/1156 -f 5455/8103/1154 5461/8116/1162 5457/8110/982 -f 5424/8051/1132 5423/8050/1131 5455/8103/1154 -f 5458/8112/979 5431/8060/1140 5429/8056/1137 -f 5429/8056/1137 5434/8064/1143 5422/8049/1130 -f 5432/8119/1054 5433/8184/985 5442/8078/1153 -f 5427/8120/979 5432/8119/1054 5441/8076/1152 -f 5428/8121/1052 5427/8120/979 5440/8074/1151 -f 5437/8069/1148 5426/8185/986 5425/8122/989 -f 5460/8123/982 5456/8128/1050 5436/8067/1147 -f 5462/8124/1059 5460/8123/982 5435/8065/1145 -f 5463/8125/976 5462/8124/1059 5285/7768/1144 -f 5458/8126/971 5459/8178/1138 5430/8057/1138 -f 5425/8122/989 5428/8121/1052 5439/8072/1150 -f 5456/8128/1050 5426/8185/986 5437/8069/1148 -f 5464/8129/979 5478/8143/979 5465/8130/983 -f 5467/8132/1165 5495/8186/1165 5468/8133/980 -f 5470/8135/982 5481/8146/982 5471/8136/981 -f 5473/8138/1166 5496/8187/1166 5474/8139/991 -f 5466/8131/983 5465/8130/983 5476/8141/1167 -f 5469/8134/980 5468/8133/980 5478/8143/979 -f 5472/8137/981 5471/8136/981 5479/8144/1168 -f 5475/8140/991 5474/8139/991 5481/8146/982 -f 5482/8147/1169 5497/8188/1169 5483/8148/1170 -f 5485/8150/1171 5497/8188/1169 5482/8147/1169 -f 5487/8152/1172 5498/8189/1172 5485/8150/1171 -f 5488/8153/1173 5499/8190/1173 5489/8154/1174 -f 5491/8156/1175 5499/8190/1173 5488/8153/1173 -f 5493/8158/1176 5500/8191/1176 5491/8156/1175 -l 5502 5421 -l 5415 5501 +f 3348/4888/427 3349/4889/427 3350/4890/427 +f 3351/4891/428 3352/4892/428 3353/4893/428 +f 3354/4894/427 3355/4895/427 3349/4889/427 +f 3356/4896/427 3357/4897/427 3355/4895/427 +f 3358/4898/427 3350/4890/427 3357/4897/427 +f 3359/4899/428 3360/4900/428 3351/4891/428 +f 3361/4901/428 3362/4902/428 3359/4899/428 +f 3353/4893/428 3363/4903/428 3361/4901/428 +f 3356/4904/429 3363/4905/429 3358/4906/429 +f 3348/4907/430 3360/4908/430 3354/4909/430 +f 3357/4910/430 3359/4911/430 3355/4912/430 +f 3349/4913/429 3353/4914/429 3350/4915/429 +f 3358/4916/431 3352/4917/431 3348/4918/431 +f 3354/4919/432 3362/4920/432 3356/4921/432 +f 3350/4890/432 3361/4901/432 3357/4897/432 +f 3355/4922/431 3351/4923/431 3349/4924/431 +f 3364/4925/427 3365/4926/427 3366/4927/427 +f 3367/4928/432 3368/4929/432 3369/4930/432 +f 3370/4931/431 3371/4932/431 3372/4933/431 +f 3369/4930/430 3373/4934/430 3370/4935/430 +f 3372/4933/429 3374/4936/429 3367/4928/429 +f 3375/4937/430 3376/4938/430 3377/4939/430 +f 3378/4940/427 3379/4941/427 3380/4942/427 +f 3381/4943/429 3382/4944/429 3383/4945/429 +f 3384/4946/432 3378/4940/432 3385/4947/432 +f 3385/4948/433 3380/4942/433 3382/4944/433 +f 3386/4949/434 3384/4946/434 3376/4938/434 +f 3380/4942/431 3379/4941/431 3386/4950/431 +f 3387/4951/432 3388/4952/432 3389/4953/432 +f 3390/4954/427 3391/4955/427 3392/4956/427 +f 3393/4957/427 3394/4958/427 3395/4959/427 +f 3396/4960/429 3392/4961/429 3397/4962/429 +f 3398/4963/432 3393/4957/432 3399/4964/432 +f 3400/4965/431 3394/4966/431 3401/4967/431 +f 3402/4968/432 3390/4954/432 3396/4969/432 +f 3397/4962/431 3391/4970/431 3403/4971/431 +f 3401/4967/430 3404/4972/430 3398/4963/430 +f 3399/4973/429 3395/4974/429 3400/4965/429 +f 3403/4971/430 3405/4975/430 3402/4968/430 +f 3406/4976/430 3407/4977/430 3408/4978/430 +f 3409/4979/430 3410/4980/430 3411/4981/430 +f 3412/4982/430 3413/4983/430 3414/4984/430 +f 3415/4985/430 3416/4986/430 3417/4987/430 +f 3418/4988/430 3419/4989/430 3420/4990/430 +f 3421/4991/430 3422/4992/430 3423/4993/430 +f 3424/4994/430 3425/4995/430 3426/4996/430 +f 3427/4997/430 3428/4998/430 3429/4999/430 +f 3430/5000/430 3431/5001/430 3432/5002/430 +f 3433/5003/430 3434/5004/430 3435/5005/430 +f 3436/5006/430 3437/5007/430 3438/5008/430 +f 3439/5009/430 3440/5010/430 3441/5011/430 +f 3442/5012/430 3443/5013/430 3444/5014/430 +f 3445/5015/430 3446/5016/430 3447/5017/430 +f 3448/5018/430 3449/5019/430 3450/5020/430 +f 3451/5021/430 3452/5022/430 3453/5023/430 +f 3454/5024/430 3455/5025/430 3456/5026/430 +f 3457/5027/430 3458/5028/430 3459/5029/430 +f 3460/5030/430 3461/5031/430 3462/5032/430 +f 3463/5033/430 3464/5034/430 3465/5035/430 +f 3466/5036/430 3467/5037/430 3468/5038/430 +f 3469/5039/430 3470/5040/430 3471/5041/430 +f 3472/5042/430 3473/5043/430 3474/5044/430 +f 3475/5045/430 3476/5046/430 3477/5047/430 +f 3478/5048/430 3479/5049/430 3480/5050/430 +f 3481/5051/430 3482/5052/430 3483/5053/430 +f 3484/5054/431 3485/5055/431 3486/5056/431 +f 3487/5057/433 3488/5058/433 3484/5054/433 +f 3486/5059/435 3489/5060/435 3490/5061/435 +f 3490/5061/432 3491/5062/432 3487/5057/432 +f 3492/5063/431 3493/5064/431 3494/5065/431 +f 3495/5066/433 3496/5067/433 3492/5063/433 +f 3494/5068/435 3497/5069/435 3498/5070/435 +f 3498/5070/432 3499/5071/432 3495/5066/432 +f 3500/5072/429 3501/5073/429 3502/5074/429 +f 3503/5075/429 3504/5076/429 3505/5077/429 +f 3506/5078/429 3507/5079/429 3508/5080/429 +f 3509/5081/429 3510/5082/429 3511/5083/429 +f 3512/5084/429 3513/5085/429 3514/5086/429 +f 3515/5087/429 3516/5088/429 3517/5089/429 +f 3518/5090/429 3519/5091/429 3520/5092/429 +f 3521/5093/429 3522/5094/429 3523/5095/429 +f 3524/5096/429 3525/5097/429 3526/5098/429 +f 3527/5099/429 3528/5100/429 3529/5101/429 +f 3530/5102/429 3531/5103/429 3532/5104/429 +f 3533/5105/429 3534/5106/429 3535/5107/429 +f 3536/5108/429 3537/5109/429 3538/5110/429 +f 3539/5111/429 3540/5112/429 3541/5113/429 +f 3542/5114/429 3543/5115/429 3544/5116/429 +f 3545/5117/429 3546/5118/429 3547/5119/429 +f 3548/5120/429 3549/5121/429 3550/5122/429 +f 3551/5123/429 3552/5124/429 3553/5125/429 +f 3554/5126/429 3555/5127/429 3556/5128/429 +f 3557/5129/429 3558/5130/429 3559/5131/429 +f 3560/5132/429 3561/5133/429 3562/5134/429 +f 3563/5135/429 3564/5136/429 3565/5137/429 +f 3566/5138/429 3567/5139/429 3568/5140/429 +f 3569/5141/429 3570/5142/429 3571/5143/429 +f 3572/5144/429 3573/5145/429 3574/5146/429 +f 3575/5147/429 3576/5148/429 3577/5149/429 +f 3578/5150/432 3579/5151/432 3580/5152/432 +f 3581/5153/431 3582/5154/431 3583/5155/431 +f 3580/5152/430 3584/5156/430 3581/5157/430 +f 3583/5155/429 3585/5158/429 3578/5150/429 +f 3586/5159/432 3587/5160/432 3588/5161/432 +f 3589/5162/431 3590/5163/431 3591/5164/431 +f 3588/5161/430 3592/5165/430 3589/5166/430 +f 3591/5164/429 3593/5167/429 3586/5159/429 +f 3594/5168/432 3595/5169/432 3596/5170/432 +f 3597/5171/431 3598/5172/431 3599/5173/431 +f 3596/5170/430 3600/5174/430 3597/5175/430 +f 3599/5173/429 3601/5176/429 3594/5168/429 +f 3602/5177/431 3603/5178/431 3604/5179/431 +f 3605/5180/430 3606/5181/430 3607/5182/430 +f 3608/5183/429 3609/5184/429 3610/5185/429 +f 3348/4888/427 3354/4894/427 3349/4889/427 +f 3351/4891/428 3360/4900/428 3352/4892/428 +f 3354/4894/427 3356/4896/427 3355/4895/427 +f 3356/4896/427 3358/4898/427 3357/4897/427 +f 3358/4898/427 3348/4888/427 3350/4890/427 +f 3359/4899/428 3362/4902/428 3360/4900/428 +f 3361/4901/428 3363/4903/428 3362/4902/428 +f 3353/4893/428 3352/4892/428 3363/4903/428 +f 3356/4904/429 3362/5186/429 3363/4905/429 +f 3348/4907/430 3352/5187/430 3360/4908/430 +f 3357/4910/430 3361/5188/430 3359/4911/430 +f 3349/4913/429 3351/5189/429 3353/4914/429 +f 3358/4916/431 3363/5190/431 3352/4917/431 +f 3354/4919/432 3360/5191/432 3362/4920/432 +f 3350/4890/432 3353/4893/432 3361/4901/432 +f 3355/4922/431 3359/5192/431 3351/4923/431 +f 3364/4925/427 3611/5193/427 3365/4926/427 +f 3367/4928/432 3374/4936/432 3368/4929/432 +f 3370/4931/431 3373/5194/431 3371/4932/431 +f 3369/4930/430 3368/4929/430 3373/4934/430 +f 3372/4933/429 3371/4932/429 3374/4936/429 +f 3375/4937/430 3386/4949/430 3376/4938/430 +f 3378/4940/427 3384/4946/427 3379/4941/427 +f 3381/4943/429 3385/4948/429 3382/4944/429 +f 3385/4947/432 3381/5195/432 3377/5196/432 +f 3377/5196/432 3376/5197/432 3385/4947/432 +f 3376/5197/432 3384/4946/432 3385/4947/432 +f 3385/4948/433 3378/4940/433 3380/4942/433 +f 3386/4949/434 3379/4941/434 3384/4946/434 +f 3386/4950/431 3375/5198/431 3383/5199/431 +f 3383/5199/431 3382/5200/431 3386/4950/431 +f 3382/5200/431 3380/4942/431 3386/4950/431 +f 3387/4951/432 3612/5201/432 3388/4952/432 +f 3390/4954/427 3405/4975/427 3391/4955/427 +f 3393/4957/427 3404/4972/427 3394/4958/427 +f 3396/4960/429 3390/5202/429 3392/4961/429 +f 3398/4963/432 3404/4972/432 3393/4957/432 +f 3400/4965/431 3395/4974/431 3394/4966/431 +f 3402/4968/432 3405/4975/432 3390/4954/432 +f 3397/4962/431 3392/4961/431 3391/4970/431 +f 3401/4967/430 3394/4966/430 3404/4972/430 +f 3399/4973/429 3393/5203/429 3395/4974/429 +f 3403/4971/430 3391/4970/430 3405/4975/430 +f 3406/4976/430 3613/5204/430 3407/4977/430 +f 3409/4979/430 3614/5205/430 3410/4980/430 +f 3412/4982/430 3615/5206/430 3413/4983/430 +f 3415/4985/430 3616/5207/430 3416/4986/430 +f 3418/4988/430 3617/5208/430 3419/4989/430 +f 3421/4991/430 3618/5209/430 3422/4992/430 +f 3424/4994/430 3619/5210/430 3425/4995/430 +f 3427/4997/430 3620/5211/430 3428/4998/430 +f 3430/5000/430 3621/5212/430 3431/5001/430 +f 3433/5003/430 3622/5213/430 3434/5004/430 +f 3436/5006/430 3623/5214/430 3437/5007/430 +f 3439/5009/430 3624/5215/430 3440/5010/430 +f 3442/5012/430 3625/5216/430 3443/5013/430 +f 3445/5015/430 3626/5217/430 3446/5016/430 +f 3448/5018/430 3627/5218/430 3449/5019/430 +f 3451/5021/430 3628/5219/430 3452/5022/430 +f 3454/5024/430 3629/5220/430 3455/5025/430 +f 3457/5027/430 3630/5221/430 3458/5028/430 +f 3460/5030/430 3631/5222/430 3461/5031/430 +f 3463/5033/430 3632/5223/430 3464/5034/430 +f 3466/5036/430 3633/5224/430 3467/5037/430 +f 3469/5039/430 3634/5225/430 3470/5040/430 +f 3472/5042/430 3635/5226/430 3473/5043/430 +f 3475/5045/430 3636/5227/430 3476/5046/430 +f 3478/5048/430 3637/5228/430 3479/5049/430 +f 3481/5051/430 3638/5229/430 3482/5052/430 +f 3484/5054/431 3488/5058/431 3485/5055/431 +f 3487/5057/433 3491/5062/433 3488/5058/433 +f 3486/5059/435 3485/5230/435 3489/5060/435 +f 3490/5061/432 3489/5060/432 3491/5062/432 +f 3492/5063/431 3496/5067/431 3493/5064/431 +f 3495/5066/433 3499/5071/433 3496/5067/433 +f 3494/5068/435 3493/5231/435 3497/5069/435 +f 3498/5070/432 3497/5069/432 3499/5071/432 +f 3500/5072/429 3639/5232/429 3501/5073/429 +f 3503/5075/429 3640/5233/429 3504/5076/429 +f 3506/5078/429 3641/5234/429 3507/5079/429 +f 3509/5081/429 3642/5235/429 3510/5082/429 +f 3512/5084/429 3643/5236/429 3513/5085/429 +f 3515/5087/429 3644/5237/429 3516/5088/429 +f 3518/5090/429 3645/5238/429 3519/5091/429 +f 3521/5093/429 3646/5239/429 3522/5094/429 +f 3524/5096/429 3647/5240/429 3525/5097/429 +f 3527/5099/429 3648/5241/429 3528/5100/429 +f 3530/5102/429 3649/5242/429 3531/5103/429 +f 3533/5105/429 3650/5243/429 3534/5106/429 +f 3536/5108/429 3651/5244/429 3537/5109/429 +f 3539/5111/429 3652/5245/429 3540/5112/429 +f 3542/5114/429 3653/5246/429 3543/5115/429 +f 3545/5117/429 3654/5247/429 3546/5118/429 +f 3548/5120/429 3655/5248/429 3549/5121/429 +f 3551/5123/429 3656/5249/429 3552/5124/429 +f 3554/5126/429 3657/5250/429 3555/5127/429 +f 3557/5129/429 3658/5251/429 3558/5130/429 +f 3560/5132/429 3659/5252/429 3561/5133/429 +f 3563/5135/429 3660/5253/429 3564/5136/429 +f 3566/5138/429 3661/5254/429 3567/5139/429 +f 3569/5141/429 3662/5255/429 3570/5142/429 +f 3572/5144/429 3663/5256/429 3573/5145/429 +f 3575/5147/429 3664/5257/429 3576/5148/429 +f 3578/5150/432 3585/5158/432 3579/5151/432 +f 3581/5153/431 3584/5258/431 3582/5154/431 +f 3580/5152/430 3579/5151/430 3584/5156/430 +f 3583/5155/429 3582/5154/429 3585/5158/429 +f 3586/5159/432 3593/5167/432 3587/5160/432 +f 3589/5162/431 3592/5259/431 3590/5163/431 +f 3588/5161/430 3587/5160/430 3592/5165/430 +f 3591/5164/429 3590/5163/429 3593/5167/429 +f 3594/5168/432 3601/5176/432 3595/5169/432 +f 3597/5171/431 3600/5260/431 3598/5172/431 +f 3596/5170/430 3595/5169/430 3600/5174/430 +f 3599/5173/429 3598/5172/429 3601/5176/429 +f 3602/5177/431 3665/5261/431 3603/5178/431 +f 3605/5180/430 3666/5262/430 3606/5181/430 +f 3608/5183/429 3667/5263/429 3609/5184/429 +o ABM_Erector +v 0.125000 2.750000 -1.625000 +v 0.375000 2.750000 -1.375000 +v 0.125000 2.750000 -1.375000 +v -0.375000 2.750000 -1.625000 +v -0.125000 2.750000 -1.375000 +v -0.375000 2.750000 -1.375000 +v 0.375000 9.750000 -1.375000 +v 0.125000 9.750000 -1.625000 +v 0.125000 9.750000 -1.375000 +v -0.125000 9.750000 -1.375000 +v -0.375000 9.750000 -1.625000 +v -0.375000 9.750000 -1.375000 +v 0.375000 2.750000 -1.625000 +v -0.125000 9.750000 -1.625000 +v -0.125000 2.750000 -1.625000 +v 0.375000 9.750000 -1.625000 +v 0.250000 4.875000 -1.500000 +v 0.500000 4.625000 -1.500000 +v 0.250000 4.625000 -1.500000 +v 0.500000 4.625000 0.250000 +v 0.250000 4.875000 0.250000 +v 0.250000 4.625000 0.250000 +v 0.500000 4.875000 0.250000 +v 0.500000 4.875000 -1.500000 +v -0.500000 4.875000 -1.500000 +v -0.250000 4.625000 -1.500000 +v -0.500000 4.625000 -1.500000 +v -0.250000 4.625000 0.250000 +v -0.500000 4.875000 0.250000 +v -0.500000 4.625000 0.250000 +v -0.250000 4.875000 0.250000 +v -0.250000 4.875000 -1.500000 +v 0.250000 4.875000 -0.250000 +v -0.250000 4.625000 -0.250000 +v 0.250000 4.625000 -0.250000 +v -0.250000 4.625000 -0.500000 +v 0.250000 4.875000 -0.500000 +v 0.250000 4.625000 -0.500000 +v 0.500000 9.125000 0.250000 +v 0.250000 9.375000 0.250000 +v 0.250000 9.125000 0.250000 +v -0.250000 4.875000 -0.500000 +v -0.250000 4.875000 -0.250000 +v 0.250000 9.375000 -1.500000 +v 0.500000 9.125000 -1.500000 +v 0.250000 9.125000 -1.500000 +v 0.500000 9.375000 0.250000 +v 0.500000 9.375000 -1.500000 +v -0.500000 9.375000 -1.500000 +v -0.250000 9.125000 -1.500000 +v -0.500000 9.125000 -1.500000 +v -0.250000 9.125000 0.250000 +v -0.500000 9.375000 0.250000 +v -0.500000 9.125000 0.250000 +v -0.250000 9.375000 0.250000 +v -0.250000 9.375000 -1.500000 +v 0.250000 9.375000 -0.250000 +v -0.250000 9.125000 -0.250000 +v 0.250000 9.125000 -0.250000 +v -0.250000 9.125000 -0.500000 +v 0.250000 9.375000 -0.500000 +v 0.250000 9.125000 -0.500000 +v -0.250000 9.375000 -0.500000 +v -0.250000 9.375000 -0.250000 +v -0.125000 9.187500 -1.437500 +v 0.125000 9.187500 -1.562500 +v 0.125000 9.187500 -1.437500 +v -0.125000 9.312500 -1.562500 +v 0.125000 9.312500 -1.437500 +v 0.125000 9.312500 -1.562500 +v -0.125000 9.187500 -1.562500 +v -0.125000 9.312500 -1.437500 +v -0.125000 8.312500 -1.437500 +v 0.125000 8.187500 -1.437500 +v 0.125000 8.312500 -1.437500 +v -0.125000 8.187500 -1.562500 +v 0.125000 8.312500 -1.562500 +v 0.125000 8.187500 -1.562500 +v -0.125000 8.312500 -1.562500 +v -0.125000 8.187500 -1.437500 +v -0.125000 7.187500 -1.437500 +v 0.125000 7.187500 -1.562500 +v 0.125000 7.187500 -1.437500 +v -0.125000 7.312500 -1.562500 +v 0.125000 7.312500 -1.437500 +v 0.125000 7.312500 -1.562500 +v -0.125000 4.312500 -1.437500 +v 0.125000 4.187500 -1.437500 +v 0.125000 4.312500 -1.437500 +v -0.125000 4.187500 -1.562500 +v 0.125000 4.312500 -1.562500 +v 0.125000 4.187500 -1.562500 +v -0.125000 3.187500 -1.562500 +v 0.125000 3.312500 -1.562500 +v 0.125000 3.187500 -1.562500 +v -0.125000 3.312500 -1.437500 +v 0.125000 3.187500 -1.437500 +v 0.125000 3.312500 -1.437500 +v -0.125000 3.187500 -1.437500 +v -0.125000 3.312500 -1.562500 +v -0.125000 7.187500 -1.562500 +v -0.125000 7.312500 -1.437500 +v -0.125000 6.312500 -1.437500 +v 0.125000 6.187500 -1.437500 +v 0.125000 6.312500 -1.437500 +v -0.125000 6.187500 -1.562500 +v 0.125000 6.312500 -1.562500 +v 0.125000 6.187500 -1.562500 +v -0.125000 6.312500 -1.562500 +v -0.125000 6.187500 -1.437500 +v -0.125000 5.187500 -1.437500 +v 0.125000 5.187500 -1.562500 +v 0.125000 5.187500 -1.437500 +v -0.125000 5.312500 -1.562500 +v 0.125000 5.312500 -1.437500 +v 0.125000 5.312500 -1.562500 +v -0.125000 5.187500 -1.562500 +v -0.125000 5.312500 -1.437500 +v -0.125000 4.312500 -1.562500 +v -0.125000 4.187500 -1.437500 +v 0.250000 4.875000 -0.875000 +v 0.250000 5.625000 -1.375000 +v 0.250000 4.875000 -0.625000 +v -0.250000 5.625000 -1.375000 +v -0.250000 4.875000 -0.875000 +v -0.250000 4.875000 -0.625000 +v -0.250000 8.625000 -1.375000 +v -0.250000 9.125000 -0.625000 +v -0.250000 9.125000 -0.875000 +v 0.250000 9.125000 -0.625000 +v 0.250000 8.625000 -1.375000 +v 0.250000 9.125000 -0.875000 +v -0.250000 4.125000 -1.375000 +v -0.250000 4.625000 -0.625000 +v -0.250000 4.625000 -0.875000 +v 0.250000 4.625000 -0.625000 +v 0.250000 4.125000 -1.375000 +v 0.250000 4.625000 -0.875000 +v 0.250000 5.625000 -1.375000 +v 0.250000 4.875000 -0.875000 +v 0.250000 4.875000 -0.625000 +v -0.250000 4.875000 -0.875000 +v -0.250000 5.625000 -1.375000 +v -0.250000 4.875000 -0.625000 +v -0.250000 9.125000 -0.625000 +v -0.250000 8.625000 -1.375000 +v -0.250000 9.125000 -0.875000 +v 0.250000 8.625000 -1.375000 +v 0.250000 9.125000 -0.625000 +v 0.250000 9.125000 -0.875000 +v -0.250000 4.625000 -0.625000 +v -0.250000 4.125000 -1.375000 +v -0.250000 4.625000 -0.875000 +v 0.250000 4.125000 -1.375000 +v 0.250000 4.625000 -0.625000 +v 0.250000 4.625000 -0.875000 +v 0.250000 5.375000 -1.375000 +v -0.250000 5.375000 -1.375000 +v -0.250000 8.375000 -1.375000 +v 0.250000 8.375000 -1.375000 +v -0.250000 3.875000 -1.375000 +v 0.250000 3.875000 -1.375000 +v 0.250000 5.375000 -1.375000 +v -0.250000 5.375000 -1.375000 +v -0.250000 8.375000 -1.375000 +v 0.250000 8.375000 -1.375000 +v -0.250000 3.875000 -1.375000 +v 0.250000 3.875000 -1.375000 +vt 0.708333 0.227273 +vt 0.666667 0.204545 +vt 0.708333 0.204545 +vt 0.708333 0.227273 +vt 0.666667 0.204545 +vt 0.708333 0.204545 +vt 0.666667 0.886364 +vt 0.708333 0.863636 +vt 0.708333 0.886364 +vt 0.666667 0.886364 +vt 0.708333 0.863636 +vt 0.708333 0.886364 +vt 0.833333 0.227273 +vt 0.791667 0.863636 +vt 0.791667 0.227273 +vt 0.750000 0.227273 +vt 0.666667 0.863636 +vt 0.666667 0.227273 +vt 0.791667 0.227273 +vt 0.750000 0.863636 +vt 0.750000 0.227273 +vt 0.666667 0.863636 +vt 0.666667 0.227273 +vt 0.750000 0.863636 +vt 0.833333 0.227273 +vt 0.791667 0.863636 +vt 0.875000 0.022727 +vt 0.833333 -0.000000 +vt 0.875000 -0.000000 +vt 0.833333 0.204545 +vt 0.875000 0.181818 +vt 0.875000 0.204545 +vt 0.916667 0.022727 +vt 0.833333 0.181818 +vt 0.833333 0.022727 +vt 0.958333 0.022727 +vt 0.916667 0.181818 +vt 1.000000 0.022727 +vt 0.958333 0.181818 +vt 0.875000 0.022727 +vt 0.833333 -0.000000 +vt 0.875000 -0.000000 +vt 0.833333 0.204545 +vt 0.875000 0.181818 +vt 0.875000 0.204545 +vt 0.916667 0.022727 +vt 0.833333 0.181818 +vt 0.833333 0.022727 +vt 0.958333 0.022727 +vt 0.916667 0.181818 +vt 1.000000 0.022727 +vt 0.958333 0.181818 +vt 0.875000 0.250000 +vt 0.958333 0.272727 +vt 0.875000 0.272727 +vt 0.958333 0.204545 +vt 0.875000 0.227273 +vt 0.875000 0.204545 +vt 0.958333 0.181818 +vt 0.875000 0.181818 +vt 0.833333 0.204545 +vt 0.875000 0.181818 +vt 0.875000 0.204545 +vt 0.958333 0.227273 +vt 0.958333 0.250000 +vt 0.875000 0.022727 +vt 0.833333 -0.000000 +vt 0.875000 -0.000000 +vt 0.916667 0.022727 +vt 0.833333 0.181818 +vt 0.833333 0.022727 +vt 0.958333 0.022727 +vt 0.916667 0.181818 +vt 1.000000 0.022727 +vt 0.958333 0.181818 +vt 0.875000 0.022727 +vt 0.833333 -0.000000 +vt 0.875000 -0.000000 +vt 0.833333 0.204545 +vt 0.875000 0.181818 +vt 0.875000 0.204545 +vt 0.916667 0.022727 +vt 0.833333 0.181818 +vt 0.833333 0.022727 +vt 0.958333 0.022727 +vt 0.916667 0.181818 +vt 1.000000 0.022727 +vt 0.958333 0.181818 +vt 0.875000 0.250000 +vt 0.958333 0.272727 +vt 0.875000 0.272727 +vt 0.958333 0.204545 +vt 0.875000 0.227273 +vt 0.875000 0.204545 +vt 0.958333 0.181818 +vt 0.875000 0.181818 +vt 0.958333 0.227273 +vt 0.958333 0.250000 +vt 0.708333 0.159091 +vt 0.666667 0.170455 +vt 0.666667 0.159091 +vt 0.708333 0.181818 +vt 0.666667 0.193182 +vt 0.666667 0.181818 +vt 0.708333 0.170455 +vt 0.708333 0.193182 +vt 0.666667 0.204545 +vt 0.708333 0.193182 +vt 0.666667 0.204545 +vt 0.666667 0.193182 +vt 0.708333 0.170455 +vt 0.666667 0.181818 +vt 0.666667 0.170455 +vt 0.708333 0.181818 +vt 0.708333 0.159091 +vt 0.666667 0.159091 +vt 0.708333 0.159091 +vt 0.666667 0.170455 +vt 0.666667 0.159091 +vt 0.708333 0.181818 +vt 0.666667 0.193182 +vt 0.666667 0.181818 +vt 0.708333 0.193182 +vt 0.666667 0.204545 +vt 0.666667 0.193182 +vt 0.708333 0.170455 +vt 0.666667 0.181818 +vt 0.666667 0.170455 +vt 0.708333 0.170455 +vt 0.666667 0.181818 +vt 0.666667 0.170455 +vt 0.708333 0.193182 +vt 0.666667 0.204545 +vt 0.666667 0.193182 +vt 0.708333 0.159091 +vt 0.666667 0.159091 +vt 0.708333 0.181818 +vt 0.708333 0.170455 +vt 0.708333 0.193182 +vt 0.666667 0.204545 +vt 0.708333 0.193182 +vt 0.666667 0.204545 +vt 0.666667 0.193182 +vt 0.708333 0.170455 +vt 0.666667 0.181818 +vt 0.666667 0.170455 +vt 0.708333 0.181818 +vt 0.708333 0.159091 +vt 0.666667 0.159091 +vt 0.708333 0.159091 +vt 0.666667 0.170455 +vt 0.666667 0.159091 +vt 0.708333 0.181818 +vt 0.666667 0.193182 +vt 0.666667 0.181818 +vt 0.708333 0.170455 +vt 0.708333 0.193182 +vt 0.666667 0.204545 +vt 0.708333 0.181818 +vt 0.708333 0.159091 +vt 0.666667 0.159091 +vt 0.875000 0.272727 +vt 0.958333 0.340909 +vt 0.833333 0.272727 +vt 0.833333 0.272727 +vt 0.958333 0.318182 +vt 0.958333 0.340909 +vt 0.958333 0.318182 +vt 0.833333 0.272727 +vt 0.875000 0.272727 +vt 0.958333 0.340909 +vt 0.875000 0.272727 +vt 0.958333 0.318182 +vt 0.958333 0.318182 +vt 0.833333 0.272727 +vt 0.875000 0.272727 +vt 0.958333 0.340909 +vt 0.875000 0.272727 +vt 0.958333 0.318182 +vt 0.958333 0.340909 +vt 0.875000 0.272727 +vt 0.833333 0.272727 +vt 0.958333 0.318182 +vt 0.833333 0.272727 +vt 0.958333 0.340909 +vt 0.833333 0.272727 +vt 0.958333 0.318182 +vt 0.875000 0.272727 +vt 0.875000 0.272727 +vt 0.958333 0.340909 +vt 0.958333 0.318182 +vt 0.833333 0.272727 +vt 0.958333 0.318182 +vt 0.875000 0.272727 +vt 0.875000 0.272727 +vt 0.958333 0.340909 +vt 0.958333 0.318182 +vt 0.833333 0.863636 +vt 0.833333 0.863636 +vt 1.000000 0.181818 +vt 1.000000 0.181818 +vt 1.000000 0.181818 +vt 1.000000 0.181818 +vt 0.708333 0.204545 +vt 0.708333 0.204545 +vt 0.708333 0.204545 +vt 0.708333 0.204545 +vt 0.708333 0.204545 +vt 0.708333 0.204545 +vt 0.708333 0.204545 +vt 0.958333 0.318182 +vt 0.875000 0.272727 +vt 0.958333 0.340909 +vt 0.833333 0.272727 +vt 0.958333 0.340909 +vt 0.833333 0.272727 +vt 0.958333 0.318182 +vt 0.875000 0.272727 +vt 0.958333 0.340909 +vt 0.833333 0.272727 +vt 0.958333 0.340909 +vt 0.833333 0.272727 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +s off +f 3668/5264/436 3669/5265/436 3670/5266/436 +f 3671/5267/436 3672/5268/436 3673/5269/436 +f 3674/5270/437 3675/5271/437 3676/5272/437 +f 3677/5273/437 3678/5274/437 3679/5275/437 +f 3680/5276/438 3674/5277/438 3669/5278/438 +f 3670/5279/439 3675/5271/439 3668/5264/439 +f 3671/5267/440 3681/5280/440 3682/5281/440 +f 3672/5282/441 3679/5283/441 3673/5284/441 +f 3668/5264/440 3683/5285/440 3680/5286/440 +f 3669/5278/441 3676/5287/441 3670/5279/441 +f 3682/5288/438 3677/5289/438 3672/5282/438 +f 3673/5284/439 3678/5274/439 3671/5267/439 +f 3684/5290/440 3685/5291/440 3686/5292/440 +f 3687/5293/441 3688/5294/441 3689/5295/441 +f 3686/5296/439 3688/5294/439 3684/5290/439 +f 3684/5290/437 3690/5297/437 3691/5298/437 +f 3685/5299/436 3689/5300/436 3686/5296/436 +f 3691/5301/438 3687/5302/438 3685/5299/438 +f 3692/5303/440 3693/5304/440 3694/5305/440 +f 3695/5306/441 3696/5307/441 3697/5308/441 +f 3694/5309/439 3696/5307/439 3692/5303/439 +f 3692/5303/437 3698/5310/437 3699/5311/437 +f 3693/5312/436 3697/5313/436 3694/5309/436 +f 3699/5314/438 3695/5315/438 3693/5312/438 +f 3700/5316/441 3701/5317/441 3702/5318/441 +f 3703/5319/440 3704/5320/440 3705/5321/440 +f 3701/5322/436 3705/5321/436 3702/5323/436 +f 3706/5324/441 3707/5325/441 3708/5326/441 +f 3700/5316/437 3709/5327/437 3710/5328/437 +f 3711/5329/440 3712/5330/440 3713/5331/440 +f 3713/5332/439 3707/5325/439 3711/5329/439 +f 3711/5329/437 3714/5333/437 3715/5334/437 +f 3712/5335/436 3708/5336/436 3713/5332/436 +f 3715/5337/438 3706/5338/438 3712/5335/438 +f 3716/5339/440 3717/5340/440 3718/5341/440 +f 3719/5342/441 3720/5343/441 3721/5344/441 +f 3718/5345/439 3720/5343/439 3716/5339/439 +f 3716/5339/437 3722/5346/437 3723/5347/437 +f 3717/5348/436 3721/5349/436 3718/5345/436 +f 3723/5350/438 3719/5351/438 3717/5348/438 +f 3724/5352/441 3725/5353/441 3726/5354/441 +f 3727/5355/440 3728/5356/440 3729/5357/440 +f 3725/5358/436 3729/5357/436 3726/5359/436 +f 3724/5352/437 3730/5360/437 3731/5361/437 +f 3732/5362/436 3733/5363/436 3734/5364/436 +f 3735/5365/437 3736/5366/437 3737/5367/437 +f 3738/5368/440 3737/5367/440 3733/5363/440 +f 3739/5369/441 3734/5370/441 3736/5366/441 +f 3740/5371/441 3741/5372/441 3742/5373/441 +f 3743/5374/440 3744/5375/440 3745/5376/440 +f 3746/5377/437 3742/5373/437 3744/5375/437 +f 3747/5378/436 3745/5376/436 3741/5379/436 +f 3748/5380/436 3749/5381/436 3750/5382/436 +f 3751/5383/437 3752/5384/437 3753/5385/437 +f 3754/5386/441 3755/5387/441 3756/5388/441 +f 3757/5389/440 3758/5390/440 3759/5391/440 +f 3760/5392/440 3761/5393/440 3762/5394/440 +f 3763/5395/441 3764/5396/441 3765/5397/441 +f 3766/5398/436 3762/5394/436 3764/5399/436 +f 3767/5400/437 3765/5397/437 3761/5393/437 +f 3768/5401/440 3753/5385/440 3749/5381/440 +f 3769/5402/441 3750/5403/441 3752/5384/441 +f 3770/5404/441 3771/5405/441 3772/5406/441 +f 3773/5407/440 3774/5408/440 3775/5409/440 +f 3776/5410/437 3772/5406/437 3774/5408/437 +f 3777/5411/436 3775/5409/436 3771/5412/436 +f 3778/5413/436 3779/5414/436 3780/5415/436 +f 3781/5416/437 3782/5417/437 3783/5418/437 +f 3784/5419/440 3783/5418/440 3779/5414/440 +f 3785/5420/441 3780/5421/441 3782/5417/441 +f 3786/5422/437 3756/5388/437 3758/5390/437 +f 3787/5423/436 3759/5391/436 3755/5424/436 +f 3788/5425/438 3789/5426/438 3790/5427/438 +f 3791/5428/439 3792/5429/439 3793/5430/439 +f 3794/5431/439 3795/5432/439 3796/5433/439 +f 3797/5434/438 3798/5435/438 3799/5436/438 +f 3800/5437/439 3801/5438/439 3802/5439/439 +f 3803/5440/438 3804/5441/438 3805/5442/438 +f 3806/5443/439 3807/5444/439 3808/5445/439 +f 3809/5446/438 3810/5447/438 3811/5448/438 +f 3812/5449/438 3813/5450/438 3814/5451/438 +f 3815/5452/439 3816/5453/439 3817/5454/439 +f 3818/5455/438 3819/5456/438 3820/5457/438 +f 3821/5458/439 3822/5459/439 3823/5460/439 +f 3668/5264/436 3680/5286/436 3669/5265/436 +f 3671/5267/436 3682/5281/436 3672/5268/436 +f 3674/5270/437 3683/5285/437 3675/5271/437 +f 3677/5273/437 3681/5280/437 3678/5274/437 +f 3680/5276/438 3683/5461/438 3674/5277/438 +f 3670/5279/439 3676/5287/439 3675/5271/439 +f 3671/5267/440 3678/5274/440 3681/5280/440 +f 3672/5282/441 3677/5289/441 3679/5283/441 +f 3668/5264/440 3675/5271/440 3683/5285/440 +f 3669/5278/441 3674/5277/441 3676/5287/441 +f 3682/5288/438 3681/5462/438 3677/5289/438 +f 3673/5284/439 3679/5283/439 3678/5274/439 +f 3684/5290/440 3691/5298/440 3685/5291/440 +f 3687/5293/441 3690/5297/441 3688/5294/441 +f 3686/5296/439 3689/5300/439 3688/5294/439 +f 3684/5290/437 3688/5294/437 3690/5297/437 +f 3685/5299/436 3687/5302/436 3689/5300/436 +f 3691/5301/438 3690/5463/438 3687/5302/438 +f 3692/5303/440 3699/5311/440 3693/5304/440 +f 3695/5306/441 3698/5310/441 3696/5307/441 +f 3694/5309/439 3697/5313/439 3696/5307/439 +f 3692/5303/437 3696/5307/437 3698/5310/437 +f 3693/5312/436 3695/5315/436 3697/5313/436 +f 3699/5314/438 3698/5464/438 3695/5315/438 +f 3700/5316/441 3710/5328/441 3701/5317/441 +f 3703/5319/440 3709/5327/440 3704/5320/440 +f 3701/5322/436 3703/5319/436 3705/5321/436 +f 3706/5324/441 3714/5333/441 3707/5325/441 +f 3700/5316/437 3704/5320/437 3709/5327/437 +f 3711/5329/440 3715/5334/440 3712/5330/440 +f 3713/5332/439 3708/5336/439 3707/5325/439 +f 3711/5329/437 3707/5325/437 3714/5333/437 +f 3712/5335/436 3706/5338/436 3708/5336/436 +f 3715/5337/438 3714/5465/438 3706/5338/438 +f 3716/5339/440 3723/5347/440 3717/5340/440 +f 3719/5342/441 3722/5346/441 3720/5343/441 +f 3718/5345/439 3721/5349/439 3720/5343/439 +f 3716/5339/437 3720/5343/437 3722/5346/437 +f 3717/5348/436 3719/5351/436 3721/5349/436 +f 3723/5350/438 3722/5466/438 3719/5351/438 +f 3724/5352/441 3731/5361/441 3725/5353/441 +f 3727/5355/440 3730/5360/440 3728/5356/440 +f 3725/5358/436 3727/5355/436 3729/5357/436 +f 3724/5352/437 3728/5356/437 3730/5360/437 +f 3732/5362/436 3738/5368/436 3733/5363/436 +f 3735/5365/437 3739/5369/437 3736/5366/437 +f 3738/5368/440 3735/5365/440 3737/5367/440 +f 3739/5369/441 3732/5467/441 3734/5370/441 +f 3740/5371/441 3747/5468/441 3741/5372/441 +f 3743/5374/440 3746/5377/440 3744/5375/440 +f 3746/5377/437 3740/5371/437 3742/5373/437 +f 3747/5378/436 3743/5374/436 3745/5376/436 +f 3748/5380/436 3768/5401/436 3749/5381/436 +f 3751/5383/437 3769/5402/437 3752/5384/437 +f 3754/5386/441 3787/5469/441 3755/5387/441 +f 3757/5389/440 3786/5422/440 3758/5390/440 +f 3760/5392/440 3767/5400/440 3761/5393/440 +f 3763/5395/441 3766/5470/441 3764/5396/441 +f 3766/5398/436 3760/5392/436 3762/5394/436 +f 3767/5400/437 3763/5395/437 3765/5397/437 +f 3768/5401/440 3751/5383/440 3753/5385/440 +f 3769/5402/441 3748/5471/441 3750/5403/441 +f 3770/5404/441 3777/5472/441 3771/5405/441 +f 3773/5407/440 3776/5410/440 3774/5408/440 +f 3776/5410/437 3770/5404/437 3772/5406/437 +f 3777/5411/436 3773/5407/436 3775/5409/436 +f 3778/5413/436 3784/5419/436 3779/5414/436 +f 3781/5416/437 3785/5420/437 3782/5417/437 +f 3784/5419/440 3781/5416/440 3783/5418/440 +f 3785/5420/441 3778/5473/441 3780/5421/441 +f 3786/5422/437 3754/5386/437 3756/5388/437 +f 3787/5423/436 3757/5389/436 3759/5391/436 +f 3788/5425/438 3824/5474/438 3789/5426/438 +f 3791/5428/439 3825/5475/439 3792/5429/439 +f 3794/5431/439 3826/5476/439 3795/5432/439 +f 3797/5434/438 3827/5477/438 3798/5435/438 +f 3800/5437/439 3828/5478/439 3801/5438/439 +f 3803/5440/438 3829/5479/438 3804/5441/438 +f 3806/5443/439 3830/5480/439 3807/5444/439 +f 3809/5446/438 3831/5481/438 3810/5447/438 +f 3812/5449/438 3832/5482/438 3813/5450/438 +f 3815/5452/439 3833/5483/439 3816/5453/439 +f 3818/5455/438 3834/5484/438 3819/5456/438 +f 3821/5458/439 3835/5485/439 3822/5459/439 +o ABM_Rope +v 0.000000 10.375000 0.375000 +v 0.000000 10.375000 0.000000 +v 0.000000 10.500000 0.000000 +v 0.000000 10.250000 0.375000 +v 0.000000 10.375000 1.062500 +v 0.000000 10.250000 1.062500 +v 0.000000 10.375000 1.437500 +v 0.000000 10.500000 1.437500 +v 0.000000 10.375000 0.000000 +v 0.000000 10.375000 0.375000 +v 0.000000 10.500000 0.000000 +v 0.000000 10.375000 1.062500 +v 0.000000 10.250000 0.375000 +v 0.000000 10.250000 1.062500 +v 0.000000 10.375000 1.437500 +v 0.000000 10.500000 1.437500 +vt 0.593750 0.920455 +vt 0.656250 0.909091 +vt 0.656250 0.920455 +vt 0.593750 0.909091 +vt 0.479167 0.920455 +vt 0.479167 0.909091 +vt 0.416667 0.909091 +vt 0.416667 0.920455 +vt 0.656250 0.909091 +vt 0.593750 0.920455 +vt 0.656250 0.920455 +vt 0.479167 0.920455 +vt 0.593750 0.909091 +vt 0.479167 0.909091 +vt 0.416667 0.909091 +vt 0.416667 0.920455 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +s off +f 3836/5486/442 3837/5487/442 3838/5488/442 +f 3839/5489/442 3840/5490/442 3841/5491/442 +f 3842/5492/442 3840/5490/442 3843/5493/442 +f 3844/5494/443 3845/5495/443 3846/5496/443 +f 3847/5497/443 3848/5498/443 3849/5499/443 +f 3850/5500/443 3847/5497/443 3849/5499/443 +f 3836/5486/442 3839/5489/442 3837/5487/442 +f 3839/5489/442 3836/5486/442 3840/5490/442 +f 3842/5492/442 3841/5491/442 3840/5490/442 +f 3844/5494/443 3848/5498/443 3845/5495/443 +f 3847/5497/443 3845/5495/443 3848/5498/443 +f 3850/5500/443 3851/5501/443 3847/5497/443 +o ABM_Pivot +v 0.187500 3.750000 -1.437500 +v 0.187500 2.750000 -1.562500 +v 0.187500 2.750000 -1.437500 +v 0.312500 3.750000 -1.562500 +v 0.312500 2.750000 -1.437500 +v 0.312500 2.750000 -1.562500 +v 0.375000 2.750000 -1.375000 +v 0.125000 2.750000 -1.625000 +v 0.125000 2.750000 -1.375000 +v -0.125000 2.750000 -1.375000 +v -0.375000 2.750000 -1.625000 +v -0.375000 2.750000 -1.375000 +v -0.125000 1.250000 -1.625000 +v -0.125000 1.250000 -1.375000 +v -0.375000 1.250000 -1.375000 +v -0.375000 1.250000 -1.625000 +v 0.375000 1.250000 -1.625000 +v 0.375000 1.250000 -1.375000 +v 0.125000 1.250000 -1.375000 +v 0.125000 1.250000 -1.625000 +v -0.125000 2.750000 -1.625000 +v 0.375000 2.750000 -1.625000 +v 0.187500 3.750000 -1.562500 +v 0.312500 3.750000 -1.437500 +v -0.312500 3.750000 -1.437500 +v -0.312500 2.750000 -1.562500 +v -0.312500 2.750000 -1.437500 +v -0.187500 3.750000 -1.562500 +v -0.187500 2.750000 -1.437500 +v -0.187500 2.750000 -1.562500 +v -0.312500 3.750000 -1.562500 +v -0.187500 3.750000 -1.437500 +v -0.125000 2.187500 -1.562500 +v 0.125000 2.312500 -1.562500 +v 0.125000 2.187500 -1.562500 +v -0.125000 2.312500 -1.437500 +v 0.125000 2.187500 -1.437500 +v 0.125000 2.312500 -1.437500 +v -0.125000 2.187500 -1.437500 +v -0.125000 2.312500 -1.562500 +vt 0.750000 0.227273 +vt 0.729167 0.136364 +vt 0.750000 0.136364 +vt 0.791667 0.227273 +vt 0.770833 0.136364 +vt 0.791667 0.136364 +vt 0.666667 0.159091 +vt 0.708333 0.136364 +vt 0.708333 0.159091 +vt 0.666667 0.159091 +vt 0.708333 0.136364 +vt 0.708333 0.159091 +vt 0.833333 -0.000000 +vt 0.791667 0.136364 +vt 0.791667 -0.000000 +vt 0.750000 -0.000000 +vt 0.708333 -0.000000 +vt 0.833333 -0.000000 +vt 0.791667 0.136364 +vt 0.791667 -0.000000 +vt 0.750000 -0.000000 +vt 0.708333 -0.000000 +vt 0.666667 0.136364 +vt 0.666667 -0.000000 +vt 0.750000 0.136364 +vt 0.666667 0.136364 +vt 0.666667 -0.000000 +vt 0.750000 0.136364 +vt 0.729167 0.227273 +vt 0.708333 0.136364 +vt 0.770833 0.227273 +vt 0.750000 0.227273 +vt 0.729167 0.136364 +vt 0.750000 0.136364 +vt 0.791667 0.227273 +vt 0.770833 0.136364 +vt 0.791667 0.136364 +vt 0.729167 0.227273 +vt 0.708333 0.136364 +vt 0.770833 0.227273 +vt 0.708333 0.170455 +vt 0.666667 0.181818 +vt 0.666667 0.170455 +vt 0.708333 0.193182 +vt 0.666667 0.204545 +vt 0.666667 0.193182 +vt 0.708333 0.159091 +vt 0.666667 0.159091 +vt 0.708333 0.181818 +vt 0.833333 0.136364 +vt 0.833333 0.136364 +vt 0.708333 0.227273 +vt 0.708333 0.227273 +vt 0.708333 0.204545 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +s off +f 3852/5502/444 3853/5503/444 3854/5504/444 +f 3855/5505/445 3856/5506/445 3857/5507/445 +f 3858/5508/446 3859/5509/446 3860/5510/446 +f 3861/5511/446 3862/5512/446 3863/5513/446 +f 3864/5514/445 3861/5515/445 3865/5516/445 +f 3866/5517/444 3862/5512/444 3867/5518/444 +f 3868/5519/445 3858/5520/445 3869/5521/445 +f 3870/5522/444 3859/5509/444 3871/5523/444 +f 3867/5518/447 3872/5524/447 3864/5525/447 +f 3865/5516/448 3863/5526/448 3866/5517/448 +f 3871/5523/447 3873/5527/447 3868/5528/447 +f 3869/5521/448 3860/5529/448 3870/5522/448 +f 3874/5530/447 3857/5531/447 3853/5503/447 +f 3875/5532/448 3854/5504/448 3856/5506/448 +f 3876/5533/444 3877/5534/444 3878/5535/444 +f 3879/5536/445 3880/5537/445 3881/5538/445 +f 3882/5539/447 3881/5540/447 3877/5534/447 +f 3883/5541/448 3878/5535/448 3880/5537/448 +f 3884/5542/447 3885/5543/447 3886/5544/447 +f 3887/5545/448 3888/5546/448 3889/5547/448 +f 3890/5548/449 3886/5544/449 3888/5549/449 +f 3891/5550/446 3889/5547/446 3885/5543/446 +f 3852/5502/444 3874/5530/444 3853/5503/444 +f 3855/5505/445 3875/5532/445 3856/5506/445 +f 3858/5508/446 3873/5527/446 3859/5509/446 +f 3861/5511/446 3872/5524/446 3862/5512/446 +f 3864/5514/445 3872/5551/445 3861/5515/445 +f 3866/5517/444 3863/5526/444 3862/5512/444 +f 3868/5519/445 3873/5552/445 3858/5520/445 +f 3870/5522/444 3860/5529/444 3859/5509/444 +f 3867/5518/447 3862/5512/447 3872/5524/447 +f 3865/5516/448 3861/5515/448 3863/5526/448 +f 3871/5523/447 3859/5509/447 3873/5527/447 +f 3869/5521/448 3858/5520/448 3860/5529/448 +f 3874/5530/447 3855/5553/447 3857/5531/447 +f 3875/5532/448 3852/5502/448 3854/5504/448 +f 3876/5533/444 3882/5539/444 3877/5534/444 +f 3879/5536/445 3883/5541/445 3880/5537/445 +f 3882/5539/447 3879/5554/447 3881/5540/447 +f 3883/5541/448 3876/5533/448 3878/5535/448 +f 3884/5542/447 3891/5550/447 3885/5543/447 +f 3887/5545/448 3890/5555/448 3888/5546/448 +f 3890/5548/449 3884/5542/449 3886/5544/449 +f 3891/5550/446 3887/5545/446 3889/5547/446 diff --git a/src/main/resources/assets/hbm/textures/blocks/armor_table_bottom.png b/src/main/resources/assets/hbm/textures/blocks/armor_table_bottom.png index 37f7edf5696c325184743ca12c1e76e14d010586..a80d403a4fa7c4701bc53eb550382c980c865b7c 100644 GIT binary patch delta 194 zcmV;z06qV+0`38jG=HT@L_t(Ijh&Ox4Fn+wMCZ(YYYS6@6;QgRP=SdyaQCqxSyppd zmM=vf!X)z%kuP2bNgM#6s>`G0NN!;fL2K=7U wPA`ZERMi=%_rBbBagao7%_Z;d+_}}_2f6sH1Lg6@JOBUy07*qoM6N<$g7KeL-~a#s delta 264 zcmV+j0r&py0kZ;-G=J(zL_t(Ijh#|Ku7w~BoPt{=u+THO^ZrLN5e#ul`&JM{-uLG% zCWDdAbXsU#S5ZpgR}A&XvMeAXD5d`77$daSPXQu=_a0hn5K+10oI{KeN-0=t%m0)T zXxlcK=lRt&bB2f@gaDP@z4!kXInNW!3}${tsLyRN05CIBN`HliHt#oA5h-Bi!nY3I zigV#KO(lYA1zPl6kK^b^Xs4ZBT7epm4(c`aieG1tCtY8xokgU-1#4}$xW~@9`#ZR< z3nGGX91%hQGs75DhE>Bkhkf7g0(Fb^ii|Pc0p&$J8ZQ_oh<$wJlB2QJ#Cblx$vFsi~ z=uNx}ET Q00000NkvXXt^-0~f=twRD*ylh delta 292 zcmV+<0o(qx0?q=EGk*aENkl4LFgXA?AyegUkW{1mr~qrmAs`+28@7M0#YIS#++o4im}NLczZ8 qL-Nx!q1KA?JRMO=iGP3qp8Eo3F@@M8Tf%Z@t z#RN4~|ApXy{rH%Ns=n~2m>Ew1sI^{xdW@N;n^hHN_DSFY*Kr(J*A*!x5D@@i-}mtC z1)ey`%tF=H+J(f&X#yu9qF#}i!#wAVZQJ_#<%|s=ES`-nCx2N+!@g}MB8Ui5N>>68 z-Vu~if(MINCL+{YZwb!F4Fs+`0ui}-0DSKD7Y|A)a}ONv7Xn`k41K`N$T|19h;-8& zeN<22ckE4)Qi7Rv!^|wSa!8=6sI`WE7~8nDHYZ@_{svs*>zut-*Bgvz#pq}gvAO^N O002ovPDHLkU;%=U1$smP delta 281 zcmV+!0p|X*0>lE4G=KX^L_t(Ijh&J^j)gD`MUO3300h=R!7|u?L;Y%qVGHpTqaZ#( zdNajUA}ja!#)(YR*Gy?>aZ?|YVIc~5YM^?i?s zU}gZMln!HFwFJm!GsDd2y6$3r1(cree7FQCUO`ofF&>@Qbv;aX*kgzy0)V?e2KH5g z7$YHshbg6mnUxb{nHg={9-Yt1hHcv}^-BVGC&u_Nmvl+s?hM25I;eXsrF4AhN<^6F f`KzvX0sH`|P7-VPxxyCT00000NkvXXu0mjf!r6y^ diff --git a/src/main/resources/assets/hbm/textures/blocks/gun_table_bottom.png b/src/main/resources/assets/hbm/textures/blocks/gun_table_bottom.png index 3e72319ac76e434936584116ac60e1639b9ec892..9aac6ef8e18590892fbffc238cbd2ad90cb75f6a 100644 GIT binary patch delta 220 zcmV<203-j)0f+*SG=INIL_t(Ijh&Ip3WG2ZMUNpV1#P5I=*Dd~{S9}1bN{BhB1mEj zqNR3GVtpaTS!I}eE;Bblnk6k8ODcf`C`~;XzMc&LVWei^<7rQkS3d)Q>m}=k)>=4& z)|xnu0Wii4-uK5105Nv9)&k3Le`~P?cDjLqFMNo1e*+iTT2)wUJ>9?;9%K+k$_t*& zz!x55;0w=Y-~&7D>bgrhjfjdG)B6gROCB_*j=)CNR7`SNp^ zNH#eP08&ImYOUR)X#j>WNm121fe9W4@GP&{*$U)Y)MQkmwSSDj4V#*LEVP)LSf{{r_iw|7=&Rul%DjfZoodgVXT>z~j@yeFK2k zm%=x@u7hV-tyaD#A^?~fBErY#8@-*Gr;c6M0k_3rMFxKrn}3-nX z43kwARYgQRc{5|X-J+_rZ5s`khho4_2*ty?*=(Y_kwN&!DRIhYNGnUlWm%%CIOoXo z998v`)4Sf_bTGX5sGM``_j^yfZCmQP9woDsMI7T)RQF;9_yKr(v^=aEq@(}<002ov JPDHLkV1gL@nd$%l delta 218 zcmV<0044w70)+yQGk*ZQNklF>At56oo%SQVQA^0tFX`w{)pfhwcHlIP@>% zFS>Mc@D~IW?9%0d6p9GpB?=Nt?GST~Q48%^Uf#X$o_p@eZ4IK{o`1si99)3h7H7%L zdIvze<6SHc?r%v~+mZm_@gb6AmSxZdr4+vJ17NK^`Ccr?rGJV#t1(8-IF3ov6oAoa z1c26>FbuKQifX4Rt$H*Z4y7AF7=~!A(OQ=Z4-kSZ%S1tiO19QoV*P#}fII)@IKpPV zgD%8zES=}`xy)R3uZopY*lkJJ8brPQ=f{TUre6)k zQoN4VAnNUNTgWP3GpxDRi{+Ty7A1k}IehKDWj!l{n)fDhTj08$L%Q0YC4Rft@dNI! Vu&fQ(;nV;C002ovPDHLkV1iz|x0nC` delta 246 zcmV zvg{%R1X(YNFCMIgXV*mgE07*qoM6N<$g2E1TQ2+n{ From b4ae72513b4f6c9a33a86aabe69dae783a311f4e Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 22 May 2025 12:28:40 +1000 Subject: [PATCH 067/491] screwdriver adjustable conveyor splitters --- .../com/hbm/blocks/network/CraneSplitter.java | 71 ++++++++++++---- .../network/TileEntityCraneSplitter.java | 84 +++++++++++++++---- 2 files changed, 125 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/hbm/blocks/network/CraneSplitter.java b/src/main/java/com/hbm/blocks/network/CraneSplitter.java index 562c495a2..9cc13f15c 100644 --- a/src/main/java/com/hbm/blocks/network/CraneSplitter.java +++ b/src/main/java/com/hbm/blocks/network/CraneSplitter.java @@ -1,14 +1,18 @@ package com.hbm.blocks.network; +import api.hbm.block.IToolable; import api.hbm.conveyor.IConveyorBelt; import api.hbm.conveyor.IConveyorItem; import api.hbm.conveyor.IConveyorPackage; import api.hbm.conveyor.IEnterableBlock; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; import com.hbm.entity.item.EntityMovingItem; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityCraneSplitter; +import com.hbm.util.I18nUtil; + import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -21,11 +25,13 @@ import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.ForgeDirection; +import java.util.ArrayList; import java.util.List; -public class CraneSplitter extends BlockDummyable implements IConveyorBelt, IEnterableBlock, ITooltipProvider { +public class CraneSplitter extends BlockDummyable implements IConveyorBelt, IEnterableBlock, ITooltipProvider, IToolable, ILookOverlay { @SideOnly(Side.CLIENT) public IIcon iconTopLeft; @SideOnly(Side.CLIENT) public IIcon iconTopRight; @@ -96,26 +102,16 @@ public class CraneSplitter extends BlockDummyable implements IConveyorBelt, IEnt TileEntity tile = world.getTileEntity(x, y, z); if(!(tile instanceof TileEntityCraneSplitter)) return; TileEntityCraneSplitter splitter = (TileEntityCraneSplitter) tile; - boolean pos = splitter.getPosition(); - ItemStack stack = entity.getItemStack(); ForgeDirection rot = ForgeDirection.getOrientation(splitter.getBlockMetadata() - offset).getRotation(ForgeDirection.DOWN); - if(stack.stackSize % 2 == 0) { - stack.stackSize /= 2; - spawnMovingItem(world, x, y, z, stack.copy()); - spawnMovingItem(world, x + rot.offsetX, y, z + rot.offsetZ, stack.copy()); - } else { - int baseSize = stack.stackSize /= 2; - stack.stackSize = baseSize + (pos ? 0 : 1); - spawnMovingItem(world, x, y, z, stack.copy()); - stack.stackSize = baseSize + (pos ? 1 : 0); - spawnMovingItem(world, x + rot.offsetX, y, z + rot.offsetZ, stack.copy()); - splitter.setPosition(!pos); - } + ItemStack[] splits = splitter.splitStack(entity.getItemStack()); + + spawnMovingItem(world, x, y, z, splits[0]); + spawnMovingItem(world, x + rot.offsetX, y, z + rot.offsetZ, splits[1]); } private void spawnMovingItem(World world, int x, int y, int z, ItemStack stack) { - if(stack.stackSize <= 0) return; + if(stack == null || stack.stackSize <= 0) return; EntityMovingItem moving = new EntityMovingItem(world); Vec3 pos = Vec3.createVectorHelper(x + 0.5, y + 0.5, z + 0.5); Vec3 snap = this.getClosestSnappingPosition(world, x, y, z, pos); @@ -158,8 +154,51 @@ public class CraneSplitter extends BlockDummyable implements IConveyorBelt, IEnt return ForgeDirection.getOrientation(meta).getRotation(ForgeDirection.UP); } + @SuppressWarnings("rawtypes") @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { this.addStandardInfo(stack, player, list, ext); } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + if(world.isRemote) return true; + if(tool != ToolType.SCREWDRIVER) return false; + + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return false; + + TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(te instanceof TileEntityCraneSplitter)) return false; + + TileEntityCraneSplitter crane = (TileEntityCraneSplitter) te; + + // The core of the dummy is always the left hand block + boolean isLeft = x == pos[0] && y == pos[1] && z == pos[2]; + int adjust = player.isSneaking() ? -1 : 1; + + if(isLeft) { + crane.leftRatio = (byte)MathHelper.clamp_int(crane.leftRatio + adjust, 1, 16); + } else { + crane.rightRatio = (byte)MathHelper.clamp_int(crane.rightRatio + adjust, 1, 16); + } + + return true; + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return; + + TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(te instanceof TileEntityCraneSplitter)) return; + + TileEntityCraneSplitter crane = (TileEntityCraneSplitter) te; + + List text = new ArrayList<>(); + text.add("Splitter ratio: " + crane.leftRatio + ":" + crane.rightRatio); + + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java index 76f110241..a5374eec5 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java @@ -1,31 +1,87 @@ package com.hbm.tileentity.network; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; +import com.hbm.tileentity.TileEntityLoadedBase; -public class TileEntityCraneSplitter extends TileEntity { +import io.netty.buffer.ByteBuf; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class TileEntityCraneSplitter extends TileEntityLoadedBase { /* false: left belt is preferred, true: right belt is preferred */ private boolean position; - - public void setPosition(boolean pos) { - this.position = pos; - this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + private byte remaining; // count until position swaps + + public byte leftRatio = 1; + public byte rightRatio = 1; + + // Splits the input stack into two, based on current ratio and internal state + public ItemStack[] splitStack(ItemStack stack) { + int left = 0; + int right = 0; + int count = stack.stackSize; + + if(remaining <= 0) remaining = position ? rightRatio : leftRatio; + + while(count > 0) { + int toExtract = Math.min(remaining, count); + + remaining -= toExtract; + count -= toExtract; + if(position) right += toExtract; else left += toExtract; + + if(remaining <= 0) { + position = !position; + remaining = position ? rightRatio : leftRatio; + } + } + + ItemStack leftStack = stack.copy(); + ItemStack rightStack = stack.copy(); + leftStack.stackSize = left; + rightStack.stackSize = right; + + worldObj.markTileEntityChunkModified(xCoord, yCoord, zCoord, this); + return new ItemStack[] { leftStack, rightStack }; } - - public boolean getPosition() { - return this.position; + + public void updateEntity() { + if(worldObj.isRemote) return; + networkPackNT(15); } - + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - this.position = nbt.getBoolean("pos"); + + position = nbt.getBoolean("pos"); + remaining = nbt.getByte("count"); + + leftRatio = nbt.getByte("left"); + rightRatio = nbt.getByte("right"); } - + @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - nbt.setBoolean("pos", this.position); + + nbt.setBoolean("pos", position); + nbt.setByte("count", remaining); + + nbt.setByte("left", leftRatio); + nbt.setByte("right", rightRatio); } + + @Override + public void serialize(ByteBuf buf) { + buf.writeByte(leftRatio); + buf.writeByte(rightRatio); + } + + @Override + public void deserialize(ByteBuf buf) { + leftRatio = buf.readByte(); + rightRatio = buf.readByte(); + } + } From 5459920b9c6ab45c0ed9522e43098f038a5b2a27 Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 22 May 2025 12:51:34 +1000 Subject: [PATCH 068/491] ensure pre-existing splitters initialise ratios --- .../com/hbm/tileentity/network/TileEntityCraneSplitter.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java index a5374eec5..0a196645b 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneSplitter.java @@ -57,8 +57,9 @@ public class TileEntityCraneSplitter extends TileEntityLoadedBase { position = nbt.getBoolean("pos"); remaining = nbt.getByte("count"); - leftRatio = nbt.getByte("left"); - rightRatio = nbt.getByte("right"); + // Make sure existing conveyors are initialised with ratios + leftRatio = (byte)Math.max(nbt.getByte("left"), 1); + rightRatio = (byte)Math.max(nbt.getByte("right"), 1); } @Override From e5cfc9cf2b24fd83392050ac07f1ab5c555f17c9 Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 22 May 2025 12:56:22 +1000 Subject: [PATCH 069/491] add screwdriver info --- src/main/resources/assets/hbm/lang/en_US.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 4d972d4fd..b7cd17203 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5152,7 +5152,7 @@ tile.crane_partitioner.desc=Receives and stores up to nine Ore Acidizer inputs$a tile.crane_router.name=Conveyor Sorter tile.crane_router.desc=Sorts item based on defined criteria$Sides can be defined as blacklist, whitelist or wildcard$Wildcard sides are only chosen if no other filter matches tile.crane_splitter.name=Conveyor Splitter -tile.crane_splitter.desc=Splits items and stacks evenly onto two conveyor belts$Is a conveyor belt itself, so it can directly input into an inserter or sorter +tile.crane_splitter.desc=Splits items and stacks evenly onto two conveyor belts$Is a conveyor belt itself, so it can directly input into an inserter or sorter$Ratio can be configured with a screwdriver tile.crane_unboxer.name=Conveyor Unboxer tile.crane_unboxer.desc=Receives boxes and extracts their contents$Right-click with screwdriver to set output side$Shift-click with screwdriver to set the input side$Click twice to set the opposite side tile.crashed_bomb.name=Dud From d19894fa3d2bad93779716bf9ad624ec4d0c6187 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 22 May 2025 16:36:17 +0200 Subject: [PATCH 070/491] kasane's titos --- src/main/java/com/hbm/items/ModItems.java | 2 ++ .../com/hbm/items/tool/ItemSwordAbility.java | 1 - .../com/hbm/items/weapon/sedna/GunConfig.java | 4 +++ .../weapon/sedna/factory/GunFactory.java | 6 ++--- .../sedna/factory/GunFactoryClient.java | 2 ++ .../weapon/sedna/factory/LegoClient.java | 12 +++++++++ .../weapon/sedna/factory/XFactory50.java | 23 ++++++++++++------ .../com/hbm/main/ModEventHandlerClient.java | 11 +++++++-- src/main/resources/assets/hbm/lang/de_DE.lang | 2 ++ src/main/resources/assets/hbm/lang/en_US.lang | 2 ++ .../items/ammo_secret.bmg50_black.png | Bin 0 -> 325 bytes .../textures/items/ammo_secret.p35_800_bl.png | Bin 0 -> 352 bytes .../textures/items/ammo_standard.bmg50_sm.png | Bin 0 -> 312 bytes 13 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_secret.bmg50_black.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_secret.p35_800_bl.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.bmg50_sm.png diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 41491660c..ecde954ed 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1469,6 +1469,8 @@ public class ModItems { public static Item gun_stinger; public static Item gun_chemthrower; public static Item gun_amat; + public static Item gun_amat_subtlety; + public static Item gun_amat_penance; public static Item gun_m2; public static Item gun_autoshotgun; public static Item gun_autoshotgun_shredder; diff --git a/src/main/java/com/hbm/items/tool/ItemSwordAbility.java b/src/main/java/com/hbm/items/tool/ItemSwordAbility.java index 784a6a764..563a09730 100644 --- a/src/main/java/com/hbm/items/tool/ItemSwordAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemSwordAbility.java @@ -17,7 +17,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; -import net.minecraft.util.EnumChatFormatting; public class ItemSwordAbility extends ItemSword { diff --git a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java index 56455bbb2..65db47377 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java @@ -34,6 +34,7 @@ public class GunConfig { public static final String I_INSPECTCANCEL = "I_INSPECTCANCEL"; public static final String O_CROSSHAIR = "O_CROSSHAIR"; public static final String B_HIDECROSSHAIR = "B_HIDECROSSHAIR"; + public static final String B_THERMALSIGHTS = "B_THERMALSIGHTS"; public static final String B_RELOADREQUIRESTYPECHANGE = "B_RELOADREQUIRESTYPECHANGE"; public static final String B_RELOADANIMATIONSEQUENTIAL = "B_RELOADANIMATIONSEQUENTIAL"; public static final String O_SCOPETEXTURE = "O_SCOPETEXTURE"; @@ -62,6 +63,7 @@ public class GunConfig { protected boolean inspectCancel_DNA = true; protected Crosshair crosshair_DNA; protected boolean hideCrosshair_DNA = true; + protected boolean thermalSights_DNA = false; protected boolean reloadRequiresTypeChange_DNA = false; protected boolean reloadAnimationsSequential_DNA; protected ResourceLocation scopeTexture_DNA; @@ -94,6 +96,7 @@ public class GunConfig { public boolean getInspectCancel(ItemStack stack) { return WeaponModManager.eval(inspectCancel_DNA, stack, I_INSPECTCANCEL, this, this.index); } public Crosshair getCrosshair(ItemStack stack) { return WeaponModManager.eval(crosshair_DNA, stack, O_CROSSHAIR, this, this.index); } public boolean getHideCrosshair(ItemStack stack) { return WeaponModManager.eval(hideCrosshair_DNA, stack, B_HIDECROSSHAIR, this, this.index); } + public boolean hasThermalSights(ItemStack stack) { return WeaponModManager.eval(thermalSights_DNA, stack, B_THERMALSIGHTS, this, this.index); } public boolean getReloadChangesType(ItemStack stack) { return WeaponModManager.eval(reloadRequiresTypeChange_DNA, stack, B_RELOADREQUIRESTYPECHANGE, this, this.index); } public boolean getReloadAnimSequential(ItemStack stack) { return WeaponModManager.eval(reloadAnimationsSequential_DNA, stack, B_RELOADANIMATIONSEQUENTIAL, this, this.index); } public ResourceLocation getScopeTexture(ItemStack stack) { return WeaponModManager.eval(scopeTexture_DNA, stack, O_SCOPETEXTURE, this, this.index); } @@ -124,6 +127,7 @@ public class GunConfig { public GunConfig inspectCancel(boolean flag) { this.inspectCancel_DNA = flag; return this; } public GunConfig crosshair(Crosshair crosshair) { this.crosshair_DNA = crosshair; return this; } public GunConfig hideCrosshair(boolean flag) { this.hideCrosshair_DNA = flag; return this; } + public GunConfig thermalSights(boolean flag) { this.thermalSights_DNA = flag; return this; } public GunConfig reloadChangeType(boolean flag) { this.reloadRequiresTypeChange_DNA = flag; return this; } public GunConfig reloadSequential(boolean flag) { this.reloadAnimationsSequential_DNA = flag; return this; } public GunConfig scopeTexture(ResourceLocation tex) { this.scopeTexture_DNA = tex; return this; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index 98b4f09e8..f389b40a1 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -101,7 +101,7 @@ public class GunFactory { R762_HE, BMG50_HE, G10_EXPLOSIVE, P45_SP, P45_FMJ, P45_JHP, P45_AP, P45_DU, CT_HOOK, CT_MORTAR, CT_MORTAR_CHARGE, - NUKE_BALEFIRE, + NUKE_BALEFIRE, BMG50_SM, //ONLY ADD NEW ENTRIES AT THE BOTTOM TO AVOID SHIFTING! ; @@ -116,7 +116,7 @@ public class GunFactory { P45_SP, P45_FMJ, P45_JHP, P45_AP, P45_DU, R556_SP, R556_FMJ, R556_JHP, R556_AP, R762_SP, R762_FMJ, R762_JHP, R762_AP, R762_DU, R762_HE, - BMG50_SP, BMG50_FMJ, BMG50_JHP, BMG50_AP, BMG50_DU, BMG50_HE, + BMG50_SP, BMG50_FMJ, BMG50_JHP, BMG50_AP, BMG50_DU, BMG50_SM, BMG50_HE, B75, B75_INC, B75_EXP, G12_BP, G12_BP_MAGNUM, G12_BP_SLUG, G12, G12_SLUG, G12_FLECHETTE, G12_MAGNUM, G12_EXPLOSIVE, G12_PHOSPHORUS, G10, G10_SHRAPNEL, G10_DU, G10_SLUG, G10_EXPLOSIVE, @@ -139,7 +139,7 @@ public class GunFactory { public static enum EnumAmmoSecret { FOLLY_SM, FOLLY_NUKE, M44_EQUESTRIAN, G12_EQUESTRIAN, BMG50_EQUESTRIAN, - P35_800 + P35_800, BMG50_BLACK } public static enum EnumModTest { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index ceb18f250..0a42eb594 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -159,6 +159,8 @@ public class GunFactoryClient { bmg50_ap.setRenderer(LegoClient.RENDER_AP_BULLET); bmg50_du.setRenderer(LegoClient.RENDER_DU_BULLET); bmg50_he.setRenderer(LegoClient.RENDER_HE_BULLET); + bmg50_sm.setRenderer(LegoClient.RENDER_SM_BULLET); + bmg50_black.setRenderer(LegoClient.RENDER_BLACK_BULLET); b75.setRenderer(LegoClient.RENDER_AP_BULLET); b75_inc.setRenderer(LegoClient.RENDER_AP_BULLET); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java index ac476aa60..11d4b4012 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java @@ -72,6 +72,18 @@ public class LegoClient { renderBulletStandard(Tessellator.instance, 0xD8CA00, 0xFFF19D, length, true); }; + public static BiConsumer RENDER_SM_BULLET = (bullet, interp) -> { + double length = bullet.prevVelocity + (bullet.velocity - bullet.prevVelocity) * interp; + if(length <= 0) return; + renderBulletStandard(Tessellator.instance, 0x42A8DD, 0xFFFFFF, length, true); + }; + + public static BiConsumer RENDER_BLACK_BULLET = (bullet, interp) -> { + double length = bullet.prevVelocity + (bullet.velocity - bullet.prevVelocity) * interp; + if(length <= 0) return; + renderBulletStandard(Tessellator.instance, 0x000000, 0x7F006E, length, true); + }; + public static BiConsumer RENDER_TRACER_BULLET = (bullet, interp) -> { double length = bullet.prevVelocity + (bullet.velocity - bullet.prevVelocity) * interp; if(length <= 0) return; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java index 075bcf63e..f70d62c0c 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java @@ -14,6 +14,7 @@ import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.items.weapon.sedna.mags.MagazineBelt; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.particle.SpentCasing; @@ -34,6 +35,8 @@ public class XFactory50 { public static BulletConfig bmg50_ap; public static BulletConfig bmg50_du; public static BulletConfig bmg50_he; + public static BulletConfig bmg50_sm; + public static BulletConfig bmg50_black; public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; @@ -41,25 +44,29 @@ public class XFactory50 { }; public static void init() { - SpentCasing casing762 = new SpentCasing(CasingType.BOTTLENECK).setColor(SpentCasing.COLOR_CASE_BRASS).setScale(1.5F); + SpentCasing casing50 = new SpentCasing(CasingType.BOTTLENECK).setColor(SpentCasing.COLOR_CASE_BRASS).setScale(1.5F); bmg50_sp = new BulletConfig().setItem(EnumAmmo.BMG50_SP).setCasing(EnumCasingType.LARGE, 12) - .setCasing(casing762.clone().register("bmg50")); + .setCasing(casing50.clone().register("bmg50")); bmg50_fmj = new BulletConfig().setItem(EnumAmmo.BMG50_FMJ).setCasing(EnumCasingType.LARGE, 12).setDamage(0.8F).setThresholdNegation(7F).setArmorPiercing(0.1F) - .setCasing(casing762.clone().register("bmg50fmj")); + .setCasing(casing50.clone().register("bmg50fmj")); bmg50_jhp = new BulletConfig().setItem(EnumAmmo.BMG50_JHP).setCasing(EnumCasingType.LARGE, 12).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F) - .setCasing(casing762.clone().register("bmg50jhp")); + .setCasing(casing50.clone().register("bmg50jhp")); bmg50_ap = new BulletConfig().setItem(EnumAmmo.BMG50_AP).setCasing(EnumCasingType.LARGE_STEEL, 12).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.25F).setThresholdNegation(17.5F).setArmorPiercing(0.15F) - .setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50ap")); + .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50ap")); bmg50_du = new BulletConfig().setItem(EnumAmmo.BMG50_DU).setCasing(EnumCasingType.LARGE_STEEL, 12).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.5F).setThresholdNegation(21F).setArmorPiercing(0.25F) - .setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50du")); + .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50du")); bmg50_he = new BulletConfig().setItem(EnumAmmo.BMG50_HE).setCasing(EnumCasingType.LARGE_STEEL, 12).setWear(3F).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.75F).setOnImpact(LAMBDA_STANDARD_EXPLODE) - .setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50he")); + .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50he")); + bmg50_sm = new BulletConfig().setItem(EnumAmmo.BMG50_SM).setCasing(EnumCasingType.LARGE_STEEL, 12).setWear(10F).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(2.5F).setThresholdNegation(30F).setArmorPiercing(0.35F) + .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50sm")); + bmg50_black = new BulletConfig().setItem(EnumAmmoSecret.BMG50_BLACK).setWear(5F).setDoesPenetrate(true).setDamageFalloffByPen(false).setSpectral(true).setDamage(1.5F).setHeadshot(3F).setThresholdNegation(30F).setArmorPiercing(0.35F) + .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_EQUESTRIAN).register("bmg50black")); ModItems.gun_amat = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(350).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(XFactory44.scope_lilmac).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(30F).delay(25).dry(25).spreadHipfire(0.05F).reload(51).jam(43).sound("hbm:weapon.fire.amat", 1.0F, 1.0F) - .mag(new MagazineFullReload(0, 7).addConfigs(bmg50_sp, bmg50_fmj, bmg50_jhp, bmg50_ap, bmg50_du, bmg50_he)) + .mag(new MagazineFullReload(0, 7).addConfigs(bmg50_sp, bmg50_fmj, bmg50_jhp, bmg50_ap, bmg50_du, bmg50_sm, bmg50_he)) .offset(1, -0.0625 * 1.5, -0.25D) .setupStandardFire().recoil(LAMBDA_RECOIL_AMAT)) .setupStandardConfiguration() diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 354043ab4..8b3679187 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -1313,14 +1313,21 @@ public class ModEventHandlerClient { if(hudOn) { RenderOverhead.renderMarkers(event.partialTicks); + boolean thermalSights = false; if(ArmorFSB.hasFSBArmor(player)) { ItemStack plate = player.inventory.armorInventory[2]; ArmorFSB chestplate = (ArmorFSB) plate.getItem(); - if(chestplate.thermal) - RenderOverhead.renderThermalSight(event.partialTicks); + if(chestplate.thermal) thermalSights = true; } + + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT) { + ItemGunBaseNT gun = (ItemGunBaseNT) player.getHeldItem().getItem(); + for(int i = 0; i < gun.getConfigCount(); i++) if(gun.getConfig(player.getHeldItem(), i).hasThermalSights(player.getHeldItem())) thermalSights = true; + } + + if(thermalSights) RenderOverhead.renderThermalSight(event.partialTicks); } RenderOverhead.renderActionPreview(event.partialTicks); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 013fca1e3..30106dd14 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1053,6 +1053,7 @@ item.ammo_shell_apfsds_t.name=240mm APFSDS-T item.ammo_shell_explosive.name=240mm HE-Geschoss item.ammo_shell_w9.name=240mm W9-Atomgeschoss item.ammo_secret.bmg50_equestrian.name=.50 BMG Zerstörer +item.ammo_secret.bmg50_black.name=.50 BMG Bypass item.ammo_secret.folly_nuke.name=Silberne Kugel, Atomar item.ammo_secret.folly_sm.name=Silberne Kugel item.ammo_secret.g12_equestrian.name=Kaliber 12 Gleisnägel @@ -1066,6 +1067,7 @@ item.ammo_standard.bmg50_du.name=.50 BMG Patrone (Urangeschoss) item.ammo_standard.bmg50_he.name=.50 BMG Patrone (Explosiv) item.ammo_standard.bmg50_fmj.name=.50 BMG Patrone (Vollmantelgeschoss) item.ammo_standard.bmg50_jhp.name=.50 BMG Patrone (Hohlspitz) +item.ammo_standard.bmg50_sm.name=.50 BMG Patrone (Sternenmetall) item.ammo_standard.bmg50_sp.name=.50 BMG Patrone (Teilmantelgeschoss) item.ammo_standard.capacitor.name=Kondensator (Standard) item.ammo_standard.capacitor_ir.name=Capacitor (niedrige Wellenlänge) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index b7cd17203..02b6a1201 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1778,6 +1778,7 @@ item.ammo_shell_apfsds_t.name=240mm APFSDS-T item.ammo_shell_explosive.name=240mm HE Shell item.ammo_shell_w9.name=240mm W9 Nuclear Shell item.ammo_secret.bmg50_equestrian.name=.50 BMG Demolisher +item.ammo_secret.bmg50_black.name=.50 BMG Bypass Round item.ammo_secret.folly_nuke.name=Silver Bullet, Nuclear item.ammo_secret.folly_sm.name=Silver Bullet item.ammo_secret.g12_equestrian.name=12 Gauge Railway Spike Shot @@ -1791,6 +1792,7 @@ item.ammo_standard.bmg50_du.name=.50 BMG Round (Depleted Uranium) item.ammo_standard.bmg50_he.name=.50 BMG Round (High-Explosive) item.ammo_standard.bmg50_fmj.name=.50 BMG Round (Full Metal Jacket) item.ammo_standard.bmg50_jhp.name=.50 BMG Round (Jacketed Hollow Point) +item.ammo_standard.bmg50_sm.name=.50 BMG Round (Starmetal) item.ammo_standard.bmg50_sp.name=.50 BMG Round (Soft Point) item.ammo_standard.capacitor.name=Capacitor (Standard) item.ammo_standard.capacitor_ir.name=Capacitor (Low Wavelength) diff --git a/src/main/resources/assets/hbm/textures/items/ammo_secret.bmg50_black.png b/src/main/resources/assets/hbm/textures/items/ammo_secret.bmg50_black.png new file mode 100644 index 0000000000000000000000000000000000000000..f76090251795955cab56080426214a9885eda260 GIT binary patch literal 325 zcmV-L0lNN)P)^{ zCAwttV0Ww^z>7(T6v1uYuS;x%6S+!mkxrmbzd!;J2@wgdEMIGlBuQ{BFHy0RSH3%;`GgQ-p|cfA@ei&QR6`0HCT1 zYns`p_ip@KSJ#3wkXV$e1Zc+=g%?*j)1|18yM3Z<%KCo?oJ z9;xk=Ra7WkeE_4wc^PO2Onpu;w_s5yRV5Yh_WsIq`;^+*K369nj8BhISuG|)41jL+Dt~W zW{#$R1AtX@Vi6-etZ)0u<4~}Fc5#UDdyy9T1EfW|0%?$*KvEb;@5QX92$OoWG+UY2K2&Q-8jxzBfxJBRsR2C8kpm0C# zDTq?J+ZHM~!KA^F1sL1eYIaxq>FsEjEL(b(EuDXk_;NY3UatTgV835Qqm}vm!w-kE z?{+_<(@dJ8u20Nn?<^Ldj6o&P6BuPS9mY7*565lU`5F#`Ci=U=xQ~ERH0l33@k*7eD;?{?kNN0kf zNZ%EDk(WRhVrHl+A%x+tRzy6{a~BaWio!)?{0D3!qYt-{_WT$2$cUXQPX~Jd0000< KMNUMnLSTY7c!q2M literal 0 HcmV?d00001 From dc66e5ac048494fecef1a4d0d309764a42c9af51 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 22 May 2025 18:26:41 +0300 Subject: [PATCH 071/491] Conveyor ejector & splitter compat Previously, an ejector ejecting directly into a splitter bypassed the splitting --- .../hbm/tileentity/network/TileEntityCraneExtractor.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index aab0e354d..f539271cb 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -1,6 +1,8 @@ package com.hbm.tileentity.network; import api.hbm.conveyor.IConveyorBelt; +import api.hbm.conveyor.IEnterableBlock; + import com.hbm.entity.item.EntityMovingItem; import com.hbm.inventory.container.ContainerCraneExtractor; import com.hbm.inventory.gui.GUICraneExtractor; @@ -123,6 +125,11 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); moving.setItemStack(stack); worldObj.spawnEntityInWorld(moving); + + if (b instanceof IEnterableBlock) { + ((IEnterableBlock)b).onItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide, moving); + } + hasSent = true; break; } From 3a6f890774da08843e912760773a12812d78aac8 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 22 May 2025 18:43:13 +0300 Subject: [PATCH 072/491] Fix dupe --- .../hbm/tileentity/network/TileEntityCraneExtractor.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index f539271cb..2ce576e1f 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -127,7 +127,12 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU worldObj.spawnEntityInWorld(moving); if (b instanceof IEnterableBlock) { - ((IEnterableBlock)b).onItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide, moving); + IEnterableBlock enterable = (IEnterableBlock) b; + + if(enterable.canItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide, moving)) { + enterable.onItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide, moving); + moving.setDead(); + } } hasSent = true; From 953d120fc668c3905e2532d554f3e52d4ce61723 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 22 May 2025 19:05:55 +0300 Subject: [PATCH 073/491] Fix direction --- .../com/hbm/tileentity/network/TileEntityCraneExtractor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 2ce576e1f..12d5b8208 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -129,8 +129,8 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU if (b instanceof IEnterableBlock) { IEnterableBlock enterable = (IEnterableBlock) b; - if(enterable.canItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide, moving)) { - enterable.onItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide, moving); + if(enterable.canItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide.getOpposite(), moving)) { + enterable.onItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide.getOpposite(), moving); moving.setDead(); } } From f3a88b6afb42a61a47773c1e86898245115c9c95 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 22 May 2025 19:15:39 +0300 Subject: [PATCH 074/491] Apply fix to buffered items --- .../network/TileEntityCraneExtractor.java | 42 +++++++++---------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 12d5b8208..105ceb3fd 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -119,22 +119,7 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU inv.decrStackSize(index, toSend); stack.stackSize = toSend; - EntityMovingItem moving = new EntityMovingItem(worldObj); - Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55); - Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos); - moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); - moving.setItemStack(stack); - worldObj.spawnEntityInWorld(moving); - - if (b instanceof IEnterableBlock) { - IEnterableBlock enterable = (IEnterableBlock) b; - - if(enterable.canItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide.getOpposite(), moving)) { - enterable.onItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide.getOpposite(), moving); - moving.setDead(); - } - } - + sendItem(stack, belt, outputSide); hasSent = true; break; } @@ -154,12 +139,7 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU decrStackSize(i, toSend); stack.stackSize = toSend; - EntityMovingItem moving = new EntityMovingItem(worldObj); - Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55); - Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos); - moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); - moving.setItemStack(stack); - worldObj.spawnEntityInWorld(moving); + sendItem(stack, belt, outputSide); break; } } @@ -171,6 +151,24 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU } } + private void sendItem(ItemStack stack, IConveyorBelt belt, ForgeDirection outputSide) { + EntityMovingItem moving = new EntityMovingItem(worldObj); + Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55); + Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos); + moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); + moving.setItemStack(stack); + worldObj.spawnEntityInWorld(moving); + + if (belt instanceof IEnterableBlock) { + IEnterableBlock enterable = (IEnterableBlock) belt; + + if(enterable.canItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide.getOpposite(), moving)) { + enterable.onItemEnter(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, outputSide.getOpposite(), moving); + moving.setDead(); + } + } + } + @Override public void serialize(ByteBuf buf) { super.serialize(buf); From bf2a4b776fbf0dda1e95a17b0b464bb789761626 Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Fri, 23 May 2025 01:01:34 +0800 Subject: [PATCH 075/491] feat: parallelized explosion calculation and is configurable --- src/main/java/com/hbm/config/BombConfig.java | 6 +- .../entity/logic/EntityNukeExplosionMK5.java | 90 ++-- .../explosion/ExplosionNukeRayBatched.java | 78 ++- .../ExplosionNukeRayParallelized.java | 497 ++++++++++++++++++ .../com/hbm/interfaces/IExplosionRay.java | 9 + 5 files changed, 608 insertions(+), 72 deletions(-) create mode 100644 src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java create mode 100644 src/main/java/com/hbm/interfaces/IExplosionRay.java diff --git a/src/main/java/com/hbm/config/BombConfig.java b/src/main/java/com/hbm/config/BombConfig.java index b49253e35..927ebd3ba 100644 --- a/src/main/java/com/hbm/config/BombConfig.java +++ b/src/main/java/com/hbm/config/BombConfig.java @@ -26,7 +26,8 @@ public class BombConfig { public static int fDelay = 4; public static int limitExplosionLifespan = 0; public static boolean chunkloading = true; - + public static boolean parallelization = true; + public static void loadFromConfig(Configuration config) { final String CATEGORY_NUKES = CommonConfig.CATEGORY_NUKES; @@ -92,7 +93,8 @@ public class BombConfig { Property falloutDelayProp = config.get(CATEGORY_NUKE, "6.04_falloutDelay", 4); falloutDelayProp.comment = "How many ticks to wait for the next fallout chunk computation"; fDelay = falloutDelayProp.getInt(); - + chunkloading = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.XX_enableChunkLoading", "Allows all types of procedural explosions to keep the central chunk loaded.", true); + parallelization = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.XX_enableParallelization", "Allows explosions to use multiple threads.", true); } } diff --git a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java index 3dc6451a8..def573ad7 100644 --- a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java +++ b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java @@ -2,6 +2,7 @@ package com.hbm.entity.logic; import java.util.List; +import com.hbm.interfaces.IExplosionRay; import org.apache.logging.log4j.Level; import com.hbm.config.BombConfig; @@ -9,6 +10,7 @@ import com.hbm.config.GeneralConfig; import com.hbm.entity.effect.EntityFalloutRain; import com.hbm.explosion.ExplosionNukeGeneric; import com.hbm.explosion.ExplosionNukeRayBatched; +import com.hbm.explosion.ExplosionNukeRayParallelized; import com.hbm.main.MainRegistry; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; @@ -22,32 +24,32 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { - + //Strength of the blast public int strength; //How many rays are calculated per tick public int speed; public int length; - + private long explosionStart; public boolean fallout = true; private int falloutAdd = 0; - - ExplosionNukeRayBatched explosion; + + private IExplosionRay explosion; public EntityNukeExplosionMK5(World p_i1582_1_) { super(p_i1582_1_); } - + public EntityNukeExplosionMK5(World world, int strength, int speed, int length) { super(world); this.strength = strength; this.speed = speed; this.length = length; } - + @Override public void onUpdate() { - + if(strength == 0) { this.clearChunkLoader(); this.setDead(); @@ -55,30 +57,34 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { } if(!worldObj.isRemote) loadChunk((int) Math.floor(posX / 16D), (int) Math.floor(posZ / 16D)); - + for(Object player : this.worldObj.playerEntities) { ((EntityPlayer)player).triggerAchievement(MainRegistry.achManhattan); } - + if(!worldObj.isRemote && fallout && explosion != null && this.ticksExisted < 10 && strength >= 75) { radiate(2_500_000F / (this.ticksExisted * 5 + 1), this.length * 2); } - - ExplosionNukeGeneric.dealDamage(this.worldObj, this.posX, this.posY, this.posZ, this.length * 2); - - if(explosion == null) { - explosion = new ExplosionNukeRayBatched(worldObj, (int)this.posX, (int)this.posY, (int)this.posZ, this.strength, this.speed, this.length); - } - - if(!explosion.isAusf3Complete) { - explosion.collectTip(speed * 10); - } else if(explosion.perChunk.size() > 0) { - long start = System.currentTimeMillis(); - - while(explosion.perChunk.size() > 0 && System.currentTimeMillis() < start + BombConfig.mk5) explosion.processChunk(); - - } else if(fallout) { + ExplosionNukeGeneric.dealDamage(this.worldObj, this.posX, this.posY, this.posZ, this.length * 2); + + if(explosion == null) { + explosionStart = System.currentTimeMillis(); + if (BombConfig.parallelization) { + explosion = new ExplosionNukeRayParallelized(worldObj, posX, posY, posZ, + strength, speed, length); + } else { + explosion = new ExplosionNukeRayBatched(worldObj, (int) posX, (int) posY, (int) posZ, + strength, speed, length); + } + } + + if(!explosion.isComplete()) { + explosion.cacheChunksTick(BombConfig.mk5); + explosion.destructionTick(BombConfig.mk5); + } else if(fallout) { + if(GeneralConfig.enableExtendedLogging && explosionStart != 0) + MainRegistry.logger.log(Level.INFO, "[NUKE] Explosion complete. Time elapsed: " + (System.currentTimeMillis() - explosionStart) + "ms"); EntityFalloutRain fallout = new EntityFalloutRain(this.worldObj); fallout.posX = this.posX; fallout.posY = this.posY; @@ -94,35 +100,35 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { this.setDead(); } } - + private void radiate(float rads, double range) { - + List entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(posX, posY, posZ, posX, posY, posZ).expand(range, range, range)); - + for(EntityLivingBase e : entities) { - + Vec3 vec = Vec3.createVectorHelper(e.posX - posX, (e.posY + e.getEyeHeight()) - posY, e.posZ - posZ); double len = vec.lengthVector(); vec = vec.normalize(); - + float res = 0; - + for(int i = 1; i < len; i++) { int ix = (int)Math.floor(posX + vec.xCoord * i); int iy = (int)Math.floor(posY + vec.yCoord * i); int iz = (int)Math.floor(posZ + vec.zCoord * i); - + res += worldObj.getBlock(ix, iy, iz).getExplosionResistance(null); } - + if(res < 1) res = 1; - + float eRads = rads; eRads /= (float)res; eRads /= (float)(len * len); - + ContaminationUtil.contaminate(e, HazardType.RADIATION, ContaminationType.RAD_BYPASS, eRads); } } @@ -136,17 +142,17 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { protected void writeEntityToNBT(NBTTagCompound nbt) { nbt.setInteger("ticksExisted", this.ticksExisted); } - + public static EntityNukeExplosionMK5 statFac(World world, int r, double x, double y, double z) { - + if(GeneralConfig.enableExtendedLogging && !world.isRemote) MainRegistry.logger.log(Level.INFO, "[NUKE] Initialized explosion at " + x + " / " + y + " / " + z + " with strength " + r + "!"); - + if(r == 0) r = 25; - + r *= 2; - + EntityNukeExplosionMK5 mk5 = new EntityNukeExplosionMK5(world); mk5.strength = (int)(r); mk5.speed = (int)Math.ceil(100000 / mk5.strength); @@ -154,14 +160,14 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { mk5.length = mk5.strength / 2; return mk5; } - + public static EntityNukeExplosionMK5 statFacNoRad(World world, int r, double x, double y, double z) { - + EntityNukeExplosionMK5 mk5 = statFac(world, r, x, y ,z); mk5.fallout = false; return mk5; } - + public EntityNukeExplosionMK5 moreFallout(int fallout) { falloutAdd = fallout; return this; diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java index de45a8741..6f7af5e35 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; +import com.hbm.interfaces.IExplosionRay; import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.block.Block; @@ -14,7 +15,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.World; -public class ExplosionNukeRayBatched { +public class ExplosionNukeRayBatched implements IExplosionRay { public HashMap> perChunk = new HashMap(); //for future: optimize blockmap further by using sub-chunks instead of chunks public List orderedChunks = new ArrayList(); @@ -26,7 +27,7 @@ public class ExplosionNukeRayBatched { int strength; int length; - + int speed; int gspNumMax; int gspNum; double gspX; @@ -40,8 +41,8 @@ public class ExplosionNukeRayBatched { this.posY = y; this.posZ = z; this.strength = strength; + this.speed = speed; this.length = length; - // Total number of points this.gspNumMax = (int)(2.5 * Math.PI * Math.pow(this.strength,2)); this.gspNum = 1; @@ -76,7 +77,7 @@ public class ExplosionNukeRayBatched { } public void collectTip(int count) { - + //count = Math.min(count, 10); int amountProcessed = 0; @@ -106,7 +107,7 @@ public class ExplosionNukeRayBatched { double fac = 100 - ((double) i) / ((double) length) * 100; fac *= 0.07D; - + Block block = world.getBlock(iX, iY, iZ); if(!block.getMaterial().isLiquid()) @@ -125,18 +126,18 @@ public class ExplosionNukeRayBatched { break; } } - + for(ChunkCoordIntPair pos : chunkCoords) { List triplets = perChunk.get(pos); - + if(triplets == null) { triplets = new ArrayList(); perChunk.put(pos, triplets); //we re-use the same pos instead of using individualized per-chunk ones to save on RAM } - + triplets.add(lastPos); } - + // Raise one generalized spiral points this.generateGspUp(); @@ -145,20 +146,20 @@ public class ExplosionNukeRayBatched { return; } } - + orderedChunks.addAll(perChunk.keySet()); orderedChunks.sort(comparator); - + isAusf3Complete = true; } - + public static float masqueradeResistance(Block block) { if(block == Blocks.sandstone) return Blocks.stone.getExplosionResistance(null); if(block == Blocks.obsidian) return Blocks.stone.getExplosionResistance(null) * 3; return block.getExplosionResistance(null); } - + /** little comparator for roughly sorting chunks by distance to the center */ public class CoordComparator implements Comparator { @@ -170,15 +171,15 @@ public class ExplosionNukeRayBatched { int diff1 = Math.abs((chunkX - o1.chunkXPos)) + Math.abs((chunkZ - o1.chunkZPos)); int diff2 = Math.abs((chunkX - o2.chunkXPos)) + Math.abs((chunkZ - o2.chunkZPos)); - + return diff1 - diff2; } } public void processChunk() { - + if(this.perChunk.isEmpty()) return; - + ChunkCoordIntPair coord = orderedChunks.get(0); List list = perChunk.get(coord); HashSet toRem = new HashSet(); @@ -186,13 +187,13 @@ public class ExplosionNukeRayBatched { //List toRem = new ArrayList(); int chunkX = coord.chunkXPos; int chunkZ = coord.chunkZPos; - + int enter = (int) (Math.min( Math.abs(posX - (chunkX << 4)), Math.abs(posZ - (chunkZ << 4)))) - 16; //jump ahead to cut back on NOPs - + enter = Math.max(enter, 0); - + for(FloatTriplet triplet : list) { float x = triplet.xCoord; float y = triplet.yCoord; @@ -205,13 +206,13 @@ public class ExplosionNukeRayBatched { int tipX = (int) Math.floor(x); int tipY = (int) Math.floor(y); int tipZ = (int) Math.floor(z); - + boolean inChunk = false; for(int i = enter; i < vec.lengthVector(); i++) { int x0 = (int) Math.floor(posX + pX * i); int y0 = (int) Math.floor(posY + pY * i); int z0 = (int) Math.floor(posZ + pZ * i); - + if(x0 >> 4 != chunkX || z0 >> 4 != chunkZ) { if(inChunk) { break; @@ -219,13 +220,13 @@ public class ExplosionNukeRayBatched { continue; } } - + inChunk = true; if(!world.isAirBlock(x0, y0, z0)) { - + BlockPos pos = new BlockPos(x0, y0, z0); - + if(x0 == tipX && y0 == tipY && z0 == tipZ) { toRemTips.add(pos); } @@ -241,20 +242,41 @@ public class ExplosionNukeRayBatched { world.setBlock(pos.getX(), pos.getY(), pos.getZ(), Blocks.air, 0, 2); } } - + perChunk.remove(coord); orderedChunks.remove(0); } - + protected void handleTip(int x, int y, int z) { world.setBlock(x, y, z, Blocks.air, 0, 3); } - + + @Override + public boolean isComplete() { + return isAusf3Complete && perChunk.isEmpty(); + } + + @Override + public void cacheChunksTick(int time) { + if (!isAusf3Complete) { + // time ignored here since collectTip() did not implement a time limit + collectTip(speed*10); + } + } + + @Override + public void destructionTick(int time) { + if (!isAusf3Complete) return; + long start = System.currentTimeMillis(); + while(!perChunk.isEmpty() && System.currentTimeMillis() < start + time) + processChunk(); + } + public class FloatTriplet { public float xCoord; public float yCoord; public float zCoord; - + public FloatTriplet(float x, float y, float z) { xCoord = x; yCoord = y; diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java new file mode 100644 index 000000000..bc0cf57a8 --- /dev/null +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -0,0 +1,497 @@ +package com.hbm.explosion; + +import com.hbm.interfaces.IExplosionRay; +import com.hbm.main.MainRegistry; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.util.Vec3; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import org.apache.logging.log4j.Level; + +import java.util.*; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicLongArray; + +public class ExplosionNukeRayParallelized implements IExplosionRay { + + private static final int WORLD_HEIGHT = 256; + private static final int BITSET_SIZE = 16 * WORLD_HEIGHT * 16; + private static final int WORDS_PER_SET = BITSET_SIZE >>> 6; // (16*256*16)/64 + + protected final World world; + private final double explosionX, explosionY, explosionZ; + private final int originX, originY, originZ; + private final int strength; + private final int radius; + + private final List directions; + private final ConcurrentMap destructionMap; + private final ConcurrentMap snapshots; + + private final BlockingQueue rayQueue; + private final BlockingQueue cacheQueue; + private final ExecutorService pool; + private final CountDownLatch latch; + private final Thread latchWatcherThread; + private final List orderedChunks; + private volatile boolean collectFinished = false; + private volatile boolean destroyFinished = false; + + + public ExplosionNukeRayParallelized(World world, double x, double y, double z, int strength, int speed, int radius) { + this.world = world; + this.explosionX = x; + this.explosionY = y; + this.explosionZ = z; + + this.originX = (int) Math.floor(x); + this.originY = (int) Math.floor(y); + this.originZ = (int) Math.floor(z); + + this.strength = strength; + this.radius = radius; + + int rayCount = Math.max(0, (int) (2.5 * Math.PI * strength * strength)); + + this.latch = new CountDownLatch(rayCount); + this.destructionMap = new ConcurrentHashMap<>(); + this.snapshots = new ConcurrentHashMap<>(); + this.orderedChunks = new ArrayList<>(); + + this.rayQueue = new LinkedBlockingQueue<>(); + this.cacheQueue = new LinkedBlockingQueue<>(); + + int workers = Math.max(1, Runtime.getRuntime().availableProcessors() - 1); + this.pool = Executors.newWorkStealingPool(workers); + this.directions = generateSphereRays(rayCount); + + for (int i = 0; i < rayCount; i++) rayQueue.add(new RayTask(i)); + for (int i = 0; i < workers; i++) pool.submit(new Worker()); + + this.latchWatcherThread = new Thread(() -> { + try { + latch.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } finally { + collectFinished = true; + } + }, "ExplosionNuke-LatchWatcher-" + System.nanoTime()); + this.latchWatcherThread.setDaemon(true); + this.latchWatcherThread.start(); + } + + private static float getNukeResistance(Block b) { + // if (b.getMaterial().isLiquid()) return 0.1F; + if (b == Blocks.sandstone) return Blocks.stone.getExplosionResistance(null); + if (b == Blocks.obsidian) return Blocks.stone.getExplosionResistance(null) * 3; + return b.getExplosionResistance(null); + } + + @Override + public void cacheChunksTick(int timeBudgetMs) { + if (collectFinished || this.cacheQueue == null) return; + + final long deadline = System.nanoTime() + (timeBudgetMs * 1_000_000L); + while (System.nanoTime() < deadline) { + ChunkKey ck = cacheQueue.poll(); + if (ck == null) break; + snapshots.computeIfAbsent(ck, key -> { + SubChunkSnapshot snap = createSubChunk(key.pos, key.subY); + return snap == null ? SubChunkSnapshot.EMPTY : snap; + }); + } + } + + @Override + public void destructionTick(int timeBudgetMs) { + if (!collectFinished || destroyFinished) return; + final long deadline = System.nanoTime() + timeBudgetMs * 1_000_000L; + + if (orderedChunks.isEmpty() && !destructionMap.isEmpty()) { + orderedChunks.addAll(destructionMap.keySet()); + orderedChunks.sort(Comparator.comparingInt(c -> Math.abs((originX >> 4) - c.chunkXPos) + Math.abs((originZ >> 4) - c.chunkZPos))); + } + + Iterator it = orderedChunks.iterator(); + while (it.hasNext() && System.nanoTime() < deadline) { + ChunkCoordIntPair cp = it.next(); + ConcurrentBitSet bs = destructionMap.get(cp); + if (bs == null) { + it.remove(); + continue; + } + + Chunk chunk = world.getChunkFromChunkCoords(cp.chunkXPos, cp.chunkZPos); + ExtendedBlockStorage[] storages = chunk.getBlockStorageArray(); + boolean ChunkModified = false; + + for (int subY = 0; subY < storages.length; subY++) { + ExtendedBlockStorage storage = storages[subY]; + if (storage == null) continue; + + int yPrimeMin = 255 - ((subY << 4) + 15); + int startBit = yPrimeMin << 8; + int yPrimeMax = 255 - (subY << 4); + int endBit = (yPrimeMax << 8) | 0xFF; + + int bit = bs.nextSetBit(startBit); + if (bit < 0 || bit > endBit) continue; + + while (bit >= 0 && bit <= endBit && System.nanoTime() < deadline) { + int yGlobal = 255 - (bit >>> 8); + int xGlobal = (cp.chunkXPos << 4) | ((bit >>> 4) & 0xF); + int zGlobal = (cp.chunkZPos << 4) | (bit & 0xF); + + if (world.getTileEntity(xGlobal, yGlobal, zGlobal) != null) { + chunk.removeTileEntity(xGlobal & 0xF, yGlobal, zGlobal & 0xF); // world Y + world.removeTileEntity(xGlobal, yGlobal, zGlobal); + } + + int xLocal = xGlobal & 0xF; + int yLocal = yGlobal & 0xF; + int zLocal = zGlobal & 0xF; + storage.func_150818_a(xLocal, yLocal, zLocal, Blocks.air); + storage.setExtBlockMetadata(xLocal, yLocal, zLocal, 0); + ChunkModified = true; + + world.notifyBlocksOfNeighborChange(xGlobal, yGlobal, zGlobal, Blocks.air); + world.markBlockForUpdate(xGlobal, yGlobal, zGlobal); + + world.updateLightByType(EnumSkyBlock.Sky, xGlobal, yGlobal, zGlobal); + world.updateLightByType(EnumSkyBlock.Block, xGlobal, yGlobal, zGlobal); + + bs.clear(bit); + bit = bs.nextSetBit(bit + 1); + } + } + + if (ChunkModified) { + chunk.setChunkModified(); + world.markBlockRangeForRenderUpdate(cp.chunkXPos << 4, 0, cp.chunkZPos << 4, (cp.chunkXPos << 4) | 15, WORLD_HEIGHT - 1, (cp.chunkZPos << 4) | 15); + } + + if (bs.isEmpty()) { + destructionMap.remove(cp); + for (int sy = 0; sy < (WORLD_HEIGHT >> 4); sy++) { + snapshots.remove(new ChunkKey(cp.chunkXPos, cp.chunkZPos, sy)); + } + it.remove(); + } + } + + if (orderedChunks.isEmpty() && destructionMap.isEmpty()) { + destroyFinished = true; + if (pool != null) pool.shutdown(); + } + } + + @Override + public boolean isComplete() { + return collectFinished && destroyFinished; + } + + public void cancel() { + this.collectFinished = true; + this.destroyFinished = true; + + if (this.rayQueue != null) this.rayQueue.clear(); + if (this.cacheQueue != null) this.cacheQueue.clear(); + + if (this.latch != null) { + while (this.latch.getCount() > 0) { + this.latch.countDown(); + } + } + if (this.latchWatcherThread != null && this.latchWatcherThread.isAlive()) { + this.latchWatcherThread.interrupt(); + } + + if (this.pool != null && !this.pool.isShutdown()) { + this.pool.shutdownNow(); + try { + if (!this.pool.awaitTermination(100, TimeUnit.MILLISECONDS)) { + MainRegistry.logger.log(Level.ERROR, "ExplosionNukeRayParallelized thread pool did not terminate promptly on cancel."); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + if (!this.pool.isShutdown()) { + this.pool.shutdownNow(); + } + } + } + if (this.destructionMap != null) this.destructionMap.clear(); + if (this.snapshots != null) this.snapshots.clear(); + if (this.orderedChunks != null) this.orderedChunks.clear(); + } + + private SubChunkSnapshot createSubChunk(ChunkCoordIntPair cpos, int subY) { + if (!world.getChunkProvider().chunkExists(cpos.chunkXPos, cpos.chunkZPos)) { + return SubChunkSnapshot.EMPTY; + } + Chunk chunk = world.getChunkFromChunkCoords(cpos.chunkXPos, cpos.chunkZPos); + ExtendedBlockStorage ebs = chunk.getBlockStorageArray()[subY]; + if (ebs == null || ebs.isEmpty()) { + return SubChunkSnapshot.EMPTY; + } + + short[] data = new short[16 * 16 * 16]; + List palette = new ArrayList<>(); + palette.add(Blocks.air); + Map idxMap = new HashMap<>(); + idxMap.put(Blocks.air, (short) 0); + boolean allAir = true; + + for (int ly = 0; ly < 16; ly++) { + for (int lz = 0; lz < 16; lz++) { + for (int lx = 0; lx < 16; lx++) { + Block block = ebs.getBlockByExtId(lx, ly, lz); + int idx; + if (block == Blocks.air) { + idx = 0; + } else { + allAir = false; + Short e = idxMap.get(block); + if (e == null) { + idxMap.put(block, (short) palette.size()); + palette.add(block); + idx = palette.size() - 1; + } else { + idx = e; + } + } + data[(ly << 8) | (lz << 4) | lx] = (short) idx; + } + } + } + if (allAir) return SubChunkSnapshot.EMPTY; + return new SubChunkSnapshot(palette.toArray(new Block[0]), data); + } + + private List generateSphereRays(int count) { + List list = new ArrayList<>(count); + if (count <= 0) return list; + if (count == 1) { + list.add(Vec3.createVectorHelper(1, 0, 0).normalize()); + return list; + } + double phi = Math.PI * (3.0 - Math.sqrt(5.0)); + for (int i = 0; i < count; i++) { + double y = 1.0 - (i / (double) (count - 1)) * 2.0; + double r = Math.sqrt(1.0 - y * y); + double t = phi * i; + list.add(Vec3.createVectorHelper(Math.cos(t) * r, y, Math.sin(t) * r)); + } + return list; + } + + private static class ChunkKey { + final ChunkCoordIntPair pos; + final int subY; + + ChunkKey(int cx, int cz, int sy) { + this.pos = new ChunkCoordIntPair(cx, cz); + this.subY = sy; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ChunkKey)) return false; + ChunkKey k = (ChunkKey) o; + return subY == k.subY && pos.equals(k.pos); + } + + @Override + public int hashCode() { + return Objects.hash(pos.chunkXPos, pos.chunkZPos, subY); + } + } + + private static class SubChunkSnapshot { + private static final SubChunkSnapshot EMPTY = new SubChunkSnapshot(new Block[]{Blocks.air}, null); + private final Block[] palette; + private final short[] data; + + SubChunkSnapshot(Block[] p, short[] d) { + this.palette = p; + this.data = d; + } + + Block getBlock(int x, int y, int z) { + if (this == EMPTY || data == null) return Blocks.air; + short idx = data[(y << 8) | (z << 4) | x]; + return (idx >= 0 && idx < palette.length) ? palette[idx] : Blocks.air; + } + } + + private static final class ConcurrentBitSet { + private final AtomicLongArray words = new AtomicLongArray(WORDS_PER_SET); + + void set(int bit) { + if (bit < 0 || bit >= BITSET_SIZE) return; + int wd = bit >>> 6; + long m = 1L << (bit & 63); + while (true) { + long o = words.get(wd); + long u = o | m; + if (o == u || words.compareAndSet(wd, o, u)) return; + } + } + + void clear(int bit) { + if (bit < 0 || bit >= BITSET_SIZE) return; + int wd = bit >>> 6; + long m = ~(1L << (bit & 63)); + words.set(wd, words.get(wd) & m); + } + + int nextSetBit(int from) { + if (from < 0) from = 0; + int wd = from >>> 6; + if (wd >= WORDS_PER_SET) return -1; + long w = words.get(wd) & (~0L << (from & 63)); + while (true) { + if (w != 0) return (wd << 6) + Long.numberOfTrailingZeros(w); + if (++wd == WORDS_PER_SET) return -1; + w = words.get(wd); + } + } + + boolean isEmpty() { + for (int i = 0; i < WORDS_PER_SET; i++) if (words.get(i) != 0) return false; + return true; + } + } + + private class Worker implements Runnable { + @Override + public void run() { + try { + while (true) { + if (collectFinished && rayQueue.isEmpty()) break; + RayTask task = rayQueue.poll(100, TimeUnit.MILLISECONDS); + if (task == null) { + if (collectFinished && rayQueue.isEmpty()) break; + continue; + } + task.trace(); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + } + + private class RayTask { + final int dirIndex; + double px, py, pz; + int x, y, z; + float energy; + double tMaxX, tMaxY, tMaxZ, tDeltaX, tDeltaY, tDeltaZ; + int stepX, stepY, stepZ; + boolean initialised = false; + + RayTask(int dirIdx) { + this.dirIndex = dirIdx; + } + + void init() { + Vec3 dir = directions.get(dirIndex); + px = explosionX; + py = explosionY; + pz = explosionZ; + x = originX; + y = originY; + z = originZ; + energy = strength; + + + final double EPS = 1e-6; + double ax = Math.abs(dir.xCoord); + stepX = ax < EPS ? 0 : (dir.xCoord > 0 ? 1 : -1); + double invDx = stepX == 0 ? Double.POSITIVE_INFINITY : 1.0 / ax; + double ay = Math.abs(dir.yCoord); + stepY = ay < EPS ? 0 : (dir.yCoord > 0 ? 1 : -1); + double invDy = stepY == 0 ? Double.POSITIVE_INFINITY : 1.0 / ay; + double az = Math.abs(dir.zCoord); + stepZ = az < EPS ? 0 : (dir.zCoord > 0 ? 1 : -1); + double invDz = stepZ == 0 ? Double.POSITIVE_INFINITY : 1.0 / az; + + tDeltaX = invDx; + tDeltaY = invDy; + tDeltaZ = invDz; + tMaxX = stepX == 0 ? Double.POSITIVE_INFINITY : ((stepX > 0 ? (x + 1 - px) : (px - x)) * invDx); + tMaxY = stepY == 0 ? Double.POSITIVE_INFINITY : ((stepY > 0 ? (y + 1 - py) : (py - y)) * invDy); + tMaxZ = stepZ == 0 ? Double.POSITIVE_INFINITY : ((stepZ > 0 ? (z + 1 - pz) : (pz - z)) * invDz); + initialised = true; + } + + void trace() { + if (!initialised) init(); + if (energy <= 0) { + latch.countDown(); + return; + } + + while (energy > 0) { + if (y < 0 || y >= WORLD_HEIGHT) { + break; + } + double dxBlock = x + 0.5 - explosionX; + double dyBlock = y + 0.5 - explosionY; + double dzBlock = z + 0.5 - explosionZ; + if (dxBlock * dxBlock + dyBlock * dyBlock + dzBlock * dzBlock > radius * radius) { + break; + } + + ChunkKey ck = new ChunkKey(x >> 4, z >> 4, y >> 4); + SubChunkSnapshot snap = snapshots.get(ck); + + if (snap == null) { + cacheQueue.offer(ck); + rayQueue.offer(this); + return; + } + if (snap != SubChunkSnapshot.EMPTY) { + Block block = snap.getBlock(x & 15, y & 15, z & 15); + if (block != Blocks.air) { + float res = getNukeResistance(block); + float resistanceCutoff = 2_000_000F; + if (res >= resistanceCutoff) break; + double distToBlock = Math.sqrt(dxBlock * dxBlock + dyBlock * dyBlock + dzBlock * dzBlock); + double effectiveDist = Math.max(distToBlock, 0.01); + energy -= (float) (Math.pow(res + 1.0, 3.0 * (effectiveDist / radius)) - 1.0); + if (energy > 0) { + ConcurrentBitSet bs = destructionMap.computeIfAbsent(ck.pos, posKey -> new ConcurrentBitSet()); + bs.set(((255 - y) << 8) | ((x & 15) << 4) | (z & 15)); + } else break; + } + } + + if (tMaxX < tMaxY) { + if (tMaxX < tMaxZ) { + x += stepX; + tMaxX += tDeltaX; + } else { + z += stepZ; + tMaxZ += tDeltaZ; + } + } else { + if (tMaxY < tMaxZ) { + y += stepY; + tMaxY += tDeltaY; + } else { + z += stepZ; + tMaxZ += tDeltaZ; + } + } + } + latch.countDown(); + } + } +} diff --git a/src/main/java/com/hbm/interfaces/IExplosionRay.java b/src/main/java/com/hbm/interfaces/IExplosionRay.java new file mode 100644 index 000000000..2ee6ac78b --- /dev/null +++ b/src/main/java/com/hbm/interfaces/IExplosionRay.java @@ -0,0 +1,9 @@ +package com.hbm.interfaces; + +public interface IExplosionRay { + boolean isComplete(); + + void cacheChunksTick(int processTime); + + void destructionTick(int processTime); +} From 9bb9a56452771f7e27ce1bce1490be8c2d18f4d6 Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Fri, 23 May 2025 01:47:29 +0800 Subject: [PATCH 076/491] Fix: setDead() now correctly calls cancel() --- .../java/com/hbm/entity/logic/EntityNukeExplosionMK5.java | 7 +++++++ .../java/com/hbm/explosion/ExplosionNukeRayBatched.java | 7 +++++++ .../com/hbm/explosion/ExplosionNukeRayParallelized.java | 1 + src/main/java/com/hbm/interfaces/IExplosionRay.java | 2 ++ 4 files changed, 17 insertions(+) diff --git a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java index def573ad7..95965c95c 100644 --- a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java +++ b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java @@ -133,6 +133,13 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { } } + @Override + public void setDead(){ + if(explosion != null) + explosion.cancel(); + super.setDead(); + } + @Override protected void readEntityFromNBT(NBTTagCompound nbt) { this.ticksExisted = nbt.getInteger("ticksExisted"); diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java index 6f7af5e35..1d97dfa38 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayBatched.java @@ -272,6 +272,13 @@ public class ExplosionNukeRayBatched implements IExplosionRay { processChunk(); } + @Override + public void cancel() { + isAusf3Complete = true; + if (perChunk != null) perChunk.clear(); + if (orderedChunks != null) orderedChunks.clear(); + } + public class FloatTriplet { public float xCoord; public float yCoord; diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index bc0cf57a8..2c8eb6761 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -195,6 +195,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { return collectFinished && destroyFinished; } + @Override public void cancel() { this.collectFinished = true; this.destroyFinished = true; diff --git a/src/main/java/com/hbm/interfaces/IExplosionRay.java b/src/main/java/com/hbm/interfaces/IExplosionRay.java index 2ee6ac78b..d164b6b27 100644 --- a/src/main/java/com/hbm/interfaces/IExplosionRay.java +++ b/src/main/java/com/hbm/interfaces/IExplosionRay.java @@ -6,4 +6,6 @@ public interface IExplosionRay { void cacheChunksTick(int processTime); void destructionTick(int processTime); + + void cancel(); } From 6a7dabbb1e49bf8103bf8b60040ad9abd507907b Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 22 May 2025 21:45:18 +0200 Subject: [PATCH 077/491] the malicious gigglefish from the silly dimension --- .../hbm/entity/projectile/EntityBuilding.java | 100 ++++++++++-------- src/main/java/com/hbm/items/ModItems.java | 2 + .../sedna/factory/GunFactoryClient.java | 6 +- .../weapon/sedna/factory/XFactory44.java | 11 +- .../weapon/sedna/factory/XFactory50.java | 35 +++++- .../com/hbm/main/ModEventHandlerClient.java | 2 +- .../java/com/hbm/main/ResourceManager.java | 2 + .../item/weapon/sedna/ItemRenderAmat.java | 14 ++- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../textures/models/weapons/amat_penance.png | Bin 0 -> 7938 bytes .../textures/models/weapons/amat_subtlety.png | Bin 0 -> 18642 bytes 12 files changed, 117 insertions(+), 59 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/amat_penance.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/amat_subtlety.png diff --git a/src/main/java/com/hbm/entity/projectile/EntityBuilding.java b/src/main/java/com/hbm/entity/projectile/EntityBuilding.java index 8a8bd653c..3382ac4f0 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBuilding.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBuilding.java @@ -3,13 +3,17 @@ package com.hbm.entity.projectile; import java.util.List; import com.hbm.explosion.ExplosionLarge; +import com.hbm.handler.threading.PacketThreading; import com.hbm.lib.ModDamageSource; +import com.hbm.packet.toclient.AuxParticlePacketNT; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.Entity; import net.minecraft.entity.projectile.EntityThrowable; import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; @@ -22,63 +26,65 @@ public class EntityBuilding extends EntityThrowable { this.ignoreFrustumCheck = true; this.isImmuneToFire = true; } - + @Override public void onUpdate() { + if(!worldObj.isRemote && this.ticksExisted == 1) { + for(int i = 0; i < 100; i++) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "bf"); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, + posX + (rand.nextDouble() - 0.5) * 15, + posY + (rand.nextDouble() - 0.5) * 15, + posZ + (rand.nextDouble() - 0.5) * 15), + new TargetPoint(dimension, posX, posY, posZ, 150)); + } + } this.lastTickPosX = this.prevPosX = posX; this.lastTickPosY = this.prevPosY = posY; this.lastTickPosZ = this.prevPosZ = posZ; this.setPosition(posX + this.motionX, posY + this.motionY, posZ + this.motionZ); - + this.motionY -= 0.03; - if(motionY < -1.5) - motionY = -1.5; - - if(this.worldObj.getBlock((int)this.posX, (int)this.posY, (int)this.posZ) != Blocks.air) - { - this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "hbm:entity.oldExplosion", 10000.0F, 0.5F + this.rand.nextFloat() * 0.1F); - this.setDead(); - ExplosionLarge.spawnParticles(worldObj, posX, posY + 3, posZ, 150); - ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 6); - ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 5); - ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 4); - ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 3); - ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 3); - - List list = (List)worldObj.getEntitiesWithinAABBExcludingEntity(null, - AxisAlignedBB.getBoundingBox(posX - 8, posY - 8, posZ - 8, posX + 8, posY + 8, posZ + 8)); - - for(Entity e : list) { - e.attackEntityFrom(ModDamageSource.building, 1000); - } - - for(int i = 0; i < 250; i++) { - - Vec3 vec = Vec3.createVectorHelper(1, 0, 0); - vec.rotateAroundZ((float) (-rand.nextFloat() * Math.PI / 2)); - vec.rotateAroundY((float) (rand.nextFloat() * Math.PI * 2)); - - EntityRubble rubble = new EntityRubble(worldObj, posX, posY + 3, posZ); - rubble.setMetaBasedOnBlock(Blocks.brick_block, 0); - rubble.motionX = vec.xCoord; - rubble.motionY = vec.yCoord; - rubble.motionZ = vec.zCoord; - worldObj.spawnEntityInWorld(rubble); - } - } - } + if(motionY < -1.5) motionY = -1.5; + + if(this.worldObj.getBlock((int) this.posX, (int) this.posY, (int) this.posZ) != Blocks.air) { + this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "hbm:entity.oldExplosion", 10000.0F, 0.5F + this.rand.nextFloat() * 0.1F); + this.setDead(); + ExplosionLarge.spawnParticles(worldObj, posX, posY + 3, posZ, 150); + ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 6); + ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 5); + ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 4); + ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 3); + ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 3); + + List list = (List) worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(posX - 8, posY - 8, posZ - 8, posX + 8, posY + 8, posZ + 8)); + + for(Entity e : list) e.attackEntityFrom(ModDamageSource.building, 1000); + + for(int i = 0; i < 250; i++) { + + Vec3 vec = Vec3.createVectorHelper(1, 0, 0); + vec.rotateAroundZ((float) (-rand.nextFloat() * Math.PI / 2)); + vec.rotateAroundY((float) (rand.nextFloat() * Math.PI * 2)); + + EntityRubble rubble = new EntityRubble(worldObj, posX, posY + 3, posZ); + rubble.setMetaBasedOnBlock(Blocks.brick_block, 0); + rubble.motionX = vec.xCoord; + rubble.motionY = vec.yCoord; + rubble.motionZ = vec.zCoord; + worldObj.spawnEntityInWorld(rubble); + } + } + } + + @Override protected void onImpact(MovingObjectPosition p_70184_1_) { } @Override - protected void onImpact(MovingObjectPosition p_70184_1_) { - - } - - @Override @SideOnly(Side.CLIENT) - public boolean isInRangeToRenderDist(double distance) - { - return distance < 25000; - } + public boolean isInRangeToRenderDist(double distance) { + return distance < 25000; + } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index ecde954ed..ff7ea8338 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -6410,6 +6410,8 @@ public class ModItems { GameRegistry.registerItem(gun_stinger, gun_stinger.getUnlocalizedName()); GameRegistry.registerItem(gun_chemthrower, gun_chemthrower.getUnlocalizedName()); GameRegistry.registerItem(gun_amat, gun_amat.getUnlocalizedName()); + GameRegistry.registerItem(gun_amat_subtlety, gun_amat_subtlety.getUnlocalizedName()); + GameRegistry.registerItem(gun_amat_penance, gun_amat_penance.getUnlocalizedName()); GameRegistry.registerItem(gun_m2, gun_m2.getUnlocalizedName()); GameRegistry.registerItem(gun_autoshotgun, gun_autoshotgun.getUnlocalizedName()); GameRegistry.registerItem(gun_autoshotgun_shredder, gun_autoshotgun_shredder.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 0a42eb594..58945b2cf 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -70,7 +70,9 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_g3_zebra, new ItemRenderG3(ResourceManager.g3_zebra_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_stinger, new ItemRenderStinger()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_chemthrower, new ItemRenderChemthrower()); - MinecraftForgeClient.registerItemRenderer(ModItems.gun_amat, new ItemRenderAmat()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_amat, new ItemRenderAmat(ResourceManager.amat_tex)); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_amat_subtlety, new ItemRenderAmat(ResourceManager.amat_subtlety_tex)); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_amat_penance, new ItemRenderAmat(ResourceManager.amat_penance_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_m2, new ItemRenderM2()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun, new ItemRenderShredder(ResourceManager.shredder_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_autoshotgun_shredder, new ItemRenderShredder(ResourceManager.shredder_orig_tex)); @@ -258,6 +260,8 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_stinger) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_chemthrower) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_amat) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_amat_subtlety) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_amat_penance) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_m2) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_autoshotgun) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_autoshotgun_shredder) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java index 5a97bc4b5..345ab3d4d 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java @@ -58,12 +58,11 @@ public class XFactory44 { }; public static BiConsumer LAMBDA_TORPEDO = (bullet, mop) -> { - EntityTorpedo pippo = new EntityTorpedo(bullet.worldObj); - pippo.posX = mop.hitVec.xCoord; - pippo.posY = mop.hitVec.yCoord + 50; - pippo.posZ = mop.hitVec.zCoord;; - bullet.worldObj.spawnEntityInWorld(pippo); - //bullet.worldObj.playSoundEffect(pippo.posX, pippo.posY + 50, pippo.posZ, "hbm:alarm.trainHorn", 100F, 1F); + EntityTorpedo murky = new EntityTorpedo(bullet.worldObj); + murky.posX = mop.hitVec.xCoord; + murky.posY = mop.hitVec.yCoord + 50; + murky.posZ = mop.hitVec.zCoord;; + bullet.worldObj.spawnEntityInWorld(murky); bullet.setDead(); }; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java index f70d62c0c..b969bdfa8 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java @@ -3,6 +3,7 @@ package com.hbm.items.weapon.sedna.factory; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import com.hbm.entity.projectile.EntityBuilding; import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.items.ModItems; import com.hbm.items.ItemEnums.EnumCasingType; @@ -37,6 +38,16 @@ public class XFactory50 { public static BulletConfig bmg50_he; public static BulletConfig bmg50_sm; public static BulletConfig bmg50_black; + public static BulletConfig bmg50_equestrian; + + public static BiConsumer LAMBDA_BUILDING = (bullet, mop) -> { + EntityBuilding silver = new EntityBuilding(bullet.worldObj); + silver.posX = mop.hitVec.xCoord; + silver.posY = mop.hitVec.yCoord + 50; + silver.posZ = mop.hitVec.zCoord;; + bullet.worldObj.spawnEntityInWorld(silver); + bullet.setDead(); + }; public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3 && mop.entityHit == bullet.getThrower()) return; @@ -61,7 +72,9 @@ public class XFactory50 { .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50sm")); bmg50_black = new BulletConfig().setItem(EnumAmmoSecret.BMG50_BLACK).setWear(5F).setDoesPenetrate(true).setDamageFalloffByPen(false).setSpectral(true).setDamage(1.5F).setHeadshot(3F).setThresholdNegation(30F).setArmorPiercing(0.35F) .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_EQUESTRIAN).register("bmg50black")); - + bmg50_equestrian = new BulletConfig().setItem(EnumAmmoSecret.BMG50_EQUESTRIAN).setDamage(0F).setOnImpact(LAMBDA_BUILDING) + .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_EQUESTRIAN).register("bmg50equestrian")); + ModItems.gun_amat = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(350).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(XFactory44.scope_lilmac).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) @@ -72,6 +85,26 @@ public class XFactory50 { .setupStandardConfiguration() .anim(LAMBDA_AMAT_ANIMS).orchestra(Orchestras.ORCHESTRA_AMAT) ).setUnlocalizedName("gun_amat"); + ModItems.gun_amat_subtlety = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() + .dura(1_000).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(XFactory44.scope_lilmac).smoke(LAMBDA_SMOKE) + .rec(new Receiver(0) + .dmg(50F).delay(25).dry(25).spreadHipfire(0.05F).reload(51).jam(43).sound("hbm:weapon.fire.amat", 1.0F, 1.0F) + .mag(new MagazineFullReload(0, 7).addConfigs(bmg50_equestrian, bmg50_sp, bmg50_fmj, bmg50_jhp, bmg50_ap, bmg50_du, bmg50_sm, bmg50_he)) + .offset(1, -0.0625 * 1.5, -0.25D) + .setupStandardFire().recoil(LAMBDA_RECOIL_AMAT)) + .setupStandardConfiguration() + .anim(LAMBDA_AMAT_ANIMS).orchestra(Orchestras.ORCHESTRA_AMAT) + ).setUnlocalizedName("gun_amat_subtlety"); + ModItems.gun_amat_penance = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() + .dura(5_000).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(XFactory44.scope_lilmac).thermalSights(true).smoke(LAMBDA_SMOKE) + .rec(new Receiver(0) + .dmg(45F).delay(25).dry(25).spreadHipfire(0F).reload(51).jam(43).sound("hbm:weapon.silencerShoot", 1.0F, 1.0F) + .mag(new MagazineFullReload(0, 7).addConfigs(bmg50_sp, bmg50_fmj, bmg50_jhp, bmg50_ap, bmg50_du, bmg50_sm, bmg50_he, bmg50_black)) + .offset(1, -0.0625 * 1.5, -0.25D) + .setupStandardFire().recoil(LAMBDA_RECOIL_AMAT)) + .setupStandardConfiguration() + .anim(LAMBDA_AMAT_ANIMS).orchestra(Orchestras.ORCHESTRA_AMAT) + ).setUnlocalizedName("gun_amat_penance"); ModItems.gun_m2 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(10).inspect(31).crosshair(Crosshair.L_CIRCLE).smoke(LAMBDA_SMOKE) diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 8b3679187..4af2dd3c3 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -1322,7 +1322,7 @@ public class ModEventHandlerClient { if(chestplate.thermal) thermalSights = true; } - if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT) { + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT && ItemGunBaseNT.aimingProgress == 1) { ItemGunBaseNT gun = (ItemGunBaseNT) player.getHeldItem().getItem(); for(int i = 0; i < gun.getConfigCount(); i++) if(gun.getConfig(player.getHeldItem(), i).hasThermalSights(player.getHeldItem())) thermalSights = true; } diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index c729a7779..9d0008cff 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -998,6 +998,8 @@ public class ResourceManager { public static final ResourceLocation g3_black_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_polymer_black.png"); public static final ResourceLocation g3_attachments = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_attachments.png"); public static final ResourceLocation amat_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/amat.png"); + public static final ResourceLocation amat_subtlety_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/amat_subtlety.png"); + public static final ResourceLocation amat_penance_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/amat_penance.png"); public static final ResourceLocation shredder_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder.png"); public static final ResourceLocation shredder_orig_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder_orig.png"); public static final ResourceLocation sexy_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sexy.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java index 9957c23e1..b66f0e893 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java @@ -2,6 +2,7 @@ package com.hbm.render.item.weapon.sedna; import org.lwjgl.opengl.GL11; +import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.mods.WeaponModManager; import com.hbm.main.ResourceManager; @@ -9,8 +10,15 @@ import com.hbm.render.anim.HbmAnimations; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; public class ItemRenderAmat extends ItemRenderWeaponBase { + + public ResourceLocation texture; + + public ItemRenderAmat(ResourceLocation texture) { + this.texture = texture; + } @Override protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.5F; } @@ -38,7 +46,7 @@ public class ItemRenderAmat extends ItemRenderWeaponBase { if(isScoped && ItemGunBaseNT.prevAimingProgress == 1 && ItemGunBaseNT.aimingProgress == 1) return; ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.amat_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(texture); double scale = 0.375D; GL11.glScaled(scale, scale, scale); @@ -177,7 +185,7 @@ public class ItemRenderAmat extends ItemRenderWeaponBase { GL11.glEnable(GL11.GL_LIGHTING); GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.amat_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(texture); ResourceManager.amat.renderPart("Gun"); ResourceManager.amat.renderPart("Bolt"); ResourceManager.amat.renderPart("Magazine"); @@ -202,6 +210,6 @@ public class ItemRenderAmat extends ItemRenderWeaponBase { } public boolean isSilenced(ItemStack stack) { - return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER); + return stack.getItem() == ModItems.gun_amat_penance || WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER); } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 30106dd14..636c57c0f 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2071,6 +2071,8 @@ item.gun_aberrator_eott.name=Eyes Of The Tempest item.gun_am180.name=.22er Maschinenpistole item.gun_am180_silenced.name=Schallgedämpfte .22er Maschinenpistole item.gun_amat.name=Panzerbüchse +item.gun_amat_penance.name=Penance +item.gun_amat_subtlety.name=Subtlety item.gun_autoshotgun.name=Auto-Flinte item.gun_autoshotgun_sexy.name=Sexy item.gun_autoshotgun_shredder.name=Shredder diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 02b6a1201..d234ba27d 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2882,6 +2882,8 @@ item.gun_aberrator_eott.name=Eyes Of The Tempest item.gun_am180.name=.22 Submachine Gun item.gun_am180_silenced.name=Silenced .22 Submachine Gun item.gun_amat.name=Anti-Materiel Rifle +item.gun_amat_penance.name=Penance +item.gun_amat_subtlety.name=Subtlety item.gun_autoshotgun.name=Auto Shotgun item.gun_autoshotgun_sexy.name=Sexy item.gun_autoshotgun_shredder.name=Shredder diff --git a/src/main/resources/assets/hbm/textures/models/weapons/amat_penance.png b/src/main/resources/assets/hbm/textures/models/weapons/amat_penance.png new file mode 100644 index 0000000000000000000000000000000000000000..42f4c9c05a252ac795c4061ee864174627d5fa76 GIT binary patch literal 7938 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/amat_subtlety.png b/src/main/resources/assets/hbm/textures/models/weapons/amat_subtlety.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a85587313e59f57ab3f083bdf734129f9eb3da GIT binary patch literal 18642 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 v9p3%QCBLE7)Y?r0fj}S-2m}IwK!E=P$Q Date: Fri, 23 May 2025 00:40:45 +0300 Subject: [PATCH 078/491] Fix strand caster Also refactor it in the process, for good measure --- .../TileEntityMachineStrandCaster.java | 105 +++++++++--------- 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index bc7eb46b6..56cc4629d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -60,13 +60,11 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase this.lastAmount = this.amount; } - if(this.amount >= this.getCapacity()) { - // In case of overfill problems, spit out the excess as scrap - if(amount > getCapacity()) { - ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(type, Math.max(amount - getCapacity(), 0))); - EntityItem item = new EntityItem(worldObj, xCoord + 0.5, yCoord + 2, zCoord + 0.5, scrap); - worldObj.spawnEntityInWorld(item); - } + // In case of overfill problems, spit out the excess as scrap + if(amount > getCapacity()) { + ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(type, Math.max(amount - getCapacity(), 0))); + EntityItem item = new EntityItem(worldObj, xCoord + 0.5, yCoord + 2, zCoord + 0.5, scrap); + worldObj.spawnEntityInWorld(item); this.amount = this.getCapacity(); } @@ -78,63 +76,70 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase ItemMold.Mold mold = this.getInstalledMold(); - if(mold != null) { - - int itemsCasted = amount / mold.getCost(); - - if(canProcess(itemsCasted)) { - int minAmount = mold.getCost() * 9; - - // Makes it flush the buffers after 10 seconds of inactivity - if(worldObj.getWorldTime() >= lastCastTick + 200) { - minAmount = mold.getCost(); - } - - if(this.amount >= minAmount) { - - for(int j = 0; j < itemsCasted; j++) { - this.amount -= mold.getCost(); - - ItemStack out = mold.getOutput(type); - - for(int i = 1; i < 7; i++) { - if(slots[i] == null) { - slots[i] = out.copy(); - break; - } - - if(slots[i].isItemEqual(out) && slots[i].stackSize + out.stackSize <= out.getMaxStackSize()) { - slots[i].stackSize += out.stackSize; - break; - } - - } + if (mold != null) { + int itemsCasted = maxProcessable(); + + // Makes it flush the buffers after 10 seconds of inactivity, or when they're full + if (itemsCasted == 10 || worldObj.getWorldTime() >= lastCastTick + 200) { + + this.amount -= itemsCasted * mold.getCost(); + + ItemStack out = mold.getOutput(type); + int remaining = out.stackSize * itemsCasted; + out.stackSize = out.getMaxStackSize(); + + for (int i = 1; i < 7; i++) { + if (remaining <= 0) { + break; + } + + if (slots[i] == null) { + slots[i] = new ItemStack(out.getItem(), 0, out.getItemDamage()); + } + + if (slots[i].isItemEqual(out)) { + int toDeposit = Math.min(remaining, out.stackSize - slots[i].stackSize); + slots[i].stackSize += toDeposit; + remaining -= toDeposit; } - markChanged(); - - water.setFill(water.getFill() - getWaterRequired() * itemsCasted); - steam.setFill(steam.getFill() + getWaterRequired() * itemsCasted); - - lastCastTick = worldObj.getWorldTime(); } + + markChanged(); + + water.setFill(water.getFill() - getWaterRequired() * itemsCasted); + steam.setFill(steam.getFill() + getWaterRequired() * itemsCasted); } + + lastCastTick = worldObj.getWorldTime(); } networkPackNT(150); } } - public boolean canProcess(int itemsCasted) { + private int maxProcessable() { ItemMold.Mold mold = this.getInstalledMold(); - if(type != null && mold != null && mold.getOutput(type) != null) { - for(int i = 1; i < 7; i++) { - if(slots[i] == null || slots[i].isItemEqual(mold.getOutput(type)) && slots[i].stackSize + mold.getOutput(type).stackSize <= mold.getOutput(type).getMaxStackSize()) - return water.getFill() >= getWaterRequired() * itemsCasted && steam.getFill() + getWaterRequired() <= steam.getMaxFill(); + if (type == null || mold == null || mold.getOutput(type) != null) { + return 0; + } + int freeSlots = 0; + final int stackLimit = mold.getOutput(type).getMaxStackSize(); + + for (int i = 1; i < 7; i++) { + if (slots[i] == null) { + freeSlots += stackLimit; + } else if (slots[i].isItemEqual(mold.getOutput(type))) { + freeSlots += stackLimit - slots[i].stackSize; } } - return false; + int itemsCasted = amount / mold.getCost(); + itemsCasted = Math.min(itemsCasted, freeSlots / mold.getOutput(type).stackSize); + itemsCasted = Math.min(itemsCasted, water.getFill() / getWaterRequired()); + itemsCasted = Math.min(itemsCasted, (steam.getMaxFill() - steam.getFill()) / getWaterRequired()); + + return itemsCasted; } public DirPos[] getFluidConPos() { From 81ca498fa8019a9a3d0ab1871e8a896d04520d13 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 23 May 2025 00:57:21 +0300 Subject: [PATCH 079/491] Fix strand caster 2: electric boogaloo Like, only cast if there is anything to cast, duh --- .../TileEntityMachineStrandCaster.java | 66 +++++++++---------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index 56cc4629d..dbc955b2e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -74,45 +74,43 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase this.updateConnections(); - ItemMold.Mold mold = this.getInstalledMold(); + int moldsToCast = maxProcessable(); + + // Makes it flush the buffers after 10 seconds of inactivity, or when they're full + if (moldsToCast > 0 && (moldsToCast == 10 || worldObj.getWorldTime() >= lastCastTick + 200)) { - if (mold != null) { - int itemsCasted = maxProcessable(); - - // Makes it flush the buffers after 10 seconds of inactivity, or when they're full - if (itemsCasted == 10 || worldObj.getWorldTime() >= lastCastTick + 200) { - - this.amount -= itemsCasted * mold.getCost(); + ItemMold.Mold mold = this.getInstalledMold(); + + this.amount -= moldsToCast * mold.getCost(); - ItemStack out = mold.getOutput(type); - int remaining = out.stackSize * itemsCasted; - out.stackSize = out.getMaxStackSize(); + ItemStack out = mold.getOutput(type); + int remaining = out.stackSize * moldsToCast; + out.stackSize = out.getMaxStackSize(); - for (int i = 1; i < 7; i++) { - if (remaining <= 0) { - break; - } - - if (slots[i] == null) { - slots[i] = new ItemStack(out.getItem(), 0, out.getItemDamage()); - } - - if (slots[i].isItemEqual(out)) { - int toDeposit = Math.min(remaining, out.stackSize - slots[i].stackSize); - slots[i].stackSize += toDeposit; - remaining -= toDeposit; - } + for (int i = 1; i < 7; i++) { + if (remaining <= 0) { + break; } - markChanged(); + if (slots[i] == null) { + slots[i] = new ItemStack(out.getItem(), 0, out.getItemDamage()); + } - water.setFill(water.getFill() - getWaterRequired() * itemsCasted); - steam.setFill(steam.getFill() + getWaterRequired() * itemsCasted); + if (slots[i].isItemEqual(out)) { + int toDeposit = Math.min(remaining, out.stackSize - slots[i].stackSize); + slots[i].stackSize += toDeposit; + remaining -= toDeposit; + } } - lastCastTick = worldObj.getWorldTime(); + markChanged(); + + water.setFill(water.getFill() - getWaterRequired() * moldsToCast); + steam.setFill(steam.getFill() + getWaterRequired() * moldsToCast); } + lastCastTick = worldObj.getWorldTime(); + networkPackNT(150); } } @@ -134,12 +132,12 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase } } - int itemsCasted = amount / mold.getCost(); - itemsCasted = Math.min(itemsCasted, freeSlots / mold.getOutput(type).stackSize); - itemsCasted = Math.min(itemsCasted, water.getFill() / getWaterRequired()); - itemsCasted = Math.min(itemsCasted, (steam.getMaxFill() - steam.getFill()) / getWaterRequired()); + int moldsToCast = amount / mold.getCost(); + moldsToCast = Math.min(moldsToCast, freeSlots / mold.getOutput(type).stackSize); + moldsToCast = Math.min(moldsToCast, water.getFill() / getWaterRequired()); + moldsToCast = Math.min(moldsToCast, (steam.getMaxFill() - steam.getFill()) / getWaterRequired()); - return itemsCasted; + return moldsToCast; } public DirPos[] getFluidConPos() { From d3e839a9bb2dc41ad76c86ca60df776a2f1d8ffd Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 23 May 2025 01:08:27 +0300 Subject: [PATCH 080/491] Don't modify the out stack Just in case, IDK --- .../hbm/tileentity/machine/TileEntityMachineStrandCaster.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index dbc955b2e..4155303d4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -85,7 +85,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase ItemStack out = mold.getOutput(type); int remaining = out.stackSize * moldsToCast; - out.stackSize = out.getMaxStackSize(); + final int maxStackSize = out.getMaxStackSize(); for (int i = 1; i < 7; i++) { if (remaining <= 0) { @@ -97,7 +97,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase } if (slots[i].isItemEqual(out)) { - int toDeposit = Math.min(remaining, out.stackSize - slots[i].stackSize); + int toDeposit = Math.min(remaining, maxStackSize - slots[i].stackSize); slots[i].stackSize += toDeposit; remaining -= toDeposit; } From 41189e5f25c734e866e9fa5f773118835636ac25 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 23 May 2025 01:42:12 +0300 Subject: [PATCH 081/491] I fixed it so good it stopped working But now it does again. I'm just silly like that sometimes --- .../machine/TileEntityMachineStrandCaster.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index 4155303d4..84c56ab7c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -11,6 +11,7 @@ import com.hbm.inventory.material.Mats; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMold; import com.hbm.items.machine.ItemScraps; +import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; @@ -77,7 +78,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase int moldsToCast = maxProcessable(); // Makes it flush the buffers after 10 seconds of inactivity, or when they're full - if (moldsToCast > 0 && (moldsToCast == 10 || worldObj.getWorldTime() >= lastCastTick + 200)) { + if (moldsToCast > 0 && (moldsToCast >= 9 || worldObj.getWorldTime() >= lastCastTick + 200)) { ItemMold.Mold mold = this.getInstalledMold(); @@ -107,9 +108,9 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase water.setFill(water.getFill() - getWaterRequired() * moldsToCast); steam.setFill(steam.getFill() + getWaterRequired() * moldsToCast); - } - lastCastTick = worldObj.getWorldTime(); + lastCastTick = worldObj.getWorldTime(); + } networkPackNT(150); } @@ -117,7 +118,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase private int maxProcessable() { ItemMold.Mold mold = this.getInstalledMold(); - if (type == null || mold == null || mold.getOutput(type) != null) { + if (type == null || mold == null || mold.getOutput(type) == null) { return 0; } From 933ecded5d2b974d3f9eb66f46bb1ebf160a17be Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 23 May 2025 13:16:08 +1000 Subject: [PATCH 082/491] send recipe JSON to all clients connecting to a server (does nothing in singleplayer, can be disabled via config) --- .../java/com/hbm/config/GeneralConfig.java | 3 + .../recipes/loader/SerializableRecipe.java | 143 ++++++++++-------- .../java/com/hbm/main/ModEventHandler.java | 40 ++++- .../java/com/hbm/packet/PacketDispatcher.java | 2 + .../toclient/SerializableRecipePacket.java | 76 ++++++++++ 5 files changed, 201 insertions(+), 63 deletions(-) create mode 100644 src/main/java/com/hbm/packet/toclient/SerializableRecipePacket.java diff --git a/src/main/java/com/hbm/config/GeneralConfig.java b/src/main/java/com/hbm/config/GeneralConfig.java index c21bd980d..ed0f1af67 100644 --- a/src/main/java/com/hbm/config/GeneralConfig.java +++ b/src/main/java/com/hbm/config/GeneralConfig.java @@ -38,6 +38,7 @@ public class GeneralConfig { public static boolean enableGuideBook = true; public static boolean enableSoundExtension = true; public static boolean enableMekanismChanges = true; + public static boolean enableServerRecipeSync = true; public static int normalSoundChannels = 200; public static boolean enableExpensiveMode = false; @@ -81,6 +82,8 @@ public class GeneralConfig { packetThreadingMaxCount = config.get(CATEGORY_GENERAL, "0.03_packetThreadingMaxCount", 1, "Maximum number of threads to create for packet threading. Must be greater than or equal to 0.02_packetThreadingCoreCount.").getInt(1); packetThreadingErrorBypass = config.get(CATEGORY_GENERAL, "0.04_packetThreadingErrorBypass", false, "Forces the bypassing of most packet threading errors, only enable this if directed to or if you know what you're doing.").getBoolean(false); + enableServerRecipeSync = config.get(CATEGORY_GENERAL, "0.05_enableServerRecipeSync", true, "Syncs any recipes customised via JSON to clients connecting to the server.").getBoolean(true); + enableDebugMode = config.get(CATEGORY_GENERAL, "1.00_enableDebugMode", false, "Enable debugging mode").getBoolean(false); enableMycelium = config.get(CATEGORY_GENERAL, "1.01_enableMyceliumSpread", false, "Allows glowing mycelium to spread").getBoolean(false); enablePlutoniumOre = config.get(CATEGORY_GENERAL, "1.02_enablePlutoniumNetherOre", false, "Enables plutonium ore generation in the nether").getBoolean(false); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 753fb048f..8247bff1a 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -1,15 +1,12 @@ package com.hbm.inventory.recipes.loader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; +import java.io.*; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import com.google.gson.Gson; import com.google.gson.JsonArray; @@ -35,17 +32,19 @@ import net.minecraft.item.ItemStack; //the anti-spaghetti. this class provides so much functionality and saves so much time, i just love you, SerializableRecipe <3 public abstract class SerializableRecipe { - + public static final Gson gson = new Gson(); - public static List recipeHandlers = new ArrayList(); - public static List additionalListeners = new ArrayList(); - + public static List recipeHandlers = new ArrayList<>(); + public static List additionalListeners = new ArrayList<>(); + + public static Map recipeSyncHandlers = new HashMap<>(); + public boolean modified = false; - + /* * INIT */ - + public static void registerAllHandlers() { recipeHandlers.add(new PressRecipes()); recipeHandlers.add(new BlastFurnaceRecipes()); @@ -82,67 +81,90 @@ public abstract class SerializableRecipe { //AFTER Assembler recipeHandlers.add(new AnvilRecipes()); recipeHandlers.add(new PedestalRecipes()); - + recipeHandlers.add(new MatDistribution()); recipeHandlers.add(new CustomMachineRecipes()); //AFTER MatDistribution recipeHandlers.add(new ArcFurnaceRecipes()); } - + public static void initialize() { File recDir = new File(MainRegistry.configDir.getAbsolutePath() + File.separatorChar + "hbmRecipes"); - + if(!recDir.exists()) { if(!recDir.mkdir()) { throw new IllegalStateException("Unable to make recipe directory " + recDir.getAbsolutePath()); } } - + File info = new File(recDir.getAbsolutePath() + File.separatorChar + "REMOVE UNDERSCORE TO ENABLE RECIPE LOADING - RECIPES WILL RESET TO DEFAULT OTHERWISE"); try { info.createNewFile(); } catch(IOException e) { } - + MainRegistry.logger.info("Starting recipe init!"); - + for(SerializableRecipe recipe : recipeHandlers) { - + recipe.deleteRecipes(); - + File recFile = new File(recDir.getAbsolutePath() + File.separatorChar + recipe.getFileName()); - if(recFile.exists() && recFile.isFile()) { + if(recipeSyncHandlers.containsKey(recipe.getFileName())) { + MainRegistry.logger.info("Reading synced recipe file " + recipe.getFileName()); + InputStream stream = recipeSyncHandlers.get(recipe.getFileName()); + + try { + stream.reset(); + Reader reader = new InputStreamReader(stream); + recipe.readRecipeStream(reader); + recipe.modified = true; + } catch(IOException ex) { + MainRegistry.logger.error("Failed to reset synced recipe stream", ex); + } + } else if(recFile.exists() && recFile.isFile()) { MainRegistry.logger.info("Reading recipe file " + recFile.getName()); recipe.readRecipeFile(recFile); recipe.modified = true; } else { MainRegistry.logger.info("No recipe file found, registering defaults for " + recipe.getFileName()); recipe.registerDefaults(); - + for(IRecipeRegisterListener listener : additionalListeners) { listener.onRecipeLoad(recipe.getClass().getSimpleName()); } - + File recTemplate = new File(recDir.getAbsolutePath() + File.separatorChar + "_" + recipe.getFileName()); MainRegistry.logger.info("Writing template file " + recTemplate.getName()); recipe.writeTemplateFile(recTemplate); recipe.modified = false; } - + recipe.registerPost(); } - + MainRegistry.logger.info("Finished recipe init!"); } + public static void receiveRecipes(String filename, byte[] data) { + recipeSyncHandlers.put(filename, new ByteArrayInputStream(data)); + } + + public static void clearReceivedRecipes() { + boolean hasCleared = !recipeSyncHandlers.isEmpty(); + recipeSyncHandlers.clear(); + + if(hasCleared) initialize(); + } + /* * ABSTRACT */ - + /** The machine's (or process') name used for the recipe file */ public abstract String getFileName(); /** Return the list object holding all the recipes, usually an ArrayList or HashMap */ public abstract Object getRecipeObject(); /** Will use the supplied JsonElement (usually casts to JsonArray) from the over arching recipe array and adds the recipe to the recipe list object */ public abstract void readRecipe(JsonElement recipe); - /** Is given a single recipe from the recipe list object (a wrapper, Tuple, array, HashMap Entry, etc) and writes it to the current ongoing GSON stream + /** Is given a single recipe from the recipe list object (a wrapper, Tuple, array, HashMap Entry, etc) and writes it to the current ongoing GSON stream * @throws IOException */ public abstract void writeRecipe(Object recipe, JsonWriter writer) throws IOException; /** Registers the default recipes */ @@ -155,45 +177,45 @@ public abstract class SerializableRecipe { public String getComment() { return null; } - + /* * JSON R/W WRAPPERS */ - + public void writeTemplateFile(File template) { - + try { /* Get the recipe list object */ Object recipeObject = this.getRecipeObject(); List recipeList = new ArrayList(); - + /* Try to pry all recipes from our list */ if(recipeObject instanceof Collection) { recipeList.addAll((Collection) recipeObject); - + } else if(recipeObject instanceof HashMap) { recipeList.addAll(((HashMap) recipeObject).entrySet()); } - + if(recipeList.isEmpty()) throw new IllegalStateException("Error while writing recipes for " + this.getClass().getSimpleName() + ": Recipe list is either empty or in an unsupported format!"); - + JsonWriter writer = new JsonWriter(new FileWriter(template)); writer.setIndent(" "); //pretty formatting writer.beginObject(); //initial '{' - + if(this.getComment() != null) { writer.name("comment").value(this.getComment()); } - + writer.name("recipes").beginArray(); //all recipes are stored in an array called "recipes" - + for(Object recipe : recipeList) { writer.beginObject(); //begin object for a single recipe this.writeRecipe(recipe, writer); //serialize here writer.endObject(); //end recipe object } - + writer.endArray(); //end recipe array writer.endObject(); //final '}' writer.close(); @@ -201,22 +223,25 @@ public abstract class SerializableRecipe { ex.printStackTrace(); } } - + public void readRecipeFile(File file) { - try { - JsonObject json = gson.fromJson(new FileReader(file), JsonObject.class); - JsonArray recipes = json.get("recipes").getAsJsonArray(); - for(JsonElement recipe : recipes) { - this.readRecipe(recipe); - } + readRecipeStream(new FileReader(file)); } catch(FileNotFoundException ex) { } } - + + public void readRecipeStream(Reader reader) { + JsonObject json = gson.fromJson(reader, JsonObject.class); + JsonArray recipes = json.get("recipes").getAsJsonArray(); + for(JsonElement recipe : recipes) { + this.readRecipe(recipe); + } + } + /* * JSON IO UTIL */ - + public static AStack readAStack(JsonArray array) { try { String type = array.get(0).getAsString(); @@ -234,7 +259,7 @@ public abstract class SerializableRecipe { MainRegistry.logger.error("Error reading stack array " + array.toString()); return new ComparableStack(ModItems.nothing); } - + public static AStack[] readAStackArray(JsonArray array) { try { AStack[] items = new AStack[array.size()]; @@ -244,7 +269,7 @@ public abstract class SerializableRecipe { MainRegistry.logger.error("Error reading stack array " + array.toString()); return new AStack[0]; } - + public static void writeAStack(AStack astack, JsonWriter writer) throws IOException { writer.beginArray(); writer.setIndent(""); @@ -264,7 +289,7 @@ public abstract class SerializableRecipe { writer.endArray(); writer.setIndent(" "); } - + public static ItemStack readItemStack(JsonArray array) { try { Item item = (Item) Item.itemRegistry.getObject(array.get(0).getAsString()); @@ -275,7 +300,7 @@ public abstract class SerializableRecipe { MainRegistry.logger.error("Error reading stack array " + array.toString() + " - defaulting to NOTHING item!"); return new ItemStack(ModItems.nothing); } - + public static Pair readItemStackChance(JsonArray array) { try { Item item = (Item) Item.itemRegistry.getObject(array.get(0).getAsString()); @@ -287,7 +312,7 @@ public abstract class SerializableRecipe { MainRegistry.logger.error("Error reading stack array " + array.toString() + " - defaulting to NOTHING item!"); return new Pair(new ItemStack(ModItems.nothing), 1F); } - + public static ItemStack[] readItemStackArray(JsonArray array) { try { ItemStack[] items = new ItemStack[array.size()]; @@ -297,7 +322,7 @@ public abstract class SerializableRecipe { MainRegistry.logger.error("Error reading stack array " + array.toString()); return new ItemStack[0]; } - + public static Pair[] readItemStackArrayChance(JsonArray array) { try { Pair[] items = new Pair[array.size()]; @@ -307,7 +332,7 @@ public abstract class SerializableRecipe { MainRegistry.logger.error("Error reading stack array " + array.toString()); return new Pair[0]; } - + public static void writeItemStack(ItemStack stack, JsonWriter writer) throws IOException { writer.beginArray(); writer.setIndent(""); @@ -317,7 +342,7 @@ public abstract class SerializableRecipe { writer.endArray(); writer.setIndent(" "); } - + public static void writeItemStackChance(Pair stack, JsonWriter writer) throws IOException { writer.beginArray(); writer.setIndent(""); @@ -328,7 +353,7 @@ public abstract class SerializableRecipe { writer.endArray(); writer.setIndent(" "); } - + public static FluidStack readFluidStack(JsonArray array) { try { FluidType type = Fluids.fromName(array.get(0).getAsString()); @@ -339,7 +364,7 @@ public abstract class SerializableRecipe { MainRegistry.logger.error("Error reading fluid array " + array.toString()); return new FluidStack(Fluids.NONE, 0); } - + public static FluidStack[] readFluidArray(JsonArray array) { try { FluidStack[] fluids = new FluidStack[array.size()]; @@ -349,7 +374,7 @@ public abstract class SerializableRecipe { MainRegistry.logger.error("Error reading fluid array " + array.toString()); return new FluidStack[0]; } - + public static void writeFluidStack(FluidStack stack, JsonWriter writer) throws IOException { writer.beginArray(); writer.setIndent(""); @@ -359,12 +384,12 @@ public abstract class SerializableRecipe { writer.endArray(); writer.setIndent(" "); } - + public static boolean matchesIngredients(ItemStack[] inputs, AStack[] recipe) { List recipeList = new ArrayList(); for(AStack ingredient : recipe) recipeList.add(ingredient); - + for(int i = 0; i < inputs.length; i++) { ItemStack inputStack = inputs[i]; diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 2d27eadb8..d587ebe4b 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -11,7 +11,6 @@ import com.hbm.config.RadiationConfig; import com.hbm.config.ServerConfig; import com.hbm.entity.mob.*; import com.hbm.entity.mob.ai.EntityAIFireGun; -import com.hbm.entity.mob.EntityCreeperTainted; import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.entity.projectile.EntityBurningFOEQ; import com.hbm.entity.train.EntityRailCarBase; @@ -24,6 +23,7 @@ import com.hbm.handler.EntityEffectHandler; import com.hbm.hazard.HazardSystem; import com.hbm.interfaces.IBomb; import com.hbm.interfaces.Spaghetti; +import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.handler.HTTPHandler; import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.handler.neutron.NeutronNodeWorld; @@ -43,6 +43,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PermaSyncPacket; import com.hbm.packet.toclient.PlayerInformPacket; +import com.hbm.packet.toclient.SerializableRecipePacket; import com.hbm.particle.helper.BlackPowderCreator; import com.hbm.potion.HbmPotion; import com.hbm.tileentity.machine.TileEntityMachineRadarNT; @@ -53,6 +54,8 @@ import com.hbm.uninos.UniNodespace; import com.hbm.util.*; import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.world.generator.TimedGenerator; + +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; @@ -60,7 +63,9 @@ import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerChangedDimensionEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent; +import cpw.mods.fml.common.network.FMLNetworkEvent.ClientDisconnectionFromServerEvent; import cpw.mods.fml.relauncher.ReflectionHelper; +import cpw.mods.fml.relauncher.Side; import io.netty.buffer.ByteBuf; import io.netty.buffer.PooledByteBufAllocator; import net.minecraft.block.Block; @@ -113,6 +118,7 @@ import net.minecraftforge.event.world.WorldEvent; import org.apache.commons.lang3.math.NumberUtils; import org.apache.logging.log4j.Level; +import java.io.File; import java.lang.reflect.Field; import java.util.*; @@ -158,9 +164,35 @@ public class ModEventHandler { props.hasReceivedBook = true; } } + + if(GeneralConfig.enableServerRecipeSync && FMLCommonHandler.instance().getSide() == Side.SERVER && event.player instanceof EntityPlayerMP) { + File recDir = new File(MainRegistry.configDir.getAbsolutePath() + File.separatorChar + "hbmRecipes"); + + MainRegistry.logger.info("Sending recipes to client!"); + + boolean hasSent = false; + + for(SerializableRecipe recipe : SerializableRecipe.recipeHandlers) { + File recFile = new File(recDir.getAbsolutePath() + File.separatorChar + recipe.getFileName()); + if(recFile.exists() && recFile.isFile()) { + MainRegistry.logger.info("Sending recipe file: " + recFile.getName()); + PacketDispatcher.wrapper.sendTo(new SerializableRecipePacket(recFile), (EntityPlayerMP) event.player); + hasSent = true; + } + } + + if(hasSent) { + PacketDispatcher.wrapper.sendTo(new SerializableRecipePacket(true), (EntityPlayerMP) event.player); + } + } } } + @SubscribeEvent + public void onPlayerLeftClient(ClientDisconnectionFromServerEvent event) { + SerializableRecipe.clearReceivedRecipes(); + } + @SubscribeEvent public void onPlayerRespawn(PlayerEvent.PlayerRespawnEvent event) { @@ -657,13 +689,13 @@ public class ModEventHandler { if(event.phase == Phase.END) { int tickrate = Math.max(1, ServerConfig.ITEM_HAZARD_DROP_TICKRATE.get()); - + if(event.world.getTotalWorldTime() % tickrate == 0) { List loadedEntityList = new ArrayList(); loadedEntityList.addAll(event.world.loadedEntityList); // ConcurrentModificationException my balls - + for(Object e : loadedEntityList) { - + if(e instanceof EntityItem) { EntityItem item = (EntityItem) e; HazardSystem.updateDroppedItem(item); diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index b749cfdd3..6d82b2b28 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -69,6 +69,8 @@ public class PacketDispatcher { wrapper.registerMessage(BiomeSyncPacket.Handler.class, BiomeSyncPacket.class, i++, Side.CLIENT); //The not-so-convenient but not laggy one wrapper.registerMessage(BufPacket.Handler.class, BufPacket.class, i++, Side.CLIENT); + //Syncs server recipe configs to the client + wrapper.registerMessage(SerializableRecipePacket.Handler.class, SerializableRecipePacket.class, i++, Side.CLIENT); } } diff --git a/src/main/java/com/hbm/packet/toclient/SerializableRecipePacket.java b/src/main/java/com/hbm/packet/toclient/SerializableRecipePacket.java new file mode 100644 index 000000000..7992d9163 --- /dev/null +++ b/src/main/java/com/hbm/packet/toclient/SerializableRecipePacket.java @@ -0,0 +1,76 @@ +package com.hbm.packet.toclient; + +import java.io.*; +import java.nio.file.Files; + +import com.hbm.inventory.recipes.loader.SerializableRecipe; +import com.hbm.util.BufferUtil; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; + +public class SerializableRecipePacket implements IMessage { + + private String filename; + private byte[] fileBytes; + + private boolean reinit; + + public SerializableRecipePacket() {} + + public SerializableRecipePacket(File recipeFile) { + try { + filename = recipeFile.getName(); + fileBytes = Files.readAllBytes(recipeFile.toPath()); + } catch(IOException ex) {} + } + + public SerializableRecipePacket(boolean reinit) { + this.reinit = reinit; + } + + @Override + public void fromBytes(ByteBuf buf) { + reinit = buf.readBoolean(); + if(reinit) return; + + filename = BufferUtil.readString(buf); + fileBytes = new byte[buf.readInt()]; + buf.readBytes(fileBytes); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeBoolean(reinit); + if(reinit) return; + + BufferUtil.writeString(buf, filename); + buf.writeInt(fileBytes.length); + buf.writeBytes(fileBytes); + } + + public static class Handler implements IMessageHandler { + + @Override + @SideOnly(Side.CLIENT) + public IMessage onMessage(SerializableRecipePacket m, MessageContext ctx) { + try { + + // Only reinitialize after receiving all recipes + if(m.reinit) { + SerializableRecipe.initialize(); + return null; + } + + SerializableRecipe.receiveRecipes(m.filename, m.fileBytes); + + } catch (Exception x) { } + return null; + } + } + +} From ed59ba69f366ea47af15759bc43b07a1b6e35d76 Mon Sep 17 00:00:00 2001 From: Justnightheron Date: Fri, 23 May 2025 16:45:24 +0800 Subject: [PATCH 083/491] =?UTF-8?q?AUV=E6=82=A8=E5=90=89=E7=A5=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/zh_CN.lang | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 64eea3277..e7727585b 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -4895,7 +4895,7 @@ tile.crane_partitioner.desc=接受并存储至多9种输入矿物酸化器的物 tile.crane_router.name=输送带分拣机 tile.crane_router.desc=根据定义的条件对项目排序$侧面可以定义为黑名单、白名单或通配符$只有在没有其他筛选器匹配的情况下才选择通配符侧面 tile.crane_splitter.name=输送带分离器 -tile.crane_splitter.desc=将物品分开并均匀堆放在两条传送带上$其本身就是一条传送带,因此它可以直接输入到插入器或分拣器中 +tile.crane_splitter.desc=将物品分开并均匀堆放在两条传送带上$其本身就是一条传送带,因此它可以直接输入到插入器或分拣器中$Ratio也可以用螺丝刀配置。 tile.crane_unboxer.name=输送带解包机 tile.crane_unboxer.desc=接收打包好的物品并解包$用螺丝刀右键单击以设置输出侧$手持螺丝刀按住Shift单击以设置输入侧$单击两次以设置相反侧 tile.crashed_bomb.name=哑弹 @@ -6068,3 +6068,7 @@ tile.wood_structure.scaffold.name=木质脚手架 item.gun_amat.name=反器材步枪 tile.fluid_pump.name=流量控制泵 tile.vine_phosphor.large.name=磷藤蔓 +item.ammo_secret.bmg50_black.name=.50BMG旁道者弹药 +item.ammo_standard.bmg50_sm.name=.50BMG子弹(星辉) +item.gun_amat_penance.name=忏悔 +item.gun_amat_subtlety.name=明敏 From ea430afe71c5bcd6d94aa2214bb6d6d492a7b50b Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Fri, 23 May 2025 19:40:45 +0800 Subject: [PATCH 084/491] Fix: Make crate look normal --- .../ExplosionNukeRayParallelized.java | 137 +++++++++++------- 1 file changed, 86 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index 2c8eb6761..81e28cb63 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -86,7 +86,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } private static float getNukeResistance(Block b) { - // if (b.getMaterial().isLiquid()) return 0.1F; + if (b.getMaterial().isLiquid()) return 0.1F; if (b == Blocks.sandstone) return Blocks.stone.getExplosionResistance(null); if (b == Blocks.obsidian) return Blocks.stone.getExplosionResistance(null) * 3; return b.getExplosionResistance(null); @@ -128,7 +128,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { Chunk chunk = world.getChunkFromChunkCoords(cp.chunkXPos, cp.chunkZPos); ExtendedBlockStorage[] storages = chunk.getBlockStorageArray(); - boolean ChunkModified = false; + boolean chunkModified = false; for (int subY = 0; subY < storages.length; subY++) { ExtendedBlockStorage storage = storages[subY]; @@ -157,7 +157,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { int zLocal = zGlobal & 0xF; storage.func_150818_a(xLocal, yLocal, zLocal, Blocks.air); storage.setExtBlockMetadata(xLocal, yLocal, zLocal, 0); - ChunkModified = true; + chunkModified = true; world.notifyBlocksOfNeighborChange(xGlobal, yGlobal, zGlobal, Blocks.air); world.markBlockForUpdate(xGlobal, yGlobal, zGlobal); @@ -170,7 +170,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } } - if (ChunkModified) { + if (chunkModified) { chunk.setChunkModified(); world.markBlockRangeForRenderUpdate(cp.chunkXPos << 4, 0, cp.chunkZPos << 4, (cp.chunkXPos << 4) | 15, WORLD_HEIGHT - 1, (cp.chunkZPos << 4) | 15); } @@ -387,7 +387,6 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } } } - private class RayTask { final int dirIndex; double px, py, pz; @@ -396,40 +395,51 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { double tMaxX, tMaxY, tMaxZ, tDeltaX, tDeltaY, tDeltaZ; int stepX, stepY, stepZ; boolean initialised = false; + double currentRayPosition; + + private static final double RAY_DIRECTION_EPSILON = 1e-6; + private static final double PROCESSING_EPSILON = 1e-9; + private static final float MIN_EFFECTIVE_DIST_FOR_ENERGY_CALC = 0.01f; RayTask(int dirIdx) { this.dirIndex = dirIdx; } void init() { - Vec3 dir = directions.get(dirIndex); - px = explosionX; - py = explosionY; - pz = explosionZ; - x = originX; - y = originY; - z = originZ; - energy = strength; + Vec3 dir = directions.get(this.dirIndex); + this.px = explosionX; + this.py = explosionY; + this.pz = explosionZ; + this.x = originX; + this.y = originY; + this.z = originZ; + // This scales the crate. higher = bigger crate. Adjust if the radius of the crate deviates from expected. + this.energy = strength * 0.3F; + this.currentRayPosition = 0.0; + double dirX = dir.xCoord; + double dirY = dir.yCoord; + double dirZ = dir.zCoord; - final double EPS = 1e-6; - double ax = Math.abs(dir.xCoord); - stepX = ax < EPS ? 0 : (dir.xCoord > 0 ? 1 : -1); - double invDx = stepX == 0 ? Double.POSITIVE_INFINITY : 1.0 / ax; - double ay = Math.abs(dir.yCoord); - stepY = ay < EPS ? 0 : (dir.yCoord > 0 ? 1 : -1); - double invDy = stepY == 0 ? Double.POSITIVE_INFINITY : 1.0 / ay; - double az = Math.abs(dir.zCoord); - stepZ = az < EPS ? 0 : (dir.zCoord > 0 ? 1 : -1); - double invDz = stepZ == 0 ? Double.POSITIVE_INFINITY : 1.0 / az; + double absDirX = Math.abs(dirX); + this.stepX = (absDirX < RAY_DIRECTION_EPSILON) ? 0 : (dirX > 0 ? 1 : -1); + this.tDeltaX = (stepX == 0) ? Double.POSITIVE_INFINITY : 1.0 / absDirX; + this.tMaxX = (stepX == 0) ? Double.POSITIVE_INFINITY : + ((stepX > 0 ? (this.x + 1 - this.px) : (this.px - this.x)) * this.tDeltaX); - tDeltaX = invDx; - tDeltaY = invDy; - tDeltaZ = invDz; - tMaxX = stepX == 0 ? Double.POSITIVE_INFINITY : ((stepX > 0 ? (x + 1 - px) : (px - x)) * invDx); - tMaxY = stepY == 0 ? Double.POSITIVE_INFINITY : ((stepY > 0 ? (y + 1 - py) : (py - y)) * invDy); - tMaxZ = stepZ == 0 ? Double.POSITIVE_INFINITY : ((stepZ > 0 ? (z + 1 - pz) : (pz - z)) * invDz); - initialised = true; + double absDirY = Math.abs(dirY); + this.stepY = (absDirY < RAY_DIRECTION_EPSILON) ? 0 : (dirY > 0 ? 1 : -1); + this.tDeltaY = (stepY == 0) ? Double.POSITIVE_INFINITY : 1.0 / absDirY; + this.tMaxY = (stepY == 0) ? Double.POSITIVE_INFINITY : + ((stepY > 0 ? (this.y + 1 - this.py) : (this.py - this.y)) * this.tDeltaY); + + double absDirZ = Math.abs(dirZ); + this.stepZ = (absDirZ < RAY_DIRECTION_EPSILON) ? 0 : (dirZ > 0 ? 1 : -1); + this.tDeltaZ = (stepZ == 0) ? Double.POSITIVE_INFINITY : 1.0 / absDirZ; + this.tMaxZ = (stepZ == 0) ? Double.POSITIVE_INFINITY : + ((stepZ > 0 ? (this.z + 1 - this.pz) : (this.pz - this.z)) * this.tDeltaZ); + + this.initialised = true; } void trace() { @@ -440,15 +450,8 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } while (energy > 0) { - if (y < 0 || y >= WORLD_HEIGHT) { - break; - } - double dxBlock = x + 0.5 - explosionX; - double dyBlock = y + 0.5 - explosionY; - double dzBlock = z + 0.5 - explosionZ; - if (dxBlock * dxBlock + dyBlock * dyBlock + dzBlock * dzBlock > radius * radius) { - break; - } + if (y < 0 || y >= WORLD_HEIGHT) break; + if (currentRayPosition >= radius - PROCESSING_EPSILON) break; ChunkKey ck = new ChunkKey(x >> 4, z >> 4, y >> 4); SubChunkSnapshot snap = snapshots.get(ck); @@ -458,21 +461,40 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { rayQueue.offer(this); return; } - if (snap != SubChunkSnapshot.EMPTY) { - Block block = snap.getBlock(x & 15, y & 15, z & 15); + double t_exit_voxel = Math.min(tMaxX, Math.min(tMaxY, tMaxZ)); + double segmentLenInVoxel = t_exit_voxel - this.currentRayPosition; + double segmentLenForProcessing; + boolean stopAfterThisSegment = false; + + if (this.currentRayPosition + segmentLenInVoxel > radius - PROCESSING_EPSILON) { + segmentLenForProcessing = Math.max(0.0, radius - this.currentRayPosition); + stopAfterThisSegment = true; + } else { + segmentLenForProcessing = segmentLenInVoxel; + } + + if (snap != SubChunkSnapshot.EMPTY && segmentLenForProcessing > PROCESSING_EPSILON) { + Block block = snap.getBlock(x & 0xF, y & 0xF, z & 0xF); if (block != Blocks.air) { - float res = getNukeResistance(block); - float resistanceCutoff = 2_000_000F; - if (res >= resistanceCutoff) break; - double distToBlock = Math.sqrt(dxBlock * dxBlock + dyBlock * dyBlock + dzBlock * dzBlock); - double effectiveDist = Math.max(distToBlock, 0.01); - energy -= (float) (Math.pow(res + 1.0, 3.0 * (effectiveDist / radius)) - 1.0); - if (energy > 0) { - ConcurrentBitSet bs = destructionMap.computeIfAbsent(ck.pos, posKey -> new ConcurrentBitSet()); - bs.set(((255 - y) << 8) | ((x & 15) << 4) | (z & 15)); - } else break; + float resistance = getNukeResistance(block); + if (resistance >= 2_000_000F) { // cutoff + energy = 0; + } else { + double energyLossFactor = getEnergyLossFactor(resistance); + energy -= (float) (energyLossFactor * segmentLenForProcessing); + if (energy > 0) { + ConcurrentBitSet bs = destructionMap.computeIfAbsent( + ck.pos, + posKey -> new ConcurrentBitSet() + ); + int bitIndex = ((WORLD_HEIGHT - 1 - y) << 8) | ((x & 0xF) << 4) | (z & 0xF); + bs.set(bitIndex); + } + } } } + this.currentRayPosition = t_exit_voxel; + if (energy <= 0 || stopAfterThisSegment || this.currentRayPosition >= radius - PROCESSING_EPSILON) break; if (tMaxX < tMaxY) { if (tMaxX < tMaxZ) { @@ -494,5 +516,18 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } latch.countDown(); } + + private double getEnergyLossFactor(float resistance) { + double dxBlockToCenter = (this.x + 0.5) - explosionX; + double dyBlockToCenter = (this.y + 0.5) - explosionY; + double dzBlockToCenter = (this.z + 0.5) - explosionZ; + double distToBlockCenterSq = dxBlockToCenter * dxBlockToCenter + + dyBlockToCenter * dyBlockToCenter + + dzBlockToCenter * dzBlockToCenter; + double distToBlockCenter = Math.sqrt(distToBlockCenterSq); + + double effectiveDist = Math.max(distToBlockCenter, MIN_EFFECTIVE_DIST_FOR_ENERGY_CALC); + return (Math.pow(resistance + 1.0, 3.0 * (effectiveDist / radius)) - 1.0); + } } } From 148ba197210e4e04062dccc05a35c2145c48fa10 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 23 May 2025 13:40:48 +0200 Subject: [PATCH 085/491] deploy surface-to-yellow-one missile --- changelog | 7 +- .../hbm/handler/BulletConfigSyncingUtil.java | 8 - .../com/hbm/handler/BulletConfiguration.java | 11 +- .../com/hbm/handler/GunConfiguration.java | 10 +- .../handler/ability/AvailableAbilities.java | 174 +++--- .../com/hbm/handler/ability/IBaseAbility.java | 44 +- .../hbm/handler/ability/IToolAreaAbility.java | 452 +++++++-------- .../handler/ability/IToolHarvestAbility.java | 540 ++++++++--------- .../hbm/handler/ability/IWeaponAbility.java | 547 +++++++++--------- .../com/hbm/handler/ability/ToolPreset.java | 147 ++--- .../handler/guncfg/BulletConfigFactory.java | 258 --------- .../hbm/handler/guncfg/GunCannonFactory.java | 96 --- .../hbm/handler/guncfg/GunEnergyFactory.java | 306 ---------- src/main/java/com/hbm/items/ModItems.java | 6 +- .../sedna/factory/GunFactoryClient.java | 1 + .../weapon/sedna/factory/Orchestras.java | 11 + .../weapon/sedna/factory/XFactoryTool.java | 166 ++++++ .../com/hbm/main/ModEventHandlerClient.java | 21 - .../render/item/weapon/ItemRenderFireExt.java | 20 +- .../machine/TileEntityMachineArcWelder.java | 2 +- .../TileEntityMachineSolderingStation.java | 2 +- .../TileEntityMachineStrandCaster.java | 1 - 22 files changed, 1148 insertions(+), 1682 deletions(-) delete mode 100644 src/main/java/com/hbm/handler/guncfg/GunCannonFactory.java diff --git a/changelog b/changelog index 3520d9bca..b730d65b1 100644 --- a/changelog +++ b/changelog @@ -6,5 +6,10 @@ * Area and block abilities can now be toggled independently from each other. For example, the vein miner ability can be combined with silk touch * Clicking on the same ability allows switching between levels * Updated textures for the armor and gun modification tables +* Ported the fire extinguisher to the SEDNA gun system, eliminating the final remaining ItemGunBase gun +* Water extinguishers can now wash away foam blocks -## Fixed \ No newline at end of file +## Fixed +* Conveyor ejectors should now correctly place items onto the back of splitters instead of on the output belts +* Fixed strand caster fluid gauges going out of bounds +* Fixed arc welder and soldering station not changing buffer size based on upgrade, preventing use of higher overdrive tiers \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java index 8864f159a..3deab1d17 100644 --- a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java +++ b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java @@ -13,10 +13,6 @@ public class BulletConfigSyncingUtil { public static int TEST_CONFIG = i++; - public static int FEXT_NORMAL = i++; - public static int FEXT_FOAM = i++; - public static int FEXT_SAND = i++; - public static int TURBINE = i++; public static int MASKMAN_BULLET = i++; @@ -33,10 +29,6 @@ public class BulletConfigSyncingUtil { public static void loadConfigsForSync() { - configSet.put(FEXT_NORMAL, GunEnergyFactory.getFextConfig()); - configSet.put(FEXT_FOAM, GunEnergyFactory.getFextFoamConfig()); - configSet.put(FEXT_SAND, GunEnergyFactory.getFextSandConfig()); - configSet.put(TURBINE, GunEnergyFactory.getTurbineConfig()); configSet.put(MASKMAN_BULLET, GunNPCFactory.getMaskmanBullet()); diff --git a/src/main/java/com/hbm/handler/BulletConfiguration.java b/src/main/java/com/hbm/handler/BulletConfiguration.java index aa1d73ca5..c2b269b27 100644 --- a/src/main/java/com/hbm/handler/BulletConfiguration.java +++ b/src/main/java/com/hbm/handler/BulletConfiguration.java @@ -17,6 +17,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.util.EntityDamageSourceIndirect; import net.minecraft.util.EnumChatFormatting; +@Deprecated public class BulletConfiguration implements Cloneable { //what item this specific configuration consumes @@ -130,15 +131,12 @@ public class BulletConfiguration implements Cloneable { public static final int STYLE_FOLLY = 5; public static final int STYLE_ROCKET = 6; public static final int STYLE_STINGER = 7; - public static final int STYLE_NUKE = 8; - public static final int STYLE_MIRV = 9; public static final int STYLE_GRENADE = 10; public static final int STYLE_BF = 11; public static final int STYLE_ORB = 12; public static final int STYLE_METEOR = 13; public static final int STYLE_APDS = 14; public static final int STYLE_BLADE = 15; - public static final int STYLE_BARREL = 16; public static final int STYLE_TAU = 17; public static final int STYLE_LEADBURSTER = 18; @@ -174,13 +172,6 @@ public class BulletConfiguration implements Cloneable { return this; } - public BulletConfiguration setToGuided() { - - this.bntUpdate = BulletConfigFactory.getLaserSteering(); - this.doesRicochet = false; - return this; - } - public BulletConfiguration getChlorophyte() { this.bntUpdate = BulletConfigFactory.getHomingBehavior(30, 180); this.bntHurt = BulletConfigFactory.getPenHomingBehavior(); diff --git a/src/main/java/com/hbm/handler/GunConfiguration.java b/src/main/java/com/hbm/handler/GunConfiguration.java index 974322d00..9cce19944 100644 --- a/src/main/java/com/hbm/handler/GunConfiguration.java +++ b/src/main/java/com/hbm/handler/GunConfiguration.java @@ -12,6 +12,7 @@ import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.util.ResourceLocation; +@Deprecated public class GunConfiguration implements Cloneable { /** @@ -46,10 +47,6 @@ public class GunConfiguration implements Cloneable { public boolean isCentered; //texture overlay when sneaking public ResourceLocation scopeTexture; - //whether the FOV multiplier should be absolute or multiplicative to other modifiers, multiplicative mode is experimental! - public boolean absoluteFOV = true; - //the target FOV/multiplied FOV modifier when sneaking - public float zoomFOV = 0.0F; //duration of every animation cycle, used also for how quickly a burst fire rifle can fire public int firingDuration; @@ -122,10 +119,5 @@ public class GunConfiguration implements Cloneable { public static final String RSOUND_GRENADE = "hbm:weapon.hkReload"; public static final String RSOUND_GRENADE_NEW = "hbm:weapon.glReload"; public static final String RSOUND_FATMAN = "hbm:weapon.fatmanReload"; - - public GunConfiguration silenced() { - this.firingSound = "hbm:weapon.silencerShoot"; - return this; - } } diff --git a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java index 6e05b5a30..2949c42d5 100644 --- a/src/main/java/com/hbm/handler/ability/AvailableAbilities.java +++ b/src/main/java/com/hbm/handler/ability/AvailableAbilities.java @@ -7,7 +7,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import com.google.common.base.Functions; import com.hbm.main.MainRegistry; import cpw.mods.fml.relauncher.Side; @@ -16,118 +15,109 @@ import net.minecraft.util.EnumChatFormatting; // All abilities available on a given tool public class AvailableAbilities { - // Insertion order matters - private HashMap abilities = new HashMap(); + // Insertion order matters + private HashMap abilities = new HashMap(); - public AvailableAbilities() {} + public AvailableAbilities() { } - public AvailableAbilities addAbility(IBaseAbility ability, int level) { - if (level < 0 || level >= ability.levels()) { - MainRegistry.logger.warn("Illegal level " + level + " for ability " + ability.getName()); - level = ability.levels() - 1; - } + public AvailableAbilities addAbility(IBaseAbility ability, int level) { + if(level < 0 || level >= ability.levels()) { + MainRegistry.logger.warn("Illegal level " + level + " for ability " + ability.getName()); + level = ability.levels() - 1; + } - if (abilities.containsKey(ability)) { - MainRegistry.logger.warn("Ability " + ability.getName() + " already had level " + abilities.get(ability) + ", overwriting with level " + level); - } + if(abilities.containsKey(ability)) { + MainRegistry.logger.warn("Ability " + ability.getName() + " already had level " + abilities.get(ability) + ", overwriting with level " + level); + } - if (ability.isAllowed()) { - abilities.put(ability, level); - } + if(ability.isAllowed()) { + abilities.put(ability, level); + } - return this; - } + return this; + } - public AvailableAbilities addToolAbilities() { - addAbility(IToolAreaAbility.NONE, 0); - addAbility(IToolHarvestAbility.NONE, 0); - return this; - } + public AvailableAbilities addToolAbilities() { + addAbility(IToolAreaAbility.NONE, 0); + addAbility(IToolHarvestAbility.NONE, 0); + return this; + } - public AvailableAbilities removeAbility(IBaseAbility ability) { - abilities.remove(ability); - return this; - } + public AvailableAbilities removeAbility(IBaseAbility ability) { + abilities.remove(ability); + return this; + } - public boolean supportsAbility(IBaseAbility ability) { - return abilities.containsKey(ability); - } + public boolean supportsAbility(IBaseAbility ability) { + return abilities.containsKey(ability); + } - public int maxLevel(IBaseAbility ability) { - return abilities.getOrDefault(ability, -1); - } + public int maxLevel(IBaseAbility ability) { + return abilities.getOrDefault(ability, -1); + } - public Map get() { - return Collections.unmodifiableMap(abilities); - } + public Map get() { + return Collections.unmodifiableMap(abilities); + } - public Map getWeaponAbilities() { - return abilities.keySet().stream().filter(a -> a instanceof IWeaponAbility).collect(Collectors.toMap(a -> (IWeaponAbility)a, a -> abilities.get(a))); - } + public Map getWeaponAbilities() { + return abilities.keySet().stream().filter(a -> a instanceof IWeaponAbility).collect(Collectors.toMap(a -> (IWeaponAbility) a, a -> abilities.get(a))); + } - public Map getToolAbilities() { - return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility || a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> a, a -> abilities.get(a))); - } + public Map getToolAbilities() { + return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility || a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> a, a -> abilities.get(a))); + } - public Map getToolAreaAbilities() { - return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility).collect(Collectors.toMap(a -> (IToolAreaAbility)a, a -> abilities.get(a))); - } + public Map getToolAreaAbilities() { + return abilities.keySet().stream().filter(a -> a instanceof IToolAreaAbility).collect(Collectors.toMap(a -> (IToolAreaAbility) a, a -> abilities.get(a))); + } - public Map getToolHarvestAbilities() { - return abilities.keySet().stream().filter(a -> a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> (IToolHarvestAbility)a, a -> abilities.get(a))); - } + public Map getToolHarvestAbilities() { + return abilities.keySet().stream().filter(a -> a instanceof IToolHarvestAbility).collect(Collectors.toMap(a -> (IToolHarvestAbility) a, a -> abilities.get(a))); + } - public int size() { - return abilities.size(); - } + public int size() { + return abilities.size(); + } - public boolean isEmpty() { - return abilities.isEmpty(); - } + public boolean isEmpty() { + return abilities.isEmpty(); + } - @SideOnly(Side.CLIENT) - public void addInformation(List list) { - List> toolAbilities = abilities.entrySet().stream().filter(entry -> - (entry.getKey() instanceof IToolAreaAbility && entry.getKey() != IToolAreaAbility.NONE) || - (entry.getKey() instanceof IToolHarvestAbility && entry.getKey() != IToolHarvestAbility.NONE) - ).sorted( - Comparator - .comparing(Map.Entry::getKey) - .thenComparing(Map.Entry::getValue) - ).collect(Collectors.toList()); - - if (!toolAbilities.isEmpty()) { - list.add("Abilities: "); + @SideOnly(Side.CLIENT) + public void addInformation(List list) { + List> toolAbilities = abilities.entrySet().stream() + .filter(entry -> (entry.getKey() instanceof IToolAreaAbility && entry.getKey() != IToolAreaAbility.NONE) + || (entry.getKey() instanceof IToolHarvestAbility && entry.getKey() != IToolHarvestAbility.NONE)) + .sorted(Comparator.comparing(Map.Entry::getKey).thenComparing(Map.Entry::getValue)).collect(Collectors.toList()); - toolAbilities.forEach(entry -> { - IBaseAbility ability = entry.getKey(); - int level = entry.getValue(); - - list.add(" " + EnumChatFormatting.GOLD + ability.getFullName(level)); - }); + if(!toolAbilities.isEmpty()) { + list.add("Abilities: "); + + toolAbilities.forEach(entry -> { + IBaseAbility ability = entry.getKey(); + int level = entry.getValue(); + + list.add(" " + EnumChatFormatting.GOLD + ability.getFullName(level)); + }); list.add("Right click to cycle through presets!"); list.add("Sneak-click to go to first preset!"); list.add("Alt-click to open customization GUI!"); - } - - List> weaponAbilities = abilities.entrySet().stream().filter(entry -> - (entry.getKey() instanceof IWeaponAbility && entry.getKey() != IWeaponAbility.NONE) - ).sorted( - Comparator - .comparing(Map.Entry::getKey) - .thenComparing(Map.Entry::getValue) - ).collect(Collectors.toList()); - - if (!weaponAbilities.isEmpty()) { - list.add("Weapon modifiers: "); - - weaponAbilities.forEach(entry -> { - IBaseAbility ability = entry.getKey(); - int level = entry.getValue(); + } - list.add(" " + EnumChatFormatting.RED + ability.getFullName(level)); - }); - } - } + List> weaponAbilities = abilities.entrySet().stream().filter(entry -> (entry.getKey() instanceof IWeaponAbility && entry.getKey() != IWeaponAbility.NONE)) + .sorted(Comparator.comparing(Map.Entry::getKey).thenComparing(Map.Entry::getValue)).collect(Collectors.toList()); + + if(!weaponAbilities.isEmpty()) { + list.add("Weapon modifiers: "); + + weaponAbilities.forEach(entry -> { + IBaseAbility ability = entry.getKey(); + int level = entry.getValue(); + + list.add(" " + EnumChatFormatting.RED + ability.getFullName(level)); + }); + } + } } diff --git a/src/main/java/com/hbm/handler/ability/IBaseAbility.java b/src/main/java/com/hbm/handler/ability/IBaseAbility.java index 9999bcaa0..b8318cc94 100644 --- a/src/main/java/com/hbm/handler/ability/IBaseAbility.java +++ b/src/main/java/com/hbm/handler/ability/IBaseAbility.java @@ -3,34 +3,34 @@ package com.hbm.handler.ability; import net.minecraft.client.resources.I18n; public interface IBaseAbility extends Comparable { - public String getName(); + public String getName(); public default String getExtension(int level) { - return ""; - } + return ""; + } public default String getFullName(int level) { - return I18n.format(getName()) + getExtension(level); - } + return I18n.format(getName()) + getExtension(level); + } - public default boolean isAllowed() { - return true; - } + public default boolean isAllowed() { + return true; + } - // 1 means no support for levels (i.e. the level is always 0). - // The UI only supports levels() between 1 and 10 (inclusive). - // All calls accepting an `int level` parameters must be done - // with a level between 0 and levels()-1 (inclusive). - default int levels() { - return 1; - } + // 1 means no support for levels (i.e. the level is always 0). + // The UI only supports levels() between 1 and 10 (inclusive). + // All calls accepting an `int level` parameters must be done + // with a level between 0 and levels()-1 (inclusive). + default int levels() { + return 1; + } - default int sortOrder() { - return hashCode(); - } + default int sortOrder() { + return hashCode(); + } - @Override - default int compareTo(IBaseAbility o) { - return sortOrder() - o.sortOrder(); - } + @Override + default int compareTo(IBaseAbility o) { + return sortOrder() - o.sortOrder(); + } } diff --git a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java index 9929cd303..1d0bcf02b 100644 --- a/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolAreaAbility.java @@ -10,274 +10,274 @@ import com.hbm.config.ToolConfig; import com.hbm.explosion.ExplosionNT; import com.hbm.explosion.ExplosionNT.ExAttrib; import com.hbm.handler.ThreeInts; -import com.hbm.inventory.OreDictManager; import com.hbm.items.tool.ItemToolAbility; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; public interface IToolAreaAbility extends IBaseAbility { - // Should call tool.breakExtraBlock on a bunch of blocks. - // The initial block is implicitly broken, so don't call breakExtraBlock on it. - // Returning true skips the reference block from being broken - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool); - - // Whether breakExtraBlock is called at all. Currently only false for explosion - public default boolean allowsHarvest(int level) { - return true; - } + // Should call tool.breakExtraBlock on a bunch of blocks. + // The initial block is implicitly broken, so don't call breakExtraBlock on it. + // Returning true skips the reference block from being broken + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool); - public final static int SORT_ORDER_BASE = 0; + // Whether breakExtraBlock is called at all. Currently only false for explosion + public default boolean allowsHarvest(int level) { + return true; + } - // region handlers - public static final IToolAreaAbility NONE = new IToolAreaAbility() { - @Override - public String getName() { - return ""; - } + public final static int SORT_ORDER_BASE = 0; - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 0; - } - - @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { - return false; - } - }; + // region handlers + public static final IToolAreaAbility NONE = new IToolAreaAbility() { + @Override + public String getName() { + return ""; + } - public static final IToolAreaAbility RECURSION = new IToolAreaAbility() { - @Override - public String getName() { - return "tool.ability.recursion"; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 0; + } - @Override - public boolean isAllowed() { - return ToolConfig.abilityVein; - } + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + return false; + } + }; - public final int[] radiusAtLevel = {3, 4, 5, 6, 7, 9, 10}; + public static final IToolAreaAbility RECURSION = new IToolAreaAbility() { + @Override + public String getName() { + return "tool.ability.recursion"; + } - @Override - public int levels() { - return radiusAtLevel.length; - } + @Override + public boolean isAllowed() { + return ToolConfig.abilityVein; + } - @Override - public String getExtension(int level) { - return " (" + radiusAtLevel[level] + ")"; - } + public final int[] radiusAtLevel = { 3, 4, 5, 6, 7, 9, 10 }; - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 1; - } + @Override + public int levels() { + return radiusAtLevel.length; + } - // Note: if reusing it across different instatces of a tool - // is a problem here, then it had already been one before - // the refactor! The solution is to simply make this a local - // of the onDig method and pass it around as a parameter. - private Set pos = new HashSet<>(); + @Override + public String getExtension(int level) { + return " (" + radiusAtLevel[level] + ")"; + } - @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { - Block b = world.getBlock(x, y, z); - - if(b == Blocks.stone && !ToolConfig.recursiveStone) { - return false; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 1; + } - if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) { - return false; - } - - pos.clear(); + // Note: if reusing it across different instatces of a tool + // is a problem here, then it had already been one before + // the refactor! The solution is to simply make this a local + // of the onDig method and pass it around as a parameter. + private Set pos = new HashSet<>(); - recurse(world, x, y, z, x, y, z, player, tool, 0, radiusAtLevel[level]); + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + Block b = world.getBlock(x, y, z); - return false; - } + if(b == Blocks.stone && !ToolConfig.recursiveStone) { + return false; + } - private final List offsets = new ArrayList(3*3*3-1) {{ - for (int dx = -1; dx <= 1; dx++) { - for (int dy = -1; dy <= 1; dy++) { - for (int dz = -1; dz <= 1; dz++) { - if (dx != 0 || dy != 0 || dz != 0) { - add(new ThreeInts(dx, dy, dz)); - } - } - } - } - }}; + if(b == Blocks.netherrack && !ToolConfig.recursiveNetherrack) { + return false; + } - private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, ItemToolAbility tool, int depth, int radius) { - List shuffledOffsets = new ArrayList<>(offsets); - Collections.shuffle(shuffledOffsets); - - for(ThreeInts offset : shuffledOffsets) { - breakExtra(world, x + offset.x, y + offset.y, z + offset.z, refX, refY, refZ, player, tool, depth, radius); - } - } - - private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, ItemToolAbility tool, int depth, int radius) { - if(pos.contains(new ThreeInts(x, y, z))) - return; - - depth += 1; - - if(depth > ToolConfig.recursionDepth) - return; - - pos.add(new ThreeInts(x, y, z)); - - //don't lose the ref block just yet - if(x == refX && y == refY && z == refZ) - return; - - if(Vec3.createVectorHelper(x - refX, y - refY, z - refZ).lengthVector() > radius) - return; - - Block b = world.getBlock(x, y, z); - Block ref = world.getBlock(refX, refY, refZ); - int meta = world.getBlockMetadata(x, y, z); - int refMeta = world.getBlockMetadata(refX, refY, refZ); - - if(!isSameBlock(b, ref)) - return; - - if(meta != refMeta) - return; - - if(player.getHeldItem() == null) - return; - - tool.breakExtraBlock(world, x, y, z, player, refX, refY, refZ); + pos.clear(); - recurse(world, x, y, z, refX, refY, refZ, player, tool, depth, radius); - } - - private boolean isSameBlock(Block b1, Block b2) { - if(b1 == b2) return true; - if((b1 == Blocks.redstone_ore && b2 == Blocks.lit_redstone_ore) || (b1 == Blocks.lit_redstone_ore && b2 == Blocks.redstone_ore)) return true; - - return false; - } - }; + recurse(world, x, y, z, x, y, z, player, tool, 0, radiusAtLevel[level]); - public static final IToolAreaAbility HAMMER = new IToolAreaAbility() { - @Override - public String getName() { - return "tool.ability.hammer"; - } + return false; + } - @Override - public boolean isAllowed() { - return ToolConfig.abilityHammer; - } + private final List offsets = new ArrayList(3 * 3 * 3 - 1) { + { + for(int dx = -1; dx <= 1; dx++) { + for(int dy = -1; dy <= 1; dy++) { + for(int dz = -1; dz <= 1; dz++) { + if(dx != 0 || dy != 0 || dz != 0) { + add(new ThreeInts(dx, dy, dz)); + } + } + } + } + } + }; - public final int[] rangeAtLevel = {1, 2, 3, 4}; + private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, ItemToolAbility tool, int depth, int radius) { + List shuffledOffsets = new ArrayList<>(offsets); + Collections.shuffle(shuffledOffsets); - @Override - public int levels() { - return rangeAtLevel.length; - } + for(ThreeInts offset : shuffledOffsets) { + breakExtra(world, x + offset.x, y + offset.y, z + offset.z, refX, refY, refZ, player, tool, depth, radius); + } + } - @Override - public String getExtension(int level) { - return " (" + rangeAtLevel[level] + ")"; - } + private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, ItemToolAbility tool, int depth, int radius) { + if(pos.contains(new ThreeInts(x, y, z))) + return; - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 2; - } + depth += 1; - @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { - int range = rangeAtLevel[level]; - - for(int a = x - range; a <= x + range; a++) { - for(int b = y - range; b <= y + range; b++) { - for(int c = z - range; c <= z + range; c++) { - if (a == x && b == y && c == z) - continue; - - tool.breakExtraBlock(world, a, b ,c, player, x, y, z); - } - } - } + if(depth > ToolConfig.recursionDepth) + return; - return false; - } - }; + pos.add(new ThreeInts(x, y, z)); - public static final IToolAreaAbility EXPLOSION = new IToolAreaAbility() { - @Override - public String getName() { - return "tool.ability.explosion"; - } + // don't lose the ref block just yet + if(x == refX && y == refY && z == refZ) + return; - @Override - public boolean isAllowed() { - return ToolConfig.abilityExplosion; - } + if(Vec3.createVectorHelper(x - refX, y - refY, z - refZ).lengthVector() > radius) + return; - public final float[] strengthAtLevel = {2.5F, 5F, 10F, 15F}; + Block b = world.getBlock(x, y, z); + Block ref = world.getBlock(refX, refY, refZ); + int meta = world.getBlockMetadata(x, y, z); + int refMeta = world.getBlockMetadata(refX, refY, refZ); - @Override - public int levels() { - return strengthAtLevel.length; - } + if(!isSameBlock(b, ref)) + return; - @Override - public String getExtension(int level) { - return " (" + strengthAtLevel[level] + ")"; - } + if(meta != refMeta) + return; - @Override - public boolean allowsHarvest(int level) { - return false; - } + if(player.getHeldItem() == null) + return; - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 3; - } + tool.breakExtraBlock(world, x, y, z, player, refX, refY, refZ); - @Override - public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { - float strength = strengthAtLevel[level]; - - ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); - ex.addAttrib(ExAttrib.ALLDROP); - ex.addAttrib(ExAttrib.NOHURT); - ex.addAttrib(ExAttrib.NOPARTICLE); - ex.doExplosionA(); - ex.doExplosionB(false); - - player.worldObj.createExplosion(player, x + 0.5, y + 0.5, z + 0.5, 0.1F, false); - - return true; - } - }; - // endregion handlers + recurse(world, x, y, z, refX, refY, refZ, player, tool, depth, radius); + } - static final IToolAreaAbility[] abilities = {NONE, RECURSION, HAMMER, EXPLOSION}; + private boolean isSameBlock(Block b1, Block b2) { + if(b1 == b2) + return true; + if((b1 == Blocks.redstone_ore && b2 == Blocks.lit_redstone_ore) || (b1 == Blocks.lit_redstone_ore && b2 == Blocks.redstone_ore)) + return true; - static IToolAreaAbility getByName(String name) { - for(IToolAreaAbility ability : abilities) { - if(ability.getName().equals(name)) - return ability; - } - - return NONE; - } + return false; + } + }; + + public static final IToolAreaAbility HAMMER = new IToolAreaAbility() { + @Override + public String getName() { + return "tool.ability.hammer"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityHammer; + } + + public final int[] rangeAtLevel = { 1, 2, 3, 4 }; + + @Override + public int levels() { + return rangeAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + rangeAtLevel[level] + ")"; + } + + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 2; + } + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + int range = rangeAtLevel[level]; + + for(int a = x - range; a <= x + range; a++) { + for(int b = y - range; b <= y + range; b++) { + for(int c = z - range; c <= z + range; c++) { + if(a == x && b == y && c == z) + continue; + + tool.breakExtraBlock(world, a, b, c, player, x, y, z); + } + } + } + + return false; + } + }; + + public static final IToolAreaAbility EXPLOSION = new IToolAreaAbility() { + @Override + public String getName() { + return "tool.ability.explosion"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityExplosion; + } + + public final float[] strengthAtLevel = { 2.5F, 5F, 10F, 15F }; + + @Override + public int levels() { + return strengthAtLevel.length; + } + + @Override + public String getExtension(int level) { + return " (" + strengthAtLevel[level] + ")"; + } + + @Override + public boolean allowsHarvest(int level) { + return false; + } + + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 3; + } + + @Override + public boolean onDig(int level, World world, int x, int y, int z, EntityPlayer player, ItemToolAbility tool) { + float strength = strengthAtLevel[level]; + + ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); + ex.addAttrib(ExAttrib.ALLDROP); + ex.addAttrib(ExAttrib.NOHURT); + ex.addAttrib(ExAttrib.NOPARTICLE); + ex.doExplosionA(); + ex.doExplosionB(false); + + player.worldObj.createExplosion(player, x + 0.5, y + 0.5, z + 0.5, 0.1F, false); + + return true; + } + }; + // endregion handlers + + static final IToolAreaAbility[] abilities = { NONE, RECURSION, HAMMER, EXPLOSION }; + + static IToolAreaAbility getByName(String name) { + for(IToolAreaAbility ability : abilities) { + if(ability.getName().equals(name)) + return ability; + } + + return NONE; + } } diff --git a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java index b1d54dd11..9f002bfbd 100644 --- a/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java +++ b/src/main/java/com/hbm/handler/ability/IToolHarvestAbility.java @@ -23,319 +23,321 @@ import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.world.World; public interface IToolHarvestAbility extends IBaseAbility { - public default void preHarvestAll(int level, World world, EntityPlayer player) {} + + public default void preHarvestAll(int level, World world, EntityPlayer player) { } + public default void postHarvestAll(int level, World world, EntityPlayer player) { } - public default void postHarvestAll(int level, World world, EntityPlayer player) {} + // You must call harvestBlock to actually break the block. + // If you don't, visual glitches ensue + public default void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + harvestBlock(false, world, x, y, z, player); + } - // You must call harvestBlock to actually break the block. - // If you don't, visual glitches ensue - public default void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - harvestBlock(false, world, x, y, z, player); - } + public static void harvestBlock(boolean skipDefaultDrops, World world, int x, int y, int z, EntityPlayer player) { + if(skipDefaultDrops) { + // Emulate the block breaking without drops + world.setBlockToAir(x, y, z); + player.getHeldItem().damageItem(1, player); + } else if(player instanceof EntityPlayerMP) { + // Break the block conventionally + ItemToolAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); + } + } - public static void harvestBlock(boolean skipDefaultDrops, World world, int x, int y, int z, EntityPlayer player) { - if (skipDefaultDrops) { - // Emulate the block breaking without drops - world.setBlockToAir(x, y, z); - player.getHeldItem().damageItem(1, player); - } else if (player instanceof EntityPlayerMP) { - // Break the block conventionally - ItemToolAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player); - } - } + public final static int SORT_ORDER_BASE = 100; - public final static int SORT_ORDER_BASE = 100; + // region handlers + public static final IToolHarvestAbility NONE = new IToolHarvestAbility() { + @Override + public String getName() { + return ""; + } - // region handlers - public static final IToolHarvestAbility NONE = new IToolHarvestAbility() { - @Override - public String getName() { - return ""; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 0; + } + }; - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 0; - } - }; + public static final IToolHarvestAbility SILK = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.silktouch"; + } - public static final IToolHarvestAbility SILK = new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.silktouch"; - } + @Override + public boolean isAllowed() { + return ToolConfig.abilitySilk; + } - @Override - public boolean isAllowed() { - return ToolConfig.abilitySilk; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 1; + } - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 1; - } + @Override + public void preHarvestAll(int level, World world, EntityPlayer player) { + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); + } - @Override - public void preHarvestAll(int level, World world, EntityPlayer player) { - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1); - } + @Override + public void postHarvestAll(int level, World world, EntityPlayer player) { + // ToC-ToU mismatch should be impossible + // because both calls happen on the same tick. + // Even if can be forced somehow, the player doesn't gain any + // benefit from it. + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); + } + }; - @Override - public void postHarvestAll(int level, World world, EntityPlayer player) { - // ToC-ToU mismatch should be impossible - // because both calls happen on the same tick. - // Even if can be forced somehow, the player doesn't gain any benefit from it. - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch); - } - }; + public static final IToolHarvestAbility LUCK = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.luck"; + } - public static final IToolHarvestAbility LUCK = new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.luck"; - } + @Override + public boolean isAllowed() { + return ToolConfig.abilityLuck; + } - @Override - public boolean isAllowed() { - return ToolConfig.abilityLuck; - } + public final int[] powerAtLevel = { 1, 2, 3, 4, 5, 9 }; - public final int[] powerAtLevel = {1, 2, 3, 4, 5, 9}; + @Override + public int levels() { + return powerAtLevel.length; + } - @Override - public int levels() { - return powerAtLevel.length; - } + @Override + public String getExtension(int level) { + return " (" + powerAtLevel[level] + ")"; + } - @Override - public String getExtension(int level) { - return " (" + powerAtLevel[level] + ")"; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 2; + } - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 2; - } + @Override + public void preHarvestAll(int level, World world, EntityPlayer player) { + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, powerAtLevel[level]); + } - @Override - public void preHarvestAll(int level, World world, EntityPlayer player) { - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, powerAtLevel[level]); - } + @Override + public void postHarvestAll(int level, World world, EntityPlayer player) { + // ToC-ToU mismatch should be impossible + // because both calls happen on the same tick. + // Even if can be forced somehow, the player doesn't gain any + // benefit from it. + ItemStack stack = player.getHeldItem(); + EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune); + } + }; - @Override - public void postHarvestAll(int level, World world, EntityPlayer player) { - // ToC-ToU mismatch should be impossible - // because both calls happen on the same tick. - // Even if can be forced somehow, the player doesn't gain any benefit from it. - ItemStack stack = player.getHeldItem(); - EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune); - } - }; + public static final IToolHarvestAbility SMELTER = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.smelter"; + } - public static final IToolHarvestAbility SMELTER = new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.smelter"; - } + @Override + public boolean isAllowed() { + return ToolConfig.abilityFurnace; + } - @Override - public boolean isAllowed() { - return ToolConfig.abilityFurnace; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 3; + } - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 3; - } + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + List drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0); - @Override - public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - List drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0); - - boolean doesSmelt = false; - - for(int i = 0; i < drops.size(); i++) { - ItemStack stack = drops.get(i).copy(); - ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(stack); - - if(result != null) { - result = result.copy(); - result.stackSize *= stack.stackSize; - drops.set(i, result); - doesSmelt = true; - } - } - - harvestBlock(doesSmelt, world, x, y, z, player); + boolean doesSmelt = false; - if(doesSmelt) { - for(ItemStack stack : drops) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy())); - } - } - } - }; + for(int i = 0; i < drops.size(); i++) { + ItemStack stack = drops.get(i).copy(); + ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(stack); - public static final IToolHarvestAbility SHREDDER = new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.shredder"; - } + if(result != null) { + result = result.copy(); + result.stackSize *= stack.stackSize; + drops.set(i, result); + doesSmelt = true; + } + } - @Override - public boolean isAllowed() { - return ToolConfig.abilityShredder; - } + harvestBlock(doesSmelt, world, x, y, z, player); - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 4; - } + if(doesSmelt) { + for(ItemStack stack : drops) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy())); + } + } + } + }; - @Override - public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - ItemStack stack = new ItemStack(block, 1, meta); - ItemStack result = ShredderRecipes.getShredderResult(stack); + public static final IToolHarvestAbility SHREDDER = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.shredder"; + } - boolean doesShred = result != null && result.getItem() != ModItems.scrap; + @Override + public boolean isAllowed() { + return ToolConfig.abilityShredder; + } - harvestBlock(doesShred, world, x, y, z, player); - - if(doesShred) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy())); - } - } - }; + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 4; + } - public static final IToolHarvestAbility CENTRIFUGE = new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.centrifuge"; - } + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + // a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; - @Override - public boolean isAllowed() { - return ToolConfig.abilityCentrifuge; - } + ItemStack stack = new ItemStack(block, 1, meta); + ItemStack result = ShredderRecipes.getShredderResult(stack); - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 5; - } + boolean doesShred = result != null && result.getItem() != ModItems.scrap; - @Override - public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - ItemStack stack = new ItemStack(block, 1, meta); - ItemStack[] result = CentrifugeRecipes.getOutput(stack); + harvestBlock(doesShred, world, x, y, z, player); - boolean doesCentrifuge = result != null; - - harvestBlock(doesCentrifuge, world, x, y, z, player); - - if(doesCentrifuge) { - for(ItemStack st : result) { - if(st != null) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, st.copy())); - } - } - } - } - }; + if(doesShred) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy())); + } + } + }; - public static final IToolHarvestAbility CRYSTALLIZER = new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.crystallizer"; - } + public static final IToolHarvestAbility CENTRIFUGE = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.centrifuge"; + } - @Override - public boolean isAllowed() { - return ToolConfig.abilityCrystallizer; - } + @Override + public boolean isAllowed() { + return ToolConfig.abilityCentrifuge; + } - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 6; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 5; + } - @Override - public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - ItemStack stack = new ItemStack(block, 1, meta); - CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack, Fluids.PEROXIDE); + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + // a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; - boolean doesCrystallize = result != null; - - harvestBlock(doesCrystallize, world, x, y, z, player); - - if(doesCrystallize) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy())); - } - } - }; - - public static final IToolHarvestAbility MERCURY = new IToolHarvestAbility() { - @Override - public String getName() { - return "tool.ability.mercury"; - } + ItemStack stack = new ItemStack(block, 1, meta); + ItemStack[] result = CentrifugeRecipes.getOutput(stack); - @Override - public boolean isAllowed() { - return ToolConfig.abilityMercury; - } + boolean doesCentrifuge = result != null; - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 7; - } + harvestBlock(doesCentrifuge, world, x, y, z, player); - @Override - public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; - - int mercury = 0; + if(doesCentrifuge) { + for(ItemStack st : result) { + if(st != null) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, st.copy())); + } + } + } + } + }; - if(block == Blocks.redstone_ore) - mercury = player.getRNG().nextInt(5) + 4; - if(block == Blocks.redstone_block) - mercury = player.getRNG().nextInt(7) + 8; - - boolean doesConvert = mercury > 0; - - harvestBlock(doesConvert, world, x, y, z, player); - - if(doesConvert) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_mercury, mercury))); - } - } - }; - // endregion handlers + public static final IToolHarvestAbility CRYSTALLIZER = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.crystallizer"; + } - static final IToolHarvestAbility[] abilities = {NONE, SILK, LUCK, SMELTER, SHREDDER, CENTRIFUGE, CRYSTALLIZER, MERCURY}; + @Override + public boolean isAllowed() { + return ToolConfig.abilityCrystallizer; + } - static IToolHarvestAbility getByName(String name) { - for(IToolHarvestAbility ability : abilities) { - if(ability.getName().equals(name)) - return ability; - } - - return NONE; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 6; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + // a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + ItemStack stack = new ItemStack(block, 1, meta); + CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack, Fluids.PEROXIDE); + + boolean doesCrystallize = result != null; + + harvestBlock(doesCrystallize, world, x, y, z, player); + + if(doesCrystallize) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy())); + } + } + }; + + public static final IToolHarvestAbility MERCURY = new IToolHarvestAbility() { + @Override + public String getName() { + return "tool.ability.mercury"; + } + + @Override + public boolean isAllowed() { + return ToolConfig.abilityMercury; + } + + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 7; + } + + @Override + public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) { + // a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + int mercury = 0; + + if(block == Blocks.redstone_ore) + mercury = player.getRNG().nextInt(5) + 4; + if(block == Blocks.redstone_block) + mercury = player.getRNG().nextInt(7) + 8; + + boolean doesConvert = mercury > 0; + + harvestBlock(doesConvert, world, x, y, z, player); + + if(doesConvert) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_mercury, mercury))); + } + } + }; + // endregion handlers + + static final IToolHarvestAbility[] abilities = { NONE, SILK, LUCK, SMELTER, SHREDDER, CENTRIFUGE, CRYSTALLIZER, MERCURY }; + + static IToolHarvestAbility getByName(String name) { + for(IToolHarvestAbility ability : abilities) { + if(ability.getName().equals(name)) + return ability; + } + + return NONE; + } } diff --git a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java index 9a874dbb1..f3571ab6a 100644 --- a/src/main/java/com/hbm/handler/ability/IWeaponAbility.java +++ b/src/main/java/com/hbm/handler/ability/IWeaponAbility.java @@ -4,7 +4,6 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBobble.BobbleType; import com.hbm.handler.threading.PacketThreading; import com.hbm.items.ModItems; -import com.hbm.lib.ModDamageSource; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; import com.hbm.util.ContaminationUtil; @@ -35,333 +34,337 @@ import net.minecraft.util.DamageSource; import net.minecraft.world.World; public interface IWeaponAbility extends IBaseAbility { - // Note: tool is currently unused in weapon abilities - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool); - - public final static int SORT_ORDER_BASE = 200; + // Note: tool is currently unused in weapon abilities + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool); - // region handlers - public static final IWeaponAbility NONE = new IWeaponAbility() { - @Override - public String getName() { - return ""; - } + public final static int SORT_ORDER_BASE = 200; - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 0; - } + // region handlers + public static final IWeaponAbility NONE = new IWeaponAbility() { + @Override + public String getName() { + return ""; + } - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {} - }; + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 0; + } - public static final IWeaponAbility RADIATION = new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.radiation"; - } + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { + } + }; - public final float[] radAtLevel = {15F, 50F, 500F}; + public static final IWeaponAbility RADIATION = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.radiation"; + } - @Override - public int levels() { - return radAtLevel.length; - } + public final float[] radAtLevel = { 15F, 50F, 500F }; - @Override - public String getExtension(int level) { - return " (" + radAtLevel[level] + ")"; - } + @Override + public int levels() { + return radAtLevel.length; + } - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 1; - } + @Override + public String getExtension(int level) { + return " (" + radAtLevel[level] + ")"; + } - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { - if(victim instanceof EntityLivingBase) - ContaminationUtil.contaminate((EntityLivingBase)victim, HazardType.RADIATION, ContaminationType.CREATIVE, radAtLevel[level]); - } - }; + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 1; + } - public static final IWeaponAbility VAMPIRE = new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.vampire"; - } + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { + if(victim instanceof EntityLivingBase) + ContaminationUtil.contaminate((EntityLivingBase) victim, HazardType.RADIATION, ContaminationType.CREATIVE, radAtLevel[level]); + } + }; - public final float[] amountAtLevel = {2F, 3F, 5F, 10F, 50F}; + public static final IWeaponAbility VAMPIRE = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.vampire"; + } - @Override - public int levels() { - return amountAtLevel.length; - } + public final float[] amountAtLevel = { 2F, 3F, 5F, 10F, 50F }; - @Override - public String getExtension(int level) { - return " (" + amountAtLevel[level] + ")"; - } + @Override + public int levels() { + return amountAtLevel.length; + } - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 2; - } + @Override + public String getExtension(int level) { + return " (" + amountAtLevel[level] + ")"; + } - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { - float amount = amountAtLevel[level]; - - if(victim instanceof EntityLivingBase) { - EntityLivingBase living = (EntityLivingBase) victim; - if(living.getHealth() <= 0) return; - living.setHealth(living.getHealth() - amount); - if(living.getHealth() <= 0) living.onDeath(DamageSource.magic); - player.heal(amount); - } - } - }; + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 2; + } - public static final IWeaponAbility STUN = new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.stun"; - } + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { + float amount = amountAtLevel[level]; - public final int[] durationAtLevel = {2, 3, 5, 10, 15}; + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; + if(living.getHealth() <= 0) + return; + living.setHealth(living.getHealth() - amount); + if(living.getHealth() <= 0) + living.onDeath(DamageSource.magic); + player.heal(amount); + } + } + }; - @Override - public int levels() { - return durationAtLevel.length; - } + public static final IWeaponAbility STUN = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.stun"; + } - @Override - public String getExtension(int level) { - return " (" + durationAtLevel[level] + ")"; - } + public final int[] durationAtLevel = { 2, 3, 5, 10, 15 }; - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 3; - } + @Override + public int levels() { + return durationAtLevel.length; + } - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { - int duration = durationAtLevel[level]; - - if(victim instanceof EntityLivingBase) { - EntityLivingBase living = (EntityLivingBase) victim; + @Override + public String getExtension(int level) { + return " (" + durationAtLevel[level] + ")"; + } - living.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, duration * 20, 4)); - living.addPotionEffect(new PotionEffect(Potion.weakness.id, duration * 20, 4)); - } - } - }; + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 3; + } - public static final IWeaponAbility PHOSPHORUS = new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.phosphorus"; - } + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { + int duration = durationAtLevel[level]; - public final int[] durationAtLevel = {60, 90}; + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; - @Override - public int levels() { - return durationAtLevel.length; - } + living.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, duration * 20, 4)); + living.addPotionEffect(new PotionEffect(Potion.weakness.id, duration * 20, 4)); + } + } + }; - @Override - public String getExtension(int level) { - return " (" + durationAtLevel[level] + ")"; - } + public static final IWeaponAbility PHOSPHORUS = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.phosphorus"; + } - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 4; - } + public final int[] durationAtLevel = { 60, 90 }; - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { - int duration = durationAtLevel[level]; - - if(victim instanceof EntityLivingBase) { - EntityLivingBase living = (EntityLivingBase) victim; + @Override + public int levels() { + return durationAtLevel.length; + } - living.addPotionEffect(new PotionEffect(HbmPotion.phosphorus.id, duration * 20, 4)); - } - } - }; + @Override + public String getExtension(int level) { + return " (" + durationAtLevel[level] + ")"; + } - public static final IWeaponAbility FIRE = new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.fire"; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 4; + } - public final int[] durationAtLevel = {5, 10}; + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { + int duration = durationAtLevel[level]; - @Override - public int levels() { - return durationAtLevel.length; - } + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; - @Override - public String getExtension(int level) { - return " (" + durationAtLevel[level] + ")"; - } + living.addPotionEffect(new PotionEffect(HbmPotion.phosphorus.id, duration * 20, 4)); + } + } + }; - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 6; - } + public static final IWeaponAbility FIRE = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.fire"; + } - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { - if(victim instanceof EntityLivingBase) { - victim.setFire(durationAtLevel[level]); - } - } - }; + public final int[] durationAtLevel = { 5, 10 }; - public static final IWeaponAbility CHAINSAW = new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.chainsaw"; - } + @Override + public int levels() { + return durationAtLevel.length; + } - public final int[] dividerAtLevel = {15, 10}; + @Override + public String getExtension(int level) { + return " (" + durationAtLevel[level] + ")"; + } - @Override - public int levels() { - return dividerAtLevel.length; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 6; + } - @Override - public String getExtension(int level) { - return " (1:" + dividerAtLevel[level] + ")"; - } + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { + if(victim instanceof EntityLivingBase) { + victim.setFire(durationAtLevel[level]); + } + } + }; - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 7; - } + public static final IWeaponAbility CHAINSAW = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.chainsaw"; + } - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { - int divider = dividerAtLevel[level]; + public final int[] dividerAtLevel = { 15, 10 }; - if(victim instanceof EntityLivingBase) { - EntityLivingBase living = (EntityLivingBase) victim; + @Override + public int levels() { + return dividerAtLevel.length; + } - if(living.getHealth() <= 0.0F) { - int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health + @Override + public String getExtension(int level) { + return " (1:" + dividerAtLevel[level] + ")"; + } - for(int i = 0; i < count; i++) { - living.entityDropItem(new ItemStack(ModItems.nitra_small), 1); - world.spawnEntityInWorld(new EntityXPOrb(world, living.posX, living.posY, living.posZ, 1)); - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 7; + } - if(player instanceof EntityPlayerMP) { - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "vanillaburst"); - data.setInteger("count", count * 4); - data.setDouble("motion", 0.1D); - data.setString("mode", "blockdust"); - data.setInteger("block", Block.getIdFromBlock(Blocks.redstone_block)); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, living.posX, living.posY + living.height * 0.5, living.posZ), new TargetPoint(living.dimension, living.posX, living.posY, living.posZ, 50)); - } + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { + int divider = dividerAtLevel[level]; - world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "hbm:weapon.chainsaw", 0.5F, 1.0F); - } - } - } - }; + if(victim instanceof EntityLivingBase) { + EntityLivingBase living = (EntityLivingBase) victim; - public static final IWeaponAbility BEHEADER = new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.beheader"; - } + if(living.getHealth() <= 0.0F) { + int count = Math.min((int) Math.ceil(living.getMaxHealth() / divider), 250); // safeguard to prevent funnies from bosses with obscene health - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 8; - } + for(int i = 0; i < count; i++) { + living.entityDropItem(new ItemStack(ModItems.nitra_small), 1); + world.spawnEntityInWorld(new EntityXPOrb(world, living.posX, living.posY, living.posZ, 1)); + } - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { - if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) { - EntityLivingBase living = (EntityLivingBase) victim; + if(player instanceof EntityPlayerMP) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "vanillaburst"); + data.setInteger("count", count * 4); + data.setDouble("motion", 0.1D); + data.setString("mode", "blockdust"); + data.setInteger("block", Block.getIdFromBlock(Blocks.redstone_block)); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, living.posX, living.posY + living.height * 0.5, living.posZ), + new TargetPoint(living.dimension, living.posX, living.posY, living.posZ, 50)); + } - if(living instanceof EntitySkeleton) { - if(((EntitySkeleton)living).getSkeletonType() == 0) { - living.entityDropItem(new ItemStack(Items.skull, 1, 0), 0.0F); - } else { - if(world.rand.nextInt(20) == 0) - living.entityDropItem(new ItemStack(Items.skull, 1, 1), 0.0F); - else - living.entityDropItem(new ItemStack(Items.coal, 3), 0.0F); - } - } else if(living instanceof EntityZombie) { - living.entityDropItem(new ItemStack(Items.skull, 1, 2), 0.0F); - } else if(living instanceof EntityCreeper) { - living.entityDropItem(new ItemStack(Items.skull, 1, 4), 0.0F); - } else if(living instanceof EntityMagmaCube) { - living.entityDropItem(new ItemStack(Items.magma_cream, 3), 0.0F); - } else if(living instanceof EntitySlime) { - living.entityDropItem(new ItemStack(Items.slime_ball, 3), 0.0F); - } else if(living instanceof EntityPlayer) { - ItemStack head = new ItemStack(Items.skull, 1, 3); - head.stackTagCompound = new NBTTagCompound(); - head.stackTagCompound.setString("SkullOwner", ((EntityPlayer) living).getDisplayName()); - living.entityDropItem(head, 0.0F); - } else { - living.entityDropItem(new ItemStack(Items.rotten_flesh, 3, 0), 0.0F); - living.entityDropItem(new ItemStack(Items.bone, 2, 0), 0.0F); - } - } - } - }; + world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "hbm:weapon.chainsaw", 0.5F, 1.0F); + } + } + } + }; - public static final IWeaponAbility BOBBLE = new IWeaponAbility() { - @Override - public String getName() { - return "weapon.ability.bobble"; - } + public static final IWeaponAbility BEHEADER = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.beheader"; + } - @Override - public int sortOrder() { - return SORT_ORDER_BASE + 9; - } + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 8; + } - @Override - public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { - if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { - EntityMob mob = (EntityMob) victim; + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { + if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) { + EntityLivingBase living = (EntityLivingBase) victim; - int chance = 1000; + if(living instanceof EntitySkeleton) { + if(((EntitySkeleton) living).getSkeletonType() == 0) { + living.entityDropItem(new ItemStack(Items.skull, 1, 0), 0.0F); + } else { + if(world.rand.nextInt(20) == 0) + living.entityDropItem(new ItemStack(Items.skull, 1, 1), 0.0F); + else + living.entityDropItem(new ItemStack(Items.coal, 3), 0.0F); + } + } else if(living instanceof EntityZombie) { + living.entityDropItem(new ItemStack(Items.skull, 1, 2), 0.0F); + } else if(living instanceof EntityCreeper) { + living.entityDropItem(new ItemStack(Items.skull, 1, 4), 0.0F); + } else if(living instanceof EntityMagmaCube) { + living.entityDropItem(new ItemStack(Items.magma_cream, 3), 0.0F); + } else if(living instanceof EntitySlime) { + living.entityDropItem(new ItemStack(Items.slime_ball, 3), 0.0F); + } else if(living instanceof EntityPlayer) { + ItemStack head = new ItemStack(Items.skull, 1, 3); + head.stackTagCompound = new NBTTagCompound(); + head.stackTagCompound.setString("SkullOwner", ((EntityPlayer) living).getDisplayName()); + living.entityDropItem(head, 0.0F); + } else { + living.entityDropItem(new ItemStack(Items.rotten_flesh, 3, 0), 0.0F); + living.entityDropItem(new ItemStack(Items.bone, 2, 0), 0.0F); + } + } + } + }; - if(mob.getMaxHealth() > 20) { - chance = 750; - } + public static final IWeaponAbility BOBBLE = new IWeaponAbility() { + @Override + public String getName() { + return "weapon.ability.bobble"; + } - if(world.rand.nextInt(chance) == 0) - mob.entityDropItem(new ItemStack(ModBlocks.bobblehead, 1, world.rand.nextInt(BobbleType.values().length - 1) + 1), 0.0F); - } - } - }; - // endregion handlers + @Override + public int sortOrder() { + return SORT_ORDER_BASE + 9; + } - static final IWeaponAbility[] abilities = {NONE, RADIATION, VAMPIRE, STUN, PHOSPHORUS, FIRE, CHAINSAW, BEHEADER, BOBBLE}; + @Override + public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) { + if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { + EntityMob mob = (EntityMob) victim; - static IWeaponAbility getByName(String name) { - for(IWeaponAbility ability : abilities) { - if(ability.getName().equals(name)) - return ability; - } - - return NONE; - } + int chance = 1000; + + if(mob.getMaxHealth() > 20) { + chance = 750; + } + + if(world.rand.nextInt(chance) == 0) + mob.entityDropItem(new ItemStack(ModBlocks.bobblehead, 1, world.rand.nextInt(BobbleType.values().length - 1) + 1), 0.0F); + } + } + }; + // endregion handlers + + static final IWeaponAbility[] abilities = { NONE, RADIATION, VAMPIRE, STUN, PHOSPHORUS, FIRE, CHAINSAW, BEHEADER, BOBBLE }; + + static IWeaponAbility getByName(String name) { + for(IWeaponAbility ability : abilities) { + if(ability.getName().equals(name)) + return ability; + } + + return NONE; + } } diff --git a/src/main/java/com/hbm/handler/ability/ToolPreset.java b/src/main/java/com/hbm/handler/ability/ToolPreset.java index ce8f36dd5..e705b23a9 100644 --- a/src/main/java/com/hbm/handler/ability/ToolPreset.java +++ b/src/main/java/com/hbm/handler/ability/ToolPreset.java @@ -7,93 +7,94 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; public class ToolPreset { - public IToolAreaAbility areaAbility = IToolAreaAbility.NONE; - public int areaAbilityLevel = 0; - public IToolHarvestAbility harvestAbility = IToolHarvestAbility.NONE; - public int harvestAbilityLevel = 0; + public IToolAreaAbility areaAbility = IToolAreaAbility.NONE; + public int areaAbilityLevel = 0; + public IToolHarvestAbility harvestAbility = IToolHarvestAbility.NONE; + public int harvestAbilityLevel = 0; - public ToolPreset() {} + public ToolPreset() { + } - public ToolPreset(IToolAreaAbility areaAbility, IToolHarvestAbility harvestAbility) { - this.areaAbility = areaAbility; - this.harvestAbility = harvestAbility; - } + public ToolPreset(IToolAreaAbility areaAbility, IToolHarvestAbility harvestAbility) { + this.areaAbility = areaAbility; + this.harvestAbility = harvestAbility; + } - public ToolPreset(IToolAreaAbility areaAbility, int areaAbilityLevel, IToolHarvestAbility harvestAbility, int harvestAbilityLevel) { - this.areaAbility = areaAbility; - this.areaAbilityLevel = areaAbilityLevel; - this.harvestAbility = harvestAbility; - this.harvestAbilityLevel = harvestAbilityLevel; - } + public ToolPreset(IToolAreaAbility areaAbility, int areaAbilityLevel, IToolHarvestAbility harvestAbility, int harvestAbilityLevel) { + this.areaAbility = areaAbility; + this.areaAbilityLevel = areaAbilityLevel; + this.harvestAbility = harvestAbility; + this.harvestAbilityLevel = harvestAbilityLevel; + } - public ChatComponentText getMessage() { - if (isNone()) - return ChatBuilder.start("[Tool ability deactivated]").color(EnumChatFormatting.GOLD).flush(); - - String areaPart = areaAbility.getFullName(areaAbilityLevel); - String harvestPart = harvestAbility.getFullName(harvestAbilityLevel); - - ChatBuilder builder = ChatBuilder.start("[Enabled "); + public ChatComponentText getMessage() { + if(isNone()) + return ChatBuilder.start("[Tool ability deactivated]").color(EnumChatFormatting.GOLD).flush(); - if (!areaPart.isEmpty()) - builder.next(areaPart); + String areaPart = areaAbility.getFullName(areaAbilityLevel); + String harvestPart = harvestAbility.getFullName(harvestAbilityLevel); - if (!areaPart.isEmpty() && !harvestPart.isEmpty()) - builder.next(" + "); + ChatBuilder builder = ChatBuilder.start("[Enabled "); - if (!harvestPart.isEmpty()) - builder.next(harvestPart); - - return builder.colorAll(EnumChatFormatting.YELLOW).flush(); - } + if(!areaPart.isEmpty()) + builder.next(areaPart); - public boolean isNone() { - return areaAbility == IToolAreaAbility.NONE && harvestAbility == IToolHarvestAbility.NONE; - } + if(!areaPart.isEmpty() && !harvestPart.isEmpty()) + builder.next(" + "); - public void writeToNBT(NBTTagCompound nbt) { - nbt.setString("area", areaAbility.getName()); - nbt.setInteger("areaLevel", areaAbilityLevel); - nbt.setString("harvest", harvestAbility.getName()); - nbt.setInteger("harvestLevel", harvestAbilityLevel); - } + if(!harvestPart.isEmpty()) + builder.next(harvestPart); - public void readFromNBT(NBTTagCompound nbt) { - areaAbility = IToolAreaAbility.getByName(nbt.getString("area")); - areaAbilityLevel = nbt.getInteger("areaLevel"); - harvestAbility = IToolHarvestAbility.getByName(nbt.getString("harvest")); - harvestAbilityLevel = nbt.getInteger("harvestLevel"); + return builder.colorAll(EnumChatFormatting.YELLOW).flush(); + } - areaAbilityLevel = Math.min(areaAbilityLevel, areaAbility.levels() - 1); - harvestAbilityLevel = Math.min(harvestAbilityLevel, harvestAbility.levels() - 1); - } + public boolean isNone() { + return areaAbility == IToolAreaAbility.NONE && harvestAbility == IToolHarvestAbility.NONE; + } - public void restrictTo(AvailableAbilities availableAbilities) { - int maxAreaLevel = availableAbilities.maxLevel(areaAbility); + public void writeToNBT(NBTTagCompound nbt) { + nbt.setString("area", areaAbility.getName()); + nbt.setInteger("areaLevel", areaAbilityLevel); + nbt.setString("harvest", harvestAbility.getName()); + nbt.setInteger("harvestLevel", harvestAbilityLevel); + } - if (maxAreaLevel == -1) { - areaAbility = IToolAreaAbility.NONE; - areaAbilityLevel = 0; - } else if (areaAbilityLevel > maxAreaLevel) { - areaAbilityLevel = maxAreaLevel; - } else if (areaAbilityLevel < 0) { - areaAbilityLevel = 0; - } + public void readFromNBT(NBTTagCompound nbt) { + areaAbility = IToolAreaAbility.getByName(nbt.getString("area")); + areaAbilityLevel = nbt.getInteger("areaLevel"); + harvestAbility = IToolHarvestAbility.getByName(nbt.getString("harvest")); + harvestAbilityLevel = nbt.getInteger("harvestLevel"); - if (!areaAbility.allowsHarvest(areaAbilityLevel)) { - harvestAbility = IToolHarvestAbility.NONE; - harvestAbilityLevel = 0; - } + areaAbilityLevel = Math.min(areaAbilityLevel, areaAbility.levels() - 1); + harvestAbilityLevel = Math.min(harvestAbilityLevel, harvestAbility.levels() - 1); + } - int maxHarvestLevel = availableAbilities.maxLevel(harvestAbility); + public void restrictTo(AvailableAbilities availableAbilities) { + int maxAreaLevel = availableAbilities.maxLevel(areaAbility); - if (maxHarvestLevel == -1) { - harvestAbility = IToolHarvestAbility.NONE; - harvestAbilityLevel = 0; - } else if (harvestAbilityLevel > maxHarvestLevel) { - harvestAbilityLevel = maxHarvestLevel; - } else if (harvestAbilityLevel < 0) { - harvestAbilityLevel = 0; - } - } + if(maxAreaLevel == -1) { + areaAbility = IToolAreaAbility.NONE; + areaAbilityLevel = 0; + } else if(areaAbilityLevel > maxAreaLevel) { + areaAbilityLevel = maxAreaLevel; + } else if(areaAbilityLevel < 0) { + areaAbilityLevel = 0; + } + + if(!areaAbility.allowsHarvest(areaAbilityLevel)) { + harvestAbility = IToolHarvestAbility.NONE; + harvestAbilityLevel = 0; + } + + int maxHarvestLevel = availableAbilities.maxLevel(harvestAbility); + + if(maxHarvestLevel == -1) { + harvestAbility = IToolHarvestAbility.NONE; + harvestAbilityLevel = 0; + } else if(harvestAbilityLevel > maxHarvestLevel) { + harvestAbilityLevel = maxHarvestLevel; + } else if(harvestAbilityLevel < 0) { + harvestAbilityLevel = 0; + } + } } diff --git a/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java b/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java index 2290cedcb..83332e52a 100644 --- a/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java @@ -4,26 +4,11 @@ import java.util.List; import com.hbm.entity.projectile.EntityBulletBaseNT; import com.hbm.entity.projectile.EntityBulletBaseNT.*; -import com.hbm.explosion.ExplosionNukeSmall; -import com.hbm.explosion.ExplosionNukeSmall.MukeParams; import com.hbm.handler.BulletConfiguration; -import com.hbm.handler.threading.PacketThreading; -import com.hbm.lib.Library; -import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.potion.HbmPotion; -import com.hbm.util.ArmorRegistry; -import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.util.BobMathUtil; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; public class BulletConfigFactory { @@ -57,37 +42,6 @@ public class BulletConfigFactory { return bullet; } - public static BulletConfiguration standardPistolConfig() { - BulletConfiguration bullet = standardBulletConfig(); - bullet.style = BulletConfiguration.STYLE_PISTOL; - bullet.plink = BulletConfiguration.PLINK_BULLET; - return bullet; - } - - public static BulletConfiguration standardBuckshotConfig() { - - BulletConfiguration bullet = new BulletConfiguration(); - - bullet.velocity = 5.0F; - bullet.spread = defaultSpread * 10F; - bullet.wear = 10; - bullet.bulletsMin = 6; - bullet.bulletsMax = 8; - bullet.gravity = 0D; - bullet.maxAge = 100; - bullet.doesRicochet = true; - bullet.ricochetAngle = 5; - bullet.HBRC = 10; - bullet.LBRC = 95; - bullet.bounceMod = 0.8; - bullet.doesPenetrate = false; - bullet.doesBreakGlass = true; - bullet.style = BulletConfiguration.STYLE_PELLET; - bullet.plink = BulletConfiguration.PLINK_BULLET; - bullet.leadChance = 10; - - return bullet; - } public static BulletConfiguration standardRocketConfig() { @@ -141,218 +95,6 @@ public class BulletConfigFactory { return bullet; } - public static BulletConfiguration standardShellConfig() { - - BulletConfiguration bullet = new BulletConfiguration(); - - bullet.velocity = 3.0F; - bullet.spread = defaultSpread; - bullet.wear = 10; - bullet.bulletsMin = 1; - bullet.bulletsMax = 1; - bullet.gravity = 0.005D; - bullet.maxAge = 300; - bullet.doesRicochet = true; - bullet.ricochetAngle = 10; - bullet.HBRC = 2; - bullet.LBRC = 100; - bullet.bounceMod = 0.8; - bullet.doesPenetrate = false; - bullet.doesBreakGlass = false; - bullet.style = BulletConfiguration.STYLE_GRENADE; - bullet.plink = BulletConfiguration.PLINK_GRENADE; - bullet.vPFX = "smoke"; - - return bullet; - } - - public static BulletConfiguration standardNukeConfig() { - - BulletConfiguration bullet = new BulletConfiguration(); - - bullet.velocity = 3.0F; - bullet.spread = defaultSpread; - bullet.wear = 10; - bullet.bulletsMin = 1; - bullet.bulletsMax = 1; - bullet.dmgMin = 1000; - bullet.dmgMax = 1000; - bullet.gravity = 0.025D; - bullet.maxAge = 300; - bullet.doesRicochet = false; - bullet.ricochetAngle = 0; - bullet.HBRC = 0; - bullet.LBRC = 0; - bullet.bounceMod = 1.0; - bullet.doesPenetrate = true; - bullet.doesBreakGlass = false; - bullet.style = BulletConfiguration.STYLE_NUKE; - bullet.plink = BulletConfiguration.PLINK_GRENADE; - - return bullet; - } - - /* - * Sizes: - * 0 - safe - * 1 - tot - * 2 - small - * 3 - medium - * 4 - big - */ - public static void nuclearExplosion(Entity entity, int x, int y, int z, MukeParams params) { - - if(!entity.worldObj.isRemote) { - - double posX = entity.posX; - double posY = entity.posY + 0.5; - double posZ = entity.posZ; - - if(y >= 0) { - posX = x + 0.5; - posY = y + 1.5; - posZ = z + 0.5; - } - - ExplosionNukeSmall.explode(entity.worldObj, posX, posY, posZ, params); - } - } - - public static void makeFlechette(BulletConfiguration bullet) { - - bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> { - bulletnt.getStuck(x, y, z, sideHit); - }; - } - - public static IBulletImpactBehaviorNT getPhosphorousEffect(final int radius, final int duration, final int count, final double motion, float hazeChance) { - - IBulletImpactBehaviorNT impact = new IBulletImpactBehaviorNT() { - - @Override - public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) { - - List hit = bullet.worldObj.getEntitiesWithinAABBExcludingEntity(bullet, AxisAlignedBB.getBoundingBox(bullet.posX - radius, bullet.posY - radius, bullet.posZ - radius, bullet.posX + radius, bullet.posY + radius, bullet.posZ + radius)); - - for(Entity e : hit) { - - if(!Library.isObstructed(bullet.worldObj, bullet.posX, bullet.posY, bullet.posZ, e.posX, e.posY + e.getEyeHeight(), e.posZ)) { - e.setFire(5); - - if(e instanceof EntityLivingBase) { - - PotionEffect eff = new PotionEffect(HbmPotion.phosphorus.id, duration, 0, true); - eff.getCurativeItems().clear(); - ((EntityLivingBase)e).addPotionEffect(eff); - } - } - } - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "vanillaburst"); - data.setString("mode", "flame"); - data.setInteger("count", count); - data.setDouble("motion", motion); - - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, bullet.posX, bullet.posY, bullet.posZ), new TargetPoint(bullet.dimension, bullet.posX, bullet.posY, bullet.posZ, 50)); - - if(bullet.worldObj.rand.nextFloat() < hazeChance) { - NBTTagCompound haze = new NBTTagCompound(); - haze.setString("type", "haze"); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(haze, bullet.posX, bullet.posY, bullet.posZ), new TargetPoint(bullet.dimension, bullet.posX, bullet.posY, bullet.posZ, 150)); - } - } - }; - - return impact; - } - - public static IBulletImpactBehaviorNT getGasEffect(final int radius, final int duration) { - - IBulletImpactBehaviorNT impact = new IBulletImpactBehaviorNT() { - - @Override - public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) { - - List hit = bullet.worldObj.getEntitiesWithinAABBExcludingEntity(bullet, AxisAlignedBB.getBoundingBox(bullet.posX - radius, bullet.posY - radius, bullet.posZ - radius, bullet.posX + radius, bullet.posY + radius, bullet.posZ + radius)); - - for(Entity e : hit) { - - if(!Library.isObstructed(bullet.worldObj, bullet.posX, bullet.posY, bullet.posZ, e.posX, e.posY + e.getEyeHeight(), e.posZ)) { - - if(e instanceof EntityLivingBase) { - - EntityLivingBase entity = (EntityLivingBase) e; - - if(ArmorRegistry.hasAllProtection(entity, 3, HazardClass.GAS_LUNG)) - continue; - - PotionEffect eff0 = new PotionEffect(Potion.poison.id, duration, 2, true); - PotionEffect eff1 = new PotionEffect(Potion.digSlowdown.id, duration, 2, true); - PotionEffect eff2 = new PotionEffect(Potion.weakness.id, duration, 4, true); - PotionEffect eff3 = new PotionEffect(Potion.wither.id, (int)Math.ceil(duration * 0.1), 0, true); - eff0.getCurativeItems().clear(); - eff1.getCurativeItems().clear(); - eff2.getCurativeItems().clear(); - eff3.getCurativeItems().clear(); - entity.addPotionEffect(eff0); - entity.addPotionEffect(eff1); - entity.addPotionEffect(eff2); - entity.addPotionEffect(eff3); - } - } - } - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "vanillaburst"); - data.setString("mode", "cloud"); - data.setInteger("count", 15); - data.setDouble("motion", 0.1D); - - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, bullet.posX, bullet.posY, bullet.posZ), new TargetPoint(bullet.dimension, bullet.posX, bullet.posY, bullet.posZ, 50)); - } - }; - - return impact; - } - - public static IBulletUpdateBehaviorNT getLaserSteering() { - - IBulletUpdateBehaviorNT onUpdate = new IBulletUpdateBehaviorNT() { - - @Override - public void behaveUpdate(EntityBulletBaseNT bullet) { - - if(bullet.getThrower() == null || !(bullet.getThrower() instanceof EntityPlayer)) - return; - - if(Vec3.createVectorHelper(bullet.posX - bullet.getThrower().posX, bullet.posY - bullet.getThrower().posY, bullet.posZ - bullet.getThrower().posZ).lengthVector() > 100) - return; - - MovingObjectPosition mop = Library.rayTrace((EntityPlayer)bullet.getThrower(), 200, 1); - - if(mop == null || mop.hitVec == null) - return; - - Vec3 vec = Vec3.createVectorHelper(mop.hitVec.xCoord - bullet.posX, mop.hitVec.yCoord - bullet.posY, mop.hitVec.zCoord - bullet.posZ); - - if(vec.lengthVector() < 3) - return; - - vec = vec.normalize(); - - double speed = Vec3.createVectorHelper(bullet.motionX, bullet.motionY, bullet.motionZ).lengthVector(); - - bullet.motionX = vec.xCoord * speed; - bullet.motionY = vec.yCoord * speed; - bullet.motionZ = vec.zCoord * speed; - } - - }; - - return onUpdate; - } - public static IBulletUpdateBehaviorNT getHomingBehavior(final double range, final double angle) { IBulletUpdateBehaviorNT onUpdate = new IBulletUpdateBehaviorNT() { diff --git a/src/main/java/com/hbm/handler/guncfg/GunCannonFactory.java b/src/main/java/com/hbm/handler/guncfg/GunCannonFactory.java deleted file mode 100644 index 13a68e433..000000000 --- a/src/main/java/com/hbm/handler/guncfg/GunCannonFactory.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.hbm.handler.guncfg; - -import com.hbm.explosion.ExplosionNukeSmall; -import com.hbm.handler.BulletConfiguration; -import com.hbm.inventory.RecipesCommon.ComparableStack; -import com.hbm.items.ItemAmmoEnums.Ammo240Shell; -import com.hbm.items.ModItems; -import com.hbm.particle.SpentCasing; -import com.hbm.particle.SpentCasing.CasingType; - -public class GunCannonFactory { - - protected static SpentCasing CASINNG240MM; - - static { - CASINNG240MM = new SpentCasing(CasingType.BOTTLENECK).setScale(7.5F).setBounceMotion(0.5F, 0.5F).setColor(SpentCasing.COLOR_CASE_BRASS).setupSmoke(1F, 0.5D, 60, 20); - } - - public static BulletConfiguration getShellConfig() { - - BulletConfiguration bullet = BulletConfigFactory.standardShellConfig(); - - bullet.ammo = new ComparableStack(ModItems.ammo_shell.stackFromEnum(Ammo240Shell.STOCK)); - bullet.dmgMin = 25; - bullet.dmgMax = 35; - bullet.explosive = 4F; - bullet.blockDamage = false; - - bullet.spentCasing = CASINNG240MM.register("240MM"); //same instance everywhere, only register once - - return bullet; - } - - public static BulletConfiguration getShellExplosiveConfig() { - - BulletConfiguration bullet = BulletConfigFactory.standardShellConfig(); - - bullet.ammo = new ComparableStack(ModItems.ammo_shell.stackFromEnum(Ammo240Shell.EXPLOSIVE)); - bullet.dmgMin = 35; - bullet.dmgMax = 45; - bullet.explosive = 4F; - bullet.blockDamage = true; - - bullet.spentCasing = CASINNG240MM; - - return bullet; - } - - public static BulletConfiguration getShellAPConfig() { - - BulletConfiguration bullet = BulletConfigFactory.standardShellConfig(); - - bullet.ammo = new ComparableStack(ModItems.ammo_shell.stackFromEnum(Ammo240Shell.APFSDS_T)); - bullet.dmgMin = 50; - bullet.dmgMax = 55; - bullet.doesPenetrate = true; - bullet.style = BulletConfiguration.STYLE_APDS; - - bullet.spentCasing = CASINNG240MM; - - return bullet; - } - - public static BulletConfiguration getShellDUConfig() { - - BulletConfiguration bullet = BulletConfigFactory.standardShellConfig(); - - bullet.ammo = new ComparableStack(ModItems.ammo_shell.stackFromEnum(Ammo240Shell.APFSDS_DU)); - bullet.dmgMin = 70; - bullet.dmgMax = 80; - bullet.doesPenetrate = true; - bullet.style = BulletConfiguration.STYLE_APDS; - - bullet.spentCasing = CASINNG240MM; - - return bullet; - } - - public static BulletConfiguration getShellW9Config() { - - BulletConfiguration bullet = BulletConfigFactory.standardShellConfig(); - - bullet.ammo = new ComparableStack(ModItems.ammo_shell.stackFromEnum(Ammo240Shell.W9)); - bullet.dmgMin = 100; - bullet.dmgMax = 150; - - bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> { - BulletConfigFactory.nuclearExplosion(bulletnt, x, y, z, ExplosionNukeSmall.PARAMS_TOTS); - }; - - bullet.spentCasing = CASINNG240MM; - - return bullet; - } - -} diff --git a/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java b/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java index 3d622c7f7..d0e8e6bd7 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java @@ -1,317 +1,11 @@ package com.hbm.handler.guncfg; -import java.util.ArrayList; - -import com.hbm.blocks.ModBlocks; -import com.hbm.entity.projectile.EntityBulletBaseNT; -import com.hbm.entity.projectile.EntityBulletBaseNT.IBulletImpactBehaviorNT; -import com.hbm.entity.projectile.EntityBulletBaseNT.IBulletUpdateBehaviorNT; -import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; -import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; -import com.hbm.items.ItemAmmoEnums.AmmoFireExt; import com.hbm.items.ModItems; -import com.hbm.items.weapon.sedna.Crosshair; -import com.hbm.lib.HbmCollection.EnumGunManufacturer; -import com.hbm.main.MainRegistry; -import com.hbm.tileentity.IRepairable; -import com.hbm.tileentity.IRepairable.EnumExtinguishType; -import com.hbm.util.CompatExternal; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.init.Blocks; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; public class GunEnergyFactory { - public static GunConfiguration getExtConfig() { - - GunConfiguration config = new GunConfiguration(); - - config.rateOfFire = 1; - config.roundsPerCycle = 1; - config.gunMode = GunConfiguration.MODE_NORMAL; - config.firingMode = GunConfiguration.FIRE_AUTO; - config.reloadDuration = 20; - config.reloadSoundEnd = false; - config.firingDuration = 0; - config.ammoCap = 300; //good for 15 seconds of continued spray - config.durability = 10000; - config.reloadType = GunConfiguration.RELOAD_FULL; - config.allowsInfinity = true; - config.crosshair = Crosshair.L_CIRCLE; - config.firingSound = "hbm:weapon.extinguisher"; - config.reloadSound = "hbm:weapon.flamerReload"; - - config.name = "PROTEX Fire Exinguisher 6kg"; - config.manufacturer = EnumGunManufacturer.GLORIA; - - config.config = new ArrayList(); - config.config.add(BulletConfigSyncingUtil.FEXT_NORMAL); - config.config.add(BulletConfigSyncingUtil.FEXT_FOAM); - config.config.add(BulletConfigSyncingUtil.FEXT_SAND); - - return config; - } - - public static BulletConfiguration getFextConfig() { - - BulletConfiguration bullet = new BulletConfiguration(); - - bullet.ammo = new ComparableStack(ModItems.ammo_fireext.stackFromEnum(AmmoFireExt.WATER)); - bullet.ammoCount = 300; - - bullet.velocity = 0.75F; - bullet.spread = 0.025F; - bullet.wear = 1; - bullet.bulletsMin = 2; - bullet.bulletsMax = 3; - bullet.dmgMin = 0; - bullet.dmgMax = 0; - bullet.gravity = 0.04D; - bullet.maxAge = 100; - bullet.doesRicochet = false; - bullet.doesPenetrate = true; - bullet.doesBreakGlass = false; - bullet.style = BulletConfiguration.STYLE_NONE; - bullet.plink = BulletConfiguration.PLINK_NONE; - - bullet.bntHurt = (bulletEntity, target) -> { target.extinguish(); }; - - bullet.bntImpact = new IBulletImpactBehaviorNT() { - - @Override - public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) { - - if(!bullet.worldObj.isRemote) { - - int ix = (int)Math.floor(bullet.posX); - int iy = (int)Math.floor(bullet.posY); - int iz = (int)Math.floor(bullet.posZ); - - boolean fizz = false; - - for(int i = -1; i <= 1; i++) { - for(int j = -1; j <= 1; j++) { - for(int k = -1; k <= 1; k++) { - - if(bullet.worldObj.getBlock(ix + i, iy + j, iz + k) == Blocks.fire) { - bullet.worldObj.setBlock(ix + i, iy + j, iz + k, Blocks.air); - fizz = true; - } - } - } - } - - TileEntity core = CompatExternal.getCoreFromPos(bullet.worldObj, ix, iy, iz); - if(core instanceof IRepairable) { - ((IRepairable) core).tryExtinguish(bullet.worldObj, ix, iy, iz, EnumExtinguishType.WATER); - } - - if(fizz) - bullet.worldObj.playSoundEffect(bullet.posX, bullet.posY, bullet.posZ, "random.fizz", 1.0F, 1.5F + bullet.worldObj.rand.nextFloat() * 0.5F); - } - } - }; - - bullet.bntUpdate = new IBulletUpdateBehaviorNT() { - - @Override - public void behaveUpdate(EntityBulletBaseNT bullet) { - - if(bullet.worldObj.isRemote) { - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "vanillaExt"); - data.setString("mode", "blockdust"); - data.setInteger("block", Block.getIdFromBlock(Blocks.water)); - data.setDouble("posX", bullet.posX); - data.setDouble("posY", bullet.posY); - data.setDouble("posZ", bullet.posZ); - data.setDouble("mX", bullet.motionX + bullet.worldObj.rand.nextGaussian() * 0.05); - data.setDouble("mY", bullet.motionY - 0.2 + bullet.worldObj.rand.nextGaussian() * 0.05); - data.setDouble("mZ", bullet.motionZ + bullet.worldObj.rand.nextGaussian() * 0.05); - MainRegistry.proxy.effectNT(data); - } else { - - int x = (int)Math.floor(bullet.posX); - int y = (int)Math.floor(bullet.posY); - int z = (int)Math.floor(bullet.posZ); - - if(bullet.worldObj.getBlock(x, y, z) == ModBlocks.volcanic_lava_block && bullet.worldObj.getBlockMetadata(x, y, z) == 0) { - bullet.worldObj.setBlock(x, y, z, Blocks.obsidian); - bullet.setDead(); - } - } - } - }; - - return bullet; - } - - public static BulletConfiguration getFextFoamConfig() { - - BulletConfiguration bullet = getFextConfig(); - - bullet.ammo = new ComparableStack(ModItems.ammo_fireext.stackFromEnum(AmmoFireExt.FOAM)); - bullet.spread = 0.05F; - - bullet.bntImpact = new IBulletImpactBehaviorNT() { - - @Override - public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) { - - if(!bullet.worldObj.isRemote) { - - int ix = (int)Math.floor(bullet.posX); - int iy = (int)Math.floor(bullet.posY); - int iz = (int)Math.floor(bullet.posZ); - - boolean fizz = false; - - for(int i = -1; i <= 1; i++) { - for(int j = -1; j <= 1; j++) { - for(int k = -1; k <= 1; k++) { - - Block b = bullet.worldObj.getBlock(ix + i, iy + j, iz + k); - - if(b.getMaterial() == Material.fire) { - bullet.worldObj.setBlock(ix + i, iy + j, iz + k, Blocks.air); - fizz = true; - } - } - } - } - - Block b = bullet.worldObj.getBlock(ix, iy, iz); - - TileEntity core = CompatExternal.getCoreFromPos(bullet.worldObj, ix, iy, iz); - if(core instanceof IRepairable) { - ((IRepairable) core).tryExtinguish(bullet.worldObj, ix, iy, iz, EnumExtinguishType.FOAM); - return; - } - - if(b.isReplaceable(bullet.worldObj, ix, iy, iz) && ModBlocks.foam_layer.canPlaceBlockAt(bullet.worldObj, ix, iy, iz)) { - - if(b != ModBlocks.foam_layer) { - bullet.worldObj.setBlock(ix, iy, iz, ModBlocks.foam_layer); - } else { - int meta = bullet.worldObj.getBlockMetadata(ix, iy, iz); - - if(meta < 6) - bullet.worldObj.setBlockMetadataWithNotify(ix, iy, iz, meta + 1, 3); - else - bullet.worldObj.setBlock(ix, iy, iz, ModBlocks.block_foam); - } - } - - if(fizz) - bullet.worldObj.playSoundEffect(bullet.posX, bullet.posY, bullet.posZ, "random.fizz", 1.0F, 1.5F + bullet.worldObj.rand.nextFloat() * 0.5F); - } - } - }; - - bullet.bntUpdate = new IBulletUpdateBehaviorNT() { - - @Override - public void behaveUpdate(EntityBulletBaseNT bullet) { - - if(bullet.worldObj.isRemote) { - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "vanillaExt"); - data.setString("mode", "blockdust"); - data.setInteger("block", Block.getIdFromBlock(ModBlocks.block_foam)); - data.setDouble("posX", bullet.posX); - data.setDouble("posY", bullet.posY); - data.setDouble("posZ", bullet.posZ); - data.setDouble("mX", bullet.motionX + bullet.worldObj.rand.nextGaussian() * 0.05); - data.setDouble("mY", bullet.motionY - 0.2 + bullet.worldObj.rand.nextGaussian() * 0.05); - data.setDouble("mZ", bullet.motionZ + bullet.worldObj.rand.nextGaussian() * 0.05); - MainRegistry.proxy.effectNT(data); - } - } - }; - - return bullet; - } - - public static BulletConfiguration getFextSandConfig() { - - BulletConfiguration bullet = getFextConfig(); - - bullet.ammo = new ComparableStack(ModItems.ammo_fireext.stackFromEnum(AmmoFireExt.SAND)); - bullet.spread = 0.1F; - - bullet.bntHurt = null; // does not extinguish entities - - bullet.bntImpact = new IBulletImpactBehaviorNT() { - - @Override - public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) { - - if(!bullet.worldObj.isRemote) { - - int ix = (int)Math.floor(bullet.posX); - int iy = (int)Math.floor(bullet.posY); - int iz = (int)Math.floor(bullet.posZ); - - Block b = bullet.worldObj.getBlock(ix, iy, iz); - - TileEntity core = CompatExternal.getCoreFromPos(bullet.worldObj, ix, iy, iz); - if(core instanceof IRepairable) { - ((IRepairable) core).tryExtinguish(bullet.worldObj, ix, iy, iz, EnumExtinguishType.SAND); - return; - } - - if((b.isReplaceable(bullet.worldObj, ix, iy, iz) || b == ModBlocks.sand_boron_layer) && ModBlocks.sand_boron_layer.canPlaceBlockAt(bullet.worldObj, ix, iy, iz)) { - - if(b != ModBlocks.sand_boron_layer) { - bullet.worldObj.setBlock(ix, iy, iz, ModBlocks.sand_boron_layer); - } else { - int meta = bullet.worldObj.getBlockMetadata(ix, iy, iz); - - if(meta < 6) - bullet.worldObj.setBlockMetadataWithNotify(ix, iy, iz, meta + 1, 3); - else - bullet.worldObj.setBlock(ix, iy, iz, ModBlocks.sand_boron); - } - - if(b.getMaterial() == Material.fire) - bullet.worldObj.playSoundEffect(bullet.posX, bullet.posY, bullet.posZ, "random.fizz", 1.0F, 1.5F + bullet.worldObj.rand.nextFloat() * 0.5F); - } - } - } - }; - - bullet.bntUpdate = new IBulletUpdateBehaviorNT() { - - @Override - public void behaveUpdate(EntityBulletBaseNT bullet) { - - if(bullet.worldObj.isRemote) { - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "vanillaExt"); - data.setString("mode", "blockdust"); - data.setInteger("block", Block.getIdFromBlock(ModBlocks.sand_boron)); - data.setDouble("posX", bullet.posX); - data.setDouble("posY", bullet.posY); - data.setDouble("posZ", bullet.posZ); - data.setDouble("mX", bullet.motionX + bullet.worldObj.rand.nextGaussian() * 0.1); - data.setDouble("mY", bullet.motionY - 0.2 + bullet.worldObj.rand.nextGaussian() * 0.1); - data.setDouble("mZ", bullet.motionZ + bullet.worldObj.rand.nextGaussian() * 0.1); - MainRegistry.proxy.effectNT(data); - } - } - }; - - return bullet; - } - public static BulletConfiguration getTurbineConfig() { BulletConfiguration bullet = new BulletConfiguration(); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index ff7ea8338..b60160874 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -6,7 +6,6 @@ import com.hbm.handler.BucketHandler; import com.hbm.handler.ability.IToolAreaAbility; import com.hbm.handler.ability.IToolHarvestAbility; import com.hbm.handler.ability.IWeaponAbility; -import com.hbm.handler.guncfg.*; import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; @@ -3790,7 +3789,6 @@ public class ModItems { gun_b92_ammo = new GunB92Cell().setUnlocalizedName("gun_b92_ammo").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92_ammo_alt"); gun_b92 = new GunB92().setUnlocalizedName("gun_b92").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92"); - gun_fireext = new ItemGunBase(GunEnergyFactory.getExtConfig()).setUnlocalizedName("gun_fireext").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_fireext"); ToolMaterial matCrucible = EnumHelper.addToolMaterial("CRUCIBLE", 10, 3, 50.0F, 100.0F, 0); crucible = new ItemCrucible(5000, 1F, matCrucible).setUnlocalizedName("crucible").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":crucible"); @@ -6374,7 +6372,6 @@ public class ModItems { //Guns GameRegistry.registerItem(gun_b92, gun_b92.getUnlocalizedName()); - GameRegistry.registerItem(gun_fireext, gun_fireext.getUnlocalizedName()); GameRegistry.registerItem(crucible, crucible.getUnlocalizedName()); GameRegistry.registerItem(gun_debug, gun_debug.getUnlocalizedName()); @@ -6439,7 +6436,8 @@ public class ModItems { GameRegistry.registerItem(gun_aberrator_eott, gun_aberrator_eott.getUnlocalizedName()); GameRegistry.registerItem(gun_double_barrel, gun_double_barrel.getUnlocalizedName()); GameRegistry.registerItem(gun_double_barrel_sacred_dragon, gun_double_barrel_sacred_dragon.getUnlocalizedName()); - + + GameRegistry.registerItem(gun_fireext, gun_fireext.getUnlocalizedName()); GameRegistry.registerItem(gun_charge_thrower, gun_charge_thrower.getUnlocalizedName()); GameRegistry.registerItem(ammo_standard, ammo_standard.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 58945b2cf..7a613fbb0 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -287,6 +287,7 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_aberrator) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_double_barrel) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_double_barrel_sacred_dragon) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_fireext) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_charge_thrower) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_light_revolver_dani) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY_MIRROR, LegoClient.HUD_COMPONENT_AMMO_MIRROR); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 8951e97d7..b8bbe7266 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -1466,6 +1466,17 @@ public class Orchestras { } }; + public static BiConsumer ORCHESTRA_FIREEXT = (stack, ctx) -> { + EntityLivingBase entity = ctx.entity; + if(entity.worldObj.isRemote) return; + AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + + if(type == AnimType.RELOAD) { + if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pressureValve", 1F, 1F); + } + }; + public static BiConsumer ORCHESTRA_CHARGE_THROWER = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java index f010af5a2..9f3179947 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java @@ -25,23 +25,165 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.impl.ItemGunChargeThrower; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; +import com.hbm.main.MainRegistry; import com.hbm.particle.helper.ExplosionCreator; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; +import com.hbm.tileentity.IRepairable; +import com.hbm.tileentity.IRepairable.EnumExtinguishType; +import com.hbm.util.CompatExternal; import com.hbm.util.Vec3NT; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; +import net.minecraftforge.common.util.ForgeDirection; public class XFactoryTool { + public static BulletConfig fext_water; + public static BulletConfig fext_foam; + public static BulletConfig fext_sand; + public static BulletConfig ct_hook; public static BulletConfig ct_mortar; public static BulletConfig ct_mortar_charge; + + public static BiConsumer LAMBDA_WATER_HIT = (bullet, mop) -> { + if(!bullet.worldObj.isRemote) { + int ix = mop.blockX; + int iy = mop.blockY; + int iz = mop.blockZ; + boolean fizz = false; + for(int i = -1; i <= 1; i++) for(int j = -1; j <= 1; j++) for(int k = -1; k <= 1; k++) { + Block block = bullet.worldObj.getBlock(ix + i, iy + j, iz + k); + if(block == Blocks.fire || block == ModBlocks.foam_layer || block == ModBlocks.block_foam) { + bullet.worldObj.setBlock(ix + i, iy + j, iz + k, Blocks.air); + fizz = true; + } + } + TileEntity core = CompatExternal.getCoreFromPos(bullet.worldObj, ix, iy, iz); + if(core instanceof IRepairable) ((IRepairable) core).tryExtinguish(bullet.worldObj, ix, iy, iz, EnumExtinguishType.WATER); + if(fizz) bullet.worldObj.playSoundEffect(bullet.posX, bullet.posY, bullet.posZ, "random.fizz", 1.0F, 1.5F + bullet.worldObj.rand.nextFloat() * 0.5F); + bullet.setDead(); + } + }; + + public static Consumer LAMBDA_WATER_UPDATE = (bullet) -> { + if(bullet.worldObj.isRemote) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "vanillaExt"); + data.setString("mode", "blockdust"); + data.setInteger("block", Block.getIdFromBlock(Blocks.water)); + data.setDouble("posX", bullet.posX); data.setDouble("posY", bullet.posY); data.setDouble("posZ", bullet.posZ); + data.setDouble("mX", bullet.motionX + bullet.worldObj.rand.nextGaussian() * 0.05); + data.setDouble("mY", bullet.motionY - 0.2 + bullet.worldObj.rand.nextGaussian() * 0.05); + data.setDouble("mZ", bullet.motionZ + bullet.worldObj.rand.nextGaussian() * 0.05); + MainRegistry.proxy.effectNT(data); + } else { + int x = (int)Math.floor(bullet.posX); + int y = (int)Math.floor(bullet.posY); + int z = (int)Math.floor(bullet.posZ); + if(bullet.worldObj.getBlock(x, y, z) == ModBlocks.volcanic_lava_block && bullet.worldObj.getBlockMetadata(x, y, z) == 0) { + bullet.worldObj.setBlock(x, y, z, Blocks.obsidian); + bullet.setDead(); + } + } + }; + + public static BiConsumer LAMBDA_FOAM_HIT = (bullet, mop) -> { + if(!bullet.worldObj.isRemote) { + int ix = mop.blockX; + int iy = mop.blockY; + int iz = mop.blockZ; + boolean fizz = false; + for(int i = -1; i <= 1; i++) for(int j = -1; j <= 1; j++) for(int k = -1; k <= 1; k++) { + Block b = bullet.worldObj.getBlock(ix + i, iy + j, iz + k); + if(b.getMaterial() == Material.fire) { + bullet.worldObj.setBlock(ix + i, iy + j, iz + k, Blocks.air); + fizz = true; + } + } + TileEntity core = CompatExternal.getCoreFromPos(bullet.worldObj, ix, iy, iz); + if(core instanceof IRepairable) { ((IRepairable) core).tryExtinguish(bullet.worldObj, ix, iy, iz, EnumExtinguishType.FOAM); return; } + if(bullet.worldObj.rand.nextBoolean()) { + ForgeDirection dir = ForgeDirection.getOrientation(mop.sideHit); + ix += dir.offsetX; iy += dir.offsetY; iz += dir.offsetZ; + } + Block b = bullet.worldObj.getBlock(ix, iy, iz); + if(b.isReplaceable(bullet.worldObj, ix, iy, iz) && ModBlocks.foam_layer.canPlaceBlockAt(bullet.worldObj, ix, iy, iz)) { + if(b != ModBlocks.foam_layer) { + bullet.worldObj.setBlock(ix, iy, iz, ModBlocks.foam_layer); + } else { + int meta = bullet.worldObj.getBlockMetadata(ix, iy, iz); + if(meta < 6) bullet.worldObj.setBlockMetadataWithNotify(ix, iy, iz, meta + 1, 3); + else bullet.worldObj.setBlock(ix, iy, iz, ModBlocks.block_foam); + } + } + if(fizz) bullet.worldObj.playSoundEffect(bullet.posX, bullet.posY, bullet.posZ, "random.fizz", 1.0F, 1.5F + bullet.worldObj.rand.nextFloat() * 0.5F); + } + }; + + public static Consumer LAMBDA_FOAM_UPDATE = (bullet) -> { + if(bullet.worldObj.isRemote) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "vanillaExt"); + data.setString("mode", "blockdust"); + data.setInteger("block", Block.getIdFromBlock(ModBlocks.block_foam)); + data.setDouble("posX", bullet.posX); data.setDouble("posY", bullet.posY); data.setDouble("posZ", bullet.posZ); + data.setDouble("mX", bullet.motionX + bullet.worldObj.rand.nextGaussian() * 0.1); + data.setDouble("mY", bullet.motionY - 0.2 + bullet.worldObj.rand.nextGaussian() * 0.1); + data.setDouble("mZ", bullet.motionZ + bullet.worldObj.rand.nextGaussian() * 0.1); + MainRegistry.proxy.effectNT(data); + } + }; + + public static BiConsumer LAMBDA_SAND_HIT = (bullet, mop) -> { + if(!bullet.worldObj.isRemote) { + int ix = mop.blockX; + int iy = mop.blockY; + int iz = mop.blockZ; + TileEntity core = CompatExternal.getCoreFromPos(bullet.worldObj, ix, iy, iz); + if(core instanceof IRepairable) { ((IRepairable) core).tryExtinguish(bullet.worldObj, ix, iy, iz, EnumExtinguishType.SAND); return; } + if(bullet.worldObj.rand.nextBoolean()) { + ForgeDirection dir = ForgeDirection.getOrientation(mop.sideHit); + ix += dir.offsetX; iy += dir.offsetY; iz += dir.offsetZ; + } + Block b = bullet.worldObj.getBlock(ix, iy, iz); + if((b.isReplaceable(bullet.worldObj, ix, iy, iz) || b == ModBlocks.sand_boron_layer) && ModBlocks.sand_boron_layer.canPlaceBlockAt(bullet.worldObj, ix, iy, iz)) { + if(b != ModBlocks.sand_boron_layer) { + bullet.worldObj.setBlock(ix, iy, iz, ModBlocks.sand_boron_layer); + } else { + int meta = bullet.worldObj.getBlockMetadata(ix, iy, iz); + if(meta < 6) bullet.worldObj.setBlockMetadataWithNotify(ix, iy, iz, meta + 1, 3); + else bullet.worldObj.setBlock(ix, iy, iz, ModBlocks.sand_boron); + } + if(b.getMaterial() == Material.fire) bullet.worldObj.playSoundEffect(bullet.posX, bullet.posY, bullet.posZ, "random.fizz", 1.0F, 1.5F + bullet.worldObj.rand.nextFloat() * 0.5F); + } + } + }; + + public static Consumer LAMBDA_SAND_UPDATE = (bullet) -> { + if(bullet.worldObj.isRemote) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "vanillaExt"); + data.setString("mode", "blockdust"); + data.setInteger("block", Block.getIdFromBlock(ModBlocks.sand_boron)); + data.setDouble("posX", bullet.posX); data.setDouble("posY", bullet.posY); data.setDouble("posZ", bullet.posZ); + data.setDouble("mX", bullet.motionX + bullet.worldObj.rand.nextGaussian() * 0.1); + data.setDouble("mY", bullet.motionY - 0.2 + bullet.worldObj.rand.nextGaussian() * 0.1); + data.setDouble("mZ", bullet.motionZ + bullet.worldObj.rand.nextGaussian() * 0.1); + MainRegistry.proxy.effectNT(data); + } + }; public static Consumer LAMBDA_SET_HOOK = (entity) -> { EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity; @@ -88,6 +230,19 @@ public class XFactoryTool { public static void init() { + fext_water = new BulletConfig().setItem(new ItemStack(ModItems.ammo_fireext, 1, 0)).setReloadCount(300).setLife(100).setVel(0.75F).setGrav(0.04D).setSpread(0.025F) + .setOnUpdate(LAMBDA_WATER_UPDATE) + .setOnEntityHit((bulletEntity, target) -> { if(target.entityHit != null) target.entityHit.extinguish(); }) + .setOnRicochet(LAMBDA_WATER_HIT); + fext_foam = new BulletConfig().setItem(new ItemStack(ModItems.ammo_fireext, 1, 1)).setReloadCount(300).setLife(100).setVel(0.75F).setGrav(0.04D).setSpread(0.05F) + .setOnUpdate(LAMBDA_FOAM_UPDATE) + .setOnEntityHit((bulletEntity, target) -> { if(target.entityHit != null) target.entityHit.extinguish(); }) + .setOnRicochet(LAMBDA_FOAM_HIT); + fext_sand = new BulletConfig().setItem(new ItemStack(ModItems.ammo_fireext, 1, 1)).setReloadCount(300).setLife(100).setVel(0.75F).setGrav(0.04D).setSpread(0.05F) + .setOnUpdate(LAMBDA_SAND_UPDATE) + .setOnEntityHit((bulletEntity, target) -> { if(target.entityHit != null) target.entityHit.extinguish(); }) + .setOnRicochet(LAMBDA_SAND_HIT); + ct_hook = new BulletConfig().setItem(EnumAmmo.CT_HOOK).setRenderRotations(false).setLife(6_000).setVel(3F).setGrav(0.035D).setDoesPenetrate(true).setDamageFalloffByPen(false) .setOnUpdate(LAMBDA_SET_HOOK).setOnImpact(LAMBDA_HOOK); ct_mortar = new BulletConfig().setItem(EnumAmmo.CT_MORTAR).setDamage(2.5F).setLife(200).setVel(3F).setGrav(0.035D) @@ -95,6 +250,17 @@ public class XFactoryTool { ct_mortar_charge = new BulletConfig().setItem(EnumAmmo.CT_MORTAR_CHARGE).setDamage(5F).setLife(200).setVel(3F).setGrav(0.035D) .setOnImpact(LAMBDA_MORTAR_CHARGE); + ModItems.gun_fireext = new ItemGunBaseNT(WeaponQuality.UTILITY, new GunConfig() + .dura(5_000).draw(10).inspect(55).reloadChangeType(true).hideCrosshair(false).crosshair(Crosshair.L_CIRCLE) + .rec(new Receiver(0) + .dmg(0F).delay(1).dry(0).auto(true).spread(0F).spreadHipfire(0F).reload(20).jam(0).sound("hbm:weapon.extinguisher", 1.0F, 1.0F) + .mag(new MagazineFullReload(0, 300).addConfigs(fext_water, fext_foam, fext_sand)) + .offset(1, -0.0625 * 2.5, -0.25D) + .setupStandardFire()) + .setupStandardConfiguration() + .orchestra(Orchestras.ORCHESTRA_FIREEXT) + ).setUnlocalizedName("gun_fireext"); + ModItems.gun_charge_thrower = new ItemGunChargeThrower(WeaponQuality.UTILITY, new GunConfig() .dura(3_000).draw(10).inspect(55).reloadChangeType(true).hideCrosshair(false).crosshair(Crosshair.L_CIRCUMFLEX) .rec(new Receiver(0) diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 4af2dd3c3..d01ac85f5 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -491,27 +491,6 @@ public class ModEventHandlerClient { EntityPlayer player = Minecraft.getMinecraft().thePlayer; ItemStack held = player.getHeldItem(); - if(held == null) return; - if(!(held.getItem() instanceof ItemGunBase)) return; - - GunConfiguration config = ((ItemGunBase) held.getItem()).mainConfig; - - if(config == null) return; - if(config.zoomFOV == 0F || !player.isSneaking()) return; - - if(config.absoluteFOV) { - event.newfov = config.zoomFOV; - } else { - event.newfov += config.zoomFOV; - } - } - - @SubscribeEvent - public void setupNewFOV(FOVUpdateEvent event) { - - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - ItemStack held = player.getHeldItem(); - if(held == null) return; IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(held, IItemRenderer.ItemRenderType.EQUIPPED); diff --git a/src/main/java/com/hbm/render/item/weapon/ItemRenderFireExt.java b/src/main/java/com/hbm/render/item/weapon/ItemRenderFireExt.java index 012294910..62997552c 100644 --- a/src/main/java/com/hbm/render/item/weapon/ItemRenderFireExt.java +++ b/src/main/java/com/hbm/render/item/weapon/ItemRenderFireExt.java @@ -2,9 +2,9 @@ package com.hbm.render.item.weapon; import org.lwjgl.opengl.GL11; -import com.hbm.handler.BulletConfigSyncingUtil; -import com.hbm.items.ModItems; -import com.hbm.items.weapon.ItemGunBase; +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.items.weapon.sedna.factory.XFactoryTool; +import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.main.ResourceManager; import net.minecraft.client.Minecraft; @@ -41,15 +41,11 @@ public class ItemRenderFireExt implements IItemRenderer { GL11.glEnable(GL11.GL_CULL_FACE); - int magType = ItemGunBase.getMagType(item); - int config = ((ItemGunBase)ModItems.gun_fireext).mainConfig.config.get(magType); - int ammo = BulletConfigSyncingUtil.pullConfig(config).ammo.meta; - ResourceLocation tex; - switch (ammo) { - case 0: tex = ResourceManager.fireext_foam_tex; break; - case 1: tex = ResourceManager.fireext_sand_tex; break; - default: tex = ResourceManager.fireext_tex; break; - } + ItemGunBaseNT gun = (ItemGunBaseNT) item.getItem(); + IMagazine mag = gun.getConfig(item, 0).getReceivers(item)[0].getMagazine(item); + ResourceLocation tex = ResourceManager.fireext_tex; + if(mag.getType(item, null) == XFactoryTool.fext_foam) tex = ResourceManager.fireext_foam_tex; + if(mag.getType(item, null) == XFactoryTool.fext_sand) tex = ResourceManager.fireext_sand_tex; Minecraft.getMinecraft().renderEngine.bindTexture(tex); switch(type) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java index aa9f9736f..9db6921c8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java @@ -99,7 +99,7 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements this.processTime = recipe.duration - (recipe.duration * redLevel / 6) + (recipe.duration * blueLevel / 3); this.consumption = recipe.consumption + (recipe.consumption * redLevel) - (recipe.consumption * blueLevel / 6); this.consumption *= Math.pow(2, blackLevel); - intendedMaxPower = recipe.consumption * 20; + intendedMaxPower = consumption * 20; if(canProcess(recipe)) { this.progress += (1 + blackLevel); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index 5515a816d..b8cfe0333 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -105,7 +105,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp this.processTime = recipe.duration - (recipe.duration * redLevel / 6) + (recipe.duration * blueLevel / 3); this.consumption = recipe.consumption + (recipe.consumption * redLevel) - (recipe.consumption * blueLevel / 6); this.consumption *= Math.pow(2, blackLevel); - intendedMaxPower = recipe.consumption * 20; + intendedMaxPower = consumption * 20; if(canProcess(recipe)) { this.progress += (1 + blackLevel); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index 84c56ab7c..9ca467285 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -11,7 +11,6 @@ import com.hbm.inventory.material.Mats; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMold; import com.hbm.items.machine.ItemScraps; -import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; From 9d3860df64f779af50d95455a4ea840b395c7a4a Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Fri, 23 May 2025 21:47:03 +0800 Subject: [PATCH 086/491] Fix: Make generateSphereRays run asynchronously --- .../com/hbm/explosion/ExplosionNukeRayParallelized.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index 81e28cb63..ab0527d25 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -28,7 +28,8 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private final int strength; private final int radius; - private final List directions; + private volatile List directions; + private final CompletableFuture> directionsFuture; private final ConcurrentMap destructionMap; private final ConcurrentMap snapshots; @@ -67,7 +68,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { int workers = Math.max(1, Runtime.getRuntime().availableProcessors() - 1); this.pool = Executors.newWorkStealingPool(workers); - this.directions = generateSphereRays(rayCount); + this.directionsFuture = CompletableFuture.supplyAsync(() -> generateSphereRays(rayCount)); for (int i = 0; i < rayCount; i++) rayQueue.add(new RayTask(i)); for (int i = 0; i < workers; i++) pool.submit(new Worker()); @@ -406,6 +407,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } void init() { + if (directions == null) directions = directionsFuture.join(); Vec3 dir = directions.get(this.dirIndex); this.px = explosionX; this.py = explosionY; @@ -413,7 +415,8 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { this.x = originX; this.y = originY; this.z = originZ; - // This scales the crate. higher = bigger crate. Adjust if the radius of the crate deviates from expected. + // This scales the crater. higher = bigger. + // Currently the crater is a little bit bigger than the original implementation this.energy = strength * 0.3F; this.currentRayPosition = 0.0; From 1a5fda1847138e137ebf74a95abb0dda3ebdca21 Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Sat, 24 May 2025 09:00:15 +0800 Subject: [PATCH 087/491] Feat: accumulatedDestruction --- src/main/java/com/hbm/config/BombConfig.java | 2 + .../ExplosionNukeRayParallelized.java | 152 ++++++++++++++++-- 2 files changed, 140 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/config/BombConfig.java b/src/main/java/com/hbm/config/BombConfig.java index 927ebd3ba..64ee42417 100644 --- a/src/main/java/com/hbm/config/BombConfig.java +++ b/src/main/java/com/hbm/config/BombConfig.java @@ -27,6 +27,7 @@ public class BombConfig { public static int limitExplosionLifespan = 0; public static boolean chunkloading = true; public static boolean parallelization = true; + public static boolean accumulatedDestruction = true; public static void loadFromConfig(Configuration config) { @@ -96,5 +97,6 @@ public class BombConfig { chunkloading = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.XX_enableChunkLoading", "Allows all types of procedural explosions to keep the central chunk loaded.", true); parallelization = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.XX_enableParallelization", "Allows explosions to use multiple threads.", true); + accumulatedDestruction = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.XX_enableAccumulatedDestruction", "Enables the accumulated destruction model for explosions. Blocks accumulate damage and are only destroyed once their resistance is exceeded.\nMore physically accurate, slightly slower. Requires enableParallelization = true.", true); } } diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index ab0527d25..6cab5a01c 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -1,5 +1,6 @@ package com.hbm.explosion; +import com.hbm.config.BombConfig; import com.hbm.interfaces.IExplosionRay; import com.hbm.main.MainRegistry; import net.minecraft.block.Block; @@ -15,6 +16,7 @@ import org.apache.logging.log4j.Level; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicLongArray; +import java.util.concurrent.atomic.DoubleAdder; public class ExplosionNukeRayParallelized implements IExplosionRay { @@ -31,6 +33,8 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private volatile List directions; private final CompletableFuture> directionsFuture; private final ConcurrentMap destructionMap; + private final ConcurrentMap accumulatedDamageMap; + private final ConcurrentMap snapshots; private final BlockingQueue rayQueue; @@ -40,9 +44,9 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { private final Thread latchWatcherThread; private final List orderedChunks; private volatile boolean collectFinished = false; + private volatile boolean consolidationFinished = false; private volatile boolean destroyFinished = false; - public ExplosionNukeRayParallelized(World world, double x, double y, double z, int strength, int speed, int radius) { this.world = world; this.explosionX = x; @@ -60,6 +64,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { this.latch = new CountDownLatch(rayCount); this.destructionMap = new ConcurrentHashMap<>(); + this.accumulatedDamageMap = new ConcurrentHashMap<>(); this.snapshots = new ConcurrentHashMap<>(); this.orderedChunks = new ArrayList<>(); @@ -80,6 +85,11 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { Thread.currentThread().interrupt(); } finally { collectFinished = true; + if (BombConfig.accumulatedDestruction) { + pool.submit(this::runConsolidation); + } else { + consolidationFinished = true; + } } }, "ExplosionNuke-LatchWatcher-" + System.nanoTime()); this.latchWatcherThread.setDaemon(true); @@ -110,7 +120,8 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { @Override public void destructionTick(int timeBudgetMs) { - if (!collectFinished || destroyFinished) return; + if (!collectFinished || !consolidationFinished || destroyFinished) return; // Added consolidationFinished check + final long deadline = System.nanoTime() + timeBudgetMs * 1_000_000L; if (orderedChunks.isEmpty() && !destructionMap.isEmpty()) { @@ -193,12 +204,13 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { @Override public boolean isComplete() { - return collectFinished && destroyFinished; + return collectFinished && consolidationFinished && destroyFinished; } @Override public void cancel() { this.collectFinished = true; + this.consolidationFinished = true; this.destroyFinished = true; if (this.rayQueue != null) this.rayQueue.clear(); @@ -227,6 +239,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } } if (this.destructionMap != null) this.destructionMap.clear(); + if (this.accumulatedDamageMap != null) this.accumulatedDamageMap.clear(); if (this.snapshots != null) this.snapshots.clear(); if (this.orderedChunks != null) this.orderedChunks.clear(); } @@ -291,6 +304,72 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { return list; } + private void runConsolidation() { + Iterator> chunkEntryIterator = accumulatedDamageMap.entrySet().iterator(); + while (chunkEntryIterator.hasNext()) { + Map.Entry entry = chunkEntryIterator.next(); + ChunkCoordIntPair cp = entry.getKey(); + ChunkDamageAccumulator accumulator = entry.getValue(); + + if (accumulator.isEmpty()) { + chunkEntryIterator.remove(); + continue; + } + + ConcurrentBitSet chunkDestructionBitSet = destructionMap.computeIfAbsent(cp, k -> new ConcurrentBitSet()); + + Iterator> damageEntryIterator = accumulator.entrySet().iterator(); + while (damageEntryIterator.hasNext()) { + Map.Entry damageEntry = damageEntryIterator.next(); + int bitIndex = damageEntry.getKey(); + + float accumulatedDamage = (float) damageEntry.getValue().sum(); + + if (accumulatedDamage <= 0.0f) { + damageEntryIterator.remove(); + continue; + } + + int yGlobal = 255 - (bitIndex >>> 8); + int subY = yGlobal >> 4; + + if (subY < 0) { + damageEntryIterator.remove(); + continue; + } + + ChunkKey snapshotKey = new ChunkKey(cp.chunkXPos, cp.chunkZPos, subY); + SubChunkSnapshot snap = snapshots.get(snapshotKey); + Block originalBlock; + + if (snap == null || snap == SubChunkSnapshot.EMPTY) { + damageEntryIterator.remove(); + continue; + } else { + int xLocal = (bitIndex >>> 4) & 0xF; + int zLocal = bitIndex & 0xF; + originalBlock = snap.getBlock(xLocal, yGlobal & 0xF, zLocal); + if (originalBlock == Blocks.air) { + damageEntryIterator.remove(); + continue; + } + } + + float resistance = getNukeResistance(originalBlock); + if (accumulatedDamage >= resistance) { + chunkDestructionBitSet.set(bitIndex); + damageEntryIterator.remove(); + } + } + + if (accumulator.isEmpty()) { + chunkEntryIterator.remove(); + } + } + accumulatedDamageMap.clear(); + consolidationFinished = true; + } + private static class ChunkKey { final ChunkCoordIntPair pos; final int subY; @@ -349,7 +428,13 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { if (bit < 0 || bit >= BITSET_SIZE) return; int wd = bit >>> 6; long m = ~(1L << (bit & 63)); - words.set(wd, words.get(wd) & m); + while (true) { + long oldWord = words.get(wd); + long newWord = oldWord & m; + if (oldWord == newWord || words.compareAndSet(wd, oldWord, newWord)) { + return; + } + } } int nextSetBit(int from) { @@ -370,6 +455,35 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { } } + private static class ChunkDamageAccumulator { + // key = bitIndex, value = total accumulated damage + private final ConcurrentHashMap damageMap = new ConcurrentHashMap<>(); + + public void addDamage(int bitIndex, float damageAmount) { + if (damageAmount <= 0) return; + DoubleAdder adder = damageMap.computeIfAbsent(bitIndex, k -> new DoubleAdder()); + adder.add(damageAmount); + } + + public float getDamage(int bitIndex) { + DoubleAdder adder = damageMap.get(bitIndex); + return adder == null ? 0f : (float) adder.sum(); + } + + public void clearDamage(int bitIndex) { + damageMap.remove(bitIndex); + } + + public Set> entrySet() { + return damageMap.entrySet(); + } + + + public boolean isEmpty() { + return damageMap.isEmpty(); + } + } + private class Worker implements Runnable { @Override public void run() { @@ -409,15 +523,15 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { void init() { if (directions == null) directions = directionsFuture.join(); Vec3 dir = directions.get(this.dirIndex); + // This scales the crater. Higher = bigger. + // Currently the crater is a little bit bigger than the original implementation + this.energy = strength * 0.3F; this.px = explosionX; this.py = explosionY; this.pz = explosionZ; this.x = originX; this.y = originY; this.z = originZ; - // This scales the crater. higher = bigger. - // Currently the crater is a little bit bigger than the original implementation - this.energy = strength * 0.3F; this.currentRayPosition = 0.0; double dirX = dir.xCoord; @@ -484,14 +598,24 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { energy = 0; } else { double energyLossFactor = getEnergyLossFactor(resistance); - energy -= (float) (energyLossFactor * segmentLenForProcessing); - if (energy > 0) { - ConcurrentBitSet bs = destructionMap.computeIfAbsent( - ck.pos, - posKey -> new ConcurrentBitSet() - ); + float damageDealt = (float) (energyLossFactor * segmentLenForProcessing); + energy -= damageDealt; + if (damageDealt > 0) { int bitIndex = ((WORLD_HEIGHT - 1 - y) << 8) | ((x & 0xF) << 4) | (z & 0xF); - bs.set(bitIndex); + if (BombConfig.accumulatedDestruction) { + ChunkCoordIntPair chunkPos = ck.pos; + ChunkDamageAccumulator chunkAccumulator = + accumulatedDamageMap.computeIfAbsent(chunkPos, k -> new ChunkDamageAccumulator()); + chunkAccumulator.addDamage(bitIndex, damageDealt); + } else { + if (energy > 0) { + ConcurrentBitSet bs = destructionMap.computeIfAbsent( + ck.pos, + posKey -> new ConcurrentBitSet() + ); + bs.set(bitIndex); + } + } } } } From ce99e65b0ba4a0b15090ab96c3e2db43640e9b3b Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 25 May 2025 22:12:33 +0200 Subject: [PATCH 088/491] the spoingus --- changelog | 11 +- gradle.properties | 16 +- .../inventory/recipes/AssemblerRecipes.java | 14 + .../items/machine/ItemAssemblyTemplate.java | 4 +- .../weapon/sedna/factory/XFactory50.java | 2 +- .../assets/hbm/models/machines/chemplant.obj | 5098 +++++++++++++++++ .../textures/models/machines/chemplant.png | Bin 0 -> 2343 bytes .../models/machines/chemplant_fluid.png | Bin 0 -> 148 bytes 8 files changed, 5136 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/assets/hbm/models/machines/chemplant.obj create mode 100644 src/main/resources/assets/hbm/textures/models/machines/chemplant.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/chemplant_fluid.png diff --git a/changelog b/changelog index b730d65b1..0460a9789 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,11 @@ +## Added +* Two new anti-material rifle variants + * .50 BMG demolisher rounds are finally usable + * Added a special ammo type exclusive to one of the variants +* Starmetal .50 BMG now returns + * Overall better armor piercing stats than DU + * Not compatible with the M2, only usable in amat rifles + ## Changed * The RBMK console's grid can now be rotated using a screwdriver * Tool abilities have changed @@ -12,4 +20,5 @@ ## Fixed * Conveyor ejectors should now correctly place items onto the back of splitters instead of on the output belts * Fixed strand caster fluid gauges going out of bounds -* Fixed arc welder and soldering station not changing buffer size based on upgrade, preventing use of higher overdrive tiers \ No newline at end of file +* Fixed arc welder and soldering station not changing buffer size based on upgrade, preventing use of higher overdrive tiers +* Fixed non-standard template folder recipes not using the correct icon \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ad311add0..d13d533f6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,18 +9,19 @@ credits=HbMinecraft,\ \ Drillgon200 (effects, models, porting),\ \ MartinTheDragon (calculator, chunk-based fallout, bendable cranes, pipe improvements, PWR sounds),\ \ Alcater (GUI textures, porting),\ - \ MellowArpeggiation (new animation system, turbine sounds, sound fixes, industrial lights, better particle diodes),\ + \ MellowArpeggiation (new animation system, turbine sounds, sound fixes, industrial lights, conveyor wand, NBT structures),\ \ Pheo (textures, various machines, models, weapons),\ - \ Vær (gas centrifuges, better worldgen, ZIRNOX, CP-1 parts, starter guide, new cyclotron, weapon animations),\ + \ Vr (gas centrifuges, better worldgen, ZIRNOX, CP-1 parts, starter guide, new cyclotron, weapon animations),\ \ UFFR (RTG pellets, guns, casings, euphemium capacitor, nucleartech.wiki),\ \ LePeep (coilgun model, BDCL QC),\ \ Adam29 (liquid petroleum, ethanol, electric furnace),\ \ Pvndols (thorium fuel recipe, gas turbine),\ \ JamesH2 (blood mechanics, nitric acid, particle emitter),\ - \ Lazzzycat (structures),\ + \ Lazzzycat (structures, mob gear),\ \ PastaBaguette (coal horse decal),\ \ Doctor17 (russian localization)),\ \ Pashtet (russian localization),\ + \ 7H40 (russian localization),\ \ Bismarck (chinese localization),\ \ Creeper-banner (chinese localization),\ \ 5467864 (chinese localization),\ @@ -32,6 +33,7 @@ credits=HbMinecraft,\ \ UnnameTokiko (chinese localization),\ \ Herobrine 457985 (chinese localization),\ \ xxwinhere (chinese localization),\ + \ Nycticoraxnightheron (chinese localization),\ \ Maksymisio (polish localization)\ \ el3ctro4ndre (italian localization),\ \ Pu-238 (Tom impact effects),\ @@ -40,9 +42,11 @@ credits=HbMinecraft,\ \ Nos (models),\ \ WushiThe (models),\ \ Minecreep (models),\ + \ ackbarcrowbars (models),\ + \ haru315 (spiral point algorithm),\ + \ mlbv (threaded MK5),\ \ 70k (textures, glyphid AI, strand caster, electrolyzer changes, cryolite),\ \ instantnootles (concept artist),\ - \ haru315 (spiral point algorithm),\ \ Sten89 (models),\ \ Pixelguru26 (textures),\ \ TheBlueHat (textures),\ @@ -60,7 +64,9 @@ credits=HbMinecraft,\ \ KoblizekXD (doors),\ \ FOlkvangrField (custom machine parts),\ \ RosaTryp (centrifuge config),\ - \ Toshayo (satellite loot system, project settings, gradle curse task),\ + \ Toshayo (satellite loot system, project settings, gradle curse task, OpenComputers integration),\ + \ Dash (PA particle serialization fix),\ + \ archiecarrot123 (armor rendering compatibility fix),\ \ icomet (refactoring),\ \ martemen (project settings),\ \ OvermindDL1 (project settings),\ diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index b416a49a9..82fc9d8f4 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -28,6 +28,7 @@ import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; +import com.hbm.items.ItemEnums.EnumCasingType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; @@ -36,6 +37,7 @@ import com.hbm.items.machine.ItemPACoil.EnumCoilType; import com.hbm.items.machine.ItemPistons.EnumPistonType; import com.hbm.items.weapon.ItemAmmoHIMARS; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.main.MainRegistry; import cpw.mods.fml.common.Loader; @@ -793,6 +795,18 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), }, 100); + makeRecipe(new ComparableStack(ModItems.ammo_standard, 6, EnumAmmo.BMG50_SM), new AStack[] { + new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE_STEEL), + new OreDictStack(ANY_SMOKELESS.dust(), 6), + new OreDictStack(STAR.ingot(), 3), + }, 100, ModItems.journal_silver); + makeRecipe(new ComparableStack(ModItems.ammo_secret, 12, EnumAmmoSecret.BMG50_BLACK), new AStack[] { + new ComparableStack(ModItems.casing, 2, EnumCasingType.LARGE_STEEL), + new OreDictStack(ANY_SMOKELESS.dust(), 24), + new OreDictStack(WEAPONSTEEL.ingot(), 8), + new ComparableStack(ModItems.black_diamond), + }, 1200, ModItems.journal_silver); + makeRecipe(new ComparableStack(ModBlocks.machine_silex, 1), new AStack[] { new ComparableStack(ModBlocks.glass_quartz, 16), !exp ? new OreDictStack(STEEL.plateCast(), 8) : new OreDictStack(STEEL.heavyComp(), 1), diff --git a/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java b/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java index f7bad43dd..3c4c8f51a 100644 --- a/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java @@ -54,8 +54,8 @@ public class ItemAssemblyTemplate extends Item { //LEGACY if(out == null) out = AssemblerRecipes.recipeList.get(stack.getItemDamage()); - AssemblerRecipe recipe = AssemblerRecipes.recipes.get(stack); - + AssemblerRecipe recipe = AssemblerRecipes.recipes.get(out); + if(recipe != null && !recipe.folders.contains(ModItems.template_folder)) return this.hiddenIcon; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java index b969bdfa8..a73db227c 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java @@ -68,7 +68,7 @@ public class XFactory50 { .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50du")); bmg50_he = new BulletConfig().setItem(EnumAmmo.BMG50_HE).setCasing(EnumCasingType.LARGE_STEEL, 12).setWear(3F).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.75F).setOnImpact(LAMBDA_STANDARD_EXPLODE) .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50he")); - bmg50_sm = new BulletConfig().setItem(EnumAmmo.BMG50_SM).setCasing(EnumCasingType.LARGE_STEEL, 12).setWear(10F).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(2.5F).setThresholdNegation(30F).setArmorPiercing(0.35F) + bmg50_sm = new BulletConfig().setItem(EnumAmmo.BMG50_SM).setCasing(EnumCasingType.LARGE_STEEL, 6).setWear(10F).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(2.5F).setThresholdNegation(30F).setArmorPiercing(0.35F) .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50sm")); bmg50_black = new BulletConfig().setItem(EnumAmmoSecret.BMG50_BLACK).setWear(5F).setDoesPenetrate(true).setDamageFalloffByPen(false).setSpectral(true).setDamage(1.5F).setHeadshot(3F).setThresholdNegation(30F).setArmorPiercing(0.35F) .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_EQUESTRIAN).register("bmg50black")); diff --git a/src/main/resources/assets/hbm/models/machines/chemplant.obj b/src/main/resources/assets/hbm/models/machines/chemplant.obj new file mode 100644 index 000000000..7fa2d561f --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/chemplant.obj @@ -0,0 +1,5098 @@ +# Blender v2.79 (sub 0) OBJ File: 'chemplant2.blend' +# www.blender.org +o Fluid +v 0.500000 1.375000 -0.375000 +v 0.165152 1.375000 -0.308394 +v -0.118718 1.375000 -0.118718 +v -0.308394 1.375000 0.165152 +v -0.375000 1.375000 0.500000 +v -0.308394 1.375000 0.834848 +v -0.118718 1.375000 1.118718 +v 0.165152 1.375000 1.308394 +v 0.500000 1.375000 1.375000 +v 0.834848 1.375000 1.308394 +v 1.118718 1.375000 1.118719 +v 1.308394 1.375000 0.834848 +v 1.375000 1.375000 0.500000 +v 1.308394 1.375000 0.165152 +v 1.118718 1.375000 -0.118719 +v 0.834847 1.375000 -0.308395 +v -0.118718 1.000000 1.118718 +v 0.165152 1.000000 1.308394 +v 0.500000 1.000000 1.375000 +v 0.834848 1.000000 1.308394 +v 1.118718 1.000000 1.118719 +v 1.308394 1.000000 0.834848 +v 1.375000 1.000000 0.500000 +v 1.308394 1.000000 0.165152 +v 1.118718 1.000000 -0.118719 +v 0.500000 1.375000 0.500000 +vt 0.687500 -0.000000 +vt 0.750000 -0.000000 +vt 0.718750 1.000000 +vt 0.812500 -0.000000 +vt 0.781250 1.000000 +vt 0.875000 0.000000 +vt 0.843750 1.000000 +vt 0.937500 -0.000000 +vt 0.906250 1.000000 +vt 1.000000 -0.000000 +vt 0.968750 1.000000 +vt -0.000000 -0.000000 +vt 0.062500 0.000000 +vt 0.031250 1.000000 +vt 0.125000 -0.000000 +vt 0.093750 1.000000 +vt 0.187500 -0.000000 +vt 0.156250 1.000000 +vt 0.250000 0.000000 +vt 0.218750 1.000000 +vt 0.312500 0.000000 +vt 0.281250 1.000000 +vt 0.375000 0.000000 +vt 0.343750 1.000000 +vt 0.437500 0.000000 +vt 0.406250 1.000000 +vt 0.500000 -0.000000 +vt 0.468750 1.000000 +vt 0.562500 -0.000000 +vt 0.531250 1.000000 +vt 0.625000 -0.000000 +vt 0.593750 1.000000 +vt 0.656250 1.000000 +vt -0.000000 -0.000000 +vt 0.062500 0.428571 +vt -0.000000 0.428571 +vt 0.062500 -0.000000 +vt 0.125000 0.428571 +vt 0.125000 -0.000000 +vt 0.187500 0.428571 +vt 0.187500 -0.000000 +vt 0.250000 0.428571 +vt 0.250000 0.000000 +vt 0.312500 0.428571 +vt 0.312500 0.000000 +vt 0.375000 0.428571 +vt 0.375000 0.000000 +vt 0.437500 0.428571 +vt 0.500000 -0.000000 +vt 0.437500 -0.000000 +vt 0.500000 0.428571 +vn 0.0000 1.0000 0.0000 +vn -0.5556 0.0000 0.8315 +vn -0.3827 0.0000 0.9239 +vn 0.0000 0.0000 1.0000 +vn 0.3827 0.0000 0.9239 +vn 0.7071 0.0000 0.7071 +vn 0.9239 0.0000 0.3827 +vn 1.0000 0.0000 -0.0000 +vn 0.9239 0.0000 -0.3827 +vn 0.8315 0.0000 -0.5556 +s off +f 2/1/1 3/2/1 26/3/1 +f 3/2/1 4/4/1 26/5/1 +f 4/4/1 5/6/1 26/7/1 +f 5/6/1 6/8/1 26/9/1 +f 6/8/1 7/10/1 26/11/1 +f 7/12/1 8/13/1 26/14/1 +f 8/13/1 9/15/1 26/16/1 +f 9/15/1 10/17/1 26/18/1 +f 10/17/1 11/19/1 26/20/1 +f 11/19/1 12/21/1 26/22/1 +f 12/21/1 13/23/1 26/24/1 +f 13/23/1 14/25/1 26/26/1 +f 14/25/1 15/27/1 26/28/1 +f 15/27/1 16/29/1 26/30/1 +f 16/29/1 1/31/1 26/32/1 +f 1/31/1 2/1/1 26/33/1 +s 1 +f 17/34/2 8/35/3 7/36/2 +f 18/37/3 9/38/4 8/35/3 +f 19/39/4 10/40/5 9/38/4 +f 20/41/5 11/42/6 10/40/5 +f 21/43/6 12/44/7 11/42/6 +f 22/45/7 13/46/8 12/44/7 +f 23/47/8 14/48/9 13/46/8 +f 25/49/10 14/48/9 24/50/9 +f 17/34/2 18/37/3 8/35/3 +f 18/37/3 19/39/4 9/38/4 +f 19/39/4 20/41/5 10/40/5 +f 20/41/5 21/43/6 11/42/6 +f 21/43/6 22/45/7 12/44/7 +f 22/45/7 23/47/8 13/46/8 +f 23/47/8 24/50/9 14/48/9 +f 25/49/10 15/51/10 14/48/9 +o Spinner +v 0.500000 0.875000 0.250000 +v 0.323223 0.875000 0.323223 +v 0.250000 0.875000 0.500000 +v 0.323223 0.875000 0.676777 +v 0.500000 0.875000 0.750000 +v 0.676777 0.875000 0.676777 +v 0.750000 0.875000 0.500000 +v 0.676777 0.875000 0.323223 +v 0.500000 1.625000 0.250000 +v 0.323223 1.625000 0.323223 +v 0.250000 1.625000 0.500000 +v 0.323223 1.625000 0.676777 +v 0.500000 1.625000 0.750000 +v 0.676777 1.625000 0.676777 +v 0.750000 1.625000 0.500000 +v 0.676777 1.625000 0.323223 +v 0.625000 0.875000 0.562500 +v 1.250000 0.875000 0.562500 +v 0.625000 0.875000 0.437500 +v 1.250000 0.875000 0.437500 +v -0.250000 0.875000 0.562500 +v 0.375000 0.875000 0.562500 +v 1.250000 1.125000 0.562500 +v 1.250000 1.125000 0.437500 +v -0.250000 0.875000 0.437500 +v 1.250000 1.250000 0.562500 +v 0.375000 0.875000 0.437500 +v 1.250000 1.250000 0.437500 +v 0.625000 1.625000 0.437500 +v 0.625000 1.625000 0.562500 +v 1.250000 1.625000 0.562500 +v 1.250000 1.625000 0.437500 +v 0.875000 1.125000 0.562500 +v 0.875000 1.125000 0.437500 +v 0.875000 1.250000 0.562500 +v 0.875000 1.250000 0.437500 +v -0.250000 1.125000 0.437500 +v -0.250000 1.125000 0.562500 +v -0.250000 1.250000 0.437500 +v -0.250000 1.250000 0.562500 +v 0.375000 1.625000 0.562500 +v 0.375000 1.625000 0.437500 +v -0.250000 1.625000 0.437500 +v -0.250000 1.625000 0.562500 +v 0.125000 1.125000 0.437500 +v 0.125000 1.125000 0.562500 +v 0.125000 1.250000 0.437500 +v 0.125000 1.250000 0.562500 +v 0.562500 0.875000 0.375000 +v 0.562500 0.875000 -0.250000 +v 0.437500 0.875000 0.375000 +v 0.437500 0.875000 -0.250000 +v 0.562500 0.875000 1.250000 +v 0.562500 0.875000 0.625000 +v 0.562500 1.125000 -0.250000 +v 0.437500 1.125000 -0.250000 +v 0.437500 0.875000 1.250000 +v 0.562500 1.250000 -0.250000 +v 0.437500 0.875000 0.625000 +v 0.437500 1.250000 -0.250000 +v 0.437500 1.625000 0.375000 +v 0.562500 1.625000 0.375000 +v 0.562500 1.625000 -0.250000 +v 0.437500 1.625000 -0.250000 +v 0.562500 1.125000 0.125000 +v 0.437500 1.125000 0.125000 +v 0.562500 1.250000 0.125000 +v 0.437500 1.250000 0.125000 +v 0.437500 1.125000 1.250000 +v 0.562500 1.125000 1.250000 +v 0.437500 1.250000 1.250000 +v 0.562500 1.250000 1.250000 +v 0.562500 1.625000 0.625000 +v 0.437500 1.625000 0.625000 +v 0.437500 1.625000 1.250000 +v 0.562500 1.625000 1.250000 +v 0.437500 1.125000 0.875000 +v 0.562500 1.125000 0.875000 +v 0.437500 1.250000 0.875000 +v 0.562500 1.250000 0.875000 +v 0.632582 0.875000 0.455806 +v 1.074524 0.875000 0.013864 +v 0.544194 0.875000 0.367417 +v 0.986136 0.875000 -0.074524 +v 0.013864 0.875000 1.074524 +v 0.455806 0.875000 0.632583 +v 1.074524 1.125000 0.013864 +v 0.986136 1.125000 -0.074524 +v -0.074524 0.875000 0.986136 +v 1.074524 1.250000 0.013864 +v 0.367417 0.875000 0.544194 +v 0.986136 1.250000 -0.074524 +v 0.544194 1.625000 0.367417 +v 0.632582 1.625000 0.455806 +v 1.074524 1.625000 0.013864 +v 0.986136 1.625000 -0.074524 +v 0.809359 1.125000 0.279029 +v 0.720971 1.125000 0.190640 +v 0.809359 1.250000 0.279029 +v 0.720971 1.250000 0.190640 +v -0.074524 1.125000 0.986136 +v 0.013864 1.125000 1.074524 +v -0.074524 1.250000 0.986136 +v 0.013864 1.250000 1.074524 +v 0.455806 1.625000 0.632583 +v 0.367417 1.625000 0.544194 +v -0.074524 1.625000 0.986136 +v 0.013864 1.625000 1.074524 +v 0.190641 1.125000 0.720971 +v 0.279029 1.125000 0.809359 +v 0.190641 1.250000 0.720971 +v 0.279029 1.250000 0.809359 +v 0.455806 0.875000 0.367417 +v 0.013864 0.875000 -0.074524 +v 0.367417 0.875000 0.455806 +v -0.074524 0.875000 0.013864 +v 1.074524 0.875000 0.986135 +v 0.632582 0.875000 0.544194 +v 0.013864 1.125000 -0.074524 +v -0.074524 1.125000 0.013864 +v 0.986136 0.875000 1.074524 +v 0.013864 1.250000 -0.074524 +v 0.544194 0.875000 0.632583 +v -0.074524 1.250000 0.013864 +v 0.367417 1.625000 0.455806 +v 0.455806 1.625000 0.367417 +v 0.013864 1.625000 -0.074524 +v -0.074524 1.625000 0.013864 +v 0.279029 1.125000 0.190641 +v 0.190641 1.125000 0.279029 +v 0.279029 1.250000 0.190641 +v 0.190641 1.250000 0.279029 +v 0.986136 1.125000 1.074524 +v 1.074524 1.125000 0.986135 +v 0.986136 1.250000 1.074524 +v 1.074524 1.250000 0.986135 +v 0.632582 1.625000 0.544194 +v 0.544194 1.625000 0.632583 +v 0.986136 1.625000 1.074524 +v 1.074524 1.625000 0.986135 +v 0.720971 1.125000 0.809359 +v 0.809359 1.125000 0.720971 +v 0.720971 1.250000 0.809359 +v 0.809359 1.250000 0.720971 +vt 0.331731 0.714286 +vt 0.317308 0.800000 +vt 0.317308 0.714286 +vt 0.302885 0.714286 +vt 0.288462 0.800000 +vt 0.288462 0.714286 +vt 0.274038 0.714286 +vt 0.259615 0.800000 +vt 0.259615 0.714286 +vt 0.360577 0.714286 +vt 0.346154 0.800000 +vt 0.346154 0.714286 +vt 0.331731 0.800000 +vt 0.302885 0.800000 +vt 0.274038 0.800000 +vt 0.375000 0.714286 +vt 0.360577 0.800000 +vt 0.173077 0.742857 +vt 0.201923 0.757143 +vt 0.173077 0.757143 +vt 0.173077 0.742857 +vt 0.201923 0.757143 +vt 0.173077 0.757143 +vt 0.211538 0.714286 +vt 0.201923 0.742857 +vt 0.201923 0.714286 +vt 0.173077 0.757143 +vt 0.201923 0.800000 +vt 0.153846 0.800000 +vt 0.153846 0.714286 +vt 0.173077 0.742857 +vt 0.211538 0.714286 +vt 0.201923 0.742857 +vt 0.201923 0.714286 +vt 0.211538 0.742857 +vt 0.240385 0.757143 +vt 0.211538 0.757143 +vt 0.211538 0.757143 +vt 0.201923 0.757143 +vt 0.211538 0.800000 +vt 0.240385 0.757143 +vt 0.259615 0.800000 +vt 0.240385 0.742857 +vt 0.259615 0.714286 +vt 0.173077 0.757143 +vt 0.201923 0.800000 +vt 0.153846 0.800000 +vt 0.153846 0.714286 +vt 0.173077 0.742857 +vt 0.211538 0.742857 +vt 0.240385 0.757143 +vt 0.211538 0.757143 +vt 0.211538 0.757143 +vt 0.201923 0.757143 +vt 0.211538 0.800000 +vt 0.240385 0.757143 +vt 0.259615 0.800000 +vt 0.240385 0.742857 +vt 0.259615 0.714286 +vt 0.173077 0.742857 +vt 0.201923 0.757143 +vt 0.173077 0.757143 +vt 0.173077 0.742857 +vt 0.201923 0.757143 +vt 0.173077 0.757143 +vt 0.211538 0.714286 +vt 0.201923 0.742857 +vt 0.201923 0.714286 +vt 0.173077 0.757143 +vt 0.201923 0.800000 +vt 0.153846 0.800000 +vt 0.153846 0.714286 +vt 0.173077 0.742857 +vt 0.211538 0.714286 +vt 0.201923 0.742857 +vt 0.201923 0.714286 +vt 0.211538 0.742857 +vt 0.240385 0.757143 +vt 0.211538 0.757143 +vt 0.211538 0.757143 +vt 0.201923 0.757143 +vt 0.211538 0.800000 +vt 0.240385 0.757143 +vt 0.259615 0.800000 +vt 0.240385 0.742857 +vt 0.259615 0.714286 +vt 0.173077 0.757143 +vt 0.201923 0.800000 +vt 0.153846 0.800000 +vt 0.153846 0.714286 +vt 0.173077 0.742857 +vt 0.211538 0.757143 +vt 0.240385 0.742857 +vt 0.240385 0.757143 +vt 0.211538 0.757143 +vt 0.201923 0.757143 +vt 0.211538 0.800000 +vt 0.240385 0.757143 +vt 0.259615 0.800000 +vt 0.240385 0.742857 +vt 0.259615 0.714286 +vt 0.211538 0.742857 +vt 0.173077 0.742857 +vt 0.201923 0.757143 +vt 0.173077 0.757143 +vt 0.173077 0.757143 +vt 0.201923 0.742857 +vt 0.201923 0.757143 +vt 0.211538 0.714286 +vt 0.201923 0.742857 +vt 0.201923 0.714286 +vt 0.173077 0.757143 +vt 0.201923 0.800000 +vt 0.153846 0.800000 +vt 0.153846 0.714286 +vt 0.173077 0.742857 +vt 0.211538 0.714286 +vt 0.201923 0.742857 +vt 0.201923 0.714286 +vt 0.211538 0.757143 +vt 0.240385 0.742857 +vt 0.240385 0.757143 +vt 0.211538 0.757143 +vt 0.201923 0.757143 +vt 0.211538 0.800000 +vt 0.240385 0.757143 +vt 0.259615 0.800000 +vt 0.240385 0.742857 +vt 0.259615 0.714286 +vt 0.211538 0.742857 +vt 0.173077 0.757143 +vt 0.201923 0.800000 +vt 0.153846 0.800000 +vt 0.153846 0.714286 +vt 0.173077 0.742857 +vt 0.211538 0.742857 +vt 0.240385 0.757143 +vt 0.211538 0.757143 +vt 0.211538 0.757143 +vt 0.201923 0.757143 +vt 0.211538 0.800000 +vt 0.240385 0.757143 +vt 0.259615 0.800000 +vt 0.240385 0.742857 +vt 0.259615 0.714286 +vt 0.173077 0.742857 +vt 0.201923 0.757143 +vt 0.173077 0.757143 +vt 0.173077 0.742857 +vt 0.201923 0.757143 +vt 0.173077 0.757143 +vt 0.211538 0.714286 +vt 0.201923 0.742857 +vt 0.201923 0.714286 +vt 0.173077 0.757143 +vt 0.201923 0.800000 +vt 0.153846 0.800000 +vt 0.153846 0.714286 +vt 0.173077 0.742857 +vt 0.211538 0.714286 +vt 0.201923 0.742857 +vt 0.201923 0.714286 +vt 0.211538 0.757143 +vt 0.240385 0.742857 +vt 0.240385 0.757143 +vt 0.211538 0.757143 +vt 0.201923 0.757143 +vt 0.211538 0.800000 +vt 0.240385 0.757143 +vt 0.259615 0.800000 +vt 0.240385 0.742857 +vt 0.259615 0.714286 +vt 0.211538 0.742857 +vt 0.173077 0.757143 +vt 0.201923 0.800000 +vt 0.153846 0.800000 +vt 0.153846 0.714286 +vt 0.173077 0.742857 +vt 0.211538 0.742857 +vt 0.240385 0.757143 +vt 0.211538 0.757143 +vt 0.211538 0.757143 +vt 0.201923 0.757143 +vt 0.211538 0.800000 +vt 0.240385 0.757143 +vt 0.259615 0.800000 +vt 0.240385 0.742857 +vt 0.259615 0.714286 +vt 0.375000 0.800000 +vt 0.201923 0.742857 +vt 0.201923 0.742857 +vt 0.211538 0.742857 +vt 0.211538 0.742857 +vt 0.240385 0.742857 +vt 0.240385 0.742857 +vt 0.201923 0.742857 +vt 0.201923 0.742857 +vt 0.211538 0.742857 +vt 0.211538 0.742857 +vt 0.240385 0.742857 +vt 0.201923 0.742857 +vt 0.173077 0.742857 +vt 0.211538 0.742857 +vt 0.211538 0.742857 +vt 0.240385 0.742857 +vt 0.201923 0.742857 +vt 0.201923 0.742857 +vt 0.211538 0.742857 +vt 0.211538 0.742857 +vt 0.240385 0.742857 +vn 0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +vn -0.9239 0.0000 -0.3827 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +s off +f 34/52/11 41/53/11 33/54/11 +f 32/55/12 39/56/12 31/57/12 +f 30/58/13 37/59/13 29/60/13 +f 28/61/14 35/62/14 27/63/14 +f 27/63/15 42/64/15 34/52/15 +f 33/54/16 40/65/16 32/55/16 +f 31/57/17 38/66/17 30/58/17 +f 29/67/18 36/68/18 28/61/18 +f 52/69/19 62/70/19 54/71/19 +f 65/72/19 74/73/19 66/74/19 +f 46/75/20 49/76/20 44/77/20 +f 61/78/21 57/79/21 56/80/21 +f 61/78/21 43/81/21 59/82/21 +f 47/83/22 63/84/22 51/85/22 +f 44/77/21 59/82/21 43/81/21 +f 59/86/23 50/87/23 60/88/23 +f 54/89/20 57/79/20 52/90/20 +f 58/91/24 62/92/24 55/93/24 +f 60/94/24 46/75/24 45/95/24 +f 45/95/24 62/92/24 60/94/24 +f 62/70/20 59/86/20 60/88/20 +f 73/96/24 69/97/24 68/98/24 +f 73/96/24 53/99/24 71/100/24 +f 51/85/24 71/100/24 53/99/24 +f 71/101/23 64/102/23 72/103/23 +f 66/104/22 69/97/22 65/105/22 +f 70/106/21 74/107/21 67/108/21 +f 72/109/21 47/83/21 48/110/21 +f 48/110/21 74/107/21 72/109/21 +f 74/73/22 71/101/22 72/103/22 +f 84/111/19 94/112/19 86/113/19 +f 97/114/19 106/115/19 98/116/19 +f 78/117/24 81/118/24 76/119/24 +f 93/120/20 89/121/20 88/122/20 +f 93/120/20 75/123/20 91/124/20 +f 79/125/21 95/126/21 83/127/21 +f 76/119/20 91/124/20 75/123/20 +f 91/128/23 82/129/23 92/130/23 +f 86/131/24 89/121/24 84/132/24 +f 90/133/22 94/134/22 87/135/22 +f 92/136/22 78/117/22 77/137/22 +f 77/137/22 94/134/22 92/136/22 +f 94/112/24 91/128/24 92/130/24 +f 105/138/22 101/139/22 100/140/22 +f 105/138/22 85/141/22 103/142/22 +f 83/127/22 103/142/22 85/141/22 +f 104/143/23 95/144/23 96/145/23 +f 98/146/21 101/139/21 97/147/21 +f 102/148/20 106/149/20 99/150/20 +f 104/151/20 79/125/20 80/152/20 +f 80/152/20 106/149/20 104/151/20 +f 106/115/21 103/153/21 104/143/21 +f 116/154/19 126/155/19 118/156/19 +f 130/157/19 137/158/19 138/159/19 +f 110/160/25 113/161/25 108/162/25 +f 125/163/26 121/164/26 120/165/26 +f 125/163/26 107/166/26 123/167/26 +f 111/168/27 127/169/27 115/170/27 +f 108/162/26 123/167/26 107/166/26 +f 124/171/23 113/172/23 114/173/23 +f 118/174/25 121/164/25 116/175/25 +f 122/176/28 126/177/28 119/178/28 +f 124/179/28 110/160/28 109/180/28 +f 109/180/28 126/177/28 124/179/28 +f 126/155/25 123/181/25 124/171/25 +f 137/182/28 133/183/28 132/184/28 +f 137/182/28 117/185/28 135/186/28 +f 115/170/28 135/186/28 117/185/28 +f 135/187/23 128/188/23 136/189/23 +f 130/190/27 133/183/27 129/191/27 +f 134/192/26 138/193/26 131/194/26 +f 136/195/26 111/168/26 112/196/26 +f 112/196/26 138/193/26 136/195/26 +f 138/159/27 135/187/27 136/189/27 +f 148/197/19 158/198/19 150/199/19 +f 161/200/19 170/201/19 162/202/19 +f 142/203/28 145/204/28 140/205/28 +f 157/206/25 153/207/25 152/208/25 +f 157/206/25 139/209/25 155/210/25 +f 143/211/26 159/212/26 147/213/26 +f 140/205/25 155/210/25 139/209/25 +f 156/214/23 145/215/23 146/216/23 +f 150/217/28 153/207/28 148/218/28 +f 154/219/27 158/220/27 151/221/27 +f 156/222/27 142/203/27 141/223/27 +f 141/223/27 158/220/27 156/222/27 +f 158/198/28 155/224/28 156/214/28 +f 169/225/27 165/226/27 164/227/27 +f 169/225/27 149/228/27 167/229/27 +f 147/213/27 167/229/27 149/228/27 +f 167/230/23 160/231/23 168/232/23 +f 162/233/26 165/226/26 161/234/26 +f 166/235/25 170/236/25 163/237/25 +f 168/238/25 143/211/25 144/239/25 +f 144/239/25 170/236/25 168/238/25 +f 170/201/26 167/230/26 168/232/26 +f 34/52/11 42/64/11 41/53/11 +f 32/55/12 40/65/12 39/56/12 +f 30/58/13 38/66/13 37/59/13 +f 28/61/14 36/68/14 35/62/14 +f 27/63/15 35/62/15 42/64/15 +f 33/54/16 41/53/16 40/65/16 +f 31/57/17 39/56/17 38/66/17 +f 29/67/18 37/240/18 36/68/18 +f 52/69/19 61/241/19 62/70/19 +f 65/72/19 73/242/19 74/73/19 +f 46/75/20 50/243/20 49/76/20 +f 61/78/21 52/90/21 57/79/21 +f 61/78/21 56/80/21 43/81/21 +f 47/83/22 64/244/22 63/84/22 +f 44/77/21 49/76/21 59/82/21 +f 59/86/23 49/245/23 50/87/23 +f 54/89/20 58/91/20 57/79/20 +f 58/91/24 54/89/24 62/92/24 +f 60/94/24 50/243/24 46/75/24 +f 45/95/24 55/93/24 62/92/24 +f 62/70/20 61/241/20 59/86/20 +f 73/96/24 65/105/24 69/97/24 +f 73/96/24 68/98/24 53/99/24 +f 51/85/24 63/84/24 71/100/24 +f 71/101/23 63/246/23 64/102/23 +f 66/104/22 70/106/22 69/97/22 +f 70/106/21 66/104/21 74/107/21 +f 72/109/21 64/244/21 47/83/21 +f 48/110/21 67/108/21 74/107/21 +f 74/73/22 73/242/22 71/101/22 +f 84/111/19 93/247/19 94/112/19 +f 97/114/19 105/248/19 106/115/19 +f 78/117/24 82/249/24 81/118/24 +f 93/120/20 84/132/20 89/121/20 +f 93/120/20 88/122/20 75/123/20 +f 79/125/21 96/250/21 95/126/21 +f 76/119/20 81/118/20 91/124/20 +f 91/128/23 81/251/23 82/129/23 +f 86/131/24 90/133/24 89/121/24 +f 90/133/22 86/131/22 94/134/22 +f 92/136/22 82/249/22 78/117/22 +f 77/137/22 87/135/22 94/134/22 +f 94/112/24 93/247/24 91/128/24 +f 105/138/22 97/147/22 101/139/22 +f 105/138/22 100/140/22 85/141/22 +f 83/127/22 95/126/22 103/142/22 +f 104/143/23 103/153/23 95/144/23 +f 98/146/21 102/148/21 101/139/21 +f 102/148/20 98/146/20 106/149/20 +f 104/151/20 96/250/20 79/125/20 +f 80/152/20 99/150/20 106/149/20 +f 106/115/21 105/248/21 103/153/21 +f 116/154/19 125/252/19 126/155/19 +f 130/157/19 129/253/19 137/158/19 +f 110/160/25 114/254/25 113/161/25 +f 125/163/26 116/175/26 121/164/26 +f 125/163/26 120/165/26 107/166/26 +f 111/168/27 128/255/27 127/169/27 +f 108/162/26 113/161/26 123/167/26 +f 124/171/23 123/181/23 113/172/23 +f 118/174/25 122/176/25 121/164/25 +f 122/176/28 118/174/28 126/177/28 +f 124/179/28 114/254/28 110/160/28 +f 109/180/28 119/178/28 126/177/28 +f 126/155/25 125/252/25 123/181/25 +f 137/182/28 129/191/28 133/183/28 +f 137/182/28 132/184/28 117/185/28 +f 115/170/28 127/169/28 135/186/28 +f 135/187/23 127/256/23 128/188/23 +f 130/190/27 134/192/27 133/183/27 +f 134/192/26 130/190/26 138/193/26 +f 136/195/26 128/255/26 111/168/26 +f 112/196/26 131/194/26 138/193/26 +f 138/159/27 137/158/27 135/187/27 +f 148/197/19 157/257/19 158/198/19 +f 161/200/19 169/258/19 170/201/19 +f 142/203/28 146/259/28 145/204/28 +f 157/206/25 148/218/25 153/207/25 +f 157/206/25 152/208/25 139/209/25 +f 143/211/26 160/260/26 159/212/26 +f 140/205/25 145/204/25 155/210/25 +f 156/214/23 155/224/23 145/215/23 +f 150/217/28 154/219/28 153/207/28 +f 154/219/27 150/217/27 158/220/27 +f 156/222/27 146/259/27 142/203/27 +f 141/223/27 151/221/27 158/220/27 +f 158/198/28 157/257/28 155/224/28 +f 169/225/27 161/234/27 165/226/27 +f 169/225/27 164/227/27 149/228/27 +f 147/213/27 159/212/27 167/229/27 +f 167/230/23 159/261/23 160/231/23 +f 162/233/26 166/235/26 165/226/26 +f 166/235/25 162/233/25 170/236/25 +f 168/238/25 160/260/25 143/211/25 +f 144/239/25 163/237/25 170/236/25 +f 170/201/26 169/258/26 167/230/26 +o Frame +v 1.500000 2.750000 1.500000 +v 1.250000 2.750000 1.500000 +v 1.500000 2.750000 1.250000 +v 1.250000 2.750000 1.250000 +v 1.500000 3.000000 1.500000 +v 1.250000 3.000000 1.500000 +v 1.500000 3.000000 1.250000 +v 1.250000 3.000000 1.250000 +v 1.500000 2.750000 -1.250000 +v 1.250000 2.750000 -1.250000 +v 1.500000 2.750000 -1.500000 +v 1.250000 2.750000 -1.500000 +v 1.500000 3.000000 -1.250000 +v 1.250000 3.000000 -1.250000 +v 1.500000 3.000000 -1.500000 +v 1.250000 3.000000 -1.500000 +v -1.250000 2.750000 1.500000 +v -1.500000 2.750000 1.500000 +v -1.250000 2.750000 1.250000 +v -1.500000 2.750000 1.250000 +v -1.250000 3.000000 1.500000 +v -1.500000 3.000000 1.500000 +v -1.250000 3.000000 1.250000 +v -1.500000 3.000000 1.250000 +v -1.250000 2.750000 -1.250000 +v -1.500000 2.750000 -1.250000 +v -1.250000 2.750000 -1.500000 +v -1.500000 2.750000 -1.500000 +v -1.250000 3.000000 -1.250000 +v -1.500000 3.000000 -1.250000 +v -1.250000 3.000000 -1.500000 +v -1.500000 3.000000 -1.500000 +v -1.375000 0.250000 -1.500000 +v -1.375000 2.750000 -1.500000 +v -1.375000 2.750000 -1.375000 +v -1.375000 0.250000 -1.375000 +v -1.500000 0.250000 -1.375000 +v -1.500000 2.750000 -1.375000 +v -1.500000 2.750000 -1.500000 +v -1.500000 0.250000 -1.500000 +v -1.375000 0.250000 1.375000 +v -1.375000 2.750000 1.375000 +v -1.375000 2.750000 1.500000 +v -1.375000 0.250000 1.500000 +v -1.500000 0.250000 1.500000 +v -1.500000 2.750000 1.500000 +v -1.500000 2.750000 1.375000 +v -1.500000 0.250000 1.375000 +v 1.375000 2.750000 -1.500000 +v 1.375000 0.250000 -1.500000 +v 1.375000 0.250000 -1.375000 +v 1.375000 2.750000 -1.375000 +v 1.500000 2.750000 -1.375000 +v 1.500000 0.250000 -1.375000 +v 1.500000 0.250000 -1.500000 +v 1.500000 2.750000 -1.500000 +v 1.375000 2.750000 1.375000 +v 1.375000 0.250000 1.375000 +v 1.375000 0.250000 1.500000 +v 1.375000 2.750000 1.500000 +v 1.500000 2.750000 1.500000 +v 1.500000 0.250000 1.500000 +v 1.500000 0.250000 1.375000 +v 1.500000 2.750000 1.375000 +v -1.500000 2.875000 1.250000 +v -1.500000 2.875000 -1.250000 +v -1.375000 2.875000 -1.250000 +v -1.375000 2.875000 1.250000 +v -1.375000 3.000000 1.250000 +v -1.375000 3.000000 -1.250000 +v -1.500000 3.000000 -1.250000 +v -1.500000 3.000000 1.250000 +v 1.375000 2.875000 1.250000 +v 1.375000 2.875000 -1.250000 +v 1.500000 2.875000 -1.250000 +v 1.500000 2.875000 1.250000 +v 1.500000 3.000000 1.250000 +v 1.500000 3.000000 -1.250000 +v 1.375000 3.000000 -1.250000 +v 1.375000 3.000000 1.250000 +v -1.250000 2.875000 -1.500000 +v 1.250000 2.875000 -1.500000 +v 1.250000 2.875000 -1.375000 +v -1.250000 2.875000 -1.375000 +v -1.250000 3.000000 -1.375000 +v 1.250000 3.000000 -1.375000 +v 1.250000 3.000000 -1.500000 +v -1.250000 3.000000 -1.500000 +v -1.250000 2.875000 1.375000 +v 1.250000 2.875000 1.375000 +v 1.250000 2.875000 1.500000 +v -1.250000 2.875000 1.500000 +v -1.250000 3.000000 1.500000 +v 1.250000 3.000000 1.500000 +v 1.250000 3.000000 1.375000 +v -1.250000 3.000000 1.375000 +vt 0.394231 0.714286 +vt 0.375000 0.742857 +vt 0.375000 0.714286 +vt 0.375000 0.771429 +vt 0.394231 0.800000 +vt 0.375000 0.800000 +vt 0.432692 0.742857 +vt 0.413462 0.771429 +vt 0.413462 0.742857 +vt 0.451923 0.742857 +vt 0.432692 0.771429 +vt 0.394231 0.742857 +vt 0.394231 0.771429 +vt 0.394231 0.714286 +vt 0.375000 0.742857 +vt 0.375000 0.714286 +vt 0.375000 0.771429 +vt 0.394231 0.800000 +vt 0.375000 0.800000 +vt 0.432692 0.742857 +vt 0.413462 0.771429 +vt 0.413462 0.742857 +vt 0.451923 0.742857 +vt 0.432692 0.771429 +vt 0.394231 0.742857 +vt 0.394231 0.771429 +vt 0.394231 0.714286 +vt 0.375000 0.742857 +vt 0.375000 0.714286 +vt 0.375000 0.771429 +vt 0.394231 0.800000 +vt 0.375000 0.800000 +vt 0.432692 0.742857 +vt 0.413462 0.771429 +vt 0.413462 0.742857 +vt 0.451923 0.742857 +vt 0.432692 0.771429 +vt 0.394231 0.742857 +vt 0.394231 0.771429 +vt 0.394231 0.714286 +vt 0.375000 0.742857 +vt 0.375000 0.714286 +vt 0.375000 0.771429 +vt 0.394231 0.800000 +vt 0.375000 0.800000 +vt 0.432692 0.742857 +vt 0.413462 0.771429 +vt 0.413462 0.742857 +vt 0.451923 0.742857 +vt 0.432692 0.771429 +vt 0.394231 0.742857 +vt 0.394231 0.771429 +vt 0.442308 0.828571 +vt 0.250000 0.842857 +vt 0.250000 0.828571 +vt 0.442308 0.814286 +vt 0.442308 0.842857 +vt 0.250000 0.857143 +vt 0.250000 0.800000 +vt 0.442308 0.800000 +vt 0.442308 0.814286 +vt 0.250000 0.828571 +vt 0.250000 0.814286 +vt 0.442308 0.800000 +vt 0.442308 0.828571 +vt 0.250000 0.842857 +vt 0.442308 0.857143 +vt 0.442308 0.842857 +vt 0.250000 0.828571 +vt 0.442308 0.814286 +vt 0.442308 0.828571 +vt 0.250000 0.842857 +vt 0.250000 0.814286 +vt 0.442308 0.800000 +vt 0.442308 0.857143 +vt 0.250000 0.857143 +vt 0.250000 0.842857 +vt 0.442308 0.828571 +vt 0.442308 0.842857 +vt 0.250000 0.857143 +vt 0.250000 0.828571 +vt 0.442308 0.814286 +vt 0.250000 0.800000 +vt 0.250000 0.814286 +vt 0.442308 0.828571 +vt 0.250000 0.842857 +vt 0.250000 0.828571 +vt 0.442308 0.814286 +vt 0.442308 0.842857 +vt 0.250000 0.857143 +vt 0.250000 0.800000 +vt 0.442308 0.800000 +vt 0.250000 0.842857 +vt 0.442308 0.828571 +vt 0.442308 0.842857 +vt 0.250000 0.857143 +vt 0.250000 0.828571 +vt 0.442308 0.814286 +vt 0.250000 0.800000 +vt 0.250000 0.814286 +vt 0.442308 0.828571 +vt 0.250000 0.842857 +vt 0.250000 0.828571 +vt 0.442308 0.814286 +vt 0.442308 0.842857 +vt 0.250000 0.857143 +vt 0.250000 0.800000 +vt 0.442308 0.800000 +vt 0.250000 0.842857 +vt 0.442308 0.828571 +vt 0.442308 0.842857 +vt 0.250000 0.857143 +vt 0.250000 0.828571 +vt 0.442308 0.814286 +vt 0.250000 0.800000 +vt 0.250000 0.814286 +vt 0.451923 0.771429 +vt 0.451923 0.771429 +vt 0.451923 0.771429 +vt 0.451923 0.771429 +vt 0.250000 0.814286 +vt 0.442308 0.857143 +vt 0.250000 0.800000 +vt 0.250000 0.857143 +vt 0.442308 0.842857 +vt 0.250000 0.800000 +vt 0.442308 0.857143 +vt 0.442308 0.800000 +vt 0.250000 0.814286 +vt 0.442308 0.857143 +vt 0.442308 0.857143 +vt 0.442308 0.800000 +vt 0.250000 0.814286 +vt 0.442308 0.857143 +vt 0.442308 0.857143 +vt 0.442308 0.800000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +s off +f 174/262/29 171/263/29 172/264/29 +f 175/265/30 178/266/30 176/267/30 +f 172/268/31 178/269/31 174/270/31 +f 171/271/32 176/272/32 172/268/32 +f 173/273/33 175/265/33 171/263/33 +f 174/270/34 177/274/34 173/273/34 +f 182/275/29 179/276/29 180/277/29 +f 183/278/30 186/279/30 184/280/30 +f 180/281/31 186/282/31 182/283/31 +f 179/284/32 184/285/32 180/281/32 +f 181/286/33 183/278/33 179/276/33 +f 182/283/34 185/287/34 181/286/34 +f 190/288/29 187/289/29 188/290/29 +f 191/291/30 194/292/30 192/293/30 +f 188/294/31 194/295/31 190/296/31 +f 187/297/32 192/298/32 188/294/32 +f 189/299/33 191/291/33 187/289/33 +f 190/296/34 193/300/34 189/299/34 +f 198/301/29 195/302/29 196/303/29 +f 199/304/30 202/305/30 200/306/30 +f 196/307/31 202/308/31 198/309/31 +f 195/310/32 200/311/32 196/307/32 +f 197/312/33 199/304/33 195/302/33 +f 198/309/34 201/313/34 197/312/34 +f 210/314/31 208/315/31 209/316/31 +f 209/316/34 203/317/34 210/314/34 +f 207/318/32 205/319/32 208/315/32 +f 203/317/33 205/320/33 206/321/33 +f 218/322/31 216/323/31 217/324/31 +f 217/324/34 211/325/34 218/322/34 +f 215/326/32 213/327/32 216/323/32 +f 211/328/33 213/327/33 214/329/33 +f 226/330/33 224/331/33 225/332/33 +f 225/332/34 219/333/34 226/330/34 +f 223/334/32 221/335/32 224/331/32 +f 219/333/31 221/336/31 222/337/31 +f 234/338/33 232/339/33 233/340/33 +f 233/340/34 227/341/34 234/338/34 +f 231/342/32 229/343/32 232/339/32 +f 227/344/31 229/343/31 230/345/31 +f 242/346/30 240/347/30 241/348/30 +f 241/348/31 235/349/31 242/346/31 +f 239/350/33 237/351/33 240/347/33 +f 235/349/29 237/352/29 238/353/29 +f 250/354/30 248/355/30 249/356/30 +f 249/356/31 243/357/31 250/354/31 +f 247/358/33 245/359/33 248/355/33 +f 243/360/29 245/359/29 246/361/29 +f 258/362/30 256/363/30 257/364/30 +f 257/364/34 251/365/34 258/362/34 +f 255/366/32 253/367/32 256/363/32 +f 251/365/29 253/368/29 254/369/29 +f 266/370/30 264/371/30 265/372/30 +f 265/372/34 259/373/34 266/370/34 +f 263/374/32 261/375/32 264/371/32 +f 259/376/29 261/375/29 262/377/29 +f 174/262/29 173/273/29 171/263/29 +f 175/265/30 177/274/30 178/266/30 +f 172/268/31 176/272/31 178/269/31 +f 171/271/32 175/378/32 176/272/32 +f 173/273/33 177/274/33 175/265/33 +f 174/270/34 178/269/34 177/274/34 +f 182/275/29 181/286/29 179/276/29 +f 183/278/30 185/287/30 186/279/30 +f 180/281/31 184/285/31 186/282/31 +f 179/284/32 183/379/32 184/285/32 +f 181/286/33 185/287/33 183/278/33 +f 182/283/34 186/282/34 185/287/34 +f 190/288/29 189/299/29 187/289/29 +f 191/291/30 193/300/30 194/292/30 +f 188/294/31 192/298/31 194/295/31 +f 187/297/32 191/380/32 192/298/32 +f 189/299/33 193/300/33 191/291/33 +f 190/296/34 194/295/34 193/300/34 +f 198/301/29 197/312/29 195/302/29 +f 199/304/30 201/313/30 202/305/30 +f 196/307/31 200/311/31 202/308/31 +f 195/310/32 199/381/32 200/311/32 +f 197/312/33 201/313/33 199/304/33 +f 198/309/34 202/308/34 201/313/34 +f 210/314/31 207/318/31 208/315/31 +f 209/316/34 204/382/34 203/317/34 +f 207/318/32 206/383/32 205/319/32 +f 203/317/33 204/382/33 205/320/33 +f 218/322/31 215/326/31 216/323/31 +f 217/324/34 212/384/34 211/325/34 +f 215/326/32 214/329/32 213/327/32 +f 211/328/33 212/385/33 213/327/33 +f 226/330/33 223/334/33 224/331/33 +f 225/332/34 220/386/34 219/333/34 +f 223/334/32 222/387/32 221/335/32 +f 219/333/31 220/386/31 221/336/31 +f 234/338/33 231/342/33 232/339/33 +f 233/340/34 228/388/34 227/341/34 +f 231/342/32 230/345/32 229/343/32 +f 227/344/31 228/389/31 229/343/31 +f 242/346/30 239/350/30 240/347/30 +f 241/348/31 236/390/31 235/349/31 +f 239/350/33 238/391/33 237/351/33 +f 235/349/29 236/390/29 237/352/29 +f 250/354/30 247/358/30 248/355/30 +f 249/356/31 244/392/31 243/357/31 +f 247/358/33 246/361/33 245/359/33 +f 243/360/29 244/393/29 245/359/29 +f 258/362/30 255/366/30 256/363/30 +f 257/364/34 252/394/34 251/365/34 +f 255/366/32 254/395/32 253/367/32 +f 251/365/29 252/394/29 253/368/29 +f 266/370/30 263/374/30 264/371/30 +f 265/372/34 260/396/34 259/373/34 +f 263/374/32 262/377/32 261/375/32 +f 259/376/29 260/397/29 261/375/29 +o Slider +v -0.187500 2.000000 -0.687500 +v 0.187500 2.000000 -0.687500 +v -0.187500 2.000000 -1.312500 +v 0.187500 2.000000 -1.312500 +v -0.187500 2.375000 -1.312500 +v -0.187500 2.375000 -0.687500 +v 0.187500 2.375000 -0.687500 +v 0.187500 2.375000 -1.312500 +vt 0.894231 0.271429 +vt 0.942308 0.314286 +vt 0.894231 0.314286 +vt 0.942308 0.228571 +vt 0.894231 0.228571 +vt 0.894231 0.357143 +vt 0.942308 0.357143 +vt 0.971154 0.314286 +vt 0.942308 0.271429 +vt 0.971154 0.271429 +vt 0.865385 0.271429 +vt 0.865385 0.314286 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +s off +f 273/398/35 271/399/35 272/400/35 +f 270/401/36 273/398/36 268/402/36 +f 267/403/37 271/399/37 269/404/37 +f 269/405/38 274/406/38 270/407/38 +f 268/408/39 272/400/39 267/409/39 +f 273/398/35 274/406/35 271/399/35 +f 270/401/36 274/406/36 273/398/36 +f 267/403/37 272/400/37 271/399/37 +f 269/405/38 271/399/38 274/406/38 +f 268/408/39 273/398/39 272/400/39 +o Base +v 1.500000 0.125000 1.250000 +v 1.500000 0.125000 -1.250000 +v 1.375000 0.125000 -1.250000 +v 1.375000 0.125000 1.250000 +v 1.375000 0.000000 1.250000 +v 1.375000 0.000000 -1.250000 +v 1.500000 0.000000 -1.250000 +v 1.500000 0.000000 1.250000 +v 1.500000 0.000000 1.500000 +v 1.250000 0.000000 1.500000 +v 1.500000 0.000000 1.250000 +v 1.250000 0.000000 1.250000 +v 1.500000 0.250000 1.500000 +v 1.250000 0.250000 1.500000 +v 1.500000 0.250000 1.250000 +v 1.250000 0.250000 1.250000 +v 1.500000 0.000000 -1.250000 +v 1.250000 0.000000 -1.250000 +v 1.500000 0.000000 -1.500000 +v 1.250000 0.000000 -1.500000 +v 1.500000 0.250000 -1.250000 +v 1.250000 0.250000 -1.250000 +v 1.500000 0.250000 -1.500000 +v 1.250000 0.250000 -1.500000 +v -1.250000 0.000000 1.500000 +v -1.500000 0.000000 1.500000 +v -1.250000 0.000000 1.250000 +v -1.500000 0.000000 1.250000 +v -1.250000 0.250000 1.500000 +v -1.500000 0.250000 1.500000 +v -1.250000 0.250000 1.250000 +v -1.500000 0.250000 1.250000 +v -1.250000 0.000000 -1.250000 +v -1.500000 0.000000 -1.250000 +v -1.250000 0.000000 -1.500000 +v -1.500000 0.000000 -1.500000 +v -1.250000 0.250000 -1.250000 +v -1.500000 0.250000 -1.250000 +v -1.250000 0.250000 -1.500000 +v -1.500000 0.250000 -1.500000 +v -1.375000 0.125000 1.250000 +v -1.375000 0.125000 -1.250000 +v -1.500000 0.125000 -1.250000 +v -1.500000 0.125000 1.250000 +v -1.500000 0.000000 1.250000 +v -1.500000 0.000000 -1.250000 +v -1.375000 0.000000 -1.250000 +v -1.375000 0.000000 1.250000 +v 1.250000 0.125000 -1.500000 +v -1.250000 0.125000 -1.500000 +v -1.250000 0.125000 -1.375000 +v 1.250000 0.125000 -1.375000 +v 1.250000 0.000000 -1.375000 +v -1.250000 0.000000 -1.375000 +v -1.250000 0.000000 -1.500000 +v 1.250000 0.000000 -1.500000 +v 1.250000 0.125000 1.375000 +v -1.250000 0.125000 1.375000 +v -1.250000 0.125000 1.500000 +v 1.250000 0.125000 1.500000 +v 1.250000 0.000000 1.500000 +v -1.250000 0.000000 1.500000 +v -1.250000 0.000000 1.375000 +v 1.250000 0.000000 1.375000 +v 1.500000 0.312500 -0.187500 +v 1.500000 0.312500 0.187500 +v 1.500000 0.687500 -0.187500 +v 1.500000 0.687500 0.187500 +v 1.375000 0.375000 -0.125000 +v 1.375000 0.375000 0.125000 +v 1.375000 0.625000 -0.125000 +v 1.375000 0.625000 0.125000 +v 1.375000 0.687500 -0.187500 +v 1.375000 0.312500 -0.187500 +v 1.375000 0.312500 0.187500 +v 1.375000 0.687500 0.187500 +v -1.000000 0.750000 0.500000 +v -1.250000 0.750000 0.566987 +v -1.433013 0.750000 0.750000 +v -1.500000 0.750000 1.000000 +v -1.433013 0.750000 1.250000 +v -1.250000 0.750000 1.433013 +v -1.000000 0.750000 1.500000 +v -0.750000 0.750000 1.433013 +v -0.566987 0.750000 1.250000 +v -0.500000 0.750000 1.000000 +v -0.566987 0.750000 0.750000 +v -0.750000 0.750000 0.566988 +v -1.250000 2.500000 0.566987 +v -1.000000 2.500000 0.500000 +v -1.433013 2.500000 0.750000 +v -1.500000 2.500000 1.000000 +v -1.433013 2.500000 1.250000 +v -1.250000 2.500000 1.433013 +v -1.000000 2.500000 1.500000 +v -0.750000 2.500000 1.433013 +v -0.566987 2.500000 1.250000 +v -0.500000 2.500000 1.000000 +v -0.566987 2.500000 0.750000 +v -0.750000 2.500000 0.566988 +v -1.000000 0.750000 -0.500000 +v -1.250000 0.750000 -0.433013 +v -1.433013 0.750000 -0.250000 +v -1.500000 0.750000 0.000000 +v -1.433013 0.750000 0.250000 +v -1.250000 0.750000 0.433013 +v -1.000000 0.750000 0.500000 +v -0.750000 0.750000 0.433013 +v -0.566987 0.750000 0.250000 +v -0.500000 0.750000 0.000000 +v -0.566987 0.750000 -0.250000 +v -0.750000 0.750000 -0.433012 +v -1.250000 2.500000 -0.433013 +v -1.000000 2.500000 -0.500000 +v -1.433013 2.500000 -0.250000 +v -1.500000 2.500000 0.000000 +v -1.433013 2.500000 0.250000 +v -1.250000 2.500000 0.433013 +v -1.000000 2.500000 0.500000 +v -0.750000 2.500000 0.433013 +v -0.566987 2.500000 0.250000 +v -0.500000 2.500000 0.000000 +v -0.566987 2.500000 -0.250000 +v -0.750000 2.500000 -0.433012 +v -1.250000 0.750000 -0.500000 +v 1.250000 0.750000 -0.500000 +v -1.250000 0.750000 -1.500000 +v 1.250000 0.750000 -1.500000 +v -1.250000 1.500000 -1.500000 +v -1.250000 1.500000 -0.500000 +v 1.250000 1.500000 -0.500000 +v 1.250000 1.500000 -1.500000 +v -1.000000 1.750000 -1.500000 +v -1.000000 1.750000 -0.500000 +v 1.000000 1.750000 -0.500000 +v 1.000000 1.750000 -1.500000 +v -1.250000 0.750000 1.250000 +v -0.750000 0.750000 1.250000 +v -1.250000 0.750000 0.750000 +v -0.750000 0.750000 0.750000 +v -1.250000 0.250000 1.250000 +v -0.750000 0.250000 1.250000 +v -1.250000 0.250000 0.750000 +v -0.750000 0.250000 0.750000 +v -1.250000 0.750000 0.250000 +v -0.750000 0.750000 0.250000 +v -1.250000 0.750000 -0.250000 +v -0.750000 0.750000 -0.250000 +v -1.250000 0.250000 0.250000 +v -0.750000 0.250000 0.250000 +v -1.250000 0.250000 -0.250000 +v -0.750000 0.250000 -0.250000 +v -1.250000 0.750000 -0.750000 +v 1.250000 0.750000 -0.750000 +v -1.250000 0.750000 -1.250000 +v 1.250000 0.750000 -1.250000 +v -1.250000 0.250000 -0.750000 +v 1.250000 0.250000 -0.750000 +v -1.250000 0.250000 -1.250000 +v 1.250000 0.250000 -1.250000 +v -0.750000 1.750000 -0.625000 +v 0.750000 1.750000 -0.625000 +v -0.750000 1.750000 -1.375000 +v 0.750000 1.750000 -1.375000 +v -0.750000 2.000000 -1.375000 +v -0.750000 2.000000 -0.625000 +v 0.750000 2.000000 -0.625000 +v 0.750000 2.000000 -1.375000 +v -0.625000 2.000000 -0.968750 +v 0.625000 2.000000 -0.968750 +v -0.625000 2.000000 -1.031250 +v 0.625000 2.000000 -1.031250 +v -0.625000 2.250000 -1.031250 +v -0.625000 2.250000 -0.968750 +v 0.625000 2.250000 -0.968750 +v 0.625000 2.250000 -1.031250 +v -0.625000 2.000000 -1.093750 +v 0.625000 2.000000 -1.093750 +v -0.625000 2.000000 -1.156250 +v 0.625000 2.000000 -1.156250 +v -0.625000 2.250000 -1.156250 +v -0.625000 2.250000 -1.093750 +v 0.625000 2.250000 -1.093750 +v 0.625000 2.250000 -1.156250 +v -0.625000 2.000000 -1.218750 +v 0.625000 2.000000 -1.218750 +v -0.625000 2.000000 -1.281250 +v 0.625000 2.000000 -1.281250 +v -0.625000 2.250000 -1.281250 +v -0.625000 2.250000 -1.218750 +v 0.625000 2.250000 -1.218750 +v 0.625000 2.250000 -1.281250 +v -0.625000 2.000000 -0.718750 +v 0.625000 2.000000 -0.718750 +v -0.625000 2.000000 -0.781250 +v 0.625000 2.000000 -0.781250 +v -0.625000 2.250000 -0.781250 +v -0.625000 2.250000 -0.718750 +v 0.625000 2.250000 -0.718750 +v 0.625000 2.250000 -0.781250 +v -0.625000 2.000000 -0.843750 +v 0.625000 2.000000 -0.843750 +v -0.625000 2.000000 -0.906250 +v 0.625000 2.000000 -0.906250 +v -0.625000 2.250000 -0.906250 +v -0.625000 2.250000 -0.843750 +v 0.625000 2.250000 -0.843750 +v 0.625000 2.250000 -0.906250 +v -1.250000 2.500000 1.125000 +v -0.750000 2.500000 1.125000 +v -1.250000 2.500000 0.875000 +v -0.750000 2.500000 0.875000 +v -1.250000 3.000000 0.875000 +v -1.250000 3.000000 1.125000 +v -0.750000 3.000000 1.125000 +v -0.750000 3.000000 0.875000 +v -1.250000 2.500000 0.125000 +v -0.750000 2.500000 0.125000 +v -1.250000 2.500000 -0.125000 +v -0.750000 2.500000 -0.125000 +v -1.250000 3.000000 -0.125000 +v -1.250000 3.000000 0.125000 +v -0.750000 3.000000 0.125000 +v -0.750000 3.000000 -0.125000 +v -1.125000 2.875000 0.875000 +v -1.125000 2.875000 0.125000 +v -0.875000 2.875000 0.125000 +v -0.875000 2.875000 0.875000 +v -0.786612 2.838388 0.125000 +v -0.786612 2.838388 0.875000 +v -0.750000 2.750000 0.125000 +v -0.750000 2.750000 0.875000 +v -0.786612 2.661612 0.125000 +v -0.786612 2.661612 0.875000 +v -0.875000 2.625000 0.125000 +v -0.875000 2.625000 0.875000 +v -0.963388 2.661612 0.125000 +v -0.963388 2.661612 0.875000 +v -1.000000 2.750000 0.125000 +v -1.000000 2.750000 0.875000 +v -0.963388 2.838388 0.125000 +v -0.963388 2.838388 0.875000 +v -1.036612 2.838388 0.125000 +v -1.036612 2.838388 0.875000 +v -1.000000 2.750000 0.125000 +v -1.000000 2.750000 0.875000 +v -1.036612 2.661612 0.125000 +v -1.036612 2.661612 0.875000 +v -1.125000 2.625000 0.125000 +v -1.125000 2.625000 0.875000 +v -1.213388 2.661612 0.125000 +v -1.213388 2.661612 0.875000 +v -1.250000 2.750000 0.125000 +v -1.250000 2.750000 0.875000 +v -1.213388 2.838388 0.125000 +v -1.213388 2.838388 0.875000 +v -0.875000 2.875000 -0.125000 +v -0.786612 2.838388 -0.125000 +v -0.750000 2.750000 -0.125000 +v -0.786612 2.661612 -0.125000 +v -0.875000 2.625000 -0.125000 +v -0.963388 2.661612 -0.125000 +v -1.000000 2.750000 -0.125000 +v -0.963388 2.838388 -0.125000 +v -0.875000 2.875000 -0.750000 +v -0.786612 2.838388 -0.750000 +v -0.750000 2.750000 -0.750000 +v -0.786612 2.661612 -0.750000 +v -0.875000 2.625000 -0.750000 +v -0.963388 2.661612 -0.750000 +v -1.000000 2.750000 -0.750000 +v -0.963388 2.838388 -0.750000 +v -0.875000 2.801777 -0.926777 +v -0.786612 2.775888 -0.900888 +v -0.750000 2.713388 -0.838388 +v -0.786612 2.650888 -0.775888 +v -0.963388 2.650888 -0.775888 +v -1.000000 2.713388 -0.838388 +v -0.963388 2.775888 -0.900888 +v -0.875000 2.625000 -1.000000 +v -0.786612 2.625000 -0.963388 +v -0.750000 2.625000 -0.875000 +v -0.786612 2.625000 -0.786612 +v -0.963388 2.625000 -0.786612 +v -1.000000 2.625000 -0.875000 +v -0.963388 2.625000 -0.963388 +v -0.875000 2.000000 -0.750000 +v -0.875000 2.000000 -1.000000 +v -0.786612 2.000000 -0.963388 +v -0.750000 2.000000 -0.875000 +v -0.786612 2.000000 -0.786612 +v -0.963388 2.000000 -0.786612 +v -1.000000 2.000000 -0.875000 +v -0.963388 2.000000 -0.963388 +v -0.838388 1.911612 -0.750000 +v -0.838388 1.911612 -1.000000 +v -0.775888 1.974112 -0.963388 +v -0.775888 1.974112 -0.786612 +v -0.900888 1.849112 -0.786612 +v -0.926777 1.823223 -0.875000 +v -0.900888 1.849112 -0.963388 +v -0.750000 1.875000 -0.750000 +v -0.750000 1.875000 -1.000000 +v -0.750000 1.963388 -0.963388 +v -0.750000 1.963388 -0.786612 +v -0.750000 1.786612 -0.786612 +v -0.750000 1.750000 -0.875000 +v -0.750000 1.786612 -0.963388 +v -1.125000 2.875000 -0.125000 +v -1.036612 2.838388 -0.125000 +v -1.000000 2.750000 -0.125000 +v -1.036612 2.661612 -0.125000 +v -1.125000 2.625000 -0.125000 +v -1.213388 2.661612 -0.125000 +v -1.250000 2.750000 -0.125000 +v -1.213388 2.838388 -0.125000 +v -1.125000 2.875000 -1.000000 +v -1.036612 2.838388 -1.000000 +v -1.000000 2.750000 -1.000000 +v -1.036612 2.661612 -1.000000 +v -1.125000 2.625000 -1.000000 +v -1.213388 2.661612 -1.000000 +v -1.250000 2.750000 -1.000000 +v -1.213388 2.838388 -1.000000 +v -1.125000 2.801777 -1.176777 +v -1.036612 2.775888 -1.150888 +v -1.000000 2.713388 -1.088388 +v -1.036612 2.650888 -1.025888 +v -1.213388 2.650888 -1.025888 +v -1.250000 2.713388 -1.088388 +v -1.213388 2.775888 -1.150888 +v -1.125000 2.625000 -1.250000 +v -1.036612 2.625000 -1.213388 +v -1.000000 2.625000 -1.125000 +v -1.036612 2.625000 -1.036612 +v -1.213388 2.625000 -1.036612 +v -1.250000 2.625000 -1.125000 +v -1.213388 2.625000 -1.213388 +v -1.125000 2.000000 -1.000000 +v -1.125000 2.000000 -1.250000 +v -1.036612 2.000000 -1.213388 +v -1.000000 2.000000 -1.125000 +v -1.036612 2.000000 -1.036612 +v -1.213388 2.000000 -1.036612 +v -1.250000 2.000000 -1.125000 +v -1.213388 2.000000 -1.213388 +v -1.088388 1.911612 -1.000000 +v -1.088388 1.911612 -1.250000 +v -1.025888 1.974112 -1.213388 +v -1.025888 1.974112 -1.036612 +v -1.150888 1.849112 -1.036612 +v -1.176777 1.823223 -1.125000 +v -1.150888 1.849112 -1.213388 +v -1.000000 1.875000 -1.000000 +v -1.000000 1.875000 -1.250000 +v -1.000000 1.963388 -1.213388 +v -1.000000 1.963388 -1.036612 +v -1.000000 1.786612 -1.036612 +v -1.000000 1.750000 -1.125000 +v -1.000000 1.786612 -1.213388 +v -0.750000 2.000000 -1.125000 +v -0.750000 1.875000 -1.000000 +v -0.750000 1.875000 -1.250000 +v -0.750000 1.963388 -1.213388 +v -0.750000 1.963388 -1.036612 +v -0.750000 1.786612 -1.036612 +v -0.750000 1.750000 -1.125000 +v -0.750000 1.786612 -1.213388 +v 0.875000 0.125000 1.500000 +v 1.125000 0.125000 1.500000 +v 0.875000 0.125000 -1.500000 +v 1.125000 0.125000 -1.500000 +v 0.875000 0.250000 -1.500000 +v 0.875000 0.250000 1.500000 +v 1.125000 0.250000 1.500000 +v 1.125000 0.250000 -1.500000 +v 0.500000 0.750000 -0.500000 +v 0.117317 0.750000 -0.423880 +v -0.207107 0.750000 -0.207107 +v -0.423880 0.750000 0.117316 +v -0.500000 0.750000 0.500000 +v -0.423880 0.750000 0.882684 +v -0.207107 0.750000 1.207107 +v 0.117317 0.750000 1.423880 +v 0.500000 0.750000 1.500000 +v 0.882683 0.750000 1.423880 +v 1.207107 0.750000 1.207107 +v 1.423880 0.750000 0.882684 +v 1.500000 0.750000 0.500000 +v 1.423879 0.750000 0.117316 +v 1.207107 0.750000 -0.207107 +v 0.882683 0.750000 -0.423880 +v -0.250000 0.250000 1.250000 +v 1.250000 0.250000 1.250000 +v -0.250000 0.250000 -0.250000 +v 1.250000 0.250000 -0.250000 +v -0.250000 0.750000 -0.250000 +v -0.250000 0.750000 1.250000 +v 1.250000 0.750000 1.250000 +v 1.250000 0.750000 -0.250000 +v 0.117317 1.750000 -0.423880 +v 0.500000 1.750000 -0.500000 +v -0.207107 1.750000 -0.207107 +v -0.423880 1.750000 0.117316 +v -0.500000 1.750000 0.500000 +v -0.423880 1.750000 0.882684 +v -0.207107 1.750000 1.207107 +v 0.117317 1.750000 1.423880 +v 0.500000 1.750000 1.500000 +v 0.882683 1.750000 1.423880 +v 1.207107 1.750000 1.207107 +v 1.423880 1.750000 0.882684 +v 1.500000 1.750000 0.500000 +v 1.423879 1.750000 0.117316 +v 1.207107 1.750000 -0.207107 +v 0.882683 1.750000 -0.423880 +v 0.308658 2.250000 0.038060 +v 0.500000 2.250000 0.000000 +v 0.146447 2.250000 0.146447 +v 0.038060 2.250000 0.308659 +v -0.000000 2.250000 0.500000 +v 0.038060 2.250000 0.691342 +v 0.146447 2.250000 0.853553 +v 0.308658 2.250000 0.961940 +v 0.500000 2.250000 1.000000 +v 0.691342 2.250000 0.961940 +v 0.853553 2.250000 0.853554 +v 0.961940 2.250000 0.691342 +v 1.000000 2.250000 0.500000 +v 0.961940 2.250000 0.308658 +v 0.853553 2.250000 0.146446 +v 0.691341 2.250000 0.038060 +v 0.308658 2.750000 0.038060 +v 0.500000 2.750000 0.000000 +v 0.146446 2.750000 0.146447 +v 0.038060 2.750000 0.308659 +v -0.000000 2.750000 0.500000 +v 0.038060 2.750000 0.691342 +v 0.146446 2.750000 0.853553 +v 0.308658 2.750000 0.961940 +v 0.500000 2.750000 1.000000 +v 0.691341 2.750000 0.961940 +v 0.853553 2.750000 0.853554 +v 0.961940 2.750000 0.691342 +v 1.000000 2.750000 0.500000 +v 0.961940 2.750000 0.308658 +v 0.853553 2.750000 0.146446 +v 0.691341 2.750000 0.038060 +v 0.875000 2.750000 0.500000 +v 0.786612 2.713388 0.500000 +v 0.750000 2.625000 0.500000 +v 0.786612 2.536612 0.500000 +v 0.875000 2.500000 0.500000 +v 0.963388 2.536612 0.500000 +v 1.000000 2.625000 0.500000 +v 0.963388 2.713388 0.500000 +v 0.875000 2.750000 -1.000000 +v 0.786612 2.713388 -1.000000 +v 0.750000 2.625000 -1.000000 +v 0.786612 2.536612 -1.000000 +v 0.875000 2.500000 -1.000000 +v 0.963388 2.536612 -1.000000 +v 1.000000 2.625000 -1.000000 +v 0.963388 2.713388 -1.000000 +v 0.875000 2.676777 -1.176777 +v 0.786612 2.650888 -1.150888 +v 0.750000 2.588388 -1.088388 +v 0.786612 2.525888 -1.025888 +v 0.963388 2.525888 -1.025888 +v 1.000000 2.588388 -1.088388 +v 0.963388 2.650888 -1.150888 +v 0.875000 2.500000 -1.250000 +v 0.786612 2.500000 -1.213388 +v 0.750000 2.500000 -1.125000 +v 0.786612 2.500000 -1.036612 +v 0.963388 2.500000 -1.036612 +v 1.000000 2.500000 -1.125000 +v 0.963388 2.500000 -1.213388 +v 0.875000 2.000000 -1.000000 +v 0.875000 2.000000 -1.250000 +v 0.786612 2.000000 -1.213388 +v 0.750000 2.000000 -1.125000 +v 0.786612 2.000000 -1.036612 +v 0.963388 2.000000 -1.036612 +v 1.000000 2.000000 -1.125000 +v 0.963388 2.000000 -1.213388 +v 0.838388 1.911612 -1.000000 +v 0.838388 1.911612 -1.250000 +v 0.775888 1.974112 -1.213388 +v 0.775888 1.974112 -1.036612 +v 0.900888 1.849112 -1.036612 +v 0.926777 1.823223 -1.125000 +v 0.900888 1.849112 -1.213388 +v 0.750000 1.875000 -1.000000 +v 0.750000 1.875000 -1.250000 +v 0.750000 1.963388 -1.213388 +v 0.750000 1.963388 -1.036612 +v 0.750000 1.786612 -1.036612 +v 0.750000 1.750000 -1.125000 +v 0.750000 1.786612 -1.213388 +v 0.875000 2.500000 0.500000 +v 0.786612 2.463388 0.500000 +v 0.750000 2.375000 0.500000 +v 0.786612 2.286612 0.500000 +v 0.875000 2.250000 0.500000 +v 0.963388 2.286612 0.500000 +v 1.000000 2.375000 0.500000 +v 0.963388 2.463388 0.500000 +v 0.875000 2.500000 -0.750000 +v 0.786612 2.463388 -0.750000 +v 0.750000 2.375000 -0.750000 +v 0.786612 2.286612 -0.750000 +v 0.875000 2.250000 -0.750000 +v 0.963388 2.286612 -0.750000 +v 1.000000 2.375000 -0.750000 +v 0.963388 2.463388 -0.750000 +v 0.875000 2.426777 -0.926777 +v 0.786612 2.400888 -0.900888 +v 0.750000 2.338388 -0.838388 +v 0.786612 2.275888 -0.775888 +v 0.963388 2.275888 -0.775888 +v 1.000000 2.338388 -0.838388 +v 0.963388 2.400888 -0.900888 +v 0.875000 2.250000 -1.000000 +v 0.786612 2.250000 -0.963388 +v 0.750000 2.250000 -0.875000 +v 0.786612 2.250000 -0.786612 +v 0.963388 2.250000 -0.786612 +v 1.000000 2.250000 -0.875000 +v 0.963388 2.250000 -0.963388 +v 0.875000 2.000000 -0.750000 +v 0.875000 2.000000 -1.000000 +v 0.786612 2.000000 -0.963388 +v 0.750000 2.000000 -0.875000 +v 0.786612 2.000000 -0.786612 +v 0.963388 2.000000 -0.786612 +v 1.000000 2.000000 -0.875000 +v 0.963388 2.000000 -0.963388 +v 0.838388 1.911612 -0.750000 +v 0.838388 1.911612 -1.000000 +v 0.775888 1.974112 -0.963388 +v 0.775888 1.974112 -0.786612 +v 0.900888 1.849112 -0.786612 +v 0.926777 1.823223 -0.875000 +v 0.900888 1.849112 -0.963388 +v 0.750000 1.875000 -0.750000 +v 0.750000 1.875000 -1.000000 +v 0.750000 1.963388 -0.963388 +v 0.750000 1.963388 -0.786612 +v 0.750000 1.786612 -0.786612 +v 0.750000 1.750000 -0.875000 +v 0.750000 1.786612 -0.963388 +v -0.750000 2.750000 -0.125000 +v -0.750000 2.838388 -0.088388 +v -0.750000 2.875000 0.000000 +v -0.750000 2.838388 0.088388 +v -0.750000 2.750000 0.125000 +v -0.750000 2.661612 0.088388 +v -0.750000 2.625000 0.000000 +v -0.750000 2.661612 -0.088388 +v 0.375000 2.750000 -0.125000 +v 0.375000 2.838388 -0.088388 +v 0.375000 2.875000 0.000000 +v 0.375000 2.838388 0.088388 +v 0.375000 2.750000 0.125000 +v 0.375000 2.661612 0.088388 +v 0.375000 2.625000 0.000000 +v 0.375000 2.661612 -0.088388 +v 0.551777 2.750000 -0.051777 +v 0.525888 2.838388 -0.025888 +v 0.463388 2.875000 0.036612 +v 0.400888 2.838388 0.099112 +v 0.400888 2.661612 0.099112 +v 0.463388 2.625000 0.036612 +v 0.525888 2.661612 -0.025888 +v 0.625000 2.750000 0.125000 +v 0.588388 2.838388 0.125000 +v 0.500000 2.875000 0.125000 +v 0.411612 2.838388 0.125000 +v 0.411612 2.661612 0.125000 +v 0.500000 2.625000 0.125000 +v 0.588388 2.661612 0.125000 +v 0.356494 3.000000 0.153545 +v 0.500000 3.000000 0.125000 +v 0.234835 3.000000 0.234835 +v 0.153545 3.000000 0.356494 +v 0.125000 3.000000 0.500000 +v 0.153545 3.000000 0.643506 +v 0.234835 3.000000 0.765165 +v 0.356494 3.000000 0.846455 +v 0.500000 3.000000 0.875000 +v 0.643506 3.000000 0.846455 +v 0.765165 3.000000 0.765165 +v 0.846455 3.000000 0.643506 +v 0.875000 3.000000 0.500000 +v 0.846455 3.000000 0.356494 +v 0.765165 3.000000 0.234835 +v 0.643506 3.000000 0.153545 +v -0.750000 2.750000 1.125000 +v -0.750000 2.838388 1.088388 +v -0.750000 2.875000 1.000000 +v -0.750000 2.838388 0.911612 +v -0.750000 2.750000 0.875000 +v -0.750000 2.661612 0.911612 +v -0.750000 2.625000 1.000000 +v -0.750000 2.661612 1.088388 +v 0.375000 2.750000 1.125000 +v 0.375000 2.838388 1.088388 +v 0.375000 2.875000 1.000000 +v 0.375000 2.838388 0.911612 +v 0.375000 2.750000 0.875000 +v 0.375000 2.661612 0.911612 +v 0.375000 2.625000 1.000000 +v 0.375000 2.661612 1.088388 +v 0.551777 2.750000 1.051777 +v 0.525888 2.838388 1.025888 +v 0.463388 2.875000 0.963388 +v 0.400888 2.838388 0.900888 +v 0.400888 2.661612 0.900888 +v 0.463388 2.625000 0.963388 +v 0.525888 2.661612 1.025888 +v 0.625000 2.750000 0.875000 +v 0.588388 2.838388 0.875000 +v 0.500000 2.875000 0.875000 +v 0.411612 2.838388 0.875000 +v 0.411612 2.661612 0.875000 +v 0.500000 2.625000 0.875000 +v 0.588388 2.661612 0.875000 +v 0.500000 0.875000 -0.375000 +v 0.165152 0.875000 -0.308394 +v -0.118718 0.875000 -0.118718 +v -0.308395 0.875000 0.165152 +v -0.375000 0.875000 0.500000 +v -0.308395 0.875000 0.834848 +v -0.118718 0.875000 1.118718 +v 0.165152 0.875000 1.308394 +v 0.500000 0.875000 1.375000 +v 0.834848 0.875000 1.308394 +v 1.118718 0.875000 1.118719 +v 1.308395 0.875000 0.834848 +v 1.375000 0.875000 0.500000 +v 1.308394 0.875000 0.165152 +v 1.118718 0.875000 -0.118719 +v 0.834848 0.875000 -0.308395 +v 0.165152 1.625000 -0.308394 +v 0.500000 1.625000 -0.375000 +v -0.118718 1.625000 -0.118718 +v -0.308395 1.625000 0.165152 +v -0.375000 1.625000 0.500000 +v -0.308395 1.625000 0.834848 +v -0.118718 1.625000 1.118718 +v 0.165152 1.625000 1.308394 +v 0.500000 1.625000 1.375000 +v 0.834848 1.625000 1.308394 +v 1.118718 1.625000 1.118719 +v 1.308395 1.625000 0.834848 +v 1.375000 1.625000 0.500000 +v 1.308394 1.625000 0.165152 +v 1.118718 1.625000 -0.118719 +v 0.834848 1.625000 -0.308395 +v -0.207107 1.000000 1.207107 +v 0.117317 1.000000 1.423880 +v 0.500000 1.000000 1.500000 +v 0.882683 1.000000 1.423880 +v 1.207107 1.000000 1.207107 +v 1.423880 1.000000 0.882684 +v 1.500000 1.000000 0.500000 +v 1.423879 1.000000 0.117316 +v 1.207107 1.000000 -0.207107 +v -0.207107 1.500000 1.207107 +v 0.117317 1.500000 1.423880 +v 0.500000 1.500000 1.500000 +v 0.882683 1.500000 1.423880 +v 1.207107 1.500000 1.207107 +v 1.423880 1.500000 0.882684 +v 1.500000 1.500000 0.500000 +v 1.423879 1.500000 0.117316 +v 1.207107 1.500000 -0.207107 +v -0.118718 1.000000 1.118718 +v 0.165152 1.000000 1.308394 +v 0.500000 1.000000 1.375000 +v 0.834848 1.000000 1.308394 +v 1.118718 1.000000 1.118719 +v 1.308395 1.000000 0.834848 +v 1.375000 1.000000 0.500000 +v 1.308394 1.000000 0.165152 +v 1.118718 1.000000 -0.118719 +v -0.118718 1.500000 1.118718 +v 0.165152 1.500000 1.308394 +v 0.500000 1.500000 1.375000 +v 0.834848 1.500000 1.308394 +v 1.118718 1.500000 1.118719 +v 1.308395 1.500000 0.834848 +v 1.375000 1.500000 0.500000 +v 1.308394 1.500000 0.165152 +v 1.118718 1.500000 -0.118719 +v 1.250000 0.625000 -0.125000 +v 1.250000 0.375000 -0.125000 +v 1.250000 0.375000 0.125000 +v 1.250000 0.625000 0.125000 +v -0.207107 1.000000 1.207107 +v 0.117316 1.000000 1.423880 +v 0.500000 1.000000 1.500000 +v 0.882683 1.000000 1.423880 +v 1.207107 1.000000 1.207107 +v 1.423880 1.000000 0.882684 +v 1.500000 1.000000 0.500000 +v 1.423880 1.000000 0.117316 +v 1.207107 1.000000 -0.207107 +v -0.207107 1.500000 1.207107 +v 0.117316 1.500000 1.423880 +v 0.500000 1.500000 1.500000 +v 0.882683 1.500000 1.423880 +v 1.207107 1.500000 1.207107 +v 1.423880 1.500000 0.882684 +v 1.500000 1.500000 0.500000 +v 1.423880 1.500000 0.117316 +v 1.207107 1.500000 -0.207107 +v -0.125000 0.125000 1.500000 +v 0.125000 0.125000 1.500000 +v -0.125000 0.125000 -1.500000 +v 0.125000 0.125000 -1.500000 +v -0.125000 0.250000 -1.500000 +v -0.125000 0.250000 1.500000 +v 0.125000 0.250000 1.500000 +v 0.125000 0.250000 -1.500000 +v -1.125000 0.125000 1.500000 +v -0.875000 0.125000 1.500000 +v -1.125000 0.125000 -1.500000 +v -0.875000 0.125000 -1.500000 +v -1.125000 0.250000 -1.500000 +v -1.125000 0.250000 1.500000 +v -0.875000 0.250000 1.500000 +v -0.875000 0.250000 -1.500000 +v 1.500000 0.312500 -1.187500 +v 1.500000 0.312500 -0.812500 +v 1.500000 0.687500 -1.187500 +v 1.500000 0.687500 -0.812500 +v 1.375000 0.375000 -1.125000 +v 1.375000 0.375000 -0.875000 +v 1.375000 0.625000 -1.125000 +v 1.375000 0.625000 -0.875000 +v 1.375000 0.687500 -1.187500 +v 1.375000 0.312500 -1.187500 +v 1.375000 0.312500 -0.812500 +v 1.375000 0.687500 -0.812500 +v 1.250000 0.625000 -1.125000 +v 1.250000 0.375000 -1.125000 +v 1.250000 0.375000 -0.875000 +v 1.250000 0.625000 -0.875000 +v 1.500000 0.312500 0.812500 +v 1.500000 0.312500 1.187500 +v 1.500000 0.687500 0.812500 +v 1.500000 0.687500 1.187500 +v 1.375000 0.375000 0.875000 +v 1.375000 0.375000 1.125000 +v 1.375000 0.625000 0.875000 +v 1.375000 0.625000 1.125000 +v 1.375000 0.687500 0.812500 +v 1.375000 0.312500 0.812500 +v 1.375000 0.312500 1.187500 +v 1.375000 0.687500 1.187500 +v 1.250000 0.625000 0.875000 +v 1.250000 0.375000 0.875000 +v 1.250000 0.375000 1.125000 +v 1.250000 0.625000 1.125000 +v -1.500000 0.312500 0.187500 +v -1.500000 0.312500 -0.187500 +v -1.500000 0.687500 0.187500 +v -1.500000 0.687500 -0.187500 +v -1.375000 0.375000 0.125000 +v -1.375000 0.375000 -0.125000 +v -1.375000 0.625000 0.125000 +v -1.375000 0.625000 -0.125000 +v -1.375000 0.687500 0.187500 +v -1.375000 0.312500 0.187500 +v -1.375000 0.312500 -0.187500 +v -1.375000 0.687500 -0.187500 +v -1.250000 0.625000 0.125000 +v -1.250000 0.375000 0.125000 +v -1.250000 0.375000 -0.125000 +v -1.250000 0.625000 -0.125000 +v -1.500000 0.312500 1.187500 +v -1.500000 0.312500 0.812500 +v -1.500000 0.687500 1.187500 +v -1.500000 0.687500 0.812500 +v -1.375000 0.375000 1.125000 +v -1.375000 0.375000 0.875000 +v -1.375000 0.625000 1.125000 +v -1.375000 0.625000 0.875000 +v -1.375000 0.687500 1.187500 +v -1.375000 0.312500 1.187500 +v -1.375000 0.312500 0.812500 +v -1.375000 0.687500 0.812500 +v -1.250000 0.625000 1.125000 +v -1.250000 0.375000 1.125000 +v -1.250000 0.375000 0.875000 +v -1.250000 0.625000 0.875000 +v -1.500000 0.312500 -0.812500 +v -1.500000 0.312500 -1.187500 +v -1.500000 0.687500 -0.812500 +v -1.500000 0.687500 -1.187500 +v -1.375000 0.375000 -0.875000 +v -1.375000 0.375000 -1.125000 +v -1.375000 0.625000 -0.875000 +v -1.375000 0.625000 -1.125000 +v -1.375000 0.687500 -0.812500 +v -1.375000 0.312500 -0.812500 +v -1.375000 0.312500 -1.187500 +v -1.375000 0.687500 -1.187500 +v -1.250000 0.625000 -0.875000 +v -1.250000 0.375000 -0.875000 +v -1.250000 0.375000 -1.125000 +v -1.250000 0.625000 -1.125000 +v -0.187500 0.312500 -1.500000 +v 0.187500 0.312500 -1.500000 +v -0.187500 0.687500 -1.500000 +v 0.187500 0.687500 -1.500000 +v -0.125000 0.375000 -1.375000 +v 0.125000 0.375000 -1.375000 +v -0.125000 0.625000 -1.375000 +v 0.125000 0.625000 -1.375000 +v -0.187500 0.687500 -1.375000 +v -0.187500 0.312500 -1.375000 +v 0.187500 0.312500 -1.375000 +v 0.187500 0.687500 -1.375000 +v -0.125000 0.625000 -1.250000 +v -0.125000 0.375000 -1.250000 +v 0.125000 0.375000 -1.250000 +v 0.125000 0.625000 -1.250000 +v -1.187500 0.312500 -1.500000 +v -0.812500 0.312500 -1.500000 +v -1.187500 0.687500 -1.500000 +v -0.812500 0.687500 -1.500000 +v -1.125000 0.375000 -1.375000 +v -0.875000 0.375000 -1.375000 +v -1.125000 0.625000 -1.375000 +v -0.875000 0.625000 -1.375000 +v -1.187500 0.687500 -1.375000 +v -1.187500 0.312500 -1.375000 +v -0.812500 0.312500 -1.375000 +v -0.812500 0.687500 -1.375000 +v -1.125000 0.625000 -1.250000 +v -1.125000 0.375000 -1.250000 +v -0.875000 0.375000 -1.250000 +v -0.875000 0.625000 -1.250000 +v 0.812500 0.312500 -1.500000 +v 1.187500 0.312500 -1.500000 +v 0.812500 0.687500 -1.500000 +v 1.187500 0.687500 -1.500000 +v 0.875000 0.375000 -1.375000 +v 1.125000 0.375000 -1.375000 +v 0.875000 0.625000 -1.375000 +v 1.125000 0.625000 -1.375000 +v 0.812500 0.687500 -1.375000 +v 0.812500 0.312500 -1.375000 +v 1.187500 0.312500 -1.375000 +v 1.187500 0.687500 -1.375000 +v 0.875000 0.625000 -1.250000 +v 0.875000 0.375000 -1.250000 +v 1.125000 0.375000 -1.250000 +v 1.125000 0.625000 -1.250000 +v 0.187500 0.312500 1.500000 +v -0.187500 0.312500 1.500000 +v 0.187500 0.687500 1.500000 +v -0.187500 0.687500 1.500000 +v 0.125000 0.375000 1.375000 +v -0.125000 0.375000 1.375000 +v 0.125000 0.625000 1.375000 +v -0.125000 0.625000 1.375000 +v 0.187500 0.687500 1.375000 +v 0.187500 0.312500 1.375000 +v -0.187500 0.312500 1.375000 +v -0.187500 0.687500 1.375000 +v 0.125000 0.625000 1.250000 +v 0.125000 0.375000 1.250000 +v -0.125000 0.375000 1.250000 +v -0.125000 0.625000 1.250000 +v 1.187500 0.312500 1.500000 +v 0.812500 0.312500 1.500000 +v 1.187500 0.687500 1.500000 +v 0.812500 0.687500 1.500000 +v 1.125000 0.375000 1.375000 +v 0.875000 0.375000 1.375000 +v 1.125000 0.625000 1.375000 +v 0.875000 0.625000 1.375000 +v 1.187500 0.687500 1.375000 +v 1.187500 0.312500 1.375000 +v 0.812500 0.312500 1.375000 +v 0.812500 0.687500 1.375000 +v 1.125000 0.625000 1.250000 +v 1.125000 0.375000 1.250000 +v 0.875000 0.375000 1.250000 +v 0.875000 0.625000 1.250000 +v -0.812500 0.312500 1.500000 +v -1.187500 0.312500 1.500000 +v -0.812500 0.687500 1.500000 +v -1.187500 0.687500 1.500000 +v -0.875000 0.375000 1.375000 +v -1.125000 0.375000 1.375000 +v -0.875000 0.625000 1.375000 +v -1.125000 0.625000 1.375000 +v -0.812500 0.687500 1.375000 +v -0.812500 0.312500 1.375000 +v -1.187500 0.312500 1.375000 +v -1.187500 0.687500 1.375000 +v -0.875000 0.625000 1.250000 +v -0.875000 0.375000 1.250000 +v -1.125000 0.375000 1.250000 +v -1.125000 0.625000 1.250000 +vt 0.394231 0.714286 +vt 0.375000 0.742857 +vt 0.375000 0.714286 +vt 0.375000 0.771429 +vt 0.394231 0.800000 +vt 0.375000 0.800000 +vt 0.432692 0.742857 +vt 0.413462 0.771429 +vt 0.413462 0.742857 +vt 0.451923 0.742857 +vt 0.432692 0.771429 +vt 0.394231 0.742857 +vt 0.394231 0.771429 +vt 0.394231 0.714286 +vt 0.375000 0.742857 +vt 0.375000 0.714286 +vt 0.375000 0.771429 +vt 0.394231 0.800000 +vt 0.375000 0.800000 +vt 0.432692 0.742857 +vt 0.413462 0.771429 +vt 0.413462 0.742857 +vt 0.451923 0.742857 +vt 0.432692 0.771429 +vt 0.394231 0.742857 +vt 0.394231 0.771429 +vt 0.394231 0.714286 +vt 0.375000 0.742857 +vt 0.375000 0.714286 +vt 0.375000 0.771429 +vt 0.394231 0.800000 +vt 0.375000 0.800000 +vt 0.432692 0.742857 +vt 0.413462 0.771429 +vt 0.413462 0.742857 +vt 0.451923 0.742857 +vt 0.432692 0.771429 +vt 0.394231 0.742857 +vt 0.394231 0.771429 +vt 0.394231 0.714286 +vt 0.375000 0.742857 +vt 0.375000 0.714286 +vt 0.375000 0.771429 +vt 0.394231 0.800000 +vt 0.375000 0.800000 +vt 0.432692 0.742857 +vt 0.413462 0.771429 +vt 0.413462 0.742857 +vt 0.451923 0.742857 +vt 0.432692 0.771429 +vt 0.394231 0.742857 +vt 0.394231 0.771429 +vt 0.250000 0.828571 +vt 0.442308 0.814286 +vt 0.442308 0.828571 +vt 0.250000 0.842857 +vt 0.250000 0.814286 +vt 0.442308 0.800000 +vt 0.442308 0.857143 +vt 0.250000 0.857143 +vt 0.442308 0.814286 +vt 0.250000 0.828571 +vt 0.250000 0.814286 +vt 0.442308 0.800000 +vt 0.442308 0.828571 +vt 0.250000 0.842857 +vt 0.442308 0.857143 +vt 0.442308 0.842857 +vt 0.250000 0.828571 +vt 0.442308 0.814286 +vt 0.442308 0.828571 +vt 0.250000 0.842857 +vt 0.250000 0.814286 +vt 0.442308 0.800000 +vt 0.442308 0.857143 +vt 0.250000 0.857143 +vt 0.442308 0.814286 +vt 0.250000 0.828571 +vt 0.250000 0.814286 +vt 0.442308 0.800000 +vt 0.442308 0.828571 +vt 0.250000 0.842857 +vt 0.442308 0.857143 +vt 0.442308 0.842857 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.076917 0.257143 +vt 0.096151 0.207648 +vt 0.134618 0.207648 +vt 0.019228 0.306638 +vt -0.000006 0.257143 +vt 0.019228 0.207648 +vt 0.307686 0.257143 +vt 0.326920 0.207648 +vt 0.365388 0.207648 +vt 0.249997 0.306638 +vt 0.230763 0.257143 +vt 0.249997 0.207648 +vt 0.730769 0.114286 +vt 0.538462 -0.000000 +vt 0.730769 -0.000000 +vt 0.730769 0.200000 +vt 0.557692 0.228571 +vt 0.538462 0.200000 +vt 0.538462 0.114286 +vt 1.000000 0.114286 +vt 0.807692 0.200000 +vt 0.807692 0.114286 +vt 0.461538 0.200000 +vt 0.461538 0.114286 +vt 0.557692 0.342857 +vt 0.711538 0.228571 +vt 0.711538 0.342857 +vt 1.000000 0.200000 +vt 0.826923 0.228571 +vt 0.461538 0.228571 +vt 0.730769 0.228571 +vt 0.653846 0.657143 +vt 0.615385 0.714286 +vt 0.615385 0.657143 +vt 0.576923 0.657143 +vt 0.538462 0.714286 +vt 0.538462 0.657143 +vt 0.692308 0.657143 +vt 0.653846 0.714286 +vt 0.576923 0.714286 +vt 0.615385 0.771429 +vt 0.653846 0.771429 +vt 0.615385 0.828571 +vt 0.615385 0.771429 +vt 0.576923 0.771429 +vt 0.538462 0.828571 +vt 0.538462 0.771429 +vt 0.692308 0.771429 +vt 0.653846 0.828571 +vt 0.576923 0.828571 +vt 0.615385 0.885714 +vt 1.000000 0.771429 +vt 0.961538 0.485714 +vt 1.000000 0.485714 +vt 0.884615 0.485714 +vt 0.923077 0.771429 +vt 0.884615 0.771429 +vt 0.923077 0.828571 +vt 0.961538 0.771429 +vt 0.961538 0.828571 +vt 0.961538 0.428571 +vt 0.923077 0.485714 +vt 0.923077 0.428571 +vt 0.750000 0.035714 +vt 0.846154 0.028571 +vt 0.846154 0.035714 +vt 0.730769 0.342857 +vt 0.846154 0.257143 +vt 0.846154 0.342857 +vt 0.711538 0.257143 +vt 0.711538 0.342857 +vt 0.865385 0.342857 +vt 0.865385 0.257143 +vt 0.846154 0.228571 +vt 0.730769 0.257143 +vt 0.730769 0.228571 +vt 0.730769 0.371429 +vt 0.846154 0.371429 +vt 0.750000 0.035714 +vt 0.846154 0.028571 +vt 0.846154 0.035714 +vt 0.846154 -0.000000 +vt 0.750000 0.028571 +vt 0.750000 -0.000000 +vt 0.750000 0.064286 +vt 0.846154 0.064286 +vt 0.730769 0.028571 +vt 0.730769 0.035714 +vt 0.865385 0.035714 +vt 0.865385 0.028571 +vt 0.846154 -0.000000 +vt 0.750000 0.028571 +vt 0.750000 -0.000000 +vt 0.750000 0.064286 +vt 0.846154 0.064286 +vt 0.730769 0.028571 +vt 0.730769 0.035714 +vt 0.865385 0.035714 +vt 0.865385 0.028571 +vt 0.750000 0.035714 +vt 0.846154 0.028571 +vt 0.846154 0.035714 +vt 0.846154 -0.000000 +vt 0.750000 0.028571 +vt 0.750000 -0.000000 +vt 0.750000 0.064286 +vt 0.846154 0.064286 +vt 0.730769 0.028571 +vt 0.730769 0.035714 +vt 0.865385 0.035714 +vt 0.865385 0.028571 +vt 0.750000 0.035714 +vt 0.846154 0.028571 +vt 0.846154 0.035714 +vt 0.846154 -0.000000 +vt 0.750000 0.028571 +vt 0.750000 -0.000000 +vt 0.750000 0.064286 +vt 0.846154 0.064286 +vt 0.730769 0.028571 +vt 0.730769 0.035714 +vt 0.865385 0.035714 +vt 0.865385 0.028571 +vt 0.750000 0.035714 +vt 0.846154 0.028571 +vt 0.846154 0.035714 +vt 0.846154 -0.000000 +vt 0.750000 0.028571 +vt 0.750000 -0.000000 +vt 0.750000 0.064286 +vt 0.846154 0.064286 +vt 0.730769 0.028571 +vt 0.730769 0.035714 +vt 0.865385 0.035714 +vt 0.865385 0.028571 +vt 0.403846 0.314286 +vt 0.442308 0.285714 +vt 0.442308 0.314286 +vt 0.403846 0.314286 +vt 0.442308 0.285714 +vt 0.442308 0.314286 +vt 0.461538 0.228571 +vt 0.442308 0.228571 +vt 0.403846 0.285714 +vt 0.403846 0.228571 +vt 0.500000 0.228571 +vt 0.461538 0.285714 +vt 0.384615 0.285714 +vt 0.384615 0.228571 +vt 0.461538 0.228571 +vt 0.442308 0.228571 +vt 0.403846 0.285714 +vt 0.403846 0.228571 +vt 0.500000 0.228571 +vt 0.461538 0.285714 +vt 0.384615 0.285714 +vt 0.384615 0.228571 +vt 0.240385 0.800000 +vt 0.009615 0.828571 +vt 0.009615 0.800000 +vt 0.009615 0.842857 +vt 0.240385 0.871429 +vt 0.009615 0.871429 +vt 0.250000 0.871429 +vt 0.240385 0.842857 +vt 0.250000 0.842857 +vt 0.000000 0.842857 +vt 0.000000 0.871429 +vt 0.240385 0.828571 +vt 0.009615 0.885714 +vt 0.240385 0.885714 +vt 0.846154 0.428571 +vt 0.730769 0.600000 +vt 0.730769 0.428571 +vt 0.730769 0.657143 +vt 0.846154 0.828571 +vt 0.730769 0.828571 +vt 0.692308 0.657143 +vt 0.692308 0.828571 +vt 0.846154 0.600000 +vt 0.730769 0.885714 +vt 0.846154 0.885714 +vt 0.884615 0.828571 +vt 0.846154 0.657143 +vt 0.884615 0.657143 +vt 0.131284 0.709336 +vt 0.022562 0.709336 +vt 0.022563 0.547807 +vt 0.413462 0.714212 +vt 0.384665 0.671429 +vt 0.413461 0.628646 +vt 0.711050 0.372155 +vt 0.730761 0.442857 +vt 0.596162 0.442857 +vt 0.481258 0.513559 +vt 0.481258 0.372155 +vt 0.576434 0.372155 +vt 0.259615 0.385714 +vt 0.288462 0.400000 +vt 0.259615 0.400000 +vt 0.230769 0.385714 +vt 0.230769 0.400000 +vt 0.201923 0.400000 +vt 0.173077 0.400000 +vt 0.201923 0.385714 +vt 0.144231 0.385714 +vt 0.144231 0.400000 +vt 0.115385 0.385714 +vt 0.115385 0.400000 +vt 0.086538 0.400000 +vt 0.057692 0.400000 +vt 0.086538 0.385714 +vt 0.057692 0.342857 +vt 0.086538 0.357143 +vt 0.057692 0.357143 +vt 0.557692 0.557143 +vt 0.548077 0.614286 +vt 0.548077 0.557143 +vt 0.086538 0.342857 +vt 0.115385 0.357143 +vt 0.144231 0.342857 +vt 0.115385 0.342857 +vt 0.173077 0.342857 +vt 0.144231 0.357143 +vt 0.201923 0.357143 +vt 0.173077 0.357143 +vt 0.201923 0.342857 +vt 0.230769 0.357143 +vt 0.259615 0.342857 +vt 0.230769 0.342857 +vt 0.288462 0.342857 +vt 0.259615 0.357143 +vt 0.336538 0.614286 +vt 0.326923 0.557143 +vt 0.336538 0.557143 +vt 0.730769 0.585714 +vt 0.682692 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.240385 0.800000 +vt 0.009615 0.828571 +vt 0.009615 0.800000 +vt 0.009615 0.842857 +vt 0.240385 0.871429 +vt 0.009615 0.871429 +vt 0.250000 0.871429 +vt 0.240385 0.842857 +vt 0.250000 0.842857 +vt 0.000000 0.842857 +vt 0.000000 0.871429 +vt 0.240385 0.828571 +vt 0.009615 0.885714 +vt 0.240385 0.885714 +vt 0.240385 0.800000 +vt 0.009615 0.828571 +vt 0.009615 0.800000 +vt 0.009615 0.842857 +vt 0.240385 0.871429 +vt 0.009615 0.871429 +vt 0.250000 0.871429 +vt 0.240385 0.842857 +vt 0.250000 0.842857 +vt 0.000000 0.842857 +vt 0.000000 0.871429 +vt 0.240385 0.828571 +vt 0.009615 0.885714 +vt 0.240385 0.885714 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.682692 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.682692 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.682692 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.682692 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.682692 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.682692 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.682692 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.701923 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.701923 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.635714 +vt 0.677885 0.621429 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.706731 0.635714 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.682692 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.706731 0.621429 +vt 0.677885 0.578571 +vt 0.706731 0.578571 +vt 0.716346 0.621429 +vt 0.677885 0.621429 +vt 0.706731 0.635714 +vt 0.677885 0.635714 +vt 0.706731 0.564286 +vt 0.668269 0.578571 +vt 0.721154 0.614286 +vt 0.716346 0.578571 +vt 0.721154 0.585714 +vt 0.701923 0.557143 +vt 0.677885 0.564286 +vt 0.682692 0.557143 +vt 0.663462 0.585714 +vt 0.668269 0.621429 +vt 0.663462 0.614286 +vt 0.682692 0.642857 +vt 0.701923 0.642857 +vt 0.730769 0.585714 +vt 0.701923 0.542857 +vt 0.653846 0.614286 +vt 0.701923 0.657143 +vt 0.451923 0.771429 +vt 0.451923 0.771429 +vt 0.451923 0.771429 +vt 0.451923 0.771429 +vt 0.442308 0.842857 +vt 0.250000 0.800000 +vt 0.250000 0.800000 +vt 0.250000 0.857143 +vt 0.442308 0.842857 +vt 0.250000 0.800000 +vt 0.250000 0.800000 +vt 0.250000 0.857143 +vt 0.148699 0.228567 +vt 0.153852 0.257143 +vt 0.148699 0.285719 +vt 0.134618 0.306638 +vt 0.115385 0.314295 +vt 0.096151 0.306638 +vt 0.082071 0.285719 +vt 0.082071 0.228567 +vt 0.115385 0.199991 +vt 0.076929 0.257143 +vt 0.071776 0.285719 +vt 0.057695 0.306638 +vt 0.038461 0.314295 +vt 0.005148 0.285719 +vt 0.005148 0.228567 +vt 0.038461 0.199991 +vt 0.057695 0.207648 +vt 0.071775 0.228567 +vt 0.379468 0.228567 +vt 0.384622 0.257143 +vt 0.379468 0.285719 +vt 0.365388 0.306638 +vt 0.346154 0.314295 +vt 0.326920 0.306638 +vt 0.312840 0.285719 +vt 0.312840 0.228567 +vt 0.346154 0.199991 +vt 0.307698 0.257143 +vt 0.302545 0.285719 +vt 0.288465 0.306638 +vt 0.269231 0.314295 +vt 0.235917 0.285719 +vt 0.235917 0.228567 +vt 0.269231 0.199991 +vt 0.288465 0.207648 +vt 0.302545 0.228567 +vt 0.980769 0.228571 +vt 0.538462 0.228571 +vt 0.807692 0.228571 +vt 0.692308 0.714286 +vt 0.653846 0.771429 +vt 0.692308 0.828571 +vt 0.653846 0.885714 +vt 0.500000 0.285714 +vt 0.500000 0.285714 +vt 0.131284 0.547807 +vt 0.147949 0.584862 +vt 0.153801 0.628571 +vt 0.147949 0.672281 +vt 0.106343 0.734095 +vt 0.076923 0.742790 +vt 0.047503 0.734095 +vt 0.005898 0.672281 +vt 0.000046 0.628572 +vt 0.005898 0.584862 +vt 0.047503 0.523048 +vt 0.076923 0.514353 +vt 0.106343 0.523048 +vt 0.442258 0.671428 +vt 0.440066 0.687801 +vt 0.433824 0.701681 +vt 0.424481 0.710955 +vt 0.402442 0.710955 +vt 0.393099 0.701681 +vt 0.386857 0.687801 +vt 0.386857 0.655056 +vt 0.393099 0.641176 +vt 0.402442 0.631902 +vt 0.424481 0.631902 +vt 0.433823 0.641176 +vt 0.440066 0.655056 +vt 0.725639 0.481121 +vt 0.711050 0.513560 +vt 0.689216 0.535234 +vt 0.663462 0.542845 +vt 0.637707 0.535234 +vt 0.615874 0.513559 +vt 0.601285 0.481121 +vt 0.601285 0.404593 +vt 0.663462 0.342869 +vt 0.615874 0.372155 +vt 0.637707 0.350480 +vt 0.689216 0.350480 +vt 0.725639 0.404593 +vt 0.591023 0.404593 +vt 0.576434 0.513559 +vt 0.596146 0.442857 +vt 0.591023 0.481121 +vt 0.554601 0.535234 +vt 0.528846 0.542845 +vt 0.503092 0.535234 +vt 0.466669 0.481121 +vt 0.461547 0.442857 +vt 0.466669 0.404593 +vt 0.503092 0.350480 +vt 0.528846 0.342869 +vt 0.554601 0.350480 +vt 0.288462 0.385714 +vt 0.173077 0.385714 +vt 0.057692 0.385714 +vt 0.557692 0.614286 +vt 0.288462 0.357143 +vt 0.326923 0.614286 +vt 0.730769 0.614286 +vt 0.701923 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.701923 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.701923 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.701923 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.701923 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.701923 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.701923 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.701923 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.682692 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.682692 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.701923 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.730769 0.614286 +vt 0.682692 0.542857 +vt 0.653846 0.585714 +vt 0.682692 0.657143 +vt 0.115385 0.000000 +vt 0.096154 0.200000 +vt 0.096154 0.000000 +vt 0.000000 0.000000 +vt 0.019231 0.200000 +vt 0.000000 0.200000 +vt 0.192308 0.000000 +vt 0.173077 0.200000 +vt 0.173077 0.000000 +vt 0.134615 0.000000 +vt 0.115385 0.200000 +vt 0.019231 0.000000 +vt 0.038462 0.200000 +vt 0.076923 0.000000 +vt 0.057692 0.200000 +vt 0.057692 0.000000 +vt 0.211538 0.000000 +vt 0.192308 0.200000 +vt 0.153846 0.000000 +vt 0.134615 0.200000 +vt 0.038462 0.000000 +vt 0.076923 0.200000 +vt 0.230769 0.000000 +vt 0.211538 0.200000 +vt 0.153846 0.200000 +vt 0.346154 0.000000 +vt 0.326923 0.200000 +vt 0.326923 0.000000 +vt 0.250000 0.000000 +vt 0.230769 0.200000 +vt 0.230769 0.000000 +vt 0.423077 0.000000 +vt 0.403846 0.200000 +vt 0.403846 0.000000 +vt 0.365385 0.000000 +vt 0.346154 0.200000 +vt 0.269231 0.000000 +vt 0.250000 0.200000 +vt 0.288462 0.000000 +vt 0.307692 0.200000 +vt 0.288462 0.200000 +vt 0.442308 0.000000 +vt 0.423077 0.200000 +vt 0.384615 0.000000 +vt 0.365385 0.200000 +vt 0.269231 0.200000 +vt 0.307692 0.000000 +vt 0.461538 0.200000 +vt 0.442308 0.200000 +vt 0.384615 0.200000 +vt 0.163462 0.914286 +vt 0.115385 0.928571 +vt 0.115385 0.914286 +vt 0.163462 0.957143 +vt 0.115385 0.971429 +vt 0.115385 0.957143 +vt 0.000000 0.942857 +vt 0.057692 0.928571 +vt 0.057692 0.942857 +vt 0.163462 0.942857 +vt 0.177885 0.957143 +vt 0.057692 0.957143 +vt 0.115385 0.942857 +vt 0.115385 0.957143 +vt 0.000000 0.928571 +vt 0.057692 0.914286 +vt 0.163462 0.971429 +vt 0.115385 0.985714 +vt 0.057692 0.971429 +vt 0.115385 0.971429 +vt 0.000000 0.914286 +vt 0.057692 0.900000 +vt 0.115385 0.942857 +vt 0.057692 0.985714 +vt 0.115385 0.985714 +vt 0.000000 0.900000 +vt 0.057692 0.885714 +vt 0.163462 0.928571 +vt 0.115385 1.000000 +vt 0.000000 1.000000 +vt 0.057692 0.985714 +vt 0.057692 1.000000 +vt 0.163462 0.900000 +vt 0.115385 0.900000 +vt 0.057692 0.900000 +vt 0.115385 0.885714 +vt 0.115385 0.900000 +vt 0.000000 0.985714 +vt 0.057692 0.971429 +vt 0.057692 0.928571 +vt 0.115385 0.914286 +vt 0.115385 0.928571 +vt 0.057692 0.914286 +vt 0.000000 0.971429 +vt 0.057692 0.957143 +vt 0.163462 0.885714 +vt 0.115385 0.885714 +vt 0.163462 0.985714 +vt 0.115385 1.000000 +vt 0.057692 0.942857 +vt 0.168269 0.971429 +vt 0.177885 0.985714 +vt 0.173077 0.985714 +vt 0.177885 0.914286 +vt 0.177885 0.928571 +vt 0.177885 0.971429 +vt 0.168269 0.914286 +vt 0.177885 0.900000 +vt 0.177885 0.942857 +vt 0.192308 0.957143 +vt 0.187500 0.971429 +vt 0.187500 0.914286 +vt 0.192308 0.942857 +vt 0.182692 0.985714 +vt 0.192308 0.928571 +vt 0.177885 0.885714 +vt 0.173077 0.900000 +vt 0.182692 0.900000 +vt 0.177885 1.000000 +vt 0.192308 0.900000 +vt 0.240385 0.914286 +vt 0.192308 0.914286 +vt 0.240385 0.942857 +vt 0.192308 0.985714 +vt 0.240385 1.000000 +vt 0.192308 1.000000 +vt 0.240385 0.957143 +vt 0.192308 0.885714 +vt 0.240385 0.900000 +vt 0.192308 0.971429 +vt 0.240385 0.985714 +vt 0.240385 0.928571 +vt 0.240385 0.971429 +vt 0.254808 1.000000 +vt 0.245192 1.000000 +vt 0.254808 0.942857 +vt 0.254808 0.957143 +vt 0.254808 0.985714 +vt 0.245192 0.885714 +vt 0.254808 0.900000 +vt 0.250000 0.900000 +vt 0.254808 0.971429 +vt 0.245192 0.942857 +vt 0.254808 0.928571 +vt 0.269231 0.971429 +vt 0.264423 0.942857 +vt 0.269231 0.985714 +vt 0.264423 1.000000 +vt 0.269231 0.957143 +vt 0.264423 0.885714 +vt 0.259615 0.900000 +vt 0.254808 0.914286 +vt 0.250000 0.928571 +vt 0.259615 0.928571 +vt 0.336538 0.914286 +vt 0.269231 0.928571 +vt 0.269231 0.914286 +vt 0.336538 0.957143 +vt 0.269231 0.971429 +vt 0.269231 0.957143 +vt 0.336538 0.942857 +vt 0.350962 0.957143 +vt 0.336538 0.971429 +vt 0.269231 0.985714 +vt 0.269231 0.942857 +vt 0.336538 0.928571 +vt 0.336538 0.900000 +vt 0.269231 0.900000 +vt 0.336538 0.885714 +vt 0.269231 0.885714 +vt 0.336538 0.985714 +vt 0.269231 1.000000 +vt 0.341346 0.971429 +vt 0.350962 0.985714 +vt 0.346154 0.985714 +vt 0.341346 0.914286 +vt 0.350962 0.928571 +vt 0.350962 0.971429 +vt 0.350962 0.900000 +vt 0.350962 0.914286 +vt 0.350962 0.942857 +vt 0.365385 0.957143 +vt 0.360577 0.971429 +vt 0.360577 0.914286 +vt 0.365385 0.928571 +vt 0.365385 0.942857 +vt 0.355769 0.985714 +vt 0.350962 0.885714 +vt 0.346154 0.900000 +vt 0.355769 0.900000 +vt 0.350962 1.000000 +vt 0.365385 0.900000 +vt 0.413462 0.914286 +vt 0.365385 0.914286 +vt 0.413462 0.942857 +vt 0.365385 0.985714 +vt 0.413462 1.000000 +vt 0.365385 1.000000 +vt 0.413462 0.957143 +vt 0.365385 0.885714 +vt 0.413462 0.900000 +vt 0.365385 0.971429 +vt 0.413462 0.985714 +vt 0.413462 0.928571 +vt 0.413462 0.971429 +vt 0.418269 1.000000 +vt 0.427885 0.985714 +vt 0.427885 1.000000 +vt 0.418269 0.942857 +vt 0.427885 0.957143 +vt 0.427885 0.971429 +vt 0.418269 0.885714 +vt 0.427885 0.900000 +vt 0.423077 0.900000 +vt 0.427885 0.928571 +vt 0.427885 0.942857 +vt 0.442308 0.957143 +vt 0.442308 0.971429 +vt 0.437500 0.942857 +vt 0.442308 0.985714 +vt 0.437500 1.000000 +vt 0.437500 0.885714 +vt 0.432692 0.900000 +vt 0.427885 0.914286 +vt 0.423077 0.928571 +vt 0.432692 0.928571 +vt 0.442308 0.885714 +vt 0.461538 0.900000 +vt 0.442308 0.900000 +vt 0.461538 0.971429 +vt 0.442308 0.928571 +vt 0.461538 0.942857 +vt 0.442308 0.942857 +vt 0.461538 0.914286 +vt 0.442308 0.914286 +vt 0.461538 1.000000 +vt 0.442308 1.000000 +vt 0.461538 0.928571 +vt 0.461538 0.957143 +vt 0.461538 0.985714 +vt 0.230769 0.428571 +vt 0.206731 0.514286 +vt 0.201923 0.428571 +vt 0.432692 0.314286 +vt 0.403846 0.428571 +vt 0.403846 0.314286 +vt 0.461538 0.314286 +vt 0.432692 0.428571 +vt 0.028846 0.314286 +vt 0.000000 0.428571 +vt -0.000000 0.314286 +vt 0.028846 0.428571 +vt 0.317308 0.428571 +vt 0.375000 0.314286 +vt 0.346154 0.428571 +vt 0.346154 0.314286 +vt 0.317308 0.314286 +vt 0.375000 0.428571 +vt 0.355769 0.628571 +vt 0.341346 0.685714 +vt 0.341346 0.628571 +vt 0.004808 0.514286 +vt 0.259615 0.428571 +vt 0.235577 0.514286 +vt 0.057692 0.428571 +vt 0.033654 0.514286 +vt 0.288462 0.428571 +vt 0.264423 0.514286 +vt 0.086538 0.428571 +vt 0.062500 0.514286 +vt 0.293269 0.514286 +vt 0.115385 0.428571 +vt 0.091346 0.514286 +vt 0.350962 0.514286 +vt 0.322115 0.514286 +vt 0.134615 0.514286 +vt 0.120192 0.514286 +vt 0.379808 0.514286 +vt 0.144231 0.428571 +vt 0.163462 0.514286 +vt 0.149038 0.514286 +vt 0.408654 0.514286 +vt 0.173077 0.428571 +vt 0.192308 0.514286 +vt 0.177885 0.514286 +vt 0.461538 0.428571 +vt 0.437500 0.514286 +vt 0.197115 0.685714 +vt 0.182692 0.714286 +vt 0.182692 0.685714 +vt 0.225962 0.628571 +vt 0.240385 0.685714 +vt 0.225962 0.685714 +vt 0.370192 0.628571 +vt 0.355769 0.685714 +vt 0.254808 0.628571 +vt 0.240385 0.628571 +vt 0.384615 0.628571 +vt 0.370192 0.685714 +vt 0.269231 0.628571 +vt 0.254808 0.685714 +vt 0.168269 0.628571 +vt 0.153846 0.685714 +vt 0.153846 0.628571 +vt 0.283654 0.628571 +vt 0.269231 0.685714 +vt 0.182692 0.628571 +vt 0.168269 0.685714 +vt 0.298077 0.628571 +vt 0.283654 0.685714 +vt 0.197115 0.628571 +vt 0.312500 0.628571 +vt 0.298077 0.685714 +vt 0.211538 0.628571 +vt 0.326923 0.685714 +vt 0.326923 0.628571 +vt 0.312500 0.685714 +vt 0.211538 0.685714 +vt 0.634615 0.957143 +vt 0.750000 0.971429 +vt 0.634615 0.971429 +vt 0.634615 0.914286 +vt 0.750000 0.928571 +vt 0.634615 0.928571 +vt 0.764423 0.928571 +vt 0.750000 0.942857 +vt 0.634615 0.900000 +vt 0.750000 0.914286 +vt 0.634615 0.942857 +vt 0.750000 0.957143 +vt 0.750000 0.985714 +vt 0.634615 0.985714 +vt 0.750000 1.000000 +vt 0.634615 1.000000 +vt 0.634615 0.885714 +vt 0.750000 0.900000 +vt 0.764423 0.900000 +vt 0.754808 0.914286 +vt 0.759615 0.900000 +vt 0.764423 0.971429 +vt 0.754808 0.971429 +vt 0.764423 0.914286 +vt 0.764423 0.985714 +vt 0.759615 0.985714 +vt 0.764423 0.957143 +vt 0.774038 0.914286 +vt 0.774038 0.971429 +vt 0.778846 0.942857 +vt 0.764423 0.942857 +vt 0.778846 0.928571 +vt 0.778846 0.957143 +vt 0.764423 1.000000 +vt 0.769231 0.985714 +vt 0.764423 0.885714 +vt 0.769231 0.900000 +vt 0.817308 0.971429 +vt 0.778846 0.985714 +vt 0.778846 0.971429 +vt 0.817308 0.942857 +vt 0.817308 0.885714 +vt 0.778846 0.900000 +vt 0.778846 0.885714 +vt 0.817308 0.928571 +vt 0.817308 0.985714 +vt 0.778846 1.000000 +vt 0.817308 0.900000 +vt 0.778846 0.914286 +vt 0.817308 0.957143 +vt 0.817308 0.914286 +vt 0.831731 0.885714 +vt 0.822115 0.885714 +vt 0.831731 0.942857 +vt 0.822115 0.942857 +vt 0.831731 0.900000 +vt 0.831731 0.985714 +vt 0.822115 1.000000 +vt 0.826923 0.985714 +vt 0.831731 0.914286 +vt 0.831731 0.957143 +vt 0.826923 0.957143 +vt 0.846154 0.914286 +vt 0.831731 0.928571 +vt 0.841346 0.942857 +vt 0.841346 0.885714 +vt 0.846154 0.928571 +vt 0.846154 0.900000 +vt 0.841346 1.000000 +vt 0.831731 1.000000 +vt 0.831731 0.971429 +vt 0.836538 0.957143 +vt 0.836538 0.985714 +vt 0.461538 0.957143 +vt 0.557692 0.971429 +vt 0.461538 0.971429 +vt 0.461538 0.914286 +vt 0.557692 0.928571 +vt 0.461538 0.928571 +vt 0.572115 0.928571 +vt 0.557692 0.942857 +vt 0.461538 0.900000 +vt 0.557692 0.914286 +vt 0.461538 0.942857 +vt 0.557692 0.957143 +vt 0.557692 0.985714 +vt 0.461538 0.985714 +vt 0.557692 1.000000 +vt 0.461538 1.000000 +vt 0.461538 0.885714 +vt 0.557692 0.900000 +vt 0.572115 0.900000 +vt 0.562500 0.914286 +vt 0.567308 0.900000 +vt 0.572115 0.971429 +vt 0.562500 0.971429 +vt 0.572115 0.914286 +vt 0.572115 0.985714 +vt 0.567308 0.985714 +vt 0.572115 0.957143 +vt 0.586538 0.928571 +vt 0.581731 0.971429 +vt 0.586538 0.942857 +vt 0.572115 0.942857 +vt 0.581731 0.914286 +vt 0.586538 0.957143 +vt 0.572115 1.000000 +vt 0.576923 0.985714 +vt 0.572115 0.885714 +vt 0.576923 0.900000 +vt 0.605769 0.971429 +vt 0.586538 0.985714 +vt 0.586538 0.971429 +vt 0.605769 0.942857 +vt 0.605769 0.885714 +vt 0.586538 0.900000 +vt 0.586538 0.885714 +vt 0.605769 0.928571 +vt 0.605769 0.985714 +vt 0.586538 1.000000 +vt 0.605769 0.900000 +vt 0.586538 0.914286 +vt 0.605769 0.957143 +vt 0.605769 0.914286 +vt 0.620192 0.885714 +vt 0.610577 0.885714 +vt 0.620192 0.942857 +vt 0.610577 0.942857 +vt 0.620192 0.900000 +vt 0.620192 0.985714 +vt 0.610577 1.000000 +vt 0.615385 0.985714 +vt 0.620192 0.928571 +vt 0.620192 0.957143 +vt 0.615385 0.957143 +vt 0.634615 0.914286 +vt 0.620192 0.914286 +vt 0.629808 0.942857 +vt 0.634615 0.900000 +vt 0.634615 0.928571 +vt 0.629808 1.000000 +vt 0.620192 1.000000 +vt 0.620192 0.971429 +vt 0.625000 0.957143 +vt 0.625000 0.985714 +vt 0.451923 0.771429 +vt 0.509615 0.785714 +vt 0.451923 0.785714 +vt 0.451923 0.814286 +vt 0.509615 0.828571 +vt 0.451923 0.828571 +vt 0.451923 0.842857 +vt 0.509615 0.857143 +vt 0.451923 0.857143 +vt 0.451923 0.757143 +vt 0.509615 0.771429 +vt 0.509615 0.800000 +vt 0.451923 0.800000 +vt 0.509615 0.814286 +vt 0.509615 0.842857 +vt 0.451923 0.742857 +vt 0.509615 0.757143 +vt 0.514423 0.771429 +vt 0.524038 0.757143 +vt 0.524038 0.771429 +vt 0.524038 0.785714 +vt 0.524038 0.800000 +vt 0.524038 0.814286 +vt 0.514423 0.828571 +vt 0.524038 0.842857 +vt 0.519231 0.842857 +vt 0.524038 0.828571 +vt 0.538462 0.814286 +vt 0.533654 0.828571 +vt 0.533654 0.771429 +vt 0.538462 0.800000 +vt 0.528846 0.842857 +vt 0.538462 0.785714 +vt 0.298077 0.714286 +vt 0.197115 0.714286 +vt 0.326923 0.714286 +vt 0.312500 0.714286 +vt 0.211538 0.714286 +vt 0.350962 0.714286 +vt 0.341346 0.714286 +vt 0.235577 0.714286 +vt 0.225962 0.714286 +vt 0.355769 0.714286 +vt 0.240385 0.714286 +vt 0.379808 0.714286 +vt 0.370192 0.714286 +vt 0.254808 0.714286 +vt 0.163462 0.714286 +vt 0.153846 0.714286 +vt 0.278846 0.714286 +vt 0.269231 0.714286 +vt 0.177885 0.714286 +vt 0.168269 0.714286 +vt 0.293269 0.714286 +vt 0.283654 0.714286 +vt 0.509615 0.700000 +vt 0.451923 0.714286 +vt 0.451923 0.700000 +vt 0.509615 0.657143 +vt 0.451923 0.671429 +vt 0.451923 0.657143 +vt 0.509615 0.628571 +vt 0.451923 0.642857 +vt 0.451923 0.628571 +vt 0.509615 0.714286 +vt 0.451923 0.728571 +vt 0.509615 0.685714 +vt 0.451923 0.685714 +vt 0.509615 0.671429 +vt 0.509615 0.642857 +vt 0.509615 0.728571 +vt 0.451923 0.742857 +vt 0.514423 0.714286 +vt 0.524038 0.728571 +vt 0.519231 0.728571 +vt 0.524038 0.685714 +vt 0.524038 0.671429 +vt 0.524038 0.642857 +vt 0.514423 0.657143 +vt 0.519231 0.642857 +vt 0.524038 0.714286 +vt 0.524038 0.657143 +vt 0.538462 0.671429 +vt 0.533654 0.714286 +vt 0.538462 0.685714 +vt 0.524038 0.700000 +vt 0.533654 0.657143 +vt 0.538462 0.700000 +vt 0.144231 0.314286 +vt 0.115385 0.314286 +vt 0.557692 0.542857 +vt 0.528846 0.557143 +vt 0.528846 0.542857 +vt 0.201923 0.314286 +vt 0.173077 0.314286 +vt 0.259615 0.314286 +vt 0.230769 0.314286 +vt 0.500000 0.542857 +vt 0.471154 0.557143 +vt 0.471154 0.542857 +vt 0.086538 0.314286 +vt 0.269231 0.628571 +vt 0.240385 0.542857 +vt 0.269231 0.542857 +vt 0.298077 0.628571 +vt 0.298077 0.542857 +vt 0.240385 0.628571 +vt 0.211538 0.542857 +vt 0.182692 0.628571 +vt 0.182692 0.542857 +vt 0.288462 0.314286 +vt 0.153846 0.542857 +vt 0.057692 0.314286 +vt 0.615385 0.628571 +vt 0.586538 0.542857 +vt 0.615385 0.542857 +vt 0.355769 0.542857 +vt 0.326923 0.542857 +vt 0.413462 0.542857 +vt 0.384615 0.557143 +vt 0.384615 0.542857 +vt 0.442308 0.557143 +vt 0.442308 0.542857 +vt 0.500000 0.557143 +vt 0.355769 0.557143 +vt 0.413462 0.557143 +vt 0.355769 0.628571 +vt 0.384615 0.614286 +vt 0.384615 0.628571 +vt 0.413462 0.628571 +vt 0.442308 0.614286 +vt 0.442308 0.628571 +vt 0.471154 0.628571 +vt 0.500000 0.614286 +vt 0.500000 0.628571 +vt 0.528846 0.628571 +vt 0.557692 0.628571 +vt 0.326923 0.628571 +vt 0.355769 0.614286 +vt 0.413462 0.614286 +vt 0.471154 0.614286 +vt 0.528846 0.614286 +vt 0.586538 0.628571 +vt 0.759615 0.371429 +vt 0.730769 0.428571 +vt 0.730769 0.371429 +vt 0.788462 0.371429 +vt 0.759615 0.428571 +vt 0.817308 0.371429 +vt 0.788462 0.428571 +vt 0.846154 0.371429 +vt 0.817308 0.428571 +vt 0.875000 0.371429 +vt 0.846154 0.428571 +vt 0.903846 0.371429 +vt 0.875000 0.428571 +vt 0.932692 0.371429 +vt 0.903846 0.428571 +vt 0.932692 0.428571 +vt 0.961538 0.371429 +vt 0.961538 0.428571 +vt 0.524038 0.857143 +vt 0.519231 0.757143 +vt 0.524038 0.742857 +vt 0.528846 0.757143 +vt 0.524038 0.742857 +vt 0.528846 0.728571 +vt 0.524038 0.628571 +vt 0.528846 0.642857 +vt 0.230769 0.200000 +vt 0.461538 0.000000 +vt 0.000000 0.885714 +vt 0.057692 1.000000 +vt 0.057692 0.885714 +vt 0.000000 0.957143 +vt 0.163462 1.000000 +vt 0.240385 0.885714 +vt 0.254808 0.885714 +vt 0.336538 1.000000 +vt 0.413462 0.885714 +vt 0.427885 0.885714 +vt 0.461538 0.885714 +vt 0.221154 0.514286 +vt 0.019231 0.514286 +vt 0.250000 0.514286 +vt 0.048077 0.514286 +vt 0.278846 0.514286 +vt 0.076923 0.514286 +vt 0.307692 0.514286 +vt 0.105769 0.514286 +vt 0.365385 0.514286 +vt 0.336538 0.514286 +vt 0.394231 0.514286 +vt 0.423077 0.514286 +vt 0.451923 0.514286 +vt 0.192308 0.714286 +vt 0.384615 0.685714 +vt 0.750000 0.885714 +vt 0.817308 1.000000 +vt 0.557692 0.885714 +vt 0.605769 1.000000 +vt 0.629808 0.885714 +vt 0.509615 0.742857 +vt 0.307692 0.714286 +vt 0.206731 0.714286 +vt 0.336538 0.714286 +vt 0.322115 0.714286 +vt 0.221154 0.714286 +vt 0.365385 0.714286 +vt 0.250000 0.714286 +vt 0.264423 0.714286 +vt 0.509615 0.742857 +vt 0.211538 0.628571 +vt 0.153846 0.628571 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.0000 0.7071 +vn -0.8660 0.0000 -0.5000 +vn 0.8660 -0.0000 -0.5000 +vn 0.5000 -0.0000 0.8660 +vn -0.8660 0.0000 0.5000 +vn 0.5000 -0.0000 -0.8660 +vn -0.5000 0.0000 -0.8660 +vn 0.8660 -0.0000 0.5000 +vn -0.5000 0.0000 0.8660 +vn 0.9987 0.0473 -0.0196 +vn -0.6794 0.7194 -0.1448 +vn 0.0000 0.9824 -0.1866 +vn -0.6630 0.5294 -0.5294 +vn -0.9987 0.0473 -0.0196 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.6794 0.7194 -0.1448 +vn 0.7263 -0.6737 0.1363 +vn -0.0000 -0.7071 0.7071 +vn -0.7263 -0.6737 0.1363 +vn -0.7574 -0.4617 0.4617 +vn 0.9955 0.0671 -0.0671 +vn 0.6630 0.5294 -0.5294 +vn -0.9955 0.0671 -0.0671 +vn 0.7574 -0.4617 0.4617 +vn -0.0000 0.7071 -0.7071 +vn -0.6794 0.1448 -0.7194 +vn -0.9987 0.0196 -0.0473 +vn 0.9987 0.0196 -0.0473 +vn -0.0000 0.1866 -0.9824 +vn -0.7263 -0.1363 0.6737 +vn 0.6794 0.1448 -0.7194 +vn 0.7263 -0.1363 0.6737 +vn 0.9809 0.1944 0.0000 +vn -0.0473 -0.0196 -0.9987 +vn -0.0473 -0.0196 0.9987 +vn -0.7194 -0.1448 -0.6794 +vn 0.6737 0.1363 0.7263 +vn -0.7194 -0.1448 0.6794 +vn 0.6737 0.1363 -0.7263 +vn -0.9824 -0.1866 -0.0000 +vn -0.0671 -0.0671 0.9955 +vn -0.0671 -0.0671 -0.9955 +vn -0.5294 -0.5294 -0.6630 +vn -0.5294 -0.5294 0.6630 +vn 0.4617 0.4617 0.7574 +vn 0.4617 0.4617 -0.7574 +vn -0.3827 -0.9239 0.0000 +vn -0.0393 -0.0948 -0.9947 +vn -0.2962 -0.7150 0.6333 +vn -0.0393 -0.0948 0.9947 +vn -0.2962 -0.7150 -0.6333 +vn 0.2611 0.6303 0.7311 +vn 0.2611 0.6303 -0.7311 +vn -0.1448 -0.7194 -0.6794 +vn -0.1866 -0.9824 0.0000 +vn -0.0196 -0.0473 -0.9987 +vn -0.1448 -0.7194 0.6794 +vn -0.0196 -0.0473 0.9987 +vn 0.1363 0.6737 0.7263 +vn 0.1363 0.6737 -0.7263 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 -0.7071 +vn 0.6533 0.7071 0.2706 +vn -0.9239 0.0000 -0.3827 +vn -0.7071 0.0000 -0.7071 +vn -0.9239 0.0000 0.3827 +vn -0.7523 0.0000 0.6588 +vn 0.3827 0.0000 -0.9239 +vn 0.6588 0.0000 -0.7523 +vn -0.3827 0.0000 -0.9239 +vn -0.6533 0.7071 0.2706 +vn 0.6533 0.7071 -0.2706 +vn -0.5000 0.7071 0.5000 +vn 0.5000 0.7071 -0.5000 +vn -0.2706 0.7071 0.6533 +vn 0.2706 0.7071 -0.6533 +vn -0.2706 0.7071 -0.6533 +vn 0.2706 0.7071 0.6533 +vn -0.5000 0.7071 -0.5000 +vn 0.5000 0.7071 0.5000 +vn -0.6533 0.7071 -0.2706 +vn -0.3423 0.4472 0.8263 +vn -0.6325 0.4472 0.6325 +vn 0.3827 0.0000 0.9239 +vn 0.9239 0.0000 0.3827 +vn 0.9239 0.0000 -0.3827 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.3827 -0.0000 0.9239 +vn -0.9809 0.1944 0.0000 +vn 0.0473 -0.0196 -0.9987 +vn 0.0473 -0.0196 0.9987 +vn 0.7194 -0.1448 -0.6794 +vn -0.6737 0.1363 0.7263 +vn 0.7194 -0.1448 0.6794 +vn -0.6737 0.1363 -0.7263 +vn 0.9824 -0.1866 0.0000 +vn 0.0671 -0.0671 0.9955 +vn 0.0671 -0.0671 -0.9955 +vn 0.5294 -0.5294 0.6630 +vn -0.4617 0.4617 0.7574 +vn -0.4617 0.4617 -0.7574 +vn 0.3827 -0.9239 0.0000 +vn 0.5294 -0.5294 -0.6630 +vn 0.0393 -0.0948 -0.9947 +vn 0.0393 -0.0948 0.9947 +vn 0.2962 -0.7150 -0.6333 +vn 0.2962 -0.7150 0.6333 +vn -0.2611 0.6303 -0.7311 +vn -0.2611 0.6303 0.7311 +vn 0.1448 0.6794 -0.7194 +vn 0.0196 -0.9987 -0.0473 +vn -0.1944 0.0000 0.9809 +vn 0.0196 0.9987 -0.0473 +vn 0.1866 -0.0000 -0.9824 +vn 0.1448 -0.6794 -0.7194 +vn -0.1363 -0.7263 0.6737 +vn -0.1363 0.7263 0.6737 +vn -0.4617 0.7574 0.4617 +vn 0.0671 0.9955 -0.0671 +vn 0.5294 0.6630 -0.5294 +vn 0.5294 -0.6630 -0.5294 +vn -0.4617 -0.7574 0.4617 +vn 0.0671 -0.9955 -0.0671 +vn 0.7150 -0.6333 -0.2962 +vn 0.0948 -0.9947 -0.0393 +vn 0.0948 0.9947 -0.0393 +vn -0.6303 -0.7311 0.2611 +vn 0.7150 0.6333 -0.2962 +vn 0.3423 0.4472 -0.8263 +vn 0.6325 0.4472 -0.6325 +vn -0.0000 0.4472 0.8944 +vn -0.3423 0.4472 -0.8263 +vn 0.0000 0.4472 -0.8944 +vn 0.3423 0.4472 0.8263 +vn -0.6325 0.4472 -0.6325 +vn 0.6325 0.4472 0.6325 +vn -0.8263 0.4472 -0.3423 +vn 0.8263 0.4472 0.3423 +vn -0.8944 0.4472 -0.0000 +vn 0.8944 0.4472 0.0000 +vn -0.8263 0.4472 0.3423 +vn 0.8263 0.4472 -0.3423 +vn 0.1448 0.6794 0.7194 +vn 0.0196 -0.9987 0.0473 +vn -0.1944 0.0000 -0.9809 +vn 0.0196 0.9987 0.0473 +vn 0.1866 -0.0000 0.9824 +vn 0.1448 -0.6794 0.7194 +vn -0.1363 -0.7263 -0.6737 +vn -0.1363 0.7263 -0.6737 +vn -0.4617 0.7574 -0.4617 +vn 0.5294 -0.6630 0.5294 +vn -0.4617 -0.7574 -0.4617 +vn 0.0671 0.9955 0.0671 +vn 0.0671 -0.9955 0.0671 +vn 0.7150 -0.6333 0.2962 +vn 0.0948 0.9947 0.0393 +vn 0.5294 0.6630 0.5294 +vn 0.0948 -0.9947 0.0393 +vn 0.7150 0.6333 0.2962 +vn -0.6588 0.0000 0.7523 +vn 0.7523 -0.0000 -0.6588 +vn -0.5556 0.0000 0.8315 +vn 0.8315 0.0000 -0.5556 +vn -0.6303 0.7311 0.2611 +vn -0.6303 0.7311 -0.2611 +vn -0.6303 -0.7311 -0.2611 +s off +f 286/410/40 283/411/40 284/412/40 +f 287/413/41 290/414/41 288/415/41 +f 284/416/42 290/417/42 286/418/42 +f 283/419/43 288/420/43 284/416/43 +f 285/421/44 287/413/44 283/411/44 +f 286/418/45 289/422/45 285/421/45 +f 294/423/40 291/424/40 292/425/40 +f 295/426/41 298/427/41 296/428/41 +f 292/429/42 298/430/42 294/431/42 +f 291/432/43 296/433/43 292/429/43 +f 293/434/44 295/426/44 291/424/44 +f 294/431/45 297/435/45 293/434/45 +f 302/436/40 299/437/40 300/438/40 +f 303/439/41 306/440/41 304/441/41 +f 300/442/42 306/443/42 302/444/42 +f 299/445/43 304/446/43 300/442/43 +f 301/447/44 303/439/44 299/437/44 +f 302/444/45 305/448/45 301/447/45 +f 310/449/40 307/450/40 308/451/40 +f 311/452/41 314/453/41 312/454/41 +f 308/455/42 314/456/42 310/457/42 +f 307/458/43 312/459/43 308/455/43 +f 309/460/44 311/452/44 307/450/44 +f 310/457/45 313/461/45 309/460/45 +f 282/462/40 280/463/40 281/464/40 +f 281/464/44 275/465/44 282/462/44 +f 279/466/42 277/467/42 280/463/42 +f 275/465/41 277/468/41 278/469/41 +f 322/470/40 320/471/40 321/472/40 +f 321/472/44 315/473/44 322/470/44 +f 319/474/42 317/475/42 320/471/42 +f 315/476/41 317/475/41 318/477/41 +f 330/478/40 328/479/40 329/480/40 +f 329/480/45 323/481/45 330/478/45 +f 327/482/43 325/483/43 328/479/43 +f 323/481/41 325/484/41 326/485/41 +f 338/486/40 336/487/40 337/488/40 +f 337/488/45 331/489/45 338/486/45 +f 335/490/43 333/491/43 336/487/43 +f 331/492/41 333/491/41 334/493/41 +f 341/494/44 340/495/44 339/496/44 +f 339/496/45 347/497/45 341/494/45 +f 341/494/41 350/498/41 342/499/41 +f 340/495/40 348/500/40 339/496/40 +f 342/499/43 349/501/43 340/495/43 +f 345/502/42 348/503/42 343/504/42 +f 343/505/42 349/506/42 344/507/42 +f 344/508/42 350/509/42 346/510/42 +f 346/511/42 347/512/42 345/513/42 +f 357/514/40 355/515/40 353/516/40 +f 367/517/41 369/518/41 371/519/41 +f 381/520/40 379/521/40 377/522/40 +f 391/523/41 393/524/41 395/525/41 +f 401/526/40 400/527/40 399/528/40 +f 403/529/45 410/530/45 406/531/45 +f 401/526/45 406/531/45 402/532/45 +f 400/533/43 404/534/43 399/535/43 +f 402/532/44 405/536/44 400/537/44 +f 399/535/42 403/529/42 401/526/42 +f 409/538/41 407/539/41 408/540/41 +f 405/541/43 408/542/43 404/534/43 +f 406/531/46 409/543/46 405/536/46 +f 404/534/47 407/544/47 403/529/47 +f 414/545/45 417/546/45 413/547/45 +f 411/548/43 416/549/43 412/550/43 +f 412/551/44 418/552/44 414/545/44 +f 413/547/42 415/553/42 411/548/42 +f 418/552/40 415/554/40 417/546/40 +f 422/555/45 425/556/45 421/557/45 +f 419/558/43 424/559/43 420/560/43 +f 420/561/44 426/562/44 422/555/44 +f 421/557/42 423/563/42 419/558/42 +f 426/562/40 423/564/40 425/556/40 +f 430/565/45 433/566/45 429/567/45 +f 427/568/43 432/569/43 428/570/43 +f 428/571/44 434/572/44 430/573/44 +f 429/574/42 431/575/42 427/576/42 +f 434/572/40 431/575/40 433/566/40 +f 457/577/41 455/578/41 456/579/41 +f 441/580/41 439/581/41 440/582/41 +f 438/583/44 441/580/44 436/584/44 +f 435/585/42 439/581/42 437/586/42 +f 437/587/45 442/588/45 438/589/45 +f 436/590/43 440/582/43 435/591/43 +f 449/592/41 447/593/41 448/594/41 +f 445/595/45 450/596/45 446/597/45 +f 444/598/43 448/594/43 443/599/43 +f 446/600/44 449/592/44 444/601/44 +f 443/602/42 447/593/42 445/603/42 +f 453/604/45 458/605/45 454/606/45 +f 452/607/43 456/579/43 451/608/43 +f 454/609/44 457/577/44 452/610/44 +f 451/611/42 455/578/42 453/612/42 +f 465/613/41 463/614/41 464/615/41 +f 461/616/45 466/617/45 462/618/45 +f 460/619/43 464/615/43 459/620/43 +f 462/621/44 465/613/44 460/622/44 +f 459/623/42 463/614/42 461/624/42 +f 473/625/41 471/626/41 472/627/41 +f 469/628/45 474/629/45 470/630/45 +f 468/631/43 472/627/43 467/632/43 +f 470/633/44 473/625/44 468/634/44 +f 467/635/42 471/626/42 469/636/42 +f 481/637/41 479/638/41 480/639/41 +f 477/640/45 482/641/45 478/642/45 +f 476/643/43 480/639/43 475/644/43 +f 478/645/44 481/637/44 476/646/44 +f 475/647/42 479/638/42 477/648/42 +f 497/649/41 495/650/41 496/651/41 +f 489/652/41 487/653/41 488/654/41 +f 483/655/42 487/653/42 485/656/42 +f 485/656/45 490/657/45 486/658/45 +f 484/659/43 488/660/43 483/655/43 +f 486/658/44 489/661/44 484/662/44 +f 491/663/42 495/650/42 493/664/42 +f 493/664/45 498/665/45 494/666/45 +f 492/667/43 496/668/43 491/663/43 +f 494/666/44 497/669/44 492/670/44 +f 645/671/40 644/672/40 643/673/40 +f 649/674/41 647/675/41 648/676/41 +f 645/677/45 650/678/45 646/679/45 +f 644/680/43 648/676/43 643/681/43 +f 646/682/44 649/674/44 644/672/44 +f 643/683/42 647/675/42 645/684/42 +f 669/685/40 668/686/40 667/687/40 +f 673/688/41 671/689/41 672/690/41 +f 668/691/43 672/690/43 667/692/43 +f 670/693/44 673/688/44 668/686/44 +f 667/694/42 671/689/42 669/695/42 +f 669/696/45 674/697/45 670/698/45 +f 665/699/40 661/700/40 657/701/40 +f 861/702/41 865/703/41 869/704/41 +f 917/705/41 903/706/41 911/707/41 +f 929/708/40 925/709/40 921/710/40 +f 969/711/40 952/712/40 951/713/40 +f 968/714/40 951/713/40 950/715/40 +f 949/716/40 968/714/40 950/715/40 +f 948/717/40 967/718/40 949/716/40 +f 965/719/40 948/717/40 947/720/40 +f 964/721/40 947/720/40 946/722/40 +f 945/723/40 964/721/40 946/722/40 +f 944/724/40 963/725/40 945/723/40 +f 935/726/41 954/727/41 953/728/41 +f 953/729/48 944/730/48 935/731/48 +f 936/732/41 955/733/41 954/727/41 +f 938/734/41 955/733/41 937/735/41 +f 939/736/41 956/737/41 938/734/41 +f 939/736/41 958/738/41 957/739/41 +f 940/740/41 959/741/41 958/738/41 +f 942/742/41 959/741/41 941/743/41 +f 943/744/41 960/745/41 942/742/41 +f 952/746/48 961/747/48 943/748/48 +f 972/749/45 345/502/45 343/504/45 +f 973/750/40 343/505/40 344/507/40 +f 974/751/43 344/508/43 346/510/43 +f 971/752/41 346/511/41 345/513/41 +f 995/753/40 994/754/40 993/755/40 +f 999/756/41 997/757/41 998/758/41 +f 995/759/45 1000/760/45 996/761/45 +f 994/762/43 998/758/43 993/763/43 +f 996/764/44 999/756/44 994/754/44 +f 993/765/42 997/757/42 995/766/42 +f 1003/767/40 1002/768/40 1001/769/40 +f 1007/770/41 1005/771/41 1006/772/41 +f 1003/773/45 1008/774/45 1004/775/45 +f 1002/776/43 1006/772/43 1001/777/43 +f 1004/778/44 1007/770/44 1002/768/44 +f 1001/779/42 1005/771/42 1003/780/42 +f 1011/781/44 1010/782/44 1009/783/44 +f 1009/783/45 1017/784/45 1011/781/45 +f 1011/781/41 1020/785/41 1012/786/41 +f 1010/782/40 1018/787/40 1009/783/40 +f 1012/786/43 1019/788/43 1010/782/43 +f 1015/789/42 1018/790/42 1013/791/42 +f 1013/792/42 1019/793/42 1014/794/42 +f 1014/795/42 1020/796/42 1016/797/42 +f 1016/798/42 1017/799/42 1015/800/42 +f 1022/801/45 1015/789/45 1013/791/45 +f 1023/802/40 1013/792/40 1014/794/40 +f 1024/803/43 1014/795/43 1016/797/43 +f 1021/804/41 1016/798/41 1015/800/41 +f 1027/805/44 1026/806/44 1025/807/44 +f 1025/807/45 1033/808/45 1027/805/45 +f 1027/805/41 1036/809/41 1028/810/41 +f 1026/806/40 1034/811/40 1025/807/40 +f 1028/810/43 1035/812/43 1026/806/43 +f 1031/813/42 1034/814/42 1029/815/42 +f 1029/816/42 1035/817/42 1030/818/42 +f 1030/819/42 1036/820/42 1032/821/42 +f 1032/822/42 1033/823/42 1031/824/42 +f 1038/825/45 1031/813/45 1029/815/45 +f 1039/826/40 1029/816/40 1030/818/40 +f 1040/827/43 1030/819/43 1032/821/43 +f 1037/828/41 1032/822/41 1031/824/41 +f 1043/829/42 1042/830/42 1041/831/42 +f 1041/831/43 1049/832/43 1043/829/43 +f 1043/829/41 1052/833/41 1044/834/41 +f 1042/830/40 1050/835/40 1041/831/40 +f 1044/834/45 1051/836/45 1042/830/45 +f 1047/837/44 1050/838/44 1045/839/44 +f 1045/840/44 1051/841/44 1046/842/44 +f 1046/843/44 1052/844/44 1048/845/44 +f 1048/846/44 1049/847/44 1047/848/44 +f 1054/849/43 1047/837/43 1045/839/43 +f 1055/850/40 1045/840/40 1046/842/40 +f 1056/851/45 1046/843/45 1048/845/45 +f 1053/852/41 1048/846/41 1047/848/41 +f 1059/853/42 1058/854/42 1057/855/42 +f 1057/855/43 1065/856/43 1059/853/43 +f 1059/853/41 1068/857/41 1060/858/41 +f 1058/854/40 1066/859/40 1057/855/40 +f 1060/858/45 1067/860/45 1058/854/45 +f 1063/861/44 1066/862/44 1061/863/44 +f 1061/864/44 1067/865/44 1062/866/44 +f 1062/867/44 1068/868/44 1064/869/44 +f 1064/870/44 1065/871/44 1063/872/44 +f 1070/873/43 1063/861/43 1061/863/43 +f 1071/874/40 1061/864/40 1062/866/40 +f 1072/875/45 1062/867/45 1064/869/45 +f 1069/876/41 1064/870/41 1063/872/41 +f 1075/877/42 1074/878/42 1073/879/42 +f 1073/879/43 1081/880/43 1075/877/43 +f 1075/877/41 1084/881/41 1076/882/41 +f 1074/878/40 1082/883/40 1073/879/40 +f 1076/882/45 1083/884/45 1074/878/45 +f 1079/885/44 1082/886/44 1077/887/44 +f 1077/888/44 1083/889/44 1078/890/44 +f 1078/891/44 1084/892/44 1080/893/44 +f 1080/894/44 1081/895/44 1079/896/44 +f 1086/897/43 1079/885/43 1077/887/43 +f 1087/898/40 1077/888/40 1078/890/40 +f 1088/899/45 1078/891/45 1080/893/45 +f 1085/900/41 1080/894/41 1079/896/41 +f 1091/901/45 1090/902/45 1089/903/45 +f 1089/903/42 1097/904/42 1091/901/42 +f 1091/901/41 1100/905/41 1092/906/41 +f 1090/902/40 1098/907/40 1089/903/40 +f 1092/906/44 1099/908/44 1090/902/44 +f 1095/909/43 1098/910/43 1093/911/43 +f 1093/912/43 1099/913/43 1094/914/43 +f 1094/915/43 1100/916/43 1096/917/43 +f 1096/918/43 1097/919/43 1095/920/43 +f 1102/921/42 1095/909/42 1093/911/42 +f 1103/922/40 1093/912/40 1094/914/40 +f 1104/923/44 1094/915/44 1096/917/44 +f 1101/924/41 1096/918/41 1095/920/41 +f 1107/925/45 1106/926/45 1105/927/45 +f 1105/927/42 1113/928/42 1107/925/42 +f 1107/925/41 1116/929/41 1108/930/41 +f 1106/926/40 1114/931/40 1105/927/40 +f 1108/930/44 1115/932/44 1106/926/44 +f 1111/933/43 1114/934/43 1109/935/43 +f 1109/936/43 1115/937/43 1110/938/43 +f 1110/939/43 1116/940/43 1112/941/43 +f 1112/942/43 1113/943/43 1111/944/43 +f 1118/945/42 1111/933/42 1109/935/42 +f 1119/946/40 1109/936/40 1110/938/40 +f 1120/947/44 1110/939/44 1112/941/44 +f 1117/948/41 1112/942/41 1111/944/41 +f 1123/949/45 1122/950/45 1121/951/45 +f 1121/951/42 1129/952/42 1123/949/42 +f 1123/949/41 1132/953/41 1124/954/41 +f 1122/950/40 1130/955/40 1121/951/40 +f 1124/954/44 1131/956/44 1122/950/44 +f 1127/957/43 1130/958/43 1125/959/43 +f 1125/960/43 1131/961/43 1126/962/43 +f 1126/963/43 1132/964/43 1128/965/43 +f 1128/966/43 1129/967/43 1127/968/43 +f 1134/969/42 1127/957/42 1125/959/42 +f 1126/962/40 1134/970/40 1125/960/40 +f 1136/971/44 1126/963/44 1128/965/44 +f 1133/972/41 1128/966/41 1127/968/41 +f 1139/973/43 1138/974/43 1137/975/43 +f 1137/975/44 1145/976/44 1139/973/44 +f 1139/973/41 1148/977/41 1140/978/41 +f 1138/974/40 1146/979/40 1137/975/40 +f 1140/978/42 1147/980/42 1138/974/42 +f 1143/981/45 1146/982/45 1141/983/45 +f 1141/984/45 1147/985/45 1142/986/45 +f 1142/987/45 1148/988/45 1144/989/45 +f 1144/990/45 1145/991/45 1143/992/45 +f 1150/993/44 1143/981/44 1141/983/44 +f 1142/986/40 1150/994/40 1141/984/40 +f 1152/995/42 1142/987/42 1144/989/42 +f 1149/996/41 1144/990/41 1143/992/41 +f 1155/997/43 1154/998/43 1153/999/43 +f 1153/999/44 1161/1000/44 1155/997/44 +f 1155/997/41 1164/1001/41 1156/1002/41 +f 1154/998/40 1162/1003/40 1153/999/40 +f 1156/1002/42 1163/1004/42 1154/998/42 +f 1159/1005/45 1162/1006/45 1157/1007/45 +f 1157/1008/45 1163/1009/45 1158/1010/45 +f 1158/1011/45 1164/1012/45 1160/1013/45 +f 1160/1014/45 1161/1015/45 1159/1016/45 +f 1166/1017/44 1159/1005/44 1157/1007/44 +f 1167/1018/40 1157/1008/40 1158/1010/40 +f 1168/1019/42 1158/1011/42 1160/1013/42 +f 1165/1020/41 1160/1014/41 1159/1016/41 +f 1171/1021/43 1170/1022/43 1169/1023/43 +f 1169/1023/44 1177/1024/44 1171/1021/44 +f 1172/1025/41 1177/1026/41 1180/1027/41 +f 1170/1022/40 1178/1028/40 1169/1023/40 +f 1172/1025/42 1179/1029/42 1170/1022/42 +f 1175/1030/45 1178/1031/45 1173/1032/45 +f 1173/1033/45 1179/1034/45 1174/1035/45 +f 1174/1036/45 1180/1037/45 1176/1038/45 +f 1176/1039/45 1177/1026/45 1175/1040/45 +f 1182/1041/44 1175/1030/44 1173/1032/44 +f 1174/1035/40 1182/1042/40 1173/1033/40 +f 1184/1043/42 1174/1036/42 1176/1038/42 +f 1181/1044/41 1176/1039/41 1175/1040/41 +f 286/410/40 285/421/40 283/411/40 +f 287/413/41 289/422/41 290/414/41 +f 284/416/42 288/420/42 290/417/42 +f 283/419/43 287/1045/43 288/420/43 +f 285/421/44 289/422/44 287/413/44 +f 286/418/45 290/417/45 289/422/45 +f 294/423/40 293/434/40 291/424/40 +f 295/426/41 297/435/41 298/427/41 +f 292/429/42 296/433/42 298/430/42 +f 291/432/43 295/1046/43 296/433/43 +f 293/434/44 297/435/44 295/426/44 +f 294/431/45 298/430/45 297/435/45 +f 302/436/40 301/447/40 299/437/40 +f 303/439/41 305/448/41 306/440/41 +f 300/442/42 304/446/42 306/443/42 +f 299/445/43 303/1047/43 304/446/43 +f 301/447/44 305/448/44 303/439/44 +f 302/444/45 306/443/45 305/448/45 +f 310/449/40 309/460/40 307/450/40 +f 311/452/41 313/461/41 314/453/41 +f 308/455/42 312/459/42 314/456/42 +f 307/458/43 311/1048/43 312/459/43 +f 309/460/44 313/461/44 311/452/44 +f 310/457/45 314/456/45 313/461/45 +f 282/462/40 279/466/40 280/463/40 +f 281/464/44 276/1049/44 275/465/44 +f 279/466/42 278/1050/42 277/467/42 +f 275/465/41 276/1049/41 277/468/41 +f 322/470/40 319/474/40 320/471/40 +f 321/472/44 316/1051/44 315/473/44 +f 319/474/42 318/477/42 317/475/42 +f 315/476/41 316/1052/41 317/475/41 +f 330/478/40 327/482/40 328/479/40 +f 329/480/45 324/1053/45 323/481/45 +f 327/482/43 326/1054/43 325/483/43 +f 323/481/41 324/1053/41 325/484/41 +f 338/486/40 335/490/40 336/487/40 +f 337/488/45 332/1055/45 331/489/45 +f 335/490/43 334/493/43 333/491/43 +f 331/492/41 332/1056/41 333/491/41 +f 341/494/44 342/499/44 340/495/44 +f 339/496/45 348/503/45 347/497/45 +f 341/494/41 347/512/41 350/498/41 +f 340/495/40 349/506/40 348/500/40 +f 342/499/43 350/509/43 349/501/43 +f 345/502/42 347/497/42 348/503/42 +f 343/505/42 348/500/42 349/506/42 +f 344/508/42 349/501/42 350/509/42 +f 346/511/42 350/498/42 347/512/42 +f 353/516/40 352/1057/40 351/1058/40 +f 351/1058/40 362/1059/40 353/516/40 +f 362/1059/40 361/1060/40 353/516/40 +f 361/1060/40 360/1061/40 359/1062/40 +f 359/1062/40 358/1063/40 357/514/40 +f 357/514/40 356/1064/40 355/515/40 +f 355/515/40 354/1065/40 353/516/40 +f 361/1060/40 359/1062/40 353/516/40 +f 359/1062/40 357/514/40 353/516/40 +f 364/1066/41 363/1067/41 365/1068/41 +f 365/1068/41 366/1069/41 367/517/41 +f 367/517/41 368/1070/41 369/518/41 +f 369/518/41 370/1071/41 371/519/41 +f 371/519/41 372/1072/41 373/1073/41 +f 373/1073/41 374/1074/41 371/519/41 +f 374/1074/41 364/1066/41 371/519/41 +f 364/1066/41 365/1068/41 371/519/41 +f 365/1068/41 367/517/41 371/519/41 +f 377/522/40 376/1075/40 375/1076/40 +f 375/1076/40 386/1077/40 377/522/40 +f 386/1077/40 385/1078/40 377/522/40 +f 385/1078/40 384/1079/40 383/1080/40 +f 383/1080/40 382/1081/40 381/520/40 +f 381/520/40 380/1082/40 379/521/40 +f 379/521/40 378/1083/40 377/522/40 +f 385/1078/40 383/1080/40 377/522/40 +f 383/1080/40 381/520/40 377/522/40 +f 388/1084/41 387/1085/41 389/1086/41 +f 389/1086/41 390/1087/41 391/523/41 +f 391/523/41 392/1088/41 393/524/41 +f 393/524/41 394/1089/41 395/525/41 +f 395/525/41 396/1090/41 397/1091/41 +f 397/1091/41 398/1092/41 395/525/41 +f 398/1092/41 388/1084/41 395/525/41 +f 388/1084/41 389/1086/41 395/525/41 +f 389/1086/41 391/523/41 395/525/41 +f 401/526/40 402/532/40 400/527/40 +f 403/529/45 407/539/45 410/530/45 +f 401/526/45 403/529/45 406/531/45 +f 400/533/43 405/541/43 404/534/43 +f 402/532/44 406/531/44 405/536/44 +f 399/535/42 404/534/42 403/529/42 +f 409/538/41 410/530/41 407/539/41 +f 405/541/43 409/1093/43 408/542/43 +f 406/531/46 410/1094/46 409/543/46 +f 404/534/47 408/1095/47 407/544/47 +f 414/545/45 418/552/45 417/546/45 +f 411/548/43 415/553/43 416/549/43 +f 412/551/44 416/1096/44 418/552/44 +f 413/547/42 417/546/42 415/553/42 +f 418/552/40 416/1097/40 415/554/40 +f 422/555/45 426/562/45 425/556/45 +f 419/558/43 423/563/43 424/559/43 +f 420/561/44 424/1098/44 426/562/44 +f 421/557/42 425/556/42 423/563/42 +f 426/562/40 424/1099/40 423/564/40 +f 430/565/45 434/572/45 433/566/45 +f 427/568/43 431/575/43 432/569/43 +f 428/571/44 432/569/44 434/572/44 +f 429/574/42 433/566/42 431/575/42 +f 434/572/40 432/569/40 431/575/40 +f 457/577/41 458/605/41 455/578/41 +f 441/580/41 442/588/41 439/581/41 +f 438/583/44 442/588/44 441/580/44 +f 435/585/42 440/582/42 439/581/42 +f 437/587/45 439/581/45 442/588/45 +f 436/590/43 441/580/43 440/582/43 +f 449/592/41 450/596/41 447/593/41 +f 445/595/45 447/593/45 450/596/45 +f 444/598/43 449/592/43 448/594/43 +f 446/600/44 450/596/44 449/592/44 +f 443/602/42 448/594/42 447/593/42 +f 453/604/45 455/578/45 458/605/45 +f 452/607/43 457/577/43 456/579/43 +f 454/609/44 458/605/44 457/577/44 +f 451/611/42 456/579/42 455/578/42 +f 465/613/41 466/617/41 463/614/41 +f 461/616/45 463/614/45 466/617/45 +f 460/619/43 465/613/43 464/615/43 +f 462/621/44 466/617/44 465/613/44 +f 459/623/42 464/615/42 463/614/42 +f 473/625/41 474/629/41 471/626/41 +f 469/628/45 471/626/45 474/629/45 +f 468/631/43 473/625/43 472/627/43 +f 470/633/44 474/629/44 473/625/44 +f 467/635/42 472/627/42 471/626/42 +f 481/637/41 482/641/41 479/638/41 +f 477/640/45 479/638/45 482/641/45 +f 476/643/43 481/637/43 480/639/43 +f 478/645/44 482/641/44 481/637/44 +f 475/647/42 480/639/42 479/638/42 +f 497/649/41 498/665/41 495/650/41 +f 489/652/41 490/657/41 487/653/41 +f 483/655/42 488/660/42 487/653/42 +f 485/656/45 487/653/45 490/657/45 +f 484/659/43 489/1100/43 488/660/43 +f 486/658/44 490/657/44 489/661/44 +f 491/663/42 496/668/42 495/650/42 +f 493/664/45 495/650/45 498/665/45 +f 492/667/43 497/1101/43 496/668/43 +f 494/666/44 498/665/44 497/669/44 +f 645/671/40 646/682/40 644/672/40 +f 649/674/41 650/678/41 647/675/41 +f 645/677/45 647/675/45 650/678/45 +f 644/680/43 649/674/43 648/676/43 +f 646/682/44 650/678/44 649/674/44 +f 643/683/42 648/676/42 647/675/42 +f 669/685/40 670/693/40 668/686/40 +f 673/688/41 674/697/41 671/689/41 +f 668/691/43 673/688/43 672/690/43 +f 670/693/44 674/697/44 673/688/44 +f 667/694/42 672/690/42 671/689/42 +f 669/696/45 671/689/45 674/697/45 +f 653/1102/40 652/1103/40 651/1104/40 +f 651/1104/40 666/1105/40 653/1102/40 +f 666/1105/40 665/699/40 653/1102/40 +f 665/699/40 664/1106/40 661/700/40 +f 664/1106/40 663/1107/40 661/700/40 +f 663/1107/40 662/1108/40 661/700/40 +f 661/700/40 660/1109/40 657/701/40 +f 660/1109/40 659/1110/40 657/701/40 +f 659/1110/40 658/1111/40 657/701/40 +f 657/701/40 656/1112/40 655/1113/40 +f 655/1113/40 654/1114/40 653/1102/40 +f 657/701/40 655/1113/40 653/1102/40 +f 653/1102/40 665/699/40 657/701/40 +f 858/1115/41 857/1116/41 861/702/41 +f 857/1116/41 859/1117/41 861/702/41 +f 859/1117/41 860/1118/41 861/702/41 +f 861/702/41 862/1119/41 863/1120/41 +f 863/1120/41 864/1121/41 861/702/41 +f 864/1121/41 865/703/41 861/702/41 +f 865/703/41 866/1122/41 869/704/41 +f 866/1122/41 867/1123/41 869/704/41 +f 867/1123/41 868/1124/41 869/704/41 +f 869/704/41 870/1125/41 871/1126/41 +f 871/1126/41 872/1127/41 869/704/41 +f 872/1127/41 858/1115/41 869/704/41 +f 858/1115/41 861/702/41 869/704/41 +f 903/706/41 904/1128/41 905/1129/41 +f 905/1129/41 906/1130/41 907/1131/41 +f 907/1131/41 908/1132/41 909/1133/41 +f 909/1133/41 910/1134/41 911/707/41 +f 911/707/41 912/1135/41 915/1136/41 +f 912/1135/41 913/1137/41 915/1136/41 +f 913/1137/41 914/1138/41 915/1136/41 +f 915/1136/41 916/1139/41 917/705/41 +f 917/705/41 918/1140/41 903/706/41 +f 903/706/41 905/1129/41 907/1131/41 +f 907/1131/41 909/1133/41 903/706/41 +f 909/1133/41 911/707/41 903/706/41 +f 915/1136/41 917/705/41 911/707/41 +f 921/710/40 919/1141/40 933/1142/40 +f 919/1141/40 920/1143/40 933/1142/40 +f 920/1143/40 934/1144/40 933/1142/40 +f 933/1142/40 932/1145/40 931/1146/40 +f 931/1146/40 930/1147/40 929/708/40 +f 929/708/40 928/1148/40 925/709/40 +f 928/1148/40 927/1149/40 925/709/40 +f 927/1149/40 926/1150/40 925/709/40 +f 925/709/40 924/1151/40 923/1152/40 +f 923/1152/40 922/1153/40 921/710/40 +f 933/1142/40 931/1146/40 929/708/40 +f 925/709/40 923/1152/40 921/710/40 +f 921/710/40 933/1142/40 929/708/40 +f 969/711/40 970/1154/40 952/712/40 +f 968/714/40 969/711/40 951/713/40 +f 949/716/40 967/718/40 968/714/40 +f 948/717/40 966/1155/40 967/718/40 +f 965/719/40 966/1155/40 948/717/40 +f 964/721/40 965/719/40 947/720/40 +f 945/723/40 963/725/40 964/721/40 +f 944/724/40 962/1156/40 963/725/40 +f 935/726/41 936/732/41 954/727/41 +f 953/729/48 962/1157/48 944/730/48 +f 936/732/41 937/735/41 955/733/41 +f 938/734/41 956/737/41 955/733/41 +f 939/736/41 957/739/41 956/737/41 +f 939/736/41 940/740/41 958/738/41 +f 940/740/41 941/743/41 959/741/41 +f 942/742/41 960/745/41 959/741/41 +f 943/744/41 961/1158/41 960/745/41 +f 952/746/48 970/1159/48 961/747/48 +f 972/749/45 971/1160/45 345/502/45 +f 973/750/40 972/1161/40 343/505/40 +f 974/751/43 973/1162/43 344/508/43 +f 971/752/41 974/1163/41 346/511/41 +f 995/753/40 996/764/40 994/754/40 +f 999/756/41 1000/760/41 997/757/41 +f 995/759/45 997/757/45 1000/760/45 +f 994/762/43 999/756/43 998/758/43 +f 996/764/44 1000/760/44 999/756/44 +f 993/765/42 998/758/42 997/757/42 +f 1003/767/40 1004/778/40 1002/768/40 +f 1007/770/41 1008/774/41 1005/771/41 +f 1003/773/45 1005/771/45 1008/774/45 +f 1002/776/43 1007/770/43 1006/772/43 +f 1004/778/44 1008/774/44 1007/770/44 +f 1001/779/42 1006/772/42 1005/771/42 +f 1011/781/44 1012/786/44 1010/782/44 +f 1009/783/45 1018/790/45 1017/784/45 +f 1011/781/41 1017/799/41 1020/785/41 +f 1010/782/40 1019/793/40 1018/787/40 +f 1012/786/43 1020/796/43 1019/788/43 +f 1015/789/42 1017/784/42 1018/790/42 +f 1013/792/42 1018/787/42 1019/793/42 +f 1014/795/42 1019/788/42 1020/796/42 +f 1016/798/42 1020/785/42 1017/799/42 +f 1022/801/45 1021/1164/45 1015/789/45 +f 1023/802/40 1022/1165/40 1013/792/40 +f 1024/803/43 1023/1166/43 1014/795/43 +f 1021/804/41 1024/1167/41 1016/798/41 +f 1027/805/44 1028/810/44 1026/806/44 +f 1025/807/45 1034/814/45 1033/808/45 +f 1027/805/41 1033/823/41 1036/809/41 +f 1026/806/40 1035/817/40 1034/811/40 +f 1028/810/43 1036/820/43 1035/812/43 +f 1031/813/42 1033/808/42 1034/814/42 +f 1029/816/42 1034/811/42 1035/817/42 +f 1030/819/42 1035/812/42 1036/820/42 +f 1032/822/42 1036/809/42 1033/823/42 +f 1038/825/45 1037/1168/45 1031/813/45 +f 1039/826/40 1038/1169/40 1029/816/40 +f 1040/827/43 1039/1170/43 1030/819/43 +f 1037/828/41 1040/1171/41 1032/822/41 +f 1043/829/42 1044/834/42 1042/830/42 +f 1041/831/43 1050/838/43 1049/832/43 +f 1043/829/41 1049/847/41 1052/833/41 +f 1042/830/40 1051/841/40 1050/835/40 +f 1044/834/45 1052/844/45 1051/836/45 +f 1047/837/44 1049/832/44 1050/838/44 +f 1045/840/44 1050/835/44 1051/841/44 +f 1046/843/44 1051/836/44 1052/844/44 +f 1048/846/44 1052/833/44 1049/847/44 +f 1054/849/43 1053/1172/43 1047/837/43 +f 1055/850/40 1054/1173/40 1045/840/40 +f 1056/851/45 1055/1174/45 1046/843/45 +f 1053/852/41 1056/1175/41 1048/846/41 +f 1059/853/42 1060/858/42 1058/854/42 +f 1057/855/43 1066/862/43 1065/856/43 +f 1059/853/41 1065/871/41 1068/857/41 +f 1058/854/40 1067/865/40 1066/859/40 +f 1060/858/45 1068/868/45 1067/860/45 +f 1063/861/44 1065/856/44 1066/862/44 +f 1061/864/44 1066/859/44 1067/865/44 +f 1062/867/44 1067/860/44 1068/868/44 +f 1064/870/44 1068/857/44 1065/871/44 +f 1070/873/43 1069/1176/43 1063/861/43 +f 1071/874/40 1070/1177/40 1061/864/40 +f 1072/875/45 1071/1178/45 1062/867/45 +f 1069/876/41 1072/1179/41 1064/870/41 +f 1075/877/42 1076/882/42 1074/878/42 +f 1073/879/43 1082/886/43 1081/880/43 +f 1075/877/41 1081/895/41 1084/881/41 +f 1074/878/40 1083/889/40 1082/883/40 +f 1076/882/45 1084/892/45 1083/884/45 +f 1079/885/44 1081/880/44 1082/886/44 +f 1077/888/44 1082/883/44 1083/889/44 +f 1078/891/44 1083/884/44 1084/892/44 +f 1080/894/44 1084/881/44 1081/895/44 +f 1086/897/43 1085/1180/43 1079/885/43 +f 1087/898/40 1086/1181/40 1077/888/40 +f 1088/899/45 1087/1182/45 1078/891/45 +f 1085/900/41 1088/1183/41 1080/894/41 +f 1091/901/45 1092/906/45 1090/902/45 +f 1089/903/42 1098/910/42 1097/904/42 +f 1091/901/41 1097/919/41 1100/905/41 +f 1090/902/40 1099/913/40 1098/907/40 +f 1092/906/44 1100/916/44 1099/908/44 +f 1095/909/43 1097/904/43 1098/910/43 +f 1093/912/43 1098/907/43 1099/913/43 +f 1094/915/43 1099/908/43 1100/916/43 +f 1096/918/43 1100/905/43 1097/919/43 +f 1102/921/42 1101/1184/42 1095/909/42 +f 1103/922/40 1102/1185/40 1093/912/40 +f 1104/923/44 1103/1186/44 1094/915/44 +f 1101/924/41 1104/1187/41 1096/918/41 +f 1107/925/45 1108/930/45 1106/926/45 +f 1105/927/42 1114/934/42 1113/928/42 +f 1107/925/41 1113/943/41 1116/929/41 +f 1106/926/40 1115/937/40 1114/931/40 +f 1108/930/44 1116/940/44 1115/932/44 +f 1111/933/43 1113/928/43 1114/934/43 +f 1109/936/43 1114/931/43 1115/937/43 +f 1110/939/43 1115/932/43 1116/940/43 +f 1112/942/43 1116/929/43 1113/943/43 +f 1118/945/42 1117/1188/42 1111/933/42 +f 1119/946/40 1118/1189/40 1109/936/40 +f 1120/947/44 1119/1190/44 1110/939/44 +f 1117/948/41 1120/1191/41 1112/942/41 +f 1123/949/45 1124/954/45 1122/950/45 +f 1121/951/42 1130/958/42 1129/952/42 +f 1123/949/41 1129/967/41 1132/953/41 +f 1122/950/40 1131/961/40 1130/955/40 +f 1124/954/44 1132/964/44 1131/956/44 +f 1127/957/43 1129/952/43 1130/958/43 +f 1125/960/43 1130/955/43 1131/961/43 +f 1126/963/43 1131/956/43 1132/964/43 +f 1128/966/43 1132/953/43 1129/967/43 +f 1134/969/42 1133/1192/42 1127/957/42 +f 1126/962/40 1135/1193/40 1134/970/40 +f 1136/971/44 1135/1194/44 1126/963/44 +f 1133/972/41 1136/1195/41 1128/966/41 +f 1139/973/43 1140/978/43 1138/974/43 +f 1137/975/44 1146/982/44 1145/976/44 +f 1139/973/41 1145/991/41 1148/977/41 +f 1138/974/40 1147/985/40 1146/979/40 +f 1140/978/42 1148/988/42 1147/980/42 +f 1143/981/45 1145/976/45 1146/982/45 +f 1141/984/45 1146/979/45 1147/985/45 +f 1142/987/45 1147/980/45 1148/988/45 +f 1144/990/45 1148/977/45 1145/991/45 +f 1150/993/44 1149/1196/44 1143/981/44 +f 1142/986/40 1151/1197/40 1150/994/40 +f 1152/995/42 1151/1198/42 1142/987/42 +f 1149/996/41 1152/1199/41 1144/990/41 +f 1155/997/43 1156/1002/43 1154/998/43 +f 1153/999/44 1162/1006/44 1161/1000/44 +f 1155/997/41 1161/1015/41 1164/1001/41 +f 1154/998/40 1163/1009/40 1162/1003/40 +f 1156/1002/42 1164/1012/42 1163/1004/42 +f 1159/1005/45 1161/1000/45 1162/1006/45 +f 1157/1008/45 1162/1003/45 1163/1009/45 +f 1158/1011/45 1163/1004/45 1164/1012/45 +f 1160/1014/45 1164/1001/45 1161/1015/45 +f 1166/1017/44 1165/1200/44 1159/1005/44 +f 1167/1018/40 1166/1201/40 1157/1008/40 +f 1168/1019/42 1167/1202/42 1158/1011/42 +f 1165/1020/41 1168/1203/41 1160/1014/41 +f 1171/1021/43 1172/1025/43 1170/1022/43 +f 1169/1023/44 1178/1031/44 1177/1024/44 +f 1172/1025/41 1171/1021/41 1177/1026/41 +f 1170/1022/40 1179/1034/40 1178/1028/40 +f 1172/1025/42 1180/1037/42 1179/1029/42 +f 1175/1030/45 1177/1024/45 1178/1031/45 +f 1173/1033/45 1178/1028/45 1179/1034/45 +f 1174/1036/45 1179/1029/45 1180/1037/45 +f 1176/1039/45 1180/1027/45 1177/1026/45 +f 1182/1041/44 1181/1204/44 1175/1030/44 +f 1174/1035/40 1183/1205/40 1182/1042/40 +f 1184/1043/42 1183/1206/42 1174/1036/42 +f 1181/1044/41 1184/1207/41 1176/1039/41 +s 1 +f 354/1208/42 365/1209/49 353/1210/49 +f 360/1211/44 373/1212/50 372/1213/44 +f 358/1214/51 369/1215/43 357/1216/43 +f 355/1217/52 366/1218/42 354/1208/42 +f 361/1219/50 374/1220/53 373/1212/50 +f 352/1221/54 364/1222/45 351/1223/45 +f 359/1224/55 370/1225/51 358/1214/51 +f 356/1226/56 367/1227/52 355/1217/52 +f 351/1223/45 374/1220/53 362/1228/53 +f 353/1210/49 363/1229/54 352/1221/54 +f 360/1230/44 371/1231/55 359/1224/55 +f 357/1216/43 368/1232/56 356/1226/56 +f 378/1233/42 389/1234/49 377/1235/49 +f 385/1236/50 396/1237/44 384/1238/44 +f 382/1239/51 393/1240/43 381/1241/43 +f 379/1242/52 390/1243/42 378/1233/42 +f 386/1244/53 397/1245/50 385/1236/50 +f 375/1246/45 387/1247/54 388/1248/45 +f 383/1249/55 394/1250/51 382/1239/51 +f 380/1251/56 391/1252/52 379/1242/52 +f 375/1246/45 398/1253/53 386/1244/53 +f 377/1235/49 387/1247/54 376/1254/54 +f 383/1249/55 396/1255/44 395/1256/55 +f 381/1241/43 392/1257/56 380/1251/56 +f 541/1258/57 532/1259/46 533/1260/44 +f 546/1261/58 537/1262/42 538/1263/47 +f 502/1264/41 503/1265/46 501/1266/41 +f 539/1267/59 553/1268/60 546/1261/58 +f 530/1269/47 500/1270/41 529/1271/47 +f 504/1272/46 505/1273/44 503/1265/46 +f 545/1274/61 536/1275/62 537/1262/42 +f 528/1276/42 529/1271/47 527/1277/42 +f 506/1278/44 507/1279/63 505/1273/44 +f 539/1267/59 538/1263/47 531/1280/41 +f 526/1281/62 527/1277/42 525/1282/62 +f 508/1283/63 509/1284/40 507/1279/63 +f 540/1285/64 531/1280/41 532/1259/46 +f 523/1286/40 526/1281/62 525/1282/62 +f 510/1287/40 511/1288/62 509/1289/40 +f 542/1290/65 533/1260/44 534/1291/63 +f 522/1292/63 523/1293/40 521/1294/63 +f 512/1295/62 513/1296/42 511/1288/62 +f 518/1297/46 519/1298/44 517/1299/46 +f 520/1300/44 521/1294/63 519/1298/44 +f 514/1301/42 515/1302/47 513/1296/42 +f 543/1303/66 534/1291/63 535/1304/40 +f 544/1305/67 535/1306/40 536/1275/62 +f 515/1302/47 502/1264/41 501/1266/41 +f 499/1307/41 517/1299/46 500/1270/41 +f 545/1308/61 551/1309/68 544/1310/67 +f 540/1285/64 549/1311/69 548/1312/70 +f 546/1261/58 552/1313/71 545/1308/61 +f 541/1314/57 550/1315/72 549/1311/69 +f 540/1285/64 547/1316/73 539/1267/59 +f 552/1313/71 560/1317/74 559/1318/75 +f 550/1315/72 556/1319/76 549/1311/69 +f 548/1312/70 554/1320/77 547/1316/73 +f 553/1268/60 554/1320/77 560/1317/74 +f 551/1309/68 559/1318/75 558/1321/78 +f 549/1311/69 555/1322/79 548/1312/70 +f 543/1323/66 550/1315/72 542/1324/65 +f 550/1315/72 543/1323/66 557/1325/80 +f 544/1310/67 551/1309/68 543/1326/66 +f 551/1309/68 558/1321/78 543/1326/66 +f 557/1327/80 564/1328/81 556/1329/76 +f 555/1322/79 562/1330/82 554/1320/77 +f 558/1331/78 561/1332/83 543/1333/66 +f 554/1320/77 568/1334/84 560/1317/74 +f 543/1335/66 565/1336/85 557/1327/80 +f 559/1337/75 566/1338/86 558/1331/78 +f 556/1329/76 563/1339/87 555/1322/79 +f 560/1317/74 567/1340/88 559/1337/75 +f 566/1338/86 569/1341/89 561/1342/83 +f 568/1334/84 570/1343/90 575/1344/91 +f 567/1340/88 573/1345/92 566/1338/86 +f 561/1346/83 572/1347/93 565/1348/85 +f 567/1340/88 575/1344/91 574/1349/62 +f 562/1350/82 571/1351/94 570/1343/90 +f 575/1344/91 581/1352/95 574/1349/62 +f 571/1351/94 577/1353/96 570/1343/90 +f 569/1341/89 580/1354/97 576/1355/98 +f 570/1343/90 582/1356/99 575/1344/91 +f 573/1345/92 581/1352/95 580/1354/97 +f 572/1347/93 576/1357/98 579/1358/100 +f 564/1359/81 571/1351/94 563/1360/87 +f 571/1351/94 564/1359/81 578/1361/101 +f 565/1348/85 572/1347/93 564/1359/81 +f 572/1347/93 579/1358/100 564/1359/81 +f 593/1362/57 584/1363/46 585/1364/44 +f 598/1365/58 589/1366/42 590/1367/47 +f 591/1368/59 605/1369/60 598/1365/58 +f 597/1370/61 588/1371/62 589/1366/42 +f 591/1368/59 590/1367/47 583/1372/41 +f 592/1373/64 583/1372/41 584/1363/46 +f 594/1374/65 585/1364/44 586/1375/63 +f 595/1376/66 586/1375/63 587/1377/40 +f 596/1378/67 587/1379/40 588/1371/62 +f 597/1380/61 603/1381/68 596/1382/67 +f 593/1383/57 600/1384/70 592/1373/64 +f 598/1365/58 604/1385/71 597/1380/61 +f 593/1383/57 602/1386/72 601/1387/69 +f 592/1373/64 599/1388/73 591/1368/59 +f 604/1385/71 612/1389/74 611/1390/75 +f 602/1386/72 608/1391/76 601/1387/69 +f 599/1388/73 607/1392/79 606/1393/77 +f 599/1388/73 612/1389/74 605/1369/60 +f 603/1381/68 611/1390/75 610/1394/78 +f 600/1384/70 608/1391/76 607/1392/79 +f 595/1395/66 602/1386/72 594/1396/65 +f 602/1386/72 595/1395/66 609/1397/80 +f 596/1382/67 603/1381/68 595/1398/66 +f 603/1381/68 610/1394/78 595/1398/66 +f 609/1399/80 616/1400/46 608/1401/76 +f 607/1392/79 614/1402/82 606/1393/77 +f 610/1403/78 613/1404/83 595/1405/66 +f 606/1393/77 620/1406/84 612/1389/74 +f 595/1407/66 617/1408/85 609/1399/80 +f 611/1409/75 618/1410/86 610/1403/78 +f 608/1401/76 615/1411/87 607/1392/79 +f 612/1389/74 619/1412/88 611/1409/75 +f 613/1413/83 625/1414/92 621/1415/89 +f 614/1416/82 627/1417/91 620/1406/84 +f 618/1410/86 626/1418/62 625/1414/92 +f 613/1419/83 624/1420/93 617/1421/85 +f 620/1406/84 626/1418/62 619/1412/88 +f 614/1416/82 623/1422/94 622/1423/90 +f 626/1418/62 634/1424/102 633/1425/103 +f 623/1422/94 629/1426/104 622/1423/90 +f 621/1415/89 632/1427/105 628/1428/106 +f 622/1423/90 634/1424/102 627/1417/91 +f 626/1418/62 632/1427/105 625/1414/92 +f 624/1420/93 628/1429/106 631/1430/107 +f 616/1431/46 623/1422/94 615/1432/87 +f 623/1422/94 616/1431/46 630/1433/108 +f 617/1421/85 624/1420/93 616/1431/46 +f 624/1420/93 631/1430/107 616/1431/46 +f 628/1434/106 639/1435/109 631/1436/107 +f 634/1424/102 641/1437/40 633/1425/103 +f 630/1438/108 637/1439/45 629/1440/104 +f 631/1436/107 635/1441/41 616/1442/46 +f 632/1427/105 636/1443/43 628/1444/106 +f 616/1442/46 638/1445/73 630/1438/108 +f 629/1440/104 642/1446/110 634/1424/102 +f 633/1425/103 640/1447/66 632/1427/105 +f 687/1448/46 702/1449/111 686/1450/111 +f 654/1451/112 677/1452/113 653/1453/113 +f 655/1454/42 678/1455/112 654/1451/112 +f 656/1456/114 679/1457/42 655/1458/42 +f 944/724/115 680/1459/114 656/1456/114 +f 690/1460/116 952/712/117 943/744/117 +f 652/1461/118 676/1462/45 651/1463/45 +f 651/1463/45 690/1460/116 666/1464/116 +f 653/1453/113 675/1465/118 652/1461/118 +f 693/1466/113 707/1467/118 691/1468/118 +f 680/1459/119 695/1469/47 679/1457/47 +f 688/1470/120 703/1471/46 687/1448/46 +f 681/1472/121 696/1473/119 680/1459/119 +f 689/1474/122 704/1475/120 688/1470/120 +f 682/1476/123 697/1477/121 681/1472/121 +f 690/1460/124 705/1478/122 689/1474/122 +f 683/1479/109 698/1480/123 682/1476/123 +f 675/1465/125 692/1481/73 676/1462/73 +f 676/1462/73 706/1482/124 690/1460/124 +f 683/1479/109 700/1483/126 699/1484/109 +f 677/1452/127 691/1485/125 675/1465/125 +f 684/1486/126 701/1487/128 700/1488/126 +f 678/1455/129 693/1489/127 677/1452/127 +f 685/1490/128 702/1491/111 701/1492/128 +f 679/1493/47 694/1494/129 678/1455/129 +f 714/1495/130 863/1496/131 713/1497/131 +f 700/1498/132 717/1499/48 716/1500/132 +f 694/1501/112 709/1502/113 693/1466/113 +f 702/1503/133 717/1499/48 701/1504/48 +f 695/1505/42 710/1506/112 694/1501/112 +f 703/1507/44 718/1508/133 702/1503/133 +f 696/1509/114 711/1510/42 695/1511/42 +f 704/1512/134 719/1513/44 703/1507/44 +f 697/1514/135 712/1515/114 696/1509/114 +f 705/1516/136 720/1517/134 704/1512/134 +f 698/1518/137 713/1497/135 697/1514/135 +f 706/1519/116 721/1520/136 705/1516/136 +f 699/1521/43 714/1495/137 698/1518/137 +f 691/1468/118 708/1522/45 692/1523/45 +f 692/1523/45 722/1524/116 706/1519/116 +f 700/1498/132 715/1525/43 699/1521/43 +f 724/1526/47 733/1527/61 725/1528/42 +f 729/1529/44 738/1530/64 730/1531/46 +f 745/1532/70 731/1533/59 738/1530/64 +f 728/1534/63 737/1535/57 729/1529/44 +f 730/1531/46 731/1533/59 723/1536/41 +f 723/1536/41 732/1537/58 724/1526/47 +f 725/1528/42 734/1538/67 726/1539/62 +f 726/1539/62 735/1540/66 727/1541/40 +f 727/1542/40 736/1543/65 728/1534/63 +f 743/1544/72 737/1545/57 736/1546/65 +f 732/1537/58 741/1547/71 733/1548/61 +f 744/1549/69 738/1530/64 737/1545/57 +f 733/1548/61 742/1550/68 734/1551/67 +f 731/1533/59 740/1552/60 732/1537/58 +f 751/1553/76 745/1532/70 744/1549/69 +f 748/1554/75 742/1550/68 741/1547/71 +f 746/1555/77 740/1552/60 739/1556/73 +f 752/1557/79 739/1556/73 745/1532/70 +f 743/1544/72 751/1553/76 744/1549/69 +f 747/1558/74 741/1547/71 740/1552/60 +f 735/1559/66 734/1551/67 742/1550/68 +f 742/1550/68 749/1560/78 735/1559/66 +f 736/1546/65 735/1561/66 743/1544/72 +f 743/1544/72 735/1561/66 750/1562/80 +f 756/1563/138 749/1564/78 748/1565/75 +f 754/1566/139 747/1558/74 746/1555/77 +f 753/1567/140 750/1568/80 735/1569/66 +f 760/1570/141 746/1555/77 752/1557/79 +f 757/1571/142 735/1572/66 749/1564/78 +f 758/1573/143 751/1574/76 750/1568/80 +f 755/1575/144 748/1565/75 747/1558/74 +f 759/1576/145 752/1557/79 751/1574/76 +f 761/1577/146 758/1573/143 753/1578/140 +f 760/1570/141 762/1579/147 754/1580/139 +f 765/1581/148 759/1576/145 758/1573/143 +f 764/1582/149 753/1583/140 757/1584/142 +f 766/1585/63 760/1570/141 759/1576/145 +f 754/1580/139 763/1586/150 755/1587/144 +f 773/1588/151 767/1589/152 766/1585/63 +f 769/1590/153 763/1586/150 762/1579/147 +f 768/1591/154 765/1581/148 761/1577/146 +f 774/1592/155 762/1579/147 767/1589/152 +f 772/1593/156 766/1585/63 765/1581/148 +f 764/1582/149 768/1594/154 761/1595/146 +f 756/1596/138 755/1587/144 763/1586/150 +f 763/1586/150 770/1597/157 756/1596/138 +f 757/1584/142 756/1596/138 764/1582/149 +f 764/1582/149 756/1596/138 771/1598/158 +f 776/1599/47 785/1600/61 777/1601/42 +f 781/1602/44 790/1603/64 782/1604/46 +f 797/1605/70 783/1606/59 790/1603/64 +f 780/1607/63 789/1608/57 781/1602/44 +f 782/1604/46 783/1606/59 775/1609/41 +f 775/1609/41 784/1610/58 776/1599/47 +f 777/1601/42 786/1611/67 778/1612/62 +f 778/1612/62 787/1613/66 779/1614/40 +f 779/1615/40 788/1616/65 780/1607/63 +f 795/1617/72 789/1618/57 788/1619/65 +f 784/1610/58 793/1620/71 785/1621/61 +f 796/1622/69 790/1603/64 789/1618/57 +f 785/1621/61 794/1623/68 786/1624/67 +f 783/1606/59 792/1625/60 784/1610/58 +f 796/1622/69 804/1626/79 797/1605/70 +f 800/1627/75 794/1623/68 793/1620/71 +f 798/1628/77 792/1625/60 791/1629/73 +f 797/1605/70 798/1628/77 791/1629/73 +f 795/1617/72 803/1630/76 796/1622/69 +f 799/1631/74 793/1620/71 792/1625/60 +f 787/1632/66 786/1624/67 794/1623/68 +f 794/1623/68 801/1633/78 787/1632/66 +f 788/1619/65 787/1634/66 795/1617/72 +f 795/1617/72 787/1634/66 802/1635/80 +f 808/1636/138 801/1637/78 800/1638/75 +f 806/1639/139 799/1631/74 798/1628/77 +f 805/1640/140 802/1641/80 787/1642/66 +f 812/1643/141 798/1628/77 804/1626/79 +f 809/1644/142 787/1645/66 801/1637/78 +f 810/1646/143 803/1647/76 802/1641/80 +f 807/1648/144 800/1638/75 799/1631/74 +f 811/1649/145 804/1626/79 803/1647/76 +f 813/1650/146 810/1646/143 805/1651/140 +f 812/1643/141 814/1652/147 806/1653/139 +f 817/1654/148 811/1649/145 810/1646/143 +f 816/1655/149 805/1656/140 809/1657/142 +f 811/1649/145 819/1658/152 812/1643/141 +f 806/1653/139 815/1659/150 807/1660/144 +f 825/1661/151 819/1658/152 818/1662/63 +f 821/1663/153 815/1659/150 814/1652/147 +f 813/1650/146 824/1664/156 817/1654/148 +f 826/1665/155 814/1652/147 819/1658/152 +f 817/1654/148 825/1661/151 818/1662/63 +f 816/1655/149 820/1666/154 813/1667/146 +f 808/1668/138 807/1660/144 815/1659/150 +f 815/1659/150 822/1669/157 808/1668/138 +f 809/1657/142 808/1668/138 816/1655/149 +f 816/1655/149 808/1668/138 823/1670/158 +f 829/1671/41 836/1672/159 828/1673/73 +f 834/1674/110 841/1675/160 833/1676/40 +f 832/1677/66 839/1678/161 831/1679/43 +f 830/1680/109 837/1681/162 829/1671/41 +f 828/1673/73 835/1682/163 827/1683/45 +f 827/1683/45 842/1684/164 834/1674/110 +f 833/1676/40 840/1685/165 832/1677/66 +f 831/1686/43 838/1687/166 830/1680/109 +f 837/1688/162 846/1689/167 845/1690/168 +f 835/1682/163 844/1691/169 843/1692/136 +f 835/1682/163 849/1693/170 842/1684/164 +f 841/1694/160 847/1695/171 840/1696/165 +f 836/1672/159 845/1690/168 844/1691/169 +f 841/1694/160 849/1693/170 848/1697/172 +f 848/1697/172 856/1698/173 855/1699/174 +f 846/1689/167 852/1700/175 845/1690/168 +f 844/1691/169 850/1701/134 843/1692/136 +f 849/1693/170 850/1701/134 856/1698/173 +f 847/1695/171 855/1699/174 854/1702/176 +f 845/1690/168 851/1703/177 844/1691/169 +f 722/1524/178 871/1704/179 721/1520/179 +f 715/1525/180 864/1705/130 714/1495/130 +f 707/1467/181 858/1706/182 708/1522/182 +f 708/1522/182 872/1707/178 722/1524/178 +f 716/1500/183 865/1708/180 715/1525/180 +f 707/1467/181 859/1709/184 857/1710/181 +f 716/1500/183 867/1711/185 866/1712/183 +f 710/1506/186 859/1713/184 709/1502/184 +f 718/1508/187 867/1714/185 717/1499/185 +f 710/1506/186 861/1715/188 860/1716/186 +f 719/1513/189 868/1717/187 718/1508/187 +f 711/1510/188 862/1718/190 861/1719/188 +f 719/1513/189 870/1720/191 869/1721/189 +f 712/1515/190 863/1722/131 862/1723/190 +f 720/1517/191 871/1724/179 870/1725/191 +f 882/1726/192 875/1727/41 874/1728/109 +f 887/1729/193 880/1730/66 879/1731/40 +f 885/1732/194 878/1733/110 877/1734/45 +f 883/1735/195 876/1736/73 875/1727/41 +f 881/1737/196 874/1728/109 873/1738/43 +f 888/1739/197 873/1738/43 880/1730/66 +f 886/1740/198 879/1731/40 878/1733/110 +f 884/1741/199 877/1742/45 876/1736/73 +f 883/1743/195 892/1744/200 884/1745/199 +f 889/1746/48 882/1726/192 881/1737/196 +f 895/1747/201 881/1737/196 888/1739/197 +f 893/1748/202 887/1749/193 886/1750/198 +f 882/1726/192 891/1751/203 883/1743/195 +f 894/1752/204 888/1739/197 887/1749/193 +f 894/1752/204 902/1753/205 895/1747/201 +f 898/1754/206 892/1744/200 891/1751/203 +f 896/1755/133 890/1756/207 889/1746/48 +f 895/1747/201 896/1755/133 889/1746/48 +f 893/1748/202 901/1757/208 894/1752/204 +f 897/1758/209 891/1751/203 890/1756/207 +f 660/1759/132 937/735/43 659/1760/43 +f 909/1761/136 954/1762/116 910/1763/116 +f 662/1764/133 939/736/48 661/1765/48 +f 664/1766/134 941/743/44 663/1767/44 +f 911/1768/45 956/1769/118 912/1770/118 +f 659/1760/43 936/732/137 658/1771/137 +f 920/1772/43 904/1773/132 903/1774/43 +f 934/1775/137 903/1774/43 918/1776/137 +f 661/1765/48 938/734/132 660/1759/132 +f 919/1777/132 905/1778/48 904/1773/132 +f 663/1767/44 940/740/133 662/1764/133 +f 905/1778/48 922/1779/133 906/1780/133 +f 665/1781/136 942/742/134 664/1766/134 +f 922/1779/133 907/1782/44 906/1780/133 +f 658/1771/137 935/726/115 657/1783/135 +f 923/1784/44 908/1785/134 907/1786/44 +f 686/1450/133 950/715/44 687/1448/44 +f 684/1486/132 948/717/48 685/1490/48 +f 682/1476/137 946/722/43 683/1479/43 +f 687/1448/44 951/713/134 688/1470/134 +f 685/1490/48 949/716/133 686/1450/133 +f 683/1479/43 947/720/132 684/1486/132 +f 681/1472/135 945/723/137 682/1476/137 +f 688/1470/134 952/712/117 689/1474/136 +f 916/1787/114 961/747/210 917/1788/135 +f 914/1789/112 959/1790/42 915/1791/42 +f 912/1770/118 957/1792/113 913/1793/113 +f 910/1763/116 955/1794/45 911/1768/45 +f 915/1791/42 960/1795/114 916/1787/114 +f 913/1793/113 958/1796/112 914/1789/112 +f 932/1797/114 968/1798/42 931/1799/42 +f 930/1800/112 966/1801/113 929/1802/113 +f 928/1803/118 964/1804/45 927/1805/45 +f 926/1806/116 962/1157/211 925/1807/136 +f 933/1808/135 969/1809/114 932/1797/114 +f 931/1799/42 967/1810/112 930/1800/112 +f 929/1802/113 965/1811/118 928/1803/118 +f 927/1805/45 963/1812/116 926/1806/116 +f 962/1157/211 953/729/211 924/1813/134 +f 918/1776/137 970/1159/210 934/1775/137 +f 976/1814/137 984/1815/212 975/1816/212 +f 977/1817/43 985/1818/137 976/1814/137 +f 978/1819/132 986/1820/43 977/1817/43 +f 979/1821/48 987/1822/132 978/1819/132 +f 980/1823/133 988/1824/48 979/1821/48 +f 981/1825/44 989/1826/133 980/1823/133 +f 982/1827/134 990/1828/44 981/1825/44 +f 991/1829/134 983/1830/213 992/1831/213 +f 840/1696/165 847/1695/171 839/1832/161 +f 847/1695/171 854/1702/176 839/1832/161 +f 838/1833/166 839/1834/161 846/1689/167 +f 846/1689/167 839/1834/161 853/1835/214 +f 884/1745/199 892/1744/200 885/1836/194 +f 892/1744/200 899/1837/215 885/1836/194 +f 886/1750/198 885/1838/194 893/1748/202 +f 893/1748/202 885/1838/194 900/1839/216 +f 354/1208/42 366/1218/42 365/1209/49 +f 360/1211/44 361/1219/50 373/1212/50 +f 358/1214/51 370/1225/51 369/1215/43 +f 355/1217/52 367/1227/52 366/1218/42 +f 361/1219/50 362/1228/53 374/1220/53 +f 352/1221/54 363/1229/54 364/1222/45 +f 359/1224/55 371/1231/55 370/1225/51 +f 356/1226/56 368/1232/56 367/1227/52 +f 351/1223/45 364/1222/45 374/1220/53 +f 353/1210/49 365/1209/49 363/1229/54 +f 360/1230/44 372/1840/44 371/1231/55 +f 357/1216/43 369/1215/43 368/1232/56 +f 378/1233/42 390/1243/42 389/1234/49 +f 385/1236/50 397/1245/50 396/1237/44 +f 382/1239/51 394/1250/51 393/1240/43 +f 379/1242/52 391/1252/52 390/1243/42 +f 386/1244/53 398/1253/53 397/1245/50 +f 375/1246/45 376/1254/54 387/1247/54 +f 383/1249/55 395/1256/55 394/1250/51 +f 380/1251/56 392/1257/56 391/1252/52 +f 375/1246/45 388/1248/45 398/1253/53 +f 377/1235/49 389/1234/49 387/1247/54 +f 383/1249/55 384/1841/44 396/1255/44 +f 381/1241/43 393/1240/43 392/1257/56 +f 541/1258/57 540/1285/64 532/1259/46 +f 546/1261/58 545/1274/61 537/1262/42 +f 502/1264/41 504/1272/46 503/1265/46 +f 539/1267/59 547/1316/73 553/1268/60 +f 530/1269/47 499/1307/41 500/1270/41 +f 504/1272/46 506/1278/44 505/1273/44 +f 545/1274/61 544/1305/67 536/1275/62 +f 528/1276/42 530/1269/47 529/1271/47 +f 506/1278/44 508/1283/63 507/1279/63 +f 539/1267/59 546/1261/58 538/1263/47 +f 526/1281/62 528/1276/42 527/1277/42 +f 508/1283/63 510/1842/40 509/1284/40 +f 540/1285/64 539/1267/59 531/1280/41 +f 523/1286/40 524/1843/40 526/1281/62 +f 510/1287/40 512/1295/62 511/1288/62 +f 542/1290/65 541/1258/57 533/1260/44 +f 522/1292/63 524/1844/40 523/1293/40 +f 512/1295/62 514/1301/42 513/1296/42 +f 518/1297/46 520/1300/44 519/1298/44 +f 520/1300/44 522/1292/63 521/1294/63 +f 514/1301/42 516/1845/47 515/1302/47 +f 543/1303/66 542/1290/65 534/1291/63 +f 544/1305/67 543/1846/66 535/1306/40 +f 515/1302/47 516/1845/47 502/1264/41 +f 499/1307/41 518/1297/46 517/1299/46 +f 545/1308/61 552/1313/71 551/1309/68 +f 540/1285/64 541/1314/57 549/1311/69 +f 546/1261/58 553/1268/60 552/1313/71 +f 541/1314/57 542/1324/65 550/1315/72 +f 540/1285/64 548/1312/70 547/1316/73 +f 552/1313/71 553/1268/60 560/1317/74 +f 550/1315/72 557/1325/80 556/1319/76 +f 548/1312/70 555/1322/79 554/1320/77 +f 553/1268/60 547/1316/73 554/1320/77 +f 551/1309/68 552/1313/71 559/1318/75 +f 549/1311/69 556/1319/76 555/1322/79 +f 557/1327/80 565/1336/85 564/1328/81 +f 555/1322/79 563/1339/87 562/1330/82 +f 558/1331/78 566/1338/86 561/1332/83 +f 554/1320/77 562/1330/82 568/1334/84 +f 543/1335/66 561/1847/83 565/1336/85 +f 559/1337/75 567/1340/88 566/1338/86 +f 556/1329/76 564/1328/81 563/1339/87 +f 560/1317/74 568/1334/84 567/1340/88 +f 566/1338/86 573/1345/92 569/1341/89 +f 568/1334/84 562/1350/82 570/1343/90 +f 567/1340/88 574/1349/62 573/1345/92 +f 561/1346/83 569/1848/89 572/1347/93 +f 567/1340/88 568/1334/84 575/1344/91 +f 562/1350/82 563/1360/87 571/1351/94 +f 575/1344/91 582/1356/99 581/1352/95 +f 571/1351/94 578/1361/101 577/1353/96 +f 569/1341/89 573/1345/92 580/1354/97 +f 570/1343/90 577/1353/96 582/1356/99 +f 573/1345/92 574/1349/62 581/1352/95 +f 572/1347/93 569/1848/89 576/1357/98 +f 593/1362/57 592/1373/64 584/1363/46 +f 598/1365/58 597/1370/61 589/1366/42 +f 591/1368/59 599/1388/73 605/1369/60 +f 597/1370/61 596/1378/67 588/1371/62 +f 591/1368/59 598/1365/58 590/1367/47 +f 592/1373/64 591/1368/59 583/1372/41 +f 594/1374/65 593/1362/57 585/1364/44 +f 595/1376/66 594/1374/65 586/1375/63 +f 596/1378/67 595/1849/66 587/1379/40 +f 597/1380/61 604/1385/71 603/1381/68 +f 593/1383/57 601/1387/69 600/1384/70 +f 598/1365/58 605/1369/60 604/1385/71 +f 593/1383/57 594/1396/65 602/1386/72 +f 592/1373/64 600/1384/70 599/1388/73 +f 604/1385/71 605/1369/60 612/1389/74 +f 602/1386/72 609/1397/80 608/1391/76 +f 599/1388/73 600/1384/70 607/1392/79 +f 599/1388/73 606/1393/77 612/1389/74 +f 603/1381/68 604/1385/71 611/1390/75 +f 600/1384/70 601/1387/69 608/1391/76 +f 609/1399/80 617/1408/85 616/1400/46 +f 607/1392/79 615/1411/87 614/1402/82 +f 610/1403/78 618/1410/86 613/1404/83 +f 606/1393/77 614/1402/82 620/1406/84 +f 595/1407/66 613/1850/83 617/1408/85 +f 611/1409/75 619/1412/88 618/1410/86 +f 608/1401/76 616/1400/46 615/1411/87 +f 612/1389/74 620/1406/84 619/1412/88 +f 613/1413/83 618/1410/86 625/1414/92 +f 614/1416/82 622/1423/90 627/1417/91 +f 618/1410/86 619/1412/88 626/1418/62 +f 613/1419/83 621/1851/89 624/1420/93 +f 620/1406/84 627/1417/91 626/1418/62 +f 614/1416/82 615/1432/87 623/1422/94 +f 626/1418/62 627/1417/91 634/1424/102 +f 623/1422/94 630/1433/108 629/1426/104 +f 621/1415/89 625/1414/92 632/1427/105 +f 622/1423/90 629/1426/104 634/1424/102 +f 626/1418/62 633/1425/103 632/1427/105 +f 624/1420/93 621/1851/89 628/1429/106 +f 628/1434/106 636/1852/43 639/1435/109 +f 634/1424/102 642/1446/110 641/1437/40 +f 630/1438/108 638/1445/73 637/1439/45 +f 631/1436/107 639/1435/109 635/1441/41 +f 632/1427/105 640/1447/66 636/1443/43 +f 616/1442/46 635/1441/41 638/1445/73 +f 629/1440/104 637/1439/45 642/1446/110 +f 633/1425/103 641/1437/40 640/1447/66 +f 687/1448/46 703/1853/46 702/1449/111 +f 654/1451/112 678/1455/112 677/1452/113 +f 655/1454/42 679/1493/42 678/1455/112 +f 656/1456/114 680/1459/114 679/1457/42 +f 656/1456/114 657/1783/135 935/726/115 +f 944/724/115 681/1472/135 680/1459/114 +f 656/1456/114 935/726/115 944/724/115 +f 665/1781/136 666/1464/116 943/744/117 +f 666/1464/116 690/1460/116 943/744/117 +f 690/1460/116 689/1474/136 952/712/117 +f 652/1461/118 675/1465/118 676/1462/45 +f 651/1463/45 676/1462/45 690/1460/116 +f 653/1453/113 677/1452/113 675/1465/118 +f 693/1466/113 709/1502/113 707/1467/118 +f 680/1459/119 696/1854/119 695/1469/47 +f 688/1470/120 704/1855/120 703/1471/46 +f 681/1472/121 697/1856/121 696/1473/119 +f 689/1474/122 705/1857/122 704/1475/120 +f 682/1476/123 698/1858/123 697/1477/121 +f 690/1460/124 706/1859/124 705/1478/122 +f 683/1479/109 699/1860/109 698/1480/123 +f 675/1465/125 691/1861/125 692/1481/73 +f 676/1462/73 692/1862/73 706/1482/124 +f 683/1479/109 684/1486/126 700/1483/126 +f 677/1452/127 693/1863/127 691/1485/125 +f 684/1486/126 685/1490/128 701/1487/128 +f 678/1455/129 694/1864/129 693/1489/127 +f 685/1490/128 686/1450/111 702/1491/111 +f 679/1493/47 695/1865/47 694/1494/129 +f 714/1495/130 864/1866/130 863/1496/131 +f 700/1498/132 701/1504/48 717/1499/48 +f 694/1501/112 710/1506/112 709/1502/113 +f 702/1503/133 718/1508/133 717/1499/48 +f 695/1505/42 711/1867/42 710/1506/112 +f 703/1507/44 719/1513/44 718/1508/133 +f 696/1509/114 712/1515/114 711/1510/42 +f 704/1512/134 720/1517/134 719/1513/44 +f 697/1514/135 713/1497/135 712/1515/114 +f 705/1516/136 721/1520/136 720/1517/134 +f 698/1518/137 714/1495/137 713/1497/135 +f 706/1519/116 722/1524/116 721/1520/136 +f 699/1521/43 715/1525/43 714/1495/137 +f 691/1468/118 707/1467/118 708/1522/45 +f 692/1523/45 708/1522/45 722/1524/116 +f 700/1498/132 716/1500/132 715/1525/43 +f 724/1526/47 732/1537/58 733/1527/61 +f 729/1529/44 737/1535/57 738/1530/64 +f 745/1532/70 739/1556/73 731/1533/59 +f 728/1534/63 736/1543/65 737/1535/57 +f 730/1531/46 738/1530/64 731/1533/59 +f 723/1536/41 731/1533/59 732/1537/58 +f 725/1528/42 733/1527/61 734/1538/67 +f 726/1539/62 734/1538/67 735/1540/66 +f 727/1542/40 735/1868/66 736/1543/65 +f 743/1544/72 744/1549/69 737/1545/57 +f 732/1537/58 740/1552/60 741/1547/71 +f 744/1549/69 745/1532/70 738/1530/64 +f 733/1548/61 741/1547/71 742/1550/68 +f 731/1533/59 739/1556/73 740/1552/60 +f 751/1553/76 752/1557/79 745/1532/70 +f 748/1554/75 749/1560/78 742/1550/68 +f 746/1555/77 747/1558/74 740/1552/60 +f 752/1557/79 746/1555/77 739/1556/73 +f 743/1544/72 750/1562/80 751/1553/76 +f 747/1558/74 748/1554/75 741/1547/71 +f 756/1563/138 757/1571/142 749/1564/78 +f 754/1566/139 755/1575/144 747/1558/74 +f 753/1567/140 758/1573/143 750/1568/80 +f 760/1570/141 754/1566/139 746/1555/77 +f 757/1571/142 753/1869/140 735/1572/66 +f 758/1573/143 759/1576/145 751/1574/76 +f 755/1575/144 756/1563/138 748/1565/75 +f 759/1576/145 760/1570/141 752/1557/79 +f 761/1577/146 765/1581/148 758/1573/143 +f 760/1570/141 767/1589/152 762/1579/147 +f 765/1581/148 766/1585/63 759/1576/145 +f 764/1582/149 761/1595/146 753/1583/140 +f 766/1585/63 767/1589/152 760/1570/141 +f 754/1580/139 762/1579/147 763/1586/150 +f 773/1588/151 774/1592/155 767/1589/152 +f 769/1590/153 770/1597/157 763/1586/150 +f 768/1591/154 772/1593/156 765/1581/148 +f 774/1592/155 769/1590/153 762/1579/147 +f 772/1593/156 773/1588/151 766/1585/63 +f 764/1582/149 771/1598/158 768/1594/154 +f 776/1599/47 784/1610/58 785/1600/61 +f 781/1602/44 789/1608/57 790/1603/64 +f 797/1605/70 791/1629/73 783/1606/59 +f 780/1607/63 788/1616/65 789/1608/57 +f 782/1604/46 790/1603/64 783/1606/59 +f 775/1609/41 783/1606/59 784/1610/58 +f 777/1601/42 785/1600/61 786/1611/67 +f 778/1612/62 786/1611/67 787/1613/66 +f 779/1615/40 787/1870/66 788/1616/65 +f 795/1617/72 796/1622/69 789/1618/57 +f 784/1610/58 792/1625/60 793/1620/71 +f 796/1622/69 797/1605/70 790/1603/64 +f 785/1621/61 793/1620/71 794/1623/68 +f 783/1606/59 791/1629/73 792/1625/60 +f 796/1622/69 803/1630/76 804/1626/79 +f 800/1627/75 801/1633/78 794/1623/68 +f 798/1628/77 799/1631/74 792/1625/60 +f 797/1605/70 804/1626/79 798/1628/77 +f 795/1617/72 802/1635/80 803/1630/76 +f 799/1631/74 800/1627/75 793/1620/71 +f 808/1636/138 809/1644/142 801/1637/78 +f 806/1639/139 807/1648/144 799/1631/74 +f 805/1640/140 810/1646/143 802/1641/80 +f 812/1643/141 806/1639/139 798/1628/77 +f 809/1644/142 805/1871/140 787/1645/66 +f 810/1646/143 811/1649/145 803/1647/76 +f 807/1648/144 808/1636/138 800/1638/75 +f 811/1649/145 812/1643/141 804/1626/79 +f 813/1650/146 817/1654/148 810/1646/143 +f 812/1643/141 819/1658/152 814/1652/147 +f 817/1654/148 818/1662/63 811/1649/145 +f 816/1655/149 813/1667/146 805/1656/140 +f 811/1649/145 818/1662/63 819/1658/152 +f 806/1653/139 814/1652/147 815/1659/150 +f 825/1661/151 826/1665/155 819/1658/152 +f 821/1663/153 822/1669/157 815/1659/150 +f 813/1650/146 820/1872/154 824/1664/156 +f 826/1665/155 821/1663/153 814/1652/147 +f 817/1654/148 824/1664/156 825/1661/151 +f 816/1655/149 823/1670/158 820/1666/154 +f 829/1671/41 837/1681/162 836/1672/159 +f 834/1674/110 842/1684/164 841/1675/160 +f 832/1677/66 840/1685/165 839/1678/161 +f 830/1680/109 838/1687/166 837/1681/162 +f 828/1673/73 836/1672/159 835/1682/163 +f 827/1683/45 835/1682/163 842/1684/164 +f 833/1676/40 841/1675/160 840/1685/165 +f 831/1686/43 839/1873/161 838/1687/166 +f 837/1688/162 838/1833/166 846/1689/167 +f 835/1682/163 836/1672/159 844/1691/169 +f 835/1682/163 843/1692/136 849/1693/170 +f 841/1694/160 848/1697/172 847/1695/171 +f 836/1672/159 837/1688/162 845/1690/168 +f 841/1694/160 842/1684/164 849/1693/170 +f 848/1697/172 849/1693/170 856/1698/173 +f 846/1689/167 853/1835/214 852/1700/175 +f 844/1691/169 851/1703/177 850/1701/134 +f 849/1693/170 843/1692/136 850/1701/134 +f 847/1695/171 848/1697/172 855/1699/174 +f 845/1690/168 852/1700/175 851/1703/177 +f 722/1524/178 872/1874/178 871/1704/179 +f 715/1525/180 865/1875/180 864/1705/130 +f 707/1467/181 857/1876/181 858/1706/182 +f 708/1522/182 858/1877/182 872/1707/178 +f 716/1500/183 866/1878/183 865/1708/180 +f 707/1467/181 709/1502/184 859/1709/184 +f 716/1500/183 717/1499/185 867/1711/185 +f 710/1506/186 860/1879/186 859/1713/184 +f 718/1508/187 868/1880/187 867/1714/185 +f 710/1506/186 711/1867/188 861/1715/188 +f 719/1513/189 869/1881/189 868/1717/187 +f 711/1510/188 712/1515/190 862/1718/190 +f 719/1513/189 720/1517/191 870/1720/191 +f 712/1515/190 713/1497/131 863/1722/131 +f 720/1517/191 721/1520/179 871/1724/179 +f 882/1726/192 883/1735/195 875/1727/41 +f 887/1729/193 888/1739/197 880/1730/66 +f 885/1732/194 886/1740/198 878/1733/110 +f 883/1735/195 884/1741/199 876/1736/73 +f 881/1737/196 882/1726/192 874/1728/109 +f 888/1739/197 881/1737/196 873/1738/43 +f 886/1740/198 887/1729/193 879/1731/40 +f 884/1741/199 885/1882/194 877/1742/45 +f 883/1743/195 891/1751/203 892/1744/200 +f 889/1746/48 890/1756/207 882/1726/192 +f 895/1747/201 889/1746/48 881/1737/196 +f 893/1748/202 894/1752/204 887/1749/193 +f 882/1726/192 890/1756/207 891/1751/203 +f 894/1752/204 895/1747/201 888/1739/197 +f 894/1752/204 901/1757/208 902/1753/205 +f 898/1754/206 899/1837/215 892/1744/200 +f 896/1755/133 897/1758/209 890/1756/207 +f 895/1747/201 902/1753/205 896/1755/133 +f 893/1748/202 900/1839/216 901/1757/208 +f 897/1758/209 898/1754/206 891/1751/203 +f 660/1759/132 938/734/132 937/735/43 +f 909/1761/136 953/729/211 954/1762/116 +f 662/1764/133 940/740/133 939/736/48 +f 664/1766/134 942/742/134 941/743/44 +f 911/1768/45 955/1794/45 956/1769/118 +f 659/1760/43 937/735/43 936/732/137 +f 920/1772/43 919/1777/132 904/1773/132 +f 934/1775/137 920/1772/43 903/1774/43 +f 661/1765/48 939/736/48 938/734/132 +f 919/1777/132 921/1883/48 905/1778/48 +f 663/1767/44 941/743/44 940/740/133 +f 905/1778/48 921/1883/48 922/1779/133 +f 665/1781/136 943/744/117 942/742/134 +f 922/1779/133 923/1884/44 907/1782/44 +f 658/1771/137 936/732/137 935/726/115 +f 923/1784/44 924/1813/134 908/1785/134 +f 686/1450/133 949/716/133 950/715/44 +f 684/1486/132 947/720/132 948/717/48 +f 682/1476/137 945/723/137 946/722/43 +f 687/1448/44 950/715/44 951/713/134 +f 685/1490/48 948/717/48 949/716/133 +f 683/1479/43 946/722/43 947/720/132 +f 681/1472/135 944/724/115 945/723/137 +f 688/1470/134 951/713/134 952/712/117 +f 916/1787/114 960/1795/114 961/747/210 +f 914/1789/112 958/1796/112 959/1790/42 +f 912/1770/118 956/1769/118 957/1792/113 +f 910/1763/116 954/1762/116 955/1794/45 +f 915/1791/42 959/1790/42 960/1795/114 +f 913/1793/113 957/1792/113 958/1796/112 +f 932/1797/114 969/1809/114 968/1798/42 +f 930/1800/112 967/1810/112 966/1801/113 +f 928/1803/118 965/1811/118 964/1804/45 +f 926/1806/116 963/1812/116 962/1157/211 +f 933/1808/135 970/1159/210 969/1809/114 +f 931/1799/42 968/1798/42 967/1810/112 +f 929/1802/113 966/1801/113 965/1811/118 +f 927/1805/45 964/1804/45 963/1812/116 +f 909/1761/136 908/1785/134 953/729/211 +f 908/1785/134 924/1813/134 953/729/211 +f 924/1813/134 925/1807/136 962/1157/211 +f 918/1776/137 917/1788/135 961/747/210 +f 961/747/210 970/1159/210 918/1776/137 +f 970/1159/210 933/1808/135 934/1775/137 +f 976/1814/137 985/1818/137 984/1815/212 +f 977/1817/43 986/1820/43 985/1818/137 +f 978/1819/132 987/1822/132 986/1820/43 +f 979/1821/48 988/1824/48 987/1822/132 +f 980/1823/133 989/1826/133 988/1824/48 +f 981/1825/44 990/1828/44 989/1826/133 +f 982/1827/134 991/1829/134 990/1828/44 +f 991/1829/134 982/1827/134 983/1830/213 diff --git a/src/main/resources/assets/hbm/textures/models/machines/chemplant.png b/src/main/resources/assets/hbm/textures/models/machines/chemplant.png new file mode 100644 index 0000000000000000000000000000000000000000..f950c92bfae0f7840b90ed34890ea174fcb03e4f GIT binary patch literal 2343 zcmY*b2~?6<8wPF2N|dJ3L~+5UtlSF8g&4HVB^CV5%uv(9B*e^ep+N<;8Ov$PC3DFI z%g{`5$t^>)TrzXb4b3gf)N;X6aRKE2YWh#-zvtZZoO{3f-TU6>dEWQ?VjS_-(9Q78 zAP@*@Yh&pIU?^l7bc zTIVk(X^5oYsH!0?TGB{UlXd%*G?xb3$hm4givFxea^;zLE6au$6R7&6Zc+TFoZ?yx z%|jcByp(YVgAGeB4=YlhG&}71wUSUcG~0i}XkB_HbYZ+&Z|(4QRj$XVk*H>Mb~T6M z8;s&B2hu>UrMqd0wQlb&4k*0lH4oZ02yaxWIB9o#oMqC^g;oz?gLJ1CC+*gS&3Cy7 zQtCcT{cUsz_vJx;>nrmJ3!(Z*{z+NN%f*zB)_n6+m0i9$a2r(4vCPkitrXV5IHo%f z0_S>!^8!cAO!>!pa7b^>=iUd90P%1R>kH+vqxQ=jW>fQl<|16w}3H-jj zQXoPn#6`#WD4yY=9n!bQIJ>dXZG$B5fRa8LD5$Bw1WR zjgRxu2T?Z86PXn+T}|Q_Lwa5XEx|9$gs>qp6=Y@JY~}gX3zTP}slkLYmpu8=n2X#b z^|3_Xew5JqYtEzB$r`ec!dh z`{F{)T0iX+KAKiT&`l-^T07j>eXQ4xdGe{mO!*Bv{pNJj&uFZ3o!R_hg(rCCfF51K2vhs46sE`==g>8?3Si4`Dqs6(`V?80GVNjOz>wHO#!G2S2C`DXu z#=5l|u1JQ*WZkufyRv=#(E0>GXQkxG#bEFC?pIO$O9)>KAK&78Z#+0lsvwZ&jK=087DHCEb@7`3;a%OKLHmwd z-=rDGjs}0#Zd*E@t}$?H^&5{qbMUD>t7K!&mEp7+Vx!n8!##Fw!VgDUqGt6BSUYfN z6O){RX@VY${*5k2S%(5vp1Ou2Ill`&r8&Kr>@l!Z#L9Iu7UATSCjAjo_fqV41~K6by{^`wV}?jei+_ zb?x`gCC133_9Z^%N|nYi$&*2+i^-^=2m#q$h;=&tX^IGQj%PB!Z5R z!EFft7*?@bFtJJfdWYai&*O@7rtNiS6B*AN4tDJ|Bx@GRj+vU#Htutq(NaqiB%)%Q zwA3<}$l4Bmi59m$_C?G8sjHY_v~EUdrp$1(0cN~4w`U6nv?Gvpo^LWm&z${5q^na8 zHz|I=f0=jq^Qg&lZ=tA8qIdCNJd@`fOxrn zqv=yMCt9|d@4qs07R#=`iGSk-T18pk$2C;l4<&Uo!bAya5VcUTYGi^Hgc!fRac$>| z9ws!3vUAVY?+3qw`5!xX-MJT!v^;aIz6uLuV8HHQrM*@C*wG8Piy}P{7m>-lU%zlk zdx11-5VT^3pIc+vmJu>`eT4b5D*}#V#D>O8@bfW}wtxh7j#?PTTqT`tM#pDQhf{OpHkA zt_5Lhi+OX?yinRa!@%G=^#Kw1EP%lqcEW&H?mRPa`5TUjTMJL#zWkzJN^R*vdN|g* z3Q#^F=g^%ul?@csnbl%yamMSDeQVCqI9N$(;7^e>=?I%`u_p>z-2N)RHGz<^9&GYu z7f-xtpxX_)Q7wD!BFx#q!@H1Ha*HZK|DDk;SsN1cS72%tv{TiFVJbuM$W&a!Q+ z2`WyZ;_p)ZOFMkx-otfVZ`&vCQM;*h`((a^-ed(7pM>m^-W8d?j~tWKh2elI3*Yy_lU}5)=UeF1nJv)6XxtYO!u^{w>u}$@{VBP3wDrDif#&s)Q=}dp| z_=kp+%B};KwUcNaSQfEnmB}@rwE{!M}6R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/chemplant_fluid.png b/src/main/resources/assets/hbm/textures/models/machines/chemplant_fluid.png new file mode 100644 index 0000000000000000000000000000000000000000..7f40a463f99aa960a37e9bb0e3f2592e2f6eb646 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^2|&!p!3HERq)7?^DVAa<&kznEsNqQI0P?*(T^vIq zTHjtY6lGB0IdY*%;)x>L;iC?_4JN48? Date: Mon, 26 May 2025 10:12:46 +1000 Subject: [PATCH 089/491] fix dummy blocks with detailed hitboxes not using them for clicks (interaction/breaking) --- .../java/com/hbm/blocks/BlockDummyable.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 75dd39c2f..fa604e66e 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -26,6 +26,8 @@ import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.client.event.DrawBlockHighlightEvent; @@ -467,6 +469,33 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl return AxisAlignedBB.getBoundingBox(aabb.minX, aabb.minY, aabb.minZ, aabb.maxX, aabb.maxY, aabb.maxZ).offset(x + 0.5, y + 0.5, z + 0.5); } + @Override + public MovingObjectPosition collisionRayTrace(World world, int x, int y, int z, Vec3 startVec, Vec3 endVec) { + if(!this.useDetailedHitbox()) { + return super.collisionRayTrace(world, x, y, z, startVec, endVec); + } + + int[] pos = this.findCore(world, x, y, z); + + if(pos == null) + return super.collisionRayTrace(world, x, y, z, startVec, endVec); + + x = pos[0]; + y = pos[1]; + z = pos[2]; + + for(AxisAlignedBB aabb :this.bounding) { + AxisAlignedBB boxlet = getAABBRotationOffset(aabb, x + 0.5, y, z + 0.5, ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z) - offset).getRotation(ForgeDirection.UP)); + + MovingObjectPosition intercept = boxlet.calculateIntercept(startVec, endVec); + if(intercept != null) { + return new MovingObjectPosition(x, y, z, intercept.sideHit, intercept.hitVec); + } + } + + return null; + } + @Override public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { if(!this.useDetailedHitbox()) { From e347aa4346b6e62ad0b2179bd51a68fa67a46097 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 26 May 2025 10:05:03 +0200 Subject: [PATCH 090/491] it's like mopping up 5 gallons of vomit --- changelog | 7 +- .../com/hbm/crafting/ConsumableRecipes.java | 5 +- .../entity/projectile/EntityBulletBaseNT.java | 19 - src/main/java/com/hbm/items/ModItems.java | 6 - .../com/hbm/items/armor/ItemModRevive.java | 15 +- .../java/com/hbm/items/armor/JetpackBase.java | 3 - .../com/hbm/items/armor/JetpackBooster.java | 2 + .../com/hbm/items/armor/JetpackBreak.java | 24 +- .../com/hbm/items/armor/JetpackRegular.java | 2 + .../hbm/items/armor/JetpackVectorized.java | 2 + .../java/com/hbm/items/food/ItemCanteen.java | 42 +- .../com/hbm/items/special/ItemSyringe.java | 36 - .../hbm/items/weapon/ItemEnergyGunBase.java | 288 ------ .../com/hbm/items/weapon/ItemGunBase.java | 847 ------------------ src/main/java/com/hbm/main/MainRegistry.java | 2 + .../com/hbm/main/ModEventHandlerClient.java | 42 - .../java/com/hbm/packet/PacketDispatcher.java | 2 - .../packet/toclient/GunAnimationPacket.java | 31 +- .../hbm/packet/toserver/GunButtonPacket.java | 81 -- src/main/resources/assets/hbm/lang/de_DE.lang | 7 +- src/main/resources/assets/hbm/lang/en_US.lang | 7 +- .../assets/hbm/textures/items/canteen_fab.png | Bin 208 -> 0 bytes .../hbm/textures/items/fabsols_vodka.png | Bin 247 -> 0 bytes .../assets/hbm/textures/items/heart_fab.png | Bin 292 -> 299 bytes 24 files changed, 54 insertions(+), 1416 deletions(-) delete mode 100644 src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java delete mode 100644 src/main/java/com/hbm/items/weapon/ItemGunBase.java delete mode 100644 src/main/java/com/hbm/packet/toserver/GunButtonPacket.java delete mode 100644 src/main/resources/assets/hbm/textures/items/canteen_fab.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fabsols_vodka.png diff --git a/changelog b/changelog index 0460a9789..d354db2a9 100644 --- a/changelog +++ b/changelog @@ -9,16 +9,19 @@ ## Changed * The RBMK console's grid can now be rotated using a screwdriver * Tool abilities have changed - * Righ-clicking while holding ALT now opens a configuration window + * Right-clicking while holding ALT now opens a configuration window * The configuration window allows creation of tool presets * Area and block abilities can now be toggled independently from each other. For example, the vein miner ability can be combined with silk touch * Clicking on the same ability allows switching between levels * Updated textures for the armor and gun modification tables * Ported the fire extinguisher to the SEDNA gun system, eliminating the final remaining ItemGunBase gun * Water extinguishers can now wash away foam blocks +* Obliterated Fabsol's vodka +* Tier 4 heart piece is now called "heart of darkness" ## Fixed * Conveyor ejectors should now correctly place items onto the back of splitters instead of on the output belts * Fixed strand caster fluid gauges going out of bounds * Fixed arc welder and soldering station not changing buffer size based on upgrade, preventing use of higher overdrive tiers -* Fixed non-standard template folder recipes not using the correct icon \ No newline at end of file +* Fixed non-standard template folder recipes not using the correct icon +* Fixed jetpack flight time not resetting when equipped like armor, causing kicks on servers that don't have flying cheats allowed \ No newline at end of file diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 6cd44bb5b..a64f9759c 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -78,7 +78,6 @@ public class ConsumableRecipes { //Canteens CraftingManager.addRecipeAuto(new ItemStack(ModItems.canteen_vodka, 1), new Object[] { "O", "P", 'O', Items.potato, 'P', STEEL.plate() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.canteen_fab, 1), new Object[] { "VMV", "MVM", "VMV", 'V', ModItems.canteen_vodka, 'M', ModItems.powder_magic }); //Soda CraftingManager.addRecipeAuto(new ItemStack(ModItems.bottle_empty, 6), new Object[] { " G ", "G G", "GGG", 'G', KEY_ANYPANE }); @@ -119,7 +118,7 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.plan_c, 1), new Object[] { "PFP", 'P', ModItems.powder_poison, 'F', F.dust() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.radx, 1), new Object[] { COAL.dust(), COAL.dust(), F.dust() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.fmn, 1), new Object[] { COAL.dust(), PO210.dust(), ST.dust() }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.five_htp, 1), new Object[] { COAL.dust(), EUPH.dust(), ModItems.canteen_fab }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.five_htp, 1), new Object[] { COAL.dust(), EUPH.dust(), ModItems.canteen_vodka }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.cigarette, 16), new Object[] { ASBESTOS.ingot(), ANY_TAR.any(), PO210.nugget(), DictFrame.fromOne(ModItems.plant_item, ItemEnums.EnumPlantType.TOBACCO) }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.crackpipe, 1), new Object[] { ModItems.catalytic_converter }); @@ -193,7 +192,7 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.industrial_magnet, 1), new Object[] { "SMS", " B ", "SMS", 'S', STEEL.ingot(), 'M', ModItems.horseshoe_magnet, 'B', ModBlocks.fusion_conductor }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_container, 1), new Object[] { "HAH", "ACA", "HAH", 'H', ModItems.heart_piece, 'A', AL.ingot(), 'C', ModItems.coin_creeper }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_booster, 1), new Object[] { "GHG", "MCM", "GHG", 'G', GOLD.ingot(), 'H', ModItems.heart_container, 'M', ModItems.morning_glory, 'C', ModItems.coin_maskman }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_fab, 1), new Object[] { "GHG", "MCM", "GHG", 'G', PO210.billet(), 'H', ModItems.heart_booster, 'M', ModItems.canteen_fab, 'C', ModItems.coin_worm }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_fab, 1), new Object[] { "GHG", "MCM", "GHG", 'G', PO210.billet(), 'H', ModItems.heart_booster, 'M', ANY_COKE.gem(), 'C', ModItems.coin_worm }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.ink, 1), new Object[] { "FPF", "PIP", "FPF", 'F', new ItemStack(Blocks.red_flower, 1, OreDictionary.WILDCARD_VALUE), 'P', ModItems.armor_polish, 'I', KEY_BLACK }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.bathwater_mk2, 1), new Object[] { "MWM", "WBW", "MWM", 'M', ModItems.bottle_mercury, 'W', ModItems.nuclear_waste, 'B', ModItems.bathwater }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.back_tesla, 1), new Object[] { "DGD", "GTG", "DGD", 'D', ModItems.ducttape, 'G', GOLD.wireFine(), 'T', ModBlocks.tesla }); diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java index 728c2d1ad..02970ee35 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java @@ -21,9 +21,7 @@ import com.hbm.explosion.vanillant.standard.ExplosionEffectStandard; import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; -import com.hbm.handler.GunConfiguration; import com.hbm.handler.threading.PacketThreading; -import com.hbm.items.weapon.ItemGunBase; import com.hbm.main.MainRegistry; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; @@ -38,7 +36,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; import net.minecraft.util.DamageSource; @@ -109,25 +106,9 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet this.dataWatcher.updateObject(17, (byte)this.config.trail); thrower = entity; - ItemStack gun = entity.getHeldItem(); boolean offsetShot = true; boolean accuracyBoost = false; - if(gun != null && gun.getItem() instanceof ItemGunBase) { - GunConfiguration cfg = ((ItemGunBase) gun.getItem()).mainConfig; - - if(cfg != null) { - if(cfg.hasSights && entity.isSneaking()) { - offsetShot = false; - accuracyBoost = true; - } - - if(cfg.isCentered){ - offsetShot = false; - } - } - } - this.setLocationAndAngles(entity.posX, entity.posY + entity.getEyeHeight(), entity.posZ, entity.rotationYaw, entity.rotationPitch); if(offsetShot) { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index b60160874..e268f4d4b 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1599,7 +1599,6 @@ public class ModItems { public static Item med_schizophrenia; public static Item canteen_vodka; - public static Item canteen_fab; public static Item defuser; public static Item reacher; @@ -2052,7 +2051,6 @@ public class ModItems { public static Item wd40; public static Item scrumpy; public static Item wild_p; - public static Item fabsols_vodka; public static Item shackles; public static Item injector_5htp; public static Item injector_knife; @@ -3087,7 +3085,6 @@ public class ModItems { wd40 = new ItemModWD40().setUnlocalizedName("wd40").setTextureName(RefStrings.MODID + ":wd40"); scrumpy = new ItemModRevive(1).setUnlocalizedName("scrumpy").setTextureName(RefStrings.MODID + ":scrumpy"); wild_p = new ItemModRevive(3).setUnlocalizedName("wild_p").setTextureName(RefStrings.MODID + ":wild_p"); - fabsols_vodka = new ItemModRevive(9999).setUnlocalizedName("fabsols_vodka").setTextureName(RefStrings.MODID + ":fabsols_vodka"); shackles = new ItemModShackles().setUnlocalizedName("shackles").setTextureName(RefStrings.MODID + ":shackles"); injector_5htp = new ItemModAuto().setUnlocalizedName("injector_5htp").setTextureName(RefStrings.MODID + ":injector_5htp"); injector_knife = new ItemModKnife().setUnlocalizedName("injector_knife").setTextureName(RefStrings.MODID + ":injector_knife"); @@ -3870,7 +3867,6 @@ public class ModItems { static_sandwich = new ItemLemon(6, 1F, false).setUnlocalizedName("static_sandwich").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":static_sandwich"); pudding = new ItemLemon(6, 1F, false).setUnlocalizedName("pudding").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pudding"); canteen_vodka = new ItemCanteen(3 * 60).setUnlocalizedName("canteen_vodka").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canteen_vodka"); - canteen_fab = new ItemCanteen(2 * 60).setUnlocalizedName("canteen_fab").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":canteen_fab"); pancake = new ItemPancake(20, 20, false).setUnlocalizedName("pancake").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pancake"); nugget = new ItemLemon(200, 1F, false).setUnlocalizedName("nugget").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":nugget"); peas = new ItemPeas().setUnlocalizedName("peas").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":peas"); @@ -6709,7 +6705,6 @@ public class ModItems { GameRegistry.registerItem(med_ipecac, med_ipecac.getUnlocalizedName()); GameRegistry.registerItem(med_ptsd, med_ptsd.getUnlocalizedName()); GameRegistry.registerItem(canteen_vodka, canteen_vodka.getUnlocalizedName()); - GameRegistry.registerItem(canteen_fab, canteen_fab.getUnlocalizedName()); GameRegistry.registerItem(mucho_mango, mucho_mango.getUnlocalizedName()); GameRegistry.registerItem(chocolate, chocolate.getUnlocalizedName()); @@ -6833,7 +6828,6 @@ public class ModItems { GameRegistry.registerItem(wd40, wd40.getUnlocalizedName()); GameRegistry.registerItem(scrumpy, scrumpy.getUnlocalizedName()); GameRegistry.registerItem(wild_p, wild_p.getUnlocalizedName()); - GameRegistry.registerItem(fabsols_vodka, fabsols_vodka.getUnlocalizedName()); GameRegistry.registerItem(shackles, shackles.getUnlocalizedName()); GameRegistry.registerItem(injector_5htp, injector_5htp.getUnlocalizedName()); GameRegistry.registerItem(injector_knife, injector_knife.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/armor/ItemModRevive.java b/src/main/java/com/hbm/items/armor/ItemModRevive.java index 57519ed89..c5a224f88 100644 --- a/src/main/java/com/hbm/items/armor/ItemModRevive.java +++ b/src/main/java/com/hbm/items/armor/ItemModRevive.java @@ -26,14 +26,13 @@ public class ItemModRevive extends ItemArmorMod { if(this == ModItems.wild_p) { list.add(EnumChatFormatting.DARK_GRAY + "Explosive " + EnumChatFormatting.RED + "Reactive " + EnumChatFormatting.DARK_GRAY + "Plot " + EnumChatFormatting.RED + "Armor"); } - if(this == ModItems.fabsols_vodka) { - list.add(EnumChatFormatting.ITALIC + "In the news:"); - list.add(EnumChatFormatting.RED + "" + EnumChatFormatting.BOLD + "Man literally too angry to die."); - list.add(""); - list.add(EnumChatFormatting.ITALIC + "\"I ain't got time to die\" says local"); - list.add(EnumChatFormatting.ITALIC + "man after ripping the physical manifestation"); - list.add(EnumChatFormatting.ITALIC + "of disaster itself in half."); - } + + /*list.add(EnumChatFormatting.ITALIC + "In the news:"); + list.add(EnumChatFormatting.RED + "" + EnumChatFormatting.BOLD + "Man literally too angry to die."); + list.add(""); + list.add(EnumChatFormatting.ITALIC + "\"I ain't got time to die\" says local"); + list.add(EnumChatFormatting.ITALIC + "man after ripping the physical manifestation"); + list.add(EnumChatFormatting.ITALIC + "of disaster itself in half.");*/ list.add(""); list.add(EnumChatFormatting.GOLD + "" + (stack.getMaxDamage() - stack.getItemDamage()) + " revives left"); diff --git a/src/main/java/com/hbm/items/armor/JetpackBase.java b/src/main/java/com/hbm/items/armor/JetpackBase.java index 7b13478d7..f68814769 100644 --- a/src/main/java/com/hbm/items/armor/JetpackBase.java +++ b/src/main/java/com/hbm/items/armor/JetpackBase.java @@ -4,7 +4,6 @@ import java.util.List; import com.hbm.handler.ArmorModHandler; import com.hbm.render.model.ModelJetPack; -import com.hbm.util.ArmorUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -57,8 +56,6 @@ public abstract class JetpackBase extends ItemArmorMod { return; onArmorTick(entity.worldObj, (EntityPlayer)entity, jetpack); - ArmorUtil.resetFlightTime((EntityPlayer)entity); - ArmorModHandler.applyMod(armor, jetpack); } diff --git a/src/main/java/com/hbm/items/armor/JetpackBooster.java b/src/main/java/com/hbm/items/armor/JetpackBooster.java index bbc157b7f..9b4f463c5 100644 --- a/src/main/java/com/hbm/items/armor/JetpackBooster.java +++ b/src/main/java/com/hbm/items/armor/JetpackBooster.java @@ -7,6 +7,7 @@ import com.hbm.handler.threading.PacketThreading; import com.hbm.inventory.fluid.FluidType; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.util.ArmorUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; @@ -63,6 +64,7 @@ public class JetpackBooster extends JetpackFueledBase { world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.0F); this.useUpFuel(player, stack, 1); + ArmorUtil.resetFlightTime(player); } } diff --git a/src/main/java/com/hbm/items/armor/JetpackBreak.java b/src/main/java/com/hbm/items/armor/JetpackBreak.java index cb9962d7c..029b00486 100644 --- a/src/main/java/com/hbm/items/armor/JetpackBreak.java +++ b/src/main/java/com/hbm/items/armor/JetpackBreak.java @@ -6,6 +6,7 @@ import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.threading.PacketThreading; import com.hbm.inventory.fluid.FluidType; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.util.ArmorUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; @@ -37,9 +38,9 @@ public class JetpackBreak extends JetpackFueledBase { if(getFuel(stack) > 0 && (props.isJetpackActive() || (!player.onGround && !player.isSneaking() && props.enableBackpack))) { - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "jetpack"); - data.setInteger("player", player.getEntityId()); + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "jetpack"); + data.setInteger("player", player.getEntityId()); PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); } } @@ -70,17 +71,18 @@ public class JetpackBreak extends JetpackFueledBase { world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); this.useUpFuel(player, stack, 10); + ArmorUtil.resetFlightTime(player); } } - } + } - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - list.add("Regular jetpack that will automatically hover mid-air."); - list.add("Sneaking will stop hover mode."); - list.add("Hover mode will consume less fuel and increase air-mobility."); + list.add("Regular jetpack that will automatically hover mid-air."); + list.add("Sneaking will stop hover mode."); + list.add("Hover mode will consume less fuel and increase air-mobility."); - super.addInformation(stack, player, list, ext); - } + super.addInformation(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/items/armor/JetpackRegular.java b/src/main/java/com/hbm/items/armor/JetpackRegular.java index b5e52ea67..3779a9946 100644 --- a/src/main/java/com/hbm/items/armor/JetpackRegular.java +++ b/src/main/java/com/hbm/items/armor/JetpackRegular.java @@ -6,6 +6,7 @@ import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.threading.PacketThreading; import com.hbm.inventory.fluid.FluidType; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.util.ArmorUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; @@ -50,6 +51,7 @@ public class JetpackRegular extends JetpackFueledBase { world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); this.useUpFuel(player, stack, 5); + ArmorUtil.resetFlightTime(player); } } diff --git a/src/main/java/com/hbm/items/armor/JetpackVectorized.java b/src/main/java/com/hbm/items/armor/JetpackVectorized.java index 877f68909..27b306906 100644 --- a/src/main/java/com/hbm/items/armor/JetpackVectorized.java +++ b/src/main/java/com/hbm/items/armor/JetpackVectorized.java @@ -6,6 +6,7 @@ import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.threading.PacketThreading; import com.hbm.inventory.fluid.FluidType; import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.util.ArmorUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; @@ -62,6 +63,7 @@ public class JetpackVectorized extends JetpackFueledBase { world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); this.useUpFuel(player, stack, 3); + ArmorUtil.resetFlightTime(player); } } diff --git a/src/main/java/com/hbm/items/food/ItemCanteen.java b/src/main/java/com/hbm/items/food/ItemCanteen.java index 81a3c20b0..e344a4712 100644 --- a/src/main/java/com/hbm/items/food/ItemCanteen.java +++ b/src/main/java/com/hbm/items/food/ItemCanteen.java @@ -35,18 +35,11 @@ public class ItemCanteen extends Item { public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player) { stack.setItemDamage(stack.getMaxDamage()); - if (this == ModItems.canteen_vodka) { + if(this == ModItems.canteen_vodka) { player.addPotionEffect(new PotionEffect(Potion.confusion.id, 10 * 20, 0)); player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 30 * 20, 2)); } - if (this == ModItems.canteen_fab) { - player.heal(10F); - player.addPotionEffect(new PotionEffect(Potion.confusion.id, 15 * 20, 0)); - player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 60 * 20, 2)); - player.addPotionEffect(new PotionEffect(Potion.resistance.id, 60 * 20, 2)); - player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 60 * 20, 1)); - } - + VersatileConfig.applyPotionSickness(player, 5); return stack; @@ -64,34 +57,27 @@ public class ItemCanteen extends Item { @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - if (stack.getItemDamage() == 0 && !VersatileConfig.hasPotionSickness(player)) + if(stack.getItemDamage() == 0 && !VersatileConfig.hasPotionSickness(player)) player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); return stack; } - - @Override + + @Override @SideOnly(Side.CLIENT) - public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List list, boolean p_77624_4_) - { - if(this == ModItems.canteen_vodka) - { + public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List list, boolean p_77624_4_) { + if(this == ModItems.canteen_vodka) { list.add("Cooldown: 3 minutes"); list.add("Nausea I for 10 seconds"); list.add("Strength III for 30 seconds"); list.add(""); - - if(MainRegistry.polaroidID == 11) - //list.add("Why sipp when you can succ?"); + + if(MainRegistry.polaroidID == 11) + // list.add("Why sipp when you can succ?"); list.add("Time to get hammered & sickled!"); - else - list.add("Smells like disinfectant, tastes like disinfectant."); - } - if(this == ModItems.canteen_fab) - { - list.add("Cooldown: 2 minutes"); - list.add("Engages the fab drive"); - } - } + else + list.add("Smells like disinfectant, tastes like disinfectant."); + } + } } diff --git a/src/main/java/com/hbm/items/special/ItemSyringe.java b/src/main/java/com/hbm/items/special/ItemSyringe.java index b2c6be5b5..0a4800953 100644 --- a/src/main/java/com/hbm/items/special/ItemSyringe.java +++ b/src/main/java/com/hbm/items/special/ItemSyringe.java @@ -9,7 +9,6 @@ import com.hbm.handler.ArmorModHandler; import com.hbm.interfaces.Spaghetti; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; -import com.hbm.items.weapon.ItemGunBase; import com.hbm.potion.HbmPotion; import api.hbm.fluidmk2.IFillableItem; @@ -226,41 +225,6 @@ public class ItemSyringe extends Item { } } - if(this == ModItems.gun_kit_1 || this == ModItems.gun_kit_2) { - if(!world.isRemote) { - float repair = 0; - - if(this == ModItems.gun_kit_1) { - repair = 0.1F; - world.playSoundAtEntity(player, "hbm:item.spray", 1.0F, 1.0F); - } - if(this == ModItems.gun_kit_2) { - repair = 0.5F; - world.playSoundAtEntity(player, "hbm:item.repair", 1.0F, 1.0F); - } - - for(int i = 0; i < 9; i++) { - - ItemStack gun = player.inventory.mainInventory[i]; - - if(gun != null && gun.getItem() instanceof ItemGunBase) { - - int full = ((ItemGunBase) gun.getItem()).mainConfig.durability; - int wear = ItemGunBase.getItemWear(gun); - - int nWear = (int) (wear - (full * repair)); - - if(nWear < 0) - nWear = 0; - - ItemGunBase.setItemWear(gun, nWear); - } - } - - stack.stackSize--; - } - } - if(this == ModItems.cbt_device) { if(!world.isRemote) { player.addPotionEffect(new PotionEffect(HbmPotion.bang.id, 30, 0)); diff --git a/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java b/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java deleted file mode 100644 index 12340864e..000000000 --- a/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java +++ /dev/null @@ -1,288 +0,0 @@ -package com.hbm.items.weapon; - -import java.util.List; - -import org.lwjgl.input.Mouse; - -import com.hbm.config.GeneralConfig; -import com.hbm.handler.BulletConfigSyncingUtil; -import com.hbm.handler.BulletConfiguration; -import com.hbm.handler.GunConfiguration; -import com.hbm.interfaces.IHoldableWeapon; -import com.hbm.items.weapon.sedna.Crosshair; -import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toclient.GunAnimationPacket; -import com.hbm.packet.toserver.GunButtonPacket; -import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay; -import com.hbm.util.BobMathUtil; -import com.hbm.util.ChatBuilder; - -import api.hbm.energymk2.IBatteryItem; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.Minecraft; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; -import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; - -public class ItemEnergyGunBase extends ItemGunBase implements IBatteryItem { - - public ItemEnergyGunBase(GunConfiguration config) { - super(config); - } - - public ItemEnergyGunBase(GunConfiguration config, GunConfiguration alt) { - super(config, alt); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { - list.add("Energy Stored: " + BobMathUtil.getShortNumber(getCharge(stack)) + "/" + BobMathUtil.getShortNumber(mainConfig.maxCharge) + "HE"); - list.add("Charge rate: " + BobMathUtil.getShortNumber(mainConfig.chargeRate) + "HE/t"); - - addAdditionalInformation(stack, list); - } - - @Override - @SideOnly(Side.CLIENT) - protected void updateClient(ItemStack stack, World world, EntityPlayer entity, int slot, boolean isCurrentItem) { - - if(!world.isRemote) - return; - - boolean clickLeft = Mouse.isButtonDown(0); - boolean clickRight = Mouse.isButtonDown(1); - boolean left = m1; - boolean right = m2; - - if(isCurrentItem) { - if(left && right) { - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0)); - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1)); - m1 = false; - m2 = false; - } - - if(left && !clickLeft) { - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0)); - m1 = false; - endActionClient(stack, world, entity, true); - } - - if(right && !clickRight) { - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1)); - m2 = false; - endActionClient(stack, world, entity, false); - } - } - } - - protected void updateServer(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) { - - if(getDelay(stack) > 0 && isCurrentItem) - setDelay(stack, getDelay(stack) - 1); - - if(getIsMouseDown(stack) && !(player.getHeldItem() == stack)) { - setIsMouseDown(stack, false); - } - - if(getIsAltDown(stack) && !isCurrentItem) { - setIsAltDown(stack, false); - } - - if(GeneralConfig.enableGuns && mainConfig.firingMode == 1 && getIsMouseDown(stack) && tryShoot(stack, world, player, isCurrentItem)) { - - fire(stack, world, player); - setDelay(stack, getConfig(stack).firingRate); - } - } - - protected boolean tryShoot(ItemStack stack, World world, EntityPlayer player, boolean main) { - - - if(main && getDelay(stack) == 0) { - return getConfig(stack).dischargePerShot <= getCharge(stack); - } - - return false; - } - - protected void fire(ItemStack stack, World world, EntityPlayer player) { - - BulletConfiguration config = getConfig(stack); - - int bullets = config.bulletsMin; - - for(int k = 0; k < mainConfig.roundsPerCycle; k++) { - - if(config.bulletsMax > config.bulletsMin) - bullets += world.rand.nextInt(config.bulletsMax - config.bulletsMin); - - for(int i = 0; i < bullets; i++) { - spawnProjectile(world, player, stack, BulletConfigSyncingUtil.getKey(config)); - } - - if(player instanceof EntityPlayerMP) - PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.CYCLE.ordinal()), (EntityPlayerMP) player); - - setCharge(stack, getCharge(stack) - config.dischargePerShot);; - } - - world.playSoundAtEntity(player, mainConfig.firingSound, 1.0F, mainConfig.firingPitch); - } - - public void startAction(ItemStack stack, World world, EntityPlayer player, boolean main) { - - if(mainConfig.firingMode == GunConfiguration.FIRE_MANUAL && main && tryShoot(stack, world, player, main)) { - fire(stack, world, player); - setDelay(stack, mainConfig.rateOfFire); - - } - - if(!main && stack.getItem() instanceof ItemEnergyGunBase) { - - byte mode = stack.hasTagCompound() ? stack.getTagCompound().getByte("mode") : 0; - - if(!stack.hasTagCompound()) - stack.stackTagCompound = new NBTTagCompound(); - - mode++; - if(mode >= mainConfig.config.size()) { - mode = 0; - } - - stack.getTagCompound().setByte("mode", mode); - - if(!world.isRemote) { - BulletConfiguration config = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(mode)); - //PacketDispatcher.wrapper.sendTo(new PlayerInformPacket("" + config.chatColour + config.modeName, MainRegistry.proxy.ID_GUN_MODE), (EntityPlayerMP)player); - - player.addChatMessage(ChatBuilder.start("") - .nextTranslation("weapon.elecGun.modeChange").color(EnumChatFormatting.WHITE) - .nextTranslation(" ") - .nextTranslation(config.modeName).color(config.chatColour).flush()); - } - } - } - - // yummy boilerplate - - public boolean showDurabilityBar(ItemStack stack) { - return true; - } - - public double getDurabilityForDisplay(ItemStack stack) { - return 1D - (double) getCharge(stack) / (double) getMaxCharge(stack); - } - - @Override - public void chargeBattery(ItemStack stack, long i) { - if(stack.getItem() instanceof ItemEnergyGunBase) { - if(stack.hasTagCompound()) { - stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") + i); - } else { - stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setLong("charge", i); - } - } - } - - @Override - public void setCharge(ItemStack stack, long i) { - if(stack.getItem() instanceof ItemEnergyGunBase) { - if(stack.hasTagCompound()) { - stack.stackTagCompound.setLong("charge", i); - } else { - stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setLong("charge", i); - } - } - } - - @Override - public void dischargeBattery(ItemStack stack, long i) { - if(stack.getItem() instanceof ItemEnergyGunBase) { - if(stack.hasTagCompound()) { - stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") - i); - } else { - stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setLong("charge", ((ItemEnergyGunBase)stack.getItem()).mainConfig.maxCharge - i); - } - } - } - - @Override - public long getCharge(ItemStack stack) { - if(stack.getItem() instanceof ItemEnergyGunBase) { - if(stack.hasTagCompound()) { - return stack.stackTagCompound.getLong("charge"); - } else { - stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setLong("charge", ((ItemEnergyGunBase) stack.getItem()).mainConfig.maxCharge); - return stack.stackTagCompound.getLong("charge"); - } - } - - return 0; - } - - @Override - public long getMaxCharge(ItemStack stack) { - return mainConfig.maxCharge; - } - - @Override - public long getChargeRate() { - return mainConfig.chargeRate; - } - - @Override - public long getDischargeRate() { - return 0; - } - - public BulletConfiguration getConfig(ItemStack stack) { - - byte mode = 0; - - if(stack.hasTagCompound()) - mode = stack.getTagCompound().getByte("mode"); - - return BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(mode)); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs tab, List list) { - - ItemStack stack = new ItemStack(item); - stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setLong("charge", ((ItemEnergyGunBase) item).getMaxCharge(stack)); - - list.add(stack); - } - - @Override - @SideOnly(Side.CLIENT) - public void renderHUD(Pre event, ElementType type, EntityPlayer player, ItemStack stack) { - - if(type == ElementType.CROSSHAIRS && GeneralConfig.enableCrosshairs) { - - event.setCanceled(true); - - if(!(mainConfig.hasSights && player.isSneaking())) - RenderScreenOverlay.renderCustomCrosshairs(event.resolution, Minecraft.getMinecraft().ingameGUI, ((IHoldableWeapon)player.getHeldItem().getItem()).getCrosshair()); - else - RenderScreenOverlay.renderCustomCrosshairs(event.resolution, Minecraft.getMinecraft().ingameGUI, Crosshair.NONE); - } - } - -} diff --git a/src/main/java/com/hbm/items/weapon/ItemGunBase.java b/src/main/java/com/hbm/items/weapon/ItemGunBase.java deleted file mode 100644 index 27f9b78a9..000000000 --- a/src/main/java/com/hbm/items/weapon/ItemGunBase.java +++ /dev/null @@ -1,847 +0,0 @@ -package com.hbm.items.weapon; - -import java.util.List; - -import com.hbm.handler.threading.PacketThreading; -import org.lwjgl.input.Mouse; - -import com.hbm.config.GeneralConfig; -import com.hbm.entity.projectile.EntityBulletBaseNT; -import com.hbm.handler.BulletConfigSyncingUtil; -import com.hbm.handler.BulletConfiguration; -import com.hbm.handler.CasingEjector; -import com.hbm.handler.GunConfiguration; -import com.hbm.handler.HbmKeybinds; -import com.hbm.interfaces.IHoldableWeapon; -import com.hbm.interfaces.IItemHUD; -import com.hbm.inventory.RecipesCommon.ComparableStack; -import com.hbm.items.IEquipReceiver; -import com.hbm.items.armor.ArmorTrenchmaster; -import com.hbm.items.weapon.sedna.Crosshair; -import com.hbm.lib.HbmCollection; -import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.packet.toclient.GunAnimationPacket; -import com.hbm.packet.toserver.GunButtonPacket; -import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay; -import com.hbm.util.I18nUtil; -import com.hbm.util.InventoryUtil; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.Minecraft; -import net.minecraft.client.settings.GameSettings; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; -import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; - -@Deprecated -public class ItemGunBase extends Item implements IHoldableWeapon, IItemHUD, IEquipReceiver { - - public GunConfiguration mainConfig; - public GunConfiguration altConfig; - - @SideOnly(Side.CLIENT) - public boolean m1;// = false; - @SideOnly(Side.CLIENT) - public boolean m2;// = false; - - public ItemGunBase(GunConfiguration config) { - mainConfig = config; - this.setMaxStackSize(1); - } - - public ItemGunBase(GunConfiguration config, GunConfiguration alt) { - this(config); - altConfig = alt; - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) { - - if(entity instanceof EntityPlayer) { - - isCurrentItem = ((EntityPlayer)entity).getHeldItem() == stack; - - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && world.isRemote) { - updateClient(stack, world, (EntityPlayer)entity, slot, isCurrentItem); - } else { - updateServer(stack, world, (EntityPlayer)entity, slot, isCurrentItem); - } - } - } - - @SideOnly(Side.CLIENT) - protected void updateClient(ItemStack stack, World world, EntityPlayer entity, int slot, boolean isCurrentItem) { - - if(!world.isRemote) - return; - - boolean clickLeft = Mouse.isButtonDown(0); - boolean clickRight = Mouse.isButtonDown(1); - boolean left = m1; - boolean right = m2; - - if(isCurrentItem) { - if(left && right) { - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0)); - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1)); - m1 = false; - m2 = false; - } - - if(left && !clickLeft) { - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0)); - m1 = false; - endActionClient(stack, world, entity, true); - } - - if(right && !clickRight) { - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1)); - m2 = false; - endActionClient(stack, world, entity, false); - } - - if(mainConfig.reloadType != GunConfiguration.RELOAD_NONE || (altConfig != null && altConfig.reloadType != 0)) { - - if(GameSettings.isKeyDown(HbmKeybinds.reloadKey) && Minecraft.getMinecraft().currentScreen == null && (getMag(stack) < mainConfig.ammoCap || hasInfinity(stack, mainConfig))) { - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 2)); - setIsReloading(stack, true); - resetReloadCycle(entity, stack); - } - } - } - } - - protected void updateServer(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) { - - if(getDelay(stack) > 0 && isCurrentItem) - setDelay(stack, getDelay(stack) - 1); - - if(getIsMouseDown(stack) && !(player.getHeldItem() == stack)) { - setIsMouseDown(stack, false); - } - - int burstDuration = getBurstDuration(stack); - if(burstDuration > 0) { - - if(altConfig == null) { - if (burstDuration % mainConfig.firingDuration == 0 && tryShoot(stack, world, player, true)) { - fire(stack, world, player); - } - } else { - boolean canFire = altConfig.firingDuration == 1 || burstDuration % altConfig.firingDuration == 0; - if (canFire && tryShoot(stack, world, player, false)) { - altFire(stack, world, player); - } - } - - setBurstDuration(stack, getBurstDuration(stack) - 1); - if(getBurstDuration(stack) == 0) setDelay(stack, mainConfig.rateOfFire); - } - if(getIsAltDown(stack) && !isCurrentItem) { - setIsAltDown(stack, false); - } - - if(GeneralConfig.enableGuns && mainConfig.firingMode == 1 && getIsMouseDown(stack) && tryShoot(stack, world, player, isCurrentItem)) { - fire(stack, world, player); - setDelay(stack, mainConfig.rateOfFire); - } - - if(getIsReloading(stack) && isCurrentItem) { - reload2(stack, world, player); - } - - BulletConfiguration queued = getCasing(stack); - int timer = getCasingTimer(stack); - - if(queued != null && timer > 0) { - - timer--; - - if(timer <= 0) { - trySpawnCasing(player, mainConfig.ejector, queued, stack); - } - - setCasingTimer(stack, timer); - } - } - - //whether or not the gun can shoot in its current state - protected boolean tryShoot(ItemStack stack, World world, EntityPlayer player, boolean main) { - - //cancel reload when trying to shoot if it's a single reload weapon and at least one round is loaded - if(getIsReloading(stack) && mainConfig.reloadType == GunConfiguration.RELOAD_SINGLE && getMag(stack) > 0) { - setReloadCycle(stack, 0); - setIsReloading(stack, false); - } - - if(main && getDelay(stack) == 0 && !getIsReloading(stack) && getItemWear(stack) < mainConfig.durability) { - return hasAmmo(stack, player, main); - } - - if(!main && altConfig != null && getDelay(stack) == 0 && !getIsReloading(stack) && getItemWear(stack) < mainConfig.durability) { - - return hasAmmo(stack, player, false); - } - - return false; - } - - public boolean hasAmmo(ItemStack stack, EntityPlayer player, boolean main) { - - GunConfiguration config = mainConfig; - - if(!main) - config = altConfig; - - if(config.reloadType == GunConfiguration.RELOAD_NONE) { - return getBeltSize(player, getBeltType(player, stack, main)) > 0; - - } else { - //return getMag(stack) >= 0 + config.roundsPerCycle; - return getMag(stack) > 0; - } - } - - //called every time the gun shoots successfully, calls spawnProjectile(), sets item wear - protected void fire(ItemStack stack, World world, EntityPlayer player) { - - BulletConfiguration config = null; - - if(mainConfig.reloadType == GunConfiguration.RELOAD_NONE) { - config = getBeltCfg(player, stack, true); - } else { - config = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(getMagType(stack))); - } - - int bullets = config.bulletsMin; - - for(int k = 0; k < mainConfig.roundsPerCycle; k++) { - - if(!hasAmmo(stack, player, true)) - break; - - if(config.bulletsMax > config.bulletsMin) - bullets += world.rand.nextInt(config.bulletsMax - config.bulletsMin); - - for(int i = 0; i < bullets; i++) { - spawnProjectile(world, player, stack, BulletConfigSyncingUtil.getKey(config)); - } - - useUpAmmo(player, stack, true); - player.inventoryContainer.detectAndSendChanges(); - - int wear = (int) Math.ceil(config.wear / (1F + EnchantmentHelper.getEnchantmentLevel(Enchantment.unbreaking.effectId, stack))); - setItemWear(stack, getItemWear(stack) + wear); - } - - if(player instanceof EntityPlayerMP) { - AnimType animType = getMag(stack) == 0 ? AnimType.CYCLE_EMPTY : AnimType.CYCLE; - PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(animType.ordinal()), (EntityPlayerMP) player); - } - - String firingSound = mainConfig.firingSound; - if (getMag(stack) == 0 && mainConfig.firingSoundEmpty != null) firingSound = mainConfig.firingSoundEmpty; - world.playSoundAtEntity(player, firingSound, mainConfig.firingVolume, mainConfig.firingPitch); - - if(mainConfig.ejector != null && !mainConfig.ejector.getAfterReload()) - queueCasing(player, mainConfig.ejector, config, stack); - } - - //unlike fire(), being called does not automatically imply success, some things may still have to be handled before spawning the projectile - protected void altFire(ItemStack stack, World world, EntityPlayer player) { - - if(altConfig == null) - return; - - BulletConfiguration config = altConfig.reloadType == GunConfiguration.RELOAD_NONE ? getBeltCfg(player, stack, false) : BulletConfigSyncingUtil.pullConfig(altConfig.config.get(getMagType(stack))); - - int bullets = config.bulletsMin; - - for(int k = 0; k < altConfig.roundsPerCycle; k++) { - - if(altConfig.reloadType != GunConfiguration.RELOAD_NONE && !hasAmmo(stack, player, true)) - break; - - if(config.bulletsMax > config.bulletsMin) - bullets += world.rand.nextInt(config.bulletsMax - config.bulletsMin); - - for(int i = 0; i < bullets; i++) { - spawnProjectile(world, player, stack, BulletConfigSyncingUtil.getKey(config)); - } - - if(player instanceof EntityPlayerMP) - PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.ALT_CYCLE.ordinal()), (EntityPlayerMP) player); - - useUpAmmo(player, stack, false); - player.inventoryContainer.detectAndSendChanges(); - - setItemWear(stack, getItemWear(stack) + config.wear); - } - - world.playSoundAtEntity(player, altConfig.firingSound, mainConfig.firingVolume, altConfig.firingPitch); - - if(altConfig.ejector != null) - queueCasing(player, altConfig.ejector, config, stack); - } - - //spawns the actual projectile, can be overridden to change projectile entity - protected void spawnProjectile(World world, EntityPlayer player, ItemStack stack, int config) { - EntityBulletBaseNT bullet = new EntityBulletBaseNT(world, config, player); - world.spawnEntityInWorld(bullet); - } - - //called on click (server side, called by mouse packet) for semi-automatics and specific events - public void startAction(ItemStack stack, World world, EntityPlayer player, boolean main) { - - boolean validConfig = mainConfig.firingMode == GunConfiguration.FIRE_MANUAL || mainConfig.firingMode == GunConfiguration.FIRE_BURST; - - if(validConfig && main && tryShoot(stack, world, player, main)) { - - if(mainConfig.firingMode == GunConfiguration.FIRE_BURST){ - if(getBurstDuration(stack) <= 0) - setBurstDuration(stack,mainConfig.firingDuration * mainConfig.roundsPerBurst); - } else { - fire(stack, world, player); - setDelay(stack, mainConfig.rateOfFire); - } - } - - if(!main && altConfig != null && tryShoot(stack, world, player, main)) { - - if(altConfig.firingMode == GunConfiguration.FIRE_BURST && getBurstDuration(stack) <= 0){ - setBurstDuration(stack,altConfig.firingDuration * altConfig.roundsPerBurst); - } else { - altFire(stack, world, player); - setDelay(stack, altConfig.rateOfFire); - } - } - } - - //called on click (client side, called by mouse click event) - public void startActionClient(ItemStack stack, World world, EntityPlayer player, boolean main) { } - - //called on click release (server side, called by mouse packet) for release actions like charged shots - public void endAction(ItemStack stack, World world, EntityPlayer player, boolean main) { } - - //called on click release (client side, called by update cycle) - public void endActionClient(ItemStack stack, World world, EntityPlayer player, boolean main) { } - - //current reload - protected void reload2(ItemStack stack, World world, EntityPlayer player) { - - if(getMag(stack) >= mainConfig.ammoCap) { - setIsReloading(stack, false); - return; - } - - if(getReloadCycle(stack) <= 0) { - - BulletConfiguration prevCfg = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(getMagType(stack))); - - BulletConfiguration cfg = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(getMagType(stack))); - ComparableStack ammo = (ComparableStack) cfg.ammo.copy(); - - final int countNeeded = (mainConfig.reloadType == GunConfiguration.RELOAD_FULL) ? mainConfig.ammoCap - getMag(stack) : 1; - final int availableStacks = InventoryUtil.countAStackMatches(player, ammo, true); - final int availableFills = availableStacks * cfg.ammoCount; - final boolean hasLoaded = availableFills > 0; - final int toAdd = Math.min(availableFills * cfg.ammoCount, countNeeded); - final int toConsume = (int) Math.ceil((double) toAdd / cfg.ammoCount); - - // Skip logic if cannot reload - if(availableFills == 0) { - setIsReloading(stack, false); - return; - } - - String reloadSound = mainConfig.reloadSoundEmpty != null && getMag(stack) == 0 ? mainConfig.reloadSoundEmpty : mainConfig.reloadSound; - - ammo.stacksize = toConsume; - setMag(stack, getMag(stack) + toAdd); - if (getMag(stack) >= mainConfig.ammoCap) { - setIsReloading(stack, false); - PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.RELOAD_END.ordinal()), (EntityPlayerMP) player); - } else { - resetReloadCycle(player, stack); - AnimType animType = availableFills <= 1 ? AnimType.RELOAD_END : AnimType.RELOAD_CYCLE; - PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(animType.ordinal()), (EntityPlayerMP) player); - if (availableFills > 1 && !mainConfig.reloadSoundEnd) - world.playSoundAtEntity(player, reloadSound, 1.0F, 1.0F); - } - - if(hasLoaded && mainConfig.reloadSoundEnd) - world.playSoundAtEntity(player, reloadSound, 1.0F, 1.0F); - - if(mainConfig.ejector != null && mainConfig.ejector.getAfterReload()) - queueCasing(player, mainConfig.ejector, prevCfg, stack); - - InventoryUtil.tryConsumeAStack(player.inventory.mainInventory, 0, player.inventory.mainInventory.length - 1, ammo); - } else { - setReloadCycle(stack, getReloadCycle(stack) - 1); - } - - if(stack != player.getHeldItem()) { - setReloadCycle(stack, 0); - setIsReloading(stack, false); - } - } - - //initiates a reload - public void startReloadAction(ItemStack stack, World world, EntityPlayer player) { - - if(getMag(stack) == 0) - resetAmmoType(stack, world, player); - - if(player.isSneaking() && hasInfinity(stack, mainConfig)) { - - if(getMag(stack) == mainConfig.ammoCap) { - setMag(stack, 0); - this.resetAmmoType(stack, world, player); - world.playSoundAtEntity(player, "tile.piston.out", 1.0F, 1.0F); - } - - return; - } - - if(getMag(stack) == mainConfig.ammoCap) - return; - - if(getIsReloading(stack)) - return; - - if(!mainConfig.reloadSoundEnd) { - String reloadSound = mainConfig.reloadSoundEmpty != null && getMag(stack) == 0 ? mainConfig.reloadSoundEmpty : mainConfig.reloadSound; - world.playSoundAtEntity(player, reloadSound, 1.0F, 1.0F); - } - - if(!world.isRemote) { - AnimType reloadType = getMag(stack) == 0 ? AnimType.RELOAD_EMPTY : AnimType.RELOAD; - PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(reloadType.ordinal()), (EntityPlayerMP) player); - } - - setIsReloading(stack, true); - resetReloadCycle(player, stack); - } - - public boolean canReload(ItemStack stack, World world, EntityPlayer player) { - - if(getMag(stack) == mainConfig.ammoCap && hasInfinity(stack, mainConfig)) - return true; - - if(getMag(stack) == 0) { - - for(int config : mainConfig.config) { - if(InventoryUtil.doesPlayerHaveAStack(player, BulletConfigSyncingUtil.pullConfig(config).ammo, false, false)) { - return true; - } - } - - } else { - ComparableStack ammo = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(getMagType(stack))).ammo; - return InventoryUtil.doesPlayerHaveAStack(player, ammo, false, false); - } - - return false; - } - - //searches the player's inv for next fitting ammo type and changes the gun's mag - protected void resetAmmoType(ItemStack stack, World world, EntityPlayer player) { - - for(int config : mainConfig.config) { - BulletConfiguration cfg = BulletConfigSyncingUtil.pullConfig(config); - - if(InventoryUtil.doesPlayerHaveAStack(player, cfg.ammo, false, false)) { - setMagType(stack, mainConfig.config.indexOf(config)); - break; - } - } - } - - //item mouseover text - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { - - ComparableStack ammo = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(getMagType(stack))).ammo; - - list.add(I18nUtil.resolveKey(HbmCollection.ammo, mainConfig.ammoCap > 0 ? I18nUtil.resolveKey(HbmCollection.ammoMag, getMag(stack), mainConfig.ammoCap) : I18nUtil.resolveKey(HbmCollection.ammoBelt))); - - try { - list.add(I18nUtil.resolveKey(HbmCollection.ammoType, ammo.toStack().getDisplayName())); - - if(altConfig != null && altConfig.ammoCap == 0) { - ComparableStack ammo2 = BulletConfigSyncingUtil.pullConfig(altConfig.config.get(0)).ammo; - if(!ammo.isApplicable(ammo2)) { - list.add(I18nUtil.resolveKey(HbmCollection.altAmmoType, ammo2.toStack().getDisplayName())); - } - } - } - catch (Exception e) - { - e.printStackTrace(); - list.add("Error: " + e + " has occurred!"); - } - - addAdditionalInformation(stack, list); - } - - protected void addAdditionalInformation(ItemStack stack, List list) { - final BulletConfiguration bulletConfig = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(getMagType(stack))); - list.add(I18nUtil.resolveKey(HbmCollection.gunDamage, bulletConfig.dmgMin, bulletConfig.dmgMax)); - if(bulletConfig.bulletsMax != 1) - list.add(I18nUtil.resolveKey(HbmCollection.gunPellets, bulletConfig.bulletsMin, bulletConfig.bulletsMax)); - int dura = Math.max(mainConfig.durability - getItemWear(stack), 0); - - list.add(I18nUtil.resolveKey(HbmCollection.durability, dura + " / " + mainConfig.durability)); - - list.add(""); - String unloc = "gun.name." + mainConfig.name; - String loc = I18nUtil.resolveKey(unloc); - list.add(I18nUtil.resolveKey(HbmCollection.gunName, unloc.equals(loc) ? mainConfig.name : loc)); - list.add(I18nUtil.resolveKey(HbmCollection.gunMaker, I18nUtil.resolveKey(mainConfig.manufacturer.getKey()))); - - if(!mainConfig.comment.isEmpty()) { - list.add(""); - for(String s : mainConfig.comment) - list.add(EnumChatFormatting.ITALIC + s); - } - if(GeneralConfig.enableExtendedLogging) { - list.add(""); - list.add("Type: " + getMagType(stack)); - list.add("Is Reloading: " + getIsReloading(stack)); - list.add("Reload Cycle: " + getReloadCycle(stack)); - list.add("RoF Cooldown: " + getDelay(stack)); - } - } - - //returns ammo item of belt-weapons - public static ComparableStack getBeltType(EntityPlayer player, ItemStack stack, boolean main) { - ItemGunBase gun = (ItemGunBase)stack.getItem(); - GunConfiguration guncfg = main ? gun.mainConfig : (gun.altConfig != null ? gun.altConfig : gun.mainConfig); - - for(Integer config : guncfg.config) { - - BulletConfiguration cfg = BulletConfigSyncingUtil.pullConfig(config); - - if(InventoryUtil.doesPlayerHaveAStack(player, cfg.ammo, false, true)) { - return cfg.ammo; - } - } - - return BulletConfigSyncingUtil.pullConfig(guncfg.config.get(0)).ammo; - } - - //returns BCFG of belt-weapons - public static BulletConfiguration getBeltCfg(EntityPlayer player, ItemStack stack, boolean main) { - ItemGunBase gun = (ItemGunBase)stack.getItem(); - GunConfiguration guncfg = main ? gun.mainConfig : (gun.altConfig != null ? gun.altConfig : gun.mainConfig); - getBeltType(player, stack, main); - - for(int config : guncfg.config) { - - BulletConfiguration cfg = BulletConfigSyncingUtil.pullConfig(config); - - if(InventoryUtil.doesPlayerHaveAStack(player, cfg.ammo, false, false)) { - return cfg; - } - } - - return BulletConfigSyncingUtil.pullConfig(guncfg.config.get(0)); - } - - //returns ammo capacity of belt-weapons for current ammo - public static int getBeltSize(EntityPlayer player, ComparableStack ammo) { - - int amount = 0; - - for(ItemStack stack : player.inventory.mainInventory) { - if(stack != null && ammo.matchesRecipe(stack, true)) { - amount += stack.stackSize; - } - } - - return amount; - } - - //reduces ammo count for mag and belt-based weapons, should be called AFTER firing - public void useUpAmmo(EntityPlayer player, ItemStack stack, boolean main) { - - if(!main && altConfig == null) - return; - - GunConfiguration config = mainConfig; - - if(!main) - config = altConfig; - - if(hasInfinity(stack, config)) return; - if(ArmorTrenchmaster.isTrenchMaster(player) && player.getRNG().nextInt(3) == 0) return; - if(ArmorTrenchmaster.hasAoS(player) && player.getRNG().nextInt(3) == 0) return; - - if(config.reloadType != GunConfiguration.RELOAD_NONE) { - setMag(stack, getMag(stack) - 1); - } else { - InventoryUtil.doesPlayerHaveAStack(player, getBeltType(player, stack, main), true, false); - } - } - - public boolean hasInfinity(ItemStack stack, GunConfiguration config) { - return config.allowsInfinity && EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0; - } - - /// sets reload cycle to config defult /// - public static void resetReloadCycle(EntityPlayer player, ItemStack stack) { - writeNBT(stack, "reload", getReloadDuration(player, stack)); - } - - /// if reloading routine is active /// - public static void setIsReloading(ItemStack stack, boolean b) { - writeNBT(stack, "isReloading", b ? 1 : 0); - } - - public static boolean getIsReloading(ItemStack stack) { - return readNBT(stack, "isReloading") == 1; - } - - /// if left mouse button is down /// - public static void setIsMouseDown(ItemStack stack, boolean b) { - writeNBT(stack, "isMouseDown", b ? 1 : 0); - } - - public static boolean getIsMouseDown(ItemStack stack) { - return readNBT(stack, "isMouseDown") == 1; - } - - /// if alt mouse button is down /// - public static void setIsAltDown(ItemStack stack, boolean b) { - writeNBT(stack, "isAltDown", b ? 1 : 0); - } - - public static boolean getIsAltDown(ItemStack stack) { - return readNBT(stack, "isAltDown") == 1; - } - - /// RoF cooldown /// - public static void setDelay(ItemStack stack, int i) { - writeNBT(stack, "dlay", i); - } - - public static int getDelay(ItemStack stack) { - return readNBT(stack, "dlay"); - } - - /// Gun wear /// - public static void setItemWear(ItemStack stack, int i) { - writeNBT(stack, "wear", i); - } - - public static int getItemWear(ItemStack stack) { - return readNBT(stack, "wear"); - } - - /// R/W cycle animation timer /// - public static void setCycleAnim(ItemStack stack, int i) { - writeNBT(stack, "cycle", i); - } - - public static int getCycleAnim(ItemStack stack) { - return readNBT(stack, "cycle"); - } - - /// R/W reload animation timer /// - public static void setReloadCycle(ItemStack stack, int i) { - writeNBT(stack, "reload", i); - } - - public static int getReloadCycle(ItemStack stack) { - return readNBT(stack, "reload"); - } - - /// magazine capacity /// - public static void setMag(ItemStack stack, int i) { - writeNBT(stack, "magazine", i); - } - - public static int getMag(ItemStack stack) { - return readNBT(stack, "magazine"); - } - - /// magazine type (int specified by index in bullet config list) /// - public static void setMagType(ItemStack stack, int i) { - writeNBT(stack, "magazineType", i); - } - - public static int getMagType(ItemStack stack) { - return readNBT(stack, "magazineType"); - } - /// Sets how long a burst fires for, only useful for burst fire weapons /// - public static void setBurstDuration(ItemStack stack, int i) { - writeNBT(stack, "bduration", i); - } - - public static int getBurstDuration(ItemStack stack) { - return readNBT(stack, "bduration"); - } - - /// queued casing for ejection /// - public static void setCasing(ItemStack stack, BulletConfiguration bullet) { - writeNBT(stack, "casing", BulletConfigSyncingUtil.getKey(bullet)); - } - - public static BulletConfiguration getCasing(ItemStack stack) { - return BulletConfigSyncingUtil.pullConfig(readNBT(stack, "casing")); - } - - /// timer for ejecting casing /// - public static void setCasingTimer(ItemStack stack, int i) { - writeNBT(stack, "casingTimer", i); - } - - public static int getCasingTimer(ItemStack stack) { - return readNBT(stack, "casingTimer"); - } - - /// NBT utility /// - public static void writeNBT(ItemStack stack, String key, int value) { - - if(!stack.hasTagCompound()) - stack.stackTagCompound = new NBTTagCompound(); - - stack.stackTagCompound.setInteger(key, value); - } - - public static int readNBT(ItemStack stack, String key) { - - if(!stack.hasTagCompound()) - return 0; - - return stack.stackTagCompound.getInteger(key); - } - - @Override - public Crosshair getCrosshair() { - return mainConfig.crosshair; - } - - @Override - @SideOnly(Side.CLIENT) - public void renderHUD(Pre event, ElementType type, EntityPlayer player, ItemStack stack) { - - ItemGunBase gun = ((ItemGunBase)stack.getItem()); - GunConfiguration gcfg = gun.mainConfig; - - if(type == ElementType.HOTBAR) { - int mag = ItemGunBase.getMagType(stack); - if(gun.mainConfig.config.size() == 0) return; - BulletConfiguration bcfg = BulletConfigSyncingUtil.pullConfig(gun.mainConfig.config.get(mag < gun.mainConfig.config.size() ? mag : 0)); - - if(bcfg == null) { - return; - } - - ComparableStack ammo = bcfg.ammo; - int count = ItemGunBase.getMag(stack); - int max = gcfg.ammoCap; - boolean showammo = gcfg.showAmmo; - - if(gcfg.reloadType == GunConfiguration.RELOAD_NONE) { - ammo = ItemGunBase.getBeltType(player, stack, true); - count = ItemGunBase.getBeltSize(player, ammo); - max = -1; - } - - int dura = ItemGunBase.getItemWear(stack) * 50 / gcfg.durability; - - RenderScreenOverlay.renderAmmo(event.resolution, Minecraft.getMinecraft().ingameGUI, ammo.toStack(), count, max, dura, showammo); - - if(gun.altConfig != null && gun.altConfig.reloadType == GunConfiguration.RELOAD_NONE) { - ComparableStack oldAmmo = ammo; - ammo = ItemGunBase.getBeltType(player, stack, false); - - if(!ammo.isApplicable(oldAmmo)) { - count = ItemGunBase.getBeltSize(player, ammo); - RenderScreenOverlay.renderAmmoAlt(event.resolution, Minecraft.getMinecraft().ingameGUI, ammo.toStack(), count); - } - } - } - - if(type == ElementType.CROSSHAIRS && GeneralConfig.enableCrosshairs) { - - event.setCanceled(true); - - if(!(gcfg.hasSights && player.isSneaking())) - RenderScreenOverlay.renderCustomCrosshairs(event.resolution, Minecraft.getMinecraft().ingameGUI, ((IHoldableWeapon)player.getHeldItem().getItem()).getCrosshair()); - else - RenderScreenOverlay.renderCustomCrosshairs(event.resolution, Minecraft.getMinecraft().ingameGUI, Crosshair.NONE); - } - } - - @SideOnly(Side.CLIENT) - public BusAnimation getAnimation(ItemStack stack, AnimType type) { - GunConfiguration config = ((ItemGunBase) stack.getItem()).mainConfig; - if (!config.animationsLoaded && config.loadAnimations != null) { - config.loadAnimations.accept(null); - config.animationsLoaded = true; - } - return config.animations.get(type); - } - - @Override - public void onEquip(EntityPlayer player, ItemStack stack) { - if(!mainConfig.equipSound.isEmpty() && !player.worldObj.isRemote) { - player.worldObj.playSoundAtEntity(player, mainConfig.equipSound, 1, 1); - } - - if(player instanceof EntityPlayerMP) PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.EQUIP.ordinal()), (EntityPlayerMP) player); - } - - protected static void queueCasing(Entity entity, CasingEjector ejector, BulletConfiguration bullet, ItemStack stack) { - - if(ejector == null || bullet == null || bullet.spentCasing == null) return; - - if(ejector.getDelay() <= 0) { - trySpawnCasing(entity, ejector, bullet, stack); - } else { - setCasing(stack, bullet); - setCasingTimer(stack, ejector.getDelay()); - } - } - - protected static void trySpawnCasing(Entity entity, CasingEjector ejector, BulletConfiguration bullet, ItemStack stack) { - - if(ejector == null) return; //abort if the gun can't eject bullets at all - if(bullet == null) return; //abort if there's no valid bullet cfg - if(bullet.spentCasing == null) return; //abort if the bullet is caseless - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "casing"); - data.setFloat("pitch", (float) Math.toRadians(entity.rotationPitch)); - data.setFloat("yaw", (float) Math.toRadians(entity.rotationYaw)); - data.setBoolean("crouched", entity.isSneaking()); - data.setString("name", bullet.spentCasing.getName()); - data.setInteger("ej", ejector.getId()); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, entity.posX, entity.posY + entity.getEyeHeight(), entity.posZ), new TargetPoint(entity.dimension, entity.posX, entity.posY, entity.posZ, 50)); - } - - public static int getReloadDuration(EntityPlayer player, ItemStack stack) { - GunConfiguration config = ((ItemGunBase) stack.getItem()).mainConfig; - int cycle = config.reloadDuration; - if (getMag(stack) == 0) cycle += config.emptyReloadAdditionalDuration; - if(ArmorTrenchmaster.isTrenchMaster(player)) return Math.max(1, cycle / 2); - return cycle; - } -} diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 95df82f43..bb5882cc8 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1680,6 +1680,8 @@ public class MainRegistry { ignoreMappings.add("hbm:item.singularity_micro"); ignoreMappings.add("hbm:item.gun_cryocannon"); ignoreMappings.add("hbm:item.gun_cryolator_ammo"); + ignoreMappings.add("hbm:item.canteen_fab"); + ignoreMappings.add("hbm:item.fabsols_vodka"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index d01ac85f5..d54588f8a 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -11,7 +11,6 @@ import com.hbm.entity.train.EntityRailCarRidable; import com.hbm.extprop.HbmLivingProps; import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.ArmorModHandler; -import com.hbm.handler.GunConfiguration; import com.hbm.handler.HTTPHandler; import com.hbm.handler.HazmatRegistry; import com.hbm.handler.HbmKeybinds; @@ -31,14 +30,12 @@ import com.hbm.items.armor.*; import com.hbm.items.machine.ItemDepletedFuel; import com.hbm.items.machine.ItemFluidDuct; import com.hbm.items.machine.ItemRBMKPellet; -import com.hbm.items.weapon.ItemGunBase; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.AuxButtonPacket; -import com.hbm.packet.toserver.GunButtonPacket; import com.hbm.packet.toserver.KeybindPacket; import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations.Animation; @@ -348,15 +345,6 @@ public class ModEventHandlerClient { /// HANDLE SCOPE OVERLAY /// ItemStack held = player.getHeldItem(); - if(player.isSneaking() && held != null && held.getItem() instanceof ItemGunBase && event.type == event.type.HOTBAR) { - GunConfiguration config = ((ItemGunBase) held.getItem()).mainConfig; - - if(config.scopeTexture != null) { - ScaledResolution resolution = event.resolution; - RenderScreenOverlay.renderScope(resolution, config.scopeTexture); - } - } - if(held != null && held.getItem() instanceof ItemGunBaseNT && ItemGunBaseNT.aimingProgress == ItemGunBaseNT.prevAimingProgress && ItemGunBaseNT.aimingProgress == 1F && event.type == event.type.HOTBAR) { ItemGunBaseNT gun = (ItemGunBaseNT) held.getItem(); GunConfig cfg = gun.getConfig(held, 0); @@ -590,36 +578,6 @@ public class ModEventHandlerClient { } } - @SubscribeEvent - public void clickHandler(MouseEvent event) { - - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - - if(player.getHeldItem() != null) { - - Item held = player.getHeldItem().getItem(); - - if(held instanceof ItemGunBase) { - - if(event.button == 0) - event.setCanceled(true); - - ItemGunBase item = (ItemGunBase)player.getHeldItem().getItem(); - - if(event.button == 0 && !item.m1 && !item.m2) { - item.m1 = true; - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 0)); - item.startActionClient(player.getHeldItem(), player.worldObj, player, true); - } - else if(event.button == 1 && !item.m2 && !item.m1) { - item.m2 = true; - PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 1)); - item.startActionClient(player.getHeldItem(), player.worldObj, player, false); - } - } - } - } - @Spaghetti("please get this shit out of my face") @SubscribeEvent public void onPlaySound(PlaySoundEvent17 e) { diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index b749cfdd3..ab2181c94 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -35,8 +35,6 @@ public class PacketDispatcher { wrapper.registerMessage(ExtPropPacket.Handler.class, ExtPropPacket.class, i++, Side.CLIENT); //Packet for force fields wrapper.registerMessage(TEFFPacket.Handler.class, TEFFPacket.class, i++, Side.CLIENT); - //Sends button information for ItemGunBase - wrapper.registerMessage(GunButtonPacket.Handler.class, GunButtonPacket.class, i++, Side.SERVER); //Signals server to buy offer from bobmazon wrapper.registerMessage(ItemBobmazonPacket.Handler.class, ItemBobmazonPacket.class, i++, Side.SERVER); //Packet to send missile multipart information to TEs diff --git a/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java b/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java index d1d23e0b3..f8fcf3495 100644 --- a/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java +++ b/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java @@ -4,7 +4,6 @@ import java.util.function.BiConsumer; import java.util.function.BiFunction; import com.hbm.items.armor.ArmorTrenchmaster; -import com.hbm.items.weapon.ItemGunBase; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; @@ -76,40 +75,12 @@ public class GunAnimationPacket implements IMessage { ItemStack stack = player.getHeldItem(); int slot = player.inventory.currentItem; - if(stack == null) - return null; + if(stack == null) return null; if(stack.getItem() instanceof ItemGunBaseNT) { handleSedna(player, stack, slot, AnimType.values()[m.type], m.receiverIndex, m.gunIndex); } - if(!(stack.getItem() instanceof ItemGunBase)) - return null; - - if(m.type < 0 || m.type >= AnimType.values().length) - return null; - - AnimType type = AnimType.values()[m.type]; - ItemGunBase base = (ItemGunBase) stack.getItem(); - - BusAnimation animation = base.getAnimation(stack, type); - - // Fallback to regular reload if no empty reload animation - if(animation == null && type == AnimType.RELOAD_EMPTY) { - animation = base.getAnimation(stack, AnimType.RELOAD); - } - - // Fallback to regular CYCLE if no ALT_CYCLE (or CYCLE_EMPTY) exists - if(animation == null && (type == AnimType.ALT_CYCLE || type == AnimType.CYCLE_EMPTY)) { - animation = base.getAnimation(stack, AnimType.CYCLE); - } - - if(animation != null) { - boolean isReloadAnimation = type == AnimType.RELOAD || type == AnimType.RELOAD_CYCLE || type == AnimType.RELOAD_EMPTY; - if(isReloadAnimation && ArmorTrenchmaster.isTrenchMaster(player)) animation.setTimeMult(0.5D); - HbmAnimations.hotbar[slot][0] = new Animation(stack.getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, type, isReloadAnimation && base.mainConfig.reloadAnimationsSequential); - } - } catch(Exception x) { } return null; diff --git a/src/main/java/com/hbm/packet/toserver/GunButtonPacket.java b/src/main/java/com/hbm/packet/toserver/GunButtonPacket.java deleted file mode 100644 index 0dc5f0e99..000000000 --- a/src/main/java/com/hbm/packet/toserver/GunButtonPacket.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.hbm.packet.toserver; - -import com.hbm.items.weapon.ItemGunBase; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import cpw.mods.fml.relauncher.Side; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; - -public class GunButtonPacket implements IMessage { - - //true or false, whether or not the key is pressed - boolean state; - //0: [M1] - //1: [M2] - //2: [R] - byte button; - - public GunButtonPacket() { } - - public GunButtonPacket(boolean m1, byte b) { - state = m1; - button = b; - } - - @Override - public void fromBytes(ByteBuf buf) { - state = buf.readBoolean(); - button = buf.readByte(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeBoolean(state); - buf.writeByte(button); - } - - public static class Handler implements IMessageHandler { - - @Override - public IMessage onMessage(GunButtonPacket m, MessageContext ctx) { - - if(FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) - return null; - - EntityPlayer p = ctx.getServerHandler().playerEntity; - - if(p.getHeldItem() != null && p.getHeldItem().getItem() instanceof ItemGunBase) { - - ItemGunBase item = (ItemGunBase)p.getHeldItem().getItem(); - - switch(m.button) { - case 0: ItemGunBase.setIsMouseDown(p.getHeldItem(), m.state); - if(m.state) - item.startAction(p.getHeldItem(), p.worldObj, p, true); - else - item.endAction(p.getHeldItem(), p.worldObj, p, true); - break; - - case 1: ItemGunBase.setIsAltDown(p.getHeldItem(), m.state); - if(m.state) - item.startAction(p.getHeldItem(), p.worldObj, p, false); - else - item.endAction(p.getHeldItem(), p.worldObj, p, false); - break; - - case 2: - if(item.canReload(p.getHeldItem(), p.worldObj, p)) { - item.startReloadAction(p.getHeldItem(), p.worldObj, p); - } - break; - } - } - - return null; - } - } -} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 636c57c0f..9b657d0d5 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -8,7 +8,7 @@ achievement.bossMaskman.desc=Kloppe den dicken Buben. achievement.bossMaskman=6 Monate verpflichtender Dienst und alles was ich davon habe ist dieses doofe T-Shirt achievement.bossMeltdown.desc=Mehr schlecht als recht, aber was will man machen. achievement.bossMeltdown=3,6 Röntgen -achievement.bossWorm.desc=Der Fabstaff. Mein Arsch. Jetzt fang an zu rechnen. +achievement.bossWorm.desc=Nur ein kleiner Metallwurm. achievement.bossWorm=Disassembling Balls-O-Tron achievement.bossUFO.desc=Yo, what do we have here? A huge spacecraft pulling up to the blockship? achievement.bossUFO=Ayy Lmao @@ -1501,8 +1501,6 @@ item.canned_tomato.name=Konservendose (Tomatensuppe) item.canned_tube.name=Tube (Astronautenessen) item.canned_tuna.name=Konservendose (Tunfisch) item.canned_yogurt.name=Konservendose (Jogurt) -item.canteen_13.name=Vault 13 Kantine -item.canteen_fab.name=Fabulöser Wodka item.canteen_vodka.name=Stylischer Flachmann item.cap_aluminium.name=Aluminiumdeckel item.cap_fritz.name=Fritz-Kola Kronkorken @@ -1919,7 +1917,6 @@ item.euphemium_kit.name=Euphemium Kit item.euphemium_legs.name=Euphemiumbeinschutz item.euphemium_plate.name=Euphemiumbrustpanzer item.euphemium_stopper.name=Stopper -item.fabsols_vodka.name=Fabsols Wodka item.factory_core_advanced.name=Fortgeschrittener Fabrikenergiecluster item.factory_core_titanium.name=Einfacher Fabrikenergiecluster item.fallout.name=Fallouthäufchen @@ -2166,7 +2163,7 @@ item.hazmat_plate_red.name=Verbesserte Strahlenschutzbrustplatte item.hazmat_red_kit.name=Lvl 2 Strahlenschutz-Kit item.heart_booster.name=Herzbooster item.heart_container.name=Herzcontainer -item.heart_fab.name=Fab Herz +item.heart_fab.name=Herz der Dunkelheit item.heart_piece.name=Herzteil item.heavy_component.name=Schwere %skomponente item.hev_battery.name=Anzugs-Batterie diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d234ba27d..8b3529fe0 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -16,7 +16,7 @@ achievement.bossMaskman.desc=Bonk the big boy. achievement.bossMaskman=6 Months of mandatory service and all I got was a lousy t-shirt achievement.bossMeltdown.desc=More terrible than great, but I take what I can get. achievement.bossMeltdown=3.6 Roentgen -achievement.bossWorm.desc=The Fabstaff. My ass. You do the math. +achievement.bossWorm.desc=Just a small metal worm. achievement.bossWorm=Disassembling Balls-O-Tron achievement.bossUFO.desc=Yo, what do we have here? A huge spacecraft pulling up to the blockship? achievement.bossUFO=Ayy Lmao @@ -2275,8 +2275,6 @@ item.canned_tuna.name=Canned Tuna item.canned_tuna.desc=I can't tell if that's actually tuna or dried cement. item.canned_yogurt.name=Canned Yogurt item.canned_yogurt.desc=Probably spoiled, but whatever. -item.canteen_13.name=Vault 13 Canteen -item.canteen_fab.name=Fabulous Vodka item.canteen_vodka.name=Stylish Flask item.cap_fritz.name=Fritz Cola Bottle Cap item.cap_korl.name=Korl Bottle Cap @@ -2720,7 +2718,6 @@ item.euphemium_plate.name=Euphemium Chestplate item.euphemium_stopper.name=Stopper item.explosive_lenses.name=Array of High-Explosive Lenses item.explosive_lenses.desc=Assembly of 8 PBX lenses with a thin$aluminium pusher, duraluminium shell, and$miniaturized bridgewire detonators. -item.fabsols_vodka.name=Fabsol's Vodka item.factory_core_advanced.name=Advanced Factory Energy Cluster item.factory_core_titanium.name=Basic Factory Energy Cluster item.fallout.name=Pile of Fallout @@ -2978,7 +2975,7 @@ item.hazmat_plate_red.name=Advanced Hazmat Chestplate item.hazmat_red_kit.name=Advanced Hazmat Kit item.heart_booster.name=Heart Booster item.heart_container.name=Heart Container -item.heart_fab.name=Fab Heart +item.heart_fab.name=Heart of Darkness item.heart_piece.name=Heart Piece item.heavy_component.name=Heavy %s Component item.hev_battery.name=Suit Battery diff --git a/src/main/resources/assets/hbm/textures/items/canteen_fab.png b/src/main/resources/assets/hbm/textures/items/canteen_fab.png deleted file mode 100644 index 8ba9c5e66b5a07fb11e664855d08674bbcdc0062..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vff~!U~hF#r!4HzfW&G*yXk`kip{5JH-?Kt#`0~@lijY zHG#{Wk@xD!%~DGac^(kHD|hMIfrsB?Tlh3rsqZgjHD)v@`|-`^F3?E~p00i_>zopr E0E9eFE&u=k diff --git a/src/main/resources/assets/hbm/textures/items/fabsols_vodka.png b/src/main/resources/assets/hbm/textures/items/fabsols_vodka.png deleted file mode 100644 index 133abcb1cd9ffc09bd9f541ae6ff9c9c45859725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf`j66V~cFyX_ZU)H-Pn(RZ*9#<@I!!ZHZzwyl)EI^ktc)I$ztaD0e0szr7V&eb+ diff --git a/src/main/resources/assets/hbm/textures/items/heart_fab.png b/src/main/resources/assets/hbm/textures/items/heart_fab.png index f9a85d90ea3b670685cc9cf1f0dc819f1491bf73..b028cc543a6846ba0025ff75c97095f9625a236c 100644 GIT binary patch delta 255 zcmVX$G=JhrL_t(Ijm3~LY6CG4MW2jg*b^kUO=~dx)`xKA0|fRAIgKC( zNafy*3m0hy0=~pHZVgVcDY7f1StX?NZ=})u|3(blTOlvnw(ZAzjPYN+kQ>Y_1tcY- z?*W)u0GNA&gY=Rxv-B=$Z1+HzJ1SRRh5|PF#LPI^8d$Smba))JEQS<-T>C}G>-mZ8 z?J?EI<^n7W-(&|T`eld0A}9Q@Rp|f@YilNc~5{CV~~_DsR#r4GQ$Mm zf8oQm=>=(&q<%Pgct59bZF&`uLvq!^zXAq%$Y0(&>KoVXY+|WZi_-uA002ovPDHLk FV1kglceDTi delta 248 zcmVw@S8)yVhJcM!6 Date: Mon, 26 May 2025 10:46:22 +0200 Subject: [PATCH 091/491] drooling baby safeguard --- .../java/com/hbm/blocks/ITooltipProvider.java | 3 +- .../hbm/blocks/generic/BlockBedrockOreTE.java | 2 +- .../com/hbm/blocks/generic/BlockCluster.java | 2 +- .../com/hbm/blocks/generic/BlockDepth.java | 2 +- .../com/hbm/blocks/generic/BlockGrate.java | 2 +- .../blocks/generic/BlockToolConversion.java | 2 +- .../hbm/blocks/generic/BlockWandJigsaw.java | 2 +- .../com/hbm/blocks/generic/BlockWandLoot.java | 2 +- .../hbm/blocks/machine/BlockHadronCoil.java | 2 +- .../hbm/blocks/machine/BlockHadronCooler.java | 2 +- .../hbm/blocks/machine/BlockHadronPower.java | 2 +- .../hbm/blocks/machine/DeuteriumTower.java | 2 +- .../blocks/machine/FoundryCastingBase.java | 3 +- .../com/hbm/blocks/machine/FoundryOutlet.java | 2 +- .../hbm/blocks/machine/HeaterElectric.java | 2 +- .../com/hbm/blocks/machine/HeaterHeatex.java | 2 +- .../hbm/blocks/machine/HeaterOilburner.java | 2 +- .../hbm/blocks/machine/MachineAutosaw.java | 2 +- .../hbm/blocks/machine/MachineBattery.java | 2 +- .../hbm/blocks/machine/MachineCapacitor.java | 2 +- .../machine/MachineCatalyticCracker.java | 3 +- .../hbm/blocks/machine/MachineChungus.java | 2 +- .../hbm/blocks/machine/MachineCondenser.java | 2 +- .../machine/MachineCondenserPowered.java | 3 +- .../blocks/machine/MachineConveyorPress.java | 3 +- .../machine/MachineDeuteriumExtractor.java | 3 +- .../com/hbm/blocks/machine/MachineDrain.java | 2 +- .../com/hbm/blocks/machine/MachineFENSU.java | 2 +- .../blocks/machine/MachineFractionTower.java | 3 +- .../hbm/blocks/machine/MachineHeatBoiler.java | 2 +- .../machine/MachineHeatBoilerIndustrial.java | 3 +- .../hbm/blocks/machine/MachineHephaestus.java | 2 +- .../blocks/machine/MachineICFController.java | 3 +- .../hbm/blocks/machine/MachineICFPress.java | 2 +- .../com/hbm/blocks/machine/MachineIntake.java | 2 +- .../com/hbm/blocks/machine/MachinePump.java | 2 +- .../hbm/blocks/machine/MachineSawmill.java | 2 +- .../blocks/machine/MachineSolarBoiler.java | 3 +- .../blocks/machine/MachineSteamEngine.java | 3 +- .../hbm/blocks/machine/MachineStirling.java | 2 +- .../blocks/machine/MachineStrandCaster.java | 3 +- .../hbm/blocks/machine/MachineTeleporter.java | 2 +- .../hbm/blocks/machine/MachineTowerLarge.java | 2 +- .../hbm/blocks/machine/MachineTowerSmall.java | 2 +- .../hbm/blocks/machine/MachineTurbineGas.java | 2 +- .../hbm/blocks/network/BlockCableGauge.java | 3 +- .../com/hbm/blocks/network/CableDiode.java | 3 +- .../com/hbm/blocks/network/CraneSplitter.java | 2 +- .../com/hbm/blocks/network/DroneCrate.java | 3 +- .../com/hbm/blocks/network/DroneWaypoint.java | 3 +- .../com/hbm/blocks/network/FluidDuctBox.java | 3 +- .../blocks/network/FluidDuctBoxExhaust.java | 3 +- .../hbm/blocks/network/FluidDuctGauge.java | 3 +- .../blocks/network/FluidDuctPaintable.java | 3 +- .../hbm/blocks/network/FluidDuctStandard.java | 3 +- .../com/hbm/blocks/network/FluidPump.java | 2 +- .../com/hbm/blocks/network/FluidSwitch.java | 3 +- .../com/hbm/blocks/network/FluidValve.java | 3 +- .../blocks/network/RadioTorchController.java | 2 +- .../hbm/blocks/network/RadioTorchCounter.java | 3 +- .../hbm/blocks/network/RadioTorchLogic.java | 3 +- .../hbm/blocks/network/RadioTorchRWBase.java | 3 +- .../hbm/blocks/network/RadioTorchReader.java | 2 +- .../com/hbm/entity/train/TrainCargoTram.java | 6 +-- .../com/hbm/handler/ability/IBaseAbility.java | 5 +- .../hbm/handler/nei/RotaryFurnaceHandler.java | 2 +- .../hbm/handler/nei/SILEXRecipeHandler.java | 2 +- .../hbm/hazard/type/HazardTypeAsbestos.java | 2 +- .../hbm/hazard/type/HazardTypeBlinding.java | 2 +- .../com/hbm/hazard/type/HazardTypeCoal.java | 2 +- .../hbm/hazard/type/HazardTypeDigamma.java | 2 +- .../hbm/hazard/type/HazardTypeExplosive.java | 2 +- .../com/hbm/hazard/type/HazardTypeHot.java | 2 +- .../hazard/type/HazardTypeHydroactive.java | 2 +- .../hbm/hazard/type/HazardTypeRadiation.java | 2 +- .../com/hbm/interfaces/ICustomWarhead.java | 2 +- .../com/hbm/inventory/fluid/FluidType.java | 2 +- .../hbm/inventory/fluid/trait/FT_Toxin.java | 2 +- .../com/hbm/inventory/gui/GUIArmorTable.java | 2 +- .../com/hbm/inventory/gui/GUIBookLore.java | 2 +- .../hbm/inventory/gui/GUICounterTorch.java | 2 +- .../com/hbm/inventory/gui/GUICrucible.java | 2 +- .../hbm/inventory/gui/GUICrystallizer.java | 2 +- .../inventory/gui/GUIElectrolyserMetal.java | 2 +- .../java/com/hbm/inventory/gui/GUIHadron.java | 2 +- .../hbm/inventory/gui/GUILaunchPadLarge.java | 2 +- .../gui/GUIMachineArcFurnaceLarge.java | 2 +- .../inventory/gui/GUIMachineAssembler.java | 2 +- .../hbm/inventory/gui/GUIMachineBattery.java | 2 +- .../inventory/gui/GUIMachineChemplant.java | 2 +- .../inventory/gui/GUIMachineCyclotron.java | 2 +- .../inventory/gui/GUIMachineDiFurnaceRTG.java | 2 +- .../gui/GUIMachineElectricFurnace.java | 2 +- .../inventory/gui/GUIMachineExcavator.java | 2 +- .../hbm/inventory/gui/GUIMachineGasCent.java | 2 +- .../hbm/inventory/gui/GUIMachineGasFlare.java | 2 +- .../hbm/inventory/gui/GUIMachineOilWell.java | 2 +- .../com/hbm/inventory/gui/GUIMachineRTG.java | 2 +- .../hbm/inventory/gui/GUIMachineRadarNT.java | 2 +- .../inventory/gui/GUIMachineRadarNTSlots.java | 2 +- .../gui/GUIMachineRotaryFurnace.java | 2 +- .../inventory/gui/GUIMachineStrandCaster.java | 3 +- .../inventory/gui/GUIMachineTurbineGas.java | 2 +- .../com/hbm/inventory/gui/GUINukeBoy.java | 2 +- .../com/hbm/inventory/gui/GUINukeGadget.java | 2 +- .../com/hbm/inventory/gui/GUINukeMan.java | 2 +- .../com/hbm/inventory/gui/GUINukeMike.java | 2 +- .../com/hbm/inventory/gui/GUINukeTsar.java | 2 +- .../com/hbm/inventory/gui/GUIPASource.java | 2 +- .../com/hbm/inventory/gui/GUIRBMKConsole.java | 2 +- .../com/hbm/inventory/gui/GUIRadioRec.java | 2 +- .../com/hbm/inventory/gui/GUIRadiolysis.java | 2 +- .../hbm/inventory/gui/GUIReactorZirnox.java | 2 +- .../java/com/hbm/inventory/gui/GUISILEX.java | 2 +- .../com/hbm/inventory/gui/GUIScreenGuide.java | 2 +- .../hbm/inventory/gui/GUIScreenHolotape.java | 2 +- .../inventory/gui/GUIScreenRadioTorch.java | 2 +- .../gui/GUIScreenRadioTorchController.java | 2 +- .../gui/GUIScreenRadioTorchLogic.java | 2 +- .../gui/GUIScreenRadioTorchReader.java | 2 +- .../hbm/inventory/gui/GUIScreenSnowglobe.java | 2 +- .../com/hbm/inventory/gui/GUITurretArty.java | 2 +- .../com/hbm/inventory/gui/GUITurretBase.java | 2 +- .../hbm/inventory/gui/GUITurretHIMARS.java | 2 +- .../hbm/inventory/gui/GuiInfoContainer.java | 2 +- .../java/com/hbm/inventory/material/Mats.java | 2 +- .../recipes/GasCentrifugeRecipes.java | 2 +- .../java/com/hbm/items/ItemCustomLore.java | 2 +- .../com/hbm/items/armor/ArmorBJJetpack.java | 2 +- .../java/com/hbm/items/armor/ArmorDNT.java | 5 +- .../java/com/hbm/items/armor/ArmorFSB.java | 5 +- .../com/hbm/items/armor/ArmorGasMask.java | 2 +- .../hbm/items/armor/ArmorTrenchmaster.java | 2 +- .../com/hbm/items/armor/ItemArmorMod.java | 2 +- .../com/hbm/items/armor/ItemModGasmask.java | 2 +- .../hbm/items/armor/ItemModNightVision.java | 7 +-- .../java/com/hbm/items/food/ItemConserve.java | 2 +- .../java/com/hbm/items/food/ItemPill.java | 2 +- .../items/machine/ItemAssemblyTemplate.java | 2 +- .../com/hbm/items/machine/ItemCassette.java | 2 +- .../items/machine/ItemChemistryTemplate.java | 2 +- .../items/machine/ItemCrucibleTemplate.java | 2 +- .../hbm/items/machine/ItemDepletedFuel.java | 2 +- .../com/hbm/items/machine/ItemFELCrystal.java | 2 +- .../hbm/items/machine/ItemFluidIDMulti.java | 2 +- .../items/machine/ItemFluidIdentifier.java | 2 +- .../com/hbm/items/machine/ItemICFPellet.java | 2 +- .../java/com/hbm/items/machine/ItemMold.java | 2 +- .../com/hbm/items/machine/ItemPileRod.java | 2 +- .../com/hbm/items/machine/ItemRBMKRod.java | 2 +- .../com/hbm/items/machine/ItemRTGPellet.java | 2 +- .../com/hbm/items/machine/ItemScraps.java | 2 +- .../hbm/items/machine/ItemTemplateFolder.java | 2 +- .../com/hbm/items/machine/ItemZirnoxRod.java | 2 +- .../hbm/items/special/ItemBedrockOreNew.java | 2 +- .../com/hbm/items/special/ItemBookLore.java | 3 +- .../com/hbm/items/special/ItemDemonCore.java | 2 +- .../com/hbm/items/special/ItemDigamma.java | 2 +- .../java/com/hbm/items/special/ItemDrop.java | 2 +- .../com/hbm/items/tool/ItemConveyorWand.java | 2 +- .../java/com/hbm/items/tool/ItemDrone.java | 2 +- .../com/hbm/items/tool/ItemGuideBook.java | 2 +- .../com/hbm/items/tool/ItemMirrorTool.java | 2 +- .../com/hbm/items/tool/ItemOilDetector.java | 9 ++-- .../java/com/hbm/items/tool/ItemPipette.java | 2 +- .../java/com/hbm/items/tool/ItemRBMKTool.java | 2 +- .../com/hbm/items/tool/ItemSettingsTool.java | 2 +- .../java/com/hbm/items/weapon/ItemAmmo.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 6 +++ .../com/hbm/main/ModEventHandlerClient.java | 1 + src/main/java/com/hbm/main/ServerProxy.java | 7 +++ .../render/tileentity/RenderRBMKConsole.java | 2 +- .../com/hbm/tileentity/IRadioisotopeFuel.java | 2 +- .../java/com/hbm/tileentity/IRepairable.java | 2 +- .../hbm/tileentity/IUpgradeInfoProvider.java | 2 +- .../machine/TileEntityElectrolyser.java | 2 +- .../machine/TileEntityFurnaceIron.java | 2 +- .../TileEntityMachineArcFurnaceLarge.java | 2 +- .../machine/TileEntityMachineArcWelder.java | 2 +- .../machine/TileEntityMachineAssembler.java | 2 +- .../machine/TileEntityMachineAssemfac.java | 2 +- .../machine/TileEntityMachineCentrifuge.java | 2 +- .../machine/TileEntityMachineChemfac.java | 2 +- .../machine/TileEntityMachineChemplant.java | 2 +- .../TileEntityMachineCompressorBase.java | 2 +- .../TileEntityMachineCrystallizer.java | 2 +- .../machine/TileEntityMachineCyclotron.java | 2 +- .../machine/TileEntityMachineEPress.java | 2 +- .../TileEntityMachineElectricFurnace.java | 2 +- .../machine/TileEntityMachineExcavator.java | 2 +- .../TileEntityMachineExposureChamber.java | 2 +- .../machine/TileEntityMachineMiningLaser.java | 2 +- .../machine/TileEntityMachineMixer.java | 2 +- .../machine/TileEntityMachineOreSlopper.java | 2 +- .../TileEntityMachineSolderingStation.java | 2 +- .../machine/TileEntityMachineTurbofan.java | 2 +- .../oil/TileEntityMachineFrackingTower.java | 2 +- .../oil/TileEntityMachineGasFlare.java | 2 +- .../oil/TileEntityMachineLiquefactor.java | 2 +- .../machine/oil/TileEntityMachineOilWell.java | 2 +- .../oil/TileEntityMachinePumpjack.java | 2 +- .../oil/TileEntityMachinePyroOven.java | 2 +- .../oil/TileEntityMachineSolidifier.java | 2 +- .../machine/rbmk/TileEntityRBMKBase.java | 3 +- .../machine/rbmk/TileEntityRBMKConsole.java | 2 +- .../turret/TileEntityTurretMaxwell.java | 2 +- .../com/hbm/util/DamageResistanceHandler.java | 1 + .../{I18nUtil.java => i18n/I18nClient.java} | 49 ++++++------------ .../java/com/hbm/util/i18n/I18nServer.java | 33 ++++++++++++ src/main/java/com/hbm/util/i18n/I18nUtil.java | 50 +++++++++++++++++++ .../java/com/hbm/util/i18n/ITranslate.java | 34 +++++++++++++ .../java/com/hbm/wiaj/GuiWorldInAJar.java | 2 +- .../com/hbm/wiaj/actors/ActorFancyPanel.java | 2 +- .../hbm/wiaj/cannery/CanneryCentrifuge.java | 2 +- .../com/hbm/wiaj/cannery/CanneryCrucible.java | 2 +- .../com/hbm/wiaj/cannery/CanneryFEnSU.java | 2 +- .../com/hbm/wiaj/cannery/CanneryFirebox.java | 2 +- .../wiaj/cannery/CanneryFoundryChannel.java | 2 +- .../com/hbm/wiaj/cannery/CanneryHadron.java | 2 +- .../com/hbm/wiaj/cannery/CannerySILEX.java | 2 +- .../com/hbm/wiaj/cannery/CannerySchottky.java | 2 +- .../com/hbm/wiaj/cannery/CanneryStirling.java | 2 +- .../com/hbm/wiaj/cannery/CanneryWillow.java | 2 +- 223 files changed, 402 insertions(+), 263 deletions(-) rename src/main/java/com/hbm/util/{I18nUtil.java => i18n/I18nClient.java} (59%) create mode 100644 src/main/java/com/hbm/util/i18n/I18nServer.java create mode 100644 src/main/java/com/hbm/util/i18n/I18nUtil.java create mode 100644 src/main/java/com/hbm/util/i18n/ITranslate.java diff --git a/src/main/java/com/hbm/blocks/ITooltipProvider.java b/src/main/java/com/hbm/blocks/ITooltipProvider.java index 5008b1834..829de9f15 100644 --- a/src/main/java/com/hbm/blocks/ITooltipProvider.java +++ b/src/main/java/com/hbm/blocks/ITooltipProvider.java @@ -1,6 +1,5 @@ package com.hbm.blocks; -import com.hbm.util.I18nUtil; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -8,6 +7,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import org.lwjgl.input.Keyboard; +import com.hbm.util.i18n.I18nUtil; + import java.util.List; public interface ITooltipProvider { diff --git a/src/main/java/com/hbm/blocks/generic/BlockBedrockOreTE.java b/src/main/java/com/hbm/blocks/generic/BlockBedrockOreTE.java index b683fc018..2e8dc7b9b 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockBedrockOreTE.java +++ b/src/main/java/com/hbm/blocks/generic/BlockBedrockOreTE.java @@ -16,7 +16,7 @@ import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.render.block.RenderBlockMultipass; import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.fluidmk2.IFillableItem; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/blocks/generic/BlockCluster.java b/src/main/java/com/hbm/blocks/generic/BlockCluster.java index 03ed4027e..ab7ae9dff 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockCluster.java +++ b/src/main/java/com/hbm/blocks/generic/BlockCluster.java @@ -6,7 +6,7 @@ import java.util.Random; import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.block.IDrillInteraction; import api.hbm.block.IMiningDrill; diff --git a/src/main/java/com/hbm/blocks/generic/BlockDepth.java b/src/main/java/com/hbm/blocks/generic/BlockDepth.java index e0e2d511c..3a5261831 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDepth.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDepth.java @@ -3,7 +3,7 @@ package com.hbm.blocks.generic; import java.util.List; import com.hbm.blocks.ITooltipProvider; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.item.IDepthRockTool; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/blocks/generic/BlockGrate.java b/src/main/java/com/hbm/blocks/generic/BlockGrate.java index 892f9f929..4d4997f13 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockGrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockGrate.java @@ -5,7 +5,7 @@ import java.util.List; import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java b/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java index 46bb571e5..686bd9655 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java +++ b/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java @@ -13,9 +13,9 @@ import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.MetaBlock; import com.hbm.inventory.RecipesCommon.OreDictStack; -import com.hbm.util.I18nUtil; import com.hbm.util.InventoryUtil; import com.hbm.util.Tuple.Pair; +import com.hbm.util.i18n.I18nUtil; import api.hbm.block.IToolable; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java b/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java index 365c42e56..63076df31 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java @@ -17,7 +17,7 @@ import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BufferUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.world.gen.INBTTransformable; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java index 48bdfaf69..bf457843d 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandLoot.java @@ -15,8 +15,8 @@ import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BufferUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.LootGenerator; +import com.hbm.util.i18n.I18nUtil; import com.hbm.world.gen.INBTTileEntityTransformable; import com.mojang.authlib.GameProfile; diff --git a/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java b/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java index 1cb88488a..3e099e600 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java +++ b/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java @@ -7,7 +7,7 @@ import com.hbm.blocks.ITooltipProvider; import com.hbm.render.block.ct.CT; import com.hbm.render.block.ct.CTStitchReceiver; import com.hbm.render.block.ct.IBlockCT; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/machine/BlockHadronCooler.java b/src/main/java/com/hbm/blocks/machine/BlockHadronCooler.java index a242772e2..8c7e99373 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockHadronCooler.java +++ b/src/main/java/com/hbm/blocks/machine/BlockHadronCooler.java @@ -7,7 +7,7 @@ import org.lwjgl.input.Keyboard; import com.hbm.blocks.BlockMulti; import com.hbm.blocks.ITooltipProvider; import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/machine/BlockHadronPower.java b/src/main/java/com/hbm/blocks/machine/BlockHadronPower.java index 66da679ba..6be4757cd 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockHadronPower.java +++ b/src/main/java/com/hbm/blocks/machine/BlockHadronPower.java @@ -6,7 +6,7 @@ import java.util.List; import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.machine.TileEntityHadronPower; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/hbm/blocks/machine/DeuteriumTower.java b/src/main/java/com/hbm/blocks/machine/DeuteriumTower.java index 85dc20517..1e08908ad 100644 --- a/src/main/java/com/hbm/blocks/machine/DeuteriumTower.java +++ b/src/main/java/com/hbm/blocks/machine/DeuteriumTower.java @@ -8,7 +8,7 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityDeuteriumTower; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java b/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java index 380d4f4bf..fe57bc788 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java @@ -9,7 +9,8 @@ import com.hbm.items.machine.ItemMold; import com.hbm.items.machine.ItemMold.Mold; import com.hbm.items.machine.ItemScraps; import com.hbm.tileentity.machine.TileEntityFoundryCastingBase; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java b/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java index dfa51cf3b..bbf18772b 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java @@ -9,7 +9,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemScraps; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityFoundryOutlet; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.block.ICrucibleAcceptor; import api.hbm.block.IToolable; diff --git a/src/main/java/com/hbm/blocks/machine/HeaterElectric.java b/src/main/java/com/hbm/blocks/machine/HeaterElectric.java index c66fad6b7..94d0cbb21 100644 --- a/src/main/java/com/hbm/blocks/machine/HeaterElectric.java +++ b/src/main/java/com/hbm/blocks/machine/HeaterElectric.java @@ -10,7 +10,7 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityHeaterElectric; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/blocks/machine/HeaterHeatex.java b/src/main/java/com/hbm/blocks/machine/HeaterHeatex.java index 1eb152a67..66faae3cf 100644 --- a/src/main/java/com/hbm/blocks/machine/HeaterHeatex.java +++ b/src/main/java/com/hbm/blocks/machine/HeaterHeatex.java @@ -12,7 +12,7 @@ import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityHeaterHeatex; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/hbm/blocks/machine/HeaterOilburner.java b/src/main/java/com/hbm/blocks/machine/HeaterOilburner.java index 0ddca5005..3c30f5d21 100644 --- a/src/main/java/com/hbm/blocks/machine/HeaterOilburner.java +++ b/src/main/java/com/hbm/blocks/machine/HeaterOilburner.java @@ -11,7 +11,7 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.trait.FT_Flammable; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityHeaterOilburner; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.block.IToolable; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java b/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java index 8e38ba3e7..f8fb34a2c 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java +++ b/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java @@ -8,7 +8,7 @@ import com.hbm.blocks.ITooltipProvider; import com.hbm.inventory.fluid.FluidType; import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.tileentity.machine.TileEntityMachineAutosaw; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/hbm/blocks/machine/MachineBattery.java b/src/main/java/com/hbm/blocks/machine/MachineBattery.java index 7f4616a5e..16afccccf 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineBattery.java +++ b/src/main/java/com/hbm/blocks/machine/MachineBattery.java @@ -12,7 +12,7 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.machine.storage.TileEntityMachineBattery; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java b/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java index 8088d4d92..22a60d7b1 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCapacitor.java @@ -13,8 +13,8 @@ import com.hbm.lib.RefStrings; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.energymk2.IEnergyReceiverMK2; diff --git a/src/main/java/com/hbm/blocks/machine/MachineCatalyticCracker.java b/src/main/java/com/hbm/blocks/machine/MachineCatalyticCracker.java index e1fed51f3..9b7910686 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCatalyticCracker.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCatalyticCracker.java @@ -7,7 +7,8 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.oil.TileEntityMachineCatalyticCracker; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/com/hbm/blocks/machine/MachineChungus.java b/src/main/java/com/hbm/blocks/machine/MachineChungus.java index aa05fcfcf..16bf80634 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChungus.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChungus.java @@ -15,7 +15,7 @@ import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityChungus; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/blocks/machine/MachineCondenser.java b/src/main/java/com/hbm/blocks/machine/MachineCondenser.java index 8bbe97b99..9c5ced6ea 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCondenser.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCondenser.java @@ -5,7 +5,7 @@ import java.util.List; import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.machine.TileEntityCondenser; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/hbm/blocks/machine/MachineCondenserPowered.java b/src/main/java/com/hbm/blocks/machine/MachineCondenserPowered.java index 75aba9c53..dd005163d 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCondenserPowered.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCondenserPowered.java @@ -5,7 +5,8 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityCondenserPowered; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; diff --git a/src/main/java/com/hbm/blocks/machine/MachineConveyorPress.java b/src/main/java/com/hbm/blocks/machine/MachineConveyorPress.java index 396ee0702..ac19655bf 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineConveyorPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineConveyorPress.java @@ -8,7 +8,8 @@ import com.hbm.blocks.ITooltipProvider; import com.hbm.items.machine.ItemStamp; import com.hbm.tileentity.machine.TileEntityConveyorPress; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/blocks/machine/MachineDeuteriumExtractor.java b/src/main/java/com/hbm/blocks/machine/MachineDeuteriumExtractor.java index ba472e1d2..a01f727c0 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineDeuteriumExtractor.java +++ b/src/main/java/com/hbm/blocks/machine/MachineDeuteriumExtractor.java @@ -4,7 +4,8 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityDeuteriumExtractor; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; diff --git a/src/main/java/com/hbm/blocks/machine/MachineDrain.java b/src/main/java/com/hbm/blocks/machine/MachineDrain.java index 46aaf943e..64d7c3f96 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineDrain.java +++ b/src/main/java/com/hbm/blocks/machine/MachineDrain.java @@ -8,7 +8,7 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.inventory.fluid.FluidType; import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.tileentity.machine.TileEntityMachineDrain; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/blocks/machine/MachineFENSU.java b/src/main/java/com/hbm/blocks/machine/MachineFENSU.java index e9d8facff..7237d52f5 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFENSU.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFENSU.java @@ -10,7 +10,7 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.storage.TileEntityMachineBattery; import com.hbm.tileentity.machine.storage.TileEntityMachineFENSU; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/hbm/blocks/machine/MachineFractionTower.java b/src/main/java/com/hbm/blocks/machine/MachineFractionTower.java index 1e1fc1e33..b1b7dfd77 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFractionTower.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFractionTower.java @@ -6,7 +6,8 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.oil.TileEntityMachineFractionTower; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/com/hbm/blocks/machine/MachineHeatBoiler.java b/src/main/java/com/hbm/blocks/machine/MachineHeatBoiler.java index 66c2396d0..0994a696b 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineHeatBoiler.java +++ b/src/main/java/com/hbm/blocks/machine/MachineHeatBoiler.java @@ -15,7 +15,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityHeatBoiler; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/com/hbm/blocks/machine/MachineHeatBoilerIndustrial.java b/src/main/java/com/hbm/blocks/machine/MachineHeatBoilerIndustrial.java index a2c411072..15929f0d8 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineHeatBoilerIndustrial.java +++ b/src/main/java/com/hbm/blocks/machine/MachineHeatBoilerIndustrial.java @@ -9,7 +9,8 @@ import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingType; import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityHeatBoilerIndustrial; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/hbm/blocks/machine/MachineHephaestus.java b/src/main/java/com/hbm/blocks/machine/MachineHephaestus.java index b6a628c78..bad4a611f 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineHephaestus.java +++ b/src/main/java/com/hbm/blocks/machine/MachineHephaestus.java @@ -11,7 +11,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineHephaestus; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/blocks/machine/MachineICFController.java b/src/main/java/com/hbm/blocks/machine/MachineICFController.java index 5317cd310..f2b16f3f6 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineICFController.java +++ b/src/main/java/com/hbm/blocks/machine/MachineICFController.java @@ -9,8 +9,9 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.machine.TileEntityICFController; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/blocks/machine/MachineICFPress.java b/src/main/java/com/hbm/blocks/machine/MachineICFPress.java index 0acf7ff0f..31e0214ca 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineICFPress.java +++ b/src/main/java/com/hbm/blocks/machine/MachineICFPress.java @@ -6,7 +6,7 @@ import com.hbm.blocks.ITooltipProvider; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.TileEntityICFPress; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/blocks/machine/MachineIntake.java b/src/main/java/com/hbm/blocks/machine/MachineIntake.java index 6090eb7f1..5f6dbfc30 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineIntake.java +++ b/src/main/java/com/hbm/blocks/machine/MachineIntake.java @@ -8,7 +8,7 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineIntake; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/com/hbm/blocks/machine/MachinePump.java b/src/main/java/com/hbm/blocks/machine/MachinePump.java index 1d2198029..f15ebd3c7 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePump.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePump.java @@ -13,7 +13,7 @@ import com.hbm.tileentity.machine.TileEntityMachinePumpBase; import com.hbm.tileentity.machine.TileEntityMachinePumpElectric; import com.hbm.tileentity.machine.TileEntityMachinePumpSteam; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/blocks/machine/MachineSawmill.java b/src/main/java/com/hbm/blocks/machine/MachineSawmill.java index 8a112a2b2..b048f1866 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineSawmill.java +++ b/src/main/java/com/hbm/blocks/machine/MachineSawmill.java @@ -10,7 +10,7 @@ import com.hbm.items.ModItems; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntitySawmill; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/com/hbm/blocks/machine/MachineSolarBoiler.java b/src/main/java/com/hbm/blocks/machine/MachineSolarBoiler.java index b68fda48c..c97620d2b 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineSolarBoiler.java +++ b/src/main/java/com/hbm/blocks/machine/MachineSolarBoiler.java @@ -6,7 +6,8 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntitySolarBoiler; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; diff --git a/src/main/java/com/hbm/blocks/machine/MachineSteamEngine.java b/src/main/java/com/hbm/blocks/machine/MachineSteamEngine.java index dc7f13426..81c4033e8 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineSteamEngine.java +++ b/src/main/java/com/hbm/blocks/machine/MachineSteamEngine.java @@ -5,7 +5,8 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntitySteamEngine; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/hbm/blocks/machine/MachineStirling.java b/src/main/java/com/hbm/blocks/machine/MachineStirling.java index 3cdfde1e7..29a79c6b0 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineStirling.java +++ b/src/main/java/com/hbm/blocks/machine/MachineStirling.java @@ -12,7 +12,7 @@ import com.hbm.items.ModItems; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityStirling; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java b/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java index 89435b761..354e91136 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java +++ b/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java @@ -10,7 +10,8 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemScraps; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineStrandCaster; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/com/hbm/blocks/machine/MachineTeleporter.java b/src/main/java/com/hbm/blocks/machine/MachineTeleporter.java index f702e0b4f..ca4f6b1e8 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineTeleporter.java +++ b/src/main/java/com/hbm/blocks/machine/MachineTeleporter.java @@ -7,7 +7,7 @@ import java.util.Locale; import com.hbm.blocks.ILookOverlay; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineTeleporter; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/machine/MachineTowerLarge.java b/src/main/java/com/hbm/blocks/machine/MachineTowerLarge.java index 4279cc746..4d8b0a059 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineTowerLarge.java +++ b/src/main/java/com/hbm/blocks/machine/MachineTowerLarge.java @@ -7,7 +7,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityTowerLarge; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/com/hbm/blocks/machine/MachineTowerSmall.java b/src/main/java/com/hbm/blocks/machine/MachineTowerSmall.java index 6b9bc5947..d78464a97 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineTowerSmall.java +++ b/src/main/java/com/hbm/blocks/machine/MachineTowerSmall.java @@ -7,7 +7,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ILookOverlay; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityTowerSmall; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/com/hbm/blocks/machine/MachineTurbineGas.java b/src/main/java/com/hbm/blocks/machine/MachineTurbineGas.java index a17cf0fcc..99ec44ba6 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineTurbineGas.java +++ b/src/main/java/com/hbm/blocks/machine/MachineTurbineGas.java @@ -2,7 +2,7 @@ package com.hbm.blocks.machine; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineTurbineGas; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java index 1d17b9930..42e3a6573 100644 --- a/src/main/java/com/hbm/blocks/network/BlockCableGauge.java +++ b/src/main/java/com/hbm/blocks/network/BlockCableGauge.java @@ -11,7 +11,8 @@ import com.hbm.lib.RefStrings; import com.hbm.render.block.RenderBlockMultipass; import com.hbm.tileentity.network.TileEntityCableBaseNT; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/network/CableDiode.java b/src/main/java/com/hbm/blocks/network/CableDiode.java index d0f17735b..4dd7a8f80 100644 --- a/src/main/java/com/hbm/blocks/network/CableDiode.java +++ b/src/main/java/com/hbm/blocks/network/CableDiode.java @@ -12,7 +12,8 @@ import com.hbm.blocks.ITooltipProvider; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BobMathUtil; import com.hbm.util.Compat; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/network/CraneSplitter.java b/src/main/java/com/hbm/blocks/network/CraneSplitter.java index 9cc13f15c..0cac219b0 100644 --- a/src/main/java/com/hbm/blocks/network/CraneSplitter.java +++ b/src/main/java/com/hbm/blocks/network/CraneSplitter.java @@ -11,7 +11,7 @@ import com.hbm.blocks.ITooltipProvider; import com.hbm.entity.item.EntityMovingItem; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityCraneSplitter; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/blocks/network/DroneCrate.java b/src/main/java/com/hbm/blocks/network/DroneCrate.java index 78a64be21..91b0a6a44 100644 --- a/src/main/java/com/hbm/blocks/network/DroneCrate.java +++ b/src/main/java/com/hbm/blocks/network/DroneCrate.java @@ -6,7 +6,8 @@ import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.tileentity.network.TileEntityDroneCrate; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/network/DroneWaypoint.java b/src/main/java/com/hbm/blocks/network/DroneWaypoint.java index 16f5c60eb..41d5356a4 100644 --- a/src/main/java/com/hbm/blocks/network/DroneWaypoint.java +++ b/src/main/java/com/hbm/blocks/network/DroneWaypoint.java @@ -4,7 +4,8 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; import com.hbm.items.ModItems; import com.hbm.tileentity.network.TileEntityDroneWaypoint; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctBox.java b/src/main/java/com/hbm/blocks/network/FluidDuctBox.java index 6d091e422..4823303a0 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctBox.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctBox.java @@ -5,7 +5,8 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityPipeBaseNT; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctBoxExhaust.java b/src/main/java/com/hbm/blocks/network/FluidDuctBoxExhaust.java index 4384b908b..b899394c6 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctBoxExhaust.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctBoxExhaust.java @@ -5,7 +5,8 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityPipeExhaust; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java b/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java index cb00c3a4b..122d9031d 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctGauge.java @@ -11,7 +11,8 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.RefStrings; import com.hbm.render.block.RenderBlockMultipass; import com.hbm.tileentity.network.TileEntityPipeBaseNT; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctPaintable.java b/src/main/java/com/hbm/blocks/network/FluidDuctPaintable.java index 0bca70d6b..b7f994a5d 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctPaintable.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctPaintable.java @@ -7,7 +7,8 @@ import com.hbm.interfaces.ICopiable; import com.hbm.lib.RefStrings; import com.hbm.render.block.RenderBlockMultipass; import com.hbm.tileentity.network.TileEntityPipeBaseNT; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctStandard.java b/src/main/java/com/hbm/blocks/network/FluidDuctStandard.java index d1b46bc94..d6b857e60 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctStandard.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctStandard.java @@ -7,7 +7,8 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityPipeBaseNT; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/network/FluidPump.java b/src/main/java/com/hbm/blocks/network/FluidPump.java index 19fffda03..416b1c579 100644 --- a/src/main/java/com/hbm/blocks/network/FluidPump.java +++ b/src/main/java/com/hbm/blocks/network/FluidPump.java @@ -18,7 +18,7 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BobMathUtil; import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.world.gen.INBTTransformable; import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority; diff --git a/src/main/java/com/hbm/blocks/network/FluidSwitch.java b/src/main/java/com/hbm/blocks/network/FluidSwitch.java index 77ed6519d..c4c8788d2 100644 --- a/src/main/java/com/hbm/blocks/network/FluidSwitch.java +++ b/src/main/java/com/hbm/blocks/network/FluidSwitch.java @@ -3,7 +3,8 @@ package com.hbm.blocks.network; import com.hbm.blocks.ILookOverlay; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityFluidValve; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/blocks/network/FluidValve.java b/src/main/java/com/hbm/blocks/network/FluidValve.java index 7c05600e8..fae2678c8 100644 --- a/src/main/java/com/hbm/blocks/network/FluidValve.java +++ b/src/main/java/com/hbm/blocks/network/FluidValve.java @@ -3,7 +3,8 @@ package com.hbm.blocks.network; import com.hbm.blocks.ILookOverlay; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityFluidValve; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchController.java b/src/main/java/com/hbm/blocks/network/RadioTorchController.java index ce6a59105..8d971878d 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchController.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchController.java @@ -7,7 +7,7 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.inventory.gui.GUIScreenRadioTorchController; import com.hbm.tileentity.network.TileEntityRadioTorchController; import com.hbm.util.Compat; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.redstoneoverradio.IRORInteractive; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java b/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java index 80bacd8c4..d9a71d78b 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java @@ -6,7 +6,8 @@ import com.hbm.inventory.gui.GUICounterTorch; import com.hbm.main.MainRegistry; import com.hbm.tileentity.network.TileEntityRadioTorchCounter; import com.hbm.util.Compat; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java b/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java index 65d144ef9..7712d3b1a 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java @@ -4,7 +4,8 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.inventory.gui.GUIScreenRadioTorchLogic; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityRadioTorchLogic; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IIconRegister; diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java b/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java index 7f03e597c..11c64f5c8 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java @@ -3,7 +3,8 @@ package com.hbm.blocks.network; import com.hbm.blocks.ILookOverlay; import com.hbm.inventory.gui.GUIScreenRadioTorch; import com.hbm.tileentity.network.TileEntityRadioTorchBase; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchReader.java b/src/main/java/com/hbm/blocks/network/RadioTorchReader.java index 4e35e4e78..d92162c51 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchReader.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchReader.java @@ -7,7 +7,7 @@ import com.hbm.blocks.ILookOverlay; import com.hbm.inventory.gui.GUIScreenRadioTorchReader; import com.hbm.tileentity.network.TileEntityRadioTorchReader; import com.hbm.util.Compat; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/entity/train/TrainCargoTram.java b/src/main/java/com/hbm/entity/train/TrainCargoTram.java index 572e3fb4d..2bd2b1653 100644 --- a/src/main/java/com/hbm/entity/train/TrainCargoTram.java +++ b/src/main/java/com/hbm/entity/train/TrainCargoTram.java @@ -6,12 +6,12 @@ import com.hbm.blocks.rail.IRailNTM.TrackGauge; import com.hbm.inventory.gui.GuiInfoContainer; import com.hbm.lib.RefStrings; import com.hbm.tileentity.IGUIProvider; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IBatteryItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -191,9 +191,9 @@ public class TrainCargoTram extends EntityRailCarElectric implements IGUIProvide @Override protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.train.hasCustomInventoryName() ? this.train.getInventoryName() : I18n.format(this.train.getInventoryName()); + String name = this.train.hasCustomInventoryName() ? this.train.getInventoryName() : I18nUtil.format(this.train.getInventoryName()); this.fontRendererObj.drawString(name, 140 / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xffffff); - this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + this.fontRendererObj.drawString(I18nUtil.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } @Override diff --git a/src/main/java/com/hbm/handler/ability/IBaseAbility.java b/src/main/java/com/hbm/handler/ability/IBaseAbility.java index b8318cc94..8960c0e3f 100644 --- a/src/main/java/com/hbm/handler/ability/IBaseAbility.java +++ b/src/main/java/com/hbm/handler/ability/IBaseAbility.java @@ -1,6 +1,6 @@ package com.hbm.handler.ability; -import net.minecraft.client.resources.I18n; +import com.hbm.util.i18n.I18nUtil; public interface IBaseAbility extends Comparable { public String getName(); @@ -10,7 +10,8 @@ public interface IBaseAbility extends Comparable { } public default String getFullName(int level) { - return I18n.format(getName()) + getExtension(level); + //bandaid fix so it doesn't crash servers instantly, TODO: use ChatComponentTranslation + return I18nUtil.format(getName()) + getExtension(level); } public default boolean isAllowed() { diff --git a/src/main/java/com/hbm/handler/nei/RotaryFurnaceHandler.java b/src/main/java/com/hbm/handler/nei/RotaryFurnaceHandler.java index ca6c3b628..09509295e 100644 --- a/src/main/java/com/hbm/handler/nei/RotaryFurnaceHandler.java +++ b/src/main/java/com/hbm/handler/nei/RotaryFurnaceHandler.java @@ -9,7 +9,7 @@ import com.hbm.inventory.gui.GUIMachineRotaryFurnace; import com.hbm.inventory.recipes.RotaryFurnaceRecipes; import com.hbm.inventory.recipes.RotaryFurnaceRecipes.RotaryFurnaceRecipe; import com.hbm.items.machine.ItemScraps; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; diff --git a/src/main/java/com/hbm/handler/nei/SILEXRecipeHandler.java b/src/main/java/com/hbm/handler/nei/SILEXRecipeHandler.java index bc1363383..cf510ae67 100644 --- a/src/main/java/com/hbm/handler/nei/SILEXRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/SILEXRecipeHandler.java @@ -14,8 +14,8 @@ import com.hbm.inventory.recipes.SILEXRecipes; import com.hbm.inventory.recipes.SILEXRecipes.SILEXRecipe; import com.hbm.items.machine.ItemFELCrystal.EnumWavelengths; import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; import com.hbm.util.WeightedRandomObject; +import com.hbm.util.i18n.I18nUtil; import codechicken.nei.NEIServerUtils; import codechicken.nei.PositionedStack; diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeAsbestos.java b/src/main/java/com/hbm/hazard/type/HazardTypeAsbestos.java index abda08fba..1f0234e85 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeAsbestos.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeAsbestos.java @@ -7,8 +7,8 @@ import com.hbm.extprop.HbmLivingProps; import com.hbm.hazard.modifier.HazardModifier; import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.ArmorRegistry.HazardClass; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeBlinding.java b/src/main/java/com/hbm/hazard/type/HazardTypeBlinding.java index a65a2d9d5..4f014efff 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeBlinding.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeBlinding.java @@ -5,8 +5,8 @@ import java.util.List; import com.hbm.config.RadiationConfig; import com.hbm.hazard.modifier.HazardModifier; import com.hbm.util.ArmorRegistry; -import com.hbm.util.I18nUtil; import com.hbm.util.ArmorRegistry.HazardClass; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeCoal.java b/src/main/java/com/hbm/hazard/type/HazardTypeCoal.java index 1dbeda3f8..873073397 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeCoal.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeCoal.java @@ -7,8 +7,8 @@ import com.hbm.extprop.HbmLivingProps; import com.hbm.hazard.modifier.HazardModifier; import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.ArmorRegistry.HazardClass; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeDigamma.java b/src/main/java/com/hbm/hazard/type/HazardTypeDigamma.java index a32c1d0d8..cafaeb1e2 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeDigamma.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeDigamma.java @@ -4,7 +4,7 @@ import java.util.List; import com.hbm.hazard.modifier.HazardModifier; import com.hbm.util.ContaminationUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeExplosive.java b/src/main/java/com/hbm/hazard/type/HazardTypeExplosive.java index 85123d85d..904149e7b 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeExplosive.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeExplosive.java @@ -4,7 +4,7 @@ import java.util.List; import com.hbm.config.RadiationConfig; import com.hbm.hazard.modifier.HazardModifier; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeHot.java b/src/main/java/com/hbm/hazard/type/HazardTypeHot.java index dc8022b46..9e21f7b00 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeHot.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeHot.java @@ -6,7 +6,7 @@ import com.hbm.config.GeneralConfig; import com.hbm.config.RadiationConfig; import com.hbm.hazard.modifier.HazardModifier; import com.hbm.items.ModItems; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeHydroactive.java b/src/main/java/com/hbm/hazard/type/HazardTypeHydroactive.java index a716f925c..f5394e4df 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeHydroactive.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeHydroactive.java @@ -4,7 +4,7 @@ import java.util.List; import com.hbm.config.RadiationConfig; import com.hbm.hazard.modifier.HazardModifier; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/com/hbm/hazard/type/HazardTypeRadiation.java b/src/main/java/com/hbm/hazard/type/HazardTypeRadiation.java index 177d32218..dba80f65a 100644 --- a/src/main/java/com/hbm/hazard/type/HazardTypeRadiation.java +++ b/src/main/java/com/hbm/hazard/type/HazardTypeRadiation.java @@ -9,7 +9,7 @@ import com.hbm.util.BobMathUtil; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/interfaces/ICustomWarhead.java b/src/main/java/com/hbm/interfaces/ICustomWarhead.java index 479ad891c..3cf52791e 100644 --- a/src/main/java/com/hbm/interfaces/ICustomWarhead.java +++ b/src/main/java/com/hbm/interfaces/ICustomWarhead.java @@ -12,7 +12,7 @@ import com.google.common.annotations.Beta; import com.hbm.hazard.HazardRegistry; import com.hbm.main.MainRegistry; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/hbm/inventory/fluid/FluidType.java b/src/main/java/com/hbm/inventory/fluid/FluidType.java index 6f01bf1f0..93c9e565a 100644 --- a/src/main/java/com/hbm/inventory/fluid/FluidType.java +++ b/src/main/java/com/hbm/inventory/fluid/FluidType.java @@ -15,7 +15,7 @@ import com.hbm.lib.RefStrings; import com.hbm.render.util.EnumSymbol; import com.hbm.uninos.INetworkProvider; import com.hbm.uninos.networkproviders.FluidNetProvider; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.fluidmk2.FluidNetMK2; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Toxin.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Toxin.java index fe814219e..748459014 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Toxin.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Toxin.java @@ -10,8 +10,8 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.ArmorRegistry.HazardClass; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.EntityLivingBase; import net.minecraft.potion.PotionEffect; diff --git a/src/main/java/com/hbm/inventory/gui/GUIArmorTable.java b/src/main/java/com/hbm/inventory/gui/GUIArmorTable.java index 250b9711f..106d30c74 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIArmorTable.java +++ b/src/main/java/com/hbm/inventory/gui/GUIArmorTable.java @@ -5,7 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.handler.ArmorModHandler; import com.hbm.inventory.container.ContainerArmorTable; import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; diff --git a/src/main/java/com/hbm/inventory/gui/GUIBookLore.java b/src/main/java/com/hbm/inventory/gui/GUIBookLore.java index dc628427a..c25ef32ad 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIBookLore.java +++ b/src/main/java/com/hbm/inventory/gui/GUIBookLore.java @@ -6,7 +6,7 @@ import java.util.List; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUICounterTorch.java b/src/main/java/com/hbm/inventory/gui/GUICounterTorch.java index 8a27e27cf..a17ee5155 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICounterTorch.java +++ b/src/main/java/com/hbm/inventory/gui/GUICounterTorch.java @@ -11,7 +11,7 @@ import com.hbm.module.ModulePatternMatcher; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityRadioTorchCounter; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUICrucible.java b/src/main/java/com/hbm/inventory/gui/GUICrucible.java index a41ef4288..b63e4af4f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICrucible.java +++ b/src/main/java/com/hbm/inventory/gui/GUICrucible.java @@ -14,7 +14,7 @@ import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.inventory.material.NTMMaterial.SmeltingBehavior; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityCrucible; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; diff --git a/src/main/java/com/hbm/inventory/gui/GUICrystallizer.java b/src/main/java/com/hbm/inventory/gui/GUICrystallizer.java index 5794c5382..f94527ed6 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICrystallizer.java +++ b/src/main/java/com/hbm/inventory/gui/GUICrystallizer.java @@ -5,7 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerCrystallizer; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineCrystallizer; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUIElectrolyserMetal.java b/src/main/java/com/hbm/inventory/gui/GUIElectrolyserMetal.java index 670acabb0..7a02e66b5 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIElectrolyserMetal.java +++ b/src/main/java/com/hbm/inventory/gui/GUIElectrolyserMetal.java @@ -11,7 +11,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityElectrolyser; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIHadron.java b/src/main/java/com/hbm/inventory/gui/GUIHadron.java index 92d97a872..0cae2f176 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIHadron.java +++ b/src/main/java/com/hbm/inventory/gui/GUIHadron.java @@ -12,7 +12,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntityHadron; import com.hbm.tileentity.machine.TileEntityHadron.EnumHadronState; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUILaunchPadLarge.java b/src/main/java/com/hbm/inventory/gui/GUILaunchPadLarge.java index ebcbe6365..a4d3824cc 100644 --- a/src/main/java/com/hbm/inventory/gui/GUILaunchPadLarge.java +++ b/src/main/java/com/hbm/inventory/gui/GUILaunchPadLarge.java @@ -14,7 +14,7 @@ import com.hbm.items.weapon.ItemMissile; import com.hbm.lib.RefStrings; import com.hbm.render.item.ItemRenderMissileGeneric; import com.hbm.tileentity.bomb.TileEntityLaunchPadBase; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderHelper; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java b/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java index 7e50956a2..5c8f9e55c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java @@ -14,7 +14,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssembler.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssembler.java index 795d8882b..8f0be9228 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineAssembler.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssembler.java @@ -6,7 +6,7 @@ import com.hbm.inventory.container.ContainerMachineAssembler; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineAssembler; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineBattery.java b/src/main/java/com/hbm/inventory/gui/GUIMachineBattery.java index 2fa8c4bbe..b82ed39d4 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineBattery.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineBattery.java @@ -18,7 +18,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.storage.TileEntityMachineBattery; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; public class GUIMachineBattery extends GuiInfoContainer { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemplant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemplant.java index fc03ff008..9eb22f102 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemplant.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemplant.java @@ -6,7 +6,7 @@ import com.hbm.inventory.container.ContainerMachineChemplant; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineChemplant; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java b/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java index 5f5cfc339..29cf1d2a1 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java @@ -5,7 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineCyclotron; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineCyclotron; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineDiFurnaceRTG.java b/src/main/java/com/hbm/inventory/gui/GUIMachineDiFurnaceRTG.java index 36606b0f4..ffd99b533 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineDiFurnaceRTG.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineDiFurnaceRTG.java @@ -10,7 +10,7 @@ import com.hbm.inventory.container.ContainerMachineDiFurnaceRTG; import com.hbm.items.machine.ItemRTGPellet; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityDiFurnaceRTG; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java b/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java index 1f97b7216..bfb80de4b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java @@ -11,7 +11,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.inventory.container.ContainerElectricFurnace; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineElectricFurnace; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; public class GUIMachineElectricFurnace extends GuiInfoContainer { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineExcavator.java b/src/main/java/com/hbm/inventory/gui/GUIMachineExcavator.java index fe81cccba..2fb7c9065 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineExcavator.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineExcavator.java @@ -7,7 +7,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineExcavator; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineGasCent.java b/src/main/java/com/hbm/inventory/gui/GUIMachineGasCent.java index 0b81a0bd8..9213bfaf2 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineGasCent.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineGasCent.java @@ -5,7 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineGasCent; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineGasCent; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java b/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java index eca4887c6..addb10a33 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java @@ -8,7 +8,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.oil.TileEntityMachineGasFlare; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java b/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java index faa229824..91e00e52d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java @@ -5,7 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineOilWell; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.oil.TileEntityOilDrillBase; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRTG.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRTG.java index 22fa883f6..90ca0759b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineRTG.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRTG.java @@ -8,7 +8,7 @@ import com.hbm.inventory.container.ContainerMachineRTG; import com.hbm.items.machine.ItemRTGPellet; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineRTG; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java index 43fd1ba61..d2c1d4b7f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNT.java @@ -9,7 +9,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineRadarNT; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.entity.RadarEntry; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNTSlots.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNTSlots.java index 2c9338326..4f4fc4987 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNTSlots.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRadarNTSlots.java @@ -8,7 +8,7 @@ import com.hbm.inventory.container.ContainerMachineRadarNT; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.TileEntityMachineRadarNT; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRotaryFurnace.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRotaryFurnace.java index 22ceb1949..01e5acf9f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineRotaryFurnace.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRotaryFurnace.java @@ -10,7 +10,7 @@ import com.hbm.inventory.container.ContainerMachineRotaryFurnace; import com.hbm.inventory.material.Mats; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineRotaryFurnace; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineStrandCaster.java b/src/main/java/com/hbm/inventory/gui/GUIMachineStrandCaster.java index f30b6d7a1..1037d1fa8 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineStrandCaster.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineStrandCaster.java @@ -4,7 +4,8 @@ import com.hbm.inventory.container.ContainerMachineStrandCaster; import com.hbm.inventory.material.Mats; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineStrandCaster; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index fe6ecbdea..eee3c7fad 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -14,7 +14,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineTurbineGas; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUINukeBoy.java b/src/main/java/com/hbm/inventory/gui/GUINukeBoy.java index b89cff524..3d2170bbc 100644 --- a/src/main/java/com/hbm/inventory/gui/GUINukeBoy.java +++ b/src/main/java/com/hbm/inventory/gui/GUINukeBoy.java @@ -6,7 +6,7 @@ import com.hbm.inventory.container.ContainerNukeBoy; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.tileentity.bomb.TileEntityNukeBoy; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUINukeGadget.java b/src/main/java/com/hbm/inventory/gui/GUINukeGadget.java index ad0d4c8ef..ee1979ebf 100644 --- a/src/main/java/com/hbm/inventory/gui/GUINukeGadget.java +++ b/src/main/java/com/hbm/inventory/gui/GUINukeGadget.java @@ -10,7 +10,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerNukeGadget; import com.hbm.lib.RefStrings; import com.hbm.tileentity.bomb.TileEntityNukeGadget; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; public class GUINukeGadget extends GuiInfoContainer { diff --git a/src/main/java/com/hbm/inventory/gui/GUINukeMan.java b/src/main/java/com/hbm/inventory/gui/GUINukeMan.java index b89d2b043..79268b460 100644 --- a/src/main/java/com/hbm/inventory/gui/GUINukeMan.java +++ b/src/main/java/com/hbm/inventory/gui/GUINukeMan.java @@ -10,7 +10,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerNukeMan; import com.hbm.lib.RefStrings; import com.hbm.tileentity.bomb.TileEntityNukeMan; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; public class GUINukeMan extends GuiInfoContainer { diff --git a/src/main/java/com/hbm/inventory/gui/GUINukeMike.java b/src/main/java/com/hbm/inventory/gui/GUINukeMike.java index b42539226..1c8c3abfd 100644 --- a/src/main/java/com/hbm/inventory/gui/GUINukeMike.java +++ b/src/main/java/com/hbm/inventory/gui/GUINukeMike.java @@ -6,7 +6,7 @@ import com.hbm.inventory.container.ContainerNukeMike; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.tileentity.bomb.TileEntityNukeMike; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUINukeTsar.java b/src/main/java/com/hbm/inventory/gui/GUINukeTsar.java index 4d22cde31..eada61893 100644 --- a/src/main/java/com/hbm/inventory/gui/GUINukeTsar.java +++ b/src/main/java/com/hbm/inventory/gui/GUINukeTsar.java @@ -11,7 +11,7 @@ import com.hbm.inventory.container.ContainerNukeTsar; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.tileentity.bomb.TileEntityNukeTsar; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; public class GUINukeTsar extends GuiInfoContainer { diff --git a/src/main/java/com/hbm/inventory/gui/GUIPASource.java b/src/main/java/com/hbm/inventory/gui/GUIPASource.java index 67852bd7e..ada0eb595 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIPASource.java +++ b/src/main/java/com/hbm/inventory/gui/GUIPASource.java @@ -11,7 +11,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.albion.TileEntityPASource; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java index 4bbbed6d9..0ec74cd29 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java @@ -16,7 +16,7 @@ import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKColumn; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java b/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java index c1fb2b367..7c3184bc4 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java @@ -9,7 +9,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityRadioRec; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIRadiolysis.java b/src/main/java/com/hbm/inventory/gui/GUIRadiolysis.java index 2b25ba85a..26e6ad7d0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRadiolysis.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRadiolysis.java @@ -8,7 +8,7 @@ import com.hbm.inventory.container.ContainerRadiolysis; import com.hbm.items.machine.ItemRTGPellet; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineRadiolysis; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java b/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java index be0312a00..25072180d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java +++ b/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java @@ -7,7 +7,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityReactorZirnox; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUISILEX.java b/src/main/java/com/hbm/inventory/gui/GUISILEX.java index b36c07fcd..c0c66e971 100644 --- a/src/main/java/com/hbm/inventory/gui/GUISILEX.java +++ b/src/main/java/com/hbm/inventory/gui/GUISILEX.java @@ -13,7 +13,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.machine.TileEntitySILEX; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenGuide.java b/src/main/java/com/hbm/inventory/gui/GUIScreenGuide.java index ae65041af..72a044a2d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenGuide.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenGuide.java @@ -11,7 +11,7 @@ import com.hbm.items.tool.ItemGuideBook.GuideImage; import com.hbm.items.tool.ItemGuideBook.GuidePage; import com.hbm.items.tool.ItemGuideBook.GuideText; import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenHolotape.java b/src/main/java/com/hbm/inventory/gui/GUIScreenHolotape.java index 2f9779576..3cdc323b2 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenHolotape.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenHolotape.java @@ -7,7 +7,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.items.ModItems; import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage; import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java index 1f879d0a7..cfd090b59 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java @@ -10,7 +10,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityRadioTorchBase; import com.hbm.tileentity.network.TileEntityRadioTorchSender; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchController.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchController.java index b598d5b9e..55ca21e15 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchController.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchController.java @@ -12,7 +12,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityRadioTorchController; import com.hbm.util.Compat; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.redstoneoverradio.IRORInfo; import api.hbm.redstoneoverradio.IRORValueProvider; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java index 11b38f125..565d86110 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java @@ -10,7 +10,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityRadioTorchLogic; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchReader.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchReader.java index 9a6a2ce7a..5e241a318 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchReader.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchReader.java @@ -12,7 +12,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.TileEntityRadioTorchReader; import com.hbm.util.Compat; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.redstoneoverradio.IRORValueProvider; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenSnowglobe.java b/src/main/java/com/hbm/inventory/gui/GUIScreenSnowglobe.java index 03021464e..ef877a21c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenSnowglobe.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenSnowglobe.java @@ -5,7 +5,7 @@ import java.util.List; import org.lwjgl.opengl.GL11; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; diff --git a/src/main/java/com/hbm/inventory/gui/GUITurretArty.java b/src/main/java/com/hbm/inventory/gui/GUITurretArty.java index 04b188f14..03a69a9b3 100644 --- a/src/main/java/com/hbm/inventory/gui/GUITurretArty.java +++ b/src/main/java/com/hbm/inventory/gui/GUITurretArty.java @@ -5,7 +5,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.turret.TileEntityTurretArty; import com.hbm.tileentity.turret.TileEntityTurretBaseNT; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.entity.player.InventoryPlayer; diff --git a/src/main/java/com/hbm/inventory/gui/GUITurretBase.java b/src/main/java/com/hbm/inventory/gui/GUITurretBase.java index c5964c108..997af0011 100644 --- a/src/main/java/com/hbm/inventory/gui/GUITurretBase.java +++ b/src/main/java/com/hbm/inventory/gui/GUITurretBase.java @@ -12,7 +12,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.turret.TileEntityTurretBaseNT; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/gui/GUITurretHIMARS.java b/src/main/java/com/hbm/inventory/gui/GUITurretHIMARS.java index 2ca5524f1..9baa21939 100644 --- a/src/main/java/com/hbm/inventory/gui/GUITurretHIMARS.java +++ b/src/main/java/com/hbm/inventory/gui/GUITurretHIMARS.java @@ -5,7 +5,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.AuxButtonPacket; import com.hbm.tileentity.turret.TileEntityTurretBaseNT; import com.hbm.tileentity.turret.TileEntityTurretHIMARS; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.entity.player.InventoryPlayer; diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index 58075788b..ea8e989b5 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -19,7 +19,7 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.RefStrings; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index fc4ac638a..6e810bbcc 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -13,8 +13,8 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.material.NTMMaterial.SmeltingBehavior; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemScraps; -import com.hbm.util.I18nUtil; import com.hbm.util.ItemStackUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/hbm/inventory/recipes/GasCentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/GasCentrifugeRecipes.java index c352c085d..3e019e110 100644 --- a/src/main/java/com/hbm/inventory/recipes/GasCentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/GasCentrifugeRecipes.java @@ -11,7 +11,7 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIcon; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/hbm/items/ItemCustomLore.java b/src/main/java/com/hbm/items/ItemCustomLore.java index f5ea42970..97a9b2c83 100644 --- a/src/main/java/com/hbm/items/ItemCustomLore.java +++ b/src/main/java/com/hbm/items/ItemCustomLore.java @@ -6,7 +6,7 @@ import java.util.Random; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java b/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java index 920ad06ed..e9e134585 100644 --- a/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java +++ b/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java @@ -7,7 +7,7 @@ import com.hbm.handler.threading.PacketThreading; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.render.model.ModelArmorBJ; import com.hbm.util.ArmorUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/items/armor/ArmorDNT.java b/src/main/java/com/hbm/items/armor/ArmorDNT.java index 1d2c6f7e4..73617c0be 100644 --- a/src/main/java/com/hbm/items/armor/ArmorDNT.java +++ b/src/main/java/com/hbm/items/armor/ArmorDNT.java @@ -11,13 +11,12 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.render.model.ModelArmorDNT; import com.hbm.util.ArmorUtil; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.resources.I18n; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; @@ -180,7 +179,7 @@ public class ArmorDNT extends ArmorFSBPowered { if(!effects.isEmpty()) { for(PotionEffect effect : effects) { - list.add(EnumChatFormatting.AQUA + " " + I18n.format(Potion.potionTypes[effect.getPotionID()].getName())); + list.add(EnumChatFormatting.AQUA + " " + I18nUtil.format(Potion.potionTypes[effect.getPotionID()].getName())); } } diff --git a/src/main/java/com/hbm/items/armor/ArmorFSB.java b/src/main/java/com/hbm/items/armor/ArmorFSB.java index cf83bf1be..d87dc2e2f 100644 --- a/src/main/java/com/hbm/items/armor/ArmorFSB.java +++ b/src/main/java/com/hbm/items/armor/ArmorFSB.java @@ -12,7 +12,7 @@ import com.hbm.extprop.HbmLivingProps; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.items.ModItems; import com.hbm.util.ContaminationUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.relauncher.ReflectionHelper; @@ -24,7 +24,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.resources.I18n; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -162,7 +161,7 @@ public class ArmorFSB extends ItemArmor implements IArmorDisableModel { if(!effects.isEmpty()) { List potionList = new ArrayList(); for(PotionEffect effect : effects) { - potionList.add(I18n.format(Potion.potionTypes[effect.getPotionID()].getName())); + potionList.add(I18nUtil.format(Potion.potionTypes[effect.getPotionID()].getName())); } toAdd.add(EnumChatFormatting.AQUA + String.join(", ", potionList)); diff --git a/src/main/java/com/hbm/items/armor/ArmorGasMask.java b/src/main/java/com/hbm/items/armor/ArmorGasMask.java index 1359848e8..d763ff5a2 100644 --- a/src/main/java/com/hbm/items/armor/ArmorGasMask.java +++ b/src/main/java/com/hbm/items/armor/ArmorGasMask.java @@ -11,8 +11,8 @@ import com.hbm.lib.RefStrings; import com.hbm.render.model.ModelGasMask; import com.hbm.render.model.ModelM65; import com.hbm.util.ArmorUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.ArmorRegistry.HazardClass; +import com.hbm.util.i18n.I18nUtil; import api.hbm.item.IGasMask; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/items/armor/ArmorTrenchmaster.java b/src/main/java/com/hbm/items/armor/ArmorTrenchmaster.java index c5a9e03fc..c716e18e9 100644 --- a/src/main/java/com/hbm/items/armor/ArmorTrenchmaster.java +++ b/src/main/java/com/hbm/items/armor/ArmorTrenchmaster.java @@ -6,7 +6,7 @@ import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.ArmorModHandler; import com.hbm.items.ModItems; import com.hbm.render.model.ModelArmorTrenchmaster; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/armor/ItemArmorMod.java b/src/main/java/com/hbm/items/armor/ItemArmorMod.java index cc6666e4f..a91cbdf54 100644 --- a/src/main/java/com/hbm/items/armor/ItemArmorMod.java +++ b/src/main/java/com/hbm/items/armor/ItemArmorMod.java @@ -5,7 +5,7 @@ import java.util.List; import com.google.common.collect.Multimap; import com.hbm.handler.ArmorModHandler; import com.hbm.main.MainRegistry; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/armor/ItemModGasmask.java b/src/main/java/com/hbm/items/armor/ItemModGasmask.java index cacecfc27..681caa195 100644 --- a/src/main/java/com/hbm/items/armor/ItemModGasmask.java +++ b/src/main/java/com/hbm/items/armor/ItemModGasmask.java @@ -9,8 +9,8 @@ import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; import com.hbm.render.model.ModelM65; import com.hbm.util.ArmorUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.ArmorRegistry.HazardClass; +import com.hbm.util.i18n.I18nUtil; import api.hbm.item.IGasMask; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/items/armor/ItemModNightVision.java b/src/main/java/com/hbm/items/armor/ItemModNightVision.java index 305819aaf..7ae5f3507 100644 --- a/src/main/java/com/hbm/items/armor/ItemModNightVision.java +++ b/src/main/java/com/hbm/items/armor/ItemModNightVision.java @@ -2,7 +2,8 @@ package com.hbm.items.armor; import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.ArmorModHandler; -import net.minecraft.client.resources.I18n; +import com.hbm.util.i18n.I18nUtil; + import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -22,14 +23,14 @@ public class ItemModNightVision extends ItemArmorMod { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - list.add(EnumChatFormatting.AQUA + I18n.format("item.night_vision.description.item")); + list.add(EnumChatFormatting.AQUA + I18nUtil.format("item.night_vision.description.item")); list.add(""); super.addInformation(itemstack, player, list, bool); } @Override public void addDesc(List list, ItemStack stack, ItemStack armor) { - list.add(EnumChatFormatting.YELLOW + I18n.format("item.night_vision.description.in_armor", stack.getDisplayName())); + list.add(EnumChatFormatting.YELLOW + I18nUtil.format("item.night_vision.description.in_armor", stack.getDisplayName())); } @Override diff --git a/src/main/java/com/hbm/items/food/ItemConserve.java b/src/main/java/com/hbm/items/food/ItemConserve.java index 9b45540e6..592b2eae6 100644 --- a/src/main/java/com/hbm/items/food/ItemConserve.java +++ b/src/main/java/com/hbm/items/food/ItemConserve.java @@ -7,7 +7,7 @@ import com.hbm.entity.effect.EntityVortex; import com.hbm.items.ItemEnumMulti; import com.hbm.items.ModItems; import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/food/ItemPill.java b/src/main/java/com/hbm/items/food/ItemPill.java index 3c7508e47..02207c79f 100644 --- a/src/main/java/com/hbm/items/food/ItemPill.java +++ b/src/main/java/com/hbm/items/food/ItemPill.java @@ -9,7 +9,7 @@ import com.hbm.extprop.HbmLivingProps; import com.hbm.items.ModItems; import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemFood; diff --git a/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java b/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java index 3c4c8f51a..7a1c26a0b 100644 --- a/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java @@ -9,7 +9,7 @@ import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.recipes.AssemblerRecipes; import com.hbm.inventory.recipes.AssemblerRecipes.AssemblerRecipe; import com.hbm.items.ModItems; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemCassette.java b/src/main/java/com/hbm/items/machine/ItemCassette.java index 2809ead79..9a0dc6a55 100644 --- a/src/main/java/com/hbm/items/machine/ItemCassette.java +++ b/src/main/java/com/hbm/items/machine/ItemCassette.java @@ -3,7 +3,7 @@ package com.hbm.items.machine; import java.util.List; import com.hbm.items.ModItems; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java index b063ce516..d644a4515 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java @@ -5,7 +5,7 @@ import java.util.List; import com.hbm.inventory.recipes.ChemplantRecipes; import com.hbm.inventory.recipes.ChemplantRecipes.ChemRecipe; import com.hbm.items.ModItems; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemCrucibleTemplate.java b/src/main/java/com/hbm/items/machine/ItemCrucibleTemplate.java index 38cc57570..878cac22c 100644 --- a/src/main/java/com/hbm/items/machine/ItemCrucibleTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemCrucibleTemplate.java @@ -8,7 +8,7 @@ import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.inventory.recipes.CrucibleRecipes; import com.hbm.inventory.recipes.CrucibleRecipes.CrucibleRecipe; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemDepletedFuel.java b/src/main/java/com/hbm/items/machine/ItemDepletedFuel.java index fe839a410..5ffb16617 100644 --- a/src/main/java/com/hbm/items/machine/ItemDepletedFuel.java +++ b/src/main/java/com/hbm/items/machine/ItemDepletedFuel.java @@ -3,7 +3,7 @@ package com.hbm.items.machine; import java.util.List; import com.hbm.items.special.ItemNuclearWaste; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemFELCrystal.java b/src/main/java/com/hbm/items/machine/ItemFELCrystal.java index 0a105cb2b..850aa4b30 100644 --- a/src/main/java/com/hbm/items/machine/ItemFELCrystal.java +++ b/src/main/java/com/hbm/items/machine/ItemFELCrystal.java @@ -3,7 +3,7 @@ package com.hbm.items.machine; import java.util.List; import com.hbm.items.ModItems; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java b/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java index 85af4ab67..a0ea666ba 100644 --- a/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java +++ b/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java @@ -11,7 +11,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.tileentity.IGUIProvider; import com.hbm.util.ChatBuilder; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemFluidIdentifier.java b/src/main/java/com/hbm/items/machine/ItemFluidIdentifier.java index 5abea5f30..b2068040b 100644 --- a/src/main/java/com/hbm/items/machine/ItemFluidIdentifier.java +++ b/src/main/java/com/hbm/items/machine/ItemFluidIdentifier.java @@ -5,7 +5,7 @@ import java.util.List; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemICFPellet.java b/src/main/java/com/hbm/items/machine/ItemICFPellet.java index 5cbc88ff0..7f115adb2 100644 --- a/src/main/java/com/hbm/items/machine/ItemICFPellet.java +++ b/src/main/java/com/hbm/items/machine/ItemICFPellet.java @@ -12,7 +12,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.util.BobMathUtil; import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemMold.java b/src/main/java/com/hbm/items/machine/ItemMold.java index b92c60640..25b273d4f 100644 --- a/src/main/java/com/hbm/items/machine/ItemMold.java +++ b/src/main/java/com/hbm/items/machine/ItemMold.java @@ -12,7 +12,7 @@ import com.hbm.inventory.material.NTMMaterial; import com.hbm.items.ItemEnums.EnumCasingType; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemPileRod.java b/src/main/java/com/hbm/items/machine/ItemPileRod.java index 103e68494..91735dcea 100644 --- a/src/main/java/com/hbm/items/machine/ItemPileRod.java +++ b/src/main/java/com/hbm/items/machine/ItemPileRod.java @@ -2,7 +2,7 @@ package com.hbm.items.machine; import java.util.List; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java index 59635dcdd..1ab86f42d 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java @@ -9,8 +9,8 @@ import java.util.function.Function; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.rbmk.IRBMKFluxReceiver.NType; +import com.hbm.util.i18n.I18nUtil; import com.hbm.tileentity.machine.rbmk.RBMKDials; -import com.hbm.util.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; diff --git a/src/main/java/com/hbm/items/machine/ItemRTGPellet.java b/src/main/java/com/hbm/items/machine/ItemRTGPellet.java index 151a27f34..0533003d2 100644 --- a/src/main/java/com/hbm/items/machine/ItemRTGPellet.java +++ b/src/main/java/com/hbm/items/machine/ItemRTGPellet.java @@ -11,7 +11,7 @@ import com.hbm.config.VersatileConfig; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRTGPelletDepleted.DepletedRTGMaterial; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; diff --git a/src/main/java/com/hbm/items/machine/ItemScraps.java b/src/main/java/com/hbm/items/machine/ItemScraps.java index 5c3436148..72788e5ac 100644 --- a/src/main/java/com/hbm/items/machine/ItemScraps.java +++ b/src/main/java/com/hbm/items/machine/ItemScraps.java @@ -10,7 +10,7 @@ import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.items.ModItems; import com.hbm.items.special.ItemAutogen; import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.material.NTMMaterial.SmeltingBehavior; diff --git a/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java b/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java index be0883149..36b771381 100644 --- a/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java +++ b/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java @@ -7,7 +7,7 @@ import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/machine/ItemZirnoxRod.java b/src/main/java/com/hbm/items/machine/ItemZirnoxRod.java index d2a50f20d..8ca22d57e 100644 --- a/src/main/java/com/hbm/items/machine/ItemZirnoxRod.java +++ b/src/main/java/com/hbm/items/machine/ItemZirnoxRod.java @@ -6,7 +6,7 @@ import java.util.Locale; import com.hbm.items.ItemEnumMulti; import com.hbm.util.BobMathUtil; import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java b/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java index 6729b027f..a61fc2efd 100644 --- a/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java +++ b/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java @@ -8,7 +8,7 @@ import java.util.Locale; import com.hbm.items.ModItems; import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/special/ItemBookLore.java b/src/main/java/com/hbm/items/special/ItemBookLore.java index 7c4b63446..dcedb72ba 100644 --- a/src/main/java/com/hbm/items/special/ItemBookLore.java +++ b/src/main/java/com/hbm/items/special/ItemBookLore.java @@ -7,7 +7,8 @@ import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IIconRegister; diff --git a/src/main/java/com/hbm/items/special/ItemDemonCore.java b/src/main/java/com/hbm/items/special/ItemDemonCore.java index 549ad61ed..97115f80b 100644 --- a/src/main/java/com/hbm/items/special/ItemDemonCore.java +++ b/src/main/java/com/hbm/items/special/ItemDemonCore.java @@ -3,7 +3,7 @@ package com.hbm.items.special; import java.util.List; import com.hbm.items.ModItems; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/items/special/ItemDigamma.java b/src/main/java/com/hbm/items/special/ItemDigamma.java index 1783971e8..a3555434f 100644 --- a/src/main/java/com/hbm/items/special/ItemDigamma.java +++ b/src/main/java/com/hbm/items/special/ItemDigamma.java @@ -5,7 +5,7 @@ import java.util.List; import com.hbm.config.WeaponConfig; import com.hbm.entity.effect.EntityQuasar; import com.hbm.util.ContaminationUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/com/hbm/items/special/ItemDrop.java b/src/main/java/com/hbm/items/special/ItemDrop.java index 14e921edc..154785cf5 100644 --- a/src/main/java/com/hbm/items/special/ItemDrop.java +++ b/src/main/java/com/hbm/items/special/ItemDrop.java @@ -17,7 +17,7 @@ import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.interfaces.IBomb; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/items/tool/ItemConveyorWand.java b/src/main/java/com/hbm/items/tool/ItemConveyorWand.java index b393d59f5..1c33446d6 100644 --- a/src/main/java/com/hbm/items/tool/ItemConveyorWand.java +++ b/src/main/java/com/hbm/items/tool/ItemConveyorWand.java @@ -13,7 +13,7 @@ import com.hbm.blocks.network.BlockConveyorBendable; import com.hbm.blocks.network.BlockCraneBase; import com.hbm.main.MainRegistry; import com.hbm.render.util.RenderOverhead; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.WorldInAJar; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/items/tool/ItemDrone.java b/src/main/java/com/hbm/items/tool/ItemDrone.java index f63f44fd6..c4d0e8214 100644 --- a/src/main/java/com/hbm/items/tool/ItemDrone.java +++ b/src/main/java/com/hbm/items/tool/ItemDrone.java @@ -7,7 +7,7 @@ import org.lwjgl.input.Keyboard; import com.hbm.entity.item.EntityDeliveryDrone; import com.hbm.items.ItemEnumMulti; import com.hbm.main.MainRegistry; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/items/tool/ItemGuideBook.java b/src/main/java/com/hbm/items/tool/ItemGuideBook.java index 920344cab..87f40c907 100644 --- a/src/main/java/com/hbm/items/tool/ItemGuideBook.java +++ b/src/main/java/com/hbm/items/tool/ItemGuideBook.java @@ -7,7 +7,7 @@ import com.hbm.inventory.gui.GUIScreenGuide; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/tool/ItemMirrorTool.java b/src/main/java/com/hbm/items/tool/ItemMirrorTool.java index 61db24d6e..5387a1a82 100644 --- a/src/main/java/com/hbm/items/tool/ItemMirrorTool.java +++ b/src/main/java/com/hbm/items/tool/ItemMirrorTool.java @@ -6,7 +6,7 @@ import com.google.common.collect.Multimap; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.tileentity.machine.TileEntitySolarMirror; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.Block; import net.minecraft.entity.SharedMonsterAttributes; diff --git a/src/main/java/com/hbm/items/tool/ItemOilDetector.java b/src/main/java/com/hbm/items/tool/ItemOilDetector.java index 3b9cf86b7..bf89565d2 100644 --- a/src/main/java/com/hbm/items/tool/ItemOilDetector.java +++ b/src/main/java/com/hbm/items/tool/ItemOilDetector.java @@ -7,8 +7,8 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.util.ChatBuilder; +import com.hbm.util.i18n.I18nUtil; -import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; @@ -19,10 +19,9 @@ import net.minecraft.world.World; public class ItemOilDetector extends Item { @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { - list.add(I18n.format(this.getUnlocalizedName() + ".desc1")); - list.add(I18n.format(this.getUnlocalizedName() + ".desc2")); + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + list.add(I18nUtil.format(this.getUnlocalizedName() + ".desc1")); + list.add(I18nUtil.format(this.getUnlocalizedName() + ".desc2")); } @Override diff --git a/src/main/java/com/hbm/items/tool/ItemPipette.java b/src/main/java/com/hbm/items/tool/ItemPipette.java index 97602afa1..6486efec1 100644 --- a/src/main/java/com/hbm/items/tool/ItemPipette.java +++ b/src/main/java/com/hbm/items/tool/ItemPipette.java @@ -3,7 +3,7 @@ package com.hbm.items.tool; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.fluidmk2.IFillableItem; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/items/tool/ItemRBMKTool.java b/src/main/java/com/hbm/items/tool/ItemRBMKTool.java index 34f5ef405..def28215e 100644 --- a/src/main/java/com/hbm/items/tool/ItemRBMKTool.java +++ b/src/main/java/com/hbm/items/tool/ItemRBMKTool.java @@ -8,7 +8,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.tileentity.machine.rbmk.TileEntityCraneConsole; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.Block; import net.minecraft.entity.SharedMonsterAttributes; diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index e6636d0f2..33f74af82 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -7,7 +7,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.util.ChatBuilder; import com.hbm.util.Either; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.Block; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmo.java b/src/main/java/com/hbm/items/weapon/ItemAmmo.java index a887e20b8..24776babc 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmo.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmo.java @@ -10,7 +10,7 @@ import com.hbm.items.ItemAmmoEnums.IAmmoItemEnum; import com.hbm.items.ItemEnumMulti; import com.hbm.lib.RefStrings; import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 167435ed1..4511c9fc8 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -88,6 +88,8 @@ import com.hbm.tileentity.turret.*; import com.hbm.util.BobMathUtil; import com.hbm.util.ColorUtil; import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.i18n.I18nClient; +import com.hbm.util.i18n.ITranslate; import com.hbm.wiaj.cannery.Jars; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; @@ -131,8 +133,12 @@ import java.util.*; import java.util.Map.Entry; public class ClientProxy extends ServerProxy { + + private static final I18nClient I18N = new I18nClient(); public RenderInfoSystem theInfoSystem = new RenderInfoSystem(); + + public ITranslate getI18n() { return I18N; } /** Runs just before item an block init */ @Override diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index d54588f8a..a2ee8b962 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -57,6 +57,7 @@ import com.hbm.tileentity.bomb.TileEntityNukeCustom.CustomNukeEntry; import com.hbm.tileentity.bomb.TileEntityNukeCustom.EnumEntryType; import com.hbm.util.*; import com.hbm.util.ArmorRegistry.HazardClass; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.GuiWorldInAJar; import com.hbm.wiaj.cannery.CanneryBase; import com.hbm.wiaj.cannery.Jars; diff --git a/src/main/java/com/hbm/main/ServerProxy.java b/src/main/java/com/hbm/main/ServerProxy.java index 98f09fbb7..4e9d7704d 100644 --- a/src/main/java/com/hbm/main/ServerProxy.java +++ b/src/main/java/com/hbm/main/ServerProxy.java @@ -3,6 +3,9 @@ package com.hbm.main; import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.saveddata.TomSaveData; import com.hbm.sound.AudioWrapper; +import com.hbm.util.i18n.I18nServer; +import com.hbm.util.i18n.ITranslate; + import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -13,6 +16,8 @@ import java.util.ArrayList; import java.util.List; public class ServerProxy { + + private static final I18nServer I18N = new I18nServer(); //sort by estimated time of display. longer lasting ones should be sorted at the top. public static final int ID_DUCK = 0; @@ -28,6 +33,8 @@ public class ServerProxy { public static final int ID_TOOLABILITY = 10; public static final int ID_GUN_MODE = 11; public static final int ID_GAS_HAZARD = 12; + + public ITranslate getI18n() { return I18N; } public void registerPreRenderInfo() { } public void registerRenderInfo() { } diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java index c149f2089..2e0933a12 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java @@ -8,7 +8,7 @@ import com.hbm.main.ResourceManager; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKColumn; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKScreen; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; diff --git a/src/main/java/com/hbm/tileentity/IRadioisotopeFuel.java b/src/main/java/com/hbm/tileentity/IRadioisotopeFuel.java index 5f737b6e8..4c340f332 100644 --- a/src/main/java/com/hbm/tileentity/IRadioisotopeFuel.java +++ b/src/main/java/com/hbm/tileentity/IRadioisotopeFuel.java @@ -9,7 +9,7 @@ import javax.annotation.Nonnull; import com.hbm.config.VersatileConfig; import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/hbm/tileentity/IRepairable.java b/src/main/java/com/hbm/tileentity/IRepairable.java index 27f3f2974..029d7871b 100644 --- a/src/main/java/com/hbm/tileentity/IRepairable.java +++ b/src/main/java/com/hbm/tileentity/IRepairable.java @@ -7,8 +7,8 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ILookOverlay; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.items.tool.ItemBlowtorch; -import com.hbm.util.I18nUtil; import com.hbm.util.InventoryUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java index 3471a589a..001ae77b3 100644 --- a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java +++ b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.List; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.Block; import net.minecraft.util.EnumChatFormatting; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 69a79c1dc..084aa7859 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -29,8 +29,8 @@ import com.hbm.tileentity.*; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.BobMathUtil; import com.hbm.util.CrucibleUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java index 76cb76189..ecabdf827 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java @@ -14,7 +14,7 @@ import com.hbm.module.ModuleBurnTime; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index c9c23b3eb..6c9be1f71 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -29,8 +29,8 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CrucibleUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java index 9db6921c8..257fc33af 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java @@ -19,9 +19,9 @@ import com.hbm.lib.Library; import com.hbm.tileentity.*; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardReceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java index fd7d1b822..53b47d04b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java @@ -15,8 +15,8 @@ import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IBatteryItem; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java index 9919ffec1..61e8d0a92 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java @@ -16,8 +16,8 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java index aeb067770..07c5ea852 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java @@ -21,7 +21,7 @@ import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; import com.hbm.util.CompatEnergyControl; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.tile.IInfoProviderEC; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java index b6b6310ac..2d6ff9a14 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java @@ -18,8 +18,8 @@ import com.hbm.lib.Library; import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java index df70317d6..a482e7e20 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java @@ -22,9 +22,9 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.InventoryUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressorBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressorBase.java index 3f1987112..74e7ccadf 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressorBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressorBase.java @@ -19,9 +19,9 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index 8b4cbe76c..a72d1996e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -18,8 +18,8 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.tileentity.*; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IBatteryItem; import api.hbm.energymk2.IEnergyReceiverMK2; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java index b254d0fdf..434dc4f70 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java @@ -19,9 +19,9 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.*; import com.hbm.util.CompatEnergyControl; -import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java index 0462f77f7..b2afe4309 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java @@ -16,7 +16,7 @@ import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BufferUtil; import com.hbm.util.CompatEnergyControl; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.tile.IInfoProviderEC; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index 3f8223d23..84c1fd378 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -15,7 +15,7 @@ import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IBatteryItem; import api.hbm.energymk2.IEnergyReceiverMK2; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index c8dccffe8..28b4e49f7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -27,11 +27,11 @@ import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Compat; import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.InventoryUtil; import com.hbm.util.ItemStackUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.conveyor.IConveyorBelt; import api.hbm.energymk2.IEnergyReceiverMK2; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java index 77ac2635a..06ad4379f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java @@ -15,8 +15,8 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index 6dff13040..2d82a79ff 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -23,8 +23,8 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.InventoryUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.block.IDrillInteraction; import api.hbm.block.IMiningDrill; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index b3b14eacd..ad0c284e9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -16,8 +16,8 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.*; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java index 0c04b8f33..167490875 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java @@ -25,8 +25,8 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index b8cfe0333..6f058d12a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -23,8 +23,8 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardReceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index 250875829..6b804feaa 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -27,8 +27,8 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.CompatEnergyControl; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.fluid.IFluidStandardTransceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java index 3f1d1b7e8..5ec2fdf88 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java @@ -15,8 +15,8 @@ import com.hbm.lib.Library; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import com.hbm.world.feature.OilSpot; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java index 49eba901b..ae6d26e38 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java @@ -23,9 +23,9 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; -import com.hbm.util.I18nUtil; import com.hbm.util.ParticleUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.fluid.IFluidStandardReceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java index 072acadcf..69cfd4533 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java @@ -18,8 +18,8 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardSender; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java index 942a10788..bd43227dd 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java @@ -13,8 +13,8 @@ import com.hbm.lib.Library; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java index 1dfee2567..82840391f 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java @@ -13,8 +13,8 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java index 146a4629b..35a510752 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java @@ -23,8 +23,8 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.BobMathUtil; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java index 67cc1e661..5cf61f101 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java @@ -17,9 +17,9 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; -import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardReceiver; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index 4be8b8847..219838228 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -18,8 +18,9 @@ import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.util.BobMathUtil; import com.hbm.util.Compat; -import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.i18n.I18nUtil; + import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index ddb38c3bf..bdb21f97c 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -17,7 +17,7 @@ import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual.RBMKColor; import com.hbm.util.BufferUtil; import com.hbm.util.Compat; import com.hbm.util.EnumUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java index bd2bd5c92..0a19dd833 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java @@ -15,7 +15,7 @@ import com.hbm.potion.HbmPotion; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; import com.hbm.util.EntityDamageUtil; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/util/DamageResistanceHandler.java b/src/main/java/com/hbm/util/DamageResistanceHandler.java index ff7f99b19..559d6a578 100644 --- a/src/main/java/com/hbm/util/DamageResistanceHandler.java +++ b/src/main/java/com/hbm/util/DamageResistanceHandler.java @@ -18,6 +18,7 @@ import com.google.gson.stream.JsonWriter; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; import com.hbm.util.Tuple.Quartet; +import com.hbm.util.i18n.I18nUtil; import api.hbm.entity.IResistanceProvider; import cpw.mods.fml.common.eventhandler.SubscribeEvent; diff --git a/src/main/java/com/hbm/util/I18nUtil.java b/src/main/java/com/hbm/util/i18n/I18nClient.java similarity index 59% rename from src/main/java/com/hbm/util/I18nUtil.java rename to src/main/java/com/hbm/util/i18n/I18nClient.java index 13d4a2d36..bd444196c 100644 --- a/src/main/java/com/hbm/util/I18nUtil.java +++ b/src/main/java/com/hbm/util/i18n/I18nClient.java @@ -1,47 +1,31 @@ -package com.hbm.util; +package com.hbm.util.i18n; + +import java.util.ArrayList; +import java.util.List; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.resources.I18n; -import java.util.ArrayList; -import java.util.List; - @SideOnly(Side.CLIENT) -public class I18nUtil { +public class I18nClient implements ITranslate { - /** - * Simple wrapper for I18n, for consistency - * @param s - * @param args - * @return - */ + @Override @SideOnly(Side.CLIENT) - public static String resolveKey(String s, Object... args) { + public String resolveKey(String s, Object... args) { return I18n.format(s, args); } - /** - * Wrapper for I18n but cuts up the result using NTM's line break character ($) - * @param s - * @param args - * @return - */ + @Override @SideOnly(Side.CLIENT) - public static String[] resolveKeyArray(String s, Object... args) { + public String[] resolveKeyArray(String s, Object... args) { return resolveKey(s, args).split("\\$"); } - /** - * The same as autoBreak, but it also respects NTM's break character ($) for manual line breaking in addition to the automatic ones - * @param fontRenderer - * @param text - * @param width - * @return - */ + @Override @SideOnly(Side.CLIENT) - public static List autoBreakWithParagraphs(FontRenderer fontRenderer, String text, int width) { + public List autoBreakWithParagraphs(Object fontRenderer, String text, int width) { String[] paragraphs = text.split("\\$"); List lines = new ArrayList(); @@ -53,16 +37,11 @@ public class I18nUtil { return lines; } - /** - * Turns one string into a list of strings, cutting sentences up to fit within the defined width if they were rendered in a GUI - * @param fontRenderer - * @param text - * @param width - * @return - */ + @Override @SideOnly(Side.CLIENT) - public static List autoBreak(FontRenderer fontRenderer, String text, int width) { + public List autoBreak(Object o, String text, int width) { + FontRenderer fontRenderer = (FontRenderer) o; List lines = new ArrayList(); //split the text by all spaces String[] words = text.split(" "); diff --git a/src/main/java/com/hbm/util/i18n/I18nServer.java b/src/main/java/com/hbm/util/i18n/I18nServer.java new file mode 100644 index 000000000..9840354a1 --- /dev/null +++ b/src/main/java/com/hbm/util/i18n/I18nServer.java @@ -0,0 +1,33 @@ +package com.hbm.util.i18n; + +import java.util.ArrayList; +import java.util.List; + +public class I18nServer implements ITranslate { + + public static String SARCASTIC_MESSAGE = "I18N CALL SERVERSIDE - GREAT JOB"; + + @Override + public String resolveKey(String s, Object... args) { + return SARCASTIC_MESSAGE; + } + + @Override + public String[] resolveKeyArray(String s, Object... args) { + return new String[] { SARCASTIC_MESSAGE }; + } + + @Override + public List autoBreakWithParagraphs(Object fontRenderer, String text, int width) { + List list = new ArrayList(); + list.add(SARCASTIC_MESSAGE); + return list; + } + + @Override + public List autoBreak(Object fontRenderer, String text, int width) { + List list = new ArrayList(); + list.add(SARCASTIC_MESSAGE); + return list; + } +} diff --git a/src/main/java/com/hbm/util/i18n/I18nUtil.java b/src/main/java/com/hbm/util/i18n/I18nUtil.java new file mode 100644 index 000000000..92bd9e769 --- /dev/null +++ b/src/main/java/com/hbm/util/i18n/I18nUtil.java @@ -0,0 +1,50 @@ +package com.hbm.util.i18n; + +import java.util.List; + +import com.hbm.main.MainRegistry; + +public class I18nUtil { + + + /** + * Simple wrapper for I18n, for consistency + * @param s + * @param args + * @return + */ + public static String resolveKey(String s, Object... args) { return MainRegistry.proxy.getI18n().resolveKey(s, args); } + public static String format(String s, Object... args) { return MainRegistry.proxy.getI18n().resolveKey(s, args); } //alias + + /** + * Wrapper for I18n but cuts up the result using NTM's line break character ($) + * @param s + * @param args + * @return + */ + public static String[] resolveKeyArray(String s, Object... args) { + return MainRegistry.proxy.getI18n().resolveKeyArray(s, args); + } + + /** + * The same as autoBreak, but it also respects NTM's break character ($) for manual line breaking in addition to the automatic ones + * @param fontRenderer + * @param text + * @param width + * @return + */ + public static List autoBreakWithParagraphs(Object fontRenderer, String text, int width) { + return MainRegistry.proxy.getI18n().autoBreakWithParagraphs(fontRenderer, text, width); + } + + /** + * Turns one string into a list of strings, cutting sentences up to fit within the defined width if they were rendered in a GUI + * @param fontRenderer + * @param text + * @param width + * @return + */ + public static List autoBreak(Object fontRenderer, String text, int width) { + return MainRegistry.proxy.getI18n().autoBreak(fontRenderer, text, width); + } +} diff --git a/src/main/java/com/hbm/util/i18n/ITranslate.java b/src/main/java/com/hbm/util/i18n/ITranslate.java new file mode 100644 index 000000000..d1b2eec22 --- /dev/null +++ b/src/main/java/com/hbm/util/i18n/ITranslate.java @@ -0,0 +1,34 @@ +package com.hbm.util.i18n; + +import java.util.List; + +public interface ITranslate { + + public String resolveKey(String s, Object... args); + + /** + * Wrapper for I18n but cuts up the result using NTM's line break character ($) + * @param s + * @param args + * @return + */ + public String[] resolveKeyArray(String s, Object... args); + + /** + * The same as autoBreak, but it also respects NTM's break character ($) for manual line breaking in addition to the automatic ones + * @param fontRenderer + * @param text + * @param width + * @return + */ + public List autoBreakWithParagraphs(Object fontRenderer, String text, int width); + + /** + * Turns one string into a list of strings, cutting sentences up to fit within the defined width if they were rendered in a GUI + * @param fontRenderer + * @param text + * @param width + * @return + */ + public List autoBreak(Object fontRenderer, String text, int width); +} diff --git a/src/main/java/com/hbm/wiaj/GuiWorldInAJar.java b/src/main/java/com/hbm/wiaj/GuiWorldInAJar.java index ac8fea198..8ad557e97 100644 --- a/src/main/java/com/hbm/wiaj/GuiWorldInAJar.java +++ b/src/main/java/com/hbm/wiaj/GuiWorldInAJar.java @@ -10,7 +10,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.actors.ActorFancyPanel; import com.hbm.wiaj.actors.ISpecialActor; import com.hbm.wiaj.actors.ActorFancyPanel.Orientation; diff --git a/src/main/java/com/hbm/wiaj/actors/ActorFancyPanel.java b/src/main/java/com/hbm/wiaj/actors/ActorFancyPanel.java index f40436d6c..4fea246da 100644 --- a/src/main/java/com/hbm/wiaj/actors/ActorFancyPanel.java +++ b/src/main/java/com/hbm/wiaj/actors/ActorFancyPanel.java @@ -7,7 +7,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.WorldInAJar; diff --git a/src/main/java/com/hbm/wiaj/cannery/CanneryCentrifuge.java b/src/main/java/com/hbm/wiaj/cannery/CanneryCentrifuge.java index fffdfadca..6a2074b20 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CanneryCentrifuge.java +++ b/src/main/java/com/hbm/wiaj/cannery/CanneryCentrifuge.java @@ -7,7 +7,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; import com.hbm.main.ResourceManager; import com.hbm.tileentity.network.TileEntityPipeBaseNT; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.JarScript; import com.hbm.wiaj.WorldInAJar; diff --git a/src/main/java/com/hbm/wiaj/cannery/CanneryCrucible.java b/src/main/java/com/hbm/wiaj/cannery/CanneryCrucible.java index 0e0b7f5ca..b4de49265 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CanneryCrucible.java +++ b/src/main/java/com/hbm/wiaj/cannery/CanneryCrucible.java @@ -10,7 +10,7 @@ import com.hbm.render.tileentity.RenderCrucible; import com.hbm.render.tileentity.RenderFoundry; import com.hbm.tileentity.machine.TileEntityCrucible; import com.hbm.tileentity.machine.TileEntityFoundryBasin; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.JarScript; import com.hbm.wiaj.WorldInAJar; diff --git a/src/main/java/com/hbm/wiaj/cannery/CanneryFEnSU.java b/src/main/java/com/hbm/wiaj/cannery/CanneryFEnSU.java index dcd1e22ee..57136b8de 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CanneryFEnSU.java +++ b/src/main/java/com/hbm/wiaj/cannery/CanneryFEnSU.java @@ -2,7 +2,7 @@ package com.hbm.wiaj.cannery; import com.hbm.blocks.ModBlocks; import com.hbm.render.tileentity.RenderFENSU; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.JarScript; import com.hbm.wiaj.WorldInAJar; diff --git a/src/main/java/com/hbm/wiaj/cannery/CanneryFirebox.java b/src/main/java/com/hbm/wiaj/cannery/CanneryFirebox.java index 1cde66431..2cbaae53a 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CanneryFirebox.java +++ b/src/main/java/com/hbm/wiaj/cannery/CanneryFirebox.java @@ -6,7 +6,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; import com.hbm.main.ResourceManager; import com.hbm.render.tileentity.RenderStirling; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.JarScript; import com.hbm.wiaj.WorldInAJar; diff --git a/src/main/java/com/hbm/wiaj/cannery/CanneryFoundryChannel.java b/src/main/java/com/hbm/wiaj/cannery/CanneryFoundryChannel.java index 29c8a3462..3392bff72 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CanneryFoundryChannel.java +++ b/src/main/java/com/hbm/wiaj/cannery/CanneryFoundryChannel.java @@ -12,7 +12,7 @@ import com.hbm.tileentity.machine.TileEntityFoundryChannel; import com.hbm.tileentity.machine.TileEntityFoundryMold; import com.hbm.tileentity.machine.TileEntityFoundryOutlet; import com.hbm.tileentity.machine.TileEntityFoundryTank; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.JarScript; import com.hbm.wiaj.WorldInAJar; diff --git a/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java b/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java index 90089afc6..38438a9bc 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java +++ b/src/main/java/com/hbm/wiaj/cannery/CanneryHadron.java @@ -1,7 +1,7 @@ package com.hbm.wiaj.cannery; import com.hbm.blocks.ModBlocks; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.JarScript; import com.hbm.wiaj.WorldInAJar; diff --git a/src/main/java/com/hbm/wiaj/cannery/CannerySILEX.java b/src/main/java/com/hbm/wiaj/cannery/CannerySILEX.java index 5d6900f75..1595527d5 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CannerySILEX.java +++ b/src/main/java/com/hbm/wiaj/cannery/CannerySILEX.java @@ -13,7 +13,7 @@ import com.hbm.render.util.BeamPronter; import com.hbm.render.util.BeamPronter.EnumBeamType; import com.hbm.render.util.BeamPronter.EnumWaveType; import com.hbm.tileentity.network.TileEntityPipeBaseNT; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.JarScript; import com.hbm.wiaj.WorldInAJar; diff --git a/src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java b/src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java index e7d956e53..caaabcac2 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java +++ b/src/main/java/com/hbm/wiaj/cannery/CannerySchottky.java @@ -3,7 +3,7 @@ package com.hbm.wiaj.cannery; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; import com.hbm.tileentity.machine.TileEntityHadronDiode; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.JarScript; import com.hbm.wiaj.WorldInAJar; diff --git a/src/main/java/com/hbm/wiaj/cannery/CanneryStirling.java b/src/main/java/com/hbm/wiaj/cannery/CanneryStirling.java index ea5eb2520..e7ee9b4a3 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CanneryStirling.java +++ b/src/main/java/com/hbm/wiaj/cannery/CanneryStirling.java @@ -5,7 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.ModBlocks; import com.hbm.main.ResourceManager; import com.hbm.render.tileentity.RenderStirling; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.JarScript; import com.hbm.wiaj.WorldInAJar; diff --git a/src/main/java/com/hbm/wiaj/cannery/CanneryWillow.java b/src/main/java/com/hbm/wiaj/cannery/CanneryWillow.java index 11c9c4b6e..b14d84796 100644 --- a/src/main/java/com/hbm/wiaj/cannery/CanneryWillow.java +++ b/src/main/java/com/hbm/wiaj/cannery/CanneryWillow.java @@ -6,7 +6,7 @@ import com.hbm.blocks.generic.BlockTallPlant.EnumTallFlower; import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.items.ModItems; import com.hbm.items.ItemEnums.EnumPlantType; -import com.hbm.util.I18nUtil; +import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.JarScene; import com.hbm.wiaj.JarScript; import com.hbm.wiaj.WorldInAJar; From 00c73d63c06801533d3863ee8bd9ceca0b77559f Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 26 May 2025 11:58:28 +0300 Subject: [PATCH 092/491] Fix #2177 The original hotfix is no longer necessary, as all remaning calls to getFullName are fully client-side --- .../com/hbm/handler/ability/IBaseAbility.java | 6 +-- .../com/hbm/handler/ability/ToolPreset.java | 38 +++++++++++-------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/hbm/handler/ability/IBaseAbility.java b/src/main/java/com/hbm/handler/ability/IBaseAbility.java index 8960c0e3f..3ba941022 100644 --- a/src/main/java/com/hbm/handler/ability/IBaseAbility.java +++ b/src/main/java/com/hbm/handler/ability/IBaseAbility.java @@ -1,6 +1,6 @@ package com.hbm.handler.ability; -import com.hbm.util.i18n.I18nUtil; +import net.minecraft.client.resources.I18n; public interface IBaseAbility extends Comparable { public String getName(); @@ -9,9 +9,9 @@ public interface IBaseAbility extends Comparable { return ""; } + // Note: only usable client-side. Server-side, use ChatComponentTranslation manually instead public default String getFullName(int level) { - //bandaid fix so it doesn't crash servers instantly, TODO: use ChatComponentTranslation - return I18nUtil.format(getName()) + getExtension(level); + return I18n.format(getName()) + getExtension(level); } public default boolean isAllowed() { diff --git a/src/main/java/com/hbm/handler/ability/ToolPreset.java b/src/main/java/com/hbm/handler/ability/ToolPreset.java index e705b23a9..7cc065478 100644 --- a/src/main/java/com/hbm/handler/ability/ToolPreset.java +++ b/src/main/java/com/hbm/handler/ability/ToolPreset.java @@ -27,26 +27,32 @@ public class ToolPreset { this.harvestAbilityLevel = harvestAbilityLevel; } - public ChatComponentText getMessage() { - if(isNone()) - return ChatBuilder.start("[Tool ability deactivated]").color(EnumChatFormatting.GOLD).flush(); + public ChatComponentText getMessage() { + if (isNone()) { + return ChatBuilder.start("[Tool ability deactivated]").color(EnumChatFormatting.GOLD).flush(); + } - String areaPart = areaAbility.getFullName(areaAbilityLevel); - String harvestPart = harvestAbility.getFullName(harvestAbilityLevel); + boolean hasArea = areaAbility != IToolAreaAbility.NONE; + boolean hasHarvest = harvestAbility != IToolHarvestAbility.NONE; + + ChatBuilder builder = ChatBuilder.start("[Enabled "); - ChatBuilder builder = ChatBuilder.start("[Enabled "); + if (hasArea) { + builder.nextTranslation(areaAbility.getName()); + builder.next(areaAbility.getExtension(areaAbilityLevel)); + } - if(!areaPart.isEmpty()) - builder.next(areaPart); + if (hasArea && hasHarvest) { + builder.next(" + "); + } - if(!areaPart.isEmpty() && !harvestPart.isEmpty()) - builder.next(" + "); - - if(!harvestPart.isEmpty()) - builder.next(harvestPart); - - return builder.colorAll(EnumChatFormatting.YELLOW).flush(); - } + if (hasHarvest) { + builder.nextTranslation(harvestAbility.getName()); + builder.next(harvestAbility.getExtension(harvestAbilityLevel)); + } + + return builder.colorAll(EnumChatFormatting.YELLOW).flush(); + } public boolean isNone() { return areaAbility == IToolAreaAbility.NONE && harvestAbility == IToolHarvestAbility.NONE; From 8f2a858f52e7febc85e4b66327bcb4bd094df35e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 26 May 2025 14:51:11 +0300 Subject: [PATCH 093/491] Geiger counter comparator output --- .../com/hbm/blocks/machine/GeigerCounter.java | 18 ++++++++++++++++++ .../tileentity/machine/TileEntityGeiger.java | 1 + 2 files changed, 19 insertions(+) diff --git a/src/main/java/com/hbm/blocks/machine/GeigerCounter.java b/src/main/java/com/hbm/blocks/machine/GeigerCounter.java index b9d3e933c..bd07ad6d0 100644 --- a/src/main/java/com/hbm/blocks/machine/GeigerCounter.java +++ b/src/main/java/com/hbm/blocks/machine/GeigerCounter.java @@ -131,4 +131,22 @@ public class GeigerCounter extends BlockContainer { return false; } } + + @Override + public boolean hasComparatorInputOverride() { + return true; + } + + @Override + public int getComparatorInputOverride(World world, int x, int y, int z, int side) { + TileEntityGeiger te = (TileEntityGeiger)world.getTileEntity(x, y, z); + if (te == null) return 0; + + float rad = te.check(); + + // 0 at exactly 0 rads/sec + // +1 per 5 rads/sec + // 15 at 75+ rads/sec + return Math.min((int)Math.ceil(rad / 5f), 15); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java b/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java index 98719f542..ddd26d465 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java @@ -65,6 +65,7 @@ public class TileEntityGeiger extends TileEntity implements SimpleComponent, IIn public float check() { return ChunkRadiationManager.proxy.getRadiation(worldObj, xCoord, yCoord, zCoord); } + @Override @Optional.Method(modid = "OpenComputers") public String getComponentName() { From ac46cdf1ad6d6444c329ee52ae6ec50535d36276 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 26 May 2025 15:13:57 +0300 Subject: [PATCH 094/491] Fix comparator output --- src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java b/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java index ddd26d465..806756011 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityGeiger.java @@ -35,6 +35,9 @@ public class TileEntityGeiger extends TileEntity implements SimpleComponent, IIn if(timer == 10) { timer = 0; ticker = check(); + + // To update the adjacent comparators + worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.getBlockType()); } if(timer % 5 == 0) { From acbea88eca6c1485c4ba6a9079330dd6407ed762 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 26 May 2025 16:21:59 +0200 Subject: [PATCH 095/491] now we're thinking with portals --- CONTRIBUTING.md | 1 + changelog | 4 +- src/main/java/com/hbm/blocks/ModBlocks.java | 7 +- .../blocks/machine/MachineChemicalPlant.java | 22 ++++ .../hbm/blocks/machine/MachineChemplant.java | 1 + .../com/hbm/handler/ability/IBaseAbility.java | 4 +- .../recipes/loader/GenericRecipes.java | 121 ++++++++++++++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + 9 files changed, 157 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java create mode 100644 src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8e1acbedf..c47daea75 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,6 +14,7 @@ Things you should also avoid include: * unused or half finished util functions (for obvious reasons) * half finished or obviously broken features (à la "bob will fix it, i'm sure of it", please don't do that) * updating the changelog (you're guaranteed to cause a merge conflict with that) +* any use of `I18n`, use `I18nUtil` instead ## Test your code diff --git a/changelog b/changelog index d354db2a9..45c3f8101 100644 --- a/changelog +++ b/changelog @@ -24,4 +24,6 @@ * Fixed strand caster fluid gauges going out of bounds * Fixed arc welder and soldering station not changing buffer size based on upgrade, preventing use of higher overdrive tiers * Fixed non-standard template folder recipes not using the correct icon -* Fixed jetpack flight time not resetting when equipped like armor, causing kicks on servers that don't have flying cheats allowed \ No newline at end of file +* Fixed jetpack flight time not resetting when equipped like armor, causing kicks on servers that don't have flying cheats allowed +* Fixed missing energy damage category localization +* Fixed server crash caused by tool abilities \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index e857521bb..b3e81b36b 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1008,7 +1008,8 @@ public class ModBlocks { public static Block machine_soldering_station; public static Block machine_arc_furnace; - public static Block machine_chemplant; + @Deprecated public static Block machine_chemplant; + public static Block machine_chemical_plant; public static Block machine_chemfac; public static Block machine_mixer; @@ -2230,6 +2231,7 @@ public class ModBlocks { machine_arc_welder = new MachineArcWelder(Material.iron).setBlockName("machine_arc_welder").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_soldering_station = new MachineSolderingStation(Material.iron).setBlockName("machine_soldering_station").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemplant = new MachineChemplant(Material.iron).setBlockName("machine_chemplant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_chemical_plant = new MachineChemicalPlant(Material.iron).setBlockName("machine_chemical_plant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_chemfac = new MachineChemfac(Material.iron).setBlockName("machine_chemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_mixer = new MachineMixer(Material.iron).setBlockName("machine_mixer").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_fluidtank = new MachineFluidTank(Material.iron).setBlockName("machine_fluidtank").setHardness(5.0F).setResistance(20.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_fluidtank"); @@ -3272,7 +3274,8 @@ public class ModBlocks { GameRegistry.registerBlock(machine_assembler, machine_assembler.getUnlocalizedName()); GameRegistry.registerBlock(machine_assemfac, machine_assemfac.getUnlocalizedName()); GameRegistry.registerBlock(machine_chemplant, machine_chemplant.getUnlocalizedName()); - GameRegistry.registerBlock(machine_chemfac, machine_chemfac.getUnlocalizedName()); + register(machine_chemical_plant); + register(machine_chemfac); register(machine_arc_welder); register(machine_soldering_station); register(machine_arc_furnace); diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java b/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java new file mode 100644 index 000000000..58fd028c6 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java @@ -0,0 +1,22 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; + +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class MachineChemicalPlant extends BlockDummyable { + + public MachineChemicalPlant(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return null; + } + + @Override public int[] getDimensions() { return new int[] {2, 0, 1, 1, 1, 1}; } + @Override public int getOffset() { return 1; } +} diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemplant.java b/src/main/java/com/hbm/blocks/machine/MachineChemplant.java index cfe87c0b5..fdf17898f 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChemplant.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChemplant.java @@ -11,6 +11,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class MachineChemplant extends BlockDummyable { public MachineChemplant(Material p_i45386_1_) { diff --git a/src/main/java/com/hbm/handler/ability/IBaseAbility.java b/src/main/java/com/hbm/handler/ability/IBaseAbility.java index 3ba941022..8918a2511 100644 --- a/src/main/java/com/hbm/handler/ability/IBaseAbility.java +++ b/src/main/java/com/hbm/handler/ability/IBaseAbility.java @@ -1,6 +1,6 @@ package com.hbm.handler.ability; -import net.minecraft.client.resources.I18n; +import com.hbm.util.i18n.I18nUtil; public interface IBaseAbility extends Comparable { public String getName(); @@ -11,7 +11,7 @@ public interface IBaseAbility extends Comparable { // Note: only usable client-side. Server-side, use ChatComponentTranslation manually instead public default String getFullName(int level) { - return I18n.format(getName()) + getExtension(level); + return I18nUtil.format(getName()) + getExtension(level); } public default boolean isAllowed() { diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java new file mode 100644 index 000000000..5ddbcecbc --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -0,0 +1,121 @@ +package com.hbm.inventory.recipes.loader; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; + +import com.google.gson.JsonElement; +import com.google.gson.stream.JsonWriter; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.AStack; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.WeightedRandom; + +/** + * Fully genericized recipes. + * Features: + * * Fluid in and output + * * AStack intput + * * Chance-based outputs, for selecting items and for selecting items are produced in the first place + * * Duration + * * Tags for identification + * + * @author hbm + */ +public abstract class GenericRecipes extends SerializableRecipe { + + public static final Random RNG = new Random(); + + public List recipeOrderedList = new ArrayList(); + public HashMap recipeNameMap = new HashMap(); + + public abstract int inputItemLimit(); + public abstract int inputFluidLimit(); + public abstract int outputItemLimit(); + public abstract int outputFluidLimit(); + + @Override + public Object getRecipeObject() { + return this.recipeOrderedList; + } + + @Override + public void deleteRecipes() { + this.recipeOrderedList.clear(); + this.recipeNameMap.clear(); + } + + public void register(GenericRecipe recipe) { + this.recipeOrderedList.add(recipe); + this.recipeNameMap.put(recipe.name, recipe); + } + + @Override + public void readRecipe(JsonElement recipe) { + + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + + } + + /////////////// + /// CLASSES /// + /////////////// + + public static class GenericRecipe { + + public String name; + public AStack[] inputItem; + public FluidStack[] inputFluid; + public IOutput[] outputItem; + public FluidStack[] outputFluid; + public int duration; + + public GenericRecipe(String name, int duration) { + this.name = name; + this.duration = duration; + } + } + + public static interface IOutput { + public boolean possibleMultiOutput(); + public ItemStack collapse(); + } + + /** A chance output, produces either an ItemStack or null */ + public static class ChanceOutput extends WeightedRandom.Item implements IOutput { + + public ItemStack stack; + public float chance; + + public ChanceOutput(ItemStack stack) { this(stack, 1F, 1); } + public ChanceOutput(ItemStack stack, int weight) { this(stack, 1F, weight); } + public ChanceOutput(ItemStack stack, float chance, int weight) { + super(weight); + this.stack = stack; + this.chance = chance; + } + + @Override + public ItemStack collapse() { + if(this.chance >= 1F) return this.stack; + return RNG.nextFloat() <= chance ? this.stack : null; + } + + @Override public boolean possibleMultiOutput() { return false; } + } + + /** Multiple choice chance output, produces a ChanceOutput chosen randomly by weight */ + public static class ChanceOutputMulti implements IOutput { + + public List pool = new ArrayList(); + + @Override public ItemStack collapse() { return ((ChanceOutput) WeightedRandom.getRandomItem(RNG, pool)).collapse(); } + @Override public boolean possibleMultiOutput() { return pool.size() > 1; } + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 9b657d0d5..984ab6040 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -489,6 +489,7 @@ crucible.tcalloy=Herstellung - Technetiumstahl damage.inset=Resistenz wenn in Set getragen: damage.item=Resistenz wenn getragen: +damage.category.EN=Energie damage.category.EXPL=Explosion damage.category.FIRE=Feuer damage.category.PROJ=Projektil diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 8b3529fe0..df2d909a3 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -905,6 +905,7 @@ crucible.tcalloy=Technetium Steel Production damage.inset=Resistances when worn in set: damage.item=Resistances when worn: +damage.category.EN=Energy damage.category.EXPL=Explosion damage.category.FIRE=Fire damage.category.PROJ=Projectile From 60f64f33f2aa2de73971fdbb38f2090d493cb46d Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Wed, 28 May 2025 00:28:06 +0300 Subject: [PATCH 096/491] add translation --- src/main/resources/assets/hbm/lang/uk_UA.lang | 6198 +++++++++++++++++ 1 file changed, 6198 insertions(+) create mode 100644 src/main/resources/assets/hbm/lang/uk_UA.lang diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang new file mode 100644 index 000000000..b85e72460 --- /dev/null +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -0,0 +1,6198 @@ +achievement.acidizer.desc=уфф ай моя шкіра +achievement.acidizer=Кислюка +achievement.assembly.desc=Зачекайте, вже година ночі? +achievement.assembly=Завод розширяється +achievement.FOEQ.desc=Відправте ретранслятор на марсінську... я маю на увазі дюніанську орбіту. +achievement.FOEQ=Бункери з пегасами та ракетами +achievement.breeding.desc=Дякую вам, блогослови вас Господь, і благослови Бог Сполучені Штати Америки +achievement.breeding=Іронічно +achievement.bismuth.desc=Пам'ятаєте як люди скаржилися на це протягом місяця? Я пам'ятаю. +achievement.bismuth=Вісмут +achievement.blastFurnace.desc=Вони розібрали затонулий дредноут для "Експлорера-1". +achievement.blastFurnace=Вугілля та залізо +achievement.bossCreeper.desc='Це і є ядерні кріпери? Оця штука?!' +achievement.bossCreeper=Бомба на чотирьох ногах +achievement.bossMaskman.desc=Наваляти великому хлопчику. +achievement.bossMaskman=6 місяців строкової служби і все, що я отримав, - це паршива футболка +achievement.bossMeltdown.desc=Скоріше жахливо, ніж чудово, але я прийму те що можу отримати. +achievement.bossMeltdown=3.6 Рентген +achievement.bossWorm.desc=Фабстафф. Моя дупа. А ти рахуй. +achievement.bossWorm=Розбирання Баллс-О-Трон +achievement.bossUFO.desc=Йо, що у нас тут? Величазний космічний корабель наближається до блок-корабля? +achievement.bossUFO=Ай Лмао +achievement.burnerPress.desc=Тиск тисне і на мене, і на тебе +achievement.burnerPress=Під тиском +achievement.c20_5.desc=??? +achievement.c20_5=Розділ [ДВАДЦЯТЬ_ПУНКТ_П'ЯТИЙ] +achievement.c44.desc=Гальванізований! Я маю на увазі, цинк! +achievement.c44=Розділ 44 +achievement.centrifuge.desc=відцентрова сила це фейк не @ мене +achievement.centrifuge=Відцентрова сила +achievement.chemplant.desc=Тепер ти думаєш хімікатами! +achievement.chemplant=Завод розширяється Частина 2 +achievement.chicagoPile.desc="Як там тубільці?" / "Дуже доброзичливі." +achievement.chicagoPile=Мореплавець висадився в Новому Світі +achievement.concrete.desc=Улюбленець більшовиків. +achievement.concrete=Старий добрий +achievement.desh.desc="Ну ж бо, ви всі. По місцях!" +achievement.desh=Левер'є +achievement.digammaFeel.desc=Мої очі кровоточать +achievement.digammaFeel=СВІТ СМІТТЯ, НАПОВНЕНИЙ КАНАЛІЗАЦІЙНИМИ СТОКАМИ +achievement.digammaKauaiMoho.desc=Все жахливо, ось трохи гарячого шоколаду. +achievement.digammaKauaiMoho=СПІВАЙ, СПІВАЙ МЕНІ ПІСНЮ АЛАКАЙСЬКОГО МОГО +achievement.digammaKnow.desc=того, що являє собою цей світ. +achievement.digammaKnow=ЖАХ УСВІДОМЛЕННЯ +achievement.digammaSee.desc=Трохи темно, візьміть з собою ліхтарик. +achievement.digammaSee=В БЕЗОДНЮ +achievement.digammaUpOnTop.desc=Милуйся моїм сином,він мій клон. +achievement.digammaUpOnTop=МИЛУЙСЯ МНОЮ, МИЛУЙСЯ МОЇМ ДОМОМ +achievement.fiend.desc=Будь жорстоким. +achievement.fiend2.desc=Будь жорстокішим. +achievement.fiend2=Правопорушник 2: Delinquent Harder +achievement.fiend=Правопорушник +achievement.freytag.desc=Herold's life guards +achievement.freytag=Фрейтаг +achievement.fusion.desc=Танець дейтронів, тритонів та енергії. +achievement.fusion=Синтез +achievement.gasCent.desc=Незбагачений уран ненавидить його! +achievement.gasCent=Стиль Блискавки +achievement.goFish.desc=Морське розп'яття +achievement.goFish=Іди порибач +achievement.hidden.desc=Убийте зараженого кріпера падаючим товарним вагоном. +achievement.hidden=Прихований каталог +achievement.horizonsBonus.desc=чесне слово що вбіса з тобою не так +achievement.horizonsBonus=Слем-данк діарея +achievement.horizonsEnd.desc=Відправте Тома додому. +achievement.horizonsEnd=Горизонти +achievement.horizonsStart.desc=ВІдправте парубка на місяць. +achievement.horizonsStart=Апогей +achievement.impossible.desc=Ти не можеш отримати це досягнення. +achievement.impossible=Буквально неможливо +achievement.inferno.desc="Перетворіть його на попіл! Цього недостатньо! Скидайте ще бомби!" +achievement.inferno=Операція Канібал +achievement.manhattan.desc=8:15; 6 серпня, 1945 рік +achievement.manhattan=Манхеттенський проект +achievement.meltdown.desc=Ти зайшов так далеко, як ти міг все зіпсувати? +achievement.meltdown=Швидке позапланове розбирання +achievement.no9.desc="Сподіваюся, свинець, який я видобуваю, буде використаний у вашій фарбі" +achievement.no9=Старий номер дев'ять +achievement.omega12.desc=Вирішіть проблему продовження життя на цій нещасній планеті. +achievement.omega12=Прискорювач частинок Омега-12 +achievement.polymer.desc=Смачний, смачний мікропластик +achievement.polymer=Тефлон +achievement.potato.desc=Агх! Птах! Птах! Вбий його! Це зло! +achievement.potato=Повстання машин +achievement.radDeath.desc=Марія Кюрі винайшла теорію радіоактивності, лікування радіоактивності та смерть від радіоактивності. +achievement.radDeath=Ауч, Радіація! +achievement.radium.desc=ТЕБЕ ЗВІЛЬНЕНО ЗА ТЕ ЩО ТИ ВИЛИВ РАДІЙ У МОЮ КАВУ! +achievement.radium=МІСТЕР НЕЙМОВІРНИЙ +achievement.radPoison.desc=Зазнайте наслідків радіаційного отруєння. +achievement.radPoison=Ура, радіація! +achievement.RBMKBoom.desc=Яка ціна брехні? +achievement.RBMKBoom=15,000. +achievement.RBMK.desc=Він марить, відправте його в лазарет. +achievement.RBMK=3.6 Рентген? +achievement.redBalloons.desc="Це те, на що ми чекали. Це воно, хлопці, це війна" +achievement.redBalloons=99 Luftballons +achievement.redRoom.desc=? +achievement.redRoom=Інша сторона +achievement.sacrifice.desc=Зустрінься обличчям до обличчя з вогнем і виживи. +achievement.sacrifice=Сестровбивство +achievement.schrab.desc=Як би там не було, я б не дивився на це надто довго. +achievement.schrab=Острів стабільності +achievement.selenium.desc=О, так! +achievement.selenium=XVIII The Moon +achievement.SILEX.desc=Це крутіше, ніж звучить, я обіцяю. +achievement.SILEX=Лазерне розділення ізотопів +achievement.slimeball.desc= +achievement.slimeball=Я повинен занурити свої яйця в сірчану кислоту. +achievement.stratum.desc=Тисни на гальма, Міттс. +achievement.stratum=Пласт +achievement.someWounds.desc=Приготуватися +achievement.someWounds=Деякі рани ніколи не гояться +achievement.soyuz.desc=Станьте хрусткими. +achievement.soyuz=Запечена картопля +achievement.space.desc=Провались як тільки можна та розтратьте 90 мільйонів доларів в пусту +achievement.space=Останній Рубіж...Хоча ладно забий +achievement.sulfuric.desc= +achievement.sulfuric=Я не повинен був занурювати свої яйця в сірчану кислоту. +achievement.tantalum.desc=Невловимий, але завжди потрібний елемент. +achievement.tantalum="Тантал" +achievement.tasteofblood.desc=не є частиною протоколу тестування. +achievement.tasteofblood=Присмак крові +achievement.technetium.desc=Це цілюче, це цілюче! +achievement.technetium=Велика Людина, Людина-Свиня +achievement.watzBoom.desc=Наступного разу осушіть свій септик. +achievement.watzBoom=Огидно +achievement.watz.desc=Поле Фолькванґа також присутні. +achievement.watz=Сила Елемента-126 +achievement.witchtaunter.desc=Ці безглузді істоти нічого тобі не зроблять! +achievement.witchtaunter=Насміхальник над відьмами +achievement.ZIRNOXBoom.desc=кипіти погано +achievement.ZIRNOXBoom=ЧІРНОКС + +analyze.basic1======Компонент NTM===== +analyze.basic2=Додаткову документація можна знайти на вікі. +analyze.basic3====Додаткова інформація=== +analyze.dummy=Тип: Блок пустишка +analyze.error=Сумісність цього блоку не встановлено належним чином, про це слід повідомити як про помилку! +analyze.name=Назва: %s +analyze.noInfo=Немає інформації. + +armor.blastProtection=Модифікатор шкоди %s від вибухів +armor.cap=Hard damage cap of %s +armor.damageModifier=Модифікатор шкоди of %s проти %s +armor.dash=Дає %s ривка +armor.electricJetpack=Іонний реактивний ранець +armor.explosionImmune=Не може отримати жодної шкоди, окрім вибухів +armor.fasterReload=Швидка перезарядка +armor.fastFall=Швидке падіння +armor.fireproof=Вогнестійкість +armor.fullSetBonus=Бонус за повний набір: +armor.geigerHUD=Вбудований дісплей лічильника Гейгера +armor.geigerSound=Звуковий лічильник Гейгера +armor.glider=Shift щоб планувати +armor.gravity=Модифікатор гравітації %s +armor.hardLanding=Жорстка посадка +armor.ignoreLimit=Опір не залежить від ліміту опору +armor.modifier=Загальний модифікатор шкоди %s +armor.moreAmmo=Більше боєприпасів +armor.nullDamage=Блокування всієї шкоди від %s +armor.projectileProtection=Модифікатор шкоди %s від снарядів +armor.rocketBoots=Ракетні чоботи +armor.sprintBoost=Прискорений біг +armor.stepSize=Розмір кроку: %s +armor.thermal=Тепловий приціл +armor.threshold=Поріг шкоди %s +armor.vats=Детектор ворогів +armor.yield=Захист застосовується до шкоди <%s + +armorMod.all=До всього +armorMod.applicableTo=Застосовується до: +armorMod.boots=Чобот +armorMod.chestplates=Нагрудника +armorMod.helmets=Шолома +armorMod.insertHere=Вставте броню, щоб модифікувати її... +armorMod.leggings=Наголінників +armorMod.type.battery=Акумулятор +armorMod.type.boots=Чоботи +armorMod.type.chestplate=Нагрудник +armorMod.type.cladding=Обшивка +armorMod.type.helmet=Шолом +armorMod.type.insert=Вставка +armorMod.type.leggings=Наголінники +armorMod.type.servo=Сервоприводи +armorMod.type.special=Спеціальне + +battery.mode.buffer=Буферний режим +battery.mode.input=Зарядка +battery.mode.off=Вимкнено +battery.mode.output=Розрядка +battery.priority.high=Пріорітет зарядки: Високий +battery.priority.high.desc=Аварійні буфери, які $завжди мають бути повними +battery.priority.low=Пріорітет зарядки: Низький +battery.priority.low.desc=Більшість випадків використання, коли$необхідно зберігати надлишкову енергію$не впливаючи на продуктивність машин +battery.priority.normal=Пріорітет зарядки: Звичайний +battery.priority.normal.desc=Невеликі енергомережі$де пріорітет не має значення +battery.priority.recommended=Рекомендується для: +battery.redstone.off=Редстоун вимкнений +battery.redstone.on=Редстоун ввімкнений + +bomb.detonated=Успішно підірвано! +bomb.incompatible=Пристрій не може бути запущений! +bomb.launched=Успішно запущено! +bomb.missingComponent=Бракує компонента! +bomb.nobomb=Пов’язана позиція несумісна або не прогружена! +bomb.triggered=Успішно активовано! + +book.test.cover=ЯК СЕКСАТИСЬ +book.test.page1=Test Page 1 + +book.error.cover=Адронний колайдер:$Усунення несправностей +book.error.title1=Error 0x01 [NC] +book.error.page1=§lName:§r "ERROR_NO_CHARGE" §lDescription:§r The particle has reached a segment with insufficient charge. §lPotential fix:§r Either replace one of the plugs that the particle successfully passes with higher-tier ones or add another plug slightly before the segment where the particle expires. +book.error.title2=Error 0x02 [NA] +book.error.page2=§lName:§r "ERROR_NO_ANALYSIS" §lDescription:§r The particle has reached the core, despite not passing an analysis chamber. §lPotential fix:§r Make sure that your accelerator has an analysis chamber and double-check the operating mode (linear/circular). +book.error.title3=Error 0x03 [OC] +book.error.page3=§lName:§r "ERROR_OBSTRUCTED_CHANNEL" §lDescription:§r The particle has collided with a block inside the collider's channel. §lPotential fix:§r Make sure that the inside of your particle collider is free of any obstructions, except for particle diodes and core blocks. +book.error.title4=Error 0x04 [EC] +book.error.page4=§lName:§r "ERROR_EXPECTED_COIL" §lDescription:§r The particle has passed a segment that lacks one or multiple coils. §lPotential fix:§r Remove the plating of the collider in the offending area and check if all the coils are there. This error will also happen at T-crossings that are built without diodes. +book.error.title5=Error 0x05 [MS] +book.error.page5=§lName:§r "ERROR_MALFORMED_SEGMENT" §lDescription:§r The particle has passed a segment that was built incorrectly (but neither obstructed nor missing coils). §lPotential fix:§r Make sure that the offending segment has platings in all the required spaces, leaving no coils exposed. +book.error.title6=Error 0x06 [ATL] +book.error.page6=§lName:§r "ERROR_ANALYSIS_TOO_LONG" §lDescription:§r The particle has passed more than the three required valid analysis chamber segments. §lPotential fix:§r Make sure that the analysis chamber is exactly 3 blocks long for circular accelerator and at least 2 blocks long for linear ones. Also check if the particle doesn't pass multiple analysis chambers in a branching and/or looped accelerator. +book.error.title7=Error 0x07 [ATS] +book.error.page7=§lName:§r "ERROR_ANALYSIS_TOO_SHORT" §lDescription:§r The particle has left the analysis chamber, despite not meeting the length requirement. §lPotential fix:§r Make sure that the analysis chamber on your circular accelerator is exactly 3 blocks long. Valid analysis segments have no coils and the plating is entirely composed of analysis chamber walls/windows. Analysis chambers with coils in them count as regular segments. +book.error.title8=Error 0x08 [DC] +book.error.page8=§lName:§r "ERROR_DIODE_COLLISION" §lDescription:§r The particle collided with a non-input side of a schottky particle diode. §lPotential fix:§r Check if your diodes are configured correctly. Particles can only enter the diode from sides with green inward-pointing arrows. +book.error.title9=Error 0x09 [BT] +book.error.page9=§lName:§r "ERROR_BRANCHING_TURN" §lDescription:§r The particle has reached a turn with multiple exits. §lPotential fix:§r If your turn is a normal one, check if all the required coils are present (i.e. no holes in the coil layer). If the turn is intended to be branched, it requires a schottky particle diode that is correctly configured. + +book.rbmk.cover=Мій перший РБМК:$Основи$будівництва$реактора +book.rbmk.title1=Introduction +book.rbmk.page1=§lRBMK§r is fully modular nuclear reactor. Unlike most other reactors, there is no "core" and no size restrictions, rather behavior and efficiency of reactor depends on how it is built and how various parts interact with each other. +book.rbmk.title2=Heat +book.rbmk.page2=As reactor runs, it will generate §lheat§r. Heat will spread between parts, slowly decreasing in the process. The goal is to generate as much heat as possible without melting the reactor, and to transfer heat into steam passages that cool reactor and produce steam. +book.rbmk.title3=Fuel Rod +book.rbmk.page3=The §lfuel rod§r will capture neutron flux, causing fuel inside the rod to react, releasing neutrons in the process. Neutrons are released in all four main directions with a maximum range of 5 blocks. The amount of released neutrons depends on fuel used. +book.rbmk.title4=Regulating Rod +book.rbmk.page4=The §lcontrol rod§r will reduce number of neutrons passing through. Fully inserted, it will block all neutrons; when inserted halfway, it will only block half. Control rods are used to regulate activity of the reactor and shut it down. +book.rbmk.title5=Regulating Rods - Usage +book.rbmk.title5.scale=0.9 +book.rbmk.page5=The current bar insertion will be displayed in the center of GUI. The colored buttons on left will add the control bar to the color group, which is useful for quickly selecting grouped bars on §lRBMK§r console. The buttons on right allow you to manually insert in 25%% increments. +book.rbmk.title6=Automatic Control Rods +book.rbmk.page6=§LAutomatic control rods§r are almost identical to regular control rods, but they cannot be manually adjusted, instead they will adjust position of the rod based on current temperature. Which function to use and how deep to insert and at what temperature must be determined first. +book.rbmk.title7=Steam Channel +book.rbmk.page7=The §lsteam channel§r is only part that will actively reduce reactor heat level. If a component is above the boiling point of a given type of steam, it will try to consume as much water and produce as much steam as needed to cool below boiling point. +book.rbmk.title8=Neutron Reflector +book.rbmk.page8=The §lneutron reflector§r will block passage of neutrons, instead neutrons will be reflected back onto the fuel rod they came from. This is useful for using neutrons that would otherwise be wasted simply by leaving reactor. +book.rbmk.title9=Neutron Absorber +book.rbmk.page9=§lNeutron absorber§r simply blocks neutrons. The absorbed neutrons will not generate heat and will be effectively destroyed. This is useful for preventing fuel rods from reacting that would otherwise be within reach. +book.rbmk.title10=Graphite Retarder +book.rbmk.page10=§lGraphite moderator§r converts fast neutrons passing through it into slow neutrons. Most fuels are split into fast neutrons, while slow neutrons are required for fission, so use of moderators is highly recommended. +book.rbmk.title11=Structural Column +book.rbmk.page11=§lStructural column§r does not affect neutrons in any way and has no special application. It is recommended to fill the reactor with structured pillars where there are no other parts, since the structured pillars are capable of transferring heat. +book.rbmk.title12=Console +book.rbmk.page12=§lRBMK console§r allows you to control the reactor from afar. Using the §ldevice to connect the console RBMK§r on the RBMK part and then on the console will connect the reactor and the console. The console can only control 15x15 parts, for large reactors you can use multiple consoles. +book.rbmk.title13=Using the console +book.rbmk.page13=Clicking on parts will select and deselect them. With the colored buttons, you can quickly select all the control rods in that color group. Button "A" will select all control rods, "X" will deselect all. +book.rbmk.page14=Entering a number between 0 and 100 in green box and then pressing button next to it will set all selected control rods to that position. Button "AZ-5" will lead to full insertion of all control rods. +book.rbmk.title15=Fuel +book.rbmk.page15=The §lfuel§r response depends on many factors. The main ones are §lfortification§r, §lxenon poisoning§r and number of incoming §lneutrons§r. Xenon builds up when fuel is low in neutrons and burns out during normal operation. The efficiency of neutrons depends on the type, most fuels §lare best split by§r §lslow neutrons§r. +book.rbmk.title16=Melting +book.rbmk.page16=§4§lAVOID. + +book.starter.cover=Посібник промисловця$з відновлення$суспільства +book.starter.title1=Introduction +book.starter.page1=If you're reading this, it's highly likely that society, in one way or another, has collapsed entirely. Governments, countries, and authority are a concept of the past - along with all of the amenities of civilized life. As such, this guide will inform you how to change that by recreating the industry and technology of the past for the improvement of your own life. +book.starter.title2=Coal & Mustard Gas +book.starter.page2=Whilst it is impossible to predict the actual state of the world in a post-apocalyptic time, it's not unlikely that war and industry in its current form may not have ended. To protect your own lungs, an effective and cheap way is to urinate on some §lcloth§r to make a §ltrench mask§r, to protect you from coal dust or mustard gas, if you ever encounter either. +book.starter.title3=Anvils & Presses +book.starter.page3=The quintessentials to beginning your industrial revitalization is an §lanvil§r and a §lburner press§r. The anvil will allow you to manually craft together early machinery such as the Assembler, whilst the burner press will let you make plates, wires, and circuits that you cannot hammer together with an anvil. +book.starter.title4=Templates +book.starter.page4=In order to stamp metal into useful shapes, assemble machinery, and perform chemical reactions, you will need to create a §lMachine Template Folder§r to create the various stamps and templates shown to the right. +book.starter.title5=Scavenging +book.starter.page5=Depending on how bad the initial apocalyptic event was to the preexisting structures of the world, there's a likely chance that many useful materials and machines can be salvaged from them directly. Metallic alloys like steel, parts like circuitry, and even fissile material from a nuclear power plant might be awaiting you. Beware certain ruins, however, as there may be an excess of danger lurking there like a snake in the grass; waiting to strike you down with radiation, traps, or indescribable horrors... +book.starter.title6=Early Machinery +book.starter.page6a=Two of the first machines you should assemble are the §lBlast Furnace§r and the §lAssembly Machine§r. The former will allow you to create alloys such as §lsteel§r, §lminecraft-grade copper§r, and §ladvanced alloy§r; you will need to use these metals for the bodies of machines, the wiring of circuits, advanced electromagnets, and more. +book.starter.page6b=The assembler will be used to create practically every other machine described in this guide. You will need a power source, such as a §lCombustion§r §lGenerator§r or §lSolar Boiler§r. +book.starter.page7a=The §lShredder§r, along with a pair of shredder blades, will be very useful for doubling the output of most ores, via shredding into smeltable powders. These powders are also crucial to begin making circuitry for various machines, such as §lEnhanced§r and §lOverclocked§r circuits. +book.starter.page7b=Using your new machinery, you can create the §lChemical Plant§r, used for the synthesis of better circuits, concrete, the processing of petrochemicals, and more. +book.starter.title8=Black Gold +book.starter.page8a=Using an §lOil §lReservoir§r §lDetector§r, you can find underground oil deposits to place a §lPumpjack§r or §lDerrick§r over via surveying an area. Remember that oil deposits will run out over time. +book.starter.page8b=Before the oil can be refined and separated into its constituent parts in an §lOil Refinery§r, you must heat the oil to 300°C in a §lBoiler§r. +book.starter.title9=Petrochemicals +book.starter.page9=Using §lChemical Plants§r, §lFractioning§r §lTowers§r, and §lCatalytic Cracking§r §lTowers§r, you can transform the separated oil into a variety of useful products. For example: §lPolymer§r or §lBakelite§r, durable and flexible plastics; §lDesh§r, an extremely durable and heat-resistant rare earth metal alloy; §lSolid Fuel§r, which can be burnt for energy; or even §lLiquid Fuels§r, such as §lGasoline§r, §lDiesel§r, §lKerosene§r, and more. +book.starter.title10=Advanced Machinery +book.starter.page10=With oil processing under your belt, you can create the §lCentrifuge§r, which will triple ore outputs; the §lOre §lAcidizer§r, which will crystallize ores, increasing the yield; and the §lSILEX + §lFEL§r, two marvels of modern engineering which can separate the isotopes of materials with ease. You will require significantly more energy to power these; which can be obtained with sources such as a §lDiesel Generator§r, an §lIndustrial Generator§r, or even a nuclear reactor. +book.starter.title11=Strata +book.starter.page11=Underneath the ground you walk, there is several naturally-occurring §lStrata§r, or special mineral layers and formations. §lSchist Strata§r are blue, lithium-containing layers filled with uranium, iron, copper, asbestos, and other ores for your own use. §lDepth Rock§r contains large quantities of rarer minerals, such as §lZirconium§r and §lBoron§r, but requires explosives to properly harvest. +book.starter.title12=Radiation +book.starter.page12a=§oThe rest of this book will deal with matters that involve §oradiation. For the safety of you and others, I will give §oadvice on how to mitigate and deal with exposure to it. +book.starter.page12b=Enough exposure to radiation can and will cause bodily harm. The first step is prevention; be sure to limit your exposure, and wear protective gear, such as a §lHazmat Suit§r, or apply §lCladding§r to your clothing or armor; you can also take §lRad-X§r to limit your intake. Thanks to modern medicine, the second step can be removal if necessary; for example, a §lPlayer §lDecontaminator§r will slowly reduce the radiation absorbed by your body. §lRad-Away§r can also be used as a post-exposure prophylaxis, quickly and effectively reversing damage caused to your body by ionizing radiation. +book.starter.title13=Uranium Enrichment +book.starter.page13=There are a few, easy options for fuels to use for a nuclear reactor; for instance, §lNatural Uranium§r or §lThorium Fuel§r. However, if you're looking for something more powerful, you can set up an enrichment cascade of two §lGas Centrifuges§r to produce §lUranium Fuel§r with leftover §lUranium-238§r. You will have to transmute the natural uranium into §lYellowcake§r, then §lUranium §lHexafluoride§r to do so. +book.starter.title14=The Chicago Pile +book.starter.page14=Alternatively, you can breed §lРеакторний Plutonium§r, a more powerful fuel, from Natural Uranium using the §lChicago Pile§r. By stacking graphite blocks and drilling into them, you can insert fuel rods to breed into plutonium and neutron source rods, such as §lRadium-Beryllium§r, to begin the reaction. Make sure to test your designs; spacing out or limiting the amount of blocks may be necessary to prevent overheating. +book.starter.title15=ZIRNOX GCR +book.starter.page15=Finally, you can create your first §oreal§r source of energy: the §lZIRNOX§r Nuclear Reactor. Nuclear reactors require more setup then other power sources; first, you will want to have a good source of water, such as the §lHeavy §lInfinite Water Tank§r. To remove heat from the reactor core and boil the water into steam, you will need a sufficient amount of §lCarbon Dioxide§r. You want just enough pressure, but not §otoo§r much. You will also need three steam turbines to utilize the created steam to make energy; the §lSteam §lTurbine§r or §lIndustrial Steam §lTurbine§r will be optimal. Finally, a §lCondensor§r or §lAuxilary Cooling Tower§r is needed to condense the leftover steam into water, where it can be voided or recycled in a cooling loop. +book.starter.title16=Conclusion +book.starter.page16=If you've reached this far, you're on track to helping rebuild civilization. You've successfully recreated the advanced machinery of the pre-apocalypse - with nuclear power, petrochemicals, and more. I cannot know §ohow§r you will use these new-found advantages, but it's my personal hope you use them for the good of yourself and others - or at the very least, in self-defense. Au revoir! +book.starter.title18=About the Author +book.starter.page18=vær is just a guy who has been trapped in the grey void featured in the Talking Head's §oOnce In A Lifetime§r for too long. He once found a studio door, but to his dismay found out it was a cardboard cut-out. + +#book.rbmk.cover=HOW 2 RBMK:$The Basics$of Reactor$Construction +#book.rbmk.title1=Introduction +#book.rbmk.page1=The §lRBMK§r is a fully modular nuclear reactor. Unlike most other reactors, there is no "core", and no size limitations, rather, the behavior and efficiency of the reactor comes from how it is built and how the different pieces interact with each other. +#book.rbmk.title2=Heat +#book.rbmk.page2=As the reactor operates, it will generate §lheat§r. Heat will spread between parts, slowly decreasing in the process. The goal is to produce as much heat as possible without melting the reactor, and to move that heat to a §lsteam channel§r which cools the reactor and produces steam. +#book.rbmk.title3=Fuel Rod +#book.rbmk.page3=The §lfuel rod§r will capture neutron flux, causing the fuel inside the fuel rod to react, giving off neutrons in the process. Neutrons are released in all four cardinal directions with a maximum range of 5 blocks. The amount of neutrons released depends on the §lfuel§r used. +#book.rbmk.title4=Control Rod +#book.rbmk.page4=The §lcontrol rod§r will decrease the amount of neutrons passing though it. Fully inserted, it will block all neutrons, at half insertion, it will only block half. Control rods are used to regulate the reactor's activity and to turn it off. +#book.rbmk.title5=Control Rod - Usage +#book.rbmk.page5=The center of the GUI will display the current rod insertion. The colored buttons on the left will add a control rod to a color group, which is useful to quickly select grouped rods from the §lRBMK console§r. The buttons on the right allow for manual insertion in increments of 25%%. +#book.rbmk.title6=Automatic Control Rod +#book.rbmk.page6=§lAutomatic control rods§r function nearly identical to regular control rods, but they cannot be configured manually, instead they will adjust the rod position based on the current temperature. What function to use and how deep to insert at what temperature has to be defined first. +#book.rbmk.title7=Steam Channel +#book.rbmk.page7=The §lsteam channel§r is the only part that will actively reduce the reactor's heat level. If the component's temperature exceeds the boiling point of the set steam type, it will try to consume as much water and produce as much steam as needed to cool back below the boiling point. +#book.rbmk.title8=Neutron Reflector +#book.rbmk.page8=The §lneutron reflector§r will block neutrons from passing it, instead the neutrons will be reflected back at the fuel rod they came from. This is useful for utilizing neutrons that would otherwise be wasted by simply exiting the reactor. +#book.rbmk.title9=Neutron Absorber +#book.rbmk.page9=The §lneutron absorber§r will simply block neutrons. Neutrons absorbed will not generate heat and be effectively voided. This is useful to prevent fuel rods from reacting that would otherwise be in range. +#book.rbmk.title10=Graphite Moderator +#book.rbmk.page10=The §lgraphite moderator§r will convert fast neutrons passing through it into slow neutrons. Most fuels fission into fast neutrons while needing slow neutrons to split, so using moderators is strongly recommended. +#book.rbmk.title11=Structural Column +#book.rbmk.page11=The §lstructural column§r will not interfere with neutrons, nor does it have special uses. It is recommended to fill the reactor with structural columns where no other parts will be, because structural columns are capable of transporting heat. +#book.rbmk.title12=Console +#book.rbmk.page12=The §lRBMK console§r lets you control the reactor from afar. Using the §lRBMK§r §lconsole linking device§r on an RBMK part and then the console will link the reactor to the console. The console can only manage 15x15 parts, for larger reactors you might want to use multiple consoles. +#book.rbmk.title13=Console Usage +#book.rbmk.page13=Clicking on the parts will select and deselect them. Using the colored buttons, you can quickly select all control rods of that color group. Button 'A' will select all control rods, 'X' will deselect all. +#book.rbmk.page14=Entering a number 0-100 in the green box and then hitting the button next to it will set all selected control rods to this position. Button 'AZ-5' will cause all control rods to fully insert. +#book.rbmk.title15=Fuel +#book.rbmk.page15=The §lfuel§r's reactivity is based on multiple factors. The main ones are the §lenrichment§r, §lxenon poison§r and the amount of incoming §lneutrons§r. Xenon builds up when the fuel receives few neutrons and burns away during normal operation. The effectivity of neutrons depends on the type, most fuels §lsplit best with slow neutrons§r. +#book.rbmk.title16=Meltdown +#book.rbmk.page16=§4§lAvoid. + +book_lore.author=By %s +book_lore.test.name=this book doesn't work... +book_lore.test.author=me i trolled you hehe :3c +book_lore.test.page.0=>hello anons before i begin let me clarify that i'm not gay. >Be me >This night >18 > At hanging out with my best friend with my parents gone for a few days >We've been best friends for a year now >Been drinking a bit and playing lots of video games and ordered a pizza >We were having a blast >At a certain point in the night like around 9:00 he makes a really funny joke that I don't remember but I know that it made us both laugh really hard > With out thinking I brush my right hand through his semi-curly black hair and call him a funny boy >He blushes >I realize I'm feeling flustered >We're kinda close >All of the sudden he kisses me and for some reason I kiss him back >We make love >Cuddle together and fall asleep >Wake up in the middle of the night with his head snuggled up on my chest and neck area >It feels nice but I'm not a homosexual +book_lore.test.page.1=I'm typing this as he's asleep in my arms. How do I let my best friend down nicely? I don't want to be a [redacted] /b/ +book_lore.test.page.2=3 +book_lore.test.page.3=4 +book_lore.test.page.4=5 + +book_lore.book_iodine.name=Нотатки +book_lore.book_iodine.author=Дейв +book_lore.book_iodine.page.0=alright you will not believe this, but old man weathervane finally managed to show up again since he left two weeks ago and what's more surprising is the fact that he actually decided to spill the beans on what they were doing in the canyon: +book_lore.book_iodine.page.1=apparently the morons from R&D discovered a compound that is mostly inorganic, pretty much like a toxin in nature, but get this: the dying cells will reproduce said toxin and excrete it through the skin, creating an aerosol that is highly contagious. +book_lore.book_iodine.page.2=it's just like a virus, but not a virus. the composition is weird, you can mix it in any household bottle but you do have to get the order right. the doc told me that the first ingredient which is just powdered iodine crystals goes into slot %d + +book_lore.book_phosphorous.name=Нотатки +book_lore.book_phosphorous.author=Дейв +book_lore.book_phosphorous.page.0=heyo, it's me again. i assume you got my last memo, the doc wasn't too happy about it. i'll have to do this quick, the dunderheads from R&D are currently moaning again, probably over money. again. anyway, doc weathervane found that the second +book_lore.book_phosphorous.page.1=ingredient is red phosphorous, whihc has to be mixed into slot %d + +book_lore.book_dust.name=Нотатки +book_lore.book_dust.author=Дейв +book_lore.book_dust.page.0=the doc was furious when he found out that the R&D dorks kept the one remaining sample, ranting about gross negligence this and a doomsday scenario that. i told him to chill for a minute, getting all worked up isn't good for his blood pressure, not +book_lore.book_dust.page.1=that he has much blood left to begin with. one of the R&D morons slipped some more info into last week's circular, they call their little concoction "MKU" whatever that means, and that it contains actual household lint. can you believe that? one of the most +book_lore.book_dust.page.2=dangerous inventions of theirs and it contains dust. strangely they also mentioned that it goes into slot %d + +book_lore.book_mercury.name=Нотатки +book_lore.book_mercury.author=Дейв +book_lore.book_mercury.page.0=well that settles that. not counting the vomitting blood part, the toxicological report mostly resembles that of mercury poisoning. why? because our little mix also contains mercury! i just wonder where all that stuff comes from when being +book_lore.book_mercury.page.1=replicated by the body? whatever, the mercury goes into slot %d + +book_lore.book_flower.name=Нотатки +book_lore.book_flower.author=Дейв +book_lore.book_flower.page.0=remember when i mentioned in my first memo that the compound is mostly anorganic? well guess what, the old man shared the fourth ingredient: ipomoea nil, a genus of flower. morning glory! it might be due to its low sulfur content, whatever might be the case, +book_lore.book_flower.page.1=it does not work with other flowers. the morning glory goes into slot %d + +book_lore.book_syringe.name=Нотатки +book_lore.book_syringe.author=Дейв +book_lore.book_syringe.page.0=a little addendum to my fifth message, obviously you have to store this MKU stuff in a container. the R&D nuts used regular metal syringes that they got from medical. surplus ware i presume, they got thousands of needles just lying around. the metal +book_lore.book_syringe.page.1=syringe goes into slot %d + +book_lore.resignation_note.name=Letter of Resignation +book_lore.resignation_note.author=Kosma +book_lore.resignation_note.page.0=Management downsized our department again yesterday. Those idiots only have themselves to blame, I don't know what they were expecting after that fiasco. Who the hell leaks that sort of information? We're losing millions and +book_lore.resignation_note.page.1=it's ME who's the one out of a job now. I'M the one being asked to resign. I hope you asshats finally learn from your overabundance of mistakes and take that stick out of your ass. +book_lore.resignation_note.page.2=I'm not coming back on Friday. Just send the paycheck. + +book_lore.memo_stocks.name=Intracorporate Memorandum +book_lore.memo_stocks.page.0=Investor Relations - $ $ There's been some glaring discrepancies in the figures provided for the latest quarterly report. It would be prudent for the financial department to make some adjustments, so there won't be any concern. + +book_lore.memo_schrab_gsa.name=Internal Memorandum +book_lore.memo_schrab_gsa.page.0=Contract Management - $ $ Legal has made a breakthrough with the DLA. They've awarded us with a 45 BILLION GSA Schedule for further procurement and research of saralloy. At current estimates, that would be at minimum +book_lore.memo_schrab_gsa.page.1=a 40%% profit on related operations, let alone the possibility of future contracts. Due to the confidential nature, all fiscal evidence is to remain private. + +book_lore.memo_schrab_rd.name=Internal Memorandum +book_lore.memo_schrab_rd.page.0=Research & Development - $ $ Our main production method of saralloy has been through the new particle accelerator. However, the energy costs are exorbitantly high compared to the amount of output. +book_lore.memo_schrab_rd.page.1=Doctor Schrabauer, however, has discovered a new interaction - called "Strange Lepton Oscillation" - that could significantly reduce costs. Through a not entirely understood process, supplied electrons are transmuted into extremely +book_lore.memo_schrab_rd.page.2=high-energy photons, through a strange charm. This is an extreme exception to many established particle conversion laws, but preliminary experiments have proved that these protons transmute into up and down quarks, eventually creating saralloy. +book_lore.memo_schrab_rd.page.3=Strangely, the prototype requires Tungsten alloyed with small amounts of saralloy. In addition, a special capacitor is required to negate the leftover positive charge. + +book_lore.memo_schrab_nuke.name=Research Report +book_lore.memo_schrab_nuke.author=Doctor Schrabauer +book_lore.memo_schrab_nuke.page.0=Our most recent investigation led us to the effects of nuclear explosions on materials. Thanks to our grant money, we *accidentally* tested our theory on direct saralloy synthesis from uranium. +book_lore.memo_schrab_nuke.page.1=Only our cyclotron has actually created saralloy previously. However, at our underground shot at Everwerpen, miniscule traces of saralloy were found in uranium ore at the site. All pure, metallic uranium nearby had fissioned. +book_lore.memo_schrab_nuke.page.2=As such, given enough uranium ore concentrated around an explosive, or perhaps even a dirty bomb rich in waste containing fissionable material, one could hypothetically create enough saralloy to collect manually. + +book_lore.bf_bomb_1.name=Особисті нотатки +book_lore.bf_bomb_1.author=M. Porter +book_lore.bf_bomb_1.page.0=Took long enough, but my transfer was accepted. Those new grads were already hard to handle, let alone all the unprofessionalism of the lead. $ Not all good news - this lab was withholding further detail, and I didn't need more chaos over another magic new discovery. +book_lore.bf_bomb_1.page.1=Of course that was the case. The alumni had their doubts (surprising, considering how bright-eyed they were), but my only... competent? colleague actually got his hands on the primer hand-out. Must have more connections than I thought. His memo is discouraging: +book_lore.bf_bomb_1.page.2=apparently, there's yet ANOTHER miracle material that they prodded out of some concoction of antimatter and a fringe isotope. The brochure calls it "SWIRLMAT" - hell if I know - and that's it. No wonder they wanted a theoretical physicist, +book_lore.bf_bomb_1.page.3=they don't even know what it is yet. Either way, practically any job would be better than my old position, so I can't complain much about sketchiness. + +book_lore.bf_bomb_2.name=Особисті нотатки +book_lore.bf_bomb_2.author=M. Porter +book_lore.bf_bomb_2.page.0=Despite the absence of information in that primer, I still had some hope they knew a bit more. Not at all. Every other senior researcher has a blind faith in this material; their propositions were practically biblical. I was near speechless. +book_lore.bf_bomb_2.page.1=And yet I can't even blame them. Swirlmat makes no goddamn sense - it is completely unlike any other substance I've seen before. Its appearance was near frightening, a literal mass of swirling colors, with darker lines permeating through the neon green surface. +book_lore.bf_bomb_2.page.2=Even worse, this thing is an energy source. The existence of our sample is a violation of ALARA: the lab was vacated when it arrived, and the only person brave enough (one Dr. Melfyn) donned a level A hazmat just to carry it 20 meters. +book_lore.bf_bomb_2.page.3=The empirical data isn't better, as we're breaking the first law of thermodynamics with how much energy it radiates. Being anywhere near that thing - even behind a meter of lead - was terrifying. We sprinted out of the chamber upon conclusion of the spectroscopy +book_lore.bf_bomb_2.page.4=and we got nothing new out of it. Those idiots in the science team, god, did not even waver after all that. Sitting through those "discussions" was horrible; that quack of a head researcher even rumored that the test ban would be lifted, that we could be +book_lore.bf_bomb_2.page.5=building bombs out of the shit in the coming weeks, who in their right mind would work on that? Hell, the one sane assistant (an Andrew) nicknamed it "balefire" - because burning to death on a funeral pyre would be painless by comparison. + +book_lore.bf_bomb_3.name=Особисті нотатки +book_lore.bf_bomb_3.author=M. Porter +book_lore.bf_bomb_3.page.0=The team and I have made some breakthroughs. Emphasis on the separation - isolating myself from the more devout has made working there so much more bearable. While we still have no idea about the actual properties of balefire (it's difficult to analyze +book_lore.bf_bomb_3.page.1=a sample that fries your equipment) its interactions with other matter has proved fruitful. Notably, they synthesized a "gaseous" form: Andrew, of all people, informed me that it was really a colloid consisting of microscopic balefire particles, suspended in some +book_lore.bf_bomb_3.page.2=noble gas. Each particle is enveloped by a positively-charged 'bubble' of ionized gas, preventing it from settling. Who could've guessed that fatal gamma radiation had a benefit? Not me. $ I'm choosing not to think about how they transformed the sample into +book_lore.bf_bomb_3.page.3=particulate, but I can't understate the utility of this gaseous balefire - it's made it much safer to experiment on. $ Speaking of safety, the head researcher (in an act of callous disregard) made a discovery that also nearly took his head off. +book_lore.bf_bomb_3.page.4=He decided to get "dirty" by letting a cell of our new colloid interact directly with some very expensive antimatter: the resulting explosion turned the table it was on into a piece of radiation-bleached slag, carved a near-perfect hemisphere through +book_lore.bf_bomb_3.page.5=the top, and gave the head a healthy dose of ARS. I guess we know how to make it explode now, but god, some people... + +book_lore.bf_bomb_4.name=Особисті нотатки +book_lore.bf_bomb_4.author=M. Porter +book_lore.bf_bomb_4.page.0=I just can't escape my old work. They're the only place that's hiring despite all this godforsaken turmoil, but I'm not going back into that hole. $ They only tempted me because I need out, fast. Remember that atmospheric testing treaty we withdrew from a week ago? +book_lore.bf_bomb_4.page.1=Well, the dipshit in charge of our lab got something right for once. The denunciation came with a flurry of new "scientists" joining, just so we could weaponize balefire. The lack of critical thought here is honestly baffling - bless him, Andrew even jumped ship the +book_lore.bf_bomb_4.page.2=second the first fucking BOMB DESIGN was drafted. That ass Melfyn looked so happy with his little mechanism - perhaps he got brainworms from carrying that sample? - which involved some stupid shit using the solidified, base balefire and an HV +book_lore.bf_bomb_4.page.3=battery. $ Apparently, the form matters for energy output and activation method or whatever, kind of like uranium versus plutonium in regular nukes, but the end result is an initial shock starting the explosion. I find it funny, hilarious even. +book_lore.bf_bomb_4.page.4=All of them place such emphasis on the activation; they ignore the actual mechanism of it all because they don't have a single clue how it works! It may as well be magic at this point, and yet they're still trying to twist and bend it - just for more weapons of war. + +book_lore.bf_bomb_5.name=Особисті нотатки +book_lore.bf_bomb_5.author=M. Porter +book_lore.bf_bomb_5.page.0=I just... can't come to grips with it, even days after. It was a foregone conclusion, really, with how flippant the science team was with safety. $ $ Doctor Melfyn, M.S., is gone. Dead, maybe. I saw it happen before my own eyes, in their test chamber. +book_lore.bf_bomb_5.page.1=We had just gotten another batch of pure balefire, and he had recovered electrical equipment and an energy source to test his proposal. I don't know what caused it (was the power on? had he begun too soon?), but it seemingly progressed in agonizingly slow motion, +book_lore.bf_bomb_5.page.2=as the green-tinted light consumed the table, the battery, and Dr. Melfyn standing only a meter away. Even when the table had degraded into a pool of broiling metal on the floor, he did not burn. I don't know what I saw in his eyes... $ $ Terror, or awe +book_lore.bf_bomb_5.page.3=over his continued survival, maybe? Whatever our "miracle" material was, it didn't care. With a bright blaze of light, he disappeared in the next moment. Was he evaporated? incinerated? annihilated? sent to fucking hell itself, I don't know anymore! +book_lore.bf_bomb_5.page.4=The head researcher sickens me. Said we could be more careful, keep trucking, whatever other morale-improving filth he spewed. That dipshit won't ever figure out that playing with fire will get you burned. $ I didn't bother +book_lore.bf_bomb_5.page.5=resigning, I just grabbed my shit and ran for the hills. Not like it matters, anyway; considering the lack of calls, and the mushroom cloud that rose over my (now former) workplace, they've either blown everything up or entered full-on military jurisdiction. +book_lore.bf_bomb_5.page.6=There's a vital distinction to be made between dissection and VIVISECTION, one which was clearly lost on them. They can dissect metal or atoms as much as they like, but tearing into, vivisecting reality itself is only going to end in more Dr. Melfyns. Who knows! +book_lore.bf_bomb_5.page.7=The government wants to put this shit into bombs after all, maybe we'll see a couple more wars, couple more million resigned to a fate worse than death. They can't hide this forever. $ $ I don't care. Not anymore. Please, god, let me go back +book_lore.bf_bomb_5.page.8=to actual science. $ $ Goddamnit, Mae, get ahold of yourself... + +book_lore.beacon.name=Signal Beacon Instruction Booklet +book_lore.beacon.author=Flim Flam Industries +book_lore.beacon.page.0=Thank you for your purchase of a Mk.2 Illuminated Signal Beacon (rev. 1.3)! This small booklet will provide a short introduction in the operation of the beacon, as well as its inner workings. +book_lore.beacon.page.1=Chapter 1: Architecture $ Each unit is composed of four main parts: The control circuit, a lantern, a fog horn and the casing which houses the other parts. For a detailed explanation of the main circuit, please +book_lore.beacon.page.2=refer to the circuit diagram found on the inside of the maintenance lid of the casing. The lantern is made up of a polycarbonate case containing a dual-color 250 Watt halogen bulb with a standard 200mm socket, replacements +book_lore.beacon.page.3=for the bulb can be ordered from our stores. Third party bulbs are not recommended, as we cannot ensure safe operation. The case is made from a specialized zinc-coated stainless steel and is resistant to weathering. +book_lore.beacon.page.4=Chapter 2: Lantern $ The lantern's primary uses are providing light for ease of maintenance in harsh weather conditions as well as a status indicator. Should the power-on self test (POST) fail, the lantern will +book_lore.beacon.page.5=light up red, otherwise it will light up green. Note that colors can vary depending on the replacement bulb. +book_lore.beacon.page.6=Chapter 3: Fog Horn $ The fog horn is the primary communication device of the beacon. The beacon is designed for peer-to-peer (P2P) communication as well as for message broadcasting. +book_lore.beacon.page.7=Chapter 4: Peer-to-Peer $ For details on communication, refer to the communications handbook. A short rundown of establishing a P2P connection follows: First, the beacon has to give the "START CONNECTION" signal, +book_lore.beacon.page.8=being a single long tone. All available peers should respond with a single long tone as well (order specified by proximity, as well as the communication guidelines outlined in the handbook, section "Responding to a Connection") +book_lore.beacon.page.9=Once the desired peer has responded, give the "ACCEPT CONNECTION" signal, being two long tones, the peer will then also respond with two long tones. All communication afterwards has to happen using pre-negotiated signals, most commonly +book_lore.beacon.page.10=using the FAR-5M standard. Communication will end immediately if no standard has been negotiated, serving as a "ping". Should communication continue, the connection can be ended using another long single tone "END CONNECTION". +book_lore.beacon.page.11=Chapter 5: Warranty $ [ page intentionally left blank ] + +cannery.f1=[ Натисніть F1 для довідки ] + +cannery.centrifuge=Газова центрифуга +cannery.centrifuge.0=Газові центрифуги можуть постачатися рідиною за допомогою звичайних трубопроводів для рідини. +cannery.centrifuge.1=Для більшості рецептів потрібно кілька центрифуг. Проміжні продукти не можуть транспортуватися трубопроводами. +cannery.centrifuge.2=Ця сторона передає проміжний продукт в наступну центрифугу. +cannery.centrifuge.3=Гексафторид урану можна переробляти за допомогою двох центрифуг, але ви отримаєте лише Уранове паливо та Уран-238. +cannery.centrifuge.4=Для повного відділення Урану-235 від Урану-238 потрібно чотири центрифуги. +cannery.centrifuge.5=Деякі рецепти також вимагають покращення "Розгін газової центрифуги". + +cannery.crucible=Ливарня +cannery.crucible.0=The crucible is used to smelt ores, ingots or other metallic items for alloying and to cast them into different shapes. +cannery.crucible.1=It requires an external heat source connected to the bottom, like a firebox. +cannery.crucible.2=Once heated up, the crucible can be used in two ways, with or without a recipe template. +cannery.crucible.3=The crucible has two storage buffers for material: +cannery.crucible.4=The buffer to the left is for §abyproducts§r, all material smelted without a recipe template will land here. +cannery.crucible.5=If a recipe is installed, materials that do not match the recipe will also be stored here. +cannery.crucible.6=Materials in this buffer will not react with each other, they can only be output from the green outlet for casting. +cannery.crucible.7=The buffer to the right is for §crecipes§r, if a recipe is installed and that particular material is relevant to that recipe, it will land here. +cannery.crucible.8=The materials will slowly combine into the output material which is automatically output from the red outlet. +cannery.crucible.9=Note that only this buffer handles recipes. If a template is installed retroactively, materials in the byproduct buffer will not combine, nor transfer to the recipe buffer. +cannery.crucible.10=The outlet will output material automatically, if the target is valid, for example a foundry channel or a mold. +cannery.crucible.11=As with all foundry blocks, a shovel can be used to remove all material from the crucible. + +cannery.fensu=FEnSU +cannery.fensu.0=The FEnSU is capable of storing absurd amounts of energy, over 9EHE (that's a nine followed by 18 zeros). +cannery.fensu.1=There is only one energy connector which can be found on the bottom. +cannery.fensu.2=This is also the only place where the FEnSU can receive a redstone signal. + +cannery.firebox=Firebox +cannery.firebox.0=The firebox burns flammable items to generate heat. +cannery.firebox.1=It can burn any flammable item, although higher quality fuels such as coal, coke and solid fuel burn longer and hotter. +cannery.firebox.2=Heat is given off by the copper contact at the top of the firebox. Machines with an identical contact on the bottom can receive heat by being placed on top of the firebox. +cannery.firebox.3=If heat isn't being used up and the heat buffer becomes full, the firebox will shut off to prevent wasting of fuel. +cannery.firebox.4=One such machine is the stirling engine, which will turn heat directly into energy. + +cannery.foundryChannel=Foundry Channel +cannery.foundryChannel.0=Foundry channels are used to transport molten material from a crucible or storage tank into molds. +cannery.foundryChannel.1=Channels can receive material either by pouring from the top - via an outlet or directly from a crucible - or from the side from other channels. +cannery.foundryChannel.2=When transporting materials, channels will prioritize blocks like outlets and shallow molds. +cannery.foundryChannel.3=When it cannot supply an outlet or a mold, the material will then flow into a neighboring channel. +cannery.foundryChannel.4=Leftover material can be removed by using a shovel. + +cannery.silex=Лазер на вільних електронах (FEL) та Камера лазерного розділення ізотопів (SILEX) +cannery.silex.0=The Free Electron Laser (FEL) uses energy and a laser crystal to create a powerful laser beam. +cannery.silex.1=Be careful, as the laser will burn/melt through weaker blocks... +cannery.silex.2=...but not blast-proof ones. +cannery.silex.3=The FEL is used to power the Laser Isotope Separation Chamber (SILEX). The FEL and SILEX have to be at least two blocks apart. +cannery.silex.4=The laser has to enter through the glass openings of the SILEX. Aiming it wrong could destroy it. +cannery.silex.5=The openings on the sides can be used to connect fluid ducts to the SILEX. +cannery.silex.6=In addition to the two connectors on the sides, there is a third hidden connector at the bottom from which items can be extracted. +cannery.silex.7=Each recipe requires a specific laser type. Using a stronger type than required will process items faster. +cannery.silex.8=One FEL can supply up to 5 SILEX. Each SILEX has to be one block apart from one another. + +cannery.stirling=Stirling Engine +cannery.stirling.0=The Stirling engine uses heat energy from external sources to create power. +cannery.stirling.1=It needs to be placed on top of a heat-producing machine, such as the firebox. +cannery.stirling.2=The amount of heat it can utilize however is limited, overspinning can lead to catastrophic malfunction. +cannery.stirling.3=The upgraded version can take significantly more heat without breaking. + +cannery.willow=Гірчична верба +cannery.willow.0=The mustard willow is a plant that allows cadmium metal to be harvested. +cannery.willow.1=Willows can be placed on dirt, grass or even dead/oily dirt, but they require water to grow. +cannery.willow.2=Willows can be fertilized with bone meal or industrial fertilizer. They do not need light to grow. +cannery.willow.3=After the second stage of growth, they will need an extra block of space above them to grow further. +cannery.willow.4=After the fourth stage of growth, they require dead or oily dirt below them. +cannery.willow.5=This can be done either by manually planting willows on dead/oily dirt, or by having a hydraulic fracking tower nearby which continuously contaminates the ground. +cannery.willow.6=After reaching the final stage, the willow will remove contamination from the ground, reverting the dead/oily dirt back into regular dirt. +cannery.willow.7=Now the willow's leaves can be harvested. Breaking the top block will drop a small willow plant, 3-6 leaves and keep the bottom part of the plant intact. +cannery.willow.8=Soon the plant will start growing again, yielding more leaves if the dirt is replaced with oily dirt. The leaves can be processed into cadmium powder using an ore acidizer. +cannery.willow.9=Harvesting willow leaves can be automated using the automatic buzzsaw, it will only break plants that are ready for harvest. + +cannery.hadron=Прискорювач частинок +cannery.hadron.0=A Particle Accelerator consists of three main parts: A Core, an Analysis Chamber, and a set of Superconducting Coils +cannery.hadron.1=This is the Particle Accelerator Core Component, which fires particles at relativistic speeds down the coils towards the Analysis Chamber +cannery.hadron.2=Particles are ejected from here +cannery.hadron.3=And in circular accelerators, return to here +cannery.hadron.4=A coil segment is constructed by using 8 Dense Coils with nothing (or the core) in the middle +cannery.hadron.5=This coil segment must itself also be enclosed within Particle Accelerator Plating +cannery.hadron.6=To access the Core Component, you'll need to add one or more Access Terminals +cannery.hadron.7=The Core Component will also require power to operate, add a power plug on an edge +cannery.hadron.8=The Accelerator will require enough Power Plugs to supply at least 10KHE of electricity per unit of Coil Strength +cannery.hadron.9=Note that the coil segment that wraps around the Core Component is not factored into the Coil Strength calculation +cannery.hadron.10=Nor is this coil segment required for purely linear accelerators +cannery.hadron.11=For circular accelerators, you will need to add corners to change the direction of the particle +cannery.hadron.12=The outside corner coils can be omitted entirely +cannery.hadron.13=The final part of our Accelerator is the Analysis Chamber, which is a 3x3x3 empty chamber surrounded by Analysis Chamber blocks +cannery.hadron.14=Your completed Particle Accelerator should look something like this! + +cannery.hadron.math.0=Сила неодимової котушки: 50 +cannery.hadron.math.1=50 x 8 x 10KHE = 400 x 10KHE = 4MHE +cannery.hadron.math.2=Сила котушки з зіркового металу: 1,000 +cannery.hadron.math.3=1,000 x 8 x 10KHE = 8,000 x 10KHE = 80MHE + +cannery.schottky=Schottky Particle Diode +cannery.schottky.0=This is a Schottky Particle Diode. It can allow for more complex particle accelerator designs and save on electricity +cannery.schottky.1=By default it blocks all particles and must be configured with a Screwdriver +cannery.schottky.2=This face will now accept entering particles +cannery.schottky.3=And this face will eject particles that enter +cannery.schottky.4=The diode now has two exits, and will now behave in a quantum manner, creating virtual particles for each exit +cannery.schottky.5=Once all the virtual particles have reached an Analysis Chamber, the particle with the lowest momentum required for the current recipe is chosen +cannery.schottky.6=The chosen particle undergoes a wavefunction collapse and is made real, consuming only the power that the collapsing particle requires +cannery.schottky.7=If any virtual particles encounter any malformed segments, all virtual particles will be discarded and the erroring particle will be collapsed instead +cannery.schottky.8=Note that virtual particles will never use the same Diode exit twice. Infinite loops will fail, but re-entering a Diode is otherwise fine +cannery.schottky.9=Your Schottky Particle Diode should be properly enclosed, with free paths for each intersection exit + +chem.ARSENIC=Екстракція миш'яку +chem.ASPHALT=Виробництво асфальту +chem.BAKELITE=Виробництво карболіту +chem.BALEFIRE=Змішування ракетного BF палива +chem.BP_BIOFUEL=Трансестерифікація біопалива +chem.BP_BIOGAS=Виробництво біогазу +chem.C4=Синтез C-4 +chem.CC_CENTRIFUGE=Відділення хлорокальциту +chem.CC_ELECTROLYSIS=Електроліз хлориду кальцію +chem.CC_HEATING=Удосконалене скраплення вугілля +chem.CC_HEAVY=Базове скраплення вугілля +chem.CC_I=Покращене скраплення вугілля +chem.CC_NAPHTHA=Нафтове скраплення вугілля +chem.CC_OIL=Скраплення вугілля +chem.CIRCUIT_4=Виробництво розігнаної мікросхеми +chem.CIRCUIT_5=Виробництво високопродуктивної мікросхеми +chem.CO2=Виробництво вуглекислого газу +chem.COALGAS_LEADED=Змішування тетраетилсвинцю з вугільним бензином +chem.COLTAN_CLEANING=Очищення колтану +chem.COLTAN_CRYSTAL=Кристалізація танталу +chem.COLTAN_PAIN=Виробництво Пандемоніум(III)танталу +chem.CONCRETE=Виробництво бетону +chem.CONCRETE_ASBESTOS=Виробництво азбестобетону +chem.COOLANT=Змішування охолоджувальної рідини +chem.CORDITE=Виробництво кордиту +chem.CRYOGEL=Змішування кріогелю +chem.DESH=Виробництво Деш +chem.DEUTERIUM=Екстракція дейтерію +chem.DUCRETE=Виробництво уранобетону +chem.DYN_DNT=Диносинтез динейтронію +chem.DYN_EUPH=Диносинтез юхимію +chem.DYN_SCHRAB=Диносинтез шрабідію +chem.DYNAMITE=Синтез динаміту +chem.ELECTROLYSIS=Кріоелектроліз +chem.EPEARL=Синтез перлини Енду +chem.ETHANOL=Виробництво етанолу +chem.FC_BITUMEN=Крекінг бітуму +chem.FC_DIESEL_KEROSENE=Крекінг дизелю +chem.FC_GAS_PETROLEUM=Крекінг природного газу +chem.FC_I_NAPHTHA=Крекінг промислової оливи +chem.FC_KEROSENE_PETROLEUM=Крекінг гасу +chem.FP_HEAVYOIL=Переробка важкої нафти +chem.FP_LIGHTOIL=Переробка легкої нафти +chem.FP_NAPHTHA=Переробка лігроїну +chem.FP_SMEAR=Переробка промислової оливи +chem.FR_PETROIL=Змішування бензину +chem.FR_REOIL=Очищення промислової оливи +chem.FRACKSOL=Виробництво розчину для гідророзриву пласта +chem.GASOLINE=Виробництво газоліну +chem.GASOLINE_LEADED=Змішування тетраетилсвинцю з газоліном +chem.HEAVY_ELECTROLYSIS=Кріоелектроліз важкої води +chem.HELIUM3=Видобуток Гелію-3 з місячного грунту +chem.KEVLAR=Виробництво кевларового компаунду +chem.LAMINATE=Виробництво багатошарового скла +chem.LPG=Скраплення нафтового газу +chem.LUBRICANT=Змішування мастила +chem.METH=Синтез метамфетаміну +chem.MEAT_PROCESSING=Отримання мінералів з м'яса гліфідів +chem.NITAN=Змішування суперпалива NITAN +chem.NITRIC_ACID=Виробництво азотної кислоти +chem.OIL_SAND=Переробка бітумінозного піску +chem.OSMIRIDIUM_DEATH=Виробництво розчину осмистого іридію +chem.PC=Синтез полікарбонату +chem.PC_ELECTROLYSIS=Електроліз хлориду калію +chem.PEROXIDE=Виробництво перекису водню +chem.PET=Синтез ПЕТ +chem.PETROIL_LEADED=Змішування тетраетилсвинцю з бензином +chem.POLYMER=Синтез полімерів +chem.PUF6=Виробництво гексафториду плутонію +chem.PVC=Синтез полівінілхлориду +chem.RUBBER=Виробництво гуми +chem.SAS3=Виробництво трисульфіду шрабідію +chem.SATURN=Виробництво сатурніту +chem.SCHRABIDATE=Виробництво ферошрабідату +chem.SCHRABIDIC=Змішування шрабідієвої кислоти +chem.SF_BIOFUEL=Затвердіння біопалива +chem.SF_BIOGAS=Затвердіння біогазу +chem.SF_DIESEL=Затвердіння дизеля +chem.SF_GAS=Затвердіння природного газу +chem.SF_HEATINGOIL=Затвердіння мазуту +chem.SF_HEAVYOIL=Затвердіння важкої нафти +chem.SF_KEROSENE=Затвердіння гасу +chem.SF_LIGHTOIL=Затвердіння легкої нафти +chem.SF_LUBRICANT=Затвердіння оливи +chem.SF_NAPHTHA=Затвердіння лігроїну +chem.SF_OIL=Затвердіння сирої нафти +chem.SF_PETROIL=Затвердіння бензину +chem.SF_PETROLEUM=Затвердіння нафтового газу +chem.SF_RECLAIMED=Затвердіння очищеної оливи +chem.SF_SMEAR=Затвердіння промислової оливи +chem.SHELL_CHLORINE=Виробництво артилерійських снарядів з хлором +chem.SHELL_MUSTARD=Виробництво артилерійських снарядів з іпритом +chem.SHELL_PHOSGENE=Виробництво артилерійських снарядів з фосгеном +chem.SOLID_FUEL=Виробництво твердого ракетного палива +chem.SOLVENT=Змішування органічних розчинників +chem.STEAM=Кип'ятіння води +chem.SULFURIC_ACID=Виробництво сірчаної кислоти +chem.TATB=Синтез тріамінотрінітробензолу +chem.TEL=Змішування тетраетилсвинцю +chem.TEST=Test +chem.THORIUM_SALT=Збагачення торієвої солі +chem.TNT=Синтез тринітротолуолу +chem.UF6=Виробництво гексафториду урану +chem.VIT_GAS=Осклування газоподібних ядерних відходів +chem.VIT_LIQUID=Осклування рідких ядерних відходів +chem.XENON=Ксеноновий цикл Лінде +chem.XENON_OXY=Покращений ксеноновий цикл Лінде +chem.YELLOWCAKE=Виробництво єлоукейка + +commands.satellite.no_active_satellites=Активних супутників не знайдено! +commands.satellite.no_satellite=Супутників, що використовують цю частоту, не знайдено! +commands.satellite.not_a_satellite=Утримуваний предмет не є супутником! +commands.satellite.satellite_descended=Супутник успішно спустився. +commands.satellite.satellite_orbited=Супутник запущено. +commands.satellite.should_be_run_as_player=Цю команду має виконати гравець! + +container.ammoBag=Сумка для боєприпасів +container.amsBase=AMS Base (Deco) +container.amsEmitter=AMS Emitter (Deco) +container.amsLimiter=AMS Stabilizer (Deco) +container.anvil=Ковадло %s рівня +container.arcFurnace=Дугова піч +container.armorTable=Стіл модифікації броні +container.ashpit=Зольник +container.assembler=Збиральна машина +container.autocrafter=Автоматичний верстак +container.barrel=Бочка +container.bat9000=Big-Ass цистерна 9000 +container.battery=Накопичувач енергії +container.bombMulti=Багатоцільова бомба +container.casingBag=Сумка для гільз +container.catalyticReformer=Каталітичний риформер +container.centrifuge=Центрифуга +container.chemplant=Хімічний завод +container.compactLauncher=Компактний стартовий майданчик +container.craneBoxer=Конвеєрний пакувальник +container.craneExtractor=Конвеєрний витягувач +container.craneGrabber=Конвеєрний збирач +container.craneInserter=Конвеєрний вставник +container.craneRouter=Конвеєрний сортувальник +container.craneUnboxer=Конвеєрний розпакувальник +container.crateDesh=Деш ящик +container.crateIron=Залізний ящик +container.crateSteel=Сталевий ящик +container.crateTemplate=Ящик шаблонів +container.crateTungsten=Вольфрамовий ящик +container.crystallizer=Рудний окислювач +container.cyclotron=Циклотрон +container.dfcCore=Реактор темного синтезу +container.dfcEmitter=DFC Emitter +container.dfcInjector=DFC Fuel Injector +container.dfcReceiver=DFC Receiver +container.dfcStabilizer=DFC Stabilizer +container.diFurnace=Доменна піч +container.diFurnaceRTG=Ядерна доменна піч +container.droneCrate=Ящик для транспортних дронів +container.droneDock=Дрон-станція +container.droneProvider=Постачальник дронів +container.droneRequester=Запитувач дронів +container.electricFurnace=Електрична піч +container.epress=Електричний прес +container.exposureChamber=Камера опромінювання частинками +container.factoryAdvanced=Розширена фабрика +container.factoryTitanium=Базова фабрика +container.fluidtank=Цистерна +container.fileCabinet=Картотечна шафа +container.forceField=Випромінювач силового поля +container.frackingTower=Вежа гідророзриву пласта +container.furnaceBrick=Цегляна піч +container.furnaceCombination=Коксова піч +container.furnaceIron=Залізна піч +container.furnaceSteel=Сталева піч +container.fusionMultiblock=Великий термоядерний реактор +container.fusionaryWatzPlant=Реактор Ватцз електростанції +container.gasCentrifuge=Газова центрифуга +container.gasFlare=Факельна лінія +container.generator=Ядерний реактор +container.hadron=Прискорювач частинок +container.heaterFirebox=Нагрівальна топка +container.heaterHeatex=Теплообмінник +container.heaterOilburner=Спалювач рідини +container.heaterOven=Нагрівальна піч +container.hydrotreater=Гідроочисник +container.iGenerator=Промисловий генератор +container.keyForge=Стіл замочника +container.launchPad=Стартовий майданчик +container.launchPadRusted=Стартовий майданчик +container.launchTable=Великий стартовий майданіще +container.leadBox=Свинцевий ящик +container.machineAmmoPress=Прес для боєприпасів +container.machineArcWelder=Дуговий зварювальник +container.machineArcFurnaceLarge=Дугова піч +container.machineBoiler=Нагрівач нафти +container.machineCMB=CMB Steel Furnace +container.machineCoal=Твердопаливний генератор +container.machineCoker=Коксова установка +container.machineCompressor=Компресор +container.machineCrucible=Ливарня +container.machineDiesel=Дизельний генератор +container.machineElectricBoiler=Електричний нагрівач нафти +container.machineElectrolyser=Електролізер +container.machineFEL=FEL +container.machineFunnel=Комбінаторна воронка +container.machineICF=ICF +container.machineICFPress=Виробник паливних гранул ICF +container.machineITER=Термоядерний реактор +container.machineLargeTurbine=Промислова парова турбіна +container.machineLiquefactor=Скраплювач +container.machineMixer=Промисловий змішувач +container.machineOreSlopper=Переробник корінної руди +container.machinePyroOven=Піролізна піч +container.machineRefinery=Нафтопереробний завод +container.machineRotaryFurnace=Роторна піч +container.machineSelenium=Радіальний двигун +container.machineShredder=Подрібнювач +container.machineSILEX=SILEX +container.machineSolderingStation=Паяльна станція +container.machineSolidifier=Затверджувач +container.machineStrandCaster=Установка безперервного лиття +container.machineTurbine=Парова турбіна +container.machineTurbofan=Турбовентилятор +container.machineWoodBurner=Дров'яна піч +container.machine_schrabidium_transmutator=Пристрій для трансмутації шрабідію +container.massStorage=Сховище +container.microwave=Мікрохвильова піч +container.miningDrill=Автоматичний гірничий бур +container.miningLaser=Шахтарський лазер +container.missileAssembly=Станція збірки ракет +container.nukeBoy=Малюк +container.nukeCustom=Кастомна бомба +container.nukeFleija=F.L.E.I.J.A. +container.nukeFstbmb=BF бомба +container.nukeFurnace=Ядерна піч +container.nukeGadget=Гаджет +container.nukeMan=Товстун +container.nukeMike=Айві Майк +container.nukeN2=N² Міна +container.nukeN45=Морська міна N45 +container.nukePrototype=Прототип +container.nukeSolinium=Солінієвий стерилізатор +container.nukeTsar=Цар-бомба +container.oilWell=Нафтова вежа +container.orbus=Важка магнітна цистерна +container.paDetector=Детектор +container.paDipole=Диполь +container.paQuadrupole=Квадруполь +container.paSource=Джерело частинок +container.plasmaHeater=Нагрівач плазми +container.pneumoTube=Пневматична труба +container.press=Твердопаливний прес +container.puf6_tank=Цистерна гексафториду плутонію +container.pumpjack=Верстат-гойдалка +container.radGen=Радіаційний двигун +container.radar=Радар +container.radiobox=FM-передавач +container.radiolysis=РІТЕГ та радіолізна камера +container.radiorec=FM радіо +container.rbmkBoiler=Паровий канал РБМК +container.rbmkControl=Регулюючий стрижень РБМК +container.rbmkControlAuto=Автоматичний регулюючий стрижень РБМК +container.rbmkHeater=Нагрівач рідини РБМК +container.rbmkOutgasser=Канал опромінення РБМК +container.rbmkReaSim=Паливний стрижень РБМК (ReaSim) +container.rbmkRod=Паливний стрижень РБМК +container.rbmkStorage=Колона зберігання РБМК +container.reactorBreeding=Реактор-розмножувач +container.reactorControl=Блок дистанційного керування реактором +container.reactorLarge=Великий ядерний реактор +container.reactorResearch=Дослідницький реактор +container.reix=Rei-X Mainframe +container.rtg=РІТЕГ +container.rtgFurnace=РІТЕГ піч +container.rttyController=Редстоун-радіо контролер +container.rttyCounter=Редстоун-радіо лічильник предметів +container.rttyLogic=Редстоун-радіо логічний приймач +container.rttyReader=Редстоун-радіо зчитувач +container.rttyReceiver=Редстоун-радіо приймач +container.rttySender=Редстоун-радіо передавач +container.safe=Сейф +container.satDock=Вантажний посадковий майданчик +container.satLinker=SatLink Device +container.siren=Сирена +container.soyuzCapsule=Вантажна посадкова капсула +container.soyuzLauncher=Стартовий майданчик "Союза" +container.storageDrum=Бочка для захоронення ядерних відходів +container.teleLinker=TelLink Device +container.teleporter=Телепорт +container.toolBox=Ящик для інструментів +container.trainTram=Трамвай з платформою +container.turbinegas=Газова турбіна комбінованого циклу +container.turretArty=Грег +container.turretChekhov=Косторіз +container.turretFriendly=Містер Дружній +container.turretFritz=Фріц +container.turretHIMARS=Генрі +container.turretHoward=Говард +container.turretJeremy=Джеремі +container.turretMaxwell=Максвелл +container.turretRichard=Річард +container.turretSentry=Браун +container.turretTauon=Тауон +container.uf6_tank=Цистерна гексафториду урану +container.vacuumDistill=Вакуумний нафтопереробний завод +container.wasteDrum=Контейнер охолодження відпрацьованого палива +container.watzPowerplant=Ватцз електростанція +container.weaponsTable=Стіл модифікації зброї +container.zirnox=Ядерний реактор ЦИРНОКС + +copytool.filter=Фільтр +copytool.invertRedstone=Інвертований редстоун +copytool.invertFilter=Інвертований фільтр +copytool.orientation=Орієнтація +copytool.pattern0=Червона сторона +copytool.pattern1=Помаранчева сторона +copytool.pattern2=Жовта сторона +copytool.pattern3=Зелена сторона +copytool.pattern4=Блакитна сторона +copytool.pattern5=Фіолетова сторона + +crucible.aa=Виробництво удосконаленого сплаву +crucible.abronze=Виробництво миш'якової бронзи +crucible.bbronze=Виробництво вісмутової бронзи +crucible.bscco=Виробництво вісмут стронцій кальцій мідь оксиду (BSCCO) +crucible.cdalloy=Виробництво кадмієвої сталі +crucible.cmb=Виробництво сталі комбайнів +crucible.ferro=Виробництво фероурану +crucible.hematite=Виробництво заліза з гематиту +crucible.hss=Виробництво швидкорізальної сталі +crucible.malachite=Виробництво міді з малахіту +crucible.magtung=Виробництво намагніченого вольфраму +crucible.redcopper=Виробництво червоної міді +crucible.steel=Виробництво сталі +crucible.steelMeteoric=Виробництво сталі з метеоритного заліза +crucible.steelPig=Steel Виробництво сталі з чавуну +crucible.steelWrought=Виробництво сталі з кованого заліза +crucible.tcalloy=Виробництво технецієвої сталі + +damage.inset=Опір при повному комплекті: +damage.item=Опір до: +damage.category.EXPL=Вибухів +damage.category.FIRE=Вогню +damage.category.PROJ=Снарядів +damage.exact.drown=Утоплення +damage.exact.fall=Падіння +damage.exact.LASER=Лазерів +damage.exact.onFire=Горіння +damage.other=Інше + +death.attack.acid=%1$s впав у кислоту. +death.attack.acidPlayer=%1$s був розчинений %2$s. +death.attack.ams=%1$s був наповнений смертоносними частинками, яким людство ще не дало назви. +death.attack.amsCore=%1$s випарувався у вогні сингулярності. +death.attack.asbestos=%1$s тепер має право на фінансову компенсацію. +death.attack.bang=%1$s розірвано на кусочки. +death.attack.blackhole=%1$s перетворився на спагеті. +death.attack.blacklung=%1$s помер від антракозу легень. +death.attack.blender=%1$s перетворився на фарш. +death.attack.boat=%1$s був збитий човном. +death.attack.boil=%1$s був зварений живцем %2$s. +death.attack.boxcar=%1$s розчавлений падаючим вагоном. Ох ну. +death.attack.broadcast=У %1$s розтопився мозок. +death.attack.building=%1$s розчавлений будівлею. +death.attack.cheater=Кишки %1$s перетворилися на овес. (???) +death.attack.chopperBullet=%1$s was rekt by %2$s. +death.attack.cloud=%1$s розтанув, як морозиво на сонці. +death.attack.cmb=%1$s was fizzeled by %2$s. +death.attack.digamma=%1$s ступив у безодню. +death.attack.electricity=%1$s був вбитий електричним струмом. +death.attack.electrified=%1$s був вбитий електричним струмом %2$s. +death.attack.euthanized=%1$s евтанізований %2$s. +death.attack.euthanizedSelf2=%1$s отримує премію Дарвіна. +death.attack.euthanizedSelf=%1$s зробив собі евтаназію, який придурок. +death.attack.exhaust=%1$s перетворений на шашлик взлітаючою ракетою. +death.attack.flamethrower=%1$s був кремований %2$s. +death.attack.flamethrower.item=%1$s був кремований %2$s за допомогою %3$s. +death.attack.ice=%2$s перетворив %1$s на морозиво. +death.attack.laser=%2$s перетворив на попіл %1$s. +death.attack.laser.item=%2$s перетворив %1$s на попіл за допомогою %3$s. +death.attack.lead=%1$s помер від отруєння свинцем. +death.attack.lunar=%1$s забув зарядити свої життєво важливі органи. +death.attack.meteorite=%1$s постраждав від падіння каменю з космосу. +death.attack.microwave=%1$s вибухнув під дією мікрохвильового випромінювання. +death.attack.mku=%1$s помер з невідомих причин. +death.attack.monoxide=%1$s забув замінити батарейки у своєму детекторі чадного газу. +death.attack.mudPoisoning=%1$s помер в токсичних відходах +death.attack.nuclearBlast=%1$s був стертий ядерним вибухом +death.attack.overdose=%1$s отримав передозування та задухнувся. +death.attack.pc=%1$s перетворився на калюжу в рожевій хмарі. +death.attack.plasma=%1$s був спалений %2$s. +death.attack.radiation=%1$s помер від радіаційного отруєння. +death.attack.revolverBullet=%1$s отримав постріл у голову від %2$s. +death.attack.revolverBullet.item=%1$s отримав постріл у голову від %2$s за допомогою %3$s. +death.attack.rubble=%1$s розчавлений уламками. +death.attack.shrapnel=%1$s посічений осколками. +death.attack.spikes=%1$s був проколотий. +death.attack.subAtomic1=%1$s's atoms have been destroyed by %2$s. +death.attack.subAtomic2=%1$s was QPU-misaligned because %2$s tampered with their de facto speed. +death.attack.subAtomic3=%1$s's divergence dropped below 1 percent because of %2$s. +death.attack.subAtomic4=%1$s was divided by zero by %2$s. +death.attack.subAtomic5=%1$s was nullified by %2$s. +death.attack.suicide=%1$s розніс собі голову. +death.attack.taint=%1$s died from flux tumors. +death.attack.tau=%1$s was riddeled by %2$s using negatively charged tauons. +death.attack.tauBlast=%1$s charged the XVL1456 for too long and was blown into pieces. +death.attack.teleporter=%1$s телепортувався в небуття. + +death.sedna.electric=%1$s was fried. +death.sedna.electric.attacker=%1$s was fried by %2$s. +death.sedna.explosive=%1$s was blown up. +death.sedna.explosive.attacker=%1$s was blown up by %2$s. +death.sedna.fire=%1$s was incinerated. +death.sedna.fire.attacker=%1$s was incinerated by %2$s. +death.sedna.laser=%1$s was pulverized. +death.sedna.laser.attacker=%1$s was pulverized by %2$s. +death.sedna.microwave=%1$s was microwaved. +death.sedna.microwave.attacker=%1$s was microwaved by %2$s. +death.sedna.subatomic=%1$s was atomized. +death.sedna.subatomic.attacker=%1$s was atomized by %2$s. +death.sedna.other=%1$s was killed. +death.sedna.other.attacker=%1$s was killed by %2$s. +death.sedna.physical=%1$s was shot. +death.sedna.physical.attacker=%1$s was shot by %2$s. + +desc.gui.assembler.warning=§cПомилка:§r Для цієї машини потрібен шаблон для збірки! +desc.gui.chemplant.warning=§cПомилка:§r Для цієї машини потрібен хімічний шаблон! +desc.gui.gasCent.enrichment=§2Збагачення§r$Збагачення урану вимагає каскадів.$Двоцентрифужні каскади даватимуть$уранове паливо, чотирицентрифужні каскади$забезпечать повне розділення. +desc.gui.gasCent.output=§6Переміщення рідини§r$Рідину можна передавати в іншу центрифугу$через вихідний отвір для подальшої обробки. +desc.gui.nukeBoy.desc=§1Вимагає:§r$ * Нейтронний щит$ * Снаряд U235$ * Субкритична ціль U235$ * Кордитний заряд$ * Запальник бомби +desc.gui.nukeGadget.desc=§1Вимагає:§r$ * 4 Масиви вибухових лінз$ Першого покоління$ * Велике плутонієве ядро$ * Проводка +desc.gui.nukeMan.desc=§1Вимагає:§r$ * 4 Масиви вибухових лінз$ Першого покоління$ * Плутонієве ядро$ * Блок детонатор +desc.gui.nukeMike.desc=§1Вимагає:§r$ * 4 Масиви вибухових лінз$ * Плутонієве ядро$ * Deuterium Cooling Unit$ * Уранове покриття дейтерієвого баку$ * Дейтерієвий бак +desc.gui.nukeTsar.desc=§1Вимагає:§r$ * 4 Масиви вибухових лінз$ * Плутонієве ядро$§9Опціонально:§r$ * Ядро Цар-бомби +desc.gui.rttyLogic.cond0=Сигнал §6МЕНШЕ§r Константи +desc.gui.rttyLogic.cond1=Сигнал §6МЕНШЕ АБО ДОРІВНЮЄ§r Константі +desc.gui.rttyLogic.cond2=Сигнал §6БІЛЬШЕ АБО ДОРІВНЮЄ§r Константі +desc.gui.rttyLogic.cond3=Сигнал §6БІЛЬШЕ§r Константи +desc.gui.rttyLogic.cond4=Сигнал §6ДОРІВНЮЄ§r Константі +desc.gui.rttyLogic.cond5=Сигнал §6НЕ ДОРІВНЮЄ§r Константі +desc.gui.rttyLogic.cond6=Сигнал §6ВІДПОВІДАЄ§r Рядку +desc.gui.rttyLogic.cond7=Сигнал §6НЕ ВІДПОВІДАЄ§r Рядку +desc.gui.rttyLogic.cond8=Сигнал §6МІСТИТЬ§r Рядок +desc.gui.rttyLogic.cond9=Сигнал §6НЕ МІСТИТЬ§r Рядок +desc.gui.radiolysis.desc=§9Опис§r$Цей РІТЕГ ефективніший за інші та$обладнаний камерою радіолізу для$крекінгу та стерилізації. +desc.gui.rtgBFurnace.desc=Для роботи потрібно принаймні 15 тепла$Чим більше тепла, тим швидше він працює$Нагрівання, що перевищує максимальну швидкість, не матиме жодного ефекту$Короткоживучі пелети можуть розкладатися +desc.gui.rtg.heat=§eПоточний рівень тепла: %s +desc.gui.rtg.pellets=Допустимі пелети: +desc.gui.rtg.pelletHeat=%s (%s тепла) +desc.gui.rtg.pelletPower=%s (%s HE/тік) +desc.gui.template=§9Шаблони§r$Шаблони можна створювати за$допомогою Папки шаблонів машин. +desc.gui.turbinegas.automode=§2Режим автоматичного дроселювання турбіни§r$Натиснувши кнопку "AUTO", турбіна$втоматично відрегулює виробництво електроенергії$на основі необхідної енергії в мережі +desc.gui.turbinegas.fuels=§6Допустимі види палива:§r +desc.gui.turbinegas.warning=§cНизький рівень палива або мастила!§r +desc.gui.zirnox.coolant=§3Охолодження§r$CO2 передає тепло від реактора до води.$Це скип'ятить її до надзвичайно гарячу пару$Ефективність охолодження та виробництва пари$залежить від тиску. +desc.gui.zirnox.pressure=§6Тиск§r$Тиск можна зменшити, випустивши CO2.$Однак занадто низький тиск призведе до зниження$ефективності охолодження та виробництва пари.$Остерігайтеся розплавлення! +desc.gui.zirnox.warning1=§cПомилка:§r Для нормальної роботи$реактора потрібна вода! +desc.gui.zirnox.warning2=§cПомилка:§r Для нормальної роботи$реактора потрібен CO2! + +desc.item.ammo.con_accuracy2=- Сильно знижена точність +desc.item.ammo.con_damage=- Сильно зменшена шкода +desc.item.ammo.con_heavy_wear=- Сильно підвищений знос +desc.item.ammo.con_ling_fire=- Немає затяжного вогню +desc.item.ammo.con_nn=- Навіть не ядерка +desc.item.ammo.con_no_damage=- No damage +desc.item.ammo.con_no_explode1=- Non-explosive +desc.item.ammo.con_no_explode2=- No block damage +desc.item.ammo.con_no_explode3=- No splash damage +desc.item.ammo.con_no_fire=- Not incendiary +desc.item.ammo.con_no_mirv=- Not recommended for the Proto MIRV +desc.item.ammo.con_no_projectile=- No projectile +desc.item.ammo.con_penetration=- Not penetrating +desc.item.ammo.con_radius=- Decreased blast radius +desc.item.ammo.con_range2=- Highly decreased range +desc.item.ammo.con_sing_projectile=- Single projectile +desc.item.ammo.con_speed=- Decreased projectile speed +desc.item.ammo.con_super_wear=- Very highly increased wear +desc.item.ammo.con_wear=- Increased wear +desc.item.ammo.neu_40mm=* It's a 40mm grenade that we squeezed to fit the barrel! +desc.item.ammo.neu_blank=* It's a blank +desc.item.ammo.neu_boat=* Boat +desc.item.ammo.neu_boxcar=* Boxcar +desc.item.ammo.neu_building=* Building +desc.item.ammo.neu_chlorophyte=* Chlorophyte +desc.item.ammo.neu_eraser=* For removing big mistakes +desc.item.ammo.neu_fun=* Fun for the whole family! +desc.item.ammo.neu_heavy_metal=* Heavy Metal +desc.item.ammo.neu_homing=* Homing +desc.item.ammo.neu_jolt=* Jolt +desc.item.ammo.neu_leadburster=* Attaches to surfaces and sprays bullets +desc.item.ammo.neu_less_bouncy=* Less bouncy +desc.item.ammo.neu_maskman_flechette=* Fires a tracer which summons a storm of DU-flechettes +desc.item.ammo.neu_maskman_meteorite=* Fires a high-damage round that summons a small meteorite +desc.item.ammo.neu_more_bouncy=* Extra bouncy +desc.item.ammo.neu_no_bounce=* Not bouncy +desc.item.ammo.neu_no_con=* No drawbacks lole +desc.item.ammo.neu_starmetal=* Starmetal +desc.item.ammo.neu_tracer=* Tracer +desc.item.ammo.neu_uhh=* Uhhh +desc.item.ammo.neu_warcrime1=* Technically a warcrime +desc.item.ammo.neu_warcrime2=* Twice the warcrime in a single round! +desc.item.ammo.pro_accurate1=+ Increased accuracy +desc.item.ammo.pro_accurate2=+ Near-perfect accuracy +desc.item.ammo.pro_balefire=+ Balefire +desc.item.ammo.pro_bomb_count=+ Increased bomb count +desc.item.ammo.pro_caustic=+ Caustic +desc.item.ammo.pro_chainsaw=+ Chainsaw +desc.item.ammo.pro_chlorine=+ Chlorine gas +desc.item.ammo.pro_damage=+ Increased damage +desc.item.ammo.pro_damage_slight=+ Above average damage +desc.item.ammo.pro_emp=+ EMP +desc.item.ammo.pro_explosive=+ Explosive +desc.item.ammo.pro_fallout=+ Fallout +desc.item.ammo.pro_fit_357=+ Fits every .357 model +desc.item.ammo.pro_flames=+ Increased flame count +desc.item.ammo.pro_gravity=+ Decreased gravity +desc.item.ammo.pro_heavy_damage=+ Highly increased damage +desc.item.ammo.pro_incendiary=+ Incendiary +desc.item.ammo.pro_lunatic=+ Lunatic +desc.item.ammo.pro_marauder=+ Instantly removes annoying and unbalanced enemies +desc.item.ammo.pro_mining=+ Explosion drops all blocks +desc.item.ammo.pro_no_gravity=+ Not affected by gravity +desc.item.ammo.pro_nuclear=+ Nuclear +desc.item.ammo.pro_penetration=+ Penetrating +desc.item.ammo.pro_percussion=+ Percussive blast +desc.item.ammo.pro_phosphorus=+ Induces phosphorus burns +desc.item.ammo.pro_phosphorus_splash=+ Phosphorus splash +desc.item.ammo.pro_poison_gas=+ Poison splash +desc.item.ammo.pro_radius=+ Increased blast radius +desc.item.ammo.pro_radius_high=+ Highly increased blast radius +desc.item.ammo.pro_range=+ Increased range +desc.item.ammo.pro_rocket=+ Rocket +desc.item.ammo.pro_rocket_propelled=+ Rocket Propelled +desc.item.ammo.pro_shrapnel=+ Shrapnel +desc.item.ammo.pro_speed=+ Increased projectile speed +desc.item.ammo.pro_stunning=+ Stunning +desc.item.ammo.pro_toxic=+ Toxic +desc.item.ammo.pro_wear=+ Decreased wear +desc.item.ammo.pro_withering=+ Withering +desc.item.armorMod.display=відобразити встановлені модифікації броні +desc.item.battery.charge=Заряд: %s / %sHE +desc.item.battery.chargePerc=Заряд: %s%% +desc.item.battery.chargeRate=Швидкість заряджання: %sHE/тік +desc.item.battery.dischargeRate=Швидкість розряджання: %sHE/тік +desc.item.durability=Міцність: %s +desc.item.grenade.fuse=Затримка: %s +desc.item.grenade.fuseImpact=Зіткнення +desc.item.grenade.fuseInstant=Миттєво +desc.item.gun.ammo=Боєприпаси %s +desc.item.gun.ammoBelt=Стрічка +desc.item.gun.ammoEnergy=Енергія; %sHE за постріл +desc.item.gun.ammoEnergyAlt=%sHE за альтернативний постріл +desc.item.gun.ammoMag=%s / %s +desc.item.gun.ammoType=Тип боєприпасів: %s +desc.item.gun.ammoTypeAlt=Вторинні боєприпаси: %s +desc.item.gun.damage=Шкода: %s - %s +desc.item.gun.damageAlt=Шкода: %s +desc.item.gun.lore=щоб переглянути більш глибокий лор +desc.item.gun.loreFunc=щоб переглянути більш детальний функціонал +desc.item.gun.manufacturer=Виробник: %s +desc.item.gun.name=Назва: %s +desc.item.gun.pellets=Снаряди: %s - %s +desc.item.gun.penetration=Значення пробиття броні: %s +desc.item.kitArmor=Броня буде замінена новим комплектом. +desc.item.kitHaz=Броня буде замінена захисним костюмом. +desc.item.kitPack=Яка вигідна угода! +desc.item.kitPool=Будь ласка, звільніть інвентар перед відкриттям! +desc.item.pileRod=§eВикористовуйте на просвердленому графіті для вставки$§eВикористовуйте викрутку, щоб вийняти$ +desc.item.pipette.corrosive=Може впоратися з корозійними рідинами. +desc.item.pipette.laboratory=Тепер із 50-кратною точністю! +desc.item.pipette.noCorrosive=§eНе може впоратися з корозійними рідинами. +desc.item.pipette.noEmpty=§eПіпетка не порожня! +desc.item.rtgDecay=Розпадається на: %s +desc.item.rtgHeat=Рівень потужності: %s +desc.item.storage.capacity=Ємність %s%%s +desc.item.storage.proscons=щоб переглянути список плюсів і мінусів +desc.misc.357=.357 Magnum +desc.misc.556=.223 Remington +desc.misc.762=.308 Winchester +desc.misc.func=§n-- Функція -- +desc.misc.lanthanum="Лантан" +desc.misc.lctrl=§8Утримуйте <§e§oLCTRL§8§o> %s +desc.misc.lore=§n-- Лор -- +desc.misc.lshift=§8Утримуйте <§e§oLSHIFT§8§o> %s +desc.misc.luna=§o20x155mm Lunatic +desc.misc.meltPoint=Точка плавлення: §c%s +desc.misc.noPos=Позиція не встановлена! +desc.misc.pos=Позиція встановлена на: %s, %s, %s +desc.misc.posSet=Позиція встановлена! +desc.item.wasteCooling=Охолодити в Контейнері охолодження відпрацьованого палива +desc.item.zirnoxBreedingRod=§2[Розмножувальний стрижень ЦИРНОКС]$§eРозмістіть поруч паливні стрижні для розмноження$§eТривалість роботи %d тіків +desc.item.zirnoxRod=§a[Паливний стрижень ЦИРНОКС]$§eГенерує %1$d тепла за тік$§eТривалість роботи %2$d тіків + +digamma.playerDigamma=Digamma exposure: +digamma.playerHealth=Digamma influence: +digamma.playerRes=Digamma resistance: +digamma.title=DIGAMMA DIAGNOSTIC + +entity.entity_cyber_crab.name=Кіберкраб +entity.entity_elder_one.name=Крякос Старший +entity.entity_fucc_a_ducc.name=Качка +entity.entity_glyphid.name=Гліфід +entity.entity_glyphid_behemoth.name=Гліфід Бегемот +entity.entity_glyphid_blaster.name=Гліфід Бластер +entity.entity_glyphid_bombardier.name=Гліфід Бомбардир +entity.entity_glyphid_brawler.name=Гліфід Боєць +entity.entity_glyphid_brenda.name=Бренда +entity.entity_glyphid_digger.name=Гліфід Копач +entity.entity_glyphid_nuclear.name=Великий Джонсон +entity.entity_glyphid_scout.name=Гліфід Розвідник +entity.entity_ntm_fbi.name=Агент ФБР +entity.entity_ntm_fbi_drone.name=Дрон ФБР +entity.entity_ntm_radiation_blaze.name=Елементаль Розплавлення +entity.hbm.entity_ntm_ufo.name=Марсіанький корабель НЛО +entity.entity_mob_hunter_chopper.name=Гвинтокрил Мислиивець +entity.entity_mob_mask_man.name=Маскмен +entity.entity_mob_gold_creeper.name=Золотий Кріпер +entity.entity_mob_nuclear_creeper.name=Ядерний Кріпер +entity.entity_mob_phosgene_creeper.name=Фосгений Кріпер +entity.entity_mob_tainted_creeper.name=Інфікований Кріпер +entity.entity_mob_volatile_creeper.name=Шлаковий Кріпер +entity.entity_parasite_maggot.name=Паразитична личинка +entity.entity_pigeon.name=Голуб +entity.entity_plastic_bag.name=Пластиковий пакет +entity.entity_taint_crab.name=Інфікований Краб +entity.entity_tesla_crab.name=Тесла Краб +entity.hbm.entity_balls_o_tron.name=Баллс-О-Трон Прайм +entity.hbm.entity_balls_o_tron_seg.name=Баллс-О-Трон Сегмент +entity.hbm.entity_bullet.name=Куля +entity.hbm.entity_rocket.name=Ракета +entity.hbm.entity_schrabnel.name=Шрапнель + +excavator.crusher=Перемикач подрібнювача +excavator.drill=перемикач бура +excavator.silktouch=Перемикач шовкового дотику +excavator.veinminer=Перемикач жилкового майнера +excavator.walling=Перемикач будівництва стін + +flare.ignition=Запалювання +flare.valve=Перепускний клапан + +fluid.acid_fluid=Кислота +fluid.corium_fluid=Коріум +fluid.mud_fluid=Токсичні відходи +fluid.rad_lava_fluid=Радіоактивна вулканічна лава +fluid.schrabidic_fluid=Шрабідієва кислота +fluid.toxic_fluid=Стереотипний зелений слиз +fluid.volcanic_lava_fluid=Вулканічна лава + +foundry.filter=Фільтр %s +foundry.inverted=Редстоун інвертований +foundry.invertFilter=Фільтр інвертований +foundry.noCast=Форма не встановлена! + +geiger.chunkRad=Поточний рівень радіації в чанку: +geiger.envRad=Загальний рівень радіації довкілля: +geiger.playerRad=Рівень опромінення гравця: +geiger.playerRes=Рівень захищеності гравця: +geiger.title=ЛІЧИЛЬНИК ГЕЙГЕРА +geiger.title.dosimeter=ДОЗИМЕТР + +gun.make.ARMALITE=Armalite +gun.make.AUTO_ORDINANCE=Auto-Ordnance Corporation +gun.make.BAE=BAE Systems plc +gun.make.BENELLI=Benelli Armi SpA +gun.make.BLACK_MESA=Black Mesa Research Facility +gun.make.CERIX=Cerix Magnus +gun.make.COLT=Colt's Manufacturing Company +gun.make.COMBINE=The Universal Union +gun.make.CUBE=Cube 2: Sauerbraten +gun.make.DRG=Deep Rock Galactic +gun.make.ENZINGER=Enzinger Union +gun.make.EQUESTRIA=Equestria Missile Systems +gun.make.FLIMFLAM=FlimFlam Industries +gun.make.F_STRONG=Fort Strong +gun.make.GLORIA=Gloria GmbH +gun.make.HASBRO=Hasbro +gun.make.H_AND_K=Heckler & Koch +gun.make.H_AND_R=Harrington & Richardson +gun.make.IF=Ironshod Firearms +gun.make.IMI=Israel Military Industries +gun.make.IMI_BIGMT=IMI / Big MT +gun.make.LANGFORD=Langford Research Laboratories +gun.make.LUNA=Lunar Defense Corp +gun.make.MAGNUM_R_IMI=Magnum Research / Israel Military Industries +gun.make.MANN=Open Mann Co. +gun.make.MAXIM=Hiram Maxim +gun.make.METRO=Metro Gunsmiths +gun.make.MWT=MWT Prototype Labs +gun.make.NAWS=Kayarm Industries +gun.make.ERFURT=Erfurter Maschinenfabrik Geipel +gun.make.NONE=- +gun.make.RAYTHEON=Raytheon Missile Systems +gun.make.REMINGTON=Remington Arms +gun.make.ROCKWELL=Rockwell International Corporation +gun.make.ROCKWELL_U=Rockwell International Corporation? +gun.make.RYAN=Ryan Industries +gun.make.SAAB=Saab Bofors Dynamics +gun.make.SACO=Saco Defense / US Ordnance +gun.make.TULSKY=Tulsky Oruzheiny Zavod +gun.make.UAC=Union Aerospace Corporation +gun.make.UNKNOWN=??? +gun.make.WESTTEK=WestTek +gun.make.WGW=Wilhelm-Gustloff-Werke +gun.make.WINCHESTER=Winchester Repeating Arms Company +gun.make.WINCHESTER_BIGMT=Winchester Repeating Arms Company / Big MT + +gun.name.ar15_50=AR-15 .50 BMG Mod +gun.name.baeAR=Britannian Standard Issue Assault Rifle +gun.name.bel=Balefire Egg Launcher +gun.name.benelli=Benelli M4 Super 90 +gun.name.benelliDrum=Benelli M4 Super 90 (Drum Magazine Modification) +gun.name.bio=RI No. 2 Mark 1 +gun.name.bolter=Manticora Pattern Boltgun +gun.name.congoLake=Congo Lake Pump-Action Grenade Launcher +gun.name.cPython=Colt Python +gun.name.cz53=CZ53 Personal Minigun +gun.name.cz57=CZ57 Avenger Minigun +gun.name.dart=Needle Gun +gun.name.deagle=IMI Desert Eagle +gun.name.emp=EMP Orb Projector +gun.name.extinguisher=PROTEX Fire Exinguisher 6kg +gun.name.ffiV=FFI Viper +gun.name.ffiVInox=FFI Viper Inox +gun.name.ffiVLead=FFI Viper Lead +gun.name.ffiVN1=FFI Viper N1 +gun.name.ffiVN2=FFI Viper N2 +gun.name.ffiVUltra=FFI Viper Ultra +gun.name.ffivBling=FFI Viper Bling +gun.name.ffivSatur=FFI Viper D-25A +gun.name.g36=Heckler & Koch Gewehr 36 +gun.name.gPistol=Granatpistole HK69 +gun.name.gustav=Carl Gustav Recoilless Rifle M1 +gun.name.ifHorseshoe=IF-18 Horseshoe +gun.name.ifPit=IF-18 Horseshoe Bottomless Pit +gun.name.ifScope=IF-18 Horseshoe Scoped +gun.name.ifStorm=IF-18 Horseshoe Silver Storm +gun.name.ifVanity=IF-18 Horseshoe Vanity +gun.name.karl=M1 Karl-Gerät +gun.name.ks23=KS-23 +gun.name.lacunae=Auntie Lacunae +gun.name.lasetDet=Hopeville Laser Detonator +gun.name.lunaAR=1986 Bishamonten type Assault Rifle +gun.name.lunaGun=1978 Rāhula type Standard Issue Sidearm (Revision 2) +gun.name.lunaHLR=1944 Chang'e type Light Machine Gun +gun.name.lunaShotty=1978 Guan Yu type Scattergun (Revision 1) +gun.name.lunaSMG=1956 Ānanda type Submachine Gun +gun.name.lunaSniper=1915 Hou Yi type Anti-Material Rifle +gun.name.lunaTWR=Time Warp Rifle +gun.name.m2=Browning machine gun, cal. .50, M2, HB +gun.name.m42=M-42 Tactical Nuclear Catapult +gun.name.m42MIRV=M-42 Experimental MIRV +gun.name.m60=Machine Gun, Caliber 7.62 mm, M60 +gun.name.maxim=Maxim gun +gun.name.maximDouble=Double Maxim gun +gun.name.mg3=Universal-Maschinengewehr Modell 3 +gun.name.mp40=Maschinenpistole 40 +gun.name.nerf=NERF blaster of unknown design +gun.name.osipr=Overwatch Standard Issue Pulse Rifle +gun.name.panz=Raketenpanzerbüchse 54 +gun.name.quadro=OpenQuadro Guided Man-Portable Missile Launcher +gun.name.remington870=Remington 870 +gun.name.revolverCursed=Britannia Standard Issue Motorized Handgun +gun.name.sauer=Sauer Shotgun +gun.name.spas12=Franchi SPAS-12 +gun.name.spiw=H&R SPIW +gun.name.stinger=FIM-92 Stinger man-portable air-defense system +gun.name.stingerOneSky=The One Sky Stinger +gun.name.supershotty=Double-Barreled Combat Shotgun +gun.name.tau=XVL1456 Tau Cannon +gun.name.tommy9=M1A1 Submachine Gun 9mm Mod +gun.name.tommy=M1A1 Submachine Gun +gun.name.topaz=Heavy Duty Flamer +gun.name.uacCarbine=UAC-41 Carbine +gun.name.uacDeagle=UAC-H54 "Martian Raptor" Automag +gun.name.uacDMR=UAC-30 Designated Marksman Rifle +gun.name.uacLMG=UAC-49 Light Machine Gun +gun.name.uacPistol=UAC-B950 .45 Standard Issue Handgun +gun.name.uacSMG=UAC-17 Compact Sub-Machine Gun +gun.name.uboinik=Uboinik Revolving Shotgun +gun.name.uzi=IMI Uzi +gun.name.uziSatur=IMI Uzi D-25A +gun.name.win1887=Winchester Model 1887 +gun.name.win1887Inox=Winchester Model 1887 Inox +gun.name.win20Inox=Winchester Model 20 Inox +gun.name.win20Poly=Winchester Model 20 Polymer +gun.name.win20Satur=Winchester Model 20 D-25A +gun.name.zomg=EMC101 Prismatic Negative Energy Cannon + +hadron.analysis=Аналіз... +hadron.buttonOn=Аналітична камера (якщо є) УВІМКНЕНА +hadron.buttonOff=Аналітична камера ВИМКНЕНА +hadron.error_generic=Помилка! +hadron.error_no_charge=Error 0x01 [NC] +hadron.error_no_analysis=Error 0x02 [NA] +hadron.error_obstructed_channel=Error 0x03 [OC] +hadron.error_expected_coil=Error 0x04 [EC] +hadron.error_malformed_segment=Error 0x05 [MS] +hadron.error_analysis_too_long=Error 0x06 [ATL] +hadron.error_analysis_too_short=Error 0x07 [ATS] +hadron.error_diode_collision=Error 0x08 [DC] +hadron.error_branching_turn=Error 0x09 [BT] +hadron.hopper0=§eNormal Mode:$All items will be used. +hadron.hopper1=§eHopper Mode:$One item will always remain. +hadron.hopper2=§eSingle Mode:$Only allows one item per slot. +hadron.idle=Idle +hadron.modeCircular=§eCircular Accelerator Mode:$Magnets must loop back into core.$Unlocks more recipes. +hadron.modeLine=§eLinear Accelerator Mode:$Accelerator ends with analysis chamber.$Fewer Recipes. +hadron.noresult=No Result. +hadron.noresult_too_slow=Insuff. momentum! +hadron.noresult_wrong_ingredient=Invalid recipe! +hadron.noresult_wrong_mode=Wrong mode! +hadron.progress=In Progress... +hadron.stats=Previous results: +hadron.stats_coord=Erroring position: %s / %s / %s +hadron.stats_momentum=Momentum: %s +hadron.success=Completed! + +hazard.prot=Захищає від небезпек: +hazard.noprot=Не захищає від: +hazard.bacteria=Бактерій / Аерозолів +hazard.corrosive=Їдких випаровувань +hazard.gasChlorine=Хімічних газів +hazard.gasInert=Інертних газів / Задушливих речовин +hazard.gasMonoxide=Чадного газу +hazard.light=Яскравих спалахів +hazard.nerveAgent=Нервово-паралітичних бойових отруйних речовин +hazard.neverProtects=Ніколи не захищає від: +hazard.particleCoarse=Частинок в повітрі +hazard.particleFine=Твердих часток +hazard.sand=Подразників очей + +hbm.key=NTM Hotkeys +hbm.key.calculator=Calculator +hbm.key.copyToolAlt=Copy Tool: Switch Paste +hbm.key.copyToolCtrl=Copy Tool: Paste to Pipes +hbm.key.craneLoad=Load/Unload Crane +hbm.key.craneMoveDown=Move Crane Backward +hbm.key.craneMoveLeft=Move Crane Left +hbm.key.craneMoveRight=Move Crane Right +hbm.key.craneMoveUp=Move Crane Forward +hbm.key.dash=Dash +hbm.key.gunPrimary=Primary Fire +hbm.key.gunSecondary=Secondary Fire +hbm.key.gunTertitary=Gun Sights +hbm.key.toggleBack=Toggle Jetpack +hbm.key.toggleHUD=Toggle HUD +hbm.key.trainInv=Train Inventory +hbm.key.reload=Reload + +hbmfluid.air=Стиснене повітря +hbmfluid.alumina=Оксид алюмінію +hbmfluid.amat=Антиматерія +hbmfluid.aromatics=Ароматичні вуглеводні +hbmfluid.aschrab=Антишрабідій +hbmfluid.balefire=Ракетне BF паливо +hbmfluid.bauxite_solution=Розчин бокситу +hbmfluid.biofuel=Біопаливо +hbmfluid.biogas=Біогаз +hbmfluid.bitumen=Бітум +hbmfluid.blood=Кров +hbmfluid.blood_hot=Гаряча кров +hbmfluid.calcium_chloride=Розчин хлориду кальцію +hbmfluid.calcium_solution=Розчин кальцію +hbmfluid.carbondioxide=Вуглекислий газ +hbmfluid.chlorine=Хлорний газ +hbmfluid.chlorocalcite_cleaned=Очищений розчин хлорокальциту +hbmfluid.chlorocalcite_mix=Змішаний розчин хлорокальциту +hbmfluid.chlorocalcite_solution=Розчин хлорокальциту +hbmfluid.cholesterol=Розчин холестерину +hbmfluid.coalcreosote=Креозот з вугільної смоли +hbmfluid.coalgas=Вугільний бензин +hbmfluid.coalgas_leaded=Етильований вугільний бензин +hbmfluid.coaloil=Скраплене вугілля +hbmfluid.colloid=Колоїд +hbmfluid.coolant=Охолоджувальна рідина +hbmfluid.coolant_hot=Гаряча охолоджувальна рідина +hbmfluid.crackoil=Крекінгова нафта +hbmfluid.crackoil_ds=Десульфурована крекінгова нафта +hbmfluid.cryogel=Кріогель +hbmfluid.death=Розчин осмистого іридію +hbmfluid.deuterium=Дейтерій +hbmfluid.diesel=Дизель +hbmfluid.diesel_crack=Крекінговий дизель +hbmfluid.diesel_crack_reform=Високооктановий крекінговий дизель +hbmfluid.diesel_reform=Високооктановий дизель +hbmfluid.egg=Розчинене яйце +hbmfluid.estradiol=Розчин естрадіолу +hbmfluid.ethanol=Етанол +hbmfluid.enderjuice=Енд Сік +hbmfluid.fishoil=Риб'ячий жир +hbmfluid.fracksol=Розчин для гідророзриву пласта +hbmfluid.fullerene=Розчин фулерену +hbmfluid.gas=Природний газ +hbmfluid.gas_coker=Коксовий газ +hbmfluid.gasoline=Газолін +hbmfluid.gasoline_leaded=Етильований газолін +hbmfluid.heatingoil=Мазут +hbmfluid.heatingoil_vacuum=Важкий мазут +hbmfluid.heavyoil=Важка нафта +hbmfluid.heavyoil_vacuum=Вакуумна важка нафта +hbmfluid.heavywater=Важка вода +hbmfluid.heavywater_hot=Гаряча важка вода +hbmfluid.helium3=Гелій-3 +hbmfluid.helium4=Гелій-4 +hbmfluid.hotcrackoil=Гаряча крекінгова нафта +hbmfluid.hotcrackoil_ds=Десульфурована гаряча крекінгова нафта +hbmfluid.hotoil=Гаряча сира нафта +hbmfluid.hotoil_ds=Десульфурована гаряча сира нафта +hbmfluid.hotsteam=Гаряча пара +hbmfluid.hydrogen=Рідкий водень +hbmfluid.iongel=Іонний гель +hbmfluid.kerosene=Гас +hbmfluid.kerosene_reform=Реактивне паливо +hbmfluid.lava=Лава +hbmfluid.lead=Рідкий свинець +hbmfluid.lead_hot=Гарячий рідкий свинець +hbmfluid.lightoil=Легка нафта +hbmfluid.lightoil_crack=Крекінгова легка нафта +hbmfluid.lightoil_ds=Десульфурована легка нафта +hbmfluid.lightoil_vacuum=Вакуумна легка нафта +hbmfluid.lpg=Скраплений нафтовий газ (СНГ) +hbmfluid.lubricant=Машинна олива +hbmfluid.lye=Луг +hbmfluid.mercury=Ртуть +hbmfluid.mug=Пиво "Кухоль кореневого" +hbmfluid.mug_hot=Гаряче пиво "Кухоль кореневого"" +hbmfluid.mustardgas=Іприт +hbmfluid.naphtha=Лігроїн +hbmfluid.naphtha_coker=Коксовий лігроїн +hbmfluid.naphtha_crack=Крекінговий лігроїн +hbmfluid.naphtha_ds=Десульфурований лігроїн +hbmfluid.nitan=NITAN© 100-октанове суперпаливо +hbmfluid.nitric_acid=Азотна кислота +hbmfluid.nitroglycerin=Нітрогліцерин +hbmfluid.none=Нічого +hbmfluid.oil=Сира нафта +hbmfluid.oil_coker=Коксова нафта +hbmfluid.oil_ds=Десульфурована сира нафта +hbmfluid.oxygen=Рідкий кисень +hbmfluid.oxyhydrogen=Гримучий газ +hbmfluid.pain=Розчин Пандемоніум(III)танталу +hbmfluid.perfluoromethyl=Перфторметил +hbmfluid.perfluoromethyl_cold=Холодний перфторметил +hbmfluid.perfluoromethyl_hot=Гарячий перфторметил +hbmfluid.peroxide=Перекис водню +hbmfluid.petroil=Бензин +hbmfluid.petroil_leaded=Етильований бензин +hbmfluid.petroleum=Нафтовий газ +hbmfluid.pheromone=Феромон-бустер +hbmfluid.pheromone_m=Модифікований феромон-бустер +hbmfluid.phosgene=Фосген +hbmfluid.plasma_bf=BF плазма +hbmfluid.plasma_dh3=Дейтерій-гелій-3 плазма +hbmfluid.plasma_dt=Дейтерій-тритієва плазма +hbmfluid.plasma_hd=Воднево-дейтерієва плазма +hbmfluid.plasma_ht=Воднево-тритієва плазма +hbmfluid.plasma_xm=Гелій-4-киснева плазма +hbmfluid.potassium_chloride=Розчин хлориду калію +hbmfluid.puf6=Гексафторид плутонію PuF6 +hbmfluid.radiosolvent=Високоефективний розчинник +hbmfluid.reclaimed=Очищена промислова олива +hbmfluid.redmud=Червоний шлам +hbmfluid.reformate=Реформоване паливо +hbmfluid.reformgas=Реформований газ +hbmfluid.salient=Зелений салієнт +hbmfluid.sas3=Трисульфід шрабідію +hbmfluid.schrabidic=Шрабідієва кислота +hbmfluid.seedslurry=Посівна суспензія +hbmfluid.slop=Рудний шлам +hbmfluid.smear=Промислова олива +hbmfluid.smoke=Дим +hbmfluid.smoke_leaded=Свинцевий дим +hbmfluid.smoke_poison=Отруйний дим +hbmfluid.sodium=Рідкий натрій +hbmfluid.sodium_hot=Гарячий рідкий натрій +hbmfluid.sodium_aluminate=Алюмінат натрію +hbmfluid.solvent=Розчинник +hbmfluid.sourgas=Сірководень +hbmfluid.spentsteam=Пара низького тиску +hbmfluid.steam=Пара +hbmfluid.stellar_flux=Зоряний флюс +hbmfluid.sulfuric_acid=Сірчана кислота +hbmfluid.sunfloweroil=Соняшникова олія +hbmfluid.superhotsteam=Надзвичайно гаряча пара +hbmfluid.syngas=Вугільний сінтгаз +hbmfluid.thorium_salt=Рідка торієва сіль +hbmfluid.thorium_salt_depleted=Збіднена рідка торієва сіль +hbmfluid.thorium_salt_hot=Гаряча рідка торієва сіль +hbmfluid.tritium=Тритій +hbmfluid.uf6=Гексафторид урану UF6 +hbmfluid.ultrahotsteam=Розпечена пара +hbmfluid.unsaturateds=Ненасичені вуглеводні +hbmfluid.vitriol=Купорос +hbmfluid.wastefluid=Рідкі ядерні відходи +hbmfluid.wastegas=Газоподібні ядерні відходи +hbmfluid.water=Вода +hbmfluid.watz=Токсичні відходи +hbmfluid.woodoil=Деревна смола +hbmfluid.xenon=Ксеноновий газ +hbmfluid.xpjuice=Сік досвіду +hbmfluid.xylene=Алкілбензени (Бензен-Толуен-Ксилен BTX) + +hbmpseudofluid.none=Порожньо +hbmpseudofluid.heuf6=Високозбагачений UF6 +hbmpseudofluid.meuf6=Середньозбагачений UF6 +hbmpseudofluid.leuf6=Низькозбагачений UF6 +hbmpseudofluid.nuf6=Натуральний UF6 +hbmpseudofluid.pf6=Гексафторид плутонію PuF6 +hbmpseudofluid.mud_heavy=Фракція важкого шламу +hbmpseudofluid.mud=Отруйний шламовий газ + +hbmmat.actinium227=Актиній-227 +hbmmat.advancedalloy=Удосконалений сплав +hbmmat.aluminum=Алюміній +hbmmat.americiumrg=Реакторний Америцій +hbmmat.americium241=Америцій-241 +hbmmat.americium242=Америцій-242 +hbmmat.arsenic=Миш'як +hbmmat.arsenicbronze=Миш'якова бронза +hbmmat.asbestos=Азбест +hbmmat.bakelite=Карболіт +hbmmat.bauxite=Боксит +hbmmat.beryllium=Берилій +hbmmat.bismuth=Вісмут +hbmmat.bismuthbronze=Вісмутова бронза +hbmmat.bone=Слонова кістка +hbmmat.borax=Бура +hbmmat.boron=Бор +hbmmat.bscco=Вісмут стронцій кальцій мідь оксид (BSCCO) +hbmmat.cadmium=Кадмій +hbmmat.calcium=Кальцій +hbmmat.carbon=Вуглець +hbmmat.cdalloy=Кадмієва сталь +hbmmat.chlorocalcite=Хлорокальцит +hbmmat.cinnabar=Кіновар +hbmmat.cmbsteel=Сталь комбайнів +hbmmat.coal=Вугілля +hbmmat.coalcoke=Вугільний кокс +hbmmat.cobalt=Кобальт +hbmmat.cobalt60=Кобальт-60 +hbmmat.coltan=Колтан +hbmmat.copper=Мідь +hbmmat.cryolite=Кріоліт +hbmmat.desh=Деш +hbmmat.diamond=Алмаз +hbmmat.dineutronium=Динейтроній +hbmmat.durasteel=Швидкорізальна сталь +hbmmat.emerald=Смарагд +hbmmat.euphemium=Юхимій +hbmmat.ferrouranium=Фероуран +hbmmat.fiberglass=Скловолокно +hbmmat.fluorite=Флюорит +hbmmat.flux=Флюс +hbmmat.ghiorsium336=Ґіорсій-336 +hbmmat.gold=Золото +hbmmat.gold198=Золото-198 +hbmmat.graphene=Графен +hbmmat.graphite=Графіт +hbmmat.gunmetal=Гарматної бронзи +hbmmat.hematite=Гематит +hbmmat.iron=Залізо +hbmmat.lanthanum=Лантан +hbmmat.lapis=Лазурит +hbmmat.lead=Свинець +hbmmat.lead209=Свинець-209 +hbmmat.lignitecoke=Буровугільний кокс +hbmmat.lignite=Буре вугілля +hbmmat.lithium=Літій +hbmmat.magnetizedtungsten=Намагнічений вольфрам +hbmmat.malachite=Малахіт +hbmmat.meteoriciron=Метеоритне залізо +hbmmat.mingrade=Червона мідь +hbmmat.molysite=Трихлорид заліза +hbmmat.neodymium=Неодим +hbmmat.neptunium237=Нептуній-237 +hbmmat.niobium=Ніобій +hbmmat.obsidian=Обсидіан +hbmmat.osmiridium=Осмистий іридій +hbmmat.petcoke=Нафтовий кокс +hbmmat.pigiron=Чавун +hbmmat.plutonium=Плутоній +hbmmat.plutonium238=Плутоній-238 +hbmmat.plutonium239=Плутоній-239 +hbmmat.plutonium240=Плутоній-240 +hbmmat.plutonium241=Плутоній-241 +hbmmat.plutoniumrg=Реакторний Плутоній +hbmmat.polonium210=Полоній-210 +hbmmat.polycarbonate=Твердий пластик +hbmmat.polymer=Полімер +hbmmat.pvc=Полівінілхлорид +hbmmat.radium226=Радій-226 +hbmmat.rareearth=Рідкоземельні +hbmmat.redphosphorus=Червоний фосфор +hbmmat.redstone=Редстоун +hbmmat.rubber=Гума +hbmmat.saltpeter=Нітрат калію +hbmmat.saturnite=Сатурніт +hbmmat.schrabidate=Ферошрабідат +hbmmat.schrabidium=Шрабідій +hbmmat.schraranium=Шрараній +hbmmat.silicon=Кремній +hbmmat.slag=Шлак +hbmmat.sodalite=Содаліт +hbmmat.sodium=Натрій +hbmmat.solinium=Соліній +hbmmat.starmetal=Зірковий метал +hbmmat.steel=Сталь +hbmmat.stone=Камінь +hbmmat.strontium=Стронцій +hbmmat.sulfur=Сірка +hbmmat.tantalum=Тантал +hbmmat.tcalloy=Технецієва сталь +hbmmat.technetium99=Технецій-99 +hbmmat.titanium=Титан +hbmmat.thorium232=Торій-232 +hbmmat.tungsten=Вольфрам +hbmmat.uranium=Уран +hbmmat.uranium233=Уран-233 +hbmmat.uranium235=Уран-235 +hbmmat.uranium238=Уран-238 +hbmmat.watzmud=Токсичні відходи +hbmmat.weaponsteel=Збройова сталь +hbmmat.whitephosphorus=Білий фосфор +hbmmat.wood=Дерево +hbmmat.workersalloy=Деш +hbmmat.wroughtiron=Коване залізо +hbmmat.zirconium=Цирконій + +matshape.block=%s Блок +matshape.blocks=%s Блоки +matshape.ingot=%s Зливок +matshape.ingots=%s Зливки +matshape.nugget=%s Самородок +matshape.nuggets=%s Самородки +matshape.quantum=%s Квант +matshape.quanta=%s Кванта + +icffuel.beryllium=Берилій +icffuel.boron=Бор +icffuel.carbon=Вуглець +icffuel.calcium=Кальцій +icffuel.chlorine=Хлор +icffuel.deuterium=Дейтерій +icffuel.helium3=Гелій-3 +icffuel.helium4=Гелій-4 +icffuel.hydrogen=Водень +icffuel.lithium=Літій +icffuel.oxygen=Кисень +icffuel.sodium=Натрій +icffuel.tritium=Тритій + +info.asbestos=Мої легені горять. +info.coaldust=Тут важко дихати. +info.coil=Сила котушки +info.templatefolder=Створено за допомогою %s +info.template_in=Ввід: +info.template_in_p=Вводи: +info.template_out=Вивід: +info.template_out_p=Виводи: +info.template_seconds=секунд +info.template_time=Час виробництва: + +item.acetylene_torch.name=Ацетиленовий зварювальний пальник +item.ajr_boots.name= Чоботи Стальних Ренджерів +item.ajr_helmet.name=Шолом Стальних Ренджерів +item.ajr_legs.name=Наголінники Стальних Ренджерів +item.ajr_plate.name=Нагрудник Стальних Ренджерів +item.ajro_boots.name=Чоботи Ренджерів Еплджек +item.ajro_helmet.name=Шолом Ренджерів Еплджек +item.ajro_legs.name=Наголінники Ренджерів Еплджек +item.ajro_plate.name=Нагрудник Ренджерів Еплджек +item.alloy_axe.name=Сокира з удосконаленого сплаву +item.alloy_boots.name=Чоботи з удосконаленого сплаву +item.alloy_helmet.name=Шолом з удосконаленого сплаву +item.alloy_hoe.name=Мотика з удосконаленого сплаву +item.alloy_legs.name=Наголінники з удосконаленого сплаву +item.alloy_pickaxe.name=Кайло з удосконаленого сплаву +item.alloy_plate.name=Нагрудник з удосконаленого сплаву +item.alloy_shovel.name=Лопата з удосконаленого сплаву +item.alloy_sword.name=Меч з удосконаленого сплаву +item.ammo_arty.name=16" артилерійський снаряд +item.ammo_arty_cargo.name=16" артилерійський снаряд експрес-доставки +item.ammo_arty_chlorine.name=16" хлорний артилерійський снаряд +item.ammo_arty_classic.name=16" артилерійський снаряд (The Factorio Special) +item.ammo_arty_he.name=16" фугасний артилерійський снаряд +item.ammo_arty_mini_nuke.name=16" мікроядерний артилерійський снаряд +item.ammo_arty_mini_nuke_multi.name=16" мульти мікроядерний артилерійський снаряд +item.ammo_arty_mustard_gas.name=16" іпритний артилерійський снаряд +item.ammo_arty_nuke.name=16" ядерний артилерійський снаряд +item.ammo_arty_phosgene.name=16" фосгеновий артилерійський снаряд +item.ammo_arty_phosphorus.name=16" фосфорний артилерійський снаряд +item.ammo_arty_phosphorus_multi.name=16" мульти фосфорний артилерійський снаряд +item.ammo_bag.name=Сумка для боєприпасів +item.ammo_bag_infinite.name=Нескінченна сумка для боєприпасів +item.ammo_container.name=Контейнер для боєприпасів +item.ammo_dgk.name=Стрічка на 200 набоїв здвоєного ЗАК Голкіпер +item.ammo_fireext.name=Бак з водою для вогнегасника +item.ammo_fireext_foam.name=Бак з піною для вогнегасника +item.ammo_fireext_sand.name=Бак з піском для вогнегасника +item.ammo_himars_standard.name=227-мм керований артилерійський ракетний блок +item.ammo_himars_standard_he.name=227-мм керований артилерійський ракетний блок (Фугасний) +item.ammo_himars_standard_lava.name=227-мм керований артилерійський ракетний блок (Лава) +item.ammo_himars_standard_mini_nuke.name=227-мм керований артилерійський ракетний блок (Мікроядерний) +item.ammo_himars_standard_tb.name=227-мм керований артилерійський ракетний блок (Термобаричний) +item.ammo_himars_standard_wp.name=227-мм керований артилерійський ракетний блок (Білий фосфор) +item.ammo_himars_single.name=610-мм керований артилерійський ракетний блок +item.ammo_himars_single_tb.name=610-мм керований артилерійський ракетний блок (Термобаричний) +item.ammo_shell.name=240-мм снаряд +item.ammo_shell_apfsds_du.name=240-мм БОПС-ЗУ +item.ammo_shell_apfsds_t.name=240-мм БОПС-В +item.ammo_shell_explosive.name=240-мм фугасний снаряд +item.ammo_shell_w9.name=240-мм ядерний снаряд W9 +item.ammo_secret.bmg50_equestrian.name=.50 BMG Винищувач +item.ammo_secret.bmg50_black.name=.50 BMG обхідний набій +item.ammo_secret.folly_nuke.name=Срібна куля, ядерна +item.ammo_secret.folly_sm.name=Срібна куля +item.ammo_secret.g12_equestrian.name=Флешетний снаряд з залізничними цвяхами 12-го калібру +item.ammo_secret.m44_equestrian.name=.44 Magnum Череполом +item.ammo_secret.p35_800.name=.35-800 V9 +item.ammo_standard.b75.name=Болт .75 +item.ammo_standard.b75_exp.name=Болт .75 (Розривний) +item.ammo_standard.b75_inc.name=Болт .75 (Запальний) +item.ammo_standard.bmg50_ap.name=Набій .50 BMG (Бронебійний) +item.ammo_standard.bmg50_du.name=Набій .50 BMG (Збіднений уран) +item.ammo_standard.bmg50_he.name=Набій .50 BMG (Фугасний) +item.ammo_standard.bmg50_fmj.name=Набій .50 BMG (Суцільнометалева оболонка) +item.ammo_standard.bmg50_jhp.name=Набій .50 BMG (Експансивний) +item.ammo_standard.bmg50_sm.name=Набій .50 BMG (Зірковий метал) +item.ammo_standard.bmg50_sp.name=Набій .50 BMG (Напівоболонковй) +item.ammo_standard.capacitor.name=Конденсатор (Стандартний) +item.ammo_standard.capacitor_ir.name=Конденсатор (Низька довжина хвилі) +item.ammo_standard.capacitor_overcharge.name=Конденсатор (Перевантажений) +item.ammo_standard.coil_ferrouranium.name=Феруранова куля Гармати Гаусса +item.ammo_standard.coil_tungsten.name=Вольфрамова куля Гармати Гаусса +item.ammo_standard.ct_hook.name=Захоплюючий гак +item.ammo_standard.ct_mortar.name=Нищівний заряд +item.ammo_standard.ct_mortar_charge.name=Важкий нищівний заряд +item.ammo_standard.flame_balefire.name=Паливо вогнемету, BF +item.ammo_standard.flame_diesel.name=Паливо вогнемету, Дизель +item.ammo_standard.flame_gas.name=Паливо вогнемету, Природний газ +item.ammo_standard.flame_napalm.name=Паливо вогнемету, Напалм +item.ammo_standard.g10.name=Картеч 10-го калібру +item.ammo_standard.g10_du.name=Уранова картеч 10-го калібру +item.ammo_standard.g10_explosive.name=Вибухова картеч 10-го калібру +item.ammo_standard.g10_shrapnel.name=Шрапнельна картеч 10-го калібру +item.ammo_standard.g10_slug.name=Жекан 10-го калібру +item.ammo_standard.g12.name=Картеч 12-го калібру +item.ammo_standard.g12_anthrax.name=Снаряд сибірської язви 12-го калібру +item.ammo_standard.g12_bp.name=Картеч з чорним порохом 12-го калібру +item.ammo_standard.g12_bp_magnum.name=Картеч Magnum з чорним порохом 12-го калібру +item.ammo_standard.g12_bp_slug.name=Жекан з чорним порохом 12-го калібру +item.ammo_standard.g12_explosive.name=Розривний снаряд 12-го калібру +item.ammo_standard.g12_flechette.name=Флешетний снаряд 12-го калібру +item.ammo_standard.g12_magnum.name=Картеч Magnum 12-го калібру +item.ammo_standard.g12_phosphorus.name=Фосфорний снаряд 12-го калібру +item.ammo_standard.g12_slug.name=Жекан 12-го калібру +item.ammo_standard.g26_flare.name=26мм сигнальний флаєр +item.ammo_standard.g26_flare_supply.name=26мм сигнальний флаєр (Запит припасів) +item.ammo_standard.g26_flare_weapon.name=26мм сигнальний флаєр (Запит зброї) +item.ammo_standard.g40_demo.name=40-мм гранатометна граната, Руйнівна +item.ammo_standard.g40_he.name=40-мм гранатометна граната, Фугасна +item.ammo_standard.g40_heat.name=40-мм гранатометна граната, Кумулятивна +item.ammo_standard.g40_inc.name=40-мм гранатометна граната, Запальна +item.ammo_standard.g40_phosphorus.name=40-мм гранатометна граната, Білий фосфор +item.ammo_standard.m357_ap.name=Набій .357 Magnum (Бронебійний) +item.ammo_standard.m357_bp.name=Набій .357 Magnum (Чорний порох) +item.ammo_standard.m357_express.name=Набій .357 Magnum (Суцільнометалевий бронебійний) +item.ammo_standard.m357_fmj.name=Набій .357 Magnum (Суцільнометалева оболонка) +item.ammo_standard.m357_jhp.name=.Набій .357 Magnum (Експансивний) +item.ammo_standard.m357_sp.name=Набій .357 Magnum (Напівоболонковй) +item.ammo_standard.m44_ap.name=Набій .44 Magnum (Бронебійний) +item.ammo_standard.m44_bp.name=Набій .44 Magnum (Чорний порох) +item.ammo_standard.m44_express.name=Набій .44 Magnum (Суцільнометалевий бронебійний) +item.ammo_standard.m44_fmj.name=Набій .44 Magnum (Суцільнометалева оболонка) +item.ammo_standard.m44_jhp.name=Набій .44 Magnum (Експансивний) +item.ammo_standard.m44_sp.name=Набій .44 Magnum (Напівоболонковй) +item.ammo_standard.nuke_balefire.name=Ядерний мінізаряд, BF яйце +item.ammo_standard.nuke_demo.name=Ядерний мінізаряд, Руйнівний +item.ammo_standard.nuke_high.name=Ядерний мінізаряд, Потужний +item.ammo_standard.nuke_hive.name=Ракетний рій +item.ammo_standard.nuke_standard.name=Ядерний мінізаряд +item.ammo_standard.nuke_tots.name=Ядерний мінізаряд, Малютки +item.ammo_standard.p22_ap.name=Набій .22 LR (Бронебійний) +item.ammo_standard.p22_fmj.name=Набій .22 LR (Суцільнометалева оболонка) +item.ammo_standard.p22_jhp.name=Набій .22 LR (Експансивний) +item.ammo_standard.p22_sp.name=Набій .22 LR (Напівоболонковй) +item.ammo_standard.p45_ap.name=Набій .45 (Бронебійний) +item.ammo_standard.p45_du.name=Набій .45 (Збіднений уран) +item.ammo_standard.p45_fmj.name=Набій .45 (Суцільнометалева оболонка) +item.ammo_standard.p45_jhp.name=Набій .45 (Експансивний) +item.ammo_standard.p45_sp.name=Набій .45 (Напівоболонковй) +item.ammo_standard.p9_ap.name=Набій 9-мм (Бронебійний) +item.ammo_standard.p9_fmj.name=Набій 9-мм (Суцільнометалева оболонка) +item.ammo_standard.p9_jhp.name=Набій 9-мм (Експансивний) +item.ammo_standard.p9_sp.name=Набій 9-мм (Напівоболонковй) +item.ammo_standard.r556_ap.name=Набій 5.56-мм (Бронебійний) +item.ammo_standard.r556_fmj.name=Набій 5.56-мм (Суцільнометалева оболонка) +item.ammo_standard.r556_jhp.name=Набій 5.56-мм (Експансивний) +item.ammo_standard.r556_sp.name=Набій 5.56-мм (Напівоболонковй) +item.ammo_standard.r762_ap.name=Набій 7.62-мм (Бронебійний) +item.ammo_standard.r762_du.name=Набій 7.62-мм (Збіднений уран) +item.ammo_standard.r762_fmj.name=Набій 7.62-мм (Суцільнометалева оболонка) +item.ammo_standard.r762_he.name=Набій 7.62-мм (Фугасний) +item.ammo_standard.r762_jhp.name=Набій 7.62-мм (Експансивний) +item.ammo_standard.r762_sp.name=Набій 7.62-мм (Напівоболонковй) +item.ammo_standard.rocket_demo.name=Ракета, Руйнівна +item.ammo_standard.rocket_he.name=Ракета, Фугасна +item.ammo_standard.rocket_heat.name=Ракета, Кумулятивна +item.ammo_standard.rocket_inc.name=Ракета, Запальна +item.ammo_standard.rocket_phosphorus.name=Ракета, Білий фосфор +item.ammo_standard.stone.name=Куля та порох +item.ammo_standard.stone_ap.name=Кремінь та порох +item.ammo_standard.stone_iron.name=Залізна куля та порох +item.ammo_standard.stone_shot.name=Дріб та порох +item.ammo_standard.tau_uranium.name=Коробка із збідненим ураном-235 +item.ams_catalyst_aluminium.name=Алюмінієвий каталізатор реакції +item.ams_catalyst_beryllium.name=Берилієвий каталізатор реакції +item.ams_catalyst_blank.name=Порожній каталізатор реакції +item.ams_catalyst_caesium.name=Цезеєвий каталізатор реакції +item.ams_catalyst_cerium.name=Церієвий каталізатор реакції +item.ams_catalyst_cobalt.name=Кобальтовий каталізатор реакції +item.ams_catalyst_copper.name=Мідний каталізатор реакції +item.ams_catalyst_dineutronium.name=Динейтронієвий каталізатор реакції +item.ams_catalyst_euphemium.name=Юхимієвий каталізатор реакції +item.ams_catalyst_iron.name=Залізний каталізатор реакції +item.ams_catalyst_lithium.name=Літієвий каталізатор реакції +item.ams_catalyst_niobium.name=Ніобієвий каталізатор реакції +item.ams_catalyst_schrabidium.name=Шрабідієвий каталізатор реакції +item.ams_catalyst_strontium.name=Стронцієвий каталізатор реакції +item.ams_catalyst_thorium.name=Торієвий каталізатор реакції +item.ams_catalyst_tungsten.name=Вольфрамовий каталізатор реакції +item.ams_core_eyeofharmony.name=Око Гармонії (Ядро АМС/РТС) +item.ams_core_sing.name=Вібруюча сингулярність (Ядро АМС/РТС) +item.ams_core_thingy.name=Якась фігня (Ядро АМС/РТС) +item.ams_core_wormhole.name=Маленька червоточина (Ядро АМС/РТС) +item.ams_focus_blank.name=Blank Stabilizer Focus +item.ams_focus_booster.name=Boosting Stabilizer Focus +item.ams_focus_booster.desc=Weaker restriction field and core energy injection:$More heat generation, extra energy. +item.ams_focus_limiter.name=Limiting Stabilizer Focus +item.ams_focus_limiter.desc=Maximum performance for restriction field:$Standard cooling, no energy bonus. +item.ams_lens.name=Стабілізуюча лінза +item.ams_muzzle.name=Ray-Emission Muzzle +item.ams_muzzle.desc=...it emits an energy-beam thingy. +item.analysis_tool.name=Інструмент аналізу +item.analyzer.name=Аналізатор +item.anchor_remote.name=Пристрій повернення +item.apple_euphemium.name=Юхимієве яблуко +item.apple_lead.name=Свинцеве яблуко +item.apple_schrabidium.name=Шрабідієве яблуко +item.arc_electrode.name=Графітовий електрод +item.arc_electrode.desh.name=Деш електрод +item.arc_electrode.graphite.name=Графітовий електрод +item.arc_electrode.lanthanium.name=Лантановий електрод +item.arc_electrode.saturnite.name=Сатурнітовий електрод +item.arc_electrode_burnt.name=Розплавлений електрод +item.arc_electrode_burnt.desh.name=Розплавлений деш електрод +item.arc_electrode_burnt.graphite.name=Розплавлений графітовий електрод +item.arc_electrode_burnt.lanthanium.name=Розплавлений лантановий електрод +item.arc_electrode_burnt.saturnite.name=Розплавлений сатурнітовий електрод +item.arc_electrode_desh.name=Деш електрод +item.armor_battery.name=Акумуляторний блок силової броні +item.armor_battery_mk2.name=Акумуляторний блок силової броні тип №2 +item.armor_battery_mk3.name=Акумуляторний блок силової броні тип №3 +item.armor_polish.name=Поліроль для броні ShiningArmor™ +item.asbestos_boots.name=Теплозахисні чоботи +item.asbestos_cloth.name=Теплозахисна тканина +item.asbestos_helmet.name=Теплозахисний шолом +item.asbestos_legs.name=Теплозахисні штанці +item.asbestos_plate.name=Теплозахисна куртка +item.ashglasses.name=Попелясті окуляри +item.assembly_45.name=.45 ACP Assembly +item.assembly_556.name=5.56mm Assembly +item.assembly_762.name=7.62mm Assembly +item.assembly_actionexpress.name=.50 AE Assembly +item.assembly_calamity.name=.50 BMG Assembly +item.assembly_desh.name=Desh Bullet Assembly +item.assembly_gold.name=Gold Bullet Assembly +item.assembly_iron.name=Iron Bullet Assembly +item.assembly_lacunae.name=.5mm Assembly +item.assembly_lead.name=Glass Bullet Assembly +item.assembly_luna.name=Lunatic Sniper Bullet Assembly +item.assembly_nightmare.name=Nightmare Bullet Assembly +item.assembly_nopip.name=.44 Magnum Assembly +item.assembly_nuke.name=Корпус ядерного мінізаряду +item.assembly_pip.name=Tainted Bullet Assembly +item.assembly_schrabidium.name=Schrabidium Bullet Assembly +item.assembly_smg.name=9mm Assembly +item.assembly_steel.name=Lead Bullet Assembly +item.assembly_template.name=Збиральний шаблон: +item.assembly_uzi.name=.22 LR Assembly +item.attachment_mask.name=Прикріплюваний протигаз +item.attachment_mask_mono.name=Прикріплювана напівмаска +item.australium_iii.name=Подовжувач життя тип №3 +item.australium_iv.name=Подовжувач життя тип №4 +item.australium_v.name=Подовжувач життя тип №5 +item.back_tesla.name=Ранцева котушка Тесли +item.balefire_and_ham.name=Стейк та BF яєчня +item.balefire_and_steel.name=BF та сталь +item.balefire_scrambled.name=BF яєчня +item.ball_dynamite.name=Динаміт +item.ball_fireclay.name=Шамотна глина +item.ball_resin.name=Латекс +item.ball_tatb.name=Тріамінотрінітробензол (TATB) +item.ball_tnt.name=Тринітротолуол (TNT) +item.ballistic_gauntlet.name=Балістична рукавиця +item.ballistite.name=Балістит +item.bandaid.name=Оксамитовий пластир +item.bathwater.name=Токсична мильна вода +item.bathwater_mk2.name=Токсична мильна вода (Кінський аромат) +item.battery_advanced.name=Удосконалена батарейка +item.battery_advanced_cell.name=Удосконалений акумуляторний елемент +item.battery_advanced_cell_12.name=Удосконалена акумуляторна батарея з 12 елементів +item.battery_advanced_cell_4.name=Удосконалена акумуляторна батарея з 4 елементів +item.battery_creative.name=Нескінченна батарейка +item.battery_generic.name=Батарейка +item.battery_lithium.name=Літій-іонна батарейка +item.battery_lithium_cell.name=Літій-іонний акумуляторний елемент +item.battery_lithium_cell_3.name=Літій-іонна акумуляторна батарея з 3 елементів +item.battery_lithium_cell_6.name=Літій-іонна акумуляторна батарея з 6 елементів +item.battery_potato.name=Картопляна батарейка +item.battery_potatos.name=PotatOS +item.battery_red_cell.name=Редстоуновий акумуляторний елемент +item.battery_red_cell_24.name=Редстоунова акумуляторна батарея з 24 елементів +item.battery_red_cell_6.name=Редстоунова акумуляторна батарея з 6 елементів +item.battery_sc_americium.name=Самозарядна Америцій-241 батарейка +item.battery_sc_gold.name=Самозарядна Золото-198 батарейка +item.battery_sc_lead.name=Самозарядна Свинець-209 батарейка +item.battery_sc_plutonium.name=Самозарядна Плутоній-238 батарейка +item.battery_sc_polonium.name=Самозарядна Полоній-210 батарейка +item.battery_sc_technetium.name=Самозарядна Технецій-99 батарейка +item.battery_sc_uranium.name=Самозарядна Уран-238 батарейка +item.battery_schrabidium.name=Шрабідієва батарейка +item.battery_schrabidium_cell.name=Шрабідієвий акумуляторний елемент +item.battery_schrabidium_cell_2.name=Шрабідієва акумуляторна батарея з 2 елементів +item.battery_schrabidium_cell_4.name=Шрабідієва акумуляторна батарея з 4 елементів +item.battery_spark.name=Спарк батарейка +item.battery_spark_cell_100.name=Спарк таємничий акумуляторний масив +item.battery_spark_cell_1000.name=Спарк таємнича порожнеча маси-енергії +item.battery_spark_cell_10000.name=Спарк твердий кристал простору-часу +item.battery_spark_cell_25.name=Спарк таємничий автомобільний акумулятор +item.battery_spark_cell_2500.name=Спарк таємниче море Дірака +item.battery_spark_cell_6.name=Спарк акумуляторний елемент +item.battery_spark_cell_power.name=Спарк абсурдний накопичувач енергії, що кидає виклик законам фізики +item.battery_steam.name=Steam Powered Energy Storage Tank +item.battery_steam_large.name=Large Steam Powered Energy Storage Tank +item.battery_su.name=SU-Battery +item.battery_su_l.name=Large SU-Battery +item.battery_trixite.name=Пальона Спарк батарейка +item.bdcl.name=BDCL +item.bedrock_ore.grade.base.name=%s корінна руда +item.bedrock_ore.grade.base_roasted.name=Обсмажена %s корінна руда +item.bedrock_ore.grade.base_washed.name=Промита %s корінна руда +item.bedrock_ore.grade.primary.name=%s корінна руда, первинна фракція +item.bedrock_ore.grade.primary_roasted.name=%s корінна руда, Обсмажена первинна фракція +item.bedrock_ore.grade.primary_sulfuric.name=%s корінна руда, Сірчана первинна фракція +item.bedrock_ore.grade.primary_nosulfuric.name=%s корінна руда, Відокремлена Сірчана первинна фракція +item.bedrock_ore.grade.primary_solvent.name=%s корінна руда, Розчинена первинна фракція +item.bedrock_ore.grade.primary_nosolvent.name=%s корінна руда, Відокремлена Розчинена первинна фракція +item.bedrock_ore.grade.primary_rad.name=%s корінна руда, Очищена первинна фракція +item.bedrock_ore.grade.primary_norad.name=%s корінна руда, Відокремлена Очищена первинна фракція +item.bedrock_ore.grade.primary_first.name=%s корінна руда, первинна фракція, важка +item.bedrock_ore.grade.primary_second.name=%s корінна руда, первинна фракція, легка +item.bedrock_ore.grade.crumbs.name=%s корінна руда, крихти +item.bedrock_ore.grade.sulfuric_byproduct.name=%s корінна руда, Сірчана побічний продукт +item.bedrock_ore.grade.sulfuric_roasted.name=%s корінна руда, Обсмажена Сірчана побічний продукт +item.bedrock_ore.grade.sulfuric_arc.name=%s корінна руда, Випалена Сірчана побічний продукт +item.bedrock_ore.grade.sulfuric_washed.name=%s корінна руда, Промита Сірчана побічний продукт +item.bedrock_ore.grade.solvent_byproduct.name=%s корінна руда, Розчинена побічний продукт +item.bedrock_ore.grade.solvent_roasted.name=%s корінна руда, Обсмажена Розчинена побічний продукт +item.bedrock_ore.grade.solvent_arc.name=%s корінна руда, Випалена Розчинена побічний продукт +item.bedrock_ore.grade.solvent_washed.name=%s корінна руда, Промита Розчинена побічний продукт +item.bedrock_ore.grade.rad_byproduct.name=%s корінна руда, Очищена побічний продукт +item.bedrock_ore.grade.rad_roasted.name=%s корінна руда, Обсмажена Очищена побічний продукт +item.bedrock_ore.grade.rad_arc.name=%s корінна руда, Випалена Очищена побічний продукт +item.bedrock_ore.grade.rad_washed.name=%s корінна руда, Промита Очищена побічний продукт +item.bedrock_ore.trait.arc=§6Дугова виплавка +item.bedrock_ore.trait.centrifuged=§9Центрифугована +item.bedrock_ore.trait.rad=§aОброблено високоефективним розчинником +item.bedrock_ore.trait.roasted=§eОбсмажено в коксовій пічці +item.bedrock_ore.trait.solvent=§fОброблено розчинником +item.bedrock_ore.trait.sulfuric=§6Оброблено сірчаною кислотою +item.bedrock_ore.trait.washed=§bПромито +item.bedrock_ore.type.actinide.name=Актиноїдна +item.bedrock_ore.type.crystal.name=Кристальна +item.bedrock_ore.type.heavy.name=Важкометальна +item.bedrock_ore.type.light.name=Легкометальна +item.bedrock_ore.type.nonmetal.name=Неметалева +item.bedrock_ore.type.rare.name=Рідкоземельна +item.bedrock_ore_base.name=Сира корінна руда +item.bedrock_ore_fragment.name=%s корінна руда фрагмент +item.beta.name=Бета фіча +item.big_sword.name=Великий меч +item.billet_actinium.name=Заготовка актинію-227 +item.billet_am_mix.name=Заготовка реакторного америцію +item.billet_am241.name=Заготовка америцію-241 +item.billet_am242.name=Заготовка америцію-242 +item.billet_americium_fuel.name=Заготовка америцієвого палива +item.billet_au198.name=Заготовка золота-198 +item.billet_australium.name=Заготовка австралію +item.billet_australium_greater.name=Заготовка високозбагаченого австралію +item.billet_australium_lesser.name=Заготовка низькозбагаченого австралію +item.billet_balefire_gold.name=Заготовка флешголду +item.billet_beryllium.name=Заготовка берилію +item.billet_bismuth.name=Заготовка вісмуту +item.billet_co60.name=Заготовка кобальту-60 +item.billet_cobalt.name=Заготовка кобальту +item.billet_flashlead.name=Заготовка флешліду +item.billet_flashlead.desc=Розпад ґратки викликає реакцію анігіляції$антиматерії та матерії, що призводить до$вивільнення піонів, що розпадаються на мюони, $що каталізують синтез ядер створюючи новий елемент.$Будь ласка, намагайтеся не відставати. +item.billet_gh336.name=Заготовка ґіорсію-336 +item.billet_gh336.desc=Колега Сіборгіума. +item.billet_hes.name=Заготовка високозбагаченого шрабідієвого палива +item.billet_les.name=Заготовка низькозбагаченого шрабідієвого палива +item.billet_mox_fuel.name=Заготовка МОКС-палива +item.billet_mox_fuel.desc=Кишеньковий Моксі! +item.billet_neptunium.name=Заготовка нептунію-237 +item.billet_neptunium_fuel.name=Заготовка нептунієвого палива +item.billet_nuclear_waste.name=Заготовка ядерних відходів +item.billet_pb209.name=Заготовка свинцю-209 +item.billet_po210be.name=Заготовка полоній-210 берилію +item.billet_polonium.name=Заготовка полонію-210 +item.billet_pu_mix.name=Заготовка реакторного полонію +item.billet_pu238.name=Заготовка плутонію-238 +item.billet_pu238be.name=Заготовка плутоній-238 берилію +item.billet_pu239.name=Заготовка плутонію-239 +item.billet_pu240.name=Заготовка плутонію-240 +item.billet_pu241.name=Заготовка плутонію-241 +item.billet_plutonium.name=Заготовка плутонію +item.billet_plutonium_fuel.name=Заготовка плутонієвого палива +item.billet_ra226.name=Заготовка радію-226 +item.billet_ra226be.name=Заготовка радій-226 берилію +item.billet_schrabidium.name=Заготовка шрабідію-326 +item.billet_schrabidium_fuel.name=Заготовка шрабідієвого палива +item.billet_silicon.name=Кремнієва пластина +item.billet_solinium.name=Заготовка солінію +item.billet_sr90.name=Заготовка стронцію-90 +item.billet_technetium.name=Заготовка технецію-99 +item.billet_th232.name=Заготовка торію-232 +item.billet_thorium_fuel.name=Заготовка торієвого палива +item.billet_u233.name=Заготовка урану-233 +item.billet_u235.name=Заготовка урану-235 +item.billet_u238.name=Заготовка урану-238 +item.billet_uranium.name=Заготовка урану +item.billet_uranium_fuel.name=Заготовка уранового палива +item.billet_yharonite.name=Заготовка яроніту +item.billet_zfb_am_mix.name=Заготовка цирконієвого швидкого розмножувача реакторного америцію +item.billet_zfb_bismuth.name=Заготовка цирконієвого швидкого розмножувача вісмута +item.billet_zfb_pu241.name=Заготовка цирконієвого швидкого розмножувача плутонію-241 +item.billet_zirconium.name=Заготовка цирконію +item.bio_wafer.name=Вафля з водоростей +item.biomass.name=Біомаса +item.biomass_compressed.name=Спресована біомаса +item.bismuth_boots.name=Вісмутові сандалі +item.bismuth_helmet.name=Вісмутовий головний убір +item.bismuth_legs.name=Вісмутові наколінники +item.bismuth_axe.name=Вісмутова сокира +item.bismuth_pickaxe.name=Вісмутове кайло +item.bismuth_plate.name=Вісмутові наплічники, намисто та пов'язка на стегнах +item.bismuth_tool.name=Магнітний екстрактор +item.bj_boots.name=Місячні шиповані чоботи +item.bj_helmet.name=Пов'язка на око з термодатчиком +item.bj_legs.name=Місячні кібернетичні протези ніг +item.bj_plate.name=Місячна кібернетична обшивка +item.bj_plate_jetpack.name=Місячна кібернетична обшивка(Крилата) +item.black_diamond.name=Чорний алмаз +item.black_hole.name=Мініатюрна чорна діра +item.blade_meteorite.name=Метеоритне лезо +item.blade_titanium.name=Титанова лопать +item.blade_tungsten.name=Вольфрамова посилена лопать +item.blades_advanced_alloy.name=Удосконалені леза подрібнювача +item.blades_desh.name=Деш леза подрібнювача +item.blades_steel.name=Стальні леза подрібнювача +item.blades_titanium.name=Титанові леза подрібнювача +item.blowtorch.name=Паяльна лампа +item.board_copper.name=Мідна панель +item.boat_rubber.name=Гумовий човен +item.bobmazon.name=Бобмазон +item.bobmazon_hidden.name=Прихований каталог +item.bobmazon_machines.name=Бобмазон: Блоки та машини +item.bobmazon_materials.name=Бобмазон: Матеріали +item.bobmazon_tools.name=Бобмазон: Інструменти +item.bobmazon_weapons.name=Бобмазон: Зброя та вибухівка +item.boltntm.name=Стрижень %s +item.bolt_compound.name=Reinforced Turbine Shaft +item.bolt_spike.name=Залізничний цвях +item.bolt_spike.desc=Випромінює загрозливу ауру, якимось чином +item.boltgun.name=Пневматичний заклепочник +item.bomb_caller.name=Позначник авіаудару +item.bomb_waffle.name=Вафля масового знищення +item.book_guide.name=Посібник +item.book_of_.name=Книга вагонів +item.book_lemegeton.name=Лемеґетон +item.book_secret.name=3-596-50802-9 +item.bottle2_empty.name=Порожня пляшка +item.bottle2_fritz.name=Фріц-Кола +item.bottle2_fritz_special.name=Перша Фріц-Кола +item.bottle2_korl.name=Корл +item.bottle2_korl_special.name=Перший Корл +item.bottle2_sunset.name=Сансет Сарсапарілла +item.bottle_cherry.name=Пляшка Ядер-Вишні +item.bottle_empty.name=Порожня пляшка у формі бомби +item.bottle_mercury.name=Колба з ртуттю +item.bottle_nuka.name=Пляшка Ядер-Коли +item.bottle_opener.name=Відкривашка пляшок власного виробництва Hbm +item.bottle_quantum.name=Пляшка Квантової Ядер-Коли +item.bottle_rad.name=Пляшка С~Коли РАД +item.bottle_sparkle.name=Пляшка С~Коли +item.bottled_cloud.name=Хмара у пляшці +item.boy_bullet.name=Снаряд U235 +item.boy_igniter.name=Запальник бомби +item.boy_kit.name=Комплект Малюка +item.boy_propellant.name=Кордитний заряд +item.boy_shielding.name=Нейтронний щит +item.boy_target.name=Субкритична ціль U235 +item.briquette.coal.name=Вугільний брикет +item.briquette.lignite.name=Буровугільний брикет +item.briquette.wood.name=Тирсовий брикет +item.bucket_acid.name=Відро кислоти +item.bucket_mud.name=Відро токсичних відходів +item.bucket_schrabidic_acid.name=Відро шрабідієвої кислоти +item.bucket_sulfuric_acid.name=Відро сірчаної кислоти +item.bucket_toxic.name=Відро стереотипного зеленого слизу +item.burnt_bark.name=Burnt Bark +item.burnt_bark.desc=A piece of bark from an exploded golden oak tree. +item.can_bepis.name=Брепсі +item.can_breen.name=Особистий резерв доктора Бріна +item.can_creature.name=Енергетичний напій 'Істота' +item.can_empty.name=Порожня банка +item.can_key.name=Відкривашка +item.can_luna.name=Чорна Меза Луна - Темна Кола +item.can_mrsugar.name=Безалкогольний напій 'Доктор Цукор' +item.can_mug.name=КУХОЛЬ Кореневого пива +item.can_overcharge.name=Overcharge Delirium XT +item.can_redbomb.name=Енергетичний напій 'Червона бомба' +item.can_smart.name=Енергетичний напі 'Розумник' +item.canister_NITAN.name=NITAN© 100 Octane Super Fuel (LEGACY) +item.canister_biofuel.name=Biofuel Canister (LEGACY) +item.canister_bitumen.name=Bitumen Canister (LEGACY) +item.canister_canola.name=Engine Lubricant (LEGACY) +item.canister_empty.name=Порожня каністра +item.canister_ethanol.name=Ethanol Canister (LEGACY) +item.canister_fracksol.name=Fracking Solution Canister (LEGACY) +item.canister_fuel.name=Diesel Canister (LEGACY) +item.canister_fuel.desc=All hail the spout! +item.canister_full.name=Каністра: +item.canister_gasoline.name=Leaded Gasoline Canister (LEGACY) +item.canister_gasoline.desc=lead is friend$let friend into your blood stream$*cocks gun* do it now. +item.canister_heatingoil.name=Heating Oil Canister (LEGACY) +item.canister_heavyoil.name=Heavy Oil Canister (LEGACY) +item.canister_kerosene.name=Kerosene Canister (LEGACY) +item.canister_lightoil.name=Light Oil Canister (LEGACY) +item.canister_napalm.name=Напалм-B +item.canister_naphtha.name=Naphtha Canister (LEGACY) +item.canister_oil.name=Crude Oil Canister (LEGACY) +item.canister_petroil.name=Petroil Canister (LEGACY) +item.canister_reoil.name=Canister of Reclaimed Industrial Oil (LEGACY) +item.canister_smear.name=Industrial Oil Canister (LEGACY) +item.canned_asbestos.name=Консервований азбест +item.canned_asbestos.desc=СКУШТУЙ азбесту! +item.canned_ass.name=Консервована дупа +item.canned_ass.desc=100% якісне осляче м'ясо!* +item.canned_bark.name=Консервована в'ялена соснова кора +item.canned_bark.desc=Екстра хрусткий! +item.canned_beef.name=Консервована яловичина +item.canned_beef.desc=Кілька століть тому корова померла заради цього. +item.canned_bhole.name=Консервована чорна діра +item.canned_bhole.desc=Сингулярність це ням-ням у моєму тум-тум! +item.canned_cheese.name=Консервований плавлений сир +item.canned_cheese.desc=Це сир? Це гумовий цемент? Хто знає, кому яке діло. +item.canned_chinese.name=Консервована китайська їжа +item.canned_chinese.desc=У Китаї китайську їжу називають просто їжею. +item.canned_diesel.name=Консервований дизель +item.canned_diesel.desc=У мене потроху закінчуються жарти для цього. +item.canned_fist.name=Консервований кулак +item.canned_fist.desc=Йовсер! +item.canned_fried.name=Консервована смажена курка +item.canned_fried.desc=Навіть банка смажена у фритюрі! +item.canned_hotdogs.name=Консервовані хот-доги +item.canned_hotdogs.desc=Не плутати з краскотами. +item.canned_jizz.name=Консервоване молоко жеребця FlimFlam Industries™ +item.canned_jizz.desc=Зачекайте, що- +item.canned_kerosene.name=Консервований гас +item.canned_kerosene.desc=Просто уявіть собі дотепний текст тут. +item.canned_leftovers.name=Залишки консерв +item.canned_leftovers.desc=ти повільний +item.canned_milk.name=Консервоване згущене молоко +item.canned_milk.desc=Молоко 2: Ще твердіше, ніж будь-коли раніше! +item.canned_mystery.name=Консервоване таємниче м'ясо +item.canned_mystery.desc=Що всередині? Тільки один спосіб дізнатися! +item.canned_napalm.name=Консервований напалм +item.canned_napalm.desc=Люблю запах старих мемів вранці! +item.canned_oil.name=Консервоване моторне масло +item.canned_oil.desc=Воно змушує мотор рухатись, то чому б не людей? +item.canned_pashtet.name=Паштет +item.canned_pashtet.desc=услуги перевода недоступны! +item.canned_pizza.name=Консервована піца пепероні +item.canned_pizza.desc=Злочин проти людства. +item.canned_recursion.name=Консервована рекурсія +item.canned_recursion.desc=Консервована рекурсія +item.canned_spam.name=Консервований спам +item.canned_spam.desc=The three-and-a-half-minute sketch is set in the fictional Green Midget Cafe in Bromley.$An argument develops between the waitress, who recites a menu in which nearly$every dish contains Spam, and Mrs. Bun, who does not like Spam. She asks for a$dish without Spam, much to the amazement of her Spam-loving husband. The waitress$responds to this request with disgust. Mr. Bun offers to take her Spam instead,$and asks for a dish containing a lot of Spam and baked beans. The waitress says$no since they are out of baked beans; when Mr. Bun asks for a substitution of Spam,$the waitress again responds with disgust. At several points, a group of Vikings in$the restaurant interrupts conversation by loudly singing about Spam.$The irate waitress orders them to shut up, but they resume singing more loudly.$A Hungarian tourist comes to the counter, trying to order by using a wholly$inaccurate Hungarian/English phrasebook (a reference to a previous sketch).$He is rapidly escorted away by a police constable. The sketch abruptly cuts to a$historian in a television studio talking about the origin of the Vikings in the café.$As he goes on, he begins to increasingly insert the word "Spam" into every$sentence, and the backdrop is raised to reveal the restaurant set behind.$The historian joins the Vikings in their song, and Mr. and Mrs. Bun are lifted by$wires out of the scene while the singing continues. In the original televised performance,$the closing credits begin to scroll with the singing still audible in the background. +item.canned_stew.name=Консервоване "Грибне рагу" +item.canned_stew.desc=... +item.canned_tomato.name=Консервований томатний суп +item.canned_tomato.desc=Хто хоче густої червоної пасти? +item.canned_tube.name=Космічний тюбик з їжею +item.canned_tube.desc=Смачна каша. +item.canned_tuna.name=Консервований тунець +item.canned_tuna.desc=Я не можу сказати, чи це справді тунець, чи сушений цемент. +item.canned_yogurt.name=Консервований йогурт +item.canned_yogurt.desc=Мабуть, зіпсований, але що поробиш. +item.canteen_13.name=Фляга Сховища 13 +item.canteen_fab.name=Чудова горілка +item.canteen_vodka.name=Стильна фляга +item.cap_fritz.name=Кришка від пляшки Фріц-Коли +item.cap_korl.name=Кришка від пляшки Корлу +item.cap_nuka.name=Кришка від пляшки Ядер-Коли +item.cap_quantum.name=Кришка від пляшки Квантової Ядер-Коли +item.cap_rad.name=Кришка від пляшки С~Коли РАД +item.cap_sparkle.name=Кришка від пляшки С~Коли +item.cap_star.name=Кришка Сансет Сарсапарілли з зіркою +item.cap_sunset.name=Кришка від пляшки Сансет Сарсапарілли +item.cape_ayy.name=Ayy's плащ +item.cape_codered_.name=codered_'s плащ +item.cape_dafnik.name=Dafnik's плащ +item.cape_gasmask.name=Плащ (Протигаз) +item.cape_hbm.name=Hbm's плащ +item.cape_hidden.name=Прихований плащ +item.cape_lpkukin.name=LPkukin's плащ +item.cape_nostalgia.name=DrNostalgia's плащ +item.cape_radiation.name=Плащ (Радіація) +item.cape_schrabidium.name=Плащ (Шрабідій) +item.cape_vertice.name=Lord Vertice's плащ +item.card_aos.name=Туз пік +item.card_qos.name=Дама пік +item.cart.crate.name=Вігонетка з ящиком +item.cart.destroyer.name=Вагонетка для знищення брухту +item.cart.empty.name=Вагонетка +item.cart.powder.name=Вагонетка з порохом +item.cart.semtex.name=Вагонетка з Семтексом +item.casing_357.name=Гільзи .357 Magnum +item.casing_44.name=Гільзи .44 Magnum +item.casing_50.name=Гільзи великого калібру +item.casing_9.name=Гільзи малого калібру +item.casing_bag.name=Сумка для гільз +item.casing_buckshot.name=Гільза картечі +item.casing.small.name=Мала бронзова гільза +item.casing.small_steel.name=Мала сталева гільза +item.casing.large.name=Велика бронзова гільза +item.casing.large_steel.name=Велика сталева гільза +item.casing.shotshell.name=Гільза для набоїв з чорним порохом +item.casing.buckshot.name=Пластикова дробова гільза +item.casing.buckshot_advanced.name=Удосконалена дробова гільза +item.catalyst_clay.name=Глиняний каталізатор +item.catalytic_converter.name=Каталітичний нейтралізатор +item.cbt_device.name=Пристрій тортур пеніса та яєчок +item.cell_anti_schrabidium.name=Пробірка з антишрабідієм +item.cell_antimatter.name=Пробірка з антиматерією +item.cell_balefire.name=Пробірка з газоподібним BF +item.cell_deuterium.name=Пробірка з дейтерієм +item.cell_empty.name=Порожня пробірка +item.cell_puf6.name=Пробірка з гексафторидом плутонію +item.cell_sas3.name=Пробірка з трисульфідом шрабідію +item.cell_tritium.name=Пробірка з трітієм +item.cell_uf6.name=Пробірка з гексафторидом урану +item.centri_stick.name=Центрифуга на паличці +item.centrifuge_element.name=Центрифужний елемент +item.centrifuge_tower.name=Центрифужна вежа +item.chainsaw.name=Бензопила +item.cheese.name=Сир +item.cheese_quesadilla.name=Сирна кесадилья +item.chemical_dye.black.name=Хімічний барвник (Чорний) +item.chemical_dye.blue.name=Хімічний барвник (Синій) +item.chemical_dye.brown.name=Хімічний барвник (Коричневий) +item.chemical_dye.cyan.name=Хімічний барвник (Бірюзовий) +item.chemical_dye.gray.name=Хімічний барвник (Сірий) +item.chemical_dye.green.name=Хімічний барвник (Зелений) +item.chemical_dye.lightblue.name=Хімічний барвник (Блакитний) +item.chemical_dye.lime.name=Хімічний барвник (Світло-зелений) +item.chemical_dye.magenta.name=Хімічний барвник (Пурпуровий) +item.chemical_dye.orange.name=Хімічний барвник (Помаранчевий) +item.chemical_dye.pink.name=Хімічний барвник (Рожевий) +item.chemical_dye.purple.name=Хімічний барвник(Фіолетовий) +item.chemical_dye.red.name=Хімічний барвник (Червоний) +item.chemical_dye.silver.name=Хімічний барвник (Світло-сірий) +item.chemical_dye.white.name=Хімічний барвник (Білий) +item.chemical_dye.yellow.name=Хімічний барвник (Жовтий) +item.chemistry_set.name=Лабораторний посуд +item.chemistry_set_boron.name=Лабораторний посуд (борне скло) +item.chemistry_template.name=Хімічний шаблон: +item.chernobylsign.name=Бойова сокира з Чорнобильського попереджувального знаку +item.chlorine_pinwheel.name=Хлорна вертушка +item.chlorophyte_axe.name=Хлорофітова сокира +item.chlorophyte_pickaxe.name=Хлорофітове кайло +item.chocolate.name=Панцершоколад +item.chocolate.desc=Танковий шоколад? Впевнений, що це просто мет. +item.chocolate_milk.name=Шоколадне молоко +item.chopper.name=Гвинтокрил Мислиивець +item.chopper_blades.name=Лопать Гвинтокрила Мисливця +item.chopper_gun.name=Імпульсна гармата +item.chopper_head.name=Кокпіт Гвинтокрила Мисливця +item.chopper_tail.name=Хвіст Гвинтокрила Мисливця +item.chopper_torso.name=Корпус Гвинтокрила Мисливця +item.chopper_wing.name=Крило Гвинтокрила Мисливця +item.chunk_ore.malachite.name=Шматок малахіту +item.chunk_ore.rare.name=Шматок рідкоземельної руди +item.chunk_ore.cryolite.name=Шматок кріоліту +item.cigarette.name=Сигарети торгової марки FFI +item.cinnebar.name=Кіновар +item.circuit.advanced.name=Військова друкована плата +item.circuit.analog.name=Аналогова друкована плата +item.circuit.atomic_clock.name=Атомний годинник +item.circuit.basic.name=Інтегральна друкована плата +item.circuit.bismoid.name=Універсальна друкована плата +item.circuit.capacitor.name=Конденсатор +item.circuit.capacitor_board.name=Конденсаторна плата +item.circuit.capacitor_tantalium.name=Танталовий конденсатор +item.circuit.chip.name=Мікрочіп +item.circuit.chip_bismoid.name=Універсальний інтегральний чіп +item.circuit.chip_quantum.name=Твердотільний квантовий процесор +item.circuit.controller.name=Блок керування +item.circuit.controller_advanced.name=Удосконалений блок керування +item.circuit.controller_chassis.name=Корпус блоку керування +item.circuit.controller_quantum.name=Квантовий комп'ютер +item.circuit.pcb.name=Друкована плата +item.circuit.quantum.name=Квантовий обчислювальний блок +item.circuit.silicon.name=Друкована кремнієва пластина +item.circuit.vacuum_tube.name=Вакуумна трубка +item.circuit_aluminium.name=Базова схема +item.circuit_arsenic.name=Адаптивна схема +item.circuit_arsenic_raw.name=Adaptable Circuit Assembly +item.circuit_bismuth.name=Універсальний чіпсет +item.circuit_bismuth_raw.name=Versatile Chipset Assembly +item.circuit_copper.name=Покращена схема +item.circuit_gold.name=Розігнана схема +item.circuit_raw.name=Basic Circuit Assembly +item.circuit_red_copper.name=Удосконалена схема +item.circuit_schrabidium.name=Високопродуктивна схема +item.circuit_star.name=StarControl Circuit Board +item.circuit_star.desc=На даний момент не використовується, оскільки не має операційної системи. +item.circuit_star_component.card.name=StarControl Extension Card +item.circuit_star_component.chipset.name=StarControl Chipset +item.circuit_star_component.cpu.name=StarControl CPU +item.circuit_star_component.ram.name=StarControl RAM +item.circuit_star_piece.board_blank.name=SC - Printed Circuit Board +item.circuit_star_piece.board_converter.name=SC - Voltage Converter +item.circuit_star_piece.board_transistor.name=SC - Transistors +item.circuit_star_piece.bridge_bios.name=SC- BIOS Chip +item.circuit_star_piece.bridge_bus.name=SC - BUS +item.circuit_star_piece.bridge_chipset.name=SC - Chipset +item.circuit_star_piece.bridge_cmos.name=SC - CMOS RAM +item.circuit_star_piece.bridge_io.name=SC - IO Chip +item.circuit_star_piece.bridge_north.name=SC - North Bridge +item.circuit_star_piece.bridge_south.name=SC - South Bridge +item.circuit_star_piece.card_board.name=SC - Extension Card Board +item.circuit_star_piece.card_processor.name=SC - Extension Card Processor +item.circuit_star_piece.cpu_cache.name=SC - CPU Cache +item.circuit_star_piece.cpu_clock.name=SC - CPU Clock +item.circuit_star_piece.cpu_ext.name=SC - Arsenic Semi Conductor Extension +item.circuit_star_piece.cpu_logic.name=SC - Arithmetic Logic Unit +item.circuit_star_piece.cpu_register.name=SC - CPU Register +item.circuit_star_piece.cpu_socket.name=SC - CPU Socket +item.circuit_star_piece.mem_socket.name=SC - Memory Socket +item.circuit_star_piece.mem_16k_a.name=SC - 16k Memory Stick Slot A +item.circuit_star_piece.mem_16k_b.name=SC - 16k Memory Stick Slot B +item.circuit_star_piece.mem_16k_c.name=SC - 16k Memory Stick Slot C +item.circuit_star_piece.mem_16k_d.name=SC - 16k Memory Stick Slot D +item.circuit_tantalium.name=Конденсаторна плата +item.circuit_tantalium_raw.name=Capacitor Board Assembly +item.circuit_targeting_tier1.name=Військова друкована плата (Tier 1) +item.circuit_targeting_tier2.name=Військова друкована плата (Tier 2) +item.circuit_targeting_tier3.name=Військова друкована плата (Tier 3) +item.circuit_targeting_tier4.name=Військова друкована плата (Tier 4) +item.circuit_targeting_tier5.name=Військова друкована плата (Tier 5) +item.circuit_targeting_tier6.name=Військова друкована плата (Tier 6) +item.cladding_desh.name=Деш обшивка +item.cladding_ghiorsium.name=Ґіорсієва обшивка +item.cladding_iron.name=Залізна обшивка +item.cladding_lead.name=Свинцева обшивка +item.cladding_obsidian.name=Обсидіанова шкіра +item.cladding_paint.name=Свинцева фарба +item.cladding_rubber.name=Гумова обшивка +item.clay_tablet.name=Глиняна табличка +item.clip_bf.name=BF-Shell Double Pack +item.clip_bolt_action.name=Box of 12x74 Slugs +item.clip_cryolator.name=Tank of Cryolator Fuel +item.clip_defabricator.name=Belt with Defabricator Energy Cells +item.clip_emp.name=Small Pack of Energy Cells +item.clip_euthanasia.name=Last Aid Kit +item.clip_fatman.name=Six Pack of Mini Nukes +item.clip_hp.name=Ink Tanks +item.clip_immolator.name=Tank of Immolator Fuel +item.clip_jack.name=Box of Quadruple 12x70 Buckshot Rounds +item.clip_lever_action.name=Box of 12x74 Buckshot Rounds +item.clip_mirv.name=Three-In-One Pack of Mini MIRVs +item.clip_mp.name=Britannia Military Standard Issue Assault Rifle Magazine +item.clip_mp40.name=9mm SMG Magazine +item.clip_osipr.name=AR2 Magazine +item.clip_revolver.name=Box of .357 Rounds +item.clip_revolver_cursed.name=Britannia Military Standard Issue Pistol Magazine +item.clip_revolver_gold.name=Small Coffer of Golden Bullets +item.clip_revolver_iron.name=Box of Iron Rounds +item.clip_revolver_lead.name=Box of Nuclear Bullets +item.clip_revolver_nightmare.name=Bag of Bullets +item.clip_revolver_nightmare2.name=Belt with Laser Buckshot +item.clip_revolver_nopip.name=Box of .44 Rounds +item.clip_revolver_pip.name=Speedloader with Tainted Bullets +item.clip_revolver_schrabidium.name=Schrabidium Ammo Container +item.clip_rpg.name=Rocket Container +item.clip_spark.name=Large Electromagnetic Cartridge +item.clip_stinger.name=Pack of Stinger Rockets +item.clip_uboinik.name=Box of 12x70 Buckshot Rounds +item.clip_uzi.name=32rnd .22 LR Magazine +item.clip_xvl1456.name=Large Isotope Box +item.cmb_axe.name=Сокира зі сталі комбайнів +item.cmb_boots.name=Чоботи зі сталі комбайнів +item.cmb_helmet.name=Шолом зі сталі комбайнів +item.cmb_hoe.name=Мотика зі сталі комбайнів +item.cmb_legs.name=Наголінники зі сталі комбайнів +item.cmb_pickaxe.name=Кайло зі сталі комбайнів +item.cmb_plate.name=Нагрудник зі сталі комбайнів +item.cmb_shovel.name=Лопата зі сталі комбайнів +item.cmb_sword.name=Меч зі сталі комбайнів +item.coal_infernal.name=Пекельне вугілля +item.cobalt_axe.name=Кобальтова сокира +item.cobalt_boots.name=Кобальтові чоботи +item.cobalt_decorated_axe.name=Прикрашена кобальтова сокира +item.cobalt_decorated_hoe.name=Прикрашена кобальтова мотика +item.cobalt_decorated_pickaxe.name=Прикрашене кобальтове кайло +item.cobalt_decorated_shovel.name=Прикрашена кобальтова лопата +item.cobalt_decorated_sword.name=Прикрашений кобальтовий меч +item.cobalt_helmet.name=Кобальтовий шолом +item.cobalt_hoe.name=Кобальтова мотика +item.cobalt_legs.name=Кобальтові наголінники +item.cobalt_pickaxe.name=Кобальтове кайло +item.cobalt_plate.name=Кобальтовий нагрудник +item.cobalt_shovel.name=Кобальтова лопата +item.cobalt_sword.name=Кобальтовий меч +item.coffee.name=Кава +item.coffee_radium.name=Кава з радієм +item.coil_advanced_alloy.name=Надпровідна котушка +item.coil_advanced_torus.name=Надпровідна кільцева котушка +item.coil_copper.name=Мідна котушка +item.coil_copper_torus.name=Кільцева котушка +item.coil_gold.name=Золота котушка +item.coil_gold_torus.name=Золота кільцева котушка +item.coil_magnetized_tungsten.name=4000K високотемпературна надпровідна котушка +item.coil_tungsten.name=Нагрівальна спіраль +item.coin_creeper.name=Монета ядерного кріпера +item.coin_maskman.name=Монета маскмена +item.coin_radiation.name=Монета радіації +item.coin_siege.name=Монета облоги +item.coin_ufo.name=Монета НЛО +item.coin_worm.name=Монета Баллс-О-Трона +item.coke.coal.name=Вугільний кокс +item.coke.lignite.name=Буровугільний кокс +item.coke.petroleum.name=Нафтовий кокс +item.coltan_tool.name=Колтас +item.combine_scrap.name=Металобрухт комбайнів +item.component_emitter.name=Компонент випромінювача +item.component_limiter.name=Компонент стабілізатора +item.containment_box.name=Свинцевий ящик +item.conveyor_wand.regular.name=Конвеєрна стрічка +item.conveyor_wand.express.name=Швидкісна конвеєрна стрічка +item.conveyor_wand.double.name=Двосмугова конвеєрна стрічка +item.conveyor_wand.triple.name=Трисмугова конвеєрна стрічка +item.conveyor_wand.desc=Переміщує предмети, що потрапляють на нього$Оберіть дві точки, щоб створити конвеєр$Клацніть присівши, щоб розмістити вручну$Клацніть викруткою, щоб повернути$Клацніть присівши з викруткою, щоб змінити тип. +item.conveyor_wand.vertical.desc=Здатний приймати форму ліфтів та жолобів для вертикального переміщення предметів +item.cordite.name=Кордит +item.cotton_candy.name=Радіоактивна цукрова вата +item.crackpipe.name=Труба здоров'я +item.crate_caller.name=Замовник доставки +item.crayon.black.name=Чорний олівець +item.crayon.blue.name=Синій олівець +item.crayon.brown.name=Коричневий олівець +item.crayon.cyan.name=Бірюзовий олівець +item.crayon.gray.name=Сірий олівець +item.crayon.green.name=Зелений олівець +item.crayon.lightblue.name=Блакитний олівець +item.crayon.lime.name=Світло-зелениц олівець +item.crayon.magenta.name=Пурпуровий олівець +item.crayon.orange.name=Помаранчевий олівець +item.crayon.pink.name=Рожевий олівець +item.crayon.purple.name=Фіолетовий олівець +item.crayon.red.name=Червоний олівець +item.crayon.silver.name=Світло-сірий олівець +item.crayon.white.name=Білий олівець +item.crayon.yellow.name=Жовтий олівець +item.crowbar.name=Пристрій для відкривання ящиків тип №5 "Лом" +item.crucible.name=Горнило +item.crucible_template.name=Ливарний шаблон: +item.crystal_aluminium.name=Кристал алюмінію +item.crystal_beryllium.name=Кристал берилію +item.crystal_charred.name=Обвуглений кристал +item.crystal_charred.desc=Силікат високої якості, злегка обпалений. +item.crystal_charred.desc.P11=Також справжній ріг. Дивно, правда? +item.crystal_coal.name=Кристал вугілля +item.crystal_cobalt.name=Кристал кобальту +item.crystal_copper.name=Кристал міді +item.crystal_cinnebar.name=Кристал кіноварі +item.crystal_diamond.name=Кристал алмазу +item.crystal_energy.name=Енергетичний кристал +item.crystal_fluorite.name=Кристал флюориту +item.crystal_gold.name=Кристал золота +item.crystal_horn.name=Кристальний ріг +item.crystal_horn.desc=Не справжній ріг. +item.crystal_horn.desc.P11=Справжній ріг. +item.crystal_iron.name=Кристал заліза +item.crystal_lead.name=Кристал сввинцю +item.crystal_lapis.name=Кристал лазуриту +item.crystal_lithium.name=Кристал літію +item.crystal_niter.name=Кристал нітрату калію +item.crystal_osmiridium.name=Кристал Осмистого іридію +item.crystal_phosphorus.name=Кристал фосфору +item.crystal_plutonium.name=Кристал плутонію +item.crystal_rare.name=Кристал рідкоземельних елементів +item.crystal_redstone.name=Кристал редстоуну +item.crystal_schrabidium.name=Кристал шрабідію +item.crystal_schraranium.name=Кристал шраранію +item.crystal_starmetal.name=Кристал Зіркового металу +item.crystal_sulfur.name=Кристал сірки +item.crystal_thorium.name=Кристал торію +item.crystal_titanium.name=Кристал титану +item.crystal_trixite.name=Кристал трікситу +item.crystal_tungsten.name=Кристал вольфраму +item.crystal_uranium.name=Кристал урану +item.crystal_xen.name=Штучний кристал Зену +item.crt_display.name= Електронно-променева трубка +item.cube_power.name=Електронієвий куб +item.custom_amat.name=Заряд антиматерії Кастомної бомби +item.custom_dirty.name=Брудний заряд Кастомної бомби +item.custom_fall.name=Скидувальне покращення Кастомної бомби +item.custom_fall.desc=Це те, чого ви так довго чекали!$Скидає бомбу після активації. +item.custom_hydro.name=Водневий заряд Кастомної бомби +item.custom_kit.name=Комплект Кастомної бомби +item.custom_nuke.name=Ядерний заряд Кастомної бомби +item.custom_schrab.name=Шрабідієвий заряд Кастомної бомби +item.custom_tnt.name=Вибуховий заряд Кастомної бомби +item.cyclotron_tower.name=Cyclotron Tower +item.debris_concrete.name=Розбитий бетон +item.debris_element.name=Розбитий паливний елемент ЦИРНОКС +item.debris_exchanger.name=Шматок теплообмінника +item.debris_fuel.name=Шматок паливного стрижня РБМК +item.debris_graphite.name=Шматок гарячого графіту +item.debris_metal.name=Понівечений металевий стрижень +item.debris_shrapnel.name=Обломки підмостків +item.definitelyfood.name=Індивідуальний раціон харчування (ІРХ) +item.defuser.name=Високотехнологічний пристрій для знешкодження бомб +item.defuser_gold.name=Золоті бокорізи +item.demon_core_closed.name=Закрите Ядро-демон +item.demon_core_open.name=Привідкрите Ядро-демон +item.desh_axe.name=Сокрира з робітничого сплаву +item.desh_hoe.name=Мотика з робітничого сплаву +item.desh_pickaxe.name=Кайло з робітничого сплаву +item.desh_shovel.name=Лопата з робітничого сплаву +item.desh_sword.name=Меч з робітничого сплаву +item.designator.name=Цілевказівник малої дальності +item.designator_arty_range.name=Дистанційний навідник артилерії великої дальності +item.designator_manual.name=Ручний цілевказівник +item.designator_range.name=Цілевказівник великої дальності +item.detonator.name=Детонатор +item.detonator_de.name=Вибухівка мерця +item.detonator_deadman.name=Детонатор мерця +item.detonator_laser.name=Лазерний детонатор +item.detonator_multi.name=Мульти детонатор +item.deuterium_filter.name=Фільтр дейтерію +item.diamond_gavel.name=Алмазний молот +item.dieselsuit_boots.name=Дизельні високі підбори +item.dieselsuit_helmet.name=Дизельні наголівні сенсори навколишнього середовища +item.dieselsuit_legs.name=Дизельні сервоприводи для ніг +item.dieselsuit_plate.name=Дизельна кібернетика +item.digamma_diagnostic.name=Діагностик Дігамми +item.disperser_canister.name= Розсіювальна каністра: +item.disperser_canister_empty.name= Розсіювальна каністра +item.dns_boots.name=Чоботи ДНТ Нано костюму +item.dns_legs.name=Наголінники ДНТ Нано костюму +item.dns_helmet.name=Шолом ДНТ Нано костюму +item.dns_plate.name=Нагрудник ДНТ Нано костюму +item.dnt_boots.name=дієнаутронієві чоботи +item.dnt_legs.name=дінейтерієвиі ноги +item.dnt_helmet.name=дінотроніумоувий шолом +item.dnt_plate.name=дінейтромовий нагрудник +item.dnt_sword.name=динуатуремовий меч +item.door_bunker.name=Бункерні двері +item.door_metal.name=Металеві двері +item.door_office.name=Офісні двері +item.door_red.name=Червоні двері +item.dosimeter.name=Дозиметр +item.drax.name=Терра бур +item.drax_mk2.name=Загартований Терра бур +item.drax_mk3.name=Шрабідовий Терра бур +item.drillbit_desh.name=Деш бурильна головка +item.drillbit_desh_diamond.name=Деш бурильна головка (з алмазним покриттям) +item.drillbit_ferro.name=Фероуранова бурильна головка +item.drillbit_ferro_diamond.name=Фероуранова бурильна головка (з алмазним покриттям) +item.drillbit_hss.name=Бурильна головка зі швидкорізальної сталі +item.drillbit_hss_diamond.name=Бурильна головка зі швидкорізальної сталі (з алмазним покриттям) +item.drillbit_steel.name=Сталева бурильна головка +item.drillbit_steel_diamond.name=Сталева бурильна головка (з алмазним покриттям) +item.drillbit_tcalloy.name=Бурильна головка з технецієвої сталі +item.drillbit_tcalloy_diamond.name=Бурильна головка з технецієвої сталі (з алмазним покриттям) +item.drill_titanium.name=Титановий бур +item.drone.patrol.name=Транспортний дрон +item.drone.patrol.desc=Follows a route of waypoints$Tries to load/unload every time it reaches a drone crate$Right click on top of a drone crate to place. +item.drone.patrol_chunkloading.name=Транспортний дрон Прогрузщик чанків +item.drone.patrol_chunkloading.desc=Follows a route of waypoints$Tries to load/unload every time it reaches a drone crate$Right click on top of a drone crate to place.$Loads chunks! +item.drone.patrol_express.name=Швидкісний транспортний дрон +item.drone.patrol_express.desc=Follows a route of waypoints$Tries to load/unload every time it reaches a drone crate$Right click on top of a drone crate to place. +item.drone.patrol_express_chunkloading.name=Швидкісний транспортний дрон Прогрузщик чанків +item.drone.patrol_express_chunkloading.desc=Follows a route of waypoints$Tries to load/unload every time it reaches a drone crate$Right click on top of a drone crate to place.$Loads chunks! +item.drone.request.name=Логістичний дрон +item.drone.request.desc=Used by logistics drone docks to spawn logistics drones$Drones will follow logistics drone waypoints$After completing a request, the drone will return to the dock. +item.drone_linker.name=Лінкер транспортних дронів +item.ducttape.name=Скотч +item.dust.name=Пил +item.dust.desc=Я ненавиджу пил! +item.dust.desc.P11=Ще один звалився замертво! (Another one bites the dust!) +item.dust_tiny.name=Крихітна купка пилу +item.dwarven_pickaxe.name=Кайло дворфів +item.dynosphere_base.name=Blank Dynosphere +item.dynosphere_desh.name=Desh Dynosphere +item.dynosphere_desh_charged.name=Desh Dynosphere (Charged) +item.dynosphere_dineutronium.name=Dineutronium Dynosphere +item.dynosphere_dineutronium_charged.name=Dineutronium Dynosphere (Charged) +item.dynosphere_euphemium.name=Euphemium Dynosphere +item.dynosphere_euphemium_charged.name=Euphemium Dynosphere (Charged) +item.dynosphere_schrabidium.name=Schrabidium Dynosphere +item.dynosphere_schrabidium_charged.name=Schrabidium Dynosphere (Charged) +item.dysfunctional_reactor.name=Нефункціональний ядерний реактор +item.early_explosive_lenses.name=Масив вибухових лінз Першого покоління +item.early_explosive_lenses.desc=Збірка 8 вибухових лінз з алюмінієвим$штовхачем, дюралюмінієвим щитом, та дротяномостовим детонатором. +item.egg_balefire.name=BF яйце +item.egg_balefire.desc=Який птах відкладає радіоактивні яйця? +item.egg_balefire_shard.name=BF осколок +item.egg_glyphid.name=Яйце гліфіду +item.elec_axe.name=Електрична бензопила +item.elec_pickaxe.name=Ударний бур +item.elec_shovel.name=Спіральний бур +item.elec_sword.name=Електрошокер +item.energy_core.name=Імпровізоване енергетичне ядро +item.entanglement_kit.name=Комплект квантовової сплутаності +item.entanglement_kit.desc=Предмет для крафта телепорту.$Дозволяє змінювати виміри за допомогою$сканера ресурсів, покращеного берилієм. +item.envsuit_boots.name=Чоботи захисного костюма М1ТТІ +item.envsuit_helmet.name=Шолом захисного костюма М1ТТІ +item.envsuit_legs.name=Наголінники захисного костюма М1ТТІ +item.envsuit_plate.name=Нагрудник захисного костюма М1ТТІ +item.euphemium_boots.name=Юхимієві чоботи +item.euphemium_capacitor.name=Юхимієвий конденсатор +item.euphemium_capacitor.desc=Дозволяє пасивне розсіювання накопиченої позитивної енергії. +item.euphemium_helmet.name=Юхимієвий шолом +item.euphemium_kit.name=Юхимієвий набір +item.euphemium_legs.name=Юхимієві наголінники +item.euphemium_plate.name=Юхимієвий нагрудник +item.euphemium_stopper.name=Стопор +item.explosive_lenses.name=Масив вибухових лінз +item.explosive_lenses.desc=Збірка 8 пластичних вибухових лінз з тонким$алюмінієвим штовхачем, дюралюмінієвим щитом, та$мініатюрними дротяномостовим детонатором. +item.fabsols_vodka.name=Горілка Фабсол +item.factory_core_advanced.name=Advanced Factory Energy Cluster +item.factory_core_titanium.name=Basic Factory Energy Cluster +item.fallout.name=Купка радіоактивних опадів +item.fau_boots.name=Фау чоботи +item.fau_helmet.name=Фау шолом +item.fau_legs.name=Фау наголінники +item.fau_plate.name=Фау нагрудник +item.filter_coal.name=Фільтр з активованого вугілля +item.fins_big_steel.name=Великий сталевий хвостовий стабілізатор +item.fins_flat.name=Плоский сталевий кожух +item.fins_quad_titanium.name=Мале титанове оперення +item.fins_small_steel.name=Малий сталевий хвостовий стабілізатор +item.fins_tri_steel.name=Велике сталеве оперення +item.five_htp.name=Таблетки ентераміну +item.five_htp.desc=Прибирає все дігамма опромінення з гравця, та захист від нього на 10 хвилин +item.flame_conspiracy.name=Конспірологічна теорія +item.flame_conspiracy.desc=Сталеві балки не можуть бути розплавлені авіаційним паливом! +item.flame_opinion.name=Власна думка +item.flame_opinion.desc=Ну, мені подобається... +item.flame_politics.name=Політична тема +item.flame_politics.desc=Дональд Дак збудує стіну! +item.flame_pony.name=Малюнок мультяшного поні +item.flame_pony.desc=Жовтий кінь перемагає синього коня, це доведений факт! +item.flask_infusion.shield.name=Настоянка щита +item.fleija_core.name=F.L.E.I.J.A. заряд урану-235 +item.fleija_igniter.name=Імпульсний запальник +item.fleija_kit.name=Комплект F.L.E.I.J.A. +item.fleija_propellant.name=Шрабідієвий заряд +item.fluid_barrel_empty.name=Порожня бочка для рідини +item.fluid_barrel_full.name=Бочка для рідини: +item.fluid_barrel_infinite.name=Нескінченна бочка для рідини +item.fluid_duct.name=Трубопровід: +item.fluid_identifier.name=Ідентифікатор рідини +item.fluid_identifier.info=Універсальний ідентифікатор рідини для: +item.fluid_identifier.usage0=Клацніть правою кнопкою миші по трубопроводу, щоб встановити їхній тип рідини. +item.fluid_identifier.usage1=Клацніть правою кнопкою з шифтом, щоб встановити тип для суміжних +item.fluid_identifier.usage2=трубопроводів в діапазоні 64 блоків. +item.fluid_identifier_multi.name=Мульти ідентифікатор рідини +item.fluid_identifier_multi.info=Універсальний ідентифікатор рідини для: +item.fluid_identifier_multi.info2=Другий тип: +item.fluid_tank_empty.name=Порожній універсальний резервуар для рідини +item.fluid_tank_full.name=Універсальний резервуар для рідини: +item.fluid_tank_lead_empty.name=Порожній резервуар для небезпечних матеріалів +item.fluid_tank_lead_full.name=Резервуар для небезпечних матеріалів: +item.fluorite.name=Флюорит +item.flywheel_beryllium.name=Берилієвий маховик +item.fmn.name=Таблетка флунітразепаму +item.fmn.desc=Прибирає все дігамма опромінення з гравця, до 2,000mDRX +item.folly_bullet.name=12.8cm Starmetal High-Energy Shell +item.folly_bullet_du.name=12.8cm DU-Shell +item.folly_bullet_nuclear.name=12.8cm Nuclear Shell +item.folly_shell.name=Silver Bullet Casing +item.fooditem.name=харчовий продукт +item.fragment_actinium.name=Фрагмент актинію-227 +item.fragment_boron.name=Фрагмент бору +item.fragment_cerium.name=Фрагмент церію +item.fragment_cobalt.name=Фрагмент кобальту +item.fragment_coltan.name=Колтан +item.fragment_lanthanium.name=Фрагмент лантану +item.fragment_meteorite.name=Фрагмент метеорита +item.fragment_neodymium.name=Фрагмент неодиму +item.fragment_niobium.name=Фрагмент ніобію +item.fuel_additive.antiknock.name=Тетраетилсвинцева антидетонувальна присадка +item.fuel_additive.deicer.name=Стекломой +item.fuel_tank_large.name=Великий паливний бак +item.fuel_tank_medium.name=Середній паливний бак +item.fuel_tank_small.name=Малий паливний бак +item.fuse.name=Запобіжник +item.fusion_core.name=Ядерний блок +item.fusion_core_infinite.name=Нескінченний ядерний блок +item.fusion_shield_chlorophyte.name=Хлорофітове покриття термоядерного реактора +item.fusion_shield_desh.name=Деш покриття термоядерного реактора +item.fusion_shield_tungsten.name=Вольфрамове покриття термоядерного реактора +item.fusion_shield_vaporwave.name=V A P O R W A V E покриття термоядерного реактора +item.gadget_core.name=Велике плутонієве ядро +item.gadget_explosive.name=Вибухові лінзи першого покоління +item.gadget_kit.name=Комплект Гаджета +item.gadget_wireing.name=Проводка +item.gas_biogas.name=Biogas Tank +item.gas_empty.name=Порожній газовий балон +item.gas_full.name=Газовий балон: +item.gas_lpg.name=LPG Tank +item.gas_mask.name=Протигаз +item.gas_mask_filter.name=Фільтр протигаза +item.gas_mask_filter_combo.name=Комбінований фільтр протигаза +item.gas_mask_filter_mono.name=Каталітичний масковий фільтр +item.gas_mask_filter_piss.name=Удосконалений саморобний фільтр протигаза +item.gas_mask_filter_rag.name=Саморобний фільтр протигаза +item.gas_mask_m65.name=Протигаз M65-Z +item.gas_mask_mono.name=Напівмаска +item.gas_mask_olde.name=Шкіряний протигаз +item.gas_petroleum.name=Petroleum Gas Tank +item.gas_tester.name=Газовий датчик +item.gear_large.name=Велика шестерня +item.gear_large_steel.name=Велика стальна шестерня +item.geiger_counter.name=Ручний лічильник Гейгера +item.gem_alexandrite.name=Александрит +item.gem_rad.name=Радіоактивний самоцвіт +item.gem_sodalite.name=Содаліт +item.gem_tantalium.name=Полікристал танталу +item.gem_tantalium.desc='Танталій' +item.gem_tantalium.desc.P11=AKA Танталій. +item.gem_volcanic.name=Вулканічний самоцвіт +item.generator_front.name=Generator Front +item.generator_steel.name=Generator Body +item.glitch.name=Глюк +item.glowing_stew.name=Сяюче грибне рагу +item.glyphid_meat.name=М'ясо гліфідів +item.glyphid_meat_grilled.name=Смажене м'ясо гліфідів +item.goggles.name=Захисні окуляри +item.grenade_aschrab.name=Метальна пробірка з антишрабідієм +item.grenade_black_hole.name=Граната з чорною дірою +item.grenade_breach.name=Пробійна граната +item.grenade_burst.name=Копальна граната +item.grenate_cats.name=Grenade of Cats +item.grenade_cloud.name=Банка з їдкими випарами +item.grenade_cluster.name=Касетна бомба +item.grenade_electric.name=Електрична бомба +item.grenade_fire.name=Вогняна осколкова граната +item.grenade_flare.name=Сигнальний флаєр +item.grenade_frag.name=Осколкова граната +item.grenade_gas.name=Газова граната +item.grenade_gascan.name=Метальна паливна каністра +item.grenade_generic.name=Граната +item.grenade_if_bouncy.name=IF - Стрибуча граната +item.grenade_if_brimstone.name=IF -Метальна Сірчана шахта +item.grenade_if_concussion.name=IF - Контузійна граната +item.grenade_if_generic.name=IF - Граната +item.grenade_if_he.name=IF - Фугасна граната +item.grenade_if_hopwire.name=IF - Vortex Hopwire +item.grenade_if_impact.name=IF - Контактна граната +item.grenade_if_incendiary.name=IF - Запалювальна граната +item.grenade_if_mystery.name=IF - M.-граната +item.grenade_if_null.name=IF - Нульова граната +item.grenade_if_spark.name=IF - S.-граната +item.grenade_if_sticky.name=IF - Липка граната +item.grenade_if_toxic.name=IF - Токсична граната +item.grenade_kit.name=Комплект гранат +item.grenade_kyiv.name=The Kyiv Special +item.grenade_lemon.name=Горючий лимон +item.grenade_mirv.name=Осколкова граната MIRV +item.grenade_mk2.name=Граната тип №2 "Амбасадор ананаса" +item.grenade_nuclear.name=Ядерна граната +item.grenade_nuke.name=Бурова граната тип №6 +item.grenade_pink_cloud.name=Банка рожевої хмари +item.grenade_plasma.name=Плазмова граната +item.grenade_poison.name=Отруйна граната +item.grenade_pulse.name=Імпульсна граната +item.grenade_schrabidium.name=Шрабідієва граната +item.grenade_shrapnel.name=Шрапнельна граната +item.grenade_smart.name=Розумна граната +item.grenade_strong.name=Покращена граната +item.grenade_tau.name=Тау граната +item.grenade_zomg.name=Негативно енергетична пара анігіляційна граната +item.glyphid_gland.name= Залоза +item.glyphid_gland_empty.name= Гліфідова рідинна залоза +item.gun_aberrator.name=Абератор +item.gun_aberrator_eott.name=Очі Бурі +item.gun_am180.name=Пістолет-кулемет калібру .22 +item.gun_am180_silenced.name=Пістолет-кулемет калібру .22 з глушником +item.gun_amat.name=Антиматерієва гвинтівка +item.gun_amat_penance.name=Покаяння +item.gun_amat_subtlety.name=Витонченість +item.gun_autoshotgun.name=Автоматичний дробовик +item.gun_autoshotgun_sexy.name=Сексі +item.gun_autoshotgun_shredder.name=Шредер +item.gun_b92.name=§9B92 Енергетичний пістолет§r +item.gun_b92_ammo.name=§9B92 Енергетичний елемент§r +item.gun_bolter.name=Болтер +item.gun_carbine.name=Карабін +item.gun_charge_thrower.name=Зарядомет +item.gun_chemthrower.name=Хімомет +item.gun_coilgun.name=Гармата Гаусса +item.gun_congolake.name=Конго Лейк +item.gun_cryocannon.name=Кріо гармата +item.gun_cryolator_ammo.name=Кріо заряд +item.gun_detonator.name=Лазерний детонатор +item.gun_double_barrel.name=Стара класика +item.gun_double_barrel_sacred_dragon.name=Священний Дракон +item.gun_fatman.name=Товстун +item.gun_fireext.name=Вогнегасник +item.gun_flamer.name=Вогнемет +item.gun_flamer_daybreaker.name=Дейбрейкер +item.gun_flamer_topaz.name=Пан Топаз +item.gun_flaregun.name=Сигнальний пістолет +item.gun_folly.name=Безглуздя +item.gun_g3.name=Штурмова гвинтівка +item.gun_g3_a3.name=G3A3 +item.gun_g3_infiltrator.name=Інфільтратор +item.gun_g3_zebra.name=Зеброва гвинтівка +item.gun_greasegun.name=Маслянка +item.gun_greasegun_m3.name=M3 +item.gun_hangman.name=Кат +item.gun_heavy_revolver.name=Важкий револьвер +item.gun_heavy_revolver_lilmac.name=Маленький Макінтош +item.gun_heavy_revolver_protege.name=Протеже +item.gun_heavy_revolver_scoped.name=Магнум калібру .44 з прицілом +item.gun_henry.name=Гвинтівка важільної дії +item.gun_henry_lincoln.name=Гвинтівка Лінкольна +item.gun_kit_1.name=Збройова олива +item.gun_kit_2.name=Ремонтний комплект зброї +item.gun_lag.name=Комічно довгий пістолет +item.gun_laser_pistol.name=Лазерний пістолет +item.gun_laser_pistol_morning_glory.name=Ранкове сяйво +item.gun_laser_pistol_pew_pew.name=Піу піу +item.gun_lasrifle.name=Лазерна гвинтівка +item.gun_liberator.name=Визволитель +item.gun_light_revolver.name=Револьвер з переламним затвором +item.gun_light_revolver_atlas.name=Атлас +item.gun_light_revolver_dani.name=День і ніч +item.gun_m2.name=Ma Deuce +item.gun_maresleg.name=Дробовик важільної дії +item.gun_maresleg_akimbo.name=Дробовики важільної дії +item.gun_maresleg_broken.name=Зламаний +item.gun_maresleg_short.name=Кобиляча нога +item.gun_mas36.name=Південна зірка +item.gun_minigun.name=Мініган +item.gun_minigun_dual.name=Подвійні мінігани +item.gun_minigun_lacunae.name=Lacunae +item.gun_missile_launcher.name=Ракетна пускова установка +item.gun_pepperbox.name=Перечниця +item.gun_panzerschreck.name=Панцершрек +item.gun_quadro.name=Четверна ракетна пускова установка +item.gun_spas12.name=SPAS-12 +item.gun_stg77.name=StG 77 +item.gun_stinger.name=FIM-92 Стінгер +item.gun_tau.name=Тау гармата +item.gun_tesla_cannon.name=Гармата "Тесла" +item.gun_uzi.name=Узі +item.gun_uzi_richter.name=Ріхтер +item.gun_uzi_akimbo.name=Дві Узі +item.hand_drill.name=Ручне свердло +item.hand_drill_desh.name=Ручне деш свердло +item.hazmat_boots.name=Захисні черевики +item.hazmat_boots_grey.name=Високоякісні захисні черевики +item.hazmat_boots_red.name=Удосконалені захисні черевики +item.hazmat_cloth.name=Захисна тканина +item.hazmat_cloth_grey.name=Захисна тканина з свинцевим покриттям +item.hazmat_cloth_red.name=Удосконалена захисна тканина +item.hazmat_grey_kit.name=Високоякісний захисний комплект +item.hazmat_helmet.name=Захисна шапка +item.hazmat_helmet_grey.name=Високоякісна захисна шапка +item.hazmat_helmet_red.name=Удосконалена захисна шапка +item.hazmat_kit.name=Захисний комплект +item.hazmat_legs.name=Захисні штанці +item.hazmat_legs_grey.name=Високоякісні захисні штанці +item.hazmat_legs_red.name=Удосконалені захисні штанці +item.hazmat_paa_boots.name=Чоботи бойового захисного костюма PaA +item.hazmat_paa_helmet.name=Шолом бойового захисного костюма PaA +item.hazmat_paa_legs.name=Наголінники бойового захисного костюма PaA +item.hazmat_paa_plate.name=Нагрудник бойового захисного костюма PaA +item.hazmat_plate.name=Захисна куртка +item.hazmat_plate_grey.name=Високоякісна захисна куртка +item.hazmat_plate_red.name=Удосконалена захисна куртка +item.hazmat_red_kit.name=Удосконалений захисний комплект +item.heart_booster.name=Серце підсилювач +item.heart_container.name=Ціле серце +item.heart_fab.name=Чудове серце +item.heart_piece.name=Частинка серця +item.heavy_component.name=Важкий компонент: %s +item.hev_battery.name=Батарея костюма +item.hev_boots.name=Чоботи H.E.V. тип №4 +item.hev_plate.name=Нагрудник H.E.V. тип №4 +item.hev_helmet.name=Шолом H.E.V. тип №4 +item.hev_legs.name=Наголінники H.E.V. тип №4 +item.holotape_damaged.name=Пошкоджений голодиск +item.holotape_image.name=Голодиск +item.horseshoe_magnet.name=Магніт підкова +item.hull_big_aluminium.name=Big Aluminium Shell +item.hull_big_steel.name=Big Steel Shell +item.hull_big_titanium.name=Big Titanium Shell +item.hull_small_aluminium.name=Small Aluminium Shell +item.hull_small_aluminium.desc=Can be inserted into drilled graphite +item.hull_small_steel.name=Small Steel Shell +item.icf_pellet.name=Паливна гранула ICF +item.icf_pellet_depleted.name=Збіднена паливна гранула ICF +item.icf_pellet_empty.name=Порожня паливна гранула ICF +item.igniter.name=Запальник +item.igniter.desc=(Використовується клацанням правою кнопкою миші на Прототипі)$Це зелена металева ручка з$яскраво-червоною кнопкою та маленькою кришкою.$Aнизу вигравірувані ініціали N.E. Ким би не був N.E., він мав$чудовий смак у відтінках зеленого. +item.industrial_magnet.name=Промисловий магніт +item.inf_antimatter.name=Infinite Antimatter Tank +item.inf_antischrabidium.name=Infinite Antischrabidium Tank +item.inf_coolant.name=Infinite Coolant Tank +item.inf_deuterium.name=Infinite Deuterium Tank +item.inf_diesel.name=Infinite Diesel Tank +item.inf_sulfur.name=Infinite Sulfur Tank +item.inf_tritium.name=Infinite Tritium Tank +item.inf_water.name=Нескінченний резервуар для води +item.inf_water_mk2.name=Нескінченний резервуар для води тип №2 +item.ingot_actinium.name=Зливок актинію-227 +item.ingot_advanced_alloy.name=Зливок удосконаленого сплаву +item.ingot_aluminium.name=Алюмінієвий зливок +item.ingot_am_mix.name=Зливок реакторного америцію +item.ingot_am241.name=Зливок америцію-241 +item.ingot_am242.name=Зливок америцію-242 +item.ingot_americium_fuel.name=Зливок америцієвого палива +item.ingot_arsenic.name=Зливок миш'яку +item.ingot_arsenic_bronze.name=Зливок миш'якової бронзи +item.ingot_asbestos.name=Лист азбесту +item.ingot_asbestos.desc=§o"Сповнений життям, невпевненністю в собі та азбестом. Ця атмосфера витає в повітрі."§r +item.ingot_au198.name=Зливок золота-198 +item.ingot_australium.name=Австралієвий зливок +item.ingot_bakelite.name=Брусок карболіту +item.ingot_beryllium.name=Берилієвий зливок +item.ingot_biorubber.name=Брусок латексу +item.ingot_bismuth.name=Вісмутовий зливок +item.ingot_bismuth_bronze.name=Зливок вісмутової бронзи +item.ingot_boron.name=Борний зливок +item.ingot_bscco.name=Зливок вісмут стронцій кальцій мідь оксиду (BSCCO) +item.ingot_c4.name=Брусок C-4 +item.ingot_cadmium.name=Кадмієвий зливок +item.ingot_calcium.name=Кальцієвий зливок +item.ingot_cdalloy.name=Зливок кадмієвої сталі +item.ingot_cft.name=Кристалічний фулерит +item.ingot_chainsteel.name=Важка ланцюгова сталь +item.ingot_co60.name=Зливок кобальту-60 +item.ingot_cobalt.name=Кобальтовий зливок +item.ingot_combine_steel.name=Зливок сталі комбайнів +item.ingot_combine_steel.desc=*вставити референс на Гражданскую Оборону тут* +item.ingot_copper.name=Зливок промислової міді +item.ingot_daffergon.name=Daffergon Ingot +item.ingot_desh.name=Зливок деш +item.ingot_dineutronium.name=Динейтронієвий зливок +item.ingot_dura_steel.name=Зливок швидкорізальної сталі +item.ingot_electronium.name=Електронієвий зливок +item.ingot_euphemium.name=Юхимієвий зливок +item.ingot_euphemium.desc=Дуже особливий і водночас дивний елемент. +item.ingot_ferrouranium.name=Фероурановий зливок +item.ingot_fiberglass.name=Лист склопластику +item.ingot_fiberglass.desc=Багатий на клітковину, багатий на скло. Все, що потрібно організму. +item.ingot_firebrick.name=Вогнетривка цегла +item.ingot_gh336.name=Зливок Ґіорсію-336 +item.ingot_gh336.desc=Колега Сіборгіума. +item.ingot_graphite.name=Графітовий зливок +item.ingot_gunmetal.name=Зливок гарматної бронзи +item.ingot_hes.name=Зливок високозбагаченого шрабідієвого палива +item.ingot_lanthanium.name=Напівстабільний лантановий зливок +item.ingot_lanthanium.desc='Лантаній' +item.ingot_lanthanium.desc.P11=Насправді лантаній, але як би там не було. +item.ingot_lead.name=Свинцевий зливок +item.ingot_les.name=Зливок низькозбагаченого шрабідієвого палива +item.ingot_magnetized_tungsten.name=Намагнічений вольфрамовий зливок +item.ingot_metal.name=Металевий зливок +item.ingot_metal.bar.name=Металевий брусок +item.ingot_metal.beacon.name=Radio Homing Beacon +item.ingot_metal.casing.name=Металева гільза +item.ingot_metal.clockwork.name=Clockwork +item.ingot_metal.counter.name=Counter +item.ingot_metal.detector.name=Detector +item.ingot_metal.ingot.name=Metal Ingot +item.ingot_metal.key.name=Metal Key +item.ingot_meteorite.name=Метеоритний зливок +item.ingot_meteorite_forged.name=Кований метеоритний зливок +item.ingot_mox_fuel.name=Зливок МОКС-палива +item.ingot_mud.name=Брикет токсичних відходів +item.ingot_neptunium.name=Нептунієвий зливок +item.ingot_neptunium.desc=Це мій улюблений! +item.ingot_neptunium.desc.P11=Буу, страшно! +item.ingot_neptunium_fuel.name=Зливок нептунієвого палива +item.ingot_niobium.name=Ніобієвий зливок +item.ingot_osmiridium.name=Зливок осмистого іридію +item.ingot_pb209.name=Зливок свинцю-209 +item.ingot_pc.name=Брусок полікарбонату +item.ingot_pet.name=Aluminium-Metallized PET Bar +item.ingot_phosphorus.name=Брусок білого фосфору +item.ingot_plutonium.name=Плутонієвий зливок +item.ingot_plutonium_fuel.name=Зливок плутонієвого палива +item.ingot_polonium.name=Зливок полонію-210 +item.ingot_polymer.name=Брусок полімеру +item.ingot_pu_mix.name=Зливок реакторного плутонію +item.ingot_pu238.name=Зливок плутонію-238 +item.ingot_pu239.name=Зливок плутонію-239 +item.ingot_pu240.name=Зливок плутонію-240 +item.ingot_pu241.name=Зливок плутонію-241 +item.ingot_pvc.name=Брусок полівінілхлориду +item.ingot_ra226.name=Зливок радію-226 +item.ingot_raw.name=Зливок %s +item.ingot_red_copper.name=Зливок червоної міді +item.ingot_reiium.name=Reiium Ingot +item.ingot_rubber.name=Брусок гуми +item.ingot_saturnite.name=Сатурнітовий зливок +item.ingot_schrabidate.name=Ферошрабідатовий зливок +item.ingot_schrabidium.name=Шрабідієвий зливок +item.ingot_schrabidium_fuel.name=Зливок шрабідієвого палива +item.ingot_schraranium.name=Шраранієвий зливок +item.ingot_schraranium.desc=Виготовлено з урану в шрабідієвому трансмутаторі +item.ingot_semtex.name=Брусок Семтексу +item.ingot_silicon.name=Кремнієва буля +item.ingot_smore.name=Зливок Смору +item.ingot_solinium.name=Солінієвий зливок +item.ingot_sr90.name=Зливок стронцію-90 +item.ingot_starmetal.name=§9Зливок зіркового металу§r +item.ingot_steel.name=Сталевий зливок +item.ingot_steel_dusted.name=Запилений сталевий зливок +item.ingot_tantalium.name=Танталовий зливок +item.ingot_tantalium.desc='Танталій' +item.ingot_tantalium.desc.P11=AKA Танталій. +item.ingot_tcalloy.name=Зливок технецієвої сталі +item.ingot_technetium.name=Зливок технецію-99 +item.ingot_th232.name=Зливок торію-232 +item.ingot_thorium_fuel.name=Зливок торієвого палива +item.ingot_titanium.name=Титановий зливок +item.ingot_tungsten.name=Вольфрамовий зливок +item.ingot_u233.name=Зливок урану-233 +item.ingot_u235.name=Зливок урану-235 +item.ingot_u238.name=Зливок урану-238 +item.ingot_u238m2.name=Зливок метастабільного урану-238М2 +item.ingot_unobtainium.name=Unobtainium Ingot +item.ingot_uranium.name=Урановий зливок +item.ingot_uranium_fuel.name=Зливок уранового палива +item.ingot_verticium.name=Verticium Ingot +item.ingot_weaponsteel.name=Зливок збройової сталі +item.ingot_weidanium.name=Weidanium Ingot +item.ingot_zirconium.name=Цирконієвий зливок +item.injector_5htp.name=Шприц-ручка 5-гідрокситриптофану +item.injector_knife.name=Шприц-ручка 8-дюймового леза +item.ink.name=林 чорнила +item.insert_doxium.name=Вставка доксію легована астольфієм +item.insert_du.name=Вставка збідненого урану +item.insert_era.name=Вставка Контакту-1 +item.insert_esapi.name=Удосконалена протикульна броневставка +item.insert_ghiorsium.name=Ґіорсієва вставка +item.insert_kevlar.name=Кевларова вставка +item.insert_sapi.name=Протикульна броневставка +item.insert_polonium.name=Полонієва вставка +item.insert_steel.name=Важка сталева вставка +item.insert_xsapi.name=Твердосплавна протикульна броневставка +item.insert_yharonite.name=Яронітова вставка +item.item_secret.aberrator.name=Частина Абератора +item.item_secret.canister.name=Композит SB-26 +item.item_secret.controller.name=Пропрієтарний блок керування +item.item_secret.folly.name=Частина Безглуздя +item.item_secret.selenium_steel.name=Селенова сталь +item.iv_blood.name=Мішок консервованої донорської крові +item.iv_empty.name=Мішок для внутрішньовенного введення +item.iv_xp.name=Крапельниця досвіду +item.iv_xp_empty.name=Порожня крапельниця досвіду +item.jackt.name=До біса стильна балістична куртка +item.jackt2.name=До біса стильна балістична куртка 2: Токійський дрифт +item.jetpack_boost.name=BF ранець +item.jetpack_break.name=Реактивний ранець будівельника +item.jetpack_fly.name=Реактивний ранець +item.jetpack_tank.name=Запасний паливний бак для реактивного ранця +item.jetpack_vector.name=Векторний реактивний ранець +item.journal_bj.name=Облитий віскі нотатник +item.journal_pip.name=Щоденник виживальника +item.journal_silver.name=Замітки підрядника +item.key.name=Ключ +item.key_fake.name=Підроблений ключ +item.key_kit.name=Комплект для імітації ключів +item.key_red.name=Червоний ключ +item.key_red.desc=Дослідіть іншу сторону. +item.key_red.desc.P11=§4е§r +item.key_red_cracked.name=Зламаний ключ +item.key_red_cracked.desc=??? +item.key_red.key_red_cracked.P11=§4???§r +item.laser_crystal_bismuth.desc=Вісмуто-самарієво-ураново-торієва кристалічна матриця +item.laser_crystal_bismuth.name=BiSmUTh лазерний кристал +item.laser_crystal_cmb.desc=Антишрабідій скований в решітці зі комбайноферошрабідатового сплаву +item.laser_crystal_cmb.name=Комбайноферошрабідатовий антиматерієвий лазерний кристал +item.laser_crystal_co2.desc=Вуглекислий газ упакований в кристалічний деш +item.laser_crystal_co2.name=CO2-деш лазерний кристал +item.laser_crystal_digamma.name=Дігамма лазерний кристал +item.laser_crystal_dnt.desc=Суперкристал динейтронієвого спарк ферміону +item.laser_crystal_dnt.name=Спарк лазерний кристал +item.launch_code.name=Код запуску судного дня +item.launch_code_piece.name=Частина коду запуску судного дня +item.launch_key.name=Ключ запуску судного дня +item.lead_gavel.name=Свинцевий молот +item.lemon.name="Лимон" +item.letter.name=Швидкісна пошта +item.levitation_unit.name=Гравітаційний маніпулятор +item.lignite.name=Буре вугілля +item.limiter.name=Generator Limiter +item.linker.name=Телелінкер +item.liquidator_boots.name=Черевики ліквідатора +item.liquidator_helmet.name=Шапка ліквідатора +item.liquidator_legs.name=Штанці ліквідатора +item.liquidator_plate.name=Куртка ліквідатора +item.lithium.name=Літієвий куб +item.lodestone.name=Магніт +item.loop_stew.name=Сніданок айтішніка +item.loops.name=Lööps +item.loot_10.name=Ящик з ракетою 10 розміру +item.loot_15.name=Ящик з ракетою 15 розміру +item.loot_misc.name=Ящик з будь-якою ракетою +item.magnet_circular.name=Плоский магніт +item.magnet_dee.name=Dee Magnets +item.magnetron.name=Магнетрон +item.man_core.name=Плутонієве ядро +item.man_explosive.name=Вибухові лінзи +item.man_igniter.name=Блок детонатор +item.man_kit.name=Комплект Товстуна +item.marshmallow.name=Зефір на паличці +item.mask_of_infamy.name=Маска ганьби +item.mask_piss.name=Траншейна пов'язка +item.mask_rag.name=Імпровізована захисна пов'язка +item.matchstick.name=Сірник +item.mech_key.name=Великий срібний ключ +item.mech_key.desc=Він пульсує з потужністю. +item.mechanism_launcher_1.name=Launcher Mechanism +item.mechanism_launcher_2.name=Advanced Launcher Mechanism +item.mechanism_revolver_1.name=Revolver Mechanism +item.mechanism_revolver_2.name=Advanced Revolver Mechanism +item.mechanism_rifle_1.name=Rifle Mechanism +item.mechanism_rifle_2.name=Advanced Rifle Mechanism +item.mechanism_special.name=High-Tech Weapon Mechanism +item.med_bag.name=Аптечка першої допомоги +item.med_ipecac.name=Сироп іпекаку +item.med_ptsd.name=Ліки від ПТСР +item.med_schiziphrenia.name=Ліки від шизофренії +item.medal_liquidator.name=Відзнака "За участь у ліквідації наслідків аварії на АЕС" +item.meltdown_tool.name=Аплікатор миттєвого розплавлення Дятлова +item.memespoon.name=§eМагазинний садівник (Маркет Гарденер) +item.memory.name=item.null.name +item.mese_gavel.name=Месе молот +item.mese_axe.name=Месе сокира +item.mese_pickaxe.name=Месе кайло +item.meteor_charm.name=Метеоровий оберіг +item.meteor_remote.name=Метеоритний пульт +item.meteorite_sword.name=Метеоритний меч +item.meteorite_sword_seared.name=Метеоритний меч (Обпалений) +item.meteorite_sword_reforged.name=Метеоритний меч (Перекований) +item.meteorite_sword_hardened.name=Метеоритний меч (Загартований +item.meteorite_sword_alloyed.name=Метеоритний меч (Легований) +item.meteorite_sword_machined.name=Метеоритний меч (Механічно оброблений) +item.meteorite_sword_treated.name=Метеоритний меч (Оброблений) +item.meteorite_sword_etched.name=Метеоритний меч (Гравірований) +item.meteorite_sword_bred.name=Метеоритний меч (Розмножений) +item.meteorite_sword_irradiated.name=Метеоритний меч (Опромінений) +item.meteorite_sword_fused.name=Метеоритний меч (Зплавлений) +item.meteorite_sword_baleful.name=Метеоритний меч (Зловісний) +item.mike_cooling_unit.name=Охолоджувальний блок дейтерію +item.mike_core.name=Уранове покриття дейтерієвого баку +item.mike_deut.name=Дейтерієвий бак +item.mike_kit.name=Комплект Айві Майку +item.mirror_tool.name=Інструмент для регулювання дзеркал +item.mirror_tool.linked=Положення дзеркала встановлено! +item.mirror_tool.desc=Клацніть правою кнопкою миші по бойлеру, щоб запам'ятати його положення.$Клацніть по дзеркалах, щоб повернути їх до бойлера. +item.missile_anti_ballistic.name=Протибалістична ракета +item.missile_assembly.name=Збірка малої ракети +item.missile_bhole.name=ракета з чорною дірою +item.missile_burst.name=Запасна ракета +item.missile_buster.name=Бетонобійно-фугасна ракета +item.missile_buster_strong.name=Покращена бетонобійно-фугасна ракета +item.missile_carrier.name=HTR-01 Carrier Rocket +item.missile_cluster.name=Касетна ракета +item.missile_cluster_strong.name=Потужна касетна ракета +item.missile_custom.name=Кастомна ракета +item.missile_decoy.name=Ракета-приманка +item.missile_doomsday.name=Ракета Судного дня +item.missile_doomsday_rusted.name=Пошкоджена ракета Судного дня +item.missile_drill.name=Бункер крекер +item.missile_emp.name=Електромагнітна імпульсна ракета +item.missile_emp_strong.name=Потужна електромагнітна імпульсна ракета +item.missile_endo.name=Ендотермічна ракета +item.missile_exo.name=Екзотермічна ракета +item.missile_generic.name=V-2 +item.missile_incendiary.name=Запалювальна ракета +item.missile_incendiary_strong.name=Потужна запалювальна ракета +item.missile_inferno.name=Ракета "Інферно" тип №2 +item.missile_kit.name=Комплект ракет +item.missile_micro.name=Мікроядерна ракета +item.missile_nuclear.name=Ядерна ракета +item.missile_nuclear_cluster.name=Термоядерна ракета +item.missile_rain.name=Бомбовий дощ +item.missile_schrabidium.name=Шрабідієва ракета +item.missile_shuttle.name=Космічний корабель "Надійний Робін" +item.missile_soyuz.name=Ракета-носій "Союз" +item.missile_soyuz_lander.name=Орбітальний модуль +item.missile_soyuz_lander.desc=Також є жахливим посадковим модулем! +item.missile_stealth.name=Ракета-невидимка +item.missile_strong.name=Потужна фугасна ракета +item.missile_taint.name=Ракета з біологічною зброєю +item.missile_volcano.name=Тектонічна ракета +item.missile_volcano.desc=Використовуючи силу ядерного вибуху, ми можемо викликати вулкан! +item.mold_base.name=Заготовка ливарної формочки +item.mold.name=Ливарна формочка +item.morning_glory.name=Ранкове сяйво +item.motor.name=Мотор +item.motor_bismuth.name=Вісмутовий мотор +item.motor_desh.name=Деш мотор +item.mp_c_1.name=Схема наведення ракет 1-го рівня +item.mp_c_2.name=Схема наведення ракет 2-го рівня +item.mp_c_3.name=Схема наведення ракет 3-го рівня +item.mp_c_4.name=Схема наведення ракет 4-го рівня +item.mp_c_5.name=Схема наведення ракет 5-го рівня +item.mp_fuselage_10_15_balefire.name=BF фюзеляж 10/15 розміру +item.mp_fuselage_10_15_hydrogen.name=Водневий фюзеляж 10/15 розміру +item.mp_fuselage_10_15_kerosene.name=Гасовий фюзеляж 10/15 розміру +item.mp_fuselage_10_15_solid.name=Твердопаливний фюзеляж 10/15 розміру +item.mp_fuselage_10_kerosene.name=Гасовий фюзеляж 10 розміру +item.mp_fuselage_10_kerosene_camo.name=Гасовий фюзеляж 10 розміру +item.mp_fuselage_10_kerosene_desert.name=Гасовий фюзеляж 10 розміру +item.mp_fuselage_10_kerosene_flames.name=Гасовий фюзеляж 10 розміру +item.mp_fuselage_10_kerosene_insulation.name=Гасовий фюзеляж 10 розміру +item.mp_fuselage_10_kerosene_metal.name=Гасовий фюзеляж 10 розміру +item.mp_fuselage_10_kerosene_sky.name=Гасовий фюзеляж 10 розміру +item.mp_fuselage_10_kerosene_sleek.name=Гасовий фюзеляж 10 розміру +item.mp_fuselage_10_kerosene_taint.name=Гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene_camo.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene_dash.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene_desert.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene_flames.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene_insulation.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene_metal.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene_sky.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene_sleek.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene_taint.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_kerosene_vap.name=Довгий гасовий фюзеляж 10 розміру +item.mp_fuselage_10_long_solid.name=Довгий твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_long_solid_bullet.name=Довгий твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_long_solid_flames.name=Довгий твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_long_solid_insulation.name=Довгий твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_long_solid_silvermoonlight.name=Довгий твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_long_solid_sleek.name=Довгий твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_long_solid_soviet_glory.name=Довгий твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_solid.name=Твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_solid_battery.name=Твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_solid_cathedral.name=Твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_solid_duracell.name=Твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_solid_flames.name=Твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_solid_insulation.name=Твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_solid_moonlit.name=Твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_solid_sleek.name=Твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_solid_soviet_glory.name=Твердопаливний фюзеляж 10 розміру +item.mp_fuselage_10_xenon.name=Ксеноновий фюзеляж 10 розміру +item.mp_fuselage_10_xenon_bhole.name=Ксеноновий фюзеляж 10 розміру +item.mp_fuselage_15_20_kerosene.name=Гасовий фюзеляж 15/20 розміру +item.mp_fuselage_15_20_kerosene_magnusson.name=Гасовий фюзеляж 15/20 розміру +item.mp_fuselage_15_20_solid.name=Твердопаливний фюзеляж 15/20 розміру +item.mp_fuselage_15_balefire.name=BF фюзеляж 15 розміру +item.mp_fuselage_15_hydrogen.name=Водневий фюзеляж 15 розміру +item.mp_fuselage_15_hydrogen_cathedral.name=Водневий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_blackjack.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_camo.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_decorated.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_desert.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_insulation.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_lambda.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_metal.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_minuteman.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_pip.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_polite.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_sky.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_steampunk.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_taint.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_kerosene_yuck.name=Гасовий фюзеляж 15 розміру +item.mp_fuselage_15_solid.name=Твердопаливний фюзеляж 15 розміру +item.mp_fuselage_15_solid_desh.name=Твердопаливний фюзеляж 15 розміру +item.mp_fuselage_15_solid_faust.name=Твердопаливний фюзеляж 15 розміру +item.mp_fuselage_15_solid_insulation.name=Твердопаливний фюзеляж 15 розміру +item.mp_fuselage_15_solid_mimi.name=Твердопаливне тіло Мімі-чан 15 розміру +item.mp_fuselage_15_solid_panorama.name=Твердопаливний фюзеляж 15 розміру +item.mp_fuselage_15_solid_roses.name=Твердопаливний фюзеляж 15 розміру +item.mp_fuselage_15_solid_silvermoonlight.name=Твердопаливний фюзеляж 15 розміру +item.mp_fuselage_15_solid_snowy.name=Твердопаливний фюзеляж 15 розміру +item.mp_fuselage_15_solid_soviet_glory.name=Твердопаливний фюзеляж 15 розміру +item.mp_fuselage_15_solid_soviet_stank.name=Твердопаливний фюзеляж 15 розміру +item.mp_stability_10_cruise.name=Круїзні стабілізатори 10 розміру +item.mp_stability_10_flat.name=Плоскі стабілізатори 10 розміру +item.mp_stability_10_space.name=Космічні стабілізатори 10 розміру +item.mp_stability_15_flat.name=Плоскі стабілізатори 15 розміру +item.mp_stability_15_soyuz.name=Гострі стабілізатори 15 розміру +item.mp_stability_15_thin.name=Тонкі стабілізатори 15 розміру +item.mp_thruster_10_kerosene.name=Рідкопаливний двигун 10 розміру +item.mp_thruster_10_solid.name=Твердопаливний двигун 10 розміру +item.mp_thruster_10_xenon.name=Іонний двигун 10 розміру +item.mp_thruster_15_balefire.name=BF двигун з ядерним підігрівачем 15 розміру +item.mp_thruster_15_balefire_large.name=BF двигун з ядерним підігрівачем 15 розміру (Насадка для важких умов експлуатації) +item.mp_thruster_15_balefire_large_rad.name=BF двигун з ядерним підігрівачем 15 розміру (Насадка для важких умов експлуатації) +item.mp_thruster_15_balefire_short.name=BF двигун з ядерним підігрівачем 15 розміру (Укорочений) +item.mp_thruster_15_hydrogen.name=Водневий двигун 15 розміру +item.mp_thruster_15_hydrogen_dual.name=Водневий здвоєний двигун 15 розміру +item.mp_thruster_15_kerosene.name=Рідкопаливний двигун 15 розміру +item.mp_thruster_15_kerosene_dual.name=Рідкопаливний здвоєний двигун 15 розміру +item.mp_thruster_15_kerosene_triple.name=Рідкопаливний зтроєний двигун 15 розміру +item.mp_thruster_15_solid.name=Твердопаливний двигун 15 розміру +item.mp_thruster_15_solid_hexdecuple.name=Твердопаливний шістнадцятикратний двигун 15 розміру +item.mp_thruster_20_kerosene.name=Рідкопаливний двигун 20 розміру +item.mp_thruster_20_kerosene_dual.name=Рідкопаливний здвоєний двигун 20 розміру +item.mp_thruster_20_kerosene_triple.name=Рідкопаливний зтроєний двигун 20 розміру +item.mp_thruster_20_solid.name=Твердопаливний двигун 20 розміру +item.mp_thruster_20_solid_multi.name=Твердопаливний 30-кратний двигун 20 розміру +item.mp_thruster_20_solid_multier.name=Твердопаливний 47-кратний двигун 20 розміру +item.mp_warhead_10_buster.name=Бетонобійна боєголовка 10 розміру +item.mp_warhead_10_cloud.name=Боєголовка з рожевою хмарою 10 розміру +item.mp_warhead_10_he.name=Фугасна боєголовка 10 розміру +item.mp_warhead_10_incendiary.name=Запалювальна боєголовка 10 розміру +item.mp_warhead_10_nuclear.name=Мікроядерна боєголовка 10 розміру +item.mp_warhead_10_nuclear_large.name=Ядерна боєголовка 10 розміру +item.mp_warhead_10_taint.name=Боєголовка з порчею 10 розміру +item.mp_warhead_15_balefire.name=BF боєголовка 15 розміру +item.mp_warhead_15_boxcar.name=Вантажний вагон 15 розміру? +item.mp_warhead_15_he.name=Фугасна боєголовка 15 розміру +item.mp_warhead_15_incendiary.name=Запалювальна боєголовка 15 розміру +item.mp_warhead_15_n2.name=N² Міна 15 розміру +item.mp_warhead_15_nuclear.name=Ядерна боєголовка 15 розміру +item.mp_warhead_15_nuclear_mimi.name=Голова Мімі-чан 15 розміру +item.mp_warhead_15_nuclear_shark.name=Ядерна боєголовка 15 розміру +item.mp_warhead_15_turbine.name=Реактивний двигун 15 розміру +item.mucho_mango.name=АріЗона Мучо Манго +item.multi_kit.name=Комплект багатолільової бомби +item.multitool_beam.name=Силова рукавичка (Підпалювач) +item.multitool_decon.name=Силова рукавичка (Спеціальний обробник) +item.multitool_dig.name=Силова рукавичка (Риючий кіготь) +item.multitool_ext.name=Силова рукавичка (Екстрактор руди) +item.multitool_hit.name=Силова рукавичка (Кулак) +item.multitool_joule.name=Силова рукавичка (Гігаджоуль) +item.multitool_mega.name=Силова рукавичка (Супер удар) +item.multitool_miner.name=Силова рукавичка (Гірничий лазер) +item.multitool_silk.name=Силова рукавичка (Кіготь шовкового дотику) +item.multitool_sky.name=Силова рукавичка (Громовержець) +item.mysteryshovel.name=Крихка лопата +item.n2_charge.name=Великий вибуховий заряд +item.neutrino_lens.name=Нейтрино лінза +item.neutron_reflector.name=Відбивач нейтронів +item.night_vision.name=Окуляри нічного бачення +item.night_vision.description.item=Надає нічне бачення (потрібен повний комплект електроброні) +item.night_vision.description.in_armor=%s (надає нічне бачення) +item.niter.name=Нітрат калію +item.nitra.name=Нітра +item.nitra_small.name=Крихітна купка Нітри +item.no9.name=Шахтарський шолом +item.nossy_hat.name=Чудовий капелюх +item.nothing.name=Нічого +item.nuclear_waste.name=Ядерні відходи +item.nuclear_waste_pearl.name=Перлина ядерних відходів +item.nuclear_waste_tiny.name=Крихітна купка ядерних відходів +item.nuclear_waste_long.name=Довгоживучі ядерні відходи +item.nuclear_waste_long_tiny.name=Крихітна купка довгоживучих ядерних відходів +item.nuclear_waste_long_depleted.name=Розкладені довгоживучі ядерні відходи +item.nuclear_waste_long_depleted_tiny.name=Крихітна купка розкладених довгоживучих ядерних відходів +item.nuclear_waste_short.name=Короткоживучі ядерні відходи +item.nuclear_waste_short_tiny.name=Крихітна купка короткоживучих ядерних відходів +item.nuclear_waste_short_depleted.name=Розкладені короткоживучі ядерні відходи +item.nuclear_waste_short_depleted_tiny.name=Крихітна купка розкладених короткоживучих ядерних відходів +item.nuclear_waste_vitrified.name=Заскловані ядерні відходи +item.nuclear_waste_vitrified_tiny.name=Крихітна купа засклованих ядерних відходів +item.nugget.name=Курячий Нагетс +item.nugget_actinium.name=Самородок актинію-227 +item.nugget_am_mix.name=Самородок реакторного америцію +item.nugget_am241.name=Самородок америцію-241 +item.nugget_am242.name=Самородок америцію-242 +item.nugget_americium_fuel.name=Самородок америцієвого палива +item.nugget_arsenic.name=Самородок миш'яку +item.nugget_au198.name=Самородок золота-198 +item.nugget_australium.name=Австралієвий самородок +item.nugget_australium_greater.name=Самородок високозбагаченого австралію +item.nugget_australium_lesser.name=Самородок низькозбагаченого австралію +item.nugget_beryllium.name=Берилієвий самородок +item.nugget_bismuth.name=Вісмутовий самородок +item.nugget_co60.name=Самородок кобальту-60 +item.nugget_cobalt.name=Кобальтовий самородок +item.nugget_daffergon.name=Daffergon Nugget +item.nugget_desh.name=Самородок деш +item.nugget_dineutronium.name=Динейтронієвий самородок +item.nugget_euphemium.name=Юхимієвий самородок +item.nugget_euphemium.desc=Невеликий шматочок рожевого металу.$Його властивості досі невідомі,$ПОВОДЬСЯ З НИМ обережно. +item.nugget_gh336.name=Самородок Ґіорсію-336 +item.nugget_gh336.desc=Колега Сіборгіума. +item.nugget_hes.name=Самородок високозбагаченого шрабідієвого палива +item.nugget_lead.name=Свинцевий самородок +item.nugget_les.name=Самородок низькозбагаченого шрабідієвого палива +item.nugget_mercury_tiny.name=Крихітна крапля ртуті +item.nugget_mercury.name=Крапля ртуті +item.nugget_mox_fuel.name=Самородок МОКС-палива +item.nugget_mox_fuel.desc=Моксі каже: §lУХИЛЕННЯ ВІД СПЛАТИ ПОДАТКІВ.§r +item.nugget_neptunium.name=Нептунієвий самородок +item.nugget_neptunium_fuel.name=Самородок нептунієвого палива +item.nugget_niobium.name=Ніобієвий самородок +item.nugget_osmiridium.name=Самородок осмистого іридію +item.nugget_pb209.name=Самородок свинцю-209 +item.nugget_plutonium.name=Плутонієвий самородок +item.nugget_plutonium_fuel.name=Самородок плутонієвого палива +item.nugget_polonium.name=Самородок полонію-210 +item.nugget_pu_mix.name=Самородок реакторного плутонію +item.nugget_pu238.name=Самородок плутонію-238 +item.nugget_pu239.name=Самородок плутонію-239 +item.nugget_pu240.name=Самородок плутонію-240 +item.nugget_pu241.name=Самородок плутонію-241 +item.nugget_ra226.name=Самородок радію-226 +item.nugget_reiium.name=Reiium Nugget +item.nugget_schrabidium.name=Шрабідієвий самородок +item.nugget_schrabidium_fuel.name=Самородок шрабідієвого палива +item.nugget_silicon.name=Кремнієвий самородок +item.nugget_solinium.name=Солінієвий самородок +item.nugget_sr90.name=Самородок стронцію-90 +item.nugget_tantalium.name=Танталовий самородок +item.nugget_tantalium.desc='Танталій' +item.nugget_tantalium.desc.P11=AKA Танталій. +item.nugget_technetium.name=Самородок технецію-99 +item.nugget_th232.name=Самородок торію-232 +item.nugget_thorium_fuel.name=Самородок торієвого палива +item.nugget_u233.name=Самородок урану-233 +item.nugget_u235.name=Самородок урану-235 +item.nugget_u238.name=Самородок урану-238 +item.nugget_unobtainium.name=Unobtainium Nugget +item.nugget_uranium.name=Урановий самородок +item.nugget_uranium_fuel.name=Самородок уранового палива +item.nugget_verticium.name=Verticium Nugget +item.nugget_weidanium.name=Weidanium Nugget +item.nugget_zirconium.name=Цирконієвий осколок +item.nuke_advanced_kit.name=Розширений комплект атомних досліджень +item.nuke_commercially_kit.name=Комплект атомних досліджень для комерційного використання +item.nuke_electric_kit.name=Комплект інженера-електрика +item.nuke_starter_kit.name=Стартовий комплект атомних досліджень +item.oil_canola.name=Raw Canola Oil +item.oil_detector.name=Детектор нафтових родовищ +item.oil_detector.desc1=Клацніть правою кнопкою миші, щоб просканувати на наявність нафти. +item.oil_detector.desc2=Детектор виявляє лише великі відкладення. +item.oil_detector.bullseye=Нафтове родовище прямо під вами! +item.oil_detector.detected=Поруч виявлено нафту. +item.oil_detector.noOil=Нафти не виявлено. +item.oil_tar.coal.name=Вугільний дьоготь +item.oil_tar.crude.name=Нафтовий дьоготь +item.oil_tar.crack.name=Дьоготь з крекінгової нафти +item.oil_tar.paraffin.name=Парафіновий віск +item.oil_tar.wax.name=Хлорований парафін +item.oil_tar.wood.name=Деревний дьоготь +item.ore.asbestos=Азбестова +item.ore.borax=Бура +item.ore.chlorocalcite=Хлорокальцитова +item.ore.copper=Мідна +item.ore.fluorite=Флюоритова +item.ore.gold=Золота +item.ore.hematite=Гематитова +item.ore.iron=Залізна +item.ore.malachite=Малахітова +item.ore.neodymium=Неодимова +item.ore.niobium=Ніобієва +item.ore.titanium=Титанова +item.ore.tungsten=Вольфрамова +item.ore.thorium232=Торієва +item.ore.uranium=Уранова +item.ore_bedrock.name=%s корінна руда +item.ore_byproduct.b_aluminium.name=Кристалічний алюмінієвий фрагмент +item.ore_byproduct.b_bismuth.name=Кристалічний вісмутовий фрагмент +item.ore_byproduct.b_calcium.name=Кристалічний кальцієвий фрагмент +item.ore_byproduct.b_copper.name=Кристалічний мідний фрагмент +item.ore_byproduct.b_iron.name=Кристалічний залізний фрагмент +item.ore_byproduct.b_lead.name=Кристалічний свинцевий фрагмент +item.ore_byproduct.b_lithium.name=Кристалічний літієвий фрагмент +item.ore_byproduct.b_polonium.name=Кристалічний полонієвий фрагмент +item.ore_byproduct.b_radium.name=Кристалічний радієвий фрагмент +item.ore_byproduct.b_silicon.name=Кристалічний кремнієвий фрагмент +item.ore_byproduct.b_sulfur.name=Кристалічний сірчаний фрагмент +item.ore_byproduct.b_technetium.name=Кристалічний технецієвий фрагмент +item.ore_byproduct.b_titanium.name=Кристалічний титановий фрагмент +item.ore_byproduct.b_uranium.name=Кристалічний урановий фрагмент +item.ore_centrifuged.name=Центріфугована %s руда +item.ore_cleaned.name=Очищена %s руда +item.ore_deepcleaned.name=Глибоко очищена %s руда +item.ore_density_scanner.name=Сканер щільності корінної руди +item.ore_density_scanner.excellent=Відмінна +item.ore_density_scanner.high=Висока +item.ore_density_scanner.low=Низька +item.ore_density_scanner.moderate=Помірна +item.ore_density_scanner.poor=Бідна +item.ore_density_scanner.veryhigh=Дуже висока +item.ore_density_scanner.verypoor=Дуже бідна +item.ore_enriched.name=Збагачена %s руда +item.ore_nitrated.name=Нітрована %s руда +item.ore_nitrocrystalline.name=Нітрокристалічна %s руда +item.ore_purified.name=Очищена сірчаною кислотою %s руда +item.ore_radcleaned.name=Очищена радіацією %s руда +item.ore_seared.name=Обпалена %s руда +item.ore_separated.name=Відокремлена %s руда +item.overfuse.name=Викрутка сингулярності +item.overfuse.desc=Say what? +item.oxy_mask.name=Киснева маска +item.pa_coil.bscco.name=Велика вісмут стронцій кальцій мідь оксидова (BSCCO) котушка +item.pa_coil.chlorophyte.name=Велика хлорофітова котушка +item.pa_coil.gold.name=Велика золота котушка +item.pa_coil.niobium.name=Велика ніобієво-титанова котушка +item.paa_boots.name="старі добрі черевики" PaA +item.paa_legs.name=Посилення ніг PaA +item.paa_plate.name=Захисна пластина для грудей PaA +item.padlock.name=Замок +item.padlock_reinforced.name=Посилений замок +item.padlock_rusty.name=Іржавий замок +item.padlock_unbreakable.name=Незламний замок +item.pads_rubber.name=Гумові устілки +item.pads_slime.name=Слизові устілки +item.pads_static.name=Статичні устілки +item.page_of_.page1.name=Сторінка 1 +item.page_of_.page2.name=Сторінка 2 +item.page_of_.page3.name=Сторінка 3 +item.page_of_.page4.name=Сторінка 4 +item.page_of_.page5.name=Сторінка 5 +item.page_of_.page6.name=Сторінка 6 +item.page_of_.page7.name=Сторінка 7 +item.page_of_.page8.name=Сторінка 8 +item.pancake.name=Млинець з металобрухту, цвяхів та пилу дорогоцінного каміння +item.part_barrel_heavy.name=Важкий ствол %s +item.part_barrel_light.name=Легкий ствол %s +item.part_beryllium.name=Коробка з берилієвим пилом +item.part_carbon.name=Коробка з вугільним пилом +item.part_copper.name=Коробка з мідним пилом +item.part_generic.hde.name=Елемент для важких умов експлуатації +item.part_generic.lde.name=Елемент низької щільності +item.part_generic.piston_electric.name=Електричний поршень +item.part_generic.piston_hydraulic.name=Гідравлічний поршень +item.part_generic.piston_pneumatic.name=Пневматичний поршень +item.part_grip.name=Рукоятка %s +item.part_lithium.name=Коробка з літієвим пилом +item.part_mechanism.name=Механізм %s +item.part_plutonium.name=Коробка з плутонієвим пилом +item.part_receiver_heavy.name=Важкий ресивер %s +item.part_receiver_light.name=Легкий ресивер %s +item.part_stock.name=Приклад %s +item.particle_aelectron.name=Капсула з позитронами +item.particle_amat.name=Капсула з антиматерією +item.particle_aproton.name=Капсула з антипротонами +item.particle_aschrab.name=Капсула з антишрабідієм +item.particle_copper.name=Капсула з іонами міді +item.particle_dark.name=Капсула з темною матерією +item.particle_digamma.name=§cЧастинка Дігамма§r +item.particle_empty.name=Порожня капсула для частинок +item.particle_higgs.name=Капсула з бозоном Хіггса +item.particle_hydrogen.name=Капсула з іонами водню +item.particle_lead.name=Капсула з іонами свинцю +item.particle_lutece.name=Капсула з Квазічастинкою Лютес +item.particle_muon.name=Капсула з мюоном +item.particle_sparkticle.name=Капсула з спаркчастинкою +item.particle_strange.name=Капсула з дивним кварком +item.particle_tachyon.name=Капсула з тахіоном +item.parts_legendary.name=Легендарні деталі +item.peas.name=Горох +item.pedestal_steel.name=Сталевий п'єдестал +item.pellet_advanced.name=Advanced Watz Performance Improver +item.pellet_antimatter.name=Касета антиматерії +item.pellet_beryllium.name=Beryllium Moderator Pellet +item.pellet_buckshot.name=Свинцева шрапнель +item.pellet_canister.name=Canister Shot +item.pellet_charged.name=Іонізовані частинки +item.pellet_chlorophyte.name=Chlorophyte Rounds +item.pellet_claws.name=Sharp Metal Claws +item.pellet_cluster.name=Вибухова шрапнель +item.pellet_cluster.desc=Використовується в багатоцільових бомбах:$Додає екстра вибух! +item.pellet_coal.name=Dense Coal Cluster +item.pellet_coolant.name=Coolant Cluster +item.pellet_flechette.name=Флешети +item.pellet_gas.name=Балончик з отруйним газом +item.pellet_gas.desc=Використовується в багатоцільових бомбах: $*кхе-кхе* Допоможіть, будь ласка! +item.pellet_hes.name=Ватцз гранула високозбагаченого шрабідіуму +item.pellet_lead.name=Lead Reflector Pellet +item.pellet_les.name=Ватцз гранула низькозбагаченого шрабідіуму +item.pellet_mercury.name=Mercury Rounds +item.pellet_mes.name=Шрабідієва Ватцз гранула +item.pellet_meteorite.name=Meteorite Rounds +item.pellet_neptunium.name=Нептунієва Ватцз гранула +item.pellet_rtg.name=РІТЕГ гранула плутонію-238 +item.pellet_rtg.desc=Паливна гранула РІТЕГ для нескінченної енергії! (майже) +item.pellet_rtg_actinium.name=РІТЕГ гранула актинію-227 +item.pellet_rtg_actinium.desc=Сяйво блакитного світла та бета-променів. +item.pellet_rtg_americium.name=РІТЕГ гранула америцію-241 +item.pellet_rtg_americium.desc=Рідкісний та надійний, старий добрий америцій! +item.pellet_rtg_berkelium.name=Berkelium RTG Pellet +item.pellet_rtg_berkelium.desc= +item.pellet_rtg_cobalt.name=РІТЕГ гранула кобальту-60 +item.pellet_rtg_cobalt.desc=Не найкращий як РІТЕГ, але чудовий для гамма-випромінювання! +item.pellet_rtg_depleted.bismuth.name=Розкладена вісмутова РІТЕГ гранула +item.pellet_rtg_depleted.lead.name=Розкладена свинцева РІТЕГ гранула +item.pellet_rtg_depleted.neptunium.name=Розкладена немтунієва РІТЕГ гранула +item.pellet_rtg_depleted.mercury.name=Розкладена ртутна РІТЕГ гранула +item.pellet_rtg_depleted.nickel.name=Розкладена нікелева РІТЕГ гранула +item.pellet_rtg_depleted.zirconium.name=Розкладена цирконієва РІТЕГ гранула +item.pellet_rtg_lead.name=РІТЕГ гранула свинцю-209 +item.pellet_rtg_lead.desc=Вплив призведе до негайної смерті. +item.pellet_rtg_gold.name=РІТЕГ гранула золота-198 +item.pellet_rtg_gold.desc=Виготовлений з рідкісного, дуже нестабільного ізотопу золота. +item.pellet_rtg_polonium.name=РІТЕГ гранула полонію-210 +item.pellet_rtg_polonium.desc=Потужніша РІТЕГ гранула, виготовлена з найкращого полонію! +item.pellet_rtg_strontium.name=РІТЕГ гранула стронцію-90 +item.pellet_rtg_strontium.desc=Відомий у штаті Каліфорнія... +item.pellet_rtg_radium.name=РІТЕГ гранула радію-226 +item.pellet_rtg_radium.desc=Чудові стартові гранули, виготовлені з повністю натурального радію! +item.pellet_rtg_weak.name=Слабка уранова РІТЕГ гранула +item.pellet_rtg_weak.desc=Дешевші та слабкі гранули, тепер з більшою кількістю урану-238! +item.pellet_schrabidium.name=Pure Schrabidium Watz Pellet +item.photo_panel.name=Фотоелектрична панель +item.pile_rod_boron.name=Регулюючий стрижень Чиказької дровітні +item.pile_rod_boron.desc=§9[Поглинач нейтронів]$§eКлацніть для перемикання +item.pile_rod_detector.name=Регулюючий та детекторний стрижень Чиказької дровітні +item.pile_rod_detector.desc=§9[Детектор/поглинач нейтронів]$§eВикористовуйте бокорізидля збільшення/зменшення нейтронного ліміту$§eВикористовуйте викрутку без шифта, щоб перевірити потік +item.pile_rod_lithium.name=Літієвий елемент Чиказької дровітні +item.pile_rod_lithium.desc=§a[Розмножуване паливо]$§eВикористовуйте ручне свердло, щоб перевірити ядро +item.pile_rod_plutonium.name=Плутонієвий стрижень Чиказької дровітні +item.pile_rod_plutonium.desc=§d[Джерело нейтронів] +item.pile_rod_pu239.name=Урановий стрижень, вироблений у Чиказькій дровітні +item.pile_rod_pu239.desc=§a[Реакційне паливо]$§eБагатий на плутоній-239. +item.pile_rod_source.name=Радій-226 берилієве джерело нейтронів Чиказької дровітні +item.pile_rod_source.desc=§d[Джерело нейтронів] +item.pile_rod_uranium.name=Урановий стрижень Чиказької дровітні +item.pile_rod_uranium.desc=§a[Реакційне паливо]$§eВикористовуйте ручне свердло щоб перевірити комірку +item.pill_iodine.name=Таблетка йоду +item.pill_iodine.desc=Усуває негативні ефекти +item.pill_herbal.name=Трав'яна паста +item.pill_herbal.desc=Ефективне лікування захворювань легень та легкого радіаційного отруєння.$CМає побічні ефекти +item.pill_red.name=Червона пігулка +item.pin.name=Шпилька +item.pin.desc=Стандартний рівень успішності злому звичайного замка становить ~10%%. +item.pipentm.name=Труба %s +item.pipes_steel.name=Сталеві труби +item.pipes_steel.desc=Uncrafting was omitted due to tax evasion. +item.piston_selenium.name=Поршень двигуна внутрішнього згоряння +item.piston_set_desh.name=Комплект поршнів з деш +item.piston_set_dura.name=Комплект поршнів з швидкорізальної сталі +item.piston_set_starmetal.name=Комплект поршнів з зіркового металу +item.piston_set_steel.name=Комплект поршнів зі сталі +item.plan_c.name=План С +item.plan_c.desc=Смертельний +item.plant_item.mustardwillow.name=Листя гірчичної верби +item.plant_item.rope.name=Мотузка +item.plant_item.tobacco.name=Тютюн +item.plastic_bag.name=Пластиковий пакет +item.plate_advanced_alloy.name=Пластина з удосконаленого сплаву +item.plate_aluminium.name=Алюмінієва пластина +item.plate_armor_ajr.name=Залізна кована обшивка броні +item.plate_armor_dnt.name=ДНТ обшивка броні +item.plate_armor_fau.name=Фау обшивка броні +item.plate_armor_hev.name=Динамічна обшивка броні +item.plate_armor_lunar.name=Місячна обшивка +item.plate_armor_titanium.name=Титанова обшивка броні +item.plate_bismuth.name=Вісмутова комбінована пластина +item.plate_bismuth.desc=Хлопці, це алхімічний символ вісмуту, клянусь. +item.plate_cast.name=Лита пластина %s +item.plate_combine_steel.name=Пластина зі сталі комбайнів +item.plate_copper.name=Мідна пластина +item.plate_dalekanium.name=Злий метал +item.plate_desh.name=Деш комбінована пластина +item.plate_dineutronium.name=Динейтронієва комбінована пластина +item.plate_dura_steel.name=Пластина зі швидкорізальної сталі +item.plate_euphemium.name=Юхимієва комбінована пластина +item.plate_fuel_mox.name=МОКС-паливна пластина +item.plate_fuel_pu238be.name=Плутоній-238 берилієва паливна пластина +item.plate_fuel_pu239.name=Паливна пластина високозбагаченого плутонію-239 +item.plate_fuel_ra226be.name=Радій-226 берилієва паливна пластина +item.plate_fuel_sa326.name=Паливна пластина високозбагаченого шрабідію-326 +item.plate_fuel_u233.name=Паливна пластина високозбагаченого урану-233 +item.plate_fuel_u235.name=Паливна пластина високозбагаченого урану-235 +item.plate_gold.name=Золота пластина +item.plate_gunmetal.name=Пластина з гарматної бронзи +item.plate_iron.name=Залізна пластина +item.plate_kevlar.name=Кевлар-керамічний компаунд +item.plate_lead.name=Свинцева пластина +item.plate_mixed.name=Комбінована пластина +item.plate_paa.name=Пластина зі сплаву PaA +item.plate_polymer.name=Ізолятор +item.plate_saturnite.name=Сатурнітова пластина +item.plate_schrabidium.name=Шрабідієва пластина +item.plate_steel.name=Стальна пластина +item.plate_titanium.name=Титанова пластина +item.plate_weaponsteel.name=Пластина зі збройової сталі +item.plate_welded.name=Зварена пластина %s +item.polaroid.name=Полароїд +item.pollution_detector.name=Детектор забруднення +item.powder_actinium.name=Порошок актинію +item.powder_actinium_tiny.name=Крихітна купка актинієвого порошка +item.powder_advanced_alloy.name=Порошок удосконаленого сплаву +item.powder_aluminium.name=Алюмінієвий порошок +item.powder_asbestos.name=Азбестовий порошок +item.powder_asbestos.desc=§o"Нюхххххххх- МХХХХХХМХХХХХХХХ"§r +item.powder_ash.coal.name=Вугільна зола +item.powder_ash.fly.name=Летюча зола +item.powder_ash.fullerene.name=Фулерен +item.powder_ash.misc.name=Попіл +item.powder_ash.soot.name=Дрібна сажа +item.powder_ash.wood.name=Деревна зола +item.powder_astatine.name=Астатовий порошок +item.powder_at209.name=Порошок астату-209 +item.powder_au198.name=Порошок золота-198 +item.powder_australium.name=Австралієвий порошок +item.powder_bakelite.name=Карболітовий порошок +item.powder_balefire.name=Термоядерний попіл +item.powder_beryllium.name=Берилієвий порошок +item.powder_bismuth.name=Вісмутовий порошок +item.powder_borax.name=Бура +item.powder_boron.name=Борний порошок +item.powder_boron_tiny.name=Крихітна купка борного порошку +item.powder_bromine.name=Бромний порошок +item.powder_cadmium.name=Кадмієвий порошок +item.powder_caesium.name=Порошок цезію +item.powder_calcium.name=Кальцієвий порошок +item.powder_cement.name=Цемент +item.powder_cerium.name=Церієвий порошок +item.powder_cerium_tiny.name=Крихітна купка порошку церію +item.powder_chlorocalcite.name=Хлорокальцит +item.powder_chlorophyte.name=Хлорофітовий порошок +item.powder_cloud.name=Cloud Residue +item.powder_co60.name=Порошок кобальту-60 +item.powder_coal.name=Вугільний порошок +item.powder_coal_tiny.name=Крихітна купка вугільного порошку +item.powder_cobalt.name=Кобальтовий порошок +item.powder_cobalt_tiny.name=Крихітна купка кобальтового порошку +item.powder_coltan.name=Очищений танталіт +item.powder_coltan_ore.name=Подрібнений колтан +item.powder_combine_steel.name=Порошок сталі комбайнів +item.powder_copper.name=Мідний порошок +item.powder_cs137.name=Порошок цезію-137 +item.powder_cs137_tiny.name=Крихітна купа порошку цезію-137 +item.powder_daffergon.name=Daffergon Powder +item.powder_desh.name=Деш порошок +item.powder_desh_mix.name=Деш суміш +item.powder_desh_ready.name=DeshReady™ суміш +item.powder_diamond.name=Алмазний порошок +item.powder_dineutronium.name=Динейтронієвий порошок +item.powder_dura_steel.name=Порошок швидкорізальної сталі +item.powder_emerald.name=Смарагдовий порошок +item.powder_euphemium.name=Юхимієвий порошок +item.powder_euphemium.desc=Подрібнений рожевий.$На смак як полуниця. +item.powder_fertilizer.name=Промислове добриво +item.powder_fire.name=Червоний фосфор +item.powder_fire.desc=Використовується в багатоцільових бомбах:$Запалювальні бомби — це весело! +item.powder_flux.name=Флюс +item.powder_gold.name=Золотий порошок +item.powder_i131.name=Порошок йоду-131 +item.powder_i131_tiny.name=Крихітна купка порошку йоду-131 +item.powder_ice.name=Кріопорошок +item.powder_impure_osmiridium.name=Порошок осмистого іридію +item.powder_iodine.name=Йодний порошок +item.powder_iron.name=Залізний порошок +item.powder_lanthanium.name=Лантановий порошок +item.powder_lanthanium_tiny.name=Крихітна купка лантанового порошку +item.powder_lapis.name=Лазуритовий порошок +item.powder_lead.name=Свинцевий порошок +item.powder_lignite.name=Порошок бурого вугілля +item.powder_limestone.name=Вапняковий порошок +item.powder_lithium.name=Літієвий порошок +item.powder_lithium_tiny.name=Крихітна купка літієвого порошку +item.powder_magic.name=Подрібнене зачарування +item.powder_magnetized_tungsten.name=Намагнічений вольфрамовий порошок +item.powder_meteorite.name=Метеоритний порошок +item.powder_meteorite_tiny.name=Крихітна купка метеоритного порошку +item.powder_molysite.name=Трихлорид заліза +item.powder_neodymium.name=Неодимовий порошок +item.powder_neodymium_tiny.name=Крихітна купка неодимового порошку +item.powder_neptunium.name=Нептунієвий порошок +item.powder_niobium.name=Ніобієвий порошок +item.powder_niobium_tiny.name=Крихітна купка ніобієвого порошку +item.powder_nitan_mix.name=Нітанієва суміш +item.powder_paleogenite.name=Палеогенітовий порошок +item.powder_paleogenite_tiny.name=Крихітна купка палеогенітового порошку +item.powder_plutonium.name=Плутонієвий порошок +item.powder_poison.name=Отруйний порошок +item.powder_poison.desc=Використовується в багатоцільових бомбах:$Попередження: Отрута! +item.powder_polonium.name=Порошок полонію-210 +item.powder_polymer.name=Мікропластик +item.powder_power.name=Енергетичний порошок +item.powder_quartz.name=Кварцовий порошок +item.powder_ra226.name=Порошок радію-226 +item.powder_red_copper.name=Порошок червоної міді +item.powder_reiium.name=Reiium Powder +item.powder_sawdust.name=Тирса +item.powder_schrabidate.name=Ферошрабідатовий порошок +item.powder_schrabidium.name=Шрабідієвий порошок +item.powder_semtex_mix.name=Суміш Семтексу +item.powder_sodium.name=Натрій +item.powder_spark_mix.name=Спарк суміш +item.powder_sr90.name=Порошок стронцію-90 +item.powder_sr90_tiny.name=Крихітна купка порошку стронцію-90 +item.powder_steel.name=Сталевий порошок +item.powder_steel_tiny.name=Крихітна купка сталевого порошку +item.powder_strontium.name=Стронцієвий порошок +item.powder_tantalium.name=Танталовий порошок +item.powder_tantalium.desc='Танталій' +item.powder_tantalium.desc.P11=AKA Танталій. +item.powder_tcalloy.name=Порошок технеціієвої сталі +item.powder_tektite.name=Тектитовий порошок +item.powder_tennessine.name=Теннессиновий порошок +item.powder_thermite.name=Терміт +item.powder_thorium.name=Торієвий порошок +item.powder_titanium.name=Титановий порошок +item.powder_tungsten.name=Вольфрамовий порошок +item.powder_unobtainium.name=Unobtainium Powder +item.powder_uranium.name=Урановий порошок +item.powder_verticium.name=Verticium Powder +item.powder_weidanium.name=Weidanium Powder +item.powder_xe135.name=Порошок ксенону-135 +item.powder_xe135_tiny.name=Крихітна купка порошку ксенону-135 +item.powder_yellowcake.name=Єлоукейк +item.powder_zirconium.name=Цирконієвий порошок +item.power_net_tool.name=Інструмент аналізу кабельної мережі +item.pipette.name=Піпетка +item.pipette_boron.name=Борна піпетка +item.pipette_laboratory.name=Піпетка лабораторного класу +item.primer_357.name=.357 Magnum Primer (x24) +item.primer_44.name=.44 Magnum Primer (x24) +item.primer_50.name=Large Caliber Primer (x12) +item.primer_9.name=Small Caliber Primer (x32) +item.primer_buckshot.name=Buckshot Primer (x12) +item.protection_charm.name=Оберіг захисту +item.prototype_kit.name=Комплект Прототипу +item.pudding.name=Пудинг +item.pwr_fuel.bfb_am_mix.name=Стрижень ВВЕР вісмутового швидкого розмножувача реакторного америцію +item.pwr_fuel.bfb_pu241.name=Стрижень ВВЕР вісмутового швидкого розмножувача плутонію-241 +item.pwr_fuel.hea242.name=Паливний стрижень ВВЕР високозбагаченого америцію-242 +item.pwr_fuel.hen237.name=Паливний стрижень ВВЕР високозбагаченого нептунію-237 +item.pwr_fuel.hep239.name=Паливний стрижень ВВЕР високозбагаченого плутонію-239 +item.pwr_fuel.hep241.name=Паливний стрижень ВВЕР високозбагаченого плутонію-241 +item.pwr_fuel.hes326.name=Паливний стрижень ВВЕР високозбагаченого шрабідію-326 +item.pwr_fuel.hes327.name=Паливний стрижень ВВЕР високозбагаченого солінію-327 +item.pwr_fuel.heu233.name=Паливний стрижень ВВЕР високозбагаченого урану-233 +item.pwr_fuel.heu235.name=Паливний стрижень ВВЕР високозбагаченого урану-235 +item.pwr_fuel.mea.name=Паливний стрижень ВВЕР середньозбагаченого америцію +item.pwr_fuel.men.name=Паливний стрижень ВВЕР середньозбагаченого нептунію +item.pwr_fuel.mep.name=Паливний стрижень ВВЕР середньозбагаченого плутонію +item.pwr_fuel.meu.name=Паливний стрижень ВВЕР середньозбагаченого урану +item.pwr_fuel.mox.name=Паливний стрижень ВВЕР МОКС-палива +item.pwr_fuel_depleted.bfb_am_mix.name= Збіднений стрижень ВВЕР вісмутового швидкого розмножувача реакторного америцію +item.pwr_fuel_depleted.bfb_pu241.name=Збіднений стрижень ВВЕР вісмутового швидкого розмножувача плутонію-241 +item.pwr_fuel_depleted.hea242.name=Збіднений стрижень ВВЕР високозбагаченого америцію-242 +item.pwr_fuel_depleted.hen237.name=Збіднений стрижень ВВЕР високозбагаченого нептунію-237 +item.pwr_fuel_depleted.hep239.name=Збіднений стрижень ВВЕР високозбагаченого плутонію-239 +item.pwr_fuel_depleted.hep241.name=Збіднений стрижень ВВЕР високозбагаченого плутонію-241 +item.pwr_fuel_depleted.hes326.name=Збіднений стрижень ВВЕР високозбагаченого шрабідію-326 +item.pwr_fuel_depleted.hes327.name=Збіднений стрижень ВВЕР високозбагаченого солінію-327 +item.pwr_fuel_depleted.heu233.name=Збіднений стрижень ВВЕР високозбагаченого урану-233 +item.pwr_fuel_depleted.heu235.name=Збіднений стрижень ВВЕР високозбагаченого урану-235 +item.pwr_fuel_depleted.mea.name=Збіднений стрижень ВВЕР середньозбагаченого америцію +item.pwr_fuel_depleted.men.name=Збіднений стрижень ВВЕР середньозбагаченого нептунію +item.pwr_fuel_depleted.mep.name=Збіднений стрижень ВВЕР середньозбагаченого плутонію +item.pwr_fuel_depleted.meu.name=Збіднений стрижень ВВЕР середньозбагаченого урану +item.pwr_fuel_depleted.mox.name=Збіднений стрижень ВВЕР МОКС-палива +item.pwr_fuel_hot.bfb_am_mix.name=Гарячий стрижень ВВЕР вісмутового швидкого розмножувача реакторного америцію +item.pwr_fuel_hot.bfb_pu241.name=Гарячий стрижень ВВЕР вісмутового швидкого розмножувача плутонію-241 +item.pwr_fuel_hot.hea242.name= Гарячий паливний стрижень ВВЕР високозбагаченого америцію-242 +item.pwr_fuel_hot.hen237.name=Гарячий паливний стрижень ВВЕР високозбагаченого нептунію-237 +item.pwr_fuel_hot.hep239.name=Гарячий паливний стрижень ВВЕР високозбагаченого плутонію-239 +item.pwr_fuel_hot.hep241.name=Гарячий паливний стрижень ВВЕР високозбагаченого плутонію-241 +item.pwr_fuel_hot.hes326.name=Гарячий паливний стрижень ВВЕР високозбагаченого шрабідію-326 +item.pwr_fuel_hot.hes327.name=Гарячий паливний стрижень ВВЕР високозбагаченого солінію-327 +item.pwr_fuel_hot.heu233.name=Гарячий паливний стрижень ВВЕР високозбагаченого урану-233 +item.pwr_fuel_hot.heu235.name=Гарячий паливний стрижень ВВЕР високозбагаченого урану-235 +item.pwr_fuel_hot.mea.name=Гарячий паливний стрижень ВВЕР середньозбагаченого америцію +item.pwr_fuel_hot.men.name=Гарячий паливний стрижень ВВЕР середньозбагаченого нептунію +item.pwr_fuel_hot.mep.name=Гарячий паливний стрижень ВВЕР середньозбагаченого плутонію +item.pwr_fuel_hot.meu.name=Гарячий паливний стрижень ВВЕР середньозбагаченого урану +item.pwr_fuel_hot.mox.name=Гарячий паливний стрижень ВВЕР МОКС-палива +item.quartz_plutonium.name=Плутонічний кварц +item.radar_linker.name=Радарний лінкер +item.radaway.name=Антирадин +item.radaway_flush.name=Елітний Антирадин +item.radaway_strong.name=Потужний Антирадин +item.radx.name=Рад-X +item.radx.desc=Збільшує стійкість до радіації на 0.2 (37%%) протягом 3 хвилин +item.rag.name=Тканина +item.rag_damp.name=Волога тканина +item.rag_piss.name=Просочена сечею ганчірка +item.rbmk_fuel_balefire.name=Паливний стрижень РБМК BF +item.rbmk_fuel_balefire_gold.name=Паливний стрижень РБМК флешголду +item.rbmk_fuel_drx.name=§cПаливний стрижень РБМК Дігамма§r +item.rbmk_fuel_empty.name=Порожній паливний стрижень РБМК +item.rbmk_fuel_flashlead.name=Паливний стрижень РБМК флешліду +item.rbmk_fuel_hea241.name=Паливний стрижень РБМК високозбагаченого америцію-241 +item.rbmk_fuel_hea242.name=Паливний стрижень РБМК високозбагаченого америцію-242 +item.rbmk_fuel_heaus.name=Паливний стрижень РБМК високозбагаченого австралію +item.rbmk_fuel_hen.name=Паливний стрижень РБМК високозбагаченого нептунію-237 +item.rbmk_fuel_hes.name=Паливний стрижень РБМК високозбагаченого шрабідію-326 +item.rbmk_fuel_hep.name=Паливний стрижень РБМК високозбагаченого плутонію-239 +item.rbmk_fuel_hep241.name=Паливний стрижень РБМК високозбагаченого плутонію-241 +item.rbmk_fuel_heu233.name=Паливний стрижень РБМК високозбагаченого урану-233 +item.rbmk_fuel_heu235.name=Паливний стрижень РБМК високозбагаченого урану-235 +item.rbmk_fuel_lea.name=Паливний стрижень РБМК низькозбагаченого америцію +item.rbmk_fuel_leaus.name=Паливний стрижень РБМК низькозбагаченого австралію +item.rbmk_fuel_lep.name=Паливний стрижень РБМК низькозбагаченого плутонію-239 +item.rbmk_fuel_les.name=Паливний стрижень РБМК низькозбагаченого шрабідію-326 +item.rbmk_fuel_mea.name=Паливний стрижень РБМК середньозбагаченого америцію-242 +item.rbmk_fuel_men.name=Паливний стрижень РБМК середньозбагаченого нептунію-237 +item.rbmk_fuel_mep.name=Паливний стрижень РБМК середньозбагаченого плутонію-239 +item.rbmk_fuel_mes.name=Паливний стрижень РБМК середньозбагаченого шрабідію-326 +item.rbmk_fuel_meu.name=Паливний стрижень РБМК середньозбагаченого урану-235 +item.rbmk_fuel_mox.name=Паливний стрижень РБМК МОКС-палива +item.rbmk_fuel_po210be.name=Полоній-210 берилієве джерело нейтронів РБМК +item.rbmk_fuel_pu238be.name=Плутоній-238 берилієве джерело нейтронів РБМК +item.rbmk_fuel_ra226be.name=Радій-226 берилієве джерело нейтронів РБМК +item.rbmk_fuel_thmeu.name=Паливний стрижень РБМК торію з урановим джерелом нейтронів +item.rbmk_fuel_ueu.name=Паливний стрижень РБМК незбагаченого урану +item.rbmk_fuel_zfb_am_mix.name=Стрижень РБМК цирконієвого швидкого розмножувача реакторного америцію +item.rbmk_fuel_zfb_bismuth.name=Стрижень РБМК цирконієвого швидкого розмножувача вісмута +item.rbmk_fuel_zfb_pu241.name=Стрижень РБМК цирконієвого швидкого розмножувача плутонію-241 +item.rbmk_lid.name=Покриваюча панель РБМК +item.rbmk_lid_glass.name=Скляна покриваюча панель РБМК +item.rbmk_pellet_balefire.name=Паливна гранула BF +item.rbmk_pellet_balefire_gold.name=Паливна гранула флешголду +item.rbmk_pellet_drx.name=§cПаливна гранула Дігамма§r +item.rbmk_pellet_flashlead.name=Паливна гранула флешліду +item.rbmk_pellet_hea241.name=Паливна гранула високозбагаченого америцію-241 +item.rbmk_pellet_hea242.name=Паливна гранулависокозбагаченого америцію-242 +item.rbmk_pellet_heaus.name=Паливна гранула високозбагаченого австралію +item.rbmk_pellet_hen.name=Паливна гранула високозбагаченого нептунію-237 +item.rbmk_pellet_hep239.name=Паливна гранула високозбагаченого плутонію-239 +item.rbmk_pellet_hep241.name=Паливна гранула високозбагаченого плутонію-241 +item.rbmk_pellet_heu233.name=Паливна гранула високозбагаченого урану-233 +item.rbmk_pellet_heu235.name=Паливна гранула високозбагаченого урану-235 +item.rbmk_pellet_hes.name=Паливна гранула високозбагаченого шрабідію-326 +item.rbmk_pellet_lea.name=Паливна гранула низькозбагаченого америцію +item.rbmk_pellet_leaus.name=Паливна гранула низькозбагаченого австралію +item.rbmk_pellet_lep.name=Паливна гранула низькозбагаченого плутонію-239 +item.rbmk_pellet_les.name=Паливна гранула низькозбагаченого шрабідію-326 +item.rbmk_pellet_mea.name=Паливна гранула середньозбагаченого америцію-242 +item.rbmk_pellet_men.name=Паливна гранула середньозбагаченого нептунію-237 +item.rbmk_pellet_mep.name=Паливна гранула середньозбагаченого плутонію-239 +item.rbmk_pellet_mes.name=Паливна гранула середньозбагаченого шрабідію-326 +item.rbmk_pellet_meu.name=Паливна гранула середньозбагаченого урану-235 +item.rbmk_pellet_mox.name=Гранула МОКС-палива +item.rbmk_pellet_po210be.name=Гранула полоній-210 берилієвого джерела нейтронів +item.rbmk_pellet_pu238be.name=Гранула плутоній-238 берилієвого джерела нейтронів +item.rbmk_pellet_ra226be.name=Гранула радій-226 берилієвого джерела нейтронів +item.rbmk_pellet_thmeu.name=Паливна гранула торію з урановим джерелом нейтронів +item.rbmk_pellet_ueu.name=Паливна гранула незбагаченого урану +item.rbmk_pellet_zfb_am_mix.name=Гранула цирконієвого швидкого розмножувача реакторного америцію +item.rbmk_pellet_zfb_bismuth.name=Гранула цирконієвого швидкого розмножувача вісмута +item.rbmk_pellet_zfb_pu241.name=Гранула цирконієвого швидкого розмножувача плутонію-241 +item.rbmk_tool.name=ЛІнкер консолі РБМК +item.rbmk_tool.desc=Клацніть правою кнопкою миші з шифтом на РБМК, щоб зберегти позицію,$клацніть правою кнопкою миші з шифтом на консоль для підключення! +item.rbmk_tool.linked=Позиція встановлена! +item.rbmk_tool.set=РБМК підключено! +item.reacher.name=Вольфрамовий ухват +item.reactor_core.name=Активна зона реактора розмножувача +item.reactor_sensor.name=Дистанційний датчик реактора +item.record.glass.desc=? ? ? +item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core +item.record.ss.desc=Valve - Sector Sweep +item.record.vc.desc=Valve - Vortal Combat +item.redcoil_capacitor.name=Червонокатушковий конденсатор +item.redstone_depleted.name=Desaturated Redstone Dust +item.redstone_sword.name=Редстоун меч +item.reer_graar.name=The Reer Graar +item.remote.name=Зламаний пульт дистанційного керування +item.ring_pull.name=Відкривашка +item.ring_starmetal.name=§9Кільце з зіркового металу§r +item.robes_boots.name=Польові черевики +item.robes_helmet.name=Повсякденний капюшон +item.robes_legs.name=Повсякденні штани +item.robes_plate.name=Повсякденний светр +item.rocket_fuel.name=Тверде паливо (ракетне) +item.rod_empty.name=Порожній стрижень +item.rod.lithium.name=Літієвий стрижень +item.rod.tritium.name=Тритієвий стрижень +item.rod.co.name=Кобальтовий стрижень +item.rod.co60.name=Стрижень кобальту-60 +item.rod.ra226.name=Стрижень радію-226 +item.rod.ac227.name=Стрижень актинію-227 +item.rod.th232.name=Стрижень торію-232 +item.rod.thf.name=Стрижень торієвого палива +item.rod.u235.name=Стрижень урану-235 +item.rod.np237.name=Стрижень нептунію-237 +item.rod.u238.name=Стрижень урану-238 +item.rod.pu238.name=Стрижень плутонію-238 +item.rod.pu239.name=Стрижень плутонію-239 +item.rod.rgp.name=Стрижень реакторного плутонію +item.rod.waste.name=Стрижень ядерних відходів +item.rod.lead.name=Свинцевий стрижень +item.rod.uranium.name=Урановий стрижень +item.rod_dual_empty.name=Порожній подвійний стрижень +item.rod_dual.lithium.name=Літієвий подвійний стержень +item.rod_dual.tritium.name=Тритієвий подвійний стержень +item.rod_dual.co.name=Кобальтовий подвійний стержень +item.rod_dual.co60.name=Подвійний стрижень кобальту-60 +item.rod_dual.ra226.name=Подвійний стрижень радію-226 +item.rod_dual.ac227.name=Подвійний стрижень актинію-227 +item.rod_dual.th232.name=Подвійний стрижень торію-232 +item.rod_dual.thf.name=Подвійний стрижень торієвого палива +item.rod_dual.u235.name=Подвійний стрижень урану-235 +item.rod_dual.np237.name=Подвійний стрижень нептунію-237 +item.rod_dual.u238.name=Подвійний стриженьь урану-238 +item.rod_dual.pu238.name=Подвійний стрижень плутонію-238 +item.rod_dual.pu239.name=Подвійний стрижень плутонію-239 +item.rod_dual.rgp.name=Подвійний стрижень реакторного плутонію +item.rod_dual.waste.name=Подвійний стрижень ядерних відходів +item.rod_dual.lead.name=Свинцевий подвійний стержень +item.rod_dual.uranium.name=Урановий подвійний стержень +item.rod_quad_empty.name=Порожній четверний стрижень +item.rod_quad.lithium.name=Літієвий четверний стрижень +item.rod_quad.tritium.name=Тритієвий четверний стрижень +item.rod_quad.co.name=Кобальтовий четверний стрижень +item.rod_quad.co60.name=Четверний стрижень кобальту-60 +item.rod_quad.ra226.name=Четверний стрижень радію-226 +item.rod_quad.ac227.name=Четверний стрижень актинію-227 +item.rod_quad.th232.name=Четверний стрижень торію-232 +item.rod_quad.thf.name=Четверний стрижень торієвого палива +item.rod_quad.u235.name=Четверний стрижень урану-235 +item.rod_quad.np237.name=Четверний стрижень нептунію-237 +item.rod_quad.u238.name=Четверний стрижень урану-238 +item.rod_quad.pu238.name=Четверний стрижень плутонію-238 +item.rod_quad.pu239.name=Четверний стрижень плутонію-239 +item.rod_quad.rgp.name=Четверний стрижень реакторного плутонію +item.rod_quad.waste.name=Четверний стрижень ядерних відходів +item.rod_quad.lead.name=Свинцевий четверний стрижень +item.rod_quad.uranium.name=Урановий четверний стрижень +item.rod_australium.name=Australium Rod +item.rod_balefire.name=Balefire Rod +item.rod_balefire_blazing.name=Blazing Balefire Rod +item.rod_coolant.name=Coolant Cell +item.rod_daffergon.name=Daffergon Rod +item.rod_dual_balefire.name=Balefire Dual Rod +item.rod_dual_balefire_blazing.name=Blazing Balefire Dual Rod +item.rod_dual_coolant.name=Dual Coolant Cell +item.rod_dual_lead.name=Lead Dual Rod +item.rod_dual_lithium.name=Dual Lithium Rod +item.rod_dual_mox_fuel.name=MOX Dual Fuel Rod +item.rod_dual_mox_fuel_depleted.name=Depleted MOX Dual Fuel Rod +item.rod_dual_neptunium.name=Neptunium Dual Rod +item.rod_dual_plutonium.name=Plutonium Dual Rod +item.rod_dual_plutonium_fuel.name=Plutonium Dual Fuel Rod +item.rod_dual_plutonium_fuel_depleted.name=Depleted Plutonium Dual Fuel Rod +item.rod_dual_polonium.name=Polonium-210 Dual Rod +item.rod_dual_pu238.name=Plutonium-238 Dual Rod +item.rod_dual_pu239.name=Plutonium-239 Dual Rod +item.rod_dual_pu240.name=Plutonium-240 Dual Rod +item.rod_dual_schrabidium.name=Schrabidium-326 Dual Rod +item.rod_dual_schrabidium_fuel.name=Schrabidium Dual Fuel Rod +item.rod_dual_schrabidium_fuel_depleted.name=Depleted Schrabidium Dual Fuel Rod +item.rod_dual_solinium.name=Schrabidium-327 Dual Rod +item.rod_dual_th232.name=Thorium-232 Dual Rod +item.rod_dual_thorium_fuel.name=Thorium Dual Fuel Rod +item.rod_dual_thorium_fuel_depleted.name=Depleted Thorium Dual Fuel Rod +item.rod_dual_tritium.name=Dual Tritium Cell +item.rod_dual_u233.name=Uranium-233 Dual Rod +item.rod_dual_u235.name=Uranium-235 Dual Rod +item.rod_dual_u238.name=Uranium-238 Dual Rod +item.rod_dual_uranium.name=Uranium Dual Rod +item.rod_dual_uranium_fuel.name=Uranium Dual Fuel Rod +item.rod_dual_uranium_fuel_depleted.name=Depleted Uranium Dual Fuel Rod +item.rod_dual_waste.name=Nuclear Waste Dual Rod +item.rod_dual_water.name=Dual Water Cell +item.rod_euphemium.name=Euphemium Rod +item.rod_lead.name=Lead Rod +item.rod_lithium.name=Lithium Rod +item.rod_mox_fuel.name=MOX Fuel Rod +item.rod_mox_fuel_depleted.name=Depleted MOX Fuel Rod +item.rod_neptunium.name=Neptunium Rod +item.rod_of_discord.name=Жезл розбрату +item.rod_plutonium.name=Plutonium Rod +item.rod_plutonium_fuel.name=Plutonium Fuel Rod +item.rod_plutonium_fuel_depleted.name=Depleted Plutonium Fuel Rod +item.rod_polonium.name=Polonium-210 Rod +item.rod_pu238.name=Plutonium-238 Rod +item.rod_pu239.name=Plutonium-239 Rod +item.rod_pu240.name=Plutonium-240 Rod +item.rod_quad_balefire.name=Balefire Quad Rod +item.rod_quad_balefire_blazing.name=Blazing Balefire Quad Rod +item.rod_quad_coolant.name=Quad Coolant Cell +item.rod_quad_euphemium.name=Burned Out Quad Schrabidium Rod +item.rod_quad_lead.name=Lead Quad Rod +item.rod_quad_lithium.name=Quad Lithium Rod +item.rod_quad_mox_fuel.name=MOX Quad Fuel Rod +item.rod_quad_mox_fuel_depleted.name=Depleted MOX Quad Fuel Rod +item.rod_quad_neptunium.name=Neptunium Quad Rod +item.rod_quad_plutonium.name=Plutonium Quad Rod +item.rod_quad_plutonium_fuel.name=Plutonium Quad Fuel Rod +item.rod_quad_plutonium_fuel_depleted.name=Depleted Plutonium Quad Fuel Rod +item.rod_quad_polonium.name=Polonium-210 Quad Rod +item.rod_quad_pu238.name=Plutonium-238 Quad Rod +item.rod_quad_pu239.name=Plutonium-239 Quad Rod +item.rod_quad_pu240.name=Plutonium-240 Quad Rod +item.rod_quad_schrabidium.name=Schrabidium-326 Quad Rod +item.rod_quad_schrabidium_fuel.name=Schrabidium Quad Fuel Rod +item.rod_quad_schrabidium_fuel_depleted.name=Depleted Schrabidium Quad Fuel Rod +item.rod_quad_solinium.name=Schrabidium-327 Quad Rod +item.rod_quad_th232.name=Thorium-232 Quad Rod +item.rod_quad_thorium_fuel.name=Thorium Quad Fuel Rod +item.rod_quad_thorium_fuel_depleted.name=Depleted Thorium Quad Fuel Rod +item.rod_quad_tritium.name=Quad Tritium Cell +item.rod_quad_u233.name=Uranium-233 Quad Rod +item.rod_quad_u235.name=Uranium-235 Quad Rod +item.rod_quad_u238.name=Uranium-238 Quad Rod +item.rod_quad_uranium.name=Uranium Quad Rod +item.rod_quad_uranium_fuel.name=Uranium Quad Fuel Rod +item.rod_quad_uranium_fuel_depleted.name=Depleted Uranium Quad Fuel Rod +item.rod_quad_waste.name=Nuclear Waste Quad Rod +item.rod_quad_water.name=Quad Water Cell +item.rod_reiium.name=Reiium Rod +item.rod_schrabidium.name=Schrabidium-326 Rod +item.rod_schrabidium_fuel.name=Schrabidium Fuel Rod +item.rod_schrabidium_fuel_depleted.name=Depleted Schrabidium Fuel Rod +item.rod_solinium.name=Schrabidium-327 Rod +item.rod_th232.name=Thorium-232 Rod +item.rod_thorium_fuel.name=Thorium Fuel Rod +item.rod_thorium_fuel_depleted.name=Depleted Thorium Fuel Rod +item.rod_tritium.name=Tritium Cell +item.rod_u233.name=Uranium-233 Rod +item.rod_u235.name=Uranium-235 Rod +item.rod_u238.name=Uranium-238 Rod +item.rod_unobtainium.name=Unobtainium Rod +item.rod_uranium.name=Uranium Rod +item.rod_uranium_fuel.name=Uranium Fuel Rod +item.rod_uranium_fuel_depleted.name=Depleted Uranium Fuel Rod +item.rod_verticium.name=Verticium Rod +item.rod_waste.name=Nuclear Waste Rod +item.rod_water.name=Water Cell +item.rod_weidanium.name=Weidanium Rod +item.rod_zirnox_empty.name=Порожній стрижень ЦИРНОКС +item.rod_zirnox_natural_uranium_fuel.name=Паливний стрижень ЦИРНОКС природного урану +item.rod_zirnox_uranium_fuel.name=Паливний стрижень ЦИРНОКС уранового палива +item.rod_zirnox_th232.name=Стрижень ЦИРНОКС торію-232 +item.rod_zirnox_thorium_fuel.name=Паливний стрижень ЦИРНОКС торієвого палива +item.rod_zirnox_mox_fuel.name=Паливний стрижень ЦИРНОКС МОКС-палива +item.rod_zirnox_plutonium_fuel.name=Паливний стрижень ЦИРНОКС плутонієвого палива +item.rod_zirnox_u233_fuel.name=Паливний стрижень ЦИРНОКС урану-233 +item.rod_zirnox_u235_fuel.name=Паливний стрижень ЦИРНОКС урану-235 +item.rod_zirnox_les_fuel.name=Паливний стрижень ЦИРНОКС низькозбагаченого шрабідію +item.rod_zirnox_lithium.name=Стрижень ЦИРНОКС літію +item.rod_zirnox_tritium.name=Стрижень ЦИРНОКС тритію +item.rod_zirnox_zfb_mox.name=Паливний стрижень ЦИРНОКС цирконієвого швидкого розмножувача МОКС-палива +item.rod_zirnox_natural_uranium_fuel_depleted.name=Збіднений стрижень ЦИРНОКС природного урану +item.rod_zirnox_uranium_fuel_depleted.name=Збіднений стрижень ЦИРНОКС уранового палива +item.rod_zirnox_thorium_fuel_depleted.name=Збіднений стрижень ЦИРНОКС торієвого палива +item.rod_zirnox_mox_fuel_depleted.name=Збіднений стрижень ЦИРНОКС МОКС-палива +item.rod_zirnox_plutonium_fuel_depleted.name=Збіднений стрижень ЦИРНОКС плутонієвого палива +item.rod_zirnox_u233_fuel_depleted.name=Збіднений стрижень ЦИРНОКС урану-233 +item.rod_zirnox_u235_fuel_depleted.name=Збіднений стрижень ЦИРНОКС урану-235 +item.rod_zirnox_les_fuel_depleted.name=Збіднений стрижень ЦИРНОКС низькозбагаченого шрабідію +item.rod_zirnox_zfb_mox_depleted.name=Збіднений стрижень ЦИРНОКС цирконієвого швидкого розмножувача МОКС-палива +item.rotor_steel.name=Великий сталевий ротор +item.rpa_boots.name=Чоботи силової броні Залишеньців +item.rpa_helmet.name=Шолом силової броні Залишеньців +item.rpa_legs.name=Наголінники силової броні Залишеньців +item.rpa_plate.name=Нагрудник силової броні Залишеньців +item.rtg_unit.name=РІТЕГ елемент +item.rubber_gloves.name=Thick Rubber Gloves +item.rune_blank.name=Порожня каталітична матриця +item.rune_dagaz.name=Збалансована каталітична матриця +item.rune_hagalaz.name=Груба каталітична матриця +item.rune_isa.name=Прохолоджуюча каталітична матриця +item.rune_jera.name=Мультиплікативна каталітична матриця +item.rune_thurisaz.name=Адитивна каталітична матриця +item.safety_fuse.name=Запал +item.sat_base.name=Супутникова основа +item.sat_chip.name=Супутниковий ID-чіп +item.sat_coord.name=Цілевказівник супутника +item.sat_designator.name=Лазерний цілевказівник супутника +item.sat_relay.name=Супутниковий радарний передачик +item.sat_foeq.name=PEAF - Mk.I FOEQ Duna з експериментальним ядерним двигуном +item.sat_gerald.name=Геральд, Будівельний Андроїд +item.sat_head_laser.name=Промінь смерті +item.sat_head_mapper.name=Оптична камера з високим коефіцієнтом посилення +item.sat_head_radar.name=Радарна тарілка +item.sat_head_resonator.name=Ксенієвий резонатор +item.sat_head_scanner.name=Геодезичний сканер M700 +item.sat_interface.name=Інтерфейс керування супутниками +item.sat_laser.name=Орбітальний промінь смерті +item.sat_lunar_miner.name=Місячний гірничодобувний корабель +item.sat_mapper.name=Супутник картографування поверхні +item.sat_miner.name=Корабель для видобутку астероїдів +item.sat_radar.name=Супутник радіолокаційного дослідження +item.sat_resonator.name=Супутник ксенієвий резонатор +item.sat_scanner.name=Супутник з модулем глибинного сканування ресурсів +item.sawblade.name=Лезо пилорами +item.schnitzel_vegan.name=Веганський шніцель +item.schrabidium_axe.name=Шрабідієва сокира +item.schrabidium_boots.name=Шрабідієві чоботи +item.schrabidium_hammer.name=Шрабідієвий молот +item.schrabidium_helmet.name=Шрабідієвий шолом +item.schrabidium_hoe.name=Шрабідієва мотика +item.schrabidium_legs.name=Шрабідієві наголінники +item.schrabidium_pickaxe.name=Шрабідієве кайло +item.schrabidium_plate.name=Шрабідієвий нагрудник +item.schrabidium_shovel.name=Шрабідієва лопата +item.schrabidium_sword.name=Шрабідієвий меч +item.scrap.name=Брухт +item.scrap_nuclear.name=Радіоактивне сміття +item.scrap_oil.name=Нафтові відходи +item.scrap_plastic.name=Подрібнений пластик +item.scraps.name=Ливарний шлак +item.screwdriver.name=Викрутка +item.screwdriver.desc=Можна використовувати замість запобіжника... +item.screwdriver_desh.name=Деш викрутка +item.scrumpy.name=Пляшка Скрампі +item.security_boots.name=Черевики охоронця +item.security_helmet.name=Шолом охоронця +item.security_legs.name=Штани охоронця +item.security_plate.name=Куртка охоронця +item.seg_10.name=Розмір 10 з'єднувач +item.seg_15.name=Розмір 15 з'єднувач +item.seg_20.name=Розмір 20 з'єднувач +item.serum.name=Сироватка +item.servo_set.name=Комплект сервоприводів +item.servo_set_desh.name=Деш комплект сервоприводів +item.settings_tool.name=Інструмент налаштування +item.shackles.name=Кайдани +item.shellntm.name=Оболонка %s +item.shimmer_axe.name=Чудова сокира +item.shimmer_axe_head.name=Важка головка сокири +item.shimmer_handle.name=Посилена полімерна ручка +item.shimmer_head.name=Важка головка молота +item.shimmer_sledge.name=Чудова кувалда +item.singularity.name=Сингулярність +item.singularity_counter_resonant.name=Скована контррезонансна сингулярність +item.singularity_micro.name=Мікросингулярність +item.singularity_spark.name=Спарк сингулярність +item.singularity_super_heated.name=Перегріта резонуюча сингулярність +item.siox.name=Ліки від раку SiOX +item.siox.desc=Позбавляє від мезотеліоми силою азбесту! +item.siphon.name=Сифон +item.siren_track.name=Трек сирени +item.sliding_blast_door_skin.0.name=Скін розсувних захисних дверей: Стандартний +item.sliding_blast_door_skin.1.name=Скін розсувних захисних дверей: Варіант 1 +item.sliding_blast_door_skin.2.name=Скін розсувних захисних дверей: Варіант 2 +item.smashing_hammer.name=Нищівний молот +item.solid_fuel.name=Тверде паливо +item.solid_fuel_bf.name=Тверде паливо (BF) +item.solid_fuel_presto.name=Пресоване тверде паливо +item.solid_fuel_presto_bf.name=Пресоване тверде паливо (BF) +item.solid_fuel_presto_triplet.name=Потужне пресоване тверде паливо +item.solid_fuel_presto_triplet_bf.name=Потужне пресоване тверде паливо (BF) +item.solinium_core.name=Напівстабільне солінієве ядро +item.solinium_igniter.name=Солінієвий імпульсний запальник +item.solinium_kit.name=Комплект Солінію +item.solinium_propellant.name=Солінієвий стискаючий заряд +item.sopsign.name=Бойова сокира зі знаку СОП +item.spawn_duck.name=Золоте яйце +item.spawn_ufo.name=Марсіанський корабель вторгнення +item.spawn_worm.name=Баллс-О-Трон Прайм +item.sphere_steel.name=Сталева сфера +item.spider_milk.name=Пляшка павукового молока +item.spongebob_macaroni.name=Макарони Губка Боб +item.stamp_357.name=.357 Magnum штамп +item.stamp_44.name=.44 Magnum штамп +item.stamp_50.name=Штамп великого калібру +item.stamp_9.name=Штамп малого калібру +item.stamp_book.printing1.name=Друкарський штамп (Сторінка 1) +item.stamp_book.printing2.name=Друкарський штамп (Сторінка 2) +item.stamp_book.printing3.name=Друкарський штамп (Сторінка 3) +item.stamp_book.printing4.name=Друкарський штамп (Сторінка 4) +item.stamp_book.printing5.name=Друкарський штамп (Сторінка 5) +item.stamp_book.printing6.name=Друкарський штамп (Сторінка 6) +item.stamp_book.printing7.name=Друкарський штамп (Сторінка 7) +item.stamp_book.printing8.name=Друкарський штамп (Сторінка 8) +item.stamp_desh_circuit.name=Штамп схеми (Деш) +item.stamp_desh_flat.name=Плоский штамп (Деш) +item.stamp_desh_plate.name=Штамп пластини (Деш) +item.stamp_desh_wire.name=Штамп дроту (Деш) +item.stamp_desh_357.name=.357 Magnum штамп (Деш) +item.stamp_desh_44.name=.44 Magnum штамп (Деш) +item.stamp_desh_50.name=Штамп великого калібру (Деш) +item.stamp_desh_9.name=Штамп малого калібру (Деш) +item.stamp_iron_circuit.name=Штамп схеми (Залізо) +item.stamp_iron_flat.name=Плоский штамп (Залізо) +item.stamp_iron_plate.name=Штамп пластини (Залізо) +item.stamp_iron_wire.name=Штамп дроту (Залізо) +item.stamp_obsidian_circuit.name=Штамп схеми (Обсидіан) +item.stamp_obsidian_flat.name=Плоский штамп (Обсидіан) +item.stamp_obsidian_plate.name=Штамп пластини (Обсидіан) +item.stamp_obsidian_wire.name=Штамп дроту (Обсидіан) +item.stamp_steel_circuit.name=Штамп схеми (Сталь) +item.stamp_steel_flat.name=Плоский штамп (Сталь) +item.stamp_steel_plate.name=Штамп пластини (Сталь) +item.stamp_steel_wire.name=Штамп дроту (Сталь) +item.stamp_stone_circuit.name=Штамп схеми (Камінь) +item.stamp_stone_flat.name=Плоский штамп (Камінь) +item.stamp_stone_plate.name=Штамп пластини (Камінь) +item.stamp_stone_wire.name=Штамп дроту (Камінь) +item.stamp_titanium_circuit.name=Штамп схеми (Титан) +item.stamp_titanium_flat.name=Плоский штамп (Титан) +item.stamp_titanium_plate.name=Штамп пластини (Титан) +item.stamp_titanium_wire.name=Штамп дроту (Титан) +item.starmetal_axe.name=Сокира з зіркового металу +item.starmetal_boots.name=Чоботи з зіркового металу +item.starmetal_helmet.name=Шолом з зіркового металу +item.starmetal_hoe.name=Мотика з зіркового металу +item.starmetal_legs.name=Наголінники з зіркового металу +item.starmetal_pickaxe.name=Кайло з зіркового металу +item.starmetal_plate.name=Нагрудник з зіркового металу +item.starmetal_shovel.name=Лопата з зіркового металу +item.starmetal_sword.name=Меч з зіркового металу +item.static_sandwich.name=Сендвіч, прикрашений телевізійним шумом +item.stealth_boy.name=Стелс-бой +item.steamsuit_boots.name=Чоботи парового костюма +item.steamsuit_helmet.name=Шолом-респіратор парового костюма +item.steamsuit_legs.name=Наголінники парового костюма +item.steamsuit_plate.name=Нагрудник парового костюма +item.steel_axe.name=Сталева сокира +item.steel_boots.name=Сталеві черевики +item.steel_helmet.name=Сталевий шолом +item.steel_hoe.name=Сталева мотика +item.steel_legs.name=Сталеві наголінники +item.steel_pickaxe.name=Сталеве кайло +item.steel_plate.name=Сталевий нагрудник +item.steel_shovel.name=Сталева лопата +item.steel_sword.name=Сталевий меч +item.stick_c4.name=Шашка C-4 +item.stick_dynamite.name=Шашка динаміту +item.stick_dynamite_fishing.name=Шашка рибальського динаміту +item.stick_semtex.name=Шашка Семтексу +item.stick_tnt.name=Шашка тринітротолуолу (TNT) +item.stopsign.name=Бойова сокира зі знаку СТОП +item.sulfur.name=Сірка +item.survey_scanner.name=Дослідницький сканер +item.syringe_antidote.name=Антидот +item.syringe_awesome.name=ЧУДОВО +item.syringe_empty.name=Порожній шприц +item.syringe_metal_empty.name=Металевий шприц +item.syringe_metal_medx.name=Мед-X +item.syringe_metal_psycho.name=Психо +item.syringe_metal_stimpak.name=Стимулятор +item.syringe_metal_super.name=Суперстимулятор +item.syringe_mkunicorn.name=MKUNICORN +item.syringe_poison.name=Отруйна ін'єкція +item.syringe_taint.name=Ін'єкція водянистої порчі +item.t45_boots.name=Чоботи силової броні T-45 +item.t45_helmet.name=Шолом силової броні T-45 +item.t45_kit.name=Комплект силової броні T-45 +item.t45_legs.name=Наголінники силової броні T-45 +item.t45_plate.name=Нагрудник силової броні T-45 +item.tank_steel.name=Сталевий бак +item.taurun_boots.name=Taurun Boots +item.taurun_helmet.name=Taurun Helmet +item.taurun_legs.name=Taurun Leggings +item.taurun_plate.name=Taurun Chestplate +item.telepad.name=Telepad +item.tem_flakes.name=Пластівці Тем +item.template_folder.name=Папка шаблонів машин +item.template_folder.desc=Шаблони машин: папір + барвник$Ідентифікатор рідини: залізна пластина + барвник$Штампи пресу: плоский штамп$Трек сирениs: ізолятор + сталева пластина +item.test_nuke_igniter.name=Запальник +item.test_nuke_propellant.name=Кордитний заряд +item.test_nuke_tier1_bullet.name=Снаряд U235 (Tier 1) +item.test_nuke_tier1_shielding.name=Відбивач нейтронів (Tier 1) +item.test_nuke_tier1_target.name=Субкритична ціль U235 (Tier 1) +item.test_nuke_tier2_bullet.name=MOX Projectile (Tier 2) +item.test_nuke_tier2_shielding.name=Neutron Reflector (Tier 2) +item.test_nuke_tier2_target.name=Subcritical MOX Target (Tier 2) +item.thermo_element.name=Термоелектричний елемент +item.thermo_unit_empty.name=Thermic Distribution Unit +item.thermo_unit_endo.name=Coldness Distribution Unit +item.thermo_unit_exo.name=Heat Distribution Unit +item.thruster_large.name=Великий ракетний двигун +item.thruster_medium.name=Середній ракетний двигун +item.thruster_nuclear.name=Ядерний ракетний двигун LV-N +item.thruster_small.name=Малий ракетний двигун +item.titanium_axe.name=Титанова сокира +item.titanium_boots.name=Титанові чоботи +item.titanium_filter.name=Титановий фільтр +item.titanium_helmet.name=Титановий шолом +item.titanium_hoe.name=Титанова мотика +item.titanium_legs.name=Титанові наголінники +item.titanium_pickaxe.name=Титанове кайло +item.titanium_plate.name=Титановий нагрудник +item.titanium_shovel.name=Титанова лопата +item.titanium_sword.name=Титановий меч +item.toolbox.name=Ящик для інструментів +item.toolbox_legacy.name=Ящик для інструментів (LEGACY) +item.toothpicks.name=Зубочистки +item.train.cargo_tram.name=Електричний трамвай з плоскою платформою +item.trenchmaster_boots.name=Trenchmaster's Boots +item.trenchmaster_helmet.name=Trenchmaster's Helmet +item.trenchmaster_legs.name=Trenchmaster's Leggings +item.trenchmaster_plate.name=Trenchmaster's Chestplate +item.trinitite.name=Тринітит +item.tritium_deuterium_cake.name=Тритій-дейтерієвий пиріг +item.tritium_deuterium_cake.desc=Не справжній пиріг, але чудове$універсальне термоядерне паливо! +item.tsar_core.name=Ядро Цар-бомби +item.tsar_kit.name=Комплект Цар-бомби +item.turbine_titanium.name=Титанова парова турбіна +item.turbine_tungsten.name=Посилена турбіна турбовентилятора +item.turret_biometry.name=Turret Telemetry Card +item.turret_cheapo_ammo.name=6x24 Cheapo Turret Ammunition +item.turret_chip.name=ШІ-чіп турелі +item.turret_control.name=Turret Controller +item.turret_cwis_ammo.name=CIWS 20mm Ammo Drum +item.turret_flamer_ammo.name=Flamer Turret Fuel Tanks +item.turret_heavy_ammo.name=Heavy MG Turret Ammunition +item.turret_light_ammo.name=Light MG Turret Ammo Box +item.turret_rocket_ammo.name=Rocket Turret 2x4 Ammunition +item.turret_spitfire_ammo.name=AA-Shell +item.turret_tau_ammo.name=Tau Turret Uranium Ammo +item.twinkie.name=Твінкі +item.ullapool_caber.name=Алапульська колода +item.undefined.name=Невизначено +item.upgrade_5g.name=Покращення "Випромінювач 5G радіації" +item.upgrade_afterburn_1.name=Покращення "Форсаж" тип №1 +item.upgrade_afterburn_2.name=Покращення "Форсаж" тип №2 +item.upgrade_afterburn_3.name=Покращення "Форсаж" тип №3 +item.upgrade_centrifuge.name=Покращення "Центрифуга" +item.upgrade_crystallizer.name=Покращення "Кристалізатор" +item.upgrade_effect_1.name=Покращення "Ефективність" тип №1 +item.upgrade_effect_2.name=Покращення "Ефективність" тип №2 +item.upgrade_effect_3.name=Покращення "Ефективність" тип №3 +item.upgrade_ejector_1.name=Покращення витягувача "Швидкість" тип №1 +item.upgrade_ejector_2.name=Покращення витягувача "Швидкість" тип №2 +item.upgrade_ejector_3.name=Покращення витягувача "Швидкість" тип №3 +item.upgrade_fortune_1.name=Покращення "Вдача" тип №1 +item.upgrade_fortune_2.name=Покращення "Вдача" тип №2 +item.upgrade_fortune_3.name=Покращення "Вдача" тип №3 +item.upgrade_gc_speed.name=Покращення "Розгін газової центрифуги" +item.upgrade_health.name=Покращення випромінювача "Захист" +item.upgrade_muffler.name=Глушник +item.upgrade_nullifier.name=Покращення "Знищувач сміття" +item.upgrade_overdrive_1.name=Покращення "Перевантаження" тип №1 +item.upgrade_overdrive_2.name=Покращення "Перевантаження" тип №2 +item.upgrade_overdrive_3.name=Покращення "Перевантаження" тип №3 +item.upgrade_power_1.name=Покращення "Енергозбереження" тип №1 +item.upgrade_power_2.name=Покращення "Енергозбереження" тип №2 +item.upgrade_power_3.name=Покращення "Енергозбереження" тип №3 +item.upgrade_radius.name=Покращення випромінювача "Радіус" +item.upgrade_screm.name=Покращення "Кричущий вчений" +item.upgrade_shredder.name=Покращення "Подрібнювач" +item.upgrade_smelter.name=Покращення "Переплавка" +item.upgrade_speed_1.name=Покращення "Швидкість" тип №1 +item.upgrade_speed_2.name=Покращення "Швидкість" тип №2 +item.upgrade_speed_3.name=Покращення "Швидкість" тип №3 +item.upgrade_stack_1.name=Покращення витягувача "Стек" тип №1 +item.upgrade_stack_2.name=Покращення витягувача "Стек" тип №2 +item.upgrade_stack_3.name=Покращення витягувача "Стек" тип №3 +item.upgrade_template.name=Шаблон покращення машини +item.volcanic_axe.name=Розплавлена ​​сокира +item.volcanic_pickaxe.name=Розплавлене кайло +item.wand_d.name=Налагоджувальна паличка +item.wand_k.name=Будівельна паличка +item.wand_s.name=Структурна паличка +item.structure_custommachine.name=Custom Machine Structure Output Wand +item.warhead_buster_large.name=Велика бетонобійно-фугасна боєголовка +item.warhead_buster_medium.name=Середня бетонобійно-фугасна боєголовка +item.warhead_buster_small.name=Мала бетонобійно-фугасна боєголовка +item.warhead_cluster_large.name=Велика касетна боєголовка +item.warhead_cluster_medium.name=Середня кластерна боєголовка +item.warhead_cluster_small.name=Мала касетна боєголовка +item.warhead_generic_large.name=Велика боєголовка +item.warhead_generic_medium.name=Середня боєголовка +item.warhead_generic_small.name=Мала боєголовка +item.warhead_incendiary_large.name=Велика запальбвальна боєголовка +item.warhead_incendiary_medium.name=Середня запальбвальна боєголовка +item.warhead_incendiary_small.name=Мала запальбвальна боєголовка +item.warhead_mirv.name=Термоядерна боєголовка +item.warhead_mirvlet.name=MIRV +item.warhead_nuclear.name=Ядерна боєголовка +item.warhead_thermo_endo.name=Ендотермічна боєголовка +item.warhead_thermo_exo.name=Екзотермічна боєголовка +item.warhead_volcano.name=Тектонічна боєголовка +item.waste_mox.name=Збіднене МОКС-паливо +item.waste_natural_uranium.name=Збіднене природне уранове паливо +item.waste_plate_mox.name=Збіднена МОКС-паливна пластина +item.waste_plate_pu238be.name=Збіднена плутоній-238 берилієва пластина +item.waste_plate_pu239.name=Збіднена паливна пластина високозбагаченого плутонію-239 +item.waste_plate_ra226be.name=Збіднена радій-226 берилієва пластина +item.waste_plate_sa326.name=Збіднена паливна пластина високозбагаченого шрабідію-326 +item.waste_plate_u233.name=Збіднена паливна пластина високозбагаченого урану-233 +item.waste_plate_u235.name=Збіднена паливна пластина високозбагаченого урану-235 +item.waste_plutonium.name=Збіднене плутонієве паливо +item.waste_schrabidium.name=Збіднене шрабідієве паливо +item.waste_thorium.name=Збіднене торієве паливо +item.waste_u235.name=Збіднене паливо урану-235 +item.waste_u233.name=Збіднене паливо урану-233 +item.waste_uranium.name=Збіднене уранове паливо +item.waste_zfb_mox.name=Збіднений цирконієвий швидкий розмножувач МОКС-палива +item.watch.name=Зламаний кишеньковий годинник +item.watch.desc=Маленький синій кишеньковий годинник.$На його склі є кілька тріщин,$і бракує деяких осколків.$Він перестав цокати о 2:34. +item.watz_pellet.boron.name=Борна поглинаюча гранула +item.watz_pellet.du.name=Поглинаюча гранула зі збідненого урану +item.watz_pellet.hes.name=Ватцз гранула високозбагаченого шрабідію +item.watz_pellet.lead.name=Свинцева поглинаюча гранула +item.watz_pellet.les.name=Ватцз гранула низькозбагаченого шрабідію +item.watz_pellet.mes.name=Ватцз гранула середньозбагаченого шрабідію +item.watz_pellet.mep.name=Ватцз гранула середньозбагаченого плутонію +item.watz_pellet.meu.name=Ватцз гранула середньозбагаченого урану +item.watz_pellet.nqd.name=Enriched Naquadah Watz Pellet +item.watz_pellet.nqr.name=Naquadria Watz Pellet +item.watz_pellet.hen.name=Ватцз гранула високозбагаченого нептунію +item.watz_pellet.schrabidium.name=Ватцз гранула шрабідію +item.watz_pellet_depleted.boron.name=Борна поглинаюча гранула (Збіднена) +item.watz_pellet_depleted.du.name=Поглинаюча гранула зі збідненого урану (Збіднена) +item.watz_pellet_depleted.hes.name=Ватцз гранула високозбагаченого шрабідію (Збіднена) +item.watz_pellet_depleted.lead.name=Свинцева поглинаюча гранула (Збіднена) +item.watz_pellet_depleted.les.name=Ватцз гранула низькозбагаченого шрабідію (Збіднена) +item.watz_pellet_depleted.mes.name=Ватцз гранула середньозбагаченого шрабідію (Збіднена) +item.watz_pellet_depleted.mep.name=Ватцз гранула середньозбагаченого плутонію (Збіднена) +item.watz_pellet_depleted.meu.name=Ватцз гранула середньозбагаченого урану (Збіднена) +item.watz_pellet_depleted.nqd.name=Enriched Naquadah Watz Pellet (Depleted) +item.watz_pellet_depleted.nqr.name=Naquadria Watz Pellet (Depleted) +item.watz_pellet_depleted.hen.name=Ватцз гранула високозбагаченого нептунію (Збіднена) +item.watz_pellet_depleted.schrabidium.name=Ватцз гранула шрабідію (Збіднена) +item.wd40.name=VT-40 +item.weapon_bat.name=Стандарт Річарда +item.weapon_bat_nail.name=Кліше +item.weapon_golf_club.name=Клуб російських мафіозі +item.weapon_mod_caliber.bmg50.name=.50 BMG Комплект для переобладнання +item.weapon_mod_caliber.m357.name=.357 Magnum Комплект для переобладнання +item.weapon_mod_caliber.m44.name=.44 Magnum Комплект для переобладнання +item.weapon_mod_caliber.p22.name=.22 LR Комплект для переобладнання +item.weapon_mod_caliber.p45.name=.45 Комплект для переобладнання +item.weapon_mod_caliber.p9.name=9mm Комплект для переобладнання +item.weapon_mod_caliber.r556.name=5.56mm Комплект для переобладнання +item.weapon_mod_caliber.r762.name=7.62mm Комплект для переобладнання +item.weapon_mod_generic.bigmt_damage.name=Оптимізований сатурнітовий ресивер +item.weapon_mod_generic.bigmt_dura.name=Високоміцні сатурнітові деталі +item.weapon_mod_generic.bronze_damage.name=Оптимізований бронзовий ресивер +item.weapon_mod_generic.bronze_dura.name=Високоміцні бронзові деталі +item.weapon_mod_generic.desh_damage.name=Оптимізований деш ресивер +item.weapon_mod_generic.desh_dura.name=Високоміцні деш деталі +item.weapon_mod_generic.dura_damage.name=Оптимізований ресивер зі швидкорізальної сталі +item.weapon_mod_generic.dura_dura.name=Високоміцні деталізі швидкорізальної сталі +item.weapon_mod_generic.ferro_damage.name=Оптимізований фероурановий ресивер +item.weapon_mod_generic.ferro_dura.name=Високоміцні фероуранові деталі +item.weapon_mod_generic.iron_damage.name=Оптимізований залізний ресивер +item.weapon_mod_generic.iron_dura.name=Високоміцні залізні деталі +item.weapon_mod_generic.steel_damage.name=Оптимізований сталевий ресивер +item.weapon_mod_generic.steel_dura.name=Високоміцні сталеві деталі +item.weapon_mod_generic.tcalloy_damage.name=Оптимізований ресивер зі стійкого сплаву +item.weapon_mod_generic.tcalloy_dura.name=Високоміцні деталі зі стійкого сплаву +item.weapon_mod_generic.wsteel_damage.name=Оптимізований ресивер зі збройової сталі +item.weapon_mod_generic.wsteel_dura.name=Високоміцні деталі зі збройової сталі +item.weapon_mod_special.bayonet.name=Багнет +item.weapon_mod_special.choke.name=Чок +item.weapon_mod_special.furniture_black.name=Полімерне обладнання (Чорне) +item.weapon_mod_special.furniture_green.name=Полімерне обладнання (Зелене) +item.weapon_mod_special.greasegun.name=Комплект модернізації Маслянки +item.weapon_mod_special.las_auto.name=Автоматичний ресивер лазерної гвинтівки +item.weapon_mod_special.las_capacitor.name=Розширений конденсатор лазерної гвинтівки +item.weapon_mod_special.las_shotgun.name=Розділювач променя лазерної гвинтівки +item.weapon_mod_special.saw.name=Ножівка +item.weapon_mod_special.scope.name=Приціл +item.weapon_mod_special.silencer.name=Глушник +item.weapon_mod_special.skin_saturnite.name=Сатурнітовий скін +item.weapon_mod_special.slowdown.name=Зубчаста передача +item.weapon_mod_special.speedloader.name=Швидкий заряджувач +item.weapon_mod_special.speedup.name=Допоміжний електричний двигун +item.weapon_mod_special.stack_mag.name=Подвійний магазин +item.weapon_mod_test.damage.name=DAMAGE UPGRADE +item.weapon_mod_test.firerate.name=FIRE RATE UPGRADE +item.weapon_mod_test.multi.name=MULTI SHOT UPGRADE +item.weapon_mod_test.override_2_5.name=DAMAGE OVERRIDE (2.5) +item.weapon_mod_test.override_5.name=DAMAGE OVERRIDE (5) +item.weapon_mod_test.override_7_5.name=DAMAGE OVERRIDE (7.5) +item.weapon_mod_test.override_10.name=DAMAGE OVERRIDE (10) +item.weapon_mod_test.override_12_5.name=DAMAGE OVERRIDE (12.5) +item.weapon_mod_test.override_15.name=DAMAGE OVERRIDE (15) +item.weapon_mod_test.override_20.name=DAMAGE OVERRIDE (20) +item.weapon_pipe_lead.name=Ручне керування +item.weapon_pipe_rusty.name=Коректор поведінки +item.weapon_saw.name=Вбивство за сприяння лікаря +item.weaponized_starblaster_cell.name=§cЕнергетичний елемент Зоряного бластера§r +item.wild_p.name=Сухий віскі "Вайлд Пегас" +item.wings_limp.name=Мляві крила +item.wings_murk.name=Похмурі крила +item.wire_advanced_alloy.name=Надпровідник +item.wire_aluminium.name=Алюмінієвий дріт +item.wire_copper.name=Мідний дріт +item.wire_dense.name=Щільний дріт %s +item.wire_fine.name=Дріт %s +item.wire_gold.name=Золотий дріт +item.wire_magnetized_tungsten.name=4000K високотемпературний надпровідник +item.wire_red_copper.name=Червономідний дріт +item.wire_schrabidium.name=Шрабідієвий дріт +item.wire_tungsten.name=Вольфрамовий дріт +item.wiring_red_copper.name=Кабельна котушка +item.wood_gavel.name=Дерев'яний молоток +item.wrench.name=Трубний ключ +item.wrench_archineer.name=Гайковий ключ арчінера +item.wrench_flipped.name=Лезо на гайковому ключі +item.xanax.name=Ксанакс препарат від дігамми +item.xanax.desc=Прибирає 500mDRX дігамма опромінення +item.zirconium_legs.name=Цирконієві штани + +itemGroup.tabBlocks=NTM Руди та блоки +itemGroup.tabConsumable=NTM Витратні матеріали та спорядження +itemGroup.tabControl=NTM Елементи машин та паливо +itemGroup.tabMachine=NTM Машини +itemGroup.tabMissile=NTM Ракети та супутники +itemGroup.tabNuke=NTM Бомби +itemGroup.tabParts=NTM Ресурси та запчастини +itemGroup.tabTemplate=NTM Шаблони +itemGroup.tabTest=Nuclear Tech Mod Test Tab +itemGroup.tabWeapon=NTM Зброя та турелі + +pa.idle=Очікування +pa.idle.descОчікування +pa.running=Запущений +pa.running.desc=Запущений +pa.success=Завершено +pa.success.desc=Завершено +pa.pause_unloaded=Призупинений +pa.pause_unloaded.desc=Частинка потрапила до$вивантаженого чанка. Операцію призупинено$доки не будуть завантажені$як частинка, так і джерело частинок. +pa.crash_defocus=Розфокусування! +pa.crash_defocus.desc=Частинка втратила фокус.$Переконайтеся, що прискорювач має достатню кількість квадрупольних магнітів. +pa.crash_derail=Схід з рейок! +pa.crash_derail.desc=Частинка покинула прискорювач.$Переконайтеся, що всі деталі на місці,$і що диполі налаштовані правильно. +pa.crash_cannot_enter=Відмовлено! +pa.crash_cannot_enter.desc=Частинка намагалася потрапити$в деталь прискорювача, але не змогла.$Переконайтеся, що всі деталі орієнтовані правильно. +pa.crash_nocool=Відсутнє охолодження! +pa.crash_nocool.desc=Частинка потрапила в неохолоджувану$деталь прискорювача. Переконайтеся, що всі охолоджувані$деталі з'єднані та заповнені$холодним перфторметилом. +pa.crash_nopower=Відсутнє живлення! +pa.crash_nopower.desc=Частинка потрапила в знеструмлену$деталь прискорювача. Переконайтеся, що всі деталі$отримують живлення, і що джерело$живлення достатнє. +pa.crash_nocoil=Відсутні катушки! +pa.crash_nocoil.desc=Частинка потрапила в диполь$або квадруполь, у якому відсутні котушки.$Встановіть котушки, щоб ця деталь працювала. +pa.crash_overspeed=Перевищення швидкості! +pa.crash_overspeed.desc=Частинка увійшла в диполь$або квадруполь, а її швидкість перевищила$номінальну потужність котушки. Встановіть котушки$вищого рівня або налаштуйте диполі$так, щоб вони швидше залишали кільце прискорювача. +pa.crash_norecipe=Відсутній рецепт! +pa.crash_norecipe.desc=Частинка потрапила до детектора$з недійсним набором вхідних даних.$Переконайтеся, що вхідні дані джерела частинок$відповідають дійсному рецепту. +pa.crash_underspeed=Недостатня швидкість! +pa.crash_underspeed.desc=Частинка потрапила в детектор$з недостатньою швидкістю для$виконання поточного рецепту. Переконайтеся, що$прискорювач налаштовано$правильно для цього рецепту. + +potion.hbm_bang=! ! ! +potion.hbm_death=Астольфізація +potion.hbm_lead=Отруєння свинцем +potion.hbm_mutation=Отруєнне порчею сердце +potion.hbm_phosphorus=Фосфорні опіки +potion.hbm_potionsickness=Слабкість після ліків +potion.hbm_radaway=Антирадін +potion.hbm_radiation=Опромінення +potion.hbm_radx=Рад-X +potion.hbm_stability=Стабільність +potion.hbm_taint=Отруєння порчею +potion.hbm_telekinesis=! ! ! + +radar.clearMap=Очистити карту +radar.detectMissiles=Виявляти ракети +radar.detectPlayers=Виявляти гравців +radar.detectShells=Виявляти снаряди +radar.redMode=Редстоун режим$Ввімк: Вихідний редстоун сигнал залежить від дальності$Вимк: Вихідний редстоун сигнал залежить від рівня +radar.showMap=Відобразити карту +radar.smartMode=Розумний режим$Вихідний редстоун сигнал ігнорує висхідні ракети +radar.toggleGui=Переключити режим + +radar.target.abm=Протибалістична ракета +radar.target.custom10=Ракета 10-го розміру +radar.target.custom1015=Ракета 10/15 розміру +radar.target.custom15=Ракета 15-го розміру +radar.target.custom1520=Ракета 15/20 розміру +radar.target.custom20=Ракета 20-го розміру +radar.target.doomsday=Ракета Судного дня +radar.target.shuttle=Космічний корабель "Надійний Робін" +radar.target.tier0=Ракета 0-го рівня +radar.target.tier1=Ракета 1-го рівня +radar.target.tier2=Ракета 2-го рівня +radar.target.tier3=Ракета 3-го рівня +radar.target.tier4=Ракета 4-го рівня + +rbmk.heat=Температура каналу: %s +rbmk.boiler.water=Вода: %s / %s +rbmk.boiler.steam=Пара: %s / %s +rbmk.boiler.type=Стиснення: %s +rbmk.console.assign=Призначити обрані канали до екрану #%s +rbmk.console.none=Вимк. +rbmk.console.col_temp=Середня температура каналів +rbmk.console.rod_extraction=Середній вихід керуючих стрижнів +rbmk.console.fuel_depletion=Середнє збіднення палива +rbmk.console.fuel_poison=Середнє ксенонове отруєння +rbmk.console.fuel_temp=Середня температура палива +rbmk.control.level=%s +rbmk.control.red=§cЧервона група +rbmk.control.yellow=§eЖовта група +rbmk.control.green=§aЗелена група +rbmk.control.blue=§1Синя група +rbmk.control.purple=§5Фіолетова група +rbmk.moderated=Сповільнено +rbmk.rod.depletion=Збіднення: %s +rbmk.rod.xenon=Ксенонове отруєння: %s +rbmk.rod.coreTemp=Температура стрижня: %s +rbmk.rod.skinTemp=Температура оболонки стрижня: %s / %s +rbmk.screen.core=Ядро: %s +rbmk.screen.depletion=Збідн: %s +rbmk.screen.rod=Контроль: %s +rbmk.screen.temp=Темп: %s +rbmk.screen.xenon=Ксенон: %s + +shape.barrelHeavy=Важкий ствол +shape.barrelLight=Легкий ствол +shape.billet=Заготовка +shape.blade=Лопать +shape.blades=Леза подрібнювача +shape.block=Блок +shape.c9=Гільза малого калібру +shape.c50=Гільза великого калібру +shape.dust=Порошок +shape.dusttiny=Купка пилу +shape.grip=Рукоятка +shape.gunMechanism=Механізм +shape.hull_big=Велика оболонка +shape.hull_small=Мала оболонка +shape.ingot=Зливок +shape.nugget=Самородок +shape.quantum=Квант +shape.quart=Четвертина блоку +shape.receiverHeavy=Важкий ресивер +shape.receiverLight=Легкий ресивер +shape.ntmpipe=Труба +shape.plate=Пластина +shape.plateTriple=Лита пластина +shape.shell=Оболонка +shape.stamp=Штамп пресу +shape.stock=Приклад +shape.wireFine=Дроти +shape.wireDense=Щільний дріт +shape.wiresDense=Щільні дроти + +soundCategory.ntmMachines=NTM Machines + +stat.ntmBullets=Випущено набоїв +stat.ntmLegendary=Створено легендарних предметів +stat.ntmMines=Підривів на мінах + +tile.absorber.name=Поглинач радіації +tile.absorber_green.name=Удосконалений поглинач радіації +tile.absorber_pink.name=Елітний поглинач радіації +tile.absorber_red.name=Покращений поглинач радіації +tile.acid_block.name=Кислота +tile.ams_base.name=AMS Base (Deco) +tile.ams_emitter.name=AMS Emitter (Deco) +tile.ams_limiter.name=AMS Stabilizer (Deco) +tile.ancient_scrap.name=Стародавній металобрухт +tile.anvil_arsenic_bronze.name=Ковадло з миш'якової бронзи +tile.anvil_bismuth.name=Вісмутове ковадло +tile.anvil_bismuth_bronze.name=Ковадло з вісмутової бронзи +tile.anvil_desh.name=Деш ковадло +tile.anvil_dnt.name=Динейтронієве ковадло +tile.anvil_ferrouranium.name=Фероуранове ковадло +tile.anvil_iron.name=Залізне ковадло +tile.anvil_lead.name=Свинцеве ковадло +tile.anvil_meteorite.name=Метеоритне ковадло +tile.anvil_murky.name=Похмуре ковадло +tile.anvil_osmiridium.name=Ковадло з ссмистого іридію +tile.anvil_saturnite.name=Сатурнітове ковадло +tile.anvil_schrabidate.name=Ферошрабідатове ковадло +tile.anvil_starmetal.name=Ковадло з зіркового металу +tile.anvil_steel.name=Сталеве ковадло +tile.ash_digamma.name=Попіл +tile.asphalt.name=Асфальт +tile.asphalt_stairs.name=Асфальтові сходи +tile.asphalt_light.name=Світлоасфальт +tile.barbed_wire.name=Колючий дріт +tile.barbed_wire_acid.name=Їдкий колючий дріт +tile.barbed_wire_fire.name=Підпалюючий колючий дріт +tile.barbed_wire_poison.name=Отруєний колючий дріт +tile.barbed_wire_ultradeath.name=Радіоактивний колючий дріт +tile.barbed_wire_wither.name=Висушуючий колючий дріт +tile.barrel_antimatter.name=Магнітний контейнер для антиматерії +tile.barrel_corroded.name=Проржавіла бочка +tile.barrel_iron.name=Залізна бочка +tile.barrel_plastic.name=Безпечна бочка™ +tile.barrel_steel.name=Сталева бочка +tile.barrel_tcalloy.name=Бочка з технецієвої сталі +tile.barricade.name=Мішки з піском +tile.basalt.name=Базальт +tile.basalt_brick.name=Базальтова цегла +tile.basalt_polished.name=Полірований базальт +tile.basalt_smooth.name=Гладкий базальт +tile.basalt_tiles.name=Базальтові кахлі +tile.blast_door.name=Розсувні захисні двері +tile.block_actinium.name=Блок актинію +tile.block_advanced_alloy.name=Блок удосконаленого сплаву +tile.block_aluminium.name=Блок алюмінію +tile.block_asbestos.name=Блок азбесту +tile.block_australium.name=Блок австралію +tile.block_bakelite.name=Блок карболіту +tile.block_beryllium.name=Блок берилію +tile.block_bismuth.name=Блок вісмуту +tile.block_boron.name=Блок бору +tile.block_c4.name=Блок C-4 +tile.block_cadmium.name=Блок кадмію +tile.block_cap_fritz.name=Блок кришок від пляшок Фріц-Коли +tile.block_cap_korl.name=Блок кришок від пляшок Корлу +tile.block_cap_nuka.name=Блок кришок від пляшок Ядер-Коли +tile.block_cap_quantum.name=Блок кришок від пляшок Квантової Ядер-Коли +tile.block_cap_rad.name=Блок кришок від пляшок С~Коли РАД +tile.block_cap_sparkle.name=Блок кришок від пляшок С~Коли +tile.block_cap_star.name=Block of Sunset Sarsaparilla Star Caps +tile.block_cap_sunset.name=Block of Sunset Sarsaparilla Bottle Caps +tile.block_cdalloy.name=Блок кадмієвої сталі +tile.block_cobalt.name=Блок кобальту +tile.block_coke.coal.name=Блок вугільного коксу +tile.block_coke.lignite.name=Блок буровугільного коксу +tile.block_coke.petroleum.name=Блок нафтового коксу +tile.block_coltan.name=Блок колтану +tile.block_combine_steel.name=Блок сталі комбайнів +tile.block_copper.name=Блок міді +tile.block_corium.name=Коріум +tile.block_corium_cobble.name=Ядряк xd +tile.block_daffergon.name=Block of Daffergon +tile.block_desh.name=Посилений блок деш +tile.block_dineutronium.name=Блок динейтронію +tile.block_dura_steel.name=Посилений блок швидкорізальної сталі +tile.block_electrical_scrap.name=Блок зламаної електротехніки +tile.block_euphemium.name=Блок юхимію +tile.block_euphemium_cluster.name=Кластер шрабідію, витравленого юхимієм +tile.block_fallout.name=Блок радіоактивних опадів +tile.block_fiberglass.name=Рулон склопластику +tile.block_fluorite.name=Блок флюориту +tile.block_foam.name=Піна +tile.block_insulator.name=Рулон ізолятора +tile.block_graphite.name=Блок графіту +tile.block_graphite_detector.name=Нейтронний детектор дровітні +tile.block_graphite_drilled.name=Просвердлений графіт +tile.block_graphite_fuel.name=Паливо дровітні +tile.block_graphite_lithium.name=ЛІтієвий елемент дровітні +tile.block_graphite_plutonium.name=Паливо дровітні (готове) +tile.block_graphite_rod.name=Регулюючий стрижень дровітні +tile.block_graphite_source.name=Джерело нейтронів дровітні +tile.block_graphite_tritium.name=ЛІтієвий елемент дровітні (готовий) +tile.block_lead.name=Блок свинцю +tile.block_lanthanium.name=Блок лантану +tile.block_lithium.name=Блок літію +tile.block_magnetized_tungsten.name=Блок намагніченого вольфраму +tile.block_meteor.name=Метеоритний блок +tile.block_meteor_broken.name=Розбитий метеоритний блок +tile.block_meteor_cobble.name=Метеоритний кругляк +tile.block_meteor_molten.name=Гарячий метеоритний кругляк +tile.block_meteor_treasure.name=Блок метеоритних скарбів +tile.block_mox_fuel.name=Блок МОКС-палива +tile.block_neptunium.name=Блок нептунію +tile.block_niter.name=Блок нітрату калію +tile.block_niter_reinforced.name=Reinforced Block of Niter +tile.block_niobium.name=Блок ніобію +tile.block_plutonium.name=Блок плутонію +tile.block_plutonium_fuel.name=Блок плутонієвого палива +tile.block_polonium.name=Блок плутонію-210 +tile.block_polymer.name=Блок полімеру +tile.block_pu_mix.name=Блок реакторного плутонію +tile.block_pu238.name=Блок плутонію-238 +tile.block_pu239.name=Блок плутонію-239 +tile.block_pu240.name=Блок плутонію-240 +tile.block_ra226.name=Блок радію-226 +tile.block_red_copper.name=Блок червоної міді +tile.block_red_phosphorus.name=Блок червоного фосфору +tile.block_reiium.name=Block of Reiium +tile.block_rubber.name=Блок гуми +tile.block_schrabidate.name=Блок ферошрабідату +tile.block_schrabidium.name=Блок шрабідію +tile.block_schrabidium_cluster.name=Кластер шрабідію +tile.block_schrabidium_fuel.name=Блок шрабідієвого палива +tile.block_schraranium.name=Блок шраранію +tile.block_scrap.name=Блок брухту +tile.block_semtex.name=Блок Семтексу +tile.block_slag.name=Блок шлаку +tile.block_smore.name=Блок Смору +tile.block_solinium.name=Блок солінію +tile.block_starmetal.name=§9Блок зіркового металу§r +tile.block_steel.name=Блок сталі +tile.block_sulfur.name=Блок сірки +tile.block_tantalium.name=Блок танталу +tile.block_tcalloy.name=Блок технецієвої сталі +tile.block_thorium.name=Блок торію-232 +tile.block_thorium_fuel.name=Блок торієвого палива +tile.block_titanium.name=Блок титану +tile.block_trinitite.name=Блок тринітиту +tile.block_tritium.name=Блок трітієвих пробірок +tile.block_tungsten.name=Блок вольфраму +tile.block_u233.name=Блок урану-233 +tile.block_u235.name=Блок урану-235 +tile.block_u238.name=Блок урану-238 +tile.block_unobtainium.name=Block of Unobtainium +tile.block_uranium.name=Блок урану +tile.block_uranium_fuel.name=Блок уранового палива +tile.block_verticium.name=Block of Verticium +tile.block_waste.name=Блок ядерних відходів +tile.block_waste_painted.name=Пофарбований блок ядерних відходів +tile.block_waste_vitrified.name=Засклований блок ядерних відходів +tile.block_weidanium.name=Block of Weidanium +tile.block_white_phosphorus.name=Блок білого фосфору +tile.block_yellowcake.name=Блок Єлоукейку +tile.block_zirconium.name=Блок цирконію +tile.boat.name=Човен +tile.bobblehead.name=Хитайголова +tile.bomb_multi.name=Багатоцільова бомба +tile.bomber.name=Crashed Bomber +tile.book_guide.name=Hbm's Nuclear Tech Mod Manual [LEGACY] +tile.boxcar.name=Вантажний вагон +tile.brick_asbestos.name=Азбестова цегла +tile.brick_asbestos_stairs.name=Сходи з азбестової цегли +tile.brick_compound.name=Комбінована сітка +tile.brick_compound_stairs.name=Сходи з комбінованої сітки +tile.brick_concrete.name=Бетонна цегла +tile.brick_concrete_stairs.name=Сходи з бетонної цегли +tile.brick_concrete_broken.name=Розбита бетонна цегла +tile.brick_concrete_broken_stairs.name=Сходи з розбитої бетонної цегли +tile.brick_concrete_cracked.name=Тріснута бетонна цегла +tile.brick_concrete_cracked_stairs.name=Сходи з тріснутої бетонної цегли +tile.brick_concrete_marked.name=Пописана бетонна цегла +tile.brick_concrete_mossy.name=Бетонна цегла з мохом +tile.brick_concrete_mossy_stairs.name=Сходи з моховитої бетонної цегли +tile.brick_ducrete.name=Уранобетонна цегла +tile.brick_ducrete_stairs.name=Сходи з уранобетонної цегли +tile.brick_dungeon.name=Berzelianite Bricks +tile.brick_dungeon_circle.name=Berzelianite Cirlce +tile.brick_dungeon_flat.name=Berzelianite Block +tile.brick_dungeon_tile.name=Berzelianite Tile +tile.brick_fire.name=Вогнетривка цегла +tile.brick_fire_stairs.name=Сходи з вогнетривкої цегли +tile.brick_jungle.name=Енаргітова цегла +tile.brick_jungle_circle.name=Коло Механіста +tile.brick_jungle_cracked.name=Тріснута енаргітова цегла +tile.brick_jungle_fragile.name=Крихка енаргітова цегла +tile.brick_jungle_glyph.name=Енаргітова цегла з гліфом +tile.brick_jungle_lava.name=Магматична енаргітова цегла +tile.brick_jungle_mystic.name=Таємнича енаргітова цегла +tile.brick_jungle_ooze.name=Радіоактивна енаргітова цегла +tile.brick_jungle_trap.name=Енаргітова цегла з пасткою +tile.brick_light.name=Світла цегла +tile.brick_light_stairs.name=Сходи зі світлої цегли +tile.brick_obsidian.name=Обсидіанова цегла +tile.brick_obsidian_stairs.name=Сходи з обсидіанової цегли +tile.brick_red.name=Цегла червоної кімнати +tile.brick_slab.brick_asbestos.name=Плита з азбестової цегли +tile.brick_slab.brick_compound.name=Плита з комбінованої сітки +tile.brick_slab.brick_fire.name=Плита з вогнетривкої цегли +tile.brick_slab.brick_light.name=Плита зі світлої цегли +tile.brick_slab.brick_obsidian.name=Плита з обсидіанової цегли +tile.brick_slab.reinforced_brick.name=Плита з армованого каменю +tile.brick_slab.reinforced_stone.name=Плита з щільного каменю +tile.broadcaster_pc.name=Пошкоджене радіо +tile.burning_earth.name=Випалена трава +tile.c4.name=C-4 +tile.cable_detector.name=Редстоун перемикач живлення +tile.cable_diode.name=Червономідний діод +tile.cable_switch.name=Перемикач живлення +tile.capacitor_bus.name=Конденсаторна шина +tile.capacitor_bus.desc=Вихідний блок для конденсаторів$Можна з'єднати у пряму лінію +tile.capacitor_copper.name=Мідний конденсатор +tile.capacitor_gold.name=Золотий конденсатор +tile.capacitor_niobium.name=Ніобієвий конденсатор +tile.capacitor_schrabidate.name=Шрабідатовий конденсатор +tile.capacitor_tantalium.name=Танталовий конденсатор +tile.capacitor.desc=Вхід: Згори$Вихід: знизу, через конденсаторну шину +tile.charge_c4.name=Заряд С-4 +tile.charge_dynamite.name=Бомба уповільненої дії +tile.charge_miner.name=Шахтарський заряд уповільненої дії +tile.charge_semtex.name=Семтекс заряд уповільненої дії +tile.charger.name=Зарядна станція +tile.cheater_virus.name=Gelid Euphemium +tile.cheater_virus_seed.name=Unstable Euphemium Schrabide Block +tile.chimney_brick.name=Димова труба +tile.chimney_brick.desc=Підключається до забруднюючих машин$ за допомогою вихлопних труб$Зменшує викиди забруднюючих речовин на 75%% +tile.chimney_industrial.name=Промислова димова труба +tile.chimney_industrial.desc=Підключається до забруднюючих машин$ за допомогою вихлопних труб$Зменшує викиди забруднюючих речовин на 90%% +tile.chlorine_gas.name=Хлорний газ +tile.cluster_aluminium.name=Кластер алюмінієвої руди +tile.cluster_copper.name=Кластер мідної руди +tile.cluster_depth_iron.name=Глибинний кластер залізної руди +tile.cluster_depth_titanium.name=Глибинний кластер титанової руди +tile.cluster_depth_tungsten.name=Глибинний кластер вольфрамової руди +tile.cluster_iron.name=Кластер залізної руди +tile.cluster_titanium.name=Кластер титанової руди +tile.custom_machine_anchor.name=Якір позиціонування конструкції кастомної машини +tile.cm_block.alloy.name=Корпус машини з удосконаленого сплаву (CM) +tile.cm_block.desh.name=Деш корпус машини (CM) +tile.cm_block.steel.name=Сталевий корпус машини (CM) +tile.cm_block.tcalloy.name=Корпус машини з технецієвої сталі (CM) +tile.cm_circuit.aluminium.name=Блок схема 1 рівня (CM) +tile.cm_circuit.copper.name=Блок схема 2 рівня (CM) +tile.cm_circuit.gold.name=Блок схема 4 рівня (CM) +tile.cm_circuit.red_copper.name=Блок схема 3 рівня (CM) +tile.cm_circuit.schrabidium.name=Блок схема 5 рівня (CM) +tile.cm_engine.bismuth.name=Вісмутовий моторний блок (CM) +tile.cm_engine.desh.name=Деш моторний блок (CM) +tile.cm_engine.standard.name=Моторний блок (CM) +tile.cm_flux.name=Приймач потоку нейтронів (CM) +tile.cm_heat.name=Теплоприймач (CM) +tile.cm_port.alloy.name=Порт з удосконаленого сплаву (CM) +tile.cm_port.desh.name=Деш порт (CM) +tile.cm_port.steel.name=Сталевий порт (CM) +tile.cm_port.tcalloy.name=Порт з технецієвої сталі (CM) +tile.cm_sheet.alloy.name=Лист з удосконаленого сплаву (CM) +tile.cm_sheet.desh.name=Деш лист (CM) +tile.cm_sheet.steel.name=Сталевий лист (CM) +tile.cm_sheet.tcalloy.name=Лист з технецієвої сталі (CM) +tile.cm_tank.alloy.name=Бак з удосконаленого сплаву (CM) +tile.cm_tank.desh.name=Деш бак (CM) +tile.cm_tank.steel.name=Сталевий бак (CM) +tile.cm_tank.tcalloy.name=Бак з технецієвої сталі (CM) +tile.cmb_brick.name=Плитка зі сталі комбайнів +tile.cmb_brick_reinforced.name=Армована цегла комбайнів +tile.compact_launcher.name=Компактний стартовий майданчик +tile.concrete.name=Бетонна плитка +tile.concrete_asbestos.name=Азбестобетон +tile.concrete_asbestos_stairs.name=Сходи з азбестобетону +tile.concrete_brick_slab.brick_concrete.name=Плита з бетонної цегли +tile.concrete_brick_slab.brick_concrete_broken.name=Плита з розбитої бетонної цегли +tile.concrete_brick_slab.brick_concrete_cracked.name=Плита з тріснутої бетонної цегли +tile.concrete_brick_slab.brick_concrete_mossy.name=Плита з моховитої бетонної цегли +tile.concrete_brick_slab.brick_ducrete.name=Плита з уранобетонової цегли +tile.concrete_colored.black.name=Чорний бетон +tile.concrete_colored.blue.name=Синій бетон +tile.concrete_colored.brown.name=Коричневий бетон +tile.concrete_colored.cyan.name=Бірюзовий бетон +tile.concrete_colored.gray.name=Сірий бетон +tile.concrete_colored.green.name=Зелений бетон +tile.concrete_colored.lightBlue.name=Блакитний бетон +tile.concrete_colored.lime.name=Світло-зелений бетон +tile.concrete_colored.magenta.name=Пурпуровий бетон +tile.concrete_colored.orange.name=Помаранчевий бетон +tile.concrete_colored.pink.name=Рожевий бетон +tile.concrete_colored.purple.name=Фіолетовий бетон +tile.concrete_colored.red.name=Червоний бетон +tile.concrete_colored.silver.name=Світло-сірий бетон +tile.concrete_colored.white.name=Білий бетон +tile.concrete_colored.yellow.name=Жовтий бетон +tile.concrete_colored_ext.bronze.name=Бетон "Вибір будівельника" - Бронзове покриття +tile.concrete_colored_ext.hazard.name=Бетон "Вибір будівельника" - Смуги небезпеки +tile.concrete_colored_ext.indigo.name=Бетон "Вибір будівельника" - Глибокий індиго +tile.concrete_colored_ext.machine.name=Бетон "Вибір будівельника" - Промисловий відтінок +tile.concrete_colored_ext.machine_stripe.name=Бетон "Вибір будівельника" - Промислова смуга +tile.concrete_colored_ext.pink.name=Бетон "Вибір будівельника" - Мужній рожевий +tile.concrete_colored_ext.purple.name=Бетон "Вибір будівельника" - Таємничий фіолетовий +tile.concrete_colored_ext.sand.name=Бетон "Вибір будівельника" - Буря в пустелі +tile.concrete_pillar.name=Армована залізобетонна колона +tile.concrete_slab.asphalt.name=Плита з асфальту +tile.concrete_slab.concrete.name=Плита з бетонної плитки +tile.concrete_slab.concrete_asbestos.name=Плита з азбестобетону +tile.concrete_slab.concrete_smooth.name=Плита з бетону +tile.concrete_slab.ducrete.name=Плита з уранобетонної плитки +tile.concrete_slab.ducrete_smooth.name=Плита з уранобетону +tile.concrete_smooth.name=Бетон +tile.concrete_smooth_stairs.name=Сходи з бетону +tile.concrete_stairs.name=Сходи з бетонної плитки +tile.concrete_super.name=Убербетон +tile.concrete_super_broken.name=Запліснявілі уламки +tile.conveyor.name=Conveyor Belt +tile.conveyor.desc=Moves items dropped on it$Can be rotated clockwise with a screwdriver$Shift-click with screwdriver to bend +tile.conveyor_chute.name=Conveyor Chute +tile.conveyor_chute.desc=Moves items down$The bottom-most chute will act like a regular conveyor belt +tile.conveyor_double.name=Double-Lane Conveyor Belt +tile.conveyor_double.desc=Moves items dropped on it$Can be rotated clockwise with a screwdriver$Shift-click with screwdriver to bend +tile.conveyor_express.name=Express Conveyor Belt +tile.conveyor_express.desc=Moves items dropped on it very fast$Can be rotated clockwise with a screwdriver$Shift-click with screwdriver to bend +tile.conveyor_lift.name=Conveyor Chain Lift +tile.conveyor_lift.desc=Moves items up$Requires at least two blocks on top of each other to work properly +tile.conveyor_triple.name=Triple-Lane Conveyor Belt +tile.conveyor_triple.desc=Moves items dropped on it$Can be rotated clockwise with a screwdriver$Shift-click with screwdriver to bend +tile.corium_block.name=Коріум +tile.crane_boxer.name=Конвеєрний пакувальник +tile.crane_boxer.desc=Пакує налаштовану кількість стаків у коробки та розміщує їх на конвеєрних стрічках$Клацніть правою кнопкою миші за допомогою викрутки, щоб встановити сторону введення$Клацніть з шифтом за допомогою викрутки, щоб встановити сторону виведення$Клацніть двічі, щоб встановити протилежну сторону +tile.crane_extractor.name=Конвеєрний витягувач +tile.crane_extractor.desc=Бере предмети з контейнеру та розміщує їх на конвеєрних стрічках$Має до 9 слотів для фільтрів з чорним та білим списками$Клацніть правою кнопкою миші за допомогою викрутки, щоб встановити сторону виведення$Клацніть з шифтом за допомогою викрутки, щоб встановити сторону введення$Клацніть двічі, щоб встановити протилежну сторону +tile.crane_grabber.name=Конвеєрний збирач +tile.crane_grabber.desc=Збирає предмети з конвеєрів що проходять та розміщує їх у контейнер$Буде брати предмети лише з найближчої стрічки$Має до 9 слотів для фільтрів з чорним та білим списками$Клацніть правою кнопкою миші за допомогою викрутки, щоб встановити сторону введення$Клацніть з шифтом за допомогою викрутки, щоб встановити сторону виведення$Клацніть двічі, щоб встановити протилежну сторону +tile.crane_inserter.name=Конвеєрний вставник +tile.crane_inserter.desc=Приймає предмети з конвеєру та розміщує їх у контейнеру$Клацніть правою кнопкою миші за допомогою викрутки, щоб встановити сторону введення$Клацніть з шифтом за допомогою викрутки, щоб встановити сторону виведення$Клацніть двічі, щоб встановити протилежну сторону +tile.crane_partitioner.name=Розділювач входу окислювача +tile.crane_partitioner.desc=Receives and stores up to nine Ore Acidizer inputs$and releases them if they match the required input size.$Invalid items are also saved, and need to be extracted from the side. $ я не їбу що це +tile.crane_router.name=Конвеєрний сортувальник +tile.crane_router.desc=Сортує предмети на основі визначених критеріїв$Сторони можна визначити як чорний список, білий список або все інше$Сторона з усім іншим обирається лише тоді коли нема збігів у фільтрах +tile.crane_splitter.name=Конвеєрний роздільник +tile.crane_splitter.desc=Розділяє предмети та рівномірно складає їх на дві конвеєрні стрічки$Є конвеєрною стрічкою, тому може безпосередньо з'єднуватись з вставником або сортувальником$Співвідношення можна налаштувати за допомогою викрутки +tile.crane_unboxer.name=Конвеєрний розпакувальник +tile.crane_unboxer.desc=Приймає коробки та витягує їх вміст$Клацніть правою кнопкою миші за допомогою викрутки, щоб встановити сторону виведення$Клацніть з шифтом за допомогою викрутки, щоб встановити сторону введення$Клацніть двічі, щоб встановити протилежну сторону +tile.crashed_bomb.name=Невибухнувша бомба +tile.crate.name=Ящик з припасами +tile.crate_ammo.name=Ящик з зоряного металу +tile.crate_can.name=Ящик з консервами +tile.crate_desh.name=Деш ящик +tile.crate_iron.name=Залізний ящик +tile.crate_jungle.name=Енаргітовий ящик +tile.crate_lead.name=Ящик з небезпечними матеріалами +tile.crate_metal.name=Ящик з механізмами +tile.crate_red.name=Червоний ящик +tile.crate_steel.name=Сталевий ящик +tile.crate_supply.name=Ящик з припасами +tile.crate_template.name=Ящик з шаблонами +tile.crate_tungsten.name=Вольфрамовий ящик +tile.crate_weapon.name=Ящик зі зброєю +tile.crystal_hardened.name=Загартований темний кристал +tile.crystal_pulsar.name=Пульсуючий кристал +tile.crystal_virus.name=Темний кристал +tile.deco_aluminium.name=Алюмінієвий декоративний блок +tile.deco_asbestos.name=Азбестоцементний шифер +tile.deco_beryllium.name=Берилієвий декоративний блок +tile.deco_computer.ibm_300pl.name=Персональний комп'ютер IBM PC 300PL +tile.deco_crt.name=Старий ЕПТ екран +tile.deco_emitter.name=Декоративний випромінювач світла +tile.deco_lead.name=Свинцевий декоративний блок +tile.deco_loot.name=Купа скарбів +tile.deco_rbmk.name=Декоративний блок РБМК +tile.deco_rbmk_smooth.name=Гладкий декоративний блок РБМК +tile.deco_red_copper.name=Червономідний декоративний блок +tile.deco_pipe.name=Сталева труба +tile.deco_pipe_rusted.name=Іржава сталева труба +tile.deco_pipe_green.name=Зелена сталева труба +tile.deco_pipe_green_rusted.name=Іржава зелена сталева труба +tile.deco_pipe_red.name=Червона сталева труба +tile.deco_pipe_marked.name=Газова труба +tile.deco_pipe_framed.name=Сталева труба (Каркасна) +tile.deco_pipe_framed_rusted.name=Іржава сталева труба (Каркасна) +tile.deco_pipe_framed_green.name=Зелена сталева труба (Каркасна) +tile.deco_pipe_framed_green_rusted.name=Іржава зелена сталева труба (Каркасна) +tile.deco_pipe_framed_red.name=Червона сталева труба (Каркасна) +tile.deco_pipe_framed_marked.name=Газова труба (Каркасна) +tile.deco_pipe_quad.name=Сталеві труби +tile.deco_pipe_quad_rusted.name=Іржаві сталеві труби +tile.deco_pipe_quad_green.name=Зелені сталеві труби +tile.deco_pipe_quad_green_rusted.name=Іржаві зелені сталеві труби +tile.deco_pipe_quad_red.name=Червоні сталеві труби +tile.deco_pipe_quad_marked.name=Газові труби +tile.deco_pipe_rim.name=Сталева труба (Обрамлена) +tile.deco_pipe_rim_rusted.name=Іржава сталева труба (Обрамлена) +tile.deco_pipe_rim_green.name=Зелена сталева труба (Обрамлена) +tile.deco_pipe_rim_green_rusted.name=Іржава зелена сталева труба (Обрамлена) +tile.deco_pipe_rim_red.name=Червона сталева труба (Обрамлена) +tile.deco_pipe_rim_marked.name=Газова труба (Обрамлена) +tile.deco_steel.name=Сталевий декоративний блок +tile.deco_rusty_steel.name=Іржавий сталевий декоративний блок +tile.deco_titanium.name=Титановий декоративний блок +tile.deco_toaster.name=Зламаний тостер +tile.deco_tungsten.name=Вольфрамовий декоративний блок +tile.decon.name=Знезаражувач гравця +tile.depth_brick.name=Глибинна цегла +tile.depth_dnt.name=Посилена динейтронієм глибинна цегла +tile.depth_nether_brick.name=Пекельна глибинна цегла +tile.depth_nether_tiles.name=Пекельна глибинна плитка +tile.depth_tiles.name=Глибинна плитка +tile.det_charge.name=Вибуховий заряд +tile.det_cord.name=Детонуючий шнур +tile.det_miner.name=Шахтарський заряд +tile.det_nuke.name=Ядерний заряд +tile.dfc_core.name=Ядро реактору темного синтезу +tile.dfc_emitter.name=Випромінювач рекатору темного синтезу +tile.dfc_injector.name=Паливний інжектор рекатору темного синтезу +tile.dfc_receiver.name=Приймач рекатору темного синтезу +tile.dfc_stabilizer.name=Стабілізатор рекатору темного синтезу +tile.dirt_dead.name=Мертвий ґрунт +tile.dirt_oily.name=Нафтовий ґрунт +tile.drill_pipe.name=Бурильна труба +tile.drone_crate.name=Ящик для транспортних дронів +tile.drone_crate.desc=Пункт завантаження та розвантаження транспортних дронів.$Діє як маршрутна точка, має бути пов’язана з лінкером дронів.$Дрони повинні підлітати під великим кутом, інакше вони застрягнуть. +tile.drone_crate_provider.name=Ящик логістичний постачальник +tile.drone_crate_provider.desc=Пропонує предмети логістичній мережі.$Логістичні дрони намагатимуться переміщувати предмети від постачальників до ящиків замовників. +tile.drone_crate_requester.name=Ящик логічстичний замовник +tile.drone_crate_requester.desc=Запитує предмети з логістичної мережі.$Предмети, додані до фільтра, будуть замовлені, якщо їх немає в інвентарі. +tile.drone_dock.name=Док логістичних дронів +tile.drone_dock.desc=Точка появи логістичних дронів.$Може виявляти лише постачальників та запитувачів у радіусі 5 чанків.$Дрони відстежуватимуть лише до 10 маршрутних точок за з'єднання. +tile.drone_waypoint.name=Точка маршруту транспортних дронів +tile.drone_waypoint.desc=Точка маршруту для транспортних дронів$Використовуйте лінкер транспортних дронів, щоб встановити шлях$Клацніть кожну маршрутну точку та ящик послідовно, щоб створити шлях,$потім клацніть з шифтом, щоб очистити збережену позицію$Клацніть правою кнопкою миші або з шифтом по маршрутній точці, щоб змінити її зміщення +tile.drone_waypoint_request.name=Точка маршруту логістичних дронів +tile.door_bunker.name=Бункерні двері +tile.door_metal.name=Металеві двері +tile.door_office.name=Офісні двері +tile.door_red.name=Червоні двері +tile.ducrete.name=Уранобетонна плитка +tile.ducrete_stairs.name=Сходи з уранобетонної плитки +tile.ducrete_smooth.name=Уранобетон +tile.ducrete_smooth_stairs.name=Сходи з уранобетону +tile.dummy_block.name=Dummy Block +tile.dummy_port.name=Dummy Block (Electricity Port) +tile.dungeon_chain.name=Металевий ланцюг +tile.dynamite.name=Динаміт +tile.emp_bomb.name=Пристрій електромагнітного іпульсу +tile.factory_advanced_conductor.name=Advanced Factory Electricity Port +tile.factory_advanced_core.name=Advanced Factory Core Component +tile.factory_advanced_furnace.name=Advanced Factory Access Hatch +tile.factory_advanced_hull.name=Заводський блок +tile.factory_titanium_conductor.name=Basic Factory Electricity Port +tile.factory_titanium_core.name=Basic Factory Core Component +tile.factory_titanium_furnace.name=Basic Factory Access Hatch +tile.factory_titanium_hull.name=Заводський блок +tile.fallout.name=Радіоактивні опади +tile.fan.name=Вентилятор +tile.fan.desc=Активується за допомогою редстоуну$Піднімає об'єкти на 10 блоків$Клацніть правою кнопкою миші викруткою, щоб перевернути +tile.fence_metal.name=Огорожа рабиця +tile.fence_metal_post.name=Огорожа рабиця стовп +tile.field_disturber.name=Заглушник високоенергетичного поля +tile.filing_cabinet.green.name=Запилена картотечна шафа +tile.filing_cabinet.steel.name=Сталева картотечна шафа +tile.fire_digamma.name=Затяжна Дігамма +tile.fire_door.name=Протипожежні двері +tile.fireworks.name=Батарея феєрверків +tile.fireworks.charges=Завантажено зарядів: %s +tile.fireworks.message=Повідомлення: %s +tile.fireworks.color=Колір: %s +tile.fissure_bomb.name=Бомба фісура +tile.flame_war.name=Полум'яна війна в коробці +tile.float_bomb.name=Левітаційна бомба +tile.floodlight.name=Потужний прожектор +tile.fluid_duct.name=Універсальний рідинний трубопровід (Застаріло) +tile.fluid_duct_box.name=Універсальний рідинний трубопровід (Boxduct) +tile.fluid_duct_exhaust.name=Вихлопна труба +tile.fluid_duct_gauge.name=Вимірювальна труба +tile.fluid_duct_gauge.desc=Труба, що показує, скільки рідини$переміщується в мережі за один тік.$Розділені мережі, з'єднані бочками$або цистернами, вважаються однією спільною мережею. +tile.fluid_duct_neo.name=Універсальний рідинний трубопровід +tile.fluid_duct_paintable.name=Універсальний рідинний трубопровід з покриттям +tile.fluid_duct_solid.name=Універсальний рідинний трубопровід з покриттям (Застаріло) +tile.fluid_pump.name=Насос регулювання потоку +tile.fluid_switch.name=Редстоун рідинний клапан +tile.fluid_valve.name=Рідинний клапан +tile.foam_layer.name=Шар піни +tile.foundry_basin.name=Ливарний басейн +tile.foundry_channel.name=Ливарний канал +tile.foundry_tank.name=Ливарний зберігальний басейн +tile.foundry_mold.name=Малий ливарний басейн +tile.foundry_outlet.name=Ливарний вихід +tile.foundry_slagtap.name=Ливарний вихід для шлаку +tile.fraction_spacer.name=Розділювач ректифікаційної колони +tile.frozen_dirt.name=Замерзлий ґрунт +tile.frozen_grass.name=Замерзла трава +tile.frozen_log.name=Замерзле дерево +tile.frozen_planks.name=Замерзлі дошки +tile.machine_furnace_brick_off.name=Цегляна піч +tile.machine_furnace_brick_on.name=Цегляна піч +tile.furnace_combination.name=Коксова піч +tile.furnace_combination.desc=Велика піч, яка може виробляти деревне вугілля та вугільний кокс.$Виробляє рідкі побічні продукти.$Швидкість теплопередачі: ΔT*0.25 TU/t +tile.furnace_iron.name=Залізна піч +tile.furnace_iron.desc=Більша та ефективніша піч,$не витрачає паливо, коли не працює. +tile.furnace_steel.name=Сталева піч +tile.furnace_steel.desc=Дуже велика піч, яка може давати бонусні предмети$під час плавлення руд. Потрібне зовнішнє джерело тепла.$Швидкість теплопередачі: ΔT*0.05 TU/t$(Δ означає різницю, а T означає температуру) +tile.fusion_center.name=Центральний магнітний елемент +tile.fusion_conductor.name=Надпровідний магніт +tile.fusion_conductor_welded.name=Надпровідний магніт (Зварений) +tile.fusion_core.name=Управління термоядерним реактором +tile.fusion_hatch.name=Декоративний люк +tile.fusion_heater.name=Компонент нагрівача плазми +tile.fusion_motor.name=Елемент магнітного двигуна +tile.fwatz_computer.name=Fusionary Watz Reactor Calculation Matrix +tile.fwatz_conductor.name=4000K Superconducting Magnet +tile.fwatz_cooler.name=Regenerative Coolant Fluid Tank Shell +tile.fwatz_core.name=Fusionary Watz Reactor Control +tile.fwatz_hatch.name=Fusionary Watz Plant Access Hatch +tile.fwatz_plasma.name=Destabilized Antischrabidium Plasma +tile.fwatz_scaffold.name=Fusionary Watz Plant Structural Support +tile.fwatz_tank.name=Regenerative Coolant Fluid Tank +tile.gas_asbestos.name=Частинки азбесту в повітрі +tile.gas_coal.name=Вугільний пил в повітрі +tile.gas_duct.name=Газова труба +tile.gas_duct_solid.name=Газова труба з покриттям +tile.gas_explosive.name=Вибухонебезпечний газ +tile.gas_flammable.name=Легкозаймистий газ +tile.gas_meltdown.name=Розплавляючий газ +tile.gas_monoxide.name=Чадний газ +tile.gas_radon.name=Радон +tile.gas_radon_dense.name=Щільний радон +tile.gas_radon_tomb.name=Могильний газ +tile.geiger.name=Лічильник Гейгера +tile.glass_ash.name=Попелясте скло +tile.glass_boron.name=Борне скло +tile.glass_lead.name=Свинцеве скло +tile.glass_polonium.name=Полонієве скло +tile.glass_quartz.name=Кварцове скло +tile.glass_trinitite.name=Тринітитове скло +tile.glass_uranium.name=Уранове скло +tile.glyphid_base.name=Блок вулика гліфідів +tile.glyphid_spawner.name=Спавнер вулика гліфідів +tile.gneiss_brick.name=Сланцева цегла +tile.gneiss_chiseled.name=Точений сланець +tile.gneiss_tile.name=Сланцева плитка +tile.gravel_diamond.name=Алмазний гравій +tile.gravel_obsidian.name=Подрібнений обсидіан +tile.hadron_access.name=Термінал доступу до прискорювача частинок +tile.hadron_analysis.name=Стінка камери аналізу прискорювача частинок +tile.hadron_analysis_glass.name=Вікно камери аналізу прискорювача частинок +tile.hadron_coil_alloy.name=Щільна надпровідна котушка +tile.hadron_coil_chlorophyte.name=Щільна хлорофітова котушка +tile.hadron_coil_gold.name=Щільна золота котушка +tile.hadron_coil_magtung.name=Щільна 4000K надпровідна котушка +tile.hadron_coil_mese.name=Щільна месе котушка +tile.hadron_coil_neodymium.name=Щільна неодимова котушка +tile.hadron_coil_schrabidate.name=Щільна шрабідатова котушка +tile.hadron_coil_schrabidium.name=Щільна шрабідієва котушка +tile.hadron_coil_starmetal.name=Щільна котушка з зіркового металу +tile.hadron_cooler.name=Блок охолодження прискорювача частинок +tile.hadron_cooler.desc=Cooling power: 10$Overcooling threshold: 10$Cooling bonus: +10%%$Overcooling penalty: -25%% +tile.hadron_cooler_mk2.name=Particle Accelerator Cooling Unit - The Palindrome Special +tile.hadron_cooler_mk2.desc=Cooling power: 5$Efficiency function: 2-(cooling-15)²/225$Maximum penalty: -90%% +tile.hadron_core.name=Particle Accelerator Core Component +tile.hadron_diode.name=Schottky Particle Diode +tile.hadron_plating.name=Particle Accelerator Plating +tile.hadron_plating_black.name=Particle Accelerator Plating (Black) +tile.hadron_plating_blue.name=Particle Accelerator Plating (Blue) +tile.hadron_plating_glass.name=Particle Accelerator Plating (Window) +tile.hadron_plating_striped.name=Particle Accelerator Plating (Cool Hazard Stripes) +tile.hadron_plating_voltz.name=Particle Accelerator Plating (VOLTZ) +tile.hadron_plating_yellow.name=Particle Accelerator Plating (YelloDye) +tile.hadron_power.name=Particle Accelerator Power Plug (1MHE) +tile.hadron_power_10m.name=Particle Accelerator Power Plug (10MHE) +tile.hadron_power_100m.name=Particle Accelerator Power Plug (100MHE) +tile.hadron_power_1g.name=Particle Accelerator Power Plug (1GHE) +tile.hadron_power_10g.name=Particle Accelerator Power Plug (10GHE) +tile.hazmat.name=Hazmat Cloth Block +tile.heater_electric.name=Електричний нагрівач +tile.heater_electric.desc=Використовує енергію для виробництва тепла.$Приймає тепло знизу з ефективністю 85%%.$Можна налаштувати за допомогою викрутки. +tile.heater_firebox.name=Нагрівальна топка +tile.heater_firebox.desc=Спалює тверде паливо для отримання тепла. +tile.heater_heatex.name=Теплообмінний нагрівач +tile.heater_heatex.desc=Виробляє тепло з гарячих рідин. +tile.heater_oilburner.name=Спалювач рідини +tile.heater_oilburner.desc=Спалює рідини для отримання тепла.$Можна налаштувати за допомогою викрутки. +tile.heater_oven.name=Нагрівальна піч +tile.heater_oven.desc=Спалює тверде паливо для отримання тепла.$Приймає тепло знизу з ефективністю 50%%. +tile.hev_battery.name=Батарея костюма +tile.machine_hydrotreater.name=Гідроочисник +tile.impact_dirt.name=Випалений ґрунт +tile.icf.name=Термоядерний реактор з інерційним утриманням плазми (ICF) +tile.icf_block.name=Лазер ICF +tile.icf_component.name=Стабілізуючий елемент ICF +tile.icf_component.structure.name=Корпус ICF +tile.icf_component.structure_bolted.name=Корпус ICF (Заклепаний) +tile.icf_component.vessel.name=Стіна захисної оболонки ICF +tile.icf_component.vessel_welded.name=Стіна захисної оболонки ICF (Зварена) +tile.icf_controller.name=Контролер лазера ICF +tile.icf_laser_component.capacitor.name=Конденсатор лазера ICF +tile.icf_laser_component.casing.name=Корпус лазера ICF +tile.icf_laser_component.cell.name=Комірка лазера ICF +tile.icf_laser_component.emitter.name=Труба випромінювача лазера ICF +tile.icf_laser_component.port.name=Порт лазера ICF +tile.icf_laser_component.turbo.name=Турбопідсилювач лазера ICF +tile.iter.name=Термоядерний реактор +tile.ladder_aluminium.name=Алюмінієва драбина +tile.ladder_cobalt.name=Кобальтова драбина +tile.ladder_copper.name=Мадна драбина +tile.ladder_gold.name=Золота драбина +tile.ladder_iron.name=Залізна драбина +tile.ladder_lead.name=Свинцева драбина +tile.ladder_steel.name=Сталева драбина +tile.ladder_sturdy.name=Міцна дерев'яна драбина +tile.ladder_titanium.name=Титанова драбина +tile.ladder_tungsten.name=Вольфрамова драбина +tile.lamp_demon.name=Ядро-демон лампа +tile.lamp_tritium_blue_off.name=Синя тритієва лампа +tile.lamp_tritium_blue_on.name=Синя тритієва лампа +tile.lamp_tritium_green_off.name=Зелена тритієва лампа +tile.lamp_tritium_green_on.name=Зелена тритієва лампа +tile.lantern.name=Ліхтар +tile.lantern_behemoth.name=Старий ліхтар +tile.launch_pad.name=Бункерний стартовий майданчик +tile.launch_pad_large.name=Стартовий майданчик +tile.launch_pad_rusted.name=Старий стартовий майданчик +tile.launch_table.name=Великий стартовий майданчик +tile.leaves_layer.name=Опале листя +tile.lightstone.unrefined.name=Необроблений світлий камінь +tile.lightstone.tile.name=Світлокам'яна плитка +tile.lightstone.bricks.name=Світлокам'яна цегла +tile.lightstone.bricks_chiseled.name=Точена світлокам'яна цегла +tile.lightstone.chiseled.name=Точений світлий камінь +tile.lightstone_tile_stairs.name=Сходи з світлокам'яної плитки +tile.lightstone_bricks_stairs.name=Сходи з світлокам'яної цегли +tile.lox_barrel.name=Бочка рідкого кисню +tile.machine_amgen.name=Ambience Radiation Generator +tile.machine_ammo_press.name=Прес для боєприпасів +tile.machine_arc_furnace.name=Електрична дугова піч +tile.machine_arc_furnace_off.name=Дугова піч +tile.machine_arc_furnace_on.name=Дугова піч +tile.machine_arc_welder.name=Дуговий зварювальник +tile.machine_armor_table.name=Стіл модифікації броні +tile.machine_ashpit.name=Зольник +tile.machine_ashpit.desc=Збирає попіл з топок та нагрівальних печей +tile.machine_assembler.name=Збиральна машина +tile.machine_assemfac.name=Збиральна фабрика +tile.machine_autocrafter.name=Автоматичний верстак +tile.machine_autosaw.name=Автоматична пила +tile.machine_autosaw.desc=Вирубує рослини поруч, заново висажує дерева$Приймає:$-Деревну смолу$-Етанол$-Риб'ячий жир$-Важку нафту +tile.machine_bat9000.name=Big-Ass цистерна 9000 +tile.machine_battery.name=Блок накопичувач енергії +tile.machine_battery_potato.name=Блок картопляних батарейок +tile.machine_boiler.name=Бойлер +tile.machine_boiler.desc=Великий бойлер, який може кип'ятити воду або нагрівати нафту.$Потрібне зовнішнє джерело тепла.$Швидкість теплопередачі: ΔT*0.01 TU/t +tile.machine_boiler_electric_off.name=Electric Oil Heater +tile.machine_boiler_electric_on.name=Electric Oil Heater +tile.machine_boiler_off.name=Старий бойлер +tile.machine_catalytic_cracker.name=Вежа каталітичного крекінгу +tile.machine_catalytic_reformer.name=Каталітичний риформер +tile.machine_centrifuge.name=Центрифуга +tile.machine_chemfac.name=Хімічна фабрика +tile.machine_chemplant.name=Хімічний завод +tile.machine_chungus.name=Парова турбіна "Левіафан" +tile.machine_chungus.desc=Ефективність: 85%% +tile.machine_coal_off.name=Combustion Generator +tile.machine_coal_on.name=Combustion Generator +tile.machine_coker.name=Коксова установка +tile.machine_coker.desc=Коксує нафту, створюючи рідкі побічні продукти.$Потрібне зовнішнє джерело тепла.$Швидкість теплопередачі: ΔT*0.025 TU/t +tile.machine_combine_factory.name=CMB Steel Furnace +tile.machine_combustion_engine.name=Промисловий двигун внутрішнього згоряння +tile.machine_compressor.name=Компресор +tile.machine_compressor_compact.name=Компактний компресор +tile.machine_condenser.name=Конденсатор пару +tile.machine_condenser_powered.name=Потужний конденсатор пару +tile.machine_controller.name=Блок дистанційного керування реактором +tile.machine_converter_he_rf.name=HE to RF конвертер +tile.machine_converter_rf_he.name=RF to HE конвертер +tile.machine_conveyor_press.name=Конвеєрний прес +tile.machine_conveyor_press.desc=Конвеєр рухається зліва направо$Клацніть правою кнопкою миші штампом щоб встановити його$Використовуйте викрутку, щоб вилучити штамп +tile.machine_crucible.name=Ливарня +tile.machine_crystallizer.name=Рудний окислювач +tile.machine_cyclotron.name=Циклотрон +tile.machine_detector.name=Детектор живлення +tile.machine_deuterium_extractor.name=Екстрактор дейтерію +tile.machine_deuterium_tower.name=Вежа видобутку дейтерію +tile.machine_diesel.name=Дизельний генератор +tile.machine_difurnace_extension.name=Розширення доменної печі +tile.machine_difurnace_off.name=Доменна піч +tile.machine_difurnace_on.name=Доменна піч +tile.machine_difurnace_rtg_off.name=Ядерна доменна піч +tile.machine_difurnace_rtg_on.name=Ядерна доменна піч +tile.machine_dineutronium_battery.name=Спарк блок накопичувач енергії +tile.machine_drain.name=Стічна труба +tile.machine_drill.name=Автоматичний гірничий бур +tile.machine_electric_furnace_off.name=Електрична піч +tile.machine_electric_furnace_on.name=Електрична піч +tile.machine_electrolyser.name=Електролізер +tile.machine_epress.name=Електричний прес +tile.machine_excavator.name=Великий гірничий бур +tile.machine_exposure_chamber.name=Камера опромінювання частинками +tile.machine_fel.name=Лазер на вільних електронах (FEL) +tile.machine_fensu.name=FEnSU +tile.machine_flare.name=Факельна лінія +tile.machine_fluidtank.name=Цистерна +tile.machine_forcefield.name=Випромінювач силового поля +tile.machine_fraction_tower.name=Ректифікаційна колона +tile.machine_fracking_tower.name=Вежа гідророзриву пласта +tile.machine_funnel.name=Комбінаторна воронки +tile.machine_funnel.desc=Автоматично стискає предмети в сітці крафту 2x2 або 3x3$Вгорі: Вхід$Внизу: Вихід$Бічна сторона: Вихід для очищення інгредієнтів +tile.machine_gascent.name=Газова центріфуга +tile.machine_generator.name=Nuclear Reactor (Old) +tile.machine_geo.name=Geothermal Electric Generator +tile.machine_hephaestus.name=Геотермальний теплообмінник +tile.machine_icf_press.name=Виробник паливних гранул ICF +tile.machine_icf_press.desc=Заповнює паливні гранули ICF$Лівий паливний отвір встановлюється зверху/знизу, правий - з боків$Мюони та гранули можуть подаватися з будь-якого боку +tile.machine_industrial_boiler.name=Промисловий бойлер +tile.machine_industrial_boiler.desc=Великий бойлер, який може кип'ятити воду або нагрівати нафту.$Потрібне зовнішнє джерело тепла.$Швидкість теплопередачі: ΔT*0.01 TU/t$Не може вибухнути +tile.machine_industrial_generator.name=Industrial Generator +tile.machine_intake.name=Забірник повітря +tile.machine_keyforge.name=Сліл замочника +tile.machine_large_turbine.name=Парова промислова турбіна +tile.machine_large_turbine.desc=Ефективність: 100%% +tile.machine_liquefactor.name=Промисловий скраплювач +tile.machine_liquefactor.desc=Потужна універсальна машина для перетворення предметів на рідини.$Поставляється з універсальними каталітичними компонентами, нагрівальними елементами$та вбудованим гідратором для нафтохімічного зрідження. +tile.machine_lithium_battery.name=Літій-іонний блок накопичувач енергії +tile.machine_microwave.name=Мікрохвильова піч +tile.machine_mining_laser.name=Шахтарський лазер +tile.machine_minirtg.name=Радіоізотопна комірка +tile.machine_missile_assembly.name=Станція збірки ракет +tile.machine_mixer.name=Промисловий змішувач +tile.machine_nuke_furnace_off.name=Ядерна піч +tile.machine_nuke_furnace_on.name=Ядерна піч +tile.machine_orbus.name=Важка магнітна цистерна +tile.machine_ore_slopper.name=Переробник корінної руди +tile.machine_powerrtg.name=Полоній-теннессинова ізотопна комірка +tile.machine_press.name=Твердопаливний прес +tile.machine_puf6_tank.name=Цистерна гексафториду плутонію +tile.machine_pumpjack.name=Верстат-гойдалка +tile.machine_pyrooven.name=Піролізна піч +tile.machine_radar.name=Радар +tile.machine_radar_large.name=Великий радар +tile.machine_radgen.name=Радіаційний двигун +tile.machine_radiolysis.name=РІТЕГ та радіолізна камера +tile.machine_reactor.name=Реактор розмножувач +tile.machine_reactor_small.name=Дослідницький реактор +tile.machine_refinery.name=Нафтопереробний завод +tile.machine_reix_mainframe.name=Rei-X Mainframe (WIP) +tile.machine_rotary_furnace.name=Роторна піч +tile.machine_rtg_blue.name=Convection Generator +tile.machine_rtg_cyan.name=Schrabidium Decay Generator (WIP) +tile.machine_rtg_furnace_off.name=РІТЕГ піч +tile.machine_rtg_furnace_on.name=РІТЕГ піч +tile.machine_rtg_green.name=Verticium Wealth Generator +tile.machine_rtg_grey.name=РІТЕГ +tile.machine_rtg_orange.name=Strong RT Generator +tile.machine_rtg_purple.name=Antimatter Annihilation Generator +tile.machine_rtg_red.name=Fulmination Generator +tile.machine_rtg_yellow.name=Australium Superfuel Reactor +tile.machine_satlinker.name=Супутниковий ID менеджер +tile.machine_sawmill.name=Лісопилка Стірлінга +tile.machine_sawmill.desc=Потрібне зовнішнє джерело тепла.$Швидкість теплопередачі: T*0.1 TU/t$Мінімальне споживання: 100 TU/t, Максимальне споживання: 300 TU/t +tile.machine_schrabidium_battery.name=Шрабідієвий блок накопичувач енергії +tile.machine_schrabidium_transmutator.name=Пристрій для трансмутації шрабідію +tile.machine_selenium.name=Radial Performance Engine +tile.machine_shredder.name=Подрібнювач +tile.machine_silex.name=Камера лазерного розділення ізотопів (SILEX) +tile.machine_siren.name=Сирена +tile.machine_solar_boiler.name=Бойлер сонячної вежі +tile.machine_soldering_station.name=Паяльна станція +tile.machine_solidifier.name=Промисловий затверджувач +tile.machine_solidifier.desc=Універсальна машина, оснащена системами охолодження та іншими$універсальними інструментами для перетворення рідин у тверді речовини за допомогою$різних процесів, таких як заморожування та нафтохімічна полімеризація. +tile.machine_spp_bottom.name=ZPE Potential Generator (Bottom) +tile.machine_spp_top.name=ZPE Potential Generator (Top) +tile.machine_steam_engine.name=Паровий двигун +tile.machine_steam_engine.desc=Ефективність: 85%% +tile.machine_stirling.name=Двигун Стірлінга +tile.machine_stirling.desc=Перетворює тепло на енергію. Потрібне зовнішнє джерело тепла.$Швидкість теплопередачі: T*0.1 TU/t$Максимальне споживання: 300 TU/t$Ефективність: 50%% +tile.machine_stirling_creative.name=Творчій двигун Стірлінга +tile.machine_stirling_creative.desc=Перетворює тепло на енергію. Потрібне зовнішнє джерело тепла.$Швидкість теплопередачі: T*0.1 TU/t$Нескінченне споживання/t$Ефективність: 100%% +tile.machine_stirling_steel.name=Важкий двигун Стірлінга +tile.machine_stirling_steel.desc=Перетворює тепло на енергію.. Потрібне зовнішнє джерело тепла.$Використовує набагато важчу шестерню для підтримки вищих температур.$Швидкість теплопередачі: T*0.1 TU/t$Максимальне споживання: 1500 TU/t$Ефективність: 50%% +tile.machine_storage_drum.name=Бочка для захоронення ядерних відходів +tile.machine_strand_caster.name=Установка безперервного лиття +tile.machine_telelinker.name=Turret Telemetry Linker +tile.machine_teleporter.name=Телепорт +tile.machine_tower_large.name=Градирня +tile.machine_tower_small.name=Допоміжна градирня +tile.machine_transformer.name=10k-20Hz трансформатор +tile.machine_transformer_20.name=10k-1Hz трансформатор +tile.machine_transformer_dnt.name=DNT-20Hz трансформатор +tile.machine_transformer_dnt_20.name=DNT-1Hz трансформатор +tile.machine_turbine.name=Парова турбіна +tile.machine_turbine.desc=Ефективність: 85%% +tile.machine_turbinegas.name=Газова турбіна комбіноваого циклу +tile.machine_turbofan.name=Турбовентилятор +tile.machine_uf6_tank.name=Цистерна гексафториду урану +tile.machine_vacuum_distill.name=Вакуумний нафтопереробний завод +tile.machine_waste_drum.name=Контейнер охолодження відпрацьованого палива +tile.machine_weapon_table.name=Стіл модифікації зброї +tile.machine_wood_burner.name=Дров'яна піч +tile.machine_wood_burner.desc=Генерує 100HE/t при спалюванні предметів$Збирає попіл$Може спалювати рідини з ефективністю 50%% зі швидкістю 40mB/s +tile.machine_well.name=Нафтова вежа +tile.machine_zirnox.name=Ядерний реактор ЦИРНОКС +tile.marker_structure.name=Multiblock Structure Marker +tile.mass_storage.name=Масивне сховище +tile.meteor_battery.name=Генератор статичної електрики з зіркового металу +tile.meteor_brick.name=Метеоритна цегла +tile.meteor_brick_chiseled.name=Точена метеоритна цегла +tile.meteor_brick_cracked.name=Тріснута метеоритна цегла +tile.meteor_brick_mossy.name=Метеоритна цегла з мохом +tile.meteor_pillar.name=Метеоритна колона +tile.meteor_polished.name=Полірований метеоритний блок +tile.meteor_spawner.name=Збірник Кіберкрабів +tile.mine_ap.name=Протипіхотна міна +tile.mine_fat.name=Міна товстун +tile.mine_naval.name=Морська міна +tile.mine_he.name=Протитанкова міна +tile.mine_shrap.name=Шрапнельна міна +tile.moon_turf.name=Місячний ґрунт +tile.mud_block.name=Токсичні відходи +tile.muffler.name=Muffler +tile.mush.name=Сяючий гриб +tile.ntm_dirt.name=Ґрунт +tile.nuke_boy.name=Малюк +tile.nuke_custom.name=Кастомна бомба +tile.nuke_fleija.name=F.L.E.I.J.A. +tile.nuke_fstbmb.name=BF бомба +tile.nuke_gadget.name=Гаджет +tile.nuke_man.name=Товстун +tile.nuke_mike.name=Айві Майк +tile.nuke_n2.name=N² Міна +tile.nuke_n45.name=N45 Naval Mine +tile.nuke_prototype.name=Прототип +tile.nuke_solinium.name=Солінієвий стерилізатор +tile.nuke_tsar.name=Цар-бомба +tile.oil_duct.name=Oil Pipe +tile.oil_duct_solid.name=Coated Oil Pipe +tile.oil_pipe.name=Труба для видобутку сирої нафти +tile.oil_spill.name=Розлив нафти +tile.ore_alexandrite.name=Александритова руда +tile.ore_aluminium.name=Алюмінієва руда +tile.ore_asbestos.name=Азбестова руда +tile.ore_australium.name=Австралієва руда +tile.ore_basalt_asbestos.name=Багатий азбестом базальт +tile.ore_basalt_fluorite.name=Багатий флюоритом базальт +tile.ore_basalt_gem.name=Багатий на самоцвіти базальт +tile.ore_basalt_molysite.name=Багатий на трихлорид заліза базальт +tile.ore_basalt_sulfur.name=Багатий сіркою базальт +tile.ore_bedrock.name=Корінна руда +tile.ore_bedrock_coltan.name=Корінна колтанова руда +tile.ore_bedrock_oil.name=Корінне нафтове родовище +tile.ore_beryllium.name=Берилієва руда +tile.ore_cinnebar.name=Кіноварна руда +tile.ore_coal_oil.name=Масляниста вугільна руда +tile.ore_coal_oil_burning.name=Палаюча масляниста вугільна руда +tile.ore_cobalt.name=Кобальтова руда +tile.ore_coltan.name=Колтанова руда +tile.ore_copper.name=Мідна руда +tile.ore_daffergon.name=Dellite +tile.ore_depth_borax.name=Глибинна бурова руда +tile.ore_depth_cinnebar.name=Глибинна кіноварна руда +tile.ore_depth_nether_neodymium.name=Пекельна глибинна неодимова руда +tile.ore_depth_zirconium.name=Глибинна цирконієва руда +tile.ore_fluorite.name=Флюоритова руда +tile.ore_gneiss_asbestos.name=Сланцева азбестова руда +tile.ore_gneiss_copper.name=Сланцева мідна руда +tile.ore_gneiss_gas.name=Сланцевий газ +tile.ore_gneiss_gold.name=Сланцева золота руда +tile.ore_gneiss_iron.name=Сланцева залізна руда +tile.ore_gneiss_lithium.name=Сланцева літієва руда +tile.ore_gneiss_rare.name=Сланцева рідкоземельна руда +tile.ore_gneiss_schrabidium.name=Сланцева шрабідієва руда +tile.ore_gneiss_uranium.name=Сланцева уранова руда +tile.ore_gneiss_uranium_scorched.name=Випалена сланцева уранова руда +tile.ore_lead.name=Свинцева руда +tile.ore_lignite.name=Буровугільна руда +tile.ore_meteor.aluminium.name=Метеоритна алюмінієва руда +tile.ore_meteor.cobalt.name=Метеоритна кобальтова руда +tile.ore_meteor.copper.name=Метеоритна мідна руда +tile.ore_meteor.iron.name=Метеоритна залізна руда +tile.ore_meteor.rareearth.name=Метеоритна рідкоземельна руда +tile.ore_meteor_aluminium.name=Метеоритна алюмінієва руда +tile.ore_meteor_copper.name=Метеоритна мідна руда +tile.ore_meteor_lead.name=Метеоритна свинцева руда +tile.ore_meteor_lithium.name=Метеоритна літієва руда +tile.ore_meteor_starmetal.name=Метеоритна руда зіркового металу +tile.ore_meteor_sulfur.name=Метеоритна сірчана руда +tile.ore_meteor_thorium.name=Метеоритна торієва руда +tile.ore_meteor_titanium.name=Метеоритна титанова руда +tile.ore_meteor_tungsten.name=Метеоритна вольфрамова руда +tile.ore_meteor_uranium.name=Метеоритна уранова руда +tile.ore_nether_coal.name=Палаюча пекельна вугільна руда +tile.ore_nether_cobalt.name=Пекельна кобальтова руда +tile.ore_nether_fire.name=Пекельна фосфорна руда +tile.ore_nether_plutonium.name=Пекельна плутонієва руда +tile.ore_nether_schrabidium.name=Пекельна шрабідієва руда +tile.ore_nether_smoldering.name=Тліючий пекельний камінь +tile.ore_nether_sulfur.name=Пекельна сірчана руда +tile.ore_nether_tungsten.name=Пекельна вольфрамова руда +tile.ore_nether_uranium.name=Пекельна уранова руда +tile.ore_nether_uranium_scorched.name=Випалена пекельна уранова руда +tile.ore_niter.name=Руда нітрату калію +tile.ore_oil.name=Нафтове родовище +tile.ore_oil_empty.name=Порожнє нафтове родовище +tile.ore_oil_sand.name=Бітумінозний пісок +tile.ore_random.name=%s руда +tile.ore_rare.name=Рідкоземельна руда +tile.ore_reiium.name=Reiite +tile.ore_schrabidium.name=Шрабідієва руда +tile.ore_sellafield_diamond.name=Селлафітова алмазна руда +tile.ore_sellafield_emerald.name=Селлафітова смарагдова руда +tile.ore_sellafield_radgem.name=Селлафітова руда радіоактивного самоцвіту +tile.ore_sellafield_schrabidium.name=Селлафітова шрабідієва руда +tile.ore_sellafield_uranium_scorched.name=Випалена селлафітова уранова руда +tile.ore_sulfur.name=Сірчана руда +tile.ore_tektite_osmiridium.name=Просочений осмистим іридієм тектит +tile.ore_thorium.name=Торієва руда +tile.ore_tikite.name=Тріксит +tile.ore_titanium.name=Титанова руда +tile.ore_tungsten.name=Вольфрамова руда +tile.ore_unobtainium.name=Brightblende Ore +tile.ore_uranium.name=Уранова руда +tile.ore_uranium_scorched.name=Випалена уранова руда +tile.ore_verticium.name=Dollar Green Mineral +tile.ore_volcano.name=Геотермальне джерело +tile.ore_weidanium.name=Weidite +tile.pa_beamline.name=Лінія пучка +tile.pa_beamline.desc=Додаткова частина, з’єднує різні частини прискорювача.$Також дозволяє недорого збільшити розмір кільця,$щоб задовольнити вимоги дипольної котушки щодо розміру. +tile.pa_detector.name=Детектор частинок +tile.pa_detector.desc=Потрібне охолодження!$Приймає частинки та виконує рецепт.$Рецепти можуть потребувати контейнерів (капсул для частинок).$Для прийняття частинки потрібне нульове розфокусуваня. +tile.pa_dipole.name=Дипольні магніти +tile.pa_dipole.desc=Потрібне охолодження!$Перенаправляє частинки на основі магнітного поля.$Має виходи для нижче порогу,$вище порогу та вище порогу$із застосуванням редстоуну.$Для роботи потрібні великі котушки. +tile.pa_quadrupole.name=Квадрупольна лінза +tile.pa_quadrupole.desc=Потрібне охолодження!$Зменшує розфокусування частинок на 100 одиниць.$Для роботи потрібні великі котушки. +tile.pa_rfc.name=Радіочастотний резонатор +tile.pa_rfc.desc=Потрібне охолодження!$Прискорює частинки на 100 одиниць,$та додає 100 одиниць розфокусування.$Частинка розіб’ється, коли досягне 1000 одиниць розфокусування. +tile.pa_source.name=Джерело частинок +tile.pa_source.desc=Потрібне охолодження!$Використовує два предмети для створення частинки. +tile.part_emitter.name=Декоративний випромінювач частинок +tile.pedestal.name=П'єдестал +tile.pink_barrel.name=Бочка з гасом +tile.pink_log.name=Pink Log +tile.pink_planks.name=Pink Wood Planks +tile.pink_slab.name=Pink Wood Slab +tile.pink_stairs.name=Pink Wood Stairs +tile.piston_inserter.name=Вставник +tile.piston_inserter.desc=Приймає один предмет автоматично$Використовуючи редстоун, вставляє предмет у просвердлений графіт$Усі предмети в ланцюжку просвердленого графіту будуть проштовхнуті на один блок$Потрібен один блок повітря між графітом +tile.plant_dead.name=Мертва рослина +tile.plant_flower.cd0.name=Гірчична верба +tile.plant_flower.cd1.name=Гірчична верба +tile.plant_flower.foxglove.name=Наперстянка +tile.plant_flower.nightshade.name=Беладона +tile.plant_flower.tobacco.name=Тютюн +tile.plant_flower.weed.name=Конопля +tile.plant_reeds.name=Очерет +tile.plant_tall.cd2.name=Гірчична верба +tile.plant_tall.cd3.name=Гірчична верба +tile.plant_tall.cd4.name=Гірчична верба (Зріла) +tile.plant_tall.weed.name=Конопля +tile.plasma.name=Плазма +tile.plasma_heater.name=Нагрівач плазми +tile.plushie.name=%s плюшка +tile.pneumatic_tube.name=Пневматична труба +tile.pneumatic_tube.desc=Надсилає предмети за допомогою стисненого повітря.$Клацніть правою кнопкою миші викруткою, щоб перемкнути вхід.$Клацніть правою кнопкою миші з шифтом та викруткою, щоб перемкнути вихід.$Входи можна налаштувати та підключити до стисненого повітря.$Надсилає один стак чотири рази на секунду. +tile.pole_satellite_receiver.name=Супутникова тарілка +tile.pole_top.name=Верхівка антени +tile.press_preheater.name=Burner Press Preheater +tile.pribris.name=Уламки РБМК +tile.pribris_burning.name=Палаючі уламки РБМК +tile.pribris_digamma.name=Почорнілі уламки РБМК +tile.pribris_radiating.name=Тліючі уламки РБМК +tile.pump_electric.name=Електричний насос ґрунтових вод +tile.pump_electric.desc=Використовує електроенергію для відкачування ґрунтових вод$Генерує до 10,000mB/t$Повинен бути розміщений нижче Y:70 +tile.pump_steam.name=Паровий насос ґрунтових вод +tile.pump_steam.desc=Використовує пару для відкачування ґрунтових вод$Генерує до 1,000mB/t$Повинен бути розміщений нижче Y:70 +tile.pwr_block.name=ВВЕР +tile.pwr_casing.name=Корпус рекатора ВВЕР +tile.pwr_casing.desc=Потрібно покрити всі внутрішні частини реактора для формування$Розміщення: Корпус +tile.pwr_channel.name=Канал теплоносія ВВЕР +tile.pwr_channel.desc=Використовує тепло корпусу для нагрівання охолоджувальної рідини$Розміщення: Будь-яке +tile.pwr_control.name=Регулюючий стрижень ВВЕР +tile.pwr_control.desc=Дозволяє керувати паливними стрижнями$Розміщення: Сіткою, між паливними стрижнями +tile.pwr_controller.name=Контролер ВВЕР +tile.pwr_controller.desc=Термінал доступу ВВЕР$Розміщення: Корпус, лише один на реактор. Клацніть правою кнопкою миші, щоб зібрати реактор. +tile.pwr_fuel.name=Паливний стрижень ВВЕР +tile.pwr_fuel.desc=Збільшує ємність палива ВВЕР$Розміщення: Сіткою, для підвищення реактивності. +tile.pwr_heatex.name=Теплообмінник ВВЕР +tile.pwr_heatex.desc=Переносить тепло ядра до корпусу$Розміщення: Будь-яке +tile.pwr_heatsink.name=Радіатор ВВЕР +tile.pwr_heatsink.desc=Збільшує теплоємність ядра на 5%%$Зробить канали теплоносія та теплообмінники трохи менш ефективними$Розміщення: Будь-яке +tile.pwr_neutron_source.name=Джерело нейтронів ВВЕР +tile.pwr_neutron_source.desc=Додає 20 одиниць потіку до ядра$Розміщення: Будь-яке$Потік досягає паливних стрижнів лише якщо між ними нічого немає +tile.pwr_port.name=Порт доступу ВВЕР +tile.pwr_port.desc=Ввод-вивід рідин та предметів$Розміщення: Корпус +tile.pwr_reflector.name=Відбивач нейтронів ВВЕР +tile.pwr_reflector.desc=Відбиває нейтрони назад до паливних стрижнів$Розміщення: Сіткою, для підвищення реактивності.$Може бути обшивкою +tile.rad_lava_block.name=Вулканічна лава +tile.radar_screen.name=Екран радара +tile.radio_telex.name=Телекс +tile.radio_torch_controller.name=Редстоун-радіо контролер +tile.radio_torch_controller.desc=Може приймати командні сигнали та$передавати їх на підключену машину +tile.radio_torch_counter.name=Редстоун-радіо лічильник предметів +tile.radio_torch_counter.desc=Розміщується на плоских поверхнях або блоках, сумісних із компаратором$Базує сигнал на кількості відповідних предметів +tile.radio_torch_logic.name=Редстоун-радіо логічний приймач +tile.radio_torch_logic.desc=Розміщується на плоских поверхнях або блоках, сумісних із компаратором$Зіставляє сигнали редстоуну з умовами, оціненими у встановленому порядку$Числові або рядкові вхідні дані порівнюються з константою +tile.radio_torch_reader.name=Редстоун-радіо зчитувач +tile.radio_torch_reader.desc=Зчитує значення з підключених блоків,$а потім надсилає їх через вказану частоту +tile.radio_torch_receiver.name=Редстоун-радіо приймач +tile.radio_torch_receiver.desc=Розміщується на плоских поверхнях або блоках, сумісних із компаратором +tile.radio_torch_sender.name=Редстоун-радіо передавач +tile.radio_torch_sender.desc=Розміщується на плоских поверхнях або блоках, сумісних із компаратором$Зчитує сигнали редстоуна або вхід компаратора +tile.radiobox.name=Коробка боротьби з шкідниками Розенберга +tile.radiorec.name=FM-радіо +tile.rail_booster.name=Швидкісні прискорювальні рейки +tile.rail_highspeed.name=Швидкісні рейки +tile.rail_large_buffer.name=Стандартний вловлювальний тупик (5м) +tile.rail_large_curve.name=Стандартна крива залізнична колія (5м) +tile.rail_large_curve_7.name=Стандартна крива залізнична колія (7м) +tile.rail_large_curve_9.name=Стандартна крива залізнична колія (9м) +tile.rail_large_ramp.name=Стандартний підом залізничної колії (5м) +tile.rail_large_straight.name=Стандартна залізнична колія (5м) +tile.rail_large_straight_short.name=Стандартна залізнична колія (1м) +tile.rail_large_switch.name=Стандартний залізничний стрілочний перевід (15м, Left) +tile.rail_large_switch_flipped.name=Стандартний залізничний стрілочний перевід (15м, Right) +tile.rail_narrow.name=Вузькоколійні рейки +tile.rail_wood.name=Дерев'яні рейки +tile.rbmk_absorber.name=Борний поглинач нейтронів РБМК +tile.rbmk_blank.name=Структурна колона РБМК +tile.rbmk_boiler.name=Паровий канал РБМК +tile.rbmk_console.name=Консоль РБМК +tile.rbmk_cooler.name=Охолоджувач РБМК +tile.rbmk_control.name=Регулюючий стрижень РБМК +tile.rbmk_control_auto.name=Автоматичний регулюючий стрижень РБМК +tile.rbmk_control_mod.name=Сповільнюючий регулюючий стрижень РБМК +tile.rbmk_crane_console.name=Консоль крана РБМК +tile.rbmk_heater.name=Нагрівач рідини РБМК +tile.rbmk_heatex.name=RBMK Heat Exchanger +tile.rbmk_loader.name=Паровий конектор РБМК +tile.rbmk_loader.desc=Дозволяє мати підключення для води та пари в нижній частині реакторів РБМК$Розмістіть одну водопровідну трубу під колоною РБМК, потім з'єднувач,$а потім підключіть паропровід до з'єднувача. +tile.rbmk_moderator.name=Графітовий сповільнювач РБМК +tile.rbmk_outgasser.name=Канал опромінення РБМК +tile.rbmk_reflector.name=Карбід вольфрамовий відбивач нейтронів РБМК +tile.rbmk_rod.name=Паливний стрижень РБМК +tile.rbmk_rod_mod.name=Сповільнюючий паливний стрижень РБМК +tile.rbmk_rod_reasim.name=Паливний стрижень РБМК (РеаСім) +tile.rbmk_rod_reasim_mod.name=Сповільнюючий паливний стрижень РБМК (РеаСім) +tile.rbmk_steam_inlet.name=РеаСім вхід води РБМК +tile.rbmk_steam_inlet.desc=Вводить воду в колони РБМК, якщо бойлери РеаСім увімкнені$З'єднується з колонами РБМК збоку +tile.rbmk_steam_outlet.name=РеаСім вихід пари РБМК +tile.rbmk_steam_outlet.desc=Виводить пару з колон РБМК, якщо бойлери РеаСім увімкнені$З'єднується з колонами РБМК збоку +tile.rbmk_storage.name=Колона зберігання РБМК +tile.reactor_computer.name=Reactor Control +tile.reactor_conductor.name=Reactor Boiler +tile.reactor_control.name=Control Rods +tile.reactor_ejector.name=Reactor Waste Ejector +tile.reactor_element.name=Reactor Chamber +tile.reactor_hatch.name=Reactor Access Hatch +tile.reactor_inserter.name=Reactor Fuel Inserter +tile.red_barrel.name=Вибухова бочка +tile.red_cable.name=Червономідний кабель +tile.red_cable_classic.name=Червономідний кабель (Класичний) +tile.red_cable_gauge.name=Датчик потужності +tile.red_cable_gauge.desc=Кабель, який показує, скільки енергії$переміщується в мережі за один тік.$Розділені мережі, з’єднані блоками$накопичення енергії, вважаються однією спільною мережею. +tile.red_cable_paintable.name=Червономідний кабель, який можна фарбувати +tile.red_connector.name=Конектор електропередач +tile.red_pylon.name=Опора лінії електропередач +tile.red_pylon_large.name=Велика опора лінії електропередач +tile.red_pylon_medium_steel.name=Середня сталева опора лінії електропередач +tile.red_pylon_medium_steel_transformer.name=Середня сталева опора лінії електропередач з трансформатором +tile.red_pylon_medium_wood.name=Середня дерев'яна опора лінії електропередач +tile.red_pylon_medium_wood_transformer.name=Середня дерев'яна опора лінії електропередач з трансформатором +tile.red_wire_coated.name=Покритий червономідний кабель +tile.refueler.name=Заправна станція +tile.reinforced_brick.name=Армований камінь +tile.reinforced_brick_stairs.name=Сходи з армованого каменю +tile.reinforced_ducrete.name=Армований уранобетон +tile.reinforced_glass.name=Армоване скло +tile.reinforced_glass_pane.name=Армована скляна панель +tile.reinforced_lamp_off.name=Армована лампа +tile.reinforced_lamp_on.name=Армована лампа +tile.reinforced_light.name=Армований світлокамінь +tile.reinforced_sand.name=Армований пісковик +tile.reinforced_stone.name=Щільний камінь +tile.reinforced_stone_stairs.name=Сходи з щільного каменю +tile.reinforced_laminate.name=Багатошарове скло +tile.reinforced_laminate_pane.name=Багатошарова скляна панель +tile.rejuvinator.name=Rejuvination Device +tile.residue.name=Cloud Residue +tile.safe.name=Сейф +tile.sand_boron.name=Борний пісок +tile.sand_boron_layer.name=Шар борного піску +tile.sand_dirty.name=Нафтовий пісок +tile.sand_dirty_red.name=Червоний нафтовий пісок +tile.sand_gold.name=Золотий пісок +tile.sand_gold198.name=Пісок золота-198 +tile.sand_lead.name=Свинцевий пісок +tile.sand_polonium.name=Полонієвий пісок +tile.sand_quartz.name=Кварцовий пісок +tile.sand_uranium.name=Урановий пісок +tile.sandbags.name=Мішки з піском +tile.sat_dock.name=Вантажний посадковий майданчик +tile.sat_foeq.name=PEAF - Mk.I FOEQ Duna Probe з експериментальним ядерним двигуном (Декоративний блок) +tile.sat_laser.name=Орбітальний промінь смерті (Декоративний блок) +tile.sat_mapper.name=Супутник картографування поверхні (Декоративний блок) +tile.sat_radar.name=Супутник радіолокаційного дослідження (Декоративний блок) +tile.sat_resonator.name=Супутник ксенієвий резонатор (Декоративний блок) +tile.sat_scanner.name=Супутник з модулем глибинного сканування ресурсів (Декоративний блок) +tile.schrabidic_block.name=Шрабідієва кислота +tile.seal_controller.name=Відкривач люка пускової шахти +tile.seal_frame.name=Рама люка пускової шахти +tile.seal_hatch.name=Люк пускової шахти +tile.sellafield.0.name=Селлафіт +tile.sellafield.1.name=Гарячий селлафіт +tile.sellafield.2.name=Киплячий селлафіт +tile.sellafield.3.name=Палаючий селлафіт +tile.sellafield.4.name=Пекельний селлафіт +tile.sellafield.5.name=Селлафіт-коріум +tile.sellafield_bedrock.name=Корінний селлафіт +tile.sellafield_slaked.name=Погашений селлафіт +tile.semtex.name=Семтекс +tile.silo_hatch.name=Люк пускової шахти +tile.silo_hatch_large.name=Великий люк пускової шахти +tile.skeleton_holder.name=О, це мертвий хлопець +tile.sliding_blast_door.name=Розсувні захисні двері +tile.solar_mirror.name=Дзеркало геліостату +tile.soyuz_capsule.name=Вантажна посадкова капсула +tile.soyuz_launcher.name=Стартова площадка "Союза" +tile.spikes.name=Шипи +tile.snowglobe.name=Снігова куля +tile.spotlight_incandescent.name=Лампа в клітці +tile.spotlight_fluoro.name=Флуоресцентна лампа +tile.spotlight_halogen.name=Галогенний прожектор +tile.stalactite.asbestos.name=Азбестовий сталактит +tile.stalactite.sulfur.name=Сірчаний сталактит +tile.stalagmite.asbestos.name=Азбестовий сталагміт +tile.stalagmite.sulfur.name=Сірчаний сталагміт +tile.steel_beam.name=Сталева балка +tile.steel_corner.name=Сталевий стіновий кут +tile.steel_grate.name=Сталева решітка +tile.steel_grate_wide.name=Предметна решітка +tile.steel_grate_wide.desc=Дозволяє випасти предметам та досвіду +tile.steel_poles.name=Сталевий стовп +tile.steel_roof.name=Плоский сталевий дах +tile.steel_scaffold.name=Сталеві риштування +tile.steel_wall.name=Сталева стіна +tile.stone_cracked.name=Тріснутий камінь +tile.stone_depth.name=Глибинний камінь +tile.stone_depth_nether.name=Пекельний глибинний камінь +tile.stone_gneiss.name=Графітовий сланець +tile.stone_keyhole.name=Дивний камінь +tile.stone_keyhole_meta.name=Дивна цегла червоної кімнати +tile.stone_porous.name=Пористий камінь +tile.stone_resource.asbestos.name=Хризотил +tile.stone_resource.bauxite.name=Боксит +tile.stone_resource.hematite.name=Гематит +tile.stone_resource.limestone.name=Вапняк +tile.stone_resource.malachite.name=Малахіт +tile.stone_resource.sulfur.name=Сірчаний камінь +tile.stones_slab.lightstone.1.name=Плита зі світлокам'яної плитки +tile.stones_slab.lightstone.2.name=Плита зі світлокам'яної цегли +tile.struct_icf_core.name=Основний компонент термоядерного реактора з інерційним утриманням плазми +tile.struct_iter_core.name=Основний компонент термоядерного реактора +tile.struct_launcher.name=Компонентний блок стартового майданчика +tile.struct_launcher_core.name=Основний компонент компактного стартового майданчика +tile.struct_launcher_core_large.name=Основний компонент великого стартового майданчика +tile.struct_plasma_core.name=Основний компонент нагрівача плазми +tile.struct_scaffold.name=Блок риштування стартового майданчика +tile.struct_soyuz_core.name=Основний компонент стартової площадки "Союза" +tile.struct_watz_core.name=Основний компонент Ватцз електростанції +tile.substation.name=Підстанція +tile.sulfuric_acid_block.name=Сірчана кислота +tile.taint.name=Порча +tile.taint_barrel.name=Бочка з залишками IMP +tile.tape_recorder.name=Магнітофон +tile.tektite.name=Тектит +tile.teleanchor.name=Якір телепортації +tile.tesla.name=Котушка Тесли +tile.test_nuke.name=Test Nuke +tile.therm_endo.name=Ендотермічна бомба +tile.therm_exo.name=Екзотермічна бомба +tile.tile_lab.name=Лабораторна плитка +tile.tile_lab_broken.name=Розбита лабораторна плитка +tile.tile_lab_cracked.name=Тріснута лабораторна плитка +tile.tnt_ntm.name=Справжній TNT +tile.toxic_block.name=Стереотипний зелений слиз +tile.transition_seal.name=Транзитний люк +tile.turret_arty.name=Артилерійська турель "Грег" +tile.turret_cheapo.name=Cheapo Gatling Sentry +tile.turret_chekhov.name=Великокаліберна кулеметна турель "Косторіз" +tile.turret_cwis.name=Phalanx Mk-15 CIWS +tile.turret_flamer.name=Flamethrower Turret +tile.turret_friendly.name=Автоматична турель "Містер Дружній" +tile.turret_fritz.name=Важка вогнеметна турель "Фріц" +tile.turret_heavy.name=Heavy Machine Gun Turret +tile.turret_himars.name=Реактивна артилерійська турель "Генрі" +tile.turret_howard.name=Здвоєний автоматичний ЗАК Голкіпер "Говард" +tile.turret_howard_damaged.name=Здвоєний автоматичний ЗАК Голкіпер "Мафусаїл" +tile.turret_jeremy.name=Автоматична гармата "Джеремі" +tile.turret_light.name=Light Machine Gun Turret +tile.turret_maxwell.name=Високоенергетична МАЗЕР турель "Максвелл" +tile.turret_rocket.name=Rocket Turret +tile.turret_richard.name=РСЗВ турель "Річард" +tile.turret_spitfire.name=Turret I have no name for right now [WIP] +tile.turret_sentry.name=Вартова турель "Браун" +tile.turret_sentry_damaged.name=Вартова турель "Едвін" +tile.turret_tau.name=Tauon Turret +tile.turret_tauon.name=Прототипна турель XVL1456 "Тауон" +tile.vacuum.name=Вакуум +tile.vault_door.name=Двері сховища Волт-Тек +tile.vent_chlorine.name=Випускач хлору +tile.vent_chlorine_seal.name=Хлорний ущильнювач +tile.vent_cloud.name=Випускач хмари +tile.vent_pink_cloud.name=Випускач рожевої хмари +tile.vine_phosphor.large.name=Phosphor Vines +tile.vinyl_tile.large.name=Велика вінілова плитка +tile.vinyl_tile.small.name=Маленькі вінілові плитки +tile.vitrified_barrel.name=Бочка засклованих ядерних відходів +tile.volcanic_lava_block.name=Вулканічна лава +tile.volcano_core.name=Вулканічне ядро +tile.volcano_rad_core.name=Радіоактивне вулканічне ядро +tile.wand_air.name=Structure Wand Block (Air) +tile.wand_loot.name=Structure Wand Block (Lootable) +tile.wand_jigsaw.name=Structure Wand Block (Jigsaw) +tile.waste_earth.name=Мертва трава +tile.waste_leaves.name=Мертве листя +tile.waste_log.name=Обвуглене дерево +tile.waste_mycelium.name=Сяючий міцелій +tile.waste_planks.name=Обвуглені дерев'яні дошки +tile.waste_trinitite.name=Тринітитова руда +tile.waste_trinitite_red.name=Червона тринітитова руда +tile.watz.name=Ватцз електростанція +tile.watz_conductor.name=Watz Electricity Port +tile.watz_control.name=Reinforced Control Rods +tile.watz_cooler.name=Суперохолоджувач Ватцз реактора +tile.watz_core.name=Watz Reactor Control +tile.watz_element.name=Реакційна камера Ватцз +tile.watz_end.name=Стабілізаційний елемент Ватцз реактора +tile.watz_end_bolted.name=Стабілізаційний елемент Ватцз реактора (Заклепаний) +tile.watz_hatch.name=Watz Reactor Access Hatch +tile.watz_pump.name=Нагнітаючий насос Ватцз +tile.wood_barrier.name=Дерев'яний бар'єр +tile.wood_structure.ceiling.name=Дерев'яна стеля +tile.wood_structure.roof.name=Дерев'яний дах +tile.wood_structure.scaffold.name=Дерев'яні риштування +tile.yellow_barrel.name=Радіоактивна бочка +tile.zirnox_destroyed.name=Знищений ЦИРНОКС + +tile.large_vehicle_door.name=Великі двері для транспортного засобу +tile.water_door.name=Герметичні двері +tile.qe_containment.name=QE Стримуючі двері +tile.qe_sliding_door.name=QE Розсувні двері +tile.round_airlock_door.name=Круглі двері гідрошлюзу +tile.secure_access_door.name=Двері доступу персоналу +tile.sliding_seal_door.name=Розсувні герметичні двері + +trait.asbestos=Азбест +trait.blinding=Засліплення +trait.coal=Вугільний пил +trait.digamma=Дігамма-випромінення +trait.drop=Небезпечно викидувати +trait.explosive=Вогненебезпечно / Вибухонебезпечно +trait.furnace=Дає %s операцій в ядерній пічі +trait.heat=Забезпечує %s тепла +trait.hlParticle=Період напіврозпаду частинки: %s +trait.hlPlayer=Період напіврозпаду гравця: %s +trait.hot=Пірофорний / Гарячий +trait.hydro=Гідрореактивний +trait.radioactive=Радіоактивний +trait.radResistance=Стійкість до випромінінення: %s + +trait.rbmk.coreTemp=Температура стрижня: %s +trait.rbmk.depletion=Збіднення: %s +trait.rbmk.diffusion=Розсіювання: %s +trait.rbmk.fluxFunc=Функція потоку: %s +trait.rbmk.funcType=Тип функції: %s +trait.rbmk.heat=Тепло на потік: %s +trait.rbmk.melt=Температура плавлення: %s +trait.rbmk.neutron.any=Всі нейтрони +trait.rbmk.neutron.fast=Швидкі нейтрони +trait.rbmk.neutron.slow=Повільні нейтрони +trait.rbmk.skinTemp=Температура оболонки: %s +trait.rbmk.source=Самозаймається +trait.rbmk.splitsInto=Розпадається на: %s +trait.rbmk.splitsWith=Розпадається від: %s +trait.rbmk.xenon=Ксенонове отруєння: %s +trait.rbmk.xenonBurn=Функція вигорання ксенону: %s +trait.rbmk.xenonGen=Функція накопичення ксенону: %s + +trait.rbmx.coreTemp=Ентропія стрижня: %s +trait.rbmx.depletion=Хрусткість: %s +trait.rbmx.diffusion=Потік: %s +trait.rbmx.fluxFunc=Функція приреченості: %s +trait.rbmx.funcType=Специфікація функції: %s +trait.rbmx.heat=Скоринка на тік на повну потужність: %s +trait.rbmx.melt=Глибина розчавлення: %s +trait.rbmk.neutron.any.x=Усі неевклідові форми +trait.rbmk.neutron.fast.x=Еліптичні неевклідні форми +trait.rbmk.neutron.slow.x=Гіперболічні неевклідні форми +trait.rbmx.skinTemp=Ентропія оболонки: %s +trait.rbmx.source=Самоспалюється +trait.rbmx.splitsInto=Відправляється до: %s +trait.rbmx.splitsWith=Прибуває з: %s +trait.rbmx.xenon=Свинцеве отруєння: %s +trait.rbmx.xenonBurn=Функція руйнування свинцю: %s +trait.rbmx.xenonGen=Функція створення свинцю: %s + +trait.tile.cluster=Випадає лише тоді, коли зламав гравець +trait.tile.depth=Можна зламати тільки вибухом + +tool.ability.centrifuge=Автоцентріфуга +tool.ability.crystallizer=Автокристалізатор +tool.ability.explosion=Вибух +tool.ability.hammer=Зона дії +tool.ability.luck=Вдача +tool.ability.mercury=Ртутний дотик +tool.ability.midas=Дотик Мідаса +tool.ability.recursion=Жилковий майнер +tool.ability.shredder=Автоподрібнювач +tool.ability.silktouch=Шовковий дотик +tool.ability.smelter=Автопереплавка + +turret.animals=Цілитись по нейтральним: %s +turret.arty.artillery=§eАртилерійський режим$Мін радіус: 250m$Макс радіус: 3,000m +turret.arty.cannon=§eГарматний режим$Мін радіу: 32m$Макс радіус: 250m +turret.arty.manual=§eРучний режим$Range: 3,000m +turret.machines=Цілитись по машинам: %s +turret.mobs=Цілитись по мобам: %s +turret.none=None +turret.off=ВИМК +turret.on=ВВІМК +turret.players=Цілитись по гравцям: %s + +upgrade.acid=Необхідна кислота %s +upgrade.burn=Burn %smb/t for %sHE +upgrade.consumption=Споживання %s +upgrade.coolantConsumption=Витрата охолоджувальної рідини %s +upgrade.delay=Швидкість роботи %s +upgrade.efficiency=Ефективність %s +upgrade.fortune=Вдача %s +upgrade.overheatChance=Ймовірність перегріву %s +upgrade.productivity=Продуктивність %s +upgrade.range=Радіус %s + +upgrade.gui.title=§lДопустимі покращення:§r +upgrade.gui.afterburner= * §dФорсаж§r: Складається до %s рівнів +upgrade.gui.effectiveness= * §aЕфективність§r: Складається до %s рівнів +upgrade.gui.overdrive= * §7Перевантаження§r: Складається до %s рівнів +upgrade.gui.power= * §9Енергозбереження§r: Складається до %s рівнів +upgrade.gui.speed= * §4Швидкість§r: Складається до %s рівнів + +wavelengths.name.ir=Інфрачервоний +wavelengths.name.visible=Видиме світло +wavelengths.name.uv=Ультрафіолет +wavelengths.name.gamma=Гамма +wavelengths.name.drx=Дігамма +wavelengths.waveRange.ir=780нм-1мм +wavelengths.waveRange.visible=400нм-780нм +wavelengths.waveRange.uv=100нм-400нм +wavelengths.waveRange.gamma=<100пм +wavelengths.waveRange.drx=1916169 планківської довжини + +weapon.ability.beheader=Обезголовлювач +weapon.ability.bobble=Вдача колекціонера +# Should rhyme with the translation for "chainsaw" +weapon.ability.chainsaw=Болепила +weapon.ability.fire=Горіння +weapon.ability.radiation=Радіоактивне лезо +weapon.ability.phosphorus=Фосфорний дотик +weapon.ability.stun=Приголомшення +weapon.ability.vampire=Вампір +weapon.elecGun.modeChange=Режим стрільби змінено на: +weapon.elecGun.glass_cannon.radio=Радіохвилі +weapon.elecGun.glass_cannon.micro=Мікрохвилі +weapon.elecGun.glass_cannon.ir=Інфрачервоне світло +weapon.elecGun.glass_cannon.visible=Видиме світло +weapon.elecGun.glass_cannon.uv=Ультрафіолет +weapon.elecGun.glass_cannon.xray=Ренген +weapon.elecGun.glass_cannon.gamma=Гамма промінь + +desc.gui.upgrade=§lДопустимі покращення:§r +desc.gui.upgrade.afterburner= * §dФорсаж§r: Складається до 3 рівнів +desc.gui.upgrade.effectiveness= * §aЕфективність§r: Складається до 3 рівнів +desc.gui.upgrade.overdrive= * §7Перевантаження§r: Складається до 3 рівнів +desc.gui.upgrade.power= * §1Енергозбереження§r: Складається до 3 рівнів +desc.gui.upgrade.speed= * §4Швидкість§r: Складається до 3 рівнів \ No newline at end of file From 30be3d5fa7d46d9fe9bdac7a067901fd408a74cc Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Wed, 28 May 2025 15:45:28 +0300 Subject: [PATCH 097/491] Add files via upload --- src/main/resources/assets/hbm/lang/uk_UA.lang | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index b85e72460..b3b66d3c5 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -1793,7 +1793,7 @@ item.ammo_standard.bmg50_he.name=Набій .50 BMG (Фугасний) item.ammo_standard.bmg50_fmj.name=Набій .50 BMG (Суцільнометалева оболонка) item.ammo_standard.bmg50_jhp.name=Набій .50 BMG (Експансивний) item.ammo_standard.bmg50_sm.name=Набій .50 BMG (Зірковий метал) -item.ammo_standard.bmg50_sp.name=Набій .50 BMG (Напівоболонковй) +item.ammo_standard.bmg50_sp.name=Набій .50 BMG (Напівоболонковий) item.ammo_standard.capacitor.name=Конденсатор (Стандартний) item.ammo_standard.capacitor_ir.name=Конденсатор (Низька довжина хвилі) item.ammo_standard.capacitor_overcharge.name=Конденсатор (Перевантажений) @@ -1834,13 +1834,13 @@ item.ammo_standard.m357_bp.name=Набій .357 Magnum (Чорний порох) item.ammo_standard.m357_express.name=Набій .357 Magnum (Суцільнометалевий бронебійний) item.ammo_standard.m357_fmj.name=Набій .357 Magnum (Суцільнометалева оболонка) item.ammo_standard.m357_jhp.name=.Набій .357 Magnum (Експансивний) -item.ammo_standard.m357_sp.name=Набій .357 Magnum (Напівоболонковй) +item.ammo_standard.m357_sp.name=Набій .357 Magnum (Напівоболонковий) item.ammo_standard.m44_ap.name=Набій .44 Magnum (Бронебійний) item.ammo_standard.m44_bp.name=Набій .44 Magnum (Чорний порох) item.ammo_standard.m44_express.name=Набій .44 Magnum (Суцільнометалевий бронебійний) item.ammo_standard.m44_fmj.name=Набій .44 Magnum (Суцільнометалева оболонка) item.ammo_standard.m44_jhp.name=Набій .44 Magnum (Експансивний) -item.ammo_standard.m44_sp.name=Набій .44 Magnum (Напівоболонковй) +item.ammo_standard.m44_sp.name=Набій .44 Magnum (Напівоболонковий) item.ammo_standard.nuke_balefire.name=Ядерний мінізаряд, BF яйце item.ammo_standard.nuke_demo.name=Ядерний мінізаряд, Руйнівний item.ammo_standard.nuke_high.name=Ядерний мінізаряд, Потужний @@ -1850,26 +1850,26 @@ item.ammo_standard.nuke_tots.name=Ядерний мінізаряд, Малют item.ammo_standard.p22_ap.name=Набій .22 LR (Бронебійний) item.ammo_standard.p22_fmj.name=Набій .22 LR (Суцільнометалева оболонка) item.ammo_standard.p22_jhp.name=Набій .22 LR (Експансивний) -item.ammo_standard.p22_sp.name=Набій .22 LR (Напівоболонковй) +item.ammo_standard.p22_sp.name=Набій .22 LR (Напівоболонковий) item.ammo_standard.p45_ap.name=Набій .45 (Бронебійний) item.ammo_standard.p45_du.name=Набій .45 (Збіднений уран) item.ammo_standard.p45_fmj.name=Набій .45 (Суцільнометалева оболонка) item.ammo_standard.p45_jhp.name=Набій .45 (Експансивний) -item.ammo_standard.p45_sp.name=Набій .45 (Напівоболонковй) +item.ammo_standard.p45_sp.name=Набій .45 (Напівоболонковий) item.ammo_standard.p9_ap.name=Набій 9-мм (Бронебійний) item.ammo_standard.p9_fmj.name=Набій 9-мм (Суцільнометалева оболонка) item.ammo_standard.p9_jhp.name=Набій 9-мм (Експансивний) -item.ammo_standard.p9_sp.name=Набій 9-мм (Напівоболонковй) +item.ammo_standard.p9_sp.name=Набій 9-мм (Напівоболонковий) item.ammo_standard.r556_ap.name=Набій 5.56-мм (Бронебійний) item.ammo_standard.r556_fmj.name=Набій 5.56-мм (Суцільнометалева оболонка) item.ammo_standard.r556_jhp.name=Набій 5.56-мм (Експансивний) -item.ammo_standard.r556_sp.name=Набій 5.56-мм (Напівоболонковй) +item.ammo_standard.r556_sp.name=Набій 5.56-мм (Напівоболонковий) item.ammo_standard.r762_ap.name=Набій 7.62-мм (Бронебійний) item.ammo_standard.r762_du.name=Набій 7.62-мм (Збіднений уран) item.ammo_standard.r762_fmj.name=Набій 7.62-мм (Суцільнометалева оболонка) item.ammo_standard.r762_he.name=Набій 7.62-мм (Фугасний) item.ammo_standard.r762_jhp.name=Набій 7.62-мм (Експансивний) -item.ammo_standard.r762_sp.name=Набій 7.62-мм (Напівоболонковй) +item.ammo_standard.r762_sp.name=Набій 7.62-мм (Напівоболонковий) item.ammo_standard.rocket_demo.name=Ракета, Руйнівна item.ammo_standard.rocket_he.name=Ракета, Фугасна item.ammo_standard.rocket_heat.name=Ракета, Кумулятивна @@ -2361,7 +2361,7 @@ item.chlorophyte_pickaxe.name=Хлорофітове кайло item.chocolate.name=Панцершоколад item.chocolate.desc=Танковий шоколад? Впевнений, що це просто мет. item.chocolate_milk.name=Шоколадне молоко -item.chopper.name=Гвинтокрил Мислиивець +item.chopper.name=Гвинтокрил Мисливець item.chopper_blades.name=Лопать Гвинтокрила Мисливця item.chopper_gun.name=Імпульсна гармата item.chopper_head.name=Кокпіт Гвинтокрила Мисливця @@ -2572,7 +2572,7 @@ item.crystal_horn.name=Кристальний ріг item.crystal_horn.desc=Не справжній ріг. item.crystal_horn.desc.P11=Справжній ріг. item.crystal_iron.name=Кристал заліза -item.crystal_lead.name=Кристал сввинцю +item.crystal_lead.name=Кристал свинцю item.crystal_lapis.name=Кристал лазуриту item.crystal_lithium.name=Кристал літію item.crystal_niter.name=Кристал нітрату калію @@ -2978,7 +2978,7 @@ item.hazmat_plate_red.name=Удосконалена захисна куртка item.hazmat_red_kit.name=Удосконалений захисний комплект item.heart_booster.name=Серце підсилювач item.heart_container.name=Ціле серце -item.heart_fab.name=Чудове серце +item.heart_fab.name=Серце темряви item.heart_piece.name=Частинка серця item.heavy_component.name=Важкий компонент: %s item.hev_battery.name=Батарея костюма @@ -5228,10 +5228,10 @@ tile.det_cord.name=Детонуючий шнур tile.det_miner.name=Шахтарський заряд tile.det_nuke.name=Ядерний заряд tile.dfc_core.name=Ядро реактору темного синтезу -tile.dfc_emitter.name=Випромінювач рекатору темного синтезу -tile.dfc_injector.name=Паливний інжектор рекатору темного синтезу -tile.dfc_receiver.name=Приймач рекатору темного синтезу -tile.dfc_stabilizer.name=Стабілізатор рекатору темного синтезу +tile.dfc_emitter.name=Випромінювач реактору темного синтезу +tile.dfc_injector.name=Паливний інжектор реактору темного синтезу +tile.dfc_receiver.name=Приймач реактору темного синтезу +tile.dfc_stabilizer.name=Стабілізатор реактору темного синтезу tile.dirt_dead.name=Мертвий ґрунт tile.dirt_oily.name=Нафтовий ґрунт tile.drill_pipe.name=Бурильна труба From 381febd64eeeac839054371801b72322edc35ab4 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Wed, 28 May 2025 16:00:43 +0300 Subject: [PATCH 098/491] Update UA --- src/main/resources/assets/hbm/lang/uk_UA.lang | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index b3b66d3c5..38cc3b361 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -16,7 +16,7 @@ achievement.bossMaskman.desc=Наваляти великому хлопчику. achievement.bossMaskman=6 місяців строкової служби і все, що я отримав, - це паршива футболка achievement.bossMeltdown.desc=Скоріше жахливо, ніж чудово, але я прийму те що можу отримати. achievement.bossMeltdown=3.6 Рентген -achievement.bossWorm.desc=Фабстафф. Моя дупа. А ти рахуй. +achievement.bossWorm.desc=Просто маленький металевий хробак. achievement.bossWorm=Розбирання Баллс-О-Трон achievement.bossUFO.desc=Йо, що у нас тут? Величазний космічний корабель наближається до блок-корабля? achievement.bossUFO=Ай Лмао @@ -905,6 +905,7 @@ crucible.tcalloy=Виробництво технецієвої сталі damage.inset=Опір при повному комплекті: damage.item=Опір до: +damage.category.EN=Енергії damage.category.EXPL=Вибухів damage.category.FIRE=Вогню damage.category.PROJ=Снарядів @@ -2275,8 +2276,6 @@ item.canned_tuna.name=Консервований тунець item.canned_tuna.desc=Я не можу сказати, чи це справді тунець, чи сушений цемент. item.canned_yogurt.name=Консервований йогурт item.canned_yogurt.desc=Мабуть, зіпсований, але що поробиш. -item.canteen_13.name=Фляга Сховища 13 -item.canteen_fab.name=Чудова горілка item.canteen_vodka.name=Стильна фляга item.cap_fritz.name=Кришка від пляшки Фріц-Коли item.cap_korl.name=Кришка від пляшки Корлу @@ -2720,7 +2719,6 @@ item.euphemium_plate.name=Юхимієвий нагрудник item.euphemium_stopper.name=Стопор item.explosive_lenses.name=Масив вибухових лінз item.explosive_lenses.desc=Збірка 8 пластичних вибухових лінз з тонким$алюмінієвим штовхачем, дюралюмінієвим щитом, та$мініатюрними дротяномостовим детонатором. -item.fabsols_vodka.name=Горілка Фабсол item.factory_core_advanced.name=Advanced Factory Energy Cluster item.factory_core_titanium.name=Basic Factory Energy Cluster item.fallout.name=Купка радіоактивних опадів From 9ff55acccf6bf15a3ea6d698178437c443686a21 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 28 May 2025 16:56:21 +0200 Subject: [PATCH 099/491] destroy tickets when we aren't using them --- changelog | 4 +- .../blocks/machine/MachineChemicalPlant.java | 2 + .../hbm/entity/item/EntityDeliveryDrone.java | 4 +- .../logic/EntityExplosionChunkloading.java | 2 +- .../com/hbm/entity/logic/EntityPlaneBase.java | 2 +- .../missile/EntityMissileAntiBallistic.java | 5 +- .../entity/missile/EntityMissileBaseNT.java | 4 +- .../projectile/EntityArtilleryRocket.java | 4 +- .../projectile/EntityArtilleryShell.java | 4 +- .../projectile/EntityBulletBaseMK4CL.java | 4 +- .../com/hbm/items/tool/ItemToolAbility.java | 10 ---- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 + .../tileentity/RenderChemicalPlant.java | 55 ++++++++++++++++++ .../render/tileentity/RenderChemplant.java | 1 + .../TileEntityMachineChemicalPlant.java | 34 +++++++++++ .../machine/TileEntityMachineChemplant.java | 1 + .../{chemplant.obj => chemical_plant.obj} | 0 .../{chemplant.png => chemical_plant.png} | Bin ...ant_fluid.png => chemical_plant_fluid.png} | Bin 20 files changed, 107 insertions(+), 32 deletions(-) create mode 100644 src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java rename src/main/resources/assets/hbm/models/machines/{chemplant.obj => chemical_plant.obj} (100%) rename src/main/resources/assets/hbm/textures/models/machines/{chemplant.png => chemical_plant.png} (100%) rename src/main/resources/assets/hbm/textures/models/machines/{chemplant_fluid.png => chemical_plant_fluid.png} (100%) diff --git a/changelog b/changelog index 45c3f8101..cf105af6d 100644 --- a/changelog +++ b/changelog @@ -26,4 +26,6 @@ * Fixed non-standard template folder recipes not using the correct icon * Fixed jetpack flight time not resetting when equipped like armor, causing kicks on servers that don't have flying cheats allowed * Fixed missing energy damage category localization -* Fixed server crash caused by tool abilities \ No newline at end of file +* Fixed server crash caused by tool abilities +* Fixed chunkloading entities not releasing their loading tickets properly +* Potentially fixed a dupe issue related to tool abilities \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java b/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java index 58fd028c6..6e9669efe 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java @@ -1,6 +1,7 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; @@ -14,6 +15,7 @@ public class MachineChemicalPlant extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachineChemicalPlant(); return null; } diff --git a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java index 951fae761..ac480e2e3 100644 --- a/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java +++ b/src/main/java/com/hbm/entity/item/EntityDeliveryDrone.java @@ -209,9 +209,7 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory, public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { - for(ChunkCoordIntPair chunk : loaderTicket.getChunkList()) { - ForgeChunkManager.unforceChunk(loaderTicket, chunk); - } + ForgeChunkManager.releaseTicket(loaderTicket); } } diff --git a/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java b/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java index ca2ad6f6f..6d5611950 100644 --- a/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java +++ b/src/main/java/com/hbm/entity/logic/EntityExplosionChunkloading.java @@ -45,7 +45,7 @@ public abstract class EntityExplosionChunkloading extends Entity implements IChu public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null && loadedChunk != null) { - ForgeChunkManager.unforceChunk(loaderTicket, loadedChunk); + ForgeChunkManager.releaseTicket(loaderTicket); } } } diff --git a/src/main/java/com/hbm/entity/logic/EntityPlaneBase.java b/src/main/java/com/hbm/entity/logic/EntityPlaneBase.java index ebb1accb2..1a9910df7 100644 --- a/src/main/java/com/hbm/entity/logic/EntityPlaneBase.java +++ b/src/main/java/com/hbm/entity/logic/EntityPlaneBase.java @@ -187,7 +187,7 @@ public abstract class EntityPlaneBase extends Entity implements IChunkLoader { public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { - for(ChunkCoordIntPair chunk : loadedChunks) ForgeChunkManager.unforceChunk(loaderTicket, chunk); + ForgeChunkManager.releaseTicket(loaderTicket); } } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java b/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java index 8cd806ca0..b4e296fe0 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileAntiBallistic.java @@ -74,7 +74,6 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements if(prevTracking == null && this.tracking != null) { ExplosionLarge.spawnShock(worldObj, posX, posY, posZ, 24, 3F); } - if(this.tracking != null && !this.tracking.isDead) { this.aimAtTarget(); } else { @@ -222,9 +221,7 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { - for(ChunkCoordIntPair chunk : loadedChunks) { - ForgeChunkManager.unforceChunk(loaderTicket, chunk); - } + ForgeChunkManager.releaseTicket(loaderTicket); } } diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java b/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java index c0e51f619..610341732 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileBaseNT.java @@ -348,9 +348,7 @@ public abstract class EntityMissileBaseNT extends EntityThrowableInterp implemen public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { - for(ChunkCoordIntPair chunk : loadedChunks) { - ForgeChunkManager.unforceChunk(loaderTicket, chunk); - } + ForgeChunkManager.releaseTicket(loaderTicket); } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityArtilleryRocket.java b/src/main/java/com/hbm/entity/projectile/EntityArtilleryRocket.java index 2c1773df7..9167c33a7 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityArtilleryRocket.java +++ b/src/main/java/com/hbm/entity/projectile/EntityArtilleryRocket.java @@ -178,9 +178,7 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { - for(ChunkCoordIntPair chunk : loadedChunks) { - ForgeChunkManager.unforceChunk(loaderTicket, chunk); - } + ForgeChunkManager.releaseTicket(loaderTicket); } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java b/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java index e608b49d5..9258e5a7d 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java +++ b/src/main/java/com/hbm/entity/projectile/EntityArtilleryShell.java @@ -213,9 +213,7 @@ public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoa public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { - for(ChunkCoordIntPair chunk : loadedChunks) { - ForgeChunkManager.unforceChunk(loaderTicket, chunk); - } + ForgeChunkManager.releaseTicket(loaderTicket); } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4CL.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4CL.java index 42591af80..9e551c8e6 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4CL.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4CL.java @@ -60,9 +60,7 @@ public class EntityBulletBaseMK4CL extends EntityBulletBaseMK4 implements IChunk public void clearChunkLoader() { if(!worldObj.isRemote && loaderTicket != null) { - for(ChunkCoordIntPair chunk : loadedChunks) { - ForgeChunkManager.unforceChunk(loaderTicket, chunk); - } + ForgeChunkManager.releaseTicket(loaderTicket); } } diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index b23fe62d8..bd3fc6ddb 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -31,7 +31,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.Minecraft; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; @@ -47,7 +46,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.play.client.C07PacketPlayerDigging; import net.minecraft.network.play.server.S23PacketBlockChange; import net.minecraft.stats.StatList; import net.minecraft.util.EnumChatFormatting; @@ -370,14 +368,6 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro player.destroyCurrentEquippedItem(); } } - - // TODO: Missing from other method, may be unneeded - if(flag && flag1) { - block.harvestBlock(world, player, x, y, z, l); - } - - // TODO: Added from other method, may be unneeded - Minecraft.getMinecraft().getNetHandler().addToSendQueue(new C07PacketPlayerDigging(2, x, y, z, Minecraft.getMinecraft().objectMouseOver.sideHit)); } // Why was this commented out? diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 4511c9fc8..294781953 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -268,6 +268,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssembler.class, new RenderAssembler()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssemfac.class, new RenderAssemfac()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemplant.class, new RenderChemplant()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemicalPlant.class, new RenderChemicalPlant()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineChemfac.class, new RenderChemfac()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineFluidTank.class, new RenderFluidTank()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineBAT9000.class, new RenderBAT9000()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 9d0008cff..8e7b9f6b3 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -148,6 +148,7 @@ public class ResourceManager { public static final IModelCustom chemplant_piston = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_piston.obj")); public static final IModelCustom chemplant_fluid = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_fluid.hmf")); public static final IModelCustom chemplant_fluidcap = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_fluidcap.hmf")); + public static final IModelCustom chemical_plant = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemical_plant.obj")); public static final IModelCustom chemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chemfac.obj")); //Mixer @@ -579,6 +580,7 @@ public class ResourceManager { public static final ResourceLocation chemplant_spinner_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_spinner_new.png"); public static final ResourceLocation chemplant_piston_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_piston_new.png"); public static final ResourceLocation chemplant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/lavabase_small.png"); + public static final ResourceLocation chemical_plant_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant.png"); public static final ResourceLocation chemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemfac.png"); //Mixer diff --git a/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java b/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java new file mode 100644 index 000000000..591571c57 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java @@ -0,0 +1,55 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderChemicalPlant extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glRotated(90, 0, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + + bindTexture(ResourceManager.chemical_plant_tex); + ResourceManager.chemical_plant.renderPart("Base"); + ResourceManager.chemical_plant.renderPart("Slider"); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_chemical_plant); + } + + @Override + public IItemRenderer getRenderer() { + + return new ItemRenderBase() { + + public void renderInventory() { + GL11.glTranslated(0, -2, 0); + GL11.glScaled(3.5, 3.5, 3.5); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.chemical_plant_tex); + ResourceManager.chemical_plant.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderChemplant.java b/src/main/java/com/hbm/render/tileentity/RenderChemplant.java index 58f90eff9..298c358d0 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderChemplant.java +++ b/src/main/java/com/hbm/render/tileentity/RenderChemplant.java @@ -12,6 +12,7 @@ import com.hbm.tileentity.machine.TileEntityMachineChemplant; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; +@Deprecated public class RenderChemplant extends TileEntitySpecialRenderer { public RenderChemplant() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java new file mode 100644 index 000000000..c214b7e79 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -0,0 +1,34 @@ +package com.hbm.tileentity.machine; + +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.TileEntityMachineBase; + +public class TileEntityMachineChemicalPlant extends TileEntityMachineBase { + + public FluidTank[] inputTanks; + public FluidTank[] outputTanks; + + public long power; + public long maxPower = 1_000_000; + + public TileEntityMachineChemicalPlant() { + super(22); + this.inputTanks = new FluidTank[3]; + this.outputTanks = new FluidTank[3]; + for(int i = 0; i < 3; i++) { + this.inputTanks[i] = new FluidTank(Fluids.NONE, 24_000); + this.outputTanks[i] = new FluidTank(Fluids.NONE, 24_000); + } + } + + @Override + public String getName() { + return "container.machineChemicalPlant"; + } + + @Override + public void updateEntity() { + + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java index a482e7e20..cec95fb09 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java @@ -43,6 +43,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class TileEntityMachineChemplant extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider { public long power; diff --git a/src/main/resources/assets/hbm/models/machines/chemplant.obj b/src/main/resources/assets/hbm/models/machines/chemical_plant.obj similarity index 100% rename from src/main/resources/assets/hbm/models/machines/chemplant.obj rename to src/main/resources/assets/hbm/models/machines/chemical_plant.obj diff --git a/src/main/resources/assets/hbm/textures/models/machines/chemplant.png b/src/main/resources/assets/hbm/textures/models/machines/chemical_plant.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/machines/chemplant.png rename to src/main/resources/assets/hbm/textures/models/machines/chemical_plant.png diff --git a/src/main/resources/assets/hbm/textures/models/machines/chemplant_fluid.png b/src/main/resources/assets/hbm/textures/models/machines/chemical_plant_fluid.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/machines/chemplant_fluid.png rename to src/main/resources/assets/hbm/textures/models/machines/chemical_plant_fluid.png From 087be46083d4193641417948f3babf2269883a37 Mon Sep 17 00:00:00 2001 From: Kirby7871 <123486466+Kirby7871@users.noreply.github.com> Date: Thu, 29 May 2025 02:01:39 +0200 Subject: [PATCH 100/491] Update TileEntityLaunchPadBase.java Added another OC (OpenComputers) function, getPos(). It returns the position of the launch pad. (x,y,z) --- .../hbm/tileentity/bomb/TileEntityLaunchPadBase.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java index 051e69092..623f78370 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java @@ -528,6 +528,12 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl return new Object[] {false}; } + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getPos(Context context, Arguments args) { + return new Object[] {xCoord, yCoord, zCoord}; + } + @Override @Optional.Method(modid = "OpenComputers") public String[] methods() { @@ -536,7 +542,8 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl "getFluid", "canLaunch", "getTier", - "launch" + "launch", + "getPos" }; } @@ -554,6 +561,8 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl return getTier(context, args); case ("launch"): return launch(context, args); + case ("getPos"): + return getPos(context, args); } throw new NoSuchMethodException(); } From 65f1866e8c9d4324dc5c61564925691fdf5b27e9 Mon Sep 17 00:00:00 2001 From: Kirby7871 <123486466+Kirby7871@users.noreply.github.com> Date: Thu, 29 May 2025 02:06:40 +0200 Subject: [PATCH 101/491] Update TileEntityTurretBaseNT.java Added an OpenComputers function, getPos(). It returns the (x,y,z) coordinates of the turret in question --- .../hbm/tileentity/turret/TileEntityTurretBaseNT.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java index 18b960f67..8c7c15646 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java @@ -995,6 +995,12 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple return new Object[] {this.aligned}; } + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getPos(Context context, Arguments args) { + return new Object[] {xCoord, yCoord, zCoord}; + } + @Override @Optional.Method(modid = "OpenComputers") public boolean canConnectNode(ForgeDirection side) { @@ -1016,6 +1022,7 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple "hasTarget", "getAngle", "isAligned" + "getPos" }; } @@ -1045,6 +1052,8 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple return getAngle(context, args); case "isAligned": return isAligned(context, args); + case "getPos": + return getPos(context, args); } throw new NoSuchMethodException(); } From 3a8e0048a3567e0543d4d67ed840e99210e334f8 Mon Sep 17 00:00:00 2001 From: Kirby7871 <123486466+Kirby7871@users.noreply.github.com> Date: Thu, 29 May 2025 02:12:39 +0200 Subject: [PATCH 102/491] Update TileEntityMachineRadarNT.java Added an OpenComputers function, getPos(). It retuns the position of this radar. --- .../hbm/tileentity/machine/TileEntityMachineRadarNT.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java index 5e4cae3c7..7006399c0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java @@ -694,6 +694,12 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I return new Object[]{false, e.posX, e.posY, e.posZ, type}; } + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getPos(Context context, Arguments args) { + return new Object[] {xCoord, yCoord, zCoord}; + } + @Override @Optional.Method(modid = "OpenComputers") public String[] methods() { @@ -707,6 +713,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I "isIndexPlayer", "getIndexType", "getEntityAtIndex" + "getPos" }; } @@ -732,6 +739,8 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I return getIndexType(context, args); case ("getEntityAtIndex"): return getEntityAtIndex(context, args); + case("getPos"): + return getPos(context, args); } throw new NoSuchMethodException(); } From d01f54d1bac85c072293a8f21ca3c07f7e14d5cd Mon Sep 17 00:00:00 2001 From: Kirby7871 <123486466+Kirby7871@users.noreply.github.com> Date: Thu, 29 May 2025 02:36:36 +0200 Subject: [PATCH 103/491] Update TileEntityMachineRadarNT.java Fixed a comma typo --- .../com/hbm/tileentity/machine/TileEntityMachineRadarNT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java index 7006399c0..9e3c6e6fc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java @@ -712,7 +712,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I "getAmount", "isIndexPlayer", "getIndexType", - "getEntityAtIndex" + "getEntityAtIndex", "getPos" }; } From 4f975293a5ca51373887bfff9a42fe9c8b9dbd32 Mon Sep 17 00:00:00 2001 From: Kirby7871 <123486466+Kirby7871@users.noreply.github.com> Date: Thu, 29 May 2025 02:37:27 +0200 Subject: [PATCH 104/491] Update TileEntityTurretBaseNT.java Fixed Comma typo --- .../java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java index 8c7c15646..67455333e 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java @@ -1021,7 +1021,7 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple "getTargeting", "hasTarget", "getAngle", - "isAligned" + "isAligned", "getPos" }; } From a57e5384791fe79db7ba6bc693ad91d2dedad18b Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 29 May 2025 18:09:00 +0200 Subject: [PATCH 105/491] go go gadget: 5 cups of coffee --- .../com/hbm/inventory/SlotNonRetarded.java | 2 +- .../com/hbm/inventory/UpgradeManagerNT.java | 9 +- .../inventory/container/ContainerBase.java | 22 ++++ .../ContainerMachineChemicalPlant.java | 79 ++++++++++++ .../gui/GUIMachineChemicalPlant.java | 66 ++++++++++ .../recipes/loader/GenericRecipes.java | 121 +++++++++++++++++- src/main/java/com/hbm/items/ModItems.java | 28 ---- .../com/hbm/items/tool/ItemToolAbility.java | 12 +- src/main/java/com/hbm/main/MainRegistry.java | 8 ++ .../TileEntityMachineChemicalPlant.java | 103 ++++++++++++++- .../textures/gui/processing/gui_chemplant.png | Bin 4015 -> 4029 bytes .../gui/processing/gui_recipe_selector.png | Bin 0 -> 1778 bytes 12 files changed, 413 insertions(+), 37 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_recipe_selector.png diff --git a/src/main/java/com/hbm/inventory/SlotNonRetarded.java b/src/main/java/com/hbm/inventory/SlotNonRetarded.java index 41af31292..66d4fed74 100644 --- a/src/main/java/com/hbm/inventory/SlotNonRetarded.java +++ b/src/main/java/com/hbm/inventory/SlotNonRetarded.java @@ -7,7 +7,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; /** - * Because vanilla slots have severe mental disabilities that prevent them from working as expected. + * Because vanilla slots have shit idiot brain fungus that prevent them from working as expected. * @author hbm */ @NotableComments diff --git a/src/main/java/com/hbm/inventory/UpgradeManagerNT.java b/src/main/java/com/hbm/inventory/UpgradeManagerNT.java index 55422fb8d..3ae55ae72 100644 --- a/src/main/java/com/hbm/inventory/UpgradeManagerNT.java +++ b/src/main/java/com/hbm/inventory/UpgradeManagerNT.java @@ -22,12 +22,19 @@ import java.util.HashMap; */ public class UpgradeManagerNT { + public TileEntity owner; public ItemStack[] cachedSlots; private UpgradeType mutexType; public HashMap upgrades = new HashMap<>(); - public void checkSlots(TileEntity te, ItemStack[] slots, int start, int end) { + public UpgradeManagerNT(TileEntity te) { this.owner = te; } + @Deprecated public UpgradeManagerNT() { } + + public void checkSlots(ItemStack[] slots, int start, int end) { checkSlots(owner, slots, start, end); } + @Deprecated public void checkSlots(TileEntity te, ItemStack[] slots, int start, int end) { checkSlotsInternal(te, slots, start, end); } + + private void checkSlotsInternal(TileEntity te, ItemStack[] slots, int start, int end) { if(!(te instanceof IUpgradeInfoProvider) || slots == null) return; diff --git a/src/main/java/com/hbm/inventory/container/ContainerBase.java b/src/main/java/com/hbm/inventory/container/ContainerBase.java index bafd2442e..665d3d275 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerBase.java +++ b/src/main/java/com/hbm/inventory/container/ContainerBase.java @@ -1,6 +1,9 @@ package com.hbm.inventory.container; +import com.hbm.inventory.SlotCraftingOutput; import com.hbm.inventory.SlotNonRetarded; +import com.hbm.inventory.SlotTakeOnly; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -57,6 +60,11 @@ public class ContainerBase extends Container { return slotOriginal; } + + /** Standard player inventory with default hotbar offset */ + public void playerInv(InventoryPlayer invPlayer, int playerInvX, int playerInvY) { + playerInv(invPlayer, playerInvX, playerInvY, playerInvY + 58); + } /** Used to quickly set up the player inventory */ public void playerInv(InventoryPlayer invPlayer, int playerInvX, int playerInvY, int playerHotbarY) { @@ -88,4 +96,18 @@ public class ContainerBase extends Container { } } } + + public void addOutputSlots(EntityPlayer player, IInventory inv, int from, int x, int y, int rows, int cols) { + int slotSize = 18; + for(int row = 0; row < rows; row++) for(int col = 0; col < cols; col++) { + this.addSlotToContainer(new SlotCraftingOutput(player, inv, col + row * cols + from, x + col * slotSize, y + row * slotSize)); + } + } + + public void addTakeOnlySlots(IInventory inv, int from, int x, int y, int rows, int cols) { + int slotSize = 18; + for(int row = 0; row < rows; row++) for(int col = 0; col < cols; col++) { + this.addSlotToContainer(new SlotTakeOnly(inv, col + row * cols + from, x + col * slotSize, y + row * slotSize)); + } + } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java new file mode 100644 index 000000000..dd453f93c --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java @@ -0,0 +1,79 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemChemistryTemplate; +import com.hbm.items.machine.ItemMachineUpgrade; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineChemicalPlant extends ContainerBase { + + public ContainerMachineChemicalPlant(InventoryPlayer invPlayer, IInventory chemicalPlant) { + super(invPlayer, chemicalPlant); + + // Battery + this.addSlotToContainer(new SlotNonRetarded(chemicalPlant, 0, 152, 81)); + // Schematic + this.addSlotToContainer(new SlotNonRetarded(chemicalPlant, 1, 35, 126)); + // Upgrades + this.addSlots(chemicalPlant, 2, 152, 108, 2, 1); + // Solid Input + this.addSlots(chemicalPlant, 4, 8, 99, 1, 3); + // Solid Output + this.addOutputSlots(invPlayer.player, chemicalPlant, 7, 80, 99, 1, 3); + // Fluid Input + this.addSlots( chemicalPlant, 10, 8, 54, 1, 3); + this.addTakeOnlySlots( chemicalPlant, 13, 8, 72, 1, 3); + // Fluid Output + this.addSlots( chemicalPlant, 16, 80, 54, 1, 3); + this.addTakeOnlySlots( chemicalPlant, 19, 80, 72, 1, 3); + + this.playerInv(invPlayer, 8, 174); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack slotOriginal = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + slotOriginal = slotStack.copy(); + + if(index <= tile.getSizeInventory() - 1) { + SlotCraftingOutput.checkAchievements(player, slotStack); + if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemChemistryTemplate) { + if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { + if(!this.mergeItemStack(slotStack, 2, 4, false)) return null; + } else { + if(!this.mergeItemStack(slotStack, 4, 7, false)) return null; + } + } + + if(slotStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, slotStack); + } + + return slotOriginal; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java new file mode 100644 index 000000000..df47af6aa --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -0,0 +1,66 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineChemicalPlant; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineChemicalPlant extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_chemplant.png"); + private TileEntityMachineChemicalPlant chemplant; + + public GUIMachineChemicalPlant(InventoryPlayer invPlayer, TileEntityMachineChemicalPlant tedf) { + super(new ContainerMachineChemicalPlant(invPlayer, tedf)); + chemplant = tedf; + + this.xSize = 176; + this.ySize = 256; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + for(int i = 0; i < 3; i++) { + chemplant.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 8 + i * 18, guiTop + 18, 16, 34); + chemplant.outputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 80 + i * 18, guiTop + 18, 16, 34); + } + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, chemplant.power, chemplant.maxPower); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.chemplant.hasCustomInventoryName() ? this.chemplant.getInventoryName() : I18n.format(this.chemplant.getInventoryName()); + + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int p = (int) (chemplant.power * 61 / chemplant.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); + + if(chemplant.maxProgress > 0) { + int j = chemplant.progress * 70 / chemplant.maxProgress; + drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); + } + + for(int i = 0; i < 3; i++) { + chemplant.inputTanks[i].renderTank(guiLeft + 8, guiTop + 52, this.zLevel, 16, 34); + chemplant.outputTanks[i].renderTank(guiLeft + 80, guiTop + 52, this.zLevel, 16, 34); + } + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 5ddbcecbc..a415c92f1 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -6,10 +6,14 @@ import java.util.HashMap; import java.util.List; import java.util.Random; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemFluidIcon; import net.minecraft.item.ItemStack; import net.minecraft.util.WeightedRandom; @@ -54,14 +58,54 @@ public abstract class GenericRecipes extends SerializableRecipe { } @Override - public void readRecipe(JsonElement recipe) { + public void readRecipe(JsonElement element) { + JsonObject obj = (JsonObject) element; + GenericRecipe recipe = instantiateRecipe(obj.get("name").getAsString(), obj.get("duration").getAsInt()); + + if(this.inputItemLimit() > 0) recipe.inputItem = this.readAStackArray(obj.get("inputItem").getAsJsonArray()); + if(this.inputFluidLimit() > 0) recipe.inputFluid = this.readFluidArray(obj.get("inputFluid").getAsJsonArray()); + if(this.outputItemLimit() > 0) recipe.outputItem = this.readOutputArray(obj.get("outputItem").getAsJsonArray()); + if(this.outputFluidLimit() > 0) recipe.outputFluid = this.readFluidArray(obj.get("outputFluid").getAsJsonArray()); + + readExtraData(element, recipe); + + register(recipe); } + public GenericRecipe instantiateRecipe(String name, int duration) { return new GenericRecipe(name, duration); } + public void readExtraData(JsonElement element, GenericRecipe recipe) { } + @Override public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { } + + public void writeExtraData(Object recipe, JsonWriter writer) { } + + public IOutput[] readOutputArray(JsonArray array) { + IOutput[] output = new IOutput[array.size()]; + int index = 0; + + for(JsonElement element : array) { + JsonArray arrayElement = element.getAsJsonArray(); + String type = arrayElement.get(0).getAsString(); + if("single".equals(type)) { + ChanceOutput co = new ChanceOutput(); + co.deserialize(arrayElement); + output[index] = co; + } else if("multi".equals(type)) { + ChanceOutputMulti com = new ChanceOutputMulti(); + com.deserialize(arrayElement); + output[index] = com; + } else { + throw new IllegalArgumentException("Invalid IOutput type '" + type + "', expected 'single' or 'multi' for recipe " + array.toString()); + } + index++; + } + + return output; + } /////////////// /// CLASSES /// @@ -75,25 +119,53 @@ public abstract class GenericRecipes extends SerializableRecipe { public IOutput[] outputItem; public FluidStack[] outputFluid; public int duration; + public ItemStack icon; public GenericRecipe(String name, int duration) { this.name = name; this.duration = duration; } + + public GenericRecipe setIcon(ItemStack icon) { + this.icon = icon; + return this; + } + + public ItemStack getIcon() { + + if(icon == null) { + if(outputItem != null) { + if(outputItem[0] instanceof ChanceOutput) icon = ((ChanceOutput) outputItem[0]).stack.copy(); + if(outputItem[0] instanceof ChanceOutputMulti) icon = ((ChanceOutputMulti) outputItem[0]).pool.get(0).stack.copy(); + return icon; + } + if(outputFluid != null) { + icon = ItemFluidIcon.make(outputFluid[0]); + } + } + + if(icon == null) icon = new ItemStack(ModItems.nothing); + return icon; + } } public static interface IOutput { public boolean possibleMultiOutput(); public ItemStack collapse(); + public void serialize(JsonWriter writer) throws IOException; + public void deserialize(JsonArray array); } /** A chance output, produces either an ItemStack or null */ public static class ChanceOutput extends WeightedRandom.Item implements IOutput { + // a weight of 0 means this output is not part of a weighted output + public ItemStack stack; public float chance; - public ChanceOutput(ItemStack stack) { this(stack, 1F, 1); } + public ChanceOutput() { super(0); } // for deserialization + public ChanceOutput(ItemStack stack) { this(stack, 1F, 0); } public ChanceOutput(ItemStack stack, int weight) { this(stack, 1F, weight); } public ChanceOutput(ItemStack stack, float chance, int weight) { super(weight); @@ -108,6 +180,34 @@ public abstract class GenericRecipes extends SerializableRecipe { } @Override public boolean possibleMultiOutput() { return false; } + + @Override + public void serialize(JsonWriter writer) throws IOException { + boolean standardStack = chance >= 1 && itemWeight == 0; + if(!standardStack) writer.beginArray(); + + if(itemWeight == 0) writer.value("single"); + SerializableRecipe.writeItemStack(stack, writer); + + if(!standardStack) { + writer.value(chance); + if(itemWeight > 0) writer.value(itemWeight); + writer.endArray(); + } + } + + @Override + public void deserialize(JsonArray array) { + + if(array.get(0).isJsonPrimitive()) { // "single" tag, don't apply weight + this.stack = SerializableRecipe.readItemStack(array.get(1).getAsJsonArray()); + if(array.size() > 2) this.chance = array.get(2).getAsFloat(); + } else { // hopefully an array, therefore a weighted result + this.stack = SerializableRecipe.readItemStack(array.get(0).getAsJsonArray()); + if(array.size() > 1) this.chance = array.get(1).getAsFloat(); + if(array.size() > 2) this.itemWeight = array.get(2).getAsInt(); + } + } } /** Multiple choice chance output, produces a ChanceOutput chosen randomly by weight */ @@ -117,5 +217,22 @@ public abstract class GenericRecipes extends SerializableRecipe { @Override public ItemStack collapse() { return ((ChanceOutput) WeightedRandom.getRandomItem(RNG, pool)).collapse(); } @Override public boolean possibleMultiOutput() { return pool.size() > 1; } + + @Override + public void serialize(JsonWriter writer) throws IOException { + writer.beginArray(); + writer.value("multi"); + for(ChanceOutput output : pool) output.serialize(writer); + writer.endArray(); + } + + @Override + public void deserialize(JsonArray array) { + for(JsonElement element : array) { + ChanceOutput output = new ChanceOutput(); + output.deserialize(element.getAsJsonArray()); + pool.add(output); + } + } } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index e268f4d4b..b27e20e3e 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1152,15 +1152,6 @@ public class ModItems { public static Item ammo_bag_infinite; public static Item casing_bag; - public static Item test_nuke_igniter; - public static Item test_nuke_propellant; - public static Item test_nuke_tier1_shielding; - public static Item test_nuke_tier2_shielding; - public static Item test_nuke_tier1_bullet; - public static Item test_nuke_tier2_bullet; - public static Item test_nuke_tier1_target; - public static Item test_nuke_tier2_target; - public static Item cordite; public static Item ballistite; public static Item ball_dynamite; @@ -2258,15 +2249,6 @@ public class ModItems { redstone_sword = new RedstoneSword(ToolMaterial.STONE).setUnlocalizedName("redstone_sword").setCreativeTab(CreativeTabs.tabCombat).setTextureName(RefStrings.MODID + ":redstone_sword"); big_sword = new BigSword(ToolMaterial.EMERALD).setUnlocalizedName("big_sword").setCreativeTab(CreativeTabs.tabCombat).setTextureName(RefStrings.MODID + ":big_sword"); - test_nuke_igniter = new Item().setUnlocalizedName("test_nuke_igniter").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_igniter"); - test_nuke_propellant = new Item().setUnlocalizedName("test_nuke_propellant").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_propellant"); - test_nuke_tier1_shielding = new Item().setUnlocalizedName("test_nuke_tier1_shielding").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_shielding"); - test_nuke_tier2_shielding = new Item().setUnlocalizedName("test_nuke_tier2_shielding").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_shielding"); - test_nuke_tier1_bullet = new Item().setUnlocalizedName("test_nuke_tier1_bullet").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_bullet"); - test_nuke_tier2_bullet = new Item().setUnlocalizedName("test_nuke_tier2_bullet").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_bullet"); - test_nuke_tier1_target = new Item().setUnlocalizedName("test_nuke_tier1_target").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_target"); - test_nuke_tier2_target = new Item().setUnlocalizedName("test_nuke_tier2_target").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_target"); - ingot_th232 = new Item().setUnlocalizedName("ingot_th232").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_th232"); ingot_uranium = new Item().setUnlocalizedName("ingot_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_uranium"); ingot_u233 = new Item().setUnlocalizedName("ingot_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_u233"); @@ -4998,16 +4980,6 @@ public class ModItems { GameRegistry.registerItem(redstone_sword, redstone_sword.getUnlocalizedName()); GameRegistry.registerItem(big_sword, big_sword.getUnlocalizedName()); - //Test Nuke - GameRegistry.registerItem(test_nuke_igniter, test_nuke_igniter.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_propellant, test_nuke_propellant.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier1_shielding, test_nuke_tier1_shielding.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier2_shielding, test_nuke_tier2_shielding.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier1_bullet, test_nuke_tier1_bullet.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier2_bullet, test_nuke_tier2_bullet.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier1_target, test_nuke_tier1_target.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier2_target, test_nuke_tier2_target.getUnlocalizedName()); - //Ingots GameRegistry.registerItem(ingot_uranium, ingot_uranium.getUnlocalizedName()); GameRegistry.registerItem(ingot_u233, ingot_u233.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index bd3fc6ddb..aa8ce2268 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -350,16 +350,16 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro Block block = world.getBlock(x, y, z); int l = world.getBlockMetadata(x, y, z); world.playAuxSFXAtEntity(player, 2001, x, y, z, Block.getIdFromBlock(block) + (world.getBlockMetadata(x, y, z) << 12)); - boolean flag = false; + boolean removedByPlayer = false; if(player.capabilities.isCreativeMode) { - flag = removeBlock(world, x, y, z, false, player); + removedByPlayer = removeBlock(world, x, y, z, false, player); player.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); } else { ItemStack itemstack = player.getCurrentEquippedItem(); - boolean flag1 = block.canHarvestBlock(player, l); + boolean canHarvest = block.canHarvestBlock(player, l); - flag = removeBlock(world, x, y, z, flag1, player); + removedByPlayer = removeBlock(world, x, y, z, canHarvest, player); if(itemstack != null) { itemstack.func_150999_a(world, block, x, y, z, player); @@ -368,6 +368,10 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro player.destroyCurrentEquippedItem(); } } + + if(removedByPlayer && canHarvest) { + block.harvestBlock(world, player, x, y, z, l); + } } // Why was this commented out? diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index bb5882cc8..1a455e86b 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1682,6 +1682,14 @@ public class MainRegistry { ignoreMappings.add("hbm:item.gun_cryolator_ammo"); ignoreMappings.add("hbm:item.canteen_fab"); ignoreMappings.add("hbm:item.fabsols_vodka"); + ignoreMappings.add("hbm:item.test_nuke_igniter"); + ignoreMappings.add("hbm:item.test_nuke_propellant"); + ignoreMappings.add("hbm:item.test_nuke_tier1_shielding"); + ignoreMappings.add("hbm:item.test_nuke_tier2_shielding"); + ignoreMappings.add("hbm:item.test_nuke_tier1_bullet"); + ignoreMappings.add("hbm:item.test_nuke_tier2_bullet"); + ignoreMappings.add("hbm:item.test_nuke_tier1_target"); + ignoreMappings.add("hbm:item.test_nuke_tier2_target"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index c214b7e79..c9bac3663 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -1,19 +1,47 @@ package com.hbm.tileentity.machine; +import java.util.HashMap; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.UpgradeManagerNT; +import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachineChemicalPlant; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.lib.Library; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.i18n.I18nUtil; -public class TileEntityMachineChemicalPlant extends TileEntityMachineBase { +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IGUIProvider { public FluidTank[] inputTanks; public FluidTank[] outputTanks; public long power; public long maxPower = 1_000_000; + public int progress; + public int maxProgress; + + public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); public TileEntityMachineChemicalPlant() { super(22); + this.inputTanks = new FluidTank[3]; this.outputTanks = new FluidTank[3]; for(int i = 0; i < 3; i++) { @@ -30,5 +58,78 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase { @Override public void updateEntity() { + if(!worldObj.isRemote) { + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + upgradeManager.checkSlots(slots, 2, 3); + + this.networkPackNT(100); + + } else { + + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + for(FluidTank tank : inputTanks) tank.serialize(buf); + for(FluidTank tank : outputTanks) tank.serialize(buf); + buf.writeLong(power); + buf.writeLong(maxPower); + buf.writeInt(progress); + buf.writeInt(maxProgress); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + for(FluidTank tank : inputTanks) tank.deserialize(buf); + for(FluidTank tank : outputTanks) tank.deserialize(buf); + this.power = buf.readLong(); + this.maxPower = buf.readLong(); + this.progress = buf.readInt(); + this.maxProgress = buf.readInt(); + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return maxPower; } + + @Override public FluidTank[] getReceivingTanks() { return inputTanks; } + @Override public FluidTank[] getSendingTanks() { return outputTanks; } + @Override public FluidTank[] getAllTanks() { return new FluidTank[] {inputTanks[0], inputTanks[1], inputTanks[2], outputTanks[0], outputTanks[1], outputTanks[2]}; } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineChemicalPlant(player.inventory, this); } + @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineChemicalPlant(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_chemical_plant)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 300) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_CONSUMPTION, "-" + (level * 30) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_DELAY, "+" + (level * 5) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public HashMap getValidUpgrades() { + HashMap upgrades = new HashMap<>(); + upgrades.put(UpgradeType.SPEED, 3); + upgrades.put(UpgradeType.POWER, 3); + upgrades.put(UpgradeType.OVERDRIVE, 6); + return upgrades; } } diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png index 824dd1ce99ffdf47214b6494f3055d833c8bcd01..ef8c8fc45a752b63dd48f4d63e53efc915476d80 100644 GIT binary patch literal 4029 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 literal 0 HcmV?d00001 From 87a1c01fe72538b478b1830c97bd1966299ed228 Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 30 May 2025 09:53:46 +1000 Subject: [PATCH 106/491] disable recipe sync by default, can be enabled by server operators --- src/main/java/com/hbm/config/GeneralConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/config/GeneralConfig.java b/src/main/java/com/hbm/config/GeneralConfig.java index ed0f1af67..09900f007 100644 --- a/src/main/java/com/hbm/config/GeneralConfig.java +++ b/src/main/java/com/hbm/config/GeneralConfig.java @@ -38,7 +38,7 @@ public class GeneralConfig { public static boolean enableGuideBook = true; public static boolean enableSoundExtension = true; public static boolean enableMekanismChanges = true; - public static boolean enableServerRecipeSync = true; + public static boolean enableServerRecipeSync = false; public static int normalSoundChannels = 200; public static boolean enableExpensiveMode = false; @@ -82,7 +82,7 @@ public class GeneralConfig { packetThreadingMaxCount = config.get(CATEGORY_GENERAL, "0.03_packetThreadingMaxCount", 1, "Maximum number of threads to create for packet threading. Must be greater than or equal to 0.02_packetThreadingCoreCount.").getInt(1); packetThreadingErrorBypass = config.get(CATEGORY_GENERAL, "0.04_packetThreadingErrorBypass", false, "Forces the bypassing of most packet threading errors, only enable this if directed to or if you know what you're doing.").getBoolean(false); - enableServerRecipeSync = config.get(CATEGORY_GENERAL, "0.05_enableServerRecipeSync", true, "Syncs any recipes customised via JSON to clients connecting to the server.").getBoolean(true); + enableServerRecipeSync = config.get(CATEGORY_GENERAL, "0.05_enableServerRecipeSync", false, "Syncs any recipes customised via JSON to clients connecting to the server.").getBoolean(false); enableDebugMode = config.get(CATEGORY_GENERAL, "1.00_enableDebugMode", false, "Enable debugging mode").getBoolean(false); enableMycelium = config.get(CATEGORY_GENERAL, "1.01_enableMyceliumSpread", false, "Allows glowing mycelium to spread").getBoolean(false); From e6b84bd6d361ed890e4b786c56794a2530babe2f Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 30 May 2025 09:54:39 +1000 Subject: [PATCH 107/491] fix guard on checkNBT --- src/main/java/com/hbm/items/ItemInventory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/items/ItemInventory.java b/src/main/java/com/hbm/items/ItemInventory.java index 63c5083a7..dd897a66e 100644 --- a/src/main/java/com/hbm/items/ItemInventory.java +++ b/src/main/java/com/hbm/items/ItemInventory.java @@ -38,7 +38,7 @@ public abstract class ItemInventory implements IInventory { } public NBTTagCompound checkNBT(NBTTagCompound nbt) { - if(nbt == null || !nbt.hasNoTags()) { + if(nbt != null && !nbt.hasNoTags()) { Random random = new Random(); try { From 70cd3d40713836eb9f6de52960a90d63cfd88a92 Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Sat, 31 May 2025 03:13:00 +0800 Subject: [PATCH 108/491] DDA cleanup --- src/main/java/com/hbm/config/BombConfig.java | 8 +- .../entity/logic/EntityNukeExplosionMK5.java | 27 ++- .../ExplosionNukeRayParallelized.java | 182 +++--------------- .../com/hbm/interfaces/IExplosionRay.java | 28 ++- src/main/java/com/hbm/util/ChunkKey.java | 32 +++ .../java/com/hbm/util/ConcurrentBitSet.java | 70 +++++++ .../java/com/hbm/util/SubChunkSnapshot.java | 120 ++++++++++++ 7 files changed, 287 insertions(+), 180 deletions(-) create mode 100644 src/main/java/com/hbm/util/ChunkKey.java create mode 100644 src/main/java/com/hbm/util/ConcurrentBitSet.java create mode 100644 src/main/java/com/hbm/util/SubChunkSnapshot.java diff --git a/src/main/java/com/hbm/config/BombConfig.java b/src/main/java/com/hbm/config/BombConfig.java index 64ee42417..7db3c427c 100644 --- a/src/main/java/com/hbm/config/BombConfig.java +++ b/src/main/java/com/hbm/config/BombConfig.java @@ -26,8 +26,7 @@ public class BombConfig { public static int fDelay = 4; public static int limitExplosionLifespan = 0; public static boolean chunkloading = true; - public static boolean parallelization = true; - public static boolean accumulatedDestruction = true; + public static int explosionAlgorithm = 2; public static void loadFromConfig(Configuration config) { @@ -95,8 +94,7 @@ public class BombConfig { falloutDelayProp.comment = "How many ticks to wait for the next fallout chunk computation"; fDelay = falloutDelayProp.getInt(); - chunkloading = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.XX_enableChunkLoading", "Allows all types of procedural explosions to keep the central chunk loaded.", true); - parallelization = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.XX_enableParallelization", "Allows explosions to use multiple threads.", true); - accumulatedDestruction = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.XX_enableAccumulatedDestruction", "Enables the accumulated destruction model for explosions. Blocks accumulate damage and are only destroyed once their resistance is exceeded.\nMore physically accurate, slightly slower. Requires enableParallelization = true.", true); + chunkloading = CommonConfig.createConfigBool(config, CATEGORY_NUKE, "6.05_enableChunkLoading", "Allows all types of procedural explosions to keep the central chunk loaded.", true); + explosionAlgorithm = CommonConfig.createConfigInt(config, CATEGORY_NUKE, "6.06_explosionAlgorithm", "Configures the algorithm of mk5 explosion. \n0 = Legacy, 1 = Threaded DDA, 2 = Threaded DDA with damage accumulation.", 2); } } diff --git a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java index 95965c95c..dac30b1db 100644 --- a/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java +++ b/src/main/java/com/hbm/entity/logic/EntityNukeExplosionMK5.java @@ -70,7 +70,7 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { if(explosion == null) { explosionStart = System.currentTimeMillis(); - if (BombConfig.parallelization) { + if (BombConfig.explosionAlgorithm == 1 || BombConfig.explosionAlgorithm == 2) { explosion = new ExplosionNukeRayParallelized(worldObj, posX, posY, posZ, strength, speed, length); } else { @@ -82,20 +82,17 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { if(!explosion.isComplete()) { explosion.cacheChunksTick(BombConfig.mk5); explosion.destructionTick(BombConfig.mk5); - } else if(fallout) { - if(GeneralConfig.enableExtendedLogging && explosionStart != 0) - MainRegistry.logger.log(Level.INFO, "[NUKE] Explosion complete. Time elapsed: " + (System.currentTimeMillis() - explosionStart) + "ms"); - EntityFalloutRain fallout = new EntityFalloutRain(this.worldObj); - fallout.posX = this.posX; - fallout.posY = this.posY; - fallout.posZ = this.posZ; - fallout.setScale((int)(this.length * 2.5 + falloutAdd) * BombConfig.falloutRange / 100); - - this.worldObj.spawnEntityInWorld(fallout); - - this.clearChunkLoader(); - this.setDead(); } else { + if(GeneralConfig.enableExtendedLogging && explosionStart != 0) + MainRegistry.logger.log(Level.INFO, "[NUKE] Explosion complete. Time elapsed: {}ms", (System.currentTimeMillis() - explosionStart)); + if(fallout) { + EntityFalloutRain fallout = new EntityFalloutRain(this.worldObj); + fallout.posX = this.posX; + fallout.posY = this.posY; + fallout.posZ = this.posZ; + fallout.setScale((int)(this.length * 2.5 + falloutAdd) * BombConfig.falloutRange / 100); + this.worldObj.spawnEntityInWorld(fallout); + } this.clearChunkLoader(); this.setDead(); } @@ -153,7 +150,7 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading { public static EntityNukeExplosionMK5 statFac(World world, int r, double x, double y, double z) { if(GeneralConfig.enableExtendedLogging && !world.isRemote) - MainRegistry.logger.log(Level.INFO, "[NUKE] Initialized explosion at " + x + " / " + y + " / " + z + " with strength " + r + "!"); + MainRegistry.logger.log(Level.INFO, "[NUKE] Initialized explosion at {} / {} / {} with strength {}!", x, y, z, r); if(r == 0) r = 25; diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java index 6cab5a01c..08c322adf 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeRayParallelized.java @@ -3,6 +3,9 @@ package com.hbm.explosion; import com.hbm.config.BombConfig; import com.hbm.interfaces.IExplosionRay; import com.hbm.main.MainRegistry; +import com.hbm.util.ChunkKey; +import com.hbm.util.ConcurrentBitSet; +import com.hbm.util.SubChunkSnapshot; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.util.Vec3; @@ -15,14 +18,14 @@ import org.apache.logging.log4j.Level; import java.util.*; import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicLongArray; import java.util.concurrent.atomic.DoubleAdder; +import static com.hbm.util.SubChunkSnapshot.getSnapshot; + public class ExplosionNukeRayParallelized implements IExplosionRay { private static final int WORLD_HEIGHT = 256; private static final int BITSET_SIZE = 16 * WORLD_HEIGHT * 16; - private static final int WORDS_PER_SET = BITSET_SIZE >>> 6; // (16*256*16)/64 protected final World world; private final double explosionX, explosionY, explosionZ; @@ -85,7 +88,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { Thread.currentThread().interrupt(); } finally { collectFinished = true; - if (BombConfig.accumulatedDestruction) { + if (BombConfig.explosionAlgorithm == 2) { pool.submit(this::runConsolidation); } else { consolidationFinished = true; @@ -112,7 +115,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { ChunkKey ck = cacheQueue.poll(); if (ck == null) break; snapshots.computeIfAbsent(ck, key -> { - SubChunkSnapshot snap = createSubChunk(key.pos, key.subY); + SubChunkSnapshot snap = getSnapshot(this.world, key.pos, key.subY); return snap == null ? SubChunkSnapshot.EMPTY : snap; }); } @@ -146,37 +149,33 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { ExtendedBlockStorage storage = storages[subY]; if (storage == null) continue; - int yPrimeMin = 255 - ((subY << 4) + 15); - int startBit = yPrimeMin << 8; - int yPrimeMax = 255 - (subY << 4); - int endBit = (yPrimeMax << 8) | 0xFF; + int startBit = (WORLD_HEIGHT - 1 - ((subY << 4) + 15)) << 8; + int endBit = ((WORLD_HEIGHT - 1 - (subY << 4)) << 8) | 0xFF; int bit = bs.nextSetBit(startBit); - if (bit < 0 || bit > endBit) continue; while (bit >= 0 && bit <= endBit && System.nanoTime() < deadline) { - int yGlobal = 255 - (bit >>> 8); + int yGlobal = WORLD_HEIGHT - 1 - (bit >>> 8); int xGlobal = (cp.chunkXPos << 4) | ((bit >>> 4) & 0xF); int zGlobal = (cp.chunkZPos << 4) | (bit & 0xF); - - if (world.getTileEntity(xGlobal, yGlobal, zGlobal) != null) { - chunk.removeTileEntity(xGlobal & 0xF, yGlobal, zGlobal & 0xF); // world Y - world.removeTileEntity(xGlobal, yGlobal, zGlobal); - } - int xLocal = xGlobal & 0xF; int yLocal = yGlobal & 0xF; int zLocal = zGlobal & 0xF; - storage.func_150818_a(xLocal, yLocal, zLocal, Blocks.air); - storage.setExtBlockMetadata(xLocal, yLocal, zLocal, 0); - chunkModified = true; + if (storage.getBlockByExtId(xLocal, yLocal, zLocal) != Blocks.air) { + if (world.getTileEntity(xGlobal, yGlobal, zGlobal) != null) { + world.removeTileEntity(xGlobal, yGlobal, zGlobal); + } - world.notifyBlocksOfNeighborChange(xGlobal, yGlobal, zGlobal, Blocks.air); - world.markBlockForUpdate(xGlobal, yGlobal, zGlobal); + storage.func_150818_a(xLocal, yLocal, zLocal, Blocks.air); + storage.setExtBlockMetadata(xLocal, yLocal, zLocal, 0); + chunkModified = true; - world.updateLightByType(EnumSkyBlock.Sky, xGlobal, yGlobal, zGlobal); - world.updateLightByType(EnumSkyBlock.Block, xGlobal, yGlobal, zGlobal); + world.notifyBlocksOfNeighborChange(xGlobal, yGlobal, zGlobal, Blocks.air); + world.markBlockForUpdate(xGlobal, yGlobal, zGlobal); + world.updateLightByType(EnumSkyBlock.Sky, xGlobal, yGlobal, zGlobal); + world.updateLightByType(EnumSkyBlock.Block, xGlobal, yGlobal, zGlobal); + } bs.clear(bit); bit = bs.nextSetBit(bit + 1); } @@ -186,7 +185,6 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { chunk.setChunkModified(); world.markBlockRangeForRenderUpdate(cp.chunkXPos << 4, 0, cp.chunkZPos << 4, (cp.chunkXPos << 4) | 15, WORLD_HEIGHT - 1, (cp.chunkZPos << 4) | 15); } - if (bs.isEmpty()) { destructionMap.remove(cp); for (int sy = 0; sy < (WORLD_HEIGHT >> 4); sy++) { @@ -244,49 +242,6 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { if (this.orderedChunks != null) this.orderedChunks.clear(); } - private SubChunkSnapshot createSubChunk(ChunkCoordIntPair cpos, int subY) { - if (!world.getChunkProvider().chunkExists(cpos.chunkXPos, cpos.chunkZPos)) { - return SubChunkSnapshot.EMPTY; - } - Chunk chunk = world.getChunkFromChunkCoords(cpos.chunkXPos, cpos.chunkZPos); - ExtendedBlockStorage ebs = chunk.getBlockStorageArray()[subY]; - if (ebs == null || ebs.isEmpty()) { - return SubChunkSnapshot.EMPTY; - } - - short[] data = new short[16 * 16 * 16]; - List palette = new ArrayList<>(); - palette.add(Blocks.air); - Map idxMap = new HashMap<>(); - idxMap.put(Blocks.air, (short) 0); - boolean allAir = true; - - for (int ly = 0; ly < 16; ly++) { - for (int lz = 0; lz < 16; lz++) { - for (int lx = 0; lx < 16; lx++) { - Block block = ebs.getBlockByExtId(lx, ly, lz); - int idx; - if (block == Blocks.air) { - idx = 0; - } else { - allAir = false; - Short e = idxMap.get(block); - if (e == null) { - idxMap.put(block, (short) palette.size()); - palette.add(block); - idx = palette.size() - 1; - } else { - idx = e; - } - } - data[(ly << 8) | (lz << 4) | lx] = (short) idx; - } - } - } - if (allAir) return SubChunkSnapshot.EMPTY; - return new SubChunkSnapshot(palette.toArray(new Block[0]), data); - } - private List generateSphereRays(int count) { List list = new ArrayList<>(count); if (count <= 0) return list; @@ -316,7 +271,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { continue; } - ConcurrentBitSet chunkDestructionBitSet = destructionMap.computeIfAbsent(cp, k -> new ConcurrentBitSet()); + ConcurrentBitSet chunkDestructionBitSet = destructionMap.computeIfAbsent(cp, k -> new ConcurrentBitSet(BITSET_SIZE)); Iterator> damageEntryIterator = accumulator.entrySet().iterator(); while (damageEntryIterator.hasNext()) { @@ -330,7 +285,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { continue; } - int yGlobal = 255 - (bitIndex >>> 8); + int yGlobal = WORLD_HEIGHT - 1 - (bitIndex >>> 8); int subY = yGlobal >> 4; if (subY < 0) { @@ -370,91 +325,6 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { consolidationFinished = true; } - private static class ChunkKey { - final ChunkCoordIntPair pos; - final int subY; - - ChunkKey(int cx, int cz, int sy) { - this.pos = new ChunkCoordIntPair(cx, cz); - this.subY = sy; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof ChunkKey)) return false; - ChunkKey k = (ChunkKey) o; - return subY == k.subY && pos.equals(k.pos); - } - - @Override - public int hashCode() { - return Objects.hash(pos.chunkXPos, pos.chunkZPos, subY); - } - } - - private static class SubChunkSnapshot { - private static final SubChunkSnapshot EMPTY = new SubChunkSnapshot(new Block[]{Blocks.air}, null); - private final Block[] palette; - private final short[] data; - - SubChunkSnapshot(Block[] p, short[] d) { - this.palette = p; - this.data = d; - } - - Block getBlock(int x, int y, int z) { - if (this == EMPTY || data == null) return Blocks.air; - short idx = data[(y << 8) | (z << 4) | x]; - return (idx >= 0 && idx < palette.length) ? palette[idx] : Blocks.air; - } - } - - private static final class ConcurrentBitSet { - private final AtomicLongArray words = new AtomicLongArray(WORDS_PER_SET); - - void set(int bit) { - if (bit < 0 || bit >= BITSET_SIZE) return; - int wd = bit >>> 6; - long m = 1L << (bit & 63); - while (true) { - long o = words.get(wd); - long u = o | m; - if (o == u || words.compareAndSet(wd, o, u)) return; - } - } - - void clear(int bit) { - if (bit < 0 || bit >= BITSET_SIZE) return; - int wd = bit >>> 6; - long m = ~(1L << (bit & 63)); - while (true) { - long oldWord = words.get(wd); - long newWord = oldWord & m; - if (oldWord == newWord || words.compareAndSet(wd, oldWord, newWord)) { - return; - } - } - } - - int nextSetBit(int from) { - if (from < 0) from = 0; - int wd = from >>> 6; - if (wd >= WORDS_PER_SET) return -1; - long w = words.get(wd) & (~0L << (from & 63)); - while (true) { - if (w != 0) return (wd << 6) + Long.numberOfTrailingZeros(w); - if (++wd == WORDS_PER_SET) return -1; - w = words.get(wd); - } - } - - boolean isEmpty() { - for (int i = 0; i < WORDS_PER_SET; i++) if (words.get(i) != 0) return false; - return true; - } - } - private static class ChunkDamageAccumulator { // key = bitIndex, value = total accumulated damage private final ConcurrentHashMap damageMap = new ConcurrentHashMap<>(); @@ -602,7 +472,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { energy -= damageDealt; if (damageDealt > 0) { int bitIndex = ((WORLD_HEIGHT - 1 - y) << 8) | ((x & 0xF) << 4) | (z & 0xF); - if (BombConfig.accumulatedDestruction) { + if (BombConfig.explosionAlgorithm == 2) { ChunkCoordIntPair chunkPos = ck.pos; ChunkDamageAccumulator chunkAccumulator = accumulatedDamageMap.computeIfAbsent(chunkPos, k -> new ChunkDamageAccumulator()); @@ -611,7 +481,7 @@ public class ExplosionNukeRayParallelized implements IExplosionRay { if (energy > 0) { ConcurrentBitSet bs = destructionMap.computeIfAbsent( ck.pos, - posKey -> new ConcurrentBitSet() + posKey -> new ConcurrentBitSet(BITSET_SIZE) ); bs.set(bitIndex); } diff --git a/src/main/java/com/hbm/interfaces/IExplosionRay.java b/src/main/java/com/hbm/interfaces/IExplosionRay.java index d164b6b27..5c883c82e 100644 --- a/src/main/java/com/hbm/interfaces/IExplosionRay.java +++ b/src/main/java/com/hbm/interfaces/IExplosionRay.java @@ -1,11 +1,31 @@ package com.hbm.interfaces; +/** + * Interface for procedural explosions. + * @author mlbv + */ public interface IExplosionRay { - boolean isComplete(); + /** + * Called every tick. Caches the chunks affected by the explosion. + * All heavy calculations are recommended to be done off the main thread. + * @param processTimeMs maximum time to process in this tick + */ + void cacheChunksTick(int processTimeMs); - void cacheChunksTick(int processTime); - - void destructionTick(int processTime); + /** + * Called every tick to apply block destruction to the affected chunks. + * @param processTimeMs maximum time to process in this tick + */ + void destructionTick(int processTimeMs); + /** + * Immediately cancels the explosion. + */ void cancel(); + + + /** + * @return true if the explosion is finished or cancelled. + */ + boolean isComplete(); } diff --git a/src/main/java/com/hbm/util/ChunkKey.java b/src/main/java/com/hbm/util/ChunkKey.java new file mode 100644 index 000000000..62c2f7c9a --- /dev/null +++ b/src/main/java/com/hbm/util/ChunkKey.java @@ -0,0 +1,32 @@ +package com.hbm.util; + +import net.minecraft.world.ChunkCoordIntPair; + +import java.util.Objects; + +/** + * Unique identifier for sub-chunks. + * @Author mlbv + */ +public class ChunkKey { + public final ChunkCoordIntPair pos; + public final int subY; + + public ChunkKey(int cx, int cz, int sy) { + this.pos = new ChunkCoordIntPair(cx, cz); + this.subY = sy; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ChunkKey)) return false; + ChunkKey k = (ChunkKey) o; + return subY == k.subY && pos.equals(k.pos); + } + + @Override + public int hashCode() { + return Objects.hash(pos.chunkXPos, pos.chunkZPos, subY); + } +} diff --git a/src/main/java/com/hbm/util/ConcurrentBitSet.java b/src/main/java/com/hbm/util/ConcurrentBitSet.java new file mode 100644 index 000000000..531c851ae --- /dev/null +++ b/src/main/java/com/hbm/util/ConcurrentBitSet.java @@ -0,0 +1,70 @@ +package com.hbm.util; + +import java.util.concurrent.atomic.AtomicLongArray; +import java.util.concurrent.atomic.LongAdder; + +public class ConcurrentBitSet { + private final AtomicLongArray words; + private final int size; + private final LongAdder bitCount = new LongAdder(); + + public ConcurrentBitSet(int size) { + this.size = size; + int wordCount = (size + 63) >>> 6; + this.words = new AtomicLongArray(wordCount); + } + + public void set(int bit) { + if (bit < 0 || bit >= size) return; + int wordIndex = bit >>> 6; + long mask = 1L << (bit & 63); + while (true) { + long oldWord = words.get(wordIndex); + long newWord = oldWord | mask; + if (oldWord == newWord) return; + if (words.compareAndSet(wordIndex, oldWord, newWord)) { + bitCount.increment(); + return; + } + } + } + + public void clear(int bit) { + if (bit < 0 || bit >= size) return; + int wordIndex = bit >>> 6; + long mask = ~(1L << (bit & 63)); + while (true) { + long oldWord = words.get(wordIndex); + long newWord = oldWord & mask; + if (oldWord == newWord) return; + if (words.compareAndSet(wordIndex, oldWord, newWord)) { + bitCount.decrement(); + return; + } + } + } + + public int nextSetBit(int from) { + if (from < 0) from = 0; + int wordIndex = from >>> 6; + if (wordIndex >= words.length()) return -1; + long word = words.get(wordIndex) & (~0L << (from & 63)); + while (true) { + if (word != 0) { + int idx = (wordIndex << 6) + Long.numberOfTrailingZeros(word); + return (idx < size) ? idx : -1; + } + wordIndex++; + if (wordIndex >= words.length()) return -1; + word = words.get(wordIndex); + } + } + + public boolean isEmpty() { + return bitCount.sum() == 0; + } + + public long cardinality() { + return bitCount.sum(); + } +} diff --git a/src/main/java/com/hbm/util/SubChunkSnapshot.java b/src/main/java/com/hbm/util/SubChunkSnapshot.java new file mode 100644 index 000000000..6e7b99cc0 --- /dev/null +++ b/src/main/java/com/hbm/util/SubChunkSnapshot.java @@ -0,0 +1,120 @@ +package com.hbm.util; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.storage.ExtendedBlockStorage; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * A snapshot of a 16×16×16 sub-chunk. + * @Author mlbv + */ +public class SubChunkSnapshot { + /** + * A sub-chunk that contains only air. + */ + public static final SubChunkSnapshot EMPTY = new SubChunkSnapshot(new Block[]{Blocks.air}, null); + private final Block[] palette; + private final short[] data; + + private SubChunkSnapshot(Block[] p, short[] d) { + this.palette = p; + this.data = d; + } + + /** + * Creates a SubChunkSnapshot from a loaded chunk. + * + * @param world + * The World instance from which to retrieve the chunk. + * @param cpos + * The ChunkCoordIntPair identifying the chunk coordinates (x, z). + * @param subY + * The vertical sub-chunk index (0–15) within the chunk. + * @return + * A SubChunkSnapshot containing the palette and block data for the sub-chunk, + * or SubChunkSnapshot.EMPTY if the region is unloaded or contains only air. + */ + public static SubChunkSnapshot getSnapshot(World world, ChunkCoordIntPair cpos, int subY) { + if (!world.getChunkProvider().chunkExists(cpos.chunkXPos, cpos.chunkZPos)) { + return SubChunkSnapshot.EMPTY; + } + return getOrLoadSnapshot(world, cpos, subY); + } + + /** + * Creates a SubChunkSnapshot. + * + * @param world + * The World instance from which to retrieve the chunk. + * @param cpos + * The ChunkCoordIntPair identifying the chunk coordinates (x, z). + * @param subY + * The vertical sub-chunk index (0–15) within the chunk. + * @return + * A SubChunkSnapshot containing the palette and block data for the sub-chunk, + * or SubChunkSnapshot.EMPTY if the region contains only air. + */ + public static SubChunkSnapshot getOrLoadSnapshot(World world, ChunkCoordIntPair cpos, int subY){ + Chunk chunk = world.getChunkFromChunkCoords(cpos.chunkXPos, cpos.chunkZPos); + ExtendedBlockStorage ebs = chunk.getBlockStorageArray()[subY]; + if (ebs == null || ebs.isEmpty()) return SubChunkSnapshot.EMPTY; + + short[] data = new short[16 * 16 * 16]; + List palette = new ArrayList<>(); + palette.add(Blocks.air); + Map idxMap = new HashMap<>(); + idxMap.put(Blocks.air, (short) 0); + boolean allAir = true; + + for (int ly = 0; ly < 16; ly++) { + for (int lz = 0; lz < 16; lz++) { + for (int lx = 0; lx < 16; lx++) { + Block block = ebs.getBlockByExtId(lx, ly, lz); + int idx; + if (block == Blocks.air) { + idx = 0; + } else { + allAir = false; + Short e = idxMap.get(block); + if (e == null) { + idxMap.put(block, (short) palette.size()); + palette.add(block); + idx = palette.size() - 1; + } else { + idx = e; + } + } + data[(ly << 8) | (lz << 4) | lx] = (short) idx; + } + } + } + if (allAir) return SubChunkSnapshot.EMPTY; + return new SubChunkSnapshot(palette.toArray(new Block[0]), data); + } + + /** + * Retrieves the Block at the specified local coordinates within this sub-chunk snapshot. + * + * @param x + * The local x-coordinate within the sub-chunk (0–15). + * @param y + * The local y-coordinate within the sub-chunk (0–15). + * @param z + * The local z-coordinate within the sub-chunk (0–15). + * @return + * The Block instance at the given position. + */ + public Block getBlock(int x, int y, int z) { + if (this == EMPTY || data == null) return Blocks.air; + short idx = data[(y << 8) | (z << 4) | x]; + return (idx >= 0 && idx < palette.length) ? palette[idx] : Blocks.air; + } +} From 0be198d21f9d10be9c19fb520feb3973459d8dcf Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 31 May 2025 18:04:16 +0200 Subject: [PATCH 109/491] in a rush --- .../java/com/hbm/inventory/FluidStack.java | 2 +- .../recipes/ChemicalPlantRecipes.java | 42 +++++++ .../recipes/loader/GenericRecipe.java | 69 +++++++++++ .../recipes/loader/GenericRecipes.java | 117 +++++++++--------- .../recipes/loader/SerializableRecipe.java | 3 + 5 files changed, 176 insertions(+), 57 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java create mode 100644 src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java diff --git a/src/main/java/com/hbm/inventory/FluidStack.java b/src/main/java/com/hbm/inventory/FluidStack.java index 03b001ef4..32c3d5e9b 100644 --- a/src/main/java/com/hbm/inventory/FluidStack.java +++ b/src/main/java/com/hbm/inventory/FluidStack.java @@ -8,7 +8,7 @@ public class FluidStack { public int fill; public int pressure; - public FluidStack(int fill, FluidType type) { + @Deprecated public FluidStack(int fill, FluidType type) { // weird ass format this.fill = fill; this.type = type; } diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java new file mode 100644 index 000000000..f67f6579a --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -0,0 +1,42 @@ +package com.hbm.inventory.recipes; + +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.items.ModItems; + +import net.minecraft.item.ItemStack; + +public class ChemicalPlantRecipes extends GenericRecipes { + + @Override public int inputItemLimit() { return 3; } + @Override public int inputFluidLimit() { return 3; } + @Override public int outputItemLimit() { return 3; } + @Override public int outputFluidLimit() { return 3; } + + @Override public String getFileName() { return "hbmChemicalPlant.json"; } + @Override public GenericRecipe instantiateRecipe(String name) { return new GenericRecipe(name); } + + @Override + public void registerDefaults() { + + this.register(new GenericRecipe("chem.biogas").setup(60, 100).setIcon(ModItems.gas_full, Fluids.BIOGAS.getID()) + .setInputItems(new ComparableStack(ModItems.biomass, 16)) + .setInputFluids(new FluidStack(Fluids.AIR, 4000)) + .setOutputFluids(new FluidStack(Fluids.BIOGAS, 2000))); + + this.register(new GenericRecipe("chem.test").setup(60, 100) + .setInputItems(new ComparableStack(ModItems.biomass, 16)) + .setInputFluids(new FluidStack(Fluids.AIR, 4000)) + .setOutputItems( + new ChanceOutput(new ItemStack(ModItems.glyphid_meat, 16)), + new ChanceOutput(new ItemStack(ModItems.ingot_asbestos, 1), 0.5F, 0), + new ChanceOutputMulti() {{ + pool.add(new ChanceOutput(new ItemStack(ModItems.billet_co60), 1)); + pool.add(new ChanceOutput(new ItemStack(ModItems.billet_cobalt), 5)); + }}) + .setOutputFluids(new FluidStack(Fluids.BIOGAS, 2000))); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java new file mode 100644 index 000000000..324f1ce4b --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -0,0 +1,69 @@ +package com.hbm.inventory.recipes.loader; + +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.recipes.loader.GenericRecipes.ChanceOutput; +import com.hbm.inventory.recipes.loader.GenericRecipes.ChanceOutputMulti; +import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.util.i18n.I18nUtil; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class GenericRecipe { + + public String name; + public AStack[] inputItem; + public FluidStack[] inputFluid; + public IOutput[] outputItem; + public FluidStack[] outputFluid; + public int duration; + public long power; + public ItemStack icon; + public boolean writeIcon = false; + public boolean customLocalization = false; + + public GenericRecipe(String name) { + this.name = name; + } + + public GenericRecipe setDuration(int duration) { this.duration = duration; return this; } + public GenericRecipe setPower(long power) { this.power = power; return this; } + public GenericRecipe setup(int duration, long power) { return this.setDuration(duration).setPower(power); } + public GenericRecipe setIcon(ItemStack icon) { this.icon = icon; this.writeIcon = true; return this; } + public GenericRecipe setIcon(Item item, int meta) { return this.setIcon(new ItemStack(item, 1, meta)); } + public GenericRecipe setIcon(Item item) { return this.setIcon(new ItemStack(item)); } + public GenericRecipe setNamed() { this.customLocalization = true; return this; } + + public GenericRecipe setInputItems(AStack... input) { this.inputItem = input; return this; } + public GenericRecipe setInputFluids(FluidStack... input) { this.inputFluid = input; return this; } + public GenericRecipe setOutputItems(IOutput... output) { this.outputItem = output; return this; } + public GenericRecipe setOutputFluids(FluidStack... output) { this.outputFluid = output; return this; } + + public ItemStack getIcon() { + + if(icon == null) { + if(outputItem != null) { + if(outputItem[0] instanceof ChanceOutput) icon = ((ChanceOutput) outputItem[0]).stack.copy(); + if(outputItem[0] instanceof ChanceOutputMulti) icon = ((ChanceOutputMulti) outputItem[0]).pool.get(0).stack.copy(); + return icon; + } + if(outputFluid != null) { + icon = ItemFluidIcon.make(outputFluid[0]); + } + } + + if(icon == null) icon = new ItemStack(ModItems.nothing); + return icon; + } + + public String getName() { + if(customLocalization) { + return I18nUtil.resolveKey(name); + } + + return this.getIcon().getDisplayName(); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index a415c92f1..2c9ce4596 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -12,8 +12,6 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.AStack; -import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemFluidIcon; import net.minecraft.item.ItemStack; import net.minecraft.util.WeightedRandom; @@ -29,17 +27,19 @@ import net.minecraft.util.WeightedRandom; * * @author hbm */ -public abstract class GenericRecipes extends SerializableRecipe { +public abstract class GenericRecipes extends SerializableRecipe { public static final Random RNG = new Random(); - public List recipeOrderedList = new ArrayList(); - public HashMap recipeNameMap = new HashMap(); + public List recipeOrderedList = new ArrayList(); + public HashMap recipeNameMap = new HashMap(); public abstract int inputItemLimit(); public abstract int inputFluidLimit(); public abstract int outputItemLimit(); public abstract int outputFluidLimit(); + public boolean hasDuration() { return true; } + public boolean hasPower() { return true; } @Override public Object getRecipeObject() { @@ -52,7 +52,7 @@ public abstract class GenericRecipes extends SerializableRecipe { this.recipeNameMap.clear(); } - public void register(GenericRecipe recipe) { + public void register(T recipe) { this.recipeOrderedList.add(recipe); this.recipeNameMap.put(recipe.name, recipe); } @@ -60,28 +60,67 @@ public abstract class GenericRecipes extends SerializableRecipe { @Override public void readRecipe(JsonElement element) { JsonObject obj = (JsonObject) element; - GenericRecipe recipe = instantiateRecipe(obj.get("name").getAsString(), obj.get("duration").getAsInt()); + T recipe = instantiateRecipe(obj.get("name").getAsString()); - if(this.inputItemLimit() > 0) recipe.inputItem = this.readAStackArray(obj.get("inputItem").getAsJsonArray()); - if(this.inputFluidLimit() > 0) recipe.inputFluid = this.readFluidArray(obj.get("inputFluid").getAsJsonArray()); + if(this.inputItemLimit() > 0 && obj.has("inputItem")) recipe.inputItem = this.readAStackArray(obj.get("inputItem").getAsJsonArray()); + if(this.inputFluidLimit() > 0 && obj.has("inputFluid")) recipe.inputFluid = this.readFluidArray(obj.get("inputFluid").getAsJsonArray()); - if(this.outputItemLimit() > 0) recipe.outputItem = this.readOutputArray(obj.get("outputItem").getAsJsonArray()); - if(this.outputFluidLimit() > 0) recipe.outputFluid = this.readFluidArray(obj.get("outputFluid").getAsJsonArray()); + if(this.outputItemLimit() > 0 && obj.has("outputItem")) recipe.outputItem = this.readOutputArray(obj.get("outputItem").getAsJsonArray()); + if(this.outputFluidLimit() > 0 && obj.has("outputFluid")) recipe.outputFluid = this.readFluidArray(obj.get("outputFluid").getAsJsonArray()); + + if(this.hasDuration()) recipe.setDuration(obj.get("duration").getAsInt()); + if(this.hasPower()) recipe.setPower(obj.get("power").getAsLong()); + + if(obj.has("icon")) recipe.setIcon(this.readItemStack(obj.get("icon").getAsJsonArray())); readExtraData(element, recipe); register(recipe); } - public GenericRecipe instantiateRecipe(String name, int duration) { return new GenericRecipe(name, duration); } - public void readExtraData(JsonElement element, GenericRecipe recipe) { } + public abstract T instantiateRecipe(String name); + public void readExtraData(JsonElement element, T recipe) { } @Override - public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + public void writeRecipe(Object recipeObject, JsonWriter writer) throws IOException { + T recipe = (T) recipeObject; + if(this.inputItemLimit() > 0 && recipe.inputItem != null) { + writer.name("inputItem").beginArray(); + for(AStack stack : recipe.inputItem) this.writeAStack(stack, writer); + writer.endArray(); + } + + if(this.inputFluidLimit() > 0 && recipe.inputFluid != null) { + writer.name("inputFluid").beginArray(); + for(FluidStack stack : recipe.inputFluid) this.writeFluidStack(stack, writer); + writer.endArray(); + } + + if(this.outputItemLimit() > 0 && recipe.outputItem != null) { + writer.name("outputItem").beginArray(); + for(IOutput stack : recipe.outputItem) stack.serialize(writer); + writer.endArray(); + } + + if(this.outputFluidLimit() > 0 && recipe.outputFluid != null) { + writer.name("outputFluid").beginArray(); + for(FluidStack stack : recipe.outputFluid) this.writeFluidStack(stack, writer); + writer.endArray(); + } + + if(this.hasDuration()) writer.name("duration").value(recipe.duration); + if(this.hasPower()) writer.name("power").value(recipe.power); + + if(recipe.writeIcon) { + writer.name("icon"); + this.writeItemStack(recipe.icon, writer); + } + + writeExtraData(recipe, writer); } - public void writeExtraData(Object recipe, JsonWriter writer) { } + public void writeExtraData(T recipe, JsonWriter writer) { } public IOutput[] readOutputArray(JsonArray array) { IOutput[] output = new IOutput[array.size()]; @@ -110,45 +149,6 @@ public abstract class GenericRecipes extends SerializableRecipe { /////////////// /// CLASSES /// /////////////// - - public static class GenericRecipe { - - public String name; - public AStack[] inputItem; - public FluidStack[] inputFluid; - public IOutput[] outputItem; - public FluidStack[] outputFluid; - public int duration; - public ItemStack icon; - - public GenericRecipe(String name, int duration) { - this.name = name; - this.duration = duration; - } - - public GenericRecipe setIcon(ItemStack icon) { - this.icon = icon; - return this; - } - - public ItemStack getIcon() { - - if(icon == null) { - if(outputItem != null) { - if(outputItem[0] instanceof ChanceOutput) icon = ((ChanceOutput) outputItem[0]).stack.copy(); - if(outputItem[0] instanceof ChanceOutputMulti) icon = ((ChanceOutputMulti) outputItem[0]).pool.get(0).stack.copy(); - return icon; - } - if(outputFluid != null) { - icon = ItemFluidIcon.make(outputFluid[0]); - } - } - - if(icon == null) icon = new ItemStack(ModItems.nothing); - return icon; - } - } - public static interface IOutput { public boolean possibleMultiOutput(); public ItemStack collapse(); @@ -184,16 +184,21 @@ public abstract class GenericRecipes extends SerializableRecipe { @Override public void serialize(JsonWriter writer) throws IOException { boolean standardStack = chance >= 1 && itemWeight == 0; - if(!standardStack) writer.beginArray(); + + writer.beginArray(); + writer.setIndent(""); if(itemWeight == 0) writer.value("single"); SerializableRecipe.writeItemStack(stack, writer); + writer.setIndent(""); if(!standardStack) { writer.value(chance); if(itemWeight > 0) writer.value(itemWeight); - writer.endArray(); } + + writer.endArray(); + writer.setIndent(" "); } @Override diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 8247bff1a..1ea45adca 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -81,6 +81,9 @@ public abstract class SerializableRecipe { //AFTER Assembler recipeHandlers.add(new AnvilRecipes()); recipeHandlers.add(new PedestalRecipes()); + + //GENERIC + recipeHandlers.add(new ChemicalPlantRecipes()); recipeHandlers.add(new MatDistribution()); recipeHandlers.add(new CustomMachineRecipes()); From 0a1822ff1087457502927728159a6ea84d471afb Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 1 Jun 2025 16:45:19 +0200 Subject: [PATCH 110/491] my balls are heavy --- .../blocks/machine/MachineChemicalPlant.java | 6 ++ .../gui/GUIMachineChemicalPlant.java | 8 +++ .../gui/GUIScreenRecipeSelector.java | 67 ++++++++++++++++++ .../recipes/ChemicalPlantRecipes.java | 2 + .../recipes/loader/SerializableRecipe.java | 2 +- .../hbm/module/ModuleMachineChemplant.java | 55 ++++++++++++++ .../item/weapon/sedna/ItemRenderAmat.java | 2 +- .../java/com/hbm/tileentity/TileMappings.java | 1 + .../TileEntityMachineChemicalPlant.java | 53 +++++++++++++- .../gui/processing/gui_recipe_selector.png | Bin 1778 -> 1802 bytes 10 files changed, 193 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java create mode 100644 src/main/java/com/hbm/module/ModuleMachineChemplant.java diff --git a/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java b/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java index 6e9669efe..f26e1e3d6 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChemicalPlant.java @@ -4,6 +4,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -18,6 +19,11 @@ public class MachineChemicalPlant extends BlockDummyable { if(meta >= 12) return new TileEntityMachineChemicalPlant(); return null; } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } @Override public int[] getDimensions() { return new int[] {2, 0, 1, 1, 1, 1}; } @Override public int getOffset() { return 1; } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java index df47af6aa..5bc4c5a93 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -3,6 +3,7 @@ package com.hbm.inventory.gui; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineChemicalPlant; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; @@ -35,6 +36,13 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, chemplant.power, chemplant.maxPower); } + + @Override + protected void mouseClicked(int x, int y, int button) { + super.mouseClicked(x, y, button); + + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, "", 0, this); + } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java new file mode 100644 index 000000000..ecb69ba16 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java @@ -0,0 +1,67 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.common.FMLCommonHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.ResourceLocation; + +public class GUIScreenRecipeSelector extends GuiScreen { + + protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_recipe_selector.png"); + + protected int xSize = 176; + protected int ySize = 132; + protected int guiLeft; + protected int guiTop; + + protected GuiScreen previousScreen; + + public static void openSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, GuiScreen previousScreen) { + FMLCommonHandler.instance().showGuiScreen(new GUIScreenRecipeSelector(recipeSet, tile, selection, index, previousScreen)); + } + + public GUIScreenRecipeSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, GuiScreen previousScreen) { + this.previousScreen = previousScreen; + } + + @Override + public void initGui() { + super.initGui(); + this.guiLeft = (this.width - this.xSize) / 2; + this.guiTop = (this.height - this.ySize) / 2; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + this.drawDefaultBackground(); + this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); + GL11.glDisable(GL11.GL_LIGHTING); + this.drawGuiContainerForegroundLayer(mouseX, mouseY); + GL11.glEnable(GL11.GL_LIGHTING); + } + + private void drawGuiContainerForegroundLayer(int x, int y) { + + } + + private void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } + + @Override + protected void keyTyped(char typedChar, int keyCode) { + if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) { + FMLCommonHandler.instance().showGuiScreen(previousScreen); + } + } + + @Override public boolean doesGuiPauseGame() { return false; } +} diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index f67f6579a..6aaf0e3cd 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -10,6 +10,8 @@ import com.hbm.items.ModItems; import net.minecraft.item.ItemStack; public class ChemicalPlantRecipes extends GenericRecipes { + + public static final ChemicalPlantRecipes INSTANCE = new ChemicalPlantRecipes(); @Override public int inputItemLimit() { return 3; } @Override public int inputFluidLimit() { return 3; } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 1ea45adca..46f9aa47c 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -83,7 +83,7 @@ public abstract class SerializableRecipe { recipeHandlers.add(new PedestalRecipes()); //GENERIC - recipeHandlers.add(new ChemicalPlantRecipes()); + recipeHandlers.add(ChemicalPlantRecipes.INSTANCE); recipeHandlers.add(new MatDistribution()); recipeHandlers.add(new CustomMachineRecipes()); diff --git a/src/main/java/com/hbm/module/ModuleMachineChemplant.java b/src/main/java/com/hbm/module/ModuleMachineChemplant.java new file mode 100644 index 000000000..9775ab26a --- /dev/null +++ b/src/main/java/com/hbm/module/ModuleMachineChemplant.java @@ -0,0 +1,55 @@ +package com.hbm.module; + +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; + +import api.hbm.energymk2.IEnergyHandlerMK2; +import net.minecraft.item.ItemStack; + +/** + * Option 1: Make a base class with weird arbitrary overrides to define shit like slots for multi machines like the chemfac + * Option 2: Make an easy to define module which can be used by whatever needs it, hypothetically allowing a mixed recipe machine. + * In the hudson bay, you know how we do it. + * @author hbm + */ +public class ModuleMachineChemplant { + + public int index; + public IEnergyHandlerMK2 battery; + public ItemStack[] slots; + public int[] inputSlots = new int[3]; + public int[] outputSlots = new int[3]; + public FluidTank[] inputTanks = new FluidTank[3]; + public FluidTank[] outputTanks = new FluidTank[3]; + + public String recipe; + public float progress; + + public ModuleMachineChemplant(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { + this.index = index; + this.battery = battery; + this.slots = slots; + } + + public boolean canProcess() { + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.recipe); + if(recipe == null) return false; + if(battery.getPower() < recipe.power) return false; + + //TBI + + return true; + } + + public void resetProgress() { this.progress = 0F; } + + public void update() { + + } + + public ModuleMachineChemplant iInput(int a, int b, int c) { inputSlots[0] = a; inputSlots[1] = b; inputSlots[2] = c; return this; } + public ModuleMachineChemplant iOutput(int a, int b, int c) { outputSlots[0] = a; outputSlots[1] = b; outputSlots[2] = c; return this; } + public ModuleMachineChemplant fInput(FluidTank a, FluidTank b, FluidTank c) { inputTanks[0] = a; inputTanks[1] = b; inputTanks[2] = c; return this; } + public ModuleMachineChemplant fOutput(FluidTank a, FluidTank b, FluidTank c) { outputTanks[0] = a; outputTanks[1] = b; outputTanks[2] = c; return this; } +} diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java index b66f0e893..9bb17c62b 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderAmat.java @@ -149,7 +149,7 @@ public class ItemRenderAmat extends ItemRenderWeaponBase { @Override public void setupThirdPerson(ItemStack stack) { super.setupThirdPerson(stack); - double scale = 1.5D; + double scale = 1.25D; GL11.glScaled(scale, scale, scale); GL11.glTranslated(0, 0.5, 6.75); } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 375a89662..9a125268a 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -341,6 +341,7 @@ public class TileMappings { put(TileEntityMachineAssembler.class, "tileentity_assembly_machine"); put(TileEntityMachineAssemfac.class, "tileentity_assemfac"); put(TileEntityMachineChemplant.class, "tileentity_chemical_plant"); + put(TileEntityMachineChemicalPlant.class, "tileentity_chemicalplant"); put(TileEntityMachineChemfac.class, "tileentity_chemfac"); put(TileEntityMachineOilWell.class, "tileentity_derrick"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index c9bac3663..d0579ad9a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.List; import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.UpgradeManagerNT; import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.fluid.Fluids; @@ -11,6 +12,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalPlant; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.module.ModuleMachineChemplant; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -24,10 +26,12 @@ import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IGUIProvider { +public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider { public FluidTank[] inputTanks; public FluidTank[] outputTanks; @@ -37,6 +41,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem public int progress; public int maxProgress; + public ModuleMachineChemplant chemplantModule; public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); public TileEntityMachineChemicalPlant() { @@ -48,6 +53,9 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem this.inputTanks[i] = new FluidTank(Fluids.NONE, 24_000); this.outputTanks[i] = new FluidTank(Fluids.NONE, 24_000); } + + this.chemplantModule = new ModuleMachineChemplant(0, this, slots) + .iInput(4, 5, 6).iOutput(7, 8, 9); } @Override @@ -91,6 +99,28 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem this.progress = buf.readInt(); this.maxProgress = buf.readInt(); } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + for(int i = 0; i < 3; i++) { + this.inputTanks[i].readFromNBT(nbt, "i" + i); + this.outputTanks[i].readFromNBT(nbt, "o" + i); + } + + this.chemplantModule.fInput(inputTanks[0], inputTanks[1], inputTanks[2]).fOutput(outputTanks[0], outputTanks[1], outputTanks[2]); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + for(int i = 0; i < 3; i++) { + this.inputTanks[i].writeToNBT(nbt, "i" + i); + this.outputTanks[i].writeToNBT(nbt, "o" + i); + } + } @Override public long getPower() { return power; } @Override public void setPower(long power) { this.power = power; } @@ -103,6 +133,27 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineChemicalPlant(player.inventory, this); } @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineChemicalPlant(player.inventory, this); } + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 1, yCoord, zCoord - 1, xCoord + 2, yCoord + 3, zCoord + 2); + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + @Override public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_recipe_selector.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_recipe_selector.png index 73529c346c4794a0fab294fc3300041e9c2549e6..0da6d7d30bae3c87cee891582b9f9df354e71d4d 100644 GIT binary patch delta 1552 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 From 169e9c087901767280fbcdd76794f2369e17f598 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 1 Jun 2025 17:10:57 +0200 Subject: [PATCH 111/491] lost in the sauce --- changelog | 2 ++ .../inventory/recipes/AssemblerRecipes.java | 3 ++- .../weapon/sedna/factory/XFactory50.java | 11 ++++++++--- .../weapon/sedna/factory/XFactory556mm.java | 6 +++--- .../weapon/sedna/factory/XFactoryTool.java | 4 ++++ .../weapon/sedna/mods/WeaponModScope.java | 11 ++++++++++- .../com/hbm/render/util/RenderOverhead.java | 2 ++ .../assets/hbm/textures/misc/scope_44.png | Bin 15186 -> 8198 bytes .../misc/{scope_luna.png => scope_amat.png} | Bin .../hbm/textures/misc/scope_penance.png | Bin 0 -> 16280 bytes .../assets/hbm/textures/misc/scope_tool.png | Bin 0 -> 8448 bytes 11 files changed, 31 insertions(+), 8 deletions(-) rename src/main/resources/assets/hbm/textures/misc/{scope_luna.png => scope_amat.png} (100%) create mode 100644 src/main/resources/assets/hbm/textures/misc/scope_penance.png create mode 100644 src/main/resources/assets/hbm/textures/misc/scope_tool.png diff --git a/changelog b/changelog index cf105af6d..2eb34f29f 100644 --- a/changelog +++ b/changelog @@ -18,6 +18,8 @@ * Water extinguishers can now wash away foam blocks * Obliterated Fabsol's vodka * Tier 4 heart piece is now called "heart of darkness" +* Thermal sights now render dead mobs in black +* Guns now have unique scope overlays instead of reusing the .44 scope for everything ## Fixed * Conveyor ejectors should now correctly place items onto the back of splitters instead of on the output belts diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 82fc9d8f4..b66a700c7 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -29,6 +29,7 @@ import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; import com.hbm.items.ItemEnums.EnumCasingType; +import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; @@ -803,7 +804,7 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.ammo_secret, 12, EnumAmmoSecret.BMG50_BLACK), new AStack[] { new ComparableStack(ModItems.casing, 2, EnumCasingType.LARGE_STEEL), new OreDictStack(ANY_SMOKELESS.dust(), 24), - new OreDictStack(WEAPONSTEEL.ingot(), 8), + new ComparableStack(ModItems.item_secret, 1, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.black_diamond), }, 1200, ModItems.journal_silver); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java index a73db227c..9a0c0fcae 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java @@ -18,6 +18,7 @@ import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.items.weapon.sedna.mags.MagazineBelt; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; +import com.hbm.lib.RefStrings; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; @@ -27,9 +28,13 @@ import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.ResourceLocation; public class XFactory50 { + public static final ResourceLocation scope = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_amat.png"); + public static final ResourceLocation scope_thermal = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_penance.png"); + public static BulletConfig bmg50_sp; public static BulletConfig bmg50_fmj; public static BulletConfig bmg50_jhp; @@ -76,7 +81,7 @@ public class XFactory50 { .setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_EQUESTRIAN).register("bmg50equestrian")); ModItems.gun_amat = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() - .dura(350).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(XFactory44.scope_lilmac).smoke(LAMBDA_SMOKE) + .dura(350).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(scope).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(30F).delay(25).dry(25).spreadHipfire(0.05F).reload(51).jam(43).sound("hbm:weapon.fire.amat", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 7).addConfigs(bmg50_sp, bmg50_fmj, bmg50_jhp, bmg50_ap, bmg50_du, bmg50_sm, bmg50_he)) @@ -86,7 +91,7 @@ public class XFactory50 { .anim(LAMBDA_AMAT_ANIMS).orchestra(Orchestras.ORCHESTRA_AMAT) ).setUnlocalizedName("gun_amat"); ModItems.gun_amat_subtlety = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() - .dura(1_000).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(XFactory44.scope_lilmac).smoke(LAMBDA_SMOKE) + .dura(1_000).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(scope).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(50F).delay(25).dry(25).spreadHipfire(0.05F).reload(51).jam(43).sound("hbm:weapon.fire.amat", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 7).addConfigs(bmg50_equestrian, bmg50_sp, bmg50_fmj, bmg50_jhp, bmg50_ap, bmg50_du, bmg50_sm, bmg50_he)) @@ -96,7 +101,7 @@ public class XFactory50 { .anim(LAMBDA_AMAT_ANIMS).orchestra(Orchestras.ORCHESTRA_AMAT) ).setUnlocalizedName("gun_amat_subtlety"); ModItems.gun_amat_penance = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() - .dura(5_000).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(XFactory44.scope_lilmac).thermalSights(true).smoke(LAMBDA_SMOKE) + .dura(5_000).draw(20).inspect(50).crosshair(Crosshair.CIRCLE).scopeTexture(scope_thermal).thermalSights(true).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(45F).delay(25).dry(25).spreadHipfire(0F).reload(51).jam(43).sound("hbm:weapon.silencerShoot", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 7).addConfigs(bmg50_sp, bmg50_fmj, bmg50_jhp, bmg50_ap, bmg50_du, bmg50_sm, bmg50_he, bmg50_black)) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java index 6165e3b37..c37d6c78a 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java @@ -37,7 +37,7 @@ import net.minecraft.util.ResourceLocation; public class XFactory556mm { - public static final ResourceLocation scope_lilmac = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_44.png"); + public static final ResourceLocation scope = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_bolt.png"); public static BulletConfig r556_sp; public static BulletConfig r556_fmj; @@ -83,7 +83,7 @@ public class XFactory556mm { .anim(LAMBDA_G3_ANIMS).orchestra(Orchestras.ORCHESTRA_G3) ).setNameMutator(LAMBDA_NAME_G3).setUnlocalizedName("gun_g3"); ModItems.gun_g3_zebra = new ItemGunBaseNT(WeaponQuality.B_SIDE, new GunConfig() - .dura(6_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE).scopeTexture(XFactory44.scope_lilmac) + .dura(6_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE).scopeTexture(scope) .rec(new Receiver(0) .dmg(7.5F).delay(2).auto(true).dry(15).spreadHipfire(0.01F).reload(50).jam(47).sound("hbm:weapon.fire.silenced", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 30).addConfigs(r556_inc_sp, r556_inc_fmj, r556_inc_jhp, r556_inc_ap)) @@ -94,7 +94,7 @@ public class XFactory556mm { ).setNameMutator(LAMBDA_NAME_G3).setUnlocalizedName("gun_g3_zebra"); ModItems.gun_stg77 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() - .dura(3_000).draw(10).inspect(125).crosshair(Crosshair.CIRCLE).scopeTexture(scope_lilmac).smoke(LAMBDA_SMOKE) + .dura(3_000).draw(10).inspect(125).crosshair(Crosshair.CIRCLE).scopeTexture(scope).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(10F).delay(2).dry(15).auto(true).reload(46).jam(0).sound("hbm:weapon.fire.assault", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 30).addConfigs(r556_sp, r556_fmj, r556_jhp, r556_ap)) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java index 9f3179947..91cb0f688 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryTool.java @@ -25,6 +25,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.impl.ItemGunChargeThrower; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; +import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.particle.helper.ExplosionCreator; import com.hbm.render.anim.BusAnimation; @@ -45,9 +46,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; public class XFactoryTool { + + public static final ResourceLocation scope = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_tool.png"); public static BulletConfig fext_water; public static BulletConfig fext_foam; diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModScope.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModScope.java index 862ea4c0b..7b595d151 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModScope.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModScope.java @@ -1,7 +1,12 @@ package com.hbm.items.weapon.sedna.mods; +import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.GunConfig; +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.XFactory44; +import com.hbm.items.weapon.sedna.factory.XFactory556mm; +import com.hbm.items.weapon.sedna.factory.XFactoryTool; import net.minecraft.item.ItemStack; @@ -14,7 +19,11 @@ public class WeaponModScope extends WeaponModBase { @Override public T eval(T base, ItemStack gun, String key, Object parent) { - if(key == GunConfig.O_SCOPETEXTURE) return (T) XFactory44.scope_lilmac; + if(key == GunConfig.O_SCOPETEXTURE) { + if(gun.getItem() == ModItems.gun_heavy_revolver) return (T) XFactory44.scope_lilmac; + if(((ItemGunBaseNT) gun.getItem()).quality == WeaponQuality.UTILITY) return (T) XFactoryTool.scope; + return (T) XFactory556mm.scope; + } if(key == GunConfig.B_HIDECROSSHAIR) return cast(true, base); // just in case return base; diff --git a/src/main/java/com/hbm/render/util/RenderOverhead.java b/src/main/java/com/hbm/render/util/RenderOverhead.java index 8e942ed3f..f5270532f 100644 --- a/src/main/java/com/hbm/render/util/RenderOverhead.java +++ b/src/main/java/com/hbm/render/util/RenderOverhead.java @@ -159,6 +159,8 @@ public class RenderOverhead { tess.setColorOpaque_F(0.5F, 1F, 0.5F); } else continue; + + if(ent instanceof EntityLivingBase && ((EntityLivingBase) ent).getHealth() <= 0) tess.setColorOpaque_F(0F, 0F, 0F); AxisAlignedBB bb = ent.boundingBox; tess.addVertex(bb.minX - x, bb.maxY - y, bb.minZ - z); diff --git a/src/main/resources/assets/hbm/textures/misc/scope_44.png b/src/main/resources/assets/hbm/textures/misc/scope_44.png index dc53998bb917cdad3b78e1f4e9f7d50170262c99..038868a0f17395f2fbd3f372bef1f9e04bcaf0d6 100644 GIT binary patch literal 8198 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 literal 15186 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 SaRFSlM^cnildY0A3;92S&3QWj literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/misc/scope_tool.png b/src/main/resources/assets/hbm/textures/misc/scope_tool.png new file mode 100644 index 0000000000000000000000000000000000000000..b99d8db414e3079e8223eae682a65d347f1264b9 GIT binary patch literal 8448 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 Date: Sun, 1 Jun 2025 18:09:57 +0300 Subject: [PATCH 112/491] Make wooden scaffold climbable --- .../blocks/generic/BlockWoodStructure.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java b/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java index b094874ac..74fdb220a 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java @@ -5,6 +5,7 @@ import java.util.List; import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockEnumMulti; +import com.hbm.extprop.HbmPlayerProps; import com.hbm.render.block.ISBRHUniversal; import com.hbm.render.util.RenderBlocksNT; import com.hbm.util.EnumUtil; @@ -16,6 +17,7 @@ import net.minecraft.block.material.Material; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -53,7 +55,7 @@ public class BlockWoodStructure extends BlockEnumMulti implements ISBRHUniversal EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class, world.getBlockMetadata(x, y, z)); setBlockBounds(0, 0, 0, 1, 1, 1); if(type == type.ROOF) setBlockBounds(0F, 0F, 0F, 1F, 0.1875F, 1F); - if(type == type.SCAFFOLD) setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F); + if(type == type.SCAFFOLD) setBlockBounds(0.0625F, 0F, 0.0625F, 1F - 0.0625F, 1F, 1F - 0.0625F); if(type == type.CEILING) setBlockBounds(0F, 0.875F, 0F, 1F, 1F, 1F); } @@ -62,6 +64,21 @@ public class BlockWoodStructure extends BlockEnumMulti implements ISBRHUniversal setBlockBoundsBasedOnState(world, x, y, z); super.addCollisionBoxesToList(world, x, y, z, aabb, list, collider); } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + setBlockBoundsBasedOnState(world, x, y, z); + return super.getCollisionBoundingBoxFromPool(world, x, y, z); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int i, int j, int k) { + int meta = world.getBlockMetadata(i, j, k); + EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class, meta); + + if (type == type.SCAFFOLD) return AxisAlignedBB.getBoundingBox(i, j, k, i + 1, j + 1, k + 1); + + return super.getSelectedBoundingBoxFromPool(world, i, j, k); + } @Override public void renderInventoryBlock(Block block, int meta, int modelId, Object renderBlocks) { @@ -149,4 +166,18 @@ public class BlockWoodStructure extends BlockEnumMulti implements ISBRHUniversal return true; } + + @Override + public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { + if (entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) entity; + + int meta = world.getBlockMetadata(x, y, z); + EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class,meta); + if (type != type.SCAFFOLD) return; + + HbmPlayerProps props = HbmPlayerProps.getData(player); + props.isOnLadder = true; + } + } } From 8d7664f728f9101e7c0bfaddd13db3bdb8b422c6 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 1 Jun 2025 19:29:01 +0300 Subject: [PATCH 113/491] Integrate stack size logic directly into SlotPattern --- src/main/java/com/hbm/inventory/SlotPattern.java | 10 ++++++++++ .../hbm/inventory/container/ContainerAutocrafter.java | 8 +------- .../inventory/container/ContainerCartDestroyer.java | 8 +------- .../hbm/inventory/container/ContainerCounterTorch.java | 8 +------- .../inventory/container/ContainerCraneExtractor.java | 8 +------- .../hbm/inventory/container/ContainerCraneGrabber.java | 8 +------- .../hbm/inventory/container/ContainerCraneRouter.java | 8 +------- .../inventory/container/ContainerDroneRequester.java | 8 +------- .../inventory/container/ContainerMachineCustom.java | 8 +------- .../hbm/inventory/container/ContainerMassStorage.java | 8 +------- .../hbm/inventory/container/ContainerPneumoTube.java | 4 +--- 11 files changed, 20 insertions(+), 66 deletions(-) diff --git a/src/main/java/com/hbm/inventory/SlotPattern.java b/src/main/java/com/hbm/inventory/SlotPattern.java index c40b92091..550fae5b6 100644 --- a/src/main/java/com/hbm/inventory/SlotPattern.java +++ b/src/main/java/com/hbm/inventory/SlotPattern.java @@ -5,6 +5,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; public class SlotPattern extends Slot { @@ -24,6 +25,15 @@ public class SlotPattern extends Slot { return 1; } + @Override + public void putStack(ItemStack stack) { + if (stack != null) { + stack = stack.copy(); + stack.stackSize = 1; + } + super.putStack(stack); + } + public SlotPattern disableHover() { this.canHover = false; return this; diff --git a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java index 0c5c3ff51..f18f83c9f 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java +++ b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java @@ -74,13 +74,7 @@ public class ContainerAutocrafter extends ContainerBase { } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); autocrafter.matcher.initPatternSmart(autocrafter.getWorldObj(), slot.getStack(), index); autocrafter.updateTemplateGrid(); diff --git a/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java b/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java index 356a97d92..cff9ae430 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java @@ -66,13 +66,7 @@ public class ContainerCartDestroyer extends Container { if(slot.getHasStack()) ret = slot.getStack().copy(); - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); return ret; } diff --git a/src/main/java/com/hbm/inventory/container/ContainerCounterTorch.java b/src/main/java/com/hbm/inventory/container/ContainerCounterTorch.java index 925b3d7e1..c50c6014f 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCounterTorch.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCounterTorch.java @@ -48,13 +48,7 @@ public class ContainerCounterTorch extends ContainerBase { return ret; } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); radio.matcher.initPatternStandard(radio.getWorldObj(), slot.getStack(), index); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java b/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java index 9c0abe3a6..1da5825e1 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java @@ -105,13 +105,7 @@ public class ContainerCraneExtractor extends ContainerBase { return ret; } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); extractor.matcher.initPatternStandard(extractor.getWorldObj(), slot.getStack(), index); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java b/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java index 7b35961ee..17de36f86 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java @@ -100,13 +100,7 @@ public class ContainerCraneGrabber extends ContainerBase { return ret; } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); grabber.matcher.initPatternStandard(grabber.getWorldObj(), slot.getStack(), index); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerCraneRouter.java b/src/main/java/com/hbm/inventory/container/ContainerCraneRouter.java index d30d8c8ae..79de2466f 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCraneRouter.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCraneRouter.java @@ -52,13 +52,7 @@ public class ContainerCraneRouter extends ContainerBase { } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); router.initPattern(slot.getStack(), index); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java b/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java index bdc788c44..13a8bbb0e 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java +++ b/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java @@ -85,13 +85,7 @@ public class ContainerDroneRequester extends ContainerCrateBase { return ret; } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); requester.matcher.initPatternStandard(requester.getWorldObj(), slot.getStack(), index); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineCustom.java b/src/main/java/com/hbm/inventory/container/ContainerMachineCustom.java index d85a2953f..2e988f28a 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineCustom.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineCustom.java @@ -94,13 +94,7 @@ public class ContainerMachineCustom extends Container { } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); custom.matcher.initPatternSmart(player.worldObj, slot.getStack(), index - 10); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java index 899cbc3f2..f8a760816 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java @@ -79,13 +79,7 @@ public class ContainerMassStorage extends ContainerBase { if(storage.getStockpile() > 0) return ret; - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); return ret; } diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoTube.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoTube.java index 9796028ea..91eaab7f3 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerPneumoTube.java +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoTube.java @@ -39,9 +39,7 @@ public class ContainerPneumoTube extends ContainerBase { tube.nextMode(index); return ret; } else { - slot.putStack(held != null ? held.copy() : null); - if(slot.getHasStack()) slot.getStack().stackSize = 1; - slot.onSlotChanged(); + slot.putStack(held); tube.initPattern(slot.getStack(), index); return ret; } From afa0418104e817e972f8062f80410a7bfb1c573a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 00:11:28 +0300 Subject: [PATCH 114/491] Make strand caster timeout refresh on pour Previously, if a caster has been idle for a while, the first time something is poured into it, it would spew out a partial load almost immediately. The original intention behind the timeout was instead to make the strand caster perform incomplete operations if no new material has been poured for a while. This change makes the behaviour closer to intended. Most of the time, persistent use of the caster would consistently reach full fill, and incomplete fill will only be processed at the end. --- .../machine/TileEntityMachineStrandCaster.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index 9ca467285..a3a8b3ded 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -32,7 +32,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase public FluidTank water; public FluidTank steam; - private long lastCastTick = 0; + private long lastProgressTick = 0; public String getName() { return "container.machineStrandCaster"; @@ -77,7 +77,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase int moldsToCast = maxProcessable(); // Makes it flush the buffers after 10 seconds of inactivity, or when they're full - if (moldsToCast > 0 && (moldsToCast >= 9 || worldObj.getWorldTime() >= lastCastTick + 200)) { + if (moldsToCast > 0 && (moldsToCast >= 9 || worldObj.getWorldTime() >= lastProgressTick + 200)) { ItemMold.Mold mold = this.getInstalledMold(); @@ -108,7 +108,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase water.setFill(water.getFill() - getWaterRequired() * moldsToCast); steam.setFill(steam.getFill() + getWaterRequired() * moldsToCast); - lastCastTick = worldObj.getWorldTime(); + lastProgressTick = worldObj.getWorldTime(); } networkPackNT(150); @@ -226,6 +226,8 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase stack.amount -= required; + lastProgressTick = world.getWorldTime(); + return stack; } @@ -272,7 +274,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase super.writeToNBT(nbt); water.writeToNBT(nbt, "w"); steam.writeToNBT(nbt, "s"); - nbt.setLong("t", lastCastTick); + nbt.setLong("t", lastProgressTick); } @Override @@ -280,7 +282,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase super.readFromNBT(nbt); water.readFromNBT(nbt, "w"); steam.readFromNBT(nbt, "s"); - lastCastTick = nbt.getLong("t"); + lastProgressTick = nbt.getLong("t"); } @Override From 2d33e90f931770c218cf833b28d93a236e213389 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 00:59:22 +0300 Subject: [PATCH 115/491] Allow climbing freestanding chains and vines using spacebar --- .../com/hbm/main/ModEventHandlerClient.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index a2ee8b962..fc9d0041f 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -68,6 +68,7 @@ import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent; +import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent; @@ -86,6 +87,7 @@ import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -1098,6 +1100,28 @@ public class ModEventHandlerClient { } } + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerTick(TickEvent.PlayerTickEvent event) { + EntityPlayer player = event.player; + + int x = MathHelper.floor_double(player.posX); + int y = MathHelper.floor_double(player.posY); + int z = MathHelper.floor_double(player.posZ); + Block b = player.worldObj.getBlock(x, y, z); + + // Support climbing freestanding vines and chains using spacebar + if ( + b.isLadder(player.worldObj, x, y, z, player) && + b.getCollisionBoundingBoxFromPool(player.worldObj, x, y, z) == null && + !player.capabilities.isFlying && + GameSettings.isKeyDown(Minecraft.getMinecraft().gameSettings.keyBindJump) && + player.motionY < 0.15 + ) { + player.motionY = 0.15; + } + } + @SideOnly(Side.CLIENT) @SubscribeEvent(priority = EventPriority.LOW) public void onMouseClicked(InputEvent.MouseInputEvent event) { From 4a931a4be1799750deae585bbe877a1f1021bc78 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 01:04:21 +0300 Subject: [PATCH 116/491] Remove angry metal drop Considerting it is no longer used anywhere (Eye of Harmony doesn't count since the AMS is long deprecated), it felt weird to still get it 10% of the time --- src/main/java/com/hbm/blocks/generic/BlockOre.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockOre.java b/src/main/java/com/hbm/blocks/generic/BlockOre.java index 36cd4e00c..eda698874 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockOre.java +++ b/src/main/java/com/hbm/blocks/generic/BlockOre.java @@ -68,9 +68,6 @@ public class BlockOre extends Block { if(this == ModBlocks.ore_nether_fire) { return rand.nextInt(10) == 0 ? ModItems.ingot_phosphorus : ModItems.powder_fire; } - if(this == ModBlocks.block_meteor) { - return rand.nextInt(10) == 0 ? ModItems.plate_dalekanium : Item.getItemFromBlock(ModBlocks.block_meteor); - } if(this == ModBlocks.block_meteor_cobble) { return ModItems.fragment_meteorite; } From 5501380d1528cce3fb189ba622a08f7c52fe97ac Mon Sep 17 00:00:00 2001 From: George Paton Date: Mon, 2 Jun 2025 10:15:39 +1000 Subject: [PATCH 117/491] fix interaction max distance preventing interacting with detailed BlockDummyable hitboxes --- .../java/com/hbm/blocks/BlockDummyable.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index fa604e66e..9508350b5 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -443,8 +443,10 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl y = pos[1]; z = pos[2]; - for(AxisAlignedBB aabb :this.bounding) { - AxisAlignedBB boxlet = getAABBRotationOffset(aabb, x + 0.5, y, z + 0.5, ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z) - offset).getRotation(ForgeDirection.UP)); + ForgeDirection rot = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z) - offset).getRotation(ForgeDirection.UP); + + for(AxisAlignedBB aabb : this.bounding) { + AxisAlignedBB boxlet = getAABBRotationOffset(aabb, x + 0.5, y, z + 0.5, rot); if(entityBounding.intersectsWith(boxlet)) { list.add(boxlet); @@ -469,6 +471,7 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl return AxisAlignedBB.getBoundingBox(aabb.minX, aabb.minY, aabb.minZ, aabb.maxX, aabb.maxY, aabb.maxZ).offset(x + 0.5, y + 0.5, z + 0.5); } + // Don't mutate the xyz parameters, or the interaction max distance will bite you @Override public MovingObjectPosition collisionRayTrace(World world, int x, int y, int z, Vec3 startVec, Vec3 endVec) { if(!this.useDetailedHitbox()) { @@ -480,12 +483,10 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl if(pos == null) return super.collisionRayTrace(world, x, y, z, startVec, endVec); - x = pos[0]; - y = pos[1]; - z = pos[2]; + ForgeDirection rot = ForgeDirection.getOrientation(world.getBlockMetadata(pos[0], pos[1], pos[2]) - offset).getRotation(ForgeDirection.UP); - for(AxisAlignedBB aabb :this.bounding) { - AxisAlignedBB boxlet = getAABBRotationOffset(aabb, x + 0.5, y, z + 0.5, ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z) - offset).getRotation(ForgeDirection.UP)); + for(AxisAlignedBB aabb : this.bounding) { + AxisAlignedBB boxlet = getAABBRotationOffset(aabb, pos[0] + 0.5, pos[1], pos[2] + 0.5, rot); MovingObjectPosition intercept = boxlet.calculateIntercept(startVec, endVec); if(intercept != null) { @@ -529,10 +530,10 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl double dZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double)interp; float exp = 0.002F; - int meta = world.getBlockMetadata(x, y, z); + ForgeDirection rot = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z) - offset).getRotation(ForgeDirection.UP); ICustomBlockHighlight.setup(); - for(AxisAlignedBB aabb : this.bounding) RenderGlobal.drawOutlinedBoundingBox(getAABBRotationOffset(aabb.expand(exp, exp, exp), 0, 0, 0, ForgeDirection.getOrientation(meta - offset).getRotation(ForgeDirection.UP)).getOffsetBoundingBox(x - dX + 0.5, y - dY, z - dZ + 0.5), -1); + for(AxisAlignedBB aabb : this.bounding) RenderGlobal.drawOutlinedBoundingBox(getAABBRotationOffset(aabb.expand(exp, exp, exp), 0, 0, 0, rot).getOffsetBoundingBox(x - dX + 0.5, y - dY, z - dZ + 0.5), -1); ICustomBlockHighlight.cleanup(); } From 5d7fc996e591a313d22d16991bea01d7ce23d80e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 14:32:00 +0300 Subject: [PATCH 118/491] Make autosaw replant crops It doesn't seem too far-fetched to suggest the seeds that fall to the ground are replanted in a natural way. I had to replace the old ray-tracing approach with a more straightforward iteration over all possibly affected blocks (under 400, most of them skipped). In terms of performance this seems on par with the original solution (the raytrace function alone did 200 iterations). --- .../machine/TileEntityMachineAutosaw.java | 106 ++++++++++++++---- 1 file changed, 85 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index af5d11cf7..d7bddd3a1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -22,14 +23,20 @@ import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.BlockLeaves; +import net.minecraft.block.IGrowable; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardReceiver, IFluidCopiable { @@ -119,29 +126,40 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB this.rotationYaw -= 360; } - Vec3 grace = Vec3.createVectorHelper(0, 0, -3.5); - grace.rotateAroundY(-(float) Math.toRadians(rotationYaw)); - grace.xCoord += pivot.xCoord; - grace.yCoord += pivot.yCoord; - grace.zCoord += pivot.zCoord; + final double CUT_ANGLE = Math.toRadians(5); + double rotationYawRads = Math.toRadians((rotationYaw + 270) % 360); - Vec3 detector = Vec3.createVectorHelper(0, 0, -9); - detector.rotateAroundY(-(float) Math.toRadians(rotationYaw)); - detector.xCoord += pivot.xCoord; - detector.yCoord += pivot.yCoord; - detector.zCoord += pivot.zCoord; - MovingObjectPosition pos = worldObj.func_147447_a(grace, detector, false, false, false); + outer: + for(int dx = -9; dx <= 9; dx++) { + for(int dz = -9; dz <= 9; dz++) { + int sqrDst = dx * dx + dz * dz; - if(pos != null && pos.typeOfHit == pos.typeOfHit.BLOCK) { + if(sqrDst <= 4 || sqrDst > 81) + continue; + + double angle = Math.atan2(dz, dx); + double relAngle = Math.abs(angle - rotationYawRads); + relAngle = Math.abs((relAngle + Math.PI) % (2 * Math.PI) - Math.PI); - Block b = worldObj.getBlock(pos.blockX, pos.blockY, pos.blockZ); + if(relAngle > CUT_ANGLE) + continue; - if(b.getMaterial() == Material.wood || b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants) { + int x = xCoord + dx; + int y = yCoord + 1; + int z = zCoord + dz; - int meta = worldObj.getBlockMetadata(pos.blockX, pos.blockY, pos.blockZ); - if(!shouldIgnore(b, meta)) { - state = 1; - } + Block b = worldObj.getBlock(x, y, z); + if(!(b.getMaterial() == Material.wood || b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants)) + continue; + + int meta = worldObj.getBlockMetadata(x, y, z); + if(shouldIgnore(worldObj, x, y, z, b, meta)) + continue; + + // com.hbm.main.MainRegistry.logger.info("[Abel] found target at " + x + ", " + y + ", " + z + ", angle=" + rotationYaw); + + state = 1; + break outer; } } } @@ -212,11 +230,15 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB } /** Anything additionally that the detector nor the blades should pick up on, like non-mature willows */ - public static boolean shouldIgnore(Block b, int meta) { + public static boolean shouldIgnore(World world, int x, int y, int z, Block b, int meta) { if(b == ModBlocks.plant_tall) { return meta == EnumTallFlower.CD2.ordinal() + 8 || meta == EnumTallFlower.CD3.ordinal() + 8; } + if((b instanceof IGrowable)) { + return ((IGrowable) b).func_149851_a(world, x, y, z, world.isRemote); + } + return false; } @@ -225,12 +247,12 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB Block b = worldObj.getBlock(x, y, z); int meta = worldObj.getBlockMetadata(x, y, z); - if(shouldIgnore(b, meta)) { + if(shouldIgnore(worldObj, x, y, z, b, meta)) { return; } if(b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants) { - worldObj.func_147480_a(x, y, z, true); + cutCrop(x, y, z); return; } @@ -242,6 +264,48 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB } } + protected void cutCrop(int x, int y, int z) { + + Block soil = worldObj.getBlock(x, y - 1, z); + + Block b = worldObj.getBlock(x, y, z); + int meta = worldObj.getBlockMetadata(x, y, z); + + worldObj.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(b) + (meta << 12)); + + Block replacementBlock = Blocks.air; + int replacementMeta = 0; + + if (!worldObj.isRemote && !worldObj.restoringBlockSnapshots) { + ArrayList drops = b.getDrops(worldObj, x, y, z, meta, 0); + boolean replanted = false; + + for (ItemStack drop : drops) { + if (!replanted && drop.getItem() instanceof IPlantable) { + IPlantable seed = (IPlantable) drop.getItem(); + + if(soil.canSustainPlant(worldObj, x, y - 1, z, ForgeDirection.UP, seed)) { + replacementBlock = seed.getPlant(worldObj, x, y, z); + replacementMeta = seed.getPlantMetadata(worldObj, x, y, z); + replanted = true; + drop.stackSize -= 1; + } + } + + float delta = 0.7F; + double dx = (double)(worldObj.rand.nextFloat() * delta) + (double)(1.0F - delta) * 0.5D; + double dy = (double)(worldObj.rand.nextFloat() * delta) + (double)(1.0F - delta) * 0.5D; + double dz = (double)(worldObj.rand.nextFloat() * delta) + (double)(1.0F - delta) * 0.5D; + + EntityItem entityItem = new EntityItem(worldObj, x + dx, y + dy, z + dz, drop); + entityItem.delayBeforeCanPickup = 10; + worldObj.spawnEntityInWorld(entityItem); + } + } + + worldObj.setBlock(x, y, z, replacementBlock, replacementMeta, 3); + } + protected void fellTree(int x, int y, int z) { if(worldObj.getBlock(x, y - 1, z).getMaterial() == Material.wood) { From 0c9bea70911d9acc299a31c986f0dc5a544f0e17 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 2 Jun 2025 16:58:59 +0200 Subject: [PATCH 119/491] the selection --- .../gui/GUIMachineChemicalPlant.java | 2 +- .../gui/GUIScreenRecipeSelector.java | 112 +++++++++++++++++- .../recipes/ChemicalPlantRecipes.java | 10 ++ .../recipes/loader/GenericRecipe.java | 14 ++- .../recipes/loader/GenericRecipes.java | 3 + 5 files changed, 134 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java index 5bc4c5a93..d2812ab1f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -41,7 +41,7 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, "", 0, this); + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule.recipe, 0, this); } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java index ecb69ba16..9fedd4ef0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java @@ -1,25 +1,45 @@ package com.hbm.inventory.gui; +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.lib.RefStrings; import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.util.ResourceLocation; public class GUIScreenRecipeSelector extends GuiScreen { protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_recipe_selector.png"); + //basic GUI setup protected int xSize = 176; protected int ySize = 132; protected int guiLeft; protected int guiTop; - + // search crap + protected GenericRecipes recipeSet; + protected List recipes = new ArrayList(); + protected GuiTextField search; + protected int pageIndex; + protected int size; + protected String selection; + // callback + protected int index; + protected IControlReceiver tile; protected GuiScreen previousScreen; public static void openSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, GuiScreen previousScreen) { @@ -27,7 +47,13 @@ public class GUIScreenRecipeSelector extends GuiScreen { } public GUIScreenRecipeSelector(GenericRecipes recipeSet, IControlReceiver tile, String selection, int index, GuiScreen previousScreen) { + this.recipeSet = recipeSet; + this.tile = tile; + this.selection = selection; + this.index = index; this.previousScreen = previousScreen; + + regenerateRecipes(); } @Override @@ -35,6 +61,41 @@ public class GUIScreenRecipeSelector extends GuiScreen { super.initGui(); this.guiLeft = (this.width - this.xSize) / 2; this.guiTop = (this.height - this.ySize) / 2; + + Keyboard.enableRepeatEvents(true); + this.search = new GuiTextField(this.fontRendererObj, guiLeft + 28, guiTop + 111, 102, 12); + this.search.setTextColor(-1); + this.search.setDisabledTextColour(-1); + this.search.setEnableBackgroundDrawing(false); + this.search.setMaxStringLength(32); + } + + private void regenerateRecipes() { + + this.recipes.clear(); + this.recipes.addAll(recipeSet.recipeOrderedList); + + resetPaging(); + } + + private void search(String search) { + this.recipes.clear(); + + if(search.isEmpty()) { + this.recipes.addAll(recipeSet.recipeOrderedList); + } else { + for(Object o : recipeSet.recipeOrderedList) { + GenericRecipe recipe = (GenericRecipe) o; + if(recipe.matchesSearch(search)) this.recipes.add(recipe); + } + } + + resetPaging(); + } + + private void resetPaging() { + this.pageIndex = 0; + this.size = Math.max(0, (int)Math.ceil((this.recipes.size() - 40) / 8D)); } @Override @@ -44,6 +105,16 @@ public class GUIScreenRecipeSelector extends GuiScreen { GL11.glDisable(GL11.GL_LIGHTING); this.drawGuiContainerForegroundLayer(mouseX, mouseY); GL11.glEnable(GL11.GL_LIGHTING); + this.handleScroll(); + } + + protected void handleScroll() { + + if(!Mouse.isButtonDown(0) && !Mouse.isButtonDown(1) && Mouse.next()) { + int scroll = Mouse.getEventDWheel(); + if(scroll > 0 && this.pageIndex > 0) this.pageIndex--; + if(scroll < 0 && this.pageIndex < this.size) this.pageIndex++; + } } private void drawGuiContainerForegroundLayer(int x, int y) { @@ -54,14 +125,53 @@ public class GUIScreenRecipeSelector extends GuiScreen { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + for(int i = pageIndex * 8; i < pageIndex * 8 + 40; i++) { + if(i >= recipes.size()) break; + + int ind = i - pageIndex * 8; + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + + GenericRecipe recipe = recipes.get(i); + + FontRenderer font = recipe.getIcon().getItem().getFontRenderer(recipe.getIcon()); + if(font == null) font = fontRendererObj; + + itemRender.zLevel = 100.0F; + itemRender.renderItemAndEffectIntoGUI(font, this.mc.getTextureManager(), recipe.getIcon(), guiLeft + 8 + 18 * (ind % 8), guiTop + 18 + 18 * (ind / 8)); + + itemRender.zLevel = 0.0F; + + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_LIGHTING); + this.mc.getTextureManager().bindTexture(texture); + + if(recipe.name.equals(this.selection)) + this.drawTexturedModalRect(guiLeft + 7 + 18 * (ind % 8), guiTop + 17 + 18 * (ind / 8), 192, 0, 18, 18); + } } @Override protected void keyTyped(char typedChar, int keyCode) { + + if(this.search.textboxKeyTyped(typedChar, keyCode)) { + search(this.search.getText()); + return; + } + if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) { FMLCommonHandler.instance().showGuiScreen(previousScreen); } } + @Override + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + @Override public boolean doesGuiPauseGame() { return false; } } diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index 6aaf0e3cd..95f029458 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -3,6 +3,9 @@ package com.hbm.inventory.recipes; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.material.MaterialShapes; +import com.hbm.inventory.material.Mats; +import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; import com.hbm.items.ModItems; @@ -40,5 +43,12 @@ public class ChemicalPlantRecipes extends GenericRecipes { pool.add(new ChanceOutput(new ItemStack(ModItems.billet_cobalt), 5)); }}) .setOutputFluids(new FluidStack(Fluids.BIOGAS, 2000))); + + for(NTMMaterial mat : Mats.orderedList) { + if(mat.autogen.contains(MaterialShapes.CASTPLATE)) this.register(new GenericRecipe(mat.getUnlocalizedName() + ".plate").setup(60, 100).setOutputItems(new ChanceOutput(new ItemStack(ModItems.plate_cast, 1, mat.id)))); + if(mat.autogen.contains(MaterialShapes.WELDEDPLATE)) this.register(new GenericRecipe(mat.getUnlocalizedName() + ".weld").setup(60, 100).setOutputItems(new ChanceOutput(new ItemStack(ModItems.plate_welded, 1, mat.id)))); + if(mat.autogen.contains(MaterialShapes.DENSEWIRE)) this.register(new GenericRecipe(mat.getUnlocalizedName() + ".wire").setup(60, 100).setOutputItems(new ChanceOutput(new ItemStack(ModItems.wire_dense, 1, mat.id)))); + if(mat.autogen.contains(MaterialShapes.MECHANISM)) this.register(new GenericRecipe(mat.getUnlocalizedName() + ".mechanism").setup(60, 100).setOutputItems(new ChanceOutput(new ItemStack(ModItems.part_mechanism, 1, mat.id)))); + } } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 324f1ce4b..9199580d1 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -1,5 +1,7 @@ package com.hbm.inventory.recipes.loader; +import java.util.Locale; + import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.recipes.loader.GenericRecipes.ChanceOutput; @@ -21,7 +23,7 @@ public class GenericRecipe { public FluidStack[] outputFluid; public int duration; public long power; - public ItemStack icon; + protected ItemStack icon; public boolean writeIcon = false; public boolean customLocalization = false; @@ -32,6 +34,7 @@ public class GenericRecipe { public GenericRecipe setDuration(int duration) { this.duration = duration; return this; } public GenericRecipe setPower(long power) { this.power = power; return this; } public GenericRecipe setup(int duration, long power) { return this.setDuration(duration).setPower(power); } + public GenericRecipe setupNamed(int duration, long power) { return this.setDuration(duration).setPower(power).setNamed(); } public GenericRecipe setIcon(ItemStack icon) { this.icon = icon; this.writeIcon = true; return this; } public GenericRecipe setIcon(Item item, int meta) { return this.setIcon(new ItemStack(item, 1, meta)); } public GenericRecipe setIcon(Item item) { return this.setIcon(new ItemStack(item)); } @@ -60,10 +63,11 @@ public class GenericRecipe { } public String getName() { - if(customLocalization) { - return I18nUtil.resolveKey(name); - } - + if(customLocalization) return I18nUtil.resolveKey(name); return this.getIcon().getDisplayName(); } + + public boolean matchesSearch(String substring) { + return getName().toLowerCase(Locale.US).contains(substring.toLowerCase(Locale.US)); + } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 2c9ce4596..5c33d09d4 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -72,6 +72,7 @@ public abstract class GenericRecipes extends Serializab if(this.hasPower()) recipe.setPower(obj.get("power").getAsLong()); if(obj.has("icon")) recipe.setIcon(this.readItemStack(obj.get("icon").getAsJsonArray())); + if(obj.has("named") && obj.get("named").getAsBoolean()) recipe.setNamed(); readExtraData(element, recipe); @@ -117,6 +118,8 @@ public abstract class GenericRecipes extends Serializab this.writeItemStack(recipe.icon, writer); } + if(recipe.customLocalization) writer.name("named").value(true); + writeExtraData(recipe, writer); } From 4ae675aebc3cab064b0d83db78fcca683910e834 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 18:30:35 +0300 Subject: [PATCH 120/491] Fix autocrafter output slot This is the only case I found where a SlotPattern was supposed to support a stack size different from 1, but if there's any more, just add a `, true` to the end of the corresponsing slot constructor --- src/main/java/com/hbm/inventory/SlotPattern.java | 11 ++++++++++- .../hbm/inventory/container/ContainerAutocrafter.java | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/SlotPattern.java b/src/main/java/com/hbm/inventory/SlotPattern.java index 550fae5b6..a6957c7ac 100644 --- a/src/main/java/com/hbm/inventory/SlotPattern.java +++ b/src/main/java/com/hbm/inventory/SlotPattern.java @@ -10,10 +10,17 @@ import net.minecraft.item.ItemStack; public class SlotPattern extends Slot { protected boolean canHover = true; + + protected boolean allowStackSize = false; public SlotPattern(IInventory inv, int index, int x, int y) { super(inv, index, x, y); } + + public SlotPattern(IInventory inv, int index, int x, int y, boolean allowStackSize) { + super(inv, index, x, y); + this.allowStackSize = allowStackSize; + } @Override public boolean canTakeStack(EntityPlayer player) { @@ -29,7 +36,9 @@ public class SlotPattern extends Slot { public void putStack(ItemStack stack) { if (stack != null) { stack = stack.copy(); - stack.stackSize = 1; + + if (!allowStackSize) + stack.stackSize = 1; } super.putStack(stack); } diff --git a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java index f18f83c9f..2c8b0438b 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java +++ b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java @@ -24,7 +24,7 @@ public class ContainerAutocrafter extends ContainerBase { this.addSlotToContainer(new SlotPattern(tedf, j + i * 3, 44 + j * 18, 22 + i * 18)); } } - this.addSlotToContainer(new SlotPattern(tedf, 9, 116, 40)); + this.addSlotToContainer(new SlotPattern(tedf, 9, 116, 40, true)); /* RECIPE */ addSlots(tedf,10, 44, 86, 3, 3); From 4b3430f9b188d3cf5fe74d975796e54449a78e3a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 18:49:49 +0300 Subject: [PATCH 121/491] Scrollwheel support for template folder --- .../gui/GUIScreenTemplateFolder.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java index a91652ef0..398f4e1fb 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Locale; import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @@ -153,6 +154,7 @@ public class GUIScreenTemplateFolder extends GuiScreen { return (int) Math.ceil((stacks.size() - 1) / (5 * 7)); } + @Override public void updateScreen() { if(currentPage < 0) currentPage = 0; @@ -160,6 +162,7 @@ public class GUIScreenTemplateFolder extends GuiScreen { currentPage = getPageCount(); } + @Override public void drawScreen(int mouseX, int mouseY, float f) { this.drawDefaultBackground(); this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); @@ -168,6 +171,7 @@ public class GUIScreenTemplateFolder extends GuiScreen { GL11.glEnable(GL11.GL_LIGHTING); } + @Override public void initGui() { super.initGui(); this.guiLeft = (this.width - this.xSize) / 2; @@ -204,6 +208,26 @@ public class GUIScreenTemplateFolder extends GuiScreen { buttons.add(new FolderButton(guiLeft + 25 + (27 * 4) + 18, guiTop + 26 + (27 * 3), 2, "Next")); } + @Override + public void handleMouseInput() { + super.handleMouseInput(); + + if(Mouse.getEventButton() == -1) { + int scroll = Mouse.getEventDWheel(); + + if(scroll < 0) { + if(currentPage > 0) + currentPage--; + updateButtons(); + } else if(scroll > 0) { + if(currentPage < getPageCount()) + currentPage++; + updateButtons(); + } + } + } + + @Override protected void mouseClicked(int i, int j, int k) { if(i >= guiLeft + 45 && i < guiLeft + 117 && j >= guiTop + 211 && j < guiTop + 223) { @@ -251,6 +275,7 @@ public class GUIScreenTemplateFolder extends GuiScreen { search.drawTextBox(); } + @Override protected void keyTyped(char p_73869_1_, int p_73869_2_) { if (this.search.textboxKeyTyped(p_73869_1_, p_73869_2_)) { From a6740a35e9cd6b2c1d87e1fd6449e75560b8cd70 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 19:35:06 +0300 Subject: [PATCH 122/491] Make mass storage process input instantly This allows to shift-click an entire inventory-load into a mass storage. Previously this was bottlenecked by the network latency and the tile entity tickrate. Taking stuff out is unaffected for now, I'll see what I can do --- .../container/ContainerMassStorage.java | 37 ++++++++++--------- .../storage/TileEntityMassStorage.java | 24 +++++++++++- 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java index f8a760816..d0ffae2ee 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java @@ -27,32 +27,35 @@ public class ContainerMassStorage extends ContainerBase { } @Override - public ItemStack transferStackInSlot(EntityPlayer player, int par2) { - ItemStack var3 = null; - Slot var4 = (Slot) this.inventorySlots.get(par2); + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack result = null; + Slot slot = (Slot) this.inventorySlots.get(index); - if(var4 != null && var4.getHasStack()) { - ItemStack var5 = var4.getStack(); - var3 = var5.copy(); + if(slot != null && slot.getHasStack()) { + ItemStack initial = slot.getStack(); + result = initial.copy(); - if(par2 == 0 || par2 == 2) { - if(!this.mergeItemStack(var5, storage.getSizeInventory(), this.inventorySlots.size(), true)) { + if(index == 0 || index == 2) { + if(!this.mergeItemStack(initial, storage.getSizeInventory(), this.inventorySlots.size(), true)) { return null; } - } else if(!this.mergeItemStack(var5, 0, 1, false)) { - return null; - } - - if(var5.stackSize == 0) { - var4.putStack((ItemStack) null); } else { - var4.onSlotChanged(); + // Try to insert instantly, then fall back to regular slot behavior + if(!storage.insert(initial) && !this.mergeItemStack(initial, 0, 1, false)) { + return null; + } } - var4.onPickupFromSlot(player, var5); + if(initial.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, initial); } - return var3; + return result; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index d283b8269..fe6f15414 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -62,7 +62,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa if(this.getType() == null) this.stack = 0; - if(getType() != null && getStockpile() < getCapacity() && slots[0] != null && slots[0].isItemEqual(getType()) && ItemStack.areItemStackTagsEqual(slots[0], getType())) { + if(canInsert(slots[0])) { int remaining = getCapacity() - getStockpile(); int toRemove = Math.min(remaining, slots[0].stackSize); @@ -95,6 +95,26 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa } } + public boolean canInsert(ItemStack stack) { + return getType() != null && getStockpile() < getCapacity() && stack != null && stack.isItemEqual(getType()) && ItemStack.areItemStackTagsEqual(stack, getType()); + } + + public boolean insert(ItemStack stack) { + if (!canInsert(stack)) + return false; + + int remaining = getCapacity() - getStockpile(); + + if (remaining < stack.stackSize) + return false; + + this.stack += stack.stackSize; + stack.stackSize = 0; + this.markDirty(); + + return true; + } + @Override public void serialize(ByteBuf buf) { buf.writeInt(this.stack); @@ -196,9 +216,9 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa if(data.hasKey("toggle")) { this.output = !output; } + if(data.hasKey("slot") && this.getStockpile() <= 0){ setFilterContents(data); - if(slots[1] != null) slots[1].stackSize = 1; } } From 7ef016ccced5897d680009977334df7eac41f57b Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 20:09:13 +0300 Subject: [PATCH 123/491] Make mass storage process output instantly Same deal as previously, this bypasses the bottleneck of tile entity ticking and network latency. This change is less relevant than the previous one, because there shift-dragging or shift-double-clicking were possible with mods, while here it only really affects autoclickers. Still, it can't hurt --- .../container/ContainerMassStorage.java | 7 ++++++- .../storage/TileEntityMassStorage.java | 20 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java index d0ffae2ee..fae68ad3a 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java @@ -31,6 +31,11 @@ public class ContainerMassStorage extends ContainerBase { ItemStack result = null; Slot slot = (Slot) this.inventorySlots.get(index); + // Refill instantly if needed, then do regular slot behavior + if(index == 2 && slot != null && !slot.getHasStack()) { + slot.putStack(storage.quickExtract()); + } + if(slot != null && slot.getHasStack()) { ItemStack initial = slot.getStack(); result = initial.copy(); @@ -41,7 +46,7 @@ public class ContainerMassStorage extends ContainerBase { } } else { // Try to insert instantly, then fall back to regular slot behavior - if(!storage.insert(initial) && !this.mergeItemStack(initial, 0, 1, false)) { + if(!storage.quickInsert(initial) && !this.mergeItemStack(initial, 0, 1, false)) { return null; } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index fe6f15414..0618a1643 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -99,7 +99,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa return getType() != null && getStockpile() < getCapacity() && stack != null && stack.isItemEqual(getType()) && ItemStack.areItemStackTagsEqual(stack, getType()); } - public boolean insert(ItemStack stack) { + public boolean quickInsert(ItemStack stack) { if (!canInsert(stack)) return false; @@ -115,6 +115,24 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa return true; } + public ItemStack quickExtract() { + if (!output) { + return null; + } + + int amount = getType().getMaxStackSize(); + + if (getStockpile() < amount) + return null; + + ItemStack result = slots[1].copy(); + result.stackSize = amount; + this.stack -= amount; + this.markDirty(); + + return result; + } + @Override public void serialize(ByteBuf buf) { buf.writeInt(this.stack); From 169f1666e733f48e69277f3c28181274b288b83e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 20:39:44 +0300 Subject: [PATCH 124/491] Retain names for storage crates --- .../hbm/blocks/generic/BlockStorageCrate.java | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index 5e4a5937f..fa0258417 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -157,19 +157,26 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT if(!nbt.hasNoTags()) { drop.stackTagCompound = nbt; - - try { - byte[] abyte = CompressedStreamTools.compress(nbt); - - if(abyte.length > 6000) { - player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); - return world.setBlockToAir(x, y, z); - } - - } catch(IOException e) { } } + if(inv instanceof TileEntityCrateBase) { + TileEntityCrateBase crate = (TileEntityCrateBase) inv; + if (crate.hasCustomInventoryName()) { + drop.setStackDisplayName(crate.getInventoryName()); + } + } + + try { + byte[] abyte = CompressedStreamTools.compress(drop.stackTagCompound); + + if(abyte.length > 6000) { + player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); + return world.setBlockToAir(x, y, z); + } + + } catch(IOException e) { } + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop)); } @@ -220,8 +227,14 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT lockable.lock(); } } + if(inv instanceof TileEntityCrateBase) { - ((TileEntityCrateBase) inv).hasSpiders = stack.stackTagCompound.getBoolean("spiders"); + TileEntityCrateBase crate = (TileEntityCrateBase) inv; + crate.hasSpiders = stack.stackTagCompound.getBoolean("spiders"); + + if (stack.hasDisplayName()) { + crate.setCustomName(stack.getDisplayName()); + } } } From 0f7c8b49f311739f91923a0672b1ca4210e7427b Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 20:54:14 +0300 Subject: [PATCH 125/491] Fix crate NBT inconsistency in crates Apparently, a mined crate used to differ from a freshly crafted one because the former didn't have any spiders in it. The latter? Neither. --- .../java/com/hbm/blocks/generic/BlockStorageCrate.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index fa0258417..cd088bd22 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -152,8 +152,13 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT } } - if(inv instanceof TileEntityCrateBase) - nbt.setBoolean("spiders", ((TileEntityCrateBase) inv).hasSpiders); + if(inv instanceof TileEntityCrateBase) { + TileEntityCrateBase crate = (TileEntityCrateBase) inv; + // Saves memory and ensures consistency between crafted crates and mined ones + if (crate.hasSpiders) { + nbt.setBoolean("spiders", true); + } + } if(!nbt.hasNoTags()) { drop.stackTagCompound = nbt; From 4bc07d9cbf16e31e3da762ec01a80461ff5f2fe9 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 21:05:15 +0300 Subject: [PATCH 126/491] Add missing check --- .../hbm/blocks/generic/BlockStorageCrate.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index cd088bd22..02784843f 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -171,16 +171,18 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT } } - try { - byte[] abyte = CompressedStreamTools.compress(drop.stackTagCompound); + if (drop.hasTagCompound()) { + try { + byte[] abyte = CompressedStreamTools.compress(drop.stackTagCompound); - if(abyte.length > 6000) { - player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); - return world.setBlockToAir(x, y, z); - } + if(abyte.length > 6000) { + player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); + return world.setBlockToAir(x, y, z); + } - } catch(IOException e) { } + } catch(IOException e) { } + } world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop)); } From 6fb0b647fd02cce5f3385416263cb3a93270de3d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 21:34:48 +0300 Subject: [PATCH 127/491] Disable repair cost increment on rename Effectively a backport of a 1.8 feature. Relevant because otherwise a renamed crate is nbt-incompatible with itself after being placed and broken --- src/main/java/com/hbm/main/ModEventHandler.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index d587ebe4b..e9c5b35f8 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -107,6 +107,7 @@ import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.entity.living.*; import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; +import net.minecraftforge.event.entity.player.AnvilRepairEvent; import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.event.entity.player.PlayerFlyableFallEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -1248,6 +1249,15 @@ public class ModEventHandler { } } + @SubscribeEvent + public void onAnvilRepair(AnvilRepairEvent event) { + + // Anvil renaming no longer increments the repair cost + if(event.left != null && event.right == null && event.output != null) { + event.output.setRepairCost(event.left.getRepairCost()); + } + } + @SubscribeEvent public void onClickSign(PlayerInteractEvent event) { From 8970878e6b9cd59e13ae35271ca18c3a2682b78a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 21:47:16 +0300 Subject: [PATCH 128/491] Add look overlay to named crates I think this is better than signs for a crate-based stockpile. Only shows the name for now, but a contents summary might be included too. --- .../hbm/blocks/generic/BlockStorageCrate.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index 02784843f..5f0261791 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Random; import com.hbm.blocks.IBlockMulti; +import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.config.ServerConfig; @@ -39,8 +40,9 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent; -public class BlockStorageCrate extends BlockContainer implements IBlockMulti, ITooltipProvider { +public class BlockStorageCrate extends BlockContainer implements IBlockMulti, ILookOverlay, ITooltipProvider { @SideOnly(Side.CLIENT) private IIcon iconTop; @@ -374,4 +376,20 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT } } } + + @Override + public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) { + + TileEntity te = world.getTileEntity(x, y, z); + + if (!(te instanceof IInventory)) + return; + + IInventory inv = (IInventory) te; + + if (!inv.hasCustomInventoryName()) + return; + + ILookOverlay.printGeneric(event, inv.getInventoryName(), 0xffff00, 0x404000, new ArrayList(0)); + } } From cf26eac2c999a22deff1a64bae257c63efc134fd Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 22:41:58 +0300 Subject: [PATCH 129/491] Fix renaming hook --- src/main/java/com/hbm/main/ModEventHandler.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index e9c5b35f8..f1be76394 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -98,6 +98,7 @@ import net.minecraft.util.*; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.CommandEvent; import net.minecraftforge.event.ServerChatEvent; import net.minecraftforge.event.entity.EntityEvent; @@ -1251,10 +1252,10 @@ public class ModEventHandler { @SubscribeEvent public void onAnvilRepair(AnvilRepairEvent event) { - + // Anvil renaming no longer increments the repair cost - if(event.left != null && event.right == null && event.output != null) { - event.output.setRepairCost(event.left.getRepairCost()); + if(event.left == null && event.right != null && event.output != null) { + event.output.setRepairCost(event.right.getRepairCost()); } } From 5fe26d5647106ab5843c8c4c1e32fe1eab10f588 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 23:12:38 +0300 Subject: [PATCH 130/491] Fix renaming hook again Turns out, there's a bug in Forge and the stacks are misassigned for that particular event --- src/main/java/com/hbm/main/ModEventHandler.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index f1be76394..ce0d124cb 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -1252,10 +1252,11 @@ public class ModEventHandler { @SubscribeEvent public void onAnvilRepair(AnvilRepairEvent event) { - + // Anvil renaming no longer increments the repair cost + // Note: Forge has a bug, the names are wrong. Right is output, output is left, left is right if(event.left == null && event.right != null && event.output != null) { - event.output.setRepairCost(event.right.getRepairCost()); + event.right.setRepairCost(event.output.getRepairCost()); } } From 997fb201297c35c7adfddea7791baed4daf4d7dc Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 23:34:49 +0300 Subject: [PATCH 131/491] This time for sure --- src/main/java/com/hbm/main/ModEventHandler.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index ce0d124cb..29682d1b8 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -1256,7 +1256,17 @@ public class ModEventHandler { // Anvil renaming no longer increments the repair cost // Note: Forge has a bug, the names are wrong. Right is output, output is left, left is right if(event.left == null && event.right != null && event.output != null) { - event.right.setRepairCost(event.output.getRepairCost()); + int oldRepairCost = event.output.getRepairCost(); + + if (oldRepairCost > 0) { + event.right.setRepairCost(oldRepairCost); + } else if (event.right.hasTagCompound()) { + NBTTagCompound nbt = event.right.getTagCompound(); + nbt.removeTag("RepairCost"); + if (nbt.hasNoTags()) { + event.right.setTagCompound(null); + } + } } } From 8a7934d2743c8342bfca589b7915cfce4f577410 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 23:41:13 +0300 Subject: [PATCH 132/491] Fix custom name for crates opened from hand --- .../java/com/hbm/items/block/ItemBlockStorageCrate.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index cf24e36c3..620ca918c 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -122,7 +122,11 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider @Override public String getInventoryName() { - return findCrateType(target.getItem()).getInventoryName(); + TileEntityCrateBase tile = findCrateType(target.getItem()); + if (hasCustomInventoryName()) { + tile.setCustomName(target.getDisplayName()); + } + return tile.getInventoryName(); } @Override From 61acb3db45bae8f7755ecd33f95c05d49359b616 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 12:46:21 +0300 Subject: [PATCH 133/491] I turned myself into a bobblehead --- .../java/com/hbm/blocks/generic/BlockBobble.java | 7 ++++--- .../com/hbm/render/tileentity/RenderBobble.java | 6 ++++++ .../assets/hbm/textures/models/trinkets/abel.png | Bin 0 -> 2123 bytes 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/trinkets/abel.png diff --git a/src/main/java/com/hbm/blocks/generic/BlockBobble.java b/src/main/java/com/hbm/blocks/generic/BlockBobble.java index da175541c..067363c2d 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockBobble.java +++ b/src/main/java/com/hbm/blocks/generic/BlockBobble.java @@ -198,7 +198,7 @@ public class BlockBobble extends BlockContainer implements IGUIProvider, INBTTra INTELLIGENCE( "Intelligence", "Intelligence", null, "It takes the smartest individuals to realize$there's always more to learn.", false, ScrapType.BRIDGE_BUS), AGILITY( "Agility", "Agility", null, "Never be afraid to dodge the sensitive issues.", false, ScrapType.BRIDGE_CHIPSET), LUCK( "Luck", "Luck", null, "There's only one way to give 110%.", false, ScrapType.BRIDGE_CMOS), - BOB( "Robert \"The Bobcat\" Katzinsky", "HbMinecraft", "Hbm's Nuclear Tech Mod", "I know where you live, " + System.getProperty("user.name"), false, ScrapType.CPU_SOCKET), + BOB( "Robert \"The Bobcat\" Katzinsky", "HbMinecraft", "Hbm's Nuclear Tech Mod", "I know where you live, " + System.getProperty("user.name"), false, ScrapType.CPU_SOCKET), FRIZZLE( "Frooz", "Frooz", "Weapon models", "BLOOD IS FUEL", true, ScrapType.CPU_CLOCK), PU238( "Pu-238", "Pu-238", "Improved Tom impact mechanics", null, false, ScrapType.CPU_REGISTER), VT( "VT-6/24", "VT-6/24", "Balefire warhead model and general texturework", "You cannot unfuck a horse.", true, ScrapType.CPU_EXT), @@ -211,9 +211,10 @@ public class BlockBobble extends BlockContainer implements IGUIProvider, INBTTra NOS( "Dr Nostalgia", "Dr Nostalgia", "SSG and Vortex models", "Take a picture, I'ma pose, paparazzi$I've been drinking, moving like a zombie", true, ScrapType.BOARD_TRANSISTOR), DRILLGON( "Drillgon200", "Drillgon200", "1.12 Port", null, false, ScrapType.CPU_LOGIC), CIRNO( "Cirno", "Cirno", "the only multi layered skin i had", "No brain. Head empty.", true, ScrapType.BOARD_BLANK), - MICROWAVE( "Microwave", "Microwave", "OC Compatibility and massive RBMK/packet optimizations", "they call me the food heater$john optimization", true, ScrapType.BOARD_CONVERTER), + MICROWAVE( "Microwave", "Microwave", "OC Compatibility and massive RBMK/packet optimizations", "they call me the food heater$john optimization", true, ScrapType.BOARD_CONVERTER), PEEP( "Peep", "LePeeperSauvage", "Coilgun, Leadburster and Congo Lake models, BDCL QC", "Fluffy ears can't hide in ash, nor snow.", true, ScrapType.CARD_BOARD), - MELLOW( "MELLOWARPEGGIATION", "Mellow", "NBT Structures, industrial lighting, animation tools", "Make something cool now, ask for permission later.", true, ScrapType.CARD_PROCESSOR); + MELLOW( "MELLOWARPEGGIATION", "Mellow", "NBT Structures, industrial lighting, animation tools", "Make something cool now, ask for permission later.", true, ScrapType.CARD_PROCESSOR), + ABEL( "Abel1502", "Abel1502", "Abilities GUI, optimizations and many QoL improvements", "NANTO SUBARASHII!", true, ScrapType.CPU_REGISTER); public String name; //the title of the tooltip public String label; //the name engraved in the socket diff --git a/src/main/java/com/hbm/render/tileentity/RenderBobble.java b/src/main/java/com/hbm/render/tileentity/RenderBobble.java index 08dfa1283..979da575a 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBobble.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBobble.java @@ -50,6 +50,7 @@ public class RenderBobble extends TileEntitySpecialRenderer { public static final ResourceLocation bobble_peep = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/peep.png"); public static final ResourceLocation bobble_mellow = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/mellowrpg8.png"); public static final ResourceLocation bobble_mellow_glow = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/mellowrpg8_glow.png"); + public static final ResourceLocation bobble_abel = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/abel.png"); private long time; @@ -106,6 +107,7 @@ public class RenderBobble extends TileEntitySpecialRenderer { case MICROWAVE: bindTexture(bobble_microwave); break; case PEEP: bindTexture(bobble_peep); break; case MELLOW: bindTexture(bobble_mellow); break; + case ABEL: bindTexture(bobble_abel); break; default: bindTexture(ResourceManager.universal); } @@ -220,6 +222,10 @@ public class RenderBobble extends TileEntitySpecialRenderer { rotLeftLeg = new double[]{3, 5, 2}; rotRightLeg = new double[]{-3, -5, 0}; break; + case ABEL: + rotLeftArm = new double[]{0, 15, 80}; + rotRightArm = new double[]{0, 15, 80}; + break; } } diff --git a/src/main/resources/assets/hbm/textures/models/trinkets/abel.png b/src/main/resources/assets/hbm/textures/models/trinkets/abel.png new file mode 100644 index 0000000000000000000000000000000000000000..3e436bd03ac465d7788d3bda9d961789cea9f526 GIT binary patch literal 2123 zcmV-R2(4lZU+Y3#ukeOiaAl8W0Qy`4S-ENm>FS7K?2FV1_`}+km%z39Kh0 zc=F^)z8tS!y=rN^?RpkVLaDgHr%#{q@9x;KL;ZfbmcWSpkBMviA5lygo8A!hdD^1p2V7y|1s&auP`B{QP`QZgzH-5g2I! zz|7Cv0l;j$2#)ARX&+$+0L(bNO(+!NVAa>xD_*ZREg-nejGV{gQ2~}|06L70j`Cfi z(LMp~Vw>nj0YYzYucZb+V2l$15TBiBfvc&hNde1jdUFGu&tkt1wya8L!) z@AtDickZz2>S|LP@ZiA%=~xT|QzE!{CjuOeMmhaWn>O*^qM{-;K0eOM%gcEk!ub7u z1??grb8~ax*9Fj?KYz}(u&k_%p^k!fDzaq;`^N#m!KR_1f%W(ItAi>lD_K`p7Yhc1 zrT~P)Vd+@d1}b!TqGxK0#bT-k(5@4LcXf4f;n2UkyPFS#!1x6q_^qp}Q)j%Pp@9Q| z5)Ow|n&iguUOdd<89cc>9uFsW^ypEpqF@XSn5EmdZ`%SuHddA1q+-WS!U#gsqR}W9 ztfHbqfo7(|6Q}^lc(kJdb_A96u>%0c!d68h5l$u$2xx4Flkcyvz+`cWXeboY(>Jx+ zjg5`Uix)3gVPPS|FACMgcQU5Q(#zWQ{5=^P)2R07*qEhP5ot>SAbUVU2!m_`Abv;> z%4z`sz~b1!fdLJv=tY5);2vJHA0 zg1!dJ(bE1|X_O0y$^;`7#aE!F=w~Lp-r%JIfRQAk5q<3d!0*y7km_~-C@s!o6O;4I zw`&*c>%Y(Cs;aDEBV%KX+C*V7)7W*=W{29a$-&N)Y=;p5M)dSRu1W(Su)Y8cBLE